<?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>74203</bug_id>
          
          <creation_ts>2011-12-09 12:37:30 -0800</creation_ts>
          <short_desc>[chromium] Create iterators for the RenderSurface-Layer tree</short_desc>
          <delta_ts>2012-01-10 13:25:02 -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>New Bugs</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>
          <dependson>75936</dependson>
          <blocked>75864</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>518408</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-09 12:37:30 -0800</bug_when>
    <thetext>[chromium] Create iterators for the RenderSurface-Layer tree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518409</commentid>
    <comment_count>1</comment_count>
      <attachid>118614</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-09 12:41:38 -0800</bug_when>
    <thetext>Created attachment 118614
Patch

This patch makes a CCLayerIterator class with 3 possible iterator orderings.

The iterator class is used in 2 places to demonstrate its use (CCLayerTreeHost and CCLayerTreeHostCommon) but could be used it more places as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518418</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-09 12:49:36 -0800</bug_when>
    <thetext>Have you thought about how this interacts with https://bugs.webkit.org/show_bug.cgi?id=73059?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518426</commentid>
    <comment_count>3</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-09 12:53:32 -0800</bug_when>
    <thetext>I have run a previous iteration by enne, but I will read through eir patch thoroughly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518627</commentid>
    <comment_count>4</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-09 16:19:11 -0800</bug_when>
    <thetext>Spoke with enne about bug #73059. The tl;dr is it doesn&apos;t conflict, and could later be used in calculateRenderPasses().


73059 removes all the layer tree walks it touches, and adds one new one in calculateRenderPasses(). This would equate to the same sort of walk done in CCLayerTreeHost in the current patch, and could make use of the iterator there. 

The patch does not seem to intersect with #73059 at all at the moment, other than 
intellectually where it is doing its own tree walk.  That can be switched to use the iterator afterward easily enough. 

Draw culling may be able to use the iterators also if it needs a top-to-bottom layer walk.

There are other tree walks in the code that could also be switched later. I thought it best to make it minimal, but wanted to actually demonstrate its use also and prove that it works by passing unit/layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520108</commentid>
    <comment_count>5</comment_count>
      <attachid>119025</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-13 09:00:37 -0800</bug_when>
    <thetext>Created attachment 119025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520110</commentid>
    <comment_count>6</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-13 09:01:39 -0800</bug_when>
    <thetext>Changed front-to-back/back-to-front to include renderSurfaceLayers so we can use it for the paint loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521379</commentid>
    <comment_count>7</comment_count>
      <attachid>119025</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-14 15:45:16 -0800</bug_when>
    <thetext>Comment on attachment 119025
Patch

This iterator is a really cool idea.
First round of comments... they are mostly nits, but I think all of these suggestions combined can make the iterator &quot;safer&quot; in the face of abuse and more readable =)


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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:33
&gt; +// These classes provide means to iterate over the RenderSurface-Layer tree.

As per our offline discussion - would it be OK if we used the following terminology?  Shouldnt require too many changes in code:

(1) &quot;target surface&quot; --&gt; the surface that layers/surface contribute to
(2) &quot;contributing surface&quot; --&gt; a surface that is hosted by a layer, which contributes to a target surface.
(3) &quot;renderSurfaceLayer&quot; seems too ambiguous, and we need a distinction between #2 and #3
(4) Instead of &quot;hosting&quot;, could we say &quot;representing&quot;?  This feels more correct to me because a layer technically can have all 3 roles at different times (layer represents a contributing surface, layer represents a target surface, layer represents itself as a layer).  we can&apos;t say &quot;layer hosts itself&quot;, so we lose some clarity in explanation if we use that word.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:35
&gt; +// The iterator&apos;s current position is always a child layer of a RenderSurface, or an owning layer of a RenderSurface. While a layer can be both, some iterators will return it once
&gt; +// in each of these states that it fulfills. A layer that owns a RenderSurface is referred to as a renderSurfaceLayer. This layer may also be a child of a RenderSurface,

(1) Maybe we should be even more explicit to say, &quot;If a layer owns a surface, it will usually appear multiple times in the iteration (&lt;on which iterators exactly?&gt;) -- once representing the target surface, once representing the contributing surface, and once representing the layer itself contributing to its own surface.&quot; -- or something like that

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:41
&gt; +// - The currentRenderSurface owns a RenderSurface, which in turn has a list of child layers. The m_currentChildLayer is a position in this child list. But can also be -1 to

can we make (unsigned)-1 a constant?  I was thinking &quot;kLayerRepresentsTargetSurface&quot;...  If that&apos;s OK, I guess the comment here should also be updated.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:52
&gt; +    inline LayerType* currentLayer() const { return m_currentChildLayer == (unsigned)-1 ? currentRenderSurfaceLayer() : currentRenderSurfaceChildren()[m_currentChildLayer].get(); }

Can we use your helper function instead of the explicit == conditional?  --&gt;  if currentLayerIsRenderSurfaceLayer() or whatever the new name becomes

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:53
&gt; +    inline LayerType* currentRenderSurfaceLayer() const { return (*m_renderSurfaceLayerList)[m_currentRenderSurfaceLayer].get(); }

If possible, maybe we should make this protected/private, and &quot;friend&quot; the iterators, or some other way.  In my imagination, the public interface for this struct should only be &quot;currentLayer(),  representsTargetSurface(), representsContributingSurface()&quot;.  everything else should be protected, i think.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:91
&gt; +    bool isRenderSurfaceLayer() { return m_position.currentLayerIsRenderSurfaceLayer(); }

As per our discussion offline, if I understand the code correctly, we might want to rename this as &quot;hasTargetRenderSurface&quot; ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:93
&gt; +    bool isPaintingLayer() { return !isRenderSurfaceLayer() &amp;&amp; !m_position.currentLayerHasRenderSurface(); }

As per our discussion offline, we probably want to rename this to &quot;hasContributingRenderSurface&quot; ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:126
&gt; +            it.m_currentRenderSurfaceLayer = -1;

Should this be (unsigned)-1 ?  I think we should create a const unsigned int kLayerRepresentsTargetSurface for all (unsigned)-1.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:165
&gt; +                it.m_currentChildLayer = -1;

Should this be (unsigned)-1 ?  I think we should create a const unsigned int kLayerRepresentsTargetSurface for all (unsigned)-1.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:217
&gt; +                while (it.m_currentChildLayer == (unsigned)-1) {

Can we use your helper function instead of the explicit == conditional?  --&gt;  if currentLayerIsRenderSurfaceLayer() or whatever the new name becomes

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:236
&gt; +            if (it.m_currentChildLayer == (unsigned)-1)

Can we use your helper function instead of the explicit == conditional?  --&gt;  if currentLayerIsRenderSurfaceLayer() or whatever the new name becomes

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:385
&gt; +    typedef CCLayerIterator&lt;LayerChromium, RenderSurfaceChromium, CCLayerIteratorActions::FrontToBack&gt; CCLayerIteratorType;

I think every time we choose a particular ordering for the iterator, maybe we should add a comment justifying why that ordering is necessary.  As I understand, here front-to-back is necessary for culling purposes?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:406
&gt; +    typedef CCLayerIterator&lt;LayerChromium, RenderSurfaceChromium, CCLayerIteratorActions::DependencyOrdered&gt; CCLayerIteratorType;

And here, a comment explaining that any ordering will probably (?) work correctly here, and it could be changed if there is a strong reason to use a different ordering.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:475
&gt; +    typedef CCLayerIterator&lt;LayerType, RenderSurfaceType, CCLayerIteratorActions::DependencyOrdered&gt; CCLayerIteratorType;

Same here, a comment about which ordering is appropriate... is there is any particular reason to walk this in a particular order?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521613</commentid>
    <comment_count>8</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-14 20:35:25 -0800</bug_when>
    <thetext>By the way, I think we should probably add unit tests that creates particular small renderSurfaceLayerLists and layerLists for each surface, and test that the iterator works as expected.   I apologize in advance for the extra time it will take =)

Especially since we don&apos;t yet use back-to-front, it feels risky without testing to keep that code around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525295</commentid>
    <comment_count>9</comment_count>
      <attachid>119025</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-21 09:48:14 -0800</bug_when>
    <thetext>Comment on attachment 119025
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:33
&gt;&gt; +// These classes provide means to iterate over the RenderSurface-Layer tree.
&gt; 
&gt; As per our offline discussion - would it be OK if we used the following terminology?  Shouldnt require too many changes in code:
&gt; 
&gt; (1) &quot;target surface&quot; --&gt; the surface that layers/surface contribute to
&gt; (2) &quot;contributing surface&quot; --&gt; a surface that is hosted by a layer, which contributes to a target surface.
&gt; (3) &quot;renderSurfaceLayer&quot; seems too ambiguous, and we need a distinction between #2 and #3
&gt; (4) Instead of &quot;hosting&quot;, could we say &quot;representing&quot;?  This feels more correct to me because a layer technically can have all 3 roles at different times (layer represents a contributing surface, layer represents a target surface, layer represents itself as a layer).  we can&apos;t say &quot;layer hosts itself&quot;, so we lose some clarity in explanation if we use that word.

comment updated a lot for greater clarity. Using terms &quot;layer representing X&quot; where X is 1) target surface 2) contributing surface or 3) itself.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:35

&gt; 
&gt; (1) Maybe we should be even more explicit to say, &quot;If a layer owns a surface, it will usually appear multiple times in the iteration (&lt;on which iterators exactly?&gt;) -- once representing the target surface, once representing the contributing surface, and once representing the layer itself contributing to its own surface.&quot; -- or something like that

This was wrong actually, all the iterators currently do return all the same layers (in all their states), just in different orders.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:41
&gt;&gt; +// - The currentRenderSurface owns a RenderSurface, which in turn has a list of child layers. The m_currentChildLayer is a position in this child list. But can also be -1 to
&gt; 
&gt; can we make (unsigned)-1 a constant?  I was thinking &quot;kLayerRepresentsTargetSurface&quot;...  If that&apos;s OK, I guess the comment here should also be updated.

done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:52
&gt;&gt; +    inline LayerType* currentLayer() const { return m_currentChildLayer == (unsigned)-1 ? currentRenderSurfaceLayer() : currentRenderSurfaceChildren()[m_currentChildLayer].get(); }
&gt; 
&gt; Can we use your helper function instead of the explicit == conditional?  --&gt;  if currentLayerIsRenderSurfaceLayer() or whatever the new name becomes

done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:53
&gt;&gt; +    inline LayerType* currentRenderSurfaceLayer() const { return (*m_renderSurfaceLayerList)[m_currentRenderSurfaceLayer].get(); }
&gt; 
&gt; If possible, maybe we should make this protected/private, and &quot;friend&quot; the iterators, or some other way.  In my imagination, the public interface for this struct should only be &quot;currentLayer(),  representsTargetSurface(), representsContributingSurface()&quot;.  everything else should be protected, i think.

the struct is not public data, i&apos;ve added comments and changed variable names to clarify this.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:91
&gt;&gt; +    bool isRenderSurfaceLayer() { return m_position.currentLayerIsRenderSurfaceLayer(); }
&gt; 
&gt; As per our discussion offline, if I understand the code correctly, we might want to rename this as &quot;hasTargetRenderSurface&quot; ?

renamed to representsTargetRenderSurface()

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:93
&gt;&gt; +    bool isPaintingLayer() { return !isRenderSurfaceLayer() &amp;&amp; !m_position.currentLayerHasRenderSurface(); }
&gt; 
&gt; As per our discussion offline, we probably want to rename this to &quot;hasContributingRenderSurface&quot; ?

renamed to representsItself()

also added representsContributingRenderSurface()

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:126
&gt;&gt; +            it.m_currentRenderSurfaceLayer = -1;
&gt; 
&gt; Should this be (unsigned)-1 ?  I think we should create a const unsigned int kLayerRepresentsTargetSurface for all (unsigned)-1.

no, the unsigned var is m_currentLayer  (m_currentChildLayer in this patch version).

This -1 indicates a position outside the bounds of the layer tree. I&apos;ve clarified this better in the opening comments also and added a second constant.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:165
&gt;&gt; +                it.m_currentChildLayer = -1;
&gt; 
&gt; Should this be (unsigned)-1 ?  I think we should create a const unsigned int kLayerRepresentsTargetSurface for all (unsigned)-1.

yes.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:217
&gt;&gt; +                while (it.m_currentChildLayer == (unsigned)-1) {
&gt; 
&gt; Can we use your helper function instead of the explicit == conditional?  --&gt;  if currentLayerIsRenderSurfaceLayer() or whatever the new name becomes

done

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:236
&gt;&gt; +            if (it.m_currentChildLayer == (unsigned)-1)
&gt; 
&gt; Can we use your helper function instead of the explicit == conditional?  --&gt;  if currentLayerIsRenderSurfaceLayer() or whatever the new name becomes

done

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:385
&gt;&gt; +    typedef CCLayerIterator&lt;LayerChromium, RenderSurfaceChromium, CCLayerIteratorActions::FrontToBack&gt; CCLayerIteratorType;
&gt; 
&gt; I think every time we choose a particular ordering for the iterator, maybe we should add a comment justifying why that ordering is necessary.  As I understand, here front-to-back is necessary for culling purposes?

yes, done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:406
&gt;&gt; +    typedef CCLayerIterator&lt;LayerChromium, RenderSurfaceChromium, CCLayerIteratorActions::DependencyOrdered&gt; CCLayerIteratorType;
&gt; 
&gt; And here, a comment explaining that any ordering will probably (?) work correctly here, and it could be changed if there is a strong reason to use a different ordering.

done

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:475
&gt;&gt; +    typedef CCLayerIterator&lt;LayerType, RenderSurfaceType, CCLayerIteratorActions::DependencyOrdered&gt; CCLayerIteratorType;
&gt; 
&gt; Same here, a comment about which ordering is appropriate... is there is any particular reason to walk this in a particular order?

done. this is the cheapest ordering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525307</commentid>
    <comment_count>10</comment_count>
      <attachid>120188</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-21 10:07:04 -0800</bug_when>
    <thetext>Created attachment 120188
Patch

comments addressed in this patch. will make a unit test.

@jamesr if you&apos;d like i can make some other places make use of the iterators, though it might be better suited to other CLs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525424</commentid>
    <comment_count>11</comment_count>
      <attachid>120207</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-21 12:00:35 -0800</bug_when>
    <thetext>Created attachment 120207
Patch

unit tests included.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525662</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-21 14:59:02 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=120188) [details]
&gt; Patch
&gt; 
&gt; comments addressed in this patch. will make a unit test.
&gt; 
&gt; @jamesr if you&apos;d like i can make some other places make use of the iterators, though it might be better suited to other CLs.

I think sticking to only these users in the initial CL is a good approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526690</commentid>
    <comment_count>13</comment_count>
      <attachid>120207</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-22 18:58:18 -0800</bug_when>
    <thetext>Comment on attachment 120207
Patch


This is great. I like how much cleaner the loops are, using the iterator.

One major point, and 3 minor nits.

1 Major point: I think we probably need put this patch on hold before trying to land it, because it will be plainly incorrect to iterate over LayerChromiums Front-to-Back before we add support for sorting layers on the LayerChromium side.  (Currently preserves3d sorting is only done on the CCLayerImpl side).  However, this might open a can of worms, because we may need to templatize all the layerSorter code.  I think we should ask the rest of the compositor team about this before continuing this patch.


3 minor nits: inline below

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Iterators come with three orderings. DependencyOrdered (this is a simple linear walk over the tree) and is not

I think this second sentence came out a little unclear.  Maybe just remove the &quot;and&quot; ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:37
&gt; +// A RenderSurface $R$ may be referred to in one of two difference contexts. One RenderSurface is &quot;current&quot; at any time, for

&quot;difference&quot; --&gt; &quot;different&quot;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:53
&gt; +// Most iterators will return a layer representing the target surface before returning layers representing themselves as children

&quot;Most iterators&quot; --&gt; &quot;Dependency ordered and BackToFront interators&quot;... if that&apos;s correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526693</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-22 19:02:03 -0800</bug_when>
    <thetext>I don&apos;t think the preserve3d sorting is relevant for the main-thread users of FrontToBack sorting, since within a preserve3d subtree you probably won&apos;t be doing any occlusion/culling.  It is definitely something to point out very clearly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526694</commentid>
    <comment_count>15</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-22 19:04:30 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; I don&apos;t think the preserve3d sorting is relevant for the main-thread users of FrontToBack sorting, since within a preserve3d subtree you probably won&apos;t be doing any occlusion/culling.  It is definitely something to point out very clearly.

OK good point.  So scratch what I said then =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526734</commentid>
    <comment_count>16</comment_count>
      <attachid>120207</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-22 22:01:49 -0800</bug_when>
    <thetext>Comment on attachment 120207
Patch

Some questions:

Do you expect that all iterator users will be locally creating an iterator and then using it for one loop? If so, do we really need arbitrary iterators or can we get away with something a little lighter (like a visitor solution that uses the stack for state instead of heap-allocating indices into a vector)?

Can we move some of that code out of the header? The header is very large and hard to read since they intermingle interface and implementation. There are great comments about how the things are implemented but not much about how you actually use them.

paintLayerContents() and updateCompositorResources() both have to deal with mask and replica layers by hand. Could/should that be a function of the iterator to know how to go through those layers? Not all iterations will need to touch mask/replica layers, but many will. Maybe it could be an option on the iterator?

since we rely on other bits of code building the render surfaces and sorting the layers, how big is the performance delta between the dependency and front-to-back/back-to-front iterators? it looks like the main overhead is keeping the history lists, but otherwise they should do the same work since they all iterate through the same set of layers visiting each layer once. could we simplify down to just having the front-to-back and back-to-front iterators? is the efficiency gain big enough to justify having another codepath to maintain?

on top of that, can we just have one bidirectional iterator type, or perhaps an iterator where you specify the direction at construction time or something to avoid having the loop logic in there twice? perhaps the iterations are too disimilar to fold together, i haven&apos;t fully groked that bit yet. it would be a really nice simplification if we could cut it down a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526738</commentid>
    <comment_count>17</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-22 22:07:23 -0800</bug_when>
    <thetext>(In reply to comment #16)

&gt; paintLayerContents() and updateCompositorResources() both have to deal with mask and replica layers by hand. Could/should that be a function of the iterator to know how to go through those layers? Not all iterations will need to touch mask/replica layers, but many will. Maybe it could be an option on the iterator?

I&apos;d just punt on this.

My hope is that if we refactor render surfaces into their own layer type, this new layer type can encapsulate mask and replica layers.  For example, the hypothetical RenderSurfaceLayerChromium::paintContentsIfDirty could handle painting these mask and replicas, and no iterator would need to know that they exist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526865</commentid>
    <comment_count>18</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-23 08:26:39 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 120207 [details])
&gt; Some questions:
&gt; 
&gt; Do you expect that all iterator users will be locally creating an iterator and then using it for one loop?

Yes that was how I intended it.

&gt; If so, do we really need arbitrary iterators or can we get away with something a little lighter (like a visitor solution that uses the stack for state instead of heap-allocating indices into a vector)?

I think I could stick 2 ints in the RenderSurface classes. One to remember position in their child lists (m_currentLayerHistory). And one to remember the previous target RS (m_targetRenderSurfaceLayerHistory).

1) This would prevent you from doing an iteration during another iteration.. I presume this would be okay?
2) This code is going to be a little less readable I think. I can prototype it and you can be the judge.

Another option would be to specify a stack size to those vectors (something like 20?), and at least it will use only the stack while it stays below that size.

&gt; Can we move some of that code out of the header? The header is very large and hard to read since they intermingle interface and implementation. There are great comments about how the things are implemented but not much about how you actually use them.

Yes I&apos;ll split it out.

&gt; paintLayerContents() and updateCompositorResources() both have to deal with mask and replica layers by hand. Could/should that be a function of the iterator to know how to go through those layers? Not all iterations will need to touch mask/replica layers, but many will. Maybe it could be an option on the iterator?

Punted to enne punting.

&gt; since we rely on other bits of code building the render surfaces and sorting the layers, how big is the performance delta between the dependency and front-to-back/back-to-front iterators? it looks like the main overhead is keeping the history lists, but otherwise they should do the same work since they all iterate through the same set of layers visiting each layer once. could we simplify down to just having the front-to-back and back-to-front iterators? is the efficiency gain big enough to justify having another codepath to maintain?

I think that we could drop DepOrdered, yes. I don&apos;t think the perf diffence of keeping a vector stack of ints is a big deal.

BackToFront preserves the invariant that the layer representing the current target surface is visited before layers that contribute to that surface. The difference is that the target surface can change and return again, whereas in DepOrdered you deal with all things in a given target surface in sequence. But at least in the current loops I changed this is not a concern, and it&apos;s something that could be dealt with without needing the DepOrdered iterator.

&gt; on top of that, can we just have one bidirectional iterator type, or perhaps an iterator where you specify the direction at construction time or something to avoid having the loop logic in there twice? perhaps the iterations are too disimilar to fold together, i haven&apos;t fully groked that bit yet. it would be a really nice simplification if we could cut it down a bit.

Lemme think about this one more after addressing the above stuff.. I think a bi-directional iterator would make the code much harder to read, as it would need to track more state (either in the iterator class or visitor-like on the surfaces/layers). Picking a direction at construction time would look more or less like it does now, I think? The loop logic is pretty different I don&apos;t see a lot of code in common between the two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526892</commentid>
    <comment_count>19</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-23 11:20:49 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #16)
&gt; &gt; could we simplify down to just having the front-to-back and back-to-front iterators? is the efficiency gain big enough to justify having another codepath to maintain?
&gt; I think that we could drop DepOrdered, yes.

One nice thing about the DepOrdered is that it is very simple, which makes it valuable for the unit test to make sure that the other iterators are actually hitting everything. I think otherwise we end up duplicating the loop logic into the unit test which is less desirable maybe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526906</commentid>
    <comment_count>20</comment_count>
      <attachid>120478</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-23 13:56:44 -0800</bug_when>
    <thetext>Created attachment 120478
Patch

(In reply to comment #18)
&gt; (In reply to comment #16)
&gt; &gt; on top of that, can we just have one bidirectional iterator type, or perhaps an iterator where you specify the direction at construction time or something to avoid having the loop logic in there twice?

A bidirectional implementation would need to be stateless other than what is stored in CCLayerIteratorPosition. For times when history is used currently, this means walking from the start of the tree to your current position to build up that history (and then toss it away afterward). I think that this walk would look exactly like the code we have now (one forward one backward) with a while(){ } around it. Personally I think what we have now is nicer than that.. unless someone has another idea how to do it.

While we were on the topic of complexity. I should point out that FrontToBack does have an extra cost (vs BackToFront or DepOrdered), with a for-loop to find the next target RenderSurface&apos;s owning layer. BackToFront was doing this also, but I replaced the for-loop with an extra int state variable in the iterator, m_highestTargetRenderSurfaceLayer.

I&apos;ve pulled the CCLayerIteratorActions over to a .cpp file, and gotten rid of the Vectors. It was actually very easy and I like the result a lot!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526911</commentid>
    <comment_count>21</comment_count>
      <attachid>120480</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-23 14:05:03 -0800</bug_when>
    <thetext>Created attachment 120480
Patch

Sorry, missed addressing one comment from Shawn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527419</commentid>
    <comment_count>22</comment_count>
      <attachid>120480</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-27 11:06:06 -0800</bug_when>
    <thetext>Comment on attachment 120480
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:169
&gt; +    // Walks layers sorted by z-order from back to front.

nit: comment is wrong.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:439
&gt; +    // Use FrontToBack to allow for testing occlusion and performing culling during the tree walk.
&gt; +    typedef CCLayerIterator&lt;LayerChromium, RenderSurfaceChromium, CCLayerIteratorActions::FrontToBack&gt; CCLayerIteratorType;

I realize that this behavior is unchanged, but some future patch is going to need to add in a different iteration order for texture reservation so that we don&apos;t drop the root layer or the scrollbars because we&apos;ve run out of texture memory.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:457
&gt; +    // Use BackToFront to hit target surfaces before their children.
&gt; +    typedef CCLayerIterator&lt;LayerChromium, RenderSurfaceChromium, CCLayerIteratorActions::BackToFront&gt; CCLayerIteratorType;

Isn&apos;t updateCompositorResources order-independent?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:483
&gt; +
&gt; +    CCLayerIteratorType end = CCLayerIteratorType::end(&amp;renderSurfaceLayerList);
&gt; +    for (CCLayerIteratorType it = CCLayerIteratorType::begin(&amp;renderSurfaceLayerList); it != end; ++it) {
&gt; +        if (!it.representsTargetRenderSurface()) {
&gt; +            IntRect visibleLayerRect = CCLayerTreeHostCommon::calculateVisibleLayerRect&lt;LayerType&gt;(*it);
&gt; +            it-&gt;setVisibleLayerRect(visibleLayerRect);
&gt;          }

When calculating visible layer rects, don&apos;t you need to process children before surfaces? Also, with that added conditional statement, where does the visible rect for layers that are surfaces get set?

Maybe I&apos;m just misunderstanding something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529590</commentid>
    <comment_count>23</comment_count>
      <attachid>120480</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-04 10:19:29 -0800</bug_when>
    <thetext>Comment on attachment 120480
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:483
&gt;&gt;          }
&gt; 
&gt; When calculating visible layer rects, don&apos;t you need to process children before surfaces? Also, with that added conditional statement, where does the visible rect for layers that are surfaces get set?
&gt; 
&gt; Maybe I&apos;m just misunderstanding something.

Ah, my mistake.  I&apos;m thinking of content rects, not visible layer rects.  Content rects require children to be processed before surfaces.  But, once everything has a valid content rect, then the visible layer rect can be done in any order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529598</commentid>
    <comment_count>24</comment_count>
      <attachid>120480</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-04 10:26:00 -0800</bug_when>
    <thetext>Comment on attachment 120480
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:169
&gt;&gt; +    // Walks layers sorted by z-order from back to front.
&gt; 
&gt; nit: comment is wrong.

thanks

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:439
&gt;&gt; +    typedef CCLayerIterator&lt;LayerChromium, RenderSurfaceChromium, CCLayerIteratorActions::FrontToBack&gt; CCLayerIteratorType;
&gt; 
&gt; I realize that this behavior is unchanged, but some future patch is going to need to add in a different iteration order for texture reservation so that we don&apos;t drop the root layer or the scrollbars because we&apos;ve run out of texture memory.

Yeh. Punting this to later as discussed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:457
&gt;&gt; +    typedef CCLayerIterator&lt;LayerChromium, RenderSurfaceChromium, CCLayerIteratorActions::BackToFront&gt; CCLayerIteratorType;
&gt; 
&gt; Isn&apos;t updateCompositorResources order-independent?

Yeh, comment updated.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:483
&gt;&gt;&gt;          }
&gt;&gt; 
&gt;&gt; When calculating visible layer rects, don&apos;t you need to process children before surfaces? Also, with that added conditional statement, where does the visible rect for layers that are surfaces get set?
&gt;&gt; 
&gt;&gt; Maybe I&apos;m just misunderstanding something.
&gt; 
&gt; Ah, my mistake.  I&apos;m thinking of content rects, not visible layer rects.  Content rects require children to be processed before surfaces.  But, once everything has a valid content rect, then the visible layer rect can be done in any order.

Fixed the comment to reflect this also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529599</commentid>
    <comment_count>25</comment_count>
      <attachid>121123</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-04 10:26:23 -0800</bug_when>
    <thetext>Created attachment 121123
Patch

nits/comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530448</commentid>
    <comment_count>26</comment_count>
      <attachid>121123</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-05 11:11:23 -0800</bug_when>
    <thetext>Comment on attachment 121123
Patch

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

Looking close! I&apos;m worried about the IteratorActionType memory, there&apos;s a &quot;new&quot; here with no &quot;delete&quot; and no smart pointer type. Left some other comments as well inline.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:37
&gt; +// A RenderSurface $R$ may be referred to in one of two different contexts. One RenderSurface is &quot;current&quot; at any time, for

i&apos;m not sure what the $x$ naming convention means, but I find it makes this paragraph hard to read - the $&apos;s dominate the letter on the inside. What about just &quot;A RenderSurface R may be...&quot; ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:62
&gt; +// Create a stepping iterator and end iterator by calling CCLayerIterator::begin() and CCLayerIterator::end() and passing in the
&gt; +// list of layers owning target RenderSurfaces. Step through the tree by incrementing the stepping iterator while it is != to
&gt; +// the end iterator. At each step the iterator knows what the layer is representing, and you can query the iterator to decide
&gt; +// what actions to perform with the layer given what it represents.

some short example code would be really nice here showing how to pick an iteration direction and how to actually get at the layers. maybe even put the example above the detailed explanation

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:80
&gt; +struct CCLayerIteratorPosition {

this guy takes a lot of lines of code and puts the start of the actual CCLayerIterator interface down below line 100. can it get its own header?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:102
&gt; +    static const int kInvalidTargetRenderSurfaceLayer = -1;
&gt; +    // This must be -1 since the iterator action code assumes that this value can be
&gt; +    // reached by subtracting one from the position of the first layer in the current
&gt; +    // target surface&apos;s child layer list, which is 0.
&gt; +    static const unsigned kLayerRepresentingTargetRenderSurface = (unsigned)-1;

we don&apos;t normally use the &quot;k&quot; prefix for constants in WebKit

what do you mean by (unsigned)-1 ? unsigned types + negative numbers normally means weird bugs. why the c-style cast?

do we really need a different set of these constants for every instantiation of this template, or can these be hoisted out?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:106
&gt; +    const Vector&lt;RefPtr&lt;LayerType&gt; &gt;* m_renderSurfaceLayerList;
&gt; +    int m_targetRenderSurfaceLayer;
&gt; +    unsigned m_currentLayer;

we don&apos;t use the m_ prefix (or any prefix) for public members of a struct

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:137
&gt; +        , m_actions(new IteratorActionType())

who owns the memory for m_actions? where&apos;s the delete?

&gt; Source/WebKit/chromium/tests/CCLayerIteratorTest.cpp:235
&gt; +    root2-&gt;setOpacity(0.5f); // Force the layer to own a new surface.

here and elsewhere: in webkit, we don&apos;t use the &quot;f&quot; suffix in cases like this where the compiler can figure out what we mean. just &quot;0.5&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530777</commentid>
    <comment_count>27</comment_count>
      <attachid>121367</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-05 16:50:56 -0800</bug_when>
    <thetext>Created attachment 121367
Patch

Comments addressed. Split CCLayerIteratorPosition into its own header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530783</commentid>
    <comment_count>28</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-05 16:55:47 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 121123 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121123&amp;action=review
&gt; 
&gt; Looking close! I&apos;m worried about the IteratorActionType memory, there&apos;s a &quot;new&quot; here with no &quot;delete&quot; and no smart pointer type. Left some other comments as well inline.

&gt; i&apos;m not sure what the $x$ naming convention means, but I find it makes this paragraph hard to read - the $&apos;s dominate the letter on the inside. What about just &quot;A RenderSurface R may be...&quot; ?

done. (it was latex notation.)

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:62
&gt; some short example code would be really nice here showing how to pick an iteration direction and how to actually get at the layers. maybe even put the example above the detailed explanation

done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:80
&gt; &gt; +struct CCLayerIteratorPosition {
&gt; 
&gt; this guy takes a lot of lines of code and puts the start of the actual CCLayerIterator interface down below line 100. can it get its own header?

done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:102
&gt; &gt; +    static const int kInvalidTargetRenderSurfaceLayer = -1;
&gt; &gt; +    // This must be -1 since the iterator action code assumes that this value can be
&gt; &gt; +    // reached by subtracting one from the position of the first layer in the current
&gt; &gt; +    // target surface&apos;s child layer list, which is 0.
&gt; &gt; +    static const unsigned kLayerRepresentingTargetRenderSurface = (unsigned)-1;
&gt; 
&gt; we don&apos;t normally use the &quot;k&quot; prefix for constants in WebKit

done.

&gt; what do you mean by (unsigned)-1 ? unsigned types + negative numbers normally means weird bugs. why the c-style cast?

changed it to a signed int like the other variable.

&gt; do we really need a different set of these constants for every instantiation of this template, or can these be hoisted out?

yes! pulled them out to a CCLayerIteratorPositionValue struct.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:106
&gt; we don&apos;t use the m_ prefix (or any prefix) for public members of a struct

done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:137
&gt; who owns the memory for m_actions? where&apos;s the delete?

Thanks, made it OwnPtr.

&gt; &gt; Source/WebKit/chromium/tests/CCLayerIteratorTest.cpp:235
&gt; here and elsewhere: in webkit, we don&apos;t use the &quot;f&quot; suffix in cases like this where the compiler can figure out what we mean. just &quot;0.5&quot;

done, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530810</commentid>
    <comment_count>29</comment_count>
      <attachid>121367</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-05 17:15:46 -0800</bug_when>
    <thetext>Comment on attachment 121367
Patch

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

Awesome, R=me!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.cpp:150
&gt; +// Declare each of the above functions for LayerChromium and CCLayerImpl classes so that they are linked.
&gt; +template void CCLayerIteratorActions::BackToFront::begin(CCLayerIteratorPosition&lt;LayerChromium, RenderSurfaceChromium&gt;&amp;);

can you confirm that this compiles fine in visual studio before landing (it&apos;s not too advanced, but i&apos;ve had odd problems with template instantiation before with msvs)? tryjobs should do the trick

&gt; Source/WebKit/chromium/tests/CCLayerIteratorTest.cpp:2
&gt; + * Copyright (C) 2011 Google Inc. All rights reserved.

2012, please</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532253</commentid>
    <comment_count>30</comment_count>
      <attachid>121677</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-09 09:59:42 -0800</bug_when>
    <thetext>Created attachment 121677
Patch

Some compile fixed for mac/windows. The templates were fine but the distinction between struct/class is more important on other platforms. This compiled on both mac and windows try bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532564</commentid>
    <comment_count>31</comment_count>
      <attachid>121732</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-09 15:30:08 -0800</bug_when>
    <thetext>Created attachment 121732
Patch

Dur, missed the 2012 change, sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532581</commentid>
    <comment_count>32</comment_count>
      <attachid>121732</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-09 15:45:06 -0800</bug_when>
    <thetext>Comment on attachment 121732
Patch

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532635</commentid>
    <comment_count>33</comment_count>
      <attachid>121732</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 16:32:11 -0800</bug_when>
    <thetext>Comment on attachment 121732
Patch

Clearing flags on attachment: 121732

Committed r104507: &lt;http://trac.webkit.org/changeset/104507&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532636</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 16:32:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533320</commentid>
    <comment_count>35</comment_count>
      <attachid>121897</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-10 12:57:53 -0800</bug_when>
    <thetext>Created attachment 121897
Patch

We were adding a new assert which failed in the unit test. The assert used to be there but was removed at some point, and my rebasing missed it.

I was using component build which excludes the CCLayerTreeHostTest.cpp among others.. will have to stop using it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533321</commentid>
    <comment_count>36</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-10 12:58:33 -0800</bug_when>
    <thetext>Reopening</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533324</commentid>
    <comment_count>37</comment_count>
      <attachid>121897</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-10 13:02:12 -0800</bug_when>
    <thetext>Comment on attachment 121897
Patch

Here we go again!

We really should make that test work in the component build, it&apos;s bitten me before as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533340</commentid>
    <comment_count>38</comment_count>
      <attachid>121897</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-10 13:24:55 -0800</bug_when>
    <thetext>Comment on attachment 121897
Patch

Clearing flags on attachment: 121897

Committed r104626: &lt;http://trac.webkit.org/changeset/104626&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533341</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-10 13:25:02 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118614</attachid>
            <date>2011-12-09 12:41:38 -0800</date>
            <delta_ts>2011-12-13 09:00:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74203-20111209154137.patch</filename>
            <type>text/plain</type>
            <size>21231</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMjQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRlMWUzYWY4N2M1NDhi
Mzg0Mzk0YjdhNmJmNzlkNjIwZjNiMjgzMi4uZDdlODZmNmU4YTVlYWFiNDViYjBhN2MwOGM2M2Y2
MGQwOGQ2YzhlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDExLTEyLTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6Q0NMYXll
ckl0ZXJhdG9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9z
aXRpb246OmN1cnJlbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQ
b3NpdGlvbjo6Y3VycmVudFJlbmRlclN1cmZhY2VMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVySXRlcmF0b3JQb3NpdGlvbjo6Y3VycmVudFJlbmRlclN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OmN1cnJlbnRSZW5kZXJTdXJmYWNlQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OmN1cnJl
bnRMYXllckhhc1JlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJh
dG9yUG9zaXRpb246OmN1cnJlbnRMYXllcklzUmVuZGVyU3VyZmFjZUxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6Q0NMYXllckl0ZXJhdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckl0ZXJhdG9yOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVy
YXRvcisrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvcjo6aXNSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckl0ZXJhdG9yOjppc1BhaW50aW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckl0ZXJhdG9yQWN0aW9uczo6RGVwZW5kZW5jeU9yZGVyZWQ6OmJlZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkRlcGVuZGVuY3lPcmRlcmVkOjplbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RGVwZW5kZW5jeU9yZGVy
ZWQ6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFj
a1RvRnJvbnQ6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlv
bnM6OkJhY2tUb0Zyb250OjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0
ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6Om5leHQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmdvVG9IaWdoZXN0
SW5TdWJ0cmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWlu
dExheWVyQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3YWxrTGF5ZXJz
QW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMpOgorCiAyMDExLTExLTMwICBTaW1vbiBIYXVz
bWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFY4IGRlYnVn
IGJ1aWxkIGZpeGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGIzZmIxOGE2ODM5ODQxYzFiMjRhOTIz
N2E4ZjJjYzBmNjJlOWRkMjAuLmRlNzc5NGI4Zjk3NTNkMDBmMGY2ZDg0MTljN2QzY2FiNTYzZWQz
NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1OTksNiArMzU5OSw3IEBACiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0
b3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clF1YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyUXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyU29ydGVyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFhMThiOGJhZjJkOWYyMTFhZDM5ODg0ODc3N2MxMWQ1MDExY2RlNzYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySXRlcmF0b3IuaApAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
Q0xheWVySXRlcmF0b3JfaAorI2RlZmluZSBDQ0xheWVySXRlcmF0b3JfaAorCisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBUaGVzZSBjbGFzc2VzIHByb3ZpZGUgbWVhbnMgdG8gaXRlcmF0ZSBvdmVyIHRo
ZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUuCisvLyBUaGUgaXRlcmF0b3IncyBjdXJyZW50IHBv
c2l0aW9uIGlzIGFsd2F5cyBhIGNoaWxkIGxheWVyIG9mIGEgUmVuZGVyU3VyZmFjZSwgb3IgYW4g
b3duaW5nIGxheWVyIG9mIGEgUmVuZGVyU3VyZmFjZS4gV2hpbGUgYSBsYXllciBjYW4gYmUgYm90
aCwgc29tZSBpdGVyYXRvcnMgd2lsbCByZXR1cm4gaXQgb25jZQorLy8gaW4gZWFjaCBvZiB0aGVz
ZSBzdGF0ZXMgdGhhdCBpdCBmdWxmaWxscy4gQSBsYXllciB0aGF0IG93bnMgYSBSZW5kZXJTdXJm
YWNlIGlzIHJlZmVycmVkIHRvIGFzIGEgcmVuZGVyU3VyZmFjZUxheWVyLiBUaGlzIGxheWVyIG1h
eSBhbHNvIGJlIGEgY2hpbGQgb2YgYSBSZW5kZXJTdXJmYWNlLAorLy8gYW5kIG1heSBpbiBhZGRp
dGlvbiBiZSBhIGNoaWxkIG9mIHRoZSBSZW5kZXJTdXJmYWNlIGl0IG93bnMgYXQgdGhlIHNhbWUg
dGltZS4KKworLy8gVGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIGl0ZXJhdG9yIGlzIGhlbGQg
aW4gdHdvIGludGVnZXIgdmFyaWFibGVzLgorLy8gLSBUaGUgbV9jdXJyZW50UmVuZGVyU3VyZmFj
ZUxheWVyIGlzIGEgcG9zaXRpb24gaW4gdGhlIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHdoaWNo
IHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgcmVuZGVyU3VyZmFjZUxheWVyIChsYXllciBvd25pbmcg
YSBSZW5kZXJTdXJmYWNlKS4gVGhpcyBpcyBhIHZhbHVlCisvLyBmcm9tIDAgdG8gbi0xIChuID0g
bnVtYmVyIG9mIHJlbmRlclN1cmZhY2VMYXllcnMpLgorLy8gLSBUaGUgY3VycmVudFJlbmRlclN1
cmZhY2Ugb3ducyBhIFJlbmRlclN1cmZhY2UsIHdoaWNoIGluIHR1cm4gaGFzIGEgbGlzdCBvZiBj
aGlsZCBsYXllcnMuIFRoZSBtX2N1cnJlbnRDaGlsZExheWVyIGlzIGEgcG9zaXRpb24gaW4gdGhp
cyBjaGlsZCBsaXN0LiBCdXQgY2FuIGFsc28gYmUgLTEgdG8KKy8vIGluZGljYXRlIHRoZSBsYXll
ciB3aGljaCBvd25zIHRoZSBSZW5kZXJTdXJmYWNlIHJhdGhlciB0aGFuIGFueSBvZiB0aGUgUmVu
ZGVyU3VyZmFjZSdzIGNoaWxkIGxheWVycyAoc2VlIGJlbG93KS4KKy8vCisvLyBUaGUgY3VycmVu
dCBwb3NpdGlvbiBvZiB0aGUgaXRlcmF0b3IgaXMgdGFrZW4gYnkgY29tYmluaW5nIHRoZSB0d28g
YWJvdmUgdmFsdWVzIHRvIGZpbmQgYSBzcGVjaWZpYyBjaGlsZCBsYXllciBvZiBhIHNwZWNpZmlj
IFJlbmRlclN1cmZhY2UuIEhvd2V2ZXIsIGl0IGlzIGFsc28gdG8gbGFuZCBvbgorLy8gdGhlIGxh
eWVycyB3aG8gb3duIFJlbmRlclN1cmZhY2VzICh0aGUgcmVuZGVyU3VyZmFjZUxheWVycykuIFRo
aXMgaXMgYSBzcGVjaWFsIGNhc2UsIGluIHdoaWNoIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGEg
cmVuZGVyU3VyZmFjZUxheWVyLCBhbmQgaXMgbm90IHJlbGF0aXZlIHRvIGFueQorLy8gbGlzdCBv
ZiBjaGlsZCBsYXllcnMgZm9yIGFueSBSZW5kZXJTdXJmYWNlLCBzbyB0aGUgbV9jdXJyZW50Q2hp
bGRMYXllciBpcyBnaXZlbiBhbiBvdXQtb2YtYm91bmRzIHZhbHVlIG9mIC0xIHRvIGluZGljYXRl
IHRoaXMgc3RhdGUuCisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVu
ZGVyU3VyZmFjZVR5cGU+CitzdHJ1Y3QgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24geworICAgIGV4
cGxpY2l0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJU
eXBlPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSA6IG1fcmVuZGVyU3VyZmFjZUxheWVyTGlz
dChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSB7IH0KKworICAgIGlubGluZSBMYXllclR5cGUqIGN1
cnJlbnRMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoaWxkTGF5ZXIgPT0gKHVuc2ln
bmVkKS0xID8gY3VycmVudFJlbmRlclN1cmZhY2VMYXllcigpIDogY3VycmVudFJlbmRlclN1cmZh
Y2VDaGlsZHJlbigpW21fY3VycmVudENoaWxkTGF5ZXJdLmdldCgpOyB9CisgICAgaW5saW5lIExh
eWVyVHlwZSogY3VycmVudFJlbmRlclN1cmZhY2VMYXllcigpIGNvbnN0IHsgcmV0dXJuICgqbV9y
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KVttX2N1cnJlbnRSZW5kZXJTdXJmYWNlTGF5ZXJdLmdldCgp
OyB9CisgICAgaW5saW5lIFJlbmRlclN1cmZhY2VUeXBlKiBjdXJyZW50UmVuZGVyU3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRSZW5kZXJTdXJmYWNlTGF5ZXIoKS0+cmVuZGVyU3VyZmFj
ZSgpOyB9CisgICAgaW5saW5lIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+JiBjdXJy
ZW50UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gY3VycmVudFJlbmRlclN1
cmZhY2UoKS0+bGF5ZXJMaXN0KCk7IH0KKworICAgIGlubGluZSBib29sIGN1cnJlbnRMYXllckhh
c1JlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBDQ0xheWVyVHJlZUhvc3RDb21tb246OnJl
bmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0PExheWVyVHlwZT4oY3VycmVudExheWVyKCks
IGN1cnJlbnRSZW5kZXJTdXJmYWNlTGF5ZXIoKS0+aWQoKSk7IH0KKyAgICBpbmxpbmUgYm9vbCBj
dXJyZW50TGF5ZXJJc1JlbmRlclN1cmZhY2VMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dENoaWxkTGF5ZXIgPT0gKHVuc2lnbmVkKS0xOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fY3VycmVudFJlbmRlclN1cmZhY2VMYXllciA9PSBvdGhlci5tX2N1cnJlbnRSZW5k
ZXJTdXJmYWNlTGF5ZXIKKyAgICAgICAgICAgICYmIG1fY3VycmVudENoaWxkTGF5ZXIgPT0gb3Ro
ZXIubV9jdXJyZW50Q2hpbGRMYXllcjsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PExheWVyVHlwZT4gPiogbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIGludCBtX2N1cnJl
bnRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgdW5zaWduZWQgbV9jdXJyZW50Q2hpbGRMYXllcjsK
K307CisKKy8vIEFuIGl0ZXJhdG9yIGNsYXNzIGZvciB3YWxraW5nIG92ZXIgbGF5ZXJzIGluIHRo
ZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUuCisvLyBVc2UgdGhlIGJlZ2luKCkgYW5kIGVuZCgp
IGZ1bmN0aW9ucyB0byBnZXQgYW4gaXRlcmF0b3IgcmVsYXRpdmUgdG8gYSBnaXZlbiBsaXN0IG9m
IHJlbmRlclN1cmZhY2VMYXllcnMuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgSXRlcmF0b3JBY3Rpb25UeXBlPgorY2xh
c3MgQ0NMYXllckl0ZXJhdG9yIHsKKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllclR5
cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBJdGVyYXRvckFjdGlvblR5cGU+IENDTGF5ZXJJdGVyYXRv
clR5cGU7CisKK3B1YmxpYzoKKyAgICBDQ0xheWVySXRlcmF0b3IoKSA6IG1fcG9zaXRpb24oMCks
IG1fYWN0aW9ucygwKSB7IH0KKworICAgIHN0YXRpYyBDQ0xheWVySXRlcmF0b3JUeXBlIGJlZ2lu
KGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KSB7IHJldHVybiBDQ0xheWVySXRlcmF0b3JUeXBlKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHRy
dWUpOyB9CisgICAgc3RhdGljIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSB7IHJldHVybiBDQ0xh
eWVySXRlcmF0b3JUeXBlKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGZhbHNlKTsgfQorCisgICAg
Q0NMYXllckl0ZXJhdG9yVHlwZSYgb3BlcmF0b3IrKygpIHsgbV9hY3Rpb25zLT5uZXh0KG1fcG9z
aXRpb24pOyByZXR1cm4gKnRoaXM7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ0NMYXll
ckl0ZXJhdG9yVHlwZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24gPT0gb3RoZXIu
bV9wb3NpdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDQ0xheWVySXRlcmF0b3JU
eXBlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIExh
eWVyVHlwZSogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyKCk7
IH0KKyAgICBMYXllclR5cGUqIG9wZXJhdG9yKigpIHsgcmV0dXJuIG1fcG9zaXRpb24uY3VycmVu
dExheWVyKCk7IH0KKworICAgIC8vIFRydWUgZm9yIGxheWVycyB0aGF0IGFyZSBob3N0aW5nIGEg
UmVuZGVyU3VyZmFjZS4KKyAgICBib29sIGlzUmVuZGVyU3VyZmFjZUxheWVyKCkgeyByZXR1cm4g
bV9wb3NpdGlvbi5jdXJyZW50TGF5ZXJJc1JlbmRlclN1cmZhY2VMYXllcigpOyB9CisgICAgLy8g
VHJ1ZSBmb3IgbGF5ZXJzIHRoYXQgYXJlIGNoaWxkcmVuIG9mIGEgUmVuZGVyU3VyZmFjZSBhbmQg
YXJlIG5vdCBob3N0aW5nIGEgZGlmZmVyZW50IFJlbmRlclN1cmZhY2UuCisgICAgYm9vbCBpc1Bh
aW50aW5nTGF5ZXIoKSB7IHJldHVybiAhaXNSZW5kZXJTdXJmYWNlTGF5ZXIoKSAmJiAhbV9wb3Np
dGlvbi5jdXJyZW50TGF5ZXJIYXNSZW5kZXJTdXJmYWNlKCk7IH0KKworcHJpdmF0ZToKKyAgICBD
Q0xheWVySXRlcmF0b3IoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGJvb2wgc3RhcnQpCisgICAgICAgIDogbV9wb3NpdGlvbihyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KQorICAgICAgICAsIG1fYWN0aW9ucyhuZXcgSXRlcmF0b3JBY3Rpb25U
eXBlKCkpCisgICAgeworICAgICAgICBpZiAoc3RhcnQgJiYgIXJlbmRlclN1cmZhY2VMYXllckxp
c3QtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fYWN0aW9ucy0+YmVnaW4obV9wb3NpdGlvbik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYWN0aW9ucy0+ZW5kKG1fcG9zaXRpb24pOwor
ICAgIH0KKworICAgIENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3Vy
ZmFjZVR5cGU+IG1fcG9zaXRpb247CisgICAgSXRlcmF0b3JBY3Rpb25UeXBlKiBtX2FjdGlvbnM7
CisKKyAgICBmcmllbmQgY2xhc3MgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczsKK307CisKKy8vIE9y
ZGVyaW5ncyBmb3IgaXRlcmF0aW5nIG92ZXIgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZS4K
K3N0cnVjdCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zIHsKKyAgICAvLyBJZiBSZW5kZXJTdXJmYWNl
IEIgcGFpbnRzIGludG8gUmVuZGVyU3VyZmFjZSBBLCB0aGlzIGl0ZXJhdG9yIGNsYXNzIHZpc2l0
cyBsYXllcnMgaW4gQiBiZWZvcmUgdmlzaXRpbmcgbGF5ZXJzIGluIEEuCisgICAgY2xhc3MgRGVw
ZW5kZW5jeU9yZGVyZWQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CisgICAgICAgIHZvaWQgYmVn
aW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4m
IGl0KQorICAgICAgICB7CisgICAgICAgICAgICBpdC5tX2N1cnJlbnRSZW5kZXJTdXJmYWNlTGF5
ZXIgPSBpdC5tX3JlbmRlclN1cmZhY2VMYXllckxpc3QtPnNpemUoKSAtIDE7CisgICAgICAgICAg
ICBpdC5tX2N1cnJlbnRDaGlsZExheWVyID0gKHVuc2lnbmVkKS0xOworICAgICAgICB9CisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VU
eXBlPgorICAgICAgICB2b2lkIGVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUs
IFJlbmRlclN1cmZhY2VUeXBlPiYgaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGl0Lm1fY3Vy
cmVudFJlbmRlclN1cmZhY2VMYXllciA9IC0xOworICAgICAgICAgICAgaXQubV9jdXJyZW50Q2hp
bGRMYXllciA9ICh1bnNpZ25lZCktMTsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9p
ZCBuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5
cGU+JiBpdCkKKyAgICAgICAgeworICAgICAgICAgICAgKytpdC5tX2N1cnJlbnRDaGlsZExheWVy
OworICAgICAgICAgICAgaWYgKGl0Lm1fY3VycmVudENoaWxkTGF5ZXIgPT0gaXQuY3VycmVudFJl
bmRlclN1cmZhY2VDaGlsZHJlbigpLnNpemUoKSkgeworICAgICAgICAgICAgICAgIC0taXQubV9j
dXJyZW50UmVuZGVyU3VyZmFjZUxheWVyOworICAgICAgICAgICAgICAgIGl0Lm1fY3VycmVudENo
aWxkTGF5ZXIgPSAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICAv
LyBXYWxrcyBsYXllcnMgc29ydGVkIGJ5IHotb3JkZXIgZnJvbSBiYWNrIHRvIGZyb250LiBUaGlz
IGRvZXMgbm90IHN0b3Agb24gcmVuZGVyU3VyZmFjZUxheWVycywgb25seSBjaGlsZCBsYXllcnMg
b2YgUmVuZGVyU3VyZmFjZXMuCisgICAgY2xhc3MgQmFja1RvRnJvbnQgeworICAgIHB1YmxpYzoK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3Vy
ZmFjZVR5cGU+CisgICAgICAgIHZvaWQgYmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5
ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIGl0KQorICAgICAgICB7CisgICAgICAgICAgICBp
dC5tX2N1cnJlbnRSZW5kZXJTdXJmYWNlTGF5ZXIgPSAwOworICAgICAgICAgICAgaXQubV9jdXJy
ZW50Q2hpbGRMYXllciA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CisgICAgICAgIHZvaWQgZW5k
KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBp
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaXQubV9jdXJyZW50UmVuZGVyU3VyZmFjZUxheWVy
ID0gLTE7CisgICAgICAgICAgICBpdC5tX2N1cnJlbnRDaGlsZExheWVyID0gMDsKKyAgICAgICAg
fQorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJT
dXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExh
eWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBpdCkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gSWYgdGhlIGN1cnJlbnQgbGF5ZXIgaGFzIGEgUlMsIG1vdmUgdG8gaXRzIGxheWVyIGxpc3Qu
IE90aGVyd2lzZSwgdmlzaXQgdGhlIG5leHQgbGF5ZXIgaW4gdGhlIGN1cnJlbnQgUlMgbGF5ZXIg
bGlzdC4KKyAgICAgICAgICAgIGlmIChpdC5jdXJyZW50TGF5ZXJIYXNSZW5kZXJTdXJmYWNlKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBTYXZlIG91ciBwb3NpdGlvbiBpbiB0aGUgY2hpbGRMYXll
ciBsaXN0IGZvciB0aGUgUmVuZGVyU3VyZmFjZSwgdGhlbiBqdW1wIHRvIHRoZSBuZXh0IFJlbmRl
clN1cmZhY2UuIFRoZSBmaXJzdCBsYXllciBpbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBSZW5k
ZXJTdXJmYWNlIHdpbGwgYmUgdGhlIGxheWVyIHdlIGp1c3QgdmlzaXRlZCBmb3Igc2tpcCBvdmVy
IGl0LgorICAgICAgICAgICAgICAgIG1fY2hpbGRMYXllckhpc3RvcnkuYXBwZW5kKGl0Lm1fY3Vy
cmVudENoaWxkTGF5ZXIpOworICAgICAgICAgICAgICAgICsraXQubV9jdXJyZW50UmVuZGVyU3Vy
ZmFjZUxheWVyOworICAgICAgICAgICAgICAgIGl0Lm1fY3VycmVudENoaWxkTGF5ZXIgPSAwOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICArK2l0Lm1fY3VycmVudENoaWxk
TGF5ZXI7CisgICAgICAgICAgICAgICAgd2hpbGUgKGl0Lm1fY3VycmVudENoaWxkTGF5ZXIgPT0g
aXQuY3VycmVudFJlbmRlclN1cmZhY2VDaGlsZHJlbigpLnNpemUoKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBKdW1wIGJhY2sgdG8gdGhlIHByZXZpb3VzIFJlbmRlclN1cmZhY2UsIGFuZCBn
ZXQgYmFjayB0aGUgcG9zaXRpb24gd2hlcmUgd2Ugd2VyZSBpbiB0aGF0IGxpc3QsIGFuZCBtb3Zl
IHRvIHRoZSBuZXh0IHBvc2l0aW9uIHRoZXJlLgorICAgICAgICAgICAgICAgICAgICAtLWl0Lm1f
Y3VycmVudFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm1f
Y3VycmVudFJlbmRlclN1cmZhY2VMYXllciA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGl0Lm1fY3VycmVudENoaWxkTGF5ZXIgPSAwOyAvLyBFbmQgb2YgdGhlIGxpc3QKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGl0Lm1fY3VycmVudENoaWxkTGF5ZXIgPSBtX2NoaWxkTGF5ZXJIaXN0b3J5Lmxh
c3QoKSsxOworICAgICAgICAgICAgICAgICAgICBtX2NoaWxkTGF5ZXJIaXN0b3J5LnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBw
cml2YXRlOgorICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fY2hpbGRMYXllckhpc3Rvcnk7Cisg
ICAgfTsKKworICAgIC8vIFdhbGtzIGxheWVycyBzb3J0ZWQgYnkgei1vcmRlciBmcm9tIGJhY2sg
dG8gZnJvbnQuIFRoaXMgZG9lcyBub3Qgc3RvcCBvbiByZW5kZXJTdXJmYWNlTGF5ZXJzLCBvbmx5
IGNoaWxkIGxheWVycyBvZiBSZW5kZXJTdXJmYWNlcy4KKyAgICBjbGFzcyBGcm9udFRvQmFjayB7
CisgICAgcHVibGljOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBiZWdpbihDQ0xheWVySXRlcmF0
b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgaXQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGl0Lm1fY3VycmVudFJlbmRlclN1cmZhY2VMYXllciA9IDA7CisgICAgICAg
ICAgICBpdC5tX2N1cnJlbnRDaGlsZExheWVyID0gaXQuY3VycmVudFJlbmRlclN1cmZhY2VDaGls
ZHJlbigpLnNpemUoKS0xOworICAgICAgICAgICAgZ29Ub0hpZ2hlc3RJblN1YnRyZWUoaXQpOwor
ICAgICAgICB9CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1l
IFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIGVuZChDQ0xheWVySXRlcmF0b3JQb3Np
dGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGl0Lm1fY3VycmVudFJlbmRlclN1cmZhY2VMYXllciA9IC0xOworICAgICAgICAgICAg
aXQubV9jdXJyZW50Q2hpbGRMYXllciA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CisgICAgICAg
IHZvaWQgbmV4dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlPiYgaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE1vdmVzIHRvIHRoZSBwcmV2
aW91cyBsYXllciBpbiB0aGUgY3VycmVudCBSUyBsYXllciBsaXN0LiBUaGVuIHdlIGNoZWNrIGlm
IHRoZQorICAgICAgICAgICAgLy8gbmV3IGN1cnJlbnQgbGF5ZXIgaGFzIGl0cyBvd24gUlMsIGlu
IHdoaWNoIGNhc2UgdGhlcmUgYXJlIHRoaW5ncyBpbiB0aGF0IFJTIGxheWVyIGxpc3QgdGhhdCBh
cmUgaGlnaGVyLCBzbworICAgICAgICAgICAgLy8gd2UgZmluZCB0aGUgaGlnaGVzdCBsYXllciBp
biB0aGF0IHN1YnRyZWUuCisgICAgICAgICAgICAvLyBJZiB3ZSBtb3ZlIGJhY2sgcGFzdCB0aGUg
ZnJvbnQgb2YgdGhlIGxpc3QsIHdlIGp1bXAgdXAgdG8gdGhlIHByZXZpb3VzIFJTIGxheWVyIGxp
c3QsIHBpY2tpbmcgdXAgYWdhaW4gd2hlcmUgd2UKKyAgICAgICAgICAgIC8vIGhhZCBwcmV2aW91
c2x5IHJlY3Vyc2VkIGludG8gdGhlIGN1cnJlbnQgUlMgbGF5ZXIgbGlzdC4KKworICAgICAgICAg
ICAgaWYgKGl0Lm1fY3VycmVudENoaWxkTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICAtLWl0Lm1f
Y3VycmVudENoaWxkTGF5ZXI7CisgICAgICAgICAgICAgICAgZ29Ub0hpZ2hlc3RJblN1YnRyZWUo
aXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIWl0Lm1f
Y3VycmVudENoaWxkTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgLS1pdC5tX2N1cnJlbnRS
ZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgICAgICAgICAgICAgICAgIGlmIChpdC5tX2N1cnJlbnRS
ZW5kZXJTdXJmYWNlTGF5ZXIgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpdC5tX2N1
cnJlbnRDaGlsZExheWVyID0gMDsgLy8gRW5kIG9mIHRoZSBsaXN0CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgaXQubV9jdXJyZW50Q2hpbGRMYXllciA9IG1fY2hpbGRMYXllckhpc3RvcnkubGFzdCgpOwor
ICAgICAgICAgICAgICAgICAgICBtX2NoaWxkTGF5ZXJIaXN0b3J5LnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1
cmZhY2VUeXBlPgorICAgICAgICB2b2lkIGdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBpdCkKKyAgICAgICAg
eworICAgICAgICAgICAgd2hpbGUgKGl0LmN1cnJlbnRMYXllckhhc1JlbmRlclN1cmZhY2UoKSkg
eworICAgICAgICAgICAgICAgICsraXQubV9jdXJyZW50UmVuZGVyU3VyZmFjZUxheWVyOworCisg
ICAgICAgICAgICAgICAgbV9jaGlsZExheWVySGlzdG9yeS5hcHBlbmQoaXQubV9jdXJyZW50Q2hp
bGRMYXllcik7CisgICAgICAgICAgICAgICAgaXQubV9jdXJyZW50Q2hpbGRMYXllciA9IGl0LmN1
cnJlbnRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCktMTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9jaGlsZExheWVySGlzdG9yeTsK
KyAgICB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDI3ZDk1NmE3YzdhZmJkMDk1ZGI5NDViOTM0YTE2
NmVmYTU1ZjM3NGYuLjdlNTdiZGI2Mzc5YWU3ZTIyNWUzZjc1MTgzNWFkNjMwMTE1MDY0OWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNp
bmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHku
aCIKQEAgLTM4MSwzMCArMzgyLDIyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tB
bmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTCiAKIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KQogewotICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRl
clN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZh
Y2VJbmRleCkgewotICAgICAgICBMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Ci0gICAgICAgIFJlbmRl
clN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVu
ZGVyU3VyZmFjZSgpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7Ci0gICAgICAgIEFT
U0VSVChyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsKLQotICAgICAgICByZW5kZXJTdXJm
YWNlTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0gICAgICAgIHBhaW50TWFza0FuZFJl
cGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllcik7Ci0KLSAgICAgICAgY29u
c3QgTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlz
dC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgewotICAgICAgICAgICAgTGF5ZXJDaHJvbWl1bSogbGF5
ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7Ci0KLSAgICAgICAgICAgIC8vIExheWVy
cyB0aGF0IHN0YXJ0IGEgbmV3IHJlbmRlciBzdXJmYWNlIHdpbGwgYmUgcGFpbnRlZCB3aGVuIHRo
ZSByZW5kZXIKLSAgICAgICAgICAgIC8vIHN1cmZhY2UncyBsaXN0IGlzIHByb2Nlc3NlZC4KLSAg
ICAgICAgICAgIGlmIChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmli
dXRlc1RvVGFyZ2V0PExheWVyQ2hyb21pdW0+KGxheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlk
KCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJh
dG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6RGVwZW5kZW5jeU9yZGVyZWQ+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisgICAgQ0NM
YXllckl0ZXJhdG9yVHlwZSBpdCwgZW5kOwogCi0gICAgICAgICAgICBsYXllci0+c2V0TGF5ZXJU
cmVlSG9zdCh0aGlzKTsKKyAgICBlbmQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjplbmQoJnJlbmRl
clN1cmZhY2VMYXllckxpc3QpOworICAgIGZvciAoaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpi
ZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBpZiAoaXQuaXNSZW5kZXJTdXJmYWNlTGF5ZXIoKSkgeworICAgICAgICAgICAgQVNTRVJUKGl0
LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkpOworICAgICAgICAgICAgaXQtPnNldExh
eWVyVHJlZUhvc3QodGhpcyk7CisgICAgICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVu
ZGVyU3VyZmFjZSgqaXQpOworICAgICAgICB9IGVsc2UgaWYgKGl0LmlzUGFpbnRpbmdMYXllcigp
KSB7CisgICAgICAgICAgICBpdC0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKIAotICAgICAgICAg
ICAgQVNTRVJUKGxheWVyLT5vcGFjaXR5KCkpOwotICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+
Ym91bmRzKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+b3BhY2l0eSgpKTsK
KyAgICAgICAgICAgIEFTU0VSVCghaXQtPmJvdW5kcygpLmlzRW1wdHkoKSk7CiAKLSAgICAgICAg
ICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICAgICAgaXQtPnBhaW50
Q29udGVudHNJZkRpcnR5KCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCAxZDAxZWQ4OGIyN2JlNmVlMDZjMmJlMDk0
OGRkYTVmYzY2MzhhODE4Li5jYjZiOTk5NTgyYTFhZjRhMzI1YmNiNjI5OTk2ZTdiOGFiNGFjYmU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5j
bHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5o
IgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZS5oIgogCkBAIC00NjQsMTYgKzQ2NSwxMyBA
QCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5h
bChMYXllclR5cGUqIGxheWVyLCBMYXllcgogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0
eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KIHN0YXRpYyB2b2lkIHdhbGtMYXllcnNBbmRDYWxj
dWxhdGVWaXNpYmxlTGF5ZXJSZWN0cyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1z
dXJmYWNlSW5kZXgpIHsKLSAgICAgICAgTGF5ZXJUeXBlKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Ci0gICAgICAgIFJlbmRl
clN1cmZhY2VUeXBlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJT
dXJmYWNlKCk7Ci0KLSAgICAgICAgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIGxheWVyTGlz
dCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxh
eWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4
KSB7Ci0gICAgICAgICAgICBMYXllclR5cGUqIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhd
LmdldCgpOwotICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0PExheWVyVHlwZT4obGF5ZXIp
OwotICAgICAgICAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxheWVyUmVj
dCk7Ci0gICAgICAgIH0KKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjaz4gQ0NM
YXllckl0ZXJhdG9yVHlwZTsKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGl0LCBlbmQ7CisKKyAg
ICBlbmQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjplbmQoJnJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OworICAgIGZvciAoaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbnRSZWN0IHZpc2libGVM
YXllclJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXllclJl
Y3Q8TGF5ZXJUeXBlPigqaXQpOworICAgICAgICBpdC0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNp
YmxlTGF5ZXJSZWN0KTsKICAgICB9CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119025</attachid>
            <date>2011-12-13 09:00:37 -0800</date>
            <delta_ts>2011-12-21 10:06:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74203-20111213120035.patch</filename>
            <type>text/plain</type>
            <size>24349</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWQ0M2MyMWZjM2UyMjRk
NTg5ZjdiYjRkYWIzNjJmYTNmYzc1ZWJhNS4uNTRhMTljMDYwMmM5OTA2YzIxZjVhOTJkYWUzYjg1
YWJiMWVkNjRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDExLTEyLTEzICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6Q0NMYXll
ckl0ZXJhdG9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9z
aXRpb246OmN1cnJlbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQ
b3NpdGlvbjo6Y3VycmVudFJlbmRlclN1cmZhY2VMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVySXRlcmF0b3JQb3NpdGlvbjo6Y3VycmVudFJlbmRlclN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OmN1cnJlbnRSZW5kZXJTdXJmYWNlQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OmN1cnJl
bnRMYXllckhhc1JlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJh
dG9yUG9zaXRpb246OmN1cnJlbnRMYXllcklzUmVuZGVyU3VyZmFjZUxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6Q0NMYXllckl0ZXJhdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckl0ZXJhdG9yOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVy
YXRvcisrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvcjo6aXNSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckl0ZXJhdG9yOjppc1BhaW50aW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckl0ZXJhdG9yQWN0aW9uczo6RGVwZW5kZW5jeU9yZGVyZWQ6OmJlZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkRlcGVuZGVuY3lPcmRlcmVkOjplbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RGVwZW5kZW5jeU9yZGVy
ZWQ6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFj
a1RvRnJvbnQ6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlv
bnM6OkJhY2tUb0Zyb250OjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0
ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6Om5leHQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmdvVG9IaWdoZXN0
SW5TdWJ0cmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWlu
dExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2Fs
a0xheWVyc0FuZENhbGN1bGF0ZVZpc2libGVMYXllclJlY3RzKToKKwogMjAxMS0xMi0xMyAgVG9y
IEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAgICAgICAgW1F0
XSBHZXQgcmlkIG9mIGxheWVyaW5nIHZpb2xhdGlvbnMgaW4gaW5jbHVkZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCAzNzc3ZTBiNGVmMWZlYzI3YjA5ZDQ4ODEyNTUwNDU5MDNmODBhZTgyLi4zZjlkNTZm
OTkxYTliY2U0MTVlYTJhYTg4NTRiMGIwOGQzOGM1OWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0z
NjA1LDYgKzM2MDUsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSW5wdXRIYW5kbGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclF1YWQuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTNlMzM1MDE5M2U0NTA1MWZiN2Vl
NDk5MzE1Mjg4YmZhZjk4MWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmgKQEAgLTAsMCArMSwy
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllckl0ZXJhdG9yX2gKKyNkZWZpbmUg
Q0NMYXllckl0ZXJhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhlc2UgY2xhc3NlcyBw
cm92aWRlIG1lYW5zIHRvIGl0ZXJhdGUgb3ZlciB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVl
LgorLy8gVGhlIGl0ZXJhdG9yJ3MgY3VycmVudCBwb3NpdGlvbiBpcyBhbHdheXMgYSBjaGlsZCBs
YXllciBvZiBhIFJlbmRlclN1cmZhY2UsIG9yIGFuIG93bmluZyBsYXllciBvZiBhIFJlbmRlclN1
cmZhY2UuIFdoaWxlIGEgbGF5ZXIgY2FuIGJlIGJvdGgsIHNvbWUgaXRlcmF0b3JzIHdpbGwgcmV0
dXJuIGl0IG9uY2UKKy8vIGluIGVhY2ggb2YgdGhlc2Ugc3RhdGVzIHRoYXQgaXQgZnVsZmlsbHMu
IEEgbGF5ZXIgdGhhdCBvd25zIGEgUmVuZGVyU3VyZmFjZSBpcyByZWZlcnJlZCB0byBhcyBhIHJl
bmRlclN1cmZhY2VMYXllci4gVGhpcyBsYXllciBtYXkgYWxzbyBiZSBhIGNoaWxkIG9mIGEgUmVu
ZGVyU3VyZmFjZSwKKy8vIGFuZCBtYXkgaW4gYWRkaXRpb24gYmUgYSBjaGlsZCBvZiB0aGUgUmVu
ZGVyU3VyZmFjZSBpdCBvd25zIGF0IHRoZSBzYW1lIHRpbWUuCisKKy8vIFRoZSBjdXJyZW50IHBv
c2l0aW9uIG9mIHRoZSBpdGVyYXRvciBpcyBoZWxkIGluIHR3byBpbnRlZ2VyIHZhcmlhYmxlcy4K
Ky8vIC0gVGhlIG1fY3VycmVudFJlbmRlclN1cmZhY2VMYXllciBpcyBhIHBvc2l0aW9uIGluIHRo
ZSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCB3aGljaCByZWZlcmVuY2VzIHRoZSBjdXJyZW50IHJl
bmRlclN1cmZhY2VMYXllciAobGF5ZXIgb3duaW5nIGEgUmVuZGVyU3VyZmFjZSkuIFRoaXMgaXMg
YSB2YWx1ZQorLy8gZnJvbSAwIHRvIG4tMSAobiA9IG51bWJlciBvZiByZW5kZXJTdXJmYWNlTGF5
ZXJzKS4KKy8vIC0gVGhlIGN1cnJlbnRSZW5kZXJTdXJmYWNlIG93bnMgYSBSZW5kZXJTdXJmYWNl
LCB3aGljaCBpbiB0dXJuIGhhcyBhIGxpc3Qgb2YgY2hpbGQgbGF5ZXJzLiBUaGUgbV9jdXJyZW50
Q2hpbGRMYXllciBpcyBhIHBvc2l0aW9uIGluIHRoaXMgY2hpbGQgbGlzdC4gQnV0IGNhbiBhbHNv
IGJlIC0xIHRvCisvLyBpbmRpY2F0ZSB0aGUgbGF5ZXIgd2hpY2ggb3ducyB0aGUgUmVuZGVyU3Vy
ZmFjZSByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIFJlbmRlclN1cmZhY2UncyBjaGlsZCBsYXllcnMg
KHNlZSBiZWxvdykuCisvLworLy8gVGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIGl0ZXJhdG9y
IGlzIHRha2VuIGJ5IGNvbWJpbmluZyB0aGUgdHdvIGFib3ZlIHZhbHVlcyB0byBmaW5kIGEgc3Bl
Y2lmaWMgY2hpbGQgbGF5ZXIgb2YgYSBzcGVjaWZpYyBSZW5kZXJTdXJmYWNlLiBIb3dldmVyLCBp
dCBpcyBhbHNvIHRvIGxhbmQgb24KKy8vIHRoZSBsYXllcnMgd2hvIG93biBSZW5kZXJTdXJmYWNl
cyAodGhlIHJlbmRlclN1cmZhY2VMYXllcnMpLiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLCBpbiB3
aGljaCB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhIHJlbmRlclN1cmZhY2VMYXllciwgYW5kIGlz
IG5vdCByZWxhdGl2ZSB0byBhbnkKKy8vIGxpc3Qgb2YgY2hpbGQgbGF5ZXJzIGZvciBhbnkgUmVu
ZGVyU3VyZmFjZSwgc28gdGhlIG1fY3VycmVudENoaWxkTGF5ZXIgaXMgZ2l2ZW4gYW4gb3V0LW9m
LWJvdW5kcyB2YWx1ZSBvZiAtMSB0byBpbmRpY2F0ZSB0aGlzIHN0YXRlLgorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorc3RydWN0IEND
TGF5ZXJJdGVyYXRvclBvc2l0aW9uIHsKKyAgICBleHBsaWNpdCBDQ0xheWVySXRlcmF0b3JQb3Np
dGlvbihjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCkgOiBtX3JlbmRlclN1cmZhY2VMYXllckxpc3QocmVuZGVyU3VyZmFjZUxheWVyTGlzdCkg
eyB9CisKKyAgICBpbmxpbmUgTGF5ZXJUeXBlKiBjdXJyZW50TGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX2N1cnJlbnRDaGlsZExheWVyID09ICh1bnNpZ25lZCktMSA/IGN1cnJlbnRSZW5kZXJTdXJm
YWNlTGF5ZXIoKSA6IGN1cnJlbnRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKVttX2N1cnJlbnRDaGls
ZExheWVyXS5nZXQoKTsgfQorICAgIGlubGluZSBMYXllclR5cGUqIGN1cnJlbnRSZW5kZXJTdXJm
YWNlTGF5ZXIoKSBjb25zdCB7IHJldHVybiAoKm1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdClbbV9j
dXJyZW50UmVuZGVyU3VyZmFjZUxheWVyXS5nZXQoKTsgfQorICAgIGlubGluZSBSZW5kZXJTdXJm
YWNlVHlwZSogY3VycmVudFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50UmVu
ZGVyU3VyZmFjZUxheWVyKCktPnJlbmRlclN1cmZhY2UoKTsgfQorICAgIGlubGluZSBjb25zdCBW
ZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYgY3VycmVudFJlbmRlclN1cmZhY2VDaGlsZHJlbigp
IGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRSZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpOyB9CisK
KyAgICBpbmxpbmUgYm9vbCBjdXJyZW50TGF5ZXJIYXNSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyBy
ZXR1cm4gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1Rh
cmdldDxMYXllclR5cGU+KGN1cnJlbnRMYXllcigpLCBjdXJyZW50UmVuZGVyU3VyZmFjZUxheWVy
KCktPmlkKCkpOyB9CisgICAgaW5saW5lIGJvb2wgY3VycmVudExheWVySXNSZW5kZXJTdXJmYWNl
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRDaGlsZExheWVyID09ICh1bnNpZ25lZCkt
MTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9u
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRSZW5kZXJTdXJm
YWNlTGF5ZXIgPT0gb3RoZXIubV9jdXJyZW50UmVuZGVyU3VyZmFjZUxheWVyCisgICAgICAgICAg
ICAmJiBtX2N1cnJlbnRDaGlsZExheWVyID09IG90aGVyLm1fY3VycmVudENoaWxkTGF5ZXI7Cisg
ICAgfQorCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIG1fcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKKyAgICBpbnQgbV9jdXJyZW50UmVuZGVyU3VyZmFjZUxheWVyOworICAg
IHVuc2lnbmVkIG1fY3VycmVudENoaWxkTGF5ZXI7Cit9OworCisvLyBBbiBpdGVyYXRvciBjbGFz
cyBmb3Igd2Fsa2luZyBvdmVyIGxheWVycyBpbiB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVl
LgorLy8gVXNlIHRoZSBiZWdpbigpIGFuZCBlbmQoKSBmdW5jdGlvbnMgdG8gZ2V0IGFuIGl0ZXJh
dG9yIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gbGlzdCBvZiByZW5kZXJTdXJmYWNlTGF5ZXJzLgordGVt
cGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5
cGVuYW1lIEl0ZXJhdG9yQWN0aW9uVHlwZT4KK2NsYXNzIENDTGF5ZXJJdGVyYXRvciB7CisgICAg
dHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgSXRl
cmF0b3JBY3Rpb25UeXBlPiBDQ0xheWVySXRlcmF0b3JUeXBlOworCitwdWJsaWM6CisgICAgQ0NM
YXllckl0ZXJhdG9yKCkgOiBtX3Bvc2l0aW9uKDApLCBtX2FjdGlvbnMoMCkgeyB9CisKKyAgICBz
dGF0aWMgQ0NMYXllckl0ZXJhdG9yVHlwZSBiZWdpbihjb25zdCBWZWN0b3I8UmVmUHRyPExheWVy
VHlwZT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkgeyByZXR1cm4gQ0NMYXllckl0ZXJhdG9y
VHlwZShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCB0cnVlKTsgfQorICAgIHN0YXRpYyBDQ0xheWVy
SXRlcmF0b3JUeXBlIGVuZChjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCkgeyByZXR1cm4gQ0NMYXllckl0ZXJhdG9yVHlwZShyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBmYWxzZSk7IH0KKworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUmIG9wZXJh
dG9yKysoKSB7IG1fYWN0aW9ucy0+bmV4dChtX3Bvc2l0aW9uKTsgcmV0dXJuICp0aGlzOyB9Cisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENDTGF5ZXJJdGVyYXRvclR5cGUmIG90aGVyKSBjb25z
dCB7IHJldHVybiBtX3Bvc2l0aW9uID09IG90aGVyLm1fcG9zaXRpb247IH0KKyAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOyB9CisKKyAgICBMYXllclR5cGUqIG9wZXJhdG9yLT4oKSB7IHJl
dHVybiBtX3Bvc2l0aW9uLmN1cnJlbnRMYXllcigpOyB9CisgICAgTGF5ZXJUeXBlKiBvcGVyYXRv
ciooKSB7IHJldHVybiBtX3Bvc2l0aW9uLmN1cnJlbnRMYXllcigpOyB9CisKKyAgICAvLyBUcnVl
IGZvciBsYXllcnMgdGhhdCBhcmUgaG9zdGluZyBhIFJlbmRlclN1cmZhY2UuCisgICAgYm9vbCBp
c1JlbmRlclN1cmZhY2VMYXllcigpIHsgcmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVySXNS
ZW5kZXJTdXJmYWNlTGF5ZXIoKTsgfQorICAgIC8vIFRydWUgZm9yIGxheWVycyB0aGF0IGFyZSBj
aGlsZHJlbiBvZiBhIFJlbmRlclN1cmZhY2UgYW5kIGFyZSBub3QgaG9zdGluZyBhIGRpZmZlcmVu
dCBSZW5kZXJTdXJmYWNlLgorICAgIGJvb2wgaXNQYWludGluZ0xheWVyKCkgeyByZXR1cm4gIWlz
UmVuZGVyU3VyZmFjZUxheWVyKCkgJiYgIW1fcG9zaXRpb24uY3VycmVudExheWVySGFzUmVuZGVy
U3VyZmFjZSgpOyB9CisKK3ByaXZhdGU6CisgICAgQ0NMYXllckl0ZXJhdG9yKGNvbnN0IFZlY3Rv
cjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBib29sIHN0YXJ0
KQorICAgICAgICA6IG1fcG9zaXRpb24ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKKyAgICAgICAg
LCBtX2FjdGlvbnMobmV3IEl0ZXJhdG9yQWN0aW9uVHlwZSgpKQorICAgIHsKKyAgICAgICAgaWYg
KHN0YXJ0ICYmICFyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LT5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBtX2FjdGlvbnMtPmJlZ2luKG1fcG9zaXRpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2FjdGlvbnMtPmVuZChtX3Bvc2l0aW9uKTsKKyAgICB9CisKKyAgICBDQ0xheWVySXRlcmF0
b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiBtX3Bvc2l0aW9uOworICAg
IEl0ZXJhdG9yQWN0aW9uVHlwZSogbV9hY3Rpb25zOworCisgICAgZnJpZW5kIGNsYXNzIENDTGF5
ZXJJdGVyYXRvckFjdGlvbnM7Cit9OworCisvLyBPcmRlcmluZ3MgZm9yIGl0ZXJhdGluZyBvdmVy
IHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUuCitzdHJ1Y3QgQ0NMYXllckl0ZXJhdG9yQWN0
aW9ucyB7CisgICAgLy8gSWYgUmVuZGVyU3VyZmFjZSBCIHBhaW50cyBpbnRvIFJlbmRlclN1cmZh
Y2UgQSwgdGhpcyBpdGVyYXRvciBjbGFzcyB2aXNpdHMgbGF5ZXJzIGluIEIgYmVmb3JlIHZpc2l0
aW5nIGxheWVycyBpbiBBLgorICAgIGNsYXNzIERlcGVuZGVuY3lPcmRlcmVkIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRl
clN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIGJlZ2luKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9u
PExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBpdCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaXQubV9jdXJyZW50UmVuZGVyU3VyZmFjZUxheWVyID0gaXQubV9yZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LT5zaXplKCkgLSAxOworICAgICAgICAgICAgaXQubV9jdXJyZW50Q2hpbGRMYXllciA9
ICh1bnNpZ25lZCktMTsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5
ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBlbmQoQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIGl0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpdC5tX2N1cnJlbnRSZW5kZXJTdXJmYWNlTGF5ZXIgPSAt
MTsKKyAgICAgICAgICAgIGl0Lm1fY3VycmVudENoaWxkTGF5ZXIgPSAodW5zaWduZWQpLTE7Cisg
ICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUg
UmVuZGVyU3VyZmFjZVR5cGU+CisgICAgICAgIHZvaWQgbmV4dChDQ0xheWVySXRlcmF0b3JQb3Np
dGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgICsraXQubV9jdXJyZW50Q2hpbGRMYXllcjsKKyAgICAgICAgICAgIGlmIChpdC5tX2N1
cnJlbnRDaGlsZExheWVyID09IGl0LmN1cnJlbnRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXpl
KCkpIHsKKyAgICAgICAgICAgICAgICAtLWl0Lm1fY3VycmVudFJlbmRlclN1cmZhY2VMYXllcjsK
KyAgICAgICAgICAgICAgICBpdC5tX2N1cnJlbnRDaGlsZExheWVyID0gLTE7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gV2Fsa3MgbGF5ZXJzIHNvcnRlZCBieSB6
LW9yZGVyIGZyb20gYmFjayB0byBmcm9udC4KKyAgICBjbGFzcyBCYWNrVG9Gcm9udCB7CisgICAg
cHVibGljOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBS
ZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBiZWdpbihDQ0xheWVySXRlcmF0b3JQb3Np
dGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGl0Lm1fY3VycmVudFJlbmRlclN1cmZhY2VMYXllciA9IDA7CisgICAgICAgICAgICBp
dC5tX2N1cnJlbnRDaGlsZExheWVyID0gMDsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAg
dm9pZCBlbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNl
VHlwZT4mIGl0KQorICAgICAgICB7CisgICAgICAgICAgICBpdC5tX2N1cnJlbnRSZW5kZXJTdXJm
YWNlTGF5ZXIgPSAtMTsKKyAgICAgICAgICAgIGl0Lm1fY3VycmVudENoaWxkTGF5ZXIgPSAwOwor
ICAgICAgICB9CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1l
IFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIG5leHQoQ0NMYXllckl0ZXJhdG9yUG9z
aXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIGl0KQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBsYXllciBoYXMgYSBSUywgbW92ZSB0byBpdHMgbGF5
ZXIgbGlzdC4gT3RoZXJ3aXNlLCB2aXNpdCB0aGUgbmV4dCBsYXllciBpbiB0aGUgY3VycmVudCBS
UyBsYXllciBsaXN0LgorICAgICAgICAgICAgaWYgKGl0LmN1cnJlbnRMYXllckhhc1JlbmRlclN1
cmZhY2UoKSkgeworICAgICAgICAgICAgICAgIC8vIFNhdmUgb3VyIHBvc2l0aW9uIGluIHRoZSBj
aGlsZExheWVyIGxpc3QgZm9yIHRoZSBSZW5kZXJTdXJmYWNlLCB0aGVuIGp1bXAgdG8gdGhlIG5l
eHQgUmVuZGVyU3VyZmFjZS4KKyAgICAgICAgICAgICAgICBtX3JlbmRlclN1cmZhY2VMYXllckhp
c3RvcnkuYXBwZW5kKGl0Lm1fY3VycmVudFJlbmRlclN1cmZhY2VMYXllcik7CisgICAgICAgICAg
ICAgICAgbV9jaGlsZExheWVySGlzdG9yeS5hcHBlbmQoaXQubV9jdXJyZW50Q2hpbGRMYXllcik7
CisKKyAgICAgICAgICAgICAgICBmb3IgKExheWVyVHlwZSogbGF5ZXIgPSBpdC5jdXJyZW50TGF5
ZXIoKTsgaXQuY3VycmVudFJlbmRlclN1cmZhY2VMYXllcigpICE9IGxheWVyOyArK2l0Lm1fY3Vy
cmVudFJlbmRlclN1cmZhY2VMYXllcikgeyB9CisgICAgICAgICAgICAgICAgaXQubV9jdXJyZW50
Q2hpbGRMYXllciA9IC0xOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAr
K2l0Lm1fY3VycmVudENoaWxkTGF5ZXI7CisgICAgICAgICAgICAgICAgd2hpbGUgKGl0Lm1fY3Vy
cmVudENoaWxkTGF5ZXIgPT0gaXQuY3VycmVudFJlbmRlclN1cmZhY2VDaGlsZHJlbigpLnNpemUo
KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBKdW1wIGJhY2sgdG8gdGhlIHByZXZpb3VzIFJl
bmRlclN1cmZhY2UsIGFuZCBnZXQgYmFjayB0aGUgcG9zaXRpb24gd2hlcmUgd2Ugd2VyZSBpbiB0
aGF0IGxpc3QsIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHBvc2l0aW9uIHRoZXJlLgorICAgICAgICAg
ICAgICAgICAgICBpZiAoIWl0Lm1fY3VycmVudFJlbmRlclN1cmZhY2VMYXllcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRW5kIG9mIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgICAg
ICAgICBpdC5tX2N1cnJlbnRSZW5kZXJTdXJmYWNlTGF5ZXIgPSAtMTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGl0Lm1fY3VycmVudENoaWxkTGF5ZXIgPSAwOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGl0Lm1fY3VycmVudFJlbmRlclN1cmZhY2VMYXllciA9IG1fcmVuZGVyU3VyZmFjZUxheWVySGlz
dG9yeS5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVySGlz
dG9yeS5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIGl0Lm1fY3VycmVudENoaWxk
TGF5ZXIgPSBtX2NoaWxkTGF5ZXJIaXN0b3J5Lmxhc3QoKSArIDE7CisgICAgICAgICAgICAgICAg
ICAgIG1fY2hpbGRMYXllckhpc3RvcnkucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIFZlY3Rvcjx1
bnNpZ25lZD4gbV9yZW5kZXJTdXJmYWNlTGF5ZXJIaXN0b3J5OworICAgICAgICBWZWN0b3I8dW5z
aWduZWQ+IG1fY2hpbGRMYXllckhpc3Rvcnk7CisgICAgfTsKKworICAgIC8vIFdhbGtzIGxheWVy
cyBzb3J0ZWQgYnkgei1vcmRlciBmcm9tIGJhY2sgdG8gZnJvbnQuCisgICAgY2xhc3MgRnJvbnRU
b0JhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlw
ZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CisgICAgICAgIHZvaWQgYmVnaW4oQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIGl0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpdC5tX2N1cnJlbnRSZW5kZXJTdXJmYWNlTGF5ZXIgPSAwOwor
ICAgICAgICAgICAgaXQubV9jdXJyZW50Q2hpbGRMYXllciA9IGl0LmN1cnJlbnRSZW5kZXJTdXJm
YWNlQ2hpbGRyZW4oKS5zaXplKCktMTsKKyAgICAgICAgICAgIGdvVG9IaWdoZXN0SW5TdWJ0cmVl
KGl0KTsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0
eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBlbmQoQ0NMYXllckl0ZXJh
dG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIGl0KQorICAgICAgICB7
CisgICAgICAgICAgICBpdC5tX2N1cnJlbnRSZW5kZXJTdXJmYWNlTGF5ZXIgPSAtMTsKKyAgICAg
ICAgICAgIGl0Lm1fY3VycmVudENoaWxkTGF5ZXIgPSAwOworICAgICAgICB9CisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgor
ICAgICAgICB2b2lkIG5leHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5k
ZXJTdXJmYWNlVHlwZT4mIGl0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBNb3ZlcyB0byB0
aGUgcHJldmlvdXMgbGF5ZXIgaW4gdGhlIGN1cnJlbnQgUlMgbGF5ZXIgbGlzdC4gVGhlbiB3ZSBj
aGVjayBpZiB0aGUKKyAgICAgICAgICAgIC8vIG5ldyBjdXJyZW50IGxheWVyIGhhcyBpdHMgb3du
IFJTLCBpbiB3aGljaCBjYXNlIHRoZXJlIGFyZSB0aGluZ3MgaW4gdGhhdCBSUyBsYXllciBsaXN0
IHRoYXQgYXJlIGhpZ2hlciwgc28KKyAgICAgICAgICAgIC8vIHdlIGZpbmQgdGhlIGhpZ2hlc3Qg
bGF5ZXIgaW4gdGhhdCBzdWJ0cmVlLgorICAgICAgICAgICAgLy8gSWYgd2UgbW92ZSBiYWNrIHBh
c3QgdGhlIGZyb250IG9mIHRoZSBsaXN0LCB3ZSBqdW1wIHVwIHRvIHRoZSBwcmV2aW91cyBSUyBs
YXllciBsaXN0LCBwaWNraW5nIHVwIGFnYWluIHdoZXJlIHdlCisgICAgICAgICAgICAvLyBoYWQg
cHJldmlvdXNseSByZWN1cnNlZCBpbnRvIHRoZSBjdXJyZW50IFJTIGxheWVyIGxpc3QuCisKKyAg
ICAgICAgICAgIGlmIChpdC5tX2N1cnJlbnRDaGlsZExheWVyICE9ICh1bnNpZ25lZCktMSkgewor
ICAgICAgICAgICAgICAgIC0taXQubV9jdXJyZW50Q2hpbGRMYXllcjsKKyAgICAgICAgICAgICAg
ICBnb1RvSGlnaGVzdEluU3VidHJlZShpdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHdoaWxlIChpdC5tX2N1cnJlbnRDaGlsZExheWVyID09ICh1bnNpZ25lZCktMSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWl0Lm1fY3VycmVudFJlbmRlclN1cmZhY2VMYXll
cikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kIG9mIHRoZSBsaXN0CisgICAgICAg
ICAgICAgICAgICAgICAgICBpdC5tX2N1cnJlbnRSZW5kZXJTdXJmYWNlTGF5ZXIgPSAtMTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGl0Lm1fY3VycmVudENoaWxkTGF5ZXIgPSAwOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGl0Lm1fY3VycmVudFJlbmRlclN1cmZhY2VMYXllciA9IG1fcmVuZGVyU3Vy
ZmFjZUxheWVySGlzdG9yeS5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIG1fcmVuZGVyU3Vy
ZmFjZUxheWVySGlzdG9yeS5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIGl0Lm1f
Y3VycmVudENoaWxkTGF5ZXIgPSBtX2NoaWxkTGF5ZXJIaXN0b3J5Lmxhc3QoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9jaGlsZExheWVySGlzdG9yeS5yZW1vdmVMYXN0KCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlw
ZT4KKyAgICAgICAgdm9pZCBnb1RvSGlnaGVzdEluU3VidHJlZShDQ0xheWVySXRlcmF0b3JQb3Np
dGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChpdC5tX2N1cnJlbnRDaGlsZExheWVyID09ICh1bnNpZ25lZCktMSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB3aGlsZSAoaXQuY3VycmVudExheWVySGFz
UmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgICAgICAgICAgbV9yZW5kZXJTdXJmYWNlTGF5ZXJI
aXN0b3J5LmFwcGVuZChpdC5tX2N1cnJlbnRSZW5kZXJTdXJmYWNlTGF5ZXIpOworICAgICAgICAg
ICAgICAgIG1fY2hpbGRMYXllckhpc3RvcnkuYXBwZW5kKGl0Lm1fY3VycmVudENoaWxkTGF5ZXIp
OworCisgICAgICAgICAgICAgICAgZm9yIChMYXllclR5cGUqIGxheWVyID0gaXQuY3VycmVudExh
eWVyKCk7IGl0LmN1cnJlbnRSZW5kZXJTdXJmYWNlTGF5ZXIoKSAhPSBsYXllcjsgKytpdC5tX2N1
cnJlbnRSZW5kZXJTdXJmYWNlTGF5ZXIpIHsgfQorICAgICAgICAgICAgICAgIGl0Lm1fY3VycmVu
dENoaWxkTGF5ZXIgPSBpdC5jdXJyZW50UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6ZSgpLTE7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1f
cmVuZGVyU3VyZmFjZUxheWVySGlzdG9yeTsKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2No
aWxkTGF5ZXJIaXN0b3J5OworICAgIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMjdkOTU2YTdjN2Fm
YmQwOTVkYjk0NWI5MzRhMTY2ZWZhNTVmMzc0Zi4uNTAyMDBlNjcwYTFkOGI0NTE5NWZlMWI1NWQ1
ZTk4MzM1YjI2NGRiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
VHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5oIgpAQCAtMzgxLDYxICszODIsNDUgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0q
IHJlbmRlclMKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25z
dCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7Ci0gICAgZm9yIChpbnQgc3Vy
ZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5k
ZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIExheWVyQ2hyb21pdW0qIHJlbmRl
clN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQo
KTsKLSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gcmVuZGVy
U3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJTdXJm
YWNlKTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpOworICAg
IHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJv
bWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRv
clR5cGU7CiAKLSAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRo
aXMpOwotICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShyZW5kZXJT
dXJmYWNlTGF5ZXIpOworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJh
dG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBmb3IgKENDTGF5ZXJJ
dGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQuaXNSZW5kZXJT
dXJmYWNlTGF5ZXIoKSkgeworICAgICAgICAgICAgQVNTRVJUKGl0LT5yZW5kZXJTdXJmYWNlKCkt
PmRyYXdPcGFjaXR5KCkpOworICAgICAgICAgICAgaXQtPnNldExheWVyVHJlZUhvc3QodGhpcyk7
CisgICAgICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSgqaXQpOwor
ICAgICAgICB9IGVsc2UgaWYgKGl0LmlzUGFpbnRpbmdMYXllcigpKSB7CisgICAgICAgICAgICBp
dC0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKIAotICAgICAgICBjb25zdCBMYXllckxpc3QmIGxh
eWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXll
ckluZGV4KSB7Ci0gICAgICAgICAgICBMYXllckNocm9taXVtKiBsYXllciA9IGxheWVyTGlzdFts
YXllckluZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+b3BhY2l0eSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghaXQtPmJvdW5kcygpLmlzRW1wdHkoKSk7CiAKLSAgICAgICAgICAg
IC8vIExheWVycyB0aGF0IHN0YXJ0IGEgbmV3IHJlbmRlciBzdXJmYWNlIHdpbGwgYmUgcGFpbnRl
ZCB3aGVuIHRoZSByZW5kZXIKLSAgICAgICAgICAgIC8vIHN1cmZhY2UncyBsaXN0IGlzIHByb2Nl
c3NlZC4KLSAgICAgICAgICAgIGlmIChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZh
Y2VDb250cmlidXRlc1RvVGFyZ2V0PExheWVyQ2hyb21pdW0+KGxheWVyLCByZW5kZXJTdXJmYWNl
TGF5ZXItPmlkKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBs
YXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKLQotICAgICAgICAgICAgQVNTRVJUKGxheWVy
LT5vcGFjaXR5KCkpOwotICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+Ym91bmRzKCkuaXNFbXB0
eSgpKTsKLQotICAgICAgICAgICAgbGF5ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAg
ICAgICAgICBpdC0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKICAgICAgICAgfQogICAgIH0KIH0K
IAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIpCiB7Ci0gICAg
Zm9yIChpbnQgc3VyZmFjZUluZGV4ID0gbV91cGRhdGVMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJ
bmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVu
ZGVyU3VyZmFjZUxheWVyID0gbV91cGRhdGVMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VM
YXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7Ci0g
ICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsKKyAgICB0eXBlZGVm
IENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkRlcGVuZGVuY3lPcmRlcmVkPiBDQ0xheWVySXRlcmF0b3JU
eXBlOwogCi0gICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKQotICAg
ICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhjb250ZXh0LCB1cGRhdGVyKTsKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVu
ZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmbV91cGRhdGVMaXN0KTsKKyAgICBmb3IgKEND
TGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmbV91cGRh
dGVMaXN0KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC5pc1JlbmRlclN1cmZh
Y2VMYXllcigpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnJlbmRlclN1cmZhY2UoKS0+ZHJh
d09wYWNpdHkoKSk7CiAKLSAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxh
eWVyKCkpIHsKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxheWVyKCkt
PnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpLT5t
YXNrTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FM
YXllcigpLT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0LCB1
cGRhdGVyKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBs
YXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5
ZXJJbmRleCkgewotICAgICAgICAgICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBsYXllckxpc3Rb
bGF5ZXJJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoaXQtPm1hc2tMYXllcigpKQorICAg
ICAgICAgICAgICAgIGl0LT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhj
b250ZXh0LCB1cGRhdGVyKTsKIAotICAgICAgICAgICAgaWYgKENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJDaHJvbWl1bT4obGF5ZXIs
IHJlbmRlclN1cmZhY2VMYXllci0+aWQoKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBpZiAoaXQtPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICAgICAgaXQt
PnJlcGxpY2FMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0
ZXIpOwogCi0gICAgICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250
ZXh0LCB1cGRhdGVyKTsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpdC0+cmVwbGlj
YUxheWVyKCktPm1hc2tMYXllcigpKQorICAgICAgICAgICAgICAgICAgICBpdC0+cmVwbGljYUxh
eWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVw
ZGF0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGl0LmlzUGFpbnRpbmdM
YXllcigpKQorICAgICAgICAgICAgaXQtPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4
dCwgdXBkYXRlcik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Q29tbW9uLmNwcAppbmRleCA1NjUwOWJjZWMzYzYxZTJkZmUxNjY0YWI0MTY1ZjQyOTM3MzkzZTFi
Li4yZWY4ZjUzNWEzZWZmMzczYzVjNzUzMTQwNWU0NTQxMzIyOGQ1NTBhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXll
ckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2luY2x1ZGUgImNj
L0NDUmVuZGVyU3VyZmFjZS5oIgogCkBAIC00NzEsMTUgKzQ3MiwxMyBAQCBzdGF0aWMgYm9vbCBj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxh
eWVyLCBMYXllcgogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJT
dXJmYWNlVHlwZT4KIHN0YXRpYyB2b2lkIHdhbGtMYXllcnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5
ZXJSZWN0cyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCkKIHsKLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsK
LSAgICAgICAgTGF5ZXJUeXBlKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VUeXBlKiBy
ZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0KLSAg
ICAgICAgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIGxheWVyTGlzdCA9IHJlbmRlclN1cmZh
Y2UtPmxheWVyTGlzdCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBs
YXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7Ci0gICAgICAgICAg
ICBMYXllclR5cGUqIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwotICAgICAg
ICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0PExheWVyVHlwZT4obGF5ZXIpOwotICAgICAgICAgICAg
bGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxheWVyUmVjdCk7CisgICAgdHlwZWRl
ZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQ0NMYXllckl0
ZXJhdG9yQWN0aW9uczo6RGVwZW5kZW5jeU9yZGVyZWQ+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisK
KyAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgm
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0
ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LmlzUGFpbnRpbmdMYXllcigpKSB7Cisg
ICAgICAgICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3Q8TGF5ZXJUeXBlPigqaXQpOworICAgICAgICAg
ICAgaXQtPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxheWVyUmVjdCk7CiAgICAgICAgIH0K
ICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120188</attachid>
            <date>2011-12-21 10:07:04 -0800</date>
            <delta_ts>2011-12-21 12:00:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74203-20111221130703.patch</filename>
            <type>text/plain</type>
            <size>27823</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdhNDNkZDFhZmRiNDll
MGI4ZDlmNjQ0ZTBiMjRjODY3MTE4ZjZhNy4uZWRlMzA3MzQ5ZWQzMTUzZDk4NGMxZWVjY2FhNDRk
ZGY1ZTE1OGU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDExLTEyLTIxICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdGVyYXRvcnMgY29tZSB3aXRo
IHRocmVlIG9yZGVyaW5ncy4gRGVwZW5kZW5jeU9yZGVyZWQgKHRoaXMgaXMgYSBzaW1wbGUgbGlu
ZWFyIHdhbGsgb3ZlciB0aGUgdHJlZSkgYW5kIGlzIG5vdAorICAgICAgICB6LW9yZGVyZWQuIEZy
b250VG9CYWNrIGFuZCBCYWNrVG9Gcm9udCB3YWxrIGxheWVycyBpbiBhIHN0cmljdCB6LW9yZGVy
aW5nLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6Y3VycmVudExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjpyZXByZXNlbnRzQ29u
dHJpYnV0aW5nUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0
b3JQb3NpdGlvbjo6cmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OnRhcmdldFJlbmRlclN1cmZhY2VMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6dGFyZ2V0UmVuZGVy
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6dGFy
Z2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvcjo6Q0NMYXllckl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRv
cjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjplbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVySXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0
ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6
b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6cmVwcmVzZW50
c1RhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9y
OjpyZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySXRlcmF0b3I6OnJlcHJlc2VudHNJdHNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yOjp0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RGVwZW5kZW5jeU9yZGVyZWQ6OmJlZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkRlcGVuZGVuY3lPcmRl
cmVkOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RGVw
ZW5kZW5jeU9yZGVyZWQ6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
dGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6Om5leHQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6
OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6d2Fsa0xheWVyc0FuZENhbGN1bGF0ZVZpc2libGVMYXllclJlY3RzKToKKwogMjAx
MS0xMi0yMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIHNpemVv
ZihSZW5kZXJTdHlsZSkgaXMgNjQgaW5zdGVhZCBvZiA1NiBvbiBXaW5kb3dzICh4ODYpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggODU2OTg3MDEwM2E3OGQzMjNmMmIyOGFjMTY3ZTI1YWY2MTk4YTU0MS4u
OGFhYTlhOGU1NTIzYzYxYjNjZmI3YzljMjdmZDZlNmZhY2YwNzYyZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMzYyMyw2ICszNjIzLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI2NmU2MmRiNGZjODU4
MTliNjUyNmJmOTM3ZWExOTYzMDJkYTA0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oCkBAIC0w
LDAgKzEsMjg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJJdGVyYXRvcl9oCisj
ZGVmaW5lIENDTGF5ZXJJdGVyYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoZXNlIGNs
YXNzZXMgcHJvdmlkZSBtZWFucyB0byBpdGVyYXRlIG92ZXIgdGhlIFJlbmRlclN1cmZhY2UtTGF5
ZXIgdHJlZS4KKy8vCisvLyBBIFJlbmRlclN1cmZhY2UgJFIkIG1heSBiZSByZWZlcnJlZCB0byBp
biBvbmUgb2YgdHdvIGRpZmZlcmVuY2UgY29udGV4dHMuIE9uZSBSZW5kZXJTdXJmYWNlIGlzICJj
dXJyZW50IiBhdCBhbnkgdGltZSwgZm9yCisvLyB3aGF0ZXZlciBvcGVyYXRpb24gaXMgYmVpbmcg
cGVyZm9ybWVkLiBUaGlzIGN1cnJlbnQgc3VyZmFjZSBpcyByZWZlcnJlZCB0byBhcyBhIHRhcmdl
dCBzdXJmYWNlLiBGb3IgZXhhbXBsZSwgd2hlbiAkUiQgaXMKKy8vIGJlaW5nIHBhaW50ZWQgaXQg
d291bGQgYmUgdGhlIHRhcmdldCBzdXJmYWNlLiBPbmNlICRSJCBoYXMgYmVlbiBwYWludGVkLCBp
dHMgY29udGVudHMgbWF5IGJlIGluY2x1ZGVkIGludG8gYW5vdGhlcgorLy8gc3VyZmFjZSAkUyQu
IFdoaWxlICRTJCBpcyBjb25zaWRlcmVkIHRoZSB0YXJnZXQgc3VyZmFjZSB3aGVuIGl0IGlzIGJl
aW5nIHBhaW50ZWQsICRSJCBpcyBjYWxsZWQgYSBjb250cmlidXRpbmcgc3VyZmFjZQorLy8gaW4g
dGhpcyBjb250ZXh0IGFzIGl0IGNvbnRyaWJ1dGVzIHRvIHRoZSBjb250ZW50IG9mIHRoZSB0YXJn
ZXQgc3VyZmFjZSAkUyQuCisvLworLy8gVGhlIGl0ZXJhdG9yJ3MgY3VycmVudCBwb3NpdGlvbiBp
biB0aGUgdHJlZSBhbHdheXMgcG9pbnRzIHRvIHNvbWUgbGF5ZXIuIFRoZSBzdGF0ZSBvZiB0aGUg
aXRlcmF0b3IgaW5kaWNhdGVzIHRoZSByb2xlIG9mIHRoZQorLy8gbGF5ZXIsIGFuZCB3aWxsIGJl
IG9uZSBvZiB0aGUgZm9sbG93aW5nIHRocmVlIHN0YXRlcy4gQSBzaW5nbGUgbGF5ZXIgJEwkIHdp
bGwgYXBwZWFyIGluIHRoZSBpdGVyYXRpb24gcHJvY2VzcyBpbiBhdCBsZWFzdCBvbmUsCisvLyBh
bmQgcG9zc2libHkgYWxsLCBvZiB0aGVzZSBzdGF0ZXMuCisvLyAxLiBSZXByZXNlbnRpbmcgdGhl
IHRhcmdldCBzdXJmYWNlOiBUaGUgaXRlcmF0b3IgaW4gdGhpcyBzdGF0ZSwgcG9pbnRpbmcgYXQg
bGF5ZXIgJEwkLCBpbmRpY2F0ZXMgdGhhdCB0aGUgdGFyZ2V0IFJlbmRlclN1cmZhY2UKKy8vIGlz
IG5vdyB0aGUgc3VyZmFjZSBvd25lZCBieSAkTCQuIFRoaXMgd2lsbCBvY2N1ciBleGFjdGx5IG9u
Y2UgZm9yIGVhY2ggUmVuZGVyU3VyZmFjZSBpbiB0aGUgdHJlZS4KKy8vIDIuIFJlcHJlc2VudGlu
ZyBhIGNvbnRyaWJ1dGluZyBzdXJmYWNlOiBUaGUgaXRlcmF0b3IgaW4gdGhpcyBzdGF0ZSwgcG9p
bnRpbmcgYXQgbGF5ZXIgJEwkLCByZWZlcnMgdG8gdGhlIFJlbmRlclN1cmZhY2Ugb3duZWQKKy8v
IGJ5ICRMJCBhcyBhIGNvbnRyaWJ1dGluZyBzdXJmYWNlLCB3aXRob3V0IGNoYW5naW5nIHRoZSBj
dXJyZW50IHRhcmdldCBSZW5kZXJTdXJmYWNlLgorLy8gMy4gUmVwcmVzZW50aW5nIGl0c2VsZjog
VGhlIGl0ZXJhdG9yIGluIHRoaXMgc3RhdGUsIHBvaW50aW5nIGF0IGxheWVyICRMJCwgcmVmZXJz
IHRvIHRoZSBsYXllciBpdHNlbGYsIGFzIGEgY2hpbGQgb2YgdGhlCisvLyBjdXJyZW50IHRhcmdl
dCBSZW5kZXJTdXJmYWNlLgorLy8KKy8vIE1vc3QgaXRlcmF0b3JzIHdpbGwgcmV0dXJuIGEgbGF5
ZXIgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgc3VyZmFjZSBiZWZvcmUgcmV0dXJuaW5nIGxheWVy
cyByZXByZXNlbnRpbmcgdGhlbXNlbHZlcyBhcyBjaGlsZHJlbgorLy8gb2YgdGhlIGN1cnJlbnQg
dGFyZ2V0IHN1cmZhY2UsIGJ1dCB0aGlzIGlzIG5vdCBndWFyYW50ZWVkIGFzIHRoZSBvcmRlcmlu
ZyBtYXkgZGlmZmVyIChlZy4gRnJvbnRUb0JhY2sgb3JkZXJpbmcgd2lsbCBpdGVyYXRlCisvLyBv
dmVyIGNoaWxkcmVuIGxheWVycyBvZiBhIHN1cmZhY2UgYmVmb3JlIHRoZSBsYXllciByZXByZXNl
bnRpbmcgdGhlIHN1cmZhY2UgYXMgYSB0YXJnZXQgc3VyZmFjZSkuCisKKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKworLy8gQSBzdHJ1Y3QgdG8gaG9sZCB0aGUgaXRlcmF0b3IncyBjdXJyZW50IHBvc2l0aW9u
LCB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIHZhcmlvdXMgQ0NMYXllckl0ZXJhdG9yQWN0aW9uIGZ1
bmN0aW9ucywgZm9yIHRoZW0gdG8KKy8vIHJlYWQgYW5kIHVwZGF0ZS4gVGhpcyBzdHJ1Y3QgZXhp
c3RzIHNvIHRoZSB0ZW1wbGF0ZWQgYWN0aW9uIGZ1bmN0aW9ucyBkb24ndCBuZWVkIHRvIGFjY2Vz
cyB0aGUgQ0NMYXllckl0ZXJhdG9yIGNsYXNzLgorLy8KKy8vIFRoZSBjdXJyZW50IHBvc2l0aW9u
IG9mIHRoZSBpdGVyYXRvciBpcyBoZWxkIGluIHR3byBpbnRlZ2VyIHZhcmlhYmxlcy4KKy8vIC0g
VGhlIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyIGlzIGEgcG9zaXRpb24gaW4gdGhlIG1fcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC4gVGhpcyBwb2ludHMgdG8gYSBsYXllciB3aGljaCBvd25zIHRo
ZSBjdXJyZW50CisvLyB0YXJnZXQgc3VyZmFjZS4gVGhpcyBpcyBhIHZhbHVlIGZyb20gMCB0byBu
LTEgKG4gPSBzaXplIG9mIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9IG51bWJlciBvZiBzdXJm
YWNlcykuIEEgdmFsdWUgb3V0c2lkZSBvZgorLy8gdGhpcyByYW5nZSAodXN1YWxseSBrSW52YWxp
ZFRhcmdldFJlbmRlclN1cmZhY2VMYXllcikgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHBvc2l0aW9u
IG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgdHJlZS4KKy8vIC0gVGhlIG1fY3VycmVudExheWVy
IGlzIGEgcG9zaXRpb24gaW4gdGhlIGxpc3Qgb2YgbGF5ZXJzIHRoYXQgYXJlIGNoaWxkcmVuIG9m
IHRoZSBjdXJyZW50IHRhcmdldCBzdXJmYWNlLiBXaGVuIHBvaW50aW5nIHRvCisvLyBvbmUgb2Yg
dGhlc2UgbGF5ZXJzLCB0aGlzIGlzIGEgdmFsdWUgZnJvbSAwIHRvIG4tMSAobiA9IG51bWJlciBv
ZiBjaGlsZHJlbikuIFNpbmNlIHRoZSBpdGVyYXRvciBtdXN0IGFsc28gc3RvcCBhdCB0aGUgbGF5
ZXJzCisvLyByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBzdXJmYWNlLCB0aGlzIGlzIGRvbmUgYnkg
c2V0dGluZyB0aGUgbV9jdXJyZW50TGF5ZXIgdG8gYSB2YWx1ZSBvZiBrTGF5ZXJSZXByZXNlbnRp
bmdUYXJnZXRSZW5kZXJTdXJmYWNlLgordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK3N0cnVjdCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbiB7
CisgICAgZXhwbGljaXQgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24oY29uc3QgVmVjdG9yPFJlZlB0
cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpIDogbV9yZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KHJlbmRlclN1cmZhY2VMYXllckxpc3QpIHsgfQorCisgICAgaW5saW5lIExheWVy
VHlwZSogY3VycmVudExheWVyKCkgY29uc3QgeyByZXR1cm4gcmVwcmVzZW50c1RhcmdldFJlbmRl
clN1cmZhY2UoKSA/IHRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpIDogdGFyZ2V0UmVuZGVyU3Vy
ZmFjZUNoaWxkcmVuKClbbV9jdXJyZW50TGF5ZXJdLmdldCgpOyB9CisKKyAgICBpbmxpbmUgYm9v
bCByZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5
ZXJUeXBlPihjdXJyZW50TGF5ZXIoKSwgdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCktPmlkKCkp
OyB9CisgICAgaW5saW5lIGJvb2wgcmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSBjb25z
dCB7IHJldHVybiBtX2N1cnJlbnRMYXllciA9PSBrTGF5ZXJSZXByZXNlbnRpbmdUYXJnZXRSZW5k
ZXJTdXJmYWNlOyB9CisKKyAgICBpbmxpbmUgTGF5ZXJUeXBlKiB0YXJnZXRSZW5kZXJTdXJmYWNl
TGF5ZXIoKSBjb25zdCB7IHJldHVybiAoKm1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdClbbV90YXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXJdLmdldCgpOyB9CisgICAgaW5saW5lIFJlbmRlclN1cmZhY2VU
eXBlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gdGFyZ2V0UmVuZGVyU3Vy
ZmFjZUxheWVyKCktPnJlbmRlclN1cmZhY2UoKTsgfQorICAgIGlubGluZSBjb25zdCBWZWN0b3I8
UmVmUHRyPExheWVyVHlwZT4gPiYgdGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkgY29uc3Qg
eyByZXR1cm4gdGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKTsgfQorCisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24mIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID09IG90
aGVyLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyCisgICAgICAgICAgICAmJiBtX2N1cnJlbnRM
YXllciA9PSBvdGhlci5tX2N1cnJlbnRMYXllcjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3Qg
aW50IGtJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0gLTE7CisgICAgLy8gVGhpcyBt
dXN0IGJlIC0xIHNpbmNlIHRoZSBpdGVyYXRvciBhY3Rpb24gY29kZSBhc3N1bWVzIHRoYXQgdGhp
cyB2YWx1ZSBjYW4gYmUKKyAgICAvLyByZWFjaGVkIGJ5IHN1YnRyYWN0aW5nIG9uZSBmcm9tIHRo
ZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgbGF5ZXIgaW4gdGhlIGN1cnJlbnQKKyAgICAvLyB0YXJn
ZXQgc3VyZmFjZSdzIGNoaWxkIGxheWVyIGxpc3QsIHdoaWNoIGlzIDAuCisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGtMYXllclJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2UgPSAodW5z
aWduZWQpLTE7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogbV9yZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIGludCBtX3RhcmdldFJlbmRlclN1cmZhY2VMYXllcjsK
KyAgICB1bnNpZ25lZCBtX2N1cnJlbnRMYXllcjsKK307CisKKy8vIEFuIGl0ZXJhdG9yIGNsYXNz
IGZvciB3YWxraW5nIG92ZXIgbGF5ZXJzIGluIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUu
CisvLyBVc2UgdGhlIGJlZ2luKCkgYW5kIGVuZCgpIGZ1bmN0aW9ucyB0byBnZXQgYW4gaXRlcmF0
b3IgcmVsYXRpdmUgdG8gYSBnaXZlbiBsaXN0IG9mIHJlbmRlclN1cmZhY2VMYXllcnMuCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlw
ZW5hbWUgSXRlcmF0b3JBY3Rpb25UeXBlPgorY2xhc3MgQ0NMYXllckl0ZXJhdG9yIHsKKyAgICB0
eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBJdGVy
YXRvckFjdGlvblR5cGU+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisKK3B1YmxpYzoKKyAgICBDQ0xh
eWVySXRlcmF0b3IoKSA6IG1fcG9zaXRpb24oMCksIG1fYWN0aW9ucygwKSB7IH0KKworICAgIHN0
YXRpYyBDQ0xheWVySXRlcmF0b3JUeXBlIGJlZ2luKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJU
eXBlPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSB7IHJldHVybiBDQ0xheWVySXRlcmF0b3JU
eXBlKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHRydWUpOyB9CisgICAgc3RhdGljIENDTGF5ZXJJ
dGVyYXRvclR5cGUgZW5kKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KSB7IHJldHVybiBDQ0xheWVySXRlcmF0b3JUeXBlKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGZhbHNlKTsgfQorCisgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3BlcmF0
b3IrKygpIHsgbV9hY3Rpb25zLT5uZXh0KG1fcG9zaXRpb24pOyByZXR1cm4gKnRoaXM7IH0KKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIG1fcG9zaXRpb24gPT0gb3RoZXIubV9wb3NpdGlvbjsgfQorICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBDQ0xheWVySXRlcmF0b3JUeXBlJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIExheWVyVHlwZSogb3BlcmF0b3ItPigpIHsgcmV0
dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyKCk7IH0KKyAgICBMYXllclR5cGUqIG9wZXJhdG9y
KigpIHsgcmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyKCk7IH0KKworICAgIGJvb2wgcmVw
cmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSB7IHJldHVybiBtX3Bvc2l0aW9uLnJlcHJlc2Vu
dHNUYXJnZXRSZW5kZXJTdXJmYWNlKCk7IH0KKyAgICBib29sIHJlcHJlc2VudHNDb250cmlidXRp
bmdSZW5kZXJTdXJmYWNlKCkgeyByZXR1cm4gIXJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNl
KCkgJiYgbV9wb3NpdGlvbi5yZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpOyB9
CisgICAgYm9vbCByZXByZXNlbnRzSXRzZWxmKCkgeyByZXR1cm4gIXJlcHJlc2VudHNUYXJnZXRS
ZW5kZXJTdXJmYWNlKCkgJiYgIXJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCk7
IH0KKworICAgIExheWVyVHlwZSogdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgeyByZXR1cm4g
bV9wb3NpdGlvbi50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKTsgfQorCitwcml2YXRlOgorICAg
IENDTGF5ZXJJdGVyYXRvcihjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgYm9vbCBzdGFydCkKKyAgICAgICAgOiBtX3Bvc2l0aW9uKHJlbmRl
clN1cmZhY2VMYXllckxpc3QpCisgICAgICAgICwgbV9hY3Rpb25zKG5ldyBJdGVyYXRvckFjdGlv
blR5cGUoKSkKKyAgICB7CisgICAgICAgIGlmIChzdGFydCAmJiAhcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC0+aXNFbXB0eSgpKQorICAgICAgICAgICAgbV9hY3Rpb25zLT5iZWdpbihtX3Bvc2l0aW9u
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hY3Rpb25zLT5lbmQobV9wb3NpdGlvbik7
CisgICAgfQorCisgICAgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJT
dXJmYWNlVHlwZT4gbV9wb3NpdGlvbjsKKyAgICBJdGVyYXRvckFjdGlvblR5cGUqIG1fYWN0aW9u
czsKKworICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOworfTsKKworLy8g
T3JkZXJpbmdzIGZvciBpdGVyYXRpbmcgb3ZlciB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVl
Lgorc3RydWN0IENDTGF5ZXJJdGVyYXRvckFjdGlvbnMgeworICAgIC8vIElmIFJlbmRlclN1cmZh
Y2UgQiBwYWludHMgaW50byBSZW5kZXJTdXJmYWNlIEEsIHRoaXMgaXRlcmF0b3IgY2xhc3Mgdmlz
aXRzIGxheWVycyBpbiBCIGJlZm9yZSB2aXNpdGluZyBsYXllcnMgaW4gQS4KKyAgICBjbGFzcyBE
ZXBlbmRlbmN5T3JkZXJlZCB7CisgICAgcHVibGljOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBi
ZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBl
PiYgcG9zKQorICAgICAgICB7CisgICAgICAgICAgICBwb3MubV90YXJnZXRSZW5kZXJTdXJmYWNl
TGF5ZXIgPSBwb3MubV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LT5zaXplKCkgLSAxOworICAgICAg
ICAgICAgcG9zLm1fY3VycmVudExheWVyID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJU
eXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmtMYXllclJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1
cmZhY2U7CisgICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwg
dHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CisgICAgICAgIHZvaWQgZW5kKENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IENDTGF5ZXJJ
dGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjprSW52YWxpZFRh
cmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICAgICAgICAgIHBvcy5tX2N1cnJlbnRMYXllciA9
IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojpr
TGF5ZXJSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlOworICAgICAgICB9CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBl
PgorICAgICAgICB2b2lkIG5leHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKKyAgICAgICAgeworICAgICAgICAgICAgKytwb3MubV9j
dXJyZW50TGF5ZXI7CisgICAgICAgICAgICBpZiAocG9zLm1fY3VycmVudExheWVyID09IHBvcy50
YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAt
LXBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICAgICAgICAgICAgICBwb3MubV9j
dXJyZW50TGF5ZXIgPSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1
cmZhY2VUeXBlPjo6a0xheWVyUmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBXYWxrcyBsYXllcnMgc29ydGVk
IGJ5IHotb3JkZXIgZnJvbSBiYWNrIHRvIGZyb250LgorICAgIGNsYXNzIEJhY2tUb0Zyb250IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVu
YW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIGJlZ2luKENDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IDA7CisgICAgICAg
ICAgICBwb3MubV9jdXJyZW50TGF5ZXIgPSAwOworICAgICAgICB9CisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAg
ICB2b2lkIGVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlPiYgcG9zKQorICAgICAgICB7CisgICAgICAgICAgICBwb3MubV90YXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXIgPSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1
cmZhY2VUeXBlPjo6a0ludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgICAgICAg
ICBwb3MubV9jdXJyZW50TGF5ZXIgPSAwOworICAgICAgICB9CisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2
b2lkIG5leHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNl
VHlwZT4mIHBvcykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgbGF5
ZXIgaGFzIGEgUlMsIG1vdmUgdG8gaXRzIGxheWVyIGxpc3QuIE90aGVyd2lzZSwgdmlzaXQgdGhl
IG5leHQgbGF5ZXIgaW4gdGhlIGN1cnJlbnQgUlMgbGF5ZXIgbGlzdC4KKyAgICAgICAgICAgIGlm
IChwb3MucmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAg
ICAgICAgIC8vIFNhdmUgb3VyIHBvc2l0aW9uIGluIHRoZSBjaGlsZExheWVyIGxpc3QgZm9yIHRo
ZSBSZW5kZXJTdXJmYWNlLCB0aGVuIGp1bXAgdG8gdGhlIG5leHQgUmVuZGVyU3VyZmFjZS4KKyAg
ICAgICAgICAgICAgICBtX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckhpc3RvcnkuYXBwZW5kKHBv
cy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllcik7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50
TGF5ZXJIaXN0b3J5LmFwcGVuZChwb3MubV9jdXJyZW50TGF5ZXIpOworCisgICAgICAgICAgICAg
ICAgZm9yIChMYXllclR5cGUqIGxheWVyID0gcG9zLmN1cnJlbnRMYXllcigpOyBwb3MudGFyZ2V0
UmVuZGVyU3VyZmFjZUxheWVyKCkgIT0gbGF5ZXI7ICsrcG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFj
ZUxheWVyKSB7IH0KKyAgICAgICAgICAgICAgICBwb3MubV9jdXJyZW50TGF5ZXIgPSBDQ0xheWVy
SXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6a0xheWVyUmVw
cmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgKytwb3MubV9jdXJyZW50TGF5ZXI7CisgICAgICAgICAgICAgICAgd2hpbGUg
KHBvcy5tX2N1cnJlbnRMYXllciA9PSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCku
c2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEp1bXAgYmFjayB0byB0aGUgcHJldmlv
dXMgUmVuZGVyU3VyZmFjZSwgYW5kIGdldCBiYWNrIHRoZSBwb3NpdGlvbiB3aGVyZSB3ZSB3ZXJl
IGluIHRoYXQgbGlzdCwgYW5kIG1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24gdGhlcmUuCisgICAg
ICAgICAgICAgICAgICAgIGlmICghcG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmQgb2YgdGhlIGxpc3QKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IENDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjprSW52YWxpZFRhcmdldFJl
bmRlclN1cmZhY2VMYXllcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcy5tX2N1cnJlbnRM
YXllciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxh
eWVyID0gbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJIaXN0b3J5Lmxhc3QoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJIaXN0b3J5LnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgcG9zLm1fY3VycmVudExheWVyID0gbV9jdXJyZW50TGF5
ZXJIaXN0b3J5Lmxhc3QoKSArIDE7CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudExheWVy
SGlzdG9yeS5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3Rhcmdl
dFJlbmRlclN1cmZhY2VMYXllckhpc3Rvcnk7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9j
dXJyZW50TGF5ZXJIaXN0b3J5OworICAgIH07CisKKyAgICAvLyBXYWxrcyBsYXllcnMgc29ydGVk
IGJ5IHotb3JkZXIgZnJvbSBiYWNrIHRvIGZyb250LgorICAgIGNsYXNzIEZyb250VG9CYWNrIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVu
YW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIGJlZ2luKENDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IDA7CisgICAgICAg
ICAgICBwb3MubV9jdXJyZW50TGF5ZXIgPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVu
KCkuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIGdvVG9IaWdoZXN0SW5TdWJ0cmVlKHBvcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUg
UmVuZGVyU3VyZmFjZVR5cGU+CisgICAgICAgIHZvaWQgZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0
aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IENDTGF5ZXJJdGVyYXRvclBv
c2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjprSW52YWxpZFRhcmdldFJlbmRl
clN1cmZhY2VMYXllcjsKKyAgICAgICAgICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IDA7CisgICAg
ICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVu
ZGVyU3VyZmFjZVR5cGU+CisgICAgICAgIHZvaWQgbmV4dChDQ0xheWVySXRlcmF0b3JQb3NpdGlv
bjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBNb3ZlcyB0byB0aGUgcHJldmlvdXMgbGF5ZXIgaW4gdGhlIGN1cnJlbnQgUlMgbGF5
ZXIgbGlzdC4gVGhlbiB3ZSBjaGVjayBpZiB0aGUKKyAgICAgICAgICAgIC8vIG5ldyBjdXJyZW50
IGxheWVyIGhhcyBpdHMgb3duIFJTLCBpbiB3aGljaCBjYXNlIHRoZXJlIGFyZSB0aGluZ3MgaW4g
dGhhdCBSUyBsYXllciBsaXN0IHRoYXQgYXJlIGhpZ2hlciwgc28KKyAgICAgICAgICAgIC8vIHdl
IGZpbmQgdGhlIGhpZ2hlc3QgbGF5ZXIgaW4gdGhhdCBzdWJ0cmVlLgorICAgICAgICAgICAgLy8g
SWYgd2UgbW92ZSBiYWNrIHBhc3QgdGhlIGZyb250IG9mIHRoZSBsaXN0LCB3ZSBqdW1wIHVwIHRv
IHRoZSBwcmV2aW91cyBSUyBsYXllciBsaXN0LCBwaWNraW5nIHVwIGFnYWluIHdoZXJlIHdlCisg
ICAgICAgICAgICAvLyBoYWQgcHJldmlvdXNseSByZWN1cnNlZCBpbnRvIHRoZSBjdXJyZW50IFJT
IGxheWVyIGxpc3QuCisKKyAgICAgICAgICAgIGlmICghcG9zLnJlcHJlc2VudHNUYXJnZXRSZW5k
ZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdGluZyBvbmUgaGVyZSB3
aWxsIGV2ZW50dWFsbHkgY2F1c2UgdGhlIGN1cnJlbnQgbGF5ZXIgdG8gYmVjb21lIHRoYXQgbGF5
ZXIKKyAgICAgICAgICAgICAgICAvLyByZXByZXNlbnRpbmcgdGhlIHRhcmdldCByZW5kZXIgc3Vy
ZmFjZS4KKyAgICAgICAgICAgICAgICAtLXBvcy5tX2N1cnJlbnRMYXllcjsKKyAgICAgICAgICAg
ICAgICBnb1RvSGlnaGVzdEluU3VidHJlZShwb3MpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAocG9zLnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwb3MubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuZCBvZiB0aGUgbGlzdAorICAgICAg
ICAgICAgICAgICAgICAgICAgcG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0gQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmtJbnZhbGlk
VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgICAgICAgICAgICAgICAgICAgICAgcG9zLm1f
Y3VycmVudExheWVyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwb3MubV90YXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXIgPSBtX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckhpc3RvcnkubGFzdCgpOwor
ICAgICAgICAgICAgICAgICAgICBtX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckhpc3RvcnkucmVt
b3ZlTGFzdCgpOworICAgICAgICAgICAgICAgICAgICBwb3MubV9jdXJyZW50TGF5ZXIgPSBtX2N1
cnJlbnRMYXllckhpc3RvcnkubGFzdCgpOworICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRM
YXllckhpc3RvcnkucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CisgICAgICAgIHZvaWQgZ29U
b0hpZ2hlc3RJblN1YnRyZWUoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5k
ZXJTdXJmYWNlVHlwZT4mIHBvcykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHBvcy5yZXBy
ZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHdoaWxlIChwb3MucmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2Uo
KSkgeworICAgICAgICAgICAgICAgIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9yeS5h
cHBlbmQocG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKTsKKyAgICAgICAgICAgICAgICBt
X2N1cnJlbnRMYXllckhpc3RvcnkuYXBwZW5kKHBvcy5tX2N1cnJlbnRMYXllcik7CisKKyAgICAg
ICAgICAgICAgICBmb3IgKExheWVyVHlwZSogbGF5ZXIgPSBwb3MuY3VycmVudExheWVyKCk7IHBv
cy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSAhPSBsYXllcjsgKytwb3MubV90YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXIpIHsgfQorICAgICAgICAgICAgICAgIHBvcy5tX2N1cnJlbnRMYXllciA9
IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCkgLSAxOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3RhcmdldFJlbmRl
clN1cmZhY2VMYXllckhpc3Rvcnk7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9jdXJyZW50
TGF5ZXJIaXN0b3J5OworICAgIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMjljODFhYTU1NTAwNjI2
MDJmNmY4ZGEzZGY0MzFhNmNkZDNhYWNlMi4uMmI1MWZjYWQ3ZjcyYWVlNDI2MGU5MWYzNWJjNjI2
Zjg0ZTYyMDNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJh
Y2VFdmVudC5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oIgpAQCAtNDMzLDU3ICs0MzQsNDEgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJl
bmRlclMKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFBhaW50VHlwZSBwYWludFR5cGUpCiB7
Ci0gICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXpl
KCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIExh
eWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rb
c3VyZmFjZUluZGV4XS5nZXQoKTsKLSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5k
ZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAg
IEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRy
YXdPcGFjaXR5KCkpOwotCi0gICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJm
YWNlKHJlbmRlclN1cmZhY2VMYXllciwgcGFpbnRUeXBlKTsKLQotICAgICAgICBjb25zdCBMYXll
ckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUo
KTsgKytsYXllckluZGV4KSB7Ci0gICAgICAgICAgICBMYXllckNocm9taXVtKiBsYXllciA9IGxh
eWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKLQotICAgICAgICAgICAgLy8gTGF5ZXJzIHRoYXQg
c3RhcnQgYSBuZXcgcmVuZGVyIHN1cmZhY2Ugd2lsbCBiZSBwYWludGVkIHdoZW4gdGhlIHJlbmRl
cgotICAgICAgICAgICAgLy8gc3VyZmFjZSdzIGxpc3QgaXMgcHJvY2Vzc2VkLgotICAgICAgICAg
ICAgaWYgKENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9U
YXJnZXQ8TGF5ZXJDaHJvbWl1bT4obGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllci0+aWQoKSkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIEFTU0VSVCghbGF5ZXItPmJv
dW5kcygpLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KGxh
eWVyLCBwYWludFR5cGUpOworICAgIC8vIFVzZSBGcm9udFRvQmFjayB0byBhbGxvdyBmb3IgdGVz
dGluZyBvY2NsdXNpb24gYW5kIHBlcmZvcm1pbmcgY3VsbGluZyBkdXJpbmcgdGhlIHRyZWUgd2Fs
ay4KKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0sIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBDQ0xheWVy
SXRlcmF0b3JUeXBlOworCisgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQgPSBDQ0xheWVySXRl
cmF0b3JUeXBlOjplbmQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIGZvciAoQ0NMYXll
ckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC5yZXByZXNl
bnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnJlbmRl
clN1cmZhY2UoKS0+ZHJhd09wYWNpdHkoKSk7CisgICAgICAgICAgICBwYWludE1hc2tBbmRSZXBs
aWNhRm9yUmVuZGVyU3VyZmFjZSgqaXQsIHBhaW50VHlwZSk7CisgICAgICAgIH0gZWxzZSBpZiAo
aXQucmVwcmVzZW50c0l0c2VsZigpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXQtPm9wYWNpdHko
KSk7CisgICAgICAgICAgICBBU1NFUlQoIWl0LT5ib3VuZHMoKS5pc0VtcHR5KCkpOworICAgICAg
ICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkoKml0LCBwYWludFR5cGUpOwogICAgICAgICB9CiAg
ICAgfQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNl
cyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlcikK
IHsKLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSBtX3VwZGF0ZUxpc3Quc2l6ZSgpIC0gMTsg
c3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewotICAgICAgICBMYXllckNocm9t
aXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSBtX3VwZGF0ZUxpc3Rbc3VyZmFjZUluZGV4XS5nZXQo
KTsKLSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gcmVuZGVy
U3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJTdXJm
YWNlKTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpOwotCi0g
ICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKQotICAgICAgICAgICAg
cmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNl
cyhjb250ZXh0LCB1cGRhdGVyKTsKLQotICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5y
ZXBsaWNhTGF5ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNh
TGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0LCB1cGRhdGVyKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxh
eWVyKCktPm1hc2tMYXllcigpKQotICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+
cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNv
bnRleHQsIHVwZGF0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjb25zdCBMYXll
ckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUo
KTsgKytsYXllckluZGV4KSB7Ci0gICAgICAgICAgICBMYXllckNocm9taXVtKiBsYXllciA9IGxh
eWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKLQotICAgICAgICAgICAgaWYgKENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJDaHJvbWl1
bT4obGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllci0+aWQoKSkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNv
bnRleHQsIHVwZGF0ZXIpOwotICAgICAgICB9CisgICAgLy8gVXNlIERlcGVuZGVuY3lPcmRlcmVk
IHNpbmNlIGl0IGlzIGNoZWFwIHRvIHRyYXZlcnNlIGFuZCB0aGUgb3JkZXJpbmcgZG9lcyBub3Qg
bWF0dGVyLgorICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRl
clN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RGVwZW5kZW5jeU9yZGVy
ZWQ+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9
IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmbV91cGRhdGVMaXN0KTsKKyAgICBmb3IgKENDTGF5
ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmbV91cGRhdGVM
aXN0KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzVGFyZ2V0
UmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnJlbmRlclN1cmZhY2Uo
KS0+ZHJhd09wYWNpdHkoKSk7CisgICAgICAgICAgICBpZiAoaXQtPm1hc2tMYXllcigpKQorICAg
ICAgICAgICAgICAgIGl0LT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhj
b250ZXh0LCB1cGRhdGVyKTsKKworICAgICAgICAgICAgaWYgKGl0LT5yZXBsaWNhTGF5ZXIoKSkg
eworICAgICAgICAgICAgICAgIGl0LT5yZXBsaWNhTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhjb250ZXh0LCB1cGRhdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoaXQtPnJlcGxp
Y2FMYXllcigpLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgaXQtPnJlcGxpY2FM
YXllcigpLT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0LCB1
cGRhdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpdC5yZXByZXNlbnRz
SXRzZWxmKCkpCisgICAgICAgICAgICBpdC0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250
ZXh0LCB1cGRhdGVyKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uY3BwCmluZGV4IDU2NTA5YmNlYzNjNjFlMmRmZTE2NjRhYjQxNjVmNDI5MzczOTNl
MWIuLmM1ODUzYjgyNzMwZTlkNjkzNzI4M2E0NmViNzk2ZTM0MDBmOWExNjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAKQEAgLTQ3MSwxNSArNDcyLDE0IEBAIHN0YXRpYyBib29s
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSog
bGF5ZXIsIExheWVyCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRl
clN1cmZhY2VUeXBlPgogc3RhdGljIHZvaWQgd2Fsa0xheWVyc0FuZENhbGN1bGF0ZVZpc2libGVM
YXllclJlY3RzKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KQogewotICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VM
YXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkg
ewotICAgICAgICBMYXllclR5cGUqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VM
YXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKLSAgICAgICAgUmVuZGVyU3VyZmFjZVR5cGUq
IHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLQot
ICAgICAgICBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYgbGF5ZXJMaXN0ID0gcmVuZGVyU3Vy
ZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7
IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAg
ICAgIExheWVyVHlwZSogbGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3Q8TGF5ZXJUeXBlPihsYXllcik7Ci0gICAgICAgICAg
ICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKKyAgICAvLyBV
c2UgRGVwZW5kZW5jeU9yZGVyZWQgc2luY2UgaXQgaXMgY2hlYXAgdG8gdHJhdmVyc2UgYW5kIHRo
ZSBvcmRlcmluZyBkb2VzIG5vdCBtYXR0ZXIuCisgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8
TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RGVw
ZW5kZW5jeU9yZGVyZWQ+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisKKyAgICBDQ0xheWVySXRlcmF0
b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9y
VHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgaWYgKCFpdC5yZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7CisgICAg
ICAgICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3Q8TGF5ZXJUeXBlPigqaXQpOworICAgICAgICAgICAg
aXQtPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxheWVyUmVjdCk7CiAgICAgICAgIH0KICAg
ICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120207</attachid>
            <date>2011-12-21 12:00:35 -0800</date>
            <delta_ts>2011-12-23 13:56:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74203-20111221150034.patch</filename>
            <type>text/plain</type>
            <size>42636</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdhNDNkZDFhZmRiNDll
MGI4ZDlmNjQ0ZTBiMjRjODY3MTE4ZjZhNy4uZTVlMGQwNzZmZmVjZTQxOGM0NWI1NTkyOWNmOTE1
NTQ4MWFiZTJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDExLTEyLTIxICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdGVyYXRvcnMgY29tZSB3aXRo
IHRocmVlIG9yZGVyaW5ncy4gRGVwZW5kZW5jeU9yZGVyZWQgKHRoaXMgaXMgYSBzaW1wbGUgbGlu
ZWFyIHdhbGsgb3ZlciB0aGUgdHJlZSkgYW5kIGlzIG5vdAorICAgICAgICB6LW9yZGVyZWQuIEZy
b250VG9CYWNrIGFuZCBCYWNrVG9Gcm9udCB3YWxrIGxheWVycyBpbiBhIHN0cmljdCB6LW9yZGVy
aW5nLgorCisgICAgICAgIE5ldyB1bml0IHRlc3RzOiB0ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0
LmNwcAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6Y3VycmVudExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjpyZXByZXNlbnRzQ29u
dHJpYnV0aW5nUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0
b3JQb3NpdGlvbjo6cmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OnRhcmdldFJlbmRlclN1cmZhY2VMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6dGFyZ2V0UmVuZGVy
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6dGFy
Z2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvcjo6Q0NMYXllckl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRv
cjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjplbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVySXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0
ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6
b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6cmVwcmVzZW50
c1RhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9y
OjpyZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySXRlcmF0b3I6OnJlcHJlc2VudHNJdHNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yOjp0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RGVwZW5kZW5jeU9yZGVyZWQ6OmJlZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkRlcGVuZGVuY3lPcmRl
cmVkOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RGVw
ZW5kZW5jeU9yZGVyZWQ6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
dGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6Om5leHQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6
OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6d2Fsa0xheWVyc0FuZENhbGN1bGF0ZVZpc2libGVMYXllclJlY3RzKToKKwogMjAx
MS0xMi0yMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIHNpemVv
ZihSZW5kZXJTdHlsZSkgaXMgNjQgaW5zdGVhZCBvZiA1NiBvbiBXaW5kb3dzICh4ODYpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDhkMmExZGVkZGNmY2I2ODUyNGFjNDU3ZjI1ZWNmZTFi
NWU3ZWI3ZGQuLmQ1MmFjZTQ0YTRkMmNmOTFlODE3MTk4MDM1NTQwOWZkZjMwZjFhNGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTItMjEgIERhbmEg
SmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDcmVh
dGUgaXRlcmF0b3JzIGZvciB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDIwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAg
ICAgICogdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHA6IEFkZGVkLgorCiAyMDExLTEyLTIw
ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2ZXJ0IGNv
ZGUgZm9yIHI5NjkxMiBhbmQgcjEwMTkwNSwgc2luY2UgdGhleSBjYXVzZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IDg1Njk4NzAxMDNhNzhkMzIzZjJiMjhhYzE2N2UyNWFmNjE5OGE1NDEuLjhhYWE5YThl
NTUyM2M2MWIzY2ZiN2M5YzI3ZmQ2ZTZmYWNmMDc2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2
MjMsNiArMzYyMyw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NJbnB1dEhhbmRsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclF1YWQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzMTU3Mzg2Yjk4ZWRlMWE0YjVkYWRl
YThiNjhjZjBlZTE1MWFlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuaApAQCAtMCwwICsxLDI4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVySXRlcmF0b3JfaAorI2RlZmluZSBD
Q0xheWVySXRlcmF0b3JfaAorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgi
CisKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoZXNlIGNsYXNzZXMgcHJvdmlkZSBtZWFucyB0byBp
dGVyYXRlIG92ZXIgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZS4KKy8vCisvLyBBIFJlbmRl
clN1cmZhY2UgJFIkIG1heSBiZSByZWZlcnJlZCB0byBpbiBvbmUgb2YgdHdvIGRpZmZlcmVuY2Ug
Y29udGV4dHMuIE9uZSBSZW5kZXJTdXJmYWNlIGlzICJjdXJyZW50IiBhdCBhbnkgdGltZSwgZm9y
CisvLyB3aGF0ZXZlciBvcGVyYXRpb24gaXMgYmVpbmcgcGVyZm9ybWVkLiBUaGlzIGN1cnJlbnQg
c3VyZmFjZSBpcyByZWZlcnJlZCB0byBhcyBhIHRhcmdldCBzdXJmYWNlLiBGb3IgZXhhbXBsZSwg
d2hlbiAkUiQgaXMKKy8vIGJlaW5nIHBhaW50ZWQgaXQgd291bGQgYmUgdGhlIHRhcmdldCBzdXJm
YWNlLiBPbmNlICRSJCBoYXMgYmVlbiBwYWludGVkLCBpdHMgY29udGVudHMgbWF5IGJlIGluY2x1
ZGVkIGludG8gYW5vdGhlcgorLy8gc3VyZmFjZSAkUyQuIFdoaWxlICRTJCBpcyBjb25zaWRlcmVk
IHRoZSB0YXJnZXQgc3VyZmFjZSB3aGVuIGl0IGlzIGJlaW5nIHBhaW50ZWQsICRSJCBpcyBjYWxs
ZWQgYSBjb250cmlidXRpbmcgc3VyZmFjZQorLy8gaW4gdGhpcyBjb250ZXh0IGFzIGl0IGNvbnRy
aWJ1dGVzIHRvIHRoZSBjb250ZW50IG9mIHRoZSB0YXJnZXQgc3VyZmFjZSAkUyQuCisvLworLy8g
VGhlIGl0ZXJhdG9yJ3MgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgdHJlZSBhbHdheXMgcG9pbnRz
IHRvIHNvbWUgbGF5ZXIuIFRoZSBzdGF0ZSBvZiB0aGUgaXRlcmF0b3IgaW5kaWNhdGVzIHRoZSBy
b2xlIG9mIHRoZQorLy8gbGF5ZXIsIGFuZCB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRo
cmVlIHN0YXRlcy4gQSBzaW5nbGUgbGF5ZXIgJEwkIHdpbGwgYXBwZWFyIGluIHRoZSBpdGVyYXRp
b24gcHJvY2VzcyBpbiBhdCBsZWFzdCBvbmUsCisvLyBhbmQgcG9zc2libHkgYWxsLCBvZiB0aGVz
ZSBzdGF0ZXMuCisvLyAxLiBSZXByZXNlbnRpbmcgdGhlIHRhcmdldCBzdXJmYWNlOiBUaGUgaXRl
cmF0b3IgaW4gdGhpcyBzdGF0ZSwgcG9pbnRpbmcgYXQgbGF5ZXIgJEwkLCBpbmRpY2F0ZXMgdGhh
dCB0aGUgdGFyZ2V0IFJlbmRlclN1cmZhY2UKKy8vIGlzIG5vdyB0aGUgc3VyZmFjZSBvd25lZCBi
eSAkTCQuIFRoaXMgd2lsbCBvY2N1ciBleGFjdGx5IG9uY2UgZm9yIGVhY2ggUmVuZGVyU3VyZmFj
ZSBpbiB0aGUgdHJlZS4KKy8vIDIuIFJlcHJlc2VudGluZyBhIGNvbnRyaWJ1dGluZyBzdXJmYWNl
OiBUaGUgaXRlcmF0b3IgaW4gdGhpcyBzdGF0ZSwgcG9pbnRpbmcgYXQgbGF5ZXIgJEwkLCByZWZl
cnMgdG8gdGhlIFJlbmRlclN1cmZhY2Ugb3duZWQKKy8vIGJ5ICRMJCBhcyBhIGNvbnRyaWJ1dGlu
ZyBzdXJmYWNlLCB3aXRob3V0IGNoYW5naW5nIHRoZSBjdXJyZW50IHRhcmdldCBSZW5kZXJTdXJm
YWNlLgorLy8gMy4gUmVwcmVzZW50aW5nIGl0c2VsZjogVGhlIGl0ZXJhdG9yIGluIHRoaXMgc3Rh
dGUsIHBvaW50aW5nIGF0IGxheWVyICRMJCwgcmVmZXJzIHRvIHRoZSBsYXllciBpdHNlbGYsIGFz
IGEgY2hpbGQgb2YgdGhlCisvLyBjdXJyZW50IHRhcmdldCBSZW5kZXJTdXJmYWNlLgorLy8KKy8v
IE1vc3QgaXRlcmF0b3JzIHdpbGwgcmV0dXJuIGEgbGF5ZXIgcmVwcmVzZW50aW5nIHRoZSB0YXJn
ZXQgc3VyZmFjZSBiZWZvcmUgcmV0dXJuaW5nIGxheWVycyByZXByZXNlbnRpbmcgdGhlbXNlbHZl
cyBhcyBjaGlsZHJlbgorLy8gb2YgdGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2UsIGJ1dCB0aGlz
IGlzIG5vdCBndWFyYW50ZWVkIGFzIHRoZSBvcmRlcmluZyBtYXkgZGlmZmVyIChlZy4gRnJvbnRU
b0JhY2sgb3JkZXJpbmcgd2lsbCBpdGVyYXRlCisvLyBvdmVyIGNoaWxkcmVuIGxheWVycyBvZiBh
IHN1cmZhY2UgYmVmb3JlIHRoZSBsYXllciByZXByZXNlbnRpbmcgdGhlIHN1cmZhY2UgYXMgYSB0
YXJnZXQgc3VyZmFjZSkuCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gQSBzdHJ1Y3QgdG8gaG9s
ZCB0aGUgaXRlcmF0b3IncyBjdXJyZW50IHBvc2l0aW9uLCB3aGljaCBpcyBwYXNzZWQgdG8gdGhl
IHZhcmlvdXMgQ0NMYXllckl0ZXJhdG9yQWN0aW9uIGZ1bmN0aW9ucywgZm9yIHRoZW0gdG8KKy8v
IHJlYWQgYW5kIHVwZGF0ZS4gVGhpcyBzdHJ1Y3QgZXhpc3RzIHNvIHRoZSB0ZW1wbGF0ZWQgYWN0
aW9uIGZ1bmN0aW9ucyBkb24ndCBuZWVkIHRvIGFjY2VzcyB0aGUgQ0NMYXllckl0ZXJhdG9yIGNs
YXNzLgorLy8KKy8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBpdGVyYXRvciBpcyBoZWxk
IGluIHR3byBpbnRlZ2VyIHZhcmlhYmxlcy4KKy8vIC0gVGhlIG1fdGFyZ2V0UmVuZGVyU3VyZmFj
ZUxheWVyIGlzIGEgcG9zaXRpb24gaW4gdGhlIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdC4gVGhp
cyBwb2ludHMgdG8gYSBsYXllciB3aGljaCBvd25zIHRoZSBjdXJyZW50CisvLyB0YXJnZXQgc3Vy
ZmFjZS4gVGhpcyBpcyBhIHZhbHVlIGZyb20gMCB0byBuLTEgKG4gPSBzaXplIG9mIG1fcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCA9IG51bWJlciBvZiBzdXJmYWNlcykuIEEgdmFsdWUgb3V0c2lkZSBv
ZgorLy8gdGhpcyByYW5nZSAodXN1YWxseSBrSW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXll
cikgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHBvc2l0aW9uIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0
aGUgdHJlZS4KKy8vIC0gVGhlIG1fY3VycmVudExheWVyIGlzIGEgcG9zaXRpb24gaW4gdGhlIGxp
c3Qgb2YgbGF5ZXJzIHRoYXQgYXJlIGNoaWxkcmVuIG9mIHRoZSBjdXJyZW50IHRhcmdldCBzdXJm
YWNlLiBXaGVuIHBvaW50aW5nIHRvCisvLyBvbmUgb2YgdGhlc2UgbGF5ZXJzLCB0aGlzIGlzIGEg
dmFsdWUgZnJvbSAwIHRvIG4tMSAobiA9IG51bWJlciBvZiBjaGlsZHJlbikuIFNpbmNlIHRoZSBp
dGVyYXRvciBtdXN0IGFsc28gc3RvcCBhdCB0aGUgbGF5ZXJzCisvLyByZXByZXNlbnRpbmcgdGhl
IHRhcmdldCBzdXJmYWNlLCB0aGlzIGlzIGRvbmUgYnkgc2V0dGluZyB0aGUgbV9jdXJyZW50TGF5
ZXIgdG8gYSB2YWx1ZSBvZiBrTGF5ZXJSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlLgor
dGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4K
K3N0cnVjdCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbiB7CisgICAgZXhwbGljaXQgQ0NMYXllckl0
ZXJhdG9yUG9zaXRpb24oY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpIDogbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KHJlbmRlclN1cmZhY2VM
YXllckxpc3QpIHsgfQorCisgICAgaW5saW5lIExheWVyVHlwZSogY3VycmVudExheWVyKCkgY29u
c3QgeyByZXR1cm4gcmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSA/IHRhcmdldFJlbmRl
clN1cmZhY2VMYXllcigpIDogdGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKClbbV9jdXJyZW50
TGF5ZXJdLmdldCgpOyB9CisKKyAgICBpbmxpbmUgYm9vbCByZXByZXNlbnRzQ29udHJpYnV0aW5n
UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVu
ZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJUeXBlPihjdXJyZW50TGF5ZXIoKSwg
dGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCktPmlkKCkpOyB9CisgICAgaW5saW5lIGJvb2wgcmVw
cmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRMYXll
ciA9PSBrTGF5ZXJSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlOyB9CisKKyAgICBpbmxp
bmUgTGF5ZXJUeXBlKiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSBjb25zdCB7IHJldHVybiAo
Km1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdClbbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJdLmdl
dCgpOyB9CisgICAgaW5saW5lIFJlbmRlclN1cmZhY2VUeXBlKiB0YXJnZXRSZW5kZXJTdXJmYWNl
KCkgY29uc3QgeyByZXR1cm4gdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCktPnJlbmRlclN1cmZh
Y2UoKTsgfQorICAgIGlubGluZSBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYgdGFy
Z2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gdGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpLT5sYXllckxpc3QoKTsgfQorCisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID09IG90aGVyLm1fdGFyZ2V0UmVuZGVyU3VyZmFj
ZUxheWVyCisgICAgICAgICAgICAmJiBtX2N1cnJlbnRMYXllciA9PSBvdGhlci5tX2N1cnJlbnRM
YXllcjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgaW50IGtJbnZhbGlkVGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVyID0gLTE7CisgICAgLy8gVGhpcyBtdXN0IGJlIC0xIHNpbmNlIHRoZSBpdGVy
YXRvciBhY3Rpb24gY29kZSBhc3N1bWVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gYmUKKyAgICAvLyBy
ZWFjaGVkIGJ5IHN1YnRyYWN0aW5nIG9uZSBmcm9tIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qg
bGF5ZXIgaW4gdGhlIGN1cnJlbnQKKyAgICAvLyB0YXJnZXQgc3VyZmFjZSdzIGNoaWxkIGxheWVy
IGxpc3QsIHdoaWNoIGlzIDAuCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtMYXllclJlcHJl
c2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2UgPSAodW5zaWduZWQpLTE7CisKKyAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAg
IGludCBtX3RhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRM
YXllcjsKK307CisKKy8vIEFuIGl0ZXJhdG9yIGNsYXNzIGZvciB3YWxraW5nIG92ZXIgbGF5ZXJz
IGluIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUuCisvLyBVc2UgdGhlIGJlZ2luKCkgYW5k
IGVuZCgpIGZ1bmN0aW9ucyB0byBnZXQgYW4gaXRlcmF0b3IgcmVsYXRpdmUgdG8gYSBnaXZlbiBs
aXN0IG9mIHJlbmRlclN1cmZhY2VMYXllcnMuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBl
LCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgSXRlcmF0b3JBY3Rpb25UeXBl
PgorY2xhc3MgQ0NMYXllckl0ZXJhdG9yIHsKKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxM
YXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBJdGVyYXRvckFjdGlvblR5cGU+IENDTGF5ZXJJ
dGVyYXRvclR5cGU7CisKK3B1YmxpYzoKKyAgICBDQ0xheWVySXRlcmF0b3IoKSA6IG1fcG9zaXRp
b24oMCksIG1fYWN0aW9ucygwKSB7IH0KKworICAgIHN0YXRpYyBDQ0xheWVySXRlcmF0b3JUeXBl
IGJlZ2luKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KSB7IHJldHVybiBDQ0xheWVySXRlcmF0b3JUeXBlKHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIHRydWUpOyB9CisgICAgc3RhdGljIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kKGNvbnN0IFZl
Y3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSB7IHJldHVy
biBDQ0xheWVySXRlcmF0b3JUeXBlKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGZhbHNlKTsgfQor
CisgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3BlcmF0b3IrKygpIHsgbV9hY3Rpb25zLT5uZXh0
KG1fcG9zaXRpb24pOyByZXR1cm4gKnRoaXM7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q0NMYXllckl0ZXJhdG9yVHlwZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24gPT0g
b3RoZXIubV9wb3NpdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDQ0xheWVySXRl
cmF0b3JUeXBlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKwor
ICAgIExheWVyVHlwZSogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExh
eWVyKCk7IH0KKyAgICBMYXllclR5cGUqIG9wZXJhdG9yKigpIHsgcmV0dXJuIG1fcG9zaXRpb24u
Y3VycmVudExheWVyKCk7IH0KKworICAgIGJvb2wgcmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZh
Y2UoKSB7IHJldHVybiBtX3Bvc2l0aW9uLnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCk7
IH0KKyAgICBib29sIHJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkgeyByZXR1
cm4gIXJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgJiYgbV9wb3NpdGlvbi5yZXByZXNl
bnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpOyB9CisgICAgYm9vbCByZXByZXNlbnRzSXRz
ZWxmKCkgeyByZXR1cm4gIXJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgJiYgIXJlcHJl
c2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCk7IH0KKworICAgIExheWVyVHlwZSogdGFy
Z2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgeyByZXR1cm4gbV9wb3NpdGlvbi50YXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXIoKTsgfQorCitwcml2YXRlOgorICAgIENDTGF5ZXJJdGVyYXRvcihjb25zdCBW
ZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgYm9vbCBz
dGFydCkKKyAgICAgICAgOiBtX3Bvc2l0aW9uKHJlbmRlclN1cmZhY2VMYXllckxpc3QpCisgICAg
ICAgICwgbV9hY3Rpb25zKG5ldyBJdGVyYXRvckFjdGlvblR5cGUoKSkKKyAgICB7CisgICAgICAg
IGlmIChzdGFydCAmJiAhcmVuZGVyU3VyZmFjZUxheWVyTGlzdC0+aXNFbXB0eSgpKQorICAgICAg
ICAgICAgbV9hY3Rpb25zLT5iZWdpbihtX3Bvc2l0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9hY3Rpb25zLT5lbmQobV9wb3NpdGlvbik7CisgICAgfQorCisgICAgQ0NMYXllckl0
ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4gbV9wb3NpdGlvbjsK
KyAgICBJdGVyYXRvckFjdGlvblR5cGUqIG1fYWN0aW9uczsKKworICAgIGZyaWVuZCBjbGFzcyBD
Q0xheWVySXRlcmF0b3JBY3Rpb25zOworfTsKKworLy8gT3JkZXJpbmdzIGZvciBpdGVyYXRpbmcg
b3ZlciB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVlLgorc3RydWN0IENDTGF5ZXJJdGVyYXRv
ckFjdGlvbnMgeworICAgIC8vIElmIFJlbmRlclN1cmZhY2UgQiBwYWludHMgaW50byBSZW5kZXJT
dXJmYWNlIEEsIHRoaXMgaXRlcmF0b3IgY2xhc3MgdmlzaXRzIGxheWVycyBpbiBCIGJlZm9yZSB2
aXNpdGluZyBsYXllcnMgaW4gQS4KKyAgICBjbGFzcyBEZXBlbmRlbmN5T3JkZXJlZCB7CisgICAg
cHVibGljOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBS
ZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBiZWdpbihDQ0xheWVySXRlcmF0b3JQb3Np
dGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQorICAgICAgICB7CisgICAg
ICAgICAgICBwb3MubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSBwb3MubV9yZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LT5zaXplKCkgLSAxOworICAgICAgICAgICAgcG9zLm1fY3VycmVudExheWVy
ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46
OmtMYXllclJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2U7CisgICAgICAgIH0KKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+CisgICAgICAgIHZvaWQgZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwg
UmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBvcy5tX3Rh
cmdldFJlbmRlclN1cmZhY2VMYXllciA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlw
ZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjprSW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXllcjsK
KyAgICAgICAgICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9u
PExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjprTGF5ZXJSZXByZXNlbnRpbmdUYXJnZXRS
ZW5kZXJTdXJmYWNlOworICAgICAgICB9CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXll
clR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIG5leHQoQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykK
KyAgICAgICAgeworICAgICAgICAgICAgKytwb3MubV9jdXJyZW50TGF5ZXI7CisgICAgICAgICAg
ICBpZiAocG9zLm1fY3VycmVudExheWVyID09IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRy
ZW4oKS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAtLXBvcy5tX3RhcmdldFJlbmRlclN1cmZh
Y2VMYXllcjsKKyAgICAgICAgICAgICAgICBwb3MubV9jdXJyZW50TGF5ZXIgPSBDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6a0xheWVyUmVwcmVz
ZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisKKyAgICAvLyBXYWxrcyBsYXllcnMgc29ydGVkIGJ5IHotb3JkZXIgZnJvbSBiYWNrIHRv
IGZyb250LgorICAgIGNsYXNzIEJhY2tUb0Zyb250IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgor
ICAgICAgICB2b2lkIGJlZ2luKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVu
ZGVyU3VyZmFjZVR5cGU+JiBwb3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBvcy5tX3Rhcmdl
dFJlbmRlclN1cmZhY2VMYXllciA9IDA7CisgICAgICAgICAgICBwb3MubV9jdXJyZW50TGF5ZXIg
PSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6
a0xheWVyUmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsKKyAgICAgICAgfQorICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlw
ZT4KKyAgICAgICAgdm9pZCBlbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKKyAgICAgICAgeworICAgICAgICAgICAgcG9zLm1fdGFy
Z2V0UmVuZGVyU3VyZmFjZUxheWVyID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBl
LCBSZW5kZXJTdXJmYWNlVHlwZT46OmtJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOwor
ICAgICAgICAgICAgcG9zLm1fY3VycmVudExheWVyID0gMDsKKyAgICAgICAgfQorICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4K
KyAgICAgICAgdm9pZCBuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVu
ZGVyU3VyZmFjZVR5cGU+JiBwb3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBj
dXJyZW50IGxheWVyIGhhcyBhIFJTLCBtb3ZlIHRvIGl0cyBsYXllciBsaXN0LiBPdGhlcndpc2Us
IHZpc2l0IHRoZSBuZXh0IGxheWVyIGluIHRoZSBjdXJyZW50IFJTIGxheWVyIGxpc3QuCisgICAg
ICAgICAgICBpZiAocG9zLnJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBTYXZlIG91ciBwb3NpdGlvbiBpbiB0aGUgY2hpbGRMYXllciBs
aXN0IGZvciB0aGUgUmVuZGVyU3VyZmFjZSwgdGhlbiBqdW1wIHRvIHRoZSBuZXh0IFJlbmRlclN1
cmZhY2UuCisgICAgICAgICAgICAgICAgbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJIaXN0b3J5
LmFwcGVuZChwb3MubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIpOworICAgICAgICAgICAgICAg
IG1fY3VycmVudExheWVySGlzdG9yeS5hcHBlbmQocG9zLm1fY3VycmVudExheWVyKTsKKworICAg
ICAgICAgICAgICAgIGZvciAoTGF5ZXJUeXBlKiBsYXllciA9IHBvcy5jdXJyZW50TGF5ZXIoKTsg
cG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpICE9IGxheWVyOyArK3Bvcy5tX3RhcmdldFJl
bmRlclN1cmZhY2VMYXllcikgeyB9CisgICAgICAgICAgICAgICAgcG9zLm1fY3VycmVudExheWVy
ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46
OmtMYXllclJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2U7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICsrcG9zLm1fY3VycmVudExheWVyOworICAgICAgICAgICAg
ICAgIHdoaWxlIChwb3MubV9jdXJyZW50TGF5ZXIgPT0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2VD
aGlsZHJlbigpLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBKdW1wIGJhY2sgdG8g
dGhlIHByZXZpb3VzIFJlbmRlclN1cmZhY2UsIGFuZCBnZXQgYmFjayB0aGUgcG9zaXRpb24gd2hl
cmUgd2Ugd2VyZSBpbiB0aGF0IGxpc3QsIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHBvc2l0aW9uIHRo
ZXJlLgorICAgICAgICAgICAgICAgICAgICBpZiAoIXBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VM
YXllcikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kIG9mIHRoZSBsaXN0CisgICAg
ICAgICAgICAgICAgICAgICAgICBwb3MubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSBDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6a0ludmFs
aWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBwb3Mu
bV9jdXJyZW50TGF5ZXIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBvcy5tX3RhcmdldFJlbmRl
clN1cmZhY2VMYXllciA9IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9yeS5sYXN0KCk7
CisgICAgICAgICAgICAgICAgICAgIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9yeS5y
ZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IG1f
Y3VycmVudExheWVySGlzdG9yeS5sYXN0KCkgKyAxOworICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRMYXllckhpc3RvcnkucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJIaXN0b3J5OworICAgICAgICBWZWN0b3I8dW5z
aWduZWQ+IG1fY3VycmVudExheWVySGlzdG9yeTsKKyAgICB9OworCisgICAgLy8gV2Fsa3MgbGF5
ZXJzIHNvcnRlZCBieSB6LW9yZGVyIGZyb20gYmFjayB0byBmcm9udC4KKyAgICBjbGFzcyBGcm9u
dFRvQmFjayB7CisgICAgcHVibGljOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJU
eXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBiZWdpbihDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQor
ICAgICAgICB7CisgICAgICAgICAgICBwb3MubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSAw
OworICAgICAgICAgICAgcG9zLm1fY3VycmVudExheWVyID0gcG9zLnRhcmdldFJlbmRlclN1cmZh
Y2VDaGlsZHJlbigpLnNpemUoKSAtIDE7CisgICAgICAgICAgICBnb1RvSGlnaGVzdEluU3VidHJl
ZShwb3MpOworICAgICAgICB9CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUs
IHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIGVuZChDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQorICAgICAg
ICB7CisgICAgICAgICAgICBwb3MubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSBDQ0xheWVy
SXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6a0ludmFsaWRU
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgICAgICAgICBwb3MubV9jdXJyZW50TGF5ZXIg
PSAwOworICAgICAgICB9CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5
cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIG5leHQoQ0NMYXllckl0ZXJh
dG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gTW92ZXMgdG8gdGhlIHByZXZpb3VzIGxheWVyIGluIHRoZSBjdXJy
ZW50IFJTIGxheWVyIGxpc3QuIFRoZW4gd2UgY2hlY2sgaWYgdGhlCisgICAgICAgICAgICAvLyBu
ZXcgY3VycmVudCBsYXllciBoYXMgaXRzIG93biBSUywgaW4gd2hpY2ggY2FzZSB0aGVyZSBhcmUg
dGhpbmdzIGluIHRoYXQgUlMgbGF5ZXIgbGlzdCB0aGF0IGFyZSBoaWdoZXIsIHNvCisgICAgICAg
ICAgICAvLyB3ZSBmaW5kIHRoZSBoaWdoZXN0IGxheWVyIGluIHRoYXQgc3VidHJlZS4KKyAgICAg
ICAgICAgIC8vIElmIHdlIG1vdmUgYmFjayBwYXN0IHRoZSBmcm9udCBvZiB0aGUgbGlzdCwgd2Ug
anVtcCB1cCB0byB0aGUgcHJldmlvdXMgUlMgbGF5ZXIgbGlzdCwgcGlja2luZyB1cCBhZ2FpbiB3
aGVyZSB3ZQorICAgICAgICAgICAgLy8gaGFkIHByZXZpb3VzbHkgcmVjdXJzZWQgaW50byB0aGUg
Y3VycmVudCBSUyBsYXllciBsaXN0LgorCisgICAgICAgICAgICBpZiAoIXBvcy5yZXByZXNlbnRz
VGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gU3VidHJhY3Rpbmcg
b25lIGhlcmUgd2lsbCBldmVudHVhbGx5IGNhdXNlIHRoZSBjdXJyZW50IGxheWVyIHRvIGJlY29t
ZSB0aGF0IGxheWVyCisgICAgICAgICAgICAgICAgLy8gcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQg
cmVuZGVyIHN1cmZhY2UuCisgICAgICAgICAgICAgICAgLS1wb3MubV9jdXJyZW50TGF5ZXI7Cisg
ICAgICAgICAgICAgICAgZ29Ub0hpZ2hlc3RJblN1YnRyZWUocG9zKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHBvcy5yZXByZXNlbnRzVGFyZ2V0UmVuZGVy
U3VyZmFjZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcG9zLm1fdGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmQgb2YgdGhlIGxp
c3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXll
ciA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+
OjprSW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcG9zLm1fdGFy
Z2V0UmVuZGVyU3VyZmFjZUxheWVyID0gbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJIaXN0b3J5
Lmxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJI
aXN0b3J5LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgcG9zLm1fY3VycmVudExh
eWVyID0gbV9jdXJyZW50TGF5ZXJIaXN0b3J5Lmxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9jdXJyZW50TGF5ZXJIaXN0b3J5LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAg
ICB2b2lkIGdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVy
VHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChwb3MucmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB3aGlsZSAocG9zLnJlcHJlc2VudHNDb250cmlidXRpbmdSZW5k
ZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgICAgICBtX3RhcmdldFJlbmRlclN1cmZhY2VMYXll
ckhpc3RvcnkuYXBwZW5kKHBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllcik7CisgICAgICAg
ICAgICAgICAgbV9jdXJyZW50TGF5ZXJIaXN0b3J5LmFwcGVuZChwb3MubV9jdXJyZW50TGF5ZXIp
OworCisgICAgICAgICAgICAgICAgZm9yIChMYXllclR5cGUqIGxheWVyID0gcG9zLmN1cnJlbnRM
YXllcigpOyBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgIT0gbGF5ZXI7ICsrcG9zLm1f
dGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKSB7IH0KKyAgICAgICAgICAgICAgICBwb3MubV9jdXJy
ZW50TGF5ZXIgPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6ZSgpIC0gMTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV90
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJIaXN0b3J5OworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+
IG1fY3VycmVudExheWVySGlzdG9yeTsKKyAgICB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDI5Yzgx
YWE1NTUwMDYyNjAyZjZmOGRhM2RmNDMxYTZjZGQzYWFjZTIuLjJiNTFmY2FkN2Y3MmFlZTQyNjBl
OTFmMzViYzYyNmY4NGU2MjAzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCisjaW5j
bHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUg
ImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKQEAgLTQzMyw1NyArNDM0LDQxIEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNo
cm9taXVtKiByZW5kZXJTCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVu
dHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBQYWludFR5cGUgcGFp
bnRUeXBlKQogewotICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXll
ckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewot
ICAgICAgICBMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VDaHJv
bWl1bSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgp
OwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJT
dXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsKLQotICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9y
UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5ZXIsIHBhaW50VHlwZSk7Ci0KLSAgICAgICAg
Y29uc3QgTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVy
TGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgewotICAgICAgICAgICAgTGF5ZXJDaHJvbWl1bSog
bGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7Ci0KLSAgICAgICAgICAgIC8vIExh
eWVycyB0aGF0IHN0YXJ0IGEgbmV3IHJlbmRlciBzdXJmYWNlIHdpbGwgYmUgcGFpbnRlZCB3aGVu
IHRoZSByZW5kZXIKLSAgICAgICAgICAgIC8vIHN1cmZhY2UncyBsaXN0IGlzIHByb2Nlc3NlZC4K
LSAgICAgICAgICAgIGlmIChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250
cmlidXRlc1RvVGFyZ2V0PExheWVyQ2hyb21pdW0+KGxheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXIt
PmlkKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBBU1NFUlQo
IWxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpOwotCi0gICAgICAgICAgICBwYWludENvbnRlbnRz
SWZEaXJ0eShsYXllciwgcGFpbnRUeXBlKTsKKyAgICAvLyBVc2UgRnJvbnRUb0JhY2sgdG8gYWxs
b3cgZm9yIHRlc3Rpbmcgb2NjbHVzaW9uIGFuZCBwZXJmb3JtaW5nIGN1bGxpbmcgZHVyaW5nIHRo
ZSB0cmVlIHdhbGsuCisgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwg
UmVuZGVyU3VyZmFjZUNocm9taXVtLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFj
az4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0g
Q0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBm
b3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigm
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAo
aXQucmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAgICAgQVNTRVJU
KGl0LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkpOworICAgICAgICAgICAgcGFpbnRN
YXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoKml0LCBwYWludFR5cGUpOworICAgICAgICB9
IGVsc2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkgeworICAgICAgICAgICAgQVNTRVJUKGl0
LT5vcGFjaXR5KCkpOworICAgICAgICAgICAgQVNTRVJUKCFpdC0+Ym91bmRzKCkuaXNFbXB0eSgp
KTsKKyAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KCppdCwgcGFpbnRUeXBlKTsKICAg
ICAgICAgfQogICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIENDVGV4dHVyZVVwZGF0ZXIm
IHVwZGF0ZXIpCiB7Ci0gICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gbV91cGRhdGVMaXN0LnNp
emUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAg
TGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gbV91cGRhdGVMaXN0W3N1cmZhY2VJ
bmRleF0uZ2V0KCk7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFj
ZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICBBU1NFUlQo
cmVuZGVyU3VyZmFjZSk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0
eSgpKTsKLQotICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkKLSAg
ICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7Ci0KLSAgICAgICAgaWYgKHJlbmRlclN1cmZh
Y2VMYXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXll
ci0+cmVwbGljYUxheWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwgdXBk
YXRlcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXIt
PnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJTdXJm
YWNlTGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhjb250ZXh0LCB1cGRhdGVyKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Y29uc3QgTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVy
TGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgewotICAgICAgICAgICAgTGF5ZXJDaHJvbWl1bSog
bGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7Ci0KLSAgICAgICAgICAgIGlmIChD
Q0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0PExh
eWVyQ2hyb21pdW0+KGxheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCkpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhjb250ZXh0LCB1cGRhdGVyKTsKLSAgICAgICAgfQorICAgIC8vIFVzZSBEZXBlbmRl
bmN5T3JkZXJlZCBzaW5jZSBpdCBpcyBjaGVhcCB0byB0cmF2ZXJzZSBhbmQgdGhlIG9yZGVyaW5n
IGRvZXMgbm90IG1hdHRlci4KKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9t
aXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkRlcGVu
ZGVuY3lPcmRlcmVkPiBDQ0xheWVySXRlcmF0b3JUeXBlOworCisgICAgQ0NMYXllckl0ZXJhdG9y
VHlwZSBlbmQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjplbmQoJm1fdXBkYXRlTGlzdCk7CisgICAg
Zm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4o
Jm1fdXBkYXRlTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQucmVwcmVz
ZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAgICAgQVNTRVJUKGl0LT5yZW5k
ZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkpOworICAgICAgICAgICAgaWYgKGl0LT5tYXNrTGF5
ZXIoKSkKKyAgICAgICAgICAgICAgICBpdC0+bWFza0xheWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7CisKKyAgICAgICAgICAgIGlmIChpdC0+cmVwbGlj
YUxheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBpdC0+cmVwbGljYUxheWVyKCktPnVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7CisgICAgICAgICAgICAgICAgaWYg
KGl0LT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCisgICAgICAgICAgICAgICAgICAgIGl0
LT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
Y29udGV4dCwgdXBkYXRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXQu
cmVwcmVzZW50c0l0c2VsZigpKQorICAgICAgICAgICAgaXQtPnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoY29udGV4dCwgdXBkYXRlcik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21t
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCA1NjUwOWJjZWMzYzYxZTJkZmUxNjY0YWI0MTY1
ZjQyOTM3MzkzZTFiLi5jNTg1M2I4MjczMGU5ZDY5MzcyODNhNDZlYjc5NmUzNDAwZjlhMTYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVk
ZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgog
I2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZS5oIgogCkBAIC00NzEsMTUgKzQ3MiwxNCBAQCBz
dGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChM
YXllclR5cGUqIGxheWVyLCBMYXllcgogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KIHN0YXRpYyB2b2lkIHdhbGtMYXllcnNBbmRDYWxjdWxh
dGVWaXNpYmxlTGF5ZXJSZWN0cyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJm
YWNlSW5kZXgpIHsKLSAgICAgICAgTGF5ZXJUeXBlKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Ci0gICAgICAgIFJlbmRlclN1
cmZhY2VUeXBlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJm
YWNlKCk7Ci0KLSAgICAgICAgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIGxheWVyTGlzdCA9
IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVy
SW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7
Ci0gICAgICAgICAgICBMYXllclR5cGUqIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdl
dCgpOwotICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0PExheWVyVHlwZT4obGF5ZXIpOwot
ICAgICAgICAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxheWVyUmVjdCk7
CisgICAgLy8gVXNlIERlcGVuZGVuY3lPcmRlcmVkIHNpbmNlIGl0IGlzIGNoZWFwIHRvIHRyYXZl
cnNlIGFuZCB0aGUgb3JkZXJpbmcgZG9lcyBub3QgbWF0dGVyLgorICAgIHR5cGVkZWYgQ0NMYXll
ckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkRlcGVuZGVuY3lPcmRlcmVkPiBDQ0xheWVySXRlcmF0b3JUeXBlOworCisgICAgQ0NM
YXllckl0ZXJhdG9yVHlwZSBlbmQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjplbmQoJnJlbmRlclN1
cmZhY2VMYXllckxpc3QpOworICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5
ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIGlmICghaXQucmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2Uo
KSkgeworICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0PExheWVyVHlwZT4oKml0KTsKKyAg
ICAgICAgICAgIGl0LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOwogICAg
ICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggYjJkMDE1
YTQwOThhMjAwZjc2YTM4MDM0NTRhZGJkZmU1OTVkMGJiYy4uY2M5MGU0ZTIxOWMxNzRlNGU2Yjdk
MzUwNDQwNmRhZGRkYjc5NzI1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01
OSw2ICs1OSw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2VkVGltZVNvdXJjZVRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCcsCisgICAgICAgICAg
ICAndGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ND
TGF5ZXJRdWFkVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJTb3J0ZXJUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0
b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9y
VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzgzYmE1M2VjMmExNTIyZWQzZTM4ZTdlYzk4ODY3ZjA5ZGE1
OWZjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllckl0ZXJhdG9yVGVzdC5jcHAKQEAgLTAsMCArMSwzMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgorCisj
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5oIgorI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyA6OnRlc3Rpbmc6Ok1vY2s7Cit1
c2luZyA6OnRlc3Rpbmc6Ol87Cit1c2luZyA6OnRlc3Rpbmc6OkF0TGVhc3Q7Cit1c2luZyA6OnRl
c3Rpbmc6OkFueU51bWJlcjsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVGVzdExheWVyQ2hyb21p
dW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGVzdExheWVyQ2hyb21pdW0+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXN0
TGF5ZXJDaHJvbWl1bSgpKTsgfQorCisgICAgaW50IG1fY291bnRSZXByZXNlbnRpbmdUYXJnZXRT
dXJmYWNlOworICAgIGludCBtX2NvdW50UmVwcmVzZW50aW5nQ29udHJpYnV0aW5nU3VyZmFjZTsK
KyAgICBpbnQgbV9jb3VudFJlcHJlc2VudGluZ0l0c2VsZjsKKworICAgIHZpcnR1YWwgYm9vbCBk
cmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2RyYXdzQ29udGVudDsgfQorICAgIHZvaWQg
c2V0RHJhd3NDb250ZW50KGJvb2wgZHJhd3NDb250ZW50KSB7IG1fZHJhd3NDb250ZW50ID0gZHJh
d3NDb250ZW50OyB9CisKK3ByaXZhdGU6CisgICAgVGVzdExheWVyQ2hyb21pdW0oKQorICAgICAg
ICA6IExheWVyQ2hyb21pdW0oMCkKKyAgICAgICAgLCBtX2RyYXdzQ29udGVudCh0cnVlKQorICAg
IHsKKyAgICAgICAgc2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgc2V0RHJh
d2FibGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CisgICAgfQorCisgICAg
Ym9vbCBtX2RyYXdzQ29udGVudDsKK307CisKKyNkZWZpbmUgRVhQRUNUX0NPVU5UKGxheWVyLCB0
YXJnZXQsIGNvbnRyaWIsIGl0c2VsZikgXAorICAgIEVYUEVDVF9FUSh0YXJnZXQsIGxheWVyLT5t
X2NvdW50UmVwcmVzZW50aW5nVGFyZ2V0U3VyZmFjZSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1Rf
RVEoY29udHJpYiwgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdDb250cmlidXRpbmdTdXJmYWNl
KTsgICBcCisgICAgRVhQRUNUX0VRKGl0c2VsZiwgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdJ
dHNlbGYpOworCit0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0sIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkRlcGVuZGVuY3lPcmRlcmVk
PiBEZXBlbmRlbmN5T3JkZXJlZDsKK3R5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21p
dW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRU
b0JhY2s+IEZyb250VG9CYWNrOwordHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1
bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9G
cm9udD4gQmFja1RvRnJvbnQ7CisKK3ZvaWQgcmVzZXRDb3VudHMoVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIGZvciAoRGVwZW5k
ZW5jeU9yZGVyZWQgaXQgPSBEZXBlbmRlbmN5T3JkZXJlZDo6YmVnaW4ocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7IGl0ICE9IERlcGVuZGVuY3lPcmRlcmVkOjplbmQocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7ICsraXQpIHsKKyAgICAgICAgVGVzdExheWVyQ2hyb21pdW0qIGxheWVyID0gc3RhdGlj
X2Nhc3Q8VGVzdExheWVyQ2hyb21pdW0qPigqaXQpOworICAgICAgICBsYXllci0+bV9jb3VudFJl
cHJlc2VudGluZ1RhcmdldFN1cmZhY2UgPSAtMTsKKyAgICAgICAgbGF5ZXItPm1fY291bnRSZXBy
ZXNlbnRpbmdDb250cmlidXRpbmdTdXJmYWNlID0gLTE7CisgICAgICAgIGxheWVyLT5tX2NvdW50
UmVwcmVzZW50aW5nSXRzZWxmID0gLTE7CisgICAgfQorfQorCit2b2lkIGl0ZXJhdGVEZXBlbmRl
bmN5T3JkZXJlZChWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4qIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpCit7CisgICAgcmVzZXRDb3VudHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Cisg
ICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKERlcGVuZGVuY3lPcmRlcmVkIGl0ID0gRGVwZW5k
ZW5jeU9yZGVyZWQ6OmJlZ2luKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBEZXBlbmRl
bmN5T3JkZXJlZDo6ZW5kKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOyArK2l0LCArK2NvdW50KSB7
CisgICAgICAgIFRlc3RMYXllckNocm9taXVtKiBsYXllciA9IHN0YXRpY19jYXN0PFRlc3RMYXll
ckNocm9taXVtKj4oKml0KTsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJT
dXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ1RhcmdldFN1
cmZhY2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNDb250cmlidXRpbmdSZW5k
ZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ0NvbnRy
aWJ1dGluZ1N1cmZhY2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYo
KSkKKyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nSXRzZWxmID0gY291bnQ7
CisgICAgfQorfQorCit2b2lkIGl0ZXJhdGVGcm9udFRvQmFjayhWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgcmVzZXRDb3VudHMo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKEZy
b250VG9CYWNrIGl0ID0gRnJvbnRUb0JhY2s6OmJlZ2luKHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OyBpdCAhPSBGcm9udFRvQmFjazo6ZW5kKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOyArK2l0LCAr
K2NvdW50KSB7CisgICAgICAgIFRlc3RMYXllckNocm9taXVtKiBsYXllciA9IHN0YXRpY19jYXN0
PFRlc3RMYXllckNocm9taXVtKj4oKml0KTsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJn
ZXRSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2VudGlu
Z1RhcmdldFN1cmZhY2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNDb250cmli
dXRpbmdSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2Vu
dGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2Vu
dHNJdHNlbGYoKSkKKyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nSXRzZWxm
ID0gY291bnQ7CisgICAgfQorfQorCit2b2lkIGl0ZXJhdGVCYWNrVG9Gcm9udChWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgcmVz
ZXRDb3VudHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgaW50IGNvdW50ID0gMDsKKyAg
ICBmb3IgKEJhY2tUb0Zyb250IGl0ID0gQmFja1RvRnJvbnQ6OmJlZ2luKHJlbmRlclN1cmZhY2VM
YXllckxpc3QpOyBpdCAhPSBCYWNrVG9Gcm9udDo6ZW5kKHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OyArK2l0LCArK2NvdW50KSB7CisgICAgICAgIFRlc3RMYXllckNocm9taXVtKiBsYXllciA9IHN0
YXRpY19jYXN0PFRlc3RMYXllckNocm9taXVtKj4oKml0KTsKKyAgICAgICAgaWYgKGl0LnJlcHJl
c2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJl
cHJlc2VudGluZ1RhcmdldFN1cmZhY2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2Vu
dHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3Vu
dFJlcHJlc2VudGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0
LnJlcHJlc2VudHNJdHNlbGYoKSkKKyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50
aW5nSXRzZWxmID0gY291bnQ7CisgICAgfQorfQorCitURVNUKENDTGF5ZXJJdGVyYXRvclRlc3Qs
IHNpbXBsZVRyZWUpCit7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290TGF5ZXIg
PSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9t
aXVtPiBmaXJzdCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVz
dExheWVyQ2hyb21pdW0+IHNlY29uZCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHRoaXJkID0gVGVzdExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gZm91cnRoID0gVGVzdExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOworCisgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CisKKyAgICByb290TGF5ZXItPmFkZENoaWxkKGZpcnN0KTsKKyAgICByb290TGF5ZXItPmFk
ZENoaWxkKHNlY29uZCk7CisgICAgcm9vdExheWVyLT5hZGRDaGlsZCh0aGlyZCk7CisgICAgcm9v
dExheWVyLT5hZGRDaGlsZChmb3VydGgpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IGxheWVyTGlzdDsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChy
b290TGF5ZXIpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CisKKyAg
ICBpdGVyYXRlRGVwZW5kZW5jeU9yZGVyZWQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAg
IEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDAsIC0xLCAxKTsKKyAgICBFWFBFQ1RfQ09VTlQoZmly
c3QsIC0xLCAtMSwgMik7CisgICAgRVhQRUNUX0NPVU5UKHNlY29uZCwgLTEsIC0xLCAzKTsKKyAg
ICBFWFBFQ1RfQ09VTlQodGhpcmQsIC0xLCAtMSwgNCk7CisgICAgRVhQRUNUX0NPVU5UKGZvdXJ0
aCwgLTEsIC0xLCA1KTsKKworICAgIGl0ZXJhdGVCYWNrVG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3RMYXllciwgMCwgLTEsIDEpOworICAgIEVY
UEVDVF9DT1VOVChmaXJzdCwgLTEsIC0xLCAyKTsKKyAgICBFWFBFQ1RfQ09VTlQoc2Vjb25kLCAt
MSwgLTEsIDMpOworICAgIEVYUEVDVF9DT1VOVCh0aGlyZCwgLTEsIC0xLCA0KTsKKyAgICBFWFBF
Q1RfQ09VTlQoZm91cnRoLCAtMSwgLTEsIDUpOworCisgICAgaXRlcmF0ZUZyb250VG9CYWNrKCZy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCA1LCAt
MSwgNCk7CisgICAgRVhQRUNUX0NPVU5UKGZpcnN0LCAtMSwgLTEsIDMpOworICAgIEVYUEVDVF9D
T1VOVChzZWNvbmQsIC0xLCAtMSwgMik7CisgICAgRVhQRUNUX0NPVU5UKHRoaXJkLCAtMSwgLTEs
IDEpOworICAgIEVYUEVDVF9DT1VOVChmb3VydGgsIC0xLCAtMSwgMCk7CisKK30KKworVEVTVChD
Q0xheWVySXRlcmF0b3JUZXN0LCBjb21wbGV4VHJlZSkKK3sKKyAgICBSZWZQdHI8VGVzdExheWVy
Q2hyb21pdW0+IHJvb3RMYXllciA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QxID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIgPSBUZXN0TGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MyA9IFRl
c3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+
IHJvb3QyMSA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExh
eWVyQ2hyb21pdW0+IHJvb3QyMiA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QyMyA9IFRlc3RMYXllckNocm9taXVtOjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QyMjEgPSBUZXN0TGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MjMx
ID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworCisgICAgcm9vdExheWVyLT5jcmVhdGVS
ZW5kZXJTdXJmYWNlKCk7CisKKyAgICByb290TGF5ZXItPmFkZENoaWxkKHJvb3QxKTsKKyAgICBy
b290TGF5ZXItPmFkZENoaWxkKHJvb3QyKTsKKyAgICByb290TGF5ZXItPmFkZENoaWxkKHJvb3Qz
KTsKKyAgICByb290Mi0+YWRkQ2hpbGQocm9vdDIxKTsKKyAgICByb290Mi0+YWRkQ2hpbGQocm9v
dDIyKTsKKyAgICByb290Mi0+YWRkQ2hpbGQocm9vdDIzKTsKKyAgICByb290MjItPmFkZENoaWxk
KHJvb3QyMjEpOworICAgIHJvb3QyMy0+YWRkQ2hpbGQocm9vdDIzMSk7CisKKyAgICBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbGF5ZXJMaXN0OworICAgIHJlbmRlclN1cmZhY2VM
YXllckxpc3QuYXBwZW5kKHJvb3RMYXllcik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLmdldCgpLCByb290
TGF5ZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMjU2KTsKKworICAgIGl0ZXJhdGVEZXBlbmRlbmN5T3JkZXJlZCgmcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3RMYXllciwgMCwgLTEsIDEpOworICAg
IEVYUEVDVF9DT1VOVChyb290MSwgLTEsIC0xLCAyKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIs
IC0xLCAtMSwgMyk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMSwgLTEsIC0xLCA0KTsKKyAgICBF
WFBFQ1RfQ09VTlQocm9vdDIyLCAtMSwgLTEsIDUpOworICAgIEVYUEVDVF9DT1VOVChyb290MjIx
LCAtMSwgLTEsIDYpOworICAgIEVYUEVDVF9DT1VOVChyb290MjMsIC0xLCAtMSwgNyk7CisgICAg
RVhQRUNUX0NPVU5UKHJvb3QyMzEsIC0xLCAtMSwgOCk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3Qz
LCAtMSwgLTEsIDkpOworCisgICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7CisgICAgRVhQ
RUNUX0NPVU5UKHJvb3QxLCAtMSwgLTEsIDIpOworICAgIEVYUEVDVF9DT1VOVChyb290MiwgLTEs
IC0xLCAzKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIxLCAtMSwgLTEsIDQpOworICAgIEVYUEVD
VF9DT1VOVChyb290MjIsIC0xLCAtMSwgNSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMjEsIC0x
LCAtMSwgNik7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMywgLTEsIC0xLCA3KTsKKyAgICBFWFBF
Q1RfQ09VTlQocm9vdDIzMSwgLTEsIC0xLCA4KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDMsIC0x
LCAtMSwgOSk7CisKKyAgICBpdGVyYXRlRnJvbnRUb0JhY2soJnJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDksIC0xLCA4KTsKKyAgICBFWFBFQ1Rf
Q09VTlQocm9vdDEsIC0xLCAtMSwgNyk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyLCAtMSwgLTEs
IDYpOworICAgIEVYUEVDVF9DT1VOVChyb290MjEsIC0xLCAtMSwgNSk7CisgICAgRVhQRUNUX0NP
VU5UKHJvb3QyMiwgLTEsIC0xLCA0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyMSwgLTEsIC0x
LCAzKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIzLCAtMSwgLTEsIDIpOworICAgIEVYUEVDVF9D
T1VOVChyb290MjMxLCAtMSwgLTEsIDEpOworICAgIEVYUEVDVF9DT1VOVChyb290MywgLTEsIC0x
LCAwKTsKKworfQorCitURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIGNvbXBsZXhUcmVlTXVsdGlT
dXJmYWNlKQoreworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0gVGVz
dExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4g
cm9vdDEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXll
ckNocm9taXVtPiByb290MiA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QzID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIxID0gVGVzdExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIyID0gVGVz
dExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4g
cm9vdDIzID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5
ZXJDaHJvbWl1bT4gcm9vdDIyMSA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QyMzEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCk7CisKKyAgICByb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAgIHJv
b3RMYXllci0+YWRkQ2hpbGQocm9vdDEpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDIp
OworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDMpOworICAgIHJvb3QyLT5zZXREcmF3c0Nv
bnRlbnQoZmFsc2UpOworICAgIHJvb3QyLT5zZXRPcGFjaXR5KDAuNWYpOyAvLyBGb3JjZSB0aGUg
bGF5ZXIgdG8gb3duIGEgbmV3IHN1cmZhY2UuCisgICAgcm9vdDItPmFkZENoaWxkKHJvb3QyMSk7
CisgICAgcm9vdDItPmFkZENoaWxkKHJvb3QyMik7CisgICAgcm9vdDItPmFkZENoaWxkKHJvb3Qy
Myk7CisgICAgcm9vdDIyLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIHJvb3QyMi0+YWRkQ2hpbGQo
cm9vdDIyMSk7CisgICAgcm9vdDIzLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIHJvb3QyMy0+YWRk
Q2hpbGQocm9vdDIzMSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
bGF5ZXJMaXN0OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllcik7
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKworICAgIGl0ZXJhdGVE
ZXBlbmRlbmN5T3JkZXJlZCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0NP
VU5UKHJvb3QyMywgMCwgOSwgMSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMzEsIC0xLCAtMSwg
Mik7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMiwgMywgOCwgNCk7CisgICAgRVhQRUNUX0NPVU5U
KHJvb3QyMjEsIC0xLCAtMSwgNSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyLCA2LCAxMywgLTEp
OworICAgIEVYUEVDVF9DT1VOVChyb290MjEsIC0xLCAtMSwgNyk7CisgICAgRVhQRUNUX0NPVU5U
KHJvb3RMYXllciwgMTAsIC0xLCAxMSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QxLCAtMSwgLTEs
IDEyKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDMsIC0xLCAtMSwgMTQpOworCisgICAgaXRlcmF0
ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09VTlQo
cm9vdExheWVyLCAwLCAtMSwgMSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QxLCAtMSwgLTEsIDIp
OworICAgIEVYUEVDVF9DT1VOVChyb290MiwgNCwgMywgLTEpOworICAgIEVYUEVDVF9DT1VOVChy
b290MjEsIC0xLCAtMSwgNSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMiwgNywgNiwgOCk7Cisg
ICAgRVhQRUNUX0NPVU5UKHJvb3QyMjEsIC0xLCAtMSwgOSk7CisgICAgRVhQRUNUX0NPVU5UKHJv
b3QyMywgMTEsIDEwLCAxMik7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMzEsIC0xLCAtMSwgMTMp
OworICAgIEVYUEVDVF9DT1VOVChyb290MywgLTEsIC0xLCAxNCk7CisKKyAgICBpdGVyYXRlRnJv
bnRUb0JhY2soJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9DT1VOVChyb290
TGF5ZXIsIDE0LCAtMSwgMTMpOworICAgIEVYUEVDVF9DT1VOVChyb290MSwgLTEsIC0xLCAxMik7
CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyLCAxMCwgMTEsIC0xKTsKKyAgICBFWFBFQ1RfQ09VTlQo
cm9vdDIxLCAtMSwgLTEsIDkpOworICAgIEVYUEVDVF9DT1VOVChyb290MjIsIDcsIDgsIDYpOwor
ICAgIEVYUEVDVF9DT1VOVChyb290MjIxLCAtMSwgLTEsIDUpOworICAgIEVYUEVDVF9DT1VOVChy
b290MjMsIDMsIDQsIDIpOworICAgIEVYUEVDVF9DT1VOVChyb290MjMxLCAtMSwgLTEsIDEpOwor
ICAgIEVYUEVDVF9DT1VOVChyb290MywgLTEsIC0xLCAwKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120478</attachid>
            <date>2011-12-23 13:56:44 -0800</date>
            <delta_ts>2011-12-23 14:04:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74203-20111223165642.patch</filename>
            <type>text/plain</type>
            <size>46752</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTIzZDAwNThmOGY4NzQz
ZTcwNWM0NjdhNDMxNWM1Zjk4MjMyZTI1Yi4uYTFkM2JiZjQ5ZjM0MmNkMDQyOWU2YTE2NjNlYTYz
Mjg3NjY2YTllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTIzICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdW5pdCB0ZXN0OiBDQ0xh
eWVySXRlcmF0b3JUZXN0LmNwcAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1Rv
RnJvbnQ6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6
OkJhY2tUb0Zyb250OjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0
aW9uczo6QmFja1RvRnJvbnQ6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJh
dG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6Om5leHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmdvVG9IaWdoZXN0SW5T
dWJ0cmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SXRlcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3Np
dGlvbjo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckl0ZXJhdG9yUG9zaXRpb246OmN1cnJlbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjo6Y3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1Jl
bmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246
OmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjp0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OnRhcmdldFJlbmRl
clN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OnRh
cmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRl
cmF0b3I6OkNDTGF5ZXJJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0
b3I6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
dGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6
Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OnJlcHJlc2Vu
dHNUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRv
cjo6cmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckl0ZXJhdG9yOjpyZXByZXNlbnRzSXRzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJdGVyYXRvcjo6dGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2Fsa0xheWVyc0FuZENhbGN1bGF0ZVZpc2li
bGVMYXllclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuaDoKKwogMjAxMS0xMi0yMiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgogCiAgICAgICAgIE1vcmUgU2Nyb2xsQW5pbWF0b3JNYWMgY2xlYW51cApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBmNDA3MWEyNTcyMTEyOGMwZjNlZDVlOWUyYmRl
YjVjNGM2MmQ1NmEzLi4wN2IzODQ3NWY2ZGFmZTQ5MDAyMjRiZDQ1ZTUyMDI2OTg0MmY1YzRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDExLTEyLTIzICBE
YW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwOiBBZGRlZC4KKwogMjAxMS0x
Mi0yMSAgUGV0ZXIgS290d2ljeiAgPHBrb3R3aWN6QGdvb2dsZS5jb20+CiAKICAgICAgICAgUGx1
bWJzIHJlZnJlc2ggcmF0ZSB0aHJvdWdoIFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggNzZjODljZGU1MmJiNTYxNDUyMzE4NDAzZDgyOWI1YjI0OTFlZDdmMy4u
YWE4M2Q5YzkyNTA3NzVhNmU1YzdmNzEzMzM5NjljODYwMTY3NjVlOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMzYyMSw2ICszNjIxLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFk
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJT
b3J0ZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggOTNlOGQ4
NmM2NzE3MWMyNzdlYzE3NWM2MTlkYmU4ODBiNzJmNDE4Yi4uZDE5NTdiYmI1MDE1YWY4ZWJlNmQ3
MjlhN2YzYjBlMGYyYzM1MTRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgK
QEAgLTM5LDYgKzM5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0xheWVy
SXRlcmF0b3JBY3Rpb25zOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTsKIGNsYXNzIE1hbmFnZWRUZXh0dXJlOwpAQCAtOTYsNiArOTcsMTEgQEAgcHJp
dmF0ZToKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKICAgICBJ
bnRSZWN0IG1fY2xpcFJlY3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG1f
bGF5ZXJMaXN0OworCisgICAgLy8gRm9yIENDTGF5ZXJJdGVyYXRvckFjdGlvbnMKKyAgICBpbnQg
bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJIaXN0b3J5OworICAgIHVuc2lnbmVkIG1fY3VycmVu
dExheWVySGlzdG9yeTsKKyAgICBmcmllbmQgY2xhc3MgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkYjYy
NGZmMjFlNmU5MDQwNGI0ODQ2NWZjZGEyMGQxMmVkNWE1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0
b3IuY3BwCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9D
Q0xheWVySXRlcmF0b3IuaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgor
I2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBl
Pgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6YmVnaW4oQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3sK
KyAgICBwb3MubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSAwOworICAgIHBvcy5tX2N1cnJl
bnRMYXllciA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFj
ZVR5cGU+OjprTGF5ZXJSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlOworCisgICAgbV9o
aWdoZXN0VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0gMDsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJ
dGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248
TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3sKKyAgICBwb3MubV90YXJnZXRS
ZW5kZXJTdXJmYWNlTGF5ZXIgPSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlPjo6a0ludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAg
cG9zLm1fY3VycmVudExheWVyID0gMDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlw
ZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlv
bnM6OkJhY2tUb0Zyb250OjpuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwg
UmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit7CisgICAgLy8gSWYgdGhlIGN1cnJlbnQgbGF5ZXIg
aGFzIGEgUlMsIG1vdmUgdG8gaXRzIGxheWVyIGxpc3QuIE90aGVyd2lzZSwgdmlzaXQgdGhlIG5l
eHQgbGF5ZXIgaW4gdGhlIGN1cnJlbnQgUlMgbGF5ZXIgbGlzdC4KKyAgICBpZiAocG9zLmN1cnJl
bnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAg
Ly8gU2F2ZSBvdXIgcG9zaXRpb24gaW4gdGhlIGNoaWxkTGF5ZXIgbGlzdCBmb3IgdGhlIFJlbmRl
clN1cmZhY2UsIHRoZW4ganVtcCB0byB0aGUgbmV4dCBSZW5kZXJTdXJmYWNlLiBTYXZlIHdoZXJl
IHdlCisgICAgICAgIC8vIGNhbWUgZnJvbSBpbiB0aGUgbmV4dCBSZW5kZXJTdXJmYWNlIHNvIHdl
IGNhbiBnZXQgYmFjayB0byBpdC4KKyAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2UoKS0+
bV9jdXJyZW50TGF5ZXJIaXN0b3J5ID0gcG9zLm1fY3VycmVudExheWVyOworICAgICAgICBpbnQg
cHJldmlvdXNUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSBwb3MubV90YXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXI7CisKKyAgICAgICAgcG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0gKytt
X2hpZ2hlc3RUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgICAgIHBvcy5tX2N1cnJlbnRM
YXllciA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5
cGU+OjprTGF5ZXJSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlOworCisgICAgICAgIHBv
cy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9y
eSA9IHByZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgIH0gZWxzZSB7CisgICAg
ICAgICsrcG9zLm1fY3VycmVudExheWVyOworICAgICAgICB3aGlsZSAocG9zLm1fY3VycmVudExh
eWVyID09IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCkpIHsKKyAgICAg
ICAgICAgIC8vIEp1bXAgYmFjayB0byB0aGUgcHJldmlvdXMgUmVuZGVyU3VyZmFjZSwgYW5kIGdl
dCBiYWNrIHRoZSBwb3NpdGlvbiB3aGVyZSB3ZSB3ZXJlIGluIHRoYXQgbGlzdCwgYW5kIG1vdmUg
dG8gdGhlIG5leHQgcG9zaXRpb24gdGhlcmUuCisgICAgICAgICAgICBpZiAoIXBvcy5tX3Rhcmdl
dFJlbmRlclN1cmZhY2VMYXllcikgeworICAgICAgICAgICAgICAgIC8vIEVuZCBvZiB0aGUgbGlz
dAorICAgICAgICAgICAgICAgIHBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjprSW52YWxp
ZFRhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICAgICAgICAgICAgICBwb3MubV9jdXJyZW50
TGF5ZXIgPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IHBvcy50YXJnZXRSZW5kZXJT
dXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9yeTsKKyAgICAgICAgICAg
IHBvcy5tX2N1cnJlbnRMYXllciA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVu
dExheWVySGlzdG9yeSArIDE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ0xheWVy
SXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRp
b248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3sKKyAgICBwb3MubV90YXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSAwOworICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IHBvcy50
YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCkgLSAxOworICAgIGdvVG9IaWdoZXN0
SW5TdWJ0cmVlKHBvcyk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVu
YW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9u
dFRvQmFjazo6ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3Vy
ZmFjZVR5cGU+JiBwb3MpCit7CisgICAgcG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0g
Q0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmtJ
bnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgIHBvcy5tX2N1cnJlbnRMYXllciA9
IDA7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1
cmZhY2VUeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6bmV4
dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYg
cG9zKQoreworICAgIC8vIE1vdmVzIHRvIHRoZSBwcmV2aW91cyBsYXllciBpbiB0aGUgY3VycmVu
dCBSUyBsYXllciBsaXN0LiBUaGVuIHdlIGNoZWNrIGlmIHRoZQorICAgIC8vIG5ldyBjdXJyZW50
IGxheWVyIGhhcyBpdHMgb3duIFJTLCBpbiB3aGljaCBjYXNlIHRoZXJlIGFyZSB0aGluZ3MgaW4g
dGhhdCBSUyBsYXllciBsaXN0IHRoYXQgYXJlIGhpZ2hlciwgc28KKyAgICAvLyB3ZSBmaW5kIHRo
ZSBoaWdoZXN0IGxheWVyIGluIHRoYXQgc3VidHJlZS4KKyAgICAvLyBJZiB3ZSBtb3ZlIGJhY2sg
cGFzdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3QsIHdlIGp1bXAgdXAgdG8gdGhlIHByZXZpb3VzIFJT
IGxheWVyIGxpc3QsIHBpY2tpbmcgdXAgYWdhaW4gd2hlcmUgd2UKKyAgICAvLyBoYWQgcHJldmlv
dXNseSByZWN1cnNlZCBpbnRvIHRoZSBjdXJyZW50IFJTIGxheWVyIGxpc3QuCisKKyAgICBpZiAo
IXBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7CisgICAg
ICAgIC8vIFN1YnRyYWN0aW5nIG9uZSBoZXJlIHdpbGwgZXZlbnR1YWxseSBjYXVzZSB0aGUgY3Vy
cmVudCBsYXllciB0byBiZWNvbWUgdGhhdCBsYXllcgorICAgICAgICAvLyByZXByZXNlbnRpbmcg
dGhlIHRhcmdldCByZW5kZXIgc3VyZmFjZS4KKyAgICAgICAgLS1wb3MubV9jdXJyZW50TGF5ZXI7
CisgICAgICAgIGdvVG9IaWdoZXN0SW5TdWJ0cmVlKHBvcyk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgd2hpbGUgKHBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgp
KSB7CisgICAgICAgICAgICBpZiAoIXBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllcikgewor
ICAgICAgICAgICAgICAgIC8vIEVuZCBvZiB0aGUgbGlzdAorICAgICAgICAgICAgICAgIHBvcy5t
X3RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVy
VHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjprSW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXll
cjsKKyAgICAgICAgICAgICAgICBwb3MubV9jdXJyZW50TGF5ZXIgPSAwOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvcy5tX3RhcmdldFJlbmRl
clN1cmZhY2VMYXllciA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVySGlzdG9yeTsKKyAgICAgICAgICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IHBv
cy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySGlzdG9yeTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVu
ZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNr
Ojpnb1RvSGlnaGVzdEluU3VidHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUs
IFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQoreworICAgIGlmIChwb3MuY3VycmVudExheWVyUmVw
cmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdoaWxl
IChwb3MuY3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkg
eworICAgICAgICAvLyBTYXZlIHdoZXJlIHdlIHdlcmUgaW4gdGhlIGN1cnJlbnQgdGFyZ2V0IHN1
cmZhY2UsIG1vdmUgdG8gdGhlIG5leHQgb25lLCBhbmQgc2F2ZSB0aGUgdGFyZ2V0IHN1cmZhY2Ug
dGhhdCB3ZQorICAgICAgICAvLyBjYW1lIGZyb20gdGhlcmUgc28gd2UgY2FuIGdvIGJhY2sgdG8g
aXQuCisgICAgICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySGlz
dG9yeSA9IHBvcy5tX2N1cnJlbnRMYXllcjsKKyAgICAgICAgaW50IHByZXZpb3VzVGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVyID0gcG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworCisgICAg
ICAgIGZvciAoTGF5ZXJUeXBlKiBsYXllciA9IHBvcy5jdXJyZW50TGF5ZXIoKTsgcG9zLnRhcmdl
dFJlbmRlclN1cmZhY2VMYXllcigpICE9IGxheWVyOyArK3Bvcy5tX3RhcmdldFJlbmRlclN1cmZh
Y2VMYXllcikgeyB9CisgICAgICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IHBvcy50YXJnZXRSZW5k
ZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCkgLSAxOworCisgICAgICAgIHBvcy50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9yeSA9IHByZXZpb3Vz
VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgIH0KK30KKworLy8gRGVjbGFyZSBlYWNoIG9m
IHRoZSBhYm92ZSBmdW5jdGlvbnMgZm9yIExheWVyQ2hyb21pdW0gYW5kIENDTGF5ZXJJbXBsIGNs
YXNzZXMgc28gdGhhdCB0aGV5IGFyZSBsaW5rZWQuCit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7Cit0ZW1wbGF0ZSB2b2lkIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yUG9z
aXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6bmV4dChDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7CisK
K3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2lu
KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7
Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQo
Q0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsK
K3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQo
Q0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsK
KwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6bmV4
dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0+Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9C
YWNrOjplbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpG
cm9udFRvQmFjazo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwg
UmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpGcm9udFRvQmFjazo6Z29Ub0hpZ2hlc3RJblN1YnRyZWUoQ0NMYXllckl0ZXJhdG9y
UG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOworCit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsKK3RlbXBs
YXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVz
dEluU3VidHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJT
dXJmYWNlPiYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU2Nzc1MmY2NTEwY2YxNGVhMTZmMjNkNTIyNWQ1ZThlMjJkYmI5YzcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySXRlcmF0b3IuaApAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
Q0xheWVySXRlcmF0b3JfaAorI2RlZmluZSBDQ0xheWVySXRlcmF0b3JfaAorCisjaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoZXNl
IGNsYXNzZXMgcHJvdmlkZSBtZWFucyB0byBpdGVyYXRlIG92ZXIgdGhlIFJlbmRlclN1cmZhY2Ut
TGF5ZXIgdHJlZS4KKy8vCisvLyBBIFJlbmRlclN1cmZhY2UgJFIkIG1heSBiZSByZWZlcnJlZCB0
byBpbiBvbmUgb2YgdHdvIGRpZmZlcmVudCBjb250ZXh0cy4gT25lIFJlbmRlclN1cmZhY2UgaXMg
ImN1cnJlbnQiIGF0IGFueSB0aW1lLCBmb3IKKy8vIHdoYXRldmVyIG9wZXJhdGlvbiBpcyBiZWlu
ZyBwZXJmb3JtZWQuIFRoaXMgY3VycmVudCBzdXJmYWNlIGlzIHJlZmVycmVkIHRvIGFzIGEgdGFy
Z2V0IHN1cmZhY2UuIEZvciBleGFtcGxlLCB3aGVuICRSJCBpcworLy8gYmVpbmcgcGFpbnRlZCBp
dCB3b3VsZCBiZSB0aGUgdGFyZ2V0IHN1cmZhY2UuIE9uY2UgJFIkIGhhcyBiZWVuIHBhaW50ZWQs
IGl0cyBjb250ZW50cyBtYXkgYmUgaW5jbHVkZWQgaW50byBhbm90aGVyCisvLyBzdXJmYWNlICRT
JC4gV2hpbGUgJFMkIGlzIGNvbnNpZGVyZWQgdGhlIHRhcmdldCBzdXJmYWNlIHdoZW4gaXQgaXMg
YmVpbmcgcGFpbnRlZCwgJFIkIGlzIGNhbGxlZCBhIGNvbnRyaWJ1dGluZyBzdXJmYWNlCisvLyBp
biB0aGlzIGNvbnRleHQgYXMgaXQgY29udHJpYnV0ZXMgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIHRh
cmdldCBzdXJmYWNlICRTJC4KKy8vCisvLyBUaGUgaXRlcmF0b3IncyBjdXJyZW50IHBvc2l0aW9u
IGluIHRoZSB0cmVlIGFsd2F5cyBwb2ludHMgdG8gc29tZSBsYXllci4gVGhlIHN0YXRlIG9mIHRo
ZSBpdGVyYXRvciBpbmRpY2F0ZXMgdGhlIHJvbGUgb2YgdGhlCisvLyBsYXllciwgYW5kIHdpbGwg
YmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgc3RhdGVzLiBBIHNpbmdsZSBsYXllciAkTCQg
d2lsbCBhcHBlYXIgaW4gdGhlIGl0ZXJhdGlvbiBwcm9jZXNzIGluIGF0IGxlYXN0IG9uZSwKKy8v
IGFuZCBwb3NzaWJseSBhbGwsIG9mIHRoZXNlIHN0YXRlcy4KKy8vIDEuIFJlcHJlc2VudGluZyB0
aGUgdGFyZ2V0IHN1cmZhY2U6IFRoZSBpdGVyYXRvciBpbiB0aGlzIHN0YXRlLCBwb2ludGluZyBh
dCBsYXllciAkTCQsIGluZGljYXRlcyB0aGF0IHRoZSB0YXJnZXQgUmVuZGVyU3VyZmFjZQorLy8g
aXMgbm93IHRoZSBzdXJmYWNlIG93bmVkIGJ5ICRMJC4gVGhpcyB3aWxsIG9jY3VyIGV4YWN0bHkg
b25jZSBmb3IgZWFjaCBSZW5kZXJTdXJmYWNlIGluIHRoZSB0cmVlLgorLy8gMi4gUmVwcmVzZW50
aW5nIGEgY29udHJpYnV0aW5nIHN1cmZhY2U6IFRoZSBpdGVyYXRvciBpbiB0aGlzIHN0YXRlLCBw
b2ludGluZyBhdCBsYXllciAkTCQsIHJlZmVycyB0byB0aGUgUmVuZGVyU3VyZmFjZSBvd25lZAor
Ly8gYnkgJEwkIGFzIGEgY29udHJpYnV0aW5nIHN1cmZhY2UsIHdpdGhvdXQgY2hhbmdpbmcgdGhl
IGN1cnJlbnQgdGFyZ2V0IFJlbmRlclN1cmZhY2UuCisvLyAzLiBSZXByZXNlbnRpbmcgaXRzZWxm
OiBUaGUgaXRlcmF0b3IgaW4gdGhpcyBzdGF0ZSwgcG9pbnRpbmcgYXQgbGF5ZXIgJEwkLCByZWZl
cnMgdG8gdGhlIGxheWVyIGl0c2VsZiwgYXMgYSBjaGlsZCBvZiB0aGUKKy8vIGN1cnJlbnQgdGFy
Z2V0IFJlbmRlclN1cmZhY2UuCisvLworLy8gTW9zdCBpdGVyYXRvcnMgd2lsbCByZXR1cm4gYSBs
YXllciByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBzdXJmYWNlIGJlZm9yZSByZXR1cm5pbmcgbGF5
ZXJzIHJlcHJlc2VudGluZyB0aGVtc2VsdmVzIGFzIGNoaWxkcmVuCisvLyBvZiB0aGUgY3VycmVu
dCB0YXJnZXQgc3VyZmFjZSwgYnV0IHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgYXMgdGhlIG9yZGVy
aW5nIG1heSBkaWZmZXIgKGVnLiBGcm9udFRvQmFjayBvcmRlcmluZyB3aWxsIGl0ZXJhdGUKKy8v
IG92ZXIgY2hpbGRyZW4gbGF5ZXJzIG9mIGEgc3VyZmFjZSBiZWZvcmUgdGhlIGxheWVyIHJlcHJl
c2VudGluZyB0aGUgc3VyZmFjZSBhcyBhIHRhcmdldCBzdXJmYWNlKS4KKy8vCisvLyBUbyB1c2Ug
dGhlIGl0ZXJhdG9yczoKKy8vCisvLyBDcmVhdGUgYSBzdGVwcGluZyBpdGVyYXRvciBhbmQgZW5k
IGl0ZXJhdG9yIGJ5IGNhbGxpbmcgQ0NMYXllckl0ZXJhdG9yOjpiZWdpbigpIGFuZCBDQ0xheWVy
SXRlcmF0b3I6OmVuZCgpIGFuZCBwYXNzaW5nIGluIHRoZQorLy8gbGlzdCBvZiBsYXllcnMgb3du
aW5nIHRhcmdldCBSZW5kZXJTdXJmYWNlcy4gU3RlcCB0aHJvdWdoIHRoZSB0cmVlIGJ5IGluY3Jl
bWVudGluZyB0aGUgc3RlcHBpbmcgaXRlcmF0b3Igd2hpbGUgaXQgaXMgIT0gdG8KKy8vIHRoZSBl
bmQgaXRlcmF0b3IuIEF0IGVhY2ggc3RlcCB0aGUgaXRlcmF0b3Iga25vd3Mgd2hhdCB0aGUgbGF5
ZXIgaXMgcmVwcmVzZW50aW5nLCBhbmQgeW91IGNhbiBxdWVyeSB0aGUgaXRlcmF0b3IgdG8gZGVj
aWRlCisvLyB3aGF0IGFjdGlvbnMgdG8gcGVyZm9ybSB3aXRoIHRoZSBsYXllciBnaXZlbiB3aGF0
IGl0IHJlcHJlc2VudHMuCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gQSBzdHJ1Y3QgdG8gaG9s
ZCB0aGUgaXRlcmF0b3IncyBjdXJyZW50IHBvc2l0aW9uLCB3aGljaCBpcyBwYXNzZWQgdG8gdGhl
IHZhcmlvdXMgQ0NMYXllckl0ZXJhdG9yQWN0aW9uIGZ1bmN0aW9ucywgZm9yIHRoZW0gdG8KKy8v
IHJlYWQgYW5kIHVwZGF0ZS4gVGhpcyBzdHJ1Y3QgZXhpc3RzIHNvIHRoZSB0ZW1wbGF0ZWQgYWN0
aW9uIGZ1bmN0aW9ucyBkb24ndCBuZWVkIHRvIGFjY2VzcyB0aGUgQ0NMYXllckl0ZXJhdG9yIGNs
YXNzLgorLy8KKy8vIFRoZXJlIGlzIGEgMToxIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFuIGluc3Rh
bmNlIG9mIHRoZSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbiBjbGFzcyBhbmQgYSBDQ0xheWVySXRl
cmF0b3JBY3Rpb25zOjpGb28gY2xhc3MsCisvLyBzbyBhbiBpdGVyYXRvciB0eXBlIGNhbiBob2xk
IGV4dHJhIHBvc2l0aW9uIGRhdGEsIGlmIHJlcXVpcmVkLCBpbiBpdHMgb3duIGNsYXNzIGluc3Rh
bmNlLgorLy8KKy8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBpdGVyYXRvciBpcyBoZWxk
IGluIHR3byBpbnRlZ2VyIHZhcmlhYmxlcy4KKy8vIC0gVGhlIG1fdGFyZ2V0UmVuZGVyU3VyZmFj
ZUxheWVyIGlzIGEgcG9zaXRpb24gaW4gdGhlIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdC4gVGhp
cyBwb2ludHMgdG8gYSBsYXllciB3aGljaCBvd25zIHRoZSBjdXJyZW50CisvLyB0YXJnZXQgc3Vy
ZmFjZS4gVGhpcyBpcyBhIHZhbHVlIGZyb20gMCB0byBuLTEgKG4gPSBzaXplIG9mIG1fcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCA9IG51bWJlciBvZiBzdXJmYWNlcykuIEEgdmFsdWUgb3V0c2lkZSBv
ZgorLy8gdGhpcyByYW5nZSAodXN1YWxseSBrSW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXll
cikgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHBvc2l0aW9uIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0
aGUgdHJlZS4KKy8vIC0gVGhlIG1fY3VycmVudExheWVyIGlzIGEgcG9zaXRpb24gaW4gdGhlIGxp
c3Qgb2YgbGF5ZXJzIHRoYXQgYXJlIGNoaWxkcmVuIG9mIHRoZSBjdXJyZW50IHRhcmdldCBzdXJm
YWNlLiBXaGVuIHBvaW50aW5nIHRvCisvLyBvbmUgb2YgdGhlc2UgbGF5ZXJzLCB0aGlzIGlzIGEg
dmFsdWUgZnJvbSAwIHRvIG4tMSAobiA9IG51bWJlciBvZiBjaGlsZHJlbikuIFNpbmNlIHRoZSBp
dGVyYXRvciBtdXN0IGFsc28gc3RvcCBhdCB0aGUgbGF5ZXJzCisvLyByZXByZXNlbnRpbmcgdGhl
IHRhcmdldCBzdXJmYWNlLCB0aGlzIGlzIGRvbmUgYnkgc2V0dGluZyB0aGUgbV9jdXJyZW50TGF5
ZXIgdG8gYSB2YWx1ZSBvZiBrTGF5ZXJSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlLgor
dGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4K
K3N0cnVjdCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbiB7CisgICAgZXhwbGljaXQgQ0NMYXllckl0
ZXJhdG9yUG9zaXRpb24oY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpIDogbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KHJlbmRlclN1cmZhY2VM
YXllckxpc3QpIHsgfQorCisgICAgaW5saW5lIExheWVyVHlwZSogY3VycmVudExheWVyKCkgY29u
c3QgeyByZXR1cm4gY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSA/
IHRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpIDogdGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVu
KClbbV9jdXJyZW50TGF5ZXJdLmdldCgpOyB9CisKKyAgICBpbmxpbmUgYm9vbCBjdXJyZW50TGF5
ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5
ZXJUeXBlPihjdXJyZW50TGF5ZXIoKSwgdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCktPmlkKCkp
OyB9CisgICAgaW5saW5lIGJvb2wgY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1
cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRMYXllciA9PSBrTGF5ZXJSZXByZXNlbnRp
bmdUYXJnZXRSZW5kZXJTdXJmYWNlOyB9CisKKyAgICBpbmxpbmUgTGF5ZXJUeXBlKiB0YXJnZXRS
ZW5kZXJTdXJmYWNlTGF5ZXIoKSBjb25zdCB7IHJldHVybiAoKm1fcmVuZGVyU3VyZmFjZUxheWVy
TGlzdClbbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJdLmdldCgpOyB9CisgICAgaW5saW5lIFJl
bmRlclN1cmZhY2VUeXBlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gdGFy
Z2V0UmVuZGVyU3VyZmFjZUxheWVyKCktPnJlbmRlclN1cmZhY2UoKTsgfQorICAgIGlubGluZSBj
b25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYgdGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gdGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKTsg
fQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RhcmdldFJlbmRlclN1cmZhY2VM
YXllciA9PSBvdGhlci5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllcgorICAgICAgICAgICAgJiYg
bV9jdXJyZW50TGF5ZXIgPT0gb3RoZXIubV9jdXJyZW50TGF5ZXI7CisgICAgfQorCisgICAgc3Rh
dGljIGNvbnN0IGludCBrSW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IC0xOworICAg
IC8vIFRoaXMgbXVzdCBiZSAtMSBzaW5jZSB0aGUgaXRlcmF0b3IgYWN0aW9uIGNvZGUgYXNzdW1l
cyB0aGF0IHRoaXMgdmFsdWUgY2FuIGJlCisgICAgLy8gcmVhY2hlZCBieSBzdWJ0cmFjdGluZyBv
bmUgZnJvbSB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGxheWVyIGluIHRoZSBjdXJyZW50Cisg
ICAgLy8gdGFyZ2V0IHN1cmZhY2UncyBjaGlsZCBsYXllciBsaXN0LCB3aGljaCBpcyAwLgorICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrTGF5ZXJSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJm
YWNlID0gKHVuc2lnbmVkKS0xOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+
ID4qIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBpbnQgbV90YXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXI7CisgICAgdW5zaWduZWQgbV9jdXJyZW50TGF5ZXI7Cit9OworCisvLyBBbiBpdGVy
YXRvciBjbGFzcyBmb3Igd2Fsa2luZyBvdmVyIGxheWVycyBpbiB0aGUgUmVuZGVyU3VyZmFjZS1M
YXllciB0cmVlLgorLy8gVXNlIHRoZSBiZWdpbigpIGFuZCBlbmQoKSBmdW5jdGlvbnMgdG8gZ2V0
IGFuIGl0ZXJhdG9yIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gbGlzdCBvZiByZW5kZXJTdXJmYWNlTGF5
ZXJzLgordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFj
ZVR5cGUsIHR5cGVuYW1lIEl0ZXJhdG9yQWN0aW9uVHlwZT4KK2NsYXNzIENDTGF5ZXJJdGVyYXRv
ciB7CisgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNl
VHlwZSwgSXRlcmF0b3JBY3Rpb25UeXBlPiBDQ0xheWVySXRlcmF0b3JUeXBlOworCitwdWJsaWM6
CisgICAgQ0NMYXllckl0ZXJhdG9yKCkgOiBtX3Bvc2l0aW9uKDApLCBtX2FjdGlvbnMoMCkgeyB9
CisKKyAgICBzdGF0aWMgQ0NMYXllckl0ZXJhdG9yVHlwZSBiZWdpbihjb25zdCBWZWN0b3I8UmVm
UHRyPExheWVyVHlwZT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkgeyByZXR1cm4gQ0NMYXll
ckl0ZXJhdG9yVHlwZShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCB0cnVlKTsgfQorICAgIHN0YXRp
YyBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZChjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4g
PiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkgeyByZXR1cm4gQ0NMYXllckl0ZXJhdG9yVHlwZShy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBmYWxzZSk7IH0KKworICAgIENDTGF5ZXJJdGVyYXRvclR5
cGUmIG9wZXJhdG9yKysoKSB7IG1fYWN0aW9ucy0+bmV4dChtX3Bvc2l0aW9uKTsgcmV0dXJuICp0
aGlzOyB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENDTGF5ZXJJdGVyYXRvclR5cGUmIG90
aGVyKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uID09IG90aGVyLm1fcG9zaXRpb247IH0KKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisKKyAgICBMYXllclR5cGUqIG9wZXJhdG9y
LT4oKSB7IHJldHVybiBtX3Bvc2l0aW9uLmN1cnJlbnRMYXllcigpOyB9CisgICAgTGF5ZXJUeXBl
KiBvcGVyYXRvciooKSB7IHJldHVybiBtX3Bvc2l0aW9uLmN1cnJlbnRMYXllcigpOyB9CisKKyAg
ICBib29sIHJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgeyByZXR1cm4gbV9wb3NpdGlv
bi5jdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpOyB9CisgICAgYm9v
bCByZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpIHsgcmV0dXJuICFyZXByZXNl
bnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpICYmIG1fcG9zaXRpb24uY3VycmVudExheWVyUmVwcmVz
ZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKTsgfQorICAgIGJvb2wgcmVwcmVzZW50c0l0
c2VsZigpIHsgcmV0dXJuICFyZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpICYmICFyZXBy
ZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpOyB9CisKKyAgICBMYXllclR5cGUqIHRh
cmdldFJlbmRlclN1cmZhY2VMYXllcigpIHsgcmV0dXJuIG1fcG9zaXRpb24udGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVyKCk7IH0KKworcHJpdmF0ZToKKyAgICBDQ0xheWVySXRlcmF0b3IoY29uc3Qg
VmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGJvb2wg
c3RhcnQpCisgICAgICAgIDogbV9wb3NpdGlvbihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQorICAg
ICAgICAsIG1fYWN0aW9ucyhuZXcgSXRlcmF0b3JBY3Rpb25UeXBlKCkpCisgICAgeworICAgICAg
ICBpZiAoc3RhcnQgJiYgIXJlbmRlclN1cmZhY2VMYXllckxpc3QtPmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIG1fYWN0aW9ucy0+YmVnaW4obV9wb3NpdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fYWN0aW9ucy0+ZW5kKG1fcG9zaXRpb24pOworICAgIH0KKworICAgIENDTGF5ZXJJ
dGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+IG1fcG9zaXRpb247
CisgICAgSXRlcmF0b3JBY3Rpb25UeXBlKiBtX2FjdGlvbnM7CisKKyAgICBmcmllbmQgY2xhc3Mg
Q0NMYXllckl0ZXJhdG9yQWN0aW9uczsKK307CisKKy8vIE9yZGVyaW5ncyBmb3IgaXRlcmF0aW5n
IG92ZXIgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZS4KK3N0cnVjdCBDQ0xheWVySXRlcmF0
b3JBY3Rpb25zIHsKKyAgICAvLyBXYWxrcyBsYXllcnMgc29ydGVkIGJ5IHotb3JkZXIgZnJvbSBi
YWNrIHRvIGZyb250LgorICAgIGNsYXNzIEJhY2tUb0Zyb250IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VU
eXBlPgorICAgICAgICB2b2lkIGJlZ2luKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlw
ZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExh
eWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CisgICAgICAgIHZvaWQgZW5kKEND
TGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7CisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3Vy
ZmFjZVR5cGU+CisgICAgICAgIHZvaWQgbmV4dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXll
clR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50
IG1faGlnaGVzdFRhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICB9OworCisgICAgLy8gV2Fs
a3MgbGF5ZXJzIHNvcnRlZCBieSB6LW9yZGVyIGZyb20gYmFjayB0byBmcm9udC4KKyAgICBjbGFz
cyBGcm9udFRvQmFjayB7CisgICAgcHVibGljOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBiZWdp
bihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRl
clN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIGVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxM
YXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2b2lk
IG5leHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlw
ZT4mKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5
cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIGdvVG9IaWdoZXN0
SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFj
ZVR5cGU+Jik7CisgICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBjZDc1NmQ2MDBkYzBmMGUzZjMw
MWIzMmQ3ZThlODRmYzAwYWIwNzYxLi44MWE3MDY3YTJkOTE5NmIxNGJmOTkyNGZiZDBkNjU2ZGQx
ZThmMjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2
ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmgiCkBAIC00MzQsNTcgKzQzNSw0MSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVy
UwogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgUGFpbnRUeXBlIHBhaW50VHlwZSkKIHsKLSAg
ICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAt
IDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgTGF5ZXJD
aHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJm
YWNlSW5kZXhdLmdldCgpOwotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1
cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgQVNT
RVJUKHJlbmRlclN1cmZhY2UpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09w
YWNpdHkoKSk7Ci0KLSAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2Uo
cmVuZGVyU3VyZmFjZUxheWVyLCBwYWludFR5cGUpOwotCi0gICAgICAgIGNvbnN0IExheWVyTGlz
dCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyAr
K2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJM
aXN0W2xheWVySW5kZXhdLmdldCgpOwotCi0gICAgICAgICAgICAvLyBMYXllcnMgdGhhdCBzdGFy
dCBhIG5ldyByZW5kZXIgc3VyZmFjZSB3aWxsIGJlIHBhaW50ZWQgd2hlbiB0aGUgcmVuZGVyCi0g
ICAgICAgICAgICAvLyBzdXJmYWNlJ3MgbGlzdCBpcyBwcm9jZXNzZWQuCi0gICAgICAgICAgICBp
ZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1Rhcmdl
dDxMYXllckNocm9taXVtPihsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+Ym91bmRz
KCkuaXNFbXB0eSgpKTsKLQotICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5ZXIs
IHBhaW50VHlwZSk7CisgICAgLy8gVXNlIEZyb250VG9CYWNrIHRvIGFsbG93IGZvciB0ZXN0aW5n
IG9jY2x1c2lvbiBhbmQgcGVyZm9ybWluZyBjdWxsaW5nIGR1cmluZyB0aGUgdHJlZSB3YWxrLgor
ICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVy
YXRvclR5cGU7CisKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRv
clR5cGU6OmVuZCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgZm9yIChDQ0xheWVySXRl
cmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VM
YXllckxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNU
YXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKKyAgICAgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FG
b3JSZW5kZXJTdXJmYWNlKCppdCwgcGFpbnRUeXBlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpdC5y
ZXByZXNlbnRzSXRzZWxmKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+b3BhY2l0eSgpKTsK
KyAgICAgICAgICAgIEFTU0VSVCghaXQtPmJvdW5kcygpLmlzRW1wdHkoKSk7CisgICAgICAgICAg
ICBwYWludENvbnRlbnRzSWZEaXJ0eSgqaXQsIHBhaW50VHlwZSk7CiAgICAgICAgIH0KICAgICB9
CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQogewot
ICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IG1fdXBkYXRlTGlzdC5zaXplKCkgLSAxOyBzdXJm
YWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIExheWVyQ2hyb21pdW0q
IHJlbmRlclN1cmZhY2VMYXllciA9IG1fdXBkYXRlTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwot
ICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJm
YWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2Up
OwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7Ci0KLSAgICAg
ICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNv
bnRleHQsIHVwZGF0ZXIpOwotCi0gICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxp
Y2FMYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXll
cigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIo
KS0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5yZXBs
aWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4
dCwgdXBkYXRlcik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0IExheWVyTGlz
dCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyAr
K2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJM
aXN0W2xheWVySW5kZXhdLmdldCgpOwotCi0gICAgICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxMYXllckNocm9taXVtPihs
YXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4
dCwgdXBkYXRlcik7Ci0gICAgICAgIH0KKyAgICAvLyBVc2UgQmFja1RvRnJvbnQgdG8gaGl0IHRh
cmdldCBzdXJmYWNlcyBiZWZvcmUgdGhlaXIgY2hpbGRyZW4uCisgICAgdHlwZWRlZiBDQ0xheWVy
SXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCBDQ0xheWVySXRl
cmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworICAgIEND
TGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZtX3VwZGF0
ZUxpc3QpOworICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRv
clR5cGU6OmJlZ2luKCZtX3VwZGF0ZUxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
aWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIEFT
U0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKKyAgICAgICAgICAgIGlm
IChpdC0+bWFza0xheWVyKCkpCisgICAgICAgICAgICAgICAgaXQtPm1hc2tMYXllcigpLT51cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOworCisgICAgICAgICAgICBp
ZiAoaXQtPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICAgICAgaXQtPnJlcGxpY2FMYXll
cigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOworICAgICAg
ICAgICAgICAgIGlmIChpdC0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpKQorICAgICAgICAg
ICAgICAgICAgICBpdC0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkKKyAgICAgICAgICAgIGl0LT51cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggNTY1MDliY2VjM2M2MWUy
ZGZlMTY2NGFiNDE2NWY0MjkzNzM5M2UxYi4uYjNhNzdlNzZiZTcxNzg3MWU4NzlkNDYxOTUwNGM4
MTdlNTdmYWU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1w
bC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5
ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKIApAQCAtNDcxLDE1
ICs0NzIsMTQgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKIHRlbXBsYXRlPHR5cGVuYW1lIExh
eWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CiBzdGF0aWMgdm9pZCB3YWxrTGF5
ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXll
clR5cGU+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7Ci0gICAgZm9yIChpbnQgc3VyZmFj
ZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXgg
Pj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIExheWVyVHlwZSogcmVuZGVyU3VyZmFj
ZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAg
ICAgICBSZW5kZXJTdXJmYWNlVHlwZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXll
ci0+cmVuZGVyU3VyZmFjZSgpOwotCi0gICAgICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+
JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsr
bGF5ZXJJbmRleCkgewotICAgICAgICAgICAgTGF5ZXJUeXBlKiBsYXllciA9IGxheWVyTGlzdFts
YXllckluZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdDxMYXllclR5
cGU+KGxheWVyKTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2li
bGVMYXllclJlY3QpOworICAgIC8vIFVzZSBCYWNrVG9Gcm9udCB0byBoaXQgdGFyZ2V0IHN1cmZh
Y2VzIGJlZm9yZSB0aGVpciBjaGlsZHJlbi4KKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxM
YXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNr
VG9Gcm9udD4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUg
ZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
KyAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpi
ZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBpZiAoIWl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAg
IEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlVmlzaWJsZUxheWVyUmVjdDxMYXllclR5cGU+KCppdCk7CisgICAgICAgICAgICBpdC0+c2V0
VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKICAgICAgICAgfQogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggYThlODdhOWY5YmVhNWQ5YmI0ZTgxOGRm
NTBkYzA4ZDllNzMyNmY4Yy4uODFjN2QzOTc4YjAwNDZmODMyMTY2NDk3N2NlZjUwNGVmNzIwYzk0
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0RhbWFnZVRyYWNrZXI7CiBjbGFzcyBDQ0xheWVySW1w
bDsKK2NsYXNzIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hy
b21pdW07CiBjbGFzcyBNYW5hZ2VkVGV4dHVyZTsKIApAQCAtMTI5LDYgKzEzMCwxMSBAQCBwcml2
YXRlOgogCiAgICAgLy8gU3RvcmVkIGluIHRoZSAic3VyZmFjZSBzcGFjZSIgd2hlcmUgdGhpcyBk
YW1hZ2UgY2FuIGJlIHVzZWQgZm9yIHNjaXNzb3JpbmcuCiAgICAgRmxvYXRSZWN0IG1fZGFtYWdl
UmVjdDsKKworICAgIC8vIEZvciBDQ0xheWVySXRlcmF0b3JBY3Rpb25zCisgICAgaW50IG1fdGFy
Z2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9yeTsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRMYXll
ckhpc3Rvcnk7CisgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBlNjc0YmI2Yjg1YjA4NWNhYmFj
YzlkOWQ2NDk5OTNkNWQ2MmZlNWNmLi5hZDQyNDEyY2I1MmZkMmY1OGJlYzlhNGNlODNmNGUyODgx
OTZjYjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTY0LDYgKzY0LDcgQEAK
ICAgICAgICAgICAgICd0ZXN0cy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0xh
eWVySXRlcmF0b3JUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclF1YWRUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclNvcnRlclRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45ZGQ2YjZjNGYwMTJmNGI1MjA3Njc4NTk4ZDc2Y2I3OTgxODhlOThhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JU
ZXN0LmNwcApAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJMYXll
ckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisjaW5j
bHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIDo6dGVzdGluZzo6TW9jazsKK3VzaW5nIDo6dGVzdGlu
Zzo6XzsKK3VzaW5nIDo6dGVzdGluZzo6QXRMZWFzdDsKK3VzaW5nIDo6dGVzdGluZzo6QW55TnVt
YmVyOworCituYW1lc3BhY2UgeworCitjbGFzcyBUZXN0TGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBM
YXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXN0TGF5ZXJD
aHJvbWl1bT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFRlc3RMYXllckNocm9taXVt
KCkpOyB9CisKKyAgICBpbnQgbV9jb3VudFJlcHJlc2VudGluZ1RhcmdldFN1cmZhY2U7CisgICAg
aW50IG1fY291bnRSZXByZXNlbnRpbmdDb250cmlidXRpbmdTdXJmYWNlOworICAgIGludCBtX2Nv
dW50UmVwcmVzZW50aW5nSXRzZWxmOworCisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhd3NDb250ZW50OyB9CisgICAgdm9pZCBzZXREcmF3c0NvbnRl
bnQoYm9vbCBkcmF3c0NvbnRlbnQpIHsgbV9kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQ7IH0K
KworcHJpdmF0ZToKKyAgICBUZXN0TGF5ZXJDaHJvbWl1bSgpCisgICAgICAgIDogTGF5ZXJDaHJv
bWl1bSgwKQorICAgICAgICAsIG1fZHJhd3NDb250ZW50KHRydWUpCisgICAgeworICAgICAgICBz
ZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBzZXREcmF3YWJsZUNvbnRlbnRS
ZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKKyAgICB9CisKKyAgICBib29sIG1fZHJhd3ND
b250ZW50OworfTsKKworI2RlZmluZSBFWFBFQ1RfQ09VTlQobGF5ZXIsIHRhcmdldCwgY29udHJp
YiwgaXRzZWxmKSBcCisgICAgRVhQRUNUX0VRKHRhcmdldCwgbGF5ZXItPm1fY291bnRSZXByZXNl
bnRpbmdUYXJnZXRTdXJmYWNlKTsgICAgICAgICAgXAorICAgIEVYUEVDVF9FUShjb250cmliLCBs
YXllci0+bV9jb3VudFJlcHJlc2VudGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2UpOyAgIFwKKyAgICBF
WFBFQ1RfRVEoaXRzZWxmLCBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ0l0c2VsZik7CisKK3R5
cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1
bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IEZyb250VG9CYWNrOwordHlw
ZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVt
LCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4gQmFja1RvRnJvbnQ7CisKK3Zv
aWQgcmVzZXRDb3VudHMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KQoreworICAgIGZvciAodW5zaWduZWQgc3VyZmFjZUluZGV4ID0gMDsgc3Vy
ZmFjZUluZGV4IDwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCk7ICsrc3VyZmFjZUluZGV4
KSB7CisgICAgICAgIFRlc3RMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSBzdGF0
aWNfY2FzdDxUZXN0TGF5ZXJDaHJvbWl1bSo+KHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFj
ZUluZGV4XS5nZXQoKSk7CisgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3Vy
ZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworCisgICAgICAgIHJl
bmRlclN1cmZhY2VMYXllci0+bV9jb3VudFJlcHJlc2VudGluZ1RhcmdldFN1cmZhY2UgPSAtMTsK
KyAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nQ29udHJpYnV0
aW5nU3VyZmFjZSA9IC0xOworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1fY291bnRSZXBy
ZXNlbnRpbmdJdHNlbGYgPSAtMTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXgg
PSAwOyBsYXllckluZGV4IDwgcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpOyArK2xh
eWVySW5kZXgpIHsKKyAgICAgICAgICAgIFRlc3RMYXllckNocm9taXVtKiBsYXllciA9IHN0YXRp
Y19jYXN0PFRlc3RMYXllckNocm9taXVtKj4ocmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KClbbGF5
ZXJJbmRleF0uZ2V0KCkpOworCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2VudGlu
Z1RhcmdldFN1cmZhY2UgPSAtMTsKKyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50
aW5nQ29udHJpYnV0aW5nU3VyZmFjZSA9IC0xOworICAgICAgICAgICAgbGF5ZXItPm1fY291bnRS
ZXByZXNlbnRpbmdJdHNlbGYgPSAtMTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBpdGVy
YXRlRnJvbnRUb0JhY2soVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+KiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KQoreworICAgIHJlc2V0Q291bnRzKCpyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoRnJvbnRUb0JhY2sgaXQgPSBGcm9udFRv
QmFjazo6YmVnaW4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IEZyb250VG9CYWNrOjpl
bmQocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7ICsraXQsICsrY291bnQpIHsKKyAgICAgICAgVGVz
dExheWVyQ2hyb21pdW0qIGxheWVyID0gc3RhdGljX2Nhc3Q8VGVzdExheWVyQ2hyb21pdW0qPigq
aXQpOworICAgICAgICBpZiAoaXQucmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkKKyAg
ICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nVGFyZ2V0U3VyZmFjZSA9IGNvdW50
OworICAgICAgICBpZiAoaXQucmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkK
KyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nQ29udHJpYnV0aW5nU3VyZmFj
ZSA9IGNvdW50OworICAgICAgICBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigpKQorICAgICAgICAg
ICAgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdJdHNlbGYgPSBjb3VudDsKKyAgICB9Cit9CisK
K3ZvaWQgaXRlcmF0ZUJhY2tUb0Zyb250KFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiog
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICByZXNldENvdW50cygqcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKEJhY2tUb0Zyb250IGl0
ID0gQmFja1RvRnJvbnQ6OmJlZ2luKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBCYWNr
VG9Gcm9udDo6ZW5kKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOyArK2l0LCArK2NvdW50KSB7Cisg
ICAgICAgIFRlc3RMYXllckNocm9taXVtKiBsYXllciA9IHN0YXRpY19jYXN0PFRlc3RMYXllckNo
cm9taXVtKj4oKml0KTsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJm
YWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ1RhcmdldFN1cmZh
Y2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJT
dXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ0NvbnRyaWJ1
dGluZ1N1cmZhY2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkK
KyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nSXRzZWxmID0gY291bnQ7Cisg
ICAgfQorfQorCitURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIHNpbXBsZVRyZWUpCit7CisgICAg
UmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290TGF5ZXIgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBmaXJzdCA9IFRlc3RMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHNlY29u
ZCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hy
b21pdW0+IHRoaXJkID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxU
ZXN0TGF5ZXJDaHJvbWl1bT4gZm91cnRoID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwor
CisgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisKKyAgICByb290TGF5ZXIt
PmFkZENoaWxkKGZpcnN0KTsKKyAgICByb290TGF5ZXItPmFkZENoaWxkKHNlY29uZCk7CisgICAg
cm9vdExheWVyLT5hZGRDaGlsZCh0aGlyZCk7CisgICAgcm9vdExheWVyLT5hZGRDaGlsZChmb3Vy
dGgpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGxheWVyTGlzdDsK
KyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIpOworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJv
b3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgbGF5ZXJMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CisKKyAgICBpdGVyYXRlQmFja1RvRnJvbnQo
JnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDAs
IC0xLCAxKTsKKyAgICBFWFBFQ1RfQ09VTlQoZmlyc3QsIC0xLCAtMSwgMik7CisgICAgRVhQRUNU
X0NPVU5UKHNlY29uZCwgLTEsIC0xLCAzKTsKKyAgICBFWFBFQ1RfQ09VTlQodGhpcmQsIC0xLCAt
MSwgNCk7CisgICAgRVhQRUNUX0NPVU5UKGZvdXJ0aCwgLTEsIC0xLCA1KTsKKworICAgIGl0ZXJh
dGVGcm9udFRvQmFjaygmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0NPVU5U
KHJvb3RMYXllciwgNSwgLTEsIDQpOworICAgIEVYUEVDVF9DT1VOVChmaXJzdCwgLTEsIC0xLCAz
KTsKKyAgICBFWFBFQ1RfQ09VTlQoc2Vjb25kLCAtMSwgLTEsIDIpOworICAgIEVYUEVDVF9DT1VO
VCh0aGlyZCwgLTEsIC0xLCAxKTsKKyAgICBFWFBFQ1RfQ09VTlQoZm91cnRoLCAtMSwgLTEsIDAp
OworCit9CisKK1RFU1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwgY29tcGxleFRyZWUpCit7CisgICAg
UmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290TGF5ZXIgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MSA9IFRlc3RMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3Qy
ID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJv
bWl1bT4gcm9vdDMgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRl
c3RMYXllckNocm9taXVtPiByb290MjEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MjIgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MjMgPSBUZXN0TGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290
MjIxID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJD
aHJvbWl1bT4gcm9vdDIzMSA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIHJv
b3RMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworCisgICAgcm9vdExheWVyLT5hZGRDaGls
ZChyb290MSk7CisgICAgcm9vdExheWVyLT5hZGRDaGlsZChyb290Mik7CisgICAgcm9vdExheWVy
LT5hZGRDaGlsZChyb290Myk7CisgICAgcm9vdDItPmFkZENoaWxkKHJvb3QyMSk7CisgICAgcm9v
dDItPmFkZENoaWxkKHJvb3QyMik7CisgICAgcm9vdDItPmFkZENoaWxkKHJvb3QyMyk7CisgICAg
cm9vdDIyLT5hZGRDaGlsZChyb290MjIxKTsKKyAgICByb290MjMtPmFkZENoaWxkKHJvb3QyMzEp
OworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXll
ckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGxheWVyTGlzdDsKKyAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIpOworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RM
YXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgbGF5ZXJMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CisKKyAgICBpdGVyYXRlQmFja1RvRnJvbnQoJnJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDAsIC0x
LCAxKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDEsIC0xLCAtMSwgMik7CisgICAgRVhQRUNUX0NP
VU5UKHJvb3QyLCAtMSwgLTEsIDMpOworICAgIEVYUEVDVF9DT1VOVChyb290MjEsIC0xLCAtMSwg
NCk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMiwgLTEsIC0xLCA1KTsKKyAgICBFWFBFQ1RfQ09V
TlQocm9vdDIyMSwgLTEsIC0xLCA2KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIzLCAtMSwgLTEs
IDcpOworICAgIEVYUEVDVF9DT1VOVChyb290MjMxLCAtMSwgLTEsIDgpOworICAgIEVYUEVDVF9D
T1VOVChyb290MywgLTEsIC0xLCA5KTsKKworICAgIGl0ZXJhdGVGcm9udFRvQmFjaygmcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3RMYXllciwgOSwgLTEsIDgp
OworICAgIEVYUEVDVF9DT1VOVChyb290MSwgLTEsIC0xLCA3KTsKKyAgICBFWFBFQ1RfQ09VTlQo
cm9vdDIsIC0xLCAtMSwgNik7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMSwgLTEsIC0xLCA1KTsK
KyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyLCAtMSwgLTEsIDQpOworICAgIEVYUEVDVF9DT1VOVChy
b290MjIxLCAtMSwgLTEsIDMpOworICAgIEVYUEVDVF9DT1VOVChyb290MjMsIC0xLCAtMSwgMik7
CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMzEsIC0xLCAtMSwgMSk7CisgICAgRVhQRUNUX0NPVU5U
KHJvb3QzLCAtMSwgLTEsIDApOworCit9CisKK1RFU1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwgY29t
cGxleFRyZWVNdWx0aVN1cmZhY2UpCit7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBy
b290TGF5ZXIgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RM
YXllckNocm9taXVtPiByb290MSA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QyID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDMgPSBUZXN0TGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MjEgPSBU
ZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVt
PiByb290MjIgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RM
YXllckNocm9taXVtPiByb290MjMgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MjIxID0gVGVzdExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIzMSA9IFRlc3RMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIHJvb3RMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFj
ZSgpOworCisgICAgcm9vdExheWVyLT5hZGRDaGlsZChyb290MSk7CisgICAgcm9vdExheWVyLT5h
ZGRDaGlsZChyb290Mik7CisgICAgcm9vdExheWVyLT5hZGRDaGlsZChyb290Myk7CisgICAgcm9v
dDItPnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgcm9vdDItPnNldE9wYWNpdHkoMC41Zik7
IC8vIEZvcmNlIHRoZSBsYXllciB0byBvd24gYSBuZXcgc3VyZmFjZS4KKyAgICByb290Mi0+YWRk
Q2hpbGQocm9vdDIxKTsKKyAgICByb290Mi0+YWRkQ2hpbGQocm9vdDIyKTsKKyAgICByb290Mi0+
YWRkQ2hpbGQocm9vdDIzKTsKKyAgICByb290MjItPnNldE9wYWNpdHkoMC41Zik7CisgICAgcm9v
dDIyLT5hZGRDaGlsZChyb290MjIxKTsKKyAgICByb290MjMtPnNldE9wYWNpdHkoMC41Zik7Cisg
ICAgcm9vdDIzLT5hZGRDaGlsZChyb290MjMxKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiBsYXllckxpc3Q7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocm9vdExheWVyKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYpOwor
CisgICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBF
WFBFQ1RfQ09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3Qx
LCAtMSwgLTEsIDIpOworICAgIEVYUEVDVF9DT1VOVChyb290MiwgNCwgMywgLTEpOworICAgIEVY
UEVDVF9DT1VOVChyb290MjEsIC0xLCAtMSwgNSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMiwg
NywgNiwgOCk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMjEsIC0xLCAtMSwgOSk7CisgICAgRVhQ
RUNUX0NPVU5UKHJvb3QyMywgMTEsIDEwLCAxMik7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMzEs
IC0xLCAtMSwgMTMpOworICAgIEVYUEVDVF9DT1VOVChyb290MywgLTEsIC0xLCAxNCk7CisKKyAg
ICBpdGVyYXRlRnJvbnRUb0JhY2soJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVD
VF9DT1VOVChyb290TGF5ZXIsIDE0LCAtMSwgMTMpOworICAgIEVYUEVDVF9DT1VOVChyb290MSwg
LTEsIC0xLCAxMik7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyLCAxMCwgMTEsIC0xKTsKKyAgICBF
WFBFQ1RfQ09VTlQocm9vdDIxLCAtMSwgLTEsIDkpOworICAgIEVYUEVDVF9DT1VOVChyb290MjIs
IDcsIDgsIDYpOworICAgIEVYUEVDVF9DT1VOVChyb290MjIxLCAtMSwgLTEsIDUpOworICAgIEVY
UEVDVF9DT1VOVChyb290MjMsIDMsIDQsIDIpOworICAgIEVYUEVDVF9DT1VOVChyb290MjMxLCAt
MSwgLTEsIDEpOworICAgIEVYUEVDVF9DT1VOVChyb290MywgLTEsIC0xLCAwKTsKK30KKworfSAv
LyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120480</attachid>
            <date>2011-12-23 14:05:03 -0800</date>
            <delta_ts>2012-01-04 10:26:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74203-20111223170502.patch</filename>
            <type>text/plain</type>
            <size>46714</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTIzZDAwNThmOGY4NzQz
ZTcwNWM0NjdhNDMxNWM1Zjk4MjMyZTI1Yi4uYTFkM2JiZjQ5ZjM0MmNkMDQyOWU2YTE2NjNlYTYz
Mjg3NjY2YTllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTIzICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdW5pdCB0ZXN0OiBDQ0xh
eWVySXRlcmF0b3JUZXN0LmNwcAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1Rv
RnJvbnQ6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6
OkJhY2tUb0Zyb250OjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0
aW9uczo6QmFja1RvRnJvbnQ6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJh
dG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6Om5leHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmdvVG9IaWdoZXN0SW5T
dWJ0cmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SXRlcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3Np
dGlvbjo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckl0ZXJhdG9yUG9zaXRpb246OmN1cnJlbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjo6Y3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1Jl
bmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246
OmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjp0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OnRhcmdldFJlbmRl
clN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OnRh
cmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRl
cmF0b3I6OkNDTGF5ZXJJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0
b3I6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
dGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6
Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OnJlcHJlc2Vu
dHNUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRv
cjo6cmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckl0ZXJhdG9yOjpyZXByZXNlbnRzSXRzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJdGVyYXRvcjo6dGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2Fsa0xheWVyc0FuZENhbGN1bGF0ZVZpc2li
bGVMYXllclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuaDoKKwogMjAxMS0xMi0yMiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgogCiAgICAgICAgIE1vcmUgU2Nyb2xsQW5pbWF0b3JNYWMgY2xlYW51cApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBmNDA3MWEyNTcyMTEyOGMwZjNlZDVlOWUyYmRl
YjVjNGM2MmQ1NmEzLi4wN2IzODQ3NWY2ZGFmZTQ5MDAyMjRiZDQ1ZTUyMDI2OTg0MmY1YzRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDExLTEyLTIzICBE
YW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwOiBBZGRlZC4KKwogMjAxMS0x
Mi0yMSAgUGV0ZXIgS290d2ljeiAgPHBrb3R3aWN6QGdvb2dsZS5jb20+CiAKICAgICAgICAgUGx1
bWJzIHJlZnJlc2ggcmF0ZSB0aHJvdWdoIFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggNzZjODljZGU1MmJiNTYxNDUyMzE4NDAzZDgyOWI1YjI0OTFlZDdmMy4u
YWE4M2Q5YzkyNTA3NzVhNmU1YzdmNzEzMzM5NjljODYwMTY3NjVlOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMzYyMSw2ICszNjIxLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFk
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJT
b3J0ZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggOTNlOGQ4
NmM2NzE3MWMyNzdlYzE3NWM2MTlkYmU4ODBiNzJmNDE4Yi4uZDE5NTdiYmI1MDE1YWY4ZWJlNmQ3
MjlhN2YzYjBlMGYyYzM1MTRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgK
QEAgLTM5LDYgKzM5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0xheWVy
SXRlcmF0b3JBY3Rpb25zOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTsKIGNsYXNzIE1hbmFnZWRUZXh0dXJlOwpAQCAtOTYsNiArOTcsMTEgQEAgcHJp
dmF0ZToKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKICAgICBJ
bnRSZWN0IG1fY2xpcFJlY3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG1f
bGF5ZXJMaXN0OworCisgICAgLy8gRm9yIENDTGF5ZXJJdGVyYXRvckFjdGlvbnMKKyAgICBpbnQg
bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJIaXN0b3J5OworICAgIHVuc2lnbmVkIG1fY3VycmVu
dExheWVySGlzdG9yeTsKKyAgICBmcmllbmQgY2xhc3MgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkYjYy
NGZmMjFlNmU5MDQwNGI0ODQ2NWZjZGEyMGQxMmVkNWE1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0
b3IuY3BwCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9D
Q0xheWVySXRlcmF0b3IuaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgor
I2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBl
Pgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6YmVnaW4oQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3sK
KyAgICBwb3MubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSAwOworICAgIHBvcy5tX2N1cnJl
bnRMYXllciA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFj
ZVR5cGU+OjprTGF5ZXJSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlOworCisgICAgbV9o
aWdoZXN0VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0gMDsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJ
dGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248
TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3sKKyAgICBwb3MubV90YXJnZXRS
ZW5kZXJTdXJmYWNlTGF5ZXIgPSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlPjo6a0ludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAg
cG9zLm1fY3VycmVudExheWVyID0gMDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlw
ZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlv
bnM6OkJhY2tUb0Zyb250OjpuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwg
UmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit7CisgICAgLy8gSWYgdGhlIGN1cnJlbnQgbGF5ZXIg
aGFzIGEgUlMsIG1vdmUgdG8gaXRzIGxheWVyIGxpc3QuIE90aGVyd2lzZSwgdmlzaXQgdGhlIG5l
eHQgbGF5ZXIgaW4gdGhlIGN1cnJlbnQgUlMgbGF5ZXIgbGlzdC4KKyAgICBpZiAocG9zLmN1cnJl
bnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAg
Ly8gU2F2ZSBvdXIgcG9zaXRpb24gaW4gdGhlIGNoaWxkTGF5ZXIgbGlzdCBmb3IgdGhlIFJlbmRl
clN1cmZhY2UsIHRoZW4ganVtcCB0byB0aGUgbmV4dCBSZW5kZXJTdXJmYWNlLiBTYXZlIHdoZXJl
IHdlCisgICAgICAgIC8vIGNhbWUgZnJvbSBpbiB0aGUgbmV4dCBSZW5kZXJTdXJmYWNlIHNvIHdl
IGNhbiBnZXQgYmFjayB0byBpdC4KKyAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2UoKS0+
bV9jdXJyZW50TGF5ZXJIaXN0b3J5ID0gcG9zLm1fY3VycmVudExheWVyOworICAgICAgICBpbnQg
cHJldmlvdXNUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSBwb3MubV90YXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXI7CisKKyAgICAgICAgcG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0gKytt
X2hpZ2hlc3RUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgICAgIHBvcy5tX2N1cnJlbnRM
YXllciA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5
cGU+OjprTGF5ZXJSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlOworCisgICAgICAgIHBv
cy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9y
eSA9IHByZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgIH0gZWxzZSB7CisgICAg
ICAgICsrcG9zLm1fY3VycmVudExheWVyOworICAgICAgICB3aGlsZSAocG9zLm1fY3VycmVudExh
eWVyID09IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCkpIHsKKyAgICAg
ICAgICAgIC8vIEp1bXAgYmFjayB0byB0aGUgcHJldmlvdXMgUmVuZGVyU3VyZmFjZSwgYW5kIGdl
dCBiYWNrIHRoZSBwb3NpdGlvbiB3aGVyZSB3ZSB3ZXJlIGluIHRoYXQgbGlzdCwgYW5kIG1vdmUg
dG8gdGhlIG5leHQgcG9zaXRpb24gdGhlcmUuCisgICAgICAgICAgICBpZiAoIXBvcy5tX3Rhcmdl
dFJlbmRlclN1cmZhY2VMYXllcikgeworICAgICAgICAgICAgICAgIC8vIEVuZCBvZiB0aGUgbGlz
dAorICAgICAgICAgICAgICAgIHBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjprSW52YWxp
ZFRhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICAgICAgICAgICAgICBwb3MubV9jdXJyZW50
TGF5ZXIgPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IHBvcy50YXJnZXRSZW5kZXJT
dXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9yeTsKKyAgICAgICAgICAg
IHBvcy5tX2N1cnJlbnRMYXllciA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVu
dExheWVySGlzdG9yeSArIDE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ0xheWVy
SXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRp
b248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3sKKyAgICBwb3MubV90YXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSAwOworICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IHBvcy50
YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCkgLSAxOworICAgIGdvVG9IaWdoZXN0
SW5TdWJ0cmVlKHBvcyk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVu
YW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9u
dFRvQmFjazo6ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3Vy
ZmFjZVR5cGU+JiBwb3MpCit7CisgICAgcG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0g
Q0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmtJ
bnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgIHBvcy5tX2N1cnJlbnRMYXllciA9
IDA7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1
cmZhY2VUeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6bmV4
dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYg
cG9zKQoreworICAgIC8vIE1vdmVzIHRvIHRoZSBwcmV2aW91cyBsYXllciBpbiB0aGUgY3VycmVu
dCBSUyBsYXllciBsaXN0LiBUaGVuIHdlIGNoZWNrIGlmIHRoZQorICAgIC8vIG5ldyBjdXJyZW50
IGxheWVyIGhhcyBpdHMgb3duIFJTLCBpbiB3aGljaCBjYXNlIHRoZXJlIGFyZSB0aGluZ3MgaW4g
dGhhdCBSUyBsYXllciBsaXN0IHRoYXQgYXJlIGhpZ2hlciwgc28KKyAgICAvLyB3ZSBmaW5kIHRo
ZSBoaWdoZXN0IGxheWVyIGluIHRoYXQgc3VidHJlZS4KKyAgICAvLyBJZiB3ZSBtb3ZlIGJhY2sg
cGFzdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3QsIHdlIGp1bXAgdXAgdG8gdGhlIHByZXZpb3VzIFJT
IGxheWVyIGxpc3QsIHBpY2tpbmcgdXAgYWdhaW4gd2hlcmUgd2UKKyAgICAvLyBoYWQgcHJldmlv
dXNseSByZWN1cnNlZCBpbnRvIHRoZSBjdXJyZW50IFJTIGxheWVyIGxpc3QuCisKKyAgICBpZiAo
IXBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7CisgICAg
ICAgIC8vIFN1YnRyYWN0aW5nIG9uZSBoZXJlIHdpbGwgZXZlbnR1YWxseSBjYXVzZSB0aGUgY3Vy
cmVudCBsYXllciB0byBiZWNvbWUgdGhhdCBsYXllcgorICAgICAgICAvLyByZXByZXNlbnRpbmcg
dGhlIHRhcmdldCByZW5kZXIgc3VyZmFjZS4KKyAgICAgICAgLS1wb3MubV9jdXJyZW50TGF5ZXI7
CisgICAgICAgIGdvVG9IaWdoZXN0SW5TdWJ0cmVlKHBvcyk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgd2hpbGUgKHBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgp
KSB7CisgICAgICAgICAgICBpZiAoIXBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllcikgewor
ICAgICAgICAgICAgICAgIC8vIEVuZCBvZiB0aGUgbGlzdAorICAgICAgICAgICAgICAgIHBvcy5t
X3RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVy
VHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjprSW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXll
cjsKKyAgICAgICAgICAgICAgICBwb3MubV9jdXJyZW50TGF5ZXIgPSAwOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvcy5tX3RhcmdldFJlbmRl
clN1cmZhY2VMYXllciA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVySGlzdG9yeTsKKyAgICAgICAgICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IHBv
cy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySGlzdG9yeTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVu
ZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNr
Ojpnb1RvSGlnaGVzdEluU3VidHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUs
IFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQoreworICAgIGlmIChwb3MuY3VycmVudExheWVyUmVw
cmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdoaWxl
IChwb3MuY3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkg
eworICAgICAgICAvLyBTYXZlIHdoZXJlIHdlIHdlcmUgaW4gdGhlIGN1cnJlbnQgdGFyZ2V0IHN1
cmZhY2UsIG1vdmUgdG8gdGhlIG5leHQgb25lLCBhbmQgc2F2ZSB0aGUgdGFyZ2V0IHN1cmZhY2Ug
dGhhdCB3ZQorICAgICAgICAvLyBjYW1lIGZyb20gdGhlcmUgc28gd2UgY2FuIGdvIGJhY2sgdG8g
aXQuCisgICAgICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySGlz
dG9yeSA9IHBvcy5tX2N1cnJlbnRMYXllcjsKKyAgICAgICAgaW50IHByZXZpb3VzVGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVyID0gcG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworCisgICAg
ICAgIGZvciAoTGF5ZXJUeXBlKiBsYXllciA9IHBvcy5jdXJyZW50TGF5ZXIoKTsgcG9zLnRhcmdl
dFJlbmRlclN1cmZhY2VMYXllcigpICE9IGxheWVyOyArK3Bvcy5tX3RhcmdldFJlbmRlclN1cmZh
Y2VMYXllcikgeyB9CisgICAgICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IHBvcy50YXJnZXRSZW5k
ZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCkgLSAxOworCisgICAgICAgIHBvcy50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9yeSA9IHByZXZpb3Vz
VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgIH0KK30KKworLy8gRGVjbGFyZSBlYWNoIG9m
IHRoZSBhYm92ZSBmdW5jdGlvbnMgZm9yIExheWVyQ2hyb21pdW0gYW5kIENDTGF5ZXJJbXBsIGNs
YXNzZXMgc28gdGhhdCB0aGV5IGFyZSBsaW5rZWQuCit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7Cit0ZW1wbGF0ZSB2b2lkIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yUG9z
aXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6bmV4dChDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7CisK
K3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2lu
KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7
Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQo
Q0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsK
K3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQo
Q0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsK
KwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6bmV4
dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0+Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9C
YWNrOjplbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpG
cm9udFRvQmFjazo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwg
UmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpGcm9udFRvQmFjazo6Z29Ub0hpZ2hlc3RJblN1YnRyZWUoQ0NMYXllckl0ZXJhdG9y
UG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOworCit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsKK3RlbXBs
YXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVz
dEluU3VidHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJT
dXJmYWNlPiYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU3ODAzNTM2NzdmMGE5YWJlNTgyMTk5MDUwNjEwNTFhMzAyYjlmNWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySXRlcmF0b3IuaApAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
Q0xheWVySXRlcmF0b3JfaAorI2RlZmluZSBDQ0xheWVySXRlcmF0b3JfaAorCisjaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoZXNl
IGNsYXNzZXMgcHJvdmlkZSBtZWFucyB0byBpdGVyYXRlIG92ZXIgdGhlIFJlbmRlclN1cmZhY2Ut
TGF5ZXIgdHJlZS4KKy8vCisvLyBBIFJlbmRlclN1cmZhY2UgJFIkIG1heSBiZSByZWZlcnJlZCB0
byBpbiBvbmUgb2YgdHdvIGRpZmZlcmVudCBjb250ZXh0cy4gT25lIFJlbmRlclN1cmZhY2UgaXMg
ImN1cnJlbnQiIGF0IGFueSB0aW1lLCBmb3IKKy8vIHdoYXRldmVyIG9wZXJhdGlvbiBpcyBiZWlu
ZyBwZXJmb3JtZWQuIFRoaXMgY3VycmVudCBzdXJmYWNlIGlzIHJlZmVycmVkIHRvIGFzIGEgdGFy
Z2V0IHN1cmZhY2UuIEZvciBleGFtcGxlLCB3aGVuICRSJCBpcworLy8gYmVpbmcgcGFpbnRlZCBp
dCB3b3VsZCBiZSB0aGUgdGFyZ2V0IHN1cmZhY2UuIE9uY2UgJFIkIGhhcyBiZWVuIHBhaW50ZWQs
IGl0cyBjb250ZW50cyBtYXkgYmUgaW5jbHVkZWQgaW50byBhbm90aGVyCisvLyBzdXJmYWNlICRT
JC4gV2hpbGUgJFMkIGlzIGNvbnNpZGVyZWQgdGhlIHRhcmdldCBzdXJmYWNlIHdoZW4gaXQgaXMg
YmVpbmcgcGFpbnRlZCwgJFIkIGlzIGNhbGxlZCBhIGNvbnRyaWJ1dGluZyBzdXJmYWNlCisvLyBp
biB0aGlzIGNvbnRleHQgYXMgaXQgY29udHJpYnV0ZXMgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIHRh
cmdldCBzdXJmYWNlICRTJC4KKy8vCisvLyBUaGUgaXRlcmF0b3IncyBjdXJyZW50IHBvc2l0aW9u
IGluIHRoZSB0cmVlIGFsd2F5cyBwb2ludHMgdG8gc29tZSBsYXllci4gVGhlIHN0YXRlIG9mIHRo
ZSBpdGVyYXRvciBpbmRpY2F0ZXMgdGhlIHJvbGUgb2YgdGhlCisvLyBsYXllciwgYW5kIHdpbGwg
YmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgc3RhdGVzLiBBIHNpbmdsZSBsYXllciAkTCQg
d2lsbCBhcHBlYXIgaW4gdGhlIGl0ZXJhdGlvbiBwcm9jZXNzIGluIGF0IGxlYXN0IG9uZSwKKy8v
IGFuZCBwb3NzaWJseSBhbGwsIG9mIHRoZXNlIHN0YXRlcy4KKy8vIDEuIFJlcHJlc2VudGluZyB0
aGUgdGFyZ2V0IHN1cmZhY2U6IFRoZSBpdGVyYXRvciBpbiB0aGlzIHN0YXRlLCBwb2ludGluZyBh
dCBsYXllciAkTCQsIGluZGljYXRlcyB0aGF0IHRoZSB0YXJnZXQgUmVuZGVyU3VyZmFjZQorLy8g
aXMgbm93IHRoZSBzdXJmYWNlIG93bmVkIGJ5ICRMJC4gVGhpcyB3aWxsIG9jY3VyIGV4YWN0bHkg
b25jZSBmb3IgZWFjaCBSZW5kZXJTdXJmYWNlIGluIHRoZSB0cmVlLgorLy8gMi4gUmVwcmVzZW50
aW5nIGEgY29udHJpYnV0aW5nIHN1cmZhY2U6IFRoZSBpdGVyYXRvciBpbiB0aGlzIHN0YXRlLCBw
b2ludGluZyBhdCBsYXllciAkTCQsIHJlZmVycyB0byB0aGUgUmVuZGVyU3VyZmFjZSBvd25lZAor
Ly8gYnkgJEwkIGFzIGEgY29udHJpYnV0aW5nIHN1cmZhY2UsIHdpdGhvdXQgY2hhbmdpbmcgdGhl
IGN1cnJlbnQgdGFyZ2V0IFJlbmRlclN1cmZhY2UuCisvLyAzLiBSZXByZXNlbnRpbmcgaXRzZWxm
OiBUaGUgaXRlcmF0b3IgaW4gdGhpcyBzdGF0ZSwgcG9pbnRpbmcgYXQgbGF5ZXIgJEwkLCByZWZl
cnMgdG8gdGhlIGxheWVyIGl0c2VsZiwgYXMgYSBjaGlsZCBvZiB0aGUKKy8vIGN1cnJlbnQgdGFy
Z2V0IFJlbmRlclN1cmZhY2UuCisvLworLy8gVGhlIEJhY2tUb0Zyb250IGl0ZXJhdG9yIHdpbGwg
cmV0dXJuIGEgbGF5ZXIgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgc3VyZmFjZSBiZWZvcmUgcmV0
dXJuaW5nIGxheWVycyByZXByZXNlbnRpbmcgdGhlbXNlbHZlcworLy8gYXMgY2hpbGRyZW4gb2Yg
dGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2UuIFdoZXJlYXMgdGhlIEZyb250VG9CYWNrIG9yZGVy
aW5nIHdpbGwgaXRlcmF0ZSBvdmVyIGNoaWxkcmVuIGxheWVycyBvZiBhIHN1cmZhY2UKKy8vIGJl
Zm9yZSB0aGUgbGF5ZXIgcmVwcmVzZW50aW5nIHRoZSBzdXJmYWNlIGFzIGEgdGFyZ2V0IHN1cmZh
Y2UuCisvLworLy8gVG8gdXNlIHRoZSBpdGVyYXRvcnM6CisvLworLy8gQ3JlYXRlIGEgc3RlcHBp
bmcgaXRlcmF0b3IgYW5kIGVuZCBpdGVyYXRvciBieSBjYWxsaW5nIENDTGF5ZXJJdGVyYXRvcjo6
YmVnaW4oKSBhbmQgQ0NMYXllckl0ZXJhdG9yOjplbmQoKSBhbmQgcGFzc2luZyBpbiB0aGUKKy8v
IGxpc3Qgb2YgbGF5ZXJzIG93bmluZyB0YXJnZXQgUmVuZGVyU3VyZmFjZXMuIFN0ZXAgdGhyb3Vn
aCB0aGUgdHJlZSBieSBpbmNyZW1lbnRpbmcgdGhlIHN0ZXBwaW5nIGl0ZXJhdG9yIHdoaWxlIGl0
IGlzICE9IHRvCisvLyB0aGUgZW5kIGl0ZXJhdG9yLiBBdCBlYWNoIHN0ZXAgdGhlIGl0ZXJhdG9y
IGtub3dzIHdoYXQgdGhlIGxheWVyIGlzIHJlcHJlc2VudGluZywgYW5kIHlvdSBjYW4gcXVlcnkg
dGhlIGl0ZXJhdG9yIHRvIGRlY2lkZQorLy8gd2hhdCBhY3Rpb25zIHRvIHBlcmZvcm0gd2l0aCB0
aGUgbGF5ZXIgZ2l2ZW4gd2hhdCBpdCByZXByZXNlbnRzLgorCisvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK
Ky8vIEEgc3RydWN0IHRvIGhvbGQgdGhlIGl0ZXJhdG9yJ3MgY3VycmVudCBwb3NpdGlvbiwgd2hp
Y2ggaXMgcGFzc2VkIHRvIHRoZSB2YXJpb3VzIENDTGF5ZXJJdGVyYXRvckFjdGlvbiBmdW5jdGlv
bnMsIGZvciB0aGVtIHRvCisvLyByZWFkIGFuZCB1cGRhdGUuIFRoaXMgc3RydWN0IGV4aXN0cyBz
byB0aGUgdGVtcGxhdGVkIGFjdGlvbiBmdW5jdGlvbnMgZG9uJ3QgbmVlZCB0byBhY2Nlc3MgdGhl
IENDTGF5ZXJJdGVyYXRvciBjbGFzcy4KKy8vCisvLyBUaGVyZSBpcyBhIDE6MSByZWxhdGlvbnNo
aXAgYmV0d2VlbiBhbiBpbnN0YW5jZSBvZiB0aGUgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24gY2xh
c3MgYW5kIGEgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6Rm9vIGNsYXNzLAorLy8gc28gYW4gaXRl
cmF0b3IgdHlwZSBjYW4gaG9sZCBleHRyYSBwb3NpdGlvbiBkYXRhLCBpZiByZXF1aXJlZCwgaW4g
aXRzIG93biBjbGFzcyBpbnN0YW5jZS4KKy8vCisvLyBUaGUgY3VycmVudCBwb3NpdGlvbiBvZiB0
aGUgaXRlcmF0b3IgaXMgaGVsZCBpbiB0d28gaW50ZWdlciB2YXJpYWJsZXMuCisvLyAtIFRoZSBt
X3RhcmdldFJlbmRlclN1cmZhY2VMYXllciBpcyBhIHBvc2l0aW9uIGluIHRoZSBtX3JlbmRlclN1
cmZhY2VMYXllckxpc3QuIFRoaXMgcG9pbnRzIHRvIGEgbGF5ZXIgd2hpY2ggb3ducyB0aGUgY3Vy
cmVudAorLy8gdGFyZ2V0IHN1cmZhY2UuIFRoaXMgaXMgYSB2YWx1ZSBmcm9tIDAgdG8gbi0xIChu
ID0gc2l6ZSBvZiBtX3JlbmRlclN1cmZhY2VMYXllckxpc3QgPSBudW1iZXIgb2Ygc3VyZmFjZXMp
LiBBIHZhbHVlIG91dHNpZGUgb2YKKy8vIHRoaXMgcmFuZ2UgKHVzdWFsbHkga0ludmFsaWRUYXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXIpIGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBwb3NpdGlvbiBvdXRz
aWRlIHRoZSBib3VuZHMgb2YgdGhlIHRyZWUuCisvLyAtIFRoZSBtX2N1cnJlbnRMYXllciBpcyBh
IHBvc2l0aW9uIGluIHRoZSBsaXN0IG9mIGxheWVycyB0aGF0IGFyZSBjaGlsZHJlbiBvZiB0aGUg
Y3VycmVudCB0YXJnZXQgc3VyZmFjZS4gV2hlbiBwb2ludGluZyB0bworLy8gb25lIG9mIHRoZXNl
IGxheWVycywgdGhpcyBpcyBhIHZhbHVlIGZyb20gMCB0byBuLTEgKG4gPSBudW1iZXIgb2YgY2hp
bGRyZW4pLiBTaW5jZSB0aGUgaXRlcmF0b3IgbXVzdCBhbHNvIHN0b3AgYXQgdGhlIGxheWVycwor
Ly8gcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgc3VyZmFjZSwgdGhpcyBpcyBkb25lIGJ5IHNldHRp
bmcgdGhlIG1fY3VycmVudExheWVyIHRvIGEgdmFsdWUgb2Yga0xheWVyUmVwcmVzZW50aW5nVGFy
Z2V0UmVuZGVyU3VyZmFjZS4KK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUg
UmVuZGVyU3VyZmFjZVR5cGU+CitzdHJ1Y3QgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24geworICAg
IGV4cGxpY2l0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5
ZXJUeXBlPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSA6IG1fcmVuZGVyU3VyZmFjZUxheWVy
TGlzdChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSB7IH0KKworICAgIGlubGluZSBMYXllclR5cGUq
IGN1cnJlbnRMYXllcigpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJn
ZXRSZW5kZXJTdXJmYWNlKCkgPyB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSA6IHRhcmdldFJl
bmRlclN1cmZhY2VDaGlsZHJlbigpW21fY3VycmVudExheWVyXS5nZXQoKTsgfQorCisgICAgaW5s
aW5lIGJvb2wgY3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2Uo
KSBjb25zdCB7IHJldHVybiBDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250
cmlidXRlc1RvVGFyZ2V0PExheWVyVHlwZT4oY3VycmVudExheWVyKCksIHRhcmdldFJlbmRlclN1
cmZhY2VMYXllcigpLT5pZCgpKTsgfQorICAgIGlubGluZSBib29sIGN1cnJlbnRMYXllclJlcHJl
c2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50TGF5ZXIg
PT0ga0xheWVyUmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQorCisgICAgaW5saW5l
IExheWVyVHlwZSogdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgY29uc3QgeyByZXR1cm4gKCpt
X3JlbmRlclN1cmZhY2VMYXllckxpc3QpW21fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyXS5nZXQo
KTsgfQorICAgIGlubGluZSBSZW5kZXJTdXJmYWNlVHlwZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIHRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpLT5yZW5kZXJTdXJmYWNl
KCk7IH0KKyAgICBpbmxpbmUgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIHRhcmdl
dFJlbmRlclN1cmZhY2VDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIHRhcmdldFJlbmRlclN1cmZh
Y2UoKS0+bGF5ZXJMaXN0KCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDQ0xheWVy
SXRlcmF0b3JQb3NpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPT0gb3RoZXIubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5
ZXIKKyAgICAgICAgICAgICYmIG1fY3VycmVudExheWVyID09IG90aGVyLm1fY3VycmVudExheWVy
OworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBpbnQga0ludmFsaWRUYXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXIgPSAtMTsKKyAgICAvLyBUaGlzIG11c3QgYmUgLTEgc2luY2UgdGhlIGl0ZXJhdG9y
IGFjdGlvbiBjb2RlIGFzc3VtZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBiZQorICAgIC8vIHJlYWNo
ZWQgYnkgc3VidHJhY3Rpbmcgb25lIGZyb20gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBsYXll
ciBpbiB0aGUgY3VycmVudAorICAgIC8vIHRhcmdldCBzdXJmYWNlJ3MgY2hpbGQgbGF5ZXIgbGlz
dCwgd2hpY2ggaXMgMC4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQga0xheWVyUmVwcmVzZW50
aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZSA9ICh1bnNpZ25lZCktMTsKKworICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiBtX3JlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgaW50
IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgIHVuc2lnbmVkIG1fY3VycmVudExheWVy
OworfTsKKworLy8gQW4gaXRlcmF0b3IgY2xhc3MgZm9yIHdhbGtpbmcgb3ZlciBsYXllcnMgaW4g
dGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZS4KKy8vIFVzZSB0aGUgYmVnaW4oKSBhbmQgZW5k
KCkgZnVuY3Rpb25zIHRvIGdldCBhbiBpdGVyYXRvciByZWxhdGl2ZSB0byBhIGdpdmVuIGxpc3Qg
b2YgcmVuZGVyU3VyZmFjZUxheWVycy4KK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5
cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBJdGVyYXRvckFjdGlvblR5cGU+Citj
bGFzcyBDQ0xheWVySXRlcmF0b3IgeworICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVy
VHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEl0ZXJhdG9yQWN0aW9uVHlwZT4gQ0NMYXllckl0ZXJh
dG9yVHlwZTsKKworcHVibGljOgorICAgIENDTGF5ZXJJdGVyYXRvcigpIDogbV9wb3NpdGlvbigw
KSwgbV9hY3Rpb25zKDApIHsgfQorCisgICAgc3RhdGljIENDTGF5ZXJJdGVyYXRvclR5cGUgYmVn
aW4oY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpIHsgcmV0dXJuIENDTGF5ZXJJdGVyYXRvclR5cGUocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
dHJ1ZSk7IH0KKyAgICBzdGF0aWMgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQoY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpIHsgcmV0dXJuIEND
TGF5ZXJJdGVyYXRvclR5cGUocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZmFsc2UpOyB9CisKKyAg
ICBDQ0xheWVySXRlcmF0b3JUeXBlJiBvcGVyYXRvcisrKCkgeyBtX2FjdGlvbnMtPm5leHQobV9w
b3NpdGlvbik7IHJldHVybiAqdGhpczsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDQ0xh
eWVySXRlcmF0b3JUeXBlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbiA9PSBvdGhl
ci5tX3Bvc2l0aW9uOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENDTGF5ZXJJdGVyYXRv
clR5cGUmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAg
TGF5ZXJUeXBlKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gbV9wb3NpdGlvbi5jdXJyZW50TGF5ZXIo
KTsgfQorICAgIExheWVyVHlwZSogb3BlcmF0b3IqKCkgeyByZXR1cm4gbV9wb3NpdGlvbi5jdXJy
ZW50TGF5ZXIoKTsgfQorCisgICAgYm9vbCByZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgp
IHsgcmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1
cmZhY2UoKTsgfQorICAgIGJvb2wgcmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2Uo
KSB7IHJldHVybiAhcmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSAmJiBtX3Bvc2l0aW9u
LmN1cnJlbnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCk7IH0KKyAg
ICBib29sIHJlcHJlc2VudHNJdHNlbGYoKSB7IHJldHVybiAhcmVwcmVzZW50c1RhcmdldFJlbmRl
clN1cmZhY2UoKSAmJiAhcmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKTsgfQor
CisgICAgTGF5ZXJUeXBlKiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSB7IHJldHVybiBtX3Bv
c2l0aW9uLnRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpOyB9CisKK3ByaXZhdGU6CisgICAgQ0NM
YXllckl0ZXJhdG9yKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBib29sIHN0YXJ0KQorICAgICAgICA6IG1fcG9zaXRpb24ocmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCkKKyAgICAgICAgLCBtX2FjdGlvbnMobmV3IEl0ZXJhdG9yQWN0aW9uVHlw
ZSgpKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXJ0ICYmICFyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LT5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2FjdGlvbnMtPmJlZ2luKG1fcG9zaXRpb24pOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2FjdGlvbnMtPmVuZChtX3Bvc2l0aW9uKTsKKyAg
ICB9CisKKyAgICBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlPiBtX3Bvc2l0aW9uOworICAgIEl0ZXJhdG9yQWN0aW9uVHlwZSogbV9hY3Rpb25zOwor
CisgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM7Cit9OworCisvLyBPcmRl
cmluZ3MgZm9yIGl0ZXJhdGluZyBvdmVyIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUuCitz
dHJ1Y3QgQ0NMYXllckl0ZXJhdG9yQWN0aW9ucyB7CisgICAgLy8gV2Fsa3MgbGF5ZXJzIHNvcnRl
ZCBieSB6LW9yZGVyIGZyb20gYmFjayB0byBmcm9udC4KKyAgICBjbGFzcyBCYWNrVG9Gcm9udCB7
CisgICAgcHVibGljOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBiZWdpbihDQ0xheWVySXRlcmF0
b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOworCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgor
ICAgICAgICB2b2lkIGVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRl
clN1cmZhY2VUeXBlPiYpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUs
IHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIG5leHQoQ0NMYXllckl0
ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIGludCBtX2hpZ2hlc3RUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7Cisg
ICAgfTsKKworICAgIC8vIFdhbGtzIGxheWVycyBzb3J0ZWQgYnkgei1vcmRlciBmcm9tIGJhY2sg
dG8gZnJvbnQuCisgICAgY2xhc3MgRnJvbnRUb0JhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+
CisgICAgICAgIHZvaWQgYmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJU
eXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBlbmQoQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNl
VHlwZT4KKyAgICAgICAgdm9pZCBuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlw
ZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAg
ICAgdm9pZCBnb1RvSGlnaGVzdEluU3VidHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXll
clR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOworICAgIH07Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXgg
Y2Q3NTZkNjAwZGMwZjBlM2YzMDFiMzJkN2U4ZTg0ZmMwMGFiMDc2MS4uODFhNzA2N2EyZDkxOTZi
MTRiZjk5MjRmYmQwZDY1NmRkMWU4ZjIzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIK
KyNpbmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5j
bHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgpAQCAtNDM0LDU3ICs0MzUsNDEgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExh
eWVyQ2hyb21pdW0qIHJlbmRlclMKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJD
b250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFBhaW50VHlw
ZSBwYWludFR5cGUpCiB7Ci0gICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4
KSB7Ci0gICAgICAgIExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1
cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKLSAgICAgICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJm
YWNlKCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKLSAgICAgICAgQVNTRVJUKHJl
bmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpOwotCi0gICAgICAgIHBhaW50TWFza0FuZFJlcGxp
Y2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllciwgcGFpbnRUeXBlKTsKLQotICAg
ICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlz
dCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwg
bGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7Ci0gICAgICAgICAgICBMYXllckNocm9t
aXVtKiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKLQotICAgICAgICAgICAg
Ly8gTGF5ZXJzIHRoYXQgc3RhcnQgYSBuZXcgcmVuZGVyIHN1cmZhY2Ugd2lsbCBiZSBwYWludGVk
IHdoZW4gdGhlIHJlbmRlcgotICAgICAgICAgICAgLy8gc3VyZmFjZSdzIGxpc3QgaXMgcHJvY2Vz
c2VkLgotICAgICAgICAgICAgaWYgKENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFj
ZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJDaHJvbWl1bT4obGF5ZXIsIHJlbmRlclN1cmZhY2VM
YXllci0+aWQoKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIEFT
U0VSVCghbGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgICAgIHBhaW50Q29u
dGVudHNJZkRpcnR5KGxheWVyLCBwYWludFR5cGUpOworICAgIC8vIFVzZSBGcm9udFRvQmFjayB0
byBhbGxvdyBmb3IgdGVzdGluZyBvY2NsdXNpb24gYW5kIHBlcmZvcm1pbmcgY3VsbGluZyBkdXJp
bmcgdGhlIHRyZWUgd2Fsay4KKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9t
aXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250
VG9CYWNrPiBDQ0xheWVySXRlcmF0b3JUeXBlOworCisgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBl
bmQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjplbmQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
ICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJl
Z2luKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IGlmIChpdC5yZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgICAgICBB
U1NFUlQoaXQtPnJlbmRlclN1cmZhY2UoKS0+ZHJhd09wYWNpdHkoKSk7CisgICAgICAgICAgICBw
YWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSgqaXQsIHBhaW50VHlwZSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigpKSB7CisgICAgICAgICAgICBBU1NF
UlQoaXQtPm9wYWNpdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWl0LT5ib3VuZHMoKS5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkoKml0LCBwYWludFR5cGUp
OwogICAgICAgICB9CiAgICAgfQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZXh0dXJlVXBk
YXRlciYgdXBkYXRlcikKIHsKLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSBtX3VwZGF0ZUxp
c3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewotICAg
ICAgICBMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSBtX3VwZGF0ZUxpc3Rbc3Vy
ZmFjZUluZGV4XS5nZXQoKTsKLSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJT
dXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIEFT
U0VSVChyZW5kZXJTdXJmYWNlKTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRyYXdP
cGFjaXR5KCkpOwotCi0gICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigp
KQotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhjb250ZXh0LCB1cGRhdGVyKTsKLQotICAgICAgICBpZiAocmVuZGVy
U3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVyU3VyZmFj
ZUxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0
LCB1cGRhdGVyKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VM
YXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpKQotICAgICAgICAgICAgICAgIHJlbmRl
clN1cmZhY2VMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlz
dCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwg
bGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7Ci0gICAgICAgICAgICBMYXllckNocm9t
aXVtKiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKLQotICAgICAgICAgICAg
aWYgKENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJn
ZXQ8TGF5ZXJDaHJvbWl1bT4obGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllci0+aWQoKSkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGxheWVyLT51cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwotICAgICAgICB9CisgICAgLy8gVXNlIEJh
Y2tUb0Zyb250IHRvIGhpdCB0YXJnZXQgc3VyZmFjZXMgYmVmb3JlIHRoZWlyIGNoaWxkcmVuLgor
ICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ+IENDTGF5ZXJJdGVy
YXRvclR5cGU7CisKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRv
clR5cGU6OmVuZCgmbV91cGRhdGVMaXN0KTsKKyAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUg
aXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmbV91cGRhdGVMaXN0KTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgp
KSB7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnJlbmRlclN1cmZhY2UoKS0+ZHJhd09wYWNpdHko
KSk7CisgICAgICAgICAgICBpZiAoaXQtPm1hc2tMYXllcigpKQorICAgICAgICAgICAgICAgIGl0
LT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0LCB1cGRhdGVy
KTsKKworICAgICAgICAgICAgaWYgKGl0LT5yZXBsaWNhTGF5ZXIoKSkgeworICAgICAgICAgICAg
ICAgIGl0LT5yZXBsaWNhTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0
LCB1cGRhdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoaXQtPnJlcGxpY2FMYXllcigpLT5tYXNr
TGF5ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgaXQtPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5
ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0LCB1cGRhdGVyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkpCisgICAg
ICAgICAgICBpdC0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0LCB1cGRhdGVyKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmlu
ZGV4IDU2NTA5YmNlYzNjNjFlMmRmZTE2NjRhYjQxNjVmNDI5MzczOTNlMWIuLmIzYTc3ZTc2YmU3
MTc4NzFlODc5ZDQ2MTk1MDRjODE3ZTU3ZmFlOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclN1
cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJm
YWNlLmgiCiAKQEAgLTQ3MSwxNSArNDcyLDE0IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgog
c3RhdGljIHZvaWQgd2Fsa0xheWVyc0FuZENhbGN1bGF0ZVZpc2libGVMYXllclJlY3RzKGNvbnN0
IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewot
ICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgp
IC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewotICAgICAgICBMYXll
clR5cGUqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFj
ZUluZGV4XS5nZXQoKTsKLSAgICAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIHJlbmRlclN1cmZhY2Ug
PSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLQotICAgICAgICBWZWN0b3I8
UmVmUHRyPExheWVyVHlwZT4gPiYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0
KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBs
YXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIExheWVyVHlwZSog
bGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7Ci0gICAgICAgICAgICBJbnRSZWN0
IHZpc2libGVMYXllclJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2li
bGVMYXllclJlY3Q8TGF5ZXJUeXBlPihsYXllcik7Ci0gICAgICAgICAgICBsYXllci0+c2V0Vmlz
aWJsZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKKyAgICAvLyBVc2UgQmFja1RvRnJvbnQg
dG8gaGl0IHRhcmdldCBzdXJmYWNlcyBiZWZvcmUgdGhlaXIgY2hpbGRyZW4uCisgICAgdHlwZWRl
ZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQ0NMYXllckl0
ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisKKyAgICBD
Q0xheWVySXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CisgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NM
YXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCFpdC5yZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpKSB7CisgICAgICAgICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3Q8TGF5ZXJUeXBlPigqaXQpOwor
ICAgICAgICAgICAgaXQtPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxheWVyUmVjdCk7CiAg
ICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IGE4ZTg3
YTlmOWJlYTVkOWJiNGU4MThkZjUwZGMwOGQ5ZTczMjZmOGMuLjgxYzdkMzk3OGIwMDQ2ZjgzMjE2
NjQ5NzdjZWY1MDRlZjcyMGM5NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC00
Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NEYW1hZ2VUcmFja2Vy
OwogY2xhc3MgQ0NMYXllckltcGw7CitjbGFzcyBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOwogY2xh
c3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwogY2xhc3MgTWFuYWdlZFRleHR1cmU7CiAKQEAgLTEy
OSw2ICsxMzAsMTEgQEAgcHJpdmF0ZToKIAogICAgIC8vIFN0b3JlZCBpbiB0aGUgInN1cmZhY2Ug
c3BhY2UiIHdoZXJlIHRoaXMgZGFtYWdlIGNhbiBiZSB1c2VkIGZvciBzY2lzc29yaW5nLgogICAg
IEZsb2F0UmVjdCBtX2RhbWFnZVJlY3Q7CisKKyAgICAvLyBGb3IgQ0NMYXllckl0ZXJhdG9yQWN0
aW9ucworICAgIGludCBtX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckhpc3Rvcnk7CisgICAgdW5z
aWduZWQgbV9jdXJyZW50TGF5ZXJIaXN0b3J5OworICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVySXRl
cmF0b3JBY3Rpb25zOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXgg
ZTY3NGJiNmI4NWIwODVjYWJhY2M5ZDlkNjQ5OTkzZDVkNjJmZTVjZi4uYWQ0MjQxMmNiNTJmZDJm
NThiZWM5YTRjZTgzZjRlMjg4MTk2Y2I4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CkBAIC02NCw2ICs2NCw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2VkVGltZVNv
dXJjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCcsCisgICAg
ICAgICAgICAndGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDTGF5ZXJRdWFkVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJTb3J0
ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
SXRlcmF0b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0
ZXJhdG9yVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWRkNmI2YzRmMDEyZjRiNTIwNzY3ODU5OGQ3NmNi
Nzk4MTg4ZTk4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5o
IgorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oIgorI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyA6OnRlc3Rpbmc6Ok1v
Y2s7Cit1c2luZyA6OnRlc3Rpbmc6Ol87Cit1c2luZyA6OnRlc3Rpbmc6OkF0TGVhc3Q7Cit1c2lu
ZyA6OnRlc3Rpbmc6OkFueU51bWJlcjsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVGVzdExheWVy
Q2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUZXN0TGF5ZXJDaHJvbWl1bSgpKTsgfQorCisgICAgaW50IG1fY291bnRSZXByZXNlbnRpbmdU
YXJnZXRTdXJmYWNlOworICAgIGludCBtX2NvdW50UmVwcmVzZW50aW5nQ29udHJpYnV0aW5nU3Vy
ZmFjZTsKKyAgICBpbnQgbV9jb3VudFJlcHJlc2VudGluZ0l0c2VsZjsKKworICAgIHZpcnR1YWwg
Ym9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2RyYXdzQ29udGVudDsgfQorICAg
IHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wgZHJhd3NDb250ZW50KSB7IG1fZHJhd3NDb250ZW50
ID0gZHJhd3NDb250ZW50OyB9CisKK3ByaXZhdGU6CisgICAgVGVzdExheWVyQ2hyb21pdW0oKQor
ICAgICAgICA6IExheWVyQ2hyb21pdW0oMCkKKyAgICAgICAgLCBtX2RyYXdzQ29udGVudCh0cnVl
KQorICAgIHsKKyAgICAgICAgc2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAg
c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CisgICAgfQor
CisgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKK307CisKKyNkZWZpbmUgRVhQRUNUX0NPVU5UKGxh
eWVyLCB0YXJnZXQsIGNvbnRyaWIsIGl0c2VsZikgXAorICAgIEVYUEVDVF9FUSh0YXJnZXQsIGxh
eWVyLT5tX2NvdW50UmVwcmVzZW50aW5nVGFyZ2V0U3VyZmFjZSk7ICAgICAgICAgIFwKKyAgICBF
WFBFQ1RfRVEoY29udHJpYiwgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdDb250cmlidXRpbmdT
dXJmYWNlKTsgICBcCisgICAgRVhQRUNUX0VRKGl0c2VsZiwgbGF5ZXItPm1fY291bnRSZXByZXNl
bnRpbmdJdHNlbGYpOworCit0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0sIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNr
PiBGcm9udFRvQmFjazsKK3R5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ+
IEJhY2tUb0Zyb250OworCit2b2lkIHJlc2V0Q291bnRzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHN1
cmZhY2VJbmRleCA9IDA7IHN1cmZhY2VJbmRleCA8IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6
ZSgpOyArK3N1cmZhY2VJbmRleCkgeworICAgICAgICBUZXN0TGF5ZXJDaHJvbWl1bSogcmVuZGVy
U3VyZmFjZUxheWVyID0gc3RhdGljX2Nhc3Q8VGVzdExheWVyQ2hyb21pdW0qPihyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCkpOworICAgICAgICBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZh
Y2UoKTsKKworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdU
YXJnZXRTdXJmYWNlID0gLTE7CisgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bV9jb3VudFJl
cHJlc2VudGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2UgPSAtMTsKKyAgICAgICAgcmVuZGVyU3VyZmFj
ZUxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nSXRzZWxmID0gLTE7CisKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IHJlbmRlclN1cmZhY2UtPmxheWVy
TGlzdCgpLnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAgICAgICBUZXN0TGF5ZXJDaHJv
bWl1bSogbGF5ZXIgPSBzdGF0aWNfY2FzdDxUZXN0TGF5ZXJDaHJvbWl1bSo+KHJlbmRlclN1cmZh
Y2UtPmxheWVyTGlzdCgpW2xheWVySW5kZXhdLmdldCgpKTsKKworICAgICAgICAgICAgbGF5ZXIt
Pm1fY291bnRSZXByZXNlbnRpbmdUYXJnZXRTdXJmYWNlID0gLTE7CisgICAgICAgICAgICBsYXll
ci0+bV9jb3VudFJlcHJlc2VudGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2UgPSAtMTsKKyAgICAgICAg
ICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nSXRzZWxmID0gLTE7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgaXRlcmF0ZUZyb250VG9CYWNrKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICByZXNldENvdW50cygqcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKEZyb250
VG9CYWNrIGl0ID0gRnJvbnRUb0JhY2s6OmJlZ2luKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBp
dCAhPSBGcm9udFRvQmFjazo6ZW5kKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOyArK2l0LCArK2Nv
dW50KSB7CisgICAgICAgIFRlc3RMYXllckNocm9taXVtKiBsYXllciA9IHN0YXRpY19jYXN0PFRl
c3RMYXllckNocm9taXVtKj4oKml0KTsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRS
ZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ1Rh
cmdldFN1cmZhY2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNDb250cmlidXRp
bmdSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2VudGlu
Z0NvbnRyaWJ1dGluZ1N1cmZhY2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNJ
dHNlbGYoKSkKKyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nSXRzZWxmID0g
Y291bnQ7CisgICAgfQorfQorCit2b2lkIGl0ZXJhdGVCYWNrVG9Gcm9udChWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgcmVzZXRD
b3VudHMoKnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIGludCBjb3VudCA9IDA7CisgICAg
Zm9yIChCYWNrVG9Gcm9udCBpdCA9IEJhY2tUb0Zyb250OjpiZWdpbihyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsgaXQgIT0gQmFja1RvRnJvbnQ6OmVuZChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsg
KytpdCwgKytjb3VudCkgeworICAgICAgICBUZXN0TGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBzdGF0
aWNfY2FzdDxUZXN0TGF5ZXJDaHJvbWl1bSo+KCppdCk7CisgICAgICAgIGlmIChpdC5yZXByZXNl
bnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKQorICAgICAgICAgICAgbGF5ZXItPm1fY291bnRSZXBy
ZXNlbnRpbmdUYXJnZXRTdXJmYWNlID0gY291bnQ7CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRz
Q29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpKQorICAgICAgICAgICAgbGF5ZXItPm1fY291bnRS
ZXByZXNlbnRpbmdDb250cmlidXRpbmdTdXJmYWNlID0gY291bnQ7CisgICAgICAgIGlmIChpdC5y
ZXByZXNlbnRzSXRzZWxmKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2VudGlu
Z0l0c2VsZiA9IGNvdW50OworICAgIH0KK30KKworVEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBz
aW1wbGVUcmVlKQoreworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0g
VGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1
bT4gZmlyc3QgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RM
YXllckNocm9taXVtPiBzZWNvbmQgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPFRlc3RMYXllckNocm9taXVtPiB0aGlyZCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGZvdXJ0aCA9IFRlc3RMYXllckNo
cm9taXVtOjpjcmVhdGUoKTsKKworICAgIHJvb3RMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgp
OworCisgICAgcm9vdExheWVyLT5hZGRDaGlsZChmaXJzdCk7CisgICAgcm9vdExheWVyLT5hZGRD
aGlsZChzZWNvbmQpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQodGhpcmQpOworICAgIHJvb3RM
YXllci0+YWRkQ2hpbGQoZm91cnRoKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiBsYXllckxpc3Q7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9v
dExheWVyKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYpOworCisgICAg
aXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1Rf
Q09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7CisgICAgRVhQRUNUX0NPVU5UKGZpcnN0LCAtMSwg
LTEsIDIpOworICAgIEVYUEVDVF9DT1VOVChzZWNvbmQsIC0xLCAtMSwgMyk7CisgICAgRVhQRUNU
X0NPVU5UKHRoaXJkLCAtMSwgLTEsIDQpOworICAgIEVYUEVDVF9DT1VOVChmb3VydGgsIC0xLCAt
MSwgNSk7CisKKyAgICBpdGVyYXRlRnJvbnRUb0JhY2soJnJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OworICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDUsIC0xLCA0KTsKKyAgICBFWFBFQ1RfQ09V
TlQoZmlyc3QsIC0xLCAtMSwgMyk7CisgICAgRVhQRUNUX0NPVU5UKHNlY29uZCwgLTEsIC0xLCAy
KTsKKyAgICBFWFBFQ1RfQ09VTlQodGhpcmQsIC0xLCAtMSwgMSk7CisgICAgRVhQRUNUX0NPVU5U
KGZvdXJ0aCwgLTEsIC0xLCAwKTsKKworfQorCitURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIGNv
bXBsZXhUcmVlKQoreworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0g
VGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1
bT4gcm9vdDEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RM
YXllckNocm9taXVtPiByb290MiA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QzID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIxID0gVGVzdExheWVyQ2hy
b21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIyID0g
VGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1
bT4gcm9vdDIzID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0
TGF5ZXJDaHJvbWl1bT4gcm9vdDIyMSA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QyMzEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisKKyAgICByb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAg
IHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDEpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9v
dDIpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDMpOworICAgIHJvb3QyLT5hZGRDaGls
ZChyb290MjEpOworICAgIHJvb3QyLT5hZGRDaGlsZChyb290MjIpOworICAgIHJvb3QyLT5hZGRD
aGlsZChyb290MjMpOworICAgIHJvb3QyMi0+YWRkQ2hpbGQocm9vdDIyMSk7CisgICAgcm9vdDIz
LT5hZGRDaGlsZChyb290MjMxKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiBsYXllckxpc3Q7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExh
eWVyKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYpOworCisgICAgaXRl
cmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09V
TlQocm9vdExheWVyLCAwLCAtMSwgMSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QxLCAtMSwgLTEs
IDIpOworICAgIEVYUEVDVF9DT1VOVChyb290MiwgLTEsIC0xLCAzKTsKKyAgICBFWFBFQ1RfQ09V
TlQocm9vdDIxLCAtMSwgLTEsIDQpOworICAgIEVYUEVDVF9DT1VOVChyb290MjIsIC0xLCAtMSwg
NSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMjEsIC0xLCAtMSwgNik7CisgICAgRVhQRUNUX0NP
VU5UKHJvb3QyMywgLTEsIC0xLCA3KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIzMSwgLTEsIC0x
LCA4KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDMsIC0xLCAtMSwgOSk7CisKKyAgICBpdGVyYXRl
RnJvbnRUb0JhY2soJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9DT1VOVChy
b290TGF5ZXIsIDksIC0xLCA4KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDEsIC0xLCAtMSwgNyk7
CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyLCAtMSwgLTEsIDYpOworICAgIEVYUEVDVF9DT1VOVChy
b290MjEsIC0xLCAtMSwgNSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMiwgLTEsIC0xLCA0KTsK
KyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyMSwgLTEsIC0xLCAzKTsKKyAgICBFWFBFQ1RfQ09VTlQo
cm9vdDIzLCAtMSwgLTEsIDIpOworICAgIEVYUEVDVF9DT1VOVChyb290MjMxLCAtMSwgLTEsIDEp
OworICAgIEVYUEVDVF9DT1VOVChyb290MywgLTEsIC0xLCAwKTsKKworfQorCitURVNUKENDTGF5
ZXJJdGVyYXRvclRlc3QsIGNvbXBsZXhUcmVlTXVsdGlTdXJmYWNlKQoreworICAgIFJlZlB0cjxU
ZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDEgPSBUZXN0TGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MiA9IFRlc3RM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJv
b3QzID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJD
aHJvbWl1bT4gcm9vdDIxID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIyID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIzID0gVGVzdExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIyMSA9IFRl
c3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+
IHJvb3QyMzEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICByb290TGF5ZXIt
PmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDEp
OworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDIpOworICAgIHJvb3RMYXllci0+YWRkQ2hp
bGQocm9vdDMpOworICAgIHJvb3QyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIHJvb3Qy
LT5zZXRPcGFjaXR5KDAuNWYpOyAvLyBGb3JjZSB0aGUgbGF5ZXIgdG8gb3duIGEgbmV3IHN1cmZh
Y2UuCisgICAgcm9vdDItPmFkZENoaWxkKHJvb3QyMSk7CisgICAgcm9vdDItPmFkZENoaWxkKHJv
b3QyMik7CisgICAgcm9vdDItPmFkZENoaWxkKHJvb3QyMyk7CisgICAgcm9vdDIyLT5zZXRPcGFj
aXR5KDAuNWYpOworICAgIHJvb3QyMi0+YWRkQ2hpbGQocm9vdDIyMSk7CisgICAgcm9vdDIzLT5z
ZXRPcGFjaXR5KDAuNWYpOworICAgIHJvb3QyMy0+YWRkQ2hpbGQocm9vdDIzMSk7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbGF5ZXJMaXN0OworICAgIHJlbmRlclN1
cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllcik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLmdldCgp
LCByb290TGF5ZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxp
c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMjU2KTsKKworICAgIGl0ZXJhdGVCYWNrVG9Gcm9udCgmcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3RMYXllciwgMCwgLTEsIDEpOworICAg
IEVYUEVDVF9DT1VOVChyb290MSwgLTEsIC0xLCAyKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIs
IDQsIDMsIC0xKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIxLCAtMSwgLTEsIDUpOworICAgIEVY
UEVDVF9DT1VOVChyb290MjIsIDcsIDYsIDgpOworICAgIEVYUEVDVF9DT1VOVChyb290MjIxLCAt
MSwgLTEsIDkpOworICAgIEVYUEVDVF9DT1VOVChyb290MjMsIDExLCAxMCwgMTIpOworICAgIEVY
UEVDVF9DT1VOVChyb290MjMxLCAtMSwgLTEsIDEzKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDMs
IC0xLCAtMSwgMTQpOworCisgICAgaXRlcmF0ZUZyb250VG9CYWNrKCZyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAxNCwgLTEsIDEzKTsKKyAgICBF
WFBFQ1RfQ09VTlQocm9vdDEsIC0xLCAtMSwgMTIpOworICAgIEVYUEVDVF9DT1VOVChyb290Miwg
MTAsIDExLCAtMSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMSwgLTEsIC0xLCA5KTsKKyAgICBF
WFBFQ1RfQ09VTlQocm9vdDIyLCA3LCA4LCA2KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyMSwg
LTEsIC0xLCA1KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIzLCAzLCA0LCAyKTsKKyAgICBFWFBF
Q1RfQ09VTlQocm9vdDIzMSwgLTEsIC0xLCAxKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDMsIC0x
LCAtMSwgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121123</attachid>
            <date>2012-01-04 10:26:23 -0800</date>
            <delta_ts>2012-01-05 16:50:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74203-20120104132622.patch</filename>
            <type>text/plain</type>
            <size>46767</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJiOTFlMjdlMTQwNTg4
ZTEzYjZmZmEwZDY2YTg4Y2RmZDZlMWZkNi4uMDVjOGI0ZDNlMTUyOWYxZjYwZWJlNDczMTBjYzUz
MTM3ZmRjZjBhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTAxLTA0ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdW5pdCB0ZXN0czogQ0NM
YXllckl0ZXJhdG9yVGVzdC5jcHAKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tU
b0Zyb250OjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpCYWNrVG9Gcm9udDo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkJhY2tUb0Zyb250OjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdElu
U3VidHJlZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9z
aXRpb246OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uOjpjdXJyZW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckl0ZXJhdG9yUG9zaXRpb246OmN1cnJlbnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdS
ZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9u
OjpjdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6dGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjp0YXJnZXRSZW5k
ZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjp0
YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0
ZXJhdG9yUG9zaXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0
ZXJhdG9yOjpDQ0xheWVySXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJh
dG9yOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OmVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9y
OjpvcGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpyZXByZXNl
bnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0
b3I6OnJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJdGVyYXRvcjo6cmVwcmVzZW50c0l0c2VsZik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySXRlcmF0b3I6OnRhcmdldFJlbmRlclN1cmZhY2VMYXllcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndhbGtMYXllcnNBbmRDYWxjdWxhdGVWaXNp
YmxlTGF5ZXJSZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmg6CisKIDIwMTItMDEtMDQgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFVzZSBvbmUgYmlnIHByaW50ZiBjb21tYW5kIGluc3RlYWQgb2Yg
bWFueSBjaGFpbmVkIGVjaG8gY29tbWFuZHMgdG8gZ2VuZXJhdGUgaWRsX2ZpbGVzLnRtcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA2ZWQzMDk3MTA4OTQ0NWIxZGUyOThiZWU1MDc5Zjg4
MjQ4ZWI2MzU3Li4zYjk2ZWZhYTlhN2ZjYTVkZTE4NDg2NmJiOTkyMTc3NDVkNDE2MGJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAxLTA0ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAg
ICAgICAqIHRlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwOiBBZGRlZC4KKwogMjAxMi0wMS0w
NCAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9t
aXVtXSBSZS11c2UgVGVzdFNoZWxsTGludXguY3BwIGZvciBBbmRyb2lkCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggODMwNWZjZWQ4ZWFmNjMwOWY3ZTZiYzliZjc2MWIwMjFhYzA0NDg4NS4uNTNlOGNhZTFk
ODVlNGQ1OGNmNTZhMTMyNWM2NzUzMmRkYzRiMTNiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzYw
OSw2ICszNjA5LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0lucHV0SGFuZGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggOTNlOGQ4NmM2NzE3MWMy
NzdlYzE3NWM2MTlkYmU4ODBiNzJmNDE4Yi4uZDE5NTdiYmI1MDE1YWY4ZWJlNmQ3MjlhN2YzYjBl
MGYyYzM1MTRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTM5LDYg
KzM5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1
bTsKIGNsYXNzIE1hbmFnZWRUZXh0dXJlOwpAQCAtOTYsNiArOTcsMTEgQEAgcHJpdmF0ZToKICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKICAgICBJbnRSZWN0IG1f
Y2xpcFJlY3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG1fbGF5ZXJMaXN0
OworCisgICAgLy8gRm9yIENDTGF5ZXJJdGVyYXRvckFjdGlvbnMKKyAgICBpbnQgbV90YXJnZXRS
ZW5kZXJTdXJmYWNlTGF5ZXJIaXN0b3J5OworICAgIHVuc2lnbmVkIG1fY3VycmVudExheWVySGlz
dG9yeTsKKyAgICBmcmllbmQgY2xhc3MgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkYjYyNGZmMjFlNmU5
MDQwNGI0ODQ2NWZjZGEyMGQxMmVkNWE1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuY3BwCkBA
IC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ0xheWVySXRl
cmF0b3IuaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZW5kZXJT
dXJmYWNlQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUg
ImNjL0NDUmVuZGVyU3VyZmFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBD
Q0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6YmVnaW4oQ0NMYXllckl0ZXJhdG9y
UG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3sKKyAgICBwb3Mu
bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSAwOworICAgIHBvcy5tX2N1cnJlbnRMYXllciA9
IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojpr
TGF5ZXJSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlOworCisgICAgbV9oaWdoZXN0VGFy
Z2V0UmVuZGVyU3VyZmFjZUxheWVyID0gMDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVy
VHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkJhY2tUb0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBl
LCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3sKKyAgICBwb3MubV90YXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXIgPSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlPjo6a0ludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgcG9zLm1fY3Vy
cmVudExheWVyID0gMDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5h
bWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tU
b0Zyb250OjpuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3Vy
ZmFjZVR5cGU+JiBwb3MpCit7CisgICAgLy8gSWYgdGhlIGN1cnJlbnQgbGF5ZXIgaGFzIGEgUlMs
IG1vdmUgdG8gaXRzIGxheWVyIGxpc3QuIE90aGVyd2lzZSwgdmlzaXQgdGhlIG5leHQgbGF5ZXIg
aW4gdGhlIGN1cnJlbnQgUlMgbGF5ZXIgbGlzdC4KKyAgICBpZiAocG9zLmN1cnJlbnRMYXllclJl
cHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgLy8gU2F2ZSBv
dXIgcG9zaXRpb24gaW4gdGhlIGNoaWxkTGF5ZXIgbGlzdCBmb3IgdGhlIFJlbmRlclN1cmZhY2Us
IHRoZW4ganVtcCB0byB0aGUgbmV4dCBSZW5kZXJTdXJmYWNlLiBTYXZlIHdoZXJlIHdlCisgICAg
ICAgIC8vIGNhbWUgZnJvbSBpbiB0aGUgbmV4dCBSZW5kZXJTdXJmYWNlIHNvIHdlIGNhbiBnZXQg
YmFjayB0byBpdC4KKyAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2UoKS0+bV9jdXJyZW50
TGF5ZXJIaXN0b3J5ID0gcG9zLm1fY3VycmVudExheWVyOworICAgICAgICBpbnQgcHJldmlvdXNU
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSBwb3MubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7
CisKKyAgICAgICAgcG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0gKyttX2hpZ2hlc3RU
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IEND
TGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjprTGF5
ZXJSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlOworCisgICAgICAgIHBvcy50YXJnZXRS
ZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9yeSA9IHByZXZp
b3VzVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgIH0gZWxzZSB7CisgICAgICAgICsrcG9z
Lm1fY3VycmVudExheWVyOworICAgICAgICB3aGlsZSAocG9zLm1fY3VycmVudExheWVyID09IHBv
cy50YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCkpIHsKKyAgICAgICAgICAgIC8v
IEp1bXAgYmFjayB0byB0aGUgcHJldmlvdXMgUmVuZGVyU3VyZmFjZSwgYW5kIGdldCBiYWNrIHRo
ZSBwb3NpdGlvbiB3aGVyZSB3ZSB3ZXJlIGluIHRoYXQgbGlzdCwgYW5kIG1vdmUgdG8gdGhlIG5l
eHQgcG9zaXRpb24gdGhlcmUuCisgICAgICAgICAgICBpZiAoIXBvcy5tX3RhcmdldFJlbmRlclN1
cmZhY2VMYXllcikgeworICAgICAgICAgICAgICAgIC8vIEVuZCBvZiB0aGUgbGlzdAorICAgICAg
ICAgICAgICAgIHBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IENDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjprSW52YWxpZFRhcmdldFJl
bmRlclN1cmZhY2VMYXllcjsKKyAgICAgICAgICAgICAgICBwb3MubV9jdXJyZW50TGF5ZXIgPSAw
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBv
cy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCkt
Pm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9yeTsKKyAgICAgICAgICAgIHBvcy5tX2N1
cnJlbnRMYXllciA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySGlz
dG9yeSArIDE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXll
clR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpGcm9udFRvQmFjazo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJU
eXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3sKKyAgICBwb3MubV90YXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXIgPSAwOworICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IHBvcy50YXJnZXRSZW5k
ZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCkgLSAxOworICAgIGdvVG9IaWdoZXN0SW5TdWJ0cmVl
KHBvcyk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRl
clN1cmZhY2VUeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6
ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+
JiBwb3MpCit7CisgICAgcG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0gQ0NMYXllckl0
ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmtJbnZhbGlkVGFy
Z2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IDA7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBl
Pgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6bmV4dChDQ0xheWVy
SXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQorewor
ICAgIC8vIE1vdmVzIHRvIHRoZSBwcmV2aW91cyBsYXllciBpbiB0aGUgY3VycmVudCBSUyBsYXll
ciBsaXN0LiBUaGVuIHdlIGNoZWNrIGlmIHRoZQorICAgIC8vIG5ldyBjdXJyZW50IGxheWVyIGhh
cyBpdHMgb3duIFJTLCBpbiB3aGljaCBjYXNlIHRoZXJlIGFyZSB0aGluZ3MgaW4gdGhhdCBSUyBs
YXllciBsaXN0IHRoYXQgYXJlIGhpZ2hlciwgc28KKyAgICAvLyB3ZSBmaW5kIHRoZSBoaWdoZXN0
IGxheWVyIGluIHRoYXQgc3VidHJlZS4KKyAgICAvLyBJZiB3ZSBtb3ZlIGJhY2sgcGFzdCB0aGUg
ZnJvbnQgb2YgdGhlIGxpc3QsIHdlIGp1bXAgdXAgdG8gdGhlIHByZXZpb3VzIFJTIGxheWVyIGxp
c3QsIHBpY2tpbmcgdXAgYWdhaW4gd2hlcmUgd2UKKyAgICAvLyBoYWQgcHJldmlvdXNseSByZWN1
cnNlZCBpbnRvIHRoZSBjdXJyZW50IFJTIGxheWVyIGxpc3QuCisKKyAgICBpZiAoIXBvcy5jdXJy
ZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgIC8vIFN1
YnRyYWN0aW5nIG9uZSBoZXJlIHdpbGwgZXZlbnR1YWxseSBjYXVzZSB0aGUgY3VycmVudCBsYXll
ciB0byBiZWNvbWUgdGhhdCBsYXllcgorICAgICAgICAvLyByZXByZXNlbnRpbmcgdGhlIHRhcmdl
dCByZW5kZXIgc3VyZmFjZS4KKyAgICAgICAgLS1wb3MubV9jdXJyZW50TGF5ZXI7CisgICAgICAg
IGdvVG9IaWdoZXN0SW5TdWJ0cmVlKHBvcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2hpbGUg
KHBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7CisgICAg
ICAgICAgICBpZiAoIXBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllcikgeworICAgICAgICAg
ICAgICAgIC8vIEVuZCBvZiB0aGUgbGlzdAorICAgICAgICAgICAgICAgIHBvcy5tX3RhcmdldFJl
bmRlclN1cmZhY2VMYXllciA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVu
ZGVyU3VyZmFjZVR5cGU+OjprSW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICAg
ICAgICAgICAgICBwb3MubV9jdXJyZW50TGF5ZXIgPSAwOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VM
YXllciA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxh
eWVySGlzdG9yeTsKKyAgICAgICAgICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IHBvcy50YXJnZXRS
ZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySGlzdG9yeTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFj
ZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGln
aGVzdEluU3VidHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1
cmZhY2VUeXBlPiYgcG9zKQoreworICAgIGlmIChwb3MuY3VycmVudExheWVyUmVwcmVzZW50c1Rh
cmdldFJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdoaWxlIChwb3MuY3Vy
cmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkgeworICAgICAg
ICAvLyBTYXZlIHdoZXJlIHdlIHdlcmUgaW4gdGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2UsIG1v
dmUgdG8gdGhlIG5leHQgb25lLCBhbmQgc2F2ZSB0aGUgdGFyZ2V0IHN1cmZhY2UgdGhhdCB3ZQor
ICAgICAgICAvLyBjYW1lIGZyb20gdGhlcmUgc28gd2UgY2FuIGdvIGJhY2sgdG8gaXQuCisgICAg
ICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySGlzdG9yeSA9IHBv
cy5tX2N1cnJlbnRMYXllcjsKKyAgICAgICAgaW50IHByZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFj
ZUxheWVyID0gcG9zLm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworCisgICAgICAgIGZvciAo
TGF5ZXJUeXBlKiBsYXllciA9IHBvcy5jdXJyZW50TGF5ZXIoKTsgcG9zLnRhcmdldFJlbmRlclN1
cmZhY2VMYXllcigpICE9IGxheWVyOyArK3Bvcy5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllcikg
eyB9CisgICAgICAgIHBvcy5tX2N1cnJlbnRMYXllciA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNl
Q2hpbGRyZW4oKS5zaXplKCkgLSAxOworCisgICAgICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNl
KCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9yeSA9IHByZXZpb3VzVGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVyOworICAgIH0KK30KKworLy8gRGVjbGFyZSBlYWNoIG9mIHRoZSBhYm92
ZSBmdW5jdGlvbnMgZm9yIExheWVyQ2hyb21pdW0gYW5kIENDTGF5ZXJJbXBsIGNsYXNzZXMgc28g
dGhhdCB0aGV5IGFyZSBsaW5rZWQuCit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlv
bnM6OkJhY2tUb0Zyb250OjpiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllckNocm9t
aXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5
ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xh
eWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6bmV4dChDQ0xheWVySXRlcmF0b3JQb3Np
dGlvbjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7CisKK3RlbXBsYXRl
IHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2luKENDTGF5ZXJJ
dGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1wbGF0
ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQoQ0NMYXllckl0
ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsKK3RlbXBsYXRl
IHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQoQ0NMYXllckl0
ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsKKwordGVtcGxh
dGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6bmV4dChDQ0xheWVy
SXRlcmF0b3JQb3NpdGlvbjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7
Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQo
Q0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9t
aXVtPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFj
azo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpG
cm9udFRvQmFjazo6Z29Ub0hpZ2hlc3RJblN1YnRyZWUoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248
TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOworCit0ZW1wbGF0ZSB2b2lk
IENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KENDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1wbGF0ZSB2b2lk
IENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXllckl0ZXJhdG9y
UG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsKK3RlbXBsYXRlIHZvaWQg
Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKENDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1wbGF0ZSB2b2lk
IENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdEluU3VidHJl
ZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPiYp
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiYzk3
YmI4NjU5YzkwNWZhMDBhYjc4ODIzOWVmZGEwYWY2N2MwZTAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0
b3IuaApAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVySXRl
cmF0b3JfaAorI2RlZmluZSBDQ0xheWVySXRlcmF0b3JfaAorCisjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoZXNlIGNsYXNzZXMg
cHJvdmlkZSBtZWFucyB0byBpdGVyYXRlIG92ZXIgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJl
ZS4KKy8vCisvLyBBIFJlbmRlclN1cmZhY2UgJFIkIG1heSBiZSByZWZlcnJlZCB0byBpbiBvbmUg
b2YgdHdvIGRpZmZlcmVudCBjb250ZXh0cy4gT25lIFJlbmRlclN1cmZhY2UgaXMgImN1cnJlbnQi
IGF0IGFueSB0aW1lLCBmb3IKKy8vIHdoYXRldmVyIG9wZXJhdGlvbiBpcyBiZWluZyBwZXJmb3Jt
ZWQuIFRoaXMgY3VycmVudCBzdXJmYWNlIGlzIHJlZmVycmVkIHRvIGFzIGEgdGFyZ2V0IHN1cmZh
Y2UuIEZvciBleGFtcGxlLCB3aGVuICRSJCBpcworLy8gYmVpbmcgcGFpbnRlZCBpdCB3b3VsZCBi
ZSB0aGUgdGFyZ2V0IHN1cmZhY2UuIE9uY2UgJFIkIGhhcyBiZWVuIHBhaW50ZWQsIGl0cyBjb250
ZW50cyBtYXkgYmUgaW5jbHVkZWQgaW50byBhbm90aGVyCisvLyBzdXJmYWNlICRTJC4gV2hpbGUg
JFMkIGlzIGNvbnNpZGVyZWQgdGhlIHRhcmdldCBzdXJmYWNlIHdoZW4gaXQgaXMgYmVpbmcgcGFp
bnRlZCwgJFIkIGlzIGNhbGxlZCBhIGNvbnRyaWJ1dGluZyBzdXJmYWNlCisvLyBpbiB0aGlzIGNv
bnRleHQgYXMgaXQgY29udHJpYnV0ZXMgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIHRhcmdldCBzdXJm
YWNlICRTJC4KKy8vCisvLyBUaGUgaXRlcmF0b3IncyBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSB0
cmVlIGFsd2F5cyBwb2ludHMgdG8gc29tZSBsYXllci4gVGhlIHN0YXRlIG9mIHRoZSBpdGVyYXRv
ciBpbmRpY2F0ZXMgdGhlIHJvbGUgb2YgdGhlCisvLyBsYXllciwgYW5kIHdpbGwgYmUgb25lIG9m
IHRoZSBmb2xsb3dpbmcgdGhyZWUgc3RhdGVzLiBBIHNpbmdsZSBsYXllciAkTCQgd2lsbCBhcHBl
YXIgaW4gdGhlIGl0ZXJhdGlvbiBwcm9jZXNzIGluIGF0IGxlYXN0IG9uZSwKKy8vIGFuZCBwb3Nz
aWJseSBhbGwsIG9mIHRoZXNlIHN0YXRlcy4KKy8vIDEuIFJlcHJlc2VudGluZyB0aGUgdGFyZ2V0
IHN1cmZhY2U6IFRoZSBpdGVyYXRvciBpbiB0aGlzIHN0YXRlLCBwb2ludGluZyBhdCBsYXllciAk
TCQsIGluZGljYXRlcyB0aGF0IHRoZSB0YXJnZXQgUmVuZGVyU3VyZmFjZQorLy8gaXMgbm93IHRo
ZSBzdXJmYWNlIG93bmVkIGJ5ICRMJC4gVGhpcyB3aWxsIG9jY3VyIGV4YWN0bHkgb25jZSBmb3Ig
ZWFjaCBSZW5kZXJTdXJmYWNlIGluIHRoZSB0cmVlLgorLy8gMi4gUmVwcmVzZW50aW5nIGEgY29u
dHJpYnV0aW5nIHN1cmZhY2U6IFRoZSBpdGVyYXRvciBpbiB0aGlzIHN0YXRlLCBwb2ludGluZyBh
dCBsYXllciAkTCQsIHJlZmVycyB0byB0aGUgUmVuZGVyU3VyZmFjZSBvd25lZAorLy8gYnkgJEwk
IGFzIGEgY29udHJpYnV0aW5nIHN1cmZhY2UsIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGN1cnJlbnQg
dGFyZ2V0IFJlbmRlclN1cmZhY2UuCisvLyAzLiBSZXByZXNlbnRpbmcgaXRzZWxmOiBUaGUgaXRl
cmF0b3IgaW4gdGhpcyBzdGF0ZSwgcG9pbnRpbmcgYXQgbGF5ZXIgJEwkLCByZWZlcnMgdG8gdGhl
IGxheWVyIGl0c2VsZiwgYXMgYSBjaGlsZCBvZiB0aGUKKy8vIGN1cnJlbnQgdGFyZ2V0IFJlbmRl
clN1cmZhY2UuCisvLworLy8gVGhlIEJhY2tUb0Zyb250IGl0ZXJhdG9yIHdpbGwgcmV0dXJuIGEg
bGF5ZXIgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgc3VyZmFjZSBiZWZvcmUgcmV0dXJuaW5nIGxh
eWVycyByZXByZXNlbnRpbmcgdGhlbXNlbHZlcworLy8gYXMgY2hpbGRyZW4gb2YgdGhlIGN1cnJl
bnQgdGFyZ2V0IHN1cmZhY2UuIFdoZXJlYXMgdGhlIEZyb250VG9CYWNrIG9yZGVyaW5nIHdpbGwg
aXRlcmF0ZSBvdmVyIGNoaWxkcmVuIGxheWVycyBvZiBhIHN1cmZhY2UKKy8vIGJlZm9yZSB0aGUg
bGF5ZXIgcmVwcmVzZW50aW5nIHRoZSBzdXJmYWNlIGFzIGEgdGFyZ2V0IHN1cmZhY2UuCisvLwor
Ly8gVG8gdXNlIHRoZSBpdGVyYXRvcnM6CisvLworLy8gQ3JlYXRlIGEgc3RlcHBpbmcgaXRlcmF0
b3IgYW5kIGVuZCBpdGVyYXRvciBieSBjYWxsaW5nIENDTGF5ZXJJdGVyYXRvcjo6YmVnaW4oKSBh
bmQgQ0NMYXllckl0ZXJhdG9yOjplbmQoKSBhbmQgcGFzc2luZyBpbiB0aGUKKy8vIGxpc3Qgb2Yg
bGF5ZXJzIG93bmluZyB0YXJnZXQgUmVuZGVyU3VyZmFjZXMuIFN0ZXAgdGhyb3VnaCB0aGUgdHJl
ZSBieSBpbmNyZW1lbnRpbmcgdGhlIHN0ZXBwaW5nIGl0ZXJhdG9yIHdoaWxlIGl0IGlzICE9IHRv
CisvLyB0aGUgZW5kIGl0ZXJhdG9yLiBBdCBlYWNoIHN0ZXAgdGhlIGl0ZXJhdG9yIGtub3dzIHdo
YXQgdGhlIGxheWVyIGlzIHJlcHJlc2VudGluZywgYW5kIHlvdSBjYW4gcXVlcnkgdGhlIGl0ZXJh
dG9yIHRvIGRlY2lkZQorLy8gd2hhdCBhY3Rpb25zIHRvIHBlcmZvcm0gd2l0aCB0aGUgbGF5ZXIg
Z2l2ZW4gd2hhdCBpdCByZXByZXNlbnRzLgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIEEgc3Ry
dWN0IHRvIGhvbGQgdGhlIGl0ZXJhdG9yJ3MgY3VycmVudCBwb3NpdGlvbiwgd2hpY2ggaXMgcGFz
c2VkIHRvIHRoZSB2YXJpb3VzIENDTGF5ZXJJdGVyYXRvckFjdGlvbiBmdW5jdGlvbnMsIGZvciB0
aGVtIHRvCisvLyByZWFkIGFuZCB1cGRhdGUuIFRoaXMgc3RydWN0IGV4aXN0cyBzbyB0aGUgdGVt
cGxhdGVkIGFjdGlvbiBmdW5jdGlvbnMgZG9uJ3QgbmVlZCB0byBhY2Nlc3MgdGhlIENDTGF5ZXJJ
dGVyYXRvciBjbGFzcy4KKy8vCisvLyBUaGVyZSBpcyBhIDE6MSByZWxhdGlvbnNoaXAgYmV0d2Vl
biBhbiBpbnN0YW5jZSBvZiB0aGUgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24gY2xhc3MgYW5kIGEg
Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6Rm9vIGNsYXNzLAorLy8gc28gYW4gaXRlcmF0b3IgdHlw
ZSBjYW4gaG9sZCBleHRyYSBwb3NpdGlvbiBkYXRhLCBpZiByZXF1aXJlZCwgaW4gaXRzIG93biBj
bGFzcyBpbnN0YW5jZS4KKy8vCisvLyBUaGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgaXRlcmF0
b3IgaXMgaGVsZCBpbiB0d28gaW50ZWdlciB2YXJpYWJsZXMuCisvLyAtIFRoZSBtX3RhcmdldFJl
bmRlclN1cmZhY2VMYXllciBpcyBhIHBvc2l0aW9uIGluIHRoZSBtX3JlbmRlclN1cmZhY2VMYXll
ckxpc3QuIFRoaXMgcG9pbnRzIHRvIGEgbGF5ZXIgd2hpY2ggb3ducyB0aGUgY3VycmVudAorLy8g
dGFyZ2V0IHN1cmZhY2UuIFRoaXMgaXMgYSB2YWx1ZSBmcm9tIDAgdG8gbi0xIChuID0gc2l6ZSBv
ZiBtX3JlbmRlclN1cmZhY2VMYXllckxpc3QgPSBudW1iZXIgb2Ygc3VyZmFjZXMpLiBBIHZhbHVl
IG91dHNpZGUgb2YKKy8vIHRoaXMgcmFuZ2UgKHVzdWFsbHkga0ludmFsaWRUYXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXIpIGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBwb3NpdGlvbiBvdXRzaWRlIHRoZSBi
b3VuZHMgb2YgdGhlIHRyZWUuCisvLyAtIFRoZSBtX2N1cnJlbnRMYXllciBpcyBhIHBvc2l0aW9u
IGluIHRoZSBsaXN0IG9mIGxheWVycyB0aGF0IGFyZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCB0
YXJnZXQgc3VyZmFjZS4gV2hlbiBwb2ludGluZyB0bworLy8gb25lIG9mIHRoZXNlIGxheWVycywg
dGhpcyBpcyBhIHZhbHVlIGZyb20gMCB0byBuLTEgKG4gPSBudW1iZXIgb2YgY2hpbGRyZW4pLiBT
aW5jZSB0aGUgaXRlcmF0b3IgbXVzdCBhbHNvIHN0b3AgYXQgdGhlIGxheWVycworLy8gcmVwcmVz
ZW50aW5nIHRoZSB0YXJnZXQgc3VyZmFjZSwgdGhpcyBpcyBkb25lIGJ5IHNldHRpbmcgdGhlIG1f
Y3VycmVudExheWVyIHRvIGEgdmFsdWUgb2Yga0xheWVyUmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVy
U3VyZmFjZS4KK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3Vy
ZmFjZVR5cGU+CitzdHJ1Y3QgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24geworICAgIGV4cGxpY2l0
IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+
KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSA6IG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdChyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KSB7IH0KKworICAgIGlubGluZSBMYXllclR5cGUqIGN1cnJlbnRM
YXllcigpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJT
dXJmYWNlKCkgPyB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSA6IHRhcmdldFJlbmRlclN1cmZh
Y2VDaGlsZHJlbigpW21fY3VycmVudExheWVyXS5nZXQoKTsgfQorCisgICAgaW5saW5lIGJvb2wg
Y3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSBjb25zdCB7
IHJldHVybiBDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmlidXRlc1Rv
VGFyZ2V0PExheWVyVHlwZT4oY3VycmVudExheWVyKCksIHRhcmdldFJlbmRlclN1cmZhY2VMYXll
cigpLT5pZCgpKTsgfQorICAgIGlubGluZSBib29sIGN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJn
ZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50TGF5ZXIgPT0ga0xheWVy
UmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQorCisgICAgaW5saW5lIExheWVyVHlw
ZSogdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgY29uc3QgeyByZXR1cm4gKCptX3JlbmRlclN1
cmZhY2VMYXllckxpc3QpW21fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyXS5nZXQoKTsgfQorICAg
IGlubGluZSBSZW5kZXJTdXJmYWNlVHlwZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsg
cmV0dXJuIHRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpLT5yZW5kZXJTdXJmYWNlKCk7IH0KKyAg
ICBpbmxpbmUgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIHRhcmdldFJlbmRlclN1
cmZhY2VDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIHRhcmdldFJlbmRlclN1cmZhY2UoKS0+bGF5
ZXJMaXN0KCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDQ0xheWVySXRlcmF0b3JQ
b3NpdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXIgPT0gb3RoZXIubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIKKyAgICAg
ICAgICAgICYmIG1fY3VycmVudExheWVyID09IG90aGVyLm1fY3VycmVudExheWVyOworICAgIH0K
KworICAgIHN0YXRpYyBjb25zdCBpbnQga0ludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIg
PSAtMTsKKyAgICAvLyBUaGlzIG11c3QgYmUgLTEgc2luY2UgdGhlIGl0ZXJhdG9yIGFjdGlvbiBj
b2RlIGFzc3VtZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBiZQorICAgIC8vIHJlYWNoZWQgYnkgc3Vi
dHJhY3Rpbmcgb25lIGZyb20gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBsYXllciBpbiB0aGUg
Y3VycmVudAorICAgIC8vIHRhcmdldCBzdXJmYWNlJ3MgY2hpbGQgbGF5ZXIgbGlzdCwgd2hpY2gg
aXMgMC4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQga0xheWVyUmVwcmVzZW50aW5nVGFyZ2V0
UmVuZGVyU3VyZmFjZSA9ICh1bnNpZ25lZCktMTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
TGF5ZXJUeXBlPiA+KiBtX3JlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgaW50IG1fdGFyZ2V0
UmVuZGVyU3VyZmFjZUxheWVyOworICAgIHVuc2lnbmVkIG1fY3VycmVudExheWVyOworfTsKKwor
Ly8gQW4gaXRlcmF0b3IgY2xhc3MgZm9yIHdhbGtpbmcgb3ZlciBsYXllcnMgaW4gdGhlIFJlbmRl
clN1cmZhY2UtTGF5ZXIgdHJlZS4KKy8vIFVzZSB0aGUgYmVnaW4oKSBhbmQgZW5kKCkgZnVuY3Rp
b25zIHRvIGdldCBhbiBpdGVyYXRvciByZWxhdGl2ZSB0byBhIGdpdmVuIGxpc3Qgb2YgcmVuZGVy
U3VyZmFjZUxheWVycy4KK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJl
bmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBJdGVyYXRvckFjdGlvblR5cGU+CitjbGFzcyBDQ0xh
eWVySXRlcmF0b3IgeworICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVu
ZGVyU3VyZmFjZVR5cGUsIEl0ZXJhdG9yQWN0aW9uVHlwZT4gQ0NMYXllckl0ZXJhdG9yVHlwZTsK
KworcHVibGljOgorICAgIENDTGF5ZXJJdGVyYXRvcigpIDogbV9wb3NpdGlvbigwKSwgbV9hY3Rp
b25zKDApIHsgfQorCisgICAgc3RhdGljIENDTGF5ZXJJdGVyYXRvclR5cGUgYmVnaW4oY29uc3Qg
VmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpIHsgcmV0
dXJuIENDTGF5ZXJJdGVyYXRvclR5cGUocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgdHJ1ZSk7IH0K
KyAgICBzdGF0aWMgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQoY29uc3QgVmVjdG9yPFJlZlB0cjxM
YXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpIHsgcmV0dXJuIENDTGF5ZXJJdGVy
YXRvclR5cGUocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZmFsc2UpOyB9CisKKyAgICBDQ0xheWVy
SXRlcmF0b3JUeXBlJiBvcGVyYXRvcisrKCkgeyBtX2FjdGlvbnMtPm5leHQobV9wb3NpdGlvbik7
IHJldHVybiAqdGhpczsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDQ0xheWVySXRlcmF0
b3JUeXBlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbiA9PSBvdGhlci5tX3Bvc2l0
aW9uOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENDTGF5ZXJJdGVyYXRvclR5cGUmIG90
aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgTGF5ZXJUeXBl
KiBvcGVyYXRvci0+KCkgeyByZXR1cm4gbV9wb3NpdGlvbi5jdXJyZW50TGF5ZXIoKTsgfQorICAg
IExheWVyVHlwZSogb3BlcmF0b3IqKCkgeyByZXR1cm4gbV9wb3NpdGlvbi5jdXJyZW50TGF5ZXIo
KTsgfQorCisgICAgYm9vbCByZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpIHsgcmV0dXJu
IG1fcG9zaXRpb24uY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKTsg
fQorICAgIGJvb2wgcmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSB7IHJldHVy
biAhcmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSAmJiBtX3Bvc2l0aW9uLmN1cnJlbnRM
YXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCk7IH0KKyAgICBib29sIHJl
cHJlc2VudHNJdHNlbGYoKSB7IHJldHVybiAhcmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2Uo
KSAmJiAhcmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKTsgfQorCisgICAgTGF5
ZXJUeXBlKiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSB7IHJldHVybiBtX3Bvc2l0aW9uLnRh
cmdldFJlbmRlclN1cmZhY2VMYXllcigpOyB9CisKK3ByaXZhdGU6CisgICAgQ0NMYXllckl0ZXJh
dG9yKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBib29sIHN0YXJ0KQorICAgICAgICA6IG1fcG9zaXRpb24ocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCkKKyAgICAgICAgLCBtX2FjdGlvbnMobmV3IEl0ZXJhdG9yQWN0aW9uVHlwZSgpKQorICAg
IHsKKyAgICAgICAgaWYgKHN0YXJ0ICYmICFyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LT5pc0VtcHR5
KCkpCisgICAgICAgICAgICBtX2FjdGlvbnMtPmJlZ2luKG1fcG9zaXRpb24pOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2FjdGlvbnMtPmVuZChtX3Bvc2l0aW9uKTsKKyAgICB9CisKKyAg
ICBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiBt
X3Bvc2l0aW9uOworICAgIEl0ZXJhdG9yQWN0aW9uVHlwZSogbV9hY3Rpb25zOworCisgICAgZnJp
ZW5kIGNsYXNzIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM7Cit9OworCisvLyBPcmRlcmluZ3MgZm9y
IGl0ZXJhdGluZyBvdmVyIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUuCitzdHJ1Y3QgQ0NM
YXllckl0ZXJhdG9yQWN0aW9ucyB7CisgICAgLy8gV2Fsa3MgbGF5ZXJzIHNvcnRlZCBieSB6LW9y
ZGVyIGZyb20gYmFjayB0byBmcm9udC4KKyAgICBjbGFzcyBCYWNrVG9Gcm9udCB7CisgICAgcHVi
bGljOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5k
ZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlv
bjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOworCisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2
b2lkIGVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VU
eXBlPiYpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1l
IFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIG5leHQoQ0NMYXllckl0ZXJhdG9yUG9z
aXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIGludCBtX2hpZ2hlc3RUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgfTsKKwor
ICAgIC8vIFdhbGtzIGxheWVycyBzb3J0ZWQgYnkgei1vcmRlciBmcm9tIGZyb250IHRvIGJhY2sK
KyAgICBjbGFzcyBGcm9udFRvQmFjayB7CisgICAgcHVibGljOgorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAg
dm9pZCBiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlPiYpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVu
YW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIGVuZChDQ0xheWVySXRlcmF0b3JQ
b3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOworCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAg
ICAgICB2b2lkIG5leHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJT
dXJmYWNlVHlwZT4mKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorICAgICAgICB2b2lkIGdv
VG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVu
ZGVyU3VyZmFjZVR5cGU+Jik7CisgICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBjZDc1NmQ2MDBk
YzBmMGUzZjMwMWIzMmQ3ZThlODRmYzAwYWIwNzYxLi5mMDllNjI4OGNkNTBmZjUyNjc2YTUzNTMx
YmEwMzExYzc1MjU5MzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmgiCkBAIC00MzQsNTcgKzQzNSw0MSBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1
bSogcmVuZGVyUwogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNv
bnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgUGFpbnRUeXBlIHBhaW50VHlw
ZSkKIHsKLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAg
ICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
IHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAg
ICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFj
ZS0+ZHJhd09wYWNpdHkoKSk7Ci0KLSAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRl
clN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyLCBwYWludFR5cGUpOwotCi0gICAgICAgIGNvbnN0
IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Qu
c2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVy
ID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwotCi0gICAgICAgICAgICAvLyBMYXllcnMg
dGhhdCBzdGFydCBhIG5ldyByZW5kZXIgc3VyZmFjZSB3aWxsIGJlIHBhaW50ZWQgd2hlbiB0aGUg
cmVuZGVyCi0gICAgICAgICAgICAvLyBzdXJmYWNlJ3MgbGlzdCBpcyBwcm9jZXNzZWQuCi0gICAg
ICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0
ZXNUb1RhcmdldDxMYXllckNocm9taXVtPihsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgp
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgQVNTRVJUKCFsYXll
ci0+Ym91bmRzKCkuaXNFbXB0eSgpKTsKLQotICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGly
dHkobGF5ZXIsIHBhaW50VHlwZSk7CisgICAgLy8gVXNlIEZyb250VG9CYWNrIHRvIGFsbG93IGZv
ciB0ZXN0aW5nIG9jY2x1c2lvbiBhbmQgcGVyZm9ybWluZyBjdWxsaW5nIGR1cmluZyB0aGUgdHJl
ZSB3YWxrLgorICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRl
clN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IEND
TGF5ZXJJdGVyYXRvclR5cGU7CisKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5
ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgZm9yIChD
Q0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRl
clN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LnJl
cHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+
cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKKyAgICAgICAgICAgIHBhaW50TWFza0Fu
ZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKCppdCwgcGFpbnRUeXBlKTsKKyAgICAgICAgfSBlbHNl
IGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+b3Bh
Y2l0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmJvdW5kcygpLmlzRW1wdHkoKSk7Cisg
ICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eSgqaXQsIHBhaW50VHlwZSk7CiAgICAgICAg
IH0KICAgICB9CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRh
dGVyKQogewotICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IG1fdXBkYXRlTGlzdC5zaXplKCkg
LSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIExheWVy
Q2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IG1fdXBkYXRlTGlzdFtzdXJmYWNlSW5kZXhd
LmdldCgpOwotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBy
ZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgQVNTRVJUKHJlbmRl
clN1cmZhY2UpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7
Ci0KLSAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpCi0gICAgICAg
ICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwotCi0gICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5
ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnJl
cGxpY2FMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5yZXBs
aWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxh
eWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoY29udGV4dCwgdXBkYXRlcik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0
IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Qu
c2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVy
ID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwotCi0gICAgICAgICAgICBpZiAoQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxMYXllckNo
cm9taXVtPihsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoY29udGV4dCwgdXBkYXRlcik7Ci0gICAgICAgIH0KKyAgICAvLyBVc2UgQmFja1RvRnJvbnQg
c2luY2UgaXQncyBjaGVhcCBhbmQgdGhpcyBpc24ndCBvcmRlci1kZXBlbmRlbnQuCisgICAgdHlw
ZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVt
LCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0ZXJhdG9yVHlw
ZTsKKworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6
ZW5kKCZtX3VwZGF0ZUxpc3QpOworICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IEND
TGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZtX3VwZGF0ZUxpc3QpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKKyAg
ICAgICAgICAgIGlmIChpdC0+bWFza0xheWVyKCkpCisgICAgICAgICAgICAgICAgaXQtPm1hc2tM
YXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOworCisg
ICAgICAgICAgICBpZiAoaXQtPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICAgICAgaXQt
PnJlcGxpY2FMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0
ZXIpOworICAgICAgICAgICAgICAgIGlmIChpdC0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigp
KQorICAgICAgICAgICAgICAgICAgICBpdC0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT51
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkKKyAgICAgICAgICAg
IGl0LT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggNTY1
MDliY2VjM2M2MWUyZGZlMTY2NGFiNDE2NWY0MjkzNzM5M2UxYi4uYjEzNzcxNDUzOGI4OTllYjUx
NTViZGQ3NDBjZDI5ZGFlNDc3ZDVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIK
IApAQCAtNDcxLDE1ICs0NzIsMTQgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKIHRlbXBsYXRl
PHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CiBzdGF0aWMg
dm9pZCB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllclR5cGU+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7Ci0gICAgZm9y
IChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBz
dXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIExheWVyVHlwZSog
cmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhd
LmdldCgpOwotICAgICAgICBSZW5kZXJTdXJmYWNlVHlwZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRl
clN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotCi0gICAgICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJUeXBlPiA+JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlz
dC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgewotICAgICAgICAgICAgTGF5ZXJUeXBlKiBsYXllciA9
IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJs
ZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVy
UmVjdDxMYXllclR5cGU+KGxheWVyKTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5
ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOworICAgIC8vIFVzZSBCYWNrVG9Gcm9udCBzaW5jZSBp
dCdzIGNoZWFwIGFuZCB0aGlzIGlzbid0IG9yZGVyLWRlcGVuZGVudC4KKyAgICB0eXBlZGVmIEND
TGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBDQ0xheWVySXRlcmF0
b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworICAgIENDTGF5
ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKKyAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVy
SXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBpZiAoIWl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkp
IHsKKyAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdDxMYXllclR5cGU+KCppdCk7CisgICAg
ICAgICAgICBpdC0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKICAgICAg
ICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggYThlODdhOWY5
YmVhNWQ5YmI0ZTgxOGRmNTBkYzA4ZDllNzMyNmY4Yy4uODFjN2QzOTc4YjAwNDZmODMyMTY2NDk3
N2NlZjUwNGVmNzIwYzk0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTQyLDYg
KzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0RhbWFnZVRyYWNrZXI7CiBj
bGFzcyBDQ0xheWVySW1wbDsKK2NsYXNzIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM7CiBjbGFzcyBM
YXllclJlbmRlcmVyQ2hyb21pdW07CiBjbGFzcyBNYW5hZ2VkVGV4dHVyZTsKIApAQCAtMTI5LDYg
KzEzMCwxMSBAQCBwcml2YXRlOgogCiAgICAgLy8gU3RvcmVkIGluIHRoZSAic3VyZmFjZSBzcGFj
ZSIgd2hlcmUgdGhpcyBkYW1hZ2UgY2FuIGJlIHVzZWQgZm9yIHNjaXNzb3JpbmcuCiAgICAgRmxv
YXRSZWN0IG1fZGFtYWdlUmVjdDsKKworICAgIC8vIEZvciBDQ0xheWVySXRlcmF0b3JBY3Rpb25z
CisgICAgaW50IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySGlzdG9yeTsKKyAgICB1bnNpZ25l
ZCBtX2N1cnJlbnRMYXllckhpc3Rvcnk7CisgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJdGVyYXRv
ckFjdGlvbnM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBlNjc0
YmI2Yjg1YjA4NWNhYmFjYzlkOWQ2NDk5OTNkNWQ2MmZlNWNmLi5hZDQyNDEyY2I1MmZkMmY1OGJl
YzlhNGNlODNmNGUyODgxOTZjYjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAg
LTY0LDYgKzY0LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ0RlbGF5QmFzZWRUaW1lU291cmNl
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwJywKKyAgICAgICAg
ICAgICd0ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NMYXllclF1YWRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclNvcnRlclRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVy
YXRvclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0
b3JUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZGQ2YjZjNGYwMTJmNGI1MjA3Njc4NTk4ZDc2Y2I3OTgx
ODhlOThhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVySXRlcmF0b3JUZXN0LmNwcApAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCisK
KyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
Q29tbW9uLmgiCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIDo6dGVzdGluZzo6TW9jazsK
K3VzaW5nIDo6dGVzdGluZzo6XzsKK3VzaW5nIDo6dGVzdGluZzo6QXRMZWFzdDsKK3VzaW5nIDo6
dGVzdGluZzo6QW55TnVtYmVyOworCituYW1lc3BhY2UgeworCitjbGFzcyBUZXN0TGF5ZXJDaHJv
bWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFRl
c3RMYXllckNocm9taXVtKCkpOyB9CisKKyAgICBpbnQgbV9jb3VudFJlcHJlc2VudGluZ1Rhcmdl
dFN1cmZhY2U7CisgICAgaW50IG1fY291bnRSZXByZXNlbnRpbmdDb250cmlidXRpbmdTdXJmYWNl
OworICAgIGludCBtX2NvdW50UmVwcmVzZW50aW5nSXRzZWxmOworCisgICAgdmlydHVhbCBib29s
IGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd3NDb250ZW50OyB9CisgICAgdm9p
ZCBzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpIHsgbV9kcmF3c0NvbnRlbnQgPSBk
cmF3c0NvbnRlbnQ7IH0KKworcHJpdmF0ZToKKyAgICBUZXN0TGF5ZXJDaHJvbWl1bSgpCisgICAg
ICAgIDogTGF5ZXJDaHJvbWl1bSgwKQorICAgICAgICAsIG1fZHJhd3NDb250ZW50KHRydWUpCisg
ICAgeworICAgICAgICBzZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBzZXRE
cmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKKyAgICB9CisKKyAg
ICBib29sIG1fZHJhd3NDb250ZW50OworfTsKKworI2RlZmluZSBFWFBFQ1RfQ09VTlQobGF5ZXIs
IHRhcmdldCwgY29udHJpYiwgaXRzZWxmKSBcCisgICAgRVhQRUNUX0VRKHRhcmdldCwgbGF5ZXIt
Pm1fY291bnRSZXByZXNlbnRpbmdUYXJnZXRTdXJmYWNlKTsgICAgICAgICAgXAorICAgIEVYUEVD
VF9FUShjb250cmliLCBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ0NvbnRyaWJ1dGluZ1N1cmZh
Y2UpOyAgIFwKKyAgICBFWFBFQ1RfRVEoaXRzZWxmLCBsYXllci0+bV9jb3VudFJlcHJlc2VudGlu
Z0l0c2VsZik7CisKK3R5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRl
clN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IEZy
b250VG9CYWNrOwordHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVy
U3VyZmFjZUNocm9taXVtLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4gQmFj
a1RvRnJvbnQ7CisKK3ZvaWQgcmVzZXRDb3VudHMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIGZvciAodW5zaWduZWQgc3VyZmFj
ZUluZGV4ID0gMDsgc3VyZmFjZUluZGV4IDwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCk7
ICsrc3VyZmFjZUluZGV4KSB7CisgICAgICAgIFRlc3RMYXllckNocm9taXVtKiByZW5kZXJTdXJm
YWNlTGF5ZXIgPSBzdGF0aWNfY2FzdDxUZXN0TGF5ZXJDaHJvbWl1bSo+KHJlbmRlclN1cmZhY2VM
YXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKSk7CisgICAgICAgIFJlbmRlclN1cmZhY2VDaHJv
bWl1bSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgp
OworCisgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bV9jb3VudFJlcHJlc2VudGluZ1Rhcmdl
dFN1cmZhY2UgPSAtMTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tX2NvdW50UmVwcmVz
ZW50aW5nQ29udHJpYnV0aW5nU3VyZmFjZSA9IC0xOworICAgICAgICByZW5kZXJTdXJmYWNlTGF5
ZXItPm1fY291bnRSZXByZXNlbnRpbmdJdHNlbGYgPSAtMTsKKworICAgICAgICBmb3IgKHVuc2ln
bmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0
KCkuc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKKyAgICAgICAgICAgIFRlc3RMYXllckNocm9taXVt
KiBsYXllciA9IHN0YXRpY19jYXN0PFRlc3RMYXllckNocm9taXVtKj4ocmVuZGVyU3VyZmFjZS0+
bGF5ZXJMaXN0KClbbGF5ZXJJbmRleF0uZ2V0KCkpOworCisgICAgICAgICAgICBsYXllci0+bV9j
b3VudFJlcHJlc2VudGluZ1RhcmdldFN1cmZhY2UgPSAtMTsKKyAgICAgICAgICAgIGxheWVyLT5t
X2NvdW50UmVwcmVzZW50aW5nQ29udHJpYnV0aW5nU3VyZmFjZSA9IC0xOworICAgICAgICAgICAg
bGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdJdHNlbGYgPSAtMTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBpdGVyYXRlRnJvbnRUb0JhY2soVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIHJlc2V0Q291bnRzKCpyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoRnJvbnRUb0Jh
Y2sgaXQgPSBGcm9udFRvQmFjazo6YmVnaW4ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9
IEZyb250VG9CYWNrOjplbmQocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7ICsraXQsICsrY291bnQp
IHsKKyAgICAgICAgVGVzdExheWVyQ2hyb21pdW0qIGxheWVyID0gc3RhdGljX2Nhc3Q8VGVzdExh
eWVyQ2hyb21pdW0qPigqaXQpOworICAgICAgICBpZiAoaXQucmVwcmVzZW50c1RhcmdldFJlbmRl
clN1cmZhY2UoKSkKKyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nVGFyZ2V0
U3VyZmFjZSA9IGNvdW50OworICAgICAgICBpZiAoaXQucmVwcmVzZW50c0NvbnRyaWJ1dGluZ1Jl
bmRlclN1cmZhY2UoKSkKKyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nQ29u
dHJpYnV0aW5nU3VyZmFjZSA9IGNvdW50OworICAgICAgICBpZiAoaXQucmVwcmVzZW50c0l0c2Vs
ZigpKQorICAgICAgICAgICAgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdJdHNlbGYgPSBjb3Vu
dDsKKyAgICB9Cit9CisKK3ZvaWQgaXRlcmF0ZUJhY2tUb0Zyb250KFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICByZXNldENvdW50
cygqcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3Ig
KEJhY2tUb0Zyb250IGl0ID0gQmFja1RvRnJvbnQ6OmJlZ2luKHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOyBpdCAhPSBCYWNrVG9Gcm9udDo6ZW5kKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOyArK2l0
LCArK2NvdW50KSB7CisgICAgICAgIFRlc3RMYXllckNocm9taXVtKiBsYXllciA9IHN0YXRpY19j
YXN0PFRlc3RMYXllckNocm9taXVtKj4oKml0KTsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNU
YXJnZXRSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2Vu
dGluZ1RhcmdldFN1cmZhY2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNDb250
cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJl
c2VudGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0LnJlcHJl
c2VudHNJdHNlbGYoKSkKKyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nSXRz
ZWxmID0gY291bnQ7CisgICAgfQorfQorCitURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIHNpbXBs
ZVRyZWUpCit7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290TGF5ZXIgPSBUZXN0
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBm
aXJzdCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVy
Q2hyb21pdW0+IHNlY29uZCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8VGVzdExheWVyQ2hyb21pdW0+IHRoaXJkID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gZm91cnRoID0gVGVzdExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworCisgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisK
KyAgICByb290TGF5ZXItPmFkZENoaWxkKGZpcnN0KTsKKyAgICByb290TGF5ZXItPmFkZENoaWxk
KHNlY29uZCk7CisgICAgcm9vdExheWVyLT5hZGRDaGlsZCh0aGlyZCk7CisgICAgcm9vdExheWVy
LT5hZGRDaGlsZChmb3VydGgpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+IGxheWVyTGlzdDsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5
ZXIpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CisKKyAgICBpdGVy
YXRlQmFja1RvRnJvbnQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9DT1VO
VChyb290TGF5ZXIsIDAsIC0xLCAxKTsKKyAgICBFWFBFQ1RfQ09VTlQoZmlyc3QsIC0xLCAtMSwg
Mik7CisgICAgRVhQRUNUX0NPVU5UKHNlY29uZCwgLTEsIC0xLCAzKTsKKyAgICBFWFBFQ1RfQ09V
TlQodGhpcmQsIC0xLCAtMSwgNCk7CisgICAgRVhQRUNUX0NPVU5UKGZvdXJ0aCwgLTEsIC0xLCA1
KTsKKworICAgIGl0ZXJhdGVGcm9udFRvQmFjaygmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Cisg
ICAgRVhQRUNUX0NPVU5UKHJvb3RMYXllciwgNSwgLTEsIDQpOworICAgIEVYUEVDVF9DT1VOVChm
aXJzdCwgLTEsIC0xLCAzKTsKKyAgICBFWFBFQ1RfQ09VTlQoc2Vjb25kLCAtMSwgLTEsIDIpOwor
ICAgIEVYUEVDVF9DT1VOVCh0aGlyZCwgLTEsIC0xLCAxKTsKKyAgICBFWFBFQ1RfQ09VTlQoZm91
cnRoLCAtMSwgLTEsIDApOworCit9CisKK1RFU1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwgY29tcGxl
eFRyZWUpCit7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290TGF5ZXIgPSBUZXN0
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBy
b290MSA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVy
Q2hyb21pdW0+IHJvb3QyID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDMgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MjEgPSBUZXN0TGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MjIgPSBUZXN0
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBy
b290MjMgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXll
ckNocm9taXVtPiByb290MjIxID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIzMSA9IFRlc3RMYXllckNocm9taXVtOjpjcmVh
dGUoKTsKKworICAgIHJvb3RMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworCisgICAgcm9v
dExheWVyLT5hZGRDaGlsZChyb290MSk7CisgICAgcm9vdExheWVyLT5hZGRDaGlsZChyb290Mik7
CisgICAgcm9vdExheWVyLT5hZGRDaGlsZChyb290Myk7CisgICAgcm9vdDItPmFkZENoaWxkKHJv
b3QyMSk7CisgICAgcm9vdDItPmFkZENoaWxkKHJvb3QyMik7CisgICAgcm9vdDItPmFkZENoaWxk
KHJvb3QyMyk7CisgICAgcm9vdDIyLT5hZGRDaGlsZChyb290MjIxKTsKKyAgICByb290MjMtPmFk
ZENoaWxkKHJvb3QyMzEpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJl
bmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IGxheWVyTGlzdDsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIp
OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CisKKyAgICBpdGVyYXRl
QmFja1RvRnJvbnQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9DT1VOVChy
b290TGF5ZXIsIDAsIC0xLCAxKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDEsIC0xLCAtMSwgMik7
CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyLCAtMSwgLTEsIDMpOworICAgIEVYUEVDVF9DT1VOVChy
b290MjEsIC0xLCAtMSwgNCk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMiwgLTEsIC0xLCA1KTsK
KyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyMSwgLTEsIC0xLCA2KTsKKyAgICBFWFBFQ1RfQ09VTlQo
cm9vdDIzLCAtMSwgLTEsIDcpOworICAgIEVYUEVDVF9DT1VOVChyb290MjMxLCAtMSwgLTEsIDgp
OworICAgIEVYUEVDVF9DT1VOVChyb290MywgLTEsIC0xLCA5KTsKKworICAgIGl0ZXJhdGVGcm9u
dFRvQmFjaygmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3RM
YXllciwgOSwgLTEsIDgpOworICAgIEVYUEVDVF9DT1VOVChyb290MSwgLTEsIC0xLCA3KTsKKyAg
ICBFWFBFQ1RfQ09VTlQocm9vdDIsIC0xLCAtMSwgNik7CisgICAgRVhQRUNUX0NPVU5UKHJvb3Qy
MSwgLTEsIC0xLCA1KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyLCAtMSwgLTEsIDQpOworICAg
IEVYUEVDVF9DT1VOVChyb290MjIxLCAtMSwgLTEsIDMpOworICAgIEVYUEVDVF9DT1VOVChyb290
MjMsIC0xLCAtMSwgMik7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMzEsIC0xLCAtMSwgMSk7Cisg
ICAgRVhQRUNUX0NPVU5UKHJvb3QzLCAtMSwgLTEsIDApOworCit9CisKK1RFU1QoQ0NMYXllckl0
ZXJhdG9yVGVzdCwgY29tcGxleFRyZWVNdWx0aVN1cmZhY2UpCit7CisgICAgUmVmUHRyPFRlc3RM
YXllckNocm9taXVtPiByb290TGF5ZXIgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MSA9IFRlc3RMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QyID0gVGVzdExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDMg
PSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9t
aXVtPiByb290MjEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRl
c3RMYXllckNocm9taXVtPiByb290MjIgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MjMgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MjIxID0gVGVzdExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9v
dDIzMSA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIHJvb3RMYXllci0+Y3Jl
YXRlUmVuZGVyU3VyZmFjZSgpOworCisgICAgcm9vdExheWVyLT5hZGRDaGlsZChyb290MSk7Cisg
ICAgcm9vdExheWVyLT5hZGRDaGlsZChyb290Mik7CisgICAgcm9vdExheWVyLT5hZGRDaGlsZChy
b290Myk7CisgICAgcm9vdDItPnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgcm9vdDItPnNl
dE9wYWNpdHkoMC41Zik7IC8vIEZvcmNlIHRoZSBsYXllciB0byBvd24gYSBuZXcgc3VyZmFjZS4K
KyAgICByb290Mi0+YWRkQ2hpbGQocm9vdDIxKTsKKyAgICByb290Mi0+YWRkQ2hpbGQocm9vdDIy
KTsKKyAgICByb290Mi0+YWRkQ2hpbGQocm9vdDIzKTsKKyAgICByb290MjItPnNldE9wYWNpdHko
MC41Zik7CisgICAgcm9vdDIyLT5hZGRDaGlsZChyb290MjIxKTsKKyAgICByb290MjMtPnNldE9w
YWNpdHkoMC41Zik7CisgICAgcm9vdDIzLT5hZGRDaGlsZChyb290MjMxKTsKKworICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBsYXllckxpc3Q7CisgICAgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0KCksIHJv
b3RMYXllci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAyNTYpOworCisgICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7CisgICAgRVhQ
RUNUX0NPVU5UKHJvb3QxLCAtMSwgLTEsIDIpOworICAgIEVYUEVDVF9DT1VOVChyb290MiwgNCwg
MywgLTEpOworICAgIEVYUEVDVF9DT1VOVChyb290MjEsIC0xLCAtMSwgNSk7CisgICAgRVhQRUNU
X0NPVU5UKHJvb3QyMiwgNywgNiwgOCk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMjEsIC0xLCAt
MSwgOSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMywgMTEsIDEwLCAxMik7CisgICAgRVhQRUNU
X0NPVU5UKHJvb3QyMzEsIC0xLCAtMSwgMTMpOworICAgIEVYUEVDVF9DT1VOVChyb290MywgLTEs
IC0xLCAxNCk7CisKKyAgICBpdGVyYXRlRnJvbnRUb0JhY2soJnJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDE0LCAtMSwgMTMpOworICAgIEVYUEVD
VF9DT1VOVChyb290MSwgLTEsIC0xLCAxMik7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyLCAxMCwg
MTEsIC0xKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIxLCAtMSwgLTEsIDkpOworICAgIEVYUEVD
VF9DT1VOVChyb290MjIsIDcsIDgsIDYpOworICAgIEVYUEVDVF9DT1VOVChyb290MjIxLCAtMSwg
LTEsIDUpOworICAgIEVYUEVDVF9DT1VOVChyb290MjMsIDMsIDQsIDIpOworICAgIEVYUEVDVF9D
T1VOVChyb290MjMxLCAtMSwgLTEsIDEpOworICAgIEVYUEVDVF9DT1VOVChyb290MywgLTEsIC0x
LCAwKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121367</attachid>
            <date>2012-01-05 16:50:56 -0800</date>
            <delta_ts>2012-01-09 09:59:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74203-20120105195055.patch</filename>
            <type>text/plain</type>
            <size>50240</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJiOTFlMjdlMTQwNTg4
ZTEzYjZmZmEwZDY2YTg4Y2RmZDZlMWZkNi4uZWQ0NjQxNDcyYjM3NTc4NTBlNjE5MTNkOThjOThi
MDUyNDExZjViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTAxLTA1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdW5pdCB0ZXN0czogQ0NM
YXllckl0ZXJhdG9yVGVzdC5jcHAuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNr
VG9Gcm9udDo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yQWN0aW9u
czo6QmFja1RvRnJvbnQ6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpCYWNrVG9Gcm9udDo6bmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRl
cmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6bmV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6Z29Ub0hpZ2hlc3RJ
blN1YnRyZWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJdGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6
Q0NMYXllckl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6YmVn
aW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjplbmQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9y
OjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6b3BlcmF0
b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvcjo6cmVwcmVzZW50c1Rhcmdl
dFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpyZXBy
ZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySXRlcmF0b3I6OnJlcHJlc2VudHNJdHNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckl0ZXJhdG9yOjp0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvclBvc2l0aW9uLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OkNDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjpj
dXJyZW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246
OmN1cnJlbnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjpjdXJyZW50TGF5ZXJSZXByZXNl
bnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0
b3JQb3NpdGlvbjo6dGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjp0YXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvclBvc2l0aW9uOjp0YXJnZXRSZW5kZXJTdXJmYWNlQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246Om9wZXJh
dG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5
ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3YWxrTGF5
ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorCiAyMDEyLTAxLTA0ICBBZGFt
IFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2Ugb25lIGJpZyBwcmludGYg
Y29tbWFuZCBpbnN0ZWFkIG9mIG1hbnkgY2hhaW5lZCBlY2hvIGNvbW1hbmRzIHRvIGdlbmVyYXRl
IGlkbF9maWxlcy50bXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNmVkMzA5NzEwODk0
NDViMWRlMjk4YmVlNTA3OWY4ODI0OGViNjM1Ny4uYjFjZWI4N2MxYmFmMDk2NzAyNDY3OGNjZjE0
ZTU3ODM4NmEwNDNmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAxMi0wMS0wNSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbY2hyb21pdW1dIENyZWF0ZSBpdGVyYXRvcnMgZm9yIHRoZSBSZW5kZXJTdXJmYWNlLUxh
eWVyIHRyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc0MjAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcDog
QWRkZWQuCisKIDIwMTItMDEtMDQgIFBldGVyIEJldmVybG9vICA8cGV0ZXJAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFtDaHJvbWl1bV0gUmUtdXNlIFRlc3RTaGVsbExpbnV4LmNwcCBmb3IgQW5k
cm9pZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDgzMDVmY2VkOGVhZjYzMDlmN2U2YmM5YmY3NjFiMDIx
YWMwNDQ4ODUuLmQ2YmQ2ZDg5MTU3OWFlMGU4YzZmMTQxYjEzYTI0MmZiNGY3OThmNWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTM2MDksNiArMzYwOSw5IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0
b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclF1YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZh
Y2VDaHJvbWl1bS5oCmluZGV4IDkzZThkODZjNjcxNzFjMjc3ZWMxNzVjNjE5ZGJlODgwYjcyZjQx
OGIuLjQ4MTdlYzVlYzg1YWY1NjQ4YTY0OWUwOGQ5YzU3NWYzNTZjMmQyMDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VD
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC0zOSw2ICszOSw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczsKIGNsYXNzIExheWVyQ2hy
b21pdW07CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiBjbGFzcyBNYW5hZ2VkVGV4dHVy
ZTsKQEAgLTk2LDYgKzk3LDExIEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9vcmlnaW5UcmFuc2Zvcm07CiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OwogICAgIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX2xheWVyTGlzdDsKKworICAgIC8vIEZvciBDQ0xheWVy
SXRlcmF0b3JBY3Rpb25zCisgICAgaW50IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhI
aXN0b3J5OworICAgIGludCBtX2N1cnJlbnRMYXllckluZGV4SGlzdG9yeTsKKyAgICBmcmllbmQg
Y2xhc3MgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SXRlcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3NjdmZjBlNzY2Yzk2MzQwNjM1N2VkZWYyOWJjNmQ1
YTkwODkyZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuY3BwCkBAIC0wLDAgKzEsMTcwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3IuaCIKKworI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIK
KyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFj
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5
cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rp
b25zOjpCYWNrVG9Gcm9udDo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBl
LCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3sKKyAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFj
ZUxheWVySW5kZXggPSAwOworICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uVmFsdWU6OkxheWVySW5kZXhSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJm
YWNlOworCisgICAgbV9oaWdoZXN0VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0gMDsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+
Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQoQ0NMYXllckl0
ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3sKKyAg
ICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JQb3Np
dGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisgICAgcG9z
LmN1cnJlbnRMYXllckluZGV4ID0gMDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlw
ZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlv
bnM6OkJhY2tUb0Zyb250OjpuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwg
UmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit7CisgICAgLy8gSWYgdGhlIGN1cnJlbnQgbGF5ZXIg
aGFzIGEgUlMsIG1vdmUgdG8gaXRzIGxheWVyIGxpc3QuIE90aGVyd2lzZSwgdmlzaXQgdGhlIG5l
eHQgbGF5ZXIgaW4gdGhlIGN1cnJlbnQgUlMgbGF5ZXIgbGlzdC4KKyAgICBpZiAocG9zLmN1cnJl
bnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAg
Ly8gU2F2ZSBvdXIgcG9zaXRpb24gaW4gdGhlIGNoaWxkTGF5ZXIgbGlzdCBmb3IgdGhlIFJlbmRl
clN1cmZhY2UsIHRoZW4ganVtcCB0byB0aGUgbmV4dCBSZW5kZXJTdXJmYWNlLiBTYXZlIHdoZXJl
IHdlCisgICAgICAgIC8vIGNhbWUgZnJvbSBpbiB0aGUgbmV4dCBSZW5kZXJTdXJmYWNlIHNvIHdl
IGNhbiBnZXQgYmFjayB0byBpdC4KKyAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2UoKS0+
bV9jdXJyZW50TGF5ZXJJbmRleEhpc3RvcnkgPSBwb3MuY3VycmVudExheWVySW5kZXg7CisgICAg
ICAgIGludCBwcmV2aW91c1RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IHBvcy50YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXJJbmRleDsKKworICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxh
eWVySW5kZXggPSArK21faGlnaGVzdFRhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICAgICAg
cG9zLmN1cnJlbnRMYXllckluZGV4ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6TGF5
ZXJJbmRleFJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2U7CisKKyAgICAgICAgcG9zLnRh
cmdldFJlbmRlclN1cmZhY2UoKS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3Rv
cnkgPSBwcmV2aW91c1RhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICB9IGVsc2UgeworICAg
ICAgICArK3Bvcy5jdXJyZW50TGF5ZXJJbmRleDsKKworICAgICAgICBpbnQgdGFyZ2V0UmVuZGVy
U3VyZmFjZU51bUNoaWxkcmVuID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbigpLnNp
emUoKTsKKyAgICAgICAgd2hpbGUgKHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9PSB0YXJnZXRSZW5k
ZXJTdXJmYWNlTnVtQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIC8vIEp1bXAgYmFjayB0byB0aGUg
cHJldmlvdXMgUmVuZGVyU3VyZmFjZSwgYW5kIGdldCBiYWNrIHRoZSBwb3NpdGlvbiB3aGVyZSB3
ZSB3ZXJlIGluIHRoYXQgbGlzdCwgYW5kIG1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24gdGhlcmUu
CisgICAgICAgICAgICBpZiAoIXBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCkgewor
ICAgICAgICAgICAgICAgIC8vIEVuZCBvZiB0aGUgbGlzdAorICAgICAgICAgICAgICAgIHBvcy50
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFs
dWU6OkludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsKKyAgICAgICAgICAgICAg
ICBwb3MuY3VycmVudExheWVySW5kZXggPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRl
eCA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
SW5kZXhIaXN0b3J5OworICAgICAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gcG9zLnRh
cmdldFJlbmRlclN1cmZhY2UoKS0+bV9jdXJyZW50TGF5ZXJJbmRleEhpc3RvcnkgKyAxOworCisg
ICAgICAgICAgICB0YXJnZXRSZW5kZXJTdXJmYWNlTnVtQ2hpbGRyZW4gPSBwb3MudGFyZ2V0UmVu
ZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6ZSgpOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK3Zv
aWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit7CisgICAg
cG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gMDsKKyAgICBwb3MuY3VycmVudExh
eWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6ZSgpIC0gMTsK
KyAgICBnb1RvSGlnaGVzdEluU3VidHJlZShwb3MpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
TGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK3ZvaWQgQ0NMYXllckl0ZXJh
dG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXll
clR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQoreworICAgIHBvcy50YXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFsdWU6OkludmFsaWRU
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsKKyAgICBwb3MuY3VycmVudExheWVySW5kZXgg
PSAwOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJT
dXJmYWNlVHlwZT4KK3ZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6Om5l
eHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4m
IHBvcykKK3sKKyAgICAvLyBNb3ZlcyB0byB0aGUgcHJldmlvdXMgbGF5ZXIgaW4gdGhlIGN1cnJl
bnQgUlMgbGF5ZXIgbGlzdC4gVGhlbiB3ZSBjaGVjayBpZiB0aGUKKyAgICAvLyBuZXcgY3VycmVu
dCBsYXllciBoYXMgaXRzIG93biBSUywgaW4gd2hpY2ggY2FzZSB0aGVyZSBhcmUgdGhpbmdzIGlu
IHRoYXQgUlMgbGF5ZXIgbGlzdCB0aGF0IGFyZSBoaWdoZXIsIHNvCisgICAgLy8gd2UgZmluZCB0
aGUgaGlnaGVzdCBsYXllciBpbiB0aGF0IHN1YnRyZWUuCisgICAgLy8gSWYgd2UgbW92ZSBiYWNr
IHBhc3QgdGhlIGZyb250IG9mIHRoZSBsaXN0LCB3ZSBqdW1wIHVwIHRvIHRoZSBwcmV2aW91cyBS
UyBsYXllciBsaXN0LCBwaWNraW5nIHVwIGFnYWluIHdoZXJlIHdlCisgICAgLy8gaGFkIHByZXZp
b3VzbHkgcmVjdXJzZWQgaW50byB0aGUgY3VycmVudCBSUyBsYXllciBsaXN0LgorCisgICAgaWYg
KCFwb3MuY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkgeworICAg
ICAgICAvLyBTdWJ0cmFjdGluZyBvbmUgaGVyZSB3aWxsIGV2ZW50dWFsbHkgY2F1c2UgdGhlIGN1
cnJlbnQgbGF5ZXIgdG8gYmVjb21lIHRoYXQgbGF5ZXIKKyAgICAgICAgLy8gcmVwcmVzZW50aW5n
IHRoZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UuCisgICAgICAgIC0tcG9zLmN1cnJlbnRMYXllcklu
ZGV4OworICAgICAgICBnb1RvSGlnaGVzdEluU3VidHJlZShwb3MpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHdoaWxlIChwb3MuY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZh
Y2UoKSkgeworICAgICAgICAgICAgaWYgKCFwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICAvLyBFbmQgb2YgdGhlIGxpc3QKKyAgICAgICAgICAgICAg
ICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JQb3Np
dGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisgICAgICAg
ICAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxh
eWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX3RhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4SGlzdG9yeTsKKyAgICAgICAgICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9
IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5kZXhIaXN0b3J5Owor
ICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK3ZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJv
bnRUb0JhY2s6OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExh
eWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit7CisgICAgaWYgKHBvcy5jdXJyZW50
TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgd2hpbGUgKHBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3Vy
ZmFjZSgpKSB7CisgICAgICAgIC8vIFNhdmUgd2hlcmUgd2Ugd2VyZSBpbiB0aGUgY3VycmVudCB0
YXJnZXQgc3VyZmFjZSwgbW92ZSB0byB0aGUgbmV4dCBvbmUsIGFuZCBzYXZlIHRoZSB0YXJnZXQg
c3VyZmFjZSB0aGF0IHdlCisgICAgICAgIC8vIGNhbWUgZnJvbSB0aGVyZSBzbyB3ZSBjYW4gZ28g
YmFjayB0byBpdC4KKyAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2UoKS0+bV9jdXJyZW50
TGF5ZXJJbmRleEhpc3RvcnkgPSBwb3MuY3VycmVudExheWVySW5kZXg7CisgICAgICAgIGludCBw
cmV2aW91c1RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNl
TGF5ZXJJbmRleDsKKworICAgICAgICBmb3IgKExheWVyVHlwZSogbGF5ZXIgPSBwb3MuY3VycmVu
dExheWVyKCk7IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSAhPSBsYXllcjsgKytwb3Mu
dGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgpIHsgfQorICAgICAgICBwb3MuY3VycmVudExh
eWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6ZSgpIC0gMTsK
KworICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX3RhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4SGlzdG9yeSA9IHByZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOwor
ICAgIH0KK30KKworLy8gRGVjbGFyZSBlYWNoIG9mIHRoZSBhYm92ZSBmdW5jdGlvbnMgZm9yIExh
eWVyQ2hyb21pdW0gYW5kIENDTGF5ZXJJbXBsIGNsYXNzZXMgc28gdGhhdCB0aGV5IGFyZSBsaW5r
ZWQuCit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250Ojpi
ZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0+Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tU
b0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVy
U3VyZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpCYWNrVG9Gcm9udDo6bmV4dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllckNocm9taXVt
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7CisKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJh
dG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2luKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPEND
TGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NM
YXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJh
dG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NM
YXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsKKwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRl
cmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6bmV4dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7Cit0ZW1wbGF0ZSB2b2lkIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXllckl0ZXJhdG9yUG9z
aXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6YmVnaW4oQ0NMYXllckl0
ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwor
dGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6Z29Ub0hp
Z2hlc3RJblN1YnRyZWUoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVu
ZGVyU3VyZmFjZUNocm9taXVtPiYpOworCit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJ
bXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllcklt
cGwsIENDUmVuZGVyU3VyZmFjZT4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0
aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJ
bXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdEluU3VidHJlZShDQ0xheWVySXRlcmF0b3JQ
b3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPiYpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzZTU2YmNhYmJkNTE0MjlkODJmNDg5
YWQ3OGMyMzM3N2QwNDAyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuaApAQCAtMCwwICsxLDE2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVySXRlcmF0b3JfaAorI2RlZmluZSBD
Q0xheWVySXRlcmF0b3JfaAorCisjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24u
aCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhlc2UgY2xhc3NlcyBwcm92aWRlIG1lYW5zIHRv
IGl0ZXJhdGUgb3ZlciB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVlLgorCisvLyBFeGFtcGxl
IGNvZGUgZm9sbG93cywgZm9yIGEgdHJlZSBvZiBMYXllckNocm9taXVtL1JlbmRlclN1cmZhY2VD
aHJvbWl1bSBvYmplY3RzLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisvLworLy8gdm9pZCBkb1N0
dWZmT25MYXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KQorLy8geworLy8gICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExh
eWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9u
czo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisvLworLy8gICAgIENDTGF5ZXJJ
dGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKKy8vICAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVy
SXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsg
KytpdCkgeworLy8gICAgICAgICAvLyBPbmx5IG9uZSBvZiB0aGVzZSB3aWxsIGJlIHRydWUKKy8v
ICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpCisvLyAgICAg
ICAgICAgICBmb28oKml0KTsgLy8gKml0IGlzIGEgbGF5ZXIgcmVwcmVzZW50aW5nIGEgdGFyZ2V0
IFJlbmRlclN1cmZhY2UKKy8vICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNDb250cmlidXRpbmdS
ZW5kZXJTdXJmYWNlKCkpCisvLyAgICAgICAgICAgICBiYXIoKml0KTsgLy8gKml0IGlzIGEgbGF5
ZXIgcmVwcmVzZW50aW5nIGEgUmVuZGVyU3VyZmFjZSB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZSBs
YXllcidzIHRhcmdldCBSZW5kZXJTdXJmYWNlCisvLyAgICAgICAgIGlmIChpdC5yZXByZXNlbnRz
SXRzZWxmKCkpCisvLyAgICAgICAgICAgICBiYXooKml0KTsgLy8gKml0IGlzIGEgbGF5ZXIgcmVw
cmVzZW50aW5nIGl0c2VsZiwgYXMgaXQgY29udHJpYnV0ZXMgdG8gaXRzIG93biB0YXJnZXQgUmVu
ZGVyU3VyZmFjZQorLy8gICAgIH0KKy8vIH0KKworLy8gQSBSZW5kZXJTdXJmYWNlIFIgbWF5IGJl
IHJlZmVycmVkIHRvIGluIG9uZSBvZiB0d28gZGlmZmVyZW50IGNvbnRleHRzLiBPbmUgUmVuZGVy
U3VyZmFjZSBpcyAiY3VycmVudCIgYXQgYW55IHRpbWUsIGZvcgorLy8gd2hhdGV2ZXIgb3BlcmF0
aW9uIGlzIGJlaW5nIHBlcmZvcm1lZC4gVGhpcyBjdXJyZW50IHN1cmZhY2UgaXMgcmVmZXJyZWQg
dG8gYXMgYSB0YXJnZXQgc3VyZmFjZS4gRm9yIGV4YW1wbGUsIHdoZW4gUiBpcworLy8gYmVpbmcg
cGFpbnRlZCBpdCB3b3VsZCBiZSB0aGUgdGFyZ2V0IHN1cmZhY2UuIE9uY2UgUiBoYXMgYmVlbiBw
YWludGVkLCBpdHMgY29udGVudHMgbWF5IGJlIGluY2x1ZGVkIGludG8gYW5vdGhlcgorLy8gc3Vy
ZmFjZSBTLiBXaGlsZSBTIGlzIGNvbnNpZGVyZWQgdGhlIHRhcmdldCBzdXJmYWNlIHdoZW4gaXQg
aXMgYmVpbmcgcGFpbnRlZCwgUiBpcyBjYWxsZWQgYSBjb250cmlidXRpbmcgc3VyZmFjZQorLy8g
aW4gdGhpcyBjb250ZXh0IGFzIGl0IGNvbnRyaWJ1dGVzIHRvIHRoZSBjb250ZW50IG9mIHRoZSB0
YXJnZXQgc3VyZmFjZSBTLgorLy8KKy8vIFRoZSBpdGVyYXRvcidzIGN1cnJlbnQgcG9zaXRpb24g
aW4gdGhlIHRyZWUgYWx3YXlzIHBvaW50cyB0byBzb21lIGxheWVyLiBUaGUgc3RhdGUgb2YgdGhl
IGl0ZXJhdG9yIGluZGljYXRlcyB0aGUgcm9sZSBvZiB0aGUKKy8vIGxheWVyLCBhbmQgd2lsbCBi
ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0aHJlZSBzdGF0ZXMuIEEgc2luZ2xlIGxheWVyIEwgd2ls
bCBhcHBlYXIgaW4gdGhlIGl0ZXJhdGlvbiBwcm9jZXNzIGluIGF0IGxlYXN0IG9uZSwKKy8vIGFu
ZCBwb3NzaWJseSBhbGwsIG9mIHRoZXNlIHN0YXRlcy4KKy8vIDEuIFJlcHJlc2VudGluZyB0aGUg
dGFyZ2V0IHN1cmZhY2U6IFRoZSBpdGVyYXRvciBpbiB0aGlzIHN0YXRlLCBwb2ludGluZyBhdCBs
YXllciBMLCBpbmRpY2F0ZXMgdGhhdCB0aGUgdGFyZ2V0IFJlbmRlclN1cmZhY2UKKy8vIGlzIG5v
dyB0aGUgc3VyZmFjZSBvd25lZCBieSBMLiBUaGlzIHdpbGwgb2NjdXIgZXhhY3RseSBvbmNlIGZv
ciBlYWNoIFJlbmRlclN1cmZhY2UgaW4gdGhlIHRyZWUuCisvLyAyLiBSZXByZXNlbnRpbmcgYSBj
b250cmlidXRpbmcgc3VyZmFjZTogVGhlIGl0ZXJhdG9yIGluIHRoaXMgc3RhdGUsIHBvaW50aW5n
IGF0IGxheWVyIEwsIHJlZmVycyB0byB0aGUgUmVuZGVyU3VyZmFjZSBvd25lZAorLy8gYnkgTCBh
cyBhIGNvbnRyaWJ1dGluZyBzdXJmYWNlLCB3aXRob3V0IGNoYW5naW5nIHRoZSBjdXJyZW50IHRh
cmdldCBSZW5kZXJTdXJmYWNlLgorLy8gMy4gUmVwcmVzZW50aW5nIGl0c2VsZjogVGhlIGl0ZXJh
dG9yIGluIHRoaXMgc3RhdGUsIHBvaW50aW5nIGF0IGxheWVyIEwsIHJlZmVycyB0byB0aGUgbGF5
ZXIgaXRzZWxmLCBhcyBhIGNoaWxkIG9mIHRoZQorLy8gY3VycmVudCB0YXJnZXQgUmVuZGVyU3Vy
ZmFjZS4KKy8vCisvLyBUaGUgQmFja1RvRnJvbnQgaXRlcmF0b3Igd2lsbCByZXR1cm4gYSBsYXll
ciByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBzdXJmYWNlIGJlZm9yZSByZXR1cm5pbmcgbGF5ZXJz
IHJlcHJlc2VudGluZyB0aGVtc2VsdmVzCisvLyBhcyBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCB0
YXJnZXQgc3VyZmFjZS4gV2hlcmVhcyB0aGUgRnJvbnRUb0JhY2sgb3JkZXJpbmcgd2lsbCBpdGVy
YXRlIG92ZXIgY2hpbGRyZW4gbGF5ZXJzIG9mIGEgc3VyZmFjZQorLy8gYmVmb3JlIHRoZSBsYXll
ciByZXByZXNlbnRpbmcgdGhlIHN1cmZhY2UgYXMgYSB0YXJnZXQgc3VyZmFjZS4KKy8vCisvLyBU
byB1c2UgdGhlIGl0ZXJhdG9yczoKKy8vCisvLyBDcmVhdGUgYSBzdGVwcGluZyBpdGVyYXRvciBh
bmQgZW5kIGl0ZXJhdG9yIGJ5IGNhbGxpbmcgQ0NMYXllckl0ZXJhdG9yOjpiZWdpbigpIGFuZCBD
Q0xheWVySXRlcmF0b3I6OmVuZCgpIGFuZCBwYXNzaW5nIGluIHRoZQorLy8gbGlzdCBvZiBsYXll
cnMgb3duaW5nIHRhcmdldCBSZW5kZXJTdXJmYWNlcy4gU3RlcCB0aHJvdWdoIHRoZSB0cmVlIGJ5
IGluY3JlbWVudGluZyB0aGUgc3RlcHBpbmcgaXRlcmF0b3Igd2hpbGUgaXQgaXMgIT0gdG8KKy8v
IHRoZSBlbmQgaXRlcmF0b3IuIEF0IGVhY2ggc3RlcCB0aGUgaXRlcmF0b3Iga25vd3Mgd2hhdCB0
aGUgbGF5ZXIgaXMgcmVwcmVzZW50aW5nLCBhbmQgeW91IGNhbiBxdWVyeSB0aGUgaXRlcmF0b3Ig
dG8gZGVjaWRlCisvLyB3aGF0IGFjdGlvbnMgdG8gcGVyZm9ybSB3aXRoIHRoZSBsYXllciBnaXZl
biB3aGF0IGl0IHJlcHJlc2VudHMuCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gQW4gaXRlcmF0
b3IgY2xhc3MgZm9yIHdhbGtpbmcgb3ZlciBsYXllcnMgaW4gdGhlIFJlbmRlclN1cmZhY2UtTGF5
ZXIgdHJlZS4KK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1
cmZhY2VUeXBlLCB0eXBlbmFtZSBJdGVyYXRvckFjdGlvblR5cGU+CitjbGFzcyBDQ0xheWVySXRl
cmF0b3IgeworICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3Vy
ZmFjZVR5cGUsIEl0ZXJhdG9yQWN0aW9uVHlwZT4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworcHVi
bGljOgorICAgIENDTGF5ZXJJdGVyYXRvcigpIHsgfQorCisgICAgc3RhdGljIENDTGF5ZXJJdGVy
YXRvclR5cGUgYmVnaW4oY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpIHsgcmV0dXJuIENDTGF5ZXJJdGVyYXRvclR5cGUocmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgdHJ1ZSk7IH0KKyAgICBzdGF0aWMgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQo
Y29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
IHsgcmV0dXJuIENDTGF5ZXJJdGVyYXRvclR5cGUocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZmFs
c2UpOyB9CisKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlJiBvcGVyYXRvcisrKCkgeyBBU1NFUlQo
bV9hY3Rpb25zKTsgbV9hY3Rpb25zLT5uZXh0KG1fcG9zaXRpb24pOyByZXR1cm4gKnRoaXM7IH0K
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuIG1fcG9zaXRpb24gPT0gb3RoZXIubV9wb3NpdGlvbjsgfQorICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBDQ0xheWVySXRlcmF0b3JUeXBlJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIExheWVyVHlwZSogb3BlcmF0b3ItPigpIHsg
cmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyKCk7IH0KKyAgICBMYXllclR5cGUqIG9wZXJh
dG9yKigpIHsgcmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyKCk7IH0KKworICAgIGJvb2wg
cmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSB7IHJldHVybiBtX3Bvc2l0aW9uLmN1cnJl
bnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCk7IH0KKyAgICBib29sIHJlcHJl
c2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkgeyByZXR1cm4gIXJlcHJlc2VudHNUYXJn
ZXRSZW5kZXJTdXJmYWNlKCkgJiYgbV9wb3NpdGlvbi5jdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29u
dHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpOyB9CisgICAgYm9vbCByZXByZXNlbnRzSXRzZWxmKCkg
eyByZXR1cm4gIXJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgJiYgIXJlcHJlc2VudHND
b250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCk7IH0KKworICAgIExheWVyVHlwZSogdGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVyKCkgeyByZXR1cm4gbV9wb3NpdGlvbi50YXJnZXRSZW5kZXJTdXJmYWNl
TGF5ZXIoKTsgfQorCitwcml2YXRlOgorICAgIENDTGF5ZXJJdGVyYXRvcihjb25zdCBWZWN0b3I8
UmVmUHRyPExheWVyVHlwZT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgYm9vbCBzdGFydCkK
KyAgICAgICAgOiBtX3Bvc2l0aW9uKHJlbmRlclN1cmZhY2VMYXllckxpc3QpCisgICAgICAgICwg
bV9hY3Rpb25zKGFkb3B0UHRyKG5ldyBJdGVyYXRvckFjdGlvblR5cGUoKSkpCisgICAgeworICAg
ICAgICBpZiAoc3RhcnQgJiYgIXJlbmRlclN1cmZhY2VMYXllckxpc3QtPmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIG1fYWN0aW9ucy0+YmVnaW4obV9wb3NpdGlvbik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fYWN0aW9ucy0+ZW5kKG1fcG9zaXRpb24pOworICAgIH0KKworICAgIENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+IG1fcG9zaXRp
b247CisgICAgT3duUHRyPEl0ZXJhdG9yQWN0aW9uVHlwZT4gbV9hY3Rpb25zOworfTsKKworLy8g
T3JkZXJpbmdzIGZvciBpdGVyYXRpbmcgb3ZlciB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVl
Lgorc3RydWN0IENDTGF5ZXJJdGVyYXRvckFjdGlvbnMgeworICAgIC8vIFdhbGtzIGxheWVycyBz
b3J0ZWQgYnkgei1vcmRlciBmcm9tIGJhY2sgdG8gZnJvbnQuCisgICAgY2xhc3MgQmFja1RvRnJv
bnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwg
dHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CisgICAgICAgIHZvaWQgYmVnaW4oQ0NMYXllckl0
ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlw
ZT4KKyAgICAgICAgdm9pZCBlbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJU
eXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBuZXh0KENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBpbnQgbV9oaWdoZXN0VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
OworICAgIH07CisKKyAgICAvLyBXYWxrcyBsYXllcnMgc29ydGVkIGJ5IHotb3JkZXIgZnJvbSBm
cm9udCB0byBiYWNrCisgICAgY2xhc3MgRnJvbnRUb0JhY2sgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+CisgICAgICAgIHZvaWQgYmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBl
LCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5
ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBlbmQoQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKwor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZT4KKyAgICAgICAgdm9pZCBuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVy
VHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAg
ICAgICAgdm9pZCBnb1RvSGlnaGVzdEluU3VidHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxM
YXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOworICAgIH07Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvclBv
c2l0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjFmNjNjNDVmNzQyYzAzYzYwZGVmOWIyMTczODQwYWZiODZj
MzI2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvclBvc2l0aW9uLmgKQEAgLTAsMCArMSw4NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbl9oCisjZGVmaW5l
IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uX2gKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5oIgorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBOb24tdGVtcGxhdGVkIGNvbnN0YW50
cworc3RydWN0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFsdWUgeworICAgIHN0YXRpYyBjb25z
dCBpbnQgSW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gLTE7CisgICAgLy8g
VGhpcyBtdXN0IGJlIC0xIHNpbmNlIHRoZSBpdGVyYXRvciBhY3Rpb24gY29kZSBhc3N1bWVzIHRo
YXQgdGhpcyB2YWx1ZSBjYW4gYmUKKyAgICAvLyByZWFjaGVkIGJ5IHN1YnRyYWN0aW5nIG9uZSBm
cm9tIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgbGF5ZXIgaW4gdGhlIGN1cnJlbnQKKyAgICAv
LyB0YXJnZXQgc3VyZmFjZSdzIGNoaWxkIGxheWVyIGxpc3QsIHdoaWNoIGlzIDAuCisgICAgc3Rh
dGljIGNvbnN0IGludCBMYXllckluZGV4UmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZSA9
IC0xOworfTsKKworLy8gQSBzdHJ1Y3QgdG8gaG9sZCB0aGUgaXRlcmF0b3IncyBjdXJyZW50IHBv
c2l0aW9uLCB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIHZhcmlvdXMgQ0NMYXllckl0ZXJhdG9yQWN0
aW9uIGZ1bmN0aW9ucywgZm9yIHRoZW0gdG8KKy8vIHJlYWQgYW5kIHVwZGF0ZS4gVGhpcyBzdHJ1
Y3QgZXhpc3RzIHNvIHRoZSB0ZW1wbGF0ZWQgYWN0aW9uIGZ1bmN0aW9ucyBkb24ndCBuZWVkIHRv
IGFjY2VzcyB0aGUgQ0NMYXllckl0ZXJhdG9yIGNsYXNzLgorLy8KKy8vIFRoZXJlIGlzIGEgMTox
IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFuIGluc3RhbmNlIG9mIHRoZSBDQ0xheWVySXRlcmF0b3JQ
b3NpdGlvbiBjbGFzcyBhbmQgYSBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGb28gY2xhc3MsCisv
LyBzbyBhbiBpdGVyYXRvciBhY3Rpb24gY2xhc3MgY2FuIGhvbGQgZXh0cmEgcG9zaXRpb24gZGF0
YSwgaWYgcmVxdWlyZWQsIGluIGl0cyBvd24gY2xhc3MgaW5zdGFuY2UuCisvLworLy8gVGhlIGN1
cnJlbnQgcG9zaXRpb24gb2YgdGhlIGl0ZXJhdG9yIGlzIGhlbGQgaW4gdHdvIGludGVnZXIgdmFy
aWFibGVzLgorLy8gLSBUaGUgdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggaXMgYSBwb3Np
dGlvbiBpbiB0aGUgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC4gVGhpcyBwb2ludHMgdG8gYSBsYXll
ciB3aGljaCBvd25zIHRoZSBjdXJyZW50CisvLyB0YXJnZXQgc3VyZmFjZS4gVGhpcyBpcyBhIHZh
bHVlIGZyb20gMCB0byBuLTEgKG4gPSBzaXplIG9mIHJlbmRlclN1cmZhY2VMYXllckxpc3QgPSBu
dW1iZXIgb2Ygc3VyZmFjZXMpLiBBIHZhbHVlIG91dHNpZGUgb2YKKy8vIHRoaXMgcmFuZ2UgKGZv
ciBleGFtcGxlLCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVySW5kZXgpIGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBwb3NpdGlvbgorLy8g
b3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSB0cmVlLgorLy8gLSBUaGUgY3VycmVudExheWVySW5k
ZXggaXMgYSBwb3NpdGlvbiBpbiB0aGUgbGlzdCBvZiBsYXllcnMgdGhhdCBhcmUgY2hpbGRyZW4g
b2YgdGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2UuIFdoZW4gcG9pbnRpbmcgdG8KKy8vIG9uZSBv
ZiB0aGVzZSBsYXllcnMsIHRoaXMgaXMgYSB2YWx1ZSBmcm9tIDAgdG8gbi0xIChuID0gbnVtYmVy
IG9mIGNoaWxkcmVuKS4gU2luY2UgdGhlIGl0ZXJhdG9yIG11c3QgYWxzbyBzdG9wIGF0IHRoZSBs
YXllcnMKKy8vIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IHN1cmZhY2UsIHRoaXMgaXMgZG9uZSBi
eSBzZXR0aW5nIHRoZSBjdXJyZW50TGF5ZXJJbmRleCB0byBhIHZhbHVlIG9mCisvLyBDQ0xheWVy
SXRlcmF0b3JQb3NpdGlvblZhbHVlOjpMYXllclJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1cmZh
Y2UuCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VU
eXBlPgorc3RydWN0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uIHsKKyAgICBDQ0xheWVySXRlcmF0
b3JQb3NpdGlvbigpIDogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCgwKSB7IH0KKyAgICBleHBsaWNp
dCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbihjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4g
PiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkgOiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KHJlbmRl
clN1cmZhY2VMYXllckxpc3QpIHsgfQorCisgICAgaW5saW5lIExheWVyVHlwZSogY3VycmVudExh
eWVyKCkgY29uc3QgeyByZXR1cm4gY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1
cmZhY2UoKSA/IHRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpIDogdGFyZ2V0UmVuZGVyU3VyZmFj
ZUNoaWxkcmVuKClbY3VycmVudExheWVySW5kZXhdLmdldCgpOyB9CisKKyAgICBpbmxpbmUgYm9v
bCBjdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpIGNvbnN0
IHsgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVz
VG9UYXJnZXQ8TGF5ZXJUeXBlPihjdXJyZW50TGF5ZXIoKSwgdGFyZ2V0UmVuZGVyU3VyZmFjZUxh
eWVyKCktPmlkKCkpOyB9CisgICAgaW5saW5lIGJvb2wgY3VycmVudExheWVyUmVwcmVzZW50c1Rh
cmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50TGF5ZXJJbmRleCA9PSBD
Q0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpMYXllckluZGV4UmVwcmVzZW50aW5nVGFyZ2V0
UmVuZGVyU3VyZmFjZTsgfQorCisgICAgaW5saW5lIExheWVyVHlwZSogdGFyZ2V0UmVuZGVyU3Vy
ZmFjZUxheWVyKCkgY29uc3QgeyByZXR1cm4gKCpyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KVt0YXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBpbmxpbmUgUmVuZGVyU3Vy
ZmFjZVR5cGUqIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiB0YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpOyB9CisgICAgaW5saW5lIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+JiB0YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKSBj
b25zdCB7IHJldHVybiB0YXJnZXRSZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpOyB9CisKKyAg
ICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5
ZXJJbmRleCA9PSBvdGhlci50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleAorICAgICAgICAg
ICAgJiYgY3VycmVudExheWVySW5kZXggPT0gb3RoZXIuY3VycmVudExheWVySW5kZXg7CisgICAg
fQorCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7CisgICAgaW50IHRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4OworICAgIGlu
dCBjdXJyZW50TGF5ZXJJbmRleDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBjZDc1NmQ2MDBkYzBmMGUz
ZjMwMWIzMmQ3ZThlODRmYzAwYWIwNzYxLi5mMDllNjI4OGNkNTBmZjUyNjc2YTUzNTMxYmEwMzEx
Yzc1MjU5MzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFj
ZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgorI2luY2x1ZGUgImNjL0ND
TGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmgiCkBAIC00MzQsNTcgKzQzNSw0MSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVu
ZGVyUwogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExh
eWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgUGFpbnRUeXBlIHBhaW50VHlwZSkKIHsK
LSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUo
KSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgTGF5
ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtz
dXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRl
clN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAg
QVNTRVJUKHJlbmRlclN1cmZhY2UpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJh
d09wYWNpdHkoKSk7Ci0KLSAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZh
Y2UocmVuZGVyU3VyZmFjZUxheWVyLCBwYWludFR5cGUpOwotCi0gICAgICAgIGNvbnN0IExheWVy
TGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgp
OyArK2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5
ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwotCi0gICAgICAgICAgICAvLyBMYXllcnMgdGhhdCBz
dGFydCBhIG5ldyByZW5kZXIgc3VyZmFjZSB3aWxsIGJlIHBhaW50ZWQgd2hlbiB0aGUgcmVuZGVy
Ci0gICAgICAgICAgICAvLyBzdXJmYWNlJ3MgbGlzdCBpcyBwcm9jZXNzZWQuCi0gICAgICAgICAg
ICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1Rh
cmdldDxMYXllckNocm9taXVtPihsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+Ym91
bmRzKCkuaXNFbXB0eSgpKTsKLQotICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5
ZXIsIHBhaW50VHlwZSk7CisgICAgLy8gVXNlIEZyb250VG9CYWNrIHRvIGFsbG93IGZvciB0ZXN0
aW5nIG9jY2x1c2lvbiBhbmQgcGVyZm9ybWluZyBjdWxsaW5nIGR1cmluZyB0aGUgdHJlZSB3YWxr
LgorICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJ
dGVyYXRvclR5cGU7CisKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVy
YXRvclR5cGU6OmVuZCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgZm9yIChDQ0xheWVy
SXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2Vu
dHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVy
U3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKKyAgICAgICAgICAgIHBhaW50TWFza0FuZFJlcGxp
Y2FGb3JSZW5kZXJTdXJmYWNlKCppdCwgcGFpbnRUeXBlKTsKKyAgICAgICAgfSBlbHNlIGlmIChp
dC5yZXByZXNlbnRzSXRzZWxmKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+b3BhY2l0eSgp
KTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmJvdW5kcygpLmlzRW1wdHkoKSk7CisgICAgICAg
ICAgICBwYWludENvbnRlbnRzSWZEaXJ0eSgqaXQsIHBhaW50VHlwZSk7CiAgICAgICAgIH0KICAg
ICB9CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQog
ewotICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IG1fdXBkYXRlTGlzdC5zaXplKCkgLSAxOyBz
dXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIExheWVyQ2hyb21p
dW0qIHJlbmRlclN1cmZhY2VMYXllciA9IG1fdXBkYXRlTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgp
OwotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJT
dXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZh
Y2UpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7Ci0KLSAg
ICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KGNvbnRleHQsIHVwZGF0ZXIpOwotCi0gICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPnJl
cGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FM
YXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5y
ZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29u
dGV4dCwgdXBkYXRlcik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0IExheWVy
TGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgp
OyArK2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5
ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwotCi0gICAgICAgICAgICBpZiAoQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxMYXllckNocm9taXVt
PihsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29u
dGV4dCwgdXBkYXRlcik7Ci0gICAgICAgIH0KKyAgICAvLyBVc2UgQmFja1RvRnJvbnQgc2luY2Ug
aXQncyBjaGVhcCBhbmQgdGhpcyBpc24ndCBvcmRlci1kZXBlbmRlbnQuCisgICAgdHlwZWRlZiBD
Q0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCBDQ0xh
eWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKwor
ICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZt
X3VwZGF0ZUxpc3QpOworICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJ
dGVyYXRvclR5cGU6OmJlZ2luKCZtX3VwZGF0ZUxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKKyAgICAgICAg
ICAgIGlmIChpdC0+bWFza0xheWVyKCkpCisgICAgICAgICAgICAgICAgaXQtPm1hc2tMYXllcigp
LT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOworCisgICAgICAg
ICAgICBpZiAoaXQtPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICAgICAgaXQtPnJlcGxp
Y2FMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwor
ICAgICAgICAgICAgICAgIGlmIChpdC0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpKQorICAg
ICAgICAgICAgICAgICAgICBpdC0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkKKyAgICAgICAgICAgIGl0LT51
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggNTY1MDliY2Vj
M2M2MWUyZGZlMTY2NGFiNDE2NWY0MjkzNzM5M2UxYi4uYjEzNzcxNDUzOGI4OTllYjUxNTViZGQ3
NDBjZDI5ZGFlNDc3ZDVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21t
b24uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVt
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJjYy9DQ0xh
eWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKIApAQCAt
NDcxLDE1ICs0NzIsMTQgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKIHRlbXBsYXRlPHR5cGVu
YW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CiBzdGF0aWMgdm9pZCB3
YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgVmVjdG9yPFJlZlB0
cjxMYXllclR5cGU+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7Ci0gICAgZm9yIChpbnQg
c3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNl
SW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIExheWVyVHlwZSogcmVuZGVy
U3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgp
OwotICAgICAgICBSZW5kZXJTdXJmYWNlVHlwZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZh
Y2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotCi0gICAgICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJU
eXBlPiA+JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXpl
KCk7ICsrbGF5ZXJJbmRleCkgewotICAgICAgICAgICAgTGF5ZXJUeXBlKiBsYXllciA9IGxheWVy
TGlzdFtsYXllckluZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVy
UmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdDxM
YXllclR5cGU+KGxheWVyKTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0
KHZpc2libGVMYXllclJlY3QpOworICAgIC8vIFVzZSBCYWNrVG9Gcm9udCBzaW5jZSBpdCdzIGNo
ZWFwIGFuZCB0aGlzIGlzbid0IG9yZGVyLWRlcGVuZGVudC4KKyAgICB0eXBlZGVmIENDTGF5ZXJJ
dGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBDQ0xheWVySXRlcmF0b3JBY3Rp
b25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworICAgIENDTGF5ZXJJdGVy
YXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKyAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0
b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBpZiAoIWl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAg
ICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdDxMYXllclR5cGU+KCppdCk7CisgICAgICAgICAg
ICBpdC0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKICAgICAgICAgfQog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggYThlODdhOWY5YmVhNWQ5
YmI0ZTgxOGRmNTBkYzA4ZDllNzMyNmY4Yy4uMDkxZjMxOTU4YWM0YWI4MzYzYTc4Y2Q5ZDMwNDIz
MTg1OTU1NTI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTQyLDYgKzQyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0RhbWFnZVRyYWNrZXI7CiBjbGFzcyBD
Q0xheWVySW1wbDsKK2NsYXNzIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM7CiBjbGFzcyBMYXllclJl
bmRlcmVyQ2hyb21pdW07CiBjbGFzcyBNYW5hZ2VkVGV4dHVyZTsKIApAQCAtMTI5LDYgKzEzMCwx
MSBAQCBwcml2YXRlOgogCiAgICAgLy8gU3RvcmVkIGluIHRoZSAic3VyZmFjZSBzcGFjZSIgd2hl
cmUgdGhpcyBkYW1hZ2UgY2FuIGJlIHVzZWQgZm9yIHNjaXNzb3JpbmcuCiAgICAgRmxvYXRSZWN0
IG1fZGFtYWdlUmVjdDsKKworICAgIC8vIEZvciBDQ0xheWVySXRlcmF0b3JBY3Rpb25zCisgICAg
aW50IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5OworICAgIGludCBtX2N1
cnJlbnRMYXllckluZGV4SGlzdG9yeTsKKyAgICBmcmllbmQgY2xhc3MgQ0NMYXllckl0ZXJhdG9y
QWN0aW9uczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGU2NzRi
YjZiODViMDg1Y2FiYWNjOWQ5ZDY0OTk5M2Q1ZDYyZmU1Y2YuLmFkNDI0MTJjYjUyZmQyZjU4YmVj
OWE0Y2U4M2Y0ZTI4ODE5NmNiOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAt
NjQsNiArNjQsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAnLAorICAgICAgICAg
ICAgJ3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9D
Q0xheWVyUXVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyU29ydGVyVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJh
dG9yVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRv
clRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0MjY4YWQ2MzY4ZDIwZmFkZTEzZmI3NGZjZGZmN2YwNTdl
NzcwZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJJdGVyYXRvclRlc3QuY3BwCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3IuaCIKKwor
I2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uaCIKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgOjp0ZXN0aW5nOjpNb2NrOwor
dXNpbmcgOjp0ZXN0aW5nOjpfOwordXNpbmcgOjp0ZXN0aW5nOjpBdExlYXN0OwordXNpbmcgOjp0
ZXN0aW5nOjpBbnlOdW1iZXI7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFRlc3RMYXllckNocm9t
aXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFRlc3RMYXllckNocm9taXVtPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGVz
dExheWVyQ2hyb21pdW0oKSk7IH0KKworICAgIGludCBtX2NvdW50UmVwcmVzZW50aW5nVGFyZ2V0
U3VyZmFjZTsKKyAgICBpbnQgbV9jb3VudFJlcHJlc2VudGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2U7
CisgICAgaW50IG1fY291bnRSZXByZXNlbnRpbmdJdHNlbGY7CisKKyAgICB2aXJ0dWFsIGJvb2wg
ZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3c0NvbnRlbnQ7IH0KKyAgICB2b2lk
IHNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkgeyBtX2RyYXdzQ29udGVudCA9IGRy
YXdzQ29udGVudDsgfQorCitwcml2YXRlOgorICAgIFRlc3RMYXllckNocm9taXVtKCkKKyAgICAg
ICAgOiBMYXllckNocm9taXVtKDApCisgICAgICAgICwgbV9kcmF3c0NvbnRlbnQodHJ1ZSkKKyAg
ICB7CisgICAgICAgIHNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgIHNldERy
YXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOworICAgIH0KKworICAg
IGJvb2wgbV9kcmF3c0NvbnRlbnQ7Cit9OworCisjZGVmaW5lIEVYUEVDVF9DT1VOVChsYXllciwg
dGFyZ2V0LCBjb250cmliLCBpdHNlbGYpIFwKKyAgICBFWFBFQ1RfRVEodGFyZ2V0LCBsYXllci0+
bV9jb3VudFJlcHJlc2VudGluZ1RhcmdldFN1cmZhY2UpOyAgICAgICAgICBcCisgICAgRVhQRUNU
X0VRKGNvbnRyaWIsIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nQ29udHJpYnV0aW5nU3VyZmFj
ZSk7ICAgXAorICAgIEVYUEVDVF9FUShpdHNlbGYsIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5n
SXRzZWxmKTsKKwordHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVy
U3VyZmFjZUNocm9taXVtLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjaz4gRnJv
bnRUb0JhY2s7Cit0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0sIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250PiBCYWNr
VG9Gcm9udDsKKwordm9pZCByZXNldENvdW50cyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgZm9yICh1bnNpZ25lZCBzdXJmYWNl
SW5kZXggPSAwOyBzdXJmYWNlSW5kZXggPCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKTsg
KytzdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgVGVzdExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZh
Y2VMYXllciA9IHN0YXRpY19jYXN0PFRlc3RMYXllckNocm9taXVtKj4ocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpKTsKKyAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9t
aXVtKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7
CisKKyAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nVGFyZ2V0
U3VyZmFjZSA9IC0xOworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1fY291bnRSZXByZXNl
bnRpbmdDb250cmlidXRpbmdTdXJmYWNlID0gLTE7CisgICAgICAgIHJlbmRlclN1cmZhY2VMYXll
ci0+bV9jb3VudFJlcHJlc2VudGluZ0l0c2VsZiA9IC0xOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCByZW5kZXJTdXJmYWNlLT5sYXllckxpc3Qo
KS5zaXplKCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAgICAgICAgVGVzdExheWVyQ2hyb21pdW0q
IGxheWVyID0gc3RhdGljX2Nhc3Q8VGVzdExheWVyQ2hyb21pdW0qPihyZW5kZXJTdXJmYWNlLT5s
YXllckxpc3QoKVtsYXllckluZGV4XS5nZXQoKSk7CisKKyAgICAgICAgICAgIGxheWVyLT5tX2Nv
dW50UmVwcmVzZW50aW5nVGFyZ2V0U3VyZmFjZSA9IC0xOworICAgICAgICAgICAgbGF5ZXItPm1f
Y291bnRSZXByZXNlbnRpbmdDb250cmlidXRpbmdTdXJmYWNlID0gLTE7CisgICAgICAgICAgICBs
YXllci0+bV9jb3VudFJlcHJlc2VudGluZ0l0c2VsZiA9IC0xOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIGl0ZXJhdGVGcm9udFRvQmFjayhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgcmVzZXRDb3VudHMoKnJlbmRlclN1
cmZhY2VMYXllckxpc3QpOworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChGcm9udFRvQmFj
ayBpdCA9IEZyb250VG9CYWNrOjpiZWdpbihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgaXQgIT0g
RnJvbnRUb0JhY2s6OmVuZChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgKytpdCwgKytjb3VudCkg
eworICAgICAgICBUZXN0TGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBzdGF0aWNfY2FzdDxUZXN0TGF5
ZXJDaHJvbWl1bSo+KCppdCk7CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzVGFyZ2V0UmVuZGVy
U3VyZmFjZSgpKQorICAgICAgICAgICAgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdUYXJnZXRT
dXJmYWNlID0gY291bnQ7CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzQ29udHJpYnV0aW5nUmVu
ZGVyU3VyZmFjZSgpKQorICAgICAgICAgICAgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdDb250
cmlidXRpbmdTdXJmYWNlID0gY291bnQ7CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzSXRzZWxm
KCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ0l0c2VsZiA9IGNvdW50
OworICAgIH0KK30KKwordm9pZCBpdGVyYXRlQmFja1RvRnJvbnQoVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIHJlc2V0Q291bnRz
KCpyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAo
QmFja1RvRnJvbnQgaXQgPSBCYWNrVG9Gcm9udDo6YmVnaW4ocmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7IGl0ICE9IEJhY2tUb0Zyb250OjplbmQocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7ICsraXQs
ICsrY291bnQpIHsKKyAgICAgICAgVGVzdExheWVyQ2hyb21pdW0qIGxheWVyID0gc3RhdGljX2Nh
c3Q8VGVzdExheWVyQ2hyb21pdW0qPigqaXQpOworICAgICAgICBpZiAoaXQucmVwcmVzZW50c1Rh
cmdldFJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50
aW5nVGFyZ2V0U3VyZmFjZSA9IGNvdW50OworICAgICAgICBpZiAoaXQucmVwcmVzZW50c0NvbnRy
aWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVz
ZW50aW5nQ29udHJpYnV0aW5nU3VyZmFjZSA9IGNvdW50OworICAgICAgICBpZiAoaXQucmVwcmVz
ZW50c0l0c2VsZigpKQorICAgICAgICAgICAgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdJdHNl
bGYgPSBjb3VudDsKKyAgICB9Cit9CisKK1RFU1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwgc2ltcGxl
VHJlZSkKK3sKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3RMYXllciA9IFRlc3RM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGZp
cnN0ID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJD
aHJvbWl1bT4gc2Vjb25kID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxUZXN0TGF5ZXJDaHJvbWl1bT4gdGhpcmQgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBmb3VydGggPSBUZXN0TGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CisKKyAgICByb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKwor
ICAgIHJvb3RMYXllci0+YWRkQ2hpbGQoZmlyc3QpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQo
c2Vjb25kKTsKKyAgICByb290TGF5ZXItPmFkZENoaWxkKHRoaXJkKTsKKyAgICByb290TGF5ZXIt
PmFkZENoaWxkKGZvdXJ0aCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gbGF5ZXJMaXN0OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXll
cik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKworICAgIGl0ZXJh
dGVCYWNrVG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0NPVU5U
KHJvb3RMYXllciwgMCwgLTEsIDEpOworICAgIEVYUEVDVF9DT1VOVChmaXJzdCwgLTEsIC0xLCAy
KTsKKyAgICBFWFBFQ1RfQ09VTlQoc2Vjb25kLCAtMSwgLTEsIDMpOworICAgIEVYUEVDVF9DT1VO
VCh0aGlyZCwgLTEsIC0xLCA0KTsKKyAgICBFWFBFQ1RfQ09VTlQoZm91cnRoLCAtMSwgLTEsIDUp
OworCisgICAgaXRlcmF0ZUZyb250VG9CYWNrKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAg
ICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCA1LCAtMSwgNCk7CisgICAgRVhQRUNUX0NPVU5UKGZp
cnN0LCAtMSwgLTEsIDMpOworICAgIEVYUEVDVF9DT1VOVChzZWNvbmQsIC0xLCAtMSwgMik7Cisg
ICAgRVhQRUNUX0NPVU5UKHRoaXJkLCAtMSwgLTEsIDEpOworICAgIEVYUEVDVF9DT1VOVChmb3Vy
dGgsIC0xLCAtMSwgMCk7CisKK30KKworVEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBjb21wbGV4
VHJlZSkKK3sKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3RMYXllciA9IFRlc3RM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJv
b3QxID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJD
aHJvbWl1bT4gcm9vdDIgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PFRlc3RMYXllckNocm9taXVtPiByb290MyA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QyMSA9IFRlc3RMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QyMiA9IFRlc3RM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJv
b3QyMyA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVy
Q2hyb21pdW0+IHJvb3QyMjEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPFRlc3RMYXllckNocm9taXVtPiByb290MjMxID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworCisgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisKKyAgICByb290
TGF5ZXItPmFkZENoaWxkKHJvb3QxKTsKKyAgICByb290TGF5ZXItPmFkZENoaWxkKHJvb3QyKTsK
KyAgICByb290TGF5ZXItPmFkZENoaWxkKHJvb3QzKTsKKyAgICByb290Mi0+YWRkQ2hpbGQocm9v
dDIxKTsKKyAgICByb290Mi0+YWRkQ2hpbGQocm9vdDIyKTsKKyAgICByb290Mi0+YWRkQ2hpbGQo
cm9vdDIzKTsKKyAgICByb290MjItPmFkZENoaWxkKHJvb3QyMjEpOworICAgIHJvb3QyMy0+YWRk
Q2hpbGQocm9vdDIzMSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
bGF5ZXJMaXN0OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllcik7
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKworICAgIGl0ZXJhdGVC
YWNrVG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0NPVU5UKHJv
b3RMYXllciwgMCwgLTEsIDEpOworICAgIEVYUEVDVF9DT1VOVChyb290MSwgLTEsIC0xLCAyKTsK
KyAgICBFWFBFQ1RfQ09VTlQocm9vdDIsIC0xLCAtMSwgMyk7CisgICAgRVhQRUNUX0NPVU5UKHJv
b3QyMSwgLTEsIC0xLCA0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyLCAtMSwgLTEsIDUpOwor
ICAgIEVYUEVDVF9DT1VOVChyb290MjIxLCAtMSwgLTEsIDYpOworICAgIEVYUEVDVF9DT1VOVChy
b290MjMsIC0xLCAtMSwgNyk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMzEsIC0xLCAtMSwgOCk7
CisgICAgRVhQRUNUX0NPVU5UKHJvb3QzLCAtMSwgLTEsIDkpOworCisgICAgaXRlcmF0ZUZyb250
VG9CYWNrKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdExh
eWVyLCA5LCAtMSwgOCk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QxLCAtMSwgLTEsIDcpOworICAg
IEVYUEVDVF9DT1VOVChyb290MiwgLTEsIC0xLCA2KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIx
LCAtMSwgLTEsIDUpOworICAgIEVYUEVDVF9DT1VOVChyb290MjIsIC0xLCAtMSwgNCk7CisgICAg
RVhQRUNUX0NPVU5UKHJvb3QyMjEsIC0xLCAtMSwgMyk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3Qy
MywgLTEsIC0xLCAyKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIzMSwgLTEsIC0xLCAxKTsKKyAg
ICBFWFBFQ1RfQ09VTlQocm9vdDMsIC0xLCAtMSwgMCk7CisKK30KKworVEVTVChDQ0xheWVySXRl
cmF0b3JUZXN0LCBjb21wbGV4VHJlZU11bHRpU3VyZmFjZSkKK3sKKyAgICBSZWZQdHI8VGVzdExh
eWVyQ2hyb21pdW0+IHJvb3RMYXllciA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QxID0gVGVzdExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIgPSBUZXN0TGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MyA9
IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21p
dW0+IHJvb3QyMSA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVz
dExheWVyQ2hyb21pdW0+IHJvb3QyMiA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QyMyA9IFRlc3RMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QyMjEgPSBUZXN0TGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290
MjMxID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworCisgICAgcm9vdExheWVyLT5jcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CisKKyAgICByb290TGF5ZXItPmFkZENoaWxkKHJvb3QxKTsKKyAg
ICByb290TGF5ZXItPmFkZENoaWxkKHJvb3QyKTsKKyAgICByb290TGF5ZXItPmFkZENoaWxkKHJv
b3QzKTsKKyAgICByb290Mi0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICByb290Mi0+c2V0
T3BhY2l0eSgwLjUpOyAvLyBGb3JjZSB0aGUgbGF5ZXIgdG8gb3duIGEgbmV3IHN1cmZhY2UuCisg
ICAgcm9vdDItPmFkZENoaWxkKHJvb3QyMSk7CisgICAgcm9vdDItPmFkZENoaWxkKHJvb3QyMik7
CisgICAgcm9vdDItPmFkZENoaWxkKHJvb3QyMyk7CisgICAgcm9vdDIyLT5zZXRPcGFjaXR5KDAu
NSk7CisgICAgcm9vdDIyLT5hZGRDaGlsZChyb290MjIxKTsKKyAgICByb290MjMtPnNldE9wYWNp
dHkoMC41KTsKKyAgICByb290MjMtPmFkZENoaWxkKHJvb3QyMzEpOworCisgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IGxheWVyTGlzdDsKKyAgICByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllci5nZXQoKSwgcm9vdExh
eWVyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIFRyYW5zZm9ybWF0aW9u
TWF0cml4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDI1Nik7CisKKyAgICBpdGVyYXRlQmFja1RvRnJvbnQoJnJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDAsIC0xLCAxKTsKKyAgICBFWFBFQ1Rf
Q09VTlQocm9vdDEsIC0xLCAtMSwgMik7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyLCA0LCAzLCAt
MSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMSwgLTEsIC0xLCA1KTsKKyAgICBFWFBFQ1RfQ09V
TlQocm9vdDIyLCA3LCA2LCA4KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyMSwgLTEsIC0xLCA5
KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIzLCAxMSwgMTAsIDEyKTsKKyAgICBFWFBFQ1RfQ09V
TlQocm9vdDIzMSwgLTEsIC0xLCAxMyk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QzLCAtMSwgLTEs
IDE0KTsKKworICAgIGl0ZXJhdGVGcm9udFRvQmFjaygmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
CisgICAgRVhQRUNUX0NPVU5UKHJvb3RMYXllciwgMTQsIC0xLCAxMyk7CisgICAgRVhQRUNUX0NP
VU5UKHJvb3QxLCAtMSwgLTEsIDEyKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIsIDEwLCAxMSwg
LTEpOworICAgIEVYUEVDVF9DT1VOVChyb290MjEsIC0xLCAtMSwgOSk7CisgICAgRVhQRUNUX0NP
VU5UKHJvb3QyMiwgNywgOCwgNik7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMjEsIC0xLCAtMSwg
NSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMywgMywgNCwgMik7CisgICAgRVhQRUNUX0NPVU5U
KHJvb3QyMzEsIC0xLCAtMSwgMSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QzLCAtMSwgLTEsIDAp
OworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121677</attachid>
            <date>2012-01-09 09:59:42 -0800</date>
            <delta_ts>2012-01-09 15:30:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74203-20120109125941.patch</filename>
            <type>text/plain</type>
            <size>49987</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJiOTFlMjdlMTQwNTg4
ZTEzYjZmZmEwZDY2YTg4Y2RmZDZlMWZkNi4uZmNkNWYwYmRlNGExYTE1N2VmMmYwZjg1MGVmNTU1
NDVmOGYxMzM3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTAxLTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdW5pdCB0ZXN0czogQ0NM
YXllckl0ZXJhdG9yVGVzdC5jcHAKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tU
b0Zyb250OjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpCYWNrVG9Gcm9udDo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkJhY2tUb0Zyb250OjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdElu
U3VidHJlZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpD
Q0xheWVySXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpiZWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OmVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6
Om9wZXJhdG9yLT4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRv
ciopOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpyZXByZXNlbnRzVGFyZ2V0
UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OnJlcHJl
c2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvcjo6cmVwcmVzZW50c0l0c2VsZik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SXRlcmF0b3I6OnRhcmdldFJlbmRlclN1cmZhY2VMYXllcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24uaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6Q0NMYXllckl0ZXJhdG9y
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OmN1
cnJlbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6
Y3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OmN1cnJlbnRMYXllclJlcHJlc2Vu
dHNUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uOjp0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OnRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OnRhcmdldFJlbmRlclN1cmZhY2VDaGls
ZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6b3BlcmF0
b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXll
ckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndhbGtMYXll
cnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisKIDIwMTItMDEtMDQgIEFkYW0g
Um9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBvbmUgYmlnIHByaW50ZiBj
b21tYW5kIGluc3RlYWQgb2YgbWFueSBjaGFpbmVkIGVjaG8gY29tbWFuZHMgdG8gZ2VuZXJhdGUg
aWRsX2ZpbGVzLnRtcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA2ZWQzMDk3MTA4OTQ0
NWIxZGUyOThiZWU1MDc5Zjg4MjQ4ZWI2MzU3Li5kYTEzMzE5YTdhYjc3NTJkZWJiZTk0MTcyMThi
YjAxOGQ5YzZkMmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDEyLTAxLTA5ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFtjaHJvbWl1bV0gQ3JlYXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5
ZXIgdHJlZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzQyMDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwOiBB
ZGRlZC4KKwogMjAxMi0wMS0wNCAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW0Nocm9taXVtXSBSZS11c2UgVGVzdFNoZWxsTGludXguY3BwIGZvciBBbmRy
b2lkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggODMwNWZjZWQ4ZWFmNjMwOWY3ZTZiYzliZjc2MWIwMjFh
YzA0NDg4NS4uZDZiZDZkODkxNTc5YWUwZThjNmYxNDFiMTNhMjQyZmI0Zjc5OGY1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMzYwOSw2ICszNjA5LDkgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRv
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SXRlcmF0b3JQb3NpdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyUXVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmgKaW5kZXggOTNlOGQ4NmM2NzE3MWMyNzdlYzE3NWM2MTlkYmU4ODBiNzJmNDE4
Yi4uNGUxODIyYjMxOGM1ZTFkMjU3YTkwOGU0MmE0ZGMyODg0NmI1YjJhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTk2LDYgKzk2LDExIEBAIHByaXZhdGU6CiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9vcmlnaW5UcmFuc2Zvcm07CiAgICAgSW50UmVjdCBtX2Ns
aXBSZWN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX2xheWVyTGlzdDsK
KworICAgIC8vIEZvciBDQ0xheWVySXRlcmF0b3JBY3Rpb25zCisgICAgaW50IG1fdGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5OworICAgIGludCBtX2N1cnJlbnRMYXllckluZGV4
SGlzdG9yeTsKKyAgICBmcmllbmQgc3RydWN0IENDTGF5ZXJJdGVyYXRvckFjdGlvbnM7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzY3ZmYwZTc2
NmM5NjM0MDYzNTdlZGVmMjliYzZkNWE5MDg5MmY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNw
cApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NMYXll
ckl0ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVu
ZGVyU3VyZmFjZUNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNs
dWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK3Zv
aWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2luKENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit7CisgICAg
cG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gMDsKKyAgICBwb3MuY3VycmVudExh
eWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpMYXllckluZGV4UmVwcmVz
ZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsKKworICAgIG1faGlnaGVzdFRhcmdldFJlbmRlclN1
cmZhY2VMYXllciA9IDA7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVu
YW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNr
VG9Gcm9udDo6ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3Vy
ZmFjZVR5cGU+JiBwb3MpCit7CisgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4
ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6SW52YWxpZFRhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4OworICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IDA7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9p
ZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6bmV4dChDQ0xheWVySXRlcmF0
b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQoreworICAgIC8v
IElmIHRoZSBjdXJyZW50IGxheWVyIGhhcyBhIFJTLCBtb3ZlIHRvIGl0cyBsYXllciBsaXN0LiBP
dGhlcndpc2UsIHZpc2l0IHRoZSBuZXh0IGxheWVyIGluIHRoZSBjdXJyZW50IFJTIGxheWVyIGxp
c3QuCisgICAgaWYgKHBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVy
U3VyZmFjZSgpKSB7CisgICAgICAgIC8vIFNhdmUgb3VyIHBvc2l0aW9uIGluIHRoZSBjaGlsZExh
eWVyIGxpc3QgZm9yIHRoZSBSZW5kZXJTdXJmYWNlLCB0aGVuIGp1bXAgdG8gdGhlIG5leHQgUmVu
ZGVyU3VyZmFjZS4gU2F2ZSB3aGVyZSB3ZQorICAgICAgICAvLyBjYW1lIGZyb20gaW4gdGhlIG5l
eHQgUmVuZGVyU3VyZmFjZSBzbyB3ZSBjYW4gZ2V0IGJhY2sgdG8gaXQuCisgICAgICAgIHBvcy50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5kZXhIaXN0b3J5ID0gcG9zLmN1
cnJlbnRMYXllckluZGV4OworICAgICAgICBpbnQgcHJldmlvdXNUYXJnZXRSZW5kZXJTdXJmYWNl
TGF5ZXIgPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisKKyAgICAgICAgcG9z
LnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gKyttX2hpZ2hlc3RUYXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXI7CisgICAgICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uVmFsdWU6OkxheWVySW5kZXhSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJm
YWNlOworCisgICAgICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVySW5kZXhIaXN0b3J5ID0gcHJldmlvdXNUYXJnZXRSZW5kZXJTdXJmYWNlTGF5
ZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKytwb3MuY3VycmVudExheWVySW5kZXg7CisKKyAg
ICAgICAgaW50IHRhcmdldFJlbmRlclN1cmZhY2VOdW1DaGlsZHJlbiA9IHBvcy50YXJnZXRSZW5k
ZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCk7CisgICAgICAgIHdoaWxlIChwb3MuY3VycmVudExh
eWVySW5kZXggPT0gdGFyZ2V0UmVuZGVyU3VyZmFjZU51bUNoaWxkcmVuKSB7CisgICAgICAgICAg
ICAvLyBKdW1wIGJhY2sgdG8gdGhlIHByZXZpb3VzIFJlbmRlclN1cmZhY2UsIGFuZCBnZXQgYmFj
ayB0aGUgcG9zaXRpb24gd2hlcmUgd2Ugd2VyZSBpbiB0aGF0IGxpc3QsIGFuZCBtb3ZlIHRvIHRo
ZSBuZXh0IHBvc2l0aW9uIHRoZXJlLgorICAgICAgICAgICAgaWYgKCFwb3MudGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVySW5kZXgpIHsKKyAgICAgICAgICAgICAgICAvLyBFbmQgb2YgdGhlIGxpc3QK
KyAgICAgICAgICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
SW5kZXg7CisgICAgICAgICAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gMDsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwb3MudGFyZ2V0
UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX3Rh
cmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeTsKKyAgICAgICAgICAgIHBvcy5jdXJy
ZW50TGF5ZXJJbmRleCA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVy
SW5kZXhIaXN0b3J5ICsgMTsKKworICAgICAgICAgICAgdGFyZ2V0UmVuZGVyU3VyZmFjZU51bUNo
aWxkcmVuID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbigpLnNpemUoKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUg
UmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9C
YWNrOjpiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlPiYgcG9zKQoreworICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9
IDA7CisgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2VD
aGlsZHJlbigpLnNpemUoKSAtIDE7CisgICAgZ29Ub0hpZ2hlc3RJblN1YnRyZWUocG9zKTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3sK
KyAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JQ
b3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisgICAg
cG9zLmN1cnJlbnRMYXllckluZGV4ID0gMDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVy
VHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlw
ZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit7CisgICAgLy8gTW92ZXMgdG8gdGhlIHByZXZp
b3VzIGxheWVyIGluIHRoZSBjdXJyZW50IFJTIGxheWVyIGxpc3QuIFRoZW4gd2UgY2hlY2sgaWYg
dGhlCisgICAgLy8gbmV3IGN1cnJlbnQgbGF5ZXIgaGFzIGl0cyBvd24gUlMsIGluIHdoaWNoIGNh
c2UgdGhlcmUgYXJlIHRoaW5ncyBpbiB0aGF0IFJTIGxheWVyIGxpc3QgdGhhdCBhcmUgaGlnaGVy
LCBzbworICAgIC8vIHdlIGZpbmQgdGhlIGhpZ2hlc3QgbGF5ZXIgaW4gdGhhdCBzdWJ0cmVlLgor
ICAgIC8vIElmIHdlIG1vdmUgYmFjayBwYXN0IHRoZSBmcm9udCBvZiB0aGUgbGlzdCwgd2UganVt
cCB1cCB0byB0aGUgcHJldmlvdXMgUlMgbGF5ZXIgbGlzdCwgcGlja2luZyB1cCBhZ2FpbiB3aGVy
ZSB3ZQorICAgIC8vIGhhZCBwcmV2aW91c2x5IHJlY3Vyc2VkIGludG8gdGhlIGN1cnJlbnQgUlMg
bGF5ZXIgbGlzdC4KKworICAgIGlmICghcG9zLmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRS
ZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgLy8gU3VidHJhY3Rpbmcgb25lIGhlcmUgd2lsbCBl
dmVudHVhbGx5IGNhdXNlIHRoZSBjdXJyZW50IGxheWVyIHRvIGJlY29tZSB0aGF0IGxheWVyCisg
ICAgICAgIC8vIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IHJlbmRlciBzdXJmYWNlLgorICAgICAg
ICAtLXBvcy5jdXJyZW50TGF5ZXJJbmRleDsKKyAgICAgICAgZ29Ub0hpZ2hlc3RJblN1YnRyZWUo
cG9zKTsKKyAgICB9IGVsc2UgeworICAgICAgICB3aGlsZSAocG9zLmN1cnJlbnRMYXllclJlcHJl
c2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIGlmICghcG9zLnRhcmdl
dFJlbmRlclN1cmZhY2VMYXllckluZGV4KSB7CisgICAgICAgICAgICAgICAgLy8gRW5kIG9mIHRo
ZSBsaXN0CisgICAgICAgICAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4
ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6SW52YWxpZFRhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4OworICAgICAgICAgICAgICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IDA7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcG9z
LnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3Rvcnk7CisgICAgICAgICAgICBw
b3MuY3VycmVudExheWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX2N1cnJl
bnRMYXllckluZGV4SGlzdG9yeTsKKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5
ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdEluU3VidHJlZShDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQor
eworICAgIGlmIChwb3MuY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2Uo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIHdoaWxlIChwb3MuY3VycmVudExheWVyUmVwcmVzZW50
c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAvLyBTYXZlIHdoZXJlIHdl
IHdlcmUgaW4gdGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2UsIG1vdmUgdG8gdGhlIG5leHQgb25l
LCBhbmQgc2F2ZSB0aGUgdGFyZ2V0IHN1cmZhY2UgdGhhdCB3ZQorICAgICAgICAvLyBjYW1lIGZy
b20gdGhlcmUgc28gd2UgY2FuIGdvIGJhY2sgdG8gaXQuCisgICAgICAgIHBvcy50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5kZXhIaXN0b3J5ID0gcG9zLmN1cnJlbnRMYXll
ckluZGV4OworICAgICAgICBpbnQgcHJldmlvdXNUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSBw
b3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisKKyAgICAgICAgZm9yIChMYXllclR5
cGUqIGxheWVyID0gcG9zLmN1cnJlbnRMYXllcigpOyBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxh
eWVyKCkgIT0gbGF5ZXI7ICsrcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4KSB7IH0K
KyAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2VD
aGlsZHJlbigpLnNpemUoKSAtIDE7CisKKyAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3RvcnkgPSBwcmV2aW91c1Rhcmdl
dFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICB9Cit9CisKKy8vIERlY2xhcmUgZWFjaCBvZiB0aGUg
YWJvdmUgZnVuY3Rpb25zIGZvciBMYXllckNocm9taXVtIGFuZCBDQ0xheWVySW1wbCBjbGFzc2Vz
IHNvIHRoYXQgdGhleSBhcmUgbGlua2VkLgordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpCYWNrVG9Gcm9udDo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVy
SXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9u
PExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4mKTsKK3RlbXBsYXRlIHZvaWQg
Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQoQ0NMYXllckl0ZXJhdG9y
UG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOworCit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpiZWdpbihDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPiYpOwordGVt
cGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6ZW5kKENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpuZXh0KENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7CisKK3Rl
bXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6Om5leHQoQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVt
PiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6
ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bT4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRU
b0JhY2s6OmJlZ2luKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJlbmRl
clN1cmZhY2VDaHJvbWl1bT4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9u
czo6RnJvbnRUb0JhY2s6OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRvclBvc2l0
aW9uPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4mKTsKKwordGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6bmV4dChDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPiYpOwordGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6ZW5kKENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1wbGF0ZSB2
b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbihDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPiYpOwordGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6Z29Ub0hpZ2hlc3RJblN1
YnRyZWUoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT4mKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
ZjQxMmM0NGQzZDE0MDQ3MGZkMTJhNzI3YjkxNGU0ZDQ2ZmJlYjE0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0
ZXJhdG9yLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXll
ckl0ZXJhdG9yX2gKKyNkZWZpbmUgQ0NMYXllckl0ZXJhdG9yX2gKKworI2luY2x1ZGUgImNjL0ND
TGF5ZXJJdGVyYXRvclBvc2l0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gVGhlc2UgY2xhc3NlcyBwcm92aWRlIG1lYW5zIHRvIGl0ZXJh
dGUgb3ZlciB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVlLgorCisvLyBFeGFtcGxlIGNvZGUg
Zm9sbG93cywgZm9yIGEgdHJlZSBvZiBMYXllckNocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bSBvYmplY3RzLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisvLworLy8gdm9pZCBkb1N0dWZmT25M
YXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KQorLy8geworLy8gICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hy
b21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJv
bnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisvLworLy8gICAgIENDTGF5ZXJJdGVyYXRv
clR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKKy8vICAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0
b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkg
eworLy8gICAgICAgICAvLyBPbmx5IG9uZSBvZiB0aGVzZSB3aWxsIGJlIHRydWUKKy8vICAgICAg
ICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpCisvLyAgICAgICAgICAg
ICBmb28oKml0KTsgLy8gKml0IGlzIGEgbGF5ZXIgcmVwcmVzZW50aW5nIGEgdGFyZ2V0IFJlbmRl
clN1cmZhY2UKKy8vICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJT
dXJmYWNlKCkpCisvLyAgICAgICAgICAgICBiYXIoKml0KTsgLy8gKml0IGlzIGEgbGF5ZXIgcmVw
cmVzZW50aW5nIGEgUmVuZGVyU3VyZmFjZSB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZSBsYXllcidz
IHRhcmdldCBSZW5kZXJTdXJmYWNlCisvLyAgICAgICAgIGlmIChpdC5yZXByZXNlbnRzSXRzZWxm
KCkpCisvLyAgICAgICAgICAgICBiYXooKml0KTsgLy8gKml0IGlzIGEgbGF5ZXIgcmVwcmVzZW50
aW5nIGl0c2VsZiwgYXMgaXQgY29udHJpYnV0ZXMgdG8gaXRzIG93biB0YXJnZXQgUmVuZGVyU3Vy
ZmFjZQorLy8gICAgIH0KKy8vIH0KKworLy8gQSBSZW5kZXJTdXJmYWNlIFIgbWF5IGJlIHJlZmVy
cmVkIHRvIGluIG9uZSBvZiB0d28gZGlmZmVyZW50IGNvbnRleHRzLiBPbmUgUmVuZGVyU3VyZmFj
ZSBpcyAiY3VycmVudCIgYXQgYW55IHRpbWUsIGZvcgorLy8gd2hhdGV2ZXIgb3BlcmF0aW9uIGlz
IGJlaW5nIHBlcmZvcm1lZC4gVGhpcyBjdXJyZW50IHN1cmZhY2UgaXMgcmVmZXJyZWQgdG8gYXMg
YSB0YXJnZXQgc3VyZmFjZS4gRm9yIGV4YW1wbGUsIHdoZW4gUiBpcworLy8gYmVpbmcgcGFpbnRl
ZCBpdCB3b3VsZCBiZSB0aGUgdGFyZ2V0IHN1cmZhY2UuIE9uY2UgUiBoYXMgYmVlbiBwYWludGVk
LCBpdHMgY29udGVudHMgbWF5IGJlIGluY2x1ZGVkIGludG8gYW5vdGhlcgorLy8gc3VyZmFjZSBT
LiBXaGlsZSBTIGlzIGNvbnNpZGVyZWQgdGhlIHRhcmdldCBzdXJmYWNlIHdoZW4gaXQgaXMgYmVp
bmcgcGFpbnRlZCwgUiBpcyBjYWxsZWQgYSBjb250cmlidXRpbmcgc3VyZmFjZQorLy8gaW4gdGhp
cyBjb250ZXh0IGFzIGl0IGNvbnRyaWJ1dGVzIHRvIHRoZSBjb250ZW50IG9mIHRoZSB0YXJnZXQg
c3VyZmFjZSBTLgorLy8KKy8vIFRoZSBpdGVyYXRvcidzIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhl
IHRyZWUgYWx3YXlzIHBvaW50cyB0byBzb21lIGxheWVyLiBUaGUgc3RhdGUgb2YgdGhlIGl0ZXJh
dG9yIGluZGljYXRlcyB0aGUgcm9sZSBvZiB0aGUKKy8vIGxheWVyLCBhbmQgd2lsbCBiZSBvbmUg
b2YgdGhlIGZvbGxvd2luZyB0aHJlZSBzdGF0ZXMuIEEgc2luZ2xlIGxheWVyIEwgd2lsbCBhcHBl
YXIgaW4gdGhlIGl0ZXJhdGlvbiBwcm9jZXNzIGluIGF0IGxlYXN0IG9uZSwKKy8vIGFuZCBwb3Nz
aWJseSBhbGwsIG9mIHRoZXNlIHN0YXRlcy4KKy8vIDEuIFJlcHJlc2VudGluZyB0aGUgdGFyZ2V0
IHN1cmZhY2U6IFRoZSBpdGVyYXRvciBpbiB0aGlzIHN0YXRlLCBwb2ludGluZyBhdCBsYXllciBM
LCBpbmRpY2F0ZXMgdGhhdCB0aGUgdGFyZ2V0IFJlbmRlclN1cmZhY2UKKy8vIGlzIG5vdyB0aGUg
c3VyZmFjZSBvd25lZCBieSBMLiBUaGlzIHdpbGwgb2NjdXIgZXhhY3RseSBvbmNlIGZvciBlYWNo
IFJlbmRlclN1cmZhY2UgaW4gdGhlIHRyZWUuCisvLyAyLiBSZXByZXNlbnRpbmcgYSBjb250cmli
dXRpbmcgc3VyZmFjZTogVGhlIGl0ZXJhdG9yIGluIHRoaXMgc3RhdGUsIHBvaW50aW5nIGF0IGxh
eWVyIEwsIHJlZmVycyB0byB0aGUgUmVuZGVyU3VyZmFjZSBvd25lZAorLy8gYnkgTCBhcyBhIGNv
bnRyaWJ1dGluZyBzdXJmYWNlLCB3aXRob3V0IGNoYW5naW5nIHRoZSBjdXJyZW50IHRhcmdldCBS
ZW5kZXJTdXJmYWNlLgorLy8gMy4gUmVwcmVzZW50aW5nIGl0c2VsZjogVGhlIGl0ZXJhdG9yIGlu
IHRoaXMgc3RhdGUsIHBvaW50aW5nIGF0IGxheWVyIEwsIHJlZmVycyB0byB0aGUgbGF5ZXIgaXRz
ZWxmLCBhcyBhIGNoaWxkIG9mIHRoZQorLy8gY3VycmVudCB0YXJnZXQgUmVuZGVyU3VyZmFjZS4K
Ky8vCisvLyBUaGUgQmFja1RvRnJvbnQgaXRlcmF0b3Igd2lsbCByZXR1cm4gYSBsYXllciByZXBy
ZXNlbnRpbmcgdGhlIHRhcmdldCBzdXJmYWNlIGJlZm9yZSByZXR1cm5pbmcgbGF5ZXJzIHJlcHJl
c2VudGluZyB0aGVtc2VsdmVzCisvLyBhcyBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCB0YXJnZXQg
c3VyZmFjZS4gV2hlcmVhcyB0aGUgRnJvbnRUb0JhY2sgb3JkZXJpbmcgd2lsbCBpdGVyYXRlIG92
ZXIgY2hpbGRyZW4gbGF5ZXJzIG9mIGEgc3VyZmFjZQorLy8gYmVmb3JlIHRoZSBsYXllciByZXBy
ZXNlbnRpbmcgdGhlIHN1cmZhY2UgYXMgYSB0YXJnZXQgc3VyZmFjZS4KKy8vCisvLyBUbyB1c2Ug
dGhlIGl0ZXJhdG9yczoKKy8vCisvLyBDcmVhdGUgYSBzdGVwcGluZyBpdGVyYXRvciBhbmQgZW5k
IGl0ZXJhdG9yIGJ5IGNhbGxpbmcgQ0NMYXllckl0ZXJhdG9yOjpiZWdpbigpIGFuZCBDQ0xheWVy
SXRlcmF0b3I6OmVuZCgpIGFuZCBwYXNzaW5nIGluIHRoZQorLy8gbGlzdCBvZiBsYXllcnMgb3du
aW5nIHRhcmdldCBSZW5kZXJTdXJmYWNlcy4gU3RlcCB0aHJvdWdoIHRoZSB0cmVlIGJ5IGluY3Jl
bWVudGluZyB0aGUgc3RlcHBpbmcgaXRlcmF0b3Igd2hpbGUgaXQgaXMgIT0gdG8KKy8vIHRoZSBl
bmQgaXRlcmF0b3IuIEF0IGVhY2ggc3RlcCB0aGUgaXRlcmF0b3Iga25vd3Mgd2hhdCB0aGUgbGF5
ZXIgaXMgcmVwcmVzZW50aW5nLCBhbmQgeW91IGNhbiBxdWVyeSB0aGUgaXRlcmF0b3IgdG8gZGVj
aWRlCisvLyB3aGF0IGFjdGlvbnMgdG8gcGVyZm9ybSB3aXRoIHRoZSBsYXllciBnaXZlbiB3aGF0
IGl0IHJlcHJlc2VudHMuCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gQW4gaXRlcmF0b3IgY2xh
c3MgZm9yIHdhbGtpbmcgb3ZlciBsYXllcnMgaW4gdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJl
ZS4KK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VU
eXBlLCB0eXBlbmFtZSBJdGVyYXRvckFjdGlvblR5cGU+CitjbGFzcyBDQ0xheWVySXRlcmF0b3Ig
eworICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5
cGUsIEl0ZXJhdG9yQWN0aW9uVHlwZT4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworcHVibGljOgor
ICAgIENDTGF5ZXJJdGVyYXRvcigpIHsgfQorCisgICAgc3RhdGljIENDTGF5ZXJJdGVyYXRvclR5
cGUgYmVnaW4oY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpIHsgcmV0dXJuIENDTGF5ZXJJdGVyYXRvclR5cGUocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgdHJ1ZSk7IH0KKyAgICBzdGF0aWMgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQoY29uc3Qg
VmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpIHsgcmV0
dXJuIENDTGF5ZXJJdGVyYXRvclR5cGUocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZmFsc2UpOyB9
CisKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlJiBvcGVyYXRvcisrKCkgeyBBU1NFUlQobV9hY3Rp
b25zKTsgbV9hY3Rpb25zLT5uZXh0KG1fcG9zaXRpb24pOyByZXR1cm4gKnRoaXM7IH0KKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuIG1fcG9zaXRpb24gPT0gb3RoZXIubV9wb3NpdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBDQ0xheWVySXRlcmF0b3JUeXBlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7IH0KKworICAgIExheWVyVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyKCk7IH0KKyAgICBMYXllclR5cGUqIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyKCk7IH0KKworICAg
IGJvb2wgcmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3Bv
c2l0aW9uLmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCk7IH0KKyAg
ICBib29sIHJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1
cm4gIXJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgJiYgbV9wb3NpdGlvbi5jdXJyZW50
TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpOyB9CisgICAgYm9vbCBy
ZXByZXNlbnRzSXRzZWxmKCkgY29uc3QgeyByZXR1cm4gIXJlcHJlc2VudHNUYXJnZXRSZW5kZXJT
dXJmYWNlKCkgJiYgIXJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCk7IH0KKwor
ICAgIExheWVyVHlwZSogdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9wb3NpdGlvbi50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKTsgfQorCitwcml2YXRlOgorICAg
IENDTGF5ZXJJdGVyYXRvcihjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgYm9vbCBzdGFydCkKKyAgICAgICAgOiBtX3Bvc2l0aW9uKHJlbmRl
clN1cmZhY2VMYXllckxpc3QpCisgICAgICAgICwgbV9hY3Rpb25zKGFkb3B0UHRyKG5ldyBJdGVy
YXRvckFjdGlvblR5cGUoKSkpCisgICAgeworICAgICAgICBpZiAoc3RhcnQgJiYgIXJlbmRlclN1
cmZhY2VMYXllckxpc3QtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fYWN0aW9ucy0+YmVnaW4o
bV9wb3NpdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYWN0aW9ucy0+ZW5kKG1f
cG9zaXRpb24pOworICAgIH0KKworICAgIENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlw
ZSwgUmVuZGVyU3VyZmFjZVR5cGU+IG1fcG9zaXRpb247CisgICAgT3duUHRyPEl0ZXJhdG9yQWN0
aW9uVHlwZT4gbV9hY3Rpb25zOworfTsKKworLy8gT3JkZXJpbmdzIGZvciBpdGVyYXRpbmcgb3Zl
ciB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVlLgorc3RydWN0IENDTGF5ZXJJdGVyYXRvckFj
dGlvbnMgeworICAgIC8vIFdhbGtzIGxheWVycyBzb3J0ZWQgYnkgei1vcmRlciBmcm9tIGJhY2sg
dG8gZnJvbnQuCisgICAgY2xhc3MgQmFja1RvRnJvbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+
CisgICAgICAgIHZvaWQgYmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJU
eXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBlbmQoQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNl
VHlwZT4KKyAgICAgICAgdm9pZCBuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlw
ZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBpbnQgbV9o
aWdoZXN0VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgIH07CisKKyAgICAvLyBXYWxrcyBs
YXllcnMgc29ydGVkIGJ5IHotb3JkZXIgZnJvbSBmcm9udCB0byBiYWNrCisgICAgY2xhc3MgRnJv
bnRUb0JhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVy
VHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CisgICAgICAgIHZvaWQgYmVnaW4oQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKwor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZT4KKyAgICAgICAgdm9pZCBlbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJU
eXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBuZXh0
KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7
CisKKyAgICBwcml2YXRlOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0
eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBnb1RvSGlnaGVzdEluU3Vi
dHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBl
PiYpOworICAgIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvclBvc2l0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjFmNjNj
NDVmNzQyYzAzYzYwZGVmOWIyMTczODQwYWZiODZjMzI2MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbl9oCisjZGVmaW5lIENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uX2gK
KworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorCisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBOb24tdGVtcGxhdGVkIGNvbnN0YW50cworc3RydWN0IENDTGF5ZXJJdGVyYXRvclBv
c2l0aW9uVmFsdWUgeworICAgIHN0YXRpYyBjb25zdCBpbnQgSW52YWxpZFRhcmdldFJlbmRlclN1
cmZhY2VMYXllckluZGV4ID0gLTE7CisgICAgLy8gVGhpcyBtdXN0IGJlIC0xIHNpbmNlIHRoZSBp
dGVyYXRvciBhY3Rpb24gY29kZSBhc3N1bWVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gYmUKKyAgICAv
LyByZWFjaGVkIGJ5IHN1YnRyYWN0aW5nIG9uZSBmcm9tIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmly
c3QgbGF5ZXIgaW4gdGhlIGN1cnJlbnQKKyAgICAvLyB0YXJnZXQgc3VyZmFjZSdzIGNoaWxkIGxh
eWVyIGxpc3QsIHdoaWNoIGlzIDAuCisgICAgc3RhdGljIGNvbnN0IGludCBMYXllckluZGV4UmVw
cmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZSA9IC0xOworfTsKKworLy8gQSBzdHJ1Y3QgdG8g
aG9sZCB0aGUgaXRlcmF0b3IncyBjdXJyZW50IHBvc2l0aW9uLCB3aGljaCBpcyBwYXNzZWQgdG8g
dGhlIHZhcmlvdXMgQ0NMYXllckl0ZXJhdG9yQWN0aW9uIGZ1bmN0aW9ucywgZm9yIHRoZW0gdG8K
Ky8vIHJlYWQgYW5kIHVwZGF0ZS4gVGhpcyBzdHJ1Y3QgZXhpc3RzIHNvIHRoZSB0ZW1wbGF0ZWQg
YWN0aW9uIGZ1bmN0aW9ucyBkb24ndCBuZWVkIHRvIGFjY2VzcyB0aGUgQ0NMYXllckl0ZXJhdG9y
IGNsYXNzLgorLy8KKy8vIFRoZXJlIGlzIGEgMToxIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFuIGlu
c3RhbmNlIG9mIHRoZSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbiBjbGFzcyBhbmQgYSBDQ0xheWVy
SXRlcmF0b3JBY3Rpb25zOjpGb28gY2xhc3MsCisvLyBzbyBhbiBpdGVyYXRvciBhY3Rpb24gY2xh
c3MgY2FuIGhvbGQgZXh0cmEgcG9zaXRpb24gZGF0YSwgaWYgcmVxdWlyZWQsIGluIGl0cyBvd24g
Y2xhc3MgaW5zdGFuY2UuCisvLworLy8gVGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIGl0ZXJh
dG9yIGlzIGhlbGQgaW4gdHdvIGludGVnZXIgdmFyaWFibGVzLgorLy8gLSBUaGUgdGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVySW5kZXggaXMgYSBwb3NpdGlvbiBpbiB0aGUgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC4gVGhpcyBwb2ludHMgdG8gYSBsYXllciB3aGljaCBvd25zIHRoZSBjdXJyZW50Cisv
LyB0YXJnZXQgc3VyZmFjZS4gVGhpcyBpcyBhIHZhbHVlIGZyb20gMCB0byBuLTEgKG4gPSBzaXpl
IG9mIHJlbmRlclN1cmZhY2VMYXllckxpc3QgPSBudW1iZXIgb2Ygc3VyZmFjZXMpLiBBIHZhbHVl
IG91dHNpZGUgb2YKKy8vIHRoaXMgcmFuZ2UgKGZvciBleGFtcGxlLCBDQ0xheWVySXRlcmF0b3JQ
b3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgpIGlzIHVz
ZWQgdG8gaW5kaWNhdGUgYSBwb3NpdGlvbgorLy8gb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSB0
cmVlLgorLy8gLSBUaGUgY3VycmVudExheWVySW5kZXggaXMgYSBwb3NpdGlvbiBpbiB0aGUgbGlz
dCBvZiBsYXllcnMgdGhhdCBhcmUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZh
Y2UuIFdoZW4gcG9pbnRpbmcgdG8KKy8vIG9uZSBvZiB0aGVzZSBsYXllcnMsIHRoaXMgaXMgYSB2
YWx1ZSBmcm9tIDAgdG8gbi0xIChuID0gbnVtYmVyIG9mIGNoaWxkcmVuKS4gU2luY2UgdGhlIGl0
ZXJhdG9yIG11c3QgYWxzbyBzdG9wIGF0IHRoZSBsYXllcnMKKy8vIHJlcHJlc2VudGluZyB0aGUg
dGFyZ2V0IHN1cmZhY2UsIHRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIHRoZSBjdXJyZW50TGF5ZXJJ
bmRleCB0byBhIHZhbHVlIG9mCisvLyBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpMYXll
clJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2UuCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXll
clR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorc3RydWN0IENDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uIHsKKyAgICBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbigpIDogcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCgwKSB7IH0KKyAgICBleHBsaWNpdCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbihj
b25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkg
OiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KHJlbmRlclN1cmZhY2VMYXllckxpc3QpIHsgfQorCisg
ICAgaW5saW5lIExheWVyVHlwZSogY3VycmVudExheWVyKCkgY29uc3QgeyByZXR1cm4gY3VycmVu
dExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSA/IHRhcmdldFJlbmRlclN1cmZh
Y2VMYXllcigpIDogdGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKClbY3VycmVudExheWVySW5k
ZXhdLmdldCgpOyB9CisKKyAgICBpbmxpbmUgYm9vbCBjdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29u
dHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJUeXBlPihjdXJyZW50
TGF5ZXIoKSwgdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCktPmlkKCkpOyB9CisgICAgaW5saW5l
IGJvb2wgY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7
IHJldHVybiBjdXJyZW50TGF5ZXJJbmRleCA9PSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVl
OjpMYXllckluZGV4UmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQorCisgICAgaW5s
aW5lIExheWVyVHlwZSogdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgY29uc3QgeyByZXR1cm4g
KCpyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KVt0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleF0u
Z2V0KCk7IH0KKyAgICBpbmxpbmUgUmVuZGVyU3VyZmFjZVR5cGUqIHRhcmdldFJlbmRlclN1cmZh
Y2UoKSBjb25zdCB7IHJldHVybiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKS0+cmVuZGVyU3Vy
ZmFjZSgpOyB9CisgICAgaW5saW5lIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+JiB0
YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiB0YXJnZXRSZW5kZXJT
dXJmYWNlKCktPmxheWVyTGlzdCgpOyB9CisKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9PSBvdGhlci50YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXJJbmRleAorICAgICAgICAgICAgJiYgY3VycmVudExheWVySW5kZXggPT0g
b3RoZXIuY3VycmVudExheWVySW5kZXg7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgaW50IHRhcmdldFJl
bmRlclN1cmZhY2VMYXllckluZGV4OworICAgIGludCBjdXJyZW50TGF5ZXJJbmRleDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAppbmRleCBjZDc1NmQ2MDBkYzBmMGUzZjMwMWIzMmQ3ZThlODRmYzAwYWIwNzYxLi5m
MDllNjI4OGNkNTBmZjUyNjc2YTUzNTMxYmEwMzExYzc1MjU5MzA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJMYXllclJlbmRl
cmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5
bmNocm9uaXplci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCkBAIC00MzQsNTcg
KzQzNSw0MSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJl
bmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyUwogCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgUGFpbnRUeXBlIHBhaW50VHlwZSkKIHsKLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXgg
PSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsg
LS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxh
eWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAg
ICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5
ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwotICAg
ICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7Ci0KLSAgICAgICAgcGFp
bnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyLCBwYWlu
dFR5cGUpOwotCi0gICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3Vy
ZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7
IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAg
ICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwot
Ci0gICAgICAgICAgICAvLyBMYXllcnMgdGhhdCBzdGFydCBhIG5ldyByZW5kZXIgc3VyZmFjZSB3
aWxsIGJlIHBhaW50ZWQgd2hlbiB0aGUgcmVuZGVyCi0gICAgICAgICAgICAvLyBzdXJmYWNlJ3Mg
bGlzdCBpcyBwcm9jZXNzZWQuCi0gICAgICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxMYXllckNocm9taXVtPihsYXllciwg
cmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKTsKLQotICAgICAg
ICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5ZXIsIHBhaW50VHlwZSk7CisgICAgLy8gVXNl
IEZyb250VG9CYWNrIHRvIGFsbG93IGZvciB0ZXN0aW5nIG9jY2x1c2lvbiBhbmQgcGVyZm9ybWlu
ZyBjdWxsaW5nIGR1cmluZyB0aGUgdHJlZSB3YWxrLgorICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJh
dG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisKKyAgICBDQ0xheWVy
SXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CisgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0
ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsK
KyAgICAgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKCppdCwgcGFp
bnRUeXBlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpdC0+b3BhY2l0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQt
PmJvdW5kcygpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eSgq
aXQsIHBhaW50VHlwZSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVI
b3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQogewotICAgIGZvciAoaW50IHN1cmZhY2VJbmRl
eCA9IG1fdXBkYXRlTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFj
ZUluZGV4KSB7Ci0gICAgICAgIExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IG1f
dXBkYXRlTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2Uo
KTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwotICAgICAgICBBU1NFUlQocmVuZGVy
U3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7Ci0KLSAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXll
ci0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXll
cigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwotCi0gICAg
ICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAg
ICByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
cmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCi0gICAgICAg
ICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkt
PnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3Vy
ZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7
IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAg
ICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwot
Ci0gICAgICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29u
dHJpYnV0ZXNUb1RhcmdldDxMYXllckNocm9taXVtPihsYXllciwgcmVuZGVyU3VyZmFjZUxheWVy
LT5pZCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgbGF5ZXIt
PnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7Ci0gICAgICAgIH0K
KyAgICAvLyBVc2UgQmFja1RvRnJvbnQgc2luY2UgaXQncyBjaGVhcCBhbmQgdGhpcyBpc24ndCBv
cmRlci1kZXBlbmRlbnQuCisgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1
bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9G
cm9udD4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5k
ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZtX3VwZGF0ZUxpc3QpOworICAgIGZvciAoQ0NM
YXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZtX3VwZGF0
ZUxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJn
ZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFj
ZSgpLT5kcmF3T3BhY2l0eSgpKTsKKyAgICAgICAgICAgIGlmIChpdC0+bWFza0xheWVyKCkpCisg
ICAgICAgICAgICAgICAgaXQtPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KGNvbnRleHQsIHVwZGF0ZXIpOworCisgICAgICAgICAgICBpZiAoaXQtPnJlcGxpY2FMYXllcigp
KSB7CisgICAgICAgICAgICAgICAgaXQtPnJlcGxpY2FMYXllcigpLT51cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOworICAgICAgICAgICAgICAgIGlmIChpdC0+cmVw
bGljYUxheWVyKCktPm1hc2tMYXllcigpKQorICAgICAgICAgICAgICAgICAgICBpdC0+cmVwbGlj
YUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQs
IHVwZGF0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGl0LnJlcHJlc2Vu
dHNJdHNlbGYoKSkKKyAgICAgICAgICAgIGl0LT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNv
bnRleHQsIHVwZGF0ZXIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAKaW5kZXggNTY1MDliY2VjM2M2MWUyZGZlMTY2NGFiNDE2NWY0MjkzNzM5
M2UxYi4uYjEzNzcxNDUzOGI4OTllYjUxNTViZGQ3NDBjZDI5ZGFlNDc3ZDVkZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0ND
TGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRl
ICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKIApAQCAtNDcxLDE1ICs0NzIsMTQgQEAgc3RhdGljIGJv
b2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBl
KiBsYXllciwgTGF5ZXIKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVu
ZGVyU3VyZmFjZVR5cGU+CiBzdGF0aWMgdm9pZCB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJs
ZUxheWVyUmVjdHMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpCiB7Ci0gICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4
KSB7Ci0gICAgICAgIExheWVyVHlwZSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAgICBSZW5kZXJTdXJmYWNlVHlw
ZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwot
Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+JiBsYXllckxpc3QgPSByZW5kZXJT
dXJmYWNlLT5sYXllckxpc3QoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0g
MDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgewotICAgICAg
ICAgICAgTGF5ZXJUeXBlKiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKLSAg
ICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdDxMYXllclR5cGU+KGxheWVyKTsKLSAgICAgICAg
ICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOworICAgIC8v
IFVzZSBCYWNrVG9Gcm9udCBzaW5jZSBpdCdzIGNoZWFwIGFuZCB0aGlzIGlzbid0IG9yZGVyLWRl
cGVuZGVudC4KKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1
cmZhY2VUeXBlLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0
ZXJhdG9yVHlwZTsKKworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJh
dG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBmb3IgKENDTGF5ZXJJ
dGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoIWl0LnJlcHJlc2Vu
dHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxh
eWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVj
dDxMYXllclR5cGU+KCppdCk7CisgICAgICAgICAgICBpdC0+c2V0VmlzaWJsZUxheWVyUmVjdCh2
aXNpYmxlTGF5ZXJSZWN0KTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmgKaW5kZXggYThlODdhOWY5YmVhNWQ5YmI0ZTgxOGRmNTBkYzA4ZDllNzMyNmY4Yy4u
YWI4Mzg2ZDVkYTIzZmE3MTAzMDU3YWYxMTQwN2I0OWE0YTViNTYzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlLmgKQEAgLTEyOSw2ICsxMjksMTEgQEAgcHJpdmF0ZToKIAogICAgIC8vIFN0
b3JlZCBpbiB0aGUgInN1cmZhY2Ugc3BhY2UiIHdoZXJlIHRoaXMgZGFtYWdlIGNhbiBiZSB1c2Vk
IGZvciBzY2lzc29yaW5nLgogICAgIEZsb2F0UmVjdCBtX2RhbWFnZVJlY3Q7CisKKyAgICAvLyBG
b3IgQ0NMYXllckl0ZXJhdG9yQWN0aW9ucworICAgIGludCBtX3RhcmdldFJlbmRlclN1cmZhY2VM
YXllckluZGV4SGlzdG9yeTsKKyAgICBpbnQgbV9jdXJyZW50TGF5ZXJJbmRleEhpc3Rvcnk7Cisg
ICAgZnJpZW5kIHN0cnVjdCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZTY3NGJiNmI4NWIwODVjYWJhY2M5ZDlkNjQ5OTkz
ZDVkNjJmZTVjZi4uYWQ0MjQxMmNiNTJmZDJmNThiZWM5YTRjZTgzZjRlMjg4MTk2Y2I4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02NCw2ICs2NCw3IEBACiAgICAgICAgICAg
ICAndGVzdHMvQ0NEZWxheUJhc2VkVGltZVNvdXJjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NMYXllckltcGxUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NMYXllckl0ZXJhdG9y
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJRdWFkVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJTb3J0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQy
NjhhZDYzNjhkMjBmYWRlMTNmYjc0ZmNkZmY3ZjA1N2U3NzBkMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKQEAg
LTAsMCArMSwyNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorI2luY2x1ZGUgPGdtb2Nr
L2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Cit1c2luZyA6OnRlc3Rpbmc6Ok1vY2s7Cit1c2luZyA6OnRlc3Rpbmc6Ol87Cit1c2lu
ZyA6OnRlc3Rpbmc6OkF0TGVhc3Q7Cit1c2luZyA6OnRlc3Rpbmc6OkFueU51bWJlcjsKKworbmFt
ZXNwYWNlIHsKKworY2xhc3MgVGVzdExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1
bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXN0TGF5ZXJDaHJvbWl1bSgpKTsgfQorCisg
ICAgaW50IG1fY291bnRSZXByZXNlbnRpbmdUYXJnZXRTdXJmYWNlOworICAgIGludCBtX2NvdW50
UmVwcmVzZW50aW5nQ29udHJpYnV0aW5nU3VyZmFjZTsKKyAgICBpbnQgbV9jb3VudFJlcHJlc2Vu
dGluZ0l0c2VsZjsKKworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJl
dHVybiBtX2RyYXdzQ29udGVudDsgfQorICAgIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wgZHJh
d3NDb250ZW50KSB7IG1fZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50OyB9CisKK3ByaXZhdGU6
CisgICAgVGVzdExheWVyQ2hyb21pdW0oKQorICAgICAgICA6IExheWVyQ2hyb21pdW0oMCkKKyAg
ICAgICAgLCBtX2RyYXdzQ29udGVudCh0cnVlKQorICAgIHsKKyAgICAgICAgc2V0Qm91bmRzKElu
dFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgc2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0
KDAsIDAsIDEwMCwgMTAwKSk7CisgICAgfQorCisgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKK307
CisKKyNkZWZpbmUgRVhQRUNUX0NPVU5UKGxheWVyLCB0YXJnZXQsIGNvbnRyaWIsIGl0c2VsZikg
XAorICAgIEVYUEVDVF9FUSh0YXJnZXQsIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nVGFyZ2V0
U3VyZmFjZSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRVEoY29udHJpYiwgbGF5ZXItPm1fY291
bnRSZXByZXNlbnRpbmdDb250cmlidXRpbmdTdXJmYWNlKTsgICBcCisgICAgRVhQRUNUX0VRKGl0
c2VsZiwgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdJdHNlbGYpOworCit0eXBlZGVmIENDTGF5
ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIENDTGF5ZXJJ
dGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBGcm9udFRvQmFjazsKK3R5cGVkZWYgQ0NMYXll
ckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0
ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ+IEJhY2tUb0Zyb250OworCit2b2lkIHJlc2V0Q291
bnRzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHN1cmZhY2VJbmRleCA9IDA7IHN1cmZhY2VJbmRleCA8
IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpOyArK3N1cmZhY2VJbmRleCkgeworICAgICAg
ICBUZXN0TGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gc3RhdGljX2Nhc3Q8VGVz
dExheWVyQ2hyb21pdW0qPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0
KCkpOworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5k
ZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKworICAgICAgICByZW5kZXJTdXJmYWNl
TGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdUYXJnZXRTdXJmYWNlID0gLTE7CisgICAgICAgIHJl
bmRlclN1cmZhY2VMYXllci0+bV9jb3VudFJlcHJlc2VudGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2Ug
PSAtMTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nSXRz
ZWxmID0gLTE7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJ
bmRleCA8IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLnNpemUoKTsgKytsYXllckluZGV4KSB7
CisgICAgICAgICAgICBUZXN0TGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBzdGF0aWNfY2FzdDxUZXN0
TGF5ZXJDaHJvbWl1bSo+KHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpW2xheWVySW5kZXhdLmdl
dCgpKTsKKworICAgICAgICAgICAgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdUYXJnZXRTdXJm
YWNlID0gLTE7CisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ0NvbnRyaWJ1
dGluZ1N1cmZhY2UgPSAtMTsKKyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5n
SXRzZWxmID0gLTE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgaXRlcmF0ZUZyb250VG9C
YWNrKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCkKK3sKKyAgICByZXNldENvdW50cygqcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgaW50
IGNvdW50ID0gMDsKKyAgICBmb3IgKEZyb250VG9CYWNrIGl0ID0gRnJvbnRUb0JhY2s6OmJlZ2lu
KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBGcm9udFRvQmFjazo6ZW5kKHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOyArK2l0LCArK2NvdW50KSB7CisgICAgICAgIFRlc3RMYXllckNocm9t
aXVtKiBsYXllciA9IHN0YXRpY19jYXN0PFRlc3RMYXllckNocm9taXVtKj4oKml0KTsKKyAgICAg
ICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBs
YXllci0+bV9jb3VudFJlcHJlc2VudGluZ1RhcmdldFN1cmZhY2UgPSBjb3VudDsKKyAgICAgICAg
aWYgKGl0LnJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAg
ICBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2UgPSBjb3VudDsK
KyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkKKyAgICAgICAgICAgIGxheWVyLT5t
X2NvdW50UmVwcmVzZW50aW5nSXRzZWxmID0gY291bnQ7CisgICAgfQorfQorCit2b2lkIGl0ZXJh
dGVCYWNrVG9Gcm9udChWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4qIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpCit7CisgICAgcmVzZXRDb3VudHMoKnJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChCYWNrVG9Gcm9udCBpdCA9IEJhY2tUb0Zy
b250OjpiZWdpbihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgaXQgIT0gQmFja1RvRnJvbnQ6OmVu
ZChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgKytpdCwgKytjb3VudCkgeworICAgICAgICBUZXN0
TGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBzdGF0aWNfY2FzdDxUZXN0TGF5ZXJDaHJvbWl1bSo+KCpp
dCk7CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKQorICAg
ICAgICAgICAgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdUYXJnZXRTdXJmYWNlID0gY291bnQ7
CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpKQor
ICAgICAgICAgICAgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdDb250cmlidXRpbmdTdXJmYWNl
ID0gY291bnQ7CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkpCisgICAgICAgICAg
ICBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ0l0c2VsZiA9IGNvdW50OworICAgIH0KK30KKwor
VEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBzaW1wbGVUcmVlKQoreworICAgIFJlZlB0cjxUZXN0
TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gZmlyc3QgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBzZWNvbmQgPSBUZXN0TGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiB0aGly
ZCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hy
b21pdW0+IGZvdXJ0aCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIHJvb3RM
YXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworCisgICAgcm9vdExheWVyLT5hZGRDaGlsZChm
aXJzdCk7CisgICAgcm9vdExheWVyLT5hZGRDaGlsZChzZWNvbmQpOworICAgIHJvb3RMYXllci0+
YWRkQ2hpbGQodGhpcmQpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQoZm91cnRoKTsKKworICAg
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owor
ICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBsYXllckxpc3Q7CisgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0
KCksIHJvb3RMYXllci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVy
TGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyNTYpOworCisgICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7Cisg
ICAgRVhQRUNUX0NPVU5UKGZpcnN0LCAtMSwgLTEsIDIpOworICAgIEVYUEVDVF9DT1VOVChzZWNv
bmQsIC0xLCAtMSwgMyk7CisgICAgRVhQRUNUX0NPVU5UKHRoaXJkLCAtMSwgLTEsIDQpOworICAg
IEVYUEVDVF9DT1VOVChmb3VydGgsIC0xLCAtMSwgNSk7CisKKyAgICBpdGVyYXRlRnJvbnRUb0Jh
Y2soJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIs
IDUsIC0xLCA0KTsKKyAgICBFWFBFQ1RfQ09VTlQoZmlyc3QsIC0xLCAtMSwgMyk7CisgICAgRVhQ
RUNUX0NPVU5UKHNlY29uZCwgLTEsIC0xLCAyKTsKKyAgICBFWFBFQ1RfQ09VTlQodGhpcmQsIC0x
LCAtMSwgMSk7CisgICAgRVhQRUNUX0NPVU5UKGZvdXJ0aCwgLTEsIC0xLCAwKTsKKworfQorCitU
RVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIGNvbXBsZXhUcmVlKQoreworICAgIFJlZlB0cjxUZXN0
TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MiA9IFRlc3RMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3Qz
ID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJv
bWl1bT4gcm9vdDIxID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxU
ZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIyID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIzID0gVGVzdExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIyMSA9IFRlc3RM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJv
b3QyMzEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICByb290TGF5ZXItPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDEpOwor
ICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDIpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQo
cm9vdDMpOworICAgIHJvb3QyLT5hZGRDaGlsZChyb290MjEpOworICAgIHJvb3QyLT5hZGRDaGls
ZChyb290MjIpOworICAgIHJvb3QyLT5hZGRDaGlsZChyb290MjMpOworICAgIHJvb3QyMi0+YWRk
Q2hpbGQocm9vdDIyMSk7CisgICAgcm9vdDIzLT5hZGRDaGlsZChyb290MjMxKTsKKworICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAg
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBsYXllckxpc3Q7CisgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0KCks
IHJvb3RMYXllci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAyNTYpOworCisgICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7CisgICAg
RVhQRUNUX0NPVU5UKHJvb3QxLCAtMSwgLTEsIDIpOworICAgIEVYUEVDVF9DT1VOVChyb290Miwg
LTEsIC0xLCAzKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIxLCAtMSwgLTEsIDQpOworICAgIEVY
UEVDVF9DT1VOVChyb290MjIsIC0xLCAtMSwgNSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMjEs
IC0xLCAtMSwgNik7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMywgLTEsIC0xLCA3KTsKKyAgICBF
WFBFQ1RfQ09VTlQocm9vdDIzMSwgLTEsIC0xLCA4KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDMs
IC0xLCAtMSwgOSk7CisKKyAgICBpdGVyYXRlRnJvbnRUb0JhY2soJnJlbmRlclN1cmZhY2VMYXll
ckxpc3QpOworICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDksIC0xLCA4KTsKKyAgICBFWFBF
Q1RfQ09VTlQocm9vdDEsIC0xLCAtMSwgNyk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyLCAtMSwg
LTEsIDYpOworICAgIEVYUEVDVF9DT1VOVChyb290MjEsIC0xLCAtMSwgNSk7CisgICAgRVhQRUNU
X0NPVU5UKHJvb3QyMiwgLTEsIC0xLCA0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyMSwgLTEs
IC0xLCAzKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIzLCAtMSwgLTEsIDIpOworICAgIEVYUEVD
VF9DT1VOVChyb290MjMxLCAtMSwgLTEsIDEpOworICAgIEVYUEVDVF9DT1VOVChyb290MywgLTEs
IC0xLCAwKTsKKworfQorCitURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIGNvbXBsZXhUcmVlTXVs
dGlTdXJmYWNlKQoreworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0g
VGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1
bT4gcm9vdDEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RM
YXllckNocm9taXVtPiByb290MiA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QzID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIxID0gVGVzdExheWVyQ2hy
b21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIyID0g
VGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1
bT4gcm9vdDIzID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0
TGF5ZXJDaHJvbWl1bT4gcm9vdDIyMSA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QyMzEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisKKyAgICByb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAg
IHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDEpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9v
dDIpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDMpOworICAgIHJvb3QyLT5zZXREcmF3
c0NvbnRlbnQoZmFsc2UpOworICAgIHJvb3QyLT5zZXRPcGFjaXR5KDAuNSk7IC8vIEZvcmNlIHRo
ZSBsYXllciB0byBvd24gYSBuZXcgc3VyZmFjZS4KKyAgICByb290Mi0+YWRkQ2hpbGQocm9vdDIx
KTsKKyAgICByb290Mi0+YWRkQ2hpbGQocm9vdDIyKTsKKyAgICByb290Mi0+YWRkQ2hpbGQocm9v
dDIzKTsKKyAgICByb290MjItPnNldE9wYWNpdHkoMC41KTsKKyAgICByb290MjItPmFkZENoaWxk
KHJvb3QyMjEpOworICAgIHJvb3QyMy0+c2V0T3BhY2l0eSgwLjUpOworICAgIHJvb3QyMy0+YWRk
Q2hpbGQocm9vdDIzMSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
bGF5ZXJMaXN0OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllcik7
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKworICAgIGl0ZXJhdGVC
YWNrVG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0NPVU5UKHJv
b3RMYXllciwgMCwgLTEsIDEpOworICAgIEVYUEVDVF9DT1VOVChyb290MSwgLTEsIC0xLCAyKTsK
KyAgICBFWFBFQ1RfQ09VTlQocm9vdDIsIDQsIDMsIC0xKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9v
dDIxLCAtMSwgLTEsIDUpOworICAgIEVYUEVDVF9DT1VOVChyb290MjIsIDcsIDYsIDgpOworICAg
IEVYUEVDVF9DT1VOVChyb290MjIxLCAtMSwgLTEsIDkpOworICAgIEVYUEVDVF9DT1VOVChyb290
MjMsIDExLCAxMCwgMTIpOworICAgIEVYUEVDVF9DT1VOVChyb290MjMxLCAtMSwgLTEsIDEzKTsK
KyAgICBFWFBFQ1RfQ09VTlQocm9vdDMsIC0xLCAtMSwgMTQpOworCisgICAgaXRlcmF0ZUZyb250
VG9CYWNrKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdExh
eWVyLCAxNCwgLTEsIDEzKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDEsIC0xLCAtMSwgMTIpOwor
ICAgIEVYUEVDVF9DT1VOVChyb290MiwgMTAsIDExLCAtMSk7CisgICAgRVhQRUNUX0NPVU5UKHJv
b3QyMSwgLTEsIC0xLCA5KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyLCA3LCA4LCA2KTsKKyAg
ICBFWFBFQ1RfQ09VTlQocm9vdDIyMSwgLTEsIC0xLCA1KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9v
dDIzLCAzLCA0LCAyKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIzMSwgLTEsIC0xLCAxKTsKKyAg
ICBFWFBFQ1RfQ09VTlQocm9vdDMsIC0xLCAtMSwgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121732</attachid>
            <date>2012-01-09 15:30:08 -0800</date>
            <delta_ts>2012-01-10 12:57:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74203-20120109183007.patch</filename>
            <type>text/plain</type>
            <size>49987</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJiOTFlMjdlMTQwNTg4
ZTEzYjZmZmEwZDY2YTg4Y2RmZDZlMWZkNi4uZmNkNWYwYmRlNGExYTE1N2VmMmYwZjg1MGVmNTU1
NDVmOGYxMzM3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTAxLTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdW5pdCB0ZXN0czogQ0NM
YXllckl0ZXJhdG9yVGVzdC5jcHAKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tU
b0Zyb250OjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpCYWNrVG9Gcm9udDo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkJhY2tUb0Zyb250OjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdElu
U3VidHJlZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpD
Q0xheWVySXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpiZWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OmVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6
Om9wZXJhdG9yLT4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRv
ciopOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpyZXByZXNlbnRzVGFyZ2V0
UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OnJlcHJl
c2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvcjo6cmVwcmVzZW50c0l0c2VsZik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SXRlcmF0b3I6OnRhcmdldFJlbmRlclN1cmZhY2VMYXllcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24uaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6Q0NMYXllckl0ZXJhdG9y
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OmN1
cnJlbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6
Y3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OmN1cnJlbnRMYXllclJlcHJlc2Vu
dHNUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uOjp0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OnRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OnRhcmdldFJlbmRlclN1cmZhY2VDaGls
ZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6b3BlcmF0
b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXll
ckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndhbGtMYXll
cnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisKIDIwMTItMDEtMDQgIEFkYW0g
Um9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBvbmUgYmlnIHByaW50ZiBj
b21tYW5kIGluc3RlYWQgb2YgbWFueSBjaGFpbmVkIGVjaG8gY29tbWFuZHMgdG8gZ2VuZXJhdGUg
aWRsX2ZpbGVzLnRtcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA2ZWQzMDk3MTA4OTQ0
NWIxZGUyOThiZWU1MDc5Zjg4MjQ4ZWI2MzU3Li5kYTEzMzE5YTdhYjc3NTJkZWJiZTk0MTcyMThi
YjAxOGQ5YzZkMmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDEyLTAxLTA5ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFtjaHJvbWl1bV0gQ3JlYXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5
ZXIgdHJlZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzQyMDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwOiBB
ZGRlZC4KKwogMjAxMi0wMS0wNCAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW0Nocm9taXVtXSBSZS11c2UgVGVzdFNoZWxsTGludXguY3BwIGZvciBBbmRy
b2lkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggODMwNWZjZWQ4ZWFmNjMwOWY3ZTZiYzliZjc2MWIwMjFh
YzA0NDg4NS4uZDZiZDZkODkxNTc5YWUwZThjNmYxNDFiMTNhMjQyZmI0Zjc5OGY1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMzYwOSw2ICszNjA5LDkgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRv
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SXRlcmF0b3JQb3NpdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyUXVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmgKaW5kZXggOTNlOGQ4NmM2NzE3MWMyNzdlYzE3NWM2MTlkYmU4ODBiNzJmNDE4
Yi4uNGUxODIyYjMxOGM1ZTFkMjU3YTkwOGU0MmE0ZGMyODg0NmI1YjJhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTk2LDYgKzk2LDExIEBAIHByaXZhdGU6CiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9vcmlnaW5UcmFuc2Zvcm07CiAgICAgSW50UmVjdCBtX2Ns
aXBSZWN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX2xheWVyTGlzdDsK
KworICAgIC8vIEZvciBDQ0xheWVySXRlcmF0b3JBY3Rpb25zCisgICAgaW50IG1fdGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5OworICAgIGludCBtX2N1cnJlbnRMYXllckluZGV4
SGlzdG9yeTsKKyAgICBmcmllbmQgc3RydWN0IENDTGF5ZXJJdGVyYXRvckFjdGlvbnM7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzY3ZmYwZTc2
NmM5NjM0MDYzNTdlZGVmMjliYzZkNWE5MDg5MmY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNw
cApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NMYXll
ckl0ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVu
ZGVyU3VyZmFjZUNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNs
dWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK3Zv
aWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2luKENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit7CisgICAg
cG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gMDsKKyAgICBwb3MuY3VycmVudExh
eWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpMYXllckluZGV4UmVwcmVz
ZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsKKworICAgIG1faGlnaGVzdFRhcmdldFJlbmRlclN1
cmZhY2VMYXllciA9IDA7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVu
YW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNr
VG9Gcm9udDo6ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3Vy
ZmFjZVR5cGU+JiBwb3MpCit7CisgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4
ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6SW52YWxpZFRhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4OworICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IDA7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9p
ZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6bmV4dChDQ0xheWVySXRlcmF0
b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQoreworICAgIC8v
IElmIHRoZSBjdXJyZW50IGxheWVyIGhhcyBhIFJTLCBtb3ZlIHRvIGl0cyBsYXllciBsaXN0LiBP
dGhlcndpc2UsIHZpc2l0IHRoZSBuZXh0IGxheWVyIGluIHRoZSBjdXJyZW50IFJTIGxheWVyIGxp
c3QuCisgICAgaWYgKHBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVy
U3VyZmFjZSgpKSB7CisgICAgICAgIC8vIFNhdmUgb3VyIHBvc2l0aW9uIGluIHRoZSBjaGlsZExh
eWVyIGxpc3QgZm9yIHRoZSBSZW5kZXJTdXJmYWNlLCB0aGVuIGp1bXAgdG8gdGhlIG5leHQgUmVu
ZGVyU3VyZmFjZS4gU2F2ZSB3aGVyZSB3ZQorICAgICAgICAvLyBjYW1lIGZyb20gaW4gdGhlIG5l
eHQgUmVuZGVyU3VyZmFjZSBzbyB3ZSBjYW4gZ2V0IGJhY2sgdG8gaXQuCisgICAgICAgIHBvcy50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5kZXhIaXN0b3J5ID0gcG9zLmN1
cnJlbnRMYXllckluZGV4OworICAgICAgICBpbnQgcHJldmlvdXNUYXJnZXRSZW5kZXJTdXJmYWNl
TGF5ZXIgPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisKKyAgICAgICAgcG9z
LnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gKyttX2hpZ2hlc3RUYXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXI7CisgICAgICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uVmFsdWU6OkxheWVySW5kZXhSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJm
YWNlOworCisgICAgICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVySW5kZXhIaXN0b3J5ID0gcHJldmlvdXNUYXJnZXRSZW5kZXJTdXJmYWNlTGF5
ZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKytwb3MuY3VycmVudExheWVySW5kZXg7CisKKyAg
ICAgICAgaW50IHRhcmdldFJlbmRlclN1cmZhY2VOdW1DaGlsZHJlbiA9IHBvcy50YXJnZXRSZW5k
ZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCk7CisgICAgICAgIHdoaWxlIChwb3MuY3VycmVudExh
eWVySW5kZXggPT0gdGFyZ2V0UmVuZGVyU3VyZmFjZU51bUNoaWxkcmVuKSB7CisgICAgICAgICAg
ICAvLyBKdW1wIGJhY2sgdG8gdGhlIHByZXZpb3VzIFJlbmRlclN1cmZhY2UsIGFuZCBnZXQgYmFj
ayB0aGUgcG9zaXRpb24gd2hlcmUgd2Ugd2VyZSBpbiB0aGF0IGxpc3QsIGFuZCBtb3ZlIHRvIHRo
ZSBuZXh0IHBvc2l0aW9uIHRoZXJlLgorICAgICAgICAgICAgaWYgKCFwb3MudGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVySW5kZXgpIHsKKyAgICAgICAgICAgICAgICAvLyBFbmQgb2YgdGhlIGxpc3QK
KyAgICAgICAgICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
SW5kZXg7CisgICAgICAgICAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gMDsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwb3MudGFyZ2V0
UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX3Rh
cmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeTsKKyAgICAgICAgICAgIHBvcy5jdXJy
ZW50TGF5ZXJJbmRleCA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVy
SW5kZXhIaXN0b3J5ICsgMTsKKworICAgICAgICAgICAgdGFyZ2V0UmVuZGVyU3VyZmFjZU51bUNo
aWxkcmVuID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbigpLnNpemUoKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUg
UmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9C
YWNrOjpiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlPiYgcG9zKQoreworICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9
IDA7CisgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2VD
aGlsZHJlbigpLnNpemUoKSAtIDE7CisgICAgZ29Ub0hpZ2hlc3RJblN1YnRyZWUocG9zKTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3sK
KyAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JQ
b3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisgICAg
cG9zLmN1cnJlbnRMYXllckluZGV4ID0gMDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVy
VHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlw
ZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit7CisgICAgLy8gTW92ZXMgdG8gdGhlIHByZXZp
b3VzIGxheWVyIGluIHRoZSBjdXJyZW50IFJTIGxheWVyIGxpc3QuIFRoZW4gd2UgY2hlY2sgaWYg
dGhlCisgICAgLy8gbmV3IGN1cnJlbnQgbGF5ZXIgaGFzIGl0cyBvd24gUlMsIGluIHdoaWNoIGNh
c2UgdGhlcmUgYXJlIHRoaW5ncyBpbiB0aGF0IFJTIGxheWVyIGxpc3QgdGhhdCBhcmUgaGlnaGVy
LCBzbworICAgIC8vIHdlIGZpbmQgdGhlIGhpZ2hlc3QgbGF5ZXIgaW4gdGhhdCBzdWJ0cmVlLgor
ICAgIC8vIElmIHdlIG1vdmUgYmFjayBwYXN0IHRoZSBmcm9udCBvZiB0aGUgbGlzdCwgd2UganVt
cCB1cCB0byB0aGUgcHJldmlvdXMgUlMgbGF5ZXIgbGlzdCwgcGlja2luZyB1cCBhZ2FpbiB3aGVy
ZSB3ZQorICAgIC8vIGhhZCBwcmV2aW91c2x5IHJlY3Vyc2VkIGludG8gdGhlIGN1cnJlbnQgUlMg
bGF5ZXIgbGlzdC4KKworICAgIGlmICghcG9zLmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRS
ZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgLy8gU3VidHJhY3Rpbmcgb25lIGhlcmUgd2lsbCBl
dmVudHVhbGx5IGNhdXNlIHRoZSBjdXJyZW50IGxheWVyIHRvIGJlY29tZSB0aGF0IGxheWVyCisg
ICAgICAgIC8vIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IHJlbmRlciBzdXJmYWNlLgorICAgICAg
ICAtLXBvcy5jdXJyZW50TGF5ZXJJbmRleDsKKyAgICAgICAgZ29Ub0hpZ2hlc3RJblN1YnRyZWUo
cG9zKTsKKyAgICB9IGVsc2UgeworICAgICAgICB3aGlsZSAocG9zLmN1cnJlbnRMYXllclJlcHJl
c2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIGlmICghcG9zLnRhcmdl
dFJlbmRlclN1cmZhY2VMYXllckluZGV4KSB7CisgICAgICAgICAgICAgICAgLy8gRW5kIG9mIHRo
ZSBsaXN0CisgICAgICAgICAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4
ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6SW52YWxpZFRhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4OworICAgICAgICAgICAgICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IDA7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcG9z
LnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3Rvcnk7CisgICAgICAgICAgICBw
b3MuY3VycmVudExheWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX2N1cnJl
bnRMYXllckluZGV4SGlzdG9yeTsKKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5
ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdEluU3VidHJlZShDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQor
eworICAgIGlmIChwb3MuY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2Uo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIHdoaWxlIChwb3MuY3VycmVudExheWVyUmVwcmVzZW50
c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAvLyBTYXZlIHdoZXJlIHdl
IHdlcmUgaW4gdGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2UsIG1vdmUgdG8gdGhlIG5leHQgb25l
LCBhbmQgc2F2ZSB0aGUgdGFyZ2V0IHN1cmZhY2UgdGhhdCB3ZQorICAgICAgICAvLyBjYW1lIGZy
b20gdGhlcmUgc28gd2UgY2FuIGdvIGJhY2sgdG8gaXQuCisgICAgICAgIHBvcy50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5kZXhIaXN0b3J5ID0gcG9zLmN1cnJlbnRMYXll
ckluZGV4OworICAgICAgICBpbnQgcHJldmlvdXNUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIgPSBw
b3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisKKyAgICAgICAgZm9yIChMYXllclR5
cGUqIGxheWVyID0gcG9zLmN1cnJlbnRMYXllcigpOyBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxh
eWVyKCkgIT0gbGF5ZXI7ICsrcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4KSB7IH0K
KyAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2VD
aGlsZHJlbigpLnNpemUoKSAtIDE7CisKKyAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3RvcnkgPSBwcmV2aW91c1Rhcmdl
dFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICB9Cit9CisKKy8vIERlY2xhcmUgZWFjaCBvZiB0aGUg
YWJvdmUgZnVuY3Rpb25zIGZvciBMYXllckNocm9taXVtIGFuZCBDQ0xheWVySW1wbCBjbGFzc2Vz
IHNvIHRoYXQgdGhleSBhcmUgbGlua2VkLgordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpCYWNrVG9Gcm9udDo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVy
SXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9u
PExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4mKTsKK3RlbXBsYXRlIHZvaWQg
Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQoQ0NMYXllckl0ZXJhdG9y
UG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOworCit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpiZWdpbihDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPiYpOwordGVt
cGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6ZW5kKENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpuZXh0KENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7CisKK3Rl
bXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6Om5leHQoQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVt
PiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6
ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bT4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRU
b0JhY2s6OmJlZ2luKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJlbmRl
clN1cmZhY2VDaHJvbWl1bT4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9u
czo6RnJvbnRUb0JhY2s6OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRvclBvc2l0
aW9uPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4mKTsKKwordGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6bmV4dChDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPiYpOwordGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6ZW5kKENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1wbGF0ZSB2
b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbihDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPiYpOwordGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6Z29Ub0hpZ2hlc3RJblN1
YnRyZWUoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT4mKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
ZjQxMmM0NGQzZDE0MDQ3MGZkMTJhNzI3YjkxNGU0ZDQ2ZmJlYjE0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0
ZXJhdG9yLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXll
ckl0ZXJhdG9yX2gKKyNkZWZpbmUgQ0NMYXllckl0ZXJhdG9yX2gKKworI2luY2x1ZGUgImNjL0ND
TGF5ZXJJdGVyYXRvclBvc2l0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gVGhlc2UgY2xhc3NlcyBwcm92aWRlIG1lYW5zIHRvIGl0ZXJh
dGUgb3ZlciB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVlLgorCisvLyBFeGFtcGxlIGNvZGUg
Zm9sbG93cywgZm9yIGEgdHJlZSBvZiBMYXllckNocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bSBvYmplY3RzLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisvLworLy8gdm9pZCBkb1N0dWZmT25M
YXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KQorLy8geworLy8gICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hy
b21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJv
bnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisvLworLy8gICAgIENDTGF5ZXJJdGVyYXRv
clR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKKy8vICAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0
b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkg
eworLy8gICAgICAgICAvLyBPbmx5IG9uZSBvZiB0aGVzZSB3aWxsIGJlIHRydWUKKy8vICAgICAg
ICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpCisvLyAgICAgICAgICAg
ICBmb28oKml0KTsgLy8gKml0IGlzIGEgbGF5ZXIgcmVwcmVzZW50aW5nIGEgdGFyZ2V0IFJlbmRl
clN1cmZhY2UKKy8vICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJT
dXJmYWNlKCkpCisvLyAgICAgICAgICAgICBiYXIoKml0KTsgLy8gKml0IGlzIGEgbGF5ZXIgcmVw
cmVzZW50aW5nIGEgUmVuZGVyU3VyZmFjZSB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZSBsYXllcidz
IHRhcmdldCBSZW5kZXJTdXJmYWNlCisvLyAgICAgICAgIGlmIChpdC5yZXByZXNlbnRzSXRzZWxm
KCkpCisvLyAgICAgICAgICAgICBiYXooKml0KTsgLy8gKml0IGlzIGEgbGF5ZXIgcmVwcmVzZW50
aW5nIGl0c2VsZiwgYXMgaXQgY29udHJpYnV0ZXMgdG8gaXRzIG93biB0YXJnZXQgUmVuZGVyU3Vy
ZmFjZQorLy8gICAgIH0KKy8vIH0KKworLy8gQSBSZW5kZXJTdXJmYWNlIFIgbWF5IGJlIHJlZmVy
cmVkIHRvIGluIG9uZSBvZiB0d28gZGlmZmVyZW50IGNvbnRleHRzLiBPbmUgUmVuZGVyU3VyZmFj
ZSBpcyAiY3VycmVudCIgYXQgYW55IHRpbWUsIGZvcgorLy8gd2hhdGV2ZXIgb3BlcmF0aW9uIGlz
IGJlaW5nIHBlcmZvcm1lZC4gVGhpcyBjdXJyZW50IHN1cmZhY2UgaXMgcmVmZXJyZWQgdG8gYXMg
YSB0YXJnZXQgc3VyZmFjZS4gRm9yIGV4YW1wbGUsIHdoZW4gUiBpcworLy8gYmVpbmcgcGFpbnRl
ZCBpdCB3b3VsZCBiZSB0aGUgdGFyZ2V0IHN1cmZhY2UuIE9uY2UgUiBoYXMgYmVlbiBwYWludGVk
LCBpdHMgY29udGVudHMgbWF5IGJlIGluY2x1ZGVkIGludG8gYW5vdGhlcgorLy8gc3VyZmFjZSBT
LiBXaGlsZSBTIGlzIGNvbnNpZGVyZWQgdGhlIHRhcmdldCBzdXJmYWNlIHdoZW4gaXQgaXMgYmVp
bmcgcGFpbnRlZCwgUiBpcyBjYWxsZWQgYSBjb250cmlidXRpbmcgc3VyZmFjZQorLy8gaW4gdGhp
cyBjb250ZXh0IGFzIGl0IGNvbnRyaWJ1dGVzIHRvIHRoZSBjb250ZW50IG9mIHRoZSB0YXJnZXQg
c3VyZmFjZSBTLgorLy8KKy8vIFRoZSBpdGVyYXRvcidzIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhl
IHRyZWUgYWx3YXlzIHBvaW50cyB0byBzb21lIGxheWVyLiBUaGUgc3RhdGUgb2YgdGhlIGl0ZXJh
dG9yIGluZGljYXRlcyB0aGUgcm9sZSBvZiB0aGUKKy8vIGxheWVyLCBhbmQgd2lsbCBiZSBvbmUg
b2YgdGhlIGZvbGxvd2luZyB0aHJlZSBzdGF0ZXMuIEEgc2luZ2xlIGxheWVyIEwgd2lsbCBhcHBl
YXIgaW4gdGhlIGl0ZXJhdGlvbiBwcm9jZXNzIGluIGF0IGxlYXN0IG9uZSwKKy8vIGFuZCBwb3Nz
aWJseSBhbGwsIG9mIHRoZXNlIHN0YXRlcy4KKy8vIDEuIFJlcHJlc2VudGluZyB0aGUgdGFyZ2V0
IHN1cmZhY2U6IFRoZSBpdGVyYXRvciBpbiB0aGlzIHN0YXRlLCBwb2ludGluZyBhdCBsYXllciBM
LCBpbmRpY2F0ZXMgdGhhdCB0aGUgdGFyZ2V0IFJlbmRlclN1cmZhY2UKKy8vIGlzIG5vdyB0aGUg
c3VyZmFjZSBvd25lZCBieSBMLiBUaGlzIHdpbGwgb2NjdXIgZXhhY3RseSBvbmNlIGZvciBlYWNo
IFJlbmRlclN1cmZhY2UgaW4gdGhlIHRyZWUuCisvLyAyLiBSZXByZXNlbnRpbmcgYSBjb250cmli
dXRpbmcgc3VyZmFjZTogVGhlIGl0ZXJhdG9yIGluIHRoaXMgc3RhdGUsIHBvaW50aW5nIGF0IGxh
eWVyIEwsIHJlZmVycyB0byB0aGUgUmVuZGVyU3VyZmFjZSBvd25lZAorLy8gYnkgTCBhcyBhIGNv
bnRyaWJ1dGluZyBzdXJmYWNlLCB3aXRob3V0IGNoYW5naW5nIHRoZSBjdXJyZW50IHRhcmdldCBS
ZW5kZXJTdXJmYWNlLgorLy8gMy4gUmVwcmVzZW50aW5nIGl0c2VsZjogVGhlIGl0ZXJhdG9yIGlu
IHRoaXMgc3RhdGUsIHBvaW50aW5nIGF0IGxheWVyIEwsIHJlZmVycyB0byB0aGUgbGF5ZXIgaXRz
ZWxmLCBhcyBhIGNoaWxkIG9mIHRoZQorLy8gY3VycmVudCB0YXJnZXQgUmVuZGVyU3VyZmFjZS4K
Ky8vCisvLyBUaGUgQmFja1RvRnJvbnQgaXRlcmF0b3Igd2lsbCByZXR1cm4gYSBsYXllciByZXBy
ZXNlbnRpbmcgdGhlIHRhcmdldCBzdXJmYWNlIGJlZm9yZSByZXR1cm5pbmcgbGF5ZXJzIHJlcHJl
c2VudGluZyB0aGVtc2VsdmVzCisvLyBhcyBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCB0YXJnZXQg
c3VyZmFjZS4gV2hlcmVhcyB0aGUgRnJvbnRUb0JhY2sgb3JkZXJpbmcgd2lsbCBpdGVyYXRlIG92
ZXIgY2hpbGRyZW4gbGF5ZXJzIG9mIGEgc3VyZmFjZQorLy8gYmVmb3JlIHRoZSBsYXllciByZXBy
ZXNlbnRpbmcgdGhlIHN1cmZhY2UgYXMgYSB0YXJnZXQgc3VyZmFjZS4KKy8vCisvLyBUbyB1c2Ug
dGhlIGl0ZXJhdG9yczoKKy8vCisvLyBDcmVhdGUgYSBzdGVwcGluZyBpdGVyYXRvciBhbmQgZW5k
IGl0ZXJhdG9yIGJ5IGNhbGxpbmcgQ0NMYXllckl0ZXJhdG9yOjpiZWdpbigpIGFuZCBDQ0xheWVy
SXRlcmF0b3I6OmVuZCgpIGFuZCBwYXNzaW5nIGluIHRoZQorLy8gbGlzdCBvZiBsYXllcnMgb3du
aW5nIHRhcmdldCBSZW5kZXJTdXJmYWNlcy4gU3RlcCB0aHJvdWdoIHRoZSB0cmVlIGJ5IGluY3Jl
bWVudGluZyB0aGUgc3RlcHBpbmcgaXRlcmF0b3Igd2hpbGUgaXQgaXMgIT0gdG8KKy8vIHRoZSBl
bmQgaXRlcmF0b3IuIEF0IGVhY2ggc3RlcCB0aGUgaXRlcmF0b3Iga25vd3Mgd2hhdCB0aGUgbGF5
ZXIgaXMgcmVwcmVzZW50aW5nLCBhbmQgeW91IGNhbiBxdWVyeSB0aGUgaXRlcmF0b3IgdG8gZGVj
aWRlCisvLyB3aGF0IGFjdGlvbnMgdG8gcGVyZm9ybSB3aXRoIHRoZSBsYXllciBnaXZlbiB3aGF0
IGl0IHJlcHJlc2VudHMuCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gQW4gaXRlcmF0b3IgY2xh
c3MgZm9yIHdhbGtpbmcgb3ZlciBsYXllcnMgaW4gdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJl
ZS4KK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VU
eXBlLCB0eXBlbmFtZSBJdGVyYXRvckFjdGlvblR5cGU+CitjbGFzcyBDQ0xheWVySXRlcmF0b3Ig
eworICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5
cGUsIEl0ZXJhdG9yQWN0aW9uVHlwZT4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworcHVibGljOgor
ICAgIENDTGF5ZXJJdGVyYXRvcigpIHsgfQorCisgICAgc3RhdGljIENDTGF5ZXJJdGVyYXRvclR5
cGUgYmVnaW4oY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpIHsgcmV0dXJuIENDTGF5ZXJJdGVyYXRvclR5cGUocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgdHJ1ZSk7IH0KKyAgICBzdGF0aWMgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQoY29uc3Qg
VmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpIHsgcmV0
dXJuIENDTGF5ZXJJdGVyYXRvclR5cGUocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZmFsc2UpOyB9
CisKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlJiBvcGVyYXRvcisrKCkgeyBBU1NFUlQobV9hY3Rp
b25zKTsgbV9hY3Rpb25zLT5uZXh0KG1fcG9zaXRpb24pOyByZXR1cm4gKnRoaXM7IH0KKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuIG1fcG9zaXRpb24gPT0gb3RoZXIubV9wb3NpdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBDQ0xheWVySXRlcmF0b3JUeXBlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7IH0KKworICAgIExheWVyVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyKCk7IH0KKyAgICBMYXllclR5cGUqIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyKCk7IH0KKworICAg
IGJvb2wgcmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3Bv
c2l0aW9uLmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCk7IH0KKyAg
ICBib29sIHJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1
cm4gIXJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgJiYgbV9wb3NpdGlvbi5jdXJyZW50
TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpOyB9CisgICAgYm9vbCBy
ZXByZXNlbnRzSXRzZWxmKCkgY29uc3QgeyByZXR1cm4gIXJlcHJlc2VudHNUYXJnZXRSZW5kZXJT
dXJmYWNlKCkgJiYgIXJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCk7IH0KKwor
ICAgIExheWVyVHlwZSogdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9wb3NpdGlvbi50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKTsgfQorCitwcml2YXRlOgorICAg
IENDTGF5ZXJJdGVyYXRvcihjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgYm9vbCBzdGFydCkKKyAgICAgICAgOiBtX3Bvc2l0aW9uKHJlbmRl
clN1cmZhY2VMYXllckxpc3QpCisgICAgICAgICwgbV9hY3Rpb25zKGFkb3B0UHRyKG5ldyBJdGVy
YXRvckFjdGlvblR5cGUoKSkpCisgICAgeworICAgICAgICBpZiAoc3RhcnQgJiYgIXJlbmRlclN1
cmZhY2VMYXllckxpc3QtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fYWN0aW9ucy0+YmVnaW4o
bV9wb3NpdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYWN0aW9ucy0+ZW5kKG1f
cG9zaXRpb24pOworICAgIH0KKworICAgIENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlw
ZSwgUmVuZGVyU3VyZmFjZVR5cGU+IG1fcG9zaXRpb247CisgICAgT3duUHRyPEl0ZXJhdG9yQWN0
aW9uVHlwZT4gbV9hY3Rpb25zOworfTsKKworLy8gT3JkZXJpbmdzIGZvciBpdGVyYXRpbmcgb3Zl
ciB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVlLgorc3RydWN0IENDTGF5ZXJJdGVyYXRvckFj
dGlvbnMgeworICAgIC8vIFdhbGtzIGxheWVycyBzb3J0ZWQgYnkgei1vcmRlciBmcm9tIGJhY2sg
dG8gZnJvbnQuCisgICAgY2xhc3MgQmFja1RvRnJvbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+
CisgICAgICAgIHZvaWQgYmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJU
eXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBlbmQoQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNl
VHlwZT4KKyAgICAgICAgdm9pZCBuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlw
ZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBpbnQgbV9o
aWdoZXN0VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgIH07CisKKyAgICAvLyBXYWxrcyBs
YXllcnMgc29ydGVkIGJ5IHotb3JkZXIgZnJvbSBmcm9udCB0byBiYWNrCisgICAgY2xhc3MgRnJv
bnRUb0JhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVy
VHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CisgICAgICAgIHZvaWQgYmVnaW4oQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKwor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZT4KKyAgICAgICAgdm9pZCBlbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJU
eXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBuZXh0
KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7
CisKKyAgICBwcml2YXRlOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0
eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBnb1RvSGlnaGVzdEluU3Vi
dHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBl
PiYpOworICAgIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvclBvc2l0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjFmNjNj
NDVmNzQyYzAzYzYwZGVmOWIyMTczODQwYWZiODZjMzI2MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbl9oCisjZGVmaW5lIENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uX2gK
KworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorCisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBOb24tdGVtcGxhdGVkIGNvbnN0YW50cworc3RydWN0IENDTGF5ZXJJdGVyYXRvclBv
c2l0aW9uVmFsdWUgeworICAgIHN0YXRpYyBjb25zdCBpbnQgSW52YWxpZFRhcmdldFJlbmRlclN1
cmZhY2VMYXllckluZGV4ID0gLTE7CisgICAgLy8gVGhpcyBtdXN0IGJlIC0xIHNpbmNlIHRoZSBp
dGVyYXRvciBhY3Rpb24gY29kZSBhc3N1bWVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gYmUKKyAgICAv
LyByZWFjaGVkIGJ5IHN1YnRyYWN0aW5nIG9uZSBmcm9tIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmly
c3QgbGF5ZXIgaW4gdGhlIGN1cnJlbnQKKyAgICAvLyB0YXJnZXQgc3VyZmFjZSdzIGNoaWxkIGxh
eWVyIGxpc3QsIHdoaWNoIGlzIDAuCisgICAgc3RhdGljIGNvbnN0IGludCBMYXllckluZGV4UmVw
cmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZSA9IC0xOworfTsKKworLy8gQSBzdHJ1Y3QgdG8g
aG9sZCB0aGUgaXRlcmF0b3IncyBjdXJyZW50IHBvc2l0aW9uLCB3aGljaCBpcyBwYXNzZWQgdG8g
dGhlIHZhcmlvdXMgQ0NMYXllckl0ZXJhdG9yQWN0aW9uIGZ1bmN0aW9ucywgZm9yIHRoZW0gdG8K
Ky8vIHJlYWQgYW5kIHVwZGF0ZS4gVGhpcyBzdHJ1Y3QgZXhpc3RzIHNvIHRoZSB0ZW1wbGF0ZWQg
YWN0aW9uIGZ1bmN0aW9ucyBkb24ndCBuZWVkIHRvIGFjY2VzcyB0aGUgQ0NMYXllckl0ZXJhdG9y
IGNsYXNzLgorLy8KKy8vIFRoZXJlIGlzIGEgMToxIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFuIGlu
c3RhbmNlIG9mIHRoZSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbiBjbGFzcyBhbmQgYSBDQ0xheWVy
SXRlcmF0b3JBY3Rpb25zOjpGb28gY2xhc3MsCisvLyBzbyBhbiBpdGVyYXRvciBhY3Rpb24gY2xh
c3MgY2FuIGhvbGQgZXh0cmEgcG9zaXRpb24gZGF0YSwgaWYgcmVxdWlyZWQsIGluIGl0cyBvd24g
Y2xhc3MgaW5zdGFuY2UuCisvLworLy8gVGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIGl0ZXJh
dG9yIGlzIGhlbGQgaW4gdHdvIGludGVnZXIgdmFyaWFibGVzLgorLy8gLSBUaGUgdGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVySW5kZXggaXMgYSBwb3NpdGlvbiBpbiB0aGUgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC4gVGhpcyBwb2ludHMgdG8gYSBsYXllciB3aGljaCBvd25zIHRoZSBjdXJyZW50Cisv
LyB0YXJnZXQgc3VyZmFjZS4gVGhpcyBpcyBhIHZhbHVlIGZyb20gMCB0byBuLTEgKG4gPSBzaXpl
IG9mIHJlbmRlclN1cmZhY2VMYXllckxpc3QgPSBudW1iZXIgb2Ygc3VyZmFjZXMpLiBBIHZhbHVl
IG91dHNpZGUgb2YKKy8vIHRoaXMgcmFuZ2UgKGZvciBleGFtcGxlLCBDQ0xheWVySXRlcmF0b3JQ
b3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgpIGlzIHVz
ZWQgdG8gaW5kaWNhdGUgYSBwb3NpdGlvbgorLy8gb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSB0
cmVlLgorLy8gLSBUaGUgY3VycmVudExheWVySW5kZXggaXMgYSBwb3NpdGlvbiBpbiB0aGUgbGlz
dCBvZiBsYXllcnMgdGhhdCBhcmUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZh
Y2UuIFdoZW4gcG9pbnRpbmcgdG8KKy8vIG9uZSBvZiB0aGVzZSBsYXllcnMsIHRoaXMgaXMgYSB2
YWx1ZSBmcm9tIDAgdG8gbi0xIChuID0gbnVtYmVyIG9mIGNoaWxkcmVuKS4gU2luY2UgdGhlIGl0
ZXJhdG9yIG11c3QgYWxzbyBzdG9wIGF0IHRoZSBsYXllcnMKKy8vIHJlcHJlc2VudGluZyB0aGUg
dGFyZ2V0IHN1cmZhY2UsIHRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIHRoZSBjdXJyZW50TGF5ZXJJ
bmRleCB0byBhIHZhbHVlIG9mCisvLyBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpMYXll
clJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2UuCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXll
clR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorc3RydWN0IENDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uIHsKKyAgICBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbigpIDogcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCgwKSB7IH0KKyAgICBleHBsaWNpdCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbihj
b25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkg
OiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KHJlbmRlclN1cmZhY2VMYXllckxpc3QpIHsgfQorCisg
ICAgaW5saW5lIExheWVyVHlwZSogY3VycmVudExheWVyKCkgY29uc3QgeyByZXR1cm4gY3VycmVu
dExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSA/IHRhcmdldFJlbmRlclN1cmZh
Y2VMYXllcigpIDogdGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKClbY3VycmVudExheWVySW5k
ZXhdLmdldCgpOyB9CisKKyAgICBpbmxpbmUgYm9vbCBjdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29u
dHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJUeXBlPihjdXJyZW50
TGF5ZXIoKSwgdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCktPmlkKCkpOyB9CisgICAgaW5saW5l
IGJvb2wgY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7
IHJldHVybiBjdXJyZW50TGF5ZXJJbmRleCA9PSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVl
OjpMYXllckluZGV4UmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQorCisgICAgaW5s
aW5lIExheWVyVHlwZSogdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgY29uc3QgeyByZXR1cm4g
KCpyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KVt0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleF0u
Z2V0KCk7IH0KKyAgICBpbmxpbmUgUmVuZGVyU3VyZmFjZVR5cGUqIHRhcmdldFJlbmRlclN1cmZh
Y2UoKSBjb25zdCB7IHJldHVybiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKS0+cmVuZGVyU3Vy
ZmFjZSgpOyB9CisgICAgaW5saW5lIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+JiB0
YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiB0YXJnZXRSZW5kZXJT
dXJmYWNlKCktPmxheWVyTGlzdCgpOyB9CisKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9PSBvdGhlci50YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXJJbmRleAorICAgICAgICAgICAgJiYgY3VycmVudExheWVySW5kZXggPT0g
b3RoZXIuY3VycmVudExheWVySW5kZXg7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgaW50IHRhcmdldFJl
bmRlclN1cmZhY2VMYXllckluZGV4OworICAgIGludCBjdXJyZW50TGF5ZXJJbmRleDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAppbmRleCBjZDc1NmQ2MDBkYzBmMGUzZjMwMWIzMmQ3ZThlODRmYzAwYWIwNzYxLi5m
MDllNjI4OGNkNTBmZjUyNjc2YTUzNTMxYmEwMzExYzc1MjU5MzA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJMYXllclJlbmRl
cmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5
bmNocm9uaXplci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCkBAIC00MzQsNTcg
KzQzNSw0MSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJl
bmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyUwogCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgUGFpbnRUeXBlIHBhaW50VHlwZSkKIHsKLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXgg
PSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsg
LS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxh
eWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAg
ICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5
ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwotICAg
ICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7Ci0KLSAgICAgICAgcGFp
bnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyLCBwYWlu
dFR5cGUpOwotCi0gICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3Vy
ZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7
IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAg
ICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwot
Ci0gICAgICAgICAgICAvLyBMYXllcnMgdGhhdCBzdGFydCBhIG5ldyByZW5kZXIgc3VyZmFjZSB3
aWxsIGJlIHBhaW50ZWQgd2hlbiB0aGUgcmVuZGVyCi0gICAgICAgICAgICAvLyBzdXJmYWNlJ3Mg
bGlzdCBpcyBwcm9jZXNzZWQuCi0gICAgICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxMYXllckNocm9taXVtPihsYXllciwg
cmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKTsKLQotICAgICAg
ICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5ZXIsIHBhaW50VHlwZSk7CisgICAgLy8gVXNl
IEZyb250VG9CYWNrIHRvIGFsbG93IGZvciB0ZXN0aW5nIG9jY2x1c2lvbiBhbmQgcGVyZm9ybWlu
ZyBjdWxsaW5nIGR1cmluZyB0aGUgdHJlZSB3YWxrLgorICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJh
dG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisKKyAgICBDQ0xheWVy
SXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CisgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0
ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsK
KyAgICAgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKCppdCwgcGFp
bnRUeXBlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpdC0+b3BhY2l0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQt
PmJvdW5kcygpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eSgq
aXQsIHBhaW50VHlwZSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVI
b3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQogewotICAgIGZvciAoaW50IHN1cmZhY2VJbmRl
eCA9IG1fdXBkYXRlTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFj
ZUluZGV4KSB7Ci0gICAgICAgIExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IG1f
dXBkYXRlTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2Uo
KTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwotICAgICAgICBBU1NFUlQocmVuZGVy
U3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7Ci0KLSAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXll
ci0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXll
cigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwotCi0gICAg
ICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAg
ICByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
cmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCi0gICAgICAg
ICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkt
PnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3Vy
ZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7
IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAg
ICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwot
Ci0gICAgICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29u
dHJpYnV0ZXNUb1RhcmdldDxMYXllckNocm9taXVtPihsYXllciwgcmVuZGVyU3VyZmFjZUxheWVy
LT5pZCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgbGF5ZXIt
PnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7Ci0gICAgICAgIH0K
KyAgICAvLyBVc2UgQmFja1RvRnJvbnQgc2luY2UgaXQncyBjaGVhcCBhbmQgdGhpcyBpc24ndCBv
cmRlci1kZXBlbmRlbnQuCisgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1
bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9G
cm9udD4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5k
ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZtX3VwZGF0ZUxpc3QpOworICAgIGZvciAoQ0NM
YXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZtX3VwZGF0
ZUxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJn
ZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFj
ZSgpLT5kcmF3T3BhY2l0eSgpKTsKKyAgICAgICAgICAgIGlmIChpdC0+bWFza0xheWVyKCkpCisg
ICAgICAgICAgICAgICAgaXQtPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KGNvbnRleHQsIHVwZGF0ZXIpOworCisgICAgICAgICAgICBpZiAoaXQtPnJlcGxpY2FMYXllcigp
KSB7CisgICAgICAgICAgICAgICAgaXQtPnJlcGxpY2FMYXllcigpLT51cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOworICAgICAgICAgICAgICAgIGlmIChpdC0+cmVw
bGljYUxheWVyKCktPm1hc2tMYXllcigpKQorICAgICAgICAgICAgICAgICAgICBpdC0+cmVwbGlj
YUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQs
IHVwZGF0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGl0LnJlcHJlc2Vu
dHNJdHNlbGYoKSkKKyAgICAgICAgICAgIGl0LT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNv
bnRleHQsIHVwZGF0ZXIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAKaW5kZXggNTY1MDliY2VjM2M2MWUyZGZlMTY2NGFiNDE2NWY0MjkzNzM5
M2UxYi4uYjEzNzcxNDUzOGI4OTllYjUxNTViZGQ3NDBjZDI5ZGFlNDc3ZDVkZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0ND
TGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRl
ICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKIApAQCAtNDcxLDE1ICs0NzIsMTQgQEAgc3RhdGljIGJv
b2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBl
KiBsYXllciwgTGF5ZXIKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVu
ZGVyU3VyZmFjZVR5cGU+CiBzdGF0aWMgdm9pZCB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJs
ZUxheWVyUmVjdHMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpCiB7Ci0gICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4
KSB7Ci0gICAgICAgIExheWVyVHlwZSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAgICBSZW5kZXJTdXJmYWNlVHlw
ZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwot
Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+JiBsYXllckxpc3QgPSByZW5kZXJT
dXJmYWNlLT5sYXllckxpc3QoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0g
MDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgewotICAgICAg
ICAgICAgTGF5ZXJUeXBlKiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKLSAg
ICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdDxMYXllclR5cGU+KGxheWVyKTsKLSAgICAgICAg
ICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOworICAgIC8v
IFVzZSBCYWNrVG9Gcm9udCBzaW5jZSBpdCdzIGNoZWFwIGFuZCB0aGlzIGlzbid0IG9yZGVyLWRl
cGVuZGVudC4KKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1
cmZhY2VUeXBlLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0
ZXJhdG9yVHlwZTsKKworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJh
dG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBmb3IgKENDTGF5ZXJJ
dGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoIWl0LnJlcHJlc2Vu
dHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxh
eWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVj
dDxMYXllclR5cGU+KCppdCk7CisgICAgICAgICAgICBpdC0+c2V0VmlzaWJsZUxheWVyUmVjdCh2
aXNpYmxlTGF5ZXJSZWN0KTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmgKaW5kZXggYThlODdhOWY5YmVhNWQ5YmI0ZTgxOGRmNTBkYzA4ZDllNzMyNmY4Yy4u
YWI4Mzg2ZDVkYTIzZmE3MTAzMDU3YWYxMTQwN2I0OWE0YTViNTYzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlLmgKQEAgLTEyOSw2ICsxMjksMTEgQEAgcHJpdmF0ZToKIAogICAgIC8vIFN0
b3JlZCBpbiB0aGUgInN1cmZhY2Ugc3BhY2UiIHdoZXJlIHRoaXMgZGFtYWdlIGNhbiBiZSB1c2Vk
IGZvciBzY2lzc29yaW5nLgogICAgIEZsb2F0UmVjdCBtX2RhbWFnZVJlY3Q7CisKKyAgICAvLyBG
b3IgQ0NMYXllckl0ZXJhdG9yQWN0aW9ucworICAgIGludCBtX3RhcmdldFJlbmRlclN1cmZhY2VM
YXllckluZGV4SGlzdG9yeTsKKyAgICBpbnQgbV9jdXJyZW50TGF5ZXJJbmRleEhpc3Rvcnk7Cisg
ICAgZnJpZW5kIHN0cnVjdCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZTY3NGJiNmI4NWIwODVjYWJhY2M5ZDlkNjQ5OTkz
ZDVkNjJmZTVjZi4uYWQ0MjQxMmNiNTJmZDJmNThiZWM5YTRjZTgzZjRlMjg4MTk2Y2I4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02NCw2ICs2NCw3IEBACiAgICAgICAgICAg
ICAndGVzdHMvQ0NEZWxheUJhc2VkVGltZVNvdXJjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NMYXllckltcGxUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NMYXllckl0ZXJhdG9y
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJRdWFkVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJTb3J0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDdh
NmZkNGRjNzkwYTgyZTM2YjE3ODcxYWMyNWJkMzY2MTg4Mjc3NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKQEAg
LTAsMCArMSwyNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorI2luY2x1ZGUgPGdtb2Nr
L2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Cit1c2luZyA6OnRlc3Rpbmc6Ok1vY2s7Cit1c2luZyA6OnRlc3Rpbmc6Ol87Cit1c2lu
ZyA6OnRlc3Rpbmc6OkF0TGVhc3Q7Cit1c2luZyA6OnRlc3Rpbmc6OkFueU51bWJlcjsKKworbmFt
ZXNwYWNlIHsKKworY2xhc3MgVGVzdExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1
bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXN0TGF5ZXJDaHJvbWl1bSgpKTsgfQorCisg
ICAgaW50IG1fY291bnRSZXByZXNlbnRpbmdUYXJnZXRTdXJmYWNlOworICAgIGludCBtX2NvdW50
UmVwcmVzZW50aW5nQ29udHJpYnV0aW5nU3VyZmFjZTsKKyAgICBpbnQgbV9jb3VudFJlcHJlc2Vu
dGluZ0l0c2VsZjsKKworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJl
dHVybiBtX2RyYXdzQ29udGVudDsgfQorICAgIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wgZHJh
d3NDb250ZW50KSB7IG1fZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50OyB9CisKK3ByaXZhdGU6
CisgICAgVGVzdExheWVyQ2hyb21pdW0oKQorICAgICAgICA6IExheWVyQ2hyb21pdW0oMCkKKyAg
ICAgICAgLCBtX2RyYXdzQ29udGVudCh0cnVlKQorICAgIHsKKyAgICAgICAgc2V0Qm91bmRzKElu
dFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgc2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0
KDAsIDAsIDEwMCwgMTAwKSk7CisgICAgfQorCisgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKK307
CisKKyNkZWZpbmUgRVhQRUNUX0NPVU5UKGxheWVyLCB0YXJnZXQsIGNvbnRyaWIsIGl0c2VsZikg
XAorICAgIEVYUEVDVF9FUSh0YXJnZXQsIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nVGFyZ2V0
U3VyZmFjZSk7ICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRVEoY29udHJpYiwgbGF5ZXItPm1fY291
bnRSZXByZXNlbnRpbmdDb250cmlidXRpbmdTdXJmYWNlKTsgICBcCisgICAgRVhQRUNUX0VRKGl0
c2VsZiwgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdJdHNlbGYpOworCit0eXBlZGVmIENDTGF5
ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIENDTGF5ZXJJ
dGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBGcm9udFRvQmFjazsKK3R5cGVkZWYgQ0NMYXll
ckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0
ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ+IEJhY2tUb0Zyb250OworCit2b2lkIHJlc2V0Q291
bnRzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHN1cmZhY2VJbmRleCA9IDA7IHN1cmZhY2VJbmRleCA8
IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpOyArK3N1cmZhY2VJbmRleCkgeworICAgICAg
ICBUZXN0TGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gc3RhdGljX2Nhc3Q8VGVz
dExheWVyQ2hyb21pdW0qPihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0
KCkpOworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5k
ZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKworICAgICAgICByZW5kZXJTdXJmYWNl
TGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdUYXJnZXRTdXJmYWNlID0gLTE7CisgICAgICAgIHJl
bmRlclN1cmZhY2VMYXllci0+bV9jb3VudFJlcHJlc2VudGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2Ug
PSAtMTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nSXRz
ZWxmID0gLTE7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJ
bmRleCA8IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLnNpemUoKTsgKytsYXllckluZGV4KSB7
CisgICAgICAgICAgICBUZXN0TGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBzdGF0aWNfY2FzdDxUZXN0
TGF5ZXJDaHJvbWl1bSo+KHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpW2xheWVySW5kZXhdLmdl
dCgpKTsKKworICAgICAgICAgICAgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdUYXJnZXRTdXJm
YWNlID0gLTE7CisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ0NvbnRyaWJ1
dGluZ1N1cmZhY2UgPSAtMTsKKyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5n
SXRzZWxmID0gLTE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgaXRlcmF0ZUZyb250VG9C
YWNrKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCkKK3sKKyAgICByZXNldENvdW50cygqcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgaW50
IGNvdW50ID0gMDsKKyAgICBmb3IgKEZyb250VG9CYWNrIGl0ID0gRnJvbnRUb0JhY2s6OmJlZ2lu
KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBGcm9udFRvQmFjazo6ZW5kKHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOyArK2l0LCArK2NvdW50KSB7CisgICAgICAgIFRlc3RMYXllckNocm9t
aXVtKiBsYXllciA9IHN0YXRpY19jYXN0PFRlc3RMYXllckNocm9taXVtKj4oKml0KTsKKyAgICAg
ICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBs
YXllci0+bV9jb3VudFJlcHJlc2VudGluZ1RhcmdldFN1cmZhY2UgPSBjb3VudDsKKyAgICAgICAg
aWYgKGl0LnJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAg
ICBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2UgPSBjb3VudDsK
KyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkKKyAgICAgICAgICAgIGxheWVyLT5t
X2NvdW50UmVwcmVzZW50aW5nSXRzZWxmID0gY291bnQ7CisgICAgfQorfQorCit2b2lkIGl0ZXJh
dGVCYWNrVG9Gcm9udChWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4qIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpCit7CisgICAgcmVzZXRDb3VudHMoKnJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChCYWNrVG9Gcm9udCBpdCA9IEJhY2tUb0Zy
b250OjpiZWdpbihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgaXQgIT0gQmFja1RvRnJvbnQ6OmVu
ZChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgKytpdCwgKytjb3VudCkgeworICAgICAgICBUZXN0
TGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBzdGF0aWNfY2FzdDxUZXN0TGF5ZXJDaHJvbWl1bSo+KCpp
dCk7CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKQorICAg
ICAgICAgICAgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdUYXJnZXRTdXJmYWNlID0gY291bnQ7
CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpKQor
ICAgICAgICAgICAgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdDb250cmlidXRpbmdTdXJmYWNl
ID0gY291bnQ7CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkpCisgICAgICAgICAg
ICBsYXllci0+bV9jb3VudFJlcHJlc2VudGluZ0l0c2VsZiA9IGNvdW50OworICAgIH0KK30KKwor
VEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBzaW1wbGVUcmVlKQoreworICAgIFJlZlB0cjxUZXN0
TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gZmlyc3QgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBzZWNvbmQgPSBUZXN0TGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiB0aGly
ZCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hy
b21pdW0+IGZvdXJ0aCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIHJvb3RM
YXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworCisgICAgcm9vdExheWVyLT5hZGRDaGlsZChm
aXJzdCk7CisgICAgcm9vdExheWVyLT5hZGRDaGlsZChzZWNvbmQpOworICAgIHJvb3RMYXllci0+
YWRkQ2hpbGQodGhpcmQpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQoZm91cnRoKTsKKworICAg
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owor
ICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBsYXllckxpc3Q7CisgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0
KCksIHJvb3RMYXllci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVy
TGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyNTYpOworCisgICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7Cisg
ICAgRVhQRUNUX0NPVU5UKGZpcnN0LCAtMSwgLTEsIDIpOworICAgIEVYUEVDVF9DT1VOVChzZWNv
bmQsIC0xLCAtMSwgMyk7CisgICAgRVhQRUNUX0NPVU5UKHRoaXJkLCAtMSwgLTEsIDQpOworICAg
IEVYUEVDVF9DT1VOVChmb3VydGgsIC0xLCAtMSwgNSk7CisKKyAgICBpdGVyYXRlRnJvbnRUb0Jh
Y2soJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIs
IDUsIC0xLCA0KTsKKyAgICBFWFBFQ1RfQ09VTlQoZmlyc3QsIC0xLCAtMSwgMyk7CisgICAgRVhQ
RUNUX0NPVU5UKHNlY29uZCwgLTEsIC0xLCAyKTsKKyAgICBFWFBFQ1RfQ09VTlQodGhpcmQsIC0x
LCAtMSwgMSk7CisgICAgRVhQRUNUX0NPVU5UKGZvdXJ0aCwgLTEsIC0xLCAwKTsKKworfQorCitU
RVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIGNvbXBsZXhUcmVlKQoreworICAgIFJlZlB0cjxUZXN0
TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MiA9IFRlc3RMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3Qz
ID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJv
bWl1bT4gcm9vdDIxID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxU
ZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIyID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIzID0gVGVzdExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIyMSA9IFRlc3RM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJv
b3QyMzEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICByb290TGF5ZXItPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDEpOwor
ICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDIpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQo
cm9vdDMpOworICAgIHJvb3QyLT5hZGRDaGlsZChyb290MjEpOworICAgIHJvb3QyLT5hZGRDaGls
ZChyb290MjIpOworICAgIHJvb3QyLT5hZGRDaGlsZChyb290MjMpOworICAgIHJvb3QyMi0+YWRk
Q2hpbGQocm9vdDIyMSk7CisgICAgcm9vdDIzLT5hZGRDaGlsZChyb290MjMxKTsKKworICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAg
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBsYXllckxpc3Q7CisgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0KCks
IHJvb3RMYXllci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAyNTYpOworCisgICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7CisgICAg
RVhQRUNUX0NPVU5UKHJvb3QxLCAtMSwgLTEsIDIpOworICAgIEVYUEVDVF9DT1VOVChyb290Miwg
LTEsIC0xLCAzKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIxLCAtMSwgLTEsIDQpOworICAgIEVY
UEVDVF9DT1VOVChyb290MjIsIC0xLCAtMSwgNSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMjEs
IC0xLCAtMSwgNik7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMywgLTEsIC0xLCA3KTsKKyAgICBF
WFBFQ1RfQ09VTlQocm9vdDIzMSwgLTEsIC0xLCA4KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDMs
IC0xLCAtMSwgOSk7CisKKyAgICBpdGVyYXRlRnJvbnRUb0JhY2soJnJlbmRlclN1cmZhY2VMYXll
ckxpc3QpOworICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDksIC0xLCA4KTsKKyAgICBFWFBF
Q1RfQ09VTlQocm9vdDEsIC0xLCAtMSwgNyk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyLCAtMSwg
LTEsIDYpOworICAgIEVYUEVDVF9DT1VOVChyb290MjEsIC0xLCAtMSwgNSk7CisgICAgRVhQRUNU
X0NPVU5UKHJvb3QyMiwgLTEsIC0xLCA0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyMSwgLTEs
IC0xLCAzKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIzLCAtMSwgLTEsIDIpOworICAgIEVYUEVD
VF9DT1VOVChyb290MjMxLCAtMSwgLTEsIDEpOworICAgIEVYUEVDVF9DT1VOVChyb290MywgLTEs
IC0xLCAwKTsKKworfQorCitURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIGNvbXBsZXhUcmVlTXVs
dGlTdXJmYWNlKQoreworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0g
VGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1
bT4gcm9vdDEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RM
YXllckNocm9taXVtPiByb290MiA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QzID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIxID0gVGVzdExheWVyQ2hy
b21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIyID0g
VGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1
bT4gcm9vdDIzID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0
TGF5ZXJDaHJvbWl1bT4gcm9vdDIyMSA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QyMzEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisKKyAgICByb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAg
IHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDEpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9v
dDIpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDMpOworICAgIHJvb3QyLT5zZXREcmF3
c0NvbnRlbnQoZmFsc2UpOworICAgIHJvb3QyLT5zZXRPcGFjaXR5KDAuNSk7IC8vIEZvcmNlIHRo
ZSBsYXllciB0byBvd24gYSBuZXcgc3VyZmFjZS4KKyAgICByb290Mi0+YWRkQ2hpbGQocm9vdDIx
KTsKKyAgICByb290Mi0+YWRkQ2hpbGQocm9vdDIyKTsKKyAgICByb290Mi0+YWRkQ2hpbGQocm9v
dDIzKTsKKyAgICByb290MjItPnNldE9wYWNpdHkoMC41KTsKKyAgICByb290MjItPmFkZENoaWxk
KHJvb3QyMjEpOworICAgIHJvb3QyMy0+c2V0T3BhY2l0eSgwLjUpOworICAgIHJvb3QyMy0+YWRk
Q2hpbGQocm9vdDIzMSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
bGF5ZXJMaXN0OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllcik7
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKworICAgIGl0ZXJhdGVC
YWNrVG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0NPVU5UKHJv
b3RMYXllciwgMCwgLTEsIDEpOworICAgIEVYUEVDVF9DT1VOVChyb290MSwgLTEsIC0xLCAyKTsK
KyAgICBFWFBFQ1RfQ09VTlQocm9vdDIsIDQsIDMsIC0xKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9v
dDIxLCAtMSwgLTEsIDUpOworICAgIEVYUEVDVF9DT1VOVChyb290MjIsIDcsIDYsIDgpOworICAg
IEVYUEVDVF9DT1VOVChyb290MjIxLCAtMSwgLTEsIDkpOworICAgIEVYUEVDVF9DT1VOVChyb290
MjMsIDExLCAxMCwgMTIpOworICAgIEVYUEVDVF9DT1VOVChyb290MjMxLCAtMSwgLTEsIDEzKTsK
KyAgICBFWFBFQ1RfQ09VTlQocm9vdDMsIC0xLCAtMSwgMTQpOworCisgICAgaXRlcmF0ZUZyb250
VG9CYWNrKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdExh
eWVyLCAxNCwgLTEsIDEzKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDEsIC0xLCAtMSwgMTIpOwor
ICAgIEVYUEVDVF9DT1VOVChyb290MiwgMTAsIDExLCAtMSk7CisgICAgRVhQRUNUX0NPVU5UKHJv
b3QyMSwgLTEsIC0xLCA5KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyLCA3LCA4LCA2KTsKKyAg
ICBFWFBFQ1RfQ09VTlQocm9vdDIyMSwgLTEsIC0xLCA1KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9v
dDIzLCAzLCA0LCAyKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIzMSwgLTEsIC0xLCAxKTsKKyAg
ICBFWFBFQ1RfQ09VTlQocm9vdDMsIC0xLCAtMSwgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121897</attachid>
            <date>2012-01-10 12:57:53 -0800</date>
            <delta_ts>2012-01-10 13:24:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74203-20120110155751.patch</filename>
            <type>text/plain</type>
            <size>49906</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgzZWE3ODM5OThhYjM1
MzQ3ZTk2MWU0M2NiNzI0OGQwNGRlZWMxMi4uYmU2NWE0Njg3NWRhZTg1NDJkZjVhOGNhMTQ5NmNh
MjAwOGEwODg3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTAxLTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGl0ZXJhdG9ycyBmb3IgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdW5pdCB0ZXN0czogQ0NM
YXllckl0ZXJhdG9yVGVzdC5jcHAKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tU
b0Zyb250OjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpCYWNrVG9Gcm9udDo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkJhY2tUb0Zyb250OjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdElu
U3VidHJlZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpD
Q0xheWVySXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpiZWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OmVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6
Om9wZXJhdG9yLT4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRv
ciopOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yOjpyZXByZXNlbnRzVGFyZ2V0
UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OnJlcHJl
c2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvcjo6cmVwcmVzZW50c0l0c2VsZik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SXRlcmF0b3I6OnRhcmdldFJlbmRlclN1cmZhY2VMYXllcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24uaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6Q0NMYXllckl0ZXJhdG9y
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OmN1
cnJlbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6
Y3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OmN1cnJlbnRMYXllclJlcHJlc2Vu
dHNUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uOjp0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OnRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckl0ZXJhdG9yUG9zaXRpb246OnRhcmdldFJlbmRlclN1cmZhY2VDaGls
ZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjo6b3BlcmF0
b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXll
ckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndhbGtMYXll
cnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisKIDIwMTItMDEtMDkgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgRWxlbWVudHMgY2FuIGFwcGVh
ciBvdmVyIGZ1bGxzY3JlZW4gdmlkZW8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOThl
MjIwNDhlNmNiODk5YzVhYWY4Y2Q4ZDVkNmY4NTgxOGFhYWU0MS4uOWY3ZTBhOTM4ZGRiY2EzNWM3
MDgwM2U5OGEwNTEwYmU2NmRjNjRkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAxMi0wMS0wOSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBpdGVyYXRvcnMgZm9yIHRoZSBSZW5kZXJT
dXJmYWNlLUxheWVyIHRyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc0MjAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVySXRlcmF0b3JU
ZXN0LmNwcDogQWRkZWQuCisKIDIwMTItMDEtMTAgIFBldGVyIEJldmVybG9vICA8cGV0ZXJAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gRml4IGNvbXBpbGF0aW9uIHdpdGggRU5B
QkxFX1dFQl9BVURJTz0wCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYzQxM2Y1ODJhMmViYTdiYmRlZGRm
NjJjMTE0MjdiMTNiZDJmMjk0Ni4uMTI5MTgxYWZiM2JiMTgzOGYzNmI4YzNiYzFkZmY1NGRlNmFi
M2NhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzYyMSw2ICszNjIxLDkgQEAKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVy
YXRvci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJdGVyYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySXRlcmF0b3JQb3NpdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZh
Y2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggOTNlOGQ4NmM2NzE3MWMyNzdlYzE3NWM2MTlk
YmU4ODBiNzJmNDE4Yi4uNGUxODIyYjMxOGM1ZTFkMjU3YTkwOGU0MmE0ZGMyODg0NmI1YjJhNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVu
ZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTk2LDYgKzk2LDExIEBAIHBy
aXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9vcmlnaW5UcmFuc2Zvcm07CiAgICAg
SW50UmVjdCBtX2NsaXBSZWN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBt
X2xheWVyTGlzdDsKKworICAgIC8vIEZvciBDQ0xheWVySXRlcmF0b3JBY3Rpb25zCisgICAgaW50
IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5OworICAgIGludCBtX2N1cnJl
bnRMYXllckluZGV4SGlzdG9yeTsKKyAgICBmcmllbmQgc3RydWN0IENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wNzY3ZmYwZTc2NmM5NjM0MDYzNTdlZGVmMjliYzZkNWE5MDg5MmY4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckl0ZXJhdG9yLmNwcApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVk
ZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisj
aW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllcklt
cGwuaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZT4KK3ZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2lu
KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBw
b3MpCit7CisgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gMDsKKyAgICBw
b3MuY3VycmVudExheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpMYXll
ckluZGV4UmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsKKworICAgIG1faGlnaGVzdFRh
cmdldFJlbmRlclN1cmZhY2VMYXllciA9IDA7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXll
clR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpCYWNrVG9Gcm9udDo6ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlw
ZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit7CisgICAgcG9zLnRhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6SW52YWxpZFRhcmdl
dFJlbmRlclN1cmZhY2VMYXllckluZGV4OworICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IDA7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZh
Y2VUeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6bmV4dChD
Q0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9z
KQoreworICAgIC8vIElmIHRoZSBjdXJyZW50IGxheWVyIGhhcyBhIFJTLCBtb3ZlIHRvIGl0cyBs
YXllciBsaXN0LiBPdGhlcndpc2UsIHZpc2l0IHRoZSBuZXh0IGxheWVyIGluIHRoZSBjdXJyZW50
IFJTIGxheWVyIGxpc3QuCisgICAgaWYgKHBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJp
YnV0aW5nUmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgIC8vIFNhdmUgb3VyIHBvc2l0aW9uIGlu
IHRoZSBjaGlsZExheWVyIGxpc3QgZm9yIHRoZSBSZW5kZXJTdXJmYWNlLCB0aGVuIGp1bXAgdG8g
dGhlIG5leHQgUmVuZGVyU3VyZmFjZS4gU2F2ZSB3aGVyZSB3ZQorICAgICAgICAvLyBjYW1lIGZy
b20gaW4gdGhlIG5leHQgUmVuZGVyU3VyZmFjZSBzbyB3ZSBjYW4gZ2V0IGJhY2sgdG8gaXQuCisg
ICAgICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5kZXhIaXN0
b3J5ID0gcG9zLmN1cnJlbnRMYXllckluZGV4OworICAgICAgICBpbnQgcHJldmlvdXNUYXJnZXRS
ZW5kZXJTdXJmYWNlTGF5ZXIgPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisK
KyAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gKyttX2hpZ2hlc3RU
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9
IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFsdWU6OkxheWVySW5kZXhSZXByZXNlbnRpbmdUYXJn
ZXRSZW5kZXJTdXJmYWNlOworCisgICAgICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1f
dGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5ID0gcHJldmlvdXNUYXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKytwb3MuY3VycmVudExheWVy
SW5kZXg7CisKKyAgICAgICAgaW50IHRhcmdldFJlbmRlclN1cmZhY2VOdW1DaGlsZHJlbiA9IHBv
cy50YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCk7CisgICAgICAgIHdoaWxlIChw
b3MuY3VycmVudExheWVySW5kZXggPT0gdGFyZ2V0UmVuZGVyU3VyZmFjZU51bUNoaWxkcmVuKSB7
CisgICAgICAgICAgICAvLyBKdW1wIGJhY2sgdG8gdGhlIHByZXZpb3VzIFJlbmRlclN1cmZhY2Us
IGFuZCBnZXQgYmFjayB0aGUgcG9zaXRpb24gd2hlcmUgd2Ugd2VyZSBpbiB0aGF0IGxpc3QsIGFu
ZCBtb3ZlIHRvIHRoZSBuZXh0IHBvc2l0aW9uIHRoZXJlLgorICAgICAgICAgICAgaWYgKCFwb3Mu
dGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgpIHsKKyAgICAgICAgICAgICAgICAvLyBFbmQg
b2YgdGhlIGxpc3QKKyAgICAgICAgICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
SW5kZXggPSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVySW5kZXg7CisgICAgICAgICAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4
ID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpLT5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeTsKKyAgICAgICAg
ICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1f
Y3VycmVudExheWVySW5kZXhIaXN0b3J5ICsgMTsKKworICAgICAgICAgICAgdGFyZ2V0UmVuZGVy
U3VyZmFjZU51bUNoaWxkcmVuID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbigpLnNp
emUoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlw
ZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlv
bnM6OkZyb250VG9CYWNrOjpiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUs
IFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQoreworICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNl
TGF5ZXJJbmRleCA9IDA7CisgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gcG9zLnRhcmdldFJl
bmRlclN1cmZhY2VDaGlsZHJlbigpLnNpemUoKSAtIDE7CisgICAgZ29Ub0hpZ2hlc3RJblN1YnRy
ZWUocG9zKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVu
ZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNr
OjplbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlw
ZT4mIHBvcykKK3sKKyAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
SW5kZXg7CisgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gMDsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDTGF5
ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0
aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit7CisgICAgLy8gTW92ZXMg
dG8gdGhlIHByZXZpb3VzIGxheWVyIGluIHRoZSBjdXJyZW50IFJTIGxheWVyIGxpc3QuIFRoZW4g
d2UgY2hlY2sgaWYgdGhlCisgICAgLy8gbmV3IGN1cnJlbnQgbGF5ZXIgaGFzIGl0cyBvd24gUlMs
IGluIHdoaWNoIGNhc2UgdGhlcmUgYXJlIHRoaW5ncyBpbiB0aGF0IFJTIGxheWVyIGxpc3QgdGhh
dCBhcmUgaGlnaGVyLCBzbworICAgIC8vIHdlIGZpbmQgdGhlIGhpZ2hlc3QgbGF5ZXIgaW4gdGhh
dCBzdWJ0cmVlLgorICAgIC8vIElmIHdlIG1vdmUgYmFjayBwYXN0IHRoZSBmcm9udCBvZiB0aGUg
bGlzdCwgd2UganVtcCB1cCB0byB0aGUgcHJldmlvdXMgUlMgbGF5ZXIgbGlzdCwgcGlja2luZyB1
cCBhZ2FpbiB3aGVyZSB3ZQorICAgIC8vIGhhZCBwcmV2aW91c2x5IHJlY3Vyc2VkIGludG8gdGhl
IGN1cnJlbnQgUlMgbGF5ZXIgbGlzdC4KKworICAgIGlmICghcG9zLmN1cnJlbnRMYXllclJlcHJl
c2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgLy8gU3VidHJhY3Rpbmcgb25l
IGhlcmUgd2lsbCBldmVudHVhbGx5IGNhdXNlIHRoZSBjdXJyZW50IGxheWVyIHRvIGJlY29tZSB0
aGF0IGxheWVyCisgICAgICAgIC8vIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IHJlbmRlciBzdXJm
YWNlLgorICAgICAgICAtLXBvcy5jdXJyZW50TGF5ZXJJbmRleDsKKyAgICAgICAgZ29Ub0hpZ2hl
c3RJblN1YnRyZWUocG9zKTsKKyAgICB9IGVsc2UgeworICAgICAgICB3aGlsZSAocG9zLmN1cnJl
bnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAgICAgICAgIGlm
ICghcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4KSB7CisgICAgICAgICAgICAgICAg
Ly8gRW5kIG9mIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6SW52YWxpZFRhcmdl
dFJlbmRlclN1cmZhY2VMYXllckluZGV4OworICAgICAgICAgICAgICAgIHBvcy5jdXJyZW50TGF5
ZXJJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gcG9zLnRhcmdldFJl
bmRlclN1cmZhY2UoKS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3Rvcnk7Cisg
ICAgICAgICAgICBwb3MuY3VycmVudExheWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpLT5tX2N1cnJlbnRMYXllckluZGV4SGlzdG9yeTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+
Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdElu
U3VidHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VU
eXBlPiYgcG9zKQoreworICAgIGlmIChwb3MuY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJl
bmRlclN1cmZhY2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdoaWxlIChwb3MuY3VycmVudExh
eWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAvLyBT
YXZlIHdoZXJlIHdlIHdlcmUgaW4gdGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2UsIG1vdmUgdG8g
dGhlIG5leHQgb25lLCBhbmQgc2F2ZSB0aGUgdGFyZ2V0IHN1cmZhY2UgdGhhdCB3ZQorICAgICAg
ICAvLyBjYW1lIGZyb20gdGhlcmUgc28gd2UgY2FuIGdvIGJhY2sgdG8gaXQuCisgICAgICAgIHBv
cy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5kZXhIaXN0b3J5ID0gcG9z
LmN1cnJlbnRMYXllckluZGV4OworICAgICAgICBpbnQgcHJldmlvdXNUYXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXIgPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisKKyAgICAgICAg
Zm9yIChMYXllclR5cGUqIGxheWVyID0gcG9zLmN1cnJlbnRMYXllcigpOyBwb3MudGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVyKCkgIT0gbGF5ZXI7ICsrcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXll
ckluZGV4KSB7IH0KKyAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gcG9zLnRhcmdldFJl
bmRlclN1cmZhY2VDaGlsZHJlbigpLnNpemUoKSAtIDE7CisKKyAgICAgICAgcG9zLnRhcmdldFJl
bmRlclN1cmZhY2UoKS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3RvcnkgPSBw
cmV2aW91c1RhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICB9Cit9CisKKy8vIERlY2xhcmUg
ZWFjaCBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zIGZvciBMYXllckNocm9taXVtIGFuZCBDQ0xheWVy
SW1wbCBjbGFzc2VzIHNvIHRoYXQgdGhleSBhcmUgbGlua2VkLgordGVtcGxhdGUgdm9pZCBDQ0xh
eWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9z
aXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6ZW5kKENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4mKTsKK3Rl
bXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQoQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVt
PiYpOworCit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250
OjpiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJm
YWNlPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9u
dDo6ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZh
Y2U+Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250
OjpuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZh
Y2U+Jik7CisKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0Jh
Y2s6Om5leHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpG
cm9udFRvQmFjazo6ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJl
bmRlclN1cmZhY2VDaHJvbWl1bT4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0
aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyQ2hy
b21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0
ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJ
dGVyYXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4mKTsK
KwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6bmV4
dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPiYp
OwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6ZW5k
KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7
Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdp
bihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPiYp
OwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6Z29U
b0hpZ2hlc3RJblN1YnRyZWUoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIEND
UmVuZGVyU3VyZmFjZT4mKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44ZjQxMmM0NGQzZDE0MDQ3MGZkMTJhNzI3YjkxNGU0ZDQ2ZmJlYjE0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckl0ZXJhdG9yLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQ0NMYXllckl0ZXJhdG9yX2gKKyNkZWZpbmUgQ0NMYXllckl0ZXJhdG9yX2gKKworI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvclBvc2l0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhlc2UgY2xhc3NlcyBwcm92aWRlIG1l
YW5zIHRvIGl0ZXJhdGUgb3ZlciB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVlLgorCisvLyBF
eGFtcGxlIGNvZGUgZm9sbG93cywgZm9yIGEgdHJlZSBvZiBMYXllckNocm9taXVtL1JlbmRlclN1
cmZhY2VDaHJvbWl1bSBvYmplY3RzLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisvLworLy8gdm9p
ZCBkb1N0dWZmT25MYXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQorLy8geworLy8gICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJh
dG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisvLworLy8gICAgIEND
TGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKKy8vICAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBD
Q0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9
IGVuZDsgKytpdCkgeworLy8gICAgICAgICAvLyBPbmx5IG9uZSBvZiB0aGVzZSB3aWxsIGJlIHRy
dWUKKy8vICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpCisv
LyAgICAgICAgICAgICBmb28oKml0KTsgLy8gKml0IGlzIGEgbGF5ZXIgcmVwcmVzZW50aW5nIGEg
dGFyZ2V0IFJlbmRlclN1cmZhY2UKKy8vICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNDb250cmli
dXRpbmdSZW5kZXJTdXJmYWNlKCkpCisvLyAgICAgICAgICAgICBiYXIoKml0KTsgLy8gKml0IGlz
IGEgbGF5ZXIgcmVwcmVzZW50aW5nIGEgUmVuZGVyU3VyZmFjZSB0aGF0IGNvbnRyaWJ1dGVzIHRv
IHRoZSBsYXllcidzIHRhcmdldCBSZW5kZXJTdXJmYWNlCisvLyAgICAgICAgIGlmIChpdC5yZXBy
ZXNlbnRzSXRzZWxmKCkpCisvLyAgICAgICAgICAgICBiYXooKml0KTsgLy8gKml0IGlzIGEgbGF5
ZXIgcmVwcmVzZW50aW5nIGl0c2VsZiwgYXMgaXQgY29udHJpYnV0ZXMgdG8gaXRzIG93biB0YXJn
ZXQgUmVuZGVyU3VyZmFjZQorLy8gICAgIH0KKy8vIH0KKworLy8gQSBSZW5kZXJTdXJmYWNlIFIg
bWF5IGJlIHJlZmVycmVkIHRvIGluIG9uZSBvZiB0d28gZGlmZmVyZW50IGNvbnRleHRzLiBPbmUg
UmVuZGVyU3VyZmFjZSBpcyAiY3VycmVudCIgYXQgYW55IHRpbWUsIGZvcgorLy8gd2hhdGV2ZXIg
b3BlcmF0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZC4gVGhpcyBjdXJyZW50IHN1cmZhY2UgaXMgcmVm
ZXJyZWQgdG8gYXMgYSB0YXJnZXQgc3VyZmFjZS4gRm9yIGV4YW1wbGUsIHdoZW4gUiBpcworLy8g
YmVpbmcgcGFpbnRlZCBpdCB3b3VsZCBiZSB0aGUgdGFyZ2V0IHN1cmZhY2UuIE9uY2UgUiBoYXMg
YmVlbiBwYWludGVkLCBpdHMgY29udGVudHMgbWF5IGJlIGluY2x1ZGVkIGludG8gYW5vdGhlcgor
Ly8gc3VyZmFjZSBTLiBXaGlsZSBTIGlzIGNvbnNpZGVyZWQgdGhlIHRhcmdldCBzdXJmYWNlIHdo
ZW4gaXQgaXMgYmVpbmcgcGFpbnRlZCwgUiBpcyBjYWxsZWQgYSBjb250cmlidXRpbmcgc3VyZmFj
ZQorLy8gaW4gdGhpcyBjb250ZXh0IGFzIGl0IGNvbnRyaWJ1dGVzIHRvIHRoZSBjb250ZW50IG9m
IHRoZSB0YXJnZXQgc3VyZmFjZSBTLgorLy8KKy8vIFRoZSBpdGVyYXRvcidzIGN1cnJlbnQgcG9z
aXRpb24gaW4gdGhlIHRyZWUgYWx3YXlzIHBvaW50cyB0byBzb21lIGxheWVyLiBUaGUgc3RhdGUg
b2YgdGhlIGl0ZXJhdG9yIGluZGljYXRlcyB0aGUgcm9sZSBvZiB0aGUKKy8vIGxheWVyLCBhbmQg
d2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0aHJlZSBzdGF0ZXMuIEEgc2luZ2xlIGxheWVy
IEwgd2lsbCBhcHBlYXIgaW4gdGhlIGl0ZXJhdGlvbiBwcm9jZXNzIGluIGF0IGxlYXN0IG9uZSwK
Ky8vIGFuZCBwb3NzaWJseSBhbGwsIG9mIHRoZXNlIHN0YXRlcy4KKy8vIDEuIFJlcHJlc2VudGlu
ZyB0aGUgdGFyZ2V0IHN1cmZhY2U6IFRoZSBpdGVyYXRvciBpbiB0aGlzIHN0YXRlLCBwb2ludGlu
ZyBhdCBsYXllciBMLCBpbmRpY2F0ZXMgdGhhdCB0aGUgdGFyZ2V0IFJlbmRlclN1cmZhY2UKKy8v
IGlzIG5vdyB0aGUgc3VyZmFjZSBvd25lZCBieSBMLiBUaGlzIHdpbGwgb2NjdXIgZXhhY3RseSBv
bmNlIGZvciBlYWNoIFJlbmRlclN1cmZhY2UgaW4gdGhlIHRyZWUuCisvLyAyLiBSZXByZXNlbnRp
bmcgYSBjb250cmlidXRpbmcgc3VyZmFjZTogVGhlIGl0ZXJhdG9yIGluIHRoaXMgc3RhdGUsIHBv
aW50aW5nIGF0IGxheWVyIEwsIHJlZmVycyB0byB0aGUgUmVuZGVyU3VyZmFjZSBvd25lZAorLy8g
YnkgTCBhcyBhIGNvbnRyaWJ1dGluZyBzdXJmYWNlLCB3aXRob3V0IGNoYW5naW5nIHRoZSBjdXJy
ZW50IHRhcmdldCBSZW5kZXJTdXJmYWNlLgorLy8gMy4gUmVwcmVzZW50aW5nIGl0c2VsZjogVGhl
IGl0ZXJhdG9yIGluIHRoaXMgc3RhdGUsIHBvaW50aW5nIGF0IGxheWVyIEwsIHJlZmVycyB0byB0
aGUgbGF5ZXIgaXRzZWxmLCBhcyBhIGNoaWxkIG9mIHRoZQorLy8gY3VycmVudCB0YXJnZXQgUmVu
ZGVyU3VyZmFjZS4KKy8vCisvLyBUaGUgQmFja1RvRnJvbnQgaXRlcmF0b3Igd2lsbCByZXR1cm4g
YSBsYXllciByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBzdXJmYWNlIGJlZm9yZSByZXR1cm5pbmcg
bGF5ZXJzIHJlcHJlc2VudGluZyB0aGVtc2VsdmVzCisvLyBhcyBjaGlsZHJlbiBvZiB0aGUgY3Vy
cmVudCB0YXJnZXQgc3VyZmFjZS4gV2hlcmVhcyB0aGUgRnJvbnRUb0JhY2sgb3JkZXJpbmcgd2ls
bCBpdGVyYXRlIG92ZXIgY2hpbGRyZW4gbGF5ZXJzIG9mIGEgc3VyZmFjZQorLy8gYmVmb3JlIHRo
ZSBsYXllciByZXByZXNlbnRpbmcgdGhlIHN1cmZhY2UgYXMgYSB0YXJnZXQgc3VyZmFjZS4KKy8v
CisvLyBUbyB1c2UgdGhlIGl0ZXJhdG9yczoKKy8vCisvLyBDcmVhdGUgYSBzdGVwcGluZyBpdGVy
YXRvciBhbmQgZW5kIGl0ZXJhdG9yIGJ5IGNhbGxpbmcgQ0NMYXllckl0ZXJhdG9yOjpiZWdpbigp
IGFuZCBDQ0xheWVySXRlcmF0b3I6OmVuZCgpIGFuZCBwYXNzaW5nIGluIHRoZQorLy8gbGlzdCBv
ZiBsYXllcnMgb3duaW5nIHRhcmdldCBSZW5kZXJTdXJmYWNlcy4gU3RlcCB0aHJvdWdoIHRoZSB0
cmVlIGJ5IGluY3JlbWVudGluZyB0aGUgc3RlcHBpbmcgaXRlcmF0b3Igd2hpbGUgaXQgaXMgIT0g
dG8KKy8vIHRoZSBlbmQgaXRlcmF0b3IuIEF0IGVhY2ggc3RlcCB0aGUgaXRlcmF0b3Iga25vd3Mg
d2hhdCB0aGUgbGF5ZXIgaXMgcmVwcmVzZW50aW5nLCBhbmQgeW91IGNhbiBxdWVyeSB0aGUgaXRl
cmF0b3IgdG8gZGVjaWRlCisvLyB3aGF0IGFjdGlvbnMgdG8gcGVyZm9ybSB3aXRoIHRoZSBsYXll
ciBnaXZlbiB3aGF0IGl0IHJlcHJlc2VudHMuCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gQW4g
aXRlcmF0b3IgY2xhc3MgZm9yIHdhbGtpbmcgb3ZlciBsYXllcnMgaW4gdGhlIFJlbmRlclN1cmZh
Y2UtTGF5ZXIgdHJlZS4KK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJl
bmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBJdGVyYXRvckFjdGlvblR5cGU+CitjbGFzcyBDQ0xh
eWVySXRlcmF0b3IgeworICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVu
ZGVyU3VyZmFjZVR5cGUsIEl0ZXJhdG9yQWN0aW9uVHlwZT4gQ0NMYXllckl0ZXJhdG9yVHlwZTsK
KworcHVibGljOgorICAgIENDTGF5ZXJJdGVyYXRvcigpIHsgfQorCisgICAgc3RhdGljIENDTGF5
ZXJJdGVyYXRvclR5cGUgYmVnaW4oY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpIHsgcmV0dXJuIENDTGF5ZXJJdGVyYXRvclR5cGUocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgdHJ1ZSk7IH0KKyAgICBzdGF0aWMgQ0NMYXllckl0ZXJhdG9yVHlw
ZSBlbmQoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QpIHsgcmV0dXJuIENDTGF5ZXJJdGVyYXRvclR5cGUocmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZmFsc2UpOyB9CisKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlJiBvcGVyYXRvcisrKCkgeyBB
U1NFUlQobV9hY3Rpb25zKTsgbV9hY3Rpb25zLT5uZXh0KG1fcG9zaXRpb24pOyByZXR1cm4gKnRo
aXM7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24gPT0gb3RoZXIubV9wb3NpdGlvbjsgfQorICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBDQ0xheWVySXRlcmF0b3JUeXBlJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIExheWVyVHlwZSogb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyKCk7IH0KKyAgICBMYXll
clR5cGUqIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVy
KCk7IH0KKworICAgIGJvb2wgcmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uLmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJm
YWNlKCk7IH0KKyAgICBib29sIHJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkg
Y29uc3QgeyByZXR1cm4gIXJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgJiYgbV9wb3Np
dGlvbi5jdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpOyB9
CisgICAgYm9vbCByZXByZXNlbnRzSXRzZWxmKCkgY29uc3QgeyByZXR1cm4gIXJlcHJlc2VudHNU
YXJnZXRSZW5kZXJTdXJmYWNlKCkgJiYgIXJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJm
YWNlKCk7IH0KKworICAgIExheWVyVHlwZSogdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9wb3NpdGlvbi50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKTsgfQorCitw
cml2YXRlOgorICAgIENDTGF5ZXJJdGVyYXRvcihjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlw
ZT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgYm9vbCBzdGFydCkKKyAgICAgICAgOiBtX3Bv
c2l0aW9uKHJlbmRlclN1cmZhY2VMYXllckxpc3QpCisgICAgICAgICwgbV9hY3Rpb25zKGFkb3B0
UHRyKG5ldyBJdGVyYXRvckFjdGlvblR5cGUoKSkpCisgICAgeworICAgICAgICBpZiAoc3RhcnQg
JiYgIXJlbmRlclN1cmZhY2VMYXllckxpc3QtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fYWN0
aW9ucy0+YmVnaW4obV9wb3NpdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYWN0
aW9ucy0+ZW5kKG1fcG9zaXRpb24pOworICAgIH0KKworICAgIENDTGF5ZXJJdGVyYXRvclBvc2l0
aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+IG1fcG9zaXRpb247CisgICAgT3duUHRy
PEl0ZXJhdG9yQWN0aW9uVHlwZT4gbV9hY3Rpb25zOworfTsKKworLy8gT3JkZXJpbmdzIGZvciBp
dGVyYXRpbmcgb3ZlciB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVlLgorc3RydWN0IENDTGF5
ZXJJdGVyYXRvckFjdGlvbnMgeworICAgIC8vIFdhbGtzIGxheWVycyBzb3J0ZWQgYnkgei1vcmRl
ciBmcm9tIGJhY2sgdG8gZnJvbnQuCisgICAgY2xhc3MgQmFja1RvRnJvbnQgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVy
U3VyZmFjZVR5cGU+CisgICAgICAgIHZvaWQgYmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248
TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9p
ZCBlbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlw
ZT4mKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBS
ZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0
aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBpbnQgbV9oaWdoZXN0VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgIH07CisKKyAg
ICAvLyBXYWxrcyBsYXllcnMgc29ydGVkIGJ5IHotb3JkZXIgZnJvbSBmcm9udCB0byBiYWNrCisg
ICAgY2xhc3MgRnJvbnRUb0JhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CisgICAgICAgIHZv
aWQgYmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNl
VHlwZT4mKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFt
ZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBlbmQoQ0NMYXllckl0ZXJhdG9yUG9z
aXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAg
ICAgdm9pZCBuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3Vy
ZmFjZVR5cGU+Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KKyAgICAgICAgdm9pZCBnb1Rv
SGlnaGVzdEluU3VidHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRl
clN1cmZhY2VUeXBlPiYpOworICAgIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvclBvc2l0aW9uLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjFmNjNjNDVmNzQyYzAzYzYwZGVmOWIyMTczODQwYWZiODZjMzI2MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJdGVyYXRvclBvc2l0aW9uLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbl9oCisjZGVmaW5lIENDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uX2gKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorCisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBOb24tdGVtcGxhdGVkIGNvbnN0YW50cworc3RydWN0IENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uVmFsdWUgeworICAgIHN0YXRpYyBjb25zdCBpbnQgSW52YWxpZFRh
cmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gLTE7CisgICAgLy8gVGhpcyBtdXN0IGJlIC0x
IHNpbmNlIHRoZSBpdGVyYXRvciBhY3Rpb24gY29kZSBhc3N1bWVzIHRoYXQgdGhpcyB2YWx1ZSBj
YW4gYmUKKyAgICAvLyByZWFjaGVkIGJ5IHN1YnRyYWN0aW5nIG9uZSBmcm9tIHRoZSBwb3NpdGlv
biBvZiB0aGUgZmlyc3QgbGF5ZXIgaW4gdGhlIGN1cnJlbnQKKyAgICAvLyB0YXJnZXQgc3VyZmFj
ZSdzIGNoaWxkIGxheWVyIGxpc3QsIHdoaWNoIGlzIDAuCisgICAgc3RhdGljIGNvbnN0IGludCBM
YXllckluZGV4UmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZSA9IC0xOworfTsKKworLy8g
QSBzdHJ1Y3QgdG8gaG9sZCB0aGUgaXRlcmF0b3IncyBjdXJyZW50IHBvc2l0aW9uLCB3aGljaCBp
cyBwYXNzZWQgdG8gdGhlIHZhcmlvdXMgQ0NMYXllckl0ZXJhdG9yQWN0aW9uIGZ1bmN0aW9ucywg
Zm9yIHRoZW0gdG8KKy8vIHJlYWQgYW5kIHVwZGF0ZS4gVGhpcyBzdHJ1Y3QgZXhpc3RzIHNvIHRo
ZSB0ZW1wbGF0ZWQgYWN0aW9uIGZ1bmN0aW9ucyBkb24ndCBuZWVkIHRvIGFjY2VzcyB0aGUgQ0NM
YXllckl0ZXJhdG9yIGNsYXNzLgorLy8KKy8vIFRoZXJlIGlzIGEgMToxIHJlbGF0aW9uc2hpcCBi
ZXR3ZWVuIGFuIGluc3RhbmNlIG9mIHRoZSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbiBjbGFzcyBh
bmQgYSBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGb28gY2xhc3MsCisvLyBzbyBhbiBpdGVyYXRv
ciBhY3Rpb24gY2xhc3MgY2FuIGhvbGQgZXh0cmEgcG9zaXRpb24gZGF0YSwgaWYgcmVxdWlyZWQs
IGluIGl0cyBvd24gY2xhc3MgaW5zdGFuY2UuCisvLworLy8gVGhlIGN1cnJlbnQgcG9zaXRpb24g
b2YgdGhlIGl0ZXJhdG9yIGlzIGhlbGQgaW4gdHdvIGludGVnZXIgdmFyaWFibGVzLgorLy8gLSBU
aGUgdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggaXMgYSBwb3NpdGlvbiBpbiB0aGUgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC4gVGhpcyBwb2ludHMgdG8gYSBsYXllciB3aGljaCBvd25zIHRo
ZSBjdXJyZW50CisvLyB0YXJnZXQgc3VyZmFjZS4gVGhpcyBpcyBhIHZhbHVlIGZyb20gMCB0byBu
LTEgKG4gPSBzaXplIG9mIHJlbmRlclN1cmZhY2VMYXllckxpc3QgPSBudW1iZXIgb2Ygc3VyZmFj
ZXMpLiBBIHZhbHVlIG91dHNpZGUgb2YKKy8vIHRoaXMgcmFuZ2UgKGZvciBleGFtcGxlLCBDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
SW5kZXgpIGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBwb3NpdGlvbgorLy8gb3V0c2lkZSB0aGUgYm91
bmRzIG9mIHRoZSB0cmVlLgorLy8gLSBUaGUgY3VycmVudExheWVySW5kZXggaXMgYSBwb3NpdGlv
biBpbiB0aGUgbGlzdCBvZiBsYXllcnMgdGhhdCBhcmUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQg
dGFyZ2V0IHN1cmZhY2UuIFdoZW4gcG9pbnRpbmcgdG8KKy8vIG9uZSBvZiB0aGVzZSBsYXllcnMs
IHRoaXMgaXMgYSB2YWx1ZSBmcm9tIDAgdG8gbi0xIChuID0gbnVtYmVyIG9mIGNoaWxkcmVuKS4g
U2luY2UgdGhlIGl0ZXJhdG9yIG11c3QgYWxzbyBzdG9wIGF0IHRoZSBsYXllcnMKKy8vIHJlcHJl
c2VudGluZyB0aGUgdGFyZ2V0IHN1cmZhY2UsIHRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIHRoZSBj
dXJyZW50TGF5ZXJJbmRleCB0byBhIHZhbHVlIG9mCisvLyBDQ0xheWVySXRlcmF0b3JQb3NpdGlv
blZhbHVlOjpMYXllclJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2UuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorc3RydWN0IEND
TGF5ZXJJdGVyYXRvclBvc2l0aW9uIHsKKyAgICBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbigpIDog
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCgwKSB7IH0KKyAgICBleHBsaWNpdCBDQ0xheWVySXRlcmF0
b3JQb3NpdGlvbihjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCkgOiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KHJlbmRlclN1cmZhY2VMYXllckxp
c3QpIHsgfQorCisgICAgaW5saW5lIExheWVyVHlwZSogY3VycmVudExheWVyKCkgY29uc3QgeyBy
ZXR1cm4gY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSA/IHRhcmdl
dFJlbmRlclN1cmZhY2VMYXllcigpIDogdGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKClbY3Vy
cmVudExheWVySW5kZXhdLmdldCgpOyB9CisKKyAgICBpbmxpbmUgYm9vbCBjdXJyZW50TGF5ZXJS
ZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJU
eXBlPihjdXJyZW50TGF5ZXIoKSwgdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCktPmlkKCkpOyB9
CisgICAgaW5saW5lIGJvb2wgY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZh
Y2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50TGF5ZXJJbmRleCA9PSBDQ0xheWVySXRlcmF0b3JQ
b3NpdGlvblZhbHVlOjpMYXllckluZGV4UmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsg
fQorCisgICAgaW5saW5lIExheWVyVHlwZSogdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgY29u
c3QgeyByZXR1cm4gKCpyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KVt0YXJnZXRSZW5kZXJTdXJmYWNl
TGF5ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBpbmxpbmUgUmVuZGVyU3VyZmFjZVR5cGUqIHRhcmdl
dFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIo
KS0+cmVuZGVyU3VyZmFjZSgpOyB9CisgICAgaW5saW5lIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5
ZXJUeXBlPiA+JiB0YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiB0
YXJnZXRSZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpOyB9CisKKyAgICBpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9PSBvdGhl
ci50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleAorICAgICAgICAgICAgJiYgY3VycmVudExh
eWVySW5kZXggPT0gb3RoZXIuY3VycmVudExheWVySW5kZXg7CisgICAgfQorCisgICAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAg
aW50IHRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4OworICAgIGludCBjdXJyZW50TGF5ZXJJ
bmRleDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBmODU3NGVkNzg5N2ZhYmRkMWEwMWVhNjI2MzQwNzM2
NzljM2ZiYTI2Li44NjYzZWMwYWMyY2RmMzZiMjQ3MjI4MWNmZmFlYTE5NDAyMjVhMjNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5j
bHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmgi
CkBAIC00MzEsNTcgKzQzMiw0MCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5k
UmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyUwogCiB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgUGFpbnRUeXBlIHBhaW50VHlwZSkKIHsKLSAgICBmb3IgKGludCBz
dXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJ
bmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVu
ZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdl
dCgpOwotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5k
ZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1
cmZhY2UpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7Ci0K
LSAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFj
ZUxheWVyLCBwYWludFR5cGUpOwotCi0gICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0
ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbGF5
ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgp
IHsKLSAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5k
ZXhdLmdldCgpOwotCi0gICAgICAgICAgICAvLyBMYXllcnMgdGhhdCBzdGFydCBhIG5ldyByZW5k
ZXIgc3VyZmFjZSB3aWxsIGJlIHBhaW50ZWQgd2hlbiB0aGUgcmVuZGVyCi0gICAgICAgICAgICAv
LyBzdXJmYWNlJ3MgbGlzdCBpcyBwcm9jZXNzZWQuCi0gICAgICAgICAgICBpZiAoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxMYXllckNocm9t
aXVtPihsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgp
KTsKLQotICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5ZXIsIHBhaW50VHlwZSk7
CisgICAgLy8gVXNlIEZyb250VG9CYWNrIHRvIGFsbG93IGZvciB0ZXN0aW5nIG9jY2x1c2lvbiBh
bmQgcGVyZm9ybWluZyBjdWxsaW5nIGR1cmluZyB0aGUgdHJlZSB3YWxrLgorICAgIHR5cGVkZWYg
Q0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NM
YXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisK
KyAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgm
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0
ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJT
dXJmYWNlKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3
T3BhY2l0eSgpKTsKKyAgICAgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJm
YWNlKCppdCwgcGFpbnRUeXBlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpdC5yZXByZXNlbnRzSXRz
ZWxmKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmJvdW5kcygpLmlzRW1wdHkoKSk7Cisg
ICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eSgqaXQsIHBhaW50VHlwZSk7CiAgICAgICAg
IH0KICAgICB9CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRh
dGVyKQogewotICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IG1fdXBkYXRlTGlzdC5zaXplKCkg
LSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIExheWVy
Q2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IG1fdXBkYXRlTGlzdFtzdXJmYWNlSW5kZXhd
LmdldCgpOwotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBy
ZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgQVNTRVJUKHJlbmRl
clN1cmZhY2UpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7
Ci0KLSAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpCi0gICAgICAg
ICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwotCi0gICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5
ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnJl
cGxpY2FMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5yZXBs
aWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxh
eWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoY29udGV4dCwgdXBkYXRlcik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0
IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Qu
c2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVy
ID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwotCi0gICAgICAgICAgICBpZiAoQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxMYXllckNo
cm9taXVtPihsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoY29udGV4dCwgdXBkYXRlcik7Ci0gICAgICAgIH0KKyAgICAvLyBVc2UgQmFja1RvRnJvbnQg
c2luY2UgaXQncyBjaGVhcCBhbmQgdGhpcyBpc24ndCBvcmRlci1kZXBlbmRlbnQuCisgICAgdHlw
ZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVt
LCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0ZXJhdG9yVHlw
ZTsKKworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6
ZW5kKCZtX3VwZGF0ZUxpc3QpOworICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IEND
TGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZtX3VwZGF0ZUxpc3QpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKKyAg
ICAgICAgICAgIGlmIChpdC0+bWFza0xheWVyKCkpCisgICAgICAgICAgICAgICAgaXQtPm1hc2tM
YXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOworCisg
ICAgICAgICAgICBpZiAoaXQtPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICAgICAgaXQt
PnJlcGxpY2FMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0
ZXIpOworICAgICAgICAgICAgICAgIGlmIChpdC0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigp
KQorICAgICAgICAgICAgICAgICAgICBpdC0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT51
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkKKyAgICAgICAgICAg
IGl0LT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggZmMw
OGY3MWVlNmI2YzJmZTEzOTQ3N2MyYjlkZmI4YTMxZDQ0OTlhZi4uYjRlN2JlNDE1MjIxYzFmNTg4
YTRlNDk3ODZiY2UyMzFkNzk0OTYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIK
IApAQCAtNDY5LDE1ICs0NzAsMTQgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKIHRlbXBsYXRl
PHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CiBzdGF0aWMg
dm9pZCB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllclR5cGU+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7Ci0gICAgZm9y
IChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBz
dXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIExheWVyVHlwZSog
cmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhd
LmdldCgpOwotICAgICAgICBSZW5kZXJTdXJmYWNlVHlwZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRl
clN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotCi0gICAgICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJUeXBlPiA+JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlz
dC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgewotICAgICAgICAgICAgTGF5ZXJUeXBlKiBsYXllciA9
IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJs
ZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVy
UmVjdDxMYXllclR5cGU+KGxheWVyKTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5
ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOworICAgIC8vIFVzZSBCYWNrVG9Gcm9udCBzaW5jZSBp
dCdzIGNoZWFwIGFuZCB0aGlzIGlzbid0IG9yZGVyLWRlcGVuZGVudC4KKyAgICB0eXBlZGVmIEND
TGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBDQ0xheWVySXRlcmF0
b3JBY3Rpb25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworICAgIENDTGF5
ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKKyAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVy
SXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBpZiAoIWl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkp
IHsKKyAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdDxMYXllclR5cGU+KCppdCk7CisgICAg
ICAgICAgICBpdC0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKICAgICAg
ICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggYThlODdhOWY5
YmVhNWQ5YmI0ZTgxOGRmNTBkYzA4ZDllNzMyNmY4Yy4uYWI4Mzg2ZDVkYTIzZmE3MTAzMDU3YWYx
MTQwN2I0OWE0YTViNTYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTEyOSw2
ICsxMjksMTEgQEAgcHJpdmF0ZToKIAogICAgIC8vIFN0b3JlZCBpbiB0aGUgInN1cmZhY2Ugc3Bh
Y2UiIHdoZXJlIHRoaXMgZGFtYWdlIGNhbiBiZSB1c2VkIGZvciBzY2lzc29yaW5nLgogICAgIEZs
b2F0UmVjdCBtX2RhbWFnZVJlY3Q7CisKKyAgICAvLyBGb3IgQ0NMYXllckl0ZXJhdG9yQWN0aW9u
cworICAgIGludCBtX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeTsKKyAgICBp
bnQgbV9jdXJyZW50TGF5ZXJJbmRleEhpc3Rvcnk7CisgICAgZnJpZW5kIHN0cnVjdCBDQ0xheWVy
SXRlcmF0b3JBY3Rpb25zOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5k
ZXggOWIwZTljZTNhMWQzNmUwNTE3YjQ1ZGUxMTYzYjk2M2M4ZGMxYzE4MS4uY2E4ZmIzOWQyNGQ5
ZmQxYzJhNmQ4NmJkNzNlNzQ1MTM4NTFhYjFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCkBAIC02NCw2ICs2NCw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2VkVGlt
ZVNvdXJjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xs
ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCcsCisg
ICAgICAgICAgICAndGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDTGF5ZXJRdWFkVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJT
b3J0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVySXRlcmF0b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
ckl0ZXJhdG9yVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDdhNmZkNGRjNzkwYTgyZTM2YjE3ODcxYWMy
NWJkMzY2MTg4Mjc3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRv
ci5oIgorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5oIgorI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rl
c3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyA6OnRlc3Rpbmc6
Ok1vY2s7Cit1c2luZyA6OnRlc3Rpbmc6Ol87Cit1c2luZyA6OnRlc3Rpbmc6OkF0TGVhc3Q7Cit1
c2luZyA6OnRlc3Rpbmc6OkFueU51bWJlcjsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVGVzdExh
eWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUZXN0TGF5ZXJDaHJvbWl1bSgpKTsgfQorCisgICAgaW50IG1fY291bnRSZXByZXNlbnRp
bmdUYXJnZXRTdXJmYWNlOworICAgIGludCBtX2NvdW50UmVwcmVzZW50aW5nQ29udHJpYnV0aW5n
U3VyZmFjZTsKKyAgICBpbnQgbV9jb3VudFJlcHJlc2VudGluZ0l0c2VsZjsKKworICAgIHZpcnR1
YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2RyYXdzQ29udGVudDsgfQor
ICAgIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wgZHJhd3NDb250ZW50KSB7IG1fZHJhd3NDb250
ZW50ID0gZHJhd3NDb250ZW50OyB9CisKK3ByaXZhdGU6CisgICAgVGVzdExheWVyQ2hyb21pdW0o
KQorICAgICAgICA6IExheWVyQ2hyb21pdW0oMCkKKyAgICAgICAgLCBtX2RyYXdzQ29udGVudCh0
cnVlKQorICAgIHsKKyAgICAgICAgc2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAg
ICAgc2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CisgICAg
fQorCisgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKK307CisKKyNkZWZpbmUgRVhQRUNUX0NPVU5U
KGxheWVyLCB0YXJnZXQsIGNvbnRyaWIsIGl0c2VsZikgXAorICAgIEVYUEVDVF9FUSh0YXJnZXQs
IGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nVGFyZ2V0U3VyZmFjZSk7ICAgICAgICAgIFwKKyAg
ICBFWFBFQ1RfRVEoY29udHJpYiwgbGF5ZXItPm1fY291bnRSZXByZXNlbnRpbmdDb250cmlidXRp
bmdTdXJmYWNlKTsgICBcCisgICAgRVhQRUNUX0VRKGl0c2VsZiwgbGF5ZXItPm1fY291bnRSZXBy
ZXNlbnRpbmdJdHNlbGYpOworCit0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVt
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9C
YWNrPiBGcm9udFRvQmFjazsKK3R5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0s
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJv
bnQ+IEJhY2tUb0Zyb250OworCit2b2lkIHJlc2V0Q291bnRzKFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IHN1cmZhY2VJbmRleCA9IDA7IHN1cmZhY2VJbmRleCA8IHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
c2l6ZSgpOyArK3N1cmZhY2VJbmRleCkgeworICAgICAgICBUZXN0TGF5ZXJDaHJvbWl1bSogcmVu
ZGVyU3VyZmFjZUxheWVyID0gc3RhdGljX2Nhc3Q8VGVzdExheWVyQ2hyb21pdW0qPihyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCkpOworICAgICAgICBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1
cmZhY2UoKTsKKworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1fY291bnRSZXByZXNlbnRp
bmdUYXJnZXRTdXJmYWNlID0gLTE7CisgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bV9jb3Vu
dFJlcHJlc2VudGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2UgPSAtMTsKKyAgICAgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nSXRzZWxmID0gLTE7CisKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IHJlbmRlclN1cmZhY2UtPmxh
eWVyTGlzdCgpLnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAgICAgICBUZXN0TGF5ZXJD
aHJvbWl1bSogbGF5ZXIgPSBzdGF0aWNfY2FzdDxUZXN0TGF5ZXJDaHJvbWl1bSo+KHJlbmRlclN1
cmZhY2UtPmxheWVyTGlzdCgpW2xheWVySW5kZXhdLmdldCgpKTsKKworICAgICAgICAgICAgbGF5
ZXItPm1fY291bnRSZXByZXNlbnRpbmdUYXJnZXRTdXJmYWNlID0gLTE7CisgICAgICAgICAgICBs
YXllci0+bV9jb3VudFJlcHJlc2VudGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2UgPSAtMTsKKyAgICAg
ICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nSXRzZWxmID0gLTE7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgaXRlcmF0ZUZyb250VG9CYWNrKFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICByZXNldENvdW50cygq
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKEZy
b250VG9CYWNrIGl0ID0gRnJvbnRUb0JhY2s6OmJlZ2luKHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OyBpdCAhPSBGcm9udFRvQmFjazo6ZW5kKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOyArK2l0LCAr
K2NvdW50KSB7CisgICAgICAgIFRlc3RMYXllckNocm9taXVtKiBsYXllciA9IHN0YXRpY19jYXN0
PFRlc3RMYXllckNocm9taXVtKj4oKml0KTsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJn
ZXRSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2VudGlu
Z1RhcmdldFN1cmZhY2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNDb250cmli
dXRpbmdSZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2Vu
dGluZ0NvbnRyaWJ1dGluZ1N1cmZhY2UgPSBjb3VudDsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2Vu
dHNJdHNlbGYoKSkKKyAgICAgICAgICAgIGxheWVyLT5tX2NvdW50UmVwcmVzZW50aW5nSXRzZWxm
ID0gY291bnQ7CisgICAgfQorfQorCit2b2lkIGl0ZXJhdGVCYWNrVG9Gcm9udChWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgcmVz
ZXRDb3VudHMoKnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIGludCBjb3VudCA9IDA7Cisg
ICAgZm9yIChCYWNrVG9Gcm9udCBpdCA9IEJhY2tUb0Zyb250OjpiZWdpbihyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsgaXQgIT0gQmFja1RvRnJvbnQ6OmVuZChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsgKytpdCwgKytjb3VudCkgeworICAgICAgICBUZXN0TGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBz
dGF0aWNfY2FzdDxUZXN0TGF5ZXJDaHJvbWl1bSo+KCppdCk7CisgICAgICAgIGlmIChpdC5yZXBy
ZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKQorICAgICAgICAgICAgbGF5ZXItPm1fY291bnRS
ZXByZXNlbnRpbmdUYXJnZXRTdXJmYWNlID0gY291bnQ7CisgICAgICAgIGlmIChpdC5yZXByZXNl
bnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpKQorICAgICAgICAgICAgbGF5ZXItPm1fY291
bnRSZXByZXNlbnRpbmdDb250cmlidXRpbmdTdXJmYWNlID0gY291bnQ7CisgICAgICAgIGlmIChp
dC5yZXByZXNlbnRzSXRzZWxmKCkpCisgICAgICAgICAgICBsYXllci0+bV9jb3VudFJlcHJlc2Vu
dGluZ0l0c2VsZiA9IGNvdW50OworICAgIH0KK30KKworVEVTVChDQ0xheWVySXRlcmF0b3JUZXN0
LCBzaW1wbGVUcmVlKQoreworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVy
ID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJv
bWl1bT4gZmlyc3QgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRl
c3RMYXllckNocm9taXVtPiBzZWNvbmQgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiB0aGlyZCA9IFRlc3RMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGZvdXJ0aCA9IFRlc3RMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIHJvb3RMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFj
ZSgpOworCisgICAgcm9vdExheWVyLT5hZGRDaGlsZChmaXJzdCk7CisgICAgcm9vdExheWVyLT5h
ZGRDaGlsZChzZWNvbmQpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQodGhpcmQpOworICAgIHJv
b3RMYXllci0+YWRkQ2hpbGQoZm91cnRoKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBsYXllckxpc3Q7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQo
cm9vdExheWVyKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYpOworCisg
ICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBF
Q1RfQ09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7CisgICAgRVhQRUNUX0NPVU5UKGZpcnN0LCAt
MSwgLTEsIDIpOworICAgIEVYUEVDVF9DT1VOVChzZWNvbmQsIC0xLCAtMSwgMyk7CisgICAgRVhQ
RUNUX0NPVU5UKHRoaXJkLCAtMSwgLTEsIDQpOworICAgIEVYUEVDVF9DT1VOVChmb3VydGgsIC0x
LCAtMSwgNSk7CisKKyAgICBpdGVyYXRlRnJvbnRUb0JhY2soJnJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIEVYUEVDVF9DT1VOVChyb290TGF5ZXIsIDUsIC0xLCA0KTsKKyAgICBFWFBFQ1Rf
Q09VTlQoZmlyc3QsIC0xLCAtMSwgMyk7CisgICAgRVhQRUNUX0NPVU5UKHNlY29uZCwgLTEsIC0x
LCAyKTsKKyAgICBFWFBFQ1RfQ09VTlQodGhpcmQsIC0xLCAtMSwgMSk7CisgICAgRVhQRUNUX0NP
VU5UKGZvdXJ0aCwgLTEsIC0xLCAwKTsKKworfQorCitURVNUKENDTGF5ZXJJdGVyYXRvclRlc3Qs
IGNvbXBsZXhUcmVlKQoreworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVy
ID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJv
bWl1bT4gcm9vdDEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRl
c3RMYXllckNocm9taXVtPiByb290MiA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QzID0gVGVzdExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIxID0gVGVzdExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIy
ID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJv
bWl1bT4gcm9vdDIzID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxU
ZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIyMSA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IHJvb3QyMzEgPSBUZXN0TGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CisKKyAgICByb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKwor
ICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDEpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQo
cm9vdDIpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDMpOworICAgIHJvb3QyLT5hZGRD
aGlsZChyb290MjEpOworICAgIHJvb3QyLT5hZGRDaGlsZChyb290MjIpOworICAgIHJvb3QyLT5h
ZGRDaGlsZChyb290MjMpOworICAgIHJvb3QyMi0+YWRkQ2hpbGQocm9vdDIyMSk7CisgICAgcm9v
dDIzLT5hZGRDaGlsZChyb290MjMxKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiBsYXllckxpc3Q7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9v
dExheWVyKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYpOworCisgICAg
aXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1Rf
Q09VTlQocm9vdExheWVyLCAwLCAtMSwgMSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QxLCAtMSwg
LTEsIDIpOworICAgIEVYUEVDVF9DT1VOVChyb290MiwgLTEsIC0xLCAzKTsKKyAgICBFWFBFQ1Rf
Q09VTlQocm9vdDIxLCAtMSwgLTEsIDQpOworICAgIEVYUEVDVF9DT1VOVChyb290MjIsIC0xLCAt
MSwgNSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMjEsIC0xLCAtMSwgNik7CisgICAgRVhQRUNU
X0NPVU5UKHJvb3QyMywgLTEsIC0xLCA3KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIzMSwgLTEs
IC0xLCA4KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDMsIC0xLCAtMSwgOSk7CisKKyAgICBpdGVy
YXRlRnJvbnRUb0JhY2soJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9DT1VO
VChyb290TGF5ZXIsIDksIC0xLCA4KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDEsIC0xLCAtMSwg
Nyk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyLCAtMSwgLTEsIDYpOworICAgIEVYUEVDVF9DT1VO
VChyb290MjEsIC0xLCAtMSwgNSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMiwgLTEsIC0xLCA0
KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyMSwgLTEsIC0xLCAzKTsKKyAgICBFWFBFQ1RfQ09V
TlQocm9vdDIzLCAtMSwgLTEsIDIpOworICAgIEVYUEVDVF9DT1VOVChyb290MjMxLCAtMSwgLTEs
IDEpOworICAgIEVYUEVDVF9DT1VOVChyb290MywgLTEsIC0xLCAwKTsKKworfQorCitURVNUKEND
TGF5ZXJJdGVyYXRvclRlc3QsIGNvbXBsZXhUcmVlTXVsdGlTdXJmYWNlKQoreworICAgIFJlZlB0
cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDEgPSBUZXN0TGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiByb290MiA9IFRl
c3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+
IHJvb3QzID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5
ZXJDaHJvbWl1bT4gcm9vdDIxID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIyID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIzID0gVGVzdExheWVyQ2hy
b21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdDIyMSA9
IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21p
dW0+IHJvb3QyMzEgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICByb290TGF5
ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9v
dDEpOworICAgIHJvb3RMYXllci0+YWRkQ2hpbGQocm9vdDIpOworICAgIHJvb3RMYXllci0+YWRk
Q2hpbGQocm9vdDMpOworICAgIHJvb3QyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIHJv
b3QyLT5zZXRPcGFjaXR5KDAuNSk7IC8vIEZvcmNlIHRoZSBsYXllciB0byBvd24gYSBuZXcgc3Vy
ZmFjZS4KKyAgICByb290Mi0+YWRkQ2hpbGQocm9vdDIxKTsKKyAgICByb290Mi0+YWRkQ2hpbGQo
cm9vdDIyKTsKKyAgICByb290Mi0+YWRkQ2hpbGQocm9vdDIzKTsKKyAgICByb290MjItPnNldE9w
YWNpdHkoMC41KTsKKyAgICByb290MjItPmFkZENoaWxkKHJvb3QyMjEpOworICAgIHJvb3QyMy0+
c2V0T3BhY2l0eSgwLjUpOworICAgIHJvb3QyMy0+YWRkQ2hpbGQocm9vdDIzMSk7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbGF5ZXJMaXN0OworICAgIHJlbmRlclN1
cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllcik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLmdldCgp
LCByb290TGF5ZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxp
c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMjU2KTsKKworICAgIGl0ZXJhdGVCYWNrVG9Gcm9udCgmcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3RMYXllciwgMCwgLTEsIDEpOworICAg
IEVYUEVDVF9DT1VOVChyb290MSwgLTEsIC0xLCAyKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIs
IDQsIDMsIC0xKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIxLCAtMSwgLTEsIDUpOworICAgIEVY
UEVDVF9DT1VOVChyb290MjIsIDcsIDYsIDgpOworICAgIEVYUEVDVF9DT1VOVChyb290MjIxLCAt
MSwgLTEsIDkpOworICAgIEVYUEVDVF9DT1VOVChyb290MjMsIDExLCAxMCwgMTIpOworICAgIEVY
UEVDVF9DT1VOVChyb290MjMxLCAtMSwgLTEsIDEzKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDMs
IC0xLCAtMSwgMTQpOworCisgICAgaXRlcmF0ZUZyb250VG9CYWNrKCZyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdExheWVyLCAxNCwgLTEsIDEzKTsKKyAgICBF
WFBFQ1RfQ09VTlQocm9vdDEsIC0xLCAtMSwgMTIpOworICAgIEVYUEVDVF9DT1VOVChyb290Miwg
MTAsIDExLCAtMSk7CisgICAgRVhQRUNUX0NPVU5UKHJvb3QyMSwgLTEsIC0xLCA5KTsKKyAgICBF
WFBFQ1RfQ09VTlQocm9vdDIyLCA3LCA4LCA2KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIyMSwg
LTEsIC0xLCA1KTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDIzLCAzLCA0LCAyKTsKKyAgICBFWFBF
Q1RfQ09VTlQocm9vdDIzMSwgLTEsIC0xLCAxKTsKKyAgICBFWFBFQ1RfQ09VTlQocm9vdDMsIC0x
LCAtMSwgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>