<?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>96811</bug_id>
          
          <creation_ts>2012-09-14 11:25:35 -0700</creation_ts>
          <short_desc>[CSS Exclusions] Add support for polygonal shapes</short_desc>
          <delta_ts>2012-11-21 11:39:10 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>89705</blocked>
    
    <blocked>89707</blocked>
    
    <blocked>97795</blocked>
    
    <blocked>97797</blocked>
    
    <blocked>97804</blocked>
    
    <blocked>98548</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Muller">giles_joplin</reporter>
          <assigned_to name="Hans Muller">giles_joplin</assigned_to>
          <cc>betravis</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>eric</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hyatt</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>krit</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>720974</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-09-14 11:25:35 -0700</bug_when>
    <thetext>Add an ExclusionPolygon ExclusionShape subclass which provides support for polygonal shape-inside and shape-outside values.

The algorithm is described here: http://hansmuller-webkit.blogspot.com/2012/06/horizontal-box-polygon-intersection-for.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728941</commentid>
    <comment_count>1</comment_count>
      <attachid>165870</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-09-26 13:51:17 -0700</bug_when>
    <thetext>Created attachment 165870
Patch

No tests yet.  Checking to see if the various build changes are correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728947</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-26 13:54:24 -0700</bug_when>
    <thetext>Attachment 165870 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/rendering/ExclusionPolygon.cpp:289:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/rendering/ExclusionPolygon.cpp:358:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/rendering/ExclusionPolygon.cpp:359:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/rendering/ExclusionPolygon.cpp:382:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/rendering/ExclusionPolygon.cpp:383:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 5 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728956</commentid>
    <comment_count>3</comment_count>
      <attachid>165870</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-26 14:05:08 -0700</bug_when>
    <thetext>Comment on attachment 165870
Patch

Attachment 165870 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14035554</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728965</commentid>
    <comment_count>4</comment_count>
      <attachid>165870</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-26 14:11:29 -0700</bug_when>
    <thetext>Comment on attachment 165870
Patch

Attachment 165870 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14036547</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728983</commentid>
    <comment_count>5</comment_count>
      <attachid>165877</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-09-26 14:34:26 -0700</bug_when>
    <thetext>Created attachment 165877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729076</commentid>
    <comment_count>6</comment_count>
      <attachid>165877</attachid>
    <who name="Bear Travis">betravis</who>
    <bug_when>2012-09-26 16:54:08 -0700</bug_when>
    <thetext>Comment on attachment 165877
Patch

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

Looking good. The geometry is a bit difficult to grok, but seems ok. I&apos;m sure we&apos;ll know more once you add tests :)
In general, I think the variable names could be more descriptive, particularly the single letter ones (&quot;i&quot; and &quot;e&quot;).
http://www.webkit.org/coding/coding-style.html#names-full-words

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:1
&gt; + /*

Extra leading space

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:51
&gt; +struct MaxEdgeYComparator {

Maybe EdgeMaxYComparator instead? Since you are comparing Edge::maxY.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:63
&gt; +struct MinEdgeYComparator {

Ditto for minY.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:171
&gt; +        minX = std::min(x, minX);

There is one extra round of comparisons here, since minX/y, maxX/Y are initialized to getX/YAt(0). Not sure it&apos;s worth breaking it into two loops to solve the problem, but thought I&apos;d point it out.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:188
&gt; +    std::sort(sortedEdgesMinY.begin(), sortedEdgesMinY.end(), MinEdgeYComparator());

It seems a little odd to me that the vector called sortedEdgesMinY is not actually sorted until near the end of its scope.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:268
&gt; +        const EdgeIntersection&amp; thisInt = intersections[index];

May just be me, but I kept confusing &quot;Int&quot; with &quot;Integer&quot; in the code below. Is there another name? What about intersection &amp; nextIntersection?

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:298
&gt; +            int vi = (getYAt(thisEdge.i2) &gt; getYAt(thisEdge.i1)) ? thisEdge.i2 : thisEdge.i1;

I think at least one of &quot;vertex&quot; or &quot;index&quot; should be expanded, possibly both.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:311
&gt; +    m_edgeTree-&gt;findEdgesThatOverlapInterval(y1, y2, overlappingEdges);

Here the parameters are y1, y2, but findEdgesThatOverlapInterval expects yMin, yMax. Should these be yMin/yMax as well?

&gt; Source/WebCore/rendering/ExclusionPolygon.h:97
&gt; +    // FIXME: minSubtreeSize - don&apos;t bother creating subtrees for less than N edges

The comment is a little confusing (I only get it now that I read the rest of the code). Perhaps file a more detailed bug and reference it here?

&gt; Source/WebCore/rendering/ExclusionShape.cpp:96
&gt; +            ? createExclusionRectangle(FloatRect(x, y, width, height), FloatSize(radiusX, radiusY))

Inserted extra space here and on the line below.

&gt; Source/WebCore/rendering/ExclusionShape.cpp:108
&gt; +            ? createExclusionCircle(FloatPoint(centerX, centerY), radius)

Ditto.

&gt; Source/WebCore/rendering/ExclusionShape.cpp:121
&gt; +            ? createExclusionEllipse(FloatPoint(centerX, centerY), FloatSize(radiusX, radiusY))

Ditto.

&gt; Source/WebCore/rendering/ExclusionShape.cpp:130
&gt; +        Vector&lt;float&gt;* cv = new Vector&lt;float&gt;(valuesSize);

What does cv stand for?

&gt; Source/WebCore/rendering/ExclusionShapeInsideInfo.h:-57
&gt; -    LayoutUnit shapeLogicalTop() const 

There was an extra space here and on the line below. The removal is good, but does show up in the diff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729551</commentid>
    <comment_count>7</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-09-27 08:19:06 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 165877 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165877&amp;action=review

Note that many of the seemingly spurious indentation changes were required by a recent check-webkit-style patch - https://bugs.webkit.org/show_bug.cgi?id=97602</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729612</commentid>
    <comment_count>8</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-09-27 09:34:05 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 165877 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165877&amp;action=review

&gt; &gt; Source/WebCore/rendering/ExclusionPolygon.h:97
&gt; &gt; +    // FIXME: minSubtreeSize - don&apos;t bother creating subtrees for less than N edges
&gt; 
&gt; The comment is a little confusing (I only get it now that I read the rest of the code). Perhaps file a more detailed bug and reference it here?

I&apos;ve filed two bugs related to the FIXMEs in the ExclusionPolygonEdgeTree implementation:

https://bugs.webkit.org/show_bug.cgi?id=97795 - [CSS Exclusions] internal polygon-edge interval tree should have subtree size limit
https://bugs.webkit.org/show_bug.cgi?id=97797 - [CSS Exclusions] internal polygon-edge interval tree should sort overlapping edges lists</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729711</commentid>
    <comment_count>9</comment_count>
      <attachid>166032</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-09-27 11:08:03 -0700</bug_when>
    <thetext>Created attachment 166032
Patch

Includes tests and ChangeLogs, factors in Bear&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729904</commentid>
    <comment_count>10</comment_count>
      <attachid>166032</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-09-27 15:03:40 -0700</bug_when>
    <thetext>Comment on attachment 166032
Patch

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

I gave the patch a cursory look. 39k is really too big to be landed with one test, LayoutTests are only one type of tests you can add to validate your new data structure (see the unit tests in Tools/TestWebKitAPI/Tests/).

I would advise re-using existing structures as much as possible to reduce the size and also because they usually have good APIs.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:47
&gt; +    float x;
&gt; +    float y;

FloatPoint

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:60
&gt; +    bool operator() (const ExclusionPolygonEdge* e, float y) const
&gt; +    {
&gt; +        return e-&gt;minY() &lt; y;
&gt; +    }

This doesn&apos;t look like it&apos;s used?

I find the comparator object to be an overkill compared to using a simple comparator function.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:167
&gt; +        m_edges[i].i2 = (i+1) % nVertices;

Style violation.

&gt; Source/WebCore/rendering/ExclusionPolygon.h:52
&gt; +    float getXAt(size_t i) const { return m_coordinates-&gt;at(i*2); }
&gt; +    float getYAt(size_t i) const { return m_coordinates-&gt;at(i*2 + 1); }

Coding style violation.

&gt; Source/WebCore/rendering/ExclusionPolygon.h:75
&gt; +    size_t i1;
&gt; +    size_t i2;

&apos;i&apos; for &apos;index&apos;? We usually prefer unsigned instead of size_t.

Do we really need this struct which is a glorified std::pair&lt;FloatPoint&gt;?

&gt; Source/WebCore/rendering/ExclusionPolygon.h:87
&gt; +    ExclusionPolygonEdge()
&gt; +        : polygon(0)
&gt; +        , i1(0)
&gt; +        , i2(0)
&gt; +    {
&gt; +    }
&gt; +
&gt; +    float x1() const { return polygon-&gt;getXAt(i1); }
&gt; +    float y1() const { return polygon-&gt;getYAt(i1); }
&gt; +    float x2() const { return polygon-&gt;getXAt(i2); }
&gt; +    float y2() const { return polygon-&gt;getYAt(i2); }

This API makes no sense:
* you are allowing polygon to be 0 but don&apos;t check it here.
* an edge is supposed to be between two adjacent vertex, yet you don&apos;t ASSERT that.

&gt; Source/WebCore/rendering/ExclusionPolygon.h:95
&gt; +// an &quot;interval tree&quot;

We already have an interval tree in WebCore/platform/PODIntervalTree.h, why can&apos;t we reuse it here?

&gt; Source/WebCore/rendering/ExclusionPolygon.h:101
&gt; +    float center;
&gt; +    Vector&lt;ExclusionPolygonEdge*&gt; overlapCenter;
&gt; +    OwnPtr&lt;ExclusionPolygonEdgeTree&gt; aboveCenter;
&gt; +    OwnPtr&lt;ExclusionPolygonEdgeTree&gt; belowCenter;

Any reason why all your data structures are &apos;struct&apos; even if you end up defining a constructor, without prefixing all the private data members with m_ and allow the copy constructor or assignment operator?

This is also backwards, we usually put the members last.

&gt; Source/WebCore/rendering/ExclusionShape.cpp:67
&gt; +static PassOwnPtr&lt;ExclusionShape&gt; createExclusionPolygon(PassOwnPtr&lt;Vector&lt;float&gt; &gt; coordinates, WindRule fillRule)
&gt; +{
&gt; +    ASSERT(!(coordinates-&gt;size() % 2));
&gt; +    return adoptPtr(new ExclusionPolygon(coordinates, fillRule));
&gt; +}

If you are going to pass ExclusionShape in OwnPtr, ExclusionShape should probably be WTF_MAKENONCOPYABLE.

&gt; Source/WebCore/rendering/ExclusionShapeInsideInfo.h:58
&gt; +    LayoutUnit shapeLogicalTop() const
&gt; +    {

Usually whitespace changes occurs on touched code to avoid confusing svn / git blame. On top of that the last discussion on the topic was a while ago and didn&apos;t bear any consensus (https://lists.webkit.org/pipermail/webkit-dev/2009-August/009692.html). I didn&apos;t repeat this comment to the other whitespace changes in your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733210</commentid>
    <comment_count>11</comment_count>
      <attachid>166775</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-10-02 16:40:16 -0700</bug_when>
    <thetext>Created attachment 166775
Patch

I&apos;ve made the patch somewhat smaller:

- Removed the EdgeTree class, used PODIntervalTree instead
- Store FloatPoint vertices instead of x,y coordinates
- Replaced the comparator classes with comparator functions
- Made the suggested renames, i to index, size_t to unsigned, etc.
- Fixed various style violations
- Added ASSERTS per the review feedback
- Removed unecessary struct constructors
- Use [] instead of at() for Vector element access
- Various webkit-style non-conformance fixes
- restored extraneous spaces ExclusionShapeInsideInfo.h

I have not added additional tests although many more are needed.  I was hoping to land a set of polygon exclusion shape tests in a separate patch?

Notes:
&gt; ... an edge is supposed to be between two adjacent vertex, yet you don&apos;t ASSERT that.
At the moment, edges span adjacent vertices, but in the long run edges will span 2 or more colinear vertices.  I didn&apos;t add an assertion for the current scheme because the best I could come up with,  ASSERT(index2 ? (index2 - index1) == 1 : index1 == polygon-&gt;numberVertices() - 1), didn&apos;t communicate the point very well.

&gt; ... I didn&apos;t repeat this comment to the other whitespace changes in your patch.
I didn&apos;t restore the other extraneous spaces that I&apos;d removed because leaving them there causes the style checker bot to reject the patch, see https://bugs.webkit.org/show_bug.cgi?id=96811#c2

This appears to be due to a recent check-webkit-style patch - https://bugs.webkit.org/show_bug.cgi?id=97602</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734765</commentid>
    <comment_count>12</comment_count>
      <attachid>166775</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-10-04 09:37:35 -0700</bug_when>
    <thetext>Comment on attachment 166775
Patch

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

I have a lot of questions.

&gt; Source/WebCore/ChangeLog:41
&gt; +        (WebCore::ExclusionPolygon::ExclusionPolygon): see above for a description of this type
&gt; +        (WebCore::computeXIntersection): find and classify the X intercept of a polygon edge for some Y value, if any
&gt; +        (WebCore::ExclusionPolygon::rightVertexY): used to decide if a horizontal line &quot;crosses&quot; a vertex
&gt; +        (WebCore::appendIntervalX): append the start or end X coordinates of an ExclusionInterval
&gt; +        (WebCore::ExclusionPolygon::computeXIntersections): all of the intersections of a horizontal line and the polygon&apos;s edges
&gt; +        (WebCore::ExclusionPolygon::computeEdgeIntersections): the X projections of the edges that overlap a horizonal rectangle
&gt; +        (WebCore::ExclusionPolygon::getExcludedIntervals): X intervals within a horizontal rectangle that overlap the polygon
&gt; +        (WebCore::ExclusionPolygon::getIncludedIntervals): X intervals within a horizontal rectangle that fit inside the polygon

Even small comments need phrases. This is the common style in WebKit that applies to Changelogs as welll.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:41
&gt; +    Normal = 0,
&gt; +    VertexMinY = 1,
&gt; +    VertexMaxY = 2,
&gt; +    VertexYBoth = 3

The integer representation seems unnecessary. You start with 0 anyway.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:47
&gt; +    float x;
&gt; +    float y;

No FloatPoint here? :)

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:62
&gt; +    // FIXME: handle special cases: less than 3 non-colinear vertices
&gt; +    // FIXME: assuming open polygons for now

Sentences please.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:69
&gt; +    float minX = getXAt(0);
&gt; +    float minY = getYAt(0);

You call getXAt most of the time in combination with getYAt. Can&apos;t you use getPointAt() and also use x,y as FloatPoint representation in ExclusionPolygon? I would just agree, that FloatPoint has no good functionality to get min/max :)

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:92
&gt; +    m_boundingBox.setX(minX);
&gt; +    m_boundingBox.setY(minY);
&gt; +    m_boundingBox.setWidth(maxX - minX);
&gt; +    m_boundingBox.setHeight(maxY - minY);

It doesn&apos;t seem to be a bad idea to add a definition to FloatRect with two FloatPoints top-left, bottom-right.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:104
&gt; +static bool computeXIntersection(const ExclusionPolygonEdge* ep, float y, EdgeIntersection&amp; result)
&gt; +{
&gt; +    const ExclusionPolygonEdge&amp; e = *ep;

I know you are a programmer, but can you find some nice names instead of just one or two letters please? :)

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:177
&gt; +    std::sort(intersections.begin(), intersections.end(), WebCore::compareEdgeIntersectionX);

Can you use using namespace std; at the beginning of the file please? We usually don&apos;t use namespaces in the code itself.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:190
&gt; +                    // skip VertexMaxY,VertexMaxY and VertexMinY,VertexMinY

A sentence please.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:196
&gt; +                    index += 1;

index++?

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:220
&gt; +        index += 1;

Ditto?

&gt; Source/WebCore/rendering/ExclusionPolygon.h:48
&gt; +// Used by PODIntervalTree for debugging

Dot at the end. :)

&gt; Source/WebCore/rendering/ExclusionPolygon.h:59
&gt; +    float getXAt(unsigned index) const { return (*m_vertices)[index].x(); }
&gt; +    float getYAt(unsigned index) const { return (*m_vertices)[index].y(); }

I would still like to see a returning FloatPoint&amp; instead. Can also be const.

&gt; Source/WebCore/rendering/ExclusionPolygon.h:75
&gt; +    OwnPtr&lt;Vector&lt;FloatPoint&gt; &gt; m_vertices;

Why does it need to be OwnPtr&lt;...&gt;?

&gt; Source/WebCore/rendering/ExclusionPolygon.h:82
&gt; +struct ExclusionPolygonEdge {

Why is the definition of this struct not on the top? Dependency reasons?

&gt; Source/WebCore/rendering/ExclusionPolygon.h:86
&gt; +    float x1() const { ASSERT(polygon); return polygon-&gt;getXAt(index1); }
&gt; +    float y1() const { ASSERT(polygon); return polygon-&gt;getYAt(index1); }
&gt; +    float x2() const { ASSERT(polygon); return polygon-&gt;getXAt(index2); }
&gt; +    float y2() const { ASSERT(polygon); return polygon-&gt;getYAt(index2); }

Please FloatPoint&amp; :(.

&gt; Source/WebCore/rendering/ExclusionPolygon.h:91
&gt; +    float minX() const { return std::min(x1(), x2()); }
&gt; +    float minY() const { return std::min(y1(), y2()); }
&gt; +    float maxX() const { return std::max(x1(), x2()); }
&gt; +    float maxY() const { return std::max(y1(), y2()); }

How often is minX(), minY(), ... called? Might it make sense to store them? Also, point1() point2() would look so much nicer :).

&gt; Source/WebCore/rendering/ExclusionPolygon.h:95
&gt; +    const ExclusionPolygon* polygon;
&gt; +    unsigned index1;
&gt; +    unsigned index2;

I wonder if you don&apos;t want to create a real class. Do all these information need to be exposed?

&gt; Source/WebCore/rendering/ExclusionShape.cpp:133
&gt; +            float vertexX = floatValueForLength(values.at(i), boxWidth);
&gt; +            float vertexY = floatValueForLength(values.at(i + 1), boxHeight);

Use FloatPoint directly and pass the FloatPoint instead.

&gt; Source/WebCore/rendering/ExclusionShape.cpp:137
&gt; +                vertices-&gt;at(vertexIndex).setX(vertexX);
&gt; +                vertices-&gt;at(vertexIndex).setY(vertexY);

As I said. Use FloatPoint directly. But even set(float, float) would be better.

&gt; Source/WebCore/rendering/ExclusionShape.cpp:140
&gt; +                vertices-&gt;at(vertexIndex).setY(vertexX);
&gt; +                vertices-&gt;at(vertexIndex).setX(vertexY);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734768</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-10-04 09:39:50 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 166032 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166032&amp;action=review
I am sorry Julien, didn&apos;t see that you reviewed the previous patch and did not include your comments on my review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734806</commentid>
    <comment_count>14</comment_count>
      <attachid>166775</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-10-04 10:32:41 -0700</bug_when>
    <thetext>Comment on attachment 166775
Patch

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

Thanks for looking at this patch Dirk, I have been busy and couldn&apos;t give it the attention it needed.

&gt;&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:177
&gt;&gt; +    std::sort(intersections.begin(), intersections.end(), WebCore::compareEdgeIntersectionX);
&gt; 
&gt; Can you use using namespace std; at the beginning of the file please? We usually don&apos;t use namespaces in the code itself.

Actually this changed and now we shouldn&apos;t use &quot;using&quot; declaration in implementation files. Here is the quote from our coding style:

&quot;In C++ implementation files, do not use &quot;using&quot; declarations of any kind to import names in the standard template library. Directly qualify the names at the point they&apos;re used instead.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735886</commentid>
    <comment_count>15</comment_count>
      <attachid>167367</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-10-05 12:36:12 -0700</bug_when>
    <thetext>Created attachment 167367
Patch

I&apos;ve made all of the suggested code and comment changes with just a few exceptions.  To keep this patch&apos;s size manageable, I&apos;ve filed a second bug to cover an additional set of tests: https://bugs.webkit.org/show_bug.cgi?id=98548</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735887</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-05 12:38:08 -0700</bug_when>
    <thetext>Attachment 167367 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
Source/WebCore/rendering/ExclusionShape.cpp:135:  Missing spaces around /  [whitespace/operators] [3]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735893</commentid>
    <comment_count>17</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-10-05 12:47:22 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 166775 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166775&amp;action=review

&gt; &gt; Source/WebCore/rendering/ExclusionPolygon.h:95
&gt; &gt; +    const ExclusionPolygon* polygon;
&gt; &gt; +    unsigned index1;
&gt; &gt; +    unsigned index2;
&gt; 
&gt; I wonder if you don&apos;t want to create a real class. Do all these information need to be exposed?

ExclusionPolygon uses  PODIntervalTree&lt;float, ExclusionPolygonEdge*&gt; to make looking up edges that fall within a Y interval O(log n), where n is the number of edges.  The template class assumes that the &quot;UserData&quot; objects it manages, can compute their interval.  That&apos;s minY() and maxY() in this case.  Tthe tree stores these values and the point to the edge in its own node object.  The internal methods that retrieve edges from the tree rely on the edge vertex accessors and having the accessors just look their values up in the edge&apos;s polygon keeps the object simple and clearly read-only.

&gt; &gt; Source/WebCore/rendering/ExclusionPolygon.cpp:92
&gt; &gt; +    m_boundingBox.setX(minX);
&gt; &gt; +    m_boundingBox.setY(minY);
&gt; &gt; +    m_boundingBox.setWidth(maxX - minX);
&gt; &gt; +    m_boundingBox.setHeight(maxY - minY);
&gt; 
&gt; It doesn&apos;t seem to be a bad idea to add a definition to FloatRect with two FloatPoints top-left, bottom-right.

Extending FloatRect in this way could lead to some confusion.  Defining the FloatRect&apos;s width and height implicitly with a second point makes dealing with a &quot;flipped&quot; coordinate system a little bit tricker because one must remember to swap the two points.

&gt; &gt; Source/WebCore/rendering/ExclusionPolygon.h:75
&gt; &gt; +    OwnPtr&lt;Vector&lt;FloatPoint&gt; &gt; m_vertices;
&gt; 
&gt; Why does it need to be OwnPtr&lt;...&gt;?

ExclusionPolygon is read-only.  The vertices vector is allocated in ExclusionShape::createExclusionShape() and passed to the ExclusionPolygon constructor.  The OwnPtr just ensures that the vector is deleted.

&gt; &gt; Source/WebCore/rendering/ExclusionPolygon.h:82
&gt; &gt; +struct ExclusionPolygonEdge {
&gt; 
&gt; Why is the definition of this struct not on the top? Dependency reasons?

Yes, it has a pointer to its ExclusionPolygon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735894</commentid>
    <comment_count>18</comment_count>
      <attachid>167370</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-10-05 12:52:23 -0700</bug_when>
    <thetext>Created attachment 167370
Patch

Fixed the style problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735925</commentid>
    <comment_count>19</comment_count>
      <attachid>167370</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-10-05 13:36:26 -0700</bug_when>
    <thetext>Comment on attachment 167370
Patch

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

Looks a lot better! Great work! Just some snippets left. As Julien suggested, more tests seem to be necessary. As far as I understood you, you want to upload a second patch just for the tests. I would like to review both together.

&gt; Source/WebCore/ChangeLog:16
&gt; +        Polygon edges are represented by the ExclusionPolygonEdge class, which records the indices of

It is a struct, not a class, right?

&gt; Source/WebCore/ChangeLog:18
&gt; +        the last edge where index2 is 0.  When a polygon edge is defined by 3 or more colinear vertices,

What about a point list like this: 4,0 8,0 4,4 0,0

Would it have 3 or 4 edges? Note that the first point is between the second and last point.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:80
&gt; +        const FloatPoint&amp; vertex = vertexAt(i);
&gt; +        float x = vertex.x();
&gt; +        float y = vertex.y();
&gt; +
&gt; +        minX = std::min(x, minX);
&gt; +        maxX = std::max(x, maxX);
&gt; +        minY = std::min(y, minY);
&gt; +        maxY = std::max(y, maxY);

.x() and .y() are inline functions, don&apos;t think that you need to define two new floats.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:112
&gt; +    float x1 = edge.vertex1().x();
&gt; +    float y1 = edge.vertex1().y();
&gt; +    float x2 = edge.vertex2().x();
&gt; +    float y2 = edge.vertex2().y();

You are not setting x1-y2. const FloatPoint vertex1 = edge.vertex1(); and vertex.x() calls seem to be good enough.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:143
&gt; +    const FloatPoint&amp; vertex1 = vertexAt((index + 1) % nVertices);
&gt; +    const FloatPoint&amp; vertex2 = vertexAt((index - 1) % nVertices);

Here you do it already.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:192
&gt; +            const EdgeIntersection&amp; nextIntersection = intersections[index +1];

s/index +1/index + 1/

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:211
&gt; +            windCount += (thisEdge.vertex2().y() &gt; thisEdge.vertex1().y()) ? +1 : -1;

s/+1/1/

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:238
&gt; +        float x1, x2;

always new definitions.

float x1;
float x2;

WebKit style rules.

&gt; Source/WebCore/rendering/ExclusionPolygon.h:84
&gt; +

Omit the new line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735976</commentid>
    <comment_count>20</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-10-05 14:42:28 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 167370 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167370&amp;action=review

&gt; &gt; Source/WebCore/ChangeLog:16
&gt; &gt; +        Polygon edges are represented by the ExclusionPolygonEdge class, which records the indices of
&gt; 
&gt; It is a struct, not a class, right?

Yes.

&gt; &gt; Source/WebCore/ChangeLog:18
&gt; &gt; +        the last edge where index2 is 0.  When a polygon edge is defined by 3 or more colinear vertices,

&gt; What about a point list like this: 4,0 8,0 4,4 0,0
&gt; Would it have 3 or 4 edges? Note that the first point is between the second and last point.

Yes, when this optimization is implemented,  the edges would have vertex indices 3-1, 1-2, 2-3.  I&apos;ll put a similar example in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736056</commentid>
    <comment_count>21</comment_count>
      <attachid>167402</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-10-05 15:45:16 -0700</bug_when>
    <thetext>Created attachment 167402
Patch

Made the requested changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736059</commentid>
    <comment_count>22</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-10-05 15:47:33 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 167370 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167370&amp;action=review
&gt; 
&gt; As far as I understood you, you want to upload a second patch just for the tests. I would like to review both together.

I&apos;ve filed a second bug to cover an additional set of tests: https://bugs.webkit.org/show_bug.cgi?id=98548

Will set the review flag when the patch for 98548 is ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736690</commentid>
    <comment_count>23</comment_count>
      <attachid>167540</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-10-08 08:16:49 -0700</bug_when>
    <thetext>Created attachment 167540
Patch

Same patch, sync&apos;d with the latest trunk changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736928</commentid>
    <comment_count>24</comment_count>
      <attachid>167586</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-10-08 12:25:08 -0700</bug_when>
    <thetext>Created attachment 167586
Patch

Added additional tests per 98548.  It was easier to bundle all of the changes into one patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736998</commentid>
    <comment_count>25</comment_count>
      <attachid>167586</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-10-08 13:52:29 -0700</bug_when>
    <thetext>Comment on attachment 167586
Patch

The first test is a good start. Maybe we can make it easier. I think the patch is still good to go. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737034</commentid>
    <comment_count>26</comment_count>
      <attachid>167586</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-08 14:20:11 -0700</bug_when>
    <thetext>Comment on attachment 167586
Patch

Clearing flags on attachment: 167586

Committed r130687: &lt;http://trac.webkit.org/changeset/130687&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737036</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-08 14:20:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773143</commentid>
    <comment_count>28</comment_count>
    <who name="Bear Travis">betravis</who>
    <bug_when>2012-11-21 11:39:10 -0800</bug_when>
    <thetext>*** Bug 96671 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165870</attachid>
            <date>2012-09-26 13:51:17 -0700</date>
            <delta_ts>2012-09-26 14:34:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>29886</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYzVlODgzZS4uMjY5OWFkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIwMjIsNiArMjAyMiw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvQ291bnRlck5vZGUuY3BwCiAgICAgcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAogICAg
IHJlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAKKyAgICByZW5kZXJpbmcvRXhjbHVzaW9u
UG9seWdvbi5jcHAKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcAogICAgIHJl
bmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDJmZGI5NzAuLmI4YzU2NmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw2MiBAQAorMjAxMi0wOS0yNiAgSGFucyBNdWxsZXIgIDxobXVsbGVyQGFkb2Jl
LmNvbT4KKworICAgICAgICBbQ1NTIEV4Y2x1c2lvbnNdIEFkZCBzdXBwb3J0IGZvciBwb2x5Z29u
YWwgc2hhcGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEluaXRpYWwgY29tbWl0IG9mIHRoZSBsYXlvdXQgc3VwcG9ydCBmb3IgcG9seWdvbmFsIGV4Y2x1
c2lvbiBzaGFwZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoRWRnZUludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNYXhF
ZGdlWUNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoTWF4RWRnZVlDb21wYXJhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbkVkZ2VZQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgIChNaW5FZGdlWUNvbXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0
aW9uWENvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9u
UG9seWdvbkVkZ2VUcmVlOjpFeGNsdXNpb25Qb2x5Z29uRWRnZVRyZWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlOjppbml0RWRnZVRyZWUpOgorICAgICAgICAo
V2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlOjpmaW5kRWRnZXNUaGF0T3ZlcmxhcFkp
OgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlOjpmaW5kRWRnZXNU
aGF0T3ZlcmxhcEludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246
OkV4Y2x1c2lvblBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVhJbnRlcnNlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6cmlnaHRWZXJ0ZXhZKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEludGVydmFsWCk6CisgICAgICAgIChXZWJDb3JlOjpF
eGNsdXNpb25Qb2x5Z29uOjpjb21wdXRlWEludGVyc2VjdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoRXhjbHVzaW9uUG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpF
eGNsdXNpb25Qb2x5Z29uOjpnZXRYQXQpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9s
eWdvbjo6Z2V0WUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246Om51bWJl
ck9mVmVydGljZXMpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6ZmlsbFJ1
bGUpOgorICAgICAgICAoRXhjbHVzaW9uUG9seWdvbkVkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RXhjbHVzaW9uUG9seWdvbkVkZ2U6OkV4Y2x1c2lvblBvbHlnb25FZGdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjp4MSk6CisgICAgICAgIChXZWJDb3JlOjpFeGNs
dXNpb25Qb2x5Z29uRWRnZTo6eTEpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdv
bkVkZ2U6OngyKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjp5Mik6
CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uRWRnZTo6bWluWCk6CisgICAgICAg
IChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uRWRnZTo6bWluWSk6CisgICAgICAgIChXZWJDb3Jl
OjpFeGNsdXNpb25Qb2x5Z29uRWRnZTo6bWF4WCk6CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNp
b25Qb2x5Z29uRWRnZTo6bWF4WSk6CisgICAgICAgIChFeGNsdXNpb25Qb2x5Z29uRWRnZVRyZWUp
OgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVFeGNsdXNpb25Qb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXhjbHVzaW9uU2hhcGU6OmNyZWF0ZUV4Y2x1c2lvblNoYXBlKToKKwogMjAx
Mi0wOS0yNiAgTWFyY2VsbyBMaXJhICA8bWFyY2Vsby5saXJhQG9wZW5ib3NzYS5vcmc+CiAKICAg
ICAgICAgW1F0XSBsb2FkIGV2ZW50IGZpcmVzIG9uIFhNTEh0dHBSZXF1ZXN0VXBsb2FkIHR3aWNl
IHdpdGggUXQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBmZmUyNjAwLi4zNjQ3
OTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ4ODksNiArNDg4OSw4IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RXhjbHVzaW9uUmVjdGFuZ2xlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25TaGFwZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGJhNjJmMjcuLjNmZGJhMDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTMyOTIsNiArMzI5Miw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5n
L0VsbGlwc2lzQm94LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZh
bC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5oJywKKyAg
ICAgICAgICAgICdyZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAnLAorICAgICAgICAgICAg
J3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9F
eGNsdXNpb25SZWN0YW5nbGUuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvRXhjbHVzaW9u
UmVjdGFuZ2xlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA5
MDhhNzA1Li5jMGFkOGU4IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagpAQCAtMzg0MzEsNiArMzg0MzEsMTQgQEAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgogICAgICAgICAg
ICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVs
YXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5jcHAiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4K
KyAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblBvbHlnb24uaCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAg
PC9GaWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUmVjdGFu
Z2xlLmNwcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAg
ICAgICAgICAgICAgPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ5YTA1ZDguLmZhMWExOGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE4NDQsNiAr
MTg0NCw4IEBACiAJCTZFODc5OEJEMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5n
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5
OEI3MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuaCAqLzsgfTsKIAkJNkU4
Nzk4QkUxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI4MTVGODFFNEEwMEJGRTRB
QSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi87IH07CiAJCTZFODc5OEJGMTVGODFFNEEwMEJGRTRB
QSAvKiBFeGNsdXNpb25TaGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkU4Nzk4QjkxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkVBRjM0
MEYxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVBRjM0MEQxNjEzODY5QTAwODU5NjI1
IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwICovOyB9OworCQk2RUFGMzQxMDE2MTM4NjlBMDA4NTk2
MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkVBRjM0MEUxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHln
b24uaCAqLzsgfTsKIAkJNkVCQzVFQUYxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkM1
RUFEMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi87IH07CiAJCTZFQkM1
RUIwMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8q
IEpTRmxvYXQ2NEFycmF5LmggKi87IH07CiAJCTZFQkYwRTQ4MTJBODkyNjEwMERCMTcwOSAvKiBP
RVNUZXh0dXJlRmxvYXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkVCRjBFNDUxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAg
Ki87IH07CkBAIC05MDQ0LDYgKzkwNDYsOCBAQAogCQk2RTg3OThCNzE1RjgxRTRBMDBCRkU0QUEg
LyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4Y2x1c2lvblJlY3RhbmdsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTg3
OThCODE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RTg3OThCOTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hh
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uU2hhcGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBRjM0MEQxNjEzODY5QTAwODU5NjI1IC8q
IEV4Y2x1c2lvblBvbHlnb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRXhjbHVzaW9uUG9seWdvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZF
QUYzNDBFMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblBvbHlnb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkVCQzVEODAxMzhCNEM0RTAwQTBDRjhBIC8qIEZsb2F0NjRBcnJheS5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRmxvYXQ2NEFycmF5LmlkbDsgcGF0aCA9IGNhbnZh
cy9GbG9hdDY0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJDNUVB
RDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMzQ4LDYgKzIxMzUyLDggQEAKIAkJCQlBOENG
RjZCRDBBMTU2MTE4MDAwQTQyMzQgLyogRWxsaXBzaXNCb3guaCAqLywKIAkJCQk2RTg3OThCNDE1
RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuY3BwICovLAogCQkJCTZFODc5OEI1
MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5oICovLAorCQkJCTZFQUYzNDBE
MTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCAqLywKKwkJCQk2RUFGMzQw
RTE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oICovLAogCQkJCTZFODc5OEI2
MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuY3BwICovLAogCQkJCTZFODc5
OEI3MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuaCAqLywKIAkJCQk2RTg3
OThCODE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwICovLApAQCAtMjU1NzQs
NiArMjU1ODAsNyBAQAogCQkJCUZCOTJERjRCMTVGRUQwODcwMDk5NDQzMyAvKiBDbGlwUGF0aE9w
ZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEY3QjRBNjYxNUZGNkQ2QTAwNkI1RjIyIC8q
IFBsYXRmb3JtTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzFE
NzJGNjE1RkU2OTUzMDBDNEMwN0UgLyogTGF5b3V0TWlsZXN0b25lcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNkVBRjM0MTAxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMjg2NzMsNiArMjg2ODAsNyBAQAogCQkJCUZENTM3MzUyMTM3QjY1MTgw
MDAwOERDRSAvKiBaZXJvUG9sZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDdFMjc2ODE2MDM2
RURDMDBFRTJBRkIgLyogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0RjFEMTFCRjE1RkYzNzIwMDAyNkU5MDggLyogUGxhdGZvcm1NZW1vcnlJbnN0
cnVtZW50YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVBRjM0MEYxNjEzODY5QTAwODU5
NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMGM3Njk1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcApAQCAtMCwwICsxLDM4NyBAQAorIC8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICog
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
CisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xE
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhjbHVzaW9uUG9seWdvbi5oIgorCisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVt
IEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHsKKyAgICBOb3JtYWwgPSAwLAorICAgIFZlcnRleFlNaW4g
PSAxLAorICAgIFZlcnRleFlNYXggPSAyLAorICAgIFZlcnRleFlCb3RoID0gMworfTsKKworc3Ry
dWN0IEVkZ2VJbnRlcnNlY3Rpb24geworICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBl
ZGdlOworICAgIGZsb2F0IHg7CisgICAgZmxvYXQgeTsKKyAgICBFZGdlSW50ZXJzZWN0aW9uVHlw
ZSB0eXBlOworfTsKKworc3RydWN0IE1heEVkZ2VZQ29tcGFyYXRvciB7CisgICAgYm9vbCBvcGVy
YXRvcigpIChjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZTEsIGNvbnN0IEV4Y2x1c2lvblBv
bHlnb25FZGdlKiBlMikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBlMS0+bWF4WSgpIDwg
ZTItPm1heFkoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IEV4Y2x1c2lv
blBvbHlnb25FZGdlKiBlLCBmbG9hdCB5KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGUt
Pm1heFkoKSA8IHk7CisgICAgfQorfTsKKworc3RydWN0IE1pbkVkZ2VZQ29tcGFyYXRvciB7Cisg
ICAgYm9vbCBvcGVyYXRvcigpIChjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZTEsIGNvbnN0
IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlMikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBl
MS0+bWluWSgpIDwgZTItPm1pblkoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yKCkgKGNv
bnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlLCBmbG9hdCB5KSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGUtPm1pblkoKSA8IHk7CisgICAgfQorfTsKKworc3RydWN0IEludGVyc2VjdGlv
blhDb21wYXJhdG9yIHsKKyAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IEVkZ2VJbnRlcnNlY3Rp
b24mIGkxLCBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpMikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAoaTEueCA9PSBpMi54KSA/IGkxLnR5cGUgPCBpMi50eXBlIDogaTEueCA8IGkyLng7
CisgICAgfQorfTsKKworRXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlOjpFeGNsdXNpb25Qb2x5Z29u
RWRnZVRyZWUoY29uc3QgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlKj4mIHNvcnRlZEVkZ2Vz
KQorICAgIDogY2VudGVyKDApCit7CisgICAgaWYgKHNvcnRlZEVkZ2VzLnNpemUoKSA+IDApCisg
ICAgICAgIGluaXRFZGdlVHJlZSh0aGlzLCBzb3J0ZWRFZGdlcyk7Cit9CisKK3ZvaWQgRXhjbHVz
aW9uUG9seWdvbkVkZ2VUcmVlOjppbml0RWRnZVRyZWUoRXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVl
KiBub2RlLCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiYgZWRnZXMpCit7Cisg
ICAgc2l6ZV90IGVkZ2VzU2l6ZSA9IGVkZ2VzLnNpemUoKTsKKyAgICBzaXplX3QgY2VudGVySW5k
ZXggPSBlZGdlc1NpemUgLyAyOworICAgIG5vZGUtPmNlbnRlciA9IChlZGdlc1tjZW50ZXJJbmRl
eF0tPm1pblkoKSArIGVkZ2VzW2NlbnRlckluZGV4XS0+bWF4WSgpKSAvIDI7CisKKyAgICBWZWN0
b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBhYm92ZUNlbnRlckVkZ2VzOworICAgIFZlY3RvcjxF
eGNsdXNpb25Qb2x5Z29uRWRnZSo+IGJlbG93Q2VudGVyRWRnZXM7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGVkZ2VzU2l6ZTsgaSsrKSB7CisgICAgICAgIEV4Y2x1c2lvblBvbHlnb25F
ZGdlKiBlZGdlID0gZWRnZXNbaV07CisgICAgICAgIGlmIChlZGdlLT5tYXhZKCkgPCBub2RlLT5j
ZW50ZXIpCisgICAgICAgICAgICBhYm92ZUNlbnRlckVkZ2VzLmFwcGVuZChlZGdlKTsKKyAgICAg
ICAgZWxzZSBpZiAoZWRnZS0+bWluWSgpID4gbm9kZS0+Y2VudGVyKQorICAgICAgICAgICAgYmVs
b3dDZW50ZXJFZGdlcy5hcHBlbmQoZWRnZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5v
ZGUtPm92ZXJsYXBDZW50ZXIuYXBwZW5kKGVkZ2UpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBj
cmVhdGUgdHdvIHNvcnRlZCBjb3BpZXMgb2Ygb3ZlcmxhcENlbnRlcjogb3ZlcmxhcENlbnRlck1p
blksIG92ZXJsYXBDZW50ZXJNYXhZLCB1c2UgdGhlbSBpbiBmaW5kLi4uCisKKyAgICBpZiAoYWJv
dmVDZW50ZXJFZGdlcy5zaXplKCkgPiAwKQorICAgICAgICBub2RlLT5hYm92ZUNlbnRlciA9IGFk
b3B0UHRyKG5ldyBFeGNsdXNpb25Qb2x5Z29uRWRnZVRyZWUoYWJvdmVDZW50ZXJFZGdlcykpOwor
ICAgIGlmIChiZWxvd0NlbnRlckVkZ2VzLnNpemUoKSA+IDApCisgICAgICAgIG5vZGUtPmJlbG93
Q2VudGVyID0gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblBvbHlnb25FZGdlVHJlZShiZWxvd0NlbnRl
ckVkZ2VzKSk7Cit9CisKK3ZvaWQgRXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlOjpmaW5kRWRnZXNU
aGF0T3ZlcmxhcFkoZmxvYXQgeSwgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlKj4mIHJ2KSBj
b25zdAoreworICAgIGlmICh5IDwgY2VudGVyKSB7CisgICAgICAgIGlmIChhYm92ZUNlbnRlcikK
KyAgICAgICAgICAgIGFib3ZlQ2VudGVyLT5maW5kRWRnZXNUaGF0T3ZlcmxhcFkoeSwgcnYpOwor
ICAgIH0gZWxzZSBpZiAoeSA+IGNlbnRlcikgeworICAgICAgICBpZiAoYmVsb3dDZW50ZXIpCisg
ICAgICAgICAgICBiZWxvd0NlbnRlci0+ZmluZEVkZ2VzVGhhdE92ZXJsYXBZKHksIHJ2KTsKKyAg
ICB9CisKKyAgICBzaXplX3Qgb3ZlcmxhcEVkZ2VzU2l6ZSA9IG92ZXJsYXBDZW50ZXIuc2l6ZSgp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcEVkZ2VzU2l6ZTsgaSsrKSB7Cisg
ICAgICAgIEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdlID0gb3ZlcmxhcENlbnRlcltpXTsKKyAg
ICAgICAgaWYgKHkgPj0gZWRnZS0+bWluWSgpICYmIHkgPD0gZWRnZS0+bWF4WSgpKQorICAgICAg
ICAgICAgcnYuYXBwZW5kKGVkZ2UpOworICAgIH0KK30KKwordm9pZCBFeGNsdXNpb25Qb2x5Z29u
RWRnZVRyZWU6OmZpbmRFZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwoZmxvYXQgeU1pbiwgZmxvYXQg
eU1heCwgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlKj4mIHJ2KSBjb25zdAoreworICAgIGlm
ICgoeU1pbiA8IGNlbnRlcikgJiYgYWJvdmVDZW50ZXIpCisgICAgICAgIGFib3ZlQ2VudGVyLT5m
aW5kRWRnZXNUaGF0T3ZlcmxhcEludGVydmFsKHlNaW4sIHlNYXgsIHJ2KTsKKworICAgIGlmICgo
eU1heCA+IGNlbnRlcikgJiYgYmVsb3dDZW50ZXIpCisgICAgICAgIGJlbG93Q2VudGVyLT5maW5k
RWRnZXNUaGF0T3ZlcmxhcEludGVydmFsKHlNaW4sIHlNYXgsIHJ2KTsKKworICAgIHNpemVfdCBv
dmVybGFwRWRnZXNTaXplID0gb3ZlcmxhcENlbnRlci5zaXplKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvdmVybGFwRWRnZXNTaXplOyBpKyspIHsKKyAgICAgICAgRXhjbHVzaW9uUG9s
eWdvbkVkZ2UqIGVkZ2UgPSBvdmVybGFwQ2VudGVyW2ldOworICAgICAgICBpZiAoeU1heCA+IGVk
Z2UtPm1pblkoKSAmJiB5TWluIDwgZWRnZS0+bWF4WSgpKQorICAgICAgICAgICAgcnYuYXBwZW5k
KGVkZ2UpOworICAgIH0KK30KKworRXhjbHVzaW9uUG9seWdvbjo6RXhjbHVzaW9uUG9seWdvbihQ
YXNzT3duUHRyPFZlY3RvcjxmbG9hdD4gPiBjb29yZGluYXRlcywgV2luZFJ1bGUgZmlsbFJ1bGUp
CisgICAgOiBFeGNsdXNpb25TaGFwZSgpCisgICAgLCBtX2Nvb3JkaW5hdGVzKGNvb3JkaW5hdGVz
KQorICAgICwgbV9maWxsUnVsZShmaWxsUnVsZSkKK3sKKyAgICAvLyBGSVhNRTogaGFuZGxlIHNw
ZWNpYWwgY2FzZXM6IGxlc3MgdGhhbiAzIG5vbi1jb2xpbmVhciB2ZXJ0aWNlcworICAgIC8vIEZJ
WE1FOiBhc3N1bWluZyBvcGVuIHBvbHlnb25zIGZvciBub3cKKworICAgIHNpemVfdCBuVmVydGlj
ZXMgPSBudW1iZXJPZlZlcnRpY2VzKCk7CisgICAgbV9lZGdlcy5yZXNpemUoblZlcnRpY2VzKTsK
KyAgICBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBzb3J0ZWRFZGdlc01pblkoblZlcnRp
Y2VzKTsKKworICAgIGZsb2F0IG1pblggPSBnZXRYQXQoMCk7CisgICAgZmxvYXQgbWluWSA9IGdl
dFlBdCgwKTsKKyAgICBmbG9hdCBtYXhYID0gbWluWDsKKyAgICBmbG9hdCBtYXhZID0gbWluWTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgblZlcnRpY2VzOyBpKyspIHsKKyAgICAgICAg
ZmxvYXQgeCA9IGdldFhBdChpKTsKKyAgICAgICAgZmxvYXQgeSA9IGdldFlBdChpKTsKKworICAg
ICAgICBtaW5YID0gc3RkOjptaW4oeCwgbWluWCk7CisgICAgICAgIG1heFggPSBzdGQ6Om1heCh4
LCBtYXhYKTsKKyAgICAgICAgbWluWSA9IHN0ZDo6bWluKHksIG1pblkpOworICAgICAgICBtYXhZ
ID0gc3RkOjptYXgoeSwgbWF4WSk7CisKKyAgICAgICAgbV9lZGdlc1tpXS5wb2x5Z29uID0gdGhp
czsKKyAgICAgICAgbV9lZGdlc1tpXS5pMSA9IGk7CisgICAgICAgIG1fZWRnZXNbaV0uaTIgPSAo
aSsxKSAlIG5WZXJ0aWNlczsKKworICAgICAgICBzb3J0ZWRFZGdlc01pbllbaV0gPSAmbV9lZGdl
c1tpXTsKKyAgICB9CisKKyAgICBtX2JvdW5kaW5nQm94LnNldFgobWluWCk7CisgICAgbV9ib3Vu
ZGluZ0JveC5zZXRZKG1pblkpOworICAgIG1fYm91bmRpbmdCb3guc2V0V2lkdGgobWF4WCAtIG1p
blgpOworICAgIG1fYm91bmRpbmdCb3guc2V0SGVpZ2h0KG1heFkgLSBtaW5ZKTsKKworICAgIHN0
ZDo6c29ydChzb3J0ZWRFZGdlc01pblkuYmVnaW4oKSwgc29ydGVkRWRnZXNNaW5ZLmVuZCgpLCBN
aW5FZGdlWUNvbXBhcmF0b3IoKSk7CisgICAgbV9lZGdlVHJlZSA9IGFkb3B0UHRyKG5ldyBFeGNs
dXNpb25Qb2x5Z29uRWRnZVRyZWUoc29ydGVkRWRnZXNNaW5ZKSk7Cit9CisKK3N0YXRpYyBib29s
IGNvbXB1dGVYSW50ZXJzZWN0aW9uKGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlcCwgZmxv
YXQgeSwgRWRnZUludGVyc2VjdGlvbiYgaSkKK3sKKyAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29u
RWRnZSYgZSA9ICplcDsKKworICAgIGlmIChlLm1pblkoKSA+IHkgfHwgZS5tYXhZKCkgPCB5KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCB4MSA9IGUueDEoKTsKKyAgICBmbG9h
dCB5MSA9IGUueTEoKTsKKyAgICBmbG9hdCB4MiA9IGUueDIoKTsKKyAgICBmbG9hdCB5MiA9IGUu
eTIoKTsKKyAgICBmbG9hdCBkeSA9IHkyIC0geTE7CisKKyAgICBpLmVkZ2UgPSBlcDsKKyAgICBp
LnkgPSB5OworCisgICAgaWYgKCFkeSkgeworICAgICAgICBpLnR5cGUgPSBWZXJ0ZXhZQm90aDsK
KyAgICAgICAgaS54ID0gZS5taW5YKCk7CisgICAgfSBlbHNlIGlmICh5ID09IGUubWluWSgpKSB7
CisgICAgICAgIGkudHlwZSA9IFZlcnRleFlNaW47CisgICAgICAgIGkueCA9ICh5MSA8IHkyKSA/
IHgxIDogeDI7CisgICAgfSBlbHNlIGlmICh5ID09IGUubWF4WSgpKSB7CisgICAgICAgIGkudHlw
ZSA9IFZlcnRleFlNYXg7CisgICAgICAgIGkueCA9ICh5MSA+IHkyKSA/IHgxIDogeDI7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaS50eXBlID0gTm9ybWFsOworICAgICAgICBpLnggPSAoKHkgLSB5
MSkgKiAoeDIgLSB4MSkgLyBkeSkgKyB4MTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworZmxvYXQgRXhjbHVzaW9uUG9seWdvbjo6cmlnaHRWZXJ0ZXhZKHNpemVfdCBpbmRleCkgY29u
c3QKK3sKKyAgICBzaXplX3QgblZlcnRpY2VzID0gbnVtYmVyT2ZWZXJ0aWNlcygpOworICAgIHNp
emVfdCBpMSA9IChpbmRleCArIDEpICUgblZlcnRpY2VzOworICAgIHNpemVfdCBpMiA9IChpbmRl
eCAtIDEpICUgblZlcnRpY2VzOworCisgICAgaWYgKGdldFhBdChpMSkgPT0gZ2V0WEF0KGkyKSkK
KyAgICAgICAgcmV0dXJuIGdldFlBdChpMSkgPiBnZXRZQXQoaTIpID8gZ2V0WUF0KGkxKSA6IGdl
dFlBdChpMik7CisKKyAgICByZXR1cm4gZ2V0WEF0KGkxKSA+IGdldFhBdChpMikgPyBnZXRZQXQo
aTEpIDogZ2V0WUF0KGkyKTsKK30KKworc3RhdGljIGJvb2wgYXBwZW5kSW50ZXJ2YWxYKGZsb2F0
IHgsIGJvb2wgaW5zaWRlLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2KQoreworICAgIGlm
ICghaW5zaWRlKQorICAgICAgICB2LmFwcGVuZChFeGNsdXNpb25JbnRlcnZhbCh4KSk7CisgICAg
ZWxzZQorICAgICAgICB2W3Yuc2l6ZSgpIC0gMV0ueDIgPSB4OworCisgICAgcmV0dXJuICFpbnNp
ZGU7Cit9CisKK3ZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZVhJbnRlcnNlY3Rpb25zKGZs
b2F0IHksIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkgY29uc3QKK3sKKyAgICBW
ZWN0b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBvdmVybGFwcGluZ0VkZ2VzOworICAgIG1fZWRn
ZVRyZWUtPmZpbmRFZGdlc1RoYXRPdmVybGFwWSh5LCBvdmVybGFwcGluZ0VkZ2VzKTsKKworICAg
IFZlY3RvcjxFZGdlSW50ZXJzZWN0aW9uPiBpbnRlcnNlY3Rpb25zOworICAgIEVkZ2VJbnRlcnNl
Y3Rpb24gaW50ZXJzZWN0aW9uOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcHBp
bmdFZGdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoY29tcHV0ZVhJbnRlcnNlY3Rpb24o
b3ZlcmxhcHBpbmdFZGdlc1tpXSwgeSwgaW50ZXJzZWN0aW9uKSAmJiBpbnRlcnNlY3Rpb24udHlw
ZSAhPSBWZXJ0ZXhZQm90aCkKKyAgICAgICAgICAgIGludGVyc2VjdGlvbnMuYXBwZW5kKGludGVy
c2VjdGlvbik7CisgICAgfQorICAgIGlmIChpbnRlcnNlY3Rpb25zLnNpemUoKSA8IDIpCisgICAg
ICAgIHJldHVybjsKKworICAgIHN0ZDo6c29ydChpbnRlcnNlY3Rpb25zLmJlZ2luKCksIGludGVy
c2VjdGlvbnMuZW5kKCksIEludGVyc2VjdGlvblhDb21wYXJhdG9yKCkpOworCisgICAgc2l6ZV90
IGluZGV4ID0gMDsKKyAgICBpbnQgd2luZENvdW50ID0gMDsKKyAgICBib29sIGluc2lkZSA9IGZh
bHNlOworCisgICAgd2hpbGUgKGluZGV4IDwgaW50ZXJzZWN0aW9ucy5zaXplKCkpIHsKKyAgICAg
ICAgY29uc3QgRWRnZUludGVyc2VjdGlvbiYgdGhpc0ludCA9IGludGVyc2VjdGlvbnNbaW5kZXhd
OworCisgICAgICAgIGlmIChpbmRleCArIDEgPCBpbnRlcnNlY3Rpb25zLnNpemUoKSkgeworICAg
ICAgICAgICAgY29uc3QgRWRnZUludGVyc2VjdGlvbiYgbmV4dEludCA9IGludGVyc2VjdGlvbnNb
aW5kZXggKzFdOworICAgICAgICAgICAgaWYgKCh0aGlzSW50LnggPT0gbmV4dEludC54KSAmJiAo
dGhpc0ludC50eXBlID09IFZlcnRleFlNaW4gfHwgdGhpc0ludC50eXBlID09IFZlcnRleFlNYXgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXNJbnQudHlwZSA9PSBuZXh0SW50LnR5cGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCBWZXJ0ZXhZTWF4LFZlcnRleFlNYXggYW5kIFZl
cnRleFlNaW4sVmVydGV4WU1pbgorICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFZlcnRleFlNaW4s
VmVydGV4WU1heCBvciBWZXJ0ZXhZTWF4LFZlcnRleFlNaW4gPT4gVmVydGV4WU1pbgorICAgICAg
ICAgICAgICAgICAgICBpZiAobmV4dEludC50eXBlID09IFZlcnRleFlNYXgpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25zW2luZGV4ICsgMV0gPSB0aGlzSW50OworICAgICAg
ICAgICAgICAgICAgICBpbmRleCArPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0
IEV4Y2x1c2lvblBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICp0aGlzSW50LmVkZ2U7CisgICAgICAg
IGJvb2wgY3Jvc3NpbmcgPSAhd2luZENvdW50OworCisgICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9
PSBSVUxFX0VWRU5PREQpIHsKKyAgICAgICAgICAgIHdpbmRDb3VudCArPSAoZ2V0WUF0KHRoaXNF
ZGdlLmkyKSA+IGdldFlBdCh0aGlzRWRnZS5pMSkpID8gKzEgOiAtMTsKKyAgICAgICAgICAgIGNy
b3NzaW5nID0gY3Jvc3NpbmcgfHwgIXdpbmRDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICgodGhpc0ludC50eXBlID09IE5vcm1hbCkgfHwgKHRoaXNJbnQudHlwZSA9PSBWZXJ0ZXhZTWlu
KSkgeworICAgICAgICAgICAgaWYgKGNyb3NzaW5nKQorICAgICAgICAgICAgICAgIGluc2lkZSA9
IGFwcGVuZEludGVydmFsWCh0aGlzSW50LngsIGluc2lkZSwgcmVzdWx0KTsKKyAgICAgICAgfSBl
bHNlIGlmICh0aGlzSW50LnR5cGUgPT0gVmVydGV4WU1heCkgeworICAgICAgICAgICAgaW50IHZp
ID0gKGdldFlBdCh0aGlzRWRnZS5pMikgPiBnZXRZQXQodGhpc0VkZ2UuaTEpKSA/IHRoaXNFZGdl
LmkyIDogdGhpc0VkZ2UuaTE7CisgICAgICAgICAgICBpZiAoY3Jvc3NpbmcgJiYgcmlnaHRWZXJ0
ZXhZKHZpKSA+IHkpCisgICAgICAgICAgICAgICAgaW5zaWRlID0gYXBwZW5kSW50ZXJ2YWxYKHRo
aXNFZGdlLm1heFgoKSwgaW5zaWRlLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgaW5k
ZXggKz0gMTsKKyAgICB9Cit9CisKKy8vIFJldHVybiB0aGUgWCBwcm9qZWN0aW9ucyBvZiB0aGUg
ZWRnZXMgdGhhdCBvdmVybGFwIHkxLHkyLgordm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpjb21wdXRl
RWRnZUludGVyc2VjdGlvbnMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdl
ICo+IG92ZXJsYXBwaW5nRWRnZXM7CisgICAgbV9lZGdlVHJlZS0+ZmluZEVkZ2VzVGhhdE92ZXJs
YXBJbnRlcnZhbCh5MSwgeTIsIG92ZXJsYXBwaW5nRWRnZXMpOworCisgICAgRWRnZUludGVyc2Vj
dGlvbiBpbnRlcnNlY3Rpb247CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwcGlu
Z0VkZ2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdl
JiBlZGdlID0gKm92ZXJsYXBwaW5nRWRnZXNbaV07CisgICAgICAgIGZsb2F0IHgxLCB4MjsKKwor
ICAgICAgICBpZiAoZWRnZS5taW5ZKCkgPCB5MSkgeworICAgICAgICAgICAgY29tcHV0ZVhJbnRl
cnNlY3Rpb24ob3ZlcmxhcHBpbmdFZGdlc1tpXSwgeTEsIGludGVyc2VjdGlvbik7CisgICAgICAg
ICAgICB4MSA9IGludGVyc2VjdGlvbi54OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHgx
ID0gKGVkZ2UueTEoKSA8IGVkZ2UueTIoKSkgPyBlZGdlLngxKCkgOiBlZGdlLngyKCk7CisKKyAg
ICAgICAgaWYgKGVkZ2UubWF4WSgpID4geTIpIHsKKyAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJz
ZWN0aW9uKG92ZXJsYXBwaW5nRWRnZXNbaV0sIHkyLCBpbnRlcnNlY3Rpb24pOworICAgICAgICAg
ICAgeDIgPSBpbnRlcnNlY3Rpb24ueDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB4MiA9
IChlZGdlLnkxKCkgPiBlZGdlLnkyKCkpID8gZWRnZS54MSgpIDogZWRnZS54MigpOworCisgICAg
ICAgIGlmICh4MSA+IHgyKQorICAgICAgICAgICAgc3RkOjpzd2FwKHgxLCB4Mik7CisKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChFeGNsdXNpb25JbnRlcnZhbCh4MSwgeDIpKTsKKyAgICB9CisKKyAg
ICBzb3J0RXhjbHVzaW9uSW50ZXJ2YWxzKHJlc3VsdCk7Cit9CisKK3ZvaWQgRXhjbHVzaW9uUG9s
eWdvbjo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNh
bEJvdHRvbSwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBmbG9hdCB5MSA9IG1p
bllGb3JMb2dpY2FsTGluZShsb2dpY2FsVG9wLCBsb2dpY2FsQm90dG9tKTsKKyAgICBmbG9hdCB5
MiA9IG1heFlGb3JMb2dpY2FsTGluZShsb2dpY2FsVG9wLCBsb2dpY2FsQm90dG9tKTsKKworICAg
IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7Cisg
ICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkxLCB5MVhJbnRlcnZhbHMpOworICAgIGNvbXB1dGVY
SW50ZXJzZWN0aW9ucyh5MiwgeTJYSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxFeGNsdXNpb25J
bnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOworICAgIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxzKHkx
WEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBtZXJnZWRJbnRlcnZhbHMpOworCisgICAgVmVjdG9y
PEV4Y2x1c2lvbkludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVFZGdlSW50ZXJz
ZWN0aW9ucyh5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lvbklu
dGVydmFsPiBleGNsdWRlZEludGVydmFsczsKKyAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFscyht
ZXJnZWRJbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGV4Y2x1ZGVkSW50ZXJ2YWxzKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhjbHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyBpKyspIHsK
KyAgICAgICAgIEV4Y2x1c2lvbkludGVydmFsIGludGVydmFsID0gZXhjbHVkZWRJbnRlcnZhbHNb
aV07CisgICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBpbnRl
cnZhbC54MikpOworICAgIH0KK30KKwordm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpnZXRJbmNsdWRl
ZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsQm90dG9tLCBTZWdtZW50
TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAgIGZsb2F0IHkxID0gbWluWUZvckxvZ2ljYWxMaW5l
KGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOworICAgIGZsb2F0IHkyID0gbWF4WUZvckxvZ2lj
YWxMaW5lKGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOworCisgICAgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKKyAgICBjb21wdXRlWEludGVy
c2VjdGlvbnMoeTEsIHkxWEludGVydmFscyk7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHky
LCB5MlhJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBjb21tb25J
bnRlcnZhbHM7CisgICAgaW50ZXJzZWN0RXhjbHVzaW9uSW50ZXJ2YWxzKHkxWEludGVydmFscywg
eTJYSW50ZXJ2YWxzLCBjb21tb25JbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lvbklu
dGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyh5MSwg
eTIsIGVkZ2VJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBpbmNs
dWRlZEludGVydmFsczsKKyAgICBzdWJ0cmFjdEV4Y2x1c2lvbkludGVydmFscyhjb21tb25JbnRl
cnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGluY2x1ZGVkSW50ZXJ2YWxzKTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaW5jbHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
IEV4Y2x1c2lvbkludGVydmFsIGludGVydmFsID0gaW5jbHVkZWRJbnRlcnZhbHNbaV07CisgICAg
ICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBpbnRlcnZhbC54Mikp
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMjg2MjEzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25Qb2x5Z29uLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK
KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV4
Y2x1c2lvblBvbHlnb25faAorI2RlZmluZSBFeGNsdXNpb25Qb2x5Z29uX2gKKworI2luY2x1ZGUg
IkV4Y2x1c2lvbkludGVydmFsLmgiCisjaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKKyNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgorI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0cnVjdCBFeGNsdXNpb25Qb2x5Z29uRWRnZTsKK3N0cnVjdCBFeGNsdXNpb25Qb2x5Z29u
RWRnZVRyZWU7CisKK2NsYXNzIEV4Y2x1c2lvblBvbHlnb24gOiBwdWJsaWMgRXhjbHVzaW9uU2hh
cGUgeworcHVibGljOgorICAgIEV4Y2x1c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8Zmxv
YXQ+ID4gY29vcmRpbmF0ZXMsIFdpbmRSdWxlIGZpbGxSdWxlKTsKKworICAgIGZsb2F0IGdldFhB
dChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb29yZGluYXRlcy0+YXQoaSoyKTsgfQorICAg
IGZsb2F0IGdldFlBdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb29yZGluYXRlcy0+YXQo
aSoyICsgMSk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZWZXJ0aWNlcygpIGNvbnN0IHsgcmV0dXJu
IG1fY29vcmRpbmF0ZXMtPnNpemUoKSAvIDI7IH0KKyAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsbFJ1bGU7IH0KKworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNoYXBl
TG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gaW50ZXJuYWxUb0xv
Z2ljYWxCb3VuZGluZ0JveChtX2JvdW5kaW5nQm94KTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRF
eGNsdWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsQm90dG9tLCBT
ZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRl
ZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsQm90dG9tLCBTZWdtZW50
TGlzdCYpIGNvbnN0IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIGZsb2F0IHJpZ2h0VmVydGV4
WShzaXplX3QpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKGZsb2F0IHks
IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVFZGdl
SW50ZXJzZWN0aW9ucyhmbG9hdCB5TWluLCBmbG9hdCB5TWF4LCBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+JikgY29uc3Q7CisKKyAgICBPd25QdHI8VmVjdG9yPGZsb2F0PiA+IG1fY29vcmRpbmF0
ZXM7CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZTsKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGluZ0Jv
eDsKKyAgICBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2U+IG1fZWRnZXM7CisgICAgT3duUHRy
PEV4Y2x1c2lvblBvbHlnb25FZGdlVHJlZT4gbV9lZGdlVHJlZTsKK307CisKK3N0cnVjdCBFeGNs
dXNpb25Qb2x5Z29uRWRnZSB7CisgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbiogcG9seWdvbjsK
KyAgICBzaXplX3QgaTE7CisgICAgc2l6ZV90IGkyOworCisgICAgRXhjbHVzaW9uUG9seWdvbkVk
Z2UoKQorICAgICAgICA6IHBvbHlnb24oMCkKKyAgICAgICAgLCBpMSgwKQorICAgICAgICAsIGky
KDApCisgICAgeworICAgIH0KKworICAgIGZsb2F0IHgxKCkgY29uc3QgeyByZXR1cm4gcG9seWdv
bi0+Z2V0WEF0KGkxKTsgfQorICAgIGZsb2F0IHkxKCkgY29uc3QgeyByZXR1cm4gcG9seWdvbi0+
Z2V0WUF0KGkxKTsgfQorICAgIGZsb2F0IHgyKCkgY29uc3QgeyByZXR1cm4gcG9seWdvbi0+Z2V0
WEF0KGkyKTsgfQorICAgIGZsb2F0IHkyKCkgY29uc3QgeyByZXR1cm4gcG9seWdvbi0+Z2V0WUF0
KGkyKTsgfQorCisgICAgZmxvYXQgbWluWCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKHgxKCks
IHgyKCkpOyB9CisgICAgZmxvYXQgbWluWSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKHkxKCks
IHkyKCkpOyB9CisgICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHgxKCks
IHgyKCkpOyB9CisgICAgZmxvYXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHkxKCks
IHkyKCkpOyB9Cit9OworCitzdHJ1Y3QgRXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlIHsKK3ByaXZh
dGU6CisgICAgLy8gRklYTUU6IG1pblN1YnRyZWVTaXplIC0gZG9uJ3QgYm90aGVyIGNyZWF0aW5n
IHN1YnRyZWVzIGZvciBsZXNzIHRoYW4gTiBlZGdlcworICAgIGZsb2F0IGNlbnRlcjsKKyAgICBW
ZWN0b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBvdmVybGFwQ2VudGVyOworICAgIE93blB0cjxF
eGNsdXNpb25Qb2x5Z29uRWRnZVRyZWU+IGFib3ZlQ2VudGVyOworICAgIE93blB0cjxFeGNsdXNp
b25Qb2x5Z29uRWRnZVRyZWU+IGJlbG93Q2VudGVyOworCisgICAgc3RhdGljIHZvaWQgaW5pdEVk
Z2VUcmVlKEV4Y2x1c2lvblBvbHlnb25FZGdlVHJlZSosIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25Q
b2x5Z29uRWRnZSo+JiBzb3J0ZWRFZGdlcyk7CisKK3B1YmxpYzoKKyAgICBFeGNsdXNpb25Qb2x5
Z29uRWRnZVRyZWUoY29uc3QgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlKj4mIHNvcnRlZEVk
Z2VzKTsKKworICAgIHZvaWQgZmluZEVkZ2VzVGhhdE92ZXJsYXBZKGZsb2F0IHksIFZlY3RvcjxF
eGNsdXNpb25Qb2x5Z29uRWRnZSo+JikgY29uc3Q7CisgICAgdm9pZCBmaW5kRWRnZXNUaGF0T3Zl
cmxhcEludGVydmFsKGZsb2F0IG1pblksIGZsb2F0IG1heFksIFZlY3RvcjxFeGNsdXNpb25Qb2x5
Z29uRWRnZSo+JikgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFeGNsdXNpb25Qb2x5Z29uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uU2hhcGUuY3BwCmluZGV4IDBmNDMwZWYuLjRkMjEzMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcApAQCAtMzEsMTAgKzMxLDEwIEBACiAjaW5jbHVk
ZSAiRXhjbHVzaW9uU2hhcGUuaCIKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIK
KyNpbmNsdWRlICJFeGNsdXNpb25Qb2x5Z29uLmgiCiAjaW5jbHVkZSAiRXhjbHVzaW9uUmVjdGFu
Z2xlLmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25z
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAt
NjAsNiArNjAsMTIgQEAgc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4
Y2x1c2lvbkVsbGlwc2UoY29uc3QgRmxvYXRQb2ludCYgY2VudGUKICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IEV4Y2x1c2lvblJlY3RhbmdsZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGlpLndp
ZHRoKCksIGNlbnRlci55KCkgLSByYWRpaS5oZWlnaHQoKSwgcmFkaWkud2lkdGgoKSoyLCByYWRp
aS5oZWlnaHQoKSoyKSwgcmFkaWkpKTsKIH0KIAorc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9u
U2hhcGU+IGNyZWF0ZUV4Y2x1c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8ZmxvYXQ+ID4g
Y29vcmRpbmF0ZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAgIEFTU0VSVCghKGNvb3JkaW5h
dGVzLT5zaXplKCkgJSAyKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25Qb2x5
Z29uKGNvb3JkaW5hdGVzLCBmaWxsUnVsZSkpOworfQorCiAvLyBJZiB0aGUgd3JpdGluZ01vZGUg
aXMgdmVydGljYWwsIHRoZW4gdGhlIEJhc2ljU2hhcGUncyAocGh5c2ljYWwpIHggYW5kIHkgY29v
cmRpbmF0ZXMgYXJlIHN3YXBwZWQsIHNvIHRoYXQKIC8vIGxpbmUgc2VnbWVudHMgYXJlIHBhcmFs
bGVsIHRvIHRoZSBpbnRlcm5hbCBjb29yZGluYXRlIHN5c3RlbSdzIFggYXhpcy4KIApAQCAtMTE3
LDggKzEyMywyNSBAQCBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6
Y3JlYXRlRXhjbHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZQogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1BPTFlHT046Ci0gICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9QT0xZ
R09OOiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKiBwb2x5Z29uID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZVBvbHlnb24qPihiYXNpY1NoYXBlKTsKKyAgICAgICAgY29u
c3QgVmVjdG9yPExlbmd0aD4mIHZhbHVlcyA9IHBvbHlnb24tPnZhbHVlcygpOworICAgICAgICBz
aXplX3QgdmFsdWVzU2l6ZSA9IHZhbHVlcy5zaXplKCk7CisgICAgICAgIFZlY3RvcjxmbG9hdD4q
IGN2ID0gbmV3IFZlY3RvcjxmbG9hdD4odmFsdWVzU2l6ZSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB2YWx1ZXNTaXplOyBpICs9IDIpIHsKKyAgICAgICAgICAgIGZsb2F0IHZl
cnRleFggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpKSwgYm94V2lkdGgpOworICAg
ICAgICAgICAgZmxvYXQgdmVydGV4WSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkr
MSksIGJveEhlaWdodCk7CisgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFdyaXRpbmdNb2RlKSB7
CisgICAgICAgICAgICAgICAgY3YtPmF0KGkpID0gdmVydGV4WDsKKyAgICAgICAgICAgICAgICBj
di0+YXQoaSsxKSA9IHZlcnRleFk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGN2LT5hdChpKSA9IHZlcnRleFk7CisgICAgICAgICAgICAgICAgY3YtPmF0KGkrMSkgPSB2
ZXJ0ZXhYOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGV4Y2x1c2lvblNoYXBl
ID0gY3JlYXRlRXhjbHVzaW9uUG9seWdvbihhZG9wdFB0cihjdiksIHBvbHlnb24tPndpbmRSdWxl
KCkpOworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsK
</data>
<flag name="commit-queue"
          id="178036"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165877</attachid>
            <date>2012-09-26 14:34:26 -0700</date>
            <delta_ts>2012-10-02 16:40:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>33032</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYzVlODgzZS4uMjY5OWFkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIwMjIsNiArMjAyMiw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvQ291bnRlck5vZGUuY3BwCiAgICAgcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAogICAg
IHJlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAKKyAgICByZW5kZXJpbmcvRXhjbHVzaW9u
UG9seWdvbi5jcHAKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcAogICAgIHJl
bmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDYyOWIyZTIuLjFlYzZiNmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw2MiBAQAorMjAxMi0wOS0yNiAgSGFucyBNdWxsZXIgIDxobXVsbGVyQGFkb2Jl
LmNvbT4KKworICAgICAgICBbQ1NTIEV4Y2x1c2lvbnNdIEFkZCBzdXBwb3J0IGZvciBwb2x5Z29u
YWwgc2hhcGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEluaXRpYWwgY29tbWl0IG9mIHRoZSBsYXlvdXQgc3VwcG9ydCBmb3IgcG9seWdvbmFsIGV4Y2x1
c2lvbiBzaGFwZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoRWRnZUludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNYXhF
ZGdlWUNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoTWF4RWRnZVlDb21wYXJhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbkVkZ2VZQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgIChNaW5FZGdlWUNvbXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0
aW9uWENvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9u
UG9seWdvbkVkZ2VUcmVlOjpFeGNsdXNpb25Qb2x5Z29uRWRnZVRyZWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlOjppbml0RWRnZVRyZWUpOgorICAgICAgICAo
V2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlOjpmaW5kRWRnZXNUaGF0T3ZlcmxhcFkp
OgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlOjpmaW5kRWRnZXNU
aGF0T3ZlcmxhcEludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246
OkV4Y2x1c2lvblBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVhJbnRlcnNlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6cmlnaHRWZXJ0ZXhZKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEludGVydmFsWCk6CisgICAgICAgIChXZWJDb3JlOjpF
eGNsdXNpb25Qb2x5Z29uOjpjb21wdXRlWEludGVyc2VjdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoRXhjbHVzaW9uUG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpF
eGNsdXNpb25Qb2x5Z29uOjpnZXRYQXQpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9s
eWdvbjo6Z2V0WUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246Om51bWJl
ck9mVmVydGljZXMpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6ZmlsbFJ1
bGUpOgorICAgICAgICAoRXhjbHVzaW9uUG9seWdvbkVkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RXhjbHVzaW9uUG9seWdvbkVkZ2U6OkV4Y2x1c2lvblBvbHlnb25FZGdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjp4MSk6CisgICAgICAgIChXZWJDb3JlOjpFeGNs
dXNpb25Qb2x5Z29uRWRnZTo6eTEpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdv
bkVkZ2U6OngyKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjp5Mik6
CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uRWRnZTo6bWluWCk6CisgICAgICAg
IChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uRWRnZTo6bWluWSk6CisgICAgICAgIChXZWJDb3Jl
OjpFeGNsdXNpb25Qb2x5Z29uRWRnZTo6bWF4WCk6CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNp
b25Qb2x5Z29uRWRnZTo6bWF4WSk6CisgICAgICAgIChFeGNsdXNpb25Qb2x5Z29uRWRnZVRyZWUp
OgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVFeGNsdXNpb25Qb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXhjbHVzaW9uU2hhcGU6OmNyZWF0ZUV4Y2x1c2lvblNoYXBlKToKKwogMjAx
Mi0wOS0yNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW5hbWUgUGFnZTo6ZnJhbWVDb3VudCgpIHRvIHN1YmZyYW1lQ291bnQoKSwgYW5kIHJlbGF0
ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGZmZTI2MDAuLjM2NDc5NDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDg4OSw2ICs0ODg5LDggQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmggXAorCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblJlY3RhbmdsZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25SZWN0YW5nbGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQppbmRleCBmYTI3MjRkLi4wNTllYTQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAg
LTExMDEsNiArMTEwMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9k
ZS5jcHAgXAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgXAogICAgIHJlbmRlcmluZy9F
eGNsdXNpb25JbnRlcnZhbC5jcHAgXAorICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNw
cCBcCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAgXAogICAgIHJlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZS5jcHAgXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lk
ZUluZm8uY3BwIFwKQEAgLTIyOTEsNiArMjI5Miw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRl
cmluZy9Db3VudGVyTm9kZS5oIFwKICAgICByZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBcCiAgICAg
cmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmggXAorICAgIHJlbmRlcmluZy9FeGNsdXNpb25Q
b2x5Z29uLmggXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaCBcCiAgICAgcmVu
ZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmggXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8uaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYmE2MmYyNy4uM2ZkYmEwMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMzI5Miw2ICszMjkyLDggQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcv
RWxsaXBzaXNCb3guaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFs
LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmgnLAorICAg
ICAgICAgICAgJ3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4
Y2x1c2lvblJlY3RhbmdsZS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9FeGNsdXNpb25S
ZWN0YW5nbGUuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDkw
OGE3MDUuLmMwYWQ4ZTggMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCkBAIC0zODQzMSw2ICszODQzMSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAgICAgICAgICAg
ICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25Qb2x5Z29uLmNwcCIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgor
ICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5oIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8
L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25SZWN0YW5n
bGUuY3BwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAg
ICAgICAgICAgICA8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDlhMDVkOC4uZmExYTE4ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg0NCw2ICsx
ODQ0LDggQEAKIAkJNkU4Nzk4QkQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3Rhbmds
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4
QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICovOyB9OwogCQk2RTg3
OThCRTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4QjgxNUY4MUU0QTAwQkZFNEFB
IC8qIEV4Y2x1c2lvblNoYXBlLmNwcCAqLzsgfTsKIAkJNkU4Nzk4QkYxNUY4MUU0QTAwQkZFNEFB
IC8qIEV4Y2x1c2lvblNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RTg3OThCOTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RUFGMzQw
RjE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUg
LyogRXhjbHVzaW9uUG9seWdvbi5jcHAgKi87IH07CisJCTZFQUYzNDEwMTYxMzg2OUEwMDg1OTYy
NSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdv
bi5oICovOyB9OwogCQk2RUJDNUVBRjEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCQzVF
QUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLzsgfTsKIAkJNkVCQzVF
QjAxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyog
SlNGbG9hdDY0QXJyYXkuaCAqLzsgfTsKIAkJNkVCRjBFNDgxMkE4OTI2MTAwREIxNzA5IC8qIE9F
U1RleHR1cmVGbG9hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RUJGMEU0NTEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCAq
LzsgfTsKQEAgLTkwNDQsNiArOTA0Niw4IEBACiAJCTZFODc5OEI3MTVGODFFNEEwMEJGRTRBQSAv
KiBFeGNsdXNpb25SZWN0YW5nbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhjbHVzaW9uUmVjdGFuZ2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFODc5
OEI4MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25TaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZFODc5OEI5MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25TaGFwZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUgLyog
RXhjbHVzaW9uUG9seWdvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFeGNsdXNpb25Qb2x5Z29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVB
RjM0MEUxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uUG9seWdvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RUJDNUQ4MDEzOEI0QzRFMDBBMENGOEEgLyogRmxvYXQ2NEFycmF5Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBGbG9hdDY0QXJyYXkuaWRsOyBwYXRoID0gY2FudmFz
L0Zsb2F0NjRBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkM1RUFE
MTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEzNDgsNiArMjEzNTIsOCBAQAogCQkJCUE4Q0ZG
NkJEMEExNTYxMTgwMDBBNDIzNCAvKiBFbGxpcHNpc0JveC5oICovLAogCQkJCTZFODc5OEI0MTVG
ODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5jcHAgKi8sCiAJCQkJNkU4Nzk4QjUx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmggKi8sCisJCQkJNkVBRjM0MEQx
NjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwICovLAorCQkJCTZFQUYzNDBF
MTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggKi8sCiAJCQkJNkU4Nzk4QjYx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgKi8sCiAJCQkJNkU4Nzk4
QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICovLAogCQkJCTZFODc5
OEI4MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi8sCkBAIC0yNTU3NCw2
ICsyNTU4MCw3IEBACiAJCQkJRkI5MkRGNEIxNUZFRDA4NzAwOTk0NDMzIC8qIENsaXBQYXRoT3Bl
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjdCNEE2NjE1RkY2RDZBMDA2QjVGMjIgLyog
UGxhdGZvcm1NZW1vcnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMUQ3
MkY2MTVGRTY5NTMwMEM0QzA3RSAvKiBMYXlvdXRNaWxlc3RvbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQk2RUFGMzQxMDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0yODY3Myw2ICsyODY4MCw3IEBACiAJCQkJRkQ1MzczNTIxMzdCNjUxODAw
MDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0N0UyNzY4MTYwMzZF
REMwMEVFMkFGQiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTRGMUQxMUJGMTVGRjM3MjAwMDI2RTkwOCAvKiBQbGF0Zm9ybU1lbW9yeUluc3Ry
dW1lbnRhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RUFGMzQwRjE2MTM4NjlBMDA4NTk2
MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45NWFiZjgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwCkBAIC0wLDAgKzEsMzg3IEBACisgLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg
ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMK
KyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNsdXNpb25Qb2x5Z29uLmgiCisKKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0g
RWRnZUludGVyc2VjdGlvblR5cGUgeworICAgIE5vcm1hbCA9IDAsCisgICAgVmVydGV4WU1pbiA9
IDEsCisgICAgVmVydGV4WU1heCA9IDIsCisgICAgVmVydGV4WUJvdGggPSAzCit9OworCitzdHJ1
Y3QgRWRnZUludGVyc2VjdGlvbiB7CisgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVk
Z2U7CisgICAgZmxvYXQgeDsKKyAgICBmbG9hdCB5OworICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBl
IHR5cGU7Cit9OworCitzdHJ1Y3QgTWF4RWRnZVlDb21wYXJhdG9yIHsKKyAgICBib29sIG9wZXJh
dG9yKCkgKGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlMSwgY29uc3QgRXhjbHVzaW9uUG9s
eWdvbkVkZ2UqIGUyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGUxLT5tYXhZKCkgPCBl
Mi0+bWF4WSgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IoKSAoY29uc3QgRXhjbHVzaW9u
UG9seWdvbkVkZ2UqIGUsIGZsb2F0IHkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZS0+
bWF4WSgpIDwgeTsKKyAgICB9Cit9OworCitzdHJ1Y3QgTWluRWRnZVlDb21wYXJhdG9yIHsKKyAg
ICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlMSwgY29uc3Qg
RXhjbHVzaW9uUG9seWdvbkVkZ2UqIGUyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGUx
LT5taW5ZKCkgPCBlMi0+bWluWSgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IoKSAoY29u
c3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGUsIGZsb2F0IHkpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gZS0+bWluWSgpIDwgeTsKKyAgICB9Cit9OworCitzdHJ1Y3QgSW50ZXJzZWN0aW9u
WENvbXBhcmF0b3IgeworICAgIGJvb2wgb3BlcmF0b3IoKSAoY29uc3QgRWRnZUludGVyc2VjdGlv
biYgaTEsIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGkyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIChpMS54ID09IGkyLngpID8gaTEudHlwZSA8IGkyLnR5cGUgOiBpMS54IDwgaTIueDsK
KyAgICB9Cit9OworCitFeGNsdXNpb25Qb2x5Z29uRWRnZVRyZWU6OkV4Y2x1c2lvblBvbHlnb25F
ZGdlVHJlZShjb25zdCBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiYgc29ydGVkRWRnZXMp
CisgICAgOiBjZW50ZXIoMCkKK3sKKyAgICBpZiAoc29ydGVkRWRnZXMuc2l6ZSgpID4gMCkKKyAg
ICAgICAgaW5pdEVkZ2VUcmVlKHRoaXMsIHNvcnRlZEVkZ2VzKTsKK30KKwordm9pZCBFeGNsdXNp
b25Qb2x5Z29uRWRnZVRyZWU6OmluaXRFZGdlVHJlZShFeGNsdXNpb25Qb2x5Z29uRWRnZVRyZWUq
IG5vZGUsIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+JiBlZGdlcykKK3sKKyAg
ICBzaXplX3QgZWRnZXNTaXplID0gZWRnZXMuc2l6ZSgpOworICAgIHNpemVfdCBjZW50ZXJJbmRl
eCA9IGVkZ2VzU2l6ZSAvIDI7CisgICAgbm9kZS0+Y2VudGVyID0gKGVkZ2VzW2NlbnRlckluZGV4
XS0+bWluWSgpICsgZWRnZXNbY2VudGVySW5kZXhdLT5tYXhZKCkpIC8gMjsKKworICAgIFZlY3Rv
cjxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+IGFib3ZlQ2VudGVyRWRnZXM7CisgICAgVmVjdG9yPEV4
Y2x1c2lvblBvbHlnb25FZGdlKj4gYmVsb3dDZW50ZXJFZGdlczsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZWRnZXNTaXplOyBpKyspIHsKKyAgICAgICAgRXhjbHVzaW9uUG9seWdvbkVk
Z2UqIGVkZ2UgPSBlZGdlc1tpXTsKKyAgICAgICAgaWYgKGVkZ2UtPm1heFkoKSA8IG5vZGUtPmNl
bnRlcikKKyAgICAgICAgICAgIGFib3ZlQ2VudGVyRWRnZXMuYXBwZW5kKGVkZ2UpOworICAgICAg
ICBlbHNlIGlmIChlZGdlLT5taW5ZKCkgPiBub2RlLT5jZW50ZXIpCisgICAgICAgICAgICBiZWxv
d0NlbnRlckVkZ2VzLmFwcGVuZChlZGdlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbm9k
ZS0+b3ZlcmxhcENlbnRlci5hcHBlbmQoZWRnZSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IGNy
ZWF0ZSB0d28gc29ydGVkIGNvcGllcyBvZiBvdmVybGFwQ2VudGVyOiBvdmVybGFwQ2VudGVyTWlu
WSwgb3ZlcmxhcENlbnRlck1heFksIHVzZSB0aGVtIGluIGZpbmQuLi4KKworICAgIGlmIChhYm92
ZUNlbnRlckVkZ2VzLnNpemUoKSA+IDApCisgICAgICAgIG5vZGUtPmFib3ZlQ2VudGVyID0gYWRv
cHRQdHIobmV3IEV4Y2x1c2lvblBvbHlnb25FZGdlVHJlZShhYm92ZUNlbnRlckVkZ2VzKSk7Cisg
ICAgaWYgKGJlbG93Q2VudGVyRWRnZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgbm9kZS0+YmVsb3dD
ZW50ZXIgPSBhZG9wdFB0cihuZXcgRXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlKGJlbG93Q2VudGVy
RWRnZXMpKTsKK30KKwordm9pZCBFeGNsdXNpb25Qb2x5Z29uRWRnZVRyZWU6OmZpbmRFZGdlc1Ro
YXRPdmVybGFwWShmbG9hdCB5LCBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiYgcnYpIGNv
bnN0Cit7CisgICAgaWYgKHkgPCBjZW50ZXIpIHsKKyAgICAgICAgaWYgKGFib3ZlQ2VudGVyKQor
ICAgICAgICAgICAgYWJvdmVDZW50ZXItPmZpbmRFZGdlc1RoYXRPdmVybGFwWSh5LCBydik7Cisg
ICAgfSBlbHNlIGlmICh5ID4gY2VudGVyKSB7CisgICAgICAgIGlmIChiZWxvd0NlbnRlcikKKyAg
ICAgICAgICAgIGJlbG93Q2VudGVyLT5maW5kRWRnZXNUaGF0T3ZlcmxhcFkoeSwgcnYpOworICAg
IH0KKworICAgIHNpemVfdCBvdmVybGFwRWRnZXNTaXplID0gb3ZlcmxhcENlbnRlci5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwRWRnZXNTaXplOyBpKyspIHsKKyAg
ICAgICAgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2UgPSBvdmVybGFwQ2VudGVyW2ldOworICAg
ICAgICBpZiAoeSA+PSBlZGdlLT5taW5ZKCkgJiYgeSA8PSBlZGdlLT5tYXhZKCkpCisgICAgICAg
ICAgICBydi5hcHBlbmQoZWRnZSk7CisgICAgfQorfQorCit2b2lkIEV4Y2x1c2lvblBvbHlnb25F
ZGdlVHJlZTo6ZmluZEVkZ2VzVGhhdE92ZXJsYXBJbnRlcnZhbChmbG9hdCB5TWluLCBmbG9hdCB5
TWF4LCBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiYgcnYpIGNvbnN0Cit7CisgICAgaWYg
KCh5TWluIDwgY2VudGVyKSAmJiBhYm92ZUNlbnRlcikKKyAgICAgICAgYWJvdmVDZW50ZXItPmZp
bmRFZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwoeU1pbiwgeU1heCwgcnYpOworCisgICAgaWYgKCh5
TWF4ID4gY2VudGVyKSAmJiBiZWxvd0NlbnRlcikKKyAgICAgICAgYmVsb3dDZW50ZXItPmZpbmRF
ZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwoeU1pbiwgeU1heCwgcnYpOworCisgICAgc2l6ZV90IG92
ZXJsYXBFZGdlc1NpemUgPSBvdmVybGFwQ2VudGVyLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG92ZXJsYXBFZGdlc1NpemU7IGkrKykgeworICAgICAgICBFeGNsdXNpb25Qb2x5
Z29uRWRnZSogZWRnZSA9IG92ZXJsYXBDZW50ZXJbaV07CisgICAgICAgIGlmICh5TWF4ID4gZWRn
ZS0+bWluWSgpICYmIHlNaW4gPCBlZGdlLT5tYXhZKCkpCisgICAgICAgICAgICBydi5hcHBlbmQo
ZWRnZSk7CisgICAgfQorfQorCitFeGNsdXNpb25Qb2x5Z29uOjpFeGNsdXNpb25Qb2x5Z29uKFBh
c3NPd25QdHI8VmVjdG9yPGZsb2F0PiA+IGNvb3JkaW5hdGVzLCBXaW5kUnVsZSBmaWxsUnVsZSkK
KyAgICA6IEV4Y2x1c2lvblNoYXBlKCkKKyAgICAsIG1fY29vcmRpbmF0ZXMoY29vcmRpbmF0ZXMp
CisgICAgLCBtX2ZpbGxSdWxlKGZpbGxSdWxlKQoreworICAgIC8vIEZJWE1FOiBoYW5kbGUgc3Bl
Y2lhbCBjYXNlczogbGVzcyB0aGFuIDMgbm9uLWNvbGluZWFyIHZlcnRpY2VzCisgICAgLy8gRklY
TUU6IGFzc3VtaW5nIG9wZW4gcG9seWdvbnMgZm9yIG5vdworCisgICAgc2l6ZV90IG5WZXJ0aWNl
cyA9IG51bWJlck9mVmVydGljZXMoKTsKKyAgICBtX2VkZ2VzLnJlc2l6ZShuVmVydGljZXMpOwor
ICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+IHNvcnRlZEVkZ2VzTWluWShuVmVydGlj
ZXMpOworCisgICAgZmxvYXQgbWluWCA9IGdldFhBdCgwKTsKKyAgICBmbG9hdCBtaW5ZID0gZ2V0
WUF0KDApOworICAgIGZsb2F0IG1heFggPSBtaW5YOworICAgIGZsb2F0IG1heFkgPSBtaW5ZOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuVmVydGljZXM7IGkrKykgeworICAgICAgICBm
bG9hdCB4ID0gZ2V0WEF0KGkpOworICAgICAgICBmbG9hdCB5ID0gZ2V0WUF0KGkpOworCisgICAg
ICAgIG1pblggPSBzdGQ6Om1pbih4LCBtaW5YKTsKKyAgICAgICAgbWF4WCA9IHN0ZDo6bWF4KHgs
IG1heFgpOworICAgICAgICBtaW5ZID0gc3RkOjptaW4oeSwgbWluWSk7CisgICAgICAgIG1heFkg
PSBzdGQ6Om1heCh5LCBtYXhZKTsKKworICAgICAgICBtX2VkZ2VzW2ldLnBvbHlnb24gPSB0aGlz
OworICAgICAgICBtX2VkZ2VzW2ldLmkxID0gaTsKKyAgICAgICAgbV9lZGdlc1tpXS5pMiA9IChp
KzEpICUgblZlcnRpY2VzOworCisgICAgICAgIHNvcnRlZEVkZ2VzTWluWVtpXSA9ICZtX2VkZ2Vz
W2ldOworICAgIH0KKworICAgIG1fYm91bmRpbmdCb3guc2V0WChtaW5YKTsKKyAgICBtX2JvdW5k
aW5nQm94LnNldFkobWluWSk7CisgICAgbV9ib3VuZGluZ0JveC5zZXRXaWR0aChtYXhYIC0gbWlu
WCk7CisgICAgbV9ib3VuZGluZ0JveC5zZXRIZWlnaHQobWF4WSAtIG1pblkpOworCisgICAgc3Rk
Ojpzb3J0KHNvcnRlZEVkZ2VzTWluWS5iZWdpbigpLCBzb3J0ZWRFZGdlc01pblkuZW5kKCksIE1p
bkVkZ2VZQ29tcGFyYXRvcigpKTsKKyAgICBtX2VkZ2VUcmVlID0gYWRvcHRQdHIobmV3IEV4Y2x1
c2lvblBvbHlnb25FZGdlVHJlZShzb3J0ZWRFZGdlc01pblkpKTsKK30KKworc3RhdGljIGJvb2wg
Y29tcHV0ZVhJbnRlcnNlY3Rpb24oY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVwLCBmbG9h
dCB5LCBFZGdlSW50ZXJzZWN0aW9uJiBpKQoreworICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25F
ZGdlJiBlID0gKmVwOworCisgICAgaWYgKGUubWluWSgpID4geSB8fCBlLm1heFkoKSA8IHkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0IHgxID0gZS54MSgpOworICAgIGZsb2F0
IHkxID0gZS55MSgpOworICAgIGZsb2F0IHgyID0gZS54MigpOworICAgIGZsb2F0IHkyID0gZS55
MigpOworICAgIGZsb2F0IGR5ID0geTIgLSB5MTsKKworICAgIGkuZWRnZSA9IGVwOworICAgIGku
eSA9IHk7CisKKyAgICBpZiAoIWR5KSB7CisgICAgICAgIGkudHlwZSA9IFZlcnRleFlCb3RoOwor
ICAgICAgICBpLnggPSBlLm1pblgoKTsKKyAgICB9IGVsc2UgaWYgKHkgPT0gZS5taW5ZKCkpIHsK
KyAgICAgICAgaS50eXBlID0gVmVydGV4WU1pbjsKKyAgICAgICAgaS54ID0gKHkxIDwgeTIpID8g
eDEgOiB4MjsKKyAgICB9IGVsc2UgaWYgKHkgPT0gZS5tYXhZKCkpIHsKKyAgICAgICAgaS50eXBl
ID0gVmVydGV4WU1heDsKKyAgICAgICAgaS54ID0gKHkxID4geTIpID8geDEgOiB4MjsKKyAgICB9
IGVsc2UgeworICAgICAgICBpLnR5cGUgPSBOb3JtYWw7CisgICAgICAgIGkueCA9ICgoeSAtIHkx
KSAqICh4MiAtIHgxKSAvIGR5KSArIHgxOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
CitmbG9hdCBFeGNsdXNpb25Qb2x5Z29uOjpyaWdodFZlcnRleFkoc2l6ZV90IGluZGV4KSBjb25z
dAoreworICAgIHNpemVfdCBuVmVydGljZXMgPSBudW1iZXJPZlZlcnRpY2VzKCk7CisgICAgc2l6
ZV90IGkxID0gKGluZGV4ICsgMSkgJSBuVmVydGljZXM7CisgICAgc2l6ZV90IGkyID0gKGluZGV4
IC0gMSkgJSBuVmVydGljZXM7CisKKyAgICBpZiAoZ2V0WEF0KGkxKSA9PSBnZXRYQXQoaTIpKQor
ICAgICAgICByZXR1cm4gZ2V0WUF0KGkxKSA+IGdldFlBdChpMikgPyBnZXRZQXQoaTEpIDogZ2V0
WUF0KGkyKTsKKworICAgIHJldHVybiBnZXRYQXQoaTEpID4gZ2V0WEF0KGkyKSA/IGdldFlBdChp
MSkgOiBnZXRZQXQoaTIpOworfQorCitzdGF0aWMgYm9vbCBhcHBlbmRJbnRlcnZhbFgoZmxvYXQg
eCwgYm9vbCBpbnNpZGUsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYpCit7CisgICAgaWYg
KCFpbnNpZGUpCisgICAgICAgIHYuYXBwZW5kKEV4Y2x1c2lvbkludGVydmFsKHgpKTsKKyAgICBl
bHNlCisgICAgICAgIHZbdi5zaXplKCkgLSAxXS54MiA9IHg7CisKKyAgICByZXR1cm4gIWluc2lk
ZTsKK30KKwordm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpjb21wdXRlWEludGVyc2VjdGlvbnMoZmxv
YXQgeSwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KSBjb25zdAoreworICAgIFZl
Y3RvcjxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+IG92ZXJsYXBwaW5nRWRnZXM7CisgICAgbV9lZGdl
VHJlZS0+ZmluZEVkZ2VzVGhhdE92ZXJsYXBZKHksIG92ZXJsYXBwaW5nRWRnZXMpOworCisgICAg
VmVjdG9yPEVkZ2VJbnRlcnNlY3Rpb24+IGludGVyc2VjdGlvbnM7CisgICAgRWRnZUludGVyc2Vj
dGlvbiBpbnRlcnNlY3Rpb247CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwcGlu
Z0VkZ2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChjb21wdXRlWEludGVyc2VjdGlvbihv
dmVybGFwcGluZ0VkZ2VzW2ldLCB5LCBpbnRlcnNlY3Rpb24pICYmIGludGVyc2VjdGlvbi50eXBl
ICE9IFZlcnRleFlCb3RoKQorICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5hcHBlbmQoaW50ZXJz
ZWN0aW9uKTsKKyAgICB9CisgICAgaWYgKGludGVyc2VjdGlvbnMuc2l6ZSgpIDwgMikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc3RkOjpzb3J0KGludGVyc2VjdGlvbnMuYmVnaW4oKSwgaW50ZXJz
ZWN0aW9ucy5lbmQoKSwgSW50ZXJzZWN0aW9uWENvbXBhcmF0b3IoKSk7CisKKyAgICBzaXplX3Qg
aW5kZXggPSAwOworICAgIGludCB3aW5kQ291bnQgPSAwOworICAgIGJvb2wgaW5zaWRlID0gZmFs
c2U7CisKKyAgICB3aGlsZSAoaW5kZXggPCBpbnRlcnNlY3Rpb25zLnNpemUoKSkgeworICAgICAg
ICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiB0aGlzSW50ID0gaW50ZXJzZWN0aW9uc1tpbmRleF07
CisKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBuZXh0SW50ID0gaW50ZXJzZWN0aW9uc1tp
bmRleCArMV07CisgICAgICAgICAgICBpZiAoKHRoaXNJbnQueCA9PSBuZXh0SW50LngpICYmICh0
aGlzSW50LnR5cGUgPT0gVmVydGV4WU1pbiB8fCB0aGlzSW50LnR5cGUgPT0gVmVydGV4WU1heCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAodGhpc0ludC50eXBlID09IG5leHRJbnQudHlwZSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBza2lwIFZlcnRleFlNYXgsVmVydGV4WU1heCBhbmQgVmVy
dGV4WU1pbixWZXJ0ZXhZTWluCisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVmVydGV4WU1pbixW
ZXJ0ZXhZTWF4IG9yIFZlcnRleFlNYXgsVmVydGV4WU1pbiA9PiBWZXJ0ZXhZTWluCisgICAgICAg
ICAgICAgICAgICAgIGlmIChuZXh0SW50LnR5cGUgPT0gVmVydGV4WU1heCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGludGVyc2VjdGlvbnNbaW5kZXggKyAxXSA9IHRoaXNJbnQ7CisgICAgICAg
ICAgICAgICAgICAgIGluZGV4ICs9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3Qg
RXhjbHVzaW9uUG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gKnRoaXNJbnQuZWRnZTsKKyAgICAgICAg
Ym9vbCBjcm9zc2luZyA9ICF3aW5kQ291bnQ7CisKKyAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0g
UlVMRV9FVkVOT0REKSB7CisgICAgICAgICAgICB3aW5kQ291bnQgKz0gKGdldFlBdCh0aGlzRWRn
ZS5pMikgPiBnZXRZQXQodGhpc0VkZ2UuaTEpKSA/ICsxIDogLTE7CisgICAgICAgICAgICBjcm9z
c2luZyA9IGNyb3NzaW5nIHx8ICF3aW5kQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
KHRoaXNJbnQudHlwZSA9PSBOb3JtYWwpIHx8ICh0aGlzSW50LnR5cGUgPT0gVmVydGV4WU1pbikp
IHsKKyAgICAgICAgICAgIGlmIChjcm9zc2luZykKKyAgICAgICAgICAgICAgICBpbnNpZGUgPSBh
cHBlbmRJbnRlcnZhbFgodGhpc0ludC54LCBpbnNpZGUsIHJlc3VsdCk7CisgICAgICAgIH0gZWxz
ZSBpZiAodGhpc0ludC50eXBlID09IFZlcnRleFlNYXgpIHsKKyAgICAgICAgICAgIGludCB2aSA9
IChnZXRZQXQodGhpc0VkZ2UuaTIpID4gZ2V0WUF0KHRoaXNFZGdlLmkxKSkgPyB0aGlzRWRnZS5p
MiA6IHRoaXNFZGdlLmkxOworICAgICAgICAgICAgaWYgKGNyb3NzaW5nICYmIHJpZ2h0VmVydGV4
WSh2aSkgPiB5KQorICAgICAgICAgICAgICAgIGluc2lkZSA9IGFwcGVuZEludGVydmFsWCh0aGlz
RWRnZS5tYXhYKCksIGluc2lkZSwgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4
ICs9IDE7CisgICAgfQorfQorCisvLyBSZXR1cm4gdGhlIFggcHJvamVjdGlvbnMgb2YgdGhlIGVk
Z2VzIHRoYXQgb3ZlcmxhcCB5MSx5Mi4KK3ZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZUVk
Z2VJbnRlcnNlY3Rpb25zKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPEV4Y2x1c2lvbkludGVy
dmFsPiYgcmVzdWx0KSBjb25zdAoreworICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uRWRnZSAq
PiBvdmVybGFwcGluZ0VkZ2VzOworICAgIG1fZWRnZVRyZWUtPmZpbmRFZGdlc1RoYXRPdmVybGFw
SW50ZXJ2YWwoeTEsIHkyLCBvdmVybGFwcGluZ0VkZ2VzKTsKKworICAgIEVkZ2VJbnRlcnNlY3Rp
b24gaW50ZXJzZWN0aW9uOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdF
ZGdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSYg
ZWRnZSA9ICpvdmVybGFwcGluZ0VkZ2VzW2ldOworICAgICAgICBmbG9hdCB4MSwgeDI7CisKKyAg
ICAgICAgaWYgKGVkZ2UubWluWSgpIDwgeTEpIHsKKyAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJz
ZWN0aW9uKG92ZXJsYXBwaW5nRWRnZXNbaV0sIHkxLCBpbnRlcnNlY3Rpb24pOworICAgICAgICAg
ICAgeDEgPSBpbnRlcnNlY3Rpb24ueDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB4MSA9
IChlZGdlLnkxKCkgPCBlZGdlLnkyKCkpID8gZWRnZS54MSgpIDogZWRnZS54MigpOworCisgICAg
ICAgIGlmIChlZGdlLm1heFkoKSA+IHkyKSB7CisgICAgICAgICAgICBjb21wdXRlWEludGVyc2Vj
dGlvbihvdmVybGFwcGluZ0VkZ2VzW2ldLCB5MiwgaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAg
IHgyID0gaW50ZXJzZWN0aW9uLng7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgeDIgPSAo
ZWRnZS55MSgpID4gZWRnZS55MigpKSA/IGVkZ2UueDEoKSA6IGVkZ2UueDIoKTsKKworICAgICAg
ICBpZiAoeDEgPiB4MikKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh4MSwgeDIpOworCisgICAgICAg
IHJlc3VsdC5hcHBlbmQoRXhjbHVzaW9uSW50ZXJ2YWwoeDEsIHgyKSk7CisgICAgfQorCisgICAg
c29ydEV4Y2x1c2lvbkludGVydmFscyhyZXN1bHQpOworfQorCit2b2lkIEV4Y2x1c2lvblBvbHln
b246OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxC
b3R0b20sIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgZmxvYXQgeTEgPSBtaW5Z
Rm9yTG9naWNhbExpbmUobG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSk7CisgICAgZmxvYXQgeTIg
PSBtYXhZRm9yTG9naWNhbExpbmUobG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSk7CisKKyAgICBW
ZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOworICAg
IGNvbXB1dGVYSW50ZXJzZWN0aW9ucyh5MSwgeTFYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWElu
dGVyc2VjdGlvbnMoeTIsIHkyWEludGVydmFscyk7CisKKyAgICBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+IG1lcmdlZEludGVydmFsczsKKyAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFscyh5MVhJ
bnRlcnZhbHMsIHkyWEludGVydmFscywgbWVyZ2VkSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxF
eGNsdXNpb25JbnRlcnZhbD4gZWRnZUludGVydmFsczsKKyAgICBjb21wdXRlRWRnZUludGVyc2Vj
dGlvbnMoeTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxFeGNsdXNpb25JbnRl
cnZhbD4gZXhjbHVkZWRJbnRlcnZhbHM7CisgICAgbWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMobWVy
Z2VkSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2YWxzLCBleGNsdWRlZEludGVydmFscyk7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGV4Y2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIEV4Y2x1c2lvbkludGVydmFsIGludGVydmFsID0gZXhjbHVkZWRJbnRlcnZhbHNbaV07
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoaW50ZXJ2YWwueDEsIGludGVydmFs
LngyKSk7CisgICAgfQorfQorCit2b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1ZGVkSW50
ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxCb3R0b20sIFNlZ21lbnRMaXN0
JiByZXN1bHQpIGNvbnN0Cit7CisgICAgZmxvYXQgeTEgPSBtaW5ZRm9yTG9naWNhbExpbmUobG9n
aWNhbFRvcCwgbG9naWNhbEJvdHRvbSk7CisgICAgZmxvYXQgeTIgPSBtYXhZRm9yTG9naWNhbExp
bmUobG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSk7CisKKyAgICBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOworICAgIGNvbXB1dGVYSW50ZXJzZWN0
aW9ucyh5MSwgeTFYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTIsIHky
WEludGVydmFscyk7CisKKyAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGNvbW1vbkludGVy
dmFsczsKKyAgICBpbnRlcnNlY3RFeGNsdXNpb25JbnRlcnZhbHMoeTFYSW50ZXJ2YWxzLCB5MlhJ
bnRlcnZhbHMsIGNvbW1vbkludGVydmFscyk7CisKKyAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2
YWw+IGVkZ2VJbnRlcnZhbHM7CisgICAgY29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKHkxLCB5Miwg
ZWRnZUludGVydmFscyk7CisKKyAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGluY2x1ZGVk
SW50ZXJ2YWxzOworICAgIHN1YnRyYWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbW1vbkludGVydmFs
cywgZWRnZUludGVydmFscywgaW5jbHVkZWRJbnRlcnZhbHMpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBpbmNsdWRlZEludGVydmFscy5zaXplKCk7IGkrKykgeworICAgICAgICBFeGNs
dXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9IGluY2x1ZGVkSW50ZXJ2YWxzW2ldOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBpbnRlcnZhbC54MikpOworICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25Qb2x5Z29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Mjg2MjEzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25Qb2x5Z29uLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisg
KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV4Y2x1c2lv
blBvbHlnb25faAorI2RlZmluZSBFeGNsdXNpb25Qb2x5Z29uX2gKKworI2luY2x1ZGUgIkV4Y2x1
c2lvbkludGVydmFsLmgiCisjaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKKyNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
cnVjdCBFeGNsdXNpb25Qb2x5Z29uRWRnZTsKK3N0cnVjdCBFeGNsdXNpb25Qb2x5Z29uRWRnZVRy
ZWU7CisKK2NsYXNzIEV4Y2x1c2lvblBvbHlnb24gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgewor
cHVibGljOgorICAgIEV4Y2x1c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8ZmxvYXQ+ID4g
Y29vcmRpbmF0ZXMsIFdpbmRSdWxlIGZpbGxSdWxlKTsKKworICAgIGZsb2F0IGdldFhBdChzaXpl
X3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb29yZGluYXRlcy0+YXQoaSoyKTsgfQorICAgIGZsb2F0
IGdldFlBdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb29yZGluYXRlcy0+YXQoaSoyICsg
MSk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZWZXJ0aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fY29v
cmRpbmF0ZXMtPnNpemUoKSAvIDI7IH0KKyAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZmlsbFJ1bGU7IH0KKworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNoYXBlTG9naWNh
bEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gaW50ZXJuYWxUb0xvZ2ljYWxC
b3VuZGluZ0JveChtX2JvdW5kaW5nQm94KTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRl
ZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsQm90dG9tLCBTZWdtZW50
TGlzdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVy
dmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsQm90dG9tLCBTZWdtZW50TGlzdCYp
IGNvbnN0IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIGZsb2F0IHJpZ2h0VmVydGV4WShzaXpl
X3QpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKGZsb2F0IHksIFZlY3Rv
cjxFeGNsdXNpb25JbnRlcnZhbD4mKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVFZGdlSW50ZXJz
ZWN0aW9ucyhmbG9hdCB5TWluLCBmbG9hdCB5TWF4LCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
JikgY29uc3Q7CisKKyAgICBPd25QdHI8VmVjdG9yPGZsb2F0PiA+IG1fY29vcmRpbmF0ZXM7Cisg
ICAgV2luZFJ1bGUgbV9maWxsUnVsZTsKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGluZ0JveDsKKyAg
ICBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2U+IG1fZWRnZXM7CisgICAgT3duUHRyPEV4Y2x1
c2lvblBvbHlnb25FZGdlVHJlZT4gbV9lZGdlVHJlZTsKK307CisKK3N0cnVjdCBFeGNsdXNpb25Q
b2x5Z29uRWRnZSB7CisgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbiogcG9seWdvbjsKKyAgICBz
aXplX3QgaTE7CisgICAgc2l6ZV90IGkyOworCisgICAgRXhjbHVzaW9uUG9seWdvbkVkZ2UoKQor
ICAgICAgICA6IHBvbHlnb24oMCkKKyAgICAgICAgLCBpMSgwKQorICAgICAgICAsIGkyKDApCisg
ICAgeworICAgIH0KKworICAgIGZsb2F0IHgxKCkgY29uc3QgeyByZXR1cm4gcG9seWdvbi0+Z2V0
WEF0KGkxKTsgfQorICAgIGZsb2F0IHkxKCkgY29uc3QgeyByZXR1cm4gcG9seWdvbi0+Z2V0WUF0
KGkxKTsgfQorICAgIGZsb2F0IHgyKCkgY29uc3QgeyByZXR1cm4gcG9seWdvbi0+Z2V0WEF0KGky
KTsgfQorICAgIGZsb2F0IHkyKCkgY29uc3QgeyByZXR1cm4gcG9seWdvbi0+Z2V0WUF0KGkyKTsg
fQorCisgICAgZmxvYXQgbWluWCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKHgxKCksIHgyKCkp
OyB9CisgICAgZmxvYXQgbWluWSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKHkxKCksIHkyKCkp
OyB9CisgICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHgxKCksIHgyKCkp
OyB9CisgICAgZmxvYXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHkxKCksIHkyKCkp
OyB9Cit9OworCitzdHJ1Y3QgRXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlIHsKK3ByaXZhdGU6Cisg
ICAgLy8gRklYTUU6IG1pblN1YnRyZWVTaXplIC0gZG9uJ3QgYm90aGVyIGNyZWF0aW5nIHN1YnRy
ZWVzIGZvciBsZXNzIHRoYW4gTiBlZGdlcworICAgIGZsb2F0IGNlbnRlcjsKKyAgICBWZWN0b3I8
RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBvdmVybGFwQ2VudGVyOworICAgIE93blB0cjxFeGNsdXNp
b25Qb2x5Z29uRWRnZVRyZWU+IGFib3ZlQ2VudGVyOworICAgIE93blB0cjxFeGNsdXNpb25Qb2x5
Z29uRWRnZVRyZWU+IGJlbG93Q2VudGVyOworCisgICAgc3RhdGljIHZvaWQgaW5pdEVkZ2VUcmVl
KEV4Y2x1c2lvblBvbHlnb25FZGdlVHJlZSosIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29u
RWRnZSo+JiBzb3J0ZWRFZGdlcyk7CisKK3B1YmxpYzoKKyAgICBFeGNsdXNpb25Qb2x5Z29uRWRn
ZVRyZWUoY29uc3QgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlKj4mIHNvcnRlZEVkZ2VzKTsK
KworICAgIHZvaWQgZmluZEVkZ2VzVGhhdE92ZXJsYXBZKGZsb2F0IHksIFZlY3RvcjxFeGNsdXNp
b25Qb2x5Z29uRWRnZSo+JikgY29uc3Q7CisgICAgdm9pZCBmaW5kRWRnZXNUaGF0T3ZlcmxhcElu
dGVydmFsKGZsb2F0IG1pblksIGZsb2F0IG1heFksIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uRWRn
ZSo+JikgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
eGNsdXNpb25Qb2x5Z29uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hh
cGUuY3BwCmluZGV4IDBmNDMwZWYuLjRlNDEzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlLmNwcApAQCAtMzEsMTAgKzMxLDEwIEBACiAjaW5jbHVkZSAiRXhj
bHVzaW9uU2hhcGUuaCIKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIKKyNpbmNs
dWRlICJFeGNsdXNpb25Qb2x5Z29uLmgiCiAjaW5jbHVkZSAiRXhjbHVzaW9uUmVjdGFuZ2xlLmgi
CiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNjAsNiAr
NjAsMTIgQEAgc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lv
bkVsbGlwc2UoY29uc3QgRmxvYXRQb2ludCYgY2VudGUKICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEV4Y2x1c2lvblJlY3RhbmdsZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGlpLndpZHRoKCks
IGNlbnRlci55KCkgLSByYWRpaS5oZWlnaHQoKSwgcmFkaWkud2lkdGgoKSoyLCByYWRpaS5oZWln
aHQoKSoyKSwgcmFkaWkpKTsKIH0KIAorc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+
IGNyZWF0ZUV4Y2x1c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8ZmxvYXQ+ID4gY29vcmRp
bmF0ZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAgIEFTU0VSVCghKGNvb3JkaW5hdGVzLT5z
aXplKCkgJSAyKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25Qb2x5Z29uKGNv
b3JkaW5hdGVzLCBmaWxsUnVsZSkpOworfQorCiAvLyBJZiB0aGUgd3JpdGluZ01vZGUgaXMgdmVy
dGljYWwsIHRoZW4gdGhlIEJhc2ljU2hhcGUncyAocGh5c2ljYWwpIHggYW5kIHkgY29vcmRpbmF0
ZXMgYXJlIHN3YXBwZWQsIHNvIHRoYXQKIC8vIGxpbmUgc2VnbWVudHMgYXJlIHBhcmFsbGVsIHRv
IHRoZSBpbnRlcm5hbCBjb29yZGluYXRlIHN5c3RlbSdzIFggYXhpcy4KIApAQCAtODcsOCArOTMs
OCBAQCBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhj
bHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZQogICAgICAgICBmbG9hdCByYWRpdXNZID0gcmFk
aXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVz
WUxlbmd0aCwgYm94SGVpZ2h0KTsKIAogICAgICAgICBleGNsdXNpb25TaGFwZSA9IGhvcml6b250
YWxXcml0aW5nTW9kZQotICAgICAgICAgID8gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpKQot
ICAgICAgICAgIDogY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVjdCh5LCB4LCBoZWln
aHQsIHdpZHRoKSwgRmxvYXRTaXplKHJhZGl1c1ksIHJhZGl1c1gpKTsKKyAgICAgICAgICAgID8g
Y3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwg
RmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpKQorICAgICAgICAgICAgOiBjcmVhdGVFeGNsdXNp
b25SZWN0YW5nbGUoRmxvYXRSZWN0KHksIHgsIGhlaWdodCwgd2lkdGgpLCBGbG9hdFNpemUocmFk
aXVzWSwgcmFkaXVzWCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTk5LDggKzEwNSw4
IEBAIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IEV4Y2x1c2lvblNoYXBlOjpjcmVhdGVFeGNs
dXNpb25TaGFwZShjb25zdCBCYXNpY1NoYXBlCiAgICAgICAgIGZsb2F0IHJhZGl1cyA9ICBmbG9h
dFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+cmFkaXVzKCksIHN0ZDo6bWF4KGJveEhlaWdodCwgYm94
V2lkdGgpKTsKIAogICAgICAgICBleGNsdXNpb25TaGFwZSA9IGhvcml6b250YWxXcml0aW5nTW9k
ZQotICAgICAgICAgID8gY3JlYXRlRXhjbHVzaW9uQ2lyY2xlKEZsb2F0UG9pbnQoY2VudGVyWCwg
Y2VudGVyWSksIHJhZGl1cykKLSAgICAgICAgICA6IGNyZWF0ZUV4Y2x1c2lvbkNpcmNsZShGbG9h
dFBvaW50KGNlbnRlclksIGNlbnRlclgpLCByYWRpdXMpOworICAgICAgICAgICAgPyBjcmVhdGVF
eGNsdXNpb25DaXJjbGUoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgcmFkaXVzKQorICAg
ICAgICAgICAgOiBjcmVhdGVFeGNsdXNpb25DaXJjbGUoRmxvYXRQb2ludChjZW50ZXJZLCBjZW50
ZXJYKSwgcmFkaXVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMTIsMTMgKzExOCwz
MCBAQCBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhj
bHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZQogICAgICAgICBmbG9hdCByYWRpdXNZID0gZmxv
YXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRpdXNZKCksIGJveEhlaWdodCk7CiAKICAgICAg
ICAgZXhjbHVzaW9uU2hhcGUgPSBob3Jpem9udGFsV3JpdGluZ01vZGUKLSAgICAgICAgICA/IGNy
ZWF0ZUV4Y2x1c2lvbkVsbGlwc2UoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgRmxvYXRT
aXplKHJhZGl1c1gsIHJhZGl1c1kpKQotICAgICAgICAgIDogY3JlYXRlRXhjbHVzaW9uRWxsaXBz
ZShGbG9hdFBvaW50KGNlbnRlclksIGNlbnRlclgpLCBGbG9hdFNpemUocmFkaXVzWSwgcmFkaXVz
WCkpOworICAgICAgICAgICAgPyBjcmVhdGVFeGNsdXNpb25FbGxpcHNlKEZsb2F0UG9pbnQoY2Vu
dGVyWCwgY2VudGVyWSksIEZsb2F0U2l6ZShyYWRpdXNYLCByYWRpdXNZKSkKKyAgICAgICAgICAg
IDogY3JlYXRlRXhjbHVzaW9uRWxsaXBzZShGbG9hdFBvaW50KGNlbnRlclksIGNlbnRlclgpLCBG
bG9hdFNpemUocmFkaXVzWSwgcmFkaXVzWCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAg
ICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1BPTFlHT046Ci0gICAgICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9QT0xZR09OOiB7Cisg
ICAgICAgIGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKiBwb2x5Z29uID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQmFzaWNTaGFwZVBvbHlnb24qPihiYXNpY1NoYXBlKTsKKyAgICAgICAgY29uc3QgVmVjdG9y
PExlbmd0aD4mIHZhbHVlcyA9IHBvbHlnb24tPnZhbHVlcygpOworICAgICAgICBzaXplX3QgdmFs
dWVzU2l6ZSA9IHZhbHVlcy5zaXplKCk7CisgICAgICAgIFZlY3RvcjxmbG9hdD4qIGN2ID0gbmV3
IFZlY3RvcjxmbG9hdD4odmFsdWVzU2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB2YWx1ZXNTaXplOyBpICs9IDIpIHsKKyAgICAgICAgICAgIGZsb2F0IHZlcnRleFggPSBm
bG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpKSwgYm94V2lkdGgpOworICAgICAgICAgICAg
ZmxvYXQgdmVydGV4WSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkrMSksIGJveEhl
aWdodCk7CisgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFdyaXRpbmdNb2RlKSB7CisgICAgICAg
ICAgICAgICAgY3YtPmF0KGkpID0gdmVydGV4WDsKKyAgICAgICAgICAgICAgICBjdi0+YXQoaSsx
KSA9IHZlcnRleFk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGN2LT5h
dChpKSA9IHZlcnRleFk7CisgICAgICAgICAgICAgICAgY3YtPmF0KGkrMSkgPSB2ZXJ0ZXhYOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGV4Y2x1c2lvblNoYXBlID0gY3JlYXRl
RXhjbHVzaW9uUG9seWdvbihhZG9wdFB0cihjdiksIHBvbHlnb24tPndpbmRSdWxlKCkpOworICAg
ICAgICBicmVhazsKKyAgICB9CiAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25T
aGFwZUluc2lkZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8uaAppbmRleCA5ZGIxYjEwLi42N2EzYTlmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oCkBAIC01NCw4ICs1
NCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZW1vdmVFeGNsdXNpb25TaGFwZUluc2lk
ZUluZm9Gb3JSZW5kZXJCbG9jayhjb25zdCBSZW5kZXJCbG9jayopOwogICAgIHN0YXRpYyBib29s
IGlzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvRW5hYmxlZEZvclJlbmRlckJsb2NrKGNvbnN0IFJl
bmRlckJsb2NrKik7CiAKLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFRvcCgpIGNvbnN0IAot
ICAgIHsgCisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxUb3AoKSBjb25zdAorICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fc2hhcGUpOwogICAgICAgICByZXR1cm4gbV9zaGFwZS0+c2hhcGVMb2dp
Y2FsQm91bmRpbmdCb3goKS55KCk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166032</attachid>
            <date>2012-09-27 11:08:03 -0700</date>
            <delta_ts>2012-10-02 16:40:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>40583</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlMTdmMWM3Li4xNzFhNzFkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDkt
MjcgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBFeGNs
dXNpb25zXSBBZGQgc3VwcG9ydCBmb3IgcG9seWdvbmFsIHNoYXBlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY4MTEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWZXJpZnkgdGhhdCBhIHJlY3Rhbmd1bGFy
IHNoYXBlLWluc2lkZSBzcGVjaWZpZWQgYXMgYSBwb2x5Z29uIHdvcmtzIGFzIGV4cGVjdGVkIGZv
ciBhbGwgd3JpdGluZy1tb2Rlcy4KKworICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1p
bnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBv
bHlnb24tcmVjdGFuZ2xlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA5LTI3ICBQZXRlciBCZXZlcmxv
byAgPHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFJlYmFzZWxpbmUg
c2V2ZXJhbCB0ZXN0IGRpcmVjdG9yaWVzIGZvciBBbmRyb2lkLy4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24t
cmVjdGFuZ2xlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lvbnMvc2hh
cGUtaW5zaWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3RhbmdsZS1leHBlY3RlZC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YjQ4YmYKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lk
ZS1wb2x5Z29uLXJlY3RhbmdsZS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsNDkgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyAgICAjc2hhcGUtaW5zaWRlLWhv
cml6b250YWwgeworICAgICAgICBwYWRkaW5nOiAyMHB4IDM1cHggMjVweCAxNXB4OworICAgICAg
ICB3aWR0aDogMTUwcHg7CisgICAgICAgIGhlaWdodDogMTc1cHg7CisgICAgICAgIHBvc2l0aW9u
OiByZWxhdGl2ZTsKKyAgICB9CisgICAgI3NoYXBlLWluc2lkZS12ZXJ0aWNhbC1sciB7CisgICAg
ICAgIHBhZGRpbmc6IDIwcHggMzVweCAyNXB4IDE1cHg7CisgICAgICAgIHdpZHRoOiAxNTBweDsK
KyAgICAgICAgaGVpZ2h0OiAxNzVweDsKKyAgICAgICAgLXdlYmtpdC13cml0aW5nLW1vZGU6IHZl
cnRpY2FsLWxyOworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgfQorICAgICNzaGFw
ZS1pbnNpZGUtdmVydGljYWwtcmwgeworICAgICAgICBwYWRkaW5nOiAyMHB4IDM1cHggMjVweCAx
NXB4OworICAgICAgICB3aWR0aDogMTUwcHg7CisgICAgICAgIGhlaWdodDogMTc1cHg7CisgICAg
ICAgIC13ZWJraXQtd3JpdGluZy1tb2RlOiB2ZXJ0aWNhbC1ybDsKKyAgICAgICAgcG9zaXRpb246
IHJlbGF0aXZlOworICAgIH0KKyAgICAjYm9yZGVyIHsKKyAgICAgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgICAgICB0b3A6IDEzcHg7CisgICAgICAgIGxlZnQ6IDE4cHg7CisgICAgICAgIHdp
ZHRoOiAxNTBweDsKKyAgICAgICAgaGVpZ2h0OiAxNzVweDsKKyAgICAgICAgYm9yZGVyOiAycHgg
c29saWQgYmx1ZTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBp
ZD0ic2hhcGUtaW5zaWRlLWhvcml6b250YWwiPgorICAgICAgICA8ZGl2IGlkPSJib3JkZXIiPjwv
ZGl2PgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGNvbnRhaW5lZCBieSB0aGUgYmx1ZSBz
cXVhcmUuCisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0ic2hhcGUtaW5zaWRlLXZlcnRpY2FsLWxy
Ij4KKyAgICAgICAgPGRpdiBpZD0iYm9yZGVyIj48L2Rpdj4KKyAgICAgICAgVGhpcyB0ZXh0IHNo
b3VsZCBiZSBjb250YWluZWQgYnkgdGhlIGJsdWUgc3F1YXJlLgorICAgIDwvZGl2PgorICAgIDxk
aXYgaWQ9InNoYXBlLWluc2lkZS12ZXJ0aWNhbC1ybCI+CisgICAgICAgIDxkaXYgaWQ9ImJvcmRl
ciI+PC9kaXY+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgY29udGFpbmVkIGJ5IHRoZSBi
bHVlIHNxdWFyZS4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBvbHln
b24tcmVjdGFuZ2xlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5z
aWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3RhbmdsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmUzOWFiZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3Rh
bmdsZS5odG1sCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHdpbmRvdy5p
bnRlcm5hbHMuc2V0dGluZ3Muc2V0Q1NTRXhjbHVzaW9uc0VuYWJsZWQodHJ1ZSk7Cis8L3Njcmlw
dD4KKzxzdHlsZT4KKyAgICAjc2hhcGUtaW5zaWRlLWhvcml6b250YWwgeworICAgICAgICB3aWR0
aDogMjAwcHg7CisgICAgICAgIGhlaWdodDogMjIwcHg7CisgICAgICAgIC13ZWJraXQtc2hhcGUt
aW5zaWRlOiBwb2x5Z29uKDE1cHggMjBweCwgMTY1cHggMjBweCwgMTY1cHggMTk1cHgsIDE1cHgg
MTk1cHgpOworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgfQorICAgICNzaGFwZS1p
bnNpZGUtdmVydGljYWwtbHIgeworICAgICAgICB3aWR0aDogMjAwcHg7CisgICAgICAgIGhlaWdo
dDogMjIwcHg7CisgICAgICAgIC13ZWJraXQtc2hhcGUtaW5zaWRlOiBwb2x5Z29uKDE1cHggMjBw
eCwgMTY1cHggMjBweCwgMTY1cHggMTk1cHgsIDE1cHggMTk1cHgpOworICAgICAgICAtd2Via2l0
LXdyaXRpbmctbW9kZTogdmVydGljYWwtbHI7CisgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
KyAgICB9CisgICAgI3NoYXBlLWluc2lkZS12ZXJ0aWNhbC1ybCB7CisgICAgICAgIHdpZHRoOiAy
MDBweDsKKyAgICAgICAgaGVpZ2h0OiAyMjBweDsKKyAgICAgICAgLXdlYmtpdC1zaGFwZS1pbnNp
ZGU6IHBvbHlnb24oMTVweCAyMHB4LCAxNjVweCAyMHB4LCAxNjVweCAxOTVweCwgMTVweCAxOTVw
eCk7CisgICAgICAgIC13ZWJraXQtd3JpdGluZy1tb2RlOiB2ZXJ0aWNhbC1ybDsKKyAgICAgICAg
cG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKyAgICAjYm9yZGVyIHsKKyAgICAgICAgcG9zaXRp
b246IGFic29sdXRlOworICAgICAgICB0b3A6IDEzcHg7CisgICAgICAgIGxlZnQ6IDE4cHg7Cisg
ICAgICAgIHdpZHRoOiAxNTBweDsKKyAgICAgICAgaGVpZ2h0OiAxNzVweDsKKyAgICAgICAgYm9y
ZGVyOiAycHggc29saWQgYmx1ZTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cisg
ICAgPGRpdiBpZD0ic2hhcGUtaW5zaWRlLWhvcml6b250YWwiPgorICAgICAgICA8ZGl2IGlkPSJi
b3JkZXIiPjwvZGl2PgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGNvbnRhaW5lZCBieSB0
aGUgYmx1ZSBzcXVhcmUuCisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0ic2hhcGUtaW5zaWRlLXZl
cnRpY2FsLWxyIj4KKyAgICAgICAgPGRpdiBpZD0iYm9yZGVyIj48L2Rpdj4KKyAgICAgICAgVGhp
cyB0ZXh0IHNob3VsZCBiZSBjb250YWluZWQgYnkgdGhlIGJsdWUgc3F1YXJlLgorICAgIDwvZGl2
PgorICAgIDxkaXYgaWQ9InNoYXBlLWluc2lkZS12ZXJ0aWNhbC1ybCI+CisgICAgICAgIDxkaXYg
aWQ9ImJvcmRlciI+PC9kaXY+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgY29udGFpbmVk
IGJ5IHRoZSBibHVlIHNxdWFyZS4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggYTQxOWExNS4uYjVmNzE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
QEAgLTIwMTgsNiArMjAxOCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5kZXJpbmcv
Q291bnRlck5vZGUuY3BwCiAgICAgcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAogICAgIHJlbmRl
cmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAKKyAgICByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdv
bi5jcHAKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcAogICAgIHJlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZS5jcHAKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGZhZWNlYmQuLmI2MjY2MDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MiBAQAorMjAxMi0wOS0yNyAgSGFucyBNdWxsZXIgIDxobXVsbGVyQGFkb2JlLmNvbT4K
KworICAgICAgICBbQ1NTIEV4Y2x1c2lvbnNdIEFkZCBzdXBwb3J0IGZvciBwb2x5Z29uYWwgc2hh
cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Njgx
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluaXRp
YWwgdmVyc2lvbiBvZiB0aGUgbGF5b3V0IHN1cHBvcnQgZm9yIHBvbHlnb25hbCBleGNsdXNpb24g
c2hhcGVzOiB0aGUgRXhjbHVzaW9uUG9seWdvbiBjbGFzcy4KKyAgICAgICAgU3VwcG9ydHMgdGhl
IHB1YmxpYyBFeGNsdXNpb25TaGFwZSBvcGVyYXRpb25zIHVzaW5nIHRoZSBhbGdvcml0aG0gZGVz
Y3JpYmVkIGhlcmU6CisgICAgICAgIGh0dHA6Ly9oYW5zbXVsbGVyLXdlYmtpdC5ibG9nc3BvdC5j
b20vMjAxMi8wNi9ob3Jpem9udGFsLWJveC1wb2x5Z29uLWludGVyc2VjdGlvbi1mb3IuaHRtbC4K
KyAgICAgICAgQWx0aG91Z2ggYm90aCB0aGUgImluY2x1ZGVkIiBhbmQgImV4Y2x1ZGVkIiBvcGVy
YXRpb25zIGFyZSBzdXBwb3J0ZWQsIG9ubHkgdGhlIGZvcm1lciBpcworICAgICAgICB1c2VkLCBz
aW5jZSBvbmx5IHNoYXBlLWluc2lkZSBpcyBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudC4KKworICAg
ICAgICBQb2x5Z29uIGVkZ2VzIGFyZSByZXByZXNlbnRlZCBieSB0aGUgRXhjbHVzaW9uUG9seWdv
bkVkZ2UgY2xhc3MsIHdoaWNoIHJlY29yZHMgdGhlIGluZGljZXMgb2YKKyAgICAgICAgdGhlIHBh
aXIgb2YgdmVydGljZXMgam9pbmVkIGJ5IHRoZSBlZGdlLgorCisgICAgICAgIFRoZSBFeGNsdXNp
b25Qb2x5Z29uIGNsYXNzIHN0b3JlcyB0aGUgcG9seWdvbidzIGVkZ2VzIGluIGFuIGludGVydmFs
IHRyZWUgaW1wbGVtZW50YXRpb24gY2FsbGVkCisgICAgICAgIEV4Y2x1c2lvblBvbHlnb25FZGdl
VHJlZS4gRWFjaCB0cmVlIG5vZGUgc3RvcmVzIGEgbGlzdCBvZiBlZGdlcyB3aG9zZSBZIGNvb3Jk
aW5hdGVzIGFyZSBjb21wbGV0ZWx5IGFib3ZlLAorICAgICAgICBvdmVybGFwLCBvciBiZWxvdyBh
ICJjZW50ZXIiIHZhbHVlLiAgVGhlIGFib3ZlIGFuZCBiZWxvdyBsaXN0cyBhcmUgcmVjdXJzaXZl
bHkgc3ViZGl2aWRlZCB1bnRpbAorICAgICAgICBubyBhYm92ZS9iZWxvdyBlZGdlcyByZW1haW4u
ICBGaW5kaW5nIGFsbCBvZiB0aGUgZWRnZXMgdGhhdCBvdmVybGFwIGEgWSB2YWx1ZSwgb3IgYSBZ
IGludGVydmFsIGlzCisgICAgICAgIE8obG9nIG4pLgorCisgICAgICAgIEFsdGhvdWdoIHRoZSBp
bXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBjb21wbGV4IHBvbHlnb25zLCB0aGUgbGF5b3V0IGNvZGUg
aXMgbGltaXRlZCB0bworICAgICAgICBlc3NlbnRpYWxseSByZWN0YW5ndWxhciBzaGFwZXMgdW50
aWwgYSBwYXRjaCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2
ODEzCisgICAgICAgIGxhbmRzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZXhjbHVzaW9ucy9zaGFw
ZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLmh0bWwKKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEVkZ2VJbnRlcnNlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRnZU1pbllDb21wYXJhdG9yOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEVkZ2VNaW5ZQ29tcGFyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3Rpb25Y
Q29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5
Z29uRWRnZVRyZWU6OkV4Y2x1c2lvblBvbHlnb25FZGdlVHJlZSk6IHNlZSBhYm92ZSBmb3IgYSBk
ZXNjcmlwdGlvbiBvZiB0aGlzIHR5cGUKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHln
b25FZGdlVHJlZTo6aW5pdEVkZ2VUcmVlKTogcmVjdXJzaXZlbHkgY3JlYXRlIHRoZSB0cmVlJ3Mg
c3Vic3RydWN0dXJlCisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uRWRnZVRyZWU6
OmZpbmRFZGdlc1RoYXRPdmVybGFwWSk6CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5
Z29uRWRnZVRyZWU6OmZpbmRFZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwpOgorICAgICAgICAoV2Vi
Q29yZTo6RXhjbHVzaW9uUG9seWdvbjo6RXhjbHVzaW9uUG9seWdvbik6IHNlZSBhYm92ZSBmb3Ig
YSBkZXNjcmlwdGlvbiBvZiB0aGlzIHR5cGUKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVYSW50
ZXJzZWN0aW9uKTogZmluZCBhbmQgY2xhc3NpZnkgdGhlIFggaW50ZXJjZXB0IG9mIGEgcG9seWdv
biBlZGdlIGZvciBzb21lIFkgdmFsdWUsIGlmIGFueQorICAgICAgICAoV2ViQ29yZTo6RXhjbHVz
aW9uUG9seWdvbjo6cmlnaHRWZXJ0ZXhZKTogdXNlZCB0byBkZWNpZGUgaWYgYSBob3Jpem9udGFs
IGxpbmUgImNyb3NzZXMiIGEgdmVydGV4CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRJbnRlcnZh
bFgpOiBhcHBlbmQgdGhlIHN0YXJ0IG9yIGVuZCBYIGNvb3JkaW5hdGVzIG9mIGFuIEV4Y2x1c2lv
bkludGVydmFsCisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpjb21wdXRlWElu
dGVyc2VjdGlvbnMpOiBhbGwgb2YgdGhlIGludGVyc2VjdGlvbnMgb2YgYSBob3Jpem9udGFsIGxp
bmUgYW5kIHRoZSBwb2x5Z29uJ3MgZWRnZXMKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBv
bHlnb246OmNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyk6IHRoZSBYIHByb2plY3Rpb25zIG9mIHRo
ZSBlZGdlcyB0aGF0IG92ZXJsYXAgYSBob3Jpem9uYWwgcmVjdGFuZ2xlCisgICAgICAgIChXZWJD
b3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpnZXRFeGNsdWRlZEludGVydmFscyk6IFggaW50ZXJ2YWxz
IHdpdGhpbiBhIGhvcml6b250YWwgcmVjdGFuZ2xlIHRoYXQgb3ZlcmxhcCB0aGUgcG9seWdvbgor
ICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMp
OiBYIGludGVydmFscyB3aXRoaW4gYSBob3Jpem9udGFsIHJlY3RhbmdsZSB0aGF0IGZpdCBpbnNp
ZGUgdGhlIHBvbHlnb24KKyAgICAgICAgKiByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRXhjbHVzaW9uUG9seWdvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpnZXRYQXQpOiBYIGNvb3JkaW5hdGUg
b2YgYSBwb2x5Z29uIHZlcnRleAorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6
Z2V0WUF0KTogWSBjb29yZGluYXRlIG9mIGEgcG9seWdvbiB2ZXJ0ZXgKKyAgICAgICAgKFdlYkNv
cmU6OkV4Y2x1c2lvblBvbHlnb246Om51bWJlck9mVmVydGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXhjbHVzaW9uUG9seWdvbjo6ZmlsbFJ1bGUpOiBkZWZpbmVzICJpbnNpZGUiIGZvciBzZWxm
LWludGVyc2VjdGluZyBwb2x5Z29ucworICAgICAgICAoRXhjbHVzaW9uUG9seWdvbkVkZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2U6OkV4Y2x1c2lvblBvbHlnb25F
ZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjp4MSk6IFggY29v
cmRpbmF0ZSBvZiB0aGUgZWRnZXMgMXN0IHZlcnRleAorICAgICAgICAoV2ViQ29yZTo6RXhjbHVz
aW9uUG9seWdvbkVkZ2U6OnkxKTogWSBjb29yZGluYXRlIG9mIHRoZSBlZGdlcyAxc3QgdmVydGV4
CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uRWRnZTo6eDIpOiBYIGNvb3JkaW5h
dGUgb2YgdGhlIGVkZ2VzIDJuZCB2ZXJ0ZXgKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBv
bHlnb25FZGdlOjp5Mik6IFkgY29vcmRpbmF0ZSBvZiB0aGUgZWRnZXMgMm5kIHZlcnRleAorICAg
ICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2U6Om1pblgpOgorICAgICAgICAoV2Vi
Q29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2U6Om1pblkpOgorICAgICAgICAoV2ViQ29yZTo6RXhj
bHVzaW9uUG9seWdvbkVkZ2U6Om1heFgpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9s
eWdvbkVkZ2U6Om1heFkpOgorICAgICAgICAoRXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlRXhjbHVzaW9uUG9seWdvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkV4Y2x1c2lvblNoYXBlOjpjcmVhdGVFeGNsdXNpb25TaGFwZSk6CisgICAgICAgICog
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFeGNsdXNpb25TaGFwZUluc2lkZUluZm86OmlzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvRW5h
YmxlZEZvclJlbmRlckJsb2NrKTogYWxsb3cgQkFTSUNfU0hBUEVfUE9MWUdPTiBzaGFwZXMKKyAg
ICAgICAgKiByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmg6CisgICAgICAgIChX
ZWJDb3JlOjpFeGNsdXNpb25TaGFwZUluc2lkZUluZm86OnNoYXBlTG9naWNhbFRvcCk6CisKIDIw
MTItMDktMjcgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIDMz
MmtCIGJlbG93IERvY3VtZW50RXZlbnRRdWV1ZTo6Y3JlYXRlKCkgb24gTWVtYnVzdGVyMy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGZmZTI2MDAuLjM2NDc5NDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDg4OSw2ICs0ODg5LDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmggXAorCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblBvbHlnb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blJlY3RhbmdsZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0
YW5nbGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQppbmRleCBmYTI3MjRkLi4wNTllYTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTExMDEs
NiArMTEwMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAg
XAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgXAogICAgIHJlbmRlcmluZy9FeGNsdXNp
b25JbnRlcnZhbC5jcHAgXAorICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBcCiAg
ICAgcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAgXAogICAgIHJlbmRlcmluZy9FeGNs
dXNpb25TaGFwZS5jcHAgXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8u
Y3BwIFwKQEAgLTIyOTEsNiArMjI5Miw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9D
b3VudGVyTm9kZS5oIFwKICAgICByZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBcCiAgICAgcmVuZGVy
aW5nL0V4Y2x1c2lvbkludGVydmFsLmggXAorICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29u
LmggXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaCBcCiAgICAgcmVuZGVyaW5n
L0V4Y2x1c2lvblNoYXBlLmggXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8uaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggODQwMGMzMS4uMWNiMmIxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMzI5Miw2ICszMjkyLDggQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvRWxsaXBz
aXNCb3guaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcCcs
CiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmgnLAorICAgICAgICAg
ICAgJ3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCcsCisgICAgICAgICAgICAncmVuZGVy
aW5nL0V4Y2x1c2lvblBvbHlnb24uaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lv
blJlY3RhbmdsZS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5n
bGUuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDkwOGE3MDUu
LmMwYWQ4ZTggMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCkBAIC0zODQzMSw2ICszODQzMSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAgICAgICAgICAgICAgICAg
ICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBh
dGg9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25Qb2x5Z29uLmNwcCIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgorICAgICAg
ICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5oIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+
CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25SZWN0YW5nbGUuY3Bw
IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAg
ICAgICA8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggNDlhMDVkOC4uZmExYTE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg0NCw2ICsxODQ0LDgg
QEAKIAkJNkU4Nzk4QkQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4QjcxNUY4
MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICovOyB9OwogCQk2RTg3OThCRTE1
RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4QjgxNUY4MUU0QTAwQkZFNEFBIC8qIEV4
Y2x1c2lvblNoYXBlLmNwcCAqLzsgfTsKIAkJNkU4Nzk4QkYxNUY4MUU0QTAwQkZFNEFBIC8qIEV4
Y2x1c2lvblNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RTg3OThCOTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RUFGMzQwRjE2MTM4
NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUgLyogRXhj
bHVzaW9uUG9seWdvbi5jcHAgKi87IH07CisJCTZFQUYzNDEwMTYxMzg2OUEwMDg1OTYyNSAvKiBF
eGNsdXNpb25Qb2x5Z29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oICov
OyB9OwogCQk2RUJDNUVBRjEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCQzVFQUQxMzhC
NTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLzsgfTsKIAkJNkVCQzVFQjAxMzhC
NTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9h
dDY0QXJyYXkuaCAqLzsgfTsKIAkJNkVCRjBFNDgxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1
cmVGbG9hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2RUJGMEU0NTEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCAqLzsgfTsK
QEAgLTkwNDQsNiArOTA0Niw4IEBACiAJCTZFODc5OEI3MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNs
dXNpb25SZWN0YW5nbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVz
aW9uUmVjdGFuZ2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFODc5OEI4MTVG
ODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25TaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZFODc5OEI5MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25TaGFwZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVz
aW9uUG9seWdvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNs
dXNpb25Qb2x5Z29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBRjM0MEUx
NjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uUG9seWdvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RUJDNUQ4MDEzOEI0QzRFMDBBMENGOEEgLyogRmxvYXQ2NEFycmF5LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IG5hbWUgPSBGbG9hdDY0QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL0Zsb2F0
NjRBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkM1RUFEMTM4QjUw
RjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjEzNDgsNiArMjEzNTIsOCBAQAogCQkJCUE4Q0ZGNkJEMEEx
NTYxMTgwMDBBNDIzNCAvKiBFbGxpcHNpc0JveC5oICovLAogCQkJCTZFODc5OEI0MTVGODFFNEEw
MEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5jcHAgKi8sCiAJCQkJNkU4Nzk4QjUxNUY4MUU0
QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmggKi8sCisJCQkJNkVBRjM0MEQxNjEzODY5
QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwICovLAorCQkJCTZFQUYzNDBFMTYxMzg2
OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggKi8sCiAJCQkJNkU4Nzk4QjYxNUY4MUU0
QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgKi8sCiAJCQkJNkU4Nzk4QjcxNUY4
MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICovLAogCQkJCTZFODc5OEI4MTVG
ODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi8sCkBAIC0yNTU3NCw2ICsyNTU4
MCw3IEBACiAJCQkJRkI5MkRGNEIxNUZFRDA4NzAwOTk0NDMzIC8qIENsaXBQYXRoT3BlcmF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjdCNEE2NjE1RkY2RDZBMDA2QjVGMjIgLyogUGxhdGZv
cm1NZW1vcnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMUQ3MkY2MTVG
RTY5NTMwMEM0QzA3RSAvKiBMYXlvdXRNaWxlc3RvbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk2
RUFGMzQxMDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0yODY3Myw2ICsyODY4MCw3IEBACiAJCQkJRkQ1MzczNTIxMzdCNjUxODAwMDA4RENF
IC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0N0UyNzY4MTYwMzZFREMwMEVF
MkFGQiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTRGMUQxMUJGMTVGRjM3MjAwMDI2RTkwOCAvKiBQbGF0Zm9ybU1lbW9yeUluc3RydW1lbnRh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RUFGMzQwRjE2MTM4NjlBMDA4NTk2MjUgLyog
RXhjbHVzaW9uUG9seWdvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4xOWRjM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwCkBAIC0wLDAgKzEsMzc3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUK
KyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4Y2x1c2lvblBvbHlnb24uaCIKKworI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBFZGdlSW50
ZXJzZWN0aW9uVHlwZSB7CisgICAgTm9ybWFsID0gMCwKKyAgICBWZXJ0ZXhZTWluID0gMSwKKyAg
ICBWZXJ0ZXhZTWF4ID0gMiwKKyAgICBWZXJ0ZXhZQm90aCA9IDMKK307CisKK3N0cnVjdCBFZGdl
SW50ZXJzZWN0aW9uIHsKKyAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZTsKKyAg
ICBmbG9hdCB4OworICAgIGZsb2F0IHk7CisgICAgRWRnZUludGVyc2VjdGlvblR5cGUgdHlwZTsK
K307CisKK3N0cnVjdCBFZGdlTWluWUNvbXBhcmF0b3IgeworICAgIGJvb2wgb3BlcmF0b3IoKSAo
Y29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGUxLCBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRn
ZSogZTIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZTEtPm1pblkoKSA8IGUyLT5taW5Z
KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcigpIChjb25zdCBFeGNsdXNpb25Qb2x5Z29u
RWRnZSogZSwgZmxvYXQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBlLT5taW5ZKCkg
PCB5OworICAgIH0KK307CitzdHJ1Y3QgSW50ZXJzZWN0aW9uWENvbXBhcmF0b3IgeworICAgIGJv
b2wgb3BlcmF0b3IoKSAoY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaTEsIGNvbnN0IEVkZ2VJbnRl
cnNlY3Rpb24mIGkyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChpMS54ID09IGkyLngp
ID8gaTEudHlwZSA8IGkyLnR5cGUgOiBpMS54IDwgaTIueDsKKyAgICB9Cit9OworCitFeGNsdXNp
b25Qb2x5Z29uRWRnZVRyZWU6OkV4Y2x1c2lvblBvbHlnb25FZGdlVHJlZShjb25zdCBWZWN0b3I8
RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiYgc29ydGVkRWRnZXMpCisgICAgOiBjZW50ZXIoMCkKK3sK
KyAgICBpZiAoc29ydGVkRWRnZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgaW5pdEVkZ2VUcmVlKHRo
aXMsIHNvcnRlZEVkZ2VzKTsKK30KKwordm9pZCBFeGNsdXNpb25Qb2x5Z29uRWRnZVRyZWU6Omlu
aXRFZGdlVHJlZShFeGNsdXNpb25Qb2x5Z29uRWRnZVRyZWUqIG5vZGUsIGNvbnN0IFZlY3RvcjxF
eGNsdXNpb25Qb2x5Z29uRWRnZSo+JiBlZGdlcykKK3sKKyAgICBzaXplX3QgZWRnZXNTaXplID0g
ZWRnZXMuc2l6ZSgpOworICAgIHNpemVfdCBjZW50ZXJJbmRleCA9IGVkZ2VzU2l6ZSAvIDI7Cisg
ICAgbm9kZS0+Y2VudGVyID0gKGVkZ2VzW2NlbnRlckluZGV4XS0+bWluWSgpICsgZWRnZXNbY2Vu
dGVySW5kZXhdLT5tYXhZKCkpIC8gMjsKKworICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uRWRn
ZSo+IGFib3ZlQ2VudGVyRWRnZXM7CisgICAgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlKj4g
YmVsb3dDZW50ZXJFZGdlczsKKworICAgIC8vIEZJWE1FOiBtaW5TdWJ0cmVlU2l6ZSAtIGRvbid0
IGJvdGhlciBjcmVhdGluZyBzdWJ0cmVlcyBmb3IgbGVzcyB0aGFuIE4gZWRnZXMsIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Nzc5NQorCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBlZGdlc1NpemU7IGkrKykgeworICAgICAgICBFeGNsdXNpb25Qb2x5Z29uRWRn
ZSogZWRnZSA9IGVkZ2VzW2ldOworICAgICAgICBpZiAoZWRnZS0+bWF4WSgpIDwgbm9kZS0+Y2Vu
dGVyKQorICAgICAgICAgICAgYWJvdmVDZW50ZXJFZGdlcy5hcHBlbmQoZWRnZSk7CisgICAgICAg
IGVsc2UgaWYgKGVkZ2UtPm1pblkoKSA+IG5vZGUtPmNlbnRlcikKKyAgICAgICAgICAgIGJlbG93
Q2VudGVyRWRnZXMuYXBwZW5kKGVkZ2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBub2Rl
LT5vdmVybGFwQ2VudGVyLmFwcGVuZChlZGdlKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogY3Jl
YXRlIHR3byBzb3J0ZWQgY29waWVzIG9mIG92ZXJsYXBDZW50ZXI6IG92ZXJsYXBDZW50ZXJNaW5Z
LCBvdmVybGFwQ2VudGVyTWF4WSwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk3Nzk3CisKKyAgICBpZiAoYWJvdmVDZW50ZXJFZGdlcy5zaXplKCkgPiAwKQorICAgICAg
ICBub2RlLT5hYm92ZUNlbnRlciA9IGFkb3B0UHRyKG5ldyBFeGNsdXNpb25Qb2x5Z29uRWRnZVRy
ZWUoYWJvdmVDZW50ZXJFZGdlcykpOworICAgIGlmIChiZWxvd0NlbnRlckVkZ2VzLnNpemUoKSA+
IDApCisgICAgICAgIG5vZGUtPmJlbG93Q2VudGVyID0gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblBv
bHlnb25FZGdlVHJlZShiZWxvd0NlbnRlckVkZ2VzKSk7Cit9CisKK3ZvaWQgRXhjbHVzaW9uUG9s
eWdvbkVkZ2VUcmVlOjpmaW5kRWRnZXNUaGF0T3ZlcmxhcFkoZmxvYXQgeSwgVmVjdG9yPEV4Y2x1
c2lvblBvbHlnb25FZGdlKj4mIHJlc3VsdCkgY29uc3QKK3sKKyAgICBpZiAoeSA8IGNlbnRlcikg
eworICAgICAgICBpZiAoYWJvdmVDZW50ZXIpCisgICAgICAgICAgICBhYm92ZUNlbnRlci0+Zmlu
ZEVkZ2VzVGhhdE92ZXJsYXBZKHksIHJlc3VsdCk7CisgICAgfSBlbHNlIGlmICh5ID4gY2VudGVy
KSB7CisgICAgICAgIGlmIChiZWxvd0NlbnRlcikKKyAgICAgICAgICAgIGJlbG93Q2VudGVyLT5m
aW5kRWRnZXNUaGF0T3ZlcmxhcFkoeSwgcmVzdWx0KTsKKyAgICB9CisKKyAgICBzaXplX3Qgb3Zl
cmxhcEVkZ2VzU2l6ZSA9IG92ZXJsYXBDZW50ZXIuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgb3ZlcmxhcEVkZ2VzU2l6ZTsgaSsrKSB7CisgICAgICAgIEV4Y2x1c2lvblBvbHln
b25FZGdlKiBlZGdlID0gb3ZlcmxhcENlbnRlcltpXTsKKyAgICAgICAgaWYgKHkgPj0gZWRnZS0+
bWluWSgpICYmIHkgPD0gZWRnZS0+bWF4WSgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChl
ZGdlKTsKKyAgICB9Cit9CisKK3ZvaWQgRXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlOjpmaW5kRWRn
ZXNUaGF0T3ZlcmxhcEludGVydmFsKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPEV4Y2x1c2lv
blBvbHlnb25FZGdlKj4mIHJlc3VsdCkgY29uc3QKK3sKKyAgICBpZiAoKHkxIDwgY2VudGVyKSAm
JiBhYm92ZUNlbnRlcikKKyAgICAgICAgYWJvdmVDZW50ZXItPmZpbmRFZGdlc1RoYXRPdmVybGFw
SW50ZXJ2YWwoeTEsIHkyLCByZXN1bHQpOworCisgICAgaWYgKCh5MiA+IGNlbnRlcikgJiYgYmVs
b3dDZW50ZXIpCisgICAgICAgIGJlbG93Q2VudGVyLT5maW5kRWRnZXNUaGF0T3ZlcmxhcEludGVy
dmFsKHkxLCB5MiwgcmVzdWx0KTsKKworICAgIHNpemVfdCBvdmVybGFwRWRnZXNTaXplID0gb3Zl
cmxhcENlbnRlci5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwRWRn
ZXNTaXplOyBpKyspIHsKKyAgICAgICAgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2UgPSBvdmVy
bGFwQ2VudGVyW2ldOworICAgICAgICBpZiAoeTIgPiBlZGdlLT5taW5ZKCkgJiYgeTEgPCBlZGdl
LT5tYXhZKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGVkZ2UpOworICAgIH0KK30KKwor
RXhjbHVzaW9uUG9seWdvbjo6RXhjbHVzaW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxmbG9h
dD4gPiBjb29yZGluYXRlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCisgICAgOiBFeGNsdXNpb25TaGFw
ZSgpCisgICAgLCBtX2Nvb3JkaW5hdGVzKGNvb3JkaW5hdGVzKQorICAgICwgbV9maWxsUnVsZShm
aWxsUnVsZSkKK3sKKyAgICAvLyBGSVhNRTogaGFuZGxlIHNwZWNpYWwgY2FzZXM6IGxlc3MgdGhh
biAzIG5vbi1jb2xpbmVhciB2ZXJ0aWNlcworICAgIC8vIEZJWE1FOiBhc3N1bWluZyBvcGVuIHBv
bHlnb25zIGZvciBub3cKKworICAgIHNpemVfdCBuVmVydGljZXMgPSBudW1iZXJPZlZlcnRpY2Vz
KCk7CisgICAgbV9lZGdlcy5yZXNpemUoblZlcnRpY2VzKTsKKyAgICBWZWN0b3I8RXhjbHVzaW9u
UG9seWdvbkVkZ2UqPiBzb3J0ZWRFZGdlc01pblkoblZlcnRpY2VzKTsKKworICAgIGZsb2F0IG1p
blggPSBnZXRYQXQoMCk7CisgICAgZmxvYXQgbWluWSA9IGdldFlBdCgwKTsKKyAgICBmbG9hdCBt
YXhYID0gbWluWDsKKyAgICBmbG9hdCBtYXhZID0gbWluWTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgblZlcnRpY2VzOyBpKyspIHsKKyAgICAgICAgZmxvYXQgeCA9IGdldFhBdChpKTsK
KyAgICAgICAgZmxvYXQgeSA9IGdldFlBdChpKTsKKworICAgICAgICBtaW5YID0gc3RkOjptaW4o
eCwgbWluWCk7CisgICAgICAgIG1heFggPSBzdGQ6Om1heCh4LCBtYXhYKTsKKyAgICAgICAgbWlu
WSA9IHN0ZDo6bWluKHksIG1pblkpOworICAgICAgICBtYXhZID0gc3RkOjptYXgoeSwgbWF4WSk7
CisKKyAgICAgICAgbV9lZGdlc1tpXS5wb2x5Z29uID0gdGhpczsKKyAgICAgICAgbV9lZGdlc1tp
XS5pMSA9IGk7CisgICAgICAgIG1fZWRnZXNbaV0uaTIgPSAoaSsxKSAlIG5WZXJ0aWNlczsKKwor
ICAgICAgICBzb3J0ZWRFZGdlc01pbllbaV0gPSAmbV9lZGdlc1tpXTsKKyAgICB9CisKKyAgICBt
X2JvdW5kaW5nQm94LnNldFgobWluWCk7CisgICAgbV9ib3VuZGluZ0JveC5zZXRZKG1pblkpOwor
ICAgIG1fYm91bmRpbmdCb3guc2V0V2lkdGgobWF4WCAtIG1pblgpOworICAgIG1fYm91bmRpbmdC
b3guc2V0SGVpZ2h0KG1heFkgLSBtaW5ZKTsKKworICAgIHN0ZDo6c29ydChzb3J0ZWRFZGdlc01p
blkuYmVnaW4oKSwgc29ydGVkRWRnZXNNaW5ZLmVuZCgpLCBFZGdlTWluWUNvbXBhcmF0b3IoKSk7
CisgICAgbV9lZGdlVHJlZSA9IGFkb3B0UHRyKG5ldyBFeGNsdXNpb25Qb2x5Z29uRWRnZVRyZWUo
c29ydGVkRWRnZXNNaW5ZKSk7Cit9CisKK3N0YXRpYyBib29sIGNvbXB1dGVYSW50ZXJzZWN0aW9u
KGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlcCwgZmxvYXQgeSwgRWRnZUludGVyc2VjdGlv
biYgcmVzdWx0KQoreworICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiBlID0gKmVwOwor
CisgICAgaWYgKGUubWluWSgpID4geSB8fCBlLm1heFkoKSA8IHkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGZsb2F0IHgxID0gZS54MSgpOworICAgIGZsb2F0IHkxID0gZS55MSgpOwor
ICAgIGZsb2F0IHgyID0gZS54MigpOworICAgIGZsb2F0IHkyID0gZS55MigpOworICAgIGZsb2F0
IGR5ID0geTIgLSB5MTsKKworICAgIHJlc3VsdC5lZGdlID0gZXA7CisgICAgcmVzdWx0LnkgPSB5
OworCisgICAgaWYgKCFkeSkgeworICAgICAgICByZXN1bHQudHlwZSA9IFZlcnRleFlCb3RoOwor
ICAgICAgICByZXN1bHQueCA9IGUubWluWCgpOworICAgIH0gZWxzZSBpZiAoeSA9PSBlLm1pblko
KSkgeworICAgICAgICByZXN1bHQudHlwZSA9IFZlcnRleFlNaW47CisgICAgICAgIHJlc3VsdC54
ID0gKHkxIDwgeTIpID8geDEgOiB4MjsKKyAgICB9IGVsc2UgaWYgKHkgPT0gZS5tYXhZKCkpIHsK
KyAgICAgICAgcmVzdWx0LnR5cGUgPSBWZXJ0ZXhZTWF4OworICAgICAgICByZXN1bHQueCA9ICh5
MSA+IHkyKSA/IHgxIDogeDI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBO
b3JtYWw7CisgICAgICAgIHJlc3VsdC54ID0gKCh5IC0geTEpICogKHgyIC0geDEpIC8gZHkpICsg
eDE7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Zsb2F0IEV4Y2x1c2lvblBvbHln
b246OnJpZ2h0VmVydGV4WShzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgc2l6ZV90IG5WZXJ0
aWNlcyA9IG51bWJlck9mVmVydGljZXMoKTsKKyAgICBzaXplX3QgaTEgPSAoaW5kZXggKyAxKSAl
IG5WZXJ0aWNlczsKKyAgICBzaXplX3QgaTIgPSAoaW5kZXggLSAxKSAlIG5WZXJ0aWNlczsKKwor
ICAgIGlmIChnZXRYQXQoaTEpID09IGdldFhBdChpMikpCisgICAgICAgIHJldHVybiBnZXRZQXQo
aTEpID4gZ2V0WUF0KGkyKSA/IGdldFlBdChpMSkgOiBnZXRZQXQoaTIpOworCisgICAgcmV0dXJu
IGdldFhBdChpMSkgPiBnZXRYQXQoaTIpID8gZ2V0WUF0KGkxKSA6IGdldFlBdChpMik7Cit9CisK
K3N0YXRpYyBib29sIGFwcGVuZEludGVydmFsWChmbG9hdCB4LCBib29sIGluc2lkZSwgVmVjdG9y
PEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KQoreworICAgIGlmICghaW5zaWRlKQorICAgICAg
ICByZXN1bHQuYXBwZW5kKEV4Y2x1c2lvbkludGVydmFsKHgpKTsKKyAgICBlbHNlCisgICAgICAg
IHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMV0ueDIgPSB4OworCisgICAgcmV0dXJuICFpbnNpZGU7
Cit9CisKK3ZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZVhJbnRlcnNlY3Rpb25zKGZsb2F0
IHksIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkgY29uc3QKK3sKKyAgICBWZWN0
b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBvdmVybGFwcGluZ0VkZ2VzOworICAgIG1fZWRnZVRy
ZWUtPmZpbmRFZGdlc1RoYXRPdmVybGFwWSh5LCBvdmVybGFwcGluZ0VkZ2VzKTsKKworICAgIFZl
Y3RvcjxFZGdlSW50ZXJzZWN0aW9uPiBpbnRlcnNlY3Rpb25zOworICAgIEVkZ2VJbnRlcnNlY3Rp
b24gaW50ZXJzZWN0aW9uOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdF
ZGdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoY29tcHV0ZVhJbnRlcnNlY3Rpb24ob3Zl
cmxhcHBpbmdFZGdlc1tpXSwgeSwgaW50ZXJzZWN0aW9uKSkKKyAgICAgICAgICAgIGludGVyc2Vj
dGlvbnMuYXBwZW5kKGludGVyc2VjdGlvbik7CisgICAgfQorICAgIGlmIChpbnRlcnNlY3Rpb25z
LnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6c29ydChpbnRlcnNlY3Rp
b25zLmJlZ2luKCksIGludGVyc2VjdGlvbnMuZW5kKCksIEludGVyc2VjdGlvblhDb21wYXJhdG9y
KCkpOworCisgICAgc2l6ZV90IGluZGV4ID0gMDsKKyAgICBpbnQgd2luZENvdW50ID0gMDsKKyAg
ICBib29sIGluc2lkZSA9IGZhbHNlOworCisgICAgd2hpbGUgKGluZGV4IDwgaW50ZXJzZWN0aW9u
cy5zaXplKCkpIHsKKyAgICAgICAgY29uc3QgRWRnZUludGVyc2VjdGlvbiYgdGhpc0ludGVyc2Vj
dGlvbiA9IGludGVyc2VjdGlvbnNbaW5kZXhdOworCisgICAgICAgIGlmIChpbmRleCArIDEgPCBp
bnRlcnNlY3Rpb25zLnNpemUoKSkgeworICAgICAgICAgICAgY29uc3QgRWRnZUludGVyc2VjdGlv
biYgbmV4dEludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnNbaW5kZXggKzFdOworICAgICAgICAg
ICAgaWYgKCh0aGlzSW50ZXJzZWN0aW9uLnggPT0gbmV4dEludGVyc2VjdGlvbi54KSAmJiAodGhp
c0ludGVyc2VjdGlvbi50eXBlID09IFZlcnRleFlNaW4gfHwgdGhpc0ludGVyc2VjdGlvbi50eXBl
ID09IFZlcnRleFlNYXgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXNJbnRlcnNlY3Rpb24u
dHlwZSA9PSBuZXh0SW50ZXJzZWN0aW9uLnR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
c2tpcCBWZXJ0ZXhZTWF4LFZlcnRleFlNYXggYW5kIFZlcnRleFlNaW4sVmVydGV4WU1pbgorICAg
ICAgICAgICAgICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFZlcnRleFlNaW4sVmVydGV4WU1heCBvciBWZXJ0ZXhZTWF4
LFZlcnRleFlNaW4gPT4gVmVydGV4WU1pbgorICAgICAgICAgICAgICAgICAgICBpZiAobmV4dElu
dGVyc2VjdGlvbi50eXBlID09IFZlcnRleFlNYXgpCisgICAgICAgICAgICAgICAgICAgICAgICBp
bnRlcnNlY3Rpb25zW2luZGV4ICsgMV0gPSB0aGlzSW50ZXJzZWN0aW9uOworICAgICAgICAgICAg
ICAgICAgICBpbmRleCArPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEV4Y2x1
c2lvblBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICp0aGlzSW50ZXJzZWN0aW9uLmVkZ2U7CisgICAg
ICAgIGJvb2wgY3Jvc3NpbmcgPSAhd2luZENvdW50OworCisgICAgICAgIGlmIChmaWxsUnVsZSgp
ID09IFJVTEVfRVZFTk9ERCkgeworICAgICAgICAgICAgd2luZENvdW50ICs9IChnZXRZQXQodGhp
c0VkZ2UuaTIpID4gZ2V0WUF0KHRoaXNFZGdlLmkxKSkgPyArMSA6IC0xOworICAgICAgICAgICAg
Y3Jvc3NpbmcgPSBjcm9zc2luZyB8fCAhd2luZENvdW50OworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gTm9ybWFsKSB8fCAodGhpc0ludGVyc2VjdGlv
bi50eXBlID09IFZlcnRleFlNaW4pKSB7CisgICAgICAgICAgICBpZiAoY3Jvc3NpbmcpCisgICAg
ICAgICAgICAgICAgaW5zaWRlID0gYXBwZW5kSW50ZXJ2YWxYKHRoaXNJbnRlcnNlY3Rpb24ueCwg
aW5zaWRlLCByZXN1bHQpOworICAgICAgICB9IGVsc2UgaWYgKHRoaXNJbnRlcnNlY3Rpb24udHlw
ZSA9PSBWZXJ0ZXhZTWF4KSB7CisgICAgICAgICAgICBpbnQgdmVydGV4SW5kZXggPSAoZ2V0WUF0
KHRoaXNFZGdlLmkyKSA+IGdldFlBdCh0aGlzRWRnZS5pMSkpID8gdGhpc0VkZ2UuaTIgOiB0aGlz
RWRnZS5pMTsKKyAgICAgICAgICAgIGlmIChjcm9zc2luZyAmJiByaWdodFZlcnRleFkodmVydGV4
SW5kZXgpID4geSkKKyAgICAgICAgICAgICAgICBpbnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhp
c0VkZ2UubWF4WCgpLCBpbnNpZGUsIHJlc3VsdCk7CisgICAgICAgIH0gZWxzZSBpZiAodGhpc0lu
dGVyc2VjdGlvbi50eXBlID09IFZlcnRleFlCb3RoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChFeGNsdXNpb25JbnRlcnZhbCh0aGlzRWRnZS5taW5YKCksIHRoaXNFZGdlLm1heFgoKSkpOwor
CisgICAgICAgIGluZGV4ICs9IDE7CisgICAgfQorfQorCisvLyBSZXR1cm4gdGhlIFggcHJvamVj
dGlvbnMgb2YgdGhlIGVkZ2VzIHRoYXQgb3ZlcmxhcCB5MSx5Mi4KK3ZvaWQgRXhjbHVzaW9uUG9s
eWdvbjo6Y29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9y
PEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KSBjb25zdAoreworICAgIFZlY3RvcjxFeGNsdXNp
b25Qb2x5Z29uRWRnZSAqPiBvdmVybGFwcGluZ0VkZ2VzOworICAgIG1fZWRnZVRyZWUtPmZpbmRF
ZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwoeTEsIHkyLCBvdmVybGFwcGluZ0VkZ2VzKTsKKworICAg
IEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgb3ZlcmxhcHBpbmdFZGdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBFeGNsdXNp
b25Qb2x5Z29uRWRnZSYgZWRnZSA9ICpvdmVybGFwcGluZ0VkZ2VzW2ldOworICAgICAgICBmbG9h
dCB4MSwgeDI7CisKKyAgICAgICAgaWYgKGVkZ2UubWluWSgpIDwgeTEpIHsKKyAgICAgICAgICAg
IGNvbXB1dGVYSW50ZXJzZWN0aW9uKG92ZXJsYXBwaW5nRWRnZXNbaV0sIHkxLCBpbnRlcnNlY3Rp
b24pOworICAgICAgICAgICAgeDEgPSBpbnRlcnNlY3Rpb24ueDsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICB4MSA9IChlZGdlLnkxKCkgPCBlZGdlLnkyKCkpID8gZWRnZS54MSgpIDogZWRn
ZS54MigpOworCisgICAgICAgIGlmIChlZGdlLm1heFkoKSA+IHkyKSB7CisgICAgICAgICAgICBj
b21wdXRlWEludGVyc2VjdGlvbihvdmVybGFwcGluZ0VkZ2VzW2ldLCB5MiwgaW50ZXJzZWN0aW9u
KTsKKyAgICAgICAgICAgIHgyID0gaW50ZXJzZWN0aW9uLng7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgeDIgPSAoZWRnZS55MSgpID4gZWRnZS55MigpKSA/IGVkZ2UueDEoKSA6IGVkZ2Uu
eDIoKTsKKworICAgICAgICBpZiAoeDEgPiB4MikKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh4MSwg
eDIpOworCisgICAgICAgIHJlc3VsdC5hcHBlbmQoRXhjbHVzaW9uSW50ZXJ2YWwoeDEsIHgyKSk7
CisgICAgfQorCisgICAgc29ydEV4Y2x1c2lvbkludGVydmFscyhyZXN1bHQpOworfQorCit2b2lk
IEV4Y2x1c2lvblBvbHlnb246OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3As
IGZsb2F0IGxvZ2ljYWxCb3R0b20sIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit7CisgICAg
ZmxvYXQgeTEgPSBtaW5ZRm9yTG9naWNhbExpbmUobG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSk7
CisgICAgZmxvYXQgeTIgPSBtYXhZRm9yTG9naWNhbExpbmUobG9naWNhbFRvcCwgbG9naWNhbEJv
dHRvbSk7CisKKyAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJY
SW50ZXJ2YWxzOworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyh5MSwgeTFYSW50ZXJ2YWxzKTsK
KyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTIsIHkyWEludGVydmFscyk7CisKKyAgICBWZWN0
b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IG1lcmdlZEludGVydmFsczsKKyAgICBtZXJnZUV4Y2x1c2lv
bkludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywgbWVyZ2VkSW50ZXJ2YWxzKTsK
KworICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gZWRnZUludGVydmFsczsKKyAgICBjb21w
dXRlRWRnZUludGVyc2VjdGlvbnMoeTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsKKworICAgIFZlY3Rv
cjxFeGNsdXNpb25JbnRlcnZhbD4gZXhjbHVkZWRJbnRlcnZhbHM7CisgICAgbWVyZ2VFeGNsdXNp
b25JbnRlcnZhbHMobWVyZ2VkSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2YWxzLCBleGNsdWRlZEludGVy
dmFscyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4Y2x1ZGVkSW50ZXJ2YWxzLnNp
emUoKTsgaSsrKSB7CisgICAgICAgIEV4Y2x1c2lvbkludGVydmFsIGludGVydmFsID0gZXhjbHVk
ZWRJbnRlcnZhbHNbaV07CisgICAgICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoaW50ZXJ2
YWwueDEsIGludGVydmFsLngyKSk7CisgICAgfQorfQorCit2b2lkIEV4Y2x1c2lvblBvbHlnb246
OmdldEluY2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxCb3R0
b20sIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgZmxvYXQgeTEgPSBtaW5ZRm9y
TG9naWNhbExpbmUobG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSk7CisgICAgZmxvYXQgeTIgPSBt
YXhZRm9yTG9naWNhbExpbmUobG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSk7CisKKyAgICBWZWN0
b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOworICAgIGNv
bXB1dGVYSW50ZXJzZWN0aW9ucyh5MSwgeTFYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWEludGVy
c2VjdGlvbnMoeTIsIHkyWEludGVydmFscyk7CisKKyAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2
YWw+IGNvbW1vbkludGVydmFsczsKKyAgICBpbnRlcnNlY3RFeGNsdXNpb25JbnRlcnZhbHMoeTFY
SW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHMsIGNvbW1vbkludGVydmFscyk7CisKKyAgICBWZWN0b3I8
RXhjbHVzaW9uSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7CisgICAgY29tcHV0ZUVkZ2VJbnRlcnNl
Y3Rpb25zKHkxLCB5MiwgZWRnZUludGVydmFscyk7CisKKyAgICBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+IGluY2x1ZGVkSW50ZXJ2YWxzOworICAgIHN1YnRyYWN0RXhjbHVzaW9uSW50ZXJ2YWxz
KGNvbW1vbkludGVydmFscywgZWRnZUludGVydmFscywgaW5jbHVkZWRJbnRlcnZhbHMpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmNsdWRlZEludGVydmFscy5zaXplKCk7IGkrKykg
eworICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9IGluY2x1ZGVkSW50ZXJ2YWxz
W2ldOworICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBpbnRl
cnZhbC54MikpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uM2YyMTlhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisg
KiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEV4Y2x1c2lvblBvbHlnb25faAorI2RlZmluZSBFeGNsdXNpb25Qb2x5Z29uX2gKKwor
I2luY2x1ZGUgIkV4Y2x1c2lvbkludGVydmFsLmgiCisjaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUu
aCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0cnVjdCBFeGNsdXNpb25Qb2x5Z29uRWRnZTsKK3N0cnVjdCBFeGNsdXNp
b25Qb2x5Z29uRWRnZVRyZWU7CisKK2NsYXNzIEV4Y2x1c2lvblBvbHlnb24gOiBwdWJsaWMgRXhj
bHVzaW9uU2hhcGUgeworcHVibGljOgorICAgIEV4Y2x1c2lvblBvbHlnb24oUGFzc093blB0cjxW
ZWN0b3I8ZmxvYXQ+ID4gY29vcmRpbmF0ZXMsIFdpbmRSdWxlIGZpbGxSdWxlKTsKKworICAgIGZs
b2F0IGdldFhBdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb29yZGluYXRlcy0+YXQoaSoy
KTsgfQorICAgIGZsb2F0IGdldFlBdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb29yZGlu
YXRlcy0+YXQoaSoyICsgMSk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZWZXJ0aWNlcygpIGNvbnN0
IHsgcmV0dXJuIG1fY29vcmRpbmF0ZXMtPnNpemUoKSAvIDI7IH0KKyAgICBXaW5kUnVsZSBmaWxs
UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbFJ1bGU7IH0KKworICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gaW50
ZXJuYWxUb0xvZ2ljYWxCb3VuZGluZ0JveChtX2JvdW5kaW5nQm94KTsgfQorICAgIHZpcnR1YWwg
dm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2Fs
Qm90dG9tLCBTZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBn
ZXRJbmNsdWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsQm90dG9t
LCBTZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIGZsb2F0IHJp
Z2h0VmVydGV4WShzaXplX3QpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZVhJbnRlcnNlY3Rpb25z
KGZsb2F0IHksIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKSBjb25zdDsKKyAgICB2b2lkIGNv
bXB1dGVFZGdlSW50ZXJzZWN0aW9ucyhmbG9hdCB5TWluLCBmbG9hdCB5TWF4LCBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+JikgY29uc3Q7CisKKyAgICBPd25QdHI8VmVjdG9yPGZsb2F0PiA+IG1f
Y29vcmRpbmF0ZXM7CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZTsKKyAgICBGbG9hdFJlY3QgbV9i
b3VuZGluZ0JveDsKKyAgICBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2U+IG1fZWRnZXM7Cisg
ICAgT3duUHRyPEV4Y2x1c2lvblBvbHlnb25FZGdlVHJlZT4gbV9lZGdlVHJlZTsKK307CisKK3N0
cnVjdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSB7CisgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbiog
cG9seWdvbjsKKyAgICBzaXplX3QgaTE7CisgICAgc2l6ZV90IGkyOworCisgICAgRXhjbHVzaW9u
UG9seWdvbkVkZ2UoKQorICAgICAgICA6IHBvbHlnb24oMCkKKyAgICAgICAgLCBpMSgwKQorICAg
ICAgICAsIGkyKDApCisgICAgeworICAgIH0KKworICAgIGZsb2F0IHgxKCkgY29uc3QgeyByZXR1
cm4gcG9seWdvbi0+Z2V0WEF0KGkxKTsgfQorICAgIGZsb2F0IHkxKCkgY29uc3QgeyByZXR1cm4g
cG9seWdvbi0+Z2V0WUF0KGkxKTsgfQorICAgIGZsb2F0IHgyKCkgY29uc3QgeyByZXR1cm4gcG9s
eWdvbi0+Z2V0WEF0KGkyKTsgfQorICAgIGZsb2F0IHkyKCkgY29uc3QgeyByZXR1cm4gcG9seWdv
bi0+Z2V0WUF0KGkyKTsgfQorCisgICAgZmxvYXQgbWluWCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
bWluKHgxKCksIHgyKCkpOyB9CisgICAgZmxvYXQgbWluWSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
bWluKHkxKCksIHkyKCkpOyB9CisgICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
bWF4KHgxKCksIHgyKCkpOyB9CisgICAgZmxvYXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
bWF4KHkxKCksIHkyKCkpOyB9Cit9OworCisvLyBhbiAiaW50ZXJ2YWwgdHJlZSIKK3N0cnVjdCBF
eGNsdXNpb25Qb2x5Z29uRWRnZVRyZWUgeworcHJpdmF0ZToKKyAgICBmbG9hdCBjZW50ZXI7Cisg
ICAgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlKj4gb3ZlcmxhcENlbnRlcjsKKyAgICBPd25Q
dHI8RXhjbHVzaW9uUG9seWdvbkVkZ2VUcmVlPiBhYm92ZUNlbnRlcjsKKyAgICBPd25QdHI8RXhj
bHVzaW9uUG9seWdvbkVkZ2VUcmVlPiBiZWxvd0NlbnRlcjsKKworICAgIHN0YXRpYyB2b2lkIGlu
aXRFZGdlVHJlZShFeGNsdXNpb25Qb2x5Z29uRWRnZVRyZWUqLCBjb25zdCBWZWN0b3I8RXhjbHVz
aW9uUG9seWdvbkVkZ2UqPiYgc29ydGVkRWRnZXMpOworCitwdWJsaWM6CisgICAgRXhjbHVzaW9u
UG9seWdvbkVkZ2VUcmVlKGNvbnN0IFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+JiBzb3J0
ZWRFZGdlcyk7CisKKyAgICB2b2lkIGZpbmRFZGdlc1RoYXRPdmVybGFwWShmbG9hdCB5LCBWZWN0
b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiYpIGNvbnN0OworICAgIHZvaWQgZmluZEVkZ2VzVGhh
dE92ZXJsYXBJbnRlcnZhbChmbG9hdCBtaW5ZLCBmbG9hdCBtYXhZLCBWZWN0b3I8RXhjbHVzaW9u
UG9seWdvbkVkZ2UqPiYpIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRXhjbHVzaW9uUG9seWdvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblNoYXBlLmNwcAppbmRleCAwZjQzMGVmLi4yYzcyYTMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKQEAgLTMxLDEwICszMSwxMCBAQAogI2lu
Y2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCiAKICNpbmNsdWRlICJCYXNpY1NoYXBlRnVuY3Rpb25z
LmgiCisjaW5jbHVkZSAiRXhjbHVzaW9uUG9seWdvbi5oIgogI2luY2x1ZGUgIkV4Y2x1c2lvblJl
Y3RhbmdsZS5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIkxlbmd0aEZ1bmN0
aW9ucy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUu
aCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
QEAgLTYwLDYgKzYwLDEyIEBAIHN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBjcmVh
dGVFeGNsdXNpb25FbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlCiAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBFeGNsdXNpb25SZWN0YW5nbGUoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRp
aS53aWR0aCgpLCBjZW50ZXIueSgpIC0gcmFkaWkuaGVpZ2h0KCksIHJhZGlpLndpZHRoKCkqMiwg
cmFkaWkuaGVpZ2h0KCkqMiksIHJhZGlpKSk7CiB9CiAKK3N0YXRpYyBQYXNzT3duUHRyPEV4Y2x1
c2lvblNoYXBlPiBjcmVhdGVFeGNsdXNpb25Qb2x5Z29uKFBhc3NPd25QdHI8VmVjdG9yPGZsb2F0
PiA+IGNvb3JkaW5hdGVzLCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBBU1NFUlQoIShjb29y
ZGluYXRlcy0+c2l6ZSgpICUgMikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgRXhjbHVzaW9u
UG9seWdvbihjb29yZGluYXRlcywgZmlsbFJ1bGUpKTsKK30KKwogLy8gSWYgdGhlIHdyaXRpbmdN
b2RlIGlzIHZlcnRpY2FsLCB0aGVuIHRoZSBCYXNpY1NoYXBlJ3MgKHBoeXNpY2FsKSB4IGFuZCB5
IGNvb3JkaW5hdGVzIGFyZSBzd2FwcGVkLCBzbyB0aGF0CiAvLyBsaW5lIHNlZ21lbnRzIGFyZSBw
YXJhbGxlbCB0byB0aGUgaW50ZXJuYWwgY29vcmRpbmF0ZSBzeXN0ZW0ncyBYIGF4aXMuCiAKQEAg
LTg3LDggKzkzLDggQEAgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gRXhjbHVzaW9uU2hhcGU6
OmNyZWF0ZUV4Y2x1c2lvblNoYXBlKGNvbnN0IEJhc2ljU2hhcGUKICAgICAgICAgZmxvYXQgcmFk
aXVzWSA9IHJhZGl1c1lMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVu
Z3RoKHJhZGl1c1lMZW5ndGgsIGJveEhlaWdodCk7CiAKICAgICAgICAgZXhjbHVzaW9uU2hhcGUg
PSBob3Jpem9udGFsV3JpdGluZ01vZGUKLSAgICAgICAgICA/IGNyZWF0ZUV4Y2x1c2lvblJlY3Rh
bmdsZShGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCksIEZsb2F0U2l6ZShyYWRpdXNYLCBy
YWRpdXNZKSkKLSAgICAgICAgICA6IGNyZWF0ZUV4Y2x1c2lvblJlY3RhbmdsZShGbG9hdFJlY3Qo
eSwgeCwgaGVpZ2h0LCB3aWR0aCksIEZsb2F0U2l6ZShyYWRpdXNZLCByYWRpdXNYKSk7CisgICAg
ICAgICAgICA/IGNyZWF0ZUV4Y2x1c2lvblJlY3RhbmdsZShGbG9hdFJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCksIEZsb2F0U2l6ZShyYWRpdXNYLCByYWRpdXNZKSkKKyAgICAgICAgICAgIDogY3Jl
YXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVjdCh5LCB4LCBoZWlnaHQsIHdpZHRoKSwgRmxv
YXRTaXplKHJhZGl1c1ksIHJhZGl1c1gpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC05
OSw4ICsxMDUsOCBAQCBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6
Y3JlYXRlRXhjbHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZQogICAgICAgICBmbG9hdCByYWRp
dXMgPSAgZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPnJhZGl1cygpLCBzdGQ6Om1heChib3hI
ZWlnaHQsIGJveFdpZHRoKSk7CiAKICAgICAgICAgZXhjbHVzaW9uU2hhcGUgPSBob3Jpem9udGFs
V3JpdGluZ01vZGUKLSAgICAgICAgICA/IGNyZWF0ZUV4Y2x1c2lvbkNpcmNsZShGbG9hdFBvaW50
KGNlbnRlclgsIGNlbnRlclkpLCByYWRpdXMpCi0gICAgICAgICAgOiBjcmVhdGVFeGNsdXNpb25D
aXJjbGUoRmxvYXRQb2ludChjZW50ZXJZLCBjZW50ZXJYKSwgcmFkaXVzKTsKKyAgICAgICAgICAg
ID8gY3JlYXRlRXhjbHVzaW9uQ2lyY2xlKEZsb2F0UG9pbnQoY2VudGVyWCwgY2VudGVyWSksIHJh
ZGl1cykKKyAgICAgICAgICAgIDogY3JlYXRlRXhjbHVzaW9uQ2lyY2xlKEZsb2F0UG9pbnQoY2Vu
dGVyWSwgY2VudGVyWCksIHJhZGl1cyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTEy
LDEzICsxMTgsMzAgQEAgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gRXhjbHVzaW9uU2hhcGU6
OmNyZWF0ZUV4Y2x1c2lvblNoYXBlKGNvbnN0IEJhc2ljU2hhcGUKICAgICAgICAgZmxvYXQgcmFk
aXVzWSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+cmFkaXVzWSgpLCBib3hIZWlnaHQp
OwogCiAgICAgICAgIGV4Y2x1c2lvblNoYXBlID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlCi0gICAg
ICAgICAgPyBjcmVhdGVFeGNsdXNpb25FbGxpcHNlKEZsb2F0UG9pbnQoY2VudGVyWCwgY2VudGVy
WSksIEZsb2F0U2l6ZShyYWRpdXNYLCByYWRpdXNZKSkKLSAgICAgICAgICA6IGNyZWF0ZUV4Y2x1
c2lvbkVsbGlwc2UoRmxvYXRQb2ludChjZW50ZXJZLCBjZW50ZXJYKSwgRmxvYXRTaXplKHJhZGl1
c1ksIHJhZGl1c1gpKTsKKyAgICAgICAgICAgID8gY3JlYXRlRXhjbHVzaW9uRWxsaXBzZShGbG9h
dFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCBGbG9hdFNpemUocmFkaXVzWCwgcmFkaXVzWSkpCisg
ICAgICAgICAgICA6IGNyZWF0ZUV4Y2x1c2lvbkVsbGlwc2UoRmxvYXRQb2ludChjZW50ZXJZLCBj
ZW50ZXJYKSwgRmxvYXRTaXplKHJhZGl1c1ksIHJhZGl1c1gpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCi0gICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9QT0xZR09OOgotICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNhc2UgQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUE9M
WUdPTjogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlUG9seWdvbiogcG9seWdvbiA9IHN0YXRp
Y19jYXN0PGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKj4oYmFzaWNTaGFwZSk7CisgICAgICAgIGNv
bnN0IFZlY3RvcjxMZW5ndGg+JiB2YWx1ZXMgPSBwb2x5Z29uLT52YWx1ZXMoKTsKKyAgICAgICAg
c2l6ZV90IHZhbHVlc1NpemUgPSB2YWx1ZXMuc2l6ZSgpOworICAgICAgICBWZWN0b3I8ZmxvYXQ+
KiBjb29yZGluYXRlcyA9IG5ldyBWZWN0b3I8ZmxvYXQ+KHZhbHVlc1NpemUpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzU2l6ZTsgaSArPSAyKSB7CisgICAgICAgICAg
ICBmbG9hdCB2ZXJ0ZXhYID0gZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMuYXQoaSksIGJveFdp
ZHRoKTsKKyAgICAgICAgICAgIGZsb2F0IHZlcnRleFkgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZh
bHVlcy5hdChpKzEpLCBib3hIZWlnaHQpOworICAgICAgICAgICAgaWYgKGhvcml6b250YWxXcml0
aW5nTW9kZSkgeworICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLT5hdChpKSA9IHZlcnRleFg7
CisgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMtPmF0KGkrMSkgPSB2ZXJ0ZXhZOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb29yZGluYXRlcy0+YXQoaSkgPSB2ZXJ0
ZXhZOworICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLT5hdChpKzEpID0gdmVydGV4WDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBleGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4
Y2x1c2lvblBvbHlnb24oYWRvcHRQdHIoY29vcmRpbmF0ZXMpLCBwb2x5Z29uLT53aW5kUnVsZSgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluc2lkZUluZm8uY3BwCmluZGV4IDIwMGRhYTYuLjNlNWQ0OWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8u
Y3BwCkBAIC03Myw3ICs3Myw3IEBAIGJvb2wgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjppc0V4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mb0VuYWJsZWRGb3JSZW5kZXJCbG9jayhjCiB7CiAgICAgLy8g
RklYTUU6IEJ1ZyA4OTcwNzogRW5hYmxlIHNoYXBlIGluc2lkZSBmb3Igbm9uLXJlY3Rhbmd1bGFy
IHNoYXBlcwogICAgIEJhc2ljU2hhcGUqIHNoYXBlID0gYmxvY2stPnN0eWxlKCktPndyYXBTaGFw
ZUluc2lkZSgpOwotICAgIHJldHVybiAoc2hhcGUgJiYgc2hhcGUtPnR5cGUoKSA9PSBCYXNpY1No
YXBlOjpCQVNJQ19TSEFQRV9SRUNUQU5HTEUpOworICAgIHJldHVybiBzaGFwZSAmJiAoc2hhcGUt
PnR5cGUoKSA9PSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9SRUNUQU5HTEUgfHwgc2hhcGUtPnR5
cGUoKSA9PSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9QT0xZR09OKTsKIH0KIAogdm9pZCBFeGNs
dXNpb25TaGFwZUluc2lkZUluZm86OnJlbW92ZUV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb0ZvclJl
bmRlckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaAppbmRleCA5ZGIxYjEwLi42
N2EzYTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mby5oCkBAIC01NCw4ICs1NCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCByZW1vdmVFeGNsdXNpb25TaGFwZUluc2lkZUluZm9Gb3JSZW5kZXJCbG9jayhjb25zdCBSZW5k
ZXJCbG9jayopOwogICAgIHN0YXRpYyBib29sIGlzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvRW5h
YmxlZEZvclJlbmRlckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrKik7CiAKLSAgICBMYXlvdXRVbml0
IHNoYXBlTG9naWNhbFRvcCgpIGNvbnN0IAotICAgIHsgCisgICAgTGF5b3V0VW5pdCBzaGFwZUxv
Z2ljYWxUb3AoKSBjb25zdAorICAgIHsKICAgICAgICAgQVNTRVJUKG1fc2hhcGUpOwogICAgICAg
ICByZXR1cm4gbV9zaGFwZS0+c2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS55KCk7CiAgICAgfQo=
</data>
<flag name="review"
          id="178239"
          type_id="1"
          status="-"
          setter="jchaffraix"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166775</attachid>
            <date>2012-10-02 16:40:16 -0700</date>
            <delta_ts>2012-10-05 12:36:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>36868</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzY2UxZTVjLi4zMGZiMGFmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDkt
MjcgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBFeGNs
dXNpb25zXSBBZGQgc3VwcG9ydCBmb3IgcG9seWdvbmFsIHNoYXBlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY4MTEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWZXJpZnkgdGhhdCBhIHJlY3Rhbmd1bGFy
IHNoYXBlLWluc2lkZSBzcGVjaWZpZWQgYXMgYSBwb2x5Z29uIHdvcmtzIGFzIGV4cGVjdGVkIGZv
ciBhbGwgd3JpdGluZy1tb2Rlcy4KKworICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1p
bnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBv
bHlnb24tcmVjdGFuZ2xlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTEwLTAyICBSb2dlciBGb25nICA8
cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgU2tpcHBpbmcgZmxha3kgdGVzdCBmYXN0
L3RleHQvaW50ZXJuYXRpb25hbC9mbG9hdC1hcy1vbmx5LWNoaWxkLW9mLWlzb2xhdGUtY3Jhc2gu
aHRtbCBpcyBmbGFreSBvbiBXaW5kb3dzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9l
eGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtcG9seWdvbi1yZWN0YW5nbGUtZXhw
ZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hh
cGUtaW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYjViNDhiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVj
dGFuZ2xlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSw0OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorICAgICNzaGFwZS1pbnNpZGUtaG9yaXpvbnRhbCB7Cisg
ICAgICAgIHBhZGRpbmc6IDIwcHggMzVweCAyNXB4IDE1cHg7CisgICAgICAgIHdpZHRoOiAxNTBw
eDsKKyAgICAgICAgaGVpZ2h0OiAxNzVweDsKKyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwor
ICAgIH0KKyAgICAjc2hhcGUtaW5zaWRlLXZlcnRpY2FsLWxyIHsKKyAgICAgICAgcGFkZGluZzog
MjBweCAzNXB4IDI1cHggMTVweDsKKyAgICAgICAgd2lkdGg6IDE1MHB4OworICAgICAgICBoZWln
aHQ6IDE3NXB4OworICAgICAgICAtd2Via2l0LXdyaXRpbmctbW9kZTogdmVydGljYWwtbHI7Cisg
ICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB9CisgICAgI3NoYXBlLWluc2lkZS12ZXJ0
aWNhbC1ybCB7CisgICAgICAgIHBhZGRpbmc6IDIwcHggMzVweCAyNXB4IDE1cHg7CisgICAgICAg
IHdpZHRoOiAxNTBweDsKKyAgICAgICAgaGVpZ2h0OiAxNzVweDsKKyAgICAgICAgLXdlYmtpdC13
cml0aW5nLW1vZGU6IHZlcnRpY2FsLXJsOworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cisg
ICAgfQorICAgICNib3JkZXIgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAg
IHRvcDogMTNweDsKKyAgICAgICAgbGVmdDogMThweDsKKyAgICAgICAgd2lkdGg6IDE1MHB4Owor
ICAgICAgICBoZWlnaHQ6IDE3NXB4OworICAgICAgICBib3JkZXI6IDJweCBzb2xpZCBibHVlOwor
ICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJzaGFwZS1pbnNp
ZGUtaG9yaXpvbnRhbCI+CisgICAgICAgIDxkaXYgaWQ9ImJvcmRlciI+PC9kaXY+CisgICAgICAg
IFRoaXMgdGV4dCBzaG91bGQgYmUgY29udGFpbmVkIGJ5IHRoZSBibHVlIHNxdWFyZS4KKyAgICA8
L2Rpdj4KKyAgICA8ZGl2IGlkPSJzaGFwZS1pbnNpZGUtdmVydGljYWwtbHIiPgorICAgICAgICA8
ZGl2IGlkPSJib3JkZXIiPjwvZGl2PgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGNvbnRh
aW5lZCBieSB0aGUgYmx1ZSBzcXVhcmUuCisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0ic2hhcGUt
aW5zaWRlLXZlcnRpY2FsLXJsIj4KKyAgICAgICAgPGRpdiBpZD0iYm9yZGVyIj48L2Rpdj4KKyAg
ICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBjb250YWluZWQgYnkgdGhlIGJsdWUgc3F1YXJlLgor
ICAgIDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtcG9seWdvbi1yZWN0YW5nbGUu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5z
aWRlLXBvbHlnb24tcmVjdGFuZ2xlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZTM5YWJlMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXhjbHVz
aW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLmh0bWwKQEAg
LTAsMCArMSw1MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4K
KyAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgICAgd2luZG93LmludGVybmFscy5zZXR0
aW5ncy5zZXRDU1NFeGNsdXNpb25zRW5hYmxlZCh0cnVlKTsKKzwvc2NyaXB0PgorPHN0eWxlPgor
ICAgICNzaGFwZS1pbnNpZGUtaG9yaXpvbnRhbCB7CisgICAgICAgIHdpZHRoOiAyMDBweDsKKyAg
ICAgICAgaGVpZ2h0OiAyMjBweDsKKyAgICAgICAgLXdlYmtpdC1zaGFwZS1pbnNpZGU6IHBvbHln
b24oMTVweCAyMHB4LCAxNjVweCAyMHB4LCAxNjVweCAxOTVweCwgMTVweCAxOTVweCk7CisgICAg
ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB9CisgICAgI3NoYXBlLWluc2lkZS12ZXJ0aWNh
bC1sciB7CisgICAgICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgaGVpZ2h0OiAyMjBweDsKKyAg
ICAgICAgLXdlYmtpdC1zaGFwZS1pbnNpZGU6IHBvbHlnb24oMTVweCAyMHB4LCAxNjVweCAyMHB4
LCAxNjVweCAxOTVweCwgMTVweCAxOTVweCk7CisgICAgICAgIC13ZWJraXQtd3JpdGluZy1tb2Rl
OiB2ZXJ0aWNhbC1scjsKKyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKyAgICAj
c2hhcGUtaW5zaWRlLXZlcnRpY2FsLXJsIHsKKyAgICAgICAgd2lkdGg6IDIwMHB4OworICAgICAg
ICBoZWlnaHQ6IDIyMHB4OworICAgICAgICAtd2Via2l0LXNoYXBlLWluc2lkZTogcG9seWdvbigx
NXB4IDIwcHgsIDE2NXB4IDIwcHgsIDE2NXB4IDE5NXB4LCAxNXB4IDE5NXB4KTsKKyAgICAgICAg
LXdlYmtpdC13cml0aW5nLW1vZGU6IHZlcnRpY2FsLXJsOworICAgICAgICBwb3NpdGlvbjogcmVs
YXRpdmU7CisgICAgfQorICAgICNib3JkZXIgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgICAgIHRvcDogMTNweDsKKyAgICAgICAgbGVmdDogMThweDsKKyAgICAgICAgd2lkdGg6
IDE1MHB4OworICAgICAgICBoZWlnaHQ6IDE3NXB4OworICAgICAgICBib3JkZXI6IDJweCBzb2xp
ZCBibHVlOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJz
aGFwZS1pbnNpZGUtaG9yaXpvbnRhbCI+CisgICAgICAgIDxkaXYgaWQ9ImJvcmRlciI+PC9kaXY+
CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgY29udGFpbmVkIGJ5IHRoZSBibHVlIHNxdWFy
ZS4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJzaGFwZS1pbnNpZGUtdmVydGljYWwtbHIiPgor
ICAgICAgICA8ZGl2IGlkPSJib3JkZXIiPjwvZGl2PgorICAgICAgICBUaGlzIHRleHQgc2hvdWxk
IGJlIGNvbnRhaW5lZCBieSB0aGUgYmx1ZSBzcXVhcmUuCisgICAgPC9kaXY+CisgICAgPGRpdiBp
ZD0ic2hhcGUtaW5zaWRlLXZlcnRpY2FsLXJsIj4KKyAgICAgICAgPGRpdiBpZD0iYm9yZGVyIj48
L2Rpdj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBjb250YWluZWQgYnkgdGhlIGJsdWUg
c3F1YXJlLgorICAgIDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCBkYTE0YzA5Li4zMGM1ODk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjAzMCw2ICsy
MDMwLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5j
cHAKICAgICByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lv
bkludGVydmFsLmNwcAorICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcAogICAgIHJl
bmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNo
YXBlLmNwcAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggMTdlNWE1Ny4uYTFiZDEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisy
MDEyLTA5LTI3ICBIYW5zIE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIFtD
U1MgRXhjbHVzaW9uc10gQWRkIHN1cHBvcnQgZm9yIHBvbHlnb25hbCBzaGFwZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2ODExCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCB2ZXJzaW9uIG9m
IHRoZSBsYXlvdXQgc3VwcG9ydCBmb3IgcG9seWdvbmFsIGV4Y2x1c2lvbiBzaGFwZXM6IHRoZSBF
eGNsdXNpb25Qb2x5Z29uIGNsYXNzLgorICAgICAgICBTdXBwb3J0cyB0aGUgcHVibGljIEV4Y2x1
c2lvblNoYXBlIG9wZXJhdGlvbnMgdXNpbmcgdGhlIGFsZ29yaXRobSBkZXNjcmliZWQgaGVyZToK
KyAgICAgICAgaHR0cDovL2hhbnNtdWxsZXItd2Via2l0LmJsb2dzcG90LmNvbS8yMDEyLzA2L2hv
cml6b250YWwtYm94LXBvbHlnb24taW50ZXJzZWN0aW9uLWZvci5odG1sLgorICAgICAgICBBbHRo
b3VnaCBib3RoIHRoZSAiaW5jbHVkZWQiIGFuZCAiZXhjbHVkZWQiIG9wZXJhdGlvbnMgYXJlIHN1
cHBvcnRlZCwgb25seSB0aGUgZm9ybWVyIGlzCisgICAgICAgIHVzZWQsIHNpbmNlIG9ubHkgc2hh
cGUtaW5zaWRlIGlzIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50LgorCisgICAgICAgIFBvbHlnb24g
ZWRnZXMgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBFeGNsdXNpb25Qb2x5Z29uRWRnZSBjbGFzcywg
d2hpY2ggcmVjb3JkcyB0aGUgaW5kaWNlcyBvZgorICAgICAgICB0aGUgcGFpciBvZiB2ZXJ0aWNl
cyBqb2luZWQgYnkgdGhlIGVkZ2UuCisKKyAgICAgICAgVGhlIEV4Y2x1c2lvblBvbHlnb24gY2xh
c3Mgc3RvcmVzIHRoZSBwb2x5Z29uJ3MgZWRnZXMgaW4gYW4gaW50ZXJ2YWwgdHJlZS4KKworICAg
ICAgICBBbHRob3VnaCB0aGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgY29tcGxleCBwb2x5Z29u
cywgdGhlIGxheW91dCBjb2RlIGlzIGxpbWl0ZWQgdG8KKyAgICAgICAgZXNzZW50aWFsbHkgcmVj
dGFuZ3VsYXIgc2hhcGVzIHVudGlsIGEgcGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05NjgxMworICAgICAgICBsYW5kcy4KKworICAgICAgICBUZXN0OiBm
YXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3Rhbmds
ZS5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvRXhj
bHVzaW9uUG9seWdvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChF
ZGdlSW50ZXJzZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OkV4
Y2x1c2lvblBvbHlnb24pOiBzZWUgYWJvdmUgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhpcyB0eXBl
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbik6IGZpbmQgYW5kIGNsYXNz
aWZ5IHRoZSBYIGludGVyY2VwdCBvZiBhIHBvbHlnb24gZWRnZSBmb3Igc29tZSBZIHZhbHVlLCBp
ZiBhbnkKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OnJpZ2h0VmVydGV4WSk6
IHVzZWQgdG8gZGVjaWRlIGlmIGEgaG9yaXpvbnRhbCBsaW5lICJjcm9zc2VzIiBhIHZlcnRleAor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kSW50ZXJ2YWxYKTogYXBwZW5kIHRoZSBzdGFydCBvciBl
bmQgWCBjb29yZGluYXRlcyBvZiBhbiBFeGNsdXNpb25JbnRlcnZhbAorICAgICAgICAoV2ViQ29y
ZTo6RXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZVhJbnRlcnNlY3Rpb25zKTogYWxsIG9mIHRoZSBp
bnRlcnNlY3Rpb25zIG9mIGEgaG9yaXpvbnRhbCBsaW5lIGFuZCB0aGUgcG9seWdvbidzIGVkZ2Vz
CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpjb21wdXRlRWRnZUludGVyc2Vj
dGlvbnMpOiB0aGUgWCBwcm9qZWN0aW9ucyBvZiB0aGUgZWRnZXMgdGhhdCBvdmVybGFwIGEgaG9y
aXpvbmFsIHJlY3RhbmdsZQorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Z2V0
RXhjbHVkZWRJbnRlcnZhbHMpOiBYIGludGVydmFscyB3aXRoaW4gYSBob3Jpem9udGFsIHJlY3Rh
bmdsZSB0aGF0IG92ZXJsYXAgdGhlIHBvbHlnb24KKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lv
blBvbHlnb246OmdldEluY2x1ZGVkSW50ZXJ2YWxzKTogWCBpbnRlcnZhbHMgd2l0aGluIGEgaG9y
aXpvbnRhbCByZWN0YW5nbGUgdGhhdCBmaXQgaW5zaWRlIHRoZSBwb2x5Z29uCisgICAgICAgICog
cmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEV4Y2x1c2lvblBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9u
UG9seWdvbjo6Z2V0WEF0KTogWCBjb29yZGluYXRlIG9mIGEgcG9seWdvbiB2ZXJ0ZXgKKyAgICAg
ICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmdldFlBdCk6IFkgY29vcmRpbmF0ZSBvZiBh
IHBvbHlnb24gdmVydGV4CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpudW1i
ZXJPZlZlcnRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmZpbGxS
dWxlKTogZGVmaW5lcyAiaW5zaWRlIiBmb3Igc2VsZi1pbnRlcnNlY3RpbmcgcG9seWdvbnMKKyAg
ICAgICAgKEV4Y2x1c2lvblBvbHlnb25FZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lv
blBvbHlnb25FZGdlOjpFeGNsdXNpb25Qb2x5Z29uRWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpF
eGNsdXNpb25Qb2x5Z29uRWRnZTo6eDEpOiBYIGNvb3JkaW5hdGUgb2YgdGhlIGVkZ2VzIDFzdCB2
ZXJ0ZXgKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjp5MSk6IFkgY29v
cmRpbmF0ZSBvZiB0aGUgZWRnZXMgMXN0IHZlcnRleAorICAgICAgICAoV2ViQ29yZTo6RXhjbHVz
aW9uUG9seWdvbkVkZ2U6OngyKTogWCBjb29yZGluYXRlIG9mIHRoZSBlZGdlcyAybmQgdmVydGV4
CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uRWRnZTo6eTIpOiBZIGNvb3JkaW5h
dGUgb2YgdGhlIGVkZ2VzIDJuZCB2ZXJ0ZXgKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBv
bHlnb25FZGdlOjptaW5YKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdl
OjptaW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjptYXhYKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjptYXhZKToKKyAgICAgICAg
KiByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
RXhjbHVzaW9uUG9seWdvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkV4Y2x1c2lvblNoYXBlOjpjcmVhdGVFeGNsdXNpb25TaGFwZSk6CisgICAgICAgICogcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeGNs
dXNpb25TaGFwZUluc2lkZUluZm86OmlzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvRW5hYmxlZEZv
clJlbmRlckJsb2NrKTogYWxsb3cgQkFTSUNfU0hBUEVfUE9MWUdPTiBzaGFwZXMKKyAgICAgICAg
KiByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmg6CisgICAgICAgIChXZWJDb3Jl
OjpFeGNsdXNpb25TaGFwZUluc2lkZUluZm86OnNoYXBlTG9naWNhbFRvcCk6CisKIDIwMTItMTAt
MDIgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODE4MgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KaW5kZXggZWZkODViNC4uYjliZDhkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCkBAIC00OTE1LDYgKzQ5MTUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhj
bHVzaW9uSW50ZXJ2YWwuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBv
bHlnb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGE0
ZDg3NTQuLjU5MzkzMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysr
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTEwNSw2ICsxMTA1LDcgQEAgU09VUkNF
UyArPSBcCiAgICAgcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcCBcCiAgICAgcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcCBcCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcCBcCisg
ICAgcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwIFwKICAgICByZW5kZXJpbmcvRXhjbHVz
aW9uUmVjdGFuZ2xlLmNwcCBcCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcCBcCiAg
ICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgXApAQCAtMjI5Niw2ICsy
Mjk3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmggXAogICAg
IHJlbmRlcmluZy9FbGxpcHNpc0JveC5oIFwKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2
YWwuaCBcCisgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBcCiAgICAgcmVuZGVyaW5n
L0V4Y2x1c2lvblJlY3RhbmdsZS5oIFwKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaCBc
CiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCBhMTI3MTYyLi5hZDQ4MzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zMjgzLDYgKzMy
ODMsOCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9FbGxpcHNpc0JveC5oJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1
c2lvblBvbHlnb24uY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdv
bi5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCcsCiAg
ICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5oJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggN2E3NTc1YS4uYjJkMzc5NSAxMDA3NTUKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTM4NDE1LDYgKzM4
NDE1LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAg
ICAgICAgICAgICAgIDwvRmlsZT4KICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXEV4
Y2x1c2lvblBvbHlnb24uY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Cisg
ICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8
RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xFeGNsdXNpb25Qb2x5Z29uLmgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIDxGaWxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0
aD0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAiCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5
ODA4MTdlLi5hOWZmOTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xODM1LDYgKzE4MzUsOCBAQAogCQk2RTg3OThCRDE1Rjgx
RTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCNzE1RjgxRTRBMDBCRkU0QUEgLyogRXhj
bHVzaW9uUmVjdGFuZ2xlLmggKi87IH07CiAJCTZFODc5OEJFMTVGODFFNEEwMEJGRTRBQSAvKiBF
eGNsdXNpb25TaGFwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RTg3OThCODE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwICov
OyB9OwogCQk2RTg3OThCRjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI5MTVGODFF
NEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTZFQUYzNDBGMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNs
dXNpb25Qb2x5Z29uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZFQUYzNDBEMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCAq
LzsgfTsKKwkJNkVBRjM0MTAxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQUYzNDBFMTYx
Mzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggKi87IH07CiAJCTZFQkM1RUFGMTM4
QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNG
bG9hdDY0QXJyYXkuY3BwICovOyB9OwogCQk2RUJDNUVCMDEzOEI1MEYyMDBBMENGOEEgLyogSlNG
bG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovOyB9Owog
CQk2RUJGMEU0ODEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTQ1MTJBODkyNjEw
MERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuY3BwICovOyB9OwpAQCAtOTAyNyw2ICs5MDI5LDgg
QEAKIAkJNkU4Nzk4QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25SZWN0YW5nbGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU4Nzk4QjgxNUY4MUU0QTAwQkZFNEFBIC8qIEV4
Y2x1c2lvblNoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4
Y2x1c2lvblNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU4Nzk4Qjkx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTZFQUYzNDBEMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lvblBvbHlnb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyog
RXhjbHVzaW9uUG9seWdvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNs
dXNpb25Qb2x5Z29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkM1RDgwMTM4
QjRDNEUwMEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9
IEZsb2F0NjRBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvRmxvYXQ2NEFycmF5LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxv
YXQ2NEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmxv
YXQ2NEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCQzVFQUUxMzhC
NTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yMTMwNSw2ICsyMTMwOSw4IEBACiAJCQkJQThDRkY2QkQwQTE1NjExODAwMEE0MjM0IC8qIEVs
bGlwc2lzQm94LmggKi8sCiAJCQkJNkU4Nzk4QjQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lv
bkludGVydmFsLmNwcCAqLywKIAkJCQk2RTg3OThCNTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVz
aW9uSW50ZXJ2YWwuaCAqLywKKwkJCQk2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVz
aW9uUG9seWdvbi5jcHAgKi8sCisJCQkJNkVBRjM0MEUxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1
c2lvblBvbHlnb24uaCAqLywKIAkJCQk2RTg3OThCNjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVz
aW9uUmVjdGFuZ2xlLmNwcCAqLywKIAkJCQk2RTg3OThCNzE1RjgxRTRBMDBCRkU0QUEgLyogRXhj
bHVzaW9uUmVjdGFuZ2xlLmggKi8sCiAJCQkJNkU4Nzk4QjgxNUY4MUU0QTAwQkZFNEFBIC8qIEV4
Y2x1c2lvblNoYXBlLmNwcCAqLywKQEAgLTI1NTI5LDYgKzI1NTM1LDcgQEAKIAkJCQk5MzFDQkQw
RDE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzFDQkQwRjE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzFDQkQxMTE2MUE0NEU5MDBFNEM4NzQgLyogU2Ny
b2xsaW5nU3RhdGVUcmVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RUFGMzQxMDE2MTM4NjlBMDA4
NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yODYyNCw2ICsy
ODYzMSw3IEBACiAJCQkJOTMxQ0JEMEUxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzFDQkQxMDE2MUE0NEU5MDBF
NEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMUNC
RDEzMTYxQTQ0RjgwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0gaW4gU291cmNl
cyAqLywKKwkJCQk2RUFGMzQwRjE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25Qb2x5Z29uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Q
b2x5Z29uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2ZkYWEwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHln
b24uY3BwCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2Jl
IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkV4Y2x1c2lvblBvbHlnb24uaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBFZGdlSW50ZXJzZWN0aW9uVHlwZSB7Cisg
ICAgTm9ybWFsID0gMCwKKyAgICBWZXJ0ZXhNaW5ZID0gMSwKKyAgICBWZXJ0ZXhNYXhZID0gMiwK
KyAgICBWZXJ0ZXhZQm90aCA9IDMKK307CisKK3N0cnVjdCBFZGdlSW50ZXJzZWN0aW9uIHsKKyAg
ICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZTsKKyAgICBmbG9hdCB4OworICAgIGZs
b2F0IHk7CisgICAgRWRnZUludGVyc2VjdGlvblR5cGUgdHlwZTsKK307CisKK3N0YXRpYyBib29s
IGNvbXBhcmVFZGdlTWluWShjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZTEsIGNvbnN0IEV4
Y2x1c2lvblBvbHlnb25FZGdlKiBlMikKK3sKKyAgICByZXR1cm4gZTEtPm1pblkoKSA8IGUyLT5t
aW5ZKCk7Cit9CisKK0V4Y2x1c2lvblBvbHlnb246OkV4Y2x1c2lvblBvbHlnb24oUGFzc093blB0
cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCisgICAg
OiBFeGNsdXNpb25TaGFwZSgpCisgICAgLCBtX3ZlcnRpY2VzKHZlcnRpY2VzKQorICAgICwgbV9m
aWxsUnVsZShmaWxsUnVsZSkKK3sKKyAgICAvLyBGSVhNRTogaGFuZGxlIHNwZWNpYWwgY2FzZXM6
IGxlc3MgdGhhbiAzIG5vbi1jb2xpbmVhciB2ZXJ0aWNlcworICAgIC8vIEZJWE1FOiBhc3N1bWlu
ZyBvcGVuIHBvbHlnb25zIGZvciBub3cKKworICAgIHVuc2lnbmVkIG5WZXJ0aWNlcyA9IG51bWJl
ck9mVmVydGljZXMoKTsKKyAgICBtX2VkZ2VzLnJlc2l6ZShuVmVydGljZXMpOworICAgIFZlY3Rv
cjxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+IHNvcnRlZEVkZ2VzTWluWShuVmVydGljZXMpOworCisg
ICAgZmxvYXQgbWluWCA9IGdldFhBdCgwKTsKKyAgICBmbG9hdCBtaW5ZID0gZ2V0WUF0KDApOwor
ICAgIGZsb2F0IG1heFggPSBtaW5YOworICAgIGZsb2F0IG1heFkgPSBtaW5ZOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG5WZXJ0aWNlczsgaSsrKSB7CisgICAgICAgIGZsb2F0IHgg
PSBnZXRYQXQoaSk7CisgICAgICAgIGZsb2F0IHkgPSBnZXRZQXQoaSk7CisKKyAgICAgICAgbWlu
WCA9IHN0ZDo6bWluKHgsIG1pblgpOworICAgICAgICBtYXhYID0gc3RkOjptYXgoeCwgbWF4WCk7
CisgICAgICAgIG1pblkgPSBzdGQ6Om1pbih5LCBtaW5ZKTsKKyAgICAgICAgbWF4WSA9IHN0ZDo6
bWF4KHksIG1heFkpOworCisgICAgICAgIG1fZWRnZXNbaV0ucG9seWdvbiA9IHRoaXM7CisgICAg
ICAgIG1fZWRnZXNbaV0uaW5kZXgxID0gaTsKKyAgICAgICAgbV9lZGdlc1tpXS5pbmRleDIgPSAo
aSArIDEpICUgblZlcnRpY2VzOworCisgICAgICAgIHNvcnRlZEVkZ2VzTWluWVtpXSA9ICZtX2Vk
Z2VzW2ldOworICAgIH0KKworICAgIG1fYm91bmRpbmdCb3guc2V0WChtaW5YKTsKKyAgICBtX2Jv
dW5kaW5nQm94LnNldFkobWluWSk7CisgICAgbV9ib3VuZGluZ0JveC5zZXRXaWR0aChtYXhYIC0g
bWluWCk7CisgICAgbV9ib3VuZGluZ0JveC5zZXRIZWlnaHQobWF4WSAtIG1pblkpOworCisgICAg
c3RkOjpzb3J0KHNvcnRlZEVkZ2VzTWluWS5iZWdpbigpLCBzb3J0ZWRFZGdlc01pblkuZW5kKCks
IFdlYkNvcmU6OmNvbXBhcmVFZGdlTWluWSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9lZGdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBFeGNsdXNpb25Qb2x5Z29uRWRnZSog
ZWRnZSA9ICZtX2VkZ2VzW2ldOworICAgICAgICBtX2VkZ2VUcmVlLmFkZChFZGdlSW50ZXJ2YWwo
ZWRnZS0+bWluWSgpLCBlZGdlLT5tYXhZKCksIGVkZ2UpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBi
b29sIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlcCwg
ZmxvYXQgeSwgRWRnZUludGVyc2VjdGlvbiYgcmVzdWx0KQoreworICAgIGNvbnN0IEV4Y2x1c2lv
blBvbHlnb25FZGdlJiBlID0gKmVwOworCisgICAgaWYgKGUubWluWSgpID4geSB8fCBlLm1heFko
KSA8IHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0IHgxID0gZS54MSgpOwor
ICAgIGZsb2F0IHkxID0gZS55MSgpOworICAgIGZsb2F0IHgyID0gZS54MigpOworICAgIGZsb2F0
IHkyID0gZS55MigpOworICAgIGZsb2F0IGR5ID0geTIgLSB5MTsKKworICAgIHJlc3VsdC5lZGdl
ID0gZXA7CisgICAgcmVzdWx0LnkgPSB5OworCisgICAgaWYgKCFkeSkgeworICAgICAgICByZXN1
bHQudHlwZSA9IFZlcnRleFlCb3RoOworICAgICAgICByZXN1bHQueCA9IGUubWluWCgpOworICAg
IH0gZWxzZSBpZiAoeSA9PSBlLm1pblkoKSkgeworICAgICAgICByZXN1bHQudHlwZSA9IFZlcnRl
eE1pblk7CisgICAgICAgIHJlc3VsdC54ID0gKHkxIDwgeTIpID8geDEgOiB4MjsKKyAgICB9IGVs
c2UgaWYgKHkgPT0gZS5tYXhZKCkpIHsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBWZXJ0ZXhNYXhZ
OworICAgICAgICByZXN1bHQueCA9ICh5MSA+IHkyKSA/IHgxIDogeDI7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb3JtYWw7CisgICAgICAgIHJlc3VsdC54ID0gKCh5IC0g
eTEpICogKHgyIC0geDEpIC8gZHkpICsgeDE7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Zsb2F0IEV4Y2x1c2lvblBvbHlnb246OnJpZ2h0VmVydGV4WSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKK3sKKyAgICB1bnNpZ25lZCBuVmVydGljZXMgPSBudW1iZXJPZlZlcnRpY2VzKCk7Cisg
ICAgdW5zaWduZWQgaW5kZXgxID0gKGluZGV4ICsgMSkgJSBuVmVydGljZXM7CisgICAgdW5zaWdu
ZWQgaW5kZXgyID0gKGluZGV4IC0gMSkgJSBuVmVydGljZXM7CisKKyAgICBpZiAoZ2V0WEF0KGlu
ZGV4MSkgPT0gZ2V0WEF0KGluZGV4MikpCisgICAgICAgIHJldHVybiBnZXRZQXQoaW5kZXgxKSA+
IGdldFlBdChpbmRleDIpID8gZ2V0WUF0KGluZGV4MSkgOiBnZXRZQXQoaW5kZXgyKTsKKworICAg
IHJldHVybiBnZXRYQXQoaW5kZXgxKSA+IGdldFhBdChpbmRleDIpID8gZ2V0WUF0KGluZGV4MSkg
OiBnZXRZQXQoaW5kZXgyKTsKK30KKworc3RhdGljIGJvb2wgYXBwZW5kSW50ZXJ2YWxYKGZsb2F0
IHgsIGJvb2wgaW5zaWRlLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiByZXN1bHQpCit7Cisg
ICAgaWYgKCFpbnNpZGUpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoRXhjbHVzaW9uSW50ZXJ2YWwo
eCkpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxXS54MiA9IHg7
CisKKyAgICByZXR1cm4gIWluc2lkZTsKK30KKworc3RhdGljIGJvb2wgY29tcGFyZUVkZ2VJbnRl
cnNlY3Rpb25YKGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjEsIGNvbnN0IEVk
Z2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjIpCit7CisgICAgcmV0dXJuIChpbnRlcnNlY3Rp
b24xLnggPT0gaW50ZXJzZWN0aW9uMi54KSA/IGludGVyc2VjdGlvbjEudHlwZSA8IGludGVyc2Vj
dGlvbjIudHlwZSA6IGludGVyc2VjdGlvbjEueCA8IGludGVyc2VjdGlvbjIueDsKK30KKwordm9p
ZCBFeGNsdXNpb25Qb2x5Z29uOjpjb21wdXRlWEludGVyc2VjdGlvbnMoZmxvYXQgeSwgVmVjdG9y
PEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KSBjb25zdAoreworICAgIFZlY3RvcjxFeGNsdXNp
b25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7CisgICAgbV9lZGdlVHJl
ZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwoeSwgeSwgMCksIG92
ZXJsYXBwaW5nRWRnZXMpOworCisgICAgVmVjdG9yPEVkZ2VJbnRlcnNlY3Rpb24+IGludGVyc2Vj
dGlvbnM7CisgICAgRWRnZUludGVyc2VjdGlvbiBpbnRlcnNlY3Rpb247CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG92ZXJsYXBwaW5nRWRnZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
RXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2UgPSBzdGF0aWNfY2FzdDxFeGNsdXNpb25Qb2x5Z29u
RWRnZSo+KG92ZXJsYXBwaW5nRWRnZXNbaV0uZGF0YSgpKTsKKyAgICAgICAgaWYgKGNvbXB1dGVY
SW50ZXJzZWN0aW9uKGVkZ2UsIHksIGludGVyc2VjdGlvbikpCisgICAgICAgICAgICBpbnRlcnNl
Y3Rpb25zLmFwcGVuZChpbnRlcnNlY3Rpb24pOworICAgIH0KKyAgICBpZiAoaW50ZXJzZWN0aW9u
cy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OnNvcnQoaW50ZXJzZWN0
aW9ucy5iZWdpbigpLCBpbnRlcnNlY3Rpb25zLmVuZCgpLCBXZWJDb3JlOjpjb21wYXJlRWRnZUlu
dGVyc2VjdGlvblgpOworCisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIGludCB3aW5kQ291
bnQgPSAwOworICAgIGJvb2wgaW5zaWRlID0gZmFsc2U7CisKKyAgICB3aGlsZSAoaW5kZXggPCBp
bnRlcnNlY3Rpb25zLnNpemUoKSkgeworICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiB0
aGlzSW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleF07CisKKyAgICAgICAgaWYgKGlu
ZGV4ICsgMSA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBjb25zdCBFZGdl
SW50ZXJzZWN0aW9uJiBuZXh0SW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleCArMV07
CisgICAgICAgICAgICBpZiAoKHRoaXNJbnRlcnNlY3Rpb24ueCA9PSBuZXh0SW50ZXJzZWN0aW9u
LngpICYmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSB8fCB0aGlzSW50ZXJz
ZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpc0lu
dGVyc2VjdGlvbi50eXBlID09IG5leHRJbnRlcnNlY3Rpb24udHlwZSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBza2lwIFZlcnRleE1heFksVmVydGV4TWF4WSBhbmQgVmVydGV4TWluWSxWZXJ0
ZXhNaW5ZCisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVmVydGV4TWluWSxWZXJ0ZXhNYXhZIG9y
IFZlcnRleE1heFksVmVydGV4TWluWSA9PiBWZXJ0ZXhNaW5ZCisgICAgICAgICAgICAgICAgICAg
IGlmIChuZXh0SW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGludGVyc2VjdGlvbnNbaW5kZXggKyAxXSA9IHRoaXNJbnRlcnNlY3Rpb247Cisg
ICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
Y29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gKnRoaXNJbnRlcnNlY3Rpb24u
ZWRnZTsKKyAgICAgICAgYm9vbCBjcm9zc2luZyA9ICF3aW5kQ291bnQ7CisKKyAgICAgICAgaWYg
KGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CisgICAgICAgICAgICB3aW5kQ291bnQgKz0g
KGdldFlBdCh0aGlzRWRnZS5pbmRleDIpID4gZ2V0WUF0KHRoaXNFZGdlLmluZGV4MSkpID8gKzEg
OiAtMTsKKyAgICAgICAgICAgIGNyb3NzaW5nID0gY3Jvc3NpbmcgfHwgIXdpbmRDb3VudDsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICgodGhpc0ludGVyc2VjdGlvbi50eXBlID09IE5vcm1hbCkg
fHwgKHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZKSkgeworICAgICAgICAgICAg
aWYgKGNyb3NzaW5nKQorICAgICAgICAgICAgICAgIGluc2lkZSA9IGFwcGVuZEludGVydmFsWCh0
aGlzSW50ZXJzZWN0aW9uLngsIGluc2lkZSwgcmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIGlmICh0
aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkgeworICAgICAgICAgICAgaW50IHZl
cnRleEluZGV4ID0gKGdldFlBdCh0aGlzRWRnZS5pbmRleDIpID4gZ2V0WUF0KHRoaXNFZGdlLmlu
ZGV4MSkpID8gdGhpc0VkZ2UuaW5kZXgyIDogdGhpc0VkZ2UuaW5kZXgxOworICAgICAgICAgICAg
aWYgKGNyb3NzaW5nICYmIHJpZ2h0VmVydGV4WSh2ZXJ0ZXhJbmRleCkgPiB5KQorICAgICAgICAg
ICAgICAgIGluc2lkZSA9IGFwcGVuZEludGVydmFsWCh0aGlzRWRnZS5tYXhYKCksIGluc2lkZSwg
cmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVy
dGV4WUJvdGgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEV4Y2x1c2lvbkludGVydmFsKHRo
aXNFZGdlLm1pblgoKSwgdGhpc0VkZ2UubWF4WCgpKSk7CisKKyAgICAgICAgaW5kZXggKz0gMTsK
KyAgICB9Cit9CisKKy8vIFJldHVybiB0aGUgWCBwcm9qZWN0aW9ucyBvZiB0aGUgZWRnZXMgdGhh
dCBvdmVybGFwIHkxLHkyLgordm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpjb21wdXRlRWRnZUludGVy
c2VjdGlvbnMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiBy
ZXN1bHQpIGNvbnN0Cit7CisgICAgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb246OkVkZ2VJbnRlcnZh
bD4gb3ZlcmxhcHBpbmdFZGdlczsKKyAgICBtX2VkZ2VUcmVlLmFsbE92ZXJsYXBzKEV4Y2x1c2lv
blBvbHlnb246OkVkZ2VJbnRlcnZhbCh5MSwgeTIsIDApLCBvdmVybGFwcGluZ0VkZ2VzKTsKKwor
ICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IEV4
Y2x1c2lvblBvbHlnb25FZGdlICplZGdlID0gc3RhdGljX2Nhc3Q8RXhjbHVzaW9uUG9seWdvbkVk
Z2UqPihvdmVybGFwcGluZ0VkZ2VzW2ldLmRhdGEoKSk7CisgICAgICAgIGZsb2F0IHgxLCB4MjsK
KworICAgICAgICBpZiAoZWRnZS0+bWluWSgpIDwgeTEpIHsKKyAgICAgICAgICAgIGNvbXB1dGVY
SW50ZXJzZWN0aW9uKGVkZ2UsIHkxLCBpbnRlcnNlY3Rpb24pOworICAgICAgICAgICAgeDEgPSBp
bnRlcnNlY3Rpb24ueDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB4MSA9IChlZGdlLT55
MSgpIDwgZWRnZS0+eTIoKSkgPyBlZGdlLT54MSgpIDogZWRnZS0+eDIoKTsKKworICAgICAgICBp
ZiAoZWRnZS0+bWF4WSgpID4geTIpIHsKKyAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9u
KGVkZ2UsIHkyLCBpbnRlcnNlY3Rpb24pOworICAgICAgICAgICAgeDIgPSBpbnRlcnNlY3Rpb24u
eDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB4MiA9IChlZGdlLT55MSgpID4gZWRnZS0+
eTIoKSkgPyBlZGdlLT54MSgpIDogZWRnZS0+eDIoKTsKKworICAgICAgICBpZiAoeDEgPiB4MikK
KyAgICAgICAgICAgIHN0ZDo6c3dhcCh4MSwgeDIpOworCisgICAgICAgIHJlc3VsdC5hcHBlbmQo
RXhjbHVzaW9uSW50ZXJ2YWwoeDEsIHgyKSk7CisgICAgfQorCisgICAgc29ydEV4Y2x1c2lvbklu
dGVydmFscyhyZXN1bHQpOworfQorCit2b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldEV4Y2x1ZGVk
SW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxCb3R0b20sIFNlZ21lbnRM
aXN0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgZmxvYXQgeTEgPSBtaW5ZRm9yTG9naWNhbExpbmUo
bG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSk7CisgICAgZmxvYXQgeTIgPSBtYXhZRm9yTG9naWNh
bExpbmUobG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSk7CisKKyAgICBWZWN0b3I8RXhjbHVzaW9u
SW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOworICAgIGNvbXB1dGVYSW50ZXJz
ZWN0aW9ucyh5MSwgeTFYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTIs
IHkyWEludGVydmFscyk7CisKKyAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IG1lcmdlZElu
dGVydmFsczsKKyAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWElu
dGVydmFscywgbWVyZ2VkSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZh
bD4gZWRnZUludGVydmFsczsKKyAgICBjb21wdXRlRWRnZUludGVyc2VjdGlvbnMoeTEsIHkyLCBl
ZGdlSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gZXhjbHVkZWRJ
bnRlcnZhbHM7CisgICAgbWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMobWVyZ2VkSW50ZXJ2YWxzLCBl
ZGdlSW50ZXJ2YWxzLCBleGNsdWRlZEludGVydmFscyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZXhjbHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgRXhjbHVz
aW9uSW50ZXJ2YWwgaW50ZXJ2YWwgPSBleGNsdWRlZEludGVydmFsc1tpXTsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChMaW5lU2VnbWVudChpbnRlcnZhbC54MSwgaW50ZXJ2YWwueDIpKTsKKyAgICB9
Cit9CisKK3ZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoZmxvYXQg
bG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEJvdHRvbSwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29u
c3QKK3sKKyAgICBmbG9hdCB5MSA9IG1pbllGb3JMb2dpY2FsTGluZShsb2dpY2FsVG9wLCBsb2dp
Y2FsQm90dG9tKTsKKyAgICBmbG9hdCB5MiA9IG1heFlGb3JMb2dpY2FsTGluZShsb2dpY2FsVG9w
LCBsb2dpY2FsQm90dG9tKTsKKworICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4geTFYSW50
ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkxLCB5MVhJ
bnRlcnZhbHMpOworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyh5MiwgeTJYSW50ZXJ2YWxzKTsK
KworICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gY29tbW9uSW50ZXJ2YWxzOworICAgIGlu
dGVyc2VjdEV4Y2x1c2lvbkludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywgY29t
bW9uSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gZWRnZUludGVy
dmFsczsKKyAgICBjb21wdXRlRWRnZUludGVyc2VjdGlvbnMoeTEsIHkyLCBlZGdlSW50ZXJ2YWxz
KTsKKworICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gaW5jbHVkZWRJbnRlcnZhbHM7Cisg
ICAgc3VidHJhY3RFeGNsdXNpb25JbnRlcnZhbHMoY29tbW9uSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2
YWxzLCBpbmNsdWRlZEludGVydmFscyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
aW5jbHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgRXhjbHVzaW9uSW50ZXJ2
YWwgaW50ZXJ2YWwgPSBpbmNsdWRlZEludGVydmFsc1tpXTsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChMaW5lU2VnbWVudChpbnRlcnZhbC54MSwgaW50ZXJ2YWwueDIpKTsKKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25Qb2x5Z29uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9u
UG9seWdvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjE2ZjQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdv
bi5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5
c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MK
KyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFeGNsdXNpb25Qb2x5Z29uX2gK
KyNkZWZpbmUgRXhjbHVzaW9uUG9seWdvbl9oCisKKyNpbmNsdWRlICJFeGNsdXNpb25JbnRlcnZh
bC5oIgorI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlBPREludGVydmFsVHJlZS5oIgor
I2luY2x1ZGUgIldpbmRSdWxlLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEV4Y2x1c2lv
blBvbHlnb25FZGdlOworCisvLyBVc2VkIGJ5IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5n
CisjaWZuZGVmIE5ERUJVRwordGVtcGxhdGUgPGNsYXNzPiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzsK
KyNlbmRpZgorCitjbGFzcyBFeGNsdXNpb25Qb2x5Z29uIDogcHVibGljIEV4Y2x1c2lvblNoYXBl
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFeGNsdXNpb25Qb2x5Z29uKTsKK3B1YmxpYzoK
KyAgICBFeGNsdXNpb25Qb2x5Z29uKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVy
dGljZXMsIFdpbmRSdWxlIGZpbGxSdWxlKTsKKworICAgIGZsb2F0IGdldFhBdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QgeyByZXR1cm4gKCptX3ZlcnRpY2VzKVtpbmRleF0ueCgpOyB9CisgICAgZmxv
YXQgZ2V0WUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiAoKm1fdmVydGljZXMpW2lu
ZGV4XS55KCk7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZlZlcnRpY2VzKCkgY29uc3QgeyByZXR1
cm4gbV92ZXJ0aWNlcy0+c2l6ZSgpOyB9CisgICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7
IHJldHVybiBtX2ZpbGxSdWxlOyB9CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzaGFwZUxvZ2lj
YWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGludGVybmFsVG9Mb2dpY2Fs
Qm91bmRpbmdCb3gobV9ib3VuZGluZ0JveCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVk
ZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEJvdHRvbSwgU2VnbWVu
dExpc3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRl
cnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEJvdHRvbSwgU2VnbWVudExpc3Qm
KSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBmbG9hdCByaWdodFZlcnRleFkodW5z
aWduZWQpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKGZsb2F0IHksIFZl
Y3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVFZGdlSW50
ZXJzZWN0aW9ucyhmbG9hdCBtaW5ZLCBmbG9hdCBtYXhZLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2
YWw+JikgY29uc3Q7CisKKyAgICB0eXBlZGVmIFBPREludGVydmFsPGZsb2F0LCBFeGNsdXNpb25Q
b2x5Z29uRWRnZSo+IEVkZ2VJbnRlcnZhbDsKKyAgICB0eXBlZGVmIFBPREludGVydmFsVHJlZTxm
bG9hdCwgRXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBFZGdlSW50ZXJ2YWxUcmVlOworCisgICAgT3du
UHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IG1fdmVydGljZXM7CisgICAgV2luZFJ1bGUgbV9maWxs
UnVsZTsKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGluZ0JveDsKKyAgICBWZWN0b3I8RXhjbHVzaW9u
UG9seWdvbkVkZ2U+IG1fZWRnZXM7CisgICAgRWRnZUludGVydmFsVHJlZSBtX2VkZ2VUcmVlOwor
fTsKKworc3RydWN0IEV4Y2x1c2lvblBvbHlnb25FZGdlIHsKKyAgICBmbG9hdCB4MSgpIGNvbnN0
IHsgQVNTRVJUKHBvbHlnb24pOyByZXR1cm4gcG9seWdvbi0+Z2V0WEF0KGluZGV4MSk7IH0KKyAg
ICBmbG9hdCB5MSgpIGNvbnN0IHsgQVNTRVJUKHBvbHlnb24pOyByZXR1cm4gcG9seWdvbi0+Z2V0
WUF0KGluZGV4MSk7IH0KKyAgICBmbG9hdCB4MigpIGNvbnN0IHsgQVNTRVJUKHBvbHlnb24pOyBy
ZXR1cm4gcG9seWdvbi0+Z2V0WEF0KGluZGV4Mik7IH0KKyAgICBmbG9hdCB5MigpIGNvbnN0IHsg
QVNTRVJUKHBvbHlnb24pOyByZXR1cm4gcG9seWdvbi0+Z2V0WUF0KGluZGV4Mik7IH0KKworICAg
IGZsb2F0IG1pblgoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1pbih4MSgpLCB4MigpKTsgfQorICAg
IGZsb2F0IG1pblkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1pbih5MSgpLCB5MigpKTsgfQorICAg
IGZsb2F0IG1heFgoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1heCh4MSgpLCB4MigpKTsgfQorICAg
IGZsb2F0IG1heFkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1heCh5MSgpLCB5MigpKTsgfQorCisg
ICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbiogcG9seWdvbjsKKyAgICB1bnNpZ25lZCBpbmRleDE7
CisgICAgdW5zaWduZWQgaW5kZXgyOworfTsKKworLy8gVGhlc2Ugc3RydWN0dXJlcyBhcmUgdXNl
ZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZworI2lmbmRlZiBOREVCVUcKK3RlbXBs
YXRlIDw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPGZsb2F0PiB7CisgICAgc3RhdGljIFN0cmluZyBz
dHJpbmcoY29uc3QgZmxvYXQgdmFsdWUpIHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHZhbHVlKTsg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxFeGNsdXNpb25Qb2x5Z29u
RWRnZSo+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBFeGNsdXNpb25Qb2x5Z29u
RWRnZSogZWRnZSkgeyByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVwICglZiwlZiAlZiwlZikiLCBl
ZGdlLCBlZGdlLT54MSgpLCBlZGdlLT55MSgpLCBlZGdlLT54MigpLCBlZGdlLT55MigpKTsgfQor
fTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFeGNsdXNp
b25Qb2x5Z29uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3Bw
CmluZGV4IDBmNDMwZWYuLjMwMzNhMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblNoYXBlLmNwcApAQCAtMzEsMTAgKzMxLDEwIEBACiAjaW5jbHVkZSAiRXhjbHVzaW9u
U2hhcGUuaCIKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJF
eGNsdXNpb25Qb2x5Z29uLmgiCiAjaW5jbHVkZSAiRXhjbHVzaW9uUmVjdGFuZ2xlLmgiCiAjaW5j
bHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNjAsNiArNjAsMTEg
QEAgc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lvbkVsbGlw
c2UoY29uc3QgRmxvYXRQb2ludCYgY2VudGUKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1
c2lvblJlY3RhbmdsZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGlpLndpZHRoKCksIGNlbnRl
ci55KCkgLSByYWRpaS5oZWlnaHQoKSwgcmFkaWkud2lkdGgoKSoyLCByYWRpaS5oZWlnaHQoKSoy
KSwgcmFkaWkpKTsKIH0KIAorc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0
ZUV4Y2x1c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNl
cywgV2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNp
b25Qb2x5Z29uKHZlcnRpY2VzLCBmaWxsUnVsZSkpOworfQorCiAvLyBJZiB0aGUgd3JpdGluZ01v
ZGUgaXMgdmVydGljYWwsIHRoZW4gdGhlIEJhc2ljU2hhcGUncyAocGh5c2ljYWwpIHggYW5kIHkg
Y29vcmRpbmF0ZXMgYXJlIHN3YXBwZWQsIHNvIHRoYXQKIC8vIGxpbmUgc2VnbWVudHMgYXJlIHBh
cmFsbGVsIHRvIHRoZSBpbnRlcm5hbCBjb29yZGluYXRlIHN5c3RlbSdzIFggYXhpcy4KIApAQCAt
ODcsOCArOTIsOCBAQCBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6
Y3JlYXRlRXhjbHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZQogICAgICAgICBmbG9hdCByYWRp
dXNZID0gcmFkaXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5n
dGgocmFkaXVzWUxlbmd0aCwgYm94SGVpZ2h0KTsKIAogICAgICAgICBleGNsdXNpb25TaGFwZSA9
IGhvcml6b250YWxXcml0aW5nTW9kZQotICAgICAgICAgID8gY3JlYXRlRXhjbHVzaW9uUmVjdGFu
Z2xlKEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgRmxvYXRTaXplKHJhZGl1c1gsIHJh
ZGl1c1kpKQotICAgICAgICAgIDogY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVjdCh5
LCB4LCBoZWlnaHQsIHdpZHRoKSwgRmxvYXRTaXplKHJhZGl1c1ksIHJhZGl1c1gpKTsKKyAgICAg
ICAgICAgID8gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KSwgRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpKQorICAgICAgICAgICAgOiBjcmVh
dGVFeGNsdXNpb25SZWN0YW5nbGUoRmxvYXRSZWN0KHksIHgsIGhlaWdodCwgd2lkdGgpLCBGbG9h
dFNpemUocmFkaXVzWSwgcmFkaXVzWCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTk5
LDggKzEwNCw4IEBAIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IEV4Y2x1c2lvblNoYXBlOjpj
cmVhdGVFeGNsdXNpb25TaGFwZShjb25zdCBCYXNpY1NoYXBlCiAgICAgICAgIGZsb2F0IHJhZGl1
cyA9ICBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+cmFkaXVzKCksIHN0ZDo6bWF4KGJveEhl
aWdodCwgYm94V2lkdGgpKTsKIAogICAgICAgICBleGNsdXNpb25TaGFwZSA9IGhvcml6b250YWxX
cml0aW5nTW9kZQotICAgICAgICAgID8gY3JlYXRlRXhjbHVzaW9uQ2lyY2xlKEZsb2F0UG9pbnQo
Y2VudGVyWCwgY2VudGVyWSksIHJhZGl1cykKLSAgICAgICAgICA6IGNyZWF0ZUV4Y2x1c2lvbkNp
cmNsZShGbG9hdFBvaW50KGNlbnRlclksIGNlbnRlclgpLCByYWRpdXMpOworICAgICAgICAgICAg
PyBjcmVhdGVFeGNsdXNpb25DaXJjbGUoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgcmFk
aXVzKQorICAgICAgICAgICAgOiBjcmVhdGVFeGNsdXNpb25DaXJjbGUoRmxvYXRQb2ludChjZW50
ZXJZLCBjZW50ZXJYKSwgcmFkaXVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMTIs
MTMgKzExNywzMiBAQCBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6
Y3JlYXRlRXhjbHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZQogICAgICAgICBmbG9hdCByYWRp
dXNZID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRpdXNZKCksIGJveEhlaWdodCk7
CiAKICAgICAgICAgZXhjbHVzaW9uU2hhcGUgPSBob3Jpem9udGFsV3JpdGluZ01vZGUKLSAgICAg
ICAgICA/IGNyZWF0ZUV4Y2x1c2lvbkVsbGlwc2UoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZ
KSwgRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpKQotICAgICAgICAgIDogY3JlYXRlRXhjbHVz
aW9uRWxsaXBzZShGbG9hdFBvaW50KGNlbnRlclksIGNlbnRlclgpLCBGbG9hdFNpemUocmFkaXVz
WSwgcmFkaXVzWCkpOworICAgICAgICAgICAgPyBjcmVhdGVFeGNsdXNpb25FbGxpcHNlKEZsb2F0
UG9pbnQoY2VudGVyWCwgY2VudGVyWSksIEZsb2F0U2l6ZShyYWRpdXNYLCByYWRpdXNZKSkKKyAg
ICAgICAgICAgIDogY3JlYXRlRXhjbHVzaW9uRWxsaXBzZShGbG9hdFBvaW50KGNlbnRlclksIGNl
bnRlclgpLCBGbG9hdFNpemUocmFkaXVzWSwgcmFkaXVzWCkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1BPTFlHT046Ci0gICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9QT0xZ
R09OOiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKiBwb2x5Z29uID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZVBvbHlnb24qPihiYXNpY1NoYXBlKTsKKyAgICAgICAgY29u
c3QgVmVjdG9yPExlbmd0aD4mIHZhbHVlcyA9IHBvbHlnb24tPnZhbHVlcygpOworICAgICAgICBz
aXplX3QgdmFsdWVzU2l6ZSA9IHZhbHVlcy5zaXplKCk7CisgICAgICAgIEFTU0VSVCghKHZhbHVl
c1NpemUgJSAyKSk7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50PiogdmVydGljZXMgPSBuZXcg
VmVjdG9yPEZsb2F0UG9pbnQ+KHZhbHVlc1NpemUgLyAyKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHZhbHVlc1NpemU7IGkgKz0gMikgeworICAgICAgICAgICAgZmxvYXQgdmVy
dGV4WCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkpLCBib3hXaWR0aCk7CisgICAg
ICAgICAgICBmbG9hdCB2ZXJ0ZXhZID0gZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMuYXQoaSAr
IDEpLCBib3hIZWlnaHQpOworICAgICAgICAgICAgdW5zaWduZWQgdmVydGV4SW5kZXggPSBpIC8g
MjsKKyAgICAgICAgICAgIGlmIChob3Jpem9udGFsV3JpdGluZ01vZGUpIHsKKyAgICAgICAgICAg
ICAgICB2ZXJ0aWNlcy0+YXQodmVydGV4SW5kZXgpLnNldFgodmVydGV4WCk7CisgICAgICAgICAg
ICAgICAgdmVydGljZXMtPmF0KHZlcnRleEluZGV4KS5zZXRZKHZlcnRleFkpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2ZXJ0aWNlcy0+YXQodmVydGV4SW5kZXgpLnNl
dFkodmVydGV4WCk7CisgICAgICAgICAgICAgICAgdmVydGljZXMtPmF0KHZlcnRleEluZGV4KS5z
ZXRYKHZlcnRleFkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGV4Y2x1c2lv
blNoYXBlID0gY3JlYXRlRXhjbHVzaW9uUG9seWdvbihhZG9wdFB0cih2ZXJ0aWNlcyksIHBvbHln
b24tPndpbmRSdWxlKCkpOworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBkZWZhdWx0Ogog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAKaW5kZXggZTBkNmQxOS4uMzdk
MWYyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mby5jcHAKQEAgLTczLDcgKzczLDcgQEAgYm9vbCBFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm86OmlzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvRW5hYmxlZEZvclJlbmRlckJsb2Nr
KGMKIHsKICAgICAvLyBGSVhNRTogQnVnIDg5NzA3OiBFbmFibGUgc2hhcGUgaW5zaWRlIGZvciBu
b24tcmVjdGFuZ3VsYXIgc2hhcGVzCiAgICAgQmFzaWNTaGFwZSogc2hhcGUgPSBibG9jay0+c3R5
bGUoKS0+c2hhcGVJbnNpZGUoKTsKLSAgICByZXR1cm4gKHNoYXBlICYmIHNoYXBlLT50eXBlKCkg
PT0gQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUkVDVEFOR0xFKTsKKyAgICByZXR1cm4gc2hhcGUg
JiYgKHNoYXBlLT50eXBlKCkgPT0gQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUkVDVEFOR0xFIHx8
IHNoYXBlLT50eXBlKCkgPT0gQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUE9MWUdPTik7CiB9CiAK
IHZvaWQgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjpyZW1vdmVFeGNsdXNpb25TaGFwZUluc2lk
ZUluZm9Gb3JSZW5kZXJCbG9jayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCg==
</data>
<flag name="review"
          id="179256"
          type_id="1"
          status="-"
          setter="krit"
    />
    <flag name="commit-queue"
          id="179257"
          type_id="3"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167367</attachid>
            <date>2012-10-05 12:36:12 -0700</date>
            <delta_ts>2012-10-05 12:52:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>37448</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhZGRlNDAyLi5kODM5MzhkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDkt
MjcgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBFeGNs
dXNpb25zXSBBZGQgc3VwcG9ydCBmb3IgcG9seWdvbmFsIHNoYXBlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY4MTEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWZXJpZnkgdGhhdCBhIHJlY3Rhbmd1bGFy
IHNoYXBlLWluc2lkZSBzcGVjaWZpZWQgYXMgYSBwb2x5Z29uIHdvcmtzIGFzIGV4cGVjdGVkIGZv
ciBhbGwgd3JpdGluZy1tb2Rlcy4KKworICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1p
bnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBv
bHlnb24tcmVjdGFuZ2xlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTEwLTA1ICBKZXIgTm9ibGUgIDxq
ZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMjk0NzgtcjEyOTQ4
MCk6IGh0dHAvdGVzdHMvbG9hZGluZy90ZXh0LWNvbnRlbnQtdHlwZS13aXRoLWJpbmFyeS1leHRl
bnNpb24uaHRtbCBmYWlsaW5nIG9uIEFwcGxlIE1vdW50YWluTGlvbiBEZWJ1ZyBXSzIgKFRlc3Rz
KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9z
aGFwZS1pbnNpZGUtcG9seWdvbi1yZWN0YW5nbGUtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVjdGFu
Z2xlLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVi
NDhiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFw
ZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLWV4cGVjdGVkLmh0bWwKQEAg
LTAsMCArMSw0OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgor
ICAgICNzaGFwZS1pbnNpZGUtaG9yaXpvbnRhbCB7CisgICAgICAgIHBhZGRpbmc6IDIwcHggMzVw
eCAyNXB4IDE1cHg7CisgICAgICAgIHdpZHRoOiAxNTBweDsKKyAgICAgICAgaGVpZ2h0OiAxNzVw
eDsKKyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKyAgICAjc2hhcGUtaW5zaWRl
LXZlcnRpY2FsLWxyIHsKKyAgICAgICAgcGFkZGluZzogMjBweCAzNXB4IDI1cHggMTVweDsKKyAg
ICAgICAgd2lkdGg6IDE1MHB4OworICAgICAgICBoZWlnaHQ6IDE3NXB4OworICAgICAgICAtd2Vi
a2l0LXdyaXRpbmctbW9kZTogdmVydGljYWwtbHI7CisgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2
ZTsKKyAgICB9CisgICAgI3NoYXBlLWluc2lkZS12ZXJ0aWNhbC1ybCB7CisgICAgICAgIHBhZGRp
bmc6IDIwcHggMzVweCAyNXB4IDE1cHg7CisgICAgICAgIHdpZHRoOiAxNTBweDsKKyAgICAgICAg
aGVpZ2h0OiAxNzVweDsKKyAgICAgICAgLXdlYmtpdC13cml0aW5nLW1vZGU6IHZlcnRpY2FsLXJs
OworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgfQorICAgICNib3JkZXIgeworICAg
ICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIHRvcDogMTNweDsKKyAgICAgICAgbGVm
dDogMThweDsKKyAgICAgICAgd2lkdGg6IDE1MHB4OworICAgICAgICBoZWlnaHQ6IDE3NXB4Owor
ICAgICAgICBib3JkZXI6IDJweCBzb2xpZCBibHVlOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+
Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJzaGFwZS1pbnNpZGUtaG9yaXpvbnRhbCI+CisgICAgICAg
IDxkaXYgaWQ9ImJvcmRlciI+PC9kaXY+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgY29u
dGFpbmVkIGJ5IHRoZSBibHVlIHNxdWFyZS4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJzaGFw
ZS1pbnNpZGUtdmVydGljYWwtbHIiPgorICAgICAgICA8ZGl2IGlkPSJib3JkZXIiPjwvZGl2Pgor
ICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGNvbnRhaW5lZCBieSB0aGUgYmx1ZSBzcXVhcmUu
CisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0ic2hhcGUtaW5zaWRlLXZlcnRpY2FsLXJsIj4KKyAg
ICAgICAgPGRpdiBpZD0iYm9yZGVyIj48L2Rpdj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBi
ZSBjb250YWluZWQgYnkgdGhlIGJsdWUgc3F1YXJlLgorICAgIDwvZGl2PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lk
ZS9zaGFwZS1pbnNpZGUtcG9seWdvbi1yZWN0YW5nbGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5YWJlMAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUt
aW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLmh0bWwKQEAgLTAsMCArMSw1MyBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICBpZiAod2luZG93LmludGVybmFs
cykKKyAgICAgICAgd2luZG93LmludGVybmFscy5zZXR0aW5ncy5zZXRDU1NFeGNsdXNpb25zRW5h
YmxlZCh0cnVlKTsKKzwvc2NyaXB0PgorPHN0eWxlPgorICAgICNzaGFwZS1pbnNpZGUtaG9yaXpv
bnRhbCB7CisgICAgICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgaGVpZ2h0OiAyMjBweDsKKyAg
ICAgICAgLXdlYmtpdC1zaGFwZS1pbnNpZGU6IHBvbHlnb24oMTVweCAyMHB4LCAxNjVweCAyMHB4
LCAxNjVweCAxOTVweCwgMTVweCAxOTVweCk7CisgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
KyAgICB9CisgICAgI3NoYXBlLWluc2lkZS12ZXJ0aWNhbC1sciB7CisgICAgICAgIHdpZHRoOiAy
MDBweDsKKyAgICAgICAgaGVpZ2h0OiAyMjBweDsKKyAgICAgICAgLXdlYmtpdC1zaGFwZS1pbnNp
ZGU6IHBvbHlnb24oMTVweCAyMHB4LCAxNjVweCAyMHB4LCAxNjVweCAxOTVweCwgMTVweCAxOTVw
eCk7CisgICAgICAgIC13ZWJraXQtd3JpdGluZy1tb2RlOiB2ZXJ0aWNhbC1scjsKKyAgICAgICAg
cG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKyAgICAjc2hhcGUtaW5zaWRlLXZlcnRpY2FsLXJs
IHsKKyAgICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgICBoZWlnaHQ6IDIyMHB4OworICAgICAg
ICAtd2Via2l0LXNoYXBlLWluc2lkZTogcG9seWdvbigxNXB4IDIwcHgsIDE2NXB4IDIwcHgsIDE2
NXB4IDE5NXB4LCAxNXB4IDE5NXB4KTsKKyAgICAgICAgLXdlYmtpdC13cml0aW5nLW1vZGU6IHZl
cnRpY2FsLXJsOworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgfQorICAgICNib3Jk
ZXIgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIHRvcDogMTNweDsKKyAg
ICAgICAgbGVmdDogMThweDsKKyAgICAgICAgd2lkdGg6IDE1MHB4OworICAgICAgICBoZWlnaHQ6
IDE3NXB4OworICAgICAgICBib3JkZXI6IDJweCBzb2xpZCBibHVlOworICAgIH0KKzwvc3R5bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJzaGFwZS1pbnNpZGUtaG9yaXpvbnRhbCI+
CisgICAgICAgIDxkaXYgaWQ9ImJvcmRlciI+PC9kaXY+CisgICAgICAgIFRoaXMgdGV4dCBzaG91
bGQgYmUgY29udGFpbmVkIGJ5IHRoZSBibHVlIHNxdWFyZS4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2
IGlkPSJzaGFwZS1pbnNpZGUtdmVydGljYWwtbHIiPgorICAgICAgICA8ZGl2IGlkPSJib3JkZXIi
PjwvZGl2PgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGNvbnRhaW5lZCBieSB0aGUgYmx1
ZSBzcXVhcmUuCisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0ic2hhcGUtaW5zaWRlLXZlcnRpY2Fs
LXJsIj4KKyAgICAgICAgPGRpdiBpZD0iYm9yZGVyIj48L2Rpdj4KKyAgICAgICAgVGhpcyB0ZXh0
IHNob3VsZCBiZSBjb250YWluZWQgYnkgdGhlIGJsdWUgc3F1YXJlLgorICAgIDwvZGl2PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAyZDJjOTNlLi4wMjJjMmYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjAzNyw2ICsyMDM3LDcgQEAgU0VUKFdlYkNvcmVfU09V
UkNFUwogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAKICAgICByZW5kZXJpbmcvRWxsaXBz
aXNCb3guY3BwCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcAorICAgIHJlbmRl
cmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5n
bGUuY3BwCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcAogICAgIHJlbmRlcmluZy9F
eGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY0NTI1YS4uNTZhOGIz
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTA5LTI3ICBIYW5zIE11bGxlciAg
PGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgRXhjbHVzaW9uc10gQWRkIHN1cHBv
cnQgZm9yIHBvbHlnb25hbCBzaGFwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk2ODExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5pdGlhbCB2ZXJzaW9uIG9mIHRoZSBsYXlvdXQgc3VwcG9ydCBmb3Ig
cG9seWdvbmFsIGV4Y2x1c2lvbiBzaGFwZXM6IHRoZSBFeGNsdXNpb25Qb2x5Z29uIGNsYXNzLgor
ICAgICAgICBTdXBwb3J0cyB0aGUgcHVibGljIEV4Y2x1c2lvblNoYXBlIG9wZXJhdGlvbnMgdXNp
bmcgdGhlIGFsZ29yaXRobSBkZXNjcmliZWQgaGVyZToKKyAgICAgICAgaHR0cDovL2hhbnNtdWxs
ZXItd2Via2l0LmJsb2dzcG90LmNvbS8yMDEyLzA2L2hvcml6b250YWwtYm94LXBvbHlnb24taW50
ZXJzZWN0aW9uLWZvci5odG1sLgorICAgICAgICBBbHRob3VnaCBib3RoIHRoZSAiaW5jbHVkZWQi
IGFuZCAiZXhjbHVkZWQiIG9wZXJhdGlvbnMgYXJlIHN1cHBvcnRlZCwgb25seSB0aGUgZm9ybWVy
IGlzCisgICAgICAgIHVzZWQsIHNpbmNlIG9ubHkgc2hhcGUtaW5zaWRlIGlzIHN1cHBvcnRlZCBh
dCB0aGUgbW9tZW50LgorCisgICAgICAgIFBvbHlnb24gZWRnZXMgYXJlIHJlcHJlc2VudGVkIGJ5
IHRoZSBFeGNsdXNpb25Qb2x5Z29uRWRnZSBjbGFzcywgd2hpY2ggcmVjb3JkcyB0aGUgaW5kaWNl
cyBvZgorICAgICAgICB0aGUgcGFpciBvZiB2ZXJ0aWNlcyBqb2luZWQgYnkgdGhlIGVkZ2UuCisK
KyAgICAgICAgVGhlIEV4Y2x1c2lvblBvbHlnb24gY2xhc3Mgc3RvcmVzIHRoZSBwb2x5Z29uJ3Mg
ZWRnZXMgaW4gYW4gaW50ZXJ2YWwgdHJlZS4KKworICAgICAgICBBbHRob3VnaCB0aGUgaW1wbGVt
ZW50YXRpb24gc3VwcG9ydHMgY29tcGxleCBwb2x5Z29ucywgdGhlIGxheW91dCBjb2RlIGlzIGxp
bWl0ZWQgdG8KKyAgICAgICAgZXNzZW50aWFsbHkgcmVjdGFuZ3VsYXIgc2hhcGVzIHVudGlsIGEg
cGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjgxMwor
ICAgICAgICBsYW5kcy4KKworICAgICAgICBUZXN0OiBmYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5z
aWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3RhbmdsZS5odG1sCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRh
cmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFZGdlSW50ZXJzZWN0aW9uKTogSW50ZXJu
YWwgZGVzY3JpcHRpb24gb2YgdGhlIGludGVyc2VjdGlvbiBvZiBhIHBvbHlnb24gZWRnZSBhbmQg
YSBob3Jpem9udGFsIGxpbmUuCisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpF
eGNsdXNpb25Qb2x5Z29uKTogU2VlIHRoZSBpbnRyb2R1Y3RvcnkgdGV4dCBhYm92ZSBmb3IgYSBk
ZXNjcmlwdGlvbiBvZiB0aGlzIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVy
c2VjdGlvbik6IEZpbmQgYW5kIGNsYXNzaWZ5IHRoZSBYIGludGVyY2VwdCBvZiBhIHBvbHlnb24g
ZWRnZSB3aXRoIGhvcml6b250YWwgbGluZSwgaWYgYW55LgorICAgICAgICAoV2ViQ29yZTo6RXhj
bHVzaW9uUG9seWdvbjo6cmlnaHRWZXJ0ZXhZKTogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkZWNp
ZGUgaWYgYSBob3Jpem9udGFsIGxpbmUgImNyb3NzZXMiIGEgdmVydGV4LgorICAgICAgICAoV2Vi
Q29yZTo6YXBwZW5kSW50ZXJ2YWxYKTogQXBwZW5kIGFuIHggY29vcmRpbmF0ZSB0byBhIHZlY3Rv
ciBvZiBFeGNsdXNpb25JbnRlcnZhbHMuCisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5
Z29uOjpjb21wdXRlWEludGVyc2VjdGlvbnMpOiBSZXR1cm4gYSB2ZWN0b3Igb2YgdGhlIGludGVy
c2VjdGlvbnMgb2YgYSBob3Jpem9udGFsIGxpbmUgd2l0aCB0aGUgcG9seWdvbidzIGVkZ2VzLgor
ICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZUVkZ2VJbnRlcnNlY3Rp
b25zKTogUmV0dXJuIGEgdmVjdG9yIG9mIHRoZSBYIHByb2plY3Rpb25zIG9mIHRoZSBlZGdlcyB0
aGF0IG92ZXJsYXAgYSBob3Jpem9uYWwgcmVjdGFuZ2xlLgorICAgICAgICAoV2ViQ29yZTo6RXhj
bHVzaW9uUG9seWdvbjo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMpOiBSZXR1cm4gYSBTZWdtZW50TGlz
dCBvZiB0aGUgWCBpbnRlcnZhbHMgd2l0aGluIGEgaG9yaXpvbnRhbCByZWN0YW5nbGUgdGhhdCBv
dmVybGFwIHRoZSBwb2x5Z29uLgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6
Z2V0SW5jbHVkZWRJbnRlcnZhbHMpOiBSZXR1cm4gdGhlIFggaW50ZXJ2YWxzIHdpdGhpbiBhIGhv
cml6b250YWwgcmVjdGFuZ2xlIHRoYXQgZml0IGluc2lkZSB0aGUgcG9seWdvbi4KKyAgICAgICAg
KiByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRXhjbHVzaW9uUG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNp
b25Qb2x5Z29uOjpnZXRYQXQpOiBYIGNvb3JkaW5hdGUgb2YgYSBwb2x5Z29uIHZlcnRleAorICAg
ICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Z2V0WUF0KTogWSBjb29yZGluYXRlIG9m
IGEgcG9seWdvbiB2ZXJ0ZXgKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246Om51
bWJlck9mVmVydGljZXMpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Zmls
bFJ1bGUpOiBBIFdpbmRSdWxlIHZhbHVlIHRoYXQgZGVmaW5lcyAiaW5zaWRlIiBmb3Igc2VsZi1p
bnRlcnNlY3RpbmcgcG9seWdvbnMuCisgICAgICAgIChFeGNsdXNpb25Qb2x5Z29uRWRnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uRWRnZTo6RXhjbHVzaW9uUG9seWdvbkVk
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2U6OngxKTogWCBjb29y
ZGluYXRlIG9mIHRoZSBlZGdlcyAxc3QgdmVydGV4CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNp
b25Qb2x5Z29uRWRnZTo6eTEpOiBZIGNvb3JkaW5hdGUgb2YgdGhlIGVkZ2VzIDFzdCB2ZXJ0ZXgK
KyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjp4Mik6IFggY29vcmRpbmF0
ZSBvZiB0aGUgZWRnZXMgMm5kIHZlcnRleAorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9s
eWdvbkVkZ2U6OnkyKTogWSBjb29yZGluYXRlIG9mIHRoZSBlZGdlcyAybmQgdmVydGV4CisgICAg
ICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uRWRnZTo6bWluWCk6CisgICAgICAgIChXZWJD
b3JlOjpFeGNsdXNpb25Qb2x5Z29uRWRnZTo6bWluWSk6CisgICAgICAgIChXZWJDb3JlOjpFeGNs
dXNpb25Qb2x5Z29uRWRnZTo6bWF4WCk6CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5
Z29uRWRnZTo6bWF4WSk6CisgICAgICAgICogcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUV4Y2x1c2lvblBvbHlnb24pOiBSZXR1cm4gYSBuZXcg
RXhjbHVzaW9uUG9seWdvbi4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RXhjbHVzaW9uU2hhcGU6OmNyZWF0ZUV4Y2x1c2lvblNoYXBlKTogQWRkZWQgc3VwcG9ydCBmb3Ig
QmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUE9MWUdPTi4KKyAgICAgICAgKiByZW5kZXJpbmcvRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbzo6aXNFeGNsdXNpb25TaGFwZUluc2lkZUluZm9FbmFibGVkRm9yUmVuZGVy
QmxvY2spOiBFbmFibGUgQkFTSUNfU0hBUEVfUE9MWUdPTiBzaGFwZXMgZm9yIFJlbmRlckJsb2Nr
cy4KKwogMjAxMi0xMC0wNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBObyBhdXRvcmVsZWFzZSBwb29sIGluIHBsYWNlLCBjYXVzaW5nIGJ1aWxkdXAgb2YgYXV0
b3JlbGVhc2VkIG9iamVjdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAxZTk3
YjU3Li4yNTRkYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ5MTIsNiAr
NDkxMiw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0VsbGlwc2lzQm94LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRl
cnZhbC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMDc4YjY5YS4uODlhMjUxZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCkBAIC0xMTA3LDYgKzExMDcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICByZW5k
ZXJpbmcvQ291bnRlck5vZGUuY3BwIFwKICAgICByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwIFwK
ICAgICByZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIFwKKyAgICByZW5kZXJpbmcvRXhj
bHVzaW9uUG9seWdvbi5jcHAgXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3Bw
IFwKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwIFwKICAgICByZW5kZXJpbmcvRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBcCkBAIC0yMjk4LDYgKzIyOTksNyBAQCBIRUFERVJT
ICs9IFwKICAgICByZW5kZXJpbmcvQ291bnRlck5vZGUuaCBcCiAgICAgcmVuZGVyaW5nL0VsbGlw
c2lzQm94LmggXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5oIFwKKyAgICByZW5k
ZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oIFwKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFu
Z2xlLmggXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oIFwKICAgICByZW5kZXJpbmcv
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGQxMjFiN2Qu
LjEwYjg2ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTMyODcsNiArMzI4Nyw4IEBACiAgICAgICAg
ICAgICAncmVuZGVyaW5nL0VsbGlwc2lzQm94LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9F
eGNsdXNpb25JbnRlcnZhbC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9FeGNsdXNpb25J
bnRlcnZhbC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAn
LAorICAgICAgICAgICAgJ3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagppbmRleCBlZjJhYWYwLi4wZDZiZTY3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzgzNjMsNiArMzgzNjMsMTQgQEAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9G
aWxlPgogICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5j
cHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lv
blBvbHlnb24uaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAg
ICAgICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdc
RXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PgogICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGNiN2JkNjUuLjA1MDcyZjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTE4MzcsNiArMTgzNyw4IEBACiAJCTZFODc5OEJEMTVGODFFNEEwMEJGRTRBQSAvKiBF
eGNsdXNpb25SZWN0YW5nbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFODc5OEI3MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUu
aCAqLzsgfTsKIAkJNkU4Nzk4QkUxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI4
MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi87IH07CiAJCTZFODc5OEJG
MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4QjkxNUY4MUU0QTAwQkZFNEFBIC8qIEV4
Y2x1c2lvblNoYXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNkVBRjM0MEYxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVBRjM0MEQx
NjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwICovOyB9OworCQk2RUFGMzQx
MDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVBRjM0MEUxNjEzODY5QTAwODU5NjI1IC8q
IEV4Y2x1c2lvblBvbHlnb24uaCAqLzsgfTsKIAkJNkVCQzVFQUYxMzhCNTBGMjAwQTBDRjhBIC8q
IEpTRmxvYXQ2NEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFQkM1RUFEMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAg
Ki87IH07CiAJCTZFQkM1RUIwMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCQzVFQUUxMzhC
NTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi87IH07CiAJCTZFQkYwRTQ4MTJBODky
NjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCRjBFNDUxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1Rl
eHR1cmVGbG9hdC5jcHAgKi87IH07CkBAIC05MDMyLDYgKzkwMzQsOCBAQAogCQk2RTg3OThCNzE1
RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblJlY3RhbmdsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RTg3OThCODE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uU2hhcGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTg3OThCOTE1RjgxRTRBMDBCRkU0QUEg
LyogRXhjbHVzaW9uU2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhj
bHVzaW9uU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBRjM0MEQxNjEz
ODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uUG9seWdvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTZFQUYzNDBFMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblBvbHlnb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCQzVEODAxMzhCNEM0RTAwQTBDRjhBIC8q
IEZsb2F0NjRBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRmxvYXQ2NEFycmF5Lmlk
bDsgcGF0aCA9IGNhbnZhcy9GbG9hdDY0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RUJDNUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyog
SlNGbG9hdDY0QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9h
dDY0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMzEyLDYgKzIxMzE2
LDggQEAKIAkJCQlBOENGRjZCRDBBMTU2MTE4MDAwQTQyMzQgLyogRWxsaXBzaXNCb3guaCAqLywK
IAkJCQk2RTg3OThCNDE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuY3BwICov
LAogCQkJCTZFODc5OEI1MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5oICov
LAorCQkJCTZFQUYzNDBEMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCAq
LywKKwkJCQk2RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oICov
LAogCQkJCTZFODc5OEI2MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuY3Bw
ICovLAogCQkJCTZFODc5OEI3MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUu
aCAqLywKIAkJCQk2RTg3OThCODE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3Bw
ICovLApAQCAtMjU1MzcsNiArMjU1NDMsNyBAQAogCQkJCTkzMUNCRDBEMTYxQTQ0RTkwMEU0Qzg3
NCAvKiBTY3JvbGxpbmdTdGF0ZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMUNCRDBGMTYx
QTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzMUNCRDExMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZVRyZWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTZFQUYzNDEwMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNp
b25Qb2x5Z29uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI4NjM0LDYgKzI4NjQxLDcgQEAKIAkJCQk5
MzFDQkQwRTE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMUNCRDEwMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxp
bmdTdGF0ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMxQ0JEMTMxNjFBNDRGODAwRTRD
ODc0IC8qIFNjcm9sbGluZ1N0YXRlTm9kZU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTZFQUYz
NDBGMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNDcwZTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKQEAgLTAsMCAr
MSwzMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAq
IENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhjbHVzaW9u
UG9seWdvbi5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitlbnVtIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHsKKyAgICBOb3JtYWwsCisgICAg
VmVydGV4TWluWSwKKyAgICBWZXJ0ZXhNYXhZLAorICAgIFZlcnRleFlCb3RoCit9OworCitzdHJ1
Y3QgRWRnZUludGVyc2VjdGlvbiB7CisgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVk
Z2U7CisgICAgRmxvYXRQb2ludCBwb2ludDsKKyAgICBFZGdlSW50ZXJzZWN0aW9uVHlwZSB0eXBl
OworfTsKKworc3RhdGljIGJvb2wgY29tcGFyZUVkZ2VNaW5ZKGNvbnN0IEV4Y2x1c2lvblBvbHln
b25FZGdlKiBlMSwgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGUyKQoreworICAgIHJldHVy
biBlMS0+bWluWSgpIDwgZTItPm1pblkoKTsKK30KKworRXhjbHVzaW9uUG9seWdvbjo6RXhjbHVz
aW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBXaW5k
UnVsZSBmaWxsUnVsZSkKKyAgICA6IEV4Y2x1c2lvblNoYXBlKCkKKyAgICAsIG1fdmVydGljZXMo
dmVydGljZXMpCisgICAgLCBtX2ZpbGxSdWxlKGZpbGxSdWxlKQoreworICAgIC8vIEZJWE1FOiBI
YW5kbGUgcG9seWdvbnMgZGVmaW5lZCB3aXRoIGxlc3MgdGhhbiAzIG5vbi1jb2xpbmVhciB2ZXJ0
aWNlcy4KKworICAgIHVuc2lnbmVkIG5WZXJ0aWNlcyA9IG51bWJlck9mVmVydGljZXMoKTsKKyAg
ICBtX2VkZ2VzLnJlc2l6ZShuVmVydGljZXMpOworICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29u
RWRnZSo+IHNvcnRlZEVkZ2VzTWluWShuVmVydGljZXMpOworCisgICAgY29uc3QgRmxvYXRQb2lu
dCYgdmVydGV4MCA9IHZlcnRleEF0KDApOworICAgIGZsb2F0IG1pblggPSB2ZXJ0ZXgwLngoKTsK
KyAgICBmbG9hdCBtaW5ZID0gdmVydGV4MC55KCk7CisgICAgZmxvYXQgbWF4WCA9IG1pblg7Cisg
ICAgZmxvYXQgbWF4WSA9IG1pblk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgblZl
cnRpY2VzOyBpKyspIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4ID0gdmVydGV4
QXQoaSk7CisgICAgICAgIGZsb2F0IHggPSB2ZXJ0ZXgueCgpOworICAgICAgICBmbG9hdCB5ID0g
dmVydGV4LnkoKTsKKworICAgICAgICBtaW5YID0gc3RkOjptaW4oeCwgbWluWCk7CisgICAgICAg
IG1heFggPSBzdGQ6Om1heCh4LCBtYXhYKTsKKyAgICAgICAgbWluWSA9IHN0ZDo6bWluKHksIG1p
blkpOworICAgICAgICBtYXhZID0gc3RkOjptYXgoeSwgbWF4WSk7CisKKyAgICAgICAgbV9lZGdl
c1tpXS5wb2x5Z29uID0gdGhpczsKKyAgICAgICAgbV9lZGdlc1tpXS5pbmRleDEgPSBpOworICAg
ICAgICBtX2VkZ2VzW2ldLmluZGV4MiA9IChpICsgMSkgJSBuVmVydGljZXM7CisKKyAgICAgICAg
c29ydGVkRWRnZXNNaW5ZW2ldID0gJm1fZWRnZXNbaV07CisgICAgfQorCisgICAgbV9ib3VuZGlu
Z0JveC5zZXRYKG1pblgpOworICAgIG1fYm91bmRpbmdCb3guc2V0WShtaW5ZKTsKKyAgICBtX2Jv
dW5kaW5nQm94LnNldFdpZHRoKG1heFggLSBtaW5YKTsKKyAgICBtX2JvdW5kaW5nQm94LnNldEhl
aWdodChtYXhZIC0gbWluWSk7CisKKyAgICBzdGQ6OnNvcnQoc29ydGVkRWRnZXNNaW5ZLmJlZ2lu
KCksIHNvcnRlZEVkZ2VzTWluWS5lbmQoKSwgV2ViQ29yZTo6Y29tcGFyZUVkZ2VNaW5ZKTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VkZ2VzLnNpemUoKTsgaSsrKSB7CisgICAg
ICAgIEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdlID0gJm1fZWRnZXNbaV07CisgICAgICAgIG1f
ZWRnZVRyZWUuYWRkKEVkZ2VJbnRlcnZhbChlZGdlLT5taW5ZKCksIGVkZ2UtPm1heFkoKSwgZWRn
ZSkpOworICAgIH0KK30KKworc3RhdGljIGJvb2wgY29tcHV0ZVhJbnRlcnNlY3Rpb24oY29uc3Qg
RXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2VQb2ludGVyLCBmbG9hdCB5LCBFZGdlSW50ZXJzZWN0
aW9uJiByZXN1bHQpCit7CisgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIGVkZ2UgPSAq
ZWRnZVBvaW50ZXI7CisKKyAgICBpZiAoZWRnZS5taW5ZKCkgPiB5IHx8IGVkZ2UubWF4WSgpIDwg
eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmxvYXQgeDEgPSBlZGdlLnZlcnRleDEo
KS54KCk7CisgICAgZmxvYXQgeTEgPSBlZGdlLnZlcnRleDEoKS55KCk7CisgICAgZmxvYXQgeDIg
PSBlZGdlLnZlcnRleDIoKS54KCk7CisgICAgZmxvYXQgeTIgPSBlZGdlLnZlcnRleDIoKS55KCk7
CisgICAgZmxvYXQgZHkgPSB5MiAtIHkxOworCisgICAgZmxvYXQgaW50ZXJzZWN0aW9uWDsKKyAg
ICBFZGdlSW50ZXJzZWN0aW9uVHlwZSBpbnRlcnNlY3Rpb25UeXBlOworCisgICAgaWYgKCFkeSkg
eworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4WUJvdGg7CisgICAgICAgIGludGVy
c2VjdGlvblggPSBlZGdlLm1pblgoKTsKKyAgICB9IGVsc2UgaWYgKHkgPT0gZWRnZS5taW5ZKCkp
IHsKKyAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleE1pblk7CisgICAgICAgIGludGVy
c2VjdGlvblggPSAoeTEgPCB5MikgPyB4MSA6IHgyOworICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdl
Lm1heFkoKSkgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4TWF4WTsKKyAgICAg
ICAgaW50ZXJzZWN0aW9uWCAgPSAoeTEgPiB5MikgPyB4MSA6IHgyOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBOb3JtYWw7CisgICAgICAgIGludGVyc2VjdGlvblgg
PSAoKHkgLSB5MSkgKiAoeDIgLSB4MSkgLyBkeSkgKyB4MTsKKyAgICB9CisKKyAgICByZXN1bHQu
ZWRnZSA9IGVkZ2VQb2ludGVyOworICAgIHJlc3VsdC50eXBlID0gaW50ZXJzZWN0aW9uVHlwZTsK
KyAgICByZXN1bHQucG9pbnQuc2V0KGludGVyc2VjdGlvblgsIHkpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Zsb2F0IEV4Y2x1c2lvblBvbHlnb246OnJpZ2h0VmVydGV4WSh1bnNpZ25lZCBp
bmRleCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBuVmVydGljZXMgPSBudW1iZXJPZlZlcnRpY2Vz
KCk7CisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IHZlcnRleEF0KChpbmRleCArIDEp
ICUgblZlcnRpY2VzKTsKKyAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyID0gdmVydGV4QXQo
KGluZGV4IC0gMSkgJSBuVmVydGljZXMpOworCisgICAgaWYgKHZlcnRleDEueCgpID09IHZlcnRl
eDIueCgpKQorICAgICAgICByZXR1cm4gdmVydGV4MS55KCkgPiB2ZXJ0ZXgyLnkoKSA/IHZlcnRl
eDEueSgpIDogdmVydGV4Mi55KCk7CisgICAgcmV0dXJuIHZlcnRleDEueCgpID4gdmVydGV4Mi54
KCkgPyB2ZXJ0ZXgxLnkoKSA6IHZlcnRleDIueSgpOworfQorCitzdGF0aWMgYm9vbCBhcHBlbmRJ
bnRlcnZhbFgoZmxvYXQgeCwgYm9vbCBpbnNpZGUsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4m
IHJlc3VsdCkKK3sKKyAgICBpZiAoIWluc2lkZSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChFeGNs
dXNpb25JbnRlcnZhbCh4KSk7CisgICAgZWxzZQorICAgICAgICByZXN1bHRbcmVzdWx0LnNpemUo
KSAtIDFdLngyID0geDsKKworICAgIHJldHVybiAhaW5zaWRlOworfQorCitzdGF0aWMgYm9vbCBj
b21wYXJlRWRnZUludGVyc2VjdGlvblgoY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0
aW9uMSwgY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9uMikKK3sKKyAgICBmbG9h
dCB4MSA9IGludGVyc2VjdGlvbjEucG9pbnQueCgpOworICAgIGZsb2F0IHgyID0gaW50ZXJzZWN0
aW9uMi5wb2ludC54KCk7CisgICAgcmV0dXJuICh4MSA9PSB4MikgPyBpbnRlcnNlY3Rpb24xLnR5
cGUgPCBpbnRlcnNlY3Rpb24yLnR5cGUgOiB4MSA8IHgyOworfQorCit2b2lkIEV4Y2x1c2lvblBv
bHlnb246OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb246OkVk
Z2VJbnRlcnZhbD4gb3ZlcmxhcHBpbmdFZGdlczsKKyAgICBtX2VkZ2VUcmVlLmFsbE92ZXJsYXBz
KEV4Y2x1c2lvblBvbHlnb246OkVkZ2VJbnRlcnZhbCh5LCB5LCAwKSwgb3ZlcmxhcHBpbmdFZGdl
cyk7CisKKyAgICBWZWN0b3I8RWRnZUludGVyc2VjdGlvbj4gaW50ZXJzZWN0aW9uczsKKyAgICBF
ZGdlSW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgb3ZlcmxhcHBpbmdFZGdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBFeGNsdXNpb25Qb2x5
Z29uRWRnZSogZWRnZSA9IHN0YXRpY19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3Zlcmxh
cHBpbmdFZGdlc1tpXS5kYXRhKCkpOworICAgICAgICBpZiAoY29tcHV0ZVhJbnRlcnNlY3Rpb24o
ZWRnZSwgeSwgaW50ZXJzZWN0aW9uKSkKKyAgICAgICAgICAgIGludGVyc2VjdGlvbnMuYXBwZW5k
KGludGVyc2VjdGlvbik7CisgICAgfQorICAgIGlmIChpbnRlcnNlY3Rpb25zLnNpemUoKSA8IDIp
CisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6c29ydChpbnRlcnNlY3Rpb25zLmJlZ2luKCks
IGludGVyc2VjdGlvbnMuZW5kKCksIFdlYkNvcmU6OmNvbXBhcmVFZGdlSW50ZXJzZWN0aW9uWCk7
CisKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgaW50IHdpbmRDb3VudCA9IDA7CisgICAg
Ym9vbCBpbnNpZGUgPSBmYWxzZTsKKworICAgIHdoaWxlIChpbmRleCA8IGludGVyc2VjdGlvbnMu
c2l6ZSgpKSB7CisgICAgICAgIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIHRoaXNJbnRlcnNlY3Rp
b24gPSBpbnRlcnNlY3Rpb25zW2luZGV4XTsKKworICAgICAgICBpZiAoaW5kZXggKyAxIDwgaW50
ZXJzZWN0aW9ucy5zaXplKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24m
IG5leHRJbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb25zW2luZGV4ICsxXTsKKyAgICAgICAgICAg
IGlmICgodGhpc0ludGVyc2VjdGlvbi5wb2ludC54KCkgPT0gbmV4dEludGVyc2VjdGlvbi5wb2lu
dC54KCkpICYmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSB8fCB0aGlzSW50
ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhp
c0ludGVyc2VjdGlvbi50eXBlID09IG5leHRJbnRlcnNlY3Rpb24udHlwZSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBTa2lwIHBhaXJzIG9mIGludGVyc2VjdGlvbnMgd2hvc2UgdHlwZXMgYXJl
IFZlcnRleE1heFksVmVydGV4TWF4WSBhbmQgVmVydGV4TWluWSxWZXJ0ZXhNaW5ZLgorICAgICAg
ICAgICAgICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgcGFpcnMgb2YgaW50ZXJzZWN0aW9ucyB3aG9zZSB0
eXBlcyBhcmUgVmVydGV4TWluWSxWZXJ0ZXhNYXhZIG9yIFZlcnRleE1heFksVmVydGV4TWluWSB3
aXRoIG9uZSBWZXJ0ZXhNaW5ZIGludGVyc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5leHRJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNYXhZKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaW50ZXJzZWN0aW9uc1tpbmRleCArIDFdID0gdGhpc0ludGVyc2VjdGlvbjsKKyAgICAg
ICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBF
eGNsdXNpb25Qb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqdGhpc0ludGVyc2VjdGlvbi5lZGdlOwor
ICAgICAgICBib29sIGNyb3NzaW5nID0gIXdpbmRDb3VudDsKKworICAgICAgICBpZiAoZmlsbFJ1
bGUoKSA9PSBSVUxFX0VWRU5PREQpIHsKKyAgICAgICAgICAgIHdpbmRDb3VudCArPSAodGhpc0Vk
Z2UudmVydGV4MigpLnkoKSA+IHRoaXNFZGdlLnZlcnRleDEoKS55KCkpID8gKzEgOiAtMTsKKyAg
ICAgICAgICAgIGNyb3NzaW5nID0gY3Jvc3NpbmcgfHwgIXdpbmRDb3VudDsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICgodGhpc0ludGVyc2VjdGlvbi50eXBlID09IE5vcm1hbCkgfHwgKHRoaXNJ
bnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZKSkgeworICAgICAgICAgICAgaWYgKGNyb3Nz
aW5nKQorICAgICAgICAgICAgICAgIGluc2lkZSA9IGFwcGVuZEludGVydmFsWCh0aGlzSW50ZXJz
ZWN0aW9uLnBvaW50LngoKSwgaW5zaWRlLCByZXN1bHQpOworICAgICAgICB9IGVsc2UgaWYgKHRo
aXNJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNYXhZKSB7CisgICAgICAgICAgICBpbnQgdmVy
dGV4SW5kZXggPSAodGhpc0VkZ2UudmVydGV4MigpLnkoKSA+IHRoaXNFZGdlLnZlcnRleDEoKS55
KCkpID8gdGhpc0VkZ2UuaW5kZXgyIDogdGhpc0VkZ2UuaW5kZXgxOworICAgICAgICAgICAgaWYg
KGNyb3NzaW5nICYmIHJpZ2h0VmVydGV4WSh2ZXJ0ZXhJbmRleCkgPiB5KQorICAgICAgICAgICAg
ICAgIGluc2lkZSA9IGFwcGVuZEludGVydmFsWCh0aGlzRWRnZS5tYXhYKCksIGluc2lkZSwgcmVz
dWx0KTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4
WUJvdGgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEV4Y2x1c2lvbkludGVydmFsKHRoaXNF
ZGdlLm1pblgoKSwgdGhpc0VkZ2UubWF4WCgpKSk7CisKKyAgICAgICAgaW5kZXgrKzsKKyAgICB9
Cit9CisKKy8vIFJldHVybiB0aGUgWCBwcm9qZWN0aW9ucyBvZiB0aGUgZWRnZXMgdGhhdCBvdmVy
bGFwIHkxLHkyLgordm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpjb21wdXRlRWRnZUludGVyc2VjdGlv
bnMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiByZXN1bHQp
IGNvbnN0Cit7CisgICAgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb246OkVkZ2VJbnRlcnZhbD4gb3Zl
cmxhcHBpbmdFZGdlczsKKyAgICBtX2VkZ2VUcmVlLmFsbE92ZXJsYXBzKEV4Y2x1c2lvblBvbHln
b246OkVkZ2VJbnRlcnZhbCh5MSwgeTIsIDApLCBvdmVybGFwcGluZ0VkZ2VzKTsKKworICAgIEVk
Z2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBvdmVybGFwcGluZ0VkZ2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IEV4Y2x1c2lv
blBvbHlnb25FZGdlICplZGdlID0gc3RhdGljX2Nhc3Q8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPihv
dmVybGFwcGluZ0VkZ2VzW2ldLmRhdGEoKSk7CisgICAgICAgIGZsb2F0IHgxLCB4MjsKKworICAg
ICAgICBpZiAoZWRnZS0+bWluWSgpIDwgeTEpIHsKKyAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJz
ZWN0aW9uKGVkZ2UsIHkxLCBpbnRlcnNlY3Rpb24pOworICAgICAgICAgICAgeDEgPSBpbnRlcnNl
Y3Rpb24ucG9pbnQueCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHgxID0gKGVkZ2Ut
PnZlcnRleDEoKS55KCkgPCBlZGdlLT52ZXJ0ZXgyKCkueSgpKSA/IGVkZ2UtPnZlcnRleDEoKS54
KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOworCisgICAgICAgIGlmIChlZGdlLT5tYXhZKCkgPiB5
MikgeworICAgICAgICAgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRnZSwgeTIsIGludGVyc2Vj
dGlvbik7CisgICAgICAgICAgICB4MiA9IGludGVyc2VjdGlvbi5wb2ludC54KCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgeDIgPSAoZWRnZS0+dmVydGV4MSgpLnkoKSA+IGVkZ2UtPnZl
cnRleDIoKS55KCkpID8gZWRnZS0+dmVydGV4MSgpLngoKSA6IGVkZ2UtPnZlcnRleDIoKS54KCk7
CisKKyAgICAgICAgaWYgKHgxID4geDIpCisgICAgICAgICAgICBzdGQ6OnN3YXAoeDEsIHgyKTsK
KworICAgICAgICByZXN1bHQuYXBwZW5kKEV4Y2x1c2lvbkludGVydmFsKHgxLCB4MikpOworICAg
IH0KKworICAgIHNvcnRFeGNsdXNpb25JbnRlcnZhbHMocmVzdWx0KTsKK30KKwordm9pZCBFeGNs
dXNpb25Qb2x5Z29uOjpnZXRFeGNsdWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9h
dCBsb2dpY2FsQm90dG9tLCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAgIGZsb2F0
IHkxID0gbWluWUZvckxvZ2ljYWxMaW5lKGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOworICAg
IGZsb2F0IHkyID0gbWF4WUZvckxvZ2ljYWxMaW5lKGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20p
OworCisgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVy
dmFsczsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTEsIHkxWEludGVydmFscyk7CisgICAg
Y29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkyLCB5MlhJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiBtZXJnZWRJbnRlcnZhbHM7CisgICAgbWVyZ2VFeGNsdXNpb25JbnRl
cnZhbHMoeTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHMsIG1lcmdlZEludGVydmFscyk7CisKKyAg
ICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7CisgICAgY29tcHV0ZUVk
Z2VJbnRlcnNlY3Rpb25zKHkxLCB5MiwgZWRnZUludGVydmFscyk7CisKKyAgICBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+IGV4Y2x1ZGVkSW50ZXJ2YWxzOworICAgIG1lcmdlRXhjbHVzaW9uSW50
ZXJ2YWxzKG1lcmdlZEludGVydmFscywgZWRnZUludGVydmFscywgZXhjbHVkZWRJbnRlcnZhbHMp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2x1ZGVkSW50ZXJ2YWxzLnNpemUo
KTsgaSsrKSB7CisgICAgICAgIEV4Y2x1c2lvbkludGVydmFsIGludGVydmFsID0gZXhjbHVkZWRJ
bnRlcnZhbHNbaV07CisgICAgICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoaW50ZXJ2YWwu
eDEsIGludGVydmFsLngyKSk7CisgICAgfQorfQorCit2b2lkIEV4Y2x1c2lvblBvbHlnb246Omdl
dEluY2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxCb3R0b20s
IFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgZmxvYXQgeTEgPSBtaW5ZRm9yTG9n
aWNhbExpbmUobG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSk7CisgICAgZmxvYXQgeTIgPSBtYXhZ
Rm9yTG9naWNhbExpbmUobG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSk7CisKKyAgICBWZWN0b3I8
RXhjbHVzaW9uSW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOworICAgIGNvbXB1
dGVYSW50ZXJzZWN0aW9ucyh5MSwgeTFYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2Vj
dGlvbnMoeTIsIHkyWEludGVydmFscyk7CisKKyAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
IGNvbW1vbkludGVydmFsczsKKyAgICBpbnRlcnNlY3RFeGNsdXNpb25JbnRlcnZhbHMoeTFYSW50
ZXJ2YWxzLCB5MlhJbnRlcnZhbHMsIGNvbW1vbkludGVydmFscyk7CisKKyAgICBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7CisgICAgY29tcHV0ZUVkZ2VJbnRlcnNlY3Rp
b25zKHkxLCB5MiwgZWRnZUludGVydmFscyk7CisKKyAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2
YWw+IGluY2x1ZGVkSW50ZXJ2YWxzOworICAgIHN1YnRyYWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNv
bW1vbkludGVydmFscywgZWRnZUludGVydmFscywgaW5jbHVkZWRJbnRlcnZhbHMpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluY2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgaSsrKSB7
CisgICAgICAgIEV4Y2x1c2lvbkludGVydmFsIGludGVydmFsID0gaW5jbHVkZWRJbnRlcnZhbHNb
aV07CisgICAgICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoaW50ZXJ2YWwueDEsIGludGVy
dmFsLngyKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hMTJkMWZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAq
ICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRXhjbHVzaW9uUG9seWdvbl9oCisjZGVmaW5lIEV4Y2x1c2lvblBvbHlnb25faAorCisj
aW5jbHVkZSAiRXhjbHVzaW9uSW50ZXJ2YWwuaCIKKyNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5o
IgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJQT0RJbnRlcnZhbFRyZWUuaCIKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0cnVjdCBFeGNsdXNpb25Qb2x5Z29uRWRnZTsKKworLy8gVGhpcyBjbGFzcyBp
cyB1c2VkIGJ5IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nLgorI2lmbmRlZiBOREVCVUcK
K3RlbXBsYXRlIDxjbGFzcz4gc3RydWN0IFZhbHVlVG9TdHJpbmc7CisjZW5kaWYKKworY2xhc3Mg
RXhjbHVzaW9uUG9seWdvbiA6IHB1YmxpYyBFeGNsdXNpb25TaGFwZSB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRXhjbHVzaW9uUG9seWdvbik7CitwdWJsaWM6CisgICAgRXhjbHVzaW9uUG9s
eWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBXaW5kUnVsZSBm
aWxsUnVsZSk7CisKKyAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXhBdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gKCptX3ZlcnRpY2VzKVtpbmRleF07IH0KKyAgICB1bnNpZ25lZCBu
dW1iZXJPZlZlcnRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNlcy0+c2l6ZSgpOyB9Cisg
ICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGxSdWxlOyB9CisKKyAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBzaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIGludGVybmFsVG9Mb2dpY2FsQm91bmRpbmdCb3gobV9ib3VuZGluZ0JveCk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRv
cCwgZmxvYXQgbG9naWNhbEJvdHRvbSwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxv
YXQgbG9naWNhbEJvdHRvbSwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0
ZToKKyAgICBmbG9hdCByaWdodFZlcnRleFkodW5zaWduZWQpIGNvbnN0OworICAgIHZvaWQgY29t
cHV0ZVhJbnRlcnNlY3Rpb25zKGZsb2F0IHksIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKSBj
b25zdDsKKyAgICB2b2lkIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyhmbG9hdCBtaW5ZLCBmbG9h
dCBtYXhZLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JikgY29uc3Q7CisKKyAgICB0eXBlZGVm
IFBPREludGVydmFsPGZsb2F0LCBFeGNsdXNpb25Qb2x5Z29uRWRnZSo+IEVkZ2VJbnRlcnZhbDsK
KyAgICB0eXBlZGVmIFBPREludGVydmFsVHJlZTxmbG9hdCwgRXhjbHVzaW9uUG9seWdvbkVkZ2Uq
PiBFZGdlSW50ZXJ2YWxUcmVlOworCisgICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IG1f
dmVydGljZXM7CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZTsKKyAgICBGbG9hdFJlY3QgbV9ib3Vu
ZGluZ0JveDsKKyAgICBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2U+IG1fZWRnZXM7CisgICAg
RWRnZUludGVydmFsVHJlZSBtX2VkZ2VUcmVlOworfTsKKworc3RydWN0IEV4Y2x1c2lvblBvbHln
b25FZGdlIHsKKyAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxKCkgY29uc3QgCisgICAgeyAK
KyAgICAgICAgQVNTRVJUKHBvbHlnb24pOyAKKyAgICAgICAgcmV0dXJuIHBvbHlnb24tPnZlcnRl
eEF0KGluZGV4MSk7CisgICAgfQorCisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MigpIGNv
bnN0IAorICAgIHsgCisgICAgICAgIEFTU0VSVChwb2x5Z29uKTsgCisgICAgICAgIHJldHVybiBw
b2x5Z29uLT52ZXJ0ZXhBdChpbmRleDIpOworICAgIH0KKworICAgIGZsb2F0IG1pblgoKSBjb25z
dCB7IHJldHVybiBzdGQ6Om1pbih2ZXJ0ZXgxKCkueCgpLCB2ZXJ0ZXgyKCkueCgpKTsgfQorICAg
IGZsb2F0IG1pblkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1pbih2ZXJ0ZXgxKCkueSgpLCB2ZXJ0
ZXgyKCkueSgpKTsgfQorICAgIGZsb2F0IG1heFgoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1heCh2
ZXJ0ZXgxKCkueCgpLCB2ZXJ0ZXgyKCkueCgpKTsgfQorICAgIGZsb2F0IG1heFkoKSBjb25zdCB7
IHJldHVybiBzdGQ6Om1heCh2ZXJ0ZXgxKCkueSgpLCB2ZXJ0ZXgyKCkueSgpKTsgfQorCisgICAg
Y29uc3QgRXhjbHVzaW9uUG9seWdvbiogcG9seWdvbjsKKyAgICB1bnNpZ25lZCBpbmRleDE7Cisg
ICAgdW5zaWduZWQgaW5kZXgyOworfTsKKworLy8gVGhlc2Ugc3RydWN0dXJlcyBhcmUgdXNlZCBi
eSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZy4xCisjaWZuZGVmIE5ERUJVRwordGVtcGxh
dGUgPD4gc3RydWN0IFZhbHVlVG9TdHJpbmc8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0
cmluZyhjb25zdCBmbG9hdCB2YWx1ZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodmFsdWUpOyB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPEV4Y2x1c2lvblBvbHlnb25F
ZGdlKj4geworICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0IEV4Y2x1c2lvblBvbHlnb25F
ZGdlKiBlZGdlKSB7IHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXAgKCVmLCVmICVmLCVmKSIsIGVk
Z2UsIGVkZ2UtPnZlcnRleDEoKS54KCksIGVkZ2UtPnZlcnRleDEoKS55KCksIGVkZ2UtPnZlcnRl
eDIoKS54KCksIGVkZ2UtPnZlcnRleDIoKS55KCkpOyB9Cit9OworI2VuZGlmCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV4Y2x1c2lvblBvbHlnb25faApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKaW5kZXggMGY0MzBlZi4uYzRiNTg2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwCkBAIC0z
MSwxMCArMzEsMTAgQEAKICNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5oIgogCiAjaW5jbHVkZSAi
QmFzaWNTaGFwZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIkV4Y2x1c2lvblBvbHlnb24uaCIKICNp
bmNsdWRlICJFeGNsdXNpb25SZWN0YW5nbGUuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNp
bmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIldpbmRSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CkBAIC02MCw2ICs2MCwxMSBAQCBzdGF0aWMgUGFzc093blB0cjxF
eGNsdXNpb25TaGFwZT4gY3JlYXRlRXhjbHVzaW9uRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBj
ZW50ZQogICAgIHJldHVybiBhZG9wdFB0cihuZXcgRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVj
dChjZW50ZXIueCgpIC0gcmFkaWkud2lkdGgoKSwgY2VudGVyLnkoKSAtIHJhZGlpLmhlaWdodCgp
LCByYWRpaS53aWR0aCgpKjIsIHJhZGlpLmhlaWdodCgpKjIpLCByYWRpaSkpOwogfQogCitzdGF0
aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gY3JlYXRlRXhjbHVzaW9uUG9seWdvbihQYXNz
T3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBXaW5kUnVsZSBmaWxsUnVsZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblBvbHlnb24odmVydGljZXMsIGZp
bGxSdWxlKSk7Cit9CisKIC8vIElmIHRoZSB3cml0aW5nTW9kZSBpcyB2ZXJ0aWNhbCwgdGhlbiB0
aGUgQmFzaWNTaGFwZSdzIChwaHlzaWNhbCkgeCBhbmQgeSBjb29yZGluYXRlcyBhcmUgc3dhcHBl
ZCwgc28gdGhhdAogLy8gbGluZSBzZWdtZW50cyBhcmUgcGFyYWxsZWwgdG8gdGhlIGludGVybmFs
IGNvb3JkaW5hdGUgc3lzdGVtJ3MgWCBheGlzLgogCkBAIC04Nyw4ICs5Miw4IEBAIFBhc3NPd25Q
dHI8RXhjbHVzaW9uU2hhcGU+IEV4Y2x1c2lvblNoYXBlOjpjcmVhdGVFeGNsdXNpb25TaGFwZShj
b25zdCBCYXNpY1NoYXBlCiAgICAgICAgIGZsb2F0IHJhZGl1c1kgPSByYWRpdXNZTGVuZ3RoLmlz
VW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNZTGVuZ3RoLCBib3hI
ZWlnaHQpOwogCiAgICAgICAgIGV4Y2x1c2lvblNoYXBlID0gaG9yaXpvbnRhbFdyaXRpbmdNb2Rl
Ci0gICAgICAgICAgPyBjcmVhdGVFeGNsdXNpb25SZWN0YW5nbGUoRmxvYXRSZWN0KHgsIHksIHdp
ZHRoLCBoZWlnaHQpLCBGbG9hdFNpemUocmFkaXVzWCwgcmFkaXVzWSkpCi0gICAgICAgICAgOiBj
cmVhdGVFeGNsdXNpb25SZWN0YW5nbGUoRmxvYXRSZWN0KHksIHgsIGhlaWdodCwgd2lkdGgpLCBG
bG9hdFNpemUocmFkaXVzWSwgcmFkaXVzWCkpOworICAgICAgICAgICAgPyBjcmVhdGVFeGNsdXNp
b25SZWN0YW5nbGUoRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpLCBGbG9hdFNpemUocmFk
aXVzWCwgcmFkaXVzWSkpCisgICAgICAgICAgICA6IGNyZWF0ZUV4Y2x1c2lvblJlY3RhbmdsZShG
bG9hdFJlY3QoeSwgeCwgaGVpZ2h0LCB3aWR0aCksIEZsb2F0U2l6ZShyYWRpdXNZLCByYWRpdXNY
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtOTksOCArMTA0LDggQEAgUGFzc093blB0
cjxFeGNsdXNpb25TaGFwZT4gRXhjbHVzaW9uU2hhcGU6OmNyZWF0ZUV4Y2x1c2lvblNoYXBlKGNv
bnN0IEJhc2ljU2hhcGUKICAgICAgICAgZmxvYXQgcmFkaXVzID0gIGZsb2F0VmFsdWVGb3JMZW5n
dGgoY2lyY2xlLT5yYWRpdXMoKSwgc3RkOjptYXgoYm94SGVpZ2h0LCBib3hXaWR0aCkpOwogCiAg
ICAgICAgIGV4Y2x1c2lvblNoYXBlID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlCi0gICAgICAgICAg
PyBjcmVhdGVFeGNsdXNpb25DaXJjbGUoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgcmFk
aXVzKQotICAgICAgICAgIDogY3JlYXRlRXhjbHVzaW9uQ2lyY2xlKEZsb2F0UG9pbnQoY2VudGVy
WSwgY2VudGVyWCksIHJhZGl1cyk7CisgICAgICAgICAgICA/IGNyZWF0ZUV4Y2x1c2lvbkNpcmNs
ZShGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCByYWRpdXMpCisgICAgICAgICAgICA6IGNy
ZWF0ZUV4Y2x1c2lvbkNpcmNsZShGbG9hdFBvaW50KGNlbnRlclksIGNlbnRlclgpLCByYWRpdXMp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTExMiwxMyArMTE3LDI2IEBAIFBhc3NPd25Q
dHI8RXhjbHVzaW9uU2hhcGU+IEV4Y2x1c2lvblNoYXBlOjpjcmVhdGVFeGNsdXNpb25TaGFwZShj
b25zdCBCYXNpY1NoYXBlCiAgICAgICAgIGZsb2F0IHJhZGl1c1kgPSBmbG9hdFZhbHVlRm9yTGVu
Z3RoKGVsbGlwc2UtPnJhZGl1c1koKSwgYm94SGVpZ2h0KTsKIAogICAgICAgICBleGNsdXNpb25T
aGFwZSA9IGhvcml6b250YWxXcml0aW5nTW9kZQotICAgICAgICAgID8gY3JlYXRlRXhjbHVzaW9u
RWxsaXBzZShGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCBGbG9hdFNpemUocmFkaXVzWCwg
cmFkaXVzWSkpCi0gICAgICAgICAgOiBjcmVhdGVFeGNsdXNpb25FbGxpcHNlKEZsb2F0UG9pbnQo
Y2VudGVyWSwgY2VudGVyWCksIEZsb2F0U2l6ZShyYWRpdXNZLCByYWRpdXNYKSk7CisgICAgICAg
ICAgICA/IGNyZWF0ZUV4Y2x1c2lvbkVsbGlwc2UoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZ
KSwgRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpKQorICAgICAgICAgICAgOiBjcmVhdGVFeGNs
dXNpb25FbGxpcHNlKEZsb2F0UG9pbnQoY2VudGVyWSwgY2VudGVyWCksIEZsb2F0U2l6ZShyYWRp
dXNZLCByYWRpdXNYKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgQmFzaWNT
aGFwZTo6QkFTSUNfU0hBUEVfUE9MWUdPTjoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1BPTFlHT046IHsKKyAgICAgICAgY29uc3Qg
QmFzaWNTaGFwZVBvbHlnb24qIHBvbHlnb24gPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBl
UG9seWdvbio+KGJhc2ljU2hhcGUpOworICAgICAgICBjb25zdCBWZWN0b3I8TGVuZ3RoPiYgdmFs
dWVzID0gcG9seWdvbi0+dmFsdWVzKCk7CisgICAgICAgIHNpemVfdCB2YWx1ZXNTaXplID0gdmFs
dWVzLnNpemUoKTsKKyAgICAgICAgQVNTRVJUKCEodmFsdWVzU2l6ZSAlIDIpKTsKKyAgICAgICAg
VmVjdG9yPEZsb2F0UG9pbnQ+KiB2ZXJ0aWNlcyA9IG5ldyBWZWN0b3I8RmxvYXRQb2ludD4odmFs
dWVzU2l6ZSAvIDIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzU2l6
ZTsgaSArPSAyKSB7CisgICAgICAgICAgICBGbG9hdFBvaW50IHZlcnRleCgKKyAgICAgICAgICAg
ICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpKSwgYm94V2lkdGgpLCAKKyAgICAg
ICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpICsgMSksIGJveEhlaWdo
dCkpOworICAgICAgICAgICAgKCp2ZXJ0aWNlcylbaS8yXSA9IGhvcml6b250YWxXcml0aW5nTW9k
ZSA/IHZlcnRleCA6IHZlcnRleC50cmFuc3Bvc2VkUG9pbnQoKTsKKyAgICAgICAgfQorICAgICAg
ICBleGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4Y2x1c2lvblBvbHlnb24oYWRvcHRQdHIodmVydGlj
ZXMpLCBwb2x5Z29uLT53aW5kUnVsZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAg
ZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwCmluZGV4IGUw
ZDZkMTkuLjM3ZDFmMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluc2lkZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwCkBAIC03Myw3ICs3Myw3IEBAIGJvb2wgRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvOjppc0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb0VuYWJsZWRGb3JS
ZW5kZXJCbG9jayhjCiB7CiAgICAgLy8gRklYTUU6IEJ1ZyA4OTcwNzogRW5hYmxlIHNoYXBlIGlu
c2lkZSBmb3Igbm9uLXJlY3Rhbmd1bGFyIHNoYXBlcwogICAgIEJhc2ljU2hhcGUqIHNoYXBlID0g
YmxvY2stPnN0eWxlKCktPnNoYXBlSW5zaWRlKCk7Ci0gICAgcmV0dXJuIChzaGFwZSAmJiBzaGFw
ZS0+dHlwZSgpID09IEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1JFQ1RBTkdMRSk7CisgICAgcmV0
dXJuIHNoYXBlICYmIChzaGFwZS0+dHlwZSgpID09IEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1JF
Q1RBTkdMRSB8fCBzaGFwZS0+dHlwZSgpID09IEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1BPTFlH
T04pOwogfQogCiB2b2lkIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzo6cmVtb3ZlRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvRm9yUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167370</attachid>
            <date>2012-10-05 12:52:23 -0700</date>
            <delta_ts>2012-10-05 15:45:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>37692</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5Yzg3Y2EyLi5mYTQ2MmI2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDkt
MjcgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBFeGNs
dXNpb25zXSBBZGQgc3VwcG9ydCBmb3IgcG9seWdvbmFsIHNoYXBlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY4MTEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWZXJpZnkgdGhhdCBhIHJlY3Rhbmd1bGFy
IHNoYXBlLWluc2lkZSBzcGVjaWZpZWQgYXMgYSBwb2x5Z29uIHdvcmtzIGFzIGV4cGVjdGVkIGZv
ciBhbGwgd3JpdGluZy1tb2Rlcy4KKworICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1p
bnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBv
bHlnb24tcmVjdGFuZ2xlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTEwLTA1ICBEaXJrIFByYW5rZSAg
PGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCBsaW50IGVycm9yIGluIFRlc3RF
eHBlY3RhdGlvbnMgZnJvbSBwcmV2aW91cyBjaGFuZ2UuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3Rh
bmdsZS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25zL3NoYXBlLWlu
c2lkZS9zaGFwZS1pbnNpZGUtcG9seWdvbi1yZWN0YW5nbGUtZXhwZWN0ZWQuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWI0OGJmCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtcG9s
eWdvbi1yZWN0YW5nbGUtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgI3NoYXBlLWluc2lkZS1ob3Jpem9u
dGFsIHsKKyAgICAgICAgcGFkZGluZzogMjBweCAzNXB4IDI1cHggMTVweDsKKyAgICAgICAgd2lk
dGg6IDE1MHB4OworICAgICAgICBoZWlnaHQ6IDE3NXB4OworICAgICAgICBwb3NpdGlvbjogcmVs
YXRpdmU7CisgICAgfQorICAgICNzaGFwZS1pbnNpZGUtdmVydGljYWwtbHIgeworICAgICAgICBw
YWRkaW5nOiAyMHB4IDM1cHggMjVweCAxNXB4OworICAgICAgICB3aWR0aDogMTUwcHg7CisgICAg
ICAgIGhlaWdodDogMTc1cHg7CisgICAgICAgIC13ZWJraXQtd3JpdGluZy1tb2RlOiB2ZXJ0aWNh
bC1scjsKKyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKyAgICAjc2hhcGUtaW5z
aWRlLXZlcnRpY2FsLXJsIHsKKyAgICAgICAgcGFkZGluZzogMjBweCAzNXB4IDI1cHggMTVweDsK
KyAgICAgICAgd2lkdGg6IDE1MHB4OworICAgICAgICBoZWlnaHQ6IDE3NXB4OworICAgICAgICAt
d2Via2l0LXdyaXRpbmctbW9kZTogdmVydGljYWwtcmw7CisgICAgICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKKyAgICB9CisgICAgI2JvcmRlciB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICAgICAgdG9wOiAxM3B4OworICAgICAgICBsZWZ0OiAxOHB4OworICAgICAgICB3aWR0aDog
MTUwcHg7CisgICAgICAgIGhlaWdodDogMTc1cHg7CisgICAgICAgIGJvcmRlcjogMnB4IHNvbGlk
IGJsdWU7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxkaXYgaWQ9InNo
YXBlLWluc2lkZS1ob3Jpem9udGFsIj4KKyAgICAgICAgPGRpdiBpZD0iYm9yZGVyIj48L2Rpdj4K
KyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBjb250YWluZWQgYnkgdGhlIGJsdWUgc3F1YXJl
LgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9InNoYXBlLWluc2lkZS12ZXJ0aWNhbC1sciI+Cisg
ICAgICAgIDxkaXYgaWQ9ImJvcmRlciI+PC9kaXY+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQg
YmUgY29udGFpbmVkIGJ5IHRoZSBibHVlIHNxdWFyZS4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlk
PSJzaGFwZS1pbnNpZGUtdmVydGljYWwtcmwiPgorICAgICAgICA8ZGl2IGlkPSJib3JkZXIiPjwv
ZGl2PgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGNvbnRhaW5lZCBieSB0aGUgYmx1ZSBz
cXVhcmUuCisgICAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJl
Y3RhbmdsZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9z
aGFwZS1pbnNpZGUtcG9seWdvbi1yZWN0YW5nbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5lMzlhYmUwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtcG9seWdvbi1yZWN0YW5nbGUu
aHRtbApAQCAtMCwwICsxLDUzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0PgorICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICB3aW5kb3cuaW50ZXJu
YWxzLnNldHRpbmdzLnNldENTU0V4Y2x1c2lvbnNFbmFibGVkKHRydWUpOworPC9zY3JpcHQ+Cis8
c3R5bGU+CisgICAgI3NoYXBlLWluc2lkZS1ob3Jpem9udGFsIHsKKyAgICAgICAgd2lkdGg6IDIw
MHB4OworICAgICAgICBoZWlnaHQ6IDIyMHB4OworICAgICAgICAtd2Via2l0LXNoYXBlLWluc2lk
ZTogcG9seWdvbigxNXB4IDIwcHgsIDE2NXB4IDIwcHgsIDE2NXB4IDE5NXB4LCAxNXB4IDE5NXB4
KTsKKyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKyAgICAjc2hhcGUtaW5zaWRl
LXZlcnRpY2FsLWxyIHsKKyAgICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgICBoZWlnaHQ6IDIy
MHB4OworICAgICAgICAtd2Via2l0LXNoYXBlLWluc2lkZTogcG9seWdvbigxNXB4IDIwcHgsIDE2
NXB4IDIwcHgsIDE2NXB4IDE5NXB4LCAxNXB4IDE5NXB4KTsKKyAgICAgICAgLXdlYmtpdC13cml0
aW5nLW1vZGU6IHZlcnRpY2FsLWxyOworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAg
fQorICAgICNzaGFwZS1pbnNpZGUtdmVydGljYWwtcmwgeworICAgICAgICB3aWR0aDogMjAwcHg7
CisgICAgICAgIGhlaWdodDogMjIwcHg7CisgICAgICAgIC13ZWJraXQtc2hhcGUtaW5zaWRlOiBw
b2x5Z29uKDE1cHggMjBweCwgMTY1cHggMjBweCwgMTY1cHggMTk1cHgsIDE1cHggMTk1cHgpOwor
ICAgICAgICAtd2Via2l0LXdyaXRpbmctbW9kZTogdmVydGljYWwtcmw7CisgICAgICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgICB9CisgICAgI2JvcmRlciB7CisgICAgICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICAgICAgdG9wOiAxM3B4OworICAgICAgICBsZWZ0OiAxOHB4OworICAgICAg
ICB3aWR0aDogMTUwcHg7CisgICAgICAgIGhlaWdodDogMTc1cHg7CisgICAgICAgIGJvcmRlcjog
MnB4IHNvbGlkIGJsdWU7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxk
aXYgaWQ9InNoYXBlLWluc2lkZS1ob3Jpem9udGFsIj4KKyAgICAgICAgPGRpdiBpZD0iYm9yZGVy
Ij48L2Rpdj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBjb250YWluZWQgYnkgdGhlIGJs
dWUgc3F1YXJlLgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9InNoYXBlLWluc2lkZS12ZXJ0aWNh
bC1sciI+CisgICAgICAgIDxkaXYgaWQ9ImJvcmRlciI+PC9kaXY+CisgICAgICAgIFRoaXMgdGV4
dCBzaG91bGQgYmUgY29udGFpbmVkIGJ5IHRoZSBibHVlIHNxdWFyZS4KKyAgICA8L2Rpdj4KKyAg
ICA8ZGl2IGlkPSJzaGFwZS1pbnNpZGUtdmVydGljYWwtcmwiPgorICAgICAgICA8ZGl2IGlkPSJi
b3JkZXIiPjwvZGl2PgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGNvbnRhaW5lZCBieSB0
aGUgYmx1ZSBzcXVhcmUuCisgICAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CmluZGV4IDJkMmM5M2UuLjAyMmMyZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0y
MDM3LDYgKzIwMzcsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL0NvdW50
ZXJOb2RlLmNwcAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKICAgICByZW5kZXJpbmcv
RXhjbHVzaW9uSW50ZXJ2YWwuY3BwCisgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3Bw
CiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAKICAgICByZW5kZXJpbmcvRXhj
bHVzaW9uU2hhcGUuY3BwCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA4MDdhYzU3Li41ZjNjOTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NjggQEAKKzIwMTItMDktMjcgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAg
ICAgICAgW0NTUyBFeGNsdXNpb25zXSBBZGQgc3VwcG9ydCBmb3IgcG9seWdvbmFsIHNoYXBlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY4MTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0aWFsIHZl
cnNpb24gb2YgdGhlIGxheW91dCBzdXBwb3J0IGZvciBwb2x5Z29uYWwgZXhjbHVzaW9uIHNoYXBl
czogdGhlIEV4Y2x1c2lvblBvbHlnb24gY2xhc3MuCisgICAgICAgIFN1cHBvcnRzIHRoZSBwdWJs
aWMgRXhjbHVzaW9uU2hhcGUgb3BlcmF0aW9ucyB1c2luZyB0aGUgYWxnb3JpdGhtIGRlc2NyaWJl
ZCBoZXJlOgorICAgICAgICBodHRwOi8vaGFuc211bGxlci13ZWJraXQuYmxvZ3Nwb3QuY29tLzIw
MTIvMDYvaG9yaXpvbnRhbC1ib3gtcG9seWdvbi1pbnRlcnNlY3Rpb24tZm9yLmh0bWwuCisgICAg
ICAgIEFsdGhvdWdoIGJvdGggdGhlICJpbmNsdWRlZCIgYW5kICJleGNsdWRlZCIgb3BlcmF0aW9u
cyBhcmUgc3VwcG9ydGVkLCBvbmx5IHRoZSBmb3JtZXIgaXMKKyAgICAgICAgdXNlZCwgc2luY2Ug
b25seSBzaGFwZS1pbnNpZGUgaXMgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQuCisKKyAgICAgICAg
VGhlIEV4Y2x1c2lvblBvbHlnb24gY2xhc3Mgc3RvcmVzIHRoZSBwb2x5Z29uJ3MgZWRnZXMgaW4g
YW4gaW50ZXJ2YWwgdHJlZS4KKworICAgICAgICBQb2x5Z29uIGVkZ2VzIGFyZSByZXByZXNlbnRl
ZCBieSB0aGUgRXhjbHVzaW9uUG9seWdvbkVkZ2UgY2xhc3MsIHdoaWNoIHJlY29yZHMgdGhlIGlu
ZGljZXMgb2YKKyAgICAgICAgdGhlIHBhaXIgb2YgdmVydGljZXMgam9pbmVkIGJ5IHRoZSBlZGdl
LiAgRWRnZSB2ZXJ0ZXggaW5kZXgxIGlzIGFsd2F5cyBsZXNzIHRoYW4gaW5kZXgyLCBleGNlcHQK
KyAgICAgICAgdGhlIGxhc3QgZWRnZSB3aGVyZSBpbmRleDIgaXMgMC4gIFdoZW4gYSBwb2x5Z29u
IGVkZ2UgaXMgZGVmaW5lZCBieSAzIG9yIG1vcmUgY29saW5lYXIgdmVydGljZXMsCisgICAgICAg
IGluZGV4MiBjYW4gYmUgdGhlIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBjb2xpbmVhciB2ZXJ0ZXgu
CisKKyAgICAgICAgQWx0aG91Z2ggdGhlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGNvbXBsZXgg
cG9seWdvbnMsIHRoZSBsYXlvdXQgY29kZSBpcyBsaW1pdGVkIHRvCisgICAgICAgIGVzc2VudGlh
bGx5IHJlY3Rhbmd1bGFyIHNoYXBlcyB1bnRpbCBhIHBhdGNoIGZvciBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY4MTMKKyAgICAgICAgbGFuZHMuCisKKyAgICAgICAg
VGVzdDogZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtcG9seWdvbi1y
ZWN0YW5nbGUuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVy
aW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoRWRnZUludGVyc2VjdGlvbik6IEludGVybmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBpbnRl
cnNlY3Rpb24gb2YgYSBwb2x5Z29uIGVkZ2UgYW5kIGEgaG9yaXpvbnRhbCBsaW5lLgorICAgICAg
ICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6RXhjbHVzaW9uUG9seWdvbik6IFNlZSB0aGUg
aW50cm9kdWN0b3J5IHRleHQgYWJvdmUgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhpcyB0eXBlLgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVhJbnRlcnNlY3Rpb24pOiBGaW5kIGFuZCBjbGFzc2lm
eSB0aGUgWCBpbnRlcmNlcHQgb2YgYSBwb2x5Z29uIGVkZ2Ugd2l0aCBob3Jpem9udGFsIGxpbmUs
IGlmIGFueS4KKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OnJpZ2h0VmVydGV4
WSk6IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZGVjaWRlIGlmIGEgaG9yaXpvbnRhbCBsaW5lICJj
cm9zc2VzIiBhIHZlcnRleC4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEludGVydmFsWCk6IEFw
cGVuZCBhbiB4IGNvb3JkaW5hdGUgdG8gYSB2ZWN0b3Igb2YgRXhjbHVzaW9uSW50ZXJ2YWxzLgor
ICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZVhJbnRlcnNlY3Rpb25z
KTogUmV0dXJuIGEgdmVjdG9yIG9mIHRoZSBpbnRlcnNlY3Rpb25zIG9mIGEgaG9yaXpvbnRhbCBs
aW5lIHdpdGggdGhlIHBvbHlnb24ncyBlZGdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lv
blBvbHlnb246OmNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyk6IFJldHVybiBhIHZlY3RvciBvZiB0
aGUgWCBwcm9qZWN0aW9ucyBvZiB0aGUgZWRnZXMgdGhhdCBvdmVybGFwIGEgaG9yaXpvbmFsIHJl
Y3RhbmdsZS4KKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmdldEV4Y2x1ZGVk
SW50ZXJ2YWxzKTogUmV0dXJuIGEgU2VnbWVudExpc3Qgb2YgdGhlIFggaW50ZXJ2YWxzIHdpdGhp
biBhIGhvcml6b250YWwgcmVjdGFuZ2xlIHRoYXQgb3ZlcmxhcCB0aGUgcG9seWdvbi4KKyAgICAg
ICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1ZGVkSW50ZXJ2YWxzKTogUmV0
dXJuIHRoZSBYIGludGVydmFscyB3aXRoaW4gYSBob3Jpem9udGFsIHJlY3RhbmdsZSB0aGF0IGZp
dCBpbnNpZGUgdGhlIHBvbHlnb24uCisgICAgICAgICogcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHln
b24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4Y2x1c2lvblBvbHln
b24pOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Z2V0WEF0KTogWCBjb29y
ZGluYXRlIG9mIGEgcG9seWdvbiB2ZXJ0ZXgKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBv
bHlnb246OmdldFlBdCk6IFkgY29vcmRpbmF0ZSBvZiBhIHBvbHlnb24gdmVydGV4CisgICAgICAg
IChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpudW1iZXJPZlZlcnRpY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmZpbGxSdWxlKTogQSBXaW5kUnVsZSB2YWx1ZSB0
aGF0IGRlZmluZXMgImluc2lkZSIgZm9yIHNlbGYtaW50ZXJzZWN0aW5nIHBvbHlnb25zLgorICAg
ICAgICAoRXhjbHVzaW9uUG9seWdvbkVkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9u
UG9seWdvbkVkZ2U6OkV4Y2x1c2lvblBvbHlnb25FZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
Y2x1c2lvblBvbHlnb25FZGdlOjp2ZXJ0ZXgxKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lv
blBvbHlnb25FZGdlOjp2ZXJ0ZXgyKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHln
b25FZGdlOjptaW5YKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjpt
aW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjptYXhYKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjptYXhZKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRXhj
bHVzaW9uUG9seWdvbik6IFJldHVybiBhIG5ldyBFeGNsdXNpb25Qb2x5Z29uLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhjbHVz
aW9uU2hhcGUpOiBBZGRlZCBzdXBwb3J0IGZvciBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9QT0xZ
R09OLgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjppc0V4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mb0VuYWJsZWRGb3JSZW5kZXJCbG9jayk6IEVuYWJsZSBCQVNJQ19TSEFQRV9Q
T0xZR09OIHNoYXBlcyBmb3IgUmVuZGVyQmxvY2tzLgorCiAyMDEyLTEwLTA1ICBUYWIgQXRraW5z
ICA8amFja2FsbWFnZUBnbWFpbC5jb20+CiAKICAgICAgICAgPG1hcnF1ZWU+IGVsZW1lbnQgZm9y
Y2VzIGl0c2VsZiB0byBiZSBhdCBsZWFzdCAxZW0gaGlnaCwgcmVnYXJkbGVzcyBvZiAnaGVpZ2h0
JyBkZWNsYXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMWU5N2I1Ny4u
MjU0ZGJmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00OTEyLDYgKzQ5MTIs
OCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxp
cHNpc0JveC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuaCBcCisJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhj
bHVzaW9uU2hhcGUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkg
Yi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDA3OGI2OWEuLjg5YTI1MWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQpAQCAtMTEwNyw2ICsxMTA3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5n
L0NvdW50ZXJOb2RlLmNwcCBcCiAgICAgcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBcCiAgICAg
cmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcCBcCisgICAgcmVuZGVyaW5nL0V4Y2x1c2lv
blBvbHlnb24uY3BwIFwKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCBcCiAg
ICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcCBcCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby5jcHAgXApAQCAtMjI5OCw2ICsyMjk5LDcgQEAgSEVBREVSUyArPSBc
CiAgICAgcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmggXAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0Jv
eC5oIFwKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuaCBcCisgICAgcmVuZGVyaW5n
L0V4Y2x1c2lvblBvbHlnb24uaCBcCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5o
IFwKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaCBcCiAgICAgcmVuZGVyaW5nL0V4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mby5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBkMTIxYjdkLi4xMGI4
NmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zMjg3LDYgKzMyODcsOCBAQAogICAgICAgICAgICAg
J3JlbmRlcmluZy9FbGxpcHNpc0JveC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvRXhjbHVz
aW9uSW50ZXJ2YWwuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2
YWwuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwJywKKyAg
ICAgICAgICAgICdyZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L0V4Y2x1c2lvblJlY3RhbmdsZS5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvRXhjbHVzaW9u
U2hhcGUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKaW5kZXggZWYyYWFmMC4uMGQ2YmU2NyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTM4MzYzLDYgKzM4MzYzLDE0IEBACiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4K
ICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblBvbHlnb24uY3BwIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAg
ICA8L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25Qb2x5
Z29uLmgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXEV4Y2x1
c2lvblJlY3RhbmdsZS5jcHAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAg
ICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjYjdiZDY1Li4wNTA3MmYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xODM3LDYgKzE4MzcsOCBAQAogCQk2RTg3OThCRDE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVz
aW9uUmVjdGFuZ2xlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RTg3OThCNzE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggKi87
IH07CiAJCTZFODc5OEJFMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCODE1Rjgx
RTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwICovOyB9OwogCQk2RTg3OThCRjE1Rjgx
RTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI5MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNp
b25TaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTZFQUYzNDBGMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQUYzNDBEMTYxMzg2
OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCAqLzsgfTsKKwkJNkVBRjM0MTAxNjEz
ODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQUYzNDBFMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNs
dXNpb25Qb2x5Z29uLmggKi87IH07CiAJCTZFQkM1RUFGMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zs
b2F0NjRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RUJDNUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovOyB9
OwogCQk2RUJDNUVCMDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkM1RUFFMTM4QjUwRjIw
MEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovOyB9OwogCQk2RUJGMEU0ODEyQTg5MjYxMDBE
QjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTQ1MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJl
RmxvYXQuY3BwICovOyB9OwpAQCAtOTAzMiw2ICs5MDM0LDggQEAKIAkJNkU4Nzk4QjcxNUY4MUU0
QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFeGNsdXNpb25SZWN0YW5nbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkU4Nzk4QjgxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU4Nzk4QjkxNUY4MUU0QTAwQkZFNEFBIC8qIEV4
Y2x1c2lvblNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lv
blNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFQUYzNDBEMTYxMzg2OUEw
MDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEV4Y2x1c2lvblBvbHlnb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25Qb2x5Z29uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkM1RDgwMTM4QjRDNEUwMEEwQ0Y4QSAvKiBGbG9h
dDY0QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEZsb2F0NjRBcnJheS5pZGw7IHBh
dGggPSBjYW52YXMvRmxvYXQ2NEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxv
YXQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFy
cmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTMxMiw2ICsyMTMxNiw4IEBA
CiAJCQkJQThDRkY2QkQwQTE1NjExODAwMEE0MjM0IC8qIEVsbGlwc2lzQm94LmggKi8sCiAJCQkJ
NkU4Nzk4QjQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmNwcCAqLywKIAkJ
CQk2RTg3OThCNTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCAqLywKKwkJ
CQk2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgKi8sCisJ
CQkJNkVBRjM0MEUxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCAqLywKIAkJ
CQk2RTg3OThCNjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCAqLywK
IAkJCQk2RTg3OThCNzE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggKi8s
CiAJCQkJNkU4Nzk4QjgxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCAqLywK
QEAgLTI1NTM3LDYgKzI1NTQzLDcgQEAKIAkJCQk5MzFDQkQwRDE2MUE0NEU5MDBFNEM4NzQgLyog
U2Nyb2xsaW5nU3RhdGVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzFDQkQwRjE2MUE0NEU5
MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzFDQkQxMTE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVUcmVlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk2RUFGMzQxMDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9s
eWdvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yODYzNCw2ICsyODY0MSw3IEBACiAJCQkJOTMxQ0JE
MEUxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5MzFDQkQxMDE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3Rh
dGVUcmVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMUNCRDEzMTYxQTQ0RjgwMEU0Qzg3NCAv
KiBTY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk2RUFGMzQwRjE2
MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDQ3MGUxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwCkBAIC0wLDAgKzEsMzA5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZ
UklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisg
KiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisg
KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4Y2x1c2lvblBvbHln
b24uaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworZW51bSBFZGdlSW50ZXJzZWN0aW9uVHlwZSB7CisgICAgTm9ybWFsLAorICAgIFZlcnRl
eE1pblksCisgICAgVmVydGV4TWF4WSwKKyAgICBWZXJ0ZXhZQm90aAorfTsKKworc3RydWN0IEVk
Z2VJbnRlcnNlY3Rpb24geworICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdlOwor
ICAgIEZsb2F0UG9pbnQgcG9pbnQ7CisgICAgRWRnZUludGVyc2VjdGlvblR5cGUgdHlwZTsKK307
CisKK3N0YXRpYyBib29sIGNvbXBhcmVFZGdlTWluWShjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRn
ZSogZTEsIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlMikKK3sKKyAgICByZXR1cm4gZTEt
Pm1pblkoKSA8IGUyLT5taW5ZKCk7Cit9CisKK0V4Y2x1c2lvblBvbHlnb246OkV4Y2x1c2lvblBv
bHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUg
ZmlsbFJ1bGUpCisgICAgOiBFeGNsdXNpb25TaGFwZSgpCisgICAgLCBtX3ZlcnRpY2VzKHZlcnRp
Y2VzKQorICAgICwgbV9maWxsUnVsZShmaWxsUnVsZSkKK3sKKyAgICAvLyBGSVhNRTogSGFuZGxl
IHBvbHlnb25zIGRlZmluZWQgd2l0aCBsZXNzIHRoYW4gMyBub24tY29saW5lYXIgdmVydGljZXMu
CisKKyAgICB1bnNpZ25lZCBuVmVydGljZXMgPSBudW1iZXJPZlZlcnRpY2VzKCk7CisgICAgbV9l
ZGdlcy5yZXNpemUoblZlcnRpY2VzKTsKKyAgICBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbkVkZ2Uq
PiBzb3J0ZWRFZGdlc01pblkoblZlcnRpY2VzKTsKKworICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZl
cnRleDAgPSB2ZXJ0ZXhBdCgwKTsKKyAgICBmbG9hdCBtaW5YID0gdmVydGV4MC54KCk7CisgICAg
ZmxvYXQgbWluWSA9IHZlcnRleDAueSgpOworICAgIGZsb2F0IG1heFggPSBtaW5YOworICAgIGZs
b2F0IG1heFkgPSBtaW5ZOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5WZXJ0aWNl
czsgaSsrKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleCA9IHZlcnRleEF0KGkp
OworICAgICAgICBmbG9hdCB4ID0gdmVydGV4LngoKTsKKyAgICAgICAgZmxvYXQgeSA9IHZlcnRl
eC55KCk7CisKKyAgICAgICAgbWluWCA9IHN0ZDo6bWluKHgsIG1pblgpOworICAgICAgICBtYXhY
ID0gc3RkOjptYXgoeCwgbWF4WCk7CisgICAgICAgIG1pblkgPSBzdGQ6Om1pbih5LCBtaW5ZKTsK
KyAgICAgICAgbWF4WSA9IHN0ZDo6bWF4KHksIG1heFkpOworCisgICAgICAgIG1fZWRnZXNbaV0u
cG9seWdvbiA9IHRoaXM7CisgICAgICAgIG1fZWRnZXNbaV0uaW5kZXgxID0gaTsKKyAgICAgICAg
bV9lZGdlc1tpXS5pbmRleDIgPSAoaSArIDEpICUgblZlcnRpY2VzOworCisgICAgICAgIHNvcnRl
ZEVkZ2VzTWluWVtpXSA9ICZtX2VkZ2VzW2ldOworICAgIH0KKworICAgIG1fYm91bmRpbmdCb3gu
c2V0WChtaW5YKTsKKyAgICBtX2JvdW5kaW5nQm94LnNldFkobWluWSk7CisgICAgbV9ib3VuZGlu
Z0JveC5zZXRXaWR0aChtYXhYIC0gbWluWCk7CisgICAgbV9ib3VuZGluZ0JveC5zZXRIZWlnaHQo
bWF4WSAtIG1pblkpOworCisgICAgc3RkOjpzb3J0KHNvcnRlZEVkZ2VzTWluWS5iZWdpbigpLCBz
b3J0ZWRFZGdlc01pblkuZW5kKCksIFdlYkNvcmU6OmNvbXBhcmVFZGdlTWluWSk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lZGdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBF
eGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZSA9ICZtX2VkZ2VzW2ldOworICAgICAgICBtX2VkZ2VU
cmVlLmFkZChFZGdlSW50ZXJ2YWwoZWRnZS0+bWluWSgpLCBlZGdlLT5tYXhZKCksIGVkZ2UpKTsK
KyAgICB9Cit9CisKK3N0YXRpYyBib29sIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGNvbnN0IEV4Y2x1
c2lvblBvbHlnb25FZGdlKiBlZGdlUG9pbnRlciwgZmxvYXQgeSwgRWRnZUludGVyc2VjdGlvbiYg
cmVzdWx0KQoreworICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiBlZGdlID0gKmVkZ2VQ
b2ludGVyOworCisgICAgaWYgKGVkZ2UubWluWSgpID4geSB8fCBlZGdlLm1heFkoKSA8IHkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0IHgxID0gZWRnZS52ZXJ0ZXgxKCkueCgp
OworICAgIGZsb2F0IHkxID0gZWRnZS52ZXJ0ZXgxKCkueSgpOworICAgIGZsb2F0IHgyID0gZWRn
ZS52ZXJ0ZXgyKCkueCgpOworICAgIGZsb2F0IHkyID0gZWRnZS52ZXJ0ZXgyKCkueSgpOworICAg
IGZsb2F0IGR5ID0geTIgLSB5MTsKKworICAgIGZsb2F0IGludGVyc2VjdGlvblg7CisgICAgRWRn
ZUludGVyc2VjdGlvblR5cGUgaW50ZXJzZWN0aW9uVHlwZTsKKworICAgIGlmICghZHkpIHsKKyAg
ICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleFlCb3RoOworICAgICAgICBpbnRlcnNlY3Rp
b25YID0gZWRnZS5taW5YKCk7CisgICAgfSBlbHNlIGlmICh5ID09IGVkZ2UubWluWSgpKSB7Cisg
ICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhNaW5ZOworICAgICAgICBpbnRlcnNlY3Rp
b25YID0gKHkxIDwgeTIpID8geDEgOiB4MjsKKyAgICB9IGVsc2UgaWYgKHkgPT0gZWRnZS5tYXhZ
KCkpIHsKKyAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleE1heFk7CisgICAgICAgIGlu
dGVyc2VjdGlvblggID0gKHkxID4geTIpID8geDEgOiB4MjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpbnRlcnNlY3Rpb25UeXBlID0gTm9ybWFsOworICAgICAgICBpbnRlcnNlY3Rpb25YID0gKCh5
IC0geTEpICogKHgyIC0geDEpIC8gZHkpICsgeDE7CisgICAgfQorCisgICAgcmVzdWx0LmVkZ2Ug
PSBlZGdlUG9pbnRlcjsKKyAgICByZXN1bHQudHlwZSA9IGludGVyc2VjdGlvblR5cGU7CisgICAg
cmVzdWx0LnBvaW50LnNldChpbnRlcnNlY3Rpb25YLCB5KTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitmbG9hdCBFeGNsdXNpb25Qb2x5Z29uOjpyaWdodFZlcnRleFkodW5zaWduZWQgaW5kZXgp
IGNvbnN0Cit7CisgICAgdW5zaWduZWQgblZlcnRpY2VzID0gbnVtYmVyT2ZWZXJ0aWNlcygpOwor
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSB2ZXJ0ZXhBdCgoaW5kZXggKyAxKSAlIG5W
ZXJ0aWNlcyk7CisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IHZlcnRleEF0KChpbmRl
eCAtIDEpICUgblZlcnRpY2VzKTsKKworICAgIGlmICh2ZXJ0ZXgxLngoKSA9PSB2ZXJ0ZXgyLngo
KSkKKyAgICAgICAgcmV0dXJuIHZlcnRleDEueSgpID4gdmVydGV4Mi55KCkgPyB2ZXJ0ZXgxLnko
KSA6IHZlcnRleDIueSgpOworICAgIHJldHVybiB2ZXJ0ZXgxLngoKSA+IHZlcnRleDIueCgpID8g
dmVydGV4MS55KCkgOiB2ZXJ0ZXgyLnkoKTsKK30KKworc3RhdGljIGJvb2wgYXBwZW5kSW50ZXJ2
YWxYKGZsb2F0IHgsIGJvb2wgaW5zaWRlLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiByZXN1
bHQpCit7CisgICAgaWYgKCFpbnNpZGUpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoRXhjbHVzaW9u
SW50ZXJ2YWwoeCkpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAx
XS54MiA9IHg7CisKKyAgICByZXR1cm4gIWluc2lkZTsKK30KKworc3RhdGljIGJvb2wgY29tcGFy
ZUVkZ2VJbnRlcnNlY3Rpb25YKGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjEs
IGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjIpCit7CisgICAgZmxvYXQgeDEg
PSBpbnRlcnNlY3Rpb24xLnBvaW50LngoKTsKKyAgICBmbG9hdCB4MiA9IGludGVyc2VjdGlvbjIu
cG9pbnQueCgpOworICAgIHJldHVybiAoeDEgPT0geDIpID8gaW50ZXJzZWN0aW9uMS50eXBlIDwg
aW50ZXJzZWN0aW9uMi50eXBlIDogeDEgPCB4MjsKK30KKwordm9pZCBFeGNsdXNpb25Qb2x5Z29u
Ojpjb21wdXRlWEludGVyc2VjdGlvbnMoZmxvYXQgeSwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFs
PiYgcmVzdWx0KSBjb25zdAoreworICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50
ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7CisgICAgbV9lZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNs
dXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwoeSwgeSwgMCksIG92ZXJsYXBwaW5nRWRnZXMpOwor
CisgICAgVmVjdG9yPEVkZ2VJbnRlcnNlY3Rpb24+IGludGVyc2VjdGlvbnM7CisgICAgRWRnZUlu
dGVyc2VjdGlvbiBpbnRlcnNlY3Rpb247CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG92
ZXJsYXBwaW5nRWRnZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgRXhjbHVzaW9uUG9seWdvbkVk
Z2UqIGVkZ2UgPSBzdGF0aWNfY2FzdDxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+KG92ZXJsYXBwaW5n
RWRnZXNbaV0uZGF0YSgpKTsKKyAgICAgICAgaWYgKGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2Us
IHksIGludGVyc2VjdGlvbikpCisgICAgICAgICAgICBpbnRlcnNlY3Rpb25zLmFwcGVuZChpbnRl
cnNlY3Rpb24pOworICAgIH0KKyAgICBpZiAoaW50ZXJzZWN0aW9ucy5zaXplKCkgPCAyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzdGQ6OnNvcnQoaW50ZXJzZWN0aW9ucy5iZWdpbigpLCBpbnRl
cnNlY3Rpb25zLmVuZCgpLCBXZWJDb3JlOjpjb21wYXJlRWRnZUludGVyc2VjdGlvblgpOworCisg
ICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIGludCB3aW5kQ291bnQgPSAwOworICAgIGJvb2wg
aW5zaWRlID0gZmFsc2U7CisKKyAgICB3aGlsZSAoaW5kZXggPCBpbnRlcnNlY3Rpb25zLnNpemUo
KSkgeworICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiB0aGlzSW50ZXJzZWN0aW9uID0g
aW50ZXJzZWN0aW9uc1tpbmRleF07CisKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IGludGVyc2Vj
dGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBuZXh0
SW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleCArMV07CisgICAgICAgICAgICBpZiAo
KHRoaXNJbnRlcnNlY3Rpb24ucG9pbnQueCgpID09IG5leHRJbnRlcnNlY3Rpb24ucG9pbnQueCgp
KSAmJiAodGhpc0ludGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1pblkgfHwgdGhpc0ludGVyc2Vj
dGlvbi50eXBlID09IFZlcnRleE1heFkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXNJbnRl
cnNlY3Rpb24udHlwZSA9PSBuZXh0SW50ZXJzZWN0aW9uLnR5cGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gU2tpcCBwYWlycyBvZiBpbnRlcnNlY3Rpb25zIHdob3NlIHR5cGVzIGFyZSBWZXJ0
ZXhNYXhZLFZlcnRleE1heFkgYW5kIFZlcnRleE1pblksVmVydGV4TWluWS4KKyAgICAgICAgICAg
ICAgICAgICAgaW5kZXggKz0gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAvLyBSZXBsYWNlIHBhaXJzIG9mIGludGVyc2VjdGlvbnMgd2hvc2UgdHlwZXMg
YXJlIFZlcnRleE1pblksVmVydGV4TWF4WSBvciBWZXJ0ZXhNYXhZLFZlcnRleE1pblkgd2l0aCBv
bmUgVmVydGV4TWluWSBpbnRlcnNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0
SW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGludGVyc2VjdGlvbnNbaW5kZXggKyAxXSA9IHRoaXNJbnRlcnNlY3Rpb247CisgICAgICAgICAg
ICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgRXhjbHVz
aW9uUG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gKnRoaXNJbnRlcnNlY3Rpb24uZWRnZTsKKyAgICAg
ICAgYm9vbCBjcm9zc2luZyA9ICF3aW5kQ291bnQ7CisKKyAgICAgICAgaWYgKGZpbGxSdWxlKCkg
PT0gUlVMRV9FVkVOT0REKSB7CisgICAgICAgICAgICB3aW5kQ291bnQgKz0gKHRoaXNFZGdlLnZl
cnRleDIoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpKSA/ICsxIDogLTE7CisgICAgICAg
ICAgICBjcm9zc2luZyA9IGNyb3NzaW5nIHx8ICF3aW5kQ291bnQ7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoKHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBOb3JtYWwpIHx8ICh0aGlzSW50ZXJz
ZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSkpIHsKKyAgICAgICAgICAgIGlmIChjcm9zc2luZykK
KyAgICAgICAgICAgICAgICBpbnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhpc0ludGVyc2VjdGlv
bi5wb2ludC54KCksIGluc2lkZSwgcmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzSW50
ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkgeworICAgICAgICAgICAgaW50IHZlcnRleElu
ZGV4ID0gKHRoaXNFZGdlLnZlcnRleDIoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpKSA/
IHRoaXNFZGdlLmluZGV4MiA6IHRoaXNFZGdlLmluZGV4MTsKKyAgICAgICAgICAgIGlmIChjcm9z
c2luZyAmJiByaWdodFZlcnRleFkodmVydGV4SW5kZXgpID4geSkKKyAgICAgICAgICAgICAgICBp
bnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhpc0VkZ2UubWF4WCgpLCBpbnNpZGUsIHJlc3VsdCk7
CisgICAgICAgIH0gZWxzZSBpZiAodGhpc0ludGVyc2VjdGlvbi50eXBlID09IFZlcnRleFlCb3Ro
KQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChFeGNsdXNpb25JbnRlcnZhbCh0aGlzRWRnZS5t
aW5YKCksIHRoaXNFZGdlLm1heFgoKSkpOworCisgICAgICAgIGluZGV4Kys7CisgICAgfQorfQor
CisvLyBSZXR1cm4gdGhlIFggcHJvamVjdGlvbnMgb2YgdGhlIGVkZ2VzIHRoYXQgb3ZlcmxhcCB5
MSx5Mi4KK3ZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKGZs
b2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KSBjb25z
dAoreworICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBw
aW5nRWRnZXM7CisgICAgbV9lZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpF
ZGdlSW50ZXJ2YWwoeTEsIHkyLCAwKSwgb3ZlcmxhcHBpbmdFZGdlcyk7CisKKyAgICBFZGdlSW50
ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3Zl
cmxhcHBpbmdFZGdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBFeGNsdXNpb25Qb2x5
Z29uRWRnZSAqZWRnZSA9IHN0YXRpY19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3Zlcmxh
cHBpbmdFZGdlc1tpXS5kYXRhKCkpOworICAgICAgICBmbG9hdCB4MSwgeDI7CisKKyAgICAgICAg
aWYgKGVkZ2UtPm1pblkoKSA8IHkxKSB7CisgICAgICAgICAgICBjb21wdXRlWEludGVyc2VjdGlv
bihlZGdlLCB5MSwgaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAgIHgxID0gaW50ZXJzZWN0aW9u
LnBvaW50LngoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB4MSA9IChlZGdlLT52ZXJ0
ZXgxKCkueSgpIDwgZWRnZS0+dmVydGV4MigpLnkoKSkgPyBlZGdlLT52ZXJ0ZXgxKCkueCgpIDog
ZWRnZS0+dmVydGV4MigpLngoKTsKKworICAgICAgICBpZiAoZWRnZS0+bWF4WSgpID4geTIpIHsK
KyAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHkyLCBpbnRlcnNlY3Rpb24p
OworICAgICAgICAgICAgeDIgPSBpbnRlcnNlY3Rpb24ucG9pbnQueCgpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHgyID0gKGVkZ2UtPnZlcnRleDEoKS55KCkgPiBlZGdlLT52ZXJ0ZXgy
KCkueSgpKSA/IGVkZ2UtPnZlcnRleDEoKS54KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOworCisg
ICAgICAgIGlmICh4MSA+IHgyKQorICAgICAgICAgICAgc3RkOjpzd2FwKHgxLCB4Mik7CisKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChFeGNsdXNpb25JbnRlcnZhbCh4MSwgeDIpKTsKKyAgICB9CisK
KyAgICBzb3J0RXhjbHVzaW9uSW50ZXJ2YWxzKHJlc3VsdCk7Cit9CisKK3ZvaWQgRXhjbHVzaW9u
UG9seWdvbjo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9n
aWNhbEJvdHRvbSwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBmbG9hdCB5MSA9
IG1pbllGb3JMb2dpY2FsTGluZShsb2dpY2FsVG9wLCBsb2dpY2FsQm90dG9tKTsKKyAgICBmbG9h
dCB5MiA9IG1heFlGb3JMb2dpY2FsTGluZShsb2dpY2FsVG9wLCBsb2dpY2FsQm90dG9tKTsKKwor
ICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7
CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkxLCB5MVhJbnRlcnZhbHMpOworICAgIGNvbXB1
dGVYSW50ZXJzZWN0aW9ucyh5MiwgeTJYSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxFeGNsdXNp
b25JbnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOworICAgIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxz
KHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBtZXJnZWRJbnRlcnZhbHMpOworCisgICAgVmVj
dG9yPEV4Y2x1c2lvbkludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVFZGdlSW50
ZXJzZWN0aW9ucyh5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiBleGNsdWRlZEludGVydmFsczsKKyAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFs
cyhtZXJnZWRJbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGV4Y2x1ZGVkSW50ZXJ2YWxzKTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNsdWRlZEludGVydmFscy5zaXplKCk7IGkr
KykgeworICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9IGV4Y2x1ZGVkSW50ZXJ2
YWxzW2ldOworICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBp
bnRlcnZhbC54MikpOworICAgIH0KK30KKwordm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpnZXRJbmNs
dWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsQm90dG9tLCBTZWdt
ZW50TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAgIGZsb2F0IHkxID0gbWluWUZvckxvZ2ljYWxM
aW5lKGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOworICAgIGZsb2F0IHkyID0gbWF4WUZvckxv
Z2ljYWxMaW5lKGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOworCisgICAgVmVjdG9yPEV4Y2x1
c2lvbkludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKKyAgICBjb21wdXRlWElu
dGVyc2VjdGlvbnMoeTEsIHkxWEludGVydmFscyk7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25z
KHkyLCB5MlhJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBjb21t
b25JbnRlcnZhbHM7CisgICAgaW50ZXJzZWN0RXhjbHVzaW9uSW50ZXJ2YWxzKHkxWEludGVydmFs
cywgeTJYSW50ZXJ2YWxzLCBjb21tb25JbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyh5
MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBp
bmNsdWRlZEludGVydmFsczsKKyAgICBzdWJ0cmFjdEV4Y2x1c2lvbkludGVydmFscyhjb21tb25J
bnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGluY2x1ZGVkSW50ZXJ2YWxzKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpbmNsdWRlZEludGVydmFscy5zaXplKCk7IGkrKykgeworICAg
ICAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9IGluY2x1ZGVkSW50ZXJ2YWxzW2ldOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBpbnRlcnZhbC54
MikpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMWNiZmU4ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEV4Y2x1c2lvblBvbHlnb25faAorI2RlZmluZSBFeGNsdXNpb25Qb2x5Z29uX2gKKworI2luY2x1
ZGUgIkV4Y2x1c2lvbkludGVydmFsLmgiCisjaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
UE9ESW50ZXJ2YWxUcmVlLmgiCisjaW5jbHVkZSAiV2luZFJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdHJ1Y3QgRXhjbHVzaW9uUG9seWdvbkVkZ2U7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNl
ZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZy4KKyNpZm5kZWYgTkRFQlVHCit0ZW1w
bGF0ZSA8Y2xhc3M+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nOworI2VuZGlmCisKK2NsYXNzIEV4Y2x1
c2lvblBvbHlnb24gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEV4Y2x1c2lvblBvbHlnb24pOworcHVibGljOgorICAgIEV4Y2x1c2lvblBvbHlnb24o
UGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1
bGUpOworCisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4QXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuICgqbV92ZXJ0aWNlcylbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbnVtYmVy
T2ZWZXJ0aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljZXMtPnNpemUoKTsgfQorICAgIFdp
bmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQorCisgICAgdmly
dHVhbCBGbG9hdFJlY3Qgc2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBpbnRlcm5hbFRvTG9naWNhbEJvdW5kaW5nQm94KG1fYm91bmRpbmdCb3gpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZs
b2F0IGxvZ2ljYWxCb3R0b20sIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxv
Z2ljYWxCb3R0b20sIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6Cisg
ICAgZmxvYXQgcmlnaHRWZXJ0ZXhZKHVuc2lnbmVkKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVY
SW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JikgY29uc3Q7
CisgICAgdm9pZCBjb21wdXRlRWRnZUludGVyc2VjdGlvbnMoZmxvYXQgbWluWSwgZmxvYXQgbWF4
WSwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYpIGNvbnN0OworCisgICAgdHlwZWRlZiBQT0RJ
bnRlcnZhbDxmbG9hdCwgRXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBFZGdlSW50ZXJ2YWw7CisgICAg
dHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8ZmxvYXQsIEV4Y2x1c2lvblBvbHlnb25FZGdlKj4gRWRn
ZUludGVydmFsVHJlZTsKKworICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBtX3ZlcnRp
Y2VzOworICAgIFdpbmRSdWxlIG1fZmlsbFJ1bGU7CisgICAgRmxvYXRSZWN0IG1fYm91bmRpbmdC
b3g7CisgICAgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlPiBtX2VkZ2VzOworICAgIEVkZ2VJ
bnRlcnZhbFRyZWUgbV9lZGdlVHJlZTsKK307CisKKy8vIEVkZ2VJbnRlcnZhbFRyZWUgbm9kZXMg
c3RvcmUgbWluWSwgbWF4WSwgYW5kIGEgKCJVc2VyRGF0YSIpIHBvaW50ZXIgdG8gYW4gRXhjbHVz
aW9uUG9seWdvbkVkZ2UuIEVkZ2UgdmVydGV4CisvLyBpbmRleDEgaXMgbGVzcyB0aGFuIGluZGV4
MiwgZXhjZXB0IHRoZSBsYXN0IGVkZ2UsIHdoZXJlIGluZGV4MiBpcyAwLiBXaGVuIGEgcG9seWdv
biBlZGdlIGlzIGRlZmluZWQgYnkgMworLy8gb3IgbW9yZSBjb2xpbmVhciB2ZXJ0aWNlcywgaW5k
ZXgyIGNhbiBiZSB0aGUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNvbGluZWFyIHZlcnRleC4KKwor
c3RydWN0IEV4Y2x1c2lvblBvbHlnb25FZGdlIHsKKyAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0
ZXgxKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChwb2x5Z29uKTsKKyAgICAgICAgcmV0
dXJuIHBvbHlnb24tPnZlcnRleEF0KGluZGV4MSk7CisgICAgfQorCisgICAgY29uc3QgRmxvYXRQ
b2ludCYgdmVydGV4MigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQocG9seWdvbik7Cisg
ICAgICAgIHJldHVybiBwb2x5Z29uLT52ZXJ0ZXhBdChpbmRleDIpOworICAgIH0KKworICAgIGZs
b2F0IG1pblgoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1pbih2ZXJ0ZXgxKCkueCgpLCB2ZXJ0ZXgy
KCkueCgpKTsgfQorICAgIGZsb2F0IG1pblkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1pbih2ZXJ0
ZXgxKCkueSgpLCB2ZXJ0ZXgyKCkueSgpKTsgfQorICAgIGZsb2F0IG1heFgoKSBjb25zdCB7IHJl
dHVybiBzdGQ6Om1heCh2ZXJ0ZXgxKCkueCgpLCB2ZXJ0ZXgyKCkueCgpKTsgfQorICAgIGZsb2F0
IG1heFkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1heCh2ZXJ0ZXgxKCkueSgpLCB2ZXJ0ZXgyKCku
eSgpKTsgfQorCisgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbiogcG9seWdvbjsKKyAgICB1bnNp
Z25lZCBpbmRleDE7CisgICAgdW5zaWduZWQgaW5kZXgyOworfTsKKworLy8gVGhlc2Ugc3RydWN0
dXJlcyBhcmUgdXNlZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZy4xCisjaWZuZGVm
IE5ERUJVRwordGVtcGxhdGUgPD4gc3RydWN0IFZhbHVlVG9TdHJpbmc8ZmxvYXQ+IHsKKyAgICBz
dGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBmbG9hdCB2YWx1ZSkgeyByZXR1cm4gU3RyaW5nOjpu
dW1iZXIodmFsdWUpOyB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPEV4
Y2x1c2lvblBvbHlnb25FZGdlKj4geworICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0IEV4
Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdlKSB7IHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXAgKCVm
LCVmICVmLCVmKSIsIGVkZ2UsIGVkZ2UtPnZlcnRleDEoKS54KCksIGVkZ2UtPnZlcnRleDEoKS55
KCksIGVkZ2UtPnZlcnRleDIoKS54KCksIGVkZ2UtPnZlcnRleDIoKS55KCkpOyB9Cit9OworI2Vu
ZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV4Y2x1c2lvblBvbHln
b25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKaW5kZXgg
MGY0MzBlZi4uYzNlYzhhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblNoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9u
U2hhcGUuY3BwCkBAIC0zMSwxMCArMzEsMTAgQEAKICNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5o
IgogCiAjaW5jbHVkZSAiQmFzaWNTaGFwZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIkV4Y2x1c2lv
blBvbHlnb24uaCIKICNpbmNsdWRlICJFeGNsdXNpb25SZWN0YW5nbGUuaCIKICNpbmNsdWRlICJG
bG9hdFNpemUuaCIKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldpbmRSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC02MCw2ICs2MCwxMSBAQCBzdGF0
aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gY3JlYXRlRXhjbHVzaW9uRWxsaXBzZShjb25z
dCBGbG9hdFBvaW50JiBjZW50ZQogICAgIHJldHVybiBhZG9wdFB0cihuZXcgRXhjbHVzaW9uUmVj
dGFuZ2xlKEZsb2F0UmVjdChjZW50ZXIueCgpIC0gcmFkaWkud2lkdGgoKSwgY2VudGVyLnkoKSAt
IHJhZGlpLmhlaWdodCgpLCByYWRpaS53aWR0aCgpKjIsIHJhZGlpLmhlaWdodCgpKjIpLCByYWRp
aSkpOwogfQogCitzdGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gY3JlYXRlRXhjbHVz
aW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBXaW5k
UnVsZSBmaWxsUnVsZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblBvbHln
b24odmVydGljZXMsIGZpbGxSdWxlKSk7Cit9CisKIC8vIElmIHRoZSB3cml0aW5nTW9kZSBpcyB2
ZXJ0aWNhbCwgdGhlbiB0aGUgQmFzaWNTaGFwZSdzIChwaHlzaWNhbCkgeCBhbmQgeSBjb29yZGlu
YXRlcyBhcmUgc3dhcHBlZCwgc28gdGhhdAogLy8gbGluZSBzZWdtZW50cyBhcmUgcGFyYWxsZWwg
dG8gdGhlIGludGVybmFsIGNvb3JkaW5hdGUgc3lzdGVtJ3MgWCBheGlzLgogCkBAIC04Nyw4ICs5
Miw4IEBAIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IEV4Y2x1c2lvblNoYXBlOjpjcmVhdGVF
eGNsdXNpb25TaGFwZShjb25zdCBCYXNpY1NoYXBlCiAgICAgICAgIGZsb2F0IHJhZGl1c1kgPSBy
YWRpdXNZTGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRp
dXNZTGVuZ3RoLCBib3hIZWlnaHQpOwogCiAgICAgICAgIGV4Y2x1c2lvblNoYXBlID0gaG9yaXpv
bnRhbFdyaXRpbmdNb2RlCi0gICAgICAgICAgPyBjcmVhdGVFeGNsdXNpb25SZWN0YW5nbGUoRmxv
YXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpLCBGbG9hdFNpemUocmFkaXVzWCwgcmFkaXVzWSkp
Ci0gICAgICAgICAgOiBjcmVhdGVFeGNsdXNpb25SZWN0YW5nbGUoRmxvYXRSZWN0KHksIHgsIGhl
aWdodCwgd2lkdGgpLCBGbG9hdFNpemUocmFkaXVzWSwgcmFkaXVzWCkpOworICAgICAgICAgICAg
PyBjcmVhdGVFeGNsdXNpb25SZWN0YW5nbGUoRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQp
LCBGbG9hdFNpemUocmFkaXVzWCwgcmFkaXVzWSkpCisgICAgICAgICAgICA6IGNyZWF0ZUV4Y2x1
c2lvblJlY3RhbmdsZShGbG9hdFJlY3QoeSwgeCwgaGVpZ2h0LCB3aWR0aCksIEZsb2F0U2l6ZShy
YWRpdXNZLCByYWRpdXNYKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtOTksOCArMTA0
LDggQEAgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gRXhjbHVzaW9uU2hhcGU6OmNyZWF0ZUV4
Y2x1c2lvblNoYXBlKGNvbnN0IEJhc2ljU2hhcGUKICAgICAgICAgZmxvYXQgcmFkaXVzID0gIGZs
b2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5yYWRpdXMoKSwgc3RkOjptYXgoYm94SGVpZ2h0LCBi
b3hXaWR0aCkpOwogCiAgICAgICAgIGV4Y2x1c2lvblNoYXBlID0gaG9yaXpvbnRhbFdyaXRpbmdN
b2RlCi0gICAgICAgICAgPyBjcmVhdGVFeGNsdXNpb25DaXJjbGUoRmxvYXRQb2ludChjZW50ZXJY
LCBjZW50ZXJZKSwgcmFkaXVzKQotICAgICAgICAgIDogY3JlYXRlRXhjbHVzaW9uQ2lyY2xlKEZs
b2F0UG9pbnQoY2VudGVyWSwgY2VudGVyWCksIHJhZGl1cyk7CisgICAgICAgICAgICA/IGNyZWF0
ZUV4Y2x1c2lvbkNpcmNsZShGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCByYWRpdXMpCisg
ICAgICAgICAgICA6IGNyZWF0ZUV4Y2x1c2lvbkNpcmNsZShGbG9hdFBvaW50KGNlbnRlclksIGNl
bnRlclgpLCByYWRpdXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTExMiwxMyArMTE3
LDI2IEBAIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IEV4Y2x1c2lvblNoYXBlOjpjcmVhdGVF
eGNsdXNpb25TaGFwZShjb25zdCBCYXNpY1NoYXBlCiAgICAgICAgIGZsb2F0IHJhZGl1c1kgPSBm
bG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1koKSwgYm94SGVpZ2h0KTsKIAogICAg
ICAgICBleGNsdXNpb25TaGFwZSA9IGhvcml6b250YWxXcml0aW5nTW9kZQotICAgICAgICAgID8g
Y3JlYXRlRXhjbHVzaW9uRWxsaXBzZShGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCBGbG9h
dFNpemUocmFkaXVzWCwgcmFkaXVzWSkpCi0gICAgICAgICAgOiBjcmVhdGVFeGNsdXNpb25FbGxp
cHNlKEZsb2F0UG9pbnQoY2VudGVyWSwgY2VudGVyWCksIEZsb2F0U2l6ZShyYWRpdXNZLCByYWRp
dXNYKSk7CisgICAgICAgICAgICA/IGNyZWF0ZUV4Y2x1c2lvbkVsbGlwc2UoRmxvYXRQb2ludChj
ZW50ZXJYLCBjZW50ZXJZKSwgRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpKQorICAgICAgICAg
ICAgOiBjcmVhdGVFeGNsdXNpb25FbGxpcHNlKEZsb2F0UG9pbnQoY2VudGVyWSwgY2VudGVyWCks
IEZsb2F0U2l6ZShyYWRpdXNZLCByYWRpdXNYKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIGNhc2UgQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUE9MWUdPTjoKLSAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1BPTFlHT046IHsK
KyAgICAgICAgY29uc3QgQmFzaWNTaGFwZVBvbHlnb24qIHBvbHlnb24gPSBzdGF0aWNfY2FzdDxj
b25zdCBCYXNpY1NoYXBlUG9seWdvbio+KGJhc2ljU2hhcGUpOworICAgICAgICBjb25zdCBWZWN0
b3I8TGVuZ3RoPiYgdmFsdWVzID0gcG9seWdvbi0+dmFsdWVzKCk7CisgICAgICAgIHNpemVfdCB2
YWx1ZXNTaXplID0gdmFsdWVzLnNpemUoKTsKKyAgICAgICAgQVNTRVJUKCEodmFsdWVzU2l6ZSAl
IDIpKTsKKyAgICAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+KiB2ZXJ0aWNlcyA9IG5ldyBWZWN0b3I8
RmxvYXRQb2ludD4odmFsdWVzU2l6ZSAvIDIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdmFsdWVzU2l6ZTsgaSArPSAyKSB7CisgICAgICAgICAgICBGbG9hdFBvaW50IHZlcnRl
eCgKKyAgICAgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpKSwgYm94
V2lkdGgpLAorICAgICAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkg
KyAxKSwgYm94SGVpZ2h0KSk7CisgICAgICAgICAgICAoKnZlcnRpY2VzKVtpIC8gMl0gPSBob3Jp
em9udGFsV3JpdGluZ01vZGUgPyB2ZXJ0ZXggOiB2ZXJ0ZXgudHJhbnNwb3NlZFBvaW50KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZXhjbHVzaW9uU2hhcGUgPSBjcmVhdGVFeGNsdXNpb25Qb2x5Z29u
KGFkb3B0UHRyKHZlcnRpY2VzKSwgcG9seWdvbi0+d2luZFJ1bGUoKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLmNwcAppbmRleCBlMGQ2ZDE5Li4zN2QxZjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcApAQCAtNzMsNyArNzMs
NyBAQCBib29sIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzo6aXNFeGNsdXNpb25TaGFwZUluc2lk
ZUluZm9FbmFibGVkRm9yUmVuZGVyQmxvY2soYwogewogICAgIC8vIEZJWE1FOiBCdWcgODk3MDc6
IEVuYWJsZSBzaGFwZSBpbnNpZGUgZm9yIG5vbi1yZWN0YW5ndWxhciBzaGFwZXMKICAgICBCYXNp
Y1NoYXBlKiBzaGFwZSA9IGJsb2NrLT5zdHlsZSgpLT5zaGFwZUluc2lkZSgpOwotICAgIHJldHVy
biAoc2hhcGUgJiYgc2hhcGUtPnR5cGUoKSA9PSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9SRUNU
QU5HTEUpOworICAgIHJldHVybiBzaGFwZSAmJiAoc2hhcGUtPnR5cGUoKSA9PSBCYXNpY1NoYXBl
OjpCQVNJQ19TSEFQRV9SRUNUQU5HTEUgfHwgc2hhcGUtPnR5cGUoKSA9PSBCYXNpY1NoYXBlOjpC
QVNJQ19TSEFQRV9QT0xZR09OKTsKIH0KIAogdm9pZCBFeGNsdXNpb25TaGFwZUluc2lkZUluZm86
OnJlbW92ZUV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb0ZvclJlbmRlckJsb2NrKGNvbnN0IFJlbmRl
ckJsb2NrKiBibG9jaykK
</data>
<flag name="review"
          id="180033"
          type_id="1"
          status="-"
          setter="krit"
    />
    <flag name="commit-queue"
          id="180034"
          type_id="3"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167402</attachid>
            <date>2012-10-05 15:45:16 -0700</date>
            <delta_ts>2012-10-08 08:16:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>37993</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZGE3ODAyLi5lMjlmZmYwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDkt
MjcgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBFeGNs
dXNpb25zXSBBZGQgc3VwcG9ydCBmb3IgcG9seWdvbmFsIHNoYXBlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY4MTEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWZXJpZnkgdGhhdCBhIHJlY3Rhbmd1bGFy
IHNoYXBlLWluc2lkZSBzcGVjaWZpZWQgYXMgYSBwb2x5Z29uIHdvcmtzIGFzIGV4cGVjdGVkIGZv
ciBhbGwgd3JpdGluZy1tb2Rlcy4KKworICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1p
bnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBv
bHlnb24tcmVjdGFuZ2xlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTEwLTA1ICBKdWxpZW4gQ2hhZmZy
YWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgQ2hyb21p
dW0gZ2FyZGVuaW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25zL3No
YXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtcG9seWdvbi1yZWN0YW5nbGUtZXhwZWN0ZWQuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBv
bHlnb24tcmVjdGFuZ2xlLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjViNDhiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXhj
bHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLWV4cGVj
dGVkLmh0bWwKQEAgLTAsMCArMSw0OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHN0eWxlPgorICAgICNzaGFwZS1pbnNpZGUtaG9yaXpvbnRhbCB7CisgICAgICAgIHBhZGRp
bmc6IDIwcHggMzVweCAyNXB4IDE1cHg7CisgICAgICAgIHdpZHRoOiAxNTBweDsKKyAgICAgICAg
aGVpZ2h0OiAxNzVweDsKKyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKyAgICAj
c2hhcGUtaW5zaWRlLXZlcnRpY2FsLWxyIHsKKyAgICAgICAgcGFkZGluZzogMjBweCAzNXB4IDI1
cHggMTVweDsKKyAgICAgICAgd2lkdGg6IDE1MHB4OworICAgICAgICBoZWlnaHQ6IDE3NXB4Owor
ICAgICAgICAtd2Via2l0LXdyaXRpbmctbW9kZTogdmVydGljYWwtbHI7CisgICAgICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgICB9CisgICAgI3NoYXBlLWluc2lkZS12ZXJ0aWNhbC1ybCB7Cisg
ICAgICAgIHBhZGRpbmc6IDIwcHggMzVweCAyNXB4IDE1cHg7CisgICAgICAgIHdpZHRoOiAxNTBw
eDsKKyAgICAgICAgaGVpZ2h0OiAxNzVweDsKKyAgICAgICAgLXdlYmtpdC13cml0aW5nLW1vZGU6
IHZlcnRpY2FsLXJsOworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgfQorICAgICNi
b3JkZXIgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIHRvcDogMTNweDsK
KyAgICAgICAgbGVmdDogMThweDsKKyAgICAgICAgd2lkdGg6IDE1MHB4OworICAgICAgICBoZWln
aHQ6IDE3NXB4OworICAgICAgICBib3JkZXI6IDJweCBzb2xpZCBibHVlOworICAgIH0KKzwvc3R5
bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJzaGFwZS1pbnNpZGUtaG9yaXpvbnRh
bCI+CisgICAgICAgIDxkaXYgaWQ9ImJvcmRlciI+PC9kaXY+CisgICAgICAgIFRoaXMgdGV4dCBz
aG91bGQgYmUgY29udGFpbmVkIGJ5IHRoZSBibHVlIHNxdWFyZS4KKyAgICA8L2Rpdj4KKyAgICA8
ZGl2IGlkPSJzaGFwZS1pbnNpZGUtdmVydGljYWwtbHIiPgorICAgICAgICA8ZGl2IGlkPSJib3Jk
ZXIiPjwvZGl2PgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGNvbnRhaW5lZCBieSB0aGUg
Ymx1ZSBzcXVhcmUuCisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0ic2hhcGUtaW5zaWRlLXZlcnRp
Y2FsLXJsIj4KKyAgICAgICAgPGRpdiBpZD0iYm9yZGVyIj48L2Rpdj4KKyAgICAgICAgVGhpcyB0
ZXh0IHNob3VsZCBiZSBjb250YWluZWQgYnkgdGhlIGJsdWUgc3F1YXJlLgorICAgIDwvZGl2Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25z
L3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtcG9seWdvbi1yZWN0YW5nbGUuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24t
cmVjdGFuZ2xlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5YWJl
MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1p
bnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLmh0bWwKQEAgLTAsMCArMSw1MyBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICBpZiAod2lu
ZG93LmludGVybmFscykKKyAgICAgICAgd2luZG93LmludGVybmFscy5zZXR0aW5ncy5zZXRDU1NF
eGNsdXNpb25zRW5hYmxlZCh0cnVlKTsKKzwvc2NyaXB0PgorPHN0eWxlPgorICAgICNzaGFwZS1p
bnNpZGUtaG9yaXpvbnRhbCB7CisgICAgICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgaGVpZ2h0
OiAyMjBweDsKKyAgICAgICAgLXdlYmtpdC1zaGFwZS1pbnNpZGU6IHBvbHlnb24oMTVweCAyMHB4
LCAxNjVweCAyMHB4LCAxNjVweCAxOTVweCwgMTVweCAxOTVweCk7CisgICAgICAgIHBvc2l0aW9u
OiByZWxhdGl2ZTsKKyAgICB9CisgICAgI3NoYXBlLWluc2lkZS12ZXJ0aWNhbC1sciB7CisgICAg
ICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgaGVpZ2h0OiAyMjBweDsKKyAgICAgICAgLXdlYmtp
dC1zaGFwZS1pbnNpZGU6IHBvbHlnb24oMTVweCAyMHB4LCAxNjVweCAyMHB4LCAxNjVweCAxOTVw
eCwgMTVweCAxOTVweCk7CisgICAgICAgIC13ZWJraXQtd3JpdGluZy1tb2RlOiB2ZXJ0aWNhbC1s
cjsKKyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKyAgICAjc2hhcGUtaW5zaWRl
LXZlcnRpY2FsLXJsIHsKKyAgICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgICBoZWlnaHQ6IDIy
MHB4OworICAgICAgICAtd2Via2l0LXNoYXBlLWluc2lkZTogcG9seWdvbigxNXB4IDIwcHgsIDE2
NXB4IDIwcHgsIDE2NXB4IDE5NXB4LCAxNXB4IDE5NXB4KTsKKyAgICAgICAgLXdlYmtpdC13cml0
aW5nLW1vZGU6IHZlcnRpY2FsLXJsOworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAg
fQorICAgICNib3JkZXIgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIHRv
cDogMTNweDsKKyAgICAgICAgbGVmdDogMThweDsKKyAgICAgICAgd2lkdGg6IDE1MHB4OworICAg
ICAgICBoZWlnaHQ6IDE3NXB4OworICAgICAgICBib3JkZXI6IDJweCBzb2xpZCBibHVlOworICAg
IH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJzaGFwZS1pbnNpZGUt
aG9yaXpvbnRhbCI+CisgICAgICAgIDxkaXYgaWQ9ImJvcmRlciI+PC9kaXY+CisgICAgICAgIFRo
aXMgdGV4dCBzaG91bGQgYmUgY29udGFpbmVkIGJ5IHRoZSBibHVlIHNxdWFyZS4KKyAgICA8L2Rp
dj4KKyAgICA8ZGl2IGlkPSJzaGFwZS1pbnNpZGUtdmVydGljYWwtbHIiPgorICAgICAgICA8ZGl2
IGlkPSJib3JkZXIiPjwvZGl2PgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGNvbnRhaW5l
ZCBieSB0aGUgYmx1ZSBzcXVhcmUuCisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0ic2hhcGUtaW5z
aWRlLXZlcnRpY2FsLXJsIj4KKyAgICAgICAgPGRpdiBpZD0iYm9yZGVyIj48L2Rpdj4KKyAgICAg
ICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBjb250YWluZWQgYnkgdGhlIGJsdWUgc3F1YXJlLgorICAg
IDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAyZDJjOTNl
Li4wMjJjMmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjAzNyw2ICsyMDM3LDcgQEAgU0VU
KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAKICAgICByZW5k
ZXJpbmcvRWxsaXBzaXNCb3guY3BwCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNw
cAorICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcAogICAgIHJlbmRlcmluZy9FeGNs
dXNpb25SZWN0YW5nbGUuY3BwCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcAogICAg
IHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTU1
ZDRkYy4uMWQwODk0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEyLTA5LTI3ICBI
YW5zIE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgRXhjbHVzaW9u
c10gQWRkIHN1cHBvcnQgZm9yIHBvbHlnb25hbCBzaGFwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2ODExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCB2ZXJzaW9uIG9mIHRoZSBsYXlvdXQg
c3VwcG9ydCBmb3IgcG9seWdvbmFsIGV4Y2x1c2lvbiBzaGFwZXM6IHRoZSBFeGNsdXNpb25Qb2x5
Z29uIGNsYXNzLgorICAgICAgICBTdXBwb3J0cyB0aGUgcHVibGljIEV4Y2x1c2lvblNoYXBlIG9w
ZXJhdGlvbnMgdXNpbmcgdGhlIGFsZ29yaXRobSBkZXNjcmliZWQgaGVyZToKKyAgICAgICAgaHR0
cDovL2hhbnNtdWxsZXItd2Via2l0LmJsb2dzcG90LmNvbS8yMDEyLzA2L2hvcml6b250YWwtYm94
LXBvbHlnb24taW50ZXJzZWN0aW9uLWZvci5odG1sLgorICAgICAgICBBbHRob3VnaCBib3RoIHRo
ZSAiaW5jbHVkZWQiIGFuZCAiZXhjbHVkZWQiIG9wZXJhdGlvbnMgYXJlIHN1cHBvcnRlZCwgb25s
eSB0aGUgZm9ybWVyIGlzCisgICAgICAgIHVzZWQsIHNpbmNlIG9ubHkgc2hhcGUtaW5zaWRlIGlz
IHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50LgorCisgICAgICAgIFRoZSBFeGNsdXNpb25Qb2x5Z29u
IGNsYXNzIHN0b3JlcyB0aGUgcG9seWdvbidzIGVkZ2VzIGluIGFuIGludGVydmFsIHRyZWUuCisK
KyAgICAgICAgUG9seWdvbiBlZGdlcyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIEV4Y2x1c2lvblBv
bHlnb25FZGdlIHN0cnVjdCwgd2hpY2ggcmVjb3JkcyB0aGUgaW5kaWNlcyBvZgorICAgICAgICB0
aGUgcGFpciBvZiB2ZXJ0aWNlcyBqb2luZWQgYnkgdGhlIGVkZ2UuICBFZGdlIHZlcnRleCBpbmRl
eDEgaXMgdXN1YWxseSBsZXNzIHRoYW4gaW5kZXgyLCBleGNlcHQKKyAgICAgICAgdGhlIGxhc3Qg
ZWRnZSB3aGVyZSBpbmRleDIgaXMgMC4gIFdlIHBsYW4gdG8gaW1wcm92ZSB0aGUgYWxnb3JpdGht
IHRoYXQgY3JlYXRlcyB0aGUgZWRnZXMKKyAgICAgICAgYnkgc3Bhbm5pbmcgdmVydGljZXMgY29u
dGFpbmVkIGluIHNlcXVlbmNlcyBvZiBtb3JlIHRoYW4gdHdvIGNvbGluZWFyIHZlcnRpY2VzLiBG
b3IgZXhhbXBsZSwKKyAgICAgICAgYSB0cmlhbmd1bGFyIHBvbHlnb24gbWlnaHQgYmUgc3BlY2lm
aWVkIHdpdGggNSB2ZXJ0aWNlcyBsaWtlIHRoaXM6IDMsMCA1LDAsIDUsNSwgNCw0IDIsMiwgMCww
LgorICAgICAgICBCeSBzcGFubmluZyB0aGUgZXh0cmEgY29saW5lYXIgcG9pbnRzOiAwLDAgNSww
LCA1LDUsIHdoaWNoIGltcGxpZXMgaW5kZXgxLWluZGV4MiBlZGdlczogNS0xIDEtMiAyLTUuCisK
KyAgICAgICAgQWx0aG91Z2ggdGhlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGNvbXBsZXggcG9s
eWdvbnMsIHRoZSBsYXlvdXQgY29kZSBpcyBsaW1pdGVkIHRvCisgICAgICAgIGVzc2VudGlhbGx5
IHJlY3Rhbmd1bGFyIHNoYXBlcyB1bnRpbCBhIHBhdGNoIGZvciBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY4MTMKKyAgICAgICAgbGFuZHMuCisKKyAgICAgICAgVGVz
dDogZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtcG9seWdvbi1yZWN0
YW5nbGUuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5n
L0V4Y2x1c2lvblBvbHlnb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoRWRnZUludGVyc2VjdGlvbik6IEludGVybmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBpbnRlcnNl
Y3Rpb24gb2YgYSBwb2x5Z29uIGVkZ2UgYW5kIGEgaG9yaXpvbnRhbCBsaW5lLgorICAgICAgICAo
V2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6RXhjbHVzaW9uUG9seWdvbik6IFNlZSB0aGUgaW50
cm9kdWN0b3J5IHRleHQgYWJvdmUgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhpcyB0eXBlLgorICAg
ICAgICAoV2ViQ29yZTo6Y29tcHV0ZVhJbnRlcnNlY3Rpb24pOiBGaW5kIGFuZCBjbGFzc2lmeSB0
aGUgWCBpbnRlcmNlcHQgb2YgYSBwb2x5Z29uIGVkZ2Ugd2l0aCBob3Jpem9udGFsIGxpbmUsIGlm
IGFueS4KKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OnJpZ2h0VmVydGV4WSk6
IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZGVjaWRlIGlmIGEgaG9yaXpvbnRhbCBsaW5lICJjcm9z
c2VzIiBhIHZlcnRleC4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEludGVydmFsWCk6IEFwcGVu
ZCBhbiB4IGNvb3JkaW5hdGUgdG8gYSB2ZWN0b3Igb2YgRXhjbHVzaW9uSW50ZXJ2YWxzLgorICAg
ICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZVhJbnRlcnNlY3Rpb25zKTog
UmV0dXJuIGEgdmVjdG9yIG9mIHRoZSBpbnRlcnNlY3Rpb25zIG9mIGEgaG9yaXpvbnRhbCBsaW5l
IHdpdGggdGhlIHBvbHlnb24ncyBlZGdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBv
bHlnb246OmNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyk6IFJldHVybiBhIHZlY3RvciBvZiB0aGUg
WCBwcm9qZWN0aW9ucyBvZiB0aGUgZWRnZXMgdGhhdCBvdmVybGFwIGEgaG9yaXpvbmFsIHJlY3Rh
bmdsZS4KKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmdldEV4Y2x1ZGVkSW50
ZXJ2YWxzKTogUmV0dXJuIGEgU2VnbWVudExpc3Qgb2YgdGhlIFggaW50ZXJ2YWxzIHdpdGhpbiBh
IGhvcml6b250YWwgcmVjdGFuZ2xlIHRoYXQgb3ZlcmxhcCB0aGUgcG9seWdvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1ZGVkSW50ZXJ2YWxzKTogUmV0dXJu
IHRoZSBYIGludGVydmFscyB3aXRoaW4gYSBob3Jpem9udGFsIHJlY3RhbmdsZSB0aGF0IGZpdCBp
bnNpZGUgdGhlIHBvbHlnb24uCisgICAgICAgICogcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24u
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4Y2x1c2lvblBvbHlnb24p
OgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Z2V0WEF0KTogWCBjb29yZGlu
YXRlIG9mIGEgcG9seWdvbiB2ZXJ0ZXgKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHln
b246OmdldFlBdCk6IFkgY29vcmRpbmF0ZSBvZiBhIHBvbHlnb24gdmVydGV4CisgICAgICAgIChX
ZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpudW1iZXJPZlZlcnRpY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmZpbGxSdWxlKTogQSBXaW5kUnVsZSB2YWx1ZSB0aGF0
IGRlZmluZXMgImluc2lkZSIgZm9yIHNlbGYtaW50ZXJzZWN0aW5nIHBvbHlnb25zLgorICAgICAg
ICAoRXhjbHVzaW9uUG9seWdvbkVkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9s
eWdvbkVkZ2U6OkV4Y2x1c2lvblBvbHlnb25FZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1
c2lvblBvbHlnb25FZGdlOjp2ZXJ0ZXgxKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBv
bHlnb25FZGdlOjp2ZXJ0ZXgyKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25F
ZGdlOjptaW5YKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjptaW5Z
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjptYXhYKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjptYXhZKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRXhjbHVz
aW9uUG9seWdvbik6IFJldHVybiBhIG5ldyBFeGNsdXNpb25Qb2x5Z29uLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhjbHVzaW9u
U2hhcGUpOiBBZGRlZCBzdXBwb3J0IGZvciBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9QT0xZR09O
LgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjppc0V4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mb0VuYWJsZWRGb3JSZW5kZXJCbG9jayk6IEVuYWJsZSBCQVNJQ19TSEFQRV9QT0xZ
R09OIHNoYXBlcyBmb3IgUmVuZGVyQmxvY2tzLgorCiAyMDEyLTEwLTA1ICBFcmljIFNlaWRlbCAg
PGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgbmVlZGxlc3MgdmlydHVhbCBjYWxs
cyBhbmQgaW5saW5lIFJlbmRlclN0eWxlOjpsb2dpY2FsKiB0byBtYWtlIHRhYmxlIGxheW91dCBm
YXN0ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDFlOTdiNTcuLjI1NGRiZjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDkxMiw2ICs0OTEyLDggQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3gu
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmggXAorCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25SZWN0YW5nbGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNo
YXBlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAwNzhiNjlhLi44OWEyNTFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
QEAgLTExMDcsNiArMTEwNyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9Db3VudGVy
Tm9kZS5jcHAgXAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgXAogICAgIHJlbmRlcmlu
Zy9FeGNsdXNpb25JbnRlcnZhbC5jcHAgXAorICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29u
LmNwcCBcCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAgXAogICAgIHJlbmRl
cmluZy9FeGNsdXNpb25TaGFwZS5jcHAgXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8uY3BwIFwKQEAgLTIyOTgsNiArMjI5OSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJl
bmRlcmluZy9Db3VudGVyTm9kZS5oIFwKICAgICByZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBcCiAg
ICAgcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmggXAorICAgIHJlbmRlcmluZy9FeGNsdXNp
b25Qb2x5Z29uLmggXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaCBcCiAgICAg
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmggXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8uaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZDEyMWI3ZC4uMTBiODZmOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMzI4Nyw2ICszMjg3LDggQEAKICAgICAgICAgICAgICdyZW5kZXJp
bmcvRWxsaXBzaXNCb3guaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvbkludGVy
dmFsLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmgnLAor
ICAgICAgICAgICAgJ3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCcsCisgICAgICAgICAg
ICAncmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9FeGNsdXNp
b25SZWN0YW5nbGUuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4
IGVmMmFhZjAuLjBkNmJlNjcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCkBAIC0zODM2Myw2ICszODM2MywxNCBAQAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAgICAgICAg
ICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
ZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25Qb2x5Z29uLmNwcCIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxl
PgorICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5oIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAg
ICA8L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25SZWN0
YW5nbGUuY3BwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAg
ICAgICAgICAgICAgICA8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTA0MTFkNC4uZDAzYTg0NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTgzNyw2
ICsxODM3LDggQEAKIAkJNkU4Nzk4QkQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3Rh
bmdsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4
Nzk4QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICovOyB9OwogCQk2
RTg3OThCRTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4QjgxNUY4MUU0QTAwQkZF
NEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCAqLzsgfTsKIAkJNkU4Nzk4QkYxNUY4MUU0QTAwQkZF
NEFBIC8qIEV4Y2x1c2lvblNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2RTg3OThCOTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RUFG
MzQwRjE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUFGMzQwRDE2MTM4NjlBMDA4NTk2
MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgKi87IH07CisJCTZFQUYzNDEwMTYxMzg2OUEwMDg1
OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9s
eWdvbi5oICovOyB9OwogCQk2RUJDNUVBRjEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJy
YXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVC
QzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLzsgfTsKIAkJNkVC
QzVFQjAxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEg
LyogSlNGbG9hdDY0QXJyYXkuaCAqLzsgfTsKIAkJNkVCRjBFNDgxMkE4OTI2MTAwREIxNzA5IC8q
IE9FU1RleHR1cmVGbG9hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RUJGMEU0NTEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNw
cCAqLzsgfTsKQEAgLTkwMzQsNiArOTAzNiw4IEBACiAJCTZFODc5OEI3MTVGODFFNEEwMEJGRTRB
QSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRXhjbHVzaW9uUmVjdGFuZ2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZF
ODc5OEI4MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25TaGFwZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZFODc5OEI5MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25T
aGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25TaGFwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUg
LyogRXhjbHVzaW9uUG9seWdvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBFeGNsdXNpb25Qb2x5Z29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NkVBRjM0MEUxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uUG9seWdvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RUJDNUQ4MDEzOEI0QzRFMDBBMENGOEEgLyogRmxvYXQ2NEFycmF5
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBGbG9hdDY0QXJyYXkuaWRsOyBwYXRoID0gY2Fu
dmFzL0Zsb2F0NjRBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkM1
RUFEMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJh
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEzMTUsNiArMjEzMTksOCBAQAogCQkJCUE4
Q0ZGNkJEMEExNTYxMTgwMDBBNDIzNCAvKiBFbGxpcHNpc0JveC5oICovLAogCQkJCTZFODc5OEI0
MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5jcHAgKi8sCiAJCQkJNkU4Nzk4
QjUxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmggKi8sCisJCQkJNkVBRjM0
MEQxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwICovLAorCQkJCTZFQUYz
NDBFMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggKi8sCiAJCQkJNkU4Nzk4
QjYxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgKi8sCiAJCQkJNkU4
Nzk4QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICovLAogCQkJCTZF
ODc5OEI4MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi8sCkBAIC0yNTU0
MSw2ICsyNTU0Nyw3IEBACiAJCQkJOTMxQ0JEMEYxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxQ0JEMTExNjFBNDRF
OTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Qy
NTY1QkExNjFFNDZBOTAwNTU2MzREIC8qIENhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRMaXN0ZW5l
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkVBRjM0MTAxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1
c2lvblBvbHlnb24uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjg2MzgsNiArMjg2NDUsNyBAQAogCQkJ
CTkzMUNCRDBFMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMxQ0JEMTAxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9s
bGluZ1N0YXRlVHJlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzFDQkQxMzE2MUE0NEY4MDBF
NEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNkVB
RjM0MEYxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcwNGFiZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcApAQCAtMCww
ICsxLDMwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29y
cG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQor
ICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNsdXNp
b25Qb2x5Z29uLmgiCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2VudW0gRWRnZUludGVyc2VjdGlvblR5cGUgeworICAgIE5vcm1hbCwKKyAg
ICBWZXJ0ZXhNaW5ZLAorICAgIFZlcnRleE1heFksCisgICAgVmVydGV4WUJvdGgKK307CisKK3N0
cnVjdCBFZGdlSW50ZXJzZWN0aW9uIHsKKyAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSog
ZWRnZTsKKyAgICBGbG9hdFBvaW50IHBvaW50OworICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHR5
cGU7Cit9OworCitzdGF0aWMgYm9vbCBjb21wYXJlRWRnZU1pblkoY29uc3QgRXhjbHVzaW9uUG9s
eWdvbkVkZ2UqIGUxLCBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZTIpCit7CisgICAgcmV0
dXJuIGUxLT5taW5ZKCkgPCBlMi0+bWluWSgpOworfQorCitFeGNsdXNpb25Qb2x5Z29uOjpFeGNs
dXNpb25Qb2x5Z29uKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdp
bmRSdWxlIGZpbGxSdWxlKQorICAgIDogRXhjbHVzaW9uU2hhcGUoKQorICAgICwgbV92ZXJ0aWNl
cyh2ZXJ0aWNlcykKKyAgICAsIG1fZmlsbFJ1bGUoZmlsbFJ1bGUpCit7CisgICAgLy8gRklYTUU6
IEhhbmRsZSBwb2x5Z29ucyBkZWZpbmVkIHdpdGggbGVzcyB0aGFuIDMgbm9uLWNvbGluZWFyIHZl
cnRpY2VzLgorCisgICAgdW5zaWduZWQgblZlcnRpY2VzID0gbnVtYmVyT2ZWZXJ0aWNlcygpOwor
ICAgIG1fZWRnZXMucmVzaXplKG5WZXJ0aWNlcyk7CisgICAgVmVjdG9yPEV4Y2x1c2lvblBvbHln
b25FZGdlKj4gc29ydGVkRWRnZXNNaW5ZKG5WZXJ0aWNlcyk7CisKKyAgICBjb25zdCBGbG9hdFBv
aW50JiB2ZXJ0ZXgwID0gdmVydGV4QXQoMCk7CisgICAgZmxvYXQgbWluWCA9IHZlcnRleDAueCgp
OworICAgIGZsb2F0IG1pblkgPSB2ZXJ0ZXgwLnkoKTsKKyAgICBmbG9hdCBtYXhYID0gbWluWDsK
KyAgICBmbG9hdCBtYXhZID0gbWluWTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
VmVydGljZXM7IGkrKykgeworICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXggPSB2ZXJ0
ZXhBdChpKTsKKworICAgICAgICBtaW5YID0gc3RkOjptaW4odmVydGV4LngoKSwgbWluWCk7Cisg
ICAgICAgIG1heFggPSBzdGQ6Om1heCh2ZXJ0ZXgueCgpLCBtYXhYKTsKKyAgICAgICAgbWluWSA9
IHN0ZDo6bWluKHZlcnRleC55KCksIG1pblkpOworICAgICAgICBtYXhZID0gc3RkOjptYXgodmVy
dGV4LnkoKSwgbWF4WSk7CisKKyAgICAgICAgbV9lZGdlc1tpXS5wb2x5Z29uID0gdGhpczsKKyAg
ICAgICAgbV9lZGdlc1tpXS5pbmRleDEgPSBpOworICAgICAgICBtX2VkZ2VzW2ldLmluZGV4MiA9
IChpICsgMSkgJSBuVmVydGljZXM7CisKKyAgICAgICAgc29ydGVkRWRnZXNNaW5ZW2ldID0gJm1f
ZWRnZXNbaV07CisgICAgfQorCisgICAgbV9ib3VuZGluZ0JveC5zZXRYKG1pblgpOworICAgIG1f
Ym91bmRpbmdCb3guc2V0WShtaW5ZKTsKKyAgICBtX2JvdW5kaW5nQm94LnNldFdpZHRoKG1heFgg
LSBtaW5YKTsKKyAgICBtX2JvdW5kaW5nQm94LnNldEhlaWdodChtYXhZIC0gbWluWSk7CisKKyAg
ICBzdGQ6OnNvcnQoc29ydGVkRWRnZXNNaW5ZLmJlZ2luKCksIHNvcnRlZEVkZ2VzTWluWS5lbmQo
KSwgV2ViQ29yZTo6Y29tcGFyZUVkZ2VNaW5ZKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2VkZ2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEV4Y2x1c2lvblBvbHlnb25FZGdl
KiBlZGdlID0gJm1fZWRnZXNbaV07CisgICAgICAgIG1fZWRnZVRyZWUuYWRkKEVkZ2VJbnRlcnZh
bChlZGdlLT5taW5ZKCksIGVkZ2UtPm1heFkoKSwgZWRnZSkpOworICAgIH0KK30KKworc3RhdGlj
IGJvb2wgY29tcHV0ZVhJbnRlcnNlY3Rpb24oY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVk
Z2VQb2ludGVyLCBmbG9hdCB5LCBFZGdlSW50ZXJzZWN0aW9uJiByZXN1bHQpCit7CisgICAgY29u
c3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIGVkZ2UgPSAqZWRnZVBvaW50ZXI7CisKKyAgICBpZiAo
ZWRnZS5taW5ZKCkgPiB5IHx8IGVkZ2UubWF4WSgpIDwgeSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2UudmVydGV4MSgpOworICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZlcnRleDIoKTsKKyAgICBmbG9hdCBk
eSA9IHZlcnRleDIueSgpIC0gdmVydGV4MS55KCk7CisKKyAgICBmbG9hdCBpbnRlcnNlY3Rpb25Y
OworICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIGludGVyc2VjdGlvblR5cGU7CisKKyAgICBpZiAo
IWR5KSB7CisgICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhZQm90aDsKKyAgICAgICAg
aW50ZXJzZWN0aW9uWCA9IGVkZ2UubWluWCgpOworICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdlLm1p
blkoKSkgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4TWluWTsKKyAgICAgICAg
aW50ZXJzZWN0aW9uWCA9ICh2ZXJ0ZXgxLnkoKSA8IHZlcnRleDIueSgpKSA/IHZlcnRleDEueCgp
IDogdmVydGV4Mi54KCk7CisgICAgfSBlbHNlIGlmICh5ID09IGVkZ2UubWF4WSgpKSB7CisgICAg
ICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhNYXhZOworICAgICAgICBpbnRlcnNlY3Rpb25Y
ID0gKHZlcnRleDEueSgpID4gdmVydGV4Mi55KCkpID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gTm9ybWFsOworICAg
ICAgICBpbnRlcnNlY3Rpb25YID0gKCh5IC0gdmVydGV4MS55KCkpICogKHZlcnRleDIueCgpIC0g
dmVydGV4MS54KCkpIC8gZHkpICsgdmVydGV4MS54KCk7CisgICAgfQorCisgICAgcmVzdWx0LmVk
Z2UgPSBlZGdlUG9pbnRlcjsKKyAgICByZXN1bHQudHlwZSA9IGludGVyc2VjdGlvblR5cGU7Cisg
ICAgcmVzdWx0LnBvaW50LnNldChpbnRlcnNlY3Rpb25YLCB5KTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitmbG9hdCBFeGNsdXNpb25Qb2x5Z29uOjpyaWdodFZlcnRleFkodW5zaWduZWQgaW5k
ZXgpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgblZlcnRpY2VzID0gbnVtYmVyT2ZWZXJ0aWNlcygp
OworICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSB2ZXJ0ZXhBdCgoaW5kZXggKyAxKSAl
IG5WZXJ0aWNlcyk7CisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IHZlcnRleEF0KChp
bmRleCAtIDEpICUgblZlcnRpY2VzKTsKKworICAgIGlmICh2ZXJ0ZXgxLngoKSA9PSB2ZXJ0ZXgy
LngoKSkKKyAgICAgICAgcmV0dXJuIHZlcnRleDEueSgpID4gdmVydGV4Mi55KCkgPyB2ZXJ0ZXgx
LnkoKSA6IHZlcnRleDIueSgpOworICAgIHJldHVybiB2ZXJ0ZXgxLngoKSA+IHZlcnRleDIueCgp
ID8gdmVydGV4MS55KCkgOiB2ZXJ0ZXgyLnkoKTsKK30KKworc3RhdGljIGJvb2wgYXBwZW5kSW50
ZXJ2YWxYKGZsb2F0IHgsIGJvb2wgaW5zaWRlLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiBy
ZXN1bHQpCit7CisgICAgaWYgKCFpbnNpZGUpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoRXhjbHVz
aW9uSW50ZXJ2YWwoeCkpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0W3Jlc3VsdC5zaXplKCkg
LSAxXS54MiA9IHg7CisKKyAgICByZXR1cm4gIWluc2lkZTsKK30KKworc3RhdGljIGJvb2wgY29t
cGFyZUVkZ2VJbnRlcnNlY3Rpb25YKGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlv
bjEsIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjIpCit7CisgICAgZmxvYXQg
eDEgPSBpbnRlcnNlY3Rpb24xLnBvaW50LngoKTsKKyAgICBmbG9hdCB4MiA9IGludGVyc2VjdGlv
bjIucG9pbnQueCgpOworICAgIHJldHVybiAoeDEgPT0geDIpID8gaW50ZXJzZWN0aW9uMS50eXBl
IDwgaW50ZXJzZWN0aW9uMi50eXBlIDogeDEgPCB4MjsKK30KKwordm9pZCBFeGNsdXNpb25Qb2x5
Z29uOjpjb21wdXRlWEludGVyc2VjdGlvbnMoZmxvYXQgeSwgVmVjdG9yPEV4Y2x1c2lvbkludGVy
dmFsPiYgcmVzdWx0KSBjb25zdAoreworICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uOjpFZGdl
SW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7CisgICAgbV9lZGdlVHJlZS5hbGxPdmVybGFwcyhF
eGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwoeSwgeSwgMCksIG92ZXJsYXBwaW5nRWRnZXMp
OworCisgICAgVmVjdG9yPEVkZ2VJbnRlcnNlY3Rpb24+IGludGVyc2VjdGlvbnM7CisgICAgRWRn
ZUludGVyc2VjdGlvbiBpbnRlcnNlY3Rpb247CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG92ZXJsYXBwaW5nRWRnZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgRXhjbHVzaW9uUG9seWdv
bkVkZ2UqIGVkZ2UgPSBzdGF0aWNfY2FzdDxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+KG92ZXJsYXBw
aW5nRWRnZXNbaV0uZGF0YSgpKTsKKyAgICAgICAgaWYgKGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVk
Z2UsIHksIGludGVyc2VjdGlvbikpCisgICAgICAgICAgICBpbnRlcnNlY3Rpb25zLmFwcGVuZChp
bnRlcnNlY3Rpb24pOworICAgIH0KKyAgICBpZiAoaW50ZXJzZWN0aW9ucy5zaXplKCkgPCAyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OnNvcnQoaW50ZXJzZWN0aW9ucy5iZWdpbigpLCBp
bnRlcnNlY3Rpb25zLmVuZCgpLCBXZWJDb3JlOjpjb21wYXJlRWRnZUludGVyc2VjdGlvblgpOwor
CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIGludCB3aW5kQ291bnQgPSAwOworICAgIGJv
b2wgaW5zaWRlID0gZmFsc2U7CisKKyAgICB3aGlsZSAoaW5kZXggPCBpbnRlcnNlY3Rpb25zLnNp
emUoKSkgeworICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiB0aGlzSW50ZXJzZWN0aW9u
ID0gaW50ZXJzZWN0aW9uc1tpbmRleF07CisKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IGludGVy
c2VjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBu
ZXh0SW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleCArIDFdOworICAgICAgICAgICAg
aWYgKCh0aGlzSW50ZXJzZWN0aW9uLnBvaW50LngoKSA9PSBuZXh0SW50ZXJzZWN0aW9uLnBvaW50
LngoKSkgJiYgKHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZIHx8IHRoaXNJbnRl
cnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNYXhZKSkgeworICAgICAgICAgICAgICAgIGlmICh0aGlz
SW50ZXJzZWN0aW9uLnR5cGUgPT0gbmV4dEludGVyc2VjdGlvbi50eXBlKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFNraXAgcGFpcnMgb2YgaW50ZXJzZWN0aW9ucyB3aG9zZSB0eXBlcyBhcmUg
VmVydGV4TWF4WSxWZXJ0ZXhNYXhZIGFuZCBWZXJ0ZXhNaW5ZLFZlcnRleE1pblkuCisgICAgICAg
ICAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBwYWlycyBvZiBpbnRlcnNlY3Rpb25zIHdob3NlIHR5
cGVzIGFyZSBWZXJ0ZXhNaW5ZLFZlcnRleE1heFkgb3IgVmVydGV4TWF4WSxWZXJ0ZXhNaW5ZIHdp
dGggb25lIFZlcnRleE1pblkgaW50ZXJzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBpZiAo
bmV4dEludGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1heFkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnRlcnNlY3Rpb25zW2luZGV4ICsgMV0gPSB0aGlzSW50ZXJzZWN0aW9uOworICAgICAg
ICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEV4
Y2x1c2lvblBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICp0aGlzSW50ZXJzZWN0aW9uLmVkZ2U7Cisg
ICAgICAgIGJvb2wgY3Jvc3NpbmcgPSAhd2luZENvdW50OworCisgICAgICAgIGlmIChmaWxsUnVs
ZSgpID09IFJVTEVfRVZFTk9ERCkgeworICAgICAgICAgICAgd2luZENvdW50ICs9ICh0aGlzRWRn
ZS52ZXJ0ZXgyKCkueSgpID4gdGhpc0VkZ2UudmVydGV4MSgpLnkoKSkgPyAxIDogLTE7CisgICAg
ICAgICAgICBjcm9zc2luZyA9IGNyb3NzaW5nIHx8ICF3aW5kQ291bnQ7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoKHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBOb3JtYWwpIHx8ICh0aGlzSW50
ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSkpIHsKKyAgICAgICAgICAgIGlmIChjcm9zc2lu
ZykKKyAgICAgICAgICAgICAgICBpbnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhpc0ludGVyc2Vj
dGlvbi5wb2ludC54KCksIGluc2lkZSwgcmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlz
SW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkgeworICAgICAgICAgICAgaW50IHZlcnRl
eEluZGV4ID0gKHRoaXNFZGdlLnZlcnRleDIoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgxKCkueSgp
KSA/IHRoaXNFZGdlLmluZGV4MiA6IHRoaXNFZGdlLmluZGV4MTsKKyAgICAgICAgICAgIGlmIChj
cm9zc2luZyAmJiByaWdodFZlcnRleFkodmVydGV4SW5kZXgpID4geSkKKyAgICAgICAgICAgICAg
ICBpbnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhpc0VkZ2UubWF4WCgpLCBpbnNpZGUsIHJlc3Vs
dCk7CisgICAgICAgIH0gZWxzZSBpZiAodGhpc0ludGVyc2VjdGlvbi50eXBlID09IFZlcnRleFlC
b3RoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChFeGNsdXNpb25JbnRlcnZhbCh0aGlzRWRn
ZS5taW5YKCksIHRoaXNFZGdlLm1heFgoKSkpOworCisgICAgICAgIGluZGV4Kys7CisgICAgfQor
fQorCisvLyBSZXR1cm4gdGhlIFggcHJvamVjdGlvbnMgb2YgdGhlIGVkZ2VzIHRoYXQgb3Zlcmxh
cCB5MSx5Mi4KK3ZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25z
KGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KSBj
b25zdAoreworICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJs
YXBwaW5nRWRnZXM7CisgICAgbV9lZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29u
OjpFZGdlSW50ZXJ2YWwoeTEsIHkyLCAwKSwgb3ZlcmxhcHBpbmdFZGdlcyk7CisKKyAgICBFZGdl
SW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
b3ZlcmxhcHBpbmdFZGdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBFeGNsdXNpb25Q
b2x5Z29uRWRnZSAqZWRnZSA9IHN0YXRpY19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3Zl
cmxhcHBpbmdFZGdlc1tpXS5kYXRhKCkpOworICAgICAgICBmbG9hdCB4MTsKKyAgICAgICAgZmxv
YXQgeDI7CisKKyAgICAgICAgaWYgKGVkZ2UtPm1pblkoKSA8IHkxKSB7CisgICAgICAgICAgICBj
b21wdXRlWEludGVyc2VjdGlvbihlZGdlLCB5MSwgaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAg
IHgxID0gaW50ZXJzZWN0aW9uLnBvaW50LngoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICB4MSA9IChlZGdlLT52ZXJ0ZXgxKCkueSgpIDwgZWRnZS0+dmVydGV4MigpLnkoKSkgPyBlZGdl
LT52ZXJ0ZXgxKCkueCgpIDogZWRnZS0+dmVydGV4MigpLngoKTsKKworICAgICAgICBpZiAoZWRn
ZS0+bWF4WSgpID4geTIpIHsKKyAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2Us
IHkyLCBpbnRlcnNlY3Rpb24pOworICAgICAgICAgICAgeDIgPSBpbnRlcnNlY3Rpb24ucG9pbnQu
eCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHgyID0gKGVkZ2UtPnZlcnRleDEoKS55
KCkgPiBlZGdlLT52ZXJ0ZXgyKCkueSgpKSA/IGVkZ2UtPnZlcnRleDEoKS54KCkgOiBlZGdlLT52
ZXJ0ZXgyKCkueCgpOworCisgICAgICAgIGlmICh4MSA+IHgyKQorICAgICAgICAgICAgc3RkOjpz
d2FwKHgxLCB4Mik7CisKKyAgICAgICAgcmVzdWx0LmFwcGVuZChFeGNsdXNpb25JbnRlcnZhbCh4
MSwgeDIpKTsKKyAgICB9CisKKyAgICBzb3J0RXhjbHVzaW9uSW50ZXJ2YWxzKHJlc3VsdCk7Cit9
CisKK3ZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9n
aWNhbFRvcCwgZmxvYXQgbG9naWNhbEJvdHRvbSwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QK
K3sKKyAgICBmbG9hdCB5MSA9IG1pbllGb3JMb2dpY2FsTGluZShsb2dpY2FsVG9wLCBsb2dpY2Fs
Qm90dG9tKTsKKyAgICBmbG9hdCB5MiA9IG1heFlGb3JMb2dpY2FsTGluZShsb2dpY2FsVG9wLCBs
b2dpY2FsQm90dG9tKTsKKworICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4geTFYSW50ZXJ2
YWxzLCB5MlhJbnRlcnZhbHM7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkxLCB5MVhJbnRl
cnZhbHMpOworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyh5MiwgeTJYSW50ZXJ2YWxzKTsKKwor
ICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOworICAgIG1lcmdl
RXhjbHVzaW9uSW50ZXJ2YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBtZXJnZWRJbnRl
cnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBlZGdlSW50ZXJ2YWxzOwor
ICAgIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyh5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOworCisg
ICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBleGNsdWRlZEludGVydmFsczsKKyAgICBtZXJn
ZUV4Y2x1c2lvbkludGVydmFscyhtZXJnZWRJbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGV4Y2x1
ZGVkSW50ZXJ2YWxzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNsdWRlZElu
dGVydmFscy5zaXplKCk7IGkrKykgeworICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZh
bCA9IGV4Y2x1ZGVkSW50ZXJ2YWxzW2ldOworICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdt
ZW50KGludGVydmFsLngxLCBpbnRlcnZhbC54MikpOworICAgIH0KK30KKwordm9pZCBFeGNsdXNp
b25Qb2x5Z29uOjpnZXRJbmNsdWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBs
b2dpY2FsQm90dG9tLCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAgIGZsb2F0IHkx
ID0gbWluWUZvckxvZ2ljYWxMaW5lKGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOworICAgIGZs
b2F0IHkyID0gbWF4WUZvckxvZ2ljYWxMaW5lKGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOwor
CisgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFs
czsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTEsIHkxWEludGVydmFscyk7CisgICAgY29t
cHV0ZVhJbnRlcnNlY3Rpb25zKHkyLCB5MlhJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1
c2lvbkludGVydmFsPiBjb21tb25JbnRlcnZhbHM7CisgICAgaW50ZXJzZWN0RXhjbHVzaW9uSW50
ZXJ2YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBjb21tb25JbnRlcnZhbHMpOworCisg
ICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVF
ZGdlSW50ZXJzZWN0aW9ucyh5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiBpbmNsdWRlZEludGVydmFsczsKKyAgICBzdWJ0cmFjdEV4Y2x1c2lv
bkludGVydmFscyhjb21tb25JbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGluY2x1ZGVkSW50ZXJ2
YWxzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmNsdWRlZEludGVydmFscy5z
aXplKCk7IGkrKykgeworICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9IGluY2x1
ZGVkSW50ZXJ2YWxzW2ldOworICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVy
dmFsLngxLCBpbnRlcnZhbC54MikpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM5N2QwZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKQEAgLTAsMCArMSwxMjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlS
SUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAq
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAq
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEV4Y2x1c2lvblBvbHlnb25faAorI2RlZmluZSBFeGNsdXNpb25Q
b2x5Z29uX2gKKworI2luY2x1ZGUgIkV4Y2x1c2lvbkludGVydmFsLmgiCisjaW5jbHVkZSAiRXhj
bHVzaW9uU2hhcGUuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2YWxUcmVlLmgiCisjaW5jbHVkZSAiV2luZFJ1bGUu
aCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRXhjbHVzaW9uUG9seWdvbkVkZ2U7CisKKy8v
IFRoaXMgY2xhc3MgaXMgdXNlZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZy4KKyNp
Zm5kZWYgTkRFQlVHCit0ZW1wbGF0ZSA8Y2xhc3M+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nOworI2Vu
ZGlmCisKK2NsYXNzIEV4Y2x1c2lvblBvbHlnb24gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV4Y2x1c2lvblBvbHlnb24pOworcHVibGljOgorICAg
IEV4Y2x1c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNl
cywgV2luZFJ1bGUgZmlsbFJ1bGUpOworCisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4QXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICgqbV92ZXJ0aWNlcylbaW5kZXhdOyB9Cisg
ICAgdW5zaWduZWQgbnVtYmVyT2ZWZXJ0aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljZXMt
PnNpemUoKTsgfQorICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxs
UnVsZTsgfQorCisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc2hhcGVMb2dpY2FsQm91bmRpbmdCb3go
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBpbnRlcm5hbFRvTG9naWNhbEJvdW5kaW5nQm94KG1f
Ym91bmRpbmdCb3gpOyB9CisgICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZs
b2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxCb3R0b20sIFNlZ21lbnRMaXN0JikgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxv
Z2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxCb3R0b20sIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJ
REU7CisKK3ByaXZhdGU6CisgICAgZmxvYXQgcmlnaHRWZXJ0ZXhZKHVuc2lnbmVkKSBjb25zdDsK
KyAgICB2b2lkIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBWZWN0b3I8RXhjbHVzaW9u
SW50ZXJ2YWw+JikgY29uc3Q7CisgICAgdm9pZCBjb21wdXRlRWRnZUludGVyc2VjdGlvbnMoZmxv
YXQgbWluWSwgZmxvYXQgbWF4WSwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYpIGNvbnN0Owor
CisgICAgdHlwZWRlZiBQT0RJbnRlcnZhbDxmbG9hdCwgRXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBF
ZGdlSW50ZXJ2YWw7CisgICAgdHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8ZmxvYXQsIEV4Y2x1c2lv
blBvbHlnb25FZGdlKj4gRWRnZUludGVydmFsVHJlZTsKKworICAgIE93blB0cjxWZWN0b3I8Rmxv
YXRQb2ludD4gPiBtX3ZlcnRpY2VzOworICAgIFdpbmRSdWxlIG1fZmlsbFJ1bGU7CisgICAgRmxv
YXRSZWN0IG1fYm91bmRpbmdCb3g7CisgICAgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlPiBt
X2VkZ2VzOworICAgIEVkZ2VJbnRlcnZhbFRyZWUgbV9lZGdlVHJlZTsKK307CisKKy8vIEVkZ2VJ
bnRlcnZhbFRyZWUgbm9kZXMgc3RvcmUgbWluWSwgbWF4WSwgYW5kIGEgKCJVc2VyRGF0YSIpIHBv
aW50ZXIgdG8gYW4gRXhjbHVzaW9uUG9seWdvbkVkZ2UuIEVkZ2UgdmVydGV4CisvLyBpbmRleDEg
aXMgbGVzcyB0aGFuIGluZGV4MiwgZXhjZXB0IHRoZSBsYXN0IGVkZ2UsIHdoZXJlIGluZGV4MiBp
cyAwLiBXaGVuIGEgcG9seWdvbiBlZGdlIGlzIGRlZmluZWQgYnkgMworLy8gb3IgbW9yZSBjb2xp
bmVhciB2ZXJ0aWNlcywgaW5kZXgyIGNhbiBiZSB0aGUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNv
bGluZWFyIHZlcnRleC4KK3N0cnVjdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSB7CisgICAgY29uc3Qg
RmxvYXRQb2ludCYgdmVydGV4MSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQocG9seWdv
bik7CisgICAgICAgIHJldHVybiBwb2x5Z29uLT52ZXJ0ZXhBdChpbmRleDEpOworICAgIH0KKwor
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKHBvbHlnb24pOworICAgICAgICByZXR1cm4gcG9seWdvbi0+dmVydGV4QXQoaW5kZXgyKTsK
KyAgICB9CisKKyAgICBmbG9hdCBtaW5YKCkgY29uc3QgeyByZXR1cm4gc3RkOjptaW4odmVydGV4
MSgpLngoKSwgdmVydGV4MigpLngoKSk7IH0KKyAgICBmbG9hdCBtaW5ZKCkgY29uc3QgeyByZXR1
cm4gc3RkOjptaW4odmVydGV4MSgpLnkoKSwgdmVydGV4MigpLnkoKSk7IH0KKyAgICBmbG9hdCBt
YXhYKCkgY29uc3QgeyByZXR1cm4gc3RkOjptYXgodmVydGV4MSgpLngoKSwgdmVydGV4MigpLngo
KSk7IH0KKyAgICBmbG9hdCBtYXhZKCkgY29uc3QgeyByZXR1cm4gc3RkOjptYXgodmVydGV4MSgp
LnkoKSwgdmVydGV4MigpLnkoKSk7IH0KKworICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb24qIHBv
bHlnb247CisgICAgdW5zaWduZWQgaW5kZXgxOworICAgIHVuc2lnbmVkIGluZGV4MjsKK307CisK
Ky8vIFRoZXNlIHN0cnVjdHVyZXMgYXJlIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1
Z2dpbmcuMQorI2lmbmRlZiBOREVCVUcKK3RlbXBsYXRlIDw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5n
PGZsb2F0PiB7CisgICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3QgZmxvYXQgdmFsdWUpIHsg
cmV0dXJuIFN0cmluZzo6bnVtYmVyKHZhbHVlKTsgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
VmFsdWVUb1N0cmluZzxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+IHsKKyAgICBzdGF0aWMgU3RyaW5n
IHN0cmluZyhjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZSkgeyByZXR1cm4gU3RyaW5n
Ojpmb3JtYXQoIiVwICglZiwlZiAlZiwlZikiLCBlZGdlLCBlZGdlLT52ZXJ0ZXgxKCkueCgpLCBl
ZGdlLT52ZXJ0ZXgxKCkueSgpLCBlZGdlLT52ZXJ0ZXgyKCkueCgpLCBlZGdlLT52ZXJ0ZXgyKCku
eSgpKTsgfQorfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFeGNsdXNpb25Qb2x5Z29uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9u
U2hhcGUuY3BwCmluZGV4IDBmNDMwZWYuLmMzZWM4YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcApAQCAtMzEsMTAgKzMxLDEwIEBACiAjaW5jbHVkZSAi
RXhjbHVzaW9uU2hhcGUuaCIKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIKKyNp
bmNsdWRlICJFeGNsdXNpb25Qb2x5Z29uLmgiCiAjaW5jbHVkZSAiRXhjbHVzaW9uUmVjdGFuZ2xl
LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNjAs
NiArNjAsMTEgQEAgc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1
c2lvbkVsbGlwc2UoY29uc3QgRmxvYXRQb2ludCYgY2VudGUKICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEV4Y2x1c2lvblJlY3RhbmdsZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGlpLndpZHRo
KCksIGNlbnRlci55KCkgLSByYWRpaS5oZWlnaHQoKSwgcmFkaWkud2lkdGgoKSoyLCByYWRpaS5o
ZWlnaHQoKSoyKSwgcmFkaWkpKTsKIH0KIAorc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hh
cGU+IGNyZWF0ZUV4Y2x1c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4g
PiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBFeGNsdXNpb25Qb2x5Z29uKHZlcnRpY2VzLCBmaWxsUnVsZSkpOworfQorCiAvLyBJZiB0aGUg
d3JpdGluZ01vZGUgaXMgdmVydGljYWwsIHRoZW4gdGhlIEJhc2ljU2hhcGUncyAocGh5c2ljYWwp
IHggYW5kIHkgY29vcmRpbmF0ZXMgYXJlIHN3YXBwZWQsIHNvIHRoYXQKIC8vIGxpbmUgc2VnbWVu
dHMgYXJlIHBhcmFsbGVsIHRvIHRoZSBpbnRlcm5hbCBjb29yZGluYXRlIHN5c3RlbSdzIFggYXhp
cy4KIApAQCAtODcsOCArOTIsOCBAQCBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNp
b25TaGFwZTo6Y3JlYXRlRXhjbHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZQogICAgICAgICBm
bG9hdCByYWRpdXNZID0gcmFkaXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFs
dWVGb3JMZW5ndGgocmFkaXVzWUxlbmd0aCwgYm94SGVpZ2h0KTsKIAogICAgICAgICBleGNsdXNp
b25TaGFwZSA9IGhvcml6b250YWxXcml0aW5nTW9kZQotICAgICAgICAgID8gY3JlYXRlRXhjbHVz
aW9uUmVjdGFuZ2xlKEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgRmxvYXRTaXplKHJh
ZGl1c1gsIHJhZGl1c1kpKQotICAgICAgICAgIDogY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZs
b2F0UmVjdCh5LCB4LCBoZWlnaHQsIHdpZHRoKSwgRmxvYXRTaXplKHJhZGl1c1ksIHJhZGl1c1gp
KTsKKyAgICAgICAgICAgID8gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KSwgRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpKQorICAgICAgICAg
ICAgOiBjcmVhdGVFeGNsdXNpb25SZWN0YW5nbGUoRmxvYXRSZWN0KHksIHgsIGhlaWdodCwgd2lk
dGgpLCBGbG9hdFNpemUocmFkaXVzWSwgcmFkaXVzWCkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTk5LDggKzEwNCw4IEBAIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IEV4Y2x1c2lv
blNoYXBlOjpjcmVhdGVFeGNsdXNpb25TaGFwZShjb25zdCBCYXNpY1NoYXBlCiAgICAgICAgIGZs
b2F0IHJhZGl1cyA9ICBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+cmFkaXVzKCksIHN0ZDo6
bWF4KGJveEhlaWdodCwgYm94V2lkdGgpKTsKIAogICAgICAgICBleGNsdXNpb25TaGFwZSA9IGhv
cml6b250YWxXcml0aW5nTW9kZQotICAgICAgICAgID8gY3JlYXRlRXhjbHVzaW9uQ2lyY2xlKEZs
b2F0UG9pbnQoY2VudGVyWCwgY2VudGVyWSksIHJhZGl1cykKLSAgICAgICAgICA6IGNyZWF0ZUV4
Y2x1c2lvbkNpcmNsZShGbG9hdFBvaW50KGNlbnRlclksIGNlbnRlclgpLCByYWRpdXMpOworICAg
ICAgICAgICAgPyBjcmVhdGVFeGNsdXNpb25DaXJjbGUoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50
ZXJZKSwgcmFkaXVzKQorICAgICAgICAgICAgOiBjcmVhdGVFeGNsdXNpb25DaXJjbGUoRmxvYXRQ
b2ludChjZW50ZXJZLCBjZW50ZXJYKSwgcmFkaXVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkBAIC0xMTIsMTMgKzExNywyNiBAQCBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNp
b25TaGFwZTo6Y3JlYXRlRXhjbHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZQogICAgICAgICBm
bG9hdCByYWRpdXNZID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRpdXNZKCksIGJv
eEhlaWdodCk7CiAKICAgICAgICAgZXhjbHVzaW9uU2hhcGUgPSBob3Jpem9udGFsV3JpdGluZ01v
ZGUKLSAgICAgICAgICA/IGNyZWF0ZUV4Y2x1c2lvbkVsbGlwc2UoRmxvYXRQb2ludChjZW50ZXJY
LCBjZW50ZXJZKSwgRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpKQotICAgICAgICAgIDogY3Jl
YXRlRXhjbHVzaW9uRWxsaXBzZShGbG9hdFBvaW50KGNlbnRlclksIGNlbnRlclgpLCBGbG9hdFNp
emUocmFkaXVzWSwgcmFkaXVzWCkpOworICAgICAgICAgICAgPyBjcmVhdGVFeGNsdXNpb25FbGxp
cHNlKEZsb2F0UG9pbnQoY2VudGVyWCwgY2VudGVyWSksIEZsb2F0U2l6ZShyYWRpdXNYLCByYWRp
dXNZKSkKKyAgICAgICAgICAgIDogY3JlYXRlRXhjbHVzaW9uRWxsaXBzZShGbG9hdFBvaW50KGNl
bnRlclksIGNlbnRlclgpLCBGbG9hdFNpemUocmFkaXVzWSwgcmFkaXVzWCkpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1BPTFlHT046
Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19T
SEFQRV9QT0xZR09OOiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKiBwb2x5Z29u
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZVBvbHlnb24qPihiYXNpY1NoYXBlKTsKKyAg
ICAgICAgY29uc3QgVmVjdG9yPExlbmd0aD4mIHZhbHVlcyA9IHBvbHlnb24tPnZhbHVlcygpOwor
ICAgICAgICBzaXplX3QgdmFsdWVzU2l6ZSA9IHZhbHVlcy5zaXplKCk7CisgICAgICAgIEFTU0VS
VCghKHZhbHVlc1NpemUgJSAyKSk7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50PiogdmVydGlj
ZXMgPSBuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KHZhbHVlc1NpemUgLyAyKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlc1NpemU7IGkgKz0gMikgeworICAgICAgICAgICAg
RmxvYXRQb2ludCB2ZXJ0ZXgoCisgICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aCh2
YWx1ZXMuYXQoaSksIGJveFdpZHRoKSwKKyAgICAgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVu
Z3RoKHZhbHVlcy5hdChpICsgMSksIGJveEhlaWdodCkpOworICAgICAgICAgICAgKCp2ZXJ0aWNl
cylbaSAvIDJdID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gdmVydGV4IDogdmVydGV4LnRyYW5z
cG9zZWRQb2ludCgpOworICAgICAgICB9CisgICAgICAgIGV4Y2x1c2lvblNoYXBlID0gY3JlYXRl
RXhjbHVzaW9uUG9seWdvbihhZG9wdFB0cih2ZXJ0aWNlcyksIHBvbHlnb24tPndpbmRSdWxlKCkp
OworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluc2lkZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mby5jcHAKaW5kZXggZTBkNmQxOS4uMzdkMWYyZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5j
cHAKQEAgLTczLDcgKzczLDcgQEAgYm9vbCBFeGNsdXNpb25TaGFwZUluc2lkZUluZm86OmlzRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvRW5hYmxlZEZvclJlbmRlckJsb2NrKGMKIHsKICAgICAvLyBG
SVhNRTogQnVnIDg5NzA3OiBFbmFibGUgc2hhcGUgaW5zaWRlIGZvciBub24tcmVjdGFuZ3VsYXIg
c2hhcGVzCiAgICAgQmFzaWNTaGFwZSogc2hhcGUgPSBibG9jay0+c3R5bGUoKS0+c2hhcGVJbnNp
ZGUoKTsKLSAgICByZXR1cm4gKHNoYXBlICYmIHNoYXBlLT50eXBlKCkgPT0gQmFzaWNTaGFwZTo6
QkFTSUNfU0hBUEVfUkVDVEFOR0xFKTsKKyAgICByZXR1cm4gc2hhcGUgJiYgKHNoYXBlLT50eXBl
KCkgPT0gQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUkVDVEFOR0xFIHx8IHNoYXBlLT50eXBlKCkg
PT0gQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUE9MWUdPTik7CiB9CiAKIHZvaWQgRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvOjpyZW1vdmVFeGNsdXNpb25TaGFwZUluc2lkZUluZm9Gb3JSZW5kZXJC
bG9jayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167540</attachid>
            <date>2012-10-08 08:16:49 -0700</date>
            <delta_ts>2012-10-08 12:25:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>37972</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyODUxZGRmLi4yOGNhMmI3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDkt
MjcgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBFeGNs
dXNpb25zXSBBZGQgc3VwcG9ydCBmb3IgcG9seWdvbmFsIHNoYXBlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY4MTEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWZXJpZnkgdGhhdCBhIHJlY3Rhbmd1bGFy
IHNoYXBlLWluc2lkZSBzcGVjaWZpZWQgYXMgYSBwb2x5Z29uIHdvcmtzIGFzIGV4cGVjdGVkIGZv
ciBhbGwgd3JpdGluZy1tb2Rlcy4KKworICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1p
bnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVjdGFuZ2xlLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBv
bHlnb24tcmVjdGFuZ2xlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTEwLTA4ICBSYXBoYWVsIEt1Ym8g
ZGEgQ29zdGEgIDxyYXBoYWVsLmt1Ym8uZGEuY29zdGFAaW50ZWwuY29tPgogCiAgICAgICAgIFtF
RkxdIFVuc2tpcCBzdmcvVzNDLVNWRy0xLjEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3RhbmdsZS1l
eHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9z
aGFwZS1pbnNpZGUtcG9seWdvbi1yZWN0YW5nbGUtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWI0OGJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtcG9seWdvbi1y
ZWN0YW5nbGUtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgI3NoYXBlLWluc2lkZS1ob3Jpem9udGFsIHsK
KyAgICAgICAgcGFkZGluZzogMjBweCAzNXB4IDI1cHggMTVweDsKKyAgICAgICAgd2lkdGg6IDE1
MHB4OworICAgICAgICBoZWlnaHQ6IDE3NXB4OworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7
CisgICAgfQorICAgICNzaGFwZS1pbnNpZGUtdmVydGljYWwtbHIgeworICAgICAgICBwYWRkaW5n
OiAyMHB4IDM1cHggMjVweCAxNXB4OworICAgICAgICB3aWR0aDogMTUwcHg7CisgICAgICAgIGhl
aWdodDogMTc1cHg7CisgICAgICAgIC13ZWJraXQtd3JpdGluZy1tb2RlOiB2ZXJ0aWNhbC1scjsK
KyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKyAgICAjc2hhcGUtaW5zaWRlLXZl
cnRpY2FsLXJsIHsKKyAgICAgICAgcGFkZGluZzogMjBweCAzNXB4IDI1cHggMTVweDsKKyAgICAg
ICAgd2lkdGg6IDE1MHB4OworICAgICAgICBoZWlnaHQ6IDE3NXB4OworICAgICAgICAtd2Via2l0
LXdyaXRpbmctbW9kZTogdmVydGljYWwtcmw7CisgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
KyAgICB9CisgICAgI2JvcmRlciB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAg
ICAgdG9wOiAxM3B4OworICAgICAgICBsZWZ0OiAxOHB4OworICAgICAgICB3aWR0aDogMTUwcHg7
CisgICAgICAgIGhlaWdodDogMTc1cHg7CisgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsdWU7
CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxkaXYgaWQ9InNoYXBlLWlu
c2lkZS1ob3Jpem9udGFsIj4KKyAgICAgICAgPGRpdiBpZD0iYm9yZGVyIj48L2Rpdj4KKyAgICAg
ICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBjb250YWluZWQgYnkgdGhlIGJsdWUgc3F1YXJlLgorICAg
IDwvZGl2PgorICAgIDxkaXYgaWQ9InNoYXBlLWluc2lkZS12ZXJ0aWNhbC1sciI+CisgICAgICAg
IDxkaXYgaWQ9ImJvcmRlciI+PC9kaXY+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgY29u
dGFpbmVkIGJ5IHRoZSBibHVlIHNxdWFyZS4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJzaGFw
ZS1pbnNpZGUtdmVydGljYWwtcmwiPgorICAgICAgICA8ZGl2IGlkPSJib3JkZXIiPjwvZGl2Pgor
ICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGNvbnRhaW5lZCBieSB0aGUgYmx1ZSBzcXVhcmUu
CisgICAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3Rhbmds
ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1p
bnNpZGUtcG9seWdvbi1yZWN0YW5nbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lMzlhYmUwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9leGNs
dXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtcG9seWdvbi1yZWN0YW5nbGUuaHRtbApA
QCAtMCwwICsxLDUzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
PgorICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLnNl
dHRpbmdzLnNldENTU0V4Y2x1c2lvbnNFbmFibGVkKHRydWUpOworPC9zY3JpcHQ+Cis8c3R5bGU+
CisgICAgI3NoYXBlLWluc2lkZS1ob3Jpem9udGFsIHsKKyAgICAgICAgd2lkdGg6IDIwMHB4Owor
ICAgICAgICBoZWlnaHQ6IDIyMHB4OworICAgICAgICAtd2Via2l0LXNoYXBlLWluc2lkZTogcG9s
eWdvbigxNXB4IDIwcHgsIDE2NXB4IDIwcHgsIDE2NXB4IDE5NXB4LCAxNXB4IDE5NXB4KTsKKyAg
ICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKyAgICAjc2hhcGUtaW5zaWRlLXZlcnRp
Y2FsLWxyIHsKKyAgICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgICBoZWlnaHQ6IDIyMHB4Owor
ICAgICAgICAtd2Via2l0LXNoYXBlLWluc2lkZTogcG9seWdvbigxNXB4IDIwcHgsIDE2NXB4IDIw
cHgsIDE2NXB4IDE5NXB4LCAxNXB4IDE5NXB4KTsKKyAgICAgICAgLXdlYmtpdC13cml0aW5nLW1v
ZGU6IHZlcnRpY2FsLWxyOworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgfQorICAg
ICNzaGFwZS1pbnNpZGUtdmVydGljYWwtcmwgeworICAgICAgICB3aWR0aDogMjAwcHg7CisgICAg
ICAgIGhlaWdodDogMjIwcHg7CisgICAgICAgIC13ZWJraXQtc2hhcGUtaW5zaWRlOiBwb2x5Z29u
KDE1cHggMjBweCwgMTY1cHggMjBweCwgMTY1cHggMTk1cHgsIDE1cHggMTk1cHgpOworICAgICAg
ICAtd2Via2l0LXdyaXRpbmctbW9kZTogdmVydGljYWwtcmw7CisgICAgICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKKyAgICB9CisgICAgI2JvcmRlciB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKKyAgICAgICAgdG9wOiAxM3B4OworICAgICAgICBsZWZ0OiAxOHB4OworICAgICAgICB3aWR0
aDogMTUwcHg7CisgICAgICAgIGhlaWdodDogMTc1cHg7CisgICAgICAgIGJvcmRlcjogMnB4IHNv
bGlkIGJsdWU7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxkaXYgaWQ9
InNoYXBlLWluc2lkZS1ob3Jpem9udGFsIj4KKyAgICAgICAgPGRpdiBpZD0iYm9yZGVyIj48L2Rp
dj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBjb250YWluZWQgYnkgdGhlIGJsdWUgc3F1
YXJlLgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9InNoYXBlLWluc2lkZS12ZXJ0aWNhbC1sciI+
CisgICAgICAgIDxkaXYgaWQ9ImJvcmRlciI+PC9kaXY+CisgICAgICAgIFRoaXMgdGV4dCBzaG91
bGQgYmUgY29udGFpbmVkIGJ5IHRoZSBibHVlIHNxdWFyZS4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2
IGlkPSJzaGFwZS1pbnNpZGUtdmVydGljYWwtcmwiPgorICAgICAgICA8ZGl2IGlkPSJib3JkZXIi
PjwvZGl2PgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGNvbnRhaW5lZCBieSB0aGUgYmx1
ZSBzcXVhcmUuCisgICAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CmluZGV4IDJkMmM5M2UuLjAyMmMyZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMDM3LDYg
KzIwMzcsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL0NvdW50ZXJOb2Rl
LmNwcAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKICAgICByZW5kZXJpbmcvRXhjbHVz
aW9uSW50ZXJ2YWwuY3BwCisgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwCiAgICAg
cmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAKICAgICByZW5kZXJpbmcvRXhjbHVzaW9u
U2hhcGUuY3BwCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA2MTQxMDE5Li41NjFiYzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAK
KzIwMTItMDktMjcgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAgICAg
W0NTUyBFeGNsdXNpb25zXSBBZGQgc3VwcG9ydCBmb3IgcG9seWdvbmFsIHNoYXBlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY4MTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0aWFsIHZlcnNpb24g
b2YgdGhlIGxheW91dCBzdXBwb3J0IGZvciBwb2x5Z29uYWwgZXhjbHVzaW9uIHNoYXBlczogdGhl
IEV4Y2x1c2lvblBvbHlnb24gY2xhc3MuCisgICAgICAgIFN1cHBvcnRzIHRoZSBwdWJsaWMgRXhj
bHVzaW9uU2hhcGUgb3BlcmF0aW9ucyB1c2luZyB0aGUgYWxnb3JpdGhtIGRlc2NyaWJlZCBoZXJl
OgorICAgICAgICBodHRwOi8vaGFuc211bGxlci13ZWJraXQuYmxvZ3Nwb3QuY29tLzIwMTIvMDYv
aG9yaXpvbnRhbC1ib3gtcG9seWdvbi1pbnRlcnNlY3Rpb24tZm9yLmh0bWwuCisgICAgICAgIEFs
dGhvdWdoIGJvdGggdGhlICJpbmNsdWRlZCIgYW5kICJleGNsdWRlZCIgb3BlcmF0aW9ucyBhcmUg
c3VwcG9ydGVkLCBvbmx5IHRoZSBmb3JtZXIgaXMKKyAgICAgICAgdXNlZCwgc2luY2Ugb25seSBz
aGFwZS1pbnNpZGUgaXMgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQuCisKKyAgICAgICAgVGhlIEV4
Y2x1c2lvblBvbHlnb24gY2xhc3Mgc3RvcmVzIHRoZSBwb2x5Z29uJ3MgZWRnZXMgaW4gYW4gaW50
ZXJ2YWwgdHJlZS4KKworICAgICAgICBQb2x5Z29uIGVkZ2VzIGFyZSByZXByZXNlbnRlZCBieSB0
aGUgRXhjbHVzaW9uUG9seWdvbkVkZ2Ugc3RydWN0LCB3aGljaCByZWNvcmRzIHRoZSBpbmRpY2Vz
IG9mCisgICAgICAgIHRoZSBwYWlyIG9mIHZlcnRpY2VzIGpvaW5lZCBieSB0aGUgZWRnZS4gIEVk
Z2UgdmVydGV4IGluZGV4MSBpcyB1c3VhbGx5IGxlc3MgdGhhbiBpbmRleDIsIGV4Y2VwdAorICAg
ICAgICB0aGUgbGFzdCBlZGdlIHdoZXJlIGluZGV4MiBpcyAwLiAgV2UgcGxhbiB0byBpbXByb3Zl
IHRoZSBhbGdvcml0aG0gdGhhdCBjcmVhdGVzIHRoZSBlZGdlcworICAgICAgICBieSBzcGFubmlu
ZyB2ZXJ0aWNlcyBjb250YWluZWQgaW4gc2VxdWVuY2VzIG9mIG1vcmUgdGhhbiB0d28gY29saW5l
YXIgdmVydGljZXMuIEZvciBleGFtcGxlLAorICAgICAgICBhIHRyaWFuZ3VsYXIgcG9seWdvbiBt
aWdodCBiZSBzcGVjaWZpZWQgd2l0aCA1IHZlcnRpY2VzIGxpa2UgdGhpczogMywwIDUsMCwgNSw1
LCA0LDQgMiwyLCAwLDAuCisgICAgICAgIEJ5IHNwYW5uaW5nIHRoZSBleHRyYSBjb2xpbmVhciBw
b2ludHM6IDAsMCA1LDAsIDUsNSwgd2hpY2ggaW1wbGllcyBpbmRleDEtaW5kZXgyIGVkZ2VzOiA1
LTEgMS0yIDItNS4KKworICAgICAgICBBbHRob3VnaCB0aGUgaW1wbGVtZW50YXRpb24gc3VwcG9y
dHMgY29tcGxleCBwb2x5Z29ucywgdGhlIGxheW91dCBjb2RlIGlzIGxpbWl0ZWQgdG8KKyAgICAg
ICAgZXNzZW50aWFsbHkgcmVjdGFuZ3VsYXIgc2hhcGVzIHVudGlsIGEgcGF0Y2ggZm9yIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjgxMworICAgICAgICBsYW5kcy4K
KworICAgICAgICBUZXN0OiBmYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lk
ZS1wb2x5Z29uLXJlY3RhbmdsZS5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAg
ICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChFZGdlSW50ZXJzZWN0aW9uKTogSW50ZXJuYWwgZGVzY3JpcHRpb24g
b2YgdGhlIGludGVyc2VjdGlvbiBvZiBhIHBvbHlnb24gZWRnZSBhbmQgYSBob3Jpem9udGFsIGxp
bmUuCisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpFeGNsdXNpb25Qb2x5Z29u
KTogU2VlIHRoZSBpbnRyb2R1Y3RvcnkgdGV4dCBhYm92ZSBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0
aGlzIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbik6IEZpbmQg
YW5kIGNsYXNzaWZ5IHRoZSBYIGludGVyY2VwdCBvZiBhIHBvbHlnb24gZWRnZSB3aXRoIGhvcml6
b250YWwgbGluZSwgaWYgYW55LgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6
cmlnaHRWZXJ0ZXhZKTogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkZWNpZGUgaWYgYSBob3Jpem9u
dGFsIGxpbmUgImNyb3NzZXMiIGEgdmVydGV4LgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kSW50
ZXJ2YWxYKTogQXBwZW5kIGFuIHggY29vcmRpbmF0ZSB0byBhIHZlY3RvciBvZiBFeGNsdXNpb25J
bnRlcnZhbHMuCisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpjb21wdXRlWElu
dGVyc2VjdGlvbnMpOiBSZXR1cm4gYSB2ZWN0b3Igb2YgdGhlIGludGVyc2VjdGlvbnMgb2YgYSBo
b3Jpem9udGFsIGxpbmUgd2l0aCB0aGUgcG9seWdvbidzIGVkZ2VzLgorICAgICAgICAoV2ViQ29y
ZTo6RXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKTogUmV0dXJuIGEg
dmVjdG9yIG9mIHRoZSBYIHByb2plY3Rpb25zIG9mIHRoZSBlZGdlcyB0aGF0IG92ZXJsYXAgYSBo
b3Jpem9uYWwgcmVjdGFuZ2xlLgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6
Z2V0RXhjbHVkZWRJbnRlcnZhbHMpOiBSZXR1cm4gYSBTZWdtZW50TGlzdCBvZiB0aGUgWCBpbnRl
cnZhbHMgd2l0aGluIGEgaG9yaXpvbnRhbCByZWN0YW5nbGUgdGhhdCBvdmVybGFwIHRoZSBwb2x5
Z29uLgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Z2V0SW5jbHVkZWRJbnRl
cnZhbHMpOiBSZXR1cm4gdGhlIFggaW50ZXJ2YWxzIHdpdGhpbiBhIGhvcml6b250YWwgcmVjdGFu
Z2xlIHRoYXQgZml0IGluc2lkZSB0aGUgcG9seWdvbi4KKyAgICAgICAgKiByZW5kZXJpbmcvRXhj
bHVzaW9uUG9seWdvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRXhj
bHVzaW9uUG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpnZXRY
QXQpOiBYIGNvb3JkaW5hdGUgb2YgYSBwb2x5Z29uIHZlcnRleAorICAgICAgICAoV2ViQ29yZTo6
RXhjbHVzaW9uUG9seWdvbjo6Z2V0WUF0KTogWSBjb29yZGluYXRlIG9mIGEgcG9seWdvbiB2ZXJ0
ZXgKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246Om51bWJlck9mVmVydGljZXMp
OgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6ZmlsbFJ1bGUpOiBBIFdpbmRS
dWxlIHZhbHVlIHRoYXQgZGVmaW5lcyAiaW5zaWRlIiBmb3Igc2VsZi1pbnRlcnNlY3RpbmcgcG9s
eWdvbnMuCisgICAgICAgIChFeGNsdXNpb25Qb2x5Z29uRWRnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFeGNsdXNpb25Qb2x5Z29uRWRnZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2U6OnZlcnRleDEpOgorICAgICAgICAoV2ViQ29y
ZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2U6OnZlcnRleDIpOgorICAgICAgICAoV2ViQ29yZTo6RXhj
bHVzaW9uUG9seWdvbkVkZ2U6Om1pblgpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9s
eWdvbkVkZ2U6Om1pblkpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2U6
Om1heFgpOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2U6Om1heFkpOgor
ICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVFeGNsdXNpb25Qb2x5Z29uKTogUmV0dXJuIGEgbmV3IEV4Y2x1c2lvblBvbHlnb24u
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblNoYXBlOjpj
cmVhdGVFeGNsdXNpb25TaGFwZSk6IEFkZGVkIHN1cHBvcnQgZm9yIEJhc2ljU2hhcGU6OkJBU0lD
X1NIQVBFX1BPTFlHT04uCisgICAgICAgICogcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25TaGFwZUluc2lkZUluZm86Omlz
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvRW5hYmxlZEZvclJlbmRlckJsb2NrKTogRW5hYmxlIEJB
U0lDX1NIQVBFX1BPTFlHT04gc2hhcGVzIGZvciBSZW5kZXJCbG9ja3MuCisKIDIwMTItMTAtMDgg
IFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSByMTIy
NzIwIGNhdXNlcyBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGggRGlyZWN0RkIgb24gQVJNdjcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDY3YjMwN2IuLjU5MzU5MzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDkxNCw2ICs0OTE0LDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBcCiAJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblBvbHlnb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblJlY3RhbmdsZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25S
ZWN0YW5nbGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQppbmRleCAwNzhiNjlhLi44OWEyNTFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTEx
MDcsNiArMTEwNyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5j
cHAgXAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgXAogICAgIHJlbmRlcmluZy9FeGNs
dXNpb25JbnRlcnZhbC5jcHAgXAorICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBc
CiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAgXAogICAgIHJlbmRlcmluZy9F
eGNsdXNpb25TaGFwZS5jcHAgXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8uY3BwIFwKQEAgLTIyOTgsNiArMjI5OSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmlu
Zy9Db3VudGVyTm9kZS5oIFwKICAgICByZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBcCiAgICAgcmVu
ZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmggXAorICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5
Z29uLmggXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaCBcCiAgICAgcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlLmggXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lk
ZUluZm8uaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZDEyMWI3ZC4uMTBiODZmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtMzI4Nyw2ICszMjg3LDggQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvRWxs
aXBzaXNCb3guaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNw
cCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmgnLAorICAgICAg
ICAgICAgJ3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCcsCisgICAgICAgICAgICAncmVu
ZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1
c2lvblJlY3RhbmdsZS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9FeGNsdXNpb25SZWN0
YW5nbGUuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGVmMmFh
ZjAuLjBkNmJlNjcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCkBAIC0zODM2Myw2ICszODM2MywxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAgICAgICAgICAgICAg
ICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2
ZVBhdGg9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25Qb2x5Z29uLmNwcCIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgorICAg
ICAgICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5oIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8L0Zp
bGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25SZWN0YW5nbGUu
Y3BwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAg
ICAgICAgICA8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggY2I3YmQ2NS4uMDUwNzJmMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTgzNyw2ICsxODM3
LDggQEAKIAkJNkU4Nzk4QkQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4Qjcx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICovOyB9OwogCQk2RTg3OThC
RTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4QjgxNUY4MUU0QTAwQkZFNEFBIC8q
IEV4Y2x1c2lvblNoYXBlLmNwcCAqLzsgfTsKIAkJNkU4Nzk4QkYxNUY4MUU0QTAwQkZFNEFBIC8q
IEV4Y2x1c2lvblNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RTg3OThCOTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RUFGMzQwRjE2
MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUgLyog
RXhjbHVzaW9uUG9seWdvbi5jcHAgKi87IH07CisJCTZFQUYzNDEwMTYxMzg2OUEwMDg1OTYyNSAv
KiBFeGNsdXNpb25Qb2x5Z29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5o
ICovOyB9OwogCQk2RUJDNUVBRjEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCQzVFQUQx
MzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLzsgfTsKIAkJNkVCQzVFQjAx
MzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyogSlNG
bG9hdDY0QXJyYXkuaCAqLzsgfTsKIAkJNkVCRjBFNDgxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1Rl
eHR1cmVGbG9hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RUJGMEU0NTEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCAqLzsg
fTsKQEAgLTkwMzIsNiArOTAzNCw4IEBACiAJCTZFODc5OEI3MTVGODFFNEEwMEJGRTRBQSAvKiBF
eGNsdXNpb25SZWN0YW5nbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhj
bHVzaW9uUmVjdGFuZ2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFODc5OEI4
MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25TaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZFODc5OEI5MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25TaGFwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUgLyogRXhj
bHVzaW9uUG9seWdvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBF
eGNsdXNpb25Qb2x5Z29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBRjM0
MEUxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uUG9seWdvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RUJDNUQ4MDEzOEI0QzRFMDBBMENGOEEgLyogRmxvYXQ2NEFycmF5LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBGbG9hdDY0QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL0Zs
b2F0NjRBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkM1RUFEMTM4
QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEzMTIsNiArMjEzMTYsOCBAQAogCQkJCUE4Q0ZGNkJE
MEExNTYxMTgwMDBBNDIzNCAvKiBFbGxpcHNpc0JveC5oICovLAogCQkJCTZFODc5OEI0MTVGODFF
NEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5jcHAgKi8sCiAJCQkJNkU4Nzk4QjUxNUY4
MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmggKi8sCisJCQkJNkVBRjM0MEQxNjEz
ODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwICovLAorCQkJCTZFQUYzNDBFMTYx
Mzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggKi8sCiAJCQkJNkU4Nzk4QjYxNUY4
MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgKi8sCiAJCQkJNkU4Nzk4Qjcx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICovLAogCQkJCTZFODc5OEI4
MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi8sCkBAIC0yNTUzNyw2ICsy
NTU0Myw3IEBACiAJCQkJOTMxQ0JEMEQxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRl
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxQ0JEMEYxNjFBNDRFOTAwRTRDODc0IC8qIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxQ0JEMTEx
NjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlVHJlZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNkVBRjM0MTAxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtMjg2MzQsNiArMjg2NDEsNyBAQAogCQkJCTkzMUNCRDBFMTYxQTQ0RTkwMEU0
Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTMxQ0JEMTAxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlVHJlZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5MzFDQkQxMzE2MUE0NEY4MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3Rh
dGVOb2RlTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNkVBRjM0MEYxNjEzODY5QTAwODU5NjI1
IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTcwNGFiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcApAQCAtMCwwICsxLDMwNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAq
ICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNsdXNpb25Qb2x5Z29uLmgiCisKKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gRWRn
ZUludGVyc2VjdGlvblR5cGUgeworICAgIE5vcm1hbCwKKyAgICBWZXJ0ZXhNaW5ZLAorICAgIFZl
cnRleE1heFksCisgICAgVmVydGV4WUJvdGgKK307CisKK3N0cnVjdCBFZGdlSW50ZXJzZWN0aW9u
IHsKKyAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZTsKKyAgICBGbG9hdFBvaW50
IHBvaW50OworICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHR5cGU7Cit9OworCitzdGF0aWMgYm9v
bCBjb21wYXJlRWRnZU1pblkoY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGUxLCBjb25zdCBF
eGNsdXNpb25Qb2x5Z29uRWRnZSogZTIpCit7CisgICAgcmV0dXJuIGUxLT5taW5ZKCkgPCBlMi0+
bWluWSgpOworfQorCitFeGNsdXNpb25Qb2x5Z29uOjpFeGNsdXNpb25Qb2x5Z29uKFBhc3NPd25Q
dHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQorICAg
IDogRXhjbHVzaW9uU2hhcGUoKQorICAgICwgbV92ZXJ0aWNlcyh2ZXJ0aWNlcykKKyAgICAsIG1f
ZmlsbFJ1bGUoZmlsbFJ1bGUpCit7CisgICAgLy8gRklYTUU6IEhhbmRsZSBwb2x5Z29ucyBkZWZp
bmVkIHdpdGggbGVzcyB0aGFuIDMgbm9uLWNvbGluZWFyIHZlcnRpY2VzLgorCisgICAgdW5zaWdu
ZWQgblZlcnRpY2VzID0gbnVtYmVyT2ZWZXJ0aWNlcygpOworICAgIG1fZWRnZXMucmVzaXplKG5W
ZXJ0aWNlcyk7CisgICAgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlKj4gc29ydGVkRWRnZXNN
aW5ZKG5WZXJ0aWNlcyk7CisKKyAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgwID0gdmVydGV4
QXQoMCk7CisgICAgZmxvYXQgbWluWCA9IHZlcnRleDAueCgpOworICAgIGZsb2F0IG1pblkgPSB2
ZXJ0ZXgwLnkoKTsKKyAgICBmbG9hdCBtYXhYID0gbWluWDsKKyAgICBmbG9hdCBtYXhZID0gbWlu
WTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuVmVydGljZXM7IGkrKykgeworICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXggPSB2ZXJ0ZXhBdChpKTsKKworICAgICAgICBt
aW5YID0gc3RkOjptaW4odmVydGV4LngoKSwgbWluWCk7CisgICAgICAgIG1heFggPSBzdGQ6Om1h
eCh2ZXJ0ZXgueCgpLCBtYXhYKTsKKyAgICAgICAgbWluWSA9IHN0ZDo6bWluKHZlcnRleC55KCks
IG1pblkpOworICAgICAgICBtYXhZID0gc3RkOjptYXgodmVydGV4LnkoKSwgbWF4WSk7CisKKyAg
ICAgICAgbV9lZGdlc1tpXS5wb2x5Z29uID0gdGhpczsKKyAgICAgICAgbV9lZGdlc1tpXS5pbmRl
eDEgPSBpOworICAgICAgICBtX2VkZ2VzW2ldLmluZGV4MiA9IChpICsgMSkgJSBuVmVydGljZXM7
CisKKyAgICAgICAgc29ydGVkRWRnZXNNaW5ZW2ldID0gJm1fZWRnZXNbaV07CisgICAgfQorCisg
ICAgbV9ib3VuZGluZ0JveC5zZXRYKG1pblgpOworICAgIG1fYm91bmRpbmdCb3guc2V0WShtaW5Z
KTsKKyAgICBtX2JvdW5kaW5nQm94LnNldFdpZHRoKG1heFggLSBtaW5YKTsKKyAgICBtX2JvdW5k
aW5nQm94LnNldEhlaWdodChtYXhZIC0gbWluWSk7CisKKyAgICBzdGQ6OnNvcnQoc29ydGVkRWRn
ZXNNaW5ZLmJlZ2luKCksIHNvcnRlZEVkZ2VzTWluWS5lbmQoKSwgV2ViQ29yZTo6Y29tcGFyZUVk
Z2VNaW5ZKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VkZ2VzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdlID0gJm1fZWRnZXNbaV07
CisgICAgICAgIG1fZWRnZVRyZWUuYWRkKEVkZ2VJbnRlcnZhbChlZGdlLT5taW5ZKCksIGVkZ2Ut
Pm1heFkoKSwgZWRnZSkpOworICAgIH0KK30KKworc3RhdGljIGJvb2wgY29tcHV0ZVhJbnRlcnNl
Y3Rpb24oY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2VQb2ludGVyLCBmbG9hdCB5LCBF
ZGdlSW50ZXJzZWN0aW9uJiByZXN1bHQpCit7CisgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVk
Z2UmIGVkZ2UgPSAqZWRnZVBvaW50ZXI7CisKKyAgICBpZiAoZWRnZS5taW5ZKCkgPiB5IHx8IGVk
Z2UubWF4WSgpIDwgeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgRmxvYXRQ
b2ludCYgdmVydGV4MSA9IGVkZ2UudmVydGV4MSgpOworICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZl
cnRleDIgPSBlZGdlLnZlcnRleDIoKTsKKyAgICBmbG9hdCBkeSA9IHZlcnRleDIueSgpIC0gdmVy
dGV4MS55KCk7CisKKyAgICBmbG9hdCBpbnRlcnNlY3Rpb25YOworICAgIEVkZ2VJbnRlcnNlY3Rp
b25UeXBlIGludGVyc2VjdGlvblR5cGU7CisKKyAgICBpZiAoIWR5KSB7CisgICAgICAgIGludGVy
c2VjdGlvblR5cGUgPSBWZXJ0ZXhZQm90aDsKKyAgICAgICAgaW50ZXJzZWN0aW9uWCA9IGVkZ2Uu
bWluWCgpOworICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdlLm1pblkoKSkgeworICAgICAgICBpbnRl
cnNlY3Rpb25UeXBlID0gVmVydGV4TWluWTsKKyAgICAgICAgaW50ZXJzZWN0aW9uWCA9ICh2ZXJ0
ZXgxLnkoKSA8IHZlcnRleDIueSgpKSA/IHZlcnRleDEueCgpIDogdmVydGV4Mi54KCk7CisgICAg
fSBlbHNlIGlmICh5ID09IGVkZ2UubWF4WSgpKSB7CisgICAgICAgIGludGVyc2VjdGlvblR5cGUg
PSBWZXJ0ZXhNYXhZOworICAgICAgICBpbnRlcnNlY3Rpb25YID0gKHZlcnRleDEueSgpID4gdmVy
dGV4Mi55KCkpID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpbnRlcnNlY3Rpb25UeXBlID0gTm9ybWFsOworICAgICAgICBpbnRlcnNlY3Rpb25YID0g
KCh5IC0gdmVydGV4MS55KCkpICogKHZlcnRleDIueCgpIC0gdmVydGV4MS54KCkpIC8gZHkpICsg
dmVydGV4MS54KCk7CisgICAgfQorCisgICAgcmVzdWx0LmVkZ2UgPSBlZGdlUG9pbnRlcjsKKyAg
ICByZXN1bHQudHlwZSA9IGludGVyc2VjdGlvblR5cGU7CisgICAgcmVzdWx0LnBvaW50LnNldChp
bnRlcnNlY3Rpb25YLCB5KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitmbG9hdCBFeGNsdXNp
b25Qb2x5Z29uOjpyaWdodFZlcnRleFkodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgdW5z
aWduZWQgblZlcnRpY2VzID0gbnVtYmVyT2ZWZXJ0aWNlcygpOworICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHZlcnRleDEgPSB2ZXJ0ZXhBdCgoaW5kZXggKyAxKSAlIG5WZXJ0aWNlcyk7CisgICAgY29u
c3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IHZlcnRleEF0KChpbmRleCAtIDEpICUgblZlcnRpY2Vz
KTsKKworICAgIGlmICh2ZXJ0ZXgxLngoKSA9PSB2ZXJ0ZXgyLngoKSkKKyAgICAgICAgcmV0dXJu
IHZlcnRleDEueSgpID4gdmVydGV4Mi55KCkgPyB2ZXJ0ZXgxLnkoKSA6IHZlcnRleDIueSgpOwor
ICAgIHJldHVybiB2ZXJ0ZXgxLngoKSA+IHZlcnRleDIueCgpID8gdmVydGV4MS55KCkgOiB2ZXJ0
ZXgyLnkoKTsKK30KKworc3RhdGljIGJvb2wgYXBwZW5kSW50ZXJ2YWxYKGZsb2F0IHgsIGJvb2wg
aW5zaWRlLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiByZXN1bHQpCit7CisgICAgaWYgKCFp
bnNpZGUpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoRXhjbHVzaW9uSW50ZXJ2YWwoeCkpOworICAg
IGVsc2UKKyAgICAgICAgcmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxXS54MiA9IHg7CisKKyAgICBy
ZXR1cm4gIWluc2lkZTsKK30KKworc3RhdGljIGJvb2wgY29tcGFyZUVkZ2VJbnRlcnNlY3Rpb25Y
KGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjEsIGNvbnN0IEVkZ2VJbnRlcnNl
Y3Rpb24mIGludGVyc2VjdGlvbjIpCit7CisgICAgZmxvYXQgeDEgPSBpbnRlcnNlY3Rpb24xLnBv
aW50LngoKTsKKyAgICBmbG9hdCB4MiA9IGludGVyc2VjdGlvbjIucG9pbnQueCgpOworICAgIHJl
dHVybiAoeDEgPT0geDIpID8gaW50ZXJzZWN0aW9uMS50eXBlIDwgaW50ZXJzZWN0aW9uMi50eXBl
IDogeDEgPCB4MjsKK30KKwordm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpjb21wdXRlWEludGVyc2Vj
dGlvbnMoZmxvYXQgeSwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KSBjb25zdAor
eworICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5n
RWRnZXM7CisgICAgbV9lZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdl
SW50ZXJ2YWwoeSwgeSwgMCksIG92ZXJsYXBwaW5nRWRnZXMpOworCisgICAgVmVjdG9yPEVkZ2VJ
bnRlcnNlY3Rpb24+IGludGVyc2VjdGlvbnM7CisgICAgRWRnZUludGVyc2VjdGlvbiBpbnRlcnNl
Y3Rpb247CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG92ZXJsYXBwaW5nRWRnZXMuc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2UgPSBzdGF0aWNf
Y2FzdDxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+KG92ZXJsYXBwaW5nRWRnZXNbaV0uZGF0YSgpKTsK
KyAgICAgICAgaWYgKGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHksIGludGVyc2VjdGlvbikp
CisgICAgICAgICAgICBpbnRlcnNlY3Rpb25zLmFwcGVuZChpbnRlcnNlY3Rpb24pOworICAgIH0K
KyAgICBpZiAoaW50ZXJzZWN0aW9ucy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzdGQ6OnNvcnQoaW50ZXJzZWN0aW9ucy5iZWdpbigpLCBpbnRlcnNlY3Rpb25zLmVuZCgpLCBX
ZWJDb3JlOjpjb21wYXJlRWRnZUludGVyc2VjdGlvblgpOworCisgICAgdW5zaWduZWQgaW5kZXgg
PSAwOworICAgIGludCB3aW5kQ291bnQgPSAwOworICAgIGJvb2wgaW5zaWRlID0gZmFsc2U7CisK
KyAgICB3aGlsZSAoaW5kZXggPCBpbnRlcnNlY3Rpb25zLnNpemUoKSkgeworICAgICAgICBjb25z
dCBFZGdlSW50ZXJzZWN0aW9uJiB0aGlzSW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRl
eF07CisKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7Cisg
ICAgICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBuZXh0SW50ZXJzZWN0aW9uID0gaW50
ZXJzZWN0aW9uc1tpbmRleCArIDFdOworICAgICAgICAgICAgaWYgKCh0aGlzSW50ZXJzZWN0aW9u
LnBvaW50LngoKSA9PSBuZXh0SW50ZXJzZWN0aW9uLnBvaW50LngoKSkgJiYgKHRoaXNJbnRlcnNl
Y3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZIHx8IHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0
ZXhNYXhZKSkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0g
bmV4dEludGVyc2VjdGlvbi50eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgcGFp
cnMgb2YgaW50ZXJzZWN0aW9ucyB3aG9zZSB0eXBlcyBhcmUgVmVydGV4TWF4WSxWZXJ0ZXhNYXhZ
IGFuZCBWZXJ0ZXhNaW5ZLFZlcnRleE1pblkuCisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9
IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVw
bGFjZSBwYWlycyBvZiBpbnRlcnNlY3Rpb25zIHdob3NlIHR5cGVzIGFyZSBWZXJ0ZXhNaW5ZLFZl
cnRleE1heFkgb3IgVmVydGV4TWF4WSxWZXJ0ZXhNaW5ZIHdpdGggb25lIFZlcnRleE1pblkgaW50
ZXJzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEludGVyc2VjdGlvbi50eXBl
ID09IFZlcnRleE1heFkpCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25zW2lu
ZGV4ICsgMV0gPSB0aGlzSW50ZXJzZWN0aW9uOworICAgICAgICAgICAgICAgICAgICBpbmRleCsr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiB0
aGlzRWRnZSA9ICp0aGlzSW50ZXJzZWN0aW9uLmVkZ2U7CisgICAgICAgIGJvb2wgY3Jvc3Npbmcg
PSAhd2luZENvdW50OworCisgICAgICAgIGlmIChmaWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkg
eworICAgICAgICAgICAgd2luZENvdW50ICs9ICh0aGlzRWRnZS52ZXJ0ZXgyKCkueSgpID4gdGhp
c0VkZ2UudmVydGV4MSgpLnkoKSkgPyAxIDogLTE7CisgICAgICAgICAgICBjcm9zc2luZyA9IGNy
b3NzaW5nIHx8ICF3aW5kQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHRoaXNJbnRl
cnNlY3Rpb24udHlwZSA9PSBOb3JtYWwpIHx8ICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVy
dGV4TWluWSkpIHsKKyAgICAgICAgICAgIGlmIChjcm9zc2luZykKKyAgICAgICAgICAgICAgICBp
bnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhpc0ludGVyc2VjdGlvbi5wb2ludC54KCksIGluc2lk
ZSwgcmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0g
VmVydGV4TWF4WSkgeworICAgICAgICAgICAgaW50IHZlcnRleEluZGV4ID0gKHRoaXNFZGdlLnZl
cnRleDIoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpKSA/IHRoaXNFZGdlLmluZGV4MiA6
IHRoaXNFZGdlLmluZGV4MTsKKyAgICAgICAgICAgIGlmIChjcm9zc2luZyAmJiByaWdodFZlcnRl
eFkodmVydGV4SW5kZXgpID4geSkKKyAgICAgICAgICAgICAgICBpbnNpZGUgPSBhcHBlbmRJbnRl
cnZhbFgodGhpc0VkZ2UubWF4WCgpLCBpbnNpZGUsIHJlc3VsdCk7CisgICAgICAgIH0gZWxzZSBp
ZiAodGhpc0ludGVyc2VjdGlvbi50eXBlID09IFZlcnRleFlCb3RoKQorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChFeGNsdXNpb25JbnRlcnZhbCh0aGlzRWRnZS5taW5YKCksIHRoaXNFZGdlLm1h
eFgoKSkpOworCisgICAgICAgIGluZGV4Kys7CisgICAgfQorfQorCisvLyBSZXR1cm4gdGhlIFgg
cHJvamVjdGlvbnMgb2YgdGhlIGVkZ2VzIHRoYXQgb3ZlcmxhcCB5MSx5Mi4KK3ZvaWQgRXhjbHVz
aW9uUG9seWdvbjo6Y29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKGZsb2F0IHkxLCBmbG9hdCB5Miwg
VmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KSBjb25zdAoreworICAgIFZlY3RvcjxF
eGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7CisgICAgbV9l
ZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwoeTEsIHky
LCAwKSwgb3ZlcmxhcHBpbmdFZGdlcyk7CisKKyAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVyc2Vj
dGlvbjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdFZGdlcy5zaXpl
KCk7IGkrKykgeworICAgICAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSAqZWRnZSA9IHN0
YXRpY19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3ZlcmxhcHBpbmdFZGdlc1tpXS5kYXRh
KCkpOworICAgICAgICBmbG9hdCB4MTsKKyAgICAgICAgZmxvYXQgeDI7CisKKyAgICAgICAgaWYg
KGVkZ2UtPm1pblkoKSA8IHkxKSB7CisgICAgICAgICAgICBjb21wdXRlWEludGVyc2VjdGlvbihl
ZGdlLCB5MSwgaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAgIHgxID0gaW50ZXJzZWN0aW9uLnBv
aW50LngoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB4MSA9IChlZGdlLT52ZXJ0ZXgx
KCkueSgpIDwgZWRnZS0+dmVydGV4MigpLnkoKSkgPyBlZGdlLT52ZXJ0ZXgxKCkueCgpIDogZWRn
ZS0+dmVydGV4MigpLngoKTsKKworICAgICAgICBpZiAoZWRnZS0+bWF4WSgpID4geTIpIHsKKyAg
ICAgICAgICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHkyLCBpbnRlcnNlY3Rpb24pOwor
ICAgICAgICAgICAgeDIgPSBpbnRlcnNlY3Rpb24ucG9pbnQueCgpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHgyID0gKGVkZ2UtPnZlcnRleDEoKS55KCkgPiBlZGdlLT52ZXJ0ZXgyKCku
eSgpKSA/IGVkZ2UtPnZlcnRleDEoKS54KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOworCisgICAg
ICAgIGlmICh4MSA+IHgyKQorICAgICAgICAgICAgc3RkOjpzd2FwKHgxLCB4Mik7CisKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChFeGNsdXNpb25JbnRlcnZhbCh4MSwgeDIpKTsKKyAgICB9CisKKyAg
ICBzb3J0RXhjbHVzaW9uSW50ZXJ2YWxzKHJlc3VsdCk7Cit9CisKK3ZvaWQgRXhjbHVzaW9uUG9s
eWdvbjo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNh
bEJvdHRvbSwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBmbG9hdCB5MSA9IG1p
bllGb3JMb2dpY2FsTGluZShsb2dpY2FsVG9wLCBsb2dpY2FsQm90dG9tKTsKKyAgICBmbG9hdCB5
MiA9IG1heFlGb3JMb2dpY2FsTGluZShsb2dpY2FsVG9wLCBsb2dpY2FsQm90dG9tKTsKKworICAg
IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7Cisg
ICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkxLCB5MVhJbnRlcnZhbHMpOworICAgIGNvbXB1dGVY
SW50ZXJzZWN0aW9ucyh5MiwgeTJYSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxFeGNsdXNpb25J
bnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOworICAgIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxzKHkx
WEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBtZXJnZWRJbnRlcnZhbHMpOworCisgICAgVmVjdG9y
PEV4Y2x1c2lvbkludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVFZGdlSW50ZXJz
ZWN0aW9ucyh5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lvbklu
dGVydmFsPiBleGNsdWRlZEludGVydmFsczsKKyAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFscyht
ZXJnZWRJbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGV4Y2x1ZGVkSW50ZXJ2YWxzKTsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNsdWRlZEludGVydmFscy5zaXplKCk7IGkrKykg
eworICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9IGV4Y2x1ZGVkSW50ZXJ2YWxz
W2ldOworICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBpbnRl
cnZhbC54MikpOworICAgIH0KK30KKwordm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpnZXRJbmNsdWRl
ZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsQm90dG9tLCBTZWdtZW50
TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAgIGZsb2F0IHkxID0gbWluWUZvckxvZ2ljYWxMaW5l
KGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOworICAgIGZsb2F0IHkyID0gbWF4WUZvckxvZ2lj
YWxMaW5lKGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOworCisgICAgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKKyAgICBjb21wdXRlWEludGVy
c2VjdGlvbnMoeTEsIHkxWEludGVydmFscyk7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHky
LCB5MlhJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBjb21tb25J
bnRlcnZhbHM7CisgICAgaW50ZXJzZWN0RXhjbHVzaW9uSW50ZXJ2YWxzKHkxWEludGVydmFscywg
eTJYSW50ZXJ2YWxzLCBjb21tb25JbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lvbklu
dGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyh5MSwg
eTIsIGVkZ2VJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBpbmNs
dWRlZEludGVydmFsczsKKyAgICBzdWJ0cmFjdEV4Y2x1c2lvbkludGVydmFscyhjb21tb25JbnRl
cnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGluY2x1ZGVkSW50ZXJ2YWxzKTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpbmNsdWRlZEludGVydmFscy5zaXplKCk7IGkrKykgeworICAgICAg
ICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9IGluY2x1ZGVkSW50ZXJ2YWxzW2ldOworICAg
ICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBpbnRlcnZhbC54Mikp
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNjM5N2QwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25Qb2x5Z29uLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK
KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV4
Y2x1c2lvblBvbHlnb25faAorI2RlZmluZSBFeGNsdXNpb25Qb2x5Z29uX2gKKworI2luY2x1ZGUg
IkV4Y2x1c2lvbkludGVydmFsLmgiCisjaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKKyNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUE9E
SW50ZXJ2YWxUcmVlLmgiCisjaW5jbHVkZSAiV2luZFJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdHJ1Y3QgRXhjbHVzaW9uUG9seWdvbkVkZ2U7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCBi
eSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZy4KKyNpZm5kZWYgTkRFQlVHCit0ZW1wbGF0
ZSA8Y2xhc3M+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nOworI2VuZGlmCisKK2NsYXNzIEV4Y2x1c2lv
blBvbHlnb24gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEV4Y2x1c2lvblBvbHlnb24pOworcHVibGljOgorICAgIEV4Y2x1c2lvblBvbHlnb24oUGFz
c093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUp
OworCisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuICgqbV92ZXJ0aWNlcylbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZW
ZXJ0aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljZXMtPnNpemUoKTsgfQorICAgIFdpbmRS
dWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQorCisgICAgdmlydHVh
bCBGbG9hdFJlY3Qgc2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBpbnRlcm5hbFRvTG9naWNhbEJvdW5kaW5nQm94KG1fYm91bmRpbmdCb3gpOyB9CisgICAg
dmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0
IGxvZ2ljYWxCb3R0b20sIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2lj
YWxCb3R0b20sIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAg
ZmxvYXQgcmlnaHRWZXJ0ZXhZKHVuc2lnbmVkKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVYSW50
ZXJzZWN0aW9ucyhmbG9hdCB5LCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JikgY29uc3Q7Cisg
ICAgdm9pZCBjb21wdXRlRWRnZUludGVyc2VjdGlvbnMoZmxvYXQgbWluWSwgZmxvYXQgbWF4WSwg
VmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYpIGNvbnN0OworCisgICAgdHlwZWRlZiBQT0RJbnRl
cnZhbDxmbG9hdCwgRXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBFZGdlSW50ZXJ2YWw7CisgICAgdHlw
ZWRlZiBQT0RJbnRlcnZhbFRyZWU8ZmxvYXQsIEV4Y2x1c2lvblBvbHlnb25FZGdlKj4gRWRnZUlu
dGVydmFsVHJlZTsKKworICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBtX3ZlcnRpY2Vz
OworICAgIFdpbmRSdWxlIG1fZmlsbFJ1bGU7CisgICAgRmxvYXRSZWN0IG1fYm91bmRpbmdCb3g7
CisgICAgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlPiBtX2VkZ2VzOworICAgIEVkZ2VJbnRl
cnZhbFRyZWUgbV9lZGdlVHJlZTsKK307CisKKy8vIEVkZ2VJbnRlcnZhbFRyZWUgbm9kZXMgc3Rv
cmUgbWluWSwgbWF4WSwgYW5kIGEgKCJVc2VyRGF0YSIpIHBvaW50ZXIgdG8gYW4gRXhjbHVzaW9u
UG9seWdvbkVkZ2UuIEVkZ2UgdmVydGV4CisvLyBpbmRleDEgaXMgbGVzcyB0aGFuIGluZGV4Miwg
ZXhjZXB0IHRoZSBsYXN0IGVkZ2UsIHdoZXJlIGluZGV4MiBpcyAwLiBXaGVuIGEgcG9seWdvbiBl
ZGdlIGlzIGRlZmluZWQgYnkgMworLy8gb3IgbW9yZSBjb2xpbmVhciB2ZXJ0aWNlcywgaW5kZXgy
IGNhbiBiZSB0aGUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNvbGluZWFyIHZlcnRleC4KK3N0cnVj
dCBFeGNsdXNpb25Qb2x5Z29uRWRnZSB7CisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQocG9seWdvbik7CisgICAgICAgIHJldHVybiBw
b2x5Z29uLT52ZXJ0ZXhBdChpbmRleDEpOworICAgIH0KKworICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHZlcnRleDIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKHBvbHlnb24pOworICAgICAg
ICByZXR1cm4gcG9seWdvbi0+dmVydGV4QXQoaW5kZXgyKTsKKyAgICB9CisKKyAgICBmbG9hdCBt
aW5YKCkgY29uc3QgeyByZXR1cm4gc3RkOjptaW4odmVydGV4MSgpLngoKSwgdmVydGV4MigpLngo
KSk7IH0KKyAgICBmbG9hdCBtaW5ZKCkgY29uc3QgeyByZXR1cm4gc3RkOjptaW4odmVydGV4MSgp
LnkoKSwgdmVydGV4MigpLnkoKSk7IH0KKyAgICBmbG9hdCBtYXhYKCkgY29uc3QgeyByZXR1cm4g
c3RkOjptYXgodmVydGV4MSgpLngoKSwgdmVydGV4MigpLngoKSk7IH0KKyAgICBmbG9hdCBtYXhZ
KCkgY29uc3QgeyByZXR1cm4gc3RkOjptYXgodmVydGV4MSgpLnkoKSwgdmVydGV4MigpLnkoKSk7
IH0KKworICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb24qIHBvbHlnb247CisgICAgdW5zaWduZWQg
aW5kZXgxOworICAgIHVuc2lnbmVkIGluZGV4MjsKK307CisKKy8vIFRoZXNlIHN0cnVjdHVyZXMg
YXJlIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcuMQorI2lmbmRlZiBOREVC
VUcKK3RlbXBsYXRlIDw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPGZsb2F0PiB7CisgICAgc3RhdGlj
IFN0cmluZyBzdHJpbmcoY29uc3QgZmxvYXQgdmFsdWUpIHsgcmV0dXJuIFN0cmluZzo6bnVtYmVy
KHZhbHVlKTsgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxFeGNsdXNp
b25Qb2x5Z29uRWRnZSo+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBFeGNsdXNp
b25Qb2x5Z29uRWRnZSogZWRnZSkgeyByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVwICglZiwlZiAl
ZiwlZikiLCBlZGdlLCBlZGdlLT52ZXJ0ZXgxKCkueCgpLCBlZGdlLT52ZXJ0ZXgxKCkueSgpLCBl
ZGdlLT52ZXJ0ZXgyKCkueCgpLCBlZGdlLT52ZXJ0ZXgyKCkueSgpKTsgfQorfTsKKyNlbmRpZgor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFeGNsdXNpb25Qb2x5Z29uX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwCmluZGV4IDBmNDMw
ZWYuLmMzZWM4YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
LmNwcApAQCAtMzEsMTAgKzMxLDEwIEBACiAjaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKIAog
I2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJFeGNsdXNpb25Qb2x5
Z29uLmgiCiAjaW5jbHVkZSAiRXhjbHVzaW9uUmVjdGFuZ2xlLmgiCiAjaW5jbHVkZSAiRmxvYXRT
aXplLmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNjAsNiArNjAsMTEgQEAgc3RhdGljIFBh
c3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lvbkVsbGlwc2UoY29uc3QgRmxv
YXRQb2ludCYgY2VudGUKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblJlY3Rhbmds
ZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGlpLndpZHRoKCksIGNlbnRlci55KCkgLSByYWRp
aS5oZWlnaHQoKSwgcmFkaWkud2lkdGgoKSoyLCByYWRpaS5oZWlnaHQoKSoyKSwgcmFkaWkpKTsK
IH0KIAorc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lvblBv
bHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUg
ZmlsbFJ1bGUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25Qb2x5Z29uKHZl
cnRpY2VzLCBmaWxsUnVsZSkpOworfQorCiAvLyBJZiB0aGUgd3JpdGluZ01vZGUgaXMgdmVydGlj
YWwsIHRoZW4gdGhlIEJhc2ljU2hhcGUncyAocGh5c2ljYWwpIHggYW5kIHkgY29vcmRpbmF0ZXMg
YXJlIHN3YXBwZWQsIHNvIHRoYXQKIC8vIGxpbmUgc2VnbWVudHMgYXJlIHBhcmFsbGVsIHRvIHRo
ZSBpbnRlcm5hbCBjb29yZGluYXRlIHN5c3RlbSdzIFggYXhpcy4KIApAQCAtODcsOCArOTIsOCBA
QCBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhjbHVz
aW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZQogICAgICAgICBmbG9hdCByYWRpdXNZID0gcmFkaXVz
WUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWUxl
bmd0aCwgYm94SGVpZ2h0KTsKIAogICAgICAgICBleGNsdXNpb25TaGFwZSA9IGhvcml6b250YWxX
cml0aW5nTW9kZQotICAgICAgICAgID8gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVj
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpKQotICAg
ICAgICAgIDogY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVjdCh5LCB4LCBoZWlnaHQs
IHdpZHRoKSwgRmxvYXRTaXplKHJhZGl1c1ksIHJhZGl1c1gpKTsKKyAgICAgICAgICAgID8gY3Jl
YXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgRmxv
YXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpKQorICAgICAgICAgICAgOiBjcmVhdGVFeGNsdXNpb25S
ZWN0YW5nbGUoRmxvYXRSZWN0KHksIHgsIGhlaWdodCwgd2lkdGgpLCBGbG9hdFNpemUocmFkaXVz
WSwgcmFkaXVzWCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTk5LDggKzEwNCw4IEBA
IFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IEV4Y2x1c2lvblNoYXBlOjpjcmVhdGVFeGNsdXNp
b25TaGFwZShjb25zdCBCYXNpY1NoYXBlCiAgICAgICAgIGZsb2F0IHJhZGl1cyA9ICBmbG9hdFZh
bHVlRm9yTGVuZ3RoKGNpcmNsZS0+cmFkaXVzKCksIHN0ZDo6bWF4KGJveEhlaWdodCwgYm94V2lk
dGgpKTsKIAogICAgICAgICBleGNsdXNpb25TaGFwZSA9IGhvcml6b250YWxXcml0aW5nTW9kZQot
ICAgICAgICAgID8gY3JlYXRlRXhjbHVzaW9uQ2lyY2xlKEZsb2F0UG9pbnQoY2VudGVyWCwgY2Vu
dGVyWSksIHJhZGl1cykKLSAgICAgICAgICA6IGNyZWF0ZUV4Y2x1c2lvbkNpcmNsZShGbG9hdFBv
aW50KGNlbnRlclksIGNlbnRlclgpLCByYWRpdXMpOworICAgICAgICAgICAgPyBjcmVhdGVFeGNs
dXNpb25DaXJjbGUoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgcmFkaXVzKQorICAgICAg
ICAgICAgOiBjcmVhdGVFeGNsdXNpb25DaXJjbGUoRmxvYXRQb2ludChjZW50ZXJZLCBjZW50ZXJY
KSwgcmFkaXVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMTIsMTMgKzExNywyNiBA
QCBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhjbHVz
aW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZQogICAgICAgICBmbG9hdCByYWRpdXNZID0gZmxvYXRW
YWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRpdXNZKCksIGJveEhlaWdodCk7CiAKICAgICAgICAg
ZXhjbHVzaW9uU2hhcGUgPSBob3Jpem9udGFsV3JpdGluZ01vZGUKLSAgICAgICAgICA/IGNyZWF0
ZUV4Y2x1c2lvbkVsbGlwc2UoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgRmxvYXRTaXpl
KHJhZGl1c1gsIHJhZGl1c1kpKQotICAgICAgICAgIDogY3JlYXRlRXhjbHVzaW9uRWxsaXBzZShG
bG9hdFBvaW50KGNlbnRlclksIGNlbnRlclgpLCBGbG9hdFNpemUocmFkaXVzWSwgcmFkaXVzWCkp
OworICAgICAgICAgICAgPyBjcmVhdGVFeGNsdXNpb25FbGxpcHNlKEZsb2F0UG9pbnQoY2VudGVy
WCwgY2VudGVyWSksIEZsb2F0U2l6ZShyYWRpdXNYLCByYWRpdXNZKSkKKyAgICAgICAgICAgIDog
Y3JlYXRlRXhjbHVzaW9uRWxsaXBzZShGbG9hdFBvaW50KGNlbnRlclksIGNlbnRlclgpLCBGbG9h
dFNpemUocmFkaXVzWSwgcmFkaXVzWCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBj
YXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1BPTFlHT046Ci0gICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9QT0xZR09OOiB7CisgICAg
ICAgIGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKiBwb2x5Z29uID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
QmFzaWNTaGFwZVBvbHlnb24qPihiYXNpY1NoYXBlKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPExl
bmd0aD4mIHZhbHVlcyA9IHBvbHlnb24tPnZhbHVlcygpOworICAgICAgICBzaXplX3QgdmFsdWVz
U2l6ZSA9IHZhbHVlcy5zaXplKCk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlc1NpemUgJSAyKSk7
CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50PiogdmVydGljZXMgPSBuZXcgVmVjdG9yPEZsb2F0
UG9pbnQ+KHZhbHVlc1NpemUgLyAyKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHZhbHVlc1NpemU7IGkgKz0gMikgeworICAgICAgICAgICAgRmxvYXRQb2ludCB2ZXJ0ZXgoCisg
ICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMuYXQoaSksIGJveFdpZHRo
KSwKKyAgICAgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpICsgMSks
IGJveEhlaWdodCkpOworICAgICAgICAgICAgKCp2ZXJ0aWNlcylbaSAvIDJdID0gaG9yaXpvbnRh
bFdyaXRpbmdNb2RlID8gdmVydGV4IDogdmVydGV4LnRyYW5zcG9zZWRQb2ludCgpOworICAgICAg
ICB9CisgICAgICAgIGV4Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uUG9seWdvbihhZG9w
dFB0cih2ZXJ0aWNlcyksIHBvbHlnb24tPndpbmRSdWxlKCkpOworICAgICAgICBicmVhazsKKyAg
ICB9CiAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5j
cHAKaW5kZXggN2I2MGFhOS4uYmY3ZjMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAKQEAgLTczLDcgKzczLDcgQEAg
Ym9vbCBFeGNsdXNpb25TaGFwZUluc2lkZUluZm86OmlzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
RW5hYmxlZEZvclJlbmRlckJsb2NrKGMKIHsKICAgICAvLyBGSVhNRTogQnVnIDg5NzA3OiBFbmFi
bGUgc2hhcGUgaW5zaWRlIGZvciBub24tcmVjdGFuZ3VsYXIgc2hhcGVzCiAgICAgQmFzaWNTaGFw
ZSogc2hhcGUgPSBibG9jay0+c3R5bGUoKS0+c2hhcGVJbnNpZGUoKTsKLSAgICByZXR1cm4gKHNo
YXBlICYmIHNoYXBlLT50eXBlKCkgPT0gQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUkVDVEFOR0xF
KTsKKyAgICByZXR1cm4gc2hhcGUgJiYgKHNoYXBlLT50eXBlKCkgPT0gQmFzaWNTaGFwZTo6QkFT
SUNfU0hBUEVfUkVDVEFOR0xFIHx8IHNoYXBlLT50eXBlKCkgPT0gQmFzaWNTaGFwZTo6QkFTSUNf
U0hBUEVfUE9MWUdPTik7CiB9CiAKIHZvaWQgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjpyZW1v
dmVFeGNsdXNpb25TaGFwZUluc2lkZUluZm9Gb3JSZW5kZXJCbG9jayhjb25zdCBSZW5kZXJCbG9j
ayogYmxvY2spCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167586</attachid>
            <date>2012-10-08 12:25:08 -0700</date>
            <delta_ts>2012-10-08 14:20:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>61288</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2ZGQ4NmJmLi5jZGI5ZDI3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTItMDkt
MjcgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBFeGNs
dXNpb25zXSBBZGQgc3VwcG9ydCBmb3IgcG9seWdvbmFsIHNoYXBlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY4MTEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWZXJpZnkgdGhhdCBhIHJlY3Rhbmd1bGFy
IHNoYXBlLWluc2lkZSBzcGVjaWZpZWQgYXMgYSBwb2x5Z29uIHdvcmtzIGFzIGV4cGVjdGVkIGZv
ciBhbGwKKyAgICAgICAgd3JpdGluZy1tb2Rlcy4KKworICAgICAgICBBZGRlZCBleGNsdXNpb25z
IHRlc3RzIGZvciBub24tY29tcGxleCBjb25jYXZlIHNoYXBlLWluc2lkZSBwb2x5Z29ucyBhcyB3
ZWxsLgorICAgICAgICBUaGUgc2hhcGVzIGluIHRoaXMgc2V0IG9mIHRlc3RzIGFyZSAicmVjdGFu
Z3VsYXIiIGluIHRoZSBzZW5zZSB0aGF0CisgICAgICAgIGhvcml6b250YWwgbGluZXMgdGhhdCBv
dmVybGFwIHRoZSBwb2x5Z29uIG9ubHkgY3Jvc3MgdGhlIHBvbHlnb24gdHdpY2UuCisgICAgICAg
IFRoZSBleHBlY3RlZCBwYXJ0IG9mIGVhY2ggdGVzdCB1c2VzIGZsb2F0ICJzYW5kYmFncyIgdG8g
c2ltdWxhdGUgdGhlCisgICAgICAgIHNoYXBlLWluc2lkZSBhcmVhIGluIHRoZSB0ZXN0IGV4cGVj
dGF0aW9ucy4gVGhlICB0ZXN0cyB1c2UgU1ZHIHRvCisgICAgICAgIGRpc3BsYXkgdGhlIHBvbHln
b24gaXRzZWxmLCB0byBzaW1wbGlmeSB2aXN1YWwgaW5zcGVjdGlvbi4KKyAgICAgICAgKFNlZSBo
dHRwOi8vd3d3LmFsaXN0YXBhcnQuY29tL2FydGljbGVzL3NhbmRiYWdzLykuCisKKyAgICAgICAg
KiBmYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3Rh
bmdsZS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V4Y2x1c2lvbnMvc2hh
cGUtaW5zaWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3RhbmdsZS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2V4Y2x1c2lvbnMvcmVzb3VyY2VzL3NpbXBsZS1wb2x5Z29uLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGNyZWF0ZVBvbHlnb24pOgorICAgICAgICAocG9seWdvblhJbnRlcmNlcHRz
KToKKyAgICAgICAgKGdlbmVyYXRlUG9seWdvbkNvbnRlbnRTdHJpbmcpOgorICAgICAgICAoc2lt
dWxhdGVQb2x5Z29uU2hhcGUpOgorICAgICAgICAoZ2VuZXJhdGVTaW11bGF0ZWRQb2x5Z29uU2hh
cGVJbnNpZGVFbGVtZW50KToKKyAgICAgICAgKHBvc2l0aW9uSW5mb3JtYXRpdmVUZXh0KToKKyAg
ICAgICAgKGNyZWF0ZVBvbHlnb25TaGFwZUluc2lkZVRlc3RDYXNlKToKKyAgICAgICAgKGNyZWF0
ZVBvbHlnb25TaGFwZUluc2lkZVRlc3RDYXNlRXhwZWN0ZWQpOgorICAgICAgICAqIGZhc3QvZXhj
bHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXNpbXBsZS1wb2x5Z29uLTAwMS1leHBl
Y3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRl
L3NoYXBlLWluc2lkZS1zaW1wbGUtcG9seWdvbi0wMDEuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtc2ltcGxlLXBvbHlnb24t
MDAyLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFw
ZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXNpbXBsZS1wb2x5Z29uLTAwMi5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1zaW1wbGUt
cG9seWdvbi0wMDMtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9leGNsdXNp
b25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtc2ltcGxlLXBvbHlnb24tMDAzLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRl
LXNpbXBsZS1wb2x5Z29uLTAwNC1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1zaW1wbGUtcG9seWdvbi0wMDQu
aHRtbDogQWRkZWQuCisKIDIwMTItMTAtMDggIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29t
cGFueTEwMC5uZXQ+CiAKICAgICAgICAgW1F0XSBNYWtlIEltYWdlQnVmZmVyUXQgdXNlIHByZW11
bHRpcGxpZWQgY29udmVydGluZyBmdW5jdGlvbnMgaW4gQ29sb3IuaCBpbnN0ZWFkIG9mIGl0cyBv
d24gbWVjaGFuaXNtLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25zL3Jl
c291cmNlcy9zaW1wbGUtcG9seWdvbi5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9y
ZXNvdXJjZXMvc2ltcGxlLXBvbHlnb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMDRlNGEwMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXhjbHVz
aW9ucy9yZXNvdXJjZXMvc2ltcGxlLXBvbHlnb24uanMKQEAgLTAsMCArMSwyMTQgQEAKKy8vIFRo
ZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHRlc3Qg
bm9uLWNvbXBsZXggcG9seWdvbnMKKy8vIHdoZXJlIGhvcml6b250YWwgbGluZXMgdGhhdCBvdmVy
bGFwIHRoZSBwb2x5Z29uIG9ubHkgY3Jvc3MgdGhlIHBvbHlnb24gdHdpY2UuCisKK2Z1bmN0aW9u
IGNyZWF0ZVBvbHlnb24odmVydGljZXMpIHsKKyAgICB2YXIgeENvb3JkaW5hdGVzID0gdmVydGlj
ZXMubWFwKCBmdW5jdGlvbihwKSB7IHJldHVybiBwLng7IH0gKTsKKyAgICB2YXIgeUNvb3JkaW5h
dGVzID0gdmVydGljZXMubWFwKCBmdW5jdGlvbihwKSB7IHJldHVybiBwLnk7IH0gKTsKKyAgICBy
ZXR1cm4geworICAgICAgICB2ZXJ0aWNlczogdmVydGljZXMsCisgICAgICAgIG1pblg6IE1hdGgu
bWluLmFwcGx5KG51bGwsIHhDb29yZGluYXRlcyksCisgICAgICAgIG1heFg6IE1hdGgubWF4LmFw
cGx5KG51bGwsIHhDb29yZGluYXRlcyksCisgICAgICAgIG1pblk6IE1hdGgubWluLmFwcGx5KG51
bGwsIHlDb29yZGluYXRlcyksCisgICAgICAgIG1heFk6IE1hdGgubWF4LmFwcGx5KG51bGwsIHlD
b29yZGluYXRlcykKKyAgICB9OworfQorCisvLyBSZXR1cm4gdHdvIFggaW50ZXJjZXB0cyBvZiB0
aGUgaG9yaXpvbnRhbCBsaW5lIGF0IHkuIFdlJ3JlIGFzc3VtaW5nIHRoYXQgdGhlIHBvbHlnb24K
Ky8vIDAgb3IgMiBpbnRlcmNlcHRzIGZvciBhbGwgeS5PZiBjb3Vyc2UgdGhpcyBpc24ndCB0cnVl
IGZvciBwb2x5Z29ucyBpbiBnZW5lcmFsLAorLy8ganVzdCB0aGUgb25lcyB1c2VkIGJ5IHRoZSB0
ZXN0IGNhc2VzIHN1cHBvcnRlZCBieSB0aGlzIGZpbGUuCisKK2Z1bmN0aW9uIHBvbHlnb25YSW50
ZXJjZXB0cyhwb2x5Z29uLCB5KSB7CisgICAgdmFyIHZlcnRpY2VzID0gcG9seWdvbi52ZXJ0aWNl
czsKKyAgICB2YXIgdmVydGV4ID0gbnVsbDsgIC8vIGZpcnN0IGludGVyc2VjdGluZyBub24taG9y
aXpvbnRhbCBlZGdlIHZlcnRleCwgdmVydGV4LnkgPT0geQorICAgIHZhciB4SW50ZXJjZXB0cyA9
IFtdOworCisgICAgZm9yKHZhciBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aCAmJiB4SW50ZXJj
ZXB0cy5sZW5ndGggPCAyOyBpKyspIHsKKyAgICAgICAgdmFyIHYxID0gdmVydGljZXNbaV07Cisg
ICAgICAgIHZhciB2MiA9IHZlcnRpY2VzWyhpICsgMSkgJSB2ZXJ0aWNlcy5sZW5ndGhdOworCisg
ICAgICAgIGlmICh2ZXJ0ZXggPT0gdjEgfHwgdmVydGV4ID09IHYyKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgdmFyIG1pblkgPSBNYXRoLm1pbih2MS55LCB2Mi55KTsKKyAgICAg
ICAgdmFyIG1heFkgPSBNYXRoLm1heCh2MS55LCB2Mi55KTsKKworICAgICAgICBpZiAobWF4WSA8
IHkgfHwgbWluWSA+IHkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAobWlu
WSA9PSBtYXhZKQorICAgICAgICAgICAgcmV0dXJuIFt2MS54LCB2Mi54XTsKKworICAgICAgICBp
ZiAodjEueSA9PSB5KSB7CisgICAgICAgICAgICB4SW50ZXJjZXB0cy5wdXNoKHYxLngpOworICAg
ICAgICAgICAgaWYgKCF2ZXJ0ZXgpCisgICAgICAgICAgICAgICAgdmVydGV4ID0gdjE7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAodjIueSA9PSB5KSB7CisgICAgICAgICAgICB4SW50ZXJj
ZXB0cy5wdXNoKHYyLngpOworICAgICAgICAgICAgaWYgKCF2ZXJ0ZXgpCisgICAgICAgICAgICAg
ICAgdmVydGV4ID0gdjI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB4
SW50ZXJjZXB0cy5wdXNoKCAoKHkgLSB2MS55KSAqICh2Mi54IC0gdjEueCkgLyAodjIueSAtIHYx
LnkpKSArIHYxLnggKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAoeEludGVyY2Vw
dHMubGVuZ3RoID09IDIpICA/IFtNYXRoLm1pbi5hcHBseShudWxsLCB4SW50ZXJjZXB0cyksIE1h
dGgubWF4LmFwcGx5KG51bGwsIHhJbnRlcmNlcHRzKV0gOiBbXTsKK30KKworZnVuY3Rpb24gcG9s
eWdvbkxpbmVJbnRlcmNlcHRzKHBvbHlnb24sIHksIGxpbmVIZWlnaHQpIHsKKyAgICB2YXIgaTEg
PSBwb2x5Z29uWEludGVyY2VwdHMocG9seWdvbiwgeSk7CisgICAgdmFyIGkyID0gcG9seWdvblhJ
bnRlcmNlcHRzKHBvbHlnb24sIHkgKyBsaW5lSGVpZ2h0KTsKKworICAgIGlmIChpMS5sZW5ndGgg
PCAyKQorICAgICAgICByZXR1cm4gaTI7CisgICAgaWYgKGkyLmxlbmd0aCA8IDIpCisgICAgICAg
IHJldHVybiBpMTsKKworICAgIHJldHVybiBbTWF0aC5tYXgoaTFbMF0sIGkyWzBdKSwgTWF0aC5t
aW4oaTFbMV0sIGkyWzFdKV07Cit9CisKKy8vIEdlbmVyYXRlIGFuICJYIFggLi4uIiBzdHJpbmcg
dGhhdCBjb250YWlucyBlbm91Z2ggY2hhcmFjdGVycyB0byBmaWxsIHRoZSBwb2x5Z29uLiBFYWNo
CisvLyBjaGFyYWN0ZXIgb2NjdXBpZXMgYSBsaW5lSGVpZ2h0IHNpemUgc3F1YXJlIGNlbGwsIHRo
ZSB0b3Agb2YgZmlyc3QgbGluZSBvZiBjaGFyYWN0ZXJzIGlzIGFsaWduZWQKKy8vIHdpdGggdGhl
IHRoZSBwb2x5Z29uJ3MgYm91bmRzIG1pbmltdW0gWSB2YWx1ZSwgYW5kIGVhY2ggbGluZSBvZiBj
aGFyYWN0ZXJzIGZpbGxzIHRoZSBpbnRlcmlvcgorLy8gb2YgdGhlIHBvbHlnb24uCisKK2Z1bmN0
aW9uIGdlbmVyYXRlUG9seWdvbkNvbnRlbnRTdHJpbmcocG9seWdvbiwgbGluZWhlaWdodCkgewor
ICAgIHZhciByZXN1bHQgPSAiIjsKKworICAgIGZvciAodmFyIHkgPSBwb2x5Z29uLm1pblk7IHkg
PCBwb2x5Z29uLm1heFk7IHkgKz0gbGluZUhlaWdodCkgeworICAgICAgICB2YXIgeEludGVyY2Vw
dHMgPSBwb2x5Z29uTGluZUludGVyY2VwdHMocG9seWdvbiwgeSwgbGluZUhlaWdodCk7CisgICAg
ICAgIHZhciBsZW5ndGhJbkNlbGxzID0gTWF0aC5mbG9vcih4SW50ZXJjZXB0c1sxXSAvIGxpbmVI
ZWlnaHQpIC0gTWF0aC5jZWlsKHhJbnRlcmNlcHRzWzBdIC8gbGluZUhlaWdodCk7CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoSW5DZWxscyAvIDI7IGkrKykKKyAgICAgICAgICAg
IHJlc3VsdCArPSAiWCAiOyAgLy8gYWxsIGxpbmVzIGVuZCBpbiBhIHNwYWNlLCB0byBlbmFibGUg
bGluZSBicmVha2luZworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9u
IGdlbmVyYXRlUG9seWdvblNoYXBlSW5zaWRlRWxlbWVudChlbGVtZW50SWQsIHN0eWxlc2hlZXQs
IHBvbHlnb24sIGxpbmVIZWlnaHQpIHsKKyAgICB2YXIgdmVydGljZXNTdHJpbmcgPSBwb2x5Z29u
LnZlcnRpY2VzLm1hcCggZnVuY3Rpb24ocCkgeyByZXR1cm4gcC54ICsgInB4ICIgKyBwLnkgKyAi
cHgiOyB9ICkuam9pbigiLCAiKTsKKyAgICBzdHlsZXNoZWV0Lmluc2VydFJ1bGUoIiMiICsgZWxl
bWVudElkICsgIiB7ICIKKyAgICAgICAgKyAiLXdlYmtpdC1zaGFwZS1pbnNpZGU6IHBvbHlnb24o
IiArIHZlcnRpY2VzU3RyaW5nICsgIik7ICIKKyAgICAgICAgKyAid2lkdGg6ICIgKyBwb2x5Z29u
Lm1heFggKyAicHg7ICIKKyAgICAgICAgKyAiaGVpZ2h0OiAiICsgcG9seWdvbi5tYXhZICsgInB4
OyAiCisgICAgICAgICsgImZvbnQ6ICIgKyBsaW5lSGVpZ2h0ICsgInB4LzEgQWhlbSwgc2Fucy1z
ZXJpZjsgfSIpOworICAgIHN0eWxlc2hlZXQuaW5zZXJ0UnVsZSgiIyIgKyBlbGVtZW50SWQgKyAi
IHAgeyAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDA7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgbGV0
dGVyLXNwYWNpbmc6IDA7fSIpOworCisgICAgdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShnZW5lcmF0ZVBvbHlnb25Db250ZW50U3RyaW5nKHBvbHlnb24sIGxpbmVIZWlnaHQpKTsK
KyAgICB2YXIgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICBwLmFwcGVuZENo
aWxkKHRleHQpOworCisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChl
bGVtZW50SWQpOworICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQocCk7Cit9CisKK2Z1bmN0aW9uIGdl
bmVyYXRlUG9seWdvblNWR0VsZW1lbnRzKGVsZW1lbnRJZCwgc3R5bGVzaGVldCwgcG9seWdvbiwg
bGluZUhlaWdodCkgeworICAgIHZhciBzdmdOUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyI7CisKKyAgICB2YXIgc3ZnUG9seWdvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdO
UywgInBvbHlnb24iKTsKKyAgICBzdmdQb2x5Z29uLnNldEF0dHJpYnV0ZSgicG9pbnRzIiwgcG9s
eWdvbi52ZXJ0aWNlcy5tYXAoIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHAueCArICIsIiArIHAueTsg
fSApLmpvaW4oIiAiKSk7CisgICAgc3ZnUG9seWdvbi5zZXRBdHRyaWJ1dGUoImZpbGwiLCAiIzYz
NjM2MyIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCkuYXBwZW5kQ2hp
bGQoc3ZnUG9seWdvbik7Cit9CisKK2Z1bmN0aW9uIHNpbXVsYXRlUG9seWdvblNoYXBlKGVsZW1l
bnRJZCwgc3R5bGVzaGVldCwgcG9seWdvbiwgbGluZUhlaWdodCkgeworICAgIHZhciB3aWR0aCA9
IE1hdGguY2VpbChwb2x5Z29uLm1heFgpOworICAgIHZhciBoZWlnaHQgPSBNYXRoLmNlaWwocG9s
eWdvbi5tYXhZKTsKKyAgICBzdHlsZXNoZWV0Lmluc2VydFJ1bGUoIiMiICsgZWxlbWVudElkICsg
IiB7IHdpZHRoOiAiICsgd2lkdGggKyAicHg7IGhlaWdodDogIiArIGhlaWdodCArICJweDsgZm9u
dDogIiArIGxpbmVIZWlnaHQgKyAicHgvMSBBaGVtLCBzYW5zLXNlcmlmO30iKTsKKyAgICBzdHls
ZXNoZWV0Lmluc2VydFJ1bGUoIiMiICsgZWxlbWVudElkICsgIiAuZmxvYXQgeyBoZWlnaHQ6ICIg
KyBsaW5lSGVpZ2h0ICsgInB4OyB9Iik7CisgICAgc3R5bGVzaGVldC5pbnNlcnRSdWxlKCIjIiAr
IGVsZW1lbnRJZCArICIgLmxlZnQgeyBmbG9hdDogbGVmdDsgY2xlYXI6IGxlZnQ7IH0iKTsKKyAg
ICBzdHlsZXNoZWV0Lmluc2VydFJ1bGUoIiMiICsgZWxlbWVudElkICsgIiAucmlnaHQgeyBmbG9h
dDogcmlnaHQ7IGNsZWFyOiByaWdodDsgfSIpOworICAgIHN0eWxlc2hlZXQuaW5zZXJ0UnVsZSgi
IyIgKyBlbGVtZW50SWQgKyAiIHAgeyAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDA7IHdvcmQtd3Jh
cDogYnJlYWstd29yZDsgbGV0dGVyLXNwYWNpbmc6IDA7IH0iKTsKKworICAgIHZhciBlbGVtZW50
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKKworICAgIHZhciBwYWRkaW5n
VG9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgcGFkZGluZ1RvcC5zZXRB
dHRyaWJ1dGUoImNsYXNzIiwgImZsb2F0IGxlZnQiKTsKKyAgICBwYWRkaW5nVG9wLnN0eWxlLndp
ZHRoID0gd2lkdGggKyAicHgiOworICAgIHBhZGRpbmdUb3Auc3R5bGUuaGVpZ2h0ID0gcG9seWdv
bi5taW5ZICsgInB4IjsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKHBhZGRpbmdUb3ApOworCisg
ICAgZm9yICh2YXIgeSA9IHBvbHlnb24ubWluWTsgeSA8IHBvbHlnb24ubWF4WTsgeSArPSBsaW5l
SGVpZ2h0KSB7CisgICAgICAgIHZhciB4SW50ZXJjZXB0cyA9IHBvbHlnb25MaW5lSW50ZXJjZXB0
cyhwb2x5Z29uLCB5LCBsaW5lSGVpZ2h0KTsKKyAgICAgICAgdmFyIGxlZnQgPSBNYXRoLmNlaWwo
eEludGVyY2VwdHNbMCBdKTsKKyAgICAgICAgdmFyIHJpZ2h0ID0gTWF0aC5mbG9vcih4SW50ZXJj
ZXB0c1sxXSk7CisKKyAgICAgICAgdmFyIHBhZGRpbmdMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7CisgICAgICAgIHBhZGRpbmdMZWZ0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAi
ZmxvYXQgbGVmdCIpOworICAgICAgICBwYWRkaW5nTGVmdC5zdHlsZS53aWR0aCA9IGxlZnQgKyAi
cHgiOworICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHBhZGRpbmdMZWZ0KTsKKworICAgICAg
ICB2YXIgcGFkZGluZ1JpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAg
ICAgIHBhZGRpbmdSaWdodC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImZsb2F0IHJpZ2h0Iik7Cisg
ICAgICAgIHBhZGRpbmdSaWdodC5zdHlsZS53aWR0aCA9IHdpZHRoIC0gcmlnaHQgKyAicHgiOwor
ICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHBhZGRpbmdSaWdodCk7CisgICAgfQorfQorCitm
dW5jdGlvbiBnZW5lcmF0ZVNpbXVsYXRlZFBvbHlnb25TaGFwZUluc2lkZUVsZW1lbnQoZWxlbWVu
dElkLCBzdHlsZXNoZWV0LCBwb2x5Z29uLCBsaW5lSGVpZ2h0KSB7CisgICAgdmFyIHdpZHRoID0g
TWF0aC5jZWlsKHBvbHlnb24ubWF4WCk7CisgICAgdmFyIGhlaWdodCA9IE1hdGguY2VpbChwb2x5
Z29uLm1heFkpOworCisgICAgc3R5bGVzaGVldC5pbnNlcnRSdWxlKCIjIiArIGVsZW1lbnRJZCAr
ICIgeyB3aWR0aDogIiArIHdpZHRoICsgInB4OyBoZWlnaHQ6ICIgKyBoZWlnaHQgKyAicHg7IGZv
bnQ6ICIgKyBsaW5lSGVpZ2h0ICsgInB4LzEgQWhlbSwgc2Fucy1zZXJpZjt9Iik7CisgICAgc3R5
bGVzaGVldC5pbnNlcnRSdWxlKCIjIiArIGVsZW1lbnRJZCArICIgLmZsb2F0IHsgaGVpZ2h0OiAi
ICsgbGluZUhlaWdodCArICJweDsgfSIpOworICAgIHN0eWxlc2hlZXQuaW5zZXJ0UnVsZSgiIyIg
KyBlbGVtZW50SWQgKyAiIC5sZWZ0IHsgZmxvYXQ6IGxlZnQ7IGNsZWFyOiBsZWZ0OyB9Iik7Cisg
ICAgc3R5bGVzaGVldC5pbnNlcnRSdWxlKCIjIiArIGVsZW1lbnRJZCArICIgLnJpZ2h0IHsgZmxv
YXQ6IHJpZ2h0OyBjbGVhcjogcmlnaHQ7IH0iKTsKKyAgICBzdHlsZXNoZWV0Lmluc2VydFJ1bGUo
IiMiICsgZWxlbWVudElkICsgIiBwIHsgLXdlYmtpdC1tYXJnaW4tYmVmb3JlOiAwOyB3b3JkLXdy
YXA6IGJyZWFrLXdvcmQ7IGxldHRlci1zcGFjaW5nOiAwOyB9Iik7CisKKyAgICB2YXIgZWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7CisKKyAgICB2YXIgcGFkZGlu
Z1RvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHBhZGRpbmdUb3Auc2V0
QXR0cmlidXRlKCJjbGFzcyIsICJmbG9hdCBsZWZ0Iik7CisgICAgcGFkZGluZ1RvcC5zdHlsZS53
aWR0aCA9IHdpZHRoICsgInB4IjsKKyAgICBwYWRkaW5nVG9wLnN0eWxlLmhlaWdodCA9IHBvbHln
b24ubWluWSArICJweCI7CisgICAgZWxlbWVudC5hcHBlbmRDaGlsZChwYWRkaW5nVG9wKTsKKwor
ICAgIGZvciAodmFyIHkgPSBwb2x5Z29uLm1pblk7IHkgPCBwb2x5Z29uLm1heFk7IHkgKz0gbGlu
ZUhlaWdodCkgeworICAgICAgICB2YXIgeEludGVyY2VwdHMgPSBwb2x5Z29uTGluZUludGVyY2Vw
dHMocG9seWdvbiwgeSwgbGluZUhlaWdodCk7CisgICAgICAgIHZhciBsZWZ0ID0gTWF0aC5jZWls
KHhJbnRlcmNlcHRzWzAgXSk7CisgICAgICAgIHZhciByaWdodCA9IE1hdGguZmxvb3IoeEludGVy
Y2VwdHNbMV0pOworCisgICAgICAgIHZhciBwYWRkaW5nTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworICAgICAgICBwYWRkaW5nTGVmdC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwg
ImZsb2F0IGxlZnQiKTsKKyAgICAgICAgcGFkZGluZ0xlZnQuc3R5bGUud2lkdGggPSBsZWZ0ICsg
InB4IjsKKyAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChwYWRkaW5nTGVmdCk7CisKKyAgICAg
ICAgdmFyIHBhZGRpbmdSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAg
ICAgICBwYWRkaW5nUmlnaHQuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJmbG9hdCByaWdodCIpOwor
ICAgICAgICBwYWRkaW5nUmlnaHQuc3R5bGUud2lkdGggPSB3aWR0aCAtIHJpZ2h0ICsgInB4IjsK
KyAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChwYWRkaW5nUmlnaHQpOworICAgIH0KKworICAg
IHZhciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZ2VuZXJhdGVQb2x5Z29uQ29udGVu
dFN0cmluZyhwb2x5Z29uLCBsaW5lSGVpZ2h0KSk7CisgICAgdmFyIHAgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJwIik7CisgICAgcC5hcHBlbmRDaGlsZCh0ZXh0KTsKKworICAgIHZhciBlbGVt
ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKKyAgICBlbGVtZW50LmFw
cGVuZENoaWxkKHApOworfQorCisKKworCitmdW5jdGlvbiBwb3NpdGlvbkluZm9ybWF0aXZlVGV4
dChlbGVtZW50SWQsIHN0eWxlc2hlZXQsIHBvbHlnb24sIGxpbmVIZWlnaHQpCit7CisgICAgc3R5
bGVzaGVldC5pbnNlcnRSdWxlKCIjIiArIGVsZW1lbnRJZCArICIgeyBwb3NpdGlvbjogYWJzb2x1
dGU7IHRvcDogIiArIChwb2x5Z29uLm1heFkgKyBsaW5lSGVpZ2h0KSArICJweDt9Iik7Cit9CisK
K2Z1bmN0aW9uIGNyZWF0ZVBvbHlnb25TaGFwZUluc2lkZVRlc3RDYXNlKHZlcnRpY2VzKSB7Cisg
ICAgdmFyIHN0eWxlc2hlZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3R5bGVzaGVldCIp
LnNoZWV0OworICAgIHZhciBwb2x5Z29uID0gY3JlYXRlUG9seWdvbih2ZXJ0aWNlcyk7CisgICAg
Z2VuZXJhdGVQb2x5Z29uU2hhcGVJbnNpZGVFbGVtZW50KCJwb2x5Z29uLXNoYXBlLWluc2lkZSIs
IHN0eWxlc2hlZXQsIHBvbHlnb24sIGxpbmVIZWlnaHQpOworICAgIGdlbmVyYXRlUG9seWdvblNW
R0VsZW1lbnRzKCJwb2x5Z29uLXN2Zy1zaGFwZSIsIHN0eWxlc2hlZXQsIHBvbHlnb24sIGxpbmVI
ZWlnaHQpOworICAgIHBvc2l0aW9uSW5mb3JtYXRpdmVUZXh0KCJpbmZvcm1hdGl2ZS10ZXh0Iiwg
c3R5bGVzaGVldCwgcG9seWdvbiwgbGluZUhlaWdodCkKK30KKworZnVuY3Rpb24gY3JlYXRlUG9s
eWdvblNoYXBlSW5zaWRlVGVzdENhc2VFeHBlY3RlZCh2ZXJ0aWNlcykgeworICAgIHZhciBzdHls
ZXNoZWV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0eWxlc2hlZXQiKS5zaGVldDsKKyAg
ICB2YXIgcG9seWdvbiA9IGNyZWF0ZVBvbHlnb24odmVydGljZXMpOworICAgIGdlbmVyYXRlU2lt
dWxhdGVkUG9seWdvblNoYXBlSW5zaWRlRWxlbWVudCgicG9seWdvbi1zaGFwZS1pbnNpZGUiLCBz
dHlsZXNoZWV0LCBwb2x5Z29uLCBsaW5lSGVpZ2h0KTsKKyAgICBnZW5lcmF0ZVBvbHlnb25TVkdF
bGVtZW50cygicG9seWdvbi1zdmctc2hhcGUiLCBzdHlsZXNoZWV0LCBwb2x5Z29uLCBsaW5lSGVp
Z2h0KTsKKyAgICBwb3NpdGlvbkluZm9ybWF0aXZlVGV4dCgiaW5mb3JtYXRpdmUtdGV4dCIsIHN0
eWxlc2hlZXQsIHBvbHlnb24sIGxpbmVIZWlnaHQpCit9CisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24tcmVj
dGFuZ2xlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lvbnMvc2hhcGUt
aW5zaWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3RhbmdsZS1leHBlY3RlZC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YjQ4YmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1w
b2x5Z29uLXJlY3RhbmdsZS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsNDkgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyAgICAjc2hhcGUtaW5zaWRlLWhvcml6
b250YWwgeworICAgICAgICBwYWRkaW5nOiAyMHB4IDM1cHggMjVweCAxNXB4OworICAgICAgICB3
aWR0aDogMTUwcHg7CisgICAgICAgIGhlaWdodDogMTc1cHg7CisgICAgICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKKyAgICB9CisgICAgI3NoYXBlLWluc2lkZS12ZXJ0aWNhbC1sciB7CisgICAgICAg
IHBhZGRpbmc6IDIwcHggMzVweCAyNXB4IDE1cHg7CisgICAgICAgIHdpZHRoOiAxNTBweDsKKyAg
ICAgICAgaGVpZ2h0OiAxNzVweDsKKyAgICAgICAgLXdlYmtpdC13cml0aW5nLW1vZGU6IHZlcnRp
Y2FsLWxyOworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgfQorICAgICNzaGFwZS1p
bnNpZGUtdmVydGljYWwtcmwgeworICAgICAgICBwYWRkaW5nOiAyMHB4IDM1cHggMjVweCAxNXB4
OworICAgICAgICB3aWR0aDogMTUwcHg7CisgICAgICAgIGhlaWdodDogMTc1cHg7CisgICAgICAg
IC13ZWJraXQtd3JpdGluZy1tb2RlOiB2ZXJ0aWNhbC1ybDsKKyAgICAgICAgcG9zaXRpb246IHJl
bGF0aXZlOworICAgIH0KKyAgICAjYm9yZGVyIHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgICAgICB0b3A6IDEzcHg7CisgICAgICAgIGxlZnQ6IDE4cHg7CisgICAgICAgIHdpZHRo
OiAxNTBweDsKKyAgICAgICAgaGVpZ2h0OiAxNzVweDsKKyAgICAgICAgYm9yZGVyOiAycHggc29s
aWQgYmx1ZTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBpZD0i
c2hhcGUtaW5zaWRlLWhvcml6b250YWwiPgorICAgICAgICA8ZGl2IGlkPSJib3JkZXIiPjwvZGl2
PgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGNvbnRhaW5lZCBieSB0aGUgYmx1ZSBzcXVh
cmUuCisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0ic2hhcGUtaW5zaWRlLXZlcnRpY2FsLWxyIj4K
KyAgICAgICAgPGRpdiBpZD0iYm9yZGVyIj48L2Rpdj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3Vs
ZCBiZSBjb250YWluZWQgYnkgdGhlIGJsdWUgc3F1YXJlLgorICAgIDwvZGl2PgorICAgIDxkaXYg
aWQ9InNoYXBlLWluc2lkZS12ZXJ0aWNhbC1ybCI+CisgICAgICAgIDxkaXYgaWQ9ImJvcmRlciI+
PC9kaXY+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgY29udGFpbmVkIGJ5IHRoZSBibHVl
IHNxdWFyZS4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXBvbHlnb24t
cmVjdGFuZ2xlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRl
L3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3RhbmdsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmUzOWFiZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3Rhbmds
ZS5odG1sCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHdpbmRvdy5pbnRl
cm5hbHMuc2V0dGluZ3Muc2V0Q1NTRXhjbHVzaW9uc0VuYWJsZWQodHJ1ZSk7Cis8L3NjcmlwdD4K
KzxzdHlsZT4KKyAgICAjc2hhcGUtaW5zaWRlLWhvcml6b250YWwgeworICAgICAgICB3aWR0aDog
MjAwcHg7CisgICAgICAgIGhlaWdodDogMjIwcHg7CisgICAgICAgIC13ZWJraXQtc2hhcGUtaW5z
aWRlOiBwb2x5Z29uKDE1cHggMjBweCwgMTY1cHggMjBweCwgMTY1cHggMTk1cHgsIDE1cHggMTk1
cHgpOworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgfQorICAgICNzaGFwZS1pbnNp
ZGUtdmVydGljYWwtbHIgeworICAgICAgICB3aWR0aDogMjAwcHg7CisgICAgICAgIGhlaWdodDog
MjIwcHg7CisgICAgICAgIC13ZWJraXQtc2hhcGUtaW5zaWRlOiBwb2x5Z29uKDE1cHggMjBweCwg
MTY1cHggMjBweCwgMTY1cHggMTk1cHgsIDE1cHggMTk1cHgpOworICAgICAgICAtd2Via2l0LXdy
aXRpbmctbW9kZTogdmVydGljYWwtbHI7CisgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAg
ICB9CisgICAgI3NoYXBlLWluc2lkZS12ZXJ0aWNhbC1ybCB7CisgICAgICAgIHdpZHRoOiAyMDBw
eDsKKyAgICAgICAgaGVpZ2h0OiAyMjBweDsKKyAgICAgICAgLXdlYmtpdC1zaGFwZS1pbnNpZGU6
IHBvbHlnb24oMTVweCAyMHB4LCAxNjVweCAyMHB4LCAxNjVweCAxOTVweCwgMTVweCAxOTVweCk7
CisgICAgICAgIC13ZWJraXQtd3JpdGluZy1tb2RlOiB2ZXJ0aWNhbC1ybDsKKyAgICAgICAgcG9z
aXRpb246IHJlbGF0aXZlOworICAgIH0KKyAgICAjYm9yZGVyIHsKKyAgICAgICAgcG9zaXRpb246
IGFic29sdXRlOworICAgICAgICB0b3A6IDEzcHg7CisgICAgICAgIGxlZnQ6IDE4cHg7CisgICAg
ICAgIHdpZHRoOiAxNTBweDsKKyAgICAgICAgaGVpZ2h0OiAxNzVweDsKKyAgICAgICAgYm9yZGVy
OiAycHggc29saWQgYmx1ZTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAg
PGRpdiBpZD0ic2hhcGUtaW5zaWRlLWhvcml6b250YWwiPgorICAgICAgICA8ZGl2IGlkPSJib3Jk
ZXIiPjwvZGl2PgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGNvbnRhaW5lZCBieSB0aGUg
Ymx1ZSBzcXVhcmUuCisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0ic2hhcGUtaW5zaWRlLXZlcnRp
Y2FsLWxyIj4KKyAgICAgICAgPGRpdiBpZD0iYm9yZGVyIj48L2Rpdj4KKyAgICAgICAgVGhpcyB0
ZXh0IHNob3VsZCBiZSBjb250YWluZWQgYnkgdGhlIGJsdWUgc3F1YXJlLgorICAgIDwvZGl2Pgor
ICAgIDxkaXYgaWQ9InNoYXBlLWluc2lkZS12ZXJ0aWNhbC1ybCI+CisgICAgICAgIDxkaXYgaWQ9
ImJvcmRlciI+PC9kaXY+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgY29udGFpbmVkIGJ5
IHRoZSBibHVlIHNxdWFyZS4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRl
LXNpbXBsZS1wb2x5Z29uLTAwMS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9leGNs
dXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtc2ltcGxlLXBvbHlnb24tMDAxLWV4cGVj
dGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4NThhZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUv
c2hhcGUtaW5zaWRlLXNpbXBsZS1wb2x5Z29uLTAwMS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEs
MzIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvc2ltcGxlLXBvbHlnb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyAgICBpZiAo
d2luZG93LmludGVybmFscykKKyAgICAgICAgd2luZG93LmludGVybmFscy5zZXR0aW5ncy5zZXRD
U1NFeGNsdXNpb25zRW5hYmxlZCh0cnVlKTsKKworICAgIC8vIENvbmNhdmUgYXNzeW1ldHJpYyBz
aW1wbGUgcG9seWdvbiB3aXRoIGhvcml6b250YWwgdG9wIGFuZCBib3R0b20gZWRnZXMuICBSb3Vn
aGx5IGFuIGhvdXJnbGFzcyBzaGFwZS4KKyAgICB2YXIgdmVydGljZXMgPSBbe3g6NDAsIHk6NDB9
LCB7eDo0NDAsIHk6NDB9LCB7eDozMjAsIHk6MTYwfSwge3g6NDgwLCB5OjMyMH0sIHt4OjgwLCB5
OjMyMH0sIHt4OjIwMCwgeToyMDB9XTsKKyAgICB2YXIgbGluZUhlaWdodCA9IDQwOworPC9zY3Jp
cHQ+CisKKzxzdHlsZSBpZD0ic3R5bGVzaGVldCI+CisgICAgI3BvbHlnb24tc2hhcGUtaW5zaWRl
LCAjcG9seWdvbi1zdmctc2hhcGUgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
ICAgIGxlZnQ6IDBweDsKKyAgICAgICAgdG9wOiAwcHg7CisgICAgfQorPC9zdHlsZT4KKzwvaGVh
ZD4KKworPGJvZHkgb25sb2FkPSJjcmVhdGVQb2x5Z29uU2hhcGVJbnNpZGVUZXN0Q2FzZUV4cGVj
dGVkKHZlcnRpY2VzKSI+CisgICAgPHN2ZyBpZD0icG9seWdvbi1zdmctc2hhcGUiIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PC9zdmc+CisgICAgPGRpdiBpZD0icG9seWdvbi1z
aGFwZS1pbnNpZGUiPjwvZGl2PgorICAgIDxwIGlkPSJpbmZvcm1hdGl2ZS10ZXh0Ij4KKyAgICAg
ICAgVGhpcyB0ZXN0IHJlcXVpcmVzIHRoZSBBaGVtIGZvbnQuIEl0IGNyZWF0ZXMgYSBwb2x5Z29u
YWwgc2hhcGUtaW5zaWRlIGFuZCBhIG1hdGNoaW5nCisgICAgICAgIGZpbGxlZCBTVkcgcG9seWdv
bi4gVGhlIGNvbnRlbnQgc2hvdWxkIGp1c3QgZmlsbCB0aGUgc2hhcGUgd2l0aCBhbHRlcm5hdGlu
ZyBibGFjayBhbmQKKyAgICAgICAgZW1wdHkgcmVjdGFuZ2xlcyBvbiBlYWNoIGxpbmUuPC9wPgor
PC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lv
bnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1zaW1wbGUtcG9seWdvbi0wMDEuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXNpbXBs
ZS1wb2x5Z29uLTAwMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgz
MzRkNjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lvbnMvc2hh
cGUtaW5zaWRlL3NoYXBlLWluc2lkZS1zaW1wbGUtcG9seWdvbi0wMDEuaHRtbApAQCAtMCwwICsx
LDM0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3NpbXBsZS1wb2x5Z29uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0
Q1NTRXhjbHVzaW9uc0VuYWJsZWQodHJ1ZSk7CisKKyAgICAvLyBDb25jYXZlIGFzc3ltZXRyaWMg
c2ltcGxlIHBvbHlnb24gd2l0aCBob3Jpem9udGFsIHRvcCBhbmQgYm90dG9tIGVkZ2VzLiAgUm91
Z2hseSBhbiBob3VyZ2xhc3Mgc2hhcGUuCisgICAgdmFyIHZlcnRpY2VzID0gW3t4OjQwLCB5OjQw
fSwge3g6NDQwLCB5OjQwfSwge3g6MzIwLCB5OjE2MH0sIHt4OjQ4MCwgeTozMjB9LCB7eDo4MCwg
eTozMjB9LCB7eDoyMDAsIHk6MjAwfV07CisgICAgdmFyIGxpbmVIZWlnaHQgPSA0MDsKKzwvc2Ny
aXB0PgorCis8c3R5bGUgaWQ9InN0eWxlc2hlZXQiPgorICAgICNwb2x5Z29uLXNoYXBlLWluc2lk
ZSwgI3BvbHlnb24tc3ZnLXNoYXBlIHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAg
ICAgICBsZWZ0OiAwcHg7CisgICAgICAgIHRvcDogMHB4OworICAgIH0KKzwvc3R5bGU+Cis8L2hl
YWQ+CisKKzxib2R5IG9ubG9hZD0iY3JlYXRlUG9seWdvblNoYXBlSW5zaWRlVGVzdENhc2UodmVy
dGljZXMpIj4KKyAgPGRpdiBpZD0icm9vdCI+CisgICAgPHN2ZyBpZD0icG9seWdvbi1zdmctc2hh
cGUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PC9zdmc+CisgICAgPGRpdiBp
ZD0icG9seWdvbi1zaGFwZS1pbnNpZGUiPjwvZGl2PgorICAgIDxwIGlkPSJpbmZvcm1hdGl2ZS10
ZXh0Ij4KKyAgICAgICAgVGhpcyB0ZXN0IHJlcXVpcmVzIHRoZSBBaGVtIGZvbnQuIEl0IGNyZWF0
ZXMgYSBwb2x5Z29uYWwgc2hhcGUtaW5zaWRlIGFuZCBhIG1hdGNoaW5nCisgICAgICAgIGZpbGxl
ZCBTVkcgcG9seWdvbi4gVGhlIGNvbnRlbnQgc2hvdWxkIGp1c3QgZmlsbCB0aGUgc2hhcGUgd2l0
aCBhbHRlcm5hdGluZyBibGFjayBhbmQKKyAgICAgICAgZW1wdHkgcmVjdGFuZ2xlcyBvbiBlYWNo
IGxpbmUuPC9wPgorICA8L2Rpdj4KKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtc2ltcGxl
LXBvbHlnb24tMDAyLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lvbnMv
c2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1zaW1wbGUtcG9seWdvbi0wMDItZXhwZWN0ZWQuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWM2MGI4Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1p
bnNpZGUtc2ltcGxlLXBvbHlnb24tMDAyLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwzMyBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy9zaW1wbGUtcG9seWdvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cu
aW50ZXJuYWxzKQorICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldENTU0V4Y2x1
c2lvbnNFbmFibGVkKHRydWUpOworCisgICAgLy8gQ29uY2F2ZSBhc3N5bWV0cmljIHNpbXBsZSBw
b2x5Z29uIHdpdGggaG9yaXpvbnRhbCB0b3AgYW5kIGJvdHRvbSBlZGdlcy4gIFNpbWlsYXIgdG8g
dGVzdCAwMDEKKyAgICAvLyBidXQgd2l0aCBhIHJpZ2h0IHJpZ2h0IGVkZ2UuCisgICAgdmFyIHZl
cnRpY2VzID0gW3t4OjQwLCB5OjQwfSwge3g6NDQwLCB5OjQwfSwge3g6NDgwLCB5OjMyMH0sIHt4
OjgwLCB5OjMyMH0sIHt4OjIwMCwgeToyMDB9XTsKKyAgICB2YXIgbGluZUhlaWdodCA9IDQwOwor
PC9zY3JpcHQ+CisKKzxzdHlsZSBpZD0ic3R5bGVzaGVldCI+CisgICAgI3BvbHlnb24tc2hhcGUt
aW5zaWRlLCAjcG9seWdvbi1zdmctc2hhcGUgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgICAgIGxlZnQ6IDBweDsKKyAgICAgICAgdG9wOiAwcHg7CisgICAgfQorPC9zdHlsZT4K
KzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJjcmVhdGVQb2x5Z29uU2hhcGVJbnNpZGVUZXN0Q2Fz
ZUV4cGVjdGVkKHZlcnRpY2VzKSI+CisgICAgPHN2ZyBpZD0icG9seWdvbi1zdmctc2hhcGUiIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PC9zdmc+CisgICAgPGRpdiBpZD0icG9s
eWdvbi1zaGFwZS1pbnNpZGUiPjwvZGl2PgorICAgIDxwIGlkPSJpbmZvcm1hdGl2ZS10ZXh0Ij4K
KyAgICAgICAgVGhpcyB0ZXN0IHJlcXVpcmVzIHRoZSBBaGVtIGZvbnQuIEl0IGNyZWF0ZXMgYSBw
b2x5Z29uYWwgc2hhcGUtaW5zaWRlIGFuZCBhIG1hdGNoaW5nCisgICAgICAgIGZpbGxlZCBTVkcg
cG9seWdvbi4gVGhlIGNvbnRlbnQgc2hvdWxkIGp1c3QgZmlsbCB0aGUgc2hhcGUgd2l0aCBhbHRl
cm5hdGluZyBibGFjayBhbmQKKyAgICAgICAgZW1wdHkgcmVjdGFuZ2xlcyBvbiBlYWNoIGxpbmUu
PC9wPgorPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V4
Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1zaW1wbGUtcG9seWdvbi0wMDIuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRl
LXNpbXBsZS1wb2x5Z29uLTAwMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmE4ZDRmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lv
bnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1zaW1wbGUtcG9seWdvbi0wMDIuaHRtbApAQCAt
MCwwICsxLDM1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL3NpbXBsZS1wb2x5Z29uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cisg
ICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGlu
Z3Muc2V0Q1NTRXhjbHVzaW9uc0VuYWJsZWQodHJ1ZSk7CisKKyAgICAvLyBDb25jYXZlIGFzc3lt
ZXRyaWMgc2ltcGxlIHBvbHlnb24gd2l0aCBob3Jpem9udGFsIHRvcCBhbmQgYm90dG9tIGVkZ2Vz
LiAgU2ltaWxhciB0byB0ZXN0IDAwMSAKKyAgICAvLyBidXQgd2l0aCBhIHNpbmdsZSByaWdodCBl
ZGdlLgorICAgIHZhciB2ZXJ0aWNlcyA9IFt7eDo0MCwgeTo0MH0sIHt4OjQ0MCwgeTo0MH0sIHt4
OjQ4MCwgeTozMjB9LCB7eDo4MCwgeTozMjB9LCB7eDoyMDAsIHk6MjAwfV07CisgICAgdmFyIGxp
bmVIZWlnaHQgPSA0MDsKKzwvc2NyaXB0PgorCis8c3R5bGUgaWQ9InN0eWxlc2hlZXQiPgorICAg
ICNwb2x5Z29uLXNoYXBlLWluc2lkZSwgI3BvbHlnb24tc3ZnLXNoYXBlIHsKKyAgICAgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgICAgICBsZWZ0OiAwcHg7CisgICAgICAgIHRvcDogMHB4Owor
ICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0iY3JlYXRlUG9seWdvblNo
YXBlSW5zaWRlVGVzdENhc2UodmVydGljZXMpIj4KKyAgPGRpdiBpZD0icm9vdCI+CisgICAgPHN2
ZyBpZD0icG9seWdvbi1zdmctc2hhcGUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyI+PC9zdmc+CisgICAgPGRpdiBpZD0icG9seWdvbi1zaGFwZS1pbnNpZGUiPjwvZGl2PgorICAg
IDxwIGlkPSJpbmZvcm1hdGl2ZS10ZXh0Ij4KKyAgICAgICAgVGhpcyB0ZXN0IHJlcXVpcmVzIHRo
ZSBBaGVtIGZvbnQuIEl0IGNyZWF0ZXMgYSBwb2x5Z29uYWwgc2hhcGUtaW5zaWRlIGFuZCBhIG1h
dGNoaW5nCisgICAgICAgIGZpbGxlZCBTVkcgcG9seWdvbi4gVGhlIGNvbnRlbnQgc2hvdWxkIGp1
c3QgZmlsbCB0aGUgc2hhcGUgd2l0aCBhbHRlcm5hdGluZyBibGFjayBhbmQKKyAgICAgICAgZW1w
dHkgcmVjdGFuZ2xlcyBvbiBlYWNoIGxpbmUuPC9wPgorICA8L2Rpdj4KKzwvYm9keT4KKworPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lk
ZS9zaGFwZS1pbnNpZGUtc2ltcGxlLXBvbHlnb24tMDAzLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1zaW1wbGUtcG9s
eWdvbi0wMDMtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mNGRhZGJhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25z
L3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtc2ltcGxlLXBvbHlnb24tMDAzLWV4cGVjdGVkLmh0
bWwKQEAgLTAsMCArMSwzMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9zaW1wbGUtcG9seWdvbi5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgorICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICB3aW5kb3cuaW50ZXJuYWxz
LnNldHRpbmdzLnNldENTU0V4Y2x1c2lvbnNFbmFibGVkKHRydWUpOworCisgICAgLy8gQ29uY2F2
ZSBhc3N5bWV0cmljIHNpbXBsZSBwb2x5Z29uIHdpdGggaG9yaXpvbnRhbCB0b3AgYW5kIGJvdHRv
bSBlZGdlcy4gIFNpbWlsYXIgdG8gdGVzdCAwMDEKKyAgICAvLyB3aXRoIGEgdmVydGljYWwgbGVm
dCBlZGdlLgorICAgIHZhciB2ZXJ0aWNlcyA9IFt7eDo0MCwgeTo0MH0sIHt4OjQ0MCwgeTo0MH0s
IHt4OjMyMCwgeToxNjB9LCB7eDo0ODAsIHk6MzIwfSwge3g6NDAsIHk6MzIwfV07CisgICAgdmFy
IGxpbmVIZWlnaHQgPSA0MDsKKzwvc2NyaXB0PgorCis8c3R5bGUgaWQ9InN0eWxlc2hlZXQiPgor
ICAgICNwb2x5Z29uLXNoYXBlLWluc2lkZSwgI3BvbHlnb24tc3ZnLXNoYXBlIHsKKyAgICAgICAg
cG9zaXRpb246IGFic29sdXRlOworICAgICAgICBsZWZ0OiAwcHg7CisgICAgICAgIHRvcDogMHB4
OworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0iY3JlYXRlUG9seWdv
blNoYXBlSW5zaWRlVGVzdENhc2VFeHBlY3RlZCh2ZXJ0aWNlcykiPgorICAgIDxzdmcgaWQ9InBv
bHlnb24tc3ZnLXNoYXBlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3Zn
PgorICAgIDxkaXYgaWQ9InBvbHlnb24tc2hhcGUtaW5zaWRlIj48L2Rpdj4KKyAgICA8cCBpZD0i
aW5mb3JtYXRpdmUtdGV4dCI+CisgICAgICAgIFRoaXMgdGVzdCByZXF1aXJlcyB0aGUgQWhlbSBm
b250LiBJdCBjcmVhdGVzIGEgcG9seWdvbmFsIHNoYXBlLWluc2lkZSBhbmQgYSBtYXRjaGluZwor
ICAgICAgICBmaWxsZWQgU1ZHIHBvbHlnb24uIFRoZSBjb250ZW50IHNob3VsZCBqdXN0IGZpbGwg
dGhlIHNoYXBlIHdpdGggYWx0ZXJuYXRpbmcgYmxhY2sgYW5kCisgICAgICAgIGVtcHR5IHJlY3Rh
bmdsZXMgb24gZWFjaCBsaW5lLjwvcD4KKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtc2lt
cGxlLXBvbHlnb24tMDAzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lvbnMvc2hhcGUt
aW5zaWRlL3NoYXBlLWluc2lkZS1zaW1wbGUtcG9seWdvbi0wMDMuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTgxOTdmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtc2ltcGxlLXBv
bHlnb24tMDAzLmh0bWwKQEAgLTAsMCArMSwzNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9zaW1wbGUtcG9seWdvbi5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICB3aW5k
b3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldENTU0V4Y2x1c2lvbnNFbmFibGVkKHRydWUpOworCisg
ICAgLy8gQ29uY2F2ZSBhc3N5bWV0cmljIHNpbXBsZSBwb2x5Z29uIHdpdGggaG9yaXpvbnRhbCB0
b3AgYW5kIGJvdHRvbSBlZGdlcy4gIFNpbWlsYXIgdG8gdGVzdCAwMDEKKyAgICAvLyB3aXRoIGEg
dmVydGljYWwgbGVmdCBlZGdlLgorICAgIHZhciB2ZXJ0aWNlcyA9IFt7eDo0MCwgeTo0MH0sIHt4
OjQ0MCwgeTo0MH0sIHt4OjMyMCwgeToxNjB9LCB7eDo0ODAsIHk6MzIwfSwge3g6NDAsIHk6MzIw
fV07CisgICAgdmFyIGxpbmVIZWlnaHQgPSA0MDsKKzwvc2NyaXB0PgorCis8c3R5bGUgaWQ9InN0
eWxlc2hlZXQiPgorICAgICNwb2x5Z29uLXNoYXBlLWluc2lkZSwgI3BvbHlnb24tc3ZnLXNoYXBl
IHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICBsZWZ0OiAwcHg7CisgICAg
ICAgIHRvcDogMHB4OworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0i
Y3JlYXRlUG9seWdvblNoYXBlSW5zaWRlVGVzdENhc2UodmVydGljZXMpIj4KKyAgPGRpdiBpZD0i
cm9vdCI+CisgICAgPHN2ZyBpZD0icG9seWdvbi1zdmctc2hhcGUiIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyI+PC9zdmc+CisgICAgPGRpdiBpZD0icG9seWdvbi1zaGFwZS1pbnNp
ZGUiPjwvZGl2PgorICAgIDxwIGlkPSJpbmZvcm1hdGl2ZS10ZXh0Ij4KKyAgICAgICAgVGhpcyB0
ZXN0IHJlcXVpcmVzIHRoZSBBaGVtIGZvbnQuIEl0IGNyZWF0ZXMgYSBwb2x5Z29uYWwgc2hhcGUt
aW5zaWRlIGFuZCBhIG1hdGNoaW5nCisgICAgICAgIGZpbGxlZCBTVkcgcG9seWdvbi4gVGhlIGNv
bnRlbnQgc2hvdWxkIGp1c3QgZmlsbCB0aGUgc2hhcGUgd2l0aCBhbHRlcm5hdGluZyBibGFjayBh
bmQKKyAgICAgICAgZW1wdHkgcmVjdGFuZ2xlcyBvbiBlYWNoIGxpbmUuPC9wPgorICA8L2Rpdj4K
KzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9leGNsdXNp
b25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtc2ltcGxlLXBvbHlnb24tMDA0LWV4cGVjdGVk
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWlu
c2lkZS1zaW1wbGUtcG9seWdvbi0wMDQtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5mY2Q4YTk2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9leGNsdXNpb25zL3NoYXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtc2ltcGxlLXBvbHlnb24t
MDA0LWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwzMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9zaW1wbGUtcG9seWdvbi5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICB3
aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldENTU0V4Y2x1c2lvbnNFbmFibGVkKHRydWUpOwor
CisgICAgLy8gQ29uY2F2ZSBhc3N5bWV0cmljIHNpbXBsZSBwb2x5Z29uIHdpdGggaG9yaXpvbnRh
bCB0b3AgYW5kIGJvdHRvbSBlZGdlcy4gIEEgdmVyc2lvbiBvZiB0aGUgMDAxCisgICAgLy8gaG91
cmdsYXNzIHNoYXBlIHdpdGggdmVydGljYWwgZWRnZXMgaW4gdGhlIGNlbnRlci4KKyAgICB2YXIg
dmVydGljZXMgPSBbe3g6NDAsIHk6NDB9LCB7eDo0NDAsIHk6NDB9LCB7eDozMjAsIHk6MTYwfSwg
e3g6MzIwLCB5OjI0MH0sIHt4OjQ4MCwgeTo0MDB9LCB7eDo4MCwgeTo0MDB9LCB7eDoyMDAsIHk6
MjgwfSwge3g6MjAwLCB5OjIwMH1dfTsKKyAgICB2YXIgbGluZUhlaWdodCA9IDQwOworPC9zY3Jp
cHQ+CisKKzxzdHlsZSBpZD0ic3R5bGVzaGVldCI+CisgICAgI3BvbHlnb24tc2hhcGUtaW5zaWRl
LCAjcG9seWdvbi1zdmctc2hhcGUgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
ICAgIGxlZnQ6IDBweDsKKyAgICAgICAgdG9wOiAwcHg7CisgICAgfQorPC9zdHlsZT4KKzwvaGVh
ZD4KKworPGJvZHkgb25sb2FkPSJjcmVhdGVQb2x5Z29uU2hhcGVJbnNpZGVUZXN0Q2FzZUV4cGVj
dGVkKHZlcnRpY2VzKSI+CisgICAgPHN2ZyBpZD0icG9seWdvbi1zdmctc2hhcGUiIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PC9zdmc+CisgICAgPGRpdiBpZD0icG9seWdvbi1z
aGFwZS1pbnNpZGUiPjwvZGl2PgorICAgIDxwIGlkPSJpbmZvcm1hdGl2ZS10ZXh0Ij4KKyAgICAg
ICAgVGhpcyB0ZXN0IHJlcXVpcmVzIHRoZSBBaGVtIGZvbnQuIEl0IGNyZWF0ZXMgYSBwb2x5Z29u
YWwgc2hhcGUtaW5zaWRlIGFuZCBhIG1hdGNoaW5nCisgICAgICAgIGZpbGxlZCBTVkcgcG9seWdv
bi4gVGhlIGNvbnRlbnQgc2hvdWxkIGp1c3QgZmlsbCB0aGUgc2hhcGUgd2l0aCBhbHRlcm5hdGlu
ZyBibGFjayBhbmQKKyAgICAgICAgZW1wdHkgcmVjdGFuZ2xlcyBvbiBlYWNoIGxpbmUuPC9wPgor
PC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lv
bnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1zaW1wbGUtcG9seWdvbi0wMDQuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXNpbXBs
ZS1wb2x5Z29uLTAwNC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjll
MTUwZWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V4Y2x1c2lvbnMvc2hh
cGUtaW5zaWRlL3NoYXBlLWluc2lkZS1zaW1wbGUtcG9seWdvbi0wMDQuaHRtbApAQCAtMCwwICsx
LDM1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3NpbXBsZS1wb2x5Z29uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0
Q1NTRXhjbHVzaW9uc0VuYWJsZWQodHJ1ZSk7CisKKyAgICAvLyBDb25jYXZlIGFzc3ltZXRyaWMg
c2ltcGxlIHBvbHlnb24gd2l0aCBob3Jpem9udGFsIHRvcCBhbmQgYm90dG9tIGVkZ2VzLiAgQSB2
ZXJzaW9uIG9mIHRoZSAwMDEKKyAgICAvLyBob3VyZ2xhc3Mgc2hhcGUgd2l0aCB2ZXJ0aWNhbCBl
ZGdlcyBpbiB0aGUgY2VudGVyLgorICAgIHZhciB2ZXJ0aWNlcyA9IFt7eDo0MCwgeTo0MH0sIHt4
OjQ0MCwgeTo0MH0sIHt4OjMyMCwgeToxNjB9LCB7eDozMjAsIHk6MjQwfSwge3g6NDgwLCB5OjQw
MH0sIHt4OjgwLCB5OjQwMH0sIHt4OjIwMCwgeToyODB9LCB7eDoyMDAsIHk6MjAwfV19OworICAg
IHZhciBsaW5lSGVpZ2h0ID0gNDA7Cis8L3NjcmlwdD4KKworPHN0eWxlIGlkPSJzdHlsZXNoZWV0
Ij4KKyAgICAjcG9seWdvbi1zaGFwZS1pbnNpZGUsICNwb2x5Z29uLXN2Zy1zaGFwZSB7CisgICAg
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgbGVmdDogMHB4OworICAgICAgICB0b3A6
IDBweDsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9ImNyZWF0ZVBv
bHlnb25TaGFwZUluc2lkZVRlc3RDYXNlKHZlcnRpY2VzKSI+CisgIDxkaXYgaWQ9InJvb3QiPgor
ICAgIDxzdmcgaWQ9InBvbHlnb24tc3ZnLXNoYXBlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciPjwvc3ZnPgorICAgIDxkaXYgaWQ9InBvbHlnb24tc2hhcGUtaW5zaWRlIj48L2Rp
dj4KKyAgICA8cCBpZD0iaW5mb3JtYXRpdmUtdGV4dCI+CisgICAgICAgIFRoaXMgdGVzdCByZXF1
aXJlcyB0aGUgQWhlbSBmb250LiBJdCBjcmVhdGVzIGEgcG9seWdvbmFsIHNoYXBlLWluc2lkZSBh
bmQgYSBtYXRjaGluZworICAgICAgICBmaWxsZWQgU1ZHIHBvbHlnb24uIFRoZSBjb250ZW50IHNo
b3VsZCBqdXN0IGZpbGwgdGhlIHNoYXBlIHdpdGggYWx0ZXJuYXRpbmcgYmxhY2sgYW5kCisgICAg
ICAgIGVtcHR5IHJlY3RhbmdsZXMgb24gZWFjaCBsaW5lLjwvcD4KKyAgPC9kaXY+Cis8L2JvZHk+
CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMmQyYzkzZS4uMDIyYzJmMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTIwMzcsNiArMjAzNyw3IEBAIFNFVChXZWJDb3JlX1NPVVJD
RVMKICAgICByZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwCiAgICAgcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmNwcAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAKKyAgICByZW5kZXJp
bmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKICAgICByZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xl
LmNwcAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKICAgICByZW5kZXJpbmcvRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDZjMDI4ZWYuLjNkMDY0YmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NCBAQAorMjAxMi0wOS0yNyAgSGFucyBNdWxsZXIgIDxo
bXVsbGVyQGFkb2JlLmNvbT4KKworICAgICAgICBbQ1NTIEV4Y2x1c2lvbnNdIEFkZCBzdXBwb3J0
IGZvciBwb2x5Z29uYWwgc2hhcGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluaXRpYWwgdmVyc2lvbiBvZiB0aGUgbGF5b3V0IHN1cHBvcnQgZm9yIHBv
bHlnb25hbCBleGNsdXNpb24gc2hhcGVzOiB0aGUgRXhjbHVzaW9uUG9seWdvbiBjbGFzcy4KKyAg
ICAgICAgU3VwcG9ydHMgdGhlIHB1YmxpYyBFeGNsdXNpb25TaGFwZSBvcGVyYXRpb25zIHVzaW5n
IHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGhlcmU6CisgICAgICAgIGh0dHA6Ly9oYW5zbXVsbGVy
LXdlYmtpdC5ibG9nc3BvdC5jb20vMjAxMi8wNi9ob3Jpem9udGFsLWJveC1wb2x5Z29uLWludGVy
c2VjdGlvbi1mb3IuaHRtbC4KKyAgICAgICAgQWx0aG91Z2ggYm90aCB0aGUgImluY2x1ZGVkIiBh
bmQgImV4Y2x1ZGVkIiBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQsIG9ubHkgdGhlIGZvcm1lciBp
cworICAgICAgICB1c2VkLCBzaW5jZSBvbmx5IHNoYXBlLWluc2lkZSBpcyBzdXBwb3J0ZWQgYXQg
dGhlIG1vbWVudC4KKworICAgICAgICBUaGUgRXhjbHVzaW9uUG9seWdvbiBjbGFzcyBzdG9yZXMg
dGhlIHBvbHlnb24ncyBlZGdlcyBpbiBhbiBpbnRlcnZhbCB0cmVlLgorCisgICAgICAgIFBvbHln
b24gZWRnZXMgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBFeGNsdXNpb25Qb2x5Z29uRWRnZSBzdHJ1
Y3QsIHdoaWNoIHJlY29yZHMgdGhlIGluZGljZXMgb2YKKyAgICAgICAgdGhlIHBhaXIgb2YgdmVy
dGljZXMgam9pbmVkIGJ5IHRoZSBlZGdlLiAgRWRnZSB2ZXJ0ZXggaW5kZXgxIGlzIHVzdWFsbHkg
bGVzcyB0aGFuIGluZGV4MiwgZXhjZXB0CisgICAgICAgIHRoZSBsYXN0IGVkZ2Ugd2hlcmUgaW5k
ZXgyIGlzIDAuICBXZSBwbGFuIHRvIGltcHJvdmUgdGhlIGFsZ29yaXRobSB0aGF0IGNyZWF0ZXMg
dGhlIGVkZ2VzCisgICAgICAgIGJ5IHNwYW5uaW5nIHZlcnRpY2VzIGNvbnRhaW5lZCBpbiBzZXF1
ZW5jZXMgb2YgbW9yZSB0aGFuIHR3byBjb2xpbmVhciB2ZXJ0aWNlcy4gRm9yIGV4YW1wbGUsCisg
ICAgICAgIGEgdHJpYW5ndWxhciBwb2x5Z29uIG1pZ2h0IGJlIHNwZWNpZmllZCB3aXRoIDUgdmVy
dGljZXMgbGlrZSB0aGlzOiAzLDAgNSwwLCA1LDUsIDQsNCAyLDIsIDAsMC4KKyAgICAgICAgQnkg
c3Bhbm5pbmcgdGhlIGV4dHJhIGNvbGluZWFyIHBvaW50czogMCwwIDUsMCwgNSw1LCB3aGljaCBp
bXBsaWVzIGluZGV4MS1pbmRleDIgZWRnZXM6IDUtMSAxLTIgMi01LgorCisgICAgICAgIEFsdGhv
dWdoIHRoZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBjb21wbGV4IHBvbHlnb25zLCB0aGUgbGF5
b3V0IGNvZGUgaXMgbGltaXRlZCB0bworICAgICAgICBlc3NlbnRpYWxseSByZWN0YW5ndWxhciBz
aGFwZXMgdW50aWwgYSBwYXRjaCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk2ODEzCisgICAgICAgIGxhbmRzLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2V4Y2x1
c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1wb2x5Z29uLXJlY3RhbmdsZS5odG1sCisg
ICAgICAgICAgICAgICBmYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5zaWRlL3NoYXBlLWluc2lkZS1z
aW1wbGUtcG9seWdvbi0wMDEuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9leGNsdXNpb25zL3No
YXBlLWluc2lkZS9zaGFwZS1pbnNpZGUtc2ltcGxlLXBvbHlnb24tMDAyLmh0bWwKKyAgICAgICAg
ICAgICAgIGZhc3QvZXhjbHVzaW9ucy9zaGFwZS1pbnNpZGUvc2hhcGUtaW5zaWRlLXNpbXBsZS1w
b2x5Z29uLTAwMy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V4Y2x1c2lvbnMvc2hhcGUtaW5z
aWRlL3NoYXBlLWluc2lkZS1zaW1wbGUtcG9seWdvbi0wMDQuaHRtbAorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBU
YXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRWRnZUludGVyc2VjdGlvbik6IEludGVy
bmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBpbnRlcnNlY3Rpb24gb2YgYSBwb2x5Z29uIGVkZ2UgYW5k
IGEgaG9yaXpvbnRhbCBsaW5lLgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6
RXhjbHVzaW9uUG9seWdvbik6IFNlZSB0aGUgaW50cm9kdWN0b3J5IHRleHQgYWJvdmUgZm9yIGEg
ZGVzY3JpcHRpb24gb2YgdGhpcyB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVhJbnRl
cnNlY3Rpb24pOiBGaW5kIGFuZCBjbGFzc2lmeSB0aGUgWCBpbnRlcmNlcHQgb2YgYSBwb2x5Z29u
IGVkZ2Ugd2l0aCBob3Jpem9udGFsIGxpbmUsIGlmIGFueS4KKyAgICAgICAgKFdlYkNvcmU6OkV4
Y2x1c2lvblBvbHlnb246OnJpZ2h0VmVydGV4WSk6IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZGVj
aWRlIGlmIGEgaG9yaXpvbnRhbCBsaW5lICJjcm9zc2VzIiBhIHZlcnRleC4KKyAgICAgICAgKFdl
YkNvcmU6OmFwcGVuZEludGVydmFsWCk6IEFwcGVuZCBhbiB4IGNvb3JkaW5hdGUgdG8gYSB2ZWN0
b3Igb2YgRXhjbHVzaW9uSW50ZXJ2YWxzLgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9s
eWdvbjo6Y29tcHV0ZVhJbnRlcnNlY3Rpb25zKTogUmV0dXJuIGEgdmVjdG9yIG9mIHRoZSBpbnRl
cnNlY3Rpb25zIG9mIGEgaG9yaXpvbnRhbCBsaW5lIHdpdGggdGhlIHBvbHlnb24ncyBlZGdlcy4K
KyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmNvbXB1dGVFZGdlSW50ZXJzZWN0
aW9ucyk6IFJldHVybiBhIHZlY3RvciBvZiB0aGUgWCBwcm9qZWN0aW9ucyBvZiB0aGUgZWRnZXMg
dGhhdCBvdmVybGFwIGEgaG9yaXpvbmFsIHJlY3RhbmdsZS4KKyAgICAgICAgKFdlYkNvcmU6OkV4
Y2x1c2lvblBvbHlnb246OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKTogUmV0dXJuIGEgU2VnbWVudExp
c3Qgb2YgdGhlIFggaW50ZXJ2YWxzIHdpdGhpbiBhIGhvcml6b250YWwgcmVjdGFuZ2xlIHRoYXQg
b3ZlcmxhcCB0aGUgcG9seWdvbi4KKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246
OmdldEluY2x1ZGVkSW50ZXJ2YWxzKTogUmV0dXJuIHRoZSBYIGludGVydmFscyB3aXRoaW4gYSBo
b3Jpem9udGFsIHJlY3RhbmdsZSB0aGF0IGZpdCBpbnNpZGUgdGhlIHBvbHlnb24uCisgICAgICAg
ICogcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEV4Y2x1c2lvblBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVz
aW9uUG9seWdvbjo6Z2V0WEF0KTogWCBjb29yZGluYXRlIG9mIGEgcG9seWdvbiB2ZXJ0ZXgKKyAg
ICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmdldFlBdCk6IFkgY29vcmRpbmF0ZSBv
ZiBhIHBvbHlnb24gdmVydGV4CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpu
dW1iZXJPZlZlcnRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmZp
bGxSdWxlKTogQSBXaW5kUnVsZSB2YWx1ZSB0aGF0IGRlZmluZXMgImluc2lkZSIgZm9yIHNlbGYt
aW50ZXJzZWN0aW5nIHBvbHlnb25zLgorICAgICAgICAoRXhjbHVzaW9uUG9seWdvbkVkZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbkVkZ2U6OkV4Y2x1c2lvblBvbHlnb25F
ZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjp2ZXJ0ZXgxKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjp2ZXJ0ZXgyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjptaW5YKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4Y2x1c2lvblBvbHlnb25FZGdlOjptaW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1
c2lvblBvbHlnb25FZGdlOjptYXhYKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHln
b25FZGdlOjptYXhZKToKKyAgICAgICAgKiByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRXhjbHVzaW9uUG9seWdvbik6IFJldHVybiBhIG5ldyBF
eGNsdXNpb25Qb2x5Z29uLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpF
eGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhjbHVzaW9uU2hhcGUpOiBBZGRlZCBzdXBwb3J0IGZvciBC
YXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9QT0xZR09OLgorICAgICAgICAqIHJlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluc2lkZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvOjppc0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb0VuYWJsZWRGb3JSZW5kZXJC
bG9jayk6IEVuYWJsZSBCQVNJQ19TSEFQRV9QT0xZR09OIHNoYXBlcyBmb3IgUmVuZGVyQmxvY2tz
LgorCiAyMDEyLTEwLTA4ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0
PgogCiAgICAgICAgIFtRdF0gTWFrZSBJbWFnZUJ1ZmZlclF0IHVzZSBwcmVtdWx0aXBsaWVkIGNv
bnZlcnRpbmcgZnVuY3Rpb25zIGluIENvbG9yLmggaW5zdGVhZCBvZiBpdHMgb3duIG1lY2hhbmlz
bS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDY3YjMwN2IuLjU5MzU5MzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDkxNCw2ICs0OTE0LDggQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmggXAorCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblJlY3RhbmdsZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25SZWN0YW5nbGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQppbmRleCAwNzhiNjlhLi44OWEyNTFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAg
LTExMDcsNiArMTEwNyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9k
ZS5jcHAgXAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgXAogICAgIHJlbmRlcmluZy9F
eGNsdXNpb25JbnRlcnZhbC5jcHAgXAorICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNw
cCBcCiAgICAgcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAgXAogICAgIHJlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZS5jcHAgXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lk
ZUluZm8uY3BwIFwKQEAgLTIyOTgsNiArMjI5OSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRl
cmluZy9Db3VudGVyTm9kZS5oIFwKICAgICByZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBcCiAgICAg
cmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmggXAorICAgIHJlbmRlcmluZy9FeGNsdXNpb25Q
b2x5Z29uLmggXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaCBcCiAgICAgcmVu
ZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmggXAogICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8uaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZDEyMWI3ZC4uMTBiODZmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMzI4Nyw2ICszMjg3LDggQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcv
RWxsaXBzaXNCb3guaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFs
LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmgnLAorICAg
ICAgICAgICAgJ3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4
Y2x1c2lvblJlY3RhbmdsZS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9FeGNsdXNpb25S
ZWN0YW5nbGUuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGVm
MmFhZjAuLjBkNmJlNjcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCkBAIC0zODM2Myw2ICszODM2MywxNCBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAgICAgICAgICAg
ICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25Qb2x5Z29uLmNwcCIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgor
ICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5oIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8
L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25SZWN0YW5n
bGUuY3BwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAg
ICAgICAgICAgICA8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggY2I3YmQ2NS4uMDUwNzJmMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTgzNyw2ICsx
ODM3LDggQEAKIAkJNkU4Nzk4QkQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3Rhbmds
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4
QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICovOyB9OwogCQk2RTg3
OThCRTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4QjgxNUY4MUU0QTAwQkZFNEFB
IC8qIEV4Y2x1c2lvblNoYXBlLmNwcCAqLzsgfTsKIAkJNkU4Nzk4QkYxNUY4MUU0QTAwQkZFNEFB
IC8qIEV4Y2x1c2lvblNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RTg3OThCOTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RUFGMzQw
RjE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUg
LyogRXhjbHVzaW9uUG9seWdvbi5jcHAgKi87IH07CisJCTZFQUYzNDEwMTYxMzg2OUEwMDg1OTYy
NSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdv
bi5oICovOyB9OwogCQk2RUJDNUVBRjEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCQzVF
QUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLzsgfTsKIAkJNkVCQzVF
QjAxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyog
SlNGbG9hdDY0QXJyYXkuaCAqLzsgfTsKIAkJNkVCRjBFNDgxMkE4OTI2MTAwREIxNzA5IC8qIE9F
U1RleHR1cmVGbG9hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RUJGMEU0NTEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCAq
LzsgfTsKQEAgLTkwMzIsNiArOTAzNCw4IEBACiAJCTZFODc5OEI3MTVGODFFNEEwMEJGRTRBQSAv
KiBFeGNsdXNpb25SZWN0YW5nbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhjbHVzaW9uUmVjdGFuZ2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFODc5
OEI4MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25TaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZFODc5OEI5MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25TaGFwZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUgLyog
RXhjbHVzaW9uUG9seWdvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFeGNsdXNpb25Qb2x5Z29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVB
RjM0MEUxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uUG9seWdvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RUJDNUQ4MDEzOEI0QzRFMDBBMENGOEEgLyogRmxvYXQ2NEFycmF5Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBGbG9hdDY0QXJyYXkuaWRsOyBwYXRoID0gY2FudmFz
L0Zsb2F0NjRBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkM1RUFE
MTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEzMTIsNiArMjEzMTYsOCBAQAogCQkJCUE4Q0ZG
NkJEMEExNTYxMTgwMDBBNDIzNCAvKiBFbGxpcHNpc0JveC5oICovLAogCQkJCTZFODc5OEI0MTVG
ODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5jcHAgKi8sCiAJCQkJNkU4Nzk4QjUx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmggKi8sCisJCQkJNkVBRjM0MEQx
NjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwICovLAorCQkJCTZFQUYzNDBF
MTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggKi8sCiAJCQkJNkU4Nzk4QjYx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgKi8sCiAJCQkJNkU4Nzk4
QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICovLAogCQkJCTZFODc5
OEI4MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi8sCkBAIC0yNTUzNyw2
ICsyNTU0Myw3IEBACiAJCQkJOTMxQ0JEMEQxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0
YXRlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxQ0JEMEYxNjFBNDRFOTAwRTRDODc0IC8q
IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxQ0JE
MTExNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlVHJlZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNkVBRjM0MTAxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMjg2MzQsNiArMjg2NDEsNyBAQAogCQkJCTkzMUNCRDBFMTYxQTQ0RTkw
MEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTMxQ0JEMTAxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlVHJlZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzFDQkQxMzE2MUE0NEY4MDBFNEM4NzQgLyogU2Nyb2xsaW5n
U3RhdGVOb2RlTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNkVBRjM0MEYxNjEzODY5QTAwODU5
NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZTcwNGFiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcApAQCAtMCwwICsxLDMwNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg
ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMK
KyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNsdXNpb25Qb2x5Z29uLmgiCisKKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0g
RWRnZUludGVyc2VjdGlvblR5cGUgeworICAgIE5vcm1hbCwKKyAgICBWZXJ0ZXhNaW5ZLAorICAg
IFZlcnRleE1heFksCisgICAgVmVydGV4WUJvdGgKK307CisKK3N0cnVjdCBFZGdlSW50ZXJzZWN0
aW9uIHsKKyAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZTsKKyAgICBGbG9hdFBv
aW50IHBvaW50OworICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHR5cGU7Cit9OworCitzdGF0aWMg
Ym9vbCBjb21wYXJlRWRnZU1pblkoY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGUxLCBjb25z
dCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZTIpCit7CisgICAgcmV0dXJuIGUxLT5taW5ZKCkgPCBl
Mi0+bWluWSgpOworfQorCitFeGNsdXNpb25Qb2x5Z29uOjpFeGNsdXNpb25Qb2x5Z29uKFBhc3NP
d25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQor
ICAgIDogRXhjbHVzaW9uU2hhcGUoKQorICAgICwgbV92ZXJ0aWNlcyh2ZXJ0aWNlcykKKyAgICAs
IG1fZmlsbFJ1bGUoZmlsbFJ1bGUpCit7CisgICAgLy8gRklYTUU6IEhhbmRsZSBwb2x5Z29ucyBk
ZWZpbmVkIHdpdGggbGVzcyB0aGFuIDMgbm9uLWNvbGluZWFyIHZlcnRpY2VzLgorCisgICAgdW5z
aWduZWQgblZlcnRpY2VzID0gbnVtYmVyT2ZWZXJ0aWNlcygpOworICAgIG1fZWRnZXMucmVzaXpl
KG5WZXJ0aWNlcyk7CisgICAgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlKj4gc29ydGVkRWRn
ZXNNaW5ZKG5WZXJ0aWNlcyk7CisKKyAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgwID0gdmVy
dGV4QXQoMCk7CisgICAgZmxvYXQgbWluWCA9IHZlcnRleDAueCgpOworICAgIGZsb2F0IG1pblkg
PSB2ZXJ0ZXgwLnkoKTsKKyAgICBmbG9hdCBtYXhYID0gbWluWDsKKyAgICBmbG9hdCBtYXhZID0g
bWluWTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuVmVydGljZXM7IGkrKykgewor
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXggPSB2ZXJ0ZXhBdChpKTsKKworICAgICAg
ICBtaW5YID0gc3RkOjptaW4odmVydGV4LngoKSwgbWluWCk7CisgICAgICAgIG1heFggPSBzdGQ6
Om1heCh2ZXJ0ZXgueCgpLCBtYXhYKTsKKyAgICAgICAgbWluWSA9IHN0ZDo6bWluKHZlcnRleC55
KCksIG1pblkpOworICAgICAgICBtYXhZID0gc3RkOjptYXgodmVydGV4LnkoKSwgbWF4WSk7CisK
KyAgICAgICAgbV9lZGdlc1tpXS5wb2x5Z29uID0gdGhpczsKKyAgICAgICAgbV9lZGdlc1tpXS5p
bmRleDEgPSBpOworICAgICAgICBtX2VkZ2VzW2ldLmluZGV4MiA9IChpICsgMSkgJSBuVmVydGlj
ZXM7CisKKyAgICAgICAgc29ydGVkRWRnZXNNaW5ZW2ldID0gJm1fZWRnZXNbaV07CisgICAgfQor
CisgICAgbV9ib3VuZGluZ0JveC5zZXRYKG1pblgpOworICAgIG1fYm91bmRpbmdCb3guc2V0WSht
aW5ZKTsKKyAgICBtX2JvdW5kaW5nQm94LnNldFdpZHRoKG1heFggLSBtaW5YKTsKKyAgICBtX2Jv
dW5kaW5nQm94LnNldEhlaWdodChtYXhZIC0gbWluWSk7CisKKyAgICBzdGQ6OnNvcnQoc29ydGVk
RWRnZXNNaW5ZLmJlZ2luKCksIHNvcnRlZEVkZ2VzTWluWS5lbmQoKSwgV2ViQ29yZTo6Y29tcGFy
ZUVkZ2VNaW5ZKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VkZ2VzLnNpemUo
KTsgaSsrKSB7CisgICAgICAgIEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdlID0gJm1fZWRnZXNb
aV07CisgICAgICAgIG1fZWRnZVRyZWUuYWRkKEVkZ2VJbnRlcnZhbChlZGdlLT5taW5ZKCksIGVk
Z2UtPm1heFkoKSwgZWRnZSkpOworICAgIH0KK30KKworc3RhdGljIGJvb2wgY29tcHV0ZVhJbnRl
cnNlY3Rpb24oY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2VQb2ludGVyLCBmbG9hdCB5
LCBFZGdlSW50ZXJzZWN0aW9uJiByZXN1bHQpCit7CisgICAgY29uc3QgRXhjbHVzaW9uUG9seWdv
bkVkZ2UmIGVkZ2UgPSAqZWRnZVBvaW50ZXI7CisKKyAgICBpZiAoZWRnZS5taW5ZKCkgPiB5IHx8
IGVkZ2UubWF4WSgpIDwgeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgRmxv
YXRQb2ludCYgdmVydGV4MSA9IGVkZ2UudmVydGV4MSgpOworICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHZlcnRleDIgPSBlZGdlLnZlcnRleDIoKTsKKyAgICBmbG9hdCBkeSA9IHZlcnRleDIueSgpIC0g
dmVydGV4MS55KCk7CisKKyAgICBmbG9hdCBpbnRlcnNlY3Rpb25YOworICAgIEVkZ2VJbnRlcnNl
Y3Rpb25UeXBlIGludGVyc2VjdGlvblR5cGU7CisKKyAgICBpZiAoIWR5KSB7CisgICAgICAgIGlu
dGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhZQm90aDsKKyAgICAgICAgaW50ZXJzZWN0aW9uWCA9IGVk
Z2UubWluWCgpOworICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdlLm1pblkoKSkgeworICAgICAgICBp
bnRlcnNlY3Rpb25UeXBlID0gVmVydGV4TWluWTsKKyAgICAgICAgaW50ZXJzZWN0aW9uWCA9ICh2
ZXJ0ZXgxLnkoKSA8IHZlcnRleDIueSgpKSA/IHZlcnRleDEueCgpIDogdmVydGV4Mi54KCk7Cisg
ICAgfSBlbHNlIGlmICh5ID09IGVkZ2UubWF4WSgpKSB7CisgICAgICAgIGludGVyc2VjdGlvblR5
cGUgPSBWZXJ0ZXhNYXhZOworICAgICAgICBpbnRlcnNlY3Rpb25YID0gKHZlcnRleDEueSgpID4g
dmVydGV4Mi55KCkpID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gTm9ybWFsOworICAgICAgICBpbnRlcnNlY3Rpb25Y
ID0gKCh5IC0gdmVydGV4MS55KCkpICogKHZlcnRleDIueCgpIC0gdmVydGV4MS54KCkpIC8gZHkp
ICsgdmVydGV4MS54KCk7CisgICAgfQorCisgICAgcmVzdWx0LmVkZ2UgPSBlZGdlUG9pbnRlcjsK
KyAgICByZXN1bHQudHlwZSA9IGludGVyc2VjdGlvblR5cGU7CisgICAgcmVzdWx0LnBvaW50LnNl
dChpbnRlcnNlY3Rpb25YLCB5KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitmbG9hdCBFeGNs
dXNpb25Qb2x5Z29uOjpyaWdodFZlcnRleFkodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAg
dW5zaWduZWQgblZlcnRpY2VzID0gbnVtYmVyT2ZWZXJ0aWNlcygpOworICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHZlcnRleDEgPSB2ZXJ0ZXhBdCgoaW5kZXggKyAxKSAlIG5WZXJ0aWNlcyk7CisgICAg
Y29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IHZlcnRleEF0KChpbmRleCAtIDEpICUgblZlcnRp
Y2VzKTsKKworICAgIGlmICh2ZXJ0ZXgxLngoKSA9PSB2ZXJ0ZXgyLngoKSkKKyAgICAgICAgcmV0
dXJuIHZlcnRleDEueSgpID4gdmVydGV4Mi55KCkgPyB2ZXJ0ZXgxLnkoKSA6IHZlcnRleDIueSgp
OworICAgIHJldHVybiB2ZXJ0ZXgxLngoKSA+IHZlcnRleDIueCgpID8gdmVydGV4MS55KCkgOiB2
ZXJ0ZXgyLnkoKTsKK30KKworc3RhdGljIGJvb2wgYXBwZW5kSW50ZXJ2YWxYKGZsb2F0IHgsIGJv
b2wgaW5zaWRlLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiByZXN1bHQpCit7CisgICAgaWYg
KCFpbnNpZGUpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoRXhjbHVzaW9uSW50ZXJ2YWwoeCkpOwor
ICAgIGVsc2UKKyAgICAgICAgcmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxXS54MiA9IHg7CisKKyAg
ICByZXR1cm4gIWluc2lkZTsKK30KKworc3RhdGljIGJvb2wgY29tcGFyZUVkZ2VJbnRlcnNlY3Rp
b25YKGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjEsIGNvbnN0IEVkZ2VJbnRl
cnNlY3Rpb24mIGludGVyc2VjdGlvbjIpCit7CisgICAgZmxvYXQgeDEgPSBpbnRlcnNlY3Rpb24x
LnBvaW50LngoKTsKKyAgICBmbG9hdCB4MiA9IGludGVyc2VjdGlvbjIucG9pbnQueCgpOworICAg
IHJldHVybiAoeDEgPT0geDIpID8gaW50ZXJzZWN0aW9uMS50eXBlIDwgaW50ZXJzZWN0aW9uMi50
eXBlIDogeDEgPCB4MjsKK30KKwordm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpjb21wdXRlWEludGVy
c2VjdGlvbnMoZmxvYXQgeSwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KSBjb25z
dAoreworICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBw
aW5nRWRnZXM7CisgICAgbV9lZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpF
ZGdlSW50ZXJ2YWwoeSwgeSwgMCksIG92ZXJsYXBwaW5nRWRnZXMpOworCisgICAgVmVjdG9yPEVk
Z2VJbnRlcnNlY3Rpb24+IGludGVyc2VjdGlvbnM7CisgICAgRWRnZUludGVyc2VjdGlvbiBpbnRl
cnNlY3Rpb247CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG92ZXJsYXBwaW5nRWRnZXMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2UgPSBzdGF0
aWNfY2FzdDxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+KG92ZXJsYXBwaW5nRWRnZXNbaV0uZGF0YSgp
KTsKKyAgICAgICAgaWYgKGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHksIGludGVyc2VjdGlv
bikpCisgICAgICAgICAgICBpbnRlcnNlY3Rpb25zLmFwcGVuZChpbnRlcnNlY3Rpb24pOworICAg
IH0KKyAgICBpZiAoaW50ZXJzZWN0aW9ucy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm47CisK
KyAgICBzdGQ6OnNvcnQoaW50ZXJzZWN0aW9ucy5iZWdpbigpLCBpbnRlcnNlY3Rpb25zLmVuZCgp
LCBXZWJDb3JlOjpjb21wYXJlRWRnZUludGVyc2VjdGlvblgpOworCisgICAgdW5zaWduZWQgaW5k
ZXggPSAwOworICAgIGludCB3aW5kQ291bnQgPSAwOworICAgIGJvb2wgaW5zaWRlID0gZmFsc2U7
CisKKyAgICB3aGlsZSAoaW5kZXggPCBpbnRlcnNlY3Rpb25zLnNpemUoKSkgeworICAgICAgICBj
b25zdCBFZGdlSW50ZXJzZWN0aW9uJiB0aGlzSW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tp
bmRleF07CisKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7
CisgICAgICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBuZXh0SW50ZXJzZWN0aW9uID0g
aW50ZXJzZWN0aW9uc1tpbmRleCArIDFdOworICAgICAgICAgICAgaWYgKCh0aGlzSW50ZXJzZWN0
aW9uLnBvaW50LngoKSA9PSBuZXh0SW50ZXJzZWN0aW9uLnBvaW50LngoKSkgJiYgKHRoaXNJbnRl
cnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZIHx8IHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBW
ZXJ0ZXhNYXhZKSkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUg
PT0gbmV4dEludGVyc2VjdGlvbi50eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNraXAg
cGFpcnMgb2YgaW50ZXJzZWN0aW9ucyB3aG9zZSB0eXBlcyBhcmUgVmVydGV4TWF4WSxWZXJ0ZXhN
YXhZIGFuZCBWZXJ0ZXhNaW5ZLFZlcnRleE1pblkuCisgICAgICAgICAgICAgICAgICAgIGluZGV4
ICs9IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
UmVwbGFjZSBwYWlycyBvZiBpbnRlcnNlY3Rpb25zIHdob3NlIHR5cGVzIGFyZSBWZXJ0ZXhNaW5Z
LFZlcnRleE1heFkgb3IgVmVydGV4TWF4WSxWZXJ0ZXhNaW5ZIHdpdGggb25lIFZlcnRleE1pblkg
aW50ZXJzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEludGVyc2VjdGlvbi50
eXBlID09IFZlcnRleE1heFkpCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25z
W2luZGV4ICsgMV0gPSB0aGlzSW50ZXJzZWN0aW9uOworICAgICAgICAgICAgICAgICAgICBpbmRl
eCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdl
JiB0aGlzRWRnZSA9ICp0aGlzSW50ZXJzZWN0aW9uLmVkZ2U7CisgICAgICAgIGJvb2wgY3Jvc3Np
bmcgPSAhd2luZENvdW50OworCisgICAgICAgIGlmIChmaWxsUnVsZSgpID09IFJVTEVfRVZFTk9E
RCkgeworICAgICAgICAgICAgd2luZENvdW50ICs9ICh0aGlzRWRnZS52ZXJ0ZXgyKCkueSgpID4g
dGhpc0VkZ2UudmVydGV4MSgpLnkoKSkgPyAxIDogLTE7CisgICAgICAgICAgICBjcm9zc2luZyA9
IGNyb3NzaW5nIHx8ICF3aW5kQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHRoaXNJ
bnRlcnNlY3Rpb24udHlwZSA9PSBOb3JtYWwpIHx8ICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0g
VmVydGV4TWluWSkpIHsKKyAgICAgICAgICAgIGlmIChjcm9zc2luZykKKyAgICAgICAgICAgICAg
ICBpbnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhpc0ludGVyc2VjdGlvbi5wb2ludC54KCksIGlu
c2lkZSwgcmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUg
PT0gVmVydGV4TWF4WSkgeworICAgICAgICAgICAgaW50IHZlcnRleEluZGV4ID0gKHRoaXNFZGdl
LnZlcnRleDIoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpKSA/IHRoaXNFZGdlLmluZGV4
MiA6IHRoaXNFZGdlLmluZGV4MTsKKyAgICAgICAgICAgIGlmIChjcm9zc2luZyAmJiByaWdodFZl
cnRleFkodmVydGV4SW5kZXgpID4geSkKKyAgICAgICAgICAgICAgICBpbnNpZGUgPSBhcHBlbmRJ
bnRlcnZhbFgodGhpc0VkZ2UubWF4WCgpLCBpbnNpZGUsIHJlc3VsdCk7CisgICAgICAgIH0gZWxz
ZSBpZiAodGhpc0ludGVyc2VjdGlvbi50eXBlID09IFZlcnRleFlCb3RoKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChFeGNsdXNpb25JbnRlcnZhbCh0aGlzRWRnZS5taW5YKCksIHRoaXNFZGdl
Lm1heFgoKSkpOworCisgICAgICAgIGluZGV4Kys7CisgICAgfQorfQorCisvLyBSZXR1cm4gdGhl
IFggcHJvamVjdGlvbnMgb2YgdGhlIGVkZ2VzIHRoYXQgb3ZlcmxhcCB5MSx5Mi4KK3ZvaWQgRXhj
bHVzaW9uUG9seWdvbjo6Y29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKGZsb2F0IHkxLCBmbG9hdCB5
MiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KSBjb25zdAoreworICAgIFZlY3Rv
cjxFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7CisgICAg
bV9lZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwoeTEs
IHkyLCAwKSwgb3ZlcmxhcHBpbmdFZGdlcyk7CisKKyAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVy
c2VjdGlvbjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdFZGdlcy5z
aXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSAqZWRnZSA9
IHN0YXRpY19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3ZlcmxhcHBpbmdFZGdlc1tpXS5k
YXRhKCkpOworICAgICAgICBmbG9hdCB4MTsKKyAgICAgICAgZmxvYXQgeDI7CisKKyAgICAgICAg
aWYgKGVkZ2UtPm1pblkoKSA8IHkxKSB7CisgICAgICAgICAgICBjb21wdXRlWEludGVyc2VjdGlv
bihlZGdlLCB5MSwgaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAgIHgxID0gaW50ZXJzZWN0aW9u
LnBvaW50LngoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB4MSA9IChlZGdlLT52ZXJ0
ZXgxKCkueSgpIDwgZWRnZS0+dmVydGV4MigpLnkoKSkgPyBlZGdlLT52ZXJ0ZXgxKCkueCgpIDog
ZWRnZS0+dmVydGV4MigpLngoKTsKKworICAgICAgICBpZiAoZWRnZS0+bWF4WSgpID4geTIpIHsK
KyAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHkyLCBpbnRlcnNlY3Rpb24p
OworICAgICAgICAgICAgeDIgPSBpbnRlcnNlY3Rpb24ucG9pbnQueCgpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHgyID0gKGVkZ2UtPnZlcnRleDEoKS55KCkgPiBlZGdlLT52ZXJ0ZXgy
KCkueSgpKSA/IGVkZ2UtPnZlcnRleDEoKS54KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOworCisg
ICAgICAgIGlmICh4MSA+IHgyKQorICAgICAgICAgICAgc3RkOjpzd2FwKHgxLCB4Mik7CisKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChFeGNsdXNpb25JbnRlcnZhbCh4MSwgeDIpKTsKKyAgICB9CisK
KyAgICBzb3J0RXhjbHVzaW9uSW50ZXJ2YWxzKHJlc3VsdCk7Cit9CisKK3ZvaWQgRXhjbHVzaW9u
UG9seWdvbjo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9n
aWNhbEJvdHRvbSwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBmbG9hdCB5MSA9
IG1pbllGb3JMb2dpY2FsTGluZShsb2dpY2FsVG9wLCBsb2dpY2FsQm90dG9tKTsKKyAgICBmbG9h
dCB5MiA9IG1heFlGb3JMb2dpY2FsTGluZShsb2dpY2FsVG9wLCBsb2dpY2FsQm90dG9tKTsKKwor
ICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7
CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkxLCB5MVhJbnRlcnZhbHMpOworICAgIGNvbXB1
dGVYSW50ZXJzZWN0aW9ucyh5MiwgeTJYSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxFeGNsdXNp
b25JbnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOworICAgIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxz
KHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBtZXJnZWRJbnRlcnZhbHMpOworCisgICAgVmVj
dG9yPEV4Y2x1c2lvbkludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVFZGdlSW50
ZXJzZWN0aW9ucyh5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiBleGNsdWRlZEludGVydmFsczsKKyAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFs
cyhtZXJnZWRJbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGV4Y2x1ZGVkSW50ZXJ2YWxzKTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNsdWRlZEludGVydmFscy5zaXplKCk7IGkr
KykgeworICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9IGV4Y2x1ZGVkSW50ZXJ2
YWxzW2ldOworICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBp
bnRlcnZhbC54MikpOworICAgIH0KK30KKwordm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpnZXRJbmNs
dWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsQm90dG9tLCBTZWdt
ZW50TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAgIGZsb2F0IHkxID0gbWluWUZvckxvZ2ljYWxM
aW5lKGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOworICAgIGZsb2F0IHkyID0gbWF4WUZvckxv
Z2ljYWxMaW5lKGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOworCisgICAgVmVjdG9yPEV4Y2x1
c2lvbkludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKKyAgICBjb21wdXRlWElu
dGVyc2VjdGlvbnMoeTEsIHkxWEludGVydmFscyk7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25z
KHkyLCB5MlhJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBjb21t
b25JbnRlcnZhbHM7CisgICAgaW50ZXJzZWN0RXhjbHVzaW9uSW50ZXJ2YWxzKHkxWEludGVydmFs
cywgeTJYSW50ZXJ2YWxzLCBjb21tb25JbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyh5
MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBp
bmNsdWRlZEludGVydmFsczsKKyAgICBzdWJ0cmFjdEV4Y2x1c2lvbkludGVydmFscyhjb21tb25J
bnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGluY2x1ZGVkSW50ZXJ2YWxzKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpbmNsdWRlZEludGVydmFscy5zaXplKCk7IGkrKykgeworICAg
ICAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9IGluY2x1ZGVkSW50ZXJ2YWxzW2ldOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBpbnRlcnZhbC54
MikpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjM5N2QwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEV4Y2x1c2lvblBvbHlnb25faAorI2RlZmluZSBFeGNsdXNpb25Qb2x5Z29uX2gKKworI2luY2x1
ZGUgIkV4Y2x1c2lvbkludGVydmFsLmgiCisjaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
UE9ESW50ZXJ2YWxUcmVlLmgiCisjaW5jbHVkZSAiV2luZFJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdHJ1Y3QgRXhjbHVzaW9uUG9seWdvbkVkZ2U7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNl
ZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZy4KKyNpZm5kZWYgTkRFQlVHCit0ZW1w
bGF0ZSA8Y2xhc3M+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nOworI2VuZGlmCisKK2NsYXNzIEV4Y2x1
c2lvblBvbHlnb24gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEV4Y2x1c2lvblBvbHlnb24pOworcHVibGljOgorICAgIEV4Y2x1c2lvblBvbHlnb24o
UGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1
bGUpOworCisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4QXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuICgqbV92ZXJ0aWNlcylbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbnVtYmVy
T2ZWZXJ0aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljZXMtPnNpemUoKTsgfQorICAgIFdp
bmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQorCisgICAgdmly
dHVhbCBGbG9hdFJlY3Qgc2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBpbnRlcm5hbFRvTG9naWNhbEJvdW5kaW5nQm94KG1fYm91bmRpbmdCb3gpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZs
b2F0IGxvZ2ljYWxCb3R0b20sIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxv
Z2ljYWxCb3R0b20sIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6Cisg
ICAgZmxvYXQgcmlnaHRWZXJ0ZXhZKHVuc2lnbmVkKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVY
SW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JikgY29uc3Q7
CisgICAgdm9pZCBjb21wdXRlRWRnZUludGVyc2VjdGlvbnMoZmxvYXQgbWluWSwgZmxvYXQgbWF4
WSwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYpIGNvbnN0OworCisgICAgdHlwZWRlZiBQT0RJ
bnRlcnZhbDxmbG9hdCwgRXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBFZGdlSW50ZXJ2YWw7CisgICAg
dHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8ZmxvYXQsIEV4Y2x1c2lvblBvbHlnb25FZGdlKj4gRWRn
ZUludGVydmFsVHJlZTsKKworICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBtX3ZlcnRp
Y2VzOworICAgIFdpbmRSdWxlIG1fZmlsbFJ1bGU7CisgICAgRmxvYXRSZWN0IG1fYm91bmRpbmdC
b3g7CisgICAgVmVjdG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlPiBtX2VkZ2VzOworICAgIEVkZ2VJ
bnRlcnZhbFRyZWUgbV9lZGdlVHJlZTsKK307CisKKy8vIEVkZ2VJbnRlcnZhbFRyZWUgbm9kZXMg
c3RvcmUgbWluWSwgbWF4WSwgYW5kIGEgKCJVc2VyRGF0YSIpIHBvaW50ZXIgdG8gYW4gRXhjbHVz
aW9uUG9seWdvbkVkZ2UuIEVkZ2UgdmVydGV4CisvLyBpbmRleDEgaXMgbGVzcyB0aGFuIGluZGV4
MiwgZXhjZXB0IHRoZSBsYXN0IGVkZ2UsIHdoZXJlIGluZGV4MiBpcyAwLiBXaGVuIGEgcG9seWdv
biBlZGdlIGlzIGRlZmluZWQgYnkgMworLy8gb3IgbW9yZSBjb2xpbmVhciB2ZXJ0aWNlcywgaW5k
ZXgyIGNhbiBiZSB0aGUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNvbGluZWFyIHZlcnRleC4KK3N0
cnVjdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSB7CisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4
MSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQocG9seWdvbik7CisgICAgICAgIHJldHVy
biBwb2x5Z29uLT52ZXJ0ZXhBdChpbmRleDEpOworICAgIH0KKworICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHZlcnRleDIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKHBvbHlnb24pOworICAg
ICAgICByZXR1cm4gcG9seWdvbi0+dmVydGV4QXQoaW5kZXgyKTsKKyAgICB9CisKKyAgICBmbG9h
dCBtaW5YKCkgY29uc3QgeyByZXR1cm4gc3RkOjptaW4odmVydGV4MSgpLngoKSwgdmVydGV4Migp
LngoKSk7IH0KKyAgICBmbG9hdCBtaW5ZKCkgY29uc3QgeyByZXR1cm4gc3RkOjptaW4odmVydGV4
MSgpLnkoKSwgdmVydGV4MigpLnkoKSk7IH0KKyAgICBmbG9hdCBtYXhYKCkgY29uc3QgeyByZXR1
cm4gc3RkOjptYXgodmVydGV4MSgpLngoKSwgdmVydGV4MigpLngoKSk7IH0KKyAgICBmbG9hdCBt
YXhZKCkgY29uc3QgeyByZXR1cm4gc3RkOjptYXgodmVydGV4MSgpLnkoKSwgdmVydGV4MigpLnko
KSk7IH0KKworICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb24qIHBvbHlnb247CisgICAgdW5zaWdu
ZWQgaW5kZXgxOworICAgIHVuc2lnbmVkIGluZGV4MjsKK307CisKKy8vIFRoZXNlIHN0cnVjdHVy
ZXMgYXJlIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcuMQorI2lmbmRlZiBO
REVCVUcKK3RlbXBsYXRlIDw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPGZsb2F0PiB7CisgICAgc3Rh
dGljIFN0cmluZyBzdHJpbmcoY29uc3QgZmxvYXQgdmFsdWUpIHsgcmV0dXJuIFN0cmluZzo6bnVt
YmVyKHZhbHVlKTsgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxFeGNs
dXNpb25Qb2x5Z29uRWRnZSo+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBFeGNs
dXNpb25Qb2x5Z29uRWRnZSogZWRnZSkgeyByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVwICglZiwl
ZiAlZiwlZikiLCBlZGdlLCBlZGdlLT52ZXJ0ZXgxKCkueCgpLCBlZGdlLT52ZXJ0ZXgxKCkueSgp
LCBlZGdlLT52ZXJ0ZXgyKCkueCgpLCBlZGdlLT52ZXJ0ZXgyKCkueSgpKTsgfQorfTsKKyNlbmRp
ZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFeGNsdXNpb25Qb2x5Z29u
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwCmluZGV4IDBm
NDMwZWYuLmMzZWM4YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNo
YXBlLmNwcApAQCAtMzEsMTAgKzMxLDEwIEBACiAjaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIK
IAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJFeGNsdXNpb25Q
b2x5Z29uLmgiCiAjaW5jbHVkZSAiRXhjbHVzaW9uUmVjdGFuZ2xlLmgiCiAjaW5jbHVkZSAiRmxv
YXRTaXplLmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNjAsNiArNjAsMTEgQEAgc3RhdGlj
IFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lvbkVsbGlwc2UoY29uc3Qg
RmxvYXRQb2ludCYgY2VudGUKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblJlY3Rh
bmdsZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGlpLndpZHRoKCksIGNlbnRlci55KCkgLSBy
YWRpaS5oZWlnaHQoKSwgcmFkaWkud2lkdGgoKSoyLCByYWRpaS5oZWlnaHQoKSoyKSwgcmFkaWkp
KTsKIH0KIAorc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lv
blBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1
bGUgZmlsbFJ1bGUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25Qb2x5Z29u
KHZlcnRpY2VzLCBmaWxsUnVsZSkpOworfQorCiAvLyBJZiB0aGUgd3JpdGluZ01vZGUgaXMgdmVy
dGljYWwsIHRoZW4gdGhlIEJhc2ljU2hhcGUncyAocGh5c2ljYWwpIHggYW5kIHkgY29vcmRpbmF0
ZXMgYXJlIHN3YXBwZWQsIHNvIHRoYXQKIC8vIGxpbmUgc2VnbWVudHMgYXJlIHBhcmFsbGVsIHRv
IHRoZSBpbnRlcm5hbCBjb29yZGluYXRlIHN5c3RlbSdzIFggYXhpcy4KIApAQCAtODcsOCArOTIs
OCBAQCBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhj
bHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZQogICAgICAgICBmbG9hdCByYWRpdXNZID0gcmFk
aXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVz
WUxlbmd0aCwgYm94SGVpZ2h0KTsKIAogICAgICAgICBleGNsdXNpb25TaGFwZSA9IGhvcml6b250
YWxXcml0aW5nTW9kZQotICAgICAgICAgID8gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpKQot
ICAgICAgICAgIDogY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVjdCh5LCB4LCBoZWln
aHQsIHdpZHRoKSwgRmxvYXRTaXplKHJhZGl1c1ksIHJhZGl1c1gpKTsKKyAgICAgICAgICAgID8g
Y3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwg
RmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpKQorICAgICAgICAgICAgOiBjcmVhdGVFeGNsdXNp
b25SZWN0YW5nbGUoRmxvYXRSZWN0KHksIHgsIGhlaWdodCwgd2lkdGgpLCBGbG9hdFNpemUocmFk
aXVzWSwgcmFkaXVzWCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTk5LDggKzEwNCw4
IEBAIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IEV4Y2x1c2lvblNoYXBlOjpjcmVhdGVFeGNs
dXNpb25TaGFwZShjb25zdCBCYXNpY1NoYXBlCiAgICAgICAgIGZsb2F0IHJhZGl1cyA9ICBmbG9h
dFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+cmFkaXVzKCksIHN0ZDo6bWF4KGJveEhlaWdodCwgYm94
V2lkdGgpKTsKIAogICAgICAgICBleGNsdXNpb25TaGFwZSA9IGhvcml6b250YWxXcml0aW5nTW9k
ZQotICAgICAgICAgID8gY3JlYXRlRXhjbHVzaW9uQ2lyY2xlKEZsb2F0UG9pbnQoY2VudGVyWCwg
Y2VudGVyWSksIHJhZGl1cykKLSAgICAgICAgICA6IGNyZWF0ZUV4Y2x1c2lvbkNpcmNsZShGbG9h
dFBvaW50KGNlbnRlclksIGNlbnRlclgpLCByYWRpdXMpOworICAgICAgICAgICAgPyBjcmVhdGVF
eGNsdXNpb25DaXJjbGUoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgcmFkaXVzKQorICAg
ICAgICAgICAgOiBjcmVhdGVFeGNsdXNpb25DaXJjbGUoRmxvYXRQb2ludChjZW50ZXJZLCBjZW50
ZXJYKSwgcmFkaXVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMTIsMTMgKzExNywy
NiBAQCBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhj
bHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZQogICAgICAgICBmbG9hdCByYWRpdXNZID0gZmxv
YXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRpdXNZKCksIGJveEhlaWdodCk7CiAKICAgICAg
ICAgZXhjbHVzaW9uU2hhcGUgPSBob3Jpem9udGFsV3JpdGluZ01vZGUKLSAgICAgICAgICA/IGNy
ZWF0ZUV4Y2x1c2lvbkVsbGlwc2UoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgRmxvYXRT
aXplKHJhZGl1c1gsIHJhZGl1c1kpKQotICAgICAgICAgIDogY3JlYXRlRXhjbHVzaW9uRWxsaXBz
ZShGbG9hdFBvaW50KGNlbnRlclksIGNlbnRlclgpLCBGbG9hdFNpemUocmFkaXVzWSwgcmFkaXVz
WCkpOworICAgICAgICAgICAgPyBjcmVhdGVFeGNsdXNpb25FbGxpcHNlKEZsb2F0UG9pbnQoY2Vu
dGVyWCwgY2VudGVyWSksIEZsb2F0U2l6ZShyYWRpdXNYLCByYWRpdXNZKSkKKyAgICAgICAgICAg
IDogY3JlYXRlRXhjbHVzaW9uRWxsaXBzZShGbG9hdFBvaW50KGNlbnRlclksIGNlbnRlclgpLCBG
bG9hdFNpemUocmFkaXVzWSwgcmFkaXVzWCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAg
ICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1BPTFlHT046Ci0gICAgICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9QT0xZR09OOiB7Cisg
ICAgICAgIGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKiBwb2x5Z29uID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQmFzaWNTaGFwZVBvbHlnb24qPihiYXNpY1NoYXBlKTsKKyAgICAgICAgY29uc3QgVmVjdG9y
PExlbmd0aD4mIHZhbHVlcyA9IHBvbHlnb24tPnZhbHVlcygpOworICAgICAgICBzaXplX3QgdmFs
dWVzU2l6ZSA9IHZhbHVlcy5zaXplKCk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlc1NpemUgJSAy
KSk7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50PiogdmVydGljZXMgPSBuZXcgVmVjdG9yPEZs
b2F0UG9pbnQ+KHZhbHVlc1NpemUgLyAyKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZhbHVlc1NpemU7IGkgKz0gMikgeworICAgICAgICAgICAgRmxvYXRQb2ludCB2ZXJ0ZXgo
CisgICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMuYXQoaSksIGJveFdp
ZHRoKSwKKyAgICAgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpICsg
MSksIGJveEhlaWdodCkpOworICAgICAgICAgICAgKCp2ZXJ0aWNlcylbaSAvIDJdID0gaG9yaXpv
bnRhbFdyaXRpbmdNb2RlID8gdmVydGV4IDogdmVydGV4LnRyYW5zcG9zZWRQb2ludCgpOworICAg
ICAgICB9CisgICAgICAgIGV4Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uUG9seWdvbihh
ZG9wdFB0cih2ZXJ0aWNlcyksIHBvbHlnb24tPndpbmRSdWxlKCkpOworICAgICAgICBicmVhazsK
KyAgICB9CiAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by5jcHAKaW5kZXggN2I2MGFhOS4uYmY3ZjMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAKQEAgLTczLDcgKzczLDcg
QEAgYm9vbCBFeGNsdXNpb25TaGFwZUluc2lkZUluZm86OmlzRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvRW5hYmxlZEZvclJlbmRlckJsb2NrKGMKIHsKICAgICAvLyBGSVhNRTogQnVnIDg5NzA3OiBF
bmFibGUgc2hhcGUgaW5zaWRlIGZvciBub24tcmVjdGFuZ3VsYXIgc2hhcGVzCiAgICAgQmFzaWNT
aGFwZSogc2hhcGUgPSBibG9jay0+c3R5bGUoKS0+c2hhcGVJbnNpZGUoKTsKLSAgICByZXR1cm4g
KHNoYXBlICYmIHNoYXBlLT50eXBlKCkgPT0gQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUkVDVEFO
R0xFKTsKKyAgICByZXR1cm4gc2hhcGUgJiYgKHNoYXBlLT50eXBlKCkgPT0gQmFzaWNTaGFwZTo6
QkFTSUNfU0hBUEVfUkVDVEFOR0xFIHx8IHNoYXBlLT50eXBlKCkgPT0gQmFzaWNTaGFwZTo6QkFT
SUNfU0hBUEVfUE9MWUdPTik7CiB9CiAKIHZvaWQgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjpy
ZW1vdmVFeGNsdXNpb25TaGFwZUluc2lkZUluZm9Gb3JSZW5kZXJCbG9jayhjb25zdCBSZW5kZXJC
bG9jayogYmxvY2spCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>