<?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>73059</bug_id>
          
          <creation_ts>2011-11-23 16:29:34 -0800</creation_ts>
          <short_desc>[chromium] Refactor tile drawing to be more data-driven</short_desc>
          <delta_ts>2011-12-14 16:23:53 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>70533</blocked>
    
    <blocked>73061</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrienne Walker">enne</reporter>
          <assigned_to name="Adrienne Walker">enne</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>508488</commentid>
    <comment_count>0</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-23 16:29:34 -0800</bug_when>
    <thetext>CCLayerImpl-derived classes all currently handle drawing themselves internally, making direct GL calls.  This is problematic for several reasons.  Testing these layers is tricky because testing must be done at a mock GL interface level rather than at a higher abstract level.  It makes culling closely dependent on how each layer draws.  It also makes some optimizations like layer squashing impossible.

To fix this, CCLayerImpl-derived classes should produce a set of quads to render with some basic information in them about how they are to be drawn.  This list can then be processed and drawn in a more data-driven and abstract manner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509502</commentid>
    <comment_count>1</comment_count>
      <attachid>116684</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-27 16:05:30 -0800</bug_when>
    <thetext>Created attachment 116684
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509503</commentid>
    <comment_count>2</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-27 16:06:49 -0800</bug_when>
    <thetext>This patch is a work in progress, and is not rebaselined against ToT.  It&apos;s rough around the edges, but it passes LayoutTests/compositing, barring a few small pixel differences on four tests (due to texture filtering, also scrollbars).

Despite trying to minimize what I touched, there&apos;s a lot of diffs in this patch so here&apos;s a brief overview.

CCRenderPass is a new class created to hold a surface and a set of quads to draw. CCLayerImpl-derived classes now have a fillRenderPass function that adds quads to be drawn to the pass.  CCLayerTreeHostImpl is now responsible for calling calculateDrawTransformsEtc and traverses the tree to generate passes.  LayerRendererChromium now only draws a render pass.  A begin/end frame function on LayerRendererChromium sets up state properly when drawing.  A future patch could abstract this into a better CCRenderer interface for testing purposes.

Most of the drawing code from CCTiledLayerImpl moved to a CCTileQuadRenderer class.  I also refactored it to have fewer conditionals, (hopefully) to be more straightforward, and to be robust to skipped or culled quads.  This class is used for tiled content.  Other &quot;single tile&quot; layers still call CCLayerImpl::draw, but future patches could easily disassociate quad setup from drawing code in other layer types.

I&apos;m not really happy with CCRenderPass itself, and would happily take suggestions.  One possibility would be to make QuadInfo virtual and then have CCTileQuadRenderer become a derived TiledQuadInfo class.  Testing or drawing multiple layers at once would then require upcasting using the material property as an RTTI hint to get at the derived data.  That&apos;s not that great, but maybe that&apos;s cleaner than the struct that&apos;s there now.

The other thing that seems a little ugly to me is that there&apos;s some work we do for every layer (e.g. state setting, debug border drawing) rather than per quad.  Right now I&apos;m detecting this when the layer pointer changes, but maybe this needs to be more explicit? I&apos;m not sure how to easily store that in CCRenderPass.  I&apos;ll happily take suggestions here (or on any of this).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509618</commentid>
    <comment_count>3</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-28 00:23:54 -0800</bug_when>
    <thetext>
Can we discuss offline the direction that CCRenderPass will go?

I&apos;m OK with intermediate versions along the way, but the design I thought we had agreed on was to hide the generation of quads to the internals of CCRenderPass.  The interface provided by CCRenderPass would have been to encapsulate the WTF::Vector layerList, and the conversion from layers to quads would happen inside CCRenderPass::drawLayersOntoTargetSurface

So I wonder if what we really want is a CCQuadList class, and that class would be the object that is passed around, ideally without ever being stored explicitly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509806</commentid>
    <comment_count>4</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-28 06:57:34 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; This patch is a work in progress, and is not rebaselined against ToT.  It&apos;s rough around the edges, but it passes LayoutTests/compositing, barring a few small pixel differences on four tests (due to texture filtering, also scrollbars).
&gt; 
&gt; Despite trying to minimize what I touched, there&apos;s a lot of diffs in this patch so here&apos;s a brief overview.
&gt; 
&gt; CCRenderPass is a new class created to hold a surface and a set of quads to draw. CCLayerImpl-derived classes now have a fillRenderPass function that adds quads to be drawn to the pass.  CCLayerTreeHostImpl is now responsible for calling calculateDrawTransformsEtc and traverses the tree to generate passes.  LayerRendererChromium now only draws a render pass.  A begin/end frame function on LayerRendererChromium sets up state properly when drawing.  A future patch could abstract this into a better CCRenderer interface for testing purposes.
&gt; 
&gt; Most of the drawing code from CCTiledLayerImpl moved to a CCTileQuadRenderer class.  I also refactored it to have fewer conditionals, (hopefully) to be more straightforward, and to be robust to skipped or culled quads.  This class is used for tiled content.  Other &quot;single tile&quot; layers still call CCLayerImpl::draw, but future patches could easily disassociate quad setup from drawing code in other layer types.
&gt; 
&gt; I&apos;m not really happy with CCRenderPass itself, and would happily take suggestions.  One possibility would be to make QuadInfo virtual and then have CCTileQuadRenderer become a derived TiledQuadInfo class.  Testing or drawing multiple layers at once would then require upcasting using the material property as an RTTI hint to get at the derived data.  That&apos;s not that great, but maybe that&apos;s cleaner than the struct that&apos;s there now.
&gt; 
&gt; The other thing that seems a little ugly to me is that there&apos;s some work we do for every layer (e.g. state setting, debug border drawing) rather than per quad.  Right now I&apos;m detecting this when the layer pointer changes, but maybe this needs to be more explicit? I&apos;m not sure how to easily store that in CCRenderPass.  I&apos;ll happily take suggestions here (or on any of this).

A couple of thoughts:

1) I agree that the quad transform would be best referenced from the layer if possible in this architecture. It seems wasteful to carry along a copy for every quad.

2) Could the check for transform invertability could be done once during CCTileQuadRenderer::beginLayer, and used to fast-forward over all quads for that layer if it&apos;s not invertible?

3) Regarding the work done when layers change, would it be reasonable to create a special QuadInfo type (CCRenderPass::TiledContentLayer?) to mark the start of each layer? Seeing this special quad would trigger the per-layer work, and it could contain the layer&apos;s visible rect and other useful info. It might be useful to have each TiledQuad contain a pointer to this QuadInfo for quick lookup if necessary.

4) I&apos;m guessing a &quot;SolidQuad&quot; and a &quot;ColoredQuad&quot; are the same? Can drawing solid quads be made part of CCTileQuadRenderer, would that simplify things by keeping the drawing of quads all in one place?

5) I agree that drawing custom layers as single, large tiles would be a useful simplification in future.

(In reply to comment #3)

&quot;Can we discuss offline the direction that CCRenderPass will go?&quot; - For the sake of those not in MTV, I&apos;d like to at least see a summary of any such discussions posted here :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509861</commentid>
    <comment_count>5</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-28 08:57:12 -0800</bug_when>
    <thetext>(In reply to comment #3)

&gt; I&apos;m OK with intermediate versions along the way, but the design I thought we had agreed on was to hide the generation of quads to the internals of CCRenderPass.  The interface provided by CCRenderPass would have been to encapsulate the WTF::Vector layerList, and the conversion from layers to quads would happen inside CCRenderPass::drawLayersOntoTargetSurface

Can you explain what you&apos;re proposing more? What does hiding the generation of quads inside CCRenderPass rather than CCLayerTreeHostImpl buy us?

In some previous discussions, folks mentioned a number of optimizations (culling, layer smashing, maybe there was a third?) that processed a list of quads.  Because of that, I figured that the list of quads should be mostly a bucket of data, and CCLayerTreeHostImpl should encapsulate any layer tree walking.  I think it&apos;ll be easier to test quad generation and those optimizations if the quad list is exposed and isn&apos;t smart.

&gt; So I wonder if what we really want is a CCQuadList class, and that class would be the object that is passed around, ideally without ever being stored explicitly?

How does a CCQuadList differ from CCRenderPass::m_quads? I don&apos;t follow what you&apos;re proposing.

(In reply to comment #4)
&gt; A couple of thoughts:
&gt; 
&gt; 1) I agree that the quad transform would be best referenced from the layer if possible in this architecture. It seems wasteful to carry along a copy for every quad.

Definitely.  There was no intention of that being in the final version--I just wanted to get a patch up so that we could start talking about this, and that detail was extraneous.

&gt; 2) Could the check for transform invertability could be done once during CCTileQuadRenderer::beginLayer, and used to fast-forward over all quads for that layer if it&apos;s not invertible?

Good point.  Perhaps that check should get moved to calculateDrawEtcEtcEtc.

&gt; 3) Regarding the work done when layers change, would it be reasonable to create a special QuadInfo type (CCRenderPass::TiledContentLayer?) to mark the start of each layer? Seeing this special quad would trigger the per-layer work, and it could contain the layer&apos;s visible rect and other useful info. It might be useful to have each TiledQuad contain a pointer to this QuadInfo for quick lookup if necessary.

I think I was trying to make culling simpler, by just letting it look at the quad list and not have to worry about layers.  Here are a couple of ways I considered making layers could be more explicit, but that complicated culling:

(1) If I had a separate array of layer info that contained offsets into the quad list for which quads came from which layer, then you&apos;d have to update those offsets when removing quads.
(2) If you had special quads in the quad list, you&apos;d have to remove them if you removed all the quads for that layer.
(3) If you added a flag to mark the first quad of a layer, you&apos;d have to carefully move that flag to other quads that if you removed that quad.

I also considered adding a separate &quot;Vector&lt;LayerInfo&gt;&quot; that contained all the layer data directly, but the extra copy of layer data didn&apos;t really add anything.  I ended up just pushing a few extra properties (swizzle, antialiased edges) onto the base class instead.  If we ever make render surfaces their own layer type, they can reuse the antialiased edge flag.
 
&gt; 4) I&apos;m guessing a &quot;SolidQuad&quot; and a &quot;ColoredQuad&quot; are the same? Can drawing solid quads be made part of CCTileQuadRenderer, would that simplify things by keeping the drawing of quads all in one place?

Yes.  See also: rough around the edges.

I don&apos;t feel strongly about where the drawing code should go.  Maybe CCTileQuadRenderer =&gt; CCQuadRenderer and we keep all the quad drawing code there? I made CCTileQuadRenderer its own class because it needs to calculate data per layer (like device transforms and inflated quads for antialiased edges) and I wanted to encapsulate that complexity.

&gt; 5) I agree that drawing custom layers as single, large tiles would be a useful simplification in future.

Yeah.  Other than maybe YUV video, I would suspect that we could probably combine a number of shaders in the future.  Or, at least draw different layers with the same set of shaders.

&gt; (In reply to comment #3)
&gt; 
&gt; &quot;Can we discuss offline the direction that CCRenderPass will go?&quot; - For the sake of those not in MTV, I&apos;d like to at least see a summary of any such discussions posted here :-)

Definitely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509873</commentid>
    <comment_count>6</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-28 09:08:57 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; 3) Regarding the work done when layers change, would it be reasonable to create a special QuadInfo type (CCRenderPass::TiledContentLayer?) to mark the start of each layer? Seeing this special quad would trigger the per-layer work, and it could contain the layer&apos;s visible rect and other useful info. It might be useful to have each TiledQuad contain a pointer to this QuadInfo for quick lookup if necessary.
&gt; 
&gt; I think I was trying to make culling simpler, by just letting it look at the quad list and not have to worry about layers.  Here are a couple of ways I considered making layers could be more explicit, but that complicated culling:
&gt; 
&gt; (1) If I had a separate array of layer info that contained offsets into the quad list for which quads came from which layer, then you&apos;d have to update those offsets when removing quads.
&gt; (2) If you had special quads in the quad list, you&apos;d have to remove them if you removed all the quads for that layer.

Good point. Although, if you left them in, e.g. two special layer quads side by side, it would still work fine (sort of a no-op).

&gt; (3) If you added a flag to mark the first quad of a layer, you&apos;d have to carefully move that flag to other quads that if you removed that quad.

Yes, I specifically didn&apos;t want to propose a &quot;first tile&quot; flag for this reason.

&gt; I also considered adding a separate &quot;Vector&lt;LayerInfo&gt;&quot; that contained all the layer data directly, but the extra copy of layer data didn&apos;t really add anything.  I ended up just pushing a few extra properties (swizzle, antialiased edges) onto the base class instead.  If we ever make render surfaces their own layer type, they can reuse the antialiased edge flag.
&gt; 

For culling, at least in the first iterations, it will be useful to compare tiles (quads) against entire layers, as this simplifies testing - one large rect instead of the union of a bunch of rects.

This could be done by using the layer pointer in QuadInfo&apos;s, but it would be inefficient as you&apos;d check the same layer multiple times.

In a more efficient (aka later) version of the culler, layers might not be needed (just build up the coverage rect from quads in reverse draw order, although this won&apos;t always be representable by a single rect).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509906</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-28 09:59:56 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)

&gt; &gt; (2) If you had special quads in the quad list, you&apos;d have to remove them if you removed all the quads for that layer.
&gt; 
&gt; Good point. Although, if you left them in, e.g. two special layer quads side by side, it would still work fine (sort of a no-op).

There&apos;s work that gets done per layer (like turning on states and drawing debug borders), so it&apos;s not entirely a no-op even if that work is fairly negligible.

Also, any quad list processor would have to be aware of those special quads, e.g. the culler would have to be sure not to cull them.

&gt; For culling, at least in the first iterations, it will be useful to compare tiles (quads) against entire layers, as this simplifies testing - one large rect instead of the union of a bunch of rects.
&gt; 
&gt; This could be done by using the layer pointer in QuadInfo&apos;s, but it would be inefficient as you&apos;d check the same layer multiple times.

In the first iteration, you could rebuild a list of layers from the quad list, or just skip the layer if you&apos;ve already checked it.  The quad list is necessarily sorted by layer, so it&apos;d be an easy check.  Is that plausible?

&gt; In a more efficient (aka later) version of the culler, layers might not be needed (just build up the coverage rect from quads in reverse draw order, although this won&apos;t always be representable by a single rect).

I&apos;m definitely hoping that you can take an eye to this patch with where culling is in the short term and will be in the long term, and sanity check that it&apos;s in line with your plans.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509911</commentid>
    <comment_count>8</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-28 10:05:17 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; 
&gt; &gt; &gt; (2) If you had special quads in the quad list, you&apos;d have to remove them if you removed all the quads for that layer.
&gt; &gt; 
&gt; &gt; Good point. Although, if you left them in, e.g. two special layer quads side by side, it would still work fine (sort of a no-op).
&gt; 
&gt; There&apos;s work that gets done per layer (like turning on states and drawing debug borders), so it&apos;s not entirely a no-op even if that work is fairly negligible.

Can you check if the next one is also a layer and do nothing when true?

&gt; Also, any quad list processor would have to be aware of those special quads, e.g. the culler would have to be sure not to cull them.

Can this be done in an iterator? So you&apos;d have a quad iterator and a quad+layer iterator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509915</commentid>
    <comment_count>9</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-28 10:08:29 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; 
&gt; &gt; &gt; (2) If you had special quads in the quad list, you&apos;d have to remove them if you removed all the quads for that layer.
&gt; &gt; 
&gt; &gt; Good point. Although, if you left them in, e.g. two special layer quads side by side, it would still work fine (sort of a no-op).
&gt; 
&gt; There&apos;s work that gets done per layer (like turning on states and drawing debug borders), so it&apos;s not entirely a no-op even if that work is fairly negligible.
&gt; 
&gt; Also, any quad list processor would have to be aware of those special quads, e.g. the culler would have to be sure not to cull them.
&gt; 
&gt; &gt; For culling, at least in the first iterations, it will be useful to compare tiles (quads) against entire layers, as this simplifies testing - one large rect instead of the union of a bunch of rects.
&gt; &gt; 
&gt; &gt; This could be done by using the layer pointer in QuadInfo&apos;s, but it would be inefficient as you&apos;d check the same layer multiple times.
&gt; 
&gt; In the first iteration, you could rebuild a list of layers from the quad list, or just skip the layer if you&apos;ve already checked it.  The quad list is necessarily sorted by layer, so it&apos;d be an easy check.  Is that plausible?

Certainly :-)

&gt; &gt; In a more efficient (aka later) version of the culler, layers might not be needed (just build up the coverage rect from quads in reverse draw order, although this won&apos;t always be representable by a single rect).
&gt; 
&gt; I&apos;m definitely hoping that you can take an eye to this patch with where culling is in the short term and will be in the long term, and sanity check that it&apos;s in line with your plans.

Indeed ... there&apos;s nothing here at present that seems like a show-stopper for culling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511730</commentid>
    <comment_count>10</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-11-30 07:21:10 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; 
&gt; Can this be done in an iterator? So you&apos;d have a quad iterator and a quad+layer iterator.

Actually, I like the iterator idea: if each QuadInfo carried an iterator into the layerList, it would be easy for a quad to do layer-based coverage operations on the subsequent layers (or, if we&apos;re walking the quad list backwards for culling, know efficiently when to add the next layer to the coverage map).

If Quads themselves are based on iterators, it would be nice to have bi-directional ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517196</commentid>
    <comment_count>11</comment_count>
      <attachid>118333</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-07 22:56:11 -0800</bug_when>
    <thetext>Created attachment 118333
Round 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517203</commentid>
    <comment_count>12</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-07 23:05:26 -0800</bug_when>
    <thetext>Sorry to take so long to get back to this.

This patch got a lot larger after some design brainstorming with Nat, Shawn, and James about how to store data in CCRenderPass.  After some back and forth, we decided that we should create a bit of shared layer state (which I named CCSharedLayerState).  This seems better than having pointers to layers directly and it keeps quads divorced from the layers that generate them.  It also seems better than making a &quot;fat&quot; quad that contains all of that data directly.

Nat made the argument that optimizing for state setting is silly, so rather than detecting when layers change, we just set up state on a per-quad basis.  So, rather than creating an iterator that&apos;s smart about detecting layer changes, we just have a single ordered quad list, and that&apos;s it.  I think that&apos;s much simpler for everyone.

And, rather than having each quad contain all the data for all quad types, there&apos;s a derived quad type to hold additional pieces of data (e.g. texture data for tile quads).  Each different material gets its own CCDrawQuad-derived class, but these classes contain no virtual functions and are just a bag of data.  The CCDrawQuad class is essentially just a glorified union.  In LayerRendererChromium, the material enum on a quad is a roll-your-own-RTTI mechanism, and we upcast to the derived type using that.  Oh, C++ boilerplate.

Debug borders are now specified as quads themselves; I forgot who made that suggestion, but it&apos;s a great idea.

In the short term, it was easier to have one quad type that had a hacky backpointer to its layer in order to draw than moving all drawing functions to LayerRendererChromium.  These layer types are all &quot;one quad&quot; layers, so culling can proceed right after this patch without needing that refactoring.

If this patch is too big, I think I could probably separate out moving code out of LayerRendererChromium and into CCLayerTreeHostImpl into a different patch.

There are a few pixel differences in three layout tests, largely due to the fact that I&apos;m not using the AA shader on non-edge quads, but tests otherwise pass.  I do need to mark those as failing still.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517250</commentid>
    <comment_count>13</comment_count>
      <attachid>118333</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-12-08 01:22:48 -0800</bug_when>
    <thetext>Comment on attachment 118333
Round 2

I like where this patch is going!
Have you considered converting the RenderPass into just another type of CCDrawQuad which itself contains a CCQuadList?  That way, the entire scene could be rendered by traversing the top level CCQuadLIst instead of having to loop through RenderPasses.  Conceptually, what you call a RenderPass is really just another DrawQuad with a special rule on how it draws its contents. One of the advantages is that we won&apos;t need to duplicate the loop over RenderPasses every time we need to traverse all the DrawQuads.  For example, if we wanted to implement culling of completely occluded Quads, we could simply traverse the top level CCQuadList backwards.  Any RenderSurface that&apos;s completely occluded can be marked as skipped and we won&apos;t have to ever draw its contents into an intermediate texture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517348</commentid>
    <comment_count>14</comment_count>
      <attachid>118333</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-08 05:53:42 -0800</bug_when>
    <thetext>Comment on attachment 118333
Round 2

Attachment 118333 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10790229

New failing tests:
compositing/geometry/vertical-scroll-composited.html
compositing/color-matching/image-color-matching.html
compositing/scaling/tiled-layer-recursion.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517511</commentid>
    <comment_count>15</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-08 10:09:37 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 118333 [details])
&gt; Have you considered converting the RenderPass into just another type of CCDrawQuad which itself contains a CCQuadList?  That way, the entire scene could be rendered by traversing the top level CCQuadList instead of having to loop through RenderPasses.  Conceptually, what you call a RenderPass is really just another DrawQuad with a special rule on how it draws its contents. One of the advantages is that we won&apos;t need to duplicate the loop over RenderPasses every time we need to traverse all the DrawQuads.  For example, if we wanted to implement culling of completely occluded Quads, we could simply traverse the top level CCQuadList backwards.  Any RenderSurface that&apos;s completely occluded can be marked as skipped and we won&apos;t have to ever draw its contents into an intermediate texture.

I&apos;m not convinced that iteration becomes simpler if we go to a full tree structure rather than a vector of vector of leaf nodes.  I think it moves complexity around, because occlusion and drawing orders are so different.

A (root RS) - B - C (RS) - D
              |
              + - E - F

In the above tree, A and C have render surfaces.  E is a sibling of C and draws after C.  From the perspective of efficient drawing, we want to first bind C as a target, draw D, then bind A, draw B, C as a source, E, and F.  From the perspective of occlusion, we could do what you say and walk the tree backwards.  F could occlude E.  E could occlude C and D.

I think iteration to draw would be complicated in that scheme.  You&apos;d have to walk through the tree backwards to find render surfaces, and then forwards through each of those render surfaces.  And, you&apos;d have to treat C differently in each case, kind of like we do now with layers with surfaces that act as target and source?

It would be helpful if I had any sense of where drawing occlusion is going to be going in the future.  Could we just build up a set of occluders during a pre-draw tree walk and then look up in some efficient data structure if a given layer is going to be occluded right before we draw it? If so, then I think the current scheme is conceptually simpler for both culling and drawing.

It&apos;s an excellent point that we need some mechanism to inform surfaces-as-targets that their surfaces-as-sources have been occluded.  If we had such a pre-built occlusion data structure, we could simply store a pointer or copy of the CCRenderSurfaceDrawQuad that corresponds to the CCRenderPass in the CCRenderPass itself and do an occlusion check before we bind and draw into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517713</commentid>
    <comment_count>16</comment_count>
      <attachid>118333</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-08 13:01:41 -0800</bug_when>
    <thetext>Comment on attachment 118333
Round 2

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

&gt; Source/WebCore/platform/graphics/chromium/NonCompositedContentHost.cpp:47
&gt; +    m_graphicsLayer-&gt;setOpacity(1);
&gt; +    m_graphicsLayer-&gt;setContentsOpaque(true);

i think this should be (or possibly already is?) a separate patch. for one it&apos;ll conflict with my moving of NCCH.cpp

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.cpp:47
&gt; +    return reinterpret_cast&lt;const CCDebugBorderDrawQuad*&gt;(this);

static_cast&lt;&gt; is better than reinterpret_cast&lt;&gt; here, I think

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h:78
&gt; +    RefPtr&lt;CCSharedQuadState&gt; m_sharedQuadState;

I would strongly prefer that this not be reference counted. Instead, the owner of the set of quads that share the data should have single ownership of the shared quad state. This could live inside CCRenderPass or QuadList itself could be promoted to a class to own both the list of quads and a list of shared state used by those quads. Or, if we want to share this state across multiple passes, define a class that owns the set of CCRenderPass or QuadLists used for a certain frame and have it own the list of CCSharedQuadStates.

We don&apos;t need these objects to live across frames, since we regenerate transforms and stuff every frame, so they definitely can have a bounded lifetime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517719</commentid>
    <comment_count>17</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-08 13:09:56 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 118333 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118333&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/NonCompositedContentHost.cpp:47
&gt; &gt; +    m_graphicsLayer-&gt;setOpacity(1);
&gt; &gt; +    m_graphicsLayer-&gt;setContentsOpaque(true);
&gt; 
&gt; i think this should be (or possibly already is?) a separate patch. for one it&apos;ll conflict with my moving of NCCH.cpp

Looks a lot like what https://bugs.webkit.org/show_bug.cgi?id=70564 was doing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517791</commentid>
    <comment_count>18</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-08 14:24:27 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 118333 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118333&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/NonCompositedContentHost.cpp:47
&gt; &gt; +    m_graphicsLayer-&gt;setOpacity(1);
&gt; &gt; +    m_graphicsLayer-&gt;setContentsOpaque(true);
&gt; 
&gt; i think this should be (or possibly already is?) a separate patch. for one it&apos;ll conflict with my moving of NCCH.cpp

Oops.  I meant to remove that after Dana&apos;s opacity patch landed.  Fixed.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.cpp:47
&gt; &gt; +    return reinterpret_cast&lt;const CCDebugBorderDrawQuad*&gt;(this);
&gt; 
&gt; static_cast&lt;&gt; is better than reinterpret_cast&lt;&gt; here, I think

Not sure why I did that.  Fixed.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h:78
&gt; &gt; +    RefPtr&lt;CCSharedQuadState&gt; m_sharedQuadState;
&gt; 
&gt; I would strongly prefer that this not be reference counted. Instead, the owner of the set of quads that share the data should have single ownership of the shared quad state. This could live inside CCRenderPass or QuadList itself could be promoted to a class to own both the list of quads and a list of shared state used by those quads. Or, if we want to share this state across multiple passes, define a class that owns the set of CCRenderPass or QuadLists used for a certain frame and have it own the list of CCSharedQuadStates.
&gt; 
&gt; We don&apos;t need these objects to live across frames, since we regenerate transforms and stuff every frame, so they definitely can have a bounded lifetime.

I started down that path, but using a RefPtr seemed less prone to failure, because a layer creates this information, the CCRenderPass has to store it, and then we hand it off to quads as a raw pointer, with the hopes that it&apos;s actually owned.  Maybe I can structure functions in such a way where this isn&apos;t possible.  I&apos;ll give it a shot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517836</commentid>
    <comment_count>19</comment_count>
      <attachid>118477</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-08 15:11:58 -0800</bug_when>
    <thetext>Created attachment 118477
Remove RefPtr, rebase, etc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518391</commentid>
    <comment_count>20</comment_count>
      <attachid>118477</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-09 12:20:44 -0800</bug_when>
    <thetext>Comment on attachment 118477
Remove RefPtr, rebase, etc


This patch seems really great to me. I have only a few minor comments.

FYI I did not look closely at the tiler / shader portions of the patch.  I focused primarily on the CCLayerTreeHost, LayerRendererChromium, the CCDrawQuad classes.


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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:171
&gt; +    void drawDebugBorderQuad(const CCDebugBorderDrawQuad*);
&gt; +    void drawRenderSurfaceQuad(const CCRenderSurfaceDrawQuad*);
&gt; +    void drawSolidColorQuad(const CCSolidColorDrawQuad*);
&gt; +    void drawTileQuad(const CCTileDrawQuad*);
&gt; +    void drawCustomLayerQuad(const CCCustomLayerDrawQuad*);

Perhaps we could make these static functions, and we pass the context as an arg to them?  My reasoning:  (1) making them static would clearly indicate that they are stateless helper functions.  (2) would help separate them from drawQuad, which should not be static, and lives in a different level of abstraction.  But if there&apos;s a reason to keep them non-static, thats OK too.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCCustomLayerDrawQuad.h:36
&gt; +class CCCustomLayerDrawQuad : public CCDrawQuad {

Could we add a FIXME comment reminding ourselves that this class is only going to be in the code for a while, as we migrate/refactor?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h:39
&gt; +// CCDrawQuad is a bag of data used for drawing a quad. Because different

The word &quot;Draw&quot; could make things confusing down the road, because it is technically verb and we&apos;re using it as part of a noun phrase, &quot;draw quad&quot;.  Instead, could we just call it CCQuad? or, if we really need, could we say CCDrawableQuad?   (I prefer CCQuad)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h:43
&gt; +class CCDrawQuad {

I think we should plan in advance to make this object serializable, so that we can use lists of quads as an output (or input) for integration tests.  That might mean we should consider using virtual inheritance and make the CCDrawQuad a pure virtual interface?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:171
&gt; +    renderSurfaceLayerList.append(rootLayer());
&gt; +
&gt; +    if (!rootLayer()-&gt;renderSurface())
&gt; +        rootLayer()-&gt;createRenderSurface();
&gt; +    rootLayer()-&gt;renderSurface()-&gt;clearLayerList();
&gt; +    rootLayer()-&gt;renderSurface()-&gt;setContentRect(IntRect(IntPoint(), viewportSize()));
&gt; +
&gt; +    rootLayer()-&gt;setClipRect(IntRect(IntPoint(), viewportSize()));

Maybe in a future patch, we could make this &quot;special root initialization&quot; disappear, fold it into calculateDrawTransformsAndVisibility.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:204
&gt; +        FloatRect surfaceDamageRect;
&gt; +        if (layerRendererCapabilities().usingPartialSwap) {
&gt; +            // For now, we conservatively use the root damage as the damage for
&gt; +            // all surfaces, except perspective transforms.
&gt; +            TransformationMatrix screenSpaceTransform = computeScreenSpaceTransformForSurface(renderSurfaceLayer);
&gt; +            if (screenSpaceTransform.hasPerspective()) {
&gt; +                // Perspective projections do not play nice with mapRect of
&gt; +                // inverse transforms. In this uncommon case, its simpler to
&gt; +                // just redraw the entire surface.
&gt; +                // FIXME: use calculateVisibleRect to handle projections.
&gt; +                surfaceDamageRect = renderSurface-&gt;contentRect();
&gt; +            } else {
&gt; +                TransformationMatrix inverseScreenSpaceTransform = screenSpaceTransform.inverse();
&gt; +                surfaceDamageRect = inverseScreenSpaceTransform.mapRect(rootDamageRect);
&gt; +            }
&gt; +        }

In retrospect, I think this is good code to make into a separate function computeDamageInSurfaceSpace() - would it be OK with you to do that in this patch please?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:213
&gt; +            if (layer-&gt;renderSurface() &amp;&amp; layer-&gt;renderSurface() != renderSurface) {

We should probably use the helper function, renderSurfaceContributesToTarget(), defined in CCLayerTreeHostCommon.h instead of this.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:225
&gt;  void CCLayerTreeHostImpl::drawLayers()

I REALLY like how this function turned out.  I think you found very satisfying abstractions to provide in the layerRenderer object. =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518417</commentid>
    <comment_count>21</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-09 12:47:47 -0800</bug_when>
    <thetext>I really like the CCQuad idea as well, FWIW</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518428</commentid>
    <comment_count>22</comment_count>
      <attachid>118477</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-09 12:55:09 -0800</bug_when>
    <thetext>Comment on attachment 118477
Remove RefPtr, rebase, etc

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:171
&gt;&gt; +    void drawCustomLayerQuad(const CCCustomLayerDrawQuad*);
&gt; 
&gt; Perhaps we could make these static functions, and we pass the context as an arg to them?  My reasoning:  (1) making them static would clearly indicate that they are stateless helper functions.  (2) would help separate them from drawQuad, which should not be static, and lives in a different level of abstraction.  But if there&apos;s a reason to keep them non-static, thats OK too.

I need a bunch of extra information from the layer renderer, like projection matrix and window matrix and all of the shader programs.  I could make them all const, if that would help.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCCustomLayerDrawQuad.h:36
&gt;&gt; +class CCCustomLayerDrawQuad : public CCDrawQuad {
&gt; 
&gt; Could we add a FIXME comment reminding ourselves that this class is only going to be in the code for a while, as we migrate/refactor?

Will do.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h:39
&gt;&gt; +// CCDrawQuad is a bag of data used for drawing a quad. Because different
&gt; 
&gt; The word &quot;Draw&quot; could make things confusing down the road, because it is technically verb and we&apos;re using it as part of a noun phrase, &quot;draw quad&quot;.  Instead, could we just call it CCQuad? or, if we really need, could we say CCDrawableQuad?   (I prefer CCQuad)

I thought about CCQuad, but decided to call it CCDrawQuad to differentiate from CCLayerQuad or FloatQuad, which are all very different things.  I can make it CCQuad if that&apos;s what other people want and they don&apos;t think it&apos;d be confused with CCLayerQuad.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h:43
&gt;&gt; +class CCDrawQuad {
&gt; 
&gt; I think we should plan in advance to make this object serializable, so that we can use lists of quads as an output (or input) for integration tests.  That might mean we should consider using virtual inheritance and make the CCDrawQuad a pure virtual interface?

I don&apos;t follow.  Why does this object need to be serialized? How would a pure virtual interface help with that? If necessary, can it wait until a later patch?

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:171
&gt;&gt; +    rootLayer()-&gt;setClipRect(IntRect(IntPoint(), viewportSize()));
&gt; 
&gt; Maybe in a future patch, we could make this &quot;special root initialization&quot; disappear, fold it into calculateDrawTransformsAndVisibility.

Definitely.  I feel like the root layer / root surface needs to be less special in a number of ways.  This is one.  Clear color is another.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:204
&gt;&gt; +        }
&gt; 
&gt; In retrospect, I think this is good code to make into a separate function computeDamageInSurfaceSpace() - would it be OK with you to do that in this patch please?

Will do.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:213
&gt;&gt; +            if (layer-&gt;renderSurface() &amp;&amp; layer-&gt;renderSurface() != renderSurface) {
&gt; 
&gt; We should probably use the helper function, renderSurfaceContributesToTarget(), defined in CCLayerTreeHostCommon.h instead of this.

Excellent point.  I&apos;m not sure where I picked this code up from.  I&apos;ll fix it.  (Hopefully it can go away soon.)

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:225
&gt;&gt;  void CCLayerTreeHostImpl::drawLayers()
&gt; 
&gt; I REALLY like how this function turned out.  I think you found very satisfying abstractions to provide in the layerRenderer object. =)

I&apos;m glad you feel that way.  I know it was a point of contention before.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518433</commentid>
    <comment_count>23</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-09 13:03:42 -0800</bug_when>
    <thetext>Gah, forgot about CCLayerQuad.  CCDrawQuad sounds OK....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518456</commentid>
    <comment_count>24</comment_count>
      <attachid>118624</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-09 13:34:43 -0800</bug_when>
    <thetext>Created attachment 118624
Address Shawn&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518458</commentid>
    <comment_count>25</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-09 13:35:29 -0800</bug_when>
    <thetext>
I was imagining that we need to serialize (as opposed to programmatically verify conditions with gtest) so that we have an output that we can also visualize when trying to debug.  If we do want to serialize, it seemed cleaner to virtualize the function, so that we don&apos;t end up with several different wrapper functions like drawQuad that have a switch statement.

Its OK with me to deal with this in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518461</commentid>
    <comment_count>26</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-09 13:37:28 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; Created an attachment (id=118624) [details]
&gt; Address Shawn&apos;s comments

I couldn&apos;t make the draw functions const, because they&apos;re changing stuff on the graphics context.  So, I left that as-is.

I added the fixme, the use of that templated contributes to surface function, and moved the surface damage rect to its own function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518622</commentid>
    <comment_count>27</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-09 16:09:14 -0800</bug_when>
    <thetext>*** Bug 72965 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518678</commentid>
    <comment_count>28</comment_count>
      <attachid>118624</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-09 17:32:19 -0800</bug_when>
    <thetext>Comment on attachment 118624
Address Shawn&apos;s comments

Did you give any thought to moving functions that you&apos;re adding to LayerRendererChromium to cc/CCRendererChromiumGL or something and make that new class inherit from LRC temporarily? That way we can start (slowly but surely) moving this file to its correct home.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518728</commentid>
    <comment_count>29</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-09 18:37:13 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 118624 [details])
&gt; Did you give any thought to moving functions that you&apos;re adding to LayerRendererChromium to cc/CCRendererChromiumGL or something and make that new class inherit from LRC temporarily? That way we can start (slowly but surely) moving this file to its correct home.

I think what we&apos;ll actually do is once we&apos;ve moved all of the logic that isn&apos;t GL-specific out of LRC then we&apos;ll just rename LRC-&gt;CCRendererGL or something like that. With that as a migration path, adding new GL-specific functionality to LRC is fine.  By that logic drawRenderPass() could conceivable go outside of LRC but the rest looks pretty GL-specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518729</commentid>
    <comment_count>30</comment_count>
      <attachid>118624</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-09 18:39:09 -0800</bug_when>
    <thetext>Comment on attachment 118624
Address Shawn&apos;s comments

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

&gt; Source/WebCore/platform/graphics/chromium/ShaderChromium.h:150
&gt; +    int alphaLocation() const { return -1; }

are these supposed to be virtual? I see that, for instance, FragmentTexAlphaBinding shadows this function but doesn&apos;t override it. since we normally use templates to dispatch callsites will statically resolve to the right function, but then i don&apos;t understand what the purpose if this base class is or why it has member functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518821</commentid>
    <comment_count>31</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-10 13:10:42 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 118624 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118624&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ShaderChromium.h:150
&gt; &gt; +    int alphaLocation() const { return -1; }
&gt; 
&gt; are these supposed to be virtual? I see that, for instance, FragmentTexAlphaBinding shadows this function but doesn&apos;t override it. since we normally use templates to dispatch callsites will statically resolve to the right function, but then i don&apos;t understand what the purpose if this base class is or why it has member functions

Hmm. They should probably be virtual.  It&apos;s not like we ever call anything from a base class pointer, but overriding is better than shadowing.

The reason is to simplify all tile shader programs to have the same set of uniform getters, regardless of whether they have antialiased edges or are opaque.  It let me write a single &quot;collect uniforms&quot; templated function in LayerRendererChromium and then we can avoid templatizing anything else from then on out, rather than having the whole drawTiles() function be templatized, like it used to be.  I thought the resulting code ended up simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519331</commentid>
    <comment_count>32</comment_count>
      <attachid>118816</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-12 10:43:08 -0800</bug_when>
    <thetext>Created attachment 118816
Clean up quad opacity/opaque</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519336</commentid>
    <comment_count>33</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-12 10:45:53 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; Created an attachment (id=118816) [details]
&gt; Clean up quad opacity/opaque

Dana mentioned that CCDrawQuad::isOpaque should be called something different if it&apos;s going to combine opacity=1 and contents opaque.  So, I renamed it drawsOpaque() and cleaned up how derived classes flagged that they were transparent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520517</commentid>
    <comment_count>34</comment_count>
      <attachid>119118</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-13 17:19:48 -0800</bug_when>
    <thetext>Created attachment 119118
Fix ToT merge conflicts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521179</commentid>
    <comment_count>35</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 12:26:22 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; (From update of attachment 118624 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118624&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/ShaderChromium.h:150
&gt; &gt; &gt; +    int alphaLocation() const { return -1; }
&gt; &gt; 
&gt; &gt; are these supposed to be virtual? I see that, for instance, FragmentTexAlphaBinding shadows this function but doesn&apos;t override it. since we normally use templates to dispatch callsites will statically resolve to the right function, but then i don&apos;t understand what the purpose if this base class is or why it has member functions
&gt; 
&gt; Hmm. They should probably be virtual.  It&apos;s not like we ever call anything from a base class pointer, but overriding is better than shadowing.
&gt; 
&gt; The reason is to simplify all tile shader programs to have the same set of uniform getters, regardless of whether they have antialiased edges or are opaque.  It let me write a single &quot;collect uniforms&quot; templated function in LayerRendererChromium and then we can avoid templatizing anything else from then on out, rather than having the whole drawTiles() function be templatized, like it used to be.  I thought the resulting code ended up simpler.

I don&apos;t see any code that actually uses the FragmentTileBindingBase class directly. Does it just exist to make sure that there&apos;s a definition for each of the *Location() getters so the template instantiation succeeds for each program type? I&apos;m nervous because this depends on getting the _static_ type of the Program* passed to tileUniformLocation() correct. If someone gets the static type wrong by doing something innocuous looking like implicitly converting a pointer to a pointer to the base class and then passes it to this function everything will compile fine and run without complaint but produce the wrong result.

I think I&apos;d prefer adding getters that return -1 to FragmentTexAlphaBinding and FragmentTexOpaqueBinding. It means adding 5 getters instead of 4, but it cuts down one one class, so I think in terms of LoC it&apos;ll be a minor win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521180</commentid>
    <comment_count>36</comment_count>
      <attachid>119118</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 12:28:26 -0800</bug_when>
    <thetext>Comment on attachment 119118
Fix ToT merge conflicts

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

This looks awesome. R=me with some small comments.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:443
&gt; +    renderMatrix.scale3d(layerRect.width(), layerRect.height(), 1);

nit: scaleNonUniform(layerRect.width(), layerRect.height()) would be strictly better, this is doing an unnecessary set of calculations on the 3rd column of the matrix. it doesn&apos;t matter much here since this isn&apos;t performance sensitive code but it&apos;s a good habit to get into.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDebugBorderDrawQuad.cpp:43
&gt; +    if (m_color.alpha() != 1)
&gt; +        m_quadOpaque = false;

i&apos;m pretty sure all debug border quads are non-opaque since we just draw a line loop around the edges. the middle is always empty

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:74
&gt; +    PassOwnPtr&lt;CCSharedQuadState&gt; sharedQuadState() const;

nit: i think this should be called createSharedQuadState(). every call does some calculations and returns a new value so it shouldn&apos;t look like a simple getter

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h:56
&gt; +    CCRenderPass(CCRenderSurface*);

explicit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521187</commentid>
    <comment_count>37</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-14 12:34:36 -0800</bug_when>
    <thetext>(In reply to comment #36)

Thanks for the review.  Will fix all nits as requested.  I&apos;ll add a comment to the uniform getting function in case anybody adds a tile shader and hits a compile error there.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCDebugBorderDrawQuad.cpp:43
&gt; &gt; +    if (m_color.alpha() != 1)
&gt; &gt; +        m_quadOpaque = false;
&gt; 
&gt; i&apos;m pretty sure all debug border quads are non-opaque since we just draw a line loop around the edges. the middle is always empty

Hrm.  Do we need to differentiate &quot;opaque for culling&quot; vs. &quot;opaque for drawing&quot;? From a drawing sense, this &quot;quad&quot; is opaque and we should disable blending.  From a culling sense, this quad doesn&apos;t fill its entire contents.

On the other hand, these are *debug* quads though, so it&apos;d probably be most simple to just combine the two opaque use cases, turning on blending for debug quads even though it&apos;s not needed.  I&apos;ll add a comment that it refers to both culling and drawing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521188</commentid>
    <comment_count>38</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2011-12-14 12:36:49 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #36)
&gt; 
&gt; Thanks for the review.  Will fix all nits as requested.  I&apos;ll add a comment to the uniform getting function in case anybody adds a tile shader and hits a compile error there.
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCDebugBorderDrawQuad.cpp:43
&gt; &gt; &gt; +    if (m_color.alpha() != 1)
&gt; &gt; &gt; +        m_quadOpaque = false;
&gt; &gt; 
&gt; &gt; i&apos;m pretty sure all debug border quads are non-opaque since we just draw a line loop around the edges. the middle is always empty
&gt; 
&gt; Hrm.  Do we need to differentiate &quot;opaque for culling&quot; vs. &quot;opaque for drawing&quot;? From a drawing sense, this &quot;quad&quot; is opaque and we should disable blending.  From a culling sense, this quad doesn&apos;t fill its entire contents.
&gt; 
&gt; On the other hand, these are *debug* quads though, so it&apos;d probably be most simple to just combine the two opaque use cases, turning on blending for debug quads even though it&apos;s not needed.  I&apos;ll add a comment that it refers to both culling and drawing.

It&apos;s probably not a huge deal either way. We can always turn off debug borders when doing performance measurements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521200</commentid>
    <comment_count>39</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 12:46:53 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #36)
&gt; 
&gt; Thanks for the review.  Will fix all nits as requested.  I&apos;ll add a comment to the uniform getting function in case anybody adds a tile shader and hits a compile error there.
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCDebugBorderDrawQuad.cpp:43
&gt; &gt; &gt; +    if (m_color.alpha() != 1)
&gt; &gt; &gt; +        m_quadOpaque = false;
&gt; &gt; 
&gt; &gt; i&apos;m pretty sure all debug border quads are non-opaque since we just draw a line loop around the edges. the middle is always empty
&gt; 
&gt; Hrm.  Do we need to differentiate &quot;opaque for culling&quot; vs. &quot;opaque for drawing&quot;? From a drawing sense, this &quot;quad&quot; is opaque and we should disable blending.  From a culling sense, this quad doesn&apos;t fill its entire contents.
&gt; 
&gt; On the other hand, these are *debug* quads though, so it&apos;d probably be most simple to just combine the two opaque use cases, turning on blending for debug quads even though it&apos;s not needed.  I&apos;ll add a comment that it refers to both culling and drawing.

That&apos;s a good point. I didn&apos;t think that there was a distinction when I saw this and assumed that &apos;opaque&apos; meant &apos;this quad covers up every pixel within its bounds&apos;. Maybe needs blending is a different bit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521215</commentid>
    <comment_count>40</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-14 12:56:41 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; That&apos;s a good point. I didn&apos;t think that there was a distinction when I saw this and assumed that &apos;opaque&apos; meant &apos;this quad covers up every pixel within its bounds&apos;. Maybe needs blending is a different bit?

Needs blending is basically the quad drawsOpaque() function right now, as it considers &apos;covers all pixels&apos; but also things like translations. Should this be setting something that controls the outcome of that function rather than &apos;opaque&apos;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521222</commentid>
    <comment_count>41</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-14 13:08:12 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #39)
&gt; &gt; That&apos;s a good point. I didn&apos;t think that there was a distinction when I saw this and assumed that &apos;opaque&apos; meant &apos;this quad covers up every pixel within its bounds&apos;. Maybe needs blending is a different bit?
&gt; 
&gt; Needs blending is basically the quad drawsOpaque() function right now, as it considers &apos;covers all pixels&apos; but also things like translations. Should this be setting something that controls the outcome of that function rather than &apos;opaque&apos;?

That&apos;s a good point.  Quads with antialiased edges but opaque contents still should cull what&apos;s behind their transformed quad rect (insert hand waving about how to handle edge pixels and floating point inconsistencies).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521321</commentid>
    <comment_count>42</comment_count>
      <attachid>119304</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-14 14:51:30 -0800</bug_when>
    <thetext>Created attachment 119304
Review comments, opaque/blending changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521323</commentid>
    <comment_count>43</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-14 14:53:59 -0800</bug_when>
    <thetext>(In reply to comment #42)
&gt; Created an attachment (id=119304) [details]
&gt; Review comments, opaque/blending changes

I added an explicit needsBlending() function to CCDrawQuad.  drawsOpaque is now unused, but should be used for culling.  I think that&apos;s more reasonable.

jamesr, would you mind taking an additional look at the opaque/blending changes and R+&apos;ing if that looks good to you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521342</commentid>
    <comment_count>44</comment_count>
      <attachid>119304</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 15:16:52 -0800</bug_when>
    <thetext>Comment on attachment 119304
Review comments, opaque/blending changes

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.cpp:43
&gt; +    , m_quadOpaque(true)

i think this is the wrong default, at least for CCCustomLayerDrawQuads - I think they have to be treated as potentially non-opaque unless the layer provides information to the contrary.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.cpp:44
&gt; +    , m_needsBlending(false)

Same here, custom quads probably do need blending by default

although I guess you could also say that custom layers can/will enable blending and set the blend func as they need to

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h:55
&gt; +    bool needsBlending() const { return !m_sharedQuadState-&gt;isOpaque() || m_needsBlending || opacity() != 1; }
&gt; +    bool isLayerAxisAlignedIntRect() const { return m_sharedQuadState-&gt;isLayerAxisAlignedIntRect(); }

you need blending on if you aren&apos;t an axis aligned IntRect too, regardless of opacity etc - right? i&apos;m thinking of a rotated unscaled solid color layer or render surface, for instance - we&apos;d want to use linear filtering and blending to get the edges to look OK. linear filtering w/out blending will look funky

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h:88
&gt; +    // By default, the shared quad state determines whether or not this quad is
&gt; +    // opaque or needs blending. Derived classes can override with these
&gt; +    // variables.
&gt; +    bool m_quadOpaque;
&gt; +    bool m_needsBlending;

these don&apos;t completely override what the shared quad state says, they&apos;re an additional input. is the idea here that we will use this to do things like enable blending only for the exterior tiles on a tiled layer that has edge AA?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521361</commentid>
    <comment_count>45</comment_count>
      <attachid>119304</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 15:30:50 -0800</bug_when>
    <thetext>Comment on attachment 119304
Review comments, opaque/blending changes

I think this does what we want, so R=me. I kind of hope that we can simplify the quad/shared/material bits a bit. I think we&apos;re in a much better place to do that with this patch than without.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521369</commentid>
    <comment_count>46</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-14 15:37:52 -0800</bug_when>
    <thetext>(In reply to comment #44)

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h:55
&gt; &gt; +    bool needsBlending() const { return !m_sharedQuadState-&gt;isOpaque() || m_needsBlending || opacity() != 1; }
&gt; &gt; +    bool isLayerAxisAlignedIntRect() const { return m_sharedQuadState-&gt;isLayerAxisAlignedIntRect(); }
&gt; 
&gt; you need blending on if you aren&apos;t an axis aligned IntRect too, regardless of opacity etc - right? i&apos;m thinking of a rotated unscaled solid color layer or render surface, for instance - we&apos;d want to use linear filtering and blending to get the edges to look OK. linear filtering w/out blending will look funky

Nope.  That&apos;s not how blending works.

The graphics pipeline is vertex shader =&gt; rasterization (determine which pixels are covered) =&gt; fragment shader =&gt; blending =&gt; final pixel.  If you want to blend, you have to output something in the alpha channel from the fragment shader.  You always get aliased edges on primitives regardless of blend state, unless you&apos;re using some form of AA that takes multiple samples per final pixel and combines them.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h:88
&gt; &gt; +    // By default, the shared quad state determines whether or not this quad is
&gt; &gt; +    // opaque or needs blending. Derived classes can override with these
&gt; &gt; +    // variables.
&gt; &gt; +    bool m_quadOpaque;
&gt; &gt; +    bool m_needsBlending;
&gt; 
&gt; these don&apos;t completely override what the shared quad state says, they&apos;re an additional input. is the idea here that we will use this to do things like enable blending only for the exterior tiles on a tiled layer that has edge AA?

Yes, that&apos;s exactly it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521384</commentid>
    <comment_count>47</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-14 15:50:48 -0800</bug_when>
    <thetext>Committed r102838: &lt;http://trac.webkit.org/changeset/102838&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521415</commentid>
    <comment_count>48</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-14 16:11:00 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #44)
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h:55
&gt; &gt; &gt; +    bool needsBlending() const { return !m_sharedQuadState-&gt;isOpaque() || m_needsBlending || opacity() != 1; }
&gt; &gt; &gt; +    bool isLayerAxisAlignedIntRect() const { return m_sharedQuadState-&gt;isLayerAxisAlignedIntRect(); }
&gt; &gt; 
&gt; &gt; you need blending on if you aren&apos;t an axis aligned IntRect too, regardless of opacity etc - right? i&apos;m thinking of a rotated unscaled solid color layer or render surface, for instance - we&apos;d want to use linear filtering and blending to get the edges to look OK. linear filtering w/out blending will look funky
&gt; 
&gt; Nope.  That&apos;s not how blending works.
&gt; 
&gt; The graphics pipeline is vertex shader =&gt; rasterization (determine which pixels are covered) =&gt; fragment shader =&gt; blending =&gt; final pixel.  If you want to blend, you have to output something in the alpha channel from the fragment shader.  You always get aliased edges on primitives regardless of blend state, unless you&apos;re using some form of AA that takes multiple samples per final pixel and combines them.

Hm, the AA method we use for tiled layers require blending as coverage and alpha channel value is computed in the fragment shader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521437</commentid>
    <comment_count>49</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-14 16:23:53 -0800</bug_when>
    <thetext>(In reply to comment #48)

&gt; Hm, the AA method we use for tiled layers require blending as coverage and alpha channel value is computed in the fragment shader.

Yeah, this patch addresses that.  Sorry if my comment was confusing.  I was trying to say that the blending decision is not simply:

    any non-axis aligned quad =&gt; needs blending

...and that it&apos;s instead the following chain of logic:

   non-axis aligned non-root tile quad =&gt; edge antialiasing =&gt; needs blending</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116684</attachid>
            <date>2011-11-27 16:05:30 -0800</date>
            <delta_ts>2011-12-07 22:56:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73059-20111127160529.patch</filename>
            <type>text/plain</type>
            <size>74470</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwOTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRjOTNkOTAwNTZkY2Y0
YzM3ZWYwYzY1Yjk5MDBmNWIxZDcwMmFmZC4uMGU2MWQzOTQwMjA1MGMyN2VkNmI4MGNmMmMxYmM3
ZWFjZDg5NjA3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDExLTExLTI3ICBBZHJp
ZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBSZWZh
Y3RvciB0aWxlIGRyYXdpbmcgdG8gYmUgbW9yZSBkYXRhLWRyaXZlbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNTkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0ZWQgYnkgY29tcG9zaXRvciBsYXlv
dXQgdGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlkQmVnaW5GcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTb2xpZFF1YWQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRpZEJlZ2luRHJhd2luZ0xheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlkRmluaXNoRHJhd2lu
Z0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlkRmlu
aXNoRnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb25Db21wb3Np
dGVkQ29udGVudEhvc3Q6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYWdtZW50VGlsZUJpbmRpbmdCYXNlOjphbHBoYUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYWdtZW50VGlsZUJpbmRpbmdCYXNlOjplZGdlTG9jYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhZ21lbnRUaWxlQmluZGluZ0Jhc2U6OmZyYWdtZW50VGV4VHJhbnNmb3JtTG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRUaWxlQmluZGluZ0Jhc2U6OnNhbXBs
ZXJMb2NhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6
cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OkNDTGF5
ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpmaWxsUmVuZGVyUGFzcyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0QW50aWFsaWFzZWRFZGdlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0Q29udGVudHNTd2l6emxlZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphbnRpYWxpYXNlZEVkZ2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJbXBsOjpjb250ZW50c1N3aXp6bGVkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyUXVhZDo6Q0NMYXllclF1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpRdWFkSW5mbzo6UXVhZEluZm8pOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NSZW5kZXJQYXNzOjpDQ1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQ
YXNzOjpzdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6YWRkQ3VzdG9t
UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OmFkZFRpbGVRdWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6YWRkQ29sb3JlZFF1YWQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6bnVtUXVhZHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJQYXNzOjpxdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVRdWFkUmVuZGVyZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmaW5kVW5pZm9ybXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaWxlUXVhZFJlbmRlcmVyOjpDQ1RpbGVRdWFkUmVuZGVyZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlUXVhZFJlbmRlcmVyOjpjb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGlsZVF1YWRSZW5kZXJlcjo6YmVnaW5MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RpbGVRdWFkUmVuZGVyZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxl
UXVhZFJlbmRlcmVyOjpkcmF3QUFRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZVF1YWRS
ZW5kZXJlcjo6ZHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZVF1YWRSZW5kZXJlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGlsZWRMYXllckltcGw6OmZpbGxSZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGlsZWRMYXllckltcGw6OnNldFRpbGluZ0RhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaDoKKwogMjAxMS0xMS0yMSAgQW5kcmVh
cyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU3R5bGVTaGVldDogTW92ZSBj
b21wbGV0ZVVSTCgpIHRvIENTU1N0eWxlU2hlZXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggM2Q0NTZm
ZGU0NGVlZjU4ZTVjZjFiZDNmYzJhODY5NDZmMjFiYmU1Ni4uMTIzMTQ0MDM4NWI0MjljNzI1M2Fj
ZTcyNGQ5YzU2ZDQ0MGJmMzU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzU3OCw2ICszNTc4LDgg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxh
eWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1Byb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclBhc3MuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclBhc3MuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyLmNwcCcsCkBAIC0zNTk2LDYgKzM1
OTgsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkVGFzay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVkTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVRdWFkUmVuZGVyZXIuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVRdWFkUmVuZGVyZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaW1lU291cmNlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllcklt
cGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvTGF5ZXJJbXBsLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5k
ZXggMGJkNmRiYzM4OTZhZTRhMDc3MTlhNGVhNGEzY2NlNzM1OTI3M2UwNC4uMmZlNjNmOWNlMTky
MzcxZGYxZDE3M2Q4NTBhYTc2MjhiZDg3NWJhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwu
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9D
Q1Byb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NUaWxlUXVhZFJlbmRlcmVyLmgiCiAjaWYgVVNFKFNL
SUEpCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiR3JDb250ZXh0LmgiCkBA
IC0yODMsNjUgKzI4NCwxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRD
aGFuZ2VkKCkKICAgICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gMDsKIH0KIAotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRpZEJlZ2luRnJhbWUoKQogewogICAgIC8vIEZJWE1FOiB1c2UgdGhlIGZyYW1lIGJlZ2lu
IHRpbWUgZnJvbSB0aGUgb3ZlcmFsbCBjb21wb3NpdG9yIHNjaGVkdWxlci4KICAgICAvLyBUaGlz
IHZhbHVlIGlzIGN1cnJlbnRseSBpbmFjY2Vzc2libGUgYmVjYXVzZSBpdCBpcyB1cCBpbiBDaHJv
bWl1bSdzCiAgICAgLy8gUmVuZGVyV2lkZ2V0LgogICAgIG1faGVhZHNVcERpc3BsYXktPm9uRnJh
bWVCZWdpbihjdXJyZW50VGltZSgpKTsKIAotICAgIGlmICghcm9vdExheWVyKCkpCi0gICAgICAg
IHJldHVybjsKLQogICAgIHNpemVfdCBjb250ZW50c01lbW9yeVVzZUJ5dGVzID0gbV9jb250ZW50
c1RleHR1cmVBbGxvY2F0b3ItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpOwogICAgIG1fcmVuZGVy
U3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1pdEJ5dGVzKFRleHR1cmVNYW5hZ2Vy
OjpoaWdoTGltaXRCeXRlcygpIC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7Ci0gICAgZHJhd0xh
eWVyc0ludGVybmFsKCk7Ci0KLSAgICBpZiAoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5
dGVzKCkgPiBjb250ZW50c01lbW9yeVVzZUJ5dGVzKQotICAgICAgICBtX3JlbmRlclN1cmZhY2VU
ZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFp
bUxpbWl0Qnl0ZXMoKSAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoMCk7
Ci0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJl
cyhtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIAotICAgIGlmIChzZXR0
aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbikKLSAgICAgICAgY29weU9mZnNjcmVlblRleHR1cmVU
b0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNP
bnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5
ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQotewotICAgIFRSQUNFX0VWRU5UKCJMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMiLCB0aGlzLCAw
KTsKLSAgICAKLSAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZW5kZXIgc3VyZmFj
ZXMuIFdlIHRyYXZlcnNlIHRoZSByZW5kZXIgc3VyZmFjZXMKLSAgICAvLyBmcm9tIGJhY2sgdG8g
ZnJvbnQgdG8gZ3VhcmFudGVlIHRoYXQgbmVzdGVkIHJlbmRlciBzdXJmYWNlcyBnZXQgcmVuZGVy
ZWQgaW4KLSAgICAvLyB0aGUgY29ycmVjdCBvcmRlci4KLSAgICBmb3IgKGludCBzdXJmYWNlSW5k
ZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAw
IDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VM
YXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKLSAgICAg
ICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5y
ZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKLSAgICAgICAg
QVNTRVJUKHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLnNpemUoKSk7Ci0gICAgICAgIEFTU0VS
VChyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsKLQotICAgICAgICBpZiAodXNlUmVuZGVy
U3VyZmFjZShyZW5kZXJTdXJmYWNlKSkgewotICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VM
YXllciAhPSByb290RHJhd0xheWVyKSB7Ci0gICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
KTsKLSAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFy
Q29sb3IoMCwgMCwgMCwgMCkpOwotICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCks
IG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKTsK
LSAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXll
ckxpc3QoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVy
SW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCi0gICAgICAgICAgICAgICAg
ZHJhd0xheWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3VyZmFjZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgbmV4dCBmcmFtZSBzaG91bGQgc3RhcnQgYnkg
YXNzdW1pbmcgbm90aGluZyBoYXMgY2hhbmdlZCwgYW5kIGNoYW5nZXMgYXJlIG5vdGVkIGFzIHRo
ZXkgb2NjdXIuCi0gICAgcm9vdERyYXdMYXllci0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9y
U3VidHJlZSgpOwotfQotCi0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJz
SW50ZXJuYWwoKQotewogICAgIGlmICh2aWV3cG9ydFNpemUoKS5pc0VtcHR5KCkgfHwgIXJvb3RM
YXllcigpKQogICAgICAgICByZXR1cm47CiAKQEAgLTM1NCwyNyArMzA2LDcgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgICAgIG1fY29udGV4
dC0+cmVzaGFwZSh2aWV3cG9ydFdpZHRoKCksIHZpZXdwb3J0SGVpZ2h0KCkpOwogICAgIH0KIAot
ICAgIENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gcm9vdExheWVyKCk7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAoIXJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSkKLSAgICAgICAgcm9vdERyYXdMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIHJv
b3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCB2aWV3cG9ydFNpemUoKSkpOwotCi0gICAgcm9vdERyYXdMYXllci0+c2V0Q2xpcFJl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCB2aWV3cG9ydFNpemUoKSkpOwotCi0gICAgQ0NMYXllckxp
c3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFw
cGVuZChyb290RHJhd0xheWVyKTsKLQotICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UgPSByb290
RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+
Y2xlYXJMYXllckxpc3QoKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0xheWVyc0ludGVybmFsOjpjYWxjRHJhd0V0YyIsIHRoaXMsIDApOwotICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShy
b290RHJhd0xheWVyLCByb290RHJhd0xheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmxheWVy
TGlzdCgpLCAmbV9sYXllclNvcnRlciwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOwot
ICAgIH0KLQogICAgIC8vIFRoZSBHTCB2aWV3cG9ydCBjb3ZlcnMgdGhlIGVudGlyZSB2aXNpYmxl
IGFyZWEsIGluY2x1ZGluZyB0aGUgc2Nyb2xsYmFycy4KICAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0V2lkdGgoKSwgdmlld3BvcnRIZWln
aHQoKSkpOwogICAgIG1fd2luZG93TWF0cml4ID0gc2NyZWVuTWF0cml4KDAsIDAsIHZpZXdwb3J0
V2lkdGgoKSwgdmlld3BvcnRIZWlnaHQoKSk7CkBAIC0zODYsNiArMzE4LDcgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgR0xDKG1fY29udGV4
dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNU
KSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpDVUxMX0ZBQ0UpKTsKIAorICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UgPSBy
b290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpOwogICAgIHVzZVJlbmRlclN1cmZhY2UobV9kZWZh
dWx0UmVuZGVyU3VyZmFjZSk7CiAKICAgICAvLyBDbGVhciB0byBibHVlIHRvIG1ha2UgaXQgZWFz
aWVyIHRvIHNwb3QgdW5yZW5kZXJlZCByZWdpb25zLgpAQCAtMzk3LDggKzMzMCwxMTEgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9O
RSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKICAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKSk7CiAKLSAgICBkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKHJvb3REcmF3TGF5
ZXIsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1NvbGlkUXVhZChjb25zdCBDQ1JlbmRlclBhc3M6OlF1YWRJbmZvJiBxdWFkSW5m
bykKK3sKKyAgICBjb25zdCBMYXllckNocm9taXVtOjpCb3JkZXJQcm9ncmFtKiBzb2xpZENvbG9y
UHJvZ3JhbSA9IGJvcmRlclByb2dyYW0oKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Nv
bnRleHQtPnVzZVByb2dyYW0oc29saWRDb2xvclByb2dyYW0tPnByb2dyYW0oKSkpOworCisgICAg
SW50UmVjdCB0aWxlUmVjdCA9IHF1YWRJbmZvLnF1YWRSZWN0OworCisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggdGlsZVRyYW5zZm9ybSA9IHF1YWRJbmZvLnF1YWRUcmFuc2Zvcm07CisgICAgdGls
ZVRyYW5zZm9ybS50cmFuc2xhdGUodGlsZVJlY3QueCgpICsgdGlsZVJlY3Qud2lkdGgoKSAvIDIu
MCwgdGlsZVJlY3QueSgpICsgdGlsZVJlY3QuaGVpZ2h0KCkgLyAyLjApOworCisgICAgQ29sb3Ig
Y29sb3IgPSBxdWFkSW5mby5sYXllci0+YmFja2dyb3VuZENvbG9yKCk7CisKKyAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnVuaWZvcm00Zihzb2xpZENvbG9yUHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKS5jb2xvckxvY2F0aW9uKCksIGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigp
LCBjb2xvci5ibHVlKCksIGNvbG9yLmFscGhhKCkpKTsKKworICAgIGZsb2F0IG9wYWNpdHkgPSBx
dWFkSW5mby5sYXllci0+b3BhY2l0eSgpOworICAgIGRyYXdUZXh0dXJlZFF1YWQodGlsZVRyYW5z
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0Lmhl
aWdodCgpLCBvcGFjaXR5LCBGbG9hdFF1YWQoKSwKKyAgICAgICAgICAgICAgICAgICAgIHNvbGlk
Q29sb3JQcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAg
ICAgICAgICAgICAgLTEsIC0xKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdSZW5kZXJQYXNzKENDUmVuZGVyUGFzcyogcGFzcykKK3sKKyAgICBDQ1JlbmRlclN1cmZhY2Uq
IHJlbmRlclN1cmZhY2UgPSBwYXNzLT5zdXJmYWNlKCk7CisgICAgQVNTRVJUKHJlbmRlclN1cmZh
Y2UpOworICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsKKworICAgIGlm
ICghdXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgYSBwcm9wZXJ0eSBvbiB0
aGUgcmVuZGVyIHN1cmZhY2UKKyAgICBpZiAocmVuZGVyU3VyZmFjZSAhPSBtX2RlZmF1bHRSZW5k
ZXJTdXJmYWNlKSB7CisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CisgICAgICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKSk7CisgICAgICAg
IEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0JVRkZFUl9CSVQpKTsKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworICAgIH0KKwor
ICAgIENDTGF5ZXJJbXBsKiBjdXJyZW50TGF5ZXIgPSAwOworCisgICAgQ0NUaWxlUXVhZFJlbmRl
cmVyIHRpbGVRdWFkUmVuZGVyZXIodGhpcyk7CisKKyAgICBmb3IgKGludCBxdWFkSWQgPSAwOyBx
dWFkSWQgPCBwYXNzLT5udW1RdWFkcygpOyArK3F1YWRJZCkgeworICAgICAgICBjb25zdCBDQ1Jl
bmRlclBhc3M6OlF1YWRJbmZvJiBxdWFkSW5mbyA9IHBhc3MtPnF1YWQocXVhZElkKTsKKworICAg
ICAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBxdWFkSW5mby5sYXllcjsKKworICAgICAgICBpZiAo
bGF5ZXIgIT0gY3VycmVudExheWVyKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudExheWVyKQor
ICAgICAgICAgICAgICAgIGRpZEZpbmlzaERyYXdpbmdMYXllcihjdXJyZW50TGF5ZXIpOworICAg
ICAgICAgICAgZGlkQmVnaW5EcmF3aW5nTGF5ZXIobGF5ZXIpOworICAgICAgICAgICAgY3VycmVu
dExheWVyID0gbGF5ZXI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGF5ZXItPnJlbmRlclN1
cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpIHsKKyAg
ICAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXcodGhpcywgbGF5ZXItPmdldERy
YXdSZWN0KCkpOworICAgICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+cmVsZWFzZUNv
bnRlbnRzVGV4dHVyZSgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICBzd2l0Y2ggKHF1YWRJbmZvLm1hdGVyaWFsKSB7CisgICAgICAgIGNhc2UgQ0NSZW5kZXJQ
YXNzOjpCYWNrZ3JvdW5kQ29sb3I6CisgICAgICAgICAgICBkcmF3U29saWRRdWFkKHF1YWRJbmZv
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENDUmVuZGVyUGFzczo6VGlsZWRD
b250ZW50OgorICAgICAgICAgICAgdGlsZVF1YWRSZW5kZXJlci5kcmF3KHF1YWRJbmZvKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENDUmVuZGVyUGFzczo6Q3VzdG9tTGF5ZXI6
CisgICAgICAgICAgICBsYXllci0+ZHJhdyh0aGlzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENDUmVuZGVyUGFzczo6SW52YWxpZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAKKyAgICBp
ZiAoY3VycmVudExheWVyKQorICAgICAgICBkaWRGaW5pc2hEcmF3aW5nTGF5ZXIoY3VycmVudExh
eWVyKTsKKworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworfQorCit2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlkQmVnaW5EcmF3aW5nTGF5ZXIoQ0NMYXllckltcGwq
IGxheWVyKQoreworICAgIGlmIChsYXllci0+b3BhcXVlKCkgJiYgbGF5ZXItPm9wYWNpdHkoKSA9
PSAxICYmICFsYXllci0+YW50aWFsaWFzZWRFZGdlcygpKQorICAgICAgICBHTEMobV9jb250ZXh0
LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7Cisg
ICAgZWxzZQorICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKKworICAgIGlmIChsYXllci0+Y2xpcFJlY3QoKS5p
c0VtcHR5KCkpCisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CisgICAgZWxzZQorICAgICAgICBz
ZXRTY2lzc29yVG9SZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKK30KKwordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRpZEZpbmlzaERyYXdpbmdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCit7
CisgICAgbGF5ZXItPmRyYXdEZWJ1Z0JvcmRlcih0aGlzKTsKK30KKwordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRpZEZpbmlzaEZyYW1lKCkKK3sKICAgICBpZiAobV9oZWFkc1VwRGlzcGxh
eS0+ZW5hYmxlZCgpKSB7CiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwogICAgICAgICBHTEMobV9jb250ZXh0
LmdldCgpLCBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFw
aGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwpAQCAtNDA5LDYgKzQ0NSwxNiBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIAogICAg
IEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOworCisgICAgc2l6ZV90IGNvbnRlbnRz
TWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9y
eVVzZUJ5dGVzKCk7CisgICAgaWYgKFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygp
ID4gY29udGVudHNNZW1vcnlVc2VCeXRlcykKKyAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1p
dEJ5dGVzKCkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKKyAgICBlbHNlCisgICAgICAgIG1f
cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KDApOworICAg
IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9y
ZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7CisKKyAgICBpZiAoc2V0dGluZ3Mo
KS5jb21wb3NpdGVPZmZzY3JlZW4pCisgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNw
bGF5KCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0b0dMTWF0cml4KGZsb2F0
KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQpAQCAtNTAyLDIzICs1
NDgsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHMo
dm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVscykpOwogfQogCi0vLyBSZXR1cm5zIHRydWUgaWYgYW55
IHBhcnQgb2YgdGhlIGxheWVyIGZhbGxzIHdpdGhpbiB0aGUgdmlzaWJsZVJlY3QKLWJvb2wgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjppc0xheWVyVmlzaWJsZShMYXllckNocm9taXVtKiBsYXllciwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QpCi17Ci0gICAgLy8gRm9ybSB0aGUgbWF0cml4IHVzZWQgYnkgdGhlIHNoYWRlciB0byBt
YXAgdGhlIGNvcm5lcnMgb2YgdGhlIGxheWVyJ3MKLSAgICAvLyBib3VuZHMgaW50byBjbGlwIHNw
YWNlLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IG1hdHJpeDsKLSAg
ICByZW5kZXJNYXRyaXguc2NhbGUzZChsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgbGF5ZXItPmJv
dW5kcygpLmhlaWdodCgpLCAxKTsKLSAgICByZW5kZXJNYXRyaXggPSBtX3Byb2plY3Rpb25NYXRy
aXggKiByZW5kZXJNYXRyaXg7Ci0KLSAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0KC0wLjUsIC0wLjUs
IDEsIDEpOwotICAgIEZsb2F0UmVjdCBtYXBwZWRSZWN0ID0gcmVuZGVyTWF0cml4Lm1hcFJlY3Qo
bGF5ZXJSZWN0KTsKLQotICAgIC8vIFRoZSBsYXllciBpcyB2aXNpYmxlIGlmIGl0IGludGVyc2Vj
dHMgYW55IHBhcnQgb2YgYSByZWN0YW5nbGUgd2hvc2Ugb3JpZ2luCi0gICAgLy8gaXMgYXQgKC0x
LCAtMSkgYW5kIHNpemUgaXMgMngyLgotICAgIHJldHVybiBtYXBwZWRSZWN0LmludGVyc2VjdHMo
RmxvYXRSZWN0KC0xLCAtMSwgMiwgMikpOwotfQotCiBNYW5hZ2VkVGV4dHVyZSogTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKQogewogICAgIHJldHVybiBz
ZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbiAmJiByb290TGF5ZXIoKSA/IHJvb3RMYXllcigp
LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4dHVyZSgpIDogMDsKQEAgLTU3MiwzNSArNjAx
LDYgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZhY2UoQ0NSZW5k
ZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5k
ZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKQotewotICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFj
ZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gdGFyZ2V0U3VyZmFjZSkgewotICAgICAg
ICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3KHRoaXMsIGxheWVyLT5nZXREcmF3UmVjdCgp
KTsKLSAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+cmVsZWFzZUNvbnRlbnRzVGV4dHVy
ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGxheWVyLT52aXNpYmxlTGF5
ZXJSZWN0KCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobGF5ZXItPnVz
ZXNMYXllckNsaXBwaW5nKCkpCi0gICAgICAgIHNldFNjaXNzb3JUb1JlY3QobGF5ZXItPmNsaXBS
ZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKLQotICAgIGJvb2wg
b3BhcXVlID0gbGF5ZXItPm9wYXF1ZSgpICYmIGxheWVyLT5kcmF3T3BhY2l0eSgpID09IDE7Ci0g
ICAgaWYgKG9wYXF1ZSkKLSAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwotCi0gICAgbGF5ZXItPmRyYXcodGhp
cyk7Ci0KLSAgICBpZiAob3BhcXVlKQotICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Nv
bnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKLQotICAgIC8vIERyYXcg
dGhlIGRlYnVnIGJvcmRlciBpZiB0aGVyZSBpcyBvbmUuCi0gICAgbGF5ZXItPmRyYXdEZWJ1Z0Jv
cmRlcih0aGlzKTsKLX0KLQogLy8gU2V0cyB0aGUgc2Npc3NvciByZWdpb24gdG8gdGhlIGdpdmVu
IHJlY3RhbmdsZS4gVGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciB0aGUKIC8vIHNjaXNzb3JSZWN0
IGhhcyBpdHMgb3JpZ2luIGF0IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGN1cnJlbnQgdmlz
aWJsZSByZWN0Lgogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFNjaXNzb3JUb1JlY3Qo
Y29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oCmluZGV4IDE5NTExN2YwZDU0ODcwMTBkOWE1MDQyZDgyZjQwYjU5NzVlYmE4ZmMuLjRhYjcx
MjI5Nzg4ZGM5MWEwYWRmYTg1N2U1ZDJiNmU5OWQxNzc1NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCkBAIC00Miw5ICs0Miw5IEBACiAjaW5jbHVkZSAiVmlkZW9MYXllckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXllckltcGwuaCIKICNpbmNsdWRlICJj
Yy9DQ0hlYWRzVXBEaXNwbGF5LmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1BsdWdpbkxh
eWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogI2luY2x1ZGUgImNjL0ND
VmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgpAQCAtOTgsNyArOTgsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHZp
ZXdwb3J0Q2hhbmdlZCgpOwogCi0gICAgdm9pZCBkcmF3TGF5ZXJzKCk7CisgICAgdm9pZCBkaWRC
ZWdpbkZyYW1lKCk7CisgICAgdm9pZCBkcmF3UmVuZGVyUGFzcyhDQ1JlbmRlclBhc3MqKTsKKyAg
ICB2b2lkIGRpZEZpbmlzaEZyYW1lKCk7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRv
IGZpbmlzaAogICAgIHZvaWQgZmluaXNoKCk7CkBAIC0xNDksOCArMTUxLDYgQEAgcHVibGljOgog
CiAgICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKTsKIAotICAgIHR5cGVkZWYgVmVjdG9y
PFJlZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsKLQogICAgIHN0YXRpYyB2b2lkIHRv
R0xNYXRyaXgoZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIHZvaWQg
ZHJhd1RleHR1cmVkUXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZs
b2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0UXVhZCYsCkBAIC0xNjAsMTUgKzE2MCwxMyBAQCBwcml2
YXRlOgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3RJbXBsKiwgUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOwogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCi0g
ICAgdm9pZCBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsKLSAgICB2b2lkIGRyYXdMYXllcnNPbnRvUmVu
ZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1w
bCosIENDUmVuZGVyU3VyZmFjZSopOworICAgIHZvaWQgZGlkQmVnaW5EcmF3aW5nTGF5ZXIoQ0NM
YXllckltcGwqKTsKKyAgICB2b2lkIGRpZEZpbmlzaERyYXdpbmdMYXllcihDQ0xheWVySW1wbCop
OworICAgIHZvaWQgZHJhd1NvbGlkUXVhZChjb25zdCBDQ1JlbmRlclBhc3M6OlF1YWRJbmZvJik7
CiAKICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCk7CiAgICAg
dm9pZCBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwogCi0gICAgYm9vbCBpc0xheWVy
VmlzaWJsZShMYXllckNocm9taXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25z
dCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7Ci0KICAgICB2b2lkIHNldERyYXdWaWV3cG9ydFJlY3Qo
Y29uc3QgSW50UmVjdCYsIGJvb2wgZmxpcFkpOwogCiAgICAgdm9pZCByZWxlYXNlUmVuZGVyU3Vy
ZmFjZVRleHR1cmVzKCk7CkBAIC0yMzIsOCArMjMwLDYgQEAgcHJpdmF0ZToKIAogICAgIENDUmVu
ZGVyU3VyZmFjZSogbV9kZWZhdWx0UmVuZGVyU3VyZmFjZTsKIAotICAgIENDTGF5ZXJTb3J0ZXIg
bV9sYXllclNvcnRlcjsKLQogICAgIEZsb2F0UXVhZCBtX3NoYXJlZEdlb21ldHJ5UXVhZDsKIAog
ICAgIGJvb2wgbV9pc1ZpZXdwb3J0Q2hhbmdlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVk
Q29udGVudEhvc3QuY3BwCmluZGV4IGJjNmEyYTQ5NzgyOGViMjkxZTk4OTdlYjFiYjEyMjIwNzBh
NGEyYTMuLjYxODFjMTFjMTVlNGJmOTMwOGQ1ZWMyNTgyMDZlMzhkZjEwOTcyMDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcApAQCAtNDIsNiArNDIsOCBAQCBO
b25Db21wb3NpdGVkQ29udGVudEhvc3Q6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdChQYXNzT3du
UHRyPExheWVyUGFpbnRlckNocm9taQogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmFtZSgibm9u
LWNvbXBvc2l0ZWQgY29udGVudCIpOwogI2VuZGlmCiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ncmFwaGljc0xheWVyLT5zZXRPcGFjaXR5KDEpOwor
ICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNPcGFxdWUodHJ1ZSk7CiAgICAgbV9ncmFw
aGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQodHJ1
ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NoYWRlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oCmluZGV4IGU2YTQzNDg4OTE0YTBkYjI2M2Q4Nzcy
N2ZlZTI4Yjc0NzBiZWJjY2QuLjUyYjQ1NmQyZjNkMTkzZDdjNDI4YTRjYzBjNzA0YjBkNWQyYmUw
YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NoYWRlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaApAQCAtMTQ1LDcgKzE0NSwxNSBAQCBwcml2YXRlOgog
ICAgIGludCBtX3ZlcnRleFRleFRyYW5zZm9ybUxvY2F0aW9uOwogfTsKIAotY2xhc3MgRnJhZ21l
bnRUZXhBbHBoYUJpbmRpbmcgeworY2xhc3MgRnJhZ21lbnRUaWxlQmluZGluZ0Jhc2UgeworcHVi
bGljOgorICAgIGludCBhbHBoYUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KKyAgICBp
bnQgZWRnZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KKyAgICBpbnQgZnJhZ21lbnRU
ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIC0xOyB9CisgICAgaW50IHNhbXBs
ZXJMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIC0xOyB9Cit9OworCitjbGFzcyBGcmFnbWVudFRl
eEFscGhhQmluZGluZyA6IHB1YmxpYyBGcmFnbWVudFRpbGVCaW5kaW5nQmFzZSB7CiBwdWJsaWM6
CiAgICAgRnJhZ21lbnRUZXhBbHBoYUJpbmRpbmcoKTsKIApAQCAtMTU4LDEyICsxNjYsMTEgQEAg
cHJpdmF0ZToKICAgICBpbnQgbV9hbHBoYUxvY2F0aW9uOwogfTsKIAotY2xhc3MgRnJhZ21lbnRU
ZXhPcGFxdWVCaW5kaW5nIHsKK2NsYXNzIEZyYWdtZW50VGV4T3BhcXVlQmluZGluZyA6IHB1Ymxp
YyBGcmFnbWVudFRpbGVCaW5kaW5nQmFzZSB7CiBwdWJsaWM6CiAgICAgRnJhZ21lbnRUZXhPcGFx
dWVCaW5kaW5nKCk7CiAKICAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25l
ZCBwcm9ncmFtKTsKLSAgICBpbnQgYWxwaGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIC0xOyB9
CiAgICAgaW50IHNhbXBsZXJMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlckxvY2F0
aW9uOyB9CiAKIHByaXZhdGU6CkBAIC0yMTQsNyArMjIxLDcgQEAgcHJpdmF0ZToKICAgICBpbnQg
bV9lZGdlTG9jYXRpb247CiB9OwogCi1jbGFzcyBGcmFnbWVudFRleENsYW1wQWxwaGFBQUJpbmRp
bmcgeworY2xhc3MgRnJhZ21lbnRUZXhDbGFtcEFscGhhQUFCaW5kaW5nIDogcHVibGljIEZyYWdt
ZW50VGlsZUJpbmRpbmdCYXNlIHsKIHB1YmxpYzoKICAgICBGcmFnbWVudFRleENsYW1wQWxwaGFB
QUJpbmRpbmcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggODdkZWMw
Yjk4YWM2ZGFlODE5OThiZjU4NTQ5ODY0NDYwMDExNThlMi4uMzZmNjA4MTRjN2NlMTBlNGJiOTQx
OWI1MGJiMGY2OGQ0NzBiMDVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBA
IC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVz
VG8oQ0NMYXllckltcGwqIGxheWVyKQogCiAgICAgdGlsZWRMYXllci0+c2V0U2tpcHNEcmF3KG1f
c2tpcHNEcmF3KTsKICAgICB0aWxlZExheWVyLT5zZXRUZXh0dXJlT3JpZW50YXRpb24obV90ZXh0
dXJlT3JpZW50YXRpb24pOwotICAgIHRpbGVkTGF5ZXItPnNldFNhbXBsZWRUZXhlbEZvcm1hdCht
X3NhbXBsZWRUZXhlbEZvcm1hdCk7CisgICAgdGlsZWRMYXllci0+c2V0Q29udGVudHNTd2l6emxl
ZChtX3NhbXBsZWRUZXhlbEZvcm1hdCAhPSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4
ZWxGb3JtYXRSR0JBKTsKICAgICB0aWxlZExheWVyLT5zZXRUaWxpbmdEYXRhKCptX3RpbGVyKTsK
IAogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5l
bmQoKTsgKytpdGVyKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggMTJkMjJlMmEyNDEx
MjJjYjU3Yjk5ZWRiZGY0NjNmZjljYjI4ODI0ZS4uMjM2ZWU1NmJmMDMxMWQzYmIzNTUwMzAyOWEw
Yzg4N2ZlODk3ZjM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtNTIsNiArNTIsOCBA
QCBDQ0xheWVySW1wbDo6Q0NMYXllckltcGwoaW50IGlkKQogICAgICwgbV91c2VzTGF5ZXJDbGlw
cGluZyhmYWxzZSkKICAgICAsIG1faXNOb25Db21wb3NpdGVkQ29udGVudChmYWxzZSkKICAgICAs
IG1fZHJhd3NDb250ZW50KGZhbHNlKQorICAgICwgbV9hbnRpYWxpYXNlZEVkZ2VzKGZhbHNlKQor
ICAgICwgbV9jb250ZW50c1N3aXp6bGVkKGZhbHNlKQogICAgICwgbV9wYWdlU2NhbGVEZWx0YSgx
KQogICAgICwgbV90YXJnZXRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX2RyYXdEZXB0aCgwKQpA
QCAtMTE3LDYgKzExOSwxMSBAQCB2b2lkIENDTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJD
aHJvbWl1bSopCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgQ0NMYXllcklt
cGw6OmZpbGxSZW5kZXJQYXNzKENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKK3sKKyAgICByZW5k
ZXJQYXNzLT5hZGRDdXN0b21RdWFkKHRoaXMpOworfQorCiB2b2lkIENDTGF5ZXJJbXBsOjpiaW5k
Q29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopCiB7CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0yOTAsNiArMjk3LDI0IEBAIHZvaWQgQ0NMYXllckltcGw6OnNldERy
YXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKICAgICBtX2xheWVyUHJvcGVydHlDaGFuZ2Vk
ID0gdHJ1ZTsKIH0KIAordm9pZCBDQ0xheWVySW1wbDo6c2V0QW50aWFsaWFzZWRFZGdlcyhib29s
IGFudGlhbGlhc2VkRWRnZXMpCit7CisgICAgaWYgKG1fYW50aWFsaWFzZWRFZGdlcyA9PSBhbnRp
YWxpYXNlZEVkZ2VzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FudGlhbGlhc2VkRWRnZXMg
PSBhbnRpYWxpYXNlZEVkZ2VzOworICAgIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQgPSB0cnVlOwor
fQorCit2b2lkIENDTGF5ZXJJbXBsOjpzZXRDb250ZW50c1N3aXp6bGVkKGJvb2wgY29udGVudHNT
d2l6emxlZCkKK3sKKyAgICBpZiAobV9jb250ZW50c1N3aXp6bGVkID09IGNvbnRlbnRzU3dpenps
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGVudHNTd2l6emxlZCA9IGNvbnRlbnRz
U3dpenpsZWQ7CisgICAgbV9sYXllclByb3BlcnR5Q2hhbmdlZCA9IHRydWU7Cit9CisKIHZvaWQg
Q0NMYXllckltcGw6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50
KQogewogICAgIGlmIChtX2FuY2hvclBvaW50ID09IGFuY2hvclBvaW50KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmgKaW5kZXggYmY2YjY4ZTFlNzgyMDdjZTFhYzZmY2YyNjI1N2ZkOTdkNGJkODI0MS4uMDI1
ZTBlYjhlZDEzOGQ3Njg4ODdhYThjZjQ0NzkzMmQzNWJiMTI0NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oCkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDTGF5
ZXJTb3J0ZXI7CitjbGFzcyBDQ1JlbmRlclBhc3M7CiBjbGFzcyBMYXllckNocm9taXVtOwogY2xh
c3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwogCkBAIC03MCw2ICs3MSw3IEBAIHB1YmxpYzoKICAg
ICBpbnQgZGVidWdJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdJRDsgfQogI2VuZGlmCiAKKyAg
ICB2aXJ0dWFsIHZvaWQgZmlsbFJlbmRlclBhc3MoQ0NSZW5kZXJQYXNzKik7CiAgICAgdmlydHVh
bCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAgICAgdm9pZCB1bnJlc2VydmVD
b250ZW50c1RleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZShM
YXllclJlbmRlcmVyQ2hyb21pdW0qKTsKQEAgLTE4OSw2ICsxOTEsMTMgQEAgcHVibGljOgogICAg
IGNvbnN0IEZsb2F0UmVjdCYgdXBkYXRlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdXBkYXRlUmVj
dDsgfQogICAgIHZvaWQgc2V0VXBkYXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHVwZGF0ZVJlY3Qp
IHsgbV91cGRhdGVSZWN0ID0gdXBkYXRlUmVjdDsgfQogCisgICAgYm9vbCBhbnRpYWxpYXNlZEVk
Z2VzKCkgY29uc3QgeyByZXR1cm4gbV9hbnRpYWxpYXNlZEVkZ2VzOyB9CisgICAgdm9pZCBzZXRB
bnRpYWxpYXNlZEVkZ2VzKGJvb2wpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBsYXll
cidzIGNvbnRlbnRzIG5lZWQgYW4gUkdCQSA8PT4gQkdSQSBzd2FwLgorICAgIGJvb2wgY29udGVu
dHNTd2l6emxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTd2l6emxlZDsgfQorICAgIHZv
aWQgc2V0Q29udGVudHNTd2l6emxlZChib29sKTsKKwogICAgIFN0cmluZyBsYXllclRyZWVBc1Rl
eHQoKSBjb25zdDsKIAogICAgIGJvb2wgbGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdCB7IHJl
dHVybiBtX2xheWVyUHJvcGVydHlDaGFuZ2VkOyB9CkBAIC0yNTAsNiArMjU5LDkgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CiAKKyAgICBib29sIG1fYW50aWFsaWFzZWRF
ZGdlczsKKyAgICBib29sIG1fY29udGVudHNTd2l6emxlZDsKKwogICAgIEludFNpemUgbV9zY3Jv
bGxEZWx0YTsKICAgICBJbnRTaXplIG1fc2VudFNjcm9sbERlbHRhOwogICAgIEludFNpemUgbV9t
YXhTY3JvbGxQb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmNwcAppbmRleCA4OTZiMmFjNjFm
ZGFkZjFlNjFjZWViZTA5NjMzZmNlNDI2YzdmOGMwLi5lOTkyMTM2OTI3MWJmODNmNDkzMzUzMzUy
OGU4OTViOGY3ZTUyMDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclF1YWQuY3BwCkBAIC00Myw2ICs0Mywx
MCBAQCBDQ0xheWVyUXVhZDo6RWRnZTo6RWRnZShjb25zdCBGbG9hdFBvaW50JiBwLCBjb25zdCBG
bG9hdFBvaW50JiBxKQogICAgIHNjYWxlKDEuMGYgLyB0YW5nZW50Lmxlbmd0aCgpKTsKIH0KIAor
Q0NMYXllclF1YWQ6OkNDTGF5ZXJRdWFkKCkKK3sKK30KKwogQ0NMYXllclF1YWQ6OkNDTGF5ZXJR
dWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKIHsKICAgICAvLyBDcmVhdGUgZWRnZXMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyUXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclF1YWQuaAppbmRleCBmY2Y4MThlNmM0NDE0NTQ1MzA4OGIwYWNkODkxN2YwMjM1N2Y0
OWVlLi5mZjdkY2FhMTI4OTI4MmVjMGNmZDc1NzY5NDlkY2Q5OTVjY2JkZGI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVh
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJRdWFkLmgKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAg
ICBDQ0xheWVyUXVhZChjb25zdCBGbG9hdFF1YWQmKTsKKyAgICBDQ0xheWVyUXVhZCgpOwogCiAg
ICAgRWRnZSBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CiAgICAgRWRnZSB0b3AoKSBj
b25zdCB7IHJldHVybiBtX3RvcDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcAppbmRleCBiM2U5MDMxZGE0YTlhZjA4MWUzMjMxZmExMGNkNTRjMmVkZDkxNjA2Li4wNWIx
NTkxZDI5OWVmY2VlZTdjODAxYmI2MDI5MGJkMGY3NjNiMWJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
aCIKICNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KIApAQCAtODIsMTQgKzgzLDY5IEBAIEdyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpjb250ZXh0KCkKICAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyID8gbV9sYXll
clJlbmRlcmVyLT5jb250ZXh0KCkgOiAwOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYgcGFz
c2VzKQoreworICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyKCkpOworCisgICAgaWYgKCFyb290
TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICByb290TGF5ZXIoKS0+Y3JlYXRlUmVu
ZGVyU3VyZmFjZSgpOworICAgIHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCktPmNsZWFyTGF5
ZXJMaXN0KCk7CisgICAgcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCB2aWV3cG9ydFNpemUoKSkpOworCisgICAgcm9vdExheWVy
KCktPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgdmlld3BvcnRTaXplKCkpKTsKKwor
ICAgIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAg
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjRHJhd0V0YyIsIHRoaXMs
IDApOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIoKSwgcm9vdExheWVyKCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyKCktPnJl
bmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBsYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOworICAgIH0KKworICAgIGZvciAoaW50IHN1
cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUlu
ZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgeworICAgICAgICBDQ0xheWVySW1wbCogcmVuZGVy
U3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgp
OworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNl
TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKworICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiBw
YXNzID0gQ0NSZW5kZXJQYXNzOjpjcmVhdGUocmVuZGVyU3VyZmFjZUxheWVyKTsKKworICAgICAg
ICBjb25zdCBDQ0xheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBs
YXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBs
KiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChs
YXllci0+dmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXIt
PnJlbmRlclN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNlKSB7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IGVubmUsIHRoaXMgdXNlcyB0aGUgd3Jvbmcgc2l6ZSwgZXRjLgorICAgICAgICAgICAg
ICAgIHBhc3MtPmFkZEN1c3RvbVF1YWQobGF5ZXIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsYXllci0+ZmlsbFJlbmRlclBhc3MocGFz
cy5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBwYXNzZXMuYXBwZW5kKHBhc3MucmVsZWFz
ZSgpKTsKKyAgICB9Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygp
CiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMiLCB0
aGlzLCAwKTsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBpZiAobV9sYXllclJl
bmRlcmVyLT5yb290TGF5ZXIoKSkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJz
KCk7CisKKyAgICBpZiAoIXJvb3RMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0
b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiBwYXNzZXM7CisgICAgY2FsY3VsYXRlUmVuZGVyUGFz
c2VzKHBhc3Nlcyk7CisKKyAgICBtX2xheWVyUmVuZGVyZXItPmRpZEJlZ2luRnJhbWUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhc3Nlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9s
YXllclJlbmRlcmVyLT5kcmF3UmVuZGVyUGFzcyhwYXNzZXNbaV0uZ2V0KCkpOworICAgIG1fbGF5
ZXJSZW5kZXJlci0+ZGlkRmluaXNoRnJhbWUoKTsKIAogICAgICsrbV9mcmFtZU51bWJlcjsKKwor
ICAgIC8vIFRoZSBuZXh0IGZyYW1lIHNob3VsZCBzdGFydCBieSBhc3N1bWluZyBub3RoaW5nIGhh
cyBjaGFuZ2VkLCBhbmQgY2hhbmdlcyBhcmUgbm90ZWQgYXMgdGhleSBvY2N1ci4KKyAgICByb290
TGF5ZXIoKS0+cmVzZXRQcm9wZXJ0eUNoYW5nZWRGbGFnRm9yU3VidHJlZSgpOwogfQogCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmZpbmlzaEFsbFJlbmRlcmluZygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggYzI5ZmU0ZTA5NDExNTJlNDBlMGM0ZDJjMmNkZWEy
MzdjNDllZDlmNC4uZTRhZGI5ODk4NTE4NmUxYmIwZWRjYjg1ZjY2OGIzMTY2MzBiNTdjNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMjUsOCArMjUsMTAgQEAKICNp
Zm5kZWYgQ0NMYXllclRyZWVIb3N0SW1wbF9oCiAjZGVmaW5lIENDTGF5ZXJUcmVlSG9zdEltcGxf
aAogCisjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorI2luY2x1
ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogI2luY2x1ZGUgImNjL0NDU2Nyb2xsQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMTE2LDEwICsxMTgsMTMgQEAgcHJvdGVj
dGVkOgogICAgIGludCBtX2ZyYW1lTnVtYmVyOwogCiBwcml2YXRlOgorICAgIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsKKwogICAgIHZvaWQgc2V0UGFn
ZVNjYWxlRGVsdGEoZmxvYXQpOwogICAgIHZvaWQgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xs
TGF5ZXIoKTsKICAgICB2b2lkIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQp
OwogICAgIHZvaWQgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKKyAgICB2b2lkIGNhbGN1bGF0
ZVJlbmRlclBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYpOwogCiAgICAgT3du
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gbV9yb290TGF5ZXJJbXBsOwpAQCAtMTM1LDYgKzE0MCw4IEBAIHByaXZhdGU6
CiAgICAgZmxvYXQgbV9taW5QYWdlU2NhbGUsIG1fbWF4UGFnZVNjYWxlOwogCiAgICAgYm9vbCBt
X3BpbmNoR2VzdHVyZUFjdGl2ZTsKKworICAgIENDTGF5ZXJTb3J0ZXIgbV9sYXllclNvcnRlcjsK
IH07CiAKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjE0YWY4M2M2
MzEwYWYwMjlhYzFlNzU4Y2Y3ZTM2ZjJjYTkxNTE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcApA
QCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDUmVuZGVyUGFzczo6UXVhZEluZm86OlF1YWRJ
bmZvKCkKKyAgICA6IGxheWVyKDApCisgICAgLCBtYXRlcmlhbChJbnZhbGlkKQorICAgICwgdGV4
dHVyZUlkKDApCisgICAgLCBsZWZ0RWRnZUFBKGZhbHNlKQorICAgICwgdG9wRWRnZUFBKGZhbHNl
KQorICAgICwgcmlnaHRFZGdlQUEoZmFsc2UpCisgICAgLCBib3R0b21FZGdlQUEoZmFsc2UpCit7
Cit9CisKK1Bhc3NPd25QdHI8Q0NSZW5kZXJQYXNzPiBDQ1JlbmRlclBhc3M6OmNyZWF0ZShQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKK3sKKyAgICBpZiAoIWxheWVyKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWxheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJQYXNzKGxh
eWVyKSk7Cit9CisKK0NDUmVuZGVyUGFzczo6Q0NSZW5kZXJQYXNzKFBhc3NSZWZQdHI8Q0NMYXll
ckltcGw+IGxheWVyKQoreworICAgIG1fcmVuZGVyU3VyZmFjZUxheWVyID0gbGF5ZXI7Cit9CisK
K0NDUmVuZGVyU3VyZmFjZSogQ0NSZW5kZXJQYXNzOjpzdXJmYWNlKCkKK3sKKyAgICByZXR1cm4g
bV9yZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKK30KKwordm9pZCBDQ1JlbmRl
clBhc3M6OmFkZEN1c3RvbVF1YWQoQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIFF1YWRJbmZv
IHF1YWQ7CisgICAgcXVhZC5sYXllciA9IGxheWVyOworICAgIHF1YWQubWF0ZXJpYWwgPSBDdXN0
b21MYXllcjsKKyAgICBxdWFkLnF1YWRUcmFuc2Zvcm0gPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgp
OworICAgIHF1YWQucXVhZFJlY3QgPSBsYXllci0+dmlzaWJsZUxheWVyUmVjdCgpOworCisgICAg
bV9xdWFkcy5hcHBlbmQocXVhZCk7Cit9CisKK3ZvaWQgQ0NSZW5kZXJQYXNzOjphZGRUaWxlUXVh
ZChDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJh
bnNmb3JtLCBJbnRSZWN0JiBxdWFkUmVjdCwgaW50IHRleHR1cmVJZCwgY29uc3QgRmxvYXRQb2lu
dCYgdGV4dHVyZU9mZnNldCwgY29uc3QgRmxvYXRTaXplJiB0ZXh0dXJlU2l6ZSwgYm9vbCBsZWZ0
RWRnZUFBLCBib29sIHRvcEVkZ2VBQSwgYm9vbCByaWdodEVkZ2VBQSwgYm9vbCBib3R0b21FZGdl
QUEpCit7CisgICAgUXVhZEluZm8gcXVhZDsKKyAgICBxdWFkLmxheWVyID0gbGF5ZXI7CisgICAg
cXVhZC5tYXRlcmlhbCA9IFRpbGVkQ29udGVudDsKKyAgICBxdWFkLnF1YWRUcmFuc2Zvcm0gPSBx
dWFkVHJhbnNmb3JtOworICAgIHF1YWQucXVhZFJlY3QgPSBxdWFkUmVjdDsKKyAgICBxdWFkLnRl
eHR1cmVJZCA9IHRleHR1cmVJZDsKKyAgICBxdWFkLnRleHR1cmVPZmZzZXQgPSB0ZXh0dXJlT2Zm
c2V0OworICAgIHF1YWQudGV4dHVyZVNpemUgPSB0ZXh0dXJlU2l6ZTsKKyAgICBxdWFkLmxlZnRF
ZGdlQUEgPSBsZWZ0RWRnZUFBOworICAgIHF1YWQudG9wRWRnZUFBID0gdG9wRWRnZUFBOworICAg
IHF1YWQucmlnaHRFZGdlQUEgPSByaWdodEVkZ2VBQTsKKyAgICBxdWFkLmJvdHRvbUVkZ2VBQSA9
IGJvdHRvbUVkZ2VBQTsKKworICAgIG1fcXVhZHMuYXBwZW5kKHF1YWQpOworfQorCit2b2lkIEND
UmVuZGVyUGFzczo6YWRkQ29sb3JlZFF1YWQoQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgSW50UmVjdCYgcXVhZFJlY3QpCit7Cisg
ICAgUXVhZEluZm8gcXVhZDsKKyAgICBxdWFkLmxheWVyID0gbGF5ZXI7CisgICAgcXVhZC5tYXRl
cmlhbCA9IEJhY2tncm91bmRDb2xvcjsKKyAgICBxdWFkLnF1YWRUcmFuc2Zvcm0gPSBxdWFkVHJh
bnNmb3JtOworICAgIHF1YWQucXVhZFJlY3QgPSBxdWFkUmVjdDsKKworICAgIG1fcXVhZHMuYXBw
ZW5kKHF1YWQpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1YjBj
ZThmYWQ3NGVhMDU3MDhjODdhYmM1ZmVhYzg5ZTMwNmRkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
aApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDUmVuZGVyUGFzc19o
CisjZGVmaW5lIENDUmVuZGVyUGFzc19oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5j
bHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllcklt
cGw7CitjbGFzcyBDQ1JlbmRlclN1cmZhY2U7CisKK2NsYXNzIENDUmVuZGVyUGFzcyB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NSZW5kZXJQYXNzKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZShQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPik7
CisKKyAgICBDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UoKTsKKworICAgIHZvaWQgYWRkQ3VzdG9t
UXVhZChDQ0xheWVySW1wbCopOworICAgIHZvaWQgYWRkQ29sb3JlZFF1YWQoQ0NMYXllckltcGwq
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgSW50UmVjdCYgcXVh
ZFJlY3QpOworICAgIHZvaWQgYWRkVGlsZVF1YWQoQ0NMYXllckltcGwqLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgSW50UmVjdCYgcXVhZFJlY3QsIGludCB0ZXh0
dXJlSWQsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHR1cmVPZmZzZXQsIGNvbnN0IEZsb2F0U2l6ZSYg
dGV4dHVyZVNpemUsIGJvb2wgbGVmdEVkZ2VBQSwgYm9vbCB0b3BFZGdlQUEsIGJvb2wgcmlnaHRF
ZGdlQUEsIGJvb2wgYm90dG9tRWRnZUFBKTsKKworICAgIGVudW0gTWF0ZXJpYWwgeworICAgICAg
ICBJbnZhbGlkLAorICAgICAgICBUaWxlZENvbnRlbnQsCisgICAgICAgIEJhY2tncm91bmRDb2xv
ciwKKworICAgICAgICAvLyBVc2UgQ0NMYXllckltcGw6OmRyYXcgdG8gZHJhdyBhIGZ1bGwtbGF5
ZXIgcXVhZC4KKyAgICAgICAgQ3VzdG9tTGF5ZXIKKyAgICB9OworCisgICAgc3RydWN0IFF1YWRJ
bmZvIHsKKyAgICAgICAgUXVhZEluZm8oKTsKKworICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXI7
CisgICAgICAgIE1hdGVyaWFsIG1hdGVyaWFsOworCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHF1YWRUcmFuc2Zvcm07CisgICAgICAgIEludFJlY3QgcXVhZFJlY3Q7CisKKyAgICAgICAg
aW50IHRleHR1cmVJZDsKKyAgICAgICAgRmxvYXRQb2ludCB0ZXh0dXJlT2Zmc2V0OworICAgICAg
ICBGbG9hdFNpemUgdGV4dHVyZVNpemU7CisKKyAgICAgICAgYm9vbCBsZWZ0RWRnZUFBOworICAg
ICAgICBib29sIHRvcEVkZ2VBQTsKKyAgICAgICAgYm9vbCByaWdodEVkZ2VBQTsKKyAgICAgICAg
Ym9vbCBib3R0b21FZGdlQUE7CisgICAgfTsKKworICAgIGludCBudW1RdWFkcygpIHsgcmV0dXJu
IG1fcXVhZHMuc2l6ZSgpOyB9CisgICAgY29uc3QgUXVhZEluZm8mIHF1YWQoaW50IHF1YWRJZCkg
eyByZXR1cm4gbV9xdWFkc1txdWFkSWRdOyB9CisKK3Byb3RlY3RlZDoKKyAgICBDQ1JlbmRlclBh
c3MoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4pOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBt
X3JlbmRlclN1cmZhY2VMYXllcjsKKworICAgIFZlY3RvcjxRdWFkSW5mbz4gbV9xdWFkczsKK307
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVRdWFkUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlUXVhZFJlbmRlcmVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yZGY0Y2VkOWU3MzVjNWE4OWVmNDc0YmJkNmZiYzc3YTI1Mjk1Y2JlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaWxlUXVhZFJlbmRlcmVyLmNwcApAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNDVGlsZVF1YWRSZW5kZXJlci5oIgorCisjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFRpbGVQcm9ncmFtVW5pZm9ybXMgeworICAgIHVu
c2lnbmVkIHByb2dyYW07CisgICAgdW5zaWduZWQgc2FtcGxlckxvY2F0aW9uOworICAgIHVuc2ln
bmVkIHZlcnRleFRleFRyYW5zZm9ybUxvY2F0aW9uOworICAgIHVuc2lnbmVkIGZyYWdtZW50VGV4
VHJhbnNmb3JtTG9jYXRpb247CisgICAgdW5zaWduZWQgZWRnZUxvY2F0aW9uOworICAgIHVuc2ln
bmVkIG1hdHJpeExvY2F0aW9uOworICAgIHVuc2lnbmVkIGFscGhhTG9jYXRpb247CisgICAgdW5z
aWduZWQgcG9pbnRMb2NhdGlvbjsKK307CisKK3RlbXBsYXRlPGNsYXNzIFQ+CitzdGF0aWMgdm9p
ZCB1bmlmb3JtTG9jYXRpb24oVCBwcm9ncmFtLCBUaWxlUHJvZ3JhbVVuaWZvcm1zJiB1bmlmb3Jt
cykKK3sKKyAgICB1bmlmb3Jtcy5wcm9ncmFtPSBwcm9ncmFtLT5wcm9ncmFtKCk7CisgICAgdW5p
Zm9ybXMudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS52ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpOworICAgIHVuaWZvcm1zLm1hdHJpeExvY2F0
aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKKyAgICB1bmlm
b3Jtcy5wb2ludExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlv
bigpOworCisgICAgdW5pZm9ybXMuc2FtcGxlckxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRT
aGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKTsKKyAgICB1bmlmb3Jtcy5hbHBoYUxvY2F0aW9uID0g
cHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7CisgICAgdW5pZm9ybXMu
ZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCku
ZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpOworICAgIHVuaWZvcm1zLmVkZ2VMb2NhdGlv
biA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCk7Cit9CisKK3N0YXRp
YyB2b2lkIGZpbmRVbmlmb3JtcyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIs
IGJvb2wgaXNBQSwgYm9vbCBpc1N3aXp6bGVkLCBib29sIGlzT3BhcXVlLCBUaWxlUHJvZ3JhbVVu
aWZvcm1zJiB1bmlmb3JtcykKK3sKKyAgICBpZiAoaXNBQSkgeworICAgICAgICBpZiAoaXNTd2l6
emxlZCkgeworICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6
bGVBQSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGVBQSgpOwor
ICAgICAgICAgICAgdW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1zKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1BQSog
cHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbUFBKCk7CisgICAgICAgICAgICB1
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKGlzT3BhcXVlKSB7CisgICAgICAgICAgICBpZiAoaXNTd2l6emxlZCkg
eworICAgICAgICAgICAgICAgIGNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxl
T3BhcXVlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtU3dpenpsZU9wYXF1
ZSgpOworICAgICAgICAgICAgICAgIHVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3Jtcyk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0IENDVGlsZWRMYXll
ckltcGw6OlByb2dyYW1PcGFxdWUqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dy
YW1PcGFxdWUoKTsKKyAgICAgICAgICAgICAgICB1bmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5p
Zm9ybXMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KGlzU3dpenpsZWQpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQ
cm9ncmFtU3dpenpsZSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6
bGUoKTsKKyAgICAgICAgICAgICAgICB1bmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCBDQ1RpbGVkTGF5
ZXJJbXBsOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtKCk7
CisgICAgICAgICAgICAgICAgdW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1zKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworQ0NUaWxlUXVhZFJlbmRlcmVyOjpD
Q1RpbGVRdWFkUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQor
ICAgIDogbV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIpCisgICAgLCBtX2N1cnJlbnRMYXll
cigwKQorICAgICwgbV9sYXllckFudGlhbGlhc2VkKGZhbHNlKQorICAgICwgbV9sYXllckNvbnRl
bnRzU3dpenpsZWQoZmFsc2UpCisgICAgLCBtX2xheWVyT3BhcXVlKGZhbHNlKQorICAgICwgbV9s
YXllck9wYWNpdHkoMCkKK3sKKyAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcik7Cit9CisKK0dyYXBo
aWNzQ29udGV4dDNEKiBDQ1RpbGVRdWFkUmVuZGVyZXI6OmNvbnRleHQoKQoreworICAgIHJldHVy
biBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKK30KKwordm9pZCBDQ1RpbGVRdWFkUmVuZGVy
ZXI6OmJlZ2luTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bGF5ZXJUcmFuc2Zvcm0pCit7CisgICAgbV9kZXZpY2VUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlv
bk1hdHJpeChtX2xheWVyUmVuZGVyZXItPndpbmRvd01hdHJpeCgpICogbV9sYXllclJlbmRlcmVy
LT5wcm9qZWN0aW9uTWF0cml4KCkgKiBsYXllclRyYW5zZm9ybSkudG8yZFRyYW5zZm9ybSgpOwor
CisgICAgSW50UmVjdCBsYXllclJlY3QgPSBsYXllci0+dmlzaWJsZUxheWVyUmVjdCgpOworICAg
IEZsb2F0UXVhZCBxdWFkID0gbV9kZXZpY2VUcmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1YWQobGF5
ZXJSZWN0KSk7CisgICAgbV9kZXZpY2VSZWN0ID0gQ0NMYXllclF1YWQoRmxvYXRRdWFkKHF1YWQu
Ym91bmRpbmdCb3goKSkpOworICAgIG1fbGF5ZXJRdWFkID0gQ0NMYXllclF1YWQocXVhZCk7CisK
KyAgICBtX2xheWVyT3BhY2l0eSA9IGxheWVyLT5kcmF3T3BhY2l0eSgpOworICAgIG1fbGF5ZXJP
cGFxdWUgPSBsYXllci0+b3BhcXVlKCkgJiYgbGF5ZXItPmRyYXdPcGFjaXR5KCkgPT0gMTsKKyAg
ICBtX2xheWVyQ29udGVudHNTd2l6emxlZCA9IGxheWVyLT5jb250ZW50c1N3aXp6bGVkKCk7CisK
KyAgICAvLyBVc2UgZWRnZSBhbnRpLWFsaWFzaW5nIHByb2dyYW1zIG9ubHkgd2hlbiBhc2tlZCBm
b3IgYW5kIG5lY2Vzc2FyeS4KKyAgICBtX2xheWVyQW50aWFsaWFzZWQgPSAobGF5ZXItPmFudGlh
bGlhc2VkRWRnZXMoKSAmJiAoIXF1YWQuaXNSZWN0aWxpbmVhcigpIHx8ICFxdWFkLmJvdW5kaW5n
Qm94KCkuaXNFeHByZXNzaWJsZUFzSW50UmVjdCgpKSk7CisKKyAgICBpZiAobV9sYXllckFudGlh
bGlhc2VkKSB7CisgICAgICAgIG1fZGV2aWNlUmVjdC5pbmZsYXRlQW50aUFsaWFzaW5nRGlzdGFu
Y2UoKTsKKyAgICAgICAgbV9sYXllclF1YWQuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7
CisgICAgfQorfQorCit2b2lkIENDVGlsZVF1YWRSZW5kZXJlcjo6ZHJhdyhjb25zdCBDQ1JlbmRl
clBhc3M6OlF1YWRJbmZvJiBxdWFkSW5mbykKK3sKKyAgICBBU1NFUlQocXVhZEluZm8udGV4dHVy
ZUlkKTsKKyAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBxdWFkSW5mby5sYXllcjsKKworICAgIGlm
IChxdWFkSW5mby5sYXllciAhPSBtX2N1cnJlbnRMYXllcikgeworICAgICAgICAvLyBGSVhNRTog
dGhpcyB0cmFuc2Zvcm0gaXMgdGhlIHNhbWUgZm9yIGV2ZXJ5IHF1YWQgaW4gdGhpcyBsYXllciwg
YnV0CisgICAgICAgIC8vIGl0J3MgYXdrd2FyZCB0byBnZXQgaXQgZnJvbSBhIHF1YWQgYW5kIGFz
c3VtZSBpdCdzIHRoZSBzYW1lLiBJdAorICAgICAgICAvLyBzaG91bGQgZWl0aGVyIGJlIGV4cGxp
Y2l0IGluIHRoZSByZW5kZXIgcGFzcyBhcyBwZXItbGF5ZXIgaW5mb3JtYXRpb24KKyAgICAgICAg
Ly8gb3IgZXhwb3NlZCBvbiB0aGUgYmFzZSBsYXllciBpdHNlbGYuCisgICAgICAgIG1fbGF5ZXJU
cmFuc2Zvcm0gPSBxdWFkSW5mby5xdWFkVHJhbnNmb3JtOworICAgICAgICBiZWdpbkxheWVyKGxh
eWVyLCBtX2xheWVyVHJhbnNmb3JtKTsKKyAgICAgICAgbV9jdXJyZW50TGF5ZXIgPSBxdWFkSW5m
by5sYXllcjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBkcmF3IGFueSB0aWxlcyB3aGVuIGRldmlj
ZSBtYXRyaXggaXMgbm90IGludmVydGlibGUuCisgICAgaWYgKCFtX2RldmljZVRyYW5zZm9ybS5p
c0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCB0aWxlUmVjdCA9
IHF1YWRJbmZvLnF1YWRSZWN0OworCisgICAgRmxvYXRSZWN0IGNsYW1wUmVjdCh0aWxlUmVjdCk7
CisgICAgLy8gQ2xhbXAgdGV4dHVyZSBjb29yZGluYXRlcyB0byBhdm9pZCBzYW1wbGluZyBvdXRz
aWRlIHRoZSBsYXllcgorICAgIC8vIGJ5IGRlZmxhdGluZyB0aGUgdGlsZSByZWdpb24gaGFsZiBh
IHRleGVsIG9yIGhhbGYgYSB0ZXhlbAorICAgIC8vIG1pbnVzIGVwc2lsb24gZm9yIG9uZSBwaXhl
bCBsYXllcnMuIFRoZSByZXN1bHRpbmcgY2xhbXAgcmVnaW9uCisgICAgLy8gaXMgbWFwcGVkIHRv
IHRoZSB1bml0IHNxdWFyZSBieSB0aGUgdmVydGV4IHNoYWRlciBhbmQgbWFwcGVkCisgICAgLy8g
YmFjayB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdtZW50IHNo
YWRlcgorICAgIC8vIGFmdGVyIGJlaW5nIGNsYW1wZWQgdG8gMC0xIHJhbmdlLgorICAgIGNvbnN0
IGZsb2F0IGVwc2lsb24gPSAxIC8gMTAyNC4wZjsKKyAgICBmbG9hdCBjbGFtcFggPSBtaW4oMC41
LCBjbGFtcFJlY3Qud2lkdGgoKSAvIDIuMCAtIGVwc2lsb24pOworICAgIGZsb2F0IGNsYW1wWSA9
IG1pbigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAvIDIuMCAtIGVwc2lsb24pOworICAgIGNsYW1w
UmVjdC5pbmZsYXRlWCgtY2xhbXBYKTsKKyAgICBjbGFtcFJlY3QuaW5mbGF0ZVkoLWNsYW1wWSk7
CisgICAgRmxvYXRTaXplIGNsYW1wT2Zmc2V0ID0gY2xhbXBSZWN0Lm1pblhNaW5ZQ29ybmVyKCkg
LSBGbG9hdFJlY3QodGlsZVJlY3QpLm1pblhNaW5ZQ29ybmVyKCk7CisKKyAgICBGbG9hdFBvaW50
IHRleHR1cmVPZmZzZXQgPSBxdWFkSW5mby50ZXh0dXJlT2Zmc2V0ICsgY2xhbXBPZmZzZXQ7CisK
KyAgICAvLyBNYXAgY2xhbXBpbmcgcmVjdGFuZ2xlIHRvIHVuaXQgc3F1YXJlLgorICAgIGZsb2F0
IHZlcnRleFRleFRyYW5zbGF0ZVggPSAtY2xhbXBSZWN0LngoKSAvIGNsYW1wUmVjdC53aWR0aCgp
OworICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVkgPSAtY2xhbXBSZWN0LnkoKSAvIGNsYW1w
UmVjdC5oZWlnaHQoKTsKKyAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVggPSB0aWxlUmVjdC53aWR0
aCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7CisgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVZID0gdGls
ZVJlY3QuaGVpZ2h0KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7CisKKyAgICAvLyBNYXAgdG8gbm9y
bWFsaXplZCB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAgIGZsb2F0IGZyYWdtZW50VGV4VHJhbnNs
YXRlWCA9IHRleHR1cmVPZmZzZXQueCgpIC8gcXVhZEluZm8udGV4dHVyZVNpemUud2lkdGgoKTsK
KyAgICBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSB0ZXh0dXJlT2Zmc2V0LnkoKSAvIHF1
YWRJbmZvLnRleHR1cmVTaXplLmhlaWdodCgpOworICAgIGZsb2F0IGZyYWdtZW50VGV4U2NhbGVY
ID0gY2xhbXBSZWN0LndpZHRoKCkgLyBxdWFkSW5mby50ZXh0dXJlU2l6ZS53aWR0aCgpOworICAg
IGZsb2F0IGZyYWdtZW50VGV4U2NhbGVZID0gY2xhbXBSZWN0LmhlaWdodCgpIC8gcXVhZEluZm8u
dGV4dHVyZVNpemUuaGVpZ2h0KCk7CisKKyAgICBUaWxlUHJvZ3JhbVVuaWZvcm1zIHVuaWZvcm1z
OworICAgIGZpbmRVbmlmb3JtcyhtX2xheWVyUmVuZGVyZXIsIG1fbGF5ZXJBbnRpYWxpYXNlZCwg
bV9sYXllckNvbnRlbnRzU3dpenpsZWQsIG1fbGF5ZXJPcGFxdWUsIHVuaWZvcm1zKTsKKworICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbSh1bmlmb3Jtcy5wcm9ncmFtKSk7
CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkodW5pZm9ybXMuc2FtcGxl
ckxvY2F0aW9uLCAwKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHF1YWRJ
bmZvLnRleHR1cmVJZCkpOworCisgICAgaWYgKG1fbGF5ZXJBbnRpYWxpYXNlZCkKKyAgICAgICAg
ZHJhd0FBUXVhZCh1bmlmb3JtcywgdGlsZVJlY3QsIHZlcnRleFRleFRyYW5zbGF0ZVgsIHZlcnRl
eFRleFRyYW5zbGF0ZVksIHZlcnRleFRleFNjYWxlWCwgdmVydGV4VGV4U2NhbGVZLCBmcmFnbWVu
dFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgs
IGZyYWdtZW50VGV4U2NhbGVZLCBxdWFkSW5mby5sZWZ0RWRnZUFBLCBxdWFkSW5mby50b3BFZGdl
QUEsIHF1YWRJbmZvLnJpZ2h0RWRnZUFBLCBxdWFkSW5mby5ib3R0b21FZGdlQUEpOworICAgIGVs
c2UKKyAgICAgICAgZHJhd1F1YWQodW5pZm9ybXMsIHRpbGVSZWN0LCB2ZXJ0ZXhUZXhUcmFuc2xh
dGVYLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVZLCB2ZXJ0ZXhUZXhTY2FsZVgsIHZlcnRleFRleFNjYWxl
WSwgZnJhZ21lbnRUZXhUcmFuc2xhdGVYLCBmcmFnbWVudFRleFRyYW5zbGF0ZVksIGZyYWdtZW50
VGV4U2NhbGVYLCBmcmFnbWVudFRleFNjYWxlWSk7Cit9CisKK3ZvaWQgQ0NUaWxlUXVhZFJlbmRl
cmVyOjpkcmF3QUFRdWFkKGNvbnN0IFRpbGVQcm9ncmFtVW5pZm9ybXMmIHVuaWZvcm1zLCBjb25z
dCBJbnRSZWN0JiB0aWxlUmVjdCwgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWCwgZmxvYXQgdmVy
dGV4VGV4VHJhbnNsYXRlWSwgZmxvYXQgdmVydGV4VGV4U2NhbGVYLCBmbG9hdCB2ZXJ0ZXhUZXhT
Y2FsZVksIGZsb2F0IGZyYWdtZW50VGV4VHJhbnNsYXRlWCwgZmxvYXQgZnJhZ21lbnRUZXhUcmFu
c2xhdGVZLCBmbG9hdCBmcmFnbWVudFRleFNjYWxlWCwgZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVks
IGJvb2wgbGVmdEVkZ2VBQSwgYm9vbCB0b3BFZGdlQUEsIGJvb2wgcmlnaHRFZGdlQUEsIGJvb2wg
Ym90dG9tRWRnZUFBKQoreworICAgIC8vIEFBIGZyYWdtZW50IHNoYWRlcnMgc2hvdWxkIGFsbCBz
dXBwbHkgdGhlc2UgdW5pZm9ybXMuCisgICAgQVNTRVJUKHVuaWZvcm1zLmVkZ2VMb2NhdGlvbiA+
PSAwKTsKKyAgICBBU1NFUlQodW5pZm9ybXMuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiA+
PSAwKTsKKworICAgIGZsb2F0IGVkZ2VbMjRdOworICAgIG1fbGF5ZXJRdWFkLnRvRmxvYXRBcnJh
eShlZGdlKTsKKyAgICBtX2RldmljZVJlY3QudG9GbG9hdEFycmF5KCZlZGdlWzEyXSk7CisgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtM2Z2KHVuaWZvcm1zLmVkZ2VMb2NhdGlv
biwgZWRnZSwgOCkpOworCisgICAgRmxvYXRQb2ludCBib3R0b21SaWdodCh0aWxlUmVjdC5tYXhY
KCksIHRpbGVSZWN0Lm1heFkoKSk7CisgICAgRmxvYXRQb2ludCBib3R0b21MZWZ0KHRpbGVSZWN0
LngoKSwgdGlsZVJlY3QubWF4WSgpKTsKKyAgICBGbG9hdFBvaW50IHRvcExlZnQodGlsZVJlY3Qu
eCgpLCB0aWxlUmVjdC55KCkpOworICAgIEZsb2F0UG9pbnQgdG9wUmlnaHQodGlsZVJlY3QubWF4
WCgpLCB0aWxlUmVjdC55KCkpOworCisgICAgLy8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2Uu
CisgICAgYm90dG9tUmlnaHQgPSBtX2RldmljZVRyYW5zZm9ybS5tYXBQb2ludChib3R0b21SaWdo
dCk7CisgICAgYm90dG9tTGVmdCA9IG1fZGV2aWNlVHJhbnNmb3JtLm1hcFBvaW50KGJvdHRvbUxl
ZnQpOworICAgIHRvcExlZnQgPSBtX2RldmljZVRyYW5zZm9ybS5tYXBQb2ludCh0b3BMZWZ0KTsK
KyAgICB0b3BSaWdodCA9IG1fZGV2aWNlVHJhbnNmb3JtLm1hcFBvaW50KHRvcFJpZ2h0KTsKKwor
ICAgIENDTGF5ZXJRdWFkOjpFZGdlIGJvdHRvbUVkZ2UoYm90dG9tUmlnaHQsIGJvdHRvbUxlZnQp
OworICAgIENDTGF5ZXJRdWFkOjpFZGdlIGxlZnRFZGdlKGJvdHRvbUxlZnQsIHRvcExlZnQpOwor
ICAgIENDTGF5ZXJRdWFkOjpFZGdlIHRvcEVkZ2UodG9wTGVmdCwgdG9wUmlnaHQpOworICAgIEND
TGF5ZXJRdWFkOjpFZGdlIHJpZ2h0RWRnZSh0b3BSaWdodCwgYm90dG9tUmlnaHQpOworCisgICAg
ZmxvYXQgc2lnbiA9IEZsb2F0UXVhZCh0aWxlUmVjdCkuaXNDb3VudGVyY2xvY2t3aXNlKCkgPyAt
MSA6IDE7CisgICAgYm90dG9tRWRnZS5zY2FsZShzaWduKTsKKyAgICBsZWZ0RWRnZS5zY2FsZShz
aWduKTsKKyAgICB0b3BFZGdlLnNjYWxlKHNpZ24pOworICAgIHJpZ2h0RWRnZS5zY2FsZShzaWdu
KTsKKworICAgIGlmICh0b3BFZGdlQUEpCisgICAgICAgIHRvcEVkZ2UgPSBtX2xheWVyUXVhZC50
b3AoKTsKKyAgICBpZiAobGVmdEVkZ2VBQSkKKyAgICAgICAgbGVmdEVkZ2UgPSBtX2xheWVyUXVh
ZC5sZWZ0KCk7CisgICAgaWYgKHJpZ2h0RWRnZUFBKQorICAgICAgICByaWdodEVkZ2UgPSBtX2xh
eWVyUXVhZC5yaWdodCgpOworICAgIGlmIChib3R0b21FZGdlQUEpCisgICAgICAgIGJvdHRvbUVk
Z2UgPSBtX2xheWVyUXVhZC5ib3R0b20oKTsKKworICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3BhY2Ug
cXVhZC4KKyAgICBDQ0xheWVyUXVhZCBkZXZpY2VRdWFkKGxlZnRFZGdlLCB0b3BFZGdlLCByaWdo
dEVkZ2UsIGJvdHRvbUVkZ2UpOworCisgICAgLy8gTWFwIHF1YWQgdG8gbGF5ZXIgc3BhY2UuCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybSA9IG1fZGV2aWNlVHJhbnNmb3Jt
LmludmVyc2UoKTsKKyAgICBGbG9hdFF1YWQgcXVhZCA9IHF1YWRUcmFuc2Zvcm0ubWFwUXVhZChk
ZXZpY2VRdWFkLmZsb2F0UXVhZCgpKTsKKworICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxlUmVjdC4K
KyAgICBxdWFkLnNjYWxlKDEuMGYgLyB0aWxlUmVjdC53aWR0aCgpLCAxLjBmIC8gdGlsZVJlY3Qu
aGVpZ2h0KCkpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYodW5p
Zm9ybXMudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24sIHZlcnRleFRleFRyYW5zbGF0ZVgsIHZl
cnRleFRleFRyYW5zbGF0ZVksIHZlcnRleFRleFNjYWxlWCwgdmVydGV4VGV4U2NhbGVZKSk7Cisg
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYodW5pZm9ybXMuZnJhZ21lbnRU
ZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgZnJhZ21lbnRUZXhUcmFuc2xhdGVYLCBmcmFnbWVudFRleFRy
YW5zbGF0ZVksIGZyYWdtZW50VGV4U2NhbGVYLCBmcmFnbWVudFRleFNjYWxlWSkpOworCisgICAg
bV9sYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKG1fbGF5ZXJUcmFuc2Zvcm0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LmhlaWdodCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xheWVyT3BhY2l0eSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMubWF0cml4TG9jYXRpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLmFscGhhTG9jYXRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLnBvaW50TG9jYXRpb24p
OworfQorCit2b2lkIENDVGlsZVF1YWRSZW5kZXJlcjo6ZHJhd1F1YWQoY29uc3QgVGlsZVByb2dy
YW1Vbmlmb3JtcyYgdW5pZm9ybXMsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBmbG9hdCB2ZXJ0
ZXhUZXhUcmFuc2xhdGVYLCBmbG9hdCB2ZXJ0ZXhUZXhUcmFuc2xhdGVZLCBmbG9hdCB2ZXJ0ZXhU
ZXhTY2FsZVgsIGZsb2F0IHZlcnRleFRleFNjYWxlWSwgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xh
dGVYLCBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVksIGZsb2F0IGZyYWdtZW50VGV4U2NhbGVY
LCBmbG9hdCBmcmFnbWVudFRleFNjYWxlWSkKK3sKKyAgICAvLyBNb3ZlIGZyYWdtZW50IHNoYWRl
ciB0cmFuc2Zvcm0gdG8gdmVydGV4IHNoYWRlci4gV2UgY2FuIGRvIHRoaXMgd2hpbGUKKyAgICAv
LyBzdGlsbCBwcm9kdWNpbmcgY29ycmVjdCByZXN1bHRzIGFzIGZyYWdtZW50VGV4VHJhbnNmb3Jt
TG9jYXRpb24gc2hvdWxkCisgICAgLy8gYWx3YXlzIGJlIG5vbi1uZWdhdGl2ZSB3aGVuIHRpbGVz
IGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdheSB0aGF0IGNvdWxkCisgICAgLy8gcmVzdWx0IGluIHNh
bXBsaW5nIG91dHNpZGUgdGhlIGxheWVyLgorICAgIHZlcnRleFRleFNjYWxlWCAqPSBmcmFnbWVu
dFRleFNjYWxlWDsKKyAgICB2ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7Cisg
ICAgdmVydGV4VGV4VHJhbnNsYXRlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKKyAgICB2ZXJ0ZXhU
ZXhUcmFuc2xhdGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOworICAgIHZlcnRleFRleFRyYW5zbGF0
ZVggKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOworICAgIHZlcnRleFRleFRyYW5zbGF0ZVkgKz0g
ZnJhZ21lbnRUZXhUcmFuc2xhdGVZOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51
bmlmb3JtNGYodW5pZm9ybXMudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24sIHZlcnRleFRleFRy
YW5zbGF0ZVgsIHZlcnRleFRleFRyYW5zbGF0ZVksIHZlcnRleFRleFNjYWxlWCwgdmVydGV4VGV4
U2NhbGVZKSk7CisKKyAgICBGbG9hdFF1YWQgcXVhZCh0aWxlUmVjdCk7CisgICAgcXVhZC5zY2Fs
ZSgxLjBmIC8gdGlsZVJlY3Qud2lkdGgoKSwgMS4wZiAvIHRpbGVSZWN0LmhlaWdodCgpKTsKKwor
ICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZChtX2xheWVyVHJhbnNmb3JtLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC5oZWlnaHQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sYXllck9wYWNpdHksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLm1hdHJpeExvY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5hbHBoYUxvY2F0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5wb2ludExvY2F0
aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlUXVhZFJlbmRlcmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVRdWFk
UmVuZGVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzljM2M4MTNkM2Q4MmIzZTQ5YzFjOWQ2OTBlZGQzMDBi
MjA2MGUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaWxlUXVhZFJlbmRlcmVyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ0NUaWxlUXVhZFJlbmRlcmVyX2gKKyNkZWZpbmUgQ0NUaWxlUXVhZFJlbmRl
cmVyX2gKKworI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclF1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEdyYXBoaWNzTGF5
ZXJDb250ZXh0OworY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOworY2xhc3MgVGlsZVByb2dy
YW1Vbmlmb3JtczsKKworY2xhc3MgQ0NUaWxlUXVhZFJlbmRlcmVyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDQ1RpbGVRdWFkUmVuZGVyZXIpOworcHVibGljOgorICAgIENDVGlsZVF1YWRS
ZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2b2lkIGRyYXcoY29uc3QgQ0NS
ZW5kZXJQYXNzOjpRdWFkSW5mbyYpOworCitwcml2YXRlOgorICAgIHZvaWQgYmVnaW5MYXllcihD
Q0xheWVySW1wbCosIFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQoKTsKKworICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgVGlsZVByb2dyYW1Vbmlm
b3JtcyYsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBmbG9hdCB2ZXJ0ZXhUZXhUcmFuc2xhdGVY
LCBmbG9hdCB2ZXJ0ZXhUZXhUcmFuc2xhdGVZLCBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVgsIGZsb2F0
IHZlcnRleFRleFNjYWxlWSwgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVYLCBmbG9hdCBmcmFn
bWVudFRleFRyYW5zbGF0ZVksIGZsb2F0IGZyYWdtZW50VGV4U2NhbGVYLCBmbG9hdCBmcmFnbWVu
dFRleFNjYWxlWSk7CisgICAgdm9pZCBkcmF3QUFRdWFkKGNvbnN0IFRpbGVQcm9ncmFtVW5pZm9y
bXMmLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWCwg
ZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWSwgZmxvYXQgdmVydGV4VGV4U2NhbGVYLCBmbG9hdCB2
ZXJ0ZXhUZXhTY2FsZVksIGZsb2F0IGZyYWdtZW50VGV4VHJhbnNsYXRlWCwgZmxvYXQgZnJhZ21l
bnRUZXhUcmFuc2xhdGVZLCBmbG9hdCBmcmFnbWVudFRleFNjYWxlWCwgZmxvYXQgZnJhZ21lbnRU
ZXhTY2FsZVksIGJvb2wgbGVmdEVkZ2VBQSwgYm9vbCB0b3BFZGdlQUEsIGJvb2wgcmlnaHRFZGdl
QUEsIGJvb2wgYm90dG9tRWRnZUFBKTsKKworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9s
YXllclJlbmRlcmVyOworICAgIENDTGF5ZXJJbXBsKiBtX2N1cnJlbnRMYXllcjsKKyAgICBib29s
IG1fbGF5ZXJBbnRpYWxpYXNlZDsKKyAgICBib29sIG1fbGF5ZXJDb250ZW50c1N3aXp6bGVkOwor
ICAgIGJvb2wgbV9sYXllck9wYXF1ZTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZGV2
aWNlVHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbGF5ZXJUcmFuc2Zvcm07
CisgICAgZmxvYXQgbV9sYXllck9wYWNpdHk7CisgICAgQ0NMYXllclF1YWQgbV9kZXZpY2VSZWN0
OworICAgIENDTGF5ZXJRdWFkIG1fbGF5ZXJRdWFkOworfTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZWRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKaW5kZXggMjIwOWM4YTRiMTA1ZTcxMGU5ZGYxOGQ1
MDZiM2M5MDM5NTEyNWZiNy4uNDczZDA1OTRjOTJiYjFiNjNmODI2MDQ1ZmEzNGI1ZTczY2MxOGU0
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKQEAgLTEwNyw3NiArMTA3LDQ3
IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IENDVGlsZWRMYXllckltcGw6OnRpbGluZ1RyYW5zZm9y
bSgpIGNvbnN0CiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBDQ1RpbGVkTGF5ZXJJ
bXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3ZvaWQgQ0NU
aWxlZExheWVySW1wbDo6ZmlsbFJlbmRlclBhc3MoQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQog
ewotICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKKyAg
ICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKIAotICAg
IGlmIChtX3NraXBzRHJhdyB8fCAhbV90aWxlciB8fCBtX3RpbGVyLT5pc0VtcHR5KCkgfHwgbGF5
ZXJSZWN0LmlzRW1wdHkoKSB8fCAhbGF5ZXJSZW5kZXJlcikKKyAgICBpZiAobV9za2lwc0RyYXcg
fHwgIW1fdGlsZXIgfHwgbV90aWxlci0+aXNFbXB0eSgpIHx8IGNvbnRlbnRSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFu
c2Zvcm0gPSB0aWxpbmdUcmFuc2Zvcm0oKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZp
Y2VNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChsYXllclJlbmRlcmVyLT53aW5kb3dNYXRy
aXgoKSAqIGxheWVyUmVuZGVyZXItPnByb2plY3Rpb25NYXRyaXgoKSAqIGxheWVyVHJhbnNmb3Jt
KS50bzJkVHJhbnNmb3JtKCk7Ci0KLSAgICAvLyBEb24ndCBkcmF3IGFueSB0aWxlcyB3aGVuIGRl
dmljZSBtYXRyaXggaXMgbm90IGludmVydGlibGUuCi0gICAgaWYgKCFkZXZpY2VNYXRyaXguaXNJ
bnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVj
dCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBJbnRSZWN0IGxheWVyUmVjdCA9IG1f
dGlsZXItPmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOworICAgIGZvciAoaW50
IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7
IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgRHJhd2FibGVUaWxlKiB0aWxlID0gdGls
ZUF0KGksIGopOworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IG1fdGlsZXItPnRpbGVC
b3VuZHMoaSwgaik7CisgICAgICAgICAgICBJbnRSZWN0IGRpc3BsYXlSZWN0ID0gdGlsZVJlY3Q7
CisgICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3QobGF5ZXJSZWN0KTsKIAotICAgIEZsb2F0
UXVhZCBxdWFkID0gZGV2aWNlTWF0cml4Lm1hcFF1YWQoRmxvYXRRdWFkKGxheWVyUmVjdCkpOwot
ICAgIENDTGF5ZXJRdWFkIGRldmljZVJlY3QgPSBDQ0xheWVyUXVhZChGbG9hdFF1YWQocXVhZC5i
b3VuZGluZ0JveCgpKSk7Ci0gICAgQ0NMYXllclF1YWQgbGF5ZXJRdWFkID0gQ0NMYXllclF1YWQo
cXVhZCk7CisgICAgICAgICAgICAvLyBTa2lwIGVtcHR5IHRpbGVzLgorICAgICAgICAgICAgaWYg
KHRpbGVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotI2lmIGRl
ZmluZWQoT1NfQ0hST01FT1MpCi0gICAgLy8gRklYTUU6IERpc2FibGUgYW50aS1hbGlhc2luZyB0
byB3b3JrYXJvdW5kIGJyb2tlbiBkcml2ZXIuCi0gICAgYm9vbCB1c2VBQSA9IGZhbHNlOwotI2Vs
c2UKLSAgICAvLyBVc2UgYW50aS1hbGlhc2luZyBwcm9ncmFtcyBvbmx5IHdoZW4gbmVjZXNzYXJ5
LgotICAgIGJvb2wgdXNlQUEgPSAobV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCkgJiYgKCFxdWFk
LmlzUmVjdGlsaW5lYXIoKSB8fCAhcXVhZC5ib3VuZGluZ0JveCgpLmlzRXhwcmVzc2libGVBc0lu
dFJlY3QoKSkpOwotI2VuZGlmCisgICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPnRleHR1
cmVJZCgpKSB7CisgICAgICAgICAgICAgICAgcmVuZGVyUGFzcy0+YWRkQ29sb3JlZFF1YWQodGhp
cywgdGlsaW5nVHJhbnNmb3JtKCksIHRpbGVSZWN0KTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KIAotICAgIGlmICh1c2VBQSkgewotICAgICAgICBkZXZpY2VSZWN0
LmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOwotICAgICAgICBsYXllclF1YWQuaW5mbGF0
ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7Ci0gICAgfQorICAgICAgICAgICAgLy8gS2VlcCB0cmFj
ayBvZiBob3cgdGhlIHRvcCBsZWZ0IGhhcyBtb3ZlZCwgc28gdGhlIHRleHR1cmUgY2FuIGJlCisg
ICAgICAgICAgICAvLyBvZmZzZXQgdGhlIHNhbWUgYW1vdW50LgorICAgICAgICAgICAgSW50U2l6
ZSBkaXNwbGF5T2Zmc2V0ID0gdGlsZVJlY3QubWluWE1pbllDb3JuZXIoKSAtIGRpc3BsYXlSZWN0
Lm1pblhNaW5ZQ29ybmVyKCk7CisgICAgICAgICAgICBGbG9hdFBvaW50IHRleHR1cmVPZmZzZXQg
PSBtX3RpbGVyLT50ZXh0dXJlT2Zmc2V0KGksIGopICsgRmxvYXRTaXplKGRpc3BsYXlPZmZzZXQp
OworICAgICAgICAgICAgZmxvYXQgdGlsZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGls
ZXItPnRpbGVTaXplKCkud2lkdGgoKSk7CisgICAgICAgICAgICBmbG9hdCB0aWxlSGVpZ2h0ID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZXItPnRpbGVTaXplKCkuaGVpZ2h0KCkpOworICAgICAg
ICAgICAgRmxvYXRTaXplIHRleHR1cmVTaXplKHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7CiAKLSAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsK
LSAgICBpZiAoaXNOb25Db21wb3NpdGVkQ29udGVudCgpKQotICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKLQotICAgIHN3aXRj
aCAobV9zYW1wbGVkVGV4ZWxGb3JtYXQpIHsKLSAgICBjYXNlIExheWVyVGV4dHVyZVVwZGF0ZXI6
OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkE6Ci0gICAgICAgIGlmICh1c2VBQSkgewotICAgICAgICAg
ICAgY29uc3QgUHJvZ3JhbUFBKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFt
QUEoKTsKLSAgICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxh
eWVyVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09w
YWNpdHkoKSwgcHJvZ3JhbSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVudFRleFRy
YW5zZm9ybUxvY2F0aW9uKCksIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9u
KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGlzTm9uQ29tcG9zaXRlZENv
bnRlbnQoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFByb2dyYW1PcGFxdWUqIHByb2dyYW0g
PSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1PcGFxdWUoKTsKLSAgICAgICAgICAgICAgICBk
cmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNl
TWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIC0x
LCAtMSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnN0IFByb2dy
YW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW0oKTsKLSAgICAgICAgICAg
ICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwg
ZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dy
YW0sIC0xLCAtMSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBib29sIGxlZnRFZGdlQUEg
PSAhaTsKKyAgICAgICAgICAgIGJvb2wgdG9wRWRnZUFBID0gIWo7CisgICAgICAgICAgICBib29s
IHJpZ2h0RWRnZUFBID0gaSA9PSBtX3RpbGVyLT5udW1UaWxlc1goKSAtIDE7CisgICAgICAgICAg
ICBib29sIGJvdHRvbUVkZ2VBQSA9IGogPT0gbV90aWxlci0+bnVtVGlsZXNZKCkgLSAxOworICAg
ICAgICAgICAgcmVuZGVyUGFzcy0+YWRkVGlsZVF1YWQodGhpcywgdGlsaW5nVHJhbnNmb3JtKCks
IHRpbGVSZWN0LCB0aWxlLT50ZXh0dXJlSWQoKSwgdGV4dHVyZU9mZnNldCwgdGV4dHVyZVNpemUs
IGxlZnRFZGdlQUEsIHRvcEVkZ2VBQSwgcmlnaHRFZGdlQUEsIGJvdHRvbUVkZ2VBQSk7CiAgICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1w
bGVkVGV4ZWxGb3JtYXRCR1JBOgotICAgICAgICBpZiAodXNlQUEpIHsKLSAgICAgICAgICAgIGNv
bnN0IFByb2dyYW1Td2l6emxlQUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dy
YW1Td2l6emxlQUEoKTsKLSAgICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXll
clJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVh
ZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFn
bWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRn
ZUxvY2F0aW9uKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGlzTm9uQ29t
cG9zaXRlZENvbnRlbnQoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFByb2dyYW1Td2l6emxl
T3BhcXVlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtU3dpenpsZU9wYXF1
ZSgpOwotICAgICAgICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3Qs
IGxheWVyVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJh
d09wYWNpdHkoKSwgcHJvZ3JhbSwgLTEsIC0xKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVN3aXp6bGUqIHByb2dyYW0gPSBsYXllclJlbmRlcmVy
LT50aWxlclByb2dyYW1Td2l6emxlKCk7Ci0gICAgICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVy
UmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNl
UmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGlmIChpc05vbkNvbXBvc2l0ZWRD
b250ZW50KCkpCi0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKSk7CiB9CiAKIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6c2V0VGlsaW5n
RGF0YShjb25zdCBDQ0xheWVyVGlsaW5nRGF0YSYgdGlsZXIpCkBAIC0xODYsNiArMTU3LDE0IEBA
IHZvaWQgQ0NUaWxlZExheWVySW1wbDo6c2V0VGlsaW5nRGF0YShjb25zdCBDQ0xheWVyVGlsaW5n
RGF0YSYgdGlsZXIpCiAgICAgZWxzZQogICAgICAgICBtX3RpbGVyID0gQ0NMYXllclRpbGluZ0Rh
dGE6OmNyZWF0ZSh0aWxlci50aWxlU2l6ZSgpLCB0aWxlci5oYXNCb3JkZXJUZXhlbHMoKSA/IEND
TGF5ZXJUaWxpbmdEYXRhOjpIYXNCb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6Tm9C
b3JkZXJUZXhlbHMpOwogICAgICptX3RpbGVyID0gdGlsZXI7CisKKyNpZiBkZWZpbmVkKE9TX0NI
Uk9NRU9TKQorICAgIC8vIEZJWE1FOiBEaXNhYmxlIGFudGktYWxpYXNpbmcgdG8gd29ya2Fyb3Vu
ZCBicm9rZW4gZHJpdmVyLgorICAgIGJvb2wgdXNlQUEgPSBmYWxzZTsKKyNlbHNlCisgICAgYm9v
bCB1c2VBQSA9IG1fdGlsZXItPmhhc0JvcmRlclRleGVscygpOworI2VuZGlmCisgICAgc2V0QW50
aWFsaWFzZWRFZGdlcyh1c2VBQSk7CiB9CiAKIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6c3luY1Rl
eHR1cmVJZChpbnQgaSwgaW50IGosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKQpAQCAtMTk2
LDE4NiArMTc1LDYgQEAgdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpzeW5jVGV4dHVyZUlkKGludCBp
LCBpbnQgaiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpCiAgICAgdGlsZS0+c2V0VGV4dHVy
ZUlkKHRleHR1cmVJZCk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBDQ1RpbGVkTGF5
ZXJJbXBsOjpkcmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGds
b2JhbFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9y
bSwgY29uc3QgQ0NMYXllclF1YWQmIGRldmljZVJlY3QsIGNvbnN0IENDTGF5ZXJRdWFkJiBjb250
ZW50UXVhZCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgaW50IGZyYWdtZW50VGV4
VHJhbnNmb3JtTG9jYXRpb24sIGludCBlZGdlTG9jYXRpb24pCi17Ci0gICAgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBs
ZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBxdWFkVHJhbnNmb3JtID0gZGV2aWNlVHJhbnNmb3JtLmludmVyc2UoKTsKLQotICAgIGlm
IChlZGdlTG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAgZmxvYXQgZWRnZVsyNF07Ci0gICAgICAg
IGNvbnRlbnRRdWFkLnRvRmxvYXRBcnJheShlZGdlKTsKLSAgICAgICAgZGV2aWNlUmVjdC50b0Zs
b2F0QXJyYXkoJmVkZ2VbMTJdKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZv
cm0zZnYoZWRnZUxvY2F0aW9uLCBlZGdlLCA4KSk7Ci0gICAgfQotCi0gICAgQ0NMYXllclF1YWQ6
OkVkZ2UgcHJldkVkZ2VZID0gY29udGVudFF1YWQudG9wKCk7Ci0KLSAgICBpbnQgbGVmdCwgdG9w
LCByaWdodCwgYm90dG9tOwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhj
b250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICBJbnRSZWN0IGxheWVy
UmVjdCA9IG1fdGlsZXItPmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwotICAg
IGZsb2F0IHNpZ24gPSBGbG9hdFF1YWQoY29udGVudFJlY3QpLmlzQ291bnRlcmNsb2Nrd2lzZSgp
ID8gLTEgOiAxOwotICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKLSAg
ICAgICAgQ0NMYXllclF1YWQ6OkVkZ2UgcHJldkVkZ2VYID0gY29udGVudFF1YWQubGVmdCgpOwot
Ci0gICAgICAgIENDTGF5ZXJRdWFkOjpFZGdlIGVkZ2VZID0gY29udGVudFF1YWQuYm90dG9tKCk7
Ci0gICAgICAgIGlmIChqIDwgKG1fdGlsZXItPm51bVRpbGVzWSgpIC0gMSkpIHsKLSAgICAgICAg
ICAgIEludFJlY3QgdGlsZVJlY3QgPSB1bmlvblJlY3QobV90aWxlci0+dGlsZUJvdW5kcygwLCBq
KSwgbV90aWxlci0+dGlsZUJvdW5kcyhtX3RpbGVyLT5udW1UaWxlc1goKSAtIDEsIGopKTsKLSAg
ICAgICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChsYXllclJlY3QpOwotCi0gICAgICAgICAgICAv
LyBTa2lwIGVtcHR5IHJvd3MuCi0gICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB0aWxlUmVjdCA9IG1fdGls
ZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZVJlY3QpOwotCi0gICAgICAgICAgICBGbG9h
dFBvaW50IHAxKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QubWF4WSgpKTsKLSAgICAgICAgICAg
IEZsb2F0UG9pbnQgcDIodGlsZVJlY3QueCgpLCB0aWxlUmVjdC5tYXhZKCkpOwotCi0gICAgICAg
ICAgICAvLyBNYXAgcG9pbnRzIHRvIGRldmljZSBzcGFjZS4KLSAgICAgICAgICAgIHAxID0gZGV2
aWNlVHJhbnNmb3JtLm1hcFBvaW50KHAxKTsKLSAgICAgICAgICAgIHAyID0gZGV2aWNlVHJhbnNm
b3JtLm1hcFBvaW50KHAyKTsKLQotICAgICAgICAgICAgLy8gQ29tcHV0ZSBob3Jpem9udGFsIGVk
Z2UuCi0gICAgICAgICAgICBlZGdlWSA9IENDTGF5ZXJRdWFkOjpFZGdlKHAxLCBwMik7Ci0gICAg
ICAgICAgICBlZGdlWS5zY2FsZShzaWduKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50
IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgIERyYXdhYmxlVGlsZSog
dGlsZSA9IHRpbGVBdChpLCBqKTsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgdXNlIHRpbGVDb250
ZW50UmVjdCBoZXJlLCBhcyB0aGF0IGNvbnRhaW5zIHRoZSBmdWxsCi0gICAgICAgICAgICAvLyBy
ZWN0IHdpdGggYm9yZGVyIHRleGVscyB3aGljaCBzaG91bGRuJ3QgYmUgZHJhd24uCi0gICAgICAg
ICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gbV90aWxlci0+dGlsZUJvdW5kcyhpLCBqKTsKLSAgICAg
ICAgICAgIEludFJlY3QgZGlzcGxheVJlY3QgPSB0aWxlUmVjdDsKLSAgICAgICAgICAgIHRpbGVS
ZWN0LmludGVyc2VjdChsYXllclJlY3QpOwotCi0gICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9m
IGhvdyB0aGUgdG9wIGxlZnQgaGFzIG1vdmVkLCBzbyB0aGUgdGV4dHVyZSBjYW4gYmUKLSAgICAg
ICAgICAgIC8vIG9mZnNldCB0aGUgc2FtZSBhbW91bnQuCi0gICAgICAgICAgICBJbnRTaXplIGRp
c3BsYXlPZmZzZXQgPSB0aWxlUmVjdC5taW5YTWluWUNvcm5lcigpIC0gZGlzcGxheVJlY3QubWlu
WE1pbllDb3JuZXIoKTsKLQotICAgICAgICAgICAgLy8gU2tpcCBlbXB0eSB0aWxlcy4KLSAgICAg
ICAgICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgICAgIHRpbGVSZWN0ID0gbV90aWxlci0+bGF5ZXJSZWN0VG9Db250ZW50UmVj
dCh0aWxlUmVjdCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UmVjdCBjbGFtcFJlY3QodGlsZVJlY3Qp
OwotICAgICAgICAgICAgLy8gQ2xhbXAgdGV4dHVyZSBjb29yZGluYXRlcyB0byBhdm9pZCBzYW1w
bGluZyBvdXRzaWRlIHRoZSBsYXllcgotICAgICAgICAgICAgLy8gYnkgZGVmbGF0aW5nIHRoZSB0
aWxlIHJlZ2lvbiBoYWxmIGEgdGV4ZWwgb3IgaGFsZiBhIHRleGVsCi0gICAgICAgICAgICAvLyBt
aW51cyBlcHNpbG9uIGZvciBvbmUgcGl4ZWwgbGF5ZXJzLiBUaGUgcmVzdWx0aW5nIGNsYW1wIHJl
Z2lvbgotICAgICAgICAgICAgLy8gaXMgbWFwcGVkIHRvIHRoZSB1bml0IHNxdWFyZSBieSB0aGUg
dmVydGV4IHNoYWRlciBhbmQgbWFwcGVkCi0gICAgICAgICAgICAvLyBiYWNrIHRvIG5vcm1hbGl6
ZWQgdGV4dHVyZSBjb29yZGluYXRlcyBieSB0aGUgZnJhZ21lbnQgc2hhZGVyCi0gICAgICAgICAg
ICAvLyBhZnRlciBiZWluZyBjbGFtcGVkIHRvIDAtMSByYW5nZS4KLSAgICAgICAgICAgIGNvbnN0
IGZsb2F0IGVwc2lsb24gPSAxIC8gMTAyNC4wZjsKLSAgICAgICAgICAgIGZsb2F0IGNsYW1wWCA9
IG1pbigwLjUsIGNsYW1wUmVjdC53aWR0aCgpIC8gMi4wIC0gZXBzaWxvbik7Ci0gICAgICAgICAg
ICBmbG9hdCBjbGFtcFkgPSBtaW4oMC41LCBjbGFtcFJlY3QuaGVpZ2h0KCkgLyAyLjAgLSBlcHNp
bG9uKTsKLSAgICAgICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWCgtY2xhbXBYKTsKLSAgICAgICAg
ICAgIGNsYW1wUmVjdC5pbmZsYXRlWSgtY2xhbXBZKTsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBj
bGFtcE9mZnNldCA9IGNsYW1wUmVjdC5taW5YTWluWUNvcm5lcigpIC0gRmxvYXRSZWN0KHRpbGVS
ZWN0KS5taW5YTWluWUNvcm5lcigpOwotCi0gICAgICAgICAgICBGbG9hdFBvaW50IHRleE9mZnNl
dCA9IG1fdGlsZXItPnRleHR1cmVPZmZzZXQoaSwgaikgKyBjbGFtcE9mZnNldCArIEZsb2F0U2l6
ZShkaXNwbGF5T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IHRpbGVXaWR0aCA9IHN0YXRpY19j
YXN0PGZsb2F0PihtX3RpbGVyLT50aWxlU2l6ZSgpLndpZHRoKCkpOwotICAgICAgICAgICAgZmxv
YXQgdGlsZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVyLT50aWxlU2l6ZSgpLmhl
aWdodCgpKTsKLQotICAgICAgICAgICAgLy8gTWFwIGNsYW1waW5nIHJlY3RhbmdsZSB0byB1bml0
IHNxdWFyZS4KLSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVggPSAtY2xhbXBS
ZWN0LngoKSAvIGNsYW1wUmVjdC53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4
VHJhbnNsYXRlWSA9IC1jbGFtcFJlY3QueSgpIC8gY2xhbXBSZWN0LmhlaWdodCgpOwotICAgICAg
ICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVYID0gdGlsZVJlY3Qud2lkdGgoKSAvIGNsYW1wUmVj
dC53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVZID0gdGlsZVJlY3Qu
aGVpZ2h0KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCB0byBu
b3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBmbG9hdCBmcmFnbWVu
dFRleFRyYW5zbGF0ZVggPSB0ZXhPZmZzZXQueCgpIC8gdGlsZVdpZHRoOwotICAgICAgICAgICAg
ZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gdGV4T2Zmc2V0LnkoKSAvIHRpbGVIZWlnaHQ7
Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWCA9IGNsYW1wUmVjdC53aWR0aCgp
IC8gdGlsZVdpZHRoOwotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVkgPSBjbGFt
cFJlY3QuaGVpZ2h0KCkgLyB0aWxlSGVpZ2h0OwotCi0gICAgICAgICAgICAvLyBPcGVuR0wgY29v
cmRpbmF0ZSBzeXN0ZW0gaXMgYm90dG9tLXVwLgotICAgICAgICAgICAgLy8gSWYgdGlsZSB0ZXh0
dXJlIGlzIHRvcC1kb3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMu
Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlT3JpZW50YXRpb24gPT0gTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VG9wRG93bk9yaWVudGF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnRUZXhU
cmFuc2xhdGVZID0gMS4wIC0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAgICAg
IGZyYWdtZW50VGV4U2NhbGVZICo9IC0xLjA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IENDTGF5ZXJRdWFkOjpFZGdlIGVkZ2VYID0gY29udGVudFF1YWQucmlnaHQoKTsKLSAgICAgICAg
ICAgIGlmIChpIDwgKG1fdGlsZXItPm51bVRpbGVzWCgpIC0gMSkpIHsKLSAgICAgICAgICAgICAg
ICBGbG9hdFBvaW50IHAxKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QueSgpKTsKLSAgICAgICAg
ICAgICAgICBGbG9hdFBvaW50IHAyKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QubWF4WSgpKTsK
LQotICAgICAgICAgICAgICAgIC8vIE1hcCBwb2ludHMgdG8gZGV2aWNlIHNwYWNlLgotICAgICAg
ICAgICAgICAgIHAxID0gZGV2aWNlVHJhbnNmb3JtLm1hcFBvaW50KHAxKTsKLSAgICAgICAgICAg
ICAgICBwMiA9IGRldmljZVRyYW5zZm9ybS5tYXBQb2ludChwMik7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBDb21wdXRlIHZlcnRpY2FsIGVkZ2UuCi0gICAgICAgICAgICAgICAgZWRnZVggPSBDQ0xh
eWVyUXVhZDo6RWRnZShwMSwgcDIpOwotICAgICAgICAgICAgICAgIGVkZ2VYLnNjYWxlKHNpZ24p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDcmVhdGUgZGV2aWNlIHNwYWNlIHF1
YWQuCi0gICAgICAgICAgICBDQ0xheWVyUXVhZCBkZXZpY2VRdWFkKHByZXZFZGdlWCwgcHJldkVk
Z2VZLCBlZGdlWCwgZWRnZVkpOwotCi0gICAgICAgICAgICAvLyBNYXAgcXVhZCB0byBsYXllciBz
cGFjZS4KLSAgICAgICAgICAgIEZsb2F0UXVhZCBxdWFkID0gcXVhZFRyYW5zZm9ybS5tYXBRdWFk
KGRldmljZVF1YWQuZmxvYXRRdWFkKCkpOwotCi0gICAgICAgICAgICAvLyBOb3JtYWxpemUgdG8g
dGlsZVJlY3QuCi0gICAgICAgICAgICBxdWFkLnNjYWxlKDEuMGYgLyB0aWxlUmVjdC53aWR0aCgp
LCAxLjBmIC8gdGlsZVJlY3QuaGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBpZiAoZnJhZ21lbnRU
ZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9PSAtMSkgewotICAgICAgICAgICAgICAgIC8vIE1vdmUgZnJh
Z21lbnQgc2hhZGVyIHRyYW5zZm9ybSB0byB2ZXJ0ZXggc2hhZGVyLiBXZSBjYW4gZG8KLSAgICAg
ICAgICAgICAgICAvLyB0aGlzIHdoaWxlIHN0aWxsIHByb2R1Y2luZyBjb3JyZWN0IHJlc3VsdHMg
YXMKLSAgICAgICAgICAgICAgICAvLyBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uIHNob3Vs
ZCBhbHdheXMgYmUgbm9uLW5lZ2F0aXZlCi0gICAgICAgICAgICAgICAgLy8gd2hlbiB0aWxlcyBh
cmUgdHJhbnNmb3JtZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCByZXN1bHQgaW4KLSAgICAgICAgICAg
ICAgICAvLyBzYW1wbGluZyBvdXRzaWRlIHRoZSBsYXllci4KLSAgICAgICAgICAgICAgICB2ZXJ0
ZXhUZXhTY2FsZVggKj0gZnJhZ21lbnRUZXhTY2FsZVg7Ci0gICAgICAgICAgICAgICAgdmVydGV4
VGV4U2NhbGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOwotICAgICAgICAgICAgICAgIHZlcnRleFRl
eFRyYW5zbGF0ZVggKj0gZnJhZ21lbnRUZXhTY2FsZVg7Ci0gICAgICAgICAgICAgICAgdmVydGV4
VGV4VHJhbnNsYXRlWSAqPSBmcmFnbWVudFRleFNjYWxlWTsKLSAgICAgICAgICAgICAgICB2ZXJ0
ZXhUZXhUcmFuc2xhdGVYICs9IGZyYWdtZW50VGV4VHJhbnNsYXRlWDsKLSAgICAgICAgICAgICAg
ICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICs9IGZyYWdtZW50VGV4VHJhbnNsYXRlWTsKLSAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3Jt
NGYoZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgZnJhZ21lbnRUZXhUcmFuc2xhdGVYLCBm
cmFnbWVudFRleFRyYW5zbGF0ZVksIGZyYWdtZW50VGV4U2NhbGVYLCBmcmFnbWVudFRleFNjYWxl
WSkpOwotCi0gICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLnZlcnRleFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIHZlcnRleFRl
eFRyYW5zbGF0ZVgsIHZlcnRleFRleFRyYW5zbGF0ZVksIHZlcnRleFRleFNjYWxlWCwgdmVydGV4
VGV4U2NhbGVZKSk7Ci0KLSAgICAgICAgICAgIGlmICh0aWxlICYmIHRpbGUtPnRleHR1cmVJZCgp
KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIHRpbGUtPnRleHR1cmVJZCgpKTsKLSAgICAgICAgICAgICAgICBsYXll
clJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGdsb2JhbFRyYW5zZm9ybSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksIHRp
bGVSZWN0LmhlaWdodCgpLCBvcGFjaXR5LCBxdWFkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9j
YXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVy
KCkucG9pbnRMb2NhdGlvbigpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsZVRyYW5zZm9ybSA9IGdsb2JhbFRyYW5zZm9ybTsK
LSAgICAgICAgICAgICAgICB0aWxlVHJhbnNmb3JtLnRyYW5zbGF0ZSh0aWxlUmVjdC54KCkgKyB0
aWxlUmVjdC53aWR0aCgpIC8gMi4wLCB0aWxlUmVjdC55KCkgKyB0aWxlUmVjdC5oZWlnaHQoKSAv
IDIuMCk7Ci0KLSAgICAgICAgICAgICAgICBjb25zdCBMYXllckNocm9taXVtOjpCb3JkZXJQcm9n
cmFtKiBzb2xpZENvbG9yUHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPmJvcmRlclByb2dyYW0oKTsK
LSAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShzb2xpZENv
bG9yUHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0KLSAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dW5pZm9ybTRmKHNvbGlkQ29sb3JQcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNv
bG9yTG9jYXRpb24oKSwgYmFja2dyb3VuZENvbG9yKCkucmVkKCksIGJhY2tncm91bmRDb2xvcigp
LmdyZWVuKCksIGJhY2tncm91bmRDb2xvcigpLmJsdWUoKSwgYmFja2dyb3VuZENvbG9yKCkuYWxw
aGEoKSkpOwotCi0gICAgICAgICAgICAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVh
ZCh0aWxlVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIG9wYWNpdHksIHF1
YWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2xp
ZENvbG9yUHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSk7Ci0KLSAgICAg
ICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9n
cmFtKCkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJldkVkZ2VYID0gZWRnZVg7
Ci0gICAgICAgICAgICAvLyBSZXZlcnNlIGRpcmVjdGlvbi4KLSAgICAgICAgICAgIHByZXZFZGdl
WC5zY2FsZSgtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcmV2RWRnZVkgPSBlZGdlWTsKLSAg
ICAgICAgLy8gUmV2ZXJzZSBkaXJlY3Rpb24uCi0gICAgICAgIHByZXZFZGdlWS5zY2FsZSgtMSk7
Ci0gICAgfQotfQotCiB9CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbGVkTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKaW5kZXggNTZlY2I0ZDZhZDQ2ZDNlYzY1YTVk
OGE5ZTdjMzE2N2U0NjhmM2YwNy4uZGU1YzMyY2NmNDM4M2FkOGMwOGMyOTQ3MDdjM2IxMjExOWNh
NTc0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaApAQCAtNDMsMTQgKzQzLDEzIEBA
IHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+Q0NUaWxlZExheWVySW1wbCgpOwogCi0gICAg
dmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CisgICAgdmlydHVhbCB2
b2lkIGZpbGxSZW5kZXJQYXNzKENDUmVuZGVyUGFzcyopOwogICAgIHZpcnR1YWwgdm9pZCBiaW5k
Q29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogCiAgICAgdmlydHVhbCB2
b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0Owog
CiAgICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0RyYXcpIHsgbV9za2lwc0RyYXcgPSBz
a2lwc0RyYXc7IH0KICAgICB2b2lkIHNldFRleHR1cmVPcmllbnRhdGlvbihMYXllclRleHR1cmVV
cGRhdGVyOjpPcmllbnRhdGlvbiB0ZXh0dXJlT3JpZW50YXRpb24pIHsgbV90ZXh0dXJlT3JpZW50
YXRpb24gPSB0ZXh0dXJlT3JpZW50YXRpb247IH0KLSAgICB2b2lkIHNldFNhbXBsZWRUZXhlbEZv
cm1hdChMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVs
Rm9ybWF0KSB7IG1fc2FtcGxlZFRleGVsRm9ybWF0ID0gc2FtcGxlZFRleGVsRm9ybWF0OyB9CiAg
ICAgdm9pZCBzZXRUaWxpbmdEYXRhKGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiB0aWxlcik7CiAg
ICAgdm9pZCBzeW5jVGV4dHVyZUlkKGludCwgaW50LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJ
ZCk7CiAKQEAgLTc0LDE5ICs3MywxMSBAQCBwcml2YXRlOgogCiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdGlsaW5nVHJhbnNmb3JtKCkgY29uc3Q7CiAKLSAgICAvLyBEcmF3IGFsbCB0aWxlcyB0
aGF0IGludGVyc2VjdCB3aXRoIHRoZSBjb250ZW50IHJlY3QuCi0gICAgdm9pZCBkcmF3KExheWVy
UmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOwotCiAgICAgRHJhd2FibGVUaWxlKiB0
aWxlQXQoaW50LCBpbnQpIGNvbnN0OwogICAgIERyYXdhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQs
IGludCk7CiAKLSAgICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRl
bnRSZWN0LgotICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgIHZvaWQgZHJhd1RpbGVzKExheWVy
UmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZGV2aWNlVHJhbnNmb3JtLCBjb25zdCBDQ0xheWVyUXVhZCYgZGV2aWNlUmVjdCwgY29u
c3QgQ0NMYXllclF1YWQmIGNvbnRlbnRRdWFkLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9n
cmFtLCBpbnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgaW50IGVkZ2VMb2NhdGlvbik7
Ci0KICAgICBib29sIG1fc2tpcHNEcmF3OwogICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6Ok9yaWVu
dGF0aW9uIG1fdGV4dHVyZU9yaWVudGF0aW9uOwotICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNh
bXBsZWRUZXhlbEZvcm1hdCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsKIAogICAgIE93blB0cjxDQ0xh
eWVyVGlsaW5nRGF0YT4gbV90aWxlcjsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118333</attachid>
            <date>2011-12-07 22:56:11 -0800</date>
            <delta_ts>2011-12-08 15:11:54 -0800</delta_ts>
            <desc>Round 2</desc>
            <filename>bug-73059-20111207225610.patch</filename>
            <type>text/plain</type>
            <size>124531</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWU4NzAzZTQ2NWQ2MDBk
YWFmZmM0N2VkMGRlMzFmNTkzNmY4OTJkYy4uNzBjOTE0NmJkNDQ2OTc0NzljNDE4MmQ0MjNiNjYw
MzdmNjg2ZDQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NiBAQAorMjAxMS0xMi0wNyAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVm
YWN0b3IgdGlsZSBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDU5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFydGlhbGx5IHRlc3RlZCBieSBjb21w
b3NpdG9yIGxheW91dCB0ZXN0cy4gRGVidWcgYm9yZGVycyBhbmQKKyAgICAgICAgY2hlY2tlcmJv
YXJkaW5nIHRlc3RlZCBtYW51YWxseS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXJ0
IG9mIGEgbW92ZSB0b3dhcmRzIHJlbmRlcmluZyBxdWFkcyBvbiBzY3JlZW4KKyAgICAgICAgZnJv
bSBhIGJhZyBvZiBkYXRhIHJhdGhlciB0aGFuIGluIHZpcnR1YWwgQ0NMYXllckltcGw6OmRyYXcg
ZnVuY3Rpb25zLgorCisgICAgICAgIENDRHJhd1F1YWQtZGVyaXZlZCBjbGFzc2VzIHN0b3JlIG1h
dGVyaWFsLXNwZWNpZmljIHBpZWNlcyBvZiBkYXRhIHRvCisgICAgICAgIHVzZSB3aGVuIHJlbmRl
cmluZy4gQ0NMYXllckltcGwgY2xhc3NlcyBub3cgY3JlYXRlIHRoZXNlIENDRHJhd1F1YWQKKyAg
ICAgICAgb2JqZWN0cyByYXRoZXIgdGhhbiBpc3N1aW5nIGRpcmVjdCBHTCBjb21tYW5kcy4gV2hl
cmUgdGhpcyBkYXRhIGlzCisgICAgICAgIHNoYXJlZCBiZXR3ZWVuIHF1YWRzIHRoYXQgY29tZSBm
cm9tIHRoZSBzYW1lIGxheWVyLCB0aGF0IGRhdGEgaXMKKyAgICAgICAgc3RvcmVkIGluIGEgQ0NT
aGFyZWRRdWFkU3RhdGUgb2JqZWN0IHJhdGhlciB0aGFuIGR1cGxpY2F0ZWQuCisKKyAgICAgICAg
Q0NSZW5kZXJQYXNzIGlzIHRoZSBjbGFzcyB0aGF0IGhvbGRzIHRoZSBsaXN0IG9mIHF1YWRzIGFu
ZCB0aGUgdGFyZ2V0CisgICAgICAgIHN1cmZhY2UgdGhhdCB0aGV5IGRyYXcgaW50by4gRHJhd2lu
ZyBhIGZyYW1lIGNvbnNpc3RzIG9mIGRyYXdpbmcgYQorICAgICAgICBzZXJpZXMgb2YgcmVuZGVy
IHBhc3NlcyBvbnRvIHRoZWlyIHJlc3BlY3RpdmUgc3VyZmFjZXMuCisKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0SW1wbCBjb25zdHJ1Y3RzIHRoZXNlIHJlbmRlciBwYXNzZXMgZnJvbSB0aGUgb3V0
cHV0IG9mCisgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSBieSBh
c2tpbmcgZWFjaCBsYXllciB0byBpbnNlcnQKKyAgICAgICAgcXVhZHMgaW50byBhIGxpc3QgYW5k
IGhhbmRzIHRoZW0gb2ZmIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bSBmb3IKKyAgICAgICAgcmVu
ZGVyaW5nLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclN1cmZhY2VRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29s
b3JRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnRpbGVVbmlmb3JtTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZFRpbGVQcm9ncmFtVW5pZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Q3VzdG9tTGF5ZXJRdWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRU
aWxlQmluZGluZ0Jhc2U6OmFscGhhTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21l
bnRUaWxlQmluZGluZ0Jhc2U6OmVkZ2VMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFn
bWVudFRpbGVCaW5kaW5nQmFzZTo6ZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFnbWVudFRpbGVCaW5kaW5nQmFzZTo6c2FtcGxlckxvY2F0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGll
c1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxh
eWVyRHJhd1F1YWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDQ3VzdG9tTGF5ZXJE
cmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQ3VzdG9tTGF5ZXJEcmF3UXVh
ZDo6Q0NDdXN0b21MYXllckRyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0N1c3RvbUxheWVyRHJhd1F1YWQ6OmxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6Q0NEZWJ1Z0JvcmRlckRyYXdRdWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJh
d1F1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6
OmNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6d2lkdGgp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJR
dWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjpDQ0RyYXdRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6OnRvRGVidWdCb3JkZXJEcmF3UXVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b1NvbGlkQ29sb3JEcmF3UXVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b1RpbGVEcmF3UXVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b0N1c3RvbUxheWVyRHJhd1F1YWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJRdWFkLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RyYXdRdWFkOjpxdWFkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdR
dWFkOjpsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjpsYXll
clJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6Y2xpcFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Ry
YXdRdWFkOjppc09wYXF1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NEcmF3UXVhZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6
Q0NEcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b0RlYnVnQm9yZGVy
RHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9SZW5kZXJTdXJmYWNl
RHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9Tb2xpZENvbG9yRHJh
d1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9UaWxlRHJhd1F1YWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9DdXN0b21MYXllckRyYXdRdWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6cXVhZFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NEcmF3UXVhZDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Ry
YXdRdWFkOjpsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjps
YXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6Y2xpcFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0RyYXdRdWFkOjppc09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjppc0xh
eWVyQXhpc0FsaWduZWRJbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6Om1h
dGVyaWFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2hhcmVkUXVhZFN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6YXBwZW5kRGVidWdCb3JkZXJRdWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJRdWFkOjpDQ0xheWVyUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclF1YWQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y29tcHV0ZVNjcmVlblNwYWNlVHJhbnNmb3JtRm9yU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpDQ1JlbmRlclBhc3MpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6cXVhZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NSZW5kZXJQYXNzOjp0YXJnZXRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVy
UGFzczo6c2V0U3VyZmFjZURhbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQ
YXNzOjpzdXJmYWNlRGFtYWdlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFk
OjpsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6c3Vy
ZmFjZURhbWFnZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2hhcmVkUXVhZFN0YXRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJl
ZFF1YWRTdGF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRl
OjpDQ1NoYXJlZFF1YWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0
ZTo6aXNMYXllckF4aXNBbGlnbmVkSW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NoYXJlZFF1YWRTdGF0ZTo6bGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaGFyZWRRdWFkU3RhdGU6OmxheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJl
ZFF1YWRTdGF0ZTo6Y2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRRdWFkU3Rh
dGU6Om9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRRdWFkU3RhdGU6OmlzT3Bh
cXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29s
b3JEcmF3UXVhZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NTb2xpZENvbG9yRHJh
d1F1YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6
Q0NTb2xpZENvbG9yRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q0NTb2xpZENvbG9yRHJhd1F1YWQ6OmNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaWxlRHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3
UXVhZDo6Q0NUaWxlRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGlsZURyYXdRdWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxl
RHJhd1F1YWQ6OnRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6
dGV4dHVyZU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6dGV4dHVy
ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlRHJhd1F1YWQ6OnRleHR1cmVGaWx0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlRHJhd1F1YWQ6OnN3aXp6bGVDb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6bGVmdEVkZ2VBQSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6dG9wRWRnZUFBKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGlsZURyYXdRdWFkOjpyaWdodEVkZ2VBQSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3
UXVhZDo6Ym90dG9tRWRnZUFBKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdRdWFkOjpp
c0FudGlhbGlhc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdRdWFkOjppc09wYXF1
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpDQ1RpbGVkTGF5
ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OnF1YWRUcmFuc2Zv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6YXBwZW5kUXVhZHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OnNldENvbnRlbnRzU3dpenps
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6Y29udGVudHNTd2l6emxl
ZCk6CisKIDIwMTEtMTItMDcgIE1hcnkgV3UgIDxtYXJ5Lnd1QHRvcmNobW9iaWxlLmNvbS5jbj4K
IAogICAgICAgICBVcHN0cmVhbSA0IGZpbGVzIGludG8gV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2Jl
cnJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjQzMmE1NWEzZTVhMjBmOWY1MWRhYTU2NTE4YTVmMmZl
ZDMyMjc0My4uMWEzZjMxNGZkZGM5MWJjODU2NGM3NmFmMzdlOTcwZjA3YTAzM2FkNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMzU4OCwxMCArMzU4OCwxNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ3VzdG9t
TGF5ZXJEcmF3UXVhZC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFk
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1
Z0JvcmRlckRyYXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29u
dHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRnJhbWVSYXRlQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCkBAIC0zNjE3LDE3ICszNjIzLDI3
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5M
YXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcm94eS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJveHkuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFj
ZURyYXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2NoZWR1bGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTY2hlZHVsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRocmVhZFBy
b3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hh
cmVkUXVhZFN0YXRlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1
YWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nv
bGlkQ29sb3JEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDVlMDVjMTU3Yzc5NWNlMWUwNjRkZjJkZjk2
NDQwN2FkYmZlNTUwYjAuLjljN2E0ZjhmNDc5Mjg5ZGEwNTkxMzdiNzliYjE1ZDZiZDE3ZDUxZWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE2OSwxMCArMTY5LDggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpIHsgfQogICAgIHZpcnR1YWwg
Ym9vbCBuZWVkc0NvbnRlbnRzU2NhbGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAg
Ly8gVGhlc2UgZXhpc3QganVzdCBmb3IgZGVidWdnaW5nICh2aWEgZHJhd0RlYnVnQm9yZGVyKCkp
LgogICAgIHZvaWQgc2V0RGVidWdCb3JkZXJDb2xvcihjb25zdCBDb2xvciYpOwogICAgIHZvaWQg
c2V0RGVidWdCb3JkZXJXaWR0aChmbG9hdCk7Ci0gICAgdm9pZCBkcmF3RGVidWdCb3JkZXIoKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGI3YTZkMzA2MGM2MTU2YmE5
Yzg1M2U2ZjAyY2Y5MzUzMWYzNThlY2QuLmMzOTBjOGRmNWQ2YjZhN2Y4MGE1ZjlhYWMyNTM0MGUw
MjQ0MDllMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNTMs
NyArNTMsMTMgQEAKICNpbmNsdWRlICJUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgi
CisjaW5jbHVkZSAiY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NE
YW1hZ2VUcmFja2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCisj
aW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNl
RHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgorI2luY2x1
ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5
LmgiCkBAIC0xMDgsMjEgKzExNCw2IEBAIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3Jl
ZW5NYXRyaXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJu
IHNjcmVlbjsKIH0KIAotc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbXB1dGVTY3JlZW5T
cGFjZVRyYW5zZm9ybUZvclN1cmZhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllcikK
LXsKLSAgICAvLyBUaGUgbGF5ZXIncyBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtIGNhbiBiZSB3cml0
dGVuIGFzOgotICAgIC8vICAgbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHN1cmZhY2VTY3Jl
ZW5TcGFjZVRyYW5zZm9ybSAqIGxheWVyT3JpZ2luVHJhbnNmb3JtCi0gICAgLy8gU28sIHRvIGNv
bXB1dGUgdGhlIHN1cmZhY2Ugc2NyZWVuIHNwYWNlLCB3ZSBjYW4gZG86Ci0gICAgLy8gICBzdXJm
YWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtICogaW52
ZXJzZShsYXllck9yaWdpblRyYW5zZm9ybSkKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxh
eWVyT3JpZ2luVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZUxheWVyLT5kcmF3VHJhbnNmb3JtKCk7
Ci0gICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKC0wLjUgKiByZW5kZXJTdXJmYWNl
TGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiByZW5kZXJTdXJmYWNlTGF5ZXItPmJvdW5k
cygpLmhlaWdodCgpKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlU2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlTGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7
Ci0gICAgc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyT3JpZ2luVHJh
bnNmb3JtLmludmVyc2UoKSk7Ci0KLSAgICByZXR1cm4gc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNm
b3JtOwotfQotCiAjaWYgVVNFKFNLSUEpCiBib29sIGNvbnRleHRTdXBwb3J0c0FjY2VsZXJhdGVk
UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7CkBAIC0zMjAsNTIgKzMxMSw3
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQogICAgIG1f
Y3VycmVudFJlbmRlclN1cmZhY2UgPSAwOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVycygpCi17Ci0gICAgLy8gRklYTUU6IHVzZSB0aGUgZnJhbWUgYmVnaW4gdGlt
ZSBmcm9tIHRoZSBvdmVyYWxsIGNvbXBvc2l0b3Igc2NoZWR1bGVyLgotICAgIC8vIFRoaXMgdmFs
dWUgaXMgY3VycmVudGx5IGluYWNjZXNzaWJsZSBiZWNhdXNlIGl0IGlzIHVwIGluIENocm9taXVt
J3MKLSAgICAvLyBSZW5kZXJXaWRnZXQuCi0gICAgbV9oZWFkc1VwRGlzcGxheS0+b25GcmFtZUJl
Z2luKGN1cnJlbnRUaW1lKCkpOwotCi0gICAgaWYgKCFyb290TGF5ZXIoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4
dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7Ci0gICAgc2l6ZV90IG1heExp
bWl0ID0gVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKLSAg
ICBzaXplX3QgcmVjbGFpbUxpbWl0ID0gVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVz
KHZpZXdwb3J0U2l6ZSgpKTsKLQotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5z
ZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1heExpbWl0IC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7
Ci0KLSAgICBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsKLQotICAgIGlmIChyZWNsYWltTGltaXQgPiBj
b250ZW50c01lbW9yeVVzZUJ5dGVzKQotICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFu
YWdlci0+c2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyhyZWNsYWltTGltaXQgLSBjb250ZW50
c01lbW9yeVVzZUJ5dGVzKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1
cmVNYW5hZ2VyLT5zZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKDApOwotCi0gICAgbV9yZW5k
ZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX3JlbmRlclN1
cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKLQotICAgIGlmIChzZXR0aW5ncygpLmNvbXBv
c2l0ZU9mZnNjcmVlbikKLSAgICAgICAgY29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsK
LX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFj
ZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KQotewotICAgIC8vIEZvciBub3csIHdlIHVzZSBkYW1hZ2UgdHJhY2tp
bmcgdG8gY29tcHV0ZSBhIGdsb2JhbCBzY2lzc29yLiBUbyBkbyB0aGlzLCB3ZSBtdXN0Ci0gICAg
Ly8gY29tcHV0ZSBhbGwgZGFtYWdlIHRyYWNraW5nIGJlZm9yZSBkcmF3aW5nIGFueXRoaW5nLCBz
byB0aGF0IHdlIGtub3cgdGhlIHJvb3QKLSAgICAvLyBkYW1hZ2UgcmVjdC4gVGhlIHJvb3QgZGFt
YWdlIHJlY3QgaXMgdGhlbiB1c2VkIHRvIHNjaXNzb3IgZWFjaCBzdXJmYWNlLgotCi0gICAgQVNT
RVJUKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApOwotCi0gICAgZm9yIChpbnQgc3Vy
ZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5k
ZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJT
dXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7
Ci0gICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VM
YXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7Ci0g
ICAgICAgIHJlbmRlclN1cmZhY2UtPmRhbWFnZVRyYWNrZXIoKS0+dXBkYXRlRGFtYWdlUmVjdEZv
ck5leHRGcmFtZShyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgcmVuZGVyU3VyZmFjZUxheWVy
LT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKTsKLSAgICB9Ci19Ci0KLXZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclN1cmZhY2VGb3JEZWJ1ZyhDQ0xheWVySW1w
bCogcmVuZGVyU3VyZmFjZUxheWVyLCBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3Qg
RmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpjbGVhclN1cmZhY2VGb3JEZWJ1ZyhDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UsIEND
UmVuZGVyU3VyZmFjZSogcm9vdFJlbmRlclN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFj
ZURhbWFnZVJlY3QpCiB7CiAgICAgLy8gTm9uLXJvb3QgbGF5ZXJzIHNob3VsZCBjbGVhciB0aGVp
ciBlbnRpcmUgY29udGVudHMgdG8gdHJhbnNwYXJlbnQuIFRoZSByb290IGxheWVyCiAgICAgLy8g
aXMgY2xlYXJlZCB0byBibHVlIHRvIGVhc2lseSBzZWUgcmVnaW9ucyB0aGF0IHdlcmUgbm90IGRy
YXduIG9uIHRoZSBzY3JlZW4uIElmIHdlCkBAIC0zNzMsNyArMzE5LDcgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNsZWFyU3VyZmFjZUZvckRlYnVnKENDTGF5ZXJJbXBsKiByZW5kZXJT
dXJmYWNlTGF5ZXIKICAgICAvLyBjbGVhciB0aGUgZGFtYWdlZCByZWdpb24sIHNvIHRoYXQgd2Ug
ZG9uJ3QgYWNjaWRlbnRhbGx5IGNsZWFyIHVuLWNoYW5nZWQgcG9ydGlvbnMKICAgICAvLyBvZiB0
aGUgc2NyZWVuLgogCi0gICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSByb290RHJhd0xheWVy
KQorICAgIGlmIChyZW5kZXJTdXJmYWNlICE9IHJvb3RSZW5kZXJTdXJmYWNlKQogICAgICAgICBH
TEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOwog
ICAgIGVsc2UKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhckNv
bG9yKDAsIDAsIDEsIDEpKTsKQEAgLTM4Nyw1NiArMzMzLDE5IEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjbGVhclN1cmZhY2VGb3JEZWJ1ZyhDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFj
ZUxheWVyCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdM
YXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVnaW5EcmF3aW5nRnJhbWUoKQogewotICAgIFRSQUNFX0VW
RU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMi
LCB0aGlzLCAwKTsKLQotICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKQot
ICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOwotICAgIG1fcm9vdERhbWFnZVJlY3QgPSByb290RHJhd0xheWVyLT5y
ZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKLQot
ICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlbmRlciBzdXJmYWNlcy4gV2UgdHJh
dmVyc2UgdGhlIHJlbmRlciBzdXJmYWNlcwotICAgIC8vIGZyb20gYmFjayB0byBmcm9udCB0byBn
dWFyYW50ZWUgdGhhdCBuZXN0ZWQgcmVuZGVyIHN1cmZhY2VzIGdldCByZW5kZXJlZCBpbgotICAg
IC8vIHRoZSBjb3JyZWN0IG9yZGVyLgotICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRl
clN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZh
Y2VJbmRleCkgewotICAgICAgICBDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAgICBDQ1JlbmRl
clN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZh
Y2UoKTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwotICAgICAgICBBU1NFUlQocmVu
ZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7Ci0KLSAgICAgICAgaWYgKHVzZVJlbmRlclN1cmZh
Y2UocmVuZGVyU3VyZmFjZSkpIHsKLQotICAgICAgICAgICAgRmxvYXRSZWN0IHN1cmZhY2VEYW1h
Z2VSZWN0OwotICAgICAgICAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXAp
IHsKLSAgICAgICAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhl
IHJvb3QgZGFtYWdlIGFzIHRoZSBkYW1hZ2UgZm9yIGFsbAotICAgICAgICAgICAgICAgIC8vIHN1
cmZhY2VzLCBleGNlcHQgcGVyc3BlY3RpdmUgdHJhbnNmb3Jtcy4KLSAgICAgICAgICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IGNvbXB1dGVTY3JlZW5T
cGFjZVRyYW5zZm9ybUZvclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyKTsKLSAgICAgICAgICAg
ICAgICBpZiAoc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaGFzUGVyc3BlY3RpdmUoKSkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9ucyBkbyBub3QgcGxheSBuaWNl
IHdpdGggbWFwUmVjdCBvZiBpbnZlcnNlIHRyYW5zZm9ybXMuCi0gICAgICAgICAgICAgICAgICAg
IC8vIEluIHRoaXMgdW5jb21tb24gY2FzZSwgaXRzIHNpbXBsZXIgdG8ganVzdCByZWRyYXcgdGhl
IGVudGlyZSBzdXJmYWNlLgotICAgICAgICAgICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9
IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVNjcmVlblNw
YWNlVHJhbnNmb3JtID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgICAgICAg
ICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9y
bS5tYXBSZWN0KG1fcm9vdERhbWFnZVJlY3QpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KKyAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlID0gcm9vdExheWVyKCktPnJlbmRlclN1
cmZhY2UoKTsKIAotICAgICAgICAgICAgLy8gRklYTUU6IGV2ZW50dWFsbHkgd2Ugc2hvdWxkIHBs
YWNlIHRoaXMgdW5kZXIgYSBkZWJ1ZyBmbGFnLgotICAgICAgICAgICAgY2xlYXJTdXJmYWNlRm9y
RGVidWcocmVuZGVyU3VyZmFjZUxheWVyLCByb290RHJhd0xheWVyLCBzdXJmYWNlRGFtYWdlUmVj
dCk7Ci0KLSAgICAgICAgICAgIGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJT
dXJmYWNlLT5sYXllckxpc3QoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRl
eCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCi0gICAg
ICAgICAgICAgICAgZHJhd0xheWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVy
U3VyZmFjZSwgc3VyZmFjZURhbWFnZVJlY3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g
VGhlIG5leHQgZnJhbWUgc2hvdWxkIHN0YXJ0IGJ5IGFzc3VtaW5nIG5vdGhpbmcgaGFzIGNoYW5n
ZWQsIGFuZCBjaGFuZ2VzIGFyZSBub3RlZCBhcyB0aGV5IG9jY3VyLgotICAgIHJvb3REcmF3TGF5
ZXItPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7Ci19CisgICAgLy8gRklYTUU6
IHVzZSB0aGUgZnJhbWUgYmVnaW4gdGltZSBmcm9tIHRoZSBvdmVyYWxsIGNvbXBvc2l0b3Igc2No
ZWR1bGVyLgorICAgIC8vIFRoaXMgdmFsdWUgaXMgY3VycmVudGx5IGluYWNjZXNzaWJsZSBiZWNh
dXNlIGl0IGlzIHVwIGluIENocm9taXVtJ3MKKyAgICAvLyBSZW5kZXJXaWRnZXQuCisgICAgbV9o
ZWFkc1VwRGlzcGxheS0+b25GcmFtZUJlZ2luKGN1cnJlbnRUaW1lKCkpOwogCisgICAgc2l6ZV90
IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3Vy
cmVudE1lbW9yeVVzZUJ5dGVzKCk7CisgICAgc2l6ZV90IG1heExpbWl0ID0gVGV4dHVyZU1hbmFn
ZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKKyAgICBtX3JlbmRlclN1cmZhY2VU
ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhtYXhMaW1pdCAtIGNvbnRlbnRz
TWVtb3J5VXNlQnl0ZXMpOwogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
c0ludGVybmFsKCkKLXsKICAgICBpZiAodmlld3BvcnRTaXplKCkuaXNFbXB0eSgpIHx8ICFyb290
TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00NDksMjcgKzM1OCw3IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgICAgICBtX2NvbnRl
eHQtPnJlc2hhcGUodmlld3BvcnRXaWR0aCgpLCB2aWV3cG9ydEhlaWdodCgpKTsKICAgICB9CiAK
LSAgICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IHJvb3RMYXllcigpOwogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNl
KCkpCi0gICAgICAgIHJvb3REcmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICBy
b290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgdmlld3BvcnRTaXplKCkpKTsKLQotICAgIHJvb3REcmF3TGF5ZXItPnNldENsaXBS
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgdmlld3BvcnRTaXplKCkpKTsKLQotICAgIENDTGF5ZXJM
aXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQocm9vdERyYXdMYXllcik7Ci0KLSAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlID0gcm9v
dERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2Ut
PmNsZWFyTGF5ZXJMaXN0KCk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1h
dHJpeDsKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdMYXllcnNJbnRlcm5hbDo6Y2FsY0RyYXdFdGMiLCB0aGlzLCAwKTsKLSAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
cm9vdERyYXdMYXllciwgcm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5sYXll
ckxpc3QoKSwgJm1fbGF5ZXJTb3J0ZXIsIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsK
LSAgICB9Ci0KICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJs
ZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKG1fY29udGV4dC5nZXQo
KSwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCB2aWV3cG9ydFdpZHRoKCksIHZpZXdwb3J0SGVp
Z2h0KCkpKTsKICAgICBtX3dpbmRvd01hdHJpeCA9IHNjcmVlbk1hdHJpeCgwLCAwLCB2aWV3cG9y
dFdpZHRoKCksIHZpZXdwb3J0SGVpZ2h0KCkpOwpAQCAtNDgyLDkgKzM3MSwzMDUgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkp
OwogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCkpOwogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Ymxl
bmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlO
VVNfU1JDX0FMUEhBKSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVu
ZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCit7CisgICAgQ0NSZW5kZXJT
dXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpOworICAg
IGlmICghdXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gRklYTUU6IGV2ZW50dWFsbHkgd2Ugc2hvdWxkIHBsYWNlIHRoaXMgdW5kZXIgYSBk
ZWJ1ZyBmbGFnLgorICAgIGNsZWFyU3VyZmFjZUZvckRlYnVnKHJlbmRlclN1cmZhY2UsIG1fZGVm
YXVsdFJlbmRlclN1cmZhY2UsIHJlbmRlclBhc3MtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOworCisg
ICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QgPSByZW5kZXJQYXNzLT5xdWFkTGlzdCgpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZExpc3Quc2l6ZSgpOyArK2kpCisgICAgICAg
IGRyYXdRdWFkKHF1YWRMaXN0W2ldLmdldCgpLCByZW5kZXJQYXNzLT5zdXJmYWNlRGFtYWdlUmVj
dCgpKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IEND
RHJhd1F1YWQqIHF1YWQsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit7Cisg
ICAgSW50UmVjdCBzY2lzc29yUmVjdDsKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0
aWFsU3dhcCkgeworICAgICAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZVJlY3QgPSBzdXJmYWNl
RGFtYWdlUmVjdDsKKyAgICAgICAgaWYgKCFxdWFkLT5jbGlwUmVjdCgpLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIGNsaXBBbmREYW1hZ2VSZWN0LmludGVyc2VjdChxdWFkLT5jbGlwUmVjdCgpKTsK
KyAgICAgICAgc2Npc3NvclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBBbmREYW1hZ2VSZWN0
KTsKKyAgICAgICAgaWYgKHNjaXNzb3JSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9IGVsc2UKKyAgICAgICAgc2Npc3NvclJlY3QgPSBxdWFkLT5jbGlwUmVjdCgpOwor
CisgICAgaWYgKHNjaXNzb3JSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
KTsKKyAgICBlbHNlCisgICAgICAgIHNldFNjaXNzb3JUb1JlY3Qoc2Npc3NvclJlY3QpOwogCi0g
ICAgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhyb290RHJhd0xheWVyLCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKKyAgICBpZiAocXVhZC0+aXNPcGFxdWUoKSkKKyAgICAgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCkpOworICAgIGVsc2UKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5l
bmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CiAKKyAgICBzd2l0Y2ggKHF1YWQtPm1h
dGVyaWFsKCkpIHsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OkludmFsaWQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OkRl
YnVnQm9yZGVyOgorICAgICAgICBkcmF3RGVidWdCb3JkZXJRdWFkKHF1YWQtPnRvRGVidWdCb3Jk
ZXJEcmF3UXVhZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDQ0RyYXdRdWFkOjpSZW5k
ZXJTdXJmYWNlOgorICAgICAgICBkcmF3UmVuZGVyU3VyZmFjZVF1YWQocXVhZC0+dG9SZW5kZXJT
dXJmYWNlRHJhd1F1YWQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0NEcmF3UXVhZDo6
U29saWRDb2xvcjoKKyAgICAgICAgZHJhd1NvbGlkQ29sb3JRdWFkKHF1YWQtPnRvU29saWRDb2xv
ckRyYXdRdWFkKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OlRpbGVk
Q29udGVudDoKKyAgICAgICAgZHJhd1RpbGVRdWFkKHF1YWQtPnRvVGlsZURyYXdRdWFkKCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OkN1c3RvbUxheWVyOgorICAgICAg
ICBkcmF3Q3VzdG9tTGF5ZXJRdWFkKHF1YWQtPnRvQ3VzdG9tTGF5ZXJEcmF3UXVhZCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqIHF1YWQpCit7Cisg
ICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2XTsKKyAgICBjb25zdCBMYXllckNocm9taXVtOjpC
b3JkZXJQcm9ncmFtKiBwcm9ncmFtID0gYm9yZGVyUHJvZ3JhbSgpOworICAgIEFTU0VSVChwcm9n
cmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IHF1YWQtPmxheWVyVHJhbnNmb3JtKCk7CisgICAgY29u
c3QgSW50UmVjdCYgbGF5ZXJSZWN0ID0gcXVhZC0+cXVhZFJlY3QoKTsKKyAgICByZW5kZXJNYXRy
aXguc2NhbGUzZChsYXllclJlY3Qud2lkdGgoKSwgbGF5ZXJSZWN0LmhlaWdodCgpLCAxKTsKKyAg
ICBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCBwcm9qZWN0
aW9uTWF0cml4KCkgKiByZW5kZXJNYXRyaXgpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlv
bigpLCBmYWxzZSwgJmdsTWF0cml4WzBdLCAxKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPnVuaWZvcm00Zihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNvbG9yTG9jYXRpb24o
KSwgcXVhZC0+Y29sb3IoKS5yZWQoKSAvIDI1NS4wLCBxdWFkLT5jb2xvcigpLmdyZWVuKCkgLyAy
NTUuMCwgcXVhZC0+Y29sb3IoKS5ibHVlKCkgLyAyNTUuMCwgMSkpOworCisgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT5saW5lV2lkdGgocXVhZC0+d2lkdGgoKSkpOworCisgICAgLy8gVGhl
IGluZGljZXMgZm9yIHRoZSBsaW5lIGFyZSBzdG9yZWQgaW4gdGhlIHNhbWUgYXJyYXkgYXMgdGhl
IHRyaWFuZ2xlIGluZGljZXMuCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5kcmF3RWxl
bWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JULCA2ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpOworfQorCit2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclN1cmZhY2VRdWFkKGNvbnN0IENDUmVu
ZGVyU3VyZmFjZURyYXdRdWFkKiBxdWFkKQoreworICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IHF1
YWQtPmxheWVyKCk7CisgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBxdWFk
LT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5yZWxl
YXNlQ29udGVudHNUZXh0dXJlKCk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqIHF1YWQpCit7Cisg
ICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogc29saWRDb2xvclByb2dyYW0g
PSBib3JkZXJQcm9ncmFtKCk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9n
cmFtKHNvbGlkQ29sb3JQcm9ncmFtLT5wcm9ncmFtKCkpKTsKKworICAgIEludFJlY3QgdGlsZVJl
Y3QgPSBxdWFkLT5xdWFkUmVjdCgpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsZVRy
YW5zZm9ybSA9IHF1YWQtPnF1YWRUcmFuc2Zvcm0oKTsKKyAgICB0aWxlVHJhbnNmb3JtLnRyYW5z
bGF0ZSh0aWxlUmVjdC54KCkgKyB0aWxlUmVjdC53aWR0aCgpIC8gMi4wLCB0aWxlUmVjdC55KCkg
KyB0aWxlUmVjdC5oZWlnaHQoKSAvIDIuMCk7CisKKyAgICBjb25zdCBDb2xvciYgY29sb3IgPSBx
dWFkLT5jb2xvcigpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYo
c29saWRDb2xvclByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuY29sb3JMb2NhdGlvbigpLCBjb2xv
ci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpLCBjb2xvci5hbHBoYSgpKSk7CisK
KyAgICBmbG9hdCBvcGFjaXR5ID0gcXVhZC0+b3BhY2l0eSgpOworICAgIGRyYXdUZXh0dXJlZFF1
YWQodGlsZVRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCks
IHRpbGVSZWN0LmhlaWdodCgpLCBvcGFjaXR5LCBGbG9hdFF1YWQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgIHNvbGlkQ29sb3JQcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigp
LAorICAgICAgICAgICAgICAgICAgICAgLTEsIC0xKTsKK30KKworc3RydWN0IFRpbGVQcm9ncmFt
VW5pZm9ybXMgeworICAgIHVuc2lnbmVkIHByb2dyYW07CisgICAgdW5zaWduZWQgc2FtcGxlckxv
Y2F0aW9uOworICAgIHVuc2lnbmVkIHZlcnRleFRleFRyYW5zZm9ybUxvY2F0aW9uOworICAgIHVu
c2lnbmVkIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb247CisgICAgdW5zaWduZWQgZWRnZUxv
Y2F0aW9uOworICAgIHVuc2lnbmVkIG1hdHJpeExvY2F0aW9uOworICAgIHVuc2lnbmVkIGFscGhh
TG9jYXRpb247CisgICAgdW5zaWduZWQgcG9pbnRMb2NhdGlvbjsKK307CisKK3RlbXBsYXRlPGNs
YXNzIFQ+CitzdGF0aWMgdm9pZCB0aWxlVW5pZm9ybUxvY2F0aW9uKFQgcHJvZ3JhbSwgVGlsZVBy
b2dyYW1Vbmlmb3JtcyYgdW5pZm9ybXMpCit7CisgICAgdW5pZm9ybXMucHJvZ3JhbSA9IHByb2dy
YW0tPnByb2dyYW0oKTsKKyAgICB1bmlmb3Jtcy52ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9
IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnZlcnRleFRleFRyYW5zZm9ybUxvY2F0aW9uKCk7Cisg
ICAgdW5pZm9ybXMubWF0cml4TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRy
aXhMb2NhdGlvbigpOworICAgIHVuaWZvcm1zLnBvaW50TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCk7CisKKyAgICB1bmlmb3Jtcy5zYW1wbGVyTG9jYXRp
b24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpOworICAgIHVu
aWZvcm1zLmFscGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9j
YXRpb24oKTsKKyAgICB1bmlmb3Jtcy5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uID0gcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCk7Cisg
ICAgdW5pZm9ybXMuZWRnZUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdl
TG9jYXRpb24oKTsKK30KKworc3RhdGljIHZvaWQgZmluZFRpbGVQcm9ncmFtVW5pZm9ybXMoTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBDQ1RpbGVEcmF3UXVhZCog
cXVhZCwgVGlsZVByb2dyYW1Vbmlmb3JtcyYgdW5pZm9ybXMpCit7CisgICAgaWYgKHF1YWQtPmlz
QW50aWFsaWFzZWQoKSkgeworICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpIHsK
KyAgICAgICAgICAgIGNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxlQUEqIHBy
b2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1Td2l6emxlQUEoKTsKKyAgICAgICAg
ICAgIHRpbGVVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbUFBKiBwcm9n
cmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtQUEoKTsKKyAgICAgICAgICAgIHRpbGVV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKHF1YWQtPmlzT3BhcXVlKCkpIHsKKyAgICAgICAgICAgIGlmIChxdWFk
LT5zd2l6emxlQ29udGVudHMoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IENDVGlsZWRMYXll
ckltcGw6OlByb2dyYW1Td2l6emxlT3BhcXVlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGls
ZXJQcm9ncmFtU3dpenpsZU9wYXF1ZSgpOworICAgICAgICAgICAgICAgIHRpbGVVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtT3BhcXVlKiBwcm9ncmFtID0g
bGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtT3BhcXVlKCk7CisgICAgICAgICAgICAgICAgdGls
ZVVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3Jtcyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpIHsK
KyAgICAgICAgICAgICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZSog
cHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGUoKTsKKyAgICAgICAg
ICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1zKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJv
Z3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbSgpOworICAgICAgICAg
ICAgICAgIHRpbGVVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd1RpbGVRdWFkKGNvbnN0IENDVGlsZURyYXdRdWFkKiBxdWFkKQoreworICAgIGNvbnN0IElu
dFJlY3QmIHRpbGVSZWN0ID0gcXVhZC0+cXVhZFJlY3QoKTsKKworICAgIEZsb2F0UmVjdCBjbGFt
cFJlY3QodGlsZVJlY3QpOworICAgIC8vIENsYW1wIHRleHR1cmUgY29vcmRpbmF0ZXMgdG8gYXZv
aWQgc2FtcGxpbmcgb3V0c2lkZSB0aGUgbGF5ZXIKKyAgICAvLyBieSBkZWZsYXRpbmcgdGhlIHRp
bGUgcmVnaW9uIGhhbGYgYSB0ZXhlbCBvciBoYWxmIGEgdGV4ZWwKKyAgICAvLyBtaW51cyBlcHNp
bG9uIGZvciBvbmUgcGl4ZWwgbGF5ZXJzLiBUaGUgcmVzdWx0aW5nIGNsYW1wIHJlZ2lvbgorICAg
IC8vIGlzIG1hcHBlZCB0byB0aGUgdW5pdCBzcXVhcmUgYnkgdGhlIHZlcnRleCBzaGFkZXIgYW5k
IG1hcHBlZAorICAgIC8vIGJhY2sgdG8gbm9ybWFsaXplZCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGJ5
IHRoZSBmcmFnbWVudCBzaGFkZXIKKyAgICAvLyBhZnRlciBiZWluZyBjbGFtcGVkIHRvIDAtMSBy
YW5nZS4KKyAgICBjb25zdCBmbG9hdCBlcHNpbG9uID0gMSAvIDEwMjQuMGY7CisgICAgZmxvYXQg
Y2xhbXBYID0gbWluKDAuNSwgY2xhbXBSZWN0LndpZHRoKCkgLyAyLjAgLSBlcHNpbG9uKTsKKyAg
ICBmbG9hdCBjbGFtcFkgPSBtaW4oMC41LCBjbGFtcFJlY3QuaGVpZ2h0KCkgLyAyLjAgLSBlcHNp
bG9uKTsKKyAgICBjbGFtcFJlY3QuaW5mbGF0ZVgoLWNsYW1wWCk7CisgICAgY2xhbXBSZWN0Lmlu
ZmxhdGVZKC1jbGFtcFkpOworICAgIEZsb2F0U2l6ZSBjbGFtcE9mZnNldCA9IGNsYW1wUmVjdC5t
aW5YTWluWUNvcm5lcigpIC0gRmxvYXRSZWN0KHRpbGVSZWN0KS5taW5YTWluWUNvcm5lcigpOwor
CisgICAgRmxvYXRQb2ludCB0ZXh0dXJlT2Zmc2V0ID0gcXVhZC0+dGV4dHVyZU9mZnNldCgpICsg
Y2xhbXBPZmZzZXQ7CisKKyAgICAvLyBNYXAgY2xhbXBpbmcgcmVjdGFuZ2xlIHRvIHVuaXQgc3F1
YXJlLgorICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVggPSAtY2xhbXBSZWN0LngoKSAvIGNs
YW1wUmVjdC53aWR0aCgpOworICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVkgPSAtY2xhbXBS
ZWN0LnkoKSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsKKyAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVgg
PSB0aWxlUmVjdC53aWR0aCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7CisgICAgZmxvYXQgdmVydGV4
VGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7CisKKyAg
ICAvLyBNYXAgdG8gbm9ybWFsaXplZCB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAgIGNvbnN0IElu
dFNpemUmIHRleHR1cmVTaXplID0gcXVhZC0+dGV4dHVyZVNpemUoKTsKKyAgICBmbG9hdCBmcmFn
bWVudFRleFRyYW5zbGF0ZVggPSB0ZXh0dXJlT2Zmc2V0LngoKSAvIHRleHR1cmVTaXplLndpZHRo
KCk7CisgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gdGV4dHVyZU9mZnNldC55KCkg
LyB0ZXh0dXJlU2l6ZS5oZWlnaHQoKTsKKyAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWCA9IGNs
YW1wUmVjdC53aWR0aCgpIC8gdGV4dHVyZVNpemUud2lkdGgoKTsKKyAgICBmbG9hdCBmcmFnbWVu
dFRleFNjYWxlWSA9IGNsYW1wUmVjdC5oZWlnaHQoKSAvIHRleHR1cmVTaXplLmhlaWdodCgpOwor
CisgICAgVGlsZVByb2dyYW1Vbmlmb3JtcyB1bmlmb3JtczsKKyAgICBmaW5kVGlsZVByb2dyYW1V
bmlmb3Jtcyh0aGlzLCBxdWFkLCB1bmlmb3Jtcyk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPnVzZVByb2dyYW0odW5pZm9ybXMucHJvZ3JhbSkpOworICAgIEdMQyhjb250ZXh0KCks
IGNvbnRleHQoKS0+dW5pZm9ybTFpKHVuaWZvcm1zLnNhbXBsZXJMb2NhdGlvbiwgMCkpOworICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTApKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkLT50ZXh0dXJlSWQoKSkpOworICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgcXVh
ZC0+dGV4dHVyZUZpbHRlcigpKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NQUdfRklMVEVSLCBxdWFkLT50ZXh0dXJlRmlsdGVyKCkpKTsKKworICAgIEZs
b2F0UXVhZCBsb2NhbFF1YWQ7CisgICAgaWYgKHF1YWQtPmlzQW50aWFsaWFzZWQoKSkgeworICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCh3aW5kb3dNYXRyaXgoKSAqIHByb2plY3Rpb25NYXRyaXgoKSAqIHF1YWQtPnF1YWRU
cmFuc2Zvcm0oKSkudG8yZFRyYW5zZm9ybSgpOworICAgICAgICBpZiAoIWRldmljZVRyYW5zZm9y
bS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBGbG9hdFF1
YWQgZGV2aWNlTGF5ZXJRdWFkID0gZGV2aWNlVHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKHF1
YWQtPmxheWVyUmVjdCgpKSk7CisKKyAgICAgICAgQ0NMYXllclF1YWQgZGV2aWNlTGF5ZXJCb3Vu
ZHMgPSBDQ0xheWVyUXVhZChGbG9hdFF1YWQoZGV2aWNlTGF5ZXJRdWFkLmJvdW5kaW5nQm94KCkp
KTsKKyAgICAgICAgZGV2aWNlTGF5ZXJCb3VuZHMuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNl
KCk7CisKKyAgICAgICAgQ0NMYXllclF1YWQgZGV2aWNlTGF5ZXJFZGdlcyA9IENDTGF5ZXJRdWFk
KGRldmljZUxheWVyUXVhZCk7CisgICAgICAgIGRldmljZUxheWVyRWRnZXMuaW5mbGF0ZUFudGlB
bGlhc2luZ0Rpc3RhbmNlKCk7CisKKyAgICAgICAgZmxvYXQgZWRnZVsyNF07CisgICAgICAgIGRl
dmljZUxheWVyRWRnZXMudG9GbG9hdEFycmF5KGVkZ2UpOworICAgICAgICBkZXZpY2VMYXllckJv
dW5kcy50b0Zsb2F0QXJyYXkoJmVkZ2VbMTJdKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT51bmlmb3JtM2Z2KHVuaWZvcm1zLmVkZ2VMb2NhdGlvbiwgZWRnZSwgOCkpOworCisg
ICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTRmKHVuaWZvcm1zLnZlcnRl
eFRleFRyYW5zZm9ybUxvY2F0aW9uLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVYLCB2ZXJ0ZXhUZXhUcmFu
c2xhdGVZLCB2ZXJ0ZXhUZXhTY2FsZVgsIHZlcnRleFRleFNjYWxlWSkpOworICAgICAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00Zih1bmlmb3Jtcy5mcmFnbWVudFRleFRyYW5z
Zm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRl
WSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7CisKKyAgICAgICAgRmxv
YXRQb2ludCBib3R0b21SaWdodCh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7Cisg
ICAgICAgIEZsb2F0UG9pbnQgYm90dG9tTGVmdCh0aWxlUmVjdC54KCksIHRpbGVSZWN0Lm1heFko
KSk7CisgICAgICAgIEZsb2F0UG9pbnQgdG9wTGVmdCh0aWxlUmVjdC54KCksIHRpbGVSZWN0Lnko
KSk7CisgICAgICAgIEZsb2F0UG9pbnQgdG9wUmlnaHQodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVj
dC55KCkpOworCisgICAgICAgIC8vIE1hcCBwb2ludHMgdG8gZGV2aWNlIHNwYWNlLgorICAgICAg
ICBib3R0b21SaWdodCA9IGRldmljZVRyYW5zZm9ybS5tYXBQb2ludChib3R0b21SaWdodCk7Cisg
ICAgICAgIGJvdHRvbUxlZnQgPSBkZXZpY2VUcmFuc2Zvcm0ubWFwUG9pbnQoYm90dG9tTGVmdCk7
CisgICAgICAgIHRvcExlZnQgPSBkZXZpY2VUcmFuc2Zvcm0ubWFwUG9pbnQodG9wTGVmdCk7Cisg
ICAgICAgIHRvcFJpZ2h0ID0gZGV2aWNlVHJhbnNmb3JtLm1hcFBvaW50KHRvcFJpZ2h0KTsKKwor
ICAgICAgICBDQ0xheWVyUXVhZDo6RWRnZSBib3R0b21FZGdlKGJvdHRvbVJpZ2h0LCBib3R0b21M
ZWZ0KTsKKyAgICAgICAgQ0NMYXllclF1YWQ6OkVkZ2UgbGVmdEVkZ2UoYm90dG9tTGVmdCwgdG9w
TGVmdCk7CisgICAgICAgIENDTGF5ZXJRdWFkOjpFZGdlIHRvcEVkZ2UodG9wTGVmdCwgdG9wUmln
aHQpOworICAgICAgICBDQ0xheWVyUXVhZDo6RWRnZSByaWdodEVkZ2UodG9wUmlnaHQsIGJvdHRv
bVJpZ2h0KTsKKworICAgICAgICBpZiAocXVhZC0+dG9wRWRnZUFBKCkpCisgICAgICAgICAgICB0
b3BFZGdlID0gZGV2aWNlTGF5ZXJFZGdlcy50b3AoKTsKKyAgICAgICAgaWYgKHF1YWQtPmxlZnRF
ZGdlQUEoKSkKKyAgICAgICAgICAgIGxlZnRFZGdlID0gZGV2aWNlTGF5ZXJFZGdlcy5sZWZ0KCk7
CisgICAgICAgIGlmIChxdWFkLT5yaWdodEVkZ2VBQSgpKQorICAgICAgICAgICAgcmlnaHRFZGdl
ID0gZGV2aWNlTGF5ZXJFZGdlcy5yaWdodCgpOworICAgICAgICBpZiAocXVhZC0+Ym90dG9tRWRn
ZUFBKCkpCisgICAgICAgICAgICBib3R0b21FZGdlID0gZGV2aWNlTGF5ZXJFZGdlcy5ib3R0b20o
KTsKKworICAgICAgICBmbG9hdCBzaWduID0gRmxvYXRRdWFkKHRpbGVSZWN0KS5pc0NvdW50ZXJj
bG9ja3dpc2UoKSA/IC0xIDogMTsKKyAgICAgICAgYm90dG9tRWRnZS5zY2FsZShzaWduKTsKKyAg
ICAgICAgbGVmdEVkZ2Uuc2NhbGUoc2lnbik7CisgICAgICAgIHRvcEVkZ2Uuc2NhbGUoc2lnbik7
CisgICAgICAgIHJpZ2h0RWRnZS5zY2FsZShzaWduKTsKKworICAgICAgICAvLyBDcmVhdGUgZGV2
aWNlIHNwYWNlIHF1YWQuCisgICAgICAgIENDTGF5ZXJRdWFkIGRldmljZVF1YWQobGVmdEVkZ2Us
IHRvcEVkZ2UsIHJpZ2h0RWRnZSwgYm90dG9tRWRnZSk7CisKKyAgICAgICAgLy8gTWFwIHF1YWQg
dG8gbGF5ZXIgc3BhY2UuCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2VEZXZp
Y2VUcmFuc2Zvcm0gPSBkZXZpY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOworICAgICAgICBsb2NhbFF1
YWQgPSBpbnZlcnNlRGV2aWNlVHJhbnNmb3JtLm1hcFF1YWQoZGV2aWNlUXVhZC5mbG9hdFF1YWQo
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJhbnNm
b3JtIHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbyB0aGlzIHdoaWxlCisgICAgICAgIC8vIHN0
aWxsIHByb2R1Y2luZyBjb3JyZWN0IHJlc3VsdHMgYXMgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2Nh
dGlvbgorICAgICAgICAvLyBzaG91bGQgYWx3YXlzIGJlIG5vbi1uZWdhdGl2ZSB3aGVuIHRpbGVz
IGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdheQorICAgICAgICAvLyB0aGF0IGNvdWxkIHJlc3VsdCBp
biBzYW1wbGluZyBvdXRzaWRlIHRoZSBsYXllci4KKyAgICAgICAgdmVydGV4VGV4U2NhbGVYICo9
IGZyYWdtZW50VGV4U2NhbGVYOworICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJhZ21lbnRU
ZXhTY2FsZVk7CisgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVggKj0gZnJhZ21lbnRUZXhTY2Fs
ZVg7CisgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7Cisg
ICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVggKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOworICAg
ICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICs9IGZyYWdtZW50VGV4VHJhbnNsYXRlWTsKKworICAg
ICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00Zih1bmlmb3Jtcy52ZXJ0ZXhU
ZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgdmVydGV4VGV4VHJhbnNsYXRlWCwgdmVydGV4VGV4VHJhbnNs
YXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhTY2FsZVkpKTsKKworICAgICAgICBsb2Nh
bFF1YWQgPSBGbG9hdFJlY3QodGlsZVJlY3QpOworICAgIH0KKworICAgIC8vIE5vcm1hbGl6ZSB0
byB0aWxlUmVjdC4KKyAgICBsb2NhbFF1YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCks
IDEuMGYgLyB0aWxlUmVjdC5oZWlnaHQoKSk7CisKKyAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWQt
PnF1YWRUcmFuc2Zvcm0oKSwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIHF1
YWQtPm9wYWNpdHkoKSwgbG9jYWxRdWFkLCB1bmlmb3Jtcy5tYXRyaXhMb2NhdGlvbiwgdW5pZm9y
bXMuYWxwaGFMb2NhdGlvbiwgdW5pZm9ybXMucG9pbnRMb2NhdGlvbik7Cit9CisKK3ZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Q3VzdG9tTGF5ZXJRdWFkKGNvbnN0IENDQ3VzdG9tTGF5
ZXJEcmF3UXVhZCogcXVhZCkKK3sKKyAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBxdWFkLT5sYXll
cigpOworICAgIGxheWVyLT5kcmF3KHRoaXMpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKCkKK3sKICAgICBpZiAobV9oZWFkc1VwRGlzcGxheS0+
ZW5hYmxlZCgpKSB7CiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwogICAgICAgICBHTEMobV9jb250ZXh0Lmdl
dCgpLCBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGlj
c0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwpAQCAtNDk1LDYgKzY4MCwxOCBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIAogICAgIEdM
QyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOworCisgICAgc2l6ZV90IGNvbnRlbnRzTWVt
b3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVz
ZUJ5dGVzKCk7CisgICAgc2l6ZV90IHJlY2xhaW1MaW1pdCA9IFRleHR1cmVNYW5hZ2VyOjpyZWNs
YWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSk7CisgICAgaWYgKHJlY2xhaW1MaW1pdCA+IGNv
bnRlbnRzTWVtb3J5VXNlQnl0ZXMpCisgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5h
Z2VyLT5zZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xhaW1MaW1pdCAtIGNvbnRlbnRz
TWVtb3J5VXNlQnl0ZXMpOworICAgIGVsc2UKKyAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXItPnNldFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoMCk7CisKKyAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fcmVuZGVyU3Vy
ZmFjZVRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOworCisgICAgaWYgKHNldHRpbmdzKCkuY29tcG9z
aXRlT2Zmc2NyZWVuKQorICAgICAgICBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwog
fQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dG9HTE1hdHJpeChmbG9hdCogZmxhdHRl
bmVkLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKQEAgLTU5NiwyMyArNzkzLDYgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBp
eGVscywgY29uc3QgSW50UmVjdCYgcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBwaXhlbHMpKTsKIH0KIAotLy8gUmV0dXJucyB0cnVlIGlmIGFueSBwYXJ0IG9m
IHRoZSBsYXllciBmYWxscyB3aXRoaW4gdGhlIHZpc2libGVSZWN0Ci1ib29sIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6aXNMYXllclZpc2libGUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KQot
ewotICAgIC8vIEZvcm0gdGhlIG1hdHJpeCB1c2VkIGJ5IHRoZSBzaGFkZXIgdG8gbWFwIHRoZSBj
b3JuZXJzIG9mIHRoZSBsYXllcidzCi0gICAgLy8gYm91bmRzIGludG8gY2xpcCBzcGFjZS4KLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBtYXRyaXg7Ci0gICAgcmVuZGVy
TWF0cml4LnNjYWxlM2QobGF5ZXItPmJvdW5kcygpLndpZHRoKCksIGxheWVyLT5ib3VuZHMoKS5o
ZWlnaHQoKSwgMSk7Ci0gICAgcmVuZGVyTWF0cml4ID0gbV9wcm9qZWN0aW9uTWF0cml4ICogcmVu
ZGVyTWF0cml4OwotCi0gICAgRmxvYXRSZWN0IGxheWVyUmVjdCgtMC41LCAtMC41LCAxLCAxKTsK
LSAgICBGbG9hdFJlY3QgbWFwcGVkUmVjdCA9IHJlbmRlck1hdHJpeC5tYXBSZWN0KGxheWVyUmVj
dCk7Ci0KLSAgICAvLyBUaGUgbGF5ZXIgaXMgdmlzaWJsZSBpZiBpdCBpbnRlcnNlY3RzIGFueSBw
YXJ0IG9mIGEgcmVjdGFuZ2xlIHdob3NlIG9yaWdpbgotICAgIC8vIGlzIGF0ICgtMSwgLTEpIGFu
ZCBzaXplIGlzIDJ4Mi4KLSAgICByZXR1cm4gbWFwcGVkUmVjdC5pbnRlcnNlY3RzKEZsb2F0UmVj
dCgtMSwgLTEsIDIsIDIpKTsKLX0KLQogTWFuYWdlZFRleHR1cmUqIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCkKIHsKICAgICByZXR1cm4gc2V0dGluZ3Mo
KS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgcm9vdExheWVyKCkgPyByb290TGF5ZXIoKS0+cmVuZGVy
U3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7CkBAIC02NjMsNDIgKzg0Myw4IEBAIGJv
b2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFj
ZSogcmVuZGVyU3VyZmFjZSkKICNlbmRpZgogCiAgICAgc2V0RHJhd1ZpZXdwb3J0UmVjdChyZW5k
ZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLCBmYWxzZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXllckltcGwqIGxheWVy
LCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFj
ZURhbWFnZVJlY3QpCi17Ci0gICAgaWYgKENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3Vy
ZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8Q0NMYXllckltcGw+KGxheWVyLCB0YXJnZXRTdXJmYWNl
LT5vd25pbmdMYXllcklkKCkpKSB7Ci0gICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRy
YXcodGhpcywgc3VyZmFjZURhbWFnZVJlY3QpOwotICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFj
ZSgpLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAobGF5ZXItPnZpc2libGVMYXllclJlY3QoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChsYXllci0+dXNlc0xheWVyQ2xpcHBpbmcoKSAmJiBtX2NhcGFiaWxp
dGllcy51c2luZ1BhcnRpYWxTd2FwKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdl
UmVjdChsYXllci0+Y2xpcFJlY3QoKSk7Ci0gICAgICAgIGNsaXBBbmREYW1hZ2VSZWN0LmludGVy
c2VjdChzdXJmYWNlRGFtYWdlUmVjdCk7Ci0gICAgICAgIHNldFNjaXNzb3JUb1JlY3QoZW5jbG9z
aW5nSW50UmVjdChjbGlwQW5kRGFtYWdlUmVjdCkpOwotICAgIH0gZWxzZSBpZiAobV9jYXBhYmls
aXRpZXMudXNpbmdQYXJ0aWFsU3dhcCkKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChlbmNsb3Np
bmdJbnRSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KSk7Ci0gICAgZWxzZSBpZiAobGF5ZXItPnVzZXNM
YXllckNsaXBwaW5nKCkpCi0gICAgICAgIHNldFNjaXNzb3JUb1JlY3QobGF5ZXItPmNsaXBSZWN0
KCkpOwotICAgIGVsc2UKLSAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKLQotICAgIGJvb2wgb3Bh
cXVlID0gbGF5ZXItPm9wYXF1ZSgpICYmIGxheWVyLT5kcmF3T3BhY2l0eSgpID09IDE7Ci0gICAg
aWYgKG9wYXF1ZSkKLSAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwotCi0gICAgbGF5ZXItPmRyYXcodGhpcyk7
Ci0KLSAgICBpZiAob3BhcXVlKQotICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKLQotICAgIC8vIERyYXcgdGhl
IGRlYnVnIGJvcmRlciBpZiB0aGVyZSBpcyBvbmUuCi0gICAgbGF5ZXItPmRyYXdEZWJ1Z0JvcmRl
cih0aGlzKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gU2V0cyB0aGUgc2Npc3NvciByZWdp
b24gdG8gdGhlIGdpdmVuIHJlY3RhbmdsZS4gVGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciB0aGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggZmMyYTdhYjE5Njk2ZTQyMTc3
ZTkyYTUyYWE3NGFhOTJiNTI4N2ZkMi4uZWNmOThkODY3MTA0ZDRiZDExZGI4ZmY1OWUxNzFmNTdi
YmNlNjIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTQyLDcgKzQy
LDYgQEAKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0Nh
bnZhc0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3BsYXkuaCIKLSNpbmNs
dWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oIgogI2luY2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NW
aWRlb0xheWVySW1wbC5oIgpAQCAtNjYsNiArNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBDQ0hlYWRzVXBEaXNwbGF5OwogY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ0xheWVy
VHJlZUhvc3RJbXBsOworY2xhc3MgQ0NSZW5kZXJQYXNzOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5n
OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBOb25Db21wb3NpdGVkQ29udGVudEhv
c3Q7CkBAIC05OCw3ICs5OCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdmlld3BvcnRDaGFuZ2Vk
KCk7CiAKLSAgICB2b2lkIGRyYXdMYXllcnMoKTsKKyAgICB2b2lkIGJlZ2luRHJhd2luZ0ZyYW1l
KCk7CisgICAgdm9pZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqKTsKKyAgICB2
b2lkIGZpbmlzaERyYXdpbmdGcmFtZSgpOwogCiAgICAgLy8gd2FpdHMgZm9yIHJlbmRlcmluZyB0
byBmaW5pc2gKICAgICB2b2lkIGZpbmlzaCgpOwpAQCAtMTUyLDggKzE1NCw2IEBAIHB1YmxpYzoK
IAogICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0KCk7CiAKLSAgICB0eXBlZGVmIFZlY3Rv
cjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7Ci0KICAgICBzdGF0aWMgdm9pZCB0
b0dMTWF0cml4KGZsb2F0KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICB2b2lk
IGRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyTWF0cml4
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBm
bG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFF1YWQmLApAQCAtMTYzLDIzICsxNjMsMjIgQEAgcHJp
dmF0ZToKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVIb3N0SW1wbCosIFBh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKICAgICBib29sIGluaXRpYWxpemUoKTsKIAot
ICAgIHZvaWQgZHJhd0xheWVyc0ludGVybmFsKCk7Ci0gICAgdm9pZCBkcmF3TGF5ZXJzT250b1Jl
bmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlz
dCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllcklt
cGwqLCBDQ1JlbmRlclN1cmZhY2UqLCBjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgdHJh
Y2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3Qg
Q0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIHZvaWQgZHJhd1F1YWQo
Y29uc3QgQ0NEcmF3UXVhZCosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpOwor
ICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQq
KTsKKyAgICB2b2lkIGRyYXdSZW5kZXJTdXJmYWNlUXVhZChjb25zdCBDQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZCopOworICAgIHZvaWQgZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IENDU29saWRDb2xv
ckRyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3VGlsZVF1YWQoY29uc3QgQ0NUaWxlRHJhd1F1YWQq
KTsKKyAgICB2b2lkIGRyYXdDdXN0b21MYXllclF1YWQoY29uc3QgQ0NDdXN0b21MYXllckRyYXdR
dWFkKik7CiAKICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCk7
CiAgICAgdm9pZCBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwogCi0gICAgYm9vbCBp
c0xheWVyVmlzaWJsZShMYXllckNocm9taXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7Ci0KICAgICB2b2lkIHNldERyYXdWaWV3cG9y
dFJlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wgZmxpcFkpOwogCi0gICAgdm9pZCByZWxlYXNlUmVu
ZGVyU3VyZmFjZVRleHR1cmVzKCk7Ci0KICAgICBib29sIHVzZVJlbmRlclN1cmZhY2UoQ0NSZW5k
ZXJTdXJmYWNlKik7Ci0gICAgdm9pZCBjbGVhclN1cmZhY2VGb3JEZWJ1ZyhDQ0xheWVySW1wbCog
cmVuZGVyU3VyZmFjZUxheWVyLCBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgRmxv
YXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CisgICAgdm9pZCBjbGVhclN1cmZhY2VGb3JEZWJ1
ZyhDQ1JlbmRlclN1cmZhY2UqLCBDQ1JlbmRlclN1cmZhY2UqIHJvb3RSZW5kZXJTdXJmYWNlLCBj
b25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKKworICAgIHZvaWQgcmVsZWFzZVJl
bmRlclN1cmZhY2VUZXh0dXJlcygpOwogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
IApAQCAtMjQxLDggKzI0MCw2IEBAIHByaXZhdGU6CiAKICAgICBDQ1JlbmRlclN1cmZhY2UqIG1f
ZGVmYXVsdFJlbmRlclN1cmZhY2U7CiAKLSAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJTb3J0ZXI7
Ci0KICAgICBGbG9hdFF1YWQgbV9zaGFyZWRHZW9tZXRyeVF1YWQ7CiAKICAgICBib29sIG1faXNW
aWV3cG9ydENoYW5nZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNw
cAppbmRleCAwOTNlYTY4Y2EzMzNhNmEyNGI4MWFmMzIwMGNiNTMxNDg0ODIwOWY3Li5iNGUzNjI3
OTM5ODAzYzJiOWEyYTBiODE3YjI4ZDlhN2ZhNGY3MzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdC5jcHAKQEAgLTQzLDYgKzQzLDggQEAgTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0OjpOb25Db21wb3NpdGVkQ29udGVudEhvc3QoUGFzc093blB0cjxMYXllclBhaW50
ZXJDaHJvbWkKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldE5hbWUoIm5vbi1jb21wb3NpdGVkIGNv
bnRlbnQiKTsKICNlbmRpZgogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0RHJhd3NDb250ZW50KHRy
dWUpOworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0T3BhY2l0eSgxKTsKKyAgICBtX2dyYXBoaWNz
TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKHRydWUpOwogICAgIG1fZ3JhcGhpY3NMYXllci0+cGxh
dGZvcm1MYXllcigpLT5zZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KHRydWUpOwogICAgIG1fZ3Jh
cGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRPcGFxdWUodHJ1ZSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJv
bWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVy
Q2hyb21pdW0uaAppbmRleCBiYmE1MWY5Zjc4NTUzMGQ2Njc5ZjRkNTUzN2Q3ODQ2YjRmNTJlNDdl
Li41NjlmNjk2YmVhYTJhYTZkZmIzYmJmYjIxNzA0NmJmMGU0MGFjY2RjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNo
cm9taXVtLmgKQEAgLTE0NSw3ICsxNDUsMTUgQEAgcHJpdmF0ZToKICAgICBpbnQgbV92ZXJ0ZXhU
ZXhUcmFuc2Zvcm1Mb2NhdGlvbjsKIH07CiAKLWNsYXNzIEZyYWdtZW50VGV4QWxwaGFCaW5kaW5n
IHsKK2NsYXNzIEZyYWdtZW50VGlsZUJpbmRpbmdCYXNlIHsKK3B1YmxpYzoKKyAgICBpbnQgYWxw
aGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIC0xOyB9CisgICAgaW50IGVkZ2VMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIC0xOyB9CisgICAgaW50IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiAtMTsgfQorICAgIGludCBzYW1wbGVyTG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiAtMTsgfQorfTsKKworY2xhc3MgRnJhZ21lbnRUZXhBbHBoYUJpbmRpbmcgOiBw
dWJsaWMgRnJhZ21lbnRUaWxlQmluZGluZ0Jhc2UgewogcHVibGljOgogICAgIEZyYWdtZW50VGV4
QWxwaGFCaW5kaW5nKCk7CiAKQEAgLTE1OCwxMiArMTY2LDExIEBAIHByaXZhdGU6CiAgICAgaW50
IG1fYWxwaGFMb2NhdGlvbjsKIH07CiAKLWNsYXNzIEZyYWdtZW50VGV4T3BhcXVlQmluZGluZyB7
CitjbGFzcyBGcmFnbWVudFRleE9wYXF1ZUJpbmRpbmcgOiBwdWJsaWMgRnJhZ21lbnRUaWxlQmlu
ZGluZ0Jhc2UgewogcHVibGljOgogICAgIEZyYWdtZW50VGV4T3BhcXVlQmluZGluZygpOwogCiAg
ICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQgcHJvZ3JhbSk7Ci0gICAg
aW50IGFscGhhTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiAtMTsgfQogICAgIGludCBzYW1wbGVy
TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXJMb2NhdGlvbjsgfQogCiBwcml2YXRl
OgpAQCAtMjI0LDcgKzIzMSw3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fZWRnZUxvY2F0aW9uOwog
fTsKIAotY2xhc3MgRnJhZ21lbnRUZXhDbGFtcEFscGhhQUFCaW5kaW5nIHsKK2NsYXNzIEZyYWdt
ZW50VGV4Q2xhbXBBbHBoYUFBQmluZGluZyA6IHB1YmxpYyBGcmFnbWVudFRpbGVCaW5kaW5nQmFz
ZSB7CiBwdWJsaWM6CiAgICAgRnJhZ21lbnRUZXhDbGFtcEFscGhhQUFCaW5kaW5nKCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDVjNTVmNTliZjNlNzM3MmZlOWVjNTEy
ZWY2MzYxMTAxYWM1YTA1ZTUuLjdjYjQ3N2Y5ZGM5ZTZlNzUxNzY4M2Y1NzQwOTk0YTkzYzI4YzY1
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtMjUxLDcgKzI1MSw3IEBA
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBs
YXllcikKIAogICAgIHRpbGVkTGF5ZXItPnNldFNraXBzRHJhdyhtX3NraXBzRHJhdyk7CiAgICAg
dGlsZWRMYXllci0+c2V0VGV4dHVyZU9yaWVudGF0aW9uKG1fdGV4dHVyZU9yaWVudGF0aW9uKTsK
LSAgICB0aWxlZExheWVyLT5zZXRTYW1wbGVkVGV4ZWxGb3JtYXQobV9zYW1wbGVkVGV4ZWxGb3Jt
YXQpOworICAgIHRpbGVkTGF5ZXItPnNldENvbnRlbnRzU3dpenpsZWQobV9zYW1wbGVkVGV4ZWxG
b3JtYXQgIT0gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQSk7CiAg
ICAgdGlsZWRMYXllci0+c2V0VGlsaW5nRGF0YSgqbV90aWxlcik7CiAKICAgICBmb3IgKENDTGF5
ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGls
ZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NDdXN0b21MYXllckRyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM0
MTRmMmM2OWRjYzM4MmM4MTNmNjk5OTM4NTQ5MGY1YWU1MmZlZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ3VzdG9tTGF5
ZXJEcmF3UXVhZC5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgImNjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NDdXN0b21MYXllckRyYXdRdWFkPiBDQ0N1c3RvbUxh
eWVyRHJhd1F1YWQ6OmNyZWF0ZShQYXNzUmVmUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRR
dWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIpCit7
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0N1c3RvbUxheWVyRHJhd1F1YWQoc2hhcmVkUXVh
ZFN0YXRlLCBxdWFkUmVjdCwgbGF5ZXIpKTsKK30KKworQ0NDdXN0b21MYXllckRyYXdRdWFkOjpD
Q0N1c3RvbUxheWVyRHJhd1F1YWQoUGFzc1JlZlB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVk
UXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyKQor
ICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1YWQ6OkN1c3RvbUxheWVy
LCBxdWFkUmVjdCkKKyAgICAsIG1fbGF5ZXIobGF5ZXIpCit7CisgICAgQVNTRVJUKG1fbGF5ZXIp
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjllYWM1YzIxNzljYjY1NjExYTMxYzM5MzgxMTg1MDFkZjAyNTVjNTAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1
c3RvbUxheWVyRHJhd1F1YWQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0N1
c3RvbUxheWVyRHJhd1F1YWRfaAorI2RlZmluZSBDQ0N1c3RvbUxheWVyRHJhd1F1YWRfaAorCisj
aW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllckltcGw7CisKK2NsYXNzIENDQ3Vz
dG9tTGF5ZXJEcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDQ0N1c3RvbUxheWVyRHJhd1F1YWQpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDQ3VzdG9tTGF5ZXJEcmF3UXVhZD4gY3JlYXRlKFBhc3NSZWZQdHI8Q0NTaGFyZWRR
dWFkU3RhdGU+LCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqKTsKKworICAgIENDTGF5ZXJJ
bXBsKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KKworcHJpdmF0ZToKKyAgICBD
Q0N1c3RvbUxheWVyRHJhd1F1YWQoUGFzc1JlZlB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4sIGNvbnN0
IEludFJlY3QmLCBDQ0xheWVySW1wbCopOworCisgICAgQ0NMYXllckltcGwqIG1fbGF5ZXI7Cit9
OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTc2YWJhOTRlOTQ2OWE4YmE1NjVmOGUzYTM0NGY4YWNjZjhhMTA4YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVh
ZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NEZWJ1Z0JvcmRlckRy
YXdRdWFkPiBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6OmNyZWF0ZShQYXNzUmVmUHRyPENDU2hhcmVk
UXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIGludCB3aWR0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEND
RGVidWdCb3JkZXJEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBjb2xvciwgd2lk
dGgpKTsKK30KKworQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpDQ0RlYnVnQm9yZGVyRHJhd1F1YWQo
UGFzc1JlZlB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRS
ZWN0JiBxdWFkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBpbnQgd2lkdGgpCisgICAgOiBDQ0Ry
YXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6RGVidWdCb3JkZXIsIHF1YWRSZWN0
KQorICAgICwgbV9jb2xvcihjb2xvcikKKyAgICAsIG1fd2lkdGgod2lkdGgpCit7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI2NzMx
MTYyOWNlZWIyY2FlMTZkZjFjNWNkZDM1MzNhNjUyMGYzNwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJE
cmF3UXVhZC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDRGVidWdCb3JkZXJE
cmF3UXVhZF9oCisjZGVmaW5lIENDRGVidWdCb3JkZXJEcmF3UXVhZF9oCisKKyNpbmNsdWRlICJD
b2xvci5oIgorI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDRGVidWdCb3JkZXJEcmF3
UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0Rl
YnVnQm9yZGVyRHJhd1F1YWQpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDRGVi
dWdCb3JkZXJEcmF3UXVhZD4gY3JlYXRlKFBhc3NSZWZQdHI8Q0NTaGFyZWRRdWFkU3RhdGU+LCBj
b25zdCBJbnRSZWN0JiwgY29uc3QgQ29sb3ImLCBpbnQgd2lkdGgpOworCisgICAgY29uc3QgQ29s
b3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfTsKKyAgICBpbnQgd2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisKK3ByaXZhdGU6CisgICAgQ0NEZWJ1Z0JvcmRlckRy
YXdRdWFkKFBhc3NSZWZQdHI8Q0NTaGFyZWRRdWFkU3RhdGU+LCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgQ29sb3ImLCBpbnQgd2lkdGgpOworCisgICAgQ29sb3IgbV9jb2xvcjsKKyAgICBpbnQgbV93
aWR0aDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjUxNjQxN2M1YzBlODEwNGY2MmEzZTU0MGU4NWE2ODM5ZGRiNTg2MGQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdR
dWFkLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgorCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitDQ0RyYXdRdWFkOjpDQ0RyYXdRdWFkKFBhc3NSZWZQdHI8Q0NTaGFyZWRRdWFkU3RhdGU+
IHNoYXJlZFF1YWRTdGF0ZSwgTWF0ZXJpYWwgbWF0ZXJpYWwsIGNvbnN0IEludFJlY3QmIHF1YWRS
ZWN0KQorICAgIDogbV9zaGFyZWRRdWFkU3RhdGUoc2hhcmVkUXVhZFN0YXRlKQorICAgICwgbV9t
YXRlcmlhbChtYXRlcmlhbCkKKyAgICAsIG1fcXVhZFJlY3QocXVhZFJlY3QpCit7CisgICAgQVNT
RVJUKG1fc2hhcmVkUXVhZFN0YXRlKTsKKyAgICBBU1NFUlQobV9tYXRlcmlhbCAhPSBJbnZhbGlk
KTsKK30KKworY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKiBDQ0RyYXdRdWFkOjp0b0RlYnVn
Qm9yZGVyRHJhd1F1YWQoKSBjb25zdAoreworICAgIEFTU0VSVChtX21hdGVyaWFsID09IERlYnVn
Qm9yZGVyKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDQ0RlYnVnQm9yZGVy
RHJhd1F1YWQqPih0aGlzKTsKK30KKworY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqIEND
RHJhd1F1YWQ6OnRvUmVuZGVyU3VyZmFjZURyYXdRdWFkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9tYXRlcmlhbCA9PSBSZW5kZXJTdXJmYWNlKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCo+KHRoaXMpOworfQorCitjb25zdCBDQ1Nv
bGlkQ29sb3JEcmF3UXVhZCogQ0NEcmF3UXVhZDo6dG9Tb2xpZENvbG9yRHJhd1F1YWQoKSBjb25z
dAoreworICAgIEFTU0VSVChtX21hdGVyaWFsID09IFNvbGlkQ29sb3IpOworICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKj4odGhpcyk7Cit9CisK
K2NvbnN0IENDVGlsZURyYXdRdWFkKiBDQ0RyYXdRdWFkOjp0b1RpbGVEcmF3UXVhZCgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKG1fbWF0ZXJpYWwgPT0gVGlsZWRDb250ZW50KTsKKyAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBDQ1RpbGVEcmF3UXVhZCo+KHRoaXMpOworfQorCitjb25z
dCBDQ0N1c3RvbUxheWVyRHJhd1F1YWQqIENDRHJhd1F1YWQ6OnRvQ3VzdG9tTGF5ZXJEcmF3UXVh
ZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbWF0ZXJpYWwgPT0gQ3VzdG9tTGF5ZXIpOworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IENDQ3VzdG9tTGF5ZXJEcmF3UXVhZCo+KHRo
aXMpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDRlYjc3ZmY1NzU0ODEy
ZjE5MDUxYzIwZGNiOWEzMjgxZDk1ZWMwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaApAQCAtMCwwICsx
LDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0RyYXdRdWFkX2gKKyNkZWZpbmUgQ0NEcmF3UXVhZF9o
CisKKyNpbmNsdWRlICJjYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENDRGVidWdCb3JkZXJEcmF3UXVhZDsKK2NsYXNzIENDUmVuZGVyU3VyZmFj
ZURyYXdRdWFkOworY2xhc3MgQ0NTb2xpZENvbG9yRHJhd1F1YWQ7CitjbGFzcyBDQ1RpbGVEcmF3
UXVhZDsKK2NsYXNzIENDQ3VzdG9tTGF5ZXJEcmF3UXVhZDsKKworLy8gQ0NEcmF3UXVhZCBpcyBh
IGJhZyBvZiBkYXRhIHVzZWQgZm9yIGRyYXdpbmcgYSBxdWFkLiBCZWNhdXNlIGRpZmZlcmVudAor
Ly8gbWF0ZXJpYWxzIG5lZWQgZGlmZmVyZW50IGJpdHMgb2YgcGVyLXF1YWQgZGF0YSB0byByZW5k
ZXIsIGNsYXNzZXMgdGhhdCBkZXJpdmUKKy8vIGZyb20gQ0NEcmF3UXVhZCBzdG9yZSBhZGRpdGlv
bmFsIGRhdGEgaW4gdGhlaXIgZGVyaXZlZCBpbnN0YW5jZS4gVGhlIE1hdGVyaWFsCisvLyBlbnVt
IGlzIHVzZWQgdG8gInNhZmVseSIgdXBjYXN0IHRvIHRoZSBkZXJpdmVkIGNsYXNzLgorY2xhc3Mg
Q0NEcmF3UXVhZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NEcmF3UXVhZCk7CitwdWJs
aWM6CisgICAgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3F1YWRS
ZWN0OyB9CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+cXVhZFRyYW5zZm9ybSgpOyB9CisgICAg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9zaGFyZWRRdWFkU3RhdGUtPmxheWVyVHJhbnNmb3JtKCk7IH0KKyAgICBjb25zdCBJbnRS
ZWN0JiBsYXllclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJS
ZWN0KCk7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2hhcmVkUXVhZFN0YXRlLT5jbGlwUmVjdCgpOyB9CisgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5vcGFjaXR5KCk7IH0KKyAgICBib29sIGlzT3Bh
cXVlKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPmlzT3BhcXVlKCk7IH0KKyAg
ICBib29sIGlzTGF5ZXJBeGlzQWxpZ25lZEludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoYXJl
ZFF1YWRTdGF0ZS0+aXNMYXllckF4aXNBbGlnbmVkSW50UmVjdCgpOyB9CisKKyAgICBlbnVtIE1h
dGVyaWFsIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgRGVidWdCb3JkZXIsCisgICAgICAg
IFJlbmRlclN1cmZhY2UsCisgICAgICAgIFNvbGlkQ29sb3IsCisgICAgICAgIFRpbGVkQ29udGVu
dCwKKworICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgYW5kIGFkZCBwcm9wZXIgbWF0ZXJp
YWwgdHlwZXMgZm9yIGFsbCBsYXllciB0eXBlcworICAgICAgICBDdXN0b21MYXllciwKKyAgICB9
OworCisgICAgTWF0ZXJpYWwgbWF0ZXJpYWwoKSBjb25zdCB7IHJldHVybiBtX21hdGVyaWFsOyB9
CisKKyAgICBjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqIHRvRGVidWdCb3JkZXJEcmF3UXVh
ZCgpIGNvbnN0OworICAgIGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKiB0b1JlbmRlclN1
cmZhY2VEcmF3UXVhZCgpIGNvbnN0OworICAgIGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKiB0
b1NvbGlkQ29sb3JEcmF3UXVhZCgpIGNvbnN0OworICAgIGNvbnN0IENDVGlsZURyYXdRdWFkKiB0
b1RpbGVEcmF3UXVhZCgpIGNvbnN0OworICAgIGNvbnN0IENDQ3VzdG9tTGF5ZXJEcmF3UXVhZCog
dG9DdXN0b21MYXllckRyYXdRdWFkKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBDQ0RyYXdR
dWFkKFBhc3NSZWZQdHI8Q0NTaGFyZWRRdWFkU3RhdGU+LCBNYXRlcmlhbCwgY29uc3QgSW50UmVj
dCYpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gbV9zaGFyZWRR
dWFkU3RhdGU7CisKKyAgICBNYXRlcmlhbCBtX21hdGVyaWFsOworICAgIEludFJlY3QgbV9xdWFk
UmVjdDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggYWYw
NDJlNTY2OWI0NjJmYjZjMDlkZTZmYzNkNGNmNGI2ZDg0ZTkyZC4uMjc4OGI3YTVmODliMGRkN2E2
MWIzZTBiZWQzYzY4NDA1ZmViNTRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMzIs
NiArMzIsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1
ZGUgImNjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDRGVidWdCb3Jk
ZXJEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMTE3LDYgKzExOSwzMiBAQCB2b2lkIENDTGF5ZXJJ
bXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKK1Bhc3NSZWZQdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDTGF5ZXJJbXBsOjpzaGFy
ZWRRdWFkU3RhdGUoKSBjb25zdAoreworICAgIGJvb2wgaXNPcGFxdWUgPSBvcGFxdWUoKSAmJiBk
cmF3T3BhY2l0eSgpID09IDE7CisgICAgSW50UmVjdCBsYXllckNsaXBSZWN0OworICAgIGlmICh1
c2VzTGF5ZXJDbGlwcGluZygpKQorICAgICAgICBsYXllckNsaXBSZWN0ID0gY2xpcFJlY3QoKTsK
KyAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShxdWFkVHJhbnNmb3JtKCksIGRy
YXdUcmFuc2Zvcm0oKSwgdmlzaWJsZUxheWVyUmVjdCgpLCBsYXllckNsaXBSZWN0LCBkcmF3T3Bh
Y2l0eSgpLCBpc09wYXF1ZSk7Cit9CisKK3ZvaWQgQ0NMYXllckltcGw6OmFwcGVuZFF1YWRzKEND
UXVhZExpc3QmIHF1YWRMaXN0LCBQYXNzUmVmUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRR
dWFkU3RhdGUpCit7CisgICAgSW50UmVjdCBsYXllclJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkp
OworICAgIHF1YWRMaXN0LmFwcGVuZChDQ0N1c3RvbUxheWVyRHJhd1F1YWQ6OmNyZWF0ZShzaGFy
ZWRRdWFkU3RhdGUsIGxheWVyUmVjdCwgdGhpcykpOworfQorCit2b2lkIENDTGF5ZXJJbXBsOjph
cHBlbmREZWJ1Z0JvcmRlclF1YWQoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIFBhc3NSZWZQdHI8Q0NT
aGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSkgY29uc3QKK3sKKyAgICBpZiAoIWRlYnVn
Qm9yZGVyQ29sb3IoKS5hbHBoYSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRlYnVnQm9y
ZGVyV2lkdGgoKSA8IDApCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgbGF5ZXJSZWN0
KEludFBvaW50KCksIGJvdW5kcygpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoQ0NEZWJ1Z0JvcmRl
ckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBsYXllclJlY3QsIGRlYnVnQm9yZGVy
Q29sb3IoKSwgZGVidWdCb3JkZXJXaWR0aCgpKSk7Cit9CisKIHZvaWQgQ0NMYXllckltcGw6OmJp
bmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKikKIHsKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTE0NywyOCArMTc1LDkgQEAgY29uc3QgSW50UmVjdCBDQ0xheWVy
SW1wbDo6Z2V0RHJhd1JlY3QoKSBjb25zdAogICAgIHJldHVybiBtYXBwZWRSZWN0OwogfQogCi12
b2lkIENDTGF5ZXJJbXBsOjpkcmF3RGVidWdCb3JkZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBs
YXllclJlbmRlcmVyKQorVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NMYXllckltcGw6OnF1YWRUcmFu
c2Zvcm0oKSBjb25zdAogewotICAgIHN0YXRpYyBmbG9hdCBnbE1hdHJpeFsxNl07Ci0gICAgaWYg
KCFkZWJ1Z0JvcmRlckNvbG9yKCkuYWxwaGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAg
Y29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVy
ZXItPmJvcmRlclByb2dyYW0oKTsKLSAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0
aWFsaXplZCgpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFt
LT5wcm9ncmFtKCkpKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9
IGRyYXdUcmFuc2Zvcm0oKTsKLSAgICByZW5kZXJNYXRyaXguc2NhbGUzZChib3VuZHMoKS53aWR0
aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgMSk7Ci0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0
b0dMTWF0cml4KCZnbE1hdHJpeFswXSwgbGF5ZXJSZW5kZXJlci0+cHJvamVjdGlvbk1hdHJpeCgp
ICogcmVuZGVyTWF0cml4KTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybU1hdHJp
eDRmdihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLCBmYWxzZSwgJmds
TWF0cml4WzBdLCAxKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuY29sb3JMb2NhdGlvbigpLCBkZWJ1Z0JvcmRlckNvbG9y
KCkucmVkKCkgLyAyNTUuMCwgZGVidWdCb3JkZXJDb2xvcigpLmdyZWVuKCkgLyAyNTUuMCwgZGVi
dWdCb3JkZXJDb2xvcigpLmJsdWUoKSAvIDI1NS4wLCAxKSk7Ci0KLSAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+bGluZVdpZHRoKGRlYnVnQm9yZGVyV2lkdGgoKSkpOwotCi0gICAgLy8gVGhlIGlu
ZGljZXMgZm9yIHRoZSBsaW5lIGFyZSBzdG9yZWQgaW4gdGhlIHNhbWUgYXJyYXkgYXMgdGhlIHRy
aWFuZ2xlIGluZGljZXMuCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmRyYXdFbGVtZW50cyhH
cmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlQsIDYgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKSk7CisgICAgcmV0dXJuIGRyYXdU
cmFuc2Zvcm0oKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6d3JpdGVJbmRlbnQoVGV4dFN0cmVh
bSYgdHMsIGludCBpbmRlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBlMmMwMGM4Njg5ODJh
NzZjNjU4Y2FlODM0MTBlODViY2NkY2Y4MDlmLi40OTRiZWJmNDZmZWRjNjQ4ZWFhN2M3MGRjZDM1
ZWYwNWEzMTkzOWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAjaW5j
bHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC03MCw2ICs3MSwxMCBAQCBwdWJsaWM6CiAgICAg
aW50IGRlYnVnSUQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnSUQ7IH0KICNlbmRpZgogCisgICAg
UGFzc1JlZlB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZExpc3QmLCBQYXNzUmVmUHRyPENDU2hh
cmVkUXVhZFN0YXRlPik7CisgICAgdm9pZCBhcHBlbmREZWJ1Z0JvcmRlclF1YWQoQ0NRdWFkTGlz
dCYsIFBhc3NSZWZQdHI8Q0NTaGFyZWRRdWFkU3RhdGU+KSBjb25zdDsKKwogICAgIHZpcnR1YWwg
dm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogICAgIHZvaWQgdW5yZXNlcnZlQ29u
dGVudHNUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoTGF5
ZXJSZW5kZXJlckNocm9taXVtKik7CkBAIC0xMzEsOCArMTM2LDYgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0RGVidWdCb3JkZXJXaWR0aChmbG9hdCk7CiAgICAgZmxvYXQgZGVidWdCb3JkZXJXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdCb3JkZXJXaWR0aDsgfQogCi0gICAgdm9pZCBkcmF3
RGVidWdCb3JkZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7Ci0KICAgICBDQ1JlbmRlclN1cmZh
Y2UqIHJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0KCk7
IH0KICAgICB2b2lkIGNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICB2b2lkIGNsZWFyUmVuZGVy
U3VyZmFjZSgpIHsgbV9yZW5kZXJTdXJmYWNlLmNsZWFyKCk7IH0KQEAgLTIwMCw2ICsyMDMsOSBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0
cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRl
eHRTdHJlYW0mLCBpbnQgaW5kZW50KTsKIAorICAgIC8vIFRyYW5zZm9ybWF0aW9uIHVzZWQgdG8g
dHJhbnNmb3JtIHF1YWRzIHByb3ZpZGVkIGluIGFwcGVuZFF1YWRzLgorICAgIHZpcnR1YWwgVHJh
bnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybSgpIGNvbnN0OworCiBwcml2YXRlOgogICAg
IHZvaWQgc2V0UGFyZW50KENDTGF5ZXJJbXBsKiBwYXJlbnQpIHsgbV9wYXJlbnQgPSBwYXJlbnQ7
IH0KICAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFk
LmNwcAppbmRleCAyYzVmN2VjNjJkNzFmY2NjMTM3ZjI5YmI1NTQ3NzZmYWEwZTczYjJlLi41Yjgz
MDg5ZTFmMDU1YzQ4YTdkNGVmZDQxZGU4MzliNWEwYWM0ZWFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclF1
YWQuY3BwCkBAIC00Myw2ICs0MywxMCBAQCBDQ0xheWVyUXVhZDo6RWRnZTo6RWRnZShjb25zdCBG
bG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFBvaW50JiBxKQogICAgIHNjYWxlKDEuMGYgLyB0YW5n
ZW50Lmxlbmd0aCgpKTsKIH0KIAorQ0NMYXllclF1YWQ6OkNDTGF5ZXJRdWFkKCkKK3sKK30KKwog
Q0NMYXllclF1YWQ6OkNDTGF5ZXJRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKIHsKICAgICAv
LyBDcmVhdGUgZWRnZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclF1YWQuaAppbmRleCBmY2Y4MThlNmM0NDE0NTQ1
MzA4OGIwYWNkODkxN2YwMjM1N2Y0OWVlLi5mZjdkY2FhMTI4OTI4MmVjMGNmZDc1NzY5NDlkY2Q5
OTVjY2JkZGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmgKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgIH0KICAgICBDQ0xheWVyUXVhZChjb25zdCBGbG9hdFF1YWQmKTsKKyAg
ICBDQ0xheWVyUXVhZCgpOwogCiAgICAgRWRnZSBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0
OyB9CiAgICAgRWRnZSB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcDsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBlMGNkMzg5ZGM2ZjhkZjk0MDhhOWMwNTUx
ZTQwNmVmYmQxZGYyYjBkLi5jMWZiOWY1M2RjZWRjOGI0MjQwNTI5MjA0Yjc0NGZjNmY3NmU5YjEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMzAsOCArMzAs
MTEgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9D
Q0RhbWFnZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ1BhZ2VTY2Fs
ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAj
aW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CiAKQEAgLTEyNiwxNCArMTI5LDEyNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0
UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAgIG1f
Y2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQogCit2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3RE
cmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQorewor
ICAgIC8vIEZvciBub3csIHdlIHVzZSBkYW1hZ2UgdHJhY2tpbmcgdG8gY29tcHV0ZSBhIGdsb2Jh
bCBzY2lzc29yLiBUbyBkbyB0aGlzLCB3ZSBtdXN0CisgICAgLy8gY29tcHV0ZSBhbGwgZGFtYWdl
IHRyYWNraW5nIGJlZm9yZSBkcmF3aW5nIGFueXRoaW5nLCBzbyB0aGF0IHdlIGtub3cgdGhlIHJv
b3QKKyAgICAvLyBkYW1hZ2UgcmVjdC4gVGhlIHJvb3QgZGFtYWdlIHJlY3QgaXMgdGhlbiB1c2Vk
IHRvIHNjaXNzb3IgZWFjaCBzdXJmYWNlLgorCisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0t
c3VyZmFjZUluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIg
PSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAgIEND
UmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVy
U3VyZmFjZSgpOworICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CisgICAgICAgIHJlbmRl
clN1cmZhY2UtPmRhbWFnZVRyYWNrZXIoKS0+dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZShy
ZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpLCByZW5k
ZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjb21wdXRlU2NyZWVuU3BhY2VUcmFuc2Zvcm1Gb3JTdXJmYWNlKENDTGF5
ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIpCit7CisgICAgLy8gVGhlIGxheWVyJ3Mgc2NyZWVu
IHNwYWNlIHRyYW5zZm9ybSBjYW4gYmUgd3JpdHRlbiBhczoKKyAgICAvLyAgIGxheWVyU2NyZWVu
U3BhY2VUcmFuc2Zvcm0gPSBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gKiBsYXllck9yaWdp
blRyYW5zZm9ybQorICAgIC8vIFNvLCB0byBjb21wdXRlIHRoZSBzdXJmYWNlIHNjcmVlbiBzcGFj
ZSwgd2UgY2FuIGRvOgorICAgIC8vICAgc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gbGF5
ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSAqIGludmVyc2UobGF5ZXJPcmlnaW5UcmFuc2Zvcm0pCisK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck9yaWdpblRyYW5zZm9ybSA9IHJlbmRlclN1
cmZhY2VMYXllci0+ZHJhd1RyYW5zZm9ybSgpOworICAgIGxheWVyT3JpZ2luVHJhbnNmb3JtLnRy
YW5zbGF0ZSgtMC41ICogcmVuZGVyU3VyZmFjZUxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCAtMC41
ICogcmVuZGVyU3VyZmFjZUxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZUxh
eWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpOworICAgIHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5z
Zm9ybS5tdWx0aXBseShsYXllck9yaWdpblRyYW5zZm9ybS5pbnZlcnNlKCkpOworCisgICAgcmV0
dXJuIHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoVmVjdG9yPE93blB0cjxDQ1JlbmRlclBhc3M+
ID4mIHBhc3NlcykKK3sKKyAgICBDQ0xheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owor
ICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllcigpKTsKKworICAgIGlm
ICghcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgcm9vdExheWVyKCktPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5j
bGVhckxheWVyTGlzdCgpOworICAgIHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCktPnNldENv
bnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgdmlld3BvcnRTaXplKCkpKTsKKworICAgIHJv
b3RMYXllcigpLT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50KCksIHZpZXdwb3J0U2l6ZSgp
KSk7CisKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY0RyYXdFdGMi
LCB0aGlzLCAwKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyKCksIHJvb3RMYXllcigpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXll
cigpLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLCAmbV9sYXllclNvcnRlciwgbGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKyAgICB9CisKKyAgICBpZiAo
bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXApCisgICAgICAgIHRy
YWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdExheWVyKCksIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdCA9IHJvb3RMYXllcigpLT5yZW5kZXJT
dXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKworICAgIGZv
ciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsg
c3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgeworICAgICAgICBDQ0xheWVySW1w
bCogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5k
ZXhdLmdldCgpOworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5k
ZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKworICAgICAgICBPd25QdHI8Q0NSZW5k
ZXJQYXNzPiBwYXNzID0gQ0NSZW5kZXJQYXNzOjpjcmVhdGUocmVuZGVyU3VyZmFjZSk7CisgICAg
ICAgIENDUXVhZExpc3QmIHF1YWRMaXN0ID0gcGFzcy0+cXVhZExpc3QoKTsKKworICAgICAgICBG
bG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7CisgICAgICAgIGlmIChsYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkgeworICAgICAgICAgICAgLy8gRm9yIG5vdywg
d2UgY29uc2VydmF0aXZlbHkgdXNlIHRoZSByb290IGRhbWFnZSBhcyB0aGUgZGFtYWdlIGZvcgor
ICAgICAgICAgICAgLy8gYWxsIHN1cmZhY2VzLCBleGNlcHQgcGVyc3BlY3RpdmUgdHJhbnNmb3Jt
cy4KKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3Jt
ID0gY29tcHV0ZVNjcmVlblNwYWNlVHJhbnNmb3JtRm9yU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5
ZXIpOworICAgICAgICAgICAgaWYgKHNjcmVlblNwYWNlVHJhbnNmb3JtLmhhc1BlcnNwZWN0aXZl
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9ucyBkbyBub3Qg
cGxheSBuaWNlIHdpdGggbWFwUmVjdCBvZgorICAgICAgICAgICAgICAgIC8vIGludmVyc2UgdHJh
bnNmb3Jtcy4gSW4gdGhpcyB1bmNvbW1vbiBjYXNlLCBpdHMgc2ltcGxlciB0bworICAgICAgICAg
ICAgICAgIC8vIGp1c3QgcmVkcmF3IHRoZSBlbnRpcmUgc3VyZmFjZS4KKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogdXNlIGNhbGN1bGF0ZVZpc2libGVSZWN0IHRvIGhhbmRsZSBwcm9qZWN0aW9u
cy4KKyAgICAgICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IHJlbmRlclN1cmZhY2UtPmNv
bnRlbnRSZWN0KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHNjcmVlblNwYWNl
VHJhbnNmb3JtLmludmVyc2UoKTsKKyAgICAgICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9
IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybS5tYXBSZWN0KHJvb3REYW1hZ2VSZWN0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwYXNzLT5zZXRTdXJmYWNlRGFtYWdlUmVj
dChzdXJmYWNlRGFtYWdlUmVjdCk7CisKKyAgICAgICAgcGFzc2VzLmFwcGVuZChwYXNzLnJlbGVh
c2UoKSk7CisKKyAgICAgICAgY29uc3QgQ0NMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1
cmZhY2UtPmxheWVyTGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAw
OyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAg
ICAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7Cisg
ICAgICAgICAgICBpZiAobGF5ZXItPnZpc2libGVMYXllclJlY3QoKS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkgeworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiByZW5kZXIgc3VyZmFjZSBsYXllcnMgc2hvdWxkIGJlIGEg
Q0NMYXllckltcGwtZGVyaXZlZAorICAgICAgICAgICAgICAgIC8vIGNsYXNzIGFuZCBub3QgYmUg
aGFuZGxlZCBzcGVjaWFsbHkgaGVyZS4KKyAgICAgICAgICAgICAgICBDQ1JlbmRlclN1cmZhY2Uq
IHN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICAgICAgICAgIGJvb2wg
aXNPcGFxdWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Q0NTaGFyZWRRdWFkU3Rh
dGU+IHNoYXJlZFF1YWRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoc3VyZmFjZS0+
ZHJhd1RyYW5zZm9ybSgpLCBzdXJmYWNlLT5kcmF3VHJhbnNmb3JtKCksIHN1cmZhY2UtPmNvbnRl
bnRSZWN0KCksIHN1cmZhY2UtPmNsaXBSZWN0KCksIHN1cmZhY2UtPmRyYXdPcGFjaXR5KCksIGlz
T3BhcXVlKTsKKyAgICAgICAgICAgICAgICBxdWFkTGlzdC5hcHBlbmQoQ0NSZW5kZXJTdXJmYWNl
RHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHN1cmZhY2UtPmNvbnRlbnRSZWN0KCks
IGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWZQdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNo
YXJlZFF1YWRTdGF0ZSA9IGxheWVyLT5zaGFyZWRRdWFkU3RhdGUoKTsKKyAgICAgICAgICAgIGxh
eWVyLT5hcHBlbmRRdWFkcyhxdWFkTGlzdCwgc2hhcmVkUXVhZFN0YXRlKTsKKyAgICAgICAgICAg
IGxheWVyLT5hcHBlbmREZWJ1Z0JvcmRlclF1YWQocXVhZExpc3QsIHNoYXJlZFF1YWRTdGF0ZSk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xh
eWVycygpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXll
cnMiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBpZiAobV9s
YXllclJlbmRlcmVyLT5yb290TGF5ZXIoKSkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3
TGF5ZXJzKCk7CisKKyAgICBpZiAoIXJvb3RMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiBwYXNzZXM7CisgICAgY2FsY3VsYXRlUmVu
ZGVyUGFzc2VzKHBhc3Nlcyk7CisKKyAgICBtX2xheWVyUmVuZGVyZXItPmJlZ2luRHJhd2luZ0Zy
YW1lKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXNzZXMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MocGFzc2VzW2ldLmdldCgpKTsK
KyAgICBtX2xheWVyUmVuZGVyZXItPmZpbmlzaERyYXdpbmdGcmFtZSgpOwogCiAgICAgKyttX2Zy
YW1lTnVtYmVyOworCisgICAgLy8gVGhlIG5leHQgZnJhbWUgc2hvdWxkIHN0YXJ0IGJ5IGFzc3Vt
aW5nIG5vdGhpbmcgaGFzIGNoYW5nZWQsIGFuZCBjaGFuZ2VzIGFyZSBub3RlZCBhcyB0aGV5IG9j
Y3VyLgorICAgIHJvb3RMYXllcigpLT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgp
OwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmZpbmlzaEFsbFJlbmRlcmluZygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggODg3YzdlNjU1NzdlNzllMGUy
OGFkMDc4OGJlMjMyZDc1N2E0YzIzZi4uYTdhZTAzODhiYzAwZjZiMGQwNmQzNmQ3MjI0ZDY0ODg3
ZDFkYzhlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMjYsOCAr
MjYsMTAgQEAKICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbF9oCiAKICNpbmNsdWRlICJjYy9D
Q0lucHV0SGFuZGxlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21t
b24uaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAKICNpZiBVU0UoU0tJQSkKQEAgLTEyNCwxMCArMTI2LDE0IEBAIHByb3RlY3RlZDoKICAg
ICBpbnQgbV9mcmFtZU51bWJlcjsKIAogcHJpdmF0ZToKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQ
dHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7CisKICAgICB2b2lkIHNldFBhZ2VTY2FsZURl
bHRhKGZsb2F0KTsKICAgICB2b2lkIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVyKCk7
CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0KTsKICAgICB2
b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CisgICAgdm9pZCB0cmFja0RhbWFnZUZvckFs
bFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMo
VmVjdG9yPE93blB0cjxDQ1JlbmRlclBhc3M+ID4mKTsKIAogICAgIE93blB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1f
cm9vdExheWVySW1wbDsKQEAgLTE0NSw2ICsxNTEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9w
aW5jaEdlc3R1cmVBY3RpdmU7CiAKICAgICBPd25QdHI8Q0NQYWdlU2NhbGVBbmltYXRpb24+IG1f
cGFnZVNjYWxlQW5pbWF0aW9uOworCisgICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29ydGVyOwog
fTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3YjNiNWYyZDZl
NmMxZDY4MzdlMzlkMjVjOTA5MDAwNzQ3ZjA3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBA
IC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJj
Yy9DQ1JlbmRlclBhc3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPEND
UmVuZGVyUGFzcz4gQ0NSZW5kZXJQYXNzOjpjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRT
dXJmYWNlKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJQYXNzKHRhcmdldFN1
cmZhY2UpKTsKK30KKworQ0NSZW5kZXJQYXNzOjpDQ1JlbmRlclBhc3MoQ0NSZW5kZXJTdXJmYWNl
KiB0YXJnZXRTdXJmYWNlKQorICAgIDogbV90YXJnZXRTdXJmYWNlKHRhcmdldFN1cmZhY2UpCit7
CisgICAgQVNTRVJUKG1fdGFyZ2V0U3VyZmFjZSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjU5M2Q3ODBhODU0NmI3ZTRhYjQxZDkzN2U0ZmNkNWEwNjA4NWEwNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyUGFzcy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEND
UmVuZGVyUGFzc19oCisjZGVmaW5lIENDUmVuZGVyUGFzc19oCisKKyNpbmNsdWRlICJjYy9DQ0Ry
YXdRdWFkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllckltcGw7CitjbGFz
cyBDQ1JlbmRlclN1cmZhY2U7CisKK3R5cGVkZWYgVmVjdG9yPE93blB0cjxDQ0RyYXdRdWFkPiA+
IENDUXVhZExpc3Q7CisKK2NsYXNzIENDUmVuZGVyUGFzcyB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ0NSZW5kZXJQYXNzKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1Jl
bmRlclBhc3M+IGNyZWF0ZShDQ1JlbmRlclN1cmZhY2UqKTsKKworICAgIENDUXVhZExpc3QmIHF1
YWRMaXN0KCkgeyByZXR1cm4gbV9xdWFkTGlzdDsgfQorICAgIGNvbnN0IENDUXVhZExpc3QmIHF1
YWRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkTGlzdDsgfQorICAgIENDUmVuZGVyU3VyZmFj
ZSogdGFyZ2V0U3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0U3VyZmFjZTsgfQorCisg
ICAgdm9pZCBzZXRTdXJmYWNlRGFtYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1h
Z2VSZWN0KSB7IG1fc3VyZmFjZURhbWFnZVJlY3QgPSBzdXJmYWNlRGFtYWdlUmVjdDsgfQorICAg
IGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1
cmZhY2VEYW1hZ2VSZWN0OyB9CisKK3ByaXZhdGU6CisgICAgQ0NSZW5kZXJQYXNzKENDUmVuZGVy
U3VyZmFjZSopOworCisgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX3RhcmdldFN1cmZhY2U7CisgICAg
Q0NRdWFkTGlzdCBtX3F1YWRMaXN0OworICAgIEZsb2F0UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0
OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURy
YXdRdWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODIwNTExOTE0NjA2MTU5M2E2YmNhZjg3MTA2YWMwYWU4
NDdiZTYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwCkBAIC0wLDAgKzEsNDUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1
cmZhY2VEcmF3UXVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NS
ZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoUGFz
c1JlZlB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0
JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VE
YW1hZ2VSZWN0KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0
KSk7Cit9CisKK0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVh
ZChQYXNzUmVmUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IElu
dFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3Vy
ZmFjZURhbWFnZVJlY3QpCisgICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3
UXVhZDo6UmVuZGVyU3VyZmFjZSwgcXVhZFJlY3QpCisgICAgLCBtX2xheWVyKGxheWVyKQorICAg
ICwgbV9zdXJmYWNlRGFtYWdlUmVjdChzdXJmYWNlRGFtYWdlUmVjdCkKK3sKKyAgICBBU1NFUlQo
bV9sYXllcik7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVh
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRhMTc1Yzg5ODNhNzQ3NGI2ZThhMjcxZjRiMmE5ZDI2NTFhYzEzZDkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkX2gKKyNkZWZpbmUgQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWRfaAorCisjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllcklt
cGw7CisKK2NsYXNzIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZD4gY3Jl
YXRlKFBhc3NSZWZQdHI8Q0NTaGFyZWRRdWFkU3RhdGU+LCBjb25zdCBJbnRSZWN0JiwgQ0NMYXll
ckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKKworICAgIENDTGF5
ZXJJbXBsKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KKworICAgIC8vIFRoZSBz
dXJmYWNlIGRhbWFnZSByZWN0IGZvciB0aGUgdGFyZ2V0IHN1cmZhY2UgdGhpcyBxdWFkIGRyYXdz
IGludG8uCisgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHJlbW92ZWQgb25jZSByZW5kZXIgc3Vy
ZmFjZXMgZ2V0IHRoZWlyIG93biBsYXllciB0eXBlLgorICAgIGNvbnN0IEZsb2F0UmVjdCYgc3Vy
ZmFjZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VEYW1hZ2VSZWN0OyB9CisK
K3ByaXZhdGU6CisgICAgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoUGFzc1JlZlB0cjxDQ1NoYXJl
ZFF1YWRTdGF0ZT4sIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCosIGNvbnN0IEZsb2F0UmVj
dCYgc3VyZmFjZURhbWFnZVJlY3QpOworCisgICAgQ0NMYXllckltcGwqIG1fbGF5ZXI7CisgICAg
RmxvYXRSZWN0IG1fc3VyZmFjZURhbWFnZVJlY3Q7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFy
ZWRRdWFkU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkZTE0MTY5Nzk5ODA5NjA1
NzBjODk2YTk3ZDYxNmFiMTU5YTFhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAKQEAg
LTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNj
L0NDU2hhcmVkUXVhZFN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0
cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENDU2hhcmVkUXVhZFN0YXRlKHF1YWRUcmFuc2Zvcm0sIGxheWVyVHJhbnNm
b3JtLCBsYXllclJlY3QsIGNsaXBSZWN0LCBvcGFjaXR5LCBvcGFxdWUpKTsKK30KKworQ0NTaGFy
ZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zv
cm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZs
b2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKQorICAgIDogbV9xdWFkVHJhbnNmb3JtKHF1YWRUcmFu
c2Zvcm0pCisgICAgLCBtX2xheWVyVHJhbnNmb3JtKGxheWVyVHJhbnNmb3JtKQorICAgICwgbV9s
YXllclJlY3QobGF5ZXJSZWN0KQorICAgICwgbV9jbGlwUmVjdChjbGlwUmVjdCkKKyAgICAsIG1f
b3BhY2l0eShvcGFjaXR5KQorICAgICwgbV9vcGFxdWUob3BhcXVlKQoreworfQorCitib29sIEND
U2hhcmVkUXVhZFN0YXRlOjppc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KCkgY29uc3QKK3sKKyAg
ICAvLyBOb3RlOiB0aGlzIGRvZXNuJ3QgY29uc2lkZXIgd2luZG93IG9yIHByb2plY3Rpb24gbWF0
cmljZXMuCisgICAgLy8gQXNzdW1lIHRoYXQgdGhleSdyZSBvcnRob25vcm1hbCBhbmQgaGF2ZSBp
bnRlZ2VyIHNjYWxlcyBhbmQgdHJhbnNsYXRpb25zLgorICAgIEZsb2F0UXVhZCBxdWFkID0gcXVh
ZFRyYW5zZm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFkKGxheWVyUmVjdCgpKSk7CisgICAgcmV0dXJu
IHF1YWQuaXNSZWN0aWxpbmVhcigpICYmIHF1YWQuYm91bmRpbmdCb3goKS5pc0V4cHJlc3NpYmxl
QXNJbnRSZWN0KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU0MzcyZGJlNjZhOThmZjZhMzA4NWI0MzJlOTkzNWEyNTUyNTM3ZTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NoYXJlZFF1YWRTdGF0ZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU2hh
cmVkUXVhZFN0YXRlX2gKKyNkZWZpbmUgQ0NTaGFyZWRRdWFkU3RhdGVfaAorCisjaW5jbHVkZSAi
RmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDU2hhcmVkUXVh
ZFN0YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8Q0NTaGFyZWRRdWFkU3RhdGU+IHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDQ1NoYXJlZFF1YWRTdGF0ZSk7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVy
VHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSk7CisKKyAgICAvLyBUaGUgdHJhbnNmb3Jt
IHRoYXQgcXVhZHMgaW4gYSBDQ0RyYXdRdWFkIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB3aXRoLgor
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV9xdWFkVHJhbnNmb3JtOyB9CisgICAgLy8gVGhlIHRyYW5zZm9ybSB0aGF0IGxheWVy
UmVjdCgpIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB3aXRoLgorICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmFuc2Zv
cm07IH0KKyAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QoKSBjb25zdCB7IHJldHVybiBtX2xh
eWVyUmVjdDsgfQorICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9jbGlwUmVjdDsgfQorCisgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bh
Y2l0eTsgfQorICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQor
ICAgIGJvb2wgaXNMYXllckF4aXNBbGlnbmVkSW50UmVjdCgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIENDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJh
bnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0
IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNp
dHksIGJvb2wgb3BhcXVlKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcXVhZFRyYW5z
Zm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2xheWVyVHJhbnNmb3JtOworICAgIElu
dFJlY3QgbV9sYXllclJlY3Q7CisgICAgSW50UmVjdCBtX2NsaXBSZWN0OworICAgIGZsb2F0IG1f
b3BhY2l0eTsKKyAgICBib29sIG1fb3BhcXVlOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRD
b2xvckRyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYTE3YzgwNzI3NTg2
YzliY2MwZDAxZTkzMmNkODEzZjcxNWNlY2MwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQu
Y3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1Bhc3NPd25QdHI8Q0NTb2xpZENvbG9yRHJhd1F1YWQ+IENDU29saWRDb2xvckRyYXdRdWFkOjpj
cmVhdGUoUGFzc1JlZlB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlLCBjb25z
dCBJbnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ0NTb2xpZENvbG9yRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVj
dCwgY29sb3IpKTsKK30KKworQ0NTb2xpZENvbG9yRHJhd1F1YWQ6OkNDU29saWRDb2xvckRyYXdR
dWFkKFBhc3NSZWZQdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSwgY29uc3Qg
SW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICA6IENDRHJhd1F1YWQo
c2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpTb2xpZENvbG9yLCBxdWFkUmVjdCkKKyAgICAs
IG1fY29sb3IoY29sb3IpCit7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3
UXVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmUyMWNkMjNjMzcwNzcwZGExNTlkOGM5N2M5MDI2MTExMGNmOTE2
NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENDU29saWRDb2xvckRyYXdRdWFkX2gKKyNkZWZpbmUgQ0NTb2xpZENvbG9yRHJh
d1F1YWRfaAorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgi
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDQ1NvbGlkQ29sb3JEcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDQ1NvbGlkQ29sb3JEcmF3UXVhZCk7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NTb2xpZENvbG9yRHJhd1F1YWQ+IGNyZWF0ZShQYXNzUmVmUHRyPEND
U2hhcmVkUXVhZFN0YXRlPiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENvbG9yJik7CisKKyAgICBj
b25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9OworCitwcml2YXRl
OgorICAgIENDU29saWRDb2xvckRyYXdRdWFkKFBhc3NSZWZQdHI8Q0NTaGFyZWRRdWFkU3RhdGU+
LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKworICAgIENvbG9yIG1fY29sb3I7Cit9
OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk1MzcxYjVhZTc2ZWQ5MTUyNzZkYmUxYTI3ZGQ5YWEwOTIxZTBkZGMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVE
cmF3UXVhZC5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc093blB0cjxDQ1RpbGVEcmF3UXVhZD4gQ0NUaWxlRHJhd1F1YWQ6OmNyZWF0ZShQYXNz
UmVmUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3Qm
IHF1YWRSZWN0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50UG9pbnQmIHRl
eHR1cmVPZmZzZXQsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBHQzNEaW50IHRleHR1cmVG
aWx0ZXIsIGJvb2wgc3dpenpsZUNvbnRlbnRzLCBib29sIGxlZnRFZGdlQUEsIGJvb2wgdG9wRWRn
ZUFBLCBib29sIHJpZ2h0RWRnZUFBLCBib29sIGJvdHRvbUVkZ2VBQSkKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDVGlsZURyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRl
eHR1cmVJZCwgdGV4dHVyZU9mZnNldCwgdGV4dHVyZVNpemUsIHRleHR1cmVGaWx0ZXIsIHN3aXp6
bGVDb250ZW50cywgbGVmdEVkZ2VBQSwgdG9wRWRnZUFBLCByaWdodEVkZ2VBQSwgYm90dG9tRWRn
ZUFBKSk7Cit9CisKK0NDVGlsZURyYXdRdWFkOjpDQ1RpbGVEcmF3UXVhZChQYXNzUmVmUHRyPEND
U2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0
LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50UG9pbnQmIHRleHR1cmVPZmZz
ZXQsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBHQzNEaW50IHRleHR1cmVGaWx0ZXIsIGJv
b2wgc3dpenpsZUNvbnRlbnRzLCBib29sIGxlZnRFZGdlQUEsIGJvb2wgdG9wRWRnZUFBLCBib29s
IHJpZ2h0RWRnZUFBLCBib29sIGJvdHRvbUVkZ2VBQSkKKyAgICA6IENDRHJhd1F1YWQoc2hhcmVk
UXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQsIHF1YWRSZWN0KQorICAgICwgbV90
ZXh0dXJlSWQodGV4dHVyZUlkKQorICAgICwgbV90ZXh0dXJlT2Zmc2V0KHRleHR1cmVPZmZzZXQp
CisgICAgLCBtX3RleHR1cmVTaXplKHRleHR1cmVTaXplKQorICAgICwgbV90ZXh0dXJlRmlsdGVy
KHRleHR1cmVGaWx0ZXIpCisgICAgLCBtX3N3aXp6bGVDb250ZW50cyhzd2l6emxlQ29udGVudHMp
CisgICAgLCBtX2xlZnRFZGdlQUEobGVmdEVkZ2VBQSkKKyAgICAsIG1fdG9wRWRnZUFBKHRvcEVk
Z2VBQSkKKyAgICAsIG1fcmlnaHRFZGdlQUEocmlnaHRFZGdlQUEpCisgICAgLCBtX2JvdHRvbUVk
Z2VBQShib3R0b21FZGdlQUEpCit7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjBiZTE3OWZkM2I4Mzk4NWYyOTA2MWFkYmM0ZWQyNzUzYWZlZDA4ZGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbGVEcmF3UXVhZC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGls
ZURyYXdRdWFkX2gKKyNkZWZpbmUgQ0NUaWxlRHJhd1F1YWRfaAorCisjaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlczNELmgiCisjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NUaWxlRHJhd1F1
YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NUaWxl
RHJhd1F1YWQpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVGlsZURyYXdRdWFk
PiBjcmVhdGUoUGFzc1JlZlB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4sIGNvbnN0IEludFJlY3QmIHF1
YWRSZWN0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50UG9pbnQmIHRleHR1
cmVPZmZzZXQsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBHQzNEaW50IHRleHR1cmVGaWx0
ZXIsIGJvb2wgc3dpenpsZUNvbnRlbnRzLCBib29sIGxlZnRFZGdlQUEsIGJvb2wgdG9wRWRnZUFB
LCBib29sIHJpZ2h0RWRnZUFBLCBib29sIGJvdHRvbUVkZ2VBQSk7CisKKyAgICBQbGF0Zm9ybTNE
T2JqZWN0IHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlkOyB9CisgICAgSW50
UG9pbnQgdGV4dHVyZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZU9mZnNldDsgfQor
ICAgIEludFNpemUgdGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXplOyB9
CisgICAgR0MzRGludCB0ZXh0dXJlRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlRmls
dGVyOyB9CisgICAgYm9vbCBzd2l6emxlQ29udGVudHMoKSBjb25zdCB7IHJldHVybiBtX3N3aXp6
bGVDb250ZW50czsgfQorCisgICAgYm9vbCBsZWZ0RWRnZUFBKCkgY29uc3QgeyByZXR1cm4gbV9s
ZWZ0RWRnZUFBOyB9CisgICAgYm9vbCB0b3BFZGdlQUEoKSBjb25zdCB7IHJldHVybiBtX3RvcEVk
Z2VBQTsgfQorICAgIGJvb2wgcmlnaHRFZGdlQUEoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0RWRn
ZUFBOyB9CisgICAgYm9vbCBib3R0b21FZGdlQUEoKSBjb25zdCB7IHJldHVybiBtX2JvdHRvbUVk
Z2VBQTsgfQorCisgICAgYm9vbCBpc0FudGlhbGlhc2VkKCkgY29uc3QgeyByZXR1cm4gbGVmdEVk
Z2VBQSgpIHx8IHRvcEVkZ2VBQSgpIHx8IHJpZ2h0RWRnZUFBKCkgfHwgYm90dG9tRWRnZUFBKCk7
IH0KKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gQ0NEcmF3UXVhZDo6aXNPcGFx
dWUoKSAmJiAhaXNBbnRpYWxpYXNlZCgpOyB9CisKK3ByaXZhdGU6CisgICAgQ0NUaWxlRHJhd1F1
YWQoUGFzc1JlZlB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4sIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0
LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50UG9pbnQmIHRleHR1cmVPZmZz
ZXQsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBHQzNEaW50IHRleHR1cmVGaWx0ZXIsIGJv
b2wgc3dpenpsZUNvbnRlbnRzLCBib29sIGxlZnRFZGdlQUEsIGJvb2wgdG9wRWRnZUFBLCBib29s
IHJpZ2h0RWRnZUFBLCBib29sIGJvdHRvbUVkZ2VBQSk7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IG1fdGV4dHVyZUlkOworICAgIEludFBvaW50IG1fdGV4dHVyZU9mZnNldDsKKyAgICBJbnRTaXpl
IG1fdGV4dHVyZVNpemU7CisgICAgR0MzRGludCBtX3RleHR1cmVGaWx0ZXI7CisgICAgYm9vbCBt
X3N3aXp6bGVDb250ZW50czsKKyAgICBib29sIG1fbGVmdEVkZ2VBQTsKKyAgICBib29sIG1fdG9w
RWRnZUFBOworICAgIGJvb2wgbV9yaWdodEVkZ2VBQTsKKyAgICBib29sIG1fYm90dG9tRWRnZUFB
OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKaW5k
ZXggNDlkMWRmM2ZkOGJlM2M4OTBjMDZmMDVhZTc1ZWU5NTE3ZTc5N2MxMy4uMzRjOWM0MWVmMTZl
ODM5YmJhNWE2OWQ5NjNmNzE2M2RhM2NjNTllNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5jcHAKQEAgLTMwLDcgKzMwLDggQEAKICNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBs
LmgiCiAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJjYy9D
Q0xheWVyUXVhZC5oIgorI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCisjaW5j
bHVkZSAiY2MvQ0NUaWxlRHJhd1F1YWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTUzLDYgKzU0LDcgQEAgcHJpdmF0ZToKIEND
VGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXllckltcGwoaW50IGlkKQogICAgIDogQ0NMYXllcklt
cGwoaWQpCiAgICAgLCBtX3NraXBzRHJhdyh0cnVlKQorICAgICwgbV9jb250ZW50c1N3aXp6bGVk
KGZhbHNlKQogewogfQogCkBAIC05Nyw3ICs5OSw3IEBAIERyYXdhYmxlVGlsZSogQ0NUaWxlZExh
eWVySW1wbDo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCiAgICAgcmV0dXJuIHRpbGUuZ2V0KCk7
CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IENDVGlsZWRMYXllckltcGw6OnRpbGluZ1RyYW5z
Zm9ybSgpIGNvbnN0CitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ1RpbGVkTGF5ZXJJbXBsOjpxdWFk
VHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0g
PSBkcmF3VHJhbnNmb3JtKCk7CiAKQEAgLTExMiw2MyArMTE0LDUyIEBAIFRyYW5zZm9ybWF0aW9u
TWF0cml4IENDVGlsZWRMYXllckltcGw6OnRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0CiAgICAgcmV0
dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVu
ZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3ZvaWQgQ0NUaWxlZExheWVySW1wbDo6YXBw
ZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIFBhc3NSZWZQdHI8Q0NTaGFyZWRRdWFkU3Rh
dGU+IHBycFNoYXJlZFF1YWRTdGF0ZSkKIHsKLSAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3Qg
PSB2aXNpYmxlTGF5ZXJSZWN0KCk7CisgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QgPSB2
aXNpYmxlTGF5ZXJSZWN0KCk7CiAKLSAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fdGlsZXIgfHwg
bV90aWxlci0+aXNFbXB0eSgpIHx8IGxheWVyUmVjdC5pc0VtcHR5KCkgfHwgIWxheWVyUmVuZGVy
ZXIpCisgICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX3RpbGVyIHx8IG1fdGlsZXItPmlzRW1wdHko
KSB8fCBjb250ZW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtID0gdGlsaW5nVHJhbnNmb3JtKCk7Ci0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlTWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgo
bGF5ZXJSZW5kZXJlci0+d2luZG93TWF0cml4KCkgKiBsYXllclJlbmRlcmVyLT5wcm9qZWN0aW9u
TWF0cml4KCkgKiBsYXllclRyYW5zZm9ybSkudG8yZFRyYW5zZm9ybSgpOworICAgIFJlZlB0cjxD
Q1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlKHBycFNoYXJlZFF1YWRTdGF0ZSk7CiAK
LSAgICAvLyBEb24ndCBkcmF3IGFueSB0aWxlcyB3aGVuIGRldmljZSBtYXRyaXggaXMgbm90IGlu
dmVydGlibGUuCi0gICAgaWYgKCFkZXZpY2VNYXRyaXguaXNJbnZlcnRpYmxlKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXIt
PmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tKTsKKyAgICBJbnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsZXItPmNvbnRlbnRSZWN0VG9M
YXllclJlY3QoY29udGVudFJlY3QpOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9t
OyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewor
ICAgICAgICAgICAgRHJhd2FibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAg
ICAgSW50UmVjdCB0aWxlUmVjdCA9IG1fdGlsZXItPnRpbGVCb3VuZHMoaSwgaik7CisgICAgICAg
ICAgICBJbnRSZWN0IGRpc3BsYXlSZWN0ID0gdGlsZVJlY3Q7CisgICAgICAgICAgICB0aWxlUmVj
dC5pbnRlcnNlY3QobGF5ZXJSZWN0KTsKIAotICAgIEZsb2F0UXVhZCBxdWFkID0gZGV2aWNlTWF0
cml4Lm1hcFF1YWQoRmxvYXRRdWFkKGxheWVyUmVjdCkpOwotICAgIENDTGF5ZXJRdWFkIGRldmlj
ZVJlY3QgPSBDQ0xheWVyUXVhZChGbG9hdFF1YWQocXVhZC5ib3VuZGluZ0JveCgpKSk7Ci0gICAg
Q0NMYXllclF1YWQgbGF5ZXJRdWFkID0gQ0NMYXllclF1YWQocXVhZCk7CisgICAgICAgICAgICAv
LyBTa2lwIGVtcHR5IHRpbGVzLgorICAgICAgICAgICAgaWYgKHRpbGVSZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgIC8vIFVzZSBhbnRpLWFsaWFzaW5nIHBy
b2dyYW1zIG9ubHkgd2hlbiBuZWNlc3NhcnkuCi0gICAgYm9vbCB1c2VBQSA9IChtX3RpbGVyLT5o
YXNCb3JkZXJUZXhlbHMoKSAmJiAoIXF1YWQuaXNSZWN0aWxpbmVhcigpIHx8ICFxdWFkLmJvdW5k
aW5nQm94KCkuaXNFeHByZXNzaWJsZUFzSW50UmVjdCgpKSk7CisgICAgICAgICAgICBpZiAoIXRp
bGUgfHwgIXRpbGUtPnRleHR1cmVJZCgpKSB7CisgICAgICAgICAgICAgICAgcXVhZExpc3QuYXBw
ZW5kKENDU29saWRDb2xvckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCB0aWxlUmVj
dCwgYmFja2dyb3VuZENvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KIAotICAgIGlmICh1c2VBQSkgewotICAgICAgICBkZXZpY2VSZWN0LmluZmxhdGVB
bnRpQWxpYXNpbmdEaXN0YW5jZSgpOwotICAgICAgICBsYXllclF1YWQuaW5mbGF0ZUFudGlBbGlh
c2luZ0Rpc3RhbmNlKCk7Ci0gICAgfQorICAgICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiBob3cg
dGhlIHRvcCBsZWZ0IGhhcyBtb3ZlZCwgc28gdGhlIHRleHR1cmUgY2FuIGJlCisgICAgICAgICAg
ICAvLyBvZmZzZXQgdGhlIHNhbWUgYW1vdW50LgorICAgICAgICAgICAgSW50U2l6ZSBkaXNwbGF5
T2Zmc2V0ID0gdGlsZVJlY3QubWluWE1pbllDb3JuZXIoKSAtIGRpc3BsYXlSZWN0Lm1pblhNaW5Z
Q29ybmVyKCk7CisgICAgICAgICAgICBJbnRQb2ludCB0ZXh0dXJlT2Zmc2V0ID0gbV90aWxlci0+
dGV4dHVyZU9mZnNldChpLCBqKSArIGRpc3BsYXlPZmZzZXQ7CisgICAgICAgICAgICBmbG9hdCB0
aWxlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4obV90aWxlci0+dGlsZVNpemUoKS53aWR0aCgp
KTsKKyAgICAgICAgICAgIGZsb2F0IHRpbGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV90
aWxlci0+dGlsZVNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgICAgICBJbnRTaXplIHRleHR1cmVT
aXplKHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7CiAKLSAgICBzd2l0Y2ggKG1fc2FtcGxlZFRleGVs
Rm9ybWF0KSB7Ci0gICAgY2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3Jt
YXRSR0JBOgotICAgICAgICBpZiAodXNlQUEpIHsKLSAgICAgICAgICAgIGNvbnN0IFByb2dyYW1B
QSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbUFBKCk7Ci0gICAgICAgICAg
ICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2
aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0s
IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigp
LCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBQcm9ncmFtT3BhcXVlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+
dGlsZXJQcm9ncmFtT3BhcXVlKCk7Ci0gICAgICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVu
ZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVj
dCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25zdCBQcm9ncmFtKiBwcm9ncmFtID0gbGF5
ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtKCk7Ci0gICAgICAgICAgICAgICAgZHJhd1RpbGVzKGxh
eWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2
aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQToKLSAgICAgICAgaWYgKHVzZUFBKSB7
Ci0gICAgICAgICAgICBjb25zdCBQcm9ncmFtU3dpenpsZUFBKiBwcm9ncmFtID0gbGF5ZXJSZW5k
ZXJlci0+dGlsZXJQcm9ncmFtU3dpenpsZUFBKCk7Ci0gICAgICAgICAgICBkcmF3VGlsZXMobGF5
ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZp
Y2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCBwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkpIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBQcm9ncmFtU3dpenpsZU9wYXF1ZSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJv
Z3JhbVN3aXp6bGVPcGFxdWUoKTsKLSAgICAgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5k
ZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0
LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIC0xLCAtMSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnN0IFByb2dyYW1Td2l6emxlKiBwcm9ncmFt
ID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtU3dpenpsZSgpOwotICAgICAgICAgICAgICAg
IGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZp
Y2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwg
LTEsIC0xKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2wgdXNlQUEgPSBtX3RpbGVy
LT5oYXNCb3JkZXJUZXhlbHMoKSAmJiAhc2hhcmVkUXVhZFN0YXRlLT5pc0xheWVyQXhpc0FsaWdu
ZWRJbnRSZWN0KCk7CisKKyAgICAgICAgICAgIGJvb2wgbGVmdEVkZ2VBQSA9ICFpICYmIHVzZUFB
OworICAgICAgICAgICAgYm9vbCB0b3BFZGdlQUEgPSAhaiAmJiB1c2VBQTsKKyAgICAgICAgICAg
IGJvb2wgcmlnaHRFZGdlQUEgPSBpID09IG1fdGlsZXItPm51bVRpbGVzWCgpIC0gMSAmJiB1c2VB
QTsKKyAgICAgICAgICAgIGJvb2wgYm90dG9tRWRnZUFBID0gaiA9PSBtX3RpbGVyLT5udW1UaWxl
c1koKSAtIDEgJiYgdXNlQUE7CisKKyAgICAgICAgICAgIGNvbnN0IEdDM0RpbnQgdGV4dHVyZUZp
bHRlciA9IG1fdGlsZXItPmhhc0JvcmRlclRleGVscygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOworICAgICAgICAgICAgcXVhZExpc3Qu
YXBwZW5kKENDVGlsZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCB0aWxlUmVjdCwg
dGlsZS0+dGV4dHVyZUlkKCksIHRleHR1cmVPZmZzZXQsIHRleHR1cmVTaXplLCB0ZXh0dXJlRmls
dGVyLCBjb250ZW50c1N3aXp6bGVkKCksIGxlZnRFZGdlQUEsIHRvcEVkZ2VBQSwgcmlnaHRFZGdl
QUEsIGJvdHRvbUVkZ2VBQSkpOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIH0KIApAQCAtMTg5LDE5
MCArMTgwLDYgQEAgdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpzeW5jVGV4dHVyZUlkKGludCBpLCBp
bnQgaiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpCiAgICAgdGlsZS0+c2V0VGV4dHVyZUlk
KHRleHR1cmVJZCk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBDQ1RpbGVkTGF5ZXJJ
bXBsOjpkcmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2Jh
bFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSwg
Y29uc3QgQ0NMYXllclF1YWQmIGRldmljZVJlY3QsIGNvbnN0IENDTGF5ZXJRdWFkJiBjb250ZW50
UXVhZCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgaW50IGZyYWdtZW50VGV4VHJh
bnNmb3JtTG9jYXRpb24sIGludCBlZGdlTG9jYXRpb24pCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJM
b2NhdGlvbigpLCAwKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBxdWFkVHJhbnNmb3JtID0gZGV2aWNlVHJhbnNmb3JtLmludmVyc2UoKTsKLQotICAgIGlmIChl
ZGdlTG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAgZmxvYXQgZWRnZVsyNF07Ci0gICAgICAgIGNv
bnRlbnRRdWFkLnRvRmxvYXRBcnJheShlZGdlKTsKLSAgICAgICAgZGV2aWNlUmVjdC50b0Zsb2F0
QXJyYXkoJmVkZ2VbMTJdKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0z
ZnYoZWRnZUxvY2F0aW9uLCBlZGdlLCA4KSk7Ci0gICAgfQotCi0gICAgQ0NMYXllclF1YWQ6OkVk
Z2UgcHJldkVkZ2VZID0gY29udGVudFF1YWQudG9wKCk7Ci0KLSAgICBpbnQgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tOwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250
ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICBJbnRSZWN0IGxheWVyUmVj
dCA9IG1fdGlsZXItPmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwotICAgIGZs
b2F0IHNpZ24gPSBGbG9hdFF1YWQoY29udGVudFJlY3QpLmlzQ291bnRlcmNsb2Nrd2lzZSgpID8g
LTEgOiAxOwotICAgIGNvbnN0IEdDM0RpbnQgZmlsdGVyID0gbV90aWxlci0+aGFzQm9yZGVyVGV4
ZWxzKCkgPyBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSIDogR3JhcGhpY3NDb250ZXh0M0Q6Ok5F
QVJFU1Q7Ci0gICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewotICAgICAg
ICBDQ0xheWVyUXVhZDo6RWRnZSBwcmV2RWRnZVggPSBjb250ZW50UXVhZC5sZWZ0KCk7Ci0KLSAg
ICAgICAgQ0NMYXllclF1YWQ6OkVkZ2UgZWRnZVkgPSBjb250ZW50UXVhZC5ib3R0b20oKTsKLSAg
ICAgICAgaWYgKGogPCAobV90aWxlci0+bnVtVGlsZXNZKCkgLSAxKSkgewotICAgICAgICAgICAg
SW50UmVjdCB0aWxlUmVjdCA9IHVuaW9uUmVjdChtX3RpbGVyLT50aWxlQm91bmRzKDAsIGopLCBt
X3RpbGVyLT50aWxlQm91bmRzKG1fdGlsZXItPm51bVRpbGVzWCgpIC0gMSwgaikpOwotICAgICAg
ICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KGxheWVyUmVjdCk7Ci0KLSAgICAgICAgICAgIC8vIFNr
aXAgZW1wdHkgcm93cy4KLSAgICAgICAgICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHRpbGVSZWN0ID0gbV90aWxlci0+
bGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxlUmVjdCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9p
bnQgcDEodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOwotICAgICAgICAgICAgRmxv
YXRQb2ludCBwMih0aWxlUmVjdC54KCksIHRpbGVSZWN0Lm1heFkoKSk7Ci0KLSAgICAgICAgICAg
IC8vIE1hcCBwb2ludHMgdG8gZGV2aWNlIHNwYWNlLgotICAgICAgICAgICAgcDEgPSBkZXZpY2VU
cmFuc2Zvcm0ubWFwUG9pbnQocDEpOwotICAgICAgICAgICAgcDIgPSBkZXZpY2VUcmFuc2Zvcm0u
bWFwUG9pbnQocDIpOwotCi0gICAgICAgICAgICAvLyBDb21wdXRlIGhvcml6b250YWwgZWRnZS4K
LSAgICAgICAgICAgIGVkZ2VZID0gQ0NMYXllclF1YWQ6OkVkZ2UocDEsIHAyKTsKLSAgICAgICAg
ICAgIGVkZ2VZLnNjYWxlKHNpZ24pOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9
IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewotICAgICAgICAgICAgRHJhd2FibGVUaWxlKiB0aWxl
ID0gdGlsZUF0KGksIGopOwotCi0gICAgICAgICAgICAvLyBEb24ndCB1c2UgdGlsZUNvbnRlbnRS
ZWN0IGhlcmUsIGFzIHRoYXQgY29udGFpbnMgdGhlIGZ1bGwKLSAgICAgICAgICAgIC8vIHJlY3Qg
d2l0aCBib3JkZXIgdGV4ZWxzIHdoaWNoIHNob3VsZG4ndCBiZSBkcmF3bi4KLSAgICAgICAgICAg
IEludFJlY3QgdGlsZVJlY3QgPSBtX3RpbGVyLT50aWxlQm91bmRzKGksIGopOwotICAgICAgICAg
ICAgSW50UmVjdCBkaXNwbGF5UmVjdCA9IHRpbGVSZWN0OwotICAgICAgICAgICAgdGlsZVJlY3Qu
aW50ZXJzZWN0KGxheWVyUmVjdCk7Ci0KLSAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgaG93
IHRoZSB0b3AgbGVmdCBoYXMgbW92ZWQsIHNvIHRoZSB0ZXh0dXJlIGNhbiBiZQotICAgICAgICAg
ICAgLy8gb2Zmc2V0IHRoZSBzYW1lIGFtb3VudC4KLSAgICAgICAgICAgIEludFNpemUgZGlzcGxh
eU9mZnNldCA9IHRpbGVSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBkaXNwbGF5UmVjdC5taW5YTWlu
WUNvcm5lcigpOwotCi0gICAgICAgICAgICAvLyBTa2lwIGVtcHR5IHRpbGVzLgotICAgICAgICAg
ICAgaWYgKHRpbGVSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAgICAgdGlsZVJlY3QgPSBtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KHRp
bGVSZWN0KTsKLQotICAgICAgICAgICAgRmxvYXRSZWN0IGNsYW1wUmVjdCh0aWxlUmVjdCk7Ci0g
ICAgICAgICAgICAvLyBDbGFtcCB0ZXh0dXJlIGNvb3JkaW5hdGVzIHRvIGF2b2lkIHNhbXBsaW5n
IG91dHNpZGUgdGhlIGxheWVyCi0gICAgICAgICAgICAvLyBieSBkZWZsYXRpbmcgdGhlIHRpbGUg
cmVnaW9uIGhhbGYgYSB0ZXhlbCBvciBoYWxmIGEgdGV4ZWwKLSAgICAgICAgICAgIC8vIG1pbnVz
IGVwc2lsb24gZm9yIG9uZSBwaXhlbCBsYXllcnMuIFRoZSByZXN1bHRpbmcgY2xhbXAgcmVnaW9u
Ci0gICAgICAgICAgICAvLyBpcyBtYXBwZWQgdG8gdGhlIHVuaXQgc3F1YXJlIGJ5IHRoZSB2ZXJ0
ZXggc2hhZGVyIGFuZCBtYXBwZWQKLSAgICAgICAgICAgIC8vIGJhY2sgdG8gbm9ybWFsaXplZCB0
ZXh0dXJlIGNvb3JkaW5hdGVzIGJ5IHRoZSBmcmFnbWVudCBzaGFkZXIKLSAgICAgICAgICAgIC8v
IGFmdGVyIGJlaW5nIGNsYW1wZWQgdG8gMC0xIHJhbmdlLgotICAgICAgICAgICAgY29uc3QgZmxv
YXQgZXBzaWxvbiA9IDEgLyAxMDI0LjBmOwotICAgICAgICAgICAgZmxvYXQgY2xhbXBYID0gbWlu
KDAuNSwgY2xhbXBSZWN0LndpZHRoKCkgLyAyLjAgLSBlcHNpbG9uKTsKLSAgICAgICAgICAgIGZs
b2F0IGNsYW1wWSA9IG1pbigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAvIDIuMCAtIGVwc2lsb24p
OwotICAgICAgICAgICAgY2xhbXBSZWN0LmluZmxhdGVYKC1jbGFtcFgpOwotICAgICAgICAgICAg
Y2xhbXBSZWN0LmluZmxhdGVZKC1jbGFtcFkpOwotICAgICAgICAgICAgRmxvYXRTaXplIGNsYW1w
T2Zmc2V0ID0gY2xhbXBSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBGbG9hdFJlY3QodGlsZVJlY3Qp
Lm1pblhNaW5ZQ29ybmVyKCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdGV4T2Zmc2V0ID0g
bV90aWxlci0+dGV4dHVyZU9mZnNldChpLCBqKSArIGNsYW1wT2Zmc2V0ICsgRmxvYXRTaXplKGRp
c3BsYXlPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgdGlsZVdpZHRoID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fdGlsZXItPnRpbGVTaXplKCkud2lkdGgoKSk7Ci0gICAgICAgICAgICBmbG9hdCB0
aWxlSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZXItPnRpbGVTaXplKCkuaGVpZ2h0
KCkpOwotCi0gICAgICAgICAgICAvLyBNYXAgY2xhbXBpbmcgcmVjdGFuZ2xlIHRvIHVuaXQgc3F1
YXJlLgotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWCA9IC1jbGFtcFJlY3Qu
eCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7Ci0gICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhUcmFu
c2xhdGVZID0gLWNsYW1wUmVjdC55KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgICAg
ICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVggPSB0aWxlUmVjdC53aWR0aCgpIC8gY2xhbXBSZWN0Lndp
ZHRoKCk7Ci0gICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVkgPSB0aWxlUmVjdC5oZWln
aHQoKSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsKLQotICAgICAgICAgICAgLy8gTWFwIHRvIG5vcm1h
bGl6ZWQgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4
VHJhbnNsYXRlWCA9IHRleE9mZnNldC54KCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgICAgICBmbG9h
dCBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSB0ZXhPZmZzZXQueSgpIC8gdGlsZUhlaWdodDsKLSAg
ICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4U2NhbGVYID0gY2xhbXBSZWN0LndpZHRoKCkgLyB0
aWxlV2lkdGg7Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWSA9IGNsYW1wUmVj
dC5oZWlnaHQoKSAvIHRpbGVIZWlnaHQ7Ci0KLSAgICAgICAgICAgIC8vIE9wZW5HTCBjb29yZGlu
YXRlIHN5c3RlbSBpcyBib3R0b20tdXAuCi0gICAgICAgICAgICAvLyBJZiB0aWxlIHRleHR1cmUg
aXMgdG9wLWRvd24sIHdlIG5lZWQgdG8gZmxpcCB0aGUgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAg
ICAgICAgICAgIGlmIChtX3RleHR1cmVPcmllbnRhdGlvbiA9PSBMYXllclRleHR1cmVVcGRhdGVy
OjpUb3BEb3duT3JpZW50YXRpb24pIHsKLSAgICAgICAgICAgICAgICBmcmFnbWVudFRleFRyYW5z
bGF0ZVkgPSAxLjAgLSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7Ci0gICAgICAgICAgICAgICAgZnJh
Z21lbnRUZXhTY2FsZVkgKj0gLTEuMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ0NM
YXllclF1YWQ6OkVkZ2UgZWRnZVggPSBjb250ZW50UXVhZC5yaWdodCgpOwotICAgICAgICAgICAg
aWYgKGkgPCAobV90aWxlci0+bnVtVGlsZXNYKCkgLSAxKSkgewotICAgICAgICAgICAgICAgIEZs
b2F0UG9pbnQgcDEodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkpOwotICAgICAgICAgICAg
ICAgIEZsb2F0UG9pbnQgcDIodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOwotCi0g
ICAgICAgICAgICAgICAgLy8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCi0gICAgICAgICAg
ICAgICAgcDEgPSBkZXZpY2VUcmFuc2Zvcm0ubWFwUG9pbnQocDEpOwotICAgICAgICAgICAgICAg
IHAyID0gZGV2aWNlVHJhbnNmb3JtLm1hcFBvaW50KHAyKTsKLQotICAgICAgICAgICAgICAgIC8v
IENvbXB1dGUgdmVydGljYWwgZWRnZS4KLSAgICAgICAgICAgICAgICBlZGdlWCA9IENDTGF5ZXJR
dWFkOjpFZGdlKHAxLCBwMik7Ci0gICAgICAgICAgICAgICAgZWRnZVguc2NhbGUoc2lnbik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3BhY2UgcXVhZC4K
LSAgICAgICAgICAgIENDTGF5ZXJRdWFkIGRldmljZVF1YWQocHJldkVkZ2VYLCBwcmV2RWRnZVks
IGVkZ2VYLCBlZGdlWSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBxdWFkIHRvIGxheWVyIHNwYWNl
LgotICAgICAgICAgICAgRmxvYXRRdWFkIHF1YWQgPSBxdWFkVHJhbnNmb3JtLm1hcFF1YWQoZGV2
aWNlUXVhZC5mbG9hdFF1YWQoKSk7Ci0KLSAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxl
UmVjdC4KLSAgICAgICAgICAgIHF1YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCksIDEu
MGYgLyB0aWxlUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIGlmIChmcmFnbWVudFRleFRy
YW5zZm9ybUxvY2F0aW9uID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVu
dCBzaGFkZXIgdHJhbnNmb3JtIHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbwotICAgICAgICAg
ICAgICAgIC8vIHRoaXMgd2hpbGUgc3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVzdWx0cyBhcwot
ICAgICAgICAgICAgICAgIC8vIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gc2hvdWxkIGFs
d2F5cyBiZSBub24tbmVnYXRpdmUKLSAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0
cmFuc2Zvcm1lZCBpbiBhIHdheSB0aGF0IGNvdWxkIHJlc3VsdCBpbgotICAgICAgICAgICAgICAg
IC8vIHNhbXBsaW5nIG91dHNpZGUgdGhlIGxheWVyLgotICAgICAgICAgICAgICAgIHZlcnRleFRl
eFNjYWxlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhT
Y2FsZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJh
bnNsYXRlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhU
cmFuc2xhdGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOwotICAgICAgICAgICAgICAgIHZlcnRleFRl
eFRyYW5zbGF0ZVggKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOwotICAgICAgICAgICAgICAgIHZl
cnRleFRleFRyYW5zbGF0ZVkgKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihm
cmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdt
ZW50VGV4VHJhbnNsYXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7
Ci0KLSAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4VGV4VHJh
bnNsYXRlWCwgdmVydGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhT
Y2FsZVkpKTsKLQotICAgICAgICAgICAgaWYgKHRpbGUgJiYgdGlsZS0+dGV4dHVyZUlkKCkpIHsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgdGlsZS0+dGV4dHVyZUlkKCkpOwotICAgICAgICAgICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKLSAgICAg
ICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRF
UiwgZmlsdGVyKSk7Ci0KLSAgICAgICAgICAgICAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVy
ZWRRdWFkKGdsb2JhbFRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCBvcGFj
aXR5LCBxdWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hh
ZGVyKCkuYWxwaGFMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigpKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdGlsZVRyYW5zZm9ybSA9IGdsb2JhbFRyYW5zZm9ybTsKLSAgICAgICAgICAgICAgICB0aWxl
VHJhbnNmb3JtLnRyYW5zbGF0ZSh0aWxlUmVjdC54KCkgKyB0aWxlUmVjdC53aWR0aCgpIC8gMi4w
LCB0aWxlUmVjdC55KCkgKyB0aWxlUmVjdC5oZWlnaHQoKSAvIDIuMCk7Ci0KLSAgICAgICAgICAg
ICAgICBjb25zdCBMYXllckNocm9taXVtOjpCb3JkZXJQcm9ncmFtKiBzb2xpZENvbG9yUHJvZ3Jh
bSA9IGxheWVyUmVuZGVyZXItPmJvcmRlclByb2dyYW0oKTsKLSAgICAgICAgICAgICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShzb2xpZENvbG9yUHJvZ3JhbS0+cHJvZ3JhbSgp
KSk7Ci0KLSAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHNv
bGlkQ29sb3JQcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNvbG9yTG9jYXRpb24oKSwgYmFja2dy
b3VuZENvbG9yKCkucmVkKCksIGJhY2tncm91bmRDb2xvcigpLmdyZWVuKCksIGJhY2tncm91bmRD
b2xvcigpLmJsdWUoKSwgYmFja2dyb3VuZENvbG9yKCkuYWxwaGEoKSkpOwotCi0gICAgICAgICAg
ICAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZCh0aWxlVHJhbnNmb3JtLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lk
dGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIG9wYWNpdHksIHF1YWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2xpZENvbG9yUHJvZ3JhbS0+dmVydGV4
U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0xLCAtMSk7Ci0KLSAgICAgICAgICAgICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcHJldkVkZ2VYID0gZWRnZVg7Ci0gICAgICAgICAgICAvLyBSZXZl
cnNlIGRpcmVjdGlvbi4KLSAgICAgICAgICAgIHByZXZFZGdlWC5zY2FsZSgtMSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBwcmV2RWRnZVkgPSBlZGdlWTsKLSAgICAgICAgLy8gUmV2ZXJzZSBkaXJl
Y3Rpb24uCi0gICAgICAgIHByZXZFZGdlWS5zY2FsZSgtMSk7Ci0gICAgfQotfQotCiB9CiAKICNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5
ZXJJbXBsLmgKaW5kZXggMTAwM2RiY2I1NjY2ODhjNTJjZDQyMWFiMDFmZDFiNjJmMTNhNzcwYS4u
NTExOGJjYWRmOGJjYmNiY2U4YTI5MmNlYWNiMmM1MGM2ZDg4MDA2OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGlsZWRMYXllckltcGwuaApAQCAtNDMsMTcgKzQzLDIwIEBAIHB1YmxpYzoKICAgICB9CiAgICAg
dmlydHVhbCB+Q0NUaWxlZExheWVySW1wbCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5
ZXJSZW5kZXJlckNocm9taXVtKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKENDUXVh
ZExpc3QmLCBQYXNzUmVmUHRyPENDU2hhcmVkUXVhZFN0YXRlPik7CisKICAgICB2aXJ0dWFsIHZv
aWQgYmluZENvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBj
b25zdDsKIAogICAgIHZvaWQgc2V0U2tpcHNEcmF3KGJvb2wgc2tpcHNEcmF3KSB7IG1fc2tpcHNE
cmF3ID0gc2tpcHNEcmF3OyB9CiAgICAgdm9pZCBzZXRUZXh0dXJlT3JpZW50YXRpb24oTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6T3JpZW50YXRpb24gdGV4dHVyZU9yaWVudGF0aW9uKSB7IG1fdGV4dHVy
ZU9yaWVudGF0aW9uID0gdGV4dHVyZU9yaWVudGF0aW9uOyB9Ci0gICAgdm9pZCBzZXRTYW1wbGVk
VGV4ZWxGb3JtYXQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IHNhbXBs
ZWRUZXhlbEZvcm1hdCkgeyBtX3NhbXBsZWRUZXhlbEZvcm1hdCA9IHNhbXBsZWRUZXhlbEZvcm1h
dDsgfQogICAgIHZvaWQgc2V0VGlsaW5nRGF0YShjb25zdCBDQ0xheWVyVGlsaW5nRGF0YSYgdGls
ZXIpOwogICAgIHZvaWQgc3luY1RleHR1cmVJZChpbnQsIGludCwgUGxhdGZvcm0zRE9iamVjdCB0
ZXh0dXJlSWQpOwogCisgICAgdm9pZCBzZXRDb250ZW50c1N3aXp6bGVkKGJvb2wgY29udGVudHNT
d2l6emxlZCkgeyBtX2NvbnRlbnRzU3dpenpsZWQgPSBjb250ZW50c1N3aXp6bGVkOyB9CisgICAg
Ym9vbCBjb250ZW50c1N3aXp6bGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1N3aXp6bGVk
OyB9CisKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdt
ZW50U2hhZGVyUkdCQVRleEFscGhhPiBQcm9ncmFtOwogICAgIC8vIFNoYWRlciBwcm9ncmFtIHRo
YXQgc3dhcHMgcmVkIGFuZCBibHVlIGNvbXBvbmVudHMgb2YgdGV4dHVyZS4KICAgICAvLyBVc2Vk
IHdoZW4gdGV4dHVyZSBmb3JtYXQgZG9lcyBub3QgbWF0Y2ggbmF0aXZlIGNvbG9yIGZvcm1hdC4K
QEAgLTcyLDI1ICs3NSwxOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gRXhwb3NlZCBmb3IgdGVzdGlu
Zy4KICAgICBib29sIGhhc1RpbGVBdChpbnQsIGludCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHF1YWRUcmFuc2Zvcm0oKSBjb25zdDsKKwogcHJpdmF0ZToKIAog
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVy
biAiQ29udGVudExheWVyIjsgfQogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsaW5nVHJh
bnNmb3JtKCkgY29uc3Q7Ci0KLSAgICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3
aXRoIHRoZSBjb250ZW50IHJlY3QuCi0gICAgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1
bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGZsb2F0IG9wYWNpdHkpOwotCiAgICAgRHJhd2FibGVUaWxlKiB0aWxlQXQoaW50LCBpbnQp
IGNvbnN0OwogICAgIERyYXdhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7CiAKLSAgICAv
LyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgotICAgIHRl
bXBsYXRlIDxjbGFzcyBUPgotICAgIHZvaWQgZHJhd1RpbGVzKExheWVyUmVuZGVyZXJDaHJvbWl1
bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgZ2xvYmFsVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJh
bnNmb3JtLCBjb25zdCBDQ0xheWVyUXVhZCYgZGV2aWNlUmVjdCwgY29uc3QgQ0NMYXllclF1YWQm
IGNvbnRlbnRRdWFkLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBpbnQgZnJhZ21l
bnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgaW50IGVkZ2VMb2NhdGlvbik7Ci0KICAgICBib29sIG1f
c2tpcHNEcmF3OworICAgIGJvb2wgbV9jb250ZW50c1N3aXp6bGVkOwogICAgIExheWVyVGV4dHVy
ZVVwZGF0ZXI6Ok9yaWVudGF0aW9uIG1fdGV4dHVyZU9yaWVudGF0aW9uOwotICAgIExheWVyVGV4
dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsKIAog
ICAgIE93blB0cjxDQ0xheWVyVGlsaW5nRGF0YT4gbV90aWxlcjsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118477</attachid>
            <date>2011-12-08 15:11:58 -0800</date>
            <delta_ts>2011-12-09 13:34:39 -0800</delta_ts>
            <desc>Remove RefPtr, rebase, etc</desc>
            <filename>bug-73059-20111208151157.patch</filename>
            <type>text/plain</type>
            <size>122441</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQxYTExODY2YzgwYjRi
NGY1MTdlYTJjNGEzMjA5NmJlYjA5M2I4MC4uNDE4MmZjOGZlOTQ4MjcyZGYzMjhmYTcyYWVhNjYz
MzBlY2M1Y2U3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MyBAQAorMjAxMS0xMi0wNyAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVm
YWN0b3IgdGlsZSBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDU5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFydGlhbGx5IHRlc3RlZCBieSBjb21w
b3NpdG9yIGxheW91dCB0ZXN0cy4gRGVidWcgYm9yZGVycyBhbmQKKyAgICAgICAgY2hlY2tlcmJv
YXJkaW5nIHRlc3RlZCBtYW51YWxseS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXJ0
IG9mIGEgbW92ZSB0b3dhcmRzIHJlbmRlcmluZyBxdWFkcyBvbiBzY3JlZW4KKyAgICAgICAgZnJv
bSBhIGJhZyBvZiBkYXRhIHJhdGhlciB0aGFuIGluIHZpcnR1YWwgQ0NMYXllckltcGw6OmRyYXcg
ZnVuY3Rpb25zLgorCisgICAgICAgIENDRHJhd1F1YWQtZGVyaXZlZCBjbGFzc2VzIHN0b3JlIG1h
dGVyaWFsLXNwZWNpZmljIHBpZWNlcyBvZiBkYXRhIHRvCisgICAgICAgIHVzZSB3aGVuIHJlbmRl
cmluZy4gQ0NMYXllckltcGwgY2xhc3NlcyBub3cgY3JlYXRlIHRoZXNlIENDRHJhd1F1YWQKKyAg
ICAgICAgb2JqZWN0cyByYXRoZXIgdGhhbiBpc3N1aW5nIGRpcmVjdCBHTCBjb21tYW5kcy4gV2hl
cmUgdGhpcyBkYXRhIGlzCisgICAgICAgIHNoYXJlZCBiZXR3ZWVuIHF1YWRzIHRoYXQgY29tZSBm
cm9tIHRoZSBzYW1lIGxheWVyLCB0aGF0IGRhdGEgaXMKKyAgICAgICAgc3RvcmVkIGluIGEgQ0NT
aGFyZWRRdWFkU3RhdGUgb2JqZWN0IHJhdGhlciB0aGFuIGR1cGxpY2F0ZWQuCisKKyAgICAgICAg
Q0NSZW5kZXJQYXNzIGlzIHRoZSBjbGFzcyB0aGF0IGhvbGRzIHRoZSBsaXN0IG9mIHF1YWRzIGFu
ZCB0aGUgdGFyZ2V0CisgICAgICAgIHN1cmZhY2UgdGhhdCB0aGV5IGRyYXcgaW50by4gRHJhd2lu
ZyBhIGZyYW1lIGNvbnNpc3RzIG9mIGRyYXdpbmcgYQorICAgICAgICBzZXJpZXMgb2YgcmVuZGVy
IHBhc3NlcyBvbnRvIHRoZWlyIHJlc3BlY3RpdmUgc3VyZmFjZXMuCisKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0SW1wbCBjb25zdHJ1Y3RzIHRoZXNlIHJlbmRlciBwYXNzZXMgZnJvbSB0aGUgb3V0
cHV0IG9mCisgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSBieSBh
c2tpbmcgZWFjaCBsYXllciB0byBpbnNlcnQKKyAgICAgICAgcXVhZHMgaW50byBhIGxpc3QgYW5k
IGhhbmRzIHRoZW0gb2ZmIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bSBmb3IKKyAgICAgICAgcmVu
ZGVyaW5nLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclN1cmZhY2VRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29s
b3JRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnRpbGVVbmlmb3JtTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZFRpbGVQcm9ncmFtVW5pZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Q3VzdG9tTGF5ZXJRdWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRU
aWxlQmluZGluZ0Jhc2U6OmFscGhhTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21l
bnRUaWxlQmluZGluZ0Jhc2U6OmVkZ2VMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFn
bWVudFRpbGVCaW5kaW5nQmFzZTo6ZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFnbWVudFRpbGVCaW5kaW5nQmFzZTo6c2FtcGxlckxvY2F0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGll
c1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxh
eWVyRHJhd1F1YWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDQ3VzdG9tTGF5ZXJE
cmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQ3VzdG9tTGF5ZXJEcmF3UXVh
ZDo6Q0NDdXN0b21MYXllckRyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0N1c3RvbUxheWVyRHJhd1F1YWQ6OmxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6Q0NEZWJ1Z0JvcmRlckRyYXdRdWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJh
d1F1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6
OmNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6d2lkdGgp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJR
dWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjpDQ0RyYXdRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6OnRvRGVidWdCb3JkZXJEcmF3UXVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b1NvbGlkQ29sb3JEcmF3UXVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b1RpbGVEcmF3UXVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b0N1c3RvbUxheWVyRHJhd1F1YWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJRdWFkLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RyYXdRdWFkOjpxdWFkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdR
dWFkOjpsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjpsYXll
clJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6Y2xpcFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Ry
YXdRdWFkOjppc09wYXF1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NEcmF3UXVhZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6
Q0NEcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b0RlYnVnQm9yZGVy
RHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9SZW5kZXJTdXJmYWNl
RHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9Tb2xpZENvbG9yRHJh
d1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9UaWxlRHJhd1F1YWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9DdXN0b21MYXllckRyYXdRdWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6cXVhZFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NEcmF3UXVhZDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Ry
YXdRdWFkOjpsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjps
YXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6Y2xpcFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0RyYXdRdWFkOjppc09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjppc0xh
eWVyQXhpc0FsaWduZWRJbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6Om1h
dGVyaWFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2hhcmVkUXVhZFN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6YXBwZW5kRGVidWdCb3JkZXJRdWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2NyZWVuU3BhY2VUcmFuc2Zvcm1Gb3JTdXJmYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRl
clBhc3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5
ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OkNDUmVuZGVyUGFzcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpxdWFkTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OnRhcmdldFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJQYXNzOjpzZXRTdXJmYWNlRGFtYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlclBhc3M6OnN1cmZhY2VEYW1hZ2VSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZURyYXdRdWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6OmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZURy
YXdRdWFkOjpzdXJmYWNlRGFtYWdlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFy
ZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2hh
cmVkUXVhZFN0YXRlOjppc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpxdWFkVHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpsYXllclRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6bGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpjbGlwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1No
YXJlZFF1YWRTdGF0ZTo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRT
dGF0ZTo6aXNPcGFxdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU29saWRDb2xvckRyYXdRdWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1Nv
bGlkQ29sb3JEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU29saWRDb2xv
ckRyYXdRdWFkOjpDQ1NvbGlkQ29sb3JEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6Y29sb3IpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGlsZURyYXdRdWFkOjpDQ1RpbGVEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ1RpbGVEcmF3UXVhZDo6dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGls
ZURyYXdRdWFkOjp0ZXh0dXJlT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdR
dWFkOjp0ZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6dGV4
dHVyZUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6c3dpenpsZUNv
bnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdRdWFkOjpsZWZ0RWRnZUFBKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdRdWFkOjp0b3BFZGdlQUEpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaWxlRHJhd1F1YWQ6OnJpZ2h0RWRnZUFBKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGlsZURyYXdRdWFkOjpib3R0b21FZGdlQUEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxl
RHJhd1F1YWQ6OmlzQW50aWFsaWFzZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlRHJhd1F1
YWQ6OmlzT3BhcXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6
OkNDVGlsZWRMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6
cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjphcHBl
bmRRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxl
ZExheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6c2V0Q29u
dGVudHNTd2l6emxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpjb250
ZW50c1N3aXp6bGVkKToKKwogMjAxMS0xMi0wOCAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNv
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVc2UgU2tpYSdzIGltcGxlbWVudGF0aW9uIG9mIEdh
dXNzaWFuIGJsdXIgd2hlbiBhY2NlbGVyYXRlZCBmaWx0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
YjI5YzQ2ZTgxOWI0OWY4OWI2NDUzZjJhOTAyODJjZDgxM2QzYmUyNC4uZmY5YTIxZGMxNGM3NDYx
MzcyYWZhOWE5OGRmYzk4NjVmOTFiMTkzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzU5MSwxMCAr
MzU5MSwxNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ3VzdG9tTGF5ZXJEcmF3
UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Rh
bWFnZVRyYWNrZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVsYXlCYXNlZFRpbWVT
b3VyY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RlbGF5QmFzZWRUaW1lU291cmNlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBE
aXNwbGF5LmNwcCcsCkBAIC0zNjIwLDE3ICszNjI2LDI3IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFj
ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXIuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0
ZU1hY2hpbmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRocmVhZFByb3h5LmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVU
aHJlYWRQcm94eS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVy
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0
dXJlVXBkYXRlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbGVEcmF3UXVhZC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNzk2ZTM4MTdiMDcxYWIzZTM0ZTI3OTQ4NGM1MTFk
ZDkzZmEyMTgzMS4uYzM5MGM4ZGY1ZDZiNmE3ZjgwYTVmOWFhYzI1MzQwZTAyNDQwOWUwYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01Myw3ICs1MywxMyBAQAog
I2luY2x1ZGUgIlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlRyZWVTeW5j
aHJvbml6ZXIuaCIKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJj
Yy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIu
aCIKKyNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9D
Q1JlbmRlclBhc3MuaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgor
I2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NUaWxl
RHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKQEAgLTEwOCwy
MSArMTE0LDYgQEAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlbk1hdHJpeChpbnQg
eCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICByZXR1cm4gc2NyZWVuOwogfQog
Ci1zdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tcHV0ZVNjcmVlblNwYWNlVHJhbnNmb3Jt
Rm9yU3VyZmFjZShDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyKQotewotICAgIC8vIFRo
ZSBsYXllcidzIHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0gY2FuIGJlIHdyaXR0ZW4gYXM6Ci0gICAg
Ly8gICBsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtID0gc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNm
b3JtICogbGF5ZXJPcmlnaW5UcmFuc2Zvcm0KLSAgICAvLyBTbywgdG8gY29tcHV0ZSB0aGUgc3Vy
ZmFjZSBzY3JlZW4gc3BhY2UsIHdlIGNhbiBkbzoKLSAgICAvLyAgIHN1cmZhY2VTY3JlZW5TcGFj
ZVRyYW5zZm9ybSA9IGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gKiBpbnZlcnNlKGxheWVyT3Jp
Z2luVHJhbnNmb3JtKQotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFu
c2Zvcm0gPSByZW5kZXJTdXJmYWNlTGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKLSAgICBsYXllck9y
aWdpblRyYW5zZm9ybS50cmFuc2xhdGUoLTAuNSAqIHJlbmRlclN1cmZhY2VMYXllci0+Ym91bmRz
KCkud2lkdGgoKSwgLTAuNSAqIHJlbmRlclN1cmZhY2VMYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkp
OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9
IHJlbmRlclN1cmZhY2VMYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKTsKLSAgICBzdXJmYWNl
U2NyZWVuU3BhY2VUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaW52ZXJz
ZSgpKTsKLQotICAgIHJldHVybiBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm07Ci19Ci0KICNp
ZiBVU0UoU0tJQSkKIGJvb2wgY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGluZyhHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKQEAgLTMyMCw1MiArMzExLDcgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hhbmdlZCgpCiAgICAgbV9jdXJyZW50UmVuZGVy
U3VyZmFjZSA9IDA7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJz
KCkKLXsKLSAgICAvLyBGSVhNRTogdXNlIHRoZSBmcmFtZSBiZWdpbiB0aW1lIGZyb20gdGhlIG92
ZXJhbGwgY29tcG9zaXRvciBzY2hlZHVsZXIuCi0gICAgLy8gVGhpcyB2YWx1ZSBpcyBjdXJyZW50
bHkgaW5hY2Nlc3NpYmxlIGJlY2F1c2UgaXQgaXMgdXAgaW4gQ2hyb21pdW0ncwotICAgIC8vIFJl
bmRlcldpZGdldC4KLSAgICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVnaW4oY3VycmVudFRp
bWUoKSk7Ci0KLSAgICBpZiAoIXJvb3RMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBz
aXplX3QgY29udGVudHNNZW1vcnlVc2VCeXRlcyA9IG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9y
LT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKTsKLSAgICBzaXplX3QgbWF4TGltaXQgPSBUZXh0dXJl
TWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpOwotICAgIHNpemVfdCByZWNs
YWltTGltaXQgPSBUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXpl
KCkpOwotCi0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxp
bWl0Qnl0ZXMobWF4TGltaXQgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKLQotICAgIGRyYXdM
YXllcnNJbnRlcm5hbCgpOwotCi0gICAgaWYgKHJlY2xhaW1MaW1pdCA+IGNvbnRlbnRzTWVtb3J5
VXNlQnl0ZXMpCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRQcmVm
ZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xhaW1MaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0
ZXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNl
dFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoMCk7Ci0KLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0
dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fcmVuZGVyU3VyZmFjZVRleHR1cmVB
bGxvY2F0b3IuZ2V0KCkpOwotCi0gICAgaWYgKHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVu
KQotICAgICAgICBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwotfQotCi12b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1w
bCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpCi17Ci0gICAgLy8gRm9yIG5vdywgd2UgdXNlIGRhbWFnZSB0cmFja2luZyB0byBjb21wdXRl
IGEgZ2xvYmFsIHNjaXNzb3IuIFRvIGRvIHRoaXMsIHdlIG11c3QKLSAgICAvLyBjb21wdXRlIGFs
bCBkYW1hZ2UgdHJhY2tpbmcgYmVmb3JlIGRyYXdpbmcgYW55dGhpbmcsIHNvIHRoYXQgd2Uga25v
dyB0aGUgcm9vdAotICAgIC8vIGRhbWFnZSByZWN0LiBUaGUgcm9vdCBkYW1hZ2UgcmVjdCBpcyB0
aGVuIHVzZWQgdG8gc2Npc3NvciBlYWNoIHN1cmZhY2UuCi0KLSAgICBBU1NFUlQobV9jYXBhYmls
aXRpZXMudXNpbmdQYXJ0aWFsU3dhcCk7Ci0KLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1z
dXJmYWNlSW5kZXgpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9
IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKLSAgICAgICAgQ0NS
ZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJT
dXJmYWNlKCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKLSAgICAgICAgcmVuZGVy
U3VyZmFjZS0+ZGFtYWdlVHJhY2tlcigpLT51cGRhdGVEYW1hZ2VSZWN0Rm9yTmV4dEZyYW1lKHJl
bmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCksIHJlbmRl
clN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpOwotICAgIH0KLX0KLQotdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNsZWFyU3VyZmFjZUZvckRlYnVnKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJm
YWNlTGF5ZXIsIENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBGbG9hdFJlY3QmIHN1
cmZhY2VEYW1hZ2VSZWN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyU3VyZmFj
ZUZvckRlYnVnKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSwgQ0NSZW5kZXJTdXJmYWNl
KiByb290UmVuZGVyU3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkK
IHsKICAgICAvLyBOb24tcm9vdCBsYXllcnMgc2hvdWxkIGNsZWFyIHRoZWlyIGVudGlyZSBjb250
ZW50cyB0byB0cmFuc3BhcmVudC4gVGhlIHJvb3QgbGF5ZXIKICAgICAvLyBpcyBjbGVhcmVkIHRv
IGJsdWUgdG8gZWFzaWx5IHNlZSByZWdpb25zIHRoYXQgd2VyZSBub3QgZHJhd24gb24gdGhlIHNj
cmVlbi4gSWYgd2UKQEAgLTM3Myw3ICszMTksNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y2xlYXJTdXJmYWNlRm9yRGVidWcoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllcgog
ICAgIC8vIGNsZWFyIHRoZSBkYW1hZ2VkIHJlZ2lvbiwgc28gdGhhdCB3ZSBkb24ndCBhY2NpZGVu
dGFsbHkgY2xlYXIgdW4tY2hhbmdlZCBwb3J0aW9ucwogICAgIC8vIG9mIHRoZSBzY3JlZW4uCiAK
LSAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyICE9IHJvb3REcmF3TGF5ZXIpCisgICAgaWYgKHJl
bmRlclN1cmZhY2UgIT0gcm9vdFJlbmRlclN1cmZhY2UpCiAgICAgICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKSk7CiAgICAgZWxzZQogICAg
ICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMSwg
MSkpOwpAQCAtMzg3LDU2ICszMzMsMTkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNs
ZWFyU3VyZmFjZUZvckRlYnVnKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIKICAgICBH
TEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUKSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBD
Q0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZSgpCiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyIsIHRoaXMsIDApOwot
Ci0gICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgIHRyYWNr
RGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdERyYXdMYXllciwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7Ci0gICAgbV9yb290RGFtYWdlUmVjdCA9IHJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2Uo
KS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwotCi0gICAgLy8gVXBkYXRl
IHRoZSBjb250ZW50cyBvZiB0aGUgcmVuZGVyIHN1cmZhY2VzLiBXZSB0cmF2ZXJzZSB0aGUgcmVu
ZGVyIHN1cmZhY2VzCi0gICAgLy8gZnJvbSBiYWNrIHRvIGZyb250IHRvIGd1YXJhbnRlZSB0aGF0
IG5lc3RlZCByZW5kZXIgc3VyZmFjZXMgZ2V0IHJlbmRlcmVkIGluCi0gICAgLy8gdGhlIGNvcnJl
Y3Qgb3JkZXIuCi0gICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0g
ICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Ci0gICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVu
ZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAg
ICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlLT5k
cmF3T3BhY2l0eSgpKTsKLQotICAgICAgICBpZiAodXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJm
YWNlKSkgewotCi0gICAgICAgICAgICBGbG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7Ci0gICAg
ICAgICAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCkgewotICAgICAgICAg
ICAgICAgIC8vIEZvciBub3csIHdlIGNvbnNlcnZhdGl2ZWx5IHVzZSB0aGUgcm9vdCBkYW1hZ2Ug
YXMgdGhlIGRhbWFnZSBmb3IgYWxsCi0gICAgICAgICAgICAgICAgLy8gc3VyZmFjZXMsIGV4Y2Vw
dCBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm1zLgotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtID0gY29tcHV0ZVNjcmVlblNwYWNlVHJhbnNmb3Jt
Rm9yU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5ZXIpOwotICAgICAgICAgICAgICAgIGlmIChzY3Jl
ZW5TcGFjZVRyYW5zZm9ybS5oYXNQZXJzcGVjdGl2ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25zIGRvIG5vdCBwbGF5IG5pY2Ugd2l0aCBtYXBSZWN0
IG9mIGludmVyc2UgdHJhbnNmb3Jtcy4KLSAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyB1
bmNvbW1vbiBjYXNlLCBpdHMgc2ltcGxlciB0byBqdXN0IHJlZHJhdyB0aGUgZW50aXJlIHN1cmZh
Y2UuCi0gICAgICAgICAgICAgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gcmVuZGVyU3VyZmFj
ZS0+Y29udGVudFJlY3QoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0g
PSBzY3JlZW5TcGFjZVRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN1
cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFJlY3QobV9y
b290RGFtYWdlUmVjdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBGSVhNRTogZXZlbnR1YWxseSB3ZSBzaG91bGQgcGxhY2UgdGhpcyB1bmRlciBh
IGRlYnVnIGZsYWcuCi0gICAgICAgICAgICBjbGVhclN1cmZhY2VGb3JEZWJ1ZyhyZW5kZXJTdXJm
YWNlTGF5ZXIsIHJvb3REcmF3TGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0KTsKLQotICAgICAgICAg
ICAgY29uc3QgQ0NMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlz
dCgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRl
eCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkKLSAgICAgICAgICAgICAgICBkcmF3
TGF5ZXIobGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpLCByZW5kZXJTdXJmYWNlLCBzdXJmYWNl
RGFtYWdlUmVjdCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFj
ZSA9IHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCk7CiAKLSAgICAvLyBUaGUgbmV4dCBmcmFt
ZSBzaG91bGQgc3RhcnQgYnkgYXNzdW1pbmcgbm90aGluZyBoYXMgY2hhbmdlZCwgYW5kIGNoYW5n
ZXMgYXJlIG5vdGVkIGFzIHRoZXkgb2NjdXIuCi0gICAgcm9vdERyYXdMYXllci0+cmVzZXRBbGxD
aGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKLX0KKyAgICAvLyBGSVhNRTogdXNlIHRoZSBmcmFt
ZSBiZWdpbiB0aW1lIGZyb20gdGhlIG92ZXJhbGwgY29tcG9zaXRvciBzY2hlZHVsZXIuCisgICAg
Ly8gVGhpcyB2YWx1ZSBpcyBjdXJyZW50bHkgaW5hY2Nlc3NpYmxlIGJlY2F1c2UgaXQgaXMgdXAg
aW4gQ2hyb21pdW0ncworICAgIC8vIFJlbmRlcldpZGdldC4KKyAgICBtX2hlYWRzVXBEaXNwbGF5
LT5vbkZyYW1lQmVnaW4oY3VycmVudFRpbWUoKSk7CiAKKyAgICBzaXplX3QgY29udGVudHNNZW1v
cnlVc2VCeXRlcyA9IG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLT5jdXJyZW50TWVtb3J5VXNl
Qnl0ZXMoKTsKKyAgICBzaXplX3QgbWF4TGltaXQgPSBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0
Qnl0ZXModmlld3BvcnRTaXplKCkpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2Vy
LT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1heExpbWl0IC0gY29udGVudHNNZW1vcnlVc2VCeXRl
cyk7CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQot
ewogICAgIGlmICh2aWV3cG9ydFNpemUoKS5pc0VtcHR5KCkgfHwgIXJvb3RMYXllcigpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQ0OSwyNyArMzU4LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgICAgIG1fY29udGV4dC0+cmVzaGFwZSh2
aWV3cG9ydFdpZHRoKCksIHZpZXdwb3J0SGVpZ2h0KCkpOwogICAgIH0KIAotICAgIENDTGF5ZXJJ
bXBsKiByb290RHJhd0xheWVyID0gcm9vdExheWVyKCk7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0KLSAgICBpZiAoIXJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKLSAgICAgICAg
cm9vdERyYXdMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIHJvb3REcmF3TGF5ZXIt
PnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCB2aWV3
cG9ydFNpemUoKSkpOwotCi0gICAgcm9vdERyYXdMYXllci0+c2V0Q2xpcFJlY3QoSW50UmVjdChJ
bnRQb2ludCgpLCB2aWV3cG9ydFNpemUoKSkpOwotCi0gICAgQ0NMYXllckxpc3QgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290RHJh
d0xheWVyKTsKLQotICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UgPSByb290RHJhd0xheWVyLT5y
ZW5kZXJTdXJmYWNlKCk7Ci0gICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+Y2xlYXJMYXllckxp
c3QoKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwotICAgIHsK
LSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0lu
dGVybmFsOjpjYWxjRHJhd0V0YyIsIHRoaXMsIDApOwotICAgICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290RHJhd0xheWVy
LCByb290RHJhd0xheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCAmbV9s
YXllclNvcnRlciwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOwotICAgIH0KLQogICAg
IC8vIFRoZSBHTCB2aWV3cG9ydCBjb3ZlcnMgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEsIGluY2x1
ZGluZyB0aGUgc2Nyb2xsYmFycy4KICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQt
PnZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0V2lkdGgoKSwgdmlld3BvcnRIZWlnaHQoKSkpOwogICAg
IG1fd2luZG93TWF0cml4ID0gc2NyZWVuTWF0cml4KDAsIDAsIHZpZXdwb3J0V2lkdGgoKSwgdmll
d3BvcnRIZWlnaHQoKSk7CkBAIC00ODIsOSArMzcxLDMwNSBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKSk7CiAgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
KSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEp
KTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKGNvbnN0
IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKK3sKKyAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRl
clN1cmZhY2UgPSByZW5kZXJQYXNzLT50YXJnZXRTdXJmYWNlKCk7CisgICAgaWYgKCF1c2VSZW5k
ZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhN
RTogZXZlbnR1YWxseSB3ZSBzaG91bGQgcGxhY2UgdGhpcyB1bmRlciBhIGRlYnVnIGZsYWcuCisg
ICAgY2xlYXJTdXJmYWNlRm9yRGVidWcocmVuZGVyU3VyZmFjZSwgbV9kZWZhdWx0UmVuZGVyU3Vy
ZmFjZSwgcmVuZGVyUGFzcy0+c3VyZmFjZURhbWFnZVJlY3QoKSk7CisKKyAgICBjb25zdCBDQ1F1
YWRMaXN0JiBxdWFkTGlzdCA9IHJlbmRlclBhc3MtPnF1YWRMaXN0KCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBxdWFkTGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAgZHJhd1F1YWQocXVh
ZExpc3RbaV0uZ2V0KCksIHJlbmRlclBhc3MtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOworfQorCit2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVh
ZCwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3sKKyAgICBJbnRSZWN0IHNj
aXNzb3JSZWN0OworICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKSB7Cisg
ICAgICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlUmVjdCA9IHN1cmZhY2VEYW1hZ2VSZWN0Owor
ICAgICAgICBpZiAoIXF1YWQtPmNsaXBSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY2xp
cEFuZERhbWFnZVJlY3QuaW50ZXJzZWN0KHF1YWQtPmNsaXBSZWN0KCkpOworICAgICAgICBzY2lz
c29yUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZVJlY3QpOworICAgICAgICBp
ZiAoc2Npc3NvclJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxz
ZQorICAgICAgICBzY2lzc29yUmVjdCA9IHF1YWQtPmNsaXBSZWN0KCk7CisKKyAgICBpZiAoc2Np
c3NvclJlY3QuaXNFbXB0eSgpKQorICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworICAgIGVsc2UK
KyAgICAgICAgc2V0U2Npc3NvclRvUmVjdChzY2lzc29yUmVjdCk7CisKKyAgICBpZiAocXVhZC0+
aXNPcGFxdWUoKSkKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOworICAgIGVsc2UKKyAgICAgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
KSk7CisKKyAgICBzd2l0Y2ggKHF1YWQtPm1hdGVyaWFsKCkpIHsKKyAgICBjYXNlIENDRHJhd1F1
YWQ6OkludmFsaWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OkRlYnVnQm9yZGVyOgorICAgICAgICBkcmF3RGVidWdC
b3JkZXJRdWFkKHF1YWQtPnRvRGVidWdCb3JkZXJEcmF3UXVhZCgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDQ0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNlOgorICAgICAgICBkcmF3UmVuZGVy
U3VyZmFjZVF1YWQocXVhZC0+dG9SZW5kZXJTdXJmYWNlRHJhd1F1YWQoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ0NEcmF3UXVhZDo6U29saWRDb2xvcjoKKyAgICAgICAgZHJhd1NvbGlk
Q29sb3JRdWFkKHF1YWQtPnRvU29saWRDb2xvckRyYXdRdWFkKCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudDoKKyAgICAgICAgZHJhd1RpbGVRdWFk
KHF1YWQtPnRvVGlsZURyYXdRdWFkKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENDRHJh
d1F1YWQ6OkN1c3RvbUxheWVyOgorICAgICAgICBkcmF3Q3VzdG9tTGF5ZXJRdWFkKHF1YWQtPnRv
Q3VzdG9tTGF5ZXJEcmF3UXVhZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVn
Qm9yZGVyRHJhd1F1YWQqIHF1YWQpCit7CisgICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2XTsK
KyAgICBjb25zdCBMYXllckNocm9taXVtOjpCb3JkZXJQcm9ncmFtKiBwcm9ncmFtID0gYm9yZGVy
UHJvZ3JhbSgpOworICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkp
OworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9n
cmFtKCkpKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IHF1YWQt
PmxheWVyVHJhbnNmb3JtKCk7CisgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0ID0gcXVhZC0+
cXVhZFJlY3QoKTsKKyAgICByZW5kZXJNYXRyaXguc2NhbGUzZChsYXllclJlY3Qud2lkdGgoKSwg
bGF5ZXJSZWN0LmhlaWdodCgpLCAxKTsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRvR0xN
YXRyaXgoJmdsTWF0cml4WzBdLCBwcm9qZWN0aW9uTWF0cml4KCkgKiByZW5kZXJNYXRyaXgpOwor
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLCBmYWxzZSwgJmdsTWF0cml4WzBdLCAxKSk7
CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00Zihwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLmNvbG9yTG9jYXRpb24oKSwgcXVhZC0+Y29sb3IoKS5yZWQoKSAvIDI1NS4w
LCBxdWFkLT5jb2xvcigpLmdyZWVuKCkgLyAyNTUuMCwgcXVhZC0+Y29sb3IoKS5ibHVlKCkgLyAy
NTUuMCwgMSkpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5saW5lV2lkdGgocXVh
ZC0+d2lkdGgoKSkpOworCisgICAgLy8gVGhlIGluZGljZXMgZm9yIHRoZSBsaW5lIGFyZSBzdG9y
ZWQgaW4gdGhlIHNhbWUgYXJyYXkgYXMgdGhlIHRyaWFuZ2xlIGluZGljZXMuCisgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVf
TE9PUCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCA2ICogc2l6ZW9mKHVu
c2lnbmVkIHNob3J0KSkpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jl
bmRlclN1cmZhY2VRdWFkKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKiBxdWFkKQorewor
ICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IHF1YWQtPmxheWVyKCk7CisgICAgbGF5ZXItPnJlbmRl
clN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBxdWFkLT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICBs
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7Cit9CisKK3Zv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xp
ZENvbG9yRHJhd1F1YWQqIHF1YWQpCit7CisgICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVy
UHJvZ3JhbSogc29saWRDb2xvclByb2dyYW0gPSBib3JkZXJQcm9ncmFtKCk7CisgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHNvbGlkQ29sb3JQcm9ncmFtLT5wcm9ncmFt
KCkpKTsKKworICAgIEludFJlY3QgdGlsZVJlY3QgPSBxdWFkLT5xdWFkUmVjdCgpOworCisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggdGlsZVRyYW5zZm9ybSA9IHF1YWQtPnF1YWRUcmFuc2Zvcm0o
KTsKKyAgICB0aWxlVHJhbnNmb3JtLnRyYW5zbGF0ZSh0aWxlUmVjdC54KCkgKyB0aWxlUmVjdC53
aWR0aCgpIC8gMi4wLCB0aWxlUmVjdC55KCkgKyB0aWxlUmVjdC5oZWlnaHQoKSAvIDIuMCk7CisK
KyAgICBjb25zdCBDb2xvciYgY29sb3IgPSBxdWFkLT5jb2xvcigpOworCisgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYoc29saWRDb2xvclByb2dyYW0tPmZyYWdtZW50U2hh
ZGVyKCkuY29sb3JMb2NhdGlvbigpLCBjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3Iu
Ymx1ZSgpLCBjb2xvci5hbHBoYSgpKSk7CisKKyAgICBmbG9hdCBvcGFjaXR5ID0gcXVhZC0+b3Bh
Y2l0eSgpOworICAgIGRyYXdUZXh0dXJlZFF1YWQodGlsZVRyYW5zZm9ybSwKKyAgICAgICAgICAg
ICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCBvcGFjaXR5LCBG
bG9hdFF1YWQoKSwKKyAgICAgICAgICAgICAgICAgICAgIHNvbGlkQ29sb3JQcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgLTEsIC0x
KTsKK30KKworc3RydWN0IFRpbGVQcm9ncmFtVW5pZm9ybXMgeworICAgIHVuc2lnbmVkIHByb2dy
YW07CisgICAgdW5zaWduZWQgc2FtcGxlckxvY2F0aW9uOworICAgIHVuc2lnbmVkIHZlcnRleFRl
eFRyYW5zZm9ybUxvY2F0aW9uOworICAgIHVuc2lnbmVkIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9j
YXRpb247CisgICAgdW5zaWduZWQgZWRnZUxvY2F0aW9uOworICAgIHVuc2lnbmVkIG1hdHJpeExv
Y2F0aW9uOworICAgIHVuc2lnbmVkIGFscGhhTG9jYXRpb247CisgICAgdW5zaWduZWQgcG9pbnRM
b2NhdGlvbjsKK307CisKK3RlbXBsYXRlPGNsYXNzIFQ+CitzdGF0aWMgdm9pZCB0aWxlVW5pZm9y
bUxvY2F0aW9uKFQgcHJvZ3JhbSwgVGlsZVByb2dyYW1Vbmlmb3JtcyYgdW5pZm9ybXMpCit7Cisg
ICAgdW5pZm9ybXMucHJvZ3JhbSA9IHByb2dyYW0tPnByb2dyYW0oKTsKKyAgICB1bmlmb3Jtcy52
ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnZlcnRl
eFRleFRyYW5zZm9ybUxvY2F0aW9uKCk7CisgICAgdW5pZm9ybXMubWF0cml4TG9jYXRpb24gPSBw
cm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpOworICAgIHVuaWZvcm1zLnBv
aW50TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCk7CisK
KyAgICB1bmlmb3Jtcy5zYW1wbGVyTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigp
LnNhbXBsZXJMb2NhdGlvbigpOworICAgIHVuaWZvcm1zLmFscGhhTG9jYXRpb24gPSBwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsKKyAgICB1bmlmb3Jtcy5mcmFnbWVu
dFRleFRyYW5zZm9ybUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVu
dFRleFRyYW5zZm9ybUxvY2F0aW9uKCk7CisgICAgdW5pZm9ybXMuZWRnZUxvY2F0aW9uID0gcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKTsKK30KKworc3RhdGljIHZvaWQg
ZmluZFRpbGVQcm9ncmFtVW5pZm9ybXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRl
cmVyLCBjb25zdCBDQ1RpbGVEcmF3UXVhZCogcXVhZCwgVGlsZVByb2dyYW1Vbmlmb3JtcyYgdW5p
Zm9ybXMpCit7CisgICAgaWYgKHF1YWQtPmlzQW50aWFsaWFzZWQoKSkgeworICAgICAgICBpZiAo
cXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IENDVGlsZWRMYXll
ckltcGw6OlByb2dyYW1Td2l6emxlQUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclBy
b2dyYW1Td2l6emxlQUEoKTsKKyAgICAgICAgICAgIHRpbGVVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bSwgdW5pZm9ybXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgQ0NUaWxl
ZExheWVySW1wbDo6UHJvZ3JhbUFBKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9n
cmFtQUEoKTsKKyAgICAgICAgICAgIHRpbGVVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9y
bXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHF1YWQtPmlzT3BhcXVl
KCkpIHsKKyAgICAgICAgICAgIGlmIChxdWFkLT5zd2l6emxlQ29udGVudHMoKSkgeworICAgICAg
ICAgICAgICAgIGNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxlT3BhcXVlKiBw
cm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtU3dpenpsZU9wYXF1ZSgpOworICAg
ICAgICAgICAgICAgIHRpbGVVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBs
OjpQcm9ncmFtT3BhcXVlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtT3Bh
cXVlKCk7CisgICAgICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlm
b3Jtcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
cXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBDQ1RpbGVk
TGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVy
UHJvZ3JhbVN3aXp6bGUoKTsKKyAgICAgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0sIHVuaWZvcm1zKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIt
PnRpbGVyUHJvZ3JhbSgpOworICAgICAgICAgICAgICAgIHRpbGVVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbSwgdW5pZm9ybXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RpbGVRdWFkKGNvbnN0IENDVGlsZURyYXdR
dWFkKiBxdWFkKQoreworICAgIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0ID0gcXVhZC0+cXVhZFJl
Y3QoKTsKKworICAgIEZsb2F0UmVjdCBjbGFtcFJlY3QodGlsZVJlY3QpOworICAgIC8vIENsYW1w
IHRleHR1cmUgY29vcmRpbmF0ZXMgdG8gYXZvaWQgc2FtcGxpbmcgb3V0c2lkZSB0aGUgbGF5ZXIK
KyAgICAvLyBieSBkZWZsYXRpbmcgdGhlIHRpbGUgcmVnaW9uIGhhbGYgYSB0ZXhlbCBvciBoYWxm
IGEgdGV4ZWwKKyAgICAvLyBtaW51cyBlcHNpbG9uIGZvciBvbmUgcGl4ZWwgbGF5ZXJzLiBUaGUg
cmVzdWx0aW5nIGNsYW1wIHJlZ2lvbgorICAgIC8vIGlzIG1hcHBlZCB0byB0aGUgdW5pdCBzcXVh
cmUgYnkgdGhlIHZlcnRleCBzaGFkZXIgYW5kIG1hcHBlZAorICAgIC8vIGJhY2sgdG8gbm9ybWFs
aXplZCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGJ5IHRoZSBmcmFnbWVudCBzaGFkZXIKKyAgICAvLyBh
ZnRlciBiZWluZyBjbGFtcGVkIHRvIDAtMSByYW5nZS4KKyAgICBjb25zdCBmbG9hdCBlcHNpbG9u
ID0gMSAvIDEwMjQuMGY7CisgICAgZmxvYXQgY2xhbXBYID0gbWluKDAuNSwgY2xhbXBSZWN0Lndp
ZHRoKCkgLyAyLjAgLSBlcHNpbG9uKTsKKyAgICBmbG9hdCBjbGFtcFkgPSBtaW4oMC41LCBjbGFt
cFJlY3QuaGVpZ2h0KCkgLyAyLjAgLSBlcHNpbG9uKTsKKyAgICBjbGFtcFJlY3QuaW5mbGF0ZVgo
LWNsYW1wWCk7CisgICAgY2xhbXBSZWN0LmluZmxhdGVZKC1jbGFtcFkpOworICAgIEZsb2F0U2l6
ZSBjbGFtcE9mZnNldCA9IGNsYW1wUmVjdC5taW5YTWluWUNvcm5lcigpIC0gRmxvYXRSZWN0KHRp
bGVSZWN0KS5taW5YTWluWUNvcm5lcigpOworCisgICAgRmxvYXRQb2ludCB0ZXh0dXJlT2Zmc2V0
ID0gcXVhZC0+dGV4dHVyZU9mZnNldCgpICsgY2xhbXBPZmZzZXQ7CisKKyAgICAvLyBNYXAgY2xh
bXBpbmcgcmVjdGFuZ2xlIHRvIHVuaXQgc3F1YXJlLgorICAgIGZsb2F0IHZlcnRleFRleFRyYW5z
bGF0ZVggPSAtY2xhbXBSZWN0LngoKSAvIGNsYW1wUmVjdC53aWR0aCgpOworICAgIGZsb2F0IHZl
cnRleFRleFRyYW5zbGF0ZVkgPSAtY2xhbXBSZWN0LnkoKSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsK
KyAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVggPSB0aWxlUmVjdC53aWR0aCgpIC8gY2xhbXBSZWN0
LndpZHRoKCk7CisgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0KCkg
LyBjbGFtcFJlY3QuaGVpZ2h0KCk7CisKKyAgICAvLyBNYXAgdG8gbm9ybWFsaXplZCB0ZXh0dXJl
IGNvb3JkaW5hdGVzLgorICAgIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplID0gcXVhZC0+dGV4
dHVyZVNpemUoKTsKKyAgICBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVggPSB0ZXh0dXJlT2Zm
c2V0LngoKSAvIHRleHR1cmVTaXplLndpZHRoKCk7CisgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFu
c2xhdGVZID0gdGV4dHVyZU9mZnNldC55KCkgLyB0ZXh0dXJlU2l6ZS5oZWlnaHQoKTsKKyAgICBm
bG9hdCBmcmFnbWVudFRleFNjYWxlWCA9IGNsYW1wUmVjdC53aWR0aCgpIC8gdGV4dHVyZVNpemUu
d2lkdGgoKTsKKyAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWSA9IGNsYW1wUmVjdC5oZWlnaHQo
KSAvIHRleHR1cmVTaXplLmhlaWdodCgpOworCisgICAgVGlsZVByb2dyYW1Vbmlmb3JtcyB1bmlm
b3JtczsKKyAgICBmaW5kVGlsZVByb2dyYW1Vbmlmb3Jtcyh0aGlzLCBxdWFkLCB1bmlmb3Jtcyk7
CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0odW5pZm9ybXMucHJv
Z3JhbSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHVuaWZvcm1z
LnNhbXBsZXJMb2NhdGlvbiwgMCkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0
aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKKyAgICBHTEMoY29udGV4
dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBxdWFkLT50ZXh0dXJlSWQoKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgcXVhZC0+dGV4dHVyZUZpbHRlcigpKSk7CisgICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBxdWFkLT50
ZXh0dXJlRmlsdGVyKCkpKTsKKworICAgIEZsb2F0UXVhZCBsb2NhbFF1YWQ7CisgICAgaWYgKHF1
YWQtPmlzQW50aWFsaWFzZWQoKSkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZp
Y2VUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCh3aW5kb3dNYXRyaXgoKSAqIHByb2pl
Y3Rpb25NYXRyaXgoKSAqIHF1YWQtPnF1YWRUcmFuc2Zvcm0oKSkudG8yZFRyYW5zZm9ybSgpOwor
ICAgICAgICBpZiAoIWRldmljZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBGbG9hdFF1YWQgZGV2aWNlTGF5ZXJRdWFkID0gZGV2aWNlVHJh
bnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKHF1YWQtPmxheWVyUmVjdCgpKSk7CisKKyAgICAgICAg
Q0NMYXllclF1YWQgZGV2aWNlTGF5ZXJCb3VuZHMgPSBDQ0xheWVyUXVhZChGbG9hdFF1YWQoZGV2
aWNlTGF5ZXJRdWFkLmJvdW5kaW5nQm94KCkpKTsKKyAgICAgICAgZGV2aWNlTGF5ZXJCb3VuZHMu
aW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7CisKKyAgICAgICAgQ0NMYXllclF1YWQgZGV2
aWNlTGF5ZXJFZGdlcyA9IENDTGF5ZXJRdWFkKGRldmljZUxheWVyUXVhZCk7CisgICAgICAgIGRl
dmljZUxheWVyRWRnZXMuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7CisKKyAgICAgICAg
ZmxvYXQgZWRnZVsyNF07CisgICAgICAgIGRldmljZUxheWVyRWRnZXMudG9GbG9hdEFycmF5KGVk
Z2UpOworICAgICAgICBkZXZpY2VMYXllckJvdW5kcy50b0Zsb2F0QXJyYXkoJmVkZ2VbMTJdKTsK
KyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtM2Z2KHVuaWZvcm1zLmVk
Z2VMb2NhdGlvbiwgZWRnZSwgOCkpOworCisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dW5pZm9ybTRmKHVuaWZvcm1zLnZlcnRleFRleFRyYW5zZm9ybUxvY2F0aW9uLCB2ZXJ0ZXhU
ZXhUcmFuc2xhdGVYLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVZLCB2ZXJ0ZXhUZXhTY2FsZVgsIHZlcnRl
eFRleFNjYWxlWSkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00
Zih1bmlmb3Jtcy5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5z
bGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50
VGV4U2NhbGVZKSk7CisKKyAgICAgICAgRmxvYXRQb2ludCBib3R0b21SaWdodCh0aWxlUmVjdC5t
YXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgYm90dG9tTGVmdCh0
aWxlUmVjdC54KCksIHRpbGVSZWN0Lm1heFkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgdG9wTGVm
dCh0aWxlUmVjdC54KCksIHRpbGVSZWN0LnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgdG9wUmln
aHQodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkpOworCisgICAgICAgIC8vIE1hcCBwb2lu
dHMgdG8gZGV2aWNlIHNwYWNlLgorICAgICAgICBib3R0b21SaWdodCA9IGRldmljZVRyYW5zZm9y
bS5tYXBQb2ludChib3R0b21SaWdodCk7CisgICAgICAgIGJvdHRvbUxlZnQgPSBkZXZpY2VUcmFu
c2Zvcm0ubWFwUG9pbnQoYm90dG9tTGVmdCk7CisgICAgICAgIHRvcExlZnQgPSBkZXZpY2VUcmFu
c2Zvcm0ubWFwUG9pbnQodG9wTGVmdCk7CisgICAgICAgIHRvcFJpZ2h0ID0gZGV2aWNlVHJhbnNm
b3JtLm1hcFBvaW50KHRvcFJpZ2h0KTsKKworICAgICAgICBDQ0xheWVyUXVhZDo6RWRnZSBib3R0
b21FZGdlKGJvdHRvbVJpZ2h0LCBib3R0b21MZWZ0KTsKKyAgICAgICAgQ0NMYXllclF1YWQ6OkVk
Z2UgbGVmdEVkZ2UoYm90dG9tTGVmdCwgdG9wTGVmdCk7CisgICAgICAgIENDTGF5ZXJRdWFkOjpF
ZGdlIHRvcEVkZ2UodG9wTGVmdCwgdG9wUmlnaHQpOworICAgICAgICBDQ0xheWVyUXVhZDo6RWRn
ZSByaWdodEVkZ2UodG9wUmlnaHQsIGJvdHRvbVJpZ2h0KTsKKworICAgICAgICBpZiAocXVhZC0+
dG9wRWRnZUFBKCkpCisgICAgICAgICAgICB0b3BFZGdlID0gZGV2aWNlTGF5ZXJFZGdlcy50b3Ao
KTsKKyAgICAgICAgaWYgKHF1YWQtPmxlZnRFZGdlQUEoKSkKKyAgICAgICAgICAgIGxlZnRFZGdl
ID0gZGV2aWNlTGF5ZXJFZGdlcy5sZWZ0KCk7CisgICAgICAgIGlmIChxdWFkLT5yaWdodEVkZ2VB
QSgpKQorICAgICAgICAgICAgcmlnaHRFZGdlID0gZGV2aWNlTGF5ZXJFZGdlcy5yaWdodCgpOwor
ICAgICAgICBpZiAocXVhZC0+Ym90dG9tRWRnZUFBKCkpCisgICAgICAgICAgICBib3R0b21FZGdl
ID0gZGV2aWNlTGF5ZXJFZGdlcy5ib3R0b20oKTsKKworICAgICAgICBmbG9hdCBzaWduID0gRmxv
YXRRdWFkKHRpbGVSZWN0KS5pc0NvdW50ZXJjbG9ja3dpc2UoKSA/IC0xIDogMTsKKyAgICAgICAg
Ym90dG9tRWRnZS5zY2FsZShzaWduKTsKKyAgICAgICAgbGVmdEVkZ2Uuc2NhbGUoc2lnbik7Cisg
ICAgICAgIHRvcEVkZ2Uuc2NhbGUoc2lnbik7CisgICAgICAgIHJpZ2h0RWRnZS5zY2FsZShzaWdu
KTsKKworICAgICAgICAvLyBDcmVhdGUgZGV2aWNlIHNwYWNlIHF1YWQuCisgICAgICAgIENDTGF5
ZXJRdWFkIGRldmljZVF1YWQobGVmdEVkZ2UsIHRvcEVkZ2UsIHJpZ2h0RWRnZSwgYm90dG9tRWRn
ZSk7CisKKyAgICAgICAgLy8gTWFwIHF1YWQgdG8gbGF5ZXIgc3BhY2UuCisgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGludmVyc2VEZXZpY2VUcmFuc2Zvcm0gPSBkZXZpY2VUcmFuc2Zvcm0u
aW52ZXJzZSgpOworICAgICAgICBsb2NhbFF1YWQgPSBpbnZlcnNlRGV2aWNlVHJhbnNmb3JtLm1h
cFF1YWQoZGV2aWNlUXVhZC5mbG9hdFF1YWQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
TW92ZSBmcmFnbWVudCBzaGFkZXIgdHJhbnNmb3JtIHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBk
byB0aGlzIHdoaWxlCisgICAgICAgIC8vIHN0aWxsIHByb2R1Y2luZyBjb3JyZWN0IHJlc3VsdHMg
YXMgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbgorICAgICAgICAvLyBzaG91bGQgYWx3YXlz
IGJlIG5vbi1uZWdhdGl2ZSB3aGVuIHRpbGVzIGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdheQorICAg
ICAgICAvLyB0aGF0IGNvdWxkIHJlc3VsdCBpbiBzYW1wbGluZyBvdXRzaWRlIHRoZSBsYXllci4K
KyAgICAgICAgdmVydGV4VGV4U2NhbGVYICo9IGZyYWdtZW50VGV4U2NhbGVYOworICAgICAgICB2
ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7CisgICAgICAgIHZlcnRleFRleFRy
YW5zbGF0ZVggKj0gZnJhZ21lbnRUZXhTY2FsZVg7CisgICAgICAgIHZlcnRleFRleFRyYW5zbGF0
ZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7CisgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVggKz0g
ZnJhZ21lbnRUZXhUcmFuc2xhdGVYOworICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICs9IGZy
YWdtZW50VGV4VHJhbnNsYXRlWTsKKworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PnVuaWZvcm00Zih1bmlmb3Jtcy52ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgdmVydGV4VGV4
VHJhbnNsYXRlWCwgdmVydGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhU
ZXhTY2FsZVkpKTsKKworICAgICAgICBsb2NhbFF1YWQgPSBGbG9hdFJlY3QodGlsZVJlY3QpOwor
ICAgIH0KKworICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxlUmVjdC4KKyAgICBsb2NhbFF1YWQuc2Nh
bGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCksIDEuMGYgLyB0aWxlUmVjdC5oZWlnaHQoKSk7CiAK
LSAgICBkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOworICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+cXVhZFRyYW5zZm9y
bSgpLCB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgp
LCBsb2NhbFF1YWQsIHVuaWZvcm1zLm1hdHJpeExvY2F0aW9uLCB1bmlmb3Jtcy5hbHBoYUxvY2F0
aW9uLCB1bmlmb3Jtcy5wb2ludExvY2F0aW9uKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdDdXN0b21MYXllclF1YWQoY29uc3QgQ0NDdXN0b21MYXllckRyYXdRdWFkKiBx
dWFkKQoreworICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IHF1YWQtPmxheWVyKCk7CisgICAgbGF5
ZXItPmRyYXcodGhpcyk7Cit9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpmaW5pc2hE
cmF3aW5nRnJhbWUoKQorewogICAgIGlmIChtX2hlYWRzVXBEaXNwbGF5LT5lbmFibGVkKCkpIHsK
ICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKSk7CiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpP
TkVfTUlOVVNfU1JDX0FMUEhBKSk7CkBAIC00OTUsNiArNjgwLDE4IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogCiAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
KTsKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKSk7CisKKyAgICBzaXplX3QgY29udGVudHNNZW1vcnlVc2VCeXRlcyA9
IG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKTsKKyAg
ICBzaXplX3QgcmVjbGFpbUxpbWl0ID0gVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVz
KHZpZXdwb3J0U2l6ZSgpKTsKKyAgICBpZiAocmVjbGFpbUxpbWl0ID4gY29udGVudHNNZW1vcnlV
c2VCeXRlcykKKyAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldFByZWZl
cnJlZE1lbW9yeUxpbWl0Qnl0ZXMocmVjbGFpbUxpbWl0IC0gY29udGVudHNNZW1vcnlVc2VCeXRl
cyk7CisgICAgZWxzZQorICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0
UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcygwKTsKKworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1
cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9yZW5kZXJTdXJmYWNlVGV4dHVyZUFs
bG9jYXRvci5nZXQoKSk7CisKKyAgICBpZiAoc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4p
CisgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCk7CiB9CiAKIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp0b0dMTWF0cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtKQpAQCAtNjQ2LDQyICs4NDMsOCBAQCBib29sIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1
cmZhY2UpCiAjZW5kaWYKIAogICAgIHNldERyYXdWaWV3cG9ydFJlY3QocmVuZGVyU3VyZmFjZS0+
Y29udGVudFJlY3QoKSwgZmFsc2UpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5kZXJT
dXJmYWNlKiB0YXJnZXRTdXJmYWNlLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0
KQotewotICAgIGlmIChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmli
dXRlc1RvVGFyZ2V0PENDTGF5ZXJJbXBsPihsYXllciwgdGFyZ2V0U3VyZmFjZS0+b3duaW5nTGF5
ZXJJZCgpKSkgewotICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3KHRoaXMsIHN1
cmZhY2VEYW1hZ2VSZWN0KTsKLSAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+cmVsZWFz
ZUNvbnRlbnRzVGV4dHVyZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGxh
eWVyLT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAobGF5ZXItPnVzZXNMYXllckNsaXBwaW5nKCkgJiYgbV9jYXBhYmlsaXRpZXMudXNpbmdQ
YXJ0aWFsU3dhcCkgewotICAgICAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZVJlY3QobGF5ZXIt
PmNsaXBSZWN0KCkpOwotICAgICAgICBjbGlwQW5kRGFtYWdlUmVjdC5pbnRlcnNlY3Qoc3VyZmFj
ZURhbWFnZVJlY3QpOwotICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qo
Y2xpcEFuZERhbWFnZVJlY3QpKTsKLSAgICB9IGVsc2UgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5n
UGFydGlhbFN3YXApCi0gICAgICAgIHNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChz
dXJmYWNlRGFtYWdlUmVjdCkpOwotICAgIGVsc2UgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGlu
ZygpKQotICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7Ci0KLSAgICBib29sIG9wYXF1ZSA9IGxheWVy
LT5vcGFxdWUoKSAmJiBsYXllci0+ZHJhd09wYWNpdHkoKSA9PSAxOwotICAgIGlmIChvcGFxdWUp
Ci0gICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkQpKTsKLQotICAgIGxheWVyLT5kcmF3KHRoaXMpOwotCi0gICAgaWYg
KG9wYXF1ZSkKLSAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7Ci0KLSAgICAvLyBEcmF3IHRoZSBkZWJ1ZyBib3Jk
ZXIgaWYgdGhlcmUgaXMgb25lLgotICAgIGxheWVyLT5kcmF3RGVidWdCb3JkZXIodGhpcyk7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIFNldHMgdGhlIHNjaXNzb3IgcmVnaW9uIHRvIHRoZSBn
aXZlbiByZWN0YW5nbGUuIFRoZSBjb29yZGluYXRlIHN5c3RlbSBmb3IgdGhlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDkyYmMwMzQyOWEwYzUxMTQ1ZTBjYzRmYjBjMmNk
NmUwYjZlYzVhZjkuLmVjZjk4ZDg2NzEwNGQ0YmQxMWRiOGZmNTllMTcxZjU3YmJjZTYyMDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC00Miw3ICs0Miw2IEBACiAjaW5j
bHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXllcklt
cGwuaCIKICNpbmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCi0jaW5jbHVkZSAiY2MvQ0NM
YXllclNvcnRlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNs
dWRlICJjYy9DQ1BsdWdpbkxheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllcklt
cGwuaCIKQEAgLTY2LDYgKzY1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ0NIZWFk
c1VwRGlzcGxheTsKIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1w
bDsKK2NsYXNzIENDUmVuZGVyUGFzczsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOwogY2xhc3MgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwpAQCAtOTgs
NyArOTgsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHZpZXdwb3J0Q2hhbmdlZCgpOwogCi0gICAg
dm9pZCBkcmF3TGF5ZXJzKCk7CisgICAgdm9pZCBiZWdpbkRyYXdpbmdGcmFtZSgpOworICAgIHZv
aWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKik7CisgICAgdm9pZCBmaW5pc2hE
cmF3aW5nRnJhbWUoKTsKIAogICAgIC8vIHdhaXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAg
ICAgdm9pZCBmaW5pc2goKTsKQEAgLTE1Miw4ICsxNTQsNiBAQCBwdWJsaWM6CiAKICAgICBHQzNE
ZW51bSBiZXN0VGV4dHVyZUZvcm1hdCgpOwogCi0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEND
TGF5ZXJJbXBsPiA+IENDTGF5ZXJMaXN0OwotCiAgICAgc3RhdGljIHZvaWQgdG9HTE1hdHJpeChm
bG9hdCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgdm9pZCBkcmF3VGV4dHVy
ZWRRdWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllck1hdHJpeCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0
eSwgY29uc3QgRmxvYXRRdWFkJiwKQEAgLTE2MywyMSArMTYzLDIyIEBAIHByaXZhdGU6CiAgICAg
TGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPik7CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CiAKLSAgICB2b2lkIGRy
YXdMYXllcnNJbnRlcm5hbCgpOwotICAgIHZvaWQgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNl
cyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOwotICAgIHZvaWQgZHJhd0xheWVyKENDTGF5ZXJJbXBsKiwgQ0NSZW5k
ZXJTdXJmYWNlKiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIHRyYWNrRGFtYWdlRm9y
QWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJh
d1F1YWQqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKKyAgICB2b2lkIGRy
YXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKik7CisgICAgdm9p
ZCBkcmF3UmVuZGVyU3VyZmFjZVF1YWQoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqKTsK
KyAgICB2b2lkIGRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCop
OworICAgIHZvaWQgZHJhd1RpbGVRdWFkKGNvbnN0IENDVGlsZURyYXdRdWFkKik7CisgICAgdm9p
ZCBkcmF3Q3VzdG9tTGF5ZXJRdWFkKGNvbnN0IENDQ3VzdG9tTGF5ZXJEcmF3UXVhZCopOwogCiAg
ICAgTWFuYWdlZFRleHR1cmUqIGdldE9mZnNjcmVlbkxheWVyVGV4dHVyZSgpOwogICAgIHZvaWQg
Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKIAogICAgIHZvaWQgc2V0RHJhd1ZpZXdw
b3J0UmVjdChjb25zdCBJbnRSZWN0JiwgYm9vbCBmbGlwWSk7CiAKLSAgICB2b2lkIHJlbGVhc2VS
ZW5kZXJTdXJmYWNlVGV4dHVyZXMoKTsKLQogICAgIGJvb2wgdXNlUmVuZGVyU3VyZmFjZShDQ1Jl
bmRlclN1cmZhY2UqKTsKLSAgICB2b2lkIGNsZWFyU3VyZmFjZUZvckRlYnVnKENDTGF5ZXJJbXBs
KiByZW5kZXJTdXJmYWNlTGF5ZXIsIENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBG
bG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKKyAgICB2b2lkIGNsZWFyU3VyZmFjZUZvckRl
YnVnKENDUmVuZGVyU3VyZmFjZSosIENDUmVuZGVyU3VyZmFjZSogcm9vdFJlbmRlclN1cmZhY2Us
IGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpOworCisgICAgdm9pZCByZWxlYXNl
UmVuZGVyU3VyZmFjZVRleHR1cmVzKCk7CiAKICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogCkBAIC0yMzksOCArMjQwLDYgQEAgcHJpdmF0ZToKIAogICAgIENDUmVuZGVyU3VyZmFjZSog
bV9kZWZhdWx0UmVuZGVyU3VyZmFjZTsKIAotICAgIENDTGF5ZXJTb3J0ZXIgbV9sYXllclNvcnRl
cjsKLQogICAgIEZsb2F0UXVhZCBtX3NoYXJlZEdlb21ldHJ5UXVhZDsKIAogICAgIGJvb2wgbV9p
c1ZpZXdwb3J0Q2hhbmdlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oCmluZGV4IGJiYTUxZjlmNzg1NTMw
ZDY2NzlmNGQ1NTM3ZDc4NDZiNGY1MmU0N2UuLjU2OWY2OTZiZWFhMmFhNmRmYjNiYmZiMjE3MDQ2
YmYwZTQwYWNjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NoYWRlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaApAQCAtMTQ1LDcgKzE0NSwxNSBAQCBw
cml2YXRlOgogICAgIGludCBtX3ZlcnRleFRleFRyYW5zZm9ybUxvY2F0aW9uOwogfTsKIAotY2xh
c3MgRnJhZ21lbnRUZXhBbHBoYUJpbmRpbmcgeworY2xhc3MgRnJhZ21lbnRUaWxlQmluZGluZ0Jh
c2UgeworcHVibGljOgorICAgIGludCBhbHBoYUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gLTE7
IH0KKyAgICBpbnQgZWRnZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KKyAgICBpbnQg
ZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIC0xOyB9CisgICAg
aW50IHNhbXBsZXJMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIC0xOyB9Cit9OworCitjbGFzcyBG
cmFnbWVudFRleEFscGhhQmluZGluZyA6IHB1YmxpYyBGcmFnbWVudFRpbGVCaW5kaW5nQmFzZSB7
CiBwdWJsaWM6CiAgICAgRnJhZ21lbnRUZXhBbHBoYUJpbmRpbmcoKTsKIApAQCAtMTU4LDEyICsx
NjYsMTEgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9hbHBoYUxvY2F0aW9uOwogfTsKIAotY2xhc3Mg
RnJhZ21lbnRUZXhPcGFxdWVCaW5kaW5nIHsKK2NsYXNzIEZyYWdtZW50VGV4T3BhcXVlQmluZGlu
ZyA6IHB1YmxpYyBGcmFnbWVudFRpbGVCaW5kaW5nQmFzZSB7CiBwdWJsaWM6CiAgICAgRnJhZ21l
bnRUZXhPcGFxdWVCaW5kaW5nKCk7CiAKICAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0M0Qq
LCB1bnNpZ25lZCBwcm9ncmFtKTsKLSAgICBpbnQgYWxwaGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIC0xOyB9CiAgICAgaW50IHNhbXBsZXJMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Ft
cGxlckxvY2F0aW9uOyB9CiAKIHByaXZhdGU6CkBAIC0yMjQsNyArMjMxLDcgQEAgcHJpdmF0ZToK
ICAgICBpbnQgbV9lZGdlTG9jYXRpb247CiB9OwogCi1jbGFzcyBGcmFnbWVudFRleENsYW1wQWxw
aGFBQUJpbmRpbmcgeworY2xhc3MgRnJhZ21lbnRUZXhDbGFtcEFscGhhQUFCaW5kaW5nIDogcHVi
bGljIEZyYWdtZW50VGlsZUJpbmRpbmdCYXNlIHsKIHB1YmxpYzoKICAgICBGcmFnbWVudFRleENs
YW1wQWxwaGFBQUJpbmRpbmcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggNWM1NWY1OWJmM2U3MzcyZmU5ZWM1MTJlZjYzNjExMDFhYzVhMDVlNS4uN2NiNDc3ZjlkYzll
NmU3NTE3NjgzZjU3NDA5OTRhOTNjMjhjNjU5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCkBAIC0yNTEsNyArMjUxLDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQ
cm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogCiAgICAgdGlsZWRMYXllci0+c2V0U2tp
cHNEcmF3KG1fc2tpcHNEcmF3KTsKICAgICB0aWxlZExheWVyLT5zZXRUZXh0dXJlT3JpZW50YXRp
b24obV90ZXh0dXJlT3JpZW50YXRpb24pOwotICAgIHRpbGVkTGF5ZXItPnNldFNhbXBsZWRUZXhl
bEZvcm1hdChtX3NhbXBsZWRUZXhlbEZvcm1hdCk7CisgICAgdGlsZWRMYXllci0+c2V0Q29udGVu
dHNTd2l6emxlZChtX3NhbXBsZWRUZXhlbEZvcm1hdCAhPSBMYXllclRleHR1cmVVcGRhdGVyOjpT
YW1wbGVkVGV4ZWxGb3JtYXRSR0JBKTsKICAgICB0aWxlZExheWVyLT5zZXRUaWxpbmdEYXRhKCpt
X3RpbGVyKTsKIAogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+
dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDdXN0b21MYXllckRy
YXdRdWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTgwYjEwZWQyNDkwYzdhNmY4OWFjZjIzMTFjZDgwYWNl
ODNhNWJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmNwcApAQCAtMCwwICsxLDQ0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NDdXN0b21MYXll
ckRyYXdRdWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ0N1c3Rv
bUxheWVyRHJhd1F1YWQ+IENDQ3VzdG9tTGF5ZXJEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hh
cmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBD
Q0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0N1c3RvbUxh
eWVyRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbGF5ZXIpKTsKK30KKworQ0ND
dXN0b21MYXllckRyYXdRdWFkOjpDQ0N1c3RvbUxheWVyRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5
ZXJJbXBsKiBsYXllcikKKyAgICA6IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdR
dWFkOjpDdXN0b21MYXllciwgcXVhZFJlY3QpCisgICAgLCBtX2xheWVyKGxheWVyKQoreworICAg
IEFTU0VSVChtX2xheWVyKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJh
d1F1YWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xNjEyNDJmMDY2YmU3NDhkNTE5MmNiMzY1MmQ2MTliNTM0ODBi
YzkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmgKQEAgLTAsMCArMSw1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ0NDdXN0b21MYXllckRyYXdRdWFkX2gKKyNkZWZpbmUgQ0NDdXN0b21MYXll
ckRyYXdRdWFkX2gKKworI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJJbXBs
OworCitjbGFzcyBDQ0N1c3RvbUxheWVyRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NDdXN0b21MYXllckRyYXdRdWFkKTsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0N1c3RvbUxheWVyRHJhd1F1YWQ+IGNyZWF0ZShjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCopOworCisg
ICAgQ0NMYXllckltcGwqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQorCitwcml2
YXRlOgorICAgIENDQ3VzdG9tTGF5ZXJEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSos
IGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCopOworCisgICAgQ0NMYXllckltcGwqIG1fbGF5
ZXI7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3
UXVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGUyMWYwZDkzYWQ4OWUzYjJjZmJhNTE2MWY3ZTA4MWM2NDQ0
YWU3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5jcHAKQEAgLTAsMCArMSw0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJE
cmF3UXVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NEZWJ1Z0Jv
cmRlckRyYXdRdWFkPiBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJl
ZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBpbnQgd2lkdGgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
Q0RlYnVnQm9yZGVyRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgY29sb3IsIHdp
ZHRoKSk7Cit9CisKK0NDRGVidWdCb3JkZXJEcmF3UXVhZDo6Q0NEZWJ1Z0JvcmRlckRyYXdRdWFk
KGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3Qm
IHF1YWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGludCB3aWR0aCkKKyAgICA6IENDRHJhd1F1
YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpEZWJ1Z0JvcmRlciwgcXVhZFJlY3QpCisg
ICAgLCBtX2NvbG9yKGNvbG9yKQorICAgICwgbV93aWR0aCh3aWR0aCkKK3sKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
ZWJ1Z0JvcmRlckRyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjI2YWVkNzZm
NWNhZTVmZjAzZWZkZTM5MDkwMjYzYjQzNTkyOWM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdR
dWFkLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NEZWJ1Z0JvcmRlckRyYXdR
dWFkX2gKKyNkZWZpbmUgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkX2gKKworI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFk
IDogcHVibGljIENDRHJhd1F1YWQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDRGVidWdC
b3JkZXJEcmF3UXVhZCk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NEZWJ1Z0Jv
cmRlckRyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgQ29sb3ImLCBpbnQgd2lkdGgpOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfTsKKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX3dpZHRoOyB9CisKK3ByaXZhdGU6CisgICAgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENvbG9yJiwgaW50
IHdpZHRoKTsKKworICAgIENvbG9yIG1fY29sb3I7CisgICAgaW50IG1fd2lkdGg7Cit9OworCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzE2MDA4YTdmZmRi
ZmUzOGRlYWI2MDFjNWJkMWFkMzVjMGJkNjZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5jcHAKQEAgLTAs
MCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0ND
RHJhd1F1YWQuaCIKKworI2luY2x1ZGUgImNjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oIgorI2lu
Y2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJ
bXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKyNpbmNsdWRl
ICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGlsZURyYXdRdWFk
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NEcmF3UXVhZDo6Q0NEcmF3UXVhZChjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBNYXRlcmlhbCBtYXRlcmlhbCwg
Y29uc3QgSW50UmVjdCYgcXVhZFJlY3QpCisgICAgOiBtX3NoYXJlZFF1YWRTdGF0ZShzaGFyZWRR
dWFkU3RhdGUpCisgICAgLCBtX21hdGVyaWFsKG1hdGVyaWFsKQorICAgICwgbV9xdWFkUmVjdChx
dWFkUmVjdCkKK3sKKyAgICBBU1NFUlQobV9zaGFyZWRRdWFkU3RhdGUpOworICAgIEFTU0VSVCht
X21hdGVyaWFsICE9IEludmFsaWQpOworfQorCitjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQq
IENDRHJhd1F1YWQ6OnRvRGVidWdCb3JkZXJEcmF3UXVhZCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1fbWF0ZXJpYWwgPT0gRGVidWdCb3JkZXIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqPih0aGlzKTsKK30KKworY29uc3QgQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQqIENDRHJhd1F1YWQ6OnRvUmVuZGVyU3VyZmFjZURyYXdRdWFkKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9tYXRlcmlhbCA9PSBSZW5kZXJTdXJmYWNlKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqPih0aGlzKTsKK30KKwor
Y29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqIENDRHJhd1F1YWQ6OnRvU29saWRDb2xvckRyYXdR
dWFkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9tYXRlcmlhbCA9PSBTb2xpZENvbG9yKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqPih0aGlzKTsK
K30KKworY29uc3QgQ0NUaWxlRHJhd1F1YWQqIENDRHJhd1F1YWQ6OnRvVGlsZURyYXdRdWFkKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9tYXRlcmlhbCA9PSBUaWxlZENvbnRlbnQpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBDQ1RpbGVEcmF3UXVhZCo+KHRoaXMpOworfQorCitjb25z
dCBDQ0N1c3RvbUxheWVyRHJhd1F1YWQqIENDRHJhd1F1YWQ6OnRvQ3VzdG9tTGF5ZXJEcmF3UXVh
ZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbWF0ZXJpYWwgPT0gQ3VzdG9tTGF5ZXIpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDQ0N1c3RvbUxheWVyRHJhd1F1YWQqPih0aGlzKTsK
K30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NEcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkMDQ2YzkxOTVmZmRlMDViYWIy
NzYwYWJlN2U2OTc4NTA3NjM0MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgKQEAgLTAsMCArMSw4NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ0NEcmF3UXVhZF9oCisjZGVmaW5lIENDRHJhd1F1YWRfaAorCisj
aW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ7CitjbGFzcyBDQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZDsKK2NsYXNzIENDU29saWRDb2xvckRyYXdRdWFkOworY2xhc3MgQ0NUaWxlRHJhd1F1YWQ7
CitjbGFzcyBDQ0N1c3RvbUxheWVyRHJhd1F1YWQ7CisKKy8vIENDRHJhd1F1YWQgaXMgYSBiYWcg
b2YgZGF0YSB1c2VkIGZvciBkcmF3aW5nIGEgcXVhZC4gQmVjYXVzZSBkaWZmZXJlbnQKKy8vIG1h
dGVyaWFscyBuZWVkIGRpZmZlcmVudCBiaXRzIG9mIHBlci1xdWFkIGRhdGEgdG8gcmVuZGVyLCBj
bGFzc2VzIHRoYXQgZGVyaXZlCisvLyBmcm9tIENDRHJhd1F1YWQgc3RvcmUgYWRkaXRpb25hbCBk
YXRhIGluIHRoZWlyIGRlcml2ZWQgaW5zdGFuY2UuIFRoZSBNYXRlcmlhbAorLy8gZW51bSBpcyB1
c2VkIHRvICJzYWZlbHkiIHVwY2FzdCB0byB0aGUgZGVyaXZlZCBjbGFzcy4KK2NsYXNzIENDRHJh
d1F1YWQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDRHJhd1F1YWQpOworcHVibGljOgor
ICAgIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkUmVjdDsg
fQorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPnF1YWRUcmFuc2Zvcm0oKTsgfQorICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2hhcmVkUXVhZFN0YXRlLT5sYXllclRyYW5zZm9ybSgpOyB9CisgICAgY29uc3QgSW50UmVjdCYg
bGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPmxheWVyUmVjdCgp
OyB9CisgICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoYXJl
ZFF1YWRTdGF0ZS0+Y2xpcFJlY3QoKTsgfQorICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJl
dHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+b3BhY2l0eSgpOyB9CisgICAgYm9vbCBpc09wYXF1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5pc09wYXF1ZSgpOyB9CisgICAgYm9v
bCBpc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFk
U3RhdGUtPmlzTGF5ZXJBeGlzQWxpZ25lZEludFJlY3QoKTsgfQorCisgICAgZW51bSBNYXRlcmlh
bCB7CisgICAgICAgIEludmFsaWQsCisgICAgICAgIERlYnVnQm9yZGVyLAorICAgICAgICBSZW5k
ZXJTdXJmYWNlLAorICAgICAgICBTb2xpZENvbG9yLAorICAgICAgICBUaWxlZENvbnRlbnQsCisK
KyAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIGFuZCBhZGQgcHJvcGVyIG1hdGVyaWFsIHR5
cGVzIGZvciBhbGwgbGF5ZXIgdHlwZXMKKyAgICAgICAgQ3VzdG9tTGF5ZXIsCisgICAgfTsKKwor
ICAgIE1hdGVyaWFsIG1hdGVyaWFsKCkgY29uc3QgeyByZXR1cm4gbV9tYXRlcmlhbDsgfQorCisg
ICAgY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKiB0b0RlYnVnQm9yZGVyRHJhd1F1YWQoKSBj
b25zdDsKKyAgICBjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCogdG9SZW5kZXJTdXJmYWNl
RHJhd1F1YWQoKSBjb25zdDsKKyAgICBjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCogdG9Tb2xp
ZENvbG9yRHJhd1F1YWQoKSBjb25zdDsKKyAgICBjb25zdCBDQ1RpbGVEcmF3UXVhZCogdG9UaWxl
RHJhd1F1YWQoKSBjb25zdDsKKyAgICBjb25zdCBDQ0N1c3RvbUxheWVyRHJhd1F1YWQqIHRvQ3Vz
dG9tTGF5ZXJEcmF3UXVhZCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgQ0NEcmF3UXVhZChj
b25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIE1hdGVyaWFsLCBjb25zdCBJbnRSZWN0Jik7CisKK3By
aXZhdGU6CisgICAgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIG1fc2hhcmVkUXVhZFN0YXRlOwor
CisgICAgTWF0ZXJpYWwgbV9tYXRlcmlhbDsKKyAgICBJbnRSZWN0IG1fcXVhZFJlY3Q7Cit9Owor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IGFmMDQyZTU2NjliNDYy
ZmI2YzA5ZGU2ZmMzZDRjZjRiNmQ4NGU5MmQuLjlkMjM3NDBlMzc0OTYyMGMwYjM4OGYwZjE3NjUw
NTA3OWEwZDEwZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTMyLDYgKzMyLDggQEAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0N1
c3RvbUxheWVyRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQu
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKQEAgLTExNyw2ICsxMTksMzIgQEAgdm9pZCBDQ0xheWVySW1wbDo6ZHJhdyhM
YXllclJlbmRlcmVyQ2hyb21pdW0qKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCitQ
YXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ0xheWVySW1wbDo6c2hhcmVkUXVhZFN0YXRl
KCkgY29uc3QKK3sKKyAgICBib29sIGlzT3BhcXVlID0gb3BhcXVlKCkgJiYgZHJhd09wYWNpdHko
KSA9PSAxOworICAgIEludFJlY3QgbGF5ZXJDbGlwUmVjdDsKKyAgICBpZiAodXNlc0xheWVyQ2xp
cHBpbmcoKSkKKyAgICAgICAgbGF5ZXJDbGlwUmVjdCA9IGNsaXBSZWN0KCk7CisgICAgcmV0dXJu
IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocXVhZFRyYW5zZm9ybSgpLCBkcmF3VHJhbnNmb3Jt
KCksIHZpc2libGVMYXllclJlY3QoKSwgbGF5ZXJDbGlwUmVjdCwgZHJhd09wYWNpdHkoKSwgaXNP
cGFxdWUpOworfQorCit2b2lkIENDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiBx
dWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKK3sKKyAg
ICBJbnRSZWN0IGxheWVyUmVjdChJbnRQb2ludCgpLCBib3VuZHMoKSk7CisgICAgcXVhZExpc3Qu
YXBwZW5kKENDQ3VzdG9tTGF5ZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgbGF5
ZXJSZWN0LCB0aGlzKSk7Cit9CisKK3ZvaWQgQ0NMYXllckltcGw6OmFwcGVuZERlYnVnQm9yZGVy
UXVhZChDQ1F1YWRMaXN0JiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJl
ZFF1YWRTdGF0ZSkgY29uc3QKK3sKKyAgICBpZiAoIWRlYnVnQm9yZGVyQ29sb3IoKS5hbHBoYSgp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRlYnVnQm9yZGVyV2lkdGgoKSA8PSAwKQorICAg
ICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IGxheWVyUmVjdChJbnRQb2ludCgpLCBib3VuZHMo
KSk7CisgICAgcXVhZExpc3QuYXBwZW5kKENDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKHNo
YXJlZFF1YWRTdGF0ZSwgbGF5ZXJSZWN0LCBkZWJ1Z0JvcmRlckNvbG9yKCksIGRlYnVnQm9yZGVy
V2lkdGgoKSkpOworfQorCiB2b2lkIENDTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSopCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0x
NDcsMjggKzE3NSw5IEBAIGNvbnN0IEludFJlY3QgQ0NMYXllckltcGw6OmdldERyYXdSZWN0KCkg
Y29uc3QKICAgICByZXR1cm4gbWFwcGVkUmVjdDsKIH0KIAotdm9pZCBDQ0xheWVySW1wbDo6ZHJh
d0RlYnVnQm9yZGVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK1RyYW5z
Zm9ybWF0aW9uTWF0cml4IENDTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKCkgY29uc3QKIHsKLSAg
ICBzdGF0aWMgZmxvYXQgZ2xNYXRyaXhbMTZdOwotICAgIGlmICghZGVidWdCb3JkZXJDb2xvcigp
LmFscGhhKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAgIGNvbnN0IExheWVyQ2hyb21pdW06
OkJvcmRlclByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT5ib3JkZXJQcm9ncmFtKCk7
Ci0gICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Ci0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0KLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBkcmF3VHJhbnNmb3JtKCk7Ci0g
ICAgcmVuZGVyTWF0cml4LnNjYWxlM2QoYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0
KCksIDEpOwotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dG9HTE1hdHJpeCgmZ2xNYXRyaXhb
MF0sIGxheWVyUmVuZGVyZXItPnByb2plY3Rpb25NYXRyaXgoKSAqIHJlbmRlck1hdHJpeCk7Ci0g
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+dmVydGV4
U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwgZmFsc2UsICZnbE1hdHJpeFswXSwgMSkpOwotCi0g
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT5mcmFnbWVudFNoYWRl
cigpLmNvbG9yTG9jYXRpb24oKSwgZGVidWdCb3JkZXJDb2xvcigpLnJlZCgpIC8gMjU1LjAsIGRl
YnVnQm9yZGVyQ29sb3IoKS5ncmVlbigpIC8gMjU1LjAsIGRlYnVnQm9yZGVyQ29sb3IoKS5ibHVl
KCkgLyAyNTUuMCwgMSkpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmxpbmVXaWR0aChk
ZWJ1Z0JvcmRlcldpZHRoKCkpKTsKLQotICAgIC8vIFRoZSBpbmRpY2VzIGZvciB0aGUgbGluZSBh
cmUgc3RvcmVkIGluIHRoZSBzYW1lIGFycmF5IGFzIHRoZSB0cmlhbmdsZSBpbmRpY2VzLgotICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVfTE9PUCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCA2ICogc2l6ZW9m
KHVuc2lnbmVkIHNob3J0KSkpOworICAgIHJldHVybiBkcmF3VHJhbnNmb3JtKCk7CiB9CiAKIHZv
aWQgQ0NMYXllckltcGw6OndyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggZTJjMDBjODY4OTgyYTc2YzY1OGNhZTgzNDEwZTg1YmNj
ZGNmODA5Zi4uYWU0NjMwZmI5YjFmODU5NjNlZmY4NmRmMjMwODI0N2NkNGJmYmYwZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgorI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3Vy
ZmFjZS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgpAQCAtNzAsNiArNzEsMTAgQEAgcHVibGljOgogICAgIGludCBkZWJ1Z0lEKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWJ1Z0lEOyB9CiAjZW5kaWYKIAorICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRR
dWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRRdWFkcyhDQ1F1YWRMaXN0JiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqKTsKKyAgICB2b2lk
IGFwcGVuZERlYnVnQm9yZGVyUXVhZChDQ1F1YWRMaXN0JiwgY29uc3QgQ0NTaGFyZWRRdWFkU3Rh
dGUqKSBjb25zdDsKKwogICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1
bSopOwogICAgIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2
b2lkIGJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CkBAIC0xMzEs
OCArMTM2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGVidWdCb3JkZXJXaWR0aChmbG9hdCk7
CiAgICAgZmxvYXQgZGVidWdCb3JkZXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdCb3Jk
ZXJXaWR0aDsgfQogCi0gICAgdm9pZCBkcmF3RGVidWdCb3JkZXIoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKik7Ci0KICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJl
dHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0KCk7IH0KICAgICB2b2lkIGNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKICAgICB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZSgpIHsgbV9yZW5kZXJTdXJmYWNlLmNs
ZWFyKCk7IH0KQEAgLTIwMCw2ICsyMDMsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lk
IGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogICAg
IHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KTsKIAorICAg
IC8vIFRyYW5zZm9ybWF0aW9uIHVzZWQgdG8gdHJhbnNmb3JtIHF1YWRzIHByb3ZpZGVkIGluIGFw
cGVuZFF1YWRzLgorICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9y
bSgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIHZvaWQgc2V0UGFyZW50KENDTGF5ZXJJbXBsKiBw
YXJlbnQpIHsgbV9wYXJlbnQgPSBwYXJlbnQ7IH0KICAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNo
cm9uaXplcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggZTBj
ZDM4OWRjNmY4ZGY5NDA4YTljMDU1MWU0MDZlZmJkMWRmMmIwZC4uNjVkOGE0NTc3YzgyMWQ0MTBh
MDJiMmE1M2EyYTQ4NGMzNzYwZTc1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKQEAgLTMwLDggKzMwLDExIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2
ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAj
aW5jbHVkZSAiY2MvQ0NQYWdlU2NhbGVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRl
clN1cmZhY2VEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgogI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC0xMjYsMTQgKzEyOSwxMTkgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0
YXJnZXRQb3NpdGlvbiwKICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQo
KTsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp0cmFja0RhbWFnZUZvckFsbFN1cmZh
Y2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICAvLyBGb3Igbm93LCB3ZSB1c2UgZGFtYWdlIHRyYWNr
aW5nIHRvIGNvbXB1dGUgYSBnbG9iYWwgc2Npc3Nvci4gVG8gZG8gdGhpcywgd2UgbXVzdAorICAg
IC8vIGNvbXB1dGUgYWxsIGRhbWFnZSB0cmFja2luZyBiZWZvcmUgZHJhd2luZyBhbnl0aGluZywg
c28gdGhhdCB3ZSBrbm93IHRoZSByb290CisgICAgLy8gZGFtYWdlIHJlY3QuIFRoZSByb290IGRh
bWFnZSByZWN0IGlzIHRoZW4gdXNlZCB0byBzY2lzc29yIGVhY2ggc3VyZmFjZS4KKworICAgIGZv
ciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsg
c3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgeworICAgICAgICBDQ0xheWVySW1w
bCogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5k
ZXhdLmdldCgpOworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5k
ZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlclN1
cmZhY2UpOworICAgICAgICByZW5kZXJTdXJmYWNlLT5kYW1hZ2VUcmFja2VyKCktPnVwZGF0ZURh
bWFnZVJlY3RGb3JOZXh0RnJhbWUocmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIHJlbmRlclN1
cmZhY2VMYXllci0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSk7CisgICAg
fQorfQorCitzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tcHV0ZVNjcmVlblNwYWNlVHJh
bnNmb3JtRm9yU3VyZmFjZShDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyKQoreworICAg
IC8vIFRoZSBsYXllcidzIHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0gY2FuIGJlIHdyaXR0ZW4gYXM6
CisgICAgLy8gICBsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtID0gc3VyZmFjZVNjcmVlblNwYWNl
VHJhbnNmb3JtICogbGF5ZXJPcmlnaW5UcmFuc2Zvcm0KKyAgICAvLyBTbywgdG8gY29tcHV0ZSB0
aGUgc3VyZmFjZSBzY3JlZW4gc3BhY2UsIHdlIGNhbiBkbzoKKyAgICAvLyAgIHN1cmZhY2VTY3Jl
ZW5TcGFjZVRyYW5zZm9ybSA9IGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gKiBpbnZlcnNlKGxh
eWVyT3JpZ2luVHJhbnNmb3JtKQorCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJPcmln
aW5UcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlTGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICBs
YXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUoLTAuNSAqIHJlbmRlclN1cmZhY2VMYXllci0+
Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIHJlbmRlclN1cmZhY2VMYXllci0+Ym91bmRzKCkuaGVp
Z2h0KCkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5z
Zm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKTsKKyAgICBz
dXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXJPcmlnaW5UcmFuc2Zvcm0u
aW52ZXJzZSgpKTsKKworICAgIHJldHVybiBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm07Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKFZlY3Rv
cjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+JiBwYXNzZXMpCit7CisgICAgQ0NMYXllckxpc3QgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChy
b290TGF5ZXIoKSk7CisKKyAgICBpZiAoIXJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCkpCisg
ICAgICAgIHJvb3RMYXllcigpLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdExheWVy
KCktPnJlbmRlclN1cmZhY2UoKS0+Y2xlYXJMYXllckxpc3QoKTsKKyAgICByb290TGF5ZXIoKS0+
cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHZpZXdw
b3J0U2l6ZSgpKSk7CisKKyAgICByb290TGF5ZXIoKS0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCB2aWV3cG9ydFNpemUoKSkpOworCisgICAgeworICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllcigp
LCByb290TGF5ZXIoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSwg
Jm1fbGF5ZXJTb3J0ZXIsIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6
ZSk7CisgICAgfQorCisgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1Bh
cnRpYWxTd2FwKQorICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3RMYXllcigp
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Qg
PSByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnRE
YW1hZ2VSZWN0KCk7CisKKyAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgp
IHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKKyAgICAgICAgQ0NSZW5kZXJTdXJmYWNl
KiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisK
KyAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcGFzcyA9IENDUmVuZGVyUGFzczo6Y3JlYXRl
KHJlbmRlclN1cmZhY2UpOworCisgICAgICAgIEZsb2F0UmVjdCBzdXJmYWNlRGFtYWdlUmVjdDsK
KyAgICAgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2Fw
KSB7CisgICAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhlIHJv
b3QgZGFtYWdlIGFzIHRoZSBkYW1hZ2UgZm9yCisgICAgICAgICAgICAvLyBhbGwgc3VyZmFjZXMs
IGV4Y2VwdCBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm1zLgorICAgICAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBjb21wdXRlU2NyZWVuU3BhY2VUcmFuc2Zv
cm1Gb3JTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllcik7CisgICAgICAgICAgICBpZiAoc2NyZWVu
U3BhY2VUcmFuc2Zvcm0uaGFzUGVyc3BlY3RpdmUoKSkgeworICAgICAgICAgICAgICAgIC8vIFBl
cnNwZWN0aXZlIHByb2plY3Rpb25zIGRvIG5vdCBwbGF5IG5pY2Ugd2l0aCBtYXBSZWN0IG9mCisg
ICAgICAgICAgICAgICAgLy8gaW52ZXJzZSB0cmFuc2Zvcm1zLiBJbiB0aGlzIHVuY29tbW9uIGNh
c2UsIGl0cyBzaW1wbGVyIHRvCisgICAgICAgICAgICAgICAgLy8ganVzdCByZWRyYXcgdGhlIGVu
dGlyZSBzdXJmYWNlLgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB1c2UgY2FsY3VsYXRlVmlz
aWJsZVJlY3QgdG8gaGFuZGxlIHByb2plY3Rpb25zLgorICAgICAgICAgICAgICAgIHN1cmZhY2VE
YW1hZ2VSZWN0ID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVNjcmVl
blNwYWNlVHJhbnNmb3JtID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOworICAgICAg
ICAgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3Jt
Lm1hcFJlY3Qocm9vdERhbWFnZVJlY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHBhc3MtPnNldFN1cmZhY2VEYW1hZ2VSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KTsKKworICAg
ICAgICBjb25zdCBDQ0xheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJM
aXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXgg
PCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKKyAgICAgICAgICAgIENDTGF5ZXJJ
bXBsKiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlm
IChsYXllci0+dmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5
ZXItPnJlbmRlclN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNlKSB7CisgICAgICAgICAgICAgICAg
cGFzcy0+YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIobGF5ZXIpOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXNzLT5hcHBl
bmRRdWFkc0ZvckxheWVyKGxheWVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHBhc3Nlcy5hcHBl
bmQocGFzcy5yZWxlYXNlKCkpOworICAgIH0KK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpkcmF3TGF5ZXJzKCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6
ZHJhd0xheWVycyIsIHRoaXMsIDApOwogICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOwotICAg
IGlmIChtX2xheWVyUmVuZGVyZXItPnJvb3RMYXllcigpKQotICAgICAgICBtX2xheWVyUmVuZGVy
ZXItPmRyYXdMYXllcnMoKTsKKworICAgIGlmICghcm9vdExheWVyKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+IHBhc3NlczsKKyAgICBjYWxj
dWxhdGVSZW5kZXJQYXNzZXMocGFzc2VzKTsKKworICAgIG1fbGF5ZXJSZW5kZXJlci0+YmVnaW5E
cmF3aW5nRnJhbWUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhc3Nlcy5zaXplKCk7
ICsraSkKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3UmVuZGVyUGFzcyhwYXNzZXNbaV0u
Z2V0KCkpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoRHJhd2luZ0ZyYW1lKCk7CiAKICAg
ICArK21fZnJhbWVOdW1iZXI7CisKKyAgICAvLyBUaGUgbmV4dCBmcmFtZSBzaG91bGQgc3RhcnQg
YnkgYXNzdW1pbmcgbm90aGluZyBoYXMgY2hhbmdlZCwgYW5kIGNoYW5nZXMgYXJlIG5vdGVkIGFz
IHRoZXkgb2NjdXIuCisgICAgcm9vdExheWVyKCktPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JT
dWJ0cmVlKCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVy
aW5nKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCA4ODdjN2U2NTU3
N2U3OWUwZTI4YWQwNzg4YmUyMzJkNzU3YTRjMjNmLi5hN2FlMDM4OGJjMDBmNmIwZDA2ZDM2ZDcy
MjRkNjQ4ODdkMWRjOGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBA
IC0yNiw4ICsyNiwxMCBAQAogI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RJbXBsX2gKIAogI2luY2x1
ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAogI2lmIFVTRShTS0lBKQpAQCAtMTI0LDEwICsxMjYsMTQgQEAgcHJvdGVj
dGVkOgogICAgIGludCBtX2ZyYW1lTnVtYmVyOwogCiBwcml2YXRlOgorICAgIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsKKwogICAgIHZvaWQgc2V0UGFn
ZVNjYWxlRGVsdGEoZmxvYXQpOwogICAgIHZvaWQgYXBwbHlQYWdlU2NhbGVEZWx0YVRvU2Nyb2xs
TGF5ZXIoKTsKICAgICB2b2lkIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQp
OwogICAgIHZvaWQgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKKyAgICB2b2lkIHRyYWNrRGFt
YWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5
ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICB2b2lkIGNhbGN1bGF0ZVJlbmRl
clBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYpOwogCiAgICAgT3duUHRyPExh
eWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gbV9yb290TGF5ZXJJbXBsOwpAQCAtMTQ1LDYgKzE1MSw4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3BpbmNoR2VzdHVyZUFjdGl2ZTsKIAogICAgIE93blB0cjxDQ1BhZ2VTY2FsZUFuaW1h
dGlvbj4gbV9wYWdlU2NhbGVBbmltYXRpb247CisKKyAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJT
b3J0ZXI7CiB9OwogCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjEz
ODk3ZjdhZTY3ZjY5YTI2Zjk4ZWZiZmRkZmU0M2EzNjg1ODM4OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFz
cy5jcHAKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIK
KyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0ND
U2hhcmVkUXVhZFN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxD
Q1JlbmRlclBhc3M+IENDUmVuZGVyUGFzczo6Y3JlYXRlKENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0
U3VyZmFjZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUmVuZGVyUGFzcyh0YXJnZXRT
dXJmYWNlKSk7Cit9CisKK0NDUmVuZGVyUGFzczo6Q0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFj
ZSogdGFyZ2V0U3VyZmFjZSkKKyAgICA6IG1fdGFyZ2V0U3VyZmFjZSh0YXJnZXRTdXJmYWNlKQor
eworICAgIEFTU0VSVChtX3RhcmdldFN1cmZhY2UpOworfQorCit2b2lkIENDUmVuZGVyUGFzczo6
YXBwZW5kUXVhZHNGb3JMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgT3duUHRyPEND
U2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUgPSBsYXllci0+c2hhcmVkUXVhZFN0YXRl
KCk7CisgICAgbGF5ZXItPmFwcGVuZFF1YWRzKG1fcXVhZExpc3QsIHNoYXJlZFF1YWRTdGF0ZS5n
ZXQoKSk7CisgICAgbGF5ZXItPmFwcGVuZERlYnVnQm9yZGVyUXVhZChtX3F1YWRMaXN0LCBzaGFy
ZWRRdWFkU3RhdGUuZ2V0KCkpOworICAgIG1fc2hhcmVkUXVhZFN0YXRlTGlzdC5hcHBlbmQoc2hh
cmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRR
dWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgLy8g
RklYTUU6IHJlbmRlciBzdXJmYWNlIGxheWVycyBzaG91bGQgYmUgYSBDQ0xheWVySW1wbC1kZXJp
dmVkIGNsYXNzIGFuZAorICAgIC8vIG5vdCBiZSBoYW5kbGVkIHNwZWNpYWxseSBoZXJlLgorICAg
IENDUmVuZGVyU3VyZmFjZSogc3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAg
Ym9vbCBpc09wYXF1ZSA9IGZhbHNlOworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hh
cmVkUXVhZFN0YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShzdXJmYWNlLT5kcmF3VHJh
bnNmb3JtKCksIHN1cmZhY2UtPmRyYXdUcmFuc2Zvcm0oKSwgc3VyZmFjZS0+Y29udGVudFJlY3Qo
KSwgc3VyZmFjZS0+Y2xpcFJlY3QoKSwgc3VyZmFjZS0+ZHJhd09wYWNpdHkoKSwgaXNPcGFxdWUp
OworICAgIG1fcXVhZExpc3QuYXBwZW5kKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUo
c2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNlLT5jb250ZW50UmVjdCgpLCBsYXllciwgc3Vy
ZmFjZURhbWFnZVJlY3QoKSkpOworICAgIG1fc2hhcmVkUXVhZFN0YXRlTGlzdC5hcHBlbmQoc2hh
cmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYTYxOTczNjY2ZmM1ZjA4OWJlZDUwN2IwMDJlNDFlZjIxZmM2YjVkYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzcy5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDUmVuZGVy
UGFzc19oCisjZGVmaW5lIENDUmVuZGVyUGFzc19oCisKKyNpbmNsdWRlICJjYy9DQ0RyYXdRdWFk
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllckltcGw7CitjbGFzcyBDQ1Jl
bmRlclN1cmZhY2U7CitjbGFzcyBDQ1NoYXJlZFF1YWRTdGF0ZTsKKwordHlwZWRlZiBWZWN0b3I8
T3duUHRyPENDRHJhd1F1YWQ+ID4gQ0NRdWFkTGlzdDsKKworY2xhc3MgQ0NSZW5kZXJQYXNzIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1JlbmRlclBhc3MpOworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyUGFzcz4gY3JlYXRlKENDUmVuZGVyU3VyZmFjZSopOwor
CisgICAgdm9pZCBhcHBlbmRRdWFkc0ZvckxheWVyKENDTGF5ZXJJbXBsKik7CisgICAgdm9pZCBh
cHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCopOworCisgICAgY29u
c3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QoKSBjb25zdCB7IHJldHVybiBtX3F1YWRMaXN0OyB9Cisg
ICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJn
ZXRTdXJmYWNlOyB9CisKKyAgICB2b2lkIHNldFN1cmZhY2VEYW1hZ2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpIHsgbV9zdXJmYWNlRGFtYWdlUmVjdCA9IHN1cmZhY2VE
YW1hZ2VSZWN0OyB9CisgICAgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3VyZmFjZURhbWFnZVJlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBDQ1Jl
bmRlclBhc3MoQ0NSZW5kZXJTdXJmYWNlKik7CisKKyAgICBDQ1JlbmRlclN1cmZhY2UqIG1fdGFy
Z2V0U3VyZmFjZTsKKyAgICBDQ1F1YWRMaXN0IG1fcXVhZExpc3Q7CisgICAgVmVjdG9yPE93blB0
cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gPiBtX3NoYXJlZFF1YWRTdGF0ZUxpc3Q7CisgICAgRmxvYXRS
ZWN0IG1fc3VyZmFjZURhbWFnZVJlY3Q7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4OWExNzJkMTQ0
YmFhNWYzYzBhNWMwZjhlZGY1ODdlMWIzY2RjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZC5jcHAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZD4gQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0
YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBG
bG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbGF5ZXIs
IHN1cmZhY2VEYW1hZ2VSZWN0KSk7Cit9CisKK0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpDQ1Jl
bmRlclN1cmZhY2VEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0
YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBG
bG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KQorICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFk
U3RhdGUsIENDRHJhd1F1YWQ6OlJlbmRlclN1cmZhY2UsIHF1YWRSZWN0KQorICAgICwgbV9sYXll
cihsYXllcikKKyAgICAsIG1fc3VyZmFjZURhbWFnZVJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpCit7
CisgICAgQVNTRVJUKG1fbGF5ZXIpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTM1ZDMyZGEyOTdmODNkZjY1ZjA1NDgzZTkz
YzVhZjlkYjc4NWZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaApAQCAtMCwwICsx
LDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZF9oCisjZGVmaW5l
IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkX2gKKworI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIENDTGF5ZXJJbXBsOworCitjbGFzcyBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCA6IHB1Ymxp
YyBDQ0RyYXdRdWFkIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZCk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJTdXJmYWNl
RHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3Qm
LCBDQ0xheWVySW1wbCosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpOworCisg
ICAgQ0NMYXllckltcGwqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQorCisgICAg
Ly8gVGhlIHN1cmZhY2UgZGFtYWdlIHJlY3QgZm9yIHRoZSB0YXJnZXQgc3VyZmFjZSB0aGlzIHF1
YWQgZHJhd3MgaW50by4KKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHJl
bmRlciBzdXJmYWNlcyBnZXQgdGhlaXIgb3duIGxheWVyIHR5cGUuCisgICAgY29uc3QgRmxvYXRS
ZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZURhbWFnZVJl
Y3Q7IH0KKworcHJpdmF0ZToKKyAgICBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChjb25zdCBDQ1No
YXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCosIGNvbnN0IEZsb2F0
UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpOworCisgICAgQ0NMYXllckltcGwqIG1fbGF5ZXI7Cisg
ICAgRmxvYXRSZWN0IG1fc3VyZmFjZURhbWFnZVJlY3Q7Cit9OworCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aGFyZWRRdWFkU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliZjc2OTI1YmI4Y2Yy
YmJhYzUzOWMwMTQzMWM1NTc4NDMzOWZkMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAK
QEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
ImNjL0NDU2hhcmVkUXVhZFN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093
blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKK3sKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDU2hhcmVkUXVhZFN0YXRlKHF1YWRUcmFuc2Zvcm0sIGxheWVyVHJh
bnNmb3JtLCBsYXllclJlY3QsIGNsaXBSZWN0LCBvcGFjaXR5LCBvcGFxdWUpKTsKK30KKworQ0NT
aGFyZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFu
c2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qs
IGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKQorICAgIDogbV9xdWFkVHJhbnNmb3JtKHF1YWRU
cmFuc2Zvcm0pCisgICAgLCBtX2xheWVyVHJhbnNmb3JtKGxheWVyVHJhbnNmb3JtKQorICAgICwg
bV9sYXllclJlY3QobGF5ZXJSZWN0KQorICAgICwgbV9jbGlwUmVjdChjbGlwUmVjdCkKKyAgICAs
IG1fb3BhY2l0eShvcGFjaXR5KQorICAgICwgbV9vcGFxdWUob3BhcXVlKQoreworfQorCitib29s
IENDU2hhcmVkUXVhZFN0YXRlOjppc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KCkgY29uc3QKK3sK
KyAgICAvLyBOb3RlOiB0aGlzIGRvZXNuJ3QgY29uc2lkZXIgd2luZG93IG9yIHByb2plY3Rpb24g
bWF0cmljZXMuCisgICAgLy8gQXNzdW1lIHRoYXQgdGhleSdyZSBvcnRob25vcm1hbCBhbmQgaGF2
ZSBpbnRlZ2VyIHNjYWxlcyBhbmQgdHJhbnNsYXRpb25zLgorICAgIEZsb2F0UXVhZCBxdWFkID0g
cXVhZFRyYW5zZm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFkKGxheWVyUmVjdCgpKSk7CisgICAgcmV0
dXJuIHF1YWQuaXNSZWN0aWxpbmVhcigpICYmIHF1YWQuYm91bmRpbmdCb3goKS5pc0V4cHJlc3Np
YmxlQXNJbnRSZWN0KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU3ODU3NTdmOWRiOTRiMWIzMjA2MWZkOGQ4YjIxYzQwYmVmMWZmMGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEND
U2hhcmVkUXVhZFN0YXRlX2gKKyNkZWZpbmUgQ0NTaGFyZWRRdWFkU3RhdGVfaAorCisjaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDQ1NoYXJlZFF1YWRTdGF0ZSB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ0NTaGFyZWRRdWFkU3RhdGUpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPENDU2hhcmVkUXVhZFN0YXRlPiBjcmVhdGUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9y
bSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxv
YXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpOworCisgICAgLy8gVGhlIHRyYW5zZm9ybSB0aGF0IHF1
YWRzIGluIGEgQ0NEcmF3UXVhZCBzaG91bGQgYmUgdHJhbnNmb3JtZWQgd2l0aC4KKyAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
cXVhZFRyYW5zZm9ybTsgfQorICAgIC8vIFRoZSB0cmFuc2Zvcm0gdGhhdCBsYXllclJlY3QoKSBz
aG91bGQgYmUgdHJhbnNmb3JtZWQgd2l0aC4KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJhbnNmb3JtOyB9Cisg
ICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclJlY3Q7
IH0KKyAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJl
Y3Q7IH0KKworICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0K
KyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKyAgICBib29s
IGlzTGF5ZXJBeGlzQWxpZ25lZEludFJlY3QoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBDQ1No
YXJlZFF1YWRTdGF0ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0
JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29s
IG9wYXF1ZSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3F1YWRUcmFuc2Zvcm07Cisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9sYXllclRyYW5zZm9ybTsKKyAgICBJbnRSZWN0IG1f
bGF5ZXJSZWN0OworICAgIEludFJlY3QgbV9jbGlwUmVjdDsKKyAgICBmbG9hdCBtX29wYWNpdHk7
CisgICAgYm9vbCBtX29wYXF1ZTsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3
UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NvbGlkQ29sb3JEcmF3UXVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZThiYzA2NGJjYWIxY2FjYTBjNjAx
MWQzOGFiODljNzk5ZmQ2NzYxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmNwcApAQCAt
MCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2Mv
Q0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3du
UHRyPENDU29saWRDb2xvckRyYXdRdWFkPiBDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6Y3JlYXRlKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1
YWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
Q1NvbGlkQ29sb3JEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBjb2xvcikpOwor
fQorCitDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6Q0NTb2xpZENvbG9yRHJhd1F1YWQoY29uc3QgQ0NT
aGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICA6IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBD
Q0RyYXdRdWFkOjpTb2xpZENvbG9yLCBxdWFkUmVjdCkKKyAgICAsIG1fY29sb3IoY29sb3IpCit7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQwMjBkZjY4NDlhOGEwM2NiYThmMjJiMDg4NTcwYzVlMWI4MzZjZTQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlk
Q29sb3JEcmF3UXVhZC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU29saWRD
b2xvckRyYXdRdWFkX2gKKyNkZWZpbmUgQ0NTb2xpZENvbG9yRHJhd1F1YWRfaAorCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ1NvbGlkQ29sb3JE
cmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q1NvbGlkQ29sb3JEcmF3UXVhZCk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NT
b2xpZENvbG9yRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0
IEludFJlY3QmLCBjb25zdCBDb2xvciYpOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfTsKKworcHJpdmF0ZToKKyAgICBDQ1NvbGlkQ29sb3JEcmF3
UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBDb2xv
ciYpOworCisgICAgQ29sb3IgbV9jb2xvcjsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3
UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVEcmF3UXVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTRkNTI0N2I5Yzk2ZmQwYTE3ZTJmMjI4MTg5
Y2Y0YzdjY2EyMzA3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmNwcApAQCAtMCwwICsxLDUxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1
YWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPENDVGlsZURyYXdRdWFk
PiBDQ1RpbGVEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRR
dWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1
cmVJZCwgY29uc3QgSW50UG9pbnQmIHRleHR1cmVPZmZzZXQsIGNvbnN0IEludFNpemUmIHRleHR1
cmVTaXplLCBHQzNEaW50IHRleHR1cmVGaWx0ZXIsIGJvb2wgc3dpenpsZUNvbnRlbnRzLCBib29s
IGxlZnRFZGdlQUEsIGJvb2wgdG9wRWRnZUFBLCBib29sIHJpZ2h0RWRnZUFBLCBib29sIGJvdHRv
bUVkZ2VBQSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVGlsZURyYXdRdWFkKHNoYXJl
ZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRleHR1cmVJZCwgdGV4dHVyZU9mZnNldCwgdGV4dHVyZVNp
emUsIHRleHR1cmVGaWx0ZXIsIHN3aXp6bGVDb250ZW50cywgbGVmdEVkZ2VBQSwgdG9wRWRnZUFB
LCByaWdodEVkZ2VBQSwgYm90dG9tRWRnZUFBKSk7Cit9CisKK0NDVGlsZURyYXdRdWFkOjpDQ1Rp
bGVEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25z
dCBJbnRSZWN0JiBxdWFkUmVjdCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IElu
dFBvaW50JiB0ZXh0dXJlT2Zmc2V0LCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgR0MzRGlu
dCB0ZXh0dXJlRmlsdGVyLCBib29sIHN3aXp6bGVDb250ZW50cywgYm9vbCBsZWZ0RWRnZUFBLCBi
b29sIHRvcEVkZ2VBQSwgYm9vbCByaWdodEVkZ2VBQSwgYm9vbCBib3R0b21FZGdlQUEpCisgICAg
OiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBx
dWFkUmVjdCkKKyAgICAsIG1fdGV4dHVyZUlkKHRleHR1cmVJZCkKKyAgICAsIG1fdGV4dHVyZU9m
ZnNldCh0ZXh0dXJlT2Zmc2V0KQorICAgICwgbV90ZXh0dXJlU2l6ZSh0ZXh0dXJlU2l6ZSkKKyAg
ICAsIG1fdGV4dHVyZUZpbHRlcih0ZXh0dXJlRmlsdGVyKQorICAgICwgbV9zd2l6emxlQ29udGVu
dHMoc3dpenpsZUNvbnRlbnRzKQorICAgICwgbV9sZWZ0RWRnZUFBKGxlZnRFZGdlQUEpCisgICAg
LCBtX3RvcEVkZ2VBQSh0b3BFZGdlQUEpCisgICAgLCBtX3JpZ2h0RWRnZUFBKHJpZ2h0RWRnZUFB
KQorICAgICwgbV9ib3R0b21FZGdlQUEoYm90dG9tRWRnZUFBKQoreworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVE
cmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaWxlRHJhd1F1YWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ODZiNGQ1YjY0MTRlMDE0YjI5NjYwOGFiNzdk
NWJjMTk0OWM4ZWRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuaApAQCAtMCwwICsxLDcwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBDQ1RpbGVEcmF3UXVhZF9oCisjZGVmaW5lIENDVGlsZURyYXdRdWFkX2gK
KworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgorI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIENDVGlsZURyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENDVGlsZURyYXdRdWFkKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDQ1RpbGVEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29u
c3QgSW50UmVjdCYgcXVhZFJlY3QsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zdCBJ
bnRQb2ludCYgdGV4dHVyZU9mZnNldCwgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIEdDM0Rp
bnQgdGV4dHVyZUZpbHRlciwgYm9vbCBzd2l6emxlQ29udGVudHMsIGJvb2wgbGVmdEVkZ2VBQSwg
Ym9vbCB0b3BFZGdlQUEsIGJvb2wgcmlnaHRFZGdlQUEsIGJvb2wgYm90dG9tRWRnZUFBKTsKKwor
ICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJl
SWQ7IH0KKyAgICBJbnRQb2ludCB0ZXh0dXJlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0
dXJlT2Zmc2V0OyB9CisgICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4dHVyZVNpemU7IH0KKyAgICBHQzNEaW50IHRleHR1cmVGaWx0ZXIoKSBjb25zdCB7IHJldHVy
biBtX3RleHR1cmVGaWx0ZXI7IH0KKyAgICBib29sIHN3aXp6bGVDb250ZW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fc3dpenpsZUNvbnRlbnRzOyB9CisKKyAgICBib29sIGxlZnRFZGdlQUEoKSBjb25z
dCB7IHJldHVybiBtX2xlZnRFZGdlQUE7IH0KKyAgICBib29sIHRvcEVkZ2VBQSgpIGNvbnN0IHsg
cmV0dXJuIG1fdG9wRWRnZUFBOyB9CisgICAgYm9vbCByaWdodEVkZ2VBQSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmlnaHRFZGdlQUE7IH0KKyAgICBib29sIGJvdHRvbUVkZ2VBQSgpIGNvbnN0IHsgcmV0
dXJuIG1fYm90dG9tRWRnZUFBOyB9CisKKyAgICBib29sIGlzQW50aWFsaWFzZWQoKSBjb25zdCB7
IHJldHVybiBsZWZ0RWRnZUFBKCkgfHwgdG9wRWRnZUFBKCkgfHwgcmlnaHRFZGdlQUEoKSB8fCBi
b3R0b21FZGdlQUEoKTsgfQorICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBDQ0Ry
YXdRdWFkOjppc09wYXF1ZSgpICYmICFpc0FudGlhbGlhc2VkKCk7IH0KKworcHJpdmF0ZToKKyAg
ICBDQ1RpbGVEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3Qm
IHF1YWRSZWN0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50UG9pbnQmIHRl
eHR1cmVPZmZzZXQsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBHQzNEaW50IHRleHR1cmVG
aWx0ZXIsIGJvb2wgc3dpenpsZUNvbnRlbnRzLCBib29sIGxlZnRFZGdlQUEsIGJvb2wgdG9wRWRn
ZUFBLCBib29sIHJpZ2h0RWRnZUFBLCBib29sIGJvdHRvbUVkZ2VBQSk7CisKKyAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fdGV4dHVyZUlkOworICAgIEludFBvaW50IG1fdGV4dHVyZU9mZnNldDsKKyAg
ICBJbnRTaXplIG1fdGV4dHVyZVNpemU7CisgICAgR0MzRGludCBtX3RleHR1cmVGaWx0ZXI7Cisg
ICAgYm9vbCBtX3N3aXp6bGVDb250ZW50czsKKyAgICBib29sIG1fbGVmdEVkZ2VBQTsKKyAgICBi
b29sIG1fdG9wRWRnZUFBOworICAgIGJvb2wgbV9yaWdodEVkZ2VBQTsKKyAgICBib29sIG1fYm90
dG9tRWRnZUFBOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1w
bC5jcHAKaW5kZXggNDlkMWRmM2ZkOGJlM2M4OTBjMDZmMDVhZTc1ZWU5NTE3ZTc5N2MxMy4uNDkw
NjY1NGMwMDFkNGE5Njg1OTQ5N2EyOTM4MzViODMwNDZiYzQ0YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aWxlZExheWVySW1wbC5jcHAKQEAgLTMwLDcgKzMwLDggQEAKICNpbmNsdWRlICJjYy9DQ1RpbGVk
TGF5ZXJJbXBsLmgiCiAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNs
dWRlICJjYy9DQ0xheWVyUXVhZC5oIgorI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFk
LmgiCisjaW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1YWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTUzLDYgKzU0LDcgQEAgcHJp
dmF0ZToKIENDVGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXllckltcGwoaW50IGlkKQogICAgIDog
Q0NMYXllckltcGwoaWQpCiAgICAgLCBtX3NraXBzRHJhdyh0cnVlKQorICAgICwgbV9jb250ZW50
c1N3aXp6bGVkKGZhbHNlKQogewogfQogCkBAIC05Nyw3ICs5OSw3IEBAIERyYXdhYmxlVGlsZSog
Q0NUaWxlZExheWVySW1wbDo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCiAgICAgcmV0dXJuIHRp
bGUuZ2V0KCk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IENDVGlsZWRMYXllckltcGw6OnRp
bGluZ1RyYW5zZm9ybSgpIGNvbnN0CitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ1RpbGVkTGF5ZXJJ
bXBsOjpxdWFkVHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtKCk7CiAKQEAgLTExMiw2MyArMTE0LDUwIEBAIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IENDVGlsZWRMYXllckltcGw6OnRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0
CiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3ZvaWQgQ0NUaWxlZExheWVy
SW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpCiB7Ci0gICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0
ID0gdmlzaWJsZUxheWVyUmVjdCgpOworICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0ID0g
dmlzaWJsZUxheWVyUmVjdCgpOwogCi0gICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX3RpbGVyIHx8
IG1fdGlsZXItPmlzRW1wdHkoKSB8fCBsYXllclJlY3QuaXNFbXB0eSgpIHx8ICFsYXllclJlbmRl
cmVyKQorICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV90aWxlciB8fCBtX3RpbGVyLT5pc0VtcHR5
KCkgfHwgY29udGVudFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybSA9IHRpbGluZ1RyYW5zZm9ybSgpOwotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZU1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KGxheWVyUmVuZGVyZXItPndpbmRvd01hdHJpeCgpICogbGF5ZXJSZW5kZXJlci0+cHJvamVjdGlv
bk1hdHJpeCgpICogbGF5ZXJUcmFuc2Zvcm0pLnRvMmRUcmFuc2Zvcm0oKTsKKyAgICBpbnQgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5k
aWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBJbnRSZWN0
IGxheWVyUmVjdCA9IG1fdGlsZXItPmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3Qp
OworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9y
IChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgRHJhd2FibGVU
aWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9
IG1fdGlsZXItPnRpbGVCb3VuZHMoaSwgaik7CisgICAgICAgICAgICBJbnRSZWN0IGRpc3BsYXlS
ZWN0ID0gdGlsZVJlY3Q7CisgICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3QobGF5ZXJSZWN0
KTsKIAotICAgIC8vIERvbid0IGRyYXcgYW55IHRpbGVzIHdoZW4gZGV2aWNlIG1hdHJpeCBpcyBu
b3QgaW52ZXJ0aWJsZS4KLSAgICBpZiAoIWRldmljZU1hdHJpeC5pc0ludmVydGlibGUoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgLy8gU2tpcCBlbXB0eSB0aWxlcy4KKyAgICAgICAg
ICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICBGbG9hdFF1YWQgcXVhZCA9IGRldmljZU1hdHJpeC5tYXBRdWFkKEZsb2F0UXVhZChsYXll
clJlY3QpKTsKLSAgICBDQ0xheWVyUXVhZCBkZXZpY2VSZWN0ID0gQ0NMYXllclF1YWQoRmxvYXRR
dWFkKHF1YWQuYm91bmRpbmdCb3goKSkpOwotICAgIENDTGF5ZXJRdWFkIGxheWVyUXVhZCA9IEND
TGF5ZXJRdWFkKHF1YWQpOworICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT50ZXh0dXJl
SWQoKSkgeworICAgICAgICAgICAgICAgIHF1YWRMaXN0LmFwcGVuZChDQ1NvbGlkQ29sb3JEcmF3
UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgdGlsZVJlY3QsIGJhY2tncm91bmRDb2xvcigp
KSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEtlZXAgdHJhY2sgb2YgaG93IHRoZSB0b3AgbGVmdCBoYXMgbW92ZWQsIHNvIHRoZSB0
ZXh0dXJlIGNhbiBiZQorICAgICAgICAgICAgLy8gb2Zmc2V0IHRoZSBzYW1lIGFtb3VudC4KKyAg
ICAgICAgICAgIEludFNpemUgZGlzcGxheU9mZnNldCA9IHRpbGVSZWN0Lm1pblhNaW5ZQ29ybmVy
KCkgLSBkaXNwbGF5UmVjdC5taW5YTWluWUNvcm5lcigpOworICAgICAgICAgICAgSW50UG9pbnQg
dGV4dHVyZU9mZnNldCA9IG1fdGlsZXItPnRleHR1cmVPZmZzZXQoaSwgaikgKyBkaXNwbGF5T2Zm
c2V0OworICAgICAgICAgICAgZmxvYXQgdGlsZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1f
dGlsZXItPnRpbGVTaXplKCkud2lkdGgoKSk7CisgICAgICAgICAgICBmbG9hdCB0aWxlSGVpZ2h0
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZXItPnRpbGVTaXplKCkuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZSh0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwogCi0g
ICAgLy8gVXNlIGFudGktYWxpYXNpbmcgcHJvZ3JhbXMgb25seSB3aGVuIG5lY2Vzc2FyeS4KLSAg
ICBib29sIHVzZUFBID0gKG1fdGlsZXItPmhhc0JvcmRlclRleGVscygpICYmICghcXVhZC5pc1Jl
Y3RpbGluZWFyKCkgfHwgIXF1YWQuYm91bmRpbmdCb3goKS5pc0V4cHJlc3NpYmxlQXNJbnRSZWN0
KCkpKTsKKyAgICAgICAgICAgIGJvb2wgdXNlQUEgPSBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMo
KSAmJiAhc2hhcmVkUXVhZFN0YXRlLT5pc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KCk7CiAKLSAg
ICBpZiAodXNlQUEpIHsKLSAgICAgICAgZGV2aWNlUmVjdC5pbmZsYXRlQW50aUFsaWFzaW5nRGlz
dGFuY2UoKTsKLSAgICAgICAgbGF5ZXJRdWFkLmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgp
OwotICAgIH0KKyAgICAgICAgICAgIGJvb2wgbGVmdEVkZ2VBQSA9ICFpICYmIHVzZUFBOworICAg
ICAgICAgICAgYm9vbCB0b3BFZGdlQUEgPSAhaiAmJiB1c2VBQTsKKyAgICAgICAgICAgIGJvb2wg
cmlnaHRFZGdlQUEgPSBpID09IG1fdGlsZXItPm51bVRpbGVzWCgpIC0gMSAmJiB1c2VBQTsKKyAg
ICAgICAgICAgIGJvb2wgYm90dG9tRWRnZUFBID0gaiA9PSBtX3RpbGVyLT5udW1UaWxlc1koKSAt
IDEgJiYgdXNlQUE7CiAKLSAgICBzd2l0Y2ggKG1fc2FtcGxlZFRleGVsRm9ybWF0KSB7Ci0gICAg
Y2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOgotICAgICAg
ICBpZiAodXNlQUEpIHsKLSAgICAgICAgICAgIGNvbnN0IFByb2dyYW1BQSogcHJvZ3JhbSA9IGxh
eWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbUFBKCk7Ci0gICAgICAgICAgICBkcmF3VGlsZXMobGF5
ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZp
Y2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCBwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkpIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBQcm9ncmFtT3BhcXVlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtT3Bh
cXVlKCk7Ci0gICAgICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVj
dCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBk
cmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBjb25zdCBQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGls
ZXJQcm9ncmFtKCk7Ci0gICAgICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxh
eWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJR
dWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2Ft
cGxlZFRleGVsRm9ybWF0QkdSQToKLSAgICAgICAgaWYgKHVzZUFBKSB7Ci0gICAgICAgICAgICBj
b25zdCBQcm9ncmFtU3dpenpsZUFBKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9n
cmFtU3dpenpsZUFBKCk7Ci0gICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5
ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1
YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJh
Z21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVk
Z2VMb2NhdGlvbigpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc05vbkNv
bXBvc2l0ZWRDb250ZW50KCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBQcm9ncmFtU3dpenps
ZU9wYXF1ZSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGVPcGFx
dWUoKTsKLSAgICAgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0
LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRy
YXdPcGFjaXR5KCksIHByb2dyYW0sIC0xLCAtMSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGNvbnN0IFByb2dyYW1Td2l6emxlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJl
ci0+dGlsZXJQcm9ncmFtU3dpenpsZSgpOwotICAgICAgICAgICAgICAgIGRyYXdUaWxlcyhsYXll
clJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmlj
ZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgLTEsIC0xKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IEdDM0RpbnQgdGV4dHVyZUZpbHRlciA9IG1fdGls
ZXItPmhhc0JvcmRlclRleGVscygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBo
aWNzQ29udGV4dDNEOjpORUFSRVNUOworICAgICAgICAgICAgcXVhZExpc3QuYXBwZW5kKENDVGls
ZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCB0aWxlUmVjdCwgdGlsZS0+dGV4dHVy
ZUlkKCksIHRleHR1cmVPZmZzZXQsIHRleHR1cmVTaXplLCB0ZXh0dXJlRmlsdGVyLCBjb250ZW50
c1N3aXp6bGVkKCksIGxlZnRFZGdlQUEsIHRvcEVkZ2VBQSwgcmlnaHRFZGdlQUEsIGJvdHRvbUVk
Z2VBQSkpOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIH0KIApAQCAtMTg5LDE5MCArMTc4LDYgQEAg
dm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpzeW5jVGV4dHVyZUlkKGludCBpLCBpbnQgaiwgUGxhdGZv
cm0zRE9iamVjdCB0ZXh0dXJlSWQpCiAgICAgdGlsZS0+c2V0VGV4dHVyZUlkKHRleHR1cmVJZCk7
CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3VGls
ZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2JhbFRyYW5zZm9ybSwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSwgY29uc3QgQ0NMYXll
clF1YWQmIGRldmljZVJlY3QsIGNvbnN0IENDTGF5ZXJRdWFkJiBjb250ZW50UXVhZCwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgaW50IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRp
b24sIGludCBlZGdlTG9jYXRpb24pCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQg
PSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVz
ZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAw
KSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkVHJhbnNm
b3JtID0gZGV2aWNlVHJhbnNmb3JtLmludmVyc2UoKTsKLQotICAgIGlmIChlZGdlTG9jYXRpb24g
IT0gLTEpIHsKLSAgICAgICAgZmxvYXQgZWRnZVsyNF07Ci0gICAgICAgIGNvbnRlbnRRdWFkLnRv
RmxvYXRBcnJheShlZGdlKTsKLSAgICAgICAgZGV2aWNlUmVjdC50b0Zsb2F0QXJyYXkoJmVkZ2Vb
MTJdKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0zZnYoZWRnZUxvY2F0
aW9uLCBlZGdlLCA4KSk7Ci0gICAgfQotCi0gICAgQ0NMYXllclF1YWQ6OkVkZ2UgcHJldkVkZ2VZ
ID0gY29udGVudFF1YWQudG9wKCk7Ci0KLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
OwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICBJbnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsZXIt
PmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwotICAgIGZsb2F0IHNpZ24gPSBG
bG9hdFF1YWQoY29udGVudFJlY3QpLmlzQ291bnRlcmNsb2Nrd2lzZSgpID8gLTEgOiAxOwotICAg
IGNvbnN0IEdDM0RpbnQgZmlsdGVyID0gbV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCkgPyBHcmFw
aGljc0NvbnRleHQzRDo6TElORUFSIDogR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1Q7Ci0gICAg
Zm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewotICAgICAgICBDQ0xheWVyUXVh
ZDo6RWRnZSBwcmV2RWRnZVggPSBjb250ZW50UXVhZC5sZWZ0KCk7Ci0KLSAgICAgICAgQ0NMYXll
clF1YWQ6OkVkZ2UgZWRnZVkgPSBjb250ZW50UXVhZC5ib3R0b20oKTsKLSAgICAgICAgaWYgKGog
PCAobV90aWxlci0+bnVtVGlsZXNZKCkgLSAxKSkgewotICAgICAgICAgICAgSW50UmVjdCB0aWxl
UmVjdCA9IHVuaW9uUmVjdChtX3RpbGVyLT50aWxlQm91bmRzKDAsIGopLCBtX3RpbGVyLT50aWxl
Qm91bmRzKG1fdGlsZXItPm51bVRpbGVzWCgpIC0gMSwgaikpOwotICAgICAgICAgICAgdGlsZVJl
Y3QuaW50ZXJzZWN0KGxheWVyUmVjdCk7Ci0KLSAgICAgICAgICAgIC8vIFNraXAgZW1wdHkgcm93
cy4KLSAgICAgICAgICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgIHRpbGVSZWN0ID0gbV90aWxlci0+bGF5ZXJSZWN0VG9D
b250ZW50UmVjdCh0aWxlUmVjdCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEodGlsZVJl
Y3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBwMih0
aWxlUmVjdC54KCksIHRpbGVSZWN0Lm1heFkoKSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBwb2lu
dHMgdG8gZGV2aWNlIHNwYWNlLgotICAgICAgICAgICAgcDEgPSBkZXZpY2VUcmFuc2Zvcm0ubWFw
UG9pbnQocDEpOwotICAgICAgICAgICAgcDIgPSBkZXZpY2VUcmFuc2Zvcm0ubWFwUG9pbnQocDIp
OwotCi0gICAgICAgICAgICAvLyBDb21wdXRlIGhvcml6b250YWwgZWRnZS4KLSAgICAgICAgICAg
IGVkZ2VZID0gQ0NMYXllclF1YWQ6OkVkZ2UocDEsIHAyKTsKLSAgICAgICAgICAgIGVkZ2VZLnNj
YWxlKHNpZ24pOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0g
cmlnaHQ7ICsraSkgewotICAgICAgICAgICAgRHJhd2FibGVUaWxlKiB0aWxlID0gdGlsZUF0KGks
IGopOwotCi0gICAgICAgICAgICAvLyBEb24ndCB1c2UgdGlsZUNvbnRlbnRSZWN0IGhlcmUsIGFz
IHRoYXQgY29udGFpbnMgdGhlIGZ1bGwKLSAgICAgICAgICAgIC8vIHJlY3Qgd2l0aCBib3JkZXIg
dGV4ZWxzIHdoaWNoIHNob3VsZG4ndCBiZSBkcmF3bi4KLSAgICAgICAgICAgIEludFJlY3QgdGls
ZVJlY3QgPSBtX3RpbGVyLT50aWxlQm91bmRzKGksIGopOwotICAgICAgICAgICAgSW50UmVjdCBk
aXNwbGF5UmVjdCA9IHRpbGVSZWN0OwotICAgICAgICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KGxh
eWVyUmVjdCk7Ci0KLSAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgaG93IHRoZSB0b3AgbGVm
dCBoYXMgbW92ZWQsIHNvIHRoZSB0ZXh0dXJlIGNhbiBiZQotICAgICAgICAgICAgLy8gb2Zmc2V0
IHRoZSBzYW1lIGFtb3VudC4KLSAgICAgICAgICAgIEludFNpemUgZGlzcGxheU9mZnNldCA9IHRp
bGVSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBkaXNwbGF5UmVjdC5taW5YTWluWUNvcm5lcigpOwot
Ci0gICAgICAgICAgICAvLyBTa2lwIGVtcHR5IHRpbGVzLgotICAgICAgICAgICAgaWYgKHRpbGVS
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
dGlsZVJlY3QgPSBtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGVSZWN0KTsKLQot
ICAgICAgICAgICAgRmxvYXRSZWN0IGNsYW1wUmVjdCh0aWxlUmVjdCk7Ci0gICAgICAgICAgICAv
LyBDbGFtcCB0ZXh0dXJlIGNvb3JkaW5hdGVzIHRvIGF2b2lkIHNhbXBsaW5nIG91dHNpZGUgdGhl
IGxheWVyCi0gICAgICAgICAgICAvLyBieSBkZWZsYXRpbmcgdGhlIHRpbGUgcmVnaW9uIGhhbGYg
YSB0ZXhlbCBvciBoYWxmIGEgdGV4ZWwKLSAgICAgICAgICAgIC8vIG1pbnVzIGVwc2lsb24gZm9y
IG9uZSBwaXhlbCBsYXllcnMuIFRoZSByZXN1bHRpbmcgY2xhbXAgcmVnaW9uCi0gICAgICAgICAg
ICAvLyBpcyBtYXBwZWQgdG8gdGhlIHVuaXQgc3F1YXJlIGJ5IHRoZSB2ZXJ0ZXggc2hhZGVyIGFu
ZCBtYXBwZWQKLSAgICAgICAgICAgIC8vIGJhY2sgdG8gbm9ybWFsaXplZCB0ZXh0dXJlIGNvb3Jk
aW5hdGVzIGJ5IHRoZSBmcmFnbWVudCBzaGFkZXIKLSAgICAgICAgICAgIC8vIGFmdGVyIGJlaW5n
IGNsYW1wZWQgdG8gMC0xIHJhbmdlLgotICAgICAgICAgICAgY29uc3QgZmxvYXQgZXBzaWxvbiA9
IDEgLyAxMDI0LjBmOwotICAgICAgICAgICAgZmxvYXQgY2xhbXBYID0gbWluKDAuNSwgY2xhbXBS
ZWN0LndpZHRoKCkgLyAyLjAgLSBlcHNpbG9uKTsKLSAgICAgICAgICAgIGZsb2F0IGNsYW1wWSA9
IG1pbigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAvIDIuMCAtIGVwc2lsb24pOwotICAgICAgICAg
ICAgY2xhbXBSZWN0LmluZmxhdGVYKC1jbGFtcFgpOwotICAgICAgICAgICAgY2xhbXBSZWN0Lmlu
ZmxhdGVZKC1jbGFtcFkpOwotICAgICAgICAgICAgRmxvYXRTaXplIGNsYW1wT2Zmc2V0ID0gY2xh
bXBSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBGbG9hdFJlY3QodGlsZVJlY3QpLm1pblhNaW5ZQ29y
bmVyKCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdGV4T2Zmc2V0ID0gbV90aWxlci0+dGV4
dHVyZU9mZnNldChpLCBqKSArIGNsYW1wT2Zmc2V0ICsgRmxvYXRTaXplKGRpc3BsYXlPZmZzZXQp
OwotICAgICAgICAgICAgZmxvYXQgdGlsZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGls
ZXItPnRpbGVTaXplKCkud2lkdGgoKSk7Ci0gICAgICAgICAgICBmbG9hdCB0aWxlSGVpZ2h0ID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZXItPnRpbGVTaXplKCkuaGVpZ2h0KCkpOwotCi0gICAg
ICAgICAgICAvLyBNYXAgY2xhbXBpbmcgcmVjdGFuZ2xlIHRvIHVuaXQgc3F1YXJlLgotICAgICAg
ICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWCA9IC1jbGFtcFJlY3QueCgpIC8gY2xhbXBS
ZWN0LndpZHRoKCk7Ci0gICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhUcmFuc2xhdGVZID0gLWNs
YW1wUmVjdC55KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBmbG9hdCB2ZXJ0
ZXhUZXhTY2FsZVggPSB0aWxlUmVjdC53aWR0aCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7Ci0gICAg
ICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVkgPSB0aWxlUmVjdC5oZWlnaHQoKSAvIGNsYW1w
UmVjdC5oZWlnaHQoKTsKLQotICAgICAgICAgICAgLy8gTWFwIHRvIG5vcm1hbGl6ZWQgdGV4dHVy
ZSBjb29yZGluYXRlcy4KLSAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4VHJhbnNsYXRlWCA9
IHRleE9mZnNldC54KCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRl
eFRyYW5zbGF0ZVkgPSB0ZXhPZmZzZXQueSgpIC8gdGlsZUhlaWdodDsKLSAgICAgICAgICAgIGZs
b2F0IGZyYWdtZW50VGV4U2NhbGVYID0gY2xhbXBSZWN0LndpZHRoKCkgLyB0aWxlV2lkdGg7Ci0g
ICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWSA9IGNsYW1wUmVjdC5oZWlnaHQoKSAv
IHRpbGVIZWlnaHQ7Ci0KLSAgICAgICAgICAgIC8vIE9wZW5HTCBjb29yZGluYXRlIHN5c3RlbSBp
cyBib3R0b20tdXAuCi0gICAgICAgICAgICAvLyBJZiB0aWxlIHRleHR1cmUgaXMgdG9wLWRvd24s
IHdlIG5lZWQgdG8gZmxpcCB0aGUgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAgICAgICAgICAgIGlm
IChtX3RleHR1cmVPcmllbnRhdGlvbiA9PSBMYXllclRleHR1cmVVcGRhdGVyOjpUb3BEb3duT3Jp
ZW50YXRpb24pIHsKLSAgICAgICAgICAgICAgICBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSAxLjAg
LSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnRUZXhTY2Fs
ZVkgKj0gLTEuMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ0NMYXllclF1YWQ6OkVk
Z2UgZWRnZVggPSBjb250ZW50UXVhZC5yaWdodCgpOwotICAgICAgICAgICAgaWYgKGkgPCAobV90
aWxlci0+bnVtVGlsZXNYKCkgLSAxKSkgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEo
dGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkpOwotICAgICAgICAgICAgICAgIEZsb2F0UG9p
bnQgcDIodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOwotCi0gICAgICAgICAgICAg
ICAgLy8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCi0gICAgICAgICAgICAgICAgcDEgPSBk
ZXZpY2VUcmFuc2Zvcm0ubWFwUG9pbnQocDEpOwotICAgICAgICAgICAgICAgIHAyID0gZGV2aWNl
VHJhbnNmb3JtLm1hcFBvaW50KHAyKTsKLQotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdmVy
dGljYWwgZWRnZS4KLSAgICAgICAgICAgICAgICBlZGdlWCA9IENDTGF5ZXJRdWFkOjpFZGdlKHAx
LCBwMik7Ci0gICAgICAgICAgICAgICAgZWRnZVguc2NhbGUoc2lnbik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3BhY2UgcXVhZC4KLSAgICAgICAgICAg
IENDTGF5ZXJRdWFkIGRldmljZVF1YWQocHJldkVkZ2VYLCBwcmV2RWRnZVksIGVkZ2VYLCBlZGdl
WSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBxdWFkIHRvIGxheWVyIHNwYWNlLgotICAgICAgICAg
ICAgRmxvYXRRdWFkIHF1YWQgPSBxdWFkVHJhbnNmb3JtLm1hcFF1YWQoZGV2aWNlUXVhZC5mbG9h
dFF1YWQoKSk7Ci0KLSAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxlUmVjdC4KLSAgICAg
ICAgICAgIHF1YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCksIDEuMGYgLyB0aWxlUmVj
dC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIGlmIChmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0
aW9uID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJh
bnNmb3JtIHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbwotICAgICAgICAgICAgICAgIC8vIHRo
aXMgd2hpbGUgc3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVzdWx0cyBhcwotICAgICAgICAgICAg
ICAgIC8vIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gc2hvdWxkIGFsd2F5cyBiZSBub24t
bmVnYXRpdmUKLSAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0cmFuc2Zvcm1lZCBp
biBhIHdheSB0aGF0IGNvdWxkIHJlc3VsdCBpbgotICAgICAgICAgICAgICAgIC8vIHNhbXBsaW5n
IG91dHNpZGUgdGhlIGxheWVyLgotICAgICAgICAgICAgICAgIHZlcnRleFRleFNjYWxlWCAqPSBm
cmFnbWVudFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJh
Z21lbnRUZXhTY2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWCAqPSBm
cmFnbWVudFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICo9
IGZyYWdtZW50VGV4U2NhbGVZOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVgg
Kz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5z
bGF0ZVkgKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00ZihmcmFnbWVudFRleFRy
YW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNs
YXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7Ci0KLSAgICAgICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVy
KCkudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4VGV4VHJhbnNsYXRlWCwgdmVy
dGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhTY2FsZVkpKTsKLQot
ICAgICAgICAgICAgaWYgKHRpbGUgJiYgdGlsZS0+dGV4dHVyZUlkKCkpIHsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
dGlsZS0+dGV4dHVyZUlkKCkpOwotICAgICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKLSAgICAgICAgICAgICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVyKSk7
Ci0KLSAgICAgICAgICAgICAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGdsb2Jh
bFRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCBvcGFjaXR5LCBxdWFkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFM
b2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsZVRyYW5z
Zm9ybSA9IGdsb2JhbFRyYW5zZm9ybTsKLSAgICAgICAgICAgICAgICB0aWxlVHJhbnNmb3JtLnRy
YW5zbGF0ZSh0aWxlUmVjdC54KCkgKyB0aWxlUmVjdC53aWR0aCgpIC8gMi4wLCB0aWxlUmVjdC55
KCkgKyB0aWxlUmVjdC5oZWlnaHQoKSAvIDIuMCk7Ci0KLSAgICAgICAgICAgICAgICBjb25zdCBM
YXllckNocm9taXVtOjpCb3JkZXJQcm9ncmFtKiBzb2xpZENvbG9yUHJvZ3JhbSA9IGxheWVyUmVu
ZGVyZXItPmJvcmRlclByb2dyYW0oKTsKLSAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dXNlUHJvZ3JhbShzb2xpZENvbG9yUHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0KLSAgICAg
ICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHNvbGlkQ29sb3JQcm9n
cmFtLT5mcmFnbWVudFNoYWRlcigpLmNvbG9yTG9jYXRpb24oKSwgYmFja2dyb3VuZENvbG9yKCku
cmVkKCksIGJhY2tncm91bmRDb2xvcigpLmdyZWVuKCksIGJhY2tncm91bmRDb2xvcigpLmJsdWUo
KSwgYmFja2dyb3VuZENvbG9yKCkuYWxwaGEoKSkpOwotCi0gICAgICAgICAgICAgICAgbGF5ZXJS
ZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZCh0aWxlVHJhbnNmb3JtLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJl
Y3QuaGVpZ2h0KCksIG9wYWNpdHksIHF1YWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzb2xpZENvbG9yUHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0
cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0xLCAtMSk7Ci0KLSAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcHJldkVkZ2VYID0gZWRnZVg7Ci0gICAgICAgICAgICAvLyBSZXZlcnNlIGRpcmVjdGlv
bi4KLSAgICAgICAgICAgIHByZXZFZGdlWC5zY2FsZSgtMSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBwcmV2RWRnZVkgPSBlZGdlWTsKLSAgICAgICAgLy8gUmV2ZXJzZSBkaXJlY3Rpb24uCi0gICAg
ICAgIHByZXZFZGdlWS5zY2FsZSgtMSk7Ci0gICAgfQotfQotCiB9CiAKICNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKaW5k
ZXggMTAwM2RiY2I1NjY2ODhjNTJjZDQyMWFiMDFmZDFiNjJmMTNhNzcwYS4uZTZmNmM4ZTJkMTE1
ZGM1MGUzN2JjYjYwMzZhYzY5MzdmM2ZlNmE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllcklt
cGwuaApAQCAtNDMsMTcgKzQzLDIwIEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+Q0NU
aWxlZExheWVySW1wbCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZExpc3QmLCBjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSopOworCiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1Rl
eHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcExh
eWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKICAgICB2b2lk
IHNldFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBzRHJhdyA9IHNraXBzRHJhdzsg
fQogICAgIHZvaWQgc2V0VGV4dHVyZU9yaWVudGF0aW9uKExheWVyVGV4dHVyZVVwZGF0ZXI6Ok9y
aWVudGF0aW9uIHRleHR1cmVPcmllbnRhdGlvbikgeyBtX3RleHR1cmVPcmllbnRhdGlvbiA9IHRl
eHR1cmVPcmllbnRhdGlvbjsgfQotICAgIHZvaWQgc2V0U2FtcGxlZFRleGVsRm9ybWF0KExheWVy
VGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQpIHsg
bV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSBzYW1wbGVkVGV4ZWxGb3JtYXQ7IH0KICAgICB2b2lkIHNl
dFRpbGluZ0RhdGEoY29uc3QgQ0NMYXllclRpbGluZ0RhdGEmIHRpbGVyKTsKICAgICB2b2lkIHN5
bmNUZXh0dXJlSWQoaW50LCBpbnQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKTsKIAorICAg
IHZvaWQgc2V0Q29udGVudHNTd2l6emxlZChib29sIGNvbnRlbnRzU3dpenpsZWQpIHsgbV9jb250
ZW50c1N3aXp6bGVkID0gY29udGVudHNTd2l6emxlZDsgfQorICAgIGJvb2wgY29udGVudHNTd2l6
emxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTd2l6emxlZDsgfQorCiAgICAgdHlwZWRl
ZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhB
bHBoYT4gUHJvZ3JhbTsKICAgICAvLyBTaGFkZXIgcHJvZ3JhbSB0aGF0IHN3YXBzIHJlZCBhbmQg
Ymx1ZSBjb21wb25lbnRzIG9mIHRleHR1cmUuCiAgICAgLy8gVXNlZCB3aGVuIHRleHR1cmUgZm9y
bWF0IGRvZXMgbm90IG1hdGNoIG5hdGl2ZSBjb2xvciBmb3JtYXQuCkBAIC03MiwyNSArNzUsMTgg
QEAgcHJvdGVjdGVkOgogICAgIC8vIEV4cG9zZWQgZm9yIHRlc3RpbmcuCiAgICAgYm9vbCBoYXNU
aWxlQXQoaW50LCBpbnQpIGNvbnN0OwogCisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBxdWFkVHJhbnNmb3JtKCkgY29uc3Q7CisKIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNvbnRlbnRMYXllciI7
IH0KIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0Owot
Ci0gICAgLy8gRHJhdyBhbGwgdGlsZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGUgY29udGVudCBy
ZWN0LgotICAgIHZvaWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5
KTsKLQogICAgIERyYXdhYmxlVGlsZSogdGlsZUF0KGludCwgaW50KSBjb25zdDsKICAgICBEcmF3
YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50LCBpbnQpOwogCi0gICAgLy8gRHJhdyBhbGwgdGlsZXMg
dGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdC4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4K
LSAgICB2b2lkIGRyYXdUaWxlcyhMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2JhbFRyYW5zZm9y
bSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSwgY29uc3QgQ0NM
YXllclF1YWQmIGRldmljZVJlY3QsIGNvbnN0IENDTGF5ZXJRdWFkJiBjb250ZW50UXVhZCwgZmxv
YXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgaW50IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9j
YXRpb24sIGludCBlZGdlTG9jYXRpb24pOwotCiAgICAgYm9vbCBtX3NraXBzRHJhdzsKKyAgICBi
b29sIG1fY29udGVudHNTd2l6emxlZDsKICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpPcmllbnRh
dGlvbiBtX3RleHR1cmVPcmllbnRhdGlvbjsKLSAgICBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1w
bGVkVGV4ZWxGb3JtYXQgbV9zYW1wbGVkVGV4ZWxGb3JtYXQ7CiAKICAgICBPd25QdHI8Q0NMYXll
clRpbGluZ0RhdGE+IG1fdGlsZXI7CiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGIzZWZmNmFkM2I5OGY5NWMyNWYxZjA3
NzhiODQwNWYxMDMyZmI1MWEuLjkxZWU3ZmRiMjBiYWE2NjkwZjM5NjkyMWY4MWE2N2M4YTMxNzFl
MDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMi0wNyAgQWRyaWVubmUgV2Fsa2VyICA8
ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgdGlsZSBkcmF3
aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTczMDU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFyayB0aHJlZSB0ZXN0cyBhcyBmYWlsaW5nIHdpdGggc21hbGwg
cGl4ZWwgZGlmZmVyZW5jZXMuIFRoZXNlIGp1c3QKKyAgICAgICAgbmVlZCByZWJhc2VsaW5pbmcu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisK
IDIwMTEtMTItMDggIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9zZWFyY2gtd2l0aC1mcmFtZXMuaHRtbCBj
cmFzaGVzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVj
dGF0aW9ucy50eHQKaW5kZXggZGI5YTMyZmVjMDA0NjI2ZDEwZjkxMGY4ZTBhMmY1NTFiMzJhOTk4
OS4uZjY0NjYyNDgwZGJiODIwNzAzMTNkNDE3MTZmZmY2YmFmMGMwZTliMSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dApAQCAt
Mzc5Niw2ICszNzk2LDExIEBAIEJVR1dLNzM5MDUgR1BVIExJTlVYIDogbWVkaWEvdmlkZW8tdHJh
bnNmb3JtZWQuaHRtbCA9IElNQUdFCiBCVUdXSzczOTA1IEdQVSBMSU5VWCA6IG1lZGlhL3ZpZGVv
LXpvb20tY29udHJvbHMuaHRtbCA9IElNQUdFCiBCVUdXSzczOTA1IEdQVSBXSU4gOiBtZWRpYS92
aWRlby1sYXllci1jcmFzaC5odG1sID0gVEVYVAogCisvLyBOZWVkIHJlYmFzZWxpbmUgb24gYWxs
IHBsYXRmb3JtcworQlVHRU5ORSA6IGNvbXBvc2l0aW5nL2NvbG9yLW1hdGNoaW5nL2ltYWdlLWNv
bG9yLW1hdGNoaW5nLmh0bWwgPSBGQUlMCitCVUdFTk5FIDogY29tcG9zaXRpbmcvZ2VvbWV0cnkv
dmVydGljYWwtc2Nyb2xsLWNvbXBvc2l0ZWQuaHRtbCA9IEZBSUwKK0JVR0VOTkUgOiBjb21wb3Np
dGluZy9zY2FsaW5nL3RpbGVkLWxheWVyLXJlY3Vyc2lvbi5odG1sID0gRkFJTAorCiBCVUdXSzcz
OTMzIERFQlVHIDogc3ZnL1czQy1TVkctMS4xLVNFL3N0cnVjdC1kb20tMTEtZi5zdmcgPSBUSU1F
T1VUIFBBU1MKIAogQlVHV0s3Mzk5MSBXSU43IFZJU1RBIFJFTEVBU0UgOiBmYXN0L3RleHQvaW50
ZXJuYXRpb25hbC9jb21wbGV4LWNoYXJhY3Rlci1iYXNlZC1mYWxsYmFjay5odG1sID0gSU1BR0Ur
VEVYVAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118624</attachid>
            <date>2011-12-09 13:34:43 -0800</date>
            <delta_ts>2011-12-12 10:43:03 -0800</delta_ts>
            <desc>Address Shawn&apos;s comments</desc>
            <filename>bug-73059-20111209133442.patch</filename>
            <type>text/plain</type>
            <size>122846</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTdhNTg1MjUwNjUyNTFi
NTJlYzA2MTVkNWJmMDViZDFmZmM0ZTlmOS4uYzA5ZTIzZTYyMTdiYWE1MmYyY2ZkZWVmOThjZWYx
ODIzNDgxMmIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MyBAQAorMjAxMS0xMi0wOSAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVm
YWN0b3IgdGlsZSBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDU5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFydGlhbGx5IHRlc3RlZCBieSBjb21w
b3NpdG9yIGxheW91dCB0ZXN0cy4gRGVidWcgYm9yZGVycyBhbmQKKyAgICAgICAgY2hlY2tlcmJv
YXJkaW5nIHRlc3RlZCBtYW51YWxseS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXJ0
IG9mIGEgbW92ZSB0b3dhcmRzIHJlbmRlcmluZyBxdWFkcyBvbiBzY3JlZW4KKyAgICAgICAgZnJv
bSBhIGJhZyBvZiBkYXRhIHJhdGhlciB0aGFuIGluIHZpcnR1YWwgQ0NMYXllckltcGw6OmRyYXcg
ZnVuY3Rpb25zLgorCisgICAgICAgIENDRHJhd1F1YWQtZGVyaXZlZCBjbGFzc2VzIHN0b3JlIG1h
dGVyaWFsLXNwZWNpZmljIHBpZWNlcyBvZiBkYXRhIHRvCisgICAgICAgIHVzZSB3aGVuIHJlbmRl
cmluZy4gQ0NMYXllckltcGwgY2xhc3NlcyBub3cgY3JlYXRlIHRoZXNlIENDRHJhd1F1YWQKKyAg
ICAgICAgb2JqZWN0cyByYXRoZXIgdGhhbiBpc3N1aW5nIGRpcmVjdCBHTCBjb21tYW5kcy4gV2hl
cmUgdGhpcyBkYXRhIGlzCisgICAgICAgIHNoYXJlZCBiZXR3ZWVuIHF1YWRzIHRoYXQgY29tZSBm
cm9tIHRoZSBzYW1lIGxheWVyLCB0aGF0IGRhdGEgaXMKKyAgICAgICAgc3RvcmVkIGluIGEgQ0NT
aGFyZWRRdWFkU3RhdGUgb2JqZWN0IHJhdGhlciB0aGFuIGR1cGxpY2F0ZWQuCisKKyAgICAgICAg
Q0NSZW5kZXJQYXNzIGlzIHRoZSBjbGFzcyB0aGF0IGhvbGRzIHRoZSBsaXN0IG9mIHF1YWRzIGFu
ZCB0aGUgdGFyZ2V0CisgICAgICAgIHN1cmZhY2UgdGhhdCB0aGV5IGRyYXcgaW50by4gRHJhd2lu
ZyBhIGZyYW1lIGNvbnNpc3RzIG9mIGRyYXdpbmcgYQorICAgICAgICBzZXJpZXMgb2YgcmVuZGVy
IHBhc3NlcyBvbnRvIHRoZWlyIHJlc3BlY3RpdmUgc3VyZmFjZXMuCisKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0SW1wbCBjb25zdHJ1Y3RzIHRoZXNlIHJlbmRlciBwYXNzZXMgZnJvbSB0aGUgb3V0
cHV0IG9mCisgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSBieSBh
c2tpbmcgZWFjaCBsYXllciB0byBpbnNlcnQKKyAgICAgICAgcXVhZHMgaW50byBhIGxpc3QgYW5k
IGhhbmRzIHRoZW0gb2ZmIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bSBmb3IKKyAgICAgICAgcmVu
ZGVyaW5nLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclN1cmZhY2VRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29s
b3JRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnRpbGVVbmlmb3JtTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZFRpbGVQcm9ncmFtVW5pZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Q3VzdG9tTGF5ZXJRdWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRU
aWxlQmluZGluZ0Jhc2U6OmFscGhhTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21l
bnRUaWxlQmluZGluZ0Jhc2U6OmVkZ2VMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFn
bWVudFRpbGVCaW5kaW5nQmFzZTo6ZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFnbWVudFRpbGVCaW5kaW5nQmFzZTo6c2FtcGxlckxvY2F0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGll
c1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxh
eWVyRHJhd1F1YWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDQ3VzdG9tTGF5ZXJE
cmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQ3VzdG9tTGF5ZXJEcmF3UXVh
ZDo6Q0NDdXN0b21MYXllckRyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0N1c3RvbUxheWVyRHJhd1F1YWQ6OmxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6Q0NEZWJ1Z0JvcmRlckRyYXdRdWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJh
d1F1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6
OmNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6d2lkdGgp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJR
dWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjpDQ0RyYXdRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6OnRvRGVidWdCb3JkZXJEcmF3UXVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b1NvbGlkQ29sb3JEcmF3UXVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b1RpbGVEcmF3UXVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b0N1c3RvbUxheWVyRHJhd1F1YWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJRdWFkLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RyYXdRdWFkOjpxdWFkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdR
dWFkOjpsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjpsYXll
clJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6Y2xpcFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Ry
YXdRdWFkOjppc09wYXF1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NEcmF3UXVhZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6
Q0NEcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b0RlYnVnQm9yZGVy
RHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9SZW5kZXJTdXJmYWNl
RHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9Tb2xpZENvbG9yRHJh
d1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9UaWxlRHJhd1F1YWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9DdXN0b21MYXllckRyYXdRdWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6cXVhZFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NEcmF3UXVhZDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Ry
YXdRdWFkOjpsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjps
YXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6Y2xpcFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0RyYXdRdWFkOjppc09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjppc0xh
eWVyQXhpc0FsaWduZWRJbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6Om1h
dGVyaWFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2hhcmVkUXVhZFN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6YXBwZW5kRGVidWdCb3JkZXJRdWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2NyZWVuU3BhY2VUcmFuc2Zvcm1Gb3JTdXJmYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRl
clBhc3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5
ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OkNDUmVuZGVyUGFzcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpxdWFkTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OnRhcmdldFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJQYXNzOjpzZXRTdXJmYWNlRGFtYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlclBhc3M6OnN1cmZhY2VEYW1hZ2VSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZURyYXdRdWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6OmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZURy
YXdRdWFkOjpzdXJmYWNlRGFtYWdlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFy
ZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2hh
cmVkUXVhZFN0YXRlOjppc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpxdWFkVHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpsYXllclRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6bGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpjbGlwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1No
YXJlZFF1YWRTdGF0ZTo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRT
dGF0ZTo6aXNPcGFxdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU29saWRDb2xvckRyYXdRdWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1Nv
bGlkQ29sb3JEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU29saWRDb2xv
ckRyYXdRdWFkOjpDQ1NvbGlkQ29sb3JEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6Y29sb3IpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGlsZURyYXdRdWFkOjpDQ1RpbGVEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ1RpbGVEcmF3UXVhZDo6dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGls
ZURyYXdRdWFkOjp0ZXh0dXJlT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdR
dWFkOjp0ZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6dGV4
dHVyZUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6c3dpenpsZUNv
bnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdRdWFkOjpsZWZ0RWRnZUFBKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdRdWFkOjp0b3BFZGdlQUEpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaWxlRHJhd1F1YWQ6OnJpZ2h0RWRnZUFBKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGlsZURyYXdRdWFkOjpib3R0b21FZGdlQUEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxl
RHJhd1F1YWQ6OmlzQW50aWFsaWFzZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlRHJhd1F1
YWQ6OmlzT3BhcXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6
OkNDVGlsZWRMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6
cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjphcHBl
bmRRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxl
ZExheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6c2V0Q29u
dGVudHNTd2l6emxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpjb250
ZW50c1N3aXp6bGVkKToKKwogMjAxMS0xMi0wOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZCB0byBp
bnZhbGlkYXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZDE5OTBhOWRiMWNhMjg4YmMyN2YyMDFjOTIz
YmEyODA5ZDAyZTAyYy4uMDUxMmE0ZDQ0OTY0NjEzMTY4MWExODNkMzAwMWRhYjNkMTNlMzk3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzU5MSwxMCArMzU5MSwxNiBAQAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5
ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
Q3VzdG9tTGF5ZXJEcmF3UXVhZC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRy
YXdRdWFkLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFk
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVS
YXRlQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCkBAIC0zNjIwLDE3ICsz
NjI2LDI3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
bHVnaW5MYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQcm94eS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJveHkuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZURyYXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2NoZWR1bGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTY2hlZHVsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRo
cmVhZFByb3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2hhcmVkUXVhZFN0YXRlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9y
RHJhd1F1YWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXgg
YTA2Mjk0MTRkY2UzNTA1YmY4OTViODg5MzM1MjA5Njg0MWJiNTg2Yy4uYzhiNWI1MjUzY2ZhNDA1
OThkZmZmMDljOWZiMzA5ZTQ3MDZhMDc3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCkBAIC01Miw3ICs1MiwxMyBAQAogI2luY2x1ZGUgIlRyYWNraW5nVGV4dHVyZUFs
bG9jYXRvci5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJXZWJH
TExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuaCIK
ICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0RlYnVnQm9y
ZGVyRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKKyNpbmNsdWRlICJj
Yy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRy
YXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2lu
Y2x1ZGUgImNjL0NDUHJveHkuaCIKQEAgLTEwNywyMSArMTEzLDYgQEAgc3RhdGljIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHNjcmVlbk1hdHJpeChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCkKICAgICByZXR1cm4gc2NyZWVuOwogfQogCi1zdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRy
aXggY29tcHV0ZVNjcmVlblNwYWNlVHJhbnNmb3JtRm9yU3VyZmFjZShDQ0xheWVySW1wbCogcmVu
ZGVyU3VyZmFjZUxheWVyKQotewotICAgIC8vIFRoZSBsYXllcidzIHNjcmVlbiBzcGFjZSB0cmFu
c2Zvcm0gY2FuIGJlIHdyaXR0ZW4gYXM6Ci0gICAgLy8gICBsYXllclNjcmVlblNwYWNlVHJhbnNm
b3JtID0gc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtICogbGF5ZXJPcmlnaW5UcmFuc2Zvcm0K
LSAgICAvLyBTbywgdG8gY29tcHV0ZSB0aGUgc3VyZmFjZSBzY3JlZW4gc3BhY2UsIHdlIGNhbiBk
bzoKLSAgICAvLyAgIHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IGxheWVyU2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0gKiBpbnZlcnNlKGxheWVyT3JpZ2luVHJhbnNmb3JtKQotCi0gICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlTGF5ZXIt
PmRyYXdUcmFuc2Zvcm0oKTsKLSAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUoLTAu
NSAqIHJlbmRlclN1cmZhY2VMYXllci0+Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIHJlbmRlclN1
cmZhY2VMYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKTsKLSAgICBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0ubXVsdGlw
bHkobGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpKTsKLQotICAgIHJldHVybiBzdXJmYWNl
U2NyZWVuU3BhY2VUcmFuc2Zvcm07Ci19Ci0KICNpZiBVU0UoU0tJQSkKIGJvb2wgY29udGV4dFN1
cHBvcnRzQWNjZWxlcmF0ZWRQYWludGluZyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsK
QEAgLTMxOSw1MiArMzEwLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0
Q2hhbmdlZCgpCiAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7CiB9CiAKLXZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKLXsKLSAgICAvLyBGSVhNRTogdXNlIHRo
ZSBmcmFtZSBiZWdpbiB0aW1lIGZyb20gdGhlIG92ZXJhbGwgY29tcG9zaXRvciBzY2hlZHVsZXIu
Ci0gICAgLy8gVGhpcyB2YWx1ZSBpcyBjdXJyZW50bHkgaW5hY2Nlc3NpYmxlIGJlY2F1c2UgaXQg
aXMgdXAgaW4gQ2hyb21pdW0ncwotICAgIC8vIFJlbmRlcldpZGdldC4KLSAgICBtX2hlYWRzVXBE
aXNwbGF5LT5vbkZyYW1lQmVnaW4oY3VycmVudFRpbWUoKSk7Ci0KLSAgICBpZiAoIXJvb3RMYXll
cigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplX3QgY29udGVudHNNZW1vcnlVc2VCeXRl
cyA9IG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKTsK
LSAgICBzaXplX3QgbWF4TGltaXQgPSBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmll
d3BvcnRTaXplKCkpOwotICAgIHNpemVfdCByZWNsYWltTGltaXQgPSBUZXh0dXJlTWFuYWdlcjo6
cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpOwotCi0gICAgbV9yZW5kZXJTdXJmYWNl
VGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMobWF4TGltaXQgLSBjb250ZW50
c01lbW9yeVVzZUJ5dGVzKTsKLQotICAgIGRyYXdMYXllcnNJbnRlcm5hbCgpOwotCi0gICAgaWYg
KHJlY2xhaW1MaW1pdCA+IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpCi0gICAgICAgIG1fcmVuZGVy
U3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xh
aW1MaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9y
ZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMo
MCk7Ci0KLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRl
eHR1cmVzKG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwotCi0gICAgaWYg
KHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVuKQotICAgICAgICBjb3B5T2Zmc2NyZWVuVGV4
dHVyZVRvRGlzcGxheSgpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dHJhY2tE
YW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCi17Ci0gICAgLy8gRm9yIG5vdywgd2Ug
dXNlIGRhbWFnZSB0cmFja2luZyB0byBjb21wdXRlIGEgZ2xvYmFsIHNjaXNzb3IuIFRvIGRvIHRo
aXMsIHdlIG11c3QKLSAgICAvLyBjb21wdXRlIGFsbCBkYW1hZ2UgdHJhY2tpbmcgYmVmb3JlIGRy
YXdpbmcgYW55dGhpbmcsIHNvIHRoYXQgd2Uga25vdyB0aGUgcm9vdAotICAgIC8vIGRhbWFnZSBy
ZWN0LiBUaGUgcm9vdCBkYW1hZ2UgcmVjdCBpcyB0aGVuIHVzZWQgdG8gc2Npc3NvciBlYWNoIHN1
cmZhY2UuCi0KLSAgICBBU1NFUlQobV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCk7Ci0K
LSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUo
KSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgQ0NM
YXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3Vy
ZmFjZUluZGV4XS5nZXQoKTsKLSAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNl
ID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIEFTU0VSVChy
ZW5kZXJTdXJmYWNlKTsKLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+ZGFtYWdlVHJhY2tlcigpLT51
cGRhdGVEYW1hZ2VSZWN0Rm9yTmV4dEZyYW1lKHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCBy
ZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCksIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkp
OwotICAgIH0KLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyU3VyZmFjZUZv
ckRlYnVnKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIENDTGF5ZXJJbXBsKiByb290
RHJhd0xheWVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KQordm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNsZWFyU3VyZmFjZUZvckRlYnVnKENDUmVuZGVyU3VyZmFjZSog
cmVuZGVyU3VyZmFjZSwgQ0NSZW5kZXJTdXJmYWNlKiByb290UmVuZGVyU3VyZmFjZSwgY29uc3Qg
RmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKIHsKICAgICAvLyBOb24tcm9vdCBsYXllcnMg
c2hvdWxkIGNsZWFyIHRoZWlyIGVudGlyZSBjb250ZW50cyB0byB0cmFuc3BhcmVudC4gVGhlIHJv
b3QgbGF5ZXIKICAgICAvLyBpcyBjbGVhcmVkIHRvIGJsdWUgdG8gZWFzaWx5IHNlZSByZWdpb25z
IHRoYXQgd2VyZSBub3QgZHJhd24gb24gdGhlIHNjcmVlbi4gSWYgd2UKQEAgLTM3Miw3ICszMTgs
NyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJTdXJmYWNlRm9yRGVidWcoQ0NM
YXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllcgogICAgIC8vIGNsZWFyIHRoZSBkYW1hZ2VkIHJl
Z2lvbiwgc28gdGhhdCB3ZSBkb24ndCBhY2NpZGVudGFsbHkgY2xlYXIgdW4tY2hhbmdlZCBwb3J0
aW9ucwogICAgIC8vIG9mIHRoZSBzY3JlZW4uCiAKLSAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVy
ICE9IHJvb3REcmF3TGF5ZXIpCisgICAgaWYgKHJlbmRlclN1cmZhY2UgIT0gcm9vdFJlbmRlclN1
cmZhY2UpCiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXJDb2xv
cigwLCAwLCAwLCAwKSk7CiAgICAgZWxzZQogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMSwgMSkpOwpAQCAtMzg2LDU2ICszMzIsMTkgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyU3VyZmFjZUZvckRlYnVnKENDTGF5ZXJJ
bXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiB9CiAKLXZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5
ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZSgp
CiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09u
dG9SZW5kZXJTdXJmYWNlcyIsIHRoaXMsIDApOwotCi0gICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVz
aW5nUGFydGlhbFN3YXApCi0gICAgICAgIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdERy
YXdMYXllciwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgbV9yb290RGFtYWdlUmVjdCA9
IHJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVuZGVy
IHN1cmZhY2VzLiBXZSB0cmF2ZXJzZSB0aGUgcmVuZGVyIHN1cmZhY2VzCi0gICAgLy8gZnJvbSBi
YWNrIHRvIGZyb250IHRvIGd1YXJhbnRlZSB0aGF0IG5lc3RlZCByZW5kZXIgc3VyZmFjZXMgZ2V0
IHJlbmRlcmVkIGluCi0gICAgLy8gdGhlIGNvcnJlY3Qgb3JkZXIuCi0gICAgZm9yIChpbnQgc3Vy
ZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5k
ZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJT
dXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7
Ci0gICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VM
YXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7Ci0g
ICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsKLQotICAgICAgICBp
ZiAodXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkgewotCi0gICAgICAgICAgICBGbG9h
dFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7Ci0gICAgICAgICAgICBpZiAobV9jYXBhYmlsaXRpZXMu
dXNpbmdQYXJ0aWFsU3dhcCkgewotICAgICAgICAgICAgICAgIC8vIEZvciBub3csIHdlIGNvbnNl
cnZhdGl2ZWx5IHVzZSB0aGUgcm9vdCBkYW1hZ2UgYXMgdGhlIGRhbWFnZSBmb3IgYWxsCi0gICAg
ICAgICAgICAgICAgLy8gc3VyZmFjZXMsIGV4Y2VwdCBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm1zLgot
ICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3Jt
ID0gY29tcHV0ZVNjcmVlblNwYWNlVHJhbnNmb3JtRm9yU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5
ZXIpOwotICAgICAgICAgICAgICAgIGlmIChzY3JlZW5TcGFjZVRyYW5zZm9ybS5oYXNQZXJzcGVj
dGl2ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25z
IGRvIG5vdCBwbGF5IG5pY2Ugd2l0aCBtYXBSZWN0IG9mIGludmVyc2UgdHJhbnNmb3Jtcy4KLSAg
ICAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyB1bmNvbW1vbiBjYXNlLCBpdHMgc2ltcGxlciB0
byBqdXN0IHJlZHJhdyB0aGUgZW50aXJlIHN1cmZhY2UuCi0gICAgICAgICAgICAgICAgICAgIHN1
cmZhY2VEYW1hZ2VSZWN0ID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybS5pbnZl
cnNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNj
cmVlblNwYWNlVHJhbnNmb3JtLm1hcFJlY3QobV9yb290RGFtYWdlUmVjdCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBGSVhNRTogZXZlbnR1YWxs
eSB3ZSBzaG91bGQgcGxhY2UgdGhpcyB1bmRlciBhIGRlYnVnIGZsYWcuCi0gICAgICAgICAgICBj
bGVhclN1cmZhY2VGb3JEZWJ1ZyhyZW5kZXJTdXJmYWNlTGF5ZXIsIHJvb3REcmF3TGF5ZXIsIHN1
cmZhY2VEYW1hZ2VSZWN0KTsKLQotICAgICAgICAgICAgY29uc3QgQ0NMYXllckxpc3QmIGxheWVy
TGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5
ZXJJbmRleCkKLSAgICAgICAgICAgICAgICBkcmF3TGF5ZXIobGF5ZXJMaXN0W2xheWVySW5kZXhd
LmdldCgpLCByZW5kZXJTdXJmYWNlLCBzdXJmYWNlRGFtYWdlUmVjdCk7Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSA9IHJvb3RMYXllcigpLT5yZW5kZXJTdXJm
YWNlKCk7CiAKLSAgICAvLyBUaGUgbmV4dCBmcmFtZSBzaG91bGQgc3RhcnQgYnkgYXNzdW1pbmcg
bm90aGluZyBoYXMgY2hhbmdlZCwgYW5kIGNoYW5nZXMgYXJlIG5vdGVkIGFzIHRoZXkgb2NjdXIu
Ci0gICAgcm9vdERyYXdMYXllci0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsK
LX0KKyAgICAvLyBGSVhNRTogdXNlIHRoZSBmcmFtZSBiZWdpbiB0aW1lIGZyb20gdGhlIG92ZXJh
bGwgY29tcG9zaXRvciBzY2hlZHVsZXIuCisgICAgLy8gVGhpcyB2YWx1ZSBpcyBjdXJyZW50bHkg
aW5hY2Nlc3NpYmxlIGJlY2F1c2UgaXQgaXMgdXAgaW4gQ2hyb21pdW0ncworICAgIC8vIFJlbmRl
cldpZGdldC4KKyAgICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVnaW4oY3VycmVudFRpbWUo
KSk7CiAKKyAgICBzaXplX3QgY29udGVudHNNZW1vcnlVc2VCeXRlcyA9IG1fY29udGVudHNUZXh0
dXJlQWxsb2NhdG9yLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKTsKKyAgICBzaXplX3QgbWF4TGlt
aXQgPSBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpOworICAg
IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1h
eExpbWl0IC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQotewogICAgIGlmICh2aWV3cG9ydFNpemUoKS5p
c0VtcHR5KCkgfHwgIXJvb3RMYXllcigpKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ0OCwyNyAr
MzU3LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgp
CiAgICAgICAgIG1fY29udGV4dC0+cmVzaGFwZSh2aWV3cG9ydFdpZHRoKCksIHZpZXdwb3J0SGVp
Z2h0KCkpOwogICAgIH0KIAotICAgIENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gcm9vdExh
eWVyKCk7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAoIXJvb3REcmF3TGF5
ZXItPnJlbmRlclN1cmZhY2UoKSkKLSAgICAgICAgcm9vdERyYXdMYXllci0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOwotICAgIHJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVu
dFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCB2aWV3cG9ydFNpemUoKSkpOwotCi0gICAgcm9vdERy
YXdMYXllci0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCB2aWV3cG9ydFNpemUoKSkp
OwotCi0gICAgQ0NMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290RHJhd0xheWVyKTsKLQotICAgIG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UgPSByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgbV9kZWZh
dWx0UmVuZGVyU3VyZmFjZS0+Y2xlYXJMYXllckxpc3QoKTsKLQotICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGlkZW50aXR5TWF0cml4OwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsOjpjYWxjRHJhd0V0YyIsIHRoaXMs
IDApOwotICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShyb290RHJhd0xheWVyLCByb290RHJhd0xheWVyLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCAmbV9sYXllclNvcnRlciwgbV9jYXBhYmlsaXRpZXMu
bWF4VGV4dHVyZVNpemUpOwotICAgIH0KLQogICAgIC8vIFRoZSBHTCB2aWV3cG9ydCBjb3ZlcnMg
dGhlIGVudGlyZSB2aXNpYmxlIGFyZWEsIGluY2x1ZGluZyB0aGUgc2Nyb2xsYmFycy4KICAgICBH
TEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0V2lk
dGgoKSwgdmlld3BvcnRIZWlnaHQoKSkpOwogICAgIG1fd2luZG93TWF0cml4ID0gc2NyZWVuTWF0
cml4KDAsIDAsIHZpZXdwb3J0V2lkdGgoKSwgdmlld3BvcnRIZWlnaHQoKSk7CkBAIC00ODEsOSAr
MzcwLDMwNSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFs
KCkKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0
cnVlLCB0cnVlLCB0cnVlKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5l
bmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQo
KSwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3ND
b250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykK
K3sKKyAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJQYXNzLT50YXJn
ZXRTdXJmYWNlKCk7CisgICAgaWYgKCF1c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogZXZlbnR1YWxseSB3ZSBzaG91bGQgcGxh
Y2UgdGhpcyB1bmRlciBhIGRlYnVnIGZsYWcuCisgICAgY2xlYXJTdXJmYWNlRm9yRGVidWcocmVu
ZGVyU3VyZmFjZSwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSwgcmVuZGVyUGFzcy0+c3VyZmFjZURh
bWFnZVJlY3QoKSk7CisKKyAgICBjb25zdCBDQ1F1YWRMaXN0JiBxdWFkTGlzdCA9IHJlbmRlclBh
c3MtPnF1YWRMaXN0KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkTGlzdC5zaXpl
KCk7ICsraSkKKyAgICAgICAgZHJhd1F1YWQocXVhZExpc3RbaV0uZ2V0KCksIHJlbmRlclBhc3Mt
PnN1cmZhY2VEYW1hZ2VSZWN0KCkpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVhZCwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNl
RGFtYWdlUmVjdCkKK3sKKyAgICBJbnRSZWN0IHNjaXNzb3JSZWN0OworICAgIGlmIChtX2NhcGFi
aWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKSB7CisgICAgICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFt
YWdlUmVjdCA9IHN1cmZhY2VEYW1hZ2VSZWN0OworICAgICAgICBpZiAoIXF1YWQtPmNsaXBSZWN0
KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY2xpcEFuZERhbWFnZVJlY3QuaW50ZXJzZWN0KHF1
YWQtPmNsaXBSZWN0KCkpOworICAgICAgICBzY2lzc29yUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qo
Y2xpcEFuZERhbWFnZVJlY3QpOworICAgICAgICBpZiAoc2Npc3NvclJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZQorICAgICAgICBzY2lzc29yUmVjdCA9IHF1
YWQtPmNsaXBSZWN0KCk7CisKKyAgICBpZiAoc2Npc3NvclJlY3QuaXNFbXB0eSgpKQorICAgICAg
ICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVCkpOworICAgIGVsc2UKKyAgICAgICAgc2V0U2Npc3NvclRvUmVjdChz
Y2lzc29yUmVjdCk7CisKKyAgICBpZiAocXVhZC0+aXNPcGFxdWUoKSkKKyAgICAgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCkpOworICAgIGVsc2UKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5l
bmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CisKKyAgICBzd2l0Y2ggKHF1YWQtPm1h
dGVyaWFsKCkpIHsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OkludmFsaWQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OkRl
YnVnQm9yZGVyOgorICAgICAgICBkcmF3RGVidWdCb3JkZXJRdWFkKHF1YWQtPnRvRGVidWdCb3Jk
ZXJEcmF3UXVhZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDQ0RyYXdRdWFkOjpSZW5k
ZXJTdXJmYWNlOgorICAgICAgICBkcmF3UmVuZGVyU3VyZmFjZVF1YWQocXVhZC0+dG9SZW5kZXJT
dXJmYWNlRHJhd1F1YWQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0NEcmF3UXVhZDo6
U29saWRDb2xvcjoKKyAgICAgICAgZHJhd1NvbGlkQ29sb3JRdWFkKHF1YWQtPnRvU29saWRDb2xv
ckRyYXdRdWFkKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OlRpbGVk
Q29udGVudDoKKyAgICAgICAgZHJhd1RpbGVRdWFkKHF1YWQtPnRvVGlsZURyYXdRdWFkKCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OkN1c3RvbUxheWVyOgorICAgICAg
ICBkcmF3Q3VzdG9tTGF5ZXJRdWFkKHF1YWQtPnRvQ3VzdG9tTGF5ZXJEcmF3UXVhZCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqIHF1YWQpCit7Cisg
ICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2XTsKKyAgICBjb25zdCBMYXllckNocm9taXVtOjpC
b3JkZXJQcm9ncmFtKiBwcm9ncmFtID0gYm9yZGVyUHJvZ3JhbSgpOworICAgIEFTU0VSVChwcm9n
cmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IHF1YWQtPmxheWVyVHJhbnNmb3JtKCk7CisgICAgY29u
c3QgSW50UmVjdCYgbGF5ZXJSZWN0ID0gcXVhZC0+cXVhZFJlY3QoKTsKKyAgICByZW5kZXJNYXRy
aXguc2NhbGUzZChsYXllclJlY3Qud2lkdGgoKSwgbGF5ZXJSZWN0LmhlaWdodCgpLCAxKTsKKyAg
ICBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCBwcm9qZWN0
aW9uTWF0cml4KCkgKiByZW5kZXJNYXRyaXgpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlv
bigpLCBmYWxzZSwgJmdsTWF0cml4WzBdLCAxKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPnVuaWZvcm00Zihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNvbG9yTG9jYXRpb24o
KSwgcXVhZC0+Y29sb3IoKS5yZWQoKSAvIDI1NS4wLCBxdWFkLT5jb2xvcigpLmdyZWVuKCkgLyAy
NTUuMCwgcXVhZC0+Y29sb3IoKS5ibHVlKCkgLyAyNTUuMCwgMSkpOworCisgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT5saW5lV2lkdGgocXVhZC0+d2lkdGgoKSkpOworCisgICAgLy8gVGhl
IGluZGljZXMgZm9yIHRoZSBsaW5lIGFyZSBzdG9yZWQgaW4gdGhlIHNhbWUgYXJyYXkgYXMgdGhl
IHRyaWFuZ2xlIGluZGljZXMuCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5kcmF3RWxl
bWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JULCA2ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpOworfQorCit2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclN1cmZhY2VRdWFkKGNvbnN0IENDUmVu
ZGVyU3VyZmFjZURyYXdRdWFkKiBxdWFkKQoreworICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IHF1
YWQtPmxheWVyKCk7CisgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBxdWFk
LT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5yZWxl
YXNlQ29udGVudHNUZXh0dXJlKCk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqIHF1YWQpCit7Cisg
ICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogc29saWRDb2xvclByb2dyYW0g
PSBib3JkZXJQcm9ncmFtKCk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9n
cmFtKHNvbGlkQ29sb3JQcm9ncmFtLT5wcm9ncmFtKCkpKTsKKworICAgIEludFJlY3QgdGlsZVJl
Y3QgPSBxdWFkLT5xdWFkUmVjdCgpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsZVRy
YW5zZm9ybSA9IHF1YWQtPnF1YWRUcmFuc2Zvcm0oKTsKKyAgICB0aWxlVHJhbnNmb3JtLnRyYW5z
bGF0ZSh0aWxlUmVjdC54KCkgKyB0aWxlUmVjdC53aWR0aCgpIC8gMi4wLCB0aWxlUmVjdC55KCkg
KyB0aWxlUmVjdC5oZWlnaHQoKSAvIDIuMCk7CisKKyAgICBjb25zdCBDb2xvciYgY29sb3IgPSBx
dWFkLT5jb2xvcigpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYo
c29saWRDb2xvclByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuY29sb3JMb2NhdGlvbigpLCBjb2xv
ci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpLCBjb2xvci5hbHBoYSgpKSk7CisK
KyAgICBmbG9hdCBvcGFjaXR5ID0gcXVhZC0+b3BhY2l0eSgpOworICAgIGRyYXdUZXh0dXJlZFF1
YWQodGlsZVRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCks
IHRpbGVSZWN0LmhlaWdodCgpLCBvcGFjaXR5LCBGbG9hdFF1YWQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgIHNvbGlkQ29sb3JQcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigp
LAorICAgICAgICAgICAgICAgICAgICAgLTEsIC0xKTsKK30KKworc3RydWN0IFRpbGVQcm9ncmFt
VW5pZm9ybXMgeworICAgIHVuc2lnbmVkIHByb2dyYW07CisgICAgdW5zaWduZWQgc2FtcGxlckxv
Y2F0aW9uOworICAgIHVuc2lnbmVkIHZlcnRleFRleFRyYW5zZm9ybUxvY2F0aW9uOworICAgIHVu
c2lnbmVkIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb247CisgICAgdW5zaWduZWQgZWRnZUxv
Y2F0aW9uOworICAgIHVuc2lnbmVkIG1hdHJpeExvY2F0aW9uOworICAgIHVuc2lnbmVkIGFscGhh
TG9jYXRpb247CisgICAgdW5zaWduZWQgcG9pbnRMb2NhdGlvbjsKK307CisKK3RlbXBsYXRlPGNs
YXNzIFQ+CitzdGF0aWMgdm9pZCB0aWxlVW5pZm9ybUxvY2F0aW9uKFQgcHJvZ3JhbSwgVGlsZVBy
b2dyYW1Vbmlmb3JtcyYgdW5pZm9ybXMpCit7CisgICAgdW5pZm9ybXMucHJvZ3JhbSA9IHByb2dy
YW0tPnByb2dyYW0oKTsKKyAgICB1bmlmb3Jtcy52ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9
IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnZlcnRleFRleFRyYW5zZm9ybUxvY2F0aW9uKCk7Cisg
ICAgdW5pZm9ybXMubWF0cml4TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRy
aXhMb2NhdGlvbigpOworICAgIHVuaWZvcm1zLnBvaW50TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCk7CisKKyAgICB1bmlmb3Jtcy5zYW1wbGVyTG9jYXRp
b24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpOworICAgIHVu
aWZvcm1zLmFscGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9j
YXRpb24oKTsKKyAgICB1bmlmb3Jtcy5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uID0gcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCk7Cisg
ICAgdW5pZm9ybXMuZWRnZUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdl
TG9jYXRpb24oKTsKK30KKworc3RhdGljIHZvaWQgZmluZFRpbGVQcm9ncmFtVW5pZm9ybXMoTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBDQ1RpbGVEcmF3UXVhZCog
cXVhZCwgVGlsZVByb2dyYW1Vbmlmb3JtcyYgdW5pZm9ybXMpCit7CisgICAgaWYgKHF1YWQtPmlz
QW50aWFsaWFzZWQoKSkgeworICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpIHsK
KyAgICAgICAgICAgIGNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxlQUEqIHBy
b2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1Td2l6emxlQUEoKTsKKyAgICAgICAg
ICAgIHRpbGVVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbUFBKiBwcm9n
cmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtQUEoKTsKKyAgICAgICAgICAgIHRpbGVV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKHF1YWQtPmlzT3BhcXVlKCkpIHsKKyAgICAgICAgICAgIGlmIChxdWFk
LT5zd2l6emxlQ29udGVudHMoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IENDVGlsZWRMYXll
ckltcGw6OlByb2dyYW1Td2l6emxlT3BhcXVlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGls
ZXJQcm9ncmFtU3dpenpsZU9wYXF1ZSgpOworICAgICAgICAgICAgICAgIHRpbGVVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtT3BhcXVlKiBwcm9ncmFtID0g
bGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtT3BhcXVlKCk7CisgICAgICAgICAgICAgICAgdGls
ZVVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3Jtcyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpIHsK
KyAgICAgICAgICAgICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZSog
cHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGUoKTsKKyAgICAgICAg
ICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1zKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJv
Z3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbSgpOworICAgICAgICAg
ICAgICAgIHRpbGVVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd1RpbGVRdWFkKGNvbnN0IENDVGlsZURyYXdRdWFkKiBxdWFkKQoreworICAgIGNvbnN0IElu
dFJlY3QmIHRpbGVSZWN0ID0gcXVhZC0+cXVhZFJlY3QoKTsKKworICAgIEZsb2F0UmVjdCBjbGFt
cFJlY3QodGlsZVJlY3QpOworICAgIC8vIENsYW1wIHRleHR1cmUgY29vcmRpbmF0ZXMgdG8gYXZv
aWQgc2FtcGxpbmcgb3V0c2lkZSB0aGUgbGF5ZXIKKyAgICAvLyBieSBkZWZsYXRpbmcgdGhlIHRp
bGUgcmVnaW9uIGhhbGYgYSB0ZXhlbCBvciBoYWxmIGEgdGV4ZWwKKyAgICAvLyBtaW51cyBlcHNp
bG9uIGZvciBvbmUgcGl4ZWwgbGF5ZXJzLiBUaGUgcmVzdWx0aW5nIGNsYW1wIHJlZ2lvbgorICAg
IC8vIGlzIG1hcHBlZCB0byB0aGUgdW5pdCBzcXVhcmUgYnkgdGhlIHZlcnRleCBzaGFkZXIgYW5k
IG1hcHBlZAorICAgIC8vIGJhY2sgdG8gbm9ybWFsaXplZCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGJ5
IHRoZSBmcmFnbWVudCBzaGFkZXIKKyAgICAvLyBhZnRlciBiZWluZyBjbGFtcGVkIHRvIDAtMSBy
YW5nZS4KKyAgICBjb25zdCBmbG9hdCBlcHNpbG9uID0gMSAvIDEwMjQuMGY7CisgICAgZmxvYXQg
Y2xhbXBYID0gbWluKDAuNSwgY2xhbXBSZWN0LndpZHRoKCkgLyAyLjAgLSBlcHNpbG9uKTsKKyAg
ICBmbG9hdCBjbGFtcFkgPSBtaW4oMC41LCBjbGFtcFJlY3QuaGVpZ2h0KCkgLyAyLjAgLSBlcHNp
bG9uKTsKKyAgICBjbGFtcFJlY3QuaW5mbGF0ZVgoLWNsYW1wWCk7CisgICAgY2xhbXBSZWN0Lmlu
ZmxhdGVZKC1jbGFtcFkpOworICAgIEZsb2F0U2l6ZSBjbGFtcE9mZnNldCA9IGNsYW1wUmVjdC5t
aW5YTWluWUNvcm5lcigpIC0gRmxvYXRSZWN0KHRpbGVSZWN0KS5taW5YTWluWUNvcm5lcigpOwor
CisgICAgRmxvYXRQb2ludCB0ZXh0dXJlT2Zmc2V0ID0gcXVhZC0+dGV4dHVyZU9mZnNldCgpICsg
Y2xhbXBPZmZzZXQ7CisKKyAgICAvLyBNYXAgY2xhbXBpbmcgcmVjdGFuZ2xlIHRvIHVuaXQgc3F1
YXJlLgorICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVggPSAtY2xhbXBSZWN0LngoKSAvIGNs
YW1wUmVjdC53aWR0aCgpOworICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVkgPSAtY2xhbXBS
ZWN0LnkoKSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsKKyAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVgg
PSB0aWxlUmVjdC53aWR0aCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7CisgICAgZmxvYXQgdmVydGV4
VGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7CisKKyAg
ICAvLyBNYXAgdG8gbm9ybWFsaXplZCB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAgIGNvbnN0IElu
dFNpemUmIHRleHR1cmVTaXplID0gcXVhZC0+dGV4dHVyZVNpemUoKTsKKyAgICBmbG9hdCBmcmFn
bWVudFRleFRyYW5zbGF0ZVggPSB0ZXh0dXJlT2Zmc2V0LngoKSAvIHRleHR1cmVTaXplLndpZHRo
KCk7CisgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gdGV4dHVyZU9mZnNldC55KCkg
LyB0ZXh0dXJlU2l6ZS5oZWlnaHQoKTsKKyAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWCA9IGNs
YW1wUmVjdC53aWR0aCgpIC8gdGV4dHVyZVNpemUud2lkdGgoKTsKKyAgICBmbG9hdCBmcmFnbWVu
dFRleFNjYWxlWSA9IGNsYW1wUmVjdC5oZWlnaHQoKSAvIHRleHR1cmVTaXplLmhlaWdodCgpOwor
CisgICAgVGlsZVByb2dyYW1Vbmlmb3JtcyB1bmlmb3JtczsKKyAgICBmaW5kVGlsZVByb2dyYW1V
bmlmb3Jtcyh0aGlzLCBxdWFkLCB1bmlmb3Jtcyk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPnVzZVByb2dyYW0odW5pZm9ybXMucHJvZ3JhbSkpOworICAgIEdMQyhjb250ZXh0KCks
IGNvbnRleHQoKS0+dW5pZm9ybTFpKHVuaWZvcm1zLnNhbXBsZXJMb2NhdGlvbiwgMCkpOworICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTApKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkLT50ZXh0dXJlSWQoKSkpOworICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgcXVh
ZC0+dGV4dHVyZUZpbHRlcigpKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NQUdfRklMVEVSLCBxdWFkLT50ZXh0dXJlRmlsdGVyKCkpKTsKKworICAgIEZs
b2F0UXVhZCBsb2NhbFF1YWQ7CisgICAgaWYgKHF1YWQtPmlzQW50aWFsaWFzZWQoKSkgeworICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCh3aW5kb3dNYXRyaXgoKSAqIHByb2plY3Rpb25NYXRyaXgoKSAqIHF1YWQtPnF1YWRU
cmFuc2Zvcm0oKSkudG8yZFRyYW5zZm9ybSgpOworICAgICAgICBpZiAoIWRldmljZVRyYW5zZm9y
bS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBGbG9hdFF1
YWQgZGV2aWNlTGF5ZXJRdWFkID0gZGV2aWNlVHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKHF1
YWQtPmxheWVyUmVjdCgpKSk7CisKKyAgICAgICAgQ0NMYXllclF1YWQgZGV2aWNlTGF5ZXJCb3Vu
ZHMgPSBDQ0xheWVyUXVhZChGbG9hdFF1YWQoZGV2aWNlTGF5ZXJRdWFkLmJvdW5kaW5nQm94KCkp
KTsKKyAgICAgICAgZGV2aWNlTGF5ZXJCb3VuZHMuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNl
KCk7CisKKyAgICAgICAgQ0NMYXllclF1YWQgZGV2aWNlTGF5ZXJFZGdlcyA9IENDTGF5ZXJRdWFk
KGRldmljZUxheWVyUXVhZCk7CisgICAgICAgIGRldmljZUxheWVyRWRnZXMuaW5mbGF0ZUFudGlB
bGlhc2luZ0Rpc3RhbmNlKCk7CisKKyAgICAgICAgZmxvYXQgZWRnZVsyNF07CisgICAgICAgIGRl
dmljZUxheWVyRWRnZXMudG9GbG9hdEFycmF5KGVkZ2UpOworICAgICAgICBkZXZpY2VMYXllckJv
dW5kcy50b0Zsb2F0QXJyYXkoJmVkZ2VbMTJdKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT51bmlmb3JtM2Z2KHVuaWZvcm1zLmVkZ2VMb2NhdGlvbiwgZWRnZSwgOCkpOworCisg
ICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTRmKHVuaWZvcm1zLnZlcnRl
eFRleFRyYW5zZm9ybUxvY2F0aW9uLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVYLCB2ZXJ0ZXhUZXhUcmFu
c2xhdGVZLCB2ZXJ0ZXhUZXhTY2FsZVgsIHZlcnRleFRleFNjYWxlWSkpOworICAgICAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00Zih1bmlmb3Jtcy5mcmFnbWVudFRleFRyYW5z
Zm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRl
WSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7CisKKyAgICAgICAgRmxv
YXRQb2ludCBib3R0b21SaWdodCh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7Cisg
ICAgICAgIEZsb2F0UG9pbnQgYm90dG9tTGVmdCh0aWxlUmVjdC54KCksIHRpbGVSZWN0Lm1heFko
KSk7CisgICAgICAgIEZsb2F0UG9pbnQgdG9wTGVmdCh0aWxlUmVjdC54KCksIHRpbGVSZWN0Lnko
KSk7CisgICAgICAgIEZsb2F0UG9pbnQgdG9wUmlnaHQodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVj
dC55KCkpOworCisgICAgICAgIC8vIE1hcCBwb2ludHMgdG8gZGV2aWNlIHNwYWNlLgorICAgICAg
ICBib3R0b21SaWdodCA9IGRldmljZVRyYW5zZm9ybS5tYXBQb2ludChib3R0b21SaWdodCk7Cisg
ICAgICAgIGJvdHRvbUxlZnQgPSBkZXZpY2VUcmFuc2Zvcm0ubWFwUG9pbnQoYm90dG9tTGVmdCk7
CisgICAgICAgIHRvcExlZnQgPSBkZXZpY2VUcmFuc2Zvcm0ubWFwUG9pbnQodG9wTGVmdCk7Cisg
ICAgICAgIHRvcFJpZ2h0ID0gZGV2aWNlVHJhbnNmb3JtLm1hcFBvaW50KHRvcFJpZ2h0KTsKKwor
ICAgICAgICBDQ0xheWVyUXVhZDo6RWRnZSBib3R0b21FZGdlKGJvdHRvbVJpZ2h0LCBib3R0b21M
ZWZ0KTsKKyAgICAgICAgQ0NMYXllclF1YWQ6OkVkZ2UgbGVmdEVkZ2UoYm90dG9tTGVmdCwgdG9w
TGVmdCk7CisgICAgICAgIENDTGF5ZXJRdWFkOjpFZGdlIHRvcEVkZ2UodG9wTGVmdCwgdG9wUmln
aHQpOworICAgICAgICBDQ0xheWVyUXVhZDo6RWRnZSByaWdodEVkZ2UodG9wUmlnaHQsIGJvdHRv
bVJpZ2h0KTsKKworICAgICAgICBpZiAocXVhZC0+dG9wRWRnZUFBKCkpCisgICAgICAgICAgICB0
b3BFZGdlID0gZGV2aWNlTGF5ZXJFZGdlcy50b3AoKTsKKyAgICAgICAgaWYgKHF1YWQtPmxlZnRF
ZGdlQUEoKSkKKyAgICAgICAgICAgIGxlZnRFZGdlID0gZGV2aWNlTGF5ZXJFZGdlcy5sZWZ0KCk7
CisgICAgICAgIGlmIChxdWFkLT5yaWdodEVkZ2VBQSgpKQorICAgICAgICAgICAgcmlnaHRFZGdl
ID0gZGV2aWNlTGF5ZXJFZGdlcy5yaWdodCgpOworICAgICAgICBpZiAocXVhZC0+Ym90dG9tRWRn
ZUFBKCkpCisgICAgICAgICAgICBib3R0b21FZGdlID0gZGV2aWNlTGF5ZXJFZGdlcy5ib3R0b20o
KTsKKworICAgICAgICBmbG9hdCBzaWduID0gRmxvYXRRdWFkKHRpbGVSZWN0KS5pc0NvdW50ZXJj
bG9ja3dpc2UoKSA/IC0xIDogMTsKKyAgICAgICAgYm90dG9tRWRnZS5zY2FsZShzaWduKTsKKyAg
ICAgICAgbGVmdEVkZ2Uuc2NhbGUoc2lnbik7CisgICAgICAgIHRvcEVkZ2Uuc2NhbGUoc2lnbik7
CisgICAgICAgIHJpZ2h0RWRnZS5zY2FsZShzaWduKTsKKworICAgICAgICAvLyBDcmVhdGUgZGV2
aWNlIHNwYWNlIHF1YWQuCisgICAgICAgIENDTGF5ZXJRdWFkIGRldmljZVF1YWQobGVmdEVkZ2Us
IHRvcEVkZ2UsIHJpZ2h0RWRnZSwgYm90dG9tRWRnZSk7CisKKyAgICAgICAgLy8gTWFwIHF1YWQg
dG8gbGF5ZXIgc3BhY2UuCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2VEZXZp
Y2VUcmFuc2Zvcm0gPSBkZXZpY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOworICAgICAgICBsb2NhbFF1
YWQgPSBpbnZlcnNlRGV2aWNlVHJhbnNmb3JtLm1hcFF1YWQoZGV2aWNlUXVhZC5mbG9hdFF1YWQo
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJhbnNm
b3JtIHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbyB0aGlzIHdoaWxlCisgICAgICAgIC8vIHN0
aWxsIHByb2R1Y2luZyBjb3JyZWN0IHJlc3VsdHMgYXMgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2Nh
dGlvbgorICAgICAgICAvLyBzaG91bGQgYWx3YXlzIGJlIG5vbi1uZWdhdGl2ZSB3aGVuIHRpbGVz
IGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdheQorICAgICAgICAvLyB0aGF0IGNvdWxkIHJlc3VsdCBp
biBzYW1wbGluZyBvdXRzaWRlIHRoZSBsYXllci4KKyAgICAgICAgdmVydGV4VGV4U2NhbGVYICo9
IGZyYWdtZW50VGV4U2NhbGVYOworICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJhZ21lbnRU
ZXhTY2FsZVk7CisgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVggKj0gZnJhZ21lbnRUZXhTY2Fs
ZVg7CisgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7Cisg
ICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVggKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOworICAg
ICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICs9IGZyYWdtZW50VGV4VHJhbnNsYXRlWTsKKworICAg
ICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00Zih1bmlmb3Jtcy52ZXJ0ZXhU
ZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgdmVydGV4VGV4VHJhbnNsYXRlWCwgdmVydGV4VGV4VHJhbnNs
YXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhTY2FsZVkpKTsKKworICAgICAgICBsb2Nh
bFF1YWQgPSBGbG9hdFJlY3QodGlsZVJlY3QpOworICAgIH0KKworICAgIC8vIE5vcm1hbGl6ZSB0
byB0aWxlUmVjdC4KKyAgICBsb2NhbFF1YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCks
IDEuMGYgLyB0aWxlUmVjdC5oZWlnaHQoKSk7CiAKLSAgICBkcmF3TGF5ZXJzT250b1JlbmRlclN1
cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIGRyYXdU
ZXh0dXJlZFF1YWQocXVhZC0+cXVhZFRyYW5zZm9ybSgpLCB0aWxlUmVjdC53aWR0aCgpLCB0aWxl
UmVjdC5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBsb2NhbFF1YWQsIHVuaWZvcm1zLm1hdHJp
eExvY2F0aW9uLCB1bmlmb3Jtcy5hbHBoYUxvY2F0aW9uLCB1bmlmb3Jtcy5wb2ludExvY2F0aW9u
KTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdDdXN0b21MYXllclF1YWQo
Y29uc3QgQ0NDdXN0b21MYXllckRyYXdRdWFkKiBxdWFkKQoreworICAgIENDTGF5ZXJJbXBsKiBs
YXllciA9IHF1YWQtPmxheWVyKCk7CisgICAgbGF5ZXItPmRyYXcodGhpcyk7Cit9CiAKK3ZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpmaW5pc2hEcmF3aW5nRnJhbWUoKQorewogICAgIGlmICht
X2hlYWRzVXBEaXNwbGF5LT5lbmFibGVkKCkpIHsKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQo
KSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CiAgICAgICAg
IEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4
dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7CkBAIC00
OTQsNiArNjc5LDE4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50
ZXJuYWwoKQogCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CisKKyAgICBz
aXplX3QgY29udGVudHNNZW1vcnlVc2VCeXRlcyA9IG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9y
LT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKTsKKyAgICBzaXplX3QgcmVjbGFpbUxpbWl0ID0gVGV4
dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKKyAgICBpZiAo
cmVjbGFpbUxpbWl0ID4gY29udGVudHNNZW1vcnlVc2VCeXRlcykKKyAgICAgICAgbV9yZW5kZXJT
dXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMocmVjbGFp
bUxpbWl0IC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7CisgICAgZWxzZQorICAgICAgICBtX3Jl
bmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcygw
KTsKKworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4
dHVyZXMobV9yZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7CisKKyAgICBpZiAo
c2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4pCisgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0
dXJlVG9EaXNwbGF5KCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0b0dMTWF0
cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQpAQCAt
NjQ1LDQyICs4NDIsOCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3Vy
ZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UpCiAjZW5kaWYKIAogICAgIHNldERy
YXdWaWV3cG9ydFJlY3QocmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKSwgZmFsc2UpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlLCBjb25z
dCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KQotewotICAgIGlmIChDQ0xheWVyVHJlZUhv
c3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0PENDTGF5ZXJJbXBsPihs
YXllciwgdGFyZ2V0U3VyZmFjZS0+b3duaW5nTGF5ZXJJZCgpKSkgewotICAgICAgICBsYXllci0+
cmVuZGVyU3VyZmFjZSgpLT5kcmF3KHRoaXMsIHN1cmZhY2VEYW1hZ2VSZWN0KTsKLSAgICAgICAg
bGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGxheWVyLT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobGF5ZXItPnVzZXNMYXllckNsaXBw
aW5nKCkgJiYgbV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCkgewotICAgICAgICBGbG9h
dFJlY3QgY2xpcEFuZERhbWFnZVJlY3QobGF5ZXItPmNsaXBSZWN0KCkpOwotICAgICAgICBjbGlw
QW5kRGFtYWdlUmVjdC5pbnRlcnNlY3Qoc3VyZmFjZURhbWFnZVJlY3QpOwotICAgICAgICBzZXRT
Y2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZVJlY3QpKTsKLSAgICB9
IGVsc2UgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgIHNldFNj
aXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChzdXJmYWNlRGFtYWdlUmVjdCkpOwotICAgIGVs
c2UgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQotICAgICAgICBzZXRTY2lzc29yVG9S
ZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KSk7Ci0KLSAgICBib29sIG9wYXF1ZSA9IGxheWVyLT5vcGFxdWUoKSAmJiBsYXllci0+ZHJhd09w
YWNpdHkoKSA9PSAxOwotICAgIGlmIChvcGFxdWUpCi0gICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKLQotICAg
IGxheWVyLT5kcmF3KHRoaXMpOwotCi0gICAgaWYgKG9wYXF1ZSkKLSAgICAgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7
Ci0KLSAgICAvLyBEcmF3IHRoZSBkZWJ1ZyBib3JkZXIgaWYgdGhlcmUgaXMgb25lLgotICAgIGxh
eWVyLT5kcmF3RGVidWdCb3JkZXIodGhpcyk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIFNl
dHMgdGhlIHNjaXNzb3IgcmVnaW9uIHRvIHRoZSBnaXZlbiByZWN0YW5nbGUuIFRoZSBjb29yZGlu
YXRlIHN5c3RlbSBmb3IgdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4
IDZlMTQ5ZjBlNjM4NTBkMjhjMjVmMmQxM2FkNzY5ZjNmOTA2NTZhYzYuLmM4YWNiMmMzNDVhYTA2
YzE3ZGQ0OWEzNzFjODkyYThjMmQyYTdkZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0hlYWRz
VXBEaXNwbGF5LmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1BsdWdpbkxheWVySW1wbC5o
IgogI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKQEAgLTY2LDYgKzY1LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNsYXNzIENDTGF5ZXJJ
bXBsOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKK2NsYXNzIENDUmVuZGVyUGFzczsKIGNs
YXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgVHJh
Y2tpbmdUZXh0dXJlQWxsb2NhdG9yOwpAQCAtOTcsNyArOTcsOSBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHZpZXdwb3J0Q2hhbmdlZCgpOwogCi0gICAgdm9pZCBkcmF3TGF5ZXJzKCk7CisgICAgdm9p
ZCBiZWdpbkRyYXdpbmdGcmFtZSgpOworICAgIHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NS
ZW5kZXJQYXNzKik7CisgICAgdm9pZCBmaW5pc2hEcmF3aW5nRnJhbWUoKTsKIAogICAgIC8vIHdh
aXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdm9pZCBmaW5pc2goKTsKQEAgLTE1MSw4
ICsxNTMsNiBAQCBwdWJsaWM6CiAKICAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1hdCgpOwog
Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5ZXJMaXN0Owot
CiAgICAgc3RhdGljIHZvaWQgdG9HTE1hdHJpeChmbG9hdCosIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4Jik7CiAgICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBsYXllck1hdHJpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lk
dGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRRdWFkJiwKQEAgLTE2
MiwyMSArMTYyLDIyIEBAIHByaXZhdGU6CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5
ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAgICAgYm9v
bCBpbml0aWFsaXplKCk7CiAKLSAgICB2b2lkIGRyYXdMYXllcnNJbnRlcm5hbCgpOwotICAgIHZv
aWQgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXll
ciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwotICAgIHZvaWQg
ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiwgQ0NSZW5kZXJTdXJmYWNlKiwgY29uc3QgRmxvYXRSZWN0
Jik7Ci0KLSAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJv
b3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
KyAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqLCBjb25zdCBGbG9hdFJlY3QmIHN1
cmZhY2VEYW1hZ2VSZWN0KTsKKyAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NE
ZWJ1Z0JvcmRlckRyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3UmVuZGVyU3VyZmFjZVF1YWQoY29u
c3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdTb2xpZENvbG9yUXVh
ZChjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCopOworICAgIHZvaWQgZHJhd1RpbGVRdWFkKGNv
bnN0IENDVGlsZURyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3Q3VzdG9tTGF5ZXJRdWFkKGNvbnN0
IENDQ3VzdG9tTGF5ZXJEcmF3UXVhZCopOwogCiAgICAgTWFuYWdlZFRleHR1cmUqIGdldE9mZnNj
cmVlbkxheWVyVGV4dHVyZSgpOwogICAgIHZvaWQgY29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3Bs
YXkoKTsKIAogICAgIHZvaWQgc2V0RHJhd1ZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0JiwgYm9v
bCBmbGlwWSk7CiAKLSAgICB2b2lkIHJlbGVhc2VSZW5kZXJTdXJmYWNlVGV4dHVyZXMoKTsKLQog
ICAgIGJvb2wgdXNlUmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqKTsKLSAgICB2b2lkIGNs
ZWFyU3VyZmFjZUZvckRlYnVnKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIENDTGF5
ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0
KTsKKyAgICB2b2lkIGNsZWFyU3VyZmFjZUZvckRlYnVnKENDUmVuZGVyU3VyZmFjZSosIENDUmVu
ZGVyU3VyZmFjZSogcm9vdFJlbmRlclN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURh
bWFnZVJlY3QpOworCisgICAgdm9pZCByZWxlYXNlUmVuZGVyU3VyZmFjZVRleHR1cmVzKCk7CiAK
ICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCkBAIC0yMzgsOCArMjM5LDYgQEAgcHJp
dmF0ZToKIAogICAgIENDUmVuZGVyU3VyZmFjZSogbV9kZWZhdWx0UmVuZGVyU3VyZmFjZTsKIAot
ICAgIENDTGF5ZXJTb3J0ZXIgbV9sYXllclNvcnRlcjsKLQogICAgIEZsb2F0UXVhZCBtX3NoYXJl
ZEdlb21ldHJ5UXVhZDsKIAogICAgIGJvb2wgbV9pc1ZpZXdwb3J0Q2hhbmdlZDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJD
aHJvbWl1bS5oCmluZGV4IGJiYTUxZjlmNzg1NTMwZDY2NzlmNGQ1NTM3ZDc4NDZiNGY1MmU0N2Uu
LjU2OWY2OTZiZWFhMmFhNmRmYjNiYmZiMjE3MDQ2YmYwZTQwYWNjZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hy
b21pdW0uaApAQCAtMTQ1LDcgKzE0NSwxNSBAQCBwcml2YXRlOgogICAgIGludCBtX3ZlcnRleFRl
eFRyYW5zZm9ybUxvY2F0aW9uOwogfTsKIAotY2xhc3MgRnJhZ21lbnRUZXhBbHBoYUJpbmRpbmcg
eworY2xhc3MgRnJhZ21lbnRUaWxlQmluZGluZ0Jhc2UgeworcHVibGljOgorICAgIGludCBhbHBo
YUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KKyAgICBpbnQgZWRnZUxvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gLTE7IH0KKyAgICBpbnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIC0xOyB9CisgICAgaW50IHNhbXBsZXJMb2NhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIC0xOyB9Cit9OworCitjbGFzcyBGcmFnbWVudFRleEFscGhhQmluZGluZyA6IHB1
YmxpYyBGcmFnbWVudFRpbGVCaW5kaW5nQmFzZSB7CiBwdWJsaWM6CiAgICAgRnJhZ21lbnRUZXhB
bHBoYUJpbmRpbmcoKTsKIApAQCAtMTU4LDEyICsxNjYsMTEgQEAgcHJpdmF0ZToKICAgICBpbnQg
bV9hbHBoYUxvY2F0aW9uOwogfTsKIAotY2xhc3MgRnJhZ21lbnRUZXhPcGFxdWVCaW5kaW5nIHsK
K2NsYXNzIEZyYWdtZW50VGV4T3BhcXVlQmluZGluZyA6IHB1YmxpYyBGcmFnbWVudFRpbGVCaW5k
aW5nQmFzZSB7CiBwdWJsaWM6CiAgICAgRnJhZ21lbnRUZXhPcGFxdWVCaW5kaW5nKCk7CiAKICAg
ICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBwcm9ncmFtKTsKLSAgICBp
bnQgYWxwaGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIC0xOyB9CiAgICAgaW50IHNhbXBsZXJM
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlckxvY2F0aW9uOyB9CiAKIHByaXZhdGU6
CkBAIC0yMjQsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9lZGdlTG9jYXRpb247CiB9
OwogCi1jbGFzcyBGcmFnbWVudFRleENsYW1wQWxwaGFBQUJpbmRpbmcgeworY2xhc3MgRnJhZ21l
bnRUZXhDbGFtcEFscGhhQUFCaW5kaW5nIDogcHVibGljIEZyYWdtZW50VGlsZUJpbmRpbmdCYXNl
IHsKIHB1YmxpYzoKICAgICBGcmFnbWVudFRleENsYW1wQWxwaGFBQUJpbmRpbmcoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNWM1NWY1OWJmM2U3MzcyZmU5ZWM1MTJl
ZjYzNjExMDFhYzVhMDVlNS4uN2NiNDc3ZjlkYzllNmU3NTE3NjgzZjU3NDA5OTRhOTNjMjhjNjU5
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0yNTEsNyArMjUxLDcgQEAg
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxh
eWVyKQogCiAgICAgdGlsZWRMYXllci0+c2V0U2tpcHNEcmF3KG1fc2tpcHNEcmF3KTsKICAgICB0
aWxlZExheWVyLT5zZXRUZXh0dXJlT3JpZW50YXRpb24obV90ZXh0dXJlT3JpZW50YXRpb24pOwot
ICAgIHRpbGVkTGF5ZXItPnNldFNhbXBsZWRUZXhlbEZvcm1hdChtX3NhbXBsZWRUZXhlbEZvcm1h
dCk7CisgICAgdGlsZWRMYXllci0+c2V0Q29udGVudHNTd2l6emxlZChtX3NhbXBsZWRUZXhlbEZv
cm1hdCAhPSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBKTsKICAg
ICB0aWxlZExheWVyLT5zZXRUaWxpbmdEYXRhKCptX3RpbGVyKTsKIAogICAgIGZvciAoQ0NMYXll
clRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxl
cygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0N1c3RvbUxheWVyRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTgw
YjEwZWQyNDkwYzdhNmY4OWFjZjIzMTFjZDgwYWNlODNhNWJiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDdXN0b21MYXll
ckRyYXdRdWFkLmNwcApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUGFzc093blB0cjxDQ0N1c3RvbUxheWVyRHJhd1F1YWQ+IENDQ3VzdG9tTGF5
ZXJEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3Rh
dGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIpCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0N1c3RvbUxheWVyRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRl
LCBxdWFkUmVjdCwgbGF5ZXIpKTsKK30KKworQ0NDdXN0b21MYXllckRyYXdRdWFkOjpDQ0N1c3Rv
bUxheWVyRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwg
Y29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllcikKKyAgICA6IENDRHJh
d1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpDdXN0b21MYXllciwgcXVhZFJlY3Qp
CisgICAgLCBtX2xheWVyKGxheWVyKQoreworICAgIEFTU0VSVChtX2xheWVyKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NDdXN0b21MYXllckRyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWJkNDYy
MzI1M2E0YzQ1NTA5YWMyNDUwZjljYTMyYTczYzdkOWM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDdXN0b21MYXllckRy
YXdRdWFkLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NDdXN0b21MYXllckRy
YXdRdWFkX2gKKyNkZWZpbmUgQ0NDdXN0b21MYXllckRyYXdRdWFkX2gKKworI2luY2x1ZGUgImNj
L0NDRHJhd1F1YWQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJJbXBsOworCisvLyBGSVhNRTogVGhpcyBjbGFzcyBp
cyBhIHRlbXBvcmFyeSB3YXkgdG8gYWNjZXNzIENDTGF5ZXJJbXBsOjpkcmF3LiBUaGlzIGNsYXNz
CisvLyBzaG91bGQgYmUgY29udmVydGVkIHRvIGEgc2V0IG9mIGRyYXcgcXVhZHMgZm9yIGVhY2gg
bGF5ZXIgbWF0ZXJpYWwgdHlwZSBhbmQKKy8vIHRoZW4gcmVtb3ZlZC4KK2NsYXNzIENDQ3VzdG9t
TGF5ZXJEcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDQ0N1c3RvbUxheWVyRHJhd1F1YWQpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPENDQ3VzdG9tTGF5ZXJEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRl
KiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKik7CisKKyAgICBDQ0xheWVySW1wbCogbGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyOyB9CisKK3ByaXZhdGU6CisgICAgQ0NDdXN0b21M
YXllckRyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIEND
TGF5ZXJJbXBsKik7CisKKyAgICBDQ0xheWVySW1wbCogbV9sYXllcjsKK307CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40ZTIxZjBkOTNhZDg5ZTNiMmNmYmE1MTYxZjdlMDgxYzY0NDRhZTcwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1
Z0JvcmRlckRyYXdRdWFkLmNwcApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ+IENDRGVi
dWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRR
dWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGlu
dCB3aWR0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDRGVidWdCb3JkZXJEcmF3UXVh
ZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBjb2xvciwgd2lkdGgpKTsKK30KKworQ0NEZWJ1
Z0JvcmRlckRyYXdRdWFkOjpDQ0RlYnVnQm9yZGVyRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFk
U3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgaW50IHdpZHRoKQorICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUs
IENDRHJhd1F1YWQ6OkRlYnVnQm9yZGVyLCBxdWFkUmVjdCkKKyAgICAsIG1fY29sb3IoY29sb3Ip
CisgICAgLCBtX3dpZHRoKHdpZHRoKQoreworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdC
b3JkZXJEcmF3UXVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyMjZhZWQ3NmY1Y2FlNWZmMDNlZmRlMzkwOTAy
NjNiNDM1OTI5YzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaApAQCAtMCwwICsxLDUy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDQ0RlYnVnQm9yZGVyRHJhd1F1YWRfaAorI2RlZmluZSBDQ0Rl
YnVnQm9yZGVyRHJhd1F1YWRfaAorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJjYy9D
Q0RyYXdRdWFkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVh
ZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ+IGNyZWF0
ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBDb2xvciYs
IGludCB3aWR0aCk7CisKKyAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBt
X2NvbG9yOyB9OworICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKwor
cHJpdmF0ZToKKyAgICBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3Rh
dGUqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQ29sb3ImLCBpbnQgd2lkdGgpOworCisgICAgQ29s
b3IgbV9jb2xvcjsKKyAgICBpbnQgbV93aWR0aDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdR
dWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RHJhd1F1YWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjMTYwMDhhN2ZmZGJmZTM4ZGVhYjYwMWM1YmQxYWQz
NWMwYmQ2NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgorCisjaW5j
bHVkZSAiY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0Jv
cmRlckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJj
Yy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRy
YXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1YWQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitDQ0RyYXdRdWFkOjpDQ0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRl
KiBzaGFyZWRRdWFkU3RhdGUsIE1hdGVyaWFsIG1hdGVyaWFsLCBjb25zdCBJbnRSZWN0JiBxdWFk
UmVjdCkKKyAgICA6IG1fc2hhcmVkUXVhZFN0YXRlKHNoYXJlZFF1YWRTdGF0ZSkKKyAgICAsIG1f
bWF0ZXJpYWwobWF0ZXJpYWwpCisgICAgLCBtX3F1YWRSZWN0KHF1YWRSZWN0KQoreworICAgIEFT
U0VSVChtX3NoYXJlZFF1YWRTdGF0ZSk7CisgICAgQVNTRVJUKG1fbWF0ZXJpYWwgIT0gSW52YWxp
ZCk7Cit9CisKK2NvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCogQ0NEcmF3UXVhZDo6dG9EZWJ1
Z0JvcmRlckRyYXdRdWFkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9tYXRlcmlhbCA9PSBEZWJ1
Z0JvcmRlcik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENDRGVidWdCb3JkZXJEcmF3
UXVhZCo+KHRoaXMpOworfQorCitjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCogQ0NEcmF3
UXVhZDo6dG9SZW5kZXJTdXJmYWNlRHJhd1F1YWQoKSBjb25zdAoreworICAgIEFTU0VSVChtX21h
dGVyaWFsID09IFJlbmRlclN1cmZhY2UpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBD
Q1JlbmRlclN1cmZhY2VEcmF3UXVhZCo+KHRoaXMpOworfQorCitjb25zdCBDQ1NvbGlkQ29sb3JE
cmF3UXVhZCogQ0NEcmF3UXVhZDo6dG9Tb2xpZENvbG9yRHJhd1F1YWQoKSBjb25zdAoreworICAg
IEFTU0VSVChtX21hdGVyaWFsID09IFNvbGlkQ29sb3IpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCo+KHRoaXMpOworfQorCitjb25zdCBDQ1RpbGVE
cmF3UXVhZCogQ0NEcmF3UXVhZDo6dG9UaWxlRHJhd1F1YWQoKSBjb25zdAoreworICAgIEFTU0VS
VChtX21hdGVyaWFsID09IFRpbGVkQ29udGVudCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IENDVGlsZURyYXdRdWFkKj4odGhpcyk7Cit9CisKK2NvbnN0IENDQ3VzdG9tTGF5ZXJEcmF3
UXVhZCogQ0NEcmF3UXVhZDo6dG9DdXN0b21MYXllckRyYXdRdWFkKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9tYXRlcmlhbCA9PSBDdXN0b21MYXllcik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IENDQ3VzdG9tTGF5ZXJEcmF3UXVhZCo+KHRoaXMpOworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFk
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdR
dWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMWQwNDZjOTE5NWZmZGUwNWJhYjI3NjBhYmU3ZTY5Nzg1MDc2MzQw
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRHJhd1F1YWQuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
Q0RyYXdRdWFkX2gKKyNkZWZpbmUgQ0NEcmF3UXVhZF9oCisKKyNpbmNsdWRlICJjYy9DQ1NoYXJl
ZFF1YWRTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDRGVidWdCb3Jk
ZXJEcmF3UXVhZDsKK2NsYXNzIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOworY2xhc3MgQ0NTb2xp
ZENvbG9yRHJhd1F1YWQ7CitjbGFzcyBDQ1RpbGVEcmF3UXVhZDsKK2NsYXNzIENDQ3VzdG9tTGF5
ZXJEcmF3UXVhZDsKKworLy8gQ0NEcmF3UXVhZCBpcyBhIGJhZyBvZiBkYXRhIHVzZWQgZm9yIGRy
YXdpbmcgYSBxdWFkLiBCZWNhdXNlIGRpZmZlcmVudAorLy8gbWF0ZXJpYWxzIG5lZWQgZGlmZmVy
ZW50IGJpdHMgb2YgcGVyLXF1YWQgZGF0YSB0byByZW5kZXIsIGNsYXNzZXMgdGhhdCBkZXJpdmUK
Ky8vIGZyb20gQ0NEcmF3UXVhZCBzdG9yZSBhZGRpdGlvbmFsIGRhdGEgaW4gdGhlaXIgZGVyaXZl
ZCBpbnN0YW5jZS4gVGhlIE1hdGVyaWFsCisvLyBlbnVtIGlzIHVzZWQgdG8gInNhZmVseSIgdXBj
YXN0IHRvIHRoZSBkZXJpdmVkIGNsYXNzLgorY2xhc3MgQ0NEcmF3UXVhZCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQ0NEcmF3UXVhZCk7CitwdWJsaWM6CisgICAgY29uc3QgSW50UmVjdCYg
cXVhZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3F1YWRSZWN0OyB9CisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1
YWRTdGF0ZS0+cXVhZFRyYW5zZm9ybSgpOyB9CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPmxh
eWVyVHJhbnNmb3JtKCk7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJSZWN0KCk7IH0KKyAgICBjb25zdCBJbnRS
ZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5jbGlwUmVj
dCgpOyB9CisgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0
YXRlLT5vcGFjaXR5KCk7IH0KKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9z
aGFyZWRRdWFkU3RhdGUtPmlzT3BhcXVlKCk7IH0KKyAgICBib29sIGlzTGF5ZXJBeGlzQWxpZ25l
ZEludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+aXNMYXllckF4aXNB
bGlnbmVkSW50UmVjdCgpOyB9CisKKyAgICBlbnVtIE1hdGVyaWFsIHsKKyAgICAgICAgSW52YWxp
ZCwKKyAgICAgICAgRGVidWdCb3JkZXIsCisgICAgICAgIFJlbmRlclN1cmZhY2UsCisgICAgICAg
IFNvbGlkQ29sb3IsCisgICAgICAgIFRpbGVkQ29udGVudCwKKworICAgICAgICAvLyBGSVhNRTog
cmVtb3ZlIHRoaXMgYW5kIGFkZCBwcm9wZXIgbWF0ZXJpYWwgdHlwZXMgZm9yIGFsbCBsYXllciB0
eXBlcworICAgICAgICBDdXN0b21MYXllciwKKyAgICB9OworCisgICAgTWF0ZXJpYWwgbWF0ZXJp
YWwoKSBjb25zdCB7IHJldHVybiBtX21hdGVyaWFsOyB9CisKKyAgICBjb25zdCBDQ0RlYnVnQm9y
ZGVyRHJhd1F1YWQqIHRvRGVidWdCb3JkZXJEcmF3UXVhZCgpIGNvbnN0OworICAgIGNvbnN0IEND
UmVuZGVyU3VyZmFjZURyYXdRdWFkKiB0b1JlbmRlclN1cmZhY2VEcmF3UXVhZCgpIGNvbnN0Owor
ICAgIGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKiB0b1NvbGlkQ29sb3JEcmF3UXVhZCgpIGNv
bnN0OworICAgIGNvbnN0IENDVGlsZURyYXdRdWFkKiB0b1RpbGVEcmF3UXVhZCgpIGNvbnN0Owor
ICAgIGNvbnN0IENDQ3VzdG9tTGF5ZXJEcmF3UXVhZCogdG9DdXN0b21MYXllckRyYXdRdWFkKCkg
Y29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBDQ0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0
YXRlKiwgTWF0ZXJpYWwsIGNvbnN0IEludFJlY3QmKTsKKworcHJpdmF0ZToKKyAgICBjb25zdCBD
Q1NoYXJlZFF1YWRTdGF0ZSogbV9zaGFyZWRRdWFkU3RhdGU7CisKKyAgICBNYXRlcmlhbCBtX21h
dGVyaWFsOworICAgIEludFJlY3QgbV9xdWFkUmVjdDsKK307CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKaW5kZXggYWYwNDJlNTY2OWI0NjJmYjZjMDlkZTZmYzNkNGNmNGI2
ZDg0ZTkyZC4uOWQyMzc0MGUzNzQ5NjIwYzBiMzg4ZjBmMTc2NTA1MDc5YTBkMTBlOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5o
IgorI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMTE3
LDYgKzExOSwzMiBAQCB2b2lkIENDTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1
bSopCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK1Bhc3NPd25QdHI8Q0NTaGFyZWRR
dWFkU3RhdGU+IENDTGF5ZXJJbXBsOjpzaGFyZWRRdWFkU3RhdGUoKSBjb25zdAoreworICAgIGJv
b2wgaXNPcGFxdWUgPSBvcGFxdWUoKSAmJiBkcmF3T3BhY2l0eSgpID09IDE7CisgICAgSW50UmVj
dCBsYXllckNsaXBSZWN0OworICAgIGlmICh1c2VzTGF5ZXJDbGlwcGluZygpKQorICAgICAgICBs
YXllckNsaXBSZWN0ID0gY2xpcFJlY3QoKTsKKyAgICByZXR1cm4gQ0NTaGFyZWRRdWFkU3RhdGU6
OmNyZWF0ZShxdWFkVHJhbnNmb3JtKCksIGRyYXdUcmFuc2Zvcm0oKSwgdmlzaWJsZUxheWVyUmVj
dCgpLCBsYXllckNsaXBSZWN0LCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7Cit9CisKK3ZvaWQg
Q0NMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExpc3QmIHF1YWRMaXN0LCBjb25zdCBDQ1No
YXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQoreworICAgIEludFJlY3QgbGF5ZXJSZWN0
KEludFBvaW50KCksIGJvdW5kcygpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoQ0NDdXN0b21MYXll
ckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBsYXllclJlY3QsIHRoaXMpKTsKK30K
Kwordm9pZCBDQ0xheWVySW1wbDo6YXBwZW5kRGVidWdCb3JkZXJRdWFkKENDUXVhZExpc3QmIHF1
YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKSBjb25zdAor
eworICAgIGlmICghZGVidWdCb3JkZXJDb2xvcigpLmFscGhhKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoZGVidWdCb3JkZXJXaWR0aCgpIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAg
IEludFJlY3QgbGF5ZXJSZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKKyAgICBxdWFkTGlzdC5h
cHBlbmQoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBsYXll
clJlY3QsIGRlYnVnQm9yZGVyQ29sb3IoKSwgZGVidWdCb3JkZXJXaWR0aCgpKSk7Cit9CisKIHZv
aWQgQ0NMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVt
KikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE0NywyOCArMTc1LDkgQEAgY29u
c3QgSW50UmVjdCBDQ0xheWVySW1wbDo6Z2V0RHJhd1JlY3QoKSBjb25zdAogICAgIHJldHVybiBt
YXBwZWRSZWN0OwogfQogCi12b2lkIENDTGF5ZXJJbXBsOjpkcmF3RGVidWdCb3JkZXIoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NM
YXllckltcGw6OnF1YWRUcmFuc2Zvcm0oKSBjb25zdAogewotICAgIHN0YXRpYyBmbG9hdCBnbE1h
dHJpeFsxNl07Ci0gICAgaWYgKCFkZWJ1Z0JvcmRlckNvbG9yKCkuYWxwaGEoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVy
LT5jb250ZXh0KCk7Ci0gICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogcHJv
Z3JhbSA9IGxheWVyUmVuZGVyZXItPmJvcmRlclByb2dyYW0oKTsKLSAgICBBU1NFUlQocHJvZ3Jh
bSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHJlbmRlck1hdHJpeCA9IGRyYXdUcmFuc2Zvcm0oKTsKLSAgICByZW5kZXJNYXRyaXguc2Nh
bGUzZChib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgMSk7Ci0gICAgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp0b0dMTWF0cml4KCZnbE1hdHJpeFswXSwgbGF5ZXJSZW5kZXJlci0+
cHJvamVjdGlvbk1hdHJpeCgpICogcmVuZGVyTWF0cml4KTsKLSAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2Nh
dGlvbigpLCBmYWxzZSwgJmdsTWF0cml4WzBdLCAxKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuY29sb3JMb2NhdGlvbigp
LCBkZWJ1Z0JvcmRlckNvbG9yKCkucmVkKCkgLyAyNTUuMCwgZGVidWdCb3JkZXJDb2xvcigpLmdy
ZWVuKCkgLyAyNTUuMCwgZGVidWdCb3JkZXJDb2xvcigpLmJsdWUoKSAvIDI1NS4wLCAxKSk7Ci0K
LSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+bGluZVdpZHRoKGRlYnVnQm9yZGVyV2lkdGgoKSkp
OwotCi0gICAgLy8gVGhlIGluZGljZXMgZm9yIHRoZSBsaW5lIGFyZSBzdG9yZWQgaW4gdGhlIHNh
bWUgYXJyYXkgYXMgdGhlIHRyaWFuZ2xlIGluZGljZXMuCi0gICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCA0LCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDYgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKSk7
CisgICAgcmV0dXJuIGRyYXdUcmFuc2Zvcm0oKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6d3Jp
dGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApp
bmRleCBlMmMwMGM4Njg5ODJhNzZjNjU4Y2FlODM0MTBlODViY2NkY2Y4MDlmLi5hZTQ2MzBmYjli
MWY4NTk2M2VmZjg2ZGYyMzA4MjQ3Y2Q0YmZiZjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVh
bS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NS
ZW5kZXJQYXNzLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC03MCw2ICs3MSwx
MCBAQCBwdWJsaWM6CiAgICAgaW50IGRlYnVnSUQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnSUQ7
IH0KICNlbmRpZgogCisgICAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVh
ZFN0YXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZExpc3Qm
LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSopOworICAgIHZvaWQgYXBwZW5kRGVidWdCb3JkZXJR
dWFkKENDUXVhZExpc3QmLCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSopIGNvbnN0OworCiAgICAg
dmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAgICAgdm9pZCB1bnJl
c2VydmVDb250ZW50c1RleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4
dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKQEAgLTEzMSw4ICsxMzYsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXREZWJ1Z0JvcmRlcldpZHRoKGZsb2F0KTsKICAgICBmbG9hdCBkZWJ1Z0Jv
cmRlcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0JvcmRlcldpZHRoOyB9CiAKLSAgICB2
b2lkIGRyYXdEZWJ1Z0JvcmRlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKLQogICAgIENDUmVu
ZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyU3VyZmFj
ZS5nZXQoKTsgfQogICAgIHZvaWQgY3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHZvaWQgY2xl
YXJSZW5kZXJTdXJmYWNlKCkgeyBtX3JlbmRlclN1cmZhY2UuY2xlYXIoKTsgfQpAQCAtMjAwLDYg
KzIwMyw5IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGll
cyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAgICAgc3RhdGljIHZvaWQgd3JpdGVJ
bmRlbnQoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpOwogCisgICAgLy8gVHJhbnNmb3JtYXRpb24g
dXNlZCB0byB0cmFuc2Zvcm0gcXVhZHMgcHJvdmlkZWQgaW4gYXBwZW5kUXVhZHMuCisgICAgdmly
dHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkVHJhbnNmb3JtKCkgY29uc3Q7CisKIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRQYXJlbnQoQ0NMYXllckltcGwqIHBhcmVudCkgeyBtX3BhcmVudCA9
IHBhcmVudDsgfQogICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBlMGNkMzg5ZGM2ZjhkZjk0MDhhOWMw
NTUxZTQwNmVmYmQxZGYyYjBkLi4xMjFkMDVjYzQ5NzdjZjc5MDg5ODI5NzE4NTEzZGFiOTQzOTEz
OTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMzAsOCAr
MzAsMTEgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJj
Yy9DQ0RhbWFnZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ1BhZ2VT
Y2FsZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgi
CiAjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CiAKQEAgLTEyNiwxNCArMTI5LDEyNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0
YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAg
IG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQogCit2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJv
b3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQor
eworICAgIC8vIEZvciBub3csIHdlIHVzZSBkYW1hZ2UgdHJhY2tpbmcgdG8gY29tcHV0ZSBhIGds
b2JhbCBzY2lzc29yLiBUbyBkbyB0aGlzLCB3ZSBtdXN0CisgICAgLy8gY29tcHV0ZSBhbGwgZGFt
YWdlIHRyYWNraW5nIGJlZm9yZSBkcmF3aW5nIGFueXRoaW5nLCBzbyB0aGF0IHdlIGtub3cgdGhl
IHJvb3QKKyAgICAvLyBkYW1hZ2UgcmVjdC4gVGhlIHJvb3QgZGFtYWdlIHJlY3QgaXMgdGhlbiB1
c2VkIHRvIHNjaXNzb3IgZWFjaCBzdXJmYWNlLgorCisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4
ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7
IC0tc3VyZmFjZUluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5
ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAg
IENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVu
ZGVyU3VyZmFjZSgpOworICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CisgICAgICAgIHJl
bmRlclN1cmZhY2UtPmRhbWFnZVRyYWNrZXIoKS0+dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFt
ZShyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpLCBy
ZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjb21wdXRlU2NyZWVuU3BhY2VUcmFuc2Zvcm1Gb3JTdXJmYWNlKEND
TGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIpCit7CisgICAgLy8gVGhlIGxheWVyJ3Mgc2Ny
ZWVuIHNwYWNlIHRyYW5zZm9ybSBjYW4gYmUgd3JpdHRlbiBhczoKKyAgICAvLyAgIGxheWVyU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0gPSBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gKiBsYXllck9y
aWdpblRyYW5zZm9ybQorICAgIC8vIFNvLCB0byBjb21wdXRlIHRoZSBzdXJmYWNlIHNjcmVlbiBz
cGFjZSwgd2UgY2FuIGRvOgorICAgIC8vICAgc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtID0g
bGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSAqIGludmVyc2UobGF5ZXJPcmlnaW5UcmFuc2Zvcm0p
CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck9yaWdpblRyYW5zZm9ybSA9IHJlbmRl
clN1cmZhY2VMYXllci0+ZHJhd1RyYW5zZm9ybSgpOworICAgIGxheWVyT3JpZ2luVHJhbnNmb3Jt
LnRyYW5zbGF0ZSgtMC41ICogcmVuZGVyU3VyZmFjZUxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCAt
MC41ICogcmVuZGVyU3VyZmFjZUxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFj
ZUxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpOworICAgIHN1cmZhY2VTY3JlZW5TcGFjZVRy
YW5zZm9ybS5tdWx0aXBseShsYXllck9yaWdpblRyYW5zZm9ybS5pbnZlcnNlKCkpOworCisgICAg
cmV0dXJuIHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybTsKK30KKworc3RhdGljIEZsb2F0UmVj
dCBkYW1hZ2VJblN1cmZhY2VTcGFjZShDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyLCBj
b25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KQoreworICAgIEZsb2F0UmVjdCBzdXJmYWNl
RGFtYWdlUmVjdDsKKyAgICAvLyBGb3Igbm93LCB3ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhlIHJv
b3QgZGFtYWdlIGFzIHRoZSBkYW1hZ2UgZm9yCisgICAgLy8gYWxsIHN1cmZhY2VzLCBleGNlcHQg
cGVyc3BlY3RpdmUgdHJhbnNmb3Jtcy4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5T
cGFjZVRyYW5zZm9ybSA9IGNvbXB1dGVTY3JlZW5TcGFjZVRyYW5zZm9ybUZvclN1cmZhY2UocmVu
ZGVyU3VyZmFjZUxheWVyKTsKKyAgICBpZiAoc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaGFzUGVyc3Bl
Y3RpdmUoKSkgeworICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9ucyBkbyBub3QgcGxh
eSBuaWNlIHdpdGggbWFwUmVjdCBvZgorICAgICAgICAvLyBpbnZlcnNlIHRyYW5zZm9ybXMuIElu
IHRoaXMgdW5jb21tb24gY2FzZSwgaXRzIHNpbXBsZXIgdG8KKyAgICAgICAgLy8ganVzdCByZWRy
YXcgdGhlIGVudGlyZSBzdXJmYWNlLgorICAgICAgICAvLyBGSVhNRTogdXNlIGNhbGN1bGF0ZVZp
c2libGVSZWN0IHRvIGhhbmRsZSBwcm9qZWN0aW9ucy4KKyAgICAgICAgQ0NSZW5kZXJTdXJmYWNl
KiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Cisg
ICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlU2NyZWVu
U3BhY2VUcmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybS5pbnZlcnNlKCk7CisgICAgICAg
IHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFJlY3Qo
cm9vdERhbWFnZVJlY3QpOworICAgIH0KKyAgICByZXR1cm4gc3VyZmFjZURhbWFnZVJlY3Q7Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKFZlY3Rv
cjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+JiBwYXNzZXMpCit7CisgICAgQ0NMYXllckxpc3QgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChy
b290TGF5ZXIoKSk7CisKKyAgICBpZiAoIXJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCkpCisg
ICAgICAgIHJvb3RMYXllcigpLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdExheWVy
KCktPnJlbmRlclN1cmZhY2UoKS0+Y2xlYXJMYXllckxpc3QoKTsKKyAgICByb290TGF5ZXIoKS0+
cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHZpZXdw
b3J0U2l6ZSgpKSk7CisKKyAgICByb290TGF5ZXIoKS0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCB2aWV3cG9ydFNpemUoKSkpOworCisgICAgeworICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllcigp
LCByb290TGF5ZXIoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSwg
Jm1fbGF5ZXJTb3J0ZXIsIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6
ZSk7CisgICAgfQorCisgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1Bh
cnRpYWxTd2FwKQorICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3RMYXllcigp
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Qg
PSByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnRE
YW1hZ2VSZWN0KCk7CisKKyAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgp
IHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKKyAgICAgICAgQ0NSZW5kZXJTdXJmYWNl
KiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisK
KyAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcGFzcyA9IENDUmVuZGVyUGFzczo6Y3JlYXRl
KHJlbmRlclN1cmZhY2UpOworCisgICAgICAgIEZsb2F0UmVjdCBzdXJmYWNlRGFtYWdlUmVjdDsK
KyAgICAgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2Fw
KQorICAgICAgICAgICAgc3VyZmFjZURhbWFnZVJlY3QgPSBkYW1hZ2VJblN1cmZhY2VTcGFjZShy
ZW5kZXJTdXJmYWNlTGF5ZXIsIHJvb3REYW1hZ2VSZWN0KTsKKyAgICAgICAgcGFzcy0+c2V0U3Vy
ZmFjZURhbWFnZVJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpOworCisgICAgICAgIGNvbnN0IENDTGF5
ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXpl
KCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAgICAgICAgQ0NMYXllckltcGwqIGxheWVyID0gbGF5
ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKGxheWVyLT52aXNpYmxl
TGF5ZXJSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0
ZXNUb1RhcmdldChsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkgeworICAgICAgICAg
ICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKGxheWVyKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFz
cy0+YXBwZW5kUXVhZHNGb3JMYXllcihsYXllcik7CisgICAgICAgIH0KKworICAgICAgICBwYXNz
ZXMuYXBwZW5kKHBhc3MucmVsZWFzZSgpKTsKKyAgICB9Cit9CisKIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6ZHJhd0xheWVycygpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGw6OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVy
KTsKLSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKSkKLSAgICAgICAgbV9sYXll
clJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7CisKKyAgICBpZiAoIXJvb3RMYXllcigpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiBwYXNzZXM7Cisg
ICAgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CisKKyAgICBtX2xheWVyUmVuZGVyZXIt
PmJlZ2luRHJhd2luZ0ZyYW1lKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXNzZXMu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MocGFz
c2VzW2ldLmdldCgpKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmZpbmlzaERyYXdpbmdGcmFtZSgp
OwogCiAgICAgKyttX2ZyYW1lTnVtYmVyOworCisgICAgLy8gVGhlIG5leHQgZnJhbWUgc2hvdWxk
IHN0YXJ0IGJ5IGFzc3VtaW5nIG5vdGhpbmcgaGFzIGNoYW5nZWQsIGFuZCBjaGFuZ2VzIGFyZSBu
b3RlZCBhcyB0aGV5IG9jY3VyLgorICAgIHJvb3RMYXllcigpLT5yZXNldEFsbENoYW5nZVRyYWNr
aW5nRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmZpbmlzaEFs
bFJlbmRlcmluZygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggODg3
YzdlNjU1NzdlNzllMGUyOGFkMDc4OGJlMjMyZDc1N2E0YzIzZi4uYTdhZTAzODhiYzAwZjZiMGQw
NmQzNmQ3MjI0ZDY0ODg3ZDFkYzhlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaApAQCAtMjYsOCArMjYsMTAgQEAKICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbF9oCiAK
ICNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0
ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3RDb21tb24uaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKICNpZiBVU0UoU0tJQSkKQEAgLTEyNCwxMCArMTI2LDE0IEBA
IHByb3RlY3RlZDoKICAgICBpbnQgbV9mcmFtZU51bWJlcjsKIAogcHJpdmF0ZToKKyAgICB0eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7CisKICAgICB2b2lk
IHNldFBhZ2VTY2FsZURlbHRhKGZsb2F0KTsKICAgICB2b2lkIGFwcGx5UGFnZVNjYWxlRGVsdGFU
b1Njcm9sbExheWVyKCk7CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdl
KGZsb2F0KTsKICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CisgICAgdm9pZCB0
cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25z
dCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgdm9pZCBjYWxjdWxh
dGVSZW5kZXJQYXNzZXMoVmVjdG9yPE93blB0cjxDQ1JlbmRlclBhc3M+ID4mKTsKIAogICAgIE93
blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBSZWZQdHI8
Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1wbDsKQEAgLTE0NSw2ICsxNTEsOCBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9waW5jaEdlc3R1cmVBY3RpdmU7CiAKICAgICBPd25QdHI8Q0NQYWdlU2Nh
bGVBbmltYXRpb24+IG1fcGFnZVNjYWxlQW5pbWF0aW9uOworCisgICAgQ0NMYXllclNvcnRlciBt
X2xheWVyU29ydGVyOwogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYxMzg5N2Y3YWU2N2Y2OWEyNmY5OGVmYmZkZGZlNDNhMzY4NTgzODkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclBhc3MuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJJ
bXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKyNpbmNsdWRl
ICJjYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NP
d25QdHI8Q0NSZW5kZXJQYXNzPiBDQ1JlbmRlclBhc3M6OmNyZWF0ZShDQ1JlbmRlclN1cmZhY2Uq
IHRhcmdldFN1cmZhY2UpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1JlbmRlclBhc3Mo
dGFyZ2V0U3VyZmFjZSkpOworfQorCitDQ1JlbmRlclBhc3M6OkNDUmVuZGVyUGFzcyhDQ1JlbmRl
clN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCisgICAgOiBtX3RhcmdldFN1cmZhY2UodGFyZ2V0U3Vy
ZmFjZSkKK3sKKyAgICBBU1NFUlQobV90YXJnZXRTdXJmYWNlKTsKK30KKwordm9pZCBDQ1JlbmRl
clBhc3M6OmFwcGVuZFF1YWRzRm9yTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIE93
blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlID0gbGF5ZXItPnNoYXJlZFF1
YWRTdGF0ZSgpOworICAgIGxheWVyLT5hcHBlbmRRdWFkcyhtX3F1YWRMaXN0LCBzaGFyZWRRdWFk
U3RhdGUuZ2V0KCkpOworICAgIGxheWVyLT5hcHBlbmREZWJ1Z0JvcmRlclF1YWQobV9xdWFkTGlz
dCwgc2hhcmVkUXVhZFN0YXRlLmdldCgpKTsKKyAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3QuYXBw
ZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOworfQorCit2b2lkIENDUmVuZGVyUGFzczo6
YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQorewor
ICAgIC8vIEZJWE1FOiByZW5kZXIgc3VyZmFjZSBsYXllcnMgc2hvdWxkIGJlIGEgQ0NMYXllcklt
cGwtZGVyaXZlZCBjbGFzcyBhbmQKKyAgICAvLyBub3QgYmUgaGFuZGxlZCBzcGVjaWFsbHkgaGVy
ZS4KKyAgICBDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgp
OworICAgIGJvb2wgaXNPcGFxdWUgPSBmYWxzZTsKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3Rh
dGU+IHNoYXJlZFF1YWRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoc3VyZmFjZS0+
ZHJhd1RyYW5zZm9ybSgpLCBzdXJmYWNlLT5kcmF3VHJhbnNmb3JtKCksIHN1cmZhY2UtPmNvbnRl
bnRSZWN0KCksIHN1cmZhY2UtPmNsaXBSZWN0KCksIHN1cmZhY2UtPmRyYXdPcGFjaXR5KCksIGlz
T3BhcXVlKTsKKyAgICBtX3F1YWRMaXN0LmFwcGVuZChDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6
Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgbGF5
ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0KCkpKTsKKyAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3QuYXBw
ZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFz
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmE2MTk3MzY2NmZjNWYwODliZWQ1MDdiMDAyZTQxZWYyMWZjNmI1ZGMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclBhc3MuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
Q1JlbmRlclBhc3NfaAorI2RlZmluZSBDQ1JlbmRlclBhc3NfaAorCisjaW5jbHVkZSAiY2MvQ0NE
cmF3UXVhZC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJJbXBsOworY2xh
c3MgQ0NSZW5kZXJTdXJmYWNlOworY2xhc3MgQ0NTaGFyZWRRdWFkU3RhdGU7CisKK3R5cGVkZWYg
VmVjdG9yPE93blB0cjxDQ0RyYXdRdWFkPiA+IENDUXVhZExpc3Q7CisKK2NsYXNzIENDUmVuZGVy
UGFzcyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NSZW5kZXJQYXNzKTsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZShDQ1JlbmRlclN1cmZh
Y2UqKTsKKworICAgIHZvaWQgYXBwZW5kUXVhZHNGb3JMYXllcihDQ0xheWVySW1wbCopOworICAg
IHZvaWQgYXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqKTsKKwor
ICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkTGlz
dDsgfQorICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0U3VyZmFjZTsgfQorCisgICAgdm9pZCBzZXRTdXJmYWNlRGFtYWdlUmVjdChjb25z
dCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KSB7IG1fc3VyZmFjZURhbWFnZVJlY3QgPSBz
dXJmYWNlRGFtYWdlUmVjdDsgfQorICAgIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VEYW1hZ2VSZWN0OyB9CisKK3ByaXZhdGU6Cisg
ICAgQ0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSopOworCisgICAgQ0NSZW5kZXJTdXJmYWNl
KiBtX3RhcmdldFN1cmZhY2U7CisgICAgQ0NRdWFkTGlzdCBtX3F1YWRMaXN0OworICAgIFZlY3Rv
cjxPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+ID4gbV9zaGFyZWRRdWFkU3RhdGVMaXN0OworICAg
IEZsb2F0UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0OworfTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZURyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODlh
MTcyZDE0NGJhYTVmM2MwYTVjMGY4ZWRmNTg3ZTFiM2NkYzliCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IENDUmVu
ZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJl
ZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwg
Y29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3sKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3Qs
IGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCkpOworfQorCitDQ1JlbmRlclN1cmZhY2VEcmF3UXVh
ZDo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJl
ZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwg
Y29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKKyAgICA6IENDRHJhd1F1YWQoc2hh
cmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNlLCBxdWFkUmVjdCkKKyAgICAs
IG1fbGF5ZXIobGF5ZXIpCisgICAgLCBtX3N1cmZhY2VEYW1hZ2VSZWN0KHN1cmZhY2VEYW1hZ2VS
ZWN0KQoreworICAgIEFTU0VSVChtX2xheWVyKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzUzNWQzMmRhMjk3ZjgzZGY2NWYw
NTQ4M2U5M2M1YWY5ZGI3ODVmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKQEAg
LTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWRfaAor
I2RlZmluZSBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZF9oCisKKyNpbmNsdWRlICJjYy9DQ0RyYXdR
dWFkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDQ0xheWVySW1wbDsKKworY2xhc3MgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQg
OiBwdWJsaWMgQ0NEcmF3UXVhZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVy
U3VyZmFjZURyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJ
bnRSZWN0JiwgQ0NMYXllckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0
KTsKKworICAgIENDTGF5ZXJJbXBsKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0K
KworICAgIC8vIFRoZSBzdXJmYWNlIGRhbWFnZSByZWN0IGZvciB0aGUgdGFyZ2V0IHN1cmZhY2Ug
dGhpcyBxdWFkIGRyYXdzIGludG8uCisgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHJlbW92ZWQg
b25jZSByZW5kZXIgc3VyZmFjZXMgZ2V0IHRoZWlyIG93biBsYXllciB0eXBlLgorICAgIGNvbnN0
IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VE
YW1hZ2VSZWN0OyB9CisKK3ByaXZhdGU6CisgICAgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29u
c3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBjb25z
dCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKKworICAgIENDTGF5ZXJJbXBsKiBtX2xh
eWVyOworICAgIEZsb2F0UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0OworfTsKKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YmY3Njky
NWJiOGNmMmJiYWM1MzljMDE0MzFjNTU3ODQzMzlmZDA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3Rh
dGUuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJjYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1Bhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBj
b25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1NoYXJlZFF1YWRTdGF0ZShxdWFkVHJhbnNmb3JtLCBs
YXllclRyYW5zZm9ybSwgbGF5ZXJSZWN0LCBjbGlwUmVjdCwgb3BhY2l0eSwgb3BhcXVlKSk7Cit9
CisKK0NDU2hhcmVkUXVhZFN0YXRlOjpDQ1NoYXJlZFF1YWRTdGF0ZShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxh
eWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIGNs
aXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKKyAgICA6IG1fcXVhZFRyYW5zZm9y
bShxdWFkVHJhbnNmb3JtKQorICAgICwgbV9sYXllclRyYW5zZm9ybShsYXllclRyYW5zZm9ybSkK
KyAgICAsIG1fbGF5ZXJSZWN0KGxheWVyUmVjdCkKKyAgICAsIG1fY2xpcFJlY3QoY2xpcFJlY3Qp
CisgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKKyAgICAsIG1fb3BhcXVlKG9wYXF1ZSkKK3sKK30K
KworYm9vbCBDQ1NoYXJlZFF1YWRTdGF0ZTo6aXNMYXllckF4aXNBbGlnbmVkSW50UmVjdCgpIGNv
bnN0Cit7CisgICAgLy8gTm90ZTogdGhpcyBkb2Vzbid0IGNvbnNpZGVyIHdpbmRvdyBvciBwcm9q
ZWN0aW9uIG1hdHJpY2VzLgorICAgIC8vIEFzc3VtZSB0aGF0IHRoZXkncmUgb3J0aG9ub3JtYWwg
YW5kIGhhdmUgaW50ZWdlciBzY2FsZXMgYW5kIHRyYW5zbGF0aW9ucy4KKyAgICBGbG9hdFF1YWQg
cXVhZCA9IHF1YWRUcmFuc2Zvcm0oKS5tYXBRdWFkKEZsb2F0UXVhZChsYXllclJlY3QoKSkpOwor
ICAgIHJldHVybiBxdWFkLmlzUmVjdGlsaW5lYXIoKSAmJiBxdWFkLmJvdW5kaW5nQm94KCkuaXNF
eHByZXNzaWJsZUFzSW50UmVjdCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3Rh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lNzg1NzU3ZjlkYjk0YjFiMzIwNjFmZDhkOGIyMWM0MGJlZjFmZjBh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDQ1NoYXJlZFF1YWRTdGF0ZV9oCisjZGVmaW5lIENDU2hhcmVkUXVhZFN0YXRlX2gKKwor
I2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NTaGFyZWRRdWFkU3RhdGUgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENDU2hhcmVkUXVhZFN0YXRlKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJU
cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKTsKKworICAgIC8vIFRoZSB0cmFuc2Zvcm0g
dGhhdCBxdWFkcyBpbiBhIENDRHJhd1F1YWQgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIHdpdGguCisg
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX3F1YWRUcmFuc2Zvcm07IH0KKyAgICAvLyBUaGUgdHJhbnNmb3JtIHRoYXQgbGF5ZXJS
ZWN0KCkgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIHdpdGguCisgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyYW5zZm9y
bTsgfQorICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5
ZXJSZWN0OyB9CisgICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X2NsaXBSZWN0OyB9CisKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFj
aXR5OyB9CisgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9Cisg
ICAgYm9vbCBpc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgQ0NTaGFyZWRRdWFkU3RhdGUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFu
c2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3Qg
SW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0
eSwgYm9vbCBvcGFxdWUpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9xdWFkVHJhbnNm
b3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbGF5ZXJUcmFuc2Zvcm07CisgICAgSW50
UmVjdCBtX2xheWVyUmVjdDsKKyAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CisgICAgZmxvYXQgbV9v
cGFjaXR5OworICAgIGJvb2wgbV9vcGFxdWU7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENv
bG9yRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4YmMwNjRiY2FiMWNh
Y2EwYzYwMTFkMzhhYjg5Yzc5OWZkNjc2MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5j
cHAKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGFzc093blB0cjxDQ1NvbGlkQ29sb3JEcmF3UXVhZD4gQ0NTb2xpZENvbG9yRHJhd1F1YWQ6OmNy
ZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRS
ZWN0JiBxdWFkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NTb2xpZENvbG9yRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgY29s
b3IpKTsKK30KKworQ0NTb2xpZENvbG9yRHJhd1F1YWQ6OkNDU29saWRDb2xvckRyYXdRdWFkKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1
YWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRT
dGF0ZSwgQ0NEcmF3UXVhZDo6U29saWRDb2xvciwgcXVhZFJlY3QpCisgICAgLCBtX2NvbG9yKGNv
bG9yKQoreworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kMDIwZGY2ODQ5YThhMDNjYmE4ZjIyYjA4ODU3MGM1ZTFiODM2Y2U0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTb2xpZENvbG9yRHJhd1F1YWQuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
Q1NvbGlkQ29sb3JEcmF3UXVhZF9oCisjZGVmaW5lIENDU29saWRDb2xvckRyYXdRdWFkX2gKKwor
I2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NTb2xp
ZENvbG9yRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ0NTb2xpZENvbG9yRHJhd1F1YWQpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPENDU29saWRDb2xvckRyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUq
LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKworICAgIGNvbnN0IENvbG9yJiBjb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH07CisKK3ByaXZhdGU6CisgICAgQ0NTb2xpZENv
bG9yRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgQ29sb3ImKTsKKworICAgIENvbG9yIG1fY29sb3I7Cit9OworCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aWxlRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaWxlRHJhd1F1YWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0ZDUyNDdiOWM5NmZkMGExN2Uy
ZjIyODE4OWNmNGM3Y2NhMjMwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5jcHAKQEAgLTAsMCAr
MSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDVGls
ZURyYXdRdWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ1RpbGVE
cmF3UXVhZD4gQ0NUaWxlRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSog
c2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgUGxhdGZvcm0zRE9iamVj
dCB0ZXh0dXJlSWQsIGNvbnN0IEludFBvaW50JiB0ZXh0dXJlT2Zmc2V0LCBjb25zdCBJbnRTaXpl
JiB0ZXh0dXJlU2l6ZSwgR0MzRGludCB0ZXh0dXJlRmlsdGVyLCBib29sIHN3aXp6bGVDb250ZW50
cywgYm9vbCBsZWZ0RWRnZUFBLCBib29sIHRvcEVkZ2VBQSwgYm9vbCByaWdodEVkZ2VBQSwgYm9v
bCBib3R0b21FZGdlQUEpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RpbGVEcmF3UXVh
ZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0ZXh0dXJlSWQsIHRleHR1cmVPZmZzZXQsIHRl
eHR1cmVTaXplLCB0ZXh0dXJlRmlsdGVyLCBzd2l6emxlQ29udGVudHMsIGxlZnRFZGdlQUEsIHRv
cEVkZ2VBQSwgcmlnaHRFZGdlQUEsIGJvdHRvbUVkZ2VBQSkpOworfQorCitDQ1RpbGVEcmF3UXVh
ZDo6Q0NUaWxlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0
ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBj
b25zdCBJbnRQb2ludCYgdGV4dHVyZU9mZnNldCwgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUs
IEdDM0RpbnQgdGV4dHVyZUZpbHRlciwgYm9vbCBzd2l6emxlQ29udGVudHMsIGJvb2wgbGVmdEVk
Z2VBQSwgYm9vbCB0b3BFZGdlQUEsIGJvb2wgcmlnaHRFZGdlQUEsIGJvb2wgYm90dG9tRWRnZUFB
KQorICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1YWQ6OlRpbGVkQ29u
dGVudCwgcXVhZFJlY3QpCisgICAgLCBtX3RleHR1cmVJZCh0ZXh0dXJlSWQpCisgICAgLCBtX3Rl
eHR1cmVPZmZzZXQodGV4dHVyZU9mZnNldCkKKyAgICAsIG1fdGV4dHVyZVNpemUodGV4dHVyZVNp
emUpCisgICAgLCBtX3RleHR1cmVGaWx0ZXIodGV4dHVyZUZpbHRlcikKKyAgICAsIG1fc3dpenps
ZUNvbnRlbnRzKHN3aXp6bGVDb250ZW50cykKKyAgICAsIG1fbGVmdEVkZ2VBQShsZWZ0RWRnZUFB
KQorICAgICwgbV90b3BFZGdlQUEodG9wRWRnZUFBKQorICAgICwgbV9yaWdodEVkZ2VBQShyaWdo
dEVkZ2VBQSkKKyAgICAsIG1fYm90dG9tRWRnZUFBKGJvdHRvbUVkZ2VBQSkKK3sKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaWxlRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGlsZURyYXdRdWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzg2YjRkNWI2NDE0ZTAxNGIyOTY2
MDhhYjc3ZDViYzE5NDljOGVkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmgKQEAgLTAsMCArMSw3
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgQ0NUaWxlRHJhd1F1YWRfaAorI2RlZmluZSBDQ1RpbGVEcmF3
UXVhZF9oCisKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKyNpbmNsdWRlICJjYy9DQ0Ry
YXdRdWFkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDQ1RpbGVEcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDQ1RpbGVEcmF3UXVhZCk7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8Q0NUaWxlRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSosIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwg
Y29uc3QgSW50UG9pbnQmIHRleHR1cmVPZmZzZXQsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXpl
LCBHQzNEaW50IHRleHR1cmVGaWx0ZXIsIGJvb2wgc3dpenpsZUNvbnRlbnRzLCBib29sIGxlZnRF
ZGdlQUEsIGJvb2wgdG9wRWRnZUFBLCBib29sIHJpZ2h0RWRnZUFBLCBib29sIGJvdHRvbUVkZ2VB
QSk7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4dHVyZUlkOyB9CisgICAgSW50UG9pbnQgdGV4dHVyZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGV4dHVyZU9mZnNldDsgfQorICAgIEludFNpemUgdGV4dHVyZVNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3RleHR1cmVTaXplOyB9CisgICAgR0MzRGludCB0ZXh0dXJlRmlsdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0dXJlRmlsdGVyOyB9CisgICAgYm9vbCBzd2l6emxlQ29udGVudHMoKSBj
b25zdCB7IHJldHVybiBtX3N3aXp6bGVDb250ZW50czsgfQorCisgICAgYm9vbCBsZWZ0RWRnZUFB
KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0RWRnZUFBOyB9CisgICAgYm9vbCB0b3BFZGdlQUEoKSBj
b25zdCB7IHJldHVybiBtX3RvcEVkZ2VBQTsgfQorICAgIGJvb2wgcmlnaHRFZGdlQUEoKSBjb25z
dCB7IHJldHVybiBtX3JpZ2h0RWRnZUFBOyB9CisgICAgYm9vbCBib3R0b21FZGdlQUEoKSBjb25z
dCB7IHJldHVybiBtX2JvdHRvbUVkZ2VBQTsgfQorCisgICAgYm9vbCBpc0FudGlhbGlhc2VkKCkg
Y29uc3QgeyByZXR1cm4gbGVmdEVkZ2VBQSgpIHx8IHRvcEVkZ2VBQSgpIHx8IHJpZ2h0RWRnZUFB
KCkgfHwgYm90dG9tRWRnZUFBKCk7IH0KKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1
cm4gQ0NEcmF3UXVhZDo6aXNPcGFxdWUoKSAmJiAhaXNBbnRpYWxpYXNlZCgpOyB9CisKK3ByaXZh
dGU6CisgICAgQ0NUaWxlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJ
bnRSZWN0JiBxdWFkUmVjdCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFBv
aW50JiB0ZXh0dXJlT2Zmc2V0LCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgR0MzRGludCB0
ZXh0dXJlRmlsdGVyLCBib29sIHN3aXp6bGVDb250ZW50cywgYm9vbCBsZWZ0RWRnZUFBLCBib29s
IHRvcEVkZ2VBQSwgYm9vbCByaWdodEVkZ2VBQSwgYm9vbCBib3R0b21FZGdlQUEpOworCisgICAg
UGxhdGZvcm0zRE9iamVjdCBtX3RleHR1cmVJZDsKKyAgICBJbnRQb2ludCBtX3RleHR1cmVPZmZz
ZXQ7CisgICAgSW50U2l6ZSBtX3RleHR1cmVTaXplOworICAgIEdDM0RpbnQgbV90ZXh0dXJlRmls
dGVyOworICAgIGJvb2wgbV9zd2l6emxlQ29udGVudHM7CisgICAgYm9vbCBtX2xlZnRFZGdlQUE7
CisgICAgYm9vbCBtX3RvcEVkZ2VBQTsKKyAgICBib29sIG1fcmlnaHRFZGdlQUE7CisgICAgYm9v
bCBtX2JvdHRvbUVkZ2VBQTsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRM
YXllckltcGwuY3BwCmluZGV4IDQ5ZDFkZjNmZDhiZTNjODkwYzA2ZjA1YWU3NWVlOTUxN2U3OTdj
MTMuLjQ5MDY2NTRjMDAxZDRhOTY4NTk0OTdhMjkzODM1YjgzMDQ2YmM0NGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXll
ckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC0zMCw3ICszMCw4IEBACiAjaW5jbHVkZSAiY2Mv
Q0NUaWxlZExheWVySW1wbC5oIgogCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgi
Ci0jaW5jbHVkZSAiY2MvQ0NMYXllclF1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JE
cmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC01Myw2ICs1NCw3
IEBAIHByaXZhdGU6CiBDQ1RpbGVkTGF5ZXJJbXBsOjpDQ1RpbGVkTGF5ZXJJbXBsKGludCBpZCkK
ICAgICA6IENDTGF5ZXJJbXBsKGlkKQogICAgICwgbV9za2lwc0RyYXcodHJ1ZSkKKyAgICAsIG1f
Y29udGVudHNTd2l6emxlZChmYWxzZSkKIHsKIH0KIApAQCAtOTcsNyArOTksNyBAQCBEcmF3YWJs
ZVRpbGUqIENDVGlsZWRMYXllckltcGw6OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQogICAgIHJl
dHVybiB0aWxlLmdldCgpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ1RpbGVkTGF5ZXJJ
bXBsOjp0aWxpbmdUcmFuc2Zvcm0oKSBjb25zdAorVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NUaWxl
ZExheWVySW1wbDo6cXVhZFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOwogCkBAIC0xMTIsNjMgKzExNCw1MCBA
QCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ1RpbGVkTGF5ZXJJbXBsOjp0aWxpbmdUcmFuc2Zvcm0o
KSBjb25zdAogICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKLXZvaWQgQ0NUaWxlZExheWVySW1w
bDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCit2b2lkIENDVGls
ZWRMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExpc3QmIHF1YWRMaXN0LCBjb25zdCBDQ1No
YXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQogewotICAgIGNvbnN0IEludFJlY3QmIGxh
eWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKKyAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKIAotICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV90
aWxlciB8fCBtX3RpbGVyLT5pc0VtcHR5KCkgfHwgbGF5ZXJSZWN0LmlzRW1wdHkoKSB8fCAhbGF5
ZXJSZW5kZXJlcikKKyAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fdGlsZXIgfHwgbV90aWxlci0+
aXNFbXB0eSgpIHx8IGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm0gPSB0aWxpbmdUcmFuc2Zvcm0o
KTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VNYXRyaXggPSBUcmFuc2Zvcm1hdGlv
bk1hdHJpeChsYXllclJlbmRlcmVyLT53aW5kb3dNYXRyaXgoKSAqIGxheWVyUmVuZGVyZXItPnBy
b2plY3Rpb25NYXRyaXgoKSAqIGxheWVyVHJhbnNmb3JtKS50bzJkVHJhbnNmb3JtKCk7CisgICAg
aW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRv
VGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAg
SW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGVyLT5jb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRl
bnRSZWN0KTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAg
ICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIERy
YXdhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKyAgICAgICAgICAgIEludFJlY3QgdGls
ZVJlY3QgPSBtX3RpbGVyLT50aWxlQm91bmRzKGksIGopOworICAgICAgICAgICAgSW50UmVjdCBk
aXNwbGF5UmVjdCA9IHRpbGVSZWN0OworICAgICAgICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KGxh
eWVyUmVjdCk7CiAKLSAgICAvLyBEb24ndCBkcmF3IGFueSB0aWxlcyB3aGVuIGRldmljZSBtYXRy
aXggaXMgbm90IGludmVydGlibGUuCi0gICAgaWYgKCFkZXZpY2VNYXRyaXguaXNJbnZlcnRpYmxl
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIC8vIFNraXAgZW1wdHkgdGlsZXMuCisg
ICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgRmxvYXRRdWFkIHF1YWQgPSBkZXZpY2VNYXRyaXgubWFwUXVhZChGbG9hdFF1
YWQobGF5ZXJSZWN0KSk7Ci0gICAgQ0NMYXllclF1YWQgZGV2aWNlUmVjdCA9IENDTGF5ZXJRdWFk
KEZsb2F0UXVhZChxdWFkLmJvdW5kaW5nQm94KCkpKTsKLSAgICBDQ0xheWVyUXVhZCBsYXllclF1
YWQgPSBDQ0xheWVyUXVhZChxdWFkKTsKKyAgICAgICAgICAgIGlmICghdGlsZSB8fCAhdGlsZS0+
dGV4dHVyZUlkKCkpIHsKKyAgICAgICAgICAgICAgICBxdWFkTGlzdC5hcHBlbmQoQ0NTb2xpZENv
bG9yRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHRpbGVSZWN0LCBiYWNrZ3JvdW5k
Q29sb3IoKSkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIGhvdyB0aGUgdG9wIGxlZnQgaGFzIG1vdmVkLCBz
byB0aGUgdGV4dHVyZSBjYW4gYmUKKyAgICAgICAgICAgIC8vIG9mZnNldCB0aGUgc2FtZSBhbW91
bnQuCisgICAgICAgICAgICBJbnRTaXplIGRpc3BsYXlPZmZzZXQgPSB0aWxlUmVjdC5taW5YTWlu
WUNvcm5lcigpIC0gZGlzcGxheVJlY3QubWluWE1pbllDb3JuZXIoKTsKKyAgICAgICAgICAgIElu
dFBvaW50IHRleHR1cmVPZmZzZXQgPSBtX3RpbGVyLT50ZXh0dXJlT2Zmc2V0KGksIGopICsgZGlz
cGxheU9mZnNldDsKKyAgICAgICAgICAgIGZsb2F0IHRpbGVXaWR0aCA9IHN0YXRpY19jYXN0PGZs
b2F0PihtX3RpbGVyLT50aWxlU2l6ZSgpLndpZHRoKCkpOworICAgICAgICAgICAgZmxvYXQgdGls
ZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVyLT50aWxlU2l6ZSgpLmhlaWdodCgp
KTsKKyAgICAgICAgICAgIEludFNpemUgdGV4dHVyZVNpemUodGlsZVdpZHRoLCB0aWxlSGVpZ2h0
KTsKIAotICAgIC8vIFVzZSBhbnRpLWFsaWFzaW5nIHByb2dyYW1zIG9ubHkgd2hlbiBuZWNlc3Nh
cnkuCi0gICAgYm9vbCB1c2VBQSA9IChtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSAmJiAoIXF1
YWQuaXNSZWN0aWxpbmVhcigpIHx8ICFxdWFkLmJvdW5kaW5nQm94KCkuaXNFeHByZXNzaWJsZUFz
SW50UmVjdCgpKSk7CisgICAgICAgICAgICBib29sIHVzZUFBID0gbV90aWxlci0+aGFzQm9yZGVy
VGV4ZWxzKCkgJiYgIXNoYXJlZFF1YWRTdGF0ZS0+aXNMYXllckF4aXNBbGlnbmVkSW50UmVjdCgp
OwogCi0gICAgaWYgKHVzZUFBKSB7Ci0gICAgICAgIGRldmljZVJlY3QuaW5mbGF0ZUFudGlBbGlh
c2luZ0Rpc3RhbmNlKCk7Ci0gICAgICAgIGxheWVyUXVhZC5pbmZsYXRlQW50aUFsaWFzaW5nRGlz
dGFuY2UoKTsKLSAgICB9CisgICAgICAgICAgICBib29sIGxlZnRFZGdlQUEgPSAhaSAmJiB1c2VB
QTsKKyAgICAgICAgICAgIGJvb2wgdG9wRWRnZUFBID0gIWogJiYgdXNlQUE7CisgICAgICAgICAg
ICBib29sIHJpZ2h0RWRnZUFBID0gaSA9PSBtX3RpbGVyLT5udW1UaWxlc1goKSAtIDEgJiYgdXNl
QUE7CisgICAgICAgICAgICBib29sIGJvdHRvbUVkZ2VBQSA9IGogPT0gbV90aWxlci0+bnVtVGls
ZXNZKCkgLSAxICYmIHVzZUFBOwogCi0gICAgc3dpdGNoIChtX3NhbXBsZWRUZXhlbEZvcm1hdCkg
ewotICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQToK
LSAgICAgICAgaWYgKHVzZUFBKSB7Ci0gICAgICAgICAgICBjb25zdCBQcm9ncmFtQUEqIHByb2dy
YW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1BQSgpOwotICAgICAgICAgICAgZHJhd1Rp
bGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJp
eCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCBwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgcHJvZ3Jh
bS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAoaXNOb25Db21wb3NpdGVkQ29udGVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgUHJvZ3JhbU9wYXF1ZSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJv
Z3JhbU9wYXF1ZSgpOwotICAgICAgICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBs
YXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVy
UXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgLTEsIC0xKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVy
ZXItPnRpbGVyUHJvZ3JhbSgpOwotICAgICAgICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRl
cmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3Qs
IGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgLTEsIC0xKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIExheWVyVGV4dHVyZVVwZGF0
ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEJHUkE6Ci0gICAgICAgIGlmICh1c2VBQSkgewotICAgICAg
ICAgICAgY29uc3QgUHJvZ3JhbVN3aXp6bGVBQSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRp
bGVyUHJvZ3JhbVN3aXp6bGVBQSgpOwotICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVy
ZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwg
bGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRl
cigpLmZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS5lZGdlTG9jYXRpb24oKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAo
aXNOb25Db21wb3NpdGVkQ29udGVudCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgUHJvZ3Jh
bVN3aXp6bGVPcGFxdWUqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1Td2l6
emxlT3BhcXVlKCk7Ci0gICAgICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxh
eWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJR
dWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBjb25zdCBQcm9ncmFtU3dpenpsZSogcHJvZ3JhbSA9IGxheWVy
UmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGUoKTsKLSAgICAgICAgICAgICAgICBkcmF3VGls
ZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4
LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIC0xLCAtMSk7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBjb25zdCBHQzNEaW50IHRleHR1cmVGaWx0ZXIg
PSBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIg
OiBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVDsKKyAgICAgICAgICAgIHF1YWRMaXN0LmFwcGVu
ZChDQ1RpbGVEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgdGlsZVJlY3QsIHRpbGUt
PnRleHR1cmVJZCgpLCB0ZXh0dXJlT2Zmc2V0LCB0ZXh0dXJlU2l6ZSwgdGV4dHVyZUZpbHRlciwg
Y29udGVudHNTd2l6emxlZCgpLCBsZWZ0RWRnZUFBLCB0b3BFZGdlQUEsIHJpZ2h0RWRnZUFBLCBi
b3R0b21FZGdlQUEpKTsKICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiB9CiAKQEAgLTE4OSwxOTAgKzE3
OCw2IEBAIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6c3luY1RleHR1cmVJZChpbnQgaSwgaW50IGos
IFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKQogICAgIHRpbGUtPnNldFRleHR1cmVJZCh0ZXh0
dXJlSWQpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgQ0NUaWxlZExheWVySW1wbDo6
ZHJhd1RpbGVzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnbG9iYWxUcmFu
c2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0sIGNvbnN0
IENDTGF5ZXJRdWFkJiBkZXZpY2VSZWN0LCBjb25zdCBDQ0xheWVyUXVhZCYgY29udGVudFF1YWQs
IGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIGludCBmcmFnbWVudFRleFRyYW5zZm9y
bUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9uKQotewotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwotICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRp
b24oKSwgMCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcXVh
ZFRyYW5zZm9ybSA9IGRldmljZVRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0KLSAgICBpZiAoZWRnZUxv
Y2F0aW9uICE9IC0xKSB7Ci0gICAgICAgIGZsb2F0IGVkZ2VbMjRdOwotICAgICAgICBjb250ZW50
UXVhZC50b0Zsb2F0QXJyYXkoZWRnZSk7Ci0gICAgICAgIGRldmljZVJlY3QudG9GbG9hdEFycmF5
KCZlZGdlWzEyXSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtM2Z2KGVk
Z2VMb2NhdGlvbiwgZWRnZSwgOCkpOwotICAgIH0KLQotICAgIENDTGF5ZXJRdWFkOjpFZGdlIHBy
ZXZFZGdlWSA9IGNvbnRlbnRRdWFkLnRvcCgpOwotCi0gICAgaW50IGxlZnQsIHRvcCwgcmlnaHQs
IGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJl
Y3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgSW50UmVjdCBsYXllclJlY3QgPSBt
X3RpbGVyLT5jb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKLSAgICBmbG9hdCBz
aWduID0gRmxvYXRRdWFkKGNvbnRlbnRSZWN0KS5pc0NvdW50ZXJjbG9ja3dpc2UoKSA/IC0xIDog
MTsKLSAgICBjb25zdCBHQzNEaW50IGZpbHRlciA9IG1fdGlsZXItPmhhc0JvcmRlclRleGVscygp
ID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNU
OwotICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKLSAgICAgICAgQ0NM
YXllclF1YWQ6OkVkZ2UgcHJldkVkZ2VYID0gY29udGVudFF1YWQubGVmdCgpOwotCi0gICAgICAg
IENDTGF5ZXJRdWFkOjpFZGdlIGVkZ2VZID0gY29udGVudFF1YWQuYm90dG9tKCk7Ci0gICAgICAg
IGlmIChqIDwgKG1fdGlsZXItPm51bVRpbGVzWSgpIC0gMSkpIHsKLSAgICAgICAgICAgIEludFJl
Y3QgdGlsZVJlY3QgPSB1bmlvblJlY3QobV90aWxlci0+dGlsZUJvdW5kcygwLCBqKSwgbV90aWxl
ci0+dGlsZUJvdW5kcyhtX3RpbGVyLT5udW1UaWxlc1goKSAtIDEsIGopKTsKLSAgICAgICAgICAg
IHRpbGVSZWN0LmludGVyc2VjdChsYXllclJlY3QpOwotCi0gICAgICAgICAgICAvLyBTa2lwIGVt
cHR5IHJvd3MuCi0gICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB0aWxlUmVjdCA9IG1fdGlsZXItPmxheWVy
UmVjdFRvQ29udGVudFJlY3QodGlsZVJlY3QpOwotCi0gICAgICAgICAgICBGbG9hdFBvaW50IHAx
KHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QubWF4WSgpKTsKLSAgICAgICAgICAgIEZsb2F0UG9p
bnQgcDIodGlsZVJlY3QueCgpLCB0aWxlUmVjdC5tYXhZKCkpOwotCi0gICAgICAgICAgICAvLyBN
YXAgcG9pbnRzIHRvIGRldmljZSBzcGFjZS4KLSAgICAgICAgICAgIHAxID0gZGV2aWNlVHJhbnNm
b3JtLm1hcFBvaW50KHAxKTsKLSAgICAgICAgICAgIHAyID0gZGV2aWNlVHJhbnNmb3JtLm1hcFBv
aW50KHAyKTsKLQotICAgICAgICAgICAgLy8gQ29tcHV0ZSBob3Jpem9udGFsIGVkZ2UuCi0gICAg
ICAgICAgICBlZGdlWSA9IENDTGF5ZXJRdWFkOjpFZGdlKHAxLCBwMik7Ci0gICAgICAgICAgICBl
ZGdlWS5zY2FsZShzaWduKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGkgPSBsZWZ0
OyBpIDw9IHJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgIERyYXdhYmxlVGlsZSogdGlsZSA9IHRp
bGVBdChpLCBqKTsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgdXNlIHRpbGVDb250ZW50UmVjdCBo
ZXJlLCBhcyB0aGF0IGNvbnRhaW5zIHRoZSBmdWxsCi0gICAgICAgICAgICAvLyByZWN0IHdpdGgg
Ym9yZGVyIHRleGVscyB3aGljaCBzaG91bGRuJ3QgYmUgZHJhd24uCi0gICAgICAgICAgICBJbnRS
ZWN0IHRpbGVSZWN0ID0gbV90aWxlci0+dGlsZUJvdW5kcyhpLCBqKTsKLSAgICAgICAgICAgIElu
dFJlY3QgZGlzcGxheVJlY3QgPSB0aWxlUmVjdDsKLSAgICAgICAgICAgIHRpbGVSZWN0LmludGVy
c2VjdChsYXllclJlY3QpOwotCi0gICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIGhvdyB0aGUg
dG9wIGxlZnQgaGFzIG1vdmVkLCBzbyB0aGUgdGV4dHVyZSBjYW4gYmUKLSAgICAgICAgICAgIC8v
IG9mZnNldCB0aGUgc2FtZSBhbW91bnQuCi0gICAgICAgICAgICBJbnRTaXplIGRpc3BsYXlPZmZz
ZXQgPSB0aWxlUmVjdC5taW5YTWluWUNvcm5lcigpIC0gZGlzcGxheVJlY3QubWluWE1pbllDb3Ju
ZXIoKTsKLQotICAgICAgICAgICAgLy8gU2tpcCBlbXB0eSB0aWxlcy4KLSAgICAgICAgICAgIGlm
ICh0aWxlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgICAgIHRpbGVSZWN0ID0gbV90aWxlci0+bGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxlUmVj
dCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UmVjdCBjbGFtcFJlY3QodGlsZVJlY3QpOwotICAgICAg
ICAgICAgLy8gQ2xhbXAgdGV4dHVyZSBjb29yZGluYXRlcyB0byBhdm9pZCBzYW1wbGluZyBvdXRz
aWRlIHRoZSBsYXllcgotICAgICAgICAgICAgLy8gYnkgZGVmbGF0aW5nIHRoZSB0aWxlIHJlZ2lv
biBoYWxmIGEgdGV4ZWwgb3IgaGFsZiBhIHRleGVsCi0gICAgICAgICAgICAvLyBtaW51cyBlcHNp
bG9uIGZvciBvbmUgcGl4ZWwgbGF5ZXJzLiBUaGUgcmVzdWx0aW5nIGNsYW1wIHJlZ2lvbgotICAg
ICAgICAgICAgLy8gaXMgbWFwcGVkIHRvIHRoZSB1bml0IHNxdWFyZSBieSB0aGUgdmVydGV4IHNo
YWRlciBhbmQgbWFwcGVkCi0gICAgICAgICAgICAvLyBiYWNrIHRvIG5vcm1hbGl6ZWQgdGV4dHVy
ZSBjb29yZGluYXRlcyBieSB0aGUgZnJhZ21lbnQgc2hhZGVyCi0gICAgICAgICAgICAvLyBhZnRl
ciBiZWluZyBjbGFtcGVkIHRvIDAtMSByYW5nZS4KLSAgICAgICAgICAgIGNvbnN0IGZsb2F0IGVw
c2lsb24gPSAxIC8gMTAyNC4wZjsKLSAgICAgICAgICAgIGZsb2F0IGNsYW1wWCA9IG1pbigwLjUs
IGNsYW1wUmVjdC53aWR0aCgpIC8gMi4wIC0gZXBzaWxvbik7Ci0gICAgICAgICAgICBmbG9hdCBj
bGFtcFkgPSBtaW4oMC41LCBjbGFtcFJlY3QuaGVpZ2h0KCkgLyAyLjAgLSBlcHNpbG9uKTsKLSAg
ICAgICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWCgtY2xhbXBYKTsKLSAgICAgICAgICAgIGNsYW1w
UmVjdC5pbmZsYXRlWSgtY2xhbXBZKTsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBjbGFtcE9mZnNl
dCA9IGNsYW1wUmVjdC5taW5YTWluWUNvcm5lcigpIC0gRmxvYXRSZWN0KHRpbGVSZWN0KS5taW5Y
TWluWUNvcm5lcigpOwotCi0gICAgICAgICAgICBGbG9hdFBvaW50IHRleE9mZnNldCA9IG1fdGls
ZXItPnRleHR1cmVPZmZzZXQoaSwgaikgKyBjbGFtcE9mZnNldCArIEZsb2F0U2l6ZShkaXNwbGF5
T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IHRpbGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0
PihtX3RpbGVyLT50aWxlU2l6ZSgpLndpZHRoKCkpOwotICAgICAgICAgICAgZmxvYXQgdGlsZUhl
aWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVyLT50aWxlU2l6ZSgpLmhlaWdodCgpKTsK
LQotICAgICAgICAgICAgLy8gTWFwIGNsYW1waW5nIHJlY3RhbmdsZSB0byB1bml0IHNxdWFyZS4K
LSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVggPSAtY2xhbXBSZWN0LngoKSAv
IGNsYW1wUmVjdC53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRl
WSA9IC1jbGFtcFJlY3QueSgpIC8gY2xhbXBSZWN0LmhlaWdodCgpOwotICAgICAgICAgICAgZmxv
YXQgdmVydGV4VGV4U2NhbGVYID0gdGlsZVJlY3Qud2lkdGgoKSAvIGNsYW1wUmVjdC53aWR0aCgp
OwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0KCkg
LyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCB0byBub3JtYWxpemVk
IHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFRyYW5z
bGF0ZVggPSB0ZXhPZmZzZXQueCgpIC8gdGlsZVdpZHRoOwotICAgICAgICAgICAgZmxvYXQgZnJh
Z21lbnRUZXhUcmFuc2xhdGVZID0gdGV4T2Zmc2V0LnkoKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAg
ICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWCA9IGNsYW1wUmVjdC53aWR0aCgpIC8gdGlsZVdp
ZHRoOwotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVkgPSBjbGFtcFJlY3QuaGVp
Z2h0KCkgLyB0aWxlSGVpZ2h0OwotCi0gICAgICAgICAgICAvLyBPcGVuR0wgY29vcmRpbmF0ZSBz
eXN0ZW0gaXMgYm90dG9tLXVwLgotICAgICAgICAgICAgLy8gSWYgdGlsZSB0ZXh0dXJlIGlzIHRv
cC1kb3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgICAg
ICAgICBpZiAobV90ZXh0dXJlT3JpZW50YXRpb24gPT0gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9w
RG93bk9yaWVudGF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnRUZXhUcmFuc2xhdGVZ
ID0gMS4wIC0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAgICAgIGZyYWdtZW50
VGV4U2NhbGVZICo9IC0xLjA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENDTGF5ZXJR
dWFkOjpFZGdlIGVkZ2VYID0gY29udGVudFF1YWQucmlnaHQoKTsKLSAgICAgICAgICAgIGlmIChp
IDwgKG1fdGlsZXItPm51bVRpbGVzWCgpIC0gMSkpIHsKLSAgICAgICAgICAgICAgICBGbG9hdFBv
aW50IHAxKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QueSgpKTsKLSAgICAgICAgICAgICAgICBG
bG9hdFBvaW50IHAyKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QubWF4WSgpKTsKLQotICAgICAg
ICAgICAgICAgIC8vIE1hcCBwb2ludHMgdG8gZGV2aWNlIHNwYWNlLgotICAgICAgICAgICAgICAg
IHAxID0gZGV2aWNlVHJhbnNmb3JtLm1hcFBvaW50KHAxKTsKLSAgICAgICAgICAgICAgICBwMiA9
IGRldmljZVRyYW5zZm9ybS5tYXBQb2ludChwMik7Ci0KLSAgICAgICAgICAgICAgICAvLyBDb21w
dXRlIHZlcnRpY2FsIGVkZ2UuCi0gICAgICAgICAgICAgICAgZWRnZVggPSBDQ0xheWVyUXVhZDo6
RWRnZShwMSwgcDIpOwotICAgICAgICAgICAgICAgIGVkZ2VYLnNjYWxlKHNpZ24pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBDcmVhdGUgZGV2aWNlIHNwYWNlIHF1YWQuCi0gICAg
ICAgICAgICBDQ0xheWVyUXVhZCBkZXZpY2VRdWFkKHByZXZFZGdlWCwgcHJldkVkZ2VZLCBlZGdl
WCwgZWRnZVkpOwotCi0gICAgICAgICAgICAvLyBNYXAgcXVhZCB0byBsYXllciBzcGFjZS4KLSAg
ICAgICAgICAgIEZsb2F0UXVhZCBxdWFkID0gcXVhZFRyYW5zZm9ybS5tYXBRdWFkKGRldmljZVF1
YWQuZmxvYXRRdWFkKCkpOwotCi0gICAgICAgICAgICAvLyBOb3JtYWxpemUgdG8gdGlsZVJlY3Qu
Ci0gICAgICAgICAgICBxdWFkLnNjYWxlKDEuMGYgLyB0aWxlUmVjdC53aWR0aCgpLCAxLjBmIC8g
dGlsZVJlY3QuaGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBpZiAoZnJhZ21lbnRUZXhUcmFuc2Zv
cm1Mb2NhdGlvbiA9PSAtMSkgewotICAgICAgICAgICAgICAgIC8vIE1vdmUgZnJhZ21lbnQgc2hh
ZGVyIHRyYW5zZm9ybSB0byB2ZXJ0ZXggc2hhZGVyLiBXZSBjYW4gZG8KLSAgICAgICAgICAgICAg
ICAvLyB0aGlzIHdoaWxlIHN0aWxsIHByb2R1Y2luZyBjb3JyZWN0IHJlc3VsdHMgYXMKLSAgICAg
ICAgICAgICAgICAvLyBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uIHNob3VsZCBhbHdheXMg
YmUgbm9uLW5lZ2F0aXZlCi0gICAgICAgICAgICAgICAgLy8gd2hlbiB0aWxlcyBhcmUgdHJhbnNm
b3JtZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCByZXN1bHQgaW4KLSAgICAgICAgICAgICAgICAvLyBz
YW1wbGluZyBvdXRzaWRlIHRoZSBsYXllci4KLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2Fs
ZVggKj0gZnJhZ21lbnRUZXhTY2FsZVg7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4U2NhbGVZ
ICo9IGZyYWdtZW50VGV4U2NhbGVZOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0
ZVggKj0gZnJhZ21lbnRUZXhTY2FsZVg7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNs
YXRlWSAqPSBmcmFnbWVudFRleFNjYWxlWTsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFu
c2xhdGVYICs9IGZyYWdtZW50VGV4VHJhbnNsYXRlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhU
ZXhUcmFuc2xhdGVZICs9IGZyYWdtZW50VGV4VHJhbnNsYXRlWTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYoZnJhZ21l
bnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgZnJhZ21lbnRUZXhUcmFuc2xhdGVYLCBmcmFnbWVudFRl
eFRyYW5zbGF0ZVksIGZyYWdtZW50VGV4U2NhbGVYLCBmcmFnbWVudFRleFNjYWxlWSkpOwotCi0g
ICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPnZlcnRl
eFNoYWRlcigpLnZlcnRleFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIHZlcnRleFRleFRyYW5zbGF0
ZVgsIHZlcnRleFRleFRyYW5zbGF0ZVksIHZlcnRleFRleFNjYWxlWCwgdmVydGV4VGV4U2NhbGVZ
KSk7Ci0KLSAgICAgICAgICAgIGlmICh0aWxlICYmIHRpbGUtPnRleHR1cmVJZCgpKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIHRpbGUtPnRleHR1cmVJZCgpKTsKLSAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgZmlsdGVyKSk7Ci0gICAgICAgICAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIGZp
bHRlcikpOwotCi0gICAgICAgICAgICAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVh
ZChnbG9iYWxUcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgb3BhY2l0eSwg
cXVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigp
LmFscGhhTG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnBvaW50TG9jYXRpb24oKSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRp
bGVUcmFuc2Zvcm0gPSBnbG9iYWxUcmFuc2Zvcm07Ci0gICAgICAgICAgICAgICAgdGlsZVRyYW5z
Zm9ybS50cmFuc2xhdGUodGlsZVJlY3QueCgpICsgdGlsZVJlY3Qud2lkdGgoKSAvIDIuMCwgdGls
ZVJlY3QueSgpICsgdGlsZVJlY3QuaGVpZ2h0KCkgLyAyLjApOwotCi0gICAgICAgICAgICAgICAg
Y29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogc29saWRDb2xvclByb2dyYW0gPSBs
YXllclJlbmRlcmVyLT5ib3JkZXJQcm9ncmFtKCk7Ci0gICAgICAgICAgICAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnVzZVByb2dyYW0oc29saWRDb2xvclByb2dyYW0tPnByb2dyYW0oKSkpOwot
Ci0gICAgICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihzb2xpZENv
bG9yUHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5jb2xvckxvY2F0aW9uKCksIGJhY2tncm91bmRD
b2xvcigpLnJlZCgpLCBiYWNrZ3JvdW5kQ29sb3IoKS5ncmVlbigpLCBiYWNrZ3JvdW5kQ29sb3Io
KS5ibHVlKCksIGJhY2tncm91bmRDb2xvcigpLmFscGhhKCkpKTsKLQotICAgICAgICAgICAgICAg
IGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQodGlsZVRyYW5zZm9ybSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCks
IHRpbGVSZWN0LmhlaWdodCgpLCBvcGFjaXR5LCBxdWFkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc29saWRDb2xvclByb2dyYW0tPnZlcnRleFNoYWRl
cigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAtMSwgLTEpOwotCi0gICAgICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHByZXZFZGdlWCA9IGVkZ2VYOwotICAgICAgICAgICAgLy8gUmV2ZXJzZSBk
aXJlY3Rpb24uCi0gICAgICAgICAgICBwcmV2RWRnZVguc2NhbGUoLTEpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcHJldkVkZ2VZID0gZWRnZVk7Ci0gICAgICAgIC8vIFJldmVyc2UgZGlyZWN0aW9u
LgotICAgICAgICBwcmV2RWRnZVkuc2NhbGUoLTEpOwotICAgIH0KLX0KLQogfQogCiAjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1w
bC5oCmluZGV4IDEwMDNkYmNiNTY2Njg4YzUyY2Q0MjFhYjAxZmQxYjYyZjEzYTc3MGEuLmU2ZjZj
OGUyZDExNWRjNTBlMzdiY2I2MDM2YWM2OTM3ZjNmZTZhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVk
TGF5ZXJJbXBsLmgKQEAgLTQzLDE3ICs0MywyMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1
YWwgfkNDVGlsZWRMYXllckltcGwoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVu
ZGVyZXJDaHJvbWl1bSopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRMaXN0
JiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqKTsKKwogICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29u
dGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogCiAgICAgdmlydHVhbCB2b2lk
IGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCiAg
ICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0RyYXcpIHsgbV9za2lwc0RyYXcgPSBza2lw
c0RyYXc7IH0KICAgICB2b2lkIHNldFRleHR1cmVPcmllbnRhdGlvbihMYXllclRleHR1cmVVcGRh
dGVyOjpPcmllbnRhdGlvbiB0ZXh0dXJlT3JpZW50YXRpb24pIHsgbV90ZXh0dXJlT3JpZW50YXRp
b24gPSB0ZXh0dXJlT3JpZW50YXRpb247IH0KLSAgICB2b2lkIHNldFNhbXBsZWRUZXhlbEZvcm1h
dChMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9y
bWF0KSB7IG1fc2FtcGxlZFRleGVsRm9ybWF0ID0gc2FtcGxlZFRleGVsRm9ybWF0OyB9CiAgICAg
dm9pZCBzZXRUaWxpbmdEYXRhKGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiB0aWxlcik7CiAgICAg
dm9pZCBzeW5jVGV4dHVyZUlkKGludCwgaW50LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCk7
CiAKKyAgICB2b2lkIHNldENvbnRlbnRzU3dpenpsZWQoYm9vbCBjb250ZW50c1N3aXp6bGVkKSB7
IG1fY29udGVudHNTd2l6emxlZCA9IGNvbnRlbnRzU3dpenpsZWQ7IH0KKyAgICBib29sIGNvbnRl
bnRzU3dpenpsZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU3dpenpsZWQ7IH0KKwogICAg
IHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJS
R0JBVGV4QWxwaGE+IFByb2dyYW07CiAgICAgLy8gU2hhZGVyIHByb2dyYW0gdGhhdCBzd2FwcyBy
ZWQgYW5kIGJsdWUgY29tcG9uZW50cyBvZiB0ZXh0dXJlLgogICAgIC8vIFVzZWQgd2hlbiB0ZXh0
dXJlIGZvcm1hdCBkb2VzIG5vdCBtYXRjaCBuYXRpdmUgY29sb3IgZm9ybWF0LgpAQCAtNzIsMjUg
Kzc1LDE4IEBAIHByb3RlY3RlZDoKICAgICAvLyBFeHBvc2VkIGZvciB0ZXN0aW5nLgogICAgIGJv
b2wgaGFzVGlsZUF0KGludCwgaW50KSBjb25zdDsKIAorICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRp
b25NYXRyaXggcXVhZFRyYW5zZm9ybSgpIGNvbnN0OworCiBwcml2YXRlOgogCiAgICAgdmlydHVh
bCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDb250ZW50
TGF5ZXIiOyB9CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0aWxpbmdUcmFuc2Zvcm0oKSBj
b25zdDsKLQotICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIGNv
bnRlbnQgcmVjdC4KLSAgICB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQg
b3BhY2l0eSk7Ci0KICAgICBEcmF3YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29uc3Q7CiAg
ICAgRHJhd2FibGVUaWxlKiBjcmVhdGVUaWxlKGludCwgaW50KTsKIAotICAgIC8vIERyYXcgYWxs
IHRpbGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCi0gICAgdGVtcGxhdGUgPGNs
YXNzIFQ+Ci0gICAgdm9pZCBkcmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnbG9iYWxU
cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0sIGNv
bnN0IENDTGF5ZXJRdWFkJiBkZXZpY2VSZWN0LCBjb25zdCBDQ0xheWVyUXVhZCYgY29udGVudFF1
YWQsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIGludCBmcmFnbWVudFRleFRyYW5z
Zm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9uKTsKLQogICAgIGJvb2wgbV9za2lwc0RyYXc7
CisgICAgYm9vbCBtX2NvbnRlbnRzU3dpenpsZWQ7CiAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
T3JpZW50YXRpb24gbV90ZXh0dXJlT3JpZW50YXRpb247Ci0gICAgTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6U2FtcGxlZFRleGVsRm9ybWF0IG1fc2FtcGxlZFRleGVsRm9ybWF0OwogCiAgICAgT3duUHRy
PENDTGF5ZXJUaWxpbmdEYXRhPiBtX3RpbGVyOwogfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2OTdlMTYyYTU3YmExMzNh
MDllYzFiYjg0NGQzNDZkN2FhMDU0ZjY2Li4xNmNkOTVhMDVhNmE2ZTBiMzc5MTc0MTI2ZTk4OWE3
YmM0ZDkzNzQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMTItMDkgIEFkcmllbm5lIFdh
bGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIHRp
bGUgZHJhd2luZyB0byBiZSBtb3JlIGRhdGEtZHJpdmVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzA1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hcmsgdGhyZWUgdGVzdHMgYXMgZmFpbGluZyB3aXRo
IHNtYWxsIHBpeGVsIGRpZmZlcmVuY2VzLiBUaGVzZSBqdXN0CisgICAgICAgIG5lZWQgcmViYXNl
bGluaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMu
dHh0OgorCiAyMDExLTEyLTA5ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgVHJ5IHRvIGRlZmxha2UgYSByZXBhaW50IHRlc3Qgb24gQ2hyb21pdW0uICBJdCBsb29r
cyBsaWtlIHdlJ3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90
ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0
X2V4cGVjdGF0aW9ucy50eHQKaW5kZXggNDFlNDMxZTVhNmRiZDUxYWE0NWQ4ZGNlNjY2YjY1YTQ0
MWU0NTlhZS4uMzAyNDhhZThjYzg3MmJlNTY0ZTU2MjEyZGIyMTIyMTA5ODU2YzU3NCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4
dApAQCAtMzc4NSw2ICszNzg1LDExIEBAIEJVR1dLNzM5MDUgR1BVIExJTlVYIDogbWVkaWEvdmlk
ZW8tdHJhbnNmb3JtZWQuaHRtbCA9IElNQUdFCiBCVUdXSzczOTA1IEdQVSBMSU5VWCA6IG1lZGlh
L3ZpZGVvLXpvb20tY29udHJvbHMuaHRtbCA9IElNQUdFCiBCVUdXSzczOTA1IEdQVSBXSU4gOiBt
ZWRpYS92aWRlby1sYXllci1jcmFzaC5odG1sID0gVEVYVAogCisvLyBOZWVkIHJlYmFzZWxpbmUg
b24gYWxsIHBsYXRmb3JtcworQlVHRU5ORSA6IGNvbXBvc2l0aW5nL2NvbG9yLW1hdGNoaW5nL2lt
YWdlLWNvbG9yLW1hdGNoaW5nLmh0bWwgPSBGQUlMCitCVUdFTk5FIDogY29tcG9zaXRpbmcvZ2Vv
bWV0cnkvdmVydGljYWwtc2Nyb2xsLWNvbXBvc2l0ZWQuaHRtbCA9IEZBSUwKK0JVR0VOTkUgOiBj
b21wb3NpdGluZy9zY2FsaW5nL3RpbGVkLWxheWVyLXJlY3Vyc2lvbi5odG1sID0gRkFJTAorCiBC
VUdXSzczOTMzIERFQlVHIDogc3ZnL1czQy1TVkctMS4xLVNFL3N0cnVjdC1kb20tMTEtZi5zdmcg
PSBUSU1FT1VUIFBBU1MKIAogQlVHV0s3Mzk5MSBXSU43IFZJU1RBIFJFTEVBU0UgOiBmYXN0L3Rl
eHQvaW50ZXJuYXRpb25hbC9jb21wbGV4LWNoYXJhY3Rlci1iYXNlZC1mYWxsYmFjay5odG1sID0g
SU1BR0UrVEVYVAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118816</attachid>
            <date>2011-12-12 10:43:08 -0800</date>
            <delta_ts>2011-12-13 17:19:43 -0800</delta_ts>
            <desc>Clean up quad opacity/opaque</desc>
            <filename>bug-73059-20111212104307.patch</filename>
            <type>text/plain</type>
            <size>123199</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhiYjJlNWQ5Y2Y3MTk5
OTk1NmQ1YjM1NmZhYWRjYzZmNDExNTMyOS4uY2I4MTE4MGY2NTM4ZTc3MTEwMDVhMGQwNjBkOGNh
YWY5MGI3ODNiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAorMjAxMS0xMi0wOSAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVm
YWN0b3IgdGlsZSBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDU5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFydGlhbGx5IHRlc3RlZCBieSBjb21w
b3NpdG9yIGxheW91dCB0ZXN0cy4gRGVidWcgYm9yZGVycyBhbmQKKyAgICAgICAgY2hlY2tlcmJv
YXJkaW5nIHRlc3RlZCBtYW51YWxseS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXJ0
IG9mIGEgbW92ZSB0b3dhcmRzIHJlbmRlcmluZyBxdWFkcyBvbiBzY3JlZW4KKyAgICAgICAgZnJv
bSBhIGJhZyBvZiBkYXRhIHJhdGhlciB0aGFuIGluIHZpcnR1YWwgQ0NMYXllckltcGw6OmRyYXcg
ZnVuY3Rpb25zLgorCisgICAgICAgIENDRHJhd1F1YWQtZGVyaXZlZCBjbGFzc2VzIHN0b3JlIG1h
dGVyaWFsLXNwZWNpZmljIHBpZWNlcyBvZiBkYXRhIHRvCisgICAgICAgIHVzZSB3aGVuIHJlbmRl
cmluZy4gQ0NMYXllckltcGwgY2xhc3NlcyBub3cgY3JlYXRlIHRoZXNlIENDRHJhd1F1YWQKKyAg
ICAgICAgb2JqZWN0cyByYXRoZXIgdGhhbiBpc3N1aW5nIGRpcmVjdCBHTCBjb21tYW5kcy4gV2hl
cmUgdGhpcyBkYXRhIGlzCisgICAgICAgIHNoYXJlZCBiZXR3ZWVuIHF1YWRzIHRoYXQgY29tZSBm
cm9tIHRoZSBzYW1lIGxheWVyLCB0aGF0IGRhdGEgaXMKKyAgICAgICAgc3RvcmVkIGluIGEgQ0NT
aGFyZWRRdWFkU3RhdGUgb2JqZWN0IHJhdGhlciB0aGFuIGR1cGxpY2F0ZWQuCisKKyAgICAgICAg
Q0NSZW5kZXJQYXNzIGlzIHRoZSBjbGFzcyB0aGF0IGhvbGRzIHRoZSBsaXN0IG9mIHF1YWRzIGFu
ZCB0aGUgdGFyZ2V0CisgICAgICAgIHN1cmZhY2UgdGhhdCB0aGV5IGRyYXcgaW50by4gRHJhd2lu
ZyBhIGZyYW1lIGNvbnNpc3RzIG9mIGRyYXdpbmcgYQorICAgICAgICBzZXJpZXMgb2YgcmVuZGVy
IHBhc3NlcyBvbnRvIHRoZWlyIHJlc3BlY3RpdmUgc3VyZmFjZXMuCisKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0SW1wbCBjb25zdHJ1Y3RzIHRoZXNlIHJlbmRlciBwYXNzZXMgZnJvbSB0aGUgb3V0
cHV0IG9mCisgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSBieSBh
c2tpbmcgZWFjaCBsYXllciB0byBpbnNlcnQKKyAgICAgICAgcXVhZHMgaW50byBhIGxpc3QgYW5k
IGhhbmRzIHRoZW0gb2ZmIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bSBmb3IKKyAgICAgICAgcmVu
ZGVyaW5nLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclN1cmZhY2VRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29s
b3JRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnRpbGVVbmlmb3JtTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZFRpbGVQcm9ncmFtVW5pZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Q3VzdG9tTGF5ZXJRdWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRU
aWxlQmluZGluZ0Jhc2U6OmFscGhhTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21l
bnRUaWxlQmluZGluZ0Jhc2U6OmVkZ2VMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFn
bWVudFRpbGVCaW5kaW5nQmFzZTo6ZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFnbWVudFRpbGVCaW5kaW5nQmFzZTo6c2FtcGxlckxvY2F0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGll
c1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxh
eWVyRHJhd1F1YWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDQ3VzdG9tTGF5ZXJE
cmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQ3VzdG9tTGF5ZXJEcmF3UXVh
ZDo6Q0NDdXN0b21MYXllckRyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0N1c3RvbUxheWVyRHJhd1F1YWQ6OmxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6Q0NEZWJ1Z0JvcmRlckRyYXdRdWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJh
d1F1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6
OmNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6d2lkdGgp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJR
dWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjpDQ0RyYXdRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6OnRvRGVidWdCb3JkZXJEcmF3UXVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b1NvbGlkQ29sb3JEcmF3UXVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b1RpbGVEcmF3UXVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b0N1c3RvbUxheWVyRHJhd1F1YWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJRdWFkLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RyYXdRdWFkOjpxdWFkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdR
dWFkOjpsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjpsYXll
clJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6Y2xpcFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Ry
YXdRdWFkOjpkcmF3c09wYXF1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEcmF3UXVhZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVh
ZDo6Q0NEcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b0RlYnVnQm9y
ZGVyRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9SZW5kZXJTdXJm
YWNlRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9Tb2xpZENvbG9y
RHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9UaWxlRHJhd1F1YWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9DdXN0b21MYXllckRyYXdRdWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6cXVhZFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NEcmF3UXVhZDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0RyYXdRdWFkOjpsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFk
OjpsYXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6Y2xpcFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0RyYXdRdWFkOjpkcmF3c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFk
Ojppc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1
YWQ6Om1hdGVyaWFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2hhcmVkUXVh
ZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6YXBwZW5kRGVidWdCb3JkZXJRdWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dHJhY2tEYW1hZ2VGb3JBbGxTdXJm
YWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2NyZWVuU3BhY2VUcmFuc2Zvcm1Gb3JT
dXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0
ZVJlbmRlclBhc3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpk
cmF3TGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBh
c3M6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OkNDUmVuZGVyUGFz
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNz
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpxdWFkTGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OnRhcmdldFN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpzZXRTdXJmYWNlRGFtYWdlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclBhc3M6OnN1cmZhY2VEYW1hZ2VSZWN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZURyYXdRdWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQ6OmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3Vy
ZmFjZURyYXdRdWFkOjpzdXJmYWNlRGFtYWdlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaGFyZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2hhcmVkUXVhZFN0YXRlOjppc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpxdWFkVHJhbnNmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpsYXllclRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6bGF5ZXJSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpjbGlwUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NoYXJlZFF1YWRTdGF0ZTo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJl
ZFF1YWRTdGF0ZTo6aXNPcGFxdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU29s
aWRDb2xvckRyYXdRdWFkOjpDQ1NvbGlkQ29sb3JEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6Y29sb3IpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGlsZURyYXdRdWFkOjpDQ1RpbGVEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGlsZURyYXdRdWFkOjp0ZXh0dXJlT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGls
ZURyYXdRdWFkOjp0ZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVh
ZDo6dGV4dHVyZUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6c3dp
enpsZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdRdWFkOjpsZWZ0RWRn
ZUFBKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdRdWFkOjp0b3BFZGdlQUEpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaWxlRHJhd1F1YWQ6OnJpZ2h0RWRnZUFBKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGlsZURyYXdRdWFkOjpib3R0b21FZGdlQUEpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaWxlRHJhd1F1YWQ6OmlzQW50aWFsaWFzZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RpbGVkTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGls
ZWRMYXllckltcGw6OmFwcGVuZFF1YWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVk
TGF5ZXJJbXBsOjpzZXRDb250ZW50c1N3aXp6bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGls
ZWRMYXllckltcGw6OmNvbnRlbnRzU3dpenpsZWQpOgorCiAyMDExLTEyLTEyICBNYXJ5IFd1ICA8
bWFyeS53dUB0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgVXBzdHJlYW0gMyBmaWxlcyBp
bnRvIFdlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDU5ZjQ1
NzI4YjFkZTE3ZmFhYTc1NDZhNWIzMzEyMWUxYjFkZTBhNDguLmQ4MjIwOTYyMzhhYjVkNzdmODMz
M2I0NjRjODU4MDc3NzFlNGRlMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1OTYsMTAgKzM1OTYs
MTYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVy
Q2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NDYW52YXNMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VU
cmFja2VyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NEYW1hZ2VUcmFja2VyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNl
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWxh
eUJhc2VkVGltZVNvdXJjZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0RyYXdRdWFkLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxh
eS5jcHAnLApAQCAtMzYyNSwxNyArMzYzMSwyNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlci5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNo
aW5lLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
Y2hlZHVsZXJTdGF0ZU1hY2hpbmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFk
UHJveHkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVw
ZGF0ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aWxlRHJhd1F1YWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RpbGVEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCmluZGV4IGEwNjI5NDE0ZGNlMzUwNWJmODk1Yjg4OTMzNTIwOTY4NDFi
YjU4NmMuLmNlZmMyODNiYzBiZmVmYjFjYzIwMWM2NzYwNjc5NzM3MjE2M2VkNzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNTIsNyArNTIsMTMgQEAKICNpbmNs
dWRlICJUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25p
emVyLmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0ND
dXN0b21MYXllckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCisj
aW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5k
ZXJQYXNzLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKyNpbmNs
dWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGlsZURyYXdR
dWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCkBAIC0xMDcsMjEgKzEx
Myw2IEBAIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5NYXRyaXgoaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJuIHNjcmVlbjsKIH0KIAotc3Rh
dGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbXB1dGVTY3JlZW5TcGFjZVRyYW5zZm9ybUZvclN1
cmZhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllcikKLXsKLSAgICAvLyBUaGUgbGF5
ZXIncyBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtIGNhbiBiZSB3cml0dGVuIGFzOgotICAgIC8vICAg
bGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybSAq
IGxheWVyT3JpZ2luVHJhbnNmb3JtCi0gICAgLy8gU28sIHRvIGNvbXB1dGUgdGhlIHN1cmZhY2Ug
c2NyZWVuIHNwYWNlLCB3ZSBjYW4gZG86Ci0gICAgLy8gICBzdXJmYWNlU2NyZWVuU3BhY2VUcmFu
c2Zvcm0gPSBsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtICogaW52ZXJzZShsYXllck9yaWdpblRy
YW5zZm9ybSkKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3Jt
ID0gcmVuZGVyU3VyZmFjZUxheWVyLT5kcmF3VHJhbnNmb3JtKCk7Ci0gICAgbGF5ZXJPcmlnaW5U
cmFuc2Zvcm0udHJhbnNsYXRlKC0wLjUgKiByZW5kZXJTdXJmYWNlTGF5ZXItPmJvdW5kcygpLndp
ZHRoKCksIC0wLjUgKiByZW5kZXJTdXJmYWNlTGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsKLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSByZW5k
ZXJTdXJmYWNlTGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7Ci0gICAgc3VyZmFjZVNjcmVl
blNwYWNlVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyT3JpZ2luVHJhbnNmb3JtLmludmVyc2UoKSk7
Ci0KLSAgICByZXR1cm4gc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtOwotfQotCiAjaWYgVVNF
KFNLSUEpCiBib29sIGNvbnRleHRTdXBwb3J0c0FjY2VsZXJhdGVkUGFpbnRpbmcoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCiB7CkBAIC0zMTksNTIgKzMxMCw3IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQogICAgIG1fY3VycmVudFJlbmRlclN1cmZh
Y2UgPSAwOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCi17
Ci0gICAgLy8gRklYTUU6IHVzZSB0aGUgZnJhbWUgYmVnaW4gdGltZSBmcm9tIHRoZSBvdmVyYWxs
IGNvbXBvc2l0b3Igc2NoZWR1bGVyLgotICAgIC8vIFRoaXMgdmFsdWUgaXMgY3VycmVudGx5IGlu
YWNjZXNzaWJsZSBiZWNhdXNlIGl0IGlzIHVwIGluIENocm9taXVtJ3MKLSAgICAvLyBSZW5kZXJX
aWRnZXQuCi0gICAgbV9oZWFkc1VwRGlzcGxheS0+b25GcmFtZUJlZ2luKGN1cnJlbnRUaW1lKCkp
OwotCi0gICAgaWYgKCFyb290TGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90
IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3Vy
cmVudE1lbW9yeVVzZUJ5dGVzKCk7Ci0gICAgc2l6ZV90IG1heExpbWl0ID0gVGV4dHVyZU1hbmFn
ZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKLSAgICBzaXplX3QgcmVjbGFpbUxp
bWl0ID0gVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsK
LQotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5
dGVzKG1heExpbWl0IC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7Ci0KLSAgICBkcmF3TGF5ZXJz
SW50ZXJuYWwoKTsKLQotICAgIGlmIChyZWNsYWltTGltaXQgPiBjb250ZW50c01lbW9yeVVzZUJ5
dGVzKQotICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0UHJlZmVycmVk
TWVtb3J5TGltaXRCeXRlcyhyZWNsYWltTGltaXQgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRQcmVm
ZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKDApOwotCi0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1h
bmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2Nh
dG9yLmdldCgpKTsKLQotICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbikKLSAg
ICAgICAgY29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJv
b3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQot
ewotICAgIC8vIEZvciBub3csIHdlIHVzZSBkYW1hZ2UgdHJhY2tpbmcgdG8gY29tcHV0ZSBhIGds
b2JhbCBzY2lzc29yLiBUbyBkbyB0aGlzLCB3ZSBtdXN0Ci0gICAgLy8gY29tcHV0ZSBhbGwgZGFt
YWdlIHRyYWNraW5nIGJlZm9yZSBkcmF3aW5nIGFueXRoaW5nLCBzbyB0aGF0IHdlIGtub3cgdGhl
IHJvb3QKLSAgICAvLyBkYW1hZ2UgcmVjdC4gVGhlIHJvb3QgZGFtYWdlIHJlY3QgaXMgdGhlbiB1
c2VkIHRvIHNjaXNzb3IgZWFjaCBzdXJmYWNlLgotCi0gICAgQVNTRVJUKG1fY2FwYWJpbGl0aWVz
LnVzaW5nUGFydGlhbFN3YXApOwotCi0gICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFj
ZUluZGV4KSB7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Ci0gICAgICAgIENDUmVuZGVy
U3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFj
ZSgpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7Ci0gICAgICAgIHJlbmRlclN1cmZh
Y2UtPmRhbWFnZVRyYWNrZXIoKS0+dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZShyZW5kZXJT
dXJmYWNlLT5sYXllckxpc3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpLCByZW5kZXJTdXJm
YWNlTGF5ZXItPm1hc2tMYXllcigpKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjbGVhclN1cmZhY2VGb3JEZWJ1ZyhDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxh
eWVyLCBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNl
RGFtYWdlUmVjdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclN1cmZhY2VGb3JE
ZWJ1ZyhDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UsIENDUmVuZGVyU3VyZmFjZSogcm9v
dFJlbmRlclN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCiB7CiAg
ICAgLy8gTm9uLXJvb3QgbGF5ZXJzIHNob3VsZCBjbGVhciB0aGVpciBlbnRpcmUgY29udGVudHMg
dG8gdHJhbnNwYXJlbnQuIFRoZSByb290IGxheWVyCiAgICAgLy8gaXMgY2xlYXJlZCB0byBibHVl
IHRvIGVhc2lseSBzZWUgcmVnaW9ucyB0aGF0IHdlcmUgbm90IGRyYXduIG9uIHRoZSBzY3JlZW4u
IElmIHdlCkBAIC0zNzIsNyArMzE4LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNs
ZWFyU3VyZmFjZUZvckRlYnVnKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIKICAgICAv
LyBjbGVhciB0aGUgZGFtYWdlZCByZWdpb24sIHNvIHRoYXQgd2UgZG9uJ3QgYWNjaWRlbnRhbGx5
IGNsZWFyIHVuLWNoYW5nZWQgcG9ydGlvbnMKICAgICAvLyBvZiB0aGUgc2NyZWVuLgogCi0gICAg
aWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSByb290RHJhd0xheWVyKQorICAgIGlmIChyZW5kZXJT
dXJmYWNlICE9IHJvb3RSZW5kZXJTdXJmYWNlKQogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOwogICAgIGVsc2UKICAgICAgICAg
R0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDEsIDEpKTsK
QEAgLTM4Niw1NiArMzMyLDE5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclN1
cmZhY2VGb3JEZWJ1ZyhDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyCiAgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09u
dG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6YmVnaW5EcmF3aW5nRnJhbWUoKQogewotICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMiLCB0aGlzLCAwKTsKLQotICAg
IGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKQotICAgICAgICB0cmFja0RhbWFn
ZUZvckFsbFN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwot
ICAgIG1fcm9vdERhbWFnZVJlY3QgPSByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUg
Y29udGVudHMgb2YgdGhlIHJlbmRlciBzdXJmYWNlcy4gV2UgdHJhdmVyc2UgdGhlIHJlbmRlciBz
dXJmYWNlcwotICAgIC8vIGZyb20gYmFjayB0byBmcm9udCB0byBndWFyYW50ZWUgdGhhdCBuZXN0
ZWQgcmVuZGVyIHN1cmZhY2VzIGdldCByZW5kZXJlZCBpbgotICAgIC8vIHRoZSBjb3JyZWN0IG9y
ZGVyLgotICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
c2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewotICAgICAg
ICBDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1
cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgQVNT
RVJUKHJlbmRlclN1cmZhY2UpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09w
YWNpdHkoKSk7Ci0KLSAgICAgICAgaWYgKHVzZVJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSkp
IHsKLQotICAgICAgICAgICAgRmxvYXRSZWN0IHN1cmZhY2VEYW1hZ2VSZWN0OwotICAgICAgICAg
ICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApIHsKLSAgICAgICAgICAgICAg
ICAvLyBGb3Igbm93LCB3ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhlIHJvb3QgZGFtYWdlIGFzIHRo
ZSBkYW1hZ2UgZm9yIGFsbAotICAgICAgICAgICAgICAgIC8vIHN1cmZhY2VzLCBleGNlcHQgcGVy
c3BlY3RpdmUgdHJhbnNmb3Jtcy4KLSAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IGNvbXB1dGVTY3JlZW5TcGFjZVRyYW5zZm9ybUZvclN1
cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyKTsKLSAgICAgICAgICAgICAgICBpZiAoc2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0uaGFzUGVyc3BlY3RpdmUoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBQ
ZXJzcGVjdGl2ZSBwcm9qZWN0aW9ucyBkbyBub3QgcGxheSBuaWNlIHdpdGggbWFwUmVjdCBvZiBp
bnZlcnNlIHRyYW5zZm9ybXMuCi0gICAgICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgdW5jb21t
b24gY2FzZSwgaXRzIHNpbXBsZXIgdG8ganVzdCByZWRyYXcgdGhlIGVudGlyZSBzdXJmYWNlLgot
ICAgICAgICAgICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IHJlbmRlclN1cmZhY2UtPmNv
bnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gc2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgICAgICAgICAgICAgICAgICBzdXJmYWNl
RGFtYWdlUmVjdCA9IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybS5tYXBSZWN0KG1fcm9vdERh
bWFnZVJlY3QpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gRklYTUU6IGV2ZW50dWFsbHkgd2Ugc2hvdWxkIHBsYWNlIHRoaXMgdW5kZXIgYSBkZWJ1
ZyBmbGFnLgotICAgICAgICAgICAgY2xlYXJTdXJmYWNlRm9yRGVidWcocmVuZGVyU3VyZmFjZUxh
eWVyLCByb290RHJhd0xheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCk7Ci0KLSAgICAgICAgICAgIGNv
bnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBs
YXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCi0gICAgICAgICAgICAgICAgZHJhd0xheWVy
KGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3VyZmFjZSwgc3VyZmFjZURhbWFn
ZVJlY3QpOwotICAgICAgICB9Ci0gICAgfQorICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UgPSBy
b290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpOwogCi0gICAgLy8gVGhlIG5leHQgZnJhbWUgc2hv
dWxkIHN0YXJ0IGJ5IGFzc3VtaW5nIG5vdGhpbmcgaGFzIGNoYW5nZWQsIGFuZCBjaGFuZ2VzIGFy
ZSBub3RlZCBhcyB0aGV5IG9jY3VyLgotICAgIHJvb3REcmF3TGF5ZXItPnJlc2V0QWxsQ2hhbmdl
VHJhY2tpbmdGb3JTdWJ0cmVlKCk7Ci19CisgICAgLy8gRklYTUU6IHVzZSB0aGUgZnJhbWUgYmVn
aW4gdGltZSBmcm9tIHRoZSBvdmVyYWxsIGNvbXBvc2l0b3Igc2NoZWR1bGVyLgorICAgIC8vIFRo
aXMgdmFsdWUgaXMgY3VycmVudGx5IGluYWNjZXNzaWJsZSBiZWNhdXNlIGl0IGlzIHVwIGluIENo
cm9taXVtJ3MKKyAgICAvLyBSZW5kZXJXaWRnZXQuCisgICAgbV9oZWFkc1VwRGlzcGxheS0+b25G
cmFtZUJlZ2luKGN1cnJlbnRUaW1lKCkpOwogCisgICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNl
Qnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVz
KCk7CisgICAgc2l6ZV90IG1heExpbWl0ID0gVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVz
KHZpZXdwb3J0U2l6ZSgpKTsKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0
TWF4TWVtb3J5TGltaXRCeXRlcyhtYXhMaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwog
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKLXsKICAg
ICBpZiAodmlld3BvcnRTaXplKCkuaXNFbXB0eSgpIHx8ICFyb290TGF5ZXIoKSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC00NDgsMjcgKzM1Nyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUodmlld3Bv
cnRXaWR0aCgpLCB2aWV3cG9ydEhlaWdodCgpKTsKICAgICB9CiAKLSAgICBDQ0xheWVySW1wbCog
cm9vdERyYXdMYXllciA9IHJvb3RMYXllcigpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
Ci0gICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCi0gICAgICAgIHJvb3RE
cmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICByb290RHJhd0xheWVyLT5yZW5k
ZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgdmlld3BvcnRT
aXplKCkpKTsKLQotICAgIHJvb3REcmF3TGF5ZXItPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgdmlld3BvcnRTaXplKCkpKTsKLQotICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdERyYXdMYXll
cik7Ci0KLSAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlID0gcm9vdERyYXdMYXllci0+cmVuZGVy
U3VyZmFjZSgpOwotICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7
Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICB7Ci0gICAg
ICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5h
bDo6Y2FsY0RyYXdFdGMiLCB0aGlzLCAwKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdERyYXdMYXllciwgcm9v
dERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgJm1fbGF5ZXJT
b3J0ZXIsIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKLSAgICB9Ci0KICAgICAvLyBU
aGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNsdWRpbmcg
dGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT52aWV3
cG9ydCgwLCAwLCB2aWV3cG9ydFdpZHRoKCksIHZpZXdwb3J0SGVpZ2h0KCkpKTsKICAgICBtX3dp
bmRvd01hdHJpeCA9IHNjcmVlbk1hdHJpeCgwLCAwLCB2aWV3cG9ydFdpZHRoKCksIHZpZXdwb3J0
SGVpZ2h0KCkpOwpAQCAtNDgxLDkgKzM3MCwzMDUgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpOwogICAgIEdMQyhtX2NvbnRl
eHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwog
ICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7Cit9
CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1Jl
bmRlclBhc3MqIHJlbmRlclBhc3MpCit7CisgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJm
YWNlID0gcmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpOworICAgIGlmICghdXNlUmVuZGVyU3Vy
ZmFjZShyZW5kZXJTdXJmYWNlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IGV2
ZW50dWFsbHkgd2Ugc2hvdWxkIHBsYWNlIHRoaXMgdW5kZXIgYSBkZWJ1ZyBmbGFnLgorICAgIGNs
ZWFyU3VyZmFjZUZvckRlYnVnKHJlbmRlclN1cmZhY2UsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2Us
IHJlbmRlclBhc3MtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOworCisgICAgY29uc3QgQ0NRdWFkTGlz
dCYgcXVhZExpc3QgPSByZW5kZXJQYXNzLT5xdWFkTGlzdCgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcXVhZExpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIGRyYXdRdWFkKHF1YWRMaXN0
W2ldLmdldCgpLCByZW5kZXJQYXNzLT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsKK30KKwordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqIHF1YWQsIGNv
bnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit7CisgICAgSW50UmVjdCBzY2lzc29y
UmVjdDsKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCkgeworICAgICAg
ICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZVJlY3QgPSBzdXJmYWNlRGFtYWdlUmVjdDsKKyAgICAg
ICAgaWYgKCFxdWFkLT5jbGlwUmVjdCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNsaXBBbmRE
YW1hZ2VSZWN0LmludGVyc2VjdChxdWFkLT5jbGlwUmVjdCgpKTsKKyAgICAgICAgc2Npc3NvclJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBBbmREYW1hZ2VSZWN0KTsKKyAgICAgICAgaWYgKHNj
aXNzb3JSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UKKyAg
ICAgICAgc2Npc3NvclJlY3QgPSBxdWFkLT5jbGlwUmVjdCgpOworCisgICAgaWYgKHNjaXNzb3JS
ZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKKyAgICBlbHNlCisgICAg
ICAgIHNldFNjaXNzb3JUb1JlY3Qoc2Npc3NvclJlY3QpOworCisgICAgaWYgKHF1YWQtPmRyYXdz
T3BhcXVlKCkpCisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKKyAgICBlbHNlCisgICAgICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkp
OworCisgICAgc3dpdGNoIChxdWFkLT5tYXRlcmlhbCgpKSB7CisgICAgY2FzZSBDQ0RyYXdRdWFk
OjpJbnZhbGlkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDQ0RyYXdRdWFkOjpEZWJ1Z0JvcmRlcjoKKyAgICAgICAgZHJhd0RlYnVnQm9y
ZGVyUXVhZChxdWFkLT50b0RlYnVnQm9yZGVyRHJhd1F1YWQoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ0NEcmF3UXVhZDo6UmVuZGVyU3VyZmFjZToKKyAgICAgICAgZHJhd1JlbmRlclN1
cmZhY2VRdWFkKHF1YWQtPnRvUmVuZGVyU3VyZmFjZURyYXdRdWFkKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OlNvbGlkQ29sb3I6CisgICAgICAgIGRyYXdTb2xpZENv
bG9yUXVhZChxdWFkLT50b1NvbGlkQ29sb3JEcmF3UXVhZCgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQ6CisgICAgICAgIGRyYXdUaWxlUXVhZChx
dWFkLT50b1RpbGVEcmF3UXVhZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDQ0RyYXdR
dWFkOjpDdXN0b21MYXllcjoKKyAgICAgICAgZHJhd0N1c3RvbUxheWVyUXVhZChxdWFkLT50b0N1
c3RvbUxheWVyRHJhd1F1YWQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0Jv
cmRlckRyYXdRdWFkKiBxdWFkKQoreworICAgIHN0YXRpYyBmbG9hdCBnbE1hdHJpeFsxNl07Cisg
ICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogcHJvZ3JhbSA9IGJvcmRlclBy
b2dyYW0oKTsKKyAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsK
KyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3Jh
bSgpKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBxdWFkLT5s
YXllclRyYW5zZm9ybSgpOworICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHF1YWQtPnF1
YWRSZWN0KCk7CisgICAgcmVuZGVyTWF0cml4LnNjYWxlM2QobGF5ZXJSZWN0LndpZHRoKCksIGxh
eWVyUmVjdC5oZWlnaHQoKSwgMSk7CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0b0dMTWF0
cml4KCZnbE1hdHJpeFswXSwgcHJvamVjdGlvbk1hdHJpeCgpICogcmVuZGVyTWF0cml4KTsKKyAg
ICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+dmVy
dGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwgZmFsc2UsICZnbE1hdHJpeFswXSwgMSkpOwor
CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYocHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5jb2xvckxvY2F0aW9uKCksIHF1YWQtPmNvbG9yKCkucmVkKCkgLyAyNTUuMCwg
cXVhZC0+Y29sb3IoKS5ncmVlbigpIC8gMjU1LjAsIHF1YWQtPmNvbG9yKCkuYmx1ZSgpIC8gMjU1
LjAsIDEpKTsKKworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+bGluZVdpZHRoKHF1YWQt
PndpZHRoKCkpKTsKKworICAgIC8vIFRoZSBpbmRpY2VzIGZvciB0aGUgbGluZSBhcmUgc3RvcmVk
IGluIHRoZSBzYW1lIGFycmF5IGFzIHRoZSB0cmlhbmdsZSBpbmRpY2VzLgorICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xP
T1AsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgNiAqIHNpemVvZih1bnNp
Z25lZCBzaG9ydCkpKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5k
ZXJTdXJmYWNlUXVhZChjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCogcXVhZCkKK3sKKyAg
ICBDQ0xheWVySW1wbCogbGF5ZXIgPSBxdWFkLT5sYXllcigpOworICAgIGxheWVyLT5yZW5kZXJT
dXJmYWNlKCktPmRyYXcodGhpcywgcXVhZC0+c3VyZmFjZURhbWFnZVJlY3QoKSk7CisgICAgbGF5
ZXItPnJlbmRlclN1cmZhY2UoKS0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpOworfQorCit2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IENDU29saWRD
b2xvckRyYXdRdWFkKiBxdWFkKQoreworICAgIGNvbnN0IExheWVyQ2hyb21pdW06OkJvcmRlclBy
b2dyYW0qIHNvbGlkQ29sb3JQcm9ncmFtID0gYm9yZGVyUHJvZ3JhbSgpOworICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShzb2xpZENvbG9yUHJvZ3JhbS0+cHJvZ3JhbSgp
KSk7CisKKyAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcXVhZC0+cXVhZFJlY3QoKTsKKworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRpbGVUcmFuc2Zvcm0gPSBxdWFkLT5xdWFkVHJhbnNmb3JtKCk7
CisgICAgdGlsZVRyYW5zZm9ybS50cmFuc2xhdGUodGlsZVJlY3QueCgpICsgdGlsZVJlY3Qud2lk
dGgoKSAvIDIuMCwgdGlsZVJlY3QueSgpICsgdGlsZVJlY3QuaGVpZ2h0KCkgLyAyLjApOworCisg
ICAgY29uc3QgQ29sb3ImIGNvbG9yID0gcXVhZC0+Y29sb3IoKTsKKworICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+dW5pZm9ybTRmKHNvbGlkQ29sb3JQcm9ncmFtLT5mcmFnbWVudFNoYWRl
cigpLmNvbG9yTG9jYXRpb24oKSwgY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJs
dWUoKSwgY29sb3IuYWxwaGEoKSkpOworCisgICAgZmxvYXQgb3BhY2l0eSA9IHF1YWQtPm9wYWNp
dHkoKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKHRpbGVUcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgICB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgb3BhY2l0eSwgRmxv
YXRRdWFkKCksCisgICAgICAgICAgICAgICAgICAgICBzb2xpZENvbG9yUHJvZ3JhbS0+dmVydGV4
U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSk7
Cit9CisKK3N0cnVjdCBUaWxlUHJvZ3JhbVVuaWZvcm1zIHsKKyAgICB1bnNpZ25lZCBwcm9ncmFt
OworICAgIHVuc2lnbmVkIHNhbXBsZXJMb2NhdGlvbjsKKyAgICB1bnNpZ25lZCB2ZXJ0ZXhUZXhU
cmFuc2Zvcm1Mb2NhdGlvbjsKKyAgICB1bnNpZ25lZCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0
aW9uOworICAgIHVuc2lnbmVkIGVkZ2VMb2NhdGlvbjsKKyAgICB1bnNpZ25lZCBtYXRyaXhMb2Nh
dGlvbjsKKyAgICB1bnNpZ25lZCBhbHBoYUxvY2F0aW9uOworICAgIHVuc2lnbmVkIHBvaW50TG9j
YXRpb247Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBUPgorc3RhdGljIHZvaWQgdGlsZVVuaWZvcm1M
b2NhdGlvbihUIHByb2dyYW0sIFRpbGVQcm9ncmFtVW5pZm9ybXMmIHVuaWZvcm1zKQoreworICAg
IHVuaWZvcm1zLnByb2dyYW0gPSBwcm9ncmFtLT5wcm9ncmFtKCk7CisgICAgdW5pZm9ybXMudmVy
dGV4VGV4VHJhbnNmb3JtTG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS52ZXJ0ZXhU
ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpOworICAgIHVuaWZvcm1zLm1hdHJpeExvY2F0aW9uID0gcHJv
Z3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKKyAgICB1bmlmb3Jtcy5wb2lu
dExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigpOworCisg
ICAgdW5pZm9ybXMuc2FtcGxlckxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5z
YW1wbGVyTG9jYXRpb24oKTsKKyAgICB1bmlmb3Jtcy5hbHBoYUxvY2F0aW9uID0gcHJvZ3JhbS0+
ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7CisgICAgdW5pZm9ybXMuZnJhZ21lbnRU
ZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRU
ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpOworICAgIHVuaWZvcm1zLmVkZ2VMb2NhdGlvbiA9IHByb2dy
YW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCk7Cit9CisKK3N0YXRpYyB2b2lkIGZp
bmRUaWxlUHJvZ3JhbVVuaWZvcm1zKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJl
ciwgY29uc3QgQ0NUaWxlRHJhd1F1YWQqIHF1YWQsIFRpbGVQcm9ncmFtVW5pZm9ybXMmIHVuaWZv
cm1zKQoreworICAgIGlmIChxdWFkLT5pc0FudGlhbGlhc2VkKCkpIHsKKyAgICAgICAgaWYgKHF1
YWQtPnN3aXp6bGVDb250ZW50cygpKSB7CisgICAgICAgICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJ
bXBsOjpQcm9ncmFtU3dpenpsZUFBKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9n
cmFtU3dpenpsZUFBKCk7CisgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0s
IHVuaWZvcm1zKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IENDVGlsZWRM
YXllckltcGw6OlByb2dyYW1BQSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3Jh
bUFBKCk7CisgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1z
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChxdWFkLT5kcmF3c09wYXF1
ZSgpKSB7CisgICAgICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZU9wYXF1ZSog
cHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGVPcGFxdWUoKTsKKyAg
ICAgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1zKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1w
bDo6UHJvZ3JhbU9wYXF1ZSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbU9w
YXF1ZSgpOworICAgICAgICAgICAgICAgIHRpbGVVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5p
Zm9ybXMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KHF1YWQtPnN3aXp6bGVDb250ZW50cygpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NUaWxl
ZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGUqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxl
clByb2dyYW1Td2l6emxlKCk7CisgICAgICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLCB1bmlmb3Jtcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVy
LT50aWxlclByb2dyYW0oKTsKKyAgICAgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0sIHVuaWZvcm1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUaWxlUXVhZChjb25zdCBDQ1RpbGVEcmF3
UXVhZCogcXVhZCkKK3sKKyAgICBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCA9IHF1YWQtPnF1YWRS
ZWN0KCk7CisKKyAgICBGbG9hdFJlY3QgY2xhbXBSZWN0KHRpbGVSZWN0KTsKKyAgICAvLyBDbGFt
cCB0ZXh0dXJlIGNvb3JkaW5hdGVzIHRvIGF2b2lkIHNhbXBsaW5nIG91dHNpZGUgdGhlIGxheWVy
CisgICAgLy8gYnkgZGVmbGF0aW5nIHRoZSB0aWxlIHJlZ2lvbiBoYWxmIGEgdGV4ZWwgb3IgaGFs
ZiBhIHRleGVsCisgICAgLy8gbWludXMgZXBzaWxvbiBmb3Igb25lIHBpeGVsIGxheWVycy4gVGhl
IHJlc3VsdGluZyBjbGFtcCByZWdpb24KKyAgICAvLyBpcyBtYXBwZWQgdG8gdGhlIHVuaXQgc3F1
YXJlIGJ5IHRoZSB2ZXJ0ZXggc2hhZGVyIGFuZCBtYXBwZWQKKyAgICAvLyBiYWNrIHRvIG5vcm1h
bGl6ZWQgdGV4dHVyZSBjb29yZGluYXRlcyBieSB0aGUgZnJhZ21lbnQgc2hhZGVyCisgICAgLy8g
YWZ0ZXIgYmVpbmcgY2xhbXBlZCB0byAwLTEgcmFuZ2UuCisgICAgY29uc3QgZmxvYXQgZXBzaWxv
biA9IDEgLyAxMDI0LjBmOworICAgIGZsb2F0IGNsYW1wWCA9IG1pbigwLjUsIGNsYW1wUmVjdC53
aWR0aCgpIC8gMi4wIC0gZXBzaWxvbik7CisgICAgZmxvYXQgY2xhbXBZID0gbWluKDAuNSwgY2xh
bXBSZWN0LmhlaWdodCgpIC8gMi4wIC0gZXBzaWxvbik7CisgICAgY2xhbXBSZWN0LmluZmxhdGVY
KC1jbGFtcFgpOworICAgIGNsYW1wUmVjdC5pbmZsYXRlWSgtY2xhbXBZKTsKKyAgICBGbG9hdFNp
emUgY2xhbXBPZmZzZXQgPSBjbGFtcFJlY3QubWluWE1pbllDb3JuZXIoKSAtIEZsb2F0UmVjdCh0
aWxlUmVjdCkubWluWE1pbllDb3JuZXIoKTsKKworICAgIEZsb2F0UG9pbnQgdGV4dHVyZU9mZnNl
dCA9IHF1YWQtPnRleHR1cmVPZmZzZXQoKSArIGNsYW1wT2Zmc2V0OworCisgICAgLy8gTWFwIGNs
YW1waW5nIHJlY3RhbmdsZSB0byB1bml0IHNxdWFyZS4KKyAgICBmbG9hdCB2ZXJ0ZXhUZXhUcmFu
c2xhdGVYID0gLWNsYW1wUmVjdC54KCkgLyBjbGFtcFJlY3Qud2lkdGgoKTsKKyAgICBmbG9hdCB2
ZXJ0ZXhUZXhUcmFuc2xhdGVZID0gLWNsYW1wUmVjdC55KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7
CisgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVYID0gdGlsZVJlY3Qud2lkdGgoKSAvIGNsYW1wUmVj
dC53aWR0aCgpOworICAgIGZsb2F0IHZlcnRleFRleFNjYWxlWSA9IHRpbGVSZWN0LmhlaWdodCgp
IC8gY2xhbXBSZWN0LmhlaWdodCgpOworCisgICAgLy8gTWFwIHRvIG5vcm1hbGl6ZWQgdGV4dHVy
ZSBjb29yZGluYXRlcy4KKyAgICBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSA9IHF1YWQtPnRl
eHR1cmVTaXplKCk7CisgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVYID0gdGV4dHVyZU9m
ZnNldC54KCkgLyB0ZXh0dXJlU2l6ZS53aWR0aCgpOworICAgIGZsb2F0IGZyYWdtZW50VGV4VHJh
bnNsYXRlWSA9IHRleHR1cmVPZmZzZXQueSgpIC8gdGV4dHVyZVNpemUuaGVpZ2h0KCk7CisgICAg
ZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVggPSBjbGFtcFJlY3Qud2lkdGgoKSAvIHRleHR1cmVTaXpl
LndpZHRoKCk7CisgICAgZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVkgPSBjbGFtcFJlY3QuaGVpZ2h0
KCkgLyB0ZXh0dXJlU2l6ZS5oZWlnaHQoKTsKKworICAgIFRpbGVQcm9ncmFtVW5pZm9ybXMgdW5p
Zm9ybXM7CisgICAgZmluZFRpbGVQcm9ncmFtVW5pZm9ybXModGhpcywgcXVhZCwgdW5pZm9ybXMp
OworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHVuaWZvcm1zLnBy
b2dyYW0pKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaSh1bmlmb3Jt
cy5zYW1wbGVyTG9jYXRpb24sIDApKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFj
dGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgcXVhZC0+dGV4dHVyZUlkKCkpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIHF1YWQtPnRleHR1cmVGaWx0ZXIoKSkpOworICAgIEdM
Qyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgcXVhZC0+
dGV4dHVyZUZpbHRlcigpKSk7CisKKyAgICBGbG9hdFF1YWQgbG9jYWxRdWFkOworICAgIGlmIChx
dWFkLT5pc0FudGlhbGlhc2VkKCkpIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2
aWNlVHJhbnNmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgod2luZG93TWF0cml4KCkgKiBwcm9q
ZWN0aW9uTWF0cml4KCkgKiBxdWFkLT5xdWFkVHJhbnNmb3JtKCkpLnRvMmRUcmFuc2Zvcm0oKTsK
KyAgICAgICAgaWYgKCFkZXZpY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgRmxvYXRRdWFkIGRldmljZUxheWVyUXVhZCA9IGRldmljZVRy
YW5zZm9ybS5tYXBRdWFkKEZsb2F0UXVhZChxdWFkLT5sYXllclJlY3QoKSkpOworCisgICAgICAg
IENDTGF5ZXJRdWFkIGRldmljZUxheWVyQm91bmRzID0gQ0NMYXllclF1YWQoRmxvYXRRdWFkKGRl
dmljZUxheWVyUXVhZC5ib3VuZGluZ0JveCgpKSk7CisgICAgICAgIGRldmljZUxheWVyQm91bmRz
LmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOworCisgICAgICAgIENDTGF5ZXJRdWFkIGRl
dmljZUxheWVyRWRnZXMgPSBDQ0xheWVyUXVhZChkZXZpY2VMYXllclF1YWQpOworICAgICAgICBk
ZXZpY2VMYXllckVkZ2VzLmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOworCisgICAgICAg
IGZsb2F0IGVkZ2VbMjRdOworICAgICAgICBkZXZpY2VMYXllckVkZ2VzLnRvRmxvYXRBcnJheShl
ZGdlKTsKKyAgICAgICAgZGV2aWNlTGF5ZXJCb3VuZHMudG9GbG9hdEFycmF5KCZlZGdlWzEyXSk7
CisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTNmdih1bmlmb3Jtcy5l
ZGdlTG9jYXRpb24sIGVkZ2UsIDgpKTsKKworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPnVuaWZvcm00Zih1bmlmb3Jtcy52ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgdmVydGV4
VGV4VHJhbnNsYXRlWCwgdmVydGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0
ZXhUZXhTY2FsZVkpKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3Jt
NGYodW5pZm9ybXMuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgZnJhZ21lbnRUZXhUcmFu
c2xhdGVYLCBmcmFnbWVudFRleFRyYW5zbGF0ZVksIGZyYWdtZW50VGV4U2NhbGVYLCBmcmFnbWVu
dFRleFNjYWxlWSkpOworCisgICAgICAgIEZsb2F0UG9pbnQgYm90dG9tUmlnaHQodGlsZVJlY3Qu
bWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOworICAgICAgICBGbG9hdFBvaW50IGJvdHRvbUxlZnQo
dGlsZVJlY3QueCgpLCB0aWxlUmVjdC5tYXhZKCkpOworICAgICAgICBGbG9hdFBvaW50IHRvcExl
ZnQodGlsZVJlY3QueCgpLCB0aWxlUmVjdC55KCkpOworICAgICAgICBGbG9hdFBvaW50IHRvcFJp
Z2h0KHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QueSgpKTsKKworICAgICAgICAvLyBNYXAgcG9p
bnRzIHRvIGRldmljZSBzcGFjZS4KKyAgICAgICAgYm90dG9tUmlnaHQgPSBkZXZpY2VUcmFuc2Zv
cm0ubWFwUG9pbnQoYm90dG9tUmlnaHQpOworICAgICAgICBib3R0b21MZWZ0ID0gZGV2aWNlVHJh
bnNmb3JtLm1hcFBvaW50KGJvdHRvbUxlZnQpOworICAgICAgICB0b3BMZWZ0ID0gZGV2aWNlVHJh
bnNmb3JtLm1hcFBvaW50KHRvcExlZnQpOworICAgICAgICB0b3BSaWdodCA9IGRldmljZVRyYW5z
Zm9ybS5tYXBQb2ludCh0b3BSaWdodCk7CisKKyAgICAgICAgQ0NMYXllclF1YWQ6OkVkZ2UgYm90
dG9tRWRnZShib3R0b21SaWdodCwgYm90dG9tTGVmdCk7CisgICAgICAgIENDTGF5ZXJRdWFkOjpF
ZGdlIGxlZnRFZGdlKGJvdHRvbUxlZnQsIHRvcExlZnQpOworICAgICAgICBDQ0xheWVyUXVhZDo6
RWRnZSB0b3BFZGdlKHRvcExlZnQsIHRvcFJpZ2h0KTsKKyAgICAgICAgQ0NMYXllclF1YWQ6OkVk
Z2UgcmlnaHRFZGdlKHRvcFJpZ2h0LCBib3R0b21SaWdodCk7CisKKyAgICAgICAgaWYgKHF1YWQt
PnRvcEVkZ2VBQSgpKQorICAgICAgICAgICAgdG9wRWRnZSA9IGRldmljZUxheWVyRWRnZXMudG9w
KCk7CisgICAgICAgIGlmIChxdWFkLT5sZWZ0RWRnZUFBKCkpCisgICAgICAgICAgICBsZWZ0RWRn
ZSA9IGRldmljZUxheWVyRWRnZXMubGVmdCgpOworICAgICAgICBpZiAocXVhZC0+cmlnaHRFZGdl
QUEoKSkKKyAgICAgICAgICAgIHJpZ2h0RWRnZSA9IGRldmljZUxheWVyRWRnZXMucmlnaHQoKTsK
KyAgICAgICAgaWYgKHF1YWQtPmJvdHRvbUVkZ2VBQSgpKQorICAgICAgICAgICAgYm90dG9tRWRn
ZSA9IGRldmljZUxheWVyRWRnZXMuYm90dG9tKCk7CisKKyAgICAgICAgZmxvYXQgc2lnbiA9IEZs
b2F0UXVhZCh0aWxlUmVjdCkuaXNDb3VudGVyY2xvY2t3aXNlKCkgPyAtMSA6IDE7CisgICAgICAg
IGJvdHRvbUVkZ2Uuc2NhbGUoc2lnbik7CisgICAgICAgIGxlZnRFZGdlLnNjYWxlKHNpZ24pOwor
ICAgICAgICB0b3BFZGdlLnNjYWxlKHNpZ24pOworICAgICAgICByaWdodEVkZ2Uuc2NhbGUoc2ln
bik7CisKKyAgICAgICAgLy8gQ3JlYXRlIGRldmljZSBzcGFjZSBxdWFkLgorICAgICAgICBDQ0xh
eWVyUXVhZCBkZXZpY2VRdWFkKGxlZnRFZGdlLCB0b3BFZGdlLCByaWdodEVkZ2UsIGJvdHRvbUVk
Z2UpOworCisgICAgICAgIC8vIE1hcCBxdWFkIHRvIGxheWVyIHNwYWNlLgorICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlRGV2aWNlVHJhbnNmb3JtID0gZGV2aWNlVHJhbnNmb3Jt
LmludmVyc2UoKTsKKyAgICAgICAgbG9jYWxRdWFkID0gaW52ZXJzZURldmljZVRyYW5zZm9ybS5t
YXBRdWFkKGRldmljZVF1YWQuZmxvYXRRdWFkKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IE1vdmUgZnJhZ21lbnQgc2hhZGVyIHRyYW5zZm9ybSB0byB2ZXJ0ZXggc2hhZGVyLiBXZSBjYW4g
ZG8gdGhpcyB3aGlsZQorICAgICAgICAvLyBzdGlsbCBwcm9kdWNpbmcgY29ycmVjdCByZXN1bHRz
IGFzIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24KKyAgICAgICAgLy8gc2hvdWxkIGFsd2F5
cyBiZSBub24tbmVnYXRpdmUgd2hlbiB0aWxlcyBhcmUgdHJhbnNmb3JtZWQgaW4gYSB3YXkKKyAg
ICAgICAgLy8gdGhhdCBjb3VsZCByZXN1bHQgaW4gc2FtcGxpbmcgb3V0c2lkZSB0aGUgbGF5ZXIu
CisgICAgICAgIHZlcnRleFRleFNjYWxlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKKyAgICAgICAg
dmVydGV4VGV4U2NhbGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOworICAgICAgICB2ZXJ0ZXhUZXhU
cmFuc2xhdGVYICo9IGZyYWdtZW50VGV4U2NhbGVYOworICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xh
dGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOworICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVYICs9
IGZyYWdtZW50VGV4VHJhbnNsYXRlWDsKKyAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWSArPSBm
cmFnbWVudFRleFRyYW5zbGF0ZVk7CisKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgp
LT51bmlmb3JtNGYodW5pZm9ybXMudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24sIHZlcnRleFRl
eFRyYW5zbGF0ZVgsIHZlcnRleFRleFRyYW5zbGF0ZVksIHZlcnRleFRleFNjYWxlWCwgdmVydGV4
VGV4U2NhbGVZKSk7CisKKyAgICAgICAgbG9jYWxRdWFkID0gRmxvYXRSZWN0KHRpbGVSZWN0KTsK
KyAgICB9CisKKyAgICAvLyBOb3JtYWxpemUgdG8gdGlsZVJlY3QuCisgICAgbG9jYWxRdWFkLnNj
YWxlKDEuMGYgLyB0aWxlUmVjdC53aWR0aCgpLCAxLjBmIC8gdGlsZVJlY3QuaGVpZ2h0KCkpOwog
Ci0gICAgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhyb290RHJhd0xheWVyLCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWQtPnF1YWRUcmFuc2Zv
cm0oKSwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHko
KSwgbG9jYWxRdWFkLCB1bmlmb3Jtcy5tYXRyaXhMb2NhdGlvbiwgdW5pZm9ybXMuYWxwaGFMb2Nh
dGlvbiwgdW5pZm9ybXMucG9pbnRMb2NhdGlvbik7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3Q3VzdG9tTGF5ZXJRdWFkKGNvbnN0IENDQ3VzdG9tTGF5ZXJEcmF3UXVhZCog
cXVhZCkKK3sKKyAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBxdWFkLT5sYXllcigpOworICAgIGxh
eWVyLT5kcmF3KHRoaXMpOworfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNo
RHJhd2luZ0ZyYW1lKCkKK3sKICAgICBpZiAobV9oZWFkc1VwRGlzcGxheS0+ZW5hYmxlZCgpKSB7
CiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORCkpOwogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6
T05FX01JTlVTX1NSQ19BTFBIQSkpOwpAQCAtNDk0LDYgKzY3OSwxOCBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIAogICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORCkpOworCisgICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMg
PSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7Cisg
ICAgc2l6ZV90IHJlY2xhaW1MaW1pdCA9IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRl
cyh2aWV3cG9ydFNpemUoKSk7CisgICAgaWYgKHJlY2xhaW1MaW1pdCA+IGNvbnRlbnRzTWVtb3J5
VXNlQnl0ZXMpCisgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRQcmVm
ZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xhaW1MaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0
ZXMpOworICAgIGVsc2UKKyAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNl
dFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoMCk7CisKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0
dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fcmVuZGVyU3VyZmFjZVRleHR1cmVB
bGxvY2F0b3IuZ2V0KCkpOworCisgICAgaWYgKHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVu
KQorICAgICAgICBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwogfQogCiB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dG9HTE1hdHJpeChmbG9hdCogZmxhdHRlbmVkLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKQEAgLTY0NSw0MiArODQyLDggQEAgYm9vbCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJT
dXJmYWNlKQogI2VuZGlmCiAKICAgICBzZXREcmF3Vmlld3BvcnRSZWN0KHJlbmRlclN1cmZhY2Ut
PmNvbnRlbnRSZWN0KCksIGZhbHNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDUmVuZGVy
U3VyZmFjZSogdGFyZ2V0U3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVj
dCkKLXsKLSAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJp
YnV0ZXNUb1RhcmdldDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdldFN1cmZhY2UtPm93bmluZ0xh
eWVySWQoKSkpIHsKLSAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBz
dXJmYWNlRGFtYWdlUmVjdCk7Ci0gICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPnJlbGVh
c2VDb250ZW50c1RleHR1cmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChs
YXllci0+dmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpICYmIG1fY2FwYWJpbGl0aWVzLnVzaW5n
UGFydGlhbFN3YXApIHsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2VSZWN0KGxheWVy
LT5jbGlwUmVjdCgpKTsKLSAgICAgICAgY2xpcEFuZERhbWFnZVJlY3QuaW50ZXJzZWN0KHN1cmZh
Y2VEYW1hZ2VSZWN0KTsKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0
KGNsaXBBbmREYW1hZ2VSZWN0KSk7Ci0gICAgfSBlbHNlIGlmIChtX2NhcGFiaWxpdGllcy51c2lu
Z1BhcnRpYWxTd2FwKQotICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qo
c3VyZmFjZURhbWFnZVJlY3QpKTsKLSAgICBlbHNlIGlmIChsYXllci0+dXNlc0xheWVyQ2xpcHBp
bmcoKSkKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChsYXllci0+Y2xpcFJlY3QoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotCi0gICAgYm9vbCBvcGFxdWUgPSBsYXll
ci0+b3BhcXVlKCkgJiYgbGF5ZXItPmRyYXdPcGFjaXR5KCkgPT0gMTsKLSAgICBpZiAob3BhcXVl
KQotICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EKSk7Ci0KLSAgICBsYXllci0+ZHJhdyh0aGlzKTsKLQotICAgIGlm
IChvcGFxdWUpCi0gICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwotCi0gICAgLy8gRHJhdyB0aGUgZGVidWcgYm9y
ZGVyIGlmIHRoZXJlIGlzIG9uZS4KLSAgICBsYXllci0+ZHJhd0RlYnVnQm9yZGVyKHRoaXMpOwor
ICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBTZXRzIHRoZSBzY2lzc29yIHJlZ2lvbiB0byB0aGUg
Z2l2ZW4gcmVjdGFuZ2xlLiBUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gZm9yIHRoZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA2ZTE0OWYwZTYzODUwZDI4YzI1ZjJkMTNhZDc2
OWYzZjkwNjU2YWM2Li5jOGFjYjJjMzQ1YWEwNmMxN2RkNDlhMzcxYzg5MmE4YzJkMmE3ZGYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNDIsNyArNDIsNiBAQAogI2lu
Y2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJ
bXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgotI2luY2x1ZGUgImNjL0ND
TGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5j
bHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJ
bXBsLmgiCkBAIC02Niw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENDSGVh
ZHNVcERpc3BsYXk7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdElt
cGw7CitjbGFzcyBDQ1JlbmRlclBhc3M7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjsKQEAgLTk3
LDcgKzk3LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCB2aWV3cG9ydENoYW5nZWQoKTsKIAotICAg
IHZvaWQgZHJhd0xheWVycygpOworICAgIHZvaWQgYmVnaW5EcmF3aW5nRnJhbWUoKTsKKyAgICB2
b2lkIGRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyopOworICAgIHZvaWQgZmluaXNo
RHJhd2luZ0ZyYW1lKCk7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAog
ICAgIHZvaWQgZmluaXNoKCk7CkBAIC0xNTEsOCArMTUzLDYgQEAgcHVibGljOgogCiAgICAgR0Mz
RGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKTsKIAotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxD
Q0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsKLQogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgo
ZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIHZvaWQgZHJhd1RleHR1
cmVkUXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNp
dHksIGNvbnN0IEZsb2F0UXVhZCYsCkBAIC0xNjIsMjEgKzE2MiwyMiBAQCBwcml2YXRlOgogICAg
IExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4pOwogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCi0gICAgdm9pZCBk
cmF3TGF5ZXJzSW50ZXJuYWwoKTsKLSAgICB2b2lkIGRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFj
ZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1wbCosIENDUmVu
ZGVyU3VyZmFjZSosIGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCB0cmFja0RhbWFnZUZv
ckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlz
dCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgdm9pZCBkcmF3UXVhZChjb25zdCBDQ0Ry
YXdRdWFkKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CisgICAgdm9pZCBk
cmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOworICAgIHZv
aWQgZHJhd1JlbmRlclN1cmZhY2VRdWFkKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKik7
CisgICAgdm9pZCBkcmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQq
KTsKKyAgICB2b2lkIGRyYXdUaWxlUXVhZChjb25zdCBDQ1RpbGVEcmF3UXVhZCopOworICAgIHZv
aWQgZHJhd0N1c3RvbUxheWVyUXVhZChjb25zdCBDQ0N1c3RvbUxheWVyRHJhd1F1YWQqKTsKIAog
ICAgIE1hbmFnZWRUZXh0dXJlKiBnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKTsKICAgICB2b2lk
IGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCk7CiAKICAgICB2b2lkIHNldERyYXdWaWV3
cG9ydFJlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wgZmxpcFkpOwogCi0gICAgdm9pZCByZWxlYXNl
UmVuZGVyU3VyZmFjZVRleHR1cmVzKCk7Ci0KICAgICBib29sIHVzZVJlbmRlclN1cmZhY2UoQ0NS
ZW5kZXJTdXJmYWNlKik7Ci0gICAgdm9pZCBjbGVhclN1cmZhY2VGb3JEZWJ1ZyhDQ0xheWVySW1w
bCogcmVuZGVyU3VyZmFjZUxheWVyLCBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3Qg
RmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CisgICAgdm9pZCBjbGVhclN1cmZhY2VGb3JE
ZWJ1ZyhDQ1JlbmRlclN1cmZhY2UqLCBDQ1JlbmRlclN1cmZhY2UqIHJvb3RSZW5kZXJTdXJmYWNl
LCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKKworICAgIHZvaWQgcmVsZWFz
ZVJlbmRlclN1cmZhY2VUZXh0dXJlcygpOwogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKIApAQCAtMjM4LDggKzIzOSw2IEBAIHByaXZhdGU6CiAKICAgICBDQ1JlbmRlclN1cmZhY2Uq
IG1fZGVmYXVsdFJlbmRlclN1cmZhY2U7CiAKLSAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJTb3J0
ZXI7Ci0KICAgICBGbG9hdFF1YWQgbV9zaGFyZWRHZW9tZXRyeVF1YWQ7CiAKICAgICBib29sIG1f
aXNWaWV3cG9ydENoYW5nZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaAppbmRleCBiYmE1MWY5Zjc4NTUz
MGQ2Njc5ZjRkNTUzN2Q3ODQ2YjRmNTJlNDdlLi41NjlmNjk2YmVhYTJhYTZkZmIzYmJmYjIxNzA0
NmJmMGU0MGFjY2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmgKQEAgLTE0NSw3ICsxNDUsMTUgQEAg
cHJpdmF0ZToKICAgICBpbnQgbV92ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbjsKIH07CiAKLWNs
YXNzIEZyYWdtZW50VGV4QWxwaGFCaW5kaW5nIHsKK2NsYXNzIEZyYWdtZW50VGlsZUJpbmRpbmdC
YXNlIHsKK3B1YmxpYzoKKyAgICBpbnQgYWxwaGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIC0x
OyB9CisgICAgaW50IGVkZ2VMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIC0xOyB9CisgICAgaW50
IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiAtMTsgfQorICAg
IGludCBzYW1wbGVyTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiAtMTsgfQorfTsKKworY2xhc3Mg
RnJhZ21lbnRUZXhBbHBoYUJpbmRpbmcgOiBwdWJsaWMgRnJhZ21lbnRUaWxlQmluZGluZ0Jhc2Ug
ewogcHVibGljOgogICAgIEZyYWdtZW50VGV4QWxwaGFCaW5kaW5nKCk7CiAKQEAgLTE1OCwxMiAr
MTY2LDExIEBAIHByaXZhdGU6CiAgICAgaW50IG1fYWxwaGFMb2NhdGlvbjsKIH07CiAKLWNsYXNz
IEZyYWdtZW50VGV4T3BhcXVlQmluZGluZyB7CitjbGFzcyBGcmFnbWVudFRleE9wYXF1ZUJpbmRp
bmcgOiBwdWJsaWMgRnJhZ21lbnRUaWxlQmluZGluZ0Jhc2UgewogcHVibGljOgogICAgIEZyYWdt
ZW50VGV4T3BhcXVlQmluZGluZygpOwogCiAgICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4dDNE
KiwgdW5zaWduZWQgcHJvZ3JhbSk7Ci0gICAgaW50IGFscGhhTG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiAtMTsgfQogICAgIGludCBzYW1wbGVyTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Nh
bXBsZXJMb2NhdGlvbjsgfQogCiBwcml2YXRlOgpAQCAtMjI0LDcgKzIzMSw3IEBAIHByaXZhdGU6
CiAgICAgaW50IG1fZWRnZUxvY2F0aW9uOwogfTsKIAotY2xhc3MgRnJhZ21lbnRUZXhDbGFtcEFs
cGhhQUFCaW5kaW5nIHsKK2NsYXNzIEZyYWdtZW50VGV4Q2xhbXBBbHBoYUFBQmluZGluZyA6IHB1
YmxpYyBGcmFnbWVudFRpbGVCaW5kaW5nQmFzZSB7CiBwdWJsaWM6CiAgICAgRnJhZ21lbnRUZXhD
bGFtcEFscGhhQUFCaW5kaW5nKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDY0MDBiOTgzOGZkZmM0YTFkZTkzZmNjYTQyNWI1MDdiMmNhZGUxZGUuLjMxNGYyODRlZDhi
ZTMzMTUxZmQ4MGQ0NGYzNzA2YjY4NDgzMzEyMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmNwcApAQCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwdXNo
UHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKIAogICAgIHRpbGVkTGF5ZXItPnNldFNr
aXBzRHJhdyhtX3NraXBzRHJhdyk7CiAgICAgdGlsZWRMYXllci0+c2V0VGV4dHVyZU9yaWVudGF0
aW9uKG1fdGV4dHVyZU9yaWVudGF0aW9uKTsKLSAgICB0aWxlZExheWVyLT5zZXRTYW1wbGVkVGV4
ZWxGb3JtYXQobV9zYW1wbGVkVGV4ZWxGb3JtYXQpOworICAgIHRpbGVkTGF5ZXItPnNldENvbnRl
bnRzU3dpenpsZWQobV9zYW1wbGVkVGV4ZWxGb3JtYXQgIT0gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
U2FtcGxlZFRleGVsRm9ybWF0UkdCQSk7CiAgICAgdGlsZWRMYXllci0+c2V0VGlsaW5nRGF0YSgq
bV90aWxlcik7CiAKICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXIt
PnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ3VzdG9tTGF5ZXJE
cmF3UXVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODU4MGIxMGVkMjQ5MGM3YTZmODlhY2YyMzExY2Q4MGFj
ZTgzYTViYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5jcHAKQEAgLTAsMCArMSw0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDQ3VzdG9tTGF5
ZXJEcmF3UXVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NDdXN0
b21MYXllckRyYXdRdWFkPiBDQ0N1c3RvbUxheWVyRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1No
YXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwg
Q0NMYXllckltcGwqIGxheWVyKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NDdXN0b21M
YXllckRyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGxheWVyKSk7Cit9CisKK0ND
Q3VzdG9tTGF5ZXJEcmF3UXVhZDo6Q0NDdXN0b21MYXllckRyYXdRdWFkKGNvbnN0IENDU2hhcmVk
UXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xh
eWVySW1wbCogbGF5ZXIpCisgICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3
UXVhZDo6Q3VzdG9tTGF5ZXIsIHF1YWRSZWN0KQorICAgICwgbV9sYXllcihsYXllcikKK3sKKyAg
ICBBU1NFUlQobV9sYXllcik7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDdXN0b21MYXllckRy
YXdRdWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTliZDQ2MjMyNTNhNGM0NTUwOWFjMjQ1MGY5Y2EzMmE3M2M3
ZDljNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENDQ3VzdG9tTGF5ZXJEcmF3UXVhZF9oCisjZGVmaW5lIENDQ3VzdG9tTGF5
ZXJEcmF3UXVhZF9oCisKKyNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVySW1w
bDsKKworLy8gRklYTUU6IFRoaXMgY2xhc3MgaXMgYSB0ZW1wb3Jhcnkgd2F5IHRvIGFjY2VzcyBD
Q0xheWVySW1wbDo6ZHJhdy4gVGhpcyBjbGFzcworLy8gc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBh
IHNldCBvZiBkcmF3IHF1YWRzIGZvciBlYWNoIGxheWVyIG1hdGVyaWFsIHR5cGUgYW5kCisvLyB0
aGVuIHJlbW92ZWQuCitjbGFzcyBDQ0N1c3RvbUxheWVyRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3
UXVhZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NDdXN0b21MYXllckRyYXdRdWFkKTsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0N1c3RvbUxheWVyRHJhd1F1YWQ+IGNy
ZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1w
bCopOworCisgICAgQ0NMYXllckltcGwqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcjsg
fQorCitwcml2YXRlOgorICAgIENDQ3VzdG9tTGF5ZXJEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCopOworCisgICAgQ0NMYXllcklt
cGwqIG1fbGF5ZXI7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdC
b3JkZXJEcmF3UXVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTllOGRjOTU5ZmY0ODIzYzRlZDYzY2U5Mjc3
YzcyNDI0ODNhZTY1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5jcHAKQEAgLTAsMCAr
MSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDRGVi
dWdCb3JkZXJEcmF3UXVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8
Q0NEZWJ1Z0JvcmRlckRyYXdRdWFkPiBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6OmNyZWF0ZShjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFk
UmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBpbnQgd2lkdGgpCit7CisgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwg
Y29sb3IsIHdpZHRoKSk7Cit9CisKK0NDRGVidWdCb3JkZXJEcmF3UXVhZDo6Q0NEZWJ1Z0JvcmRl
ckRyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0
IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGludCB3aWR0aCkKKyAgICA6
IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpEZWJ1Z0JvcmRlciwgcXVh
ZFJlY3QpCisgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgICwgbV93aWR0aCh3aWR0aCkKK3sKKyAg
ICBpZiAobV9jb2xvci5hbHBoYSgpICE9IDEpCisgICAgICAgIG1fcXVhZE9wYXF1ZSA9IGZhbHNl
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjAyMjZhZWQ3NmY1Y2FlNWZmMDNlZmRlMzkwOTAyNjNiNDM1OTI5YzgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Rl
YnVnQm9yZGVyRHJhd1F1YWQuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0Rl
YnVnQm9yZGVyRHJhd1F1YWRfaAorI2RlZmluZSBDQ0RlYnVnQm9yZGVyRHJhd1F1YWRfaAorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0RlYnVn
Qm9yZGVyRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBDb2xvciYsIGludCB3aWR0aCk7CisKKyAgICBjb25z
dCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9OworICAgIGludCB3aWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBDQ0RlYnVnQm9y
ZGVyRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgQ29sb3ImLCBpbnQgd2lkdGgpOworCisgICAgQ29sb3IgbV9jb2xvcjsKKyAgICBpbnQgbV93
aWR0aDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmZhNmUyMTA4NWVjMTBmY2YxY2E2ZDdlMGFkMzU4MmYwY2Y5ODYxOTAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdR
dWFkLmNwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgorCisjaW5jbHVkZSAiY2MvQ0NDdXN0b21MYXllckRy
YXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCisjaW5jbHVk
ZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVh
ZC5oIgorI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2Mv
Q0NUaWxlRHJhd1F1YWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ0RyYXdRdWFkOjpD
Q0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIE1hdGVy
aWFsIG1hdGVyaWFsLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCkKKyAgICA6IG1fc2hhcmVkUXVh
ZFN0YXRlKHNoYXJlZFF1YWRTdGF0ZSkKKyAgICAsIG1fbWF0ZXJpYWwobWF0ZXJpYWwpCisgICAg
LCBtX3F1YWRSZWN0KHF1YWRSZWN0KQorICAgICwgbV9xdWFkT3BhcXVlKHRydWUpCit7CisgICAg
QVNTRVJUKG1fc2hhcmVkUXVhZFN0YXRlKTsKKyAgICBBU1NFUlQobV9tYXRlcmlhbCAhPSBJbnZh
bGlkKTsKK30KKworY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKiBDQ0RyYXdRdWFkOjp0b0Rl
YnVnQm9yZGVyRHJhd1F1YWQoKSBjb25zdAoreworICAgIEFTU0VSVChtX21hdGVyaWFsID09IERl
YnVnQm9yZGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0NEZWJ1Z0JvcmRlckRy
YXdRdWFkKj4odGhpcyk7Cit9CisKK2NvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKiBDQ0Ry
YXdRdWFkOjp0b1JlbmRlclN1cmZhY2VEcmF3UXVhZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
bWF0ZXJpYWwgPT0gUmVuZGVyU3VyZmFjZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKj4odGhpcyk7Cit9CisKK2NvbnN0IENDU29saWRDb2xv
ckRyYXdRdWFkKiBDQ0RyYXdRdWFkOjp0b1NvbGlkQ29sb3JEcmF3UXVhZCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fbWF0ZXJpYWwgPT0gU29saWRDb2xvcik7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKj4odGhpcyk7Cit9CisKK2NvbnN0IENDVGls
ZURyYXdRdWFkKiBDQ0RyYXdRdWFkOjp0b1RpbGVEcmF3UXVhZCgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fbWF0ZXJpYWwgPT0gVGlsZWRDb250ZW50KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgQ0NUaWxlRHJhd1F1YWQqPih0aGlzKTsKK30KKworY29uc3QgQ0NDdXN0b21MYXllckRy
YXdRdWFkKiBDQ0RyYXdRdWFkOjp0b0N1c3RvbUxheWVyRHJhd1F1YWQoKSBjb25zdAoreworICAg
IEFTU0VSVChtX21hdGVyaWFsID09IEN1c3RvbUxheWVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgQ0NDdXN0b21MYXllckRyYXdRdWFkKj4odGhpcyk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1
YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJh
d1F1YWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mOGJlNDJmNzk4N2EwZDdhNmZmMWVmOThiYzNlODM5MWY3NmU2
ODg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENDRHJhd1F1YWRfaAorI2RlZmluZSBDQ0RyYXdRdWFkX2gKKworI2luY2x1ZGUgImNjL0NDU2hh
cmVkUXVhZFN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NEZWJ1Z0Jv
cmRlckRyYXdRdWFkOworY2xhc3MgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ7CitjbGFzcyBDQ1Nv
bGlkQ29sb3JEcmF3UXVhZDsKK2NsYXNzIENDVGlsZURyYXdRdWFkOworY2xhc3MgQ0NDdXN0b21M
YXllckRyYXdRdWFkOworCisvLyBDQ0RyYXdRdWFkIGlzIGEgYmFnIG9mIGRhdGEgdXNlZCBmb3Ig
ZHJhd2luZyBhIHF1YWQuIEJlY2F1c2UgZGlmZmVyZW50CisvLyBtYXRlcmlhbHMgbmVlZCBkaWZm
ZXJlbnQgYml0cyBvZiBwZXItcXVhZCBkYXRhIHRvIHJlbmRlciwgY2xhc3NlcyB0aGF0IGRlcml2
ZQorLy8gZnJvbSBDQ0RyYXdRdWFkIHN0b3JlIGFkZGl0aW9uYWwgZGF0YSBpbiB0aGVpciBkZXJp
dmVkIGluc3RhbmNlLiBUaGUgTWF0ZXJpYWwKKy8vIGVudW0gaXMgdXNlZCB0byAic2FmZWx5IiB1
cGNhc3QgdG8gdGhlIGRlcml2ZWQgY2xhc3MuCitjbGFzcyBDQ0RyYXdRdWFkIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDQ0RyYXdRdWFkKTsKK3B1YmxpYzoKKyAgICBjb25zdCBJbnRSZWN0
JiBxdWFkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZFJlY3Q7IH0KKyAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVk
UXVhZFN0YXRlLT5xdWFkVHJhbnNmb3JtKCk7IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+
bGF5ZXJUcmFuc2Zvcm0oKTsgfQorICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5sYXllclJlY3QoKTsgfQorICAgIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPmNsaXBS
ZWN0KCk7IH0KKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFk
U3RhdGUtPm9wYWNpdHkoKTsgfQorICAgIGJvb2wgZHJhd3NPcGFxdWUoKSBjb25zdCB7IHJldHVy
biBtX3NoYXJlZFF1YWRTdGF0ZS0+aXNPcGFxdWUoKSAmJiBtX3F1YWRPcGFxdWUgJiYgb3BhY2l0
eSgpID09IDE7IH0KKyAgICBib29sIGlzTGF5ZXJBeGlzQWxpZ25lZEludFJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+aXNMYXllckF4aXNBbGlnbmVkSW50UmVjdCgpOyB9
CisKKyAgICBlbnVtIE1hdGVyaWFsIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgRGVidWdC
b3JkZXIsCisgICAgICAgIFJlbmRlclN1cmZhY2UsCisgICAgICAgIFNvbGlkQ29sb3IsCisgICAg
ICAgIFRpbGVkQ29udGVudCwKKworICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgYW5kIGFk
ZCBwcm9wZXIgbWF0ZXJpYWwgdHlwZXMgZm9yIGFsbCBsYXllciB0eXBlcworICAgICAgICBDdXN0
b21MYXllciwKKyAgICB9OworCisgICAgTWF0ZXJpYWwgbWF0ZXJpYWwoKSBjb25zdCB7IHJldHVy
biBtX21hdGVyaWFsOyB9CisKKyAgICBjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqIHRvRGVi
dWdCb3JkZXJEcmF3UXVhZCgpIGNvbnN0OworICAgIGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdR
dWFkKiB0b1JlbmRlclN1cmZhY2VEcmF3UXVhZCgpIGNvbnN0OworICAgIGNvbnN0IENDU29saWRD
b2xvckRyYXdRdWFkKiB0b1NvbGlkQ29sb3JEcmF3UXVhZCgpIGNvbnN0OworICAgIGNvbnN0IEND
VGlsZURyYXdRdWFkKiB0b1RpbGVEcmF3UXVhZCgpIGNvbnN0OworICAgIGNvbnN0IENDQ3VzdG9t
TGF5ZXJEcmF3UXVhZCogdG9DdXN0b21MYXllckRyYXdRdWFkKCkgY29uc3Q7CisKK3Byb3RlY3Rl
ZDoKKyAgICBDQ0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgTWF0ZXJpYWwsIGNv
bnN0IEludFJlY3QmKTsKKworICAgIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBtX3NoYXJlZFF1
YWRTdGF0ZTsKKworICAgIE1hdGVyaWFsIG1fbWF0ZXJpYWw7CisgICAgSW50UmVjdCBtX3F1YWRS
ZWN0OworCisgICAgLy8gQnkgZGVmYXVsdCwgdGhlIHNoYXJlZCBxdWFkIHN0YXRlIGRldGVybWlu
ZXMgd2hldGhlciBvciBub3QgdGhpcyBxdWFkIGlzCisgICAgLy8gb3BhcXVlIG9yIG5vdC4gRGVy
aXZlZCBDQ0RyYXdRdWFkIGNsYXNzZXMgY2FuIHNldCB0aGlzIHRvIGZhbHNlIGlmIHRoZXkKKyAg
ICAvLyBrbm93IGEgcXVhZCBpcyBwYXJ0aWFsbHkgdHJhbnNwYXJlbnQgKHN1Y2ggYXMgZm9yIGFu
dGlhbGlhc2VkIGVkZ2VzKS4KKyAgICBib29sIG1fcXVhZE9wYXF1ZTsKK307CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggYWYwNDJlNTY2OWI0NjJmYjZjMDlkZTZm
YzNkNGNmNGI2ZDg0ZTkyZC4uZTdiNTM4YWI5OTllYjhhZjliYjI4YzczNTdiZGI1NWJiZTc4ZjVl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDQ3VzdG9tTGF5ZXJE
cmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IApAQCAtMTE3LDYgKzExOSwzMSBAQCB2b2lkIENDTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVy
ZXJDaHJvbWl1bSopCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK1Bhc3NPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+IENDTGF5ZXJJbXBsOjpzaGFyZWRRdWFkU3RhdGUoKSBjb25zdAor
eworICAgIEludFJlY3QgbGF5ZXJDbGlwUmVjdDsKKyAgICBpZiAodXNlc0xheWVyQ2xpcHBpbmco
KSkKKyAgICAgICAgbGF5ZXJDbGlwUmVjdCA9IGNsaXBSZWN0KCk7CisgICAgcmV0dXJuIENDU2hh
cmVkUXVhZFN0YXRlOjpjcmVhdGUocXVhZFRyYW5zZm9ybSgpLCBkcmF3VHJhbnNmb3JtKCksIHZp
c2libGVMYXllclJlY3QoKSwgbGF5ZXJDbGlwUmVjdCwgZHJhd09wYWNpdHkoKSwgb3BhcXVlKCkp
OworfQorCit2b2lkIENDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlz
dCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKK3sKKyAgICBJbnRS
ZWN0IGxheWVyUmVjdChJbnRQb2ludCgpLCBib3VuZHMoKSk7CisgICAgcXVhZExpc3QuYXBwZW5k
KENDQ3VzdG9tTGF5ZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgbGF5ZXJSZWN0
LCB0aGlzKSk7Cit9CisKK3ZvaWQgQ0NMYXllckltcGw6OmFwcGVuZERlYnVnQm9yZGVyUXVhZChD
Q1F1YWRMaXN0JiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRT
dGF0ZSkgY29uc3QKK3sKKyAgICBpZiAoIWRlYnVnQm9yZGVyQ29sb3IoKS5hbHBoYSgpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKGRlYnVnQm9yZGVyV2lkdGgoKSA8PSAwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBJbnRSZWN0IGxheWVyUmVjdChJbnRQb2ludCgpLCBib3VuZHMoKSk7Cisg
ICAgcXVhZExpc3QuYXBwZW5kKENDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1
YWRTdGF0ZSwgbGF5ZXJSZWN0LCBkZWJ1Z0JvcmRlckNvbG9yKCksIGRlYnVnQm9yZGVyV2lkdGgo
KSkpOworfQorCiB2b2lkIENDTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSopCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDcsMjgg
KzE3NCw5IEBAIGNvbnN0IEludFJlY3QgQ0NMYXllckltcGw6OmdldERyYXdSZWN0KCkgY29uc3QK
ICAgICByZXR1cm4gbWFwcGVkUmVjdDsKIH0KIAotdm9pZCBDQ0xheWVySW1wbDo6ZHJhd0RlYnVn
Qm9yZGVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK1RyYW5zZm9ybWF0
aW9uTWF0cml4IENDTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKCkgY29uc3QKIHsKLSAgICBzdGF0
aWMgZmxvYXQgZ2xNYXRyaXhbMTZdOwotICAgIGlmICghZGVidWdCb3JkZXJDb2xvcigpLmFscGhh
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0g
bGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAgIGNvbnN0IExheWVyQ2hyb21pdW06OkJvcmRl
clByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT5ib3JkZXJQcm9ncmFtKCk7Ci0gICAg
QVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Ci0gICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0KLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBkcmF3VHJhbnNmb3JtKCk7Ci0gICAgcmVu
ZGVyTWF0cml4LnNjYWxlM2QoYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIDEp
OwotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIGxh
eWVyUmVuZGVyZXItPnByb2plY3Rpb25NYXRyaXgoKSAqIHJlbmRlck1hdHJpeCk7Ci0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+dmVydGV4U2hhZGVy
KCkubWF0cml4TG9jYXRpb24oKSwgZmFsc2UsICZnbE1hdHJpeFswXSwgMSkpOwotCi0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNv
bG9yTG9jYXRpb24oKSwgZGVidWdCb3JkZXJDb2xvcigpLnJlZCgpIC8gMjU1LjAsIGRlYnVnQm9y
ZGVyQ29sb3IoKS5ncmVlbigpIC8gMjU1LjAsIGRlYnVnQm9yZGVyQ29sb3IoKS5ibHVlKCkgLyAy
NTUuMCwgMSkpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmxpbmVXaWR0aChkZWJ1Z0Jv
cmRlcldpZHRoKCkpKTsKLQotICAgIC8vIFRoZSBpbmRpY2VzIGZvciB0aGUgbGluZSBhcmUgc3Rv
cmVkIGluIHRoZSBzYW1lIGFycmF5IGFzIHRoZSB0cmlhbmdsZSBpbmRpY2VzLgotICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9P
UCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCA2ICogc2l6ZW9mKHVuc2ln
bmVkIHNob3J0KSkpOworICAgIHJldHVybiBkcmF3VHJhbnNmb3JtKCk7CiB9CiAKIHZvaWQgQ0NM
YXllckltcGw6OndyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmgKaW5kZXggZTJjMDBjODY4OTgyYTc2YzY1OGNhZTgzNDEwZTg1YmNjZGNmODA5
Zi4uYWU0NjMwZmI5YjFmODU5NjNlZmY4NmRmMjMwODI0N2NkNGJmYmYwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2lu
Y2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZS5o
IgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpA
QCAtNzAsNiArNzEsMTAgQEAgcHVibGljOgogICAgIGludCBkZWJ1Z0lEKCkgY29uc3QgeyByZXR1
cm4gbV9kZWJ1Z0lEOyB9CiAjZW5kaWYKIAorICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3Rh
dGU+IHNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFk
cyhDQ1F1YWRMaXN0JiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqKTsKKyAgICB2b2lkIGFwcGVu
ZERlYnVnQm9yZGVyUXVhZChDQ1F1YWRMaXN0JiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqKSBj
b25zdDsKKwogICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwog
ICAgIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGJp
bmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CkBAIC0xMzEsOCArMTM2
LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGVidWdCb3JkZXJXaWR0aChmbG9hdCk7CiAgICAg
ZmxvYXQgZGVidWdCb3JkZXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdCb3JkZXJXaWR0
aDsgfQogCi0gICAgdm9pZCBkcmF3RGVidWdCb3JkZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7
Ci0KICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBt
X3JlbmRlclN1cmZhY2UuZ2V0KCk7IH0KICAgICB2b2lkIGNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
ICAgICB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZSgpIHsgbV9yZW5kZXJTdXJmYWNlLmNsZWFyKCk7
IH0KQEAgLTIwMCw2ICsyMDMsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGR1bXBM
YXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogICAgIHN0YXRp
YyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KTsKIAorICAgIC8vIFRy
YW5zZm9ybWF0aW9uIHVzZWQgdG8gdHJhbnNmb3JtIHF1YWRzIHByb3ZpZGVkIGluIGFwcGVuZFF1
YWRzLgorICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybSgpIGNv
bnN0OworCiBwcml2YXRlOgogICAgIHZvaWQgc2V0UGFyZW50KENDTGF5ZXJJbXBsKiBwYXJlbnQp
IHsgbV9wYXJlbnQgPSBwYXJlbnQ7IH0KICAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXpl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggZTBjZDM4OWRj
NmY4ZGY5NDA4YTljMDU1MWU0MDZlZmJkMWRmMmIwZC4uMTIxZDA1Y2M0OTc3Y2Y3OTA4OTgyOTcx
ODUxM2RhYjk0MzkxMzkzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAKQEAgLTMwLDggKzMwLDExIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNp
bmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50Lmgi
CisjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVk
ZSAiY2MvQ0NQYWdlU2NhbGVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZh
Y2VEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgPHd0
Zi9DdXJyZW50VGltZS5oPgogCkBAIC0xMjYsMTQgKzEyOSwxMjYgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQ
b3NpdGlvbiwKICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0K
IAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKEND
TGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCkKK3sKKyAgICAvLyBGb3Igbm93LCB3ZSB1c2UgZGFtYWdlIHRyYWNraW5nIHRv
IGNvbXB1dGUgYSBnbG9iYWwgc2Npc3Nvci4gVG8gZG8gdGhpcywgd2UgbXVzdAorICAgIC8vIGNv
bXB1dGUgYWxsIGRhbWFnZSB0cmFja2luZyBiZWZvcmUgZHJhd2luZyBhbnl0aGluZywgc28gdGhh
dCB3ZSBrbm93IHRoZSByb290CisgICAgLy8gZGFtYWdlIHJlY3QuIFRoZSByb290IGRhbWFnZSBy
ZWN0IGlzIHRoZW4gdXNlZCB0byBzY2lzc29yIGVhY2ggc3VyZmFjZS4KKworICAgIGZvciAoaW50
IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFj
ZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgeworICAgICAgICBDQ0xheWVySW1wbCogcmVu
ZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdl
dCgpOworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJm
YWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2Up
OworICAgICAgICByZW5kZXJTdXJmYWNlLT5kYW1hZ2VUcmFja2VyKCktPnVwZGF0ZURhbWFnZVJl
Y3RGb3JOZXh0RnJhbWUocmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIHJlbmRlclN1cmZhY2VM
YXllci0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSk7CisgICAgfQorfQor
CitzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tcHV0ZVNjcmVlblNwYWNlVHJhbnNmb3Jt
Rm9yU3VyZmFjZShDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyKQoreworICAgIC8vIFRo
ZSBsYXllcidzIHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0gY2FuIGJlIHdyaXR0ZW4gYXM6CisgICAg
Ly8gICBsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtID0gc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNm
b3JtICogbGF5ZXJPcmlnaW5UcmFuc2Zvcm0KKyAgICAvLyBTbywgdG8gY29tcHV0ZSB0aGUgc3Vy
ZmFjZSBzY3JlZW4gc3BhY2UsIHdlIGNhbiBkbzoKKyAgICAvLyAgIHN1cmZhY2VTY3JlZW5TcGFj
ZVRyYW5zZm9ybSA9IGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gKiBpbnZlcnNlKGxheWVyT3Jp
Z2luVHJhbnNmb3JtKQorCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFu
c2Zvcm0gPSByZW5kZXJTdXJmYWNlTGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICBsYXllck9y
aWdpblRyYW5zZm9ybS50cmFuc2xhdGUoLTAuNSAqIHJlbmRlclN1cmZhY2VMYXllci0+Ym91bmRz
KCkud2lkdGgoKSwgLTAuNSAqIHJlbmRlclN1cmZhY2VMYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkp
OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9
IHJlbmRlclN1cmZhY2VMYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKTsKKyAgICBzdXJmYWNl
U2NyZWVuU3BhY2VUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaW52ZXJz
ZSgpKTsKKworICAgIHJldHVybiBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm07Cit9CisKK3N0
YXRpYyBGbG9hdFJlY3QgZGFtYWdlSW5TdXJmYWNlU3BhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1
cmZhY2VMYXllciwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkKK3sKKyAgICBGbG9h
dFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7CisgICAgLy8gRm9yIG5vdywgd2UgY29uc2VydmF0aXZl
bHkgdXNlIHRoZSByb290IGRhbWFnZSBhcyB0aGUgZGFtYWdlIGZvcgorICAgIC8vIGFsbCBzdXJm
YWNlcywgZXhjZXB0IHBlcnNwZWN0aXZlIHRyYW5zZm9ybXMuCisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBjb21wdXRlU2NyZWVuU3BhY2VUcmFuc2Zvcm1G
b3JTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllcik7CisgICAgaWYgKHNjcmVlblNwYWNlVHJhbnNm
b3JtLmhhc1BlcnNwZWN0aXZlKCkpIHsKKyAgICAgICAgLy8gUGVyc3BlY3RpdmUgcHJvamVjdGlv
bnMgZG8gbm90IHBsYXkgbmljZSB3aXRoIG1hcFJlY3Qgb2YKKyAgICAgICAgLy8gaW52ZXJzZSB0
cmFuc2Zvcm1zLiBJbiB0aGlzIHVuY29tbW9uIGNhc2UsIGl0cyBzaW1wbGVyIHRvCisgICAgICAg
IC8vIGp1c3QgcmVkcmF3IHRoZSBlbnRpcmUgc3VyZmFjZS4KKyAgICAgICAgLy8gRklYTUU6IHVz
ZSBjYWxjdWxhdGVWaXNpYmxlUmVjdCB0byBoYW5kbGUgcHJvamVjdGlvbnMuCisgICAgICAgIEND
UmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVy
U3VyZmFjZSgpOworICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IHJlbmRlclN1cmZhY2UtPmNv
bnRlbnRSZWN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
aW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJz
ZSgpOworICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IGludmVyc2VTY3JlZW5TcGFjZVRyYW5z
Zm9ybS5tYXBSZWN0KHJvb3REYW1hZ2VSZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIHN1cmZhY2VE
YW1hZ2VSZWN0OworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRl
clBhc3NlcyhWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiYgcGFzc2VzKQoreworICAgIEND
TGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5hcHBlbmQocm9vdExheWVyKCkpOworCisgICAgaWYgKCFyb290TGF5ZXIoKS0+cmVuZGVy
U3VyZmFjZSgpKQorICAgICAgICByb290TGF5ZXIoKS0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCktPmNsZWFyTGF5ZXJMaXN0KCk7CisgICAg
cm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCB2aWV3cG9ydFNpemUoKSkpOworCisgICAgcm9vdExheWVyKCktPnNldENsaXBSZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgdmlld3BvcnRTaXplKCkpKTsKKworICAgIHsKKyAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjRHJhd0V0YyIsIHRoaXMsIDApOworICAgICAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShyb290TGF5ZXIoKSwgcm9vdExheWVyKCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKS0+
bGF5ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCku
bWF4VGV4dHVyZVNpemUpOworICAgIH0KKworICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkKKyAgICAgICAgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNl
cyhyb290TGF5ZXIoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRmxvYXRSZWN0IHJv
b3REYW1hZ2VSZWN0ID0gcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tl
cigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworCisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0t
c3VyZmFjZUluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIg
PSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAgIEND
UmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVy
U3VyZmFjZSgpOworCisgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHBhc3MgPSBDQ1JlbmRl
clBhc3M6OmNyZWF0ZShyZW5kZXJTdXJmYWNlKTsKKworICAgICAgICBGbG9hdFJlY3Qgc3VyZmFj
ZURhbWFnZVJlY3Q7CisgICAgICAgIGlmIChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNp
bmdQYXJ0aWFsU3dhcCkKKyAgICAgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gZGFtYWdlSW5T
dXJmYWNlU3BhY2UocmVuZGVyU3VyZmFjZUxheWVyLCByb290RGFtYWdlUmVjdCk7CisgICAgICAg
IHBhc3MtPnNldFN1cmZhY2VEYW1hZ2VSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KTsKKworICAgICAg
ICBjb25zdCBDQ0xheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBs
YXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKKyAgICAgICAgICAgIENDTGF5ZXJJbXBs
KiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChs
YXllci0+dmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgaWYgKENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3Vy
ZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQobGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllci0+aWQoKSkp
IHsKKyAgICAgICAgICAgICAgICBwYXNzLT5hcHBlbmRRdWFkc0ZvclJlbmRlclN1cmZhY2VMYXll
cihsYXllcik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yTGF5ZXIobGF5ZXIpOworICAgICAgICB9CisK
KyAgICAgICAgcGFzc2VzLmFwcGVuZChwYXNzLnJlbGVhc2UoKSk7CisgICAgfQorfQorCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQogewogICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKG1f
bGF5ZXJSZW5kZXJlcik7Ci0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCkpCi0g
ICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOworCisgICAgaWYgKCFyb290TGF5
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPE93blB0cjxDQ1JlbmRlclBhc3M+
ID4gcGFzc2VzOworICAgIGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhwYXNzZXMpOworCisgICAgbV9s
YXllclJlbmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFtZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcGFzc2VzLnNpemUoKTsgKytpKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdS
ZW5kZXJQYXNzKHBhc3Nlc1tpXS5nZXQoKSk7CisgICAgbV9sYXllclJlbmRlcmVyLT5maW5pc2hE
cmF3aW5nRnJhbWUoKTsKIAogICAgICsrbV9mcmFtZU51bWJlcjsKKworICAgIC8vIFRoZSBuZXh0
IGZyYW1lIHNob3VsZCBzdGFydCBieSBhc3N1bWluZyBub3RoaW5nIGhhcyBjaGFuZ2VkLCBhbmQg
Y2hhbmdlcyBhcmUgbm90ZWQgYXMgdGhleSBvY2N1ci4KKyAgICByb290TGF5ZXIoKS0+cmVzZXRB
bGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpmaW5pc2hBbGxSZW5kZXJpbmcoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oCmluZGV4IDg4N2M3ZTY1NTc3ZTc5ZTBlMjhhZDA3ODhiZTIzMmQ3NTdhNGMyM2YuLmE3YWUw
Mzg4YmMwMGY2YjBkMDZkMzZkNzIyNGQ2NDg4N2QxZGM4ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmgKQEAgLTI2LDggKzI2LDEwIEBACiAjZGVmaW5lIENDTGF5ZXJUcmVl
SG9zdEltcGxfaAogCiAjaW5jbHVkZSAiY2MvQ0NJbnB1dEhhbmRsZXIuaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQ
YXNzLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiAjaWYgVVNFKFNLSUEpCkBAIC0xMjQs
MTAgKzEyNiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IG1fZnJhbWVOdW1iZXI7CiAKIHByaXZh
dGU6CisgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5ZXJMaXN0
OworCiAgICAgdm9pZCBzZXRQYWdlU2NhbGVEZWx0YShmbG9hdCk7CiAgICAgdm9pZCBhcHBseVBh
Z2VTY2FsZURlbHRhVG9TY3JvbGxMYXllcigpOwogICAgIHZvaWQgYWRqdXN0U2Nyb2xsc0ZvclBh
Z2VTY2FsZUNoYW5nZShmbG9hdCk7CiAgICAgdm9pZCB1cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigp
OworICAgIHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERy
YXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAg
IHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+
Jik7CiAKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7
CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RMYXllckltcGw7CkBAIC0xNDUsNiArMTUx
LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGluY2hHZXN0dXJlQWN0aXZlOwogCiAgICAgT3du
UHRyPENDUGFnZVNjYWxlQW5pbWF0aW9uPiBtX3BhZ2VTY2FsZUFuaW1hdGlvbjsKKworICAgIEND
TGF5ZXJTb3J0ZXIgbV9sYXllclNvcnRlcjsKIH07CiAKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mMTM4OTdmN2FlNjdmNjlhMjZmOThlZmJmZGRmZTQzYTM2ODU4Mzg5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCisKKyNpbmNsdWRl
ICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFk
LmgiCisjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitQYXNzT3duUHRyPENDUmVuZGVyUGFzcz4gQ0NSZW5kZXJQYXNzOjpjcmVhdGUoQ0NS
ZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q0NSZW5kZXJQYXNzKHRhcmdldFN1cmZhY2UpKTsKK30KKworQ0NSZW5kZXJQYXNzOjpDQ1JlbmRl
clBhc3MoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKQorICAgIDogbV90YXJnZXRTdXJm
YWNlKHRhcmdldFN1cmZhY2UpCit7CisgICAgQVNTRVJUKG1fdGFyZ2V0U3VyZmFjZSk7Cit9CisK
K3ZvaWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvckxheWVyKENDTGF5ZXJJbXBsKiBsYXll
cikKK3sKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IGxh
eWVyLT5zaGFyZWRRdWFkU3RhdGUoKTsKKyAgICBsYXllci0+YXBwZW5kUXVhZHMobV9xdWFkTGlz
dCwgc2hhcmVkUXVhZFN0YXRlLmdldCgpKTsKKyAgICBsYXllci0+YXBwZW5kRGVidWdCb3JkZXJR
dWFkKG1fcXVhZExpc3QsIHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSk7CisgICAgbV9zaGFyZWRRdWFk
U3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKK30KKwordm9pZCBD
Q1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBs
KiBsYXllcikKK3sKKyAgICAvLyBGSVhNRTogcmVuZGVyIHN1cmZhY2UgbGF5ZXJzIHNob3VsZCBi
ZSBhIENDTGF5ZXJJbXBsLWRlcml2ZWQgY2xhc3MgYW5kCisgICAgLy8gbm90IGJlIGhhbmRsZWQg
c3BlY2lhbGx5IGhlcmUuCisgICAgQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlID0gbGF5ZXItPnJl
bmRlclN1cmZhY2UoKTsKKyAgICBib29sIGlzT3BhcXVlID0gZmFsc2U7CisgICAgT3duUHRyPEND
U2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3Jl
YXRlKHN1cmZhY2UtPmRyYXdUcmFuc2Zvcm0oKSwgc3VyZmFjZS0+ZHJhd1RyYW5zZm9ybSgpLCBz
dXJmYWNlLT5jb250ZW50UmVjdCgpLCBzdXJmYWNlLT5jbGlwUmVjdCgpLCBzdXJmYWNlLT5kcmF3
T3BhY2l0eSgpLCBpc09wYXF1ZSk7CisgICAgbV9xdWFkTGlzdC5hcHBlbmQoQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHN1cmZhY2UtPmNvbnRl
bnRSZWN0KCksIGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCgpKSk7CisgICAgbV9zaGFyZWRRdWFk
U3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclBhc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNjE5NzM2NjZmYzVmMDg5YmVkNTA3YjAwMmU0
MWVmMjFmYzZiNWRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKQEAgLTAsMCArMSw2NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ0NSZW5kZXJQYXNzX2gKKyNkZWZpbmUgQ0NSZW5kZXJQYXNzX2gKKworI2lu
Y2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xh
eWVySW1wbDsKK2NsYXNzIENDUmVuZGVyU3VyZmFjZTsKK2NsYXNzIENDU2hhcmVkUXVhZFN0YXRl
OworCit0eXBlZGVmIFZlY3RvcjxPd25QdHI8Q0NEcmF3UXVhZD4gPiBDQ1F1YWRMaXN0OworCitj
bGFzcyBDQ1JlbmRlclBhc3MgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUmVuZGVyUGFz
cyk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzPiBjcmVhdGUo
Q0NSZW5kZXJTdXJmYWNlKik7CisKKyAgICB2b2lkIGFwcGVuZFF1YWRzRm9yTGF5ZXIoQ0NMYXll
ckltcGwqKTsKKyAgICB2b2lkIGFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5
ZXJJbXBsKik7CisKKyAgICBjb25zdCBDQ1F1YWRMaXN0JiBxdWFkTGlzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcXVhZExpc3Q7IH0KKyAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UoKSBj
b25zdCB7IHJldHVybiBtX3RhcmdldFN1cmZhY2U7IH0KKworICAgIHZvaWQgc2V0U3VyZmFjZURh
bWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkgeyBtX3N1cmZhY2VE
YW1hZ2VSZWN0ID0gc3VyZmFjZURhbWFnZVJlY3Q7IH0KKyAgICBjb25zdCBGbG9hdFJlY3QmIHN1
cmZhY2VEYW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlRGFtYWdlUmVjdDsgfQor
Citwcml2YXRlOgorICAgIENDUmVuZGVyUGFzcyhDQ1JlbmRlclN1cmZhY2UqKTsKKworICAgIEND
UmVuZGVyU3VyZmFjZSogbV90YXJnZXRTdXJmYWNlOworICAgIENDUXVhZExpc3QgbV9xdWFkTGlz
dDsKKyAgICBWZWN0b3I8T3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiA+IG1fc2hhcmVkUXVhZFN0
YXRlTGlzdDsKKyAgICBGbG9hdFJlY3QgbV9zdXJmYWNlRGFtYWdlUmVjdDsKK307CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzg5YTE3MmQxNDRiYWE1ZjNjMGE1YzBmOGVkZjU4N2UxYjNjZGM5YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPENDUmVuZGVyU3VyZmFjZURy
YXdRdWFkPiBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVy
SW1wbCogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChzaGFyZWRRdWFkU3Rh
dGUsIHF1YWRSZWN0LCBsYXllciwgc3VyZmFjZURhbWFnZVJlY3QpKTsKK30KKworQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQ6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVy
SW1wbCogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCisgICAgOiBD
Q0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6UmVuZGVyU3VyZmFjZSwgcXVh
ZFJlY3QpCisgICAgLCBtX2xheWVyKGxheWVyKQorICAgICwgbV9zdXJmYWNlRGFtYWdlUmVjdChz
dXJmYWNlRGFtYWdlUmVjdCkKK3sKKyAgICBBU1NFUlQobV9sYXllcik7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZURyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1MzVkMzJk
YTI5N2Y4M2RmNjVmMDU0ODNlOTNjNWFmOWRiNzg1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDUmVuZGVyU3VyZmFj
ZURyYXdRdWFkX2gKKyNkZWZpbmUgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWRfaAorCisjaW5jbHVk
ZSAiY2MvQ0NEcmF3UXVhZC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllckltcGw7CisKK2NsYXNzIENDUmVuZGVyU3Vy
ZmFjZURyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0
YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJm
YWNlRGFtYWdlUmVjdCk7CisKKyAgICBDQ0xheWVySW1wbCogbGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX2xheWVyOyB9CisKKyAgICAvLyBUaGUgc3VyZmFjZSBkYW1hZ2UgcmVjdCBmb3IgdGhlIHRh
cmdldCBzdXJmYWNlIHRoaXMgcXVhZCBkcmF3cyBpbnRvLgorICAgIC8vIEZJWE1FOiBUaGlzIGNh
biBiZSByZW1vdmVkIG9uY2UgcmVuZGVyIHN1cmZhY2VzIGdldCB0aGVpciBvd24gbGF5ZXIgdHlw
ZS4KKyAgICBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9zdXJmYWNlRGFtYWdlUmVjdDsgfQorCitwcml2YXRlOgorICAgIENDUmVuZGVyU3VyZmFj
ZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5
ZXJJbXBsKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CisKKyAgICBDQ0xh
eWVySW1wbCogbV9sYXllcjsKKyAgICBGbG9hdFJlY3QgbV9zdXJmYWNlRGFtYWdlUmVjdDsKK307
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWJmNzY5MjViYjhjZjJiYmFjNTM5YzAxNDMxYzU1Nzg0MzM5ZmQwNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2hhcmVkUXVhZFN0YXRlLmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBDQ1NoYXJlZFF1YWRT
dGF0ZTo6Y3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3Qm
IGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wg
b3BhcXVlKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NTaGFyZWRRdWFkU3RhdGUocXVh
ZFRyYW5zZm9ybSwgbGF5ZXJUcmFuc2Zvcm0sIGxheWVyUmVjdCwgY2xpcFJlY3QsIG9wYWNpdHks
IG9wYXF1ZSkpOworfQorCitDQ1NoYXJlZFF1YWRTdGF0ZTo6Q0NTaGFyZWRRdWFkU3RhdGUoY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpCisgICAgOiBt
X3F1YWRUcmFuc2Zvcm0ocXVhZFRyYW5zZm9ybSkKKyAgICAsIG1fbGF5ZXJUcmFuc2Zvcm0obGF5
ZXJUcmFuc2Zvcm0pCisgICAgLCBtX2xheWVyUmVjdChsYXllclJlY3QpCisgICAgLCBtX2NsaXBS
ZWN0KGNsaXBSZWN0KQorICAgICwgbV9vcGFjaXR5KG9wYWNpdHkpCisgICAgLCBtX29wYXF1ZShv
cGFxdWUpCit7Cit9CisKK2Jvb2wgQ0NTaGFyZWRRdWFkU3RhdGU6OmlzTGF5ZXJBeGlzQWxpZ25l
ZEludFJlY3QoKSBjb25zdAoreworICAgIC8vIE5vdGU6IHRoaXMgZG9lc24ndCBjb25zaWRlciB3
aW5kb3cgb3IgcHJvamVjdGlvbiBtYXRyaWNlcy4KKyAgICAvLyBBc3N1bWUgdGhhdCB0aGV5J3Jl
IG9ydGhvbm9ybWFsIGFuZCBoYXZlIGludGVnZXIgc2NhbGVzIGFuZCB0cmFuc2xhdGlvbnMuCisg
ICAgRmxvYXRRdWFkIHF1YWQgPSBxdWFkVHJhbnNmb3JtKCkubWFwUXVhZChGbG9hdFF1YWQobGF5
ZXJSZWN0KCkpKTsKKyAgICByZXR1cm4gcXVhZC5pc1JlY3RpbGluZWFyKCkgJiYgcXVhZC5ib3Vu
ZGluZ0JveCgpLmlzRXhwcmVzc2libGVBc0ludFJlY3QoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFk
U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2hhcmVkUXVhZFN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTc4NTc1N2Y5ZGI5NGIxYjMyMDYxZmQ4ZDhi
MjFjNDBiZWYxZmYwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ0NTaGFyZWRRdWFkU3RhdGVfaAorI2RlZmluZSBDQ1NoYXJlZFF1
YWRTdGF0ZV9oCisKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDU2hhcmVkUXVhZFN0YXRl
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1NoYXJlZFF1YWRTdGF0ZSk7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSk7CisKKyAgICAvLyBU
aGUgdHJhbnNmb3JtIHRoYXQgcXVhZHMgaW4gYSBDQ0RyYXdRdWFkIHNob3VsZCBiZSB0cmFuc2Zv
cm1lZCB3aXRoLgorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkVHJhbnNmb3JtOyB9CisgICAgLy8gVGhlIHRyYW5zZm9y
bSB0aGF0IGxheWVyUmVjdCgpIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB3aXRoLgorICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5ZXJUcmFuc2Zvcm07IH0KKyAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QoKSBjb25zdCB7
IHJldHVybiBtX2xheWVyUmVjdDsgfQorICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQorCisgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBt
X29wYXF1ZTsgfQorICAgIGJvb2wgaXNMYXllckF4aXNBbGlnbmVkSW50UmVjdCgpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIENDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFu
c2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qs
IGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fcXVhZFRyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2xheWVyVHJhbnNm
b3JtOworICAgIEludFJlY3QgbV9sYXllclJlY3Q7CisgICAgSW50UmVjdCBtX2NsaXBSZWN0Owor
ICAgIGZsb2F0IG1fb3BhY2l0eTsKKyAgICBib29sIG1fb3BhcXVlOworfTsKKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
MWM3MjlhNDE1N2RkMjIxNzJiNmM4MzFkNzcwMGNjNDIwYjRlZTZhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENv
bG9yRHJhd1F1YWQuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NTb2xpZENvbG9yRHJhd1F1YWQ+IENDU29saWRDb2xv
ckRyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0
ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENDU29saWRDb2xvckRyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwg
cXVhZFJlY3QsIGNvbG9yKSk7Cit9CisKK0NDU29saWRDb2xvckRyYXdRdWFkOjpDQ1NvbGlkQ29s
b3JEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25z
dCBJbnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIDogQ0NEcmF3UXVh
ZChzaGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1YWQ6OlNvbGlkQ29sb3IsIHF1YWRSZWN0KQorICAg
ICwgbV9jb2xvcihjb2xvcikKK3sKKyAgICBpZiAobV9jb2xvci5hbHBoYSgpICE9IDEpCisgICAg
ICAgIG1fcXVhZE9wYXF1ZSA9IGZhbHNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENv
bG9yRHJhd1F1YWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDIwZGY2ODQ5YThhMDNjYmE4ZjIyYjA4ODU3MGM1
ZTFiODM2Y2U0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaApAQCAtMCwwICsxLDUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDQ1NvbGlkQ29sb3JEcmF3UXVhZF9oCisjZGVmaW5lIENDU29saWRD
b2xvckRyYXdRdWFkX2gKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiY2MvQ0NEcmF3
UXVhZC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ0NTb2xpZENvbG9yRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NTb2xpZENvbG9yRHJhd1F1YWQpOworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDU29saWRDb2xvckRyYXdRdWFkPiBjcmVhdGUoY29uc3Qg
Q0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKworICAg
IGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH07CisKK3ByaXZh
dGU6CisgICAgQ0NTb2xpZENvbG9yRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBj
b25zdCBJbnRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKworICAgIENvbG9yIG1fY29sb3I7Cit9Owor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdj
ZmM1ZDkxYjRlOTFhYTFmNDk3ZjcwY2Y0NjYzODJjZTFmZmUzY2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3
UXVhZC5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGFzc093blB0cjxDQ1RpbGVEcmF3UXVhZD4gQ0NUaWxlRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBD
Q1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVj
dCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFBvaW50JiB0ZXh0dXJlT2Zm
c2V0LCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgR0MzRGludCB0ZXh0dXJlRmlsdGVyLCBi
b29sIHN3aXp6bGVDb250ZW50cywgYm9vbCBsZWZ0RWRnZUFBLCBib29sIHRvcEVkZ2VBQSwgYm9v
bCByaWdodEVkZ2VBQSwgYm9vbCBib3R0b21FZGdlQUEpCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDQ1RpbGVEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0ZXh0dXJlSWQs
IHRleHR1cmVPZmZzZXQsIHRleHR1cmVTaXplLCB0ZXh0dXJlRmlsdGVyLCBzd2l6emxlQ29udGVu
dHMsIGxlZnRFZGdlQUEsIHRvcEVkZ2VBQSwgcmlnaHRFZGdlQUEsIGJvdHRvbUVkZ2VBQSkpOwor
fQorCitDQ1RpbGVEcmF3UXVhZDo6Q0NUaWxlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3Rh
dGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRQb2ludCYgdGV4dHVyZU9mZnNldCwgY29uc3QgSW50
U2l6ZSYgdGV4dHVyZVNpemUsIEdDM0RpbnQgdGV4dHVyZUZpbHRlciwgYm9vbCBzd2l6emxlQ29u
dGVudHMsIGJvb2wgbGVmdEVkZ2VBQSwgYm9vbCB0b3BFZGdlQUEsIGJvb2wgcmlnaHRFZGdlQUEs
IGJvb2wgYm90dG9tRWRnZUFBKQorICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIEND
RHJhd1F1YWQ6OlRpbGVkQ29udGVudCwgcXVhZFJlY3QpCisgICAgLCBtX3RleHR1cmVJZCh0ZXh0
dXJlSWQpCisgICAgLCBtX3RleHR1cmVPZmZzZXQodGV4dHVyZU9mZnNldCkKKyAgICAsIG1fdGV4
dHVyZVNpemUodGV4dHVyZVNpemUpCisgICAgLCBtX3RleHR1cmVGaWx0ZXIodGV4dHVyZUZpbHRl
cikKKyAgICAsIG1fc3dpenpsZUNvbnRlbnRzKHN3aXp6bGVDb250ZW50cykKKyAgICAsIG1fbGVm
dEVkZ2VBQShsZWZ0RWRnZUFBKQorICAgICwgbV90b3BFZGdlQUEodG9wRWRnZUFBKQorICAgICwg
bV9yaWdodEVkZ2VBQShyaWdodEVkZ2VBQSkKKyAgICAsIG1fYm90dG9tRWRnZUFBKGJvdHRvbUVk
Z2VBQSkKK3sKKyAgICBpZiAoaXNBbnRpYWxpYXNlZCgpKQorICAgICAgICBtX3F1YWRPcGFxdWUg
PSBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTJl
NTNkYmQyYThmNWQxZmIzZDMzMzE5YjJjMDMxMWVjNTNmNWNhOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdR
dWFkLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NUaWxlRHJhd1F1YWRfaAor
I2RlZmluZSBDQ1RpbGVEcmF3UXVhZF9oCisKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIK
KyNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ1RpbGVEcmF3UXVhZCA6IHB1YmxpYyBD
Q0RyYXdRdWFkIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1RpbGVEcmF3UXVhZCk7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUaWxlRHJhd1F1YWQ+IGNyZWF0ZShjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBQbGF0Zm9ybTNE
T2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50UG9pbnQmIHRleHR1cmVPZmZzZXQsIGNvbnN0IElu
dFNpemUmIHRleHR1cmVTaXplLCBHQzNEaW50IHRleHR1cmVGaWx0ZXIsIGJvb2wgc3dpenpsZUNv
bnRlbnRzLCBib29sIGxlZnRFZGdlQUEsIGJvb2wgdG9wRWRnZUFBLCBib29sIHJpZ2h0RWRnZUFB
LCBib29sIGJvdHRvbUVkZ2VBQSk7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlkOyB9CisgICAgSW50UG9pbnQgdGV4dHVyZU9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZU9mZnNldDsgfQorICAgIEludFNpemUgdGV4dHVy
ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXplOyB9CisgICAgR0MzRGludCB0ZXh0
dXJlRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlRmlsdGVyOyB9CisgICAgYm9vbCBz
d2l6emxlQ29udGVudHMoKSBjb25zdCB7IHJldHVybiBtX3N3aXp6bGVDb250ZW50czsgfQorCisg
ICAgYm9vbCBsZWZ0RWRnZUFBKCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0RWRnZUFBOyB9CisgICAg
Ym9vbCB0b3BFZGdlQUEoKSBjb25zdCB7IHJldHVybiBtX3RvcEVkZ2VBQTsgfQorICAgIGJvb2wg
cmlnaHRFZGdlQUEoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0RWRnZUFBOyB9CisgICAgYm9vbCBi
b3R0b21FZGdlQUEoKSBjb25zdCB7IHJldHVybiBtX2JvdHRvbUVkZ2VBQTsgfQorCisgICAgYm9v
bCBpc0FudGlhbGlhc2VkKCkgY29uc3QgeyByZXR1cm4gbGVmdEVkZ2VBQSgpIHx8IHRvcEVkZ2VB
QSgpIHx8IHJpZ2h0RWRnZUFBKCkgfHwgYm90dG9tRWRnZUFBKCk7IH0KKworcHJpdmF0ZToKKyAg
ICBDQ1RpbGVEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3Qm
IHF1YWRSZWN0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50UG9pbnQmIHRl
eHR1cmVPZmZzZXQsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBHQzNEaW50IHRleHR1cmVG
aWx0ZXIsIGJvb2wgc3dpenpsZUNvbnRlbnRzLCBib29sIGxlZnRFZGdlQUEsIGJvb2wgdG9wRWRn
ZUFBLCBib29sIHJpZ2h0RWRnZUFBLCBib29sIGJvdHRvbUVkZ2VBQSk7CisKKyAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fdGV4dHVyZUlkOworICAgIEludFBvaW50IG1fdGV4dHVyZU9mZnNldDsKKyAg
ICBJbnRTaXplIG1fdGV4dHVyZVNpemU7CisgICAgR0MzRGludCBtX3RleHR1cmVGaWx0ZXI7Cisg
ICAgYm9vbCBtX3N3aXp6bGVDb250ZW50czsKKyAgICBib29sIG1fbGVmdEVkZ2VBQTsKKyAgICBi
b29sIG1fdG9wRWRnZUFBOworICAgIGJvb2wgbV9yaWdodEVkZ2VBQTsKKyAgICBib29sIG1fYm90
dG9tRWRnZUFBOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1w
bC5jcHAKaW5kZXggNDlkMWRmM2ZkOGJlM2M4OTBjMDZmMDVhZTc1ZWU5NTE3ZTc5N2MxMy4uNDkw
NjY1NGMwMDFkNGE5Njg1OTQ5N2EyOTM4MzViODMwNDZiYzQ0YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aWxlZExheWVySW1wbC5jcHAKQEAgLTMwLDcgKzMwLDggQEAKICNpbmNsdWRlICJjYy9DQ1RpbGVk
TGF5ZXJJbXBsLmgiCiAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNs
dWRlICJjYy9DQ0xheWVyUXVhZC5oIgorI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFk
LmgiCisjaW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1YWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTUzLDYgKzU0LDcgQEAgcHJp
dmF0ZToKIENDVGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXllckltcGwoaW50IGlkKQogICAgIDog
Q0NMYXllckltcGwoaWQpCiAgICAgLCBtX3NraXBzRHJhdyh0cnVlKQorICAgICwgbV9jb250ZW50
c1N3aXp6bGVkKGZhbHNlKQogewogfQogCkBAIC05Nyw3ICs5OSw3IEBAIERyYXdhYmxlVGlsZSog
Q0NUaWxlZExheWVySW1wbDo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCiAgICAgcmV0dXJuIHRp
bGUuZ2V0KCk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IENDVGlsZWRMYXllckltcGw6OnRp
bGluZ1RyYW5zZm9ybSgpIGNvbnN0CitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ1RpbGVkTGF5ZXJJ
bXBsOjpxdWFkVHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtKCk7CiAKQEAgLTExMiw2MyArMTE0LDUwIEBAIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IENDVGlsZWRMYXllckltcGw6OnRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0
CiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3ZvaWQgQ0NUaWxlZExheWVy
SW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpCiB7Ci0gICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0
ID0gdmlzaWJsZUxheWVyUmVjdCgpOworICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0ID0g
dmlzaWJsZUxheWVyUmVjdCgpOwogCi0gICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX3RpbGVyIHx8
IG1fdGlsZXItPmlzRW1wdHkoKSB8fCBsYXllclJlY3QuaXNFbXB0eSgpIHx8ICFsYXllclJlbmRl
cmVyKQorICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV90aWxlciB8fCBtX3RpbGVyLT5pc0VtcHR5
KCkgfHwgY29udGVudFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybSA9IHRpbGluZ1RyYW5zZm9ybSgpOwotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZU1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KGxheWVyUmVuZGVyZXItPndpbmRvd01hdHJpeCgpICogbGF5ZXJSZW5kZXJlci0+cHJvamVjdGlv
bk1hdHJpeCgpICogbGF5ZXJUcmFuc2Zvcm0pLnRvMmRUcmFuc2Zvcm0oKTsKKyAgICBpbnQgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5k
aWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBJbnRSZWN0
IGxheWVyUmVjdCA9IG1fdGlsZXItPmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3Qp
OworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9y
IChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgRHJhd2FibGVU
aWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9
IG1fdGlsZXItPnRpbGVCb3VuZHMoaSwgaik7CisgICAgICAgICAgICBJbnRSZWN0IGRpc3BsYXlS
ZWN0ID0gdGlsZVJlY3Q7CisgICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3QobGF5ZXJSZWN0
KTsKIAotICAgIC8vIERvbid0IGRyYXcgYW55IHRpbGVzIHdoZW4gZGV2aWNlIG1hdHJpeCBpcyBu
b3QgaW52ZXJ0aWJsZS4KLSAgICBpZiAoIWRldmljZU1hdHJpeC5pc0ludmVydGlibGUoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgLy8gU2tpcCBlbXB0eSB0aWxlcy4KKyAgICAgICAg
ICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICBGbG9hdFF1YWQgcXVhZCA9IGRldmljZU1hdHJpeC5tYXBRdWFkKEZsb2F0UXVhZChsYXll
clJlY3QpKTsKLSAgICBDQ0xheWVyUXVhZCBkZXZpY2VSZWN0ID0gQ0NMYXllclF1YWQoRmxvYXRR
dWFkKHF1YWQuYm91bmRpbmdCb3goKSkpOwotICAgIENDTGF5ZXJRdWFkIGxheWVyUXVhZCA9IEND
TGF5ZXJRdWFkKHF1YWQpOworICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT50ZXh0dXJl
SWQoKSkgeworICAgICAgICAgICAgICAgIHF1YWRMaXN0LmFwcGVuZChDQ1NvbGlkQ29sb3JEcmF3
UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgdGlsZVJlY3QsIGJhY2tncm91bmRDb2xvcigp
KSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEtlZXAgdHJhY2sgb2YgaG93IHRoZSB0b3AgbGVmdCBoYXMgbW92ZWQsIHNvIHRoZSB0
ZXh0dXJlIGNhbiBiZQorICAgICAgICAgICAgLy8gb2Zmc2V0IHRoZSBzYW1lIGFtb3VudC4KKyAg
ICAgICAgICAgIEludFNpemUgZGlzcGxheU9mZnNldCA9IHRpbGVSZWN0Lm1pblhNaW5ZQ29ybmVy
KCkgLSBkaXNwbGF5UmVjdC5taW5YTWluWUNvcm5lcigpOworICAgICAgICAgICAgSW50UG9pbnQg
dGV4dHVyZU9mZnNldCA9IG1fdGlsZXItPnRleHR1cmVPZmZzZXQoaSwgaikgKyBkaXNwbGF5T2Zm
c2V0OworICAgICAgICAgICAgZmxvYXQgdGlsZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1f
dGlsZXItPnRpbGVTaXplKCkud2lkdGgoKSk7CisgICAgICAgICAgICBmbG9hdCB0aWxlSGVpZ2h0
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZXItPnRpbGVTaXplKCkuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZSh0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwogCi0g
ICAgLy8gVXNlIGFudGktYWxpYXNpbmcgcHJvZ3JhbXMgb25seSB3aGVuIG5lY2Vzc2FyeS4KLSAg
ICBib29sIHVzZUFBID0gKG1fdGlsZXItPmhhc0JvcmRlclRleGVscygpICYmICghcXVhZC5pc1Jl
Y3RpbGluZWFyKCkgfHwgIXF1YWQuYm91bmRpbmdCb3goKS5pc0V4cHJlc3NpYmxlQXNJbnRSZWN0
KCkpKTsKKyAgICAgICAgICAgIGJvb2wgdXNlQUEgPSBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMo
KSAmJiAhc2hhcmVkUXVhZFN0YXRlLT5pc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KCk7CiAKLSAg
ICBpZiAodXNlQUEpIHsKLSAgICAgICAgZGV2aWNlUmVjdC5pbmZsYXRlQW50aUFsaWFzaW5nRGlz
dGFuY2UoKTsKLSAgICAgICAgbGF5ZXJRdWFkLmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgp
OwotICAgIH0KKyAgICAgICAgICAgIGJvb2wgbGVmdEVkZ2VBQSA9ICFpICYmIHVzZUFBOworICAg
ICAgICAgICAgYm9vbCB0b3BFZGdlQUEgPSAhaiAmJiB1c2VBQTsKKyAgICAgICAgICAgIGJvb2wg
cmlnaHRFZGdlQUEgPSBpID09IG1fdGlsZXItPm51bVRpbGVzWCgpIC0gMSAmJiB1c2VBQTsKKyAg
ICAgICAgICAgIGJvb2wgYm90dG9tRWRnZUFBID0gaiA9PSBtX3RpbGVyLT5udW1UaWxlc1koKSAt
IDEgJiYgdXNlQUE7CiAKLSAgICBzd2l0Y2ggKG1fc2FtcGxlZFRleGVsRm9ybWF0KSB7Ci0gICAg
Y2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOgotICAgICAg
ICBpZiAodXNlQUEpIHsKLSAgICAgICAgICAgIGNvbnN0IFByb2dyYW1BQSogcHJvZ3JhbSA9IGxh
eWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbUFBKCk7Ci0gICAgICAgICAgICBkcmF3VGlsZXMobGF5
ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZp
Y2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCBwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkpIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBQcm9ncmFtT3BhcXVlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtT3Bh
cXVlKCk7Ci0gICAgICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVj
dCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBk
cmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBjb25zdCBQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGls
ZXJQcm9ncmFtKCk7Ci0gICAgICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxh
eWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJR
dWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2Ft
cGxlZFRleGVsRm9ybWF0QkdSQToKLSAgICAgICAgaWYgKHVzZUFBKSB7Ci0gICAgICAgICAgICBj
b25zdCBQcm9ncmFtU3dpenpsZUFBKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9n
cmFtU3dpenpsZUFBKCk7Ci0gICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5
ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1
YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJh
Z21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVk
Z2VMb2NhdGlvbigpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc05vbkNv
bXBvc2l0ZWRDb250ZW50KCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBQcm9ncmFtU3dpenps
ZU9wYXF1ZSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGVPcGFx
dWUoKTsKLSAgICAgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0
LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRy
YXdPcGFjaXR5KCksIHByb2dyYW0sIC0xLCAtMSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGNvbnN0IFByb2dyYW1Td2l6emxlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJl
ci0+dGlsZXJQcm9ncmFtU3dpenpsZSgpOwotICAgICAgICAgICAgICAgIGRyYXdUaWxlcyhsYXll
clJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmlj
ZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgLTEsIC0xKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IEdDM0RpbnQgdGV4dHVyZUZpbHRlciA9IG1fdGls
ZXItPmhhc0JvcmRlclRleGVscygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBo
aWNzQ29udGV4dDNEOjpORUFSRVNUOworICAgICAgICAgICAgcXVhZExpc3QuYXBwZW5kKENDVGls
ZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCB0aWxlUmVjdCwgdGlsZS0+dGV4dHVy
ZUlkKCksIHRleHR1cmVPZmZzZXQsIHRleHR1cmVTaXplLCB0ZXh0dXJlRmlsdGVyLCBjb250ZW50
c1N3aXp6bGVkKCksIGxlZnRFZGdlQUEsIHRvcEVkZ2VBQSwgcmlnaHRFZGdlQUEsIGJvdHRvbUVk
Z2VBQSkpOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIH0KIApAQCAtMTg5LDE5MCArMTc4LDYgQEAg
dm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpzeW5jVGV4dHVyZUlkKGludCBpLCBpbnQgaiwgUGxhdGZv
cm0zRE9iamVjdCB0ZXh0dXJlSWQpCiAgICAgdGlsZS0+c2V0VGV4dHVyZUlkKHRleHR1cmVJZCk7
CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3VGls
ZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2JhbFRyYW5zZm9ybSwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSwgY29uc3QgQ0NMYXll
clF1YWQmIGRldmljZVJlY3QsIGNvbnN0IENDTGF5ZXJRdWFkJiBjb250ZW50UXVhZCwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgaW50IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRp
b24sIGludCBlZGdlTG9jYXRpb24pCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQg
PSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVz
ZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAw
KSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkVHJhbnNm
b3JtID0gZGV2aWNlVHJhbnNmb3JtLmludmVyc2UoKTsKLQotICAgIGlmIChlZGdlTG9jYXRpb24g
IT0gLTEpIHsKLSAgICAgICAgZmxvYXQgZWRnZVsyNF07Ci0gICAgICAgIGNvbnRlbnRRdWFkLnRv
RmxvYXRBcnJheShlZGdlKTsKLSAgICAgICAgZGV2aWNlUmVjdC50b0Zsb2F0QXJyYXkoJmVkZ2Vb
MTJdKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0zZnYoZWRnZUxvY2F0
aW9uLCBlZGdlLCA4KSk7Ci0gICAgfQotCi0gICAgQ0NMYXllclF1YWQ6OkVkZ2UgcHJldkVkZ2VZ
ID0gY29udGVudFF1YWQudG9wKCk7Ci0KLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
OwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICBJbnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsZXIt
PmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwotICAgIGZsb2F0IHNpZ24gPSBG
bG9hdFF1YWQoY29udGVudFJlY3QpLmlzQ291bnRlcmNsb2Nrd2lzZSgpID8gLTEgOiAxOwotICAg
IGNvbnN0IEdDM0RpbnQgZmlsdGVyID0gbV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCkgPyBHcmFw
aGljc0NvbnRleHQzRDo6TElORUFSIDogR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1Q7Ci0gICAg
Zm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewotICAgICAgICBDQ0xheWVyUXVh
ZDo6RWRnZSBwcmV2RWRnZVggPSBjb250ZW50UXVhZC5sZWZ0KCk7Ci0KLSAgICAgICAgQ0NMYXll
clF1YWQ6OkVkZ2UgZWRnZVkgPSBjb250ZW50UXVhZC5ib3R0b20oKTsKLSAgICAgICAgaWYgKGog
PCAobV90aWxlci0+bnVtVGlsZXNZKCkgLSAxKSkgewotICAgICAgICAgICAgSW50UmVjdCB0aWxl
UmVjdCA9IHVuaW9uUmVjdChtX3RpbGVyLT50aWxlQm91bmRzKDAsIGopLCBtX3RpbGVyLT50aWxl
Qm91bmRzKG1fdGlsZXItPm51bVRpbGVzWCgpIC0gMSwgaikpOwotICAgICAgICAgICAgdGlsZVJl
Y3QuaW50ZXJzZWN0KGxheWVyUmVjdCk7Ci0KLSAgICAgICAgICAgIC8vIFNraXAgZW1wdHkgcm93
cy4KLSAgICAgICAgICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgIHRpbGVSZWN0ID0gbV90aWxlci0+bGF5ZXJSZWN0VG9D
b250ZW50UmVjdCh0aWxlUmVjdCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEodGlsZVJl
Y3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBwMih0
aWxlUmVjdC54KCksIHRpbGVSZWN0Lm1heFkoKSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBwb2lu
dHMgdG8gZGV2aWNlIHNwYWNlLgotICAgICAgICAgICAgcDEgPSBkZXZpY2VUcmFuc2Zvcm0ubWFw
UG9pbnQocDEpOwotICAgICAgICAgICAgcDIgPSBkZXZpY2VUcmFuc2Zvcm0ubWFwUG9pbnQocDIp
OwotCi0gICAgICAgICAgICAvLyBDb21wdXRlIGhvcml6b250YWwgZWRnZS4KLSAgICAgICAgICAg
IGVkZ2VZID0gQ0NMYXllclF1YWQ6OkVkZ2UocDEsIHAyKTsKLSAgICAgICAgICAgIGVkZ2VZLnNj
YWxlKHNpZ24pOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0g
cmlnaHQ7ICsraSkgewotICAgICAgICAgICAgRHJhd2FibGVUaWxlKiB0aWxlID0gdGlsZUF0KGks
IGopOwotCi0gICAgICAgICAgICAvLyBEb24ndCB1c2UgdGlsZUNvbnRlbnRSZWN0IGhlcmUsIGFz
IHRoYXQgY29udGFpbnMgdGhlIGZ1bGwKLSAgICAgICAgICAgIC8vIHJlY3Qgd2l0aCBib3JkZXIg
dGV4ZWxzIHdoaWNoIHNob3VsZG4ndCBiZSBkcmF3bi4KLSAgICAgICAgICAgIEludFJlY3QgdGls
ZVJlY3QgPSBtX3RpbGVyLT50aWxlQm91bmRzKGksIGopOwotICAgICAgICAgICAgSW50UmVjdCBk
aXNwbGF5UmVjdCA9IHRpbGVSZWN0OwotICAgICAgICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KGxh
eWVyUmVjdCk7Ci0KLSAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgaG93IHRoZSB0b3AgbGVm
dCBoYXMgbW92ZWQsIHNvIHRoZSB0ZXh0dXJlIGNhbiBiZQotICAgICAgICAgICAgLy8gb2Zmc2V0
IHRoZSBzYW1lIGFtb3VudC4KLSAgICAgICAgICAgIEludFNpemUgZGlzcGxheU9mZnNldCA9IHRp
bGVSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBkaXNwbGF5UmVjdC5taW5YTWluWUNvcm5lcigpOwot
Ci0gICAgICAgICAgICAvLyBTa2lwIGVtcHR5IHRpbGVzLgotICAgICAgICAgICAgaWYgKHRpbGVS
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
dGlsZVJlY3QgPSBtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGVSZWN0KTsKLQot
ICAgICAgICAgICAgRmxvYXRSZWN0IGNsYW1wUmVjdCh0aWxlUmVjdCk7Ci0gICAgICAgICAgICAv
LyBDbGFtcCB0ZXh0dXJlIGNvb3JkaW5hdGVzIHRvIGF2b2lkIHNhbXBsaW5nIG91dHNpZGUgdGhl
IGxheWVyCi0gICAgICAgICAgICAvLyBieSBkZWZsYXRpbmcgdGhlIHRpbGUgcmVnaW9uIGhhbGYg
YSB0ZXhlbCBvciBoYWxmIGEgdGV4ZWwKLSAgICAgICAgICAgIC8vIG1pbnVzIGVwc2lsb24gZm9y
IG9uZSBwaXhlbCBsYXllcnMuIFRoZSByZXN1bHRpbmcgY2xhbXAgcmVnaW9uCi0gICAgICAgICAg
ICAvLyBpcyBtYXBwZWQgdG8gdGhlIHVuaXQgc3F1YXJlIGJ5IHRoZSB2ZXJ0ZXggc2hhZGVyIGFu
ZCBtYXBwZWQKLSAgICAgICAgICAgIC8vIGJhY2sgdG8gbm9ybWFsaXplZCB0ZXh0dXJlIGNvb3Jk
aW5hdGVzIGJ5IHRoZSBmcmFnbWVudCBzaGFkZXIKLSAgICAgICAgICAgIC8vIGFmdGVyIGJlaW5n
IGNsYW1wZWQgdG8gMC0xIHJhbmdlLgotICAgICAgICAgICAgY29uc3QgZmxvYXQgZXBzaWxvbiA9
IDEgLyAxMDI0LjBmOwotICAgICAgICAgICAgZmxvYXQgY2xhbXBYID0gbWluKDAuNSwgY2xhbXBS
ZWN0LndpZHRoKCkgLyAyLjAgLSBlcHNpbG9uKTsKLSAgICAgICAgICAgIGZsb2F0IGNsYW1wWSA9
IG1pbigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAvIDIuMCAtIGVwc2lsb24pOwotICAgICAgICAg
ICAgY2xhbXBSZWN0LmluZmxhdGVYKC1jbGFtcFgpOwotICAgICAgICAgICAgY2xhbXBSZWN0Lmlu
ZmxhdGVZKC1jbGFtcFkpOwotICAgICAgICAgICAgRmxvYXRTaXplIGNsYW1wT2Zmc2V0ID0gY2xh
bXBSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBGbG9hdFJlY3QodGlsZVJlY3QpLm1pblhNaW5ZQ29y
bmVyKCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdGV4T2Zmc2V0ID0gbV90aWxlci0+dGV4
dHVyZU9mZnNldChpLCBqKSArIGNsYW1wT2Zmc2V0ICsgRmxvYXRTaXplKGRpc3BsYXlPZmZzZXQp
OwotICAgICAgICAgICAgZmxvYXQgdGlsZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGls
ZXItPnRpbGVTaXplKCkud2lkdGgoKSk7Ci0gICAgICAgICAgICBmbG9hdCB0aWxlSGVpZ2h0ID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZXItPnRpbGVTaXplKCkuaGVpZ2h0KCkpOwotCi0gICAg
ICAgICAgICAvLyBNYXAgY2xhbXBpbmcgcmVjdGFuZ2xlIHRvIHVuaXQgc3F1YXJlLgotICAgICAg
ICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWCA9IC1jbGFtcFJlY3QueCgpIC8gY2xhbXBS
ZWN0LndpZHRoKCk7Ci0gICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhUcmFuc2xhdGVZID0gLWNs
YW1wUmVjdC55KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBmbG9hdCB2ZXJ0
ZXhUZXhTY2FsZVggPSB0aWxlUmVjdC53aWR0aCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7Ci0gICAg
ICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVkgPSB0aWxlUmVjdC5oZWlnaHQoKSAvIGNsYW1w
UmVjdC5oZWlnaHQoKTsKLQotICAgICAgICAgICAgLy8gTWFwIHRvIG5vcm1hbGl6ZWQgdGV4dHVy
ZSBjb29yZGluYXRlcy4KLSAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4VHJhbnNsYXRlWCA9
IHRleE9mZnNldC54KCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRl
eFRyYW5zbGF0ZVkgPSB0ZXhPZmZzZXQueSgpIC8gdGlsZUhlaWdodDsKLSAgICAgICAgICAgIGZs
b2F0IGZyYWdtZW50VGV4U2NhbGVYID0gY2xhbXBSZWN0LndpZHRoKCkgLyB0aWxlV2lkdGg7Ci0g
ICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWSA9IGNsYW1wUmVjdC5oZWlnaHQoKSAv
IHRpbGVIZWlnaHQ7Ci0KLSAgICAgICAgICAgIC8vIE9wZW5HTCBjb29yZGluYXRlIHN5c3RlbSBp
cyBib3R0b20tdXAuCi0gICAgICAgICAgICAvLyBJZiB0aWxlIHRleHR1cmUgaXMgdG9wLWRvd24s
IHdlIG5lZWQgdG8gZmxpcCB0aGUgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAgICAgICAgICAgIGlm
IChtX3RleHR1cmVPcmllbnRhdGlvbiA9PSBMYXllclRleHR1cmVVcGRhdGVyOjpUb3BEb3duT3Jp
ZW50YXRpb24pIHsKLSAgICAgICAgICAgICAgICBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSAxLjAg
LSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnRUZXhTY2Fs
ZVkgKj0gLTEuMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ0NMYXllclF1YWQ6OkVk
Z2UgZWRnZVggPSBjb250ZW50UXVhZC5yaWdodCgpOwotICAgICAgICAgICAgaWYgKGkgPCAobV90
aWxlci0+bnVtVGlsZXNYKCkgLSAxKSkgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEo
dGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkpOwotICAgICAgICAgICAgICAgIEZsb2F0UG9p
bnQgcDIodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOwotCi0gICAgICAgICAgICAg
ICAgLy8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCi0gICAgICAgICAgICAgICAgcDEgPSBk
ZXZpY2VUcmFuc2Zvcm0ubWFwUG9pbnQocDEpOwotICAgICAgICAgICAgICAgIHAyID0gZGV2aWNl
VHJhbnNmb3JtLm1hcFBvaW50KHAyKTsKLQotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdmVy
dGljYWwgZWRnZS4KLSAgICAgICAgICAgICAgICBlZGdlWCA9IENDTGF5ZXJRdWFkOjpFZGdlKHAx
LCBwMik7Ci0gICAgICAgICAgICAgICAgZWRnZVguc2NhbGUoc2lnbik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3BhY2UgcXVhZC4KLSAgICAgICAgICAg
IENDTGF5ZXJRdWFkIGRldmljZVF1YWQocHJldkVkZ2VYLCBwcmV2RWRnZVksIGVkZ2VYLCBlZGdl
WSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBxdWFkIHRvIGxheWVyIHNwYWNlLgotICAgICAgICAg
ICAgRmxvYXRRdWFkIHF1YWQgPSBxdWFkVHJhbnNmb3JtLm1hcFF1YWQoZGV2aWNlUXVhZC5mbG9h
dFF1YWQoKSk7Ci0KLSAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxlUmVjdC4KLSAgICAg
ICAgICAgIHF1YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCksIDEuMGYgLyB0aWxlUmVj
dC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIGlmIChmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0
aW9uID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJh
bnNmb3JtIHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbwotICAgICAgICAgICAgICAgIC8vIHRo
aXMgd2hpbGUgc3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVzdWx0cyBhcwotICAgICAgICAgICAg
ICAgIC8vIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gc2hvdWxkIGFsd2F5cyBiZSBub24t
bmVnYXRpdmUKLSAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0cmFuc2Zvcm1lZCBp
biBhIHdheSB0aGF0IGNvdWxkIHJlc3VsdCBpbgotICAgICAgICAgICAgICAgIC8vIHNhbXBsaW5n
IG91dHNpZGUgdGhlIGxheWVyLgotICAgICAgICAgICAgICAgIHZlcnRleFRleFNjYWxlWCAqPSBm
cmFnbWVudFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJh
Z21lbnRUZXhTY2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWCAqPSBm
cmFnbWVudFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICo9
IGZyYWdtZW50VGV4U2NhbGVZOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVgg
Kz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5z
bGF0ZVkgKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00ZihmcmFnbWVudFRleFRy
YW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNs
YXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7Ci0KLSAgICAgICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVy
KCkudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4VGV4VHJhbnNsYXRlWCwgdmVy
dGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhTY2FsZVkpKTsKLQot
ICAgICAgICAgICAgaWYgKHRpbGUgJiYgdGlsZS0+dGV4dHVyZUlkKCkpIHsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
dGlsZS0+dGV4dHVyZUlkKCkpOwotICAgICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKLSAgICAgICAgICAgICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVyKSk7
Ci0KLSAgICAgICAgICAgICAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGdsb2Jh
bFRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCBvcGFjaXR5LCBxdWFkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFM
b2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsZVRyYW5z
Zm9ybSA9IGdsb2JhbFRyYW5zZm9ybTsKLSAgICAgICAgICAgICAgICB0aWxlVHJhbnNmb3JtLnRy
YW5zbGF0ZSh0aWxlUmVjdC54KCkgKyB0aWxlUmVjdC53aWR0aCgpIC8gMi4wLCB0aWxlUmVjdC55
KCkgKyB0aWxlUmVjdC5oZWlnaHQoKSAvIDIuMCk7Ci0KLSAgICAgICAgICAgICAgICBjb25zdCBM
YXllckNocm9taXVtOjpCb3JkZXJQcm9ncmFtKiBzb2xpZENvbG9yUHJvZ3JhbSA9IGxheWVyUmVu
ZGVyZXItPmJvcmRlclByb2dyYW0oKTsKLSAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dXNlUHJvZ3JhbShzb2xpZENvbG9yUHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0KLSAgICAg
ICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHNvbGlkQ29sb3JQcm9n
cmFtLT5mcmFnbWVudFNoYWRlcigpLmNvbG9yTG9jYXRpb24oKSwgYmFja2dyb3VuZENvbG9yKCku
cmVkKCksIGJhY2tncm91bmRDb2xvcigpLmdyZWVuKCksIGJhY2tncm91bmRDb2xvcigpLmJsdWUo
KSwgYmFja2dyb3VuZENvbG9yKCkuYWxwaGEoKSkpOwotCi0gICAgICAgICAgICAgICAgbGF5ZXJS
ZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZCh0aWxlVHJhbnNmb3JtLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJl
Y3QuaGVpZ2h0KCksIG9wYWNpdHksIHF1YWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzb2xpZENvbG9yUHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0
cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0xLCAtMSk7Ci0KLSAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcHJldkVkZ2VYID0gZWRnZVg7Ci0gICAgICAgICAgICAvLyBSZXZlcnNlIGRpcmVjdGlv
bi4KLSAgICAgICAgICAgIHByZXZFZGdlWC5zY2FsZSgtMSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBwcmV2RWRnZVkgPSBlZGdlWTsKLSAgICAgICAgLy8gUmV2ZXJzZSBkaXJlY3Rpb24uCi0gICAg
ICAgIHByZXZFZGdlWS5zY2FsZSgtMSk7Ci0gICAgfQotfQotCiB9CiAKICNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKaW5k
ZXggMTAwM2RiY2I1NjY2ODhjNTJjZDQyMWFiMDFmZDFiNjJmMTNhNzcwYS4uZTZmNmM4ZTJkMTE1
ZGM1MGUzN2JjYjYwMzZhYzY5MzdmM2ZlNmE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllcklt
cGwuaApAQCAtNDMsMTcgKzQzLDIwIEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+Q0NU
aWxlZExheWVySW1wbCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZExpc3QmLCBjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSopOworCiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1Rl
eHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcExh
eWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKICAgICB2b2lk
IHNldFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBzRHJhdyA9IHNraXBzRHJhdzsg
fQogICAgIHZvaWQgc2V0VGV4dHVyZU9yaWVudGF0aW9uKExheWVyVGV4dHVyZVVwZGF0ZXI6Ok9y
aWVudGF0aW9uIHRleHR1cmVPcmllbnRhdGlvbikgeyBtX3RleHR1cmVPcmllbnRhdGlvbiA9IHRl
eHR1cmVPcmllbnRhdGlvbjsgfQotICAgIHZvaWQgc2V0U2FtcGxlZFRleGVsRm9ybWF0KExheWVy
VGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQpIHsg
bV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSBzYW1wbGVkVGV4ZWxGb3JtYXQ7IH0KICAgICB2b2lkIHNl
dFRpbGluZ0RhdGEoY29uc3QgQ0NMYXllclRpbGluZ0RhdGEmIHRpbGVyKTsKICAgICB2b2lkIHN5
bmNUZXh0dXJlSWQoaW50LCBpbnQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKTsKIAorICAg
IHZvaWQgc2V0Q29udGVudHNTd2l6emxlZChib29sIGNvbnRlbnRzU3dpenpsZWQpIHsgbV9jb250
ZW50c1N3aXp6bGVkID0gY29udGVudHNTd2l6emxlZDsgfQorICAgIGJvb2wgY29udGVudHNTd2l6
emxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTd2l6emxlZDsgfQorCiAgICAgdHlwZWRl
ZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhB
bHBoYT4gUHJvZ3JhbTsKICAgICAvLyBTaGFkZXIgcHJvZ3JhbSB0aGF0IHN3YXBzIHJlZCBhbmQg
Ymx1ZSBjb21wb25lbnRzIG9mIHRleHR1cmUuCiAgICAgLy8gVXNlZCB3aGVuIHRleHR1cmUgZm9y
bWF0IGRvZXMgbm90IG1hdGNoIG5hdGl2ZSBjb2xvciBmb3JtYXQuCkBAIC03MiwyNSArNzUsMTgg
QEAgcHJvdGVjdGVkOgogICAgIC8vIEV4cG9zZWQgZm9yIHRlc3RpbmcuCiAgICAgYm9vbCBoYXNU
aWxlQXQoaW50LCBpbnQpIGNvbnN0OwogCisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBxdWFkVHJhbnNmb3JtKCkgY29uc3Q7CisKIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNvbnRlbnRMYXllciI7
IH0KIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0Owot
Ci0gICAgLy8gRHJhdyBhbGwgdGlsZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGUgY29udGVudCBy
ZWN0LgotICAgIHZvaWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5
KTsKLQogICAgIERyYXdhYmxlVGlsZSogdGlsZUF0KGludCwgaW50KSBjb25zdDsKICAgICBEcmF3
YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50LCBpbnQpOwogCi0gICAgLy8gRHJhdyBhbGwgdGlsZXMg
dGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdC4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4K
LSAgICB2b2lkIGRyYXdUaWxlcyhMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2JhbFRyYW5zZm9y
bSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSwgY29uc3QgQ0NM
YXllclF1YWQmIGRldmljZVJlY3QsIGNvbnN0IENDTGF5ZXJRdWFkJiBjb250ZW50UXVhZCwgZmxv
YXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgaW50IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9j
YXRpb24sIGludCBlZGdlTG9jYXRpb24pOwotCiAgICAgYm9vbCBtX3NraXBzRHJhdzsKKyAgICBi
b29sIG1fY29udGVudHNTd2l6emxlZDsKICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpPcmllbnRh
dGlvbiBtX3RleHR1cmVPcmllbnRhdGlvbjsKLSAgICBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1w
bGVkVGV4ZWxGb3JtYXQgbV9zYW1wbGVkVGV4ZWxGb3JtYXQ7CiAKICAgICBPd25QdHI8Q0NMYXll
clRpbGluZ0RhdGE+IG1fdGlsZXI7CiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJhZWNmZmNlNjU3OWM1YWYwNGYzNjAw
NmZjOTNkY2I5MGMyYzY4MDIuLjQ5NGQ2ZmY0ZDQwZmQ4ODQyZTU1YTc1MTY4Y2ZmYzU3MDI5NmEw
OWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMi0wOSAgQWRyaWVubmUgV2Fsa2VyICA8
ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgdGlsZSBkcmF3
aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTczMDU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFyayB0aHJlZSB0ZXN0cyBhcyBmYWlsaW5nIHdpdGggc21hbGwg
cGl4ZWwgZGlmZmVyZW5jZXMuIFRoZXNlIGp1c3QKKyAgICAgICAgbmVlZCByZWJhc2VsaW5pbmcu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisK
IDIwMTEtMTItMTIgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBbUXRdIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLiBBZGQgUXQ1IHNwZWNpZmljIGV4cGVjdGVk
IHJlc3VsdHMgYWZ0ZXIgcjEwMjM4OC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCBhMmJlM2Q4MWU4NDVhODMwZTliYmU2
ZTI2M2RlOTA0ZGVlODNjY2Y5Li45YzdlNjljOGRhNjZkY2FhMmJiYTY4OGViNWYxY2RhNDlkMTlk
ZTdjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVj
dGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBl
Y3RhdGlvbnMudHh0CkBAIC0zODQ1LDYgKzM4NDUsMTEgQEAgQlVHV0s3MzkwNSBHUFUgTElOVVgg
OiBtZWRpYS92aWRlby10cmFuc2Zvcm1lZC5odG1sID0gSU1BR0UKIEJVR1dLNzM5MDUgR1BVIExJ
TlVYIDogbWVkaWEvdmlkZW8tem9vbS1jb250cm9scy5odG1sID0gSU1BR0UKIEJVR1dLNzM5MDUg
R1BVIFdJTiA6IG1lZGlhL3ZpZGVvLWxheWVyLWNyYXNoLmh0bWwgPSBURVhUCiAKKy8vIE5lZWQg
cmViYXNlbGluZSBvbiBhbGwgcGxhdGZvcm1zCitCVUdFTk5FIDogY29tcG9zaXRpbmcvY29sb3It
bWF0Y2hpbmcvaW1hZ2UtY29sb3ItbWF0Y2hpbmcuaHRtbCA9IEZBSUwKK0JVR0VOTkUgOiBjb21w
b3NpdGluZy9nZW9tZXRyeS92ZXJ0aWNhbC1zY3JvbGwtY29tcG9zaXRlZC5odG1sID0gRkFJTAor
QlVHRU5ORSA6IGNvbXBvc2l0aW5nL3NjYWxpbmcvdGlsZWQtbGF5ZXItcmVjdXJzaW9uLmh0bWwg
PSBGQUlMCisKIEJVR1dLNzM5MzMgREVCVUcgOiBzdmcvVzNDLVNWRy0xLjEtU0Uvc3RydWN0LWRv
bS0xMS1mLnN2ZyA9IFRJTUVPVVQgUEFTUwogCiBCVUdXSzczOTkxIFdJTjcgVklTVEEgUkVMRUFT
RSA6IGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2NvbXBsZXgtY2hhcmFjdGVyLWJhc2VkLWZhbGxi
YWNrLmh0bWwgPSBJTUFHRStURVhUCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119118</attachid>
            <date>2011-12-13 17:19:48 -0800</date>
            <delta_ts>2011-12-14 14:51:26 -0800</delta_ts>
            <desc>Fix ToT merge conflicts</desc>
            <filename>bug-73059-20111213171947.patch</filename>
            <type>text/plain</type>
            <size>122604</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTFiODU5MGU2MDQ0NGZi
NzNjNGFkZDFjNjFkZmUzNWU3ZjBkNTkyYS4uNzk2NWIzNmIxODYxNDBhOWU2NTViODI4N2Q5NGZl
NDZlNTEyODlhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAorMjAxMS0xMi0xMyAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVm
YWN0b3IgdGlsZSBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDU5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFydGlhbGx5IHRlc3RlZCBieSBjb21w
b3NpdG9yIGxheW91dCB0ZXN0cy4gRGVidWcgYm9yZGVycyBhbmQKKyAgICAgICAgY2hlY2tlcmJv
YXJkaW5nIHRlc3RlZCBtYW51YWxseS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXJ0
IG9mIGEgbW92ZSB0b3dhcmRzIHJlbmRlcmluZyBxdWFkcyBvbiBzY3JlZW4KKyAgICAgICAgZnJv
bSBhIGJhZyBvZiBkYXRhIHJhdGhlciB0aGFuIGluIHZpcnR1YWwgQ0NMYXllckltcGw6OmRyYXcg
ZnVuY3Rpb25zLgorCisgICAgICAgIENDRHJhd1F1YWQtZGVyaXZlZCBjbGFzc2VzIHN0b3JlIG1h
dGVyaWFsLXNwZWNpZmljIHBpZWNlcyBvZiBkYXRhIHRvCisgICAgICAgIHVzZSB3aGVuIHJlbmRl
cmluZy4gQ0NMYXllckltcGwgY2xhc3NlcyBub3cgY3JlYXRlIHRoZXNlIENDRHJhd1F1YWQKKyAg
ICAgICAgb2JqZWN0cyByYXRoZXIgdGhhbiBpc3N1aW5nIGRpcmVjdCBHTCBjb21tYW5kcy4gV2hl
cmUgdGhpcyBkYXRhIGlzCisgICAgICAgIHNoYXJlZCBiZXR3ZWVuIHF1YWRzIHRoYXQgY29tZSBm
cm9tIHRoZSBzYW1lIGxheWVyLCB0aGF0IGRhdGEgaXMKKyAgICAgICAgc3RvcmVkIGluIGEgQ0NT
aGFyZWRRdWFkU3RhdGUgb2JqZWN0IHJhdGhlciB0aGFuIGR1cGxpY2F0ZWQuCisKKyAgICAgICAg
Q0NSZW5kZXJQYXNzIGlzIHRoZSBjbGFzcyB0aGF0IGhvbGRzIHRoZSBsaXN0IG9mIHF1YWRzIGFu
ZCB0aGUgdGFyZ2V0CisgICAgICAgIHN1cmZhY2UgdGhhdCB0aGV5IGRyYXcgaW50by4gRHJhd2lu
ZyBhIGZyYW1lIGNvbnNpc3RzIG9mIGRyYXdpbmcgYQorICAgICAgICBzZXJpZXMgb2YgcmVuZGVy
IHBhc3NlcyBvbnRvIHRoZWlyIHJlc3BlY3RpdmUgc3VyZmFjZXMuCisKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0SW1wbCBjb25zdHJ1Y3RzIHRoZXNlIHJlbmRlciBwYXNzZXMgZnJvbSB0aGUgb3V0
cHV0IG9mCisgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSBieSBh
c2tpbmcgZWFjaCBsYXllciB0byBpbnNlcnQKKyAgICAgICAgcXVhZHMgaW50byBhIGxpc3QgYW5k
IGhhbmRzIHRoZW0gb2ZmIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bSBmb3IKKyAgICAgICAgcmVu
ZGVyaW5nLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclN1cmZhY2VRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29s
b3JRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnRpbGVVbmlmb3JtTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZFRpbGVQcm9ncmFtVW5pZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Q3VzdG9tTGF5ZXJRdWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRU
aWxlQmluZGluZ0Jhc2U6OmFscGhhTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21l
bnRUaWxlQmluZGluZ0Jhc2U6OmVkZ2VMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFn
bWVudFRpbGVCaW5kaW5nQmFzZTo6ZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFnbWVudFRpbGVCaW5kaW5nQmFzZTo6c2FtcGxlckxvY2F0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGll
c1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxh
eWVyRHJhd1F1YWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDQ3VzdG9tTGF5ZXJE
cmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQ3VzdG9tTGF5ZXJEcmF3UXVh
ZDo6Q0NDdXN0b21MYXllckRyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0N1c3RvbUxheWVyRHJhd1F1YWQ6OmxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6Q0NEZWJ1Z0JvcmRlckRyYXdRdWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJh
d1F1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6
OmNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGVidWdCb3JkZXJEcmF3UXVhZDo6d2lkdGgp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJR
dWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjpDQ0RyYXdRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6OnRvRGVidWdCb3JkZXJEcmF3UXVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b1NvbGlkQ29sb3JEcmF3UXVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b1RpbGVEcmF3UXVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b0N1c3RvbUxheWVyRHJhd1F1YWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJRdWFkLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RyYXdRdWFkOjpxdWFkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdR
dWFkOjpsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjpsYXll
clJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6Y2xpcFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Ry
YXdRdWFkOjpkcmF3c09wYXF1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEcmF3UXVhZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVh
ZDo6Q0NEcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b0RlYnVnQm9y
ZGVyRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9SZW5kZXJTdXJm
YWNlRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9Tb2xpZENvbG9y
RHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9UaWxlRHJhd1F1YWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9DdXN0b21MYXllckRyYXdRdWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6cXVhZFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NEcmF3UXVhZDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0RyYXdRdWFkOjpsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFk
OjpsYXllclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6Y2xpcFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0RyYXdRdWFkOjpkcmF3c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFk
Ojppc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1
YWQ6Om1hdGVyaWFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2hhcmVkUXVh
ZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6YXBwZW5kRGVidWdCb3JkZXJRdWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dHJhY2tEYW1hZ2VGb3JBbGxTdXJm
YWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2NyZWVuU3BhY2VUcmFuc2Zvcm1Gb3JT
dXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0
ZVJlbmRlclBhc3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpk
cmF3TGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBh
c3M6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OkNDUmVuZGVyUGFz
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNz
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpxdWFkTGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OnRhcmdldFN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpzZXRTdXJmYWNlRGFtYWdlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclBhc3M6OnN1cmZhY2VEYW1hZ2VSZWN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZURyYXdRdWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQ6OmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3Vy
ZmFjZURyYXdRdWFkOjpzdXJmYWNlRGFtYWdlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaGFyZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2hhcmVkUXVhZFN0YXRlOjppc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpxdWFkVHJhbnNmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpsYXllclRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6bGF5ZXJSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpjbGlwUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NoYXJlZFF1YWRTdGF0ZTo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJl
ZFF1YWRTdGF0ZTo6aXNPcGFxdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU29s
aWRDb2xvckRyYXdRdWFkOjpDQ1NvbGlkQ29sb3JEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6Y29sb3IpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGlsZURyYXdRdWFkOjpDQ1RpbGVEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGlsZURyYXdRdWFkOjp0ZXh0dXJlT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGls
ZURyYXdRdWFkOjp0ZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVh
ZDo6dGV4dHVyZUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6c3dp
enpsZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdRdWFkOjpsZWZ0RWRn
ZUFBKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdRdWFkOjp0b3BFZGdlQUEpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaWxlRHJhd1F1YWQ6OnJpZ2h0RWRnZUFBKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGlsZURyYXdRdWFkOjpib3R0b21FZGdlQUEpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaWxlRHJhd1F1YWQ6OmlzQW50aWFsaWFzZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RpbGVkTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGls
ZWRMYXllckltcGw6OmFwcGVuZFF1YWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVk
TGF5ZXJJbXBsOjpzZXRDb250ZW50c1N3aXp6bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGls
ZWRMYXllckltcGw6OmNvbnRlbnRzU3dpenpsZWQpOgorCiAyMDExLTEyLTEzICBSb2JpbiBEdW5u
ICA8cm9iaW5AYWxsZHVubi5jb20+CiAKICAgICAgICAgRG9uJ3QgbWFrZSB0aGUgYml0bWFwIHRy
YW5zcGFyZW50IHdoZW4gdXNpbmcgdGhlbWUgZHJhd2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGU2
NThlOGI2NGI0NDIxYTc3NDY0ZjY3OTFlNGE5Zjk3M2YwOWQ1MTguLmM1MmNlMTVhNGJmNzE1YTAz
NDkxMDBjNGY0NWRhYjFlMWVlZDFkOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1OTUsMTAgKzM1
OTUsMTYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NDYW52YXNMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1
YWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1h
Z2VUcmFja2VyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NEYW1hZ2VUcmFja2VyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291
cmNlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
ZWxheUJhc2VkVGltZVNvdXJjZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlz
cGxheS5jcHAnLApAQCAtMzYyNCwxNyArMzYzMCwyNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2Uu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlci5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVN
YWNoaW5lLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVy
ZVVwZGF0ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaWxlRHJhd1F1YWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGEwNjI5NDE0ZGNlMzUwNWJmODk1Yjg4OTMzNTIwOTY4
NDFiYjU4NmMuLmNlZmMyODNiYzBiZmVmYjFjYzIwMWM2NzYwNjc5NzM3MjE2M2VkNzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNTIsNyArNTIsMTMgQEAKICNp
bmNsdWRlICJUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJUcmVlU3luY2hy
b25pemVyLmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2Mv
Q0NDdXN0b21MYXllckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgi
CisjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NS
ZW5kZXJQYXNzLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKyNp
bmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGlsZURy
YXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCkBAIC0xMDcsMjEg
KzExMyw2IEBAIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5NYXRyaXgoaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJuIHNjcmVlbjsKIH0KIAot
c3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbXB1dGVTY3JlZW5TcGFjZVRyYW5zZm9ybUZv
clN1cmZhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllcikKLXsKLSAgICAvLyBUaGUg
bGF5ZXIncyBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtIGNhbiBiZSB3cml0dGVuIGFzOgotICAgIC8v
ICAgbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9y
bSAqIGxheWVyT3JpZ2luVHJhbnNmb3JtCi0gICAgLy8gU28sIHRvIGNvbXB1dGUgdGhlIHN1cmZh
Y2Ugc2NyZWVuIHNwYWNlLCB3ZSBjYW4gZG86Ci0gICAgLy8gICBzdXJmYWNlU2NyZWVuU3BhY2VU
cmFuc2Zvcm0gPSBsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtICogaW52ZXJzZShsYXllck9yaWdp
blRyYW5zZm9ybSkKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNm
b3JtID0gcmVuZGVyU3VyZmFjZUxheWVyLT5kcmF3VHJhbnNmb3JtKCk7Ci0gICAgbGF5ZXJPcmln
aW5UcmFuc2Zvcm0udHJhbnNsYXRlKC0wLjUgKiByZW5kZXJTdXJmYWNlTGF5ZXItPmJvdW5kcygp
LndpZHRoKCksIC0wLjUgKiByZW5kZXJTdXJmYWNlTGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsK
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBy
ZW5kZXJTdXJmYWNlTGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7Ci0gICAgc3VyZmFjZVNj
cmVlblNwYWNlVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyT3JpZ2luVHJhbnNmb3JtLmludmVyc2Uo
KSk7Ci0KLSAgICByZXR1cm4gc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtOwotfQotCiAjaWYg
VVNFKFNLSUEpCiBib29sIGNvbnRleHRTdXBwb3J0c0FjY2VsZXJhdGVkUGFpbnRpbmcoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCiB7CkBAIC0zMTksNTIgKzMxMCw3IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQogICAgIG1fY3VycmVudFJlbmRlclN1
cmZhY2UgPSAwOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygp
Ci17Ci0gICAgLy8gRklYTUU6IHVzZSB0aGUgZnJhbWUgYmVnaW4gdGltZSBmcm9tIHRoZSBvdmVy
YWxsIGNvbXBvc2l0b3Igc2NoZWR1bGVyLgotICAgIC8vIFRoaXMgdmFsdWUgaXMgY3VycmVudGx5
IGluYWNjZXNzaWJsZSBiZWNhdXNlIGl0IGlzIHVwIGluIENocm9taXVtJ3MKLSAgICAvLyBSZW5k
ZXJXaWRnZXQuCi0gICAgbV9oZWFkc1VwRGlzcGxheS0+b25GcmFtZUJlZ2luKGN1cnJlbnRUaW1l
KCkpOwotCi0gICAgaWYgKCFyb290TGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6
ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+
Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7Ci0gICAgc2l6ZV90IG1heExpbWl0ID0gVGV4dHVyZU1h
bmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKLSAgICBzaXplX3QgcmVjbGFp
bUxpbWl0ID0gVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgp
KTsKLQotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1p
dEJ5dGVzKG1heExpbWl0IC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7Ci0KLSAgICBkcmF3TGF5
ZXJzSW50ZXJuYWwoKTsKLQotICAgIGlmIChyZWNsYWltTGltaXQgPiBjb250ZW50c01lbW9yeVVz
ZUJ5dGVzKQotICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0UHJlZmVy
cmVkTWVtb3J5TGltaXRCeXRlcyhyZWNsYWltTGltaXQgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVz
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRQ
cmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKDApOwotCi0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxs
b2NhdG9yLmdldCgpKTsKLQotICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbikK
LSAgICAgICAgY29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwq
IHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KQotewotICAgIC8vIEZvciBub3csIHdlIHVzZSBkYW1hZ2UgdHJhY2tpbmcgdG8gY29tcHV0ZSBh
IGdsb2JhbCBzY2lzc29yLiBUbyBkbyB0aGlzLCB3ZSBtdXN0Ci0gICAgLy8gY29tcHV0ZSBhbGwg
ZGFtYWdlIHRyYWNraW5nIGJlZm9yZSBkcmF3aW5nIGFueXRoaW5nLCBzbyB0aGF0IHdlIGtub3cg
dGhlIHJvb3QKLSAgICAvLyBkYW1hZ2UgcmVjdC4gVGhlIHJvb3QgZGFtYWdlIHJlY3QgaXMgdGhl
biB1c2VkIHRvIHNjaXNzb3IgZWFjaCBzdXJmYWNlLgotCi0gICAgQVNTRVJUKG1fY2FwYWJpbGl0
aWVzLnVzaW5nUGFydGlhbFN3YXApOwotCi0gICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3Vy
ZmFjZUluZGV4KSB7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Ci0gICAgICAgIENDUmVu
ZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3Vy
ZmFjZSgpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7Ci0gICAgICAgIHJlbmRlclN1
cmZhY2UtPmRhbWFnZVRyYWNrZXIoKS0+dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZShyZW5k
ZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpLCByZW5kZXJT
dXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjbGVhclN1cmZhY2VGb3JEZWJ1ZyhDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFj
ZUxheWVyLCBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJm
YWNlRGFtYWdlUmVjdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclN1cmZhY2VG
b3JEZWJ1ZyhDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UsIENDUmVuZGVyU3VyZmFjZSog
cm9vdFJlbmRlclN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCiB7
CiAgICAgLy8gTm9uLXJvb3QgbGF5ZXJzIHNob3VsZCBjbGVhciB0aGVpciBlbnRpcmUgY29udGVu
dHMgdG8gdHJhbnNwYXJlbnQuIFRoZSByb290IGxheWVyCiAgICAgLy8gaXMgY2xlYXJlZCB0byBi
bHVlIHRvIGVhc2lseSBzZWUgcmVnaW9ucyB0aGF0IHdlcmUgbm90IGRyYXduIG9uIHRoZSBzY3Jl
ZW4uIElmIHdlCkBAIC0zNzIsNyArMzE4LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNsZWFyU3VyZmFjZUZvckRlYnVnKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIKICAg
ICAvLyBjbGVhciB0aGUgZGFtYWdlZCByZWdpb24sIHNvIHRoYXQgd2UgZG9uJ3QgYWNjaWRlbnRh
bGx5IGNsZWFyIHVuLWNoYW5nZWQgcG9ydGlvbnMKICAgICAvLyBvZiB0aGUgc2NyZWVuLgogCi0g
ICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSByb290RHJhd0xheWVyKQorICAgIGlmIChyZW5k
ZXJTdXJmYWNlICE9IHJvb3RSZW5kZXJTdXJmYWNlKQogICAgICAgICBHTEMobV9jb250ZXh0Lmdl
dCgpLCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOwogICAgIGVsc2UKICAgICAg
ICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDEsIDEp
KTsKQEAgLTM4Niw1NiArMzMyLDE5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVh
clN1cmZhY2VGb3JEZWJ1ZyhDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyCiAgICAgR0xD
KG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVCkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
c09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6YmVnaW5EcmF3aW5nRnJhbWUoKQogewotICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMiLCB0aGlzLCAwKTsKLQot
ICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKQotICAgICAgICB0cmFja0Rh
bWFnZUZvckFsbFN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OwotICAgIG1fcm9vdERhbWFnZVJlY3QgPSByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkt
PmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKLQotICAgIC8vIFVwZGF0ZSB0
aGUgY29udGVudHMgb2YgdGhlIHJlbmRlciBzdXJmYWNlcy4gV2UgdHJhdmVyc2UgdGhlIHJlbmRl
ciBzdXJmYWNlcwotICAgIC8vIGZyb20gYmFjayB0byBmcm9udCB0byBndWFyYW50ZWUgdGhhdCBu
ZXN0ZWQgcmVuZGVyIHN1cmZhY2VzIGdldCByZW5kZXJlZCBpbgotICAgIC8vIHRoZSBjb3JyZWN0
IG9yZGVyLgotICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxp
c3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewotICAg
ICAgICBDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRl
clN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAg
QVNTRVJUKHJlbmRlclN1cmZhY2UpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJh
d09wYWNpdHkoKSk7Ci0KLSAgICAgICAgaWYgKHVzZVJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFj
ZSkpIHsKLQotICAgICAgICAgICAgRmxvYXRSZWN0IHN1cmZhY2VEYW1hZ2VSZWN0OwotICAgICAg
ICAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApIHsKLSAgICAgICAgICAg
ICAgICAvLyBGb3Igbm93LCB3ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhlIHJvb3QgZGFtYWdlIGFz
IHRoZSBkYW1hZ2UgZm9yIGFsbAotICAgICAgICAgICAgICAgIC8vIHN1cmZhY2VzLCBleGNlcHQg
cGVyc3BlY3RpdmUgdHJhbnNmb3Jtcy4KLSAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IGNvbXB1dGVTY3JlZW5TcGFjZVRyYW5zZm9ybUZv
clN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyKTsKLSAgICAgICAgICAgICAgICBpZiAoc2NyZWVu
U3BhY2VUcmFuc2Zvcm0uaGFzUGVyc3BlY3RpdmUoKSkgewotICAgICAgICAgICAgICAgICAgICAv
LyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9ucyBkbyBub3QgcGxheSBuaWNlIHdpdGggbWFwUmVjdCBv
ZiBpbnZlcnNlIHRyYW5zZm9ybXMuCi0gICAgICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgdW5j
b21tb24gY2FzZSwgaXRzIHNpbXBsZXIgdG8ganVzdCByZWRyYXcgdGhlIGVudGlyZSBzdXJmYWNl
LgotICAgICAgICAgICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IHJlbmRlclN1cmZhY2Ut
PmNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtID0g
c2NyZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgICAgICAgICAgICAgICAgICBzdXJm
YWNlRGFtYWdlUmVjdCA9IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybS5tYXBSZWN0KG1fcm9v
dERhbWFnZVJlY3QpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gRklYTUU6IGV2ZW50dWFsbHkgd2Ugc2hvdWxkIHBsYWNlIHRoaXMgdW5kZXIgYSBk
ZWJ1ZyBmbGFnLgotICAgICAgICAgICAgY2xlYXJTdXJmYWNlRm9yRGVidWcocmVuZGVyU3VyZmFj
ZUxheWVyLCByb290RHJhd0xheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCk7Ci0KLSAgICAgICAgICAg
IGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3Qo
KTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXgg
PCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCi0gICAgICAgICAgICAgICAgZHJhd0xh
eWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3VyZmFjZSwgc3VyZmFjZURh
bWFnZVJlY3QpOwotICAgICAgICB9Ci0gICAgfQorICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2Ug
PSByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpOwogCi0gICAgLy8gVGhlIG5leHQgZnJhbWUg
c2hvdWxkIHN0YXJ0IGJ5IGFzc3VtaW5nIG5vdGhpbmcgaGFzIGNoYW5nZWQsIGFuZCBjaGFuZ2Vz
IGFyZSBub3RlZCBhcyB0aGV5IG9jY3VyLgotICAgIHJvb3REcmF3TGF5ZXItPnJlc2V0QWxsQ2hh
bmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7Ci19CisgICAgLy8gRklYTUU6IHVzZSB0aGUgZnJhbWUg
YmVnaW4gdGltZSBmcm9tIHRoZSBvdmVyYWxsIGNvbXBvc2l0b3Igc2NoZWR1bGVyLgorICAgIC8v
IFRoaXMgdmFsdWUgaXMgY3VycmVudGx5IGluYWNjZXNzaWJsZSBiZWNhdXNlIGl0IGlzIHVwIGlu
IENocm9taXVtJ3MKKyAgICAvLyBSZW5kZXJXaWRnZXQuCisgICAgbV9oZWFkc1VwRGlzcGxheS0+
b25GcmFtZUJlZ2luKGN1cnJlbnRUaW1lKCkpOwogCisgICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5
VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5
dGVzKCk7CisgICAgc2l6ZV90IG1heExpbWl0ID0gVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5
dGVzKHZpZXdwb3J0U2l6ZSgpKTsKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+
c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhtYXhMaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMp
OwogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKLXsK
ICAgICBpZiAodmlld3BvcnRTaXplKCkuaXNFbXB0eSgpIHx8ICFyb290TGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC00NDgsMjcgKzM1Nyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUodmll
d3BvcnRXaWR0aCgpLCB2aWV3cG9ydEhlaWdodCgpKTsKICAgICB9CiAKLSAgICBDQ0xheWVySW1w
bCogcm9vdERyYXdMYXllciA9IHJvb3RMYXllcigpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotCi0gICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCi0gICAgICAgIHJv
b3REcmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICByb290RHJhd0xheWVyLT5y
ZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgdmlld3Bv
cnRTaXplKCkpKTsKLQotICAgIHJvb3REcmF3TGF5ZXItPnNldENsaXBSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgdmlld3BvcnRTaXplKCkpKTsKLQotICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Q7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdERyYXdM
YXllcik7Ci0KLSAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlID0gcm9vdERyYXdMYXllci0+cmVu
ZGVyU3VyZmFjZSgpOwotICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0
KCk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICB7Ci0g
ICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRl
cm5hbDo6Y2FsY0RyYXdFdGMiLCB0aGlzLCAwKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdERyYXdMYXllciwg
cm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgJm1fbGF5
ZXJTb3J0ZXIsIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKLSAgICB9Ci0KICAgICAv
LyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNsdWRp
bmcgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT52
aWV3cG9ydCgwLCAwLCB2aWV3cG9ydFdpZHRoKCksIHZpZXdwb3J0SGVpZ2h0KCkpKTsKICAgICBt
X3dpbmRvd01hdHJpeCA9IHNjcmVlbk1hdHJpeCgwLCAwLCB2aWV3cG9ydFdpZHRoKCksIHZpZXdw
b3J0SGVpZ2h0KCkpOwpAQCAtNDgxLDkgKzM3MCwzMDUgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpOwogICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkp
OwogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNz
Q29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7
Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhjb25zdCBD
Q1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCit7CisgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJT
dXJmYWNlID0gcmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpOworICAgIGlmICghdXNlUmVuZGVy
U3VyZmFjZShyZW5kZXJTdXJmYWNlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6
IGV2ZW50dWFsbHkgd2Ugc2hvdWxkIHBsYWNlIHRoaXMgdW5kZXIgYSBkZWJ1ZyBmbGFnLgorICAg
IGNsZWFyU3VyZmFjZUZvckRlYnVnKHJlbmRlclN1cmZhY2UsIG1fZGVmYXVsdFJlbmRlclN1cmZh
Y2UsIHJlbmRlclBhc3MtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOworCisgICAgY29uc3QgQ0NRdWFk
TGlzdCYgcXVhZExpc3QgPSByZW5kZXJQYXNzLT5xdWFkTGlzdCgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcXVhZExpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIGRyYXdRdWFkKHF1YWRM
aXN0W2ldLmdldCgpLCByZW5kZXJQYXNzLT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsKK30KKwordm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqIHF1YWQs
IGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit7CisgICAgSW50UmVjdCBzY2lz
c29yUmVjdDsKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCkgeworICAg
ICAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZVJlY3QgPSBzdXJmYWNlRGFtYWdlUmVjdDsKKyAg
ICAgICAgaWYgKCFxdWFkLT5jbGlwUmVjdCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNsaXBB
bmREYW1hZ2VSZWN0LmludGVyc2VjdChxdWFkLT5jbGlwUmVjdCgpKTsKKyAgICAgICAgc2Npc3Nv
clJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBBbmREYW1hZ2VSZWN0KTsKKyAgICAgICAgaWYg
KHNjaXNzb3JSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UK
KyAgICAgICAgc2Npc3NvclJlY3QgPSBxdWFkLT5jbGlwUmVjdCgpOworCisgICAgaWYgKHNjaXNz
b3JSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKKyAgICBlbHNlCisg
ICAgICAgIHNldFNjaXNzb3JUb1JlY3Qoc2Npc3NvclJlY3QpOworCisgICAgaWYgKHF1YWQtPmRy
YXdzT3BhcXVlKCkpCisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKKyAgICBlbHNlCisgICAgICAgIEdMQyht
X2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCkpOworCisgICAgc3dpdGNoIChxdWFkLT5tYXRlcmlhbCgpKSB7CisgICAgY2FzZSBDQ0RyYXdR
dWFkOjpJbnZhbGlkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDQ0RyYXdRdWFkOjpEZWJ1Z0JvcmRlcjoKKyAgICAgICAgZHJhd0RlYnVn
Qm9yZGVyUXVhZChxdWFkLT50b0RlYnVnQm9yZGVyRHJhd1F1YWQoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ0NEcmF3UXVhZDo6UmVuZGVyU3VyZmFjZToKKyAgICAgICAgZHJhd1JlbmRl
clN1cmZhY2VRdWFkKHF1YWQtPnRvUmVuZGVyU3VyZmFjZURyYXdRdWFkKCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OlNvbGlkQ29sb3I6CisgICAgICAgIGRyYXdTb2xp
ZENvbG9yUXVhZChxdWFkLT50b1NvbGlkQ29sb3JEcmF3UXVhZCgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDQ0RyYXdRdWFkOjpUaWxlZENvbnRlbnQ6CisgICAgICAgIGRyYXdUaWxlUXVh
ZChxdWFkLT50b1RpbGVEcmF3UXVhZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDQ0Ry
YXdRdWFkOjpDdXN0b21MYXllcjoKKyAgICAgICAgZHJhd0N1c3RvbUxheWVyUXVhZChxdWFkLT50
b0N1c3RvbUxheWVyRHJhd1F1YWQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1
Z0JvcmRlckRyYXdRdWFkKiBxdWFkKQoreworICAgIHN0YXRpYyBmbG9hdCBnbE1hdHJpeFsxNl07
CisgICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogcHJvZ3JhbSA9IGJvcmRl
clByb2dyYW0oKTsKKyAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgp
KTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJv
Z3JhbSgpKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBxdWFk
LT5sYXllclRyYW5zZm9ybSgpOworICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHF1YWQt
PnF1YWRSZWN0KCk7CisgICAgcmVuZGVyTWF0cml4LnNjYWxlM2QobGF5ZXJSZWN0LndpZHRoKCks
IGxheWVyUmVjdC5oZWlnaHQoKSwgMSk7CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0b0dM
TWF0cml4KCZnbE1hdHJpeFswXSwgcHJvamVjdGlvbk1hdHJpeCgpICogcmVuZGVyTWF0cml4KTsK
KyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwgZmFsc2UsICZnbE1hdHJpeFswXSwgMSkp
OworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYocHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKS5jb2xvckxvY2F0aW9uKCksIHF1YWQtPmNvbG9yKCkucmVkKCkgLyAyNTUu
MCwgcXVhZC0+Y29sb3IoKS5ncmVlbigpIC8gMjU1LjAsIHF1YWQtPmNvbG9yKCkuYmx1ZSgpIC8g
MjU1LjAsIDEpKTsKKworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+bGluZVdpZHRoKHF1
YWQtPndpZHRoKCkpKTsKKworICAgIC8vIFRoZSBpbmRpY2VzIGZvciB0aGUgbGluZSBhcmUgc3Rv
cmVkIGluIHRoZSBzYW1lIGFycmF5IGFzIHRoZSB0cmlhbmdsZSBpbmRpY2VzLgorICAgIEdMQyhj
b250ZXh0KCksIGNvbnRleHQoKS0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
X0xPT1AsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgNiAqIHNpemVvZih1
bnNpZ25lZCBzaG9ydCkpKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdS
ZW5kZXJTdXJmYWNlUXVhZChjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCogcXVhZCkKK3sK
KyAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBxdWFkLT5sYXllcigpOworICAgIGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCktPmRyYXcodGhpcywgcXVhZC0+c3VyZmFjZURhbWFnZVJlY3QoKSk7CisgICAg
bGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpOworfQorCit2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IENDU29s
aWRDb2xvckRyYXdRdWFkKiBxdWFkKQoreworICAgIGNvbnN0IExheWVyQ2hyb21pdW06OkJvcmRl
clByb2dyYW0qIHNvbGlkQ29sb3JQcm9ncmFtID0gYm9yZGVyUHJvZ3JhbSgpOworICAgIEdMQyhj
b250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShzb2xpZENvbG9yUHJvZ3JhbS0+cHJvZ3Jh
bSgpKSk7CisKKyAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcXVhZC0+cXVhZFJlY3QoKTsKKworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGVUcmFuc2Zvcm0gPSBxdWFkLT5xdWFkVHJhbnNmb3Jt
KCk7CisgICAgdGlsZVRyYW5zZm9ybS50cmFuc2xhdGUodGlsZVJlY3QueCgpICsgdGlsZVJlY3Qu
d2lkdGgoKSAvIDIuMCwgdGlsZVJlY3QueSgpICsgdGlsZVJlY3QuaGVpZ2h0KCkgLyAyLjApOwor
CisgICAgY29uc3QgQ29sb3ImIGNvbG9yID0gcXVhZC0+Y29sb3IoKTsKKworICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTRmKHNvbGlkQ29sb3JQcm9ncmFtLT5mcmFnbWVudFNo
YWRlcigpLmNvbG9yTG9jYXRpb24oKSwgY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9y
LmJsdWUoKSwgY29sb3IuYWxwaGEoKSkpOworCisgICAgZmxvYXQgb3BhY2l0eSA9IHF1YWQtPm9w
YWNpdHkoKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKHRpbGVUcmFuc2Zvcm0sCisgICAgICAgICAg
ICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgb3BhY2l0eSwg
RmxvYXRRdWFkKCksCisgICAgICAgICAgICAgICAgICAgICBzb2xpZENvbG9yUHJvZ3JhbS0+dmVy
dGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgIC0xLCAt
MSk7Cit9CisKK3N0cnVjdCBUaWxlUHJvZ3JhbVVuaWZvcm1zIHsKKyAgICB1bnNpZ25lZCBwcm9n
cmFtOworICAgIHVuc2lnbmVkIHNhbXBsZXJMb2NhdGlvbjsKKyAgICB1bnNpZ25lZCB2ZXJ0ZXhU
ZXhUcmFuc2Zvcm1Mb2NhdGlvbjsKKyAgICB1bnNpZ25lZCBmcmFnbWVudFRleFRyYW5zZm9ybUxv
Y2F0aW9uOworICAgIHVuc2lnbmVkIGVkZ2VMb2NhdGlvbjsKKyAgICB1bnNpZ25lZCBtYXRyaXhM
b2NhdGlvbjsKKyAgICB1bnNpZ25lZCBhbHBoYUxvY2F0aW9uOworICAgIHVuc2lnbmVkIHBvaW50
TG9jYXRpb247Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBUPgorc3RhdGljIHZvaWQgdGlsZVVuaWZv
cm1Mb2NhdGlvbihUIHByb2dyYW0sIFRpbGVQcm9ncmFtVW5pZm9ybXMmIHVuaWZvcm1zKQorewor
ICAgIHVuaWZvcm1zLnByb2dyYW0gPSBwcm9ncmFtLT5wcm9ncmFtKCk7CisgICAgdW5pZm9ybXMu
dmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS52ZXJ0
ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpOworICAgIHVuaWZvcm1zLm1hdHJpeExvY2F0aW9uID0g
cHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKKyAgICB1bmlmb3Jtcy5w
b2ludExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigpOwor
CisgICAgdW5pZm9ybXMuc2FtcGxlckxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIo
KS5zYW1wbGVyTG9jYXRpb24oKTsKKyAgICB1bmlmb3Jtcy5hbHBoYUxvY2F0aW9uID0gcHJvZ3Jh
bS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7CisgICAgdW5pZm9ybXMuZnJhZ21l
bnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21l
bnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpOworICAgIHVuaWZvcm1zLmVkZ2VMb2NhdGlvbiA9IHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCk7Cit9CisKK3N0YXRpYyB2b2lk
IGZpbmRUaWxlUHJvZ3JhbVVuaWZvcm1zKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlciwgY29uc3QgQ0NUaWxlRHJhd1F1YWQqIHF1YWQsIFRpbGVQcm9ncmFtVW5pZm9ybXMmIHVu
aWZvcm1zKQoreworICAgIGlmIChxdWFkLT5pc0FudGlhbGlhc2VkKCkpIHsKKyAgICAgICAgaWYg
KHF1YWQtPnN3aXp6bGVDb250ZW50cygpKSB7CisgICAgICAgICAgICBjb25zdCBDQ1RpbGVkTGF5
ZXJJbXBsOjpQcm9ncmFtU3dpenpsZUFBKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQ
cm9ncmFtU3dpenpsZUFBKCk7CisgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHByb2dy
YW0sIHVuaWZvcm1zKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IENDVGls
ZWRMYXllckltcGw6OlByb2dyYW1BQSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJv
Z3JhbUFBKCk7CisgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZv
cm1zKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChxdWFkLT5kcmF3c09w
YXF1ZSgpKSB7CisgICAgICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZU9wYXF1
ZSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGVPcGFxdWUoKTsK
KyAgICAgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1zKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVy
SW1wbDo6UHJvZ3JhbU9wYXF1ZSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3Jh
bU9wYXF1ZSgpOworICAgICAgICAgICAgICAgIHRpbGVVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwg
dW5pZm9ybXMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKHF1YWQtPnN3aXp6bGVDb250ZW50cygpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NU
aWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGUqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50
aWxlclByb2dyYW1Td2l6emxlKCk7CisgICAgICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtLCB1bmlmb3Jtcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRl
cmVyLT50aWxlclByb2dyYW0oKTsKKyAgICAgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9u
KHByb2dyYW0sIHVuaWZvcm1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUaWxlUXVhZChjb25zdCBDQ1RpbGVE
cmF3UXVhZCogcXVhZCkKK3sKKyAgICBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCA9IHF1YWQtPnF1
YWRSZWN0KCk7CisKKyAgICBGbG9hdFJlY3QgY2xhbXBSZWN0KHRpbGVSZWN0KTsKKyAgICAvLyBD
bGFtcCB0ZXh0dXJlIGNvb3JkaW5hdGVzIHRvIGF2b2lkIHNhbXBsaW5nIG91dHNpZGUgdGhlIGxh
eWVyCisgICAgLy8gYnkgZGVmbGF0aW5nIHRoZSB0aWxlIHJlZ2lvbiBoYWxmIGEgdGV4ZWwgb3Ig
aGFsZiBhIHRleGVsCisgICAgLy8gbWludXMgZXBzaWxvbiBmb3Igb25lIHBpeGVsIGxheWVycy4g
VGhlIHJlc3VsdGluZyBjbGFtcCByZWdpb24KKyAgICAvLyBpcyBtYXBwZWQgdG8gdGhlIHVuaXQg
c3F1YXJlIGJ5IHRoZSB2ZXJ0ZXggc2hhZGVyIGFuZCBtYXBwZWQKKyAgICAvLyBiYWNrIHRvIG5v
cm1hbGl6ZWQgdGV4dHVyZSBjb29yZGluYXRlcyBieSB0aGUgZnJhZ21lbnQgc2hhZGVyCisgICAg
Ly8gYWZ0ZXIgYmVpbmcgY2xhbXBlZCB0byAwLTEgcmFuZ2UuCisgICAgY29uc3QgZmxvYXQgZXBz
aWxvbiA9IDEgLyAxMDI0LjBmOworICAgIGZsb2F0IGNsYW1wWCA9IG1pbigwLjUsIGNsYW1wUmVj
dC53aWR0aCgpIC8gMi4wIC0gZXBzaWxvbik7CisgICAgZmxvYXQgY2xhbXBZID0gbWluKDAuNSwg
Y2xhbXBSZWN0LmhlaWdodCgpIC8gMi4wIC0gZXBzaWxvbik7CisgICAgY2xhbXBSZWN0LmluZmxh
dGVYKC1jbGFtcFgpOworICAgIGNsYW1wUmVjdC5pbmZsYXRlWSgtY2xhbXBZKTsKKyAgICBGbG9h
dFNpemUgY2xhbXBPZmZzZXQgPSBjbGFtcFJlY3QubWluWE1pbllDb3JuZXIoKSAtIEZsb2F0UmVj
dCh0aWxlUmVjdCkubWluWE1pbllDb3JuZXIoKTsKKworICAgIEZsb2F0UG9pbnQgdGV4dHVyZU9m
ZnNldCA9IHF1YWQtPnRleHR1cmVPZmZzZXQoKSArIGNsYW1wT2Zmc2V0OworCisgICAgLy8gTWFw
IGNsYW1waW5nIHJlY3RhbmdsZSB0byB1bml0IHNxdWFyZS4KKyAgICBmbG9hdCB2ZXJ0ZXhUZXhU
cmFuc2xhdGVYID0gLWNsYW1wUmVjdC54KCkgLyBjbGFtcFJlY3Qud2lkdGgoKTsKKyAgICBmbG9h
dCB2ZXJ0ZXhUZXhUcmFuc2xhdGVZID0gLWNsYW1wUmVjdC55KCkgLyBjbGFtcFJlY3QuaGVpZ2h0
KCk7CisgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVYID0gdGlsZVJlY3Qud2lkdGgoKSAvIGNsYW1w
UmVjdC53aWR0aCgpOworICAgIGZsb2F0IHZlcnRleFRleFNjYWxlWSA9IHRpbGVSZWN0LmhlaWdo
dCgpIC8gY2xhbXBSZWN0LmhlaWdodCgpOworCisgICAgLy8gTWFwIHRvIG5vcm1hbGl6ZWQgdGV4
dHVyZSBjb29yZGluYXRlcy4KKyAgICBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSA9IHF1YWQt
PnRleHR1cmVTaXplKCk7CisgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVYID0gdGV4dHVy
ZU9mZnNldC54KCkgLyB0ZXh0dXJlU2l6ZS53aWR0aCgpOworICAgIGZsb2F0IGZyYWdtZW50VGV4
VHJhbnNsYXRlWSA9IHRleHR1cmVPZmZzZXQueSgpIC8gdGV4dHVyZVNpemUuaGVpZ2h0KCk7Cisg
ICAgZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVggPSBjbGFtcFJlY3Qud2lkdGgoKSAvIHRleHR1cmVT
aXplLndpZHRoKCk7CisgICAgZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVkgPSBjbGFtcFJlY3QuaGVp
Z2h0KCkgLyB0ZXh0dXJlU2l6ZS5oZWlnaHQoKTsKKworICAgIFRpbGVQcm9ncmFtVW5pZm9ybXMg
dW5pZm9ybXM7CisgICAgZmluZFRpbGVQcm9ncmFtVW5pZm9ybXModGhpcywgcXVhZCwgdW5pZm9y
bXMpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHVuaWZvcm1z
LnByb2dyYW0pKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaSh1bmlm
b3Jtcy5zYW1wbGVyTG9jYXRpb24sIDApKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgcXVhZC0+dGV4dHVyZUlkKCkpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIHF1YWQtPnRleHR1cmVGaWx0ZXIoKSkpOworICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgcXVh
ZC0+dGV4dHVyZUZpbHRlcigpKSk7CisKKyAgICBGbG9hdFF1YWQgbG9jYWxRdWFkOworICAgIGlm
IChxdWFkLT5pc0FudGlhbGlhc2VkKCkpIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
ZGV2aWNlVHJhbnNmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgod2luZG93TWF0cml4KCkgKiBw
cm9qZWN0aW9uTWF0cml4KCkgKiBxdWFkLT5xdWFkVHJhbnNmb3JtKCkpLnRvMmRUcmFuc2Zvcm0o
KTsKKyAgICAgICAgaWYgKCFkZXZpY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgRmxvYXRRdWFkIGRldmljZUxheWVyUXVhZCA9IGRldmlj
ZVRyYW5zZm9ybS5tYXBRdWFkKEZsb2F0UXVhZChxdWFkLT5sYXllclJlY3QoKSkpOworCisgICAg
ICAgIENDTGF5ZXJRdWFkIGRldmljZUxheWVyQm91bmRzID0gQ0NMYXllclF1YWQoRmxvYXRRdWFk
KGRldmljZUxheWVyUXVhZC5ib3VuZGluZ0JveCgpKSk7CisgICAgICAgIGRldmljZUxheWVyQm91
bmRzLmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOworCisgICAgICAgIENDTGF5ZXJRdWFk
IGRldmljZUxheWVyRWRnZXMgPSBDQ0xheWVyUXVhZChkZXZpY2VMYXllclF1YWQpOworICAgICAg
ICBkZXZpY2VMYXllckVkZ2VzLmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOworCisgICAg
ICAgIGZsb2F0IGVkZ2VbMjRdOworICAgICAgICBkZXZpY2VMYXllckVkZ2VzLnRvRmxvYXRBcnJh
eShlZGdlKTsKKyAgICAgICAgZGV2aWNlTGF5ZXJCb3VuZHMudG9GbG9hdEFycmF5KCZlZGdlWzEy
XSk7CisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTNmdih1bmlmb3Jt
cy5lZGdlTG9jYXRpb24sIGVkZ2UsIDgpKTsKKworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPnVuaWZvcm00Zih1bmlmb3Jtcy52ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgdmVy
dGV4VGV4VHJhbnNsYXRlWCwgdmVydGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2
ZXJ0ZXhUZXhTY2FsZVkpKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlm
b3JtNGYodW5pZm9ybXMuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgZnJhZ21lbnRUZXhU
cmFuc2xhdGVYLCBmcmFnbWVudFRleFRyYW5zbGF0ZVksIGZyYWdtZW50VGV4U2NhbGVYLCBmcmFn
bWVudFRleFNjYWxlWSkpOworCisgICAgICAgIEZsb2F0UG9pbnQgYm90dG9tUmlnaHQodGlsZVJl
Y3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOworICAgICAgICBGbG9hdFBvaW50IGJvdHRvbUxl
ZnQodGlsZVJlY3QueCgpLCB0aWxlUmVjdC5tYXhZKCkpOworICAgICAgICBGbG9hdFBvaW50IHRv
cExlZnQodGlsZVJlY3QueCgpLCB0aWxlUmVjdC55KCkpOworICAgICAgICBGbG9hdFBvaW50IHRv
cFJpZ2h0KHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QueSgpKTsKKworICAgICAgICAvLyBNYXAg
cG9pbnRzIHRvIGRldmljZSBzcGFjZS4KKyAgICAgICAgYm90dG9tUmlnaHQgPSBkZXZpY2VUcmFu
c2Zvcm0ubWFwUG9pbnQoYm90dG9tUmlnaHQpOworICAgICAgICBib3R0b21MZWZ0ID0gZGV2aWNl
VHJhbnNmb3JtLm1hcFBvaW50KGJvdHRvbUxlZnQpOworICAgICAgICB0b3BMZWZ0ID0gZGV2aWNl
VHJhbnNmb3JtLm1hcFBvaW50KHRvcExlZnQpOworICAgICAgICB0b3BSaWdodCA9IGRldmljZVRy
YW5zZm9ybS5tYXBQb2ludCh0b3BSaWdodCk7CisKKyAgICAgICAgQ0NMYXllclF1YWQ6OkVkZ2Ug
Ym90dG9tRWRnZShib3R0b21SaWdodCwgYm90dG9tTGVmdCk7CisgICAgICAgIENDTGF5ZXJRdWFk
OjpFZGdlIGxlZnRFZGdlKGJvdHRvbUxlZnQsIHRvcExlZnQpOworICAgICAgICBDQ0xheWVyUXVh
ZDo6RWRnZSB0b3BFZGdlKHRvcExlZnQsIHRvcFJpZ2h0KTsKKyAgICAgICAgQ0NMYXllclF1YWQ6
OkVkZ2UgcmlnaHRFZGdlKHRvcFJpZ2h0LCBib3R0b21SaWdodCk7CisKKyAgICAgICAgaWYgKHF1
YWQtPnRvcEVkZ2VBQSgpKQorICAgICAgICAgICAgdG9wRWRnZSA9IGRldmljZUxheWVyRWRnZXMu
dG9wKCk7CisgICAgICAgIGlmIChxdWFkLT5sZWZ0RWRnZUFBKCkpCisgICAgICAgICAgICBsZWZ0
RWRnZSA9IGRldmljZUxheWVyRWRnZXMubGVmdCgpOworICAgICAgICBpZiAocXVhZC0+cmlnaHRF
ZGdlQUEoKSkKKyAgICAgICAgICAgIHJpZ2h0RWRnZSA9IGRldmljZUxheWVyRWRnZXMucmlnaHQo
KTsKKyAgICAgICAgaWYgKHF1YWQtPmJvdHRvbUVkZ2VBQSgpKQorICAgICAgICAgICAgYm90dG9t
RWRnZSA9IGRldmljZUxheWVyRWRnZXMuYm90dG9tKCk7CisKKyAgICAgICAgZmxvYXQgc2lnbiA9
IEZsb2F0UXVhZCh0aWxlUmVjdCkuaXNDb3VudGVyY2xvY2t3aXNlKCkgPyAtMSA6IDE7CisgICAg
ICAgIGJvdHRvbUVkZ2Uuc2NhbGUoc2lnbik7CisgICAgICAgIGxlZnRFZGdlLnNjYWxlKHNpZ24p
OworICAgICAgICB0b3BFZGdlLnNjYWxlKHNpZ24pOworICAgICAgICByaWdodEVkZ2Uuc2NhbGUo
c2lnbik7CisKKyAgICAgICAgLy8gQ3JlYXRlIGRldmljZSBzcGFjZSBxdWFkLgorICAgICAgICBD
Q0xheWVyUXVhZCBkZXZpY2VRdWFkKGxlZnRFZGdlLCB0b3BFZGdlLCByaWdodEVkZ2UsIGJvdHRv
bUVkZ2UpOworCisgICAgICAgIC8vIE1hcCBxdWFkIHRvIGxheWVyIHNwYWNlLgorICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlRGV2aWNlVHJhbnNmb3JtID0gZGV2aWNlVHJhbnNm
b3JtLmludmVyc2UoKTsKKyAgICAgICAgbG9jYWxRdWFkID0gaW52ZXJzZURldmljZVRyYW5zZm9y
bS5tYXBRdWFkKGRldmljZVF1YWQuZmxvYXRRdWFkKCkpOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIE1vdmUgZnJhZ21lbnQgc2hhZGVyIHRyYW5zZm9ybSB0byB2ZXJ0ZXggc2hhZGVyLiBXZSBj
YW4gZG8gdGhpcyB3aGlsZQorICAgICAgICAvLyBzdGlsbCBwcm9kdWNpbmcgY29ycmVjdCByZXN1
bHRzIGFzIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24KKyAgICAgICAgLy8gc2hvdWxkIGFs
d2F5cyBiZSBub24tbmVnYXRpdmUgd2hlbiB0aWxlcyBhcmUgdHJhbnNmb3JtZWQgaW4gYSB3YXkK
KyAgICAgICAgLy8gdGhhdCBjb3VsZCByZXN1bHQgaW4gc2FtcGxpbmcgb3V0c2lkZSB0aGUgbGF5
ZXIuCisgICAgICAgIHZlcnRleFRleFNjYWxlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKKyAgICAg
ICAgdmVydGV4VGV4U2NhbGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOworICAgICAgICB2ZXJ0ZXhU
ZXhUcmFuc2xhdGVYICo9IGZyYWdtZW50VGV4U2NhbGVYOworICAgICAgICB2ZXJ0ZXhUZXhUcmFu
c2xhdGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOworICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVY
ICs9IGZyYWdtZW50VGV4VHJhbnNsYXRlWDsKKyAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWSAr
PSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7CisKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT51bmlmb3JtNGYodW5pZm9ybXMudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24sIHZlcnRl
eFRleFRyYW5zbGF0ZVgsIHZlcnRleFRleFRyYW5zbGF0ZVksIHZlcnRleFRleFNjYWxlWCwgdmVy
dGV4VGV4U2NhbGVZKSk7CisKKyAgICAgICAgbG9jYWxRdWFkID0gRmxvYXRSZWN0KHRpbGVSZWN0
KTsKKyAgICB9CisKKyAgICAvLyBOb3JtYWxpemUgdG8gdGlsZVJlY3QuCisgICAgbG9jYWxRdWFk
LnNjYWxlKDEuMGYgLyB0aWxlUmVjdC53aWR0aCgpLCAxLjBmIC8gdGlsZVJlY3QuaGVpZ2h0KCkp
OwogCi0gICAgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhyb290RHJhd0xheWVyLCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWQtPnF1YWRUcmFu
c2Zvcm0oKSwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIHF1YWQtPm9wYWNp
dHkoKSwgbG9jYWxRdWFkLCB1bmlmb3Jtcy5tYXRyaXhMb2NhdGlvbiwgdW5pZm9ybXMuYWxwaGFM
b2NhdGlvbiwgdW5pZm9ybXMucG9pbnRMb2NhdGlvbik7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3Q3VzdG9tTGF5ZXJRdWFkKGNvbnN0IENDQ3VzdG9tTGF5ZXJEcmF3UXVh
ZCogcXVhZCkKK3sKKyAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBxdWFkLT5sYXllcigpOworICAg
IGxheWVyLT5kcmF3KHRoaXMpOworfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Zmlu
aXNoRHJhd2luZ0ZyYW1lKCkKK3sKICAgICBpZiAobV9oZWFkc1VwRGlzcGxheS0+ZW5hYmxlZCgp
KSB7CiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORCkpOwogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Nv
bnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQz
RDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwpAQCAtNDk0LDYgKzY3OSwxOCBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIAogICAgIEdMQyhtX2NvbnRl
eHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORCkpOworCisgICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0
ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7
CisgICAgc2l6ZV90IHJlY2xhaW1MaW1pdCA9IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRC
eXRlcyh2aWV3cG9ydFNpemUoKSk7CisgICAgaWYgKHJlY2xhaW1MaW1pdCA+IGNvbnRlbnRzTWVt
b3J5VXNlQnl0ZXMpCisgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRQ
cmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xhaW1MaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNl
Qnl0ZXMpOworICAgIGVsc2UKKyAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIt
PnNldFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoMCk7CisKKyAgICBtX3JlbmRlclN1cmZhY2VU
ZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fcmVuZGVyU3VyZmFjZVRleHR1
cmVBbGxvY2F0b3IuZ2V0KCkpOworCisgICAgaWYgKHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2Ny
ZWVuKQorICAgICAgICBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwogfQogCiB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dG9HTE1hdHJpeChmbG9hdCogZmxhdHRlbmVkLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKQEAgLTY0NSw0MiArODQyLDggQEAgYm9vbCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5k
ZXJTdXJmYWNlKQogI2VuZGlmCiAKICAgICBzZXREcmF3Vmlld3BvcnRSZWN0KHJlbmRlclN1cmZh
Y2UtPmNvbnRlbnRSZWN0KCksIGZhbHNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDUmVu
ZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdl
UmVjdCkKLXsKLSAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29u
dHJpYnV0ZXNUb1RhcmdldDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdldFN1cmZhY2UtPm93bmlu
Z0xheWVySWQoKSkpIHsKLSAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0aGlz
LCBzdXJmYWNlRGFtYWdlUmVjdCk7Ci0gICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPnJl
bGVhc2VDb250ZW50c1RleHR1cmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChsYXllci0+dmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpICYmIG1fY2FwYWJpbGl0aWVzLnVz
aW5nUGFydGlhbFN3YXApIHsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2VSZWN0KGxh
eWVyLT5jbGlwUmVjdCgpKTsKLSAgICAgICAgY2xpcEFuZERhbWFnZVJlY3QuaW50ZXJzZWN0KHN1
cmZhY2VEYW1hZ2VSZWN0KTsKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRS
ZWN0KGNsaXBBbmREYW1hZ2VSZWN0KSk7Ci0gICAgfSBlbHNlIGlmIChtX2NhcGFiaWxpdGllcy51
c2luZ1BhcnRpYWxTd2FwKQotICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJl
Y3Qoc3VyZmFjZURhbWFnZVJlY3QpKTsKLSAgICBlbHNlIGlmIChsYXllci0+dXNlc0xheWVyQ2xp
cHBpbmcoKSkKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChsYXllci0+Y2xpcFJlY3QoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotCi0gICAgYm9vbCBvcGFxdWUgPSBs
YXllci0+b3BhcXVlKCkgJiYgbGF5ZXItPmRyYXdPcGFjaXR5KCkgPT0gMTsKLSAgICBpZiAob3Bh
cXVlKQotICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7Ci0KLSAgICBsYXllci0+ZHJhdyh0aGlzKTsKLQotICAg
IGlmIChvcGFxdWUpCi0gICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwotCi0gICAgLy8gRHJhdyB0aGUgZGVidWcg
Ym9yZGVyIGlmIHRoZXJlIGlzIG9uZS4KLSAgICBsYXllci0+ZHJhd0RlYnVnQm9yZGVyKHRoaXMp
OworICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBTZXRzIHRoZSBzY2lzc29yIHJlZ2lvbiB0byB0
aGUgZ2l2ZW4gcmVjdGFuZ2xlLiBUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gZm9yIHRoZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA2ZTE0OWYwZTYzODUwZDI4YzI1ZjJkMTNh
ZDc2OWYzZjkwNjU2YWM2Li5jOGFjYjJjMzQ1YWEwNmMxN2RkNDlhMzcxYzg5MmE4YzJkMmE3ZGYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNDIsNyArNDIsNiBAQAog
I2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5
ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgotI2luY2x1ZGUgImNj
L0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAj
aW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmgiCkBAIC02Niw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEND
SGVhZHNVcERpc3BsYXk7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9z
dEltcGw7CitjbGFzcyBDQ1JlbmRlclBhc3M7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjsKQEAg
LTk3LDcgKzk3LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCB2aWV3cG9ydENoYW5nZWQoKTsKIAot
ICAgIHZvaWQgZHJhd0xheWVycygpOworICAgIHZvaWQgYmVnaW5EcmF3aW5nRnJhbWUoKTsKKyAg
ICB2b2lkIGRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyopOworICAgIHZvaWQgZmlu
aXNoRHJhd2luZ0ZyYW1lKCk7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlz
aAogICAgIHZvaWQgZmluaXNoKCk7CkBAIC0xNTEsOCArMTUzLDYgQEAgcHVibGljOgogCiAgICAg
R0MzRGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKTsKIAotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0
cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsKLQogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRy
aXgoZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIHZvaWQgZHJhd1Rl
eHR1cmVkUXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9w
YWNpdHksIGNvbnN0IEZsb2F0UXVhZCYsCkBAIC0xNjIsMjEgKzE2MiwyMiBAQCBwcml2YXRlOgog
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4pOwogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCi0gICAgdm9p
ZCBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsKLSAgICB2b2lkIGRyYXdMYXllcnNPbnRvUmVuZGVyU3Vy
ZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1wbCosIEND
UmVuZGVyU3VyZmFjZSosIGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCB0cmFja0RhbWFn
ZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgdm9pZCBkcmF3UXVhZChjb25zdCBD
Q0RyYXdRdWFkKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CisgICAgdm9p
ZCBkcmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOworICAg
IHZvaWQgZHJhd1JlbmRlclN1cmZhY2VRdWFkKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFk
Kik7CisgICAgdm9pZCBkcmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1
YWQqKTsKKyAgICB2b2lkIGRyYXdUaWxlUXVhZChjb25zdCBDQ1RpbGVEcmF3UXVhZCopOworICAg
IHZvaWQgZHJhd0N1c3RvbUxheWVyUXVhZChjb25zdCBDQ0N1c3RvbUxheWVyRHJhd1F1YWQqKTsK
IAogICAgIE1hbmFnZWRUZXh0dXJlKiBnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKTsKICAgICB2
b2lkIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCk7CiAKICAgICB2b2lkIHNldERyYXdW
aWV3cG9ydFJlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wgZmxpcFkpOwogCi0gICAgdm9pZCByZWxl
YXNlUmVuZGVyU3VyZmFjZVRleHR1cmVzKCk7Ci0KICAgICBib29sIHVzZVJlbmRlclN1cmZhY2Uo
Q0NSZW5kZXJTdXJmYWNlKik7Ci0gICAgdm9pZCBjbGVhclN1cmZhY2VGb3JEZWJ1ZyhDQ0xheWVy
SW1wbCogcmVuZGVyU3VyZmFjZUxheWVyLCBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29u
c3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CisgICAgdm9pZCBjbGVhclN1cmZhY2VG
b3JEZWJ1ZyhDQ1JlbmRlclN1cmZhY2UqLCBDQ1JlbmRlclN1cmZhY2UqIHJvb3RSZW5kZXJTdXJm
YWNlLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKKworICAgIHZvaWQgcmVs
ZWFzZVJlbmRlclN1cmZhY2VUZXh0dXJlcygpOwogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKIApAQCAtMjM4LDggKzIzOSw2IEBAIHByaXZhdGU6CiAKICAgICBDQ1JlbmRlclN1cmZh
Y2UqIG1fZGVmYXVsdFJlbmRlclN1cmZhY2U7CiAKLSAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJT
b3J0ZXI7Ci0KICAgICBGbG9hdFF1YWQgbV9zaGFyZWRHZW9tZXRyeVF1YWQ7CiAKICAgICBib29s
IG1faXNWaWV3cG9ydENoYW5nZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaAppbmRleCBiYmE1MWY5Zjc4
NTUzMGQ2Njc5ZjRkNTUzN2Q3ODQ2YjRmNTJlNDdlLi41NjlmNjk2YmVhYTJhYTZkZmIzYmJmYjIx
NzA0NmJmMGU0MGFjY2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmgKQEAgLTE0NSw3ICsxNDUsMTUg
QEAgcHJpdmF0ZToKICAgICBpbnQgbV92ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbjsKIH07CiAK
LWNsYXNzIEZyYWdtZW50VGV4QWxwaGFCaW5kaW5nIHsKK2NsYXNzIEZyYWdtZW50VGlsZUJpbmRp
bmdCYXNlIHsKK3B1YmxpYzoKKyAgICBpbnQgYWxwaGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IC0xOyB9CisgICAgaW50IGVkZ2VMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIC0xOyB9CisgICAg
aW50IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiAtMTsgfQor
ICAgIGludCBzYW1wbGVyTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiAtMTsgfQorfTsKKworY2xh
c3MgRnJhZ21lbnRUZXhBbHBoYUJpbmRpbmcgOiBwdWJsaWMgRnJhZ21lbnRUaWxlQmluZGluZ0Jh
c2UgewogcHVibGljOgogICAgIEZyYWdtZW50VGV4QWxwaGFCaW5kaW5nKCk7CiAKQEAgLTE1OCwx
MiArMTY2LDExIEBAIHByaXZhdGU6CiAgICAgaW50IG1fYWxwaGFMb2NhdGlvbjsKIH07CiAKLWNs
YXNzIEZyYWdtZW50VGV4T3BhcXVlQmluZGluZyB7CitjbGFzcyBGcmFnbWVudFRleE9wYXF1ZUJp
bmRpbmcgOiBwdWJsaWMgRnJhZ21lbnRUaWxlQmluZGluZ0Jhc2UgewogcHVibGljOgogICAgIEZy
YWdtZW50VGV4T3BhcXVlQmluZGluZygpOwogCiAgICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4
dDNEKiwgdW5zaWduZWQgcHJvZ3JhbSk7Ci0gICAgaW50IGFscGhhTG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiAtMTsgfQogICAgIGludCBzYW1wbGVyTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3NhbXBsZXJMb2NhdGlvbjsgfQogCiBwcml2YXRlOgpAQCAtMjI0LDcgKzIzMSw3IEBAIHByaXZh
dGU6CiAgICAgaW50IG1fZWRnZUxvY2F0aW9uOwogfTsKIAotY2xhc3MgRnJhZ21lbnRUZXhDbGFt
cEFscGhhQUFCaW5kaW5nIHsKK2NsYXNzIEZyYWdtZW50VGV4Q2xhbXBBbHBoYUFBQmluZGluZyA6
IHB1YmxpYyBGcmFnbWVudFRpbGVCaW5kaW5nQmFzZSB7CiBwdWJsaWM6CiAgICAgRnJhZ21lbnRU
ZXhDbGFtcEFscGhhQUFCaW5kaW5nKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3Bw
CmluZGV4IGFjN2I4ZjYxYTNmZmNlOGJjZjM2YzdkOGZlNTA5NDAwOWM4NDVjYTkuLjA3YmFiMjAy
OGYxMzQ5ZmVjMjA1YTczNDBjMzNmZDY5ZTU3OWUxY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcApAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpw
dXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICB9CiAKICAgICB0aWxlZExh
eWVyLT5zZXRTa2lwc0RyYXcobV9za2lwc0RyYXcpOwotICAgIHRpbGVkTGF5ZXItPnNldFNhbXBs
ZWRUZXhlbEZvcm1hdChtX3NhbXBsZWRUZXhlbEZvcm1hdCk7CisgICAgdGlsZWRMYXllci0+c2V0
Q29udGVudHNTd2l6emxlZChtX3NhbXBsZWRUZXhlbEZvcm1hdCAhPSBMYXllclRleHR1cmVVcGRh
dGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBKTsKICAgICB0aWxlZExheWVyLT5zZXRUaWxpbmdE
YXRhKCptX3RpbGVyKTsKIAogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90
aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDdXN0b21M
YXllckRyYXdRdWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTgwYjEwZWQyNDkwYzdhNmY4OWFjZjIzMTFj
ZDgwYWNlODNhNWJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmNwcApAQCAtMCwwICsx
LDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NDdXN0
b21MYXllckRyYXdRdWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxD
Q0N1c3RvbUxheWVyRHJhd1F1YWQ+IENDQ3VzdG9tTGF5ZXJEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRS
ZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0N1
c3RvbUxheWVyRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbGF5ZXIpKTsKK30K
KworQ0NDdXN0b21MYXllckRyYXdRdWFkOjpDQ0N1c3RvbUxheWVyRHJhd1F1YWQoY29uc3QgQ0NT
aGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3Qs
IENDTGF5ZXJJbXBsKiBsYXllcikKKyAgICA6IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBD
Q0RyYXdRdWFkOjpDdXN0b21MYXllciwgcXVhZFJlY3QpCisgICAgLCBtX2xheWVyKGxheWVyKQor
eworICAgIEFTU0VSVChtX2xheWVyKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxh
eWVyRHJhd1F1YWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWJkNDYyMzI1M2E0YzQ1NTA5YWMyNDUwZjljYTMy
YTczYzdkOWM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmgKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ0NDdXN0b21MYXllckRyYXdRdWFkX2gKKyNkZWZpbmUgQ0NDdXN0
b21MYXllckRyYXdRdWFkX2gKKworI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5
ZXJJbXBsOworCisvLyBGSVhNRTogVGhpcyBjbGFzcyBpcyBhIHRlbXBvcmFyeSB3YXkgdG8gYWNj
ZXNzIENDTGF5ZXJJbXBsOjpkcmF3LiBUaGlzIGNsYXNzCisvLyBzaG91bGQgYmUgY29udmVydGVk
IHRvIGEgc2V0IG9mIGRyYXcgcXVhZHMgZm9yIGVhY2ggbGF5ZXIgbWF0ZXJpYWwgdHlwZSBhbmQK
Ky8vIHRoZW4gcmVtb3ZlZC4KK2NsYXNzIENDQ3VzdG9tTGF5ZXJEcmF3UXVhZCA6IHB1YmxpYyBD
Q0RyYXdRdWFkIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0N1c3RvbUxheWVyRHJhd1F1
YWQpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQ3VzdG9tTGF5ZXJEcmF3UXVh
ZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5
ZXJJbXBsKik7CisKKyAgICBDQ0xheWVySW1wbCogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xh
eWVyOyB9CisKK3ByaXZhdGU6CisgICAgQ0NDdXN0b21MYXllckRyYXdRdWFkKGNvbnN0IENDU2hh
cmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKik7CisKKyAgICBDQ0xh
eWVySW1wbCogbV9sYXllcjsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1
YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
ZWJ1Z0JvcmRlckRyYXdRdWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOWU4ZGM5NTlmZjQ4MjNjNGVkNjNj
ZTkyNzdjNzI0MjQ4M2FlNjVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmNwcApAQCAt
MCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2Mv
Q0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093
blB0cjxDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ+IENDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRl
KGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3Qm
IHF1YWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGludCB3aWR0aCkKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDRGVidWdCb3JkZXJEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRS
ZWN0LCBjb2xvciwgd2lkdGgpKTsKK30KKworQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpDQ0RlYnVn
Qm9yZGVyRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwg
Y29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgaW50IHdpZHRoKQor
ICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1YWQ6OkRlYnVnQm9yZGVy
LCBxdWFkUmVjdCkKKyAgICAsIG1fY29sb3IoY29sb3IpCisgICAgLCBtX3dpZHRoKHdpZHRoKQor
eworICAgIGlmIChtX2NvbG9yLmFscGhhKCkgIT0gMSkKKyAgICAgICAgbV9xdWFkT3BhcXVlID0g
ZmFsc2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDIyNmFlZDc2ZjVjYWU1ZmYwM2VmZGUzOTA5MDI2M2I0MzU5MjljOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENDRGVidWdCb3JkZXJEcmF3UXVhZF9oCisjZGVmaW5lIENDRGVidWdCb3JkZXJEcmF3UXVhZF9o
CisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEND
RGVidWdCb3JkZXJEcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDQ0RlYnVnQm9yZGVyRHJhd1F1YWQpOworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENDRGVidWdCb3JkZXJEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENvbG9yJiwgaW50IHdpZHRoKTsKKworICAg
IGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH07CisgICAgaW50
IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorCitwcml2YXRlOgorICAgIENDRGVi
dWdCb3JkZXJEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3Qm
LCBjb25zdCBDb2xvciYsIGludCB3aWR0aCk7CisKKyAgICBDb2xvciBtX2NvbG9yOworICAgIGlu
dCBtX3dpZHRoOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmE2ZTIxMDg1ZWMxMGZjZjFjYTZkN2UwYWQzNTgyZjBjZjk4NjE5MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RHJhd1F1YWQuY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisKKyNpbmNsdWRlICJjYy9DQ0N1c3RvbUxh
eWVyRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKKyNp
bmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURy
YXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKKyNpbmNsdWRl
ICJjYy9DQ1RpbGVEcmF3UXVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDRHJhd1F1
YWQ6OkNDRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwg
TWF0ZXJpYWwgbWF0ZXJpYWwsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0KQorICAgIDogbV9zaGFy
ZWRRdWFkU3RhdGUoc2hhcmVkUXVhZFN0YXRlKQorICAgICwgbV9tYXRlcmlhbChtYXRlcmlhbCkK
KyAgICAsIG1fcXVhZFJlY3QocXVhZFJlY3QpCisgICAgLCBtX3F1YWRPcGFxdWUodHJ1ZSkKK3sK
KyAgICBBU1NFUlQobV9zaGFyZWRRdWFkU3RhdGUpOworICAgIEFTU0VSVChtX21hdGVyaWFsICE9
IEludmFsaWQpOworfQorCitjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqIENDRHJhd1F1YWQ6
OnRvRGVidWdCb3JkZXJEcmF3UXVhZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbWF0ZXJpYWwg
PT0gRGVidWdCb3JkZXIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDQ0RlYnVnQm9y
ZGVyRHJhd1F1YWQqPih0aGlzKTsKK30KKworY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQq
IENDRHJhd1F1YWQ6OnRvUmVuZGVyU3VyZmFjZURyYXdRdWFkKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9tYXRlcmlhbCA9PSBSZW5kZXJTdXJmYWNlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqPih0aGlzKTsKK30KKworY29uc3QgQ0NTb2xp
ZENvbG9yRHJhd1F1YWQqIENDRHJhd1F1YWQ6OnRvU29saWRDb2xvckRyYXdRdWFkKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9tYXRlcmlhbCA9PSBTb2xpZENvbG9yKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqPih0aGlzKTsKK30KKworY29uc3Qg
Q0NUaWxlRHJhd1F1YWQqIENDRHJhd1F1YWQ6OnRvVGlsZURyYXdRdWFkKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9tYXRlcmlhbCA9PSBUaWxlZENvbnRlbnQpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBDQ1RpbGVEcmF3UXVhZCo+KHRoaXMpOworfQorCitjb25zdCBDQ0N1c3RvbUxh
eWVyRHJhd1F1YWQqIENDRHJhd1F1YWQ6OnRvQ3VzdG9tTGF5ZXJEcmF3UXVhZCgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fbWF0ZXJpYWwgPT0gQ3VzdG9tTGF5ZXIpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBDQ0N1c3RvbUxheWVyRHJhd1F1YWQqPih0aGlzKTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
cmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NEcmF3UXVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4YmU0MmY3OTg3YTBkN2E2ZmYxZWY5OGJjM2U4Mzkx
Zjc2ZTY4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQ0NEcmF3UXVhZF9oCisjZGVmaW5lIENDRHJhd1F1YWRfaAorCisjaW5jbHVkZSAiY2Mv
Q0NTaGFyZWRRdWFkU3RhdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0Rl
YnVnQm9yZGVyRHJhd1F1YWQ7CitjbGFzcyBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDsKK2NsYXNz
IENDU29saWRDb2xvckRyYXdRdWFkOworY2xhc3MgQ0NUaWxlRHJhd1F1YWQ7CitjbGFzcyBDQ0N1
c3RvbUxheWVyRHJhd1F1YWQ7CisKKy8vIENDRHJhd1F1YWQgaXMgYSBiYWcgb2YgZGF0YSB1c2Vk
IGZvciBkcmF3aW5nIGEgcXVhZC4gQmVjYXVzZSBkaWZmZXJlbnQKKy8vIG1hdGVyaWFscyBuZWVk
IGRpZmZlcmVudCBiaXRzIG9mIHBlci1xdWFkIGRhdGEgdG8gcmVuZGVyLCBjbGFzc2VzIHRoYXQg
ZGVyaXZlCisvLyBmcm9tIENDRHJhd1F1YWQgc3RvcmUgYWRkaXRpb25hbCBkYXRhIGluIHRoZWly
IGRlcml2ZWQgaW5zdGFuY2UuIFRoZSBNYXRlcmlhbAorLy8gZW51bSBpcyB1c2VkIHRvICJzYWZl
bHkiIHVwY2FzdCB0byB0aGUgZGVyaXZlZCBjbGFzcy4KK2NsYXNzIENDRHJhd1F1YWQgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENDRHJhd1F1YWQpOworcHVibGljOgorICAgIGNvbnN0IElu
dFJlY3QmIHF1YWRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkUmVjdDsgfQorICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9z
aGFyZWRRdWFkU3RhdGUtPnF1YWRUcmFuc2Zvcm0oKTsgfQorICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0
YXRlLT5sYXllclRyYW5zZm9ybSgpOyB9CisgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPmxheWVyUmVjdCgpOyB9CisgICAgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+
Y2xpcFJlY3QoKTsgfQorICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJl
ZFF1YWRTdGF0ZS0+b3BhY2l0eSgpOyB9CisgICAgYm9vbCBkcmF3c09wYXF1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5pc09wYXF1ZSgpICYmIG1fcXVhZE9wYXF1ZSAmJiBv
cGFjaXR5KCkgPT0gMTsgfQorICAgIGJvb2wgaXNMYXllckF4aXNBbGlnbmVkSW50UmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5pc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0
KCk7IH0KKworICAgIGVudW0gTWF0ZXJpYWwgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBE
ZWJ1Z0JvcmRlciwKKyAgICAgICAgUmVuZGVyU3VyZmFjZSwKKyAgICAgICAgU29saWRDb2xvciwK
KyAgICAgICAgVGlsZWRDb250ZW50LAorCisgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBh
bmQgYWRkIHByb3BlciBtYXRlcmlhbCB0eXBlcyBmb3IgYWxsIGxheWVyIHR5cGVzCisgICAgICAg
IEN1c3RvbUxheWVyLAorICAgIH07CisKKyAgICBNYXRlcmlhbCBtYXRlcmlhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF0ZXJpYWw7IH0KKworICAgIGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCog
dG9EZWJ1Z0JvcmRlckRyYXdRdWFkKCkgY29uc3Q7CisgICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNl
RHJhd1F1YWQqIHRvUmVuZGVyU3VyZmFjZURyYXdRdWFkKCkgY29uc3Q7CisgICAgY29uc3QgQ0NT
b2xpZENvbG9yRHJhd1F1YWQqIHRvU29saWRDb2xvckRyYXdRdWFkKCkgY29uc3Q7CisgICAgY29u
c3QgQ0NUaWxlRHJhd1F1YWQqIHRvVGlsZURyYXdRdWFkKCkgY29uc3Q7CisgICAgY29uc3QgQ0ND
dXN0b21MYXllckRyYXdRdWFkKiB0b0N1c3RvbUxheWVyRHJhd1F1YWQoKSBjb25zdDsKKworcHJv
dGVjdGVkOgorICAgIENDRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBNYXRlcmlh
bCwgY29uc3QgSW50UmVjdCYpOworCisgICAgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIG1fc2hh
cmVkUXVhZFN0YXRlOworCisgICAgTWF0ZXJpYWwgbV9tYXRlcmlhbDsKKyAgICBJbnRSZWN0IG1f
cXVhZFJlY3Q7CisKKyAgICAvLyBCeSBkZWZhdWx0LCB0aGUgc2hhcmVkIHF1YWQgc3RhdGUgZGV0
ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHF1YWQgaXMKKyAgICAvLyBvcGFxdWUgb3Igbm90
LiBEZXJpdmVkIENDRHJhd1F1YWQgY2xhc3NlcyBjYW4gc2V0IHRoaXMgdG8gZmFsc2UgaWYgdGhl
eQorICAgIC8vIGtub3cgYSBxdWFkIGlzIHBhcnRpYWxseSB0cmFuc3BhcmVudCAoc3VjaCBhcyBm
b3IgYW50aWFsaWFzZWQgZWRnZXMpLgorICAgIGJvb2wgbV9xdWFkT3BhcXVlOworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBhZjA0MmU1NjY5YjQ2MmZiNmMw
OWRlNmZjM2Q0Y2Y0YjZkODRlOTJkLi5lN2I1MzhhYjk5OWViOGFmOWJiMjhjNzM1N2JkYjU1YmJl
NzhmNWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0zMiw2ICszMiw4IEBACiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NDdXN0b21M
YXllckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCiAj
aW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCkBAIC0xMTcsNiArMTE5LDMxIEBAIHZvaWQgQ0NMYXllckltcGw6OmRyYXcoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKikKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorUGFzc093
blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NMYXllckltcGw6OnNoYXJlZFF1YWRTdGF0ZSgpIGNv
bnN0Cit7CisgICAgSW50UmVjdCBsYXllckNsaXBSZWN0OworICAgIGlmICh1c2VzTGF5ZXJDbGlw
cGluZygpKQorICAgICAgICBsYXllckNsaXBSZWN0ID0gY2xpcFJlY3QoKTsKKyAgICByZXR1cm4g
Q0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShxdWFkVHJhbnNmb3JtKCksIGRyYXdUcmFuc2Zvcm0o
KSwgdmlzaWJsZUxheWVyUmVjdCgpLCBsYXllckNsaXBSZWN0LCBkcmF3T3BhY2l0eSgpLCBvcGFx
dWUoKSk7Cit9CisKK3ZvaWQgQ0NMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExpc3QmIHF1
YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQoreworICAg
IEludFJlY3QgbGF5ZXJSZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKKyAgICBxdWFkTGlzdC5h
cHBlbmQoQ0NDdXN0b21MYXllckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBsYXll
clJlY3QsIHRoaXMpKTsKK30KKwordm9pZCBDQ0xheWVySW1wbDo6YXBwZW5kRGVidWdCb3JkZXJR
dWFkKENDUXVhZExpc3QmIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVk
UXVhZFN0YXRlKSBjb25zdAoreworICAgIGlmICghZGVidWdCb3JkZXJDb2xvcigpLmFscGhhKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVidWdCb3JkZXJXaWR0aCgpIDw9IDApCisgICAg
ICAgIHJldHVybjsKKworICAgIEludFJlY3QgbGF5ZXJSZWN0KEludFBvaW50KCksIGJvdW5kcygp
KTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpjcmVhdGUoc2hh
cmVkUXVhZFN0YXRlLCBsYXllclJlY3QsIGRlYnVnQm9yZGVyQ29sb3IoKSwgZGVidWdCb3JkZXJX
aWR0aCgpKSk7Cit9CisKIHZvaWQgQ0NMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoTGF5
ZXJSZW5kZXJlckNocm9taXVtKikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE0
NywyOCArMTc0LDkgQEAgY29uc3QgSW50UmVjdCBDQ0xheWVySW1wbDo6Z2V0RHJhd1JlY3QoKSBj
b25zdAogICAgIHJldHVybiBtYXBwZWRSZWN0OwogfQogCi12b2lkIENDTGF5ZXJJbXBsOjpkcmF3
RGVidWdCb3JkZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorVHJhbnNm
b3JtYXRpb25NYXRyaXggQ0NMYXllckltcGw6OnF1YWRUcmFuc2Zvcm0oKSBjb25zdAogewotICAg
IHN0YXRpYyBmbG9hdCBnbE1hdHJpeFsxNl07Ci0gICAgaWYgKCFkZWJ1Z0JvcmRlckNvbG9yKCku
YWxwaGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6
Qm9yZGVyUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPmJvcmRlclByb2dyYW0oKTsK
LSAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKLSAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLQotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IGRyYXdUcmFuc2Zvcm0oKTsKLSAg
ICByZW5kZXJNYXRyaXguc2NhbGUzZChib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQo
KSwgMSk7Ci0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0b0dMTWF0cml4KCZnbE1hdHJpeFsw
XSwgbGF5ZXJSZW5kZXJlci0+cHJvamVjdGlvbk1hdHJpeCgpICogcmVuZGVyTWF0cml4KTsKLSAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT52ZXJ0ZXhT
aGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLCBmYWxzZSwgJmdsTWF0cml4WzBdLCAxKSk7Ci0KLSAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPmZyYWdtZW50U2hhZGVy
KCkuY29sb3JMb2NhdGlvbigpLCBkZWJ1Z0JvcmRlckNvbG9yKCkucmVkKCkgLyAyNTUuMCwgZGVi
dWdCb3JkZXJDb2xvcigpLmdyZWVuKCkgLyAyNTUuMCwgZGVidWdCb3JkZXJDb2xvcigpLmJsdWUo
KSAvIDI1NS4wLCAxKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+bGluZVdpZHRoKGRl
YnVnQm9yZGVyV2lkdGgoKSkpOwotCi0gICAgLy8gVGhlIGluZGljZXMgZm9yIHRoZSBsaW5lIGFy
ZSBzdG9yZWQgaW4gdGhlIHNhbWUgYXJyYXkgYXMgdGhlIHRyaWFuZ2xlIGluZGljZXMuCi0gICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6TElO
RV9MT09QLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDYgKiBzaXplb2Yo
dW5zaWduZWQgc2hvcnQpKSk7CisgICAgcmV0dXJuIGRyYXdUcmFuc2Zvcm0oKTsKIH0KIAogdm9p
ZCBDQ0xheWVySW1wbDo6d3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaAppbmRleCBlMmMwMGM4Njg5ODJhNzZjNjU4Y2FlODM0MTBlODViY2Nk
Y2Y4MDlmLi5hZTQ2MzBmYjliMWY4NTk2M2VmZjg2ZGYyMzA4MjQ3Y2Q0YmZiZjBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJm
YWNlLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CkBAIC03MCw2ICs3MSwxMCBAQCBwdWJsaWM6CiAgICAgaW50IGRlYnVnSUQoKSBjb25zdCB7
IHJldHVybiBtX2RlYnVnSUQ7IH0KICNlbmRpZgogCisgICAgUGFzc093blB0cjxDQ1NoYXJlZFF1
YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFwcGVu
ZFF1YWRzKENDUXVhZExpc3QmLCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSopOworICAgIHZvaWQg
YXBwZW5kRGVidWdCb3JkZXJRdWFkKENDUXVhZExpc3QmLCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSopIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVt
Kik7CiAgICAgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZv
aWQgYmluZENvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKQEAgLTEzMSw4
ICsxMzYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREZWJ1Z0JvcmRlcldpZHRoKGZsb2F0KTsK
ICAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0JvcmRl
cldpZHRoOyB9CiAKLSAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlcihMYXllclJlbmRlcmVyQ2hyb21p
dW0qKTsKLQogICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVuZGVyU3VyZmFjZS5nZXQoKTsgfQogICAgIHZvaWQgY3JlYXRlUmVuZGVyU3VyZmFj
ZSgpOwogICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlKCkgeyBtX3JlbmRlclN1cmZhY2UuY2xl
YXIoKTsgfQpAQCAtMjAwLDYgKzIwMyw5IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAgICAg
c3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpOwogCisgICAg
Ly8gVHJhbnNmb3JtYXRpb24gdXNlZCB0byB0cmFuc2Zvcm0gcXVhZHMgcHJvdmlkZWQgaW4gYXBw
ZW5kUXVhZHMuCisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkVHJhbnNmb3Jt
KCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQYXJlbnQoQ0NMYXllckltcGwqIHBh
cmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQogICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hy
b25pemVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBlMGNk
Mzg5ZGM2ZjhkZjk0MDhhOWMwNTUxZTQwNmVmYmQxZGYyYjBkLi4xMjFkMDVjYzQ5NzdjZjc5MDg5
ODI5NzE4NTEzZGFiOTQzOTEzOTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcApAQCAtMzAsOCArMzAsMTEgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZl
bnQuaCIKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNp
bmNsdWRlICJjYy9DQ1BhZ2VTY2FsZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVy
U3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCiAjaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTEyNiwxNCArMTI5LDEyNiBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRh
cmdldFBvc2l0aW9uLAogICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgp
OwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFj
ZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KQoreworICAgIC8vIEZvciBub3csIHdlIHVzZSBkYW1hZ2UgdHJhY2tp
bmcgdG8gY29tcHV0ZSBhIGdsb2JhbCBzY2lzc29yLiBUbyBkbyB0aGlzLCB3ZSBtdXN0CisgICAg
Ly8gY29tcHV0ZSBhbGwgZGFtYWdlIHRyYWNraW5nIGJlZm9yZSBkcmF3aW5nIGFueXRoaW5nLCBz
byB0aGF0IHdlIGtub3cgdGhlIHJvb3QKKyAgICAvLyBkYW1hZ2UgcmVjdC4gVGhlIHJvb3QgZGFt
YWdlIHJlY3QgaXMgdGhlbiB1c2VkIHRvIHNjaXNzb3IgZWFjaCBzdXJmYWNlLgorCisgICAgZm9y
IChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBz
dXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBs
KiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRl
eF0uZ2V0KCk7CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRl
clN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBBU1NFUlQocmVuZGVyU3Vy
ZmFjZSk7CisgICAgICAgIHJlbmRlclN1cmZhY2UtPmRhbWFnZVRyYWNrZXIoKS0+dXBkYXRlRGFt
YWdlUmVjdEZvck5leHRGcmFtZShyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgcmVuZGVyU3Vy
ZmFjZUxheWVyLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKTsKKyAgICB9
Cit9CisKK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21wdXRlU2NyZWVuU3BhY2VUcmFu
c2Zvcm1Gb3JTdXJmYWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIpCit7CisgICAg
Ly8gVGhlIGxheWVyJ3Mgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybSBjYW4gYmUgd3JpdHRlbiBhczoK
KyAgICAvLyAgIGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBzdXJmYWNlU2NyZWVuU3BhY2VU
cmFuc2Zvcm0gKiBsYXllck9yaWdpblRyYW5zZm9ybQorICAgIC8vIFNvLCB0byBjb21wdXRlIHRo
ZSBzdXJmYWNlIHNjcmVlbiBzcGFjZSwgd2UgY2FuIGRvOgorICAgIC8vICAgc3VyZmFjZVNjcmVl
blNwYWNlVHJhbnNmb3JtID0gbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSAqIGludmVyc2UobGF5
ZXJPcmlnaW5UcmFuc2Zvcm0pCisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck9yaWdp
blRyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+ZHJhd1RyYW5zZm9ybSgpOworICAgIGxh
eWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMC41ICogcmVuZGVyU3VyZmFjZUxheWVyLT5i
b3VuZHMoKS53aWR0aCgpLCAtMC41ICogcmVuZGVyU3VyZmFjZUxheWVyLT5ib3VuZHMoKS5oZWln
aHQoKSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNm
b3JtID0gcmVuZGVyU3VyZmFjZUxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpOworICAgIHN1
cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybS5tdWx0aXBseShsYXllck9yaWdpblRyYW5zZm9ybS5p
bnZlcnNlKCkpOworCisgICAgcmV0dXJuIHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybTsKK30K
Kworc3RhdGljIEZsb2F0UmVjdCBkYW1hZ2VJblN1cmZhY2VTcGFjZShDQ0xheWVySW1wbCogcmVu
ZGVyU3VyZmFjZUxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0KQoreworICAg
IEZsb2F0UmVjdCBzdXJmYWNlRGFtYWdlUmVjdDsKKyAgICAvLyBGb3Igbm93LCB3ZSBjb25zZXJ2
YXRpdmVseSB1c2UgdGhlIHJvb3QgZGFtYWdlIGFzIHRoZSBkYW1hZ2UgZm9yCisgICAgLy8gYWxs
IHN1cmZhY2VzLCBleGNlcHQgcGVyc3BlY3RpdmUgdHJhbnNmb3Jtcy4KKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IGNvbXB1dGVTY3JlZW5TcGFjZVRyYW5z
Zm9ybUZvclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyKTsKKyAgICBpZiAoc2NyZWVuU3BhY2VU
cmFuc2Zvcm0uaGFzUGVyc3BlY3RpdmUoKSkgeworICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9q
ZWN0aW9ucyBkbyBub3QgcGxheSBuaWNlIHdpdGggbWFwUmVjdCBvZgorICAgICAgICAvLyBpbnZl
cnNlIHRyYW5zZm9ybXMuIEluIHRoaXMgdW5jb21tb24gY2FzZSwgaXRzIHNpbXBsZXIgdG8KKyAg
ICAgICAgLy8ganVzdCByZWRyYXcgdGhlIGVudGlyZSBzdXJmYWNlLgorICAgICAgICAvLyBGSVhN
RTogdXNlIGNhbGN1bGF0ZVZpc2libGVSZWN0IHRvIGhhbmRsZSBwcm9qZWN0aW9ucy4KKyAgICAg
ICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5y
ZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gcmVuZGVyU3VyZmFj
ZS0+Y29udGVudFJlY3QoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybS5p
bnZlcnNlKCk7CisgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNjcmVlblNwYWNl
VHJhbnNmb3JtLm1hcFJlY3Qocm9vdERhbWFnZVJlY3QpOworICAgIH0KKyAgICByZXR1cm4gc3Vy
ZmFjZURhbWFnZVJlY3Q7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRl
UmVuZGVyUGFzc2VzKFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+JiBwYXNzZXMpCit7Cisg
ICAgQ0NMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIoKSk7CisKKyAgICBpZiAoIXJvb3RMYXllcigpLT5y
ZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIHJvb3RMYXllcigpLT5jcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CisgICAgcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKS0+Y2xlYXJMYXllckxpc3QoKTsK
KyAgICByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0
KEludFBvaW50KCksIHZpZXdwb3J0U2l6ZSgpKSk7CisKKyAgICByb290TGF5ZXIoKS0+c2V0Q2xp
cFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCB2aWV3cG9ydFNpemUoKSkpOworCisgICAgeworICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAgICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7CisgICAg
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNp
YmlsaXR5KHJvb3RMYXllcigpLCByb290TGF5ZXIoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFj
ZSgpLT5sYXllckxpc3QoKSwgJm1fbGF5ZXJTb3J0ZXIsIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgfQorCisgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwKQorICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1
cmZhY2VzKHJvb3RMYXllcigpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBGbG9hdFJl
Y3Qgcm9vdERhbWFnZVJlY3QgPSByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VU
cmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBmb3IgKGludCBzdXJmYWNlSW5k
ZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAw
IDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VM
YXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKKyAgICAg
ICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5y
ZW5kZXJTdXJmYWNlKCk7CisKKyAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcGFzcyA9IEND
UmVuZGVyUGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UpOworCisgICAgICAgIEZsb2F0UmVjdCBz
dXJmYWNlRGFtYWdlUmVjdDsKKyAgICAgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMo
KS51c2luZ1BhcnRpYWxTd2FwKQorICAgICAgICAgICAgc3VyZmFjZURhbWFnZVJlY3QgPSBkYW1h
Z2VJblN1cmZhY2VTcGFjZShyZW5kZXJTdXJmYWNlTGF5ZXIsIHJvb3REYW1hZ2VSZWN0KTsKKyAg
ICAgICAgcGFzcy0+c2V0U3VyZmFjZURhbWFnZVJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpOworCisg
ICAgICAgIGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXll
ckxpc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRl
eCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAgICAgICAgQ0NMYXll
ckltcGwqIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOworICAgICAgICAgICAg
aWYgKGxheWVyLT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5k
ZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldChsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5p
ZCgpKSkgeworICAgICAgICAgICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFj
ZUxheWVyKGxheWVyKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JMYXllcihsYXllcik7CisgICAgICAg
IH0KKworICAgICAgICBwYXNzZXMuYXBwZW5kKHBhc3MucmVsZWFzZSgpKTsKKyAgICB9Cit9CisK
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCiB7CiAgICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsKICAgICBBU1NF
UlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIo
KSkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7CisKKyAgICBpZiAoIXJv
b3RMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8T3duUHRyPENDUmVuZGVy
UGFzcz4gPiBwYXNzZXM7CisgICAgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CisKKyAg
ICBtX2xheWVyUmVuZGVyZXItPmJlZ2luRHJhd2luZ0ZyYW1lKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwYXNzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
ZHJhd1JlbmRlclBhc3MocGFzc2VzW2ldLmdldCgpKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmZp
bmlzaERyYXdpbmdGcmFtZSgpOwogCiAgICAgKyttX2ZyYW1lTnVtYmVyOworCisgICAgLy8gVGhl
IG5leHQgZnJhbWUgc2hvdWxkIHN0YXJ0IGJ5IGFzc3VtaW5nIG5vdGhpbmcgaGFzIGNoYW5nZWQs
IGFuZCBjaGFuZ2VzIGFyZSBub3RlZCBhcyB0aGV5IG9jY3VyLgorICAgIHJvb3RMYXllcigpLT5y
ZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmZpbmlzaEFsbFJlbmRlcmluZygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgKaW5kZXggODg3YzdlNjU1NzdlNzllMGUyOGFkMDc4OGJlMjMyZDc1N2E0YzIzZi4u
YTdhZTAzODhiYzAwZjZiMGQwNmQzNmQ3MjI0ZDY0ODg3ZDFkYzhlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMjYsOCArMjYsMTAgQEAKICNkZWZpbmUgQ0NMYXll
clRyZWVIb3N0SW1wbF9oCiAKICNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgorI2luY2x1
ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKKyNpbmNsdWRlICJjYy9DQ1Jl
bmRlclBhc3MuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKICNpZiBVU0UoU0tJQSkKQEAg
LTEyNCwxMCArMTI2LDE0IEBAIHByb3RlY3RlZDoKICAgICBpbnQgbV9mcmFtZU51bWJlcjsKIAog
cHJpdmF0ZToKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXll
ckxpc3Q7CisKICAgICB2b2lkIHNldFBhZ2VTY2FsZURlbHRhKGZsb2F0KTsKICAgICB2b2lkIGFw
cGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVyKCk7CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxz
Rm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0KTsKICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0
aW9uKCk7CisgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiBy
b290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
CisgICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoVmVjdG9yPE93blB0cjxDQ1JlbmRlclBh
c3M+ID4mKTsKIAogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5k
ZXJlcjsKICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1wbDsKQEAgLTE0NSw2
ICsxNTEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9waW5jaEdlc3R1cmVBY3RpdmU7CiAKICAg
ICBPd25QdHI8Q0NQYWdlU2NhbGVBbmltYXRpb24+IG1fcGFnZVNjYWxlQW5pbWF0aW9uOworCisg
ICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29ydGVyOwogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxMzg5N2Y3YWU2N2Y2OWEyNmY5OGVmYmZkZGZlNDNhMzY4
NTgzODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKKworI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NSZW5kZXJQYXNzPiBDQ1JlbmRlclBhc3M6OmNyZWF0
ZShDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDQ1JlbmRlclBhc3ModGFyZ2V0U3VyZmFjZSkpOworfQorCitDQ1JlbmRlclBhc3M6OkND
UmVuZGVyUGFzcyhDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCisgICAgOiBtX3Rhcmdl
dFN1cmZhY2UodGFyZ2V0U3VyZmFjZSkKK3sKKyAgICBBU1NFUlQobV90YXJnZXRTdXJmYWNlKTsK
K30KKwordm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yTGF5ZXIoQ0NMYXllckltcGwq
IGxheWVyKQoreworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRl
ID0gbGF5ZXItPnNoYXJlZFF1YWRTdGF0ZSgpOworICAgIGxheWVyLT5hcHBlbmRRdWFkcyhtX3F1
YWRMaXN0LCBzaGFyZWRRdWFkU3RhdGUuZ2V0KCkpOworICAgIGxheWVyLT5hcHBlbmREZWJ1Z0Jv
cmRlclF1YWQobV9xdWFkTGlzdCwgc2hhcmVkUXVhZFN0YXRlLmdldCgpKTsKKyAgICBtX3NoYXJl
ZFF1YWRTdGF0ZUxpc3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOworfQorCit2
b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXll
ckltcGwqIGxheWVyKQoreworICAgIC8vIEZJWE1FOiByZW5kZXIgc3VyZmFjZSBsYXllcnMgc2hv
dWxkIGJlIGEgQ0NMYXllckltcGwtZGVyaXZlZCBjbGFzcyBhbmQKKyAgICAvLyBub3QgYmUgaGFu
ZGxlZCBzcGVjaWFsbHkgaGVyZS4KKyAgICBDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UgPSBsYXll
ci0+cmVuZGVyU3VyZmFjZSgpOworICAgIGJvb2wgaXNPcGFxdWUgPSBmYWxzZTsKKyAgICBPd25Q
dHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IENDU2hhcmVkUXVhZFN0YXRl
OjpjcmVhdGUoc3VyZmFjZS0+ZHJhd1RyYW5zZm9ybSgpLCBzdXJmYWNlLT5kcmF3VHJhbnNmb3Jt
KCksIHN1cmZhY2UtPmNvbnRlbnRSZWN0KCksIHN1cmZhY2UtPmNsaXBSZWN0KCksIHN1cmZhY2Ut
PmRyYXdPcGFjaXR5KCksIGlzT3BhcXVlKTsKKyAgICBtX3F1YWRMaXN0LmFwcGVuZChDQ1JlbmRl
clN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+
Y29udGVudFJlY3QoKSwgbGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0KCkpKTsKKyAgICBtX3NoYXJl
ZFF1YWRTdGF0ZUxpc3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOworfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclBhc3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyUGFzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2MTk3MzY2NmZjNWYwODliZWQ1MDdi
MDAyZTQxZWYyMWZjNmI1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaApAQCAtMCwwICsxLDY2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDQ1JlbmRlclBhc3NfaAorI2RlZmluZSBDQ1JlbmRlclBhc3NfaAor
CisjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENDTGF5ZXJJbXBsOworY2xhc3MgQ0NSZW5kZXJTdXJmYWNlOworY2xhc3MgQ0NTaGFyZWRRdWFk
U3RhdGU7CisKK3R5cGVkZWYgVmVjdG9yPE93blB0cjxDQ0RyYXdRdWFkPiA+IENDUXVhZExpc3Q7
CisKK2NsYXNzIENDUmVuZGVyUGFzcyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NSZW5k
ZXJQYXNzKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNy
ZWF0ZShDQ1JlbmRlclN1cmZhY2UqKTsKKworICAgIHZvaWQgYXBwZW5kUXVhZHNGb3JMYXllcihD
Q0xheWVySW1wbCopOworICAgIHZvaWQgYXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIo
Q0NMYXllckltcGwqKTsKKworICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0KCkgY29uc3Qg
eyByZXR1cm4gbV9xdWFkTGlzdDsgfQorICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0U3VyZmFjZTsgfQorCisgICAgdm9pZCBzZXRTdXJm
YWNlRGFtYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KSB7IG1fc3Vy
ZmFjZURhbWFnZVJlY3QgPSBzdXJmYWNlRGFtYWdlUmVjdDsgfQorICAgIGNvbnN0IEZsb2F0UmVj
dCYgc3VyZmFjZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VEYW1hZ2VSZWN0
OyB9CisKK3ByaXZhdGU6CisgICAgQ0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSopOworCisg
ICAgQ0NSZW5kZXJTdXJmYWNlKiBtX3RhcmdldFN1cmZhY2U7CisgICAgQ0NRdWFkTGlzdCBtX3F1
YWRMaXN0OworICAgIFZlY3RvcjxPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+ID4gbV9zaGFyZWRR
dWFkU3RhdGVMaXN0OworICAgIEZsb2F0UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0OworfTsKKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jODlhMTcyZDE0NGJhYTVmM2MwYTVjMGY4ZWRmNTg3ZTFiM2NkYzliCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ+IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFy
ZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIEND
TGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3sK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKHNoYXJlZFF1
YWRTdGF0ZSwgcXVhZFJlY3QsIGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCkpOworfQorCitDQ1Jl
bmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFy
ZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIEND
TGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKKyAg
ICA6IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNl
LCBxdWFkUmVjdCkKKyAgICAsIG1fbGF5ZXIobGF5ZXIpCisgICAgLCBtX3N1cmZhY2VEYW1hZ2VS
ZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KQoreworICAgIEFTU0VSVChtX2xheWVyKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzUz
NWQzMmRhMjk3ZjgzZGY2NWYwNTQ4M2U5M2M1YWY5ZGI3ODVmYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZURyYXdRdWFkLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWRfaAorI2RlZmluZSBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZF9oCisKKyNp
bmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVySW1wbDsKKworY2xhc3MgQ0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENDUmVuZGVyU3VyZmFjZURyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBjb25zdCBGbG9hdFJlY3Qm
IHN1cmZhY2VEYW1hZ2VSZWN0KTsKKworICAgIENDTGF5ZXJJbXBsKiBsYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fbGF5ZXI7IH0KKworICAgIC8vIFRoZSBzdXJmYWNlIGRhbWFnZSByZWN0IGZvciB0
aGUgdGFyZ2V0IHN1cmZhY2UgdGhpcyBxdWFkIGRyYXdzIGludG8uCisgICAgLy8gRklYTUU6IFRo
aXMgY2FuIGJlIHJlbW92ZWQgb25jZSByZW5kZXIgc3VyZmFjZXMgZ2V0IHRoZWlyIG93biBsYXll
ciB0eXBlLgorICAgIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3N1cmZhY2VEYW1hZ2VSZWN0OyB9CisKK3ByaXZhdGU6CisgICAgQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0Jiwg
Q0NMYXllckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKKworICAg
IENDTGF5ZXJJbXBsKiBtX2xheWVyOworICAgIEZsb2F0UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0
OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45YmY3NjkyNWJiOGNmMmJiYWM1MzljMDE0MzFjNTU3ODQzMzlmZDA1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDU2hhcmVk
UXVhZFN0YXRlOjpjcmVhdGUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zv
cm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50
UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwg
Ym9vbCBvcGFxdWUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1NoYXJlZFF1YWRTdGF0
ZShxdWFkVHJhbnNmb3JtLCBsYXllclRyYW5zZm9ybSwgbGF5ZXJSZWN0LCBjbGlwUmVjdCwgb3Bh
Y2l0eSwgb3BhcXVlKSk7Cit9CisKK0NDU2hhcmVkUXVhZFN0YXRlOjpDQ1NoYXJlZFF1YWRTdGF0
ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3Qs
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKKyAg
ICA6IG1fcXVhZFRyYW5zZm9ybShxdWFkVHJhbnNmb3JtKQorICAgICwgbV9sYXllclRyYW5zZm9y
bShsYXllclRyYW5zZm9ybSkKKyAgICAsIG1fbGF5ZXJSZWN0KGxheWVyUmVjdCkKKyAgICAsIG1f
Y2xpcFJlY3QoY2xpcFJlY3QpCisgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKKyAgICAsIG1fb3Bh
cXVlKG9wYXF1ZSkKK3sKK30KKworYm9vbCBDQ1NoYXJlZFF1YWRTdGF0ZTo6aXNMYXllckF4aXNB
bGlnbmVkSW50UmVjdCgpIGNvbnN0Cit7CisgICAgLy8gTm90ZTogdGhpcyBkb2Vzbid0IGNvbnNp
ZGVyIHdpbmRvdyBvciBwcm9qZWN0aW9uIG1hdHJpY2VzLgorICAgIC8vIEFzc3VtZSB0aGF0IHRo
ZXkncmUgb3J0aG9ub3JtYWwgYW5kIGhhdmUgaW50ZWdlciBzY2FsZXMgYW5kIHRyYW5zbGF0aW9u
cy4KKyAgICBGbG9hdFF1YWQgcXVhZCA9IHF1YWRUcmFuc2Zvcm0oKS5tYXBRdWFkKEZsb2F0UXVh
ZChsYXllclJlY3QoKSkpOworICAgIHJldHVybiBxdWFkLmlzUmVjdGlsaW5lYXIoKSAmJiBxdWFk
LmJvdW5kaW5nQm94KCkuaXNFeHByZXNzaWJsZUFzSW50UmVjdCgpOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJl
ZFF1YWRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaGFyZWRRdWFkU3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNzg1NzU3ZjlkYjk0YjFiMzIwNjFm
ZDhkOGIyMWM0MGJlZjFmZjBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaApAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1NoYXJlZFF1YWRTdGF0ZV9oCisjZGVmaW5lIENDU2hh
cmVkUXVhZFN0YXRlX2gKKworI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkludFJl
Y3QuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NTaGFyZWRRdWFk
U3RhdGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDU2hhcmVkUXVhZFN0YXRlKTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKTsKKworICAg
IC8vIFRoZSB0cmFuc2Zvcm0gdGhhdCBxdWFkcyBpbiBhIENDRHJhd1F1YWQgc2hvdWxkIGJlIHRy
YW5zZm9ybWVkIHdpdGguCisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3F1YWRUcmFuc2Zvcm07IH0KKyAgICAvLyBUaGUgdHJh
bnNmb3JtIHRoYXQgbGF5ZXJSZWN0KCkgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIHdpdGguCisgICAg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9sYXllclRyYW5zZm9ybTsgfQorICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGF5ZXJSZWN0OyB9CisgICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CisKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29u
c3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3BhcXVlOyB9CisgICAgYm9vbCBpc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KCkgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgQ0NTaGFyZWRRdWFkU3RhdGUoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXll
clRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlw
UmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpOworCisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9xdWFkVHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbGF5ZXJU
cmFuc2Zvcm07CisgICAgSW50UmVjdCBtX2xheWVyUmVjdDsKKyAgICBJbnRSZWN0IG1fY2xpcFJl
Y3Q7CisgICAgZmxvYXQgbV9vcGFjaXR5OworICAgIGJvb2wgbV9vcGFxdWU7Cit9OworCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQxYzcyOWE0MTU3ZGQyMjE3MmI2YzgzMWQ3NzAwY2M0MjBiNGVlNmEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nv
bGlkQ29sb3JEcmF3UXVhZC5jcHAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ1NvbGlkQ29sb3JEcmF3UXVhZD4gQ0NTb2xp
ZENvbG9yRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVh
ZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorewor
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NTb2xpZENvbG9yRHJhd1F1YWQoc2hhcmVkUXVhZFN0
YXRlLCBxdWFkUmVjdCwgY29sb3IpKTsKK30KKworQ0NTb2xpZENvbG9yRHJhd1F1YWQ6OkNDU29s
aWRDb2xvckRyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUs
IGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgOiBDQ0Ry
YXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6U29saWRDb2xvciwgcXVhZFJlY3Qp
CisgICAgLCBtX2NvbG9yKGNvbG9yKQoreworICAgIGlmIChtX2NvbG9yLmFscGhhKCkgIT0gMSkK
KyAgICAgICAgbV9xdWFkT3BhcXVlID0gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckRyYXdR
dWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nv
bGlkQ29sb3JEcmF3UXVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwMjBkZjY4NDlhOGEwM2NiYThmMjJiMDg4
NTcwYzVlMWI4MzZjZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oCkBAIC0wLDAgKzEs
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENDU29saWRDb2xvckRyYXdRdWFkX2gKKyNkZWZpbmUgQ0NT
b2xpZENvbG9yRHJhd1F1YWRfaAorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJjYy9D
Q0RyYXdRdWFkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDQ1NvbGlkQ29sb3JEcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFk
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1NvbGlkQ29sb3JEcmF3UXVhZCk7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NTb2xpZENvbG9yRHJhd1F1YWQ+IGNyZWF0ZShj
b25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBDb2xvciYpOwor
CisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfTsKKwor
cHJpdmF0ZToKKyAgICBDQ1NvbGlkQ29sb3JEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBDb2xvciYpOworCisgICAgQ29sb3IgbV9jb2xvcjsK
K307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uN2NmYzVkOTFiNGU5MWFhMWY0OTdmNzBjZjQ2NjM4MmNlMWZmZTNjYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZURyYXdRdWFkLmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1YWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQYXNzT3duUHRyPENDVGlsZURyYXdRdWFkPiBDQ1RpbGVEcmF3UXVhZDo6Y3JlYXRlKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1
YWRSZWN0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50UG9pbnQmIHRleHR1
cmVPZmZzZXQsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBHQzNEaW50IHRleHR1cmVGaWx0
ZXIsIGJvb2wgc3dpenpsZUNvbnRlbnRzLCBib29sIGxlZnRFZGdlQUEsIGJvb2wgdG9wRWRnZUFB
LCBib29sIHJpZ2h0RWRnZUFBLCBib29sIGJvdHRvbUVkZ2VBQSkKK3sKKyAgICByZXR1cm4gYWRv
cHRQdHIobmV3IENDVGlsZURyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRleHR1
cmVJZCwgdGV4dHVyZU9mZnNldCwgdGV4dHVyZVNpemUsIHRleHR1cmVGaWx0ZXIsIHN3aXp6bGVD
b250ZW50cywgbGVmdEVkZ2VBQSwgdG9wRWRnZUFBLCByaWdodEVkZ2VBQSwgYm90dG9tRWRnZUFB
KSk7Cit9CisKK0NDVGlsZURyYXdRdWFkOjpDQ1RpbGVEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgUGxhdGZv
cm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFBvaW50JiB0ZXh0dXJlT2Zmc2V0LCBjb25z
dCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgR0MzRGludCB0ZXh0dXJlRmlsdGVyLCBib29sIHN3aXp6
bGVDb250ZW50cywgYm9vbCBsZWZ0RWRnZUFBLCBib29sIHRvcEVkZ2VBQSwgYm9vbCByaWdodEVk
Z2VBQSwgYm9vbCBib3R0b21FZGdlQUEpCisgICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0
ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBxdWFkUmVjdCkKKyAgICAsIG1fdGV4dHVyZUlk
KHRleHR1cmVJZCkKKyAgICAsIG1fdGV4dHVyZU9mZnNldCh0ZXh0dXJlT2Zmc2V0KQorICAgICwg
bV90ZXh0dXJlU2l6ZSh0ZXh0dXJlU2l6ZSkKKyAgICAsIG1fdGV4dHVyZUZpbHRlcih0ZXh0dXJl
RmlsdGVyKQorICAgICwgbV9zd2l6emxlQ29udGVudHMoc3dpenpsZUNvbnRlbnRzKQorICAgICwg
bV9sZWZ0RWRnZUFBKGxlZnRFZGdlQUEpCisgICAgLCBtX3RvcEVkZ2VBQSh0b3BFZGdlQUEpCisg
ICAgLCBtX3JpZ2h0RWRnZUFBKHJpZ2h0RWRnZUFBKQorICAgICwgbV9ib3R0b21FZGdlQUEoYm90
dG9tRWRnZUFBKQoreworICAgIGlmIChpc0FudGlhbGlhc2VkKCkpCisgICAgICAgIG1fcXVhZE9w
YXF1ZSA9IGZhbHNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xMmU1M2RiZDJhOGY1ZDFmYjNkMzMzMTliMmMwMzExZWM1M2Y1Y2E4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxl
RHJhd1F1YWQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1RpbGVEcmF3UXVh
ZF9oCisjZGVmaW5lIENDVGlsZURyYXdRdWFkX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMz
RC5oIgorI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDVGlsZURyYXdRdWFkIDogcHVi
bGljIENDRHJhd1F1YWQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDVGlsZURyYXdRdWFk
KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RpbGVEcmF3UXVhZD4gY3JlYXRl
KGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRQb2ludCYgdGV4dHVyZU9mZnNldCwgY29u
c3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIEdDM0RpbnQgdGV4dHVyZUZpbHRlciwgYm9vbCBzd2l6
emxlQ29udGVudHMsIGJvb2wgbGVmdEVkZ2VBQSwgYm9vbCB0b3BFZGdlQUEsIGJvb2wgcmlnaHRF
ZGdlQUEsIGJvb2wgYm90dG9tRWRnZUFBKTsKKworICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVy
ZUlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICBJbnRQb2ludCB0ZXh0dXJl
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlT2Zmc2V0OyB9CisgICAgSW50U2l6ZSB0
ZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemU7IH0KKyAgICBHQzNEaW50
IHRleHR1cmVGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVGaWx0ZXI7IH0KKyAgICBi
b29sIHN3aXp6bGVDb250ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fc3dpenpsZUNvbnRlbnRzOyB9
CisKKyAgICBib29sIGxlZnRFZGdlQUEoKSBjb25zdCB7IHJldHVybiBtX2xlZnRFZGdlQUE7IH0K
KyAgICBib29sIHRvcEVkZ2VBQSgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wRWRnZUFBOyB9CisgICAg
Ym9vbCByaWdodEVkZ2VBQSgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHRFZGdlQUE7IH0KKyAgICBi
b29sIGJvdHRvbUVkZ2VBQSgpIGNvbnN0IHsgcmV0dXJuIG1fYm90dG9tRWRnZUFBOyB9CisKKyAg
ICBib29sIGlzQW50aWFsaWFzZWQoKSBjb25zdCB7IHJldHVybiBsZWZ0RWRnZUFBKCkgfHwgdG9w
RWRnZUFBKCkgfHwgcmlnaHRFZGdlQUEoKSB8fCBib3R0b21FZGdlQUEoKTsgfQorCitwcml2YXRl
OgorICAgIENDVGlsZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50
UmVjdCYgcXVhZFJlY3QsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRQb2lu
dCYgdGV4dHVyZU9mZnNldCwgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIEdDM0RpbnQgdGV4
dHVyZUZpbHRlciwgYm9vbCBzd2l6emxlQ29udGVudHMsIGJvb2wgbGVmdEVkZ2VBQSwgYm9vbCB0
b3BFZGdlQUEsIGJvb2wgcmlnaHRFZGdlQUEsIGJvb2wgYm90dG9tRWRnZUFBKTsKKworICAgIFBs
YXRmb3JtM0RPYmplY3QgbV90ZXh0dXJlSWQ7CisgICAgSW50UG9pbnQgbV90ZXh0dXJlT2Zmc2V0
OworICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKKyAgICBHQzNEaW50IG1fdGV4dHVyZUZpbHRl
cjsKKyAgICBib29sIG1fc3dpenpsZUNvbnRlbnRzOworICAgIGJvb2wgbV9sZWZ0RWRnZUFBOwor
ICAgIGJvb2wgbV90b3BFZGdlQUE7CisgICAgYm9vbCBtX3JpZ2h0RWRnZUFBOworICAgIGJvb2wg
bV9ib3R0b21FZGdlQUE7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5
ZXJJbXBsLmNwcAppbmRleCA3MjA0NmJiOGJlNDRjMGRhMGJkMzA5NGQ3YmI2Y2Q3ZjQ0MDEyMTY1
Li40OTA2NjU0YzAwMWQ0YTk2ODU5NDk3YTI5MzgzNWI4MzA0NmJjNDRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAtMzAsNyArMzAsOCBAQAogI2luY2x1ZGUgImNjL0ND
VGlsZWRMYXllckltcGwuaCIKIAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgot
I2luY2x1ZGUgImNjL0NDTGF5ZXJRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJh
d1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1RpbGVEcmF3UXVhZC5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtNTMsNiArNTQsNyBA
QCBwcml2YXRlOgogQ0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbChpbnQgaWQpCiAg
ICAgOiBDQ0xheWVySW1wbChpZCkKICAgICAsIG1fc2tpcHNEcmF3KHRydWUpCisgICAgLCBtX2Nv
bnRlbnRzU3dpenpsZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTk3LDcgKzk5LDcgQEAgRHJhd2FibGVU
aWxlKiBDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGVUaWxlKGludCBpLCBpbnQgaikKICAgICByZXR1
cm4gdGlsZS5nZXQoKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NUaWxlZExheWVySW1w
bDo6dGlsaW5nVHJhbnNmb3JtKCkgY29uc3QKK1RyYW5zZm9ybWF0aW9uTWF0cml4IENDVGlsZWRM
YXllckltcGw6OnF1YWRUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHRyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm0oKTsKIApAQCAtMTEyLDYzICsxMTQsNTAgQEAg
VHJhbnNmb3JtYXRpb25NYXRyaXggQ0NUaWxlZExheWVySW1wbDo6dGlsaW5nVHJhbnNmb3JtKCkg
Y29uc3QKICAgICByZXR1cm4gdHJhbnNmb3JtOwogfQogCi12b2lkIENDVGlsZWRMYXllckltcGw6
OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQordm9pZCBDQ1RpbGVk
TGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFy
ZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKIHsKLSAgICBjb25zdCBJbnRSZWN0JiBsYXll
clJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CisgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAKLSAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fdGls
ZXIgfHwgbV90aWxlci0+aXNFbXB0eSgpIHx8IGxheWVyUmVjdC5pc0VtcHR5KCkgfHwgIWxheWVy
UmVuZGVyZXIpCisgICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX3RpbGVyIHx8IG1fdGlsZXItPmlz
RW1wdHkoKSB8fCBjb250ZW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtID0gdGlsaW5nVHJhbnNmb3JtKCk7
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlTWF0cml4ID0gVHJhbnNmb3JtYXRpb25N
YXRyaXgobGF5ZXJSZW5kZXJlci0+d2luZG93TWF0cml4KCkgKiBsYXllclJlbmRlcmVyLT5wcm9q
ZWN0aW9uTWF0cml4KCkgKiBsYXllclRyYW5zZm9ybSkudG8yZFRyYW5zZm9ybSgpOworICAgIGlu
dCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1Rp
bGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIElu
dFJlY3QgbGF5ZXJSZWN0ID0gbV90aWxlci0+Y29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50
UmVjdCk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAg
ICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBEcmF3
YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CisgICAgICAgICAgICBJbnRSZWN0IHRpbGVS
ZWN0ID0gbV90aWxlci0+dGlsZUJvdW5kcyhpLCBqKTsKKyAgICAgICAgICAgIEludFJlY3QgZGlz
cGxheVJlY3QgPSB0aWxlUmVjdDsKKyAgICAgICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChsYXll
clJlY3QpOwogCi0gICAgLy8gRG9uJ3QgZHJhdyBhbnkgdGlsZXMgd2hlbiBkZXZpY2UgbWF0cml4
IGlzIG5vdCBpbnZlcnRpYmxlLgotICAgIGlmICghZGV2aWNlTWF0cml4LmlzSW52ZXJ0aWJsZSgp
KQotICAgICAgICByZXR1cm47CisgICAgICAgICAgICAvLyBTa2lwIGVtcHR5IHRpbGVzLgorICAg
ICAgICAgICAgaWYgKHRpbGVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgIEZsb2F0UXVhZCBxdWFkID0gZGV2aWNlTWF0cml4Lm1hcFF1YWQoRmxvYXRRdWFk
KGxheWVyUmVjdCkpOwotICAgIENDTGF5ZXJRdWFkIGRldmljZVJlY3QgPSBDQ0xheWVyUXVhZChG
bG9hdFF1YWQocXVhZC5ib3VuZGluZ0JveCgpKSk7Ci0gICAgQ0NMYXllclF1YWQgbGF5ZXJRdWFk
ID0gQ0NMYXllclF1YWQocXVhZCk7CisgICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPnRl
eHR1cmVJZCgpKSB7CisgICAgICAgICAgICAgICAgcXVhZExpc3QuYXBwZW5kKENDU29saWRDb2xv
ckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCB0aWxlUmVjdCwgYmFja2dyb3VuZENv
bG9yKCkpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiBob3cgdGhlIHRvcCBsZWZ0IGhhcyBtb3ZlZCwgc28g
dGhlIHRleHR1cmUgY2FuIGJlCisgICAgICAgICAgICAvLyBvZmZzZXQgdGhlIHNhbWUgYW1vdW50
LgorICAgICAgICAgICAgSW50U2l6ZSBkaXNwbGF5T2Zmc2V0ID0gdGlsZVJlY3QubWluWE1pbllD
b3JuZXIoKSAtIGRpc3BsYXlSZWN0Lm1pblhNaW5ZQ29ybmVyKCk7CisgICAgICAgICAgICBJbnRQ
b2ludCB0ZXh0dXJlT2Zmc2V0ID0gbV90aWxlci0+dGV4dHVyZU9mZnNldChpLCBqKSArIGRpc3Bs
YXlPZmZzZXQ7CisgICAgICAgICAgICBmbG9hdCB0aWxlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9h
dD4obV90aWxlci0+dGlsZVNpemUoKS53aWR0aCgpKTsKKyAgICAgICAgICAgIGZsb2F0IHRpbGVI
ZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV90aWxlci0+dGlsZVNpemUoKS5oZWlnaHQoKSk7
CisgICAgICAgICAgICBJbnRTaXplIHRleHR1cmVTaXplKHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7
CiAKLSAgICAvLyBVc2UgYW50aS1hbGlhc2luZyBwcm9ncmFtcyBvbmx5IHdoZW4gbmVjZXNzYXJ5
LgotICAgIGJvb2wgdXNlQUEgPSAobV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCkgJiYgKCFxdWFk
LmlzUmVjdGlsaW5lYXIoKSB8fCAhcXVhZC5ib3VuZGluZ0JveCgpLmlzRXhwcmVzc2libGVBc0lu
dFJlY3QoKSkpOworICAgICAgICAgICAgYm9vbCB1c2VBQSA9IG1fdGlsZXItPmhhc0JvcmRlclRl
eGVscygpICYmICFzaGFyZWRRdWFkU3RhdGUtPmlzTGF5ZXJBeGlzQWxpZ25lZEludFJlY3QoKTsK
IAotICAgIGlmICh1c2VBQSkgewotICAgICAgICBkZXZpY2VSZWN0LmluZmxhdGVBbnRpQWxpYXNp
bmdEaXN0YW5jZSgpOwotICAgICAgICBsYXllclF1YWQuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3Rh
bmNlKCk7Ci0gICAgfQorICAgICAgICAgICAgYm9vbCBsZWZ0RWRnZUFBID0gIWkgJiYgdXNlQUE7
CisgICAgICAgICAgICBib29sIHRvcEVkZ2VBQSA9ICFqICYmIHVzZUFBOworICAgICAgICAgICAg
Ym9vbCByaWdodEVkZ2VBQSA9IGkgPT0gbV90aWxlci0+bnVtVGlsZXNYKCkgLSAxICYmIHVzZUFB
OworICAgICAgICAgICAgYm9vbCBib3R0b21FZGdlQUEgPSBqID09IG1fdGlsZXItPm51bVRpbGVz
WSgpIC0gMSAmJiB1c2VBQTsKIAotICAgIHN3aXRjaCAobV9zYW1wbGVkVGV4ZWxGb3JtYXQpIHsK
LSAgICBjYXNlIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkE6Ci0g
ICAgICAgIGlmICh1c2VBQSkgewotICAgICAgICAgICAgY29uc3QgUHJvZ3JhbUFBKiBwcm9ncmFt
ID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtQUEoKTsKLSAgICAgICAgICAgIGRyYXdUaWxl
cyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgs
IGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgcHJvZ3JhbS0+
ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIHByb2dyYW0t
PmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCkpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgaWYgKGlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSkgewotICAgICAgICAgICAgICAg
IGNvbnN0IFByb2dyYW1PcGFxdWUqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dy
YW1PcGFxdWUoKTsKLSAgICAgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5
ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1
YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIC0xLCAtMSk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGNvbnN0IFByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVy
LT50aWxlclByb2dyYW0oKTsKLSAgICAgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJl
ciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBs
YXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIC0xLCAtMSk7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICBjb25zdCBHQzNEaW50IHRleHR1cmVGaWx0ZXIgPSBtX3RpbGVyLT5oYXNC
b3JkZXJUZXhlbHMoKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIgOiBHcmFwaGljc0NvbnRl
eHQzRDo6TkVBUkVTVDsKKyAgICAgICAgICAgIHF1YWRMaXN0LmFwcGVuZChDQ1RpbGVEcmF3UXVh
ZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgdGlsZVJlY3QsIHRpbGUtPnRleHR1cmVJZCgpLCB0
ZXh0dXJlT2Zmc2V0LCB0ZXh0dXJlU2l6ZSwgdGV4dHVyZUZpbHRlciwgY29udGVudHNTd2l6emxl
ZCgpLCBsZWZ0RWRnZUFBLCB0b3BFZGdlQUEsIHJpZ2h0RWRnZUFBLCBib3R0b21FZGdlQUEpKTsK
ICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIExheWVyVGV4dHVyZVVwZGF0ZXI6
OlNhbXBsZWRUZXhlbEZvcm1hdEJHUkE6Ci0gICAgICAgIGlmICh1c2VBQSkgewotICAgICAgICAg
ICAgY29uc3QgUHJvZ3JhbVN3aXp6bGVBQSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVy
UHJvZ3JhbVN3aXp6bGVBQSgpOwotICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIs
IGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5
ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigp
LmZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIo
KS5lZGdlTG9jYXRpb24oKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNO
b25Db21wb3NpdGVkQ29udGVudCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVN3
aXp6bGVPcGFxdWUqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1Td2l6emxl
T3BhcXVlKCk7Ci0gICAgICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVy
UmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFk
LCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBQcm9ncmFtU3dpenpsZSogcHJvZ3JhbSA9IGxheWVyUmVu
ZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGUoKTsKLSAgICAgICAgICAgICAgICBkcmF3VGlsZXMo
bGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBk
ZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIC0xLCAtMSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogfQogCkBAIC0xODksMTgzICsxNzgs
NiBAQCB2b2lkIENDVGlsZWRMYXllckltcGw6OnN5bmNUZXh0dXJlSWQoaW50IGksIGludCBqLCBQ
bGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkKICAgICB0aWxlLT5zZXRUZXh0dXJlSWQodGV4dHVy
ZUlkKTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIENDVGlsZWRMYXllckltcGw6OmRy
YXdUaWxlcyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNm
b3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtLCBjb25zdCBD
Q0xheWVyUXVhZCYgZGV2aWNlUmVjdCwgY29uc3QgQ0NMYXllclF1YWQmIGNvbnRlbnRRdWFkLCBm
bG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBpbnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1M
b2NhdGlvbiwgaW50IGVkZ2VMb2NhdGlvbikKLXsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9u
KCksIDApKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHF1YWRU
cmFuc2Zvcm0gPSBkZXZpY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOwotCi0gICAgaWYgKGVkZ2VMb2Nh
dGlvbiAhPSAtMSkgewotICAgICAgICBmbG9hdCBlZGdlWzI0XTsKLSAgICAgICAgY29udGVudFF1
YWQudG9GbG9hdEFycmF5KGVkZ2UpOwotICAgICAgICBkZXZpY2VSZWN0LnRvRmxvYXRBcnJheSgm
ZWRnZVsxMl0pOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTNmdihlZGdl
TG9jYXRpb24sIGVkZ2UsIDgpKTsKLSAgICB9Ci0KLSAgICBDQ0xheWVyUXVhZDo6RWRnZSBwcmV2
RWRnZVkgPSBjb250ZW50UXVhZC50b3AoKTsKLQotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b207Ci0gICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0
LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gbV90
aWxlci0+Y29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7Ci0gICAgZmxvYXQgc2ln
biA9IEZsb2F0UXVhZChjb250ZW50UmVjdCkuaXNDb3VudGVyY2xvY2t3aXNlKCkgPyAtMSA6IDE7
Ci0gICAgY29uc3QgR0MzRGludCBmaWx0ZXIgPSBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSA/
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIgOiBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVDsK
LSAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7Ci0gICAgICAgIENDTGF5
ZXJRdWFkOjpFZGdlIHByZXZFZGdlWCA9IGNvbnRlbnRRdWFkLmxlZnQoKTsKLQotICAgICAgICBD
Q0xheWVyUXVhZDo6RWRnZSBlZGdlWSA9IGNvbnRlbnRRdWFkLmJvdHRvbSgpOwotICAgICAgICBp
ZiAoaiA8IChtX3RpbGVyLT5udW1UaWxlc1koKSAtIDEpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0
IHRpbGVSZWN0ID0gdW5pb25SZWN0KG1fdGlsZXItPnRpbGVCb3VuZHMoMCwgaiksIG1fdGlsZXIt
PnRpbGVCb3VuZHMobV90aWxlci0+bnVtVGlsZXNYKCkgLSAxLCBqKSk7Ci0gICAgICAgICAgICB0
aWxlUmVjdC5pbnRlcnNlY3QobGF5ZXJSZWN0KTsKLQotICAgICAgICAgICAgLy8gU2tpcCBlbXB0
eSByb3dzLgotICAgICAgICAgICAgaWYgKHRpbGVSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgdGlsZVJlY3QgPSBtX3RpbGVyLT5sYXllclJl
Y3RUb0NvbnRlbnRSZWN0KHRpbGVSZWN0KTsKLQotICAgICAgICAgICAgRmxvYXRQb2ludCBwMSh0
aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50
IHAyKHRpbGVSZWN0LngoKSwgdGlsZVJlY3QubWF4WSgpKTsKLQotICAgICAgICAgICAgLy8gTWFw
IHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCi0gICAgICAgICAgICBwMSA9IGRldmljZVRyYW5zZm9y
bS5tYXBQb2ludChwMSk7Ci0gICAgICAgICAgICBwMiA9IGRldmljZVRyYW5zZm9ybS5tYXBQb2lu
dChwMik7Ci0KLSAgICAgICAgICAgIC8vIENvbXB1dGUgaG9yaXpvbnRhbCBlZGdlLgotICAgICAg
ICAgICAgZWRnZVkgPSBDQ0xheWVyUXVhZDo6RWRnZShwMSwgcDIpOwotICAgICAgICAgICAgZWRn
ZVkuc2NhbGUoc2lnbik7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBpID0gbGVmdDsg
aSA8PSByaWdodDsgKytpKSB7Ci0gICAgICAgICAgICBEcmF3YWJsZVRpbGUqIHRpbGUgPSB0aWxl
QXQoaSwgaik7Ci0KLSAgICAgICAgICAgIC8vIERvbid0IHVzZSB0aWxlQ29udGVudFJlY3QgaGVy
ZSwgYXMgdGhhdCBjb250YWlucyB0aGUgZnVsbAotICAgICAgICAgICAgLy8gcmVjdCB3aXRoIGJv
cmRlciB0ZXhlbHMgd2hpY2ggc2hvdWxkbid0IGJlIGRyYXduLgotICAgICAgICAgICAgSW50UmVj
dCB0aWxlUmVjdCA9IG1fdGlsZXItPnRpbGVCb3VuZHMoaSwgaik7Ci0gICAgICAgICAgICBJbnRS
ZWN0IGRpc3BsYXlSZWN0ID0gdGlsZVJlY3Q7Ci0gICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNl
Y3QobGF5ZXJSZWN0KTsKLQotICAgICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiBob3cgdGhlIHRv
cCBsZWZ0IGhhcyBtb3ZlZCwgc28gdGhlIHRleHR1cmUgY2FuIGJlCi0gICAgICAgICAgICAvLyBv
ZmZzZXQgdGhlIHNhbWUgYW1vdW50LgotICAgICAgICAgICAgSW50U2l6ZSBkaXNwbGF5T2Zmc2V0
ID0gdGlsZVJlY3QubWluWE1pbllDb3JuZXIoKSAtIGRpc3BsYXlSZWN0Lm1pblhNaW5ZQ29ybmVy
KCk7Ci0KLSAgICAgICAgICAgIC8vIFNraXAgZW1wdHkgdGlsZXMuCi0gICAgICAgICAgICBpZiAo
dGlsZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICB0aWxlUmVjdCA9IG1fdGlsZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZVJlY3Qp
OwotCi0gICAgICAgICAgICBGbG9hdFJlY3QgY2xhbXBSZWN0KHRpbGVSZWN0KTsKLSAgICAgICAg
ICAgIC8vIENsYW1wIHRleHR1cmUgY29vcmRpbmF0ZXMgdG8gYXZvaWQgc2FtcGxpbmcgb3V0c2lk
ZSB0aGUgbGF5ZXIKLSAgICAgICAgICAgIC8vIGJ5IGRlZmxhdGluZyB0aGUgdGlsZSByZWdpb24g
aGFsZiBhIHRleGVsIG9yIGhhbGYgYSB0ZXhlbAotICAgICAgICAgICAgLy8gbWludXMgZXBzaWxv
biBmb3Igb25lIHBpeGVsIGxheWVycy4gVGhlIHJlc3VsdGluZyBjbGFtcCByZWdpb24KLSAgICAg
ICAgICAgIC8vIGlzIG1hcHBlZCB0byB0aGUgdW5pdCBzcXVhcmUgYnkgdGhlIHZlcnRleCBzaGFk
ZXIgYW5kIG1hcHBlZAotICAgICAgICAgICAgLy8gYmFjayB0byBub3JtYWxpemVkIHRleHR1cmUg
Y29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdtZW50IHNoYWRlcgotICAgICAgICAgICAgLy8gYWZ0ZXIg
YmVpbmcgY2xhbXBlZCB0byAwLTEgcmFuZ2UuCi0gICAgICAgICAgICBjb25zdCBmbG9hdCBlcHNp
bG9uID0gMSAvIDEwMjQuMGY7Ci0gICAgICAgICAgICBmbG9hdCBjbGFtcFggPSBtaW4oMC41LCBj
bGFtcFJlY3Qud2lkdGgoKSAvIDIuMCAtIGVwc2lsb24pOwotICAgICAgICAgICAgZmxvYXQgY2xh
bXBZID0gbWluKDAuNSwgY2xhbXBSZWN0LmhlaWdodCgpIC8gMi4wIC0gZXBzaWxvbik7Ci0gICAg
ICAgICAgICBjbGFtcFJlY3QuaW5mbGF0ZVgoLWNsYW1wWCk7Ci0gICAgICAgICAgICBjbGFtcFJl
Y3QuaW5mbGF0ZVkoLWNsYW1wWSk7Ci0gICAgICAgICAgICBGbG9hdFNpemUgY2xhbXBPZmZzZXQg
PSBjbGFtcFJlY3QubWluWE1pbllDb3JuZXIoKSAtIEZsb2F0UmVjdCh0aWxlUmVjdCkubWluWE1p
bllDb3JuZXIoKTsKLQotICAgICAgICAgICAgRmxvYXRQb2ludCB0ZXhPZmZzZXQgPSBtX3RpbGVy
LT50ZXh0dXJlT2Zmc2V0KGksIGopICsgY2xhbXBPZmZzZXQgKyBGbG9hdFNpemUoZGlzcGxheU9m
ZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCB0aWxlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4o
bV90aWxlci0+dGlsZVNpemUoKS53aWR0aCgpKTsKLSAgICAgICAgICAgIGZsb2F0IHRpbGVIZWln
aHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV90aWxlci0+dGlsZVNpemUoKS5oZWlnaHQoKSk7Ci0K
LSAgICAgICAgICAgIC8vIE1hcCBjbGFtcGluZyByZWN0YW5nbGUgdG8gdW5pdCBzcXVhcmUuCi0g
ICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhUcmFuc2xhdGVYID0gLWNsYW1wUmVjdC54KCkgLyBj
bGFtcFJlY3Qud2lkdGgoKTsKLSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVkg
PSAtY2xhbXBSZWN0LnkoKSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsKLSAgICAgICAgICAgIGZsb2F0
IHZlcnRleFRleFNjYWxlWCA9IHRpbGVSZWN0LndpZHRoKCkgLyBjbGFtcFJlY3Qud2lkdGgoKTsK
LSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFNjYWxlWSA9IHRpbGVSZWN0LmhlaWdodCgpIC8g
Y2xhbXBSZWN0LmhlaWdodCgpOwotCi0gICAgICAgICAgICAvLyBNYXAgdG8gbm9ybWFsaXplZCB0
ZXh0dXJlIGNvb3JkaW5hdGVzLgotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xh
dGVYID0gdGV4T2Zmc2V0LngoKSAvIHRpbGVXaWR0aDsKLSAgICAgICAgICAgIGZsb2F0IGZyYWdt
ZW50VGV4VHJhbnNsYXRlWSA9IHRleE9mZnNldC55KCkgLyB0aWxlSGVpZ2h0OwotICAgICAgICAg
ICAgZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVggPSBjbGFtcFJlY3Qud2lkdGgoKSAvIHRpbGVXaWR0
aDsKLSAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4U2NhbGVZID0gY2xhbXBSZWN0LmhlaWdo
dCgpIC8gdGlsZUhlaWdodDsKLQotICAgICAgICAgICAgQ0NMYXllclF1YWQ6OkVkZ2UgZWRnZVgg
PSBjb250ZW50UXVhZC5yaWdodCgpOwotICAgICAgICAgICAgaWYgKGkgPCAobV90aWxlci0+bnVt
VGlsZXNYKCkgLSAxKSkgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEodGlsZVJlY3Qu
bWF4WCgpLCB0aWxlUmVjdC55KCkpOwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDIodGls
ZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOwotCi0gICAgICAgICAgICAgICAgLy8gTWFw
IHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCi0gICAgICAgICAgICAgICAgcDEgPSBkZXZpY2VUcmFu
c2Zvcm0ubWFwUG9pbnQocDEpOwotICAgICAgICAgICAgICAgIHAyID0gZGV2aWNlVHJhbnNmb3Jt
Lm1hcFBvaW50KHAyKTsKLQotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdmVydGljYWwgZWRn
ZS4KLSAgICAgICAgICAgICAgICBlZGdlWCA9IENDTGF5ZXJRdWFkOjpFZGdlKHAxLCBwMik7Ci0g
ICAgICAgICAgICAgICAgZWRnZVguc2NhbGUoc2lnbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3BhY2UgcXVhZC4KLSAgICAgICAgICAgIENDTGF5ZXJR
dWFkIGRldmljZVF1YWQocHJldkVkZ2VYLCBwcmV2RWRnZVksIGVkZ2VYLCBlZGdlWSk7Ci0KLSAg
ICAgICAgICAgIC8vIE1hcCBxdWFkIHRvIGxheWVyIHNwYWNlLgotICAgICAgICAgICAgRmxvYXRR
dWFkIHF1YWQgPSBxdWFkVHJhbnNmb3JtLm1hcFF1YWQoZGV2aWNlUXVhZC5mbG9hdFF1YWQoKSk7
Ci0KLSAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxlUmVjdC4KLSAgICAgICAgICAgIHF1
YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCksIDEuMGYgLyB0aWxlUmVjdC5oZWlnaHQo
KSk7Ci0KLSAgICAgICAgICAgIGlmIChmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uID09IC0x
KSB7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJhbnNmb3JtIHRv
IHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbwotICAgICAgICAgICAgICAgIC8vIHRoaXMgd2hpbGUg
c3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVzdWx0cyBhcwotICAgICAgICAgICAgICAgIC8vIGZy
YWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gc2hvdWxkIGFsd2F5cyBiZSBub24tbmVnYXRpdmUK
LSAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdheSB0
aGF0IGNvdWxkIHJlc3VsdCBpbgotICAgICAgICAgICAgICAgIC8vIHNhbXBsaW5nIG91dHNpZGUg
dGhlIGxheWVyLgotICAgICAgICAgICAgICAgIHZlcnRleFRleFNjYWxlWCAqPSBmcmFnbWVudFRl
eFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJhZ21lbnRUZXhT
Y2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWCAqPSBmcmFnbWVudFRl
eFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICo9IGZyYWdtZW50
VGV4U2NhbGVZOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVggKz0gZnJhZ21l
bnRUZXhUcmFuc2xhdGVYOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVkgKz0g
ZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00ZihmcmFnbWVudFRleFRyYW5zZm9ybUxv
Y2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRlWSwgZnJh
Z21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7Ci0KLSAgICAgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudmVydGV4
VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4VGV4VHJhbnNsYXRlWCwgdmVydGV4VGV4VHJh
bnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhTY2FsZVkpKTsKLQotICAgICAgICAg
ICAgaWYgKHRpbGUgJiYgdGlsZS0+dGV4dHVyZUlkKCkpIHsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGlsZS0+dGV4
dHVyZUlkKCkpOwotICAgICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKLSAgICAgICAgICAgICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVyKSk7Ci0KLSAgICAg
ICAgICAgICAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGdsb2JhbFRyYW5zZm9y
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVS
ZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCBvcGFjaXR5LCBxdWFkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hh
ZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jh
bS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsZVRyYW5zZm9ybSA9IGds
b2JhbFRyYW5zZm9ybTsKLSAgICAgICAgICAgICAgICB0aWxlVHJhbnNmb3JtLnRyYW5zbGF0ZSh0
aWxlUmVjdC54KCkgKyB0aWxlUmVjdC53aWR0aCgpIC8gMi4wLCB0aWxlUmVjdC55KCkgKyB0aWxl
UmVjdC5oZWlnaHQoKSAvIDIuMCk7Ci0KLSAgICAgICAgICAgICAgICBjb25zdCBMYXllckNocm9t
aXVtOjpCb3JkZXJQcm9ncmFtKiBzb2xpZENvbG9yUHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPmJv
cmRlclByb2dyYW0oKTsKLSAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNl
UHJvZ3JhbShzb2xpZENvbG9yUHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0KLSAgICAgICAgICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHNvbGlkQ29sb3JQcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLmNvbG9yTG9jYXRpb24oKSwgYmFja2dyb3VuZENvbG9yKCkucmVkKCksIGJh
Y2tncm91bmRDb2xvcigpLmdyZWVuKCksIGJhY2tncm91bmRDb2xvcigpLmJsdWUoKSwgYmFja2dy
b3VuZENvbG9yKCkuYWxwaGEoKSkpOwotCi0gICAgICAgICAgICAgICAgbGF5ZXJSZW5kZXJlci0+
ZHJhd1RleHR1cmVkUXVhZCh0aWxlVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0
KCksIG9wYWNpdHksIHF1YWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzb2xpZENvbG9yUHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRp
b24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0x
LCAtMSk7Ci0KLSAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3Jh
bShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJl
dkVkZ2VYID0gZWRnZVg7Ci0gICAgICAgICAgICAvLyBSZXZlcnNlIGRpcmVjdGlvbi4KLSAgICAg
ICAgICAgIHByZXZFZGdlWC5zY2FsZSgtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcmV2RWRn
ZVkgPSBlZGdlWTsKLSAgICAgICAgLy8gUmV2ZXJzZSBkaXJlY3Rpb24uCi0gICAgICAgIHByZXZF
ZGdlWS5zY2FsZSgtMSk7Ci0gICAgfQotfQotCiB9CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKaW5kZXggMDZhMDMx
YzIzNjE3ZDk2YTE0MDU4NTY2NzhhMTQxZjU1M2NiZTNjZi4uNDc4YjAzNDAyMzQ1MDgxOWJiY2Vh
MGE4ZGE1YWQzMjE1NmY1NGJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaApAQCAt
NDMsMTYgKzQzLDE5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+Q0NUaWxlZExheWVy
SW1wbCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7
CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZExpc3QmLCBjb25zdCBDQ1NoYXJl
ZFF1YWRTdGF0ZSopOworCiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoTGF5
ZXJSZW5kZXJlckNocm9taXVtKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVy
dGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFNraXBz
RHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBzRHJhdyA9IHNraXBzRHJhdzsgfQotICAgIHZv
aWQgc2V0U2FtcGxlZFRleGVsRm9ybWF0KExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhl
bEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQpIHsgbV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSBzYW1w
bGVkVGV4ZWxGb3JtYXQ7IH0KICAgICB2b2lkIHNldFRpbGluZ0RhdGEoY29uc3QgQ0NMYXllclRp
bGluZ0RhdGEmIHRpbGVyKTsKICAgICB2b2lkIHN5bmNUZXh0dXJlSWQoaW50LCBpbnQsIFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZUlkKTsKIAorICAgIHZvaWQgc2V0Q29udGVudHNTd2l6emxlZChi
b29sIGNvbnRlbnRzU3dpenpsZWQpIHsgbV9jb250ZW50c1N3aXp6bGVkID0gY29udGVudHNTd2l6
emxlZDsgfQorICAgIGJvb2wgY29udGVudHNTd2l6emxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGVudHNTd2l6emxlZDsgfQorCiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFk
ZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYT4gUHJvZ3JhbTsKICAgICAvLyBTaGFk
ZXIgcHJvZ3JhbSB0aGF0IHN3YXBzIHJlZCBhbmQgYmx1ZSBjb21wb25lbnRzIG9mIHRleHR1cmUu
CiAgICAgLy8gVXNlZCB3aGVuIHRleHR1cmUgZm9ybWF0IGRvZXMgbm90IG1hdGNoIG5hdGl2ZSBj
b2xvciBmb3JtYXQuCkBAIC03MSwyNCArNzQsMTcgQEAgcHJvdGVjdGVkOgogICAgIC8vIEV4cG9z
ZWQgZm9yIHRlc3RpbmcuCiAgICAgYm9vbCBoYXNUaWxlQXQoaW50LCBpbnQpIGNvbnN0OwogCisg
ICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkVHJhbnNmb3JtKCkgY29uc3Q7CisK
IHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gIkNvbnRlbnRMYXllciI7IH0KIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0OwotCi0gICAgLy8gRHJhdyBhbGwgdGlsZXMgdGhh
dCBpbnRlcnNlY3Qgd2l0aCB0aGUgY29udGVudCByZWN0LgotICAgIHZvaWQgZHJhdyhMYXllclJl
bmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLQogICAgIERyYXdhYmxlVGlsZSogdGls
ZUF0KGludCwgaW50KSBjb25zdDsKICAgICBEcmF3YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50LCBp
bnQpOwogCi0gICAgLy8gRHJhdyBhbGwgdGlsZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50
UmVjdC4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICB2b2lkIGRyYXdUaWxlcyhMYXllclJl
bmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGdsb2JhbFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGRldmljZVRyYW5zZm9ybSwgY29uc3QgQ0NMYXllclF1YWQmIGRldmljZVJlY3QsIGNvbnN0
IENDTGF5ZXJRdWFkJiBjb250ZW50UXVhZCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3Jh
bSwgaW50IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24sIGludCBlZGdlTG9jYXRpb24pOwot
CiAgICAgYm9vbCBtX3NraXBzRHJhdzsKLSAgICBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVk
VGV4ZWxGb3JtYXQgbV9zYW1wbGVkVGV4ZWxGb3JtYXQ7CisgICAgYm9vbCBtX2NvbnRlbnRzU3dp
enpsZWQ7CiAKICAgICBPd25QdHI8Q0NMYXllclRpbGluZ0RhdGE+IG1fdGlsZXI7CiB9OwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDVhMmE0N2FiYjc1YzEzZjIyNWMwNGYwOGNiMDI3NzZjMWNjMDI3YTguLmVjYjUzN2Q4NjE3
MDBiODg3NGZhYWVlYTA3MjMyNDI5ZjQ3MjhmYTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAx
MS0xMi0xMyAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFtj
aHJvbWl1bV0gUmVmYWN0b3IgdGlsZSBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDU5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFyayB0aHJlZSB0
ZXN0cyBhcyBmYWlsaW5nIHdpdGggc21hbGwgcGl4ZWwgZGlmZmVyZW5jZXMuIFRoZXNlIGp1c3QK
KyAgICAgICAgbmVlZCByZWJhc2VsaW5pbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisKIDIwMTEtMTItMTMgIFRvbnkgQ2hhbmcgIDx0b255
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSb2xsaW5nIG91dCByMTAyNDYxLCBhIGNoYW5nZSB0
byBhIGxheW91dCB0ZXN0IHRvIHRyeSB0byByZW1vdmUgZmxha2luZXNzIG9uIENocm9taXVtLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlv
bnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMu
dHh0CmluZGV4IGFlOTY3NTRmYjFmMjE4OWFmOWQyNjdkYjA5ZjJlM2I3NTJhY2M1NDEuLmE0NDI0
MDg1Y2Y0ZWQ2YzFlYzc2ZjZlYzhiY2Y0ZTA2YzdjYzU1ZTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTM5MjYsNiAr
MzkyNiwxMSBAQCBCVUdXSzczOTA1IEdQVSBMSU5VWCA6IG1lZGlhL3ZpZGVvLXRyYW5zZm9ybWVk
Lmh0bWwgPSBJTUFHRQogQlVHV0s3MzkwNSBHUFUgTElOVVggOiBtZWRpYS92aWRlby16b29tLWNv
bnRyb2xzLmh0bWwgPSBJTUFHRQogQlVHV0s3MzkwNSBHUFUgV0lOIDogbWVkaWEvdmlkZW8tbGF5
ZXItY3Jhc2guaHRtbCA9IFRFWFQKIAorLy8gTmVlZCByZWJhc2VsaW5lIG9uIGFsbCBwbGF0Zm9y
bXMKK0JVR0VOTkUgOiBjb21wb3NpdGluZy9jb2xvci1tYXRjaGluZy9pbWFnZS1jb2xvci1tYXRj
aGluZy5odG1sID0gRkFJTAorQlVHRU5ORSA6IGNvbXBvc2l0aW5nL2dlb21ldHJ5L3ZlcnRpY2Fs
LXNjcm9sbC1jb21wb3NpdGVkLmh0bWwgPSBGQUlMCitCVUdFTk5FIDogY29tcG9zaXRpbmcvc2Nh
bGluZy90aWxlZC1sYXllci1yZWN1cnNpb24uaHRtbCA9IEZBSUwKKwogQlVHV0s3MzkzMyBERUJV
RyA6IHN2Zy9XM0MtU1ZHLTEuMS1TRS9zdHJ1Y3QtZG9tLTExLWYuc3ZnID0gVElNRU9VVCBQQVNT
CiAKIEJVR1dLNzM5OTEgV0lONyBWSVNUQSBSRUxFQVNFIDogZmFzdC90ZXh0L2ludGVybmF0aW9u
YWwvY29tcGxleC1jaGFyYWN0ZXItYmFzZWQtZmFsbGJhY2suaHRtbCA9IElNQUdFK1RFWFQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119304</attachid>
            <date>2011-12-14 14:51:30 -0800</date>
            <delta_ts>2011-12-14 15:30:50 -0800</delta_ts>
            <desc>Review comments, opaque/blending changes</desc>
            <filename>bug-73059-20111214145129.patch</filename>
            <type>text/plain</type>
            <size>121828</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyODI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTJkNzVmNThmNzY3NDE2
YTA0YzZlZTU3NDlkNDAyN2IwZmVmZWUyMS4uMTMwZTMyOGZhZjY4YjZiNGM0YWJhMzAzOTA0OThl
MmQ4YzA2ZjIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MCBAQAorMjAxMS0xMi0xNCAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVm
YWN0b3IgdGlsZSBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDU5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFydGlhbGx5IHRlc3RlZCBieSBjb21w
b3NpdG9yIGxheW91dCB0ZXN0cy4gRGVidWcgYm9yZGVycyBhbmQKKyAgICAgICAgY2hlY2tlcmJv
YXJkaW5nIHRlc3RlZCBtYW51YWxseS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXJ0
IG9mIGEgbW92ZSB0b3dhcmRzIHJlbmRlcmluZyBxdWFkcyBvbiBzY3JlZW4KKyAgICAgICAgZnJv
bSBhIGJhZyBvZiBkYXRhIHJhdGhlciB0aGFuIGluIHZpcnR1YWwgQ0NMYXllckltcGw6OmRyYXcg
ZnVuY3Rpb25zLgorCisgICAgICAgIENDRHJhd1F1YWQtZGVyaXZlZCBjbGFzc2VzIHN0b3JlIG1h
dGVyaWFsLXNwZWNpZmljIHBpZWNlcyBvZiBkYXRhIHRvCisgICAgICAgIHVzZSB3aGVuIHJlbmRl
cmluZy4gQ0NMYXllckltcGwgY2xhc3NlcyBub3cgY3JlYXRlIHRoZXNlIENDRHJhd1F1YWQKKyAg
ICAgICAgb2JqZWN0cyByYXRoZXIgdGhhbiBpc3N1aW5nIGRpcmVjdCBHTCBjb21tYW5kcy4gV2hl
cmUgdGhpcyBkYXRhIGlzCisgICAgICAgIHNoYXJlZCBiZXR3ZWVuIHF1YWRzIHRoYXQgY29tZSBm
cm9tIHRoZSBzYW1lIGxheWVyLCB0aGF0IGRhdGEgaXMKKyAgICAgICAgc3RvcmVkIGluIGEgQ0NT
aGFyZWRRdWFkU3RhdGUgb2JqZWN0IHJhdGhlciB0aGFuIGR1cGxpY2F0ZWQuCisKKyAgICAgICAg
Q0NSZW5kZXJQYXNzIGlzIHRoZSBjbGFzcyB0aGF0IGhvbGRzIHRoZSBsaXN0IG9mIHF1YWRzIGFu
ZCB0aGUgdGFyZ2V0CisgICAgICAgIHN1cmZhY2UgdGhhdCB0aGV5IGRyYXcgaW50by4gRHJhd2lu
ZyBhIGZyYW1lIGNvbnNpc3RzIG9mIGRyYXdpbmcgYQorICAgICAgICBzZXJpZXMgb2YgcmVuZGVy
IHBhc3NlcyBvbnRvIHRoZWlyIHJlc3BlY3RpdmUgc3VyZmFjZXMuCisKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0SW1wbCBjb25zdHJ1Y3RzIHRoZXNlIHJlbmRlciBwYXNzZXMgZnJvbSB0aGUgb3V0
cHV0IG9mCisgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSBieSBh
c2tpbmcgZWFjaCBsYXllciB0byBpbnNlcnQKKyAgICAgICAgcXVhZHMgaW50byBhIGxpc3QgYW5k
IGhhbmRzIHRoZW0gb2ZmIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bSBmb3IKKyAgICAgICAgcmVu
ZGVyaW5nLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyU3VyZmFjZUZvckRlYnVnKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVnaW5EcmF3aW5nRnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0RlYnVnQm9yZGVyUXVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJT
dXJmYWNlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdTb2xpZENvbG9yUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjp0aWxlVW5pZm9ybUxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRUaWxlUHJvZ3JhbVVuaWZvcm1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RpbGVRdWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0N1c3RvbUxheWVyUXVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaERyYXdpbmdGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1
cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRl
ckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFnbWVudFRleEFscGhhQmluZGluZzo6
ZWRnZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50VGV4QWxwaGFCaW5kaW5n
OjpmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWdt
ZW50VGV4T3BhcXVlQmluZGluZzo6ZWRnZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YWdtZW50VGV4T3BhcXVlQmluZGluZzo6ZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNU
byk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDdXN0b21MYXll
ckRyYXdRdWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0N1c3RvbUxheWVyRHJh
d1F1YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0N1c3RvbUxheWVyRHJhd1F1YWQ6
OkNDQ3VzdG9tTGF5ZXJEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q0NDdXN0b21MYXllckRyYXdRdWFkOjpsYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6OkNDRGVidWdCb3JkZXJEcmF3UXVhZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0JvcmRlckRyYXdR
dWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpj
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6OndpZHRoKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjpDQ0RyYXdRdWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6OnRvRGVidWdCb3JkZXJEcmF3UXVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b1JlbmRlclN1cmZhY2VEcmF3UXVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b1NvbGlkQ29sb3JEcmF3UXVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RyYXdRdWFkOjp0b1RpbGVEcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0RyYXdRdWFkOjp0b0N1c3RvbUxheWVyRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQ0RyYXdRdWFkOjpxdWFkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjpx
dWFkVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6OmxheWVyVHJhbnNm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6OmxheWVyUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0RyYXdRdWFkOjpjbGlwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Ry
YXdRdWFkOjpvcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6OmRyYXdzT3Bh
cXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6Om5lZWRzQmxlbmRpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6aXNMYXllckF4aXNBbGlnbmVkSW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0RyYXdRdWFkOjptYXRlcmlhbCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6YXBwZW5kUXVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllcklt
cGw6OmFwcGVuZERlYnVnQm9yZGVyUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Y29tcHV0ZVNjcmVlblNwYWNlVHJhbnNmb3JtRm9yU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpkYW1hZ2VJblN1cmZhY2VTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q0NSZW5kZXJQYXNzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQ
YXNzOjpDQ1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjphcHBl
bmRRdWFkc0ZvckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6YXBwZW5k
UXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkND
UmVuZGVyUGFzczo6cXVhZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjp0
YXJnZXRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6c2V0U3VyZmFj
ZURhbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpzdXJmYWNlRGFt
YWdlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVy
U3VyZmFjZURyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpsYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6c3VyZmFjZURhbWFnZVJlY3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0
YXRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2hhcmVkUXVhZFN0YXRlOjpDQ1NoYXJlZFF1YWRT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6aXNMYXllckF4aXNB
bGlnbmVkSW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaGFyZWRRdWFkU3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1
YWRTdGF0ZTo6cXVhZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRT
dGF0ZTo6bGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRRdWFkU3Rh
dGU6OmxheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NoYXJlZFF1YWRTdGF0ZTo6Y2xp
cFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRRdWFkU3RhdGU6Om9wYWNpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTaGFyZWRRdWFkU3RhdGU6OmlzT3BhcXVlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NTb2xpZENvbG9yRHJhd1F1YWQ6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6Q0NTb2xpZENvbG9yRHJh
d1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRD
b2xvckRyYXdRdWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NTb2xpZENvbG9yRHJh
d1F1YWQ6OmNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVEcmF3UXVhZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlRHJhd1F1
YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6Q0NUaWxlRHJh
d1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURy
YXdRdWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlRHJhd1F1YWQ6OnRleHR1
cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6dGV4dHVyZU9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6dGV4dHVyZVNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaWxlRHJhd1F1YWQ6OnRleHR1cmVGaWx0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaWxlRHJhd1F1YWQ6OnN3aXp6bGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RpbGVEcmF3UXVhZDo6bGVmdEVkZ2VBQSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVE
cmF3UXVhZDo6dG9wRWRnZUFBKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdRdWFkOjpy
aWdodEVkZ2VBQSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVEcmF3UXVhZDo6Ym90dG9tRWRn
ZUFBKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZURyYXdRdWFkOjppc0FudGlhbGlhc2VkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXllcklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6cXVhZFRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6c2V0Q29udGVudHNTd2l6emxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpjb250ZW50c1N3aXp6bGVkKToK
KwogMjAxMS0xMi0xNCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJlbW92ZSBhZGRlZCBjYWxscyB0byBDU1NTdHlsZVNlbGVjdG9yIHRvIGdhaW4gYmFjayBhbm90
aGVyIDIlIGluIHBhZ2UgY3ljbGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDlmNjAxNmE3YTE0NWRi
MTc3ZGMyM2JlNGM0MDQyOWE0ODRlYjRkMTguLmM1Mjc4YTRkZDRjMWU5YjZhODVkMzFkOTE2ODJj
NGI5NjhjZjljYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1OTcsMTAgKzM1OTcsMTYgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0NhbnZhc0xheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VU
cmFja2VyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RGVidWdCb3JkZXJEcmF3UXVhZC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWxheUJhc2VkVGlt
ZVNvdXJjZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RyYXdRdWFkLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAnLApA
QCAtMzYyNiwxNyArMzYzMiwyNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJT
dGF0ZU1hY2hpbmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU29saWRDb2xvckRyYXdRdWFkLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1
YWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rp
bGVEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCmluZGV4IGNhM2YxYWExNWI0NDE5ZjI2NDI5MDM0N2YzZDBjOTIwNTg0ZWUwMGUuLjNh
MTRiNDNlNWQzZTc3ZTRjZTU3Y2IyMTE2OTY3ZDcxYmJjYjM2ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNTIsNyArNTIsMTMgQEAKICNpbmNsdWRlICJUcmFj
a2luZ1RleHR1cmVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAj
aW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NDdXN0b21MYXll
ckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCisjaW5jbHVkZSAi
Y2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgi
CisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9D
Q1NvbGlkQ29sb3JEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgiCiAj
aW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCkBAIC0xMDcsMjEgKzExMyw2IEBAIHN0
YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5NYXRyaXgoaW50IHgsIGludCB5LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJuIHNjcmVlbjsKIH0KIAotc3RhdGljIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGNvbXB1dGVTY3JlZW5TcGFjZVRyYW5zZm9ybUZvclN1cmZhY2UoQ0NM
YXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllcikKLXsKLSAgICAvLyBUaGUgbGF5ZXIncyBzY3Jl
ZW4gc3BhY2UgdHJhbnNmb3JtIGNhbiBiZSB3cml0dGVuIGFzOgotICAgIC8vICAgbGF5ZXJTY3Jl
ZW5TcGFjZVRyYW5zZm9ybSA9IHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybSAqIGxheWVyT3Jp
Z2luVHJhbnNmb3JtCi0gICAgLy8gU28sIHRvIGNvbXB1dGUgdGhlIHN1cmZhY2Ugc2NyZWVuIHNw
YWNlLCB3ZSBjYW4gZG86Ci0gICAgLy8gICBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBs
YXllclNjcmVlblNwYWNlVHJhbnNmb3JtICogaW52ZXJzZShsYXllck9yaWdpblRyYW5zZm9ybSkK
LQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gcmVuZGVy
U3VyZmFjZUxheWVyLT5kcmF3VHJhbnNmb3JtKCk7Ci0gICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0u
dHJhbnNsYXRlKC0wLjUgKiByZW5kZXJTdXJmYWNlTGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0w
LjUgKiByZW5kZXJTdXJmYWNlTGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNl
TGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7Ci0gICAgc3VyZmFjZVNjcmVlblNwYWNlVHJh
bnNmb3JtLm11bHRpcGx5KGxheWVyT3JpZ2luVHJhbnNmb3JtLmludmVyc2UoKSk7Ci0KLSAgICBy
ZXR1cm4gc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtOwotfQotCiAjaWYgVVNFKFNLSUEpCiBi
b29sIGNvbnRleHRTdXBwb3J0c0FjY2VsZXJhdGVkUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCiB7CkBAIC0zMTYsNTIgKzMwNyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp2aWV3cG9ydENoYW5nZWQoKQogICAgIG1fY3VycmVudFJlbmRlclN1cmZhY2UgPSAwOwog
fQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCi17Ci0gICAgLy8g
RklYTUU6IHVzZSB0aGUgZnJhbWUgYmVnaW4gdGltZSBmcm9tIHRoZSBvdmVyYWxsIGNvbXBvc2l0
b3Igc2NoZWR1bGVyLgotICAgIC8vIFRoaXMgdmFsdWUgaXMgY3VycmVudGx5IGluYWNjZXNzaWJs
ZSBiZWNhdXNlIGl0IGlzIHVwIGluIENocm9taXVtJ3MKLSAgICAvLyBSZW5kZXJXaWRnZXQuCi0g
ICAgbV9oZWFkc1VwRGlzcGxheS0+b25GcmFtZUJlZ2luKGN1cnJlbnRUaW1lKCkpOwotCi0gICAg
aWYgKCFyb290TGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IGNvbnRlbnRz
TWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9y
eVVzZUJ5dGVzKCk7Ci0gICAgc2l6ZV90IG1heExpbWl0ID0gVGV4dHVyZU1hbmFnZXI6OmhpZ2hM
aW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKLSAgICBzaXplX3QgcmVjbGFpbUxpbWl0ID0gVGV4
dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKLQotICAgIG1f
cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1heExp
bWl0IC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7Ci0KLSAgICBkcmF3TGF5ZXJzSW50ZXJuYWwo
KTsKLQotICAgIGlmIChyZWNsYWltTGltaXQgPiBjb250ZW50c01lbW9yeVVzZUJ5dGVzKQotICAg
ICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0UHJlZmVycmVkTWVtb3J5TGlt
aXRCeXRlcyhyZWNsYWltTGltaXQgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRQcmVmZXJyZWRNZW1v
cnlMaW1pdEJ5dGVzKDApOwotCi0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRl
bGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgp
KTsKLQotICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbikKLSAgICAgICAgY29w
eU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5
ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQotewotICAgIC8v
IEZvciBub3csIHdlIHVzZSBkYW1hZ2UgdHJhY2tpbmcgdG8gY29tcHV0ZSBhIGdsb2JhbCBzY2lz
c29yLiBUbyBkbyB0aGlzLCB3ZSBtdXN0Ci0gICAgLy8gY29tcHV0ZSBhbGwgZGFtYWdlIHRyYWNr
aW5nIGJlZm9yZSBkcmF3aW5nIGFueXRoaW5nLCBzbyB0aGF0IHdlIGtub3cgdGhlIHJvb3QKLSAg
ICAvLyBkYW1hZ2UgcmVjdC4gVGhlIHJvb3QgZGFtYWdlIHJlY3QgaXMgdGhlbiB1c2VkIHRvIHNj
aXNzb3IgZWFjaCBzdXJmYWNlLgotCi0gICAgQVNTRVJUKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFy
dGlhbFN3YXApOwotCi0gICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7
Ci0gICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Ci0gICAgICAgIENDUmVuZGVyU3VyZmFjZSog
cmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAg
ICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7Ci0gICAgICAgIHJlbmRlclN1cmZhY2UtPmRhbWFn
ZVRyYWNrZXIoKS0+dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZShyZW5kZXJTdXJmYWNlLT5s
YXllckxpc3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXIt
Pm1hc2tMYXllcigpKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
bGVhclN1cmZhY2VGb3JEZWJ1ZyhDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyLCBDQ0xh
eWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVj
dCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclN1cmZhY2VGb3JEZWJ1ZyhDQ1Jl
bmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UsIENDUmVuZGVyU3VyZmFjZSogcm9vdFJlbmRlclN1
cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCiB7CiAgICAgLy8gTm9u
LXJvb3QgbGF5ZXJzIHNob3VsZCBjbGVhciB0aGVpciBlbnRpcmUgY29udGVudHMgdG8gdHJhbnNw
YXJlbnQuIFRoZSByb290IGxheWVyCiAgICAgLy8gaXMgY2xlYXJlZCB0byBibHVlIHRvIGVhc2ls
eSBzZWUgcmVnaW9ucyB0aGF0IHdlcmUgbm90IGRyYXduIG9uIHRoZSBzY3JlZW4uIElmIHdlCkBA
IC0zNjksNyArMzE1LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyU3VyZmFj
ZUZvckRlYnVnKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIKICAgICAvLyBjbGVhciB0
aGUgZGFtYWdlZCByZWdpb24sIHNvIHRoYXQgd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IGNsZWFyIHVu
LWNoYW5nZWQgcG9ydGlvbnMKICAgICAvLyBvZiB0aGUgc2NyZWVuLgogCi0gICAgaWYgKHJlbmRl
clN1cmZhY2VMYXllciAhPSByb290RHJhd0xheWVyKQorICAgIGlmIChyZW5kZXJTdXJmYWNlICE9
IHJvb3RSZW5kZXJTdXJmYWNlKQogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOwogICAgIGVsc2UKICAgICAgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDEsIDEpKTsKQEAgLTM4Myw1
NiArMzI5LDE5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclN1cmZhY2VGb3JE
ZWJ1ZyhDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyCiAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkp
OwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJT
dXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVnaW5E
cmF3aW5nRnJhbWUoKQogewotICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMiLCB0aGlzLCAwKTsKLQotICAgIGlmIChtX2Nh
cGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKQotICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1
cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwotICAgIG1fcm9v
dERhbWFnZVJlY3QgPSByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNr
ZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMg
b2YgdGhlIHJlbmRlciBzdXJmYWNlcy4gV2UgdHJhdmVyc2UgdGhlIHJlbmRlciBzdXJmYWNlcwot
ICAgIC8vIGZyb20gYmFjayB0byBmcm9udCB0byBndWFyYW50ZWUgdGhhdCBuZXN0ZWQgcmVuZGVy
IHN1cmZhY2VzIGdldCByZW5kZXJlZCBpbgotICAgIC8vIHRoZSBjb3JyZWN0IG9yZGVyLgotICAg
IGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0g
MTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewotICAgICAgICBDQ0xheWVy
SW1wbCogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNl
SW5kZXhdLmdldCgpOwotICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSBy
ZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgQVNTRVJUKHJlbmRl
clN1cmZhY2UpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7
Ci0KLSAgICAgICAgaWYgKHVzZVJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSkpIHsKLQotICAg
ICAgICAgICAgRmxvYXRSZWN0IHN1cmZhY2VEYW1hZ2VSZWN0OwotICAgICAgICAgICAgaWYgKG1f
Y2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApIHsKLSAgICAgICAgICAgICAgICAvLyBGb3Ig
bm93LCB3ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhlIHJvb3QgZGFtYWdlIGFzIHRoZSBkYW1hZ2Ug
Zm9yIGFsbAotICAgICAgICAgICAgICAgIC8vIHN1cmZhY2VzLCBleGNlcHQgcGVyc3BlY3RpdmUg
dHJhbnNmb3Jtcy4KLSAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5T
cGFjZVRyYW5zZm9ybSA9IGNvbXB1dGVTY3JlZW5TcGFjZVRyYW5zZm9ybUZvclN1cmZhY2UocmVu
ZGVyU3VyZmFjZUxheWVyKTsKLSAgICAgICAgICAgICAgICBpZiAoc2NyZWVuU3BhY2VUcmFuc2Zv
cm0uaGFzUGVyc3BlY3RpdmUoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBQZXJzcGVjdGl2
ZSBwcm9qZWN0aW9ucyBkbyBub3QgcGxheSBuaWNlIHdpdGggbWFwUmVjdCBvZiBpbnZlcnNlIHRy
YW5zZm9ybXMuCi0gICAgICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgdW5jb21tb24gY2FzZSwg
aXRzIHNpbXBsZXIgdG8ganVzdCByZWRyYXcgdGhlIGVudGlyZSBzdXJmYWNlLgotICAgICAgICAg
ICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0
KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gc2NyZWVuU3BhY2VU
cmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgICAgICAgICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVj
dCA9IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybS5tYXBSZWN0KG1fcm9vdERhbWFnZVJlY3Qp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gRklY
TUU6IGV2ZW50dWFsbHkgd2Ugc2hvdWxkIHBsYWNlIHRoaXMgdW5kZXIgYSBkZWJ1ZyBmbGFnLgot
ICAgICAgICAgICAgY2xlYXJTdXJmYWNlRm9yRGVidWcocmVuZGVyU3VyZmFjZUxheWVyLCByb290
RHJhd0xheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCk7Ci0KLSAgICAgICAgICAgIGNvbnN0IENDTGF5
ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Qu
c2l6ZSgpOyArK2xheWVySW5kZXgpCi0gICAgICAgICAgICAgICAgZHJhd0xheWVyKGxheWVyTGlz
dFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3VyZmFjZSwgc3VyZmFjZURhbWFnZVJlY3QpOwot
ICAgICAgICB9Ci0gICAgfQorICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UgPSByb290TGF5ZXIo
KS0+cmVuZGVyU3VyZmFjZSgpOwogCi0gICAgLy8gVGhlIG5leHQgZnJhbWUgc2hvdWxkIHN0YXJ0
IGJ5IGFzc3VtaW5nIG5vdGhpbmcgaGFzIGNoYW5nZWQsIGFuZCBjaGFuZ2VzIGFyZSBub3RlZCBh
cyB0aGV5IG9jY3VyLgotICAgIHJvb3REcmF3TGF5ZXItPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdG
b3JTdWJ0cmVlKCk7Ci19CisgICAgLy8gRklYTUU6IHVzZSB0aGUgZnJhbWUgYmVnaW4gdGltZSBm
cm9tIHRoZSBvdmVyYWxsIGNvbXBvc2l0b3Igc2NoZWR1bGVyLgorICAgIC8vIFRoaXMgdmFsdWUg
aXMgY3VycmVudGx5IGluYWNjZXNzaWJsZSBiZWNhdXNlIGl0IGlzIHVwIGluIENocm9taXVtJ3MK
KyAgICAvLyBSZW5kZXJXaWRnZXQuCisgICAgbV9oZWFkc1VwRGlzcGxheS0+b25GcmFtZUJlZ2lu
KGN1cnJlbnRUaW1lKCkpOwogCisgICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBt
X2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7CisgICAg
c2l6ZV90IG1heExpbWl0ID0gVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0
U2l6ZSgpKTsKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5
TGltaXRCeXRlcyhtYXhMaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwogCi12b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKLXsKICAgICBpZiAodmll
d3BvcnRTaXplKCkuaXNFbXB0eSgpIHx8ICFyb290TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC00NDUsMjcgKzM1NCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzSW50ZXJuYWwoKQogICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUodmlld3BvcnRXaWR0aCgp
LCB2aWV3cG9ydEhlaWdodCgpKTsKICAgICB9CiAKLSAgICBDQ0xheWVySW1wbCogcm9vdERyYXdM
YXllciA9IHJvb3RMYXllcigpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYg
KCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCi0gICAgICAgIHJvb3REcmF3TGF5ZXIt
PmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNl
KCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgdmlld3BvcnRTaXplKCkpKTsK
LQotICAgIHJvb3REcmF3TGF5ZXItPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgdmll
d3BvcnRTaXplKCkpKTsKLQotICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7
Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdERyYXdMYXllcik7Ci0KLSAg
ICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlID0gcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgp
OwotICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7Ci0KLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICB7Ci0gICAgICAgIFRSQUNF
X0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbDo6Y2FsY0Ry
YXdFdGMiLCB0aGlzLCAwKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdERyYXdMYXllciwgcm9vdERyYXdMYXll
ciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgJm1fbGF5ZXJTb3J0ZXIsIG1f
Y2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKLSAgICB9Ci0KICAgICAvLyBUaGUgR0wgdmll
d3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9s
bGJhcnMuCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAw
LCB2aWV3cG9ydFdpZHRoKCksIHZpZXdwb3J0SGVpZ2h0KCkpKTsKICAgICBtX3dpbmRvd01hdHJp
eCA9IHNjcmVlbk1hdHJpeCgwLCAwLCB2aWV3cG9ydFdpZHRoKCksIHZpZXdwb3J0SGVpZ2h0KCkp
OwpAQCAtNDc4LDkgKzM2NywzMDUgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdM
YXllcnNJbnRlcm5hbCgpCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jb2xv
ck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpOwogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCks
IG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwogICAgIEdMQyht
X2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpP
TkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7Cit9CisKK3ZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3Mq
IHJlbmRlclBhc3MpCit7CisgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVu
ZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpOworICAgIGlmICghdXNlUmVuZGVyU3VyZmFjZShyZW5k
ZXJTdXJmYWNlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IGV2ZW50dWFsbHkg
d2Ugc2hvdWxkIHBsYWNlIHRoaXMgdW5kZXIgYSBkZWJ1ZyBmbGFnLgorICAgIGNsZWFyU3VyZmFj
ZUZvckRlYnVnKHJlbmRlclN1cmZhY2UsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UsIHJlbmRlclBh
c3MtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOworCisgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExp
c3QgPSByZW5kZXJQYXNzLT5xdWFkTGlzdCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cXVhZExpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIGRyYXdRdWFkKHF1YWRMaXN0W2ldLmdldCgp
LCByZW5kZXJQYXNzLT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsKK30KKwordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqIHF1YWQsIGNvbnN0IEZsb2F0
UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCit7CisgICAgSW50UmVjdCBzY2lzc29yUmVjdDsKKyAg
ICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCkgeworICAgICAgICBGbG9hdFJl
Y3QgY2xpcEFuZERhbWFnZVJlY3QgPSBzdXJmYWNlRGFtYWdlUmVjdDsKKyAgICAgICAgaWYgKCFx
dWFkLT5jbGlwUmVjdCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNsaXBBbmREYW1hZ2VSZWN0
LmludGVyc2VjdChxdWFkLT5jbGlwUmVjdCgpKTsKKyAgICAgICAgc2Npc3NvclJlY3QgPSBlbmNs
b3NpbmdJbnRSZWN0KGNsaXBBbmREYW1hZ2VSZWN0KTsKKyAgICAgICAgaWYgKHNjaXNzb3JSZWN0
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UKKyAgICAgICAgc2Np
c3NvclJlY3QgPSBxdWFkLT5jbGlwUmVjdCgpOworCisgICAgaWYgKHNjaXNzb3JSZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKKyAgICBlbHNlCisgICAgICAgIHNldFNj
aXNzb3JUb1JlY3Qoc2Npc3NvclJlY3QpOworCisgICAgaWYgKHF1YWQtPm5lZWRzQmxlbmRpbmco
KSkKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EKSk7CisgICAgZWxzZQorICAgICAgICBHTEMobV9jb250ZXh0Lmdl
dCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CisKKyAg
ICBzd2l0Y2ggKHF1YWQtPm1hdGVyaWFsKCkpIHsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OkludmFs
aWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENDRHJhd1F1YWQ6OkRlYnVnQm9yZGVyOgorICAgICAgICBkcmF3RGVidWdCb3JkZXJRdWFk
KHF1YWQtPnRvRGVidWdCb3JkZXJEcmF3UXVhZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDQ0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNlOgorICAgICAgICBkcmF3UmVuZGVyU3VyZmFjZVF1
YWQocXVhZC0+dG9SZW5kZXJTdXJmYWNlRHJhd1F1YWQoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ0NEcmF3UXVhZDo6U29saWRDb2xvcjoKKyAgICAgICAgZHJhd1NvbGlkQ29sb3JRdWFk
KHF1YWQtPnRvU29saWRDb2xvckRyYXdRdWFkKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENDRHJhd1F1YWQ6OlRpbGVkQ29udGVudDoKKyAgICAgICAgZHJhd1RpbGVRdWFkKHF1YWQtPnRv
VGlsZURyYXdRdWFkKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OkN1
c3RvbUxheWVyOgorICAgICAgICBkcmF3Q3VzdG9tTGF5ZXJRdWFkKHF1YWQtPnRvQ3VzdG9tTGF5
ZXJEcmF3UXVhZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVyRHJh
d1F1YWQqIHF1YWQpCit7CisgICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2XTsKKyAgICBjb25z
dCBMYXllckNocm9taXVtOjpCb3JkZXJQcm9ncmFtKiBwcm9ncmFtID0gYm9yZGVyUHJvZ3JhbSgp
OworICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOworICAgIEdM
Qyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsK
KworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IHF1YWQtPmxheWVyVHJh
bnNmb3JtKCk7CisgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0ID0gcXVhZC0+cXVhZFJlY3Qo
KTsKKyAgICByZW5kZXJNYXRyaXguc2NhbGVOb25Vbmlmb3JtKGxheWVyUmVjdC53aWR0aCgpLCBs
YXllclJlY3QuaGVpZ2h0KCkpOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dG9HTE1hdHJp
eCgmZ2xNYXRyaXhbMF0sIHByb2plY3Rpb25NYXRyaXgoKSAqIHJlbmRlck1hdHJpeCk7CisgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPnZlcnRl
eFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksIGZhbHNlLCAmZ2xNYXRyaXhbMF0sIDEpKTsKKwor
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTRmKHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkuY29sb3JMb2NhdGlvbigpLCBxdWFkLT5jb2xvcigpLnJlZCgpIC8gMjU1LjAsIHF1
YWQtPmNvbG9yKCkuZ3JlZW4oKSAvIDI1NS4wLCBxdWFkLT5jb2xvcigpLmJsdWUoKSAvIDI1NS4w
LCAxKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmxpbmVXaWR0aChxdWFkLT53
aWR0aCgpKSk7CisKKyAgICAvLyBUaGUgaW5kaWNlcyBmb3IgdGhlIGxpbmUgYXJlIHN0b3JlZCBp
biB0aGUgc2FtZSBhcnJheSBhcyB0aGUgdHJpYW5nbGUgaW5kaWNlcy4KKyAgICBHTEMoY29udGV4
dCgpLCBjb250ZXh0KCktPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09Q
LCA0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDYgKiBzaXplb2YodW5zaWdu
ZWQgc2hvcnQpKSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVy
U3VyZmFjZVF1YWQoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqIHF1YWQpCit7CisgICAg
Q0NMYXllckltcGwqIGxheWVyID0gcXVhZC0+bGF5ZXIoKTsKKyAgICBsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpLT5kcmF3KHRoaXMsIHF1YWQtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOworICAgIGxheWVy
LT5yZW5kZXJTdXJmYWNlKCktPnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKK30KKwordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBDQ1NvbGlkQ29s
b3JEcmF3UXVhZCogcXVhZCkKK3sKKyAgICBjb25zdCBMYXllckNocm9taXVtOjpCb3JkZXJQcm9n
cmFtKiBzb2xpZENvbG9yUHJvZ3JhbSA9IGJvcmRlclByb2dyYW0oKTsKKyAgICBHTEMoY29udGV4
dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0oc29saWRDb2xvclByb2dyYW0tPnByb2dyYW0oKSkp
OworCisgICAgSW50UmVjdCB0aWxlUmVjdCA9IHF1YWQtPnF1YWRSZWN0KCk7CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0aWxlVHJhbnNmb3JtID0gcXVhZC0+cXVhZFRyYW5zZm9ybSgpOwor
ICAgIHRpbGVUcmFuc2Zvcm0udHJhbnNsYXRlKHRpbGVSZWN0LngoKSArIHRpbGVSZWN0LndpZHRo
KCkgLyAyLjAsIHRpbGVSZWN0LnkoKSArIHRpbGVSZWN0LmhlaWdodCgpIC8gMi4wKTsKKworICAg
IGNvbnN0IENvbG9yJiBjb2xvciA9IHF1YWQtPmNvbG9yKCk7CisKKyAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPnVuaWZvcm00Zihzb2xpZENvbG9yUHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIo
KS5jb2xvckxvY2F0aW9uKCksIGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVl
KCksIGNvbG9yLmFscGhhKCkpKTsKKworICAgIGZsb2F0IG9wYWNpdHkgPSBxdWFkLT5vcGFjaXR5
KCk7CisgICAgZHJhd1RleHR1cmVkUXVhZCh0aWxlVHJhbnNmb3JtLAorICAgICAgICAgICAgICAg
ICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIG9wYWNpdHksIEZsb2F0
UXVhZCgpLAorICAgICAgICAgICAgICAgICAgICAgc29saWRDb2xvclByb2dyYW0tPnZlcnRleFNo
YWRlcigpLm1hdHJpeExvY2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAtMSwgLTEpOwor
fQorCitzdHJ1Y3QgVGlsZVByb2dyYW1Vbmlmb3JtcyB7CisgICAgdW5zaWduZWQgcHJvZ3JhbTsK
KyAgICB1bnNpZ25lZCBzYW1wbGVyTG9jYXRpb247CisgICAgdW5zaWduZWQgdmVydGV4VGV4VHJh
bnNmb3JtTG9jYXRpb247CisgICAgdW5zaWduZWQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlv
bjsKKyAgICB1bnNpZ25lZCBlZGdlTG9jYXRpb247CisgICAgdW5zaWduZWQgbWF0cml4TG9jYXRp
b247CisgICAgdW5zaWduZWQgYWxwaGFMb2NhdGlvbjsKKyAgICB1bnNpZ25lZCBwb2ludExvY2F0
aW9uOworfTsKKwordGVtcGxhdGU8Y2xhc3MgVD4KK3N0YXRpYyB2b2lkIHRpbGVVbmlmb3JtTG9j
YXRpb24oVCBwcm9ncmFtLCBUaWxlUHJvZ3JhbVVuaWZvcm1zJiB1bmlmb3JtcykKK3sKKyAgICB1
bmlmb3Jtcy5wcm9ncmFtID0gcHJvZ3JhbS0+cHJvZ3JhbSgpOworICAgIHVuaWZvcm1zLnZlcnRl
eFRleFRyYW5zZm9ybUxvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudmVydGV4VGV4
VHJhbnNmb3JtTG9jYXRpb24oKTsKKyAgICB1bmlmb3Jtcy5tYXRyaXhMb2NhdGlvbiA9IHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7CisgICAgdW5pZm9ybXMucG9pbnRM
b2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnBvaW50TG9jYXRpb24oKTsKKworICAg
IHVuaWZvcm1zLnNhbXBsZXJMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2Ft
cGxlckxvY2F0aW9uKCk7CisgICAgdW5pZm9ybXMuYWxwaGFMb2NhdGlvbiA9IHByb2dyYW0tPmZy
YWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOworICAgIHVuaWZvcm1zLmZyYWdtZW50VGV4
VHJhbnNmb3JtTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4
VHJhbnNmb3JtTG9jYXRpb24oKTsKKyAgICB1bmlmb3Jtcy5lZGdlTG9jYXRpb24gPSBwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpOworfQorCitzdGF0aWMgdm9pZCBmaW5k
VGlsZVByb2dyYW1Vbmlmb3JtcyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIs
IGNvbnN0IENDVGlsZURyYXdRdWFkKiBxdWFkLCBUaWxlUHJvZ3JhbVVuaWZvcm1zJiB1bmlmb3Jt
cykKK3sKKyAgICBpZiAocXVhZC0+aXNBbnRpYWxpYXNlZCgpKSB7CisgICAgICAgIGlmIChxdWFk
LT5zd2l6emxlQ29udGVudHMoKSkgeworICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1w
bDo6UHJvZ3JhbVN3aXp6bGVBQSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3Jh
bVN3aXp6bGVBQSgpOworICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1
bmlmb3Jtcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25zdCBDQ1RpbGVkTGF5
ZXJJbXBsOjpQcm9ncmFtQUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1B
QSgpOworICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3Jtcyk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocXVhZC0+bmVlZHNCbGVuZGlu
ZygpKSB7CisgICAgICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZSogcHJvZ3Jh
bSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGUoKTsKKyAgICAgICAgICAgICAg
ICB0aWxlVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1zKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbSog
cHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbSgpOworICAgICAgICAgICAgICAg
IHRpbGVVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHF1YWQtPnN3aXp6bGVDb250ZW50cygp
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6
bGVPcGFxdWUqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1Td2l6emxlT3Bh
cXVlKCk7CisgICAgICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlm
b3Jtcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0IENDVGls
ZWRMYXllckltcGw6OlByb2dyYW1PcGFxdWUqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxl
clByb2dyYW1PcGFxdWUoKTsKKyAgICAgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0sIHVuaWZvcm1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUaWxlUXVhZChjb25zdCBDQ1RpbGVEcmF3
UXVhZCogcXVhZCkKK3sKKyAgICBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCA9IHF1YWQtPnF1YWRS
ZWN0KCk7CisKKyAgICBGbG9hdFJlY3QgY2xhbXBSZWN0KHRpbGVSZWN0KTsKKyAgICAvLyBDbGFt
cCB0ZXh0dXJlIGNvb3JkaW5hdGVzIHRvIGF2b2lkIHNhbXBsaW5nIG91dHNpZGUgdGhlIGxheWVy
CisgICAgLy8gYnkgZGVmbGF0aW5nIHRoZSB0aWxlIHJlZ2lvbiBoYWxmIGEgdGV4ZWwgb3IgaGFs
ZiBhIHRleGVsCisgICAgLy8gbWludXMgZXBzaWxvbiBmb3Igb25lIHBpeGVsIGxheWVycy4gVGhl
IHJlc3VsdGluZyBjbGFtcCByZWdpb24KKyAgICAvLyBpcyBtYXBwZWQgdG8gdGhlIHVuaXQgc3F1
YXJlIGJ5IHRoZSB2ZXJ0ZXggc2hhZGVyIGFuZCBtYXBwZWQKKyAgICAvLyBiYWNrIHRvIG5vcm1h
bGl6ZWQgdGV4dHVyZSBjb29yZGluYXRlcyBieSB0aGUgZnJhZ21lbnQgc2hhZGVyCisgICAgLy8g
YWZ0ZXIgYmVpbmcgY2xhbXBlZCB0byAwLTEgcmFuZ2UuCisgICAgY29uc3QgZmxvYXQgZXBzaWxv
biA9IDEgLyAxMDI0LjBmOworICAgIGZsb2F0IGNsYW1wWCA9IG1pbigwLjUsIGNsYW1wUmVjdC53
aWR0aCgpIC8gMi4wIC0gZXBzaWxvbik7CisgICAgZmxvYXQgY2xhbXBZID0gbWluKDAuNSwgY2xh
bXBSZWN0LmhlaWdodCgpIC8gMi4wIC0gZXBzaWxvbik7CisgICAgY2xhbXBSZWN0LmluZmxhdGVY
KC1jbGFtcFgpOworICAgIGNsYW1wUmVjdC5pbmZsYXRlWSgtY2xhbXBZKTsKKyAgICBGbG9hdFNp
emUgY2xhbXBPZmZzZXQgPSBjbGFtcFJlY3QubWluWE1pbllDb3JuZXIoKSAtIEZsb2F0UmVjdCh0
aWxlUmVjdCkubWluWE1pbllDb3JuZXIoKTsKKworICAgIEZsb2F0UG9pbnQgdGV4dHVyZU9mZnNl
dCA9IHF1YWQtPnRleHR1cmVPZmZzZXQoKSArIGNsYW1wT2Zmc2V0OworCisgICAgLy8gTWFwIGNs
YW1waW5nIHJlY3RhbmdsZSB0byB1bml0IHNxdWFyZS4KKyAgICBmbG9hdCB2ZXJ0ZXhUZXhUcmFu
c2xhdGVYID0gLWNsYW1wUmVjdC54KCkgLyBjbGFtcFJlY3Qud2lkdGgoKTsKKyAgICBmbG9hdCB2
ZXJ0ZXhUZXhUcmFuc2xhdGVZID0gLWNsYW1wUmVjdC55KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7
CisgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVYID0gdGlsZVJlY3Qud2lkdGgoKSAvIGNsYW1wUmVj
dC53aWR0aCgpOworICAgIGZsb2F0IHZlcnRleFRleFNjYWxlWSA9IHRpbGVSZWN0LmhlaWdodCgp
IC8gY2xhbXBSZWN0LmhlaWdodCgpOworCisgICAgLy8gTWFwIHRvIG5vcm1hbGl6ZWQgdGV4dHVy
ZSBjb29yZGluYXRlcy4KKyAgICBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSA9IHF1YWQtPnRl
eHR1cmVTaXplKCk7CisgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVYID0gdGV4dHVyZU9m
ZnNldC54KCkgLyB0ZXh0dXJlU2l6ZS53aWR0aCgpOworICAgIGZsb2F0IGZyYWdtZW50VGV4VHJh
bnNsYXRlWSA9IHRleHR1cmVPZmZzZXQueSgpIC8gdGV4dHVyZVNpemUuaGVpZ2h0KCk7CisgICAg
ZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVggPSBjbGFtcFJlY3Qud2lkdGgoKSAvIHRleHR1cmVTaXpl
LndpZHRoKCk7CisgICAgZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVkgPSBjbGFtcFJlY3QuaGVpZ2h0
KCkgLyB0ZXh0dXJlU2l6ZS5oZWlnaHQoKTsKKworICAgIFRpbGVQcm9ncmFtVW5pZm9ybXMgdW5p
Zm9ybXM7CisgICAgZmluZFRpbGVQcm9ncmFtVW5pZm9ybXModGhpcywgcXVhZCwgdW5pZm9ybXMp
OworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHVuaWZvcm1zLnBy
b2dyYW0pKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaSh1bmlmb3Jt
cy5zYW1wbGVyTG9jYXRpb24sIDApKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFj
dGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgcXVhZC0+dGV4dHVyZUlkKCkpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIHF1YWQtPnRleHR1cmVGaWx0ZXIoKSkpOworICAgIEdM
Qyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgcXVhZC0+
dGV4dHVyZUZpbHRlcigpKSk7CisKKyAgICBGbG9hdFF1YWQgbG9jYWxRdWFkOworICAgIGlmIChx
dWFkLT5pc0FudGlhbGlhc2VkKCkpIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2
aWNlVHJhbnNmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgod2luZG93TWF0cml4KCkgKiBwcm9q
ZWN0aW9uTWF0cml4KCkgKiBxdWFkLT5xdWFkVHJhbnNmb3JtKCkpLnRvMmRUcmFuc2Zvcm0oKTsK
KyAgICAgICAgaWYgKCFkZXZpY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgRmxvYXRRdWFkIGRldmljZUxheWVyUXVhZCA9IGRldmljZVRy
YW5zZm9ybS5tYXBRdWFkKEZsb2F0UXVhZChxdWFkLT5sYXllclJlY3QoKSkpOworCisgICAgICAg
IENDTGF5ZXJRdWFkIGRldmljZUxheWVyQm91bmRzID0gQ0NMYXllclF1YWQoRmxvYXRRdWFkKGRl
dmljZUxheWVyUXVhZC5ib3VuZGluZ0JveCgpKSk7CisgICAgICAgIGRldmljZUxheWVyQm91bmRz
LmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOworCisgICAgICAgIENDTGF5ZXJRdWFkIGRl
dmljZUxheWVyRWRnZXMgPSBDQ0xheWVyUXVhZChkZXZpY2VMYXllclF1YWQpOworICAgICAgICBk
ZXZpY2VMYXllckVkZ2VzLmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOworCisgICAgICAg
IGZsb2F0IGVkZ2VbMjRdOworICAgICAgICBkZXZpY2VMYXllckVkZ2VzLnRvRmxvYXRBcnJheShl
ZGdlKTsKKyAgICAgICAgZGV2aWNlTGF5ZXJCb3VuZHMudG9GbG9hdEFycmF5KCZlZGdlWzEyXSk7
CisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTNmdih1bmlmb3Jtcy5l
ZGdlTG9jYXRpb24sIGVkZ2UsIDgpKTsKKworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPnVuaWZvcm00Zih1bmlmb3Jtcy52ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgdmVydGV4
VGV4VHJhbnNsYXRlWCwgdmVydGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0
ZXhUZXhTY2FsZVkpKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3Jt
NGYodW5pZm9ybXMuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgZnJhZ21lbnRUZXhUcmFu
c2xhdGVYLCBmcmFnbWVudFRleFRyYW5zbGF0ZVksIGZyYWdtZW50VGV4U2NhbGVYLCBmcmFnbWVu
dFRleFNjYWxlWSkpOworCisgICAgICAgIEZsb2F0UG9pbnQgYm90dG9tUmlnaHQodGlsZVJlY3Qu
bWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOworICAgICAgICBGbG9hdFBvaW50IGJvdHRvbUxlZnQo
dGlsZVJlY3QueCgpLCB0aWxlUmVjdC5tYXhZKCkpOworICAgICAgICBGbG9hdFBvaW50IHRvcExl
ZnQodGlsZVJlY3QueCgpLCB0aWxlUmVjdC55KCkpOworICAgICAgICBGbG9hdFBvaW50IHRvcFJp
Z2h0KHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QueSgpKTsKKworICAgICAgICAvLyBNYXAgcG9p
bnRzIHRvIGRldmljZSBzcGFjZS4KKyAgICAgICAgYm90dG9tUmlnaHQgPSBkZXZpY2VUcmFuc2Zv
cm0ubWFwUG9pbnQoYm90dG9tUmlnaHQpOworICAgICAgICBib3R0b21MZWZ0ID0gZGV2aWNlVHJh
bnNmb3JtLm1hcFBvaW50KGJvdHRvbUxlZnQpOworICAgICAgICB0b3BMZWZ0ID0gZGV2aWNlVHJh
bnNmb3JtLm1hcFBvaW50KHRvcExlZnQpOworICAgICAgICB0b3BSaWdodCA9IGRldmljZVRyYW5z
Zm9ybS5tYXBQb2ludCh0b3BSaWdodCk7CisKKyAgICAgICAgQ0NMYXllclF1YWQ6OkVkZ2UgYm90
dG9tRWRnZShib3R0b21SaWdodCwgYm90dG9tTGVmdCk7CisgICAgICAgIENDTGF5ZXJRdWFkOjpF
ZGdlIGxlZnRFZGdlKGJvdHRvbUxlZnQsIHRvcExlZnQpOworICAgICAgICBDQ0xheWVyUXVhZDo6
RWRnZSB0b3BFZGdlKHRvcExlZnQsIHRvcFJpZ2h0KTsKKyAgICAgICAgQ0NMYXllclF1YWQ6OkVk
Z2UgcmlnaHRFZGdlKHRvcFJpZ2h0LCBib3R0b21SaWdodCk7CisKKyAgICAgICAgaWYgKHF1YWQt
PnRvcEVkZ2VBQSgpKQorICAgICAgICAgICAgdG9wRWRnZSA9IGRldmljZUxheWVyRWRnZXMudG9w
KCk7CisgICAgICAgIGlmIChxdWFkLT5sZWZ0RWRnZUFBKCkpCisgICAgICAgICAgICBsZWZ0RWRn
ZSA9IGRldmljZUxheWVyRWRnZXMubGVmdCgpOworICAgICAgICBpZiAocXVhZC0+cmlnaHRFZGdl
QUEoKSkKKyAgICAgICAgICAgIHJpZ2h0RWRnZSA9IGRldmljZUxheWVyRWRnZXMucmlnaHQoKTsK
KyAgICAgICAgaWYgKHF1YWQtPmJvdHRvbUVkZ2VBQSgpKQorICAgICAgICAgICAgYm90dG9tRWRn
ZSA9IGRldmljZUxheWVyRWRnZXMuYm90dG9tKCk7CisKKyAgICAgICAgZmxvYXQgc2lnbiA9IEZs
b2F0UXVhZCh0aWxlUmVjdCkuaXNDb3VudGVyY2xvY2t3aXNlKCkgPyAtMSA6IDE7CisgICAgICAg
IGJvdHRvbUVkZ2Uuc2NhbGUoc2lnbik7CisgICAgICAgIGxlZnRFZGdlLnNjYWxlKHNpZ24pOwor
ICAgICAgICB0b3BFZGdlLnNjYWxlKHNpZ24pOworICAgICAgICByaWdodEVkZ2Uuc2NhbGUoc2ln
bik7CisKKyAgICAgICAgLy8gQ3JlYXRlIGRldmljZSBzcGFjZSBxdWFkLgorICAgICAgICBDQ0xh
eWVyUXVhZCBkZXZpY2VRdWFkKGxlZnRFZGdlLCB0b3BFZGdlLCByaWdodEVkZ2UsIGJvdHRvbUVk
Z2UpOworCisgICAgICAgIC8vIE1hcCBxdWFkIHRvIGxheWVyIHNwYWNlLgorICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlRGV2aWNlVHJhbnNmb3JtID0gZGV2aWNlVHJhbnNmb3Jt
LmludmVyc2UoKTsKKyAgICAgICAgbG9jYWxRdWFkID0gaW52ZXJzZURldmljZVRyYW5zZm9ybS5t
YXBRdWFkKGRldmljZVF1YWQuZmxvYXRRdWFkKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IE1vdmUgZnJhZ21lbnQgc2hhZGVyIHRyYW5zZm9ybSB0byB2ZXJ0ZXggc2hhZGVyLiBXZSBjYW4g
ZG8gdGhpcyB3aGlsZQorICAgICAgICAvLyBzdGlsbCBwcm9kdWNpbmcgY29ycmVjdCByZXN1bHRz
IGFzIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24KKyAgICAgICAgLy8gc2hvdWxkIGFsd2F5
cyBiZSBub24tbmVnYXRpdmUgd2hlbiB0aWxlcyBhcmUgdHJhbnNmb3JtZWQgaW4gYSB3YXkKKyAg
ICAgICAgLy8gdGhhdCBjb3VsZCByZXN1bHQgaW4gc2FtcGxpbmcgb3V0c2lkZSB0aGUgbGF5ZXIu
CisgICAgICAgIHZlcnRleFRleFNjYWxlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKKyAgICAgICAg
dmVydGV4VGV4U2NhbGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOworICAgICAgICB2ZXJ0ZXhUZXhU
cmFuc2xhdGVYICo9IGZyYWdtZW50VGV4U2NhbGVYOworICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xh
dGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOworICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVYICs9
IGZyYWdtZW50VGV4VHJhbnNsYXRlWDsKKyAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWSArPSBm
cmFnbWVudFRleFRyYW5zbGF0ZVk7CisKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgp
LT51bmlmb3JtNGYodW5pZm9ybXMudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24sIHZlcnRleFRl
eFRyYW5zbGF0ZVgsIHZlcnRleFRleFRyYW5zbGF0ZVksIHZlcnRleFRleFNjYWxlWCwgdmVydGV4
VGV4U2NhbGVZKSk7CisKKyAgICAgICAgbG9jYWxRdWFkID0gRmxvYXRSZWN0KHRpbGVSZWN0KTsK
KyAgICB9CisKKyAgICAvLyBOb3JtYWxpemUgdG8gdGlsZVJlY3QuCisgICAgbG9jYWxRdWFkLnNj
YWxlKDEuMGYgLyB0aWxlUmVjdC53aWR0aCgpLCAxLjBmIC8gdGlsZVJlY3QuaGVpZ2h0KCkpOwog
Ci0gICAgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhyb290RHJhd0xheWVyLCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWQtPnF1YWRUcmFuc2Zv
cm0oKSwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHko
KSwgbG9jYWxRdWFkLCB1bmlmb3Jtcy5tYXRyaXhMb2NhdGlvbiwgdW5pZm9ybXMuYWxwaGFMb2Nh
dGlvbiwgdW5pZm9ybXMucG9pbnRMb2NhdGlvbik7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3Q3VzdG9tTGF5ZXJRdWFkKGNvbnN0IENDQ3VzdG9tTGF5ZXJEcmF3UXVhZCog
cXVhZCkKK3sKKyAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBxdWFkLT5sYXllcigpOworICAgIGxh
eWVyLT5kcmF3KHRoaXMpOworfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNo
RHJhd2luZ0ZyYW1lKCkKK3sKICAgICBpZiAobV9oZWFkc1VwRGlzcGxheS0+ZW5hYmxlZCgpKSB7
CiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORCkpOwogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6
T05FX01JTlVTX1NSQ19BTFBIQSkpOwpAQCAtNDkxLDYgKzY3NiwxOCBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIAogICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORCkpOworCisgICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMg
PSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7Cisg
ICAgc2l6ZV90IHJlY2xhaW1MaW1pdCA9IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRl
cyh2aWV3cG9ydFNpemUoKSk7CisgICAgaWYgKHJlY2xhaW1MaW1pdCA+IGNvbnRlbnRzTWVtb3J5
VXNlQnl0ZXMpCisgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRQcmVm
ZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xhaW1MaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0
ZXMpOworICAgIGVsc2UKKyAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNl
dFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoMCk7CisKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0
dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fcmVuZGVyU3VyZmFjZVRleHR1cmVB
bGxvY2F0b3IuZ2V0KCkpOworCisgICAgaWYgKHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVu
KQorICAgICAgICBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwogfQogCiB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dG9HTE1hdHJpeChmbG9hdCogZmxhdHRlbmVkLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKQEAgLTY0Miw0MiArODM5LDggQEAgYm9vbCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJT
dXJmYWNlKQogI2VuZGlmCiAKICAgICBzZXREcmF3Vmlld3BvcnRSZWN0KHJlbmRlclN1cmZhY2Ut
PmNvbnRlbnRSZWN0KCksIGZhbHNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDUmVuZGVy
U3VyZmFjZSogdGFyZ2V0U3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVj
dCkKLXsKLSAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJp
YnV0ZXNUb1RhcmdldDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdldFN1cmZhY2UtPm93bmluZ0xh
eWVySWQoKSkpIHsKLSAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBz
dXJmYWNlRGFtYWdlUmVjdCk7Ci0gICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPnJlbGVh
c2VDb250ZW50c1RleHR1cmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChs
YXllci0+dmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpICYmIG1fY2FwYWJpbGl0aWVzLnVzaW5n
UGFydGlhbFN3YXApIHsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2VSZWN0KGxheWVy
LT5jbGlwUmVjdCgpKTsKLSAgICAgICAgY2xpcEFuZERhbWFnZVJlY3QuaW50ZXJzZWN0KHN1cmZh
Y2VEYW1hZ2VSZWN0KTsKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0
KGNsaXBBbmREYW1hZ2VSZWN0KSk7Ci0gICAgfSBlbHNlIGlmIChtX2NhcGFiaWxpdGllcy51c2lu
Z1BhcnRpYWxTd2FwKQotICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qo
c3VyZmFjZURhbWFnZVJlY3QpKTsKLSAgICBlbHNlIGlmIChsYXllci0+dXNlc0xheWVyQ2xpcHBp
bmcoKSkKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChsYXllci0+Y2xpcFJlY3QoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotCi0gICAgYm9vbCBvcGFxdWUgPSBsYXll
ci0+b3BhcXVlKCkgJiYgbGF5ZXItPmRyYXdPcGFjaXR5KCkgPT0gMTsKLSAgICBpZiAob3BhcXVl
KQotICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EKSk7Ci0KLSAgICBsYXllci0+ZHJhdyh0aGlzKTsKLQotICAgIGlm
IChvcGFxdWUpCi0gICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwotCi0gICAgLy8gRHJhdyB0aGUgZGVidWcgYm9y
ZGVyIGlmIHRoZXJlIGlzIG9uZS4KLSAgICBsYXllci0+ZHJhd0RlYnVnQm9yZGVyKHRoaXMpOwor
ICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBTZXRzIHRoZSBzY2lzc29yIHJlZ2lvbiB0byB0aGUg
Z2l2ZW4gcmVjdGFuZ2xlLiBUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gZm9yIHRoZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA2ZTE0OWYwZTYzODUwZDI4YzI1ZjJkMTNhZDc2
OWYzZjkwNjU2YWM2Li5jOGFjYjJjMzQ1YWEwNmMxN2RkNDlhMzcxYzg5MmE4YzJkMmE3ZGYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNDIsNyArNDIsNiBAQAogI2lu
Y2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJ
bXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgotI2luY2x1ZGUgImNjL0ND
TGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5j
bHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJ
bXBsLmgiCkBAIC02Niw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENDSGVh
ZHNVcERpc3BsYXk7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdElt
cGw7CitjbGFzcyBDQ1JlbmRlclBhc3M7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjsKQEAgLTk3
LDcgKzk3LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCB2aWV3cG9ydENoYW5nZWQoKTsKIAotICAg
IHZvaWQgZHJhd0xheWVycygpOworICAgIHZvaWQgYmVnaW5EcmF3aW5nRnJhbWUoKTsKKyAgICB2
b2lkIGRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyopOworICAgIHZvaWQgZmluaXNo
RHJhd2luZ0ZyYW1lKCk7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAog
ICAgIHZvaWQgZmluaXNoKCk7CkBAIC0xNTEsOCArMTUzLDYgQEAgcHVibGljOgogCiAgICAgR0Mz
RGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKTsKIAotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxD
Q0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsKLQogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgo
ZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIHZvaWQgZHJhd1RleHR1
cmVkUXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNp
dHksIGNvbnN0IEZsb2F0UXVhZCYsCkBAIC0xNjIsMjEgKzE2MiwyMiBAQCBwcml2YXRlOgogICAg
IExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4pOwogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCi0gICAgdm9pZCBk
cmF3TGF5ZXJzSW50ZXJuYWwoKTsKLSAgICB2b2lkIGRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFj
ZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1wbCosIENDUmVu
ZGVyU3VyZmFjZSosIGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCB0cmFja0RhbWFnZUZv
ckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlz
dCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgdm9pZCBkcmF3UXVhZChjb25zdCBDQ0Ry
YXdRdWFkKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CisgICAgdm9pZCBk
cmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOworICAgIHZv
aWQgZHJhd1JlbmRlclN1cmZhY2VRdWFkKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKik7
CisgICAgdm9pZCBkcmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQq
KTsKKyAgICB2b2lkIGRyYXdUaWxlUXVhZChjb25zdCBDQ1RpbGVEcmF3UXVhZCopOworICAgIHZv
aWQgZHJhd0N1c3RvbUxheWVyUXVhZChjb25zdCBDQ0N1c3RvbUxheWVyRHJhd1F1YWQqKTsKIAog
ICAgIE1hbmFnZWRUZXh0dXJlKiBnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKTsKICAgICB2b2lk
IGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCk7CiAKICAgICB2b2lkIHNldERyYXdWaWV3
cG9ydFJlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wgZmxpcFkpOwogCi0gICAgdm9pZCByZWxlYXNl
UmVuZGVyU3VyZmFjZVRleHR1cmVzKCk7Ci0KICAgICBib29sIHVzZVJlbmRlclN1cmZhY2UoQ0NS
ZW5kZXJTdXJmYWNlKik7Ci0gICAgdm9pZCBjbGVhclN1cmZhY2VGb3JEZWJ1ZyhDQ0xheWVySW1w
bCogcmVuZGVyU3VyZmFjZUxheWVyLCBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3Qg
RmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CisgICAgdm9pZCBjbGVhclN1cmZhY2VGb3JE
ZWJ1ZyhDQ1JlbmRlclN1cmZhY2UqLCBDQ1JlbmRlclN1cmZhY2UqIHJvb3RSZW5kZXJTdXJmYWNl
LCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKKworICAgIHZvaWQgcmVsZWFz
ZVJlbmRlclN1cmZhY2VUZXh0dXJlcygpOwogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKIApAQCAtMjM4LDggKzIzOSw2IEBAIHByaXZhdGU6CiAKICAgICBDQ1JlbmRlclN1cmZhY2Uq
IG1fZGVmYXVsdFJlbmRlclN1cmZhY2U7CiAKLSAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJTb3J0
ZXI7Ci0KICAgICBGbG9hdFF1YWQgbV9zaGFyZWRHZW9tZXRyeVF1YWQ7CiAKICAgICBib29sIG1f
aXNWaWV3cG9ydENoYW5nZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaAppbmRleCBiYmE1MWY5Zjc4NTUz
MGQ2Njc5ZjRkNTUzN2Q3ODQ2YjRmNTJlNDdlLi4zNDMyM2U2ZDMzOTk3N2VlM2Y1NWQyOTA1OWE4
M2ZlYTBlZmVjNWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmgKQEAgLTE1MSw2ICsxNTEsOCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBwcm9n
cmFtKTsKICAgICBpbnQgYWxwaGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFMb2Nh
dGlvbjsgfQorICAgIGludCBlZGdlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiAtMTsgfQorICAg
IGludCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gLTE7IH0K
ICAgICBpbnQgc2FtcGxlckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVyTG9jYXRp
b247IH0KIAogcHJpdmF0ZToKQEAgLTE2NCw2ICsxNjYsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGluaXQoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBwcm9ncmFtKTsKICAgICBpbnQgYWxw
aGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIC0xOyB9CisgICAgaW50IGVkZ2VMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIC0xOyB9CisgICAgaW50IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiAtMTsgfQogICAgIGludCBzYW1wbGVyTG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3NhbXBsZXJMb2NhdGlvbjsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYWM3YjhmNjFhM2ZmY2U4YmNmMzZjN2Q4ZmU1MDk0MDA5
Yzg0NWNhOS4uMDdiYWIyMDI4ZjEzNDlmZWMyMDVhNzM0MGMzM2ZkNjllNTc5ZTFjYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBUaWxl
ZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAg
IH0KIAogICAgIHRpbGVkTGF5ZXItPnNldFNraXBzRHJhdyhtX3NraXBzRHJhdyk7Ci0gICAgdGls
ZWRMYXllci0+c2V0U2FtcGxlZFRleGVsRm9ybWF0KG1fc2FtcGxlZFRleGVsRm9ybWF0KTsKKyAg
ICB0aWxlZExheWVyLT5zZXRDb250ZW50c1N3aXp6bGVkKG1fc2FtcGxlZFRleGVsRm9ybWF0ICE9
IExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkEpOwogICAgIHRpbGVk
TGF5ZXItPnNldFRpbGluZ0RhdGEoKm1fdGlsZXIpOwogCiAgICAgZm9yIChDQ0xheWVyVGlsaW5n
RGF0YTo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVn
aW4oKTsgaXRlciAhPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ3VzdG9t
TGF5ZXJEcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1ODBiMTBlZDI0
OTBjN2E2Zjg5YWNmMjMxMWNkODBhY2U4M2E1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1
YWQuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJjYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQYXNzT3duUHRyPENDQ3VzdG9tTGF5ZXJEcmF3UXVhZD4gQ0NDdXN0b21MYXllckRyYXdR
dWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29u
c3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllcikKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDQ3VzdG9tTGF5ZXJEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRS
ZWN0LCBsYXllcikpOworfQorCitDQ0N1c3RvbUxheWVyRHJhd1F1YWQ6OkNDQ3VzdG9tTGF5ZXJE
cmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJ
bnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyKQorICAgIDogQ0NEcmF3UXVhZChz
aGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1YWQ6OkN1c3RvbUxheWVyLCBxdWFkUmVjdCkKKyAgICAs
IG1fbGF5ZXIobGF5ZXIpCit7CisgICAgQVNTRVJUKG1fbGF5ZXIpOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3Rv
bUxheWVyRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ3VzdG9tTGF5ZXJEcmF3UXVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5YmQ0NjIzMjUzYTRj
NDU1MDlhYzI0NTBmOWNhMzJhNzNjN2Q5YzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQu
aApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0N1c3RvbUxheWVyRHJhd1F1YWRf
aAorI2RlZmluZSBDQ0N1c3RvbUxheWVyRHJhd1F1YWRfaAorCisjaW5jbHVkZSAiY2MvQ0NEcmF3
UXVhZC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ0NMYXllckltcGw7CisKKy8vIEZJWE1FOiBUaGlzIGNsYXNzIGlzIGEgdGVt
cG9yYXJ5IHdheSB0byBhY2Nlc3MgQ0NMYXllckltcGw6OmRyYXcuIFRoaXMgY2xhc3MKKy8vIHNo
b3VsZCBiZSBjb252ZXJ0ZWQgdG8gYSBzZXQgb2YgZHJhdyBxdWFkcyBmb3IgZWFjaCBsYXllciBt
YXRlcmlhbCB0eXBlIGFuZAorLy8gdGhlbiByZW1vdmVkLgorY2xhc3MgQ0NDdXN0b21MYXllckRy
YXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEND
Q3VzdG9tTGF5ZXJEcmF3UXVhZCk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0ND
dXN0b21MYXllckRyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25z
dCBJbnRSZWN0JiwgQ0NMYXllckltcGwqKTsKKworICAgIENDTGF5ZXJJbXBsKiBsYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KKworcHJpdmF0ZToKKyAgICBDQ0N1c3RvbUxheWVyRHJh
d1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllcklt
cGwqKTsKKworICAgIENDTGF5ZXJJbXBsKiBtX2xheWVyOworfTsKKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RGVidWdCb3JkZXJEcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwNTZh
NDI4NDBkNDM0YTk3NzMwNTEyMTQ3YmI4OWMwOTZmZjEzYWYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9yZGVy
RHJhd1F1YWQuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzT3duUHRyPENDRGVidWdCb3JkZXJEcmF3UXVhZD4gQ0NEZWJ1Z0JvcmRl
ckRyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0
ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgaW50IHdpZHRo
KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKHNoYXJl
ZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGNvbG9yLCB3aWR0aCkpOworfQorCitDQ0RlYnVnQm9yZGVy
RHJhd1F1YWQ6OkNDRGVidWdCb3JkZXJEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSog
c2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBpbnQgd2lkdGgpCisgICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3
UXVhZDo6RGVidWdCb3JkZXIsIHF1YWRSZWN0KQorICAgICwgbV9jb2xvcihjb2xvcikKKyAgICAs
IG1fd2lkdGgod2lkdGgpCit7CisgICAgbV9xdWFkT3BhcXVlID0gZmFsc2U7CisgICAgaWYgKG1f
Y29sb3IuYWxwaGEoKSAhPSAxKQorICAgICAgICBtX25lZWRzQmxlbmRpbmcgPSB0cnVlOworfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAy
MjZhZWQ3NmY1Y2FlNWZmMDNlZmRlMzkwOTAyNjNiNDM1OTI5YzgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlYnVnQm9y
ZGVyRHJhd1F1YWQuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0RlYnVnQm9y
ZGVyRHJhd1F1YWRfaAorI2RlZmluZSBDQ0RlYnVnQm9yZGVyRHJhd1F1YWRfaAorCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0RlYnVnQm9yZGVy
RHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q0NEZWJ1Z0JvcmRlckRyYXdRdWFkKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q0RlYnVnQm9yZGVyRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNv
bnN0IEludFJlY3QmLCBjb25zdCBDb2xvciYsIGludCB3aWR0aCk7CisKKyAgICBjb25zdCBDb2xv
ciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9OworICAgIGludCB3aWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBDQ0RlYnVnQm9yZGVyRHJh
d1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQ29s
b3ImLCBpbnQgd2lkdGgpOworCisgICAgQ29sb3IgbV9jb2xvcjsKKyAgICBpbnQgbV93aWR0aDsK
K307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmY2Y0
NDlmMDRmMmQ1ZjU2YmZmNTg5ODJjYTQ0MTAwMThkYmUyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmNw
cApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiY2MvQ0NEcmF3UXVhZC5oIgorCisjaW5jbHVkZSAiY2MvQ0NDdXN0b21MYXllckRyYXdRdWFk
LmgiCisjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgor
I2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NUaWxl
RHJhd1F1YWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ0RyYXdRdWFkOjpDQ0RyYXdR
dWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIE1hdGVyaWFsIG1h
dGVyaWFsLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCkKKyAgICA6IG1fc2hhcmVkUXVhZFN0YXRl
KHNoYXJlZFF1YWRTdGF0ZSkKKyAgICAsIG1fbWF0ZXJpYWwobWF0ZXJpYWwpCisgICAgLCBtX3F1
YWRSZWN0KHF1YWRSZWN0KQorICAgICwgbV9xdWFkT3BhcXVlKHRydWUpCisgICAgLCBtX25lZWRz
QmxlbmRpbmcoZmFsc2UpCit7CisgICAgQVNTRVJUKG1fc2hhcmVkUXVhZFN0YXRlKTsKKyAgICBB
U1NFUlQobV9tYXRlcmlhbCAhPSBJbnZhbGlkKTsKK30KKworY29uc3QgQ0NEZWJ1Z0JvcmRlckRy
YXdRdWFkKiBDQ0RyYXdRdWFkOjp0b0RlYnVnQm9yZGVyRHJhd1F1YWQoKSBjb25zdAoreworICAg
IEFTU0VSVChtX21hdGVyaWFsID09IERlYnVnQm9yZGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKj4odGhpcyk7Cit9CisKK2NvbnN0IENDUmVu
ZGVyU3VyZmFjZURyYXdRdWFkKiBDQ0RyYXdRdWFkOjp0b1JlbmRlclN1cmZhY2VEcmF3UXVhZCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbWF0ZXJpYWwgPT0gUmVuZGVyU3VyZmFjZSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKj4odGhpcyk7
Cit9CisKK2NvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKiBDQ0RyYXdRdWFkOjp0b1NvbGlkQ29s
b3JEcmF3UXVhZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbWF0ZXJpYWwgPT0gU29saWRDb2xv
cik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKj4o
dGhpcyk7Cit9CisKK2NvbnN0IENDVGlsZURyYXdRdWFkKiBDQ0RyYXdRdWFkOjp0b1RpbGVEcmF3
UXVhZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbWF0ZXJpYWwgPT0gVGlsZWRDb250ZW50KTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0NUaWxlRHJhd1F1YWQqPih0aGlzKTsKK30K
KworY29uc3QgQ0NDdXN0b21MYXllckRyYXdRdWFkKiBDQ0RyYXdRdWFkOjp0b0N1c3RvbUxheWVy
RHJhd1F1YWQoKSBjb25zdAoreworICAgIEFTU0VSVChtX21hdGVyaWFsID09IEN1c3RvbUxheWVy
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0NDdXN0b21MYXllckRyYXdRdWFkKj4o
dGhpcyk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTY5MTNiM2NlNTNh
YzBlZDBlZWJlNGQ3Nzk4MDRjYzI1ZDRlNmFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oCkBAIC0wLDAg
KzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDRHJhd1F1YWRfaAorI2RlZmluZSBDQ0RyYXdRdWFk
X2gKKworI2luY2x1ZGUgImNjL0NDU2hhcmVkUXVhZFN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOworY2xhc3MgQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ7CitjbGFzcyBDQ1NvbGlkQ29sb3JEcmF3UXVhZDsKK2NsYXNzIENDVGlsZURy
YXdRdWFkOworY2xhc3MgQ0NDdXN0b21MYXllckRyYXdRdWFkOworCisvLyBDQ0RyYXdRdWFkIGlz
IGEgYmFnIG9mIGRhdGEgdXNlZCBmb3IgZHJhd2luZyBhIHF1YWQuIEJlY2F1c2UgZGlmZmVyZW50
CisvLyBtYXRlcmlhbHMgbmVlZCBkaWZmZXJlbnQgYml0cyBvZiBwZXItcXVhZCBkYXRhIHRvIHJl
bmRlciwgY2xhc3NlcyB0aGF0IGRlcml2ZQorLy8gZnJvbSBDQ0RyYXdRdWFkIHN0b3JlIGFkZGl0
aW9uYWwgZGF0YSBpbiB0aGVpciBkZXJpdmVkIGluc3RhbmNlLiBUaGUgTWF0ZXJpYWwKKy8vIGVu
dW0gaXMgdXNlZCB0byAic2FmZWx5IiB1cGNhc3QgdG8gdGhlIGRlcml2ZWQgY2xhc3MuCitjbGFz
cyBDQ0RyYXdRdWFkIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0RyYXdRdWFkKTsKK3B1
YmxpYzoKKyAgICBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVh
ZFJlY3Q7IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5xdWFkVHJhbnNmb3JtKCk7IH0KKyAg
ICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX3NoYXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFuc2Zvcm0oKTsgfQorICAgIGNvbnN0IElu
dFJlY3QmIGxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5sYXll
clJlY3QoKTsgfQorICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9zaGFyZWRRdWFkU3RhdGUtPmNsaXBSZWN0KCk7IH0KKyAgICBmbG9hdCBvcGFjaXR5KCkgY29u
c3QgeyByZXR1cm4gbV9zaGFyZWRRdWFkU3RhdGUtPm9wYWNpdHkoKTsgfQorICAgIC8vIEZvciB0
aGUgcHVycG9zZXMgb2YgY3VsbGluZywgYXJlIHRoZSBjb250ZW50cyBvZiB0aGlzIHF1YWQgb3Bh
cXVlPworICAgIGJvb2wgZHJhd3NPcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZFF1YWRT
dGF0ZS0+aXNPcGFxdWUoKSAmJiBtX3F1YWRPcGFxdWUgJiYgb3BhY2l0eSgpID09IDE7IH0KKyAg
ICBib29sIG5lZWRzQmxlbmRpbmcoKSBjb25zdCB7IHJldHVybiAhbV9zaGFyZWRRdWFkU3RhdGUt
PmlzT3BhcXVlKCkgfHwgbV9uZWVkc0JsZW5kaW5nIHx8IG9wYWNpdHkoKSAhPSAxOyB9CisgICAg
Ym9vbCBpc0xheWVyQXhpc0FsaWduZWRJbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRR
dWFkU3RhdGUtPmlzTGF5ZXJBeGlzQWxpZ25lZEludFJlY3QoKTsgfQorCisgICAgZW51bSBNYXRl
cmlhbCB7CisgICAgICAgIEludmFsaWQsCisgICAgICAgIERlYnVnQm9yZGVyLAorICAgICAgICBS
ZW5kZXJTdXJmYWNlLAorICAgICAgICBTb2xpZENvbG9yLAorICAgICAgICBUaWxlZENvbnRlbnQs
CisKKyAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIGFuZCBhZGQgcHJvcGVyIG1hdGVyaWFs
IHR5cGVzIGZvciBhbGwgbGF5ZXIgdHlwZXMKKyAgICAgICAgQ3VzdG9tTGF5ZXIsCisgICAgfTsK
KworICAgIE1hdGVyaWFsIG1hdGVyaWFsKCkgY29uc3QgeyByZXR1cm4gbV9tYXRlcmlhbDsgfQor
CisgICAgY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKiB0b0RlYnVnQm9yZGVyRHJhd1F1YWQo
KSBjb25zdDsKKyAgICBjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCogdG9SZW5kZXJTdXJm
YWNlRHJhd1F1YWQoKSBjb25zdDsKKyAgICBjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCogdG9T
b2xpZENvbG9yRHJhd1F1YWQoKSBjb25zdDsKKyAgICBjb25zdCBDQ1RpbGVEcmF3UXVhZCogdG9U
aWxlRHJhd1F1YWQoKSBjb25zdDsKKyAgICBjb25zdCBDQ0N1c3RvbUxheWVyRHJhd1F1YWQqIHRv
Q3VzdG9tTGF5ZXJEcmF3UXVhZCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgQ0NEcmF3UXVh
ZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIE1hdGVyaWFsLCBjb25zdCBJbnRSZWN0Jik7CisK
KyAgICBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogbV9zaGFyZWRRdWFkU3RhdGU7CisKKyAgICBN
YXRlcmlhbCBtX21hdGVyaWFsOworICAgIEludFJlY3QgbV9xdWFkUmVjdDsKKworICAgIC8vIEJ5
IGRlZmF1bHQsIHRoZSBzaGFyZWQgcXVhZCBzdGF0ZSBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90
IHRoaXMgcXVhZCBpcworICAgIC8vIG9wYXF1ZSBvciBuZWVkcyBibGVuZGluZy4gRGVyaXZlZCBj
bGFzc2VzIGNhbiBvdmVycmlkZSB3aXRoIHRoZXNlCisgICAgLy8gdmFyaWFibGVzLgorICAgIGJv
b2wgbV9xdWFkT3BhcXVlOworICAgIGJvb2wgbV9uZWVkc0JsZW5kaW5nOworfTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBhZjA0MmU1NjY5YjQ2MmZiNmMwOWRl
NmZjM2Q0Y2Y0YjZkODRlOTJkLi4wMzY2NjA5MmYyMzJiYjAxMzdiNjIyMWY3Njk2ZGVkMGVkM2U1
NDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NDdXN0b21MYXll
ckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCkBAIC0xMTcsNiArMTE5LDMxIEBAIHZvaWQgQ0NMYXllckltcGw6OmRyYXcoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKikKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorUGFzc093blB0
cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NMYXllckltcGw6OmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgp
IGNvbnN0Cit7CisgICAgSW50UmVjdCBsYXllckNsaXBSZWN0OworICAgIGlmICh1c2VzTGF5ZXJD
bGlwcGluZygpKQorICAgICAgICBsYXllckNsaXBSZWN0ID0gY2xpcFJlY3QoKTsKKyAgICByZXR1
cm4gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShxdWFkVHJhbnNmb3JtKCksIGRyYXdUcmFuc2Zv
cm0oKSwgdmlzaWJsZUxheWVyUmVjdCgpLCBsYXllckNsaXBSZWN0LCBkcmF3T3BhY2l0eSgpLCBv
cGFxdWUoKSk7Cit9CisKK3ZvaWQgQ0NMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExpc3Qm
IHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQorewor
ICAgIEludFJlY3QgbGF5ZXJSZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKKyAgICBxdWFkTGlz
dC5hcHBlbmQoQ0NDdXN0b21MYXllckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBs
YXllclJlY3QsIHRoaXMpKTsKK30KKwordm9pZCBDQ0xheWVySW1wbDo6YXBwZW5kRGVidWdCb3Jk
ZXJRdWFkKENDUXVhZExpc3QmIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hh
cmVkUXVhZFN0YXRlKSBjb25zdAoreworICAgIGlmICghZGVidWdCb3JkZXJDb2xvcigpLmFscGhh
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVidWdCb3JkZXJXaWR0aCgpIDw9IDApCisg
ICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgbGF5ZXJSZWN0KEludFBvaW50KCksIGJvdW5k
cygpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpjcmVhdGUo
c2hhcmVkUXVhZFN0YXRlLCBsYXllclJlY3QsIGRlYnVnQm9yZGVyQ29sb3IoKSwgZGVidWdCb3Jk
ZXJXaWR0aCgpKSk7Cit9CisKIHZvaWQgQ0NMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUo
TGF5ZXJSZW5kZXJlckNocm9taXVtKikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTE0NywyOCArMTc0LDkgQEAgY29uc3QgSW50UmVjdCBDQ0xheWVySW1wbDo6Z2V0RHJhd1JlY3Qo
KSBjb25zdAogICAgIHJldHVybiBtYXBwZWRSZWN0OwogfQogCi12b2lkIENDTGF5ZXJJbXBsOjpk
cmF3RGVidWdCb3JkZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorVHJh
bnNmb3JtYXRpb25NYXRyaXggQ0NMYXllckltcGw6OnF1YWRUcmFuc2Zvcm0oKSBjb25zdAogewot
ICAgIHN0YXRpYyBmbG9hdCBnbE1hdHJpeFsxNl07Ci0gICAgaWYgKCFkZWJ1Z0JvcmRlckNvbG9y
KCkuYWxwaGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgY29uc3QgTGF5ZXJDaHJvbWl1
bTo6Qm9yZGVyUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPmJvcmRlclByb2dyYW0o
KTsKLSAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKLSAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLQot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IGRyYXdUcmFuc2Zvcm0oKTsK
LSAgICByZW5kZXJNYXRyaXguc2NhbGUzZChib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWln
aHQoKSwgMSk7Ci0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0b0dMTWF0cml4KCZnbE1hdHJp
eFswXSwgbGF5ZXJSZW5kZXJlci0+cHJvamVjdGlvbk1hdHJpeCgpICogcmVuZGVyTWF0cml4KTsK
LSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLCBmYWxzZSwgJmdsTWF0cml4WzBdLCAxKSk7Ci0K
LSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPmZyYWdtZW50U2hh
ZGVyKCkuY29sb3JMb2NhdGlvbigpLCBkZWJ1Z0JvcmRlckNvbG9yKCkucmVkKCkgLyAyNTUuMCwg
ZGVidWdCb3JkZXJDb2xvcigpLmdyZWVuKCkgLyAyNTUuMCwgZGVidWdCb3JkZXJDb2xvcigpLmJs
dWUoKSAvIDI1NS4wLCAxKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+bGluZVdpZHRo
KGRlYnVnQm9yZGVyV2lkdGgoKSkpOwotCi0gICAgLy8gVGhlIGluZGljZXMgZm9yIHRoZSBsaW5l
IGFyZSBzdG9yZWQgaW4gdGhlIHNhbWUgYXJyYXkgYXMgdGhlIHRyaWFuZ2xlIGluZGljZXMuCi0g
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6
TElORV9MT09QLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDYgKiBzaXpl
b2YodW5zaWduZWQgc2hvcnQpKSk7CisgICAgcmV0dXJuIGRyYXdUcmFuc2Zvcm0oKTsKIH0KIAog
dm9pZCBDQ0xheWVySW1wbDo6d3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBlMmMwMGM4Njg5ODJhNzZjNjU4Y2FlODM0MTBlODVi
Y2NkY2Y4MDlmLi4yNmM3YTJmNGQ1ZWM1OTRmODdiY2M3NTMxMmM2OGIwN2QwODFkZjY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJT
dXJmYWNlLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CkBAIC03MCw2ICs3MSwxMCBAQCBwdWJsaWM6CiAgICAgaW50IGRlYnVnSUQoKSBjb25z
dCB7IHJldHVybiBtX2RlYnVnSUQ7IH0KICNlbmRpZgogCisgICAgUGFzc093blB0cjxDQ1NoYXJl
ZFF1YWRTdGF0ZT4gY3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFwcGVuZFF1YWRzKENDUXVhZExpc3QmLCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSopOwor
ICAgIHZvaWQgYXBwZW5kRGVidWdCb3JkZXJRdWFkKENDUXVhZExpc3QmLCBjb25zdCBDQ1NoYXJl
ZFF1YWRTdGF0ZSopIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKik7CiAgICAgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKICAgICB2
aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsK
QEAgLTEzMSw4ICsxMzYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREZWJ1Z0JvcmRlcldpZHRo
KGZsb2F0KTsKICAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9k
ZWJ1Z0JvcmRlcldpZHRoOyB9CiAKLSAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlcihMYXllclJlbmRl
cmVyQ2hyb21pdW0qKTsKLQogICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZS5nZXQoKTsgfQogICAgIHZvaWQgY3JlYXRlUmVu
ZGVyU3VyZmFjZSgpOwogICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlKCkgeyBtX3JlbmRlclN1
cmZhY2UuY2xlYXIoKTsgfQpAQCAtMjAwLDYgKzIwMyw5IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29u
c3Q7CiAgICAgc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQp
OwogCisgICAgLy8gVHJhbnNmb3JtYXRpb24gdXNlZCB0byB0cmFuc2Zvcm0gcXVhZHMgcHJvdmlk
ZWQgaW4gYXBwZW5kUXVhZHMuCisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFk
VHJhbnNmb3JtKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQYXJlbnQoQ0NMYXll
ckltcGwqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQogICAgIGZyaWVuZCBjbGFzcyBU
cmVlU3luY2hyb25pemVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApp
bmRleCBlMGNkMzg5ZGM2ZjhkZjk0MDhhOWMwNTUxZTQwNmVmYmQxZGYyYjBkLi4xMjFkMDVjYzQ5
NzdjZjc5MDg5ODI5NzE4NTEzZGFiOTQzOTEzOTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcApAQCAtMzAsOCArMzAsMTEgQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKyNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3QuaCIKICNpbmNsdWRlICJjYy9DQ1BhZ2VTY2FsZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNj
L0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgi
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTEyNiwxNCArMTI5LDEyNiBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IElu
dFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1w
bFRocmVhZCgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9y
QWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIC8vIEZvciBub3csIHdlIHVzZSBkYW1h
Z2UgdHJhY2tpbmcgdG8gY29tcHV0ZSBhIGdsb2JhbCBzY2lzc29yLiBUbyBkbyB0aGlzLCB3ZSBt
dXN0CisgICAgLy8gY29tcHV0ZSBhbGwgZGFtYWdlIHRyYWNraW5nIGJlZm9yZSBkcmF3aW5nIGFu
eXRoaW5nLCBzbyB0aGF0IHdlIGtub3cgdGhlIHJvb3QKKyAgICAvLyBkYW1hZ2UgcmVjdC4gVGhl
IHJvb3QgZGFtYWdlIHJlY3QgaXMgdGhlbiB1c2VkIHRvIHNjaXNzb3IgZWFjaCBzdXJmYWNlLgor
CisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXpl
KCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CisgICAgICAgIEND
TGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1
cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFj
ZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBBU1NFUlQo
cmVuZGVyU3VyZmFjZSk7CisgICAgICAgIHJlbmRlclN1cmZhY2UtPmRhbWFnZVRyYWNrZXIoKS0+
dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZShyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwg
cmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigp
KTsKKyAgICB9Cit9CisKK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21wdXRlU2NyZWVu
U3BhY2VUcmFuc2Zvcm1Gb3JTdXJmYWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIp
Cit7CisgICAgLy8gVGhlIGxheWVyJ3Mgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybSBjYW4gYmUgd3Jp
dHRlbiBhczoKKyAgICAvLyAgIGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBzdXJmYWNlU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0gKiBsYXllck9yaWdpblRyYW5zZm9ybQorICAgIC8vIFNvLCB0byBj
b21wdXRlIHRoZSBzdXJmYWNlIHNjcmVlbiBzcGFjZSwgd2UgY2FuIGRvOgorICAgIC8vICAgc3Vy
ZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSAqIGlu
dmVyc2UobGF5ZXJPcmlnaW5UcmFuc2Zvcm0pCisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBs
YXllck9yaWdpblRyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+ZHJhd1RyYW5zZm9ybSgp
OworICAgIGxheWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMC41ICogcmVuZGVyU3VyZmFj
ZUxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCAtMC41ICogcmVuZGVyU3VyZmFjZUxheWVyLT5ib3Vu
ZHMoKS5oZWlnaHQoKSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VyZmFjZVNjcmVlblNw
YWNlVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZUxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
OworICAgIHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybS5tdWx0aXBseShsYXllck9yaWdpblRy
YW5zZm9ybS5pbnZlcnNlKCkpOworCisgICAgcmV0dXJuIHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5z
Zm9ybTsKK30KKworc3RhdGljIEZsb2F0UmVjdCBkYW1hZ2VJblN1cmZhY2VTcGFjZShDQ0xheWVy
SW1wbCogcmVuZGVyU3VyZmFjZUxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHJvb3REYW1hZ2VSZWN0
KQoreworICAgIEZsb2F0UmVjdCBzdXJmYWNlRGFtYWdlUmVjdDsKKyAgICAvLyBGb3Igbm93LCB3
ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhlIHJvb3QgZGFtYWdlIGFzIHRoZSBkYW1hZ2UgZm9yCisg
ICAgLy8gYWxsIHN1cmZhY2VzLCBleGNlcHQgcGVyc3BlY3RpdmUgdHJhbnNmb3Jtcy4KKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IGNvbXB1dGVTY3JlZW5T
cGFjZVRyYW5zZm9ybUZvclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyKTsKKyAgICBpZiAoc2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0uaGFzUGVyc3BlY3RpdmUoKSkgeworICAgICAgICAvLyBQZXJzcGVj
dGl2ZSBwcm9qZWN0aW9ucyBkbyBub3QgcGxheSBuaWNlIHdpdGggbWFwUmVjdCBvZgorICAgICAg
ICAvLyBpbnZlcnNlIHRyYW5zZm9ybXMuIEluIHRoaXMgdW5jb21tb24gY2FzZSwgaXRzIHNpbXBs
ZXIgdG8KKyAgICAgICAgLy8ganVzdCByZWRyYXcgdGhlIGVudGlyZSBzdXJmYWNlLgorICAgICAg
ICAvLyBGSVhNRTogdXNlIGNhbGN1bGF0ZVZpc2libGVSZWN0IHRvIGhhbmRsZSBwcm9qZWN0aW9u
cy4KKyAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFj
ZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gcmVu
ZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRy
YW5zZm9ybS5pbnZlcnNlKCk7CisgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNj
cmVlblNwYWNlVHJhbnNmb3JtLm1hcFJlY3Qocm9vdERhbWFnZVJlY3QpOworICAgIH0KKyAgICBy
ZXR1cm4gc3VyZmFjZURhbWFnZVJlY3Q7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+JiBwYXNz
ZXMpCit7CisgICAgQ0NMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIoKSk7CisKKyAgICBpZiAoIXJvb3RM
YXllcigpLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIHJvb3RMYXllcigpLT5jcmVhdGVSZW5k
ZXJTdXJmYWNlKCk7CisgICAgcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKS0+Y2xlYXJMYXll
ckxpc3QoKTsKKyAgICByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVj
dChJbnRSZWN0KEludFBvaW50KCksIHZpZXdwb3J0U2l6ZSgpKSk7CisKKyAgICByb290TGF5ZXIo
KS0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCB2aWV3cG9ydFNpemUoKSkpOworCisg
ICAgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAg
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGNEcmF3RXRjIiwgdGhpcywg
MCk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllcigpLCByb290TGF5ZXIoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXIoKS0+cmVu
ZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSwgJm1fbGF5ZXJTb3J0ZXIsIGxheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgfQorCisgICAgaWYgKGxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwKQorICAgICAgICB0cmFja0RhbWFn
ZUZvckFsbFN1cmZhY2VzKHJvb3RMYXllcigpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAg
ICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKKyAgICBmb3IgKGludCBz
dXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJ
bmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlbmRl
clN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQo
KTsKKyAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFj
ZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisKKyAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4g
cGFzcyA9IENDUmVuZGVyUGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UpOworCisgICAgICAgIEZs
b2F0UmVjdCBzdXJmYWNlRGFtYWdlUmVjdDsKKyAgICAgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwKQorICAgICAgICAgICAgc3VyZmFjZURhbWFnZVJl
Y3QgPSBkYW1hZ2VJblN1cmZhY2VTcGFjZShyZW5kZXJTdXJmYWNlTGF5ZXIsIHJvb3REYW1hZ2VS
ZWN0KTsKKyAgICAgICAgcGFzcy0+c2V0U3VyZmFjZURhbWFnZVJlY3Qoc3VyZmFjZURhbWFnZVJl
Y3QpOworCisgICAgICAgIGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJm
YWNlLT5sYXllckxpc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsg
bGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAgICAg
ICAgQ0NMYXllckltcGwqIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOworICAg
ICAgICAgICAgaWYgKGxheWVyLT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldChsYXllciwgcmVuZGVyU3VyZmFj
ZUxheWVyLT5pZCgpKSkgeworICAgICAgICAgICAgICAgIHBhc3MtPmFwcGVuZFF1YWRzRm9yUmVu
ZGVyU3VyZmFjZUxheWVyKGxheWVyKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JMYXllcihsYXllcik7
CisgICAgICAgIH0KKworICAgICAgICBwYXNzZXMuYXBwZW5kKHBhc3MucmVsZWFzZSgpKTsKKyAg
ICB9Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCiB7CiAgICAg
VFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsK
ICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5y
b290TGF5ZXIoKSkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7CisKKyAg
ICBpZiAoIXJvb3RMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8T3duUHRy
PENDUmVuZGVyUGFzcz4gPiBwYXNzZXM7CisgICAgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKHBhc3Nl
cyk7CisKKyAgICBtX2xheWVyUmVuZGVyZXItPmJlZ2luRHJhd2luZ0ZyYW1lKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwYXNzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MocGFzc2VzW2ldLmdldCgpKTsKKyAgICBtX2xheWVyUmVu
ZGVyZXItPmZpbmlzaERyYXdpbmdGcmFtZSgpOwogCiAgICAgKyttX2ZyYW1lTnVtYmVyOworCisg
ICAgLy8gVGhlIG5leHQgZnJhbWUgc2hvdWxkIHN0YXJ0IGJ5IGFzc3VtaW5nIG5vdGhpbmcgaGFz
IGNoYW5nZWQsIGFuZCBjaGFuZ2VzIGFyZSBub3RlZCBhcyB0aGV5IG9jY3VyLgorICAgIHJvb3RM
YXllcigpLT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmZpbmlzaEFsbFJlbmRlcmluZygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggODg3YzdlNjU1NzdlNzllMGUyOGFkMDc4OGJlMjMyZDc1
N2E0YzIzZi4uYTdhZTAzODhiYzAwZjZiMGQwNmQzNmQ3MjI0ZDY0ODg3ZDFkYzhlNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMjYsOCArMjYsMTAgQEAKICNkZWZp
bmUgQ0NMYXllclRyZWVIb3N0SW1wbF9oCiAKICNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKKyNpbmNsdWRl
ICJjYy9DQ1JlbmRlclBhc3MuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKICNpZiBVU0Uo
U0tJQSkKQEAgLTEyNCwxMCArMTI2LDE0IEBAIHByb3RlY3RlZDoKICAgICBpbnQgbV9mcmFtZU51
bWJlcjsKIAogcHJpdmF0ZToKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+
ID4gQ0NMYXllckxpc3Q7CisKICAgICB2b2lkIHNldFBhZ2VTY2FsZURlbHRhKGZsb2F0KTsKICAg
ICB2b2lkIGFwcGx5UGFnZVNjYWxlRGVsdGFUb1Njcm9sbExheWVyKCk7CiAgICAgdm9pZCBhZGp1
c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0KTsKICAgICB2b2lkIHVwZGF0ZU1heFNj
cm9sbFBvc2l0aW9uKCk7CisgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5
ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CisgICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoVmVjdG9yPE93blB0cjxD
Q1JlbmRlclBhc3M+ID4mKTsKIAogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1f
bGF5ZXJSZW5kZXJlcjsKICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1wbDsK
QEAgLTE0NSw2ICsxNTEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9waW5jaEdlc3R1cmVBY3Rp
dmU7CiAKICAgICBPd25QdHI8Q0NQYWdlU2NhbGVBbmltYXRpb24+IG1fcGFnZVNjYWxlQW5pbWF0
aW9uOworCisgICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29ydGVyOwogfTsKIAogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyUGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclBhc3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxYWRjNGIzZTA4ZDM0MjA5ODMxYTU3MjEy
ZTZjYmUwMDBjNWMwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3Mu
aCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NSZW5kZXJQYXNzPiBDQ1JlbmRlclBh
c3M6OmNyZWF0ZShDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCit7CisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBDQ1JlbmRlclBhc3ModGFyZ2V0U3VyZmFjZSkpOworfQorCitDQ1JlbmRl
clBhc3M6OkNDUmVuZGVyUGFzcyhDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCisgICAg
OiBtX3RhcmdldFN1cmZhY2UodGFyZ2V0U3VyZmFjZSkKK3sKKyAgICBBU1NFUlQobV90YXJnZXRT
dXJmYWNlKTsKK30KKwordm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yTGF5ZXIoQ0NM
YXllckltcGwqIGxheWVyKQoreworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVk
UXVhZFN0YXRlID0gbGF5ZXItPmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpOworICAgIGxheWVyLT5h
cHBlbmRRdWFkcyhtX3F1YWRMaXN0LCBzaGFyZWRRdWFkU3RhdGUuZ2V0KCkpOworICAgIGxheWVy
LT5hcHBlbmREZWJ1Z0JvcmRlclF1YWQobV9xdWFkTGlzdCwgc2hhcmVkUXVhZFN0YXRlLmdldCgp
KTsKKyAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxl
YXNlKCkpOworfQorCit2b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJm
YWNlTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIC8vIEZJWE1FOiByZW5kZXIgc3Vy
ZmFjZSBsYXllcnMgc2hvdWxkIGJlIGEgQ0NMYXllckltcGwtZGVyaXZlZCBjbGFzcyBhbmQKKyAg
ICAvLyBub3QgYmUgaGFuZGxlZCBzcGVjaWFsbHkgaGVyZS4KKyAgICBDQ1JlbmRlclN1cmZhY2Uq
IHN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgIGJvb2wgaXNPcGFxdWUgPSBm
YWxzZTsKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IEND
U2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoc3VyZmFjZS0+ZHJhd1RyYW5zZm9ybSgpLCBzdXJmYWNl
LT5kcmF3VHJhbnNmb3JtKCksIHN1cmZhY2UtPmNvbnRlbnRSZWN0KCksIHN1cmZhY2UtPmNsaXBS
ZWN0KCksIHN1cmZhY2UtPmRyYXdPcGFjaXR5KCksIGlzT3BhcXVlKTsKKyAgICBtX3F1YWRMaXN0
LmFwcGVuZChDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZS5n
ZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgbGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0KCkp
KTsKKyAgICBtX3NoYXJlZFF1YWRTdGF0ZUxpc3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxl
YXNlKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2ZTA3MmU4
MDgwYjNkZTQ5YWYyZmNjMjQxMWE5Y2RjNTNhNjQxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaApA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1JlbmRlclBhc3NfaAorI2RlZmluZSBD
Q1JlbmRlclBhc3NfaAorCisjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NSZW5kZXJTdXJmYWNlOworY2xh
c3MgQ0NTaGFyZWRRdWFkU3RhdGU7CisKK3R5cGVkZWYgVmVjdG9yPE93blB0cjxDQ0RyYXdRdWFk
PiA+IENDUXVhZExpc3Q7CisKK2NsYXNzIENDUmVuZGVyUGFzcyB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ0NSZW5kZXJQYXNzKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q1JlbmRlclBhc3M+IGNyZWF0ZShDQ1JlbmRlclN1cmZhY2UqKTsKKworICAgIHZvaWQgYXBwZW5k
UXVhZHNGb3JMYXllcihDQ0xheWVySW1wbCopOworICAgIHZvaWQgYXBwZW5kUXVhZHNGb3JSZW5k
ZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqKTsKKworICAgIGNvbnN0IENDUXVhZExpc3QmIHF1
YWRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkTGlzdDsgfQorICAgIENDUmVuZGVyU3VyZmFj
ZSogdGFyZ2V0U3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0U3VyZmFjZTsgfQorCisg
ICAgdm9pZCBzZXRTdXJmYWNlRGFtYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1h
Z2VSZWN0KSB7IG1fc3VyZmFjZURhbWFnZVJlY3QgPSBzdXJmYWNlRGFtYWdlUmVjdDsgfQorICAg
IGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1
cmZhY2VEYW1hZ2VSZWN0OyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NSZW5kZXJQYXNz
KENDUmVuZGVyU3VyZmFjZSopOworCisgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX3RhcmdldFN1cmZh
Y2U7CisgICAgQ0NRdWFkTGlzdCBtX3F1YWRMaXN0OworICAgIFZlY3RvcjxPd25QdHI8Q0NTaGFy
ZWRRdWFkU3RhdGU+ID4gbV9zaGFyZWRRdWFkU3RhdGVMaXN0OworICAgIEZsb2F0UmVjdCBtX3N1
cmZhY2VEYW1hZ2VSZWN0OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdR
dWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODlhMTcyZDE0NGJhYTVmM2Mw
YTVjMGY4ZWRmNTg3ZTFiM2NkYzliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3Bw
CkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1Bhc3NPd25QdHI8Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IENDUmVuZGVyU3VyZmFjZURyYXdR
dWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29u
c3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0
JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUmVuZGVy
U3VyZmFjZURyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGxheWVyLCBzdXJmYWNl
RGFtYWdlUmVjdCkpOworfQorCitDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29u
c3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0
JiBzdXJmYWNlRGFtYWdlUmVjdCkKKyAgICA6IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBD
Q0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNlLCBxdWFkUmVjdCkKKyAgICAsIG1fbGF5ZXIobGF5ZXIp
CisgICAgLCBtX3N1cmZhY2VEYW1hZ2VSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KQoreworICAgIEFT
U0VSVChtX2xheWVyKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURy
YXdRdWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzUzNWQzMmRhMjk3ZjgzZGY2NWYwNTQ4M2U5M2M1YWY5ZGI3
ODVmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKQEAgLTAsMCArMSw1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWRfaAorI2RlZmluZSBDQ1JlbmRl
clN1cmZhY2VEcmF3UXVhZF9oCisKKyNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xh
eWVySW1wbDsKKworY2xhc3MgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3
UXVhZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQp
OworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyU3VyZmFjZURyYXdRdWFk
PiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXll
ckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKKworICAgIENDTGF5
ZXJJbXBsKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KKworICAgIC8vIFRoZSBz
dXJmYWNlIGRhbWFnZSByZWN0IGZvciB0aGUgdGFyZ2V0IHN1cmZhY2UgdGhpcyBxdWFkIGRyYXdz
IGludG8uCisgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHJlbW92ZWQgb25jZSByZW5kZXIgc3Vy
ZmFjZXMgZ2V0IHRoZWlyIG93biBsYXllciB0eXBlLgorICAgIGNvbnN0IEZsb2F0UmVjdCYgc3Vy
ZmFjZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VEYW1hZ2VSZWN0OyB9CisK
K3ByaXZhdGU6CisgICAgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFk
U3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHN1
cmZhY2VEYW1hZ2VSZWN0KTsKKworICAgIENDTGF5ZXJJbXBsKiBtX2xheWVyOworICAgIEZsb2F0
UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVh
ZFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2hhcmVkUXVhZFN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YmY3NjkyNWJiOGNmMmJiYWM1Mzlj
MDE0MzFjNTU3ODQzMzlmZDA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1No
YXJlZFF1YWRTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NT
aGFyZWRRdWFkU3RhdGU+IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBs
YXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0JiBj
bGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpCit7CisgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDQ1NoYXJlZFF1YWRTdGF0ZShxdWFkVHJhbnNmb3JtLCBsYXllclRyYW5zZm9ybSwg
bGF5ZXJSZWN0LCBjbGlwUmVjdCwgb3BhY2l0eSwgb3BhcXVlKSk7Cit9CisKK0NDU2hhcmVkUXVh
ZFN0YXRlOjpDQ1NoYXJlZFF1YWRTdGF0ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVh
ZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBj
b25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBv
cGFjaXR5LCBib29sIG9wYXF1ZSkKKyAgICA6IG1fcXVhZFRyYW5zZm9ybShxdWFkVHJhbnNmb3Jt
KQorICAgICwgbV9sYXllclRyYW5zZm9ybShsYXllclRyYW5zZm9ybSkKKyAgICAsIG1fbGF5ZXJS
ZWN0KGxheWVyUmVjdCkKKyAgICAsIG1fY2xpcFJlY3QoY2xpcFJlY3QpCisgICAgLCBtX29wYWNp
dHkob3BhY2l0eSkKKyAgICAsIG1fb3BhcXVlKG9wYXF1ZSkKK3sKK30KKworYm9vbCBDQ1NoYXJl
ZFF1YWRTdGF0ZTo6aXNMYXllckF4aXNBbGlnbmVkSW50UmVjdCgpIGNvbnN0Cit7CisgICAgLy8g
Tm90ZTogdGhpcyBkb2Vzbid0IGNvbnNpZGVyIHdpbmRvdyBvciBwcm9qZWN0aW9uIG1hdHJpY2Vz
LgorICAgIC8vIEFzc3VtZSB0aGF0IHRoZXkncmUgb3J0aG9ub3JtYWwgYW5kIGhhdmUgaW50ZWdl
ciBzY2FsZXMgYW5kIHRyYW5zbGF0aW9ucy4KKyAgICBGbG9hdFF1YWQgcXVhZCA9IHF1YWRUcmFu
c2Zvcm0oKS5tYXBRdWFkKEZsb2F0UXVhZChsYXllclJlY3QoKSkpOworICAgIHJldHVybiBxdWFk
LmlzUmVjdGlsaW5lYXIoKSAmJiBxdWFkLmJvdW5kaW5nQm94KCkuaXNFeHByZXNzaWJsZUFzSW50
UmVjdCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lNzg1NzU3ZjlkYjk0YjFiMzIwNjFmZDhkOGIyMWM0MGJlZjFmZjBhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFy
ZWRRdWFkU3RhdGUuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1NoYXJlZFF1
YWRTdGF0ZV9oCisjZGVmaW5lIENDU2hhcmVkUXVhZFN0YXRlX2gKKworI2luY2x1ZGUgIkZsb2F0
UXVhZC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ0NTaGFyZWRRdWFkU3RhdGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENDU2hhcmVkUXVhZFN0YXRlKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1No
YXJlZFF1YWRTdGF0ZT4gY3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJh
bnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0
IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNp
dHksIGJvb2wgb3BhcXVlKTsKKworICAgIC8vIFRoZSB0cmFuc2Zvcm0gdGhhdCBxdWFkcyBpbiBh
IENDRHJhd1F1YWQgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIHdpdGguCisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3F1YWRUcmFu
c2Zvcm07IH0KKyAgICAvLyBUaGUgdHJhbnNmb3JtIHRoYXQgbGF5ZXJSZWN0KCkgc2hvdWxkIGJl
IHRyYW5zZm9ybWVkIHdpdGguCisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVy
VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyYW5zZm9ybTsgfQorICAgIGNvbnN0
IEludFJlY3QmIGxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZWN0OyB9CisgICAg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CisK
KyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgYm9v
bCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CisgICAgYm9vbCBpc0xheWVy
QXhpc0FsaWduZWRJbnRSZWN0KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQ0NTaGFyZWRRdWFk
U3RhdGUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJS
ZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUp
OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9xdWFkVHJhbnNmb3JtOworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1fbGF5ZXJUcmFuc2Zvcm07CisgICAgSW50UmVjdCBtX2xheWVyUmVj
dDsKKyAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CisgICAgZmxvYXQgbV9vcGFjaXR5OworICAgIGJv
b2wgbV9vcGFxdWU7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENv
bG9yRHJhd1F1YWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxYzcyOWE0MTU3ZGQyMjE3MmI2YzgzMWQ3NzAw
Y2M0MjBiNGVlNmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5jcHAKQEAgLTAsMCArMSw0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDU29saWRD
b2xvckRyYXdRdWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ1Nv
bGlkQ29sb3JEcmF3UXVhZD4gQ0NTb2xpZENvbG9yRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1No
YXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NTb2xpZENv
bG9yRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgY29sb3IpKTsKK30KKworQ0NT
b2xpZENvbG9yRHJhd1F1YWQ6OkNDU29saWRDb2xvckRyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCisgICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVh
ZDo6U29saWRDb2xvciwgcXVhZFJlY3QpCisgICAgLCBtX2NvbG9yKGNvbG9yKQoreworICAgIGlm
IChtX2NvbG9yLmFscGhhKCkgIT0gMSkKKyAgICAgICAgbV9xdWFkT3BhcXVlID0gZmFsc2U7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQw
MjBkZjY4NDlhOGEwM2NiYThmMjJiMDg4NTcwYzVlMWI4MzZjZTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29s
b3JEcmF3UXVhZC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU29saWRDb2xv
ckRyYXdRdWFkX2gKKyNkZWZpbmUgQ0NTb2xpZENvbG9yRHJhd1F1YWRfaAorCisjaW5jbHVkZSAi
Q29sb3IuaCIKKyNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ1NvbGlkQ29sb3JEcmF3
UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1Nv
bGlkQ29sb3JEcmF3UXVhZCk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NTb2xp
ZENvbG9yRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBDb2xvciYpOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2xvcjsgfTsKKworcHJpdmF0ZToKKyAgICBDQ1NvbGlkQ29sb3JEcmF3UXVh
ZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBDb2xvciYp
OworCisgICAgQ29sb3IgbV9jb2xvcjsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVh
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rp
bGVEcmF3UXVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGY4MzA1MDhhMmM4MmNhMjc4YjM1Y2NjMDA1YjNk
MDc5YTFjN2ZjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmNwcApAQCAtMCwwICsxLDUzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1YWQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPENDVGlsZURyYXdRdWFkPiBD
Q1RpbGVEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFk
U3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJ
ZCwgY29uc3QgSW50UG9pbnQmIHRleHR1cmVPZmZzZXQsIGNvbnN0IEludFNpemUmIHRleHR1cmVT
aXplLCBHQzNEaW50IHRleHR1cmVGaWx0ZXIsIGJvb2wgc3dpenpsZUNvbnRlbnRzLCBib29sIGxl
ZnRFZGdlQUEsIGJvb2wgdG9wRWRnZUFBLCBib29sIHJpZ2h0RWRnZUFBLCBib29sIGJvdHRvbUVk
Z2VBQSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVGlsZURyYXdRdWFkKHNoYXJlZFF1
YWRTdGF0ZSwgcXVhZFJlY3QsIHRleHR1cmVJZCwgdGV4dHVyZU9mZnNldCwgdGV4dHVyZVNpemUs
IHRleHR1cmVGaWx0ZXIsIHN3aXp6bGVDb250ZW50cywgbGVmdEVkZ2VBQSwgdG9wRWRnZUFBLCBy
aWdodEVkZ2VBQSwgYm90dG9tRWRnZUFBKSk7Cit9CisKK0NDVGlsZURyYXdRdWFkOjpDQ1RpbGVE
cmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJ
bnRSZWN0JiBxdWFkUmVjdCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFBv
aW50JiB0ZXh0dXJlT2Zmc2V0LCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgR0MzRGludCB0
ZXh0dXJlRmlsdGVyLCBib29sIHN3aXp6bGVDb250ZW50cywgYm9vbCBsZWZ0RWRnZUFBLCBib29s
IHRvcEVkZ2VBQSwgYm9vbCByaWdodEVkZ2VBQSwgYm9vbCBib3R0b21FZGdlQUEpCisgICAgOiBD
Q0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50LCBxdWFk
UmVjdCkKKyAgICAsIG1fdGV4dHVyZUlkKHRleHR1cmVJZCkKKyAgICAsIG1fdGV4dHVyZU9mZnNl
dCh0ZXh0dXJlT2Zmc2V0KQorICAgICwgbV90ZXh0dXJlU2l6ZSh0ZXh0dXJlU2l6ZSkKKyAgICAs
IG1fdGV4dHVyZUZpbHRlcih0ZXh0dXJlRmlsdGVyKQorICAgICwgbV9zd2l6emxlQ29udGVudHMo
c3dpenpsZUNvbnRlbnRzKQorICAgICwgbV9sZWZ0RWRnZUFBKGxlZnRFZGdlQUEpCisgICAgLCBt
X3RvcEVkZ2VBQSh0b3BFZGdlQUEpCisgICAgLCBtX3JpZ2h0RWRnZUFBKHJpZ2h0RWRnZUFBKQor
ICAgICwgbV9ib3R0b21FZGdlQUEoYm90dG9tRWRnZUFBKQoreworICAgIGlmIChpc0FudGlhbGlh
c2VkKCkpCisgICAgICAgIG1fbmVlZHNCbGVuZGluZyA9IHRydWU7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURy
YXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVEcmF3UXVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyZTUzZGJkMmE4ZjVkMWZiM2QzMzMxOWIyYzAz
MTFlYzUzZjVjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENDVGlsZURyYXdRdWFkX2gKKyNkZWZpbmUgQ0NUaWxlRHJhd1F1YWRfaAor
CisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCisjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5o
IgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ0NUaWxlRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ0NUaWxlRHJhd1F1YWQpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPENDVGlsZURyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25z
dCBJbnRSZWN0JiBxdWFkUmVjdCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IElu
dFBvaW50JiB0ZXh0dXJlT2Zmc2V0LCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgR0MzRGlu
dCB0ZXh0dXJlRmlsdGVyLCBib29sIHN3aXp6bGVDb250ZW50cywgYm9vbCBsZWZ0RWRnZUFBLCBi
b29sIHRvcEVkZ2VBQSwgYm9vbCByaWdodEVkZ2VBQSwgYm9vbCBib3R0b21FZGdlQUEpOworCisg
ICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJ
ZDsgfQorICAgIEludFBvaW50IHRleHR1cmVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1
cmVPZmZzZXQ7IH0KKyAgICBJbnRTaXplIHRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90
ZXh0dXJlU2l6ZTsgfQorICAgIEdDM0RpbnQgdGV4dHVyZUZpbHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fdGV4dHVyZUZpbHRlcjsgfQorICAgIGJvb2wgc3dpenpsZUNvbnRlbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zd2l6emxlQ29udGVudHM7IH0KKworICAgIGJvb2wgbGVmdEVkZ2VBQSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGVmdEVkZ2VBQTsgfQorICAgIGJvb2wgdG9wRWRnZUFBKCkgY29uc3QgeyBy
ZXR1cm4gbV90b3BFZGdlQUE7IH0KKyAgICBib29sIHJpZ2h0RWRnZUFBKCkgY29uc3QgeyByZXR1
cm4gbV9yaWdodEVkZ2VBQTsgfQorICAgIGJvb2wgYm90dG9tRWRnZUFBKCkgY29uc3QgeyByZXR1
cm4gbV9ib3R0b21FZGdlQUE7IH0KKworICAgIGJvb2wgaXNBbnRpYWxpYXNlZCgpIGNvbnN0IHsg
cmV0dXJuIGxlZnRFZGdlQUEoKSB8fCB0b3BFZGdlQUEoKSB8fCByaWdodEVkZ2VBQSgpIHx8IGJv
dHRvbUVkZ2VBQSgpOyB9CisKK3ByaXZhdGU6CisgICAgQ0NUaWxlRHJhd1F1YWQoY29uc3QgQ0NT
aGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgUGxhdGZvcm0zRE9iamVj
dCB0ZXh0dXJlSWQsIGNvbnN0IEludFBvaW50JiB0ZXh0dXJlT2Zmc2V0LCBjb25zdCBJbnRTaXpl
JiB0ZXh0dXJlU2l6ZSwgR0MzRGludCB0ZXh0dXJlRmlsdGVyLCBib29sIHN3aXp6bGVDb250ZW50
cywgYm9vbCBsZWZ0RWRnZUFBLCBib29sIHRvcEVkZ2VBQSwgYm9vbCByaWdodEVkZ2VBQSwgYm9v
bCBib3R0b21FZGdlQUEpOworCisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3RleHR1cmVJZDsKKyAg
ICBJbnRQb2ludCBtX3RleHR1cmVPZmZzZXQ7CisgICAgSW50U2l6ZSBtX3RleHR1cmVTaXplOwor
ICAgIEdDM0RpbnQgbV90ZXh0dXJlRmlsdGVyOworICAgIGJvb2wgbV9zd2l6emxlQ29udGVudHM7
CisgICAgYm9vbCBtX2xlZnRFZGdlQUE7CisgICAgYm9vbCBtX3RvcEVkZ2VBQTsKKyAgICBib29s
IG1fcmlnaHRFZGdlQUE7CisgICAgYm9vbCBtX2JvdHRvbUVkZ2VBQTsKK307CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4IDcyMDQ2YmI4YmU0NGMw
ZGEwYmQzMDk0ZDdiYjZjZDdmNDQwMTIxNjUuLjQ5MDY2NTRjMDAxZDRhOTY4NTk0OTdhMjkzODM1
YjgzMDQ2YmM0NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC0zMCw3
ICszMCw4IEBACiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgogCiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclF1YWQuaCIKKyNp
bmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGlsZURy
YXdRdWFkLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CkBAIC01Myw2ICs1NCw3IEBAIHByaXZhdGU6CiBDQ1RpbGVkTGF5ZXJJbXBsOjpD
Q1RpbGVkTGF5ZXJJbXBsKGludCBpZCkKICAgICA6IENDTGF5ZXJJbXBsKGlkKQogICAgICwgbV9z
a2lwc0RyYXcodHJ1ZSkKKyAgICAsIG1fY29udGVudHNTd2l6emxlZChmYWxzZSkKIHsKIH0KIApA
QCAtOTcsNyArOTksNyBAQCBEcmF3YWJsZVRpbGUqIENDVGlsZWRMYXllckltcGw6OmNyZWF0ZVRp
bGUoaW50IGksIGludCBqKQogICAgIHJldHVybiB0aWxlLmdldCgpOwogfQogCi1UcmFuc2Zvcm1h
dGlvbk1hdHJpeCBDQ1RpbGVkTGF5ZXJJbXBsOjp0aWxpbmdUcmFuc2Zvcm0oKSBjb25zdAorVHJh
bnNmb3JtYXRpb25NYXRyaXggQ0NUaWxlZExheWVySW1wbDo6cXVhZFRyYW5zZm9ybSgpIGNvbnN0
CiB7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgp
OwogCkBAIC0xMTIsNjMgKzExNCw1MCBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ1RpbGVkTGF5
ZXJJbXBsOjp0aWxpbmdUcmFuc2Zvcm0oKSBjb25zdAogICAgIHJldHVybiB0cmFuc2Zvcm07CiB9
CiAKLXZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIpCit2b2lkIENDVGlsZWRMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExp
c3QmIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQog
ewotICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKKyAg
ICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKIAotICAg
IGlmIChtX3NraXBzRHJhdyB8fCAhbV90aWxlciB8fCBtX3RpbGVyLT5pc0VtcHR5KCkgfHwgbGF5
ZXJSZWN0LmlzRW1wdHkoKSB8fCAhbGF5ZXJSZW5kZXJlcikKKyAgICBpZiAobV9za2lwc0RyYXcg
fHwgIW1fdGlsZXIgfHwgbV90aWxlci0+aXNFbXB0eSgpIHx8IGNvbnRlbnRSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFu
c2Zvcm0gPSB0aWxpbmdUcmFuc2Zvcm0oKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZp
Y2VNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChsYXllclJlbmRlcmVyLT53aW5kb3dNYXRy
aXgoKSAqIGxheWVyUmVuZGVyZXItPnByb2plY3Rpb25NYXRyaXgoKSAqIGxheWVyVHJhbnNmb3Jt
KS50bzJkVHJhbnNmb3JtKCk7CisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAg
ICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRv
cCwgcmlnaHQsIGJvdHRvbSk7CisgICAgSW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGVyLT5jb250
ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBq
IDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0
OyArK2kpIHsKKyAgICAgICAgICAgIERyYXdhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsK
KyAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBtX3RpbGVyLT50aWxlQm91bmRzKGksIGop
OworICAgICAgICAgICAgSW50UmVjdCBkaXNwbGF5UmVjdCA9IHRpbGVSZWN0OworICAgICAgICAg
ICAgdGlsZVJlY3QuaW50ZXJzZWN0KGxheWVyUmVjdCk7CiAKLSAgICAvLyBEb24ndCBkcmF3IGFu
eSB0aWxlcyB3aGVuIGRldmljZSBtYXRyaXggaXMgbm90IGludmVydGlibGUuCi0gICAgaWYgKCFk
ZXZpY2VNYXRyaXguaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IC8vIFNraXAgZW1wdHkgdGlsZXMuCisgICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgRmxvYXRRdWFkIHF1YWQgPSBkZXZp
Y2VNYXRyaXgubWFwUXVhZChGbG9hdFF1YWQobGF5ZXJSZWN0KSk7Ci0gICAgQ0NMYXllclF1YWQg
ZGV2aWNlUmVjdCA9IENDTGF5ZXJRdWFkKEZsb2F0UXVhZChxdWFkLmJvdW5kaW5nQm94KCkpKTsK
LSAgICBDQ0xheWVyUXVhZCBsYXllclF1YWQgPSBDQ0xheWVyUXVhZChxdWFkKTsKKyAgICAgICAg
ICAgIGlmICghdGlsZSB8fCAhdGlsZS0+dGV4dHVyZUlkKCkpIHsKKyAgICAgICAgICAgICAgICBx
dWFkTGlzdC5hcHBlbmQoQ0NTb2xpZENvbG9yRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3Rh
dGUsIHRpbGVSZWN0LCBiYWNrZ3JvdW5kQ29sb3IoKSkpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIGhvdyB0
aGUgdG9wIGxlZnQgaGFzIG1vdmVkLCBzbyB0aGUgdGV4dHVyZSBjYW4gYmUKKyAgICAgICAgICAg
IC8vIG9mZnNldCB0aGUgc2FtZSBhbW91bnQuCisgICAgICAgICAgICBJbnRTaXplIGRpc3BsYXlP
ZmZzZXQgPSB0aWxlUmVjdC5taW5YTWluWUNvcm5lcigpIC0gZGlzcGxheVJlY3QubWluWE1pbllD
b3JuZXIoKTsKKyAgICAgICAgICAgIEludFBvaW50IHRleHR1cmVPZmZzZXQgPSBtX3RpbGVyLT50
ZXh0dXJlT2Zmc2V0KGksIGopICsgZGlzcGxheU9mZnNldDsKKyAgICAgICAgICAgIGZsb2F0IHRp
bGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVyLT50aWxlU2l6ZSgpLndpZHRoKCkp
OworICAgICAgICAgICAgZmxvYXQgdGlsZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3Rp
bGVyLT50aWxlU2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgICAgIEludFNpemUgdGV4dHVyZVNp
emUodGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKIAotICAgIC8vIFVzZSBhbnRpLWFsaWFzaW5nIHBy
b2dyYW1zIG9ubHkgd2hlbiBuZWNlc3NhcnkuCi0gICAgYm9vbCB1c2VBQSA9IChtX3RpbGVyLT5o
YXNCb3JkZXJUZXhlbHMoKSAmJiAoIXF1YWQuaXNSZWN0aWxpbmVhcigpIHx8ICFxdWFkLmJvdW5k
aW5nQm94KCkuaXNFeHByZXNzaWJsZUFzSW50UmVjdCgpKSk7CisgICAgICAgICAgICBib29sIHVz
ZUFBID0gbV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCkgJiYgIXNoYXJlZFF1YWRTdGF0ZS0+aXNM
YXllckF4aXNBbGlnbmVkSW50UmVjdCgpOwogCi0gICAgaWYgKHVzZUFBKSB7Ci0gICAgICAgIGRl
dmljZVJlY3QuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7Ci0gICAgICAgIGxheWVyUXVh
ZC5pbmZsYXRlQW50aUFsaWFzaW5nRGlzdGFuY2UoKTsKLSAgICB9CisgICAgICAgICAgICBib29s
IGxlZnRFZGdlQUEgPSAhaSAmJiB1c2VBQTsKKyAgICAgICAgICAgIGJvb2wgdG9wRWRnZUFBID0g
IWogJiYgdXNlQUE7CisgICAgICAgICAgICBib29sIHJpZ2h0RWRnZUFBID0gaSA9PSBtX3RpbGVy
LT5udW1UaWxlc1goKSAtIDEgJiYgdXNlQUE7CisgICAgICAgICAgICBib29sIGJvdHRvbUVkZ2VB
QSA9IGogPT0gbV90aWxlci0+bnVtVGlsZXNZKCkgLSAxICYmIHVzZUFBOwogCi0gICAgc3dpdGNo
IChtX3NhbXBsZWRUZXhlbEZvcm1hdCkgewotICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
U2FtcGxlZFRleGVsRm9ybWF0UkdCQToKLSAgICAgICAgaWYgKHVzZUFBKSB7Ci0gICAgICAgICAg
ICBjb25zdCBQcm9ncmFtQUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1B
QSgpOwotICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5
ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3Bh
Y2l0eSgpLCBwcm9ncmFtLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4VHJh
bnNmb3JtTG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24o
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNOb25Db21wb3NpdGVkQ29u
dGVudCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgUHJvZ3JhbU9wYXF1ZSogcHJvZ3JhbSA9
IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbU9wYXF1ZSgpOwotICAgICAgICAgICAgICAgIGRy
YXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZpY2VN
YXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgLTEs
IC0xKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgUHJvZ3Jh
bSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbSgpOwotICAgICAgICAgICAg
ICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBk
ZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3Jh
bSwgLTEsIC0xKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IEdDM0RpbnQgdGV4
dHVyZUZpbHRlciA9IG1fdGlsZXItPmhhc0JvcmRlclRleGVscygpID8gR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOworICAgICAgICAgICAgcXVh
ZExpc3QuYXBwZW5kKENDVGlsZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCB0aWxl
UmVjdCwgdGlsZS0+dGV4dHVyZUlkKCksIHRleHR1cmVPZmZzZXQsIHRleHR1cmVTaXplLCB0ZXh0
dXJlRmlsdGVyLCBjb250ZW50c1N3aXp6bGVkKCksIGxlZnRFZGdlQUEsIHRvcEVkZ2VBQSwgcmln
aHRFZGdlQUEsIGJvdHRvbUVkZ2VBQSkpOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQToKLSAgICAg
ICAgaWYgKHVzZUFBKSB7Ci0gICAgICAgICAgICBjb25zdCBQcm9ncmFtU3dpenpsZUFBKiBwcm9n
cmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtU3dpenpsZUFBKCk7Ci0gICAgICAgICAg
ICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2
aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0s
IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigp
LCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBQcm9ncmFtU3dpenpsZU9wYXF1ZSogcHJvZ3JhbSA9IGxheWVyUmVu
ZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGVPcGFxdWUoKTsKLSAgICAgICAgICAgICAgICBkcmF3
VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0
cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIC0xLCAt
MSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnN0IFByb2dyYW1T
d2l6emxlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtU3dpenpsZSgpOwot
ICAgICAgICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVy
VHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNp
dHkoKSwgcHJvZ3JhbSwgLTEsIC0xKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CiB9CiAKQEAgLTE4OSwxODMgKzE3OCw2IEBAIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6c3lu
Y1RleHR1cmVJZChpbnQgaSwgaW50IGosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKQogICAg
IHRpbGUtPnNldFRleHR1cmVJZCh0ZXh0dXJlSWQpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4K
LXZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhd1RpbGVzKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlciwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBkZXZpY2VUcmFuc2Zvcm0sIGNvbnN0IENDTGF5ZXJRdWFkJiBkZXZpY2VSZWN0LCBjb25zdCBD
Q0xheWVyUXVhZCYgY29udGVudFF1YWQsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0s
IGludCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9uKQotewot
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgp
OwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0o
KSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotCi0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybSA9IGRldmljZVRyYW5zZm9ybS5pbnZl
cnNlKCk7Ci0KLSAgICBpZiAoZWRnZUxvY2F0aW9uICE9IC0xKSB7Ci0gICAgICAgIGZsb2F0IGVk
Z2VbMjRdOwotICAgICAgICBjb250ZW50UXVhZC50b0Zsb2F0QXJyYXkoZWRnZSk7Ci0gICAgICAg
IGRldmljZVJlY3QudG9GbG9hdEFycmF5KCZlZGdlWzEyXSk7Ci0gICAgICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT51bmlmb3JtM2Z2KGVkZ2VMb2NhdGlvbiwgZWRnZSwgOCkpOwotICAgIH0KLQot
ICAgIENDTGF5ZXJRdWFkOjpFZGdlIHByZXZFZGdlWSA9IGNvbnRlbnRRdWFkLnRvcCgpOwotCi0g
ICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVj
dFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0g
ICAgSW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGVyLT5jb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNv
bnRlbnRSZWN0KTsKLSAgICBmbG9hdCBzaWduID0gRmxvYXRRdWFkKGNvbnRlbnRSZWN0KS5pc0Nv
dW50ZXJjbG9ja3dpc2UoKSA/IC0xIDogMTsKLSAgICBjb25zdCBHQzNEaW50IGZpbHRlciA9IG1f
dGlsZXItPmhhc0JvcmRlclRleGVscygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdy
YXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOwotICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90
dG9tOyArK2opIHsKLSAgICAgICAgQ0NMYXllclF1YWQ6OkVkZ2UgcHJldkVkZ2VYID0gY29udGVu
dFF1YWQubGVmdCgpOwotCi0gICAgICAgIENDTGF5ZXJRdWFkOjpFZGdlIGVkZ2VZID0gY29udGVu
dFF1YWQuYm90dG9tKCk7Ci0gICAgICAgIGlmIChqIDwgKG1fdGlsZXItPm51bVRpbGVzWSgpIC0g
MSkpIHsKLSAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB1bmlvblJlY3QobV90aWxlci0+
dGlsZUJvdW5kcygwLCBqKSwgbV90aWxlci0+dGlsZUJvdW5kcyhtX3RpbGVyLT5udW1UaWxlc1go
KSAtIDEsIGopKTsKLSAgICAgICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChsYXllclJlY3QpOwot
Ci0gICAgICAgICAgICAvLyBTa2lwIGVtcHR5IHJvd3MuCi0gICAgICAgICAgICBpZiAodGlsZVJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB0
aWxlUmVjdCA9IG1fdGlsZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZVJlY3QpOwotCi0g
ICAgICAgICAgICBGbG9hdFBvaW50IHAxKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QubWF4WSgp
KTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcDIodGlsZVJlY3QueCgpLCB0aWxlUmVjdC5tYXhZ
KCkpOwotCi0gICAgICAgICAgICAvLyBNYXAgcG9pbnRzIHRvIGRldmljZSBzcGFjZS4KLSAgICAg
ICAgICAgIHAxID0gZGV2aWNlVHJhbnNmb3JtLm1hcFBvaW50KHAxKTsKLSAgICAgICAgICAgIHAy
ID0gZGV2aWNlVHJhbnNmb3JtLm1hcFBvaW50KHAyKTsKLQotICAgICAgICAgICAgLy8gQ29tcHV0
ZSBob3Jpem9udGFsIGVkZ2UuCi0gICAgICAgICAgICBlZGdlWSA9IENDTGF5ZXJRdWFkOjpFZGdl
KHAxLCBwMik7Ci0gICAgICAgICAgICBlZGdlWS5zY2FsZShzaWduKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAg
IERyYXdhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKLQotICAgICAgICAgICAgLy8gRG9u
J3QgdXNlIHRpbGVDb250ZW50UmVjdCBoZXJlLCBhcyB0aGF0IGNvbnRhaW5zIHRoZSBmdWxsCi0g
ICAgICAgICAgICAvLyByZWN0IHdpdGggYm9yZGVyIHRleGVscyB3aGljaCBzaG91bGRuJ3QgYmUg
ZHJhd24uCi0gICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gbV90aWxlci0+dGlsZUJvdW5k
cyhpLCBqKTsKLSAgICAgICAgICAgIEludFJlY3QgZGlzcGxheVJlY3QgPSB0aWxlUmVjdDsKLSAg
ICAgICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChsYXllclJlY3QpOwotCi0gICAgICAgICAgICAv
LyBLZWVwIHRyYWNrIG9mIGhvdyB0aGUgdG9wIGxlZnQgaGFzIG1vdmVkLCBzbyB0aGUgdGV4dHVy
ZSBjYW4gYmUKLSAgICAgICAgICAgIC8vIG9mZnNldCB0aGUgc2FtZSBhbW91bnQuCi0gICAgICAg
ICAgICBJbnRTaXplIGRpc3BsYXlPZmZzZXQgPSB0aWxlUmVjdC5taW5YTWluWUNvcm5lcigpIC0g
ZGlzcGxheVJlY3QubWluWE1pbllDb3JuZXIoKTsKLQotICAgICAgICAgICAgLy8gU2tpcCBlbXB0
eSB0aWxlcy4KLSAgICAgICAgICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHRpbGVSZWN0ID0gbV90aWxlci0+bGF5ZXJS
ZWN0VG9Db250ZW50UmVjdCh0aWxlUmVjdCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UmVjdCBjbGFt
cFJlY3QodGlsZVJlY3QpOwotICAgICAgICAgICAgLy8gQ2xhbXAgdGV4dHVyZSBjb29yZGluYXRl
cyB0byBhdm9pZCBzYW1wbGluZyBvdXRzaWRlIHRoZSBsYXllcgotICAgICAgICAgICAgLy8gYnkg
ZGVmbGF0aW5nIHRoZSB0aWxlIHJlZ2lvbiBoYWxmIGEgdGV4ZWwgb3IgaGFsZiBhIHRleGVsCi0g
ICAgICAgICAgICAvLyBtaW51cyBlcHNpbG9uIGZvciBvbmUgcGl4ZWwgbGF5ZXJzLiBUaGUgcmVz
dWx0aW5nIGNsYW1wIHJlZ2lvbgotICAgICAgICAgICAgLy8gaXMgbWFwcGVkIHRvIHRoZSB1bml0
IHNxdWFyZSBieSB0aGUgdmVydGV4IHNoYWRlciBhbmQgbWFwcGVkCi0gICAgICAgICAgICAvLyBi
YWNrIHRvIG5vcm1hbGl6ZWQgdGV4dHVyZSBjb29yZGluYXRlcyBieSB0aGUgZnJhZ21lbnQgc2hh
ZGVyCi0gICAgICAgICAgICAvLyBhZnRlciBiZWluZyBjbGFtcGVkIHRvIDAtMSByYW5nZS4KLSAg
ICAgICAgICAgIGNvbnN0IGZsb2F0IGVwc2lsb24gPSAxIC8gMTAyNC4wZjsKLSAgICAgICAgICAg
IGZsb2F0IGNsYW1wWCA9IG1pbigwLjUsIGNsYW1wUmVjdC53aWR0aCgpIC8gMi4wIC0gZXBzaWxv
bik7Ci0gICAgICAgICAgICBmbG9hdCBjbGFtcFkgPSBtaW4oMC41LCBjbGFtcFJlY3QuaGVpZ2h0
KCkgLyAyLjAgLSBlcHNpbG9uKTsKLSAgICAgICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWCgtY2xh
bXBYKTsKLSAgICAgICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWSgtY2xhbXBZKTsKLSAgICAgICAg
ICAgIEZsb2F0U2l6ZSBjbGFtcE9mZnNldCA9IGNsYW1wUmVjdC5taW5YTWluWUNvcm5lcigpIC0g
RmxvYXRSZWN0KHRpbGVSZWN0KS5taW5YTWluWUNvcm5lcigpOwotCi0gICAgICAgICAgICBGbG9h
dFBvaW50IHRleE9mZnNldCA9IG1fdGlsZXItPnRleHR1cmVPZmZzZXQoaSwgaikgKyBjbGFtcE9m
ZnNldCArIEZsb2F0U2l6ZShkaXNwbGF5T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IHRpbGVX
aWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVyLT50aWxlU2l6ZSgpLndpZHRoKCkpOwot
ICAgICAgICAgICAgZmxvYXQgdGlsZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVy
LT50aWxlU2l6ZSgpLmhlaWdodCgpKTsKLQotICAgICAgICAgICAgLy8gTWFwIGNsYW1waW5nIHJl
Y3RhbmdsZSB0byB1bml0IHNxdWFyZS4KLSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFRyYW5z
bGF0ZVggPSAtY2xhbXBSZWN0LngoKSAvIGNsYW1wUmVjdC53aWR0aCgpOwotICAgICAgICAgICAg
ZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWSA9IC1jbGFtcFJlY3QueSgpIC8gY2xhbXBSZWN0Lmhl
aWdodCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVYID0gdGlsZVJlY3Qud2lk
dGgoKSAvIGNsYW1wUmVjdC53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4U2Nh
bGVZID0gdGlsZVJlY3QuaGVpZ2h0KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICAgICAg
ICAgIC8vIE1hcCB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgICAgICAg
ICBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVggPSB0ZXhPZmZzZXQueCgpIC8gdGlsZVdpZHRo
OwotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gdGV4T2Zmc2V0Lnko
KSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWCA9IGNs
YW1wUmVjdC53aWR0aCgpIC8gdGlsZVdpZHRoOwotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRU
ZXhTY2FsZVkgPSBjbGFtcFJlY3QuaGVpZ2h0KCkgLyB0aWxlSGVpZ2h0OwotCi0gICAgICAgICAg
ICBDQ0xheWVyUXVhZDo6RWRnZSBlZGdlWCA9IGNvbnRlbnRRdWFkLnJpZ2h0KCk7Ci0gICAgICAg
ICAgICBpZiAoaSA8IChtX3RpbGVyLT5udW1UaWxlc1goKSAtIDEpKSB7Ci0gICAgICAgICAgICAg
ICAgRmxvYXRQb2ludCBwMSh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0LnkoKSk7Ci0gICAgICAg
ICAgICAgICAgRmxvYXRQb2ludCBwMih0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBNYXAgcG9pbnRzIHRvIGRldmljZSBzcGFjZS4KLSAgICAg
ICAgICAgICAgICBwMSA9IGRldmljZVRyYW5zZm9ybS5tYXBQb2ludChwMSk7Ci0gICAgICAgICAg
ICAgICAgcDIgPSBkZXZpY2VUcmFuc2Zvcm0ubWFwUG9pbnQocDIpOwotCi0gICAgICAgICAgICAg
ICAgLy8gQ29tcHV0ZSB2ZXJ0aWNhbCBlZGdlLgotICAgICAgICAgICAgICAgIGVkZ2VYID0gQ0NM
YXllclF1YWQ6OkVkZ2UocDEsIHAyKTsKLSAgICAgICAgICAgICAgICBlZGdlWC5zY2FsZShzaWdu
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQ3JlYXRlIGRldmljZSBzcGFjZSBx
dWFkLgotICAgICAgICAgICAgQ0NMYXllclF1YWQgZGV2aWNlUXVhZChwcmV2RWRnZVgsIHByZXZF
ZGdlWSwgZWRnZVgsIGVkZ2VZKTsKLQotICAgICAgICAgICAgLy8gTWFwIHF1YWQgdG8gbGF5ZXIg
c3BhY2UuCi0gICAgICAgICAgICBGbG9hdFF1YWQgcXVhZCA9IHF1YWRUcmFuc2Zvcm0ubWFwUXVh
ZChkZXZpY2VRdWFkLmZsb2F0UXVhZCgpKTsKLQotICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRv
IHRpbGVSZWN0LgotICAgICAgICAgICAgcXVhZC5zY2FsZSgxLjBmIC8gdGlsZVJlY3Qud2lkdGgo
KSwgMS4wZiAvIHRpbGVSZWN0LmhlaWdodCgpKTsKLQotICAgICAgICAgICAgaWYgKGZyYWdtZW50
VGV4VHJhbnNmb3JtTG9jYXRpb24gPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBNb3ZlIGZy
YWdtZW50IHNoYWRlciB0cmFuc2Zvcm0gdG8gdmVydGV4IHNoYWRlci4gV2UgY2FuIGRvCi0gICAg
ICAgICAgICAgICAgLy8gdGhpcyB3aGlsZSBzdGlsbCBwcm9kdWNpbmcgY29ycmVjdCByZXN1bHRz
IGFzCi0gICAgICAgICAgICAgICAgLy8gZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiBzaG91
bGQgYWx3YXlzIGJlIG5vbi1uZWdhdGl2ZQotICAgICAgICAgICAgICAgIC8vIHdoZW4gdGlsZXMg
YXJlIHRyYW5zZm9ybWVkIGluIGEgd2F5IHRoYXQgY291bGQgcmVzdWx0IGluCi0gICAgICAgICAg
ICAgICAgLy8gc2FtcGxpbmcgb3V0c2lkZSB0aGUgbGF5ZXIuCi0gICAgICAgICAgICAgICAgdmVy
dGV4VGV4U2NhbGVYICo9IGZyYWdtZW50VGV4U2NhbGVYOwotICAgICAgICAgICAgICAgIHZlcnRl
eFRleFNjYWxlWSAqPSBmcmFnbWVudFRleFNjYWxlWTsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhU
ZXhUcmFuc2xhdGVYICo9IGZyYWdtZW50VGV4U2NhbGVYOwotICAgICAgICAgICAgICAgIHZlcnRl
eFRleFRyYW5zbGF0ZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVy
dGV4VGV4VHJhbnNsYXRlWCArPSBmcmFnbWVudFRleFRyYW5zbGF0ZVg7Ci0gICAgICAgICAgICAg
ICAgdmVydGV4VGV4VHJhbnNsYXRlWSArPSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7Ci0gICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9y
bTRmKGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24sIGZyYWdtZW50VGV4VHJhbnNsYXRlWCwg
ZnJhZ21lbnRUZXhUcmFuc2xhdGVZLCBmcmFnbWVudFRleFNjYWxlWCwgZnJhZ21lbnRUZXhTY2Fs
ZVkpKTsKLQotICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9n
cmFtLT52ZXJ0ZXhTaGFkZXIoKS52ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCB2ZXJ0ZXhU
ZXhUcmFuc2xhdGVYLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVZLCB2ZXJ0ZXhUZXhTY2FsZVgsIHZlcnRl
eFRleFNjYWxlWSkpOwotCi0gICAgICAgICAgICBpZiAodGlsZSAmJiB0aWxlLT50ZXh0dXJlSWQo
KSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCB0aWxlLT50ZXh0dXJlSWQoKSk7Ci0gICAgICAgICAgICAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIGZpbHRlcikpOwot
ICAgICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdf
RklMVEVSLCBmaWx0ZXIpKTsKLQotICAgICAgICAgICAgICAgIGxheWVyUmVuZGVyZXItPmRyYXdU
ZXh0dXJlZFF1YWQoZ2xvYmFsVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCks
IG9wYWNpdHksIHF1YWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9u
KCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB0aWxlVHJhbnNmb3JtID0gZ2xvYmFsVHJhbnNmb3JtOwotICAgICAgICAgICAgICAg
IHRpbGVUcmFuc2Zvcm0udHJhbnNsYXRlKHRpbGVSZWN0LngoKSArIHRpbGVSZWN0LndpZHRoKCkg
LyAyLjAsIHRpbGVSZWN0LnkoKSArIHRpbGVSZWN0LmhlaWdodCgpIC8gMi4wKTsKLQotICAgICAg
ICAgICAgICAgIGNvbnN0IExheWVyQ2hyb21pdW06OkJvcmRlclByb2dyYW0qIHNvbGlkQ29sb3JQ
cm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+Ym9yZGVyUHJvZ3JhbSgpOwotICAgICAgICAgICAgICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHNvbGlkQ29sb3JQcm9ncmFtLT5wcm9n
cmFtKCkpKTsKLQotICAgICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3Jt
NGYoc29saWRDb2xvclByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuY29sb3JMb2NhdGlvbigpLCBi
YWNrZ3JvdW5kQ29sb3IoKS5yZWQoKSwgYmFja2dyb3VuZENvbG9yKCkuZ3JlZW4oKSwgYmFja2dy
b3VuZENvbG9yKCkuYmx1ZSgpLCBiYWNrZ3JvdW5kQ29sb3IoKS5hbHBoYSgpKSk7Ci0KLSAgICAg
ICAgICAgICAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKHRpbGVUcmFuc2Zvcm0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlUmVj
dC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgb3BhY2l0eSwgcXVhZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbGlkQ29sb3JQcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xKTsKLQotICAgICAgICAgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBwcmV2RWRnZVggPSBlZGdlWDsKLSAgICAgICAgICAgIC8v
IFJldmVyc2UgZGlyZWN0aW9uLgotICAgICAgICAgICAgcHJldkVkZ2VYLnNjYWxlKC0xKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHByZXZFZGdlWSA9IGVkZ2VZOwotICAgICAgICAvLyBSZXZlcnNl
IGRpcmVjdGlvbi4KLSAgICAgICAgcHJldkVkZ2VZLnNjYWxlKC0xKTsKLSAgICB9Ci19Ci0KIH0K
IAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllcklt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZWRMYXllckltcGwuaAppbmRleCAwNmEwMzFjMjM2MTdkOTZhMTQwNTg1NjY3OGExNDFmNTUzY2Jl
M2NmLi40NzhiMDM0MDIzNDUwODE5YmJjZWEwYThkYTVhZDMyMTU2ZjU0YmQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5
ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5oCkBAIC00MywxNiArNDMsMTkgQEAgcHVibGljOgogICAgIH0K
ICAgICB2aXJ0dWFsIH5DQ1RpbGVkTGF5ZXJJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJh
dyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMo
Q0NRdWFkTGlzdCYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKik7CisKICAgICB2aXJ0dWFsIHZv
aWQgYmluZENvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBj
b25zdDsKIAogICAgIHZvaWQgc2V0U2tpcHNEcmF3KGJvb2wgc2tpcHNEcmF3KSB7IG1fc2tpcHNE
cmF3ID0gc2tpcHNEcmF3OyB9Ci0gICAgdm9pZCBzZXRTYW1wbGVkVGV4ZWxGb3JtYXQoTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdCkgeyBt
X3NhbXBsZWRUZXhlbEZvcm1hdCA9IHNhbXBsZWRUZXhlbEZvcm1hdDsgfQogICAgIHZvaWQgc2V0
VGlsaW5nRGF0YShjb25zdCBDQ0xheWVyVGlsaW5nRGF0YSYgdGlsZXIpOwogICAgIHZvaWQgc3lu
Y1RleHR1cmVJZChpbnQsIGludCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpOwogCisgICAg
dm9pZCBzZXRDb250ZW50c1N3aXp6bGVkKGJvb2wgY29udGVudHNTd2l6emxlZCkgeyBtX2NvbnRl
bnRzU3dpenpsZWQgPSBjb250ZW50c1N3aXp6bGVkOyB9CisgICAgYm9vbCBjb250ZW50c1N3aXp6
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1N3aXp6bGVkOyB9CisKICAgICB0eXBlZGVm
IFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFs
cGhhPiBQcm9ncmFtOwogICAgIC8vIFNoYWRlciBwcm9ncmFtIHRoYXQgc3dhcHMgcmVkIGFuZCBi
bHVlIGNvbXBvbmVudHMgb2YgdGV4dHVyZS4KICAgICAvLyBVc2VkIHdoZW4gdGV4dHVyZSBmb3Jt
YXQgZG9lcyBub3QgbWF0Y2ggbmF0aXZlIGNvbG9yIGZvcm1hdC4KQEAgLTcxLDI0ICs3NCwxNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgLy8gRXhwb3NlZCBmb3IgdGVzdGluZy4KICAgICBib29sIGhhc1Rp
bGVBdChpbnQsIGludCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHF1YWRUcmFuc2Zvcm0oKSBjb25zdDsKKwogcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiQ29udGVudExheWVyIjsg
fQogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsaW5nVHJhbnNmb3JtKCkgY29uc3Q7Ci0K
LSAgICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIHRoZSBjb250ZW50IHJl
Y3QuCi0gICAgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkp
OwotCiAgICAgRHJhd2FibGVUaWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0OwogICAgIERyYXdh
YmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7CiAKLSAgICAvLyBEcmF3IGFsbCB0aWxlcyB0
aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgotICAgIHRlbXBsYXRlIDxjbGFzcyBUPgot
ICAgIHZvaWQgZHJhd1RpbGVzKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3Jt
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtLCBjb25zdCBDQ0xh
eWVyUXVhZCYgZGV2aWNlUmVjdCwgY29uc3QgQ0NMYXllclF1YWQmIGNvbnRlbnRRdWFkLCBmbG9h
dCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBpbnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2Nh
dGlvbiwgaW50IGVkZ2VMb2NhdGlvbik7Ci0KICAgICBib29sIG1fc2tpcHNEcmF3OwotICAgIExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBtX3NhbXBsZWRUZXhlbEZvcm1h
dDsKKyAgICBib29sIG1fY29udGVudHNTd2l6emxlZDsKIAogICAgIE93blB0cjxDQ0xheWVyVGls
aW5nRGF0YT4gbV90aWxlcjsKIH07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYWFhY2E3MWY1ZDE0M2FiZWYxNzdiOWNlY2Jh
MWIyOGVmNTBkOTU1NS4uYTZhMmExMjI0MmJhNmYyMmNjMzFiNTY1OGYzYmU4M2ViYjBjN2JjNiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTEyLTE0ICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5l
QGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciB0aWxlIGRyYXdpbmcg
dG8gYmUgbW9yZSBkYXRhLWRyaXZlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzMwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNYXJrIHRocmVlIHRlc3RzIGFzIGZhaWxpbmcgd2l0aCBzbWFsbCBwaXhl
bCBkaWZmZXJlbmNlcy4gVGhlc2UganVzdAorICAgICAgICBuZWVkIHJlYmFzZWxpbmluZy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKwogMjAx
MS0xMi0xNCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBTa2lw
IGZhc3QvZm9ybXMvc2VsZWN0L21lbnVsaXN0LW9uY2hhbmdlLWZpcmVkLXdpdGgta2V5LXVwLWRv
d24uaHRtbCBvbiBNYWMgc2luY2UKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCBmODA0NWM4OTg1NWZiOGNjMDU2YzMyMGY0
MDhjMTQyMjdmMTM2NjE3Li44MDIzYzRjMWQ0Yzc4MzZiNWI1NjY1NDk3N2ZlZjY5Mzg0ZmQ4NWZl
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0
aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3Rh
dGlvbnMudHh0CkBAIC0zOTY3LDYgKzM5NjcsMTEgQEAgQlVHV0s3MzkwNSBHUFUgTElOVVggOiBt
ZWRpYS92aWRlby10cmFuc2Zvcm1lZC5odG1sID0gSU1BR0UKIEJVR1dLNzM5MDUgR1BVIExJTlVY
IDogbWVkaWEvdmlkZW8tem9vbS1jb250cm9scy5odG1sID0gSU1BR0UKIEJVR1dLNzM5MDUgR1BV
IFdJTiA6IG1lZGlhL3ZpZGVvLWxheWVyLWNyYXNoLmh0bWwgPSBURVhUCiAKKy8vIE5lZWQgcmVi
YXNlbGluZSBvbiBhbGwgcGxhdGZvcm1zCitCVUdFTk5FIDogY29tcG9zaXRpbmcvY29sb3ItbWF0
Y2hpbmcvaW1hZ2UtY29sb3ItbWF0Y2hpbmcuaHRtbCA9IEZBSUwKK0JVR0VOTkUgOiBjb21wb3Np
dGluZy9nZW9tZXRyeS92ZXJ0aWNhbC1zY3JvbGwtY29tcG9zaXRlZC5odG1sID0gRkFJTAorQlVH
RU5ORSA6IGNvbXBvc2l0aW5nL3NjYWxpbmcvdGlsZWQtbGF5ZXItcmVjdXJzaW9uLmh0bWwgPSBG
QUlMCisKIEJVR1dLNzM5MzMgREVCVUcgOiBzdmcvVzNDLVNWRy0xLjEtU0Uvc3RydWN0LWRvbS0x
MS1mLnN2ZyA9IFRJTUVPVVQgUEFTUwogCiBCVUdXSzczOTkxIFdJTjcgVklTVEEgUkVMRUFTRSA6
IGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2NvbXBsZXgtY2hhcmFjdGVyLWJhc2VkLWZhbGxiYWNr
Lmh0bWwgPSBJTUFHRStURVhUCg==
</data>
<flag name="review"
          id="119272"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>