<?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>141570</bug_id>
          
          <creation_ts>2015-02-13 11:40:23 -0800</creation_ts>
          <short_desc>textPath layout performance improvement</short_desc>
          <delta_ts>2015-04-15 02:10:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>143751</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>ralpht+bugs</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1068985</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-02-13 11:40:23 -0800</bug_when>
    <thetext>According to Ralph Thomas:
https://twitter.com/i_am_ralpht/status/566280495374168064

we could improve textPath performance by caching the bezier curve, or by not measuring the path twice for each glyph.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068986</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-02-13 11:41:05 -0800</bug_when>
    <thetext>&lt;rdar://problem/19830230&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069162</commentid>
    <comment_count>2</comment_count>
    <who name="Ralph T">ralpht+bugs</who>
    <bug_when>2015-02-13 22:41:09 -0800</bug_when>
    <thetext>In SVGTextLayoutEngine.cpp:557:

bool ok = false;
FloatPoint point = m_textPath.pointAtLength(textPathOffset, ok);
ASSERT(ok);

x = point.x();
y = point.y();
angle = m_textPath.normalAngleAtLength(textPathOffset, ok);
ASSERT(ok);

m_textPath is a Path, where the core of pointAtLength and normalAngleAtLength vary form platform to platform, but I think they all play the whole path back from the start.

Two possible improvements:
 - merge pointAtLength and normalAngleAtLength so the path only has to be walked once.
 - fix path iteration to continue from the last queried point instead of the start if the current query is ahead of the previous query (the SVG code walks the path sequentially because it&apos;s using glyph offsets, so this is a huge improvement).

The code currently is a bottleneck for animating the offset of text on a path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083782</commentid>
    <comment_count>3</comment_count>
      <attachid>250396</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-08 17:29:53 -0700</bug_when>
    <thetext>Created attachment 250396
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083788</commentid>
    <comment_count>4</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2015-04-08 17:38:32 -0700</bug_when>
    <thetext>Can we add a perf test here? Do we have measurements on how much faster this is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083803</commentid>
    <comment_count>5</comment_count>
      <attachid>250400</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-08 18:34:50 -0700</bug_when>
    <thetext>Created attachment 250400
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083990</commentid>
    <comment_count>6</comment_count>
      <attachid>250444</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-09 10:30:44 -0700</bug_when>
    <thetext>Created attachment 250444
test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083992</commentid>
    <comment_count>7</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-09 10:34:57 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Can we add a perf test here? Do we have measurements on how much faster this
&gt; is?

When running the attached test case using the webkit performance runner, the results are:

Without the patch: 

    mean: 1792.106688497006 ms
    median: 1788.6809015180916 ms
    stdev: 39.76658446899556 ms
    min: 1748.82149300538 ms
    max: 1904.532784014009 ms

With the patch:

    mean: 909.9649922456591 ms
    median: 907.5612444721628 ms
    stdev: 6.427914386842484 ms
    min: 900.7325859856792 ms
    max: 925.5951620289125 ms

We almost cut the the time spent loading the page into half. I will add this test case to the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084000</commentid>
    <comment_count>8</comment_count>
      <attachid>250448</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-09 11:13:04 -0700</bug_when>
    <thetext>Created attachment 250448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084718</commentid>
    <comment_count>9</comment_count>
      <attachid>250621</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-12 20:49:28 -0700</bug_when>
    <thetext>Created attachment 250621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084829</commentid>
    <comment_count>10</comment_count>
      <attachid>250621</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-13 09:36:40 -0700</bug_when>
    <thetext>Comment on attachment 250621
Patch

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

&gt; Source/WebCore/platform/graphics/Path.h:63
&gt; +    class PathTraversalState;

Seems like this should be a member of the Path class, Path::TraversalState. Something we can come back to and do later. Same thought on PathElementType and PathElement.

&gt; Source/WebCore/platform/graphics/Path.h:108
&gt; +        PathTraversalState traversalStateAtLength(float, bool&amp;) const;
&gt; +        FloatPoint pointAtLength(float, bool&amp;) const;
&gt; +        float normalAngleAtLength(float, bool&amp;) const;

I don’t think the meaning of these bool&amp; arguments is clear without an argument name. Not that &quot;ok&quot; is all that great, but no name at all is confusing. Same thought about &quot;length&quot;; not sure that it’s clear that the float is the length from &quot;AtLength&quot; without the name &quot;length&quot;.

&gt; Source/WebCore/platform/graphics/PathTraversalState.cpp:119
&gt; +static float curveLength(PathTraversalState&amp; traversalState, const CurveType&amp; elementCurve)

Are you sure that using a reference here is better for performance? I guess the point was to not modify the argument, but I think the old code was really OK.

&gt; Source/WebCore/platform/graphics/PathTraversalState.h:36
&gt;      enum PathTraversalAction {

Seems like this should be &quot;enum class Action&quot;; no need to repeat the name of the class it’s a member of.

&gt; Source/WebCore/platform/graphics/PathTraversalState.h:42
&gt; +    PathTraversalState(PathTraversalAction, float = 0);

Not clear what this second argument is without an argument name.

&gt; Source/WebCore/platform/graphics/PathTraversalState.h:52
&gt; +private:
&gt; +    void closeSubpath();
&gt; +    void moveTo(const FloatPoint&amp;);
&gt; +    void lineTo(const FloatPoint&amp;);
&gt; +    void quadraticBezierTo(const FloatPoint&amp;, const FloatPoint&amp;);
&gt; +    void cubicBezierTo(const FloatPoint&amp;, const FloatPoint&amp;, const FloatPoint&amp;);
&gt; +
&gt; +    bool finalizeAppendPathElement();
&gt; +    bool appendPathElement(PathElementType, const FloatPoint*);

Normally we put all the public members first, then move on to the private ones.

&gt; Source/WebCore/platform/graphics/PathTraversalState.h:71
&gt; +    bool m_zeroVector { false };

I think this should be named m_isZeroVector or something like that. The value is a predicate, not a vector, so it’s strange to name the member “zero vector”.

&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:54
&gt; +    if (SVGTextContentElement* textContentElement = SVGTextContentElement::elementFromRenderer(box-&gt;renderer().parent())) {

I suggest auto* here.

&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:78
&gt; +        const Vector&lt;SVGTextFragment&gt;&amp; fragments = box-&gt;textFragments();

No need for this local variable. Just:

    for (auto&amp; fragment : box-&gt;textFragments())

&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:91
&gt; +    for (auto it = m_boxes.begin(), end = m_boxes.end(); it != end; ++it) {

Should use a modern for loop here:

    for (auto* box : m_boxes) {

&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:92
&gt; +        const Vector&lt;SVGTextFragment&gt;&amp; fragments = (*it)-&gt;textFragments();

Should use auto&amp; here.

&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:99
&gt; +    for (auto it = m_boxes.rbegin(), end = m_boxes.rend(); it != end; ++it) {

Can’t use modern for loop here because we don’t yet have an adapter to let us iterate backwards through a vector, but we should write one!

&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:100
&gt; +        const Vector&lt;SVGTextFragment&gt;&amp; fragments = (*it)-&gt;textFragments();

Should use auto&amp; here.

&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:149
&gt; +        Vector&lt;SVGTextFragment&gt;&amp; fragments = box-&gt;textFragments();

No need for a local variable here:

    for (auto&amp; fragment : box-&gt;textFragments()) {

&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:204
&gt; +        Vector&lt;SVGTextFragment&gt;&amp; fragments = box-&gt;textFragments();

No need for a local variable here:

    for (auto&amp; fragment : box-&gt;textFragments()) {

&gt; Source/WebCore/rendering/svg/SVGTextChunk.h:44
&gt; +    SVGTextChunk(const Vector&lt;SVGInlineTextBox*&gt;::const_iterator&amp;, const Vector&lt;SVGInlineTextBox*&gt;::const_iterator&amp;);

I think this is overkill. Vector iterators are just raw pointers. Passing one by const&amp; is unnecessarily inefficient, and also wordy. Also, with no argument names it’s not clear what the two iterators are supposed to be. I guess I’m suggesting:

    SVGTextChunk(SVGInlineTextBox** begin, SVGInlineTextBox** end);

&gt; Source/WebCore/rendering/svg/SVGTextChunkBuilder.cpp:34
&gt;  void SVGTextChunkBuilder::transformationForTextBox(SVGInlineTextBox* textBox, AffineTransform&amp; transform) const

We should use a return value instead of an out argument for this.

&gt; Source/WebCore/rendering/svg/SVGTextChunkBuilder.cpp:36
&gt; +    static NeverDestroyed&lt;const AffineTransform&gt; s_identityTransform;

Not sure this is a helpful optimization. Instead I think we should just do:

    transform = AffineTransform();

&gt; Source/WebCore/rendering/svg/SVGTextChunkBuilder.cpp:51
&gt; +    Vector&lt;SVGInlineTextBox*&gt;::const_iterator it = lineLayoutBoxes.begin();
&gt; +    Vector&lt;SVGInlineTextBox*&gt;::const_iterator end = lineLayoutBoxes.end();
&gt; +    Vector&lt;SVGInlineTextBox*&gt;::const_iterator start = end;

For vectors we normally consider it safer to use indices rather than iterators. Also, I suggest using auto for these three if you are going to use iterators.

&gt; Source/WebCore/rendering/svg/SVGTextChunkBuilder.cpp:78
&gt; +    for (const auto&amp; chunk : m_textChunks) {
&gt; +        chunk.layout(m_textBoxTransformations);
&gt;      }

No braces in WebKit coding style for a single line loop body like this.

&gt; Source/WebCore/rendering/svg/SVGTextLayoutEngine.cpp:554
&gt; +            PathTraversalState traversalState(m_textPath.traversalStateAtLength(textPathOffset, ok));

I would write:

   auto traversalState = m_textPath.traversalStateAtLength(textPathOffset, ok);

&gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:219
&gt; +    PathTraversalState traversalState(m_animationPath.traversalStateAtLength(positionOnPath, ok));

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085298</commentid>
    <comment_count>11</comment_count>
      <attachid>250749</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-14 15:53:46 -0700</bug_when>
    <thetext>Created attachment 250749
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085315</commentid>
    <comment_count>12</comment_count>
      <attachid>250621</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-14 16:16:22 -0700</bug_when>
    <thetext>Comment on attachment 250621
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Path.h:108
&gt;&gt; +        float normalAngleAtLength(float, bool&amp;) const;
&gt; 
&gt; I don’t think the meaning of these bool&amp; arguments is clear without an argument name. Not that &quot;ok&quot; is all that great, but no name at all is confusing. Same thought about &quot;length&quot;; not sure that it’s clear that the float is the length from &quot;AtLength&quot; without the name &quot;length&quot;.

Done. I returned back the argument name &quot;length&quot; and I changed &quot;ok&quot; to be &quot;success&quot;. I was assuming mistakenly that I should always omit the argument name in the header file. But now I learnt that the argument name is still needed if the function name is not enough to tell what it is if it is omitted.

&gt;&gt; Source/WebCore/platform/graphics/PathTraversalState.cpp:119
&gt;&gt; +static float curveLength(PathTraversalState&amp; traversalState, const CurveType&amp; elementCurve)
&gt; 
&gt; Are you sure that using a reference here is better for performance? I guess the point was to not modify the argument, but I think the old code was really OK.

The reason for me changing it to const CurveType&amp; was because I wanted to assert the right-most split curve and the original curve have the same end.  So instead of having it as it was &quot;CurveType curve&quot; and make a copy of it to be used before exiting the function, I thought if I do it this way it will serve my purpose and it is cleaner.

&gt;&gt; Source/WebCore/platform/graphics/PathTraversalState.h:36
&gt;&gt;      enum PathTraversalAction {
&gt; 
&gt; Seems like this should be &quot;enum class Action&quot;; no need to repeat the name of the class it’s a member of.

Done.

&gt;&gt; Source/WebCore/platform/graphics/PathTraversalState.h:42
&gt;&gt; +    PathTraversalState(PathTraversalAction, float = 0);
&gt; 
&gt; Not clear what this second argument is without an argument name.

Done. I added the argument name &quot;float desiredLength = 0&quot; to the constructor definition. And I added the following assertion to the constructor:

ASSERT(action != Action::TotalLength || !desiredLength);

To prevent any one from creating an instance of this class with Action::TotalLength but passing a non-zero desiredLength.

&gt;&gt; Source/WebCore/platform/graphics/PathTraversalState.h:52
&gt;&gt; +    bool appendPathElement(PathElementType, const FloatPoint*);
&gt; 
&gt; Normally we put all the public members first, then move on to the private ones.

Done. I also made all the data members private and added the needed access methods. This class looks much cleaner with these changes.

&gt;&gt; Source/WebCore/platform/graphics/PathTraversalState.h:71
&gt;&gt; +    bool m_zeroVector { false };
&gt; 
&gt; I think this should be named m_isZeroVector or something like that. The value is a predicate, not a vector, so it’s strange to name the member “zero vector”.

Done.

&gt;&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:54
&gt;&gt; +    if (SVGTextContentElement* textContentElement = SVGTextContentElement::elementFromRenderer(box-&gt;renderer().parent())) {
&gt; 
&gt; I suggest auto* here.

Done.

&gt;&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:78
&gt;&gt; +        const Vector&lt;SVGTextFragment&gt;&amp; fragments = box-&gt;textFragments();
&gt; 
&gt; No need for this local variable. Just:
&gt; 
&gt;     for (auto&amp; fragment : box-&gt;textFragments())

Done.

&gt;&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:91
&gt;&gt; +    for (auto it = m_boxes.begin(), end = m_boxes.end(); it != end; ++it) {
&gt; 
&gt; Should use a modern for loop here:
&gt; 
&gt;     for (auto* box : m_boxes) {

Done.

&gt;&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:92
&gt;&gt; +        const Vector&lt;SVGTextFragment&gt;&amp; fragments = (*it)-&gt;textFragments();
&gt; 
&gt; Should use auto&amp; here.

Done.

&gt;&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:100
&gt;&gt; +        const Vector&lt;SVGTextFragment&gt;&amp; fragments = (*it)-&gt;textFragments();
&gt; 
&gt; Should use auto&amp; here.

Done.

&gt;&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:149
&gt;&gt; +        Vector&lt;SVGTextFragment&gt;&amp; fragments = box-&gt;textFragments();
&gt; 
&gt; No need for a local variable here:
&gt; 
&gt;     for (auto&amp; fragment : box-&gt;textFragments()) {

Done.

&gt;&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:204
&gt;&gt; +        Vector&lt;SVGTextFragment&gt;&amp; fragments = box-&gt;textFragments();
&gt; 
&gt; No need for a local variable here:
&gt; 
&gt;     for (auto&amp; fragment : box-&gt;textFragments()) {

Done,

&gt;&gt; Source/WebCore/rendering/svg/SVGTextChunk.h:44
&gt;&gt; +    SVGTextChunk(const Vector&lt;SVGInlineTextBox*&gt;::const_iterator&amp;, const Vector&lt;SVGInlineTextBox*&gt;::const_iterator&amp;);
&gt; 
&gt; I think this is overkill. Vector iterators are just raw pointers. Passing one by const&amp; is unnecessarily inefficient, and also wordy. Also, with no argument names it’s not clear what the two iterators are supposed to be. I guess I’m suggesting:
&gt; 
&gt;     SVGTextChunk(SVGInlineTextBox** begin, SVGInlineTextBox** end);

Done. The constructor of this class is now taking integers instead of iterators as you suggested below when the SVGTextChunk is created from the SVGTextChunkBuilder.

SVGTextChunk(const Vector&lt;SVGInlineTextBox*&gt;&amp;, unsigned first, unsigned limit);

&gt;&gt; Source/WebCore/rendering/svg/SVGTextChunkBuilder.cpp:34
&gt;&gt;  void SVGTextChunkBuilder::transformationForTextBox(SVGInlineTextBox* textBox, AffineTransform&amp; transform) const
&gt; 
&gt; We should use a return value instead of an out argument for this.

Done.

&gt;&gt; Source/WebCore/rendering/svg/SVGTextChunkBuilder.cpp:36
&gt;&gt; +    static NeverDestroyed&lt;const AffineTransform&gt; s_identityTransform;
&gt; 
&gt; Not sure this is a helpful optimization. Instead I think we should just do:
&gt; 
&gt;     transform = AffineTransform();

Done. The static variable was removed.

&gt;&gt; Source/WebCore/rendering/svg/SVGTextChunkBuilder.cpp:51
&gt;&gt; +    Vector&lt;SVGInlineTextBox*&gt;::const_iterator start = end;
&gt; 
&gt; For vectors we normally consider it safer to use indices rather than iterators. Also, I suggest using auto for these three if you are going to use iterators.

Done. Integers are now used to pass the range of boxes to the SVGTextChunk constructor.

&gt;&gt; Source/WebCore/rendering/svg/SVGTextChunkBuilder.cpp:78
&gt;&gt;      }
&gt; 
&gt; No braces in WebKit coding style for a single line loop body like this.

Done.

&gt;&gt; Source/WebCore/rendering/svg/SVGTextLayoutEngine.cpp:554
&gt;&gt; +            PathTraversalState traversalState(m_textPath.traversalStateAtLength(textPathOffset, ok));
&gt; 
&gt; I would write:
&gt; 
&gt;    auto traversalState = m_textPath.traversalStateAtLength(textPathOffset, ok);

Done.

&gt;&gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:219
&gt;&gt; +    PathTraversalState traversalState(m_animationPath.traversalStateAtLength(positionOnPath, ok));
&gt; 
&gt; Ditto.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085331</commentid>
    <comment_count>13</comment_count>
      <attachid>250756</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-14 16:50:55 -0700</bug_when>
    <thetext>Created attachment 250756
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085335</commentid>
    <comment_count>14</comment_count>
      <attachid>250759</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-14 17:02:03 -0700</bug_when>
    <thetext>Created attachment 250759
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085352</commentid>
    <comment_count>15</comment_count>
      <attachid>250764</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-14 17:28:12 -0700</bug_when>
    <thetext>Created attachment 250764
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085376</commentid>
    <comment_count>16</comment_count>
      <attachid>250764</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-14 18:35:27 -0700</bug_when>
    <thetext>Comment on attachment 250764
Patch

Clearing flags on attachment: 250764

Committed r182828: &lt;http://trac.webkit.org/changeset/182828&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085377</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-14 18:35:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085432</commentid>
    <comment_count>18</comment_count>
      <attachid>250764</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-04-15 02:10:43 -0700</bug_when>
    <thetext>Comment on attachment 250764
Patch

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

&gt; Source/WebCore/rendering/svg/SVGTextChunk.cpp:32
&gt; +SVGTextChunk::SVGTextChunk(const Vector&lt;SVGInlineTextBox*&gt;&amp; lineLayoutBoxes, unsigned first, unsigned limit)
&gt;  {
&gt; -}
&gt; +    ASSERT(first &lt; limit);
&gt; +    ASSERT(first &gt;= 0 &amp;&amp; limit &lt;= lineLayoutBoxes.size());
&gt;  

first &gt;= 0 is always true, which broke the debug builds:
buildfix can be found here - bug143751</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250396</attachid>
            <date>2015-04-08 17:29:53 -0700</date>
            <delta_ts>2015-04-08 18:34:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141570-20150408172903.patch</filename>
            <type>text/plain</type>
            <size>28220</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNyBAQAorMjAxNS0wNC0wOCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIHRleHRQYXRo
IGxheW91dCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTU3MC4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgYm90dGxlbmVjayBvZiB0aGUgdGV4dC1vbi1w
YXRoIHBlcmZvcm1hbmNlIGlzIHRoZSBwb3NpdGlvbiBhbmQgYW5nbGUKKyAgICAgICAgY2FsY3Vs
YXRpb25zIGZvciBldmVyeSBzaW5nbGUgY2hhcmFjdGVyLiBJZiB0aGUgbnVtYmVyIG9mIGNoYXJh
Y3RlcnMgaXMKKyAgICAgICAgJ24nIGFuZCB0aGUgbnVtYmVyIG9mIHBhdGggZWxlbWVudHMgaXMg
J20nLCB0aGUgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NpbmcKKyAgICAgICAgdGhlIHBhdGggZWxl
bWVudHMgaXMgTygyIHggbiB4IG0pLiBXaGF0IG1ha2VzIGl0IHJlYWxseSB3b3JzZSBpcywgZm9y
IGV2ZXJ5CisgICAgICAgIGN1cnZlIHdlIGtlZXAgc3BsaXR0aW5nIHRoZSBjdXJ2ZSB0aWxsIHRo
ZSBzcGxpdCBjdXJ2ZSBpcyBhbG1vc3QgYSBzdHJhaWdodAorICAgICAgICBsaW5lLiBUaGUgZml4
ZXMgd2UgbmVlZCB0byBkbyBhcmU6CisgICAgICAgIDEuIE1lcmdlIHRoZSBwb3NpdGlvbiBhbmQg
dGhlIGFuZ2xlIHRyYXZlcnNhbHMgc2luY2UgdGhleSBhcmUgcmV0dXJuaW5nCisgICAgICAgICAg
IGluZm8gZm9yIHRoZSBzYW1lIGxlbmd0aCBvbiB0aGUgcGF0aC4gVGhlcmUgaXMgYSBkZWdlbmVy
YXRlIGNhc2UgZm9yCisgICAgICAgICAgIHRoZSBzdGFydGluZyBwb2ludCB3aGVuIGNhbGN1bGF0
aW5nIHRoZSBhbmdsZS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzCisgICAgICAgICAgIHNvbHZpbmcg
dGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgZXBzaWxvbiBpbnN0ZWFkIG9mIHplcm8gYnV0IGJlY2F1
c2UKKyAgICAgICAgICAgdHJhdmVyc2luZyB0aGUgcGF0aCBmb3IgcG9zaXRpb24gYW5kIGFuZ2xl
IGFyZSBub3cgbWVyZ2VkLCB3ZSB3aWxsIHBhc3MKKyAgICAgICAgICAgemVybyBmb3IgdGhlIHN0
YXJ0aW5nIHBvaW50IGFzIGlzLiBBbGwgd2UgbmVlZCB0byBtb3ZlIG9uZSBzdGVwIGFoZWFkCisg
ICAgICAgICAgIHdpdGhvdXQgbW92aW5nIHRoZSBwb3NpdGlvbi4gV2UgbmVlZCB0aGUgZXh0cmEg
c3RlcCB0byBjYWxjdWxhdGUgdGhlCisgICAgICAgICAgIHNsb3BlIG9mIHRoZSBwYXRoIGF0IHRo
ZSBzdGFydGluZyBwb2ludC4KKyAgICAgICAgMi4gV2UgbmVlZCB0byBhZGQgYSBuZXcgbW9kZSB0
byB0cmF2ZXJzaW5nIGEgcGF0aC4gVGhlIG5ldyBtb2RlIHdpbGwgdGFrZQorICAgICAgICAgICBh
IHZlY3RvciBvZiBsZW5ndGhzIGFuZCByZXR1cm5zIGEgdmVjdG9yIG9mIGFycm93IHZlY3RvcnMu
IEV2ZXJ5IGFycm93CisgICAgICAgICAgIHZlY3RvciByZXByZXNlbnRzIGEgcG9zaXRpb24gYW5k
IGFuIGFuZ2xlIG9uIHRoZSBwYXRoIGF0IGEgY2VydGFpbiBsZW5ndGguCisgICAgICAgICAgIFRo
aXMgd2lsbCByZXF1aXJlIGNoYW5naW5nIHRoZSBTVkdUZXh0TGF5b3V0RW5naW5lIHRvIGNhbGN1
bGF0ZSB0aGUgbGVuZ3RocworICAgICAgICAgICBmaXJzdCBhbmQgdGhlbiBwYXNzZXMgYWxsIG9m
IHRoZW0gdG8gdGhlIHBhdGggdHJhdmVyc2FsIGZ1bmN0aW9uLiBJbnN0ZWFkCisgICAgICAgICAg
IG9mIHRyYXZlcnNpbmcgdGhlIHBhdGggYWdhaW4sIHdlIGFyZSBnb2luZyB0byBnZXQgdGhlIHJl
cXVpcmVkIHBvaW50CisgICAgICAgICAgIGFuZCBhbmdsZSBmcm9tIHRoZSB2ZWN0b3Igb2YgYXJy
b3cgdmVjdG9ycy4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgdGhlIGZpcnN0
IGZpeCBvbmx5LiBUaGUgc2Vjb25kIG9uZSB3aWxsIHJlcXVpcmUKKyAgICAgICAgcmVmYWN0b3Jp
bmcgdGhlIFNWR1RleHRMYXlvdXRFbmdpbmUgc28gSSBhbSBnb2luZyB0byBhZGRyZXNzIGl0IGlu
IGEKKyAgICAgICAgZGlmZmVyZW50IHBhdGNoLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXRoTGVuZ3RoQXBwbGllckZ1bmN0aW9u
KTogSXQgaXMgYmV0dGVyIGFuZCBjbGVhbmVyIHRvIG1vdmUKKyAgICAgICAgdGhpcyBmdW5jdGlv
biBvZiB0aGlzIG1ldGhvZCB0byBQYXRoVHJhdmVyc2FsU3RhdGU6OnByb2Nlc3NQYXRoRWxlbWVu
dCgpLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYXZlcnNhbFN0YXRlQXRM
ZW5ndGgpOiBBZGQgYSBuZXcgZnVuY3Rpb24gd2hpY2ggcmV0dXJucworICAgICAgICB0aGUgdHJh
dmVyc2FsU3RhdGUgYXQgYSBjZXJ0YWluIGxlbmd0aCBvbiBhIHBhdGguCisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6UGF0aDo6cG9pbnRBdExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjpub3JtYWxBbmdsZUF0TGVuZ3RoKTogVXNlIHRyYXZlcnNhbFN0YXRlQXRMZW5ndGgoKSB0
byBnZXQKKyAgICAgICAgdGhlIHRyYXZlcnNhbFN0YXRlIGFuZCBmcm9tIGl0IHJldHVybiBlaXRo
ZXIgdGhlIHBvc2l0aW9uIG9yIHRoZSBhbmdsZS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0aC5oOiBEZWZpbmUgdHJhdmVyc2FsU3RhdGVBdExlbmd0aCgpLgorICAg
ICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZGlzdGFuY2VMaW5lKTogQ29kZSBjbGVhbiB1cC4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpjdXJ2ZUxlbmd0aCk6IFRoaXMgZnVuY3Rpb24gaGFkIGEg
YnVnLiBUaGUgb3JpZ2luYWwgY3VydmUgd2FzCisgICAgICAgIHByb2Nlc3NlZCB0d2ljZSB1bmxl
c3Mgd2UgYnJlYWsgYXQgYSBjZXJ0YWluIGxlbmd0aC4gVGhlIG9yaWdpbmFsIGN1cnZlCisgICAg
ICAgIHdhcyBhcHBlbmRlZCBvdXRzaWRlIHRoZSBsb29wIGFuZCBpZiBpcyBzcGxpdCwgdGhlIHJp
Z2h0IGhhbGYgaXMgcHVzaGVkCisgICAgICAgIG9udG8gdGhlIHN0YWNrIG9uIHRvcCBvZiB0aGUg
b3JpZ2luYWwgY3VydmUuIEFmdGVyIHByb2Nlc3NpbmcgdGhlIGxlZnQKKyAgICAgICAgYW5kIHRo
ZSByaWdodCBjdXJ2ZXMsIHRoZSBvcmlnaW5hbCBjdXJ2ZSB3aWxsIHBvcHBlZCBmcm9tIHRoZSBz
dGFjayB0bworICAgICAgICBiZSBwcm9jZXNzZWQgYWdhaW4uCisgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpQYXRoVHJhdmVyc2FsU3RhdGUpOiBBZGQgYW4g
b3B0aW9uYWwgcGFyYW1ldGVyCisgICAgICAgIGZvciB0aGUgZGVzaXJlZCBsZW5ndGggYW5kIG1v
dmUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBvdGhlciBtZW1iZXJzIHRvCisgICAgICAgIHRo
ZSBjbGFzcyBkZWZpbml0aW9uLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhUcmF2
ZXJzYWxTdGF0ZTo6Y2xvc2VTdWJwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhUcmF2ZXJz
YWxTdGF0ZTo6bW92ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhUcmF2ZXJzYWxTdGF0ZTo6
bGluZVRvKTogQWRkIHRoZSBkaXN0YW5jZSB0byB0aGUgbV90b3RhbExlbmd0aAorICAgICAgICBp
bnN0ZWFkIG9mIHJldHVybmluZyBpdCBzaW5jZSB0aGlzIGlzIHdoYXQgYWxsIHRoZSBjYWxsZXJz
IHdlcmUgZG9pbmcuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0
YXRlOjpxdWFkcmF0aWNCZXppZXJUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2Fs
U3RhdGU6OmN1YmljQmV6aWVyVG8pOiBBZGQgdGhlIGRpc3RhbmNlIHRvIHRoZQorICAgICAgICBt
X3RvdGFsTGVuZ3RoLiBNb3ZlIHNldHRpbmcgdGhlIG1fY3VycmVudCB0byBXZWJDb3JlOjpjdXJ2
ZUxlbmd0aCgpLgorICAgICAgICBSZW1vdmUgdW51c2VkIG1lbWJlcnMgbV9jb250cm9sMSBhbmQg
bV9jb250cm9sMi4KKworICAgICAgICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpwcm9j
ZXNzU2VnbWVudCk6IERlbGV0ZWQuICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhUcmF2
ZXJzYWxTdGF0ZTo6ZmluYWxpemVBcHBlbmRQYXRoRWxlbWVudCk6IENyZWF0ZSBhIG5ldyBuYW1l
LgorICAgICAgICBmb3IgdGhlIGZ1bmN0aW9uLiBIYW5kbGUgdGhlIGNhc2Ugb2YgdGhlIGFuZ2xl
IGF0IHRoZSBzdGFydGluZyBwb2ludCB3aGVyZQorICAgICAgICBtX2Rlc2lyZWRMZW5ndGggaXMg
emVyby4gVGhlIG5ldyBmbGFnIG1femVyb1ZlY3RvciB3aWxsIGJlIHNldCB0byBub3RpZnkKKyAg
ICAgICAgdGhlIGNhbGxlciB0aGF0IHRoZSAgbmV4dCBpdGVyYXRpb24gd2lsbCBiZSB0aGUgbGFz
dCBvbmUgYW5kIGl0IGlzIG9ubHkKKyAgICAgICAgbmVlZGVkIGZvciB0aGUgY2FsY3VsYXRpbmcg
dGhlIGFuZ2xlIG9mIGEgemVybyB2ZWN0b3IuIAorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGhUcmF2ZXJzYWxTdGF0ZTo6YXBwZW5kUGF0aEVsZW1lbnQpOiBUaGlzIGNvZGUgaXMgbW92
ZWQgZnJvbQorICAgICAgICBwYXRoTGVuZ3RoQXBwbGllckZ1bmN0aW9uKCkuCisgICAgICAgIAor
ICAgICAgICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpwcm9jZXNzUGF0aEVsZW1lbnQp
OiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQKKyAgICAgICAgYnkgdGhlIGNsYXNzIFBhdGguIEl0IGlz
IGEgd3JhcHBlciBmb3IgYXBwZW5kUGF0aEVsZW1lbnQoKS4gSWYgbV96ZXJvVmVjdG9yCisgICAg
ICAgIGlzIHNldCB3ZSBhcHBlbmQgdGhlIG5ldyBlbGVtZW50IHRvIGEgY29weSBmb3IgdGhlIFBh
dGhUcmF2ZXJzYWxTdGF0ZSBqdXN0CisgICAgICAgIHRvIGdldCB0aGUgYW5nbGUgZm9yIHRoZSB6
ZXJvIHZlY3Rvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxT
dGF0ZS5oOiBBZGQgbmV3IG1lbWJlcnMgYW5kIG1ldGhvZHMuCisgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpwcm9jZXNzUGF0aEVsZW1lbnQpOiBBbm90aGVy
IHdyYXBwZXIgZm9yCisgICAgICAgIGFwcGVuZFBhdGhFbGVtZW50KCkgd2hpY2ggaXMgdXNlZCBi
eSBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLgorICAgICAgICAKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dExheW91dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGluZU9yUGF0aCk6IERvIGEgc2luZ2xlIHBh
dGgKKyAgICAgICAgdHJhdmVyc2FsIHRvIGdldCB0aGUgcG9zaXRpb24gYW5kIHRoZSBhbmdsZSBm
b3IgYSBsZW5ndGggb24gYSBwYXRoLgorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQ6OmJ1aWxkVHJhbnNmb3JtRm9yUHJvZ3Jlc3MpOiBEbyBhIHNpbmdsZQorICAgICAgICBw
YXRoIHRyYXZlcnNhbCB0byBnZXQgdGhlIHBvc2l0aW9uIGFuZCB0aGUgYW5nbGUgYXQgYSBsZW5n
dGggb24gYSBwYXRoLgorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFRyYXZlcnNhbFN0
YXRlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVC
dWlsZGVyOjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpsaW5lVG8pOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y3VydmVUb0N1YmljKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmNsb3NlUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpjb250aW51ZUNvbnN1
bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpp
bmNyZW1lbnRQYXRoU2VnbWVudENvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnBhdGhTZWdtZW50SW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAqIHN2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpwYXRoU2VnbWVudEluZGV4KTog
Q29kZSBjbGVhbiB1cC4KKyAgICAgICAgCisgICAgICAgICogc3ZnL1NWR1BhdGhVdGlsaXRpZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UG9pbnRBdExlbmd0aE9mU1ZHUGF0aEJ5dGVTdHJl
YW0pOiBJbml0aWFsaXplIFBhdGhUcmF2ZXJzYWxTdGF0ZQorICAgICAgICBwcm9wZXJseSBmb3Ig
U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci4KKwogMjAxNS0wNC0wOCAgUGVyIEFybmUgVm9s
bGFuICA8cGVhdm9Ab3V0bG9vay5jb20+CiAKICAgICAgICAgW0N1cmxdIENvbXBpbGUgZXJyb3Ig
aW4gQ3VybENhY2hlRW50cnk6OnBhcnNlUmVzcG9uc2VIZWFkZXJzIG1ldGhvZC4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCShyZXZpc2lvbiAxODIzNDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIsMjkgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIHZvaWQg
cGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbih2b2lkKiBpbmZvLCBjb25zdCBQYXRoRWxlbWVudCog
ZWxlbWVudCkKIHsKICAgICBQYXRoVHJhdmVyc2FsU3RhdGUmIHRyYXZlcnNhbFN0YXRlID0gKnN0
YXRpY19jYXN0PFBhdGhUcmF2ZXJzYWxTdGF0ZSo+KGluZm8pOwotICAgIGlmICh0cmF2ZXJzYWxT
dGF0ZS5tX3N1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFBvaW50KiBwb2ludHMg
PSBlbGVtZW50LT5wb2ludHM7Ci0gICAgZmxvYXQgc2VnbWVudExlbmd0aCA9IDA7Ci0gICAgc3dp
dGNoIChlbGVtZW50LT50eXBlKSB7Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1lbnRNb3ZlVG9Qb2lu
dDoKLSAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5tb3ZlVG8ocG9p
bnRzWzBdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRk
TGluZVRvUG9pbnQ6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUu
bGluZVRvKHBvaW50c1swXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQYXRo
RWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0g
dHJhdmVyc2FsU3RhdGUucXVhZHJhdGljQmV6aWVyVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9p
bnQ6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUuY3ViaWNCZXpp
ZXJUbyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOgotICAgICAgICAgICAgc2Vn
bWVudExlbmd0aCA9IHRyYXZlcnNhbFN0YXRlLmNsb3NlU3VicGF0aCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIHRyYXZlcnNhbFN0YXRlLm1fdG90YWxMZW5ndGggKz0gc2VnbWVu
dExlbmd0aDsgCi0gICAgdHJhdmVyc2FsU3RhdGUucHJvY2Vzc1NlZ21lbnQoKTsKKyAgICB0cmF2
ZXJzYWxTdGF0ZS5wcm9jZXNzUGF0aEVsZW1lbnQoZWxlbWVudCk7CiB9CiAKIGZsb2F0IFBhdGg6
Omxlbmd0aCgpIGNvbnN0CkBAIC03NCwyMiArNTIsMjIgQEAgZmxvYXQgUGF0aDo6bGVuZ3RoKCkg
Y29uc3QKICAgICByZXR1cm4gdHJhdmVyc2FsU3RhdGUubV90b3RhbExlbmd0aDsKIH0KIAotRmxv
YXRQb2ludCBQYXRoOjpwb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0
CitQYXRoVHJhdmVyc2FsU3RhdGUgUGF0aDo6dHJhdmVyc2FsU3RhdGVBdExlbmd0aChmbG9hdCBs
ZW5ndGgsIGJvb2wmIG9rKSBjb25zdAogewotICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJz
YWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNhbFBvaW50QXRMZW5ndGgpOwotICAg
IHRyYXZlcnNhbFN0YXRlLm1fZGVzaXJlZExlbmd0aCA9IGxlbmd0aDsKKyAgICBQYXRoVHJhdmVy
c2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxWZWN0
b3JBdExlbmd0aCwgbGVuZ3RoKTsKICAgICBhcHBseSgmdHJhdmVyc2FsU3RhdGUsIHBhdGhMZW5n
dGhBcHBsaWVyRnVuY3Rpb24pOwogICAgIG9rID0gdHJhdmVyc2FsU3RhdGUubV9zdWNjZXNzOwot
ICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0ZS5tX2N1cnJlbnQ7CisgICAgcmV0dXJuIHRyYXZlcnNh
bFN0YXRlOworfQorCitGbG9hdFBvaW50IFBhdGg6OnBvaW50QXRMZW5ndGgoZmxvYXQgbGVuZ3Ro
LCBib29sJiBvaykgY29uc3QKK3sKKyAgICByZXR1cm4gdHJhdmVyc2FsU3RhdGVBdExlbmd0aChs
ZW5ndGgsIG9rKS5tX2N1cnJlbnQ7CiB9CiAKIGZsb2F0IFBhdGg6Om5vcm1hbEFuZ2xlQXRMZW5n
dGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3QKIHsKLSAgICBQYXRoVHJhdmVyc2FsU3Rh
dGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxOb3JtYWxBbmds
ZUF0TGVuZ3RoKTsKLSAgICB0cmF2ZXJzYWxTdGF0ZS5tX2Rlc2lyZWRMZW5ndGggPSBsZW5ndGgg
PyBsZW5ndGggOiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpOwotICAgIGFw
cGx5KCZ0cmF2ZXJzYWxTdGF0ZSwgcGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbik7Ci0gICAgb2sg
PSB0cmF2ZXJzYWxTdGF0ZS5tX3N1Y2Nlc3M7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRlLm1f
bm9ybWFsQW5nbGU7CisgICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRlQXRMZW5ndGgobGVuZ3RoLCBv
aykubV9ub3JtYWxBbmdsZTsKIH0KIAogdm9pZCBQYXRoOjphZGRSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSwgUm91bmRlZFJl
Y3RTdHJhdGVneSBzdHJhdGVneSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoLmgJKHJldmlzaW9uIDE4MjM0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKICAgICBjbGFzcyBGbG9hdFNp
emU7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OworICAgIGNsYXNzIFBhdGhUcmF2ZXJzYWxT
dGF0ZTsKICAgICBjbGFzcyBSb3VuZGVkUmVjdDsKICAgICBjbGFzcyBTdHJva2VTdHlsZUFwcGxp
ZXI7CiAKQEAgLTEwMCwxMCArMTAxLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
RmxvYXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwogICAgICAgICBGbG9hdFJlY3QgZmFzdEJv
dW5kaW5nUmVjdCgpIGNvbnN0OwogICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdSZWN0
KFN0cm9rZVN0eWxlQXBwbGllciogPSAwKSBjb25zdDsKLSAgICAgICAgCisKICAgICAgICAgZmxv
YXQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnRBdExlbmd0aChmbG9h
dCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKLSAgICAgICAgZmxvYXQgbm9ybWFsQW5nbGVBdExl
bmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKKyAgICAgICAgUGF0aFRyYXZlcnNh
bFN0YXRlIHRyYXZlcnNhbFN0YXRlQXRMZW5ndGgoZmxvYXQsIGJvb2wmKSBjb25zdDsKKyAgICAg
ICAgRmxvYXRQb2ludCBwb2ludEF0TGVuZ3RoKGZsb2F0LCBib29sJikgY29uc3Q7CisgICAgICAg
IGZsb2F0IG5vcm1hbEFuZ2xlQXRMZW5ndGgoZmxvYXQsIGJvb2wmKSBjb25zdDsKIAogICAgICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgICAgIGJvb2wgaXNOdWxsKCkgY29u
c3QgeyByZXR1cm4gIW1fcGF0aDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCShyZXZpc2lvbiAxODIz
NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3Rh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw5IEBAIHN0YXRpYyBpbmxpbmUgRmxv
YXRQb2ludCBtaWRQb2ludChjb25zdCAKIAogc3RhdGljIGlubGluZSBmbG9hdCBkaXN0YW5jZUxp
bmUoY29uc3QgRmxvYXRQb2ludCYgc3RhcnQsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZCkKIHsKLSAg
ICByZXR1cm4gc3FydGYoKGVuZC54KCkgLSBzdGFydC54KCkpICogKGVuZC54KCkgLSBzdGFydC54
KCkpICsgKGVuZC55KCkgLSBzdGFydC55KCkpICogKGVuZC55KCkgLSBzdGFydC55KCkpKTsKKyAg
ICBmbG9hdCBkeCA9IGVuZC54KCkgLSBzdGFydC54KCk7CisgICAgZmxvYXQgZHkgPSBlbmQueSgp
IC0gc3RhcnQueSgpOworICAgIHJldHVybiBzcXJ0ZihkeCAqIGR4ICsgZHkgKiBkeSk7CiB9CiAK
IHN0cnVjdCBRdWFkcmF0aWNCZXppZXIgewpAQCAtMTE0LDExMCArMTE2LDE0OCBAQCBzdHJ1Y3Qg
Q3ViaWNCZXppZXIgewogLy8gQW5vdGhlciBjaGVjayB3aGljaCBpcyBwb3NzaWJsZSB1cC1mcm9u
dCAodG8gc2VuZCB1cyBkb3duIHRoZSBmYXN0IHBhdGgpIHdvdWxkIGJlIHRvIGNoZWNrIGlmCiAv
LyBhcHByb3hpbWF0ZURpc3RhbmNlKCkgKyBjdXJyZW50IHRvdGFsIGRpc3RhbmNlID4gZGVzaXJl
ZCBkaXN0YW5jZQogdGVtcGxhdGU8Y2xhc3MgQ3VydmVUeXBlPgotc3RhdGljIGZsb2F0IGN1cnZl
TGVuZ3RoKFBhdGhUcmF2ZXJzYWxTdGF0ZSYgdHJhdmVyc2FsU3RhdGUsIEN1cnZlVHlwZSBjdXJ2
ZSkKK3N0YXRpYyBmbG9hdCBjdXJ2ZUxlbmd0aChQYXRoVHJhdmVyc2FsU3RhdGUmIHRyYXZlcnNh
bFN0YXRlLCBjb25zdCBDdXJ2ZVR5cGUmIGVsZW1lbnRDdXJ2ZSkKIHsKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgY3VydmVTdGFja0RlcHRoTGltaXQgPSAyMDsKLQotICAgIFZlY3RvcjxDdXJ2
ZVR5cGU+IGN1cnZlU3RhY2s7Ci0gICAgY3VydmVTdGFjay5hcHBlbmQoY3VydmUpOwotCisgICAg
Q3VydmVUeXBlIGN1cnZlID0gZWxlbWVudEN1cnZlOworICAgIFZlY3RvcjxDdXJ2ZVR5cGUsIGN1
cnZlU3RhY2tEZXB0aExpbWl0PiBjdXJ2ZVN0YWNrOwogICAgIGZsb2F0IHRvdGFsTGVuZ3RoID0g
MDsKLSAgICBkbyB7CisKKyAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBmbG9hdCBsZW5ndGgg
PSBjdXJ2ZS5hcHByb3hpbWF0ZURpc3RhbmNlKCk7Ci0gICAgICAgIGlmICgobGVuZ3RoIC0gZGlz
dGFuY2VMaW5lKGN1cnZlLnN0YXJ0LCBjdXJ2ZS5lbmQpKSA+IGtQYXRoU2VnbWVudExlbmd0aFRv
bGVyYW5jZSAmJiBjdXJ2ZVN0YWNrLnNpemUoKSA8PSBjdXJ2ZVN0YWNrRGVwdGhMaW1pdCkgewor
CisgICAgICAgIGlmICgobGVuZ3RoIC0gZGlzdGFuY2VMaW5lKGN1cnZlLnN0YXJ0LCBjdXJ2ZS5l
bmQpKSA+IGtQYXRoU2VnbWVudExlbmd0aFRvbGVyYW5jZSAmJiBjdXJ2ZVN0YWNrLnNpemUoKSA8
IGN1cnZlU3RhY2tEZXB0aExpbWl0KSB7CiAgICAgICAgICAgICBDdXJ2ZVR5cGUgbGVmdEN1cnZl
OwogICAgICAgICAgICAgQ3VydmVUeXBlIHJpZ2h0Q3VydmU7CiAgICAgICAgICAgICBjdXJ2ZS5z
cGxpdChsZWZ0Q3VydmUsIHJpZ2h0Q3VydmUpOwogICAgICAgICAgICAgY3VydmUgPSBsZWZ0Q3Vy
dmU7CiAgICAgICAgICAgICBjdXJ2ZVN0YWNrLmFwcGVuZChyaWdodEN1cnZlKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aDsKLSAgICAgICAgICAg
IGlmICh0cmF2ZXJzYWxTdGF0ZS5tX2FjdGlvbiA9PSBQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZl
cnNhbFBvaW50QXRMZW5ndGgKLSAgICAgICAgICAgICB8fCB0cmF2ZXJzYWxTdGF0ZS5tX2FjdGlv
biA9PSBQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNhbE5vcm1hbEFuZ2xlQXRMZW5ndGgpIHsK
LSAgICAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5tX3ByZXZpb3VzID0gY3VydmUuc3RhcnQ7
Ci0gICAgICAgICAgICAgICAgdHJhdmVyc2FsU3RhdGUubV9jdXJyZW50ID0gY3VydmUuZW5kOwot
ICAgICAgICAgICAgICAgIGlmICh0cmF2ZXJzYWxTdGF0ZS5tX3RvdGFsTGVuZ3RoICsgdG90YWxM
ZW5ndGggPiB0cmF2ZXJzYWxTdGF0ZS5tX2Rlc2lyZWRMZW5ndGgpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0b3RhbExlbmd0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnZl
ID0gY3VydmVTdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICBjdXJ2ZVN0YWNrLnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgfSB3aGlsZSAoIWN1cnZl
U3RhY2suaXNFbXB0eSgpKTsKLSAgICAKKworICAgICAgICB0b3RhbExlbmd0aCArPSBsZW5ndGg7
CisgICAgICAgIGlmICh0cmF2ZXJzYWxTdGF0ZS5tX2FjdGlvbiA9PSBQYXRoVHJhdmVyc2FsU3Rh
dGU6OlRyYXZlcnNhbFZlY3RvckF0TGVuZ3RoKSB7CisgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0
ZS5tX3ByZXZpb3VzID0gY3VydmUuc3RhcnQ7CisgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5t
X2N1cnJlbnQgPSBjdXJ2ZS5lbmQ7CisgICAgICAgICAgICBpZiAodHJhdmVyc2FsU3RhdGUubV90
b3RhbExlbmd0aCArIHRvdGFsTGVuZ3RoID4gdHJhdmVyc2FsU3RhdGUubV9kZXNpcmVkTGVuZ3Ro
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1cnZl
U3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY3VydmUgPSBj
dXJ2ZVN0YWNrLmxhc3QoKTsKKyAgICAgICAgY3VydmVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAg
fQorCisgICAgaWYgKHRyYXZlcnNhbFN0YXRlLm1fYWN0aW9uICE9IFBhdGhUcmF2ZXJzYWxTdGF0
ZTo6VHJhdmVyc2FsVmVjdG9yQXRMZW5ndGgpIHsKKyAgICAgICAgQVNTRVJUKGN1cnZlLmVuZCA9
PSBlbGVtZW50Q3VydmUuZW5kKTsKKyAgICAgICAgdHJhdmVyc2FsU3RhdGUubV9wcmV2aW91cyA9
IGN1cnZlLnN0YXJ0OworICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5tX2N1cnJlbnQgPSBjdXJ2ZS5l
bmQ7CisgICAgfQorCiAgICAgcmV0dXJuIHRvdGFsTGVuZ3RoOwogfQogCi1QYXRoVHJhdmVyc2Fs
U3RhdGU6OlBhdGhUcmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsQWN0aW9uIGFjdGlvbikKK1Bh
dGhUcmF2ZXJzYWxTdGF0ZTo6UGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxBY3Rpb24g
YWN0aW9uLCBmbG9hdCBkZXNpcmVkTGVuZ3RoKQogICAgIDogbV9hY3Rpb24oYWN0aW9uKQotICAg
ICwgbV9zdWNjZXNzKGZhbHNlKQotICAgICwgbV90b3RhbExlbmd0aCgwKQotICAgICwgbV9zZWdt
ZW50SW5kZXgoMCkKLSAgICAsIG1fZGVzaXJlZExlbmd0aCgwKQotICAgICwgbV9ub3JtYWxBbmds
ZSgwKQorICAgICwgbV9kZXNpcmVkTGVuZ3RoKGRlc2lyZWRMZW5ndGgpCiB7CiB9CiAKLWZsb2F0
IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6Y2xvc2VTdWJwYXRoKCkKK3ZvaWQgUGF0aFRyYXZlcnNhbFN0
YXRlOjpjbG9zZVN1YnBhdGgoKQogewotICAgIGZsb2F0IGRpc3RhbmNlID0gZGlzdGFuY2VMaW5l
KG1fY3VycmVudCwgbV9zdGFydCk7Ci0gICAgbV9jdXJyZW50ID0gbV9jb250cm9sMSA9IG1fY29u
dHJvbDIgPSBtX3N0YXJ0OwotICAgIHJldHVybiBkaXN0YW5jZTsKKyAgICBtX3RvdGFsTGVuZ3Ro
ICs9IGRpc3RhbmNlTGluZShtX2N1cnJlbnQsIG1fc3RhcnQpOworICAgIG1fY3VycmVudCA9IG1f
c3RhcnQ7CiB9CiAKLWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6bW92ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KQordm9pZCBQYXRoVHJhdmVyc2FsU3RhdGU6Om1vdmVUbyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKIHsKLSAgICBtX2N1cnJlbnQgPSBtX3N0YXJ0ID0gbV9jb250cm9sMSA9
IG1fY29udHJvbDIgPSBwb2ludDsKLSAgICByZXR1cm4gMDsKKyAgICBtX3ByZXZpb3VzID0gbV9j
dXJyZW50ID0gbV9zdGFydCA9IHBvaW50OwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6
OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aFRyYXZlcnNhbFN0YXRl
OjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgZmxvYXQgZGlzdGFuY2Ug
PSBkaXN0YW5jZUxpbmUobV9jdXJyZW50LCBwb2ludCk7Ci0gICAgbV9jdXJyZW50ID0gbV9jb250
cm9sMSA9IG1fY29udHJvbDIgPSBwb2ludDsKLSAgICByZXR1cm4gZGlzdGFuY2U7CisgICAgbV90
b3RhbExlbmd0aCArPSBkaXN0YW5jZUxpbmUobV9jdXJyZW50LCBwb2ludCk7CisgICAgbV9jdXJy
ZW50ID0gcG9pbnQ7CiB9CiAKLWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cXVhZHJhdGljQmV6
aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbCwgY29uc3QgRmxvYXRQb2ludCYgbmV3
RW5kKQordm9pZCBQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKGNvbnN0IEZs
b2F0UG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCkKIHsKLSAgICBm
bG9hdCBkaXN0YW5jZSA9IGN1cnZlTGVuZ3RoPFF1YWRyYXRpY0Jlemllcj4oKnRoaXMsIFF1YWRy
YXRpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRyb2wsIG5ld0VuZCkpOwotCi0gICAgbV9jb250
cm9sMSA9IG5ld0NvbnRyb2w7Ci0gICAgbV9jb250cm9sMiA9IG5ld0VuZDsKLQotICAgIGlmICht
X2FjdGlvbiAhPSBUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoICYmIG1fYWN0aW9uICE9IFRyYXZlcnNh
bE5vcm1hbEFuZ2xlQXRMZW5ndGgpIAotICAgICAgICBtX2N1cnJlbnQgPSBuZXdFbmQ7CisgICAg
bV90b3RhbExlbmd0aCArPSBjdXJ2ZUxlbmd0aDxRdWFkcmF0aWNCZXppZXI+KCp0aGlzLCBRdWFk
cmF0aWNCZXppZXIobV9jdXJyZW50LCBuZXdDb250cm9sLCBuZXdFbmQpKTsKK30KIAotICAgIHJl
dHVybiBkaXN0YW5jZTsKK3ZvaWQgUGF0aFRyYXZlcnNhbFN0YXRlOjpjdWJpY0JlemllclRvKGNv
bnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wxLCBjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9s
MiwgY29uc3QgRmxvYXRQb2ludCYgbmV3RW5kKQoreworICAgIG1fdG90YWxMZW5ndGggKz0gY3Vy
dmVMZW5ndGg8Q3ViaWNCZXppZXI+KCp0aGlzLCBDdWJpY0JlemllcihtX2N1cnJlbnQsIG5ld0Nv
bnRyb2wxLCBuZXdDb250cm9sMiwgbmV3RW5kKSk7CiB9CiAKLWZsb2F0IFBhdGhUcmF2ZXJzYWxT
dGF0ZTo6Y3ViaWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sMSwgY29uc3Qg
RmxvYXRQb2ludCYgbmV3Q29udHJvbDIsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCkKK2Jvb2wg
UGF0aFRyYXZlcnNhbFN0YXRlOjpmaW5hbGl6ZUFwcGVuZFBhdGhFbGVtZW50KCkKIHsKLSAgICBm
bG9hdCBkaXN0YW5jZSA9IGN1cnZlTGVuZ3RoPEN1YmljQmV6aWVyPigqdGhpcywgQ3ViaWNCZXpp
ZXIobV9jdXJyZW50LCBuZXdDb250cm9sMSwgbmV3Q29udHJvbDIsIG5ld0VuZCkpOworICAgIGlm
IChtX2FjdGlvbiA9PSBUcmF2ZXJzYWxUb3RhbExlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgbV9jb250cm9sMSA9IG5ld0VuZDsKLSAgICBtX2NvbnRyb2wyID0gbmV3Q29udHJv
bDI7Ci0gCi0gICAgaWYgKG1fYWN0aW9uICE9IFRyYXZlcnNhbFBvaW50QXRMZW5ndGggJiYgbV9h
Y3Rpb24gIT0gVHJhdmVyc2FsTm9ybWFsQW5nbGVBdExlbmd0aCkgCi0gICAgICAgIG1fY3VycmVu
dCA9IG5ld0VuZDsKKyAgICBpZiAobV9hY3Rpb24gPT0gVHJhdmVyc2FsU2VnbWVudEF0TGVuZ3Ro
KSB7CisgICAgICAgIGlmIChtX3RvdGFsTGVuZ3RoID49IG1fZGVzaXJlZExlbmd0aCkKKyAgICAg
ICAgICAgIG1fc3VjY2VzcyA9IHRydWU7CisgICAgICAgIHJldHVybiBtX3N1Y2Nlc3M7CisgICAg
fQogCi0gICAgcmV0dXJuIGRpc3RhbmNlOwotfQorICAgIEFTU0VSVChtX2FjdGlvbiA9PSBUcmF2
ZXJzYWxWZWN0b3JBdExlbmd0aCk7CiAKLXZvaWQgUGF0aFRyYXZlcnNhbFN0YXRlOjpwcm9jZXNz
U2VnbWVudCgpCi17Ci0gICAgaWYgKG1fYWN0aW9uID09IFRyYXZlcnNhbFNlZ21lbnRBdExlbmd0
aCAmJiBtX3RvdGFsTGVuZ3RoID49IG1fZGVzaXJlZExlbmd0aCkKLSAgICAgICAgbV9zdWNjZXNz
ID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgaWYgKChtX2FjdGlvbiA9PSBUcmF2ZXJzYWxQb2ludEF0
TGVuZ3RoIHx8IG1fYWN0aW9uID09IFRyYXZlcnNhbE5vcm1hbEFuZ2xlQXRMZW5ndGgpICYmIG1f
dG90YWxMZW5ndGggPj0gbV9kZXNpcmVkTGVuZ3RoKSB7CisgICAgaWYgKG1fdG90YWxMZW5ndGgg
Pj0gbV9kZXNpcmVkTGVuZ3RoKSB7CiAgICAgICAgIGZsb2F0IHNsb3BlID0gRmxvYXRQb2ludCht
X2N1cnJlbnQgLSBtX3ByZXZpb3VzKS5zbG9wZUFuZ2xlUmFkaWFucygpOwotICAgICAgICBpZiAo
bV9hY3Rpb24gPT0gVHJhdmVyc2FsUG9pbnRBdExlbmd0aCkgewotICAgICAgICAgICAgZmxvYXQg
b2Zmc2V0ID0gbV9kZXNpcmVkTGVuZ3RoIC0gbV90b3RhbExlbmd0aDsKLSAgICAgICAgICAgIG1f
Y3VycmVudC5tb3ZlKG9mZnNldCAqIGNvc2Yoc2xvcGUpLCBvZmZzZXQgKiBzaW5mKHNsb3BlKSk7
Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBmbG9hdCBvZmZzZXQgPSBtX2Rlc2lyZWRMZW5ndGgg
LSBtX3RvdGFsTGVuZ3RoOworICAgICAgICBtX2N1cnJlbnQubW92ZShvZmZzZXQgKiBjb3NmKHNs
b3BlKSwgb2Zmc2V0ICogc2luZihzbG9wZSkpOworCisgICAgICAgIGlmICghbV96ZXJvVmVjdG9y
ICYmICFtX2Rlc2lyZWRMZW5ndGgpCisgICAgICAgICAgICBtX3plcm9WZWN0b3IgPSB0cnVlOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fc3VjY2VzcyA9IHRydWU7CiAgICAgICAgICAg
ICBtX25vcm1hbEFuZ2xlID0gcmFkMmRlZyhzbG9wZSk7Ci0gICAgICAgIG1fc3VjY2VzcyA9IHRy
dWU7CisgICAgICAgIH0KICAgICB9CisKICAgICBtX3ByZXZpb3VzID0gbV9jdXJyZW50OworICAg
IHJldHVybiBtX3N1Y2Nlc3M7Cit9CisKK2Jvb2wgUGF0aFRyYXZlcnNhbFN0YXRlOjphcHBlbmRQ
YXRoRWxlbWVudChQYXRoRWxlbWVudFR5cGUgdHlwZSwgY29uc3QgRmxvYXRQb2ludCogcG9pbnRz
KQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgUGF0aEVsZW1lbnRNb3ZlVG9Qb2lu
dDoKKyAgICAgICAgbW92ZVRvKHBvaW50c1swXSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDoKKyAgICAgICAgbGluZVRvKHBvaW50c1swXSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50Ogor
ICAgICAgICBxdWFkcmF0aWNCZXppZXJUbyhwb2ludHNbMF0sIHBvaW50c1sxXSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQ6CisgICAgICAgIGN1
YmljQmV6aWVyVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGg6CisgICAgICAgIGNsb3NlU3Vi
cGF0aCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZpbmFsaXpl
QXBwZW5kUGF0aEVsZW1lbnQoKTsKK30KKworYm9vbCBQYXRoVHJhdmVyc2FsU3RhdGU6OnByb2Nl
c3NQYXRoRWxlbWVudChQYXRoRWxlbWVudFR5cGUgdHlwZSwgY29uc3QgRmxvYXRQb2ludCogcG9p
bnRzKQoreworICAgIGlmIChtX3N1Y2Nlc3MpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKG1femVyb1ZlY3RvcikgeworICAgICAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2Fs
U3RhdGUoKnRoaXMpOworICAgICAgICBtX3N1Y2Nlc3MgPSB0cmF2ZXJzYWxTdGF0ZS5hcHBlbmRQ
YXRoRWxlbWVudCh0eXBlLCBwb2ludHMpOworICAgICAgICBtX25vcm1hbEFuZ2xlID0gdHJhdmVy
c2FsU3RhdGUubV9ub3JtYWxBbmdsZTsKKyAgICAgICAgcmV0dXJuIG1fc3VjY2VzczsKKyAgICB9
CisKKyAgICByZXR1cm4gYXBwZW5kUGF0aEVsZW1lbnQodHlwZSwgcG9pbnRzKTsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRy
YXZlcnNhbFN0YXRlLmgJKHJldmlzaW9uIDE4MjM0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAjZGVmaW5lIFBhdGhUcmF2ZXJzYWxTdGF0ZV9oCiAKICNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCisjaW5jbHVkZSAiUGF0aC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM0LDM4ICszNSw0MSBAQCBjbGFzcyBQYXRoVHJhdmVyc2FsU3RhdGUgewogcHVibGljOgogICAg
IGVudW0gUGF0aFRyYXZlcnNhbEFjdGlvbiB7CiAgICAgICAgIFRyYXZlcnNhbFRvdGFsTGVuZ3Ro
LAotICAgICAgICBUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoLAorICAgICAgICBUcmF2ZXJzYWxWZWN0
b3JBdExlbmd0aCwKICAgICAgICAgVHJhdmVyc2FsU2VnbWVudEF0TGVuZ3RoLAotICAgICAgICBU
cmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoCiAgICAgfTsKIAotICAgIFBhdGhUcmF2ZXJzYWxT
dGF0ZShQYXRoVHJhdmVyc2FsQWN0aW9uKTsKKyAgICBQYXRoVHJhdmVyc2FsU3RhdGUoUGF0aFRy
YXZlcnNhbEFjdGlvbiwgZmxvYXQgPSAwKTsKIAotICAgIGZsb2F0IGNsb3NlU3VicGF0aCgpOwot
ICAgIGZsb2F0IG1vdmVUbyhjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgZmxvYXQgbGluZVRvKGNv
bnN0IEZsb2F0UG9pbnQmKTsKLSAgICBmbG9hdCBxdWFkcmF0aWNCZXppZXJUbyhjb25zdCBGbG9h
dFBvaW50JiBuZXdDb250cm9sLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQpOwotICAgIGZsb2F0
IGN1YmljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDEsIGNvbnN0IEZsb2F0
UG9pbnQmIG5ld0NvbnRyb2wyLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQpOwotICAgIAotICAg
IHZvaWQgcHJvY2Vzc1NlZ21lbnQoKTsKK3ByaXZhdGU6CisgICAgdm9pZCBjbG9zZVN1YnBhdGgo
KTsKKyAgICB2b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBsaW5lVG8o
Y29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgcXVhZHJhdGljQmV6aWVyVG8oY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIGN1YmljQmV6aWVyVG8oY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisK
KyAgICBib29sIGZpbmFsaXplQXBwZW5kUGF0aEVsZW1lbnQoKTsKKyAgICBib29sIGFwcGVuZFBh
dGhFbGVtZW50KFBhdGhFbGVtZW50VHlwZSwgY29uc3QgRmxvYXRQb2ludCopOworCitwdWJsaWM6
CisgICAgYm9vbCBwcm9jZXNzUGF0aEVsZW1lbnQoUGF0aEVsZW1lbnRUeXBlLCBjb25zdCBGbG9h
dFBvaW50Kik7CisgICAgYm9vbCBwcm9jZXNzUGF0aEVsZW1lbnQoY29uc3QgUGF0aEVsZW1lbnQq
IGVsZW1lbnQpIHsgcmV0dXJuIHByb2Nlc3NQYXRoRWxlbWVudChlbGVtZW50LT50eXBlLCBlbGVt
ZW50LT5wb2ludHMpOyB9CiAKIHB1YmxpYzoKICAgICBQYXRoVHJhdmVyc2FsQWN0aW9uIG1fYWN0
aW9uOwotICAgIGJvb2wgbV9zdWNjZXNzOworICAgIGJvb2wgbV9zdWNjZXNzIHsgZmFsc2UgfTsK
IAogICAgIEZsb2F0UG9pbnQgbV9jdXJyZW50OwogICAgIEZsb2F0UG9pbnQgbV9zdGFydDsKLSAg
ICBGbG9hdFBvaW50IG1fY29udHJvbDE7Ci0gICAgRmxvYXRQb2ludCBtX2NvbnRyb2wyOwogCi0g
ICAgZmxvYXQgbV90b3RhbExlbmd0aDsKLSAgICB1bnNpZ25lZCBtX3NlZ21lbnRJbmRleDsKLSAg
ICBmbG9hdCBtX2Rlc2lyZWRMZW5ndGg7CisgICAgZmxvYXQgbV90b3RhbExlbmd0aCB7IDAgfTsK
KyAgICBmbG9hdCBtX2Rlc2lyZWRMZW5ndGggeyAwIH07CiAKICAgICAvLyBGb3Igbm9ybWFsIGNh
bGN1bGF0aW9ucwogICAgIEZsb2F0UG9pbnQgbV9wcmV2aW91czsKLSAgICBmbG9hdCBtX25vcm1h
bEFuZ2xlOyAvLyBkZWdyZWVzCi19OyAgICAKKyAgICBmbG9hdCBtX25vcm1hbEFuZ2xlIHsgMCB9
OyAvLyBkZWdyZWVzCisgICAgYm9vbCBtX3plcm9WZWN0b3IgeyBmYWxzZSB9OworfTsKIH0KIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRF
bmdpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEVuZ2luZS5jcHAJKHJldmlzaW9uIDE4MjM0MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdUZXh0TGF5
b3V0RW5naW5lLmgiCiAKKyNpbmNsdWRlICJQYXRoVHJhdmVyc2FsU3RhdGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdUZXh0UGF0aC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdJbmxpbmVUZXh0Qm94LmgiCkBAIC01NTQsMTMgKzU1NSwxNCBAQCB2b2lkIFNWR1RleHRM
YXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQg
PSBtX3RleHRQYXRoLnBvaW50QXRMZW5ndGgodGV4dFBhdGhPZmZzZXQsIG9rKTsKKyAgICAgICAg
ICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShtX3RleHRQYXRoLnRyYXZlcnNh
bFN0YXRlQXRMZW5ndGgodGV4dFBhdGhPZmZzZXQsIG9rKSk7CiAgICAgICAgICAgICBBU1NFUlQo
b2spOwogCisgICAgICAgICAgICBGbG9hdFBvaW50IHBvaW50ID0gdHJhdmVyc2FsU3RhdGUubV9j
dXJyZW50OwogICAgICAgICAgICAgeCA9IHBvaW50LngoKTsKICAgICAgICAgICAgIHkgPSBwb2lu
dC55KCk7Ci0gICAgICAgICAgICBhbmdsZSA9IG1fdGV4dFBhdGgubm9ybWFsQW5nbGVBdExlbmd0
aCh0ZXh0UGF0aE9mZnNldCwgb2spOwotICAgICAgICAgICAgQVNTRVJUKG9rKTsKKworICAgICAg
ICAgICAgYW5nbGUgPSB0cmF2ZXJzYWxTdGF0ZS5tX25vcm1hbEFuZ2xlOwogCiAgICAgICAgICAg
ICAvLyBGb3IgdmVydGljYWwgdGV4dCBvbiBwYXRoLCB0aGUgYWN0dWFsIGFuZ2xlIGhhcyB0byBi
ZSByb3RhdGVkIDkwIGRlZ3JlZXMgYW50aS1jbG9ja3dpc2UsIG5vdCB0aGUgb3JpZW50YXRpb24g
YW5nbGUhCiAgICAgICAgICAgICBpZiAobV9pc1ZlcnRpY2FsVGV4dCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTgy
MzQxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUGF0aFRyYXZl
cnNhbFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJT
VkdJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdNUGF0aEVsZW1lbnQuaCIKQEAgLTIxNCwx
NCArMjE1LDE4IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmJ1aWxkVHJhbnMKIAog
ICAgIGJvb2wgb2sgPSBmYWxzZTsKICAgICBmbG9hdCBwb3NpdGlvbk9uUGF0aCA9IG1fYW5pbWF0
aW9uUGF0aC5sZW5ndGgoKSAqIHBlcmNlbnRhZ2U7Ci0gICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9
IG1fYW5pbWF0aW9uUGF0aC5wb2ludEF0TGVuZ3RoKHBvc2l0aW9uT25QYXRoLCBvayk7CisKKyAg
ICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUobV9hbmltYXRpb25QYXRoLnRyYXZl
cnNhbFN0YXRlQXRMZW5ndGgocG9zaXRpb25PblBhdGgsIG9rKSk7CiAgICAgaWYgKCFvaykKICAg
ICAgICAgcmV0dXJuOworCisgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IHRyYXZlcnNhbFN0YXRl
Lm1fY3VycmVudDsKKyAgICBmbG9hdCBhbmdsZSA9IHRyYXZlcnNhbFN0YXRlLm1fbm9ybWFsQW5n
bGU7CisKICAgICB0cmFuc2Zvcm0tPnRyYW5zbGF0ZShwb3NpdGlvbi54KCksIHBvc2l0aW9uLnko
KSk7CiAgICAgUm90YXRlTW9kZSByb3RhdGVNb2RlID0gdGhpcy0+cm90YXRlTW9kZSgpOwogICAg
IGlmIChyb3RhdGVNb2RlICE9IFJvdGF0ZUF1dG8gJiYgcm90YXRlTW9kZSAhPSBSb3RhdGVBdXRv
UmV2ZXJzZSkKICAgICAgICAgcmV0dXJuOwotICAgIGZsb2F0IGFuZ2xlID0gbV9hbmltYXRpb25Q
YXRoLm5vcm1hbEFuZ2xlQXRMZW5ndGgocG9zaXRpb25PblBhdGgsIG9rKTsKICAgICBpZiAocm90
YXRlTW9kZSA9PSBSb3RhdGVBdXRvUmV2ZXJzZSkKICAgICAgICAgYW5nbGUgKz0gMTgwOwogICAg
IHRyYW5zZm9ybS0+cm90YXRlKGFuZ2xlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5jcHAJKHJldmlzaW9uIDE4MjM0MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksMzEgKzI5LDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRl
cigpCiAgICAgOiBtX3RyYXZlcnNhbFN0YXRlKDApCisgICAgLCBtX3NlZ21lbnRJbmRleCgwKQog
ewogfQogCiB2b2lkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6Om1vdmVUbyhjb25zdCBG
bG9hdFBvaW50JiB0YXJnZXRQb2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2RlKQogewogICAg
IEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKLSAgICBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFs
TGVuZ3RoICs9IG1fdHJhdmVyc2FsU3RhdGUtPm1vdmVUbyh0YXJnZXRQb2ludCk7CisgICAgbV90
cmF2ZXJzYWxTdGF0ZS0+cHJvY2Vzc1BhdGhFbGVtZW50KFBhdGhFbGVtZW50TW92ZVRvUG9pbnQs
ICZ0YXJnZXRQb2ludCk7CiB9CiAKIHZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6
bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUp
CiB7CiAgICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwotICAgIG1fdHJhdmVyc2FsU3RhdGUt
Pm1fdG90YWxMZW5ndGggKz0gbV90cmF2ZXJzYWxTdGF0ZS0+bGluZVRvKHRhcmdldFBvaW50KTsK
KyAgICBtX3RyYXZlcnNhbFN0YXRlLT5wcm9jZXNzUGF0aEVsZW1lbnQoUGF0aEVsZW1lbnRBZGRM
aW5lVG9Qb2ludCwgJnRhcmdldFBvaW50KTsKIH0KIAogdm9pZCBTVkdQYXRoVHJhdmVyc2FsU3Rh
dGVCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29v
cmRpbmF0ZU1vZGUpCiB7CisgICAgRmxvYXRQb2ludCBwb2ludHNbXSA9IHsgcG9pbnQxLCBwb2lu
dDIsIHRhcmdldFBvaW50IH07CiAgICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwotICAgIG1f
dHJhdmVyc2FsU3RhdGUtPm1fdG90YWxMZW5ndGggKz0gbV90cmF2ZXJzYWxTdGF0ZS0+Y3ViaWNC
ZXppZXJUbyhwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQpOworICAgIG1fdHJhdmVyc2FsU3Rh
dGUtPnByb2Nlc3NQYXRoRWxlbWVudChQYXRoRWxlbWVudEFkZEN1cnZlVG9Qb2ludCwgcG9pbnRz
KTsKIH0KIAogdm9pZCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpjbG9zZVBhdGgoKQog
ewogICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKLSAgICBtX3RyYXZlcnNhbFN0YXRlLT5t
X3RvdGFsTGVuZ3RoICs9IG1fdHJhdmVyc2FsU3RhdGUtPmNsb3NlU3VicGF0aCgpOworICAgIG1f
dHJhdmVyc2FsU3RhdGUtPnByb2Nlc3NQYXRoRWxlbWVudChQYXRoRWxlbWVudENsb3NlU3VicGF0
aCwgbnVsbHB0cik7CiB9CiAKIHZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6c2V0
RGVzaXJlZExlbmd0aChmbG9hdCBkZXNpcmVkTGVuZ3RoKQpAQCAtNjUsMjIgKzY3LDkgQEAgdm9p
ZCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpzZXREZQogYm9vbCBTVkdQYXRoVHJhdmVy
c2FsU3RhdGVCdWlsZGVyOjpjb250aW51ZUNvbnN1bWluZygpCiB7CiAgICAgQVNTRVJUKG1fdHJh
dmVyc2FsU3RhdGUpOyAgICAKLSAgICBtX3RyYXZlcnNhbFN0YXRlLT5wcm9jZXNzU2VnbWVudCgp
OwogICAgIHJldHVybiAhbV90cmF2ZXJzYWxTdGF0ZS0+bV9zdWNjZXNzOwogfQogCi12b2lkIFNW
R1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmluY3JlbWVudFBhdGhTZWdtZW50Q291bnQoKQot
ewotICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKLSAgICArK21fdHJhdmVyc2FsU3RhdGUt
Pm1fc2VnbWVudEluZGV4OwotfQotCi11bnNpZ25lZCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWls
ZGVyOjpwYXRoU2VnbWVudEluZGV4KCkKLXsKLSAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7
Ci0gICAgcmV0dXJuIG1fdHJhdmVyc2FsU3RhdGUtPm1fc2VnbWVudEluZGV4OwotfQotCiBmbG9h
dCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjp0b3RhbExlbmd0aCgpCiB7CiAgICAgQVNT
RVJUKG1fdHJhdmVyc2FsU3RhdGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhU
cmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oCShyZXZpc2lvbiAxODIzNDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiwxNSArMzIsMTUgQEAgY2xhc3MgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRl
ciA6IHB1YgogcHVibGljOgogICAgIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIoKTsKIAot
ICAgIHVuc2lnbmVkIHBhdGhTZWdtZW50SW5kZXgoKTsKKyAgICB1bnNpZ25lZCBwYXRoU2VnbWVu
dEluZGV4KCkgeyByZXR1cm4gbV9zZWdtZW50SW5kZXg7IH0KICAgICBmbG9hdCB0b3RhbExlbmd0
aCgpOwogICAgIFNWR1BvaW50IGN1cnJlbnRQb2ludCgpOwogCiAgICAgdm9pZCBzZXRDdXJyZW50
VHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlKiB0cmF2ZXJzYWxTdGF0ZSkgeyBtX3Ry
YXZlcnNhbFN0YXRlID0gdHJhdmVyc2FsU3RhdGU7IH0KICAgICB2b2lkIHNldERlc2lyZWRMZW5n
dGgoZmxvYXQpOwotICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnRQYXRoU2VnbWVudENvdW50KCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGluY3JlbWVudFBhdGhTZWdtZW50Q291bnQoKSBv
dmVycmlkZSB7ICsrbV9zZWdtZW50SW5kZXg7IH0KICAgICB2aXJ0dWFsIGJvb2wgY29udGludWVD
b25zdW1pbmcoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIG92ZXJyaWRl
IHsgbV90cmF2ZXJzYWxTdGF0ZSA9IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIG92
ZXJyaWRlIHsgbV90cmF2ZXJzYWxTdGF0ZSA9IG51bGxwdHIsIG1fc2VnbWVudEluZGV4ID0gMDsg
fQogCiBwcml2YXRlOgogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZy9Ob3JtYWxpemVk
UGFyc2luZyBtb2Rlcy4KQEAgLTU5LDYgKzU5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgYXJjVG8oZmxvYXQsIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCwgY29uc3QgRmxvYXRQb2lu
dCYsIFBhdGhDb29yZGluYXRlTW9kZSkgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogCiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlKiBtX3RyYXZlcnNhbFN0YXRlOworICAgIHVuc2ln
bmVkIG1fc2VnbWVudEluZGV4OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMTgyMzQxKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTksNyArMzE5LDcgQEAgYm9vbCBnZXRQb2ludEF0TGVuZ3RoT2ZTVkdQYXRoQnl0ZVN0
cmVhbQogICAgIGlmIChzdHJlYW0tPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0
ZTo6VHJhdmVyc2FsUG9pbnRBdExlbmd0aCk7CisgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZl
cnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsVmVjdG9yQXRMZW5ndGgpOwog
ICAgIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIqIGJ1aWxkZXIgPSBnbG9iYWxTVkdQYXRo
VHJhdmVyc2FsU3RhdGVCdWlsZGVyKHRyYXZlcnNhbFN0YXRlLCBsZW5ndGgpOwogCiAgICAgYXV0
byBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR1BhdGhCeXRlU3RyZWFtU291cmNlPihzdHJl
YW0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250400</attachid>
            <date>2015-04-08 18:34:50 -0700</date>
            <delta_ts>2015-04-09 11:13:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141570-20150408183359.patch</filename>
            <type>text/plain</type>
            <size>27900</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMyBAQAorMjAxNS0wNC0wOCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIHRleHRQYXRo
IGxheW91dCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTU3MC4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgYm90dGxlbmVjayBvZiB0aGUgdGV4dC1vbi1w
YXRoIHBlcmZvcm1hbmNlIGlzIHRoZSBwb3NpdGlvbiBhbmQgYW5nbGUKKyAgICAgICAgY2FsY3Vs
YXRpb25zIGZvciBldmVyeSBzaW5nbGUgY2hhcmFjdGVyLiBJZiB0aGUgbnVtYmVyIG9mIGNoYXJh
Y3RlcnMgaXMKKyAgICAgICAgJ24nIGFuZCB0aGUgbnVtYmVyIG9mIHBhdGggZWxlbWVudHMgaXMg
J20nLCB0aGUgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NpbmcKKyAgICAgICAgdGhlIHBhdGggZWxl
bWVudHMgaXMgTygyIHggbiB4IG0pLiBXaGF0IG1ha2VzIGl0IHJlYWxseSB3b3JzZSBpcywgZm9y
IGV2ZXJ5CisgICAgICAgIGN1cnZlIHdlIGtlZXAgc3BsaXR0aW5nIHRoZSBjdXJ2ZSB0aWxsIHRo
ZSBzcGxpdCBjdXJ2ZSBpcyBhbG1vc3QgYSBzdHJhaWdodAorICAgICAgICBsaW5lLiBUaGUgZml4
ZXMgd2UgbmVlZCB0byBkbyBhcmU6CisgICAgICAgIDEuIE1lcmdlIHRoZSBwb3NpdGlvbiBhbmQg
dGhlIGFuZ2xlIHRyYXZlcnNhbHMgc2luY2UgdGhleSBhcmUgcmV0dXJuaW5nCisgICAgICAgICAg
IGluZm8gZm9yIHRoZSBzYW1lIGxlbmd0aCBvbiB0aGUgcGF0aC4gVGhlcmUgaXMgYSBkZWdlbmVy
YXRlIGNhc2UgZm9yCisgICAgICAgICAgIHRoZSBzdGFydGluZyBwb2ludCB3aGVuIGNhbGN1bGF0
aW5nIHRoZSBhbmdsZS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzCisgICAgICAgICAgIHNvbHZpbmcg
dGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgZXBzaWxvbiBpbnN0ZWFkIG9mIHplcm8gYnV0IGJlY2F1
c2UKKyAgICAgICAgICAgdHJhdmVyc2luZyB0aGUgcGF0aCBmb3IgcG9zaXRpb24gYW5kIGFuZ2xl
IGFyZSBub3cgbWVyZ2VkLCB3ZSB3aWxsIHBhc3MKKyAgICAgICAgICAgemVybyBmb3IgdGhlIHN0
YXJ0aW5nIHBvaW50IGFzIGlzLiBBbGwgd2UgbmVlZCB0byBtb3ZlIG9uZSBzdGVwIGFoZWFkCisg
ICAgICAgICAgIHdpdGhvdXQgbW92aW5nIHRoZSBwb3NpdGlvbi4gV2UgbmVlZCB0aGUgZXh0cmEg
c3RlcCB0byBjYWxjdWxhdGUgdGhlCisgICAgICAgICAgIHNsb3BlIG9mIHRoZSBwYXRoIGF0IHRo
ZSBzdGFydGluZyBwb2ludC4KKyAgICAgICAgMi4gV2UgbmVlZCB0byBhZGQgYSBuZXcgbW9kZSB0
byB0cmF2ZXJzaW5nIGEgcGF0aC4gVGhlIG5ldyBtb2RlIHdpbGwgdGFrZQorICAgICAgICAgICBh
IHZlY3RvciBvZiBsZW5ndGhzIGFuZCByZXR1cm5zIGEgdmVjdG9yIG9mIGFycm93IHZlY3RvcnMu
IEV2ZXJ5IGFycm93CisgICAgICAgICAgIHZlY3RvciByZXByZXNlbnRzIGEgcG9zaXRpb24gYW5k
IGFuIGFuZ2xlIG9uIHRoZSBwYXRoIGF0IGEgY2VydGFpbiBsZW5ndGguCisgICAgICAgICAgIFRo
aXMgd2lsbCByZXF1aXJlIGNoYW5naW5nIHRoZSBTVkdUZXh0TGF5b3V0RW5naW5lIHRvIGNhbGN1
bGF0ZSB0aGUgbGVuZ3RocworICAgICAgICAgICBmaXJzdCBhbmQgdGhlbiBwYXNzZXMgYWxsIG9m
IHRoZW0gdG8gdGhlIHBhdGggdHJhdmVyc2FsIGZ1bmN0aW9uLiBJbnN0ZWFkCisgICAgICAgICAg
IG9mIHRyYXZlcnNpbmcgdGhlIHBhdGggYWdhaW4sIHdlIGFyZSBnb2luZyB0byBnZXQgdGhlIHJl
cXVpcmVkIHBvaW50CisgICAgICAgICAgIGFuZCBhbmdsZSBmcm9tIHRoZSB2ZWN0b3Igb2YgYXJy
b3cgdmVjdG9ycy4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgdGhlIGZpcnN0
IGZpeCBvbmx5LiBUaGUgc2Vjb25kIG9uZSB3aWxsIHJlcXVpcmUKKyAgICAgICAgcmVmYWN0b3Jp
bmcgdGhlIFNWR1RleHRMYXlvdXRFbmdpbmUgc28gSSBhbSBnb2luZyB0byBhZGRyZXNzIGl0IGlu
IGEKKyAgICAgICAgZGlmZmVyZW50IHBhdGNoLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXRoTGVuZ3RoQXBwbGllckZ1bmN0aW9u
KTogSXQgaXMgYmV0dGVyIGFuZCBjbGVhbmVyIHRvIG1vdmUKKyAgICAgICAgdGhpcyBmdW5jdGlv
biBvZiB0aGlzIG1ldGhvZCB0byBQYXRoVHJhdmVyc2FsU3RhdGU6OnByb2Nlc3NQYXRoRWxlbWVu
dCgpLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYXZlcnNhbFN0YXRlQXRM
ZW5ndGgpOiBBZGQgYSBuZXcgZnVuY3Rpb24gd2hpY2ggcmV0dXJucworICAgICAgICB0aGUgdHJh
dmVyc2FsU3RhdGUgYXQgYSBjZXJ0YWluIGxlbmd0aCBvbiBhIHBhdGguCisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6UGF0aDo6cG9pbnRBdExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjpub3JtYWxBbmdsZUF0TGVuZ3RoKTogVXNlIHRyYXZlcnNhbFN0YXRlQXRMZW5ndGgoKSB0
byBnZXQKKyAgICAgICAgdGhlIHRyYXZlcnNhbFN0YXRlIGFuZCBmcm9tIGl0IHJldHVybiBlaXRo
ZXIgdGhlIHBvc2l0aW9uIG9yIHRoZSBhbmdsZS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0aC5oOiBEZWZpbmUgdHJhdmVyc2FsU3RhdGVBdExlbmd0aCgpLgorICAg
ICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZGlzdGFuY2VMaW5lKTogQ29kZSBjbGVhbiB1cC4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpjdXJ2ZUxlbmd0aCk6IENvZGUgY2xlYW4gdXAgYW5kIG1h
a2Ugc3VyZSBtX2N1cnJlbnQgaXMgc2V0IGNvcnJlY3RseQorICAgICAgICBmb3IgYWxsIGNhc2Vz
LgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhUcmF2ZXJzYWxTdGF0ZTo6UGF0aFRy
YXZlcnNhbFN0YXRlKTogQWRkIGFuIG9wdGlvbmFsIHBhcmFtZXRlcgorICAgICAgICBmb3IgdGhl
IGRlc2lyZWQgbGVuZ3RoIGFuZCBtb3ZlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgb3RoZXIg
bWVtYmVycyB0bworICAgICAgICB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OmNsb3NlU3VicGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OmxpbmVUbyk6IEFkZCB0aGUgZGlzdGFuY2UgdG8gdGhlIG1f
dG90YWxMZW5ndGgKKyAgICAgICAgaW5zdGVhZCBvZiByZXR1cm5pbmcgaXQgc2luY2UgdGhpcyBp
cyB3aGF0IGFsbCB0aGUgY2FsbGVycyB3ZXJlIGRvaW5nLgorICAgICAgICAKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGhUcmF2ZXJzYWxTdGF0ZTo6cXVhZHJhdGljQmV6aWVyVG8pOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpjdWJpY0JlemllclRvKTogQWRkIHRoZSBkaXN0
YW5jZSB0byB0aGUKKyAgICAgICAgbV90b3RhbExlbmd0aC4gTW92ZSBzZXR0aW5nIHRoZSBtX2N1
cnJlbnQgdG8gV2ViQ29yZTo6Y3VydmVMZW5ndGgoKS4KKyAgICAgICAgUmVtb3ZlIHVudXNlZCBt
ZW1iZXJzIG1fY29udHJvbDEgYW5kIG1fY29udHJvbDIuCisKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1NlZ21lbnQpOiBEZWxldGVkLiAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OmZpbmFsaXplQXBwZW5kUGF0aEVsZW1l
bnQpOiBDcmVhdGUgYSBuZXcgbmFtZS4KKyAgICAgICAgZm9yIHRoZSBmdW5jdGlvbi4gSGFuZGxl
IHRoZSBjYXNlIG9mIHRoZSBhbmdsZSBhdCB0aGUgc3RhcnRpbmcgcG9pbnQgd2hlcmUKKyAgICAg
ICAgbV9kZXNpcmVkTGVuZ3RoIGlzIHplcm8uIFRoZSBuZXcgZmxhZyBtX3plcm9WZWN0b3Igd2ls
bCBiZSBzZXQgdG8gbm90aWZ5CisgICAgICAgIHRoZSBjYWxsZXIgdGhhdCB0aGUgIG5leHQgaXRl
cmF0aW9uIHdpbGwgYmUgdGhlIGxhc3Qgb25lIGFuZCBpdCBpcyBvbmx5CisgICAgICAgIG5lZWRl
ZCBmb3IgdGhlIGNhbGN1bGF0aW5nIHRoZSBhbmdsZSBvZiBhIHplcm8gdmVjdG9yLiAKKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OmFwcGVuZFBhdGhFbGVt
ZW50KTogVGhpcyBjb2RlIGlzIG1vdmVkIGZyb20KKyAgICAgICAgcGF0aExlbmd0aEFwcGxpZXJG
dW5jdGlvbigpLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhUcmF2ZXJzYWxTdGF0
ZTo6cHJvY2Vzc1BhdGhFbGVtZW50KTogVGhpcyBmdW5jdGlvbiBpcyB1c2VkCisgICAgICAgIGJ5
IHRoZSBjbGFzcyBQYXRoLiBJdCBpcyBhIHdyYXBwZXIgZm9yIGFwcGVuZFBhdGhFbGVtZW50KCku
IElmIG1femVyb1ZlY3RvcgorICAgICAgICBpcyBzZXQgd2UgYXBwZW5kIHRoZSBuZXcgZWxlbWVu
dCB0byBhIGNvcHkgZm9yIHRoZSBQYXRoVHJhdmVyc2FsU3RhdGUganVzdAorICAgICAgICB0byBn
ZXQgdGhlIGFuZ2xlIGZvciB0aGUgemVybyB2ZWN0b3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuaDogQWRkIG5ldyBtZW1iZXJzIGFuZCBtZXRob2Rz
LgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vz
c1BhdGhFbGVtZW50KTogQW5vdGhlciB3cmFwcGVyIGZvcgorICAgICAgICBhcHBlbmRQYXRoRWxl
bWVudCgpIHdoaWNoIGlzIHVzZWQgYnkgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci4KKyAg
ICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpbmVP
clBhdGgpOiBEbyBhIHNpbmdsZSBwYXRoCisgICAgICAgIHRyYXZlcnNhbCB0byBnZXQgdGhlIHBv
c2l0aW9uIGFuZCB0aGUgYW5nbGUgZm9yIGEgbGVuZ3RoIG9uIGEgcGF0aC4KKyAgICAgICAgCisg
ICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpidWlsZFRyYW5zZm9ybUZvclByb2dyZXNzKTog
RG8gYSBzaW5nbGUKKyAgICAgICAgcGF0aCB0cmF2ZXJzYWwgdG8gZ2V0IHRoZSBwb3NpdGlvbiBh
bmQgdGhlIGFuZ2xlIGF0IGEgbGVuZ3RoIG9uIGEgcGF0aC4KKyAgICAgICAgCisgICAgICAgICog
c3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRl
cik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjptb3Zl
VG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6bGlu
ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1
cnZlVG9DdWJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWls
ZGVyOjpjbG9zZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRl
QnVpbGRlcjo6Y29udGludWVDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlcjo6aW5jcmVtZW50UGF0aFNlZ21lbnRDb3VudCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpwYXRoU2Vn
bWVudEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRl
QnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRl
cjo6cGF0aFNlZ21lbnRJbmRleCk6IENvZGUgY2xlYW4gdXAuCisgICAgICAgIAorICAgICAgICAq
IHN2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFBvaW50QXRM
ZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKTogSW5pdGlhbGl6ZSBQYXRoVHJhdmVyc2FsU3RhdGUK
KyAgICAgICAgcHJvcGVybHkgZm9yIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuCisKIDIw
MTUtMDQtMDggIFBlciBBcm5lIFZvbGxhbiAgPHBlYXZvQG91dGxvb2suY29tPgogCiAgICAgICAg
IFtDdXJsXSBDb21waWxlIGVycm9yIGluIEN1cmxDYWNoZUVudHJ5OjpwYXJzZVJlc3BvbnNlSGVh
ZGVycyBtZXRob2QuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
LmNwcAkocmV2aXNpb24gMTgyMzQxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDI5ICs0Miw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHN0YXRpYyB2b2lkIHBhdGhMZW5ndGhBcHBsaWVyRnVuY3Rpb24odm9pZCogaW5m
bywgY29uc3QgUGF0aEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgUGF0aFRyYXZlcnNhbFN0YXRl
JiB0cmF2ZXJzYWxTdGF0ZSA9ICpzdGF0aWNfY2FzdDxQYXRoVHJhdmVyc2FsU3RhdGUqPihpbmZv
KTsKLSAgICBpZiAodHJhdmVyc2FsU3RhdGUubV9zdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0g
ICAgRmxvYXRQb2ludCogcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOwotICAgIGZsb2F0IHNlZ21l
bnRMZW5ndGggPSAwOwotICAgIHN3aXRjaCAoZWxlbWVudC0+dHlwZSkgewotICAgICAgICBjYXNl
IFBhdGhFbGVtZW50TW92ZVRvUG9pbnQ6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJh
dmVyc2FsU3RhdGUubW92ZVRvKHBvaW50c1swXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBQYXRoRWxlbWVudEFkZExpbmVUb1BvaW50OgotICAgICAgICAgICAgc2VnbWVudExl
bmd0aCA9IHRyYXZlcnNhbFN0YXRlLmxpbmVUbyhwb2ludHNbMF0pOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50OgotICAgICAg
ICAgICAgc2VnbWVudExlbmd0aCA9IHRyYXZlcnNhbFN0YXRlLnF1YWRyYXRpY0JlemllclRvKHBv
aW50c1swXSwgcG9pbnRzWzFdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBh
dGhFbGVtZW50QWRkQ3VydmVUb1BvaW50OgotICAgICAgICAgICAgc2VnbWVudExlbmd0aCA9IHRy
YXZlcnNhbFN0YXRlLmN1YmljQmV6aWVyVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1sy
XSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQYXRoRWxlbWVudENsb3NlU3Vi
cGF0aDoKLSAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5jbG9zZVN1
YnBhdGgoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB0cmF2ZXJzYWxTdGF0ZS5t
X3RvdGFsTGVuZ3RoICs9IHNlZ21lbnRMZW5ndGg7IAotICAgIHRyYXZlcnNhbFN0YXRlLnByb2Nl
c3NTZWdtZW50KCk7CisgICAgdHJhdmVyc2FsU3RhdGUucHJvY2Vzc1BhdGhFbGVtZW50KGVsZW1l
bnQpOwogfQogCiBmbG9hdCBQYXRoOjpsZW5ndGgoKSBjb25zdApAQCAtNzQsMjIgKzUyLDIyIEBA
IGZsb2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRlLm1f
dG90YWxMZW5ndGg7CiB9CiAKLUZsb2F0UG9pbnQgUGF0aDo6cG9pbnRBdExlbmd0aChmbG9hdCBs
ZW5ndGgsIGJvb2wmIG9rKSBjb25zdAorUGF0aFRyYXZlcnNhbFN0YXRlIFBhdGg6OnRyYXZlcnNh
bFN0YXRlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3QKIHsKLSAgICBQYXRo
VHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJz
YWxQb2ludEF0TGVuZ3RoKTsKLSAgICB0cmF2ZXJzYWxTdGF0ZS5tX2Rlc2lyZWRMZW5ndGggPSBs
ZW5ndGg7CisgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJz
YWxTdGF0ZTo6VHJhdmVyc2FsVmVjdG9yQXRMZW5ndGgsIGxlbmd0aCk7CiAgICAgYXBwbHkoJnRy
YXZlcnNhbFN0YXRlLCBwYXRoTGVuZ3RoQXBwbGllckZ1bmN0aW9uKTsKICAgICBvayA9IHRyYXZl
cnNhbFN0YXRlLm1fc3VjY2VzczsKLSAgICByZXR1cm4gdHJhdmVyc2FsU3RhdGUubV9jdXJyZW50
OworICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0ZTsKK30KKworRmxvYXRQb2ludCBQYXRoOjpwb2lu
dEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0Cit7CisgICAgcmV0dXJuIHRy
YXZlcnNhbFN0YXRlQXRMZW5ndGgobGVuZ3RoLCBvaykubV9jdXJyZW50OwogfQogCiBmbG9hdCBQ
YXRoOjpub3JtYWxBbmdsZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0CiB7
Ci0gICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0
ZTo6VHJhdmVyc2FsTm9ybWFsQW5nbGVBdExlbmd0aCk7Ci0gICAgdHJhdmVyc2FsU3RhdGUubV9k
ZXNpcmVkTGVuZ3RoID0gbGVuZ3RoID8gbGVuZ3RoIDogc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46OmVwc2lsb24oKTsKLSAgICBhcHBseSgmdHJhdmVyc2FsU3RhdGUsIHBhdGhMZW5ndGhBcHBs
aWVyRnVuY3Rpb24pOwotICAgIG9rID0gdHJhdmVyc2FsU3RhdGUubV9zdWNjZXNzOwotICAgIHJl
dHVybiB0cmF2ZXJzYWxTdGF0ZS5tX25vcm1hbEFuZ2xlOworICAgIHJldHVybiB0cmF2ZXJzYWxT
dGF0ZUF0TGVuZ3RoKGxlbmd0aCwgb2spLm1fbm9ybWFsQW5nbGU7CiB9CiAKIHZvaWQgUGF0aDo6
YWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHJv
dW5kaW5nUmFkaWksIFJvdW5kZWRSZWN0U3RyYXRlZ3kgc3RyYXRlZ3kpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShyZXZpc2lvbiAxODIzNDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDYgKzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZsb2F0Um91bmRlZFJl
Y3Q7CiAgICAgY2xhc3MgRmxvYXRTaXplOwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKKyAg
ICBjbGFzcyBQYXRoVHJhdmVyc2FsU3RhdGU7CiAgICAgY2xhc3MgUm91bmRlZFJlY3Q7CiAgICAg
Y2xhc3MgU3Ryb2tlU3R5bGVBcHBsaWVyOwogCkBAIC0xMDAsMTAgKzEwMSwxMSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsKICAg
ICAgICAgRmxvYXRSZWN0IGZhc3RCb3VuZGluZ1JlY3QoKSBjb25zdDsKICAgICAgICAgRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqID0gMCkgY29uc3Q7Ci0g
ICAgICAgIAorCiAgICAgICAgIGZsb2F0IGxlbmd0aCgpIGNvbnN0OwotICAgICAgICBGbG9hdFBv
aW50IHBvaW50QXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3Q7Ci0gICAgICAg
IGZsb2F0IG5vcm1hbEFuZ2xlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3Q7
CisgICAgICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKGZsb2F0
LCBib29sJikgY29uc3Q7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnRBdExlbmd0aChmbG9hdCwg
Ym9vbCYpIGNvbnN0OworICAgICAgICBmbG9hdCBub3JtYWxBbmdsZUF0TGVuZ3RoKGZsb2F0LCBi
b29sJikgY29uc3Q7CiAKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwogICAg
ICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3BhdGg7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0
YXRlLmNwcAkocmV2aXNpb24gMTgyMzQxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
OSBAQCBzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgbWlkUG9pbnQoY29uc3QgCiAKIHN0YXRpYyBp
bmxpbmUgZmxvYXQgZGlzdGFuY2VMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0LCBjb25zdCBG
bG9hdFBvaW50JiBlbmQpCiB7Ci0gICAgcmV0dXJuIHNxcnRmKChlbmQueCgpIC0gc3RhcnQueCgp
KSAqIChlbmQueCgpIC0gc3RhcnQueCgpKSArIChlbmQueSgpIC0gc3RhcnQueSgpKSAqIChlbmQu
eSgpIC0gc3RhcnQueSgpKSk7CisgICAgZmxvYXQgZHggPSBlbmQueCgpIC0gc3RhcnQueCgpOwor
ICAgIGZsb2F0IGR5ID0gZW5kLnkoKSAtIHN0YXJ0LnkoKTsKKyAgICByZXR1cm4gc3FydGYoZHgg
KiBkeCArIGR5ICogZHkpOwogfQogCiBzdHJ1Y3QgUXVhZHJhdGljQmV6aWVyIHsKQEAgLTExNCwx
MTAgKzExNiwxNDggQEAgc3RydWN0IEN1YmljQmV6aWVyIHsKIC8vIEFub3RoZXIgY2hlY2sgd2hp
Y2ggaXMgcG9zc2libGUgdXAtZnJvbnQgKHRvIHNlbmQgdXMgZG93biB0aGUgZmFzdCBwYXRoKSB3
b3VsZCBiZSB0byBjaGVjayBpZgogLy8gYXBwcm94aW1hdGVEaXN0YW5jZSgpICsgY3VycmVudCB0
b3RhbCBkaXN0YW5jZSA+IGRlc2lyZWQgZGlzdGFuY2UKIHRlbXBsYXRlPGNsYXNzIEN1cnZlVHlw
ZT4KLXN0YXRpYyBmbG9hdCBjdXJ2ZUxlbmd0aChQYXRoVHJhdmVyc2FsU3RhdGUmIHRyYXZlcnNh
bFN0YXRlLCBDdXJ2ZVR5cGUgY3VydmUpCitzdGF0aWMgZmxvYXQgY3VydmVMZW5ndGgoUGF0aFRy
YXZlcnNhbFN0YXRlJiB0cmF2ZXJzYWxTdGF0ZSwgY29uc3QgQ3VydmVUeXBlJiBlbGVtZW50Q3Vy
dmUpCiB7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGN1cnZlU3RhY2tEZXB0aExpbWl0ID0g
MjA7Ci0KLSAgICBWZWN0b3I8Q3VydmVUeXBlPiBjdXJ2ZVN0YWNrOwotICAgIGN1cnZlU3RhY2su
YXBwZW5kKGN1cnZlKTsKLQorICAgIEN1cnZlVHlwZSBjdXJ2ZSA9IGVsZW1lbnRDdXJ2ZTsKKyAg
ICBWZWN0b3I8Q3VydmVUeXBlLCBjdXJ2ZVN0YWNrRGVwdGhMaW1pdD4gY3VydmVTdGFjazsKICAg
ICBmbG9hdCB0b3RhbExlbmd0aCA9IDA7Ci0gICAgZG8geworCisgICAgd2hpbGUgKHRydWUpIHsK
ICAgICAgICAgZmxvYXQgbGVuZ3RoID0gY3VydmUuYXBwcm94aW1hdGVEaXN0YW5jZSgpOwotICAg
ICAgICBpZiAoKGxlbmd0aCAtIGRpc3RhbmNlTGluZShjdXJ2ZS5zdGFydCwgY3VydmUuZW5kKSkg
PiBrUGF0aFNlZ21lbnRMZW5ndGhUb2xlcmFuY2UgJiYgY3VydmVTdGFjay5zaXplKCkgPD0gY3Vy
dmVTdGFja0RlcHRoTGltaXQpIHsKKworICAgICAgICBpZiAoKGxlbmd0aCAtIGRpc3RhbmNlTGlu
ZShjdXJ2ZS5zdGFydCwgY3VydmUuZW5kKSkgPiBrUGF0aFNlZ21lbnRMZW5ndGhUb2xlcmFuY2Ug
JiYgY3VydmVTdGFjay5zaXplKCkgPCBjdXJ2ZVN0YWNrRGVwdGhMaW1pdCkgewogICAgICAgICAg
ICAgQ3VydmVUeXBlIGxlZnRDdXJ2ZTsKICAgICAgICAgICAgIEN1cnZlVHlwZSByaWdodEN1cnZl
OwogICAgICAgICAgICAgY3VydmUuc3BsaXQobGVmdEN1cnZlLCByaWdodEN1cnZlKTsKICAgICAg
ICAgICAgIGN1cnZlID0gbGVmdEN1cnZlOwogICAgICAgICAgICAgY3VydmVTdGFjay5hcHBlbmQo
cmlnaHRDdXJ2ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0b3RhbExlbmd0aCAr
PSBsZW5ndGg7Ci0gICAgICAgICAgICBpZiAodHJhdmVyc2FsU3RhdGUubV9hY3Rpb24gPT0gUGF0
aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoCi0gICAgICAgICAgICAgfHwg
dHJhdmVyc2FsU3RhdGUubV9hY3Rpb24gPT0gUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxO
b3JtYWxBbmdsZUF0TGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgdHJhdmVyc2FsU3RhdGUubV9w
cmV2aW91cyA9IGN1cnZlLnN0YXJ0OwotICAgICAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRlLm1f
Y3VycmVudCA9IGN1cnZlLmVuZDsKLSAgICAgICAgICAgICAgICBpZiAodHJhdmVyc2FsU3RhdGUu
bV90b3RhbExlbmd0aCArIHRvdGFsTGVuZ3RoID4gdHJhdmVyc2FsU3RhdGUubV9kZXNpcmVkTGVu
Z3RoKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxMZW5ndGg7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjdXJ2ZSA9IGN1cnZlU3RhY2subGFzdCgpOwotICAgICAgICAgICAg
Y3VydmVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQotICAgIH0gd2hpbGUgKCFjdXJ2ZVN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgCisKKyAgICAgICAg
dG90YWxMZW5ndGggKz0gbGVuZ3RoOworICAgICAgICBpZiAodHJhdmVyc2FsU3RhdGUubV9hY3Rp
b24gPT0gUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxWZWN0b3JBdExlbmd0aCkgeworICAg
ICAgICAgICAgdHJhdmVyc2FsU3RhdGUubV9wcmV2aW91cyA9IGN1cnZlLnN0YXJ0OworICAgICAg
ICAgICAgdHJhdmVyc2FsU3RhdGUubV9jdXJyZW50ID0gY3VydmUuZW5kOworICAgICAgICAgICAg
aWYgKHRyYXZlcnNhbFN0YXRlLm1fdG90YWxMZW5ndGggKyB0b3RhbExlbmd0aCA+IHRyYXZlcnNh
bFN0YXRlLm1fZGVzaXJlZExlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChjdXJ2ZVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGN1cnZlID0gY3VydmVTdGFjay5sYXN0KCk7CisgICAgICAgIGN1cnZlU3Rh
Y2sucmVtb3ZlTGFzdCgpOworICAgIH0KKworICAgIGlmICh0cmF2ZXJzYWxTdGF0ZS5tX2FjdGlv
biAhPSBQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNhbFZlY3RvckF0TGVuZ3RoKSB7CisgICAg
ICAgIEFTU0VSVChjdXJ2ZS5lbmQgPT0gZWxlbWVudEN1cnZlLmVuZCk7CisgICAgICAgIHRyYXZl
cnNhbFN0YXRlLm1fcHJldmlvdXMgPSBjdXJ2ZS5zdGFydDsKKyAgICAgICAgdHJhdmVyc2FsU3Rh
dGUubV9jdXJyZW50ID0gY3VydmUuZW5kOworICAgIH0KKwogICAgIHJldHVybiB0b3RhbExlbmd0
aDsKIH0KIAotUGF0aFRyYXZlcnNhbFN0YXRlOjpQYXRoVHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZl
cnNhbEFjdGlvbiBhY3Rpb24pCitQYXRoVHJhdmVyc2FsU3RhdGU6OlBhdGhUcmF2ZXJzYWxTdGF0
ZShQYXRoVHJhdmVyc2FsQWN0aW9uIGFjdGlvbiwgZmxvYXQgZGVzaXJlZExlbmd0aCkKICAgICA6
IG1fYWN0aW9uKGFjdGlvbikKLSAgICAsIG1fc3VjY2VzcyhmYWxzZSkKLSAgICAsIG1fdG90YWxM
ZW5ndGgoMCkKLSAgICAsIG1fc2VnbWVudEluZGV4KDApCi0gICAgLCBtX2Rlc2lyZWRMZW5ndGgo
MCkKLSAgICAsIG1fbm9ybWFsQW5nbGUoMCkKKyAgICAsIG1fZGVzaXJlZExlbmd0aChkZXNpcmVk
TGVuZ3RoKQogewogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6OmNsb3NlU3VicGF0aCgp
Cit2b2lkIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6Y2xvc2VTdWJwYXRoKCkKIHsKLSAgICBmbG9hdCBk
aXN0YW5jZSA9IGRpc3RhbmNlTGluZShtX2N1cnJlbnQsIG1fc3RhcnQpOwotICAgIG1fY3VycmVu
dCA9IG1fY29udHJvbDEgPSBtX2NvbnRyb2wyID0gbV9zdGFydDsKLSAgICByZXR1cm4gZGlzdGFu
Y2U7CisgICAgbV90b3RhbExlbmd0aCArPSBkaXN0YW5jZUxpbmUobV9jdXJyZW50LCBtX3N0YXJ0
KTsKKyAgICBtX2N1cnJlbnQgPSBtX3N0YXJ0OwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2FsU3Rh
dGU6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aFRyYXZlcnNhbFN0
YXRlOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgbV9jdXJyZW50ID0g
bV9zdGFydCA9IG1fY29udHJvbDEgPSBtX2NvbnRyb2wyID0gcG9pbnQ7Ci0gICAgcmV0dXJuIDA7
CisgICAgbV9wcmV2aW91cyA9IG1fY3VycmVudCA9IG1fc3RhcnQgPSBwb2ludDsKIH0KIAotZmxv
YXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2
b2lkIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQog
ewotICAgIGZsb2F0IGRpc3RhbmNlID0gZGlzdGFuY2VMaW5lKG1fY3VycmVudCwgcG9pbnQpOwot
ICAgIG1fY3VycmVudCA9IG1fY29udHJvbDEgPSBtX2NvbnRyb2wyID0gcG9pbnQ7Ci0gICAgcmV0
dXJuIGRpc3RhbmNlOworICAgIG1fdG90YWxMZW5ndGggKz0gZGlzdGFuY2VMaW5lKG1fY3VycmVu
dCwgcG9pbnQpOworICAgIG1fY3VycmVudCA9IHBvaW50OwogfQogCi1mbG9hdCBQYXRoVHJhdmVy
c2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2ws
IGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCkKK3ZvaWQgUGF0aFRyYXZlcnNhbFN0YXRlOjpxdWFk
cmF0aWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sLCBjb25zdCBGbG9hdFBv
aW50JiBuZXdFbmQpCiB7Ci0gICAgZmxvYXQgZGlzdGFuY2UgPSBjdXJ2ZUxlbmd0aDxRdWFkcmF0
aWNCZXppZXI+KCp0aGlzLCBRdWFkcmF0aWNCZXppZXIobV9jdXJyZW50LCBuZXdDb250cm9sLCBu
ZXdFbmQpKTsKLQotICAgIG1fY29udHJvbDEgPSBuZXdDb250cm9sOwotICAgIG1fY29udHJvbDIg
PSBuZXdFbmQ7Ci0KLSAgICBpZiAobV9hY3Rpb24gIT0gVHJhdmVyc2FsUG9pbnRBdExlbmd0aCAm
JiBtX2FjdGlvbiAhPSBUcmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoKSAKLSAgICAgICAgbV9j
dXJyZW50ID0gbmV3RW5kOworICAgIG1fdG90YWxMZW5ndGggKz0gY3VydmVMZW5ndGg8UXVhZHJh
dGljQmV6aWVyPigqdGhpcywgUXVhZHJhdGljQmV6aWVyKG1fY3VycmVudCwgbmV3Q29udHJvbCwg
bmV3RW5kKSk7Cit9CiAKLSAgICByZXR1cm4gZGlzdGFuY2U7Cit2b2lkIFBhdGhUcmF2ZXJzYWxT
dGF0ZTo6Y3ViaWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sMSwgY29uc3Qg
RmxvYXRQb2ludCYgbmV3Q29udHJvbDIsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCkKK3sKKyAg
ICBtX3RvdGFsTGVuZ3RoICs9IGN1cnZlTGVuZ3RoPEN1YmljQmV6aWVyPigqdGhpcywgQ3ViaWNC
ZXppZXIobV9jdXJyZW50LCBuZXdDb250cm9sMSwgbmV3Q29udHJvbDIsIG5ld0VuZCkpOwogfQog
Ci1mbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6OmN1YmljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2lu
dCYgbmV3Q29udHJvbDEsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wyLCBjb25zdCBGbG9h
dFBvaW50JiBuZXdFbmQpCitib29sIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6ZmluYWxpemVBcHBlbmRQ
YXRoRWxlbWVudCgpCiB7Ci0gICAgZmxvYXQgZGlzdGFuY2UgPSBjdXJ2ZUxlbmd0aDxDdWJpY0Jl
emllcj4oKnRoaXMsIEN1YmljQmV6aWVyKG1fY3VycmVudCwgbmV3Q29udHJvbDEsIG5ld0NvbnRy
b2wyLCBuZXdFbmQpKTsKKyAgICBpZiAobV9hY3Rpb24gPT0gVHJhdmVyc2FsVG90YWxMZW5ndGgp
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29udHJvbDEgPSBuZXdFbmQ7Ci0gICAg
bV9jb250cm9sMiA9IG5ld0NvbnRyb2wyOwotIAotICAgIGlmIChtX2FjdGlvbiAhPSBUcmF2ZXJz
YWxQb2ludEF0TGVuZ3RoICYmIG1fYWN0aW9uICE9IFRyYXZlcnNhbE5vcm1hbEFuZ2xlQXRMZW5n
dGgpIAotICAgICAgICBtX2N1cnJlbnQgPSBuZXdFbmQ7CisgICAgaWYgKG1fYWN0aW9uID09IFRy
YXZlcnNhbFNlZ21lbnRBdExlbmd0aCkgeworICAgICAgICBpZiAobV90b3RhbExlbmd0aCA+PSBt
X2Rlc2lyZWRMZW5ndGgpCisgICAgICAgICAgICBtX3N1Y2Nlc3MgPSB0cnVlOworICAgICAgICBy
ZXR1cm4gbV9zdWNjZXNzOworICAgIH0KIAotICAgIHJldHVybiBkaXN0YW5jZTsKLX0KKyAgICBB
U1NFUlQobV9hY3Rpb24gPT0gVHJhdmVyc2FsVmVjdG9yQXRMZW5ndGgpOwogCi12b2lkIFBhdGhU
cmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1NlZ21lbnQoKQotewotICAgIGlmIChtX2FjdGlvbiA9PSBU
cmF2ZXJzYWxTZWdtZW50QXRMZW5ndGggJiYgbV90b3RhbExlbmd0aCA+PSBtX2Rlc2lyZWRMZW5n
dGgpCi0gICAgICAgIG1fc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgIAotICAgIGlmICgobV9hY3Rp
b24gPT0gVHJhdmVyc2FsUG9pbnRBdExlbmd0aCB8fCBtX2FjdGlvbiA9PSBUcmF2ZXJzYWxOb3Jt
YWxBbmdsZUF0TGVuZ3RoKSAmJiBtX3RvdGFsTGVuZ3RoID49IG1fZGVzaXJlZExlbmd0aCkgewor
ICAgIGlmIChtX3RvdGFsTGVuZ3RoID49IG1fZGVzaXJlZExlbmd0aCkgewogICAgICAgICBmbG9h
dCBzbG9wZSA9IEZsb2F0UG9pbnQobV9jdXJyZW50IC0gbV9wcmV2aW91cykuc2xvcGVBbmdsZVJh
ZGlhbnMoKTsKLSAgICAgICAgaWYgKG1fYWN0aW9uID09IFRyYXZlcnNhbFBvaW50QXRMZW5ndGgp
IHsKLSAgICAgICAgICAgIGZsb2F0IG9mZnNldCA9IG1fZGVzaXJlZExlbmd0aCAtIG1fdG90YWxM
ZW5ndGg7Ci0gICAgICAgICAgICBtX2N1cnJlbnQubW92ZShvZmZzZXQgKiBjb3NmKHNsb3BlKSwg
b2Zmc2V0ICogc2luZihzbG9wZSkpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZmxvYXQgb2Zm
c2V0ID0gbV9kZXNpcmVkTGVuZ3RoIC0gbV90b3RhbExlbmd0aDsKKyAgICAgICAgbV9jdXJyZW50
Lm1vdmUob2Zmc2V0ICogY29zZihzbG9wZSksIG9mZnNldCAqIHNpbmYoc2xvcGUpKTsKKworICAg
ICAgICBpZiAoIW1femVyb1ZlY3RvciAmJiAhbV9kZXNpcmVkTGVuZ3RoKQorICAgICAgICAgICAg
bV96ZXJvVmVjdG9yID0gdHJ1ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX3N1Y2Nl
c3MgPSB0cnVlOwogICAgICAgICAgICAgbV9ub3JtYWxBbmdsZSA9IHJhZDJkZWcoc2xvcGUpOwot
ICAgICAgICBtX3N1Y2Nlc3MgPSB0cnVlOworICAgICAgICB9CiAgICAgfQorCiAgICAgbV9wcmV2
aW91cyA9IG1fY3VycmVudDsKKyAgICByZXR1cm4gbV9zdWNjZXNzOworfQorCitib29sIFBhdGhU
cmF2ZXJzYWxTdGF0ZTo6YXBwZW5kUGF0aEVsZW1lbnQoUGF0aEVsZW1lbnRUeXBlIHR5cGUsIGNv
bnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IFBhdGhFbGVtZW50TW92ZVRvUG9pbnQ6CisgICAgICAgIG1vdmVUbyhwb2ludHNbMF0pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ6CisgICAgICAg
IGxpbmVUbyhwb2ludHNbMF0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhdGhFbGVtZW50
QWRkUXVhZEN1cnZlVG9Qb2ludDoKKyAgICAgICAgcXVhZHJhdGljQmV6aWVyVG8ocG9pbnRzWzBd
LCBwb2ludHNbMV0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhdGhFbGVtZW50QWRkQ3Vy
dmVUb1BvaW50OgorICAgICAgICBjdWJpY0JlemllclRvKHBvaW50c1swXSwgcG9pbnRzWzFdLCBw
b2ludHNbMl0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhdGhFbGVtZW50Q2xvc2VTdWJw
YXRoOgorICAgICAgICBjbG9zZVN1YnBhdGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IAorICAgIHJldHVybiBmaW5hbGl6ZUFwcGVuZFBhdGhFbGVtZW50KCk7Cit9CisKK2Jvb2wgUGF0
aFRyYXZlcnNhbFN0YXRlOjpwcm9jZXNzUGF0aEVsZW1lbnQoUGF0aEVsZW1lbnRUeXBlIHR5cGUs
IGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3sKKyAgICBpZiAobV9zdWNjZXNzKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChtX3plcm9WZWN0b3IpIHsKKyAgICAgICAgUGF0aFRy
YXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKCp0aGlzKTsKKyAgICAgICAgbV9zdWNjZXNzID0g
dHJhdmVyc2FsU3RhdGUuYXBwZW5kUGF0aEVsZW1lbnQodHlwZSwgcG9pbnRzKTsKKyAgICAgICAg
bV9ub3JtYWxBbmdsZSA9IHRyYXZlcnNhbFN0YXRlLm1fbm9ybWFsQW5nbGU7CisgICAgICAgIHJl
dHVybiBtX3N1Y2Nlc3M7CisgICAgfQorCisgICAgcmV0dXJuIGFwcGVuZFBhdGhFbGVtZW50KHR5
cGUsIHBvaW50cyk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oCShyZXZpc2lvbiAxODIzNDEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBQYXRoVHJhdmVyc2FsU3Rh
dGVfaAogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBhdGguaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNCwzOCArMzUsNDEgQEAgY2xhc3MgUGF0aFRyYXZlcnNh
bFN0YXRlIHsKIHB1YmxpYzoKICAgICBlbnVtIFBhdGhUcmF2ZXJzYWxBY3Rpb24gewogICAgICAg
ICBUcmF2ZXJzYWxUb3RhbExlbmd0aCwKLSAgICAgICAgVHJhdmVyc2FsUG9pbnRBdExlbmd0aCwK
KyAgICAgICAgVHJhdmVyc2FsVmVjdG9yQXRMZW5ndGgsCiAgICAgICAgIFRyYXZlcnNhbFNlZ21l
bnRBdExlbmd0aCwKLSAgICAgICAgVHJhdmVyc2FsTm9ybWFsQW5nbGVBdExlbmd0aAogICAgIH07
CiAKLSAgICBQYXRoVHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbEFjdGlvbik7CisgICAgUGF0
aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxBY3Rpb24sIGZsb2F0ID0gMCk7CiAKLSAgICBm
bG9hdCBjbG9zZVN1YnBhdGgoKTsKLSAgICBmbG9hdCBtb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYp
OwotICAgIGZsb2F0IGxpbmVUbyhjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgZmxvYXQgcXVhZHJh
dGljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbCwgY29uc3QgRmxvYXRQb2lu
dCYgbmV3RW5kKTsKLSAgICBmbG9hdCBjdWJpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5l
d0NvbnRyb2wxLCBjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sMiwgY29uc3QgRmxvYXRQb2lu
dCYgbmV3RW5kKTsKLSAgICAKLSAgICB2b2lkIHByb2Nlc3NTZWdtZW50KCk7Citwcml2YXRlOgor
ICAgIHZvaWQgY2xvc2VTdWJwYXRoKCk7CisgICAgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQb2lu
dCYpOworICAgIHZvaWQgbGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHF1YWRy
YXRpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAg
dm9pZCBjdWJpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRmxvYXRQb2ludCYpOworCisgICAgYm9vbCBmaW5hbGl6ZUFwcGVuZFBhdGhFbGVtZW50
KCk7CisgICAgYm9vbCBhcHBlbmRQYXRoRWxlbWVudChQYXRoRWxlbWVudFR5cGUsIGNvbnN0IEZs
b2F0UG9pbnQqKTsKKworcHVibGljOgorICAgIGJvb2wgcHJvY2Vzc1BhdGhFbGVtZW50KFBhdGhF
bGVtZW50VHlwZSwgY29uc3QgRmxvYXRQb2ludCopOworICAgIGJvb2wgcHJvY2Vzc1BhdGhFbGVt
ZW50KGNvbnN0IFBhdGhFbGVtZW50KiBlbGVtZW50KSB7IHJldHVybiBwcm9jZXNzUGF0aEVsZW1l
bnQoZWxlbWVudC0+dHlwZSwgZWxlbWVudC0+cG9pbnRzKTsgfQogCiBwdWJsaWM6CiAgICAgUGF0
aFRyYXZlcnNhbEFjdGlvbiBtX2FjdGlvbjsKLSAgICBib29sIG1fc3VjY2VzczsKKyAgICBib29s
IG1fc3VjY2VzcyB7IGZhbHNlIH07CiAKICAgICBGbG9hdFBvaW50IG1fY3VycmVudDsKICAgICBG
bG9hdFBvaW50IG1fc3RhcnQ7Ci0gICAgRmxvYXRQb2ludCBtX2NvbnRyb2wxOwotICAgIEZsb2F0
UG9pbnQgbV9jb250cm9sMjsKIAotICAgIGZsb2F0IG1fdG90YWxMZW5ndGg7Ci0gICAgdW5zaWdu
ZWQgbV9zZWdtZW50SW5kZXg7Ci0gICAgZmxvYXQgbV9kZXNpcmVkTGVuZ3RoOworICAgIGZsb2F0
IG1fdG90YWxMZW5ndGggeyAwIH07CisgICAgZmxvYXQgbV9kZXNpcmVkTGVuZ3RoIHsgMCB9Owog
CiAgICAgLy8gRm9yIG5vcm1hbCBjYWxjdWxhdGlvbnMKICAgICBGbG9hdFBvaW50IG1fcHJldmlv
dXM7Ci0gICAgZmxvYXQgbV9ub3JtYWxBbmdsZTsgLy8gZGVncmVlcwotfTsgICAgCisgICAgZmxv
YXQgbV9ub3JtYWxBbmdsZSB7IDAgfTsgLy8gZGVncmVlcworICAgIGJvb2wgbV96ZXJvVmVjdG9y
IHsgZmFsc2UgfTsKK307CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCShyZXZpc2lvbiAxODIz
NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZS5oIgogCisjaW5jbHVkZSAiUGF0aFRyYXZl
cnNhbFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguaCIKICNpbmNsdWRlICJT
VkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgpAQCAtNTU0LDEzICs1
NTUsMTQgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0T25MaQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgICAg
ICAgICBGbG9hdFBvaW50IHBvaW50ID0gbV90ZXh0UGF0aC5wb2ludEF0TGVuZ3RoKHRleHRQYXRo
T2Zmc2V0LCBvayk7CisgICAgICAgICAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3Rh
dGUobV90ZXh0UGF0aC50cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKHRleHRQYXRoT2Zmc2V0LCBvaykp
OwogICAgICAgICAgICAgQVNTRVJUKG9rKTsKIAorICAgICAgICAgICAgRmxvYXRQb2ludCBwb2lu
dCA9IHRyYXZlcnNhbFN0YXRlLm1fY3VycmVudDsKICAgICAgICAgICAgIHggPSBwb2ludC54KCk7
CiAgICAgICAgICAgICB5ID0gcG9pbnQueSgpOwotICAgICAgICAgICAgYW5nbGUgPSBtX3RleHRQ
YXRoLm5vcm1hbEFuZ2xlQXRMZW5ndGgodGV4dFBhdGhPZmZzZXQsIG9rKTsKLSAgICAgICAgICAg
IEFTU0VSVChvayk7CisKKyAgICAgICAgICAgIGFuZ2xlID0gdHJhdmVyc2FsU3RhdGUubV9ub3Jt
YWxBbmdsZTsKIAogICAgICAgICAgICAgLy8gRm9yIHZlcnRpY2FsIHRleHQgb24gcGF0aCwgdGhl
IGFjdHVhbCBhbmdsZSBoYXMgdG8gYmUgcm90YXRlZCA5MCBkZWdyZWVzIGFudGktY2xvY2t3aXNl
LCBub3QgdGhlIG9yaWVudGF0aW9uIGFuZ2xlIQogICAgICAgICAgICAgaWYgKG1faXNWZXJ0aWNh
bFRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE4MjM0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAog
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5o
IgorI2luY2x1ZGUgIlBhdGhUcmF2ZXJzYWxTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTVBh
dGhFbGVtZW50LmgiCkBAIC0yMTQsMTQgKzIxNSwxOCBAQCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25F
bGVtZW50OjpidWlsZFRyYW5zCiAKICAgICBib29sIG9rID0gZmFsc2U7CiAgICAgZmxvYXQgcG9z
aXRpb25PblBhdGggPSBtX2FuaW1hdGlvblBhdGgubGVuZ3RoKCkgKiBwZXJjZW50YWdlOwotICAg
IEZsb2F0UG9pbnQgcG9zaXRpb24gPSBtX2FuaW1hdGlvblBhdGgucG9pbnRBdExlbmd0aChwb3Np
dGlvbk9uUGF0aCwgb2spOworCisgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRl
KG1fYW5pbWF0aW9uUGF0aC50cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKHBvc2l0aW9uT25QYXRoLCBv
aykpOwogICAgIGlmICghb2spCiAgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UG9pbnQgcG9z
aXRpb24gPSB0cmF2ZXJzYWxTdGF0ZS5tX2N1cnJlbnQ7CisgICAgZmxvYXQgYW5nbGUgPSB0cmF2
ZXJzYWxTdGF0ZS5tX25vcm1hbEFuZ2xlOworCiAgICAgdHJhbnNmb3JtLT50cmFuc2xhdGUocG9z
aXRpb24ueCgpLCBwb3NpdGlvbi55KCkpOwogICAgIFJvdGF0ZU1vZGUgcm90YXRlTW9kZSA9IHRo
aXMtPnJvdGF0ZU1vZGUoKTsKICAgICBpZiAocm90YXRlTW9kZSAhPSBSb3RhdGVBdXRvICYmIHJv
dGF0ZU1vZGUgIT0gUm90YXRlQXV0b1JldmVyc2UpCiAgICAgICAgIHJldHVybjsKLSAgICBmbG9h
dCBhbmdsZSA9IG1fYW5pbWF0aW9uUGF0aC5ub3JtYWxBbmdsZUF0TGVuZ3RoKHBvc2l0aW9uT25Q
YXRoLCBvayk7CiAgICAgaWYgKHJvdGF0ZU1vZGUgPT0gUm90YXRlQXV0b1JldmVyc2UpCiAgICAg
ICAgIGFuZ2xlICs9IDE4MDsKICAgICB0cmFuc2Zvcm0tPnJvdGF0ZShhbmdsZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIu
Y3BwCShyZXZpc2lvbiAxODIzNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZl
cnNhbFN0YXRlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDMxICsyOSwzMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OlNWR1Bh
dGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIoKQogICAgIDogbV90cmF2ZXJzYWxTdGF0ZSgwKQorICAg
ICwgbV9zZWdtZW50SW5kZXgoMCkKIHsKIH0KIAogdm9pZCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVC
dWlsZGVyOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIGJvb2wsIFBhdGhD
b29yZGluYXRlTW9kZSkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7Ci0gICAgbV90
cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3RyYXZlcnNhbFN0YXRlLT5tb3ZlVG8o
dGFyZ2V0UG9pbnQpOworICAgIG1fdHJhdmVyc2FsU3RhdGUtPnByb2Nlc3NQYXRoRWxlbWVudChQ
YXRoRWxlbWVudE1vdmVUb1BvaW50LCAmdGFyZ2V0UG9pbnQpOwogfQogCiB2b2lkIFNWR1BhdGhU
cmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCwgUGF0aENvb3JkaW5hdGVNb2RlKQogewogICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsK
LSAgICBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoICs9IG1fdHJhdmVyc2FsU3RhdGUt
PmxpbmVUbyh0YXJnZXRQb2ludCk7CisgICAgbV90cmF2ZXJzYWxTdGF0ZS0+cHJvY2Vzc1BhdGhF
bGVtZW50KFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQsICZ0YXJnZXRQb2ludCk7CiB9CiAKIHZv
aWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50
JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlKQogeworICAgIEZsb2F0UG9pbnQgcG9p
bnRzW10gPSB7IHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCB9OwogICAgIEFTU0VSVChtX3Ry
YXZlcnNhbFN0YXRlKTsKLSAgICBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoICs9IG1f
dHJhdmVyc2FsU3RhdGUtPmN1YmljQmV6aWVyVG8ocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50
KTsKKyAgICBtX3RyYXZlcnNhbFN0YXRlLT5wcm9jZXNzUGF0aEVsZW1lbnQoUGF0aEVsZW1lbnRB
ZGRDdXJ2ZVRvUG9pbnQsIHBvaW50cyk7CiB9CiAKIHZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRl
QnVpbGRlcjo6Y2xvc2VQYXRoKCkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7Ci0g
ICAgbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3RyYXZlcnNhbFN0YXRlLT5j
bG9zZVN1YnBhdGgoKTsKKyAgICBtX3RyYXZlcnNhbFN0YXRlLT5wcm9jZXNzUGF0aEVsZW1lbnQo
UGF0aEVsZW1lbnRDbG9zZVN1YnBhdGgsIG51bGxwdHIpOwogfQogCiB2b2lkIFNWR1BhdGhUcmF2
ZXJzYWxTdGF0ZUJ1aWxkZXI6OnNldERlc2lyZWRMZW5ndGgoZmxvYXQgZGVzaXJlZExlbmd0aCkK
QEAgLTY1LDIyICs2Nyw5IEBAIHZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6c2V0
RGUKIGJvb2wgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y29udGludWVDb25zdW1pbmco
KQogewogICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsgICAgCi0gICAgbV90cmF2ZXJzYWxT
dGF0ZS0+cHJvY2Vzc1NlZ21lbnQoKTsKICAgICByZXR1cm4gIW1fdHJhdmVyc2FsU3RhdGUtPm1f
c3VjY2VzczsKIH0KIAotdm9pZCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjppbmNyZW1l
bnRQYXRoU2VnbWVudENvdW50KCkKLXsKLSAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7Ci0g
ICAgKyttX3RyYXZlcnNhbFN0YXRlLT5tX3NlZ21lbnRJbmRleDsKLX0KLQotdW5zaWduZWQgU1ZH
UGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6cGF0aFNlZ21lbnRJbmRleCgpCi17Ci0gICAgQVNT
RVJUKG1fdHJhdmVyc2FsU3RhdGUpOwotICAgIHJldHVybiBtX3RyYXZlcnNhbFN0YXRlLT5tX3Nl
Z21lbnRJbmRleDsKLX0KLQogZmxvYXQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6dG90
YWxMZW5ndGgoKQogewogICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaAkocmV2
aXNpb24gMTgyMzQxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTUgKzMyLDE1IEBAIGNsYXNzIFNWR1Bh
dGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIgOiBwdWIKIHB1YmxpYzoKICAgICBTVkdQYXRoVHJhdmVy
c2FsU3RhdGVCdWlsZGVyKCk7CiAKLSAgICB1bnNpZ25lZCBwYXRoU2VnbWVudEluZGV4KCk7Cisg
ICAgdW5zaWduZWQgcGF0aFNlZ21lbnRJbmRleCgpIHsgcmV0dXJuIG1fc2VnbWVudEluZGV4OyB9
CiAgICAgZmxvYXQgdG90YWxMZW5ndGgoKTsKICAgICBTVkdQb2ludCBjdXJyZW50UG9pbnQoKTsK
IAogICAgIHZvaWQgc2V0Q3VycmVudFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZSog
dHJhdmVyc2FsU3RhdGUpIHsgbV90cmF2ZXJzYWxTdGF0ZSA9IHRyYXZlcnNhbFN0YXRlOyB9CiAg
ICAgdm9pZCBzZXREZXNpcmVkTGVuZ3RoKGZsb2F0KTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5jcmVt
ZW50UGF0aFNlZ21lbnRDb3VudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1l
bnRQYXRoU2VnbWVudENvdW50KCkgb3ZlcnJpZGUgeyArK21fc2VnbWVudEluZGV4OyB9CiAgICAg
dmlydHVhbCBib29sIGNvbnRpbnVlQ29uc3VtaW5nKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGNsZWFudXAoKSBvdmVycmlkZSB7IG1fdHJhdmVyc2FsU3RhdGUgPSAwOyB9CisgICAgdmly
dHVhbCB2b2lkIGNsZWFudXAoKSBvdmVycmlkZSB7IG1fdHJhdmVyc2FsU3RhdGUgPSBudWxscHRy
LCBtX3NlZ21lbnRJbmRleCA9IDA7IH0KIAogcHJpdmF0ZToKICAgICAvLyBVc2VkIGluIFVuYWx0
ZXJlZFBhcnNpbmcvTm9ybWFsaXplZFBhcnNpbmcgbW9kZXMuCkBAIC01OSw2ICs1OSw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2ws
IGJvb2wsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIG92ZXJyaWRlIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSogbV90cmF2
ZXJzYWxTdGF0ZTsKKyAgICB1bnNpZ25lZCBtX3NlZ21lbnRJbmRleDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVXRpbGl0aWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0aWxpdGllcy5j
cHAJKHJldmlzaW9uIDE4MjM0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVXRpbGl0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIGJvb2wgZ2V0UG9pbnRB
dExlbmd0aE9mU1ZHUGF0aEJ5dGVTdHJlYW0KICAgICBpZiAoc3RyZWFtLT5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxT
dGF0ZShQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNhbFBvaW50QXRMZW5ndGgpOworICAgIFBh
dGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZl
cnNhbFZlY3RvckF0TGVuZ3RoKTsKICAgICBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyKiBi
dWlsZGVyID0gZ2xvYmFsU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcih0cmF2ZXJzYWxTdGF0
ZSwgbGVuZ3RoKTsKIAogICAgIGF1dG8gc291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdQYXRo
Qnl0ZVN0cmVhbVNvdXJjZT4oc3RyZWFtKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>250444</attachid>
            <date>2015-04-09 10:30:44 -0700</date>
            <delta_ts>2015-04-09 10:30:44 -0700</delta_ts>
            <desc>test case</desc>
            <filename>TextOnPathSimple.svg</filename>
            <type>image/svg+xml</type>
            <size>2153</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2aWV3Qm94PSIwIDAgMTAwMDAgNTIwMCIK
ICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAogICAgIHhtbG5zOnhsaW5r
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICA8ZGVmcz4KICAgIDxwYXRoIGlkPSJN
eVBhdGgiCiAgICAgICAgICBkPSJNIDEwMCAgMjAwIAogICAgICAgICAgICAgQyAyMDAgIDEwMCAz
MDAgICAgMCAgNDAwICAxMDAKICAgICAgICAgICAgIEMgNTAwICAyMDAgNjAwICAzMDAgIDcwMCAg
MjAwCiAgICAgICAgICAgICBDIDgwMCAgMTAwIDkwMCAgICAwICAxMDAwIDEwMAogICAgICAgICAg
ICAgQyAxMTAwIDIwMCAxMjAwIDMwMCAgMTMwMCAyMDAKICAgICAgICAgICAgIEMgMTQwMCAxMDAg
MTUwMCAgIDAgIDE2MDAgMTAwIi8+CiAgPC9kZWZzPgoKICA8ZyBpZD0iVGV4dE9uUGF0aDEyNSI+
CiAgICA8ZyBpZD0iVGV4dE9uUGF0aDI1Ij4KICAgICAgPGcgaWQ9IlRleHRPblBhdGg1Ij4KICAg
ICAgICA8ZyBpZD0iVGV4dE9uUGF0aCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNNeVBh
dGgiIGZpbGw9Im5vbmUiIHN0cm9rZT0icmVkIi8+CiAgICAgICAgICA8dGV4dCBmb250LWZhbWls
eT0iVmVyZGFuYSIgZm9udC1zaXplPSI0Mi41Ij4KICAgICAgICAgICAgPHRleHRQYXRoIHhsaW5r
OmhyZWY9IiNNeVBhdGgiPgogICAgICAgICAgICAgIFdlIGdvIHVwLCB0aGVuIHdlIGdvIGRvd24s
IHRoZW4gdXAgYWdhaW4sIHRoZW4gd2UgZ28gZG93biwgdGhlbiB3ZSB1cCBhZ2FpbiwgdGhlbiB3
ZSBnbyBkb3duLgogICAgICAgICAgICA8L3RleHRQYXRoPgogICAgICAgICAgPC90ZXh0PgogICAg
ICAgIDwvZz4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoIiB0cmFuc2Zvcm09
InRyYW5zbGF0ZSgwLDQwKSIvPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGgi
IHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsODApIi8+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIj
VGV4dE9uUGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxMjApIi8+CiAgICAgICAgPHVzZSB4
bGluazpocmVmPSIjVGV4dE9uUGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxNjApIi8+CiAg
ICAgIDwvZz4KICAKICAgICAgPHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0aDUiIHRyYW5zZm9y
bT0idHJhbnNsYXRlKDAsMjAwKSIvPgogICAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRo
NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw0MDApIi8+CiAgICAgIDx1c2UgeGxpbms6aHJlZj0i
I1RleHRPblBhdGg1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDYwMCkiLz4KICAgICAgPHVzZSB4
bGluazpocmVmPSIjVGV4dE9uUGF0aDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsODAwKSIvPgog
ICAgPC9nPgoKICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGgyNSIgdHJhbnNmb3JtPSJ0
cmFuc2xhdGUoMCwxMDAwKSIvPgogICAgPHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0aDI1IiB0
cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDIwMDApIi8+CiAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0
T25QYXRoMjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMzAwMCkiLz4KICAgIDx1c2UgeGxpbms6
aHJlZj0iI1RleHRPblBhdGgyNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw0MDAwKSIvPgogIDwv
Zz4KCiAgPHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0aDEyNSIgdHJhbnNmb3JtPSJ0cmFuc2xh
dGUoMjAwMCwwKSIvPgogIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGgxMjUiIHRyYW5zZm9y
bT0idHJhbnNsYXRlKDQwMDAsMCkiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoMTI1
IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDAwLDApIi8+CiAgPHVzZSB4bGluazpocmVmPSIjVGV4
dE9uUGF0aDEyNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODAwMCwwKSIvPgoKICA8IS0tIFNob3cg
b3V0bGluZSBvZiB0aGUgdmlld3BvcnQgdXNpbmcgJ3JlY3QnIGVsZW1lbnQgLS0+CiAgPHJlY3Qg
eD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIKICAgICAgICBmaWxsPSJub25l
IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiIC8+Cjwvc3ZnPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250448</attachid>
            <date>2015-04-09 11:13:04 -0700</date>
            <delta_ts>2015-04-12 20:49:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141570-20150409111212.patch</filename>
            <type>text/plain</type>
            <size>31312</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODI2MDIpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE1LTA0LTA5ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgdGV4
dFBhdGggbGF5b3V0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTcwLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1dCB0aGUgdGltZSBzcGVudCBpbiB0cmF2
ZXJzaW5nIHRoZSBwYXRoIGZvciB0ZXh0IGludG8gaGFsZi4gSW5zdGVhZAorICAgICAgICBvZiB0
cmF2ZXJzaW5nIHRoZSBwYXRoIHR3aWNlIGF0IGEgY2VydGFpbiBsZW5ndGg6IG9uZSB0aW1lIGZv
ciB0aGUgcG9zaXRpb24KKyAgICAgICAgYW5kIHRoZSBzZWNvbmQgdGltZSBmb3IgdGhlIGFuZ2xl
LCB3ZSBjYW4gbWVyZ2UgdGhlc2UgdHdvIHBhc3NlcyBpbnRvIG9uZS4KKworICAgICAgICAqIFNW
Ry9UZXh0T25QYXRoU2ltcGxlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNWRy9yZXNvdXJjZXMv
VGV4dE9uUGF0aFNpbXBsZS5zdmc6IEFkZGVkLgorCiAyMDE1LTAzLTA5ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW0NHXSBIYXZlIENhbnZhcyB1c2UgdGhlIElP
U3VyZmFjZVBvb2wKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvU1ZHL1RleHRPblBhdGhTaW1wbGUu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL1NWRy9UZXh0T25QYXRoU2ltcGxl
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL1NWRy9UZXh0T25QYXRoU2lt
cGxlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5IEBACis8IURPQ1RZUEUgaHRtbD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdD4KKyAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgIFBlcmZUZXN0UnVu
bmVyLm1lYXN1cmVQYWdlTG9hZFRpbWUoe3BhdGg6ICJyZXNvdXJjZXMvVGV4dE9uUGF0aFNpbXBs
ZS5zdmcifSk7CisgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgpJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9TVkcvcmVzb3VyY2VzL1RleHRPblBhdGhTaW1wbGUuc3ZnCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvU1ZHL3Jlc291cmNlcy9UZXh0T25QYXRoU2ltcGxlLnN2ZwkocmV2aXNpb24g
MCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvU1ZHL3Jlc291cmNlcy9UZXh0T25QYXRoU2ltcGxlLnN2
Zwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACis8c3ZnIHdpZHRoPSIxMDAlIiBoZWln
aHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCA0MDAwIDI1MDAiCisgICAgIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyIgCisgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hsaW5rIj4KKyAgPGRlZnM+CisgICAgPHBhdGggaWQ9IlNpbXBsZVBhdGgiCisgICAgICAg
ICAgZD0iTSAxMDAgIDIwMCAKKyAgICAgICAgICAgICBDIDIwMCAgMTAwIDMwMCAgICAwICA0MDAg
IDEwMAorICAgICAgICAgICAgIEMgNTAwICAyMDAgNjAwICAzMDAgIDcwMCAgMjAwCisgICAgICAg
ICAgICAgQyA4MDAgIDEwMCA5MDAgICAgMCAgMTAwMCAxMDAKKyAgICAgICAgICAgICBDIDExMDAg
MjAwIDEyMDAgMzAwICAxMzAwIDIwMAorICAgICAgICAgICAgIEMgMTQwMCAxMDAgMTUwMCAgIDAg
IDE2MDAgMTAwCisgICAgICAgICAgICAgQyAxNzAwIDIwMCAxODAwIDMwMCAgMTkwMCAyMDAiLz4K
KyAgPC9kZWZzPgorCisgIDxnIGlkPSJUZXh0T25QYXRoMjUiPgorICAgIDxnIGlkPSJUZXh0T25Q
YXRoNSI+CisgICAgICA8ZyBpZD0iVGV4dE9uUGF0aCI+CisgICAgICAgIDx1c2UgeGxpbms6aHJl
Zj0iI1NpbXBsZVBhdGgiIGZpbGw9Im5vbmUiIHN0cm9rZT0icmVkIi8+CisgICAgICAgIDx0ZXh0
IGZvbnQtZmFtaWx5PSJWZXJkYW5hIiBmb250LXNpemU9IjQyLjUiPgorICAgICAgICAgIDx0ZXh0
UGF0aCB4bGluazpocmVmPSIjU2ltcGxlUGF0aCI+CisgICAgICAgICAgICBXZSBnbyB1cCwgdGhl
biB3ZSBnbyBkb3duLCB0aGVuIHVwIGFnYWluLCB0aGVuIHdlIGdvIGRvd24sIHRoZW4gd2UgdXAg
YWdhaW4sIHRoZW4gd2UgZ28gZG93bi4KKyAgICAgICAgICA8L3RleHRQYXRoPgorICAgICAgICA8
L3RleHQ+CisgICAgICA8L2c+CisgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoIiB0
cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDQwKSIvPgorICAgICAgPHVzZSB4bGluazpocmVmPSIjVGV4
dE9uUGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw4MCkiLz4KKyAgICAgIDx1c2UgeGxpbms6
aHJlZj0iI1RleHRPblBhdGgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMTIwKSIvPgorICAgICAg
PHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxNjAp
Ii8+CisgICAgPC9nPgorICAKKyAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoNSIgdHJh
bnNmb3JtPSJ0cmFuc2xhdGUoMCwyMDApIi8+CisgICAgPHVzZSB4bGluazpocmVmPSIjVGV4dE9u
UGF0aDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsNDAwKSIvPgorICAgIDx1c2UgeGxpbms6aHJl
Zj0iI1RleHRPblBhdGg1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDYwMCkiLz4KKyAgICA8dXNl
IHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw4MDApIi8+
CisgIDwvZz4KKworICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoMjUiIHRyYW5zZm9ybT0i
dHJhbnNsYXRlKDIwMDAsMCkiLz4KKyAgPHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0aDI1IiB0
cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDEyMDApIi8+CisgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRP
blBhdGgyNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjAwMCwxMjAwKSIvPgorCisgIDxyZWN0IHg9
IjEiIHk9IjEiIHdpZHRoPSIzOTk5IiBoZWlnaHQ9IjI0OTkiIGZpbGw9Im5vbmUiIHN0cm9rZT0i
YmxhY2siIHN0cm9rZS13aWR0aD0iMiIgLz4KKzwvc3ZnPgpJbmRleDogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMTgyNjAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE0IEBACisyMDE1LTA0LTA5ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFs
bGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgdGV4dFBhdGggbGF5b3V0IHBlcmZvcm1hbmNlIGlt
cHJvdmVtZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxNTcwLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZSBib3R0bGVuZWNrIG9mIHRoZSB0ZXh0LW9uLXBhdGggcGVyZm9ybWFuY2UgaXMgdGhl
IHBvc2l0aW9uIGFuZCBhbmdsZQorICAgICAgICBjYWxjdWxhdGlvbnMgZm9yIGV2ZXJ5IHNpbmds
ZSBjaGFyYWN0ZXIuIElmIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpcworICAgICAgICAnbicg
YW5kIHRoZSBudW1iZXIgb2YgcGF0aCBlbGVtZW50cyBpcyAnbScsIHRoZSB0b3RhbCBudW1iZXIg
b2YgcHJvY2Vzc2luZworICAgICAgICB0aGUgcGF0aCBlbGVtZW50cyBpcyBPKDIgeCBuIHggbSku
IFdoYXQgbWFrZXMgaXQgcmVhbGx5IHdvcnNlIGlzLCBmb3IgZXZlcnkKKyAgICAgICAgY3VydmUg
d2Uga2VlcCBzcGxpdHRpbmcgdGhlIGN1cnZlIHRpbGwgdGhlIHNwbGl0IGN1cnZlIGlzIGFsbW9z
dCBhIHN0cmFpZ2h0CisgICAgICAgIGxpbmUuIFRoZSBmaXhlcyB3ZSBuZWVkIHRvIGRvIGFyZToK
KyAgICAgICAgMS4gTWVyZ2UgdGhlIHBvc2l0aW9uIGFuZCB0aGUgYW5nbGUgdHJhdmVyc2FscyBz
aW5jZSB0aGV5IGFyZSByZXR1cm5pbmcKKyAgICAgICAgICAgaW5mbyBmb3IgdGhlIHNhbWUgbGVu
Z3RoIG9uIHRoZSBwYXRoLiBUaGVyZSBpcyBhIGRlZ2VuZXJhdGUgY2FzZSBmb3IKKyAgICAgICAg
ICAgdGhlIHN0YXJ0aW5nIHBvaW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIGFuZ2xlLiBUaGUgb3Jp
Z2luYWwgY29kZSB3YXMKKyAgICAgICAgICAgc29sdmluZyB0aGlzIHByb2JsZW0gYnkgcGFzc2lu
ZyBlcHNpbG9uIGluc3RlYWQgb2YgemVybyBidXQgYmVjYXVzZQorICAgICAgICAgICB0cmF2ZXJz
aW5nIHRoZSBwYXRoIGZvciBwb3NpdGlvbiBhbmQgYW5nbGUgYXJlIG5vdyBtZXJnZWQsIHdlIHdp
bGwgcGFzcworICAgICAgICAgICB6ZXJvIGZvciB0aGUgc3RhcnRpbmcgcG9pbnQgYXMgaXMuIEFs
bCB3ZSBuZWVkIHRvIG1vdmUgb25lIHN0ZXAgYWhlYWQKKyAgICAgICAgICAgd2l0aG91dCBtb3Zp
bmcgdGhlIHBvc2l0aW9uLiBXZSBuZWVkIHRoZSBleHRyYSBzdGVwIHRvIGNhbGN1bGF0ZSB0aGUK
KyAgICAgICAgICAgc2xvcGUgb2YgdGhlIHBhdGggYXQgdGhlIHN0YXJ0aW5nIHBvaW50LgorICAg
ICAgICAyLiBXZSBuZWVkIHRvIGFkZCBhIG5ldyBtb2RlIHRvIHRyYXZlcnNpbmcgYSBwYXRoLiBU
aGUgbmV3IG1vZGUgd2lsbCB0YWtlCisgICAgICAgICAgIGEgdmVjdG9yIG9mIGxlbmd0aHMgYW5k
IHJldHVybnMgYSB2ZWN0b3Igb2YgYXJyb3cgdmVjdG9ycy4gRXZlcnkgYXJyb3cKKyAgICAgICAg
ICAgdmVjdG9yIHJlcHJlc2VudHMgYSBwb3NpdGlvbiBhbmQgYW4gYW5nbGUgb24gdGhlIHBhdGgg
YXQgYSBjZXJ0YWluIGxlbmd0aC4KKyAgICAgICAgICAgVGhpcyB3aWxsIHJlcXVpcmUgY2hhbmdp
bmcgdGhlIFNWR1RleHRMYXlvdXRFbmdpbmUgdG8gY2FsY3VsYXRlIHRoZSBsZW5ndGhzCisgICAg
ICAgICAgIGZpcnN0IGFuZCB0aGVuIHBhc3NlcyBhbGwgb2YgdGhlbSB0byB0aGUgcGF0aCB0cmF2
ZXJzYWwgZnVuY3Rpb24uIEluc3RlYWQKKyAgICAgICAgICAgb2YgdHJhdmVyc2luZyB0aGUgcGF0
aCBhZ2Fpbiwgd2UgYXJlIGdvaW5nIHRvIGdldCB0aGUgcmVxdWlyZWQgcG9pbnQKKyAgICAgICAg
ICAgYW5kIGFuZ2xlIGZyb20gdGhlIHZlY3RvciBvZiBhcnJvdyB2ZWN0b3JzLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyB0aGUgZmlyc3QgZml4IG9ubHkuIFRoZSBzZWNvbmQg
b25lIHdpbGwgcmVxdWlyZQorICAgICAgICByZWZhY3RvcmluZyB0aGUgU1ZHVGV4dExheW91dEVu
Z2luZSBzbyBJIGFtIGdvaW5nIHRvIGFkZHJlc3MgaXQgaW4gYQorICAgICAgICBkaWZmZXJlbnQg
cGF0Y2guCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhdGhMZW5ndGhBcHBsaWVyRnVuY3Rpb24pOiBJdCBpcyBiZXR0ZXIgYW5kIGNs
ZWFuZXIgdG8gbW92ZQorICAgICAgICB0aGlzIGZ1bmN0aW9uIG9mIHRoaXMgbWV0aG9kIHRvIFBh
dGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1BhdGhFbGVtZW50KCkuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6dHJhdmVyc2FsU3RhdGVBdExlbmd0aCk6IEFkZCBhIG5ldyBmdW5j
dGlvbiB3aGljaCByZXR1cm5zCisgICAgICAgIHRoZSB0cmF2ZXJzYWxTdGF0ZSBhdCBhIGNlcnRh
aW4gbGVuZ3RoIG9uIGEgcGF0aC4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpw
b2ludEF0TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Om5vcm1hbEFuZ2xlQXRMZW5n
dGgpOiBVc2UgdHJhdmVyc2FsU3RhdGVBdExlbmd0aCgpIHRvIGdldAorICAgICAgICB0aGUgdHJh
dmVyc2FsU3RhdGUgYW5kIGZyb20gaXQgcmV0dXJuIGVpdGhlciB0aGUgcG9zaXRpb24gb3IgdGhl
IGFuZ2xlLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6IERl
ZmluZSB0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKCkuCisgICAgICAgIAorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpk
aXN0YW5jZUxpbmUpOiBDb2RlIGNsZWFuIHVwLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6
OmN1cnZlTGVuZ3RoKTogQ29kZSBjbGVhbiB1cCBhbmQgbWFrZSBzdXJlIG1fY3VycmVudCBpcyBz
ZXQgY29ycmVjdGx5CisgICAgICAgIGZvciBhbGwgdHJhdmVyc2luZyBjYXNlcy4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OlBhdGhUcmF2ZXJzYWxTdGF0
ZSk6IEFkZCBhbiBvcHRpb25hbCBwYXJhbWV0ZXIKKyAgICAgICAgZm9yIHRoZSBkZXNpcmVkIGxl
bmd0aCBhbmQgbW92ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG90aGVyIG1lbWJlcnMgdG8K
KyAgICAgICAgdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIAorICAgICAgICAoV2ViQ29y
ZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpjbG9zZVN1YnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aFRyYXZlcnNhbFN0YXRlOjptb3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aFRyYXZl
cnNhbFN0YXRlOjpsaW5lVG8pOiBBZGQgdGhlIGRpc3RhbmNlIHRvIHRoZSBtX3RvdGFsTGVuZ3Ro
CisgICAgICAgIGluc3RlYWQgb2YgcmV0dXJuaW5nIGl0IHNpbmNlIHRoaXMgaXMgd2hhdCBhbGwg
dGhlIGNhbGxlcnMgd2VyZSBkb2luZy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRo
VHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGhUcmF2ZXJzYWxTdGF0ZTo6Y3ViaWNCZXppZXJUbyk6IEFkZCB0aGUgZGlzdGFuY2UgdG8gdGhl
CisgICAgICAgIG1fdG90YWxMZW5ndGguIE1vdmUgc2V0dGluZyB0aGUgbV9jdXJyZW50IHRvIFdl
YkNvcmU6OmN1cnZlTGVuZ3RoKCkuCisgICAgICAgIFJlbW92ZSB1bnVzZWQgbWVtYmVycyBtX2Nv
bnRyb2wxIGFuZCBtX2NvbnRyb2wyLgorCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2Fs
U3RhdGU6OnByb2Nlc3NTZWdtZW50KTogRGVsZXRlZC4gICAgICAgIAorICAgICAgICAoV2ViQ29y
ZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpmaW5hbGl6ZUFwcGVuZFBhdGhFbGVtZW50KTogQ3JlYXRl
IGEgbmV3IG5hbWUuCisgICAgICAgIGZvciB0aGUgZnVuY3Rpb24uIEhhbmRsZSB0aGUgY2FzZSBv
ZiB0aGUgYW5nbGUgYXQgdGhlIHN0YXJ0aW5nIHBvaW50IHdoZXJlCisgICAgICAgIG1fZGVzaXJl
ZExlbmd0aCBpcyB6ZXJvLiBUaGUgbmV3IGZsYWcgbV96ZXJvVmVjdG9yIHdpbGwgYmUgc2V0IHRv
IG5vdGlmeQorICAgICAgICB0aGUgY2FsbGVyIHRoYXQgdGhlICBuZXh0IGl0ZXJhdGlvbiB3aWxs
IGJlIHRoZSBsYXN0IG9uZSBhbmQgaXQgaXMgb25seQorICAgICAgICBuZWVkZWQgZm9yIHRoZSBj
YWxjdWxhdGluZyB0aGUgYW5nbGUgb2YgYSB6ZXJvIHZlY3Rvci4gCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjphcHBlbmRQYXRoRWxlbWVudCk6IFRoaXMg
Y29kZSBpcyBtb3ZlZCBmcm9tCisgICAgICAgIHBhdGhMZW5ndGhBcHBsaWVyRnVuY3Rpb24oKS4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OnByb2Nlc3NQ
YXRoRWxlbWVudCk6IFRoaXMgZnVuY3Rpb24gaXMgdXNlZAorICAgICAgICBieSB0aGUgY2xhc3Mg
UGF0aC4gSXQgaXMgYSB3cmFwcGVyIGZvciBhcHBlbmRQYXRoRWxlbWVudCgpLiBJZiBtX3plcm9W
ZWN0b3IKKyAgICAgICAgaXMgc2V0IHdlIGFwcGVuZCB0aGUgbmV3IGVsZW1lbnQgdG8gYSBjb3B5
IGZvciB0aGUgUGF0aFRyYXZlcnNhbFN0YXRlIGp1c3QKKyAgICAgICAgdG8gZ2V0IHRoZSBhbmds
ZSBmb3IgdGhlIHplcm8gdmVjdG9yLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aFRyYXZlcnNhbFN0YXRlLmg6IEFkZCBuZXcgbWVtYmVycyBhbmQgbWV0aG9kcy4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OnByb2Nlc3NQYXRoRWxlbWVu
dCk6IEFub3RoZXIgd3JhcHBlciBmb3IKKyAgICAgICAgYXBwZW5kUGF0aEVsZW1lbnQoKSB3aGlj
aCBpcyB1c2VkIGJ5IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuCisgICAgICAgIAorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0T25MaW5lT3JQYXRoKTogRG8g
YSBzaW5nbGUgcGF0aAorICAgICAgICB0cmF2ZXJzYWwgdG8gZ2V0IHRoZSBwb3NpdGlvbiBhbmQg
dGhlIGFuZ2xlIGZvciBhIGxlbmd0aCBvbiBhIHBhdGguCisgICAgICAgIAorICAgICAgICAqIHN2
Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRlTW90aW9uRWxlbWVudDo6YnVpbGRUcmFuc2Zvcm1Gb3JQcm9ncmVzcyk6IERvIGEgc2luZ2xl
CisgICAgICAgIHBhdGggdHJhdmVyc2FsIHRvIGdldCB0aGUgcG9zaXRpb24gYW5kIHRoZSBhbmds
ZSBhdCBhIGxlbmd0aCBvbiBhIHBhdGguCisgICAgICAgIAorICAgICAgICAqIHN2Zy9TVkdQYXRo
VHJhdmVyc2FsU3RhdGVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2
ZXJzYWxTdGF0ZUJ1aWxkZXI6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6bW92ZVRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmxpbmVUbyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y2xvc2VQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmNv
bnRpbnVlQ29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXI6OmluY3JlbWVudFBhdGhTZWdtZW50Q291bnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6cGF0aFNlZ21lbnRJbmRleCk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnBhdGhTZWdt
ZW50SW5kZXgpOiBDb2RlIGNsZWFuIHVwLgorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHUGF0
aFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQb2ludEF0TGVuZ3RoT2ZTVkdQ
YXRoQnl0ZVN0cmVhbSk6IEluaXRpYWxpemUgUGF0aFRyYXZlcnNhbFN0YXRlCisgICAgICAgIHBy
b3Blcmx5IGZvciBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLgorCisKIDIwMTUtMDQtMDgg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBHaXZlIGVh
Y2ggY2FjaGUgZ3JvdXAgYSBzdG9yYWdlIGFuZCB1c2UgaXQgaW4gcGxhY2Ugb2YgdGhlIHNpbmds
ZXRvbgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAJKHJl
dmlzaW9uIDE4MjM0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwyOSArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBzdGF0aWMgdm9pZCBwYXRoTGVuZ3RoQXBwbGllckZ1bmN0aW9uKHZvaWQqIGluZm8sIGNvbnN0
IFBhdGhFbGVtZW50KiBlbGVtZW50KQogewogICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSYgdHJhdmVy
c2FsU3RhdGUgPSAqc3RhdGljX2Nhc3Q8UGF0aFRyYXZlcnNhbFN0YXRlKj4oaW5mbyk7Ci0gICAg
aWYgKHRyYXZlcnNhbFN0YXRlLm1fc3VjY2VzcykKLSAgICAgICAgcmV0dXJuOwotICAgIEZsb2F0
UG9pbnQqIHBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKLSAgICBmbG9hdCBzZWdtZW50TGVuZ3Ro
ID0gMDsKLSAgICBzd2l0Y2ggKGVsZW1lbnQtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBQYXRoRWxl
bWVudE1vdmVUb1BvaW50OgotICAgICAgICAgICAgc2VnbWVudExlbmd0aCA9IHRyYXZlcnNhbFN0
YXRlLm1vdmVUbyhwb2ludHNbMF0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDoKLSAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSB0
cmF2ZXJzYWxTdGF0ZS5saW5lVG8ocG9pbnRzWzBdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFBhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDoKLSAgICAgICAgICAgIHNl
Z21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5xdWFkcmF0aWNCZXppZXJUbyhwb2ludHNbMF0s
IHBvaW50c1sxXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQYXRoRWxlbWVu
dEFkZEN1cnZlVG9Qb2ludDoKLSAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxT
dGF0ZS5jdWJpY0JlemllclRvKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0pOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGg6Ci0g
ICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUuY2xvc2VTdWJwYXRoKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgdHJhdmVyc2FsU3RhdGUubV90b3RhbExl
bmd0aCArPSBzZWdtZW50TGVuZ3RoOyAKLSAgICB0cmF2ZXJzYWxTdGF0ZS5wcm9jZXNzU2VnbWVu
dCgpOworICAgIHRyYXZlcnNhbFN0YXRlLnByb2Nlc3NQYXRoRWxlbWVudChlbGVtZW50KTsKIH0K
IAogZmxvYXQgUGF0aDo6bGVuZ3RoKCkgY29uc3QKQEAgLTc0LDIyICs1MiwyMiBAQCBmbG9hdCBQ
YXRoOjpsZW5ndGgoKSBjb25zdAogICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0ZS5tX3RvdGFsTGVu
Z3RoOwogfQogCi1GbG9hdFBvaW50IFBhdGg6OnBvaW50QXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBi
b29sJiBvaykgY29uc3QKK1BhdGhUcmF2ZXJzYWxTdGF0ZSBQYXRoOjp0cmF2ZXJzYWxTdGF0ZUF0
TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0CiB7Ci0gICAgUGF0aFRyYXZlcnNh
bFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsUG9pbnRB
dExlbmd0aCk7Ci0gICAgdHJhdmVyc2FsU3RhdGUubV9kZXNpcmVkTGVuZ3RoID0gbGVuZ3RoOwor
ICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGU6
OlRyYXZlcnNhbFZlY3RvckF0TGVuZ3RoLCBsZW5ndGgpOwogICAgIGFwcGx5KCZ0cmF2ZXJzYWxT
dGF0ZSwgcGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbik7CiAgICAgb2sgPSB0cmF2ZXJzYWxTdGF0
ZS5tX3N1Y2Nlc3M7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRlLm1fY3VycmVudDsKKyAgICBy
ZXR1cm4gdHJhdmVyc2FsU3RhdGU7Cit9CisKK0Zsb2F0UG9pbnQgUGF0aDo6cG9pbnRBdExlbmd0
aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAoreworICAgIHJldHVybiB0cmF2ZXJzYWxT
dGF0ZUF0TGVuZ3RoKGxlbmd0aCwgb2spLm1fY3VycmVudDsKIH0KIAogZmxvYXQgUGF0aDo6bm9y
bWFsQW5nbGVBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAogewotICAgIFBh
dGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZl
cnNhbE5vcm1hbEFuZ2xlQXRMZW5ndGgpOwotICAgIHRyYXZlcnNhbFN0YXRlLm1fZGVzaXJlZExl
bmd0aCA9IGxlbmd0aCA/IGxlbmd0aCA6IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNp
bG9uKCk7Ci0gICAgYXBwbHkoJnRyYXZlcnNhbFN0YXRlLCBwYXRoTGVuZ3RoQXBwbGllckZ1bmN0
aW9uKTsKLSAgICBvayA9IHRyYXZlcnNhbFN0YXRlLm1fc3VjY2VzczsKLSAgICByZXR1cm4gdHJh
dmVyc2FsU3RhdGUubV9ub3JtYWxBbmdsZTsKKyAgICByZXR1cm4gdHJhdmVyc2FsU3RhdGVBdExl
bmd0aChsZW5ndGgsIG9rKS5tX25vcm1hbEFuZ2xlOwogfQogCiB2b2lkIFBhdGg6OmFkZFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRTaXplJiByb3VuZGluZ1Jh
ZGlpLCBSb3VuZGVkUmVjdFN0cmF0ZWd5IHN0cmF0ZWd5KQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gMTgyMzQxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwogICAg
IGNsYXNzIEZsb2F0U2l6ZTsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisgICAgY2xhc3Mg
UGF0aFRyYXZlcnNhbFN0YXRlOwogICAgIGNsYXNzIFJvdW5kZWRSZWN0OwogICAgIGNsYXNzIFN0
cm9rZVN0eWxlQXBwbGllcjsKIApAQCAtMTAwLDEwICsxMDEsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CiAgICAgICAgIEZs
b2F0UmVjdCBmYXN0Qm91bmRpbmdSZWN0KCkgY29uc3Q7CiAgICAgICAgIEZsb2F0UmVjdCBzdHJv
a2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiA9IDApIGNvbnN0OwotICAgICAgICAK
KwogICAgICAgICBmbG9hdCBsZW5ndGgoKSBjb25zdDsKLSAgICAgICAgRmxvYXRQb2ludCBwb2lu
dEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0OwotICAgICAgICBmbG9hdCBu
b3JtYWxBbmdsZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0OworICAgICAg
ICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGVBdExlbmd0aChmbG9hdCwgYm9vbCYp
IGNvbnN0OworICAgICAgICBGbG9hdFBvaW50IHBvaW50QXRMZW5ndGgoZmxvYXQsIGJvb2wmKSBj
b25zdDsKKyAgICAgICAgZmxvYXQgbm9ybWFsQW5nbGVBdExlbmd0aChmbG9hdCwgYm9vbCYpIGNv
bnN0OwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXIoKTsKICAgICAgICAgYm9v
bCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9wYXRoOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAJ
KHJldmlzaW9uIDE4MjM0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bh
dGhUcmF2ZXJzYWxTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDkgQEAgc3Rh
dGljIGlubGluZSBGbG9hdFBvaW50IG1pZFBvaW50KGNvbnN0IAogCiBzdGF0aWMgaW5saW5lIGZs
b2F0IGRpc3RhbmNlTGluZShjb25zdCBGbG9hdFBvaW50JiBzdGFydCwgY29uc3QgRmxvYXRQb2lu
dCYgZW5kKQogewotICAgIHJldHVybiBzcXJ0ZigoZW5kLngoKSAtIHN0YXJ0LngoKSkgKiAoZW5k
LngoKSAtIHN0YXJ0LngoKSkgKyAoZW5kLnkoKSAtIHN0YXJ0LnkoKSkgKiAoZW5kLnkoKSAtIHN0
YXJ0LnkoKSkpOworICAgIGZsb2F0IGR4ID0gZW5kLngoKSAtIHN0YXJ0LngoKTsKKyAgICBmbG9h
dCBkeSA9IGVuZC55KCkgLSBzdGFydC55KCk7CisgICAgcmV0dXJuIHNxcnRmKGR4ICogZHggKyBk
eSAqIGR5KTsKIH0KIAogc3RydWN0IFF1YWRyYXRpY0JlemllciB7CkBAIC0xMTQsMTEwICsxMTYs
MTQ4IEBAIHN0cnVjdCBDdWJpY0JlemllciB7CiAvLyBBbm90aGVyIGNoZWNrIHdoaWNoIGlzIHBv
c3NpYmxlIHVwLWZyb250ICh0byBzZW5kIHVzIGRvd24gdGhlIGZhc3QgcGF0aCkgd291bGQgYmUg
dG8gY2hlY2sgaWYKIC8vIGFwcHJveGltYXRlRGlzdGFuY2UoKSArIGN1cnJlbnQgdG90YWwgZGlz
dGFuY2UgPiBkZXNpcmVkIGRpc3RhbmNlCiB0ZW1wbGF0ZTxjbGFzcyBDdXJ2ZVR5cGU+Ci1zdGF0
aWMgZmxvYXQgY3VydmVMZW5ndGgoUGF0aFRyYXZlcnNhbFN0YXRlJiB0cmF2ZXJzYWxTdGF0ZSwg
Q3VydmVUeXBlIGN1cnZlKQorc3RhdGljIGZsb2F0IGN1cnZlTGVuZ3RoKFBhdGhUcmF2ZXJzYWxT
dGF0ZSYgdHJhdmVyc2FsU3RhdGUsIGNvbnN0IEN1cnZlVHlwZSYgZWxlbWVudEN1cnZlKQogewog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjdXJ2ZVN0YWNrRGVwdGhMaW1pdCA9IDIwOwotCi0g
ICAgVmVjdG9yPEN1cnZlVHlwZT4gY3VydmVTdGFjazsKLSAgICBjdXJ2ZVN0YWNrLmFwcGVuZChj
dXJ2ZSk7Ci0KKyAgICBDdXJ2ZVR5cGUgY3VydmUgPSBlbGVtZW50Q3VydmU7CisgICAgVmVjdG9y
PEN1cnZlVHlwZSwgY3VydmVTdGFja0RlcHRoTGltaXQ+IGN1cnZlU3RhY2s7CiAgICAgZmxvYXQg
dG90YWxMZW5ndGggPSAwOwotICAgIGRvIHsKKworICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAg
IGZsb2F0IGxlbmd0aCA9IGN1cnZlLmFwcHJveGltYXRlRGlzdGFuY2UoKTsKLSAgICAgICAgaWYg
KChsZW5ndGggLSBkaXN0YW5jZUxpbmUoY3VydmUuc3RhcnQsIGN1cnZlLmVuZCkpID4ga1BhdGhT
ZWdtZW50TGVuZ3RoVG9sZXJhbmNlICYmIGN1cnZlU3RhY2suc2l6ZSgpIDw9IGN1cnZlU3RhY2tE
ZXB0aExpbWl0KSB7CisKKyAgICAgICAgaWYgKChsZW5ndGggLSBkaXN0YW5jZUxpbmUoY3VydmUu
c3RhcnQsIGN1cnZlLmVuZCkpID4ga1BhdGhTZWdtZW50TGVuZ3RoVG9sZXJhbmNlICYmIGN1cnZl
U3RhY2suc2l6ZSgpIDwgY3VydmVTdGFja0RlcHRoTGltaXQpIHsKICAgICAgICAgICAgIEN1cnZl
VHlwZSBsZWZ0Q3VydmU7CiAgICAgICAgICAgICBDdXJ2ZVR5cGUgcmlnaHRDdXJ2ZTsKICAgICAg
ICAgICAgIGN1cnZlLnNwbGl0KGxlZnRDdXJ2ZSwgcmlnaHRDdXJ2ZSk7CiAgICAgICAgICAgICBj
dXJ2ZSA9IGxlZnRDdXJ2ZTsKICAgICAgICAgICAgIGN1cnZlU3RhY2suYXBwZW5kKHJpZ2h0Q3Vy
dmUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gbGVuZ3Ro
OwotICAgICAgICAgICAgaWYgKHRyYXZlcnNhbFN0YXRlLm1fYWN0aW9uID09IFBhdGhUcmF2ZXJz
YWxTdGF0ZTo6VHJhdmVyc2FsUG9pbnRBdExlbmd0aAotICAgICAgICAgICAgIHx8IHRyYXZlcnNh
bFN0YXRlLm1fYWN0aW9uID09IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsTm9ybWFsQW5n
bGVBdExlbmd0aCkgewotICAgICAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRlLm1fcHJldmlvdXMg
PSBjdXJ2ZS5zdGFydDsKLSAgICAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5tX2N1cnJlbnQg
PSBjdXJ2ZS5lbmQ7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYXZlcnNhbFN0YXRlLm1fdG90YWxM
ZW5ndGggKyB0b3RhbExlbmd0aCA+IHRyYXZlcnNhbFN0YXRlLm1fZGVzaXJlZExlbmd0aCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsTGVuZ3RoOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY3VydmUgPSBjdXJ2ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgIGN1cnZlU3Rh
Y2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICB9
IHdoaWxlICghY3VydmVTdGFjay5pc0VtcHR5KCkpOwotICAgIAorCisgICAgICAgIHRvdGFsTGVu
Z3RoICs9IGxlbmd0aDsKKyAgICAgICAgaWYgKHRyYXZlcnNhbFN0YXRlLm1fYWN0aW9uID09IFBh
dGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsVmVjdG9yQXRMZW5ndGgpIHsKKyAgICAgICAgICAg
IHRyYXZlcnNhbFN0YXRlLm1fcHJldmlvdXMgPSBjdXJ2ZS5zdGFydDsKKyAgICAgICAgICAgIHRy
YXZlcnNhbFN0YXRlLm1fY3VycmVudCA9IGN1cnZlLmVuZDsKKyAgICAgICAgICAgIGlmICh0cmF2
ZXJzYWxTdGF0ZS5tX3RvdGFsTGVuZ3RoICsgdG90YWxMZW5ndGggPiB0cmF2ZXJzYWxTdGF0ZS5t
X2Rlc2lyZWRMZW5ndGgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY3VydmVTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjdXJ2ZSA9IGN1cnZlU3RhY2subGFzdCgpOworICAgICAgICBjdXJ2ZVN0YWNrLnJlbW92
ZUxhc3QoKTsKKyAgICB9CisKKyAgICBpZiAodHJhdmVyc2FsU3RhdGUubV9hY3Rpb24gIT0gUGF0
aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxWZWN0b3JBdExlbmd0aCkgeworICAgICAgICBBU1NF
UlQoY3VydmUuZW5kID09IGVsZW1lbnRDdXJ2ZS5lbmQpOworICAgICAgICB0cmF2ZXJzYWxTdGF0
ZS5tX3ByZXZpb3VzID0gY3VydmUuc3RhcnQ7CisgICAgICAgIHRyYXZlcnNhbFN0YXRlLm1fY3Vy
cmVudCA9IGN1cnZlLmVuZDsKKyAgICB9CisKICAgICByZXR1cm4gdG90YWxMZW5ndGg7CiB9CiAK
LVBhdGhUcmF2ZXJzYWxTdGF0ZTo6UGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxBY3Rp
b24gYWN0aW9uKQorUGF0aFRyYXZlcnNhbFN0YXRlOjpQYXRoVHJhdmVyc2FsU3RhdGUoUGF0aFRy
YXZlcnNhbEFjdGlvbiBhY3Rpb24sIGZsb2F0IGRlc2lyZWRMZW5ndGgpCiAgICAgOiBtX2FjdGlv
bihhY3Rpb24pCi0gICAgLCBtX3N1Y2Nlc3MoZmFsc2UpCi0gICAgLCBtX3RvdGFsTGVuZ3RoKDAp
Ci0gICAgLCBtX3NlZ21lbnRJbmRleCgwKQotICAgICwgbV9kZXNpcmVkTGVuZ3RoKDApCi0gICAg
LCBtX25vcm1hbEFuZ2xlKDApCisgICAgLCBtX2Rlc2lyZWRMZW5ndGgoZGVzaXJlZExlbmd0aCkK
IHsKIH0KIAotZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpjbG9zZVN1YnBhdGgoKQordm9pZCBQ
YXRoVHJhdmVyc2FsU3RhdGU6OmNsb3NlU3VicGF0aCgpCiB7Ci0gICAgZmxvYXQgZGlzdGFuY2Ug
PSBkaXN0YW5jZUxpbmUobV9jdXJyZW50LCBtX3N0YXJ0KTsKLSAgICBtX2N1cnJlbnQgPSBtX2Nv
bnRyb2wxID0gbV9jb250cm9sMiA9IG1fc3RhcnQ7Ci0gICAgcmV0dXJuIGRpc3RhbmNlOworICAg
IG1fdG90YWxMZW5ndGggKz0gZGlzdGFuY2VMaW5lKG1fY3VycmVudCwgbV9zdGFydCk7CisgICAg
bV9jdXJyZW50ID0gbV9zdGFydDsKIH0KIAotZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjptb3Zl
VG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6bW92
ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewotICAgIG1fY3VycmVudCA9IG1fc3RhcnQg
PSBtX2NvbnRyb2wxID0gbV9jb250cm9sMiA9IHBvaW50OwotICAgIHJldHVybiAwOworICAgIG1f
cHJldmlvdXMgPSBtX2N1cnJlbnQgPSBtX3N0YXJ0ID0gcG9pbnQ7CiB9CiAKLWZsb2F0IFBhdGhU
cmF2ZXJzYWxTdGF0ZTo6bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBQYXRo
VHJhdmVyc2FsU3RhdGU6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKLSAgICBm
bG9hdCBkaXN0YW5jZSA9IGRpc3RhbmNlTGluZShtX2N1cnJlbnQsIHBvaW50KTsKLSAgICBtX2N1
cnJlbnQgPSBtX2NvbnRyb2wxID0gbV9jb250cm9sMiA9IHBvaW50OwotICAgIHJldHVybiBkaXN0
YW5jZTsKKyAgICBtX3RvdGFsTGVuZ3RoICs9IGRpc3RhbmNlTGluZShtX2N1cnJlbnQsIHBvaW50
KTsKKyAgICBtX2N1cnJlbnQgPSBwb2ludDsKIH0KIAotZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRl
OjpxdWFkcmF0aWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sLCBjb25zdCBG
bG9hdFBvaW50JiBuZXdFbmQpCit2b2lkIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cXVhZHJhdGljQmV6
aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbCwgY29uc3QgRmxvYXRQb2ludCYgbmV3
RW5kKQogewotICAgIGZsb2F0IGRpc3RhbmNlID0gY3VydmVMZW5ndGg8UXVhZHJhdGljQmV6aWVy
PigqdGhpcywgUXVhZHJhdGljQmV6aWVyKG1fY3VycmVudCwgbmV3Q29udHJvbCwgbmV3RW5kKSk7
Ci0KLSAgICBtX2NvbnRyb2wxID0gbmV3Q29udHJvbDsKLSAgICBtX2NvbnRyb2wyID0gbmV3RW5k
OwotCi0gICAgaWYgKG1fYWN0aW9uICE9IFRyYXZlcnNhbFBvaW50QXRMZW5ndGggJiYgbV9hY3Rp
b24gIT0gVHJhdmVyc2FsTm9ybWFsQW5nbGVBdExlbmd0aCkgCi0gICAgICAgIG1fY3VycmVudCA9
IG5ld0VuZDsKKyAgICBtX3RvdGFsTGVuZ3RoICs9IGN1cnZlTGVuZ3RoPFF1YWRyYXRpY0Jlemll
cj4oKnRoaXMsIFF1YWRyYXRpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRyb2wsIG5ld0VuZCkp
OworfQogCi0gICAgcmV0dXJuIGRpc3RhbmNlOwordm9pZCBQYXRoVHJhdmVyc2FsU3RhdGU6OmN1
YmljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDEsIGNvbnN0IEZsb2F0UG9p
bnQmIG5ld0NvbnRyb2wyLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQpCit7CisgICAgbV90b3Rh
bExlbmd0aCArPSBjdXJ2ZUxlbmd0aDxDdWJpY0Jlemllcj4oKnRoaXMsIEN1YmljQmV6aWVyKG1f
Y3VycmVudCwgbmV3Q29udHJvbDEsIG5ld0NvbnRyb2wyLCBuZXdFbmQpKTsKIH0KIAotZmxvYXQg
UGF0aFRyYXZlcnNhbFN0YXRlOjpjdWJpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0Nv
bnRyb2wxLCBjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sMiwgY29uc3QgRmxvYXRQb2ludCYg
bmV3RW5kKQorYm9vbCBQYXRoVHJhdmVyc2FsU3RhdGU6OmZpbmFsaXplQXBwZW5kUGF0aEVsZW1l
bnQoKQogewotICAgIGZsb2F0IGRpc3RhbmNlID0gY3VydmVMZW5ndGg8Q3ViaWNCZXppZXI+KCp0
aGlzLCBDdWJpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRyb2wxLCBuZXdDb250cm9sMiwgbmV3
RW5kKSk7CisgICAgaWYgKG1fYWN0aW9uID09IFRyYXZlcnNhbFRvdGFsTGVuZ3RoKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2NvbnRyb2wxID0gbmV3RW5kOwotICAgIG1fY29udHJv
bDIgPSBuZXdDb250cm9sMjsKLSAKLSAgICBpZiAobV9hY3Rpb24gIT0gVHJhdmVyc2FsUG9pbnRB
dExlbmd0aCAmJiBtX2FjdGlvbiAhPSBUcmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoKSAKLSAg
ICAgICAgbV9jdXJyZW50ID0gbmV3RW5kOworICAgIGlmIChtX2FjdGlvbiA9PSBUcmF2ZXJzYWxT
ZWdtZW50QXRMZW5ndGgpIHsKKyAgICAgICAgaWYgKG1fdG90YWxMZW5ndGggPj0gbV9kZXNpcmVk
TGVuZ3RoKQorICAgICAgICAgICAgbV9zdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1f
c3VjY2VzczsKKyAgICB9CiAKLSAgICByZXR1cm4gZGlzdGFuY2U7Ci19CisgICAgQVNTRVJUKG1f
YWN0aW9uID09IFRyYXZlcnNhbFZlY3RvckF0TGVuZ3RoKTsKIAotdm9pZCBQYXRoVHJhdmVyc2Fs
U3RhdGU6OnByb2Nlc3NTZWdtZW50KCkKLXsKLSAgICBpZiAobV9hY3Rpb24gPT0gVHJhdmVyc2Fs
U2VnbWVudEF0TGVuZ3RoICYmIG1fdG90YWxMZW5ndGggPj0gbV9kZXNpcmVkTGVuZ3RoKQotICAg
ICAgICBtX3N1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAKLSAgICBpZiAoKG1fYWN0aW9uID09IFRy
YXZlcnNhbFBvaW50QXRMZW5ndGggfHwgbV9hY3Rpb24gPT0gVHJhdmVyc2FsTm9ybWFsQW5nbGVB
dExlbmd0aCkgJiYgbV90b3RhbExlbmd0aCA+PSBtX2Rlc2lyZWRMZW5ndGgpIHsKKyAgICBpZiAo
bV90b3RhbExlbmd0aCA+PSBtX2Rlc2lyZWRMZW5ndGgpIHsKICAgICAgICAgZmxvYXQgc2xvcGUg
PSBGbG9hdFBvaW50KG1fY3VycmVudCAtIG1fcHJldmlvdXMpLnNsb3BlQW5nbGVSYWRpYW5zKCk7
Ci0gICAgICAgIGlmIChtX2FjdGlvbiA9PSBUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoKSB7Ci0gICAg
ICAgICAgICBmbG9hdCBvZmZzZXQgPSBtX2Rlc2lyZWRMZW5ndGggLSBtX3RvdGFsTGVuZ3RoOwot
ICAgICAgICAgICAgbV9jdXJyZW50Lm1vdmUob2Zmc2V0ICogY29zZihzbG9wZSksIG9mZnNldCAq
IHNpbmYoc2xvcGUpKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGZsb2F0IG9mZnNldCA9IG1f
ZGVzaXJlZExlbmd0aCAtIG1fdG90YWxMZW5ndGg7CisgICAgICAgIG1fY3VycmVudC5tb3ZlKG9m
ZnNldCAqIGNvc2Yoc2xvcGUpLCBvZmZzZXQgKiBzaW5mKHNsb3BlKSk7CisKKyAgICAgICAgaWYg
KCFtX3plcm9WZWN0b3IgJiYgIW1fZGVzaXJlZExlbmd0aCkKKyAgICAgICAgICAgIG1femVyb1Zl
Y3RvciA9IHRydWU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9zdWNjZXNzID0gdHJ1
ZTsKICAgICAgICAgICAgIG1fbm9ybWFsQW5nbGUgPSByYWQyZGVnKHNsb3BlKTsKLSAgICAgICAg
bV9zdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KKwogICAgIG1fcHJldmlvdXMgPSBt
X2N1cnJlbnQ7CisgICAgcmV0dXJuIG1fc3VjY2VzczsKK30KKworYm9vbCBQYXRoVHJhdmVyc2Fs
U3RhdGU6OmFwcGVuZFBhdGhFbGVtZW50KFBhdGhFbGVtZW50VHlwZSB0eXBlLCBjb25zdCBGbG9h
dFBvaW50KiBwb2ludHMpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBQYXRoRWxl
bWVudE1vdmVUb1BvaW50OgorICAgICAgICBtb3ZlVG8ocG9pbnRzWzBdKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQYXRoRWxlbWVudEFkZExpbmVUb1BvaW50OgorICAgICAgICBsaW5lVG8o
cG9pbnRzWzBdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXRoRWxlbWVudEFkZFF1YWRD
dXJ2ZVRvUG9pbnQ6CisgICAgICAgIHF1YWRyYXRpY0JlemllclRvKHBvaW50c1swXSwgcG9pbnRz
WzFdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXRoRWxlbWVudEFkZEN1cnZlVG9Qb2lu
dDoKKyAgICAgICAgY3ViaWNCZXppZXJUbyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJd
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXRoRWxlbWVudENsb3NlU3VicGF0aDoKKyAg
ICAgICAgY2xvc2VTdWJwYXRoKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gZmluYWxpemVBcHBlbmRQYXRoRWxlbWVudCgpOworfQorCitib29sIFBhdGhUcmF2ZXJz
YWxTdGF0ZTo6cHJvY2Vzc1BhdGhFbGVtZW50KFBhdGhFbGVtZW50VHlwZSB0eXBlLCBjb25zdCBG
bG9hdFBvaW50KiBwb2ludHMpCit7CisgICAgaWYgKG1fc3VjY2VzcykKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAobV96ZXJvVmVjdG9yKSB7CisgICAgICAgIFBhdGhUcmF2ZXJzYWxT
dGF0ZSB0cmF2ZXJzYWxTdGF0ZSgqdGhpcyk7CisgICAgICAgIG1fc3VjY2VzcyA9IHRyYXZlcnNh
bFN0YXRlLmFwcGVuZFBhdGhFbGVtZW50KHR5cGUsIHBvaW50cyk7CisgICAgICAgIG1fbm9ybWFs
QW5nbGUgPSB0cmF2ZXJzYWxTdGF0ZS5tX25vcm1hbEFuZ2xlOworICAgICAgICByZXR1cm4gbV9z
dWNjZXNzOworICAgIH0KKworICAgIHJldHVybiBhcHBlbmRQYXRoRWxlbWVudCh0eXBlLCBwb2lu
dHMpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
VHJhdmVyc2FsU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuaAkocmV2aXNpb24gMTgyMzQxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgUGF0aFRyYXZlcnNhbFN0YXRlX2gKIAog
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJQYXRoLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMzQsMzggKzM1LDQxIEBAIGNsYXNzIFBhdGhUcmF2ZXJzYWxTdGF0ZSB7
CiBwdWJsaWM6CiAgICAgZW51bSBQYXRoVHJhdmVyc2FsQWN0aW9uIHsKICAgICAgICAgVHJhdmVy
c2FsVG90YWxMZW5ndGgsCi0gICAgICAgIFRyYXZlcnNhbFBvaW50QXRMZW5ndGgsCisgICAgICAg
IFRyYXZlcnNhbFZlY3RvckF0TGVuZ3RoLAogICAgICAgICBUcmF2ZXJzYWxTZWdtZW50QXRMZW5n
dGgsCi0gICAgICAgIFRyYXZlcnNhbE5vcm1hbEFuZ2xlQXRMZW5ndGgKICAgICB9OwogCi0gICAg
UGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxBY3Rpb24pOworICAgIFBhdGhUcmF2ZXJz
YWxTdGF0ZShQYXRoVHJhdmVyc2FsQWN0aW9uLCBmbG9hdCA9IDApOwogCi0gICAgZmxvYXQgY2xv
c2VTdWJwYXRoKCk7Ci0gICAgZmxvYXQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICBm
bG9hdCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpOwotICAgIGZsb2F0IHF1YWRyYXRpY0Jlemll
clRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0Vu
ZCk7Ci0gICAgZmxvYXQgY3ViaWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9s
MSwgY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDIsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0Vu
ZCk7Ci0gICAgCi0gICAgdm9pZCBwcm9jZXNzU2VnbWVudCgpOworcHJpdmF0ZToKKyAgICB2b2lk
IGNsb3NlU3VicGF0aCgpOworICAgIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAg
ICB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBxdWFkcmF0aWNCZXpp
ZXJUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgY3Vi
aWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZs
b2F0UG9pbnQmKTsKKworICAgIGJvb2wgZmluYWxpemVBcHBlbmRQYXRoRWxlbWVudCgpOworICAg
IGJvb2wgYXBwZW5kUGF0aEVsZW1lbnQoUGF0aEVsZW1lbnRUeXBlLCBjb25zdCBGbG9hdFBvaW50
Kik7CisKK3B1YmxpYzoKKyAgICBib29sIHByb2Nlc3NQYXRoRWxlbWVudChQYXRoRWxlbWVudFR5
cGUsIGNvbnN0IEZsb2F0UG9pbnQqKTsKKyAgICBib29sIHByb2Nlc3NQYXRoRWxlbWVudChjb25z
dCBQYXRoRWxlbWVudCogZWxlbWVudCkgeyByZXR1cm4gcHJvY2Vzc1BhdGhFbGVtZW50KGVsZW1l
bnQtPnR5cGUsIGVsZW1lbnQtPnBvaW50cyk7IH0KIAogcHVibGljOgogICAgIFBhdGhUcmF2ZXJz
YWxBY3Rpb24gbV9hY3Rpb247Ci0gICAgYm9vbCBtX3N1Y2Nlc3M7CisgICAgYm9vbCBtX3N1Y2Nl
c3MgeyBmYWxzZSB9OwogCiAgICAgRmxvYXRQb2ludCBtX2N1cnJlbnQ7CiAgICAgRmxvYXRQb2lu
dCBtX3N0YXJ0OwotICAgIEZsb2F0UG9pbnQgbV9jb250cm9sMTsKLSAgICBGbG9hdFBvaW50IG1f
Y29udHJvbDI7CiAKLSAgICBmbG9hdCBtX3RvdGFsTGVuZ3RoOwotICAgIHVuc2lnbmVkIG1fc2Vn
bWVudEluZGV4OwotICAgIGZsb2F0IG1fZGVzaXJlZExlbmd0aDsKKyAgICBmbG9hdCBtX3RvdGFs
TGVuZ3RoIHsgMCB9OworICAgIGZsb2F0IG1fZGVzaXJlZExlbmd0aCB7IDAgfTsKIAogICAgIC8v
IEZvciBub3JtYWwgY2FsY3VsYXRpb25zCiAgICAgRmxvYXRQb2ludCBtX3ByZXZpb3VzOwotICAg
IGZsb2F0IG1fbm9ybWFsQW5nbGU7IC8vIGRlZ3JlZXMKLX07ICAgIAorICAgIGZsb2F0IG1fbm9y
bWFsQW5nbGUgeyAwIH07IC8vIGRlZ3JlZXMKKyAgICBib29sIG1femVyb1ZlY3RvciB7IGZhbHNl
IH07Cit9OwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEVuZ2luZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAkocmV2aXNpb24gMTgyMzQxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlNWR1RleHRMYXlvdXRFbmdpbmUuaCIKIAorI2luY2x1ZGUgIlBhdGhUcmF2ZXJzYWxTdGF0
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKQEAgLTU1NCwxMyArNTU1LDE0IEBA
IHZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGkKICAgICAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICAgICAgRmxv
YXRQb2ludCBwb2ludCA9IG1fdGV4dFBhdGgucG9pbnRBdExlbmd0aCh0ZXh0UGF0aE9mZnNldCwg
b2spOworICAgICAgICAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKG1fdGV4
dFBhdGgudHJhdmVyc2FsU3RhdGVBdExlbmd0aCh0ZXh0UGF0aE9mZnNldCwgb2spKTsKICAgICAg
ICAgICAgIEFTU0VSVChvayk7CiAKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQgPSB0cmF2
ZXJzYWxTdGF0ZS5tX2N1cnJlbnQ7CiAgICAgICAgICAgICB4ID0gcG9pbnQueCgpOwogICAgICAg
ICAgICAgeSA9IHBvaW50LnkoKTsKLSAgICAgICAgICAgIGFuZ2xlID0gbV90ZXh0UGF0aC5ub3Jt
YWxBbmdsZUF0TGVuZ3RoKHRleHRQYXRoT2Zmc2V0LCBvayk7Ci0gICAgICAgICAgICBBU1NFUlQo
b2spOworCisgICAgICAgICAgICBhbmdsZSA9IHRyYXZlcnNhbFN0YXRlLm1fbm9ybWFsQW5nbGU7
CiAKICAgICAgICAgICAgIC8vIEZvciB2ZXJ0aWNhbCB0ZXh0IG9uIHBhdGgsIHRoZSBhY3R1YWwg
YW5nbGUgaGFzIHRvIGJlIHJvdGF0ZWQgOTAgZGVncmVlcyBhbnRpLWNsb2Nrd2lzZSwgbm90IHRo
ZSBvcmllbnRhdGlvbiBhbmdsZSEKICAgICAgICAgICAgIGlmIChtX2lzVmVydGljYWxUZXh0KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxODIzNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKKyNpbmNs
dWRlICJQYXRoVHJhdmVyc2FsU3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5o
IgogI2luY2x1ZGUgIlNWR0ltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR01QYXRoRWxlbWVu
dC5oIgpAQCAtMjE0LDE0ICsyMTUsMTggQEAgdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6
YnVpbGRUcmFucwogCiAgICAgYm9vbCBvayA9IGZhbHNlOwogICAgIGZsb2F0IHBvc2l0aW9uT25Q
YXRoID0gbV9hbmltYXRpb25QYXRoLmxlbmd0aCgpICogcGVyY2VudGFnZTsKLSAgICBGbG9hdFBv
aW50IHBvc2l0aW9uID0gbV9hbmltYXRpb25QYXRoLnBvaW50QXRMZW5ndGgocG9zaXRpb25PblBh
dGgsIG9rKTsKKworICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShtX2FuaW1h
dGlvblBhdGgudHJhdmVyc2FsU3RhdGVBdExlbmd0aChwb3NpdGlvbk9uUGF0aCwgb2spKTsKICAg
ICBpZiAoIW9rKQogICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0g
dHJhdmVyc2FsU3RhdGUubV9jdXJyZW50OworICAgIGZsb2F0IGFuZ2xlID0gdHJhdmVyc2FsU3Rh
dGUubV9ub3JtYWxBbmdsZTsKKwogICAgIHRyYW5zZm9ybS0+dHJhbnNsYXRlKHBvc2l0aW9uLngo
KSwgcG9zaXRpb24ueSgpKTsKICAgICBSb3RhdGVNb2RlIHJvdGF0ZU1vZGUgPSB0aGlzLT5yb3Rh
dGVNb2RlKCk7CiAgICAgaWYgKHJvdGF0ZU1vZGUgIT0gUm90YXRlQXV0byAmJiByb3RhdGVNb2Rl
ICE9IFJvdGF0ZUF1dG9SZXZlcnNlKQogICAgICAgICByZXR1cm47Ci0gICAgZmxvYXQgYW5nbGUg
PSBtX2FuaW1hdGlvblBhdGgubm9ybWFsQW5nbGVBdExlbmd0aChwb3NpdGlvbk9uUGF0aCwgb2sp
OwogICAgIGlmIChyb3RhdGVNb2RlID09IFJvdGF0ZUF1dG9SZXZlcnNlKQogICAgICAgICBhbmds
ZSArPSAxODA7CiAgICAgdHJhbnNmb3JtLT5yb3RhdGUoYW5nbGUpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmNwcAkocmV2
aXNpb24gMTgyMzQxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwzMSArMjksMzMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpTVkdQYXRoVHJhdmVy
c2FsU3RhdGVCdWlsZGVyKCkKICAgICA6IG1fdHJhdmVyc2FsU3RhdGUoMCkKKyAgICAsIG1fc2Vn
bWVudEluZGV4KDApCiB7CiB9CiAKIHZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6
bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBib29sLCBQYXRoQ29vcmRpbmF0
ZU1vZGUpCiB7CiAgICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwotICAgIG1fdHJhdmVyc2Fs
U3RhdGUtPm1fdG90YWxMZW5ndGggKz0gbV90cmF2ZXJzYWxTdGF0ZS0+bW92ZVRvKHRhcmdldFBv
aW50KTsKKyAgICBtX3RyYXZlcnNhbFN0YXRlLT5wcm9jZXNzUGF0aEVsZW1lbnQoUGF0aEVsZW1l
bnRNb3ZlVG9Qb2ludCwgJnRhcmdldFBvaW50KTsKIH0KIAogdm9pZCBTVkdQYXRoVHJhdmVyc2Fs
U3RhdGVCdWlsZGVyOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhD
b29yZGluYXRlTW9kZSkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7Ci0gICAgbV90
cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3RyYXZlcnNhbFN0YXRlLT5saW5lVG8o
dGFyZ2V0UG9pbnQpOworICAgIG1fdHJhdmVyc2FsU3RhdGUtPnByb2Nlc3NQYXRoRWxlbWVudChQ
YXRoRWxlbWVudEFkZExpbmVUb1BvaW50LCAmdGFyZ2V0UG9pbnQpOwogfQogCiB2b2lkIFNWR1Bh
dGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0
UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSkKIHsKKyAgICBGbG9hdFBvaW50IHBvaW50c1tdID0g
eyBwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQgfTsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxT
dGF0ZSk7Ci0gICAgbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3RyYXZlcnNh
bFN0YXRlLT5jdWJpY0JlemllclRvKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCk7CisgICAg
bV90cmF2ZXJzYWxTdGF0ZS0+cHJvY2Vzc1BhdGhFbGVtZW50KFBhdGhFbGVtZW50QWRkQ3VydmVU
b1BvaW50LCBwb2ludHMpOwogfQogCiB2b2lkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6
OmNsb3NlUGF0aCgpCiB7CiAgICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwotICAgIG1fdHJh
dmVyc2FsU3RhdGUtPm1fdG90YWxMZW5ndGggKz0gbV90cmF2ZXJzYWxTdGF0ZS0+Y2xvc2VTdWJw
YXRoKCk7CisgICAgbV90cmF2ZXJzYWxTdGF0ZS0+cHJvY2Vzc1BhdGhFbGVtZW50KFBhdGhFbGVt
ZW50Q2xvc2VTdWJwYXRoLCBudWxscHRyKTsKIH0KIAogdm9pZCBTVkdQYXRoVHJhdmVyc2FsU3Rh
dGVCdWlsZGVyOjpzZXREZXNpcmVkTGVuZ3RoKGZsb2F0IGRlc2lyZWRMZW5ndGgpCkBAIC02NSwy
MiArNjcsOSBAQCB2b2lkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnNldERlCiBib29s
IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmNvbnRpbnVlQ29uc3VtaW5nKCkKIHsKICAg
ICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7ICAgIAotICAgIG1fdHJhdmVyc2FsU3RhdGUtPnBy
b2Nlc3NTZWdtZW50KCk7CiAgICAgcmV0dXJuICFtX3RyYXZlcnNhbFN0YXRlLT5tX3N1Y2Nlc3M7
CiB9CiAKLXZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6aW5jcmVtZW50UGF0aFNl
Z21lbnRDb3VudCgpCi17Ci0gICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwotICAgICsrbV90
cmF2ZXJzYWxTdGF0ZS0+bV9zZWdtZW50SW5kZXg7Ci19Ci0KLXVuc2lnbmVkIFNWR1BhdGhUcmF2
ZXJzYWxTdGF0ZUJ1aWxkZXI6OnBhdGhTZWdtZW50SW5kZXgoKQotewotICAgIEFTU0VSVChtX3Ry
YXZlcnNhbFN0YXRlKTsKLSAgICByZXR1cm4gbV90cmF2ZXJzYWxTdGF0ZS0+bV9zZWdtZW50SW5k
ZXg7Ci19Ci0KIGZsb2F0IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnRvdGFsTGVuZ3Ro
KCkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmgJKHJldmlzaW9uIDE4
MjM0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE1ICszMiwxNSBAQCBjbGFzcyBTVkdQYXRoVHJhdmVy
c2FsU3RhdGVCdWlsZGVyIDogcHViCiBwdWJsaWM6CiAgICAgU1ZHUGF0aFRyYXZlcnNhbFN0YXRl
QnVpbGRlcigpOwogCi0gICAgdW5zaWduZWQgcGF0aFNlZ21lbnRJbmRleCgpOworICAgIHVuc2ln
bmVkIHBhdGhTZWdtZW50SW5kZXgoKSB7IHJldHVybiBtX3NlZ21lbnRJbmRleDsgfQogICAgIGZs
b2F0IHRvdGFsTGVuZ3RoKCk7CiAgICAgU1ZHUG9pbnQgY3VycmVudFBvaW50KCk7CiAKICAgICB2
b2lkIHNldEN1cnJlbnRUcmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGUqIHRyYXZlcnNh
bFN0YXRlKSB7IG1fdHJhdmVyc2FsU3RhdGUgPSB0cmF2ZXJzYWxTdGF0ZTsgfQogICAgIHZvaWQg
c2V0RGVzaXJlZExlbmd0aChmbG9hdCk7Ci0gICAgdmlydHVhbCB2b2lkIGluY3JlbWVudFBhdGhT
ZWdtZW50Q291bnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5jcmVtZW50UGF0aFNl
Z21lbnRDb3VudCgpIG92ZXJyaWRlIHsgKyttX3NlZ21lbnRJbmRleDsgfQogICAgIHZpcnR1YWwg
Ym9vbCBjb250aW51ZUNvbnN1bWluZygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjbGVh
bnVwKCkgb3ZlcnJpZGUgeyBtX3RyYXZlcnNhbFN0YXRlID0gMDsgfQorICAgIHZpcnR1YWwgdm9p
ZCBjbGVhbnVwKCkgb3ZlcnJpZGUgeyBtX3RyYXZlcnNhbFN0YXRlID0gbnVsbHB0ciwgbV9zZWdt
ZW50SW5kZXggPSAwOyB9CiAKIHByaXZhdGU6CiAgICAgLy8gVXNlZCBpbiBVbmFsdGVyZWRQYXJz
aW5nL05vcm1hbGl6ZWRQYXJzaW5nIG1vZGVzLgpAQCAtNTksNiArNTksNyBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sLCBj
b25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSBvdmVycmlkZSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CiAKICAgICBQYXRoVHJhdmVyc2FsU3RhdGUqIG1fdHJhdmVyc2FsU3Rh
dGU7CisgICAgdW5zaWduZWQgbV9zZWdtZW50SW5kZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhVdGlsaXRpZXMuY3BwCShyZXZp
c2lvbiAxODIzNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxOSw3ICszMTksNyBAQCBib29sIGdldFBvaW50QXRMZW5ndGhP
ZlNWR1BhdGhCeXRlU3RyZWFtCiAgICAgaWYgKHN0cmVhbS0+aXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0
aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoKTsKKyAgICBQYXRoVHJhdmVy
c2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxWZWN0
b3JBdExlbmd0aCk7CiAgICAgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlciogYnVpbGRlciA9
IGdsb2JhbFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIodHJhdmVyc2FsU3RhdGUsIGxlbmd0
aCk7CiAKICAgICBhdXRvIHNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHUGF0aEJ5dGVTdHJl
YW1Tb3VyY2U+KHN0cmVhbSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250621</attachid>
            <date>2015-04-12 20:49:28 -0700</date>
            <delta_ts>2015-04-14 15:53:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141570-20150412204834.patch</filename>
            <type>text/plain</type>
            <size>56464</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODI2NzYpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE1LTA0LTEyICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgdGV4
dFBhdGggbGF5b3V0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTcwLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1dCBkb3duIHRoZSB0aW1lIHNwZW50IGlu
IHRyYXZlcnNpbmcgdGhlIHBhdGggZm9yIHRleHQgYnkgNTAlLiBJbnN0ZWFkCisgICAgICAgIG9m
IHRyYXZlcnNpbmcgdGhlIHBhdGggdHdpY2UgYXQgYSBjZXJ0YWluIGxlbmd0aDogb25lIHRpbWUg
Zm9yIHRoZSBwb3NpdGlvbgorICAgICAgICBhbmQgdGhlIHNlY29uZCB0aW1lIGZvciB0aGUgYW5n
bGUsIHdlIGNhbiBtZXJnZSB0aGVzZSB0d28gcGFzc2VzIGludG8gb25lLgorCisgICAgICAgICog
U1ZHL1RleHRPblBhdGhTaW1wbGUuaHRtbDogQWRkZWQuCisgICAgICAgICogU1ZHL3Jlc291cmNl
cy9UZXh0T25QYXRoU2ltcGxlLnN2ZzogQWRkZWQuCisKIDIwMTUtMDQtMDkgIFphbGFuIEJ1anRh
cyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1wbGUgbGluZSBsYXlvdXQocmVncmVz
c2lvbik6IENhbGxpbmcgaW5uZXJUZXh0IG9uIFJlbmRlckZsb3cgd2l0aCBtdWx0aXBsZSBjaGls
ZHJlbiBpcyBzbG93LgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9TVkcvVGV4dE9uUGF0aFNpbXBs
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvU1ZHL1RleHRPblBhdGhTaW1w
bGUuaHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvU1ZHL1RleHRPblBhdGhT
aW1wbGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0PgorICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgUGVyZlRlc3RS
dW5uZXIubWVhc3VyZVBhZ2VMb2FkVGltZSh7cGF0aDogInJlc291cmNlcy9UZXh0T25QYXRoU2lt
cGxlLnN2ZyJ9KTsKKyAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+CkluZGV4OiBQZXJmb3JtYW5jZVRl
c3RzL1NWRy9yZXNvdXJjZXMvVGV4dE9uUGF0aFNpbXBsZS5zdmcKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVy
Zm9ybWFuY2VUZXN0cy9TVkcvcmVzb3VyY2VzL1RleHRPblBhdGhTaW1wbGUuc3ZnCShyZXZpc2lv
biAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9TVkcvcmVzb3VyY2VzL1RleHRPblBhdGhTaW1wbGUu
c3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKzxzdmcgd2lkdGg9IjEwMCUiIGhl
aWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDQwMDAgMjUwMCIKKyAgICAgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDAvc3ZnIiAKKyAgICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGxpbmsiPgorICA8ZGVmcz4KKyAgICA8cGF0aCBpZD0iU2ltcGxlUGF0aCIKKyAgICAg
ICAgICBkPSJNIDEwMCAgMjAwIAorICAgICAgICAgICAgIEMgMjAwICAxMDAgMzAwICAgIDAgIDQw
MCAgMTAwCisgICAgICAgICAgICAgQyA1MDAgIDIwMCA2MDAgIDMwMCAgNzAwICAyMDAKKyAgICAg
ICAgICAgICBDIDgwMCAgMTAwIDkwMCAgICAwICAxMDAwIDEwMAorICAgICAgICAgICAgIEMgMTEw
MCAyMDAgMTIwMCAzMDAgIDEzMDAgMjAwCisgICAgICAgICAgICAgQyAxNDAwIDEwMCAxNTAwICAg
MCAgMTYwMCAxMDAKKyAgICAgICAgICAgICBDIDE3MDAgMjAwIDE4MDAgMzAwICAxOTAwIDIwMCIv
PgorICA8L2RlZnM+CisKKyAgPGcgaWQ9IlRleHRPblBhdGgyNSI+CisgICAgPGcgaWQ9IlRleHRP
blBhdGg1Ij4KKyAgICAgIDxnIGlkPSJUZXh0T25QYXRoIj4KKyAgICAgICAgPHVzZSB4bGluazpo
cmVmPSIjU2ltcGxlUGF0aCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJyZWQiLz4KKyAgICAgICAgPHRl
eHQgZm9udC1mYW1pbHk9IlZlcmRhbmEiIGZvbnQtc2l6ZT0iNDIuNSI+CisgICAgICAgICAgPHRl
eHRQYXRoIHhsaW5rOmhyZWY9IiNTaW1wbGVQYXRoIj4KKyAgICAgICAgICAgIFdlIGdvIHVwLCB0
aGVuIHdlIGdvIGRvd24sIHRoZW4gdXAgYWdhaW4sIHRoZW4gd2UgZ28gZG93biwgdGhlbiB3ZSB1
cCBhZ2FpbiwgdGhlbiB3ZSBnbyBkb3duLgorICAgICAgICAgIDwvdGV4dFBhdGg+CisgICAgICAg
IDwvdGV4dD4KKyAgICAgIDwvZz4KKyAgICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGgi
IHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsNDApIi8+CisgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNU
ZXh0T25QYXRoIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDgwKSIvPgorICAgICAgPHVzZSB4bGlu
azpocmVmPSIjVGV4dE9uUGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxMjApIi8+CisgICAg
ICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDE2
MCkiLz4KKyAgICA8L2c+CisgIAorICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGg1IiB0
cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDIwMCkiLz4KKyAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0
T25QYXRoNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw0MDApIi8+CisgICAgPHVzZSB4bGluazpo
cmVmPSIjVGV4dE9uUGF0aDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsNjAwKSIvPgorICAgIDx1
c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGg1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDgwMCki
Lz4KKyAgPC9nPgorCisgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGgyNSIgdHJhbnNmb3Jt
PSJ0cmFuc2xhdGUoMjAwMCwwKSIvPgorICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoMjUi
IHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMTIwMCkiLz4KKyAgPHVzZSB4bGluazpocmVmPSIjVGV4
dE9uUGF0aDI1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDAwLDEyMDApIi8+CisKKyAgPHJlY3Qg
eD0iMSIgeT0iMSIgd2lkdGg9IjM5OTkiIGhlaWdodD0iMjQ5OSIgZmlsbD0ibm9uZSIgc3Ryb2tl
PSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiAvPgorPC9zdmc+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxODI2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNTMgQEAKKzIwMTUtMDQtMTIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3Vo
YWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICB0ZXh0UGF0aCBsYXlvdXQgcGVyZm9ybWFuY2Ug
aW1wcm92ZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDE1NzAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlIGJvdHRsZW5lY2sgb2YgdGhlIHRleHQtb24tcGF0aCBwZXJmb3JtYW5jZSBpcyB0
aGUgcG9zaXRpb24gYW5kIGFuZ2xlCisgICAgICAgIGNhbGN1bGF0aW9ucyBmb3IgZXZlcnkgc2lu
Z2xlIGNoYXJhY3Rlci4gSWYgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGlzCisgICAgICAgICdu
JyBhbmQgdGhlIG51bWJlciBvZiBwYXRoIGVsZW1lbnRzIGlzICdtJywgdGhlIHRvdGFsIG51bWJl
ciBvZiBwcm9jZXNzaW5nCisgICAgICAgIHRoZSBwYXRoIGVsZW1lbnRzIGlzIE8oMiB4IG4geCBt
KS4gV2hhdCBtYWtlcyBpdCByZWFsbHkgd29yc2UgaXMsIGZvciBldmVyeQorICAgICAgICBjdXJ2
ZSB3ZSBrZWVwIHNwbGl0dGluZyB0aGUgY3VydmUgdGlsbCB0aGUgc3BsaXQgY3VydmUgaXMgYWxt
b3N0IGEgc3RyYWlnaHQKKyAgICAgICAgbGluZS4gVGhlIGZpeGVzIHdlIG5lZWQgdG8gZG8gYXJl
OgorICAgICAgICAxLiBNZXJnZSB0aGUgcG9zaXRpb24gYW5kIHRoZSBhbmdsZSB0cmF2ZXJzYWxz
IHNpbmNlIHRoZXkgYXJlIHJldHVybmluZworICAgICAgICAgICBpbmZvIGZvciB0aGUgc2FtZSBs
ZW5ndGggb24gdGhlIHBhdGguIFRoZXJlIGlzIGEgZGVnZW5lcmF0ZSBjYXNlIGZvcgorICAgICAg
ICAgICB0aGUgc3RhcnRpbmcgcG9pbnQgd2hlbiBjYWxjdWxhdGluZyB0aGUgYW5nbGUuIFRoZSBv
cmlnaW5hbCBjb2RlIHdhcworICAgICAgICAgICBzb2x2aW5nIHRoaXMgcHJvYmxlbSBieSBwYXNz
aW5nIGVwc2lsb24gaW5zdGVhZCBvZiB6ZXJvIGJ1dCBiZWNhdXNlCisgICAgICAgICAgIHRyYXZl
cnNpbmcgdGhlIHBhdGggZm9yIHBvc2l0aW9uIGFuZCBhbmdsZSBhcmUgbm93IG1lcmdlZCwgd2Ug
d2lsbCBwYXNzCisgICAgICAgICAgIHplcm8gZm9yIHRoZSBzdGFydGluZyBwb2ludCBhcyBpcy4g
QWxsIHdlIG5lZWQgdG8gbW92ZSBvbmUgc3RlcCBhaGVhZAorICAgICAgICAgICB3aXRob3V0IG1v
dmluZyB0aGUgcG9zaXRpb24uIFdlIG5lZWQgdGhlIGV4dHJhIHN0ZXAgdG8gY2FsY3VsYXRlIHRo
ZQorICAgICAgICAgICBzbG9wZSBvZiB0aGUgcGF0aCBhdCB0aGUgc3RhcnRpbmcgcG9pbnQuCisg
ICAgICAgIDIuIFdlIG5lZWQgdG8gYWRkIGEgbmV3IG1vZGUgdG8gdHJhdmVyc2luZyBhIHBhdGgu
IFRoZSBuZXcgbW9kZSB3aWxsIHRha2UKKyAgICAgICAgICAgYSB2ZWN0b3Igb2YgbGVuZ3RocyBh
bmQgcmV0dXJucyBhIHZlY3RvciBvZiBhcnJvdyB2ZWN0b3JzLiBFdmVyeSBhcnJvdworICAgICAg
ICAgICB2ZWN0b3IgcmVwcmVzZW50cyBhIHBvc2l0aW9uIGFuZCBhbiBhbmdsZSBvbiB0aGUgcGF0
aCBhdCBhIGNlcnRhaW4gbGVuZ3RoLgorICAgICAgICAgICBUaGlzIHdpbGwgcmVxdWlyZSBjaGFu
Z2luZyB0aGUgU1ZHVGV4dExheW91dEVuZ2luZSB0byBjYWxjdWxhdGUgdGhlIGxlbmd0aHMKKyAg
ICAgICAgICAgZmlyc3QgYW5kIHRoZW4gcGFzc2VzIGFsbCBvZiB0aGVtIHRvIHRoZSBwYXRoIHRy
YXZlcnNhbCBmdW5jdGlvbi4gSW5zdGVhZAorICAgICAgICAgICBvZiB0cmF2ZXJzaW5nIHRoZSBw
YXRoIGFnYWluLCB3ZSBhcmUgZ29pbmcgdG8gZ2V0IHRoZSByZXF1aXJlZCBwb2ludAorICAgICAg
ICAgICBhbmQgYW5nbGUgZnJvbSB0aGUgdmVjdG9yIG9mIGFycm93IHZlY3RvcnMuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoZSBmaXJzdCBmaXggb25seS4gVGhlIHNlY29u
ZCBvbmUgd2lsbCByZXF1aXJlCisgICAgICAgIHJlZmFjdG9yaW5nIHRoZSBTVkdUZXh0TGF5b3V0
RW5naW5lIHNvIEkgYW0gZ29pbmcgdG8gYWRkcmVzcyBpdCBpbiBhCisgICAgICAgIGRpZmZlcmVu
dCBwYXRjaC4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpwYXRoTGVuZ3RoQXBwbGllckZ1bmN0aW9uKTogSXQgaXMgYmV0
dGVyIGFuZCBjbGVhbmVyIHRvIG1vdmUKKyAgICAgICAgdGhlIGZ1bmN0aW9uIG9mIHRoaXMgbWV0
aG9kIHRvIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1BhdGhFbGVtZW50KCkuCisgICAgICAg
IAorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhdmVyc2FsU3RhdGVBdExlbmd0aCk6IEFkZCBh
IG5ldyBmdW5jdGlvbiB3aGljaCByZXR1cm5zCisgICAgICAgIHRoZSB0cmF2ZXJzYWxTdGF0ZSBh
dCBhIGNlcnRhaW4gbGVuZ3RoIG9uIGEgcGF0aC4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpQYXRoOjpwb2ludEF0TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Om5vcm1hbEFu
Z2xlQXRMZW5ndGgpOiBVc2UgdHJhdmVyc2FsU3RhdGVBdExlbmd0aCgpIHRvIGdldAorICAgICAg
ICB0aGUgdHJhdmVyc2FsU3RhdGUgYW5kIGZyb20gaXQgcmV0dXJuIGVpdGhlciB0aGUgcG9zaXRp
b24gb3IgdGhlIGFuZ2xlLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
YXRoLmg6IERlZmluZSB0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKCkuCisgICAgICAgIAorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpkaXN0YW5jZUxpbmUpOiBDb2RlIGNsZWFuIHVwLgorICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OmN1cnZlTGVuZ3RoKTogQ29kZSBjbGVhbiB1cCBhbmQgbWFrZSBzdXJlIG1fY3Vy
cmVudCBpcyBzZXQgY29ycmVjdGx5CisgICAgICAgIGZvciBhbGwgdHJhdmVyc2luZyBjYXNlcy4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OlBhdGhUcmF2
ZXJzYWxTdGF0ZSk6IEFkZCBhbiBvcHRpb25hbCBwYXJhbWV0ZXIKKyAgICAgICAgZm9yIHRoZSBk
ZXNpcmVkIGxlbmd0aCBhbmQgbW92ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG90aGVyIG1l
bWJlcnMgdG8KKyAgICAgICAgdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpjbG9zZVN1YnBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjptb3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aFRyYXZlcnNhbFN0YXRlOjpsaW5lVG8pOiBBZGQgdGhlIGRpc3RhbmNlIHRvIHRoZSBtX3Rv
dGFsTGVuZ3RoCisgICAgICAgIGluc3RlYWQgb2YgcmV0dXJuaW5nIGl0IHNpbmNlIHRoaXMgaXMg
d2hhdCBhbGwgdGhlIGNhbGxlcnMgd2VyZSBkb2luZy4KKyAgICAgICAgCisgICAgICAgIChXZWJD
b3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGhUcmF2ZXJzYWxTdGF0ZTo6Y3ViaWNCZXppZXJUbyk6IEFkZCB0aGUgZGlzdGFu
Y2UgdG8gdGhlCisgICAgICAgIG1fdG90YWxMZW5ndGguIE1vdmUgc2V0dGluZyB0aGUgbV9jdXJy
ZW50IHRvIFdlYkNvcmU6OmN1cnZlTGVuZ3RoKCkuCisgICAgICAgIFJlbW92ZSB1bnVzZWQgbWVt
YmVycyBtX2NvbnRyb2wxIGFuZCBtX2NvbnRyb2wyLgorCisgICAgICAgIChXZWJDb3JlOjpQYXRo
VHJhdmVyc2FsU3RhdGU6OnByb2Nlc3NTZWdtZW50KTogRGVsZXRlZC4gICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpmaW5hbGl6ZUFwcGVuZFBhdGhFbGVtZW50
KTogQ3JlYXRlIGEgbmV3IG5hbWUuCisgICAgICAgIGZvciB0aGUgZnVuY3Rpb24uIEhhbmRsZSB0
aGUgY2FzZSBvZiB0aGUgYW5nbGUgYXQgdGhlIHN0YXJ0aW5nIHBvaW50IHdoZXJlCisgICAgICAg
IG1fZGVzaXJlZExlbmd0aCBpcyB6ZXJvLiBUaGUgbmV3IGZsYWcgbV96ZXJvVmVjdG9yIHdpbGwg
YmUgc2V0IHRvIG5vdGlmeQorICAgICAgICB0aGUgY2FsbGVyIHRoYXQgdGhlICBuZXh0IGl0ZXJh
dGlvbiB3aWxsIGJlIHRoZSBsYXN0IG9uZSBhbmQgaXQgaXMgb25seQorICAgICAgICBuZWVkZWQg
Zm9yIHRoZSBjYWxjdWxhdGluZyB0aGUgYW5nbGUgb2YgYSB6ZXJvIHZlY3Rvci4gCisgICAgICAg
IAorICAgICAgICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjphcHBlbmRQYXRoRWxlbWVu
dCk6IFRoaXMgY29kZSBpcyBtb3ZlZCBmcm9tCisgICAgICAgIHBhdGhMZW5ndGhBcHBsaWVyRnVu
Y3Rpb24oKS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6
OnByb2Nlc3NQYXRoRWxlbWVudCk6IFRoaXMgZnVuY3Rpb24gaXMgdXNlZAorICAgICAgICBieSB0
aGUgY2xhc3MgUGF0aC4gSXQgaXMgYSB3cmFwcGVyIGZvciBhcHBlbmRQYXRoRWxlbWVudCgpLiBJ
ZiBtX3plcm9WZWN0b3IKKyAgICAgICAgaXMgc2V0IHdlIGFwcGVuZCB0aGUgbmV3IGVsZW1lbnQg
dG8gYSBjb3B5IGZvciB0aGUgUGF0aFRyYXZlcnNhbFN0YXRlIGp1c3QKKyAgICAgICAgdG8gZ2V0
IHRoZSBhbmdsZSBmb3IgdGhlIHplcm8gdmVjdG9yLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmg6IEFkZCBuZXcgbWVtYmVycyBhbmQgbWV0aG9kcy4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OnByb2Nlc3NQ
YXRoRWxlbWVudCk6IEFub3RoZXIgd3JhcHBlciBmb3IKKyAgICAgICAgYXBwZW5kUGF0aEVsZW1l
bnQoKSB3aGljaCBpcyB1c2VkIGJ5IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayk6IFRoZSBjb25zdHJ1Y3RvciBzaG91bGQgYXBw
ZW5kIHRoZQorICAgICAgICBlbGVtZW50cyBvZiBtX2JveGVzIGluc3RlYWQgb2YgbWFraW5nIHRo
aXMgZnJvbSBvdXRzaWRlIHRoZSBjbGFzcy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpT
VkdUZXh0Q2h1bms6OnRvdGFsQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0
Q2h1bms6OnRvdGFsTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVuazo6Y2Fs
Y3VsYXRlTGVuZ3RoKTogRGVsZXRlZC4KKyAgICAgICAgUmVwbGFjZSBjYWxjdWxhdGVMZW5ndGgo
KSBieSB0b3RhbENoYXJhY3RlcnMoKSBhbmQgdG90YWxMZW5ndGgoKSB0byBtYWtlCisgICAgICAg
IHRoZSBpbnRlcmZhY2UgY2xlYW5lci4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpTVkdU
ZXh0Q2h1bms6OnRvdGFsQW5jaG9yU2hpZnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENo
dW5rOjpjYWxjdWxhdGVUZXh0QW5jaG9yU2hpZnQpOiBEZWxldGVkLgorICAgICAgICBSZW5hbWUg
dGhlIGZ1bmN0aW9uIG5hbWUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENo
dW5rOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rOjpwcm9jZXNzVGV4
dExlbmd0aFNwYWNpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVu
azo6YnVpbGRCb3hUcmFuc2Zvcm1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENo
dW5rOjpib3hTcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRDaHVuazo6cHJvY2Vzc1RleHRBbmNob3JDb3JyZWN0aW9uKToKKyAgICAgICAgTW92ZSB0
aGUgY2h1bmsgbGF5b3V0IGNvZGUgZnJvbSBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpsYXlvdXRUZXh0
Q2h1bmtzKCkKKyAgICAgICAgdG8gdGhlIFNWR1RleHRDaHVuazo6bGF5b3V0KCkuIE1vdmUgYWxs
IHRoZSBoZWxwZXIgZnVuY3Rpb25zIGFzIHdlbGwuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1NWR1RleHRDaHVuay5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rOjpoYXNUZXh0
QW5jaG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVuazo6Ym94ZXMpOiBEZWxldGVk
LgorICAgICAgICBBZGQgdGhlIG5ldyBtZXRob2RzIGFuZCBjaGFuZ2UgbW9zdCBvZiB0aGUgcHVi
bGljIG1ldGhvZHMgdG8gYmUgcHJpdmF0ZS4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRD
aHVua0J1aWxkZXI6OnRyYW5zZm9ybWF0aW9uRm9yVGV4dEJveCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bmtCdWlsZGVyOjpidWlsZFRleHRDaHVua3MpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6bGF5b3V0VGV4dENodW5rcyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0Q2h1bmtCdWlsZGVyOjphZGRUZXh0Q2h1bmspOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vzc1RleHRDaHVuayk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtCdWlsZGVyOjpwcm9jZXNzVGV4dExl
bmd0aFNwYWNpbmdDb3JyZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rl
eHRDaHVua0J1aWxkZXI6OnByb2Nlc3NUZXh0QW5jaG9yQ29ycmVjdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtCdWlsZGVyOjpidWlsZFNwYWNpbmdBbmRHbHlw
aHNUcmFuc2Zvcm0pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENo
dW5rQnVpbGRlci5oOgorICAgICAgICBDb2RlIGNsZWFuIHVwIGFuZCByZW1vdmluZyB0aGUgY2h1
bmsgbGF5b3V0IGNvZGUgc2luY2UgaXQgbGl2ZXMgbm93IGluCisgICAgICAgIFNWR1RleHRDaHVu
azo6bGF5b3V0KCkuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExh
eW91dEVuZ2luZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0RW5naW5lOjps
YXlvdXRUZXh0T25MaW5lT3JQYXRoKTogRG8gYSBzaW5nbGUgcGF0aAorICAgICAgICB0cmF2ZXJz
YWwgdG8gZ2V0IHRoZSBwb3NpdGlvbiBhbmQgdGhlIGFuZ2xlIGZvciBhIGxlbmd0aCBvbiBhIHBh
dGguCisgICAgICAgIAorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YnVpbGRUcmFuc2Zv
cm1Gb3JQcm9ncmVzcyk6IERvIGEgc2luZ2xlCisgICAgICAgIHBhdGggdHJhdmVyc2FsIHRvIGdl
dCB0aGUgcG9zaXRpb24gYW5kIHRoZSBhbmdsZSBhdCBhIGxlbmd0aCBvbiBhIHBhdGguCisgICAg
ICAgIAorICAgICAgICAqIHN2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OlNWR1BhdGhUcmF2
ZXJzYWxTdGF0ZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0
YXRlQnVpbGRlcjo6bW92ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxT
dGF0ZUJ1aWxkZXI6OmxpbmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoVHJhdmVyc2Fs
U3RhdGVCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlcjo6Y2xvc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmNvbnRpbnVlQ29uc3VtaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmluY3JlbWVudFBhdGhTZWdtZW50
Q291bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRl
QnVpbGRlcjo6cGF0aFNlZ21lbnRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1Bh
dGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2
ZXJzYWxTdGF0ZUJ1aWxkZXI6OnBhdGhTZWdtZW50SW5kZXgpOiBDb2RlIGNsZWFuIHVwLgorICAg
ICAgICAKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpnZXRQb2ludEF0TGVuZ3RoT2ZTVkdQYXRoQnl0ZVN0cmVhbSk6IEluaXRpYWxpemUgUGF0
aFRyYXZlcnNhbFN0YXRlCisgICAgICAgIHByb3Blcmx5IGZvciBTVkdQYXRoVHJhdmVyc2FsU3Rh
dGVCdWlsZGVyLgorCiAyMDE1LTA0LTEyICBTdW5nbWFubiBDaG8gIDxzdW5nbWFubi5jaG9AbmF2
ZXJjb3JwLmNvbT4KIAogICAgICAgICBGaXggdHJpdmFsIHR5cG9zIHJlbGF0ZWQgdG8gdGhlIHdv
cmQgImNvb3JkaW5hdGUiLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5jcHAJKHJldmlzaW9uIDE4MjY3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwyOSArNDIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBzdGF0aWMgdm9pZCBwYXRoTGVuZ3RoQXBwbGllckZ1bmN0aW9uKHZvaWQq
IGluZm8sIGNvbnN0IFBhdGhFbGVtZW50KiBlbGVtZW50KQogewogICAgIFBhdGhUcmF2ZXJzYWxT
dGF0ZSYgdHJhdmVyc2FsU3RhdGUgPSAqc3RhdGljX2Nhc3Q8UGF0aFRyYXZlcnNhbFN0YXRlKj4o
aW5mbyk7Ci0gICAgaWYgKHRyYXZlcnNhbFN0YXRlLm1fc3VjY2VzcykKLSAgICAgICAgcmV0dXJu
OwotICAgIEZsb2F0UG9pbnQqIHBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKLSAgICBmbG9hdCBz
ZWdtZW50TGVuZ3RoID0gMDsKLSAgICBzd2l0Y2ggKGVsZW1lbnQtPnR5cGUpIHsKLSAgICAgICAg
Y2FzZSBQYXRoRWxlbWVudE1vdmVUb1BvaW50OgotICAgICAgICAgICAgc2VnbWVudExlbmd0aCA9
IHRyYXZlcnNhbFN0YXRlLm1vdmVUbyhwb2ludHNbMF0pOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDoKLSAgICAgICAgICAgIHNlZ21l
bnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5saW5lVG8ocG9pbnRzWzBdKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDoKLSAg
ICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5xdWFkcmF0aWNCZXppZXJU
byhwb2ludHNbMF0sIHBvaW50c1sxXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBQYXRoRWxlbWVudEFkZEN1cnZlVG9Qb2ludDoKLSAgICAgICAgICAgIHNlZ21lbnRMZW5ndGgg
PSB0cmF2ZXJzYWxTdGF0ZS5jdWJpY0JlemllclRvKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2lu
dHNbMl0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1lbnRDbG9z
ZVN1YnBhdGg6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUuY2xv
c2VTdWJwYXRoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgdHJhdmVyc2FsU3Rh
dGUubV90b3RhbExlbmd0aCArPSBzZWdtZW50TGVuZ3RoOyAKLSAgICB0cmF2ZXJzYWxTdGF0ZS5w
cm9jZXNzU2VnbWVudCgpOworICAgIHRyYXZlcnNhbFN0YXRlLnByb2Nlc3NQYXRoRWxlbWVudChl
bGVtZW50KTsKIH0KIAogZmxvYXQgUGF0aDo6bGVuZ3RoKCkgY29uc3QKQEAgLTc0LDIyICs1Miwy
MiBAQCBmbG9hdCBQYXRoOjpsZW5ndGgoKSBjb25zdAogICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0
ZS5tX3RvdGFsTGVuZ3RoOwogfQogCi1GbG9hdFBvaW50IFBhdGg6OnBvaW50QXRMZW5ndGgoZmxv
YXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3QKK1BhdGhUcmF2ZXJzYWxTdGF0ZSBQYXRoOjp0cmF2
ZXJzYWxTdGF0ZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0CiB7Ci0gICAg
UGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJh
dmVyc2FsUG9pbnRBdExlbmd0aCk7Ci0gICAgdHJhdmVyc2FsU3RhdGUubV9kZXNpcmVkTGVuZ3Ro
ID0gbGVuZ3RoOworICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJh
dmVyc2FsU3RhdGU6OlRyYXZlcnNhbFZlY3RvckF0TGVuZ3RoLCBsZW5ndGgpOwogICAgIGFwcGx5
KCZ0cmF2ZXJzYWxTdGF0ZSwgcGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbik7CiAgICAgb2sgPSB0
cmF2ZXJzYWxTdGF0ZS5tX3N1Y2Nlc3M7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRlLm1fY3Vy
cmVudDsKKyAgICByZXR1cm4gdHJhdmVyc2FsU3RhdGU7Cit9CisKK0Zsb2F0UG9pbnQgUGF0aDo6
cG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAoreworICAgIHJldHVy
biB0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKGxlbmd0aCwgb2spLm1fY3VycmVudDsKIH0KIAogZmxv
YXQgUGF0aDo6bm9ybWFsQW5nbGVBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25z
dAogewotICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2Fs
U3RhdGU6OlRyYXZlcnNhbE5vcm1hbEFuZ2xlQXRMZW5ndGgpOwotICAgIHRyYXZlcnNhbFN0YXRl
Lm1fZGVzaXJlZExlbmd0aCA9IGxlbmd0aCA/IGxlbmd0aCA6IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjplcHNpbG9uKCk7Ci0gICAgYXBwbHkoJnRyYXZlcnNhbFN0YXRlLCBwYXRoTGVuZ3Ro
QXBwbGllckZ1bmN0aW9uKTsKLSAgICBvayA9IHRyYXZlcnNhbFN0YXRlLm1fc3VjY2VzczsKLSAg
ICByZXR1cm4gdHJhdmVyc2FsU3RhdGUubV9ub3JtYWxBbmdsZTsKKyAgICByZXR1cm4gdHJhdmVy
c2FsU3RhdGVBdExlbmd0aChsZW5ndGgsIG9rKS5tX25vcm1hbEFuZ2xlOwogfQogCiB2b2lkIFBh
dGg6OmFkZFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRTaXpl
JiByb3VuZGluZ1JhZGlpLCBSb3VuZGVkUmVjdFN0cmF0ZWd5IHN0cmF0ZWd5KQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gMTgyNjc0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MCw2ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGbG9hdFJvdW5k
ZWRSZWN0OwogICAgIGNsYXNzIEZsb2F0U2l6ZTsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7
CisgICAgY2xhc3MgUGF0aFRyYXZlcnNhbFN0YXRlOwogICAgIGNsYXNzIFJvdW5kZWRSZWN0Owog
ICAgIGNsYXNzIFN0cm9rZVN0eWxlQXBwbGllcjsKIApAQCAtMTAwLDEwICsxMDEsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7
CiAgICAgICAgIEZsb2F0UmVjdCBmYXN0Qm91bmRpbmdSZWN0KCkgY29uc3Q7CiAgICAgICAgIEZs
b2F0UmVjdCBzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiA9IDApIGNvbnN0
OwotICAgICAgICAKKwogICAgICAgICBmbG9hdCBsZW5ndGgoKSBjb25zdDsKLSAgICAgICAgRmxv
YXRQb2ludCBwb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0OwotICAg
ICAgICBmbG9hdCBub3JtYWxBbmdsZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNv
bnN0OworICAgICAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGVBdExlbmd0aChm
bG9hdCwgYm9vbCYpIGNvbnN0OworICAgICAgICBGbG9hdFBvaW50IHBvaW50QXRMZW5ndGgoZmxv
YXQsIGJvb2wmKSBjb25zdDsKKyAgICAgICAgZmxvYXQgbm9ybWFsQW5nbGVBdExlbmd0aChmbG9h
dCwgYm9vbCYpIGNvbnN0OwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXIoKTsK
ICAgICAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9wYXRoOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJz
YWxTdGF0ZS5jcHAJKHJldmlzaW9uIDE4MjY3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDkgQEAgc3RhdGljIGlubGluZSBGbG9hdFBvaW50IG1pZFBvaW50KGNvbnN0IAogCiBzdGF0
aWMgaW5saW5lIGZsb2F0IGRpc3RhbmNlTGluZShjb25zdCBGbG9hdFBvaW50JiBzdGFydCwgY29u
c3QgRmxvYXRQb2ludCYgZW5kKQogewotICAgIHJldHVybiBzcXJ0ZigoZW5kLngoKSAtIHN0YXJ0
LngoKSkgKiAoZW5kLngoKSAtIHN0YXJ0LngoKSkgKyAoZW5kLnkoKSAtIHN0YXJ0LnkoKSkgKiAo
ZW5kLnkoKSAtIHN0YXJ0LnkoKSkpOworICAgIGZsb2F0IGR4ID0gZW5kLngoKSAtIHN0YXJ0Lngo
KTsKKyAgICBmbG9hdCBkeSA9IGVuZC55KCkgLSBzdGFydC55KCk7CisgICAgcmV0dXJuIHNxcnRm
KGR4ICogZHggKyBkeSAqIGR5KTsKIH0KIAogc3RydWN0IFF1YWRyYXRpY0JlemllciB7CkBAIC0x
MTQsMTEwICsxMTYsMTQ4IEBAIHN0cnVjdCBDdWJpY0JlemllciB7CiAvLyBBbm90aGVyIGNoZWNr
IHdoaWNoIGlzIHBvc3NpYmxlIHVwLWZyb250ICh0byBzZW5kIHVzIGRvd24gdGhlIGZhc3QgcGF0
aCkgd291bGQgYmUgdG8gY2hlY2sgaWYKIC8vIGFwcHJveGltYXRlRGlzdGFuY2UoKSArIGN1cnJl
bnQgdG90YWwgZGlzdGFuY2UgPiBkZXNpcmVkIGRpc3RhbmNlCiB0ZW1wbGF0ZTxjbGFzcyBDdXJ2
ZVR5cGU+Ci1zdGF0aWMgZmxvYXQgY3VydmVMZW5ndGgoUGF0aFRyYXZlcnNhbFN0YXRlJiB0cmF2
ZXJzYWxTdGF0ZSwgQ3VydmVUeXBlIGN1cnZlKQorc3RhdGljIGZsb2F0IGN1cnZlTGVuZ3RoKFBh
dGhUcmF2ZXJzYWxTdGF0ZSYgdHJhdmVyc2FsU3RhdGUsIGNvbnN0IEN1cnZlVHlwZSYgZWxlbWVu
dEN1cnZlKQogewogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjdXJ2ZVN0YWNrRGVwdGhMaW1p
dCA9IDIwOwotCi0gICAgVmVjdG9yPEN1cnZlVHlwZT4gY3VydmVTdGFjazsKLSAgICBjdXJ2ZVN0
YWNrLmFwcGVuZChjdXJ2ZSk7Ci0KKyAgICBDdXJ2ZVR5cGUgY3VydmUgPSBlbGVtZW50Q3VydmU7
CisgICAgVmVjdG9yPEN1cnZlVHlwZSwgY3VydmVTdGFja0RlcHRoTGltaXQ+IGN1cnZlU3RhY2s7
CiAgICAgZmxvYXQgdG90YWxMZW5ndGggPSAwOwotICAgIGRvIHsKKworICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9IGN1cnZlLmFwcHJveGltYXRlRGlzdGFuY2UoKTsK
LSAgICAgICAgaWYgKChsZW5ndGggLSBkaXN0YW5jZUxpbmUoY3VydmUuc3RhcnQsIGN1cnZlLmVu
ZCkpID4ga1BhdGhTZWdtZW50TGVuZ3RoVG9sZXJhbmNlICYmIGN1cnZlU3RhY2suc2l6ZSgpIDw9
IGN1cnZlU3RhY2tEZXB0aExpbWl0KSB7CisKKyAgICAgICAgaWYgKChsZW5ndGggLSBkaXN0YW5j
ZUxpbmUoY3VydmUuc3RhcnQsIGN1cnZlLmVuZCkpID4ga1BhdGhTZWdtZW50TGVuZ3RoVG9sZXJh
bmNlICYmIGN1cnZlU3RhY2suc2l6ZSgpIDwgY3VydmVTdGFja0RlcHRoTGltaXQpIHsKICAgICAg
ICAgICAgIEN1cnZlVHlwZSBsZWZ0Q3VydmU7CiAgICAgICAgICAgICBDdXJ2ZVR5cGUgcmlnaHRD
dXJ2ZTsKICAgICAgICAgICAgIGN1cnZlLnNwbGl0KGxlZnRDdXJ2ZSwgcmlnaHRDdXJ2ZSk7CiAg
ICAgICAgICAgICBjdXJ2ZSA9IGxlZnRDdXJ2ZTsKICAgICAgICAgICAgIGN1cnZlU3RhY2suYXBw
ZW5kKHJpZ2h0Q3VydmUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdG90YWxMZW5n
dGggKz0gbGVuZ3RoOwotICAgICAgICAgICAgaWYgKHRyYXZlcnNhbFN0YXRlLm1fYWN0aW9uID09
IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsUG9pbnRBdExlbmd0aAotICAgICAgICAgICAg
IHx8IHRyYXZlcnNhbFN0YXRlLm1fYWN0aW9uID09IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVy
c2FsTm9ybWFsQW5nbGVBdExlbmd0aCkgewotICAgICAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRl
Lm1fcHJldmlvdXMgPSBjdXJ2ZS5zdGFydDsKLSAgICAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0
ZS5tX2N1cnJlbnQgPSBjdXJ2ZS5lbmQ7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYXZlcnNhbFN0
YXRlLm1fdG90YWxMZW5ndGggKyB0b3RhbExlbmd0aCA+IHRyYXZlcnNhbFN0YXRlLm1fZGVzaXJl
ZExlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsTGVuZ3RoOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY3VydmUgPSBjdXJ2ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAg
ICAgIGN1cnZlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KLSAgICB9IHdoaWxlICghY3VydmVTdGFjay5pc0VtcHR5KCkpOwotICAgIAorCisgICAg
ICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aDsKKyAgICAgICAgaWYgKHRyYXZlcnNhbFN0YXRlLm1f
YWN0aW9uID09IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsVmVjdG9yQXRMZW5ndGgpIHsK
KyAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRlLm1fcHJldmlvdXMgPSBjdXJ2ZS5zdGFydDsKKyAg
ICAgICAgICAgIHRyYXZlcnNhbFN0YXRlLm1fY3VycmVudCA9IGN1cnZlLmVuZDsKKyAgICAgICAg
ICAgIGlmICh0cmF2ZXJzYWxTdGF0ZS5tX3RvdGFsTGVuZ3RoICsgdG90YWxMZW5ndGggPiB0cmF2
ZXJzYWxTdGF0ZS5tX2Rlc2lyZWRMZW5ndGgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoY3VydmVTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjdXJ2ZSA9IGN1cnZlU3RhY2subGFzdCgpOworICAgICAgICBjdXJ2
ZVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICB9CisKKyAgICBpZiAodHJhdmVyc2FsU3RhdGUubV9h
Y3Rpb24gIT0gUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxWZWN0b3JBdExlbmd0aCkgewor
ICAgICAgICBBU1NFUlQoY3VydmUuZW5kID09IGVsZW1lbnRDdXJ2ZS5lbmQpOworICAgICAgICB0
cmF2ZXJzYWxTdGF0ZS5tX3ByZXZpb3VzID0gY3VydmUuc3RhcnQ7CisgICAgICAgIHRyYXZlcnNh
bFN0YXRlLm1fY3VycmVudCA9IGN1cnZlLmVuZDsKKyAgICB9CisKICAgICByZXR1cm4gdG90YWxM
ZW5ndGg7CiB9CiAKLVBhdGhUcmF2ZXJzYWxTdGF0ZTo6UGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhU
cmF2ZXJzYWxBY3Rpb24gYWN0aW9uKQorUGF0aFRyYXZlcnNhbFN0YXRlOjpQYXRoVHJhdmVyc2Fs
U3RhdGUoUGF0aFRyYXZlcnNhbEFjdGlvbiBhY3Rpb24sIGZsb2F0IGRlc2lyZWRMZW5ndGgpCiAg
ICAgOiBtX2FjdGlvbihhY3Rpb24pCi0gICAgLCBtX3N1Y2Nlc3MoZmFsc2UpCi0gICAgLCBtX3Rv
dGFsTGVuZ3RoKDApCi0gICAgLCBtX3NlZ21lbnRJbmRleCgwKQotICAgICwgbV9kZXNpcmVkTGVu
Z3RoKDApCi0gICAgLCBtX25vcm1hbEFuZ2xlKDApCisgICAgLCBtX2Rlc2lyZWRMZW5ndGgoZGVz
aXJlZExlbmd0aCkKIHsKIH0KIAotZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpjbG9zZVN1YnBh
dGgoKQordm9pZCBQYXRoVHJhdmVyc2FsU3RhdGU6OmNsb3NlU3VicGF0aCgpCiB7Ci0gICAgZmxv
YXQgZGlzdGFuY2UgPSBkaXN0YW5jZUxpbmUobV9jdXJyZW50LCBtX3N0YXJ0KTsKLSAgICBtX2N1
cnJlbnQgPSBtX2NvbnRyb2wxID0gbV9jb250cm9sMiA9IG1fc3RhcnQ7Ci0gICAgcmV0dXJuIGRp
c3RhbmNlOworICAgIG1fdG90YWxMZW5ndGggKz0gZGlzdGFuY2VMaW5lKG1fY3VycmVudCwgbV9z
dGFydCk7CisgICAgbV9jdXJyZW50ID0gbV9zdGFydDsKIH0KIAotZmxvYXQgUGF0aFRyYXZlcnNh
bFN0YXRlOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIFBhdGhUcmF2ZXJz
YWxTdGF0ZTo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewotICAgIG1fY3VycmVu
dCA9IG1fc3RhcnQgPSBtX2NvbnRyb2wxID0gbV9jb250cm9sMiA9IHBvaW50OwotICAgIHJldHVy
biAwOworICAgIG1fcHJldmlvdXMgPSBtX2N1cnJlbnQgPSBtX3N0YXJ0ID0gcG9pbnQ7CiB9CiAK
LWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQordm9pZCBQYXRoVHJhdmVyc2FsU3RhdGU6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCkKIHsKLSAgICBmbG9hdCBkaXN0YW5jZSA9IGRpc3RhbmNlTGluZShtX2N1cnJlbnQsIHBvaW50
KTsKLSAgICBtX2N1cnJlbnQgPSBtX2NvbnRyb2wxID0gbV9jb250cm9sMiA9IHBvaW50OwotICAg
IHJldHVybiBkaXN0YW5jZTsKKyAgICBtX3RvdGFsTGVuZ3RoICs9IGRpc3RhbmNlTGluZShtX2N1
cnJlbnQsIHBvaW50KTsKKyAgICBtX2N1cnJlbnQgPSBwb2ludDsKIH0KIAotZmxvYXQgUGF0aFRy
YXZlcnNhbFN0YXRlOjpxdWFkcmF0aWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiBuZXdDb250
cm9sLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQpCit2b2lkIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6
cXVhZHJhdGljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbCwgY29uc3QgRmxv
YXRQb2ludCYgbmV3RW5kKQogewotICAgIGZsb2F0IGRpc3RhbmNlID0gY3VydmVMZW5ndGg8UXVh
ZHJhdGljQmV6aWVyPigqdGhpcywgUXVhZHJhdGljQmV6aWVyKG1fY3VycmVudCwgbmV3Q29udHJv
bCwgbmV3RW5kKSk7Ci0KLSAgICBtX2NvbnRyb2wxID0gbmV3Q29udHJvbDsKLSAgICBtX2NvbnRy
b2wyID0gbmV3RW5kOwotCi0gICAgaWYgKG1fYWN0aW9uICE9IFRyYXZlcnNhbFBvaW50QXRMZW5n
dGggJiYgbV9hY3Rpb24gIT0gVHJhdmVyc2FsTm9ybWFsQW5nbGVBdExlbmd0aCkgCi0gICAgICAg
IG1fY3VycmVudCA9IG5ld0VuZDsKKyAgICBtX3RvdGFsTGVuZ3RoICs9IGN1cnZlTGVuZ3RoPFF1
YWRyYXRpY0Jlemllcj4oKnRoaXMsIFF1YWRyYXRpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRy
b2wsIG5ld0VuZCkpOworfQogCi0gICAgcmV0dXJuIGRpc3RhbmNlOwordm9pZCBQYXRoVHJhdmVy
c2FsU3RhdGU6OmN1YmljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDEsIGNv
bnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wyLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQpCit7
CisgICAgbV90b3RhbExlbmd0aCArPSBjdXJ2ZUxlbmd0aDxDdWJpY0Jlemllcj4oKnRoaXMsIEN1
YmljQmV6aWVyKG1fY3VycmVudCwgbmV3Q29udHJvbDEsIG5ld0NvbnRyb2wyLCBuZXdFbmQpKTsK
IH0KIAotZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpjdWJpY0JlemllclRvKGNvbnN0IEZsb2F0
UG9pbnQmIG5ld0NvbnRyb2wxLCBjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sMiwgY29uc3Qg
RmxvYXRQb2ludCYgbmV3RW5kKQorYm9vbCBQYXRoVHJhdmVyc2FsU3RhdGU6OmZpbmFsaXplQXBw
ZW5kUGF0aEVsZW1lbnQoKQogewotICAgIGZsb2F0IGRpc3RhbmNlID0gY3VydmVMZW5ndGg8Q3Vi
aWNCZXppZXI+KCp0aGlzLCBDdWJpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRyb2wxLCBuZXdD
b250cm9sMiwgbmV3RW5kKSk7CisgICAgaWYgKG1fYWN0aW9uID09IFRyYXZlcnNhbFRvdGFsTGVu
Z3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2NvbnRyb2wxID0gbmV3RW5kOwot
ICAgIG1fY29udHJvbDIgPSBuZXdDb250cm9sMjsKLSAKLSAgICBpZiAobV9hY3Rpb24gIT0gVHJh
dmVyc2FsUG9pbnRBdExlbmd0aCAmJiBtX2FjdGlvbiAhPSBUcmF2ZXJzYWxOb3JtYWxBbmdsZUF0
TGVuZ3RoKSAKLSAgICAgICAgbV9jdXJyZW50ID0gbmV3RW5kOworICAgIGlmIChtX2FjdGlvbiA9
PSBUcmF2ZXJzYWxTZWdtZW50QXRMZW5ndGgpIHsKKyAgICAgICAgaWYgKG1fdG90YWxMZW5ndGgg
Pj0gbV9kZXNpcmVkTGVuZ3RoKQorICAgICAgICAgICAgbV9zdWNjZXNzID0gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIG1fc3VjY2VzczsKKyAgICB9CiAKLSAgICByZXR1cm4gZGlzdGFuY2U7Ci19Cisg
ICAgQVNTRVJUKG1fYWN0aW9uID09IFRyYXZlcnNhbFZlY3RvckF0TGVuZ3RoKTsKIAotdm9pZCBQ
YXRoVHJhdmVyc2FsU3RhdGU6OnByb2Nlc3NTZWdtZW50KCkKLXsKLSAgICBpZiAobV9hY3Rpb24g
PT0gVHJhdmVyc2FsU2VnbWVudEF0TGVuZ3RoICYmIG1fdG90YWxMZW5ndGggPj0gbV9kZXNpcmVk
TGVuZ3RoKQotICAgICAgICBtX3N1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAKLSAgICBpZiAoKG1f
YWN0aW9uID09IFRyYXZlcnNhbFBvaW50QXRMZW5ndGggfHwgbV9hY3Rpb24gPT0gVHJhdmVyc2Fs
Tm9ybWFsQW5nbGVBdExlbmd0aCkgJiYgbV90b3RhbExlbmd0aCA+PSBtX2Rlc2lyZWRMZW5ndGgp
IHsKKyAgICBpZiAobV90b3RhbExlbmd0aCA+PSBtX2Rlc2lyZWRMZW5ndGgpIHsKICAgICAgICAg
ZmxvYXQgc2xvcGUgPSBGbG9hdFBvaW50KG1fY3VycmVudCAtIG1fcHJldmlvdXMpLnNsb3BlQW5n
bGVSYWRpYW5zKCk7Ci0gICAgICAgIGlmIChtX2FjdGlvbiA9PSBUcmF2ZXJzYWxQb2ludEF0TGVu
Z3RoKSB7Ci0gICAgICAgICAgICBmbG9hdCBvZmZzZXQgPSBtX2Rlc2lyZWRMZW5ndGggLSBtX3Rv
dGFsTGVuZ3RoOwotICAgICAgICAgICAgbV9jdXJyZW50Lm1vdmUob2Zmc2V0ICogY29zZihzbG9w
ZSksIG9mZnNldCAqIHNpbmYoc2xvcGUpKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGZsb2F0
IG9mZnNldCA9IG1fZGVzaXJlZExlbmd0aCAtIG1fdG90YWxMZW5ndGg7CisgICAgICAgIG1fY3Vy
cmVudC5tb3ZlKG9mZnNldCAqIGNvc2Yoc2xvcGUpLCBvZmZzZXQgKiBzaW5mKHNsb3BlKSk7CisK
KyAgICAgICAgaWYgKCFtX3plcm9WZWN0b3IgJiYgIW1fZGVzaXJlZExlbmd0aCkKKyAgICAgICAg
ICAgIG1femVyb1ZlY3RvciA9IHRydWU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9z
dWNjZXNzID0gdHJ1ZTsKICAgICAgICAgICAgIG1fbm9ybWFsQW5nbGUgPSByYWQyZGVnKHNsb3Bl
KTsKLSAgICAgICAgbV9zdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KKwogICAgIG1f
cHJldmlvdXMgPSBtX2N1cnJlbnQ7CisgICAgcmV0dXJuIG1fc3VjY2VzczsKK30KKworYm9vbCBQ
YXRoVHJhdmVyc2FsU3RhdGU6OmFwcGVuZFBhdGhFbGVtZW50KFBhdGhFbGVtZW50VHlwZSB0eXBl
LCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBQYXRoRWxlbWVudE1vdmVUb1BvaW50OgorICAgICAgICBtb3ZlVG8ocG9pbnRzWzBdKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXRoRWxlbWVudEFkZExpbmVUb1BvaW50OgorICAg
ICAgICBsaW5lVG8ocG9pbnRzWzBdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXRoRWxl
bWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ6CisgICAgICAgIHF1YWRyYXRpY0JlemllclRvKHBvaW50
c1swXSwgcG9pbnRzWzFdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXRoRWxlbWVudEFk
ZEN1cnZlVG9Qb2ludDoKKyAgICAgICAgY3ViaWNCZXppZXJUbyhwb2ludHNbMF0sIHBvaW50c1sx
XSwgcG9pbnRzWzJdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXRoRWxlbWVudENsb3Nl
U3VicGF0aDoKKyAgICAgICAgY2xvc2VTdWJwYXRoKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gZmluYWxpemVBcHBlbmRQYXRoRWxlbWVudCgpOworfQorCitib29s
IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1BhdGhFbGVtZW50KFBhdGhFbGVtZW50VHlwZSB0
eXBlLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCit7CisgICAgaWYgKG1fc3VjY2VzcykKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobV96ZXJvVmVjdG9yKSB7CisgICAgICAgIFBh
dGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZSgqdGhpcyk7CisgICAgICAgIG1fc3VjY2Vz
cyA9IHRyYXZlcnNhbFN0YXRlLmFwcGVuZFBhdGhFbGVtZW50KHR5cGUsIHBvaW50cyk7CisgICAg
ICAgIG1fbm9ybWFsQW5nbGUgPSB0cmF2ZXJzYWxTdGF0ZS5tX25vcm1hbEFuZ2xlOworICAgICAg
ICByZXR1cm4gbV9zdWNjZXNzOworICAgIH0KKworICAgIHJldHVybiBhcHBlbmRQYXRoRWxlbWVu
dCh0eXBlLCBwb2ludHMpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuaAkocmV2aXNpb24gMTgyNjc0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgUGF0aFRyYXZlcnNh
bFN0YXRlX2gKIAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJQYXRoLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzQsMzggKzM1LDQxIEBAIGNsYXNzIFBhdGhUcmF2
ZXJzYWxTdGF0ZSB7CiBwdWJsaWM6CiAgICAgZW51bSBQYXRoVHJhdmVyc2FsQWN0aW9uIHsKICAg
ICAgICAgVHJhdmVyc2FsVG90YWxMZW5ndGgsCi0gICAgICAgIFRyYXZlcnNhbFBvaW50QXRMZW5n
dGgsCisgICAgICAgIFRyYXZlcnNhbFZlY3RvckF0TGVuZ3RoLAogICAgICAgICBUcmF2ZXJzYWxT
ZWdtZW50QXRMZW5ndGgsCi0gICAgICAgIFRyYXZlcnNhbE5vcm1hbEFuZ2xlQXRMZW5ndGgKICAg
ICB9OwogCi0gICAgUGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxBY3Rpb24pOworICAg
IFBhdGhUcmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsQWN0aW9uLCBmbG9hdCA9IDApOwogCi0g
ICAgZmxvYXQgY2xvc2VTdWJwYXRoKCk7Ci0gICAgZmxvYXQgbW92ZVRvKGNvbnN0IEZsb2F0UG9p
bnQmKTsKLSAgICBmbG9hdCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpOwotICAgIGZsb2F0IHF1
YWRyYXRpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0IEZsb2F0
UG9pbnQmIG5ld0VuZCk7Ci0gICAgZmxvYXQgY3ViaWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50
JiBuZXdDb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDIsIGNvbnN0IEZsb2F0
UG9pbnQmIG5ld0VuZCk7Ci0gICAgCi0gICAgdm9pZCBwcm9jZXNzU2VnbWVudCgpOworcHJpdmF0
ZToKKyAgICB2b2lkIGNsb3NlU3VicGF0aCgpOworICAgIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmKTsKKyAgICB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBx
dWFkcmF0aWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOwor
ICAgIHZvaWQgY3ViaWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgIGJvb2wgZmluYWxpemVBcHBlbmRQYXRoRWxl
bWVudCgpOworICAgIGJvb2wgYXBwZW5kUGF0aEVsZW1lbnQoUGF0aEVsZW1lbnRUeXBlLCBjb25z
dCBGbG9hdFBvaW50Kik7CisKK3B1YmxpYzoKKyAgICBib29sIHByb2Nlc3NQYXRoRWxlbWVudChQ
YXRoRWxlbWVudFR5cGUsIGNvbnN0IEZsb2F0UG9pbnQqKTsKKyAgICBib29sIHByb2Nlc3NQYXRo
RWxlbWVudChjb25zdCBQYXRoRWxlbWVudCogZWxlbWVudCkgeyByZXR1cm4gcHJvY2Vzc1BhdGhF
bGVtZW50KGVsZW1lbnQtPnR5cGUsIGVsZW1lbnQtPnBvaW50cyk7IH0KIAogcHVibGljOgogICAg
IFBhdGhUcmF2ZXJzYWxBY3Rpb24gbV9hY3Rpb247Ci0gICAgYm9vbCBtX3N1Y2Nlc3M7CisgICAg
Ym9vbCBtX3N1Y2Nlc3MgeyBmYWxzZSB9OwogCiAgICAgRmxvYXRQb2ludCBtX2N1cnJlbnQ7CiAg
ICAgRmxvYXRQb2ludCBtX3N0YXJ0OwotICAgIEZsb2F0UG9pbnQgbV9jb250cm9sMTsKLSAgICBG
bG9hdFBvaW50IG1fY29udHJvbDI7CiAKLSAgICBmbG9hdCBtX3RvdGFsTGVuZ3RoOwotICAgIHVu
c2lnbmVkIG1fc2VnbWVudEluZGV4OwotICAgIGZsb2F0IG1fZGVzaXJlZExlbmd0aDsKKyAgICBm
bG9hdCBtX3RvdGFsTGVuZ3RoIHsgMCB9OworICAgIGZsb2F0IG1fZGVzaXJlZExlbmd0aCB7IDAg
fTsKIAogICAgIC8vIEZvciBub3JtYWwgY2FsY3VsYXRpb25zCiAgICAgRmxvYXRQb2ludCBtX3By
ZXZpb3VzOwotICAgIGZsb2F0IG1fbm9ybWFsQW5nbGU7IC8vIGRlZ3JlZXMKLX07ICAgIAorICAg
IGZsb2F0IG1fbm9ybWFsQW5nbGUgeyAwIH07IC8vIGRlZ3JlZXMKKyAgICBib29sIG1femVyb1Zl
Y3RvciB7IGZhbHNlIH07Cit9OwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAJKHJldmlzaW9uIDE4MjY3NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNCw1MiArMjUsOTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdUZXh0Q2h1bms6
OlNWR1RleHRDaHVuayh1bnNpZ25lZCBjaHVua1N0eWxlLCBmbG9hdCBkZXNpcmVkVGV4dExlbmd0
aCkKLSAgICA6IG1fY2h1bmtTdHlsZShjaHVua1N0eWxlKQotICAgICwgbV9kZXNpcmVkVGV4dExl
bmd0aChkZXNpcmVkVGV4dExlbmd0aCkKK1NWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKGNvbnN0
IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj46OmNvbnN0X2l0ZXJhdG9yJiBiZWdpbiwgY29uc3Qg
VmVjdG9yPFNWR0lubGluZVRleHRCb3gqPjo6Y29uc3RfaXRlcmF0b3ImIGVuZCkKIHsKLX0KKyAg
ICBBU1NFUlQoKmJlZ2luKTsKKyAgICBBU1NFUlQoYmVnaW4gIT0gZW5kKTsKIAotdm9pZCBTVkdU
ZXh0Q2h1bms6OmNhbGN1bGF0ZUxlbmd0aChmbG9hdCYgbGVuZ3RoLCB1bnNpZ25lZCYgY2hhcmFj
dGVycykgY29uc3QKLXsKLSAgICBTVkdUZXh0RnJhZ21lbnQqIGxhc3RGcmFnbWVudCA9IDA7Cisg
ICAgY29uc3QgU1ZHSW5saW5lVGV4dEJveCogYm94ID0gKmJlZ2luOworICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSA9IGJveC0+cmVuZGVyZXIoKS5zdHlsZSgpOworICAgIGNvbnN0IFNWR1Jl
bmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CisKKyAgICBpZiAoIXN0eWxl
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgbV9jaHVua1N0eWxlIHw9IFNWR1Rl
eHRDaHVuazo6UmlnaHRUb0xlZnRUZXh0OworCisgICAgaWYgKHN2Z1N0eWxlLmlzVmVydGljYWxX
cml0aW5nTW9kZSgpKQorICAgICAgICBtX2NodW5rU3R5bGUgfD0gU1ZHVGV4dENodW5rOjpWZXJ0
aWNhbFRleHQ7CisgICAgCisgICAgc3dpdGNoIChzdmdTdHlsZS50ZXh0QW5jaG9yKCkpIHsKKyAg
ICBjYXNlIFRBX1NUQVJUOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFRBX01JRERMRToKKyAg
ICAgICAgbV9jaHVua1N0eWxlIHw9IE1pZGRsZUFuY2hvcjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBUQV9FTkQ6CisgICAgICAgIG1fY2h1bmtTdHlsZSB8PSBFbmRBbmNob3I7CisgICAgICAg
IGJyZWFrOworICAgIH0KIAotICAgIHVuc2lnbmVkIGJveENvdW50ID0gbV9ib3hlcy5zaXplKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBib3hQb3NpdGlvbiA9IDA7IGJveFBvc2l0aW9uIDwgYm94Q291
bnQ7ICsrYm94UG9zaXRpb24pIHsKLSAgICAgICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9
IG1fYm94ZXMuYXQoYm94UG9zaXRpb24pOwotICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50
PiYgZnJhZ21lbnRzID0gdGV4dEJveC0+dGV4dEZyYWdtZW50cygpOworICAgIGlmIChTVkdUZXh0
Q29udGVudEVsZW1lbnQqIHRleHRDb250ZW50RWxlbWVudCA9IFNWR1RleHRDb250ZW50RWxlbWVu
dDo6ZWxlbWVudEZyb21SZW5kZXJlcihib3gtPnJlbmRlcmVyKCkucGFyZW50KCkpKSB7CisgICAg
ICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCh0ZXh0Q29udGVudEVsZW1lbnQpOwor
ICAgICAgICBtX2Rlc2lyZWRUZXh0TGVuZ3RoID0gdGV4dENvbnRlbnRFbGVtZW50LT5zcGVjaWZp
ZWRUZXh0TGVuZ3RoKCkudmFsdWUobGVuZ3RoQ29udGV4dCk7CisKKyAgICAgICAgc3dpdGNoICh0
ZXh0Q29udGVudEVsZW1lbnQtPmxlbmd0aEFkanVzdCgpKSB7CisgICAgICAgIGNhc2UgU1ZHTGVu
Z3RoQWRqdXN0VW5rbm93bjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNWR0xl
bmd0aEFkanVzdFNwYWNpbmc6CisgICAgICAgICAgICBtX2NodW5rU3R5bGUgfD0gTGVuZ3RoQWRq
dXN0U3BhY2luZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNWR0xlbmd0aEFk
anVzdFNwYWNpbmdBbmRHbHlwaHM6CisgICAgICAgICAgICBtX2NodW5rU3R5bGUgfD0gTGVuZ3Ro
QWRqdXN0U3BhY2luZ0FuZEdseXBoczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQogCi0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBmcmFnbWVudHMuc2l6ZSgpOwotICAgICAg
ICBpZiAoIXNpemUpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICBmb3IgKFZlY3RvcjxTVkdJ
bmxpbmVUZXh0Qm94Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgbV9ib3hlcy5hcHBlbmQoKml0KTsKK30KIAotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBTVkdUZXh0RnJhZ21lbnQm
IGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOwotICAgICAgICAgICAgY2hhcmFjdGVycyArPSBm
cmFnbWVudC5sZW5ndGg7Cit1bnNpZ25lZCBTVkdUZXh0Q2h1bms6OnRvdGFsQ2hhcmFjdGVycygp
IGNvbnN0Cit7CisgICAgdW5zaWduZWQgY2hhcmFjdGVycyA9IDA7CisgICAgZm9yIChjb25zdCBh
dXRvKiBib3ggOiBtX2JveGVzKSB7CisgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0RnJhZ21l
bnQ+JiBmcmFnbWVudHMgPSBib3gtPnRleHRGcmFnbWVudHMoKTsKIAotICAgICAgICAgICAgaWYg
KG1fY2h1bmtTdHlsZSAmIFZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICBsZW5ndGggKz0g
ZnJhZ21lbnQuaGVpZ2h0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxlbmd0
aCArPSBmcmFnbWVudC53aWR0aDsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6
IGZyYWdtZW50cykKKyAgICAgICAgICAgIGNoYXJhY3RlcnMgKz0gZnJhZ21lbnQubGVuZ3RoOwor
ICAgIH0KKyAgICByZXR1cm4gY2hhcmFjdGVyczsKK30KIAotICAgICAgICAgICAgaWYgKCFsYXN0
RnJhZ21lbnQpIHsKLSAgICAgICAgICAgICAgICBsYXN0RnJhZ21lbnQgPSAmZnJhZ21lbnQ7Ci0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CitmbG9hdCBTVkdUZXh0Q2h1
bms6OnRvdGFsTGVuZ3RoKCkgY29uc3QKK3sKKyAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQqIGZp
cnN0RnJhZ21lbnQgPSBudWxscHRyOworICAgIGNvbnN0IFNWR1RleHRGcmFnbWVudCogbGFzdEZy
YWdtZW50ID0gbnVsbHB0cjsKIAotICAgICAgICAgICAgLy8gUmVzZXBlY3QgZ2FwIGJldHdlZW4g
Y2h1bmtzLgotICAgICAgICAgICAgaWYgKG1fY2h1bmtTdHlsZSAmIFZlcnRpY2FsVGV4dCkKLSAg
ICAgICAgICAgICAgICAgbGVuZ3RoICs9IGZyYWdtZW50LnkgLSAobGFzdEZyYWdtZW50LT55ICsg
bGFzdEZyYWdtZW50LT5oZWlnaHQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICBsZW5ndGggKz0gZnJhZ21lbnQueCAtIChsYXN0RnJhZ21lbnQtPnggKyBsYXN0RnJhZ21lbnQt
PndpZHRoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2JveGVzLmJlZ2luKCksIGVuZCA9IG1fYm94
ZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBWZWN0b3I8U1ZHVGV4
dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gKCppdCktPnRleHRGcmFnbWVudHMoKTsKKyAgICAgICAg
aWYgKGZyYWdtZW50cy5zaXplKCkpIHsKKyAgICAgICAgICAgIGZpcnN0RnJhZ21lbnQgPSAmKCpm
cmFnbWVudHMuYmVnaW4oKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
IAotICAgICAgICAgICAgbGFzdEZyYWdtZW50ID0gJmZyYWdtZW50OworICAgIGZvciAoYXV0byBp
dCA9IG1fYm94ZXMucmJlZ2luKCksIGVuZCA9IG1fYm94ZXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgY29uc3QgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cyA9
ICgqaXQpLT50ZXh0RnJhZ21lbnRzKCk7CisgICAgICAgIGlmIChmcmFnbWVudHMuc2l6ZSgpKSB7
CisgICAgICAgICAgICBsYXN0RnJhZ21lbnQgPSAmKCpmcmFnbWVudHMucmJlZ2luKCkpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBBU1NFUlQoIWZpcnN0RnJh
Z21lbnQgPT0gIWxhc3RGcmFnbWVudCk7CisgICAgaWYgKCFmaXJzdEZyYWdtZW50KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGlmIChtX2NodW5rU3R5bGUgJiBWZXJ0aWNhbFRleHQpCisgICAg
ICAgIHJldHVybiAobGFzdEZyYWdtZW50LT55ICsgbGFzdEZyYWdtZW50LT5oZWlnaHQpIC0gZmly
c3RGcmFnbWVudC0+eTsKKworICAgIHJldHVybiAobGFzdEZyYWdtZW50LT54ICsgbGFzdEZyYWdt
ZW50LT53aWR0aCkgLSBmaXJzdEZyYWdtZW50LT54OwogfQogCi1mbG9hdCBTVkdUZXh0Q2h1bms6
OmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChmbG9hdCBsZW5ndGgpIGNvbnN0CitmbG9hdCBTVkdU
ZXh0Q2h1bms6OnRvdGFsQW5jaG9yU2hpZnQoKSBjb25zdAogeworICAgIGZsb2F0IGxlbmd0aCA9
IHRvdGFsTGVuZ3RoKCk7CiAgICAgaWYgKG1fY2h1bmtTdHlsZSAmIE1pZGRsZUFuY2hvcikKICAg
ICAgICAgcmV0dXJuIC1sZW5ndGggLyAyOwogICAgIGlmIChtX2NodW5rU3R5bGUgJiBFbmRBbmNo
b3IpCkBAIC03Nyw0ICsxMjQsOTIgQEAgZmxvYXQgU1ZHVGV4dENodW5rOjpjYWxjdWxhdGVUZXh0
QW5jaG9yUwogICAgIHJldHVybiBtX2NodW5rU3R5bGUgJiBSaWdodFRvTGVmdFRleHQgPyAtbGVu
Z3RoIDogMDsKIH0KIAordm9pZCBTVkdUZXh0Q2h1bms6OmxheW91dChIYXNoTWFwPFNWR0lubGlu
ZVRleHRCb3gqLCBBZmZpbmVUcmFuc2Zvcm0+JiB0ZXh0Qm94VHJhbnNmb3JtYXRpb25zKSBjb25z
dAoreworICAgIGlmIChoYXNEZXNpcmVkVGV4dExlbmd0aCgpKSB7CisgICAgICAgIGlmIChoYXNM
ZW5ndGhBZGp1c3RTcGFjaW5nKCkpCisgICAgICAgICAgICBwcm9jZXNzVGV4dExlbmd0aFNwYWNp
bmdDb3JyZWN0aW9uKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGhhc0xl
bmd0aEFkanVzdFNwYWNpbmdBbmRHbHlwaHMoKSk7CisgICAgICAgICAgICBidWlsZEJveFRyYW5z
Zm9ybWF0aW9ucyh0ZXh0Qm94VHJhbnNmb3JtYXRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChoYXNUZXh0QW5jaG9yKCkpCisgICAgICAgIHByb2Nlc3NUZXh0QW5jaG9yQ29ycmVj
dGlvbigpOworfQorCit2b2lkIFNWR1RleHRDaHVuazo6cHJvY2Vzc1RleHRMZW5ndGhTcGFjaW5n
Q29ycmVjdGlvbigpIGNvbnN0Cit7CisgICAgZmxvYXQgdGV4dExlbmd0aFNoaWZ0ID0gKGRlc2ly
ZWRUZXh0TGVuZ3RoKCkgLSB0b3RhbExlbmd0aCgpKSAvIHRvdGFsQ2hhcmFjdGVycygpOworICAg
IGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBtX2NodW5rU3R5bGUgJiBWZXJ0aWNhbFRleHQ7CisgICAg
dW5zaWduZWQgYXRDaGFyYWN0ZXIgPSAwOworCisgICAgZm9yIChhdXRvKiBib3ggOiBtX2JveGVz
KSB7CisgICAgICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSBib3gtPnRl
eHRGcmFnbWVudHMoKTsKKworICAgICAgICBmb3IgKGF1dG8mIGZyYWdtZW50IDogZnJhZ21lbnRz
KSB7CisgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICAgICAgZnJh
Z21lbnQueSArPSB0ZXh0TGVuZ3RoU2hpZnQgKiBhdENoYXJhY3RlcjsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBmcmFnbWVudC54ICs9IHRleHRMZW5ndGhTaGlmdCAqIGF0Q2hh
cmFjdGVyOworICAgICAgICAgICAgCisgICAgICAgICAgICBhdENoYXJhY3RlciArPSBmcmFnbWVu
dC5sZW5ndGg7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU1ZHVGV4dENodW5rOjpidWls
ZEJveFRyYW5zZm9ybWF0aW9ucyhIYXNoTWFwPFNWR0lubGluZVRleHRCb3gqLCBBZmZpbmVUcmFu
c2Zvcm0+JiB0ZXh0Qm94VHJhbnNmb3JtYXRpb25zKSBjb25zdAoreworICAgIEFmZmluZVRyYW5z
Zm9ybSBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtOworICAgIGJvb2wgZm91bmRGaXJzdEZyYWdt
ZW50ID0gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8qIGJveCA6IG1fYm94ZXMpIHsKKyAgICAgICAg
aWYgKCFmb3VuZEZpcnN0RnJhZ21lbnQpIHsKKyAgICAgICAgICAgIGlmICghYm94U3BhY2luZ0Fu
ZEdseXBoc1RyYW5zZm9ybShib3gsIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0pKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm91bmRGaXJzdEZyYWdtZW50ID0gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHRleHRCb3hUcmFuc2Zvcm1hdGlvbnMuc2V0KGJveCwg
c3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybSk7CisgICAgfQorfQorCitib29sIFNWR1RleHRDaHVu
azo6Ym94U3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybShjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiBi
b3gsIEFmZmluZVRyYW5zZm9ybSYgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybSkgY29uc3QKK3sK
KyAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gYm94LT50ZXh0
RnJhZ21lbnRzKCk7CisgICAgaWYgKGZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVu
dHMuZmlyc3QoKTsKKyAgICBmbG9hdCBzY2FsZSA9IGRlc2lyZWRUZXh0TGVuZ3RoKCkgLyB0b3Rh
bExlbmd0aCgpOworCisgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS50cmFuc2xhdGUoZnJh
Z21lbnQueCwgZnJhZ21lbnQueSk7CisKKyAgICBpZiAobV9jaHVua1N0eWxlICYgVmVydGljYWxU
ZXh0KQorICAgICAgICBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybSgx
LCBzY2FsZSk7CisgICAgZWxzZQorICAgICAgICBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtLnNj
YWxlTm9uVW5pZm9ybShzY2FsZSwgMSk7CisKKyAgICBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3Jt
LnRyYW5zbGF0ZSgtZnJhZ21lbnQueCwgLWZyYWdtZW50LnkpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFNWR1RleHRDaHVuazo6cHJvY2Vzc1RleHRBbmNob3JDb3JyZWN0aW9uKCkgY29u
c3QKK3sKKyAgICBmbG9hdCB0ZXh0QW5jaG9yU2hpZnQgPSB0b3RhbEFuY2hvclNoaWZ0KCk7Cisg
ICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IG1fY2h1bmtTdHlsZSAmIFZlcnRpY2FsVGV4dDsKKwor
ICAgIGZvciAoYXV0byogYm94IDogbV9ib3hlcykgeworICAgICAgICBWZWN0b3I8U1ZHVGV4dEZy
YWdtZW50PiYgZnJhZ21lbnRzID0gYm94LT50ZXh0RnJhZ21lbnRzKCk7CisKKyAgICAgICAgZm9y
IChhdXRvJiBmcmFnbWVudCA6IGZyYWdtZW50cykgeworICAgICAgICAgICAgaWYgKGlzVmVydGlj
YWxUZXh0KQorICAgICAgICAgICAgICAgIGZyYWdtZW50LnkgKz0gdGV4dEFuY2hvclNoaWZ0Owor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZyYWdtZW50LnggKz0gdGV4dEFuY2hv
clNoaWZ0OworICAgICAgICB9CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmgJKHJldmlz
aW9uIDE4MjY3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5r
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtNDAsMjggKzQxLDM0IEBAIHB1YmxpYzoKICAgICAgICAgTGVuZ3Ro
QWRqdXN0U3BhY2luZ0FuZEdseXBocyA9IDEgPDwgNgogICAgIH07CiAKLSAgICBTVkdUZXh0Q2h1
bmsodW5zaWduZWQgY2h1bmtTdHlsZSwgZmxvYXQgZGVzaXJlZFRleHRMZW5ndGgpOworICAgIFNW
R1RleHRDaHVuayhjb25zdCBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+Ojpjb25zdF9pdGVyYXRv
ciYsIGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj46OmNvbnN0X2l0ZXJhdG9yJik7CiAK
LSAgICB2b2lkIGNhbGN1bGF0ZUxlbmd0aChmbG9hdCYgbGVuZ3RoLCB1bnNpZ25lZCYgY2hhcmFj
dGVycykgY29uc3Q7Ci0gICAgZmxvYXQgY2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0KGZsb2F0IGxl
bmd0aCkgY29uc3Q7CisgICAgdW5zaWduZWQgdG90YWxDaGFyYWN0ZXJzKCkgY29uc3Q7CisgICAg
ZmxvYXQgdG90YWxMZW5ndGgoKSBjb25zdDsKKyAgICBmbG9hdCB0b3RhbEFuY2hvclNoaWZ0KCkg
Y29uc3Q7CisgICAgdm9pZCBsYXlvdXQoSGFzaE1hcDxTVkdJbmxpbmVUZXh0Qm94KiwgQWZmaW5l
VHJhbnNmb3JtPiYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgcHJvY2Vzc1RleHRBbmNo
b3JDb3JyZWN0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBidWlsZEJveFRyYW5zZm9ybWF0aW9ucyhI
YXNoTWFwPFNWR0lubGluZVRleHRCb3gqLCBBZmZpbmVUcmFuc2Zvcm0+JikgY29uc3Q7CisgICAg
dm9pZCBwcm9jZXNzVGV4dExlbmd0aFNwYWNpbmdDb3JyZWN0aW9uKCkgY29uc3Q7CiAKICAgICBi
b29sIGlzVmVydGljYWxUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jaHVua1N0eWxlICYgVmVydGlj
YWxUZXh0OyB9CiAgICAgZmxvYXQgZGVzaXJlZFRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2Rlc2lyZWRUZXh0TGVuZ3RoOyB9CiAKLSAgICBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBi
b3hlcygpIHsgcmV0dXJuIG1fYm94ZXM7IH0KLSAgICBjb25zdCBWZWN0b3I8U1ZHSW5saW5lVGV4
dEJveCo+JiBib3hlcygpIGNvbnN0IHsgcmV0dXJuIG1fYm94ZXM7IH0KLQogICAgIGJvb2wgaGFz
RGVzaXJlZFRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRUZXh0TGVuZ3RoID4g
MCAmJiAoKG1fY2h1bmtTdHlsZSAmIExlbmd0aEFkanVzdFNwYWNpbmcpIHx8IChtX2NodW5rU3R5
bGUgJiBMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzKSk7IH0KLSAgICBib29sIGhhc1RleHRB
bmNob3IoKSBjb25zdCB7ICByZXR1cm4gbV9jaHVua1N0eWxlICYgUmlnaHRUb0xlZnRUZXh0ID8g
IShtX2NodW5rU3R5bGUgJiBFbmRBbmNob3IpIDogKG1fY2h1bmtTdHlsZSAmIE1pZGRsZUFuY2hv
cikgfHwgKG1fY2h1bmtTdHlsZSAmIEVuZEFuY2hvcik7IH0KKyAgICBib29sIGhhc1RleHRBbmNo
b3IoKSBjb25zdCB7ICByZXR1cm4gbV9jaHVua1N0eWxlICYgUmlnaHRUb0xlZnRUZXh0ID8gISht
X2NodW5rU3R5bGUgJiBFbmRBbmNob3IpIDogKG1fY2h1bmtTdHlsZSAmIChNaWRkbGVBbmNob3Ig
fCBFbmRBbmNob3IpKTsgfQogICAgIGJvb2wgaGFzTGVuZ3RoQWRqdXN0U3BhY2luZygpIGNvbnN0
IHsgcmV0dXJuIG1fY2h1bmtTdHlsZSAmIExlbmd0aEFkanVzdFNwYWNpbmc7IH0KICAgICBib29s
IGhhc0xlbmd0aEFkanVzdFNwYWNpbmdBbmRHbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2NodW5r
U3R5bGUgJiBMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzOyB9CiAKKyAgICBib29sIGJveFNw
YWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0oY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIEFmZmluZVRy
YW5zZm9ybSYpIGNvbnN0OworCiBwcml2YXRlOgogICAgIC8vIENvbnRhaW5zIGFsbCBTVkdJbmxp
bmVUZXh0Qm94ZXMgdGhpcyBjaHVuayBzcGFucy4KICAgICBWZWN0b3I8U1ZHSW5saW5lVGV4dEJv
eCo+IG1fYm94ZXM7CiAKLSAgICB1bnNpZ25lZCBtX2NodW5rU3R5bGU7Ci0gICAgZmxvYXQgbV9k
ZXNpcmVkVGV4dExlbmd0aDsKKyAgICB1bnNpZ25lZCBtX2NodW5rU3R5bGUgeyBEZWZhdWx0U3R5
bGUgfTsKKyAgICBmbG9hdCBtX2Rlc2lyZWRUZXh0TGVuZ3RoIHsgMCB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0Q2h1bmtCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuY3BwCShyZXZpc2lvbiAxODI2NzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTMyLDIyNSArMzMsNTEgQEAgU1ZHVGV4dENodW5rQnVpbGRlcjo6U1ZHVGV4dENodW5r
QnVpbGRlcgogCiB2b2lkIFNWR1RleHRDaHVua0J1aWxkZXI6OnRyYW5zZm9ybWF0aW9uRm9yVGV4
dEJveChTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkgY29uc3QKIHsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQWZm
aW5lVHJhbnNmb3JtLCBzX2lkZW50aXR5VHJhbnNmb3JtLCAoKSk7Ci0gICAgaWYgKCFtX3RleHRC
b3hUcmFuc2Zvcm1hdGlvbnMuY29udGFpbnModGV4dEJveCkpIHsKLSAgICAgICAgdHJhbnNmb3Jt
ID0gc19pZGVudGl0eVRyYW5zZm9ybTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQWZmaW5lVHJhbnNmb3JtPiBzX2lkZW50aXR5VHJhbnNm
b3JtOwogCi0gICAgdHJhbnNmb3JtID0gbV90ZXh0Qm94VHJhbnNmb3JtYXRpb25zLmdldCh0ZXh0
Qm94KTsKKyAgICBpZiAoIW1fdGV4dEJveFRyYW5zZm9ybWF0aW9ucy5jb250YWlucyh0ZXh0Qm94
KSkKKyAgICAgICAgdHJhbnNmb3JtID0gc19pZGVudGl0eVRyYW5zZm9ybTsKKyAgICBlbHNlCisg
ICAgICAgIHRyYW5zZm9ybSA9IG1fdGV4dEJveFRyYW5zZm9ybWF0aW9ucy5nZXQodGV4dEJveCk7
CiB9CiAKLXZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6YnVpbGRUZXh0Q2h1bmtzKFZlY3RvcjxT
VkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcykKK3ZvaWQgU1ZHVGV4dENodW5rQnVp
bGRlcjo6YnVpbGRUZXh0Q2h1bmtzKGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxp
bmVMYXlvdXRCb3hlcykKIHsKICAgICBpZiAobGluZUxheW91dEJveGVzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBmb3VuZFN0YXJ0ID0gZmFsc2U7Ci0gICAgdW5zaWdu
ZWQgbGFzdENodW5rU3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgdW5zaWduZWQgYm94UG9zaXRpb24g
PSAwOwotICAgIHVuc2lnbmVkIGJveENvdW50ID0gbGluZUxheW91dEJveGVzLnNpemUoKTsKLSAg
ICBmb3IgKDsgYm94UG9zaXRpb24gPCBib3hDb3VudDsgKytib3hQb3NpdGlvbikgewotICAgICAg
ICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gbGluZUxheW91dEJveGVzW2JveFBvc2l0aW9u
XTsKLSAgICAgICAgaWYgKCF0ZXh0Qm94LT5zdGFydHNOZXdUZXh0Q2h1bmsoKSkKKyAgICBWZWN0
b3I8U1ZHSW5saW5lVGV4dEJveCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxpbmVMYXlvdXRCb3hl
cy5iZWdpbigpOworICAgIFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGxpbmVMYXlvdXRCb3hlcy5lbmQoKTsKKyAgICBWZWN0b3I8U1ZHSW5saW5lVGV4dEJv
eCo+Ojpjb25zdF9pdGVyYXRvciBzdGFydCA9IGVuZDsKKworICAgIGZvciAoOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgaWYgKCEoKml0KS0+c3RhcnRzTmV3VGV4dENodW5rKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoIWZvdW5kU3RhcnQpIHsKLSAgICAgICAg
ICAgIGxhc3RDaHVua1N0YXJ0UG9zaXRpb24gPSBib3hQb3NpdGlvbjsKLSAgICAgICAgICAgIGZv
dW5kU3RhcnQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oYm94UG9zaXRpb24gPiBsYXN0Q2h1bmtTdGFydFBvc2l0
aW9uKTsKLSAgICAgICAgICAgIGFkZFRleHRDaHVuayhsaW5lTGF5b3V0Qm94ZXMsIGxhc3RDaHVu
a1N0YXJ0UG9zaXRpb24sIGJveFBvc2l0aW9uIC0gbGFzdENodW5rU3RhcnRQb3NpdGlvbik7Ci0g
ICAgICAgICAgICBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uID0gYm94UG9zaXRpb247CisgICAgICAg
IGlmIChzdGFydCA9PSBlbmQpCisgICAgICAgICAgICBzdGFydCA9IGl0OworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXJ0ICE9
IGl0KTsKKyAgICAgICAgICAgIG1fdGV4dENodW5rcy5hcHBlbmQoU1ZHVGV4dENodW5rKHN0YXJ0
LCBpdCkpOworICAgICAgICAgICAgc3RhcnQgPSBpdDsKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmICghZm91bmRTdGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGJveFBvc2l0aW9u
IC0gbGFzdENodW5rU3RhcnRQb3NpdGlvbiA+IDApCi0gICAgICAgIGFkZFRleHRDaHVuayhsaW5l
TGF5b3V0Qm94ZXMsIGxhc3RDaHVua1N0YXJ0UG9zaXRpb24sIGJveFBvc2l0aW9uIC0gbGFzdENo
dW5rU3RhcnRQb3NpdGlvbik7CisgICAgaWYgKHN0YXJ0ICE9IGVuZCkKKyAgICAgICAgbV90ZXh0
Q2h1bmtzLmFwcGVuZChTVkdUZXh0Q2h1bmsoc3RhcnQsIGl0KSk7CiB9CiAKLXZvaWQgU1ZHVGV4
dENodW5rQnVpbGRlcjo6bGF5b3V0VGV4dENodW5rcyhWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+
JiBsaW5lTGF5b3V0Qm94ZXMpCit2b2lkIFNWR1RleHRDaHVua0J1aWxkZXI6OmxheW91dFRleHRD
aHVua3MoY29uc3QgVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzKQog
ewogICAgIGJ1aWxkVGV4dENodW5rcyhsaW5lTGF5b3V0Qm94ZXMpOwogICAgIGlmIChtX3RleHRD
aHVua3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBjaHVua0Nv
dW50ID0gbV90ZXh0Q2h1bmtzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y2h1bmtDb3VudDsgKytpKQotICAgICAgICBwcm9jZXNzVGV4dENodW5rKG1fdGV4dENodW5rc1tp
XSk7Ci0KLSAgICBtX3RleHRDaHVua3MuY2xlYXIoKTsKLX0KLQotdm9pZCBTVkdUZXh0Q2h1bmtC
dWlsZGVyOjphZGRUZXh0Q2h1bmsoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91
dEJveGVzLCB1bnNpZ25lZCBib3hTdGFydCwgdW5zaWduZWQgYm94Q291bnQpCi17Ci0gICAgU1ZH
SW5saW5lVGV4dEJveCogdGV4dEJveCA9IGxpbmVMYXlvdXRCb3hlc1tib3hTdGFydF07Ci0gICAg
QVNTRVJUKHRleHRCb3gpOwotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGV4dEJv
eC0+cmVuZGVyZXIoKS5zdHlsZSgpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0
eWxlID0gc3R5bGUuc3ZnU3R5bGUoKTsKLQotICAgIC8vIEJ1aWxkIGNodW5rIHN0eWxlIGZsYWdz
LgotICAgIHVuc2lnbmVkIGNodW5rU3R5bGUgPSBTVkdUZXh0Q2h1bms6OkRlZmF1bHRTdHlsZTsK
LQotICAgIC8vIEhhbmRsZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eS4KLSAgICBpZiAoIXN0eWxlLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgY2h1bmtTdHlsZSB8PSBTVkdUZXh0Q2h1
bms6OlJpZ2h0VG9MZWZ0VGV4dDsKLQotICAgIC8vIEhhbmRsZSAnd3JpdGluZy1tb2RlJyBwcm9w
ZXJ0eS4KLSAgICBpZiAoc3ZnU3R5bGUuaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAg
IGNodW5rU3R5bGUgfD0gU1ZHVGV4dENodW5rOjpWZXJ0aWNhbFRleHQ7Ci0KLSAgICAvLyBIYW5k
bGUgJ3RleHQtYW5jaG9yJyBwcm9wZXJ0eS4KLSAgICBzd2l0Y2ggKHN2Z1N0eWxlLnRleHRBbmNo
b3IoKSkgewotICAgIGNhc2UgVEFfU1RBUlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVEFf
TUlERExFOgotICAgICAgICBjaHVua1N0eWxlIHw9IFNWR1RleHRDaHVuazo6TWlkZGxlQW5jaG9y
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRBX0VORDoKLSAgICAgICAgY2h1bmtTdHlsZSB8
PSBTVkdUZXh0Q2h1bms6OkVuZEFuY2hvcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfTsKLQotICAg
IC8vIEhhbmRsZSAnbGVuZ3RoQWRqdXN0JyBwcm9wZXJ0eS4KLSAgICBmbG9hdCBkZXNpcmVkVGV4
dExlbmd0aCA9IDA7Ci0gICAgaWYgKFNWR1RleHRDb250ZW50RWxlbWVudCogdGV4dENvbnRlbnRF
bGVtZW50ID0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjplbGVtZW50RnJvbVJlbmRlcmVyKHRleHRC
b3gtPnJlbmRlcmVyKCkucGFyZW50KCkpKSB7Ci0gICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVu
Z3RoQ29udGV4dCh0ZXh0Q29udGVudEVsZW1lbnQpOwotICAgICAgICBkZXNpcmVkVGV4dExlbmd0
aCA9IHRleHRDb250ZW50RWxlbWVudC0+c3BlY2lmaWVkVGV4dExlbmd0aCgpLnZhbHVlKGxlbmd0
aENvbnRleHQpOwotCi0gICAgICAgIHN3aXRjaCAodGV4dENvbnRlbnRFbGVtZW50LT5sZW5ndGhB
ZGp1c3QoKSkgewotICAgICAgICBjYXNlIFNWR0xlbmd0aEFkanVzdFVua25vd246Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdMZW5ndGhBZGp1c3RTcGFjaW5nOgotICAgICAg
ICAgICAgY2h1bmtTdHlsZSB8PSBTVkdUZXh0Q2h1bms6Okxlbmd0aEFkanVzdFNwYWNpbmc7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVkdMZW5ndGhBZGp1c3RTcGFjaW5nQW5k
R2x5cGhzOgotICAgICAgICAgICAgY2h1bmtTdHlsZSB8PSBTVkdUZXh0Q2h1bms6Okxlbmd0aEFk
anVzdFNwYWNpbmdBbmRHbHlwaHM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIGNodW5rIDogbV90ZXh0Q2h1bmtzKSB7CisgICAgICAgIGNodW5r
LmxheW91dChtX3RleHRCb3hUcmFuc2Zvcm1hdGlvbnMpOwogICAgIH0KIAotICAgIFNWR1RleHRD
aHVuayBjaHVuayhjaHVua1N0eWxlLCBkZXNpcmVkVGV4dExlbmd0aCk7Ci0KLSAgICBWZWN0b3I8
U1ZHSW5saW5lVGV4dEJveCo+JiBib3hlcyA9IGNodW5rLmJveGVzKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gYm94U3RhcnQ7IGkgPCBib3hTdGFydCArIGJveENvdW50OyArK2kpCi0gICAgICAg
IGJveGVzLmFwcGVuZChsaW5lTGF5b3V0Qm94ZXNbaV0pOwotCi0gICAgbV90ZXh0Q2h1bmtzLmFw
cGVuZChjaHVuayk7Ci19Ci0KLXZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vzc1RleHRD
aHVuayhjb25zdCBTVkdUZXh0Q2h1bmsmIGNodW5rKQotewotICAgIGJvb2wgcHJvY2Vzc1RleHRM
ZW5ndGggPSBjaHVuay5oYXNEZXNpcmVkVGV4dExlbmd0aCgpOwotICAgIGJvb2wgcHJvY2Vzc1Rl
eHRBbmNob3IgPSBjaHVuay5oYXNUZXh0QW5jaG9yKCk7Ci0gICAgaWYgKCFwcm9jZXNzVGV4dEFu
Y2hvciAmJiAhcHJvY2Vzc1RleHRMZW5ndGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0
IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGJveGVzID0gY2h1bmsuYm94ZXMoKTsKLSAgICB1
bnNpZ25lZCBib3hDb3VudCA9IGJveGVzLnNpemUoKTsKLSAgICBpZiAoIWJveENvdW50KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBDYWxjdWxhdGUgYWJzb2x1dGUgbGVuZ3RoIG9mIHdob2xl
IHRleHQgY2h1bmsgKHN0YXJ0aW5nIGZyb20gdGV4dCBib3ggJ3N0YXJ0Jywgc3Bhbm5pbmcgJ2xl
bmd0aCcgdGV4dCBib3hlcykuCi0gICAgZmxvYXQgY2h1bmtMZW5ndGggPSAwOwotICAgIHVuc2ln
bmVkIGNodW5rQ2hhcmFjdGVycyA9IDA7Ci0gICAgY2h1bmsuY2FsY3VsYXRlTGVuZ3RoKGNodW5r
TGVuZ3RoLCBjaHVua0NoYXJhY3RlcnMpOwotCi0gICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IGNo
dW5rLmlzVmVydGljYWxUZXh0KCk7Ci0gICAgaWYgKHByb2Nlc3NUZXh0TGVuZ3RoKSB7Ci0gICAg
ICAgIGlmIChjaHVuay5oYXNMZW5ndGhBZGp1c3RTcGFjaW5nKCkpIHsKLSAgICAgICAgICAgIGZs
b2F0IHRleHRMZW5ndGhTaGlmdCA9IChjaHVuay5kZXNpcmVkVGV4dExlbmd0aCgpIC0gY2h1bmtM
ZW5ndGgpIC8gY2h1bmtDaGFyYWN0ZXJzOwotICAgICAgICAgICAgdW5zaWduZWQgYXRDaGFyYWN0
ZXIgPSAwOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBib3hQb3NpdGlvbiA9IDA7IGJveFBv
c2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9zaXRpb24pIHsKLSAgICAgICAgICAgICAgICBWZWN0
b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gYm94ZXNbYm94UG9zaXRpb25dLT50ZXh0
RnJhZ21lbnRzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50cy5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHByb2Nlc3NUZXh0
TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24oaXNWZXJ0aWNhbFRleHQsIHRleHRMZW5ndGhTaGlmdCwg
ZnJhZ21lbnRzLCBhdENoYXJhY3Rlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQoY2h1bmsuaGFzTGVuZ3RoQWRqdXN0U3BhY2luZ0FuZEdseXBo
cygpKTsKLSAgICAgICAgICAgIGZsb2F0IHRleHRMZW5ndGhTY2FsZSA9IGNodW5rLmRlc2lyZWRU
ZXh0TGVuZ3RoKCkgLyBjaHVua0xlbmd0aDsKLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBz
cGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtOwotCi0gICAgICAgICAgICBib29sIGZvdW5kRmlyc3RG
cmFnbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBib3hQb3NpdGlvbiA9
IDA7IGJveFBvc2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9zaXRpb24pIHsKLSAgICAgICAgICAg
ICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gYm94ZXNbYm94UG9zaXRpb25dOwotICAg
ICAgICAgICAgICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSB0ZXh0Qm94
LT50ZXh0RnJhZ21lbnRzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50cy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgaWYg
KCFmb3VuZEZpcnN0RnJhZ21lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRGaXJzdEZy
YWdtZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRTcGFjaW5nQW5kR2x5cGhz
VHJhbnNmb3JtKGlzVmVydGljYWxUZXh0LCB0ZXh0TGVuZ3RoU2NhbGUsIGZyYWdtZW50cy5maXJz
dCgpLCBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBtX3RleHRCb3hUcmFuc2Zvcm1hdGlvbnMuc2V0KHRleHRCb3gsIHNwYWNp
bmdBbmRHbHlwaHNUcmFuc2Zvcm0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKCFwcm9jZXNzVGV4dEFuY2hvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
SWYgd2UgcHJldmlvdXNseSBhcHBsaWVkIGEgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nIiBjb3JyZWN0
aW9uLCB3ZSBoYXZlIHRvIHJlY2FsY3VsYXRlIHRoZSBjaHVuayBsZW5ndGgsIHRvIGJlIGFibGUg
dG8gYXBwbHkgdGhlIHRleHQtYW5jaG9yIHNoaWZ0LgotICAgIGlmIChwcm9jZXNzVGV4dExlbmd0
aCAmJiBjaHVuay5oYXNMZW5ndGhBZGp1c3RTcGFjaW5nKCkpIHsKLSAgICAgICAgY2h1bmtMZW5n
dGggPSAwOwotICAgICAgICBjaHVua0NoYXJhY3RlcnMgPSAwOwotICAgICAgICBjaHVuay5jYWxj
dWxhdGVMZW5ndGgoY2h1bmtMZW5ndGgsIGNodW5rQ2hhcmFjdGVycyk7Ci0gICAgfQotCi0gICAg
ZmxvYXQgdGV4dEFuY2hvclNoaWZ0ID0gY2h1bmsuY2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0KGNo
dW5rTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGJveFBvc2l0aW9uID0gMDsgYm94UG9zaXRp
b24gPCBib3hDb3VudDsgKytib3hQb3NpdGlvbikgewotICAgICAgICBWZWN0b3I8U1ZHVGV4dEZy
YWdtZW50PiYgZnJhZ21lbnRzID0gYm94ZXNbYm94UG9zaXRpb25dLT50ZXh0RnJhZ21lbnRzKCk7
Ci0gICAgICAgIGlmIChmcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHByb2Nlc3NUZXh0QW5jaG9yQ29ycmVjdGlvbihpc1ZlcnRpY2FsVGV4dCwgdGV4
dEFuY2hvclNoaWZ0LCBmcmFnbWVudHMpOwotICAgIH0KLX0KLQotdm9pZCBTVkdUZXh0Q2h1bmtC
dWlsZGVyOjpwcm9jZXNzVGV4dExlbmd0aFNwYWNpbmdDb3JyZWN0aW9uKGJvb2wgaXNWZXJ0aWNh
bFRleHQsIGZsb2F0IHRleHRMZW5ndGhTaGlmdCwgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZy
YWdtZW50cywgdW5zaWduZWQmIGF0Q2hhcmFjdGVyKQotewotICAgIHVuc2lnbmVkIGZyYWdtZW50
Q291bnQgPSBmcmFnbWVudHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBm
cmFnbWVudENvdW50OyArK2kpIHsKLSAgICAgICAgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9
IGZyYWdtZW50c1tpXTsKLQotICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAg
ICBmcmFnbWVudC55ICs9IHRleHRMZW5ndGhTaGlmdCAqIGF0Q2hhcmFjdGVyOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBmcmFnbWVudC54ICs9IHRleHRMZW5ndGhTaGlmdCAqIGF0Q2hhcmFj
dGVyOwotCi0gICAgICAgIGF0Q2hhcmFjdGVyICs9IGZyYWdtZW50Lmxlbmd0aDsKLSAgICB9Ci19
Ci0KLXZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vzc1RleHRBbmNob3JDb3JyZWN0aW9u
KGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0IHRleHRBbmNob3JTaGlmdCwgVmVjdG9yPFNWR1Rl
eHRGcmFnbWVudD4mIGZyYWdtZW50cykKLXsKLSAgICB1bnNpZ25lZCBmcmFnbWVudENvdW50ID0g
ZnJhZ21lbnRzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnRD
b3VudDsgKytpKSB7Ci0gICAgICAgIFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVu
dHNbaV07Ci0KLSAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgZnJhZ21l
bnQueSArPSB0ZXh0QW5jaG9yU2hpZnQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZyYWdt
ZW50LnggKz0gdGV4dEFuY2hvclNoaWZ0OwotICAgIH0KLX0KLQotdm9pZCBTVkdUZXh0Q2h1bmtC
dWlsZGVyOjpidWlsZFNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0oYm9vbCBpc1ZlcnRpY2FsVGV4
dCwgZmxvYXQgc2NhbGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIEFmZmluZVRy
YW5zZm9ybSYgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybSkKLXsKLSAgICBzcGFjaW5nQW5kR2x5
cGhzVHJhbnNmb3JtLnRyYW5zbGF0ZShmcmFnbWVudC54LCBmcmFnbWVudC55KTsKLQotICAgIGlm
IChpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS5zY2Fs
ZU5vblVuaWZvcm0oMSwgc2NhbGUpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2luZ0FuZEdseXBo
c1RyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oc2NhbGUsIDEpOwotCi0gICAgc3BhY2luZ0FuZEds
eXBoc1RyYW5zZm9ybS50cmFuc2xhdGUoLWZyYWdtZW50LngsIC1mcmFnbWVudC55KTsKKyAgICBt
X3RleHRDaHVua3MuY2xlYXIoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmgJKHJldmlzaW9uIDE4MjY3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTQyLDE2ICs0Myw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8U1ZH
VGV4dENodW5rPiYgdGV4dENodW5rcygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENodW5rczsgfQog
ICAgIHZvaWQgdHJhbnNmb3JtYXRpb25Gb3JUZXh0Qm94KFNWR0lubGluZVRleHRCb3gqLCBBZmZp
bmVUcmFuc2Zvcm0mKSBjb25zdDsKIAotICAgIHZvaWQgYnVpbGRUZXh0Q2h1bmtzKFZlY3RvcjxT
VkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcyk7Ci0gICAgdm9pZCBsYXlvdXRUZXh0
Q2h1bmtzKFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcyk7Ci0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBhZGRUZXh0Q2h1bmsoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYg
bGluZUxheW91dEJveGVzLCB1bnNpZ25lZCBib3hQb3NpdGlvbiwgdW5zaWduZWQgYm94Q291bnQp
OwotICAgIHZvaWQgcHJvY2Vzc1RleHRDaHVuayhjb25zdCBTVkdUZXh0Q2h1bmsmKTsKLQotICAg
IHZvaWQgcHJvY2Vzc1RleHRMZW5ndGhTcGFjaW5nQ29ycmVjdGlvbihib29sIGlzVmVydGljYWxU
ZXh0LCBmbG9hdCB0ZXh0TGVuZ3RoU2hpZnQsIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiwgdW5z
aWduZWQmIGF0Q2hhcmFjdGVyKTsKLSAgICB2b2lkIHByb2Nlc3NUZXh0QW5jaG9yQ29ycmVjdGlv
bihib29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCB0ZXh0QW5jaG9yU2hpZnQsIFZlY3RvcjxTVkdU
ZXh0RnJhZ21lbnQ+Jik7Ci0gICAgdm9pZCBidWlsZFNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0o
Ym9vbCBpc1ZlcnRpY2FsVGV4dCwgZmxvYXQgc2NhbGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYs
IEFmZmluZVRyYW5zZm9ybSYpOworICAgIHZvaWQgYnVpbGRUZXh0Q2h1bmtzKGNvbnN0IFZlY3Rv
cjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcyk7CisgICAgdm9pZCBsYXlvdXRU
ZXh0Q2h1bmtzKGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hl
cyk7CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFNWR1RleHRDaHVuaz4gbV90ZXh0Q2h1bmtzOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRFbmdpbmUuY3BwCShyZXZpc2lvbiAxODI2NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsy
MCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2lu
ZS5oIgogCisjaW5jbHVkZSAiUGF0aFRyYXZlcnNhbFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHVGV4dFBhdGguaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHSW5s
aW5lVGV4dEJveC5oIgpAQCAtMTg1LDE1ICsxODYsMTEgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5n
aW5lOjpiZWdpblRleHRQYXRoTAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKICAgICAgICAgY29uc3QgU1ZHVGV4dENodW5rJiBjaHVuayA9IHRleHRDaHVua3MuYXQo
aSk7CiAKLSAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAgICAgICAgdW5zaWduZWQgY2hhcmFj
dGVycyA9IDA7Ci0gICAgICAgIGNodW5rLmNhbGN1bGF0ZUxlbmd0aChsZW5ndGgsIGNoYXJhY3Rl
cnMpOworICAgICAgICB0b3RhbExlbmd0aCArPSBjaHVuay50b3RhbExlbmd0aCgpOworICAgICAg
ICB0b3RhbENoYXJhY3RlcnMgKz0gY2h1bmsudG90YWxDaGFyYWN0ZXJzKCk7CiAKICAgICAgICAg
Ly8gSGFuZGxlIHRleHQtYW5jaG9yIGFzIGFkZGl0aW9uYWwgc3RhcnQgb2Zmc2V0IGZvciB0ZXh0
IHBhdGhzLgotICAgICAgICBtX3RleHRQYXRoU3RhcnRPZmZzZXQgKz0gY2h1bmsuY2FsY3VsYXRl
VGV4dEFuY2hvclNoaWZ0KGxlbmd0aCk7Ci0KLSAgICAgICAgdG90YWxMZW5ndGggKz0gbGVuZ3Ro
OwotICAgICAgICB0b3RhbENoYXJhY3RlcnMgKz0gY2hhcmFjdGVyczsKKyAgICAgICAgbV90ZXh0
UGF0aFN0YXJ0T2Zmc2V0ICs9IGNodW5rLnRvdGFsQW5jaG9yU2hpZnQoKTsKICAgICB9CiAKICAg
ICBtX3RleHRQYXRoQ3VycmVudE9mZnNldCA9IG1fdGV4dFBhdGhTdGFydE9mZnNldDsKQEAgLTU1
NCwxMyArNTUxLDE0IEBAIHZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGkK
ICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgYm9vbCBvayA9IGZhbHNlOwot
ICAgICAgICAgICAgRmxvYXRQb2ludCBwb2ludCA9IG1fdGV4dFBhdGgucG9pbnRBdExlbmd0aCh0
ZXh0UGF0aE9mZnNldCwgb2spOworICAgICAgICAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZl
cnNhbFN0YXRlKG1fdGV4dFBhdGgudHJhdmVyc2FsU3RhdGVBdExlbmd0aCh0ZXh0UGF0aE9mZnNl
dCwgb2spKTsKICAgICAgICAgICAgIEFTU0VSVChvayk7CiAKKyAgICAgICAgICAgIEZsb2F0UG9p
bnQgcG9pbnQgPSB0cmF2ZXJzYWxTdGF0ZS5tX2N1cnJlbnQ7CiAgICAgICAgICAgICB4ID0gcG9p
bnQueCgpOwogICAgICAgICAgICAgeSA9IHBvaW50LnkoKTsKLSAgICAgICAgICAgIGFuZ2xlID0g
bV90ZXh0UGF0aC5ub3JtYWxBbmdsZUF0TGVuZ3RoKHRleHRQYXRoT2Zmc2V0LCBvayk7Ci0gICAg
ICAgICAgICBBU1NFUlQob2spOworCisgICAgICAgICAgICBhbmdsZSA9IHRyYXZlcnNhbFN0YXRl
Lm1fbm9ybWFsQW5nbGU7CiAKICAgICAgICAgICAgIC8vIEZvciB2ZXJ0aWNhbCB0ZXh0IG9uIHBh
dGgsIHRoZSBhY3R1YWwgYW5nbGUgaGFzIHRvIGJlIHJvdGF0ZWQgOTAgZGVncmVlcyBhbnRpLWNs
b2Nrd2lzZSwgbm90IHRoZSBvcmllbnRhdGlvbiBhbmdsZSEKICAgICAgICAgICAgIGlmIChtX2lz
VmVydGljYWxUZXh0KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODI2NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3
IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJFbGVtZW50SXRl
cmF0b3IuaCIKKyNpbmNsdWRlICJQYXRoVHJhdmVyc2FsU3RhdGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0ltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR01QYXRoRWxlbWVudC5oIgpAQCAtMjE0LDE0ICsyMTUsMTggQEAgdm9pZCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6YnVpbGRUcmFucwogCiAgICAgYm9vbCBvayA9IGZhbHNlOwogICAgIGZs
b2F0IHBvc2l0aW9uT25QYXRoID0gbV9hbmltYXRpb25QYXRoLmxlbmd0aCgpICogcGVyY2VudGFn
ZTsKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbV9hbmltYXRpb25QYXRoLnBvaW50QXRMZW5n
dGgocG9zaXRpb25PblBhdGgsIG9rKTsKKworICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJz
YWxTdGF0ZShtX2FuaW1hdGlvblBhdGgudHJhdmVyc2FsU3RhdGVBdExlbmd0aChwb3NpdGlvbk9u
UGF0aCwgb2spKTsKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFBv
aW50IHBvc2l0aW9uID0gdHJhdmVyc2FsU3RhdGUubV9jdXJyZW50OworICAgIGZsb2F0IGFuZ2xl
ID0gdHJhdmVyc2FsU3RhdGUubV9ub3JtYWxBbmdsZTsKKwogICAgIHRyYW5zZm9ybS0+dHJhbnNs
YXRlKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpKTsKICAgICBSb3RhdGVNb2RlIHJvdGF0ZU1v
ZGUgPSB0aGlzLT5yb3RhdGVNb2RlKCk7CiAgICAgaWYgKHJvdGF0ZU1vZGUgIT0gUm90YXRlQXV0
byAmJiByb3RhdGVNb2RlICE9IFJvdGF0ZUF1dG9SZXZlcnNlKQogICAgICAgICByZXR1cm47Ci0g
ICAgZmxvYXQgYW5nbGUgPSBtX2FuaW1hdGlvblBhdGgubm9ybWFsQW5nbGVBdExlbmd0aChwb3Np
dGlvbk9uUGF0aCwgb2spOwogICAgIGlmIChyb3RhdGVNb2RlID09IFJvdGF0ZUF1dG9SZXZlcnNl
KQogICAgICAgICBhbmdsZSArPSAxODA7CiAgICAgdHJhbnNmb3JtLT5yb3RhdGUoYW5nbGUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVC
dWlsZGVyLmNwcAkocmV2aXNpb24gMTgyNjc0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwzMSArMjks
MzMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVy
OjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyKCkKICAgICA6IG1fdHJhdmVyc2FsU3RhdGUo
MCkKKyAgICAsIG1fc2VnbWVudEluZGV4KDApCiB7CiB9CiAKIHZvaWQgU1ZHUGF0aFRyYXZlcnNh
bFN0YXRlQnVpbGRlcjo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBib29s
LCBQYXRoQ29vcmRpbmF0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwot
ICAgIG1fdHJhdmVyc2FsU3RhdGUtPm1fdG90YWxMZW5ndGggKz0gbV90cmF2ZXJzYWxTdGF0ZS0+
bW92ZVRvKHRhcmdldFBvaW50KTsKKyAgICBtX3RyYXZlcnNhbFN0YXRlLT5wcm9jZXNzUGF0aEVs
ZW1lbnQoUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludCwgJnRhcmdldFBvaW50KTsKIH0KIAogdm9pZCBT
VkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgdGFy
Z2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxT
dGF0ZSk7Ci0gICAgbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3RyYXZlcnNh
bFN0YXRlLT5saW5lVG8odGFyZ2V0UG9pbnQpOworICAgIG1fdHJhdmVyc2FsU3RhdGUtPnByb2Nl
c3NQYXRoRWxlbWVudChQYXRoRWxlbWVudEFkZExpbmVUb1BvaW50LCAmdGFyZ2V0UG9pbnQpOwog
fQogCiB2b2lkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgY29uc3QgRmxv
YXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSkKIHsKKyAgICBGbG9hdFBv
aW50IHBvaW50c1tdID0geyBwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQgfTsKICAgICBBU1NF
UlQobV90cmF2ZXJzYWxTdGF0ZSk7Ci0gICAgbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0
aCArPSBtX3RyYXZlcnNhbFN0YXRlLT5jdWJpY0JlemllclRvKHBvaW50MSwgcG9pbnQyLCB0YXJn
ZXRQb2ludCk7CisgICAgbV90cmF2ZXJzYWxTdGF0ZS0+cHJvY2Vzc1BhdGhFbGVtZW50KFBhdGhF
bGVtZW50QWRkQ3VydmVUb1BvaW50LCBwb2ludHMpOwogfQogCiB2b2lkIFNWR1BhdGhUcmF2ZXJz
YWxTdGF0ZUJ1aWxkZXI6OmNsb3NlUGF0aCgpCiB7CiAgICAgQVNTRVJUKG1fdHJhdmVyc2FsU3Rh
dGUpOwotICAgIG1fdHJhdmVyc2FsU3RhdGUtPm1fdG90YWxMZW5ndGggKz0gbV90cmF2ZXJzYWxT
dGF0ZS0+Y2xvc2VTdWJwYXRoKCk7CisgICAgbV90cmF2ZXJzYWxTdGF0ZS0+cHJvY2Vzc1BhdGhF
bGVtZW50KFBhdGhFbGVtZW50Q2xvc2VTdWJwYXRoLCBudWxscHRyKTsKIH0KIAogdm9pZCBTVkdQ
YXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpzZXREZXNpcmVkTGVuZ3RoKGZsb2F0IGRlc2lyZWRM
ZW5ndGgpCkBAIC02NSwyMiArNjcsOSBAQCB2b2lkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxk
ZXI6OnNldERlCiBib29sIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmNvbnRpbnVlQ29u
c3VtaW5nKCkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7ICAgIAotICAgIG1fdHJh
dmVyc2FsU3RhdGUtPnByb2Nlc3NTZWdtZW50KCk7CiAgICAgcmV0dXJuICFtX3RyYXZlcnNhbFN0
YXRlLT5tX3N1Y2Nlc3M7CiB9CiAKLXZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6
aW5jcmVtZW50UGF0aFNlZ21lbnRDb3VudCgpCi17Ci0gICAgQVNTRVJUKG1fdHJhdmVyc2FsU3Rh
dGUpOwotICAgICsrbV90cmF2ZXJzYWxTdGF0ZS0+bV9zZWdtZW50SW5kZXg7Ci19Ci0KLXVuc2ln
bmVkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnBhdGhTZWdtZW50SW5kZXgoKQotewot
ICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKLSAgICByZXR1cm4gbV90cmF2ZXJzYWxTdGF0
ZS0+bV9zZWdtZW50SW5kZXg7Ci19Ci0KIGZsb2F0IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxk
ZXI6OnRvdGFsTGVuZ3RoKCkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVy
LmgJKHJldmlzaW9uIDE4MjY3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVy
c2FsU3RhdGVCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE1ICszMiwxNSBAQCBjbGFz
cyBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyIDogcHViCiBwdWJsaWM6CiAgICAgU1ZHUGF0
aFRyYXZlcnNhbFN0YXRlQnVpbGRlcigpOwogCi0gICAgdW5zaWduZWQgcGF0aFNlZ21lbnRJbmRl
eCgpOworICAgIHVuc2lnbmVkIHBhdGhTZWdtZW50SW5kZXgoKSB7IHJldHVybiBtX3NlZ21lbnRJ
bmRleDsgfQogICAgIGZsb2F0IHRvdGFsTGVuZ3RoKCk7CiAgICAgU1ZHUG9pbnQgY3VycmVudFBv
aW50KCk7CiAKICAgICB2b2lkIHNldEN1cnJlbnRUcmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2Fs
U3RhdGUqIHRyYXZlcnNhbFN0YXRlKSB7IG1fdHJhdmVyc2FsU3RhdGUgPSB0cmF2ZXJzYWxTdGF0
ZTsgfQogICAgIHZvaWQgc2V0RGVzaXJlZExlbmd0aChmbG9hdCk7Ci0gICAgdmlydHVhbCB2b2lk
IGluY3JlbWVudFBhdGhTZWdtZW50Q291bnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
aW5jcmVtZW50UGF0aFNlZ21lbnRDb3VudCgpIG92ZXJyaWRlIHsgKyttX3NlZ21lbnRJbmRleDsg
fQogICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUNvbnN1bWluZygpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBjbGVhbnVwKCkgb3ZlcnJpZGUgeyBtX3RyYXZlcnNhbFN0YXRlID0gMDsgfQor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwKCkgb3ZlcnJpZGUgeyBtX3RyYXZlcnNhbFN0YXRlID0g
bnVsbHB0ciwgbV9zZWdtZW50SW5kZXggPSAwOyB9CiAKIHByaXZhdGU6CiAgICAgLy8gVXNlZCBp
biBVbmFsdGVyZWRQYXJzaW5nL05vcm1hbGl6ZWRQYXJzaW5nIG1vZGVzLgpAQCAtNTksNiArNTks
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0
LCBib29sLCBib29sLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSBvdmVy
cmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKICAgICBQYXRoVHJhdmVyc2FsU3RhdGUq
IG1fdHJhdmVyc2FsU3RhdGU7CisgICAgdW5zaWduZWQgbV9zZWdtZW50SW5kZXg7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhVdGls
aXRpZXMuY3BwCShyZXZpc2lvbiAxODI2NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw3ICszMTksNyBAQCBib29sIGdl
dFBvaW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtCiAgICAgaWYgKHN0cmVhbS0+aXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJh
dmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoKTsK
KyAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRl
OjpUcmF2ZXJzYWxWZWN0b3JBdExlbmd0aCk7CiAgICAgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVp
bGRlciogYnVpbGRlciA9IGdsb2JhbFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIodHJhdmVy
c2FsU3RhdGUsIGxlbmd0aCk7CiAKICAgICBhdXRvIHNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U+KHN0cmVhbSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250749</attachid>
            <date>2015-04-14 15:53:46 -0700</date>
            <delta_ts>2015-04-14 16:50:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141570-20150414155250.patch</filename>
            <type>text/plain</type>
            <size>66726</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODI4MTQpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE1LTA0LTE0ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgdGV4
dFBhdGggbGF5b3V0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTcwLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEN1dCBkb3duIHRoZSB0aW1lIHNwZW50IGluIHRy
YXZlcnNpbmcgdGhlIHBhdGggZm9yIHRleHQgYnkgNTAlLiBJbnN0ZWFkCisgICAgICAgIG9mIHRy
YXZlcnNpbmcgdGhlIHBhdGggdHdpY2UgYXQgYSBjZXJ0YWluIGxlbmd0aDogb25lIHRpbWUgZm9y
IHRoZSBwb3NpdGlvbgorICAgICAgICBhbmQgdGhlIHNlY29uZCB0aW1lIGZvciB0aGUgYW5nbGUs
IHdlIGNhbiBtZXJnZSB0aGVzZSB0d28gcGFzc2VzIGludG8gb25lLgorCisgICAgICAgICogU1ZH
L1RleHRPblBhdGhTaW1wbGUuaHRtbDogQWRkZWQuCisgICAgICAgICogU1ZHL3Jlc291cmNlcy9U
ZXh0T25QYXRoU2ltcGxlLnN2ZzogQWRkZWQuCisKIDIwMTUtMDQtMTMgIFphbGFuIEJ1anRhcyAg
PHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhciB1cCB0aGUgdGVzdCBjb250ZW50IHdo
ZW4gdGVzdCBpcyBkb25lLgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9TVkcvVGV4dE9uUGF0aFNp
bXBsZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvU1ZHL1RleHRPblBhdGhT
aW1wbGUuaHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvU1ZHL1RleHRPblBh
dGhTaW1wbGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgUGVyZlRl
c3RSdW5uZXIubWVhc3VyZVBhZ2VMb2FkVGltZSh7cGF0aDogInJlc291cmNlcy9UZXh0T25QYXRo
U2ltcGxlLnN2ZyJ9KTsKKyAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL1NWRy9yZXNvdXJjZXMvVGV4dE9uUGF0aFNpbXBsZS5zdmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
UGVyZm9ybWFuY2VUZXN0cy9TVkcvcmVzb3VyY2VzL1RleHRPblBhdGhTaW1wbGUuc3ZnCShyZXZp
c2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9TVkcvcmVzb3VyY2VzL1RleHRPblBhdGhTaW1w
bGUuc3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKzxzdmcgd2lkdGg9IjEwMCUi
IGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDQwMDAgMjUwMCIKKyAgICAgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAKKyAgICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGxpbmsiPgorICA8ZGVmcz4KKyAgICA8cGF0aCBpZD0iU2ltcGxlUGF0aCIKKyAg
ICAgIGQ9Ik0gMTAwICAyMDAgCisgICAgICAgICBDIDIwMCAgMTAwIDMwMCAgICAwICA0MDAgIDEw
MAorICAgICAgICAgQyA1MDAgIDIwMCA2MDAgIDMwMCAgNzAwICAyMDAKKyAgICAgICAgIEMgODAw
ICAxMDAgOTAwICAgIDAgIDEwMDAgMTAwCisgICAgICAgICBDIDExMDAgMjAwIDEyMDAgMzAwICAx
MzAwIDIwMAorICAgICAgICAgQyAxNDAwIDEwMCAxNTAwICAgMCAgMTYwMCAxMDAKKyAgICAgICAg
IEMgMTcwMCAyMDAgMTgwMCAzMDAgIDE5MDAgMjAwIi8+CisgIDwvZGVmcz4KKworICA8ZyBpZD0i
VGV4dE9uUGF0aDI1Ij4KKyAgICA8ZyBpZD0iVGV4dE9uUGF0aDUiPgorICAgICAgPGcgaWQ9IlRl
eHRPblBhdGgiPgorICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNTaW1wbGVQYXRoIiBmaWxsPSJu
b25lIiBzdHJva2U9InJlZCIvPgorICAgICAgICA8dGV4dCBmb250LWZhbWlseT0iVmVyZGFuYSIg
Zm9udC1zaXplPSI0Mi41Ij4KKyAgICAgICAgICA8dGV4dFBhdGggeGxpbms6aHJlZj0iI1NpbXBs
ZVBhdGgiPgorICAgICAgICAgICAgV2UgZ28gdXAsIHRoZW4gd2UgZ28gZG93biwgdGhlbiB1cCBh
Z2FpbiwgdGhlbiB3ZSBnbyBkb3duLCB0aGVuIHdlIHVwIGFnYWluLCB0aGVuIHdlIGdvIGRvd24u
CisgICAgICAgICAgPC90ZXh0UGF0aD4KKyAgICAgICAgPC90ZXh0PgorICAgICAgPC9nPgorICAg
ICAgPHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw0
MCkiLz4KKyAgICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGgiIHRyYW5zZm9ybT0idHJh
bnNsYXRlKDAsODApIi8+CisgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoIiB0cmFu
c2Zvcm09InRyYW5zbGF0ZSgwLDEyMCkiLz4KKyAgICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRP
blBhdGgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMTYwKSIvPgorICAgIDwvZz4KKyAgCisgICAg
PHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0aDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjAw
KSIvPgorICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGg1IiB0cmFuc2Zvcm09InRyYW5z
bGF0ZSgwLDQwMCkiLz4KKyAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoNSIgdHJhbnNm
b3JtPSJ0cmFuc2xhdGUoMCw2MDApIi8+CisgICAgPHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0
aDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsODAwKSIvPgorICA8L2c+CisKKyAgPHVzZSB4bGlu
azpocmVmPSIjVGV4dE9uUGF0aDI1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDAwLDApIi8+Cisg
IDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGgyNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwx
MjAwKSIvPgorICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoMjUiIHRyYW5zZm9ybT0idHJh
bnNsYXRlKDIwMDAsMTIwMCkiLz4KKworICA8cmVjdCB4PSIxIiB5PSIxIiB3aWR0aD0iMzk5OSIg
aGVpZ2h0PSIyNDk5IiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIi
IC8+Cis8L3N2Zz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjgxNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5OCBAQAorMjAxNS0w
NC0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAg
ICAgIHRleHRQYXRoIGxheW91dCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTU3MC4KKworICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBUaGUgYm90dGxlbmVjayBvZiB0aGUg
dGV4dC1vbi1wYXRoIHBlcmZvcm1hbmNlIGlzIHRoZSBwb3NpdGlvbiBhbmQgYW5nbGUKKyAgICAg
ICAgY2FsY3VsYXRpb25zIGZvciBldmVyeSBzaW5nbGUgY2hhcmFjdGVyLiBJZiB0aGUgbnVtYmVy
IG9mIGNoYXJhY3RlcnMgaXMKKyAgICAgICAgJ24nIGFuZCB0aGUgbnVtYmVyIG9mIHBhdGggZWxl
bWVudHMgaXMgJ20nLCB0aGUgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NpbmcKKyAgICAgICAgdGhl
IHBhdGggZWxlbWVudHMgaXMgTygyIHggbiB4IG0pLiBXaGF0IG1ha2VzIGl0IHJlYWxseSB3b3Jz
ZSBpcywgZm9yIGV2ZXJ5CisgICAgICAgIGN1cnZlIHdlIGtlZXAgc3BsaXR0aW5nIHRoZSBjdXJ2
ZSB0aWxsIHRoZSBzcGxpdCBjdXJ2ZSBpcyBhbG1vc3QgYSBzdHJhaWdodAorICAgICAgICBsaW5l
LiBUaGUgY2hhbmdlcyB3ZSBuZWVkIHRvIGRvIGFyZToKKyAgICAgICAgMS4gTWVyZ2UgdGhlIHBv
c2l0aW9uIGFuZCB0aGUgYW5nbGUgdHJhdmVyc2FscyBpbiBvbmUgcGFzcyBzaW5jZSB0aGV5IGFy
ZQorICAgICAgICAgICByZXR1cm5pbmcgaW5mbyBmb3IgdGhlIHNhbWUgbGVuZ3RoIG9uIHRoZSBw
YXRoLiBUaGVyZSBpcyBhIGRlZ2VuZXJhdGUKKyAgICAgICAgICAgY2FzZSBmb3IgdGhlIHN0YXJ0
aW5nIHBvaW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIGFuZ2xlLiBUaGUgb3JpZ2luYWwKKyAgICAg
ICAgICAgY29kZSB3YXMgc29sdmluZyB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBhbiBlcHNpbG9u
IGluc3RlYWQgb2YgemVybyBidXQKKyAgICAgICAgICAgYmVjYXVzZSB0cmF2ZXJzaW5nIHRoZSBw
YXRoIGZvciBwb3NpdGlvbiBhbmQgYW5nbGUgYXJlIG5vdyBtZXJnZWQsIHdlCisgICAgICAgICAg
IHdpbGwgcGFzcyB6ZXJvIGZvciB0aGUgc3RhcnRpbmcgcG9pbnQgYXMgaXMuIEFsbCB3ZSBuZWVk
IGlzIHRvIG1vdmUgb25lCisgICAgICAgICAgIHN0ZXAgYWhlYWQgd2l0aG91dCBtb3ZpbmcgdGhl
IHBvc2l0aW9uLiBXZSBuZWVkIHRoZSBleHRyYSBzdGVwIGZvcndhcmQKKyAgICAgICAgICAgdG8g
Y2FsY3VsYXRlIHRoZSBzbG9wZSBvZiB0aGUgcGF0aCBhdCB0aGUgc3RhcnRpbmcgcG9pbnQuCisg
ICAgICAgIDIuIFdlIG5lZWQgdG8gYWRkIGEgbmV3IG1vZGUgdG8gdHJhdmVyc2luZyBhIHBhdGgu
IFRoZSBuZXcgbW9kZSB3aWxsIHRha2UKKyAgICAgICAgICAgYSB2ZWN0b3Igb2YgbGVuZ3RocyBh
bmQgcmV0dXJucyBhIHZlY3RvciBvZiBhcnJvdyB2ZWN0b3JzLiBFdmVyeSBhcnJvdworICAgICAg
ICAgICB2ZWN0b3IgcmVwcmVzZW50cyBhIHBvc2l0aW9uIGFuZCBhbiBhbmdsZSBvbiB0aGUgcGF0
aCBhdCBhIGNlcnRhaW4gbGVuZ3RoLgorICAgICAgICAgICBUaGlzIHJlcXVpcmVzIGNoYW5naW5n
IHRoZSBTVkdUZXh0TGF5b3V0RW5naW5lIHRvIGNhbGN1bGF0ZSB0aGUgbGVuZ3RocworICAgICAg
ICAgICBvZiB0aGUgY2hhcmFjdGVycyBvbiB0aGUgY3VydmUgZmlyc3QgYW5kIHRoZW4gcGFzc2lu
ZyBhbGwgb2YgdGhlbSB0byB0aGUKKyAgICAgICAgICAgcGF0aCB0cmF2ZXJzYWwgZnVuY3Rpb24u
IEluc3RlYWQgb2YgdHJhdmVyc2luZyB0aGUgcGF0aCBmb3IgZXZlcnkgbGVuZ3RoLAorICAgICAg
ICAgICB3ZSBhcmUgZ29pbmcgdG8gZ2V0IHRoZSByZXF1aXJlZCBwb2ludCBhbmQgYW5nbGUgZnJv
bSB0aGUgdmVjdG9yIG9mIGFycm93CisgICAgICAgICAgIHZlY3RvcnMuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoZSBmaXJzdCBmaXggb25seS4gVGhlIHNlY29uZCBvbmUg
d2lsbCByZXF1aXJlCisgICAgICAgIHJlZmFjdG9yaW5nIHRoZSBTVkdUZXh0TGF5b3V0RW5naW5l
IHNvIEkgYW0gZ29pbmcgdG8gYWRkcmVzcyBpdCBpbiBhCisgICAgICAgIGRpZmZlcmVudCBwYXRj
aC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbik6IEl0IGlzIGNsZWFuZXIgdG8gbW92ZSB0
aGUgZnVuY3Rpb24KKyAgICAgICAgb2YgdGhpcyBtZXRob2QgdG8gUGF0aFRyYXZlcnNhbFN0YXRl
Ojpwcm9jZXNzUGF0aEVsZW1lbnQoKS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRo
OjpsZW5ndGgpOiBVc2UgbmV3IGVudW0gQWN0aW9uIHZhbHVlIGFuZCBhY2Nlc3MgbWV0aG9kcy4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3Ro
KTogTmV3IGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlCisgICAgICAgIHRyYXZlcnNhbFN0YXRl
IGF0IGEgY2VydGFpbiBsZW5ndGggb24gYSBwYXRoLgorICAgICAgICAKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6OnBvaW50QXRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6bm9ybWFs
QW5nbGVBdExlbmd0aCk6IFVzZSB0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKCkgdG8gZ2V0CisgICAg
ICAgIHRoZSB0cmF2ZXJzYWxTdGF0ZSBhbmQgZnJvbSBpdCByZXR1cm4gZWl0aGVyIHRoZSBwb3Np
dGlvbiBvciB0aGUgYW5nbGUuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1BhdGguaDogRGVmaW5lIHRyYXZlcnNhbFN0YXRlQXRMZW5ndGgoKS4KKyAgICAgICAgCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmRpc3RhbmNlTGluZSk6IENvZGUgY2xlYW4gdXAuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6Y3VydmVMZW5ndGgpOiBNYWtlIHRoZSBzZXR0aW5nIG9mIG1fcHJldmlvdXMg
YW5kIG1fY3VycmVudCBoYXBwZW5zCisgICAgICAgIG9ubHkgaW4gdGhpcyBmdW5jdGlvbi4KKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OlBhdGhUcmF2ZXJz
YWxTdGF0ZSk6IEFkZCBhbiBvcHRpb25hbCBwYXJhbWV0ZXIKKyAgICAgICAgZm9yIHRoZSBkZXNp
cmVkIGxlbmd0aCBhbmQgbW92ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG90aGVyIG1lbWJl
cnMgdG8KKyAgICAgICAgdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpjbG9zZVN1YnBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjptb3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aFRyYXZlcnNhbFN0YXRlOjpsaW5lVG8pOiBBZGQgdGhlIGRpc3RhbmNlIHRvIHRoZSBtX3RvdGFs
TGVuZ3RoCisgICAgICAgIGluc3RlYWQgb2YgcmV0dXJuaW5nIGl0IHNpbmNlIHRoaXMgaXMgd2hh
dCBhbGwgdGhlIGNhbGxlcnMgd2VyZSBkb2luZy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGhUcmF2ZXJzYWxTdGF0ZTo6Y3ViaWNCZXppZXJUbyk6IEFkZCB0aGUgZGlzdGFuY2Ug
dG8gdGhlCisgICAgICAgIG1fdG90YWxMZW5ndGguIE1vdmUgdGhlIHNldHRpbmcgb2YgbV9wcmV2
aW91cyBhbmQgbV9jdXJyZW50IHRvIGN1cnZlTGVuZ3RoKCkuCisgICAgICAgIFJlbW92ZSB1bnVz
ZWQgbWVtYmVycyBtX2NvbnRyb2wxIGFuZCBtX2NvbnRyb2wyLgorCisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OnByb2Nlc3NTZWdtZW50KTogRGVsZXRlZC4gICAgICAgIAor
ICAgICAgICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpmaW5hbGl6ZUFwcGVuZFBhdGhF
bGVtZW50KTogQ3JlYXRlIGEgbmV3CisgICAgICAgIG5hbWUgZm9yIHRoZSBmdW5jdGlvbi4gSGFu
ZGxlIHRoZSBjYXNlIG9mIHRoZSBhbmdsZSBhdCB0aGUgc3RhcnRpbmcgcG9pbnQKKyAgICAgICAg
d2hlcmUgbV9kZXNpcmVkTGVuZ3RoIGlzIHNldCB0byB6ZXJvLiBUaGUgbmV3IGZsYWcgbV9pc1pl
cm9WZWN0b3Igd2lsbCBiZQorICAgICAgICBzZXQgdG8gbm90aWZ5IHRoZSBjYWxsZXIgdGhhdCB0
aGUgIG5leHQgaXRlcmF0aW9uIHdpbGwgYmUgdGhlIGxhc3Qgb25lIGFuZAorICAgICAgICBpdCBp
cyBvbmx5IG5lZWRlZCBmb3IgdGhlIGNhbGN1bGF0aW5nIHRoZSBhbmdsZSBvZiBhIHplcm8gdmVj
dG9yLiBtX2N1cnJlbnQKKyAgICAgICAgc2hvdWxkIG5vdCBjaGFuZ2UgYnkgdGhpcyBsYXN0IGl0
ZXJhdGlvbi4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6
OmFwcGVuZFBhdGhFbGVtZW50KTogVGhpcyBjb2RlIGlzIG1vdmVkIGZyb20KKyAgICAgICAgcGF0
aExlbmd0aEFwcGxpZXJGdW5jdGlvbigpLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1BhdGhFbGVtZW50KTogVGhpcyBmdW5jdGlvbiBpcyB1
c2VkCisgICAgICAgIGJ5IHRoZSBjbGFzcyBQYXRoLiBJdCBpcyBhIHdyYXBwZXIgZm9yIGFwcGVu
ZFBhdGhFbGVtZW50KCkuIElmIG1faXNaZXJvVmVjdG9yCisgICAgICAgIGlzIHNldCB3ZSBhcHBl
bmQgdGhlIG5ldyBlbGVtZW50IHRvIGEgY29weSBmb3IgdGhlIFBhdGhUcmF2ZXJzYWxTdGF0ZSBq
dXN0CisgICAgICAgIHRvIGdldCB0aGUgYW5nbGUgZm9yIHRoZSB6ZXJvIHZlY3Rvci4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oOiBDaGFuZ2UgdGhl
IGVudW0gdmFsdWVzIHRvIG5vdAorICAgICAgICBub3QgaW5jbHVkZSB0aGUgY2xhc3Mgb3IgdGhl
IGVudW0gY2xhc3MuIE1ha2UgdGhlIGRhdGEgbWVtYmVycyBwcml2YXRlIGFuZAorICAgICAgICBl
eHBvc2UgdGhlIG5lZWRlZCBvbmVzIHRocm91Z2ggYWNjZXNzIG1ldGhvZHMuIE1ha2UgYWxsIHRo
ZSBpbnRlcm5hbCBtZXRob2RzCisgICAgICAgIHRvIGJlIHByaXZhdGUuCisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpwcm9jZXNzUGF0aEVsZW1lbnQpOiAg
QW5vdGhlciB3cmFwcGVyIGZvcgorICAgICAgICBhcHBlbmRQYXRoRWxlbWVudCgpIHdoaWNoIGlz
IHVzZWQgYnkgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci4KKyAgICAgICAgCisgICAgICAg
IChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OmFjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OnNldEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
VHJhdmVyc2FsU3RhdGU6OmRlc2lyZWRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aFRy
YXZlcnNhbFN0YXRlOjpzZXREZXNpcmVkTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhU
cmF2ZXJzYWxTdGF0ZTo6c3VjY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2Fs
U3RhdGU6OnRvdGFsTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhUcmF2ZXJzYWxTdGF0
ZTo6Y3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6Om5vcm1h
bEFuZ2xlKTogTmV3IGFjY2VzcyBtZXRob2RzIHdoaWNoIGFyZSBub3cKKyAgICAgICAgbmVlZGVk
IGFmdGVyIG1ha2luZyB0aGUgZGF0YSBtZW1iZXJzIHByaXZhdGUuCisgICAgICAgIAorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdSb290SW5saW5lQm94OjpsYXlvdXRDaGFyYWN0ZXJzSW5UZXh0Qm94ZXMpOiBNYWtlIHRo
ZSBjYXN0aW5nCisgICAgICAgIG9mIHRoZSByZW5kZXJlciBvbiB0aGUgY2FsbGVyIHNpZGUuCisg
ICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKTogVGhlIGNvbnN0cnVjdG9y
IHNob3VsZCBhcHBlbmQgdGhlCisgICAgICAgIGVsZW1lbnRzIG9mIG1fYm94ZXMgaW5zdGVhZCBv
ZiBtYWtpbmcgdGhpcyBmcm9tIG91dHNpZGUgdGhlIGNsYXNzLgorICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRDaHVuazo6dG90YWxDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRDaHVuazo6dG90YWxMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4
dENodW5rOjpjYWxjdWxhdGVMZW5ndGgpOiBEZWxldGVkLgorICAgICAgICBSZXBsYWNlIGNhbGN1
bGF0ZUxlbmd0aCgpIGJ5IHRvdGFsQ2hhcmFjdGVycygpIGFuZCB0b3RhbExlbmd0aCgpIHRvIG1h
a2UKKyAgICAgICAgdGhlIGludGVyZmFjZSBjbGVhbmVyLgorICAgICAgICAKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRDaHVuazo6dG90YWxBbmNob3JTaGlmdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bms6OmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdCk6IERlbGV0ZWQuCisgICAg
ICAgIFJlbmFtZSB0aGUgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bms6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bms6
OnByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVGV4dENodW5rOjpidWlsZEJveFRyYW5zZm9ybWF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bms6OmJveFNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dENodW5rOjpwcm9jZXNzVGV4dEFuY2hvckNvcnJlY3Rpb24pOgorICAg
ICAgICBNb3ZlIHRoZSBjaHVuayBsYXlvdXQgY29kZSBmcm9tIFNWR1RleHRDaHVua0J1aWxkZXI6
OmxheW91dFRleHRDaHVua3MoKQorICAgICAgICB0byB0aGUgU1ZHVGV4dENodW5rOjpsYXlvdXQo
KS4gTW92ZSBhbGwgdGhlIGhlbHBlciBmdW5jdGlvbnMgYXMgd2VsbC4KKyAgICAgICAgCisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRDaHVuazo6aGFzVGV4dEFuY2hvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1
bms6OmJveGVzKTogRGVsZXRlZC4KKyAgICAgICAgQWRkIHRoZSBuZXcgbWV0aG9kcyBhbmQgY2hh
bmdlIG1vc3Qgb2YgdGhlIHB1YmxpYyBtZXRob2RzIHRvIGJlIHByaXZhdGUuCisgICAgICAgIAor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtCdWlsZGVyOjp0b3RhbENoYXJhY3RlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6dG90YWxMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6dG90YWxBbmNob3JTaGlmdCk6IFRoaXMgY29k
ZSBpcyBtb3ZlZCBmcm9tCisgICAgICAgIFNWR1RleHRMYXlvdXRFbmdpbmUuIEl0IHNjYW5zIHRo
ZSBib3hlcyBzdG9yZWQgaW4gdGhlIFNWR1RleHRDaHVua0J1aWxkZXIKKyAgICAgICAgYW5kIHN1
bXMgdXAgdGhlIHRvdGFsIHZhbHVlcy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpTVkdU
ZXh0Q2h1bmtCdWlsZGVyOjp0cmFuc2Zvcm1hdGlvbkZvclRleHRCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6YnVpbGRUZXh0Q2h1bmtzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRDaHVua0J1aWxkZXI6OmxheW91dFRleHRDaHVua3MpOiBDb2RlIGNsZWFu
IHVwLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVua0J1aWxkZXI6OmFk
ZFRleHRDaHVuayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtCdWls
ZGVyOjpwcm9jZXNzVGV4dENodW5rKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rl
eHRDaHVua0J1aWxkZXI6OnByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vzc1RleHRB
bmNob3JDb3JyZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVu
a0J1aWxkZXI6OmJ1aWxkU3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybSk6IERlbGV0ZWQuCisgICAg
ICAgIFRoaXMgY29kZSBub3cgbGl2ZXMgaW4gU1ZHVGV4dENodW5rLgorICAgICAgICAKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuaDogQWRkIG5ldyBtZXRob2Rz
IGZvciBjb2RlIHdoaWNoIHdhcworICAgICAgICBtb3ZlZCBmcm9tIFNWR1RleHRMYXlvdXRFbmdp
bmUgYW5kIHJlbW92ZSBtZXRob2RzIGZvciBjb2RlIHdoaWNoIHdhcyByZW1vdmVkCisgICAgICAg
IHRvIFNWR1RleHRDaHVuay4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdp
bmU6OmJlZ2luVGV4dFBhdGhMYXlvdXQpOiBVc2UgdGhlIHN1bSB1cCBtZXRob2RzCisgICAgICAg
IGZyb20gU1ZHVGV4dENodW5rQnVpbGRlciBpbnN0ZWFkIG9mIGxvb3BpbmcgdGhyb3VnaCB0aGUg
Y2h1bmtzLiBBbHNvIGdldCBhCisgICAgICAgIGNsZWFuIG9yZGVyIGZvciBkZWZpbmluZyB2YXJp
YWJsZXMgYW5kIGRvaW5nIHRoZSBjYWxjdWxhdGlvbnMuCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dExheW91dEVuZ2luZTo6ZmluYWxpemVUcmFuc2Zvcm1NYXRyaWNlcyk6IENv
ZGUgY2xlYW4gdXAuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEVu
Z2luZTo6bGF5b3V0VGV4dE9uTGluZU9yUGF0aCk6IERvIGEgc2luZ2xlIHBhdGgKKyAgICAgICAg
dHJhdmVyc2FsIHRvIGdldCB0aGUgcG9zaXRpb24gYW5kIHRoZSBhbmdsZSBmb3IgYSBsZW5ndGgg
b24gYSBwYXRoLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRFbmdpbmUuaDogRm9yY2UgcGFzc2luZyBhIFJlbmRlclNWR1RleHRQYXRoJgorICAgICAgICB0
byBiZWdpblRleHRQYXRoTGF5b3V0KCkgaW5zdGVhZCBvZiBSZW5kZXJPYmplY3QqIGFuZCB0aGVu
IGNhc3RpbmcgaXQuCisgICAgICAgIAorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlTW90aW9uRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YnVp
bGRUcmFuc2Zvcm1Gb3JQcm9ncmVzcyk6IERvIGEgc2luZ2xlCisgICAgICAgIHBhdGggdHJhdmVy
c2FsIHRvIGdldCB0aGUgcG9zaXRpb24gYW5kIHRoZSBhbmdsZSBhdCBhIGxlbmd0aCBvbiBhIHBh
dGguCisgICAgICAgIAorICAgICAgICAqIHN2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OlNW
R1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlcjo6bW92ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhU
cmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmxpbmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
VHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y2xvc2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnNldERlc2lyZWRMZW5ndGgpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y29udGludWVDb25z
dW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6
dG90YWxMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVp
bGRlcjo6Y3VycmVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxT
dGF0ZUJ1aWxkZXI6OmluY3JlbWVudFBhdGhTZWdtZW50Q291bnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6cGF0aFNlZ21lbnRJbmRl
eCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnBhdGhT
ZWdtZW50SW5kZXgpOgorICAgICAgICBDb2RlIGNsZWFuIHVwLgorICAgICAgICAKKyAgICAgICAg
KiBzdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTVkdQYXRo
U2VnQXRMZW5ndGhGcm9tU1ZHUGF0aEJ5dGVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
VG90YWxMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBv
aW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKTogVXNlIG5ldyBUcmF2ZXJzYWxTdGF0ZTo6
QWN0aW9uCisgICAgICAgIGVudW0gdmFsdWVzLgorCiAyMDE1LTA0LTE0ICBSb2dlciBGb25nICA8
cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gVGltZSBudW1iZXJz
IG9uIG1lZGlhIGNvbnRyb2xzIG1vdmUgYXMgdGhleSB1cGRhdGUgb24gT1NYLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAJKHJldmlzaW9uIDE4Mjc1OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw1NCArNDIsMzIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIHZvaWQg
cGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbih2b2lkKiBpbmZvLCBjb25zdCBQYXRoRWxlbWVudCog
ZWxlbWVudCkKIHsKICAgICBQYXRoVHJhdmVyc2FsU3RhdGUmIHRyYXZlcnNhbFN0YXRlID0gKnN0
YXRpY19jYXN0PFBhdGhUcmF2ZXJzYWxTdGF0ZSo+KGluZm8pOwotICAgIGlmICh0cmF2ZXJzYWxT
dGF0ZS5tX3N1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFBvaW50KiBwb2ludHMg
PSBlbGVtZW50LT5wb2ludHM7Ci0gICAgZmxvYXQgc2VnbWVudExlbmd0aCA9IDA7Ci0gICAgc3dp
dGNoIChlbGVtZW50LT50eXBlKSB7Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1lbnRNb3ZlVG9Qb2lu
dDoKLSAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5tb3ZlVG8ocG9p
bnRzWzBdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRk
TGluZVRvUG9pbnQ6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUu
bGluZVRvKHBvaW50c1swXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQYXRo
RWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0g
dHJhdmVyc2FsU3RhdGUucXVhZHJhdGljQmV6aWVyVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9p
bnQ6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUuY3ViaWNCZXpp
ZXJUbyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOgotICAgICAgICAgICAgc2Vn
bWVudExlbmd0aCA9IHRyYXZlcnNhbFN0YXRlLmNsb3NlU3VicGF0aCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIHRyYXZlcnNhbFN0YXRlLm1fdG90YWxMZW5ndGggKz0gc2VnbWVu
dExlbmd0aDsgCi0gICAgdHJhdmVyc2FsU3RhdGUucHJvY2Vzc1NlZ21lbnQoKTsKKyAgICB0cmF2
ZXJzYWxTdGF0ZS5wcm9jZXNzUGF0aEVsZW1lbnQoZWxlbWVudCk7CiB9CiAKIGZsb2F0IFBhdGg6
Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRl
KFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsVG90YWxMZW5ndGgpOworICAgIFBhdGhUcmF2
ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGU6OkFjdGlvbjo6VG90
YWxMZW5ndGgpOwogICAgIGFwcGx5KCZ0cmF2ZXJzYWxTdGF0ZSwgcGF0aExlbmd0aEFwcGxpZXJG
dW5jdGlvbik7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRlLm1fdG90YWxMZW5ndGg7CisgICAg
cmV0dXJuIHRyYXZlcnNhbFN0YXRlLnRvdGFsTGVuZ3RoKCk7CiB9CiAKLUZsb2F0UG9pbnQgUGF0
aDo6cG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAorUGF0aFRyYXZl
cnNhbFN0YXRlIFBhdGg6OnRyYXZlcnNhbFN0YXRlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29s
JiBzdWNjZXNzKSBjb25zdAogewotICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0
ZShQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNhbFBvaW50QXRMZW5ndGgpOwotICAgIHRyYXZl
cnNhbFN0YXRlLm1fZGVzaXJlZExlbmd0aCA9IGxlbmd0aDsKKyAgICBQYXRoVHJhdmVyc2FsU3Rh
dGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpBY3Rpb246OlZlY3RvckF0TGVu
Z3RoLCBsZW5ndGgpOwogICAgIGFwcGx5KCZ0cmF2ZXJzYWxTdGF0ZSwgcGF0aExlbmd0aEFwcGxp
ZXJGdW5jdGlvbik7Ci0gICAgb2sgPSB0cmF2ZXJzYWxTdGF0ZS5tX3N1Y2Nlc3M7Ci0gICAgcmV0
dXJuIHRyYXZlcnNhbFN0YXRlLm1fY3VycmVudDsKKyAgICBzdWNjZXNzID0gdHJhdmVyc2FsU3Rh
dGUuc3VjY2VzcygpOworICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0ZTsKIH0KIAotZmxvYXQgUGF0
aDo6bm9ybWFsQW5nbGVBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAorRmxv
YXRQb2ludCBQYXRoOjpwb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgc3VjY2Vzcykg
Y29uc3QKIHsKLSAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZl
cnNhbFN0YXRlOjpUcmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoKTsKLSAgICB0cmF2ZXJzYWxT
dGF0ZS5tX2Rlc2lyZWRMZW5ndGggPSBsZW5ndGggPyBsZW5ndGggOiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6ZXBzaWxvbigpOwotICAgIGFwcGx5KCZ0cmF2ZXJzYWxTdGF0ZSwgcGF0aExl
bmd0aEFwcGxpZXJGdW5jdGlvbik7Ci0gICAgb2sgPSB0cmF2ZXJzYWxTdGF0ZS5tX3N1Y2Nlc3M7
Ci0gICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRlLm1fbm9ybWFsQW5nbGU7CisgICAgcmV0dXJuIHRy
YXZlcnNhbFN0YXRlQXRMZW5ndGgobGVuZ3RoLCBzdWNjZXNzKS5jdXJyZW50KCk7Cit9CisKK2Zs
b2F0IFBhdGg6Om5vcm1hbEFuZ2xlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBzdWNjZXNz
KSBjb25zdAoreworICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKGxlbmd0aCwgc3Vj
Y2Vzcykubm9ybWFsQW5nbGUoKTsKIH0KIAogdm9pZCBQYXRoOjphZGRSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSwgUm91bmRl
ZFJlY3RTdHJhdGVneSBzdHJhdGVneSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXRoLmgJKHJldmlzaW9uIDE4Mjc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKICAgICBjbGFzcyBGbG9h
dFNpemU7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OworICAgIGNsYXNzIFBhdGhUcmF2ZXJz
YWxTdGF0ZTsKICAgICBjbGFzcyBSb3VuZGVkUmVjdDsKICAgICBjbGFzcyBTdHJva2VTdHlsZUFw
cGxpZXI7CiAKQEAgLTEwMCwxMCArMTAxLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwogICAgICAgICBGbG9hdFJlY3QgZmFz
dEJvdW5kaW5nUmVjdCgpIGNvbnN0OwogICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdS
ZWN0KFN0cm9rZVN0eWxlQXBwbGllciogPSAwKSBjb25zdDsKLSAgICAgICAgCisKICAgICAgICAg
ZmxvYXQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnRBdExlbmd0aChm
bG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKLSAgICAgICAgZmxvYXQgbm9ybWFsQW5nbGVB
dExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKKyAgICAgICAgUGF0aFRyYXZl
cnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBzdWNj
ZXNzKSBjb25zdDsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0
aCwgYm9vbCYgc3VjY2VzcykgY29uc3Q7CisgICAgICAgIGZsb2F0IG5vcm1hbEFuZ2xlQXRMZW5n
dGgoZmxvYXQgbGVuZ3RoLCBib29sJiBzdWNjZXNzKSBjb25zdDsKIAogICAgICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fcGF0aDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aFRyYXZlcnNhbFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCShyZXZpc2lvbiAxODI3NTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTM0LDcgKzM1LDkgQEAgc3RhdGljIGlubGluZSBGbG9hdFBvaW50IG1pZFBvaW50KGNvbnN0IAog
CiBzdGF0aWMgaW5saW5lIGZsb2F0IGRpc3RhbmNlTGluZShjb25zdCBGbG9hdFBvaW50JiBzdGFy
dCwgY29uc3QgRmxvYXRQb2ludCYgZW5kKQogewotICAgIHJldHVybiBzcXJ0ZigoZW5kLngoKSAt
IHN0YXJ0LngoKSkgKiAoZW5kLngoKSAtIHN0YXJ0LngoKSkgKyAoZW5kLnkoKSAtIHN0YXJ0Lnko
KSkgKiAoZW5kLnkoKSAtIHN0YXJ0LnkoKSkpOworICAgIGZsb2F0IGR4ID0gZW5kLngoKSAtIHN0
YXJ0LngoKTsKKyAgICBmbG9hdCBkeSA9IGVuZC55KCkgLSBzdGFydC55KCk7CisgICAgcmV0dXJu
IHNxcnRmKGR4ICogZHggKyBkeSAqIGR5KTsKIH0KIAogc3RydWN0IFF1YWRyYXRpY0JlemllciB7
CkBAIC0xMTQsMTEwICsxMTcsMTQ5IEBAIHN0cnVjdCBDdWJpY0JlemllciB7CiAvLyBBbm90aGVy
IGNoZWNrIHdoaWNoIGlzIHBvc3NpYmxlIHVwLWZyb250ICh0byBzZW5kIHVzIGRvd24gdGhlIGZh
c3QgcGF0aCkgd291bGQgYmUgdG8gY2hlY2sgaWYKIC8vIGFwcHJveGltYXRlRGlzdGFuY2UoKSAr
IGN1cnJlbnQgdG90YWwgZGlzdGFuY2UgPiBkZXNpcmVkIGRpc3RhbmNlCiB0ZW1wbGF0ZTxjbGFz
cyBDdXJ2ZVR5cGU+Ci1zdGF0aWMgZmxvYXQgY3VydmVMZW5ndGgoUGF0aFRyYXZlcnNhbFN0YXRl
JiB0cmF2ZXJzYWxTdGF0ZSwgQ3VydmVUeXBlIGN1cnZlKQorc3RhdGljIGZsb2F0IGN1cnZlTGVu
Z3RoKGNvbnN0IFBhdGhUcmF2ZXJzYWxTdGF0ZSYgdHJhdmVyc2FsU3RhdGUsIGNvbnN0IEN1cnZl
VHlwZSYgb3JpZ2luYWxDdXJ2ZSwgRmxvYXRQb2ludCYgcHJldmlvdXMsIEZsb2F0UG9pbnQmIGN1
cnJlbnQpCiB7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGN1cnZlU3RhY2tEZXB0aExpbWl0
ID0gMjA7Ci0KLSAgICBWZWN0b3I8Q3VydmVUeXBlPiBjdXJ2ZVN0YWNrOwotICAgIGN1cnZlU3Rh
Y2suYXBwZW5kKGN1cnZlKTsKLQorICAgIEN1cnZlVHlwZSBjdXJ2ZSA9IG9yaWdpbmFsQ3VydmU7
CisgICAgVmVjdG9yPEN1cnZlVHlwZSwgY3VydmVTdGFja0RlcHRoTGltaXQ+IGN1cnZlU3RhY2s7
CiAgICAgZmxvYXQgdG90YWxMZW5ndGggPSAwOwotICAgIGRvIHsKKworICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9IGN1cnZlLmFwcHJveGltYXRlRGlzdGFuY2UoKTsK
LSAgICAgICAgaWYgKChsZW5ndGggLSBkaXN0YW5jZUxpbmUoY3VydmUuc3RhcnQsIGN1cnZlLmVu
ZCkpID4ga1BhdGhTZWdtZW50TGVuZ3RoVG9sZXJhbmNlICYmIGN1cnZlU3RhY2suc2l6ZSgpIDw9
IGN1cnZlU3RhY2tEZXB0aExpbWl0KSB7CisKKyAgICAgICAgaWYgKChsZW5ndGggLSBkaXN0YW5j
ZUxpbmUoY3VydmUuc3RhcnQsIGN1cnZlLmVuZCkpID4ga1BhdGhTZWdtZW50TGVuZ3RoVG9sZXJh
bmNlICYmIGN1cnZlU3RhY2suc2l6ZSgpIDwgY3VydmVTdGFja0RlcHRoTGltaXQpIHsKICAgICAg
ICAgICAgIEN1cnZlVHlwZSBsZWZ0Q3VydmU7CiAgICAgICAgICAgICBDdXJ2ZVR5cGUgcmlnaHRD
dXJ2ZTsKICAgICAgICAgICAgIGN1cnZlLnNwbGl0KGxlZnRDdXJ2ZSwgcmlnaHRDdXJ2ZSk7CiAg
ICAgICAgICAgICBjdXJ2ZSA9IGxlZnRDdXJ2ZTsKICAgICAgICAgICAgIGN1cnZlU3RhY2suYXBw
ZW5kKHJpZ2h0Q3VydmUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdG90YWxMZW5n
dGggKz0gbGVuZ3RoOwotICAgICAgICAgICAgaWYgKHRyYXZlcnNhbFN0YXRlLm1fYWN0aW9uID09
IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsUG9pbnRBdExlbmd0aAotICAgICAgICAgICAg
IHx8IHRyYXZlcnNhbFN0YXRlLm1fYWN0aW9uID09IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVy
c2FsTm9ybWFsQW5nbGVBdExlbmd0aCkgewotICAgICAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRl
Lm1fcHJldmlvdXMgPSBjdXJ2ZS5zdGFydDsKLSAgICAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0
ZS5tX2N1cnJlbnQgPSBjdXJ2ZS5lbmQ7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYXZlcnNhbFN0
YXRlLm1fdG90YWxMZW5ndGggKyB0b3RhbExlbmd0aCA+IHRyYXZlcnNhbFN0YXRlLm1fZGVzaXJl
ZExlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsTGVuZ3RoOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY3VydmUgPSBjdXJ2ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAg
ICAgIGN1cnZlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KLSAgICB9IHdoaWxlICghY3VydmVTdGFjay5pc0VtcHR5KCkpOwotICAgIAorCisgICAg
ICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aDsKKyAgICAgICAgaWYgKHRyYXZlcnNhbFN0YXRlLmFj
dGlvbigpID09IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6QWN0aW9uOjpWZWN0b3JBdExlbmd0aCkgewor
ICAgICAgICAgICAgcHJldmlvdXMgPSBjdXJ2ZS5zdGFydDsKKyAgICAgICAgICAgIGN1cnJlbnQg
PSBjdXJ2ZS5lbmQ7CisgICAgICAgICAgICBpZiAodHJhdmVyc2FsU3RhdGUudG90YWxMZW5ndGgo
KSArIHRvdGFsTGVuZ3RoID4gdHJhdmVyc2FsU3RhdGUuZGVzaXJlZExlbmd0aCgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1cnZlU3RhY2suaXNF
bXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY3VydmUgPSBjdXJ2ZVN0YWNr
Lmxhc3QoKTsKKyAgICAgICAgY3VydmVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgfQorCisgICAg
aWYgKHRyYXZlcnNhbFN0YXRlLmFjdGlvbigpICE9IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6QWN0aW9u
OjpWZWN0b3JBdExlbmd0aCkgeworICAgICAgICBBU1NFUlQoY3VydmUuZW5kID09IG9yaWdpbmFs
Q3VydmUuZW5kKTsKKyAgICAgICAgcHJldmlvdXMgPSBjdXJ2ZS5zdGFydDsKKyAgICAgICAgY3Vy
cmVudCA9IGN1cnZlLmVuZDsKKyAgICB9CisKICAgICByZXR1cm4gdG90YWxMZW5ndGg7CiB9CiAK
LVBhdGhUcmF2ZXJzYWxTdGF0ZTo6UGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxBY3Rp
b24gYWN0aW9uKQorUGF0aFRyYXZlcnNhbFN0YXRlOjpQYXRoVHJhdmVyc2FsU3RhdGUoQWN0aW9u
IGFjdGlvbiwgZmxvYXQgZGVzaXJlZExlbmd0aCkKICAgICA6IG1fYWN0aW9uKGFjdGlvbikKLSAg
ICAsIG1fc3VjY2VzcyhmYWxzZSkKLSAgICAsIG1fdG90YWxMZW5ndGgoMCkKLSAgICAsIG1fc2Vn
bWVudEluZGV4KDApCi0gICAgLCBtX2Rlc2lyZWRMZW5ndGgoMCkKLSAgICAsIG1fbm9ybWFsQW5n
bGUoMCkKKyAgICAsIG1fZGVzaXJlZExlbmd0aChkZXNpcmVkTGVuZ3RoKQogeworICAgIEFTU0VS
VChhY3Rpb24gIT0gQWN0aW9uOjpUb3RhbExlbmd0aCB8fCAhZGVzaXJlZExlbmd0aCk7CiB9CiAK
LWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6Y2xvc2VTdWJwYXRoKCkKK3ZvaWQgUGF0aFRyYXZl
cnNhbFN0YXRlOjpjbG9zZVN1YnBhdGgoKQogewotICAgIGZsb2F0IGRpc3RhbmNlID0gZGlzdGFu
Y2VMaW5lKG1fY3VycmVudCwgbV9zdGFydCk7Ci0gICAgbV9jdXJyZW50ID0gbV9jb250cm9sMSA9
IG1fY29udHJvbDIgPSBtX3N0YXJ0OwotICAgIHJldHVybiBkaXN0YW5jZTsKKyAgICBtX3RvdGFs
TGVuZ3RoICs9IGRpc3RhbmNlTGluZShtX2N1cnJlbnQsIG1fc3RhcnQpOworICAgIG1fY3VycmVu
dCA9IG1fc3RhcnQ7CiB9CiAKLWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6bW92ZVRvKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBQYXRoVHJhdmVyc2FsU3RhdGU6Om1vdmVUbyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkKIHsKLSAgICBtX2N1cnJlbnQgPSBtX3N0YXJ0ID0gbV9jb250
cm9sMSA9IG1fY29udHJvbDIgPSBwb2ludDsKLSAgICByZXR1cm4gMDsKKyAgICBtX3ByZXZpb3Vz
ID0gbV9jdXJyZW50ID0gbV9zdGFydCA9IHBvaW50OwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2Fs
U3RhdGU6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aFRyYXZlcnNh
bFN0YXRlOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgZmxvYXQgZGlz
dGFuY2UgPSBkaXN0YW5jZUxpbmUobV9jdXJyZW50LCBwb2ludCk7Ci0gICAgbV9jdXJyZW50ID0g
bV9jb250cm9sMSA9IG1fY29udHJvbDIgPSBwb2ludDsKLSAgICByZXR1cm4gZGlzdGFuY2U7Cisg
ICAgbV90b3RhbExlbmd0aCArPSBkaXN0YW5jZUxpbmUobV9jdXJyZW50LCBwb2ludCk7CisgICAg
bV9jdXJyZW50ID0gcG9pbnQ7CiB9CiAKLWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cXVhZHJh
dGljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbCwgY29uc3QgRmxvYXRQb2lu
dCYgbmV3RW5kKQordm9pZCBQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKGNv
bnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCkKIHsK
LSAgICBmbG9hdCBkaXN0YW5jZSA9IGN1cnZlTGVuZ3RoPFF1YWRyYXRpY0Jlemllcj4oKnRoaXMs
IFF1YWRyYXRpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRyb2wsIG5ld0VuZCkpOwotCi0gICAg
bV9jb250cm9sMSA9IG5ld0NvbnRyb2w7Ci0gICAgbV9jb250cm9sMiA9IG5ld0VuZDsKLQotICAg
IGlmIChtX2FjdGlvbiAhPSBUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoICYmIG1fYWN0aW9uICE9IFRy
YXZlcnNhbE5vcm1hbEFuZ2xlQXRMZW5ndGgpIAotICAgICAgICBtX2N1cnJlbnQgPSBuZXdFbmQ7
CisgICAgbV90b3RhbExlbmd0aCArPSBjdXJ2ZUxlbmd0aDxRdWFkcmF0aWNCZXppZXI+KCp0aGlz
LCBRdWFkcmF0aWNCZXppZXIobV9jdXJyZW50LCBuZXdDb250cm9sLCBuZXdFbmQpLCBtX3ByZXZp
b3VzLCBtX2N1cnJlbnQpOworfQogCi0gICAgcmV0dXJuIGRpc3RhbmNlOwordm9pZCBQYXRoVHJh
dmVyc2FsU3RhdGU6OmN1YmljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDEs
IGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wyLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQp
Cit7CisgICAgbV90b3RhbExlbmd0aCArPSBjdXJ2ZUxlbmd0aDxDdWJpY0Jlemllcj4oKnRoaXMs
IEN1YmljQmV6aWVyKG1fY3VycmVudCwgbmV3Q29udHJvbDEsIG5ld0NvbnRyb2wyLCBuZXdFbmQp
LCBtX3ByZXZpb3VzLCBtX2N1cnJlbnQpOwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6
OmN1YmljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDEsIGNvbnN0IEZsb2F0
UG9pbnQmIG5ld0NvbnRyb2wyLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQpCitib29sIFBhdGhU
cmF2ZXJzYWxTdGF0ZTo6ZmluYWxpemVBcHBlbmRQYXRoRWxlbWVudCgpCiB7Ci0gICAgZmxvYXQg
ZGlzdGFuY2UgPSBjdXJ2ZUxlbmd0aDxDdWJpY0Jlemllcj4oKnRoaXMsIEN1YmljQmV6aWVyKG1f
Y3VycmVudCwgbmV3Q29udHJvbDEsIG5ld0NvbnRyb2wyLCBuZXdFbmQpKTsKKyAgICBpZiAobV9h
Y3Rpb24gPT0gQWN0aW9uOjpUb3RhbExlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgbV9jb250cm9sMSA9IG5ld0VuZDsKLSAgICBtX2NvbnRyb2wyID0gbmV3Q29udHJvbDI7Ci0g
Ci0gICAgaWYgKG1fYWN0aW9uICE9IFRyYXZlcnNhbFBvaW50QXRMZW5ndGggJiYgbV9hY3Rpb24g
IT0gVHJhdmVyc2FsTm9ybWFsQW5nbGVBdExlbmd0aCkgCi0gICAgICAgIG1fY3VycmVudCA9IG5l
d0VuZDsKKyAgICBpZiAobV9hY3Rpb24gPT0gQWN0aW9uOjpTZWdtZW50QXRMZW5ndGgpIHsKKyAg
ICAgICAgaWYgKG1fdG90YWxMZW5ndGggPj0gbV9kZXNpcmVkTGVuZ3RoKQorICAgICAgICAgICAg
bV9zdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1fc3VjY2VzczsKKyAgICB9CiAKLSAg
ICByZXR1cm4gZGlzdGFuY2U7Ci19CisgICAgQVNTRVJUKG1fYWN0aW9uID09IEFjdGlvbjo6VmVj
dG9yQXRMZW5ndGgpOwogCi12b2lkIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1NlZ21lbnQo
KQotewotICAgIGlmIChtX2FjdGlvbiA9PSBUcmF2ZXJzYWxTZWdtZW50QXRMZW5ndGggJiYgbV90
b3RhbExlbmd0aCA+PSBtX2Rlc2lyZWRMZW5ndGgpCi0gICAgICAgIG1fc3VjY2VzcyA9IHRydWU7
Ci0gICAgICAgIAotICAgIGlmICgobV9hY3Rpb24gPT0gVHJhdmVyc2FsUG9pbnRBdExlbmd0aCB8
fCBtX2FjdGlvbiA9PSBUcmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoKSAmJiBtX3RvdGFsTGVu
Z3RoID49IG1fZGVzaXJlZExlbmd0aCkgeworICAgIGlmIChtX3RvdGFsTGVuZ3RoID49IG1fZGVz
aXJlZExlbmd0aCkgewogICAgICAgICBmbG9hdCBzbG9wZSA9IEZsb2F0UG9pbnQobV9jdXJyZW50
IC0gbV9wcmV2aW91cykuc2xvcGVBbmdsZVJhZGlhbnMoKTsKLSAgICAgICAgaWYgKG1fYWN0aW9u
ID09IFRyYXZlcnNhbFBvaW50QXRMZW5ndGgpIHsKLSAgICAgICAgICAgIGZsb2F0IG9mZnNldCA9
IG1fZGVzaXJlZExlbmd0aCAtIG1fdG90YWxMZW5ndGg7Ci0gICAgICAgICAgICBtX2N1cnJlbnQu
bW92ZShvZmZzZXQgKiBjb3NmKHNsb3BlKSwgb2Zmc2V0ICogc2luZihzbG9wZSkpOwotICAgICAg
ICB9IGVsc2UKKyAgICAgICAgZmxvYXQgb2Zmc2V0ID0gbV9kZXNpcmVkTGVuZ3RoIC0gbV90b3Rh
bExlbmd0aDsKKyAgICAgICAgbV9jdXJyZW50Lm1vdmUob2Zmc2V0ICogY29zZihzbG9wZSksIG9m
ZnNldCAqIHNpbmYoc2xvcGUpKTsKKworICAgICAgICBpZiAoIW1faXNaZXJvVmVjdG9yICYmICFt
X2Rlc2lyZWRMZW5ndGgpCisgICAgICAgICAgICBtX2lzWmVyb1ZlY3RvciA9IHRydWU7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgbV9zdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgICAgIG1f
bm9ybWFsQW5nbGUgPSByYWQyZGVnKHNsb3BlKTsKLSAgICAgICAgbV9zdWNjZXNzID0gdHJ1ZTsK
KyAgICAgICAgfQogICAgIH0KKwogICAgIG1fcHJldmlvdXMgPSBtX2N1cnJlbnQ7CisgICAgcmV0
dXJuIG1fc3VjY2VzczsKK30KKworYm9vbCBQYXRoVHJhdmVyc2FsU3RhdGU6OmFwcGVuZFBhdGhF
bGVtZW50KFBhdGhFbGVtZW50VHlwZSB0eXBlLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBQYXRoRWxlbWVudE1vdmVUb1BvaW50Ogor
ICAgICAgICBtb3ZlVG8ocG9pbnRzWzBdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXRo
RWxlbWVudEFkZExpbmVUb1BvaW50OgorICAgICAgICBsaW5lVG8ocG9pbnRzWzBdKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ6CisgICAg
ICAgIHF1YWRyYXRpY0JlemllclRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQYXRoRWxlbWVudEFkZEN1cnZlVG9Qb2ludDoKKyAgICAgICAgY3ViaWNC
ZXppZXJUbyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQYXRoRWxlbWVudENsb3NlU3VicGF0aDoKKyAgICAgICAgY2xvc2VTdWJwYXRo
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmluYWxpemVBcHBl
bmRQYXRoRWxlbWVudCgpOworfQorCitib29sIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1Bh
dGhFbGVtZW50KFBhdGhFbGVtZW50VHlwZSB0eXBlLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMp
Cit7CisgICAgaWYgKG1fc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
bV9pc1plcm9WZWN0b3IpIHsKKyAgICAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0
YXRlKCp0aGlzKTsKKyAgICAgICAgbV9zdWNjZXNzID0gdHJhdmVyc2FsU3RhdGUuYXBwZW5kUGF0
aEVsZW1lbnQodHlwZSwgcG9pbnRzKTsKKyAgICAgICAgbV9ub3JtYWxBbmdsZSA9IHRyYXZlcnNh
bFN0YXRlLm1fbm9ybWFsQW5nbGU7CisgICAgICAgIHJldHVybiBtX3N1Y2Nlc3M7CisgICAgfQor
CisgICAgcmV0dXJuIGFwcGVuZFBhdGhFbGVtZW50KHR5cGUsIHBvaW50cyk7CiB9CiAKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2
ZXJzYWxTdGF0ZS5oCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw0NSArMjgs
NjAgQEAKICNkZWZpbmUgUGF0aFRyYXZlcnNhbFN0YXRlX2gKIAogI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJQYXRoLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
UGF0aFRyYXZlcnNhbFN0YXRlIHsKIHB1YmxpYzoKLSAgICBlbnVtIFBhdGhUcmF2ZXJzYWxBY3Rp
b24gewotICAgICAgICBUcmF2ZXJzYWxUb3RhbExlbmd0aCwKLSAgICAgICAgVHJhdmVyc2FsUG9p
bnRBdExlbmd0aCwKLSAgICAgICAgVHJhdmVyc2FsU2VnbWVudEF0TGVuZ3RoLAotICAgICAgICBU
cmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoCisgICAgZW51bSBjbGFzcyBBY3Rpb24geworICAg
ICAgICBUb3RhbExlbmd0aCwKKyAgICAgICAgVmVjdG9yQXRMZW5ndGgsCisgICAgICAgIFNlZ21l
bnRBdExlbmd0aCwKICAgICB9OwogCi0gICAgUGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJz
YWxBY3Rpb24pOwotCi0gICAgZmxvYXQgY2xvc2VTdWJwYXRoKCk7Ci0gICAgZmxvYXQgbW92ZVRv
KGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICBmbG9hdCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYp
OwotICAgIGZsb2F0IHF1YWRyYXRpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRy
b2wsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCk7Ci0gICAgZmxvYXQgY3ViaWNCZXppZXJUbyhj
b25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJv
bDIsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCk7Ci0gICAgCi0gICAgdm9pZCBwcm9jZXNzU2Vn
bWVudCgpOworICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZShBY3Rpb24sIGZsb2F0IGRlc2lyZWRMZW5n
dGggPSAwKTsKIAogcHVibGljOgotICAgIFBhdGhUcmF2ZXJzYWxBY3Rpb24gbV9hY3Rpb247Ci0g
ICAgYm9vbCBtX3N1Y2Nlc3M7CisgICAgYm9vbCBwcm9jZXNzUGF0aEVsZW1lbnQoUGF0aEVsZW1l
bnRUeXBlLCBjb25zdCBGbG9hdFBvaW50Kik7CisgICAgYm9vbCBwcm9jZXNzUGF0aEVsZW1lbnQo
Y29uc3QgUGF0aEVsZW1lbnQqIGVsZW1lbnQpIHsgcmV0dXJuIHByb2Nlc3NQYXRoRWxlbWVudChl
bGVtZW50LT50eXBlLCBlbGVtZW50LT5wb2ludHMpOyB9CisKKyAgICBBY3Rpb24gYWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9hY3Rpb247IH0KKyAgICB2b2lkIHNldEFjdGlvbihBY3Rpb24gYWN0
aW9uKSB7IG1fYWN0aW9uID0gYWN0aW9uOyB9CisgICAgZmxvYXQgZGVzaXJlZExlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVzaXJlZExlbmd0aDsgfQorICAgIHZvaWQgc2V0RGVzaXJlZExlbmd0
aChmbG9hdCBkZXNpcmVkTGVuZ3RoKSB7IG1fZGVzaXJlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGg7
IH0KKworICAgIC8vIFRyYXZlcnNpbmcgb3V0cHV0IC0tIHNob3VsZCBiZSByZWFkIG9ubHkKKyAg
ICBib29sIHN1Y2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3M7IH0KKyAgICBmbG9hdCB0
b3RhbExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxMZW5ndGg7IH0KKyAgICBGbG9hdFBv
aW50IGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAgICBmbG9hdCBub3Jt
YWxBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsQW5nbGU7IH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIGNsb3NlU3VicGF0aCgpOworICAgIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQm
KTsKKyAgICB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBxdWFkcmF0
aWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZv
aWQgY3ViaWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmKTsKKworICAgIGJvb2wgZmluYWxpemVBcHBlbmRQYXRoRWxlbWVudCgp
OworICAgIGJvb2wgYXBwZW5kUGF0aEVsZW1lbnQoUGF0aEVsZW1lbnRUeXBlLCBjb25zdCBGbG9h
dFBvaW50Kik7CisKK3ByaXZhdGU6CisgICAgQWN0aW9uIG1fYWN0aW9uOworICAgIGJvb2wgbV9z
dWNjZXNzIHsgZmFsc2UgfTsKIAogICAgIEZsb2F0UG9pbnQgbV9jdXJyZW50OwogICAgIEZsb2F0
UG9pbnQgbV9zdGFydDsKLSAgICBGbG9hdFBvaW50IG1fY29udHJvbDE7Ci0gICAgRmxvYXRQb2lu
dCBtX2NvbnRyb2wyOwogCi0gICAgZmxvYXQgbV90b3RhbExlbmd0aDsKLSAgICB1bnNpZ25lZCBt
X3NlZ21lbnRJbmRleDsKLSAgICBmbG9hdCBtX2Rlc2lyZWRMZW5ndGg7CisgICAgZmxvYXQgbV90
b3RhbExlbmd0aCB7IDAgfTsKKyAgICBmbG9hdCBtX2Rlc2lyZWRMZW5ndGggeyAwIH07CiAKICAg
ICAvLyBGb3Igbm9ybWFsIGNhbGN1bGF0aW9ucwogICAgIEZsb2F0UG9pbnQgbV9wcmV2aW91czsK
LSAgICBmbG9hdCBtX25vcm1hbEFuZ2xlOyAvLyBkZWdyZWVzCi19OyAgICAKKyAgICBmbG9hdCBt
X25vcm1hbEFuZ2xlIHsgMCB9OyAvLyBkZWdyZWVzCisgICAgYm9vbCBtX2lzWmVyb1ZlY3RvciB7
IGZhbHNlIH07Cit9OwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gMTgyNzU4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0
Q2hhcmFjdGVyc0kKICAgICAgICAgICAgICAgICBTVkdUZXh0TGF5b3V0RW5naW5lIGxpbmVMYXlv
dXQoY2hhcmFjdGVyTGF5b3V0LmxheW91dEF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICAgICAg
bGF5b3V0Q2hhcmFjdGVyc0luVGV4dEJveGVzKCZmbG93Qm94LCBsaW5lTGF5b3V0KTsKIAotICAg
ICAgICAgICAgICAgIGNoYXJhY3RlckxheW91dC5iZWdpblRleHRQYXRoTGF5b3V0KCZjaGlsZC0+
cmVuZGVyZXIoKSwgbGluZUxheW91dCk7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVyTGF5b3V0
LmJlZ2luVGV4dFBhdGhMYXlvdXQoZG93bmNhc3Q8UmVuZGVyU1ZHVGV4dFBhdGg+KGNoaWxkLT5y
ZW5kZXJlcigpKSwgbGluZUxheW91dCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxh
eW91dENoYXJhY3RlcnNJblRleHRCb3hlcygmZmxvd0JveCwgY2hhcmFjdGVyTGF5b3V0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAJKHJl
dmlzaW9uIDE4Mjc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENo
dW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw1MiArMjUsOTYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1TVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayh1bnNpZ25lZCBjaHVua1N0eWxlLCBm
bG9hdCBkZXNpcmVkVGV4dExlbmd0aCkKLSAgICA6IG1fY2h1bmtTdHlsZShjaHVua1N0eWxlKQot
ICAgICwgbV9kZXNpcmVkVGV4dExlbmd0aChkZXNpcmVkVGV4dExlbmd0aCkKK1NWR1RleHRDaHVu
azo6U1ZHVGV4dENodW5rKGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlv
dXRCb3hlcywgdW5zaWduZWQgZmlyc3QsIHVuc2lnbmVkIGxpbWl0KQogewotfQorICAgIEFTU0VS
VChmaXJzdCA8IGxpbWl0KTsKKyAgICBBU1NFUlQoZmlyc3QgPj0gMCAmJiBsaW1pdCA8PSBsaW5l
TGF5b3V0Qm94ZXMuc2l6ZSgpKTsKIAotdm9pZCBTVkdUZXh0Q2h1bms6OmNhbGN1bGF0ZUxlbmd0
aChmbG9hdCYgbGVuZ3RoLCB1bnNpZ25lZCYgY2hhcmFjdGVycykgY29uc3QKLXsKLSAgICBTVkdU
ZXh0RnJhZ21lbnQqIGxhc3RGcmFnbWVudCA9IDA7CisgICAgY29uc3QgU1ZHSW5saW5lVGV4dEJv
eCogYm94ID0gbGluZUxheW91dEJveGVzW2ZpcnN0XTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUgPSBib3gtPnJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSYgc3ZnU3R5bGUgPSBzdHlsZS5zdmdTdHlsZSgpOworCisgICAgaWYgKCFzdHlsZS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgICAgIG1fY2h1bmtTdHlsZSB8PSBTVkdUZXh0Q2h1bms6
OlJpZ2h0VG9MZWZ0VGV4dDsKKworICAgIGlmIChzdmdTdHlsZS5pc1ZlcnRpY2FsV3JpdGluZ01v
ZGUoKSkKKyAgICAgICAgbV9jaHVua1N0eWxlIHw9IFNWR1RleHRDaHVuazo6VmVydGljYWxUZXh0
OworICAgIAorICAgIHN3aXRjaCAoc3ZnU3R5bGUudGV4dEFuY2hvcigpKSB7CisgICAgY2FzZSBU
QV9TVEFSVDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUQV9NSURETEU6CisgICAgICAgIG1f
Y2h1bmtTdHlsZSB8PSBNaWRkbGVBbmNob3I7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVEFf
RU5EOgorICAgICAgICBtX2NodW5rU3R5bGUgfD0gRW5kQW5jaG9yOworICAgICAgICBicmVhazsK
KyAgICB9CiAKLSAgICB1bnNpZ25lZCBib3hDb3VudCA9IG1fYm94ZXMuc2l6ZSgpOwotICAgIGZv
ciAodW5zaWduZWQgYm94UG9zaXRpb24gPSAwOyBib3hQb3NpdGlvbiA8IGJveENvdW50OyArK2Jv
eFBvc2l0aW9uKSB7Ci0gICAgICAgIFNWR0lubGluZVRleHRCb3gqIHRleHRCb3ggPSBtX2JveGVz
LmF0KGJveFBvc2l0aW9uKTsKLSAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdt
ZW50cyA9IHRleHRCb3gtPnRleHRGcmFnbWVudHMoKTsKKyAgICBpZiAoYXV0byogdGV4dENvbnRl
bnRFbGVtZW50ID0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjplbGVtZW50RnJvbVJlbmRlcmVyKGJv
eC0+cmVuZGVyZXIoKS5wYXJlbnQoKSkpIHsKKyAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5n
dGhDb250ZXh0KHRleHRDb250ZW50RWxlbWVudCk7CisgICAgICAgIG1fZGVzaXJlZFRleHRMZW5n
dGggPSB0ZXh0Q29udGVudEVsZW1lbnQtPnNwZWNpZmllZFRleHRMZW5ndGgoKS52YWx1ZShsZW5n
dGhDb250ZXh0KTsKKworICAgICAgICBzd2l0Y2ggKHRleHRDb250ZW50RWxlbWVudC0+bGVuZ3Ro
QWRqdXN0KCkpIHsKKyAgICAgICAgY2FzZSBTVkdMZW5ndGhBZGp1c3RVbmtub3duOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1ZHTGVuZ3RoQWRqdXN0U3BhY2luZzoKKyAgICAg
ICAgICAgIG1fY2h1bmtTdHlsZSB8PSBMZW5ndGhBZGp1c3RTcGFjaW5nOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU1ZHTGVuZ3RoQWRqdXN0U3BhY2luZ0FuZEdseXBoczoKKyAg
ICAgICAgICAgIG1fY2h1bmtTdHlsZSB8PSBMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgdW5zaWduZWQg
c2l6ZSA9IGZyYWdtZW50cy5zaXplKCk7Ci0gICAgICAgIGlmICghc2l6ZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOworICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0OyBpIDwgbGltaXQ7ICsraSkK
KyAgICAgICAgbV9ib3hlcy5hcHBlbmQobGluZUxheW91dEJveGVzW2ldKTsKK30KIAotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBTVkdU
ZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOwordW5zaWduZWQgU1ZHVGV4
dENodW5rOjp0b3RhbENoYXJhY3RlcnMoKSBjb25zdAoreworICAgIHVuc2lnbmVkIGNoYXJhY3Rl
cnMgPSAwOworICAgIGZvciAoYXV0byogYm94IDogbV9ib3hlcykgeworICAgICAgICBmb3IgKGF1
dG8mIGZyYWdtZW50IDogYm94LT50ZXh0RnJhZ21lbnRzKCkpCiAgICAgICAgICAgICBjaGFyYWN0
ZXJzICs9IGZyYWdtZW50Lmxlbmd0aDsKKyAgICB9CisgICAgcmV0dXJuIGNoYXJhY3RlcnM7Cit9
CiAKLSAgICAgICAgICAgIGlmIChtX2NodW5rU3R5bGUgJiBWZXJ0aWNhbFRleHQpCi0gICAgICAg
ICAgICAgICAgbGVuZ3RoICs9IGZyYWdtZW50LmhlaWdodDsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBsZW5ndGggKz0gZnJhZ21lbnQud2lkdGg7Ci0KLSAgICAgICAgICAgIGlm
ICghbGFzdEZyYWdtZW50KSB7Ci0gICAgICAgICAgICAgICAgbGFzdEZyYWdtZW50ID0gJmZyYWdt
ZW50OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQorZmxvYXQgU1ZH
VGV4dENodW5rOjp0b3RhbExlbmd0aCgpIGNvbnN0Cit7CisgICAgY29uc3QgU1ZHVGV4dEZyYWdt
ZW50KiBmaXJzdEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQq
IGxhc3RGcmFnbWVudCA9IG51bGxwdHI7CiAKLSAgICAgICAgICAgIC8vIFJlc2VwZWN0IGdhcCBi
ZXR3ZWVuIGNodW5rcy4KLSAgICAgICAgICAgIGlmIChtX2NodW5rU3R5bGUgJiBWZXJ0aWNhbFRl
eHQpCi0gICAgICAgICAgICAgICAgIGxlbmd0aCArPSBmcmFnbWVudC55IC0gKGxhc3RGcmFnbWVu
dC0+eSArIGxhc3RGcmFnbWVudC0+aGVpZ2h0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgbGVuZ3RoICs9IGZyYWdtZW50LnggLSAobGFzdEZyYWdtZW50LT54ICsgbGFzdEZy
YWdtZW50LT53aWR0aCk7CisgICAgZm9yIChhdXRvKiBib3ggOiBtX2JveGVzKSB7CisgICAgICAg
IGF1dG8mIGZyYWdtZW50cyA9IGJveC0+dGV4dEZyYWdtZW50cygpOworICAgICAgICBpZiAoZnJh
Z21lbnRzLnNpemUoKSkgeworICAgICAgICAgICAgZmlyc3RGcmFnbWVudCA9ICYoKmZyYWdtZW50
cy5iZWdpbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogCi0gICAg
ICAgICAgICBsYXN0RnJhZ21lbnQgPSAmZnJhZ21lbnQ7CisgICAgZm9yIChhdXRvIGl0ID0gbV9i
b3hlcy5yYmVnaW4oKSwgZW5kID0gbV9ib3hlcy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICBhdXRvJiBmcmFnbWVudHMgPSAoKml0KS0+dGV4dEZyYWdtZW50cygpOworICAgICAg
ICBpZiAoZnJhZ21lbnRzLnNpemUoKSkgeworICAgICAgICAgICAgbGFzdEZyYWdtZW50ID0gJigq
ZnJhZ21lbnRzLnJiZWdpbigpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQorCisgICAgQVNTRVJUKCFmaXJzdEZyYWdtZW50ID09ICFsYXN0RnJhZ21lbnQpOworICAgIGlm
ICghZmlyc3RGcmFnbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobV9jaHVua1N0
eWxlICYgVmVydGljYWxUZXh0KQorICAgICAgICByZXR1cm4gKGxhc3RGcmFnbWVudC0+eSArIGxh
c3RGcmFnbWVudC0+aGVpZ2h0KSAtIGZpcnN0RnJhZ21lbnQtPnk7CisKKyAgICByZXR1cm4gKGxh
c3RGcmFnbWVudC0+eCArIGxhc3RGcmFnbWVudC0+d2lkdGgpIC0gZmlyc3RGcmFnbWVudC0+eDsK
IH0KIAotZmxvYXQgU1ZHVGV4dENodW5rOjpjYWxjdWxhdGVUZXh0QW5jaG9yU2hpZnQoZmxvYXQg
bGVuZ3RoKSBjb25zdAorZmxvYXQgU1ZHVGV4dENodW5rOjp0b3RhbEFuY2hvclNoaWZ0KCkgY29u
c3QKIHsKKyAgICBmbG9hdCBsZW5ndGggPSB0b3RhbExlbmd0aCgpOwogICAgIGlmIChtX2NodW5r
U3R5bGUgJiBNaWRkbGVBbmNob3IpCiAgICAgICAgIHJldHVybiAtbGVuZ3RoIC8gMjsKICAgICBp
ZiAobV9jaHVua1N0eWxlICYgRW5kQW5jaG9yKQpAQCAtNzcsNCArMTIyLDg4IEBAIGZsb2F0IFNW
R1RleHRDaHVuazo6Y2FsY3VsYXRlVGV4dEFuY2hvclMKICAgICByZXR1cm4gbV9jaHVua1N0eWxl
ICYgUmlnaHRUb0xlZnRUZXh0ID8gLWxlbmd0aCA6IDA7CiB9CiAKK3ZvaWQgU1ZHVGV4dENodW5r
OjpsYXlvdXQoSGFzaE1hcDxTVkdJbmxpbmVUZXh0Qm94KiwgQWZmaW5lVHJhbnNmb3JtPiYgdGV4
dEJveFRyYW5zZm9ybWF0aW9ucykgY29uc3QKK3sKKyAgICBpZiAoaGFzRGVzaXJlZFRleHRMZW5n
dGgoKSkgeworICAgICAgICBpZiAoaGFzTGVuZ3RoQWRqdXN0U3BhY2luZygpKQorICAgICAgICAg
ICAgcHJvY2Vzc1RleHRMZW5ndGhTcGFjaW5nQ29ycmVjdGlvbigpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVChoYXNMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzKCkpOwor
ICAgICAgICAgICAgYnVpbGRCb3hUcmFuc2Zvcm1hdGlvbnModGV4dEJveFRyYW5zZm9ybWF0aW9u
cyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaGFzVGV4dEFuY2hvcigpKQorICAgICAg
ICBwcm9jZXNzVGV4dEFuY2hvckNvcnJlY3Rpb24oKTsKK30KKwordm9pZCBTVkdUZXh0Q2h1bms6
OnByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24oKSBjb25zdAoreworICAgIGZsb2F0
IHRleHRMZW5ndGhTaGlmdCA9IChkZXNpcmVkVGV4dExlbmd0aCgpIC0gdG90YWxMZW5ndGgoKSkg
LyB0b3RhbENoYXJhY3RlcnMoKTsKKyAgICBib29sIGlzVmVydGljYWxUZXh0ID0gbV9jaHVua1N0
eWxlICYgVmVydGljYWxUZXh0OworICAgIHVuc2lnbmVkIGF0Q2hhcmFjdGVyID0gMDsKKworICAg
IGZvciAoYXV0byogYm94IDogbV9ib3hlcykgeworICAgICAgICBmb3IgKGF1dG8mIGZyYWdtZW50
IDogYm94LT50ZXh0RnJhZ21lbnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4
dCkKKyAgICAgICAgICAgICAgICBmcmFnbWVudC55ICs9IHRleHRMZW5ndGhTaGlmdCAqIGF0Q2hh
cmFjdGVyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZyYWdtZW50LnggKz0g
dGV4dExlbmd0aFNoaWZ0ICogYXRDaGFyYWN0ZXI7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGF0Q2hhcmFjdGVyICs9IGZyYWdtZW50Lmxlbmd0aDsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBTVkdUZXh0Q2h1bms6OmJ1aWxkQm94VHJhbnNmb3JtYXRpb25zKEhhc2hNYXA8U1ZHSW5s
aW5lVGV4dEJveCosIEFmZmluZVRyYW5zZm9ybT4mIHRleHRCb3hUcmFuc2Zvcm1hdGlvbnMpIGNv
bnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm07Cisg
ICAgYm9vbCBmb3VuZEZpcnN0RnJhZ21lbnQgPSBmYWxzZTsKKworICAgIGZvciAoYXV0byogYm94
IDogbV9ib3hlcykgeworICAgICAgICBpZiAoIWZvdW5kRmlyc3RGcmFnbWVudCkgeworICAgICAg
ICAgICAgaWYgKCFib3hTcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKGJveCwgc3BhY2luZ0FuZEds
eXBoc1RyYW5zZm9ybSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBm
b3VuZEZpcnN0RnJhZ21lbnQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdGV4dEJveFRy
YW5zZm9ybWF0aW9ucy5zZXQoYm94LCBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKTsKKyAgICB9
Cit9CisKK2Jvb2wgU1ZHVGV4dENodW5rOjpib3hTcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKGNv
bnN0IFNWR0lubGluZVRleHRCb3gqIGJveCwgQWZmaW5lVHJhbnNmb3JtJiBzcGFjaW5nQW5kR2x5
cGhzVHJhbnNmb3JtKSBjb25zdAoreworICAgIGF1dG8mIGZyYWdtZW50cyA9IGJveC0+dGV4dEZy
YWdtZW50cygpOworICAgIGlmIChmcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRz
LmZpcnN0KCk7CisgICAgZmxvYXQgc2NhbGUgPSBkZXNpcmVkVGV4dExlbmd0aCgpIC8gdG90YWxM
ZW5ndGgoKTsKKworICAgIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0udHJhbnNsYXRlKGZyYWdt
ZW50LngsIGZyYWdtZW50LnkpOworCisgICAgaWYgKG1fY2h1bmtTdHlsZSAmIFZlcnRpY2FsVGV4
dCkKKyAgICAgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oMSwg
c2NhbGUpOworICAgIGVsc2UKKyAgICAgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS5zY2Fs
ZU5vblVuaWZvcm0oc2NhbGUsIDEpOworCisgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS50
cmFuc2xhdGUoLWZyYWdtZW50LngsIC1mcmFnbWVudC55KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBTVkdUZXh0Q2h1bms6OnByb2Nlc3NUZXh0QW5jaG9yQ29ycmVjdGlvbigpIGNvbnN0
Cit7CisgICAgZmxvYXQgdGV4dEFuY2hvclNoaWZ0ID0gdG90YWxBbmNob3JTaGlmdCgpOworICAg
IGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBtX2NodW5rU3R5bGUgJiBWZXJ0aWNhbFRleHQ7CisKKyAg
ICBmb3IgKGF1dG8qIGJveCA6IG1fYm94ZXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBmcmFnbWVu
dCA6IGJveC0+dGV4dEZyYWdtZW50cygpKSB7CisgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRl
eHQpCisgICAgICAgICAgICAgICAgZnJhZ21lbnQueSArPSB0ZXh0QW5jaG9yU2hpZnQ7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnJhZ21lbnQueCArPSB0ZXh0QW5jaG9yU2hp
ZnQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaAkocmV2aXNpb24g
MTgyNzU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC00MCwyOCArNDEsMzQgQEAgcHVibGljOgogICAgICAgICBMZW5ndGhBZGp1
c3RTcGFjaW5nQW5kR2x5cGhzID0gMSA8PCA2CiAgICAgfTsKIAotICAgIFNWR1RleHRDaHVuayh1
bnNpZ25lZCBjaHVua1N0eWxlLCBmbG9hdCBkZXNpcmVkVGV4dExlbmd0aCk7CisgICAgU1ZHVGV4
dENodW5rKGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mLCB1bnNpZ25lZCBmaXJzdCwg
dW5zaWduZWQgbGltaXQpOwogCi0gICAgdm9pZCBjYWxjdWxhdGVMZW5ndGgoZmxvYXQmIGxlbmd0
aCwgdW5zaWduZWQmIGNoYXJhY3RlcnMpIGNvbnN0OwotICAgIGZsb2F0IGNhbGN1bGF0ZVRleHRB
bmNob3JTaGlmdChmbG9hdCBsZW5ndGgpIGNvbnN0OworICAgIHVuc2lnbmVkIHRvdGFsQ2hhcmFj
dGVycygpIGNvbnN0OworICAgIGZsb2F0IHRvdGFsTGVuZ3RoKCkgY29uc3Q7CisgICAgZmxvYXQg
dG90YWxBbmNob3JTaGlmdCgpIGNvbnN0OworICAgIHZvaWQgbGF5b3V0KEhhc2hNYXA8U1ZHSW5s
aW5lVGV4dEJveCosIEFmZmluZVRyYW5zZm9ybT4mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2
b2lkIHByb2Nlc3NUZXh0QW5jaG9yQ29ycmVjdGlvbigpIGNvbnN0OworICAgIHZvaWQgYnVpbGRC
b3hUcmFuc2Zvcm1hdGlvbnMoSGFzaE1hcDxTVkdJbmxpbmVUZXh0Qm94KiwgQWZmaW5lVHJhbnNm
b3JtPiYpIGNvbnN0OworICAgIHZvaWQgcHJvY2Vzc1RleHRMZW5ndGhTcGFjaW5nQ29ycmVjdGlv
bigpIGNvbnN0OwogCiAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2h1bmtTdHlsZSAmIFZlcnRpY2FsVGV4dDsgfQogICAgIGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9kZXNpcmVkVGV4dExlbmd0aDsgfQogCi0gICAgVmVjdG9yPFNW
R0lubGluZVRleHRCb3gqPiYgYm94ZXMoKSB7IHJldHVybiBtX2JveGVzOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgYm94ZXMoKSBjb25zdCB7IHJldHVybiBtX2JveGVz
OyB9Ci0KICAgICBib29sIGhhc0Rlc2lyZWRUZXh0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXNpcmVkVGV4dExlbmd0aCA+IDAgJiYgKChtX2NodW5rU3R5bGUgJiBMZW5ndGhBZGp1c3RTcGFj
aW5nKSB8fCAobV9jaHVua1N0eWxlICYgTGVuZ3RoQWRqdXN0U3BhY2luZ0FuZEdseXBocykpOyB9
Ci0gICAgYm9vbCBoYXNUZXh0QW5jaG9yKCkgY29uc3QgeyAgcmV0dXJuIG1fY2h1bmtTdHlsZSAm
IFJpZ2h0VG9MZWZ0VGV4dCA/ICEobV9jaHVua1N0eWxlICYgRW5kQW5jaG9yKSA6IChtX2NodW5r
U3R5bGUgJiBNaWRkbGVBbmNob3IpIHx8IChtX2NodW5rU3R5bGUgJiBFbmRBbmNob3IpOyB9Cisg
ICAgYm9vbCBoYXNUZXh0QW5jaG9yKCkgY29uc3QgeyAgcmV0dXJuIG1fY2h1bmtTdHlsZSAmIFJp
Z2h0VG9MZWZ0VGV4dCA/ICEobV9jaHVua1N0eWxlICYgRW5kQW5jaG9yKSA6IChtX2NodW5rU3R5
bGUgJiAoTWlkZGxlQW5jaG9yIHwgRW5kQW5jaG9yKSk7IH0KICAgICBib29sIGhhc0xlbmd0aEFk
anVzdFNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX2NodW5rU3R5bGUgJiBMZW5ndGhBZGp1c3RT
cGFjaW5nOyB9CiAgICAgYm9vbCBoYXNMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzKCkgY29u
c3QgeyByZXR1cm4gbV9jaHVua1N0eWxlICYgTGVuZ3RoQWRqdXN0U3BhY2luZ0FuZEdseXBoczsg
fQogCisgICAgYm9vbCBib3hTcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKGNvbnN0IFNWR0lubGlu
ZVRleHRCb3gqLCBBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICAvLyBD
b250YWlucyBhbGwgU1ZHSW5saW5lVGV4dEJveGVzIHRoaXMgY2h1bmsgc3BhbnMuCiAgICAgVmVj
dG9yPFNWR0lubGluZVRleHRCb3gqPiBtX2JveGVzOwogCi0gICAgdW5zaWduZWQgbV9jaHVua1N0
eWxlOwotICAgIGZsb2F0IG1fZGVzaXJlZFRleHRMZW5ndGg7CisgICAgdW5zaWduZWQgbV9jaHVu
a1N0eWxlIHsgRGVmYXVsdFN0eWxlIH07CisgICAgZmxvYXQgbV9kZXNpcmVkVGV4dExlbmd0aCB7
IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcAkocmV2aXNp
b24gMTgyNzU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtC
dWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCwyMjcgKzMxLDcxIEBAIFNWR1RleHRDaHVua0J1
aWxkZXI6OlNWR1RleHRDaHVua0J1aWxkZXIKIHsKIH0KIAotdm9pZCBTVkdUZXh0Q2h1bmtCdWls
ZGVyOjp0cmFuc2Zvcm1hdGlvbkZvclRleHRCb3goU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIGNvbnN0Cit1bnNpZ25lZCBTVkdUZXh0Q2h1bmtC
dWlsZGVyOjp0b3RhbENoYXJhY3RlcnMoKSBjb25zdAogewotICAgIERFUFJFQ0FURURfREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBBZmZpbmVUcmFuc2Zvcm0sIHNfaWRlbnRpdHlUcmFuc2Zvcm0s
ICgpKTsKLSAgICBpZiAoIW1fdGV4dEJveFRyYW5zZm9ybWF0aW9ucy5jb250YWlucyh0ZXh0Qm94
KSkgewotICAgICAgICB0cmFuc2Zvcm0gPSBzX2lkZW50aXR5VHJhbnNmb3JtOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgdHJhbnNmb3JtID0gbV90ZXh0Qm94VHJhbnNmb3JtYXRpb25z
LmdldCh0ZXh0Qm94KTsKKyAgICB1bnNpZ25lZCBjaGFyYWN0ZXJzID0gMDsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGNodW5rIDogbV90ZXh0Q2h1bmtzKQorICAgICAgICBjaGFyYWN0ZXJzICs9IGNo
dW5rLnRvdGFsQ2hhcmFjdGVycygpOworICAgIHJldHVybiBjaGFyYWN0ZXJzOwogfQogCi12b2lk
IFNWR1RleHRDaHVua0J1aWxkZXI6OmJ1aWxkVGV4dENodW5rcyhWZWN0b3I8U1ZHSW5saW5lVGV4
dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMpCitmbG9hdCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjp0b3Rh
bExlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKGxpbmVMYXlvdXRCb3hlcy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgZm91bmRTdGFydCA9IGZhbHNlOwotICAgIHVuc2ln
bmVkIGxhc3RDaHVua1N0YXJ0UG9zaXRpb24gPSAwOwotICAgIHVuc2lnbmVkIGJveFBvc2l0aW9u
ID0gMDsKLSAgICB1bnNpZ25lZCBib3hDb3VudCA9IGxpbmVMYXlvdXRCb3hlcy5zaXplKCk7Ci0g
ICAgZm9yICg7IGJveFBvc2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9zaXRpb24pIHsKLSAgICAg
ICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9IGxpbmVMYXlvdXRCb3hlc1tib3hQb3NpdGlv
bl07Ci0gICAgICAgIGlmICghdGV4dEJveC0+c3RhcnRzTmV3VGV4dENodW5rKCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIWZvdW5kU3RhcnQpIHsKLSAgICAgICAgICAg
IGxhc3RDaHVua1N0YXJ0UG9zaXRpb24gPSBib3hQb3NpdGlvbjsKLSAgICAgICAgICAgIGZvdW5k
U3RhcnQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oYm94UG9zaXRpb24gPiBsYXN0Q2h1bmtTdGFydFBvc2l0aW9u
KTsKLSAgICAgICAgICAgIGFkZFRleHRDaHVuayhsaW5lTGF5b3V0Qm94ZXMsIGxhc3RDaHVua1N0
YXJ0UG9zaXRpb24sIGJveFBvc2l0aW9uIC0gbGFzdENodW5rU3RhcnRQb3NpdGlvbik7Ci0gICAg
ICAgICAgICBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uID0gYm94UG9zaXRpb247Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoIWZvdW5kU3RhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChib3hQb3NpdGlvbiAtIGxhc3RDaHVua1N0YXJ0UG9zaXRpb24gPiAwKQotICAgICAgICBhZGRU
ZXh0Q2h1bmsobGluZUxheW91dEJveGVzLCBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uLCBib3hQb3Np
dGlvbiAtIGxhc3RDaHVua1N0YXJ0UG9zaXRpb24pOworICAgIGZsb2F0IGxlbmd0aCA9IDA7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBjaHVuayA6IG1fdGV4dENodW5rcykKKyAgICAgICAgbGVuZ3Ro
ICs9IGNodW5rLnRvdGFsTGVuZ3RoKCk7CisgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotdm9pZCBT
VkdUZXh0Q2h1bmtCdWlsZGVyOjpsYXlvdXRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdJbmxpbmVUZXh0
Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcykKK2Zsb2F0IFNWR1RleHRDaHVua0J1aWxkZXI6OnRvdGFs
QW5jaG9yU2hpZnQoKSBjb25zdAogewotICAgIGJ1aWxkVGV4dENodW5rcyhsaW5lTGF5b3V0Qm94
ZXMpOwotICAgIGlmIChtX3RleHRDaHVua3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB1bnNpZ25lZCBjaHVua0NvdW50ID0gbV90ZXh0Q2h1bmtzLnNpemUoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY2h1bmtDb3VudDsgKytpKQotICAgICAgICBwcm9jZXNzVGV4
dENodW5rKG1fdGV4dENodW5rc1tpXSk7Ci0KLSAgICBtX3RleHRDaHVua3MuY2xlYXIoKTsKKyAg
ICBmbG9hdCBhbmNob3JTaGlmdCA9IDA7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaHVuayA6IG1f
dGV4dENodW5rcykKKyAgICAgICAgYW5jaG9yU2hpZnQgKz0gY2h1bmsudG90YWxBbmNob3JTaGlm
dCgpOworICAgIHJldHVybiBhbmNob3JTaGlmdDsKIH0KIAotdm9pZCBTVkdUZXh0Q2h1bmtCdWls
ZGVyOjphZGRUZXh0Q2h1bmsoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91dEJv
eGVzLCB1bnNpZ25lZCBib3hTdGFydCwgdW5zaWduZWQgYm94Q291bnQpCitBZmZpbmVUcmFuc2Zv
cm0gU1ZHVGV4dENodW5rQnVpbGRlcjo6dHJhbnNmb3JtYXRpb25Gb3JUZXh0Qm94KFNWR0lubGlu
ZVRleHRCb3gqIHRleHRCb3gpIGNvbnN0CiB7Ci0gICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJv
eCA9IGxpbmVMYXlvdXRCb3hlc1tib3hTdGFydF07Ci0gICAgQVNTRVJUKHRleHRCb3gpOwotCi0g
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGV4dEJveC0+cmVuZGVyZXIoKS5zdHlsZSgp
OwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUo
KTsKLQotICAgIC8vIEJ1aWxkIGNodW5rIHN0eWxlIGZsYWdzLgotICAgIHVuc2lnbmVkIGNodW5r
U3R5bGUgPSBTVkdUZXh0Q2h1bms6OkRlZmF1bHRTdHlsZTsKLQotICAgIC8vIEhhbmRsZSAnZGly
ZWN0aW9uJyBwcm9wZXJ0eS4KLSAgICBpZiAoIXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSkKLSAgICAgICAgY2h1bmtTdHlsZSB8PSBTVkdUZXh0Q2h1bms6OlJpZ2h0VG9MZWZ0VGV4dDsK
LQotICAgIC8vIEhhbmRsZSAnd3JpdGluZy1tb2RlJyBwcm9wZXJ0eS4KLSAgICBpZiAoc3ZnU3R5
bGUuaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIGNodW5rU3R5bGUgfD0gU1ZHVGV4
dENodW5rOjpWZXJ0aWNhbFRleHQ7Ci0KLSAgICAvLyBIYW5kbGUgJ3RleHQtYW5jaG9yJyBwcm9w
ZXJ0eS4KLSAgICBzd2l0Y2ggKHN2Z1N0eWxlLnRleHRBbmNob3IoKSkgewotICAgIGNhc2UgVEFf
U1RBUlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVEFfTUlERExFOgotICAgICAgICBjaHVu
a1N0eWxlIHw9IFNWR1RleHRDaHVuazo6TWlkZGxlQW5jaG9yOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFRBX0VORDoKLSAgICAgICAgY2h1bmtTdHlsZSB8PSBTVkdUZXh0Q2h1bms6OkVuZEFu
Y2hvcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfTsKLQotICAgIC8vIEhhbmRsZSAnbGVuZ3RoQWRq
dXN0JyBwcm9wZXJ0eS4KLSAgICBmbG9hdCBkZXNpcmVkVGV4dExlbmd0aCA9IDA7Ci0gICAgaWYg
KFNWR1RleHRDb250ZW50RWxlbWVudCogdGV4dENvbnRlbnRFbGVtZW50ID0gU1ZHVGV4dENvbnRl
bnRFbGVtZW50OjplbGVtZW50RnJvbVJlbmRlcmVyKHRleHRCb3gtPnJlbmRlcmVyKCkucGFyZW50
KCkpKSB7Ci0gICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCh0ZXh0Q29udGVu
dEVsZW1lbnQpOwotICAgICAgICBkZXNpcmVkVGV4dExlbmd0aCA9IHRleHRDb250ZW50RWxlbWVu
dC0+c3BlY2lmaWVkVGV4dExlbmd0aCgpLnZhbHVlKGxlbmd0aENvbnRleHQpOwotCi0gICAgICAg
IHN3aXRjaCAodGV4dENvbnRlbnRFbGVtZW50LT5sZW5ndGhBZGp1c3QoKSkgewotICAgICAgICBj
YXNlIFNWR0xlbmd0aEFkanVzdFVua25vd246Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTVkdMZW5ndGhBZGp1c3RTcGFjaW5nOgotICAgICAgICAgICAgY2h1bmtTdHlsZSB8PSBT
VkdUZXh0Q2h1bms6Okxlbmd0aEFkanVzdFNwYWNpbmc7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBTVkdMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzOgotICAgICAgICAgICAg
Y2h1bmtTdHlsZSB8PSBTVkdUZXh0Q2h1bms6Okxlbmd0aEFkanVzdFNwYWNpbmdBbmRHbHlwaHM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBTVkdUZXh0Q2h1
bmsgY2h1bmsoY2h1bmtTdHlsZSwgZGVzaXJlZFRleHRMZW5ndGgpOwotCi0gICAgVmVjdG9yPFNW
R0lubGluZVRleHRCb3gqPiYgYm94ZXMgPSBjaHVuay5ib3hlcygpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJveFN0YXJ0OyBpIDwgYm94U3RhcnQgKyBib3hDb3VudDsgKytpKQotICAgICAgICBi
b3hlcy5hcHBlbmQobGluZUxheW91dEJveGVzW2ldKTsKLQotICAgIG1fdGV4dENodW5rcy5hcHBl
bmQoY2h1bmspOworICAgIGF1dG8gaXQgPSBtX3RleHRCb3hUcmFuc2Zvcm1hdGlvbnMuZmluZCh0
ZXh0Qm94KTsKKyAgICByZXR1cm4gaXQgPT0gbV90ZXh0Qm94VHJhbnNmb3JtYXRpb25zLmVuZCgp
ID8gQWZmaW5lVHJhbnNmb3JtKCkgOiBpdC0+dmFsdWU7CiB9CiAKLXZvaWQgU1ZHVGV4dENodW5r
QnVpbGRlcjo6cHJvY2Vzc1RleHRDaHVuayhjb25zdCBTVkdUZXh0Q2h1bmsmIGNodW5rKQordm9p
ZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpidWlsZFRleHRDaHVua3MoY29uc3QgVmVjdG9yPFNWR0lu
bGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzKQogewotICAgIGJvb2wgcHJvY2Vzc1RleHRM
ZW5ndGggPSBjaHVuay5oYXNEZXNpcmVkVGV4dExlbmd0aCgpOwotICAgIGJvb2wgcHJvY2Vzc1Rl
eHRBbmNob3IgPSBjaHVuay5oYXNUZXh0QW5jaG9yKCk7Ci0gICAgaWYgKCFwcm9jZXNzVGV4dEFu
Y2hvciAmJiAhcHJvY2Vzc1RleHRMZW5ndGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0
IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGJveGVzID0gY2h1bmsuYm94ZXMoKTsKLSAgICB1
bnNpZ25lZCBib3hDb3VudCA9IGJveGVzLnNpemUoKTsKLSAgICBpZiAoIWJveENvdW50KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBDYWxjdWxhdGUgYWJzb2x1dGUgbGVuZ3RoIG9mIHdob2xl
IHRleHQgY2h1bmsgKHN0YXJ0aW5nIGZyb20gdGV4dCBib3ggJ3N0YXJ0Jywgc3Bhbm5pbmcgJ2xl
bmd0aCcgdGV4dCBib3hlcykuCi0gICAgZmxvYXQgY2h1bmtMZW5ndGggPSAwOwotICAgIHVuc2ln
bmVkIGNodW5rQ2hhcmFjdGVycyA9IDA7Ci0gICAgY2h1bmsuY2FsY3VsYXRlTGVuZ3RoKGNodW5r
TGVuZ3RoLCBjaHVua0NoYXJhY3RlcnMpOwotCi0gICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IGNo
dW5rLmlzVmVydGljYWxUZXh0KCk7Ci0gICAgaWYgKHByb2Nlc3NUZXh0TGVuZ3RoKSB7Ci0gICAg
ICAgIGlmIChjaHVuay5oYXNMZW5ndGhBZGp1c3RTcGFjaW5nKCkpIHsKLSAgICAgICAgICAgIGZs
b2F0IHRleHRMZW5ndGhTaGlmdCA9IChjaHVuay5kZXNpcmVkVGV4dExlbmd0aCgpIC0gY2h1bmtM
ZW5ndGgpIC8gY2h1bmtDaGFyYWN0ZXJzOwotICAgICAgICAgICAgdW5zaWduZWQgYXRDaGFyYWN0
ZXIgPSAwOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBib3hQb3NpdGlvbiA9IDA7IGJveFBv
c2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9zaXRpb24pIHsKLSAgICAgICAgICAgICAgICBWZWN0
b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gYm94ZXNbYm94UG9zaXRpb25dLT50ZXh0
RnJhZ21lbnRzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50cy5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHByb2Nlc3NUZXh0
TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24oaXNWZXJ0aWNhbFRleHQsIHRleHRMZW5ndGhTaGlmdCwg
ZnJhZ21lbnRzLCBhdENoYXJhY3Rlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQoY2h1bmsuaGFzTGVuZ3RoQWRqdXN0U3BhY2luZ0FuZEdseXBo
cygpKTsKLSAgICAgICAgICAgIGZsb2F0IHRleHRMZW5ndGhTY2FsZSA9IGNodW5rLmRlc2lyZWRU
ZXh0TGVuZ3RoKCkgLyBjaHVua0xlbmd0aDsKLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBz
cGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtOwotCi0gICAgICAgICAgICBib29sIGZvdW5kRmlyc3RG
cmFnbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBib3hQb3NpdGlvbiA9
IDA7IGJveFBvc2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9zaXRpb24pIHsKLSAgICAgICAgICAg
ICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gYm94ZXNbYm94UG9zaXRpb25dOwotICAg
ICAgICAgICAgICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSB0ZXh0Qm94
LT50ZXh0RnJhZ21lbnRzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50cy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgaWYg
KCFmb3VuZEZpcnN0RnJhZ21lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRGaXJzdEZy
YWdtZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRTcGFjaW5nQW5kR2x5cGhz
VHJhbnNmb3JtKGlzVmVydGljYWxUZXh0LCB0ZXh0TGVuZ3RoU2NhbGUsIGZyYWdtZW50cy5maXJz
dCgpLCBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBtX3RleHRCb3hUcmFuc2Zvcm1hdGlvbnMuc2V0KHRleHRCb3gsIHNwYWNp
bmdBbmRHbHlwaHNUcmFuc2Zvcm0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKCFwcm9jZXNzVGV4dEFuY2hvcikKKyAgICBpZiAobGluZUxheW91dEJveGVzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gSWYgd2UgcHJldmlvdXNseSBhcHBs
aWVkIGEgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nIiBjb3JyZWN0aW9uLCB3ZSBoYXZlIHRvIHJlY2Fs
Y3VsYXRlIHRoZSBjaHVuayBsZW5ndGgsIHRvIGJlIGFibGUgdG8gYXBwbHkgdGhlIHRleHQtYW5j
aG9yIHNoaWZ0LgotICAgIGlmIChwcm9jZXNzVGV4dExlbmd0aCAmJiBjaHVuay5oYXNMZW5ndGhB
ZGp1c3RTcGFjaW5nKCkpIHsKLSAgICAgICAgY2h1bmtMZW5ndGggPSAwOwotICAgICAgICBjaHVu
a0NoYXJhY3RlcnMgPSAwOwotICAgICAgICBjaHVuay5jYWxjdWxhdGVMZW5ndGgoY2h1bmtMZW5n
dGgsIGNodW5rQ2hhcmFjdGVycyk7Ci0gICAgfQorICAgIHVuc2lnbmVkIGxpbWl0ID0gbGluZUxh
eW91dEJveGVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBmaXJzdCA9IGxpbWl0OwogCi0gICAgZmxv
YXQgdGV4dEFuY2hvclNoaWZ0ID0gY2h1bmsuY2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0KGNodW5r
TGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGJveFBvc2l0aW9uID0gMDsgYm94UG9zaXRpb24g
PCBib3hDb3VudDsgKytib3hQb3NpdGlvbikgewotICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdt
ZW50PiYgZnJhZ21lbnRzID0gYm94ZXNbYm94UG9zaXRpb25dLT50ZXh0RnJhZ21lbnRzKCk7Ci0g
ICAgICAgIGlmIChmcmFnbWVudHMuaXNFbXB0eSgpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsaW1pdDsgKytpKSB7CisgICAgICAgIGlmICghbGluZUxheW91dEJveGVzW2ldLT5zdGFy
dHNOZXdUZXh0Q2h1bmsoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwcm9jZXNz
VGV4dEFuY2hvckNvcnJlY3Rpb24oaXNWZXJ0aWNhbFRleHQsIHRleHRBbmNob3JTaGlmdCwgZnJh
Z21lbnRzKTsKLSAgICB9Ci19Ci0KLXZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vzc1Rl
eHRMZW5ndGhTcGFjaW5nQ29ycmVjdGlvbihib29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCB0ZXh0
TGVuZ3RoU2hpZnQsIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMsIHVuc2lnbmVk
JiBhdENoYXJhY3RlcikKLXsKLSAgICB1bnNpZ25lZCBmcmFnbWVudENvdW50ID0gZnJhZ21lbnRz
LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnRDb3VudDsgKytp
KSB7Ci0gICAgICAgIFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVudHNbaV07Ci0K
LSAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgZnJhZ21lbnQueSArPSB0
ZXh0TGVuZ3RoU2hpZnQgKiBhdENoYXJhY3RlcjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ZnJhZ21lbnQueCArPSB0ZXh0TGVuZ3RoU2hpZnQgKiBhdENoYXJhY3RlcjsKIAotICAgICAgICBh
dENoYXJhY3RlciArPSBmcmFnbWVudC5sZW5ndGg7CisgICAgICAgIGlmIChmaXJzdCA9PSBsaW1p
dCkKKyAgICAgICAgICAgIGZpcnN0ID0gaTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihmaXJzdCAhPSBpKTsKKyAgICAgICAgICAg
IG1fdGV4dENodW5rcy5hcHBlbmQoU1ZHVGV4dENodW5rKGxpbmVMYXlvdXRCb3hlcywgZmlyc3Qs
IGkpKTsKKyAgICAgICAgICAgIGZpcnN0ID0gaTsKKyAgICAgICAgfQogICAgIH0KLX0KIAotdm9p
ZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpwcm9jZXNzVGV4dEFuY2hvckNvcnJlY3Rpb24oYm9vbCBp
c1ZlcnRpY2FsVGV4dCwgZmxvYXQgdGV4dEFuY2hvclNoaWZ0LCBWZWN0b3I8U1ZHVGV4dEZyYWdt
ZW50PiYgZnJhZ21lbnRzKQotewotICAgIHVuc2lnbmVkIGZyYWdtZW50Q291bnQgPSBmcmFnbWVu
dHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVudENvdW50OyAr
K2kpIHsKLSAgICAgICAgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50c1tpXTsK
LQotICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICBmcmFnbWVudC55ICs9
IHRleHRBbmNob3JTaGlmdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnJhZ21lbnQueCAr
PSB0ZXh0QW5jaG9yU2hpZnQ7Ci0gICAgfQorICAgIGlmIChmaXJzdCAhPSBsaW1pdCkKKyAgICAg
ICAgbV90ZXh0Q2h1bmtzLmFwcGVuZChTVkdUZXh0Q2h1bmsobGluZUxheW91dEJveGVzLCBmaXJz
dCwgbGltaXQpKTsKIH0KIAotdm9pZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpidWlsZFNwYWNpbmdB
bmRHbHlwaHNUcmFuc2Zvcm0oYm9vbCBpc1ZlcnRpY2FsVGV4dCwgZmxvYXQgc2NhbGUsIGNvbnN0
IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIEFmZmluZVRyYW5zZm9ybSYgc3BhY2luZ0FuZEds
eXBoc1RyYW5zZm9ybSkKK3ZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6bGF5b3V0VGV4dENodW5r
cyhjb25zdCBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMpCiB7Ci0g
ICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS50cmFuc2xhdGUoZnJhZ21lbnQueCwgZnJhZ21l
bnQueSk7CisgICAgYnVpbGRUZXh0Q2h1bmtzKGxpbmVMYXlvdXRCb3hlcyk7CisgICAgaWYgKG1f
dGV4dENodW5rcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChpc1ZlcnRp
Y2FsVGV4dCkKLSAgICAgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS5zY2FsZU5vblVuaWZv
cm0oMSwgc2NhbGUpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9y
bS5zY2FsZU5vblVuaWZvcm0oc2NhbGUsIDEpOworICAgIGZvciAoY29uc3QgYXV0byYgY2h1bmsg
OiBtX3RleHRDaHVua3MpCisgICAgICAgIGNodW5rLmxheW91dChtX3RleHRCb3hUcmFuc2Zvcm1h
dGlvbnMpOwogCi0gICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS50cmFuc2xhdGUoLWZyYWdt
ZW50LngsIC1mcmFnbWVudC55KTsKKyAgICBtX3RleHRDaHVua3MuY2xlYXIoKTsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtC
dWlsZGVyLmgJKHJldmlzaW9uIDE4Mjc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dENodW5rQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQwLDE4ICs0MSwxMyBAQCBw
dWJsaWM6CiAgICAgU1ZHVGV4dENodW5rQnVpbGRlcigpOwogCiAgICAgY29uc3QgVmVjdG9yPFNW
R1RleHRDaHVuaz4mIHRleHRDaHVua3MoKSBjb25zdCB7IHJldHVybiBtX3RleHRDaHVua3M7IH0K
LSAgICB2b2lkIHRyYW5zZm9ybWF0aW9uRm9yVGV4dEJveChTVkdJbmxpbmVUZXh0Qm94KiwgQWZm
aW5lVHJhbnNmb3JtJikgY29uc3Q7CisgICAgdW5zaWduZWQgdG90YWxDaGFyYWN0ZXJzKCkgY29u
c3Q7CisgICAgZmxvYXQgdG90YWxMZW5ndGgoKSBjb25zdDsKKyAgICBmbG9hdCB0b3RhbEFuY2hv
clNoaWZ0KCkgY29uc3Q7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybWF0aW9uRm9yVGV4
dEJveChTVkdJbmxpbmVUZXh0Qm94KikgY29uc3Q7CiAKLSAgICB2b2lkIGJ1aWxkVGV4dENodW5r
cyhWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMpOwotICAgIHZvaWQg
bGF5b3V0VGV4dENodW5rcyhWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94
ZXMpOwotCi1wcml2YXRlOgotICAgIHZvaWQgYWRkVGV4dENodW5rKFZlY3RvcjxTVkdJbmxpbmVU
ZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcywgdW5zaWduZWQgYm94UG9zaXRpb24sIHVuc2lnbmVk
IGJveENvdW50KTsKLSAgICB2b2lkIHByb2Nlc3NUZXh0Q2h1bmsoY29uc3QgU1ZHVGV4dENodW5r
Jik7Ci0KLSAgICB2b2lkIHByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24oYm9vbCBp
c1ZlcnRpY2FsVGV4dCwgZmxvYXQgdGV4dExlbmd0aFNoaWZ0LCBWZWN0b3I8U1ZHVGV4dEZyYWdt
ZW50PiYsIHVuc2lnbmVkJiBhdENoYXJhY3Rlcik7Ci0gICAgdm9pZCBwcm9jZXNzVGV4dEFuY2hv
ckNvcnJlY3Rpb24oYm9vbCBpc1ZlcnRpY2FsVGV4dCwgZmxvYXQgdGV4dEFuY2hvclNoaWZ0LCBW
ZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYpOwotICAgIHZvaWQgYnVpbGRTcGFjaW5nQW5kR2x5cGhz
VHJhbnNmb3JtKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0IHNjYWxlLCBjb25zdCBTVkdUZXh0
RnJhZ21lbnQmLCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2b2lkIGJ1aWxkVGV4dENodW5rcyhj
b25zdCBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMpOworICAgIHZv
aWQgbGF5b3V0VGV4dENodW5rcyhjb25zdCBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5l
TGF5b3V0Qm94ZXMpOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+IG1fdGV4
dENodW5rczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEVuZ2luZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0RW5naW5lLmNwcAkocmV2aXNpb24gMTgyNzU4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR1RleHRM
YXlvdXRFbmdpbmUuaCIKIAorI2luY2x1ZGUgIlBhdGhUcmF2ZXJzYWxTdGF0ZS5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1RleHRQYXRoLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR0lubGluZVRleHRCb3guaCIKQEAgLTE2MCw1OCArMTYxLDM5IEBAIGJvb2wgU1ZHVGV4
dExheW91dEVuZ2luZTo6cGFyZW50RGVmaW5lc1QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgU1ZHVGV4dExheW91dEVuZ2luZTo6YmVnaW5UZXh0UGF0aExheW91dChSZW5kZXJPYmplY3Qq
IG9iamVjdCwgU1ZHVGV4dExheW91dEVuZ2luZSYgbGluZUxheW91dCkKK3ZvaWQgU1ZHVGV4dExh
eW91dEVuZ2luZTo6YmVnaW5UZXh0UGF0aExheW91dChSZW5kZXJTVkdUZXh0UGF0aCYgdGV4dFBh
dGgsIFNWR1RleHRMYXlvdXRFbmdpbmUmIGxpbmVMYXlvdXQpCiB7Ci0gICAgQVNTRVJUKG9iamVj
dCk7Ci0KICAgICBtX2luUGF0aExheW91dCA9IHRydWU7Ci0gICAgUmVuZGVyU1ZHVGV4dFBhdGgm
IHRleHRQYXRoID0gZG93bmNhc3Q8UmVuZGVyU1ZHVGV4dFBhdGg+KCpvYmplY3QpOwogCiAgICAg
bV90ZXh0UGF0aCA9IHRleHRQYXRoLmxheW91dFBhdGgoKTsKICAgICBpZiAobV90ZXh0UGF0aC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKKwogICAgIG1fdGV4dFBhdGhTdGFydE9mZnNldCA9
IHRleHRQYXRoLnN0YXJ0T2Zmc2V0KCk7CiAgICAgbV90ZXh0UGF0aExlbmd0aCA9IG1fdGV4dFBh
dGgubGVuZ3RoKCk7CiAgICAgaWYgKG1fdGV4dFBhdGhTdGFydE9mZnNldCA+IDAgJiYgbV90ZXh0
UGF0aFN0YXJ0T2Zmc2V0IDw9IDEpCiAgICAgICAgIG1fdGV4dFBhdGhTdGFydE9mZnNldCAqPSBt
X3RleHRQYXRoTGVuZ3RoOwogCi0gICAgZmxvYXQgdG90YWxMZW5ndGggPSAwOwotICAgIHVuc2ln
bmVkIHRvdGFsQ2hhcmFjdGVycyA9IDA7Ci0KICAgICBsaW5lTGF5b3V0Lm1fY2h1bmtMYXlvdXRC
dWlsZGVyLmJ1aWxkVGV4dENodW5rcyhsaW5lTGF5b3V0Lm1fbGluZUxheW91dEJveGVzKTsKLSAg
ICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rPiYgdGV4dENodW5rcyA9IGxpbmVMYXlvdXQubV9j
aHVua0xheW91dEJ1aWxkZXIudGV4dENodW5rcygpOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IHRl
eHRDaHVua3Muc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgY29uc3QgU1ZHVGV4dENodW5rJiBjaHVuayA9IHRleHRDaHVua3MuYXQoaSk7
Ci0KLSAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAgICAgICAgdW5zaWduZWQgY2hhcmFjdGVy
cyA9IDA7Ci0gICAgICAgIGNodW5rLmNhbGN1bGF0ZUxlbmd0aChsZW5ndGgsIGNoYXJhY3RlcnMp
OwotCi0gICAgICAgIC8vIEhhbmRsZSB0ZXh0LWFuY2hvciBhcyBhZGRpdGlvbmFsIHN0YXJ0IG9m
ZnNldCBmb3IgdGV4dCBwYXRocy4KLSAgICAgICAgbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0ICs9IGNo
dW5rLmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChsZW5ndGgpOwotCi0gICAgICAgIHRvdGFsTGVu
Z3RoICs9IGxlbmd0aDsKLSAgICAgICAgdG90YWxDaGFyYWN0ZXJzICs9IGNoYXJhY3RlcnM7Ci0g
ICAgfQogCisgICAgLy8gSGFuZGxlIHRleHQtYW5jaG9yIGFzIGFkZGl0aW9uYWwgc3RhcnQgb2Zm
c2V0IGZvciB0ZXh0IHBhdGhzLgorICAgIG1fdGV4dFBhdGhTdGFydE9mZnNldCArPSBsaW5lTGF5
b3V0Lm1fY2h1bmtMYXlvdXRCdWlsZGVyLnRvdGFsQW5jaG9yU2hpZnQoKTsKICAgICBtX3RleHRQ
YXRoQ3VycmVudE9mZnNldCA9IG1fdGV4dFBhdGhTdGFydE9mZnNldDsKIAogICAgIC8vIEV2ZW50
dWFsbHkgaGFuZGxlIHRleHRMZW5ndGggYWRqdXN0bWVudHMuCi0gICAgU1ZHTGVuZ3RoQWRqdXN0
VHlwZSBsZW5ndGhBZGp1c3QgPSBTVkdMZW5ndGhBZGp1c3RVbmtub3duOwotICAgIGZsb2F0IGRl
c2lyZWRUZXh0TGVuZ3RoID0gMDsKLQotICAgIGlmIChTVkdUZXh0Q29udGVudEVsZW1lbnQqIHRl
eHRDb250ZW50RWxlbWVudCA9IFNWR1RleHRDb250ZW50RWxlbWVudDo6ZWxlbWVudEZyb21SZW5k
ZXJlcigmdGV4dFBhdGgpKSB7Ci0gICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4
dCh0ZXh0Q29udGVudEVsZW1lbnQpOwotICAgICAgICBsZW5ndGhBZGp1c3QgPSB0ZXh0Q29udGVu
dEVsZW1lbnQtPmxlbmd0aEFkanVzdCgpOwotICAgICAgICBkZXNpcmVkVGV4dExlbmd0aCA9IHRl
eHRDb250ZW50RWxlbWVudC0+c3BlY2lmaWVkVGV4dExlbmd0aCgpLnZhbHVlKGxlbmd0aENvbnRl
eHQpOwotICAgIH0KKyAgICBhdXRvKiB0ZXh0Q29udGVudEVsZW1lbnQgPSBTVkdUZXh0Q29udGVu
dEVsZW1lbnQ6OmVsZW1lbnRGcm9tUmVuZGVyZXIoJnRleHRQYXRoKTsKKyAgICBpZiAoIXRleHRD
b250ZW50RWxlbWVudCkKKyAgICAgICAgcmV0dXJuOwogCisgICAgU1ZHTGVuZ3RoQ29udGV4dCBs
ZW5ndGhDb250ZXh0KHRleHRDb250ZW50RWxlbWVudCk7CisgICAgZmxvYXQgZGVzaXJlZFRleHRM
ZW5ndGggPSB0ZXh0Q29udGVudEVsZW1lbnQtPnNwZWNpZmllZFRleHRMZW5ndGgoKS52YWx1ZShs
ZW5ndGhDb250ZXh0KTsKICAgICBpZiAoIWRlc2lyZWRUZXh0TGVuZ3RoKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobGVuZ3RoQWRqdXN0ID09IFNWR0xlbmd0aEFkanVzdFNwYWNpbmcpCisg
ICAgZmxvYXQgdG90YWxMZW5ndGggPSBsaW5lTGF5b3V0Lm1fY2h1bmtMYXlvdXRCdWlsZGVyLnRv
dGFsTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdG90YWxDaGFyYWN0ZXJzID0gbGluZUxheW91dC5t
X2NodW5rTGF5b3V0QnVpbGRlci50b3RhbENoYXJhY3RlcnMoKTsKKworICAgIGlmICh0ZXh0Q29u
dGVudEVsZW1lbnQtPmxlbmd0aEFkanVzdCgpID09IFNWR0xlbmd0aEFkanVzdFNwYWNpbmcpCiAg
ICAgICAgIG1fdGV4dFBhdGhTcGFjaW5nID0gKGRlc2lyZWRUZXh0TGVuZ3RoIC0gdG90YWxMZW5n
dGgpIC8gdG90YWxDaGFyYWN0ZXJzOwogICAgIGVsc2UKICAgICAgICAgbV90ZXh0UGF0aFNjYWxp
bmcgPSBkZXNpcmVkVGV4dExlbmd0aCAvIHRvdGFsTGVuZ3RoOwpAQCAtMjkwLDcgKzI3Miw3IEBA
IHZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6ZmluYWxpemVUcmFuc2YKIAogICAgICAgICB1bnNp
Z25lZCBmcmFnbWVudENvdW50ID0gZnJhZ21lbnRzLnNpemUoKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGZyYWdtZW50Q291bnQ7ICsraSkgewotICAgICAgICAgICAgbV9jaHVu
a0xheW91dEJ1aWxkZXIudHJhbnNmb3JtYXRpb25Gb3JUZXh0Qm94KHRleHRCb3gsIHRleHRCb3hU
cmFuc2Zvcm1hdGlvbik7CisgICAgICAgICAgICB0ZXh0Qm94VHJhbnNmb3JtYXRpb24gPSBtX2No
dW5rTGF5b3V0QnVpbGRlci50cmFuc2Zvcm1hdGlvbkZvclRleHRCb3godGV4dEJveCk7CiAgICAg
ICAgICAgICBpZiAodGV4dEJveFRyYW5zZm9ybWF0aW9uLmlzSWRlbnRpdHkoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEFTU0VSVChmcmFnbWVudHNbaV0ubGVuZ3Ro
QWRqdXN0VHJhbnNmb3JtLmlzSWRlbnRpdHkoKSk7CkBAIC01NTMsMTQgKzUzNSwxNSBAQCB2b2lk
IFNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpCiAgICAgICAgICAgICBpZiAodGV4
dFBhdGhPZmZzZXQgPiBtX3RleHRQYXRoTGVuZ3RoKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgICAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHBv
aW50ID0gbV90ZXh0UGF0aC5wb2ludEF0TGVuZ3RoKHRleHRQYXRoT2Zmc2V0LCBvayk7Ci0gICAg
ICAgICAgICBBU1NFUlQob2spOworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Cisg
ICAgICAgICAgICBhdXRvIHRyYXZlcnNhbFN0YXRlKG1fdGV4dFBhdGgudHJhdmVyc2FsU3RhdGVB
dExlbmd0aCh0ZXh0UGF0aE9mZnNldCwgc3VjY2VzcykpOworICAgICAgICAgICAgQVNTRVJUKHN1
Y2Nlc3MpOwogCisgICAgICAgICAgICBGbG9hdFBvaW50IHBvaW50ID0gdHJhdmVyc2FsU3RhdGUu
Y3VycmVudCgpOwogICAgICAgICAgICAgeCA9IHBvaW50LngoKTsKICAgICAgICAgICAgIHkgPSBw
b2ludC55KCk7Ci0gICAgICAgICAgICBhbmdsZSA9IG1fdGV4dFBhdGgubm9ybWFsQW5nbGVBdExl
bmd0aCh0ZXh0UGF0aE9mZnNldCwgb2spOwotICAgICAgICAgICAgQVNTRVJUKG9rKTsKKworICAg
ICAgICAgICAgYW5nbGUgPSB0cmF2ZXJzYWxTdGF0ZS5ub3JtYWxBbmdsZSgpOwogCiAgICAgICAg
ICAgICAvLyBGb3IgdmVydGljYWwgdGV4dCBvbiBwYXRoLCB0aGUgYWN0dWFsIGFuZ2xlIGhhcyB0
byBiZSByb3RhdGVkIDkwIGRlZ3JlZXMgYW50aS1jbG9ja3dpc2UsIG5vdCB0aGUgb3JpZW50YXRp
b24gYW5nbGUhCiAgICAgICAgICAgICBpZiAobV9pc1ZlcnRpY2FsVGV4dCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5oCShy
ZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRFbmdpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNz
IFJlbmRlclNWR0lubGluZVRleHQ7CitjbGFzcyBSZW5kZXJTVkdUZXh0UGF0aDsKIGNsYXNzIFNW
R0VsZW1lbnQ7CiBjbGFzcyBTVkdJbmxpbmVUZXh0Qm94OwogY2xhc3MgU1ZHUmVuZGVyU3R5bGU7
CkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8U1ZHVGV4dExheW91dEF0dHJp
YnV0ZXMqPiYgbGF5b3V0QXR0cmlidXRlcygpIHsgcmV0dXJuIG1fbGF5b3V0QXR0cmlidXRlczsg
fQogICAgIFNWR1RleHRDaHVua0J1aWxkZXImIGNodW5rTGF5b3V0QnVpbGRlcigpIHsgcmV0dXJu
IG1fY2h1bmtMYXlvdXRCdWlsZGVyOyB9CiAKLSAgICB2b2lkIGJlZ2luVGV4dFBhdGhMYXlvdXQo
UmVuZGVyT2JqZWN0KiwgU1ZHVGV4dExheW91dEVuZ2luZSYgbGluZUxheW91dCk7CisgICAgdm9p
ZCBiZWdpblRleHRQYXRoTGF5b3V0KFJlbmRlclNWR1RleHRQYXRoJiwgU1ZHVGV4dExheW91dEVu
Z2luZSYgbGluZUxheW91dCk7CiAgICAgdm9pZCBlbmRUZXh0UGF0aExheW91dCgpOwogCiAgICAg
dm9pZCBsYXlvdXRJbmxpbmVUZXh0Qm94KFNWR0lubGluZVRleHRCb3gqKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24g
MTgyNzU4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUGF0aFRy
YXZlcnNhbFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRl
ICJTVkdJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdNUGF0aEVsZW1lbnQuaCIKQEAgLTIx
MiwxNiArMjEzLDE5IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmJ1aWxkVHJhbnMK
IHsKICAgICBBU1NFUlQoIW1fYW5pbWF0aW9uUGF0aC5pc0VtcHR5KCkpOwogCi0gICAgYm9vbCBv
ayA9IGZhbHNlOworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgIGZsb2F0IHBvc2l0aW9u
T25QYXRoID0gbV9hbmltYXRpb25QYXRoLmxlbmd0aCgpICogcGVyY2VudGFnZTsKLSAgICBGbG9h
dFBvaW50IHBvc2l0aW9uID0gbV9hbmltYXRpb25QYXRoLnBvaW50QXRMZW5ndGgocG9zaXRpb25P
blBhdGgsIG9rKTsKLSAgICBpZiAoIW9rKQorICAgIGF1dG8gdHJhdmVyc2FsU3RhdGUobV9hbmlt
YXRpb25QYXRoLnRyYXZlcnNhbFN0YXRlQXRMZW5ndGgocG9zaXRpb25PblBhdGgsIHN1Y2Nlc3Mp
KTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UG9pbnQg
cG9zaXRpb24gPSB0cmF2ZXJzYWxTdGF0ZS5jdXJyZW50KCk7CisgICAgZmxvYXQgYW5nbGUgPSB0
cmF2ZXJzYWxTdGF0ZS5ub3JtYWxBbmdsZSgpOworCiAgICAgdHJhbnNmb3JtLT50cmFuc2xhdGUo
cG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkpOwogICAgIFJvdGF0ZU1vZGUgcm90YXRlTW9kZSA9
IHRoaXMtPnJvdGF0ZU1vZGUoKTsKICAgICBpZiAocm90YXRlTW9kZSAhPSBSb3RhdGVBdXRvICYm
IHJvdGF0ZU1vZGUgIT0gUm90YXRlQXV0b1JldmVyc2UpCiAgICAgICAgIHJldHVybjsKLSAgICBm
bG9hdCBhbmdsZSA9IG1fYW5pbWF0aW9uUGF0aC5ub3JtYWxBbmdsZUF0TGVuZ3RoKHBvc2l0aW9u
T25QYXRoLCBvayk7CiAgICAgaWYgKHJvdGF0ZU1vZGUgPT0gUm90YXRlQXV0b1JldmVyc2UpCiAg
ICAgICAgIGFuZ2xlICs9IDE4MDsKICAgICB0cmFuc2Zvcm0tPnJvdGF0ZShhbmdsZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxk
ZXIuY3BwCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDY4ICsyOSw1NyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OlNW
R1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIoKQogICAgIDogbV90cmF2ZXJzYWxTdGF0ZSgwKQor
ICAgICwgbV9zZWdtZW50SW5kZXgoMCkKIHsKIH0KIAogdm9pZCBTVkdQYXRoVHJhdmVyc2FsU3Rh
dGVCdWlsZGVyOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIGJvb2wsIFBh
dGhDb29yZGluYXRlTW9kZSkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7Ci0gICAg
bV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3RyYXZlcnNhbFN0YXRlLT5tb3Zl
VG8odGFyZ2V0UG9pbnQpOworICAgIG1fdHJhdmVyc2FsU3RhdGUtPnByb2Nlc3NQYXRoRWxlbWVu
dChQYXRoRWxlbWVudE1vdmVUb1BvaW50LCAmdGFyZ2V0UG9pbnQpOwogfQogCiB2b2lkIFNWR1Bh
dGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQ
b2ludCwgUGF0aENvb3JkaW5hdGVNb2RlKQogewogICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRl
KTsKLSAgICBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoICs9IG1fdHJhdmVyc2FsU3Rh
dGUtPmxpbmVUbyh0YXJnZXRQb2ludCk7CisgICAgbV90cmF2ZXJzYWxTdGF0ZS0+cHJvY2Vzc1Bh
dGhFbGVtZW50KFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQsICZ0YXJnZXRQb2ludCk7CiB9CiAK
IHZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlKQogeworICAgIEZsb2F0UG9pbnQg
cG9pbnRzW10gPSB7IHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCB9OwogICAgIEFTU0VSVCht
X3RyYXZlcnNhbFN0YXRlKTsKLSAgICBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoICs9
IG1fdHJhdmVyc2FsU3RhdGUtPmN1YmljQmV6aWVyVG8ocG9pbnQxLCBwb2ludDIsIHRhcmdldFBv
aW50KTsKKyAgICBtX3RyYXZlcnNhbFN0YXRlLT5wcm9jZXNzUGF0aEVsZW1lbnQoUGF0aEVsZW1l
bnRBZGRDdXJ2ZVRvUG9pbnQsIHBvaW50cyk7CiB9CiAKIHZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0
YXRlQnVpbGRlcjo6Y2xvc2VQYXRoKCkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7
Ci0gICAgbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3RyYXZlcnNhbFN0YXRl
LT5jbG9zZVN1YnBhdGgoKTsKKyAgICBtX3RyYXZlcnNhbFN0YXRlLT5wcm9jZXNzUGF0aEVsZW1l
bnQoUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGgsIG51bGxwdHIpOwogfQogCiB2b2lkIFNWR1BhdGhU
cmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnNldERlc2lyZWRMZW5ndGgoZmxvYXQgZGVzaXJlZExlbmd0
aCkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7Ci0gICAgbV90cmF2ZXJzYWxTdGF0
ZS0+bV9kZXNpcmVkTGVuZ3RoID0gZGVzaXJlZExlbmd0aDsKKyAgICBtX3RyYXZlcnNhbFN0YXRl
LT5zZXREZXNpcmVkTGVuZ3RoKGRlc2lyZWRMZW5ndGgpOwogfQogCiBib29sIFNWR1BhdGhUcmF2
ZXJzYWxTdGF0ZUJ1aWxkZXI6OmNvbnRpbnVlQ29uc3VtaW5nKCkKIHsKICAgICBBU1NFUlQobV90
cmF2ZXJzYWxTdGF0ZSk7ICAgIAotICAgIG1fdHJhdmVyc2FsU3RhdGUtPnByb2Nlc3NTZWdtZW50
KCk7Ci0gICAgcmV0dXJuICFtX3RyYXZlcnNhbFN0YXRlLT5tX3N1Y2Nlc3M7Ci19Ci0KLXZvaWQg
U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6aW5jcmVtZW50UGF0aFNlZ21lbnRDb3VudCgp
Ci17Ci0gICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwotICAgICsrbV90cmF2ZXJzYWxTdGF0
ZS0+bV9zZWdtZW50SW5kZXg7Ci19Ci0KLXVuc2lnbmVkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1
aWxkZXI6OnBhdGhTZWdtZW50SW5kZXgoKQotewotICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRl
KTsKLSAgICByZXR1cm4gbV90cmF2ZXJzYWxTdGF0ZS0+bV9zZWdtZW50SW5kZXg7CisgICAgcmV0
dXJuICFtX3RyYXZlcnNhbFN0YXRlLT5zdWNjZXNzKCk7CiB9CiAKIGZsb2F0IFNWR1BhdGhUcmF2
ZXJzYWxTdGF0ZUJ1aWxkZXI6OnRvdGFsTGVuZ3RoKCkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJz
YWxTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fdHJhdmVyc2FsU3RhdGUtPm1fdG90YWxMZW5ndGg7Cisg
ICAgcmV0dXJuIG1fdHJhdmVyc2FsU3RhdGUtPnRvdGFsTGVuZ3RoKCk7CiB9CiAKIFNWR1BvaW50
IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1cnJlbnRQb2ludCgpCiB7CiAgICAgQVNT
RVJUKG1fdHJhdmVyc2FsU3RhdGUpOwotICAgIHJldHVybiBtX3RyYXZlcnNhbFN0YXRlLT5tX2N1
cnJlbnQ7CisgICAgcmV0dXJuIG1fdHJhdmVyc2FsU3RhdGUtPmN1cnJlbnQoKTsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVp
bGRlci5oCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIsMTUgQEAg
Y2xhc3MgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlciA6IHB1YgogcHVibGljOgogICAgIFNW
R1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIoKTsKIAotICAgIHVuc2lnbmVkIHBhdGhTZWdtZW50
SW5kZXgoKTsKKyAgICB1bnNpZ25lZCBwYXRoU2VnbWVudEluZGV4KCkgeyByZXR1cm4gbV9zZWdt
ZW50SW5kZXg7IH0KICAgICBmbG9hdCB0b3RhbExlbmd0aCgpOwogICAgIFNWR1BvaW50IGN1cnJl
bnRQb2ludCgpOwogCiAgICAgdm9pZCBzZXRDdXJyZW50VHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZl
cnNhbFN0YXRlKiB0cmF2ZXJzYWxTdGF0ZSkgeyBtX3RyYXZlcnNhbFN0YXRlID0gdHJhdmVyc2Fs
U3RhdGU7IH0KICAgICB2b2lkIHNldERlc2lyZWRMZW5ndGgoZmxvYXQpOwotICAgIHZpcnR1YWwg
dm9pZCBpbmNyZW1lbnRQYXRoU2VnbWVudENvdW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGluY3JlbWVudFBhdGhTZWdtZW50Q291bnQoKSBvdmVycmlkZSB7ICsrbV9zZWdtZW50SW5k
ZXg7IH0KICAgICB2aXJ0dWFsIGJvb2wgY29udGludWVDb25zdW1pbmcoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIG92ZXJyaWRlIHsgbV90cmF2ZXJzYWxTdGF0ZSA9IDA7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIG92ZXJyaWRlIHsgbV90cmF2ZXJzYWxTdGF0
ZSA9IG51bGxwdHIsIG1fc2VnbWVudEluZGV4ID0gMDsgfQogCiBwcml2YXRlOgogICAgIC8vIFVz
ZWQgaW4gVW5hbHRlcmVkUGFyc2luZy9Ob3JtYWxpemVkUGFyc2luZyBtb2Rlcy4KQEAgLTU5LDYg
KzU5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oZmxvYXQsIGZsb2F0LCBm
bG9hdCwgYm9vbCwgYm9vbCwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkg
b3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgUGF0aFRyYXZlcnNhbFN0
YXRlKiBtX3RyYXZlcnNhbFN0YXRlOworICAgIHVuc2lnbmVkIG1fc2VnbWVudEluZGV4OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMTgyNzU4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNyArMjg1LDcgQEAgYm9v
bCBnZXRTVkdQYXRoU2VnQXRMZW5ndGhGcm9tU1ZHUGF0aEJ5dAogICAgIGlmIChzdHJlYW0tPmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUGF0aFRyYXZlcnNhbFN0YXRl
IHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsU2VnbWVudEF0TGVu
Z3RoKTsKKyAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNh
bFN0YXRlOjpBY3Rpb246OlNlZ21lbnRBdExlbmd0aCk7CiAgICAgU1ZHUGF0aFRyYXZlcnNhbFN0
YXRlQnVpbGRlciogYnVpbGRlciA9IGdsb2JhbFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIo
dHJhdmVyc2FsU3RhdGUsIGxlbmd0aCk7CiAKICAgICBhdXRvIHNvdXJjZSA9IHN0ZDo6bWFrZV91
bmlxdWU8U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U+KHN0cmVhbSk7CkBAIC0zMDIsNyArMzAyLDcg
QEAgYm9vbCBnZXRUb3RhbExlbmd0aE9mU1ZHUGF0aEJ5dGVTdHJlYW0oUwogICAgIGlmIChzdHJl
YW0tPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUGF0aFRyYXZlcnNh
bFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsVG90YWxM
ZW5ndGgpOworICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVy
c2FsU3RhdGU6OkFjdGlvbjo6VG90YWxMZW5ndGgpOwogICAgIFNWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXIqIGJ1aWxkZXIgPSBnbG9iYWxTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyKHRy
YXZlcnNhbFN0YXRlLCAwKTsKIAogICAgIGF1dG8gc291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZT4oc3RyZWFtKTsKQEAgLTMxOSw3ICszMTksNyBAQCBib29s
IGdldFBvaW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtCiAgICAgaWYgKHN0cmVhbS0+aXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQYXRoVHJhdmVyc2FsU3RhdGUg
dHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxQb2ludEF0TGVuZ3Ro
KTsKKyAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0
YXRlOjpBY3Rpb246OlZlY3RvckF0TGVuZ3RoKTsKICAgICBTVkdQYXRoVHJhdmVyc2FsU3RhdGVC
dWlsZGVyKiBidWlsZGVyID0gZ2xvYmFsU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcih0cmF2
ZXJzYWxTdGF0ZSwgbGVuZ3RoKTsKIAogICAgIGF1dG8gc291cmNlID0gc3RkOjptYWtlX3VuaXF1
ZTxTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZT4oc3RyZWFtKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250756</attachid>
            <date>2015-04-14 16:50:55 -0700</date>
            <delta_ts>2015-04-14 17:01:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141570-20150414164958.patch</filename>
            <type>text/plain</type>
            <size>68046</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODI4MTQpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE1LTA0LTE0ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgdGV4
dFBhdGggbGF5b3V0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTcwLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEN1dCBkb3duIHRoZSB0aW1lIHNwZW50IGluIHRy
YXZlcnNpbmcgdGhlIHBhdGggZm9yIHRleHQgYnkgNTAlLiBJbnN0ZWFkCisgICAgICAgIG9mIHRy
YXZlcnNpbmcgdGhlIHBhdGggdHdpY2UgYXQgYSBjZXJ0YWluIGxlbmd0aDogb25lIHRpbWUgZm9y
IHRoZSBwb3NpdGlvbgorICAgICAgICBhbmQgdGhlIHNlY29uZCB0aW1lIGZvciB0aGUgYW5nbGUs
IHdlIGNhbiBtZXJnZSB0aGVzZSB0d28gcGFzc2VzIGludG8gb25lLgorCisgICAgICAgICogU1ZH
L1RleHRPblBhdGhTaW1wbGUuaHRtbDogQWRkZWQuCisgICAgICAgICogU1ZHL3Jlc291cmNlcy9U
ZXh0T25QYXRoU2ltcGxlLnN2ZzogQWRkZWQuCisKIDIwMTUtMDQtMTMgIFphbGFuIEJ1anRhcyAg
PHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhciB1cCB0aGUgdGVzdCBjb250ZW50IHdo
ZW4gdGVzdCBpcyBkb25lLgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9TVkcvVGV4dE9uUGF0aFNp
bXBsZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvU1ZHL1RleHRPblBhdGhT
aW1wbGUuaHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvU1ZHL1RleHRPblBh
dGhTaW1wbGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgUGVyZlRl
c3RSdW5uZXIubWVhc3VyZVBhZ2VMb2FkVGltZSh7cGF0aDogInJlc291cmNlcy9UZXh0T25QYXRo
U2ltcGxlLnN2ZyJ9KTsKKyAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL1NWRy9yZXNvdXJjZXMvVGV4dE9uUGF0aFNpbXBsZS5zdmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
UGVyZm9ybWFuY2VUZXN0cy9TVkcvcmVzb3VyY2VzL1RleHRPblBhdGhTaW1wbGUuc3ZnCShyZXZp
c2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9TVkcvcmVzb3VyY2VzL1RleHRPblBhdGhTaW1w
bGUuc3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKzxzdmcgd2lkdGg9IjEwMCUi
IGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDQwMDAgMjUwMCIKKyAgICAgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAKKyAgICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGxpbmsiPgorICA8ZGVmcz4KKyAgICA8cGF0aCBpZD0iU2ltcGxlUGF0aCIKKyAg
ICAgIGQ9Ik0gMTAwICAyMDAgCisgICAgICAgICBDIDIwMCAgMTAwIDMwMCAgICAwICA0MDAgIDEw
MAorICAgICAgICAgQyA1MDAgIDIwMCA2MDAgIDMwMCAgNzAwICAyMDAKKyAgICAgICAgIEMgODAw
ICAxMDAgOTAwICAgIDAgIDEwMDAgMTAwCisgICAgICAgICBDIDExMDAgMjAwIDEyMDAgMzAwICAx
MzAwIDIwMAorICAgICAgICAgQyAxNDAwIDEwMCAxNTAwICAgMCAgMTYwMCAxMDAKKyAgICAgICAg
IEMgMTcwMCAyMDAgMTgwMCAzMDAgIDE5MDAgMjAwIi8+CisgIDwvZGVmcz4KKworICA8ZyBpZD0i
VGV4dE9uUGF0aDI1Ij4KKyAgICA8ZyBpZD0iVGV4dE9uUGF0aDUiPgorICAgICAgPGcgaWQ9IlRl
eHRPblBhdGgiPgorICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNTaW1wbGVQYXRoIiBmaWxsPSJu
b25lIiBzdHJva2U9InJlZCIvPgorICAgICAgICA8dGV4dCBmb250LWZhbWlseT0iVmVyZGFuYSIg
Zm9udC1zaXplPSI0Mi41Ij4KKyAgICAgICAgICA8dGV4dFBhdGggeGxpbms6aHJlZj0iI1NpbXBs
ZVBhdGgiPgorICAgICAgICAgICAgV2UgZ28gdXAsIHRoZW4gd2UgZ28gZG93biwgdGhlbiB1cCBh
Z2FpbiwgdGhlbiB3ZSBnbyBkb3duLCB0aGVuIHdlIHVwIGFnYWluLCB0aGVuIHdlIGdvIGRvd24u
CisgICAgICAgICAgPC90ZXh0UGF0aD4KKyAgICAgICAgPC90ZXh0PgorICAgICAgPC9nPgorICAg
ICAgPHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw0
MCkiLz4KKyAgICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGgiIHRyYW5zZm9ybT0idHJh
bnNsYXRlKDAsODApIi8+CisgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoIiB0cmFu
c2Zvcm09InRyYW5zbGF0ZSgwLDEyMCkiLz4KKyAgICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRP
blBhdGgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMTYwKSIvPgorICAgIDwvZz4KKyAgCisgICAg
PHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0aDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjAw
KSIvPgorICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGg1IiB0cmFuc2Zvcm09InRyYW5z
bGF0ZSgwLDQwMCkiLz4KKyAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoNSIgdHJhbnNm
b3JtPSJ0cmFuc2xhdGUoMCw2MDApIi8+CisgICAgPHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0
aDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsODAwKSIvPgorICA8L2c+CisKKyAgPHVzZSB4bGlu
azpocmVmPSIjVGV4dE9uUGF0aDI1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDAwLDApIi8+Cisg
IDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGgyNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwx
MjAwKSIvPgorICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoMjUiIHRyYW5zZm9ybT0idHJh
bnNsYXRlKDIwMDAsMTIwMCkiLz4KKworICA8cmVjdCB4PSIxIiB5PSIxIiB3aWR0aD0iMzk5OSIg
aGVpZ2h0PSIyNDk5IiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIi
IC8+Cis8L3N2Zz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjgxNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5OCBAQAorMjAxNS0w
NC0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAg
ICAgIHRleHRQYXRoIGxheW91dCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTU3MC4KKworICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBUaGUgYm90dGxlbmVjayBvZiB0aGUg
dGV4dC1vbi1wYXRoIHBlcmZvcm1hbmNlIGlzIHRoZSBwb3NpdGlvbiBhbmQgYW5nbGUKKyAgICAg
ICAgY2FsY3VsYXRpb25zIGZvciBldmVyeSBzaW5nbGUgY2hhcmFjdGVyLiBJZiB0aGUgbnVtYmVy
IG9mIGNoYXJhY3RlcnMgaXMKKyAgICAgICAgJ24nIGFuZCB0aGUgbnVtYmVyIG9mIHBhdGggZWxl
bWVudHMgaXMgJ20nLCB0aGUgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NpbmcKKyAgICAgICAgdGhl
IHBhdGggZWxlbWVudHMgaXMgTygyIHggbiB4IG0pLiBXaGF0IG1ha2VzIGl0IHJlYWxseSB3b3Jz
ZSBpcywgZm9yIGV2ZXJ5CisgICAgICAgIGN1cnZlIHdlIGtlZXAgc3BsaXR0aW5nIHRoZSBjdXJ2
ZSB0aWxsIHRoZSBzcGxpdCBjdXJ2ZSBpcyBhbG1vc3QgYSBzdHJhaWdodAorICAgICAgICBsaW5l
LiBUaGUgY2hhbmdlcyB3ZSBuZWVkIHRvIGRvIGFyZToKKyAgICAgICAgMS4gTWVyZ2UgdGhlIHBv
c2l0aW9uIGFuZCB0aGUgYW5nbGUgdHJhdmVyc2FscyBpbiBvbmUgcGFzcyBzaW5jZSB0aGV5IGFy
ZQorICAgICAgICAgICByZXR1cm5pbmcgaW5mbyBmb3IgdGhlIHNhbWUgbGVuZ3RoIG9uIHRoZSBw
YXRoLiBUaGVyZSBpcyBhIGRlZ2VuZXJhdGUKKyAgICAgICAgICAgY2FzZSBmb3IgdGhlIHN0YXJ0
aW5nIHBvaW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIGFuZ2xlLiBUaGUgb3JpZ2luYWwKKyAgICAg
ICAgICAgY29kZSB3YXMgc29sdmluZyB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBhbiBlcHNpbG9u
IGluc3RlYWQgb2YgemVybyBidXQKKyAgICAgICAgICAgYmVjYXVzZSB0cmF2ZXJzaW5nIHRoZSBw
YXRoIGZvciBwb3NpdGlvbiBhbmQgYW5nbGUgYXJlIG5vdyBtZXJnZWQsIHdlCisgICAgICAgICAg
IHdpbGwgcGFzcyB6ZXJvIGZvciB0aGUgc3RhcnRpbmcgcG9pbnQgYXMgaXMuIEFsbCB3ZSBuZWVk
IGlzIHRvIG1vdmUgb25lCisgICAgICAgICAgIHN0ZXAgYWhlYWQgd2l0aG91dCBtb3ZpbmcgdGhl
IHBvc2l0aW9uLiBXZSBuZWVkIHRoZSBleHRyYSBzdGVwIGZvcndhcmQKKyAgICAgICAgICAgdG8g
Y2FsY3VsYXRlIHRoZSBzbG9wZSBvZiB0aGUgcGF0aCBhdCB0aGUgc3RhcnRpbmcgcG9pbnQuCisg
ICAgICAgIDIuIFdlIG5lZWQgdG8gYWRkIGEgbmV3IG1vZGUgdG8gdHJhdmVyc2luZyBhIHBhdGgu
IFRoZSBuZXcgbW9kZSB3aWxsIHRha2UKKyAgICAgICAgICAgYSB2ZWN0b3Igb2YgbGVuZ3RocyBh
bmQgcmV0dXJucyBhIHZlY3RvciBvZiBhcnJvdyB2ZWN0b3JzLiBFdmVyeSBhcnJvdworICAgICAg
ICAgICB2ZWN0b3IgcmVwcmVzZW50cyBhIHBvc2l0aW9uIGFuZCBhbiBhbmdsZSBvbiB0aGUgcGF0
aCBhdCBhIGNlcnRhaW4gbGVuZ3RoLgorICAgICAgICAgICBUaGlzIHJlcXVpcmVzIGNoYW5naW5n
IHRoZSBTVkdUZXh0TGF5b3V0RW5naW5lIHRvIGNhbGN1bGF0ZSB0aGUgbGVuZ3RocworICAgICAg
ICAgICBvZiB0aGUgY2hhcmFjdGVycyBvbiB0aGUgY3VydmUgZmlyc3QgYW5kIHRoZW4gcGFzc2lu
ZyBhbGwgb2YgdGhlbSB0byB0aGUKKyAgICAgICAgICAgcGF0aCB0cmF2ZXJzYWwgZnVuY3Rpb24u
IEluc3RlYWQgb2YgdHJhdmVyc2luZyB0aGUgcGF0aCBmb3IgZXZlcnkgbGVuZ3RoLAorICAgICAg
ICAgICB3ZSBhcmUgZ29pbmcgdG8gZ2V0IHRoZSByZXF1aXJlZCBwb2ludCBhbmQgYW5nbGUgZnJv
bSB0aGUgdmVjdG9yIG9mIGFycm93CisgICAgICAgICAgIHZlY3RvcnMuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoZSBmaXJzdCBmaXggb25seS4gVGhlIHNlY29uZCBvbmUg
d2lsbCByZXF1aXJlCisgICAgICAgIHJlZmFjdG9yaW5nIHRoZSBTVkdUZXh0TGF5b3V0RW5naW5l
IHNvIEkgYW0gZ29pbmcgdG8gYWRkcmVzcyBpdCBpbiBhCisgICAgICAgIGRpZmZlcmVudCBwYXRj
aC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbik6IEl0IGlzIGNsZWFuZXIgdG8gbW92ZSB0
aGUgZnVuY3Rpb24KKyAgICAgICAgb2YgdGhpcyBtZXRob2QgdG8gUGF0aFRyYXZlcnNhbFN0YXRl
Ojpwcm9jZXNzUGF0aEVsZW1lbnQoKS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRo
OjpsZW5ndGgpOiBVc2UgbmV3IGVudW0gQWN0aW9uIHZhbHVlIGFuZCBhY2Nlc3MgbWV0aG9kcy4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3Ro
KTogTmV3IGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlCisgICAgICAgIHRyYXZlcnNhbFN0YXRl
IGF0IGEgY2VydGFpbiBsZW5ndGggb24gYSBwYXRoLgorICAgICAgICAKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6OnBvaW50QXRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6bm9ybWFs
QW5nbGVBdExlbmd0aCk6IFVzZSB0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKCkgdG8gZ2V0CisgICAg
ICAgIHRoZSB0cmF2ZXJzYWxTdGF0ZSBhbmQgZnJvbSBpdCByZXR1cm4gZWl0aGVyIHRoZSBwb3Np
dGlvbiBvciB0aGUgYW5nbGUuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1BhdGguaDogRGVmaW5lIHRyYXZlcnNhbFN0YXRlQXRMZW5ndGgoKS4KKyAgICAgICAgCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmRpc3RhbmNlTGluZSk6IENvZGUgY2xlYW4gdXAuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6Y3VydmVMZW5ndGgpOiBNYWtlIHRoZSBzZXR0aW5nIG9mIG1fcHJldmlvdXMg
YW5kIG1fY3VycmVudCBoYXBwZW5zCisgICAgICAgIG9ubHkgaW4gdGhpcyBmdW5jdGlvbi4KKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OlBhdGhUcmF2ZXJz
YWxTdGF0ZSk6IEFkZCBhbiBvcHRpb25hbCBwYXJhbWV0ZXIKKyAgICAgICAgZm9yIHRoZSBkZXNp
cmVkIGxlbmd0aCBhbmQgbW92ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG90aGVyIG1lbWJl
cnMgdG8KKyAgICAgICAgdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpjbG9zZVN1YnBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjptb3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aFRyYXZlcnNhbFN0YXRlOjpsaW5lVG8pOiBBZGQgdGhlIGRpc3RhbmNlIHRvIHRoZSBtX3RvdGFs
TGVuZ3RoCisgICAgICAgIGluc3RlYWQgb2YgcmV0dXJuaW5nIGl0IHNpbmNlIHRoaXMgaXMgd2hh
dCBhbGwgdGhlIGNhbGxlcnMgd2VyZSBkb2luZy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGhUcmF2ZXJzYWxTdGF0ZTo6Y3ViaWNCZXppZXJUbyk6IEFkZCB0aGUgZGlzdGFuY2Ug
dG8gdGhlCisgICAgICAgIG1fdG90YWxMZW5ndGguIE1vdmUgdGhlIHNldHRpbmcgb2YgbV9wcmV2
aW91cyBhbmQgbV9jdXJyZW50IHRvIGN1cnZlTGVuZ3RoKCkuCisgICAgICAgIFJlbW92ZSB1bnVz
ZWQgbWVtYmVycyBtX2NvbnRyb2wxIGFuZCBtX2NvbnRyb2wyLgorCisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OnByb2Nlc3NTZWdtZW50KTogRGVsZXRlZC4gICAgICAgIAor
ICAgICAgICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpmaW5hbGl6ZUFwcGVuZFBhdGhF
bGVtZW50KTogQ3JlYXRlIGEgbmV3CisgICAgICAgIG5hbWUgZm9yIHRoZSBmdW5jdGlvbi4gSGFu
ZGxlIHRoZSBjYXNlIG9mIHRoZSBhbmdsZSBhdCB0aGUgc3RhcnRpbmcgcG9pbnQKKyAgICAgICAg
d2hlcmUgbV9kZXNpcmVkTGVuZ3RoIGlzIHNldCB0byB6ZXJvLiBUaGUgbmV3IGZsYWcgbV9pc1pl
cm9WZWN0b3Igd2lsbCBiZQorICAgICAgICBzZXQgdG8gbm90aWZ5IHRoZSBjYWxsZXIgdGhhdCB0
aGUgIG5leHQgaXRlcmF0aW9uIHdpbGwgYmUgdGhlIGxhc3Qgb25lIGFuZAorICAgICAgICBpdCBp
cyBvbmx5IG5lZWRlZCBmb3IgdGhlIGNhbGN1bGF0aW5nIHRoZSBhbmdsZSBvZiBhIHplcm8gdmVj
dG9yLiBtX2N1cnJlbnQKKyAgICAgICAgc2hvdWxkIG5vdCBjaGFuZ2UgYnkgdGhpcyBsYXN0IGl0
ZXJhdGlvbi4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6
OmFwcGVuZFBhdGhFbGVtZW50KTogVGhpcyBjb2RlIGlzIG1vdmVkIGZyb20KKyAgICAgICAgcGF0
aExlbmd0aEFwcGxpZXJGdW5jdGlvbigpLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1BhdGhFbGVtZW50KTogVGhpcyBmdW5jdGlvbiBpcyB1
c2VkCisgICAgICAgIGJ5IHRoZSBjbGFzcyBQYXRoLiBJdCBpcyBhIHdyYXBwZXIgZm9yIGFwcGVu
ZFBhdGhFbGVtZW50KCkuIElmIG1faXNaZXJvVmVjdG9yCisgICAgICAgIGlzIHNldCB3ZSBhcHBl
bmQgdGhlIG5ldyBlbGVtZW50IHRvIGEgY29weSBmb3IgdGhlIFBhdGhUcmF2ZXJzYWxTdGF0ZSBq
dXN0CisgICAgICAgIHRvIGdldCB0aGUgYW5nbGUgZm9yIHRoZSB6ZXJvIHZlY3Rvci4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oOiBDaGFuZ2UgdGhl
IGVudW0gdmFsdWVzIHRvIG5vdAorICAgICAgICBub3QgaW5jbHVkZSB0aGUgY2xhc3Mgb3IgdGhl
IGVudW0gY2xhc3MuIE1ha2UgdGhlIGRhdGEgbWVtYmVycyBwcml2YXRlIGFuZAorICAgICAgICBl
eHBvc2UgdGhlIG5lZWRlZCBvbmVzIHRocm91Z2ggYWNjZXNzIG1ldGhvZHMuIE1ha2UgYWxsIHRo
ZSBpbnRlcm5hbCBtZXRob2RzCisgICAgICAgIHRvIGJlIHByaXZhdGUuCisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpwcm9jZXNzUGF0aEVsZW1lbnQpOiAg
QW5vdGhlciB3cmFwcGVyIGZvcgorICAgICAgICBhcHBlbmRQYXRoRWxlbWVudCgpIHdoaWNoIGlz
IHVzZWQgYnkgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci4KKyAgICAgICAgCisgICAgICAg
IChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OmFjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OnNldEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
VHJhdmVyc2FsU3RhdGU6OmRlc2lyZWRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aFRy
YXZlcnNhbFN0YXRlOjpzZXREZXNpcmVkTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhU
cmF2ZXJzYWxTdGF0ZTo6c3VjY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2Fs
U3RhdGU6OnRvdGFsTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhUcmF2ZXJzYWxTdGF0
ZTo6Y3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6Om5vcm1h
bEFuZ2xlKTogTmV3IGFjY2VzcyBtZXRob2RzIHdoaWNoIGFyZSBub3cKKyAgICAgICAgbmVlZGVk
IGFmdGVyIG1ha2luZyB0aGUgZGF0YSBtZW1iZXJzIHByaXZhdGUuCisgICAgICAgIAorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdSb290SW5saW5lQm94OjpsYXlvdXRDaGFyYWN0ZXJzSW5UZXh0Qm94ZXMpOiBNYWtlIHRo
ZSBjYXN0aW5nCisgICAgICAgIG9mIHRoZSByZW5kZXJlciBvbiB0aGUgY2FsbGVyIHNpZGUuCisg
ICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKTogVGhlIGNvbnN0cnVjdG9y
IHNob3VsZCBhcHBlbmQgdGhlCisgICAgICAgIGVsZW1lbnRzIG9mIG1fYm94ZXMgaW5zdGVhZCBv
ZiBtYWtpbmcgdGhpcyBmcm9tIG91dHNpZGUgdGhlIGNsYXNzLgorICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRDaHVuazo6dG90YWxDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRDaHVuazo6dG90YWxMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4
dENodW5rOjpjYWxjdWxhdGVMZW5ndGgpOiBEZWxldGVkLgorICAgICAgICBSZXBsYWNlIGNhbGN1
bGF0ZUxlbmd0aCgpIGJ5IHRvdGFsQ2hhcmFjdGVycygpIGFuZCB0b3RhbExlbmd0aCgpIHRvIG1h
a2UKKyAgICAgICAgdGhlIGludGVyZmFjZSBjbGVhbmVyLgorICAgICAgICAKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRDaHVuazo6dG90YWxBbmNob3JTaGlmdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bms6OmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdCk6IERlbGV0ZWQuCisgICAg
ICAgIFJlbmFtZSB0aGUgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bms6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bms6
OnByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVGV4dENodW5rOjpidWlsZEJveFRyYW5zZm9ybWF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bms6OmJveFNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dENodW5rOjpwcm9jZXNzVGV4dEFuY2hvckNvcnJlY3Rpb24pOgorICAg
ICAgICBNb3ZlIHRoZSBjaHVuayBsYXlvdXQgY29kZSBmcm9tIFNWR1RleHRDaHVua0J1aWxkZXI6
OmxheW91dFRleHRDaHVua3MoKQorICAgICAgICB0byB0aGUgU1ZHVGV4dENodW5rOjpsYXlvdXQo
KS4gTW92ZSBhbGwgdGhlIGhlbHBlciBmdW5jdGlvbnMgYXMgd2VsbC4KKyAgICAgICAgCisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRDaHVuazo6aGFzVGV4dEFuY2hvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1
bms6OmJveGVzKTogRGVsZXRlZC4KKyAgICAgICAgQWRkIHRoZSBuZXcgbWV0aG9kcyBhbmQgY2hh
bmdlIG1vc3Qgb2YgdGhlIHB1YmxpYyBtZXRob2RzIHRvIGJlIHByaXZhdGUuCisgICAgICAgIAor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtCdWlsZGVyOjp0b3RhbENoYXJhY3RlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6dG90YWxMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6dG90YWxBbmNob3JTaGlmdCk6IFRoaXMgY29k
ZSBpcyBtb3ZlZCBmcm9tCisgICAgICAgIFNWR1RleHRMYXlvdXRFbmdpbmUuIEl0IHNjYW5zIHRo
ZSBib3hlcyBzdG9yZWQgaW4gdGhlIFNWR1RleHRDaHVua0J1aWxkZXIKKyAgICAgICAgYW5kIHN1
bXMgdXAgdGhlIHRvdGFsIHZhbHVlcy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpTVkdU
ZXh0Q2h1bmtCdWlsZGVyOjp0cmFuc2Zvcm1hdGlvbkZvclRleHRCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6YnVpbGRUZXh0Q2h1bmtzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRDaHVua0J1aWxkZXI6OmxheW91dFRleHRDaHVua3MpOiBDb2RlIGNsZWFu
IHVwLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVua0J1aWxkZXI6OmFk
ZFRleHRDaHVuayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtCdWls
ZGVyOjpwcm9jZXNzVGV4dENodW5rKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rl
eHRDaHVua0J1aWxkZXI6OnByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vzc1RleHRB
bmNob3JDb3JyZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVu
a0J1aWxkZXI6OmJ1aWxkU3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybSk6IERlbGV0ZWQuCisgICAg
ICAgIFRoaXMgY29kZSBub3cgbGl2ZXMgaW4gU1ZHVGV4dENodW5rLgorICAgICAgICAKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuaDogQWRkIG5ldyBtZXRob2Rz
IGZvciBjb2RlIHdoaWNoIHdhcworICAgICAgICBtb3ZlZCBmcm9tIFNWR1RleHRMYXlvdXRFbmdp
bmUgYW5kIHJlbW92ZSBtZXRob2RzIGZvciBjb2RlIHdoaWNoIHdhcyByZW1vdmVkCisgICAgICAg
IHRvIFNWR1RleHRDaHVuay4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdp
bmU6OmJlZ2luVGV4dFBhdGhMYXlvdXQpOiBVc2UgdGhlIHN1bSB1cCBtZXRob2RzCisgICAgICAg
IGZyb20gU1ZHVGV4dENodW5rQnVpbGRlciBpbnN0ZWFkIG9mIGxvb3BpbmcgdGhyb3VnaCB0aGUg
Y2h1bmtzLiBBbHNvIGdldCBhCisgICAgICAgIGNsZWFuIG9yZGVyIGZvciBkZWZpbmluZyB2YXJp
YWJsZXMgYW5kIGRvaW5nIHRoZSBjYWxjdWxhdGlvbnMuCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dExheW91dEVuZ2luZTo6ZmluYWxpemVUcmFuc2Zvcm1NYXRyaWNlcyk6IENv
ZGUgY2xlYW4gdXAuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEVu
Z2luZTo6bGF5b3V0VGV4dE9uTGluZU9yUGF0aCk6IERvIGEgc2luZ2xlIHBhdGgKKyAgICAgICAg
dHJhdmVyc2FsIHRvIGdldCB0aGUgcG9zaXRpb24gYW5kIHRoZSBhbmdsZSBmb3IgYSBsZW5ndGgg
b24gYSBwYXRoLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRFbmdpbmUuaDogRm9yY2UgcGFzc2luZyBhIFJlbmRlclNWR1RleHRQYXRoJgorICAgICAgICB0
byBiZWdpblRleHRQYXRoTGF5b3V0KCkgaW5zdGVhZCBvZiBSZW5kZXJPYmplY3QqIGFuZCB0aGVu
IGNhc3RpbmcgaXQuCisgICAgICAgIAorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlTW90aW9uRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YnVp
bGRUcmFuc2Zvcm1Gb3JQcm9ncmVzcyk6IERvIGEgc2luZ2xlCisgICAgICAgIHBhdGggdHJhdmVy
c2FsIHRvIGdldCB0aGUgcG9zaXRpb24gYW5kIHRoZSBhbmdsZSBhdCBhIGxlbmd0aCBvbiBhIHBh
dGguCisgICAgICAgIAorICAgICAgICAqIHN2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OlNW
R1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlcjo6bW92ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhU
cmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmxpbmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
VHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y2xvc2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnNldERlc2lyZWRMZW5ndGgpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y29udGludWVDb25z
dW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6
dG90YWxMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVp
bGRlcjo6Y3VycmVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxT
dGF0ZUJ1aWxkZXI6OmluY3JlbWVudFBhdGhTZWdtZW50Q291bnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6cGF0aFNlZ21lbnRJbmRl
eCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnBhdGhT
ZWdtZW50SW5kZXgpOgorICAgICAgICBDb2RlIGNsZWFuIHVwLgorICAgICAgICAKKyAgICAgICAg
KiBzdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTVkdQYXRo
U2VnQXRMZW5ndGhGcm9tU1ZHUGF0aEJ5dGVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
VG90YWxMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBv
aW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKTogVXNlIG5ldyBUcmF2ZXJzYWxTdGF0ZTo6
QWN0aW9uCisgICAgICAgIGVudW0gdmFsdWVzLgorCiAyMDE1LTA0LTE0ICBSb2dlciBGb25nICA8
cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gVGltZSBudW1iZXJz
IG9uIG1lZGlhIGNvbnRyb2xzIG1vdmUgYXMgdGhleSB1cGRhdGUgb24gT1NYLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAJKHJldmlzaW9uIDE4Mjc1OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw1NCArNDIsMzIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIHZvaWQg
cGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbih2b2lkKiBpbmZvLCBjb25zdCBQYXRoRWxlbWVudCog
ZWxlbWVudCkKIHsKICAgICBQYXRoVHJhdmVyc2FsU3RhdGUmIHRyYXZlcnNhbFN0YXRlID0gKnN0
YXRpY19jYXN0PFBhdGhUcmF2ZXJzYWxTdGF0ZSo+KGluZm8pOwotICAgIGlmICh0cmF2ZXJzYWxT
dGF0ZS5tX3N1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFBvaW50KiBwb2ludHMg
PSBlbGVtZW50LT5wb2ludHM7Ci0gICAgZmxvYXQgc2VnbWVudExlbmd0aCA9IDA7Ci0gICAgc3dp
dGNoIChlbGVtZW50LT50eXBlKSB7Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1lbnRNb3ZlVG9Qb2lu
dDoKLSAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5tb3ZlVG8ocG9p
bnRzWzBdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRk
TGluZVRvUG9pbnQ6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUu
bGluZVRvKHBvaW50c1swXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQYXRo
RWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0g
dHJhdmVyc2FsU3RhdGUucXVhZHJhdGljQmV6aWVyVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9p
bnQ6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUuY3ViaWNCZXpp
ZXJUbyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOgotICAgICAgICAgICAgc2Vn
bWVudExlbmd0aCA9IHRyYXZlcnNhbFN0YXRlLmNsb3NlU3VicGF0aCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIHRyYXZlcnNhbFN0YXRlLm1fdG90YWxMZW5ndGggKz0gc2VnbWVu
dExlbmd0aDsgCi0gICAgdHJhdmVyc2FsU3RhdGUucHJvY2Vzc1NlZ21lbnQoKTsKKyAgICB0cmF2
ZXJzYWxTdGF0ZS5wcm9jZXNzUGF0aEVsZW1lbnQoZWxlbWVudCk7CiB9CiAKIGZsb2F0IFBhdGg6
Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRl
KFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsVG90YWxMZW5ndGgpOworICAgIFBhdGhUcmF2
ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGU6OkFjdGlvbjo6VG90
YWxMZW5ndGgpOwogICAgIGFwcGx5KCZ0cmF2ZXJzYWxTdGF0ZSwgcGF0aExlbmd0aEFwcGxpZXJG
dW5jdGlvbik7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRlLm1fdG90YWxMZW5ndGg7CisgICAg
cmV0dXJuIHRyYXZlcnNhbFN0YXRlLnRvdGFsTGVuZ3RoKCk7CiB9CiAKLUZsb2F0UG9pbnQgUGF0
aDo6cG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAorUGF0aFRyYXZl
cnNhbFN0YXRlIFBhdGg6OnRyYXZlcnNhbFN0YXRlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29s
JiBzdWNjZXNzKSBjb25zdAogewotICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0
ZShQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNhbFBvaW50QXRMZW5ndGgpOwotICAgIHRyYXZl
cnNhbFN0YXRlLm1fZGVzaXJlZExlbmd0aCA9IGxlbmd0aDsKKyAgICBQYXRoVHJhdmVyc2FsU3Rh
dGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpBY3Rpb246OlZlY3RvckF0TGVu
Z3RoLCBsZW5ndGgpOwogICAgIGFwcGx5KCZ0cmF2ZXJzYWxTdGF0ZSwgcGF0aExlbmd0aEFwcGxp
ZXJGdW5jdGlvbik7Ci0gICAgb2sgPSB0cmF2ZXJzYWxTdGF0ZS5tX3N1Y2Nlc3M7Ci0gICAgcmV0
dXJuIHRyYXZlcnNhbFN0YXRlLm1fY3VycmVudDsKKyAgICBzdWNjZXNzID0gdHJhdmVyc2FsU3Rh
dGUuc3VjY2VzcygpOworICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0ZTsKIH0KIAotZmxvYXQgUGF0
aDo6bm9ybWFsQW5nbGVBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAorRmxv
YXRQb2ludCBQYXRoOjpwb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgc3VjY2Vzcykg
Y29uc3QKIHsKLSAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZl
cnNhbFN0YXRlOjpUcmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoKTsKLSAgICB0cmF2ZXJzYWxT
dGF0ZS5tX2Rlc2lyZWRMZW5ndGggPSBsZW5ndGggPyBsZW5ndGggOiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6ZXBzaWxvbigpOwotICAgIGFwcGx5KCZ0cmF2ZXJzYWxTdGF0ZSwgcGF0aExl
bmd0aEFwcGxpZXJGdW5jdGlvbik7Ci0gICAgb2sgPSB0cmF2ZXJzYWxTdGF0ZS5tX3N1Y2Nlc3M7
Ci0gICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRlLm1fbm9ybWFsQW5nbGU7CisgICAgcmV0dXJuIHRy
YXZlcnNhbFN0YXRlQXRMZW5ndGgobGVuZ3RoLCBzdWNjZXNzKS5jdXJyZW50KCk7Cit9CisKK2Zs
b2F0IFBhdGg6Om5vcm1hbEFuZ2xlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBzdWNjZXNz
KSBjb25zdAoreworICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKGxlbmd0aCwgc3Vj
Y2Vzcykubm9ybWFsQW5nbGUoKTsKIH0KIAogdm9pZCBQYXRoOjphZGRSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSwgUm91bmRl
ZFJlY3RTdHJhdGVneSBzdHJhdGVneSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXRoLmgJKHJldmlzaW9uIDE4Mjc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKICAgICBjbGFzcyBGbG9h
dFNpemU7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OworICAgIGNsYXNzIFBhdGhUcmF2ZXJz
YWxTdGF0ZTsKICAgICBjbGFzcyBSb3VuZGVkUmVjdDsKICAgICBjbGFzcyBTdHJva2VTdHlsZUFw
cGxpZXI7CiAKQEAgLTEwMCwxMCArMTAxLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwogICAgICAgICBGbG9hdFJlY3QgZmFz
dEJvdW5kaW5nUmVjdCgpIGNvbnN0OwogICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdS
ZWN0KFN0cm9rZVN0eWxlQXBwbGllciogPSAwKSBjb25zdDsKLSAgICAgICAgCisKICAgICAgICAg
ZmxvYXQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnRBdExlbmd0aChm
bG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKLSAgICAgICAgZmxvYXQgbm9ybWFsQW5nbGVB
dExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKKyAgICAgICAgUGF0aFRyYXZl
cnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBzdWNj
ZXNzKSBjb25zdDsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0
aCwgYm9vbCYgc3VjY2VzcykgY29uc3Q7CisgICAgICAgIGZsb2F0IG5vcm1hbEFuZ2xlQXRMZW5n
dGgoZmxvYXQgbGVuZ3RoLCBib29sJiBzdWNjZXNzKSBjb25zdDsKIAogICAgICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fcGF0aDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aFRyYXZlcnNhbFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCShyZXZpc2lvbiAxODI3NTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTM0LDcgKzM1LDkgQEAgc3RhdGljIGlubGluZSBGbG9hdFBvaW50IG1pZFBvaW50KGNvbnN0IAog
CiBzdGF0aWMgaW5saW5lIGZsb2F0IGRpc3RhbmNlTGluZShjb25zdCBGbG9hdFBvaW50JiBzdGFy
dCwgY29uc3QgRmxvYXRQb2ludCYgZW5kKQogewotICAgIHJldHVybiBzcXJ0ZigoZW5kLngoKSAt
IHN0YXJ0LngoKSkgKiAoZW5kLngoKSAtIHN0YXJ0LngoKSkgKyAoZW5kLnkoKSAtIHN0YXJ0Lnko
KSkgKiAoZW5kLnkoKSAtIHN0YXJ0LnkoKSkpOworICAgIGZsb2F0IGR4ID0gZW5kLngoKSAtIHN0
YXJ0LngoKTsKKyAgICBmbG9hdCBkeSA9IGVuZC55KCkgLSBzdGFydC55KCk7CisgICAgcmV0dXJu
IHNxcnRmKGR4ICogZHggKyBkeSAqIGR5KTsKIH0KIAogc3RydWN0IFF1YWRyYXRpY0JlemllciB7
CkBAIC0xMTQsMTEwICsxMTcsMTQ5IEBAIHN0cnVjdCBDdWJpY0JlemllciB7CiAvLyBBbm90aGVy
IGNoZWNrIHdoaWNoIGlzIHBvc3NpYmxlIHVwLWZyb250ICh0byBzZW5kIHVzIGRvd24gdGhlIGZh
c3QgcGF0aCkgd291bGQgYmUgdG8gY2hlY2sgaWYKIC8vIGFwcHJveGltYXRlRGlzdGFuY2UoKSAr
IGN1cnJlbnQgdG90YWwgZGlzdGFuY2UgPiBkZXNpcmVkIGRpc3RhbmNlCiB0ZW1wbGF0ZTxjbGFz
cyBDdXJ2ZVR5cGU+Ci1zdGF0aWMgZmxvYXQgY3VydmVMZW5ndGgoUGF0aFRyYXZlcnNhbFN0YXRl
JiB0cmF2ZXJzYWxTdGF0ZSwgQ3VydmVUeXBlIGN1cnZlKQorc3RhdGljIGZsb2F0IGN1cnZlTGVu
Z3RoKGNvbnN0IFBhdGhUcmF2ZXJzYWxTdGF0ZSYgdHJhdmVyc2FsU3RhdGUsIGNvbnN0IEN1cnZl
VHlwZSYgb3JpZ2luYWxDdXJ2ZSwgRmxvYXRQb2ludCYgcHJldmlvdXMsIEZsb2F0UG9pbnQmIGN1
cnJlbnQpCiB7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGN1cnZlU3RhY2tEZXB0aExpbWl0
ID0gMjA7Ci0KLSAgICBWZWN0b3I8Q3VydmVUeXBlPiBjdXJ2ZVN0YWNrOwotICAgIGN1cnZlU3Rh
Y2suYXBwZW5kKGN1cnZlKTsKLQorICAgIEN1cnZlVHlwZSBjdXJ2ZSA9IG9yaWdpbmFsQ3VydmU7
CisgICAgVmVjdG9yPEN1cnZlVHlwZSwgY3VydmVTdGFja0RlcHRoTGltaXQ+IGN1cnZlU3RhY2s7
CiAgICAgZmxvYXQgdG90YWxMZW5ndGggPSAwOwotICAgIGRvIHsKKworICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9IGN1cnZlLmFwcHJveGltYXRlRGlzdGFuY2UoKTsK
LSAgICAgICAgaWYgKChsZW5ndGggLSBkaXN0YW5jZUxpbmUoY3VydmUuc3RhcnQsIGN1cnZlLmVu
ZCkpID4ga1BhdGhTZWdtZW50TGVuZ3RoVG9sZXJhbmNlICYmIGN1cnZlU3RhY2suc2l6ZSgpIDw9
IGN1cnZlU3RhY2tEZXB0aExpbWl0KSB7CisKKyAgICAgICAgaWYgKChsZW5ndGggLSBkaXN0YW5j
ZUxpbmUoY3VydmUuc3RhcnQsIGN1cnZlLmVuZCkpID4ga1BhdGhTZWdtZW50TGVuZ3RoVG9sZXJh
bmNlICYmIGN1cnZlU3RhY2suc2l6ZSgpIDwgY3VydmVTdGFja0RlcHRoTGltaXQpIHsKICAgICAg
ICAgICAgIEN1cnZlVHlwZSBsZWZ0Q3VydmU7CiAgICAgICAgICAgICBDdXJ2ZVR5cGUgcmlnaHRD
dXJ2ZTsKICAgICAgICAgICAgIGN1cnZlLnNwbGl0KGxlZnRDdXJ2ZSwgcmlnaHRDdXJ2ZSk7CiAg
ICAgICAgICAgICBjdXJ2ZSA9IGxlZnRDdXJ2ZTsKICAgICAgICAgICAgIGN1cnZlU3RhY2suYXBw
ZW5kKHJpZ2h0Q3VydmUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdG90YWxMZW5n
dGggKz0gbGVuZ3RoOwotICAgICAgICAgICAgaWYgKHRyYXZlcnNhbFN0YXRlLm1fYWN0aW9uID09
IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsUG9pbnRBdExlbmd0aAotICAgICAgICAgICAg
IHx8IHRyYXZlcnNhbFN0YXRlLm1fYWN0aW9uID09IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVy
c2FsTm9ybWFsQW5nbGVBdExlbmd0aCkgewotICAgICAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRl
Lm1fcHJldmlvdXMgPSBjdXJ2ZS5zdGFydDsKLSAgICAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0
ZS5tX2N1cnJlbnQgPSBjdXJ2ZS5lbmQ7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYXZlcnNhbFN0
YXRlLm1fdG90YWxMZW5ndGggKyB0b3RhbExlbmd0aCA+IHRyYXZlcnNhbFN0YXRlLm1fZGVzaXJl
ZExlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsTGVuZ3RoOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY3VydmUgPSBjdXJ2ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAg
ICAgIGN1cnZlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KLSAgICB9IHdoaWxlICghY3VydmVTdGFjay5pc0VtcHR5KCkpOwotICAgIAorCisgICAg
ICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aDsKKyAgICAgICAgaWYgKHRyYXZlcnNhbFN0YXRlLmFj
dGlvbigpID09IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6QWN0aW9uOjpWZWN0b3JBdExlbmd0aCkgewor
ICAgICAgICAgICAgcHJldmlvdXMgPSBjdXJ2ZS5zdGFydDsKKyAgICAgICAgICAgIGN1cnJlbnQg
PSBjdXJ2ZS5lbmQ7CisgICAgICAgICAgICBpZiAodHJhdmVyc2FsU3RhdGUudG90YWxMZW5ndGgo
KSArIHRvdGFsTGVuZ3RoID4gdHJhdmVyc2FsU3RhdGUuZGVzaXJlZExlbmd0aCgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1cnZlU3RhY2suaXNF
bXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY3VydmUgPSBjdXJ2ZVN0YWNr
Lmxhc3QoKTsKKyAgICAgICAgY3VydmVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgfQorCisgICAg
aWYgKHRyYXZlcnNhbFN0YXRlLmFjdGlvbigpICE9IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6QWN0aW9u
OjpWZWN0b3JBdExlbmd0aCkgeworICAgICAgICBBU1NFUlQoY3VydmUuZW5kID09IG9yaWdpbmFs
Q3VydmUuZW5kKTsKKyAgICAgICAgcHJldmlvdXMgPSBjdXJ2ZS5zdGFydDsKKyAgICAgICAgY3Vy
cmVudCA9IGN1cnZlLmVuZDsKKyAgICB9CisKICAgICByZXR1cm4gdG90YWxMZW5ndGg7CiB9CiAK
LVBhdGhUcmF2ZXJzYWxTdGF0ZTo6UGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxBY3Rp
b24gYWN0aW9uKQorUGF0aFRyYXZlcnNhbFN0YXRlOjpQYXRoVHJhdmVyc2FsU3RhdGUoQWN0aW9u
IGFjdGlvbiwgZmxvYXQgZGVzaXJlZExlbmd0aCkKICAgICA6IG1fYWN0aW9uKGFjdGlvbikKLSAg
ICAsIG1fc3VjY2VzcyhmYWxzZSkKLSAgICAsIG1fdG90YWxMZW5ndGgoMCkKLSAgICAsIG1fc2Vn
bWVudEluZGV4KDApCi0gICAgLCBtX2Rlc2lyZWRMZW5ndGgoMCkKLSAgICAsIG1fbm9ybWFsQW5n
bGUoMCkKKyAgICAsIG1fZGVzaXJlZExlbmd0aChkZXNpcmVkTGVuZ3RoKQogeworICAgIEFTU0VS
VChhY3Rpb24gIT0gQWN0aW9uOjpUb3RhbExlbmd0aCB8fCAhZGVzaXJlZExlbmd0aCk7CiB9CiAK
LWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6Y2xvc2VTdWJwYXRoKCkKK3ZvaWQgUGF0aFRyYXZl
cnNhbFN0YXRlOjpjbG9zZVN1YnBhdGgoKQogewotICAgIGZsb2F0IGRpc3RhbmNlID0gZGlzdGFu
Y2VMaW5lKG1fY3VycmVudCwgbV9zdGFydCk7Ci0gICAgbV9jdXJyZW50ID0gbV9jb250cm9sMSA9
IG1fY29udHJvbDIgPSBtX3N0YXJ0OwotICAgIHJldHVybiBkaXN0YW5jZTsKKyAgICBtX3RvdGFs
TGVuZ3RoICs9IGRpc3RhbmNlTGluZShtX2N1cnJlbnQsIG1fc3RhcnQpOworICAgIG1fY3VycmVu
dCA9IG1fc3RhcnQ7CiB9CiAKLWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6bW92ZVRvKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBQYXRoVHJhdmVyc2FsU3RhdGU6Om1vdmVUbyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkKIHsKLSAgICBtX2N1cnJlbnQgPSBtX3N0YXJ0ID0gbV9jb250
cm9sMSA9IG1fY29udHJvbDIgPSBwb2ludDsKLSAgICByZXR1cm4gMDsKKyAgICBtX3ByZXZpb3Vz
ID0gbV9jdXJyZW50ID0gbV9zdGFydCA9IHBvaW50OwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2Fs
U3RhdGU6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aFRyYXZlcnNh
bFN0YXRlOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgZmxvYXQgZGlz
dGFuY2UgPSBkaXN0YW5jZUxpbmUobV9jdXJyZW50LCBwb2ludCk7Ci0gICAgbV9jdXJyZW50ID0g
bV9jb250cm9sMSA9IG1fY29udHJvbDIgPSBwb2ludDsKLSAgICByZXR1cm4gZGlzdGFuY2U7Cisg
ICAgbV90b3RhbExlbmd0aCArPSBkaXN0YW5jZUxpbmUobV9jdXJyZW50LCBwb2ludCk7CisgICAg
bV9jdXJyZW50ID0gcG9pbnQ7CiB9CiAKLWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cXVhZHJh
dGljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbCwgY29uc3QgRmxvYXRQb2lu
dCYgbmV3RW5kKQordm9pZCBQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKGNv
bnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCkKIHsK
LSAgICBmbG9hdCBkaXN0YW5jZSA9IGN1cnZlTGVuZ3RoPFF1YWRyYXRpY0Jlemllcj4oKnRoaXMs
IFF1YWRyYXRpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRyb2wsIG5ld0VuZCkpOwotCi0gICAg
bV9jb250cm9sMSA9IG5ld0NvbnRyb2w7Ci0gICAgbV9jb250cm9sMiA9IG5ld0VuZDsKLQotICAg
IGlmIChtX2FjdGlvbiAhPSBUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoICYmIG1fYWN0aW9uICE9IFRy
YXZlcnNhbE5vcm1hbEFuZ2xlQXRMZW5ndGgpIAotICAgICAgICBtX2N1cnJlbnQgPSBuZXdFbmQ7
CisgICAgbV90b3RhbExlbmd0aCArPSBjdXJ2ZUxlbmd0aDxRdWFkcmF0aWNCZXppZXI+KCp0aGlz
LCBRdWFkcmF0aWNCZXppZXIobV9jdXJyZW50LCBuZXdDb250cm9sLCBuZXdFbmQpLCBtX3ByZXZp
b3VzLCBtX2N1cnJlbnQpOworfQogCi0gICAgcmV0dXJuIGRpc3RhbmNlOwordm9pZCBQYXRoVHJh
dmVyc2FsU3RhdGU6OmN1YmljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDEs
IGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wyLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQp
Cit7CisgICAgbV90b3RhbExlbmd0aCArPSBjdXJ2ZUxlbmd0aDxDdWJpY0Jlemllcj4oKnRoaXMs
IEN1YmljQmV6aWVyKG1fY3VycmVudCwgbmV3Q29udHJvbDEsIG5ld0NvbnRyb2wyLCBuZXdFbmQp
LCBtX3ByZXZpb3VzLCBtX2N1cnJlbnQpOwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6
OmN1YmljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDEsIGNvbnN0IEZsb2F0
UG9pbnQmIG5ld0NvbnRyb2wyLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQpCitib29sIFBhdGhU
cmF2ZXJzYWxTdGF0ZTo6ZmluYWxpemVBcHBlbmRQYXRoRWxlbWVudCgpCiB7Ci0gICAgZmxvYXQg
ZGlzdGFuY2UgPSBjdXJ2ZUxlbmd0aDxDdWJpY0Jlemllcj4oKnRoaXMsIEN1YmljQmV6aWVyKG1f
Y3VycmVudCwgbmV3Q29udHJvbDEsIG5ld0NvbnRyb2wyLCBuZXdFbmQpKTsKKyAgICBpZiAobV9h
Y3Rpb24gPT0gQWN0aW9uOjpUb3RhbExlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgbV9jb250cm9sMSA9IG5ld0VuZDsKLSAgICBtX2NvbnRyb2wyID0gbmV3Q29udHJvbDI7Ci0g
Ci0gICAgaWYgKG1fYWN0aW9uICE9IFRyYXZlcnNhbFBvaW50QXRMZW5ndGggJiYgbV9hY3Rpb24g
IT0gVHJhdmVyc2FsTm9ybWFsQW5nbGVBdExlbmd0aCkgCi0gICAgICAgIG1fY3VycmVudCA9IG5l
d0VuZDsKKyAgICBpZiAobV9hY3Rpb24gPT0gQWN0aW9uOjpTZWdtZW50QXRMZW5ndGgpIHsKKyAg
ICAgICAgaWYgKG1fdG90YWxMZW5ndGggPj0gbV9kZXNpcmVkTGVuZ3RoKQorICAgICAgICAgICAg
bV9zdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1fc3VjY2VzczsKKyAgICB9CiAKLSAg
ICByZXR1cm4gZGlzdGFuY2U7Ci19CisgICAgQVNTRVJUKG1fYWN0aW9uID09IEFjdGlvbjo6VmVj
dG9yQXRMZW5ndGgpOwogCi12b2lkIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1NlZ21lbnQo
KQotewotICAgIGlmIChtX2FjdGlvbiA9PSBUcmF2ZXJzYWxTZWdtZW50QXRMZW5ndGggJiYgbV90
b3RhbExlbmd0aCA+PSBtX2Rlc2lyZWRMZW5ndGgpCi0gICAgICAgIG1fc3VjY2VzcyA9IHRydWU7
Ci0gICAgICAgIAotICAgIGlmICgobV9hY3Rpb24gPT0gVHJhdmVyc2FsUG9pbnRBdExlbmd0aCB8
fCBtX2FjdGlvbiA9PSBUcmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoKSAmJiBtX3RvdGFsTGVu
Z3RoID49IG1fZGVzaXJlZExlbmd0aCkgeworICAgIGlmIChtX3RvdGFsTGVuZ3RoID49IG1fZGVz
aXJlZExlbmd0aCkgewogICAgICAgICBmbG9hdCBzbG9wZSA9IEZsb2F0UG9pbnQobV9jdXJyZW50
IC0gbV9wcmV2aW91cykuc2xvcGVBbmdsZVJhZGlhbnMoKTsKLSAgICAgICAgaWYgKG1fYWN0aW9u
ID09IFRyYXZlcnNhbFBvaW50QXRMZW5ndGgpIHsKLSAgICAgICAgICAgIGZsb2F0IG9mZnNldCA9
IG1fZGVzaXJlZExlbmd0aCAtIG1fdG90YWxMZW5ndGg7Ci0gICAgICAgICAgICBtX2N1cnJlbnQu
bW92ZShvZmZzZXQgKiBjb3NmKHNsb3BlKSwgb2Zmc2V0ICogc2luZihzbG9wZSkpOwotICAgICAg
ICB9IGVsc2UKKyAgICAgICAgZmxvYXQgb2Zmc2V0ID0gbV9kZXNpcmVkTGVuZ3RoIC0gbV90b3Rh
bExlbmd0aDsKKyAgICAgICAgbV9jdXJyZW50Lm1vdmUob2Zmc2V0ICogY29zZihzbG9wZSksIG9m
ZnNldCAqIHNpbmYoc2xvcGUpKTsKKworICAgICAgICBpZiAoIW1faXNaZXJvVmVjdG9yICYmICFt
X2Rlc2lyZWRMZW5ndGgpCisgICAgICAgICAgICBtX2lzWmVyb1ZlY3RvciA9IHRydWU7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgbV9zdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgICAgIG1f
bm9ybWFsQW5nbGUgPSByYWQyZGVnKHNsb3BlKTsKLSAgICAgICAgbV9zdWNjZXNzID0gdHJ1ZTsK
KyAgICAgICAgfQogICAgIH0KKwogICAgIG1fcHJldmlvdXMgPSBtX2N1cnJlbnQ7CisgICAgcmV0
dXJuIG1fc3VjY2VzczsKK30KKworYm9vbCBQYXRoVHJhdmVyc2FsU3RhdGU6OmFwcGVuZFBhdGhF
bGVtZW50KFBhdGhFbGVtZW50VHlwZSB0eXBlLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBQYXRoRWxlbWVudE1vdmVUb1BvaW50Ogor
ICAgICAgICBtb3ZlVG8ocG9pbnRzWzBdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXRo
RWxlbWVudEFkZExpbmVUb1BvaW50OgorICAgICAgICBsaW5lVG8ocG9pbnRzWzBdKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ6CisgICAg
ICAgIHF1YWRyYXRpY0JlemllclRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQYXRoRWxlbWVudEFkZEN1cnZlVG9Qb2ludDoKKyAgICAgICAgY3ViaWNC
ZXppZXJUbyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQYXRoRWxlbWVudENsb3NlU3VicGF0aDoKKyAgICAgICAgY2xvc2VTdWJwYXRo
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmluYWxpemVBcHBl
bmRQYXRoRWxlbWVudCgpOworfQorCitib29sIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1Bh
dGhFbGVtZW50KFBhdGhFbGVtZW50VHlwZSB0eXBlLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMp
Cit7CisgICAgaWYgKG1fc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
bV9pc1plcm9WZWN0b3IpIHsKKyAgICAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0
YXRlKCp0aGlzKTsKKyAgICAgICAgbV9zdWNjZXNzID0gdHJhdmVyc2FsU3RhdGUuYXBwZW5kUGF0
aEVsZW1lbnQodHlwZSwgcG9pbnRzKTsKKyAgICAgICAgbV9ub3JtYWxBbmdsZSA9IHRyYXZlcnNh
bFN0YXRlLm1fbm9ybWFsQW5nbGU7CisgICAgICAgIHJldHVybiBtX3N1Y2Nlc3M7CisgICAgfQor
CisgICAgcmV0dXJuIGFwcGVuZFBhdGhFbGVtZW50KHR5cGUsIHBvaW50cyk7CiB9CiAKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2
ZXJzYWxTdGF0ZS5oCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw0NSArMjgs
NjAgQEAKICNkZWZpbmUgUGF0aFRyYXZlcnNhbFN0YXRlX2gKIAogI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJQYXRoLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
UGF0aFRyYXZlcnNhbFN0YXRlIHsKIHB1YmxpYzoKLSAgICBlbnVtIFBhdGhUcmF2ZXJzYWxBY3Rp
b24gewotICAgICAgICBUcmF2ZXJzYWxUb3RhbExlbmd0aCwKLSAgICAgICAgVHJhdmVyc2FsUG9p
bnRBdExlbmd0aCwKLSAgICAgICAgVHJhdmVyc2FsU2VnbWVudEF0TGVuZ3RoLAotICAgICAgICBU
cmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoCisgICAgZW51bSBjbGFzcyBBY3Rpb24geworICAg
ICAgICBUb3RhbExlbmd0aCwKKyAgICAgICAgVmVjdG9yQXRMZW5ndGgsCisgICAgICAgIFNlZ21l
bnRBdExlbmd0aCwKICAgICB9OwogCi0gICAgUGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJz
YWxBY3Rpb24pOwotCi0gICAgZmxvYXQgY2xvc2VTdWJwYXRoKCk7Ci0gICAgZmxvYXQgbW92ZVRv
KGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICBmbG9hdCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYp
OwotICAgIGZsb2F0IHF1YWRyYXRpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRy
b2wsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCk7Ci0gICAgZmxvYXQgY3ViaWNCZXppZXJUbyhj
b25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJv
bDIsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCk7Ci0gICAgCi0gICAgdm9pZCBwcm9jZXNzU2Vn
bWVudCgpOworICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZShBY3Rpb24sIGZsb2F0IGRlc2lyZWRMZW5n
dGggPSAwKTsKIAogcHVibGljOgotICAgIFBhdGhUcmF2ZXJzYWxBY3Rpb24gbV9hY3Rpb247Ci0g
ICAgYm9vbCBtX3N1Y2Nlc3M7CisgICAgYm9vbCBwcm9jZXNzUGF0aEVsZW1lbnQoUGF0aEVsZW1l
bnRUeXBlLCBjb25zdCBGbG9hdFBvaW50Kik7CisgICAgYm9vbCBwcm9jZXNzUGF0aEVsZW1lbnQo
Y29uc3QgUGF0aEVsZW1lbnQqIGVsZW1lbnQpIHsgcmV0dXJuIHByb2Nlc3NQYXRoRWxlbWVudChl
bGVtZW50LT50eXBlLCBlbGVtZW50LT5wb2ludHMpOyB9CisKKyAgICBBY3Rpb24gYWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9hY3Rpb247IH0KKyAgICB2b2lkIHNldEFjdGlvbihBY3Rpb24gYWN0
aW9uKSB7IG1fYWN0aW9uID0gYWN0aW9uOyB9CisgICAgZmxvYXQgZGVzaXJlZExlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVzaXJlZExlbmd0aDsgfQorICAgIHZvaWQgc2V0RGVzaXJlZExlbmd0
aChmbG9hdCBkZXNpcmVkTGVuZ3RoKSB7IG1fZGVzaXJlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGg7
IH0KKworICAgIC8vIFRyYXZlcnNpbmcgb3V0cHV0IC0tIHNob3VsZCBiZSByZWFkIG9ubHkKKyAg
ICBib29sIHN1Y2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3M7IH0KKyAgICBmbG9hdCB0
b3RhbExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxMZW5ndGg7IH0KKyAgICBGbG9hdFBv
aW50IGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAgICBmbG9hdCBub3Jt
YWxBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsQW5nbGU7IH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIGNsb3NlU3VicGF0aCgpOworICAgIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQm
KTsKKyAgICB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBxdWFkcmF0
aWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZv
aWQgY3ViaWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmKTsKKworICAgIGJvb2wgZmluYWxpemVBcHBlbmRQYXRoRWxlbWVudCgp
OworICAgIGJvb2wgYXBwZW5kUGF0aEVsZW1lbnQoUGF0aEVsZW1lbnRUeXBlLCBjb25zdCBGbG9h
dFBvaW50Kik7CisKK3ByaXZhdGU6CisgICAgQWN0aW9uIG1fYWN0aW9uOworICAgIGJvb2wgbV9z
dWNjZXNzIHsgZmFsc2UgfTsKIAogICAgIEZsb2F0UG9pbnQgbV9jdXJyZW50OwogICAgIEZsb2F0
UG9pbnQgbV9zdGFydDsKLSAgICBGbG9hdFBvaW50IG1fY29udHJvbDE7Ci0gICAgRmxvYXRQb2lu
dCBtX2NvbnRyb2wyOwogCi0gICAgZmxvYXQgbV90b3RhbExlbmd0aDsKLSAgICB1bnNpZ25lZCBt
X3NlZ21lbnRJbmRleDsKLSAgICBmbG9hdCBtX2Rlc2lyZWRMZW5ndGg7CisgICAgZmxvYXQgbV90
b3RhbExlbmd0aCB7IDAgfTsKKyAgICBmbG9hdCBtX2Rlc2lyZWRMZW5ndGggeyAwIH07CiAKICAg
ICAvLyBGb3Igbm9ybWFsIGNhbGN1bGF0aW9ucwogICAgIEZsb2F0UG9pbnQgbV9wcmV2aW91czsK
LSAgICBmbG9hdCBtX25vcm1hbEFuZ2xlOyAvLyBkZWdyZWVzCi19OyAgICAKKyAgICBmbG9hdCBt
X25vcm1hbEFuZ2xlIHsgMCB9OyAvLyBkZWdyZWVzCisgICAgYm9vbCBtX2lzWmVyb1ZlY3RvciB7
IGZhbHNlIH07Cit9OwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gMTgyNzU4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0
Q2hhcmFjdGVyc0kKICAgICAgICAgICAgICAgICBTVkdUZXh0TGF5b3V0RW5naW5lIGxpbmVMYXlv
dXQoY2hhcmFjdGVyTGF5b3V0LmxheW91dEF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICAgICAg
bGF5b3V0Q2hhcmFjdGVyc0luVGV4dEJveGVzKCZmbG93Qm94LCBsaW5lTGF5b3V0KTsKIAotICAg
ICAgICAgICAgICAgIGNoYXJhY3RlckxheW91dC5iZWdpblRleHRQYXRoTGF5b3V0KCZjaGlsZC0+
cmVuZGVyZXIoKSwgbGluZUxheW91dCk7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVyTGF5b3V0
LmJlZ2luVGV4dFBhdGhMYXlvdXQoZG93bmNhc3Q8UmVuZGVyU1ZHVGV4dFBhdGg+KGNoaWxkLT5y
ZW5kZXJlcigpKSwgbGluZUxheW91dCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxh
eW91dENoYXJhY3RlcnNJblRleHRCb3hlcygmZmxvd0JveCwgY2hhcmFjdGVyTGF5b3V0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAJKHJl
dmlzaW9uIDE4Mjc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENo
dW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw1MiArMjUsOTYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1TVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayh1bnNpZ25lZCBjaHVua1N0eWxlLCBm
bG9hdCBkZXNpcmVkVGV4dExlbmd0aCkKLSAgICA6IG1fY2h1bmtTdHlsZShjaHVua1N0eWxlKQot
ICAgICwgbV9kZXNpcmVkVGV4dExlbmd0aChkZXNpcmVkVGV4dExlbmd0aCkKK1NWR1RleHRDaHVu
azo6U1ZHVGV4dENodW5rKGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlv
dXRCb3hlcywgdW5zaWduZWQgZmlyc3QsIHVuc2lnbmVkIGxpbWl0KQogewotfQorICAgIEFTU0VS
VChmaXJzdCA8IGxpbWl0KTsKKyAgICBBU1NFUlQoZmlyc3QgPj0gMCAmJiBsaW1pdCA8PSBsaW5l
TGF5b3V0Qm94ZXMuc2l6ZSgpKTsKIAotdm9pZCBTVkdUZXh0Q2h1bms6OmNhbGN1bGF0ZUxlbmd0
aChmbG9hdCYgbGVuZ3RoLCB1bnNpZ25lZCYgY2hhcmFjdGVycykgY29uc3QKLXsKLSAgICBTVkdU
ZXh0RnJhZ21lbnQqIGxhc3RGcmFnbWVudCA9IDA7CisgICAgY29uc3QgU1ZHSW5saW5lVGV4dEJv
eCogYm94ID0gbGluZUxheW91dEJveGVzW2ZpcnN0XTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUgPSBib3gtPnJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSYgc3ZnU3R5bGUgPSBzdHlsZS5zdmdTdHlsZSgpOworCisgICAgaWYgKCFzdHlsZS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgICAgIG1fY2h1bmtTdHlsZSB8PSBTVkdUZXh0Q2h1bms6
OlJpZ2h0VG9MZWZ0VGV4dDsKKworICAgIGlmIChzdmdTdHlsZS5pc1ZlcnRpY2FsV3JpdGluZ01v
ZGUoKSkKKyAgICAgICAgbV9jaHVua1N0eWxlIHw9IFNWR1RleHRDaHVuazo6VmVydGljYWxUZXh0
OworICAgIAorICAgIHN3aXRjaCAoc3ZnU3R5bGUudGV4dEFuY2hvcigpKSB7CisgICAgY2FzZSBU
QV9TVEFSVDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUQV9NSURETEU6CisgICAgICAgIG1f
Y2h1bmtTdHlsZSB8PSBNaWRkbGVBbmNob3I7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVEFf
RU5EOgorICAgICAgICBtX2NodW5rU3R5bGUgfD0gRW5kQW5jaG9yOworICAgICAgICBicmVhazsK
KyAgICB9CiAKLSAgICB1bnNpZ25lZCBib3hDb3VudCA9IG1fYm94ZXMuc2l6ZSgpOwotICAgIGZv
ciAodW5zaWduZWQgYm94UG9zaXRpb24gPSAwOyBib3hQb3NpdGlvbiA8IGJveENvdW50OyArK2Jv
eFBvc2l0aW9uKSB7Ci0gICAgICAgIFNWR0lubGluZVRleHRCb3gqIHRleHRCb3ggPSBtX2JveGVz
LmF0KGJveFBvc2l0aW9uKTsKLSAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdt
ZW50cyA9IHRleHRCb3gtPnRleHRGcmFnbWVudHMoKTsKKyAgICBpZiAoYXV0byogdGV4dENvbnRl
bnRFbGVtZW50ID0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjplbGVtZW50RnJvbVJlbmRlcmVyKGJv
eC0+cmVuZGVyZXIoKS5wYXJlbnQoKSkpIHsKKyAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5n
dGhDb250ZXh0KHRleHRDb250ZW50RWxlbWVudCk7CisgICAgICAgIG1fZGVzaXJlZFRleHRMZW5n
dGggPSB0ZXh0Q29udGVudEVsZW1lbnQtPnNwZWNpZmllZFRleHRMZW5ndGgoKS52YWx1ZShsZW5n
dGhDb250ZXh0KTsKKworICAgICAgICBzd2l0Y2ggKHRleHRDb250ZW50RWxlbWVudC0+bGVuZ3Ro
QWRqdXN0KCkpIHsKKyAgICAgICAgY2FzZSBTVkdMZW5ndGhBZGp1c3RVbmtub3duOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1ZHTGVuZ3RoQWRqdXN0U3BhY2luZzoKKyAgICAg
ICAgICAgIG1fY2h1bmtTdHlsZSB8PSBMZW5ndGhBZGp1c3RTcGFjaW5nOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU1ZHTGVuZ3RoQWRqdXN0U3BhY2luZ0FuZEdseXBoczoKKyAg
ICAgICAgICAgIG1fY2h1bmtTdHlsZSB8PSBMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgdW5zaWduZWQg
c2l6ZSA9IGZyYWdtZW50cy5zaXplKCk7Ci0gICAgICAgIGlmICghc2l6ZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOworICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0OyBpIDwgbGltaXQ7ICsraSkK
KyAgICAgICAgbV9ib3hlcy5hcHBlbmQobGluZUxheW91dEJveGVzW2ldKTsKK30KIAotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBTVkdU
ZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOwordW5zaWduZWQgU1ZHVGV4
dENodW5rOjp0b3RhbENoYXJhY3RlcnMoKSBjb25zdAoreworICAgIHVuc2lnbmVkIGNoYXJhY3Rl
cnMgPSAwOworICAgIGZvciAoYXV0byogYm94IDogbV9ib3hlcykgeworICAgICAgICBmb3IgKGF1
dG8mIGZyYWdtZW50IDogYm94LT50ZXh0RnJhZ21lbnRzKCkpCiAgICAgICAgICAgICBjaGFyYWN0
ZXJzICs9IGZyYWdtZW50Lmxlbmd0aDsKKyAgICB9CisgICAgcmV0dXJuIGNoYXJhY3RlcnM7Cit9
CiAKLSAgICAgICAgICAgIGlmIChtX2NodW5rU3R5bGUgJiBWZXJ0aWNhbFRleHQpCi0gICAgICAg
ICAgICAgICAgbGVuZ3RoICs9IGZyYWdtZW50LmhlaWdodDsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBsZW5ndGggKz0gZnJhZ21lbnQud2lkdGg7Ci0KLSAgICAgICAgICAgIGlm
ICghbGFzdEZyYWdtZW50KSB7Ci0gICAgICAgICAgICAgICAgbGFzdEZyYWdtZW50ID0gJmZyYWdt
ZW50OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQorZmxvYXQgU1ZH
VGV4dENodW5rOjp0b3RhbExlbmd0aCgpIGNvbnN0Cit7CisgICAgY29uc3QgU1ZHVGV4dEZyYWdt
ZW50KiBmaXJzdEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQq
IGxhc3RGcmFnbWVudCA9IG51bGxwdHI7CiAKLSAgICAgICAgICAgIC8vIFJlc2VwZWN0IGdhcCBi
ZXR3ZWVuIGNodW5rcy4KLSAgICAgICAgICAgIGlmIChtX2NodW5rU3R5bGUgJiBWZXJ0aWNhbFRl
eHQpCi0gICAgICAgICAgICAgICAgIGxlbmd0aCArPSBmcmFnbWVudC55IC0gKGxhc3RGcmFnbWVu
dC0+eSArIGxhc3RGcmFnbWVudC0+aGVpZ2h0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgbGVuZ3RoICs9IGZyYWdtZW50LnggLSAobGFzdEZyYWdtZW50LT54ICsgbGFzdEZy
YWdtZW50LT53aWR0aCk7CisgICAgZm9yIChhdXRvKiBib3ggOiBtX2JveGVzKSB7CisgICAgICAg
IGF1dG8mIGZyYWdtZW50cyA9IGJveC0+dGV4dEZyYWdtZW50cygpOworICAgICAgICBpZiAoZnJh
Z21lbnRzLnNpemUoKSkgeworICAgICAgICAgICAgZmlyc3RGcmFnbWVudCA9ICYoKmZyYWdtZW50
cy5iZWdpbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogCi0gICAg
ICAgICAgICBsYXN0RnJhZ21lbnQgPSAmZnJhZ21lbnQ7CisgICAgZm9yIChhdXRvIGl0ID0gbV9i
b3hlcy5yYmVnaW4oKSwgZW5kID0gbV9ib3hlcy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICBhdXRvJiBmcmFnbWVudHMgPSAoKml0KS0+dGV4dEZyYWdtZW50cygpOworICAgICAg
ICBpZiAoZnJhZ21lbnRzLnNpemUoKSkgeworICAgICAgICAgICAgbGFzdEZyYWdtZW50ID0gJigq
ZnJhZ21lbnRzLnJiZWdpbigpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQorCisgICAgQVNTRVJUKCFmaXJzdEZyYWdtZW50ID09ICFsYXN0RnJhZ21lbnQpOworICAgIGlm
ICghZmlyc3RGcmFnbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobV9jaHVua1N0
eWxlICYgVmVydGljYWxUZXh0KQorICAgICAgICByZXR1cm4gKGxhc3RGcmFnbWVudC0+eSArIGxh
c3RGcmFnbWVudC0+aGVpZ2h0KSAtIGZpcnN0RnJhZ21lbnQtPnk7CisKKyAgICByZXR1cm4gKGxh
c3RGcmFnbWVudC0+eCArIGxhc3RGcmFnbWVudC0+d2lkdGgpIC0gZmlyc3RGcmFnbWVudC0+eDsK
IH0KIAotZmxvYXQgU1ZHVGV4dENodW5rOjpjYWxjdWxhdGVUZXh0QW5jaG9yU2hpZnQoZmxvYXQg
bGVuZ3RoKSBjb25zdAorZmxvYXQgU1ZHVGV4dENodW5rOjp0b3RhbEFuY2hvclNoaWZ0KCkgY29u
c3QKIHsKKyAgICBmbG9hdCBsZW5ndGggPSB0b3RhbExlbmd0aCgpOwogICAgIGlmIChtX2NodW5r
U3R5bGUgJiBNaWRkbGVBbmNob3IpCiAgICAgICAgIHJldHVybiAtbGVuZ3RoIC8gMjsKICAgICBp
ZiAobV9jaHVua1N0eWxlICYgRW5kQW5jaG9yKQpAQCAtNzcsNCArMTIyLDg4IEBAIGZsb2F0IFNW
R1RleHRDaHVuazo6Y2FsY3VsYXRlVGV4dEFuY2hvclMKICAgICByZXR1cm4gbV9jaHVua1N0eWxl
ICYgUmlnaHRUb0xlZnRUZXh0ID8gLWxlbmd0aCA6IDA7CiB9CiAKK3ZvaWQgU1ZHVGV4dENodW5r
OjpsYXlvdXQoSGFzaE1hcDxTVkdJbmxpbmVUZXh0Qm94KiwgQWZmaW5lVHJhbnNmb3JtPiYgdGV4
dEJveFRyYW5zZm9ybWF0aW9ucykgY29uc3QKK3sKKyAgICBpZiAoaGFzRGVzaXJlZFRleHRMZW5n
dGgoKSkgeworICAgICAgICBpZiAoaGFzTGVuZ3RoQWRqdXN0U3BhY2luZygpKQorICAgICAgICAg
ICAgcHJvY2Vzc1RleHRMZW5ndGhTcGFjaW5nQ29ycmVjdGlvbigpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVChoYXNMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzKCkpOwor
ICAgICAgICAgICAgYnVpbGRCb3hUcmFuc2Zvcm1hdGlvbnModGV4dEJveFRyYW5zZm9ybWF0aW9u
cyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaGFzVGV4dEFuY2hvcigpKQorICAgICAg
ICBwcm9jZXNzVGV4dEFuY2hvckNvcnJlY3Rpb24oKTsKK30KKwordm9pZCBTVkdUZXh0Q2h1bms6
OnByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24oKSBjb25zdAoreworICAgIGZsb2F0
IHRleHRMZW5ndGhTaGlmdCA9IChkZXNpcmVkVGV4dExlbmd0aCgpIC0gdG90YWxMZW5ndGgoKSkg
LyB0b3RhbENoYXJhY3RlcnMoKTsKKyAgICBib29sIGlzVmVydGljYWxUZXh0ID0gbV9jaHVua1N0
eWxlICYgVmVydGljYWxUZXh0OworICAgIHVuc2lnbmVkIGF0Q2hhcmFjdGVyID0gMDsKKworICAg
IGZvciAoYXV0byogYm94IDogbV9ib3hlcykgeworICAgICAgICBmb3IgKGF1dG8mIGZyYWdtZW50
IDogYm94LT50ZXh0RnJhZ21lbnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4
dCkKKyAgICAgICAgICAgICAgICBmcmFnbWVudC55ICs9IHRleHRMZW5ndGhTaGlmdCAqIGF0Q2hh
cmFjdGVyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZyYWdtZW50LnggKz0g
dGV4dExlbmd0aFNoaWZ0ICogYXRDaGFyYWN0ZXI7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGF0Q2hhcmFjdGVyICs9IGZyYWdtZW50Lmxlbmd0aDsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBTVkdUZXh0Q2h1bms6OmJ1aWxkQm94VHJhbnNmb3JtYXRpb25zKEhhc2hNYXA8U1ZHSW5s
aW5lVGV4dEJveCosIEFmZmluZVRyYW5zZm9ybT4mIHRleHRCb3hUcmFuc2Zvcm1hdGlvbnMpIGNv
bnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm07Cisg
ICAgYm9vbCBmb3VuZEZpcnN0RnJhZ21lbnQgPSBmYWxzZTsKKworICAgIGZvciAoYXV0byogYm94
IDogbV9ib3hlcykgeworICAgICAgICBpZiAoIWZvdW5kRmlyc3RGcmFnbWVudCkgeworICAgICAg
ICAgICAgaWYgKCFib3hTcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKGJveCwgc3BhY2luZ0FuZEds
eXBoc1RyYW5zZm9ybSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBm
b3VuZEZpcnN0RnJhZ21lbnQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdGV4dEJveFRy
YW5zZm9ybWF0aW9ucy5zZXQoYm94LCBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKTsKKyAgICB9
Cit9CisKK2Jvb2wgU1ZHVGV4dENodW5rOjpib3hTcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKGNv
bnN0IFNWR0lubGluZVRleHRCb3gqIGJveCwgQWZmaW5lVHJhbnNmb3JtJiBzcGFjaW5nQW5kR2x5
cGhzVHJhbnNmb3JtKSBjb25zdAoreworICAgIGF1dG8mIGZyYWdtZW50cyA9IGJveC0+dGV4dEZy
YWdtZW50cygpOworICAgIGlmIChmcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRz
LmZpcnN0KCk7CisgICAgZmxvYXQgc2NhbGUgPSBkZXNpcmVkVGV4dExlbmd0aCgpIC8gdG90YWxM
ZW5ndGgoKTsKKworICAgIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0udHJhbnNsYXRlKGZyYWdt
ZW50LngsIGZyYWdtZW50LnkpOworCisgICAgaWYgKG1fY2h1bmtTdHlsZSAmIFZlcnRpY2FsVGV4
dCkKKyAgICAgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oMSwg
c2NhbGUpOworICAgIGVsc2UKKyAgICAgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS5zY2Fs
ZU5vblVuaWZvcm0oc2NhbGUsIDEpOworCisgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS50
cmFuc2xhdGUoLWZyYWdtZW50LngsIC1mcmFnbWVudC55KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBTVkdUZXh0Q2h1bms6OnByb2Nlc3NUZXh0QW5jaG9yQ29ycmVjdGlvbigpIGNvbnN0
Cit7CisgICAgZmxvYXQgdGV4dEFuY2hvclNoaWZ0ID0gdG90YWxBbmNob3JTaGlmdCgpOworICAg
IGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBtX2NodW5rU3R5bGUgJiBWZXJ0aWNhbFRleHQ7CisKKyAg
ICBmb3IgKGF1dG8qIGJveCA6IG1fYm94ZXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBmcmFnbWVu
dCA6IGJveC0+dGV4dEZyYWdtZW50cygpKSB7CisgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRl
eHQpCisgICAgICAgICAgICAgICAgZnJhZ21lbnQueSArPSB0ZXh0QW5jaG9yU2hpZnQ7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnJhZ21lbnQueCArPSB0ZXh0QW5jaG9yU2hp
ZnQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaAkocmV2aXNpb24g
MTgyNzU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC00MCwyOCArNDEsMzQgQEAgcHVibGljOgogICAgICAgICBMZW5ndGhBZGp1
c3RTcGFjaW5nQW5kR2x5cGhzID0gMSA8PCA2CiAgICAgfTsKIAotICAgIFNWR1RleHRDaHVuayh1
bnNpZ25lZCBjaHVua1N0eWxlLCBmbG9hdCBkZXNpcmVkVGV4dExlbmd0aCk7CisgICAgU1ZHVGV4
dENodW5rKGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mLCB1bnNpZ25lZCBmaXJzdCwg
dW5zaWduZWQgbGltaXQpOwogCi0gICAgdm9pZCBjYWxjdWxhdGVMZW5ndGgoZmxvYXQmIGxlbmd0
aCwgdW5zaWduZWQmIGNoYXJhY3RlcnMpIGNvbnN0OwotICAgIGZsb2F0IGNhbGN1bGF0ZVRleHRB
bmNob3JTaGlmdChmbG9hdCBsZW5ndGgpIGNvbnN0OworICAgIHVuc2lnbmVkIHRvdGFsQ2hhcmFj
dGVycygpIGNvbnN0OworICAgIGZsb2F0IHRvdGFsTGVuZ3RoKCkgY29uc3Q7CisgICAgZmxvYXQg
dG90YWxBbmNob3JTaGlmdCgpIGNvbnN0OworICAgIHZvaWQgbGF5b3V0KEhhc2hNYXA8U1ZHSW5s
aW5lVGV4dEJveCosIEFmZmluZVRyYW5zZm9ybT4mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2
b2lkIHByb2Nlc3NUZXh0QW5jaG9yQ29ycmVjdGlvbigpIGNvbnN0OworICAgIHZvaWQgYnVpbGRC
b3hUcmFuc2Zvcm1hdGlvbnMoSGFzaE1hcDxTVkdJbmxpbmVUZXh0Qm94KiwgQWZmaW5lVHJhbnNm
b3JtPiYpIGNvbnN0OworICAgIHZvaWQgcHJvY2Vzc1RleHRMZW5ndGhTcGFjaW5nQ29ycmVjdGlv
bigpIGNvbnN0OwogCiAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2h1bmtTdHlsZSAmIFZlcnRpY2FsVGV4dDsgfQogICAgIGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9kZXNpcmVkVGV4dExlbmd0aDsgfQogCi0gICAgVmVjdG9yPFNW
R0lubGluZVRleHRCb3gqPiYgYm94ZXMoKSB7IHJldHVybiBtX2JveGVzOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgYm94ZXMoKSBjb25zdCB7IHJldHVybiBtX2JveGVz
OyB9Ci0KICAgICBib29sIGhhc0Rlc2lyZWRUZXh0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXNpcmVkVGV4dExlbmd0aCA+IDAgJiYgKChtX2NodW5rU3R5bGUgJiBMZW5ndGhBZGp1c3RTcGFj
aW5nKSB8fCAobV9jaHVua1N0eWxlICYgTGVuZ3RoQWRqdXN0U3BhY2luZ0FuZEdseXBocykpOyB9
Ci0gICAgYm9vbCBoYXNUZXh0QW5jaG9yKCkgY29uc3QgeyAgcmV0dXJuIG1fY2h1bmtTdHlsZSAm
IFJpZ2h0VG9MZWZ0VGV4dCA/ICEobV9jaHVua1N0eWxlICYgRW5kQW5jaG9yKSA6IChtX2NodW5r
U3R5bGUgJiBNaWRkbGVBbmNob3IpIHx8IChtX2NodW5rU3R5bGUgJiBFbmRBbmNob3IpOyB9Cisg
ICAgYm9vbCBoYXNUZXh0QW5jaG9yKCkgY29uc3QgeyAgcmV0dXJuIG1fY2h1bmtTdHlsZSAmIFJp
Z2h0VG9MZWZ0VGV4dCA/ICEobV9jaHVua1N0eWxlICYgRW5kQW5jaG9yKSA6IChtX2NodW5rU3R5
bGUgJiAoTWlkZGxlQW5jaG9yIHwgRW5kQW5jaG9yKSk7IH0KICAgICBib29sIGhhc0xlbmd0aEFk
anVzdFNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX2NodW5rU3R5bGUgJiBMZW5ndGhBZGp1c3RT
cGFjaW5nOyB9CiAgICAgYm9vbCBoYXNMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzKCkgY29u
c3QgeyByZXR1cm4gbV9jaHVua1N0eWxlICYgTGVuZ3RoQWRqdXN0U3BhY2luZ0FuZEdseXBoczsg
fQogCisgICAgYm9vbCBib3hTcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKGNvbnN0IFNWR0lubGlu
ZVRleHRCb3gqLCBBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICAvLyBD
b250YWlucyBhbGwgU1ZHSW5saW5lVGV4dEJveGVzIHRoaXMgY2h1bmsgc3BhbnMuCiAgICAgVmVj
dG9yPFNWR0lubGluZVRleHRCb3gqPiBtX2JveGVzOwogCi0gICAgdW5zaWduZWQgbV9jaHVua1N0
eWxlOwotICAgIGZsb2F0IG1fZGVzaXJlZFRleHRMZW5ndGg7CisgICAgdW5zaWduZWQgbV9jaHVu
a1N0eWxlIHsgRGVmYXVsdFN0eWxlIH07CisgICAgZmxvYXQgbV9kZXNpcmVkVGV4dExlbmd0aCB7
IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcAkocmV2aXNp
b24gMTgyNzU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtC
dWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCwyMjcgKzMxLDcxIEBAIFNWR1RleHRDaHVua0J1
aWxkZXI6OlNWR1RleHRDaHVua0J1aWxkZXIKIHsKIH0KIAotdm9pZCBTVkdUZXh0Q2h1bmtCdWls
ZGVyOjp0cmFuc2Zvcm1hdGlvbkZvclRleHRCb3goU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIGNvbnN0Cit1bnNpZ25lZCBTVkdUZXh0Q2h1bmtC
dWlsZGVyOjp0b3RhbENoYXJhY3RlcnMoKSBjb25zdAogewotICAgIERFUFJFQ0FURURfREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBBZmZpbmVUcmFuc2Zvcm0sIHNfaWRlbnRpdHlUcmFuc2Zvcm0s
ICgpKTsKLSAgICBpZiAoIW1fdGV4dEJveFRyYW5zZm9ybWF0aW9ucy5jb250YWlucyh0ZXh0Qm94
KSkgewotICAgICAgICB0cmFuc2Zvcm0gPSBzX2lkZW50aXR5VHJhbnNmb3JtOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgdHJhbnNmb3JtID0gbV90ZXh0Qm94VHJhbnNmb3JtYXRpb25z
LmdldCh0ZXh0Qm94KTsKKyAgICB1bnNpZ25lZCBjaGFyYWN0ZXJzID0gMDsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGNodW5rIDogbV90ZXh0Q2h1bmtzKQorICAgICAgICBjaGFyYWN0ZXJzICs9IGNo
dW5rLnRvdGFsQ2hhcmFjdGVycygpOworICAgIHJldHVybiBjaGFyYWN0ZXJzOwogfQogCi12b2lk
IFNWR1RleHRDaHVua0J1aWxkZXI6OmJ1aWxkVGV4dENodW5rcyhWZWN0b3I8U1ZHSW5saW5lVGV4
dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMpCitmbG9hdCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjp0b3Rh
bExlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKGxpbmVMYXlvdXRCb3hlcy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgZm91bmRTdGFydCA9IGZhbHNlOwotICAgIHVuc2ln
bmVkIGxhc3RDaHVua1N0YXJ0UG9zaXRpb24gPSAwOwotICAgIHVuc2lnbmVkIGJveFBvc2l0aW9u
ID0gMDsKLSAgICB1bnNpZ25lZCBib3hDb3VudCA9IGxpbmVMYXlvdXRCb3hlcy5zaXplKCk7Ci0g
ICAgZm9yICg7IGJveFBvc2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9zaXRpb24pIHsKLSAgICAg
ICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9IGxpbmVMYXlvdXRCb3hlc1tib3hQb3NpdGlv
bl07Ci0gICAgICAgIGlmICghdGV4dEJveC0+c3RhcnRzTmV3VGV4dENodW5rKCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIWZvdW5kU3RhcnQpIHsKLSAgICAgICAgICAg
IGxhc3RDaHVua1N0YXJ0UG9zaXRpb24gPSBib3hQb3NpdGlvbjsKLSAgICAgICAgICAgIGZvdW5k
U3RhcnQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oYm94UG9zaXRpb24gPiBsYXN0Q2h1bmtTdGFydFBvc2l0aW9u
KTsKLSAgICAgICAgICAgIGFkZFRleHRDaHVuayhsaW5lTGF5b3V0Qm94ZXMsIGxhc3RDaHVua1N0
YXJ0UG9zaXRpb24sIGJveFBvc2l0aW9uIC0gbGFzdENodW5rU3RhcnRQb3NpdGlvbik7Ci0gICAg
ICAgICAgICBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uID0gYm94UG9zaXRpb247Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoIWZvdW5kU3RhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChib3hQb3NpdGlvbiAtIGxhc3RDaHVua1N0YXJ0UG9zaXRpb24gPiAwKQotICAgICAgICBhZGRU
ZXh0Q2h1bmsobGluZUxheW91dEJveGVzLCBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uLCBib3hQb3Np
dGlvbiAtIGxhc3RDaHVua1N0YXJ0UG9zaXRpb24pOworICAgIGZsb2F0IGxlbmd0aCA9IDA7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBjaHVuayA6IG1fdGV4dENodW5rcykKKyAgICAgICAgbGVuZ3Ro
ICs9IGNodW5rLnRvdGFsTGVuZ3RoKCk7CisgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotdm9pZCBT
VkdUZXh0Q2h1bmtCdWlsZGVyOjpsYXlvdXRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdJbmxpbmVUZXh0
Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcykKK2Zsb2F0IFNWR1RleHRDaHVua0J1aWxkZXI6OnRvdGFs
QW5jaG9yU2hpZnQoKSBjb25zdAogewotICAgIGJ1aWxkVGV4dENodW5rcyhsaW5lTGF5b3V0Qm94
ZXMpOwotICAgIGlmIChtX3RleHRDaHVua3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB1bnNpZ25lZCBjaHVua0NvdW50ID0gbV90ZXh0Q2h1bmtzLnNpemUoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY2h1bmtDb3VudDsgKytpKQotICAgICAgICBwcm9jZXNzVGV4
dENodW5rKG1fdGV4dENodW5rc1tpXSk7Ci0KLSAgICBtX3RleHRDaHVua3MuY2xlYXIoKTsKKyAg
ICBmbG9hdCBhbmNob3JTaGlmdCA9IDA7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaHVuayA6IG1f
dGV4dENodW5rcykKKyAgICAgICAgYW5jaG9yU2hpZnQgKz0gY2h1bmsudG90YWxBbmNob3JTaGlm
dCgpOworICAgIHJldHVybiBhbmNob3JTaGlmdDsKIH0KIAotdm9pZCBTVkdUZXh0Q2h1bmtCdWls
ZGVyOjphZGRUZXh0Q2h1bmsoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91dEJv
eGVzLCB1bnNpZ25lZCBib3hTdGFydCwgdW5zaWduZWQgYm94Q291bnQpCitBZmZpbmVUcmFuc2Zv
cm0gU1ZHVGV4dENodW5rQnVpbGRlcjo6dHJhbnNmb3JtYXRpb25Gb3JUZXh0Qm94KFNWR0lubGlu
ZVRleHRCb3gqIHRleHRCb3gpIGNvbnN0CiB7Ci0gICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJv
eCA9IGxpbmVMYXlvdXRCb3hlc1tib3hTdGFydF07Ci0gICAgQVNTRVJUKHRleHRCb3gpOwotCi0g
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGV4dEJveC0+cmVuZGVyZXIoKS5zdHlsZSgp
OwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUo
KTsKLQotICAgIC8vIEJ1aWxkIGNodW5rIHN0eWxlIGZsYWdzLgotICAgIHVuc2lnbmVkIGNodW5r
U3R5bGUgPSBTVkdUZXh0Q2h1bms6OkRlZmF1bHRTdHlsZTsKLQotICAgIC8vIEhhbmRsZSAnZGly
ZWN0aW9uJyBwcm9wZXJ0eS4KLSAgICBpZiAoIXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSkKLSAgICAgICAgY2h1bmtTdHlsZSB8PSBTVkdUZXh0Q2h1bms6OlJpZ2h0VG9MZWZ0VGV4dDsK
LQotICAgIC8vIEhhbmRsZSAnd3JpdGluZy1tb2RlJyBwcm9wZXJ0eS4KLSAgICBpZiAoc3ZnU3R5
bGUuaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIGNodW5rU3R5bGUgfD0gU1ZHVGV4
dENodW5rOjpWZXJ0aWNhbFRleHQ7Ci0KLSAgICAvLyBIYW5kbGUgJ3RleHQtYW5jaG9yJyBwcm9w
ZXJ0eS4KLSAgICBzd2l0Y2ggKHN2Z1N0eWxlLnRleHRBbmNob3IoKSkgewotICAgIGNhc2UgVEFf
U1RBUlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVEFfTUlERExFOgotICAgICAgICBjaHVu
a1N0eWxlIHw9IFNWR1RleHRDaHVuazo6TWlkZGxlQW5jaG9yOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFRBX0VORDoKLSAgICAgICAgY2h1bmtTdHlsZSB8PSBTVkdUZXh0Q2h1bms6OkVuZEFu
Y2hvcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfTsKLQotICAgIC8vIEhhbmRsZSAnbGVuZ3RoQWRq
dXN0JyBwcm9wZXJ0eS4KLSAgICBmbG9hdCBkZXNpcmVkVGV4dExlbmd0aCA9IDA7Ci0gICAgaWYg
KFNWR1RleHRDb250ZW50RWxlbWVudCogdGV4dENvbnRlbnRFbGVtZW50ID0gU1ZHVGV4dENvbnRl
bnRFbGVtZW50OjplbGVtZW50RnJvbVJlbmRlcmVyKHRleHRCb3gtPnJlbmRlcmVyKCkucGFyZW50
KCkpKSB7Ci0gICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCh0ZXh0Q29udGVu
dEVsZW1lbnQpOwotICAgICAgICBkZXNpcmVkVGV4dExlbmd0aCA9IHRleHRDb250ZW50RWxlbWVu
dC0+c3BlY2lmaWVkVGV4dExlbmd0aCgpLnZhbHVlKGxlbmd0aENvbnRleHQpOwotCi0gICAgICAg
IHN3aXRjaCAodGV4dENvbnRlbnRFbGVtZW50LT5sZW5ndGhBZGp1c3QoKSkgewotICAgICAgICBj
YXNlIFNWR0xlbmd0aEFkanVzdFVua25vd246Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTVkdMZW5ndGhBZGp1c3RTcGFjaW5nOgotICAgICAgICAgICAgY2h1bmtTdHlsZSB8PSBT
VkdUZXh0Q2h1bms6Okxlbmd0aEFkanVzdFNwYWNpbmc7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBTVkdMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzOgotICAgICAgICAgICAg
Y2h1bmtTdHlsZSB8PSBTVkdUZXh0Q2h1bms6Okxlbmd0aEFkanVzdFNwYWNpbmdBbmRHbHlwaHM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBTVkdUZXh0Q2h1
bmsgY2h1bmsoY2h1bmtTdHlsZSwgZGVzaXJlZFRleHRMZW5ndGgpOwotCi0gICAgVmVjdG9yPFNW
R0lubGluZVRleHRCb3gqPiYgYm94ZXMgPSBjaHVuay5ib3hlcygpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJveFN0YXJ0OyBpIDwgYm94U3RhcnQgKyBib3hDb3VudDsgKytpKQotICAgICAgICBi
b3hlcy5hcHBlbmQobGluZUxheW91dEJveGVzW2ldKTsKLQotICAgIG1fdGV4dENodW5rcy5hcHBl
bmQoY2h1bmspOworICAgIGF1dG8gaXQgPSBtX3RleHRCb3hUcmFuc2Zvcm1hdGlvbnMuZmluZCh0
ZXh0Qm94KTsKKyAgICByZXR1cm4gaXQgPT0gbV90ZXh0Qm94VHJhbnNmb3JtYXRpb25zLmVuZCgp
ID8gQWZmaW5lVHJhbnNmb3JtKCkgOiBpdC0+dmFsdWU7CiB9CiAKLXZvaWQgU1ZHVGV4dENodW5r
QnVpbGRlcjo6cHJvY2Vzc1RleHRDaHVuayhjb25zdCBTVkdUZXh0Q2h1bmsmIGNodW5rKQordm9p
ZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpidWlsZFRleHRDaHVua3MoY29uc3QgVmVjdG9yPFNWR0lu
bGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzKQogewotICAgIGJvb2wgcHJvY2Vzc1RleHRM
ZW5ndGggPSBjaHVuay5oYXNEZXNpcmVkVGV4dExlbmd0aCgpOwotICAgIGJvb2wgcHJvY2Vzc1Rl
eHRBbmNob3IgPSBjaHVuay5oYXNUZXh0QW5jaG9yKCk7Ci0gICAgaWYgKCFwcm9jZXNzVGV4dEFu
Y2hvciAmJiAhcHJvY2Vzc1RleHRMZW5ndGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0
IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGJveGVzID0gY2h1bmsuYm94ZXMoKTsKLSAgICB1
bnNpZ25lZCBib3hDb3VudCA9IGJveGVzLnNpemUoKTsKLSAgICBpZiAoIWJveENvdW50KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBDYWxjdWxhdGUgYWJzb2x1dGUgbGVuZ3RoIG9mIHdob2xl
IHRleHQgY2h1bmsgKHN0YXJ0aW5nIGZyb20gdGV4dCBib3ggJ3N0YXJ0Jywgc3Bhbm5pbmcgJ2xl
bmd0aCcgdGV4dCBib3hlcykuCi0gICAgZmxvYXQgY2h1bmtMZW5ndGggPSAwOwotICAgIHVuc2ln
bmVkIGNodW5rQ2hhcmFjdGVycyA9IDA7Ci0gICAgY2h1bmsuY2FsY3VsYXRlTGVuZ3RoKGNodW5r
TGVuZ3RoLCBjaHVua0NoYXJhY3RlcnMpOwotCi0gICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IGNo
dW5rLmlzVmVydGljYWxUZXh0KCk7Ci0gICAgaWYgKHByb2Nlc3NUZXh0TGVuZ3RoKSB7Ci0gICAg
ICAgIGlmIChjaHVuay5oYXNMZW5ndGhBZGp1c3RTcGFjaW5nKCkpIHsKLSAgICAgICAgICAgIGZs
b2F0IHRleHRMZW5ndGhTaGlmdCA9IChjaHVuay5kZXNpcmVkVGV4dExlbmd0aCgpIC0gY2h1bmtM
ZW5ndGgpIC8gY2h1bmtDaGFyYWN0ZXJzOwotICAgICAgICAgICAgdW5zaWduZWQgYXRDaGFyYWN0
ZXIgPSAwOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBib3hQb3NpdGlvbiA9IDA7IGJveFBv
c2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9zaXRpb24pIHsKLSAgICAgICAgICAgICAgICBWZWN0
b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gYm94ZXNbYm94UG9zaXRpb25dLT50ZXh0
RnJhZ21lbnRzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50cy5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHByb2Nlc3NUZXh0
TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24oaXNWZXJ0aWNhbFRleHQsIHRleHRMZW5ndGhTaGlmdCwg
ZnJhZ21lbnRzLCBhdENoYXJhY3Rlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQoY2h1bmsuaGFzTGVuZ3RoQWRqdXN0U3BhY2luZ0FuZEdseXBo
cygpKTsKLSAgICAgICAgICAgIGZsb2F0IHRleHRMZW5ndGhTY2FsZSA9IGNodW5rLmRlc2lyZWRU
ZXh0TGVuZ3RoKCkgLyBjaHVua0xlbmd0aDsKLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBz
cGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtOwotCi0gICAgICAgICAgICBib29sIGZvdW5kRmlyc3RG
cmFnbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBib3hQb3NpdGlvbiA9
IDA7IGJveFBvc2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9zaXRpb24pIHsKLSAgICAgICAgICAg
ICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gYm94ZXNbYm94UG9zaXRpb25dOwotICAg
ICAgICAgICAgICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSB0ZXh0Qm94
LT50ZXh0RnJhZ21lbnRzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50cy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgaWYg
KCFmb3VuZEZpcnN0RnJhZ21lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRGaXJzdEZy
YWdtZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRTcGFjaW5nQW5kR2x5cGhz
VHJhbnNmb3JtKGlzVmVydGljYWxUZXh0LCB0ZXh0TGVuZ3RoU2NhbGUsIGZyYWdtZW50cy5maXJz
dCgpLCBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBtX3RleHRCb3hUcmFuc2Zvcm1hdGlvbnMuc2V0KHRleHRCb3gsIHNwYWNp
bmdBbmRHbHlwaHNUcmFuc2Zvcm0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKCFwcm9jZXNzVGV4dEFuY2hvcikKKyAgICBpZiAobGluZUxheW91dEJveGVzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gSWYgd2UgcHJldmlvdXNseSBhcHBs
aWVkIGEgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nIiBjb3JyZWN0aW9uLCB3ZSBoYXZlIHRvIHJlY2Fs
Y3VsYXRlIHRoZSBjaHVuayBsZW5ndGgsIHRvIGJlIGFibGUgdG8gYXBwbHkgdGhlIHRleHQtYW5j
aG9yIHNoaWZ0LgotICAgIGlmIChwcm9jZXNzVGV4dExlbmd0aCAmJiBjaHVuay5oYXNMZW5ndGhB
ZGp1c3RTcGFjaW5nKCkpIHsKLSAgICAgICAgY2h1bmtMZW5ndGggPSAwOwotICAgICAgICBjaHVu
a0NoYXJhY3RlcnMgPSAwOwotICAgICAgICBjaHVuay5jYWxjdWxhdGVMZW5ndGgoY2h1bmtMZW5n
dGgsIGNodW5rQ2hhcmFjdGVycyk7Ci0gICAgfQorICAgIHVuc2lnbmVkIGxpbWl0ID0gbGluZUxh
eW91dEJveGVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBmaXJzdCA9IGxpbWl0OwogCi0gICAgZmxv
YXQgdGV4dEFuY2hvclNoaWZ0ID0gY2h1bmsuY2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0KGNodW5r
TGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGJveFBvc2l0aW9uID0gMDsgYm94UG9zaXRpb24g
PCBib3hDb3VudDsgKytib3hQb3NpdGlvbikgewotICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdt
ZW50PiYgZnJhZ21lbnRzID0gYm94ZXNbYm94UG9zaXRpb25dLT50ZXh0RnJhZ21lbnRzKCk7Ci0g
ICAgICAgIGlmIChmcmFnbWVudHMuaXNFbXB0eSgpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsaW1pdDsgKytpKSB7CisgICAgICAgIGlmICghbGluZUxheW91dEJveGVzW2ldLT5zdGFy
dHNOZXdUZXh0Q2h1bmsoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwcm9jZXNz
VGV4dEFuY2hvckNvcnJlY3Rpb24oaXNWZXJ0aWNhbFRleHQsIHRleHRBbmNob3JTaGlmdCwgZnJh
Z21lbnRzKTsKLSAgICB9Ci19Ci0KLXZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vzc1Rl
eHRMZW5ndGhTcGFjaW5nQ29ycmVjdGlvbihib29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCB0ZXh0
TGVuZ3RoU2hpZnQsIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMsIHVuc2lnbmVk
JiBhdENoYXJhY3RlcikKLXsKLSAgICB1bnNpZ25lZCBmcmFnbWVudENvdW50ID0gZnJhZ21lbnRz
LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnRDb3VudDsgKytp
KSB7Ci0gICAgICAgIFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVudHNbaV07Ci0K
LSAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgZnJhZ21lbnQueSArPSB0
ZXh0TGVuZ3RoU2hpZnQgKiBhdENoYXJhY3RlcjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ZnJhZ21lbnQueCArPSB0ZXh0TGVuZ3RoU2hpZnQgKiBhdENoYXJhY3RlcjsKIAotICAgICAgICBh
dENoYXJhY3RlciArPSBmcmFnbWVudC5sZW5ndGg7CisgICAgICAgIGlmIChmaXJzdCA9PSBsaW1p
dCkKKyAgICAgICAgICAgIGZpcnN0ID0gaTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihmaXJzdCAhPSBpKTsKKyAgICAgICAgICAg
IG1fdGV4dENodW5rcy5hcHBlbmQoU1ZHVGV4dENodW5rKGxpbmVMYXlvdXRCb3hlcywgZmlyc3Qs
IGkpKTsKKyAgICAgICAgICAgIGZpcnN0ID0gaTsKKyAgICAgICAgfQogICAgIH0KLX0KIAotdm9p
ZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpwcm9jZXNzVGV4dEFuY2hvckNvcnJlY3Rpb24oYm9vbCBp
c1ZlcnRpY2FsVGV4dCwgZmxvYXQgdGV4dEFuY2hvclNoaWZ0LCBWZWN0b3I8U1ZHVGV4dEZyYWdt
ZW50PiYgZnJhZ21lbnRzKQotewotICAgIHVuc2lnbmVkIGZyYWdtZW50Q291bnQgPSBmcmFnbWVu
dHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVudENvdW50OyAr
K2kpIHsKLSAgICAgICAgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50c1tpXTsK
LQotICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICBmcmFnbWVudC55ICs9
IHRleHRBbmNob3JTaGlmdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnJhZ21lbnQueCAr
PSB0ZXh0QW5jaG9yU2hpZnQ7Ci0gICAgfQorICAgIGlmIChmaXJzdCAhPSBsaW1pdCkKKyAgICAg
ICAgbV90ZXh0Q2h1bmtzLmFwcGVuZChTVkdUZXh0Q2h1bmsobGluZUxheW91dEJveGVzLCBmaXJz
dCwgbGltaXQpKTsKIH0KIAotdm9pZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpidWlsZFNwYWNpbmdB
bmRHbHlwaHNUcmFuc2Zvcm0oYm9vbCBpc1ZlcnRpY2FsVGV4dCwgZmxvYXQgc2NhbGUsIGNvbnN0
IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIEFmZmluZVRyYW5zZm9ybSYgc3BhY2luZ0FuZEds
eXBoc1RyYW5zZm9ybSkKK3ZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6bGF5b3V0VGV4dENodW5r
cyhjb25zdCBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMpCiB7Ci0g
ICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS50cmFuc2xhdGUoZnJhZ21lbnQueCwgZnJhZ21l
bnQueSk7CisgICAgYnVpbGRUZXh0Q2h1bmtzKGxpbmVMYXlvdXRCb3hlcyk7CisgICAgaWYgKG1f
dGV4dENodW5rcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChpc1ZlcnRp
Y2FsVGV4dCkKLSAgICAgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS5zY2FsZU5vblVuaWZv
cm0oMSwgc2NhbGUpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9y
bS5zY2FsZU5vblVuaWZvcm0oc2NhbGUsIDEpOworICAgIGZvciAoY29uc3QgYXV0byYgY2h1bmsg
OiBtX3RleHRDaHVua3MpCisgICAgICAgIGNodW5rLmxheW91dChtX3RleHRCb3hUcmFuc2Zvcm1h
dGlvbnMpOwogCi0gICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS50cmFuc2xhdGUoLWZyYWdt
ZW50LngsIC1mcmFnbWVudC55KTsKKyAgICBtX3RleHRDaHVua3MuY2xlYXIoKTsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtC
dWlsZGVyLmgJKHJldmlzaW9uIDE4Mjc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dENodW5rQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQwLDE4ICs0MSwxMyBAQCBw
dWJsaWM6CiAgICAgU1ZHVGV4dENodW5rQnVpbGRlcigpOwogCiAgICAgY29uc3QgVmVjdG9yPFNW
R1RleHRDaHVuaz4mIHRleHRDaHVua3MoKSBjb25zdCB7IHJldHVybiBtX3RleHRDaHVua3M7IH0K
LSAgICB2b2lkIHRyYW5zZm9ybWF0aW9uRm9yVGV4dEJveChTVkdJbmxpbmVUZXh0Qm94KiwgQWZm
aW5lVHJhbnNmb3JtJikgY29uc3Q7CisgICAgdW5zaWduZWQgdG90YWxDaGFyYWN0ZXJzKCkgY29u
c3Q7CisgICAgZmxvYXQgdG90YWxMZW5ndGgoKSBjb25zdDsKKyAgICBmbG9hdCB0b3RhbEFuY2hv
clNoaWZ0KCkgY29uc3Q7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybWF0aW9uRm9yVGV4
dEJveChTVkdJbmxpbmVUZXh0Qm94KikgY29uc3Q7CiAKLSAgICB2b2lkIGJ1aWxkVGV4dENodW5r
cyhWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMpOwotICAgIHZvaWQg
bGF5b3V0VGV4dENodW5rcyhWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94
ZXMpOwotCi1wcml2YXRlOgotICAgIHZvaWQgYWRkVGV4dENodW5rKFZlY3RvcjxTVkdJbmxpbmVU
ZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcywgdW5zaWduZWQgYm94UG9zaXRpb24sIHVuc2lnbmVk
IGJveENvdW50KTsKLSAgICB2b2lkIHByb2Nlc3NUZXh0Q2h1bmsoY29uc3QgU1ZHVGV4dENodW5r
Jik7Ci0KLSAgICB2b2lkIHByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24oYm9vbCBp
c1ZlcnRpY2FsVGV4dCwgZmxvYXQgdGV4dExlbmd0aFNoaWZ0LCBWZWN0b3I8U1ZHVGV4dEZyYWdt
ZW50PiYsIHVuc2lnbmVkJiBhdENoYXJhY3Rlcik7Ci0gICAgdm9pZCBwcm9jZXNzVGV4dEFuY2hv
ckNvcnJlY3Rpb24oYm9vbCBpc1ZlcnRpY2FsVGV4dCwgZmxvYXQgdGV4dEFuY2hvclNoaWZ0LCBW
ZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYpOwotICAgIHZvaWQgYnVpbGRTcGFjaW5nQW5kR2x5cGhz
VHJhbnNmb3JtKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0IHNjYWxlLCBjb25zdCBTVkdUZXh0
RnJhZ21lbnQmLCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2b2lkIGJ1aWxkVGV4dENodW5rcyhj
b25zdCBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMpOworICAgIHZv
aWQgbGF5b3V0VGV4dENodW5rcyhjb25zdCBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5l
TGF5b3V0Qm94ZXMpOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+IG1fdGV4
dENodW5rczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEVuZ2luZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0RW5naW5lLmNwcAkocmV2aXNpb24gMTgyNzU4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR1RleHRM
YXlvdXRFbmdpbmUuaCIKIAorI2luY2x1ZGUgIlBhdGhUcmF2ZXJzYWxTdGF0ZS5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1RleHRQYXRoLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR0lubGluZVRleHRCb3guaCIKQEAgLTE2MCw1OCArMTYxLDM5IEBAIGJvb2wgU1ZHVGV4
dExheW91dEVuZ2luZTo6cGFyZW50RGVmaW5lc1QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgU1ZHVGV4dExheW91dEVuZ2luZTo6YmVnaW5UZXh0UGF0aExheW91dChSZW5kZXJPYmplY3Qq
IG9iamVjdCwgU1ZHVGV4dExheW91dEVuZ2luZSYgbGluZUxheW91dCkKK3ZvaWQgU1ZHVGV4dExh
eW91dEVuZ2luZTo6YmVnaW5UZXh0UGF0aExheW91dChjb25zdCBSZW5kZXJTVkdUZXh0UGF0aCYg
dGV4dFBhdGgsIFNWR1RleHRMYXlvdXRFbmdpbmUmIGxpbmVMYXlvdXQpCiB7Ci0gICAgQVNTRVJU
KG9iamVjdCk7Ci0KICAgICBtX2luUGF0aExheW91dCA9IHRydWU7Ci0gICAgUmVuZGVyU1ZHVGV4
dFBhdGgmIHRleHRQYXRoID0gZG93bmNhc3Q8UmVuZGVyU1ZHVGV4dFBhdGg+KCpvYmplY3QpOwog
CiAgICAgbV90ZXh0UGF0aCA9IHRleHRQYXRoLmxheW91dFBhdGgoKTsKICAgICBpZiAobV90ZXh0
UGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKKwogICAgIG1fdGV4dFBhdGhTdGFydE9m
ZnNldCA9IHRleHRQYXRoLnN0YXJ0T2Zmc2V0KCk7CiAgICAgbV90ZXh0UGF0aExlbmd0aCA9IG1f
dGV4dFBhdGgubGVuZ3RoKCk7CiAgICAgaWYgKG1fdGV4dFBhdGhTdGFydE9mZnNldCA+IDAgJiYg
bV90ZXh0UGF0aFN0YXJ0T2Zmc2V0IDw9IDEpCiAgICAgICAgIG1fdGV4dFBhdGhTdGFydE9mZnNl
dCAqPSBtX3RleHRQYXRoTGVuZ3RoOwogCi0gICAgZmxvYXQgdG90YWxMZW5ndGggPSAwOwotICAg
IHVuc2lnbmVkIHRvdGFsQ2hhcmFjdGVycyA9IDA7Ci0KICAgICBsaW5lTGF5b3V0Lm1fY2h1bmtM
YXlvdXRCdWlsZGVyLmJ1aWxkVGV4dENodW5rcyhsaW5lTGF5b3V0Lm1fbGluZUxheW91dEJveGVz
KTsKLSAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rPiYgdGV4dENodW5rcyA9IGxpbmVMYXlv
dXQubV9jaHVua0xheW91dEJ1aWxkZXIudGV4dENodW5rcygpOwotCi0gICAgdW5zaWduZWQgc2l6
ZSA9IHRleHRDaHVua3Muc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgY29uc3QgU1ZHVGV4dENodW5rJiBjaHVuayA9IHRleHRDaHVua3Mu
YXQoaSk7Ci0KLSAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAgICAgICAgdW5zaWduZWQgY2hh
cmFjdGVycyA9IDA7Ci0gICAgICAgIGNodW5rLmNhbGN1bGF0ZUxlbmd0aChsZW5ndGgsIGNoYXJh
Y3RlcnMpOwotCi0gICAgICAgIC8vIEhhbmRsZSB0ZXh0LWFuY2hvciBhcyBhZGRpdGlvbmFsIHN0
YXJ0IG9mZnNldCBmb3IgdGV4dCBwYXRocy4KLSAgICAgICAgbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0
ICs9IGNodW5rLmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChsZW5ndGgpOwotCi0gICAgICAgIHRv
dGFsTGVuZ3RoICs9IGxlbmd0aDsKLSAgICAgICAgdG90YWxDaGFyYWN0ZXJzICs9IGNoYXJhY3Rl
cnM7Ci0gICAgfQogCisgICAgLy8gSGFuZGxlIHRleHQtYW5jaG9yIGFzIGFkZGl0aW9uYWwgc3Rh
cnQgb2Zmc2V0IGZvciB0ZXh0IHBhdGhzLgorICAgIG1fdGV4dFBhdGhTdGFydE9mZnNldCArPSBs
aW5lTGF5b3V0Lm1fY2h1bmtMYXlvdXRCdWlsZGVyLnRvdGFsQW5jaG9yU2hpZnQoKTsKICAgICBt
X3RleHRQYXRoQ3VycmVudE9mZnNldCA9IG1fdGV4dFBhdGhTdGFydE9mZnNldDsKIAogICAgIC8v
IEV2ZW50dWFsbHkgaGFuZGxlIHRleHRMZW5ndGggYWRqdXN0bWVudHMuCi0gICAgU1ZHTGVuZ3Ro
QWRqdXN0VHlwZSBsZW5ndGhBZGp1c3QgPSBTVkdMZW5ndGhBZGp1c3RVbmtub3duOwotICAgIGZs
b2F0IGRlc2lyZWRUZXh0TGVuZ3RoID0gMDsKLQotICAgIGlmIChTVkdUZXh0Q29udGVudEVsZW1l
bnQqIHRleHRDb250ZW50RWxlbWVudCA9IFNWR1RleHRDb250ZW50RWxlbWVudDo6ZWxlbWVudEZy
b21SZW5kZXJlcigmdGV4dFBhdGgpKSB7Ci0gICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3Ro
Q29udGV4dCh0ZXh0Q29udGVudEVsZW1lbnQpOwotICAgICAgICBsZW5ndGhBZGp1c3QgPSB0ZXh0
Q29udGVudEVsZW1lbnQtPmxlbmd0aEFkanVzdCgpOwotICAgICAgICBkZXNpcmVkVGV4dExlbmd0
aCA9IHRleHRDb250ZW50RWxlbWVudC0+c3BlY2lmaWVkVGV4dExlbmd0aCgpLnZhbHVlKGxlbmd0
aENvbnRleHQpOwotICAgIH0KKyAgICBhdXRvKiB0ZXh0Q29udGVudEVsZW1lbnQgPSBTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OmVsZW1lbnRGcm9tUmVuZGVyZXIoJnRleHRQYXRoKTsKKyAgICBpZiAo
IXRleHRDb250ZW50RWxlbWVudCkKKyAgICAgICAgcmV0dXJuOwogCisgICAgU1ZHTGVuZ3RoQ29u
dGV4dCBsZW5ndGhDb250ZXh0KHRleHRDb250ZW50RWxlbWVudCk7CisgICAgZmxvYXQgZGVzaXJl
ZFRleHRMZW5ndGggPSB0ZXh0Q29udGVudEVsZW1lbnQtPnNwZWNpZmllZFRleHRMZW5ndGgoKS52
YWx1ZShsZW5ndGhDb250ZXh0KTsKICAgICBpZiAoIWRlc2lyZWRUZXh0TGVuZ3RoKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobGVuZ3RoQWRqdXN0ID09IFNWR0xlbmd0aEFkanVzdFNwYWNp
bmcpCisgICAgZmxvYXQgdG90YWxMZW5ndGggPSBsaW5lTGF5b3V0Lm1fY2h1bmtMYXlvdXRCdWls
ZGVyLnRvdGFsTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdG90YWxDaGFyYWN0ZXJzID0gbGluZUxh
eW91dC5tX2NodW5rTGF5b3V0QnVpbGRlci50b3RhbENoYXJhY3RlcnMoKTsKKworICAgIGlmICh0
ZXh0Q29udGVudEVsZW1lbnQtPmxlbmd0aEFkanVzdCgpID09IFNWR0xlbmd0aEFkanVzdFNwYWNp
bmcpCiAgICAgICAgIG1fdGV4dFBhdGhTcGFjaW5nID0gKGRlc2lyZWRUZXh0TGVuZ3RoIC0gdG90
YWxMZW5ndGgpIC8gdG90YWxDaGFyYWN0ZXJzOwogICAgIGVsc2UKICAgICAgICAgbV90ZXh0UGF0
aFNjYWxpbmcgPSBkZXNpcmVkVGV4dExlbmd0aCAvIHRvdGFsTGVuZ3RoOwpAQCAtMjkwLDcgKzI3
Miw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6ZmluYWxpemVUcmFuc2YKIAogICAgICAg
ICB1bnNpZ25lZCBmcmFnbWVudENvdW50ID0gZnJhZ21lbnRzLnNpemUoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYWdtZW50Q291bnQ7ICsraSkgewotICAgICAgICAgICAg
bV9jaHVua0xheW91dEJ1aWxkZXIudHJhbnNmb3JtYXRpb25Gb3JUZXh0Qm94KHRleHRCb3gsIHRl
eHRCb3hUcmFuc2Zvcm1hdGlvbik7CisgICAgICAgICAgICB0ZXh0Qm94VHJhbnNmb3JtYXRpb24g
PSBtX2NodW5rTGF5b3V0QnVpbGRlci50cmFuc2Zvcm1hdGlvbkZvclRleHRCb3godGV4dEJveCk7
CiAgICAgICAgICAgICBpZiAodGV4dEJveFRyYW5zZm9ybWF0aW9uLmlzSWRlbnRpdHkoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEFTU0VSVChmcmFnbWVudHNbaV0u
bGVuZ3RoQWRqdXN0VHJhbnNmb3JtLmlzSWRlbnRpdHkoKSk7CkBAIC01NTMsMTQgKzUzNSwxNSBA
QCB2b2lkIFNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpCiAgICAgICAgICAgICBp
ZiAodGV4dFBhdGhPZmZzZXQgPiBtX3RleHRQYXRoTGVuZ3RoKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgICAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgICAgICAgICBGbG9hdFBv
aW50IHBvaW50ID0gbV90ZXh0UGF0aC5wb2ludEF0TGVuZ3RoKHRleHRQYXRoT2Zmc2V0LCBvayk7
Ci0gICAgICAgICAgICBBU1NFUlQob2spOworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFs
c2U7CisgICAgICAgICAgICBhdXRvIHRyYXZlcnNhbFN0YXRlKG1fdGV4dFBhdGgudHJhdmVyc2Fs
U3RhdGVBdExlbmd0aCh0ZXh0UGF0aE9mZnNldCwgc3VjY2VzcykpOworICAgICAgICAgICAgQVNT
RVJUKHN1Y2Nlc3MpOwogCisgICAgICAgICAgICBGbG9hdFBvaW50IHBvaW50ID0gdHJhdmVyc2Fs
U3RhdGUuY3VycmVudCgpOwogICAgICAgICAgICAgeCA9IHBvaW50LngoKTsKICAgICAgICAgICAg
IHkgPSBwb2ludC55KCk7Ci0gICAgICAgICAgICBhbmdsZSA9IG1fdGV4dFBhdGgubm9ybWFsQW5n
bGVBdExlbmd0aCh0ZXh0UGF0aE9mZnNldCwgb2spOwotICAgICAgICAgICAgQVNTRVJUKG9rKTsK
KworICAgICAgICAgICAgYW5nbGUgPSB0cmF2ZXJzYWxTdGF0ZS5ub3JtYWxBbmdsZSgpOwogCiAg
ICAgICAgICAgICAvLyBGb3IgdmVydGljYWwgdGV4dCBvbiBwYXRoLCB0aGUgYWN0dWFsIGFuZ2xl
IGhhcyB0byBiZSByb3RhdGVkIDkwIGRlZ3JlZXMgYW50aS1jbG9ja3dpc2UsIG5vdCB0aGUgb3Jp
ZW50YXRpb24gYW5nbGUhCiAgICAgICAgICAgICBpZiAobV9pc1ZlcnRpY2FsVGV4dCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2lu
ZS5oCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRFbmdpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsK
IGNsYXNzIFJlbmRlclNWR0lubGluZVRleHQ7CitjbGFzcyBSZW5kZXJTVkdUZXh0UGF0aDsKIGNs
YXNzIFNWR0VsZW1lbnQ7CiBjbGFzcyBTVkdJbmxpbmVUZXh0Qm94OwogY2xhc3MgU1ZHUmVuZGVy
U3R5bGU7CkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8U1ZHVGV4dExheW91
dEF0dHJpYnV0ZXMqPiYgbGF5b3V0QXR0cmlidXRlcygpIHsgcmV0dXJuIG1fbGF5b3V0QXR0cmli
dXRlczsgfQogICAgIFNWR1RleHRDaHVua0J1aWxkZXImIGNodW5rTGF5b3V0QnVpbGRlcigpIHsg
cmV0dXJuIG1fY2h1bmtMYXlvdXRCdWlsZGVyOyB9CiAKLSAgICB2b2lkIGJlZ2luVGV4dFBhdGhM
YXlvdXQoUmVuZGVyT2JqZWN0KiwgU1ZHVGV4dExheW91dEVuZ2luZSYgbGluZUxheW91dCk7Cisg
ICAgdm9pZCBiZWdpblRleHRQYXRoTGF5b3V0KGNvbnN0IFJlbmRlclNWR1RleHRQYXRoJiwgU1ZH
VGV4dExheW91dEVuZ2luZSYgbGluZUxheW91dCk7CiAgICAgdm9pZCBlbmRUZXh0UGF0aExheW91
dCgpOwogCiAgICAgdm9pZCBsYXlvdXRJbmxpbmVUZXh0Qm94KFNWR0lubGluZVRleHRCb3gqKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNw
cAkocmV2aXNpb24gMTgyNzU4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5j
bHVkZSAiUGF0aFRyYXZlcnNhbFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2Uu
aCIKICNpbmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdNUGF0aEVsZW1l
bnQuaCIKQEAgLTIxMiwxNiArMjEzLDE5IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
OmJ1aWxkVHJhbnMKIHsKICAgICBBU1NFUlQoIW1fYW5pbWF0aW9uUGF0aC5pc0VtcHR5KCkpOwog
Ci0gICAgYm9vbCBvayA9IGZhbHNlOworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgIGZs
b2F0IHBvc2l0aW9uT25QYXRoID0gbV9hbmltYXRpb25QYXRoLmxlbmd0aCgpICogcGVyY2VudGFn
ZTsKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbV9hbmltYXRpb25QYXRoLnBvaW50QXRMZW5n
dGgocG9zaXRpb25PblBhdGgsIG9rKTsKLSAgICBpZiAoIW9rKQorICAgIGF1dG8gdHJhdmVyc2Fs
U3RhdGUobV9hbmltYXRpb25QYXRoLnRyYXZlcnNhbFN0YXRlQXRMZW5ndGgocG9zaXRpb25PblBh
dGgsIHN1Y2Nlc3MpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybjsKKworICAg
IEZsb2F0UG9pbnQgcG9zaXRpb24gPSB0cmF2ZXJzYWxTdGF0ZS5jdXJyZW50KCk7CisgICAgZmxv
YXQgYW5nbGUgPSB0cmF2ZXJzYWxTdGF0ZS5ub3JtYWxBbmdsZSgpOworCiAgICAgdHJhbnNmb3Jt
LT50cmFuc2xhdGUocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkpOwogICAgIFJvdGF0ZU1vZGUg
cm90YXRlTW9kZSA9IHRoaXMtPnJvdGF0ZU1vZGUoKTsKICAgICBpZiAocm90YXRlTW9kZSAhPSBS
b3RhdGVBdXRvICYmIHJvdGF0ZU1vZGUgIT0gUm90YXRlQXV0b1JldmVyc2UpCiAgICAgICAgIHJl
dHVybjsKLSAgICBmbG9hdCBhbmdsZSA9IG1fYW5pbWF0aW9uUGF0aC5ub3JtYWxBbmdsZUF0TGVu
Z3RoKHBvc2l0aW9uT25QYXRoLCBvayk7CiAgICAgaWYgKHJvdGF0ZU1vZGUgPT0gUm90YXRlQXV0
b1JldmVyc2UpCiAgICAgICAgIGFuZ2xlICs9IDE4MDsKICAgICB0cmFuc2Zvcm0tPnJvdGF0ZShh
bmdsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVp
bGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJz
YWxTdGF0ZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDY4ICsyOSw1NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXI6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIoKQogICAgIDogbV90cmF2ZXJz
YWxTdGF0ZSgwKQorICAgICwgbV9zZWdtZW50SW5kZXgoMCkKIHsKIH0KIAogdm9pZCBTVkdQYXRo
VHJhdmVyc2FsU3RhdGVCdWlsZGVyOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9p
bnQsIGJvb2wsIFBhdGhDb29yZGluYXRlTW9kZSkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxT
dGF0ZSk7Ci0gICAgbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3RyYXZlcnNh
bFN0YXRlLT5tb3ZlVG8odGFyZ2V0UG9pbnQpOworICAgIG1fdHJhdmVyc2FsU3RhdGUtPnByb2Nl
c3NQYXRoRWxlbWVudChQYXRoRWxlbWVudE1vdmVUb1BvaW50LCAmdGFyZ2V0UG9pbnQpOwogfQog
CiB2b2lkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmxpbmVUbyhjb25zdCBGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlKQogewogICAgIEFTU0VSVChtX3Ry
YXZlcnNhbFN0YXRlKTsKLSAgICBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoICs9IG1f
dHJhdmVyc2FsU3RhdGUtPmxpbmVUbyh0YXJnZXRQb2ludCk7CisgICAgbV90cmF2ZXJzYWxTdGF0
ZS0+cHJvY2Vzc1BhdGhFbGVtZW50KFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQsICZ0YXJnZXRQ
b2ludCk7CiB9CiAKIHZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y3VydmVUb0N1
YmljKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBj
b25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlKQogeworICAg
IEZsb2F0UG9pbnQgcG9pbnRzW10gPSB7IHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCB9Owog
ICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKLSAgICBtX3RyYXZlcnNhbFN0YXRlLT5tX3Rv
dGFsTGVuZ3RoICs9IG1fdHJhdmVyc2FsU3RhdGUtPmN1YmljQmV6aWVyVG8ocG9pbnQxLCBwb2lu
dDIsIHRhcmdldFBvaW50KTsKKyAgICBtX3RyYXZlcnNhbFN0YXRlLT5wcm9jZXNzUGF0aEVsZW1l
bnQoUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQsIHBvaW50cyk7CiB9CiAKIHZvaWQgU1ZHUGF0
aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y2xvc2VQYXRoKCkKIHsKICAgICBBU1NFUlQobV90cmF2
ZXJzYWxTdGF0ZSk7Ci0gICAgbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3Ry
YXZlcnNhbFN0YXRlLT5jbG9zZVN1YnBhdGgoKTsKKyAgICBtX3RyYXZlcnNhbFN0YXRlLT5wcm9j
ZXNzUGF0aEVsZW1lbnQoUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGgsIG51bGxwdHIpOwogfQogCiB2
b2lkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnNldERlc2lyZWRMZW5ndGgoZmxvYXQg
ZGVzaXJlZExlbmd0aCkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7Ci0gICAgbV90
cmF2ZXJzYWxTdGF0ZS0+bV9kZXNpcmVkTGVuZ3RoID0gZGVzaXJlZExlbmd0aDsKKyAgICBtX3Ry
YXZlcnNhbFN0YXRlLT5zZXREZXNpcmVkTGVuZ3RoKGRlc2lyZWRMZW5ndGgpOwogfQogCiBib29s
IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmNvbnRpbnVlQ29uc3VtaW5nKCkKIHsKICAg
ICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7ICAgIAotICAgIG1fdHJhdmVyc2FsU3RhdGUtPnBy
b2Nlc3NTZWdtZW50KCk7Ci0gICAgcmV0dXJuICFtX3RyYXZlcnNhbFN0YXRlLT5tX3N1Y2Nlc3M7
Ci19Ci0KLXZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6aW5jcmVtZW50UGF0aFNl
Z21lbnRDb3VudCgpCi17Ci0gICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwotICAgICsrbV90
cmF2ZXJzYWxTdGF0ZS0+bV9zZWdtZW50SW5kZXg7Ci19Ci0KLXVuc2lnbmVkIFNWR1BhdGhUcmF2
ZXJzYWxTdGF0ZUJ1aWxkZXI6OnBhdGhTZWdtZW50SW5kZXgoKQotewotICAgIEFTU0VSVChtX3Ry
YXZlcnNhbFN0YXRlKTsKLSAgICByZXR1cm4gbV90cmF2ZXJzYWxTdGF0ZS0+bV9zZWdtZW50SW5k
ZXg7CisgICAgcmV0dXJuICFtX3RyYXZlcnNhbFN0YXRlLT5zdWNjZXNzKCk7CiB9CiAKIGZsb2F0
IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnRvdGFsTGVuZ3RoKCkKIHsKICAgICBBU1NF
UlQobV90cmF2ZXJzYWxTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fdHJhdmVyc2FsU3RhdGUtPm1fdG90
YWxMZW5ndGg7CisgICAgcmV0dXJuIG1fdHJhdmVyc2FsU3RhdGUtPnRvdGFsTGVuZ3RoKCk7CiB9
CiAKIFNWR1BvaW50IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1cnJlbnRQb2ludCgp
CiB7CiAgICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwotICAgIHJldHVybiBtX3RyYXZlcnNh
bFN0YXRlLT5tX2N1cnJlbnQ7CisgICAgcmV0dXJuIG1fdHJhdmVyc2FsU3RhdGUtPmN1cnJlbnQo
KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZl
cnNhbFN0YXRlQnVpbGRlci5oCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwx
NSArMzIsMTUgQEAgY2xhc3MgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlciA6IHB1YgogcHVi
bGljOgogICAgIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIoKTsKIAotICAgIHVuc2lnbmVk
IHBhdGhTZWdtZW50SW5kZXgoKTsKKyAgICB1bnNpZ25lZCBwYXRoU2VnbWVudEluZGV4KCkgeyBy
ZXR1cm4gbV9zZWdtZW50SW5kZXg7IH0KICAgICBmbG9hdCB0b3RhbExlbmd0aCgpOwogICAgIFNW
R1BvaW50IGN1cnJlbnRQb2ludCgpOwogCiAgICAgdm9pZCBzZXRDdXJyZW50VHJhdmVyc2FsU3Rh
dGUoUGF0aFRyYXZlcnNhbFN0YXRlKiB0cmF2ZXJzYWxTdGF0ZSkgeyBtX3RyYXZlcnNhbFN0YXRl
ID0gdHJhdmVyc2FsU3RhdGU7IH0KICAgICB2b2lkIHNldERlc2lyZWRMZW5ndGgoZmxvYXQpOwot
ICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnRQYXRoU2VnbWVudENvdW50KCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGluY3JlbWVudFBhdGhTZWdtZW50Q291bnQoKSBvdmVycmlkZSB7ICsr
bV9zZWdtZW50SW5kZXg7IH0KICAgICB2aXJ0dWFsIGJvb2wgY29udGludWVDb25zdW1pbmcoKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIG92ZXJyaWRlIHsgbV90cmF2ZXJz
YWxTdGF0ZSA9IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIG92ZXJyaWRlIHsgbV90
cmF2ZXJzYWxTdGF0ZSA9IG51bGxwdHIsIG1fc2VnbWVudEluZGV4ID0gMDsgfQogCiBwcml2YXRl
OgogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZy9Ob3JtYWxpemVkUGFyc2luZyBtb2Rl
cy4KQEAgLTU5LDYgKzU5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oZmxv
YXQsIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29y
ZGluYXRlTW9kZSkgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgUGF0
aFRyYXZlcnNhbFN0YXRlKiBtX3RyYXZlcnNhbFN0YXRlOworICAgIHVuc2lnbmVkIG1fc2VnbWVu
dEluZGV4OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMTgyNzU4KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNyAr
Mjg1LDcgQEAgYm9vbCBnZXRTVkdQYXRoU2VnQXRMZW5ndGhGcm9tU1ZHUGF0aEJ5dAogICAgIGlm
IChzdHJlYW0tPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUGF0aFRy
YXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2Fs
U2VnbWVudEF0TGVuZ3RoKTsKKyAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUo
UGF0aFRyYXZlcnNhbFN0YXRlOjpBY3Rpb246OlNlZ21lbnRBdExlbmd0aCk7CiAgICAgU1ZHUGF0
aFRyYXZlcnNhbFN0YXRlQnVpbGRlciogYnVpbGRlciA9IGdsb2JhbFNWR1BhdGhUcmF2ZXJzYWxT
dGF0ZUJ1aWxkZXIodHJhdmVyc2FsU3RhdGUsIGxlbmd0aCk7CiAKICAgICBhdXRvIHNvdXJjZSA9
IHN0ZDo6bWFrZV91bmlxdWU8U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U+KHN0cmVhbSk7CkBAIC0z
MDIsNyArMzAyLDcgQEAgYm9vbCBnZXRUb3RhbExlbmd0aE9mU1ZHUGF0aEJ5dGVTdHJlYW0oUwog
ICAgIGlmIChzdHJlYW0tPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
UGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJh
dmVyc2FsVG90YWxMZW5ndGgpOworICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0
ZShQYXRoVHJhdmVyc2FsU3RhdGU6OkFjdGlvbjo6VG90YWxMZW5ndGgpOwogICAgIFNWR1BhdGhU
cmF2ZXJzYWxTdGF0ZUJ1aWxkZXIqIGJ1aWxkZXIgPSBnbG9iYWxTVkdQYXRoVHJhdmVyc2FsU3Rh
dGVCdWlsZGVyKHRyYXZlcnNhbFN0YXRlLCAwKTsKIAogICAgIGF1dG8gc291cmNlID0gc3RkOjpt
YWtlX3VuaXF1ZTxTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZT4oc3RyZWFtKTsKQEAgLTMxOSw3ICsz
MTksNyBAQCBib29sIGdldFBvaW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtCiAgICAgaWYg
KHN0cmVhbS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQYXRoVHJh
dmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxQ
b2ludEF0TGVuZ3RoKTsKKyAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0
aFRyYXZlcnNhbFN0YXRlOjpBY3Rpb246OlZlY3RvckF0TGVuZ3RoKTsKICAgICBTVkdQYXRoVHJh
dmVyc2FsU3RhdGVCdWlsZGVyKiBidWlsZGVyID0gZ2xvYmFsU1ZHUGF0aFRyYXZlcnNhbFN0YXRl
QnVpbGRlcih0cmF2ZXJzYWxTdGF0ZSwgbGVuZ3RoKTsKIAogICAgIGF1dG8gc291cmNlID0gc3Rk
OjptYWtlX3VuaXF1ZTxTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZT4oc3RyZWFtKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
ODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgwLDcgKzI4MCw3IEBAIGJvb2wgU1ZHVGV4dENvbnRlbnRFbGVt
ZW50OjpzZWxmSGFzUmVsYXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotU1ZHVGV4dENvbnRlbnRF
bGVtZW50KiBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmVsZW1lbnRGcm9tUmVuZGVyZXIoUmVuZGVy
T2JqZWN0KiByZW5kZXJlcikKK1NWR1RleHRDb250ZW50RWxlbWVudCogU1ZHVGV4dENvbnRlbnRF
bGVtZW50OjplbGVtZW50RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CiB7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oCShyZXZpc2lvbiAxODI3
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIGludCBnZXRDaGFyTnVtQXRQ
b3NpdGlvbihjb25zdCBTVkdQb2ludCYpOwogICAgIHZvaWQgc2VsZWN0U3ViU3RyaW5nKHVuc2ln
bmVkIGNoYXJudW0sIHVuc2lnbmVkIG5jaGFycywgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgc3Rh
dGljIFNWR1RleHRDb250ZW50RWxlbWVudCogZWxlbWVudEZyb21SZW5kZXJlcihSZW5kZXJPYmpl
Y3QqKTsKKyAgICBzdGF0aWMgU1ZHVGV4dENvbnRlbnRFbGVtZW50KiBlbGVtZW50RnJvbVJlbmRl
cmVyKGNvbnN0IFJlbmRlck9iamVjdCopOwogCiAgICAgLy8gdGV4dExlbmd0aCBpcyBub3QgZGVj
bGFyZWQgdXNpbmcgdGhlIHN0YW5kYXJkIERFQ0xBUkVfQU5JTUFURURfTEVOR1RIIG1hY3JvCiAg
ICAgLy8gYXMgaXRzIGdldHRlciBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIChyZXR1cm4gZ2V0Q29t
cHV0ZWRUZXh0TGVuZ3RoKCksIGluc3RlYWQgb2YgbV90ZXh0TGVuZ3RoKS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250759</attachid>
            <date>2015-04-14 17:02:03 -0700</date>
            <delta_ts>2015-04-14 17:28:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141570-20150414170106.patch</filename>
            <type>text/plain</type>
            <size>68090</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODI4MTQpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE1LTA0LTE0ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgdGV4
dFBhdGggbGF5b3V0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTcwLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEN1dCBkb3duIHRoZSB0aW1lIHNwZW50IGluIHRy
YXZlcnNpbmcgdGhlIHBhdGggZm9yIHRleHQgYnkgNTAlLiBJbnN0ZWFkCisgICAgICAgIG9mIHRy
YXZlcnNpbmcgdGhlIHBhdGggdHdpY2UgYXQgYSBjZXJ0YWluIGxlbmd0aDogb25lIHRpbWUgZm9y
IHRoZSBwb3NpdGlvbgorICAgICAgICBhbmQgdGhlIHNlY29uZCB0aW1lIGZvciB0aGUgYW5nbGUs
IHdlIGNhbiBtZXJnZSB0aGVzZSB0d28gcGFzc2VzIGludG8gb25lLgorCisgICAgICAgICogU1ZH
L1RleHRPblBhdGhTaW1wbGUuaHRtbDogQWRkZWQuCisgICAgICAgICogU1ZHL3Jlc291cmNlcy9U
ZXh0T25QYXRoU2ltcGxlLnN2ZzogQWRkZWQuCisKIDIwMTUtMDQtMTMgIFphbGFuIEJ1anRhcyAg
PHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhciB1cCB0aGUgdGVzdCBjb250ZW50IHdo
ZW4gdGVzdCBpcyBkb25lLgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9TVkcvVGV4dE9uUGF0aFNp
bXBsZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvU1ZHL1RleHRPblBhdGhT
aW1wbGUuaHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvU1ZHL1RleHRPblBh
dGhTaW1wbGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgUGVyZlRl
c3RSdW5uZXIubWVhc3VyZVBhZ2VMb2FkVGltZSh7cGF0aDogInJlc291cmNlcy9UZXh0T25QYXRo
U2ltcGxlLnN2ZyJ9KTsKKyAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL1NWRy9yZXNvdXJjZXMvVGV4dE9uUGF0aFNpbXBsZS5zdmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
UGVyZm9ybWFuY2VUZXN0cy9TVkcvcmVzb3VyY2VzL1RleHRPblBhdGhTaW1wbGUuc3ZnCShyZXZp
c2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9TVkcvcmVzb3VyY2VzL1RleHRPblBhdGhTaW1w
bGUuc3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKzxzdmcgd2lkdGg9IjEwMCUi
IGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDQwMDAgMjUwMCIKKyAgICAgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAKKyAgICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGxpbmsiPgorICA8ZGVmcz4KKyAgICA8cGF0aCBpZD0iU2ltcGxlUGF0aCIKKyAg
ICAgIGQ9Ik0gMTAwICAyMDAgCisgICAgICAgICBDIDIwMCAgMTAwIDMwMCAgICAwICA0MDAgIDEw
MAorICAgICAgICAgQyA1MDAgIDIwMCA2MDAgIDMwMCAgNzAwICAyMDAKKyAgICAgICAgIEMgODAw
ICAxMDAgOTAwICAgIDAgIDEwMDAgMTAwCisgICAgICAgICBDIDExMDAgMjAwIDEyMDAgMzAwICAx
MzAwIDIwMAorICAgICAgICAgQyAxNDAwIDEwMCAxNTAwICAgMCAgMTYwMCAxMDAKKyAgICAgICAg
IEMgMTcwMCAyMDAgMTgwMCAzMDAgIDE5MDAgMjAwIi8+CisgIDwvZGVmcz4KKworICA8ZyBpZD0i
VGV4dE9uUGF0aDI1Ij4KKyAgICA8ZyBpZD0iVGV4dE9uUGF0aDUiPgorICAgICAgPGcgaWQ9IlRl
eHRPblBhdGgiPgorICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNTaW1wbGVQYXRoIiBmaWxsPSJu
b25lIiBzdHJva2U9InJlZCIvPgorICAgICAgICA8dGV4dCBmb250LWZhbWlseT0iVmVyZGFuYSIg
Zm9udC1zaXplPSI0Mi41Ij4KKyAgICAgICAgICA8dGV4dFBhdGggeGxpbms6aHJlZj0iI1NpbXBs
ZVBhdGgiPgorICAgICAgICAgICAgV2UgZ28gdXAsIHRoZW4gd2UgZ28gZG93biwgdGhlbiB1cCBh
Z2FpbiwgdGhlbiB3ZSBnbyBkb3duLCB0aGVuIHdlIHVwIGFnYWluLCB0aGVuIHdlIGdvIGRvd24u
CisgICAgICAgICAgPC90ZXh0UGF0aD4KKyAgICAgICAgPC90ZXh0PgorICAgICAgPC9nPgorICAg
ICAgPHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw0
MCkiLz4KKyAgICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGgiIHRyYW5zZm9ybT0idHJh
bnNsYXRlKDAsODApIi8+CisgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoIiB0cmFu
c2Zvcm09InRyYW5zbGF0ZSgwLDEyMCkiLz4KKyAgICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRP
blBhdGgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMTYwKSIvPgorICAgIDwvZz4KKyAgCisgICAg
PHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0aDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjAw
KSIvPgorICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGg1IiB0cmFuc2Zvcm09InRyYW5z
bGF0ZSgwLDQwMCkiLz4KKyAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoNSIgdHJhbnNm
b3JtPSJ0cmFuc2xhdGUoMCw2MDApIi8+CisgICAgPHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0
aDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsODAwKSIvPgorICA8L2c+CisKKyAgPHVzZSB4bGlu
azpocmVmPSIjVGV4dE9uUGF0aDI1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDAwLDApIi8+Cisg
IDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGgyNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwx
MjAwKSIvPgorICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoMjUiIHRyYW5zZm9ybT0idHJh
bnNsYXRlKDIwMDAsMTIwMCkiLz4KKworICA8cmVjdCB4PSIxIiB5PSIxIiB3aWR0aD0iMzk5OSIg
aGVpZ2h0PSIyNDk5IiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIi
IC8+Cis8L3N2Zz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjgxNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5OCBAQAorMjAxNS0w
NC0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAg
ICAgIHRleHRQYXRoIGxheW91dCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTU3MC4KKworICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBUaGUgYm90dGxlbmVjayBvZiB0aGUg
dGV4dC1vbi1wYXRoIHBlcmZvcm1hbmNlIGlzIHRoZSBwb3NpdGlvbiBhbmQgYW5nbGUKKyAgICAg
ICAgY2FsY3VsYXRpb25zIGZvciBldmVyeSBzaW5nbGUgY2hhcmFjdGVyLiBJZiB0aGUgbnVtYmVy
IG9mIGNoYXJhY3RlcnMgaXMKKyAgICAgICAgJ24nIGFuZCB0aGUgbnVtYmVyIG9mIHBhdGggZWxl
bWVudHMgaXMgJ20nLCB0aGUgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NpbmcKKyAgICAgICAgdGhl
IHBhdGggZWxlbWVudHMgaXMgTygyIHggbiB4IG0pLiBXaGF0IG1ha2VzIGl0IHJlYWxseSB3b3Jz
ZSBpcywgZm9yIGV2ZXJ5CisgICAgICAgIGN1cnZlIHdlIGtlZXAgc3BsaXR0aW5nIHRoZSBjdXJ2
ZSB0aWxsIHRoZSBzcGxpdCBjdXJ2ZSBpcyBhbG1vc3QgYSBzdHJhaWdodAorICAgICAgICBsaW5l
LiBUaGUgY2hhbmdlcyB3ZSBuZWVkIHRvIGRvIGFyZToKKyAgICAgICAgMS4gTWVyZ2UgdGhlIHBv
c2l0aW9uIGFuZCB0aGUgYW5nbGUgdHJhdmVyc2FscyBpbiBvbmUgcGFzcyBzaW5jZSB0aGV5IGFy
ZQorICAgICAgICAgICByZXR1cm5pbmcgaW5mbyBmb3IgdGhlIHNhbWUgbGVuZ3RoIG9uIHRoZSBw
YXRoLiBUaGVyZSBpcyBhIGRlZ2VuZXJhdGUKKyAgICAgICAgICAgY2FzZSBmb3IgdGhlIHN0YXJ0
aW5nIHBvaW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIGFuZ2xlLiBUaGUgb3JpZ2luYWwKKyAgICAg
ICAgICAgY29kZSB3YXMgc29sdmluZyB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBhbiBlcHNpbG9u
IGluc3RlYWQgb2YgemVybyBidXQKKyAgICAgICAgICAgYmVjYXVzZSB0cmF2ZXJzaW5nIHRoZSBw
YXRoIGZvciBwb3NpdGlvbiBhbmQgYW5nbGUgYXJlIG5vdyBtZXJnZWQsIHdlCisgICAgICAgICAg
IHdpbGwgcGFzcyB6ZXJvIGZvciB0aGUgc3RhcnRpbmcgcG9pbnQgYXMgaXMuIEFsbCB3ZSBuZWVk
IGlzIHRvIG1vdmUgb25lCisgICAgICAgICAgIHN0ZXAgYWhlYWQgd2l0aG91dCBtb3ZpbmcgdGhl
IHBvc2l0aW9uLiBXZSBuZWVkIHRoZSBleHRyYSBzdGVwIGZvcndhcmQKKyAgICAgICAgICAgdG8g
Y2FsY3VsYXRlIHRoZSBzbG9wZSBvZiB0aGUgcGF0aCBhdCB0aGUgc3RhcnRpbmcgcG9pbnQuCisg
ICAgICAgIDIuIFdlIG5lZWQgdG8gYWRkIGEgbmV3IG1vZGUgdG8gdHJhdmVyc2luZyBhIHBhdGgu
IFRoZSBuZXcgbW9kZSB3aWxsIHRha2UKKyAgICAgICAgICAgYSB2ZWN0b3Igb2YgbGVuZ3RocyBh
bmQgcmV0dXJucyBhIHZlY3RvciBvZiBhcnJvdyB2ZWN0b3JzLiBFdmVyeSBhcnJvdworICAgICAg
ICAgICB2ZWN0b3IgcmVwcmVzZW50cyBhIHBvc2l0aW9uIGFuZCBhbiBhbmdsZSBvbiB0aGUgcGF0
aCBhdCBhIGNlcnRhaW4gbGVuZ3RoLgorICAgICAgICAgICBUaGlzIHJlcXVpcmVzIGNoYW5naW5n
IHRoZSBTVkdUZXh0TGF5b3V0RW5naW5lIHRvIGNhbGN1bGF0ZSB0aGUgbGVuZ3RocworICAgICAg
ICAgICBvZiB0aGUgY2hhcmFjdGVycyBvbiB0aGUgY3VydmUgZmlyc3QgYW5kIHRoZW4gcGFzc2lu
ZyBhbGwgb2YgdGhlbSB0byB0aGUKKyAgICAgICAgICAgcGF0aCB0cmF2ZXJzYWwgZnVuY3Rpb24u
IEluc3RlYWQgb2YgdHJhdmVyc2luZyB0aGUgcGF0aCBmb3IgZXZlcnkgbGVuZ3RoLAorICAgICAg
ICAgICB3ZSBhcmUgZ29pbmcgdG8gZ2V0IHRoZSByZXF1aXJlZCBwb2ludCBhbmQgYW5nbGUgZnJv
bSB0aGUgdmVjdG9yIG9mIGFycm93CisgICAgICAgICAgIHZlY3RvcnMuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoZSBmaXJzdCBmaXggb25seS4gVGhlIHNlY29uZCBvbmUg
d2lsbCByZXF1aXJlCisgICAgICAgIHJlZmFjdG9yaW5nIHRoZSBTVkdUZXh0TGF5b3V0RW5naW5l
IHNvIEkgYW0gZ29pbmcgdG8gYWRkcmVzcyBpdCBpbiBhCisgICAgICAgIGRpZmZlcmVudCBwYXRj
aC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbik6IEl0IGlzIGNsZWFuZXIgdG8gbW92ZSB0
aGUgZnVuY3Rpb24KKyAgICAgICAgb2YgdGhpcyBtZXRob2QgdG8gUGF0aFRyYXZlcnNhbFN0YXRl
Ojpwcm9jZXNzUGF0aEVsZW1lbnQoKS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRo
OjpsZW5ndGgpOiBVc2UgbmV3IGVudW0gQWN0aW9uIHZhbHVlIGFuZCBhY2Nlc3MgbWV0aG9kcy4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3Ro
KTogTmV3IGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlCisgICAgICAgIHRyYXZlcnNhbFN0YXRl
IGF0IGEgY2VydGFpbiBsZW5ndGggb24gYSBwYXRoLgorICAgICAgICAKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6OnBvaW50QXRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6bm9ybWFs
QW5nbGVBdExlbmd0aCk6IFVzZSB0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKCkgdG8gZ2V0CisgICAg
ICAgIHRoZSB0cmF2ZXJzYWxTdGF0ZSBhbmQgZnJvbSBpdCByZXR1cm4gZWl0aGVyIHRoZSBwb3Np
dGlvbiBvciB0aGUgYW5nbGUuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1BhdGguaDogRGVmaW5lIHRyYXZlcnNhbFN0YXRlQXRMZW5ndGgoKS4KKyAgICAgICAgCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmRpc3RhbmNlTGluZSk6IENvZGUgY2xlYW4gdXAuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6Y3VydmVMZW5ndGgpOiBNYWtlIHRoZSBzZXR0aW5nIG9mIG1fcHJldmlvdXMg
YW5kIG1fY3VycmVudCBoYXBwZW5zCisgICAgICAgIG9ubHkgaW4gdGhpcyBmdW5jdGlvbi4KKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OlBhdGhUcmF2ZXJz
YWxTdGF0ZSk6IEFkZCBhbiBvcHRpb25hbCBwYXJhbWV0ZXIKKyAgICAgICAgZm9yIHRoZSBkZXNp
cmVkIGxlbmd0aCBhbmQgbW92ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG90aGVyIG1lbWJl
cnMgdG8KKyAgICAgICAgdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpjbG9zZVN1YnBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjptb3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aFRyYXZlcnNhbFN0YXRlOjpsaW5lVG8pOiBBZGQgdGhlIGRpc3RhbmNlIHRvIHRoZSBtX3RvdGFs
TGVuZ3RoCisgICAgICAgIGluc3RlYWQgb2YgcmV0dXJuaW5nIGl0IHNpbmNlIHRoaXMgaXMgd2hh
dCBhbGwgdGhlIGNhbGxlcnMgd2VyZSBkb2luZy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGhUcmF2ZXJzYWxTdGF0ZTo6Y3ViaWNCZXppZXJUbyk6IEFkZCB0aGUgZGlzdGFuY2Ug
dG8gdGhlCisgICAgICAgIG1fdG90YWxMZW5ndGguIE1vdmUgdGhlIHNldHRpbmcgb2YgbV9wcmV2
aW91cyBhbmQgbV9jdXJyZW50IHRvIGN1cnZlTGVuZ3RoKCkuCisgICAgICAgIFJlbW92ZSB1bnVz
ZWQgbWVtYmVycyBtX2NvbnRyb2wxIGFuZCBtX2NvbnRyb2wyLgorCisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OnByb2Nlc3NTZWdtZW50KTogRGVsZXRlZC4gICAgICAgIAor
ICAgICAgICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpmaW5hbGl6ZUFwcGVuZFBhdGhF
bGVtZW50KTogQ3JlYXRlIGEgbmV3CisgICAgICAgIG5hbWUgZm9yIHRoZSBmdW5jdGlvbi4gSGFu
ZGxlIHRoZSBjYXNlIG9mIHRoZSBhbmdsZSBhdCB0aGUgc3RhcnRpbmcgcG9pbnQKKyAgICAgICAg
d2hlcmUgbV9kZXNpcmVkTGVuZ3RoIGlzIHNldCB0byB6ZXJvLiBUaGUgbmV3IGZsYWcgbV9pc1pl
cm9WZWN0b3Igd2lsbCBiZQorICAgICAgICBzZXQgdG8gbm90aWZ5IHRoZSBjYWxsZXIgdGhhdCB0
aGUgIG5leHQgaXRlcmF0aW9uIHdpbGwgYmUgdGhlIGxhc3Qgb25lIGFuZAorICAgICAgICBpdCBp
cyBvbmx5IG5lZWRlZCBmb3IgdGhlIGNhbGN1bGF0aW5nIHRoZSBhbmdsZSBvZiBhIHplcm8gdmVj
dG9yLiBtX2N1cnJlbnQKKyAgICAgICAgc2hvdWxkIG5vdCBjaGFuZ2UgYnkgdGhpcyBsYXN0IGl0
ZXJhdGlvbi4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6
OmFwcGVuZFBhdGhFbGVtZW50KTogVGhpcyBjb2RlIGlzIG1vdmVkIGZyb20KKyAgICAgICAgcGF0
aExlbmd0aEFwcGxpZXJGdW5jdGlvbigpLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1BhdGhFbGVtZW50KTogVGhpcyBmdW5jdGlvbiBpcyB1
c2VkCisgICAgICAgIGJ5IHRoZSBjbGFzcyBQYXRoLiBJdCBpcyBhIHdyYXBwZXIgZm9yIGFwcGVu
ZFBhdGhFbGVtZW50KCkuIElmIG1faXNaZXJvVmVjdG9yCisgICAgICAgIGlzIHNldCB3ZSBhcHBl
bmQgdGhlIG5ldyBlbGVtZW50IHRvIGEgY29weSBmb3IgdGhlIFBhdGhUcmF2ZXJzYWxTdGF0ZSBq
dXN0CisgICAgICAgIHRvIGdldCB0aGUgYW5nbGUgZm9yIHRoZSB6ZXJvIHZlY3Rvci4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oOiBDaGFuZ2UgdGhl
IGVudW0gdmFsdWVzIHRvIG5vdAorICAgICAgICBub3QgaW5jbHVkZSB0aGUgY2xhc3Mgb3IgdGhl
IGVudW0gY2xhc3MuIE1ha2UgdGhlIGRhdGEgbWVtYmVycyBwcml2YXRlIGFuZAorICAgICAgICBl
eHBvc2UgdGhlIG5lZWRlZCBvbmVzIHRocm91Z2ggYWNjZXNzIG1ldGhvZHMuIE1ha2UgYWxsIHRo
ZSBpbnRlcm5hbCBtZXRob2RzCisgICAgICAgIHRvIGJlIHByaXZhdGUuCisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpwcm9jZXNzUGF0aEVsZW1lbnQpOiAg
QW5vdGhlciB3cmFwcGVyIGZvcgorICAgICAgICBhcHBlbmRQYXRoRWxlbWVudCgpIHdoaWNoIGlz
IHVzZWQgYnkgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci4KKyAgICAgICAgCisgICAgICAg
IChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OmFjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OnNldEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
VHJhdmVyc2FsU3RhdGU6OmRlc2lyZWRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aFRy
YXZlcnNhbFN0YXRlOjpzZXREZXNpcmVkTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhU
cmF2ZXJzYWxTdGF0ZTo6c3VjY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2Fs
U3RhdGU6OnRvdGFsTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhUcmF2ZXJzYWxTdGF0
ZTo6Y3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6Om5vcm1h
bEFuZ2xlKTogTmV3IGFjY2VzcyBtZXRob2RzIHdoaWNoIGFyZSBub3cKKyAgICAgICAgbmVlZGVk
IGFmdGVyIG1ha2luZyB0aGUgZGF0YSBtZW1iZXJzIHByaXZhdGUuCisgICAgICAgIAorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdSb290SW5saW5lQm94OjpsYXlvdXRDaGFyYWN0ZXJzSW5UZXh0Qm94ZXMpOiBNYWtlIHRo
ZSBjYXN0aW5nCisgICAgICAgIG9mIHRoZSByZW5kZXJlciBvbiB0aGUgY2FsbGVyIHNpZGUuCisg
ICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKTogVGhlIGNvbnN0cnVjdG9y
IHNob3VsZCBhcHBlbmQgdGhlCisgICAgICAgIGVsZW1lbnRzIG9mIG1fYm94ZXMgaW5zdGVhZCBv
ZiBtYWtpbmcgdGhpcyBmcm9tIG91dHNpZGUgdGhlIGNsYXNzLgorICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRDaHVuazo6dG90YWxDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRDaHVuazo6dG90YWxMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4
dENodW5rOjpjYWxjdWxhdGVMZW5ndGgpOiBEZWxldGVkLgorICAgICAgICBSZXBsYWNlIGNhbGN1
bGF0ZUxlbmd0aCgpIGJ5IHRvdGFsQ2hhcmFjdGVycygpIGFuZCB0b3RhbExlbmd0aCgpIHRvIG1h
a2UKKyAgICAgICAgdGhlIGludGVyZmFjZSBjbGVhbmVyLgorICAgICAgICAKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRDaHVuazo6dG90YWxBbmNob3JTaGlmdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bms6OmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdCk6IERlbGV0ZWQuCisgICAg
ICAgIFJlbmFtZSB0aGUgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bms6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bms6
OnByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVGV4dENodW5rOjpidWlsZEJveFRyYW5zZm9ybWF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bms6OmJveFNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dENodW5rOjpwcm9jZXNzVGV4dEFuY2hvckNvcnJlY3Rpb24pOgorICAg
ICAgICBNb3ZlIHRoZSBjaHVuayBsYXlvdXQgY29kZSBmcm9tIFNWR1RleHRDaHVua0J1aWxkZXI6
OmxheW91dFRleHRDaHVua3MoKQorICAgICAgICB0byB0aGUgU1ZHVGV4dENodW5rOjpsYXlvdXQo
KS4gTW92ZSBhbGwgdGhlIGhlbHBlciBmdW5jdGlvbnMgYXMgd2VsbC4KKyAgICAgICAgCisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRDaHVuazo6aGFzVGV4dEFuY2hvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1
bms6OmJveGVzKTogRGVsZXRlZC4KKyAgICAgICAgQWRkIHRoZSBuZXcgbWV0aG9kcyBhbmQgY2hh
bmdlIG1vc3Qgb2YgdGhlIHB1YmxpYyBtZXRob2RzIHRvIGJlIHByaXZhdGUuCisgICAgICAgIAor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtCdWlsZGVyOjp0b3RhbENoYXJhY3RlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6dG90YWxMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6dG90YWxBbmNob3JTaGlmdCk6IFRoaXMgY29k
ZSBpcyBtb3ZlZCBmcm9tCisgICAgICAgIFNWR1RleHRMYXlvdXRFbmdpbmUuIEl0IHNjYW5zIHRo
ZSBib3hlcyBzdG9yZWQgaW4gdGhlIFNWR1RleHRDaHVua0J1aWxkZXIKKyAgICAgICAgYW5kIHN1
bXMgdXAgdGhlIHRvdGFsIHZhbHVlcy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpTVkdU
ZXh0Q2h1bmtCdWlsZGVyOjp0cmFuc2Zvcm1hdGlvbkZvclRleHRCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6YnVpbGRUZXh0Q2h1bmtzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRDaHVua0J1aWxkZXI6OmxheW91dFRleHRDaHVua3MpOiBDb2RlIGNsZWFu
IHVwLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVua0J1aWxkZXI6OmFk
ZFRleHRDaHVuayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtCdWls
ZGVyOjpwcm9jZXNzVGV4dENodW5rKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rl
eHRDaHVua0J1aWxkZXI6OnByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vzc1RleHRB
bmNob3JDb3JyZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVu
a0J1aWxkZXI6OmJ1aWxkU3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybSk6IERlbGV0ZWQuCisgICAg
ICAgIFRoaXMgY29kZSBub3cgbGl2ZXMgaW4gU1ZHVGV4dENodW5rLgorICAgICAgICAKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuaDogQWRkIG5ldyBtZXRob2Rz
IGZvciBjb2RlIHdoaWNoIHdhcworICAgICAgICBtb3ZlZCBmcm9tIFNWR1RleHRMYXlvdXRFbmdp
bmUgYW5kIHJlbW92ZSBtZXRob2RzIGZvciBjb2RlIHdoaWNoIHdhcyByZW1vdmVkCisgICAgICAg
IHRvIFNWR1RleHRDaHVuay4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdp
bmU6OmJlZ2luVGV4dFBhdGhMYXlvdXQpOiBVc2UgdGhlIHN1bSB1cCBtZXRob2RzCisgICAgICAg
IGZyb20gU1ZHVGV4dENodW5rQnVpbGRlciBpbnN0ZWFkIG9mIGxvb3BpbmcgdGhyb3VnaCB0aGUg
Y2h1bmtzLiBBbHNvIGdldCBhCisgICAgICAgIGNsZWFuIG9yZGVyIGZvciBkZWZpbmluZyB2YXJp
YWJsZXMgYW5kIGRvaW5nIHRoZSBjYWxjdWxhdGlvbnMuCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dExheW91dEVuZ2luZTo6ZmluYWxpemVUcmFuc2Zvcm1NYXRyaWNlcyk6IENv
ZGUgY2xlYW4gdXAuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEVu
Z2luZTo6bGF5b3V0VGV4dE9uTGluZU9yUGF0aCk6IERvIGEgc2luZ2xlIHBhdGgKKyAgICAgICAg
dHJhdmVyc2FsIHRvIGdldCB0aGUgcG9zaXRpb24gYW5kIHRoZSBhbmdsZSBmb3IgYSBsZW5ndGgg
b24gYSBwYXRoLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRFbmdpbmUuaDogRm9yY2UgcGFzc2luZyBhIFJlbmRlclNWR1RleHRQYXRoJgorICAgICAgICB0
byBiZWdpblRleHRQYXRoTGF5b3V0KCkgaW5zdGVhZCBvZiBSZW5kZXJPYmplY3QqIGFuZCB0aGVu
IGNhc3RpbmcgaXQuCisgICAgICAgIAorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlTW90aW9uRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YnVp
bGRUcmFuc2Zvcm1Gb3JQcm9ncmVzcyk6IERvIGEgc2luZ2xlCisgICAgICAgIHBhdGggdHJhdmVy
c2FsIHRvIGdldCB0aGUgcG9zaXRpb24gYW5kIHRoZSBhbmdsZSBhdCBhIGxlbmd0aCBvbiBhIHBh
dGguCisgICAgICAgIAorICAgICAgICAqIHN2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OlNW
R1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlcjo6bW92ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhU
cmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmxpbmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
VHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y2xvc2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnNldERlc2lyZWRMZW5ndGgpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y29udGludWVDb25z
dW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6
dG90YWxMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVp
bGRlcjo6Y3VycmVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxT
dGF0ZUJ1aWxkZXI6OmluY3JlbWVudFBhdGhTZWdtZW50Q291bnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6cGF0aFNlZ21lbnRJbmRl
eCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnBhdGhT
ZWdtZW50SW5kZXgpOgorICAgICAgICBDb2RlIGNsZWFuIHVwLgorICAgICAgICAKKyAgICAgICAg
KiBzdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTVkdQYXRo
U2VnQXRMZW5ndGhGcm9tU1ZHUGF0aEJ5dGVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
VG90YWxMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBv
aW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKTogVXNlIG5ldyBUcmF2ZXJzYWxTdGF0ZTo6
QWN0aW9uCisgICAgICAgIGVudW0gdmFsdWVzLgorCiAyMDE1LTA0LTE0ICBSb2dlciBGb25nICA8
cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gVGltZSBudW1iZXJz
IG9uIG1lZGlhIGNvbnRyb2xzIG1vdmUgYXMgdGhleSB1cGRhdGUgb24gT1NYLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAJKHJldmlzaW9uIDE4Mjc1OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw1NCArNDIsMzIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIHZvaWQg
cGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbih2b2lkKiBpbmZvLCBjb25zdCBQYXRoRWxlbWVudCog
ZWxlbWVudCkKIHsKICAgICBQYXRoVHJhdmVyc2FsU3RhdGUmIHRyYXZlcnNhbFN0YXRlID0gKnN0
YXRpY19jYXN0PFBhdGhUcmF2ZXJzYWxTdGF0ZSo+KGluZm8pOwotICAgIGlmICh0cmF2ZXJzYWxT
dGF0ZS5tX3N1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFBvaW50KiBwb2ludHMg
PSBlbGVtZW50LT5wb2ludHM7Ci0gICAgZmxvYXQgc2VnbWVudExlbmd0aCA9IDA7Ci0gICAgc3dp
dGNoIChlbGVtZW50LT50eXBlKSB7Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1lbnRNb3ZlVG9Qb2lu
dDoKLSAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5tb3ZlVG8ocG9p
bnRzWzBdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRk
TGluZVRvUG9pbnQ6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUu
bGluZVRvKHBvaW50c1swXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQYXRo
RWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0g
dHJhdmVyc2FsU3RhdGUucXVhZHJhdGljQmV6aWVyVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9p
bnQ6Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUuY3ViaWNCZXpp
ZXJUbyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOgotICAgICAgICAgICAgc2Vn
bWVudExlbmd0aCA9IHRyYXZlcnNhbFN0YXRlLmNsb3NlU3VicGF0aCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIHRyYXZlcnNhbFN0YXRlLm1fdG90YWxMZW5ndGggKz0gc2VnbWVu
dExlbmd0aDsgCi0gICAgdHJhdmVyc2FsU3RhdGUucHJvY2Vzc1NlZ21lbnQoKTsKKyAgICB0cmF2
ZXJzYWxTdGF0ZS5wcm9jZXNzUGF0aEVsZW1lbnQoZWxlbWVudCk7CiB9CiAKIGZsb2F0IFBhdGg6
Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRl
KFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsVG90YWxMZW5ndGgpOworICAgIFBhdGhUcmF2
ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGU6OkFjdGlvbjo6VG90
YWxMZW5ndGgpOwogICAgIGFwcGx5KCZ0cmF2ZXJzYWxTdGF0ZSwgcGF0aExlbmd0aEFwcGxpZXJG
dW5jdGlvbik7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRlLm1fdG90YWxMZW5ndGg7CisgICAg
cmV0dXJuIHRyYXZlcnNhbFN0YXRlLnRvdGFsTGVuZ3RoKCk7CiB9CiAKLUZsb2F0UG9pbnQgUGF0
aDo6cG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAorUGF0aFRyYXZl
cnNhbFN0YXRlIFBhdGg6OnRyYXZlcnNhbFN0YXRlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29s
JiBzdWNjZXNzKSBjb25zdAogewotICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0
ZShQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNhbFBvaW50QXRMZW5ndGgpOwotICAgIHRyYXZl
cnNhbFN0YXRlLm1fZGVzaXJlZExlbmd0aCA9IGxlbmd0aDsKKyAgICBQYXRoVHJhdmVyc2FsU3Rh
dGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpBY3Rpb246OlZlY3RvckF0TGVu
Z3RoLCBsZW5ndGgpOwogICAgIGFwcGx5KCZ0cmF2ZXJzYWxTdGF0ZSwgcGF0aExlbmd0aEFwcGxp
ZXJGdW5jdGlvbik7Ci0gICAgb2sgPSB0cmF2ZXJzYWxTdGF0ZS5tX3N1Y2Nlc3M7Ci0gICAgcmV0
dXJuIHRyYXZlcnNhbFN0YXRlLm1fY3VycmVudDsKKyAgICBzdWNjZXNzID0gdHJhdmVyc2FsU3Rh
dGUuc3VjY2VzcygpOworICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0ZTsKIH0KIAotZmxvYXQgUGF0
aDo6bm9ybWFsQW5nbGVBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAorRmxv
YXRQb2ludCBQYXRoOjpwb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgc3VjY2Vzcykg
Y29uc3QKIHsKLSAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZl
cnNhbFN0YXRlOjpUcmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoKTsKLSAgICB0cmF2ZXJzYWxT
dGF0ZS5tX2Rlc2lyZWRMZW5ndGggPSBsZW5ndGggPyBsZW5ndGggOiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6ZXBzaWxvbigpOwotICAgIGFwcGx5KCZ0cmF2ZXJzYWxTdGF0ZSwgcGF0aExl
bmd0aEFwcGxpZXJGdW5jdGlvbik7Ci0gICAgb2sgPSB0cmF2ZXJzYWxTdGF0ZS5tX3N1Y2Nlc3M7
Ci0gICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRlLm1fbm9ybWFsQW5nbGU7CisgICAgcmV0dXJuIHRy
YXZlcnNhbFN0YXRlQXRMZW5ndGgobGVuZ3RoLCBzdWNjZXNzKS5jdXJyZW50KCk7Cit9CisKK2Zs
b2F0IFBhdGg6Om5vcm1hbEFuZ2xlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBzdWNjZXNz
KSBjb25zdAoreworICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKGxlbmd0aCwgc3Vj
Y2Vzcykubm9ybWFsQW5nbGUoKTsKIH0KIAogdm9pZCBQYXRoOjphZGRSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSwgUm91bmRl
ZFJlY3RTdHJhdGVneSBzdHJhdGVneSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXRoLmgJKHJldmlzaW9uIDE4Mjc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKICAgICBjbGFzcyBGbG9h
dFNpemU7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OworICAgIGNsYXNzIFBhdGhUcmF2ZXJz
YWxTdGF0ZTsKICAgICBjbGFzcyBSb3VuZGVkUmVjdDsKICAgICBjbGFzcyBTdHJva2VTdHlsZUFw
cGxpZXI7CiAKQEAgLTEwMCwxMCArMTAxLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwogICAgICAgICBGbG9hdFJlY3QgZmFz
dEJvdW5kaW5nUmVjdCgpIGNvbnN0OwogICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdS
ZWN0KFN0cm9rZVN0eWxlQXBwbGllciogPSAwKSBjb25zdDsKLSAgICAgICAgCisKICAgICAgICAg
ZmxvYXQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnRBdExlbmd0aChm
bG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKLSAgICAgICAgZmxvYXQgbm9ybWFsQW5nbGVB
dExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKKyAgICAgICAgUGF0aFRyYXZl
cnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBzdWNj
ZXNzKSBjb25zdDsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0
aCwgYm9vbCYgc3VjY2VzcykgY29uc3Q7CisgICAgICAgIGZsb2F0IG5vcm1hbEFuZ2xlQXRMZW5n
dGgoZmxvYXQgbGVuZ3RoLCBib29sJiBzdWNjZXNzKSBjb25zdDsKIAogICAgICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fcGF0aDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aFRyYXZlcnNhbFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCShyZXZpc2lvbiAxODI3NTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTM0LDcgKzM1LDkgQEAgc3RhdGljIGlubGluZSBGbG9hdFBvaW50IG1pZFBvaW50KGNvbnN0IAog
CiBzdGF0aWMgaW5saW5lIGZsb2F0IGRpc3RhbmNlTGluZShjb25zdCBGbG9hdFBvaW50JiBzdGFy
dCwgY29uc3QgRmxvYXRQb2ludCYgZW5kKQogewotICAgIHJldHVybiBzcXJ0ZigoZW5kLngoKSAt
IHN0YXJ0LngoKSkgKiAoZW5kLngoKSAtIHN0YXJ0LngoKSkgKyAoZW5kLnkoKSAtIHN0YXJ0Lnko
KSkgKiAoZW5kLnkoKSAtIHN0YXJ0LnkoKSkpOworICAgIGZsb2F0IGR4ID0gZW5kLngoKSAtIHN0
YXJ0LngoKTsKKyAgICBmbG9hdCBkeSA9IGVuZC55KCkgLSBzdGFydC55KCk7CisgICAgcmV0dXJu
IHNxcnRmKGR4ICogZHggKyBkeSAqIGR5KTsKIH0KIAogc3RydWN0IFF1YWRyYXRpY0JlemllciB7
CkBAIC0xMTQsMTEwICsxMTcsMTQ5IEBAIHN0cnVjdCBDdWJpY0JlemllciB7CiAvLyBBbm90aGVy
IGNoZWNrIHdoaWNoIGlzIHBvc3NpYmxlIHVwLWZyb250ICh0byBzZW5kIHVzIGRvd24gdGhlIGZh
c3QgcGF0aCkgd291bGQgYmUgdG8gY2hlY2sgaWYKIC8vIGFwcHJveGltYXRlRGlzdGFuY2UoKSAr
IGN1cnJlbnQgdG90YWwgZGlzdGFuY2UgPiBkZXNpcmVkIGRpc3RhbmNlCiB0ZW1wbGF0ZTxjbGFz
cyBDdXJ2ZVR5cGU+Ci1zdGF0aWMgZmxvYXQgY3VydmVMZW5ndGgoUGF0aFRyYXZlcnNhbFN0YXRl
JiB0cmF2ZXJzYWxTdGF0ZSwgQ3VydmVUeXBlIGN1cnZlKQorc3RhdGljIGZsb2F0IGN1cnZlTGVu
Z3RoKGNvbnN0IFBhdGhUcmF2ZXJzYWxTdGF0ZSYgdHJhdmVyc2FsU3RhdGUsIGNvbnN0IEN1cnZl
VHlwZSYgb3JpZ2luYWxDdXJ2ZSwgRmxvYXRQb2ludCYgcHJldmlvdXMsIEZsb2F0UG9pbnQmIGN1
cnJlbnQpCiB7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGN1cnZlU3RhY2tEZXB0aExpbWl0
ID0gMjA7Ci0KLSAgICBWZWN0b3I8Q3VydmVUeXBlPiBjdXJ2ZVN0YWNrOwotICAgIGN1cnZlU3Rh
Y2suYXBwZW5kKGN1cnZlKTsKLQorICAgIEN1cnZlVHlwZSBjdXJ2ZSA9IG9yaWdpbmFsQ3VydmU7
CisgICAgVmVjdG9yPEN1cnZlVHlwZSwgY3VydmVTdGFja0RlcHRoTGltaXQ+IGN1cnZlU3RhY2s7
CiAgICAgZmxvYXQgdG90YWxMZW5ndGggPSAwOwotICAgIGRvIHsKKworICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9IGN1cnZlLmFwcHJveGltYXRlRGlzdGFuY2UoKTsK
LSAgICAgICAgaWYgKChsZW5ndGggLSBkaXN0YW5jZUxpbmUoY3VydmUuc3RhcnQsIGN1cnZlLmVu
ZCkpID4ga1BhdGhTZWdtZW50TGVuZ3RoVG9sZXJhbmNlICYmIGN1cnZlU3RhY2suc2l6ZSgpIDw9
IGN1cnZlU3RhY2tEZXB0aExpbWl0KSB7CisKKyAgICAgICAgaWYgKChsZW5ndGggLSBkaXN0YW5j
ZUxpbmUoY3VydmUuc3RhcnQsIGN1cnZlLmVuZCkpID4ga1BhdGhTZWdtZW50TGVuZ3RoVG9sZXJh
bmNlICYmIGN1cnZlU3RhY2suc2l6ZSgpIDwgY3VydmVTdGFja0RlcHRoTGltaXQpIHsKICAgICAg
ICAgICAgIEN1cnZlVHlwZSBsZWZ0Q3VydmU7CiAgICAgICAgICAgICBDdXJ2ZVR5cGUgcmlnaHRD
dXJ2ZTsKICAgICAgICAgICAgIGN1cnZlLnNwbGl0KGxlZnRDdXJ2ZSwgcmlnaHRDdXJ2ZSk7CiAg
ICAgICAgICAgICBjdXJ2ZSA9IGxlZnRDdXJ2ZTsKICAgICAgICAgICAgIGN1cnZlU3RhY2suYXBw
ZW5kKHJpZ2h0Q3VydmUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdG90YWxMZW5n
dGggKz0gbGVuZ3RoOwotICAgICAgICAgICAgaWYgKHRyYXZlcnNhbFN0YXRlLm1fYWN0aW9uID09
IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsUG9pbnRBdExlbmd0aAotICAgICAgICAgICAg
IHx8IHRyYXZlcnNhbFN0YXRlLm1fYWN0aW9uID09IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVy
c2FsTm9ybWFsQW5nbGVBdExlbmd0aCkgewotICAgICAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRl
Lm1fcHJldmlvdXMgPSBjdXJ2ZS5zdGFydDsKLSAgICAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0
ZS5tX2N1cnJlbnQgPSBjdXJ2ZS5lbmQ7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYXZlcnNhbFN0
YXRlLm1fdG90YWxMZW5ndGggKyB0b3RhbExlbmd0aCA+IHRyYXZlcnNhbFN0YXRlLm1fZGVzaXJl
ZExlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsTGVuZ3RoOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY3VydmUgPSBjdXJ2ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAg
ICAgIGN1cnZlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KLSAgICB9IHdoaWxlICghY3VydmVTdGFjay5pc0VtcHR5KCkpOwotICAgIAorCisgICAg
ICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aDsKKyAgICAgICAgaWYgKHRyYXZlcnNhbFN0YXRlLmFj
dGlvbigpID09IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6QWN0aW9uOjpWZWN0b3JBdExlbmd0aCkgewor
ICAgICAgICAgICAgcHJldmlvdXMgPSBjdXJ2ZS5zdGFydDsKKyAgICAgICAgICAgIGN1cnJlbnQg
PSBjdXJ2ZS5lbmQ7CisgICAgICAgICAgICBpZiAodHJhdmVyc2FsU3RhdGUudG90YWxMZW5ndGgo
KSArIHRvdGFsTGVuZ3RoID4gdHJhdmVyc2FsU3RhdGUuZGVzaXJlZExlbmd0aCgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1cnZlU3RhY2suaXNF
bXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY3VydmUgPSBjdXJ2ZVN0YWNr
Lmxhc3QoKTsKKyAgICAgICAgY3VydmVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgfQorCisgICAg
aWYgKHRyYXZlcnNhbFN0YXRlLmFjdGlvbigpICE9IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6QWN0aW9u
OjpWZWN0b3JBdExlbmd0aCkgeworICAgICAgICBBU1NFUlQoY3VydmUuZW5kID09IG9yaWdpbmFs
Q3VydmUuZW5kKTsKKyAgICAgICAgcHJldmlvdXMgPSBjdXJ2ZS5zdGFydDsKKyAgICAgICAgY3Vy
cmVudCA9IGN1cnZlLmVuZDsKKyAgICB9CisKICAgICByZXR1cm4gdG90YWxMZW5ndGg7CiB9CiAK
LVBhdGhUcmF2ZXJzYWxTdGF0ZTo6UGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxBY3Rp
b24gYWN0aW9uKQorUGF0aFRyYXZlcnNhbFN0YXRlOjpQYXRoVHJhdmVyc2FsU3RhdGUoQWN0aW9u
IGFjdGlvbiwgZmxvYXQgZGVzaXJlZExlbmd0aCkKICAgICA6IG1fYWN0aW9uKGFjdGlvbikKLSAg
ICAsIG1fc3VjY2VzcyhmYWxzZSkKLSAgICAsIG1fdG90YWxMZW5ndGgoMCkKLSAgICAsIG1fc2Vn
bWVudEluZGV4KDApCi0gICAgLCBtX2Rlc2lyZWRMZW5ndGgoMCkKLSAgICAsIG1fbm9ybWFsQW5n
bGUoMCkKKyAgICAsIG1fZGVzaXJlZExlbmd0aChkZXNpcmVkTGVuZ3RoKQogeworICAgIEFTU0VS
VChhY3Rpb24gIT0gQWN0aW9uOjpUb3RhbExlbmd0aCB8fCAhZGVzaXJlZExlbmd0aCk7CiB9CiAK
LWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6Y2xvc2VTdWJwYXRoKCkKK3ZvaWQgUGF0aFRyYXZl
cnNhbFN0YXRlOjpjbG9zZVN1YnBhdGgoKQogewotICAgIGZsb2F0IGRpc3RhbmNlID0gZGlzdGFu
Y2VMaW5lKG1fY3VycmVudCwgbV9zdGFydCk7Ci0gICAgbV9jdXJyZW50ID0gbV9jb250cm9sMSA9
IG1fY29udHJvbDIgPSBtX3N0YXJ0OwotICAgIHJldHVybiBkaXN0YW5jZTsKKyAgICBtX3RvdGFs
TGVuZ3RoICs9IGRpc3RhbmNlTGluZShtX2N1cnJlbnQsIG1fc3RhcnQpOworICAgIG1fY3VycmVu
dCA9IG1fc3RhcnQ7CiB9CiAKLWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6bW92ZVRvKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBQYXRoVHJhdmVyc2FsU3RhdGU6Om1vdmVUbyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkKIHsKLSAgICBtX2N1cnJlbnQgPSBtX3N0YXJ0ID0gbV9jb250
cm9sMSA9IG1fY29udHJvbDIgPSBwb2ludDsKLSAgICByZXR1cm4gMDsKKyAgICBtX3ByZXZpb3Vz
ID0gbV9jdXJyZW50ID0gbV9zdGFydCA9IHBvaW50OwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2Fs
U3RhdGU6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aFRyYXZlcnNh
bFN0YXRlOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgZmxvYXQgZGlz
dGFuY2UgPSBkaXN0YW5jZUxpbmUobV9jdXJyZW50LCBwb2ludCk7Ci0gICAgbV9jdXJyZW50ID0g
bV9jb250cm9sMSA9IG1fY29udHJvbDIgPSBwb2ludDsKLSAgICByZXR1cm4gZGlzdGFuY2U7Cisg
ICAgbV90b3RhbExlbmd0aCArPSBkaXN0YW5jZUxpbmUobV9jdXJyZW50LCBwb2ludCk7CisgICAg
bV9jdXJyZW50ID0gcG9pbnQ7CiB9CiAKLWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cXVhZHJh
dGljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbCwgY29uc3QgRmxvYXRQb2lu
dCYgbmV3RW5kKQordm9pZCBQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKGNv
bnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCkKIHsK
LSAgICBmbG9hdCBkaXN0YW5jZSA9IGN1cnZlTGVuZ3RoPFF1YWRyYXRpY0Jlemllcj4oKnRoaXMs
IFF1YWRyYXRpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRyb2wsIG5ld0VuZCkpOwotCi0gICAg
bV9jb250cm9sMSA9IG5ld0NvbnRyb2w7Ci0gICAgbV9jb250cm9sMiA9IG5ld0VuZDsKLQotICAg
IGlmIChtX2FjdGlvbiAhPSBUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoICYmIG1fYWN0aW9uICE9IFRy
YXZlcnNhbE5vcm1hbEFuZ2xlQXRMZW5ndGgpIAotICAgICAgICBtX2N1cnJlbnQgPSBuZXdFbmQ7
CisgICAgbV90b3RhbExlbmd0aCArPSBjdXJ2ZUxlbmd0aDxRdWFkcmF0aWNCZXppZXI+KCp0aGlz
LCBRdWFkcmF0aWNCZXppZXIobV9jdXJyZW50LCBuZXdDb250cm9sLCBuZXdFbmQpLCBtX3ByZXZp
b3VzLCBtX2N1cnJlbnQpOworfQogCi0gICAgcmV0dXJuIGRpc3RhbmNlOwordm9pZCBQYXRoVHJh
dmVyc2FsU3RhdGU6OmN1YmljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDEs
IGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wyLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQp
Cit7CisgICAgbV90b3RhbExlbmd0aCArPSBjdXJ2ZUxlbmd0aDxDdWJpY0Jlemllcj4oKnRoaXMs
IEN1YmljQmV6aWVyKG1fY3VycmVudCwgbmV3Q29udHJvbDEsIG5ld0NvbnRyb2wyLCBuZXdFbmQp
LCBtX3ByZXZpb3VzLCBtX2N1cnJlbnQpOwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6
OmN1YmljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDEsIGNvbnN0IEZsb2F0
UG9pbnQmIG5ld0NvbnRyb2wyLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQpCitib29sIFBhdGhU
cmF2ZXJzYWxTdGF0ZTo6ZmluYWxpemVBcHBlbmRQYXRoRWxlbWVudCgpCiB7Ci0gICAgZmxvYXQg
ZGlzdGFuY2UgPSBjdXJ2ZUxlbmd0aDxDdWJpY0Jlemllcj4oKnRoaXMsIEN1YmljQmV6aWVyKG1f
Y3VycmVudCwgbmV3Q29udHJvbDEsIG5ld0NvbnRyb2wyLCBuZXdFbmQpKTsKKyAgICBpZiAobV9h
Y3Rpb24gPT0gQWN0aW9uOjpUb3RhbExlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgbV9jb250cm9sMSA9IG5ld0VuZDsKLSAgICBtX2NvbnRyb2wyID0gbmV3Q29udHJvbDI7Ci0g
Ci0gICAgaWYgKG1fYWN0aW9uICE9IFRyYXZlcnNhbFBvaW50QXRMZW5ndGggJiYgbV9hY3Rpb24g
IT0gVHJhdmVyc2FsTm9ybWFsQW5nbGVBdExlbmd0aCkgCi0gICAgICAgIG1fY3VycmVudCA9IG5l
d0VuZDsKKyAgICBpZiAobV9hY3Rpb24gPT0gQWN0aW9uOjpTZWdtZW50QXRMZW5ndGgpIHsKKyAg
ICAgICAgaWYgKG1fdG90YWxMZW5ndGggPj0gbV9kZXNpcmVkTGVuZ3RoKQorICAgICAgICAgICAg
bV9zdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1fc3VjY2VzczsKKyAgICB9CiAKLSAg
ICByZXR1cm4gZGlzdGFuY2U7Ci19CisgICAgQVNTRVJUKG1fYWN0aW9uID09IEFjdGlvbjo6VmVj
dG9yQXRMZW5ndGgpOwogCi12b2lkIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1NlZ21lbnQo
KQotewotICAgIGlmIChtX2FjdGlvbiA9PSBUcmF2ZXJzYWxTZWdtZW50QXRMZW5ndGggJiYgbV90
b3RhbExlbmd0aCA+PSBtX2Rlc2lyZWRMZW5ndGgpCi0gICAgICAgIG1fc3VjY2VzcyA9IHRydWU7
Ci0gICAgICAgIAotICAgIGlmICgobV9hY3Rpb24gPT0gVHJhdmVyc2FsUG9pbnRBdExlbmd0aCB8
fCBtX2FjdGlvbiA9PSBUcmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoKSAmJiBtX3RvdGFsTGVu
Z3RoID49IG1fZGVzaXJlZExlbmd0aCkgeworICAgIGlmIChtX3RvdGFsTGVuZ3RoID49IG1fZGVz
aXJlZExlbmd0aCkgewogICAgICAgICBmbG9hdCBzbG9wZSA9IEZsb2F0UG9pbnQobV9jdXJyZW50
IC0gbV9wcmV2aW91cykuc2xvcGVBbmdsZVJhZGlhbnMoKTsKLSAgICAgICAgaWYgKG1fYWN0aW9u
ID09IFRyYXZlcnNhbFBvaW50QXRMZW5ndGgpIHsKLSAgICAgICAgICAgIGZsb2F0IG9mZnNldCA9
IG1fZGVzaXJlZExlbmd0aCAtIG1fdG90YWxMZW5ndGg7Ci0gICAgICAgICAgICBtX2N1cnJlbnQu
bW92ZShvZmZzZXQgKiBjb3NmKHNsb3BlKSwgb2Zmc2V0ICogc2luZihzbG9wZSkpOwotICAgICAg
ICB9IGVsc2UKKyAgICAgICAgZmxvYXQgb2Zmc2V0ID0gbV9kZXNpcmVkTGVuZ3RoIC0gbV90b3Rh
bExlbmd0aDsKKyAgICAgICAgbV9jdXJyZW50Lm1vdmUob2Zmc2V0ICogY29zZihzbG9wZSksIG9m
ZnNldCAqIHNpbmYoc2xvcGUpKTsKKworICAgICAgICBpZiAoIW1faXNaZXJvVmVjdG9yICYmICFt
X2Rlc2lyZWRMZW5ndGgpCisgICAgICAgICAgICBtX2lzWmVyb1ZlY3RvciA9IHRydWU7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgbV9zdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgICAgIG1f
bm9ybWFsQW5nbGUgPSByYWQyZGVnKHNsb3BlKTsKLSAgICAgICAgbV9zdWNjZXNzID0gdHJ1ZTsK
KyAgICAgICAgfQogICAgIH0KKwogICAgIG1fcHJldmlvdXMgPSBtX2N1cnJlbnQ7CisgICAgcmV0
dXJuIG1fc3VjY2VzczsKK30KKworYm9vbCBQYXRoVHJhdmVyc2FsU3RhdGU6OmFwcGVuZFBhdGhF
bGVtZW50KFBhdGhFbGVtZW50VHlwZSB0eXBlLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBQYXRoRWxlbWVudE1vdmVUb1BvaW50Ogor
ICAgICAgICBtb3ZlVG8ocG9pbnRzWzBdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXRo
RWxlbWVudEFkZExpbmVUb1BvaW50OgorICAgICAgICBsaW5lVG8ocG9pbnRzWzBdKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ6CisgICAg
ICAgIHF1YWRyYXRpY0JlemllclRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQYXRoRWxlbWVudEFkZEN1cnZlVG9Qb2ludDoKKyAgICAgICAgY3ViaWNC
ZXppZXJUbyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQYXRoRWxlbWVudENsb3NlU3VicGF0aDoKKyAgICAgICAgY2xvc2VTdWJwYXRo
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmluYWxpemVBcHBl
bmRQYXRoRWxlbWVudCgpOworfQorCitib29sIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1Bh
dGhFbGVtZW50KFBhdGhFbGVtZW50VHlwZSB0eXBlLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMp
Cit7CisgICAgaWYgKG1fc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
bV9pc1plcm9WZWN0b3IpIHsKKyAgICAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0
YXRlKCp0aGlzKTsKKyAgICAgICAgbV9zdWNjZXNzID0gdHJhdmVyc2FsU3RhdGUuYXBwZW5kUGF0
aEVsZW1lbnQodHlwZSwgcG9pbnRzKTsKKyAgICAgICAgbV9ub3JtYWxBbmdsZSA9IHRyYXZlcnNh
bFN0YXRlLm1fbm9ybWFsQW5nbGU7CisgICAgICAgIHJldHVybiBtX3N1Y2Nlc3M7CisgICAgfQor
CisgICAgcmV0dXJuIGFwcGVuZFBhdGhFbGVtZW50KHR5cGUsIHBvaW50cyk7CiB9CiAKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2
ZXJzYWxTdGF0ZS5oCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw0NSArMjgs
NjAgQEAKICNkZWZpbmUgUGF0aFRyYXZlcnNhbFN0YXRlX2gKIAogI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJQYXRoLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
UGF0aFRyYXZlcnNhbFN0YXRlIHsKIHB1YmxpYzoKLSAgICBlbnVtIFBhdGhUcmF2ZXJzYWxBY3Rp
b24gewotICAgICAgICBUcmF2ZXJzYWxUb3RhbExlbmd0aCwKLSAgICAgICAgVHJhdmVyc2FsUG9p
bnRBdExlbmd0aCwKLSAgICAgICAgVHJhdmVyc2FsU2VnbWVudEF0TGVuZ3RoLAotICAgICAgICBU
cmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoCisgICAgZW51bSBjbGFzcyBBY3Rpb24geworICAg
ICAgICBUb3RhbExlbmd0aCwKKyAgICAgICAgVmVjdG9yQXRMZW5ndGgsCisgICAgICAgIFNlZ21l
bnRBdExlbmd0aCwKICAgICB9OwogCi0gICAgUGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJz
YWxBY3Rpb24pOwotCi0gICAgZmxvYXQgY2xvc2VTdWJwYXRoKCk7Ci0gICAgZmxvYXQgbW92ZVRv
KGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICBmbG9hdCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYp
OwotICAgIGZsb2F0IHF1YWRyYXRpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRy
b2wsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCk7Ci0gICAgZmxvYXQgY3ViaWNCZXppZXJUbyhj
b25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJv
bDIsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCk7Ci0gICAgCi0gICAgdm9pZCBwcm9jZXNzU2Vn
bWVudCgpOworICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZShBY3Rpb24sIGZsb2F0IGRlc2lyZWRMZW5n
dGggPSAwKTsKIAogcHVibGljOgotICAgIFBhdGhUcmF2ZXJzYWxBY3Rpb24gbV9hY3Rpb247Ci0g
ICAgYm9vbCBtX3N1Y2Nlc3M7CisgICAgYm9vbCBwcm9jZXNzUGF0aEVsZW1lbnQoUGF0aEVsZW1l
bnRUeXBlLCBjb25zdCBGbG9hdFBvaW50Kik7CisgICAgYm9vbCBwcm9jZXNzUGF0aEVsZW1lbnQo
Y29uc3QgUGF0aEVsZW1lbnQqIGVsZW1lbnQpIHsgcmV0dXJuIHByb2Nlc3NQYXRoRWxlbWVudChl
bGVtZW50LT50eXBlLCBlbGVtZW50LT5wb2ludHMpOyB9CisKKyAgICBBY3Rpb24gYWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9hY3Rpb247IH0KKyAgICB2b2lkIHNldEFjdGlvbihBY3Rpb24gYWN0
aW9uKSB7IG1fYWN0aW9uID0gYWN0aW9uOyB9CisgICAgZmxvYXQgZGVzaXJlZExlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVzaXJlZExlbmd0aDsgfQorICAgIHZvaWQgc2V0RGVzaXJlZExlbmd0
aChmbG9hdCBkZXNpcmVkTGVuZ3RoKSB7IG1fZGVzaXJlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGg7
IH0KKworICAgIC8vIFRyYXZlcnNpbmcgb3V0cHV0IC0tIHNob3VsZCBiZSByZWFkIG9ubHkKKyAg
ICBib29sIHN1Y2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3M7IH0KKyAgICBmbG9hdCB0
b3RhbExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxMZW5ndGg7IH0KKyAgICBGbG9hdFBv
aW50IGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAgICBmbG9hdCBub3Jt
YWxBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsQW5nbGU7IH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIGNsb3NlU3VicGF0aCgpOworICAgIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQm
KTsKKyAgICB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBxdWFkcmF0
aWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZv
aWQgY3ViaWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmKTsKKworICAgIGJvb2wgZmluYWxpemVBcHBlbmRQYXRoRWxlbWVudCgp
OworICAgIGJvb2wgYXBwZW5kUGF0aEVsZW1lbnQoUGF0aEVsZW1lbnRUeXBlLCBjb25zdCBGbG9h
dFBvaW50Kik7CisKK3ByaXZhdGU6CisgICAgQWN0aW9uIG1fYWN0aW9uOworICAgIGJvb2wgbV9z
dWNjZXNzIHsgZmFsc2UgfTsKIAogICAgIEZsb2F0UG9pbnQgbV9jdXJyZW50OwogICAgIEZsb2F0
UG9pbnQgbV9zdGFydDsKLSAgICBGbG9hdFBvaW50IG1fY29udHJvbDE7Ci0gICAgRmxvYXRQb2lu
dCBtX2NvbnRyb2wyOwogCi0gICAgZmxvYXQgbV90b3RhbExlbmd0aDsKLSAgICB1bnNpZ25lZCBt
X3NlZ21lbnRJbmRleDsKLSAgICBmbG9hdCBtX2Rlc2lyZWRMZW5ndGg7CisgICAgZmxvYXQgbV90
b3RhbExlbmd0aCB7IDAgfTsKKyAgICBmbG9hdCBtX2Rlc2lyZWRMZW5ndGggeyAwIH07CiAKICAg
ICAvLyBGb3Igbm9ybWFsIGNhbGN1bGF0aW9ucwogICAgIEZsb2F0UG9pbnQgbV9wcmV2aW91czsK
LSAgICBmbG9hdCBtX25vcm1hbEFuZ2xlOyAvLyBkZWdyZWVzCi19OyAgICAKKyAgICBmbG9hdCBt
X25vcm1hbEFuZ2xlIHsgMCB9OyAvLyBkZWdyZWVzCisgICAgYm9vbCBtX2lzWmVyb1ZlY3RvciB7
IGZhbHNlIH07Cit9OwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gMTgyNzU4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw4IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0
Q2hhcmFjdGVyc0kKICAgICAgICAgICAgICAgICBTVkdUZXh0TGF5b3V0RW5naW5lIGxpbmVMYXlv
dXQoY2hhcmFjdGVyTGF5b3V0LmxheW91dEF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICAgICAg
bGF5b3V0Q2hhcmFjdGVyc0luVGV4dEJveGVzKCZmbG93Qm94LCBsaW5lTGF5b3V0KTsKIAotICAg
ICAgICAgICAgICAgIGNoYXJhY3RlckxheW91dC5iZWdpblRleHRQYXRoTGF5b3V0KCZjaGlsZC0+
cmVuZGVyZXIoKSwgbGluZUxheW91dCk7CisgICAgICAgICAgICAgICAgYXV0byYgdGV4dFBhdGgg
PSBkb3duY2FzdDxSZW5kZXJTVkdUZXh0UGF0aD4oY2hpbGQtPnJlbmRlcmVyKCkpOworICAgICAg
ICAgICAgICAgIGNoYXJhY3RlckxheW91dC5iZWdpblRleHRQYXRoTGF5b3V0KHRleHRQYXRoLCBs
aW5lTGF5b3V0KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbGF5b3V0Q2hhcmFjdGVy
c0luVGV4dEJveGVzKCZmbG93Qm94LCBjaGFyYWN0ZXJMYXlvdXQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcAkocmV2aXNpb24gMTgyNzU4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI0LDUyICsyNSw5NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1Rl
eHRDaHVuazo6U1ZHVGV4dENodW5rKHVuc2lnbmVkIGNodW5rU3R5bGUsIGZsb2F0IGRlc2lyZWRU
ZXh0TGVuZ3RoKQotICAgIDogbV9jaHVua1N0eWxlKGNodW5rU3R5bGUpCi0gICAgLCBtX2Rlc2ly
ZWRUZXh0TGVuZ3RoKGRlc2lyZWRUZXh0TGVuZ3RoKQorU1ZHVGV4dENodW5rOjpTVkdUZXh0Q2h1
bmsoY29uc3QgVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzLCB1bnNp
Z25lZCBmaXJzdCwgdW5zaWduZWQgbGltaXQpCiB7Ci19CisgICAgQVNTRVJUKGZpcnN0IDwgbGlt
aXQpOworICAgIEFTU0VSVChmaXJzdCA+PSAwICYmIGxpbWl0IDw9IGxpbmVMYXlvdXRCb3hlcy5z
aXplKCkpOwogCi12b2lkIFNWR1RleHRDaHVuazo6Y2FsY3VsYXRlTGVuZ3RoKGZsb2F0JiBsZW5n
dGgsIHVuc2lnbmVkJiBjaGFyYWN0ZXJzKSBjb25zdAotewotICAgIFNWR1RleHRGcmFnbWVudCog
bGFzdEZyYWdtZW50ID0gMDsKKyAgICBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiBib3ggPSBsaW5l
TGF5b3V0Qm94ZXNbZmlyc3RdOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IGJveC0+
cmVuZGVyZXIoKS5zdHlsZSgpOworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9
IHN0eWxlLnN2Z1N0eWxlKCk7CisKKyAgICBpZiAoIXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkKKyAgICAgICAgbV9jaHVua1N0eWxlIHw9IFNWR1RleHRDaHVuazo6UmlnaHRUb0xlZnRU
ZXh0OworCisgICAgaWYgKHN2Z1N0eWxlLmlzVmVydGljYWxXcml0aW5nTW9kZSgpKQorICAgICAg
ICBtX2NodW5rU3R5bGUgfD0gU1ZHVGV4dENodW5rOjpWZXJ0aWNhbFRleHQ7CisgICAgCisgICAg
c3dpdGNoIChzdmdTdHlsZS50ZXh0QW5jaG9yKCkpIHsKKyAgICBjYXNlIFRBX1NUQVJUOgorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFRBX01JRERMRToKKyAgICAgICAgbV9jaHVua1N0eWxlIHw9
IE1pZGRsZUFuY2hvcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUQV9FTkQ6CisgICAgICAg
IG1fY2h1bmtTdHlsZSB8PSBFbmRBbmNob3I7CisgICAgICAgIGJyZWFrOworICAgIH0KIAotICAg
IHVuc2lnbmVkIGJveENvdW50ID0gbV9ib3hlcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBi
b3hQb3NpdGlvbiA9IDA7IGJveFBvc2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9zaXRpb24pIHsK
LSAgICAgICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9IG1fYm94ZXMuYXQoYm94UG9zaXRp
b24pOwotICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gdGV4dEJv
eC0+dGV4dEZyYWdtZW50cygpOworICAgIGlmIChhdXRvKiB0ZXh0Q29udGVudEVsZW1lbnQgPSBT
VkdUZXh0Q29udGVudEVsZW1lbnQ6OmVsZW1lbnRGcm9tUmVuZGVyZXIoYm94LT5yZW5kZXJlcigp
LnBhcmVudCgpKSkgeworICAgICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQodGV4
dENvbnRlbnRFbGVtZW50KTsKKyAgICAgICAgbV9kZXNpcmVkVGV4dExlbmd0aCA9IHRleHRDb250
ZW50RWxlbWVudC0+c3BlY2lmaWVkVGV4dExlbmd0aCgpLnZhbHVlKGxlbmd0aENvbnRleHQpOwor
CisgICAgICAgIHN3aXRjaCAodGV4dENvbnRlbnRFbGVtZW50LT5sZW5ndGhBZGp1c3QoKSkgewor
ICAgICAgICBjYXNlIFNWR0xlbmd0aEFkanVzdFVua25vd246CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTVkdMZW5ndGhBZGp1c3RTcGFjaW5nOgorICAgICAgICAgICAgbV9jaHVu
a1N0eWxlIHw9IExlbmd0aEFkanVzdFNwYWNpbmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTVkdMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzOgorICAgICAgICAgICAgbV9j
aHVua1N0eWxlIHw9IExlbmd0aEFkanVzdFNwYWNpbmdBbmRHbHlwaHM7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBzaXplID0gZnJhZ21l
bnRzLnNpemUoKTsKLSAgICAgICAgaWYgKCFzaXplKQotICAgICAgICAgICAgY29udGludWU7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gZmlyc3Q7IGkgPCBsaW1pdDsgKytpKQorICAgICAgICBtX2Jv
eGVzLmFwcGVuZChsaW5lTGF5b3V0Qm94ZXNbaV0pOworfQogCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFNWR1RleHRGcmFnbWVudCYg
ZnJhZ21lbnQgPSBmcmFnbWVudHMuYXQoaSk7Cit1bnNpZ25lZCBTVkdUZXh0Q2h1bms6OnRvdGFs
Q2hhcmFjdGVycygpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgY2hhcmFjdGVycyA9IDA7CisgICAg
Zm9yIChhdXRvKiBib3ggOiBtX2JveGVzKSB7CisgICAgICAgIGZvciAoYXV0byYgZnJhZ21lbnQg
OiBib3gtPnRleHRGcmFnbWVudHMoKSkKICAgICAgICAgICAgIGNoYXJhY3RlcnMgKz0gZnJhZ21l
bnQubGVuZ3RoOworICAgIH0KKyAgICByZXR1cm4gY2hhcmFjdGVyczsKK30KIAotICAgICAgICAg
ICAgaWYgKG1fY2h1bmtTdHlsZSAmIFZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICBsZW5n
dGggKz0gZnJhZ21lbnQuaGVpZ2h0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGxlbmd0aCArPSBmcmFnbWVudC53aWR0aDsKLQotICAgICAgICAgICAgaWYgKCFsYXN0RnJhZ21l
bnQpIHsKLSAgICAgICAgICAgICAgICBsYXN0RnJhZ21lbnQgPSAmZnJhZ21lbnQ7Ci0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CitmbG9hdCBTVkdUZXh0Q2h1bms6OnRv
dGFsTGVuZ3RoKCkgY29uc3QKK3sKKyAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQqIGZpcnN0RnJh
Z21lbnQgPSBudWxscHRyOworICAgIGNvbnN0IFNWR1RleHRGcmFnbWVudCogbGFzdEZyYWdtZW50
ID0gbnVsbHB0cjsKIAotICAgICAgICAgICAgLy8gUmVzZXBlY3QgZ2FwIGJldHdlZW4gY2h1bmtz
LgotICAgICAgICAgICAgaWYgKG1fY2h1bmtTdHlsZSAmIFZlcnRpY2FsVGV4dCkKLSAgICAgICAg
ICAgICAgICAgbGVuZ3RoICs9IGZyYWdtZW50LnkgLSAobGFzdEZyYWdtZW50LT55ICsgbGFzdEZy
YWdtZW50LT5oZWlnaHQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICBsZW5n
dGggKz0gZnJhZ21lbnQueCAtIChsYXN0RnJhZ21lbnQtPnggKyBsYXN0RnJhZ21lbnQtPndpZHRo
KTsKKyAgICBmb3IgKGF1dG8qIGJveCA6IG1fYm94ZXMpIHsKKyAgICAgICAgYXV0byYgZnJhZ21l
bnRzID0gYm94LT50ZXh0RnJhZ21lbnRzKCk7CisgICAgICAgIGlmIChmcmFnbWVudHMuc2l6ZSgp
KSB7CisgICAgICAgICAgICBmaXJzdEZyYWdtZW50ID0gJigqZnJhZ21lbnRzLmJlZ2luKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIGxhc3RG
cmFnbWVudCA9ICZmcmFnbWVudDsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2JveGVzLnJiZWdpbigp
LCBlbmQgPSBtX2JveGVzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGF1dG8m
IGZyYWdtZW50cyA9ICgqaXQpLT50ZXh0RnJhZ21lbnRzKCk7CisgICAgICAgIGlmIChmcmFnbWVu
dHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBsYXN0RnJhZ21lbnQgPSAmKCpmcmFnbWVudHMucmJl
Z2luKCkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBBU1NF
UlQoIWZpcnN0RnJhZ21lbnQgPT0gIWxhc3RGcmFnbWVudCk7CisgICAgaWYgKCFmaXJzdEZyYWdt
ZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChtX2NodW5rU3R5bGUgJiBWZXJ0aWNh
bFRleHQpCisgICAgICAgIHJldHVybiAobGFzdEZyYWdtZW50LT55ICsgbGFzdEZyYWdtZW50LT5o
ZWlnaHQpIC0gZmlyc3RGcmFnbWVudC0+eTsKKworICAgIHJldHVybiAobGFzdEZyYWdtZW50LT54
ICsgbGFzdEZyYWdtZW50LT53aWR0aCkgLSBmaXJzdEZyYWdtZW50LT54OwogfQogCi1mbG9hdCBT
VkdUZXh0Q2h1bms6OmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChmbG9hdCBsZW5ndGgpIGNvbnN0
CitmbG9hdCBTVkdUZXh0Q2h1bms6OnRvdGFsQW5jaG9yU2hpZnQoKSBjb25zdAogeworICAgIGZs
b2F0IGxlbmd0aCA9IHRvdGFsTGVuZ3RoKCk7CiAgICAgaWYgKG1fY2h1bmtTdHlsZSAmIE1pZGRs
ZUFuY2hvcikKICAgICAgICAgcmV0dXJuIC1sZW5ndGggLyAyOwogICAgIGlmIChtX2NodW5rU3R5
bGUgJiBFbmRBbmNob3IpCkBAIC03Nyw0ICsxMjIsODggQEAgZmxvYXQgU1ZHVGV4dENodW5rOjpj
YWxjdWxhdGVUZXh0QW5jaG9yUwogICAgIHJldHVybiBtX2NodW5rU3R5bGUgJiBSaWdodFRvTGVm
dFRleHQgPyAtbGVuZ3RoIDogMDsKIH0KIAordm9pZCBTVkdUZXh0Q2h1bms6OmxheW91dChIYXNo
TWFwPFNWR0lubGluZVRleHRCb3gqLCBBZmZpbmVUcmFuc2Zvcm0+JiB0ZXh0Qm94VHJhbnNmb3Jt
YXRpb25zKSBjb25zdAoreworICAgIGlmIChoYXNEZXNpcmVkVGV4dExlbmd0aCgpKSB7CisgICAg
ICAgIGlmIChoYXNMZW5ndGhBZGp1c3RTcGFjaW5nKCkpCisgICAgICAgICAgICBwcm9jZXNzVGV4
dExlbmd0aFNwYWNpbmdDb3JyZWN0aW9uKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
QVNTRVJUKGhhc0xlbmd0aEFkanVzdFNwYWNpbmdBbmRHbHlwaHMoKSk7CisgICAgICAgICAgICBi
dWlsZEJveFRyYW5zZm9ybWF0aW9ucyh0ZXh0Qm94VHJhbnNmb3JtYXRpb25zKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChoYXNUZXh0QW5jaG9yKCkpCisgICAgICAgIHByb2Nlc3NUZXh0
QW5jaG9yQ29ycmVjdGlvbigpOworfQorCit2b2lkIFNWR1RleHRDaHVuazo6cHJvY2Vzc1RleHRM
ZW5ndGhTcGFjaW5nQ29ycmVjdGlvbigpIGNvbnN0Cit7CisgICAgZmxvYXQgdGV4dExlbmd0aFNo
aWZ0ID0gKGRlc2lyZWRUZXh0TGVuZ3RoKCkgLSB0b3RhbExlbmd0aCgpKSAvIHRvdGFsQ2hhcmFj
dGVycygpOworICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBtX2NodW5rU3R5bGUgJiBWZXJ0aWNh
bFRleHQ7CisgICAgdW5zaWduZWQgYXRDaGFyYWN0ZXIgPSAwOworCisgICAgZm9yIChhdXRvKiBi
b3ggOiBtX2JveGVzKSB7CisgICAgICAgIGZvciAoYXV0byYgZnJhZ21lbnQgOiBib3gtPnRleHRG
cmFnbWVudHMoKSkgeworICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQorICAgICAgICAg
ICAgICAgIGZyYWdtZW50LnkgKz0gdGV4dExlbmd0aFNoaWZ0ICogYXRDaGFyYWN0ZXI7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnJhZ21lbnQueCArPSB0ZXh0TGVuZ3RoU2hp
ZnQgKiBhdENoYXJhY3RlcjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXRDaGFyYWN0ZXIg
Kz0gZnJhZ21lbnQubGVuZ3RoOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFNWR1RleHRD
aHVuazo6YnVpbGRCb3hUcmFuc2Zvcm1hdGlvbnMoSGFzaE1hcDxTVkdJbmxpbmVUZXh0Qm94Kiwg
QWZmaW5lVHJhbnNmb3JtPiYgdGV4dEJveFRyYW5zZm9ybWF0aW9ucykgY29uc3QKK3sKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybTsKKyAgICBib29sIGZvdW5k
Rmlyc3RGcmFnbWVudCA9IGZhbHNlOworCisgICAgZm9yIChhdXRvKiBib3ggOiBtX2JveGVzKSB7
CisgICAgICAgIGlmICghZm91bmRGaXJzdEZyYWdtZW50KSB7CisgICAgICAgICAgICBpZiAoIWJv
eFNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0oYm94LCBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3Jt
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvdW5kRmlyc3RGcmFn
bWVudCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICB0ZXh0Qm94VHJhbnNmb3JtYXRpb25z
LnNldChib3gsIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0pOworICAgIH0KK30KKworYm9vbCBT
VkdUZXh0Q2h1bms6OmJveFNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0oY29uc3QgU1ZHSW5saW5l
VGV4dEJveCogYm94LCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0p
IGNvbnN0Cit7CisgICAgYXV0byYgZnJhZ21lbnRzID0gYm94LT50ZXh0RnJhZ21lbnRzKCk7Cisg
ICAgaWYgKGZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVudHMuZmlyc3QoKTsKKyAg
ICBmbG9hdCBzY2FsZSA9IGRlc2lyZWRUZXh0TGVuZ3RoKCkgLyB0b3RhbExlbmd0aCgpOworCisg
ICAgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybS50cmFuc2xhdGUoZnJhZ21lbnQueCwgZnJhZ21l
bnQueSk7CisKKyAgICBpZiAobV9jaHVua1N0eWxlICYgVmVydGljYWxUZXh0KQorICAgICAgICBz
cGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybSgxLCBzY2FsZSk7CisgICAg
ZWxzZQorICAgICAgICBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShz
Y2FsZSwgMSk7CisKKyAgICBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtLnRyYW5zbGF0ZSgtZnJh
Z21lbnQueCwgLWZyYWdtZW50LnkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNWR1Rl
eHRDaHVuazo6cHJvY2Vzc1RleHRBbmNob3JDb3JyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBmbG9h
dCB0ZXh0QW5jaG9yU2hpZnQgPSB0b3RhbEFuY2hvclNoaWZ0KCk7CisgICAgYm9vbCBpc1ZlcnRp
Y2FsVGV4dCA9IG1fY2h1bmtTdHlsZSAmIFZlcnRpY2FsVGV4dDsKKworICAgIGZvciAoYXV0byog
Ym94IDogbV9ib3hlcykgeworICAgICAgICBmb3IgKGF1dG8mIGZyYWdtZW50IDogYm94LT50ZXh0
RnJhZ21lbnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAg
ICAgICAgICBmcmFnbWVudC55ICs9IHRleHRBbmNob3JTaGlmdDsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBmcmFnbWVudC54ICs9IHRleHRBbmNob3JTaGlmdDsKKyAgICAgICAg
fQorICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5oCShyZXZpc2lvbiAxODI3NTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTQwLDI4ICs0MSwzNCBAQCBwdWJsaWM6CiAgICAgICAgIExlbmd0aEFkanVzdFNwYWNpbmdBbmRH
bHlwaHMgPSAxIDw8IDYKICAgICB9OwogCi0gICAgU1ZHVGV4dENodW5rKHVuc2lnbmVkIGNodW5r
U3R5bGUsIGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3RoKTsKKyAgICBTVkdUZXh0Q2h1bmsoY29uc3Qg
VmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYsIHVuc2lnbmVkIGZpcnN0LCB1bnNpZ25lZCBsaW1p
dCk7CiAKLSAgICB2b2lkIGNhbGN1bGF0ZUxlbmd0aChmbG9hdCYgbGVuZ3RoLCB1bnNpZ25lZCYg
Y2hhcmFjdGVycykgY29uc3Q7Ci0gICAgZmxvYXQgY2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0KGZs
b2F0IGxlbmd0aCkgY29uc3Q7CisgICAgdW5zaWduZWQgdG90YWxDaGFyYWN0ZXJzKCkgY29uc3Q7
CisgICAgZmxvYXQgdG90YWxMZW5ndGgoKSBjb25zdDsKKyAgICBmbG9hdCB0b3RhbEFuY2hvclNo
aWZ0KCkgY29uc3Q7CisgICAgdm9pZCBsYXlvdXQoSGFzaE1hcDxTVkdJbmxpbmVUZXh0Qm94Kiwg
QWZmaW5lVHJhbnNmb3JtPiYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgcHJvY2Vzc1Rl
eHRBbmNob3JDb3JyZWN0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBidWlsZEJveFRyYW5zZm9ybWF0
aW9ucyhIYXNoTWFwPFNWR0lubGluZVRleHRCb3gqLCBBZmZpbmVUcmFuc2Zvcm0+JikgY29uc3Q7
CisgICAgdm9pZCBwcm9jZXNzVGV4dExlbmd0aFNwYWNpbmdDb3JyZWN0aW9uKCkgY29uc3Q7CiAK
ICAgICBib29sIGlzVmVydGljYWxUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jaHVua1N0eWxlICYg
VmVydGljYWxUZXh0OyB9CiAgICAgZmxvYXQgZGVzaXJlZFRleHRMZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2Rlc2lyZWRUZXh0TGVuZ3RoOyB9CiAKLSAgICBWZWN0b3I8U1ZHSW5saW5lVGV4dEJv
eCo+JiBib3hlcygpIHsgcmV0dXJuIG1fYm94ZXM7IH0KLSAgICBjb25zdCBWZWN0b3I8U1ZHSW5s
aW5lVGV4dEJveCo+JiBib3hlcygpIGNvbnN0IHsgcmV0dXJuIG1fYm94ZXM7IH0KLQogICAgIGJv
b2wgaGFzRGVzaXJlZFRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRUZXh0TGVu
Z3RoID4gMCAmJiAoKG1fY2h1bmtTdHlsZSAmIExlbmd0aEFkanVzdFNwYWNpbmcpIHx8IChtX2No
dW5rU3R5bGUgJiBMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzKSk7IH0KLSAgICBib29sIGhh
c1RleHRBbmNob3IoKSBjb25zdCB7ICByZXR1cm4gbV9jaHVua1N0eWxlICYgUmlnaHRUb0xlZnRU
ZXh0ID8gIShtX2NodW5rU3R5bGUgJiBFbmRBbmNob3IpIDogKG1fY2h1bmtTdHlsZSAmIE1pZGRs
ZUFuY2hvcikgfHwgKG1fY2h1bmtTdHlsZSAmIEVuZEFuY2hvcik7IH0KKyAgICBib29sIGhhc1Rl
eHRBbmNob3IoKSBjb25zdCB7ICByZXR1cm4gbV9jaHVua1N0eWxlICYgUmlnaHRUb0xlZnRUZXh0
ID8gIShtX2NodW5rU3R5bGUgJiBFbmRBbmNob3IpIDogKG1fY2h1bmtTdHlsZSAmIChNaWRkbGVB
bmNob3IgfCBFbmRBbmNob3IpKTsgfQogICAgIGJvb2wgaGFzTGVuZ3RoQWRqdXN0U3BhY2luZygp
IGNvbnN0IHsgcmV0dXJuIG1fY2h1bmtTdHlsZSAmIExlbmd0aEFkanVzdFNwYWNpbmc7IH0KICAg
ICBib29sIGhhc0xlbmd0aEFkanVzdFNwYWNpbmdBbmRHbHlwaHMoKSBjb25zdCB7IHJldHVybiBt
X2NodW5rU3R5bGUgJiBMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzOyB9CiAKKyAgICBib29s
IGJveFNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0oY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIEFm
ZmluZVRyYW5zZm9ybSYpIGNvbnN0OworCiBwcml2YXRlOgogICAgIC8vIENvbnRhaW5zIGFsbCBT
VkdJbmxpbmVUZXh0Qm94ZXMgdGhpcyBjaHVuayBzcGFucy4KICAgICBWZWN0b3I8U1ZHSW5saW5l
VGV4dEJveCo+IG1fYm94ZXM7CiAKLSAgICB1bnNpZ25lZCBtX2NodW5rU3R5bGU7Ci0gICAgZmxv
YXQgbV9kZXNpcmVkVGV4dExlbmd0aDsKKyAgICB1bnNpZ25lZCBtX2NodW5rU3R5bGUgeyBEZWZh
dWx0U3R5bGUgfTsKKyAgICBmbG9hdCBtX2Rlc2lyZWRUZXh0TGVuZ3RoIHsgMCB9OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuY3BwCShyZXZpc2lvbiAxODI3NTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTMwLDIyNyArMzEsNzEgQEAgU1ZHVGV4dENodW5rQnVpbGRlcjo6U1ZHVGV4
dENodW5rQnVpbGRlcgogewogfQogCi12b2lkIFNWR1RleHRDaHVua0J1aWxkZXI6OnRyYW5zZm9y
bWF0aW9uRm9yVGV4dEJveChTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkgY29uc3QKK3Vuc2lnbmVkIFNWR1RleHRDaHVua0J1aWxkZXI6OnRvdGFs
Q2hhcmFjdGVycygpIGNvbnN0CiB7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSwgc19pZGVudGl0eVRyYW5zZm9ybSwgKCkpOwotICAgIGlm
ICghbV90ZXh0Qm94VHJhbnNmb3JtYXRpb25zLmNvbnRhaW5zKHRleHRCb3gpKSB7Ci0gICAgICAg
IHRyYW5zZm9ybSA9IHNfaWRlbnRpdHlUcmFuc2Zvcm07Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB0cmFuc2Zvcm0gPSBtX3RleHRCb3hUcmFuc2Zvcm1hdGlvbnMuZ2V0KHRleHRCb3gp
OworICAgIHVuc2lnbmVkIGNoYXJhY3RlcnMgPSAwOworICAgIGZvciAoY29uc3QgYXV0byYgY2h1
bmsgOiBtX3RleHRDaHVua3MpCisgICAgICAgIGNoYXJhY3RlcnMgKz0gY2h1bmsudG90YWxDaGFy
YWN0ZXJzKCk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnM7CiB9CiAKLXZvaWQgU1ZHVGV4dENodW5r
QnVpbGRlcjo6YnVpbGRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVM
YXlvdXRCb3hlcykKK2Zsb2F0IFNWR1RleHRDaHVua0J1aWxkZXI6OnRvdGFsTGVuZ3RoKCkgY29u
c3QKIHsKLSAgICBpZiAobGluZUxheW91dEJveGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYm9vbCBmb3VuZFN0YXJ0ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGFzdENodW5r
U3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgdW5zaWduZWQgYm94UG9zaXRpb24gPSAwOwotICAgIHVu
c2lnbmVkIGJveENvdW50ID0gbGluZUxheW91dEJveGVzLnNpemUoKTsKLSAgICBmb3IgKDsgYm94
UG9zaXRpb24gPCBib3hDb3VudDsgKytib3hQb3NpdGlvbikgewotICAgICAgICBTVkdJbmxpbmVU
ZXh0Qm94KiB0ZXh0Qm94ID0gbGluZUxheW91dEJveGVzW2JveFBvc2l0aW9uXTsKLSAgICAgICAg
aWYgKCF0ZXh0Qm94LT5zdGFydHNOZXdUZXh0Q2h1bmsoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGlmICghZm91bmRTdGFydCkgewotICAgICAgICAgICAgbGFzdENodW5rU3Rh
cnRQb3NpdGlvbiA9IGJveFBvc2l0aW9uOwotICAgICAgICAgICAgZm91bmRTdGFydCA9IHRydWU7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihib3hQb3NpdGlvbiA+IGxhc3RDaHVua1N0YXJ0UG9zaXRpb24pOwotICAgICAgICAg
ICAgYWRkVGV4dENodW5rKGxpbmVMYXlvdXRCb3hlcywgbGFzdENodW5rU3RhcnRQb3NpdGlvbiwg
Ym94UG9zaXRpb24gLSBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uKTsKLSAgICAgICAgICAgIGxhc3RD
aHVua1N0YXJ0UG9zaXRpb24gPSBib3hQb3NpdGlvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmICghZm91bmRTdGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGJveFBvc2l0aW9u
IC0gbGFzdENodW5rU3RhcnRQb3NpdGlvbiA+IDApCi0gICAgICAgIGFkZFRleHRDaHVuayhsaW5l
TGF5b3V0Qm94ZXMsIGxhc3RDaHVua1N0YXJ0UG9zaXRpb24sIGJveFBvc2l0aW9uIC0gbGFzdENo
dW5rU3RhcnRQb3NpdGlvbik7CisgICAgZmxvYXQgbGVuZ3RoID0gMDsKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIGNodW5rIDogbV90ZXh0Q2h1bmtzKQorICAgICAgICBsZW5ndGggKz0gY2h1bmsudG90
YWxMZW5ndGgoKTsKKyAgICByZXR1cm4gbGVuZ3RoOwogfQogCi12b2lkIFNWR1RleHRDaHVua0J1
aWxkZXI6OmxheW91dFRleHRDaHVua3MoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxh
eW91dEJveGVzKQorZmxvYXQgU1ZHVGV4dENodW5rQnVpbGRlcjo6dG90YWxBbmNob3JTaGlmdCgp
IGNvbnN0CiB7Ci0gICAgYnVpbGRUZXh0Q2h1bmtzKGxpbmVMYXlvdXRCb3hlcyk7Ci0gICAgaWYg
KG1fdGV4dENodW5rcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVk
IGNodW5rQ291bnQgPSBtX3RleHRDaHVua3Muc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjaHVua0NvdW50OyArK2kpCi0gICAgICAgIHByb2Nlc3NUZXh0Q2h1bmsobV90ZXh0
Q2h1bmtzW2ldKTsKLQotICAgIG1fdGV4dENodW5rcy5jbGVhcigpOworICAgIGZsb2F0IGFuY2hv
clNoaWZ0ID0gMDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNodW5rIDogbV90ZXh0Q2h1bmtzKQor
ICAgICAgICBhbmNob3JTaGlmdCArPSBjaHVuay50b3RhbEFuY2hvclNoaWZ0KCk7CisgICAgcmV0
dXJuIGFuY2hvclNoaWZ0OwogfQogCi12b2lkIFNWR1RleHRDaHVua0J1aWxkZXI6OmFkZFRleHRD
aHVuayhWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMsIHVuc2lnbmVk
IGJveFN0YXJ0LCB1bnNpZ25lZCBib3hDb3VudCkKK0FmZmluZVRyYW5zZm9ybSBTVkdUZXh0Q2h1
bmtCdWlsZGVyOjp0cmFuc2Zvcm1hdGlvbkZvclRleHRCb3goU1ZHSW5saW5lVGV4dEJveCogdGV4
dEJveCkgY29uc3QKIHsKLSAgICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gbGluZUxheW91
dEJveGVzW2JveFN0YXJ0XTsKLSAgICBBU1NFUlQodGV4dEJveCk7Ci0KLSAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSB0ZXh0Qm94LT5yZW5kZXJlcigpLnN0eWxlKCk7Ci0KLSAgICBjb25z
dCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZS5zdmdTdHlsZSgpOwotCi0gICAgLy8g
QnVpbGQgY2h1bmsgc3R5bGUgZmxhZ3MuCi0gICAgdW5zaWduZWQgY2h1bmtTdHlsZSA9IFNWR1Rl
eHRDaHVuazo6RGVmYXVsdFN0eWxlOwotCi0gICAgLy8gSGFuZGxlICdkaXJlY3Rpb24nIHByb3Bl
cnR5LgotICAgIGlmICghc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICBj
aHVua1N0eWxlIHw9IFNWR1RleHRDaHVuazo6UmlnaHRUb0xlZnRUZXh0OwotCi0gICAgLy8gSGFu
ZGxlICd3cml0aW5nLW1vZGUnIHByb3BlcnR5LgotICAgIGlmIChzdmdTdHlsZS5pc1ZlcnRpY2Fs
V3JpdGluZ01vZGUoKSkKLSAgICAgICAgY2h1bmtTdHlsZSB8PSBTVkdUZXh0Q2h1bms6OlZlcnRp
Y2FsVGV4dDsKLQotICAgIC8vIEhhbmRsZSAndGV4dC1hbmNob3InIHByb3BlcnR5LgotICAgIHN3
aXRjaCAoc3ZnU3R5bGUudGV4dEFuY2hvcigpKSB7Ci0gICAgY2FzZSBUQV9TVEFSVDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBUQV9NSURETEU6Ci0gICAgICAgIGNodW5rU3R5bGUgfD0gU1ZH
VGV4dENodW5rOjpNaWRkbGVBbmNob3I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVEFfRU5E
OgotICAgICAgICBjaHVua1N0eWxlIHw9IFNWR1RleHRDaHVuazo6RW5kQW5jaG9yOwotICAgICAg
ICBicmVhazsKLSAgICB9OwotCi0gICAgLy8gSGFuZGxlICdsZW5ndGhBZGp1c3QnIHByb3BlcnR5
LgotICAgIGZsb2F0IGRlc2lyZWRUZXh0TGVuZ3RoID0gMDsKLSAgICBpZiAoU1ZHVGV4dENvbnRl
bnRFbGVtZW50KiB0ZXh0Q29udGVudEVsZW1lbnQgPSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmVs
ZW1lbnRGcm9tUmVuZGVyZXIodGV4dEJveC0+cmVuZGVyZXIoKS5wYXJlbnQoKSkpIHsKLSAgICAg
ICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KHRleHRDb250ZW50RWxlbWVudCk7Ci0g
ICAgICAgIGRlc2lyZWRUZXh0TGVuZ3RoID0gdGV4dENvbnRlbnRFbGVtZW50LT5zcGVjaWZpZWRU
ZXh0TGVuZ3RoKCkudmFsdWUobGVuZ3RoQ29udGV4dCk7Ci0KLSAgICAgICAgc3dpdGNoICh0ZXh0
Q29udGVudEVsZW1lbnQtPmxlbmd0aEFkanVzdCgpKSB7Ci0gICAgICAgIGNhc2UgU1ZHTGVuZ3Ro
QWRqdXN0VW5rbm93bjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNWR0xlbmd0
aEFkanVzdFNwYWNpbmc6Ci0gICAgICAgICAgICBjaHVua1N0eWxlIHw9IFNWR1RleHRDaHVuazo6
TGVuZ3RoQWRqdXN0U3BhY2luZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNW
R0xlbmd0aEFkanVzdFNwYWNpbmdBbmRHbHlwaHM6Ci0gICAgICAgICAgICBjaHVua1N0eWxlIHw9
IFNWR1RleHRDaHVuazo6TGVuZ3RoQWRqdXN0U3BhY2luZ0FuZEdseXBoczsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9OwotICAgIH0KLQotICAgIFNWR1RleHRDaHVuayBjaHVuayhjaHVu
a1N0eWxlLCBkZXNpcmVkVGV4dExlbmd0aCk7Ci0KLSAgICBWZWN0b3I8U1ZHSW5saW5lVGV4dEJv
eCo+JiBib3hlcyA9IGNodW5rLmJveGVzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gYm94U3Rh
cnQ7IGkgPCBib3hTdGFydCArIGJveENvdW50OyArK2kpCi0gICAgICAgIGJveGVzLmFwcGVuZChs
aW5lTGF5b3V0Qm94ZXNbaV0pOwotCi0gICAgbV90ZXh0Q2h1bmtzLmFwcGVuZChjaHVuayk7Cisg
ICAgYXV0byBpdCA9IG1fdGV4dEJveFRyYW5zZm9ybWF0aW9ucy5maW5kKHRleHRCb3gpOworICAg
IHJldHVybiBpdCA9PSBtX3RleHRCb3hUcmFuc2Zvcm1hdGlvbnMuZW5kKCkgPyBBZmZpbmVUcmFu
c2Zvcm0oKSA6IGl0LT52YWx1ZTsKIH0KIAotdm9pZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpwcm9j
ZXNzVGV4dENodW5rKGNvbnN0IFNWR1RleHRDaHVuayYgY2h1bmspCit2b2lkIFNWR1RleHRDaHVu
a0J1aWxkZXI6OmJ1aWxkVGV4dENodW5rcyhjb25zdCBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+
JiBsaW5lTGF5b3V0Qm94ZXMpCiB7Ci0gICAgYm9vbCBwcm9jZXNzVGV4dExlbmd0aCA9IGNodW5r
Lmhhc0Rlc2lyZWRUZXh0TGVuZ3RoKCk7Ci0gICAgYm9vbCBwcm9jZXNzVGV4dEFuY2hvciA9IGNo
dW5rLmhhc1RleHRBbmNob3IoKTsKLSAgICBpZiAoIXByb2Nlc3NUZXh0QW5jaG9yICYmICFwcm9j
ZXNzVGV4dExlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVmVjdG9yPFNWR0lu
bGluZVRleHRCb3gqPiYgYm94ZXMgPSBjaHVuay5ib3hlcygpOwotICAgIHVuc2lnbmVkIGJveENv
dW50ID0gYm94ZXMuc2l6ZSgpOwotICAgIGlmICghYm94Q291bnQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIENhbGN1bGF0ZSBhYnNvbHV0ZSBsZW5ndGggb2Ygd2hvbGUgdGV4dCBjaHVuayAo
c3RhcnRpbmcgZnJvbSB0ZXh0IGJveCAnc3RhcnQnLCBzcGFubmluZyAnbGVuZ3RoJyB0ZXh0IGJv
eGVzKS4KLSAgICBmbG9hdCBjaHVua0xlbmd0aCA9IDA7Ci0gICAgdW5zaWduZWQgY2h1bmtDaGFy
YWN0ZXJzID0gMDsKLSAgICBjaHVuay5jYWxjdWxhdGVMZW5ndGgoY2h1bmtMZW5ndGgsIGNodW5r
Q2hhcmFjdGVycyk7Ci0KLSAgICBib29sIGlzVmVydGljYWxUZXh0ID0gY2h1bmsuaXNWZXJ0aWNh
bFRleHQoKTsKLSAgICBpZiAocHJvY2Vzc1RleHRMZW5ndGgpIHsKLSAgICAgICAgaWYgKGNodW5r
Lmhhc0xlbmd0aEFkanVzdFNwYWNpbmcoKSkgewotICAgICAgICAgICAgZmxvYXQgdGV4dExlbmd0
aFNoaWZ0ID0gKGNodW5rLmRlc2lyZWRUZXh0TGVuZ3RoKCkgLSBjaHVua0xlbmd0aCkgLyBjaHVu
a0NoYXJhY3RlcnM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBhdENoYXJhY3RlciA9IDA7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGJveFBvc2l0aW9uID0gMDsgYm94UG9zaXRpb24gPCBib3hD
b3VudDsgKytib3hQb3NpdGlvbikgewotICAgICAgICAgICAgICAgIFZlY3RvcjxTVkdUZXh0RnJh
Z21lbnQ+JiBmcmFnbWVudHMgPSBib3hlc1tib3hQb3NpdGlvbl0tPnRleHRGcmFnbWVudHMoKTsK
LSAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc1RleHRMZW5ndGhTcGFjaW5n
Q29ycmVjdGlvbihpc1ZlcnRpY2FsVGV4dCwgdGV4dExlbmd0aFNoaWZ0LCBmcmFnbWVudHMsIGF0
Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEFTU0VSVChjaHVuay5oYXNMZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzKCkpOwotICAgICAg
ICAgICAgZmxvYXQgdGV4dExlbmd0aFNjYWxlID0gY2h1bmsuZGVzaXJlZFRleHRMZW5ndGgoKSAv
IGNodW5rTGVuZ3RoOwotICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHNwYWNpbmdBbmRHbHlw
aHNUcmFuc2Zvcm07Ci0KLSAgICAgICAgICAgIGJvb2wgZm91bmRGaXJzdEZyYWdtZW50ID0gZmFs
c2U7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJveFBvc2l0aW9uID0gMDsgYm94UG9zaXRp
b24gPCBib3hDb3VudDsgKytib3hQb3NpdGlvbikgewotICAgICAgICAgICAgICAgIFNWR0lubGlu
ZVRleHRCb3gqIHRleHRCb3ggPSBib3hlc1tib3hQb3NpdGlvbl07Ci0gICAgICAgICAgICAgICAg
VmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cyA9IHRleHRCb3gtPnRleHRGcmFnbWVu
dHMoKTsKLSAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWZvdW5kRmlyc3RG
cmFnbWVudCkgewotICAgICAgICAgICAgICAgICAgICBmb3VuZEZpcnN0RnJhZ21lbnQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICBidWlsZFNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0oaXNW
ZXJ0aWNhbFRleHQsIHRleHRMZW5ndGhTY2FsZSwgZnJhZ21lbnRzLmZpcnN0KCksIHNwYWNpbmdB
bmRHbHlwaHNUcmFuc2Zvcm0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IG1fdGV4dEJveFRyYW5zZm9ybWF0aW9ucy5zZXQodGV4dEJveCwgc3BhY2luZ0FuZEdseXBoc1Ry
YW5zZm9ybSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXBy
b2Nlc3NUZXh0QW5jaG9yKQorICAgIGlmIChsaW5lTGF5b3V0Qm94ZXMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICAvLyBJZiB3ZSBwcmV2aW91c2x5IGFwcGxpZWQgYSBsZW5ndGhB
ZGp1c3Q9InNwYWNpbmciIGNvcnJlY3Rpb24sIHdlIGhhdmUgdG8gcmVjYWxjdWxhdGUgdGhlIGNo
dW5rIGxlbmd0aCwgdG8gYmUgYWJsZSB0byBhcHBseSB0aGUgdGV4dC1hbmNob3Igc2hpZnQuCi0g
ICAgaWYgKHByb2Nlc3NUZXh0TGVuZ3RoICYmIGNodW5rLmhhc0xlbmd0aEFkanVzdFNwYWNpbmco
KSkgewotICAgICAgICBjaHVua0xlbmd0aCA9IDA7Ci0gICAgICAgIGNodW5rQ2hhcmFjdGVycyA9
IDA7Ci0gICAgICAgIGNodW5rLmNhbGN1bGF0ZUxlbmd0aChjaHVua0xlbmd0aCwgY2h1bmtDaGFy
YWN0ZXJzKTsKLSAgICB9CisgICAgdW5zaWduZWQgbGltaXQgPSBsaW5lTGF5b3V0Qm94ZXMuc2l6
ZSgpOworICAgIHVuc2lnbmVkIGZpcnN0ID0gbGltaXQ7CiAKLSAgICBmbG9hdCB0ZXh0QW5jaG9y
U2hpZnQgPSBjaHVuay5jYWxjdWxhdGVUZXh0QW5jaG9yU2hpZnQoY2h1bmtMZW5ndGgpOwotICAg
IGZvciAodW5zaWduZWQgYm94UG9zaXRpb24gPSAwOyBib3hQb3NpdGlvbiA8IGJveENvdW50OyAr
K2JveFBvc2l0aW9uKSB7Ci0gICAgICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVu
dHMgPSBib3hlc1tib3hQb3NpdGlvbl0tPnRleHRGcmFnbWVudHMoKTsKLSAgICAgICAgaWYgKGZy
YWdtZW50cy5pc0VtcHR5KCkpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbWl0OyAr
K2kpIHsKKyAgICAgICAgaWYgKCFsaW5lTGF5b3V0Qm94ZXNbaV0tPnN0YXJ0c05ld1RleHRDaHVu
aygpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHByb2Nlc3NUZXh0QW5jaG9yQ29y
cmVjdGlvbihpc1ZlcnRpY2FsVGV4dCwgdGV4dEFuY2hvclNoaWZ0LCBmcmFnbWVudHMpOwotICAg
IH0KLX0KLQotdm9pZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpwcm9jZXNzVGV4dExlbmd0aFNwYWNp
bmdDb3JyZWN0aW9uKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0IHRleHRMZW5ndGhTaGlmdCwg
VmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cywgdW5zaWduZWQmIGF0Q2hhcmFjdGVy
KQotewotICAgIHVuc2lnbmVkIGZyYWdtZW50Q291bnQgPSBmcmFnbWVudHMuc2l6ZSgpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVudENvdW50OyArK2kpIHsKLSAgICAgICAg
U1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50c1tpXTsKLQotICAgICAgICBpZiAo
aXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICBmcmFnbWVudC55ICs9IHRleHRMZW5ndGhTaGlm
dCAqIGF0Q2hhcmFjdGVyOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcmFnbWVudC54ICs9
IHRleHRMZW5ndGhTaGlmdCAqIGF0Q2hhcmFjdGVyOwogCi0gICAgICAgIGF0Q2hhcmFjdGVyICs9
IGZyYWdtZW50Lmxlbmd0aDsKKyAgICAgICAgaWYgKGZpcnN0ID09IGxpbWl0KQorICAgICAgICAg
ICAgZmlyc3QgPSBpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGZpcnN0ICE9IGkpOworICAgICAgICAgICAgbV90ZXh0Q2h1bmtz
LmFwcGVuZChTVkdUZXh0Q2h1bmsobGluZUxheW91dEJveGVzLCBmaXJzdCwgaSkpOworICAgICAg
ICAgICAgZmlyc3QgPSBpOworICAgICAgICB9CiAgICAgfQotfQogCi12b2lkIFNWR1RleHRDaHVu
a0J1aWxkZXI6OnByb2Nlc3NUZXh0QW5jaG9yQ29ycmVjdGlvbihib29sIGlzVmVydGljYWxUZXh0
LCBmbG9hdCB0ZXh0QW5jaG9yU2hpZnQsIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVu
dHMpCi17Ci0gICAgdW5zaWduZWQgZnJhZ21lbnRDb3VudCA9IGZyYWdtZW50cy5zaXplKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYWdtZW50Q291bnQ7ICsraSkgewotICAgICAg
ICBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzW2ldOwotCi0gICAgICAgIGlm
IChpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgIGZyYWdtZW50LnkgKz0gdGV4dEFuY2hvclNo
aWZ0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcmFnbWVudC54ICs9IHRleHRBbmNob3JT
aGlmdDsKLSAgICB9CisgICAgaWYgKGZpcnN0ICE9IGxpbWl0KQorICAgICAgICBtX3RleHRDaHVu
a3MuYXBwZW5kKFNWR1RleHRDaHVuayhsaW5lTGF5b3V0Qm94ZXMsIGZpcnN0LCBsaW1pdCkpOwog
fQogCi12b2lkIFNWR1RleHRDaHVua0J1aWxkZXI6OmJ1aWxkU3BhY2luZ0FuZEdseXBoc1RyYW5z
Zm9ybShib29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCBzY2FsZSwgY29uc3QgU1ZHVGV4dEZyYWdt
ZW50JiBmcmFnbWVudCwgQWZmaW5lVHJhbnNmb3JtJiBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3Jt
KQordm9pZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpsYXlvdXRUZXh0Q2h1bmtzKGNvbnN0IFZlY3Rv
cjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcykKIHsKLSAgICBzcGFjaW5nQW5k
R2x5cGhzVHJhbnNmb3JtLnRyYW5zbGF0ZShmcmFnbWVudC54LCBmcmFnbWVudC55KTsKKyAgICBi
dWlsZFRleHRDaHVua3MobGluZUxheW91dEJveGVzKTsKKyAgICBpZiAobV90ZXh0Q2h1bmtzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAg
ICAgICBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybSgxLCBzY2FsZSk7
Ci0gICAgZWxzZQotICAgICAgICBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtLnNjYWxlTm9uVW5p
Zm9ybShzY2FsZSwgMSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaHVuayA6IG1fdGV4dENodW5r
cykKKyAgICAgICAgY2h1bmsubGF5b3V0KG1fdGV4dEJveFRyYW5zZm9ybWF0aW9ucyk7CiAKLSAg
ICBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtLnRyYW5zbGF0ZSgtZnJhZ21lbnQueCwgLWZyYWdt
ZW50LnkpOworICAgIG1fdGV4dENodW5rcy5jbGVhcigpOwogfQogCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuaAkocmV2
aXNpb24gMTgyNzU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1
bmtCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDAsMTggKzQxLDEzIEBAIHB1YmxpYzoKICAgICBT
VkdUZXh0Q2h1bmtCdWlsZGVyKCk7CiAKICAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rPiYg
dGV4dENodW5rcygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENodW5rczsgfQotICAgIHZvaWQgdHJh
bnNmb3JtYXRpb25Gb3JUZXh0Qm94KFNWR0lubGluZVRleHRCb3gqLCBBZmZpbmVUcmFuc2Zvcm0m
KSBjb25zdDsKKyAgICB1bnNpZ25lZCB0b3RhbENoYXJhY3RlcnMoKSBjb25zdDsKKyAgICBmbG9h
dCB0b3RhbExlbmd0aCgpIGNvbnN0OworICAgIGZsb2F0IHRvdGFsQW5jaG9yU2hpZnQoKSBjb25z
dDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtYXRpb25Gb3JUZXh0Qm94KFNWR0lubGlu
ZVRleHRCb3gqKSBjb25zdDsKIAotICAgIHZvaWQgYnVpbGRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdJ
bmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcyk7Ci0gICAgdm9pZCBsYXlvdXRUZXh0Q2h1
bmtzKFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcyk7Ci0KLXByaXZh
dGU6Ci0gICAgdm9pZCBhZGRUZXh0Q2h1bmsoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGlu
ZUxheW91dEJveGVzLCB1bnNpZ25lZCBib3hQb3NpdGlvbiwgdW5zaWduZWQgYm94Q291bnQpOwot
ICAgIHZvaWQgcHJvY2Vzc1RleHRDaHVuayhjb25zdCBTVkdUZXh0Q2h1bmsmKTsKLQotICAgIHZv
aWQgcHJvY2Vzc1RleHRMZW5ndGhTcGFjaW5nQ29ycmVjdGlvbihib29sIGlzVmVydGljYWxUZXh0
LCBmbG9hdCB0ZXh0TGVuZ3RoU2hpZnQsIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiwgdW5zaWdu
ZWQmIGF0Q2hhcmFjdGVyKTsKLSAgICB2b2lkIHByb2Nlc3NUZXh0QW5jaG9yQ29ycmVjdGlvbihi
b29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCB0ZXh0QW5jaG9yU2hpZnQsIFZlY3RvcjxTVkdUZXh0
RnJhZ21lbnQ+Jik7Ci0gICAgdm9pZCBidWlsZFNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0oYm9v
bCBpc1ZlcnRpY2FsVGV4dCwgZmxvYXQgc2NhbGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIEFm
ZmluZVRyYW5zZm9ybSYpOworICAgIHZvaWQgYnVpbGRUZXh0Q2h1bmtzKGNvbnN0IFZlY3RvcjxT
VkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcyk7CisgICAgdm9pZCBsYXlvdXRUZXh0
Q2h1bmtzKGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcyk7
CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFNWR1RleHRDaHVuaz4gbV90ZXh0Q2h1bmtzOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRF
bmdpbmUuY3BwCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsyMCw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZS5o
IgogCisjaW5jbHVkZSAiUGF0aFRyYXZlcnNhbFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
VGV4dFBhdGguaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5l
VGV4dEJveC5oIgpAQCAtMTYwLDU4ICsxNjEsMzkgQEAgYm9vbCBTVkdUZXh0TGF5b3V0RW5naW5l
OjpwYXJlbnREZWZpbmVzVAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTVkdUZXh0TGF5
b3V0RW5naW5lOjpiZWdpblRleHRQYXRoTGF5b3V0KFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdU
ZXh0TGF5b3V0RW5naW5lJiBsaW5lTGF5b3V0KQordm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpi
ZWdpblRleHRQYXRoTGF5b3V0KGNvbnN0IFJlbmRlclNWR1RleHRQYXRoJiB0ZXh0UGF0aCwgU1ZH
VGV4dExheW91dEVuZ2luZSYgbGluZUxheW91dCkKIHsKLSAgICBBU1NFUlQob2JqZWN0KTsKLQog
ICAgIG1faW5QYXRoTGF5b3V0ID0gdHJ1ZTsKLSAgICBSZW5kZXJTVkdUZXh0UGF0aCYgdGV4dFBh
dGggPSBkb3duY2FzdDxSZW5kZXJTVkdUZXh0UGF0aD4oKm9iamVjdCk7CiAKICAgICBtX3RleHRQ
YXRoID0gdGV4dFBhdGgubGF5b3V0UGF0aCgpOwogICAgIGlmIChtX3RleHRQYXRoLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOworCiAgICAgbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0ID0gdGV4dFBh
dGguc3RhcnRPZmZzZXQoKTsKICAgICBtX3RleHRQYXRoTGVuZ3RoID0gbV90ZXh0UGF0aC5sZW5n
dGgoKTsKICAgICBpZiAobV90ZXh0UGF0aFN0YXJ0T2Zmc2V0ID4gMCAmJiBtX3RleHRQYXRoU3Rh
cnRPZmZzZXQgPD0gMSkKICAgICAgICAgbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0ICo9IG1fdGV4dFBh
dGhMZW5ndGg7CiAKLSAgICBmbG9hdCB0b3RhbExlbmd0aCA9IDA7Ci0gICAgdW5zaWduZWQgdG90
YWxDaGFyYWN0ZXJzID0gMDsKLQogICAgIGxpbmVMYXlvdXQubV9jaHVua0xheW91dEJ1aWxkZXIu
YnVpbGRUZXh0Q2h1bmtzKGxpbmVMYXlvdXQubV9saW5lTGF5b3V0Qm94ZXMpOwotICAgIGNvbnN0
IFZlY3RvcjxTVkdUZXh0Q2h1bms+JiB0ZXh0Q2h1bmtzID0gbGluZUxheW91dC5tX2NodW5rTGF5
b3V0QnVpbGRlci50ZXh0Q2h1bmtzKCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gdGV4dENodW5r
cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAg
ICAgICBjb25zdCBTVkdUZXh0Q2h1bmsmIGNodW5rID0gdGV4dENodW5rcy5hdChpKTsKLQotICAg
ICAgICBmbG9hdCBsZW5ndGggPSAwOwotICAgICAgICB1bnNpZ25lZCBjaGFyYWN0ZXJzID0gMDsK
LSAgICAgICAgY2h1bmsuY2FsY3VsYXRlTGVuZ3RoKGxlbmd0aCwgY2hhcmFjdGVycyk7Ci0KLSAg
ICAgICAgLy8gSGFuZGxlIHRleHQtYW5jaG9yIGFzIGFkZGl0aW9uYWwgc3RhcnQgb2Zmc2V0IGZv
ciB0ZXh0IHBhdGhzLgotICAgICAgICBtX3RleHRQYXRoU3RhcnRPZmZzZXQgKz0gY2h1bmsuY2Fs
Y3VsYXRlVGV4dEFuY2hvclNoaWZ0KGxlbmd0aCk7Ci0KLSAgICAgICAgdG90YWxMZW5ndGggKz0g
bGVuZ3RoOwotICAgICAgICB0b3RhbENoYXJhY3RlcnMgKz0gY2hhcmFjdGVyczsKLSAgICB9CiAK
KyAgICAvLyBIYW5kbGUgdGV4dC1hbmNob3IgYXMgYWRkaXRpb25hbCBzdGFydCBvZmZzZXQgZm9y
IHRleHQgcGF0aHMuCisgICAgbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0ICs9IGxpbmVMYXlvdXQubV9j
aHVua0xheW91dEJ1aWxkZXIudG90YWxBbmNob3JTaGlmdCgpOwogICAgIG1fdGV4dFBhdGhDdXJy
ZW50T2Zmc2V0ID0gbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0OwogCiAgICAgLy8gRXZlbnR1YWxseSBo
YW5kbGUgdGV4dExlbmd0aCBhZGp1c3RtZW50cy4KLSAgICBTVkdMZW5ndGhBZGp1c3RUeXBlIGxl
bmd0aEFkanVzdCA9IFNWR0xlbmd0aEFkanVzdFVua25vd247Ci0gICAgZmxvYXQgZGVzaXJlZFRl
eHRMZW5ndGggPSAwOwotCi0gICAgaWYgKFNWR1RleHRDb250ZW50RWxlbWVudCogdGV4dENvbnRl
bnRFbGVtZW50ID0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjplbGVtZW50RnJvbVJlbmRlcmVyKCZ0
ZXh0UGF0aCkpIHsKLSAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KHRleHRD
b250ZW50RWxlbWVudCk7Ci0gICAgICAgIGxlbmd0aEFkanVzdCA9IHRleHRDb250ZW50RWxlbWVu
dC0+bGVuZ3RoQWRqdXN0KCk7Ci0gICAgICAgIGRlc2lyZWRUZXh0TGVuZ3RoID0gdGV4dENvbnRl
bnRFbGVtZW50LT5zcGVjaWZpZWRUZXh0TGVuZ3RoKCkudmFsdWUobGVuZ3RoQ29udGV4dCk7Ci0g
ICAgfQorICAgIGF1dG8qIHRleHRDb250ZW50RWxlbWVudCA9IFNWR1RleHRDb250ZW50RWxlbWVu
dDo6ZWxlbWVudEZyb21SZW5kZXJlcigmdGV4dFBhdGgpOworICAgIGlmICghdGV4dENvbnRlbnRF
bGVtZW50KQorICAgICAgICByZXR1cm47CiAKKyAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENv
bnRleHQodGV4dENvbnRlbnRFbGVtZW50KTsKKyAgICBmbG9hdCBkZXNpcmVkVGV4dExlbmd0aCA9
IHRleHRDb250ZW50RWxlbWVudC0+c3BlY2lmaWVkVGV4dExlbmd0aCgpLnZhbHVlKGxlbmd0aENv
bnRleHQpOwogICAgIGlmICghZGVzaXJlZFRleHRMZW5ndGgpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChsZW5ndGhBZGp1c3QgPT0gU1ZHTGVuZ3RoQWRqdXN0U3BhY2luZykKKyAgICBmbG9h
dCB0b3RhbExlbmd0aCA9IGxpbmVMYXlvdXQubV9jaHVua0xheW91dEJ1aWxkZXIudG90YWxMZW5n
dGgoKTsKKyAgICB1bnNpZ25lZCB0b3RhbENoYXJhY3RlcnMgPSBsaW5lTGF5b3V0Lm1fY2h1bmtM
YXlvdXRCdWlsZGVyLnRvdGFsQ2hhcmFjdGVycygpOworCisgICAgaWYgKHRleHRDb250ZW50RWxl
bWVudC0+bGVuZ3RoQWRqdXN0KCkgPT0gU1ZHTGVuZ3RoQWRqdXN0U3BhY2luZykKICAgICAgICAg
bV90ZXh0UGF0aFNwYWNpbmcgPSAoZGVzaXJlZFRleHRMZW5ndGggLSB0b3RhbExlbmd0aCkgLyB0
b3RhbENoYXJhY3RlcnM7CiAgICAgZWxzZQogICAgICAgICBtX3RleHRQYXRoU2NhbGluZyA9IGRl
c2lyZWRUZXh0TGVuZ3RoIC8gdG90YWxMZW5ndGg7CkBAIC0yOTAsNyArMjcyLDcgQEAgdm9pZCBT
VkdUZXh0TGF5b3V0RW5naW5lOjpmaW5hbGl6ZVRyYW5zZgogCiAgICAgICAgIHVuc2lnbmVkIGZy
YWdtZW50Q291bnQgPSBmcmFnbWVudHMuc2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZnJhZ21lbnRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBtX2NodW5rTGF5b3V0
QnVpbGRlci50cmFuc2Zvcm1hdGlvbkZvclRleHRCb3godGV4dEJveCwgdGV4dEJveFRyYW5zZm9y
bWF0aW9uKTsKKyAgICAgICAgICAgIHRleHRCb3hUcmFuc2Zvcm1hdGlvbiA9IG1fY2h1bmtMYXlv
dXRCdWlsZGVyLnRyYW5zZm9ybWF0aW9uRm9yVGV4dEJveCh0ZXh0Qm94KTsKICAgICAgICAgICAg
IGlmICh0ZXh0Qm94VHJhbnNmb3JtYXRpb24uaXNJZGVudGl0eSgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgQVNTRVJUKGZyYWdtZW50c1tpXS5sZW5ndGhBZGp1c3RU
cmFuc2Zvcm0uaXNJZGVudGl0eSgpKTsKQEAgLTU1MywxNCArNTM1LDE1IEBAIHZvaWQgU1ZHVGV4
dExheW91dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGkKICAgICAgICAgICAgIGlmICh0ZXh0UGF0aE9m
ZnNldCA+IG1fdGV4dFBhdGhMZW5ndGgpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBt
X3RleHRQYXRoLnBvaW50QXRMZW5ndGgodGV4dFBhdGhPZmZzZXQsIG9rKTsKLSAgICAgICAgICAg
IEFTU0VSVChvayk7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGF1dG8gdHJhdmVyc2FsU3RhdGUobV90ZXh0UGF0aC50cmF2ZXJzYWxTdGF0ZUF0TGVuZ3Ro
KHRleHRQYXRoT2Zmc2V0LCBzdWNjZXNzKSk7CisgICAgICAgICAgICBBU1NFUlQoc3VjY2Vzcyk7
CiAKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQgPSB0cmF2ZXJzYWxTdGF0ZS5jdXJyZW50
KCk7CiAgICAgICAgICAgICB4ID0gcG9pbnQueCgpOwogICAgICAgICAgICAgeSA9IHBvaW50Lnko
KTsKLSAgICAgICAgICAgIGFuZ2xlID0gbV90ZXh0UGF0aC5ub3JtYWxBbmdsZUF0TGVuZ3RoKHRl
eHRQYXRoT2Zmc2V0LCBvayk7Ci0gICAgICAgICAgICBBU1NFUlQob2spOworCisgICAgICAgICAg
ICBhbmdsZSA9IHRyYXZlcnNhbFN0YXRlLm5vcm1hbEFuZ2xlKCk7CiAKICAgICAgICAgICAgIC8v
IEZvciB2ZXJ0aWNhbCB0ZXh0IG9uIHBhdGgsIHRoZSBhY3R1YWwgYW5nbGUgaGFzIHRvIGJlIHJv
dGF0ZWQgOTAgZGVncmVlcyBhbnRpLWNsb2Nrd2lzZSwgbm90IHRoZSBvcmllbnRhdGlvbiBhbmds
ZSEKICAgICAgICAgICAgIGlmIChtX2lzVmVydGljYWxUZXh0KQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmgJKHJldmlzaW9u
IDE4Mjc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVu
Z2luZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVy
U1ZHSW5saW5lVGV4dDsKK2NsYXNzIFJlbmRlclNWR1RleHRQYXRoOwogY2xhc3MgU1ZHRWxlbWVu
dDsKIGNsYXNzIFNWR0lubGluZVRleHRCb3g7CiBjbGFzcyBTVkdSZW5kZXJTdHlsZTsKQEAgLTUw
LDcgKzUxLDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyo+
JiBsYXlvdXRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gbV9sYXlvdXRBdHRyaWJ1dGVzOyB9CiAgICAg
U1ZHVGV4dENodW5rQnVpbGRlciYgY2h1bmtMYXlvdXRCdWlsZGVyKCkgeyByZXR1cm4gbV9jaHVu
a0xheW91dEJ1aWxkZXI7IH0KIAotICAgIHZvaWQgYmVnaW5UZXh0UGF0aExheW91dChSZW5kZXJP
YmplY3QqLCBTVkdUZXh0TGF5b3V0RW5naW5lJiBsaW5lTGF5b3V0KTsKKyAgICB2b2lkIGJlZ2lu
VGV4dFBhdGhMYXlvdXQoY29uc3QgUmVuZGVyU1ZHVGV4dFBhdGgmLCBTVkdUZXh0TGF5b3V0RW5n
aW5lJiBsaW5lTGF5b3V0KTsKICAgICB2b2lkIGVuZFRleHRQYXRoTGF5b3V0KCk7CiAKICAgICB2
b2lkIGxheW91dElubGluZVRleHRCb3goU1ZHSW5saW5lVGV4dEJveCopOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
ODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJQYXRoVHJh
dmVyc2FsU3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUg
IlNWR0ltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR01QYXRoRWxlbWVudC5oIgpAQCAtMjEy
LDE2ICsyMTMsMTkgQEAgdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YnVpbGRUcmFucwog
ewogICAgIEFTU0VSVCghbV9hbmltYXRpb25QYXRoLmlzRW1wdHkoKSk7CiAKLSAgICBib29sIG9r
ID0gZmFsc2U7CisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgZmxvYXQgcG9zaXRpb25P
blBhdGggPSBtX2FuaW1hdGlvblBhdGgubGVuZ3RoKCkgKiBwZXJjZW50YWdlOwotICAgIEZsb2F0
UG9pbnQgcG9zaXRpb24gPSBtX2FuaW1hdGlvblBhdGgucG9pbnRBdExlbmd0aChwb3NpdGlvbk9u
UGF0aCwgb2spOwotICAgIGlmICghb2spCisgICAgYXV0byB0cmF2ZXJzYWxTdGF0ZShtX2FuaW1h
dGlvblBhdGgudHJhdmVyc2FsU3RhdGVBdExlbmd0aChwb3NpdGlvbk9uUGF0aCwgc3VjY2Vzcykp
OworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRQb2ludCBw
b3NpdGlvbiA9IHRyYXZlcnNhbFN0YXRlLmN1cnJlbnQoKTsKKyAgICBmbG9hdCBhbmdsZSA9IHRy
YXZlcnNhbFN0YXRlLm5vcm1hbEFuZ2xlKCk7CisKICAgICB0cmFuc2Zvcm0tPnRyYW5zbGF0ZShw
b3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSk7CiAgICAgUm90YXRlTW9kZSByb3RhdGVNb2RlID0g
dGhpcy0+cm90YXRlTW9kZSgpOwogICAgIGlmIChyb3RhdGVNb2RlICE9IFJvdGF0ZUF1dG8gJiYg
cm90YXRlTW9kZSAhPSBSb3RhdGVBdXRvUmV2ZXJzZSkKICAgICAgICAgcmV0dXJuOwotICAgIGZs
b2F0IGFuZ2xlID0gbV9hbmltYXRpb25QYXRoLm5vcm1hbEFuZ2xlQXRMZW5ndGgocG9zaXRpb25P
blBhdGgsIG9rKTsKICAgICBpZiAocm90YXRlTW9kZSA9PSBSb3RhdGVBdXRvUmV2ZXJzZSkKICAg
ICAgICAgYW5nbGUgKz0gMTgwOwogICAgIHRyYW5zZm9ybS0+cm90YXRlKGFuZ2xlKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRl
ci5jcHAJKHJldmlzaW9uIDE4Mjc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJh
dmVyc2FsU3RhdGVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNjggKzI5LDU3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6U1ZH
UGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcigpCiAgICAgOiBtX3RyYXZlcnNhbFN0YXRlKDApCisg
ICAgLCBtX3NlZ21lbnRJbmRleCgwKQogewogfQogCiB2b2lkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXI6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgYm9vbCwgUGF0
aENvb3JkaW5hdGVNb2RlKQogewogICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKLSAgICBt
X3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoICs9IG1fdHJhdmVyc2FsU3RhdGUtPm1vdmVU
byh0YXJnZXRQb2ludCk7CisgICAgbV90cmF2ZXJzYWxTdGF0ZS0+cHJvY2Vzc1BhdGhFbGVtZW50
KFBhdGhFbGVtZW50TW92ZVRvUG9pbnQsICZ0YXJnZXRQb2ludCk7CiB9CiAKIHZvaWQgU1ZHUGF0
aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBv
aW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUp
OwotICAgIG1fdHJhdmVyc2FsU3RhdGUtPm1fdG90YWxMZW5ndGggKz0gbV90cmF2ZXJzYWxTdGF0
ZS0+bGluZVRvKHRhcmdldFBvaW50KTsKKyAgICBtX3RyYXZlcnNhbFN0YXRlLT5wcm9jZXNzUGF0
aEVsZW1lbnQoUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludCwgJnRhcmdldFBvaW50KTsKIH0KIAog
dm9pZCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9p
bnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUpCiB7CisgICAgRmxvYXRQb2ludCBw
b2ludHNbXSA9IHsgcG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50IH07CiAgICAgQVNTRVJUKG1f
dHJhdmVyc2FsU3RhdGUpOwotICAgIG1fdHJhdmVyc2FsU3RhdGUtPm1fdG90YWxMZW5ndGggKz0g
bV90cmF2ZXJzYWxTdGF0ZS0+Y3ViaWNCZXppZXJUbyhwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9p
bnQpOworICAgIG1fdHJhdmVyc2FsU3RhdGUtPnByb2Nlc3NQYXRoRWxlbWVudChQYXRoRWxlbWVu
dEFkZEN1cnZlVG9Qb2ludCwgcG9pbnRzKTsKIH0KIAogdm9pZCBTVkdQYXRoVHJhdmVyc2FsU3Rh
dGVCdWlsZGVyOjpjbG9zZVBhdGgoKQogewogICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsK
LSAgICBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoICs9IG1fdHJhdmVyc2FsU3RhdGUt
PmNsb3NlU3VicGF0aCgpOworICAgIG1fdHJhdmVyc2FsU3RhdGUtPnByb2Nlc3NQYXRoRWxlbWVu
dChQYXRoRWxlbWVudENsb3NlU3VicGF0aCwgbnVsbHB0cik7CiB9CiAKIHZvaWQgU1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlcjo6c2V0RGVzaXJlZExlbmd0aChmbG9hdCBkZXNpcmVkTGVuZ3Ro
KQogewogICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKLSAgICBtX3RyYXZlcnNhbFN0YXRl
LT5tX2Rlc2lyZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoOworICAgIG1fdHJhdmVyc2FsU3RhdGUt
PnNldERlc2lyZWRMZW5ndGgoZGVzaXJlZExlbmd0aCk7CiB9CiAKIGJvb2wgU1ZHUGF0aFRyYXZl
cnNhbFN0YXRlQnVpbGRlcjo6Y29udGludWVDb25zdW1pbmcoKQogewogICAgIEFTU0VSVChtX3Ry
YXZlcnNhbFN0YXRlKTsgICAgCi0gICAgbV90cmF2ZXJzYWxTdGF0ZS0+cHJvY2Vzc1NlZ21lbnQo
KTsKLSAgICByZXR1cm4gIW1fdHJhdmVyc2FsU3RhdGUtPm1fc3VjY2VzczsKLX0KLQotdm9pZCBT
VkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjppbmNyZW1lbnRQYXRoU2VnbWVudENvdW50KCkK
LXsKLSAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7Ci0gICAgKyttX3RyYXZlcnNhbFN0YXRl
LT5tX3NlZ21lbnRJbmRleDsKLX0KLQotdW5zaWduZWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVp
bGRlcjo6cGF0aFNlZ21lbnRJbmRleCgpCi17Ci0gICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUp
OwotICAgIHJldHVybiBtX3RyYXZlcnNhbFN0YXRlLT5tX3NlZ21lbnRJbmRleDsKKyAgICByZXR1
cm4gIW1fdHJhdmVyc2FsU3RhdGUtPnN1Y2Nlc3MoKTsKIH0KIAogZmxvYXQgU1ZHUGF0aFRyYXZl
cnNhbFN0YXRlQnVpbGRlcjo6dG90YWxMZW5ndGgoKQogewogICAgIEFTU0VSVChtX3RyYXZlcnNh
bFN0YXRlKTsKLSAgICByZXR1cm4gbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aDsKKyAg
ICByZXR1cm4gbV90cmF2ZXJzYWxTdGF0ZS0+dG90YWxMZW5ndGgoKTsKIH0KIAogU1ZHUG9pbnQg
U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y3VycmVudFBvaW50KCkKIHsKICAgICBBU1NF
UlQobV90cmF2ZXJzYWxTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fdHJhdmVyc2FsU3RhdGUtPm1fY3Vy
cmVudDsKKyAgICByZXR1cm4gbV90cmF2ZXJzYWxTdGF0ZS0+Y3VycmVudCgpOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWls
ZGVyLmgJKHJldmlzaW9uIDE4Mjc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJh
dmVyc2FsU3RhdGVCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE1ICszMiwxNSBAQCBj
bGFzcyBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyIDogcHViCiBwdWJsaWM6CiAgICAgU1ZH
UGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcigpOwogCi0gICAgdW5zaWduZWQgcGF0aFNlZ21lbnRJ
bmRleCgpOworICAgIHVuc2lnbmVkIHBhdGhTZWdtZW50SW5kZXgoKSB7IHJldHVybiBtX3NlZ21l
bnRJbmRleDsgfQogICAgIGZsb2F0IHRvdGFsTGVuZ3RoKCk7CiAgICAgU1ZHUG9pbnQgY3VycmVu
dFBvaW50KCk7CiAKICAgICB2b2lkIHNldEN1cnJlbnRUcmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVy
c2FsU3RhdGUqIHRyYXZlcnNhbFN0YXRlKSB7IG1fdHJhdmVyc2FsU3RhdGUgPSB0cmF2ZXJzYWxT
dGF0ZTsgfQogICAgIHZvaWQgc2V0RGVzaXJlZExlbmd0aChmbG9hdCk7Ci0gICAgdmlydHVhbCB2
b2lkIGluY3JlbWVudFBhdGhTZWdtZW50Q291bnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgaW5jcmVtZW50UGF0aFNlZ21lbnRDb3VudCgpIG92ZXJyaWRlIHsgKyttX3NlZ21lbnRJbmRl
eDsgfQogICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUNvbnN1bWluZygpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBjbGVhbnVwKCkgb3ZlcnJpZGUgeyBtX3RyYXZlcnNhbFN0YXRlID0gMDsg
fQorICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwKCkgb3ZlcnJpZGUgeyBtX3RyYXZlcnNhbFN0YXRl
ID0gbnVsbHB0ciwgbV9zZWdtZW50SW5kZXggPSAwOyB9CiAKIHByaXZhdGU6CiAgICAgLy8gVXNl
ZCBpbiBVbmFsdGVyZWRQYXJzaW5nL05vcm1hbGl6ZWRQYXJzaW5nIG1vZGVzLgpAQCAtNTksNiAr
NTksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZs
b2F0LCBib29sLCBib29sLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSBv
dmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKICAgICBQYXRoVHJhdmVyc2FsU3Rh
dGUqIG1fdHJhdmVyc2FsU3RhdGU7CisgICAgdW5zaWduZWQgbV9zZWdtZW50SW5kZXg7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhV
dGlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aFV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NSw3ICsyODUsNyBAQCBib29s
IGdldFNWR1BhdGhTZWdBdExlbmd0aEZyb21TVkdQYXRoQnl0CiAgICAgaWYgKHN0cmVhbS0+aXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQYXRoVHJhdmVyc2FsU3RhdGUg
dHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxTZWdtZW50QXRMZW5n
dGgpOworICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2Fs
U3RhdGU6OkFjdGlvbjo6U2VnbWVudEF0TGVuZ3RoKTsKICAgICBTVkdQYXRoVHJhdmVyc2FsU3Rh
dGVCdWlsZGVyKiBidWlsZGVyID0gZ2xvYmFsU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcih0
cmF2ZXJzYWxTdGF0ZSwgbGVuZ3RoKTsKIAogICAgIGF1dG8gc291cmNlID0gc3RkOjptYWtlX3Vu
aXF1ZTxTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZT4oc3RyZWFtKTsKQEAgLTMwMiw3ICszMDIsNyBA
QCBib29sIGdldFRvdGFsTGVuZ3RoT2ZTVkdQYXRoQnl0ZVN0cmVhbShTCiAgICAgaWYgKHN0cmVh
bS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQYXRoVHJhdmVyc2Fs
U3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxUb3RhbExl
bmd0aCk7CisgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJz
YWxTdGF0ZTo6QWN0aW9uOjpUb3RhbExlbmd0aCk7CiAgICAgU1ZHUGF0aFRyYXZlcnNhbFN0YXRl
QnVpbGRlciogYnVpbGRlciA9IGdsb2JhbFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIodHJh
dmVyc2FsU3RhdGUsIDApOwogCiAgICAgYXV0byBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPFNW
R1BhdGhCeXRlU3RyZWFtU291cmNlPihzdHJlYW0pOwpAQCAtMzE5LDcgKzMxOSw3IEBAIGJvb2wg
Z2V0UG9pbnRBdExlbmd0aE9mU1ZHUGF0aEJ5dGVTdHJlYW0KICAgICBpZiAoc3RyZWFtLT5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0
cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNhbFBvaW50QXRMZW5ndGgp
OworICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3Rh
dGU6OkFjdGlvbjo6VmVjdG9yQXRMZW5ndGgpOwogICAgIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1
aWxkZXIqIGJ1aWxkZXIgPSBnbG9iYWxTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyKHRyYXZl
cnNhbFN0YXRlLCBsZW5ndGgpOwogCiAgICAgYXV0byBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVl
PFNWR1BhdGhCeXRlU3RyZWFtU291cmNlPihzdHJlYW0pOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDE4Mjc1OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yODAsNyArMjgwLDcgQEAgYm9vbCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNlbGZIYXNS
ZWxhdAogICAgIHJldHVybiB0cnVlOwogfQogCi1TVkdUZXh0Q29udGVudEVsZW1lbnQqIFNWR1Rl
eHRDb250ZW50RWxlbWVudDo6ZWxlbWVudEZyb21SZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQorU1ZHVGV4dENvbnRlbnRFbGVtZW50KiBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmVsZW1l
bnRGcm9tUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBpZiAo
IXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHJldmlzaW9uIDE4Mjc1OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
ODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgaW50IGdldENoYXJOdW1BdFBvc2l0aW9uKGNvbnN0
IFNWR1BvaW50Jik7CiAgICAgdm9pZCBzZWxlY3RTdWJTdHJpbmcodW5zaWduZWQgY2hhcm51bSwg
dW5zaWduZWQgbmNoYXJzLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBzdGF0aWMgU1ZHVGV4dENv
bnRlbnRFbGVtZW50KiBlbGVtZW50RnJvbVJlbmRlcmVyKFJlbmRlck9iamVjdCopOworICAgIHN0
YXRpYyBTVkdUZXh0Q29udGVudEVsZW1lbnQqIGVsZW1lbnRGcm9tUmVuZGVyZXIoY29uc3QgUmVu
ZGVyT2JqZWN0Kik7CiAKICAgICAvLyB0ZXh0TGVuZ3RoIGlzIG5vdCBkZWNsYXJlZCB1c2luZyB0
aGUgc3RhbmRhcmQgREVDTEFSRV9BTklNQVRFRF9MRU5HVEggbWFjcm8KICAgICAvLyBhcyBpdHMg
Z2V0dGVyIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgKHJldHVybiBnZXRDb21wdXRlZFRleHRMZW5n
dGgoKSwgaW5zdGVhZCBvZiBtX3RleHRMZW5ndGgpLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250764</attachid>
            <date>2015-04-14 17:28:12 -0700</date>
            <delta_ts>2015-04-14 18:35:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141570-20150414172716.patch</filename>
            <type>text/plain</type>
            <size>64509</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODI4MTQpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE1LTA0LTE0ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgdGV4
dFBhdGggbGF5b3V0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTcwLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEN1dCBkb3duIHRoZSB0aW1lIHNwZW50IGluIHRy
YXZlcnNpbmcgdGhlIHBhdGggZm9yIHRleHQgYnkgNTAlLiBJbnN0ZWFkCisgICAgICAgIG9mIHRy
YXZlcnNpbmcgdGhlIHBhdGggdHdpY2UgYXQgYSBjZXJ0YWluIGxlbmd0aDogb25lIHRpbWUgZm9y
IHRoZSBwb3NpdGlvbgorICAgICAgICBhbmQgdGhlIHNlY29uZCB0aW1lIGZvciB0aGUgYW5nbGUs
IHdlIGNhbiBtZXJnZSB0aGVzZSB0d28gcGFzc2VzIGludG8gb25lLgorCisgICAgICAgICogU1ZH
L1RleHRPblBhdGhTaW1wbGUuaHRtbDogQWRkZWQuCisgICAgICAgICogU1ZHL3Jlc291cmNlcy9U
ZXh0T25QYXRoU2ltcGxlLnN2ZzogQWRkZWQuCisKIDIwMTUtMDQtMTMgIFphbGFuIEJ1anRhcyAg
PHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhciB1cCB0aGUgdGVzdCBjb250ZW50IHdo
ZW4gdGVzdCBpcyBkb25lLgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9TVkcvVGV4dE9uUGF0aFNp
bXBsZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvU1ZHL1RleHRPblBhdGhT
aW1wbGUuaHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvU1ZHL1RleHRPblBh
dGhTaW1wbGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgUGVyZlRl
c3RSdW5uZXIubWVhc3VyZVBhZ2VMb2FkVGltZSh7cGF0aDogInJlc291cmNlcy9UZXh0T25QYXRo
U2ltcGxlLnN2ZyJ9KTsKKyAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL1NWRy9yZXNvdXJjZXMvVGV4dE9uUGF0aFNpbXBsZS5zdmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
UGVyZm9ybWFuY2VUZXN0cy9TVkcvcmVzb3VyY2VzL1RleHRPblBhdGhTaW1wbGUuc3ZnCShyZXZp
c2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9TVkcvcmVzb3VyY2VzL1RleHRPblBhdGhTaW1w
bGUuc3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKzxzdmcgd2lkdGg9IjEwMCUi
IGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDQwMDAgMjUwMCIKKyAgICAgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAKKyAgICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGxpbmsiPgorICA8ZGVmcz4KKyAgICA8cGF0aCBpZD0iU2ltcGxlUGF0aCIKKyAg
ICAgIGQ9Ik0gMTAwICAyMDAgCisgICAgICAgICBDIDIwMCAgMTAwIDMwMCAgICAwICA0MDAgIDEw
MAorICAgICAgICAgQyA1MDAgIDIwMCA2MDAgIDMwMCAgNzAwICAyMDAKKyAgICAgICAgIEMgODAw
ICAxMDAgOTAwICAgIDAgIDEwMDAgMTAwCisgICAgICAgICBDIDExMDAgMjAwIDEyMDAgMzAwICAx
MzAwIDIwMAorICAgICAgICAgQyAxNDAwIDEwMCAxNTAwICAgMCAgMTYwMCAxMDAKKyAgICAgICAg
IEMgMTcwMCAyMDAgMTgwMCAzMDAgIDE5MDAgMjAwIi8+CisgIDwvZGVmcz4KKworICA8ZyBpZD0i
VGV4dE9uUGF0aDI1Ij4KKyAgICA8ZyBpZD0iVGV4dE9uUGF0aDUiPgorICAgICAgPGcgaWQ9IlRl
eHRPblBhdGgiPgorICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNTaW1wbGVQYXRoIiBmaWxsPSJu
b25lIiBzdHJva2U9InJlZCIvPgorICAgICAgICA8dGV4dCBmb250LWZhbWlseT0iVmVyZGFuYSIg
Zm9udC1zaXplPSI0Mi41Ij4KKyAgICAgICAgICA8dGV4dFBhdGggeGxpbms6aHJlZj0iI1NpbXBs
ZVBhdGgiPgorICAgICAgICAgICAgV2UgZ28gdXAsIHRoZW4gd2UgZ28gZG93biwgdGhlbiB1cCBh
Z2FpbiwgdGhlbiB3ZSBnbyBkb3duLCB0aGVuIHdlIHVwIGFnYWluLCB0aGVuIHdlIGdvIGRvd24u
CisgICAgICAgICAgPC90ZXh0UGF0aD4KKyAgICAgICAgPC90ZXh0PgorICAgICAgPC9nPgorICAg
ICAgPHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw0
MCkiLz4KKyAgICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGgiIHRyYW5zZm9ybT0idHJh
bnNsYXRlKDAsODApIi8+CisgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoIiB0cmFu
c2Zvcm09InRyYW5zbGF0ZSgwLDEyMCkiLz4KKyAgICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRP
blBhdGgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMTYwKSIvPgorICAgIDwvZz4KKyAgCisgICAg
PHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0aDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjAw
KSIvPgorICAgIDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGg1IiB0cmFuc2Zvcm09InRyYW5z
bGF0ZSgwLDQwMCkiLz4KKyAgICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoNSIgdHJhbnNm
b3JtPSJ0cmFuc2xhdGUoMCw2MDApIi8+CisgICAgPHVzZSB4bGluazpocmVmPSIjVGV4dE9uUGF0
aDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsODAwKSIvPgorICA8L2c+CisKKyAgPHVzZSB4bGlu
azpocmVmPSIjVGV4dE9uUGF0aDI1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDAwLDApIi8+Cisg
IDx1c2UgeGxpbms6aHJlZj0iI1RleHRPblBhdGgyNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwx
MjAwKSIvPgorICA8dXNlIHhsaW5rOmhyZWY9IiNUZXh0T25QYXRoMjUiIHRyYW5zZm9ybT0idHJh
bnNsYXRlKDIwMDAsMTIwMCkiLz4KKworICA8cmVjdCB4PSIxIiB5PSIxIiB3aWR0aD0iMzk5OSIg
aGVpZ2h0PSIyNDk5IiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIi
IC8+Cis8L3N2Zz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjgxNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5NSBAQAorMjAxNS0w
NC0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAg
ICAgIHRleHRQYXRoIGxheW91dCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTU3MC4KKworICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBUaGUgYm90dGxlbmVjayBvZiB0aGUg
dGV4dC1vbi1wYXRoIHBlcmZvcm1hbmNlIGlzIHRoZSBwb3NpdGlvbiBhbmQgYW5nbGUKKyAgICAg
ICAgY2FsY3VsYXRpb25zIGZvciBldmVyeSBzaW5nbGUgY2hhcmFjdGVyLiBJZiB0aGUgbnVtYmVy
IG9mIGNoYXJhY3RlcnMgaXMKKyAgICAgICAgJ24nIGFuZCB0aGUgbnVtYmVyIG9mIHBhdGggZWxl
bWVudHMgaXMgJ20nLCB0aGUgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NpbmcKKyAgICAgICAgdGhl
IHBhdGggZWxlbWVudHMgaXMgTygyIHggbiB4IG0pLiBXaGF0IG1ha2VzIGl0IHJlYWxseSB3b3Jz
ZSBpcywgZm9yIGV2ZXJ5CisgICAgICAgIGN1cnZlIHdlIGtlZXAgc3BsaXR0aW5nIHRoZSBjdXJ2
ZSB0aWxsIHRoZSBzcGxpdCBjdXJ2ZSBpcyBhbG1vc3QgYSBzdHJhaWdodAorICAgICAgICBsaW5l
LiBUaGUgY2hhbmdlcyB3ZSBuZWVkIHRvIGRvIGFyZToKKyAgICAgICAgMS4gTWVyZ2UgdGhlIHBv
c2l0aW9uIGFuZCB0aGUgYW5nbGUgdHJhdmVyc2FscyBpbiBvbmUgcGFzcyBzaW5jZSB0aGV5IGFy
ZQorICAgICAgICAgICByZXR1cm5pbmcgaW5mbyBmb3IgdGhlIHNhbWUgbGVuZ3RoIG9uIHRoZSBw
YXRoLiBUaGVyZSBpcyBhIGRlZ2VuZXJhdGUKKyAgICAgICAgICAgY2FzZSBmb3IgdGhlIHN0YXJ0
aW5nIHBvaW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIGFuZ2xlLiBUaGUgb3JpZ2luYWwKKyAgICAg
ICAgICAgY29kZSB3YXMgc29sdmluZyB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBhbiBlcHNpbG9u
IGluc3RlYWQgb2YgemVybyBidXQKKyAgICAgICAgICAgYmVjYXVzZSB0cmF2ZXJzaW5nIHRoZSBw
YXRoIGZvciBwb3NpdGlvbiBhbmQgYW5nbGUgYXJlIG5vdyBtZXJnZWQsIHdlCisgICAgICAgICAg
IHdpbGwgcGFzcyB6ZXJvIGZvciB0aGUgc3RhcnRpbmcgcG9pbnQgYXMgaXMuIEFsbCB3ZSBuZWVk
IGlzIHRvIG1vdmUgb25lCisgICAgICAgICAgIHN0ZXAgYWhlYWQgd2l0aG91dCBtb3ZpbmcgdGhl
IHBvc2l0aW9uLiBXZSBuZWVkIHRoZSBleHRyYSBzdGVwIGZvcndhcmQKKyAgICAgICAgICAgdG8g
Y2FsY3VsYXRlIHRoZSBzbG9wZSBvZiB0aGUgcGF0aCBhdCB0aGUgc3RhcnRpbmcgcG9pbnQuCisg
ICAgICAgIDIuIFdlIG5lZWQgdG8gYWRkIGEgbmV3IG1vZGUgdG8gdHJhdmVyc2luZyBhIHBhdGgu
IFRoZSBuZXcgbW9kZSB3aWxsIHRha2UKKyAgICAgICAgICAgYSB2ZWN0b3Igb2YgbGVuZ3RocyBh
bmQgcmV0dXJucyBhIHZlY3RvciBvZiBhcnJvdyB2ZWN0b3JzLiBFdmVyeSBhcnJvdworICAgICAg
ICAgICB2ZWN0b3IgcmVwcmVzZW50cyBhIHBvc2l0aW9uIGFuZCBhbiBhbmdsZSBvbiB0aGUgcGF0
aCBhdCBhIGNlcnRhaW4gbGVuZ3RoLgorICAgICAgICAgICBUaGlzIHJlcXVpcmVzIGNoYW5naW5n
IHRoZSBTVkdUZXh0TGF5b3V0RW5naW5lIHRvIGNhbGN1bGF0ZSB0aGUgbGVuZ3RocworICAgICAg
ICAgICBvZiB0aGUgY2hhcmFjdGVycyBvbiB0aGUgY3VydmUgZmlyc3QgYW5kIHRoZW4gcGFzc2lu
ZyBhbGwgb2YgdGhlbSB0byB0aGUKKyAgICAgICAgICAgcGF0aCB0cmF2ZXJzYWwgZnVuY3Rpb24u
IEluc3RlYWQgb2YgdHJhdmVyc2luZyB0aGUgcGF0aCBmb3IgZXZlcnkgbGVuZ3RoLAorICAgICAg
ICAgICB3ZSBhcmUgZ29pbmcgdG8gZ2V0IHRoZSByZXF1aXJlZCBwb2ludCBhbmQgYW5nbGUgZnJv
bSB0aGUgdmVjdG9yIG9mIGFycm93CisgICAgICAgICAgIHZlY3RvcnMuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoZSBmaXJzdCBmaXggb25seS4gVGhlIHNlY29uZCBvbmUg
d2lsbCByZXF1aXJlCisgICAgICAgIHJlZmFjdG9yaW5nIHRoZSBTVkdUZXh0TGF5b3V0RW5naW5l
IHNvIEkgYW0gZ29pbmcgdG8gYWRkcmVzcyBpdCBpbiBhCisgICAgICAgIGRpZmZlcmVudCBwYXRj
aC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbik6IEl0IGlzIGNsZWFuZXIgdG8gbW92ZSB0
aGUgZnVuY3Rpb24KKyAgICAgICAgb2YgdGhpcyBtZXRob2QgdG8gUGF0aFRyYXZlcnNhbFN0YXRl
Ojpwcm9jZXNzUGF0aEVsZW1lbnQoKS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRo
OjpsZW5ndGgpOiBVc2UgbmV3IGVudW0gQWN0aW9uIHZhbHVlIGFuZCBhY2Nlc3MgbWV0aG9kcy4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3Ro
KTogTmV3IGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlCisgICAgICAgIHRyYXZlcnNhbFN0YXRl
IGF0IGEgY2VydGFpbiBsZW5ndGggb24gYSBwYXRoLgorICAgICAgICAKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6OnBvaW50QXRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6bm9ybWFs
QW5nbGVBdExlbmd0aCk6IFVzZSB0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKCkgdG8gZ2V0CisgICAg
ICAgIHRoZSB0cmF2ZXJzYWxTdGF0ZSBhbmQgZnJvbSBpdCByZXR1cm4gZWl0aGVyIHRoZSBwb3Np
dGlvbiBvciB0aGUgYW5nbGUuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1BhdGguaDogRGVmaW5lIHRyYXZlcnNhbFN0YXRlQXRMZW5ndGgoKS4KKyAgICAgICAgCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmRpc3RhbmNlTGluZSk6IENvZGUgY2xlYW4gdXAuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6Y3VydmVMZW5ndGgpOiBNYWtlIHRoZSBzZXR0aW5nIG9mIG1fcHJldmlvdXMg
YW5kIG1fY3VycmVudCBoYXBwZW5zCisgICAgICAgIG9ubHkgaW4gdGhpcyBmdW5jdGlvbi4KKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OlBhdGhUcmF2ZXJz
YWxTdGF0ZSk6IEFkZCBhbiBvcHRpb25hbCBwYXJhbWV0ZXIKKyAgICAgICAgZm9yIHRoZSBkZXNp
cmVkIGxlbmd0aCBhbmQgbW92ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG90aGVyIG1lbWJl
cnMgdG8KKyAgICAgICAgdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpjbG9zZVN1YnBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjptb3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aFRyYXZlcnNhbFN0YXRlOjpsaW5lVG8pOiBBZGQgdGhlIGRpc3RhbmNlIHRvIHRoZSBtX3RvdGFs
TGVuZ3RoCisgICAgICAgIGluc3RlYWQgb2YgcmV0dXJuaW5nIGl0IHNpbmNlIHRoaXMgaXMgd2hh
dCBhbGwgdGhlIGNhbGxlcnMgd2VyZSBkb2luZy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGhUcmF2ZXJzYWxTdGF0ZTo6Y3ViaWNCZXppZXJUbyk6IEFkZCB0aGUgZGlzdGFuY2Ug
dG8gdGhlCisgICAgICAgIG1fdG90YWxMZW5ndGguIE1vdmUgdGhlIHNldHRpbmcgb2YgbV9wcmV2
aW91cyBhbmQgbV9jdXJyZW50IHRvIGN1cnZlTGVuZ3RoKCkuCisgICAgICAgIFJlbW92ZSB1bnVz
ZWQgbWVtYmVycyBtX2NvbnRyb2wxIGFuZCBtX2NvbnRyb2wyLgorCisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OnByb2Nlc3NTZWdtZW50KTogRGVsZXRlZC4gICAgICAgIAor
ICAgICAgICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpmaW5hbGl6ZUFwcGVuZFBhdGhF
bGVtZW50KTogQ3JlYXRlIGEgbmV3CisgICAgICAgIG5hbWUgZm9yIHRoZSBmdW5jdGlvbi4gSGFu
ZGxlIHRoZSBjYXNlIG9mIHRoZSBhbmdsZSBhdCB0aGUgc3RhcnRpbmcgcG9pbnQKKyAgICAgICAg
d2hlcmUgbV9kZXNpcmVkTGVuZ3RoIGlzIHNldCB0byB6ZXJvLiBUaGUgbmV3IGZsYWcgbV9pc1pl
cm9WZWN0b3Igd2lsbCBiZQorICAgICAgICBzZXQgdG8gbm90aWZ5IHRoZSBjYWxsZXIgdGhhdCB0
aGUgIG5leHQgaXRlcmF0aW9uIHdpbGwgYmUgdGhlIGxhc3Qgb25lIGFuZAorICAgICAgICBpdCBp
cyBvbmx5IG5lZWRlZCBmb3IgdGhlIGNhbGN1bGF0aW5nIHRoZSBhbmdsZSBvZiBhIHplcm8gdmVj
dG9yLiBtX2N1cnJlbnQKKyAgICAgICAgc2hvdWxkIG5vdCBjaGFuZ2UgYnkgdGhpcyBsYXN0IGl0
ZXJhdGlvbi4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6
OmFwcGVuZFBhdGhFbGVtZW50KTogVGhpcyBjb2RlIGlzIG1vdmVkIGZyb20KKyAgICAgICAgcGF0
aExlbmd0aEFwcGxpZXJGdW5jdGlvbigpLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1BhdGhFbGVtZW50KTogVGhpcyBmdW5jdGlvbiBpcyB1
c2VkCisgICAgICAgIGJ5IHRoZSBjbGFzcyBQYXRoLiBJdCBpcyBhIHdyYXBwZXIgZm9yIGFwcGVu
ZFBhdGhFbGVtZW50KCkuIElmIG1faXNaZXJvVmVjdG9yCisgICAgICAgIGlzIHNldCB3ZSBhcHBl
bmQgdGhlIG5ldyBlbGVtZW50IHRvIGEgY29weSBmb3IgdGhlIFBhdGhUcmF2ZXJzYWxTdGF0ZSBq
dXN0CisgICAgICAgIHRvIGdldCB0aGUgYW5nbGUgZm9yIHRoZSB6ZXJvIHZlY3Rvci4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oOiBDaGFuZ2UgdGhl
IGVudW0gdmFsdWVzIHRvIG5vdAorICAgICAgICBub3QgaW5jbHVkZSB0aGUgY2xhc3Mgb3IgdGhl
IGVudW0gY2xhc3MuIE1ha2UgdGhlIGRhdGEgbWVtYmVycyBwcml2YXRlIGFuZAorICAgICAgICBl
eHBvc2UgdGhlIG5lZWRlZCBvbmVzIHRocm91Z2ggYWNjZXNzIG1ldGhvZHMuIE1ha2UgYWxsIHRo
ZSBpbnRlcm5hbCBtZXRob2RzCisgICAgICAgIHRvIGJlIHByaXZhdGUuCisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0YXRlOjpwcm9jZXNzUGF0aEVsZW1lbnQpOiAg
QW5vdGhlciB3cmFwcGVyIGZvcgorICAgICAgICBhcHBlbmRQYXRoRWxlbWVudCgpIHdoaWNoIGlz
IHVzZWQgYnkgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci4KKyAgICAgICAgCisgICAgICAg
IChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OmFjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OnNldEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
VHJhdmVyc2FsU3RhdGU6OmRlc2lyZWRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aFRy
YXZlcnNhbFN0YXRlOjpzZXREZXNpcmVkTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhU
cmF2ZXJzYWxTdGF0ZTo6c3VjY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2Fs
U3RhdGU6OnRvdGFsTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhUcmF2ZXJzYWxTdGF0
ZTo6Y3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6Om5vcm1h
bEFuZ2xlKTogTmV3IGFjY2VzcyBtZXRob2RzIHdoaWNoIGFyZSBub3cKKyAgICAgICAgbmVlZGVk
IGFmdGVyIG1ha2luZyB0aGUgZGF0YSBtZW1iZXJzIHByaXZhdGUuCisgICAgICAgIAorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdSb290SW5saW5lQm94OjpsYXlvdXRDaGFyYWN0ZXJzSW5UZXh0Qm94ZXMpOiBNYWtlIHRo
ZSBjYXN0aW5nCisgICAgICAgIG9mIHRoZSByZW5kZXJlciBvbiB0aGUgY2FsbGVyIHNpZGUuCisg
ICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKTogVGhlIGNvbnN0cnVjdG9y
IHNob3VsZCBhcHBlbmQgdGhlCisgICAgICAgIGVsZW1lbnRzIG9mIG1fYm94ZXMgaW5zdGVhZCBv
ZiBtYWtpbmcgdGhpcyBmcm9tIG91dHNpZGUgdGhlIGNsYXNzLgorICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRDaHVuazo6dG90YWxDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRDaHVuazo6dG90YWxMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4
dENodW5rOjpjYWxjdWxhdGVMZW5ndGgpOiBEZWxldGVkLgorICAgICAgICBSZXBsYWNlIGNhbGN1
bGF0ZUxlbmd0aCgpIGJ5IHRvdGFsQ2hhcmFjdGVycygpIGFuZCB0b3RhbExlbmd0aCgpIHRvIG1h
a2UKKyAgICAgICAgdGhlIGludGVyZmFjZSBjbGVhbmVyLgorICAgICAgICAKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRDaHVuazo6dG90YWxBbmNob3JTaGlmdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bms6OmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdCk6IERlbGV0ZWQuCisgICAg
ICAgIFJlbmFtZSB0aGUgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bms6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bms6
OnByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVGV4dENodW5rOjpidWlsZEJveFRyYW5zZm9ybWF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0Q2h1bms6OmJveFNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dENodW5rOjpwcm9jZXNzVGV4dEFuY2hvckNvcnJlY3Rpb24pOgorICAg
ICAgICBNb3ZlIHRoZSBjaHVuayBsYXlvdXQgY29kZSBmcm9tIFNWR1RleHRDaHVua0J1aWxkZXI6
OmxheW91dFRleHRDaHVua3MoKQorICAgICAgICB0byB0aGUgU1ZHVGV4dENodW5rOjpsYXlvdXQo
KS4gTW92ZSBhbGwgdGhlIGhlbHBlciBmdW5jdGlvbnMgYXMgd2VsbC4KKyAgICAgICAgCisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRDaHVuazo6aGFzVGV4dEFuY2hvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1
bms6OmJveGVzKTogRGVsZXRlZC4KKyAgICAgICAgQWRkIHRoZSBuZXcgbWV0aG9kcyBhbmQgY2hh
bmdlIG1vc3Qgb2YgdGhlIHB1YmxpYyBtZXRob2RzIHRvIGJlIHByaXZhdGUuCisgICAgICAgIAor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtCdWlsZGVyOjp0b3RhbENoYXJhY3RlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6dG90YWxMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6dG90YWxBbmNob3JTaGlmdCk6IFRoaXMgY29k
ZSBpcyBtb3ZlZCBmcm9tCisgICAgICAgIFNWR1RleHRMYXlvdXRFbmdpbmUuIEl0IHNjYW5zIHRo
ZSBib3hlcyBzdG9yZWQgaW4gdGhlIFNWR1RleHRDaHVua0J1aWxkZXIKKyAgICAgICAgYW5kIHN1
bXMgdXAgdGhlIHRvdGFsIHZhbHVlcy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpTVkdU
ZXh0Q2h1bmtCdWlsZGVyOjp0cmFuc2Zvcm1hdGlvbkZvclRleHRCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6YnVpbGRUZXh0Q2h1bmtzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRDaHVua0J1aWxkZXI6OmxheW91dFRleHRDaHVua3MpOiBDb2RlIGNsZWFu
IHVwLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVua0J1aWxkZXI6OmFk
ZFRleHRDaHVuayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtCdWls
ZGVyOjpwcm9jZXNzVGV4dENodW5rKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rl
eHRDaHVua0J1aWxkZXI6OnByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vzc1RleHRB
bmNob3JDb3JyZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVu
a0J1aWxkZXI6OmJ1aWxkU3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybSk6IERlbGV0ZWQuCisgICAg
ICAgIFRoaXMgY29kZSBub3cgbGl2ZXMgaW4gU1ZHVGV4dENodW5rLgorICAgICAgICAKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuaDogQWRkIG5ldyBtZXRob2Rz
IGZvciBjb2RlIHdoaWNoIHdhcworICAgICAgICBtb3ZlZCBmcm9tIFNWR1RleHRMYXlvdXRFbmdp
bmUgYW5kIHJlbW92ZSBtZXRob2RzIGZvciBjb2RlIHdoaWNoIHdhcyByZW1vdmVkCisgICAgICAg
IHRvIFNWR1RleHRDaHVuay4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdp
bmU6OmJlZ2luVGV4dFBhdGhMYXlvdXQpOiBVc2UgdGhlIHN1bSB1cCBtZXRob2RzCisgICAgICAg
IGZyb20gU1ZHVGV4dENodW5rQnVpbGRlciBpbnN0ZWFkIG9mIGxvb3BpbmcgdGhyb3VnaCB0aGUg
Y2h1bmtzLiBBbHNvIGdldCBhCisgICAgICAgIGNsZWFuIG9yZGVyIGZvciBkZWZpbmluZyB2YXJp
YWJsZXMgYW5kIGRvaW5nIHRoZSBjYWxjdWxhdGlvbnMuCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dExheW91dEVuZ2luZTo6ZmluYWxpemVUcmFuc2Zvcm1NYXRyaWNlcyk6IENv
ZGUgY2xlYW4gdXAuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEVu
Z2luZTo6bGF5b3V0VGV4dE9uTGluZU9yUGF0aCk6IERvIGEgc2luZ2xlIHBhdGgKKyAgICAgICAg
dHJhdmVyc2FsIHRvIGdldCB0aGUgcG9zaXRpb24gYW5kIHRoZSBhbmdsZSBmb3IgYSBsZW5ndGgg
b24gYSBwYXRoLgorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmJ1aWxk
VHJhbnNmb3JtRm9yUHJvZ3Jlc3MpOiBEbyBhIHNpbmdsZQorICAgICAgICBwYXRoIHRyYXZlcnNh
bCB0byBnZXQgdGhlIHBvc2l0aW9uIGFuZCB0aGUgYW5nbGUgYXQgYSBsZW5ndGggb24gYSBwYXRo
LgorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpTVkdQ
YXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2
ZXJzYWxTdGF0ZUJ1aWxkZXI6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoVHJh
dmVyc2FsU3RhdGVCdWlsZGVyOjpsaW5lVG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlcjo6Y3VydmVUb0N1YmljKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmNsb3NlUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpzZXREZXNpcmVkTGVuZ3RoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmNvbnRpbnVlQ29uc3Vt
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnRv
dGFsTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxk
ZXI6OmN1cnJlbnRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoVHJhdmVyc2FsU3Rh
dGVCdWlsZGVyOjppbmNyZW1lbnRQYXRoU2VnbWVudENvdW50KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnBhdGhTZWdtZW50SW5kZXgp
OiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpwYXRoU2Vn
bWVudEluZGV4KToKKyAgICAgICAgQ29kZSBjbGVhbiB1cC4KKyAgICAgICAgCisgICAgICAgICog
c3ZnL1NWR1BhdGhVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U1ZHUGF0aFNl
Z0F0TGVuZ3RoRnJvbVNWR1BhdGhCeXRlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFRv
dGFsTGVuZ3RoT2ZTVkdQYXRoQnl0ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQb2lu
dEF0TGVuZ3RoT2ZTVkdQYXRoQnl0ZVN0cmVhbSk6IFVzZSBuZXcgVHJhdmVyc2FsU3RhdGU6OkFj
dGlvbgorICAgICAgICBlbnVtIHZhbHVlcy4KKwogMjAxNS0wNC0xNCAgUm9nZXIgRm9uZyAgPHJv
Z2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFRpbWUgbnVtYmVycyBv
biBtZWRpYSBjb250cm9scyBtb3ZlIGFzIHRoZXkgdXBkYXRlIG9uIE9TWC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCShyZXZpc2lvbiAxODI3NTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNTQgKzQyLDMyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyB2b2lkIHBh
dGhMZW5ndGhBcHBsaWVyRnVuY3Rpb24odm9pZCogaW5mbywgY29uc3QgUGF0aEVsZW1lbnQqIGVs
ZW1lbnQpCiB7CiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlJiB0cmF2ZXJzYWxTdGF0ZSA9ICpzdGF0
aWNfY2FzdDxQYXRoVHJhdmVyc2FsU3RhdGUqPihpbmZvKTsKLSAgICBpZiAodHJhdmVyc2FsU3Rh
dGUubV9zdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRQb2ludCogcG9pbnRzID0g
ZWxlbWVudC0+cG9pbnRzOwotICAgIGZsb2F0IHNlZ21lbnRMZW5ndGggPSAwOwotICAgIHN3aXRj
aCAoZWxlbWVudC0+dHlwZSkgewotICAgICAgICBjYXNlIFBhdGhFbGVtZW50TW92ZVRvUG9pbnQ6
Ci0gICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVyc2FsU3RhdGUubW92ZVRvKHBvaW50
c1swXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQYXRoRWxlbWVudEFkZExp
bmVUb1BvaW50OgotICAgICAgICAgICAgc2VnbWVudExlbmd0aCA9IHRyYXZlcnNhbFN0YXRlLmxp
bmVUbyhwb2ludHNbMF0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGF0aEVs
ZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50OgotICAgICAgICAgICAgc2VnbWVudExlbmd0aCA9IHRy
YXZlcnNhbFN0YXRlLnF1YWRyYXRpY0JlemllclRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50
OgotICAgICAgICAgICAgc2VnbWVudExlbmd0aCA9IHRyYXZlcnNhbFN0YXRlLmN1YmljQmV6aWVy
VG8ocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBQYXRoRWxlbWVudENsb3NlU3VicGF0aDoKLSAgICAgICAgICAgIHNlZ21l
bnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5jbG9zZVN1YnBhdGgoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICB0cmF2ZXJzYWxTdGF0ZS5tX3RvdGFsTGVuZ3RoICs9IHNlZ21lbnRM
ZW5ndGg7IAotICAgIHRyYXZlcnNhbFN0YXRlLnByb2Nlc3NTZWdtZW50KCk7CisgICAgdHJhdmVy
c2FsU3RhdGUucHJvY2Vzc1BhdGhFbGVtZW50KGVsZW1lbnQpOwogfQogCiBmbG9hdCBQYXRoOjps
ZW5ndGgoKSBjb25zdAogewotICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQ
YXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNhbFRvdGFsTGVuZ3RoKTsKKyAgICBQYXRoVHJhdmVy
c2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpBY3Rpb246OlRvdGFs
TGVuZ3RoKTsKICAgICBhcHBseSgmdHJhdmVyc2FsU3RhdGUsIHBhdGhMZW5ndGhBcHBsaWVyRnVu
Y3Rpb24pOwotICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0ZS5tX3RvdGFsTGVuZ3RoOworICAgIHJl
dHVybiB0cmF2ZXJzYWxTdGF0ZS50b3RhbExlbmd0aCgpOwogfQogCi1GbG9hdFBvaW50IFBhdGg6
OnBvaW50QXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3QKK1BhdGhUcmF2ZXJz
YWxTdGF0ZSBQYXRoOjp0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYg
c3VjY2VzcykgY29uc3QKIHsKLSAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUo
UGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoKTsKLSAgICB0cmF2ZXJz
YWxTdGF0ZS5tX2Rlc2lyZWRMZW5ndGggPSBsZW5ndGg7CisgICAgUGF0aFRyYXZlcnNhbFN0YXRl
IHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6QWN0aW9uOjpWZWN0b3JBdExlbmd0
aCwgbGVuZ3RoKTsKICAgICBhcHBseSgmdHJhdmVyc2FsU3RhdGUsIHBhdGhMZW5ndGhBcHBsaWVy
RnVuY3Rpb24pOwotICAgIG9rID0gdHJhdmVyc2FsU3RhdGUubV9zdWNjZXNzOwotICAgIHJldHVy
biB0cmF2ZXJzYWxTdGF0ZS5tX2N1cnJlbnQ7CisgICAgc3VjY2VzcyA9IHRyYXZlcnNhbFN0YXRl
LnN1Y2Nlc3MoKTsKKyAgICByZXR1cm4gdHJhdmVyc2FsU3RhdGU7CiB9CiAKLWZsb2F0IFBhdGg6
Om5vcm1hbEFuZ2xlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3QKK0Zsb2F0
UG9pbnQgUGF0aDo6cG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIHN1Y2Nlc3MpIGNv
bnN0CiB7Ci0gICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJz
YWxTdGF0ZTo6VHJhdmVyc2FsTm9ybWFsQW5nbGVBdExlbmd0aCk7Ci0gICAgdHJhdmVyc2FsU3Rh
dGUubV9kZXNpcmVkTGVuZ3RoID0gbGVuZ3RoID8gbGVuZ3RoIDogc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OmVwc2lsb24oKTsKLSAgICBhcHBseSgmdHJhdmVyc2FsU3RhdGUsIHBhdGhMZW5n
dGhBcHBsaWVyRnVuY3Rpb24pOwotICAgIG9rID0gdHJhdmVyc2FsU3RhdGUubV9zdWNjZXNzOwot
ICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0ZS5tX25vcm1hbEFuZ2xlOworICAgIHJldHVybiB0cmF2
ZXJzYWxTdGF0ZUF0TGVuZ3RoKGxlbmd0aCwgc3VjY2VzcykuY3VycmVudCgpOworfQorCitmbG9h
dCBQYXRoOjpub3JtYWxBbmdsZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgc3VjY2Vzcykg
Y29uc3QKK3sKKyAgICByZXR1cm4gdHJhdmVyc2FsU3RhdGVBdExlbmd0aChsZW5ndGgsIHN1Y2Nl
c3MpLm5vcm1hbEFuZ2xlKCk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHJvdW5kaW5nUmFkaWksIFJvdW5kZWRS
ZWN0U3RyYXRlZ3kgc3RyYXRlZ3kpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5oCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiAgICAgY2xhc3MgRmxvYXRT
aXplOwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKKyAgICBjbGFzcyBQYXRoVHJhdmVyc2Fs
U3RhdGU7CiAgICAgY2xhc3MgUm91bmRlZFJlY3Q7CiAgICAgY2xhc3MgU3Ryb2tlU3R5bGVBcHBs
aWVyOwogCkBAIC0xMDAsMTAgKzEwMSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IEZsb2F0UmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsKICAgICAgICAgRmxvYXRSZWN0IGZhc3RC
b3VuZGluZ1JlY3QoKSBjb25zdDsKICAgICAgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nUmVj
dChTdHJva2VTdHlsZUFwcGxpZXIqID0gMCkgY29uc3Q7Ci0gICAgICAgIAorCiAgICAgICAgIGZs
b2F0IGxlbmd0aCgpIGNvbnN0OwotICAgICAgICBGbG9hdFBvaW50IHBvaW50QXRMZW5ndGgoZmxv
YXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3Q7Ci0gICAgICAgIGZsb2F0IG5vcm1hbEFuZ2xlQXRM
ZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3Q7CisgICAgICAgIFBhdGhUcmF2ZXJz
YWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgc3VjY2Vz
cykgY29uc3Q7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgs
IGJvb2wmIHN1Y2Nlc3MpIGNvbnN0OworICAgICAgICBmbG9hdCBub3JtYWxBbmdsZUF0TGVuZ3Ro
KGZsb2F0IGxlbmd0aCwgYm9vbCYgc3VjY2VzcykgY29uc3Q7CiAKICAgICAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjbGVhcigpOwogICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3BhdGg7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhU
cmF2ZXJzYWxTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcAkocmV2aXNpb24gMTgyNzU4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0z
NCw3ICszNSw5IEBAIHN0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBtaWRQb2ludChjb25zdCAKIAog
c3RhdGljIGlubGluZSBmbG9hdCBkaXN0YW5jZUxpbmUoY29uc3QgRmxvYXRQb2ludCYgc3RhcnQs
IGNvbnN0IEZsb2F0UG9pbnQmIGVuZCkKIHsKLSAgICByZXR1cm4gc3FydGYoKGVuZC54KCkgLSBz
dGFydC54KCkpICogKGVuZC54KCkgLSBzdGFydC54KCkpICsgKGVuZC55KCkgLSBzdGFydC55KCkp
ICogKGVuZC55KCkgLSBzdGFydC55KCkpKTsKKyAgICBmbG9hdCBkeCA9IGVuZC54KCkgLSBzdGFy
dC54KCk7CisgICAgZmxvYXQgZHkgPSBlbmQueSgpIC0gc3RhcnQueSgpOworICAgIHJldHVybiBz
cXJ0ZihkeCAqIGR4ICsgZHkgKiBkeSk7CiB9CiAKIHN0cnVjdCBRdWFkcmF0aWNCZXppZXIgewpA
QCAtMTE0LDExMCArMTE3LDE0OSBAQCBzdHJ1Y3QgQ3ViaWNCZXppZXIgewogLy8gQW5vdGhlciBj
aGVjayB3aGljaCBpcyBwb3NzaWJsZSB1cC1mcm9udCAodG8gc2VuZCB1cyBkb3duIHRoZSBmYXN0
IHBhdGgpIHdvdWxkIGJlIHRvIGNoZWNrIGlmCiAvLyBhcHByb3hpbWF0ZURpc3RhbmNlKCkgKyBj
dXJyZW50IHRvdGFsIGRpc3RhbmNlID4gZGVzaXJlZCBkaXN0YW5jZQogdGVtcGxhdGU8Y2xhc3Mg
Q3VydmVUeXBlPgotc3RhdGljIGZsb2F0IGN1cnZlTGVuZ3RoKFBhdGhUcmF2ZXJzYWxTdGF0ZSYg
dHJhdmVyc2FsU3RhdGUsIEN1cnZlVHlwZSBjdXJ2ZSkKK3N0YXRpYyBmbG9hdCBjdXJ2ZUxlbmd0
aChjb25zdCBQYXRoVHJhdmVyc2FsU3RhdGUmIHRyYXZlcnNhbFN0YXRlLCBjb25zdCBDdXJ2ZVR5
cGUmIG9yaWdpbmFsQ3VydmUsIEZsb2F0UG9pbnQmIHByZXZpb3VzLCBGbG9hdFBvaW50JiBjdXJy
ZW50KQogewogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjdXJ2ZVN0YWNrRGVwdGhMaW1pdCA9
IDIwOwotCi0gICAgVmVjdG9yPEN1cnZlVHlwZT4gY3VydmVTdGFjazsKLSAgICBjdXJ2ZVN0YWNr
LmFwcGVuZChjdXJ2ZSk7Ci0KKyAgICBDdXJ2ZVR5cGUgY3VydmUgPSBvcmlnaW5hbEN1cnZlOwor
ICAgIFZlY3RvcjxDdXJ2ZVR5cGUsIGN1cnZlU3RhY2tEZXB0aExpbWl0PiBjdXJ2ZVN0YWNrOwog
ICAgIGZsb2F0IHRvdGFsTGVuZ3RoID0gMDsKLSAgICBkbyB7CisKKyAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICBmbG9hdCBsZW5ndGggPSBjdXJ2ZS5hcHByb3hpbWF0ZURpc3RhbmNlKCk7Ci0g
ICAgICAgIGlmICgobGVuZ3RoIC0gZGlzdGFuY2VMaW5lKGN1cnZlLnN0YXJ0LCBjdXJ2ZS5lbmQp
KSA+IGtQYXRoU2VnbWVudExlbmd0aFRvbGVyYW5jZSAmJiBjdXJ2ZVN0YWNrLnNpemUoKSA8PSBj
dXJ2ZVN0YWNrRGVwdGhMaW1pdCkgeworCisgICAgICAgIGlmICgobGVuZ3RoIC0gZGlzdGFuY2VM
aW5lKGN1cnZlLnN0YXJ0LCBjdXJ2ZS5lbmQpKSA+IGtQYXRoU2VnbWVudExlbmd0aFRvbGVyYW5j
ZSAmJiBjdXJ2ZVN0YWNrLnNpemUoKSA8IGN1cnZlU3RhY2tEZXB0aExpbWl0KSB7CiAgICAgICAg
ICAgICBDdXJ2ZVR5cGUgbGVmdEN1cnZlOwogICAgICAgICAgICAgQ3VydmVUeXBlIHJpZ2h0Q3Vy
dmU7CiAgICAgICAgICAgICBjdXJ2ZS5zcGxpdChsZWZ0Q3VydmUsIHJpZ2h0Q3VydmUpOwogICAg
ICAgICAgICAgY3VydmUgPSBsZWZ0Q3VydmU7CiAgICAgICAgICAgICBjdXJ2ZVN0YWNrLmFwcGVu
ZChyaWdodEN1cnZlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3Ro
ICs9IGxlbmd0aDsKLSAgICAgICAgICAgIGlmICh0cmF2ZXJzYWxTdGF0ZS5tX2FjdGlvbiA9PSBQ
YXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNhbFBvaW50QXRMZW5ndGgKLSAgICAgICAgICAgICB8
fCB0cmF2ZXJzYWxTdGF0ZS5tX2FjdGlvbiA9PSBQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNh
bE5vcm1hbEFuZ2xlQXRMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5t
X3ByZXZpb3VzID0gY3VydmUuc3RhcnQ7Ci0gICAgICAgICAgICAgICAgdHJhdmVyc2FsU3RhdGUu
bV9jdXJyZW50ID0gY3VydmUuZW5kOwotICAgICAgICAgICAgICAgIGlmICh0cmF2ZXJzYWxTdGF0
ZS5tX3RvdGFsTGVuZ3RoICsgdG90YWxMZW5ndGggPiB0cmF2ZXJzYWxTdGF0ZS5tX2Rlc2lyZWRM
ZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbExlbmd0aDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGN1cnZlID0gY3VydmVTdGFjay5sYXN0KCk7Ci0gICAgICAgICAg
ICBjdXJ2ZVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9Ci0gICAgfSB3aGlsZSAoIWN1cnZlU3RhY2suaXNFbXB0eSgpKTsKLSAgICAKKworICAgICAg
ICB0b3RhbExlbmd0aCArPSBsZW5ndGg7CisgICAgICAgIGlmICh0cmF2ZXJzYWxTdGF0ZS5hY3Rp
b24oKSA9PSBQYXRoVHJhdmVyc2FsU3RhdGU6OkFjdGlvbjo6VmVjdG9yQXRMZW5ndGgpIHsKKyAg
ICAgICAgICAgIHByZXZpb3VzID0gY3VydmUuc3RhcnQ7CisgICAgICAgICAgICBjdXJyZW50ID0g
Y3VydmUuZW5kOworICAgICAgICAgICAgaWYgKHRyYXZlcnNhbFN0YXRlLnRvdGFsTGVuZ3RoKCkg
KyB0b3RhbExlbmd0aCA+IHRyYXZlcnNhbFN0YXRlLmRlc2lyZWRMZW5ndGgoKSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdXJ2ZVN0YWNrLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGN1cnZlID0gY3VydmVTdGFjay5s
YXN0KCk7CisgICAgICAgIGN1cnZlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgIH0KKworICAgIGlm
ICh0cmF2ZXJzYWxTdGF0ZS5hY3Rpb24oKSAhPSBQYXRoVHJhdmVyc2FsU3RhdGU6OkFjdGlvbjo6
VmVjdG9yQXRMZW5ndGgpIHsKKyAgICAgICAgQVNTRVJUKGN1cnZlLmVuZCA9PSBvcmlnaW5hbEN1
cnZlLmVuZCk7CisgICAgICAgIHByZXZpb3VzID0gY3VydmUuc3RhcnQ7CisgICAgICAgIGN1cnJl
bnQgPSBjdXJ2ZS5lbmQ7CisgICAgfQorCiAgICAgcmV0dXJuIHRvdGFsTGVuZ3RoOwogfQogCi1Q
YXRoVHJhdmVyc2FsU3RhdGU6OlBhdGhUcmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsQWN0aW9u
IGFjdGlvbikKK1BhdGhUcmF2ZXJzYWxTdGF0ZTo6UGF0aFRyYXZlcnNhbFN0YXRlKEFjdGlvbiBh
Y3Rpb24sIGZsb2F0IGRlc2lyZWRMZW5ndGgpCiAgICAgOiBtX2FjdGlvbihhY3Rpb24pCi0gICAg
LCBtX3N1Y2Nlc3MoZmFsc2UpCi0gICAgLCBtX3RvdGFsTGVuZ3RoKDApCi0gICAgLCBtX3NlZ21l
bnRJbmRleCgwKQotICAgICwgbV9kZXNpcmVkTGVuZ3RoKDApCi0gICAgLCBtX25vcm1hbEFuZ2xl
KDApCisgICAgLCBtX2Rlc2lyZWRMZW5ndGgoZGVzaXJlZExlbmd0aCkKIHsKKyAgICBBU1NFUlQo
YWN0aW9uICE9IEFjdGlvbjo6VG90YWxMZW5ndGggfHwgIWRlc2lyZWRMZW5ndGgpOwogfQogCi1m
bG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6OmNsb3NlU3VicGF0aCgpCit2b2lkIFBhdGhUcmF2ZXJz
YWxTdGF0ZTo6Y2xvc2VTdWJwYXRoKCkKIHsKLSAgICBmbG9hdCBkaXN0YW5jZSA9IGRpc3RhbmNl
TGluZShtX2N1cnJlbnQsIG1fc3RhcnQpOwotICAgIG1fY3VycmVudCA9IG1fY29udHJvbDEgPSBt
X2NvbnRyb2wyID0gbV9zdGFydDsKLSAgICByZXR1cm4gZGlzdGFuY2U7CisgICAgbV90b3RhbExl
bmd0aCArPSBkaXN0YW5jZUxpbmUobV9jdXJyZW50LCBtX3N0YXJ0KTsKKyAgICBtX2N1cnJlbnQg
PSBtX3N0YXJ0OwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6Om1vdmVUbyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aFRyYXZlcnNhbFN0YXRlOjptb3ZlVG8oY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgbV9jdXJyZW50ID0gbV9zdGFydCA9IG1fY29udHJv
bDEgPSBtX2NvbnRyb2wyID0gcG9pbnQ7Ci0gICAgcmV0dXJuIDA7CisgICAgbV9wcmV2aW91cyA9
IG1fY3VycmVudCA9IG1fc3RhcnQgPSBwb2ludDsKIH0KIAotZmxvYXQgUGF0aFRyYXZlcnNhbFN0
YXRlOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIFBhdGhUcmF2ZXJzYWxT
dGF0ZTo6bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewotICAgIGZsb2F0IGRpc3Rh
bmNlID0gZGlzdGFuY2VMaW5lKG1fY3VycmVudCwgcG9pbnQpOwotICAgIG1fY3VycmVudCA9IG1f
Y29udHJvbDEgPSBtX2NvbnRyb2wyID0gcG9pbnQ7Ci0gICAgcmV0dXJuIGRpc3RhbmNlOworICAg
IG1fdG90YWxMZW5ndGggKz0gZGlzdGFuY2VMaW5lKG1fY3VycmVudCwgcG9pbnQpOworICAgIG1f
Y3VycmVudCA9IHBvaW50OwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRp
Y0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0IEZsb2F0UG9pbnQm
IG5ld0VuZCkKK3ZvaWQgUGF0aFRyYXZlcnNhbFN0YXRlOjpxdWFkcmF0aWNCZXppZXJUbyhjb25z
dCBGbG9hdFBvaW50JiBuZXdDb250cm9sLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQpCiB7Ci0g
ICAgZmxvYXQgZGlzdGFuY2UgPSBjdXJ2ZUxlbmd0aDxRdWFkcmF0aWNCZXppZXI+KCp0aGlzLCBR
dWFkcmF0aWNCZXppZXIobV9jdXJyZW50LCBuZXdDb250cm9sLCBuZXdFbmQpKTsKLQotICAgIG1f
Y29udHJvbDEgPSBuZXdDb250cm9sOwotICAgIG1fY29udHJvbDIgPSBuZXdFbmQ7Ci0KLSAgICBp
ZiAobV9hY3Rpb24gIT0gVHJhdmVyc2FsUG9pbnRBdExlbmd0aCAmJiBtX2FjdGlvbiAhPSBUcmF2
ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoKSAKLSAgICAgICAgbV9jdXJyZW50ID0gbmV3RW5kOwor
ICAgIG1fdG90YWxMZW5ndGggKz0gY3VydmVMZW5ndGg8UXVhZHJhdGljQmV6aWVyPigqdGhpcywg
UXVhZHJhdGljQmV6aWVyKG1fY3VycmVudCwgbmV3Q29udHJvbCwgbmV3RW5kKSwgbV9wcmV2aW91
cywgbV9jdXJyZW50KTsKK30KIAotICAgIHJldHVybiBkaXN0YW5jZTsKK3ZvaWQgUGF0aFRyYXZl
cnNhbFN0YXRlOjpjdWJpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wxLCBj
b25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sMiwgY29uc3QgRmxvYXRQb2ludCYgbmV3RW5kKQor
eworICAgIG1fdG90YWxMZW5ndGggKz0gY3VydmVMZW5ndGg8Q3ViaWNCZXppZXI+KCp0aGlzLCBD
dWJpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRyb2wxLCBuZXdDb250cm9sMiwgbmV3RW5kKSwg
bV9wcmV2aW91cywgbV9jdXJyZW50KTsKIH0KIAotZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpj
dWJpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wxLCBjb25zdCBGbG9hdFBv
aW50JiBuZXdDb250cm9sMiwgY29uc3QgRmxvYXRQb2ludCYgbmV3RW5kKQorYm9vbCBQYXRoVHJh
dmVyc2FsU3RhdGU6OmZpbmFsaXplQXBwZW5kUGF0aEVsZW1lbnQoKQogewotICAgIGZsb2F0IGRp
c3RhbmNlID0gY3VydmVMZW5ndGg8Q3ViaWNCZXppZXI+KCp0aGlzLCBDdWJpY0JlemllcihtX2N1
cnJlbnQsIG5ld0NvbnRyb2wxLCBuZXdDb250cm9sMiwgbmV3RW5kKSk7CisgICAgaWYgKG1fYWN0
aW9uID09IEFjdGlvbjo6VG90YWxMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IG1fY29udHJvbDEgPSBuZXdFbmQ7Ci0gICAgbV9jb250cm9sMiA9IG5ld0NvbnRyb2wyOwotIAot
ICAgIGlmIChtX2FjdGlvbiAhPSBUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoICYmIG1fYWN0aW9uICE9
IFRyYXZlcnNhbE5vcm1hbEFuZ2xlQXRMZW5ndGgpIAotICAgICAgICBtX2N1cnJlbnQgPSBuZXdF
bmQ7CisgICAgaWYgKG1fYWN0aW9uID09IEFjdGlvbjo6U2VnbWVudEF0TGVuZ3RoKSB7CisgICAg
ICAgIGlmIChtX3RvdGFsTGVuZ3RoID49IG1fZGVzaXJlZExlbmd0aCkKKyAgICAgICAgICAgIG1f
c3VjY2VzcyA9IHRydWU7CisgICAgICAgIHJldHVybiBtX3N1Y2Nlc3M7CisgICAgfQogCi0gICAg
cmV0dXJuIGRpc3RhbmNlOwotfQorICAgIEFTU0VSVChtX2FjdGlvbiA9PSBBY3Rpb246OlZlY3Rv
ckF0TGVuZ3RoKTsKIAotdm9pZCBQYXRoVHJhdmVyc2FsU3RhdGU6OnByb2Nlc3NTZWdtZW50KCkK
LXsKLSAgICBpZiAobV9hY3Rpb24gPT0gVHJhdmVyc2FsU2VnbWVudEF0TGVuZ3RoICYmIG1fdG90
YWxMZW5ndGggPj0gbV9kZXNpcmVkTGVuZ3RoKQotICAgICAgICBtX3N1Y2Nlc3MgPSB0cnVlOwot
ICAgICAgICAKLSAgICBpZiAoKG1fYWN0aW9uID09IFRyYXZlcnNhbFBvaW50QXRMZW5ndGggfHwg
bV9hY3Rpb24gPT0gVHJhdmVyc2FsTm9ybWFsQW5nbGVBdExlbmd0aCkgJiYgbV90b3RhbExlbmd0
aCA+PSBtX2Rlc2lyZWRMZW5ndGgpIHsKKyAgICBpZiAobV90b3RhbExlbmd0aCA+PSBtX2Rlc2ly
ZWRMZW5ndGgpIHsKICAgICAgICAgZmxvYXQgc2xvcGUgPSBGbG9hdFBvaW50KG1fY3VycmVudCAt
IG1fcHJldmlvdXMpLnNsb3BlQW5nbGVSYWRpYW5zKCk7Ci0gICAgICAgIGlmIChtX2FjdGlvbiA9
PSBUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoKSB7Ci0gICAgICAgICAgICBmbG9hdCBvZmZzZXQgPSBt
X2Rlc2lyZWRMZW5ndGggLSBtX3RvdGFsTGVuZ3RoOwotICAgICAgICAgICAgbV9jdXJyZW50Lm1v
dmUob2Zmc2V0ICogY29zZihzbG9wZSksIG9mZnNldCAqIHNpbmYoc2xvcGUpKTsKLSAgICAgICAg
fSBlbHNlCisgICAgICAgIGZsb2F0IG9mZnNldCA9IG1fZGVzaXJlZExlbmd0aCAtIG1fdG90YWxM
ZW5ndGg7CisgICAgICAgIG1fY3VycmVudC5tb3ZlKG9mZnNldCAqIGNvc2Yoc2xvcGUpLCBvZmZz
ZXQgKiBzaW5mKHNsb3BlKSk7CisKKyAgICAgICAgaWYgKCFtX2lzWmVyb1ZlY3RvciAmJiAhbV9k
ZXNpcmVkTGVuZ3RoKQorICAgICAgICAgICAgbV9pc1plcm9WZWN0b3IgPSB0cnVlOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIG1fc3VjY2VzcyA9IHRydWU7CiAgICAgICAgICAgICBtX25v
cm1hbEFuZ2xlID0gcmFkMmRlZyhzbG9wZSk7Ci0gICAgICAgIG1fc3VjY2VzcyA9IHRydWU7Cisg
ICAgICAgIH0KICAgICB9CisKICAgICBtX3ByZXZpb3VzID0gbV9jdXJyZW50OworICAgIHJldHVy
biBtX3N1Y2Nlc3M7Cit9CisKK2Jvb2wgUGF0aFRyYXZlcnNhbFN0YXRlOjphcHBlbmRQYXRoRWxl
bWVudChQYXRoRWxlbWVudFR5cGUgdHlwZSwgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDoKKyAg
ICAgICAgbW92ZVRvKHBvaW50c1swXSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGF0aEVs
ZW1lbnRBZGRMaW5lVG9Qb2ludDoKKyAgICAgICAgbGluZVRvKHBvaW50c1swXSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50OgorICAgICAg
ICBxdWFkcmF0aWNCZXppZXJUbyhwb2ludHNbMF0sIHBvaW50c1sxXSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQ6CisgICAgICAgIGN1YmljQmV6
aWVyVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGg6CisgICAgICAgIGNsb3NlU3VicGF0aCgp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZpbmFsaXplQXBwZW5k
UGF0aEVsZW1lbnQoKTsKK30KKworYm9vbCBQYXRoVHJhdmVyc2FsU3RhdGU6OnByb2Nlc3NQYXRo
RWxlbWVudChQYXRoRWxlbWVudFR5cGUgdHlwZSwgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQor
eworICAgIGlmIChtX3N1Y2Nlc3MpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKG1f
aXNaZXJvVmVjdG9yKSB7CisgICAgICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0
ZSgqdGhpcyk7CisgICAgICAgIG1fc3VjY2VzcyA9IHRyYXZlcnNhbFN0YXRlLmFwcGVuZFBhdGhF
bGVtZW50KHR5cGUsIHBvaW50cyk7CisgICAgICAgIG1fbm9ybWFsQW5nbGUgPSB0cmF2ZXJzYWxT
dGF0ZS5tX25vcm1hbEFuZ2xlOworICAgICAgICByZXR1cm4gbV9zdWNjZXNzOworICAgIH0KKwor
ICAgIHJldHVybiBhcHBlbmRQYXRoRWxlbWVudCh0eXBlLCBwb2ludHMpOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVy
c2FsU3RhdGUuaAkocmV2aXNpb24gMTgyNzU4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNDUgKzI4LDYw
IEBACiAjZGVmaW5lIFBhdGhUcmF2ZXJzYWxTdGF0ZV9oCiAKICNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCisjaW5jbHVkZSAiUGF0aC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBh
dGhUcmF2ZXJzYWxTdGF0ZSB7CiBwdWJsaWM6Ci0gICAgZW51bSBQYXRoVHJhdmVyc2FsQWN0aW9u
IHsKLSAgICAgICAgVHJhdmVyc2FsVG90YWxMZW5ndGgsCi0gICAgICAgIFRyYXZlcnNhbFBvaW50
QXRMZW5ndGgsCi0gICAgICAgIFRyYXZlcnNhbFNlZ21lbnRBdExlbmd0aCwKLSAgICAgICAgVHJh
dmVyc2FsTm9ybWFsQW5nbGVBdExlbmd0aAorICAgIGVudW0gY2xhc3MgQWN0aW9uIHsKKyAgICAg
ICAgVG90YWxMZW5ndGgsCisgICAgICAgIFZlY3RvckF0TGVuZ3RoLAorICAgICAgICBTZWdtZW50
QXRMZW5ndGgsCiAgICAgfTsKIAotICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2Fs
QWN0aW9uKTsKLQotICAgIGZsb2F0IGNsb3NlU3VicGF0aCgpOwotICAgIGZsb2F0IG1vdmVUbyhj
b25zdCBGbG9hdFBvaW50Jik7Ci0gICAgZmxvYXQgbGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmKTsK
LSAgICBmbG9hdCBxdWFkcmF0aWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9s
LCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQpOwotICAgIGZsb2F0IGN1YmljQmV6aWVyVG8oY29u
c3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDEsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wy
LCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQpOwotICAgIAotICAgIHZvaWQgcHJvY2Vzc1NlZ21l
bnQoKTsKKyAgICBQYXRoVHJhdmVyc2FsU3RhdGUoQWN0aW9uLCBmbG9hdCBkZXNpcmVkTGVuZ3Ro
ID0gMCk7CiAKIHB1YmxpYzoKLSAgICBQYXRoVHJhdmVyc2FsQWN0aW9uIG1fYWN0aW9uOwotICAg
IGJvb2wgbV9zdWNjZXNzOworICAgIGJvb2wgcHJvY2Vzc1BhdGhFbGVtZW50KFBhdGhFbGVtZW50
VHlwZSwgY29uc3QgRmxvYXRQb2ludCopOworICAgIGJvb2wgcHJvY2Vzc1BhdGhFbGVtZW50KGNv
bnN0IFBhdGhFbGVtZW50KiBlbGVtZW50KSB7IHJldHVybiBwcm9jZXNzUGF0aEVsZW1lbnQoZWxl
bWVudC0+dHlwZSwgZWxlbWVudC0+cG9pbnRzKTsgfQorCisgICAgQWN0aW9uIGFjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fYWN0aW9uOyB9CisgICAgdm9pZCBzZXRBY3Rpb24oQWN0aW9uIGFjdGlv
bikgeyBtX2FjdGlvbiA9IGFjdGlvbjsgfQorICAgIGZsb2F0IGRlc2lyZWRMZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2Rlc2lyZWRMZW5ndGg7IH0KKyAgICB2b2lkIHNldERlc2lyZWRMZW5ndGgo
ZmxvYXQgZGVzaXJlZExlbmd0aCkgeyBtX2Rlc2lyZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoOyB9
CisKKyAgICAvLyBUcmF2ZXJzaW5nIG91dHB1dCAtLSBzaG91bGQgYmUgcmVhZCBvbmx5CisgICAg
Ym9vbCBzdWNjZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzOyB9CisgICAgZmxvYXQgdG90
YWxMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsTGVuZ3RoOyB9CisgICAgRmxvYXRQb2lu
dCBjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50OyB9CisgICAgZmxvYXQgbm9ybWFs
QW5nbGUoKSBjb25zdCB7IHJldHVybiBtX25vcm1hbEFuZ2xlOyB9CisKK3ByaXZhdGU6CisgICAg
dm9pZCBjbG9zZVN1YnBhdGgoKTsKKyAgICB2b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBvaW50Jik7
CisgICAgdm9pZCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgcXVhZHJhdGlj
QmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lk
IGN1YmljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50Jik7CisKKyAgICBib29sIGZpbmFsaXplQXBwZW5kUGF0aEVsZW1lbnQoKTsK
KyAgICBib29sIGFwcGVuZFBhdGhFbGVtZW50KFBhdGhFbGVtZW50VHlwZSwgY29uc3QgRmxvYXRQ
b2ludCopOworCitwcml2YXRlOgorICAgIEFjdGlvbiBtX2FjdGlvbjsKKyAgICBib29sIG1fc3Vj
Y2VzcyB7IGZhbHNlIH07CiAKICAgICBGbG9hdFBvaW50IG1fY3VycmVudDsKICAgICBGbG9hdFBv
aW50IG1fc3RhcnQ7Ci0gICAgRmxvYXRQb2ludCBtX2NvbnRyb2wxOwotICAgIEZsb2F0UG9pbnQg
bV9jb250cm9sMjsKIAotICAgIGZsb2F0IG1fdG90YWxMZW5ndGg7Ci0gICAgdW5zaWduZWQgbV9z
ZWdtZW50SW5kZXg7Ci0gICAgZmxvYXQgbV9kZXNpcmVkTGVuZ3RoOworICAgIGZsb2F0IG1fdG90
YWxMZW5ndGggeyAwIH07CisgICAgZmxvYXQgbV9kZXNpcmVkTGVuZ3RoIHsgMCB9OwogCiAgICAg
Ly8gRm9yIG5vcm1hbCBjYWxjdWxhdGlvbnMKICAgICBGbG9hdFBvaW50IG1fcHJldmlvdXM7Ci0g
ICAgZmxvYXQgbV9ub3JtYWxBbmdsZTsgLy8gZGVncmVlcwotfTsgICAgCisgICAgZmxvYXQgbV9u
b3JtYWxBbmdsZSB7IDAgfTsgLy8gZGVncmVlcworICAgIGJvb2wgbV9pc1plcm9WZWN0b3IgeyBm
YWxzZSB9OworfTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRDaHVuay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNTIg
KzI1LDk2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHVGV4dENodW5rOjpTVkdUZXh0
Q2h1bmsodW5zaWduZWQgY2h1bmtTdHlsZSwgZmxvYXQgZGVzaXJlZFRleHRMZW5ndGgpCi0gICAg
OiBtX2NodW5rU3R5bGUoY2h1bmtTdHlsZSkKLSAgICAsIG1fZGVzaXJlZFRleHRMZW5ndGgoZGVz
aXJlZFRleHRMZW5ndGgpCitTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayhjb25zdCBWZWN0b3I8
U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMsIHVuc2lnbmVkIGZpcnN0LCB1bnNp
Z25lZCBsaW1pdCkKIHsKLX0KKyAgICBBU1NFUlQoZmlyc3QgPCBsaW1pdCk7CisgICAgQVNTRVJU
KGZpcnN0ID49IDAgJiYgbGltaXQgPD0gbGluZUxheW91dEJveGVzLnNpemUoKSk7CiAKLXZvaWQg
U1ZHVGV4dENodW5rOjpjYWxjdWxhdGVMZW5ndGgoZmxvYXQmIGxlbmd0aCwgdW5zaWduZWQmIGNo
YXJhY3RlcnMpIGNvbnN0Ci17Ci0gICAgU1ZHVGV4dEZyYWdtZW50KiBsYXN0RnJhZ21lbnQgPSAw
OworICAgIGNvbnN0IFNWR0lubGluZVRleHRCb3gqIGJveCA9IGxpbmVMYXlvdXRCb3hlc1tmaXJz
dF07CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gYm94LT5yZW5kZXJlcigpLnN0eWxl
KCk7CisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUo
KTsKKworICAgIGlmICghc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICBt
X2NodW5rU3R5bGUgfD0gU1ZHVGV4dENodW5rOjpSaWdodFRvTGVmdFRleHQ7CisKKyAgICBpZiAo
c3ZnU3R5bGUuaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIG1fY2h1bmtTdHlsZSB8
PSBTVkdUZXh0Q2h1bms6OlZlcnRpY2FsVGV4dDsKKyAgICAKKyAgICBzd2l0Y2ggKHN2Z1N0eWxl
LnRleHRBbmNob3IoKSkgeworICAgIGNhc2UgVEFfU1RBUlQ6CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVEFfTUlERExFOgorICAgICAgICBtX2NodW5rU3R5bGUgfD0gTWlkZGxlQW5jaG9yOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFRBX0VORDoKKyAgICAgICAgbV9jaHVua1N0eWxlIHw9
IEVuZEFuY2hvcjsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCi0gICAgdW5zaWduZWQgYm94Q291
bnQgPSBtX2JveGVzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGJveFBvc2l0aW9uID0gMDsg
Ym94UG9zaXRpb24gPCBib3hDb3VudDsgKytib3hQb3NpdGlvbikgewotICAgICAgICBTVkdJbmxp
bmVUZXh0Qm94KiB0ZXh0Qm94ID0gbV9ib3hlcy5hdChib3hQb3NpdGlvbik7Ci0gICAgICAgIFZl
Y3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSB0ZXh0Qm94LT50ZXh0RnJhZ21lbnRz
KCk7CisgICAgaWYgKGF1dG8qIHRleHRDb250ZW50RWxlbWVudCA9IFNWR1RleHRDb250ZW50RWxl
bWVudDo6ZWxlbWVudEZyb21SZW5kZXJlcihib3gtPnJlbmRlcmVyKCkucGFyZW50KCkpKSB7Cisg
ICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCh0ZXh0Q29udGVudEVsZW1lbnQp
OworICAgICAgICBtX2Rlc2lyZWRUZXh0TGVuZ3RoID0gdGV4dENvbnRlbnRFbGVtZW50LT5zcGVj
aWZpZWRUZXh0TGVuZ3RoKCkudmFsdWUobGVuZ3RoQ29udGV4dCk7CisKKyAgICAgICAgc3dpdGNo
ICh0ZXh0Q29udGVudEVsZW1lbnQtPmxlbmd0aEFkanVzdCgpKSB7CisgICAgICAgIGNhc2UgU1ZH
TGVuZ3RoQWRqdXN0VW5rbm93bjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNW
R0xlbmd0aEFkanVzdFNwYWNpbmc6CisgICAgICAgICAgICBtX2NodW5rU3R5bGUgfD0gTGVuZ3Ro
QWRqdXN0U3BhY2luZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNWR0xlbmd0
aEFkanVzdFNwYWNpbmdBbmRHbHlwaHM6CisgICAgICAgICAgICBtX2NodW5rU3R5bGUgfD0gTGVu
Z3RoQWRqdXN0U3BhY2luZ0FuZEdseXBoczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBmcmFnbWVudHMuc2l6ZSgpOwotICAg
ICAgICBpZiAoIXNpemUpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBmaXJzdDsgaSA8IGxpbWl0OyArK2kpCisgICAgICAgIG1fYm94ZXMuYXBwZW5kKGxpbmVM
YXlvdXRCb3hlc1tpXSk7Cit9CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewotICAgICAgICAgICAgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdt
ZW50cy5hdChpKTsKK3Vuc2lnbmVkIFNWR1RleHRDaHVuazo6dG90YWxDaGFyYWN0ZXJzKCkgY29u
c3QKK3sKKyAgICB1bnNpZ25lZCBjaGFyYWN0ZXJzID0gMDsKKyAgICBmb3IgKGF1dG8qIGJveCA6
IG1fYm94ZXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBmcmFnbWVudCA6IGJveC0+dGV4dEZyYWdt
ZW50cygpKQogICAgICAgICAgICAgY2hhcmFjdGVycyArPSBmcmFnbWVudC5sZW5ndGg7CisgICAg
fQorICAgIHJldHVybiBjaGFyYWN0ZXJzOworfQogCi0gICAgICAgICAgICBpZiAobV9jaHVua1N0
eWxlICYgVmVydGljYWxUZXh0KQotICAgICAgICAgICAgICAgIGxlbmd0aCArPSBmcmFnbWVudC5o
ZWlnaHQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGVuZ3RoICs9IGZyYWdt
ZW50LndpZHRoOwotCi0gICAgICAgICAgICBpZiAoIWxhc3RGcmFnbWVudCkgewotICAgICAgICAg
ICAgICAgIGxhc3RGcmFnbWVudCA9ICZmcmFnbWVudDsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KK2Zsb2F0IFNWR1RleHRDaHVuazo6dG90YWxMZW5ndGgoKSBjb25z
dAoreworICAgIGNvbnN0IFNWR1RleHRGcmFnbWVudCogZmlyc3RGcmFnbWVudCA9IG51bGxwdHI7
CisgICAgY29uc3QgU1ZHVGV4dEZyYWdtZW50KiBsYXN0RnJhZ21lbnQgPSBudWxscHRyOwogCi0g
ICAgICAgICAgICAvLyBSZXNlcGVjdCBnYXAgYmV0d2VlbiBjaHVua3MuCi0gICAgICAgICAgICBp
ZiAobV9jaHVua1N0eWxlICYgVmVydGljYWxUZXh0KQotICAgICAgICAgICAgICAgICBsZW5ndGgg
Kz0gZnJhZ21lbnQueSAtIChsYXN0RnJhZ21lbnQtPnkgKyBsYXN0RnJhZ21lbnQtPmhlaWdodCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgIGxlbmd0aCArPSBmcmFnbWVudC54
IC0gKGxhc3RGcmFnbWVudC0+eCArIGxhc3RGcmFnbWVudC0+d2lkdGgpOworICAgIGZvciAoYXV0
byogYm94IDogbV9ib3hlcykgeworICAgICAgICBhdXRvJiBmcmFnbWVudHMgPSBib3gtPnRleHRG
cmFnbWVudHMoKTsKKyAgICAgICAgaWYgKGZyYWdtZW50cy5zaXplKCkpIHsKKyAgICAgICAgICAg
IGZpcnN0RnJhZ21lbnQgPSAmKCpmcmFnbWVudHMuYmVnaW4oKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICAgICAgbGFzdEZyYWdtZW50ID0gJmZyYWdt
ZW50OworICAgIGZvciAoYXV0byBpdCA9IG1fYm94ZXMucmJlZ2luKCksIGVuZCA9IG1fYm94ZXMu
cmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgYXV0byYgZnJhZ21lbnRzID0gKCpp
dCktPnRleHRGcmFnbWVudHMoKTsKKyAgICAgICAgaWYgKGZyYWdtZW50cy5zaXplKCkpIHsKKyAg
ICAgICAgICAgIGxhc3RGcmFnbWVudCA9ICYoKmZyYWdtZW50cy5yYmVnaW4oKSk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworICAgIEFTU0VSVCghZmlyc3RGcmFnbWVu
dCA9PSAhbGFzdEZyYWdtZW50KTsKKyAgICBpZiAoIWZpcnN0RnJhZ21lbnQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKG1fY2h1bmtTdHlsZSAmIFZlcnRpY2FsVGV4dCkKKyAgICAgICAg
cmV0dXJuIChsYXN0RnJhZ21lbnQtPnkgKyBsYXN0RnJhZ21lbnQtPmhlaWdodCkgLSBmaXJzdEZy
YWdtZW50LT55OworCisgICAgcmV0dXJuIChsYXN0RnJhZ21lbnQtPnggKyBsYXN0RnJhZ21lbnQt
PndpZHRoKSAtIGZpcnN0RnJhZ21lbnQtPng7CiB9CiAKLWZsb2F0IFNWR1RleHRDaHVuazo6Y2Fs
Y3VsYXRlVGV4dEFuY2hvclNoaWZ0KGZsb2F0IGxlbmd0aCkgY29uc3QKK2Zsb2F0IFNWR1RleHRD
aHVuazo6dG90YWxBbmNob3JTaGlmdCgpIGNvbnN0CiB7CisgICAgZmxvYXQgbGVuZ3RoID0gdG90
YWxMZW5ndGgoKTsKICAgICBpZiAobV9jaHVua1N0eWxlICYgTWlkZGxlQW5jaG9yKQogICAgICAg
ICByZXR1cm4gLWxlbmd0aCAvIDI7CiAgICAgaWYgKG1fY2h1bmtTdHlsZSAmIEVuZEFuY2hvcikK
QEAgLTc3LDQgKzEyMiw4OCBAQCBmbG9hdCBTVkdUZXh0Q2h1bms6OmNhbGN1bGF0ZVRleHRBbmNo
b3JTCiAgICAgcmV0dXJuIG1fY2h1bmtTdHlsZSAmIFJpZ2h0VG9MZWZ0VGV4dCA/IC1sZW5ndGgg
OiAwOwogfQogCit2b2lkIFNWR1RleHRDaHVuazo6bGF5b3V0KEhhc2hNYXA8U1ZHSW5saW5lVGV4
dEJveCosIEFmZmluZVRyYW5zZm9ybT4mIHRleHRCb3hUcmFuc2Zvcm1hdGlvbnMpIGNvbnN0Cit7
CisgICAgaWYgKGhhc0Rlc2lyZWRUZXh0TGVuZ3RoKCkpIHsKKyAgICAgICAgaWYgKGhhc0xlbmd0
aEFkanVzdFNwYWNpbmcoKSkKKyAgICAgICAgICAgIHByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0Nv
cnJlY3Rpb24oKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoaGFzTGVuZ3Ro
QWRqdXN0U3BhY2luZ0FuZEdseXBocygpKTsKKyAgICAgICAgICAgIGJ1aWxkQm94VHJhbnNmb3Jt
YXRpb25zKHRleHRCb3hUcmFuc2Zvcm1hdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKGhhc1RleHRBbmNob3IoKSkKKyAgICAgICAgcHJvY2Vzc1RleHRBbmNob3JDb3JyZWN0aW9u
KCk7Cit9CisKK3ZvaWQgU1ZHVGV4dENodW5rOjpwcm9jZXNzVGV4dExlbmd0aFNwYWNpbmdDb3Jy
ZWN0aW9uKCkgY29uc3QKK3sKKyAgICBmbG9hdCB0ZXh0TGVuZ3RoU2hpZnQgPSAoZGVzaXJlZFRl
eHRMZW5ndGgoKSAtIHRvdGFsTGVuZ3RoKCkpIC8gdG90YWxDaGFyYWN0ZXJzKCk7CisgICAgYm9v
bCBpc1ZlcnRpY2FsVGV4dCA9IG1fY2h1bmtTdHlsZSAmIFZlcnRpY2FsVGV4dDsKKyAgICB1bnNp
Z25lZCBhdENoYXJhY3RlciA9IDA7CisKKyAgICBmb3IgKGF1dG8qIGJveCA6IG1fYm94ZXMpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBmcmFnbWVudCA6IGJveC0+dGV4dEZyYWdtZW50cygpKSB7Cisg
ICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICAgICAgZnJhZ21lbnQu
eSArPSB0ZXh0TGVuZ3RoU2hpZnQgKiBhdENoYXJhY3RlcjsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBmcmFnbWVudC54ICs9IHRleHRMZW5ndGhTaGlmdCAqIGF0Q2hhcmFjdGVy
OworICAgICAgICAgICAgCisgICAgICAgICAgICBhdENoYXJhY3RlciArPSBmcmFnbWVudC5sZW5n
dGg7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU1ZHVGV4dENodW5rOjpidWlsZEJveFRy
YW5zZm9ybWF0aW9ucyhIYXNoTWFwPFNWR0lubGluZVRleHRCb3gqLCBBZmZpbmVUcmFuc2Zvcm0+
JiB0ZXh0Qm94VHJhbnNmb3JtYXRpb25zKSBjb25zdAoreworICAgIEFmZmluZVRyYW5zZm9ybSBz
cGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtOworICAgIGJvb2wgZm91bmRGaXJzdEZyYWdtZW50ID0g
ZmFsc2U7CisKKyAgICBmb3IgKGF1dG8qIGJveCA6IG1fYm94ZXMpIHsKKyAgICAgICAgaWYgKCFm
b3VuZEZpcnN0RnJhZ21lbnQpIHsKKyAgICAgICAgICAgIGlmICghYm94U3BhY2luZ0FuZEdseXBo
c1RyYW5zZm9ybShib3gsIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0pKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm91bmRGaXJzdEZyYWdtZW50ID0gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHRleHRCb3hUcmFuc2Zvcm1hdGlvbnMuc2V0KGJveCwgc3BhY2lu
Z0FuZEdseXBoc1RyYW5zZm9ybSk7CisgICAgfQorfQorCitib29sIFNWR1RleHRDaHVuazo6Ym94
U3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybShjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiBib3gsIEFm
ZmluZVRyYW5zZm9ybSYgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybSkgY29uc3QKK3sKKyAgICBh
dXRvJiBmcmFnbWVudHMgPSBib3gtPnRleHRGcmFnbWVudHMoKTsKKyAgICBpZiAoZnJhZ21lbnRz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgU1ZHVGV4dEZy
YWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5maXJzdCgpOworICAgIGZsb2F0IHNjYWxlID0g
ZGVzaXJlZFRleHRMZW5ndGgoKSAvIHRvdGFsTGVuZ3RoKCk7CisKKyAgICBzcGFjaW5nQW5kR2x5
cGhzVHJhbnNmb3JtLnRyYW5zbGF0ZShmcmFnbWVudC54LCBmcmFnbWVudC55KTsKKworICAgIGlm
IChtX2NodW5rU3R5bGUgJiBWZXJ0aWNhbFRleHQpCisgICAgICAgIHNwYWNpbmdBbmRHbHlwaHNU
cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKDEsIHNjYWxlKTsKKyAgICBlbHNlCisgICAgICAgIHNw
YWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKHNjYWxlLCAxKTsKKworICAg
IHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0udHJhbnNsYXRlKC1mcmFnbWVudC54LCAtZnJhZ21l
bnQueSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1ZHVGV4dENodW5rOjpwcm9jZXNz
VGV4dEFuY2hvckNvcnJlY3Rpb24oKSBjb25zdAoreworICAgIGZsb2F0IHRleHRBbmNob3JTaGlm
dCA9IHRvdGFsQW5jaG9yU2hpZnQoKTsKKyAgICBib29sIGlzVmVydGljYWxUZXh0ID0gbV9jaHVu
a1N0eWxlICYgVmVydGljYWxUZXh0OworCisgICAgZm9yIChhdXRvKiBib3ggOiBtX2JveGVzKSB7
CisgICAgICAgIGZvciAoYXV0byYgZnJhZ21lbnQgOiBib3gtPnRleHRGcmFnbWVudHMoKSkgewor
ICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAgICAgIGZyYWdtZW50
LnkgKz0gdGV4dEFuY2hvclNoaWZ0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGZyYWdtZW50LnggKz0gdGV4dEFuY2hvclNoaWZ0OworICAgICAgICB9CisgICAgfQorfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRDaHVuay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dENodW5rLmgJKHJldmlzaW9uIDE4Mjc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDAsMjggKzQxLDM0IEBA
IHB1YmxpYzoKICAgICAgICAgTGVuZ3RoQWRqdXN0U3BhY2luZ0FuZEdseXBocyA9IDEgPDwgNgog
ICAgIH07CiAKLSAgICBTVkdUZXh0Q2h1bmsodW5zaWduZWQgY2h1bmtTdHlsZSwgZmxvYXQgZGVz
aXJlZFRleHRMZW5ndGgpOworICAgIFNWR1RleHRDaHVuayhjb25zdCBWZWN0b3I8U1ZHSW5saW5l
VGV4dEJveCo+JiwgdW5zaWduZWQgZmlyc3QsIHVuc2lnbmVkIGxpbWl0KTsKIAotICAgIHZvaWQg
Y2FsY3VsYXRlTGVuZ3RoKGZsb2F0JiBsZW5ndGgsIHVuc2lnbmVkJiBjaGFyYWN0ZXJzKSBjb25z
dDsKLSAgICBmbG9hdCBjYWxjdWxhdGVUZXh0QW5jaG9yU2hpZnQoZmxvYXQgbGVuZ3RoKSBjb25z
dDsKKyAgICB1bnNpZ25lZCB0b3RhbENoYXJhY3RlcnMoKSBjb25zdDsKKyAgICBmbG9hdCB0b3Rh
bExlbmd0aCgpIGNvbnN0OworICAgIGZsb2F0IHRvdGFsQW5jaG9yU2hpZnQoKSBjb25zdDsKKyAg
ICB2b2lkIGxheW91dChIYXNoTWFwPFNWR0lubGluZVRleHRCb3gqLCBBZmZpbmVUcmFuc2Zvcm0+
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9jZXNzVGV4dEFuY2hvckNvcnJlY3Rp
b24oKSBjb25zdDsKKyAgICB2b2lkIGJ1aWxkQm94VHJhbnNmb3JtYXRpb25zKEhhc2hNYXA8U1ZH
SW5saW5lVGV4dEJveCosIEFmZmluZVRyYW5zZm9ybT4mKSBjb25zdDsKKyAgICB2b2lkIHByb2Nl
c3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24oKSBjb25zdDsKIAogICAgIGJvb2wgaXNWZXJ0
aWNhbFRleHQoKSBjb25zdCB7IHJldHVybiBtX2NodW5rU3R5bGUgJiBWZXJ0aWNhbFRleHQ7IH0K
ICAgICBmbG9hdCBkZXNpcmVkVGV4dExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzaXJlZFRl
eHRMZW5ndGg7IH0KIAotICAgIFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGJveGVzKCkgeyBy
ZXR1cm4gbV9ib3hlczsgfQotICAgIGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGJv
eGVzKCkgY29uc3QgeyByZXR1cm4gbV9ib3hlczsgfQotCiAgICAgYm9vbCBoYXNEZXNpcmVkVGV4
dExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzaXJlZFRleHRMZW5ndGggPiAwICYmICgobV9j
aHVua1N0eWxlICYgTGVuZ3RoQWRqdXN0U3BhY2luZykgfHwgKG1fY2h1bmtTdHlsZSAmIExlbmd0
aEFkanVzdFNwYWNpbmdBbmRHbHlwaHMpKTsgfQotICAgIGJvb2wgaGFzVGV4dEFuY2hvcigpIGNv
bnN0IHsgIHJldHVybiBtX2NodW5rU3R5bGUgJiBSaWdodFRvTGVmdFRleHQgPyAhKG1fY2h1bmtT
dHlsZSAmIEVuZEFuY2hvcikgOiAobV9jaHVua1N0eWxlICYgTWlkZGxlQW5jaG9yKSB8fCAobV9j
aHVua1N0eWxlICYgRW5kQW5jaG9yKTsgfQorICAgIGJvb2wgaGFzVGV4dEFuY2hvcigpIGNvbnN0
IHsgIHJldHVybiBtX2NodW5rU3R5bGUgJiBSaWdodFRvTGVmdFRleHQgPyAhKG1fY2h1bmtTdHls
ZSAmIEVuZEFuY2hvcikgOiAobV9jaHVua1N0eWxlICYgKE1pZGRsZUFuY2hvciB8IEVuZEFuY2hv
cikpOyB9CiAgICAgYm9vbCBoYXNMZW5ndGhBZGp1c3RTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9jaHVua1N0eWxlICYgTGVuZ3RoQWRqdXN0U3BhY2luZzsgfQogICAgIGJvb2wgaGFzTGVuZ3Ro
QWRqdXN0U3BhY2luZ0FuZEdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fY2h1bmtTdHlsZSAmIExl
bmd0aEFkanVzdFNwYWNpbmdBbmRHbHlwaHM7IH0KIAorICAgIGJvb2wgYm94U3BhY2luZ0FuZEds
eXBoc1RyYW5zZm9ybShjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiwgQWZmaW5lVHJhbnNmb3JtJikg
Y29uc3Q7CisKIHByaXZhdGU6CiAgICAgLy8gQ29udGFpbnMgYWxsIFNWR0lubGluZVRleHRCb3hl
cyB0aGlzIGNodW5rIHNwYW5zLgogICAgIFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4gbV9ib3hl
czsKIAotICAgIHVuc2lnbmVkIG1fY2h1bmtTdHlsZTsKLSAgICBmbG9hdCBtX2Rlc2lyZWRUZXh0
TGVuZ3RoOworICAgIHVuc2lnbmVkIG1fY2h1bmtTdHlsZSB7IERlZmF1bHRTdHlsZSB9OworICAg
IGZsb2F0IG1fZGVzaXJlZFRleHRMZW5ndGggeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1
aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dENodW5rQnVpbGRlci5jcHAJKHJldmlzaW9uIDE4Mjc1OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAs
MjI3ICszMSw3MSBAQCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpTVkdUZXh0Q2h1bmtCdWlsZGVyCiB7
CiB9CiAKLXZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6dHJhbnNmb3JtYXRpb25Gb3JUZXh0Qm94
KFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSBj
b25zdAordW5zaWduZWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6dG90YWxDaGFyYWN0ZXJzKCkgY29u
c3QKIHsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQWZmaW5lVHJh
bnNmb3JtLCBzX2lkZW50aXR5VHJhbnNmb3JtLCAoKSk7Ci0gICAgaWYgKCFtX3RleHRCb3hUcmFu
c2Zvcm1hdGlvbnMuY29udGFpbnModGV4dEJveCkpIHsKLSAgICAgICAgdHJhbnNmb3JtID0gc19p
ZGVudGl0eVRyYW5zZm9ybTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRyYW5zZm9y
bSA9IG1fdGV4dEJveFRyYW5zZm9ybWF0aW9ucy5nZXQodGV4dEJveCk7CisgICAgdW5zaWduZWQg
Y2hhcmFjdGVycyA9IDA7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaHVuayA6IG1fdGV4dENodW5r
cykKKyAgICAgICAgY2hhcmFjdGVycyArPSBjaHVuay50b3RhbENoYXJhY3RlcnMoKTsKKyAgICBy
ZXR1cm4gY2hhcmFjdGVyczsKIH0KIAotdm9pZCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjpidWlsZFRl
eHRDaHVua3MoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzKQorZmxv
YXQgU1ZHVGV4dENodW5rQnVpbGRlcjo6dG90YWxMZW5ndGgoKSBjb25zdAogewotICAgIGlmIChs
aW5lTGF5b3V0Qm94ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGZv
dW5kU3RhcnQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uID0g
MDsKLSAgICB1bnNpZ25lZCBib3hQb3NpdGlvbiA9IDA7Ci0gICAgdW5zaWduZWQgYm94Q291bnQg
PSBsaW5lTGF5b3V0Qm94ZXMuc2l6ZSgpOwotICAgIGZvciAoOyBib3hQb3NpdGlvbiA8IGJveENv
dW50OyArK2JveFBvc2l0aW9uKSB7Ci0gICAgICAgIFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gg
PSBsaW5lTGF5b3V0Qm94ZXNbYm94UG9zaXRpb25dOwotICAgICAgICBpZiAoIXRleHRCb3gtPnN0
YXJ0c05ld1RleHRDaHVuaygpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYg
KCFmb3VuZFN0YXJ0KSB7Ci0gICAgICAgICAgICBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uID0gYm94
UG9zaXRpb247Ci0gICAgICAgICAgICBmb3VuZFN0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGJveFBvc2l0
aW9uID4gbGFzdENodW5rU3RhcnRQb3NpdGlvbik7Ci0gICAgICAgICAgICBhZGRUZXh0Q2h1bmso
bGluZUxheW91dEJveGVzLCBsYXN0Q2h1bmtTdGFydFBvc2l0aW9uLCBib3hQb3NpdGlvbiAtIGxh
c3RDaHVua1N0YXJ0UG9zaXRpb24pOwotICAgICAgICAgICAgbGFzdENodW5rU3RhcnRQb3NpdGlv
biA9IGJveFBvc2l0aW9uOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZFN0YXJ0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYm94UG9zaXRpb24gLSBsYXN0Q2h1bmtTdGFy
dFBvc2l0aW9uID4gMCkKLSAgICAgICAgYWRkVGV4dENodW5rKGxpbmVMYXlvdXRCb3hlcywgbGFz
dENodW5rU3RhcnRQb3NpdGlvbiwgYm94UG9zaXRpb24gLSBsYXN0Q2h1bmtTdGFydFBvc2l0aW9u
KTsKKyAgICBmbG9hdCBsZW5ndGggPSAwOworICAgIGZvciAoY29uc3QgYXV0byYgY2h1bmsgOiBt
X3RleHRDaHVua3MpCisgICAgICAgIGxlbmd0aCArPSBjaHVuay50b3RhbExlbmd0aCgpOworICAg
IHJldHVybiBsZW5ndGg7CiB9CiAKLXZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6bGF5b3V0VGV4
dENodW5rcyhWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMpCitmbG9h
dCBTVkdUZXh0Q2h1bmtCdWlsZGVyOjp0b3RhbEFuY2hvclNoaWZ0KCkgY29uc3QKIHsKLSAgICBi
dWlsZFRleHRDaHVua3MobGluZUxheW91dEJveGVzKTsKLSAgICBpZiAobV90ZXh0Q2h1bmtzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgY2h1bmtDb3VudCA9IG1f
dGV4dENodW5rcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNodW5rQ291
bnQ7ICsraSkKLSAgICAgICAgcHJvY2Vzc1RleHRDaHVuayhtX3RleHRDaHVua3NbaV0pOwotCi0g
ICAgbV90ZXh0Q2h1bmtzLmNsZWFyKCk7CisgICAgZmxvYXQgYW5jaG9yU2hpZnQgPSAwOworICAg
IGZvciAoY29uc3QgYXV0byYgY2h1bmsgOiBtX3RleHRDaHVua3MpCisgICAgICAgIGFuY2hvclNo
aWZ0ICs9IGNodW5rLnRvdGFsQW5jaG9yU2hpZnQoKTsKKyAgICByZXR1cm4gYW5jaG9yU2hpZnQ7
CiB9CiAKLXZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6YWRkVGV4dENodW5rKFZlY3RvcjxTVkdJ
bmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcywgdW5zaWduZWQgYm94U3RhcnQsIHVuc2ln
bmVkIGJveENvdW50KQorQWZmaW5lVHJhbnNmb3JtIFNWR1RleHRDaHVua0J1aWxkZXI6OnRyYW5z
Zm9ybWF0aW9uRm9yVGV4dEJveChTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94KSBjb25zdAogewot
ICAgIFNWR0lubGluZVRleHRCb3gqIHRleHRCb3ggPSBsaW5lTGF5b3V0Qm94ZXNbYm94U3RhcnRd
OwotICAgIEFTU0VSVCh0ZXh0Qm94KTsKLQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9
IHRleHRCb3gtPnJlbmRlcmVyKCkuc3R5bGUoKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxl
JiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7Ci0KLSAgICAvLyBCdWlsZCBjaHVuayBzdHls
ZSBmbGFncy4KLSAgICB1bnNpZ25lZCBjaHVua1N0eWxlID0gU1ZHVGV4dENodW5rOjpEZWZhdWx0
U3R5bGU7Ci0KLSAgICAvLyBIYW5kbGUgJ2RpcmVjdGlvbicgcHJvcGVydHkuCi0gICAgaWYgKCFz
dHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIGNodW5rU3R5bGUgfD0gU1ZH
VGV4dENodW5rOjpSaWdodFRvTGVmdFRleHQ7Ci0KLSAgICAvLyBIYW5kbGUgJ3dyaXRpbmctbW9k
ZScgcHJvcGVydHkuCi0gICAgaWYgKHN2Z1N0eWxlLmlzVmVydGljYWxXcml0aW5nTW9kZSgpKQot
ICAgICAgICBjaHVua1N0eWxlIHw9IFNWR1RleHRDaHVuazo6VmVydGljYWxUZXh0OwotCi0gICAg
Ly8gSGFuZGxlICd0ZXh0LWFuY2hvcicgcHJvcGVydHkuCi0gICAgc3dpdGNoIChzdmdTdHlsZS50
ZXh0QW5jaG9yKCkpIHsKLSAgICBjYXNlIFRBX1NUQVJUOgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFRBX01JRERMRToKLSAgICAgICAgY2h1bmtTdHlsZSB8PSBTVkdUZXh0Q2h1bms6Ok1pZGRs
ZUFuY2hvcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUQV9FTkQ6Ci0gICAgICAgIGNodW5r
U3R5bGUgfD0gU1ZHVGV4dENodW5rOjpFbmRBbmNob3I7Ci0gICAgICAgIGJyZWFrOwotICAgIH07
Ci0KLSAgICAvLyBIYW5kbGUgJ2xlbmd0aEFkanVzdCcgcHJvcGVydHkuCi0gICAgZmxvYXQgZGVz
aXJlZFRleHRMZW5ndGggPSAwOwotICAgIGlmIChTVkdUZXh0Q29udGVudEVsZW1lbnQqIHRleHRD
b250ZW50RWxlbWVudCA9IFNWR1RleHRDb250ZW50RWxlbWVudDo6ZWxlbWVudEZyb21SZW5kZXJl
cih0ZXh0Qm94LT5yZW5kZXJlcigpLnBhcmVudCgpKSkgewotICAgICAgICBTVkdMZW5ndGhDb250
ZXh0IGxlbmd0aENvbnRleHQodGV4dENvbnRlbnRFbGVtZW50KTsKLSAgICAgICAgZGVzaXJlZFRl
eHRMZW5ndGggPSB0ZXh0Q29udGVudEVsZW1lbnQtPnNwZWNpZmllZFRleHRMZW5ndGgoKS52YWx1
ZShsZW5ndGhDb250ZXh0KTsKLQotICAgICAgICBzd2l0Y2ggKHRleHRDb250ZW50RWxlbWVudC0+
bGVuZ3RoQWRqdXN0KCkpIHsKLSAgICAgICAgY2FzZSBTVkdMZW5ndGhBZGp1c3RVbmtub3duOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1ZHTGVuZ3RoQWRqdXN0U3BhY2luZzoK
LSAgICAgICAgICAgIGNodW5rU3R5bGUgfD0gU1ZHVGV4dENodW5rOjpMZW5ndGhBZGp1c3RTcGFj
aW5nOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1ZHTGVuZ3RoQWRqdXN0U3Bh
Y2luZ0FuZEdseXBoczoKLSAgICAgICAgICAgIGNodW5rU3R5bGUgfD0gU1ZHVGV4dENodW5rOjpM
ZW5ndGhBZGp1c3RTcGFjaW5nQW5kR2x5cGhzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH07Ci0gICAgfQotCi0gICAgU1ZHVGV4dENodW5rIGNodW5rKGNodW5rU3R5bGUsIGRlc2lyZWRU
ZXh0TGVuZ3RoKTsKLQotICAgIFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGJveGVzID0gY2h1
bmsuYm94ZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBib3hTdGFydDsgaSA8IGJveFN0YXJ0
ICsgYm94Q291bnQ7ICsraSkKLSAgICAgICAgYm94ZXMuYXBwZW5kKGxpbmVMYXlvdXRCb3hlc1tp
XSk7Ci0KLSAgICBtX3RleHRDaHVua3MuYXBwZW5kKGNodW5rKTsKKyAgICBhdXRvIGl0ID0gbV90
ZXh0Qm94VHJhbnNmb3JtYXRpb25zLmZpbmQodGV4dEJveCk7CisgICAgcmV0dXJuIGl0ID09IG1f
dGV4dEJveFRyYW5zZm9ybWF0aW9ucy5lbmQoKSA/IEFmZmluZVRyYW5zZm9ybSgpIDogaXQtPnZh
bHVlOwogfQogCi12b2lkIFNWR1RleHRDaHVua0J1aWxkZXI6OnByb2Nlc3NUZXh0Q2h1bmsoY29u
c3QgU1ZHVGV4dENodW5rJiBjaHVuaykKK3ZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6YnVpbGRU
ZXh0Q2h1bmtzKGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hl
cykKIHsKLSAgICBib29sIHByb2Nlc3NUZXh0TGVuZ3RoID0gY2h1bmsuaGFzRGVzaXJlZFRleHRM
ZW5ndGgoKTsKLSAgICBib29sIHByb2Nlc3NUZXh0QW5jaG9yID0gY2h1bmsuaGFzVGV4dEFuY2hv
cigpOwotICAgIGlmICghcHJvY2Vzc1RleHRBbmNob3IgJiYgIXByb2Nlc3NUZXh0TGVuZ3RoKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBi
b3hlcyA9IGNodW5rLmJveGVzKCk7Ci0gICAgdW5zaWduZWQgYm94Q291bnQgPSBib3hlcy5zaXpl
KCk7Ci0gICAgaWYgKCFib3hDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2FsY3Vs
YXRlIGFic29sdXRlIGxlbmd0aCBvZiB3aG9sZSB0ZXh0IGNodW5rIChzdGFydGluZyBmcm9tIHRl
eHQgYm94ICdzdGFydCcsIHNwYW5uaW5nICdsZW5ndGgnIHRleHQgYm94ZXMpLgotICAgIGZsb2F0
IGNodW5rTGVuZ3RoID0gMDsKLSAgICB1bnNpZ25lZCBjaHVua0NoYXJhY3RlcnMgPSAwOwotICAg
IGNodW5rLmNhbGN1bGF0ZUxlbmd0aChjaHVua0xlbmd0aCwgY2h1bmtDaGFyYWN0ZXJzKTsKLQot
ICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBjaHVuay5pc1ZlcnRpY2FsVGV4dCgpOwotICAgIGlm
IChwcm9jZXNzVGV4dExlbmd0aCkgewotICAgICAgICBpZiAoY2h1bmsuaGFzTGVuZ3RoQWRqdXN0
U3BhY2luZygpKSB7Ci0gICAgICAgICAgICBmbG9hdCB0ZXh0TGVuZ3RoU2hpZnQgPSAoY2h1bmsu
ZGVzaXJlZFRleHRMZW5ndGgoKSAtIGNodW5rTGVuZ3RoKSAvIGNodW5rQ2hhcmFjdGVyczsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGF0Q2hhcmFjdGVyID0gMDsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYm94UG9zaXRpb24gPSAwOyBib3hQb3NpdGlvbiA8IGJveENvdW50OyArK2JveFBvc2l0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50
cyA9IGJveGVzW2JveFBvc2l0aW9uXS0+dGV4dEZyYWdtZW50cygpOwotICAgICAgICAgICAgICAg
IGlmIChmcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBwcm9jZXNzVGV4dExlbmd0aFNwYWNpbmdDb3JyZWN0aW9uKGlzVmVy
dGljYWxUZXh0LCB0ZXh0TGVuZ3RoU2hpZnQsIGZyYWdtZW50cywgYXRDaGFyYWN0ZXIpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGNodW5rLmhh
c0xlbmd0aEFkanVzdFNwYWNpbmdBbmRHbHlwaHMoKSk7Ci0gICAgICAgICAgICBmbG9hdCB0ZXh0
TGVuZ3RoU2NhbGUgPSBjaHVuay5kZXNpcmVkVGV4dExlbmd0aCgpIC8gY2h1bmtMZW5ndGg7Ci0g
ICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybTsKLQot
ICAgICAgICAgICAgYm9vbCBmb3VuZEZpcnN0RnJhZ21lbnQgPSBmYWxzZTsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgYm94UG9zaXRpb24gPSAwOyBib3hQb3NpdGlvbiA8IGJveENvdW50OyAr
K2JveFBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJv
eCA9IGJveGVzW2JveFBvc2l0aW9uXTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8U1ZHVGV4dEZy
YWdtZW50PiYgZnJhZ21lbnRzID0gdGV4dEJveC0+dGV4dEZyYWdtZW50cygpOwotICAgICAgICAg
ICAgICAgIGlmIChmcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgICAgIGlmICghZm91bmRGaXJzdEZyYWdtZW50KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvdW5kRmlyc3RGcmFnbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGJ1aWxkU3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybShpc1ZlcnRpY2FsVGV4dCwgdGV4
dExlbmd0aFNjYWxlLCBmcmFnbWVudHMuZmlyc3QoKSwgc3BhY2luZ0FuZEdseXBoc1RyYW5zZm9y
bSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbV90ZXh0Qm94VHJhbnNm
b3JtYXRpb25zLnNldCh0ZXh0Qm94LCBzcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghcHJvY2Vzc1RleHRBbmNob3Ip
CisgICAgaWYgKGxpbmVMYXlvdXRCb3hlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIC8vIElmIHdlIHByZXZpb3VzbHkgYXBwbGllZCBhIGxlbmd0aEFkanVzdD0ic3BhY2luZyIg
Y29ycmVjdGlvbiwgd2UgaGF2ZSB0byByZWNhbGN1bGF0ZSB0aGUgY2h1bmsgbGVuZ3RoLCB0byBi
ZSBhYmxlIHRvIGFwcGx5IHRoZSB0ZXh0LWFuY2hvciBzaGlmdC4KLSAgICBpZiAocHJvY2Vzc1Rl
eHRMZW5ndGggJiYgY2h1bmsuaGFzTGVuZ3RoQWRqdXN0U3BhY2luZygpKSB7Ci0gICAgICAgIGNo
dW5rTGVuZ3RoID0gMDsKLSAgICAgICAgY2h1bmtDaGFyYWN0ZXJzID0gMDsKLSAgICAgICAgY2h1
bmsuY2FsY3VsYXRlTGVuZ3RoKGNodW5rTGVuZ3RoLCBjaHVua0NoYXJhY3RlcnMpOwotICAgIH0K
KyAgICB1bnNpZ25lZCBsaW1pdCA9IGxpbmVMYXlvdXRCb3hlcy5zaXplKCk7CisgICAgdW5zaWdu
ZWQgZmlyc3QgPSBsaW1pdDsKIAotICAgIGZsb2F0IHRleHRBbmNob3JTaGlmdCA9IGNodW5rLmNh
bGN1bGF0ZVRleHRBbmNob3JTaGlmdChjaHVua0xlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBi
b3hQb3NpdGlvbiA9IDA7IGJveFBvc2l0aW9uIDwgYm94Q291bnQ7ICsrYm94UG9zaXRpb24pIHsK
LSAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cyA9IGJveGVzW2JveFBv
c2l0aW9uXS0+dGV4dEZyYWdtZW50cygpOwotICAgICAgICBpZiAoZnJhZ21lbnRzLmlzRW1wdHko
KSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGltaXQ7ICsraSkgeworICAgICAgICBp
ZiAoIWxpbmVMYXlvdXRCb3hlc1tpXS0+c3RhcnRzTmV3VGV4dENodW5rKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgcHJvY2Vzc1RleHRBbmNob3JDb3JyZWN0aW9uKGlzVmVydGlj
YWxUZXh0LCB0ZXh0QW5jaG9yU2hpZnQsIGZyYWdtZW50cyk7Ci0gICAgfQotfQotCi12b2lkIFNW
R1RleHRDaHVua0J1aWxkZXI6OnByb2Nlc3NUZXh0TGVuZ3RoU3BhY2luZ0NvcnJlY3Rpb24oYm9v
bCBpc1ZlcnRpY2FsVGV4dCwgZmxvYXQgdGV4dExlbmd0aFNoaWZ0LCBWZWN0b3I8U1ZHVGV4dEZy
YWdtZW50PiYgZnJhZ21lbnRzLCB1bnNpZ25lZCYgYXRDaGFyYWN0ZXIpCi17Ci0gICAgdW5zaWdu
ZWQgZnJhZ21lbnRDb3VudCA9IGZyYWdtZW50cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZyYWdtZW50Q291bnQ7ICsraSkgewotICAgICAgICBTVkdUZXh0RnJhZ21lbnQm
IGZyYWdtZW50ID0gZnJhZ21lbnRzW2ldOwotCi0gICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkK
LSAgICAgICAgICAgIGZyYWdtZW50LnkgKz0gdGV4dExlbmd0aFNoaWZ0ICogYXRDaGFyYWN0ZXI7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZyYWdtZW50LnggKz0gdGV4dExlbmd0aFNoaWZ0
ICogYXRDaGFyYWN0ZXI7CiAKLSAgICAgICAgYXRDaGFyYWN0ZXIgKz0gZnJhZ21lbnQubGVuZ3Ro
OworICAgICAgICBpZiAoZmlyc3QgPT0gbGltaXQpCisgICAgICAgICAgICBmaXJzdCA9IGk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oZmlyc3QgIT0gaSk7CisgICAgICAgICAgICBtX3RleHRDaHVua3MuYXBwZW5kKFNWR1RleHRD
aHVuayhsaW5lTGF5b3V0Qm94ZXMsIGZpcnN0LCBpKSk7CisgICAgICAgICAgICBmaXJzdCA9IGk7
CisgICAgICAgIH0KICAgICB9Ci19CiAKLXZvaWQgU1ZHVGV4dENodW5rQnVpbGRlcjo6cHJvY2Vz
c1RleHRBbmNob3JDb3JyZWN0aW9uKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0IHRleHRBbmNo
b3JTaGlmdCwgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cykKLXsKLSAgICB1bnNp
Z25lZCBmcmFnbWVudENvdW50ID0gZnJhZ21lbnRzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZnJhZ21lbnRDb3VudDsgKytpKSB7Ci0gICAgICAgIFNWR1RleHRGcmFnbWVu
dCYgZnJhZ21lbnQgPSBmcmFnbWVudHNbaV07Ci0KLSAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0
KQotICAgICAgICAgICAgZnJhZ21lbnQueSArPSB0ZXh0QW5jaG9yU2hpZnQ7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGZyYWdtZW50LnggKz0gdGV4dEFuY2hvclNoaWZ0OwotICAgIH0KKyAg
ICBpZiAoZmlyc3QgIT0gbGltaXQpCisgICAgICAgIG1fdGV4dENodW5rcy5hcHBlbmQoU1ZHVGV4
dENodW5rKGxpbmVMYXlvdXRCb3hlcywgZmlyc3QsIGxpbWl0KSk7CiB9CiAKLXZvaWQgU1ZHVGV4
dENodW5rQnVpbGRlcjo6YnVpbGRTcGFjaW5nQW5kR2x5cGhzVHJhbnNmb3JtKGJvb2wgaXNWZXJ0
aWNhbFRleHQsIGZsb2F0IHNjYWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBB
ZmZpbmVUcmFuc2Zvcm0mIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0pCit2b2lkIFNWR1RleHRD
aHVua0J1aWxkZXI6OmxheW91dFRleHRDaHVua3MoY29uc3QgVmVjdG9yPFNWR0lubGluZVRleHRC
b3gqPiYgbGluZUxheW91dEJveGVzKQogewotICAgIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0u
dHJhbnNsYXRlKGZyYWdtZW50LngsIGZyYWdtZW50LnkpOworICAgIGJ1aWxkVGV4dENodW5rcyhs
aW5lTGF5b3V0Qm94ZXMpOworICAgIGlmIChtX3RleHRDaHVua3MuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgIHNwYWNpbmdBbmRH
bHlwaHNUcmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKDEsIHNjYWxlKTsKLSAgICBlbHNlCi0gICAg
ICAgIHNwYWNpbmdBbmRHbHlwaHNUcmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKHNjYWxlLCAxKTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGNodW5rIDogbV90ZXh0Q2h1bmtzKQorICAgICAgICBjaHVu
ay5sYXlvdXQobV90ZXh0Qm94VHJhbnNmb3JtYXRpb25zKTsKIAotICAgIHNwYWNpbmdBbmRHbHlw
aHNUcmFuc2Zvcm0udHJhbnNsYXRlKC1mcmFnbWVudC54LCAtZnJhZ21lbnQueSk7CisgICAgbV90
ZXh0Q2h1bmtzLmNsZWFyKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5oCShyZXZpc2lvbiAxODI3NTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC00MCwxOCArNDEsMTMgQEAgcHVibGljOgogICAgIFNWR1RleHRDaHVua0J1aWxk
ZXIoKTsKIAogICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1bms+JiB0ZXh0Q2h1bmtzKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0Q2h1bmtzOyB9Ci0gICAgdm9pZCB0cmFuc2Zvcm1hdGlvbkZvclRl
eHRCb3goU1ZHSW5saW5lVGV4dEJveCosIEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OworICAgIHVu
c2lnbmVkIHRvdGFsQ2hhcmFjdGVycygpIGNvbnN0OworICAgIGZsb2F0IHRvdGFsTGVuZ3RoKCkg
Y29uc3Q7CisgICAgZmxvYXQgdG90YWxBbmNob3JTaGlmdCgpIGNvbnN0OworICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm1hdGlvbkZvclRleHRCb3goU1ZHSW5saW5lVGV4dEJveCopIGNvbnN0
OwogCi0gICAgdm9pZCBidWlsZFRleHRDaHVua3MoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYg
bGluZUxheW91dEJveGVzKTsKLSAgICB2b2lkIGxheW91dFRleHRDaHVua3MoVmVjdG9yPFNWR0lu
bGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFk
ZFRleHRDaHVuayhWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMsIHVu
c2lnbmVkIGJveFBvc2l0aW9uLCB1bnNpZ25lZCBib3hDb3VudCk7Ci0gICAgdm9pZCBwcm9jZXNz
VGV4dENodW5rKGNvbnN0IFNWR1RleHRDaHVuayYpOwotCi0gICAgdm9pZCBwcm9jZXNzVGV4dExl
bmd0aFNwYWNpbmdDb3JyZWN0aW9uKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGZsb2F0IHRleHRMZW5n
dGhTaGlmdCwgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mLCB1bnNpZ25lZCYgYXRDaGFyYWN0ZXIp
OwotICAgIHZvaWQgcHJvY2Vzc1RleHRBbmNob3JDb3JyZWN0aW9uKGJvb2wgaXNWZXJ0aWNhbFRl
eHQsIGZsb2F0IHRleHRBbmNob3JTaGlmdCwgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mKTsKLSAg
ICB2b2lkIGJ1aWxkU3BhY2luZ0FuZEdseXBoc1RyYW5zZm9ybShib29sIGlzVmVydGljYWxUZXh0
LCBmbG9hdCBzY2FsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgQWZmaW5lVHJhbnNmb3JtJik7
CisgICAgdm9pZCBidWlsZFRleHRDaHVua3MoY29uc3QgVmVjdG9yPFNWR0lubGluZVRleHRCb3gq
PiYgbGluZUxheW91dEJveGVzKTsKKyAgICB2b2lkIGxheW91dFRleHRDaHVua3MoY29uc3QgVmVj
dG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzKTsKIAogcHJpdmF0ZToKICAg
ICBWZWN0b3I8U1ZHVGV4dENodW5rPiBtX3RleHRDaHVua3M7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAJKHJldmlz
aW9uIDE4Mjc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEVuZ2luZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0RW5naW5lLmgiCiAKKyNpbmNsdWRlICJQ
YXRoVHJhdmVyc2FsU3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0UGF0aC5oIgogI2lu
Y2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCkBAIC0x
NzAsNDggKzE3MSwzMiBAQCB2b2lkIFNWR1RleHRMYXlvdXRFbmdpbmU6OmJlZ2luVGV4dFBhdGhM
CiAgICAgbV90ZXh0UGF0aCA9IHRleHRQYXRoLmxheW91dFBhdGgoKTsKICAgICBpZiAobV90ZXh0
UGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKKwogICAgIG1fdGV4dFBhdGhTdGFydE9m
ZnNldCA9IHRleHRQYXRoLnN0YXJ0T2Zmc2V0KCk7CiAgICAgbV90ZXh0UGF0aExlbmd0aCA9IG1f
dGV4dFBhdGgubGVuZ3RoKCk7CiAgICAgaWYgKG1fdGV4dFBhdGhTdGFydE9mZnNldCA+IDAgJiYg
bV90ZXh0UGF0aFN0YXJ0T2Zmc2V0IDw9IDEpCiAgICAgICAgIG1fdGV4dFBhdGhTdGFydE9mZnNl
dCAqPSBtX3RleHRQYXRoTGVuZ3RoOwogCi0gICAgZmxvYXQgdG90YWxMZW5ndGggPSAwOwotICAg
IHVuc2lnbmVkIHRvdGFsQ2hhcmFjdGVycyA9IDA7Ci0KICAgICBsaW5lTGF5b3V0Lm1fY2h1bmtM
YXlvdXRCdWlsZGVyLmJ1aWxkVGV4dENodW5rcyhsaW5lTGF5b3V0Lm1fbGluZUxheW91dEJveGVz
KTsKLSAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rPiYgdGV4dENodW5rcyA9IGxpbmVMYXlv
dXQubV9jaHVua0xheW91dEJ1aWxkZXIudGV4dENodW5rcygpOwotCi0gICAgdW5zaWduZWQgc2l6
ZSA9IHRleHRDaHVua3Muc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgY29uc3QgU1ZHVGV4dENodW5rJiBjaHVuayA9IHRleHRDaHVua3Mu
YXQoaSk7Ci0KLSAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAgICAgICAgdW5zaWduZWQgY2hh
cmFjdGVycyA9IDA7Ci0gICAgICAgIGNodW5rLmNhbGN1bGF0ZUxlbmd0aChsZW5ndGgsIGNoYXJh
Y3RlcnMpOwotCi0gICAgICAgIC8vIEhhbmRsZSB0ZXh0LWFuY2hvciBhcyBhZGRpdGlvbmFsIHN0
YXJ0IG9mZnNldCBmb3IgdGV4dCBwYXRocy4KLSAgICAgICAgbV90ZXh0UGF0aFN0YXJ0T2Zmc2V0
ICs9IGNodW5rLmNhbGN1bGF0ZVRleHRBbmNob3JTaGlmdChsZW5ndGgpOwotCi0gICAgICAgIHRv
dGFsTGVuZ3RoICs9IGxlbmd0aDsKLSAgICAgICAgdG90YWxDaGFyYWN0ZXJzICs9IGNoYXJhY3Rl
cnM7Ci0gICAgfQogCisgICAgLy8gSGFuZGxlIHRleHQtYW5jaG9yIGFzIGFkZGl0aW9uYWwgc3Rh
cnQgb2Zmc2V0IGZvciB0ZXh0IHBhdGhzLgorICAgIG1fdGV4dFBhdGhTdGFydE9mZnNldCArPSBs
aW5lTGF5b3V0Lm1fY2h1bmtMYXlvdXRCdWlsZGVyLnRvdGFsQW5jaG9yU2hpZnQoKTsKICAgICBt
X3RleHRQYXRoQ3VycmVudE9mZnNldCA9IG1fdGV4dFBhdGhTdGFydE9mZnNldDsKIAogICAgIC8v
IEV2ZW50dWFsbHkgaGFuZGxlIHRleHRMZW5ndGggYWRqdXN0bWVudHMuCi0gICAgU1ZHTGVuZ3Ro
QWRqdXN0VHlwZSBsZW5ndGhBZGp1c3QgPSBTVkdMZW5ndGhBZGp1c3RVbmtub3duOwotICAgIGZs
b2F0IGRlc2lyZWRUZXh0TGVuZ3RoID0gMDsKLQotICAgIGlmIChTVkdUZXh0Q29udGVudEVsZW1l
bnQqIHRleHRDb250ZW50RWxlbWVudCA9IFNWR1RleHRDb250ZW50RWxlbWVudDo6ZWxlbWVudEZy
b21SZW5kZXJlcigmdGV4dFBhdGgpKSB7Ci0gICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3Ro
Q29udGV4dCh0ZXh0Q29udGVudEVsZW1lbnQpOwotICAgICAgICBsZW5ndGhBZGp1c3QgPSB0ZXh0
Q29udGVudEVsZW1lbnQtPmxlbmd0aEFkanVzdCgpOwotICAgICAgICBkZXNpcmVkVGV4dExlbmd0
aCA9IHRleHRDb250ZW50RWxlbWVudC0+c3BlY2lmaWVkVGV4dExlbmd0aCgpLnZhbHVlKGxlbmd0
aENvbnRleHQpOwotICAgIH0KKyAgICBhdXRvKiB0ZXh0Q29udGVudEVsZW1lbnQgPSBTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OmVsZW1lbnRGcm9tUmVuZGVyZXIoJnRleHRQYXRoKTsKKyAgICBpZiAo
IXRleHRDb250ZW50RWxlbWVudCkKKyAgICAgICAgcmV0dXJuOwogCisgICAgU1ZHTGVuZ3RoQ29u
dGV4dCBsZW5ndGhDb250ZXh0KHRleHRDb250ZW50RWxlbWVudCk7CisgICAgZmxvYXQgZGVzaXJl
ZFRleHRMZW5ndGggPSB0ZXh0Q29udGVudEVsZW1lbnQtPnNwZWNpZmllZFRleHRMZW5ndGgoKS52
YWx1ZShsZW5ndGhDb250ZXh0KTsKICAgICBpZiAoIWRlc2lyZWRUZXh0TGVuZ3RoKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobGVuZ3RoQWRqdXN0ID09IFNWR0xlbmd0aEFkanVzdFNwYWNp
bmcpCisgICAgZmxvYXQgdG90YWxMZW5ndGggPSBsaW5lTGF5b3V0Lm1fY2h1bmtMYXlvdXRCdWls
ZGVyLnRvdGFsTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdG90YWxDaGFyYWN0ZXJzID0gbGluZUxh
eW91dC5tX2NodW5rTGF5b3V0QnVpbGRlci50b3RhbENoYXJhY3RlcnMoKTsKKworICAgIGlmICh0
ZXh0Q29udGVudEVsZW1lbnQtPmxlbmd0aEFkanVzdCgpID09IFNWR0xlbmd0aEFkanVzdFNwYWNp
bmcpCiAgICAgICAgIG1fdGV4dFBhdGhTcGFjaW5nID0gKGRlc2lyZWRUZXh0TGVuZ3RoIC0gdG90
YWxMZW5ndGgpIC8gdG90YWxDaGFyYWN0ZXJzOwogICAgIGVsc2UKICAgICAgICAgbV90ZXh0UGF0
aFNjYWxpbmcgPSBkZXNpcmVkVGV4dExlbmd0aCAvIHRvdGFsTGVuZ3RoOwpAQCAtMjkwLDcgKzI3
NSw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6ZmluYWxpemVUcmFuc2YKIAogICAgICAg
ICB1bnNpZ25lZCBmcmFnbWVudENvdW50ID0gZnJhZ21lbnRzLnNpemUoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYWdtZW50Q291bnQ7ICsraSkgewotICAgICAgICAgICAg
bV9jaHVua0xheW91dEJ1aWxkZXIudHJhbnNmb3JtYXRpb25Gb3JUZXh0Qm94KHRleHRCb3gsIHRl
eHRCb3hUcmFuc2Zvcm1hdGlvbik7CisgICAgICAgICAgICB0ZXh0Qm94VHJhbnNmb3JtYXRpb24g
PSBtX2NodW5rTGF5b3V0QnVpbGRlci50cmFuc2Zvcm1hdGlvbkZvclRleHRCb3godGV4dEJveCk7
CiAgICAgICAgICAgICBpZiAodGV4dEJveFRyYW5zZm9ybWF0aW9uLmlzSWRlbnRpdHkoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEFTU0VSVChmcmFnbWVudHNbaV0u
bGVuZ3RoQWRqdXN0VHJhbnNmb3JtLmlzSWRlbnRpdHkoKSk7CkBAIC01NTMsMTQgKzUzOCwxNSBA
QCB2b2lkIFNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpCiAgICAgICAgICAgICBp
ZiAodGV4dFBhdGhPZmZzZXQgPiBtX3RleHRQYXRoTGVuZ3RoKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgICAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgICAgICAgICBGbG9hdFBv
aW50IHBvaW50ID0gbV90ZXh0UGF0aC5wb2ludEF0TGVuZ3RoKHRleHRQYXRoT2Zmc2V0LCBvayk7
Ci0gICAgICAgICAgICBBU1NFUlQob2spOworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFs
c2U7CisgICAgICAgICAgICBhdXRvIHRyYXZlcnNhbFN0YXRlKG1fdGV4dFBhdGgudHJhdmVyc2Fs
U3RhdGVBdExlbmd0aCh0ZXh0UGF0aE9mZnNldCwgc3VjY2VzcykpOworICAgICAgICAgICAgQVNT
RVJUKHN1Y2Nlc3MpOwogCisgICAgICAgICAgICBGbG9hdFBvaW50IHBvaW50ID0gdHJhdmVyc2Fs
U3RhdGUuY3VycmVudCgpOwogICAgICAgICAgICAgeCA9IHBvaW50LngoKTsKICAgICAgICAgICAg
IHkgPSBwb2ludC55KCk7Ci0gICAgICAgICAgICBhbmdsZSA9IG1fdGV4dFBhdGgubm9ybWFsQW5n
bGVBdExlbmd0aCh0ZXh0UGF0aE9mZnNldCwgb2spOwotICAgICAgICAgICAgQVNTRVJUKG9rKTsK
KworICAgICAgICAgICAgYW5nbGUgPSB0cmF2ZXJzYWxTdGF0ZS5ub3JtYWxBbmdsZSgpOwogCiAg
ICAgICAgICAgICAvLyBGb3IgdmVydGljYWwgdGV4dCBvbiBwYXRoLCB0aGUgYWN0dWFsIGFuZ2xl
IGhhcyB0byBiZSByb3RhdGVkIDkwIGRlZ3JlZXMgYW50aS1jbG9ja3dpc2UsIG5vdCB0aGUgb3Jp
ZW50YXRpb24gYW5nbGUhCiAgICAgICAgICAgICBpZiAobV9pc1ZlcnRpY2FsVGV4dCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2
aXNpb24gMTgyNzU4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
UGF0aFRyYXZlcnNhbFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNp
bmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdNUGF0aEVsZW1lbnQuaCIK
QEAgLTIxMiwxNiArMjEzLDE5IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmJ1aWxk
VHJhbnMKIHsKICAgICBBU1NFUlQoIW1fYW5pbWF0aW9uUGF0aC5pc0VtcHR5KCkpOwogCi0gICAg
Ym9vbCBvayA9IGZhbHNlOworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgIGZsb2F0IHBv
c2l0aW9uT25QYXRoID0gbV9hbmltYXRpb25QYXRoLmxlbmd0aCgpICogcGVyY2VudGFnZTsKLSAg
ICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbV9hbmltYXRpb25QYXRoLnBvaW50QXRMZW5ndGgocG9z
aXRpb25PblBhdGgsIG9rKTsKLSAgICBpZiAoIW9rKQorICAgIGF1dG8gdHJhdmVyc2FsU3RhdGUo
bV9hbmltYXRpb25QYXRoLnRyYXZlcnNhbFN0YXRlQXRMZW5ndGgocG9zaXRpb25PblBhdGgsIHN1
Y2Nlc3MpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0
UG9pbnQgcG9zaXRpb24gPSB0cmF2ZXJzYWxTdGF0ZS5jdXJyZW50KCk7CisgICAgZmxvYXQgYW5n
bGUgPSB0cmF2ZXJzYWxTdGF0ZS5ub3JtYWxBbmdsZSgpOworCiAgICAgdHJhbnNmb3JtLT50cmFu
c2xhdGUocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkpOwogICAgIFJvdGF0ZU1vZGUgcm90YXRl
TW9kZSA9IHRoaXMtPnJvdGF0ZU1vZGUoKTsKICAgICBpZiAocm90YXRlTW9kZSAhPSBSb3RhdGVB
dXRvICYmIHJvdGF0ZU1vZGUgIT0gUm90YXRlQXV0b1JldmVyc2UpCiAgICAgICAgIHJldHVybjsK
LSAgICBmbG9hdCBhbmdsZSA9IG1fYW5pbWF0aW9uUGF0aC5ub3JtYWxBbmdsZUF0TGVuZ3RoKHBv
c2l0aW9uT25QYXRoLCBvayk7CiAgICAgaWYgKHJvdGF0ZU1vZGUgPT0gUm90YXRlQXV0b1JldmVy
c2UpCiAgICAgICAgIGFuZ2xlICs9IDE4MDsKICAgICB0cmFuc2Zvcm0tPnJvdGF0ZShhbmdsZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDY4ICsy
OSw1NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxk
ZXI6OlNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIoKQogICAgIDogbV90cmF2ZXJzYWxTdGF0
ZSgwKQorICAgICwgbV9zZWdtZW50SW5kZXgoMCkKIHsKIH0KIAogdm9pZCBTVkdQYXRoVHJhdmVy
c2FsU3RhdGVCdWlsZGVyOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIGJv
b2wsIFBhdGhDb29yZGluYXRlTW9kZSkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7
Ci0gICAgbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3RyYXZlcnNhbFN0YXRl
LT5tb3ZlVG8odGFyZ2V0UG9pbnQpOworICAgIG1fdHJhdmVyc2FsU3RhdGUtPnByb2Nlc3NQYXRo
RWxlbWVudChQYXRoRWxlbWVudE1vdmVUb1BvaW50LCAmdGFyZ2V0UG9pbnQpOwogfQogCiB2b2lk
IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiB0
YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlKQogewogICAgIEFTU0VSVChtX3RyYXZlcnNh
bFN0YXRlKTsKLSAgICBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoICs9IG1fdHJhdmVy
c2FsU3RhdGUtPmxpbmVUbyh0YXJnZXRQb2ludCk7CisgICAgbV90cmF2ZXJzYWxTdGF0ZS0+cHJv
Y2Vzc1BhdGhFbGVtZW50KFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQsICZ0YXJnZXRQb2ludCk7
CiB9CiAKIHZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y3VydmVUb0N1YmljKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBG
bG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlKQogeworICAgIEZsb2F0
UG9pbnQgcG9pbnRzW10gPSB7IHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCB9OwogICAgIEFT
U0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKLSAgICBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVu
Z3RoICs9IG1fdHJhdmVyc2FsU3RhdGUtPmN1YmljQmV6aWVyVG8ocG9pbnQxLCBwb2ludDIsIHRh
cmdldFBvaW50KTsKKyAgICBtX3RyYXZlcnNhbFN0YXRlLT5wcm9jZXNzUGF0aEVsZW1lbnQoUGF0
aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQsIHBvaW50cyk7CiB9CiAKIHZvaWQgU1ZHUGF0aFRyYXZl
cnNhbFN0YXRlQnVpbGRlcjo6Y2xvc2VQYXRoKCkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxT
dGF0ZSk7Ci0gICAgbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3RyYXZlcnNh
bFN0YXRlLT5jbG9zZVN1YnBhdGgoKTsKKyAgICBtX3RyYXZlcnNhbFN0YXRlLT5wcm9jZXNzUGF0
aEVsZW1lbnQoUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGgsIG51bGxwdHIpOwogfQogCiB2b2lkIFNW
R1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnNldERlc2lyZWRMZW5ndGgoZmxvYXQgZGVzaXJl
ZExlbmd0aCkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7Ci0gICAgbV90cmF2ZXJz
YWxTdGF0ZS0+bV9kZXNpcmVkTGVuZ3RoID0gZGVzaXJlZExlbmd0aDsKKyAgICBtX3RyYXZlcnNh
bFN0YXRlLT5zZXREZXNpcmVkTGVuZ3RoKGRlc2lyZWRMZW5ndGgpOwogfQogCiBib29sIFNWR1Bh
dGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmNvbnRpbnVlQ29uc3VtaW5nKCkKIHsKICAgICBBU1NF
UlQobV90cmF2ZXJzYWxTdGF0ZSk7ICAgIAotICAgIG1fdHJhdmVyc2FsU3RhdGUtPnByb2Nlc3NT
ZWdtZW50KCk7Ci0gICAgcmV0dXJuICFtX3RyYXZlcnNhbFN0YXRlLT5tX3N1Y2Nlc3M7Ci19Ci0K
LXZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6aW5jcmVtZW50UGF0aFNlZ21lbnRD
b3VudCgpCi17Ci0gICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwotICAgICsrbV90cmF2ZXJz
YWxTdGF0ZS0+bV9zZWdtZW50SW5kZXg7Ci19Ci0KLXVuc2lnbmVkIFNWR1BhdGhUcmF2ZXJzYWxT
dGF0ZUJ1aWxkZXI6OnBhdGhTZWdtZW50SW5kZXgoKQotewotICAgIEFTU0VSVChtX3RyYXZlcnNh
bFN0YXRlKTsKLSAgICByZXR1cm4gbV90cmF2ZXJzYWxTdGF0ZS0+bV9zZWdtZW50SW5kZXg7Cisg
ICAgcmV0dXJuICFtX3RyYXZlcnNhbFN0YXRlLT5zdWNjZXNzKCk7CiB9CiAKIGZsb2F0IFNWR1Bh
dGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnRvdGFsTGVuZ3RoKCkKIHsKICAgICBBU1NFUlQobV90
cmF2ZXJzYWxTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fdHJhdmVyc2FsU3RhdGUtPm1fdG90YWxMZW5n
dGg7CisgICAgcmV0dXJuIG1fdHJhdmVyc2FsU3RhdGUtPnRvdGFsTGVuZ3RoKCk7CiB9CiAKIFNW
R1BvaW50IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1cnJlbnRQb2ludCgpCiB7CiAg
ICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwotICAgIHJldHVybiBtX3RyYXZlcnNhbFN0YXRl
LT5tX2N1cnJlbnQ7CisgICAgcmV0dXJuIG1fdHJhdmVyc2FsU3RhdGUtPmN1cnJlbnQoKTsKIH0K
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0
YXRlQnVpbGRlci5oCShyZXZpc2lvbiAxODI3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIs
MTUgQEAgY2xhc3MgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlciA6IHB1YgogcHVibGljOgog
ICAgIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIoKTsKIAotICAgIHVuc2lnbmVkIHBhdGhT
ZWdtZW50SW5kZXgoKTsKKyAgICB1bnNpZ25lZCBwYXRoU2VnbWVudEluZGV4KCkgeyByZXR1cm4g
bV9zZWdtZW50SW5kZXg7IH0KICAgICBmbG9hdCB0b3RhbExlbmd0aCgpOwogICAgIFNWR1BvaW50
IGN1cnJlbnRQb2ludCgpOwogCiAgICAgdm9pZCBzZXRDdXJyZW50VHJhdmVyc2FsU3RhdGUoUGF0
aFRyYXZlcnNhbFN0YXRlKiB0cmF2ZXJzYWxTdGF0ZSkgeyBtX3RyYXZlcnNhbFN0YXRlID0gdHJh
dmVyc2FsU3RhdGU7IH0KICAgICB2b2lkIHNldERlc2lyZWRMZW5ndGgoZmxvYXQpOwotICAgIHZp
cnR1YWwgdm9pZCBpbmNyZW1lbnRQYXRoU2VnbWVudENvdW50KCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGluY3JlbWVudFBhdGhTZWdtZW50Q291bnQoKSBvdmVycmlkZSB7ICsrbV9zZWdt
ZW50SW5kZXg7IH0KICAgICB2aXJ0dWFsIGJvb2wgY29udGludWVDb25zdW1pbmcoKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIG92ZXJyaWRlIHsgbV90cmF2ZXJzYWxTdGF0
ZSA9IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIG92ZXJyaWRlIHsgbV90cmF2ZXJz
YWxTdGF0ZSA9IG51bGxwdHIsIG1fc2VnbWVudEluZGV4ID0gMDsgfQogCiBwcml2YXRlOgogICAg
IC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZy9Ob3JtYWxpemVkUGFyc2luZyBtb2Rlcy4KQEAg
LTU5LDYgKzU5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oZmxvYXQsIGZs
b2F0LCBmbG9hdCwgYm9vbCwgYm9vbCwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRl
TW9kZSkgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgUGF0aFRyYXZl
cnNhbFN0YXRlKiBtX3RyYXZlcnNhbFN0YXRlOworICAgIHVuc2lnbmVkIG1fc2VnbWVudEluZGV4
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMTgyNzU4KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNyArMjg1LDcg
QEAgYm9vbCBnZXRTVkdQYXRoU2VnQXRMZW5ndGhGcm9tU1ZHUGF0aEJ5dAogICAgIGlmIChzdHJl
YW0tPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUGF0aFRyYXZlcnNh
bFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsU2VnbWVu
dEF0TGVuZ3RoKTsKKyAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRy
YXZlcnNhbFN0YXRlOjpBY3Rpb246OlNlZ21lbnRBdExlbmd0aCk7CiAgICAgU1ZHUGF0aFRyYXZl
cnNhbFN0YXRlQnVpbGRlciogYnVpbGRlciA9IGdsb2JhbFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1
aWxkZXIodHJhdmVyc2FsU3RhdGUsIGxlbmd0aCk7CiAKICAgICBhdXRvIHNvdXJjZSA9IHN0ZDo6
bWFrZV91bmlxdWU8U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U+KHN0cmVhbSk7CkBAIC0zMDIsNyAr
MzAyLDcgQEAgYm9vbCBnZXRUb3RhbExlbmd0aE9mU1ZHUGF0aEJ5dGVTdHJlYW0oUwogICAgIGlm
IChzdHJlYW0tPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUGF0aFRy
YXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2Fs
VG90YWxMZW5ndGgpOworICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRo
VHJhdmVyc2FsU3RhdGU6OkFjdGlvbjo6VG90YWxMZW5ndGgpOwogICAgIFNWR1BhdGhUcmF2ZXJz
YWxTdGF0ZUJ1aWxkZXIqIGJ1aWxkZXIgPSBnbG9iYWxTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWls
ZGVyKHRyYXZlcnNhbFN0YXRlLCAwKTsKIAogICAgIGF1dG8gc291cmNlID0gc3RkOjptYWtlX3Vu
aXF1ZTxTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZT4oc3RyZWFtKTsKQEAgLTMxOSw3ICszMTksNyBA
QCBib29sIGdldFBvaW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtCiAgICAgaWYgKHN0cmVh
bS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQYXRoVHJhdmVyc2Fs
U3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxQb2ludEF0
TGVuZ3RoKTsKKyAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZl
cnNhbFN0YXRlOjpBY3Rpb246OlZlY3RvckF0TGVuZ3RoKTsKICAgICBTVkdQYXRoVHJhdmVyc2Fs
U3RhdGVCdWlsZGVyKiBidWlsZGVyID0gZ2xvYmFsU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRl
cih0cmF2ZXJzYWxTdGF0ZSwgbGVuZ3RoKTsKIAogICAgIGF1dG8gc291cmNlID0gc3RkOjptYWtl
X3VuaXF1ZTxTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZT4oc3RyZWFtKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>