<?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>78155</bug_id>
          
          <creation_ts>2012-02-08 14:16:15 -0800</creation_ts>
          <short_desc>Implement hardware animation of CSS filters</short_desc>
          <delta_ts>2012-02-10 11:42:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>dino</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>552485</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2012-02-08 14:16:15 -0800</bug_when>
    <thetext>Implement hardware animation of CSS filter properties. This will mostly follow the current logic for other hardware rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552486</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2012-02-08 14:16:32 -0800</bug_when>
    <thetext>InRadar &lt;rdar://problem/10422163&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552660</commentid>
    <comment_count>2</comment_count>
      <attachid>126198</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2012-02-08 17:09:14 -0800</bug_when>
    <thetext>Created attachment 126198
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552692</commentid>
    <comment_count>3</comment_count>
      <attachid>126206</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2012-02-08 17:44:21 -0800</bug_when>
    <thetext>Created attachment 126206
Patch fixing Windows build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552799</commentid>
    <comment_count>4</comment_count>
      <attachid>126206</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-02-08 20:19:55 -0800</bug_when>
    <thetext>Comment on attachment 126206
Patch fixing Windows build

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

very minor comments. one confusion/error about the return type of the validate function.

&gt; Source/WebCore/page/animation/AnimationBase.cpp:1055
&gt;          gPropertyWrappers-&gt;append(new PropertyWrapper&lt;const FilterOperations&amp;&gt;(CSSPropertyWebkitFilter, &amp;RenderStyle::filter, &amp;RenderStyle::setFilter));
&gt;  #endif
&gt; +#endif
&gt; +

Seems like you added a blank line here by accident.

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:468
&gt;          size_t numAnimations = propertyAnimations.size();
&gt;          for (size_t i = 0; i &lt; numAnimations; ++i) {
&gt;              const LayerPropertyAnimation&amp; currAnimation = propertyAnimations[i];
&gt; -            if (currAnimation.m_property == property)
&gt; +            
&gt; +            if (currAnimation.m_property == AnimatedPropertyWebkitTransform || currAnimation.m_property == AnimatedPropertyOpacity
&gt; +                    || currAnimation.m_property == AnimatedPropertyBackgroundColor
&gt; +#if ENABLE(CSS_FILTERS)
&gt; +                    || currAnimation.m_property == AnimatedPropertyWebkitFilter
&gt; +#endif
&gt; +                )

question: this is now copying those four properties for the layers, but the calling sites previously didn&apos;t copy all four. Will there be a case where we&apos;re now copying something we didn&apos;t before, and will it cause a problem?

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:1398
&gt; +    moveOrCopyAnimations(Move,  m_layer.get(), m_structuralLayer.get());

extra space

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:1863
&gt; +bool GraphicsLayerCA::appendToUncommittedAnimations(const KeyframeValueList&amp; valueList, const FilterOperations* operations, const Animation* animation, const String&amp; animationName, int animationIndex, double timeOffset)

Why not pass in the FilterOperation directly rather than FilterOperations and index? I see you need the index to generate the keypath, but maybe just that.

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:1865
&gt; +    bool additive = animationIndex &gt; 0;

Do these ever need to be additive? Aren&apos;t we always animating a different keypath?

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:1898
&gt; +
&gt; +// get list of properties to animate for this operation (from PlatformCALayer)
&gt; +// for each property:
&gt; +//      create kf or basic animation
&gt; +//          animation name is propertyIdToString(valueList.property()) + &quot;.&quot; + &quot;filter_&quot; + animationIndex + property
&gt; +//          maybe get this from PlatformCALayer
&gt; +//      setFilterAnimationKeyframes or setFilterAnimationEndpoints
&gt; +//          need valueList for values, operations and animationIndex (or operation), property index
&gt; +//          maybe need to ask PlatformCALayer to return values given an operation and index?
&gt; +

I think you meant to remove this. If not, indentation is off.

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:1906
&gt; +    int listIndex = validateFilterOperations(valueList);

validateFilterOperations returns a boolean - not an int. I guess this means you were always getting the 0th entry in the KeyframeValueList.

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:1918
&gt; +        if (!appendToUncommittedAnimations(valueList, operations, animation, animationName, animationIndex, timeOffset))

As above, why not pass in operations-&gt;operations().at(animationIndex) (and maybe the index)?

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h:187
&gt; +    PassRefPtr&lt;PlatformCAAnimation&gt; createBasicAnimation(const Animation*, const String&amp; keyPath, bool additive);

I guess you don&apos;t need keyPath here.

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAAnimationMac.mm:451
&gt; +        if (propertyIndex &lt; 3) {
&gt; +            double multiplier = 1 - op-&gt;amount() * 2;
&gt; +            value.adoptNS([[NSArray arrayWithObjects:
&gt; +                [NSNumber numberWithDouble:invertConstants[propertyIndex][0] * multiplier],

I&apos;m confused here. What&apos;s with this *2 thing? And why do this when propertyIndex &lt; 3?

I&apos;m also slightly confused about propertyIndex. I&apos;m not sure what it means.

OK. I&apos;ve looked elsewhere and worked it out. It&apos;s the index into the number of animations needed for each effect. So it isn&apos;t anything to do with CSS properties. Maybe we could think of a better name?

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAAnimationMac.mm:715
&gt; +        default: return &quot;&quot;;
&gt; +        case 0: return &quot;inputRVector&quot;;
&gt; +        case 1: return &quot;inputGVector&quot;;
&gt; +        case 2: return &quot;inputBVector&quot;;
&gt; +        }
&gt; +    case FilterOperation::SATURATE: return &quot;inputSaturation&quot;;
&gt; +    case FilterOperation::HUE_ROTATE: return &quot;inputAngle&quot;;
&gt; +    case FilterOperation::INVERT:
&gt; +        switch(propertyIndex) {
&gt; +        default: return &quot;&quot;;
&gt; +        case 0: return &quot;inputRVector&quot;;
&gt; +        case 1: return &quot;inputGVector&quot;;
&gt; +        case 2: return &quot;inputBVector&quot;;
&gt; +        case 3: return &quot;inputBiasVector&quot;;

Shouldn&apos;t default be last?

&gt; Source/WebCore/rendering/RenderLayer.h:527
&gt;  #if ENABLE(CSS_FILTERS)
&gt; +    bool hasFilter() const { return renderer()-&gt;hasFilter(); }
&gt;      virtual void filterNeedsRepaint();

hasFilter() might be able to go outside the ENABLE. I did the same for style-&gt;hasFilter. That saves the ugly code below.

&gt; Source/WebCore/rendering/RenderLayerBacking.cpp:1208
&gt; +    if (!hasOpacity &amp;&amp; !hasTransform
&gt; +#if ENABLE(CSS_FILTERS)
&gt; +        &amp;&amp; !hasFilter
&gt; +#endif
&gt; +    )

This is the ugly bit. I think we can do it outside the ENABLE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553295</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2012-02-09 10:35:09 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 126206 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126206&amp;action=review
&gt; 
&gt; very minor comments. one confusion/error about the return type of the validate function.
&gt; 
&gt; &gt; Source/WebCore/page/animation/AnimationBase.cpp:1055
&gt; &gt;          gPropertyWrappers-&gt;append(new PropertyWrapper&lt;const FilterOperations&amp;&gt;(CSSPropertyWebkitFilter, &amp;RenderStyle::filter, &amp;RenderStyle::setFilter));
&gt; &gt;  #endif
&gt; &gt; +#endif
&gt; &gt; +

Fixed

&gt; 
&gt; Seems like you added a blank line here by accident.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:468
&gt; &gt;          size_t numAnimations = propertyAnimations.size();
&gt; &gt;          for (size_t i = 0; i &lt; numAnimations; ++i) {
&gt; &gt;              const LayerPropertyAnimation&amp; currAnimation = propertyAnimations[i];
&gt; &gt; -            if (currAnimation.m_property == property)
&gt; &gt; +            
&gt; &gt; +            if (currAnimation.m_property == AnimatedPropertyWebkitTransform || currAnimation.m_property == AnimatedPropertyOpacity
&gt; &gt; +                    || currAnimation.m_property == AnimatedPropertyBackgroundColor
&gt; &gt; +#if ENABLE(CSS_FILTERS)
&gt; &gt; +                    || currAnimation.m_property == AnimatedPropertyWebkitFilter
&gt; &gt; +#endif
&gt; &gt; +                )
&gt; 
&gt; question: this is now copying those four properties for the layers, but the calling sites previously didn&apos;t copy all four. Will there be a case where we&apos;re now copying something we didn&apos;t before, and will it cause a problem?

Before, it was always copying transform and opacity and in some cases background color. So now background color will always get copied and I think that&apos;s the only difference. I think the fact that it didn&apos;t copy background color in some places before was an oversight, so I made it consistent. But I am pretty sure that we don&apos;t currently animate background color ever, so all this code for background color is just future proofing.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:1398
&gt; &gt; +    moveOrCopyAnimations(Move,  m_layer.get(), m_structuralLayer.get());
&gt; 
&gt; extra space

Fixed

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:1863
&gt; &gt; +bool GraphicsLayerCA::appendToUncommittedAnimations(const KeyframeValueList&amp; valueList, const FilterOperations* operations, const Animation* animation, const String&amp; animationName, int animationIndex, double timeOffset)
&gt; 
&gt; Why not pass in the FilterOperation directly rather than FilterOperations and index? I see you need the index to generate the keypath, but maybe just that.

I could pass FilterOperation, but I&apos;d still need the index. There are places where you need to index into another list of filter functions and the index is used for that. That&apos;s in addition to generating the keypath name. So I&apos;ll pass in the FilterOperation and keep the index.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:1865
&gt; &gt; +    bool additive = animationIndex &gt; 0;
&gt; 
&gt; Do these ever need to be additive? Aren&apos;t we always animating a different keypath?

Right, that&apos;s code left over from the transform logic. Gone…

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:1898
&gt; &gt; +
&gt; &gt; +// get list of properties to animate for this operation (from PlatformCALayer)
&gt; &gt; +// for each property:
&gt; &gt; +//      create kf or basic animation
&gt; &gt; +//          animation name is propertyIdToString(valueList.property()) + &quot;.&quot; + &quot;filter_&quot; + animationIndex + property
&gt; &gt; +//          maybe get this from PlatformCALayer
&gt; &gt; +//      setFilterAnimationKeyframes or setFilterAnimationEndpoints
&gt; &gt; +//          need valueList for values, operations and animationIndex (or operation), property index
&gt; &gt; +//          maybe need to ask PlatformCALayer to return values given an operation and index?
&gt; &gt; +
&gt; 
&gt; I think you meant to remove this. If not, indentation is off.

Yep, it&apos;s gone

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:1906
&gt; &gt; +    int listIndex = validateFilterOperations(valueList);
&gt; 
&gt; validateFilterOperations returns a boolean - not an int. I guess this means you were always getting the 0th entry in the KeyframeValueList.

Ack! You&apos;re right. That function is supposed to return the index of the first non-default keyframe. I&apos;ll fix the call and add a test for this to the test case.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:1918
&gt; &gt; +        if (!appendToUncommittedAnimations(valueList, operations, animation, animationName, animationIndex, timeOffset))
&gt; 
&gt; As above, why not pass in operations-&gt;operations().at(animationIndex) (and maybe the index)?

Now passing in FilterOperation* and index.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h:187
&gt; &gt; +    PassRefPtr&lt;PlatformCAAnimation&gt; createBasicAnimation(const Animation*, const String&amp; keyPath, bool additive);
&gt; 
&gt; I guess you don&apos;t need keyPath here.

You mean I shouldn&apos;t have the parameter name in the signature? I think it&apos;s not obvious the string is a keyPath without it.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAAnimationMac.mm:451
&gt; &gt; +        if (propertyIndex &lt; 3) {
&gt; &gt; +            double multiplier = 1 - op-&gt;amount() * 2;
&gt; &gt; +            value.adoptNS([[NSArray arrayWithObjects:
&gt; &gt; +                [NSNumber numberWithDouble:invertConstants[propertyIndex][0] * multiplier],
&gt; 
&gt; I&apos;m confused here. What&apos;s with this *2 thing? And why do this when propertyIndex &lt; 3?

I added documentation to filterValueForOperation explaining what is being animated and how this does the invert operation

&gt; 
&gt; I&apos;m also slightly confused about propertyIndex. I&apos;m not sure what it means.

Some filters need to animate multipl CI properties, like the ones that do ColorMatrix animation. So there is a 1 to many relationship between filters and animations. This param reflects that. In the logic about this, it asks PlatformCAAnimation how many properties need to be animated for a given filter and then it generates that many animations passing the right propertyIndex to that 

I added some documentation to GraphicsLayerCA::appendToUncommittedAnimations to explain it.

&gt; 
&gt; OK. I&apos;ve looked elsewhere and worked it out. It&apos;s the index into the number of animations needed for each effect. So it isn&apos;t anything to do with CSS properties. Maybe we could think of a better name?

I&apos;ve changed it to internalFilterPropertyIndex as requested

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAAnimationMac.mm:715
&gt; &gt; +        default: return &quot;&quot;;
&gt; &gt; +        case 0: return &quot;inputRVector&quot;;
&gt; &gt; +        case 1: return &quot;inputGVector&quot;;
&gt; &gt; +        case 2: return &quot;inputBVector&quot;;
&gt; &gt; +        }
&gt; &gt; +    case FilterOperation::SATURATE: return &quot;inputSaturation&quot;;
&gt; &gt; +    case FilterOperation::HUE_ROTATE: return &quot;inputAngle&quot;;
&gt; &gt; +    case FilterOperation::INVERT:
&gt; &gt; +        switch(propertyIndex) {
&gt; &gt; +        default: return &quot;&quot;;
&gt; &gt; +        case 0: return &quot;inputRVector&quot;;
&gt; &gt; +        case 1: return &quot;inputGVector&quot;;
&gt; &gt; +        case 2: return &quot;inputBVector&quot;;
&gt; &gt; +        case 3: return &quot;inputBiasVector&quot;;
&gt; 
&gt; Shouldn&apos;t default be last?

done

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayer.h:527
&gt; &gt;  #if ENABLE(CSS_FILTERS)
&gt; &gt; +    bool hasFilter() const { return renderer()-&gt;hasFilter(); }
&gt; &gt;      virtual void filterNeedsRepaint();
&gt; 
&gt; hasFilter() might be able to go outside the ENABLE. I did the same for style-&gt;hasFilter. That saves the ugly code below.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerBacking.cpp:1208
&gt; &gt; +    if (!hasOpacity &amp;&amp; !hasTransform
&gt; &gt; +#if ENABLE(CSS_FILTERS)
&gt; &gt; +        &amp;&amp; !hasFilter
&gt; &gt; +#endif
&gt; &gt; +    )
&gt; 
&gt; This is the ugly bit. I think we can do it outside the ENABLE.

done

Patch on the way</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553581</commentid>
    <comment_count>6</comment_count>
      <attachid>126393</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2012-02-09 15:51:30 -0800</bug_when>
    <thetext>Created attachment 126393
Patch with review changes, crash fixes and tests for more cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553626</commentid>
    <comment_count>7</comment_count>
      <attachid>126393</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-02-09 17:10:02 -0800</bug_when>
    <thetext>Comment on attachment 126393
Patch with review changes, crash fixes and tests for more cases

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

very minor change requests. awesome!

&gt; Source/WebCore/ChangeLog:17
&gt; +        Reviewed by NOBODY (OOPS!).

Needs newline.

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:1906
&gt; +    if (listIndex &lt; 0)
&gt; +        return false;
&gt; +        
&gt; +    const FilterOperations* operations = (listIndex &gt;= 0) ? static_cast&lt;const FilterAnimationValue*&gt;(valueList.at(listIndex))-&gt;value() : 0;

No longer need the ternary operation.

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:2220
&gt; +    // We toss the last tfArray value because it has to one shorter than the others.

Nits: might as well say &quot;timing function&quot; rather than &quot;tfArray value&quot;. And &quot;has to *be* one&quot;.

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCAAnimationMac.mm:441
&gt; +        double t = 0;

Nit: for consistency, you use amount above and below, but t here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553680</commentid>
    <comment_count>8</comment_count>
      <attachid>126393</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-09 18:11:00 -0800</bug_when>
    <thetext>Comment on attachment 126393
Patch with review changes, crash fixes and tests for more cases

Attachment 126393 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11496149</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554253</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2012-02-10 11:42:23 -0800</bug_when>
    <thetext>Committed r107422: &lt;http://trac.webkit.org/changeset/107422&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126198</attachid>
            <date>2012-02-08 17:09:14 -0800</date>
            <delta_ts>2012-02-08 17:44:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78155-20120208170913.patch</filename>
            <type>text/plain</type>
            <size>52274</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MDA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzcxYTI0OGQ1Y2ZhYTQ1
YjEwMmIxZGZmNmE3YjY5YWFhY2UxZTZiNC4uYzdjZDhlMTdkM2Q1NjEwYjI4ZWFhMWY1NzE5MTkx
NGM2ZWRkNmQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEyLTAyLTA4ICBDaHJp
cyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgaGFyZHdh
cmUgYW5pbWF0aW9uIG9mIENTUyBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03ODE1NQorCisgICAgICAgIEFkZGVkIGxvZ2ljIHRvIFBsYXRm
b3JtQ0FBbmltYXRpb24gdG8gcmV0dXJuIGVub3VnaCBpbmZvcm1hdGlvbgorICAgICAgICB0byBH
cmFwaGljc0xheWVyQ0EgdG8gYmUgYWJsZSB0byBjb25zdHJ1Y3QgYSBrZXlQYXRoIGFuaW1hdGlv
bgorICAgICAgICBmb3IgZWFjaCBmaWx0ZXIgcHJvcGVydHkuIFNvbWUgZmlsdGVycyBuZWVkIHRv
IGFuaW1hdGUgbXVsdGlwbGUKKyAgICAgICAgcHJvcGVydGllcyBwZXIgZmlsdGVyLCBzbyBQbGF0
Zm9ybUNBQW5pbWF0aW9uIGFsc28gcmV0dXJucyB0aGUgbnVtYmVyCisgICAgICAgIG9mIHByb3Bl
cnRpZXMgcGVyIGZpbHRlciBhbmQgdGhlbiBhbiBhbmltYXRpb24gaXMgY29uc3RydWN0ZWQgZm9y
IAorICAgICAgICBlYWNoIG9uZS4gQWxzbyBhZGRlZCBhbGwgdGhlIHN1cHBvcnQgbG9naWMgdG8g
aGFuZGxlIGhhcmR3YXJlIGZpbHRlcgorICAgICAgICBhbmltYXRpb24gaW4gdGhlIGhpZ2hlciBs
ZXZlbCBsb2dpYywganVzdCBsaWtlIHdlIGRvIGZvciB0cmFuc2Zvcm1zIGFuZAorICAgICAgICBv
cGFjaXR5LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRlc3Q6IGNzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWh3Lmh0bWwKKworICAgICAgICAq
IHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZEZpbHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZEZpbHRlcjo6UHJvcGVydHlXcmFwcGVyQWNj
ZWxlcmF0ZWRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVyQWNjZWxl
cmF0ZWRGaWx0ZXI6OmFuaW1hdGlvbklzQWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRGaWx0ZXI6OmJsZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkFuaW1hdGlvbkJhc2U6OmVuc3VyZVByb3BlcnR5TWFwKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmlsdGVyT3BlcmF0aW9uc0F0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI6OnZhbGlkYXRlRmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NMYXllci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChG
aWx0ZXJBbmltYXRpb25WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJBbmltYXRpb25W
YWx1ZTo6RmlsdGVyQW5pbWF0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQW5p
bWF0aW9uVmFsdWU6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckFuaW1hdGlvblZh
bHVlOjp2YWx1ZSk6CisgICAgICAgIChHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb3BlcnR5
SWRUb1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6Om1vdmVPckNv
cHlBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6YWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0
dXJhbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlQW5p
bWF0aW9uRnJvbUtleWZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OmFwcGVuZFRvVW5jb21taXR0ZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpjcmVhdGVGaWx0ZXJBbmltYXRpb25zRnJv
bUtleWZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZUJh
c2ljQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRl
S2V5ZnJhbWVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpz
ZXRGaWx0ZXJBbmltYXRpb25FbmRwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjpzZXRGaWx0ZXJBbmltYXRpb25LZXlmcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZExheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDQTo6Y2xvbmVMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmg6CisgICAgICAgIChHcmFwaGljc0xheWVyQ0EpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaDoKKyAg
ICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tOgorICAgICAgICAoUGxhdGZvcm1DQUFu
aW1hdGlvbjo6c2V0RnJvbVZhbHVlKToKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb246OnNl
dFRvVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VmFsdWVzKToKKyAg
ICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb246Om51bUFuaW1hdGVkRmlsdGVyUHJvcGVydGllcyk6
CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uOjphbmltYXRlZEZpbHRlclByb3BlcnR5TmFt
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGFzRmlsdGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6c3Rh
cnRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFy
dFRyYW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpncmFw
aGljc0xheWVyVG9DU1NQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OmNzc1RvR3JhcGhpY3NMYXllclByb3BlcnR5KToKKwogMjAxMi0wMi0wNyAgS2VudGFy
byBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVuYW1lIFt2OE9uUHJv
dG9dIElETCBhdHRyaWJ1dGUgdG8gW1Y4T25Qcm90b10gSURMIGF0dHJpYnV0ZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAppbmRleCBlM2FkOTJm
YTBkYTVkMTE4MjhlNDQxYTBmZmUyNjk3YjFmMTBmMDMyLi44YjYzZDZlY2MxMjBjODU5ZTZiMmE4
Nzg1NGI3OTZiNzYxMjIyYzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9BbmltYXRpb25CYXNlLmNwcApAQCAtNDUxLDYgKzQ1MSwyMyBAQCBwdWJsaWM6CiAgICAgICAg
IGRzdC0+c2V0VHJhbnNmb3JtKGJsZW5kRnVuYyhhbmltLCBhLT50cmFuc2Zvcm0oKSwgYi0+dHJh
bnNmb3JtKCksIHByb2dyZXNzKSk7CiAgICAgfQogfTsKKworI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKK2NsYXNzIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkRmlsdGVyIDogcHVibGljIFByb3Bl
cnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4geworcHVibGljOgorICAgIFByb3Bl
cnR5V3JhcHBlckFjY2VsZXJhdGVkRmlsdGVyKCkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+KENTU1Byb3BlcnR5V2Via2l0RmlsdGVyLCAmUmVuZGVy
U3R5bGU6OmZpbHRlciwgJlJlbmRlclN0eWxlOjpzZXRGaWx0ZXIpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBibGVuZChjb25zdCBBbmltYXRpb25CYXNl
KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKKyAgICB7CisgICAgICAgIGRzdC0+
c2V0RmlsdGVyKGJsZW5kRnVuYyhhbmltLCBhLT5maWx0ZXIoKSwgYi0+ZmlsdGVyKCksIHByb2dy
ZXNzKSk7CisgICAgfQorfTsKKyNlbmRpZgogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKIAogc3RhdGljIGlubGluZSBzaXplX3Qgc2hhZG93TGlzdExlbmd0aChjb25zdCBT
aGFkb3dEYXRhKiBzaGFkb3cpCkBAIC0xMDI1LDE0ICsxMDQyLDE3IEBAIHZvaWQgQW5pbWF0aW9u
QmFzZTo6ZW5zdXJlUHJvcGVydHlNYXAoKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVy
QWNjZWxlcmF0ZWRPcGFjaXR5KCkpOwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgpKTsKKyNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3Bl
cnR5V3JhcHBlckFjY2VsZXJhdGVkRmlsdGVyKCkpOworI2VuZGlmCiAjZWxzZQogICAgICAgICBn
UHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1By
b3BlcnR5T3BhY2l0eSwgJlJlbmRlclN0eWxlOjpvcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldE9w
YWNpdHkpKTsKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlX
cmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
Zm9ybSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3Jt
KSk7Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICAgICAgZ1Byb3BlcnR5
V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmPihDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlciwgJlJlbmRlclN0eWxlOjpmaWx0ZXIsICZSZW5k
ZXJTdHlsZTo6c2V0RmlsdGVyKSk7CiAjZW5kaWYKKyNlbmRpZgorCiAKICAgICAgICAgZ1Byb3Bl
cnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29s
b3IoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAm
UmVuZGVyU3R5bGU6OmNvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxl
Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0VmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3IpKTsKICAgICAgICAgZ1Byb3BlcnR5
V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3Io
Q1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVu
ZGVyU3R5bGU6OnRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0U3Ryb2tlQ29s
b3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHls
ZTo6c2V0VmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5kZXggYzdhMjI3NTViMDFj
OWM0OGIzZGYwNmE1NjYzZjkxNjBkN2NlMzlkNy4uYmM1Y2U5ZTczMzcwY2FkOGEyNGZjMGE4ZDhi
OTg4ODdhYmVhNzY2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NMYXllci5jcHAKQEAgLTM4MCw2ICszODAsNDYgQEAgdm9pZCBHcmFwaGljc0xh
eWVyOjpzZXRHcmFwaGljc0xheWVyRmFjdG9yeShHcmFwaGljc0xheWVyOjpHcmFwaGljc0xheWVy
RmFjdG9yeQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCitzdGF0aWMgaW5s
aW5lIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMqIGZpbHRlck9wZXJhdGlvbnNBdChjb25zdCBLZXlm
cmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBzaXplX3QgaW5kZXgpCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4odmFsdWVMaXN0LmF0KGluZGV4
KSktPnZhbHVlKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllcjo6dmFsaWRhdGVGaWx0ZXJPcGVy
YXRpb25zKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QpCit7CisgICAgQVNTRVJU
KHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpOwor
CisgICAgaWYgKHZhbHVlTGlzdC5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBFbXB0eSBmaWx0ZXJzIG1hdGNoIGFueXRoaW5nLCBzbyBmaW5kIHRoZSBmaXJzdCBu
b24tZW1wdHkgZW50cnkgYXMgdGhlIHJlZmVyZW5jZQorICAgIHNpemVfdCBmaXJzdEluZGV4ID0g
MDsKKyAgICBmb3IgKCA7IGZpcnN0SW5kZXggPCB2YWx1ZUxpc3Quc2l6ZSgpOyArK2ZpcnN0SW5k
ZXgpIHsKKyAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbnNBdCh2YWx1ZUxpc3QsIGZpcnN0SW5k
ZXgpLT5vcGVyYXRpb25zKCkuc2l6ZSgpID4gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGlmIChmaXJzdEluZGV4ID49IHZhbHVlTGlzdC5zaXplKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMqIGZpcnN0VmFsID0gZmlsdGVy
T3BlcmF0aW9uc0F0KHZhbHVlTGlzdCwgZmlyc3RJbmRleCk7CisgICAgCisgICAgZm9yIChzaXpl
X3QgaSA9IGZpcnN0SW5kZXggKyAxOyBpIDwgdmFsdWVMaXN0LnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMqIHZhbCA9IGZpbHRlck9wZXJhdGlvbnNBdCh2YWx1
ZUxpc3QsIGkpOworICAgICAgICAKKyAgICAgICAgLy8gQW4gZW10cHkgZmlsdGVyIGxpc3QgbWF0
Y2hlcyBhbnl0aGluZy4KKyAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKCFmaXJzdFZhbC0+
b3BlcmF0aW9uc01hdGNoKCp2YWwpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiAvLyBBbiAiaW52YWxpZCIgbGlz
dCBpcyBvbmUgd2hvc2UgZnVuY3Rpb25zIGRvbid0IG1hdGNoLCBhbmQgdGhlcmVmb3JlIGhhcyB0
byBiZSBhbmltYXRlZCBhcyBhIE1hdHJpeAogLy8gVGhlIGhhc0JpZ1JvdGF0aW9uIGZsYWcgd2ls
bCBhbHdheXMgcmV0dXJuIGZhbHNlIGlmIGlzVmFsaWQgaXMgZmFsc2UuIE90aGVyd2lzZSBoYXNC
aWdSb3RhdGlvbiBpcyAKIC8vIHRydWUgaWYgdGhlIHJvdGF0aW9uIGJldHdlZW4gYW55IHR3byBr
ZXlmcmFtZXMgaXMgPj0gMTgwIGRlZ3JlZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKaW5kZXggOWY3NTYyNGZmYzE3ZmFjYTVmMDIyMWEx
ZWZjYmNjODFhMjI3NjAzNi4uYmRlMGY3ZjUwMDAxNmMxMGU0MmFkMzlmMzg2NzliNTc4Yjg5YWIy
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuaApAQCAtMTUzLDYgKzE1MywyNSBAQCBwcml2YXRlOgogICAgIFRyYW5zZm9ybU9wZXJhdGlv
bnMgbV92YWx1ZTsKIH07CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisvLyBVc2VkIHRvIHN0
b3JlIG9uZSBmaWx0ZXIgdmFsdWUgaW4gYSBrZXlmcmFtZSBsaXN0LgorY2xhc3MgRmlsdGVyQW5p
bWF0aW9uVmFsdWUgOiBwdWJsaWMgQW5pbWF0aW9uVmFsdWUgeworcHVibGljOgorICAgIEZpbHRl
ckFuaW1hdGlvblZhbHVlKGZsb2F0IGtleVRpbWUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMqIHZh
bHVlID0gMCwgUGFzc1JlZlB0cjxUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24gPSAwKQor
ICAgICAgICA6IEFuaW1hdGlvblZhbHVlKGtleVRpbWUsIHRpbWluZ0Z1bmN0aW9uKQorICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbV92YWx1ZSA9ICp2YWx1ZTsKKyAgICB9
CisgICAgdmlydHVhbCBBbmltYXRpb25WYWx1ZSogY2xvbmUoKSBjb25zdCB7IHJldHVybiBuZXcg
RmlsdGVyQW5pbWF0aW9uVmFsdWUoKnRoaXMpOyB9CisKKyAgICBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuICZtX3ZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAg
RmlsdGVyT3BlcmF0aW9ucyBtX3ZhbHVlOworfTsKKyNlbmRpZgorCiAvLyBVc2VkIHRvIHN0b3Jl
IGEgc2VyaWVzIG9mIHZhbHVlcyBpbiBhIGtleWZyYW1lIGxpc3QuIFZhbHVlcyB3aWxsIGFsbCBi
ZSBvZiB0aGUgc2FtZSB0eXBlLAogLy8gd2hpY2ggY2FuIGJlIGluZmVycmVkIGZyb20gdGhlIHBy
b3BlcnR5LgogY2xhc3MgS2V5ZnJhbWVWYWx1ZUxpc3QgewpAQCAtNDI0LDYgKzQ0Myw5IEBAIHBy
b3RlY3RlZDoKICAgICAvLyB3aGVuIGNvbXBvc2l0aW5nIGlzIG5vdCBkb25lIGluIGhhcmR3YXJl
LiBJdCBpcyBub3QgdmlydHVhbCwgc28gdGhlIGNhbGxlcgogICAgIC8vIG5lZWRzIHRvIG5vdGlm
aXkgdGhlIGNoYW5nZSB0byB0aGUgcGxhdGZvcm0gbGF5ZXIgYXMgbmVlZGVkLgogICAgIHZvaWQg
Y2xlYXJGaWx0ZXJzKCkgeyBtX2ZpbHRlcnMuY2xlYXIoKTsgfQorCisgICAgLy8gR2l2ZW4gYSBL
ZXlmcmFtZVZhbHVlTGlzdCBjb250YWluaW5nIGZpbHRlck9wZXJhdGlvbnMsIHJldHVybiB0cnVl
IGlmIHRoZSBvcGVyYXRpb25zIGFyZSB2YWxpZC4KKyAgICBzdGF0aWMgYm9vbCB2YWxpZGF0ZUZp
bHRlck9wZXJhdGlvbnMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmKTsKICNlbmRpZgogCiAgICAg
Ly8gR2l2ZW4gYSBsaXN0IG9mIFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlcywgc2VlIGlmIGFsbCB0
aGUgb3BlcmF0aW9ucyBmb3IgZWFjaCBrZXlmcmFtZSBtYXRjaC4gSWYgc28KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaApp
bmRleCA4MTI3MmRkYmUzYmU5ZmViZWRjNzc3M2ZmNjFhZmUyZjRhNTIwMzM1Li40MDU4YjY1ZjA5
OTUxMGU4MzEyNTc0Nzg1NDkzNzMyMzUyM2FjNWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCkBAIC00Nyw3ICs0
Nyw4IEBAIGVudW0gQW5pbWF0ZWRQcm9wZXJ0eUlEIHsKICAgICBBbmltYXRlZFByb3BlcnR5SW52
YWxpZCwKICAgICBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtLAogICAgIEFuaW1hdGVk
UHJvcGVydHlPcGFjaXR5LAotICAgIEFuaW1hdGVkUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IKKyAg
ICBBbmltYXRlZFByb3BlcnR5QmFja2dyb3VuZENvbG9yLAorICAgIEFuaW1hdGVkUHJvcGVydHlX
ZWJraXRGaWx0ZXIKIH07CiAKIGNsYXNzIEdyYXBoaWNzTGF5ZXJDbGllbnQgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAKaW5kZXggYWQzYWMwNGEyZmJjMDcxNDkwNWNiOTA4NDFlYzMxNzgxMGZiY2FiMi4uM2ZhMTI1
Nzg2Yjg4Y2NjNmY3MjllODZhYzI5ZDQ3ZTVkNjA5ZTc0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCkBAIC0y
MTEsNiArMjExLDEyIEBAIHN0YXRpYyBTdHJpbmcgcHJvcGVydHlJZFRvU3RyaW5nKEFuaW1hdGVk
UHJvcGVydHlJRCBwcm9wZXJ0eSkKICAgICAgICAgcmV0dXJuICJvcGFjaXR5IjsKICAgICBjYXNl
IEFuaW1hdGVkUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6CiAgICAgICAgIHJldHVybiAiYmFja2dy
b3VuZENvbG9yIjsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXI6CisjaWYg
RU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICByZXR1cm4gImZpbHRlcnMiOworI2Vsc2UKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKICAgICBjYXNlIEFuaW1hdGVkUHJv
cGVydHlJbnZhbGlkOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC00
NDQsNyArNDUwLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6Om1vdmVPckNvcHlMYXllckFuaW1h
dGlvbihNb3ZlT3JDb3B5IG9wZXJhdGlvbiwgY29uc3QgU3RyaW4KICAgICB9CiB9CiAKLXZvaWQg
R3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9uc0ZvclByb3BlcnR5KE1vdmVPckNv
cHkgb3BlcmF0aW9uLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIFBsYXRmb3JtQ0FMYXll
ciAqZnJvbUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXIgKnRvTGF5ZXIpCit2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6bW92ZU9yQ29weUFuaW1hdGlvbnMoTW92ZU9yQ29weSBvcGVyYXRpb24sIFBsYXRmb3Jt
Q0FMYXllciAqZnJvbUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXIgKnRvTGF5ZXIpCiB7CiAgICAgLy8g
TG9vayBmb3IgcnVubmluZyBhbmltYXRpb25zIGFmZmVjdGluZyB0aGlzIHByb3BlcnR5LgogICAg
IEFuaW1hdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcnVubmluZ0FuaW1hdGlvbnMu
ZW5kKCk7CkBAIC00NTMsNyArNDU5LDEzIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjptb3ZlT3JD
b3B5QW5pbWF0aW9uc0ZvclByb3BlcnR5KE1vdmVPckNvcHkgb3BlcmF0aW9uLCBBbmltCiAgICAg
ICAgIHNpemVfdCBudW1BbmltYXRpb25zID0gcHJvcGVydHlBbmltYXRpb25zLnNpemUoKTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BbmltYXRpb25zOyArK2kpIHsKICAgICAg
ICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIGN1cnJBbmltYXRpb24gPSBwcm9w
ZXJ0eUFuaW1hdGlvbnNbaV07Ci0gICAgICAgICAgICBpZiAoY3VyckFuaW1hdGlvbi5tX3Byb3Bl
cnR5ID09IHByb3BlcnR5KQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoY3VyckFuaW1h
dGlvbi5tX3Byb3BlcnR5ID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0gfHwgY3Vy
ckFuaW1hdGlvbi5tX3Byb3BlcnR5ID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5CisgICAgICAg
ICAgICAgICAgICAgIHx8IGN1cnJBbmltYXRpb24ubV9wcm9wZXJ0eSA9PSBBbmltYXRlZFByb3Bl
cnR5QmFja2dyb3VuZENvbG9yCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICAgICAg
ICAgICAgICB8fCBjdXJyQW5pbWF0aW9uLm1fcHJvcGVydHkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdl
YmtpdEZpbHRlcgorI2VuZGlmCisgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgIG1v
dmVPckNvcHlMYXllckFuaW1hdGlvbihvcGVyYXRpb24sIGFuaW1hdGlvbklkZW50aWZpZXIoY3Vy
ckFuaW1hdGlvbi5tX25hbWUsIGN1cnJBbmltYXRpb24ubV9wcm9wZXJ0eSwgY3VyckFuaW1hdGlv
bi5tX2luZGV4KSwgZnJvbUxheWVyLCB0b0xheWVyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTY0
OCw2ICs2NjAsMTAgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OmFkZEFuaW1hdGlvbihjb25zdCBL
ZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBJbnQKICAgICBib29sIGNyZWF0ZWRB
bmltYXRpb25zID0gZmFsc2U7CiAgICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1h
dGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCiAgICAgICAgIGNyZWF0ZWRBbmltYXRpb25zID0g
Y3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uc0Zyb21LZXlmcmFtZXModmFsdWVMaXN0LCBhbmltLCBh
bmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0LCBib3hTaXplKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCisgICAgZWxzZSBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0
eVdlYmtpdEZpbHRlcikKKyAgICAgICAgY3JlYXRlZEFuaW1hdGlvbnMgPSBjcmVhdGVGaWx0ZXJB
bmltYXRpb25zRnJvbUtleWZyYW1lcyh2YWx1ZUxpc3QsIGFuaW0sIGFuaW1hdGlvbk5hbWUsIHRp
bWVPZmZzZXQpOworI2VuZGlmCiAgICAgZWxzZQogICAgICAgICBjcmVhdGVkQW5pbWF0aW9ucyA9
IGNyZWF0ZUFuaW1hdGlvbkZyb21LZXlmcmFtZXModmFsdWVMaXN0LCBhbmltLCBhbmltYXRpb25O
YW1lLCB0aW1lT2Zmc2V0KTsKIApAQCAtMTI5OSw4ICsxMzE1LDcgQEAgdm9pZCBHcmFwaGljc0xh
eWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHB1cnBv
c2UsIGZsb2EKICAgICAgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyYWxMYXllci0+c3VwZXJsYXll
cigpKTsKICAgICAgICAgICAgIG1fc3RydWN0dXJhbExheWVyLT5zdXBlcmxheWVyKCktPnJlcGxh
Y2VTdWJsYXllcihtX3N0cnVjdHVyYWxMYXllci5nZXQoKSwgbV9sYXllci5nZXQoKSk7CiAKLSAg
ICAgICAgICAgIG1vdmVPckNvcHlBbmltYXRpb25zRm9yUHJvcGVydHkoTW92ZSwgQW5pbWF0ZWRQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwgbV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCksIG1fbGF5ZXIu
Z2V0KCkpOwotICAgICAgICAgICAgbW92ZU9yQ29weUFuaW1hdGlvbnNGb3JQcm9wZXJ0eShNb3Zl
LCBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSwgbV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCksIG1fbGF5
ZXIuZ2V0KCkpOworICAgICAgICAgICAgbW92ZU9yQ29weUFuaW1hdGlvbnMoTW92ZSwgbV9zdHJ1
Y3R1cmFsTGF5ZXIuZ2V0KCksIG1fbGF5ZXIuZ2V0KCkpOwogCiAgICAgICAgICAgICAvLyBSZWxl
YXNlIHRoZSBzdHJ1Y3R1cmFsIGxheWVyLgogICAgICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXIg
PSAwOwpAQCAtMTM4MCw4ICsxMzk1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0
cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHB1cnBvc2UsIGZsb2EKICAgICBt
X2xheWVyLT5zdXBlcmxheWVyKCktPnJlcGxhY2VTdWJsYXllcihtX2xheWVyLmdldCgpLCBtX3N0
cnVjdHVyYWxMYXllci5nZXQoKSk7CiAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPmFwcGVuZFN1Ymxh
eWVyKG1fbGF5ZXIuZ2V0KCkpOwogCi0gICAgbW92ZU9yQ29weUFuaW1hdGlvbnNGb3JQcm9wZXJ0
eShNb3ZlLCBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtLCBtX2xheWVyLmdldCgpLCBt
X3N0cnVjdHVyYWxMYXllci5nZXQoKSk7Ci0gICAgbW92ZU9yQ29weUFuaW1hdGlvbnNGb3JQcm9w
ZXJ0eShNb3ZlLCBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSwgbV9sYXllci5nZXQoKSwgbV9zdHJ1
Y3R1cmFsTGF5ZXIuZ2V0KCkpOworICAgIG1vdmVPckNvcHlBbmltYXRpb25zKE1vdmUsICBtX2xh
eWVyLmdldCgpLCBtX3N0cnVjdHVyYWxMYXllci5nZXQoKSk7CiAgICAgCiAgICAgdXBkYXRlU3Vi
bGF5ZXJMaXN0KCk7CiAgICAgdXBkYXRlT3BhY2l0eU9uTGF5ZXIoKTsKQEAgLTE3NDQsNyArMTc1
OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c05lZWRzRGlzcGxheSgp
CiAKIGJvb2wgR3JhcGhpY3NMYXllckNBOjpjcmVhdGVBbmltYXRpb25Gcm9tS2V5ZnJhbWVzKGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0
aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQogewot
ICAgIEFTU0VSVCh2YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0
VHJhbnNmb3JtKTsKKyAgICBBU1NFUlQodmFsdWVMaXN0LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSAmJiB2YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBBbmltYXRl
ZFByb3BlcnR5V2Via2l0RmlsdGVyKTsKICAgICAKICAgICBib29sIGlzS2V5ZnJhbWUgPSB2YWx1
ZUxpc3Quc2l6ZSgpID4gMjsKICAgICBib29sIHZhbHVlc09LOwpAQCAtMTc1NSwxMCArMTc2OSwx
MCBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyhj
b25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdQogICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiBjYUFuaW1hdGlvbjsKICAgICAKICAgICBpZiAoaXNLZXlmcmFtZSkgewotICAgICAgICBj
YUFuaW1hdGlvbiA9IGNyZWF0ZUtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgdmFsdWVMaXN0
LnByb3BlcnR5KCksIGFkZGl0aXZlKTsKKyAgICAgICAgY2FBbmltYXRpb24gPSBjcmVhdGVLZXlm
cmFtZUFuaW1hdGlvbihhbmltYXRpb24sIHByb3BlcnR5SWRUb1N0cmluZyh2YWx1ZUxpc3QucHJv
cGVydHkoKSksIGFkZGl0aXZlKTsKICAgICAgICAgdmFsdWVzT0sgPSBzZXRBbmltYXRpb25LZXlm
cmFtZXModmFsdWVMaXN0LCBhbmltYXRpb24sIGNhQW5pbWF0aW9uLmdldCgpKTsKICAgICB9IGVs
c2UgewotICAgICAgICBjYUFuaW1hdGlvbiA9IGNyZWF0ZUJhc2ljQW5pbWF0aW9uKGFuaW1hdGlv
biwgdmFsdWVMaXN0LnByb3BlcnR5KCksIGFkZGl0aXZlKTsKKyAgICAgICAgY2FBbmltYXRpb24g
PSBjcmVhdGVCYXNpY0FuaW1hdGlvbihhbmltYXRpb24sIHByb3BlcnR5SWRUb1N0cmluZyh2YWx1
ZUxpc3QucHJvcGVydHkoKSksIGFkZGl0aXZlKTsKICAgICAgICAgdmFsdWVzT0sgPSBzZXRBbmlt
YXRpb25FbmRwb2ludHModmFsdWVMaXN0LCBhbmltYXRpb24sIGNhQW5pbWF0aW9uLmdldCgpKTsK
ICAgICB9CiAgICAgCkBAIC0xNzc5LDEwICsxNzkzLDEwIEBAIGJvb2wgR3JhcGhpY3NMYXllckNB
OjphcHBlbmRUb1VuY29tbWl0dGVkQW5pbWF0aW9ucyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsCiAgICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGNhQW5pbWF0aW9uOwogICAgIGJv
b2wgdmFsaWRNYXRyaWNlcyA9IHRydWU7CiAgICAgaWYgKGlzS2V5ZnJhbWUpIHsKLSAgICAgICAg
Y2FBbmltYXRpb24gPSBjcmVhdGVLZXlmcmFtZUFuaW1hdGlvbihhbmltYXRpb24sIHZhbHVlTGlz
dC5wcm9wZXJ0eSgpLCBhZGRpdGl2ZSk7CisgICAgICAgIGNhQW5pbWF0aW9uID0gY3JlYXRlS2V5
ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCBwcm9wZXJ0eUlkVG9TdHJpbmcodmFsdWVMaXN0LnBy
b3BlcnR5KCkpLCBhZGRpdGl2ZSk7CiAgICAgICAgIHZhbGlkTWF0cmljZXMgPSBzZXRUcmFuc2Zv
cm1BbmltYXRpb25LZXlmcmFtZXModmFsdWVMaXN0LCBhbmltYXRpb24sIGNhQW5pbWF0aW9uLmdl
dCgpLCBhbmltYXRpb25JbmRleCwgdHJhbnNmb3JtT3AsIGlzTWF0cml4QW5pbWF0aW9uLCBib3hT
aXplKTsKICAgICB9IGVsc2UgewotICAgICAgICBjYUFuaW1hdGlvbiA9IGNyZWF0ZUJhc2ljQW5p
bWF0aW9uKGFuaW1hdGlvbiwgdmFsdWVMaXN0LnByb3BlcnR5KCksIGFkZGl0aXZlKTsKKyAgICAg
ICAgY2FBbmltYXRpb24gPSBjcmVhdGVCYXNpY0FuaW1hdGlvbihhbmltYXRpb24sIHByb3BlcnR5
SWRUb1N0cmluZyh2YWx1ZUxpc3QucHJvcGVydHkoKSksIGFkZGl0aXZlKTsKICAgICAgICAgdmFs
aWRNYXRyaWNlcyA9IHNldFRyYW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyh2YWx1ZUxpc3QsIGFu
aW1hdGlvbiwgY2FBbmltYXRpb24uZ2V0KCksIGFuaW1hdGlvbkluZGV4LCB0cmFuc2Zvcm1PcCwg
aXNNYXRyaXhBbmltYXRpb24sIGJveFNpemUpOwogICAgIH0KICAgICAKQEAgLTE4NDUsMTYgKzE4
NTksODAgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbnNG
cm9tS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWUKICAgICByZXR1cm4gdmFsaWRNYXRyaWNl
czsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBHcmFwaGljc0xheWVyQ0E6
OmNyZWF0ZUJhc2ljQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgQW5pbWF0ZWRQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBib29sIGFkZGl0aXZlKQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
K2Jvb2wgR3JhcGhpY3NMYXllckNBOjphcHBlbmRUb1VuY29tbWl0dGVkQW5pbWF0aW9ucyhjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zKiBv
cGVyYXRpb25zLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lLCBpbnQgYW5pbWF0aW9uSW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0KQogewotICAg
IFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBiYXNpY0FuaW0gPSBQbGF0Zm9ybUNBQW5pbWF0
aW9uOjpjcmVhdGUoUGxhdGZvcm1DQUFuaW1hdGlvbjo6QmFzaWMsIHByb3BlcnR5SWRUb1N0cmlu
Zyhwcm9wZXJ0eSkpOworICAgIGJvb2wgYWRkaXRpdmUgPSBhbmltYXRpb25JbmRleCA+IDA7Cisg
ICAgYm9vbCBpc0tleWZyYW1lID0gdmFsdWVMaXN0LnNpemUoKSA+IDI7CisgICAgCisgICAgRmls
dGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZpbHRlck9wID0gb3BlcmF0aW9ucy0+b3BlcmF0
aW9ucygpLmF0KGFuaW1hdGlvbkluZGV4KS0+Z2V0T3BlcmF0aW9uVHlwZSgpOworICAgIGludCBu
dW1BbmltYXRlZFByb3BlcnRpZXMgPSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpudW1BbmltYXRlZEZp
bHRlclByb3BlcnRpZXMoZmlsdGVyT3ApOworICAgIAorICAgIGZvciAoaW50IHByb3BlcnR5SW5k
ZXggPSAwOyBwcm9wZXJ0eUluZGV4IDwgbnVtQW5pbWF0ZWRQcm9wZXJ0aWVzOyArK3Byb3BlcnR5
SW5kZXgpIHsKKyAgICAgICAgYm9vbCB2YWx1ZXNPSzsKKyAgICAgICAgUmVmUHRyPFBsYXRmb3Jt
Q0FBbmltYXRpb24+IGNhQW5pbWF0aW9uOworICAgICAgICBTdHJpbmcga2V5UGF0aCA9IFN0cmlu
Zzo6Zm9ybWF0KCJmaWx0ZXJzLmZpbHRlcl8lZC4lcyIsIGFuaW1hdGlvbkluZGV4LCBQbGF0Zm9y
bUNBQW5pbWF0aW9uOjphbmltYXRlZEZpbHRlclByb3BlcnR5TmFtZShmaWx0ZXJPcCwgcHJvcGVy
dHlJbmRleCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzS2V5ZnJhbWUpIHsKKyAgICAgICAg
ICAgIGNhQW5pbWF0aW9uID0gY3JlYXRlS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCBrZXlQ
YXRoLCBhZGRpdGl2ZSk7CisgICAgICAgICAgICB2YWx1ZXNPSyA9IHNldEZpbHRlckFuaW1hdGlv
bktleWZyYW1lcyh2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgY2FBbmltYXRpb24uZ2V0KCksIGFuaW1h
dGlvbkluZGV4LCBwcm9wZXJ0eUluZGV4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGNhQW5pbWF0aW9uID0gY3JlYXRlQmFzaWNBbmltYXRpb24oYW5pbWF0aW9uLCBrZXlQYXRoLCBh
ZGRpdGl2ZSk7CisgICAgICAgICAgICB2YWx1ZXNPSyA9IHNldEZpbHRlckFuaW1hdGlvbkVuZHBv
aW50cyh2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgY2FBbmltYXRpb24uZ2V0KCksIGFuaW1hdGlvbklu
ZGV4LCBwcm9wZXJ0eUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJU
KHZhbHVlc09LKTsKKworICAgICAgICBtX3VuY29taXR0ZWRBbmltYXRpb25zLmFwcGVuZChMYXll
clByb3BlcnR5QW5pbWF0aW9uKGNhQW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB2YWx1ZUxpc3Qu
cHJvcGVydHkoKSwgYW5pbWF0aW9uSW5kZXgsIHRpbWVPZmZzZXQpKTsKKyAgICB9CisKKworLy8g
Z2V0IGxpc3Qgb2YgcHJvcGVydGllcyB0byBhbmltYXRlIGZvciB0aGlzIG9wZXJhdGlvbiAoZnJv
bSBQbGF0Zm9ybUNBTGF5ZXIpCisvLyBmb3IgZWFjaCBwcm9wZXJ0eToKKy8vICAgICAgY3JlYXRl
IGtmIG9yIGJhc2ljIGFuaW1hdGlvbgorLy8gICAgICAgICAgYW5pbWF0aW9uIG5hbWUgaXMgcHJv
cGVydHlJZFRvU3RyaW5nKHZhbHVlTGlzdC5wcm9wZXJ0eSgpKSArICIuIiArICJmaWx0ZXJfIiAr
IGFuaW1hdGlvbkluZGV4ICsgcHJvcGVydHkKKy8vICAgICAgICAgIG1heWJlIGdldCB0aGlzIGZy
b20gUGxhdGZvcm1DQUxheWVyCisvLyAgICAgIHNldEZpbHRlckFuaW1hdGlvbktleWZyYW1lcyBv
ciBzZXRGaWx0ZXJBbmltYXRpb25FbmRwb2ludHMKKy8vICAgICAgICAgIG5lZWQgdmFsdWVMaXN0
IGZvciB2YWx1ZXMsIG9wZXJhdGlvbnMgYW5kIGFuaW1hdGlvbkluZGV4IChvciBvcGVyYXRpb24p
LCBwcm9wZXJ0eSBpbmRleAorLy8gICAgICAgICAgbWF5YmUgbmVlZCB0byBhc2sgUGxhdGZvcm1D
QUxheWVyIHRvIHJldHVybiB2YWx1ZXMgZ2l2ZW4gYW4gb3BlcmF0aW9uIGFuZCBpbmRleD8KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlRmlsdGVy
QW5pbWF0aW9uc0Zyb21LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlz
dCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgQVNTRVJUKHZhbHVlTGlzdC5wcm9wZXJ0eSgp
ID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpOworCisgICAgaW50IGxpc3RJbmRleCA9
IHZhbGlkYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZUxpc3QpOworICAgIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSAobGlzdEluZGV4ID49IDApID8gc3RhdGljX2Nhc3Q8Y29u
c3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqPih2YWx1ZUxpc3QuYXQobGlzdEluZGV4KSktPnZhbHVl
KCkgOiAwOworICAgIGludCBudW1BbmltYXRpb25zID0gb3BlcmF0aW9ucy0+c2l6ZSgpOworCisg
ICAgLy8gRklYTUU6IFdlIGNhbid0IGN1cnJlbnRseSBoYXJkd2FyZSBhbmltYXRlIHNoYWRvd3Mu
IFRoZXJlIGlzIGFuIG9wZW4gcXVlc3Rpb24gYWJvdXQgcmVtb3Zpbmcgc2hhZG93cyBmcm9tIGZp
bHRlcnMgCisgICAgLy8gZW50aXJlbHksIGluIHdoaWNoIGNhc2UgdGhpcyBpc3N1ZSBpcyBtb290
LgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQW5pbWF0aW9uczsgKytpKSB7CisgICAgICAg
IGlmIChvcGVyYXRpb25zLT5hdChpKS0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJh
dGlvbjo6RFJPUF9TSEFET1cpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgZm9yIChpbnQgYW5pbWF0aW9uSW5kZXggPSAwOyBhbmltYXRpb25JbmRleCA8IG51bUFuaW1h
dGlvbnM7ICsrYW5pbWF0aW9uSW5kZXgpIHsKKyAgICAgICAgaWYgKCFhcHBlbmRUb1VuY29tbWl0
dGVkQW5pbWF0aW9ucyh2YWx1ZUxpc3QsIG9wZXJhdGlvbnMsIGFuaW1hdGlvbiwgYW5pbWF0aW9u
TmFtZSwgYW5pbWF0aW9uSW5kZXgsIHRpbWVPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK1Bhc3NSZWZQdHI8
UGxhdGZvcm1DQUFuaW1hdGlvbj4gR3JhcGhpY3NMYXllckNBOjpjcmVhdGVCYXNpY0FuaW1hdGlv
bihjb25zdCBBbmltYXRpb24qIGFuaW0sIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhZGRp
dGl2ZSkKK3sKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYmFzaWNBbmltID0gUGxh
dGZvcm1DQUFuaW1hdGlvbjo6Y3JlYXRlKFBsYXRmb3JtQ0FBbmltYXRpb246OkJhc2ljLCBrZXlQ
YXRoKTsKICAgICBzZXR1cEFuaW1hdGlvbihiYXNpY0FuaW0uZ2V0KCksIGFuaW0sIGFkZGl0aXZl
KTsKICAgICByZXR1cm4gYmFzaWNBbmltOwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmlt
YXRpb24+R3JhcGhpY3NMYXllckNBOjpjcmVhdGVLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmlt
YXRpb24qIGFuaW0sIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgYm9vbCBhZGRpdGl2ZSkK
K1Bhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj5HcmFwaGljc0xheWVyQ0E6OmNyZWF0ZUtl
eWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoLCBib29sIGFkZGl0aXZlKQogewotICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBr
ZXlmcmFtZUFuaW0gPSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpjcmVhdGUoUGxhdGZvcm1DQUFuaW1h
dGlvbjo6S2V5ZnJhbWUsIHByb3BlcnR5SWRUb1N0cmluZyhwcm9wZXJ0eSkpOworICAgIFJlZlB0
cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBQbGF0Zm9ybUNBQW5pbWF0aW9u
OjpjcmVhdGUoUGxhdGZvcm1DQUFuaW1hdGlvbjo6S2V5ZnJhbWUsIGtleVBhdGgpOwogICAgIHNl
dHVwQW5pbWF0aW9uKGtleWZyYW1lQW5pbS5nZXQoKSwgYW5pbSwgYWRkaXRpdmUpOwogICAgIHJl
dHVybiBrZXlmcmFtZUFuaW07CiB9CkBAIC0yMDgxLDYgKzIxNTksNTQgQEAgYm9vbCBHcmFwaGlj
c0xheWVyQ0E6OnNldFRyYW5zZm9ybUFuaW1hdGlvbktleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZh
bHVlTGlzdCYgdmEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKK2Jvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRGaWx0ZXJBbmltYXRpb25FbmRwb2ludHMoY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRp
b24sIFBsYXRmb3JtQ0FBbmltYXRpb24qIGJhc2ljQW5pbSwgaW50IGZ1bmN0aW9uSW5kZXgsIGlu
dCBwcm9wZXJ0eUluZGV4KQoreworICAgIEFTU0VSVCh2YWx1ZUxpc3Quc2l6ZSgpID09IDIpOwor
ICAgIAorICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBmcm9tVmFsdWUgPSBzdGF0aWNf
Y2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSo+KHZhbHVlTGlzdC5hdCgwKSk7CisgICAg
Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqIHRvVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBG
aWx0ZXJBbmltYXRpb25WYWx1ZSo+KHZhbHVlTGlzdC5hdCgxKSk7CisgICAgCisgICAgY29uc3Qg
RmlsdGVyT3BlcmF0aW9uKiBmcm9tT3BlcmF0aW9uID0gZnJvbVZhbHVlLT52YWx1ZSgpLT5vcGVy
YXRpb25zKClbZnVuY3Rpb25JbmRleF0uZ2V0KCk7CisgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9u
KiB0b09wZXJhdGlvbiA9IHRvVmFsdWUtPnZhbHVlKCktPm9wZXJhdGlvbnMoKVtmdW5jdGlvbklu
ZGV4XS5nZXQoKTsKKyAgICAKKyAgICBiYXNpY0FuaW0tPnNldEZyb21WYWx1ZShmcm9tT3BlcmF0
aW9uLCBwcm9wZXJ0eUluZGV4KTsKKyAgICBiYXNpY0FuaW0tPnNldFRvVmFsdWUodG9PcGVyYXRp
b24sIHByb3BlcnR5SW5kZXgpOworICAgIAorICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNlZCBm
b3IgMi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4gdGhl
IHN0YXJ0IGZvciBhIHRpbWluZyBmdW5jdGlvbi4KKyAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiog
dGltaW5nRnVuY3Rpb24gPSB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKHZhbHVlTGlz
dC5hdCgwKSwgYW5pbWF0aW9uKTsKKyAgICBiYXNpY0FuaW0tPnNldFRpbWluZ0Z1bmN0aW9uKHRp
bWluZ0Z1bmN0aW9uKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzTGF5
ZXJDQTo6c2V0RmlsdGVyQW5pbWF0aW9uS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0
JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBQbGF0Zm9ybUNBQW5pbWF0
aW9uKiBrZXlmcmFtZUFuaW0sIGludCBmdW5jdGlvbkluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkK
K3sKKyAgICBWZWN0b3I8ZmxvYXQ+IGtleVRpbWVzOworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVy
T3BlcmF0aW9uPiA+IHZhbHVlczsKKyAgICBWZWN0b3I8Y29uc3QgVGltaW5nRnVuY3Rpb24qPiB0
aW1pbmdGdW5jdGlvbnM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVMaXN0
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBjdXJW
YWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4odmFsdWVMaXN0
LmF0KGkpKTsKKyAgICAgICAga2V5VGltZXMuYXBwZW5kKGN1clZhbHVlLT5rZXlUaW1lKCkpOwor
CisgICAgICAgIHZhbHVlcy5hcHBlbmQoY3VyVmFsdWUtPnZhbHVlKCktPm9wZXJhdGlvbnMoKVtm
dW5jdGlvbkluZGV4XSk7CisKKyAgICAgICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1
bmN0aW9uID0gdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShjdXJWYWx1ZSwgYW5pbWF0
aW9uKTsKKyAgICAgICAgdGltaW5nRnVuY3Rpb25zLmFwcGVuZCh0aW1pbmdGdW5jdGlvbik7Cisg
ICAgfQorICAgIAorICAgIC8vIFdlIHRvc3MgdGhlIGxhc3QgdGZBcnJheSB2YWx1ZSBiZWNhdXNl
IGl0IGhhcyB0byBvbmUgc2hvcnRlciB0aGFuIHRoZSBvdGhlcnMuCisgICAgdGltaW5nRnVuY3Rp
b25zLnJlbW92ZUxhc3QoKTsKKworICAgIGtleWZyYW1lQW5pbS0+c2V0S2V5VGltZXMoa2V5VGlt
ZXMpOworICAgIGtleWZyYW1lQW5pbS0+c2V0VmFsdWVzKHZhbHVlcywgcHJvcGVydHlJbmRleCk7
CisgICAga2V5ZnJhbWVBbmltLT5zZXRUaW1pbmdGdW5jdGlvbnModGltaW5nRnVuY3Rpb25zKTsK
KworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpz
dXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKIHsKICAgICBkb3VibGUgdCA9IFBsYXRmb3Jt
Q0FMYXllcjo6Y3VycmVudFRpbWVUb01lZGlhVGltZSh0aW1lID8gdGltZSA6IGN1cnJlbnRUaW1l
KCkpOwpAQCAtMjI2OSw5ICsyMzk1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnN3YXBGcm9t
T3JUb1RpbGVkTGF5ZXIoYm9vbCB1c2VUaWxlZExheWVyLCBmbG9hdCBwYWdlU2NhbGUKICNlbmRp
ZgogCiAgICAgLy8gbW92ZSBvdmVyIGFuaW1hdGlvbnMKLSAgICBtb3ZlT3JDb3B5QW5pbWF0aW9u
c0ZvclByb3BlcnR5KE1vdmUsIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0sIG9sZExh
eWVyLmdldCgpLCBtX2xheWVyLmdldCgpKTsKLSAgICBtb3ZlT3JDb3B5QW5pbWF0aW9uc0ZvclBy
b3BlcnR5KE1vdmUsIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5LCBvbGRMYXllci5nZXQoKSwgbV9s
YXllci5nZXQoKSk7Ci0gICAgbW92ZU9yQ29weUFuaW1hdGlvbnNGb3JQcm9wZXJ0eShNb3ZlLCBB
bmltYXRlZFByb3BlcnR5QmFja2dyb3VuZENvbG9yLCBvbGRMYXllci5nZXQoKSwgbV9sYXllci5n
ZXQoKSk7CisgICAgbW92ZU9yQ29weUFuaW1hdGlvbnMoTW92ZSwgb2xkTGF5ZXIuZ2V0KCksIG1f
bGF5ZXIuZ2V0KCkpOwogICAgIAogICAgIC8vIG5lZWQgdG8gdGVsbCBuZXcgbGF5ZXIgdG8gZHJh
dyBpdHNlbGYKICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKQEAgLTI0OTEsOCArMjYxNSw3IEBAIFBh
c3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBHcmFwaGljc0xheWVyQ0E6OmNsb25lTGF5ZXIoUGxh
dGZvcm1DQUxheWVyICpsYXllciwKIAogICAgIGlmIChjbG9uZUxldmVsID09IEludGVybWVkaWF0
ZUNsb25lTGV2ZWwpIHsKICAgICAgICAgbmV3TGF5ZXItPnNldE9wYWNpdHkobGF5ZXItPm9wYWNp
dHkoKSk7Ci0gICAgICAgIG1vdmVPckNvcHlBbmltYXRpb25zRm9yUHJvcGVydHkoQ29weSwgQW5p
bWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwgbGF5ZXIsIG5ld0xheWVyLmdldCgpKTsKLSAg
ICAgICAgbW92ZU9yQ29weUFuaW1hdGlvbnNGb3JQcm9wZXJ0eShDb3B5LCBBbmltYXRlZFByb3Bl
cnR5T3BhY2l0eSwgbGF5ZXIsIG5ld0xheWVyLmdldCgpKTsKKyAgICAgICAgbW92ZU9yQ29weUFu
aW1hdGlvbnMoQ29weSwgbGF5ZXIsIG5ld0xheWVyLmdldCgpKTsKICAgICB9CiAgICAgCiAgICAg
aWYgKHNob3dEZWJ1Z0JvcmRlcnMoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAppbmRleCA4MGIyMzc2NDEwZmJjZmY2
NWU5MzE3MzA0ZmYwZjdmYmM5MWE4ZjVhLi5mNjE2MDcxNmFiZGJiYWNkNWQwZDkxMzFiNTZkODU1
YTY5ZjYzNTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuaApAQCAtMTc5LDEwICsxNzksMTMgQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgY3JlYXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91
YmxlIHRpbWVPZmZzZXQpOwogICAgIGJvb2wgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uc0Zyb21L
ZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRpb24qLCBjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBJbnRTaXpl
JiBib3hTaXplKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgYm9vbCBjcmVhdGVGaWx0
ZXJBbmltYXRpb25zRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0
IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZz
ZXQpOworI2VuZGlmCiAKICAgICAvLyBSZXR1cm4gYXV0b3JlbGVhc2VkIGFuaW1hdGlvbiAodXNl
IFJldGFpblB0cj8pCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBjcmVhdGVC
YXNpY0FuaW1hdGlvbihjb25zdCBBbmltYXRpb24qLCBBbmltYXRlZFByb3BlcnR5SUQsIGJvb2wg
YWRkaXRpdmUpOwotICAgIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gY3JlYXRlS2V5
ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiwgQW5pbWF0ZWRQcm9wZXJ0eUlELCBib29s
IGFkZGl0aXZlKTsKKyAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGNyZWF0ZUJh
c2ljQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9v
bCBhZGRpdGl2ZSk7CisgICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBjcmVhdGVL
ZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmLCBib29sIGFk
ZGl0aXZlKTsKICAgICB2b2lkIHNldHVwQW5pbWF0aW9uKFBsYXRmb3JtQ0FBbmltYXRpb24qLCBj
b25zdCBBbmltYXRpb24qLCBib29sIGFkZGl0aXZlKTsKICAgICAKICAgICBjb25zdCBUaW1pbmdG
dW5jdGlvbiogdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShjb25zdCBBbmltYXRpb25W
YWx1ZSosIGNvbnN0IEFuaW1hdGlvbiopOwpAQCAtMTkzLDYgKzE5NiwxMSBAQCBwcml2YXRlOgog
ICAgIGJvb2wgc2V0VHJhbnNmb3JtQW5pbWF0aW9uRW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiwgY29uc3QgQW5pbWF0aW9uKiwgUGxhdGZvcm1DQUFuaW1hdGlvbiosIGludCBmdW5j
dGlvbkluZGV4LCBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIGJvb2wgaXNNYXRy
aXhBbmltYXRpb24sIGNvbnN0IEludFNpemUmIGJveFNpemUpOwogICAgIGJvb2wgc2V0VHJhbnNm
b3JtQW5pbWF0aW9uS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5p
bWF0aW9uKiwgUGxhdGZvcm1DQUFuaW1hdGlvbiosIGludCBmdW5jdGlvbkluZGV4LCBUcmFuc2Zv
cm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIGJvb2wgaXNNYXRyaXhBbmltYXRpb24sIGNvbnN0
IEludFNpemUmIGJveFNpemUpOwogICAgIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBi
b29sIHNldEZpbHRlckFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYs
IGNvbnN0IEFuaW1hdGlvbiosIFBsYXRmb3JtQ0FBbmltYXRpb24qLCBpbnQgZnVuY3Rpb25JbmRl
eCwgaW50IHByb3BlcnR5SW5kZXgpOworICAgIGJvb2wgc2V0RmlsdGVyQW5pbWF0aW9uS2V5ZnJh
bWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5pbWF0aW9uKiwgUGxhdGZvcm1D
QUFuaW1hdGlvbiosIGludCBmdW5jdGlvbkluZGV4LCBpbnQgcHJvcGVydHlJbmRleCk7CisjZW5k
aWYKKwogICAgIGJvb2wgYW5pbWF0aW9uSXNSdW5uaW5nKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9u
TmFtZSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3J1bm5pbmdBbmltYXRpb25zLmZp
bmQoYW5pbWF0aW9uTmFtZSkgIT0gbV9ydW5uaW5nQW5pbWF0aW9ucy5lbmQoKTsKQEAgLTMyMiw5
ICszMzAsMTIgQEAgcHJpdmF0ZToKIAogICAgIGVudW0gTW92ZU9yQ29weSB7IE1vdmUsIENvcHkg
fTsKICAgICBzdGF0aWMgdm9pZCBtb3ZlT3JDb3B5TGF5ZXJBbmltYXRpb24oTW92ZU9yQ29weSwg
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25JZGVudGlmaWVyLCBQbGF0Zm9ybUNBTGF5ZXIgKmZyb21M
YXllciwgUGxhdGZvcm1DQUxheWVyICp0b0xheWVyKTsKLSAgICB2b2lkIG1vdmVPckNvcHlBbmlt
YXRpb25zRm9yUHJvcGVydHkoTW92ZU9yQ29weSwgQW5pbWF0ZWRQcm9wZXJ0eUlELCBQbGF0Zm9y
bUNBTGF5ZXIgKiBmcm9tTGF5ZXIsIFBsYXRmb3JtQ0FMYXllciAqIHRvTGF5ZXIpOworICAgIHZv
aWQgbW92ZU9yQ29weUFuaW1hdGlvbnMoTW92ZU9yQ29weSwgUGxhdGZvcm1DQUxheWVyICogZnJv
bUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXIgKiB0b0xheWVyKTsKICAgICAKICAgICBib29sIGFwcGVu
ZFRvVW5jb21taXR0ZWRBbmltYXRpb25zKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9ucyosIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgYW5p
bWF0aW9uTmFtZSwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgaW50IGFuaW1hdGlvbkluZGV4LCBk
b3VibGUgdGltZU9mZnNldCwgYm9vbCBpc01hdHJpeEFuaW1hdGlvbik7CisjaWYgRU5BQkxFKENT
U19GSUxURVJTKQorICAgIGJvb2wgYXBwZW5kVG9VbmNvbW1pdHRlZEFuaW1hdGlvbnMoY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zKiwgY29uc3QgQW5pbWF0
aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBpbnQgYW5pbWF0aW9uSW5kZXgsIGRv
dWJsZSB0aW1lT2Zmc2V0KTsKKyNlbmRpZgogICAgIAogICAgIGVudW0gTGF5ZXJDaGFuZ2Ugewog
ICAgICAgICBOb0NoYW5nZSA9IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKaW5kZXggYjJkMzI1OTU2YmFl
ZDM5OGRiZTAzYzU5NzkzMTA4ZmMwOTk1Y2QxMC4uODMyYzk5NGZhMTY5ZTY3OWUzYmQxZmIwOWQz
OGQ2NWE0MTc3MDRhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaApAQCAtMjksNiArMjksNyBAQAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5j
bHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCiAjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgpAQCAtMTA5LDEyICsxMTAsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RnJvbVZhbHVlKGNv
bnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgdm9pZCBzZXRGcm9tVmFs
dWUoY29uc3QgRmxvYXRQb2ludDNEJik7CiAgICAgdm9pZCBzZXRGcm9tVmFsdWUoY29uc3QgV2Vi
Q29yZTo6Q29sb3ImKTsKKyAgICB2b2lkIHNldEZyb21WYWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRp
b24qLCBpbnQgcHJvcGVydHlJbmRleCk7CiAgICAgdm9pZCBjb3B5RnJvbVZhbHVlRnJvbShjb25z
dCBQbGF0Zm9ybUNBQW5pbWF0aW9uKik7CiAKICAgICB2b2lkIHNldFRvVmFsdWUoZmxvYXQpOwog
ICAgIHZvaWQgc2V0VG9WYWx1ZShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
OwogICAgIHZvaWQgc2V0VG9WYWx1ZShjb25zdCBGbG9hdFBvaW50M0QmKTsKICAgICB2b2lkIHNl
dFRvVmFsdWUoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKKyAgICB2b2lkIHNldFRvVmFsdWUoY29u
c3QgRmlsdGVyT3BlcmF0aW9uKiwgaW50IHByb3BlcnR5SW5kZXgpOwogICAgIHZvaWQgY29weVRv
VmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24qKTsKIAogICAgIC8vIEtleWZyYW1l
LWFuaW1hdGlvbiBwcm9wZXJ0aWVzLgpAQCAtMTIyLDYgKzEyNSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg+
Jik7CiAgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQzRD4mKTsKICAg
ICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29sb3I+Jik7CisgICAgdm9p
ZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mLCBpbnQg
cHJvcGVydHlJbmRleCk7CiAgICAgdm9pZCBjb3B5VmFsdWVzRnJvbShjb25zdCBQbGF0Zm9ybUNB
QW5pbWF0aW9uKik7CiAKICAgICB2b2lkIHNldEtleVRpbWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4m
KTsKQEAgLTEzMCw2ICsxMzQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGltaW5nRnVuY3Rp
b25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+Jik7CiAgICAgdm9pZCBjb3B5
VGltaW5nRnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uKik7CiAgICAgCisj
aWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHN0YXRpYyBpbnQgbnVtQW5pbWF0ZWRGaWx0ZXJQ
cm9wZXJ0aWVzKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSk7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGFuaW1hdGVkRmlsdGVyUHJvcGVydHlOYW1lKEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSwgaW50IHByb3BlcnR5SW5kZXgpOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAg
ICBQbGF0Zm9ybUNBQW5pbWF0aW9uKEFuaW1hdGlvblR5cGUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCk7CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbihQbGF0Zm9ybUFuaW1hdGlvblJlZik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1D
QUFuaW1hdGlvbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tCmluZGV4IGYxNDIzMjU5MDY5YmU5Y2IyMDg3ZTM3
MDAzMDM5ZjdjNDQ3YmI2OGYuLjA2YTg5NmQ1MmM2NGI0NjM3OWVlZDg5YTgwNDkyZGJmZTQ3ZmUw
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9Q
bGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tCkBAIC0zOTYsNiArMzk2LDk2
IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiB2YWx1ZSkKICAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5p
bWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6YXJyYXldOwogfQogCitzdGF0aWMgZG91YmxlIHNl
cGlhRnVsbENvbnN0YW50c1szXVszXSA9IHsKKyAgICB7IDAuMzkzLCAwLjc2OSwgMC4xODkgfSwK
KyAgICB7IDAuMzQ5LCAwLjY4NiwgMC4xNjggfSwKKyAgICB7IDAuMjcyLCAwLjUzNCwgMC4xMzEg
fQorfTsKKworc3RhdGljIGRvdWJsZSBzZXBpYU5vbmVDb25zdGFudHNbM11bM10gPSB7CisgICAg
eyAxLCAwLCAwIH0sCisgICAgeyAwLCAxLCAwIH0sCisgICAgeyAwLCAwLCAxIH0KK307CisKK3N0
YXRpYyBkb3VibGUgaW52ZXJ0Q29uc3RhbnRzWzNdWzNdID0geworICAgIHsgMSwgMCwgMCB9LAor
ICAgIHsgMCwgMSwgMCB9LAorICAgIHsgMCwgMCwgMSB9Cit9OworCitzdGF0aWMgUmV0YWluUHRy
PGlkPiBmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJh
dGlvbiwgaW50IHByb3BlcnR5SW5kZXgpCit7CisgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlIHR5cGUgPSBvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKTsKKyAgICBSZXRhaW5Q
dHI8aWQ+IHZhbHVlOworICAgIAorICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6
CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKKyAgICAgICAgY29uc3Qg
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgZG91
YmxlIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gRmlsdGVyT3Bl
cmF0aW9uOjpIVUVfUk9UQVRFKQorICAgICAgICAgICAgYW1vdW50ID0gZGVnMnJhZChhbW91bnQp
OworICAgICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91
bnRdIHJldGFpbl0pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNFUElBOiB7CisgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbio+KG9wZXJhdGlvbik7CisgICAgICAgIGRvdWJsZSB0ID0gb3AtPmFtb3VudCgpOworICAg
ICAgICAKKyAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoK
KyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOldlYkNvcmU6OmJsZW5kKHNl
cGlhTm9uZUNvbnN0YW50c1twcm9wZXJ0eUluZGV4XVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBd
W3Byb3BlcnR5SW5kZXhdLCB0KV0sCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbcHJvcGVydHlJbmRleF1bMV0s
IHNlcGlhRnVsbENvbnN0YW50c1sxXVtwcm9wZXJ0eUluZGV4XSwgdCldLAorICAgICAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3Rh
bnRzW3Byb3BlcnR5SW5kZXhdWzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bcHJvcGVydHlJbmRl
eF0sIHQpXSwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjBdLAorICAg
ICAgICAgICAgbmlsXSByZXRhaW5dKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKKyAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgaWYgKHBy
b3BlcnR5SW5kZXggPCAzKSB7CisgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IDEgLSBv
cC0+YW1vdW50KCkgKiAyOworICAgICAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TQXJyYXkgYXJy
YXlXaXRoT2JqZWN0czoKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZTppbnZlcnRDb25zdGFudHNbcHJvcGVydHlJbmRleF1bMF0gKiBtdWx0aXBsaWVyXSwKKyAgICAg
ICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTppbnZlcnRDb25zdGFudHNbcHJv
cGVydHlJbmRleF1bMV0gKiBtdWx0aXBsaWVyXSwKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aERvdWJsZTppbnZlcnRDb25zdGFudHNbcHJvcGVydHlJbmRleF1bMl0gKiBtdWx0
aXBsaWVyXSwKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowXSwK
KyAgICAgICAgICAgICAgICBuaWxdIHJldGFpbl0pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdmFsdWUuYWRvcHROUyhbW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoKKyAgICAgICAg
ICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpvcC0+YW1vdW50KCldLAorICAgICAg
ICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOm9wLT5hbW91bnQoKV0sCisgICAg
ICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6b3AtPmFtb3VudCgpXSwKKyAg
ICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowXSwKKyAgICAgICAgICAg
ICAgICBuaWxdIHJldGFpbl0pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6Q09OVFJBU1Q6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKKyAg
ICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSBz
dGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4o
b3BlcmF0aW9uKTsKKyAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TTnVtYmVyIG51bWJlcldpdGhE
b3VibGU6b3AtPmFtb3VudCgpXSByZXRhaW5dKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CisgICAgICAgIGNvbnN0IEJsdXJGaWx0ZXJP
cGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbio+KG9w
ZXJhdGlvbik7CisgICAgICAgIHZhbHVlLmFkb3B0TlMoW1tOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOm9wLT5zdGREZXZpYXRpb24oKS5jYWxjRmxvYXRWYWx1ZSgwKV0gcmV0YWluXSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIHZhbHVlOworfQorCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldEZyb21WYWx1
ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IHByb3BlcnR5SW5kZXgpCit7
CisgICAgUmV0YWluUHRyPGlkPiB2YWx1ZSA9IGZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKG9wZXJh
dGlvbiwgcHJvcGVydHlJbmRleCk7CisgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24q
PihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOnZhbHVlLmdldCgpXTsKK30KKwogdm9p
ZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpjb3B5RnJvbVZhbHVlRnJvbShjb25zdCBQbGF0Zm9ybUNB
QW5pbWF0aW9uKiB2YWx1ZSkKIHsKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljIHx8
IHZhbHVlLT5hbmltYXRpb25UeXBlKCkgIT0gQmFzaWMpCkBAIC00NDcsNiArNTM3LDEyIEBAIHZv
aWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VG9WYWx1ZShjb25zdCBXZWJDb3JlOjpDb2xvciYg
dmFsdWUpCiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5n
ZXQoKSkgc2V0VG9WYWx1ZTphcnJheV07CiB9CiAKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6
c2V0VG9WYWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IHByb3BlcnR5
SW5kZXgpCit7CisgICAgUmV0YWluUHRyPGlkPiB2YWx1ZSA9IGZpbHRlclZhbHVlRm9yT3BlcmF0
aW9uKG9wZXJhdGlvbiwgcHJvcGVydHlJbmRleCk7CisgICAgW3N0YXRpY19jYXN0PENBQmFzaWNB
bmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9WYWx1ZTp2YWx1ZS5nZXQoKV07Cit9
CisKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6Y29weVRvVmFsdWVGcm9tKGNvbnN0IFBsYXRm
b3JtQ0FBbmltYXRpb24qIHZhbHVlKQogewogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFz
aWMgfHwgdmFsdWUtPmFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKQEAgLTUxOSw2ICs2MTUsMjAg
QEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OkNvbG9yPiYgdmFsdWUpCiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24q
PihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmFycmF5XTsKIH0KIAordm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRp
b24+ID4mIHZhbHVlcywgaW50IHByb3BlcnR5SW5kZXgpCit7CisgICAgaWYgKGFuaW1hdGlvblR5
cGUoKSAhPSBLZXlmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBOU011dGFi
bGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmV0YWluUHRyPGlk
PiB2YWx1ZSA9IGZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKHZhbHVlc1tpXS5nZXQoKSwgcHJvcGVy
dHlJbmRleCk7CisgICAgICAgIFthcnJheSBhZGRPYmplY3Q6dmFsdWUuZ2V0KCldOworICAgIH0K
KyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgp
KSBzZXRWYWx1ZXM6YXJyYXldOworfQorCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OmNvcHlW
YWx1ZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24qIHZhbHVlKQogewogICAgIGlmIChh
bmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUgfHwgdmFsdWUtPmFuaW1hdGlvblR5cGUoKSAhPSBL
ZXlmcmFtZSkKQEAgLTU2MCw0ICs2NzAsNTIgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpj
b3B5VGltaW5nRnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uKiB2YWwKICAg
ICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBz
ZXRUaW1pbmdGdW5jdGlvbnM6W290aGVyIHRpbWluZ0Z1bmN0aW9uc11dOwogfQogCisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQoraW50IFBsYXRmb3JtQ0FBbmltYXRpb246Om51bUFuaW1hdGVkRmls
dGVyUHJvcGVydGllcyhGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSkKK3sKKyAg
ICBzd2l0Y2godHlwZSkgeworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHJl
dHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogcmV0dXJuIDM7CisgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6SFVFX1JPVEFURTogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OklOVkVSVDogcmV0dXJuIDQ7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6
IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiByZXR1cm4gMTsKKyAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHJldHVybiAxOworICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiByZXR1cm4gMTsKKyAgICBkZWZhdWx0OiByZXR1cm4g
MDsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIqIFBsYXRmb3JtQ0FBbmltYXRpb246OmFuaW1hdGVk
RmlsdGVyUHJvcGVydHlOYW1lKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCBp
bnQgcHJvcGVydHlJbmRleCkKK3sKKyAgICBzd2l0Y2godHlwZSkgeworICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpHUkFZU0NBTEU6IHJldHVybiAiaW5wdXRJbnRlbnNpdHkiOworICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgc3dpdGNoKHByb3BlcnR5SW5kZXgpIHsK
KyAgICAgICAgZGVmYXVsdDogcmV0dXJuICIiOworICAgICAgICBjYXNlIDA6IHJldHVybiAiaW5w
dXRSVmVjdG9yIjsKKyAgICAgICAgY2FzZSAxOiByZXR1cm4gImlucHV0R1ZlY3RvciI7CisgICAg
ICAgIGNhc2UgMjogcmV0dXJuICJpbnB1dEJWZWN0b3IiOworICAgICAgICB9CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiByZXR1cm4gImlucHV0U2F0dXJhdGlvbiI7CisgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHJldHVybiAiaW5wdXRBbmdsZSI7Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKKyAgICAgICAgc3dpdGNoKHByb3BlcnR5
SW5kZXgpIHsKKyAgICAgICAgZGVmYXVsdDogcmV0dXJuICIiOworICAgICAgICBjYXNlIDA6IHJl
dHVybiAiaW5wdXRSVmVjdG9yIjsKKyAgICAgICAgY2FzZSAxOiByZXR1cm4gImlucHV0R1ZlY3Rv
ciI7CisgICAgICAgIGNhc2UgMjogcmV0dXJuICJpbnB1dEJWZWN0b3IiOworICAgICAgICBjYXNl
IDM6IHJldHVybiAiaW5wdXRCaWFzVmVjdG9yIjsKKyAgICAgICAgfQorICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpPUEFDSVRZOiByZXR1cm4gImlucHV0QVZlY3RvciI7CisgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJMVVI6IHJldHVybiAiaW5wdXRSYWRpdXMiOworICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpDT05UUkFTVDogcmV0dXJuICJpbnB1dENvbnRyYXN0IjsKKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogcmV0dXJuICJpbnB1dEJyaWdodG5lc3MiOworICAg
IGRlZmF1bHQ6IHJldHVybiAiIjsKKyAgICB9Cit9CisKKyNlbmRpZgorCiAjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaAppbmRleCAzYjkxYzcxN2JmOTM5MzgzZGVlNmYyYTc4YjU3Yzc4MTUyYzQzNGYxLi5iNTFi
MGUxZTRkMWRjNWViY2I0ODM4NDczN2YwNDVjMzRkYWMyYzBlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtNTIzLDYgKzUyMyw3IEBAIHB1YmxpYzoKICAgICBib29s
IGhhczNEVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm0gJiYgIW1fdHJhbnNm
b3JtLT5pc0FmZmluZSgpOyB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgYm9vbCBo
YXNGaWx0ZXIoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5oYXNGaWx0ZXIoKTsgfQogICAg
IHZpcnR1YWwgdm9pZCBmaWx0ZXJOZWVkc1JlcGFpbnQoKTsKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDk1MDNhODI3
NTMzNmQ3YzQ5NWU5NzNiZTc0MzIyNjg1Y2JkNzU0YzEuLmU5MDYzZGRlMTY5ZTU3Y2E2NGJiZjNl
NTA1MmUxOWFiOTEyZGExYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xMTk3LDEyICsxMTk3LDIyIEBAIGJvb2wgUmVuZGVyTGF5
ZXJCYWNraW5nOjpzdGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCwgY29uc3QgQW5pbWF0
aW9uKiBhbmltCiB7CiAgICAgYm9vbCBoYXNPcGFjaXR5ID0ga2V5ZnJhbWVzLmNvbnRhaW5zUHJv
cGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5KTsKICAgICBib29sIGhhc1RyYW5zZm9ybSA9IHJlbmRl
cmVyKCktPmlzQm94KCkgJiYga2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlX
ZWJraXRUcmFuc2Zvcm0pOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29sIGhhc0Zp
bHRlciA9IGtleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0RmlsdGVy
KTsKKyNlbmRpZgogICAgIAotICAgIGlmICghaGFzT3BhY2l0eSAmJiAhaGFzVHJhbnNmb3JtKQor
ICAgIGlmICghaGFzT3BhY2l0eSAmJiAhaGFzVHJhbnNmb3JtCisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQorICAgICAgICAmJiAhaGFzRmlsdGVyCisjZW5kaWYKKyAgICApCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICBLZXlmcmFtZVZhbHVlTGlzdCB0cmFuc2Zvcm1WZWN0b3IoQW5p
bWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CiAgICAgS2V5ZnJhbWVWYWx1ZUxpc3Qgb3Bh
Y2l0eVZlY3RvcihBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQorICAgIEtleWZyYW1lVmFsdWVMaXN0IGZpbHRlclZlY3RvcihBbmltYXRlZFByb3BlcnR5
V2Via2l0RmlsdGVyKTsKKyNlbmRpZgogCiAgICAgc2l6ZV90IG51bUtleWZyYW1lcyA9IGtleWZy
YW1lcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1LZXlmcmFtZXM7ICsr
aSkgewpAQCAtMTIyMiwxMCArMTIzMiwxOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6c3Rh
cnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEFuaW1hdGlvbiogYW5pbQogICAg
ICAgICAKICAgICAgICAgaWYgKChoYXNPcGFjaXR5ICYmIGlzRmlyc3RPckxhc3RLZXlmcmFtZSkg
fHwgY3VycmVudEtleWZyYW1lLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5KSkK
ICAgICAgICAgICAgIG9wYWNpdHlWZWN0b3IuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVl
KGtleSwga2V5ZnJhbWVTdHlsZS0+b3BhY2l0eSgpLCB0ZikpOworCisjaWYgRU5BQkxFKENTU19G
SUxURVJTKQorICAgICAgICBpZiAoKGhhc0ZpbHRlciAmJiBpc0ZpcnN0T3JMYXN0S2V5ZnJhbWUp
IHx8IGN1cnJlbnRLZXlmcmFtZS5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0Rmls
dGVyKSkKKyAgICAgICAgICAgIGZpbHRlclZlY3Rvci5pbnNlcnQobmV3IEZpbHRlckFuaW1hdGlv
blZhbHVlKGtleSwgJihrZXlmcmFtZVN0eWxlLT5maWx0ZXIoKSksIHRmKSk7CisjZW5kaWYKICAg
ICB9CiAKICAgICBib29sIGRpZEFuaW1hdGVUcmFuc2Zvcm0gPSBmYWxzZTsKICAgICBib29sIGRp
ZEFuaW1hdGVPcGFjaXR5ID0gZmFsc2U7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGJv
b2wgZGlkQW5pbWF0ZUZpbHRlciA9IGZhbHNlOworI2VuZGlmCiAgICAgCiAgICAgaWYgKGhhc1Ry
YW5zZm9ybSAmJiBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih0cmFuc2Zvcm1WZWN0b3Is
IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5ib3JkZXJCb3hSZWN0KCkuc2l6ZSgpLCBhbmltLCBr
ZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpLCB0aW1lT2Zmc2V0KSkgewogICAgICAgICBkaWRBbmlt
YXRlVHJhbnNmb3JtID0gdHJ1ZTsKQEAgLTEyMzcsNyArMTI1NSwxOCBAQCBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6c3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEFuaW1h
dGlvbiogYW5pbQogICAgICAgICBjb21wb3NpdG9yKCktPmRpZFN0YXJ0QWNjZWxlcmF0ZWRBbmlt
YXRpb24oQ1NTUHJvcGVydHlPcGFjaXR5KTsKICAgICB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCisgICAgaWYgKGhhc0ZpbHRlciAmJiBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihm
aWx0ZXJWZWN0b3IsIExheW91dFNpemUoKSwgYW5pbSwga2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUo
KSwgdGltZU9mZnNldCkpIHsKKyAgICAgICAgZGlkQW5pbWF0ZUZpbHRlciA9IHRydWU7CisgICAg
ICAgIGNvbXBvc2l0b3IoKS0+ZGlkU3RhcnRBY2NlbGVyYXRlZEFuaW1hdGlvbihDU1NQcm9wZXJ0
eVdlYmtpdEZpbHRlcik7CisgICAgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
CisgICAgcmV0dXJuIGRpZEFuaW1hdGVUcmFuc2Zvcm0gfHwgZGlkQW5pbWF0ZU9wYWNpdHkgfHwg
ZGlkQW5pbWF0ZUZpbHRlcjsKKyNlbHNlCiAgICAgcmV0dXJuIGRpZEFuaW1hdGVUcmFuc2Zvcm0g
fHwgZGlkQW5pbWF0ZU9wYWNpdHk7CisjZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OmFuaW1hdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lKQpAQCAtMTI1NCw2ICsxMjgzLDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
OjpzdGFydFRyYW5zaXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGludCBwcm9wZXJ0eSwgY29uc3QK
IHsKICAgICBib29sIGRpZEFuaW1hdGVPcGFjaXR5ID0gZmFsc2U7CiAgICAgYm9vbCBkaWRBbmlt
YXRlVHJhbnNmb3JtID0gZmFsc2U7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGJvb2wg
ZGlkQW5pbWF0ZUZpbHRlciA9IGZhbHNlOworI2VuZGlmCisKICAgICBBU1NFUlQocHJvcGVydHkg
IT0gY0FuaW1hdGVBbGwpOwogCiAgICAgaWYgKHByb3BlcnR5ID09IChpbnQpQ1NTUHJvcGVydHlP
cGFjaXR5KSB7CkBAIC0xMjc4LDIwICsxMzExLDQ1IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
OjpzdGFydFRyYW5zaXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGludCBwcm9wZXJ0eSwgY29uc3QK
ICAgICAgICAgICAgIHRyYW5zZm9ybVZlY3Rvci5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKDAsICZmcm9tU3R5bGUtPnRyYW5zZm9ybSgpKSk7CiAgICAgICAgICAgICB0cmFuc2Zv
cm1WZWN0b3IuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgxLCAmdG9TdHlsZS0+
dHJhbnNmb3JtKCkpKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1h
dGlvbih0cmFuc2Zvcm1WZWN0b3IsIHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5ib3JkZXJCb3hS
ZWN0KCkuc2l6ZSgpLCB0cmFuc2Zvcm1BbmltLCBHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1l
Rm9yVHJhbnNpdGlvbihBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKSwgdGltZU9mZnNl
dCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCB0cmFu
c2Zvcm0gaXMgdmlzaWJsZSB3aGVuIHRoZSBhbmltYXRpb24gZW5kcywgYWxzbyBzZXQgdGhlIGZp
bmFsIG9wYWNpdHkuCisgICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJl
Y3QgdHJhbnNmb3JtIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0
IHRoZSBmaW5hbCB0cmFuc2Zvcm0uCiAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJUcmFuc2Zv
cm0odG9TdHlsZSk7CiAgICAgICAgICAgICAgICAgZGlkQW5pbWF0ZVRyYW5zZm9ybSA9IHRydWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCisgICAgaWYgKHByb3BlcnR5ID09IChpbnQpQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXIgJiYg
bV9vd25pbmdMYXllci0+aGFzRmlsdGVyKCkpIHsKKyAgICAgICAgY29uc3QgQW5pbWF0aW9uKiBm
aWx0ZXJBbmltID0gdG9TdHlsZS0+dHJhbnNpdGlvbkZvclByb3BlcnR5KENTU1Byb3BlcnR5V2Vi
a2l0RmlsdGVyKTsKKyAgICAgICAgaWYgKGZpbHRlckFuaW0gJiYgIWZpbHRlckFuaW0tPmlzRW1w
dHlPclplcm9EdXJhdGlvbigpKSB7CisgICAgICAgICAgICBLZXlmcmFtZVZhbHVlTGlzdCBmaWx0
ZXJWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcik7CisgICAgICAgICAgICBmaWx0
ZXJWZWN0b3IuaW5zZXJ0KG5ldyBGaWx0ZXJBbmltYXRpb25WYWx1ZSgwLCAmZnJvbVN0eWxlLT5m
aWx0ZXIoKSkpOworICAgICAgICAgICAgZmlsdGVyVmVjdG9yLmluc2VydChuZXcgRmlsdGVyQW5p
bWF0aW9uVmFsdWUoMSwgJnRvU3R5bGUtPmZpbHRlcigpKSk7CisgICAgICAgICAgICBpZiAobV9n
cmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24oZmlsdGVyVmVjdG9yLCBMYXlvdXRTaXplKCksIGZp
bHRlckFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKEFuaW1h
dGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpLCB0aW1lT2Zmc2V0KSkgeworICAgICAgICAgICAgICAg
IC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGZpbHRlciBpcyB2aXNpYmxlIHdoZW4gdGhl
IGFuaW1hdGlvbiBlbmRzLCBhbHNvIHNldCB0aGUgZmluYWwgZmlsdGVyLgorICAgICAgICAgICAg
ICAgIHVwZGF0ZUxheWVyRmlsdGVycyh0b1N0eWxlKTsKKyAgICAgICAgICAgICAgICBkaWRBbmlt
YXRlRmlsdGVyID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRp
ZgorCiAgICAgaWYgKGRpZEFuaW1hdGVPcGFjaXR5KQogICAgICAgICBjb21wb3NpdG9yKCktPmRp
ZFN0YXJ0QWNjZWxlcmF0ZWRBbmltYXRpb24oQ1NTUHJvcGVydHlPcGFjaXR5KTsKIAogICAgIGlm
IChkaWRBbmltYXRlVHJhbnNmb3JtKQogICAgICAgICBjb21wb3NpdG9yKCktPmRpZFN0YXJ0QWNj
ZWxlcmF0ZWRBbmltYXRpb24oQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwogICAgIAorI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBpZiAoZGlkQW5pbWF0ZUZpbHRlcikKKyAgICAgICAg
Y29tcG9zaXRvcigpLT5kaWRTdGFydEFjY2VsZXJhdGVkQW5pbWF0aW9uKENTU1Byb3BlcnR5V2Vi
a2l0RmlsdGVyKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHJldHVy
biBkaWRBbmltYXRlT3BhY2l0eSB8fCBkaWRBbmltYXRlVHJhbnNmb3JtIHx8IGRpZEFuaW1hdGVG
aWx0ZXI7CisjZWxzZQogICAgIHJldHVybiBkaWRBbmltYXRlT3BhY2l0eSB8fCBkaWRBbmltYXRl
VHJhbnNmb3JtOworI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp0cmFuc2l0
aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBpbnQgcHJvcGVydHkpCkBAIC0xMzUzLDYgKzE0
MTEsMTMgQEAgaW50IFJlbmRlckxheWVyQmFja2luZzo6Z3JhcGhpY3NMYXllclRvQ1NTUHJvcGVy
dHkoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KQogICAgICAgICBjYXNlIEFuaW1hdGVkUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3I6CiAgICAgICAgICAgICBjc3NQcm9wZXJ0eSA9IENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQW5p
bWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcjoKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAg
ICAgICAgICBjc3NQcm9wZXJ0eSA9IENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOworI2Vsc2UKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5SW52YWxpZDoKICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTEzNjgsNiArMTQzMywxMCBAQCBBbmltYXRl
ZFByb3BlcnR5SUQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjc3NUb0dyYXBoaWNzTGF5ZXJQcm9wZXJ0
eShpbnQgY3NzUHJvcGVydAogICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGVkUHJvcGVydHlPcGFj
aXR5OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgogICAgICAgICAg
ICAgcmV0dXJuIEFuaW1hdGVkUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I7CisjaWYgRU5BQkxFKENT
U19GSUxURVJTKQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOgorICAgICAg
ICAgICAgcmV0dXJuIEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXI7CisjZW5kaWYKICAgICAg
ICAgLy8gSXQncyBmaW5lIGlmIHdlIHNlZSBvdGhlciBjc3MgcHJvcGVydGllcyBoZXJlOyB0aGV5
IGFyZSBqdXN0IG5vdCBhY2NlbGVyYXRlZC4KICAgICB9CiAgICAgcmV0dXJuIEFuaW1hdGVkUHJv
cGVydHlJbnZhbGlkOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGZlYWJmMjdmODFiODAxZjk1MmMxOWI2OThmOWU2ODQ4ZWRi
MTk0NDcuLjI0YWE3ZGVkMmNlNWY4NGU5ZDc1NGZmOTI0YjgyOTkyNTliZmExMjkgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNSBAQAorMjAxMi0wMi0wOCAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgSW1wbGVtZW50IGhhcmR3YXJlIGFuaW1hdGlvbiBvZiBDU1MgZmlsdGVy
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgxNTUK
KworICAgICAgICBOZXcgdGVzdCBmb3IgaGFyZHdhcmUgYW5pbWF0ZWQgZmlsdGVycywgY3JpYmJl
ZCBmcm9tIHNvZnR3YXJlIGFuaW1hdGlvbiB0ZXN0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1o
dy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNzczMvZmlsdGVycy9maWx0ZXItYW5p
bWF0aW9uLWh3Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTAyLTA3ICBMZXZpIFdlaW50cmF1YiAgPGxl
dml3QGNocm9taXVtLm9yZz4KIAogICAgICAgICB1bmljb2RlLWJpZGk6cGxhaW50ZXh0IGlzIHN1
cHBvc2VkIHRvIGJlIGVmZmVjdGl2ZSBvbiBkaXNwbGF5OmlubGluZSBlbGVtZW50cyB0b28KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWh3LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWh3
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjVmMDc0MGJjODhjMWQwM2Y5N2I1OWIxMjhiNGEx
ZjNlMjA3ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2Zp
bHRlci1hbmltYXRpb24taHctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKKyAgICAgICAg
CitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJncmF5c2NhbGUtYm94IiBlbGVt
ZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IGdyYXlzY2FsZSgwLjUpCitQQVNTIC0g
IndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJzZXBpYS1ib3giIGVsZW1lbnQgYXQgMXMgc2F3
IHNvbWV0aGluZyBjbG9zZSB0bzogc2VwaWEoMC41KQorUEFTUyAtICJ3ZWJraXRGaWx0ZXIiIHBy
b3BlcnR5IGZvciAic2F0dXJhdGUtYm94IiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xv
c2UgdG86IHNhdHVyYXRlKDAuNSkKK1BBU1MgLSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3Ig
Imh1ZXJvdGF0ZS1ib3giIGVsZW1lbnQgYXQgMXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogaHVl
cm90YXRlKDkwZGVnKQorUEFTUyAtICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5IGZvciAiaW52ZXJ0
LWJveCIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBpbnZlcnQoMC41KQor
UEFTUyAtICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5IGZvciAib3BhY2l0eS1ib3giIGVsZW1lbnQg
YXQgMXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogb3BhY2l0eSgwLjUpCitQQVNTIC0gIndlYmtp
dEZpbHRlciIgcHJvcGVydHkgZm9yICJicmlnaHRuZXNzLWJveCIgZWxlbWVudCBhdCAxcyBzYXcg
c29tZXRoaW5nIGNsb3NlIHRvOiBicmlnaHRuZXNzKDAuNSkKK1BBU1MgLSAid2Via2l0RmlsdGVy
IiBwcm9wZXJ0eSBmb3IgImNvbnRyYXN0LWJveCIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5n
IGNsb3NlIHRvOiBjb250cmFzdCgwLjUpCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkg
Zm9yICJibHVyLWJveCIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBibHVy
KDEwcHgpCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5p
bWF0aW9uLWh3Lmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlv
bi1ody5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwZGYyMGYxYzZmMzIwY2YzNDI1NGU4NmZlNzE4NDQ2Njk4
ODY3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZmlsdGVy
LWFuaW1hdGlvbi1ody5odG1sCkBAIC0wLDAgKzEsMTQ0IEBACis8IURPQ1RZUEUgaHRtbD4KKwor
PGh0bWw+Cis8aGVhZD4KKyAgPHN0eWxlPgorICAgIC5ib3ggeworICAgICAgICBoZWlnaHQ6IDEw
MHB4OworICAgICAgICB3aWR0aDogMTAwcHg7CisgICAgICAgIG1hcmdpbjogMTBweDsKKyAgICAg
ICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2Nr
OworICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVaKDApOworICAgICAgICAtd2Vi
a2l0LWFuaW1hdGlvbi1kdXJhdGlvbjoycyAhaW1wb3J0YW50OworICAgIH0KKworICAgICNncmF5
c2NhbGUtYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBncmF5c2NhbGUtYW5pbSAycyBs
aW5lYXIKKyAgICB9CisKKyAgICAjc2VwaWEtYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9u
OiBzZXBpYS1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNzYXR1cmF0ZS1ib3ggeworICAg
ICAgLXdlYmtpdC1hbmltYXRpb246IHNhdHVyYXRlLWFuaW0gMnMgbGluZWFyCisgICAgfQorCisg
ICAgI2h1ZXJvdGF0ZS1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IGh1ZXJvdGF0ZS1h
bmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNpbnZlcnQtYm94IHsKKyAgICAgIC13ZWJraXQt
YW5pbWF0aW9uOiBpbnZlcnQtYW5pbSAycyBsaW5lYXIKKyAgICB9CisKKyAgICAjb3BhY2l0eS1i
b3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IG9wYWNpdHktYW5pbSAycyBsaW5lYXIKKyAg
ICB9CisKKyAgICAjYnJpZ2h0bmVzcy1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IGJy
aWdodG5lc3MtYW5pbSAycyBsaW5lYXIKKyAgICB9CisKKyAgICAjY29udHJhc3QtYm94IHsKKyAg
ICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250cmFzdC1hbmltIDJzIGxpbmVhcgorICAgIH0KKwor
ICAgICNibHVyLWJveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogYmx1ci1hbmltIDJzIGxp
bmVhcgorICAgIH0KKworICAgICNkcm9wc2hhZG93LWJveCB7CisgICAgICAtd2Via2l0LWFuaW1h
dGlvbjogZHJvcHNoYWRvdy1hbmltIDJzIGxpbmVhcgorICAgIH0KKworCisgICAgQC13ZWJraXQt
a2V5ZnJhbWVzIGdyYXlzY2FsZS1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVy
OiBncmF5c2NhbGUoMCk7IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBncmF5c2Nh
bGUoMSk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgc2VwaWEtYW5pbSB7Cisg
ICAgICAgIGZyb20geyAtd2Via2l0LWZpbHRlcjogc2VwaWEoMCk7IH0KKyAgICAgICAgdG8gICB7
IC13ZWJraXQtZmlsdGVyOiBzZXBpYSgxKTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtleWZy
YW1lcyBzYXR1cmF0ZS1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBzYXR1
cmF0ZSgwKTsgfQorICAgICAgICB0byAgIHsgLXdlYmtpdC1maWx0ZXI6IHNhdHVyYXRlKDEpOyB9
CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIGh1ZXJvdGF0ZS1hbmltIHsKKyAgICAg
ICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBodWUtcm90YXRlKDApOyB9CisgICAgICAgIHRvICAg
eyAtd2Via2l0LWZpbHRlcjogaHVlLXJvdGF0ZSgxODBkZWcpOyB9CisgICAgfQorCisgICAgQC13
ZWJraXQta2V5ZnJhbWVzIGludmVydC1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmls
dGVyOiBpbnZlcnQoMCk7IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBpbnZlcnQo
MSk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgb3BhY2l0eS1hbmltIHsKKyAg
ICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBvcGFjaXR5KDEpOyB9CisgICAgICAgIHRvICAg
eyAtd2Via2l0LWZpbHRlcjogb3BhY2l0eSgwKTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtl
eWZyYW1lcyBicmlnaHRuZXNzLWFuaW0geworICAgICAgICBmcm9tIHsgLXdlYmtpdC1maWx0ZXI6
IGJyaWdodG5lc3MoMSk7IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBicmlnaHRu
ZXNzKDApOyB9CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIGNvbnRyYXN0LWFuaW0g
eworICAgICAgICBmcm9tIHsgLXdlYmtpdC1maWx0ZXI6IGNvbnRyYXN0KDEpOyB9CisgICAgICAg
IHRvICAgeyAtd2Via2l0LWZpbHRlcjogY29udHJhc3QoMCk7IH0KKyAgICB9CisKKyAgICBALXdl
YmtpdC1rZXlmcmFtZXMgYmx1ci1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVy
OiBibHVyKDApOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRlcjogYmx1cigyMHB4KTsg
fQorICAgIH0KKworICAgIEAtd2Via2l0LWtleWZyYW1lcyBkcm9wc2hhZG93LWFuaW0geworICAg
ICAgICBmcm9tIHsgLXdlYmtpdC1maWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAwIHRyYW5zcGFyZW50
KTsgfQorICAgICAgICB0byAgIHsgLXdlYmtpdC1maWx0ZXI6IGRyb3Atc2hhZG93KDIwcHggMzBw
eCAxMHB4IGJsYWNrKSk7IH0KKyAgICB9CisKKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCBzcmM9Ii4u
Ly4uL2FuaW1hdGlvbnMvcmVzb3VyY2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMiPjwvc2Ny
aXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgY29uc3QgZXhwZWN0
ZWRWYWx1ZXMgPSBbCisgICAgICAvLyBbYW5pbWF0aW9uLW5hbWUsIHRpbWUsIGVsZW1lbnQtaWQs
IHByb3BlcnR5LCBleHBlY3RlZC12YWx1ZSwgdG9sZXJhbmNlXQorICAgICAgWyJncmF5c2NhbGUt
YW5pbSIsICAxLCAiZ3JheXNjYWxlLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnZ3JheXNjYWxlKDAu
NSknLCAwLjA1XSwKKyAgICAgIFsic2VwaWEtYW5pbSIsICAxLCAic2VwaWEtYm94IiwgIndlYmtp
dEZpbHRlciIsICdzZXBpYSgwLjUpJywgMC4wNV0sCisgICAgICBbInNhdHVyYXRlLWFuaW0iLCAg
MSwgInNhdHVyYXRlLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnc2F0dXJhdGUoMC41KScsIDAuMDVd
LAorICAgICAgWyJodWVyb3RhdGUtYW5pbSIsICAxLCAiaHVlcm90YXRlLWJveCIsICJ3ZWJraXRG
aWx0ZXIiLCAnaHVlcm90YXRlKDkwZGVnKScsIDJdLAorICAgICAgWyJpbnZlcnQtYW5pbSIsICAx
LCAiaW52ZXJ0LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnaW52ZXJ0KDAuNSknLCAwLjA1XSwKKyAg
ICAgIFsib3BhY2l0eS1hbmltIiwgIDEsICJvcGFjaXR5LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAn
b3BhY2l0eSgwLjUpJywgMC4wNV0sCisgICAgICBbImJyaWdodG5lc3MtYW5pbSIsICAxLCAiYnJp
Z2h0bmVzcy1ib3giLCAid2Via2l0RmlsdGVyIiwgJ2JyaWdodG5lc3MoMC41KScsIDAuMDVdLAor
ICAgICAgWyJjb250cmFzdC1hbmltIiwgIDEsICJjb250cmFzdC1ib3giLCAid2Via2l0RmlsdGVy
IiwgJ2NvbnRyYXN0KDAuNSknLCAwLjA1XSwKKyAgICAgIFsiYmx1ci1hbmltIiwgIDEsICJibHVy
LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnYmx1cigxMHB4KScsIDFdLAorICAgICAgLy8gRklYTUUg
d2hlbiB3ZSBpbXBsZW1lbnQgY29tcHV0ZWQgZmlsdGVyIHN0eWxlIGZvciBkcm9wLXNoYWRvdy4K
KyAgICAgIC8vIFsiZHJvcHNoYWRvdy1hbmltIiwgIDEsICJkcm9wc2hhZG93LWJveCIsICJ3ZWJr
aXRGaWx0ZXIiLCAnZHJvcC1zaGFkb3cocmdiYSgwLCAwLCAwLCAwLjUpIDEwcHggMTVweCA1cHgg
KScsIDJdLAorICAgIF07CisgICAgCisgICAgcnVuQW5pbWF0aW9uVGVzdChleHBlY3RlZFZhbHVl
cyk7CisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxkaXYgY2xhc3M9ImJveCIgaWQ9
ImdyYXlzY2FsZS1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0ic2VwaWEtYm94Ij48
L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9InNhdHVyYXRlLWJveCI+PC9kaXY+Cis8ZGl2IGNs
YXNzPSJib3giIGlkPSJodWVyb3RhdGUtYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9
ImludmVydC1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0ib3BhY2l0eS1ib3giPjwv
ZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0iYnJpZ2h0bmVzcy1ib3giPjwvZGl2PgorPGRpdiBj
bGFzcz0iYm94IiBpZD0iY29udHJhc3QtYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9
ImJsdXItYm94Ij48L2Rpdj4KKzwhLS0gPGRpdiBjbGFzcz0iYm94IiBpZD0iZHJvcHNoYWRvdy1i
b3giPjwvZGl2PiAtLT4KKworPGRpdiBpZD0icmVzdWx0Ij4KKzwvZGl2PgorPC9ib2R5PgorPC9o
dG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126206</attachid>
            <date>2012-02-08 17:44:21 -0800</date>
            <delta_ts>2012-02-09 15:51:27 -0800</delta_ts>
            <desc>Patch fixing Windows build</desc>
            <filename>bug-78155-20120208174420.patch</filename>
            <type>text/plain</type>
            <size>55445</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MDA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzcxYTI0OGQ1Y2ZhYTQ1
YjEwMmIxZGZmNmE3YjY5YWFhY2UxZTZiNC4uM2EwNDgxZGYyMTM5ZTIyNDIyN2QxMmZiOTg0NjU5
ZDdkYjdmY2Y0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDEyLTAyLTA4ICBDaHJp
cyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgaGFyZHdh
cmUgYW5pbWF0aW9uIG9mIENTUyBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03ODE1NQorCisgICAgICAgIEFkZGVkIGxvZ2ljIHRvIFBsYXRm
b3JtQ0FBbmltYXRpb24gdG8gcmV0dXJuIGVub3VnaCBpbmZvcm1hdGlvbgorICAgICAgICB0byBH
cmFwaGljc0xheWVyQ0EgdG8gYmUgYWJsZSB0byBjb25zdHJ1Y3QgYSBrZXlQYXRoIGFuaW1hdGlv
bgorICAgICAgICBmb3IgZWFjaCBmaWx0ZXIgcHJvcGVydHkuIFNvbWUgZmlsdGVycyBuZWVkIHRv
IGFuaW1hdGUgbXVsdGlwbGUKKyAgICAgICAgcHJvcGVydGllcyBwZXIgZmlsdGVyLCBzbyBQbGF0
Zm9ybUNBQW5pbWF0aW9uIGFsc28gcmV0dXJucyB0aGUgbnVtYmVyCisgICAgICAgIG9mIHByb3Bl
cnRpZXMgcGVyIGZpbHRlciBhbmQgdGhlbiBhbiBhbmltYXRpb24gaXMgY29uc3RydWN0ZWQgZm9y
IAorICAgICAgICBlYWNoIG9uZS4gQWxzbyBhZGRlZCBhbGwgdGhlIHN1cHBvcnQgbG9naWMgdG8g
aGFuZGxlIGhhcmR3YXJlIGZpbHRlcgorICAgICAgICBhbmltYXRpb24gaW4gdGhlIGhpZ2hlciBs
ZXZlbCBsb2dpYywganVzdCBsaWtlIHdlIGRvIGZvciB0cmFuc2Zvcm1zIGFuZAorICAgICAgICBv
cGFjaXR5LgorCisgICAgICAgIEFsc28gc3R1YmJlZCBvdXQgbmV3IFBsYXRmb3JtQ0FBbmltYXRp
b24gZnVuY3Rpb25zIGZvciBXaW5kb3dzLiBXZSBkb24ndCB5ZXQKKyAgICAgICAgc3VwcG9ydCBo
YXJkd2FyZSBmaWx0ZXJzIG9uIFdpbmRvd3MuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdDogY3NzMy9maWx0ZXJzL2ZpbHRlci1hbmltYXRpb24t
aHcuaHRtbAorCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkRmls
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkRmlsdGVy
OjpQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpQ
cm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZEZpbHRlcjo6YW5pbWF0aW9uSXNBY2NlbGVyYXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZEZpbHRlcjo6Ymxl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6ZW5zdXJlUHJvcGVydHlNYXAp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJPcGVyYXRpb25zQXQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6dmFsaWRhdGVGaWx0ZXJPcGVyYXRpb25zKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEZpbHRlckFuaW1hdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckFuaW1hdGlvblZhbHVlOjpGaWx0ZXJBbmltYXRpb25WYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJBbmltYXRpb25WYWx1ZTo6Y2xvbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyQW5pbWF0aW9uVmFsdWU6OnZhbHVlKToKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cHJvcGVydHlJZFRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDQTo6bW92ZU9yQ29weUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNBOjpjcmVhdGVBbmltYXRpb25Gcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDQTo6YXBwZW5kVG9VbmNvbW1pdHRlZEFuaW1hdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0
ZUZpbHRlckFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDQTo6Y3JlYXRlQmFzaWNBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjpjcmVhdGVLZXlmcmFtZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OnNldEZpbHRlckFuaW1hdGlvbkVuZHBvaW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldEZpbHRlckFuaW1hdGlvbktleWZyYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnN3YXBGcm9tT3JUb1RpbGVkTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpjbG9uZUxheWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAgICAg
KEdyYXBoaWNzTGF5ZXJDQSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZv
cm1DQUFuaW1hdGlvbi5oOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FBbmltYXRpb25NYWMubW06Cisg
ICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoUGxh
dGZvcm1DQUFuaW1hdGlvbjo6c2V0VG9WYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0
aW9uOjpzZXRWYWx1ZXMpOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbjo6bnVtQW5pbWF0
ZWRGaWx0ZXJQcm9wZXJ0aWVzKToKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb246OmFuaW1h
dGVkRmlsdGVyUHJvcGVydHlOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0
aW9uOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VG9W
YWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRWYWx1ZXMpOgorICAgICAg
ICAoUGxhdGZvcm1DQUFuaW1hdGlvbjo6bnVtQW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb246OmFuaW1hdGVkRmlsdGVyUHJvcGVydHlOYW1lKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpoYXNGaWx0ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydEFu
aW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnN0YXJ0VHJh
bnNpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmdyYXBoaWNz
TGF5ZXJUb0NTU1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2lu
Zzo6Y3NzVG9HcmFwaGljc0xheWVyUHJvcGVydHkpOgorCiAyMDEyLTAyLTA3ICBLZW50YXJvIEhh
cmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW5hbWUgW3Y4T25Qcm90b10g
SURMIGF0dHJpYnV0ZSB0byBbVjhPblByb3RvXSBJREwgYXR0cmlidXRlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCmluZGV4IGUzYWQ5MmZhMGRh
NWQxMTgyOGU0NDFhMGZmZTI2OTdiMWYxMGYwMzIuLjhiNjNkNmVjYzEyMGM4NTllNmIyYTg3ODU0
Yjc5NmI3NjEyMjJjOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0FuaW1hdGlvbkJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkJhc2UuY3BwCkBAIC00NTEsNiArNDUxLDIzIEBAIHB1YmxpYzoKICAgICAgICAgZHN0
LT5zZXRUcmFuc2Zvcm0oYmxlbmRGdW5jKGFuaW0sIGEtPnRyYW5zZm9ybSgpLCBiLT50cmFuc2Zv
cm0oKSwgcHJvZ3Jlc3MpKTsKICAgICB9CiB9OworCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQor
Y2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRGaWx0ZXIgOiBwdWJsaWMgUHJvcGVydHlX
cmFwcGVyPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPiB7CitwdWJsaWM6CisgICAgUHJvcGVydHlX
cmFwcGVyQWNjZWxlcmF0ZWRGaWx0ZXIoKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXIsICZSZW5kZXJTdHls
ZTo6ZmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEZpbHRlcikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIHZpcnR1YWwgYm9vbCBhbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFu
aW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdAorICAgIHsKKyAgICAgICAgZHN0LT5zZXRG
aWx0ZXIoYmxlbmRGdW5jKGFuaW0sIGEtPmZpbHRlcigpLCBiLT5maWx0ZXIoKSwgcHJvZ3Jlc3Mp
KTsKKyAgICB9Cit9OworI2VuZGlmCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBzaGFkb3dMaXN0TGVuZ3RoKGNvbnN0IFNoYWRv
d0RhdGEqIHNoYWRvdykKQEAgLTEwMjUsMTQgKzEwNDIsMTcgQEAgdm9pZCBBbmltYXRpb25CYXNl
OjplbnN1cmVQcm9wZXJ0eU1hcCgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
ICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2Nl
bGVyYXRlZE9wYWNpdHkoKSk7CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkVHJhbnNmb3JtKCkpOworI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlX
cmFwcGVyQWNjZWxlcmF0ZWRGaWx0ZXIoKSk7CisjZW5kaWYKICNlbHNlCiAgICAgICAgIGdQcm9w
ZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVy
dHlPcGFjaXR5LCAmUmVuZGVyU3R5bGU6Om9wYWNpdHksICZSZW5kZXJTdHlsZTo6c2V0T3BhY2l0
eSkpOwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyY+KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3Jt
LCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm0pKTsK
LSNlbmRpZgotCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgICAgICBnUHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+
KENTU1Byb3BlcnR5V2Via2l0RmlsdGVyLCAmUmVuZGVyU3R5bGU6OmZpbHRlciwgJlJlbmRlclN0
eWxlOjpzZXRGaWx0ZXIpKTsKICNlbmRpZgorI2VuZGlmCisKIAogICAgICAgICBnUHJvcGVydHlX
cmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5k
ZXJTdHlsZTo6Y29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVDb2xv
ciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRWaXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvcikpOwogICAgICAgICBnUHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJT
dHlsZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRTdHJva2VDb2xvciwg
JlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua1RleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpz
ZXRWaXNpdGVkTGlua1RleHRTdHJva2VDb2xvcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAppbmRleCBjN2EyMjc1NWIwMWM5YzQ4
YjNkZjA2YTU2NjNmOTE2MGQ3Y2UzOWQ3Li5iYzVjZTllNzMzNzBjYWQ4YTI0ZmMwYThkOGI5ODg4
N2FiZWE3NjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcApAQCAtMzgwLDYgKzM4MCw0NiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXI6
OnNldEdyYXBoaWNzTGF5ZXJGYWN0b3J5KEdyYXBoaWNzTGF5ZXI6OkdyYXBoaWNzTGF5ZXJGYWN0
b3J5CiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3N0YXRpYyBpbmxpbmUg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyogZmlsdGVyT3BlcmF0aW9uc0F0KGNvbnN0IEtleWZyYW1l
VmFsdWVMaXN0JiB2YWx1ZUxpc3QsIHNpemVfdCBpbmRleCkKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqPih2YWx1ZUxpc3QuYXQoaW5kZXgpKS0+
dmFsdWUoKTsKK30KKworYm9vbCBHcmFwaGljc0xheWVyOjp2YWxpZGF0ZUZpbHRlck9wZXJhdGlv
bnMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCkKK3sKKyAgICBBU1NFUlQodmFs
dWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcik7CisKKyAg
ICBpZiAodmFsdWVMaXN0LnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIEVtcHR5IGZpbHRlcnMgbWF0Y2ggYW55dGhpbmcsIHNvIGZpbmQgdGhlIGZpcnN0IG5vbi1l
bXB0eSBlbnRyeSBhcyB0aGUgcmVmZXJlbmNlCisgICAgc2l6ZV90IGZpcnN0SW5kZXggPSAwOwor
ICAgIGZvciAoIDsgZmlyc3RJbmRleCA8IHZhbHVlTGlzdC5zaXplKCk7ICsrZmlyc3RJbmRleCkg
eworICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uc0F0KHZhbHVlTGlzdCwgZmlyc3RJbmRleCkt
Pm9wZXJhdGlvbnMoKS5zaXplKCkgPiAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgaWYgKGZpcnN0SW5kZXggPj0gdmFsdWVMaXN0LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyogZmlyc3RWYWwgPSBmaWx0ZXJPcGVy
YXRpb25zQXQodmFsdWVMaXN0LCBmaXJzdEluZGV4KTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBp
ID0gZmlyc3RJbmRleCArIDE7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyogdmFsID0gZmlsdGVyT3BlcmF0aW9uc0F0KHZhbHVlTGlz
dCwgaSk7CisgICAgICAgIAorICAgICAgICAvLyBBbiBlbXRweSBmaWx0ZXIgbGlzdCBtYXRjaGVz
IGFueXRoaW5nLgorICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAoIWZpcnN0VmFsLT5vcGVy
YXRpb25zTWF0Y2goKnZhbCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIC8vIEFuICJpbnZhbGlkIiBsaXN0IGlz
IG9uZSB3aG9zZSBmdW5jdGlvbnMgZG9uJ3QgbWF0Y2gsIGFuZCB0aGVyZWZvcmUgaGFzIHRvIGJl
IGFuaW1hdGVkIGFzIGEgTWF0cml4CiAvLyBUaGUgaGFzQmlnUm90YXRpb24gZmxhZyB3aWxsIGFs
d2F5cyByZXR1cm4gZmFsc2UgaWYgaXNWYWxpZCBpcyBmYWxzZS4gT3RoZXJ3aXNlIGhhc0JpZ1Jv
dGF0aW9uIGlzIAogLy8gdHJ1ZSBpZiB0aGUgcm90YXRpb24gYmV0d2VlbiBhbnkgdHdvIGtleWZy
YW1lcyBpcyA+PSAxODAgZGVncmVlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAppbmRleCA5Zjc1NjI0ZmZjMTdmYWNhNWYwMjIxYTFlZmNi
Y2M4MWEyMjc2MDM2Li5iZGUwZjdmNTAwMDE2YzEwZTQyYWQzOWYzODY3OWI1NzhiODlhYjI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5o
CkBAIC0xNTMsNiArMTUzLDI1IEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBt
X3ZhbHVlOwogfTsKIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKy8vIFVzZWQgdG8gc3RvcmUg
b25lIGZpbHRlciB2YWx1ZSBpbiBhIGtleWZyYW1lIGxpc3QuCitjbGFzcyBGaWx0ZXJBbmltYXRp
b25WYWx1ZSA6IHB1YmxpYyBBbmltYXRpb25WYWx1ZSB7CitwdWJsaWM6CisgICAgRmlsdGVyQW5p
bWF0aW9uVmFsdWUoZmxvYXQga2V5VGltZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyogdmFsdWUg
PSAwLCBQYXNzUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbiA9IDApCisgICAg
ICAgIDogQW5pbWF0aW9uVmFsdWUoa2V5VGltZSwgdGltaW5nRnVuY3Rpb24pCisgICAgeworICAg
ICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBtX3ZhbHVlID0gKnZhbHVlOworICAgIH0KKyAg
ICB2aXJ0dWFsIEFuaW1hdGlvblZhbHVlKiBjbG9uZSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBGaWx0
ZXJBbmltYXRpb25WYWx1ZSgqdGhpcyk7IH0KKworICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMq
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gJm1fdmFsdWU7IH0KKworcHJpdmF0ZToKKyAgICBGaWx0
ZXJPcGVyYXRpb25zIG1fdmFsdWU7Cit9OworI2VuZGlmCisKIC8vIFVzZWQgdG8gc3RvcmUgYSBz
ZXJpZXMgb2YgdmFsdWVzIGluIGEga2V5ZnJhbWUgbGlzdC4gVmFsdWVzIHdpbGwgYWxsIGJlIG9m
IHRoZSBzYW1lIHR5cGUsCiAvLyB3aGljaCBjYW4gYmUgaW5mZXJyZWQgZnJvbSB0aGUgcHJvcGVy
dHkuCiBjbGFzcyBLZXlmcmFtZVZhbHVlTGlzdCB7CkBAIC00MjQsNiArNDQzLDkgQEAgcHJvdGVj
dGVkOgogICAgIC8vIHdoZW4gY29tcG9zaXRpbmcgaXMgbm90IGRvbmUgaW4gaGFyZHdhcmUuIEl0
IGlzIG5vdCB2aXJ0dWFsLCBzbyB0aGUgY2FsbGVyCiAgICAgLy8gbmVlZHMgdG8gbm90aWZpeSB0
aGUgY2hhbmdlIHRvIHRoZSBwbGF0Zm9ybSBsYXllciBhcyBuZWVkZWQuCiAgICAgdm9pZCBjbGVh
ckZpbHRlcnMoKSB7IG1fZmlsdGVycy5jbGVhcigpOyB9CisKKyAgICAvLyBHaXZlbiBhIEtleWZy
YW1lVmFsdWVMaXN0IGNvbnRhaW5pbmcgZmlsdGVyT3BlcmF0aW9ucywgcmV0dXJuIHRydWUgaWYg
dGhlIG9wZXJhdGlvbnMgYXJlIHZhbGlkLgorICAgIHN0YXRpYyBib29sIHZhbGlkYXRlRmlsdGVy
T3BlcmF0aW9ucyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYpOwogI2VuZGlmCiAKICAgICAvLyBH
aXZlbiBhIGxpc3Qgb2YgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWVzLCBzZWUgaWYgYWxsIHRoZSBv
cGVyYXRpb25zIGZvciBlYWNoIGtleWZyYW1lIG1hdGNoLiBJZiBzbwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCmluZGV4
IDgxMjcyZGRiZTNiZTlmZWJlZGM3NzczZmY2MWFmZTJmNGE1MjAzMzUuLjQwNThiNjVmMDk5NTEw
ZTgzMTI1NzQ3ODU0OTM3MzIzNTIzYWM1Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKQEAgLTQ3LDcgKzQ3LDgg
QEAgZW51bSBBbmltYXRlZFByb3BlcnR5SUQgewogICAgIEFuaW1hdGVkUHJvcGVydHlJbnZhbGlk
LAogICAgIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0sCiAgICAgQW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHksCi0gICAgQW5pbWF0ZWRQcm9wZXJ0eUJhY2tncm91bmRDb2xvcgorICAgIEFu
aW1hdGVkUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsCisgICAgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dEZpbHRlcgogfTsKIAogY2xhc3MgR3JhcGhpY3NMYXllckNsaWVudCB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApp
bmRleCBhZDNhYzA0YTJmYmMwNzE0OTA1Y2I5MDg0MWVjMzE3ODEwZmJjYWIyLi4zZmExMjU3ODZi
ODhjY2M2ZjcyOWU4NmFjMjlkNDdlNWQ2MDllNzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTIxMSw2
ICsyMTEsMTIgQEAgc3RhdGljIFN0cmluZyBwcm9wZXJ0eUlkVG9TdHJpbmcoQW5pbWF0ZWRQcm9w
ZXJ0eUlEIHByb3BlcnR5KQogICAgICAgICByZXR1cm4gIm9wYWNpdHkiOwogICAgIGNhc2UgQW5p
bWF0ZWRQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKICAgICAgICAgcmV0dXJuICJiYWNrZ3JvdW5k
Q29sb3IiOworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcjoKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgIHJldHVybiAiZmlsdGVycyI7CisjZWxzZQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgogICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0
eUludmFsaWQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTQ0NCw3
ICs0NTAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6bW92ZU9yQ29weUxheWVyQW5pbWF0aW9u
KE1vdmVPckNvcHkgb3BlcmF0aW9uLCBjb25zdCBTdHJpbgogICAgIH0KIH0KIAotdm9pZCBHcmFw
aGljc0xheWVyQ0E6Om1vdmVPckNvcHlBbmltYXRpb25zRm9yUHJvcGVydHkoTW92ZU9yQ29weSBv
cGVyYXRpb24sIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgUGxhdGZvcm1DQUxheWVyICpm
cm9tTGF5ZXIsIFBsYXRmb3JtQ0FMYXllciAqdG9MYXllcikKK3ZvaWQgR3JhcGhpY3NMYXllckNB
Ojptb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlT3JDb3B5IG9wZXJhdGlvbiwgUGxhdGZvcm1DQUxh
eWVyICpmcm9tTGF5ZXIsIFBsYXRmb3JtQ0FMYXllciAqdG9MYXllcikKIHsKICAgICAvLyBMb29r
IGZvciBydW5uaW5nIGFuaW1hdGlvbnMgYWZmZWN0aW5nIHRoaXMgcHJvcGVydHkuCiAgICAgQW5p
bWF0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9ydW5uaW5nQW5pbWF0aW9ucy5lbmQo
KTsKQEAgLTQ1Myw3ICs0NTksMTMgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6Om1vdmVPckNvcHlB
bmltYXRpb25zRm9yUHJvcGVydHkoTW92ZU9yQ29weSBvcGVyYXRpb24sIEFuaW0KICAgICAgICAg
c2l6ZV90IG51bUFuaW1hdGlvbnMgPSBwcm9wZXJ0eUFuaW1hdGlvbnMuc2l6ZSgpOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUFuaW1hdGlvbnM7ICsraSkgewogICAgICAgICAg
ICAgY29uc3QgTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbiYgY3VyckFuaW1hdGlvbiA9IHByb3BlcnR5
QW5pbWF0aW9uc1tpXTsKLSAgICAgICAgICAgIGlmIChjdXJyQW5pbWF0aW9uLm1fcHJvcGVydHkg
PT0gcHJvcGVydHkpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjdXJyQW5pbWF0aW9u
Lm1fcHJvcGVydHkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSB8fCBjdXJyQW5p
bWF0aW9uLm1fcHJvcGVydHkgPT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkKKyAgICAgICAgICAg
ICAgICAgICAgfHwgY3VyckFuaW1hdGlvbi5tX3Byb3BlcnR5ID09IEFuaW1hdGVkUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgICAgICAgICAg
ICAgIHx8IGN1cnJBbmltYXRpb24ubV9wcm9wZXJ0eSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0
RmlsdGVyCisjZW5kaWYKKyAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgbW92ZU9y
Q29weUxheWVyQW5pbWF0aW9uKG9wZXJhdGlvbiwgYW5pbWF0aW9uSWRlbnRpZmllcihjdXJyQW5p
bWF0aW9uLm1fbmFtZSwgY3VyckFuaW1hdGlvbi5tX3Byb3BlcnR5LCBjdXJyQW5pbWF0aW9uLm1f
aW5kZXgpLCBmcm9tTGF5ZXIsIHRvTGF5ZXIpOwogICAgICAgICB9CiAgICAgfQpAQCAtNjQ4LDYg
KzY2MCwxMCBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZy
YW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEludAogICAgIGJvb2wgY3JlYXRlZEFuaW1h
dGlvbnMgPSBmYWxzZTsKICAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKICAgICAgICAgY3JlYXRlZEFuaW1hdGlvbnMgPSBjcmVh
dGVUcmFuc2Zvcm1BbmltYXRpb25zRnJvbUtleWZyYW1lcyh2YWx1ZUxpc3QsIGFuaW0sIGFuaW1h
dGlvbk5hbWUsIHRpbWVPZmZzZXQsIGJveFNpemUpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
KyAgICBlbHNlIGlmICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Vi
a2l0RmlsdGVyKQorICAgICAgICBjcmVhdGVkQW5pbWF0aW9ucyA9IGNyZWF0ZUZpbHRlckFuaW1h
dGlvbnNGcm9tS2V5ZnJhbWVzKHZhbHVlTGlzdCwgYW5pbSwgYW5pbWF0aW9uTmFtZSwgdGltZU9m
ZnNldCk7CisjZW5kaWYKICAgICBlbHNlCiAgICAgICAgIGNyZWF0ZWRBbmltYXRpb25zID0gY3Jl
YXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyh2YWx1ZUxpc3QsIGFuaW0sIGFuaW1hdGlvbk5hbWUs
IHRpbWVPZmZzZXQpOwogCkBAIC0xMjk5LDggKzEzMTUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2UgcHVycG9zZSwg
ZmxvYQogICAgICAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJhbExheWVyLT5zdXBlcmxheWVyKCkp
OwogICAgICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnN1cGVybGF5ZXIoKS0+cmVwbGFjZVN1
YmxheWVyKG1fc3RydWN0dXJhbExheWVyLmdldCgpLCBtX2xheWVyLmdldCgpKTsKIAotICAgICAg
ICAgICAgbW92ZU9yQ29weUFuaW1hdGlvbnNGb3JQcm9wZXJ0eShNb3ZlLCBBbmltYXRlZFByb3Bl
cnR5V2Via2l0VHJhbnNmb3JtLCBtX3N0cnVjdHVyYWxMYXllci5nZXQoKSwgbV9sYXllci5nZXQo
KSk7Ci0gICAgICAgICAgICBtb3ZlT3JDb3B5QW5pbWF0aW9uc0ZvclByb3BlcnR5KE1vdmUsIEFu
aW1hdGVkUHJvcGVydHlPcGFjaXR5LCBtX3N0cnVjdHVyYWxMYXllci5nZXQoKSwgbV9sYXllci5n
ZXQoKSk7CisgICAgICAgICAgICBtb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlLCBtX3N0cnVjdHVy
YWxMYXllci5nZXQoKSwgbV9sYXllci5nZXQoKSk7CiAKICAgICAgICAgICAgIC8vIFJlbGVhc2Ug
dGhlIHN0cnVjdHVyYWwgbGF5ZXIuCiAgICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllciA9IDA7
CkBAIC0xMzgwLDggKzEzOTUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0
dXJhbExheWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2UgcHVycG9zZSwgZmxvYQogICAgIG1fbGF5
ZXItPnN1cGVybGF5ZXIoKS0+cmVwbGFjZVN1YmxheWVyKG1fbGF5ZXIuZ2V0KCksIG1fc3RydWN0
dXJhbExheWVyLmdldCgpKTsKICAgICBtX3N0cnVjdHVyYWxMYXllci0+YXBwZW5kU3VibGF5ZXIo
bV9sYXllci5nZXQoKSk7CiAKLSAgICBtb3ZlT3JDb3B5QW5pbWF0aW9uc0ZvclByb3BlcnR5KE1v
dmUsIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0sIG1fbGF5ZXIuZ2V0KCksIG1fc3Ry
dWN0dXJhbExheWVyLmdldCgpKTsKLSAgICBtb3ZlT3JDb3B5QW5pbWF0aW9uc0ZvclByb3BlcnR5
KE1vdmUsIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5LCBtX2xheWVyLmdldCgpLCBtX3N0cnVjdHVy
YWxMYXllci5nZXQoKSk7CisgICAgbW92ZU9yQ29weUFuaW1hdGlvbnMoTW92ZSwgIG1fbGF5ZXIu
Z2V0KCksIG1fc3RydWN0dXJhbExheWVyLmdldCgpKTsKICAgICAKICAgICB1cGRhdGVTdWJsYXll
ckxpc3QoKTsKICAgICB1cGRhdGVPcGFjaXR5T25MYXllcigpOwpAQCAtMTc0NCw3ICsxNzU4LDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzTmVlZHNEaXNwbGF5KCkKIAog
Ym9vbCBHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZUFuaW1hdGlvbkZyb21LZXlmcmFtZXMoY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24s
IGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7Ci0gICAg
QVNTRVJUKHZhbHVlTGlzdC5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFu
c2Zvcm0pOworICAgIEFTU0VSVCh2YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3Bl
cnR5V2Via2l0VHJhbnNmb3JtICYmIHZhbHVlTGlzdC5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRGaWx0ZXIpOwogICAgIAogICAgIGJvb2wgaXNLZXlmcmFtZSA9IHZhbHVlTGlz
dC5zaXplKCkgPiAyOwogICAgIGJvb2wgdmFsdWVzT0s7CkBAIC0xNzU1LDEwICsxNzY5LDEwIEBA
IGJvb2wgR3JhcGhpY3NMYXllckNBOjpjcmVhdGVBbmltYXRpb25Gcm9tS2V5ZnJhbWVzKGNvbnN0
IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1CiAgICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+
IGNhQW5pbWF0aW9uOwogICAgIAogICAgIGlmIChpc0tleWZyYW1lKSB7Ci0gICAgICAgIGNhQW5p
bWF0aW9uID0gY3JlYXRlS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCB2YWx1ZUxpc3QucHJv
cGVydHkoKSwgYWRkaXRpdmUpOworICAgICAgICBjYUFuaW1hdGlvbiA9IGNyZWF0ZUtleWZyYW1l
QW5pbWF0aW9uKGFuaW1hdGlvbiwgcHJvcGVydHlJZFRvU3RyaW5nKHZhbHVlTGlzdC5wcm9wZXJ0
eSgpKSwgYWRkaXRpdmUpOwogICAgICAgICB2YWx1ZXNPSyA9IHNldEFuaW1hdGlvbktleWZyYW1l
cyh2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgY2FBbmltYXRpb24uZ2V0KCkpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGNhQW5pbWF0aW9uID0gY3JlYXRlQmFzaWNBbmltYXRpb24oYW5pbWF0aW9uLCB2
YWx1ZUxpc3QucHJvcGVydHkoKSwgYWRkaXRpdmUpOworICAgICAgICBjYUFuaW1hdGlvbiA9IGNy
ZWF0ZUJhc2ljQW5pbWF0aW9uKGFuaW1hdGlvbiwgcHJvcGVydHlJZFRvU3RyaW5nKHZhbHVlTGlz
dC5wcm9wZXJ0eSgpKSwgYWRkaXRpdmUpOwogICAgICAgICB2YWx1ZXNPSyA9IHNldEFuaW1hdGlv
bkVuZHBvaW50cyh2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgY2FBbmltYXRpb24uZ2V0KCkpOwogICAg
IH0KICAgICAKQEAgLTE3NzksMTAgKzE3OTMsMTAgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OmFw
cGVuZFRvVW5jb21taXR0ZWRBbmltYXRpb25zKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWwK
ICAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gY2FBbmltYXRpb247CiAgICAgYm9vbCB2
YWxpZE1hdHJpY2VzID0gdHJ1ZTsKICAgICBpZiAoaXNLZXlmcmFtZSkgewotICAgICAgICBjYUFu
aW1hdGlvbiA9IGNyZWF0ZUtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgdmFsdWVMaXN0LnBy
b3BlcnR5KCksIGFkZGl0aXZlKTsKKyAgICAgICAgY2FBbmltYXRpb24gPSBjcmVhdGVLZXlmcmFt
ZUFuaW1hdGlvbihhbmltYXRpb24sIHByb3BlcnR5SWRUb1N0cmluZyh2YWx1ZUxpc3QucHJvcGVy
dHkoKSksIGFkZGl0aXZlKTsKICAgICAgICAgdmFsaWRNYXRyaWNlcyA9IHNldFRyYW5zZm9ybUFu
aW1hdGlvbktleWZyYW1lcyh2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgY2FBbmltYXRpb24uZ2V0KCks
IGFuaW1hdGlvbkluZGV4LCB0cmFuc2Zvcm1PcCwgaXNNYXRyaXhBbmltYXRpb24sIGJveFNpemUp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhQW5pbWF0aW9uID0gY3JlYXRlQmFzaWNBbmltYXRp
b24oYW5pbWF0aW9uLCB2YWx1ZUxpc3QucHJvcGVydHkoKSwgYWRkaXRpdmUpOworICAgICAgICBj
YUFuaW1hdGlvbiA9IGNyZWF0ZUJhc2ljQW5pbWF0aW9uKGFuaW1hdGlvbiwgcHJvcGVydHlJZFRv
U3RyaW5nKHZhbHVlTGlzdC5wcm9wZXJ0eSgpKSwgYWRkaXRpdmUpOwogICAgICAgICB2YWxpZE1h
dHJpY2VzID0gc2V0VHJhbnNmb3JtQW5pbWF0aW9uRW5kcG9pbnRzKHZhbHVlTGlzdCwgYW5pbWF0
aW9uLCBjYUFuaW1hdGlvbi5nZXQoKSwgYW5pbWF0aW9uSW5kZXgsIHRyYW5zZm9ybU9wLCBpc01h
dHJpeEFuaW1hdGlvbiwgYm94U2l6ZSk7CiAgICAgfQogICAgIApAQCAtMTg0NSwxNiArMTg1OSw4
MCBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uc0Zyb21L
ZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZQogICAgIHJldHVybiB2YWxpZE1hdHJpY2VzOwog
fQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IEdyYXBoaWNzTGF5ZXJDQTo6Y3Jl
YXRlQmFzaWNBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiBhbmltLCBBbmltYXRlZFByb3BlcnR5
SUQgcHJvcGVydHksIGJvb2wgYWRkaXRpdmUpCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorYm9v
bCBHcmFwaGljc0xheWVyQ0E6OmFwcGVuZFRvVW5jb21taXR0ZWRBbmltYXRpb25zKGNvbnN0IEtl
eWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMqIG9wZXJh
dGlvbnMsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bk5hbWUsIGludCBhbmltYXRpb25JbmRleCwgZG91YmxlIHRpbWVPZmZzZXQpCiB7Ci0gICAgUmVm
UHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGJhc2ljQW5pbSA9IFBsYXRmb3JtQ0FBbmltYXRpb246
OmNyZWF0ZShQbGF0Zm9ybUNBQW5pbWF0aW9uOjpCYXNpYywgcHJvcGVydHlJZFRvU3RyaW5nKHBy
b3BlcnR5KSk7CisgICAgYm9vbCBhZGRpdGl2ZSA9IGFuaW1hdGlvbkluZGV4ID4gMDsKKyAgICBi
b29sIGlzS2V5ZnJhbWUgPSB2YWx1ZUxpc3Quc2l6ZSgpID4gMjsKKyAgICAKKyAgICBGaWx0ZXJP
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3AgPSBvcGVyYXRpb25zLT5vcGVyYXRpb25z
KCkuYXQoYW5pbWF0aW9uSW5kZXgpLT5nZXRPcGVyYXRpb25UeXBlKCk7CisgICAgaW50IG51bUFu
aW1hdGVkUHJvcGVydGllcyA9IFBsYXRmb3JtQ0FBbmltYXRpb246Om51bUFuaW1hdGVkRmlsdGVy
UHJvcGVydGllcyhmaWx0ZXJPcCk7CisgICAgCisgICAgZm9yIChpbnQgcHJvcGVydHlJbmRleCA9
IDA7IHByb3BlcnR5SW5kZXggPCBudW1BbmltYXRlZFByb3BlcnRpZXM7ICsrcHJvcGVydHlJbmRl
eCkgeworICAgICAgICBib29sIHZhbHVlc09LOworICAgICAgICBSZWZQdHI8UGxhdGZvcm1DQUFu
aW1hdGlvbj4gY2FBbmltYXRpb247CisgICAgICAgIFN0cmluZyBrZXlQYXRoID0gU3RyaW5nOjpm
b3JtYXQoImZpbHRlcnMuZmlsdGVyXyVkLiVzIiwgYW5pbWF0aW9uSW5kZXgsIFBsYXRmb3JtQ0FB
bmltYXRpb246OmFuaW1hdGVkRmlsdGVyUHJvcGVydHlOYW1lKGZpbHRlck9wLCBwcm9wZXJ0eUlu
ZGV4KSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNLZXlmcmFtZSkgeworICAgICAgICAgICAg
Y2FBbmltYXRpb24gPSBjcmVhdGVLZXlmcmFtZUFuaW1hdGlvbihhbmltYXRpb24sIGtleVBhdGgs
IGFkZGl0aXZlKTsKKyAgICAgICAgICAgIHZhbHVlc09LID0gc2V0RmlsdGVyQW5pbWF0aW9uS2V5
ZnJhbWVzKHZhbHVlTGlzdCwgYW5pbWF0aW9uLCBjYUFuaW1hdGlvbi5nZXQoKSwgYW5pbWF0aW9u
SW5kZXgsIHByb3BlcnR5SW5kZXgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2FB
bmltYXRpb24gPSBjcmVhdGVCYXNpY0FuaW1hdGlvbihhbmltYXRpb24sIGtleVBhdGgsIGFkZGl0
aXZlKTsKKyAgICAgICAgICAgIHZhbHVlc09LID0gc2V0RmlsdGVyQW5pbWF0aW9uRW5kcG9pbnRz
KHZhbHVlTGlzdCwgYW5pbWF0aW9uLCBjYUFuaW1hdGlvbi5nZXQoKSwgYW5pbWF0aW9uSW5kZXgs
IHByb3BlcnR5SW5kZXgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQodmFs
dWVzT0spOworCisgICAgICAgIG1fdW5jb21pdHRlZEFuaW1hdGlvbnMuYXBwZW5kKExheWVyUHJv
cGVydHlBbmltYXRpb24oY2FBbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHZhbHVlTGlzdC5wcm9w
ZXJ0eSgpLCBhbmltYXRpb25JbmRleCwgdGltZU9mZnNldCkpOworICAgIH0KKworCisvLyBnZXQg
bGlzdCBvZiBwcm9wZXJ0aWVzIHRvIGFuaW1hdGUgZm9yIHRoaXMgb3BlcmF0aW9uIChmcm9tIFBs
YXRmb3JtQ0FMYXllcikKKy8vIGZvciBlYWNoIHByb3BlcnR5OgorLy8gICAgICBjcmVhdGUga2Yg
b3IgYmFzaWMgYW5pbWF0aW9uCisvLyAgICAgICAgICBhbmltYXRpb24gbmFtZSBpcyBwcm9wZXJ0
eUlkVG9TdHJpbmcodmFsdWVMaXN0LnByb3BlcnR5KCkpICsgIi4iICsgImZpbHRlcl8iICsgYW5p
bWF0aW9uSW5kZXggKyBwcm9wZXJ0eQorLy8gICAgICAgICAgbWF5YmUgZ2V0IHRoaXMgZnJvbSBQ
bGF0Zm9ybUNBTGF5ZXIKKy8vICAgICAgc2V0RmlsdGVyQW5pbWF0aW9uS2V5ZnJhbWVzIG9yIHNl
dEZpbHRlckFuaW1hdGlvbkVuZHBvaW50cworLy8gICAgICAgICAgbmVlZCB2YWx1ZUxpc3QgZm9y
IHZhbHVlcywgb3BlcmF0aW9ucyBhbmQgYW5pbWF0aW9uSW5kZXggKG9yIG9wZXJhdGlvbiksIHBy
b3BlcnR5IGluZGV4CisvLyAgICAgICAgICBtYXliZSBuZWVkIHRvIGFzayBQbGF0Zm9ybUNBTGF5
ZXIgdG8gcmV0dXJuIHZhbHVlcyBnaXZlbiBhbiBvcGVyYXRpb24gYW5kIGluZGV4PworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllckNBOjpjcmVhdGVGaWx0ZXJBbmlt
YXRpb25zRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBj
b25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBk
b3VibGUgdGltZU9mZnNldCkKK3sKKyAgICBBU1NFUlQodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0g
QW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcik7CisKKyAgICBpbnQgbGlzdEluZGV4ID0gdmFs
aWRhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlTGlzdCk7CisgICAgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyogb3BlcmF0aW9ucyA9IChsaXN0SW5kZXggPj0gMCkgPyBzdGF0aWNfY2FzdDxjb25zdCBG
aWx0ZXJBbmltYXRpb25WYWx1ZSo+KHZhbHVlTGlzdC5hdChsaXN0SW5kZXgpKS0+dmFsdWUoKSA6
IDA7CisgICAgaW50IG51bUFuaW1hdGlvbnMgPSBvcGVyYXRpb25zLT5zaXplKCk7CisKKyAgICAv
LyBGSVhNRTogV2UgY2FuJ3QgY3VycmVudGx5IGhhcmR3YXJlIGFuaW1hdGUgc2hhZG93cy4gVGhl
cmUgaXMgYW4gb3BlbiBxdWVzdGlvbiBhYm91dCByZW1vdmluZyBzaGFkb3dzIGZyb20gZmlsdGVy
cyAKKyAgICAvLyBlbnRpcmVseSwgaW4gd2hpY2ggY2FzZSB0aGlzIGlzc3VlIGlzIG1vb3QuCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BbmltYXRpb25zOyArK2kpIHsKKyAgICAgICAgaWYg
KG9wZXJhdGlvbnMtPmF0KGkpLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9u
OjpEUk9QX1NIQURPVykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBm
b3IgKGludCBhbmltYXRpb25JbmRleCA9IDA7IGFuaW1hdGlvbkluZGV4IDwgbnVtQW5pbWF0aW9u
czsgKythbmltYXRpb25JbmRleCkgeworICAgICAgICBpZiAoIWFwcGVuZFRvVW5jb21taXR0ZWRB
bmltYXRpb25zKHZhbHVlTGlzdCwgb3BlcmF0aW9ucywgYW5pbWF0aW9uLCBhbmltYXRpb25OYW1l
LCBhbmltYXRpb25JbmRleCwgdGltZU9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworUGFzc1JlZlB0cjxQbGF0
Zm9ybUNBQW5pbWF0aW9uPiBHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZUJhc2ljQW5pbWF0aW9uKGNv
bnN0IEFuaW1hdGlvbiogYW5pbSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGFkZGl0aXZl
KQoreworICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBiYXNpY0FuaW0gPSBQbGF0Zm9y
bUNBQW5pbWF0aW9uOjpjcmVhdGUoUGxhdGZvcm1DQUFuaW1hdGlvbjo6QmFzaWMsIGtleVBhdGgp
OwogICAgIHNldHVwQW5pbWF0aW9uKGJhc2ljQW5pbS5nZXQoKSwgYW5pbSwgYWRkaXRpdmUpOwog
ICAgIHJldHVybiBiYXNpY0FuaW07CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlv
bj5HcmFwaGljc0xheWVyQ0E6OmNyZWF0ZUtleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlv
biogYW5pbSwgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBib29sIGFkZGl0aXZlKQorUGFz
c1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPkdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlS2V5ZnJh
bWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBTdHJpbmcmIGtleVBhdGgs
IGJvb2wgYWRkaXRpdmUpCiB7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGtleWZy
YW1lQW5pbSA9IFBsYXRmb3JtQ0FBbmltYXRpb246OmNyZWF0ZShQbGF0Zm9ybUNBQW5pbWF0aW9u
OjpLZXlmcmFtZSwgcHJvcGVydHlJZFRvU3RyaW5nKHByb3BlcnR5KSk7CisgICAgUmVmUHRyPFBs
YXRmb3JtQ0FBbmltYXRpb24+IGtleWZyYW1lQW5pbSA9IFBsYXRmb3JtQ0FBbmltYXRpb246OmNy
ZWF0ZShQbGF0Zm9ybUNBQW5pbWF0aW9uOjpLZXlmcmFtZSwga2V5UGF0aCk7CiAgICAgc2V0dXBB
bmltYXRpb24oa2V5ZnJhbWVBbmltLmdldCgpLCBhbmltLCBhZGRpdGl2ZSk7CiAgICAgcmV0dXJu
IGtleWZyYW1lQW5pbTsKIH0KQEAgLTIwODEsNiArMjE1OSw1NCBAQCBib29sIEdyYXBoaWNzTGF5
ZXJDQTo6c2V0VHJhbnNmb3JtQW5pbWF0aW9uS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiB2YQogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQor
Ym9vbCBHcmFwaGljc0xheWVyQ0E6OnNldEZpbHRlckFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBL
ZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwg
UGxhdGZvcm1DQUFuaW1hdGlvbiogYmFzaWNBbmltLCBpbnQgZnVuY3Rpb25JbmRleCwgaW50IHBy
b3BlcnR5SW5kZXgpCit7CisgICAgQVNTRVJUKHZhbHVlTGlzdC5zaXplKCkgPT0gMik7CisgICAg
CisgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqIGZyb21WYWx1ZSA9IHN0YXRpY19jYXN0
PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4odmFsdWVMaXN0LmF0KDApKTsKKyAgICBjb25z
dCBGaWx0ZXJBbmltYXRpb25WYWx1ZSogdG9WYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRl
ckFuaW1hdGlvblZhbHVlKj4odmFsdWVMaXN0LmF0KDEpKTsKKyAgICAKKyAgICBjb25zdCBGaWx0
ZXJPcGVyYXRpb24qIGZyb21PcGVyYXRpb24gPSBmcm9tVmFsdWUtPnZhbHVlKCktPm9wZXJhdGlv
bnMoKVtmdW5jdGlvbkluZGV4XS5nZXQoKTsKKyAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIHRv
T3BlcmF0aW9uID0gdG9WYWx1ZS0+dmFsdWUoKS0+b3BlcmF0aW9ucygpW2Z1bmN0aW9uSW5kZXhd
LmdldCgpOworICAgIAorICAgIGJhc2ljQW5pbS0+c2V0RnJvbVZhbHVlKGZyb21PcGVyYXRpb24s
IHByb3BlcnR5SW5kZXgpOworICAgIGJhc2ljQW5pbS0+c2V0VG9WYWx1ZSh0b09wZXJhdGlvbiwg
cHJvcGVydHlJbmRleCk7CisgICAgCisgICAgLy8gVGhpcyBjb2RlcGF0aCBpcyB1c2VkIGZvciAy
LWtleWZyYW1lIGFuaW1hdGlvbnMsIHNvIHdlIHN0aWxsIG5lZWQgdG8gbG9vayBpbiB0aGUgc3Rh
cnQgZm9yIGEgdGltaW5nIGZ1bmN0aW9uLgorICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1p
bmdGdW5jdGlvbiA9IHRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUodmFsdWVMaXN0LmF0
KDApLCBhbmltYXRpb24pOworICAgIGJhc2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rpb24odGltaW5n
RnVuY3Rpb24pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllckNB
OjpzZXRGaWx0ZXJBbmltYXRpb25LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZh
bHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIFBsYXRmb3JtQ0FBbmltYXRpb24q
IGtleWZyYW1lQW5pbSwgaW50IGZ1bmN0aW9uSW5kZXgsIGludCBwcm9wZXJ0eUluZGV4KQorewor
ICAgIFZlY3RvcjxmbG9hdD4ga2V5VGltZXM7CisgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVy
YXRpb24+ID4gdmFsdWVzOworICAgIFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+IHRpbWlu
Z0Z1bmN0aW9uczsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqIGN1clZhbHVl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqPih2YWx1ZUxpc3QuYXQo
aSkpOworICAgICAgICBrZXlUaW1lcy5hcHBlbmQoY3VyVmFsdWUtPmtleVRpbWUoKSk7CisKKyAg
ICAgICAgdmFsdWVzLmFwcGVuZChjdXJWYWx1ZS0+dmFsdWUoKS0+b3BlcmF0aW9ucygpW2Z1bmN0
aW9uSW5kZXhdKTsKKworICAgICAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rp
b24gPSB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGN1clZhbHVlLCBhbmltYXRpb24p
OworICAgICAgICB0aW1pbmdGdW5jdGlvbnMuYXBwZW5kKHRpbWluZ0Z1bmN0aW9uKTsKKyAgICB9
CisgICAgCisgICAgLy8gV2UgdG9zcyB0aGUgbGFzdCB0ZkFycmF5IHZhbHVlIGJlY2F1c2UgaXQg
aGFzIHRvIG9uZSBzaG9ydGVyIHRoYW4gdGhlIG90aGVycy4KKyAgICB0aW1pbmdGdW5jdGlvbnMu
cmVtb3ZlTGFzdCgpOworCisgICAga2V5ZnJhbWVBbmltLT5zZXRLZXlUaW1lcyhrZXlUaW1lcyk7
CisgICAga2V5ZnJhbWVBbmltLT5zZXRWYWx1ZXModmFsdWVzLCBwcm9wZXJ0eUluZGV4KTsKKyAg
ICBrZXlmcmFtZUFuaW0tPnNldFRpbWluZ0Z1bmN0aW9ucyh0aW1pbmdGdW5jdGlvbnMpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0xheWVyQ0E6OnN1c3Bl
bmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQogewogICAgIGRvdWJsZSB0ID0gUGxhdGZvcm1DQUxh
eWVyOjpjdXJyZW50VGltZVRvTWVkaWFUaW1lKHRpbWUgPyB0aW1lIDogY3VycmVudFRpbWUoKSk7
CkBAIC0yMjY5LDkgKzIzOTUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c3dhcEZyb21PclRv
VGlsZWRMYXllcihib29sIHVzZVRpbGVkTGF5ZXIsIGZsb2F0IHBhZ2VTY2FsZQogI2VuZGlmCiAK
ICAgICAvLyBtb3ZlIG92ZXIgYW5pbWF0aW9ucwotICAgIG1vdmVPckNvcHlBbmltYXRpb25zRm9y
UHJvcGVydHkoTW92ZSwgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwgb2xkTGF5ZXIu
Z2V0KCksIG1fbGF5ZXIuZ2V0KCkpOwotICAgIG1vdmVPckNvcHlBbmltYXRpb25zRm9yUHJvcGVy
dHkoTW92ZSwgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHksIG9sZExheWVyLmdldCgpLCBtX2xheWVy
LmdldCgpKTsKLSAgICBtb3ZlT3JDb3B5QW5pbWF0aW9uc0ZvclByb3BlcnR5KE1vdmUsIEFuaW1h
dGVkUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIG9sZExheWVyLmdldCgpLCBtX2xheWVyLmdldCgp
KTsKKyAgICBtb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlLCBvbGRMYXllci5nZXQoKSwgbV9sYXll
ci5nZXQoKSk7CiAgICAgCiAgICAgLy8gbmVlZCB0byB0ZWxsIG5ldyBsYXllciB0byBkcmF3IGl0
c2VsZgogICAgIHNldE5lZWRzRGlzcGxheSgpOwpAQCAtMjQ5MSw4ICsyNjE1LDcgQEAgUGFzc1Jl
ZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IEdyYXBoaWNzTGF5ZXJDQTo6Y2xvbmVMYXllcihQbGF0Zm9y
bUNBTGF5ZXIgKmxheWVyLAogCiAgICAgaWYgKGNsb25lTGV2ZWwgPT0gSW50ZXJtZWRpYXRlQ2xv
bmVMZXZlbCkgewogICAgICAgICBuZXdMYXllci0+c2V0T3BhY2l0eShsYXllci0+b3BhY2l0eSgp
KTsKLSAgICAgICAgbW92ZU9yQ29weUFuaW1hdGlvbnNGb3JQcm9wZXJ0eShDb3B5LCBBbmltYXRl
ZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtLCBsYXllciwgbmV3TGF5ZXIuZ2V0KCkpOwotICAgICAg
ICBtb3ZlT3JDb3B5QW5pbWF0aW9uc0ZvclByb3BlcnR5KENvcHksIEFuaW1hdGVkUHJvcGVydHlP
cGFjaXR5LCBsYXllciwgbmV3TGF5ZXIuZ2V0KCkpOworICAgICAgICBtb3ZlT3JDb3B5QW5pbWF0
aW9ucyhDb3B5LCBsYXllciwgbmV3TGF5ZXIuZ2V0KCkpOwogICAgIH0KICAgICAKICAgICBpZiAo
c2hvd0RlYnVnQm9yZGVycygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IDgwYjIzNzY0MTBmYmNmZjY1ZTkz
MTczMDRmZjBmN2ZiYzkxYThmNWEuLmY2MTYwNzE2YWJkYmJhY2Q1ZDBkOTEzMWI1NmQ4NTVhNjlm
NjM1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5oCkBAIC0xNzksMTAgKzE3OSwxMyBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBjcmVhdGVBbmltYXRpb25Gcm9tS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0
JiwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUg
dGltZU9mZnNldCk7CiAgICAgYm9vbCBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25zRnJvbUtleWZy
YW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0
cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEludFNpemUmIGJv
eFNpemUpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29sIGNyZWF0ZUZpbHRlckFu
aW1hdGlvbnNGcm9tS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5p
bWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7
CisjZW5kaWYKIAogICAgIC8vIFJldHVybiBhdXRvcmVsZWFzZWQgYW5pbWF0aW9uICh1c2UgUmV0
YWluUHRyPykKLSAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGNyZWF0ZUJhc2lj
QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiosIEFuaW1hdGVkUHJvcGVydHlJRCwgYm9vbCBhZGRp
dGl2ZSk7Ci0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBjcmVhdGVLZXlmcmFt
ZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24qLCBBbmltYXRlZFByb3BlcnR5SUQsIGJvb2wgYWRk
aXRpdmUpOworICAgIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gY3JlYXRlQmFzaWNB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGFk
ZGl0aXZlKTsKKyAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGNyZWF0ZUtleWZy
YW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYsIGJvb2wgYWRkaXRp
dmUpOwogICAgIHZvaWQgc2V0dXBBbmltYXRpb24oUGxhdGZvcm1DQUFuaW1hdGlvbiosIGNvbnN0
IEFuaW1hdGlvbiosIGJvb2wgYWRkaXRpdmUpOwogICAgIAogICAgIGNvbnN0IFRpbWluZ0Z1bmN0
aW9uKiB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvblZhbHVl
KiwgY29uc3QgQW5pbWF0aW9uKik7CkBAIC0xOTMsNiArMTk2LDExIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBzZXRUcmFuc2Zvcm1BbmltYXRpb25FbmRwb2ludHMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmLCBjb25zdCBBbmltYXRpb24qLCBQbGF0Zm9ybUNBQW5pbWF0aW9uKiwgaW50IGZ1bmN0aW9u
SW5kZXgsIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgYm9vbCBpc01hdHJpeEFu
aW1hdGlvbiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSk7CiAgICAgYm9vbCBzZXRUcmFuc2Zvcm1B
bmltYXRpb25LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRp
b24qLCBQbGF0Zm9ybUNBQW5pbWF0aW9uKiwgaW50IGZ1bmN0aW9uSW5kZXgsIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgYm9vbCBpc01hdHJpeEFuaW1hdGlvbiwgY29uc3QgSW50
U2l6ZSYgYm94U2l6ZSk7CiAgICAgCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGJvb2wg
c2V0RmlsdGVyQW5pbWF0aW9uRW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29u
c3QgQW5pbWF0aW9uKiwgUGxhdGZvcm1DQUFuaW1hdGlvbiosIGludCBmdW5jdGlvbkluZGV4LCBp
bnQgcHJvcGVydHlJbmRleCk7CisgICAgYm9vbCBzZXRGaWx0ZXJBbmltYXRpb25LZXlmcmFtZXMo
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRpb24qLCBQbGF0Zm9ybUNBQW5p
bWF0aW9uKiwgaW50IGZ1bmN0aW9uSW5kZXgsIGludCBwcm9wZXJ0eUluZGV4KTsKKyNlbmRpZgor
CiAgICAgYm9vbCBhbmltYXRpb25Jc1J1bm5pbmcoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1l
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcnVubmluZ0FuaW1hdGlvbnMuZmluZChh
bmltYXRpb25OYW1lKSAhPSBtX3J1bm5pbmdBbmltYXRpb25zLmVuZCgpOwpAQCAtMzIyLDkgKzMz
MCwxMiBAQCBwcml2YXRlOgogCiAgICAgZW51bSBNb3ZlT3JDb3B5IHsgTW92ZSwgQ29weSB9Owog
ICAgIHN0YXRpYyB2b2lkIG1vdmVPckNvcHlMYXllckFuaW1hdGlvbihNb3ZlT3JDb3B5LCBjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbklkZW50aWZpZXIsIFBsYXRmb3JtQ0FMYXllciAqZnJvbUxheWVy
LCBQbGF0Zm9ybUNBTGF5ZXIgKnRvTGF5ZXIpOwotICAgIHZvaWQgbW92ZU9yQ29weUFuaW1hdGlv
bnNGb3JQcm9wZXJ0eShNb3ZlT3JDb3B5LCBBbmltYXRlZFByb3BlcnR5SUQsIFBsYXRmb3JtQ0FM
YXllciAqIGZyb21MYXllciwgUGxhdGZvcm1DQUxheWVyICogdG9MYXllcik7CisgICAgdm9pZCBt
b3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlT3JDb3B5LCBQbGF0Zm9ybUNBTGF5ZXIgKiBmcm9tTGF5
ZXIsIFBsYXRmb3JtQ0FMYXllciAqIHRvTGF5ZXIpOwogICAgIAogICAgIGJvb2wgYXBwZW5kVG9V
bmNvbW1pdHRlZEFuaW1hdGlvbnMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zKiwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRp
b25OYW1lLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBpbnQgYW5pbWF0aW9uSW5kZXgsIGRvdWJs
ZSB0aW1lT2Zmc2V0LCBib29sIGlzTWF0cml4QW5pbWF0aW9uKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCisgICAgYm9vbCBhcHBlbmRUb1VuY29tbWl0dGVkQW5pbWF0aW9ucyhjb25zdCBLZXlm
cmFtZVZhbHVlTGlzdCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMqLCBjb25zdCBBbmltYXRpb24q
LCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGludCBhbmltYXRpb25JbmRleCwgZG91Ymxl
IHRpbWVPZmZzZXQpOworI2VuZGlmCiAgICAgCiAgICAgZW51bSBMYXllckNoYW5nZSB7CiAgICAg
ICAgIE5vQ2hhbmdlID0gMCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaAppbmRleCBiMmQzMjU5NTZiYWVkMzk4
ZGJlMDNjNTk3OTMxMDhmYzA5OTVjZDEwLi5iNmIzNTBjYjEwMWJlYmQ0YTlhNzc1MTVmMmM1Nzhk
NDlkNDI2ZGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJPcGVyYXRpb24uaCIKICNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBA
IC0xMDksMTIgKzExMCwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGcm9tVmFsdWUoY29uc3Qg
V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICB2b2lkIHNldEZyb21WYWx1ZShj
b25zdCBGbG9hdFBvaW50M0QmKTsKICAgICB2b2lkIHNldEZyb21WYWx1ZShjb25zdCBXZWJDb3Jl
OjpDb2xvciYpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2b2lkIHNldEZyb21WYWx1
ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qLCBpbnQgcHJvcGVydHlJbmRleCk7CisjZW5kaWYKICAg
ICB2b2lkIGNvcHlGcm9tVmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24qKTsKIAog
ICAgIHZvaWQgc2V0VG9WYWx1ZShmbG9hdCk7CiAgICAgdm9pZCBzZXRUb1ZhbHVlKGNvbnN0IFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgdm9pZCBzZXRUb1ZhbHVlKGNvbnN0
IEZsb2F0UG9pbnQzRCYpOwogICAgIHZvaWQgc2V0VG9WYWx1ZShjb25zdCBXZWJDb3JlOjpDb2xv
ciYpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2b2lkIHNldFRvVmFsdWUoY29uc3Qg
RmlsdGVyT3BlcmF0aW9uKiwgaW50IHByb3BlcnR5SW5kZXgpOworI2VuZGlmCiAgICAgdm9pZCBj
b3B5VG9WYWx1ZUZyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiopOwogCiAgICAgLy8gS2V5
ZnJhbWUtYW5pbWF0aW9uIHByb3BlcnRpZXMuCkBAIC0xMjIsNiArMTI5LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeD4mKTsKICAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludDNEPiYp
OwogICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb2xvcj4mKTsKKyNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mLCBpbnQgcHJvcGVydHlJbmRleCk7CisjZW5kaWYKICAg
ICB2b2lkIGNvcHlWYWx1ZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24qKTsKIAogICAg
IHZvaWQgc2V0S2V5VGltZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYpOwpAQCAtMTMwLDYgKzE0MCwx
MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUaW1pbmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNv
bnN0IFRpbWluZ0Z1bmN0aW9uKj4mKTsKICAgICB2b2lkIGNvcHlUaW1pbmdGdW5jdGlvbnNGcm9t
KGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24qKTsKICAgICAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCisgICAgc3RhdGljIGludCBudW1BbmltYXRlZEZpbHRlclByb3BlcnRpZXMoRmlsdGVyT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogYW5pbWF0ZWRG
aWx0ZXJQcm9wZXJ0eU5hbWUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCBpbnQgcHJv
cGVydHlJbmRleCk7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFBsYXRmb3JtQ0FBbmltYXRp
b24oQW5pbWF0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKICAgICBQbGF0Zm9ybUNB
QW5pbWF0aW9uKFBsYXRmb3JtQW5pbWF0aW9uUmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FBbmltYXRp
b25NYWMubW0KaW5kZXggZjE0MjMyNTkwNjliZTljYjIwODdlMzcwMDMwMzlmN2M0NDdiYjY4Zi4u
YWQ4M2E3OWQwNDQwOTVhZTgzOTZkNDlmMGY1ZGMzZWQ2OWUyOTQ3MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FBbmltYXRpb25N
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRm
b3JtQ0FBbmltYXRpb25NYWMubW0KQEAgLTM5Niw2ICszOTYsOTggQEAgdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uOjpzZXRGcm9tVmFsdWUoY29uc3QgV2ViQ29yZTo6Q29sb3ImIHZhbHVlKQogICAg
IFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZy
b21WYWx1ZTphcnJheV07CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCitzdGF0aWMgZG91
YmxlIHNlcGlhRnVsbENvbnN0YW50c1szXVszXSA9IHsKKyAgICB7IDAuMzkzLCAwLjc2OSwgMC4x
ODkgfSwKKyAgICB7IDAuMzQ5LCAwLjY4NiwgMC4xNjggfSwKKyAgICB7IDAuMjcyLCAwLjUzNCwg
MC4xMzEgfQorfTsKKworc3RhdGljIGRvdWJsZSBzZXBpYU5vbmVDb25zdGFudHNbM11bM10gPSB7
CisgICAgeyAxLCAwLCAwIH0sCisgICAgeyAwLCAxLCAwIH0sCisgICAgeyAwLCAwLCAxIH0KK307
CisKK3N0YXRpYyBkb3VibGUgaW52ZXJ0Q29uc3RhbnRzWzNdWzNdID0geworICAgIHsgMSwgMCwg
MCB9LAorICAgIHsgMCwgMSwgMCB9LAorICAgIHsgMCwgMCwgMSB9Cit9OworCitzdGF0aWMgUmV0
YWluUHRyPGlkPiBmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihjb25zdCBGaWx0ZXJPcGVyYXRpb24q
IG9wZXJhdGlvbiwgaW50IHByb3BlcnR5SW5kZXgpCit7CisgICAgRmlsdGVyT3BlcmF0aW9uOjpP
cGVyYXRpb25UeXBlIHR5cGUgPSBvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKTsKKyAgICBS
ZXRhaW5QdHI8aWQ+IHZhbHVlOworICAgIAorICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FU
VVJBVEU6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKKyAgICAgICAg
Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxj
b25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAg
ICAgZG91YmxlIGFtb3VudCA9IG9wLT5hbW91bnQoKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gRmls
dGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFKQorICAgICAgICAgICAgYW1vdW50ID0gZGVnMnJhZChh
bW91bnQpOworICAgICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZTphbW91bnRdIHJldGFpbl0pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlNFUElBOiB7CisgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAgICAgIGRvdWJsZSB0ID0gb3AtPmFtb3VudCgp
OworICAgICAgICAKKyAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TQXJyYXkgYXJyYXlXaXRoT2Jq
ZWN0czoKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOldlYkNvcmU6OmJs
ZW5kKHNlcGlhTm9uZUNvbnN0YW50c1twcm9wZXJ0eUluZGV4XVswXSwgc2VwaWFGdWxsQ29uc3Rh
bnRzWzBdW3Byb3BlcnR5SW5kZXhdLCB0KV0sCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVy
V2l0aERvdWJsZTpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbcHJvcGVydHlJbmRl
eF1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1sxXVtwcm9wZXJ0eUluZGV4XSwgdCldLAorICAgICAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25l
Q29uc3RhbnRzW3Byb3BlcnR5SW5kZXhdWzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bcHJvcGVy
dHlJbmRleF0sIHQpXSwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjBd
LAorICAgICAgICAgICAgbmlsXSByZXRhaW5dKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKKyAgICAgICAgY29uc3QgQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiogb3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAg
aWYgKHByb3BlcnR5SW5kZXggPCAzKSB7CisgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9
IDEgLSBvcC0+YW1vdW50KCkgKiAyOworICAgICAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TQXJy
YXkgYXJyYXlXaXRoT2JqZWN0czoKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aERvdWJsZTppbnZlcnRDb25zdGFudHNbcHJvcGVydHlJbmRleF1bMF0gKiBtdWx0aXBsaWVyXSwK
KyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTppbnZlcnRDb25zdGFu
dHNbcHJvcGVydHlJbmRleF1bMV0gKiBtdWx0aXBsaWVyXSwKKyAgICAgICAgICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZTppbnZlcnRDb25zdGFudHNbcHJvcGVydHlJbmRleF1bMl0g
KiBtdWx0aXBsaWVyXSwKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZTowXSwKKyAgICAgICAgICAgICAgICBuaWxdIHJldGFpbl0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoKKyAg
ICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpvcC0+YW1vdW50KCldLAor
ICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOm9wLT5hbW91bnQoKV0s
CisgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6b3AtPmFtb3VudCgp
XSwKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowXSwKKyAgICAg
ICAgICAgICAgICBuaWxdIHJldGFpbl0pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6
IHsKKyAgICAgICAgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiog
b3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TTnVtYmVyIG51bWJl
cldpdGhEb3VibGU6b3AtPmFtb3VudCgpXSByZXRhaW5dKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CisgICAgICAgIGNvbnN0IEJsdXJG
aWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlv
bio+KG9wZXJhdGlvbik7CisgICAgICAgIHZhbHVlLmFkb3B0TlMoW1tOU051bWJlciBudW1iZXJX
aXRoRG91YmxlOm9wLT5zdGREZXZpYXRpb24oKS5jYWxjRmxvYXRWYWx1ZSgwKV0gcmV0YWluXSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldEZy
b21WYWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IHByb3BlcnR5SW5k
ZXgpCit7CisgICAgUmV0YWluUHRyPGlkPiB2YWx1ZSA9IGZpbHRlclZhbHVlRm9yT3BlcmF0aW9u
KG9wZXJhdGlvbiwgcHJvcGVydHlJbmRleCk7CisgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmlt
YXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOnZhbHVlLmdldCgpXTsKK30K
KyNlbmRpZgorCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OmNvcHlGcm9tVmFsdWVGcm9tKGNv
bnN0IFBsYXRmb3JtQ0FBbmltYXRpb24qIHZhbHVlKQogewogICAgIGlmIChhbmltYXRpb25UeXBl
KCkgIT0gQmFzaWMgfHwgdmFsdWUtPmFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKQEAgLTQ0Nyw2
ICs1MzksMTQgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRUb1ZhbHVlKGNvbnN0IFdl
YkNvcmU6OkNvbG9yJiB2YWx1ZSkKICAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+
KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOmFycmF5XTsKIH0KIAorI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VG9WYWx1ZShjb25zdCBG
aWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IHByb3BlcnR5SW5kZXgpCit7CisgICAgUmV0
YWluUHRyPGlkPiB2YWx1ZSA9IGZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKG9wZXJhdGlvbiwgcHJv
cGVydHlJbmRleCk7CisgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1h
dGlvbi5nZXQoKSkgc2V0VG9WYWx1ZTp2YWx1ZS5nZXQoKV07Cit9CisjZW5kaWYKKwogdm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uOjpjb3B5VG9WYWx1ZUZyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1h
dGlvbiogdmFsdWUpCiB7CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYyB8fCB2YWx1
ZS0+YW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQpAQCAtNTE5LDYgKzYxOSwyMiBAQCB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb246OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29sb3I+
JiB2YWx1ZSkKICAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0
aW9uLmdldCgpKSBzZXRWYWx1ZXM6YXJyYXldOwogfQogCisjaWYgRU5BQkxFKENTU19GSUxURVJT
KQordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFJlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+ID4mIHZhbHVlcywgaW50IHByb3BlcnR5SW5kZXgpCit7CisgICAg
aWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgUmV0YWluUHRyPGlkPiB2YWx1ZSA9IGZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKHZhbHVlc1tp
XS5nZXQoKSwgcHJvcGVydHlJbmRleCk7CisgICAgICAgIFthcnJheSBhZGRPYmplY3Q6dmFsdWUu
Z2V0KCldOworICAgIH0KKyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1f
YW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6YXJyYXldOworfQorI2VuZGlmCisKIHZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbjo6Y29weVZhbHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlv
biogdmFsdWUpCiB7CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSB8fCB2YWx1
ZS0+YW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQpAQCAtNTYwLDQgKzY3Niw1MSBAQCB2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb246OmNvcHlUaW1pbmdGdW5jdGlvbnNGcm9tKGNvbnN0IFBsYXRm
b3JtQ0FBbmltYXRpb24qIHZhbAogICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9u
Kj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRpbWluZ0Z1bmN0aW9uczpbb3RoZXIgdGltaW5nRnVu
Y3Rpb25zXV07CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCitpbnQgUGxhdGZvcm1DQUFu
aW1hdGlvbjo6bnVtQW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0aWVzKEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkdSQVlTQ0FMRTogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNFUElBOiByZXR1cm4gMzsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHJl
dHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiByZXR1cm4gMTsK
KyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiByZXR1cm4gNDsKKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJMVVI6IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDog
cmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHJldHVybiAx
OworICAgIGRlZmF1bHQ6IHJldHVybiAwOworICAgIH0KK30KKworY29uc3QgY2hhciogUGxhdGZv
cm1DQUFuaW1hdGlvbjo6YW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0eU5hbWUoRmlsdGVyT3BlcmF0aW9u
OjpPcGVyYXRpb25UeXBlIHR5cGUsIGludCBwcm9wZXJ0eUluZGV4KQoreworICAgIHN3aXRjaCh0
eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogcmV0dXJuICJpbnB1
dEludGVuc2l0eSI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgICAgICBz
d2l0Y2gocHJvcGVydHlJbmRleCkgeworICAgICAgICBkZWZhdWx0OiByZXR1cm4gIiI7CisgICAg
ICAgIGNhc2UgMDogcmV0dXJuICJpbnB1dFJWZWN0b3IiOworICAgICAgICBjYXNlIDE6IHJldHVy
biAiaW5wdXRHVmVjdG9yIjsKKyAgICAgICAgY2FzZSAyOiByZXR1cm4gImlucHV0QlZlY3RvciI7
CisgICAgICAgIH0KKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHJldHVybiAi
aW5wdXRTYXR1cmF0aW9uIjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTog
cmV0dXJuICJpbnB1dEFuZ2xlIjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgor
ICAgICAgICBzd2l0Y2gocHJvcGVydHlJbmRleCkgeworICAgICAgICBkZWZhdWx0OiByZXR1cm4g
IiI7CisgICAgICAgIGNhc2UgMDogcmV0dXJuICJpbnB1dFJWZWN0b3IiOworICAgICAgICBjYXNl
IDE6IHJldHVybiAiaW5wdXRHVmVjdG9yIjsKKyAgICAgICAgY2FzZSAyOiByZXR1cm4gImlucHV0
QlZlY3RvciI7CisgICAgICAgIGNhc2UgMzogcmV0dXJuICJpbnB1dEJpYXNWZWN0b3IiOworICAg
ICAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHJldHVybiAiaW5wdXRB
VmVjdG9yIjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogcmV0dXJuICJpbnB1dFJh
ZGl1cyI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiByZXR1cm4gImlucHV0
Q29udHJhc3QiOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiByZXR1cm4g
ImlucHV0QnJpZ2h0bmVzcyI7CisgICAgZGVmYXVsdDogcmV0dXJuICIiOworICAgIH0KK30KKyNl
bmRpZgorCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmlt
YXRpb25XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCmluZGV4IDY4M2Q3MDM1MzE4YjBhNTI3OWVmYmJkY2Q5
OTVlNGExZmE1YWFmYmIuLjk0NDI4OGNhNzk2YmFjZmY2ZmQwZDJlZmMxYTkxOWU3MmE3MTdlMWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAKQEAgLTM2OCw2ICszNjgsMTMg
QEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRGcm9tVmFsdWUoY29uc3QgV2ViQ29yZTo6
Q29sb3ImIHZhbHVlKQogICAgIENBQ0ZBbmltYXRpb25TZXRGcm9tVmFsdWUobV9hbmltYXRpb24u
Z2V0KCksIHYuZ2V0KCkpOwogfQogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uOjpzZXRGcm9tVmFsdWUoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiwgaW50
KQoreworICAgIC8vIEZJWE1FOiBIYXJkd2FyZSBmaWx0ZXIgYW5pbWF0aW9uIG5vdCBpbXBsZW1l
bnRlZCBvbiBXaW5kb3dzCit9CisjZW5kaWYKKwogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpj
b3B5RnJvbVZhbHVlRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uKiB2YWx1ZSkKIHsKICAg
ICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljIHx8IHZhbHVlLT5hbmltYXRpb25UeXBlKCkg
IT0gQmFzaWMpCkBAIC00MTQsNiArNDIxLDEzIEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6
c2V0VG9WYWx1ZShjb25zdCBXZWJDb3JlOjpDb2xvciYgdmFsdWUpCiAgICAgQ0FDRkFuaW1hdGlv
blNldFRvVmFsdWUobV9hbmltYXRpb24uZ2V0KCksIHYuZ2V0KCkpOwogfQogCisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRUb1ZhbHVlKGNvbnN0
IEZpbHRlck9wZXJhdGlvbiosIGludCkKK3sKKyAgICAvLyBGSVhNRTogSGFyZHdhcmUgZmlsdGVy
IGFuaW1hdGlvbiBub3QgaW1wbGVtZW50ZWQgb24gV2luZG93cworfQorI2VuZGlmCisKIHZvaWQg
UGxhdGZvcm1DQUFuaW1hdGlvbjo6Y29weVRvVmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmlt
YXRpb24qIHZhbHVlKQogewogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFzaWMgfHwgdmFs
dWUtPmFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKQEAgLTQ4Miw2ICs0OTYsMTMgQEAgdm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbG9y
PiYgdmFsdWUpCiAgICAgQ0FDRkFuaW1hdGlvblNldFZhbHVlcyhtX2FuaW1hdGlvbi5nZXQoKSwg
YXJyYXkuZ2V0KCkpOwogfQogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRp
b24+ID4mLCBpbnQpCit7CisgICAgLy8gRklYTUU6IEhhcmR3YXJlIGZpbHRlciBhbmltYXRpb24g
bm90IGltcGxlbWVudGVkIG9uIFdpbmRvd3MKK30KKyNlbmRpZgorCiB2b2lkIFBsYXRmb3JtQ0FB
bmltYXRpb246OmNvcHlWYWx1ZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24qIHZhbHVl
KQogewogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUgfHwgdmFsdWUtPmFuaW1h
dGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKQEAgLTUzMSw0ICs1NTIsMTggQEAgdm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uOjpjb3B5VGltaW5nRnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5p
bWF0aW9uKiB2YWwKICAgICBDQUNGQW5pbWF0aW9uU2V0VGltaW5nRnVuY3Rpb25zKG1fYW5pbWF0
aW9uLmdldCgpLCBDQUNGQW5pbWF0aW9uR2V0VGltaW5nRnVuY3Rpb25zKHZhbHVlLT5wbGF0Zm9y
bUFuaW1hdGlvbigpKSk7CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCitpbnQgUGxhdGZv
cm1DQUFuaW1hdGlvbjo6bnVtQW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0aWVzKEZpbHRlck9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSkKK3sKKyAgICAvLyBGSVhNRTogSGFyZHdhcmUgZmlsdGVyIGFuaW1h
dGlvbiBub3QgaW1wbGVtZW50ZWQgb24gV2luZG93cworICAgIHJldHVybiAwOworfQorCitjb25z
dCBjaGFyKiBQbGF0Zm9ybUNBQW5pbWF0aW9uOjphbmltYXRlZEZpbHRlclByb3BlcnR5TmFtZShG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIGludCkKK3sKKyAgICAvLyBGSVhNRTogSGFy
ZHdhcmUgZmlsdGVyIGFuaW1hdGlvbiBub3QgaW1wbGVtZW50ZWQgb24gV2luZG93cworICAgIHJl
dHVybiAiIjsKK30KKyNlbmRpZgorCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCAzYjkxYzcxN2Jm
OTM5MzgzZGVlNmYyYTc4YjU3Yzc4MTUyYzQzNGYxLi5iNTFiMGUxZTRkMWRjNWViY2I0ODM4NDcz
N2YwNDVjMzRkYWMyYzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApA
QCAtNTIzLDYgKzUyMyw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhczNEVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2Zvcm0gJiYgIW1fdHJhbnNmb3JtLT5pc0FmZmluZSgpOyB9CiAK
ICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgYm9vbCBoYXNGaWx0ZXIoKSBjb25zdCB7IHJl
dHVybiByZW5kZXJlcigpLT5oYXNGaWx0ZXIoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBmaWx0ZXJO
ZWVkc1JlcGFpbnQoKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDk1MDNhODI3NTMzNmQ3YzQ5NWU5NzNiZTc0MzIy
Njg1Y2JkNzU0YzEuLmU5MDYzZGRlMTY5ZTU3Y2E2NGJiZjNlNTA1MmUxOWFiOTEyZGExYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBA
IC0xMTk3LDEyICsxMTk3LDIyIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydEFuaW1h
dGlvbihkb3VibGUgdGltZU9mZnNldCwgY29uc3QgQW5pbWF0aW9uKiBhbmltCiB7CiAgICAgYm9v
bCBoYXNPcGFjaXR5ID0ga2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFj
aXR5KTsKICAgICBib29sIGhhc1RyYW5zZm9ybSA9IHJlbmRlcmVyKCktPmlzQm94KCkgJiYga2V5
ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOworI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29sIGhhc0ZpbHRlciA9IGtleWZyYW1lcy5jb250
YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0RmlsdGVyKTsKKyNlbmRpZgogICAgIAotICAg
IGlmICghaGFzT3BhY2l0eSAmJiAhaGFzVHJhbnNmb3JtKQorICAgIGlmICghaGFzT3BhY2l0eSAm
JiAhaGFzVHJhbnNmb3JtCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICAmJiAhaGFz
RmlsdGVyCisjZW5kaWYKKyAgICApCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBL
ZXlmcmFtZVZhbHVlTGlzdCB0cmFuc2Zvcm1WZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRy
YW5zZm9ybSk7CiAgICAgS2V5ZnJhbWVWYWx1ZUxpc3Qgb3BhY2l0eVZlY3RvcihBbmltYXRlZFBy
b3BlcnR5T3BhY2l0eSk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIEtleWZyYW1lVmFs
dWVMaXN0IGZpbHRlclZlY3RvcihBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKTsKKyNlbmRp
ZgogCiAgICAgc2l6ZV90IG51bUtleWZyYW1lcyA9IGtleWZyYW1lcy5zaXplKCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1LZXlmcmFtZXM7ICsraSkgewpAQCAtMTIyMiwxMCArMTIz
MiwxOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6c3RhcnRBbmltYXRpb24oZG91YmxlIHRp
bWVPZmZzZXQsIGNvbnN0IEFuaW1hdGlvbiogYW5pbQogICAgICAgICAKICAgICAgICAgaWYgKCho
YXNPcGFjaXR5ICYmIGlzRmlyc3RPckxhc3RLZXlmcmFtZSkgfHwgY3VycmVudEtleWZyYW1lLmNv
bnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5KSkKICAgICAgICAgICAgIG9wYWNpdHlW
ZWN0b3IuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKGtleSwga2V5ZnJhbWVTdHlsZS0+
b3BhY2l0eSgpLCB0ZikpOworCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICBpZiAo
KGhhc0ZpbHRlciAmJiBpc0ZpcnN0T3JMYXN0S2V5ZnJhbWUpIHx8IGN1cnJlbnRLZXlmcmFtZS5j
b250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0RmlsdGVyKSkKKyAgICAgICAgICAgIGZp
bHRlclZlY3Rvci5pbnNlcnQobmV3IEZpbHRlckFuaW1hdGlvblZhbHVlKGtleSwgJihrZXlmcmFt
ZVN0eWxlLT5maWx0ZXIoKSksIHRmKSk7CisjZW5kaWYKICAgICB9CiAKICAgICBib29sIGRpZEFu
aW1hdGVUcmFuc2Zvcm0gPSBmYWxzZTsKICAgICBib29sIGRpZEFuaW1hdGVPcGFjaXR5ID0gZmFs
c2U7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGJvb2wgZGlkQW5pbWF0ZUZpbHRlciA9
IGZhbHNlOworI2VuZGlmCiAgICAgCiAgICAgaWYgKGhhc1RyYW5zZm9ybSAmJiBtX2dyYXBoaWNz
TGF5ZXItPmFkZEFuaW1hdGlvbih0cmFuc2Zvcm1WZWN0b3IsIHRvUmVuZGVyQm94KHJlbmRlcmVy
KCkpLT5ib3JkZXJCb3hSZWN0KCkuc2l6ZSgpLCBhbmltLCBrZXlmcmFtZXMuYW5pbWF0aW9uTmFt
ZSgpLCB0aW1lT2Zmc2V0KSkgewogICAgICAgICBkaWRBbmltYXRlVHJhbnNmb3JtID0gdHJ1ZTsK
QEAgLTEyMzcsNyArMTI1NSwxOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6c3RhcnRBbmlt
YXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEFuaW1hdGlvbiogYW5pbQogICAgICAgICBj
b21wb3NpdG9yKCktPmRpZFN0YXJ0QWNjZWxlcmF0ZWRBbmltYXRpb24oQ1NTUHJvcGVydHlPcGFj
aXR5KTsKICAgICB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgaWYgKGhhc0ZpbHRl
ciAmJiBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihmaWx0ZXJWZWN0b3IsIExheW91dFNp
emUoKSwgYW5pbSwga2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUoKSwgdGltZU9mZnNldCkpIHsKKyAg
ICAgICAgZGlkQW5pbWF0ZUZpbHRlciA9IHRydWU7CisgICAgICAgIGNvbXBvc2l0b3IoKS0+ZGlk
U3RhcnRBY2NlbGVyYXRlZEFuaW1hdGlvbihDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcik7CisgICAg
fQorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgcmV0dXJuIGRpZEFuaW1h
dGVUcmFuc2Zvcm0gfHwgZGlkQW5pbWF0ZU9wYWNpdHkgfHwgZGlkQW5pbWF0ZUZpbHRlcjsKKyNl
bHNlCiAgICAgcmV0dXJuIGRpZEFuaW1hdGVUcmFuc2Zvcm0gfHwgZGlkQW5pbWF0ZU9wYWNpdHk7
CisjZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmFuaW1hdGlvblBhdXNlZChk
b3VibGUgdGltZU9mZnNldCwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQpAQCAtMTI1NCw2
ICsxMjgzLDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRyYW5zaXRpb24oZG91
YmxlIHRpbWVPZmZzZXQsIGludCBwcm9wZXJ0eSwgY29uc3QKIHsKICAgICBib29sIGRpZEFuaW1h
dGVPcGFjaXR5ID0gZmFsc2U7CiAgICAgYm9vbCBkaWRBbmltYXRlVHJhbnNmb3JtID0gZmFsc2U7
CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGJvb2wgZGlkQW5pbWF0ZUZpbHRlciA9IGZh
bHNlOworI2VuZGlmCisKICAgICBBU1NFUlQocHJvcGVydHkgIT0gY0FuaW1hdGVBbGwpOwogCiAg
ICAgaWYgKHByb3BlcnR5ID09IChpbnQpQ1NTUHJvcGVydHlPcGFjaXR5KSB7CkBAIC0xMjc4LDIw
ICsxMzExLDQ1IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRyYW5zaXRpb24oZG91
YmxlIHRpbWVPZmZzZXQsIGludCBwcm9wZXJ0eSwgY29uc3QKICAgICAgICAgICAgIHRyYW5zZm9y
bVZlY3Rvci5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZmcm9tU3R5bGUt
PnRyYW5zZm9ybSgpKSk7CiAgICAgICAgICAgICB0cmFuc2Zvcm1WZWN0b3IuaW5zZXJ0KG5ldyBU
cmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgxLCAmdG9TdHlsZS0+dHJhbnNmb3JtKCkpKTsKICAgICAg
ICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih0cmFuc2Zvcm1WZWN0b3Is
IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5ib3JkZXJCb3hSZWN0KCkuc2l6ZSgpLCB0cmFuc2Zv
cm1BbmltLCBHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihBbmltYXRl
ZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKSwgdGltZU9mZnNldCkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCB0cmFuc2Zvcm0gaXMgdmlzaWJsZSB3aGVu
IHRoZSBhbmltYXRpb24gZW5kcywgYWxzbyBzZXQgdGhlIGZpbmFsIG9wYWNpdHkuCisgICAgICAg
ICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgdHJhbnNmb3JtIGlzIHZpc2li
bGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRoZSBmaW5hbCB0cmFuc2Zvcm0u
CiAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0odG9TdHlsZSk7CiAgICAgICAg
ICAgICAgICAgZGlkQW5pbWF0ZVRyYW5zZm9ybSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgaWYgKHByb3BlcnR5
ID09IChpbnQpQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXIgJiYgbV9vd25pbmdMYXllci0+aGFzRmls
dGVyKCkpIHsKKyAgICAgICAgY29uc3QgQW5pbWF0aW9uKiBmaWx0ZXJBbmltID0gdG9TdHlsZS0+
dHJhbnNpdGlvbkZvclByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0RmlsdGVyKTsKKyAgICAgICAg
aWYgKGZpbHRlckFuaW0gJiYgIWZpbHRlckFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7
CisgICAgICAgICAgICBLZXlmcmFtZVZhbHVlTGlzdCBmaWx0ZXJWZWN0b3IoQW5pbWF0ZWRQcm9w
ZXJ0eVdlYmtpdEZpbHRlcik7CisgICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KG5ldyBG
aWx0ZXJBbmltYXRpb25WYWx1ZSgwLCAmZnJvbVN0eWxlLT5maWx0ZXIoKSkpOworICAgICAgICAg
ICAgZmlsdGVyVmVjdG9yLmluc2VydChuZXcgRmlsdGVyQW5pbWF0aW9uVmFsdWUoMSwgJnRvU3R5
bGUtPmZpbHRlcigpKSk7CisgICAgICAgICAgICBpZiAobV9ncmFwaGljc0xheWVyLT5hZGRBbmlt
YXRpb24oZmlsdGVyVmVjdG9yLCBMYXlvdXRTaXplKCksIGZpbHRlckFuaW0sIEdyYXBoaWNzTGF5
ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0
ZXIpLCB0aW1lT2Zmc2V0KSkgeworICAgICAgICAgICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IHRo
ZSBjb3JyZWN0IGZpbHRlciBpcyB2aXNpYmxlIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzLCBhbHNv
IHNldCB0aGUgZmluYWwgZmlsdGVyLgorICAgICAgICAgICAgICAgIHVwZGF0ZUxheWVyRmlsdGVy
cyh0b1N0eWxlKTsKKyAgICAgICAgICAgICAgICBkaWRBbmltYXRlRmlsdGVyID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKGRpZEFuaW1h
dGVPcGFjaXR5KQogICAgICAgICBjb21wb3NpdG9yKCktPmRpZFN0YXJ0QWNjZWxlcmF0ZWRBbmlt
YXRpb24oQ1NTUHJvcGVydHlPcGFjaXR5KTsKIAogICAgIGlmIChkaWRBbmltYXRlVHJhbnNmb3Jt
KQogICAgICAgICBjb21wb3NpdG9yKCktPmRpZFN0YXJ0QWNjZWxlcmF0ZWRBbmltYXRpb24oQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwogICAgIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
KyAgICBpZiAoZGlkQW5pbWF0ZUZpbHRlcikKKyAgICAgICAgY29tcG9zaXRvcigpLT5kaWRTdGFy
dEFjY2VsZXJhdGVkQW5pbWF0aW9uKENTU1Byb3BlcnR5V2Via2l0RmlsdGVyKTsKKyNlbmRpZgor
CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHJldHVybiBkaWRBbmltYXRlT3BhY2l0eSB8
fCBkaWRBbmltYXRlVHJhbnNmb3JtIHx8IGRpZEFuaW1hdGVGaWx0ZXI7CisjZWxzZQogICAgIHJl
dHVybiBkaWRBbmltYXRlT3BhY2l0eSB8fCBkaWRBbmltYXRlVHJhbnNmb3JtOworI2VuZGlmCiB9
CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp0cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSB0aW1l
T2Zmc2V0LCBpbnQgcHJvcGVydHkpCkBAIC0xMzUzLDYgKzE0MTEsMTMgQEAgaW50IFJlbmRlckxh
eWVyQmFja2luZzo6Z3JhcGhpY3NMYXllclRvQ1NTUHJvcGVydHkoQW5pbWF0ZWRQcm9wZXJ0eUlE
IHByb3BlcnR5KQogICAgICAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6
CiAgICAgICAgICAgICBjc3NQcm9wZXJ0eSA9IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZp
bHRlcjoKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgICAgICBjc3NQcm9wZXJ0eSA9
IENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOworI2Vsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBbmlt
YXRlZFByb3BlcnR5SW52YWxpZDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIH0KQEAgLTEzNjgsNiArMTQzMywxMCBAQCBBbmltYXRlZFByb3BlcnR5SUQgUmVuZGVyTGF5
ZXJCYWNraW5nOjpjc3NUb0dyYXBoaWNzTGF5ZXJQcm9wZXJ0eShpbnQgY3NzUHJvcGVydAogICAg
ICAgICAgICAgcmV0dXJuIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5OwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgogICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGVkUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3I7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOgorICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGVk
UHJvcGVydHlXZWJraXRGaWx0ZXI7CisjZW5kaWYKICAgICAgICAgLy8gSXQncyBmaW5lIGlmIHdl
IHNlZSBvdGhlciBjc3MgcHJvcGVydGllcyBoZXJlOyB0aGV5IGFyZSBqdXN0IG5vdCBhY2NlbGVy
YXRlZC4KICAgICB9CiAgICAgcmV0dXJuIEFuaW1hdGVkUHJvcGVydHlJbnZhbGlkOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IGZlYWJmMjdmODFiODAxZjk1MmMxOWI2OThmOWU2ODQ4ZWRiMTk0NDcuLjI0YWE3ZGVkMmNlNWY4
NGU5ZDc1NGZmOTI0YjgyOTkyNTliZmExMjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0w
Mi0wOCAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVt
ZW50IGhhcmR3YXJlIGFuaW1hdGlvbiBvZiBDU1MgZmlsdGVycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgxNTUKKworICAgICAgICBOZXcgdGVzdCBm
b3IgaGFyZHdhcmUgYW5pbWF0ZWQgZmlsdGVycywgY3JpYmJlZCBmcm9tIHNvZnR3YXJlIGFuaW1h
dGlvbiB0ZXN0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBjc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1ody1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGNzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWh3Lmh0bWw6IEFkZGVk
LgorCiAyMDEyLTAyLTA3ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICB1bmljb2RlLWJpZGk6cGxhaW50ZXh0IGlzIHN1cHBvc2VkIHRvIGJlIGVmZmVjdGl2
ZSBvbiBkaXNwbGF5OmlubGluZSBlbGVtZW50cyB0b28KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWh3LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWh3LWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zNjVmMDc0MGJjODhjMWQwM2Y5N2I1OWIxMjhiNGExZjNlMjA3ZTNiCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2ZpbHRlci1hbmltYXRpb24taHctZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKKyAgICAgICAgCitQQVNTIC0gIndlYmtpdEZpbHRl
ciIgcHJvcGVydHkgZm9yICJncmF5c2NhbGUtYm94IiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhp
bmcgY2xvc2UgdG86IGdyYXlzY2FsZSgwLjUpCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVy
dHkgZm9yICJzZXBpYS1ib3giIGVsZW1lbnQgYXQgMXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzog
c2VwaWEoMC41KQorUEFTUyAtICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5IGZvciAic2F0dXJhdGUt
Ym94IiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IHNhdHVyYXRlKDAuNSkK
K1BBU1MgLSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3IgImh1ZXJvdGF0ZS1ib3giIGVsZW1l
bnQgYXQgMXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogaHVlcm90YXRlKDkwZGVnKQorUEFTUyAt
ICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5IGZvciAiaW52ZXJ0LWJveCIgZWxlbWVudCBhdCAxcyBz
YXcgc29tZXRoaW5nIGNsb3NlIHRvOiBpbnZlcnQoMC41KQorUEFTUyAtICJ3ZWJraXRGaWx0ZXIi
IHByb3BlcnR5IGZvciAib3BhY2l0eS1ib3giIGVsZW1lbnQgYXQgMXMgc2F3IHNvbWV0aGluZyBj
bG9zZSB0bzogb3BhY2l0eSgwLjUpCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9y
ICJicmlnaHRuZXNzLWJveCIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBi
cmlnaHRuZXNzKDAuNSkKK1BBU1MgLSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3IgImNvbnRy
YXN0LWJveCIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBjb250cmFzdCgw
LjUpCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJibHVyLWJveCIgZWxlbWVu
dCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBibHVyKDEwcHgpCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWh3Lmh0bWwgYi9MYXlv
dXRUZXN0cy9jc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1ody5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjEwZGYyMGYxYzZmMzIwY2YzNDI1NGU4NmZlNzE4NDQ2Njk4ODY3NDkKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1ody5odG1sCkBA
IC0wLDAgKzEsMTQ0IEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKyAgPHN0
eWxlPgorICAgIC5ib3ggeworICAgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgICB3aWR0aDog
MTAwcHg7CisgICAgICAgIG1hcmdpbjogMTBweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
Ymx1ZTsKKyAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgICAtd2Via2l0LXRy
YW5zZm9ybTp0cmFuc2xhdGVaKDApOworICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlv
bjoycyAhaW1wb3J0YW50OworICAgIH0KKworICAgICNncmF5c2NhbGUtYm94IHsKKyAgICAgIC13
ZWJraXQtYW5pbWF0aW9uOiBncmF5c2NhbGUtYW5pbSAycyBsaW5lYXIKKyAgICB9CisKKyAgICAj
c2VwaWEtYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzZXBpYS1hbmltIDJzIGxpbmVh
cgorICAgIH0KKworICAgICNzYXR1cmF0ZS1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246
IHNhdHVyYXRlLWFuaW0gMnMgbGluZWFyCisgICAgfQorCisgICAgI2h1ZXJvdGF0ZS1ib3ggewor
ICAgICAgLXdlYmtpdC1hbmltYXRpb246IGh1ZXJvdGF0ZS1hbmltIDJzIGxpbmVhcgorICAgIH0K
KworICAgICNpbnZlcnQtYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbnZlcnQtYW5p
bSAycyBsaW5lYXIKKyAgICB9CisKKyAgICAjb3BhY2l0eS1ib3ggeworICAgICAgLXdlYmtpdC1h
bmltYXRpb246IG9wYWNpdHktYW5pbSAycyBsaW5lYXIKKyAgICB9CisKKyAgICAjYnJpZ2h0bmVz
cy1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IGJyaWdodG5lc3MtYW5pbSAycyBsaW5l
YXIKKyAgICB9CisKKyAgICAjY29udHJhc3QtYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9u
OiBjb250cmFzdC1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNibHVyLWJveCB7CisgICAg
ICAtd2Via2l0LWFuaW1hdGlvbjogYmx1ci1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNk
cm9wc2hhZG93LWJveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZHJvcHNoYWRvdy1hbmlt
IDJzIGxpbmVhcgorICAgIH0KKworCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIGdyYXlzY2FsZS1h
bmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBncmF5c2NhbGUoMCk7IH0KKyAg
ICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBncmF5c2NhbGUoMSk7IH0KKyAgICB9CisKKyAg
ICBALXdlYmtpdC1rZXlmcmFtZXMgc2VwaWEtYW5pbSB7CisgICAgICAgIGZyb20geyAtd2Via2l0
LWZpbHRlcjogc2VwaWEoMCk7IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBzZXBp
YSgxKTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtleWZyYW1lcyBzYXR1cmF0ZS1hbmltIHsK
KyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBzYXR1cmF0ZSgwKTsgfQorICAgICAgICB0
byAgIHsgLXdlYmtpdC1maWx0ZXI6IHNhdHVyYXRlKDEpOyB9CisgICAgfQorCisgICAgQC13ZWJr
aXQta2V5ZnJhbWVzIGh1ZXJvdGF0ZS1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmls
dGVyOiBodWUtcm90YXRlKDApOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRlcjogaHVl
LXJvdGF0ZSgxODBkZWcpOyB9CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIGludmVy
dC1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMCk7IH0KKyAg
ICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMSk7IH0KKyAgICB9CisKKyAgICBA
LXdlYmtpdC1rZXlmcmFtZXMgb3BhY2l0eS1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQt
ZmlsdGVyOiBvcGFjaXR5KDEpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRlcjogb3Bh
Y2l0eSgwKTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtleWZyYW1lcyBicmlnaHRuZXNzLWFu
aW0geworICAgICAgICBmcm9tIHsgLXdlYmtpdC1maWx0ZXI6IGJyaWdodG5lc3MoMSk7IH0KKyAg
ICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBicmlnaHRuZXNzKDApOyB9CisgICAgfQorCisg
ICAgQC13ZWJraXQta2V5ZnJhbWVzIGNvbnRyYXN0LWFuaW0geworICAgICAgICBmcm9tIHsgLXdl
YmtpdC1maWx0ZXI6IGNvbnRyYXN0KDEpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRl
cjogY29udHJhc3QoMCk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgYmx1ci1h
bmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBibHVyKDApOyB9CisgICAgICAg
IHRvICAgeyAtd2Via2l0LWZpbHRlcjogYmx1cigyMHB4KTsgfQorICAgIH0KKworICAgIEAtd2Vi
a2l0LWtleWZyYW1lcyBkcm9wc2hhZG93LWFuaW0geworICAgICAgICBmcm9tIHsgLXdlYmtpdC1m
aWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAwIHRyYW5zcGFyZW50KTsgfQorICAgICAgICB0byAgIHsg
LXdlYmtpdC1maWx0ZXI6IGRyb3Atc2hhZG93KDIwcHggMzBweCAxMHB4IGJsYWNrKSk7IH0KKyAg
ICB9CisKKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4uL2FuaW1hdGlvbnMvcmVzb3Vy
Y2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCI+CisgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSBbCisgICAgICAv
LyBbYW5pbWF0aW9uLW5hbWUsIHRpbWUsIGVsZW1lbnQtaWQsIHByb3BlcnR5LCBleHBlY3RlZC12
YWx1ZSwgdG9sZXJhbmNlXQorICAgICAgWyJncmF5c2NhbGUtYW5pbSIsICAxLCAiZ3JheXNjYWxl
LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnZ3JheXNjYWxlKDAuNSknLCAwLjA1XSwKKyAgICAgIFsi
c2VwaWEtYW5pbSIsICAxLCAic2VwaWEtYm94IiwgIndlYmtpdEZpbHRlciIsICdzZXBpYSgwLjUp
JywgMC4wNV0sCisgICAgICBbInNhdHVyYXRlLWFuaW0iLCAgMSwgInNhdHVyYXRlLWJveCIsICJ3
ZWJraXRGaWx0ZXIiLCAnc2F0dXJhdGUoMC41KScsIDAuMDVdLAorICAgICAgWyJodWVyb3RhdGUt
YW5pbSIsICAxLCAiaHVlcm90YXRlLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnaHVlcm90YXRlKDkw
ZGVnKScsIDJdLAorICAgICAgWyJpbnZlcnQtYW5pbSIsICAxLCAiaW52ZXJ0LWJveCIsICJ3ZWJr
aXRGaWx0ZXIiLCAnaW52ZXJ0KDAuNSknLCAwLjA1XSwKKyAgICAgIFsib3BhY2l0eS1hbmltIiwg
IDEsICJvcGFjaXR5LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnb3BhY2l0eSgwLjUpJywgMC4wNV0s
CisgICAgICBbImJyaWdodG5lc3MtYW5pbSIsICAxLCAiYnJpZ2h0bmVzcy1ib3giLCAid2Via2l0
RmlsdGVyIiwgJ2JyaWdodG5lc3MoMC41KScsIDAuMDVdLAorICAgICAgWyJjb250cmFzdC1hbmlt
IiwgIDEsICJjb250cmFzdC1ib3giLCAid2Via2l0RmlsdGVyIiwgJ2NvbnRyYXN0KDAuNSknLCAw
LjA1XSwKKyAgICAgIFsiYmx1ci1hbmltIiwgIDEsICJibHVyLWJveCIsICJ3ZWJraXRGaWx0ZXIi
LCAnYmx1cigxMHB4KScsIDFdLAorICAgICAgLy8gRklYTUUgd2hlbiB3ZSBpbXBsZW1lbnQgY29t
cHV0ZWQgZmlsdGVyIHN0eWxlIGZvciBkcm9wLXNoYWRvdy4KKyAgICAgIC8vIFsiZHJvcHNoYWRv
dy1hbmltIiwgIDEsICJkcm9wc2hhZG93LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnZHJvcC1zaGFk
b3cocmdiYSgwLCAwLCAwLCAwLjUpIDEwcHggMTVweCA1cHggKScsIDJdLAorICAgIF07CisgICAg
CisgICAgcnVuQW5pbWF0aW9uVGVzdChleHBlY3RlZFZhbHVlcyk7CisgIDwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+CisKKzxkaXYgY2xhc3M9ImJveCIgaWQ9ImdyYXlzY2FsZS1ib3giPjwvZGl2
PgorPGRpdiBjbGFzcz0iYm94IiBpZD0ic2VwaWEtYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJv
eCIgaWQ9InNhdHVyYXRlLWJveCI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJib3giIGlkPSJodWVyb3Rh
dGUtYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9ImludmVydC1ib3giPjwvZGl2Pgor
PGRpdiBjbGFzcz0iYm94IiBpZD0ib3BhY2l0eS1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94
IiBpZD0iYnJpZ2h0bmVzcy1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0iY29udHJh
c3QtYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9ImJsdXItYm94Ij48L2Rpdj4KKzwh
LS0gPGRpdiBjbGFzcz0iYm94IiBpZD0iZHJvcHNoYWRvdy1ib3giPjwvZGl2PiAtLT4KKworPGRp
diBpZD0icmVzdWx0Ij4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126393</attachid>
            <date>2012-02-09 15:51:30 -0800</date>
            <delta_ts>2012-02-09 18:11:00 -0800</delta_ts>
            <desc>Patch with review changes, crash fixes and tests for more cases</desc>
            <filename>bug-78155-20120209155129.patch</filename>
            <type>text/plain</type>
            <size>91379</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MDA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzcxYTI0OGQ1Y2ZhYTQ1
YjEwMmIxZGZmNmE3YjY5YWFhY2UxZTZiNC4uNmI2MDcxYTRmNzgzYWFiODM1MzNjMDRkMzZhN2Zi
YzkyNTQ5N2YwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDEyLTAyLTA5ICBDaHJp
cyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgaGFyZHdh
cmUgYW5pbWF0aW9uIG9mIENTUyBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03ODE1NQorCisgICAgICAgIEFkZGVkIGxvZ2ljIHRvIFBsYXRm
b3JtQ0FBbmltYXRpb24gdG8gcmV0dXJuIGVub3VnaCBpbmZvcm1hdGlvbgorICAgICAgICB0byBH
cmFwaGljc0xheWVyQ0EgdG8gYmUgYWJsZSB0byBjb25zdHJ1Y3QgYSBrZXlQYXRoIGFuaW1hdGlv
bgorICAgICAgICBmb3IgZWFjaCBmaWx0ZXIgcHJvcGVydHkuIFNvbWUgZmlsdGVycyBuZWVkIHRv
IGFuaW1hdGUgbXVsdGlwbGUKKyAgICAgICAgcHJvcGVydGllcyBwZXIgZmlsdGVyLCBzbyBQbGF0
Zm9ybUNBQW5pbWF0aW9uIGFsc28gcmV0dXJucyB0aGUgbnVtYmVyCisgICAgICAgIG9mIHByb3Bl
cnRpZXMgcGVyIGZpbHRlciBhbmQgdGhlbiBhbiBhbmltYXRpb24gaXMgY29uc3RydWN0ZWQgZm9y
IAorICAgICAgICBlYWNoIG9uZS4gQWxzbyBhZGRlZCBhbGwgdGhlIHN1cHBvcnQgbG9naWMgdG8g
aGFuZGxlIGhhcmR3YXJlIGZpbHRlcgorICAgICAgICBhbmltYXRpb24gaW4gdGhlIGhpZ2hlciBs
ZXZlbCBsb2dpYywganVzdCBsaWtlIHdlIGRvIGZvciB0cmFuc2Zvcm1zIGFuZAorICAgICAgICBv
cGFjaXR5LgorCisgICAgICAgIEFsc28gc3R1YmJlZCBvdXQgbmV3IFBsYXRmb3JtQ0FBbmltYXRp
b24gZnVuY3Rpb25zIGZvciBXaW5kb3dzLiBXZSBkb24ndCB5ZXQKKyAgICAgICAgc3VwcG9ydCBo
YXJkd2FyZSBmaWx0ZXJzIG9uIFdpbmRvd3MuCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3RzOiBjc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1m
cm9tLW5vbmUtaHcuaHRtbAorICAgICAgICAgICAgICAgY3NzMy9maWx0ZXJzL2ZpbHRlci1hbmlt
YXRpb24tZnJvbS1ub25lLW11bHRpLWh3Lmh0bWwKKyAgICAgICAgICAgICAgIGNzczMvZmlsdGVy
cy9maWx0ZXItYW5pbWF0aW9uLWZyb20tbm9uZS1tdWx0aS5odG1sCisgICAgICAgICAgICAgICBj
c3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1ody5odG1sCisgICAgICAgICAgICAgICBjc3Mz
L2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1tdWx0aS1ody5odG1sCisgICAgICAgICAgICAgICBj
c3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1tdWx0aS5odG1sCisKKyAgICAgICAgKiBwYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRGaWx0ZXI6OlByb3BlcnR5V3JhcHBlckFjY2VsZXJh
dGVkRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVk
RmlsdGVyOjphbmltYXRpb25Jc0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3Bl
cnR5V3JhcHBlckFjY2VsZXJhdGVkRmlsdGVyOjpibGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpB
bmltYXRpb25CYXNlOjplbnN1cmVQcm9wZXJ0eU1hcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbHRlck9wZXJhdGlvbnNBdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyOjp2YWxpZGF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRmlsdGVy
QW5pbWF0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQW5pbWF0aW9uVmFsdWU6
OkZpbHRlckFuaW1hdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckFuaW1hdGlv
blZhbHVlOjpjbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJBbmltYXRpb25WYWx1ZTo6
dmFsdWUpOgorICAgICAgICAoR3JhcGhpY3NMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eUlkVG9T
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmFkZEFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZUFuaW1hdGlv
bkZyb21LZXlmcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjphcHBl
bmRUb1VuY29tbWl0dGVkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlRmlsdGVyQW5pbWF0aW9uc0Zyb21LZXlm
cmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpjcmVhdGVCYXNpY0Fu
aW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZUtleWZy
YW1lQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6c2V0Rmls
dGVyQW5pbWF0aW9uRW5kcG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
QTo6c2V0RmlsdGVyQW5pbWF0aW9uS2V5ZnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDQTo6c3dhcEZyb21PclRvVGlsZWRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ0E6OmNsb25lTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5oOgorICAgICAgICAoR3JhcGhpY3NMYXllckNBKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmg6CisgICAgICAg
IChQbGF0Zm9ybUNBQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbToKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRp
b246OnNldEZyb21WYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRUb1Zh
bHVlKToKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFZhbHVlcyk6CisgICAgICAg
IChQbGF0Zm9ybUNBQW5pbWF0aW9uOjpudW1BbmltYXRlZEZpbHRlclByb3BlcnRpZXMpOgorICAg
ICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbjo6YW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0eU5hbWUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
LmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb246OnNldEZyb21WYWx1ZSk6CisgICAg
ICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRUb1ZhbHVlKToKKyAgICAgICAgKFBsYXRmb3Jt
Q0FBbmltYXRpb246OnNldFZhbHVlcyk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uOjpu
dW1BbmltYXRlZEZpbHRlclByb3BlcnRpZXMpOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlv
bjo6YW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0eU5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgIChGaWx0ZXJPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjppc0RlZmF1bHQpOgorICAgICAg
ICAoRGVmYXVsdEZpbHRlck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWZhdWx0Rmls
dGVyT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdEZpbHRlck9w
ZXJhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZhdWx0RmlsdGVyT3Bl
cmF0aW9uOjppc0RlZmF1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdEZpbHRlck9wZXJh
dGlvbjo6RGVmYXVsdEZpbHRlck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpoYXNGaWx0ZXIpOgorICAgICAgICAoUmVuZGVyTGF5ZXIpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjpzdGFydEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OnN0YXJ0VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OmdyYXBoaWNzTGF5ZXJUb0NTU1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQmFja2luZzo6Y3NzVG9HcmFwaGljc0xheWVyUHJvcGVydHkpOgorCiAyMDEy
LTAyLTA3ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZW5hbWUgW3Y4T25Qcm90b10gSURMIGF0dHJpYnV0ZSB0byBbVjhPblByb3RvXSBJREwgYXR0cmli
dXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25C
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3Bw
CmluZGV4IGUzYWQ5MmZhMGRhNWQxMTgyOGU0NDFhMGZmZTI2OTdiMWYxMGYwMzIuLjM1ZTIxZjEw
NDRmMWY1YjZkYzE5NDM2YTE2YmY1Yjc2ZmE1YmI4MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCkBAIC00NTEsNiArNDUxLDIzIEBAIHB1
YmxpYzoKICAgICAgICAgZHN0LT5zZXRUcmFuc2Zvcm0oYmxlbmRGdW5jKGFuaW0sIGEtPnRyYW5z
Zm9ybSgpLCBiLT50cmFuc2Zvcm0oKSwgcHJvZ3Jlc3MpKTsKICAgICB9CiB9OworCisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQorY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRGaWx0ZXIg
OiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPiB7CitwdWJs
aWM6CisgICAgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRGaWx0ZXIoKQorICAgICAgICA6IFBy
b3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlXZWJraXRG
aWx0ZXIsICZSZW5kZXJTdHlsZTo6ZmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEZpbHRlcikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBhbmltYXRpb25Jc0FjY2VsZXJhdGVk
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0
IEFuaW1hdGlvbkJhc2UqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdAorICAgIHsK
KyAgICAgICAgZHN0LT5zZXRGaWx0ZXIoYmxlbmRGdW5jKGFuaW0sIGEtPmZpbHRlcigpLCBiLT5m
aWx0ZXIoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9OworI2VuZGlmCiAjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBzaGFkb3dMaXN0
TGVuZ3RoKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykKQEAgLTEwMjUsMTQgKzEwNDIsMTYgQEAg
dm9pZCBBbmltYXRpb25CYXNlOjplbnN1cmVQcm9wZXJ0eU1hcCgpCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQ
cm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZE9wYWNpdHkoKSk7CiAgICAgICAgIGdQcm9wZXJ0eVdy
YXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkVHJhbnNmb3JtKCkp
OworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFw
cGVuZChuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRGaWx0ZXIoKSk7CisjZW5kaWYKICNl
bHNlCiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlPcGFjaXR5LCAmUmVuZGVyU3R5bGU6Om9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6c2V0T3BhY2l0eSkpOwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyY+KENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybSwgJlJlbmRlclN0eWxl
OjpzZXRUcmFuc2Zvcm0pKTsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAg
ICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyY+KENTU1Byb3BlcnR5V2Via2l0RmlsdGVyLCAmUmVuZGVyU3R5bGU6
OmZpbHRlciwgJlJlbmRlclN0eWxlOjpzZXRGaWx0ZXIpKTsKICNlbmRpZgorI2VuZGlmCiAKICAg
ICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRl
ZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3IsIE1heWJlSW52
YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpz
ZXRDb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDb2x1bW5SdWxlQ29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3IpKTsKICAgICAg
ICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFm
ZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IsIE1heWJlSW52YWxp
ZENvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRU
ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5kZXgg
YzdhMjI3NTViMDFjOWM0OGIzZGYwNmE1NjYzZjkxNjBkN2NlMzlkNy4uODFhMzM5MjdhOTQ3OTVm
NDgxYzVmOGYzZmQ0Njg2NjUwNTQ0ZGY5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKQEAgLTM4MCw2ICszODAsNDYgQEAgdm9p
ZCBHcmFwaGljc0xheWVyOjpzZXRHcmFwaGljc0xheWVyRmFjdG9yeShHcmFwaGljc0xheWVyOjpH
cmFwaGljc0xheWVyRmFjdG9yeQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
CitzdGF0aWMgaW5saW5lIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMqIGZpbHRlck9wZXJhdGlvbnNB
dChjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBzaXplX3QgaW5kZXgpCit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4odmFsdWVM
aXN0LmF0KGluZGV4KSktPnZhbHVlKCk7Cit9CisKK2ludCBHcmFwaGljc0xheWVyOjp2YWxpZGF0
ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCkKK3sK
KyAgICBBU1NFUlQodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dEZpbHRlcik7CisKKyAgICBpZiAodmFsdWVMaXN0LnNpemUoKSA8IDIpCisgICAgICAgIHJldHVy
biAtMTsKKworICAgIC8vIEVtcHR5IGZpbHRlcnMgbWF0Y2ggYW55dGhpbmcsIHNvIGZpbmQgdGhl
IGZpcnN0IG5vbi1lbXB0eSBlbnRyeSBhcyB0aGUgcmVmZXJlbmNlCisgICAgc2l6ZV90IGZpcnN0
SW5kZXggPSAwOworICAgIGZvciAoIDsgZmlyc3RJbmRleCA8IHZhbHVlTGlzdC5zaXplKCk7ICsr
Zmlyc3RJbmRleCkgeworICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uc0F0KHZhbHVlTGlzdCwg
Zmlyc3RJbmRleCktPm9wZXJhdGlvbnMoKS5zaXplKCkgPiAwKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgaWYgKGZpcnN0SW5kZXggPj0gdmFsdWVMaXN0LnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIC0xOworCisgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyogZmlyc3RWYWwgPSBm
aWx0ZXJPcGVyYXRpb25zQXQodmFsdWVMaXN0LCBmaXJzdEluZGV4KTsKKyAgICAKKyAgICBmb3Ig
KHNpemVfdCBpID0gZmlyc3RJbmRleCArIDE7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyogdmFsID0gZmlsdGVyT3BlcmF0aW9uc0F0
KHZhbHVlTGlzdCwgaSk7CisgICAgICAgIAorICAgICAgICAvLyBBbiBlbXRweSBmaWx0ZXIgbGlz
dCBtYXRjaGVzIGFueXRoaW5nLgorICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25zKCkuaXNFbXB0
eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAoIWZpcnN0
VmFsLT5vcGVyYXRpb25zTWF0Y2goKnZhbCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg
fQorICAgIAorICAgIHJldHVybiBmaXJzdEluZGV4OworfQorI2VuZGlmCisKIC8vIEFuICJpbnZh
bGlkIiBsaXN0IGlzIG9uZSB3aG9zZSBmdW5jdGlvbnMgZG9uJ3QgbWF0Y2gsIGFuZCB0aGVyZWZv
cmUgaGFzIHRvIGJlIGFuaW1hdGVkIGFzIGEgTWF0cml4CiAvLyBUaGUgaGFzQmlnUm90YXRpb24g
ZmxhZyB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UgaWYgaXNWYWxpZCBpcyBmYWxzZS4gT3RoZXJ3
aXNlIGhhc0JpZ1JvdGF0aW9uIGlzIAogLy8gdHJ1ZSBpZiB0aGUgcm90YXRpb24gYmV0d2VlbiBh
bnkgdHdvIGtleWZyYW1lcyBpcyA+PSAxODAgZGVncmVlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAppbmRleCA5Zjc1NjI0ZmZjMTdmYWNh
NWYwMjIxYTFlZmNiY2M4MWEyMjc2MDM2Li5kYWJiZGFmMWUxYjkwMzQ4NmI5MTM3MDU2ZGZkNzc0
M2U4NGM5ZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllci5oCkBAIC0xNTMsNiArMTUzLDI1IEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3Jt
T3BlcmF0aW9ucyBtX3ZhbHVlOwogfTsKIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKy8vIFVz
ZWQgdG8gc3RvcmUgb25lIGZpbHRlciB2YWx1ZSBpbiBhIGtleWZyYW1lIGxpc3QuCitjbGFzcyBG
aWx0ZXJBbmltYXRpb25WYWx1ZSA6IHB1YmxpYyBBbmltYXRpb25WYWx1ZSB7CitwdWJsaWM6Cisg
ICAgRmlsdGVyQW5pbWF0aW9uVmFsdWUoZmxvYXQga2V5VGltZSwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyogdmFsdWUgPSAwLCBQYXNzUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlv
biA9IDApCisgICAgICAgIDogQW5pbWF0aW9uVmFsdWUoa2V5VGltZSwgdGltaW5nRnVuY3Rpb24p
CisgICAgeworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBtX3ZhbHVlID0gKnZhbHVl
OworICAgIH0KKyAgICB2aXJ0dWFsIEFuaW1hdGlvblZhbHVlKiBjbG9uZSgpIGNvbnN0IHsgcmV0
dXJuIG5ldyBGaWx0ZXJBbmltYXRpb25WYWx1ZSgqdGhpcyk7IH0KKworICAgIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gJm1fdmFsdWU7IH0KKworcHJpdmF0
ZToKKyAgICBGaWx0ZXJPcGVyYXRpb25zIG1fdmFsdWU7Cit9OworI2VuZGlmCisKIC8vIFVzZWQg
dG8gc3RvcmUgYSBzZXJpZXMgb2YgdmFsdWVzIGluIGEga2V5ZnJhbWUgbGlzdC4gVmFsdWVzIHdp
bGwgYWxsIGJlIG9mIHRoZSBzYW1lIHR5cGUsCiAvLyB3aGljaCBjYW4gYmUgaW5mZXJyZWQgZnJv
bSB0aGUgcHJvcGVydHkuCiBjbGFzcyBLZXlmcmFtZVZhbHVlTGlzdCB7CkBAIC00MjQsNiArNDQz
LDkgQEAgcHJvdGVjdGVkOgogICAgIC8vIHdoZW4gY29tcG9zaXRpbmcgaXMgbm90IGRvbmUgaW4g
aGFyZHdhcmUuIEl0IGlzIG5vdCB2aXJ0dWFsLCBzbyB0aGUgY2FsbGVyCiAgICAgLy8gbmVlZHMg
dG8gbm90aWZpeSB0aGUgY2hhbmdlIHRvIHRoZSBwbGF0Zm9ybSBsYXllciBhcyBuZWVkZWQuCiAg
ICAgdm9pZCBjbGVhckZpbHRlcnMoKSB7IG1fZmlsdGVycy5jbGVhcigpOyB9CisKKyAgICAvLyBH
aXZlbiBhIEtleWZyYW1lVmFsdWVMaXN0IGNvbnRhaW5pbmcgZmlsdGVyT3BlcmF0aW9ucywgcmV0
dXJuIHRydWUgaWYgdGhlIG9wZXJhdGlvbnMgYXJlIHZhbGlkLgorICAgIHN0YXRpYyBpbnQgdmFs
aWRhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jik7CiAjZW5kaWYK
IAogICAgIC8vIEdpdmVuIGEgbGlzdCBvZiBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZXMsIHNlZSBp
ZiBhbGwgdGhlIG9wZXJhdGlvbnMgZm9yIGVhY2gga2V5ZnJhbWUgbWF0Y2guIElmIHNvCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xp
ZW50LmgKaW5kZXggODEyNzJkZGJlM2JlOWZlYmVkYzc3NzNmZjYxYWZlMmY0YTUyMDMzNS4uNDA1
OGI2NWYwOTk1MTBlODMxMjU3NDc4NTQ5MzczMjM1MjNhYzVjYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaApAQCAt
NDcsNyArNDcsOCBAQCBlbnVtIEFuaW1hdGVkUHJvcGVydHlJRCB7CiAgICAgQW5pbWF0ZWRQcm9w
ZXJ0eUludmFsaWQsCiAgICAgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwKICAgICBB
bmltYXRlZFByb3BlcnR5T3BhY2l0eSwKLSAgICBBbmltYXRlZFByb3BlcnR5QmFja2dyb3VuZENv
bG9yCisgICAgQW5pbWF0ZWRQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwKKyAgICBBbmltYXRlZFBy
b3BlcnR5V2Via2l0RmlsdGVyCiB9OwogCiBjbGFzcyBHcmFwaGljc0xheWVyQ2xpZW50IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5
ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwCmluZGV4IGFkM2FjMDRhMmZiYzA3MTQ5MDVjYjkwODQxZWMzMTc4MTBmYmNhYjIu
LmVhOWJhMmE5N2MxNzdjMjI4ZWNiNmE1ODUxMjEzYjkyZWYyNmIxN2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNw
cApAQCAtMjExLDYgKzIxMSwxMiBAQCBzdGF0aWMgU3RyaW5nIHByb3BlcnR5SWRUb1N0cmluZyhB
bmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkpCiAgICAgICAgIHJldHVybiAib3BhY2l0eSI7CiAg
ICAgY2FzZSBBbmltYXRlZFByb3BlcnR5QmFja2dyb3VuZENvbG9yOgogICAgICAgICByZXR1cm4g
ImJhY2tncm91bmRDb2xvciI7CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVy
OgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICAgICAgcmV0dXJuICJmaWx0ZXJzIjsKKyNl
bHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCiAgICAgY2FzZSBBbmlt
YXRlZFByb3BlcnR5SW52YWxpZDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQpAQCAtNDQ0LDcgKzQ1MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5TGF5
ZXJBbmltYXRpb24oTW92ZU9yQ29weSBvcGVyYXRpb24sIGNvbnN0IFN0cmluCiAgICAgfQogfQog
Ci12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6bW92ZU9yQ29weUFuaW1hdGlvbnNGb3JQcm9wZXJ0eShN
b3ZlT3JDb3B5IG9wZXJhdGlvbiwgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBQbGF0Zm9y
bUNBTGF5ZXIgKmZyb21MYXllciwgUGxhdGZvcm1DQUxheWVyICp0b0xheWVyKQordm9pZCBHcmFw
aGljc0xheWVyQ0E6Om1vdmVPckNvcHlBbmltYXRpb25zKE1vdmVPckNvcHkgb3BlcmF0aW9uLCBQ
bGF0Zm9ybUNBTGF5ZXIgKmZyb21MYXllciwgUGxhdGZvcm1DQUxheWVyICp0b0xheWVyKQogewog
ICAgIC8vIExvb2sgZm9yIHJ1bm5pbmcgYW5pbWF0aW9ucyBhZmZlY3RpbmcgdGhpcyBwcm9wZXJ0
eS4KICAgICBBbmltYXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3J1bm5pbmdBbmlt
YXRpb25zLmVuZCgpOwpAQCAtNDUzLDcgKzQ1OSwxMyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
bW92ZU9yQ29weUFuaW1hdGlvbnNGb3JQcm9wZXJ0eShNb3ZlT3JDb3B5IG9wZXJhdGlvbiwgQW5p
bQogICAgICAgICBzaXplX3QgbnVtQW5pbWF0aW9ucyA9IHByb3BlcnR5QW5pbWF0aW9ucy5zaXpl
KCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQW5pbWF0aW9uczsgKytpKSB7
CiAgICAgICAgICAgICBjb25zdCBMYXllclByb3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5pbWF0aW9u
ID0gcHJvcGVydHlBbmltYXRpb25zW2ldOwotICAgICAgICAgICAgaWYgKGN1cnJBbmltYXRpb24u
bV9wcm9wZXJ0eSA9PSBwcm9wZXJ0eSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGN1
cnJBbmltYXRpb24ubV9wcm9wZXJ0eSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3Jt
IHx8IGN1cnJBbmltYXRpb24ubV9wcm9wZXJ0eSA9PSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eQor
ICAgICAgICAgICAgICAgICAgICB8fCBjdXJyQW5pbWF0aW9uLm1fcHJvcGVydHkgPT0gQW5pbWF0
ZWRQcm9wZXJ0eUJhY2tncm91bmRDb2xvcgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICAg
ICAgICAgICAgICAgICAgfHwgY3VyckFuaW1hdGlvbi5tX3Byb3BlcnR5ID09IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRGaWx0ZXIKKyNlbmRpZgorICAgICAgICAgICAgICAgICkKICAgICAgICAgICAg
ICAgICBtb3ZlT3JDb3B5TGF5ZXJBbmltYXRpb24ob3BlcmF0aW9uLCBhbmltYXRpb25JZGVudGlm
aWVyKGN1cnJBbmltYXRpb24ubV9uYW1lLCBjdXJyQW5pbWF0aW9uLm1fcHJvcGVydHksIGN1cnJB
bmltYXRpb24ubV9pbmRleCksIGZyb21MYXllciwgdG9MYXllcik7CiAgICAgICAgIH0KICAgICB9
CkBAIC02NDgsNiArNjYwLDEwIEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjphZGRBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50CiAgICAgYm9vbCBj
cmVhdGVkQW5pbWF0aW9ucyA9IGZhbHNlOwogICAgIGlmICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9
PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQogICAgICAgICBjcmVhdGVkQW5pbWF0
aW9ucyA9IGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKHZhbHVlTGlzdCwg
YW5pbSwgYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCwgYm94U2l6ZSk7CisjaWYgRU5BQkxFKENT
U19GSUxURVJTKQorICAgIGVsc2UgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVk
UHJvcGVydHlXZWJraXRGaWx0ZXIpCisgICAgICAgIGNyZWF0ZWRBbmltYXRpb25zID0gY3JlYXRl
RmlsdGVyQW5pbWF0aW9uc0Zyb21LZXlmcmFtZXModmFsdWVMaXN0LCBhbmltLCBhbmltYXRpb25O
YW1lLCB0aW1lT2Zmc2V0KTsKKyNlbmRpZgogICAgIGVsc2UKICAgICAgICAgY3JlYXRlZEFuaW1h
dGlvbnMgPSBjcmVhdGVBbmltYXRpb25Gcm9tS2V5ZnJhbWVzKHZhbHVlTGlzdCwgYW5pbSwgYW5p
bWF0aW9uTmFtZSwgdGltZU9mZnNldCk7CiAKQEAgLTEyOTksOCArMTMxNSw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0dXJhbExheWVyUHVycG9z
ZSBwdXJwb3NlLCBmbG9hCiAgICAgICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmFsTGF5ZXItPnN1
cGVybGF5ZXIoKSk7CiAgICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllci0+c3VwZXJsYXllcigp
LT5yZXBsYWNlU3VibGF5ZXIobV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCksIG1fbGF5ZXIuZ2V0KCkp
OwogCi0gICAgICAgICAgICBtb3ZlT3JDb3B5QW5pbWF0aW9uc0ZvclByb3BlcnR5KE1vdmUsIEFu
aW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0sIG1fc3RydWN0dXJhbExheWVyLmdldCgpLCBt
X2xheWVyLmdldCgpKTsKLSAgICAgICAgICAgIG1vdmVPckNvcHlBbmltYXRpb25zRm9yUHJvcGVy
dHkoTW92ZSwgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHksIG1fc3RydWN0dXJhbExheWVyLmdldCgp
LCBtX2xheWVyLmdldCgpKTsKKyAgICAgICAgICAgIG1vdmVPckNvcHlBbmltYXRpb25zKE1vdmUs
IG1fc3RydWN0dXJhbExheWVyLmdldCgpLCBtX2xheWVyLmdldCgpKTsKIAogICAgICAgICAgICAg
Ly8gUmVsZWFzZSB0aGUgc3RydWN0dXJhbCBsYXllci4KICAgICAgICAgICAgIG1fc3RydWN0dXJh
bExheWVyID0gMDsKQEAgLTEzODAsOCArMTM5NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpl
bnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0dXJhbExheWVyUHVycG9zZSBwdXJwb3NlLCBmbG9h
CiAgICAgbV9sYXllci0+c3VwZXJsYXllcigpLT5yZXBsYWNlU3VibGF5ZXIobV9sYXllci5nZXQo
KSwgbV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkpOwogICAgIG1fc3RydWN0dXJhbExheWVyLT5hcHBl
bmRTdWJsYXllcihtX2xheWVyLmdldCgpKTsKIAotICAgIG1vdmVPckNvcHlBbmltYXRpb25zRm9y
UHJvcGVydHkoTW92ZSwgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwgbV9sYXllci5n
ZXQoKSwgbV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkpOwotICAgIG1vdmVPckNvcHlBbmltYXRpb25z
Rm9yUHJvcGVydHkoTW92ZSwgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHksIG1fbGF5ZXIuZ2V0KCks
IG1fc3RydWN0dXJhbExheWVyLmdldCgpKTsKKyAgICBtb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3Zl
LCBtX2xheWVyLmdldCgpLCBtX3N0cnVjdHVyYWxMYXllci5nZXQoKSk7CiAgICAgCiAgICAgdXBk
YXRlU3VibGF5ZXJMaXN0KCk7CiAgICAgdXBkYXRlT3BhY2l0eU9uTGF5ZXIoKTsKQEAgLTE3NDQs
NyArMTc1OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c05lZWRzRGlz
cGxheSgpCiAKIGJvb2wgR3JhcGhpY3NMYXllckNBOjpjcmVhdGVBbmltYXRpb25Gcm9tS2V5ZnJh
bWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiog
YW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0
KQogewotICAgIEFTU0VSVCh2YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5
V2Via2l0VHJhbnNmb3JtKTsKKyAgICBBU1NFUlQodmFsdWVMaXN0LnByb3BlcnR5KCkgIT0gQW5p
bWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSAmJiB2YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBB
bmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKTsKICAgICAKICAgICBib29sIGlzS2V5ZnJhbWUg
PSB2YWx1ZUxpc3Quc2l6ZSgpID4gMjsKICAgICBib29sIHZhbHVlc09LOwpAQCAtMTc1NSwxMCAr
MTc2OSwxMCBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlQW5pbWF0aW9uRnJvbUtleWZy
YW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdQogICAgIFJlZlB0cjxQbGF0Zm9ybUNB
QW5pbWF0aW9uPiBjYUFuaW1hdGlvbjsKICAgICAKICAgICBpZiAoaXNLZXlmcmFtZSkgewotICAg
ICAgICBjYUFuaW1hdGlvbiA9IGNyZWF0ZUtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgdmFs
dWVMaXN0LnByb3BlcnR5KCksIGFkZGl0aXZlKTsKKyAgICAgICAgY2FBbmltYXRpb24gPSBjcmVh
dGVLZXlmcmFtZUFuaW1hdGlvbihhbmltYXRpb24sIHByb3BlcnR5SWRUb1N0cmluZyh2YWx1ZUxp
c3QucHJvcGVydHkoKSksIGFkZGl0aXZlKTsKICAgICAgICAgdmFsdWVzT0sgPSBzZXRBbmltYXRp
b25LZXlmcmFtZXModmFsdWVMaXN0LCBhbmltYXRpb24sIGNhQW5pbWF0aW9uLmdldCgpKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBjYUFuaW1hdGlvbiA9IGNyZWF0ZUJhc2ljQW5pbWF0aW9uKGFu
aW1hdGlvbiwgdmFsdWVMaXN0LnByb3BlcnR5KCksIGFkZGl0aXZlKTsKKyAgICAgICAgY2FBbmlt
YXRpb24gPSBjcmVhdGVCYXNpY0FuaW1hdGlvbihhbmltYXRpb24sIHByb3BlcnR5SWRUb1N0cmlu
Zyh2YWx1ZUxpc3QucHJvcGVydHkoKSksIGFkZGl0aXZlKTsKICAgICAgICAgdmFsdWVzT0sgPSBz
ZXRBbmltYXRpb25FbmRwb2ludHModmFsdWVMaXN0LCBhbmltYXRpb24sIGNhQW5pbWF0aW9uLmdl
dCgpKTsKICAgICB9CiAgICAgCkBAIC0xNzc5LDEwICsxNzkzLDEwIEBAIGJvb2wgR3JhcGhpY3NM
YXllckNBOjphcHBlbmRUb1VuY29tbWl0dGVkQW5pbWF0aW9ucyhjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYgdmFsCiAgICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGNhQW5pbWF0aW9uOwog
ICAgIGJvb2wgdmFsaWRNYXRyaWNlcyA9IHRydWU7CiAgICAgaWYgKGlzS2V5ZnJhbWUpIHsKLSAg
ICAgICAgY2FBbmltYXRpb24gPSBjcmVhdGVLZXlmcmFtZUFuaW1hdGlvbihhbmltYXRpb24sIHZh
bHVlTGlzdC5wcm9wZXJ0eSgpLCBhZGRpdGl2ZSk7CisgICAgICAgIGNhQW5pbWF0aW9uID0gY3Jl
YXRlS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCBwcm9wZXJ0eUlkVG9TdHJpbmcodmFsdWVM
aXN0LnByb3BlcnR5KCkpLCBhZGRpdGl2ZSk7CiAgICAgICAgIHZhbGlkTWF0cmljZXMgPSBzZXRU
cmFuc2Zvcm1BbmltYXRpb25LZXlmcmFtZXModmFsdWVMaXN0LCBhbmltYXRpb24sIGNhQW5pbWF0
aW9uLmdldCgpLCBhbmltYXRpb25JbmRleCwgdHJhbnNmb3JtT3AsIGlzTWF0cml4QW5pbWF0aW9u
LCBib3hTaXplKTsKICAgICB9IGVsc2UgewotICAgICAgICBjYUFuaW1hdGlvbiA9IGNyZWF0ZUJh
c2ljQW5pbWF0aW9uKGFuaW1hdGlvbiwgdmFsdWVMaXN0LnByb3BlcnR5KCksIGFkZGl0aXZlKTsK
KyAgICAgICAgY2FBbmltYXRpb24gPSBjcmVhdGVCYXNpY0FuaW1hdGlvbihhbmltYXRpb24sIHBy
b3BlcnR5SWRUb1N0cmluZyh2YWx1ZUxpc3QucHJvcGVydHkoKSksIGFkZGl0aXZlKTsKICAgICAg
ICAgdmFsaWRNYXRyaWNlcyA9IHNldFRyYW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyh2YWx1ZUxp
c3QsIGFuaW1hdGlvbiwgY2FBbmltYXRpb24uZ2V0KCksIGFuaW1hdGlvbkluZGV4LCB0cmFuc2Zv
cm1PcCwgaXNNYXRyaXhBbmltYXRpb24sIGJveFNpemUpOwogICAgIH0KICAgICAKQEAgLTE4NDUs
MTYgKzE4NTksNzkgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9ybUFuaW1h
dGlvbnNGcm9tS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWUKICAgICByZXR1cm4gdmFsaWRN
YXRyaWNlczsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBHcmFwaGljc0xh
eWVyQ0E6OmNyZWF0ZUJhc2ljQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgQW5pbWF0
ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBib29sIGFkZGl0aXZlKQorI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKK2Jvb2wgR3JhcGhpY3NMYXllckNBOjphcHBlbmRUb1VuY29tbWl0dGVkQW5pbWF0aW9u
cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBGaWx0ZXJPcGVyYXRp
b24qIG9wZXJhdGlvbiwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgaW50IGFuaW1hdGlvbkluZGV4LCBkb3VibGUgdGltZU9mZnNldCkKIHsK
LSAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYmFzaWNBbmltID0gUGxhdGZvcm1DQUFu
aW1hdGlvbjo6Y3JlYXRlKFBsYXRmb3JtQ0FBbmltYXRpb246OkJhc2ljLCBwcm9wZXJ0eUlkVG9T
dHJpbmcocHJvcGVydHkpKTsKKyAgICBib29sIGlzS2V5ZnJhbWUgPSB2YWx1ZUxpc3Quc2l6ZSgp
ID4gMjsKKyAgICAKKyAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3Ag
PSBvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKTsKKyAgICBpbnQgbnVtQW5pbWF0ZWRQcm9w
ZXJ0aWVzID0gUGxhdGZvcm1DQUFuaW1hdGlvbjo6bnVtQW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0aWVz
KGZpbHRlck9wKTsKKyAgICAKKyAgICAvLyBFYWNoIGZpbHRlciBtaWdodCBuZWVkIHRvIGFuaW1h
dGUgbXVsdGlwbGUgcHJvcGVydGllcywgZWFjaCB3aXRoIHRoZWlyIG93biBrZXlQYXRoLiBUaGUg
a2V5UGF0aCBpcyBhbHdheXMgb2YgdGhlIGZvcm06CisgICAgLy8KKyAgICAvLyAgICAgIGZpbHRl
ci5maWx0ZXJfPGFuaW1hdGlvbkluZGV4Pi48ZmlsdGVyUHJvcGVydHlOYW1lPgorICAgIC8vCisg
ICAgLy8gUGxhdGZvcm1DQUFuaW1hdGlvbiB0ZWxscyB1cyBob3cgbWFueSBwcm9wZXJ0aWVzIGVh
Y2ggZmlsdGVyIGhhcyBhbmQgd2UgaXRlcmF0ZSB0aGF0IG1hbnkgdGltZXMgYW5kIGNyZWF0ZSBh
biBhbmltYXRpb24KKyAgICAvLyBmb3IgZWFjaC4gVGhpcyBpbnRlcm5hbEZpbHRlclByb3BlcnR5
SW5kZXggZ2V0cyBwYXNzZWQgdG8gUGxhdGZvcm1DQUFuaW1hdGlvbiBzbyBpdCBjYW4gcHJvcGVy
bHkgY3JlYXRlIHRoZSBwcm9wZXJ0eSBhbmltYXRpb24KKyAgICAvLyB2YWx1ZXMuCisgICAgZm9y
IChpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4ID0gMDsgaW50ZXJuYWxGaWx0ZXJQcm9w
ZXJ0eUluZGV4IDwgbnVtQW5pbWF0ZWRQcm9wZXJ0aWVzOyArK2ludGVybmFsRmlsdGVyUHJvcGVy
dHlJbmRleCkgeworICAgICAgICBib29sIHZhbHVlc09LOworICAgICAgICBSZWZQdHI8UGxhdGZv
cm1DQUFuaW1hdGlvbj4gY2FBbmltYXRpb247CisgICAgICAgIFN0cmluZyBrZXlQYXRoID0gU3Ry
aW5nOjpmb3JtYXQoImZpbHRlcnMuZmlsdGVyXyVkLiVzIiwgYW5pbWF0aW9uSW5kZXgsIFBsYXRm
b3JtQ0FBbmltYXRpb246OmFuaW1hdGVkRmlsdGVyUHJvcGVydHlOYW1lKGZpbHRlck9wLCBpbnRl
cm5hbEZpbHRlclByb3BlcnR5SW5kZXgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0tleWZy
YW1lKSB7CisgICAgICAgICAgICBjYUFuaW1hdGlvbiA9IGNyZWF0ZUtleWZyYW1lQW5pbWF0aW9u
KGFuaW1hdGlvbiwga2V5UGF0aCwgZmFsc2UpOworICAgICAgICAgICAgdmFsdWVzT0sgPSBzZXRG
aWx0ZXJBbmltYXRpb25LZXlmcmFtZXModmFsdWVMaXN0LCBhbmltYXRpb24sIGNhQW5pbWF0aW9u
LmdldCgpLCBhbmltYXRpb25JbmRleCwgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4LCBmaWx0
ZXJPcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjYUFuaW1hdGlvbiA9IGNyZWF0
ZUJhc2ljQW5pbWF0aW9uKGFuaW1hdGlvbiwga2V5UGF0aCwgZmFsc2UpOworICAgICAgICAgICAg
dmFsdWVzT0sgPSBzZXRGaWx0ZXJBbmltYXRpb25FbmRwb2ludHModmFsdWVMaXN0LCBhbmltYXRp
b24sIGNhQW5pbWF0aW9uLmdldCgpLCBhbmltYXRpb25JbmRleCwgaW50ZXJuYWxGaWx0ZXJQcm9w
ZXJ0eUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKHZhbHVlc09L
KTsKKworICAgICAgICBtX3VuY29taXR0ZWRBbmltYXRpb25zLmFwcGVuZChMYXllclByb3BlcnR5
QW5pbWF0aW9uKGNhQW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB2YWx1ZUxpc3QucHJvcGVydHko
KSwgYW5pbWF0aW9uSW5kZXgsIHRpbWVPZmZzZXQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZUZpbHRlckFuaW1hdGlvbnNGcm9t
S2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1h
dGlvbiogYW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1l
T2Zmc2V0KQoreworICAgIEFTU0VSVCh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFBy
b3BlcnR5V2Via2l0RmlsdGVyKTsKKworICAgIGludCBsaXN0SW5kZXggPSB2YWxpZGF0ZUZpbHRl
ck9wZXJhdGlvbnModmFsdWVMaXN0KTsKKyAgICBpZiAobGlzdEluZGV4IDwgMCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zKiBvcGVy
YXRpb25zID0gKGxpc3RJbmRleCA+PSAwKSA/IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1h
dGlvblZhbHVlKj4odmFsdWVMaXN0LmF0KGxpc3RJbmRleCkpLT52YWx1ZSgpIDogMDsKKyAgICBp
bnQgbnVtQW5pbWF0aW9ucyA9IG9wZXJhdGlvbnMtPnNpemUoKTsKKworICAgIC8vIEZJWE1FOiBX
ZSBjYW4ndCBjdXJyZW50bHkgaGFyZHdhcmUgYW5pbWF0ZSBzaGFkb3dzLiBUaGVyZSBpcyBhbiBv
cGVuIHF1ZXN0aW9uIGFib3V0IHJlbW92aW5nIHNoYWRvd3MgZnJvbSBmaWx0ZXJzIAorICAgIC8v
IGVudGlyZWx5LCBpbiB3aGljaCBjYXNlIHRoaXMgaXNzdWUgaXMgbW9vdC4KKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bUFuaW1hdGlvbnM7ICsraSkgeworICAgICAgICBpZiAob3BlcmF0aW9u
cy0+YXQoaSktPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hB
RE9XKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoaW50IGFu
aW1hdGlvbkluZGV4ID0gMDsgYW5pbWF0aW9uSW5kZXggPCBudW1BbmltYXRpb25zOyArK2FuaW1h
dGlvbkluZGV4KSB7CisgICAgICAgIGlmICghYXBwZW5kVG9VbmNvbW1pdHRlZEFuaW1hdGlvbnMo
dmFsdWVMaXN0LCBvcGVyYXRpb25zLT5vcGVyYXRpb25zKCkuYXQoYW5pbWF0aW9uSW5kZXgpLmdl
dCgpLCBhbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIGFuaW1hdGlvbkluZGV4LCB0aW1lT2Zmc2V0
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKyNlbmRpZgorCitQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IEdyYXBoaWNzTGF5
ZXJDQTo6Y3JlYXRlQmFzaWNBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGJvb2wgYWRkaXRpdmUpCit7CisgICAgUmVmUHRyPFBsYXRmb3JtQ0FB
bmltYXRpb24+IGJhc2ljQW5pbSA9IFBsYXRmb3JtQ0FBbmltYXRpb246OmNyZWF0ZShQbGF0Zm9y
bUNBQW5pbWF0aW9uOjpCYXNpYywga2V5UGF0aCk7CiAgICAgc2V0dXBBbmltYXRpb24oYmFzaWNB
bmltLmdldCgpLCBhbmltLCBhZGRpdGl2ZSk7CiAgICAgcmV0dXJuIGJhc2ljQW5pbTsKIH0KIAot
UGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPkdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlS2V5
ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiBhbmltLCBBbmltYXRlZFByb3BlcnR5SUQg
cHJvcGVydHksIGJvb2wgYWRkaXRpdmUpCitQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+
R3JhcGhpY3NMYXllckNBOjpjcmVhdGVLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24q
IGFuaW0sIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhZGRpdGl2ZSkKIHsKLSAgICBSZWZQ
dHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gUGxhdGZvcm1DQUFuaW1hdGlv
bjo6Y3JlYXRlKFBsYXRmb3JtQ0FBbmltYXRpb246OktleWZyYW1lLCBwcm9wZXJ0eUlkVG9TdHJp
bmcocHJvcGVydHkpKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4ga2V5ZnJhbWVB
bmltID0gUGxhdGZvcm1DQUFuaW1hdGlvbjo6Y3JlYXRlKFBsYXRmb3JtQ0FBbmltYXRpb246Oktl
eWZyYW1lLCBrZXlQYXRoKTsKICAgICBzZXR1cEFuaW1hdGlvbihrZXlmcmFtZUFuaW0uZ2V0KCks
IGFuaW0sIGFkZGl0aXZlKTsKICAgICByZXR1cm4ga2V5ZnJhbWVBbmltOwogfQpAQCAtMjA4MSw2
ICsyMTU4LDc2IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRUcmFuc2Zvcm1BbmltYXRpb25L
ZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCitib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Rmls
dGVyQW5pbWF0aW9uRW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3Qs
IGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBQbGF0Zm9ybUNBQW5pbWF0aW9uKiBiYXNpY0Fu
aW0sIGludCBmdW5jdGlvbkluZGV4LCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQor
eworICAgIEFTU0VSVCh2YWx1ZUxpc3Quc2l6ZSgpID09IDIpOworICAgIAorICAgIGNvbnN0IEZp
bHRlckFuaW1hdGlvblZhbHVlKiBmcm9tVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJB
bmltYXRpb25WYWx1ZSo+KHZhbHVlTGlzdC5hdCgwKSk7CisgICAgY29uc3QgRmlsdGVyQW5pbWF0
aW9uVmFsdWUqIHRvVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1
ZSo+KHZhbHVlTGlzdC5hdCgxKSk7CisgICAgCisgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBm
cm9tT3BlcmF0aW9uID0gZnJvbVZhbHVlLT52YWx1ZSgpLT5hdChmdW5jdGlvbkluZGV4KTsKKyAg
ICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIHRvT3BlcmF0aW9uID0gdG9WYWx1ZS0+dmFsdWUoKS0+
YXQoZnVuY3Rpb25JbmRleCk7CisgICAgCisgICAgUmVmUHRyPERlZmF1bHRGaWx0ZXJPcGVyYXRp
b24+IGRlZmF1bHRGcm9tT3BlcmF0aW9uOworICAgIFJlZlB0cjxEZWZhdWx0RmlsdGVyT3BlcmF0
aW9uPiBkZWZhdWx0VG9PcGVyYXRpb247CisgICAgCisgICAgQVNTRVJUKGZyb21PcGVyYXRpb24g
fHwgdG9PcGVyYXRpb24pOworICAgIAorICAgIGlmICghZnJvbU9wZXJhdGlvbikgeworICAgICAg
ICBkZWZhdWx0RnJvbU9wZXJhdGlvbiA9IERlZmF1bHRGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSh0
b09wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKTsKKyAgICAgICAgZnJvbU9wZXJhdGlvbiA9
IGRlZmF1bHRGcm9tT3BlcmF0aW9uLmdldCgpOworICAgIH0KKyAgICAKKyAgICBpZiAoIXRvT3Bl
cmF0aW9uKSB7CisgICAgICAgIGRlZmF1bHRUb09wZXJhdGlvbiA9IERlZmF1bHRGaWx0ZXJPcGVy
YXRpb246OmNyZWF0ZShmcm9tT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpOworICAgICAg
ICB0b09wZXJhdGlvbiA9IGRlZmF1bHRUb09wZXJhdGlvbi5nZXQoKTsKKyAgICB9CisgICAgCisg
ICAgYmFzaWNBbmltLT5zZXRGcm9tVmFsdWUoZnJvbU9wZXJhdGlvbiwgaW50ZXJuYWxGaWx0ZXJQ
cm9wZXJ0eUluZGV4KTsKKyAgICBiYXNpY0FuaW0tPnNldFRvVmFsdWUodG9PcGVyYXRpb24sIGlu
dGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CisgICAgCisgICAgLy8gVGhpcyBjb2RlcGF0aCBp
cyB1c2VkIGZvciAyLWtleWZyYW1lIGFuaW1hdGlvbnMsIHNvIHdlIHN0aWxsIG5lZWQgdG8gbG9v
ayBpbiB0aGUgc3RhcnQgZm9yIGEgdGltaW5nIGZ1bmN0aW9uLgorICAgIGNvbnN0IFRpbWluZ0Z1
bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiA9IHRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUo
dmFsdWVMaXN0LmF0KDApLCBhbmltYXRpb24pOworICAgIGJhc2ljQW5pbS0+c2V0VGltaW5nRnVu
Y3Rpb24odGltaW5nRnVuY3Rpb24pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NMYXllckNBOjpzZXRGaWx0ZXJBbmltYXRpb25LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIFBsYXRmb3Jt
Q0FBbmltYXRpb24qIGtleWZyYW1lQW5pbSwgaW50IGZ1bmN0aW9uSW5kZXgsIGludCBpbnRlcm5h
bEZpbHRlclByb3BlcnR5SW5kZXgsIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBmaWx0
ZXJPcCkKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IGtleVRpbWVzOworICAgIFZlY3RvcjxSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiA+IHZhbHVlczsKKyAgICBWZWN0b3I8Y29uc3QgVGltaW5nRnVuY3Rp
b24qPiB0aW1pbmdGdW5jdGlvbnM7CisgICAgUmVmUHRyPERlZmF1bHRGaWx0ZXJPcGVyYXRpb24+
IGRlZmF1bHRPcGVyYXRpb247CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVM
aXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBj
dXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4odmFsdWVM
aXN0LmF0KGkpKTsKKyAgICAgICAga2V5VGltZXMuYXBwZW5kKGN1clZhbHVlLT5rZXlUaW1lKCkp
OworCisgICAgICAgIGlmIChjdXJWYWx1ZS0+dmFsdWUoKS0+b3BlcmF0aW9ucygpLnNpemUoKSA+
IHN0YXRpY19jYXN0PHNpemVfdD4oZnVuY3Rpb25JbmRleCkpCisgICAgICAgICAgICB2YWx1ZXMu
YXBwZW5kKGN1clZhbHVlLT52YWx1ZSgpLT5vcGVyYXRpb25zKClbZnVuY3Rpb25JbmRleF0pOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICghZGVmYXVsdE9wZXJhdGlvbikKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0T3BlcmF0aW9uID0gRGVmYXVsdEZpbHRlck9wZXJhdGlvbjo6Y3Jl
YXRlKGZpbHRlck9wKTsKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoZGVmYXVsdE9wZXJhdGlv
bik7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVu
Y3Rpb24gPSB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGN1clZhbHVlLCBhbmltYXRp
b24pOworICAgICAgICB0aW1pbmdGdW5jdGlvbnMuYXBwZW5kKHRpbWluZ0Z1bmN0aW9uKTsKKyAg
ICB9CisgICAgCisgICAgLy8gV2UgdG9zcyB0aGUgbGFzdCB0ZkFycmF5IHZhbHVlIGJlY2F1c2Ug
aXQgaGFzIHRvIG9uZSBzaG9ydGVyIHRoYW4gdGhlIG90aGVycy4KKyAgICB0aW1pbmdGdW5jdGlv
bnMucmVtb3ZlTGFzdCgpOworCisgICAga2V5ZnJhbWVBbmltLT5zZXRLZXlUaW1lcyhrZXlUaW1l
cyk7CisgICAga2V5ZnJhbWVBbmltLT5zZXRWYWx1ZXModmFsdWVzLCBpbnRlcm5hbEZpbHRlclBy
b3BlcnR5SW5kZXgpOworICAgIGtleWZyYW1lQW5pbS0+c2V0VGltaW5nRnVuY3Rpb25zKHRpbWlu
Z0Z1bmN0aW9ucyk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiB2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCiB7CiAgICAgZG91Ymxl
IHQgPSBQbGF0Zm9ybUNBTGF5ZXI6OmN1cnJlbnRUaW1lVG9NZWRpYVRpbWUodGltZSA/IHRpbWUg
OiBjdXJyZW50VGltZSgpKTsKQEAgLTIyNjksOSArMjQxNiw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNBOjpzd2FwRnJvbU9yVG9UaWxlZExheWVyKGJvb2wgdXNlVGlsZWRMYXllciwgZmxvYXQgcGFn
ZVNjYWxlCiAjZW5kaWYKIAogICAgIC8vIG1vdmUgb3ZlciBhbmltYXRpb25zCi0gICAgbW92ZU9y
Q29weUFuaW1hdGlvbnNGb3JQcm9wZXJ0eShNb3ZlLCBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJh
bnNmb3JtLCBvbGRMYXllci5nZXQoKSwgbV9sYXllci5nZXQoKSk7Ci0gICAgbW92ZU9yQ29weUFu
aW1hdGlvbnNGb3JQcm9wZXJ0eShNb3ZlLCBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSwgb2xkTGF5
ZXIuZ2V0KCksIG1fbGF5ZXIuZ2V0KCkpOwotICAgIG1vdmVPckNvcHlBbmltYXRpb25zRm9yUHJv
cGVydHkoTW92ZSwgQW5pbWF0ZWRQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgb2xkTGF5ZXIuZ2V0
KCksIG1fbGF5ZXIuZ2V0KCkpOworICAgIG1vdmVPckNvcHlBbmltYXRpb25zKE1vdmUsIG9sZExh
eWVyLmdldCgpLCBtX2xheWVyLmdldCgpKTsKICAgICAKICAgICAvLyBuZWVkIHRvIHRlbGwgbmV3
IGxheWVyIHRvIGRyYXcgaXRzZWxmCiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CkBAIC0yNDkxLDgg
KzI2MzYsNyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBOjpj
bG9uZUxheWVyKFBsYXRmb3JtQ0FMYXllciAqbGF5ZXIsCiAKICAgICBpZiAoY2xvbmVMZXZlbCA9
PSBJbnRlcm1lZGlhdGVDbG9uZUxldmVsKSB7CiAgICAgICAgIG5ld0xheWVyLT5zZXRPcGFjaXR5
KGxheWVyLT5vcGFjaXR5KCkpOwotICAgICAgICBtb3ZlT3JDb3B5QW5pbWF0aW9uc0ZvclByb3Bl
cnR5KENvcHksIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0sIGxheWVyLCBuZXdMYXll
ci5nZXQoKSk7Ci0gICAgICAgIG1vdmVPckNvcHlBbmltYXRpb25zRm9yUHJvcGVydHkoQ29weSwg
QW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHksIGxheWVyLCBuZXdMYXllci5nZXQoKSk7CisgICAgICAg
IG1vdmVPckNvcHlBbmltYXRpb25zKENvcHksIGxheWVyLCBuZXdMYXllci5nZXQoKSk7CiAgICAg
fQogICAgIAogICAgIGlmIChzaG93RGVidWdCb3JkZXJzKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKaW5kZXggODBi
MjM3NjQxMGZiY2ZmNjVlOTMxNzMwNGZmMGY3ZmJjOTFhOGY1YS4uNzdkYWZjNTIzZDU5NzQyZmU2
YjVlY2ZhYjhiZDJmYjNiNGQ3OTEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKQEAgLTE3OSwxMCArMTc5LDEzIEBA
IHByaXZhdGU6CiAKICAgICBib29sIGNyZWF0ZUFuaW1hdGlvbkZyb21LZXlmcmFtZXMoY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICBib29sIGNyZWF0ZVRyYW5zZm9ybUFu
aW1hdGlvbnNGcm9tS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5p
bWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCwg
Y29uc3QgSW50U2l6ZSYgYm94U2l6ZSk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGJv
b2wgY3JlYXRlRmlsdGVyQW5pbWF0aW9uc0Zyb21LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRv
dWJsZSB0aW1lT2Zmc2V0KTsKKyNlbmRpZgogCiAgICAgLy8gUmV0dXJuIGF1dG9yZWxlYXNlZCBh
bmltYXRpb24gKHVzZSBSZXRhaW5QdHI/KQotICAgIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1h
dGlvbj4gY3JlYXRlQmFzaWNBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiwgQW5pbWF0ZWRQcm9w
ZXJ0eUlELCBib29sIGFkZGl0aXZlKTsKLSAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRp
b24+IGNyZWF0ZUtleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiosIEFuaW1hdGVkUHJv
cGVydHlJRCwgYm9vbCBhZGRpdGl2ZSk7CisgICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiBjcmVhdGVCYXNpY0FuaW1hdGlvbihjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgYWRkaXRpdmUpOworICAgIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1h
dGlvbj4gY3JlYXRlS2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3Ry
aW5nJiwgYm9vbCBhZGRpdGl2ZSk7CiAgICAgdm9pZCBzZXR1cEFuaW1hdGlvbihQbGF0Zm9ybUNB
QW5pbWF0aW9uKiwgY29uc3QgQW5pbWF0aW9uKiwgYm9vbCBhZGRpdGl2ZSk7CiAgICAgCiAgICAg
Y29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUoY29u
c3QgQW5pbWF0aW9uVmFsdWUqLCBjb25zdCBBbmltYXRpb24qKTsKQEAgLTE5Myw2ICsxOTYsMTEg
QEAgcHJpdmF0ZToKICAgICBib29sIHNldFRyYW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyhjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEFuaW1hdGlvbiosIFBsYXRmb3JtQ0FBbmltYXRp
b24qLCBpbnQgZnVuY3Rpb25JbmRleCwgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
LCBib29sIGlzTWF0cml4QW5pbWF0aW9uLCBjb25zdCBJbnRTaXplJiBib3hTaXplKTsKICAgICBi
b29sIHNldFRyYW5zZm9ybUFuaW1hdGlvbktleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYsIGNvbnN0IEFuaW1hdGlvbiosIFBsYXRmb3JtQ0FBbmltYXRpb24qLCBpbnQgZnVuY3Rpb25J
bmRleCwgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCBib29sIGlzTWF0cml4QW5p
bWF0aW9uLCBjb25zdCBJbnRTaXplJiBib3hTaXplKTsKICAgICAKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCisgICAgYm9vbCBzZXRGaWx0ZXJBbmltYXRpb25FbmRwb2ludHMoY29uc3QgS2V5ZnJh
bWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRpb24qLCBQbGF0Zm9ybUNBQW5pbWF0aW9uKiwgaW50
IGZ1bmN0aW9uSW5kZXgsIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpOworICAgIGJv
b2wgc2V0RmlsdGVyQW5pbWF0aW9uS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jiwg
Y29uc3QgQW5pbWF0aW9uKiwgUGxhdGZvcm1DQUFuaW1hdGlvbiosIGludCBmdW5jdGlvbkluZGV4
LCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4LCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJh
dGlvblR5cGUpOworI2VuZGlmCisKICAgICBib29sIGFuaW1hdGlvbklzUnVubmluZyhjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbk5hbWUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9ydW5u
aW5nQW5pbWF0aW9ucy5maW5kKGFuaW1hdGlvbk5hbWUpICE9IG1fcnVubmluZ0FuaW1hdGlvbnMu
ZW5kKCk7CkBAIC0zMjIsOSArMzMwLDEyIEBAIHByaXZhdGU6CiAKICAgICBlbnVtIE1vdmVPckNv
cHkgeyBNb3ZlLCBDb3B5IH07CiAgICAgc3RhdGljIHZvaWQgbW92ZU9yQ29weUxheWVyQW5pbWF0
aW9uKE1vdmVPckNvcHksIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWRlbnRpZmllciwgUGxhdGZv
cm1DQUxheWVyICpmcm9tTGF5ZXIsIFBsYXRmb3JtQ0FMYXllciAqdG9MYXllcik7Ci0gICAgdm9p
ZCBtb3ZlT3JDb3B5QW5pbWF0aW9uc0ZvclByb3BlcnR5KE1vdmVPckNvcHksIEFuaW1hdGVkUHJv
cGVydHlJRCwgUGxhdGZvcm1DQUxheWVyICogZnJvbUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXIgKiB0
b0xheWVyKTsKKyAgICB2b2lkIG1vdmVPckNvcHlBbmltYXRpb25zKE1vdmVPckNvcHksIFBsYXRm
b3JtQ0FMYXllciAqIGZyb21MYXllciwgUGxhdGZvcm1DQUxheWVyICogdG9MYXllcik7CiAgICAg
CiAgICAgYm9vbCBhcHBlbmRUb1VuY29tbWl0dGVkQW5pbWF0aW9ucyhjb25zdCBLZXlmcmFtZVZh
bHVlTGlzdCYsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqLCBjb25zdCBBbmltYXRpb24qLCBj
b25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGludCBh
bmltYXRpb25JbmRleCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wgaXNNYXRyaXhBbmltYXRpb24p
OworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29sIGFwcGVuZFRvVW5jb21taXR0ZWRB
bmltYXRpb25zKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9u
KiwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBpbnQgYW5p
bWF0aW9uSW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyNlbmRpZgogICAgIAogICAgIGVudW0g
TGF5ZXJDaGFuZ2UgewogICAgICAgICBOb0NoYW5nZSA9IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKaW5k
ZXggYjJkMzI1OTU2YmFlZDM5OGRiZTAzYzU5NzkzMTA4ZmMwOTk1Y2QxMC4uMjgwZDc2M2IzN2U4
ZWQ4YzJjMWRkNGEzMDMyMzk0ZTYxYmFmNDJkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaApAQCAtMjks
NiArMjksNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUg
IkNvbG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRQ
b2ludDNELmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgpAQCAtMTA5LDEyICsxMTAsMTggQEAgcHVibGljOgogICAgIHZvaWQg
c2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAg
dm9pZCBzZXRGcm9tVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJik7CiAgICAgdm9pZCBzZXRGcm9t
VmFsdWUoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisg
ICAgdm9pZCBzZXRGcm9tVmFsdWUoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiwgaW50IGludGVybmFs
RmlsdGVyUHJvcGVydHlJbmRleCk7CisjZW5kaWYKICAgICB2b2lkIGNvcHlGcm9tVmFsdWVGcm9t
KGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24qKTsKIAogICAgIHZvaWQgc2V0VG9WYWx1ZShmbG9h
dCk7CiAgICAgdm9pZCBzZXRUb1ZhbHVlKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4Jik7CiAgICAgdm9pZCBzZXRUb1ZhbHVlKGNvbnN0IEZsb2F0UG9pbnQzRCYpOwogICAgIHZv
aWQgc2V0VG9WYWx1ZShjb25zdCBXZWJDb3JlOjpDb2xvciYpOworI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKKyAgICB2b2lkIHNldFRvVmFsdWUoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiwgaW50IGlu
dGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CisjZW5kaWYKICAgICB2b2lkIGNvcHlUb1ZhbHVl
RnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uKik7CiAKICAgICAvLyBLZXlmcmFtZS1hbmlt
YXRpb24gcHJvcGVydGllcy4KQEAgLTEyMiw2ICsxMjksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4PiYpOwog
ICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+Jik7CiAgICAgdm9p
ZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbG9yPiYpOworI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKKyAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRl
ck9wZXJhdGlvbj4gPiYsIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpOworI2VuZGlm
CiAgICAgdm9pZCBjb3B5VmFsdWVzRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uKik7CiAK
ICAgICB2b2lkIHNldEtleVRpbWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKQEAgLTEzMCw2ICsx
NDAsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rv
cjxjb25zdCBUaW1pbmdGdW5jdGlvbio+Jik7CiAgICAgdm9pZCBjb3B5VGltaW5nRnVuY3Rpb25z
RnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uKik7CiAgICAgCisjaWYgRU5BQkxFKENTU19G
SUxURVJTKQorICAgIHN0YXRpYyBpbnQgbnVtQW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0aWVzKEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGFuaW1h
dGVkRmlsdGVyUHJvcGVydHlOYW1lKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgaW50
IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAg
IFBsYXRmb3JtQ0FBbmltYXRpb24oQW5pbWF0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRo
KTsKICAgICBQbGF0Zm9ybUNBQW5pbWF0aW9uKFBsYXRmb3JtQW5pbWF0aW9uUmVmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNB
QW5pbWF0aW9uTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L1BsYXRmb3JtQ0FBbmltYXRpb25NYWMubW0KaW5kZXggZjE0MjMyNTkwNjliZTljYjIwODdlMzcw
MDMwMzlmN2M0NDdiYjY4Zi4uYWM4YWMwZWZmMDc5OTNkYmJhNWFmZWY2NjBlOTY1NTc1YjUwYjFi
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1Bs
YXRmb3JtQ0FBbmltYXRpb25NYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FBbmltYXRpb25NYWMubW0KQEAgLTM5Niw2ICszOTYsMTMx
IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiB2YWx1ZSkKICAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5p
bWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6YXJyYXldOwogfQogCisjaWYgRU5BQkxFKENTU19G
SUxURVJTKQorc3RhdGljIGRvdWJsZSBzZXBpYUZ1bGxDb25zdGFudHNbM11bM10gPSB7CisgICAg
eyAwLjM5MywgMC43NjksIDAuMTg5IH0sCisgICAgeyAwLjM0OSwgMC42ODYsIDAuMTY4IH0sCisg
ICAgeyAwLjI3MiwgMC41MzQsIDAuMTMxIH0KK307CisKK3N0YXRpYyBkb3VibGUgc2VwaWFOb25l
Q29uc3RhbnRzWzNdWzNdID0geworICAgIHsgMSwgMCwgMCB9LAorICAgIHsgMCwgMSwgMCB9LAor
ICAgIHsgMCwgMCwgMSB9Cit9OworCitzdGF0aWMgZG91YmxlIGludmVydENvbnN0YW50c1szXVsz
XSA9IHsKKyAgICB7IDEsIDAsIDAgfSwKKyAgICB7IDAsIDEsIDAgfSwKKyAgICB7IDAsIDAsIDEg
fQorfTsKKworc3RhdGljIFJldGFpblB0cjxpZD4gZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24oY29u
c3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRpb24sIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5
SW5kZXgpCit7CisgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUgPSBvcGVy
YXRpb24tPmdldE9wZXJhdGlvblR5cGUoKTsKKyAgICBSZXRhaW5QdHI8aWQ+IHZhbHVlOworICAg
IAorICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FM
RToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkhVRV9ST1RBVEU6IHsKKyAgICAgICAgZG91YmxlIGFtb3VudCA9IDA7CisgICAg
ICAgIAorICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKKyAgICAgICAgICAg
IGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGljX2Nhc3Q8
Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAg
ICAgICAgICBhbW91bnQgPSBvcC0+YW1vdW50KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmICh0eXBlID09IEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURSkKKyAgICAgICAgICAg
IGFtb3VudCA9IGRlZzJyYWQoYW1vdW50KTsKKworICAgICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdIHJldGFpbl0pOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7CisgICAgICAgIGRvdWJs
ZSB0ID0gMDsKKworICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsKKyAgICAg
ICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG9wID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7
CisgICAgICAgICAgICB0ID0gb3AtPmFtb3VudCgpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOgorICAgICAgICAg
ICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29u
c3RhbnRzW2ludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleF1bMF0sIHNlcGlhRnVsbENvbnN0YW50
c1swXVtpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXhdLCB0KV0sCisgICAgICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZTpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNb
aW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4XVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdW2lu
dGVybmFsRmlsdGVyUHJvcGVydHlJbmRleF0sIHQpXSwKKyAgICAgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1tpbnRlcm5h
bEZpbHRlclByb3BlcnR5SW5kZXhdWzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1baW50ZXJuYWxG
aWx0ZXJQcm9wZXJ0eUluZGV4XSwgdCldLAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldp
dGhEb3VibGU6MF0sCisgICAgICAgICAgICBuaWxdIHJldGFpbl0pOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogeworICAgICAgICBkb3Vi
bGUgYW1vdW50ID0gMDsKKworICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aXNEZWZhdWx0KCkpIHsK
KyAgICAgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24q
IG9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbio+KG9wZXJhdGlvbik7CisgICAgICAgICAgICBhbW91bnQgPSBvcC0+YW1vdW50KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBjb2xvciBtYXRyaXggYW5pbWF0aW9u
IGZvciBpbnZlcnQgZG9lcyBhIHNjYWxlIG9mIGVhY2ggY29sb3IgY29tcG9uZW50IGJ5IGEgdmFs
dWUgdGhhdCBnb2VzIGZyb20gCisgICAgICAgIC8vIDEgKHdoZW4gYW1vdW50IGlzIDApIHRvIC0x
ICh3aGVuIGFtb3VudCBpcyAxKS4gVGhlbiB0aGUgY29sb3IgdmFsdWVzIGFyZSBvZmZzZXQgYnkg
YW1vdW50LiBUaGlzIGhhcyB0aGUKKyAgICAgICAgLy8gZWZmZWN0IG9mIHBlcmZvcm1pbmcgdGhl
IG9wZXJhdGlvbjogYycgPSBjICogLTEgKyAxLCB3aGljaCBpbnZlcnRzIHRoZSBjb2xvci4KKyAg
ICAgICAgaWYgKGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCA8IDMpIHsKKyAgICAgICAgICAg
IC8vIHRoZSBmaXJzdCAzIHByb3BlcnRpZXMgYXJlIHRoZSByZWQsIGdyZWVuIGFuZCBibHVlIG11
bHRpcGxpZXJzCisgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IDEgLSBhbW91bnQgKiAy
OworICAgICAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoK
KyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTppbnZlcnRDb25zdGFu
dHNbaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4XVswXSAqIG11bHRpcGxpZXJdLAorICAgICAg
ICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmludmVydENvbnN0YW50c1tpbnRl
cm5hbEZpbHRlclByb3BlcnR5SW5kZXhdWzFdICogbXVsdGlwbGllcl0sCisgICAgICAgICAgICAg
ICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6aW52ZXJ0Q29uc3RhbnRzW2ludGVybmFsRmls
dGVyUHJvcGVydHlJbmRleF1bMl0gKiBtdWx0aXBsaWVyXSwKKyAgICAgICAgICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZTowXSwKKyAgICAgICAgICAgICAgICBuaWxdIHJldGFpbl0p
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gdGhlIGxhc3QgcHJvcGVydHkgaXMg
dGhlIGNvbG9yIG9mZnNldAorICAgICAgICAgICAgdmFsdWUuYWRvcHROUyhbW05TQXJyYXkgYXJy
YXlXaXRoT2JqZWN0czoKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZTphbW91bnRdLAorICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmFt
b3VudF0sCisgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50
XSwKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowXSwKKyAgICAg
ICAgICAgICAgICBuaWxdIHJldGFpbl0pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6
IHsKKyAgICAgICAgZG91YmxlIGFtb3VudCA9IDA7CisKKyAgICAgICAgaWYgKCFvcGVyYXRpb24t
PmlzRGVmYXVsdCgpKSB7CisgICAgICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOworICAgICAgICAgICAgYW1vdW50ID0g
b3AtPmFtb3VudCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2YWx1ZS5hZG9wdE5T
KFtbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdIHJldGFpbl0pOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAg
ZG91YmxlIGFtb3VudCA9IDA7CisKKyAgICAgICAgaWYgKCFvcGVyYXRpb24tPmlzRGVmYXVsdCgp
KSB7CisgICAgICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uKiBvcCA9IHN0YXRpY19j
YXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOworICAgICAgICAgICAg
YW1vdW50ID0gb3AtPnN0ZERldmlhdGlvbigpLmNhbGNGbG9hdFZhbHVlKDApOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2YWx1ZS5hZG9wdE5TKFtbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTphbW91bnRdIHJldGFpbl0pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVs
dDogYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uOjpzZXRGcm9tVmFsdWUoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVy
YXRpb24sIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCit7CisgICAgUmV0YWluUHRy
PGlkPiB2YWx1ZSA9IGZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKG9wZXJhdGlvbiwgaW50ZXJuYWxG
aWx0ZXJQcm9wZXJ0eUluZGV4KTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+
KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6dmFsdWUuZ2V0KCldOworfQorI2VuZGlm
CisKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6Y29weUZyb21WYWx1ZUZyb20oY29uc3QgUGxh
dGZvcm1DQUFuaW1hdGlvbiogdmFsdWUpCiB7CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBC
YXNpYyB8fCB2YWx1ZS0+YW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQpAQCAtNDQ3LDYgKzU3Miwx
NCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFRvVmFsdWUoY29uc3QgV2ViQ29yZTo6
Q29sb3ImIHZhbHVlKQogICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4obV9hbmlt
YXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6YXJyYXldOwogfQogCisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRUb1ZhbHVlKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbiogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQorewor
ICAgIFJldGFpblB0cjxpZD4gdmFsdWUgPSBmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihvcGVyYXRp
b24sIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CisgICAgW3N0YXRpY19jYXN0PENBQmFz
aWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9WYWx1ZTp2YWx1ZS5nZXQoKV07
Cit9CisjZW5kaWYKKwogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpjb3B5VG9WYWx1ZUZyb20o
Y29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiogdmFsdWUpCiB7CiAgICAgaWYgKGFuaW1hdGlvblR5
cGUoKSAhPSBCYXNpYyB8fCB2YWx1ZS0+YW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQpAQCAtNTE5
LDYgKzY1MiwyMiBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFZhbHVlcyhjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6Q29sb3I+JiB2YWx1ZSkKICAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFt
ZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6YXJyYXldOwogfQogCisj
aWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRWYWx1
ZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIHZhbHVlcywgaW50IGlu
dGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKK3sKKyAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9
IEtleWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIE5TTXV0YWJsZUFycmF5
KiBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBSZXRhaW5QdHI8aWQ+IHZhbHVl
ID0gZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24odmFsdWVzW2ldLmdldCgpLCBpbnRlcm5hbEZpbHRl
clByb3BlcnR5SW5kZXgpOworICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OnZhbHVlLmdldCgpXTsK
KyAgICB9CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0VmFsdWVzOmFycmF5XTsKK30KKyNlbmRpZgorCiB2b2lkIFBsYXRmb3JtQ0FB
bmltYXRpb246OmNvcHlWYWx1ZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24qIHZhbHVl
KQogewogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUgfHwgdmFsdWUtPmFuaW1h
dGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKQEAgLTU2MCw0ICs3MDksNTEgQEAgdm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uOjpjb3B5VGltaW5nRnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5p
bWF0aW9uKiB2YWwKICAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5p
bWF0aW9uLmdldCgpKSBzZXRUaW1pbmdGdW5jdGlvbnM6W290aGVyIHRpbWluZ0Z1bmN0aW9uc11d
OwogfQogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQoraW50IFBsYXRmb3JtQ0FBbmltYXRpb246
Om51bUFuaW1hdGVkRmlsdGVyUHJvcGVydGllcyhGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5
cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2godHlwZSkgeworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpHUkFZU0NBTEU6IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTog
cmV0dXJuIDM7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiByZXR1cm4gMTsK
KyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogcmV0dXJuIDE7CisgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogcmV0dXJuIDQ7CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246Ok9QQUNJVFk6IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVS
OiByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHJldHVybiAx
OworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiByZXR1cm4gMTsKKyAgICBk
ZWZhdWx0OiByZXR1cm4gMDsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIqIFBsYXRmb3JtQ0FBbmlt
YXRpb246OmFuaW1hdGVkRmlsdGVyUHJvcGVydHlOYW1lKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSB0eXBlLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQoreworICAgIHN3
aXRjaCh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogcmV0dXJu
ICJpbnB1dEludGVuc2l0eSI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAg
ICAgICBzd2l0Y2goaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSB7CisgICAgICAgIGNhc2Ug
MDogcmV0dXJuICJpbnB1dFJWZWN0b3IiOworICAgICAgICBjYXNlIDE6IHJldHVybiAiaW5wdXRH
VmVjdG9yIjsKKyAgICAgICAgY2FzZSAyOiByZXR1cm4gImlucHV0QlZlY3RvciI7CisgICAgICAg
IGRlZmF1bHQ6IHJldHVybiAiIjsKKyAgICAgICAgfQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpTQVRVUkFURTogcmV0dXJuICJpbnB1dFNhdHVyYXRpb24iOworICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpIVUVfUk9UQVRFOiByZXR1cm4gImlucHV0QW5nbGUiOworICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIHN3aXRjaChpbnRlcm5hbEZpbHRlclByb3BlcnR5
SW5kZXgpIHsKKyAgICAgICAgY2FzZSAwOiByZXR1cm4gImlucHV0UlZlY3RvciI7CisgICAgICAg
IGNhc2UgMTogcmV0dXJuICJpbnB1dEdWZWN0b3IiOworICAgICAgICBjYXNlIDI6IHJldHVybiAi
aW5wdXRCVmVjdG9yIjsKKyAgICAgICAgY2FzZSAzOiByZXR1cm4gImlucHV0Qmlhc1ZlY3RvciI7
CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiAiIjsKKyAgICAgICAgfQorICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpPUEFDSVRZOiByZXR1cm4gImlucHV0QVZlY3RvciI7CisgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJMVVI6IHJldHVybiAiaW5wdXRSYWRpdXMiOworICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpDT05UUkFTVDogcmV0dXJuICJpbnB1dENvbnRyYXN0IjsKKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogcmV0dXJuICJpbnB1dEJyaWdodG5lc3MiOworICAg
IGRlZmF1bHQ6IHJldHVybiAiIjsKKyAgICB9Cit9CisjZW5kaWYKKwogI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNw
cAppbmRleCA2ODNkNzAzNTMxOGIwYTUyNzllZmJiZGNkOTk1ZTRhMWZhNWFhZmJiLi45NDQyODhj
YTc5NmJhY2ZmNmZkMGQyZWZjMWE5MTllNzJhNzE3ZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FB
bmltYXRpb25XaW4uY3BwCkBAIC0zNjgsNiArMzY4LDEzIEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvbjo6c2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiB2YWx1ZSkKICAgICBDQUNG
QW5pbWF0aW9uU2V0RnJvbVZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0KIAor
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0RnJv
bVZhbHVlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiosIGludCkKK3sKKyAgICAvLyBGSVhNRTogSGFy
ZHdhcmUgZmlsdGVyIGFuaW1hdGlvbiBub3QgaW1wbGVtZW50ZWQgb24gV2luZG93cworfQorI2Vu
ZGlmCisKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6Y29weUZyb21WYWx1ZUZyb20oY29uc3Qg
UGxhdGZvcm1DQUFuaW1hdGlvbiogdmFsdWUpCiB7CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAh
PSBCYXNpYyB8fCB2YWx1ZS0+YW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQpAQCAtNDE0LDYgKzQy
MSwxMyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFRvVmFsdWUoY29uc3QgV2ViQ29y
ZTo6Q29sb3ImIHZhbHVlKQogICAgIENBQ0ZBbmltYXRpb25TZXRUb1ZhbHVlKG1fYW5pbWF0aW9u
LmdldCgpLCB2LmdldCgpKTsKIH0KIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbjo6c2V0VG9WYWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qLCBpbnQp
Cit7CisgICAgLy8gRklYTUU6IEhhcmR3YXJlIGZpbHRlciBhbmltYXRpb24gbm90IGltcGxlbWVu
dGVkIG9uIFdpbmRvd3MKK30KKyNlbmRpZgorCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OmNv
cHlUb1ZhbHVlRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uKiB2YWx1ZSkKIHsKICAgICBp
ZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljIHx8IHZhbHVlLT5hbmltYXRpb25UeXBlKCkgIT0g
QmFzaWMpCkBAIC00ODIsNiArNDk2LDEzIEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0
VmFsdWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb2xvcj4mIHZhbHVlKQogICAgIENBQ0ZBbmlt
YXRpb25TZXRWYWx1ZXMobV9hbmltYXRpb24uZ2V0KCksIGFycmF5LmdldCgpKTsKIH0KIAorI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VmFsdWVz
KGNvbnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiwgaW50KQoreworICAgIC8v
IEZJWE1FOiBIYXJkd2FyZSBmaWx0ZXIgYW5pbWF0aW9uIG5vdCBpbXBsZW1lbnRlZCBvbiBXaW5k
b3dzCit9CisjZW5kaWYKKwogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpjb3B5VmFsdWVzRnJv
bShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uKiB2YWx1ZSkKIHsKICAgICBpZiAoYW5pbWF0aW9u
VHlwZSgpICE9IEtleWZyYW1lIHx8IHZhbHVlLT5hbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUp
CkBAIC01MzEsNCArNTUyLDE4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6Y29weVRpbWlu
Z0Z1bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiogdmFsCiAgICAgQ0FDRkFu
aW1hdGlvblNldFRpbWluZ0Z1bmN0aW9ucyhtX2FuaW1hdGlvbi5nZXQoKSwgQ0FDRkFuaW1hdGlv
bkdldFRpbWluZ0Z1bmN0aW9ucyh2YWx1ZS0+cGxhdGZvcm1BbmltYXRpb24oKSkpOwogfQogCisj
aWYgRU5BQkxFKENTU19GSUxURVJTKQoraW50IFBsYXRmb3JtQ0FBbmltYXRpb246Om51bUFuaW1h
dGVkRmlsdGVyUHJvcGVydGllcyhGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUpCit7Cisg
ICAgLy8gRklYTUU6IEhhcmR3YXJlIGZpbHRlciBhbmltYXRpb24gbm90IGltcGxlbWVudGVkIG9u
IFdpbmRvd3MKKyAgICByZXR1cm4gMDsKK30KKworY29uc3QgY2hhciogUGxhdGZvcm1DQUFuaW1h
dGlvbjo6YW5pbWF0ZWRGaWx0ZXJQcm9wZXJ0eU5hbWUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlLCBpbnQpCit7CisgICAgLy8gRklYTUU6IEhhcmR3YXJlIGZpbHRlciBhbmltYXRpb24g
bm90IGltcGxlbWVudGVkIG9uIFdpbmRvd3MKKyAgICByZXR1cm4gIiI7Cit9CisjZW5kaWYKKwog
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5o
CmluZGV4IDRkMTVlYzhlZDNhZjEyMDViM2IxZDNkYTVhNGI3NWNlZWQ5N2NjNzMuLjE3YjAwYjBi
ODUxNTBlZTE0NWNjMDJmZjJhODAyODg5NTFmNGJkYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaApA
QCAtNzQsNiArNzQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0
T3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc1NhbWVUeXBlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gby5n
ZXRPcGVyYXRpb25UeXBlKCkgPT0gbV90eXBlOyB9CisgICAgCisgICAgdmlydHVhbCBib29sIGlz
RGVmYXVsdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKIHByb3RlY3RlZDoKICAgICBGaWx0
ZXJPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSB0eXBlKQpAQCAtODQsNiArODYsMjggQEAgcHJvdGVj
dGVkOgogICAgIE9wZXJhdGlvblR5cGUgbV90eXBlOwogfTsKIAorY2xhc3MgRGVmYXVsdEZpbHRl
ck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERlZmF1bHRGaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZShPcGVyYXRpb25UeXBl
IHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlZmF1bHRGaWx0ZXJP
cGVyYXRpb24odHlwZSkpOworICAgIH0KKworcHJpdmF0ZToKKworICAgIHZpcnR1YWwgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgbykgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc1NhbWVUeXBlKG8pOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0RlZmF1
bHQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBEZWZhdWx0RmlsdGVyT3BlcmF0aW9u
KE9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICAgICAgOiBGaWx0ZXJPcGVyYXRpb24odHlwZSkKKyAg
ICB7CisgICAgfQorfTsKKwogY2xhc3MgUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb24gOiBwdWJs
aWMgRmlsdGVyT3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQYXNz
dGhyb3VnaEZpbHRlck9wZXJhdGlvbj4gY3JlYXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmgKaW5kZXggM2I5MWM3MTdiZjkzOTM4M2RlZTZmMmE3OGI1N2M3ODE1MmM0MzRm
MS4uNmMyZDU2OThkOTNkODhhN2UxY2Q2ODhiZDcxYTUyOGZlZTI3MTQxYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTUyNCw2ICs1MjQsOSBAQCBwdWJsaWM6CiAK
ICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgdmlydHVhbCB2b2lkIGZpbHRlck5lZWRzUmVw
YWludCgpOworICAgIGJvb2wgaGFzRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+
aGFzRmlsdGVyKCk7IH0KKyNlbHNlCisgICAgYm9vbCBoYXNGaWx0ZXIoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogI2VuZGlmCiAKICAgICAvLyBPdmVybG9hZGVkIG5ldyBvcGVyYXRvci4gRGVy
aXZlZCBjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgb3BlcmF0b3IgbmV3CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDk1MDNhODI3NTMzNmQ3
YzQ5NWU5NzNiZTc0MzIyNjg1Y2JkNzU0YzEuLjZhZGFmNWMwZTQ3MTE1ODA4ZTk5YWQ1N2RlZGE2
ZDM1NjA5ZTEzOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCkBAIC0xMTk3LDEyICsxMTk3LDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpzdGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCwgY29uc3QgQW5pbWF0aW9uKiBh
bmltCiB7CiAgICAgYm9vbCBoYXNPcGFjaXR5ID0ga2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHko
Q1NTUHJvcGVydHlPcGFjaXR5KTsKICAgICBib29sIGhhc1RyYW5zZm9ybSA9IHJlbmRlcmVyKCkt
PmlzQm94KCkgJiYga2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm0pOworICAgIGJvb2wgaGFzRmlsdGVyID0ga2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVy
dHkoQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXIpOwogICAgIAotICAgIGlmICghaGFzT3BhY2l0eSAm
JiAhaGFzVHJhbnNmb3JtKQorICAgIGlmICghaGFzT3BhY2l0eSAmJiAhaGFzVHJhbnNmb3JtICYm
ICFoYXNGaWx0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBLZXlmcmFtZVZh
bHVlTGlzdCB0cmFuc2Zvcm1WZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7
CiAgICAgS2V5ZnJhbWVWYWx1ZUxpc3Qgb3BhY2l0eVZlY3RvcihBbmltYXRlZFByb3BlcnR5T3Bh
Y2l0eSk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIEtleWZyYW1lVmFsdWVMaXN0IGZp
bHRlclZlY3RvcihBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKTsKKyNlbmRpZgogCiAgICAg
c2l6ZV90IG51bUtleWZyYW1lcyA9IGtleWZyYW1lcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1LZXlmcmFtZXM7ICsraSkgewpAQCAtMTIyMiwxMCArMTIyNiwxOCBAQCBi
b29sIFJlbmRlckxheWVyQmFja2luZzo6c3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQs
IGNvbnN0IEFuaW1hdGlvbiogYW5pbQogICAgICAgICAKICAgICAgICAgaWYgKChoYXNPcGFjaXR5
ICYmIGlzRmlyc3RPckxhc3RLZXlmcmFtZSkgfHwgY3VycmVudEtleWZyYW1lLmNvbnRhaW5zUHJv
cGVydHkoQ1NTUHJvcGVydHlPcGFjaXR5KSkKICAgICAgICAgICAgIG9wYWNpdHlWZWN0b3IuaW5z
ZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKGtleSwga2V5ZnJhbWVTdHlsZS0+b3BhY2l0eSgp
LCB0ZikpOworCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICBpZiAoKGhhc0ZpbHRl
ciAmJiBpc0ZpcnN0T3JMYXN0S2V5ZnJhbWUpIHx8IGN1cnJlbnRLZXlmcmFtZS5jb250YWluc1By
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0RmlsdGVyKSkKKyAgICAgICAgICAgIGZpbHRlclZlY3Rv
ci5pbnNlcnQobmV3IEZpbHRlckFuaW1hdGlvblZhbHVlKGtleSwgJihrZXlmcmFtZVN0eWxlLT5m
aWx0ZXIoKSksIHRmKSk7CisjZW5kaWYKICAgICB9CiAKICAgICBib29sIGRpZEFuaW1hdGVUcmFu
c2Zvcm0gPSBmYWxzZTsKICAgICBib29sIGRpZEFuaW1hdGVPcGFjaXR5ID0gZmFsc2U7CisjaWYg
RU5BQkxFKENTU19GSUxURVJTKQorICAgIGJvb2wgZGlkQW5pbWF0ZUZpbHRlciA9IGZhbHNlOwor
I2VuZGlmCiAgICAgCiAgICAgaWYgKGhhc1RyYW5zZm9ybSAmJiBtX2dyYXBoaWNzTGF5ZXItPmFk
ZEFuaW1hdGlvbih0cmFuc2Zvcm1WZWN0b3IsIHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5ib3Jk
ZXJCb3hSZWN0KCkuc2l6ZSgpLCBhbmltLCBrZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpLCB0aW1l
T2Zmc2V0KSkgewogICAgICAgICBkaWRBbmltYXRlVHJhbnNmb3JtID0gdHJ1ZTsKQEAgLTEyMzcs
NyArMTI0OSwxOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6c3RhcnRBbmltYXRpb24oZG91
YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEFuaW1hdGlvbiogYW5pbQogICAgICAgICBjb21wb3NpdG9y
KCktPmRpZFN0YXJ0QWNjZWxlcmF0ZWRBbmltYXRpb24oQ1NTUHJvcGVydHlPcGFjaXR5KTsKICAg
ICB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgaWYgKGhhc0ZpbHRlciAmJiBtX2dy
YXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihmaWx0ZXJWZWN0b3IsIExheW91dFNpemUoKSwgYW5p
bSwga2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUoKSwgdGltZU9mZnNldCkpIHsKKyAgICAgICAgZGlk
QW5pbWF0ZUZpbHRlciA9IHRydWU7CisgICAgICAgIGNvbXBvc2l0b3IoKS0+ZGlkU3RhcnRBY2Nl
bGVyYXRlZEFuaW1hdGlvbihDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcik7CisgICAgfQorI2VuZGlm
CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgcmV0dXJuIGRpZEFuaW1hdGVUcmFuc2Zv
cm0gfHwgZGlkQW5pbWF0ZU9wYWNpdHkgfHwgZGlkQW5pbWF0ZUZpbHRlcjsKKyNlbHNlCiAgICAg
cmV0dXJuIGRpZEFuaW1hdGVUcmFuc2Zvcm0gfHwgZGlkQW5pbWF0ZU9wYWNpdHk7CisjZW5kaWYK
IH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmFuaW1hdGlvblBhdXNlZChkb3VibGUgdGlt
ZU9mZnNldCwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQpAQCAtMTI1NCw2ICsxMjc3LDEw
IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRyYW5zaXRpb24oZG91YmxlIHRpbWVP
ZmZzZXQsIGludCBwcm9wZXJ0eSwgY29uc3QKIHsKICAgICBib29sIGRpZEFuaW1hdGVPcGFjaXR5
ID0gZmFsc2U7CiAgICAgYm9vbCBkaWRBbmltYXRlVHJhbnNmb3JtID0gZmFsc2U7CisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQorICAgIGJvb2wgZGlkQW5pbWF0ZUZpbHRlciA9IGZhbHNlOworI2Vu
ZGlmCisKICAgICBBU1NFUlQocHJvcGVydHkgIT0gY0FuaW1hdGVBbGwpOwogCiAgICAgaWYgKHBy
b3BlcnR5ID09IChpbnQpQ1NTUHJvcGVydHlPcGFjaXR5KSB7CkBAIC0xMjc4LDIwICsxMzA1LDQ1
IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRyYW5zaXRpb24oZG91YmxlIHRpbWVP
ZmZzZXQsIGludCBwcm9wZXJ0eSwgY29uc3QKICAgICAgICAgICAgIHRyYW5zZm9ybVZlY3Rvci5p
bnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZmcm9tU3R5bGUtPnRyYW5zZm9y
bSgpKSk7CiAgICAgICAgICAgICB0cmFuc2Zvcm1WZWN0b3IuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1B
bmltYXRpb25WYWx1ZSgxLCAmdG9TdHlsZS0+dHJhbnNmb3JtKCkpKTsKICAgICAgICAgICAgIGlm
IChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih0cmFuc2Zvcm1WZWN0b3IsIHRvUmVuZGVy
Qm94KHJlbmRlcmVyKCkpLT5ib3JkZXJCb3hSZWN0KCkuc2l6ZSgpLCB0cmFuc2Zvcm1BbmltLCBH
cmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihBbmltYXRlZFByb3BlcnR5
V2Via2l0VHJhbnNmb3JtKSwgdGltZU9mZnNldCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBl
bnN1cmUgdGhhdCB0aGUgY29ycmVjdCB0cmFuc2Zvcm0gaXMgdmlzaWJsZSB3aGVuIHRoZSBhbmlt
YXRpb24gZW5kcywgYWxzbyBzZXQgdGhlIGZpbmFsIG9wYWNpdHkuCisgICAgICAgICAgICAgICAg
Ly8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgdHJhbnNmb3JtIGlzIHZpc2libGUgd2hlbiB0
aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRoZSBmaW5hbCB0cmFuc2Zvcm0uCiAgICAgICAg
ICAgICAgICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0odG9TdHlsZSk7CiAgICAgICAgICAgICAgICAg
ZGlkQW5pbWF0ZVRyYW5zZm9ybSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgaWYgKHByb3BlcnR5ID09IChpbnQp
Q1NTUHJvcGVydHlXZWJraXRGaWx0ZXIgJiYgbV9vd25pbmdMYXllci0+aGFzRmlsdGVyKCkpIHsK
KyAgICAgICAgY29uc3QgQW5pbWF0aW9uKiBmaWx0ZXJBbmltID0gdG9TdHlsZS0+dHJhbnNpdGlv
bkZvclByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0RmlsdGVyKTsKKyAgICAgICAgaWYgKGZpbHRl
ckFuaW0gJiYgIWZpbHRlckFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7CisgICAgICAg
ICAgICBLZXlmcmFtZVZhbHVlTGlzdCBmaWx0ZXJWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dEZpbHRlcik7CisgICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KG5ldyBGaWx0ZXJBbmlt
YXRpb25WYWx1ZSgwLCAmZnJvbVN0eWxlLT5maWx0ZXIoKSkpOworICAgICAgICAgICAgZmlsdGVy
VmVjdG9yLmluc2VydChuZXcgRmlsdGVyQW5pbWF0aW9uVmFsdWUoMSwgJnRvU3R5bGUtPmZpbHRl
cigpKSk7CisgICAgICAgICAgICBpZiAobV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24oZmls
dGVyVmVjdG9yLCBMYXlvdXRTaXplKCksIGZpbHRlckFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1h
dGlvbk5hbWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpLCB0aW1l
T2Zmc2V0KSkgeworICAgICAgICAgICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0
IGZpbHRlciBpcyB2aXNpYmxlIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzLCBhbHNvIHNldCB0aGUg
ZmluYWwgZmlsdGVyLgorICAgICAgICAgICAgICAgIHVwZGF0ZUxheWVyRmlsdGVycyh0b1N0eWxl
KTsKKyAgICAgICAgICAgICAgICBkaWRBbmltYXRlRmlsdGVyID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKGRpZEFuaW1hdGVPcGFjaXR5
KQogICAgICAgICBjb21wb3NpdG9yKCktPmRpZFN0YXJ0QWNjZWxlcmF0ZWRBbmltYXRpb24oQ1NT
UHJvcGVydHlPcGFjaXR5KTsKIAogICAgIGlmIChkaWRBbmltYXRlVHJhbnNmb3JtKQogICAgICAg
ICBjb21wb3NpdG9yKCktPmRpZFN0YXJ0QWNjZWxlcmF0ZWRBbmltYXRpb24oQ1NTUHJvcGVydHlX
ZWJraXRUcmFuc2Zvcm0pOwogICAgIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBpZiAo
ZGlkQW5pbWF0ZUZpbHRlcikKKyAgICAgICAgY29tcG9zaXRvcigpLT5kaWRTdGFydEFjY2VsZXJh
dGVkQW5pbWF0aW9uKENTU1Byb3BlcnR5V2Via2l0RmlsdGVyKTsKKyNlbmRpZgorCisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQorICAgIHJldHVybiBkaWRBbmltYXRlT3BhY2l0eSB8fCBkaWRBbmlt
YXRlVHJhbnNmb3JtIHx8IGRpZEFuaW1hdGVGaWx0ZXI7CisjZWxzZQogICAgIHJldHVybiBkaWRB
bmltYXRlT3BhY2l0eSB8fCBkaWRBbmltYXRlVHJhbnNmb3JtOworI2VuZGlmCiB9CiAKIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjp0cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBp
bnQgcHJvcGVydHkpCkBAIC0xMzUzLDYgKzE0MDUsMTMgQEAgaW50IFJlbmRlckxheWVyQmFja2lu
Zzo6Z3JhcGhpY3NMYXllclRvQ1NTUHJvcGVydHkoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5
KQogICAgICAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6CiAgICAgICAg
ICAgICBjc3NQcm9wZXJ0eSA9IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcjoKKyNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgICAgICBjc3NQcm9wZXJ0eSA9IENTU1Byb3Bl
cnR5V2Via2l0RmlsdGVyOworI2Vsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBbmltYXRlZFByb3Bl
cnR5SW52YWxpZDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAg
LTEzNjgsNiArMTQyNywxMCBAQCBBbmltYXRlZFByb3BlcnR5SUQgUmVuZGVyTGF5ZXJCYWNraW5n
Ojpjc3NUb0dyYXBoaWNzTGF5ZXJQcm9wZXJ0eShpbnQgY3NzUHJvcGVydAogICAgICAgICAgICAg
cmV0dXJuIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yOgogICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGVkUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3I7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0RmlsdGVyOgorICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGVkUHJvcGVydHlX
ZWJraXRGaWx0ZXI7CisjZW5kaWYKICAgICAgICAgLy8gSXQncyBmaW5lIGlmIHdlIHNlZSBvdGhl
ciBjc3MgcHJvcGVydGllcyBoZXJlOyB0aGV5IGFyZSBqdXN0IG5vdCBhY2NlbGVyYXRlZC4KICAg
ICB9CiAgICAgcmV0dXJuIEFuaW1hdGVkUHJvcGVydHlJbnZhbGlkOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGZlYWJmMjdm
ODFiODAxZjk1MmMxOWI2OThmOWU2ODQ4ZWRiMTk0NDcuLjM4MDY3ODgyYTJiNTM1NzM1MDE0MWQ0
ZGQxNDBjZGFmODZiYzVkZDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wMi0wOSAgQ2hy
aXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGhhcmR3
YXJlIGFuaW1hdGlvbiBvZiBDU1MgZmlsdGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgxNTUKKworICAgICAgICBOZXcgdGVzdHMgZm9yIGhhcmR3
YXJlIGFuaW1hdGVkIGZpbHRlcnMsIGNyaWJiZWQgZnJvbSBzb2Z0d2FyZSBhbmltYXRpb24gdGVz
dHMuCisgICAgICAgIEFsc28gYWRkZWQgYSAtbXVsdGkgdGVzdCwgd2hpY2ggdXNlcyAzIGtleWZy
YW1lcyBmb3IgZWFjaCBmaWx0ZXIuIEhhcmR3YXJlIGFuaW1hdGlvbnMKKyAgICAgICAgdXNlIHRo
ZSBzYW1lIGxvZ2ljIGZvciAyIGtleWZyYW1lIGFuaW1hdGlvbnMgYW5kIHRyYW5zaXRpb25zLCBz
byB0aGlzIGV4ZXJjaXNlcyB0aGUKKyAgICAgICAgb3RoZXIgbG9naWMgcGF0aC4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNzczMvZmlsdGVycy9m
aWx0ZXItYW5pbWF0aW9uLWZyb20tbm9uZS1ody1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGNzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWZyb20tbm9uZS1ody5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBjc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1mcm9tLW5vbmUtbXVs
dGktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL2ZpbHRlcnMvZmlsdGVyLWFu
aW1hdGlvbi1mcm9tLW5vbmUtbXVsdGktaHctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBjc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1mcm9tLW5vbmUtbXVsdGktaHcuaHRtbDog
QWRkZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL2ZpbHRlci1hbmltYXRpb24tZnJvbS1ub25l
LW11bHRpLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0
aW9uLWh3LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL2ZpbHRl
ci1hbmltYXRpb24taHcuaHRtbDogQWRkZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL2ZpbHRl
ci1hbmltYXRpb24tbXVsdGktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL2Zp
bHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1tdWx0aS1ody1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGNzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLW11bHRpLWh3Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGNzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLW11bHRpLmh0bWw6IEFk
ZGVkLgorCiAyMDEyLTAyLTA3ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4K
IAogICAgICAgICB1bmljb2RlLWJpZGk6cGxhaW50ZXh0IGlzIHN1cHBvc2VkIHRvIGJlIGVmZmVj
dGl2ZSBvbiBkaXNwbGF5OmlubGluZSBlbGVtZW50cyB0b28KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWZyb20tbm9uZS1ody1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1mcm9tLW5vbmUt
aHctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2NWYwNzQwYmM4OGMxZDAzZjk3YjU5YjEyOGI0
YTFmM2UyMDdlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMv
ZmlsdGVyLWFuaW1hdGlvbi1mcm9tLW5vbmUtaHctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEg
QEAKKyAgICAgICAgCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJncmF5c2Nh
bGUtYm94IiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IGdyYXlzY2FsZSgw
LjUpCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJzZXBpYS1ib3giIGVsZW1l
bnQgYXQgMXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogc2VwaWEoMC41KQorUEFTUyAtICJ3ZWJr
aXRGaWx0ZXIiIHByb3BlcnR5IGZvciAic2F0dXJhdGUtYm94IiBlbGVtZW50IGF0IDFzIHNhdyBz
b21ldGhpbmcgY2xvc2UgdG86IHNhdHVyYXRlKDAuNSkKK1BBU1MgLSAid2Via2l0RmlsdGVyIiBw
cm9wZXJ0eSBmb3IgImh1ZXJvdGF0ZS1ib3giIGVsZW1lbnQgYXQgMXMgc2F3IHNvbWV0aGluZyBj
bG9zZSB0bzogaHVlcm90YXRlKDkwZGVnKQorUEFTUyAtICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5
IGZvciAiaW52ZXJ0LWJveCIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBp
bnZlcnQoMC41KQorUEFTUyAtICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5IGZvciAib3BhY2l0eS1i
b3giIGVsZW1lbnQgYXQgMXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogb3BhY2l0eSgwLjUpCitQ
QVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJicmlnaHRuZXNzLWJveCIgZWxlbWVu
dCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBicmlnaHRuZXNzKDAuNSkKK1BBU1MgLSAi
d2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3IgImNvbnRyYXN0LWJveCIgZWxlbWVudCBhdCAxcyBz
YXcgc29tZXRoaW5nIGNsb3NlIHRvOiBjb250cmFzdCgwLjUpCitQQVNTIC0gIndlYmtpdEZpbHRl
ciIgcHJvcGVydHkgZm9yICJibHVyLWJveCIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNs
b3NlIHRvOiBibHVyKDEwcHgpCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVy
cy9maWx0ZXItYW5pbWF0aW9uLWZyb20tbm9uZS1ody5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9m
aWx0ZXJzL2ZpbHRlci1hbmltYXRpb24tZnJvbS1ub25lLWh3Lmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzM1
ZWNkZWMyNzYzYjEzNGQ3NWM2OTE2NjdjZTUwOGNjODZhYzQ1YgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWZyb20tbm9uZS1ody5o
dG1sCkBAIC0wLDAgKzEsMTQzIEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4K
KyAgPHN0eWxlPgorICAgIC5ib3ggeworICAgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgICB3
aWR0aDogMTAwcHg7CisgICAgICAgIG1hcmdpbjogMTBweDsKKyAgICAgICAgYmFja2dyb3VuZC1j
b2xvcjogYmx1ZTsKKyAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgICAtd2Vi
a2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVaKDApOworICAgIH0KKworICAgICNncmF5c2NhbGUtYm94
IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBncmF5c2NhbGUtYW5pbSAycyBsaW5lYXIKKyAg
ICB9CisKKyAgICAjc2VwaWEtYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzZXBpYS1h
bmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNzYXR1cmF0ZS1ib3ggeworICAgICAgLXdlYmtp
dC1hbmltYXRpb246IHNhdHVyYXRlLWFuaW0gMnMgbGluZWFyCisgICAgfQorCisgICAgI2h1ZXJv
dGF0ZS1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IGh1ZXJvdGF0ZS1hbmltIDJzIGxp
bmVhcgorICAgIH0KKworICAgICNpbnZlcnQtYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9u
OiBpbnZlcnQtYW5pbSAycyBsaW5lYXIKKyAgICB9CisKKyAgICAjb3BhY2l0eS1ib3ggeworICAg
ICAgLXdlYmtpdC1hbmltYXRpb246IG9wYWNpdHktYW5pbSAycyBsaW5lYXIKKyAgICB9CisKKyAg
ICAjYnJpZ2h0bmVzcy1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IGJyaWdodG5lc3Mt
YW5pbSAycyBsaW5lYXIKKyAgICB9CisKKyAgICAjY29udHJhc3QtYm94IHsKKyAgICAgIC13ZWJr
aXQtYW5pbWF0aW9uOiBjb250cmFzdC1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNibHVy
LWJveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogYmx1ci1hbmltIDJzIGxpbmVhcgorICAg
IH0KKworICAgICNkcm9wc2hhZG93LWJveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZHJv
cHNoYWRvdy1hbmltIDJzIGxpbmVhcgorICAgIH0KKworCisgICAgQC13ZWJraXQta2V5ZnJhbWVz
IGdyYXlzY2FsZS1hbmltIHsKKyAgICAgICAgZnJvbSB7IH0KKyAgICAgICAgdG8gICB7IC13ZWJr
aXQtZmlsdGVyOiBncmF5c2NhbGUoMSk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFt
ZXMgc2VwaWEtYW5pbSB7CisgICAgICAgIGZyb20geyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0
LWZpbHRlcjogc2VwaWEoMSk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgc2F0
dXJhdGUtYW5pbSB7CisgICAgICAgIGZyb20geyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZp
bHRlcjogc2F0dXJhdGUoMCk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgaHVl
cm90YXRlLWFuaW0geworICAgICAgICBmcm9tIHsgfQorICAgICAgICB0byAgIHsgLXdlYmtpdC1m
aWx0ZXI6IGh1ZS1yb3RhdGUoMTgwZGVnKTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtleWZy
YW1lcyBpbnZlcnQtYW5pbSB7CisgICAgICAgIGZyb20geyB9CisgICAgICAgIHRvICAgeyAtd2Vi
a2l0LWZpbHRlcjogaW52ZXJ0KDEpOyB9CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVz
IG9wYWNpdHktYW5pbSB7CisgICAgICAgIGZyb20geyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0
LWZpbHRlcjogb3BhY2l0eSgwKTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtleWZyYW1lcyBi
cmlnaHRuZXNzLWFuaW0geworICAgICAgICBmcm9tIHsgfQorICAgICAgICB0byAgIHsgLXdlYmtp
dC1maWx0ZXI6IGJyaWdodG5lc3MoMCk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFt
ZXMgY29udHJhc3QtYW5pbSB7CisgICAgICAgIGZyb20geyB9CisgICAgICAgIHRvICAgeyAtd2Vi
a2l0LWZpbHRlcjogY29udHJhc3QoMCk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFt
ZXMgYmx1ci1hbmltIHsKKyAgICAgICAgZnJvbSB7IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQt
ZmlsdGVyOiBibHVyKDIwcHgpOyB9CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIGRy
b3BzaGFkb3ctYW5pbSB7CisgICAgICAgIGZyb20geyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0
LWZpbHRlcjogZHJvcC1zaGFkb3coMjBweCAzMnB4IDEycHggYmxhY2spKTsgfQorICAgIH0KKwor
ICA8L3N0eWxlPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vYW5pbWF0aW9ucy9yZXNvdXJjZXMvYW5p
bWF0aW9uLXRlc3QtaGVscGVycy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0Ij4KKyAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IFsKKyAgICAgIC8vIFthbmlt
YXRpb24tbmFtZSwgdGltZSwgZWxlbWVudC1pZCwgcHJvcGVydHksIGV4cGVjdGVkLXZhbHVlLCB0
b2xlcmFuY2VdCisgICAgICBbImdyYXlzY2FsZS1hbmltIiwgIDEsICJncmF5c2NhbGUtYm94Iiwg
IndlYmtpdEZpbHRlciIsICdncmF5c2NhbGUoMC41KScsIDAuMDVdLAorICAgICAgWyJzZXBpYS1h
bmltIiwgIDEsICJzZXBpYS1ib3giLCAid2Via2l0RmlsdGVyIiwgJ3NlcGlhKDAuNSknLCAwLjA1
XSwKKyAgICAgIFsic2F0dXJhdGUtYW5pbSIsICAxLCAic2F0dXJhdGUtYm94IiwgIndlYmtpdEZp
bHRlciIsICdzYXR1cmF0ZSgwLjUpJywgMC4wNV0sCisgICAgICBbImh1ZXJvdGF0ZS1hbmltIiwg
IDEsICJodWVyb3RhdGUtYm94IiwgIndlYmtpdEZpbHRlciIsICdodWVyb3RhdGUoOTBkZWcpJywg
NV0sCisgICAgICBbImludmVydC1hbmltIiwgIDEsICJpbnZlcnQtYm94IiwgIndlYmtpdEZpbHRl
ciIsICdpbnZlcnQoMC41KScsIDAuMDVdLAorICAgICAgWyJvcGFjaXR5LWFuaW0iLCAgMSwgIm9w
YWNpdHktYm94IiwgIndlYmtpdEZpbHRlciIsICdvcGFjaXR5KDAuNSknLCAwLjA1XSwKKyAgICAg
IFsiYnJpZ2h0bmVzcy1hbmltIiwgIDEsICJicmlnaHRuZXNzLWJveCIsICJ3ZWJraXRGaWx0ZXIi
LCAnYnJpZ2h0bmVzcygwLjUpJywgMC4wNV0sCisgICAgICBbImNvbnRyYXN0LWFuaW0iLCAgMSwg
ImNvbnRyYXN0LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnY29udHJhc3QoMC41KScsIDAuMDVdLAor
ICAgICAgWyJibHVyLWFuaW0iLCAgMSwgImJsdXItYm94IiwgIndlYmtpdEZpbHRlciIsICdibHVy
KDEwcHgpJywgMV0sCisgICAgICAvLyBGSVhNRSB3aGVuIHdlIGltcGxlbWVudCBjb21wdXRlZCBm
aWx0ZXIgc3R5bGUgZm9yIGRyb3Atc2hhZG93LgorICAgICAgLy8gWyJkcm9wc2hhZG93LWFuaW0i
LCAgMSwgImRyb3BzaGFkb3ctYm94IiwgIndlYmtpdEZpbHRlciIsICdkcm9wLXNoYWRvdyhyZ2Jh
KDAsIDAsIDAsIDAuMjUpIDVweCA4cHggM3B4ICknLCAyXSwKKyAgICBdOworICAgIAorICAgIHJ1
bkFuaW1hdGlvblRlc3QoZXhwZWN0ZWRWYWx1ZXMpOworICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorCis8ZGl2IGNsYXNzPSJib3giIGlkPSJncmF5c2NhbGUtYm94Ij48L2Rpdj4KKzxkaXYg
Y2xhc3M9ImJveCIgaWQ9InNlcGlhLWJveCI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJib3giIGlkPSJz
YXR1cmF0ZS1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0iaHVlcm90YXRlLWJveCI+
PC9kaXY+Cis8ZGl2IGNsYXNzPSJib3giIGlkPSJpbnZlcnQtYm94Ij48L2Rpdj4KKzxkaXYgY2xh
c3M9ImJveCIgaWQ9Im9wYWNpdHktYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9ImJy
aWdodG5lc3MtYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9ImNvbnRyYXN0LWJveCI+
PC9kaXY+Cis8ZGl2IGNsYXNzPSJib3giIGlkPSJibHVyLWJveCI+PC9kaXY+Cis8IS0tIDxkaXYg
Y2xhc3M9ImJveCIgaWQ9ImRyb3BzaGFkb3ctYm94Ij48L2Rpdj4gLS0+CisKKzxkaXYgaWQ9InJl
c3VsdCI+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWZyb20tbm9uZS1tdWx0aS1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1mcm9tLW5vbmUt
bXVsdGktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBjZGEzMDRkNjYxZTlhYWRhNzEwZDgxZGVh
MmY3Nzc1MjY3NWI0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRl
cnMvZmlsdGVyLWFuaW1hdGlvbi1mcm9tLW5vbmUtbXVsdGktZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMTEgQEAKKyAgICAgICAgCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJn
cmF5c2NhbGUtYm94IiBlbGVtZW50IGF0IDAuNXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogZ3Jh
eXNjYWxlKDAuMjUpCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJzZXBpYS1i
b3giIGVsZW1lbnQgYXQgMC41cyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBzZXBpYSgwLjI1KQor
UEFTUyAtICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5IGZvciAic2F0dXJhdGUtYm94IiBlbGVtZW50
IGF0IDAuNXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogc2F0dXJhdGUoMC43NSkKK1BBU1MgLSAi
d2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3IgImh1ZXJvdGF0ZS1ib3giIGVsZW1lbnQgYXQgMC41
cyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBodWVyb3RhdGUoNDVkZWcpCitQQVNTIC0gIndlYmtp
dEZpbHRlciIgcHJvcGVydHkgZm9yICJpbnZlcnQtYm94IiBlbGVtZW50IGF0IDAuNXMgc2F3IHNv
bWV0aGluZyBjbG9zZSB0bzogaW52ZXJ0KDAuMjUpCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJv
cGVydHkgZm9yICJvcGFjaXR5LWJveCIgZWxlbWVudCBhdCAwLjVzIHNhdyBzb21ldGhpbmcgY2xv
c2UgdG86IG9wYWNpdHkoMC43NSkKK1BBU1MgLSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3Ig
ImJyaWdodG5lc3MtYm94IiBlbGVtZW50IGF0IDAuNXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzog
YnJpZ2h0bmVzcygwLjc1KQorUEFTUyAtICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5IGZvciAiY29u
dHJhc3QtYm94IiBlbGVtZW50IGF0IDAuNXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogY29udHJh
c3QoMC43NSkKK1BBU1MgLSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3IgImJsdXItYm94IiBl
bGVtZW50IGF0IDAuNXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogYmx1cig1cHgpCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWZyb20tbm9u
ZS1tdWx0aS1ody1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZmlsdGVy
LWFuaW1hdGlvbi1mcm9tLW5vbmUtbXVsdGktaHctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBj
ZGEzMDRkNjYxZTlhYWRhNzEwZDgxZGVhMmY3Nzc1MjY3NWI0MzgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1mcm9tLW5vbmUtbXVs
dGktaHctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKKyAgICAgICAgCitQQVNTIC0gIndl
YmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJncmF5c2NhbGUtYm94IiBlbGVtZW50IGF0IDAuNXMg
c2F3IHNvbWV0aGluZyBjbG9zZSB0bzogZ3JheXNjYWxlKDAuMjUpCitQQVNTIC0gIndlYmtpdEZp
bHRlciIgcHJvcGVydHkgZm9yICJzZXBpYS1ib3giIGVsZW1lbnQgYXQgMC41cyBzYXcgc29tZXRo
aW5nIGNsb3NlIHRvOiBzZXBpYSgwLjI1KQorUEFTUyAtICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5
IGZvciAic2F0dXJhdGUtYm94IiBlbGVtZW50IGF0IDAuNXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0
bzogc2F0dXJhdGUoMC43NSkKK1BBU1MgLSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3IgImh1
ZXJvdGF0ZS1ib3giIGVsZW1lbnQgYXQgMC41cyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBodWVy
b3RhdGUoNDVkZWcpCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJpbnZlcnQt
Ym94IiBlbGVtZW50IGF0IDAuNXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogaW52ZXJ0KDAuMjUp
CitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJvcGFjaXR5LWJveCIgZWxlbWVu
dCBhdCAwLjVzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IG9wYWNpdHkoMC43NSkKK1BBU1MgLSAi
d2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3IgImJyaWdodG5lc3MtYm94IiBlbGVtZW50IGF0IDAu
NXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogYnJpZ2h0bmVzcygwLjc1KQorUEFTUyAtICJ3ZWJr
aXRGaWx0ZXIiIHByb3BlcnR5IGZvciAiY29udHJhc3QtYm94IiBlbGVtZW50IGF0IDAuNXMgc2F3
IHNvbWV0aGluZyBjbG9zZSB0bzogY29udHJhc3QoMC43NSkKK1BBU1MgLSAid2Via2l0RmlsdGVy
IiBwcm9wZXJ0eSBmb3IgImJsdXItYm94IiBlbGVtZW50IGF0IDAuNXMgc2F3IHNvbWV0aGluZyBj
bG9zZSB0bzogYmx1cig1cHgpCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVy
cy9maWx0ZXItYW5pbWF0aW9uLWZyb20tbm9uZS1tdWx0aS1ody5odG1sIGIvTGF5b3V0VGVzdHMv
Y3NzMy9maWx0ZXJzL2ZpbHRlci1hbmltYXRpb24tZnJvbS1ub25lLW11bHRpLWh3Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTM3MWFmMmVlY2NlZDVkNGI3ZDA4YjMwYzI5ZTViOGI2ZGU3NWE5ZgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWZy
b20tbm9uZS1tdWx0aS1ody5odG1sCkBAIC0wLDAgKzEsMTUyIEBACis8IURPQ1RZUEUgaHRtbD4K
KworPGh0bWw+Cis8aGVhZD4KKyAgPHN0eWxlPgorICAgIC5ib3ggeworICAgICAgICBoZWlnaHQ6
IDEwMHB4OworICAgICAgICB3aWR0aDogMTAwcHg7CisgICAgICAgIG1hcmdpbjogMTBweDsKKyAg
ICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAgICAgICAgZGlzcGxheTogaW5saW5lLWJs
b2NrOworICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVaKDApOworICAgIH0KKwor
ICAgICNncmF5c2NhbGUtYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBncmF5c2NhbGUt
YW5pbSAycyBsaW5lYXIKKyAgICB9CisKKyAgICAjc2VwaWEtYm94IHsKKyAgICAgIC13ZWJraXQt
YW5pbWF0aW9uOiBzZXBpYS1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNzYXR1cmF0ZS1i
b3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IHNhdHVyYXRlLWFuaW0gMnMgbGluZWFyCisg
ICAgfQorCisgICAgI2h1ZXJvdGF0ZS1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IGh1
ZXJvdGF0ZS1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNpbnZlcnQtYm94IHsKKyAgICAg
IC13ZWJraXQtYW5pbWF0aW9uOiBpbnZlcnQtYW5pbSAycyBsaW5lYXIKKyAgICB9CisKKyAgICAj
b3BhY2l0eS1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IG9wYWNpdHktYW5pbSAycyBs
aW5lYXIKKyAgICB9CisKKyAgICAjYnJpZ2h0bmVzcy1ib3ggeworICAgICAgLXdlYmtpdC1hbmlt
YXRpb246IGJyaWdodG5lc3MtYW5pbSAycyBsaW5lYXIKKyAgICB9CisKKyAgICAjY29udHJhc3Qt
Ym94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250cmFzdC1hbmltIDJzIGxpbmVhcgor
ICAgIH0KKworICAgICNibHVyLWJveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogYmx1ci1h
bmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNkcm9wc2hhZG93LWJveCB7CisgICAgICAtd2Vi
a2l0LWFuaW1hdGlvbjogZHJvcHNoYWRvdy1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgIEAt
d2Via2l0LWtleWZyYW1lcyBncmF5c2NhbGUtYW5pbSB7CisgICAgICAgIGZyb20geyB9CisgICAg
ICAgIDUwJSAgeyAtd2Via2l0LWZpbHRlcjogZ3JheXNjYWxlKDAuNSk7IH0KKyAgICAgICAgdG8g
ICB7IC13ZWJraXQtZmlsdGVyOiBncmF5c2NhbGUoMSk7IH0KKyAgICB9CisKKyAgICBALXdlYmtp
dC1rZXlmcmFtZXMgc2VwaWEtYW5pbSB7CisgICAgICAgIGZyb20geyB9CisgICAgICAgIDUwJSAg
eyAtd2Via2l0LWZpbHRlcjogc2VwaWEoMC41KTsgfQorICAgICAgICB0byAgIHsgLXdlYmtpdC1m
aWx0ZXI6IHNlcGlhKDEpOyB9CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIHNhdHVy
YXRlLWFuaW0geworICAgICAgICBmcm9tIHsgfQorICAgICAgICA1MCUgIHsgLXdlYmtpdC1maWx0
ZXI6IHNhdHVyYXRlKDAuNSk7IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBzYXR1
cmF0ZSgxKTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtleWZyYW1lcyBodWVyb3RhdGUtYW5p
bSB7CisgICAgICAgIGZyb20geyB9CisgICAgICAgIDUwJSAgeyAtd2Via2l0LWZpbHRlcjogaHVl
LXJvdGF0ZSg5MGRlZyk7IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBodWUtcm90
YXRlKDE4MGRlZyk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgaW52ZXJ0LWFu
aW0geworICAgICAgICBmcm9tIHsgfQorICAgICAgICA1MCUgIHsgLXdlYmtpdC1maWx0ZXI6IGlu
dmVydCgwLjUpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDEpOyB9
CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIG9wYWNpdHktYW5pbSB7CisgICAgICAg
IGZyb20geyB9CisgICAgICAgIDUwJSAgeyAtd2Via2l0LWZpbHRlcjogb3BhY2l0eSgwLjUpOyB9
CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRlcjogb3BhY2l0eSgwKTsgfQorICAgIH0KKwor
ICAgIEAtd2Via2l0LWtleWZyYW1lcyBicmlnaHRuZXNzLWFuaW0geworICAgICAgICBmcm9tIHsg
fQorICAgICAgICA1MCUgIHsgLXdlYmtpdC1maWx0ZXI6IGJyaWdodG5lc3MoMC41KTsgfQorICAg
ICAgICB0byAgIHsgLXdlYmtpdC1maWx0ZXI6IGJyaWdodG5lc3MoMCk7IH0KKyAgICB9CisKKyAg
ICBALXdlYmtpdC1rZXlmcmFtZXMgY29udHJhc3QtYW5pbSB7CisgICAgICAgIGZyb20geyB9Cisg
ICAgICAgIDUwJSAgeyAtd2Via2l0LWZpbHRlcjogY29udHJhc3QoMC41KTsgfQorICAgICAgICB0
byAgIHsgLXdlYmtpdC1maWx0ZXI6IGNvbnRyYXN0KDApOyB9CisgICAgfQorCisgICAgQC13ZWJr
aXQta2V5ZnJhbWVzIGJsdXItYW5pbSB7CisgICAgICAgIGZyb20geyB9CisgICAgICAgIDUwJSAg
eyAtd2Via2l0LWZpbHRlcjogYmx1cigxMHB4KTsgfQorICAgICAgICB0byAgIHsgLXdlYmtpdC1m
aWx0ZXI6IGJsdXIoMjBweCk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgZHJv
cHNoYWRvdy1hbmltIHsKKyAgICAgICAgZnJvbSB7IH0KKyAgICAgICAgNTAlICB7IC13ZWJraXQt
ZmlsdGVyOiBncmF5c2NhbGUoMTBweCAxNXB4IDVweCByZ2JhKDEyOCwgMTI4LCAxMjgsIDAuNSk7
IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBkcm9wLXNoYWRvdygyMHB4IDMwcHgg
MTBweCBibGFjaykpOyB9CisgICAgfQorCisgIDwvc3R5bGU+CisgIDxzY3JpcHQgc3JjPSIuLi8u
Li9hbmltYXRpb25zL3Jlc291cmNlcy9hbmltYXRpb24tdGVzdC1oZWxwZXJzLmpzIj48L3Njcmlw
dD4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgIGNvbnN0IGV4cGVjdGVk
VmFsdWVzID0gWworICAgICAgLy8gW2FuaW1hdGlvbi1uYW1lLCB0aW1lLCBlbGVtZW50LWlkLCBw
cm9wZXJ0eSwgZXhwZWN0ZWQtdmFsdWUsIHRvbGVyYW5jZV0KKyAgICAgIFsiZ3JheXNjYWxlLWFu
aW0iLCAgMC41LCAiZ3JheXNjYWxlLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnZ3JheXNjYWxlKDAu
MjUpJywgMC4wNV0sCisgICAgICBbInNlcGlhLWFuaW0iLCAgMC41LCAic2VwaWEtYm94IiwgIndl
YmtpdEZpbHRlciIsICdzZXBpYSgwLjI1KScsIDAuMDVdLAorICAgICAgWyJzYXR1cmF0ZS1hbmlt
IiwgIDAuNSwgInNhdHVyYXRlLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnc2F0dXJhdGUoMC43NSkn
LCAwLjA1XSwKKyAgICAgIFsiaHVlcm90YXRlLWFuaW0iLCAgMC41LCAiaHVlcm90YXRlLWJveCIs
ICJ3ZWJraXRGaWx0ZXIiLCAnaHVlcm90YXRlKDQ1ZGVnKScsIDNdLAorICAgICAgWyJpbnZlcnQt
YW5pbSIsICAwLjUsICJpbnZlcnQtYm94IiwgIndlYmtpdEZpbHRlciIsICdpbnZlcnQoMC4yNSkn
LCAwLjA1XSwKKyAgICAgIFsib3BhY2l0eS1hbmltIiwgIDAuNSwgIm9wYWNpdHktYm94IiwgIndl
YmtpdEZpbHRlciIsICdvcGFjaXR5KDAuNzUpJywgMC4wNV0sCisgICAgICBbImJyaWdodG5lc3Mt
YW5pbSIsICAwLjUsICJicmlnaHRuZXNzLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnYnJpZ2h0bmVz
cygwLjc1KScsIDAuMDVdLAorICAgICAgWyJjb250cmFzdC1hbmltIiwgIDAuNSwgImNvbnRyYXN0
LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnY29udHJhc3QoMC43NSknLCAwLjA1XSwKKyAgICAgIFsi
Ymx1ci1hbmltIiwgIDAuNSwgImJsdXItYm94IiwgIndlYmtpdEZpbHRlciIsICdibHVyKDVweCkn
LCAxXSwKKyAgICAgIC8vIEZJWE1FIHdoZW4gd2UgaW1wbGVtZW50IGNvbXB1dGVkIGZpbHRlciBz
dHlsZSBmb3IgZHJvcC1zaGFkb3cuCisgICAgICAvLyBbImRyb3BzaGFkb3ctYW5pbSIsICAxLCAi
ZHJvcHNoYWRvdy1ib3giLCAid2Via2l0RmlsdGVyIiwgJ2Ryb3Atc2hhZG93KHJnYmEoMCwgMCwg
MCwgMC4yNSkgNXB4IDhweCAzcHggKScsIDJdLAorICAgIF07CisgICAgCisgICAgcnVuQW5pbWF0
aW9uVGVzdChleHBlY3RlZFZhbHVlcyk7CisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisK
KzxkaXYgY2xhc3M9ImJveCIgaWQ9ImdyYXlzY2FsZS1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0i
Ym94IiBpZD0ic2VwaWEtYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9InNhdHVyYXRl
LWJveCI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJib3giIGlkPSJodWVyb3RhdGUtYm94Ij48L2Rpdj4K
KzxkaXYgY2xhc3M9ImJveCIgaWQ9ImludmVydC1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94
IiBpZD0ib3BhY2l0eS1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0iYnJpZ2h0bmVz
cy1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0iY29udHJhc3QtYm94Ij48L2Rpdj4K
KzxkaXYgY2xhc3M9ImJveCIgaWQ9ImJsdXItYm94Ij48L2Rpdj4KKzwhLS0gPGRpdiBjbGFzcz0i
Ym94IiBpZD0iZHJvcHNoYWRvdy1ib3giPjwvZGl2PiAtLT4KKworPGRpdiBpZD0icmVzdWx0Ij4K
KzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9m
aWx0ZXJzL2ZpbHRlci1hbmltYXRpb24tZnJvbS1ub25lLW11bHRpLmh0bWwgYi9MYXlvdXRUZXN0
cy9jc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1mcm9tLW5vbmUtbXVsdGkuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yNmFlYmIzNTMxMTA0NTY2OWNiOTU2ZDY3Y2VjNjQ4ZDE5Mjg1ODA4Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2ZpbHRlci1hbmltYXRpb24tZnJv
bS1ub25lLW11bHRpLmh0bWwKQEAgLTAsMCArMSwxNTIgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8
aHRtbD4KKzxoZWFkPgorICA8c3R5bGU+CisgICAgLmJveCB7CisgICAgICAgIGhlaWdodDogMTAw
cHg7CisgICAgICAgIHdpZHRoOiAxMDBweDsKKyAgICAgICAgbWFyZ2luOiAxMHB4OworICAgICAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOworICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
CisgICAgfQorCisgICAgI2dyYXlzY2FsZS1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246
IGdyYXlzY2FsZS1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNzZXBpYS1ib3ggeworICAg
ICAgLXdlYmtpdC1hbmltYXRpb246IHNlcGlhLWFuaW0gMnMgbGluZWFyCisgICAgfQorCisgICAg
I3NhdHVyYXRlLWJveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc2F0dXJhdGUtYW5pbSAy
cyBsaW5lYXIKKyAgICB9CisKKyAgICAjaHVlcm90YXRlLWJveCB7CisgICAgICAtd2Via2l0LWFu
aW1hdGlvbjogaHVlcm90YXRlLWFuaW0gMnMgbGluZWFyCisgICAgfQorCisgICAgI2ludmVydC1i
b3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IGludmVydC1hbmltIDJzIGxpbmVhcgorICAg
IH0KKworICAgICNvcGFjaXR5LWJveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogb3BhY2l0
eS1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNicmlnaHRuZXNzLWJveCB7CisgICAgICAt
d2Via2l0LWFuaW1hdGlvbjogYnJpZ2h0bmVzcy1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAg
ICNjb250cmFzdC1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IGNvbnRyYXN0LWFuaW0g
MnMgbGluZWFyCisgICAgfQorCisgICAgI2JsdXItYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0
aW9uOiBibHVyLWFuaW0gMnMgbGluZWFyCisgICAgfQorCisgICAgI2Ryb3BzaGFkb3ctYm94IHsK
KyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBkcm9wc2hhZG93LWFuaW0gMnMgbGluZWFyCisgICAg
fQorCisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgZ3JheXNjYWxlLWFuaW0geworICAgICAgICBm
cm9tIHsgfQorICAgICAgICA1MCUgIHsgLXdlYmtpdC1maWx0ZXI6IGdyYXlzY2FsZSgwLjUpOyB9
CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRlcjogZ3JheXNjYWxlKDEpOyB9CisgICAgfQor
CisgICAgQC13ZWJraXQta2V5ZnJhbWVzIHNlcGlhLWFuaW0geworICAgICAgICBmcm9tIHsgfQor
ICAgICAgICA1MCUgIHsgLXdlYmtpdC1maWx0ZXI6IHNlcGlhKDAuNSk7IH0KKyAgICAgICAgdG8g
ICB7IC13ZWJraXQtZmlsdGVyOiBzZXBpYSgxKTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtl
eWZyYW1lcyBzYXR1cmF0ZS1hbmltIHsKKyAgICAgICAgZnJvbSB7IH0KKyAgICAgICAgNTAlICB7
IC13ZWJraXQtZmlsdGVyOiBzYXR1cmF0ZSgwLjUpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0
LWZpbHRlcjogc2F0dXJhdGUoMSk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMg
aHVlcm90YXRlLWFuaW0geworICAgICAgICBmcm9tIHsgfQorICAgICAgICA1MCUgIHsgLXdlYmtp
dC1maWx0ZXI6IGh1ZS1yb3RhdGUoOTBkZWcpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZp
bHRlcjogaHVlLXJvdGF0ZSgxODBkZWcpOyB9CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJh
bWVzIGludmVydC1hbmltIHsKKyAgICAgICAgZnJvbSB7IH0KKyAgICAgICAgNTAlICB7IC13ZWJr
aXQtZmlsdGVyOiBpbnZlcnQoMC41KTsgfQorICAgICAgICB0byAgIHsgLXdlYmtpdC1maWx0ZXI6
IGludmVydCgxKTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtleWZyYW1lcyBvcGFjaXR5LWFu
aW0geworICAgICAgICBmcm9tIHsgfQorICAgICAgICA1MCUgIHsgLXdlYmtpdC1maWx0ZXI6IG9w
YWNpdHkoMC41KTsgfQorICAgICAgICB0byAgIHsgLXdlYmtpdC1maWx0ZXI6IG9wYWNpdHkoMCk7
IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgYnJpZ2h0bmVzcy1hbmltIHsKKyAg
ICAgICAgZnJvbSB7IH0KKyAgICAgICAgNTAlICB7IC13ZWJraXQtZmlsdGVyOiBicmlnaHRuZXNz
KDAuNSk7IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBicmlnaHRuZXNzKDApOyB9
CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIGNvbnRyYXN0LWFuaW0geworICAgICAg
ICBmcm9tIHsgfQorICAgICAgICA1MCUgIHsgLXdlYmtpdC1maWx0ZXI6IGNvbnRyYXN0KDAuNSk7
IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBjb250cmFzdCgwKTsgfQorICAgIH0K
KworICAgIEAtd2Via2l0LWtleWZyYW1lcyBibHVyLWFuaW0geworICAgICAgICBmcm9tIHsgfQor
ICAgICAgICA1MCUgIHsgLXdlYmtpdC1maWx0ZXI6IGJsdXIoMTBweCk7IH0KKyAgICAgICAgdG8g
ICB7IC13ZWJraXQtZmlsdGVyOiBibHVyKDIwcHgpOyB9CisgICAgfQorCisgICAgQC13ZWJraXQt
a2V5ZnJhbWVzIGRyb3BzaGFkb3ctYW5pbSB7CisgICAgICAgIGZyb20geyB9CisgICAgICAgIDUw
JSAgeyAtd2Via2l0LWZpbHRlcjogZ3JheXNjYWxlKDEwcHggMTVweCA1cHggcmdiYSgxMjgsIDEy
OCwgMTI4LCAwLjUpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRlcjogZHJvcC1zaGFk
b3coMjBweCAzMHB4IDEwcHggYmxhY2spKTsgfQorICAgIH0KKworICA8L3N0eWxlPgorICA8c2Ny
aXB0IHNyYz0iLi4vLi4vYW5pbWF0aW9ucy9yZXNvdXJjZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVy
cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICBj
b25zdCBleHBlY3RlZFZhbHVlcyA9IFsKKyAgICAgIC8vIFthbmltYXRpb24tbmFtZSwgdGltZSwg
ZWxlbWVudC1pZCwgcHJvcGVydHksIGV4cGVjdGVkLXZhbHVlLCB0b2xlcmFuY2VdCisgICAgICBb
ImdyYXlzY2FsZS1hbmltIiwgIDAuNSwgImdyYXlzY2FsZS1ib3giLCAid2Via2l0RmlsdGVyIiwg
J2dyYXlzY2FsZSgwLjI1KScsIDAuMDVdLAorICAgICAgWyJzZXBpYS1hbmltIiwgIDAuNSwgInNl
cGlhLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnc2VwaWEoMC4yNSknLCAwLjA1XSwKKyAgICAgIFsi
c2F0dXJhdGUtYW5pbSIsICAwLjUsICJzYXR1cmF0ZS1ib3giLCAid2Via2l0RmlsdGVyIiwgJ3Nh
dHVyYXRlKDAuNzUpJywgMC4wNV0sCisgICAgICBbImh1ZXJvdGF0ZS1hbmltIiwgIDAuNSwgImh1
ZXJvdGF0ZS1ib3giLCAid2Via2l0RmlsdGVyIiwgJ2h1ZXJvdGF0ZSg0NWRlZyknLCA1XSwKKyAg
ICAgIFsiaW52ZXJ0LWFuaW0iLCAgMC41LCAiaW52ZXJ0LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAn
aW52ZXJ0KDAuMjUpJywgMC4wNV0sCisgICAgICBbIm9wYWNpdHktYW5pbSIsICAwLjUsICJvcGFj
aXR5LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnb3BhY2l0eSgwLjc1KScsIDAuMDVdLAorICAgICAg
WyJicmlnaHRuZXNzLWFuaW0iLCAgMC41LCAiYnJpZ2h0bmVzcy1ib3giLCAid2Via2l0RmlsdGVy
IiwgJ2JyaWdodG5lc3MoMC43NSknLCAwLjA1XSwKKyAgICAgIFsiY29udHJhc3QtYW5pbSIsICAw
LjUsICJjb250cmFzdC1ib3giLCAid2Via2l0RmlsdGVyIiwgJ2NvbnRyYXN0KDAuNzUpJywgMC4w
NV0sCisgICAgICBbImJsdXItYW5pbSIsICAwLjUsICJibHVyLWJveCIsICJ3ZWJraXRGaWx0ZXIi
LCAnYmx1cig1cHgpJywgMV0sCisgICAgICAvLyBGSVhNRSB3aGVuIHdlIGltcGxlbWVudCBjb21w
dXRlZCBmaWx0ZXIgc3R5bGUgZm9yIGRyb3Atc2hhZG93LgorICAgICAgLy8gWyJkcm9wc2hhZG93
LWFuaW0iLCAgMSwgImRyb3BzaGFkb3ctYm94IiwgIndlYmtpdEZpbHRlciIsICdkcm9wLXNoYWRv
dyhyZ2JhKDAsIDAsIDAsIDAuMjUpIDVweCA4cHggM3B4ICknLCAyXSwKKyAgICBdOworICAgIAor
ICAgIHJ1bkFuaW1hdGlvblRlc3QoZXhwZWN0ZWRWYWx1ZXMpOworICA8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorCis8ZGl2IGNsYXNzPSJib3giIGlkPSJncmF5c2NhbGUtYm94Ij48L2Rpdj4K
KzxkaXYgY2xhc3M9ImJveCIgaWQ9InNlcGlhLWJveCI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJib3gi
IGlkPSJzYXR1cmF0ZS1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0iaHVlcm90YXRl
LWJveCI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJib3giIGlkPSJpbnZlcnQtYm94Ij48L2Rpdj4KKzxk
aXYgY2xhc3M9ImJveCIgaWQ9Im9wYWNpdHktYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIg
aWQ9ImJyaWdodG5lc3MtYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9ImNvbnRyYXN0
LWJveCI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJib3giIGlkPSJibHVyLWJveCI+PC9kaXY+Cis8IS0t
IDxkaXYgY2xhc3M9ImJveCIgaWQ9ImRyb3BzaGFkb3ctYm94Ij48L2Rpdj4gLS0+CisKKzxkaXYg
aWQ9InJlc3VsdCI+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWh3LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWh3LWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zNjVmMDc0MGJjODhjMWQwM2Y5N2I1OWIxMjhiNGExZjNlMjA3ZTNiCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2ZpbHRlci1hbmltYXRpb24t
aHctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKKyAgICAgICAgCitQQVNTIC0gIndlYmtp
dEZpbHRlciIgcHJvcGVydHkgZm9yICJncmF5c2NhbGUtYm94IiBlbGVtZW50IGF0IDFzIHNhdyBz
b21ldGhpbmcgY2xvc2UgdG86IGdyYXlzY2FsZSgwLjUpCitQQVNTIC0gIndlYmtpdEZpbHRlciIg
cHJvcGVydHkgZm9yICJzZXBpYS1ib3giIGVsZW1lbnQgYXQgMXMgc2F3IHNvbWV0aGluZyBjbG9z
ZSB0bzogc2VwaWEoMC41KQorUEFTUyAtICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5IGZvciAic2F0
dXJhdGUtYm94IiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IHNhdHVyYXRl
KDAuNSkKK1BBU1MgLSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3IgImh1ZXJvdGF0ZS1ib3gi
IGVsZW1lbnQgYXQgMXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogaHVlcm90YXRlKDkwZGVnKQor
UEFTUyAtICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5IGZvciAiaW52ZXJ0LWJveCIgZWxlbWVudCBh
dCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBpbnZlcnQoMC41KQorUEFTUyAtICJ3ZWJraXRG
aWx0ZXIiIHByb3BlcnR5IGZvciAib3BhY2l0eS1ib3giIGVsZW1lbnQgYXQgMXMgc2F3IHNvbWV0
aGluZyBjbG9zZSB0bzogb3BhY2l0eSgwLjUpCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVy
dHkgZm9yICJicmlnaHRuZXNzLWJveCIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3Nl
IHRvOiBicmlnaHRuZXNzKDAuNSkKK1BBU1MgLSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3Ig
ImNvbnRyYXN0LWJveCIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBjb250
cmFzdCgwLjUpCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJibHVyLWJveCIg
ZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBibHVyKDEwcHgpCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLWh3Lmh0bWwg
Yi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1ody5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjEwZGYyMGYxYzZmMzIwY2YzNDI1NGU4NmZlNzE4NDQ2Njk4ODY3NDkKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1ody5o
dG1sCkBAIC0wLDAgKzEsMTQ0IEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4K
KyAgPHN0eWxlPgorICAgIC5ib3ggeworICAgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgICB3
aWR0aDogMTAwcHg7CisgICAgICAgIG1hcmdpbjogMTBweDsKKyAgICAgICAgYmFja2dyb3VuZC1j
b2xvcjogYmx1ZTsKKyAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgICAtd2Vi
a2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVaKDApOworICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1k
dXJhdGlvbjoycyAhaW1wb3J0YW50OworICAgIH0KKworICAgICNncmF5c2NhbGUtYm94IHsKKyAg
ICAgIC13ZWJraXQtYW5pbWF0aW9uOiBncmF5c2NhbGUtYW5pbSAycyBsaW5lYXIKKyAgICB9CisK
KyAgICAjc2VwaWEtYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzZXBpYS1hbmltIDJz
IGxpbmVhcgorICAgIH0KKworICAgICNzYXR1cmF0ZS1ib3ggeworICAgICAgLXdlYmtpdC1hbmlt
YXRpb246IHNhdHVyYXRlLWFuaW0gMnMgbGluZWFyCisgICAgfQorCisgICAgI2h1ZXJvdGF0ZS1i
b3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IGh1ZXJvdGF0ZS1hbmltIDJzIGxpbmVhcgor
ICAgIH0KKworICAgICNpbnZlcnQtYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbnZl
cnQtYW5pbSAycyBsaW5lYXIKKyAgICB9CisKKyAgICAjb3BhY2l0eS1ib3ggeworICAgICAgLXdl
YmtpdC1hbmltYXRpb246IG9wYWNpdHktYW5pbSAycyBsaW5lYXIKKyAgICB9CisKKyAgICAjYnJp
Z2h0bmVzcy1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IGJyaWdodG5lc3MtYW5pbSAy
cyBsaW5lYXIKKyAgICB9CisKKyAgICAjY29udHJhc3QtYm94IHsKKyAgICAgIC13ZWJraXQtYW5p
bWF0aW9uOiBjb250cmFzdC1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNibHVyLWJveCB7
CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogYmx1ci1hbmltIDJzIGxpbmVhcgorICAgIH0KKwor
ICAgICNkcm9wc2hhZG93LWJveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZHJvcHNoYWRv
dy1hbmltIDJzIGxpbmVhcgorICAgIH0KKworCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIGdyYXlz
Y2FsZS1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBncmF5c2NhbGUoMCk7
IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBncmF5c2NhbGUoMSk7IH0KKyAgICB9
CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgc2VwaWEtYW5pbSB7CisgICAgICAgIGZyb20geyAt
d2Via2l0LWZpbHRlcjogc2VwaWEoMCk7IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVy
OiBzZXBpYSgxKTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtleWZyYW1lcyBzYXR1cmF0ZS1h
bmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBzYXR1cmF0ZSgwKTsgfQorICAg
ICAgICB0byAgIHsgLXdlYmtpdC1maWx0ZXI6IHNhdHVyYXRlKDEpOyB9CisgICAgfQorCisgICAg
QC13ZWJraXQta2V5ZnJhbWVzIGh1ZXJvdGF0ZS1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJr
aXQtZmlsdGVyOiBodWUtcm90YXRlKDApOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRl
cjogaHVlLXJvdGF0ZSgxODBkZWcpOyB9CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVz
IGludmVydC1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMCk7
IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMSk7IH0KKyAgICB9CisK
KyAgICBALXdlYmtpdC1rZXlmcmFtZXMgb3BhY2l0eS1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13
ZWJraXQtZmlsdGVyOiBvcGFjaXR5KDEpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRl
cjogb3BhY2l0eSgwKTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtleWZyYW1lcyBicmlnaHRu
ZXNzLWFuaW0geworICAgICAgICBmcm9tIHsgLXdlYmtpdC1maWx0ZXI6IGJyaWdodG5lc3MoMSk7
IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBicmlnaHRuZXNzKDApOyB9CisgICAg
fQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIGNvbnRyYXN0LWFuaW0geworICAgICAgICBmcm9t
IHsgLXdlYmtpdC1maWx0ZXI6IGNvbnRyYXN0KDEpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0
LWZpbHRlcjogY29udHJhc3QoMCk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMg
Ymx1ci1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBibHVyKDApOyB9Cisg
ICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRlcjogYmx1cigyMHB4KTsgfQorICAgIH0KKworICAg
IEAtd2Via2l0LWtleWZyYW1lcyBkcm9wc2hhZG93LWFuaW0geworICAgICAgICBmcm9tIHsgLXdl
YmtpdC1maWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAwIHRyYW5zcGFyZW50KTsgfQorICAgICAgICB0
byAgIHsgLXdlYmtpdC1maWx0ZXI6IGRyb3Atc2hhZG93KDIwcHggMzBweCAxMHB4IGJsYWNrKSk7
IH0KKyAgICB9CisKKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4uL2FuaW1hdGlvbnMv
cmVzb3VyY2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSBbCisg
ICAgICAvLyBbYW5pbWF0aW9uLW5hbWUsIHRpbWUsIGVsZW1lbnQtaWQsIHByb3BlcnR5LCBleHBl
Y3RlZC12YWx1ZSwgdG9sZXJhbmNlXQorICAgICAgWyJncmF5c2NhbGUtYW5pbSIsICAxLCAiZ3Jh
eXNjYWxlLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnZ3JheXNjYWxlKDAuNSknLCAwLjA1XSwKKyAg
ICAgIFsic2VwaWEtYW5pbSIsICAxLCAic2VwaWEtYm94IiwgIndlYmtpdEZpbHRlciIsICdzZXBp
YSgwLjUpJywgMC4wNV0sCisgICAgICBbInNhdHVyYXRlLWFuaW0iLCAgMSwgInNhdHVyYXRlLWJv
eCIsICJ3ZWJraXRGaWx0ZXIiLCAnc2F0dXJhdGUoMC41KScsIDAuMDVdLAorICAgICAgWyJodWVy
b3RhdGUtYW5pbSIsICAxLCAiaHVlcm90YXRlLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnaHVlcm90
YXRlKDkwZGVnKScsIDJdLAorICAgICAgWyJpbnZlcnQtYW5pbSIsICAxLCAiaW52ZXJ0LWJveCIs
ICJ3ZWJraXRGaWx0ZXIiLCAnaW52ZXJ0KDAuNSknLCAwLjA1XSwKKyAgICAgIFsib3BhY2l0eS1h
bmltIiwgIDEsICJvcGFjaXR5LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnb3BhY2l0eSgwLjUpJywg
MC4wNV0sCisgICAgICBbImJyaWdodG5lc3MtYW5pbSIsICAxLCAiYnJpZ2h0bmVzcy1ib3giLCAi
d2Via2l0RmlsdGVyIiwgJ2JyaWdodG5lc3MoMC41KScsIDAuMDVdLAorICAgICAgWyJjb250cmFz
dC1hbmltIiwgIDEsICJjb250cmFzdC1ib3giLCAid2Via2l0RmlsdGVyIiwgJ2NvbnRyYXN0KDAu
NSknLCAwLjA1XSwKKyAgICAgIFsiYmx1ci1hbmltIiwgIDEsICJibHVyLWJveCIsICJ3ZWJraXRG
aWx0ZXIiLCAnYmx1cigxMHB4KScsIDFdLAorICAgICAgLy8gRklYTUUgd2hlbiB3ZSBpbXBsZW1l
bnQgY29tcHV0ZWQgZmlsdGVyIHN0eWxlIGZvciBkcm9wLXNoYWRvdy4KKyAgICAgIC8vIFsiZHJv
cHNoYWRvdy1hbmltIiwgIDEsICJkcm9wc2hhZG93LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnZHJv
cC1zaGFkb3cocmdiYSgwLCAwLCAwLCAwLjUpIDEwcHggMTVweCA1cHggKScsIDJdLAorICAgIF07
CisgICAgCisgICAgcnVuQW5pbWF0aW9uVGVzdChleHBlY3RlZFZhbHVlcyk7CisgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+CisKKzxkaXYgY2xhc3M9ImJveCIgaWQ9ImdyYXlzY2FsZS1ib3gi
PjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0ic2VwaWEtYm94Ij48L2Rpdj4KKzxkaXYgY2xh
c3M9ImJveCIgaWQ9InNhdHVyYXRlLWJveCI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJib3giIGlkPSJo
dWVyb3RhdGUtYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9ImludmVydC1ib3giPjwv
ZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0ib3BhY2l0eS1ib3giPjwvZGl2PgorPGRpdiBjbGFz
cz0iYm94IiBpZD0iYnJpZ2h0bmVzcy1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0i
Y29udHJhc3QtYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9ImJsdXItYm94Ij48L2Rp
dj4KKzwhLS0gPGRpdiBjbGFzcz0iYm94IiBpZD0iZHJvcHNoYWRvdy1ib3giPjwvZGl2PiAtLT4K
KworPGRpdiBpZD0icmVzdWx0Ij4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2ZpbHRlci1hbmltYXRpb24tbXVsdGktZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2ZpbHRlci1hbmltYXRpb24tbXVsdGkt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2NWYwNzQwYmM4OGMxZDAzZjk3YjU5YjEyOGI0YTFm
M2UyMDdlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZmls
dGVyLWFuaW1hdGlvbi1tdWx0aS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorICAgICAg
ICAKK1BBU1MgLSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3IgImdyYXlzY2FsZS1ib3giIGVs
ZW1lbnQgYXQgMXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogZ3JheXNjYWxlKDAuNSkKK1BBU1Mg
LSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3IgInNlcGlhLWJveCIgZWxlbWVudCBhdCAxcyBz
YXcgc29tZXRoaW5nIGNsb3NlIHRvOiBzZXBpYSgwLjUpCitQQVNTIC0gIndlYmtpdEZpbHRlciIg
cHJvcGVydHkgZm9yICJzYXR1cmF0ZS1ib3giIGVsZW1lbnQgYXQgMXMgc2F3IHNvbWV0aGluZyBj
bG9zZSB0bzogc2F0dXJhdGUoMC41KQorUEFTUyAtICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5IGZv
ciAiaHVlcm90YXRlLWJveCIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBo
dWVyb3RhdGUoOTBkZWcpCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJpbnZl
cnQtYm94IiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IGludmVydCgwLjUp
CitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJvcGFjaXR5LWJveCIgZWxlbWVu
dCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBvcGFjaXR5KDAuNSkKK1BBU1MgLSAid2Vi
a2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3IgImJyaWdodG5lc3MtYm94IiBlbGVtZW50IGF0IDFzIHNh
dyBzb21ldGhpbmcgY2xvc2UgdG86IGJyaWdodG5lc3MoMC41KQorUEFTUyAtICJ3ZWJraXRGaWx0
ZXIiIHByb3BlcnR5IGZvciAiY29udHJhc3QtYm94IiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhp
bmcgY2xvc2UgdG86IGNvbnRyYXN0KDAuNSkKK1BBU1MgLSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0
eSBmb3IgImJsdXItYm94IiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IGJs
dXIoMTBweCkKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2ZpbHRlci1h
bmltYXRpb24tbXVsdGktaHctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJz
L2ZpbHRlci1hbmltYXRpb24tbXVsdGktaHctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2NWYw
NzQwYmM4OGMxZDAzZjk3YjU5YjEyOGI0YTFmM2UyMDdlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZmlsdGVyLWFuaW1hdGlvbi1tdWx0aS1ody1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxMSBAQAorICAgICAgICAKK1BBU1MgLSAid2Via2l0RmlsdGVyIiBw
cm9wZXJ0eSBmb3IgImdyYXlzY2FsZS1ib3giIGVsZW1lbnQgYXQgMXMgc2F3IHNvbWV0aGluZyBj
bG9zZSB0bzogZ3JheXNjYWxlKDAuNSkKK1BBU1MgLSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBm
b3IgInNlcGlhLWJveCIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBzZXBp
YSgwLjUpCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJzYXR1cmF0ZS1ib3gi
IGVsZW1lbnQgYXQgMXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogc2F0dXJhdGUoMC41KQorUEFT
UyAtICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5IGZvciAiaHVlcm90YXRlLWJveCIgZWxlbWVudCBh
dCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBodWVyb3RhdGUoOTBkZWcpCitQQVNTIC0gIndl
YmtpdEZpbHRlciIgcHJvcGVydHkgZm9yICJpbnZlcnQtYm94IiBlbGVtZW50IGF0IDFzIHNhdyBz
b21ldGhpbmcgY2xvc2UgdG86IGludmVydCgwLjUpCitQQVNTIC0gIndlYmtpdEZpbHRlciIgcHJv
cGVydHkgZm9yICJvcGFjaXR5LWJveCIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3Nl
IHRvOiBvcGFjaXR5KDAuNSkKK1BBU1MgLSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3IgImJy
aWdodG5lc3MtYm94IiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IGJyaWdo
dG5lc3MoMC41KQorUEFTUyAtICJ3ZWJraXRGaWx0ZXIiIHByb3BlcnR5IGZvciAiY29udHJhc3Qt
Ym94IiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IGNvbnRyYXN0KDAuNSkK
K1BBU1MgLSAid2Via2l0RmlsdGVyIiBwcm9wZXJ0eSBmb3IgImJsdXItYm94IiBlbGVtZW50IGF0
IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IGJsdXIoMTBweCkKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2ZpbHRlci1hbmltYXRpb24tbXVsdGktaHcuaHRtbCBiL0xh
eW91dFRlc3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLW11bHRpLWh3Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjM1OTAzZjc4ZDJlYzA1NWE2NjcxNTRmZmM5MDIyOTdlYjAzMTllMwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLW11
bHRpLWh3Lmh0bWwKQEAgLTAsMCArMSwxNTIgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4K
KzxoZWFkPgorICA8c3R5bGU+CisgICAgLmJveCB7CisgICAgICAgIGhlaWdodDogMTAwcHg7Cisg
ICAgICAgIHdpZHRoOiAxMDBweDsKKyAgICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgICBiYWNr
Z3JvdW5kLWNvbG9yOiBibHVlOworICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAg
fQorCisgICAgI2dyYXlzY2FsZS1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IGdyYXlz
Y2FsZS1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNzZXBpYS1ib3ggeworICAgICAgLXdl
YmtpdC1hbmltYXRpb246IHNlcGlhLWFuaW0gMnMgbGluZWFyCisgICAgfQorCisgICAgI3NhdHVy
YXRlLWJveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc2F0dXJhdGUtYW5pbSAycyBsaW5l
YXIKKyAgICB9CisKKyAgICAjaHVlcm90YXRlLWJveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlv
bjogaHVlcm90YXRlLWFuaW0gMnMgbGluZWFyCisgICAgfQorCisgICAgI2ludmVydC1ib3ggewor
ICAgICAgLXdlYmtpdC1hbmltYXRpb246IGludmVydC1hbmltIDJzIGxpbmVhcgorICAgIH0KKwor
ICAgICNvcGFjaXR5LWJveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogb3BhY2l0eS1hbmlt
IDJzIGxpbmVhcgorICAgIH0KKworICAgICNicmlnaHRuZXNzLWJveCB7CisgICAgICAtd2Via2l0
LWFuaW1hdGlvbjogYnJpZ2h0bmVzcy1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNjb250
cmFzdC1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IGNvbnRyYXN0LWFuaW0gMnMgbGlu
ZWFyCisgICAgfQorCisgICAgI2JsdXItYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBi
bHVyLWFuaW0gMnMgbGluZWFyCisgICAgfQorCisgICAgI2Ryb3BzaGFkb3ctYm94IHsKKyAgICAg
IC13ZWJraXQtYW5pbWF0aW9uOiBkcm9wc2hhZG93LWFuaW0gMnMgbGluZWFyCisgICAgfQorCisK
KyAgICBALXdlYmtpdC1rZXlmcmFtZXMgZ3JheXNjYWxlLWFuaW0geworICAgICAgICBmcm9tIHsg
LXdlYmtpdC1maWx0ZXI6IGdyYXlzY2FsZSgwKTsgfQorICAgICAgICA1MCUgIHsgLXdlYmtpdC1m
aWx0ZXI6IGdyYXlzY2FsZSgwLjUpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRlcjog
Z3JheXNjYWxlKDEpOyB9CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIHNlcGlhLWFu
aW0geworICAgICAgICBmcm9tIHsgLXdlYmtpdC1maWx0ZXI6IHNlcGlhKDApOyB9CisgICAgICAg
IDUwJSAgeyAtd2Via2l0LWZpbHRlcjogc2VwaWEoMC41KTsgfQorICAgICAgICB0byAgIHsgLXdl
YmtpdC1maWx0ZXI6IHNlcGlhKDEpOyB9CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVz
IHNhdHVyYXRlLWFuaW0geworICAgICAgICBmcm9tIHsgLXdlYmtpdC1maWx0ZXI6IHNhdHVyYXRl
KDApOyB9CisgICAgICAgIDUwJSAgeyAtd2Via2l0LWZpbHRlcjogc2F0dXJhdGUoMC41KTsgfQor
ICAgICAgICB0byAgIHsgLXdlYmtpdC1maWx0ZXI6IHNhdHVyYXRlKDEpOyB9CisgICAgfQorCisg
ICAgQC13ZWJraXQta2V5ZnJhbWVzIGh1ZXJvdGF0ZS1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13
ZWJraXQtZmlsdGVyOiBodWUtcm90YXRlKDApOyB9CisgICAgICAgIDUwJSAgeyAtd2Via2l0LWZp
bHRlcjogaHVlLXJvdGF0ZSg5MGRlZyk7IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVy
OiBodWUtcm90YXRlKDE4MGRlZyk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMg
aW52ZXJ0LWFuaW0geworICAgICAgICBmcm9tIHsgLXdlYmtpdC1maWx0ZXI6IGludmVydCgwKTsg
fQorICAgICAgICA1MCUgIHsgLXdlYmtpdC1maWx0ZXI6IGludmVydCgwLjUpOyB9CisgICAgICAg
IHRvICAgeyAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDEpOyB9CisgICAgfQorCisgICAgQC13ZWJr
aXQta2V5ZnJhbWVzIG9wYWNpdHktYW5pbSB7CisgICAgICAgIGZyb20geyAtd2Via2l0LWZpbHRl
cjogb3BhY2l0eSgxKTsgfQorICAgICAgICA1MCUgIHsgLXdlYmtpdC1maWx0ZXI6IG9wYWNpdHko
MC41KTsgfQorICAgICAgICB0byAgIHsgLXdlYmtpdC1maWx0ZXI6IG9wYWNpdHkoMCk7IH0KKyAg
ICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgYnJpZ2h0bmVzcy1hbmltIHsKKyAgICAgICAg
ZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBicmlnaHRuZXNzKDEpOyB9CisgICAgICAgIDUwJSAgeyAt
d2Via2l0LWZpbHRlcjogYnJpZ2h0bmVzcygwLjUpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0
LWZpbHRlcjogYnJpZ2h0bmVzcygwKTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtleWZyYW1l
cyBjb250cmFzdC1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBjb250cmFz
dCgxKTsgfQorICAgICAgICA1MCUgIHsgLXdlYmtpdC1maWx0ZXI6IGNvbnRyYXN0KDAuNSk7IH0K
KyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBjb250cmFzdCgwKTsgfQorICAgIH0KKwor
ICAgIEAtd2Via2l0LWtleWZyYW1lcyBibHVyLWFuaW0geworICAgICAgICBmcm9tIHsgLXdlYmtp
dC1maWx0ZXI6IGJsdXIoMCk7IH0KKyAgICAgICAgNTAlICB7IC13ZWJraXQtZmlsdGVyOiBibHVy
KDEwcHgpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRlcjogYmx1cigyMHB4KTsgfQor
ICAgIH0KKworICAgIEAtd2Via2l0LWtleWZyYW1lcyBkcm9wc2hhZG93LWFuaW0geworICAgICAg
ICBmcm9tIHsgLXdlYmtpdC1maWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAwIHRyYW5zcGFyZW50KTsg
fQorICAgICAgICA1MCUgIHsgLXdlYmtpdC1maWx0ZXI6IGdyYXlzY2FsZSgxMHB4IDE1cHggNXB4
IHJnYmEoMTI4LCAxMjgsIDEyOCwgMC41KTsgfQorICAgICAgICB0byAgIHsgLXdlYmtpdC1maWx0
ZXI6IGRyb3Atc2hhZG93KDIwcHggMzBweCAxMHB4IGJsYWNrKSk7IH0KKyAgICB9CisKKyAgPC9z
dHlsZT4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4uL2FuaW1hdGlvbnMvcmVzb3VyY2VzL2FuaW1hdGlv
bi10ZXN0LWhlbHBlcnMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCI+CisgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSBbCisgICAgICAvLyBbYW5pbWF0aW9u
LW5hbWUsIHRpbWUsIGVsZW1lbnQtaWQsIHByb3BlcnR5LCBleHBlY3RlZC12YWx1ZSwgdG9sZXJh
bmNlXQorICAgICAgWyJncmF5c2NhbGUtYW5pbSIsICAxLCAiZ3JheXNjYWxlLWJveCIsICJ3ZWJr
aXRGaWx0ZXIiLCAnZ3JheXNjYWxlKDAuNSknLCAwLjA1XSwKKyAgICAgIFsic2VwaWEtYW5pbSIs
ICAxLCAic2VwaWEtYm94IiwgIndlYmtpdEZpbHRlciIsICdzZXBpYSgwLjUpJywgMC4wNV0sCisg
ICAgICBbInNhdHVyYXRlLWFuaW0iLCAgMSwgInNhdHVyYXRlLWJveCIsICJ3ZWJraXRGaWx0ZXIi
LCAnc2F0dXJhdGUoMC41KScsIDAuMDVdLAorICAgICAgWyJodWVyb3RhdGUtYW5pbSIsICAxLCAi
aHVlcm90YXRlLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnaHVlcm90YXRlKDkwZGVnKScsIDJdLAor
ICAgICAgWyJpbnZlcnQtYW5pbSIsICAxLCAiaW52ZXJ0LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAn
aW52ZXJ0KDAuNSknLCAwLjA1XSwKKyAgICAgIFsib3BhY2l0eS1hbmltIiwgIDEsICJvcGFjaXR5
LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnb3BhY2l0eSgwLjUpJywgMC4wNV0sCisgICAgICBbImJy
aWdodG5lc3MtYW5pbSIsICAxLCAiYnJpZ2h0bmVzcy1ib3giLCAid2Via2l0RmlsdGVyIiwgJ2Jy
aWdodG5lc3MoMC41KScsIDAuMDVdLAorICAgICAgWyJjb250cmFzdC1hbmltIiwgIDEsICJjb250
cmFzdC1ib3giLCAid2Via2l0RmlsdGVyIiwgJ2NvbnRyYXN0KDAuNSknLCAwLjA1XSwKKyAgICAg
IFsiYmx1ci1hbmltIiwgIDEsICJibHVyLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnYmx1cigxMHB4
KScsIDFdLAorICAgICAgLy8gRklYTUUgd2hlbiB3ZSBpbXBsZW1lbnQgY29tcHV0ZWQgZmlsdGVy
IHN0eWxlIGZvciBkcm9wLXNoYWRvdy4KKyAgICAgIC8vIFsiZHJvcHNoYWRvdy1hbmltIiwgIDEs
ICJkcm9wc2hhZG93LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnZHJvcC1zaGFkb3cocmdiYSgwLCAw
LCAwLCAwLjUpIDEwcHggMTVweCA1cHggKScsIDJdLAorICAgIF07CisgICAgCisgICAgcnVuQW5p
bWF0aW9uVGVzdChleHBlY3RlZFZhbHVlcyk7CisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
CisKKzxkaXYgY2xhc3M9ImJveCIgaWQ9ImdyYXlzY2FsZS1ib3giPjwvZGl2PgorPGRpdiBjbGFz
cz0iYm94IiBpZD0ic2VwaWEtYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9InNhdHVy
YXRlLWJveCI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJib3giIGlkPSJodWVyb3RhdGUtYm94Ij48L2Rp
dj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9ImludmVydC1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0i
Ym94IiBpZD0ib3BhY2l0eS1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0iYnJpZ2h0
bmVzcy1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0iY29udHJhc3QtYm94Ij48L2Rp
dj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9ImJsdXItYm94Ij48L2Rpdj4KKzwhLS0gPGRpdiBjbGFz
cz0iYm94IiBpZD0iZHJvcHNoYWRvdy1ib3giPjwvZGl2PiAtLT4KKworPGRpdiBpZD0icmVzdWx0
Ij4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3Nz
My9maWx0ZXJzL2ZpbHRlci1hbmltYXRpb24tbXVsdGkuaHRtbCBiL0xheW91dFRlc3RzL2NzczMv
ZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLW11bHRpLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjM1OTAzZjc4
ZDJlYzA1NWE2NjcxNTRmZmM5MDIyOTdlYjAzMTllMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2NzczMvZmlsdGVycy9maWx0ZXItYW5pbWF0aW9uLW11bHRpLmh0bWwKQEAgLTAsMCAr
MSwxNTIgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxoZWFkPgorICA8c3R5bGU+Cisg
ICAgLmJveCB7CisgICAgICAgIGhlaWdodDogMTAwcHg7CisgICAgICAgIHdpZHRoOiAxMDBweDsK
KyAgICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOwor
ICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgfQorCisgICAgI2dyYXlzY2FsZS1i
b3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IGdyYXlzY2FsZS1hbmltIDJzIGxpbmVhcgor
ICAgIH0KKworICAgICNzZXBpYS1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRpb246IHNlcGlh
LWFuaW0gMnMgbGluZWFyCisgICAgfQorCisgICAgI3NhdHVyYXRlLWJveCB7CisgICAgICAtd2Vi
a2l0LWFuaW1hdGlvbjogc2F0dXJhdGUtYW5pbSAycyBsaW5lYXIKKyAgICB9CisKKyAgICAjaHVl
cm90YXRlLWJveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogaHVlcm90YXRlLWFuaW0gMnMg
bGluZWFyCisgICAgfQorCisgICAgI2ludmVydC1ib3ggeworICAgICAgLXdlYmtpdC1hbmltYXRp
b246IGludmVydC1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNvcGFjaXR5LWJveCB7Cisg
ICAgICAtd2Via2l0LWFuaW1hdGlvbjogb3BhY2l0eS1hbmltIDJzIGxpbmVhcgorICAgIH0KKwor
ICAgICNicmlnaHRuZXNzLWJveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbjogYnJpZ2h0bmVz
cy1hbmltIDJzIGxpbmVhcgorICAgIH0KKworICAgICNjb250cmFzdC1ib3ggeworICAgICAgLXdl
YmtpdC1hbmltYXRpb246IGNvbnRyYXN0LWFuaW0gMnMgbGluZWFyCisgICAgfQorCisgICAgI2Js
dXItYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBibHVyLWFuaW0gMnMgbGluZWFyCisg
ICAgfQorCisgICAgI2Ryb3BzaGFkb3ctYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBk
cm9wc2hhZG93LWFuaW0gMnMgbGluZWFyCisgICAgfQorCisKKyAgICBALXdlYmtpdC1rZXlmcmFt
ZXMgZ3JheXNjYWxlLWFuaW0geworICAgICAgICBmcm9tIHsgLXdlYmtpdC1maWx0ZXI6IGdyYXlz
Y2FsZSgwKTsgfQorICAgICAgICA1MCUgIHsgLXdlYmtpdC1maWx0ZXI6IGdyYXlzY2FsZSgwLjUp
OyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRlcjogZ3JheXNjYWxlKDEpOyB9CisgICAg
fQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIHNlcGlhLWFuaW0geworICAgICAgICBmcm9tIHsg
LXdlYmtpdC1maWx0ZXI6IHNlcGlhKDApOyB9CisgICAgICAgIDUwJSAgeyAtd2Via2l0LWZpbHRl
cjogc2VwaWEoMC41KTsgfQorICAgICAgICB0byAgIHsgLXdlYmtpdC1maWx0ZXI6IHNlcGlhKDEp
OyB9CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIHNhdHVyYXRlLWFuaW0geworICAg
ICAgICBmcm9tIHsgLXdlYmtpdC1maWx0ZXI6IHNhdHVyYXRlKDApOyB9CisgICAgICAgIDUwJSAg
eyAtd2Via2l0LWZpbHRlcjogc2F0dXJhdGUoMC41KTsgfQorICAgICAgICB0byAgIHsgLXdlYmtp
dC1maWx0ZXI6IHNhdHVyYXRlKDEpOyB9CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVz
IGh1ZXJvdGF0ZS1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBodWUtcm90
YXRlKDApOyB9CisgICAgICAgIDUwJSAgeyAtd2Via2l0LWZpbHRlcjogaHVlLXJvdGF0ZSg5MGRl
Zyk7IH0KKyAgICAgICAgdG8gICB7IC13ZWJraXQtZmlsdGVyOiBodWUtcm90YXRlKDE4MGRlZyk7
IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgaW52ZXJ0LWFuaW0geworICAgICAg
ICBmcm9tIHsgLXdlYmtpdC1maWx0ZXI6IGludmVydCgwKTsgfQorICAgICAgICA1MCUgIHsgLXdl
YmtpdC1maWx0ZXI6IGludmVydCgwLjUpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRl
cjogaW52ZXJ0KDEpOyB9CisgICAgfQorCisgICAgQC13ZWJraXQta2V5ZnJhbWVzIG9wYWNpdHkt
YW5pbSB7CisgICAgICAgIGZyb20geyAtd2Via2l0LWZpbHRlcjogb3BhY2l0eSgxKTsgfQorICAg
ICAgICA1MCUgIHsgLXdlYmtpdC1maWx0ZXI6IG9wYWNpdHkoMC41KTsgfQorICAgICAgICB0byAg
IHsgLXdlYmtpdC1maWx0ZXI6IG9wYWNpdHkoMCk7IH0KKyAgICB9CisKKyAgICBALXdlYmtpdC1r
ZXlmcmFtZXMgYnJpZ2h0bmVzcy1hbmltIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVy
OiBicmlnaHRuZXNzKDEpOyB9CisgICAgICAgIDUwJSAgeyAtd2Via2l0LWZpbHRlcjogYnJpZ2h0
bmVzcygwLjUpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LWZpbHRlcjogYnJpZ2h0bmVzcygw
KTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtleWZyYW1lcyBjb250cmFzdC1hbmltIHsKKyAg
ICAgICAgZnJvbSB7IC13ZWJraXQtZmlsdGVyOiBjb250cmFzdCgxKTsgfQorICAgICAgICA1MCUg
IHsgLXdlYmtpdC1maWx0ZXI6IGNvbnRyYXN0KDAuNSk7IH0KKyAgICAgICAgdG8gICB7IC13ZWJr
aXQtZmlsdGVyOiBjb250cmFzdCgwKTsgfQorICAgIH0KKworICAgIEAtd2Via2l0LWtleWZyYW1l
cyBibHVyLWFuaW0geworICAgICAgICBmcm9tIHsgLXdlYmtpdC1maWx0ZXI6IGJsdXIoMCk7IH0K
KyAgICAgICAgNTAlICB7IC13ZWJraXQtZmlsdGVyOiBibHVyKDEwcHgpOyB9CisgICAgICAgIHRv
ICAgeyAtd2Via2l0LWZpbHRlcjogYmx1cigyMHB4KTsgfQorICAgIH0KKworICAgIEAtd2Via2l0
LWtleWZyYW1lcyBkcm9wc2hhZG93LWFuaW0geworICAgICAgICBmcm9tIHsgLXdlYmtpdC1maWx0
ZXI6IGRyb3Atc2hhZG93KDAgMCAwIHRyYW5zcGFyZW50KTsgfQorICAgICAgICA1MCUgIHsgLXdl
YmtpdC1maWx0ZXI6IGdyYXlzY2FsZSgxMHB4IDE1cHggNXB4IHJnYmEoMTI4LCAxMjgsIDEyOCwg
MC41KTsgfQorICAgICAgICB0byAgIHsgLXdlYmtpdC1maWx0ZXI6IGRyb3Atc2hhZG93KDIwcHgg
MzBweCAxMHB4IGJsYWNrKSk7IH0KKyAgICB9CisKKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCBzcmM9
Ii4uLy4uL2FuaW1hdGlvbnMvcmVzb3VyY2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMiPjwv
c2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgY29uc3QgZXhw
ZWN0ZWRWYWx1ZXMgPSBbCisgICAgICAvLyBbYW5pbWF0aW9uLW5hbWUsIHRpbWUsIGVsZW1lbnQt
aWQsIHByb3BlcnR5LCBleHBlY3RlZC12YWx1ZSwgdG9sZXJhbmNlXQorICAgICAgWyJncmF5c2Nh
bGUtYW5pbSIsICAxLCAiZ3JheXNjYWxlLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnZ3JheXNjYWxl
KDAuNSknLCAwLjA1XSwKKyAgICAgIFsic2VwaWEtYW5pbSIsICAxLCAic2VwaWEtYm94IiwgIndl
YmtpdEZpbHRlciIsICdzZXBpYSgwLjUpJywgMC4wNV0sCisgICAgICBbInNhdHVyYXRlLWFuaW0i
LCAgMSwgInNhdHVyYXRlLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnc2F0dXJhdGUoMC41KScsIDAu
MDVdLAorICAgICAgWyJodWVyb3RhdGUtYW5pbSIsICAxLCAiaHVlcm90YXRlLWJveCIsICJ3ZWJr
aXRGaWx0ZXIiLCAnaHVlcm90YXRlKDkwZGVnKScsIDJdLAorICAgICAgWyJpbnZlcnQtYW5pbSIs
ICAxLCAiaW52ZXJ0LWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnaW52ZXJ0KDAuNSknLCAwLjA1XSwK
KyAgICAgIFsib3BhY2l0eS1hbmltIiwgIDEsICJvcGFjaXR5LWJveCIsICJ3ZWJraXRGaWx0ZXIi
LCAnb3BhY2l0eSgwLjUpJywgMC4wNV0sCisgICAgICBbImJyaWdodG5lc3MtYW5pbSIsICAxLCAi
YnJpZ2h0bmVzcy1ib3giLCAid2Via2l0RmlsdGVyIiwgJ2JyaWdodG5lc3MoMC41KScsIDAuMDVd
LAorICAgICAgWyJjb250cmFzdC1hbmltIiwgIDEsICJjb250cmFzdC1ib3giLCAid2Via2l0Rmls
dGVyIiwgJ2NvbnRyYXN0KDAuNSknLCAwLjA1XSwKKyAgICAgIFsiYmx1ci1hbmltIiwgIDEsICJi
bHVyLWJveCIsICJ3ZWJraXRGaWx0ZXIiLCAnYmx1cigxMHB4KScsIDFdLAorICAgICAgLy8gRklY
TUUgd2hlbiB3ZSBpbXBsZW1lbnQgY29tcHV0ZWQgZmlsdGVyIHN0eWxlIGZvciBkcm9wLXNoYWRv
dy4KKyAgICAgIC8vIFsiZHJvcHNoYWRvdy1hbmltIiwgIDEsICJkcm9wc2hhZG93LWJveCIsICJ3
ZWJraXRGaWx0ZXIiLCAnZHJvcC1zaGFkb3cocmdiYSgwLCAwLCAwLCAwLjUpIDEwcHggMTVweCA1
cHggKScsIDJdLAorICAgIF07CisgICAgCisgICAgcnVuQW5pbWF0aW9uVGVzdChleHBlY3RlZFZh
bHVlcyk7CisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxkaXYgY2xhc3M9ImJveCIg
aWQ9ImdyYXlzY2FsZS1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0ic2VwaWEtYm94
Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIgaWQ9InNhdHVyYXRlLWJveCI+PC9kaXY+Cis8ZGl2
IGNsYXNzPSJib3giIGlkPSJodWVyb3RhdGUtYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIg
aWQ9ImludmVydC1ib3giPjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0ib3BhY2l0eS1ib3gi
PjwvZGl2PgorPGRpdiBjbGFzcz0iYm94IiBpZD0iYnJpZ2h0bmVzcy1ib3giPjwvZGl2PgorPGRp
diBjbGFzcz0iYm94IiBpZD0iY29udHJhc3QtYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCIg
aWQ9ImJsdXItYm94Ij48L2Rpdj4KKzwhLS0gPGRpdiBjbGFzcz0iYm94IiBpZD0iZHJvcHNoYWRv
dy1ib3giPjwvZGl2PiAtLT4KKworPGRpdiBpZD0icmVzdWx0Ij4KKzwvZGl2PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>
<flag name="review"
          id="128200"
          type_id="1"
          status="+"
          setter="dino"
    />
    <flag name="commit-queue"
          id="128229"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
      

    </bug>

</bugzilla>