<?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>144198</bug_id>
          
          <creation_ts>2015-04-25 16:13:50 -0700</creation_ts>
          <short_desc>Eliminate styleDidChange with StyleDifferenceEqual when updates are actually necessary</short_desc>
          <delta_ts>2015-04-27 23:54:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>144037</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>dstockwell</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1088597</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-25 16:13:50 -0700</bug_when>
    <thetext>Eliminate styleDidChange with StyleDifferenceEqual when updates are actually necessary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088603</commentid>
    <comment_count>1</comment_count>
      <attachid>251654</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-25 16:29:54 -0700</bug_when>
    <thetext>Created attachment 251654
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088610</commentid>
    <comment_count>2</comment_count>
      <attachid>251654</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-25 17:20:37 -0700</bug_when>
    <thetext>Comment on attachment 251654
Patch

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

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:332
&gt;              CSSPropertyTransitionsMap::const_iterator end = m_transitions.end();
&gt;              for (CSSPropertyTransitionsMap::const_iterator it = m_transitions.begin(); it != end; ++it) {
&gt; -                if (ImplicitAnimation* anim = it-&gt;value.get())
&gt; -                    anim-&gt;animate(this, &amp;renderer, currentStyle, &amp;targetStyle, resultStyle);
&gt; +                ImplicitAnimation* anim = it-&gt;value.get();
&gt; +                if (anim &amp;&amp; anim-&gt;animate(this, &amp;renderer, currentStyle, &amp;targetStyle, resultStyle))
&gt; +                    animationStateChanged = true;
&gt;              }

Would look really great with a modern for loop:

    for (auto* animation : m_transitions.values()) {
        if (animation &amp;&amp; animation-&gt;animate(this, &amp;renderer, currentStyle, &amp;targetStyle, resultStyle))
            animationStateChanged = true;
    }

&gt; Source/WebCore/page/animation/ImplicitAnimation.cpp:91
&gt; +        // FIXME: still need this hack?

Could you write a slightly longer version of this FIXME that is sentence capitalized and also explains why you think we might not need it?

&gt; Source/WebCore/rendering/RenderElement.h:48
&gt; +    // hasSideEffects is true when out-of-band state (e.g. animations) requires that styleDidChange processing
&gt; +    // continues even if the style didn&apos;t change.

The grammar here is a little strange. You say that hasSideEffects “is true”, but the comment is about this function, not about the callers to this function. Could you word it better? The comment should be information about what th function does or what the caller should do, I think. Or it could be about the caller if you say “Called with”, I guess. I probably wouldn’t have complained if it was worded that way.

&gt; Source/WebCore/rendering/RenderElement.h:330
&gt; +    bool animationStateChanged;
&gt; +    setStyle(animation().updateAnimations(*this, WTF::move(style), animationStateChanged), hasSideEffects || animationStateChanged);

This is not right. There is no guarantee about ordering of the evaluation of arguments, so it might compute &quot;hasSideEffects || animationStateChanged&quot; before updateAnimations returns. You need to put that in a separate statement to makes sure the ordering is right.

&gt; Source/WebCore/style/StyleResolveTree.cpp:205
&gt; +    bool animationsChanged;
&gt; +    newRenderer-&gt;setStyleInternal(newRenderer-&gt;animation().updateAnimations(*newRenderer, newRenderer-&gt;style(), animationsChanged));

Same problem with arguments here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088845</commentid>
    <comment_count>3</comment_count>
      <attachid>251654</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-26 15:11:09 -0700</bug_when>
    <thetext>Comment on attachment 251654
Patch

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

&gt; Source/WebCore/ChangeLog:17
&gt; +        compositing or other work has to happen from styleStyle(). This is achieved by

styleStyle?

&gt; Source/WebCore/page/animation/CompositeAnimation.h:58
&gt; +    Ref&lt;RenderStyle&gt; animate(RenderElement&amp;, RenderStyle* currentStyle, RenderStyle&amp; targetStyle, bool&amp; animationStateChanged);

Why does this return the style as return value and the state change boolean as argument...

&gt; Source/WebCore/page/animation/ImplicitAnimation.cpp:65
&gt; +bool ImplicitAnimation::animate(CompositeAnimation*, RenderElement*, const RenderStyle*, RenderStyle* targetStyle, RefPtr&lt;RenderStyle&gt;&amp; animatedStyle)

...while this does the opposite?

&gt; Source/WebCore/rendering/RenderElement.cpp:397
&gt; +void RenderElement::setStyle(Ref&lt;RenderStyle&gt;&amp;&amp; style, bool hasSideEffects)

At minimum this should use an enum.

The name is bit vague. What do &quot;side effects&quot; mean here and why do they map to StyleDifferenceRecompositeLayer?

How about passing the base StyleDifference as parameter instead?

&gt; Source/WebCore/style/StyleResolveTree.cpp:634
&gt; +            renderer-&gt;setAnimatableStyle(*newStyle, current.styleChangeType() == SyntheticStyleChange);

Then this code would read something like

auto minimumStyleDifference = current.styleChangeType() == SyntheticStyleChange ? StyleDifferenceRecompositeLayer : StyleDifferenceEqual;
renderer-&gt;setAnimatableStyle(*newStyle, minimumStyleDifference);

I think something would be clearer and more flexible than going via another bool/enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089035</commentid>
    <comment_count>4</comment_count>
      <attachid>251746</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-27 09:09:02 -0700</bug_when>
    <thetext>Created attachment 251746
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089043</commentid>
    <comment_count>5</comment_count>
      <attachid>251746</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-27 09:41:42 -0700</bug_when>
    <thetext>Comment on attachment 251746
For EWS

Carrying review forward</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089398</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-27 22:01:33 -0700</bug_when>
    <thetext>https://trac.webkit.org/r183454</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089426</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-27 23:54:06 -0700</bug_when>
    <thetext>Followup fix in https://trac.webkit.org/r183461</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251654</attachid>
            <date>2015-04-25 16:29:54 -0700</date>
            <delta_ts>2015-04-27 09:08:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144198-20150425162847.patch</filename>
            <type>text/plain</type>
            <size>31729</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWM3ZTRkMDhhODNiYjg0
ZWExYWU3ZjZkN2YyZGU4NTlkNjVjMTU0OC4uY2NlOTNiOTM5ODUxYmVjNDcyZjMxMGI4MWQzM2U4
MmM2NWFmMzg4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDE1LTA0LTI1ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEVsaW1pbmF0ZSBz
dHlsZURpZENoYW5nZSB3aXRoIFN0eWxlRGlmZmVyZW5jZUVxdWFsIHdoZW4gdXBkYXRlcyBhcmUg
YWN0dWFsbHkgbmVjZXNzYXJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDQxOTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIFN5bnRoZXRpY1N0eWxlQ2hhbmdlIHN0eWxlIHJlY2FsY3MgYXJl
IHRyaWdnZXJlZCBmb3IgY2FzZXMgd2hlcmUgYmVoYXZpb3IgZGVwZW5kcworICAgICAgICBvbiBz
dGF0ZSB3aGljaCBpcyBvdXRzaWRlIG9mIFJlbmRlclN0eWxlOyB0aGlzIGluY2x1ZGVzIHRyaWdn
ZXJpbmcgY29tcG9zaXRpbmcgZm9yCisgICAgICAgIGFuaW1hdGlvbnMsIGZvciB2aWRlbyBhbmQg
Y2FudmFzLCBhbmQgZm9yIGlmcmFtZXMgd2l0aCBjb21wb3NpdGVkIGNvbnRlbnQuCisgICAgICAg
IAorICAgICAgICBJbiB0aGVzZSBjYXNlcywgd2UnZCBydW4gdGhyb3VnaCBSZW5kZXJFbGVtZW50
OjpzZXRTdHlsZSgpIGFuZCBpdHMgZmFuLW91dCwgYnV0CisgICAgICAgIHdpdGggZGlmZiA9PSBT
dHlsZURpZmZlcmVuY2VFcXVhbCwgYW5kIHNvIGJlIHVuYWJsZSB0byBkZXRlcm1pbmUgaWYgdGhl
cmUKKyAgICAgICAgaXMgYWN0dWFsIHdvcmsgdG8gYmUgZG9uZS4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgcGF0Y2ggZW5mb3JjZXMgdGhlIGNvbnRyYWN0IHRoYXQgdGhlIGRpZmYgaXMgbmV2ZXIg
U3R5bGVEaWZmZXJlbmNlRXF1YWwgaWYKKyAgICAgICAgY29tcG9zaXRpbmcgb3Igb3RoZXIgd29y
ayBoYXMgdG8gaGFwcGVuIGZyb20gc3R5bGVTdHlsZSgpLiBUaGlzIGlzIGFjaGlldmVkIGJ5Cisg
ICAgICAgIHBhc3NpbmcgaW4gYSAnaGFzU2lkZUVmZmVjdHMnIGZsYWcsIHdoaWNoIGNhdXNlcyB0
aGUgZGlmZiB0byBiZWNvbWUgYXQgbGVhc3QKKyAgICAgICAgU3R5bGVEaWZmZXJlbmNlUmVjb21w
b3NpdGVMYXllci4KKyAgICAgICAgCisgICAgICAgIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5
ZXJTdHlsZUNoYW5nZWQoKSBjYW4gbm93IHNhZmVseSBlYXJseSByZXR1cm4KKyAgICAgICAgaWYg
dGhlIGRpZmYgaXMgZXF1YWwuIEZ1dHVyZSBwYXRjaGVzIHdpbGwgcmVkdWNlIHJlZHVuZGFudCB3
b3JrIGV2ZW4gbW9yZS4KKworICAgICAgICBUZXN0OiBjb21wb3NpdGluZy9hbmltYXRpb24vbm8t
c3R5bGUtcmVjYWxjLWR1cmluZy1hY2NlbGVyYXRlZC1hbmltYXRpb24uaHRtbAorCisgICAgICAg
ICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6QW5p
bWF0aW9uQmFzZTo6YW5pbWF0ZSk6IFJldHVybnMgYSBib29sIG5vdyBpZiB0aGUgc3RhdGUgY2hh
bmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OnN0YXRlKToKKyAgICAgICAg
KiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMpOiBib29sIG91dCBwYXJh
bSB3aGljaCBpbmRpY2F0ZXMKKyAgICAgICAgd2hldGhlciBhbnkgYW5pbWF0aW9ucyBjaGFuZ2Vk
IHN0YXRlLgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKTogSWYgYW55IHRyYW5zaXRp
b25zIG9yIGFuaW1hdGlvbnMgY2hhbmdlZAorICAgICAgICBzdGF0ZSwgc2V0IHRoZSBhbmltYXRp
b25TdGF0ZUNoYW5nZWQgb3V0IHBhcmFtIHRvIHRydWUuCisgICAgICAgICogcGFnZS9hbmltYXRp
b24vQ29tcG9zaXRlQW5pbWF0aW9uLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vSW1wbGlj
aXRBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OmFu
aW1hdGUpOiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RhdGUgY2hhbmdlZC4KKyAgICAgICAgKiBwYWdl
L2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9u
L0tleWZyYW1lQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0
aW9uOjphbmltYXRlKTogUmV0dXJuIHRydWUgaWYgdGhlIHN0YXRlIGNoYW5nZWQuCisgICAgICAg
ICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojph
ZGp1c3RTdHlsZURpZmZlcmVuY2UpOiBXZSBtYXkgZW50ZXIgaGVyZSBub3cgd2l0aCBkaWZmCisg
ICAgICAgICE9IFN0eWxlRGlmZmVyZW5jZUVxdWFsLCBidXQgc3RpbGwgbmVlZCB0byBkbyB0aGUg
Y2hlY2sgdG8gc2VlIGlmIGxheWVycyBjaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RWxlbWVudDo6aW5pdGlhbGl6ZVN0eWxlKTogV2hlbiBzZXR0aW5nIHN0eWxlIGZvciB0aGUgZmly
c3QgdGltZSwKKyAgICAgICAgZG9uJ3QgdXNlIFN0eWxlRGlmZmVyZW5jZUVxdWFsLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c2V0U3R5bGUpOiBBZGRpdGlvbmFsIGZsYWcgdG8g
aW5kaWNhdGUgd2hldGhlciB0aGlzIHN0eWxlCisgICAgICAgIGNoYW5nZSBpbnZvbHZlcyBzaWRl
IGVmZmVjdHMuIElmIHRoZSBkaWZmIGlzIGVxdWFsIGJ1dCB0aGUgZmxhZyBpcyBzZXQsIGNoYW5n
ZQorICAgICAgICB0aGUgZGlmZiB0byBTdHlsZURpZmZlcmVuY2VSZWNvbXBvc2l0ZUxheWVyICh0
aGUgImxvd2VzdCIgbm9uLXplcm8gZGlmZikuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnNldEFuaW1hdGFibGVT
dHlsZSk6IFBhc3MgdHJ1ZSB0byBzZXRTdHlsZSgpIGlmIGhhc1NpZGVFZmZlY3RzCisgICAgICAg
IGlzIHRydWUsIG9yIGlmIGFuaW1hdGlvbiBzdGF0ZSBjaGFuZ2VkLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c3R5
bGVDaGFuZ2VkKTogUGFzcyB0aGUgZGlmZiBkb3duLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpsYXllclN0eWxlQ2hhbmdlZCk6IFJldHVybiBpZiB0aGUgZGlmZiBpcyBlcXVhbC4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmg6IFN0eWxlRGlmZmVyZW5jZU5l
d1N0eWxlIGlzIHVzZWQgd2hlbgorICAgICAgICBzZXR0aW5nIHN0eWxlIGZvciB0aGUgZmlyc3Qg
dGltZS4KKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpjcmVhdGVSZW5kZXJlcklmTmVlZGVkKTogUHJvdmlkZSBhbmltYXRpb25z
Q2hhbmdlZCBib29sICh3aGljaCBpcyB1bnVzZWQpLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OnJlc29sdmVMb2NhbCk6IElmIHRoZSBzdHlsZSBjaGFuZ2UgaXMgc3ludGhldGljLCBzZXQgdGhl
IGZsYWcgdGhhdAorICAgICAgICBzYXlzIHRoZXJlIGFyZSBzaWRlLWVmZmVjdHMuCisKIDIwMTUt
MDQtMjQgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbQ29jb2FdIEZvbnRQbGF0Zm9ybURhdGEncyBlcXVhbGl0eSBjaGVjayBzaG91bGQgYWx3YXlz
IHVzZSByZWZlcmVuY2UgVVJMcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5p
bWF0aW9uQmFzZS5oCmluZGV4IGVmYzkyOGQ0NDkxNjk1YWUwM2I3OGM4ODk2ZjM4Zjk2MWY3MDk2
NzcuLmM2MDNhZjNkODYxZDU1OWMyNWU5MGZkMDZhZmFlMjU5YmY3MGJjOTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKQEAgLTEzNSw3ICsxMzUs
OCBAQCBwdWJsaWM6CiAKICAgICBkb3VibGUgcHJvZ3Jlc3MoZG91YmxlIHNjYWxlLCBkb3VibGUg
b2Zmc2V0LCBjb25zdCBUaW1pbmdGdW5jdGlvbiopIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lk
IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRl
clN0eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBSZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSovLCBS
ZWZQdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUqLykgPSAwOworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIHN0YXRlIGNoYW5nZWQuCisgICAgdmlydHVhbCBib29s
IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRl
clN0eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBSZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSovLCBS
ZWZQdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUqLykgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBnZXRBbmltYXRlZFN0eWxlKFJlZlB0cjxSZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHls
ZSovKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5p
bWF0aW9uKExheW91dFJlY3QmKSBjb25zdCA9IDA7CkBAIC0yMzMsNiArMjM0LDcgQEAgcHJvdGVj
dGVkOgogICAgIHZvaWQgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKIAogICAgIGJvb2wg
aXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBY2NlbGVyYXRlZDsgfQorICAgIEFu
aW1hdGlvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25TdGF0ZTsgfQog
CiAgICAgc3RhdGljIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYyhFbGVtZW50Kik7CiAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCmluZGV4IGY5NDczOGE4MDYzYjllZDgyYzZjZThhNmYzOTM5YmNhOGUzMjA0YmMuLmY1
ZTI3OGYzMWRiZmEzYTI1YWEwZWY2ZTMwYWIxN2VhOGFhYzEwMjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC01
NjgsOCArNTY4LDEwIEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW9u
cyhSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKICAgICAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHls
ZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CiB9CiAKLVJlZjxSZW5kZXJTdHlsZT4gQW5p
bWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgUmVmPFJlbmRlclN0eWxlPiYmIG5ld1N0eWxlKQorUmVmPFJlbmRlclN0eWxlPiBBbmltYXRp
b25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBS
ZWY8UmVuZGVyU3R5bGU+JiYgbmV3U3R5bGUsIGJvb2wmIGFuaW1hdGlvblN0YXRlQ2hhbmdlZCkK
IHsKKyAgICBhbmltYXRpb25TdGF0ZUNoYW5nZWQgPSBmYWxzZTsKKwogICAgIC8vIERvbid0IGRv
IGFueXRoaW5nIGlmIHdlJ3JlIGluIHRoZSBjYWNoZQogICAgIGlmIChyZW5kZXJlci5kb2N1bWVu
dCgpLmluUGFnZUNhY2hlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om1vdmUobmV3U3R5bGUpOwpA
QCAtNTk0LDcgKzU5Niw3IEBAIFJlZjxSZW5kZXJTdHlsZT4gQW5pbWF0aW9uQ29udHJvbGxlcjo6
dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwKICAgICBSZWY8UmVuZGVy
U3R5bGU+IG5ld1N0eWxlQmVmb3JlQW5pbWF0aW9uKFdURjo6bW92ZShuZXdTdHlsZSkpOwogCiAg
ICAgQ29tcG9zaXRlQW5pbWF0aW9uJiByZW5kZXJlckFuaW1hdGlvbnMgPSBtX2RhdGEtPmVuc3Vy
ZUNvbXBvc2l0ZUFuaW1hdGlvbihyZW5kZXJlcik7Ci0gICAgYXV0byBibGVuZGVkU3R5bGUgPSBy
ZW5kZXJlckFuaW1hdGlvbnMuYW5pbWF0ZShyZW5kZXJlciwgb2xkU3R5bGUsIG5ld1N0eWxlQmVm
b3JlQW5pbWF0aW9uKTsKKyAgICBhdXRvIGJsZW5kZWRTdHlsZSA9IHJlbmRlcmVyQW5pbWF0aW9u
cy5hbmltYXRlKHJlbmRlcmVyLCBvbGRTdHlsZSwgbmV3U3R5bGVCZWZvcmVBbmltYXRpb24sIGFu
aW1hdGlvblN0YXRlQ2hhbmdlZCk7CiAKICAgICBpZiAocmVuZGVyZXIucGFyZW50KCkgfHwgbmV3
U3R5bGVCZWZvcmVBbmltYXRpb24tPmFuaW1hdGlvbnMoKSB8fCAob2xkU3R5bGUgJiYgb2xkU3R5
bGUtPmFuaW1hdGlvbnMoKSkpIHsKICAgICAgICAgbV9kYXRhLT51cGRhdGVBbmltYXRpb25UaW1l
ckZvclJlbmRlcmVyKHJlbmRlcmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAppbmRleCA5ODczNmEzMGE2ZjRmYTA0NGRjNGQ1
NDFmZmEyNDBlMDA5ZWE1OWUwLi5hOTk1MzhjOGFmODI1MjJkODE5OGZiNGM3NDgwNzUyZGI0ZGY5
ZGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25D
b250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
Q29udHJvbGxlci5oCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB+QW5pbWF0aW9uQ29u
dHJvbGxlcigpOwogCiAgICAgdm9pZCBjYW5jZWxBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmKTsK
LSAgICBSZWY8UmVuZGVyU3R5bGU+IHVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYsIFJl
ZjxSZW5kZXJTdHlsZT4mJiBuZXdTdHlsZSk7CisgICAgUmVmPFJlbmRlclN0eWxlPiB1cGRhdGVB
bmltYXRpb25zKFJlbmRlckVsZW1lbnQmLCBSZWY8UmVuZGVyU3R5bGU+JiYgbmV3U3R5bGUsIGJv
b2wmIGFuaW1hdGlvblN0YXRlQ2hhbmdlZCk7CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsKIAogICAgIC8vIElm
IHBvc3NpYmxlLCBjb21wdXRlIHRoZSB2aXN1YWwgZXh0ZW50IG9mIGFueSB0cmFuc2Zvcm0gYW5p
bWF0aW9uIG9uIHRoZSBnaXZlbiByZW5kZXJlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKaW5kZXggYzgwYzBmZjNlNDI1ODIw
MWU3ODlkNDFhNDVkZDQ5MzAzMTg5NWE2Mi4uMTU5YjMwM2ZlYzY1NGVhM2IyN2UxY2Y2Y2JlYmZh
NGVhMWY0Y2I5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29t
cG9zaXRlQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9D
b21wb3NpdGVBbmltYXRpb24uY3BwCkBAIC0zMTEsNyArMzExLDcgQEAgdm9pZCBDb21wb3NpdGVB
bmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJl
ciwgUmVuZGUKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMucmVtb3ZlKGFuaW1zVG9CZVJl
bW92ZWRbal0pOwogfQogCi1SZWY8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5p
bWF0ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
UmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKQorUmVmPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmlt
YXRpb246OmFuaW1hdGUoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsIFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgYm9vbCYgYW5pbWF0aW9uU3RhdGVD
aGFuZ2VkKQogewogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0U3R5bGU7CiAKQEAgLTMy
Niw4ICszMjYsOSBAQCBSZWY8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0
ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUmVuZGVyU3R5bAogICAgICAgICBpZiAoIW1fdHJh
bnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICAg
ICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpKQotICAgICAgICAg
ICAgICAgICAgICBhbmltLT5hbmltYXRlKHRoaXMsICZyZW5kZXJlciwgY3VycmVudFN0eWxlLCAm
dGFyZ2V0U3R5bGUsIHJlc3VsdFN0eWxlKTsKKyAgICAgICAgICAgICAgICBJbXBsaWNpdEFuaW1h
dGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoYW5pbSAm
JiBhbmltLT5hbmltYXRlKHRoaXMsICZyZW5kZXJlciwgY3VycmVudFN0eWxlLCAmdGFyZ2V0U3R5
bGUsIHJlc3VsdFN0eWxlKSkKKyAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uU3RhdGVDaGFu
Z2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMzNiwxMiAr
MzM3LDEzIEBAIFJlZjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5kZXJTdHlsCiAgICAgLy8gdG8gZmlsbCBpbiBhIFJl
bmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCiAgICAgZm9yIChWZWN0b3I8QXRvbWljU3RyaW5n
SW1wbCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5i
ZWdpbigpOyBpdCAhPSBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXAuZW5kKCk7ICsraXQpIHsK
ICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBtX2tleWZy
YW1lQW5pbWF0aW9ucy5nZXQoKml0KTsKLSAgICAgICAgaWYgKGtleWZyYW1lQW5pbSkKLSAgICAg
ICAgICAgIGtleWZyYW1lQW5pbS0+YW5pbWF0ZSh0aGlzLCAmcmVuZGVyZXIsIGN1cnJlbnRTdHls
ZSwgJnRhcmdldFN0eWxlLCByZXN1bHRTdHlsZSk7CisgICAgICAgIGlmIChrZXlmcmFtZUFuaW0g
JiYga2V5ZnJhbWVBbmltLT5hbmltYXRlKHRoaXMsICZyZW5kZXJlciwgY3VycmVudFN0eWxlLCAm
dGFyZ2V0U3R5bGUsIHJlc3VsdFN0eWxlKSkKKyAgICAgICAgICAgIGFuaW1hdGlvblN0YXRlQ2hh
bmdlZCA9IHRydWU7CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdFN0eWxlKQogICAgICAgICByZXR1
cm4gcmVzdWx0U3R5bGUucmVsZWFzZU5vbk51bGwoKTsKKwogICAgIHJldHVybiB0YXJnZXRTdHls
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9z
aXRlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVB
bmltYXRpb24uaAppbmRleCA1MDNmYzM0ZTBmNTYwYWJjNmQ0YWE5ODlmZDY1ZTU2M2MyNjE4YTFm
Li5lMzM2ZmU2NTY1MjBkYzNiOTc0N2Q4OGE3OGM4MGJkMGJmYTU2NDlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaApAQCAtNTUs
NyArNTUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBjbGVhclJlbmRlcmVyKCk7CiAKLSAg
ICBSZWY8UmVuZGVyU3R5bGU+IGFuaW1hdGUoUmVuZGVyRWxlbWVudCYsIFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUsIFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSk7CisgICAgUmVmPFJlbmRlclN0
eWxlPiBhbmltYXRlKFJlbmRlckVsZW1lbnQmLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBS
ZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIGJvb2wmIGFuaW1hdGlvblN0YXRlQ2hhbmdlZCk7CiAg
ICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gZ2V0QW5pbWF0ZWRTdHlsZSgpIGNvbnN0OwogICAg
IGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25z
dDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRB
bmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmlt
YXRpb24uY3BwCmluZGV4IDg0YTI0ZGUzNzkyOTNiNzlhNzhhZDU4YTAyMzI4MjQ4M2IwNDllYWEu
LjkwOTA4N2RjMGFhZjU3Njg4NDc5ZjA4OTVjZjg4M2M2NWM0ZThmNTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKQEAgLTYy
LDEyICs2MiwxNCBAQCBib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JM
aXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGluTGlzdAogICAgIHJldHVybiBtX29iamVj
dC0+ZG9jdW1lbnQoKS5oYXNMaXN0ZW5lclR5cGUoaW5MaXN0ZW5lclR5cGUpOwogfQogCi12b2lk
IEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVs
ZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVm
UHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKK2Jvb2wgSW1wbGljaXRBbmltYXRpb246
OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRl
clN0eWxlKiwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBh
bmltYXRlZFN0eWxlKQogewogICAgIC8vIElmIHdlIGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1h
dGlvbiBpcyBkb25lLCBpdCBtZWFucyB3ZSBhcmUgY2xlYW5pbmcgdXAgYSBqdXN0IGZpbmlzaGVk
IGFuaW1hdGlvbi4KICAgICAvLyBTbyBqdXN0IHJldHVybi4gRXZlcnl0aGluZyBpcyBhbHJlYWR5
IGFsbCBjbGVhbmVkIHVwLgogICAgIGlmIChwb3N0QWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQW5pbWF0aW9uU3RhdGUgb2xkU3RhdGUgPSBz
dGF0ZSgpOwogCiAgICAgLy8gUmVzZXQgdG8gc3RhcnQgdGhlIHRyYW5zaXRpb24gaWYgd2UgYXJl
IG5ldwogICAgIGlmIChpc05ldygpKQpAQCAtODEsMTUgKzgzLDE4IEBAIHZvaWQgSW1wbGljaXRB
bmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNv
bnN0IFJlbmRlCiAgICAgYm9vbCBuZWVkc0FuaW0gPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Ymxl
bmRQcm9wZXJ0aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVkU3R5bGUuZ2V0
KCksIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNzKDEsIDAsIDAp
KTsKICAgICAvLyBGSVhNRTogd2UgYWxzbyBuZWVkIHRvIGRldGVjdCBjYXNlcyB3aGVyZSB3ZSBo
YXZlIHRvIHNvZnR3YXJlIGFuaW1hdGUgZm9yIG90aGVyIHJlYXNvbnMsCiAgICAgLy8gc3VjaCBh
cyBhIGNoaWxkIHVzaW5nIGluaGVyaXRpbmcgdGhlIHRyYW5zZm9ybS4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTAyCi0gICAgaWYgKCFuZWVkc0FuaW0pCisgICAg
aWYgKCFuZWVkc0FuaW0pIHsKICAgICAgICAgLy8gSWYgd2UgYXJlIHJ1bm5pbmcgYW4gYWNjZWxl
cmF0ZWQgYW5pbWF0aW9uLCBzZXQgYSBmbGFnIGluIHRoZSBzdHlsZSB3aGljaCBjYXVzZXMgdGhl
IHN0eWxlCiAgICAgICAgIC8vIHRvIGNvbXBhcmUgYXMgZGlmZmVyZW50IHRvIGFueSBvdGhlciBz
dHlsZS4gVGhpcyBlbnN1cmVzIHRoYXQgY2hhbmdlcyB0byB0aGUgcHJvcGVydHkKICAgICAgICAg
Ly8gdGhhdCBpcyBhbmltYXRpbmcgYXJlIGNvcnJlY3RseSBkZXRlY3RlZCBkdXJpbmcgdGhlIGFu
aW1hdGlvbiAoZS5nLiB3aGVuIGEgdHJhbnNpdGlvbgogICAgICAgICAvLyBnZXRzIGludGVycnVw
dGVkKS4KKyAgICAgICAgLy8gRklYTUU6IHN0aWxsIG5lZWQgdGhpcyBoYWNrPwogICAgICAgICBh
bmltYXRlZFN0eWxlLT5zZXRJc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbigpOworICAgIH0K
IAogICAgIC8vIEZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVlZGVkCiAgICAgZmlyZUFuaW1h
dGlvbkV2ZW50c0lmTmVlZGVkKCk7CisgICAgcmV0dXJuIHN0YXRlKCkgIT0gb2xkU3RhdGU7CiB9
CiAKIHZvaWQgSW1wbGljaXRBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUoUmVmUHRyPFJlbmRl
clN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCmluZGV4IDUxNGFjZDZmYjFkMjQwOTE1NDE0ZmFhZTc5
MjQ5ZDI0NThkZWY2NjcuLjBjYWI2YTlhNDgzYzA0M2Y1Y2M1ZmQ2NTNhNGUxMmQ0N2UzZjZhYTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRp
b24uaApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5p
bWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZW5k
QW5pbWF0aW9uKCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21wb3Np
dGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmlt
YXRlZFN0eWxlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0ZShDb21wb3NpdGVB
bmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHls
ZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRl
ZFN0eWxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShSZWZQ
dHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVzZXQoUmVuZGVyU3R5bGUqIHRvKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCmluZGV4IGRiNmIzNzg5NDI3NTYwZjY0
NmQzM2FjMjU3MmE0NWZlNGYzZTk4ZjEuLjRiYTU5MmM5OGNlY2YwYTdhNDgzMjY4Yjc4NjYxMDEw
MTgyNTBkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZy
YW1lQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlm
cmFtZUFuaW1hdGlvbi5jcHAKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIEtleWZyYW1lQW5pbWF0
aW9uOjpmZXRjaEludGVydmFsRW5kcG9pbnRzRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eQogICAgIHByb2cgPSBwcm9ncmVzcyhzY2FsZSwgb2Zmc2V0LCBwcmV2S2V5ZnJhbWUudGlt
aW5nRnVuY3Rpb24obmFtZSgpKSk7CiB9CiAKLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1h
dGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlckVsZW1lbnQq
LCBjb25zdCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVmUHRyPFJl
bmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKK2Jvb2wgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1h
dGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlckVsZW1lbnQq
LCBjb25zdCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVmUHRyPFJl
bmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKICAgICAvLyBGaXJlIHRoZSBzdGFydCB0aW1l
b3V0IGlmIG5lZWRlZAogICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwpAQCAtMTMz
LDcgKzEzMyw3IEBAIHZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5p
bWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlckVsCiAgICAgaWYgKHBvc3RBY3RpdmUo
KSkgewogICAgICAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCiAgICAgICAgICAgICBhbmltYXRlZFN0
eWxlID0gY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHRhcmdldFN0eWxlKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gSWYgd2UgYXJlIHdh
aXRpbmcgZm9yIHRoZSBzdGFydCB0aW1lciwgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIHN0
eWxlIHlldC4KQEAgLTE0MiwxNCArMTQyLDE2IEBAIHZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmFu
aW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlckVsCiAg
ICAgLy8gU3BlY2lhbCBjYXNlIDIgLSBpZiB0aGVyZSBpcyBhIGJhY2t3YXJkcyBmaWxsIG1vZGUs
IHRoZW4gd2Ugd2FudCB0byBjb250aW51ZQogICAgIC8vIHRocm91Z2ggdG8gdGhlIHN0eWxlIGJs
ZW5kIHNvIHRoYXQgd2UgZ2V0IHRoZSBmcm9tU3R5bGUuCiAgICAgaWYgKHdhaXRpbmdUb1N0YXJ0
KCkgJiYgbV9hbmltYXRpb24tPmRlbGF5KCkgPiAwICYmICFtX2FuaW1hdGlvbi0+ZmlsbHNCYWNr
d2FyZHMoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAg
ICAgLy8gSWYgd2UgaGF2ZSBubyBrZXlmcmFtZXMsIGRvbid0IGFuaW1hdGUuCiAgICAgaWYgKCFt
X2tleWZyYW1lcy5zaXplKCkpIHsKICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlv
blN0YXRlSW5wdXQ6OkVuZEFuaW1hdGlvbiwgLTEpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBBbmltYXRpb25TdGF0ZSBvbGRTdGF0ZSA9IHN0
YXRlKCk7CisKICAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24uCiAgICAgLy8gV2Uga25v
dyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtlIG9uZSBpZiBuZWVkZWQu
CiAgICAgaWYgKCFhbmltYXRlZFN0eWxlKQpAQCAtMTcwLDggKzE3MiwxMSBAQCB2b2lkIEtleWZy
YW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0
aW9uLCBSZW5kZXJFbAogICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHJ1bm5pbmcgYW4gYWNjZWxl
cmF0ZWQgYW5pbWF0aW9uLCBzZXQgYSBmbGFnIGluIHRoZSBzdHlsZQogICAgICAgICAgICAgLy8g
dG8gaW5kaWNhdGUgaXQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gbWFrZSBzdXJlIHdlIGdldCBhbiB1
cGRhdGVkCiAgICAgICAgICAgICAvLyBzdHlsZSBmb3IgaGl0IHRlc3RpbmcsIGV0Yy4KKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBzdGlsbCBuZWVkIHRoaXM/CiAgICAgICAgICAgICBhbmltYXRlZFN0
eWxlLT5zZXRJc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbigpOwogICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gc3RhdGUoKSAhPSBvbGRTdGF0ZTsKIH0KIAogdm9pZCBLZXlmcmFtZUFuaW1hdGlv
bjo6Z2V0QW5pbWF0ZWRTdHlsZShSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgK
aW5kZXggMmVkZGQ3MTc5YzlhZTJiZjdjOWZmOTU0OGQ0YWNjYzNlOGY2ZTIyMS4uZTNhZWY2NzQ3
YWFmNzIyYjY5YTQyY2M1NzMxYzVkNmVkNjNjZDIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCkBAIC00NSw3ICs0NSw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlmcmFtZUFuaW1hdGlvbihhbmlt
YXRpb24sIHJlbmRlcmVyLCBpbmRleCwgY29tcG9zaXRlQW5pbWF0aW9uLCB1bmFuaW1hdGVkU3R5
bGUpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRp
b24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxl
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24q
LCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVy
U3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShSZWZQdHI8UmVuZGVy
U3R5bGU+Jikgb3ZlcnJpZGU7CiAKICAgICBib29sIGNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFu
aW1hdGlvbihMYXlvdXRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggZjJhNTEwMjNlMDA5NDM4MTJiZmRhYTgyY2I3
MWUzNDRhYmI3MTkyMS4uOTMyMTJhNTc5Mjk3YWNlMjc3ZjNmNTcxNGFkN2RjNTZhMDg1YTEzOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApAQCAtMjk2LDcg
KzI5Niw3IEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJFbGVtZW50OjphZGp1c3RTdHlsZURpZmZl
cmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIHVuc2lnCiAgICAgLy8gVGhlIGFuc3dlciB0byBy
ZXF1aXJlc0xheWVyKCkgZm9yIHBsdWdpbnMsIGlmcmFtZXMsIGFuZCBjYW52YXMgY2FuIGNoYW5n
ZSB3aXRob3V0IHRoZSBhY3R1YWwKICAgICAvLyBzdHlsZSBjaGFuZ2luZywgc2luY2UgaXQgZGVw
ZW5kcyBvbiB3aGV0aGVyIHdlIGRlY2lkZSB0byBjb21wb3NpdGUgdGhlc2UgZWxlbWVudHMuIFdo
ZW4gdGhlCiAgICAgLy8gbGF5ZXIgc3RhdHVzIG9mIG9uZSBvZiB0aGVzZSBlbGVtZW50cyBjaGFu
Z2VzLCB3ZSBuZWVkIHRvIGZvcmNlIGEgbGF5b3V0LgotICAgIGlmIChkaWZmID09IFN0eWxlRGlm
ZmVyZW5jZUVxdWFsICYmIGlzUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCgpKSB7CisgICAgaWYgKGRp
ZmYgPCBTdHlsZURpZmZlcmVuY2VMYXlvdXQgJiYgaXNSZW5kZXJMYXllck1vZGVsT2JqZWN0KCkp
IHsKICAgICAgICAgaWYgKGhhc0xheWVyKCkgIT0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9i
amVjdD4oKnRoaXMpLnJlcXVpcmVzTGF5ZXIoKSkKICAgICAgICAgICAgIGRpZmYgPSBTdHlsZURp
ZmZlcmVuY2VMYXlvdXQ7CiAgICAgfQpAQCAtMzY2LDcgKzM2Niw3IEBAIHZvaWQgUmVuZGVyRWxl
bWVudDo6dXBkYXRlU2hhcGVJbWFnZShjb25zdCBTaGFwZVZhbHVlKiBvbGRTaGFwZVZhbHVlLCBj
b25zdCBTaGFwCiAKIHZvaWQgUmVuZGVyRWxlbWVudDo6aW5pdGlhbGl6ZVN0eWxlKCkKIHsKLSAg
ICBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlRXF1YWwsIHN0eWxlKCkpOworICAgIHN0
eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2VOZXdTdHlsZSwgc3R5bGUoKSk7CiAKICAgICBt
X2hhc0luaXRpYWxpemVkU3R5bGUgPSB0cnVlOwogCkBAIC0zODUsNyArMzg1LDcgQEAgdm9pZCBS
ZW5kZXJFbGVtZW50Ojppbml0aWFsaXplU3R5bGUoKQogICAgIGlmIChtX3N0eWxlLT5vdXRsaW5l
V2lkdGgoKSA+IDAgJiYgbV9zdHlsZS0+b3V0bGluZVNpemUoKSA+IG1heGltYWxPdXRsaW5lU2l6
ZShQYWludFBoYXNlT3V0bGluZSkpCiAgICAgICAgIHZpZXcoKS5zZXRNYXhpbWFsT3V0bGluZVNp
emUoc3RkOjptYXgodGhlbWUoKS5wbGF0Zm9ybUZvY3VzUmluZ01heFdpZHRoKCksIHN0YXRpY19j
YXN0PGludD4obV9zdHlsZS0+b3V0bGluZVNpemUoKSkpKTsKIAotICAgIHN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZUVxdWFsLCBudWxscHRyKTsKKyAgICBzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2VOZXdTdHlsZSwgbnVsbHB0cik7CiAKICAgICAvLyBXZSBzaG91bGRuJ3QgaGF2
ZSBhbnkgdGV4dCBjaGlsZHJlbiB0aGF0IHdvdWxkIG5lZWQgc3R5bGVEaWRDaGFuZ2UgYXQgdGhp
cyBwb2ludC4KICAgICBBU1NFUlQoIWNoaWxkcmVuT2ZUeXBlPFJlbmRlclRleHQ+KCp0aGlzKS5m
aXJzdCgpKTsKQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmluaXRpYWxp
emVTdHlsZSgpCiAgICAgLy8gaGF2ZSB0aGVpciBwYXJlbnQgc2V0IGJlZm9yZSBnZXR0aW5nIGEg
Y2FsbCB0byBpbml0aWFsaXplU3R5bGUoKSA6fAogfQogCi12b2lkIFJlbmRlckVsZW1lbnQ6OnNl
dFN0eWxlKFJlZjxSZW5kZXJTdHlsZT4mJiBzdHlsZSkKK3ZvaWQgUmVuZGVyRWxlbWVudDo6c2V0
U3R5bGUoUmVmPFJlbmRlclN0eWxlPiYmIHN0eWxlLCBib29sIGhhc1NpZGVFZmZlY3RzKQogewog
ICAgIC8vIEZJWE1FOiBTaG91bGQgY2hhbmdlIFJlbmRlclZpZXcgc28gaXQgY2FuIHVzZSBpbml0
aWFsaXplU3R5bGUgdG9vLgogICAgIC8vIElmIHdlIGRvIHRoYXQsIHdlIGNhbiBhc3NlcnQgbV9o
YXNJbml0aWFsaXplZFN0eWxlIHVuY29uZGl0aW9uYWxseSwKQEAgLTQwOCw2ICs0MDgsNyBAQCB2
b2lkIFJlbmRlckVsZW1lbnQ6OnNldFN0eWxlKFJlZjxSZW5kZXJTdHlsZT4mJiBzdHlsZSkKICAg
ICAgICAgQVNTRVJUKCFpc1JlbmRlcklGcmFtZSgpKTsKICAgICAgICAgQVNTRVJUKCFpc0VtYmVk
ZGVkT2JqZWN0KCkpOwogICAgICAgICBBU1NFUlQoIWlzQ2FudmFzKCkpOworICAgICAgICBBU1NF
UlQoIWhhc1NpZGVFZmZlY3RzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDE2LDYg
KzQxNyw5IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6c2V0U3R5bGUoUmVmPFJlbmRlclN0eWxlPiYm
IHN0eWxlKQogICAgIGlmIChtX2hhc0luaXRpYWxpemVkU3R5bGUpCiAgICAgICAgIGRpZmYgPSBt
X3N0eWxlLT5kaWZmKHN0eWxlLmdldCgpLCBjb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcyk7CiAK
KyAgICBpZiAoaGFzU2lkZUVmZmVjdHMgJiYgZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VFcXVhbCkK
KyAgICAgICAgZGlmZiA9IFN0eWxlRGlmZmVyZW5jZVJlY29tcG9zaXRlTGF5ZXI7CisKICAgICBk
aWZmID0gYWRqdXN0U3R5bGVEaWZmZXJlbmNlKGRpZmYsIGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0
aWVzKTsKIAogICAgIHN0eWxlV2lsbENoYW5nZShkaWZmLCBzdHlsZS5nZXQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAppbmRleCAzZWQ5YzZlM2Y5YmU4YWE5Mjhh
Y2NjOTM4NjA4ZmFiYTRlMjQ1Y2RlLi40MTBkOTI2NWNiMzM2ZTBlZjk0Mjk3OWI0ZGI5NTJlZDEz
YzA4ZGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKQEAgLTQ0
LDE0ICs0NCwxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGluaXRpYWxpemVTdHlsZSgpOwogCi0g
ICAgdm9pZCBzZXRTdHlsZShSZWY8UmVuZGVyU3R5bGU+JiYpOworICAgIC8vIGhhc1NpZGVFZmZl
Y3RzIGlzIHRydWUgd2hlbiBvdXQtb2YtYmFuZCBzdGF0ZSAoZS5nLiBhbmltYXRpb25zKSByZXF1
aXJlcyB0aGF0IHN0eWxlRGlkQ2hhbmdlIHByb2Nlc3NpbmcKKyAgICAvLyBjb250aW51ZXMgZXZl
biBpZiB0aGUgc3R5bGUgZGlkbid0IGNoYW5nZS4KKyAgICB2b2lkIHNldFN0eWxlKFJlZjxSZW5k
ZXJTdHlsZT4mJiwgYm9vbCBoYXNTaWRlRWZmZWN0cyA9IGZhbHNlKTsKICAgICAvLyBDYWxsZWQg
dG8gdXBkYXRlIGEgc3R5bGUgdGhhdCBpcyBhbGxvd2VkIHRvIHRyaWdnZXIgYW5pbWF0aW9ucy4K
LSAgICB2b2lkIHNldEFuaW1hdGFibGVTdHlsZShSZWY8UmVuZGVyU3R5bGU+JiYpOworICAgIHZv
aWQgc2V0QW5pbWF0YWJsZVN0eWxlKFJlZjxSZW5kZXJTdHlsZT4mJiwgYm9vbCBoYXNTaWRlRWZm
ZWN0cyk7CiAKICAgICAvLyBUaGUgcHNldWRvIGVsZW1lbnQgc3R5bGUgY2FuIGJlIGNhY2hlZCBv
ciB1bmNhY2hlZC4gIFVzZSB0aGUgY2FjaGVkIG1ldGhvZCBpZiB0aGUgcHNldWRvIGVsZW1lbnQg
ZG9lc24ndCByZXNwZWN0CiAgICAgLy8gYW55IHBzZXVkbyBjbGFzc2VzIChhbmQgdGhlcmVmb3Jl
IGhhcyBubyBjb25jZXB0IG9mIGNoYW5naW5nIHN0YXRlKS4KLSAgICBSZW5kZXJTdHlsZSogZ2V0
Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAp
IGNvbnN0OwotICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdldFVuY2FjaGVkUHNldWRvU3R5
bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
MCwgUmVuZGVyU3R5bGUqIG93blN0eWxlID0gMCkgY29uc3Q7CisgICAgUmVuZGVyU3R5bGUqIGdl
dENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBu
dWxscHRyKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBnZXRVbmNhY2hlZFBz
ZXVkb1N0eWxlKGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IG51bGxwdHIsIFJlbmRlclN0eWxlKiBvd25TdHlsZSA9IG51bGxwdHIpIGNvbnN0Owog
CiAgICAgLy8gVGhpcyBpcyBudWxsIGZvciBhbm9ueW1vdXMgcmVuZGVyZXJzLgogICAgIEVsZW1l
bnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxFbGVtZW50PihSZW5kZXJPYmpl
Y3Q6Om5vZGUoKSk7IH0KQEAgLTg4LDggKzkwLDggQEAgcHVibGljOgogICAgIGJvb2wgaXNSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29s
IGlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFJlbmRlclN0eWxlJikg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJP
YmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7Ci0gICAgdmly
dHVhbCB2b2lkIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdD
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIHsgcmV0dXJuIGFkZENoaWxkKG5l
d0NoaWxkLCBiZWZvcmVDaGlsZCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVy
T2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVj
dCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKSB7IHJldHVy
biBhZGRDaGlsZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOyB9CiAgICAgdmlydHVhbCB2b2lkIHJl
bW92ZUNoaWxkKFJlbmRlck9iamVjdCYpOwogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlv
bnMgYXJlIHVzZWQgd2hlbiB0aGUgcmVuZGVyIHRyZWUgaGllcmFyY2h5IGNoYW5nZXMgdG8gbWFr
ZSBzdXJlIGxheWVycyBnZXQKQEAgLTMyMiw5ICszMjQsMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgYm9vbCBzX25vTG9uZ2VyQWZmZWN0c1BhcmVudEJsb2NrOwogfTsKIAotaW5saW5lIHZvaWQg
UmVuZGVyRWxlbWVudDo6c2V0QW5pbWF0YWJsZVN0eWxlKFJlZjxSZW5kZXJTdHlsZT4mJiBzdHls
ZSkKK2lubGluZSB2b2lkIFJlbmRlckVsZW1lbnQ6OnNldEFuaW1hdGFibGVTdHlsZShSZWY8UmVu
ZGVyU3R5bGU+JiYgc3R5bGUsIGJvb2wgaGFzU2lkZUVmZmVjdHMpCiB7Ci0gICAgc2V0U3R5bGUo
YW5pbWF0aW9uKCkudXBkYXRlQW5pbWF0aW9ucygqdGhpcywgV1RGOjptb3ZlKHN0eWxlKSkpOwor
ICAgIGJvb2wgYW5pbWF0aW9uU3RhdGVDaGFuZ2VkOworICAgIHNldFN0eWxlKGFuaW1hdGlvbigp
LnVwZGF0ZUFuaW1hdGlvbnMoKnRoaXMsIFdURjo6bW92ZShzdHlsZSksIGFuaW1hdGlvblN0YXRl
Q2hhbmdlZCksIGhhc1NpZGVFZmZlY3RzIHx8IGFuaW1hdGlvblN0YXRlQ2hhbmdlZCk7CiB9CiAK
IGlubGluZSBSZW5kZXJTdHlsZSYgUmVuZGVyRWxlbWVudDo6Zmlyc3RMaW5lU3R5bGUoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZDZjOWMxNDFi
MTU1ZjhkZjRhNDhkZmI4NGU0MDI2MTRlOGJjZDc5MS4uMWQ3ODhkNGRlYWZiNDJjNzhjMzE2NDUx
YjljNDQzYjJlNWJjNDFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCkBAIC02NjkzLDcgKzY2OTMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogCiAgICAg
dXBkYXRlTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CiAKLSAgICBjb21wb3NpdG9yKCkubGF5
ZXJTdHlsZUNoYW5nZWQoKnRoaXMsIG9sZFN0eWxlKTsKKyAgICBjb21wb3NpdG9yKCkubGF5ZXJT
dHlsZUNoYW5nZWQoZGlmZiwgKnRoaXMsIG9sZFN0eWxlKTsKIAogICAgIHVwZGF0ZU9yUmVtb3Zl
RmlsdGVyRWZmZWN0UmVuZGVyZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCA1ZmU5M2Y3ODQ1NDk2MmFlNTY3MzJl
ZmM1YjA4NWFmZDQ5YmZiZTk0Li5jYTIzMTdmYmZhOTc4ZmEyZTE5ZTNkMWFmNDk1ZWMxN2M5N2Rl
NmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcApAQCAtOTE1LDggKzkxNSwxMSBAQCBzdGF0aWMgYm9vbCBzdHlsZUNoYW5nZVJl
cXVpcmVzTGF5ZXJSZWJ1aWxkKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgUmVuZAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVy
U3R5bGVDaGFuZ2VkKFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyU3R5bGVDaGFuZ2VkKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkKIHsKKyAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VFcXVhbCkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlID0gbGF5ZXIucmVu
ZGVyZXIoKS5zdHlsZSgpOwogICAgIGlmICh1cGRhdGVMYXllckNvbXBvc2l0aW5nU3RhdGUobGF5
ZXIpIHx8IChvbGRTdHlsZSAmJiBzdHlsZUNoYW5nZVJlcXVpcmVzTGF5ZXJSZWJ1aWxkKGxheWVy
LCAqb2xkU3R5bGUsIG5ld1N0eWxlKSkpCiAgICAgICAgIHNldENvbXBvc2l0aW5nTGF5ZXJzTmVl
ZFJlYnVpbGQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuaAppbmRleCBjZGU1NTM0NGYwOTg0YTJjMjBkNTBjOTMzYmNmNjAwYmJjNmM1MDU4
Li5iZGE0Y2QxZmMxYmI2MTQzNTNiYmM2YmRhMTA0Zjc2OTg3ODA2N2YwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0xNzEsNyAr
MTcxLDcgQEAgcHVibGljOgogICAgIHZvaWQgbGF5ZXJXYXNBZGRlZChSZW5kZXJMYXllciYgcGFy
ZW50LCBSZW5kZXJMYXllciYgY2hpbGQpOwogICAgIHZvaWQgbGF5ZXJXaWxsQmVSZW1vdmVkKFJl
bmRlckxheWVyJiBwYXJlbnQsIFJlbmRlckxheWVyJiBjaGlsZCk7CiAKLSAgICB2b2lkIGxheWVy
U3R5bGVDaGFuZ2VkKFJlbmRlckxheWVyJiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsK
KyAgICB2b2lkIGxheWVyU3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgUmVuZGVyTGF5ZXIm
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCiAgICAgc3RhdGljIGJvb2wgY2FuQ29t
cG9zaXRlQ2xpcFBhdGgoY29uc3QgUmVuZGVyTGF5ZXImKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaAppbmRleCAxYjNm
NWY2NTQ0MmU4OGM1YjMzMTYzOGU0NDVmMzhkODZlZDBlNGUyLi5hZTg2NTUxYjA2YTQ4NTdhZDg2
MDM2OGIzNjVjNGI5YmIyMmZhODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaApAQCAtNTUsNyArNTUsOCBAQCBlbnVt
IFN0eWxlRGlmZmVyZW5jZSB7CiAgICAgU3R5bGVEaWZmZXJlbmNlTGF5b3V0UG9zaXRpb25lZE1v
dmVtZW50T25seSwKICAgICBTdHlsZURpZmZlcmVuY2VTaW1wbGlmaWVkTGF5b3V0LAogICAgIFN0
eWxlRGlmZmVyZW5jZVNpbXBsaWZpZWRMYXlvdXRBbmRQb3NpdGlvbmVkTW92ZW1lbnQsCi0gICAg
U3R5bGVEaWZmZXJlbmNlTGF5b3V0CisgICAgU3R5bGVEaWZmZXJlbmNlTGF5b3V0LAorICAgIFN0
eWxlRGlmZmVyZW5jZU5ld1N0eWxlCiB9OwogCiAvLyBXaGVuIHNvbWUgc3R5bGUgcHJvcGVydGll
cyBjaGFuZ2UsIGRpZmZlcmVudCBhbW91bnRzIG9mIHdvcmsgaGF2ZSB0byBiZSBkb25lIGRlcGVu
ZGluZyBvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJl
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAppbmRleCAz
MjRjZmJhODBjZmQyYTYxZWM2NzdkOTQzMjBjNjU1OTlhODc1ZDdmLi5lNzU1MGU4Y2QzMmRiMGZl
MzViZTVlN2MzN2JhMTY5OWM0NWJkODJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVJlc29sdmVUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJl
c29sdmVUcmVlLmNwcApAQCAtMjAxLDcgKzIwMSw4IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZVJlbmRl
cmVySWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxl
CiAKICAgICAvLyBGSVhNRTogVGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZmFjdG9y
IHRoaXMuCiAgICAgLy8gVGhpcyBqdXN0IGRvZXMgd2hhdCBzZXRBbmltYXRlZFN0eWxlKCkgZG9l
cywgZXhjZXB0IHdpdGggc2V0U3R5bGVJbnRlcm5hbCgpIGluc3RlYWQgb2Ygc2V0U3R5bGUoKS4K
LSAgICBuZXdSZW5kZXJlci0+c2V0U3R5bGVJbnRlcm5hbChuZXdSZW5kZXJlci0+YW5pbWF0aW9u
KCkudXBkYXRlQW5pbWF0aW9ucygqbmV3UmVuZGVyZXIsIG5ld1JlbmRlcmVyLT5zdHlsZSgpKSk7
CisgICAgYm9vbCBhbmltYXRpb25zQ2hhbmdlZDsKKyAgICBuZXdSZW5kZXJlci0+c2V0U3R5bGVJ
bnRlcm5hbChuZXdSZW5kZXJlci0+YW5pbWF0aW9uKCkudXBkYXRlQW5pbWF0aW9ucygqbmV3UmVu
ZGVyZXIsIG5ld1JlbmRlcmVyLT5zdHlsZSgpLCBhbmltYXRpb25zQ2hhbmdlZCkpOwogCiAgICAg
bmV3UmVuZGVyZXItPmluaXRpYWxpemVTdHlsZSgpOwogCkBAIC02MzAsNyArNjMxLDcgQEAgc3Rh
dGljIENoYW5nZSByZXNvbHZlTG9jYWwoRWxlbWVudCYgY3VycmVudCwgUmVuZGVyU3R5bGUmIGlu
aGVyaXRlZFN0eWxlLCBSZW5kZXIKIAogICAgIGlmIChSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9
IGN1cnJlbnQucmVuZGVyZXIoKSkgewogICAgICAgICBpZiAobG9jYWxDaGFuZ2UgIT0gTm9DaGFu
Z2UgfHwgcHNldWRvU3R5bGVDYWNoZUlzSW52YWxpZChyZW5kZXJlciwgbmV3U3R5bGUuZ2V0KCkp
IHx8IChpbmhlcml0ZWRDaGFuZ2UgPT0gRm9yY2UgJiYgcmVuZGVyZXItPnJlcXVpcmVzRm9yY2Vk
U3R5bGVSZWNhbGNQcm9wYWdhdGlvbigpKSB8fCBjdXJyZW50LnN0eWxlQ2hhbmdlVHlwZSgpID09
IFN5bnRoZXRpY1N0eWxlQ2hhbmdlKQotICAgICAgICAgICAgcmVuZGVyZXItPnNldEFuaW1hdGFi
bGVTdHlsZSgqbmV3U3R5bGUpOworICAgICAgICAgICAgcmVuZGVyZXItPnNldEFuaW1hdGFibGVT
dHlsZSgqbmV3U3R5bGUsIGN1cnJlbnQuc3R5bGVDaGFuZ2VUeXBlKCkgPT0gU3ludGhldGljU3R5
bGVDaGFuZ2UpOwogICAgICAgICBlbHNlIGlmIChjdXJyZW50Lm5lZWRzU3R5bGVSZWNhbGMoKSkg
ewogICAgICAgICAgICAgLy8gQWx0aG91Z2ggbm8gY2hhbmdlIG9jY3VycmVkLCB3ZSB1c2UgdGhl
IG5ldyBzdHlsZSBzbyB0aGF0IHRoZSBjb3VzaW4gc3R5bGUgc2hhcmluZyBjb2RlIHdvbid0IGdl
dAogICAgICAgICAgICAgLy8gZm9vbGVkIGludG8gYmVsaWV2aW5nIHRoaXMgc3R5bGUgaXMgdGhl
IHNhbWUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggMGIxYjU3ZTFjYzAzZmY2OTU4ZmVkMGMyZGMwODRhYjg2YmYwOGNlZS4u
MjJmMmU5YjE3NjlkZmFmYTQxZWU4OWZhYzM3YWJhNWE3NDhlMjQzYSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2IEBACisyMDE1LTA0LTI1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29t
PgorCisgICAgICAgIEVsaW1pbmF0ZSBzdHlsZURpZENoYW5nZSB3aXRoIFN0eWxlRGlmZmVyZW5j
ZUVxdWFsIHdoZW4gdXBkYXRlcyBhcmUgYWN0dWFsbHkgbmVjZXNzYXJ5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQxOTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE5ldyB0ZXN0IHRoYXQg
ZGV0ZWN0cyB3aGV0aGVyIGEgImhhcmR3YXJlIiBhbmltYXRpb24gaXMgZmlyaW5nIHRoZSBzdHls
ZSByZWNhbGMKKyAgICAgICAgdGltZXIgb24gZXZlcnkgZnJhbWUsIHdoaWNoIGhhcHBlbmVkIGR1
cmluZyBkZXZlbG9wbWVudCBvZiB0aGlzIHBhdGNoLgorCisgICAgICAgICogY29tcG9zaXRpbmcv
YW5pbWF0aW9uL25vLXN0eWxlLXJlY2FsYy1kdXJpbmctYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY29tcG9zaXRpbmcvYW5pbWF0aW9uL25vLXN0
eWxlLXJlY2FsYy1kdXJpbmctYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLmh0bWw6IEFkZGVkLgorCiAy
MDE1LTA0LTI0ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTgzMjg4LgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvY29tcG9zaXRpbmcvYW5pbWF0aW9uL25vLXN0eWxlLXJlY2FsYy1kdXJpbmctYWNjZWxl
cmF0ZWQtYW5pbWF0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL2Fu
aW1hdGlvbi9uby1zdHlsZS1yZWNhbGMtZHVyaW5nLWFjY2VsZXJhdGVkLWFuaW1hdGlvbi1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTcxNmQ1ZDI1ZGI1MjI2OGRjYmQ5MjM5NWE0MDBhMjI3YTFh
YTU4MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL2FuaW1hdGlv
bi9uby1zdHlsZS1yZWNhbGMtZHVyaW5nLWFjY2VsZXJhdGVkLWFuaW1hdGlvbi1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzIEBACitQQVNTOiBzYXcgdHdvIG9yIGZld2VyIHN0eWxlIHJlY2FsY3Mg
ZHVyaW5nIHRoZSBhbmltYXRpb24uCisKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9z
aXRpbmcvYW5pbWF0aW9uL25vLXN0eWxlLXJlY2FsYy1kdXJpbmctYWNjZWxlcmF0ZWQtYW5pbWF0
aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9hbmltYXRpb24vbm8tc3R5bGUtcmVj
YWxjLWR1cmluZy1hY2NlbGVyYXRlZC1hbmltYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjc2MzBh
MzJiMmI4MGRlYjYyNzMxMjQyODc5ODI4NTE5NjA1MzRhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvY29tcG9zaXRpbmcvYW5pbWF0aW9uL25vLXN0eWxlLXJlY2FsYy1kdXJpbmctYWNj
ZWxlcmF0ZWQtYW5pbWF0aW9uLmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPCFET0NUWVBFIGh0bWw+
CisKKzxodG1sPgorPGhlYWQ+CisgICAgPHN0eWxlPgorICAgICAgICAjYm94IHsKKyAgICAgICAg
ICAgIHdpZHRoOiAxMDBweDsKKyAgICAgICAgICAgIGhlaWdodDogMTAwcHg7CisgICAgICAgICAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOworICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC5hbmltYXRpbmcgeworICAgICAgICAgICAgYW5pbWF0aW9uOiBtb3ZlIDE1
MG1zIGxpbmVhcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQGtleWZyYW1lcyBtb3Zl
IHsKKyAgICAgICAgICAgIGZyb20geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH0KKyAgICAg
ICAgICAgIHRvICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNTAwcHgpOyB9CisgICAgICAgIH0K
KyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICB0
ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBz
dGFydEFuaW1hdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBib3ggPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnYm94Jyk7CisgICAgICAgICAgICBib3guYWRkRXZlbnRMaXN0ZW5l
cignYW5pbWF0aW9uc3RhcnQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAod2lu
ZG93LmludGVybmFscykKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnN0YXJ0VHJhY2tp
bmdTdHlsZVJlY2FsY3MoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYm94LmFkZEV2
ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBudW1SZWNh
bGNzID0gaW50ZXJuYWxzLnN0eWxlUmVjYWxjQ291bnQoKTsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHJlc3VsdERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQnKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChudW1SZWNhbGNzID4gMikK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdERpdi5pbm5lclRleHQgPSAiRkFJTDogc2F3
ICIgKyBudW1SZWNhbGNzICsgIiBzdHlsZSByZWNhbGNzIGR1cmluZyB0aGUgYW5pbWF0aW9uLCBz
aG91bGQgb25seSBzZWUgdHdvLiIKKyAgICAgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdERpdi5pbm5lclRleHQgPSAiUEFTUzogc2F3IHR3byBvciBm
ZXdlciBzdHlsZSByZWNhbGNzIGR1cmluZyB0aGUgYW5pbWF0aW9uLiIKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAg
ICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSkKKyAgICAg
ICAgICAgIGJveC5jbGFzc0xpc3QuYWRkKCdhbmltYXRpbmcnKTsKKyAgICAgICAgfQorICAgICAg
ICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHN0YXJ0QW5pbWF0aW9uLCBmYWxzZSk7
CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImJveCI+PC9kaXY+Cis8
cCBpZD0icmVzdWx0Ij48cC8+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251746</attachid>
            <date>2015-04-27 09:09:02 -0700</date>
            <delta_ts>2015-04-27 09:41:42 -0700</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-144198-20150427090754.patch</filename>
            <type>text/plain</type>
            <size>34355</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGE1YzBmMWZiMTIwZGY5
MDc4ZjNiMjNmNjllNWY0MTc1NTQ5OGRlZC4uM2RmOGE3YWE5NDkwMzc2MDM2YzU4MWRjYWJmYTRi
MjI2ZmJmZmQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDE1LTA0LTI1ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEVsaW1pbmF0ZSBz
dHlsZURpZENoYW5nZSB3aXRoIFN0eWxlRGlmZmVyZW5jZUVxdWFsIHdoZW4gdXBkYXRlcyBhcmUg
YWN0dWFsbHkgbmVjZXNzYXJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDQxOTgKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKyAg
ICAgICAgCisgICAgICAgIFN5bnRoZXRpY1N0eWxlQ2hhbmdlIHN0eWxlIHJlY2FsY3MgYXJlIHRy
aWdnZXJlZCBmb3IgY2FzZXMgd2hlcmUgYmVoYXZpb3IgZGVwZW5kcworICAgICAgICBvbiBzdGF0
ZSB3aGljaCBpcyBvdXRzaWRlIG9mIFJlbmRlclN0eWxlOyB0aGlzIGluY2x1ZGVzIHRyaWdnZXJp
bmcgY29tcG9zaXRpbmcgZm9yCisgICAgICAgIGFuaW1hdGlvbnMsIGZvciB2aWRlbyBhbmQgY2Fu
dmFzLCBhbmQgZm9yIGlmcmFtZXMgd2l0aCBjb21wb3NpdGVkIGNvbnRlbnQuCisgICAgICAgIAor
ICAgICAgICBJbiB0aGVzZSBjYXNlcywgd2UnZCBydW4gdGhyb3VnaCBSZW5kZXJFbGVtZW50Ojpz
ZXRTdHlsZSgpIGFuZCBpdHMgZmFuLW91dCwgYnV0CisgICAgICAgIHdpdGggZGlmZiA9PSBTdHls
ZURpZmZlcmVuY2VFcXVhbCwgYW5kIHNvIGJlIHVuYWJsZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUK
KyAgICAgICAgaXMgYWN0dWFsIHdvcmsgdG8gYmUgZG9uZS4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgcGF0Y2ggZW5mb3JjZXMgdGhlIGNvbnRyYWN0IHRoYXQgdGhlIGRpZmYgaXMgbmV2ZXIgU3R5
bGVEaWZmZXJlbmNlRXF1YWwgaWYKKyAgICAgICAgY29tcG9zaXRpbmcgb3Igb3RoZXIgd29yayBo
YXMgdG8gaGFwcGVuIGZyb20gc2V0U3R5bGUoKS4gVGhpcyBpcyBhY2hpZXZlZCBieQorICAgICAg
ICBwYXNzaW5nIGluIGEgJ2hhc1NpZGVFZmZlY3RzJyBmbGFnLCB3aGljaCBjYXVzZXMgdGhlIGRp
ZmYgdG8gYmVjb21lIGF0IGxlYXN0CisgICAgICAgIFN0eWxlRGlmZmVyZW5jZVJlY29tcG9zaXRl
TGF5ZXIuCisgICAgICAgIAorICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyU3R5
bGVDaGFuZ2VkKCkgY2FuIG5vdyBzYWZlbHkgZWFybHkgcmV0dXJuCisgICAgICAgIGlmIHRoZSBk
aWZmIGlzIGVxdWFsLiBGdXR1cmUgcGF0Y2hlcyB3aWxsIHJlZHVjZSByZWR1bmRhbnQgd29yayBl
dmVuIG1vcmUuCisKKyAgICAgICAgVGVzdDogY29tcG9zaXRpbmcvYW5pbWF0aW9uL25vLXN0eWxl
LXJlY2FsYy1kdXJpbmctYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLmh0bWwKKworICAgICAgICAqIHBh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlv
bkJhc2U6OmFuaW1hdGUpOiBSZXR1cm5zIGEgYm9vbCBub3cgaWYgdGhlIHN0YXRlIGNoYW5nZWQu
CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjpzdGF0ZSk6CisgICAgICAgICogcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
bmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zKTogYm9vbCBvdXQgcGFyYW0gd2hp
Y2ggaW5kaWNhdGVzCisgICAgICAgIHdoZXRoZXIgYW55IGFuaW1hdGlvbnMgY2hhbmdlZCBzdGF0
ZS4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmg6CisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZSk6IElmIGFueSB0cmFuc2l0aW9ucyBv
ciBhbmltYXRpb25zIGNoYW5nZWQKKyAgICAgICAgc3RhdGUsIHNldCB0aGUgYW5pbWF0aW9uU3Rh
dGVDaGFuZ2VkIG91dCBwYXJhbSB0byB0cnVlLgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0Nv
bXBvc2l0ZUFuaW1hdGlvbi5oOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5p
bWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRl
KTogUmV0dXJuIHRydWUgaWYgdGhlIHN0YXRlIGNoYW5nZWQuCisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vSW1wbGljaXRBbmltYXRpb24uaDoKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlm
cmFtZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6
YW5pbWF0ZSk6IFJldHVybiB0cnVlIGlmIHRoZSBzdGF0ZSBjaGFuZ2VkLgorICAgICAgICAqIHBh
Z2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6YWRqdXN0
U3R5bGVEaWZmZXJlbmNlKTogV2UgbWF5IGVudGVyIGhlcmUgbm93IHdpdGggZGlmZgorICAgICAg
ICAhPSBTdHlsZURpZmZlcmVuY2VFcXVhbCwgYnV0IHN0aWxsIG5lZWQgdG8gZG8gdGhlIGNoZWNr
IHRvIHNlZSBpZiBsYXllcnMgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1l
bnQ6OmluaXRpYWxpemVTdHlsZSk6IFdoZW4gc2V0dGluZyBzdHlsZSBmb3IgdGhlIGZpcnN0IHRp
bWUsCisgICAgICAgIGRvbid0IHVzZSBTdHlsZURpZmZlcmVuY2VFcXVhbC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckVsZW1lbnQ6OnNldFN0eWxlKTogQWRkaXRpb25hbCBmbGFnIHRvIGluZGlj
YXRlIHdoZXRoZXIgdGhpcyBzdHlsZQorICAgICAgICBjaGFuZ2UgaW52b2x2ZXMgc2lkZSBlZmZl
Y3RzLiBJZiB0aGUgZGlmZiBpcyBlcXVhbCBidXQgdGhlIGZsYWcgaXMgc2V0LCBjaGFuZ2UKKyAg
ICAgICAgdGhlIGRpZmYgdG8gU3R5bGVEaWZmZXJlbmNlUmVjb21wb3NpdGVMYXllciAodGhlICJs
b3dlc3QiIG5vbi16ZXJvIGRpZmYpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpzZXRBbmltYXRhYmxlU3R5bGUp
OiBQYXNzIHRydWUgdG8gc2V0U3R5bGUoKSBpZiBoYXNTaWRlRWZmZWN0cworICAgICAgICBpcyB0
cnVlLCBvciBpZiBhbmltYXRpb24gc3RhdGUgY2hhbmdlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnN0eWxlQ2hh
bmdlZCk6IFBhc3MgdGhlIGRpZmYgZG93bi4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6bGF5ZXJTdHlsZUNoYW5nZWQpOiBSZXR1cm4gaWYgdGhlIGRpZmYgaXMgZXF1YWwuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oOiBTdHlsZURpZmZlcmVuY2VOZXdTdHls
ZSBpcyB1c2VkIHdoZW4KKyAgICAgICAgc2V0dGluZyBzdHlsZSBmb3IgdGhlIGZpcnN0IHRpbWUu
CisgICAgICAgICogc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCk6IFByb3ZpZGUgYW5pbWF0aW9uc0NoYW5n
ZWQgYm9vbCAod2hpY2ggaXMgdW51c2VkKS4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNv
bHZlTG9jYWwpOiBJZiB0aGUgc3R5bGUgY2hhbmdlIGlzIHN5bnRoZXRpYywgc2V0IHRoZSBmbGFn
IHRoYXQKKyAgICAgICAgc2F5cyB0aGVyZSBhcmUgc2lkZS1lZmZlY3RzLgorCiAyMDE1LTA0LTI2
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChy
MTc2NzUxKTogbGluZS1oZWlnaHQgaWdub3JlZCBpbiA8YnV0dG9uPiBlbGVtZW50cwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCmluZGV4IDM1NGRhNDA0
NDZhZDBjN2YwOTY4ODE4YTlhOTdhZGExZjJiYzc1NjUuLjhkMmNmMGViYjNkZGQ0OGM1MjZhMjAw
MzE2OTZkZjcwYjUyODE5MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9B
bmltYXRpb25CYXNlLmgKQEAgLTEzNSw3ICsxMzUsOCBAQCBwdWJsaWM6CiAKICAgICBkb3VibGUg
cHJvZ3Jlc3MoZG91YmxlIHNjYWxlLCBkb3VibGUgb2Zmc2V0LCBjb25zdCBUaW1pbmdGdW5jdGlv
biopIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9u
KiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBS
ZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSovLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1h
dGVkU3R5bGUqLykgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIHN0
YXRlIGNoYW5nZWQuCisgICAgdmlydHVhbCBib29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9u
KiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBS
ZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSovLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1h
dGVkU3R5bGUqLykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZXRBbmltYXRlZFN0eWxlKFJlZlB0
cjxSZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJv
b2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCA9
IDA7CkBAIC0yMzIsNiArMjMzLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZ29JbnRvRW5kaW5n
T3JMb29waW5nU3RhdGUoKTsKIAogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNBY2NlbGVyYXRlZDsgfQorICAgIEFuaW1hdGlvblN0YXRlIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9hbmltYXRpb25TdGF0ZTsgfQogCiAgICAgc3RhdGljIHZvaWQgc2V0TmVlZHNT
dHlsZVJlY2FsYyhFbGVtZW50Kik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDJhODQwM2YwNTUxOTE0
ZjRjZDg0ZWRiYTgwN2NhMDdmYzk2YmMyZDcuLjgwNDMzNDg3NjI2NmM4MDJhYmNjNjkyZWU5NzFk
OTcwZjUyYjYxNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC01NjgsMjAgKzU2OCwxOSBAQCB2b2lkIEFuaW1h
dGlvbkNvbnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIp
CiAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFu
Z2UpOwogfQogCi1SZWY8UmVuZGVyU3R5bGU+IEFuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFu
aW1hdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFJlZjxSZW5kZXJTdHlsZT4mJiBuZXdT
dHlsZSkKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBSZWY8UmVuZGVyU3R5bGU+
JiBhbmltYXRlZFN0eWxlKQogewotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlJ3JlIGlu
IHRoZSBjYWNoZQogICAgIGlmIChyZW5kZXJlci5kb2N1bWVudCgpLmluUGFnZUNhY2hlKCkpCi0g
ICAgICAgIHJldHVybiBXVEY6Om1vdmUobmV3U3R5bGUpOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSByZW5kZXJlci5oYXNJbml0aWFsaXplZFN0
eWxlKCkgPyAmcmVuZGVyZXIuc3R5bGUoKSA6IG51bGxwdHI7CiAKLSAgICBpZiAoKCFvbGRTdHls
ZSB8fCAoIW9sZFN0eWxlLT5hbmltYXRpb25zKCkgJiYgIW9sZFN0eWxlLT50cmFuc2l0aW9ucygp
KSkgJiYgKCFuZXdTdHlsZS5nZXQoKS5hbmltYXRpb25zKCkgJiYgIW5ld1N0eWxlLmdldCgpLnRy
YW5zaXRpb25zKCkpKQotICAgICAgICByZXR1cm4gV1RGOjptb3ZlKG5ld1N0eWxlKTsKKyAgICBp
ZiAoKCFvbGRTdHlsZSB8fCAoIW9sZFN0eWxlLT5hbmltYXRpb25zKCkgJiYgIW9sZFN0eWxlLT50
cmFuc2l0aW9ucygpKSkgJiYgKCFuZXdTdHlsZS5hbmltYXRpb25zKCkgJiYgIW5ld1N0eWxlLnRy
YW5zaXRpb25zKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBEb24ndCBydW4g
dHJhbnNpdGlvbnMgd2hlbiBwcmludGluZy4KICAgICBpZiAocmVuZGVyZXIudmlldygpLnByaW50
aW5nKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om1vdmUobmV3U3R5bGUpOworICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAvLyBGZXRjaCBvdXIgY3VycmVudCBzZXQgb2YgaW1wbGljaXQgYW5p
bWF0aW9ucyBmcm9tIGEgaGFzaHRhYmxlLiAgV2UgdGhlbiBjb21wYXJlIHRoZW0KICAgICAvLyBh
Z2FpbnN0IHRoZSBhbmltYXRpb25zIGluIHRoZSBzdHlsZSBhbmQgbWFrZSBzdXJlIHdlJ3JlIGlu
IHN5bmMuICBJZiBkZXN0aW5hdGlvbiB2YWx1ZXMKQEAgLTU5MSwyNiArNTkwLDI0IEBAIFJlZjxS
ZW5kZXJTdHlsZT4gQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwKICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGFub255bW91cyBwc2V1
ZG8gZWxlbWVudHMgbGlrZSA6Zmlyc3QtbGluZSBvciA6Zmlyc3QtbGV0dGVyLgogICAgIEFTU0VS
VChyZW5kZXJlci5lbGVtZW50KCkpOwogCi0gICAgUmVmPFJlbmRlclN0eWxlPiBuZXdTdHlsZUJl
Zm9yZUFuaW1hdGlvbihXVEY6Om1vdmUobmV3U3R5bGUpKTsKLQogICAgIENvbXBvc2l0ZUFuaW1h
dGlvbiYgcmVuZGVyZXJBbmltYXRpb25zID0gbV9kYXRhLT5lbnN1cmVDb21wb3NpdGVBbmltYXRp
b24ocmVuZGVyZXIpOwotICAgIGF1dG8gYmxlbmRlZFN0eWxlID0gcmVuZGVyZXJBbmltYXRpb25z
LmFuaW1hdGUocmVuZGVyZXIsIG9sZFN0eWxlLCBuZXdTdHlsZUJlZm9yZUFuaW1hdGlvbik7Cisg
ICAgYm9vbCBhbmltYXRpb25TdGF0ZUNoYW5nZWQgPSByZW5kZXJlckFuaW1hdGlvbnMuYW5pbWF0
ZShyZW5kZXJlciwgb2xkU3R5bGUsIG5ld1N0eWxlLCBhbmltYXRlZFN0eWxlKTsKIAotICAgIGlm
IChyZW5kZXJlci5wYXJlbnQoKSB8fCBuZXdTdHlsZUJlZm9yZUFuaW1hdGlvbi0+YW5pbWF0aW9u
cygpIHx8IChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+YW5pbWF0aW9ucygpKSkgeworICAgIGlmIChy
ZW5kZXJlci5wYXJlbnQoKSB8fCBuZXdTdHlsZS5hbmltYXRpb25zKCkgfHwgKG9sZFN0eWxlICYm
IG9sZFN0eWxlLT5hbmltYXRpb25zKCkpKSB7CiAgICAgICAgIG1fZGF0YS0+dXBkYXRlQW5pbWF0
aW9uVGltZXJGb3JSZW5kZXJlcihyZW5kZXJlcik7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQogICAgICAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuc2NoZWR1bGVB
bmltYXRpb24oKTsKICNlbmRpZgogICAgIH0KIAotICAgIGlmIChibGVuZGVkU3R5bGUucHRyKCkg
IT0gbmV3U3R5bGVCZWZvcmVBbmltYXRpb24ucHRyKCkpIHsKKyAgICBpZiAoYW5pbWF0ZWRTdHls
ZS5wdHIoKSAhPSAmbmV3U3R5bGUpIHsKICAgICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbnMvdHJh
bnNpdGlvbnMgY2hhbmdlIG9wYWNpdHkgb3IgdHJhbnNmb3JtLCB3ZSBuZWVkIHRvIHVwZGF0ZQog
ICAgICAgICAvLyB0aGUgc3R5bGUgdG8gaW1wb3NlIHRoZSBzdGFja2luZyBydWxlcy4gTm90ZSB0
aGF0IHRoaXMgaXMgYWxzbwogICAgICAgICAvLyBkb25lIGluIFN0eWxlUmVzb2x2ZXI6OmFkanVz
dFJlbmRlclN0eWxlKCkuCi0gICAgICAgIGlmIChibGVuZGVkU3R5bGUuZ2V0KCkuaGFzQXV0b1pJ
bmRleCgpICYmIChibGVuZGVkU3R5bGUuZ2V0KCkub3BhY2l0eSgpIDwgMS4wZiB8fCBibGVuZGVk
U3R5bGUuZ2V0KCkuaGFzVHJhbnNmb3JtKCkpKQotICAgICAgICAgICAgYmxlbmRlZFN0eWxlLmdl
dCgpLnNldFpJbmRleCgwKTsKKyAgICAgICAgaWYgKGFuaW1hdGVkU3R5bGUuZ2V0KCkuaGFzQXV0
b1pJbmRleCgpICYmIChhbmltYXRlZFN0eWxlLmdldCgpLm9wYWNpdHkoKSA8IDEuMGYgfHwgYW5p
bWF0ZWRTdHlsZS5nZXQoKS5oYXNUcmFuc2Zvcm0oKSkpCisgICAgICAgICAgICBhbmltYXRlZFN0
eWxlLmdldCgpLnNldFpJbmRleCgwKTsKICAgICB9Ci0gICAgcmV0dXJuIGJsZW5kZWRTdHlsZTsK
KyAgICByZXR1cm4gYW5pbWF0aW9uU3RhdGVDaGFuZ2VkOwogfQogCiBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBBbmltYXRpb25Db250cm9sbGVyOjpnZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgKaW5kZXggOTg3MzZhMzBhNmY0ZmEwNDRkYzRk
NTQxZmZhMjQwZTAwOWVhNTllMC4uMzM1MGIxOTc2Mzg5M2YzMWRhNTExNTQyMzY2ZDM1MGFjZTA1
MmYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkNvbnRyb2xsZXIuaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgfkFuaW1hdGlvbkNv
bnRyb2xsZXIoKTsKIAogICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50Jik7
Ci0gICAgUmVmPFJlbmRlclN0eWxlPiB1cGRhdGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmLCBS
ZWY8UmVuZGVyU3R5bGU+JiYgbmV3U3R5bGUpOworICAgIGJvb2wgdXBkYXRlQW5pbWF0aW9ucyhS
ZW5kZXJFbGVtZW50JiwgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBSZWY8UmVuZGVyU3R5bGU+JiBh
bmltYXRlZFN0eWxlKTsKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBnZXRBbmltYXRlZFN0
eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYpOwogCiAgICAgLy8gSWYgcG9zc2libGUsIGNv
bXB1dGUgdGhlIHZpc3VhbCBleHRlbnQgb2YgYW55IHRyYW5zZm9ybSBhbmltYXRpb24gb24gdGhl
IGdpdmVuIHJlbmRlcmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9Db21wb3NpdGVBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcAppbmRleCBjYTFlZDE0ZWQyMDc2OWE2YTU4ODc4YTU2MTE2
ZGFmMThmYjc1NjRmLi4wN2Q4NGUwZGNjOGVlMTljZmJjMzQwZDVkZjc2ZDQyYjMxZmIwMWFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1h
dGlvbi5jcHAKQEAgLTI5NywyMSArMjk3LDIyIEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1
cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIFJlbmRlCiAg
ICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLnJlbW92ZShuYW1lRm9yUmVtb3ZhbCk7CiB9CiAK
LVJlZjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSYgdGFy
Z2V0U3R5bGUpCitib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUmIHRhcmdl
dFN0eWxlLCBSZWY8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpCiB7Ci0gICAgUmVmUHRyPFJl
bmRlclN0eWxlPiByZXN1bHRTdHlsZTsKLQogICAgIC8vIFdlIGRvbid0IGRvIGFueSB0cmFuc2l0
aW9ucyBpZiB3ZSBkb24ndCBoYXZlIGEgY3VycmVudFN0eWxlIChvbiBzdGFydHVwKS4KICAgICB1
cGRhdGVUcmFuc2l0aW9ucygmcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgJnRhcmdldFN0eWxlKTsK
ICAgICB1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoJnJlbmRlcmVyLCBjdXJyZW50U3R5bGUsICZ0
YXJnZXRTdHlsZSk7CiAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgp
OwogCisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlOworICAgIGJvb2wgYW5p
bWF0aW9uU3RhdGVDaGFuZ2VkID0gZmFsc2U7CisKICAgICBpZiAoY3VycmVudFN0eWxlKSB7CiAg
ICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdHJhbnNpdGlvbiBvYmplY3RzIHJlYWR5LCBsZXQg
dGhlbSBrbm93IGFib3V0IHRoZSBuZXcgZ29hbCBzdGF0ZS4gIFdlIHdhbnQgdGhlbQogICAgICAg
ICAvLyB0byBmaWxsIGluIGEgUmVuZGVyU3R5bGUqJiBvbmx5IGlmIG5lZWRlZC4KLSAgICAgICAg
aWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiB0
cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgICAgICAgICB0cmFu
c2l0aW9uLT5hbmltYXRlKHRoaXMsICZyZW5kZXJlciwgY3VycmVudFN0eWxlLCAmdGFyZ2V0U3R5
bGUsIHJlc3VsdFN0eWxlKTsKKyAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFu
c2l0aW9ucy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmFuaW1hdGUo
dGhpcywgJnJlbmRlcmVyLCBjdXJyZW50U3R5bGUsICZ0YXJnZXRTdHlsZSwgYW5pbWF0ZWRTdHls
ZSkpCisgICAgICAgICAgICAgICAgYW5pbWF0aW9uU3RhdGVDaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMzE5LDE0ICszMjAsMTYgQEAgUmVmPFJlbmRlclN0eWxlPiBDb21w
b3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFJlbmRlclN0
eWwKICAgICAvLyB0byBmaWxsIGluIGEgUmVuZGVyU3R5bGUqJiBvbmx5IGlmIG5lZWRlZC4KICAg
ICBmb3IgKGF1dG8mIG5hbWUgOiBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXApIHsKICAgICAg
ICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBtX2tleWZyYW1lQW5p
bWF0aW9ucy5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChrZXlmcmFtZUFuaW0pCi0gICAgICAgICAg
ICBrZXlmcmFtZUFuaW0tPmFuaW1hdGUodGhpcywgJnJlbmRlcmVyLCBjdXJyZW50U3R5bGUsICZ0
YXJnZXRTdHlsZSwgcmVzdWx0U3R5bGUpOworICAgICAgICBpZiAoa2V5ZnJhbWVBbmltICYmIGtl
eWZyYW1lQW5pbS0+YW5pbWF0ZSh0aGlzLCAmcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgJnRhcmdl
dFN0eWxlLCBhbmltYXRlZFN0eWxlKSkKKyAgICAgICAgICAgIGFuaW1hdGlvblN0YXRlQ2hhbmdl
ZCA9IHRydWU7CiAgICAgfQogCi0gICAgaWYgKHJlc3VsdFN0eWxlKQotICAgICAgICByZXR1cm4g
cmVzdWx0U3R5bGUucmVsZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoYW5pbWF0ZWRTdHlsZSkKKyAg
ICAgICAgYmxlbmRlZFN0eWxlID0gYW5pbWF0ZWRTdHlsZS5yZWxlYXNlTm9uTnVsbCgpOworICAg
IGVsc2UKKyAgICAgICAgYmxlbmRlZFN0eWxlID0gdGFyZ2V0U3R5bGU7CiAKLSAgICByZXR1cm4g
dGFyZ2V0U3R5bGU7CisgICAgcmV0dXJuIGFuaW1hdGlvblN0YXRlQ2hhbmdlZDsKIH0KIAogUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxl
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBv
c2l0ZUFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRl
QW5pbWF0aW9uLmgKaW5kZXggYTU1M2ZmYzAxNWU2OGY2MDk0NzQzNDg4YWYyMmIwMjI2MWFjMmUw
NS4uYjYxMTQ0ZmE5NjQ0NDQ5OGYwNmMxM2M1ZTQ1NDI0YjM2ZmVlYzNhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgKQEAgLTU2
LDcgKzU2LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY2xlYXJSZW5kZXJlcigpOwogCi0g
ICAgUmVmPFJlbmRlclN0eWxlPiBhbmltYXRlKFJlbmRlckVsZW1lbnQmLCBSZW5kZXJTdHlsZSog
Y3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUpOworICAgIGJvb2wgYW5pbWF0
ZShSZW5kZXJFbGVtZW50JiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUm
IHRhcmdldFN0eWxlLCBSZWY8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpOwogICAgIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGUoKSBjb25zdDsKICAgICBib29sIGNv
bXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JikgY29uc3Q7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNw
cAppbmRleCBkMDIxNTk3MTI0YjIwN2JkZjI3ODViOTNmN2I3NTc4ZDhiMjE0MzBmLi4wMTQ5ZDY3
ZjE4ZTA2MTljODkwYzNiODFjMDUzOTkxYmQyMDExZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCkBAIC02MCwxMiArNjAs
MTQgQEAgYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6c2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIo
RG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBpbkxpc3QKICAgICByZXR1cm4gbV9vYmplY3QtPmRvY3Vt
ZW50KCkuaGFzTGlzdGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKIH0KIAotdm9pZCBJbXBsaWNp
dEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50Kiwg
Y29uc3QgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlZlB0cjxSZW5k
ZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCitib29sIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRl
KENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSos
IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVmUHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRT
dHlsZSkKIHsKICAgICAvLyBJZiB3ZSBnZXQgdGhpcyBmYXIgYW5kIHRoZSBhbmltYXRpb24gaXMg
ZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFuaW5nIHVwIGEganVzdCBmaW5pc2hlZCBhbmltYXRp
b24uCiAgICAgLy8gU28ganVzdCByZXR1cm4uIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBhbGwgY2xl
YW5lZCB1cC4KICAgICBpZiAocG9zdEFjdGl2ZSgpKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEFuaW1hdGlvblN0YXRlIG9sZFN0YXRlID0gc3RhdGUoKTsK
IAogICAgIC8vIFJlc2V0IHRvIHN0YXJ0IHRoZSB0cmFuc2l0aW9uIGlmIHdlIGFyZSBuZXcKICAg
ICBpZiAoaXNOZXcoKSkKQEAgLTc5LDE1ICs4MSwxOCBAQCB2b2lkIEltcGxpY2l0QW5pbWF0aW9u
OjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5k
ZQogICAgIGJvb2wgbmVlZHNBbmltID0gQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVy
dGllcyh0aGlzLCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBhbmltYXRlZFN0eWxlLmdldCgpLCBtX2Zy
b21TdHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgpLCBwcm9ncmVzcygxLCAwLCAwKSk7CiAgICAg
Ly8gRklYTUU6IHdlIGFsc28gbmVlZCB0byBkZXRlY3QgY2FzZXMgd2hlcmUgd2UgaGF2ZSB0byBz
b2Z0d2FyZSBhbmltYXRlIGZvciBvdGhlciByZWFzb25zLAogICAgIC8vIHN1Y2ggYXMgYSBjaGls
ZCB1c2luZyBpbmhlcml0aW5nIHRoZSB0cmFuc2Zvcm0uIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzkwMgotICAgIGlmICghbmVlZHNBbmltKQorICAgIGlmICghbmVl
ZHNBbmltKSB7CiAgICAgICAgIC8vIElmIHdlIGFyZSBydW5uaW5nIGFuIGFjY2VsZXJhdGVkIGFu
aW1hdGlvbiwgc2V0IGEgZmxhZyBpbiB0aGUgc3R5bGUgd2hpY2ggY2F1c2VzIHRoZSBzdHlsZQog
ICAgICAgICAvLyB0byBjb21wYXJlIGFzIGRpZmZlcmVudCB0byBhbnkgb3RoZXIgc3R5bGUuIFRo
aXMgZW5zdXJlcyB0aGF0IGNoYW5nZXMgdG8gdGhlIHByb3BlcnR5CiAgICAgICAgIC8vIHRoYXQg
aXMgYW5pbWF0aW5nIGFyZSBjb3JyZWN0bHkgZGV0ZWN0ZWQgZHVyaW5nIHRoZSBhbmltYXRpb24g
KGUuZy4gd2hlbiBhIHRyYW5zaXRpb24KICAgICAgICAgLy8gZ2V0cyBpbnRlcnJ1cHRlZCkuCisg
ICAgICAgIC8vIEZJWE1FOiBzdGlsbCBuZWVkIHRoaXMgaGFjaz8KICAgICAgICAgYW5pbWF0ZWRT
dHlsZS0+c2V0SXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb24oKTsKKyAgICB9CiAKICAgICAv
LyBGaXJlIHRoZSBzdGFydCB0aW1lb3V0IGlmIG5lZWRlZAogICAgIGZpcmVBbmltYXRpb25FdmVu
dHNJZk5lZWRlZCgpOworICAgIHJldHVybiBzdGF0ZSgpICE9IG9sZFN0YXRlOwogfQogCiB2b2lk
IEltcGxpY2l0QW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKFJlZlB0cjxSZW5kZXJTdHlsZT4m
IGFuaW1hdGVkU3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9JbXBsaWNpdEFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1w
bGljaXRBbmltYXRpb24uaAppbmRleCAzZjI5YmQ5OWUzNjlmZmEzNzRiN2RmMzlmMjRmMTRjMTAw
MTI4NzQ5Li4xNmQ2NzAyZDY0NTcxOTM2ODZkMmQzMmVhMjA4MjhlNjdhOGViODA5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKQEAg
LTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihk
b3VibGUgdGltZU9mZnNldCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGVuZEFuaW1hdGlv
bigpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0
aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJl
bmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVmUHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHls
ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9u
KiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRl
clN0eWxlKiB0YXJnZXRTdHlsZSwgUmVmUHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldEFuaW1hdGVkU3R5bGUoUmVmUHRyPFJlbmRl
clN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0
KFJlbmRlclN0eWxlKiB0byk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAppbmRleCA5YWJiOGYzZWM4Y2M2M2JlNTNiNDAyNTY2
NWYwYWI0MThhZWRiNGY1Li5lOWZjOTAzZTZhZTc4MzkxODhhNzJlNTRiODdhY2FhMTY1NDAzNmRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1h
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmlt
YXRpb24uY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6ZmV0
Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkKICAg
ICBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNldCwgcHJldktleWZyYW1lLnRpbWluZ0Z1bmN0
aW9uKG5hbWUoKSkpOwogfQogCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBv
c2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiwgY29uc3Qg
UmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlZlB0cjxSZW5kZXJTdHls
ZT4mIGFuaW1hdGVkU3R5bGUpCitib29sIEtleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBv
c2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiwgY29uc3Qg
UmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlZlB0cjxSZW5kZXJTdHls
ZT4mIGFuaW1hdGVkU3R5bGUpCiB7CiAgICAgLy8gRmlyZSB0aGUgc3RhcnQgdGltZW91dCBpZiBu
ZWVkZWQKICAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsKQEAgLTEzMiw3ICsxMzIs
NyBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiog
Y29tcG9zaXRlQW5pbWF0aW9uLCBSZW5kZXJFbAogICAgIGlmIChwb3N0QWN0aXZlKCkpIHsKICAg
ICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKQogICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IGNv
bnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPih0YXJnZXRTdHlsZSk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIElmIHdlIGFyZSB3YWl0aW5nIGZv
ciB0aGUgc3RhcnQgdGltZXIsIHdlIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBzdHlsZSB5ZXQu
CkBAIC0xNDEsMTQgKzE0MSwxNiBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENv
bXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBSZW5kZXJFbAogICAgIC8vIFNw
ZWNpYWwgY2FzZSAyIC0gaWYgdGhlcmUgaXMgYSBiYWNrd2FyZHMgZmlsbCBtb2RlLCB0aGVuIHdl
IHdhbnQgdG8gY29udGludWUKICAgICAvLyB0aHJvdWdoIHRvIHRoZSBzdHlsZSBibGVuZCBzbyB0
aGF0IHdlIGdldCB0aGUgZnJvbVN0eWxlLgogICAgIGlmICh3YWl0aW5nVG9TdGFydCgpICYmIG1f
YW5pbWF0aW9uLT5kZWxheSgpID4gMCAmJiAhbV9hbmltYXRpb24tPmZpbGxzQmFja3dhcmRzKCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIElm
IHdlIGhhdmUgbm8ga2V5ZnJhbWVzLCBkb24ndCBhbmltYXRlLgogICAgIGlmICghbV9rZXlmcmFt
ZXMuc2l6ZSgpKSB7CiAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlu
cHV0OjpFbmRBbmltYXRpb24sIC0xKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCisgICAgQW5pbWF0aW9uU3RhdGUgb2xkU3RhdGUgPSBzdGF0ZSgpOwor
CiAgICAgLy8gUnVuIGEgY3ljbGUgb2YgYW5pbWF0aW9uLgogICAgIC8vIFdlIGtub3cgd2Ugd2ls
bCBuZWVkIGEgbmV3IHJlbmRlciBzdHlsZSwgc28gbWFrZSBvbmUgaWYgbmVlZGVkLgogICAgIGlm
ICghYW5pbWF0ZWRTdHlsZSkKQEAgLTE2OCw4ICsxNzAsMTEgQEAgdm9pZCBLZXlmcmFtZUFuaW1h
dGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVu
ZGVyRWwKICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBydW5uaW5nIGFuIGFjY2VsZXJhdGVkIGFu
aW1hdGlvbiwgc2V0IGEgZmxhZyBpbiB0aGUgc3R5bGUKICAgICAgICAgICAgIC8vIHRvIGluZGlj
YXRlIGl0LiBUaGlzIGNhbiBiZSB1c2VkIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgYW4gdXBkYXRlZAog
ICAgICAgICAgICAgLy8gc3R5bGUgZm9yIGhpdCB0ZXN0aW5nLCBldGMuCisgICAgICAgICAgICAv
LyBGSVhNRTogc3RpbGwgbmVlZCB0aGlzPwogICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZS0+c2V0
SXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb24oKTsKICAgICB9CisgICAgCisgICAgcmV0dXJu
IHN0YXRlKCkgIT0gb2xkU3RhdGU7CiB9CiAKIHZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmdldEFu
aW1hdGVkU3R5bGUoUmVmUHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCmluZGV4IDE0
OWEzY2IwNjcxNWJhYjg1OTU2NjMwZGMyNWNjMDQzMzdhMTg5MzQuLmU0MzI0M2MzMTJmZDIxY2Iw
MDMzNTg1ZmYwYzRkODQ2NWUyYjJmZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCBy
ZW5kZXJlciwgaW5kZXgsIGNvbXBvc2l0ZUFuaW1hdGlvbiwgdW5hbmltYXRlZFN0eWxlKSk7CiAg
ICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVu
ZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxl
KiB0YXJnZXRTdHlsZSwgUmVmUHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVy
RWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0
YXJnZXRTdHlsZSwgUmVmUHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGdldEFuaW1hdGVkU3R5bGUoUmVmUHRyPFJlbmRlclN0eWxlPiYp
IG92ZXJyaWRlOwogCiAgICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24o
TGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuY3BwCmluZGV4IGYyYTUxMDIzZTAwOTQzODEyYmZkYWE4MmNiNzFlMzQ0YWJi
NzE5MjEuLjNlYmFkMjZiZWNhYmQ3ODNlZjZhMjM1ZjczZDhjNTAyNzhjMDE0YzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKQEAgLTI5Niw3ICsyOTYsNyBA
QCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyRWxlbWVudDo6YWRqdXN0U3R5bGVEaWZmZXJlbmNlKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCB1bnNpZwogICAgIC8vIFRoZSBhbnN3ZXIgdG8gcmVxdWlyZXNM
YXllcigpIGZvciBwbHVnaW5zLCBpZnJhbWVzLCBhbmQgY2FudmFzIGNhbiBjaGFuZ2Ugd2l0aG91
dCB0aGUgYWN0dWFsCiAgICAgLy8gc3R5bGUgY2hhbmdpbmcsIHNpbmNlIGl0IGRlcGVuZHMgb24g
d2hldGhlciB3ZSBkZWNpZGUgdG8gY29tcG9zaXRlIHRoZXNlIGVsZW1lbnRzLiBXaGVuIHRoZQog
ICAgIC8vIGxheWVyIHN0YXR1cyBvZiBvbmUgb2YgdGhlc2UgZWxlbWVudHMgY2hhbmdlcywgd2Ug
bmVlZCB0byBmb3JjZSBhIGxheW91dC4KLSAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VF
cXVhbCAmJiBpc1JlbmRlckxheWVyTW9kZWxPYmplY3QoKSkgeworICAgIGlmIChkaWZmIDwgU3R5
bGVEaWZmZXJlbmNlTGF5b3V0ICYmIGlzUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCgpKSB7CiAgICAg
ICAgIGlmIChoYXNMYXllcigpICE9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0
aGlzKS5yZXF1aXJlc0xheWVyKCkpCiAgICAgICAgICAgICBkaWZmID0gU3R5bGVEaWZmZXJlbmNl
TGF5b3V0OwogICAgIH0KQEAgLTM2Niw3ICszNjYsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OnVw
ZGF0ZVNoYXBlSW1hZ2UoY29uc3QgU2hhcGVWYWx1ZSogb2xkU2hhcGVWYWx1ZSwgY29uc3QgU2hh
cAogCiB2b2lkIFJlbmRlckVsZW1lbnQ6OmluaXRpYWxpemVTdHlsZSgpCiB7Ci0gICAgc3R5bGVX
aWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZUVxdWFsLCBzdHlsZSgpKTsKKyAgICBzdHlsZVdpbGxD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlTmV3U3R5bGUsIHN0eWxlKCkpOwogCiAgICAgbV9oYXNJbml0
aWFsaXplZFN0eWxlID0gdHJ1ZTsKIApAQCAtMzg1LDcgKzM4NSw3IEBAIHZvaWQgUmVuZGVyRWxl
bWVudDo6aW5pdGlhbGl6ZVN0eWxlKCkKICAgICBpZiAobV9zdHlsZS0+b3V0bGluZVdpZHRoKCkg
PiAwICYmIG1fc3R5bGUtPm91dGxpbmVTaXplKCkgPiBtYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQ
aGFzZU91dGxpbmUpKQogICAgICAgICB2aWV3KCkuc2V0TWF4aW1hbE91dGxpbmVTaXplKHN0ZDo6
bWF4KHRoZW1lKCkucGxhdGZvcm1Gb2N1c1JpbmdNYXhXaWR0aCgpLCBzdGF0aWNfY2FzdDxpbnQ+
KG1fc3R5bGUtPm91dGxpbmVTaXplKCkpKSk7CiAKLSAgICBzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2VFcXVhbCwgbnVsbHB0cik7CisgICAgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlTmV3U3R5bGUsIG51bGxwdHIpOwogCiAgICAgLy8gV2Ugc2hvdWxkbid0IGhhdmUgYW55IHRl
eHQgY2hpbGRyZW4gdGhhdCB3b3VsZCBuZWVkIHN0eWxlRGlkQ2hhbmdlIGF0IHRoaXMgcG9pbnQu
CiAgICAgQVNTRVJUKCFjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PigqdGhpcykuZmlyc3QoKSk7
CkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBSZW5kZXJFbGVtZW50Ojppbml0aWFsaXplU3R5bGUo
KQogICAgIC8vIGhhdmUgdGhlaXIgcGFyZW50IHNldCBiZWZvcmUgZ2V0dGluZyBhIGNhbGwgdG8g
aW5pdGlhbGl6ZVN0eWxlKCkgOnwKIH0KIAotdm9pZCBSZW5kZXJFbGVtZW50OjpzZXRTdHlsZShS
ZWY8UmVuZGVyU3R5bGU+JiYgc3R5bGUpCit2b2lkIFJlbmRlckVsZW1lbnQ6OnNldFN0eWxlKFJl
ZjxSZW5kZXJTdHlsZT4mJiBzdHlsZSwgU3R5bGVEaWZmZXJlbmNlIG1pbmltYWxTdHlsZURpZmZl
cmVuY2UpCiB7CiAgICAgLy8gRklYTUU6IFNob3VsZCBjaGFuZ2UgUmVuZGVyVmlldyBzbyBpdCBj
YW4gdXNlIGluaXRpYWxpemVTdHlsZSB0b28uCiAgICAgLy8gSWYgd2UgZG8gdGhhdCwgd2UgY2Fu
IGFzc2VydCBtX2hhc0luaXRpYWxpemVkU3R5bGUgdW5jb25kaXRpb25hbGx5LApAQCAtNDA4LDYg
KzQwOCw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6c2V0U3R5bGUoUmVmPFJlbmRlclN0eWxlPiYm
IHN0eWxlKQogICAgICAgICBBU1NFUlQoIWlzUmVuZGVySUZyYW1lKCkpOwogICAgICAgICBBU1NF
UlQoIWlzRW1iZWRkZWRPYmplY3QoKSk7CiAgICAgICAgIEFTU0VSVCghaXNDYW52YXMoKSk7Cisg
ICAgICAgIEFTU0VSVChtaW5pbWFsU3R5bGVEaWZmZXJlbmNlID09IFN0eWxlRGlmZmVyZW5jZUVx
dWFsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDE2LDYgKzQxNyw4IEBAIHZvaWQg
UmVuZGVyRWxlbWVudDo6c2V0U3R5bGUoUmVmPFJlbmRlclN0eWxlPiYmIHN0eWxlKQogICAgIGlm
IChtX2hhc0luaXRpYWxpemVkU3R5bGUpCiAgICAgICAgIGRpZmYgPSBtX3N0eWxlLT5kaWZmKHN0
eWxlLmdldCgpLCBjb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcyk7CiAKKyAgICBkaWZmID0gc3Rk
OjptYXgoZGlmZiwgbWluaW1hbFN0eWxlRGlmZmVyZW5jZSk7CisKICAgICBkaWZmID0gYWRqdXN0
U3R5bGVEaWZmZXJlbmNlKGRpZmYsIGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKTsKIAogICAg
IHN0eWxlV2lsbENoYW5nZShkaWZmLCBzdHlsZS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuaAppbmRleCAzZWQ5YzZlM2Y5YmU4YWE5MjhhY2NjOTM4NjA4ZmFi
YTRlMjQ1Y2RlLi41ZjZjNzNiMmJiZDc0YzYxYzQwN2UwOWY0NGIyMWRkNzU1ODkyZmEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKQEAgLTQ0LDE0ICs0NCwxOCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGluaXRpYWxpemVTdHlsZSgpOwogCi0gICAgdm9pZCBzZXRT
dHlsZShSZWY8UmVuZGVyU3R5bGU+JiYpOworICAgIC8vIENhbGxpbmcgd2l0aCBtaW5pbWFsU3R5
bGVEaWZmZXJlbmNlID4gU3R5bGVEaWZmZXJlbmNlRXF1YWwgaW5kaWNhdGVzIHRoYXQKKyAgICAv
LyBvdXQtb2YtYmFuZCBzdGF0ZSAoZS5nLiBhbmltYXRpb25zKSByZXF1aXJlcyB0aGF0IHN0eWxl
RGlkQ2hhbmdlIHByb2Nlc3NpbmcKKyAgICAvLyBjb250aW51ZSBldmVuIGlmIHRoZSBzdHlsZSBp
c24ndCBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdHlsZS4KKyAgICB2b2lkIHNldFN0eWxl
KFJlZjxSZW5kZXJTdHlsZT4mJiwgU3R5bGVEaWZmZXJlbmNlIG1pbmltYWxTdHlsZURpZmZlcmVu
Y2UgPSBTdHlsZURpZmZlcmVuY2VFcXVhbCk7CisKICAgICAvLyBDYWxsZWQgdG8gdXBkYXRlIGEg
c3R5bGUgdGhhdCBpcyBhbGxvd2VkIHRvIHRyaWdnZXIgYW5pbWF0aW9ucy4KLSAgICB2b2lkIHNl
dEFuaW1hdGFibGVTdHlsZShSZWY8UmVuZGVyU3R5bGU+JiYpOworICAgIHZvaWQgc2V0QW5pbWF0
YWJsZVN0eWxlKFJlZjxSZW5kZXJTdHlsZT4mJiwgU3R5bGVEaWZmZXJlbmNlIG1pbmltYWxTdHls
ZURpZmZlcmVuY2UpOwogCiAgICAgLy8gVGhlIHBzZXVkbyBlbGVtZW50IHN0eWxlIGNhbiBiZSBj
YWNoZWQgb3IgdW5jYWNoZWQuICBVc2UgdGhlIGNhY2hlZCBtZXRob2QgaWYgdGhlIHBzZXVkbyBl
bGVtZW50IGRvZXNuJ3QgcmVzcGVjdAogICAgIC8vIGFueSBwc2V1ZG8gY2xhc3NlcyAoYW5kIHRo
ZXJlZm9yZSBoYXMgbm8gY29uY2VwdCBvZiBjaGFuZ2luZyBzdGF0ZSkuCi0gICAgUmVuZGVyU3R5
bGUqIGdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSAwKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBnZXRVbmNhY2hlZFBz
ZXVkb1N0eWxlKGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IDAsIFJlbmRlclN0eWxlKiBvd25TdHlsZSA9IDApIGNvbnN0OworICAgIFJlbmRlclN0
eWxlKiBnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gbnVsbHB0cikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gZ2V0VW5j
YWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUgPSBudWxscHRyLCBSZW5kZXJTdHlsZSogb3duU3R5bGUgPSBudWxscHRyKSBj
b25zdDsKIAogICAgIC8vIFRoaXMgaXMgbnVsbCBmb3IgYW5vbnltb3VzIHJlbmRlcmVycy4KICAg
ICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4oUmVu
ZGVyT2JqZWN0Ojpub2RlKCkpOyB9CkBAIC04OCw4ICs5Miw4IEBAIHB1YmxpYzoKICAgICBib29s
IGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgYm9vbCBpc0NoaWxkQWxsb3dlZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJT
dHlsZSYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQo
UmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwot
ICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVj
dCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSB7IHJldHVybiBhZGRD
aGlsZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOyB9CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxk
KFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxs
cHRyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5k
ZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikg
eyByZXR1cm4gYWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsgfQogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKTsKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcg
ZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gdGhlIHJlbmRlciB0cmVlIGhpZXJhcmNoeSBjaGFuZ2Vz
IHRvIG1ha2Ugc3VyZSBsYXllcnMgZ2V0CkBAIC0zMjIsOSArMzI2LDEzIEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIGJvb2wgc19ub0xvbmdlckFmZmVjdHNQYXJlbnRCbG9jazsKIH07CiAKLWlubGlu
ZSB2b2lkIFJlbmRlckVsZW1lbnQ6OnNldEFuaW1hdGFibGVTdHlsZShSZWY8UmVuZGVyU3R5bGU+
JiYgc3R5bGUpCitpbmxpbmUgdm9pZCBSZW5kZXJFbGVtZW50OjpzZXRBbmltYXRhYmxlU3R5bGUo
UmVmPFJlbmRlclN0eWxlPiYmIHN0eWxlLCBTdHlsZURpZmZlcmVuY2UgbWluaW1hbFN0eWxlRGlm
ZmVyZW5jZSkKIHsKLSAgICBzZXRTdHlsZShhbmltYXRpb24oKS51cGRhdGVBbmltYXRpb25zKCp0
aGlzLCBXVEY6Om1vdmUoc3R5bGUpKSk7CisgICAgUmVmPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0
eWxlID0gV1RGOjptb3ZlKHN0eWxlKTsKKyAgICBpZiAoYW5pbWF0aW9uKCkudXBkYXRlQW5pbWF0
aW9ucygqdGhpcywgYW5pbWF0ZWRTdHlsZSwgYW5pbWF0ZWRTdHlsZSkpCisgICAgICAgIG1pbmlt
YWxTdHlsZURpZmZlcmVuY2UgPSBzdGQ6Om1heChtaW5pbWFsU3R5bGVEaWZmZXJlbmNlLCBTdHls
ZURpZmZlcmVuY2VSZWNvbXBvc2l0ZUxheWVyKTsKKyAgICAKKyAgICBzZXRTdHlsZShXVEY6Om1v
dmUoYW5pbWF0ZWRTdHlsZSksIG1pbmltYWxTdHlsZURpZmZlcmVuY2UpOwogfQogCiBpbmxpbmUg
UmVuZGVyU3R5bGUmIFJlbmRlckVsZW1lbnQ6OmZpcnN0TGluZVN0eWxlKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGZjYzMxZTc2OGZkYTI1ODMy
ZTJkNGNkODQ0ZDQ5OWY5ZmI5MjJjN2EuLjI2YWI5NTY2NTQ2ZGE4OWE4Zjg2ZGVlYTM1NThkNmZi
MGYxMzY4MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAt
NjY5Myw3ICs2NjkzLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKIAogICAgIHVwZGF0ZU5l
ZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpOwogCi0gICAgY29tcG9zaXRvcigpLmxheWVyU3R5bGVD
aGFuZ2VkKCp0aGlzLCBvbGRTdHlsZSk7CisgICAgY29tcG9zaXRvcigpLmxheWVyU3R5bGVDaGFu
Z2VkKGRpZmYsICp0aGlzLCBvbGRTdHlsZSk7CiAKICAgICB1cGRhdGVPclJlbW92ZUZpbHRlckVm
ZmVjdFJlbmRlcmVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggZTdhMDE2NGNmOTljN2Q2ZmNmNjA0NDJlOTE5YjEy
MTA1YzFkYzg0ZC4uODU2NmFkNjgwMmRjZGIzMTBmZDcwOTBjNWEzZjQyNGQ0Mzk5Y2VlMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAKQEAgLTkxNSw4ICs5MTUsMTEgQEAgc3RhdGljIGJvb2wgc3R5bGVDaGFuZ2VSZXF1aXJlc0xh
eWVyUmVidWlsZChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllclN0eWxlQ2hh
bmdlZChSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3Zv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllclN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
CiB7CisgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlRXF1YWwpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSA9IGxheWVyLnJlbmRlcmVyKCku
c3R5bGUoKTsKICAgICBpZiAodXBkYXRlTGF5ZXJDb21wb3NpdGluZ1N0YXRlKGxheWVyKSB8fCAo
b2xkU3R5bGUgJiYgc3R5bGVDaGFuZ2VSZXF1aXJlc0xheWVyUmVidWlsZChsYXllciwgKm9sZFN0
eWxlLCBuZXdTdHlsZSkpKQogICAgICAgICBzZXRDb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxk
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgKaW5kZXggY2RlNTUzNDRmMDk4NGEyYzIwZDUwYzkzM2JjZjYwMGJiYzZjNTA1OC4uYmRhNGNk
MWZjMWJiNjE0MzUzYmJjNmJkYTEwNGY3Njk4NzgwNjdmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMTcxLDcgKzE3MSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGxheWVyV2FzQWRkZWQoUmVuZGVyTGF5ZXImIHBhcmVudCwgUmVu
ZGVyTGF5ZXImIGNoaWxkKTsKICAgICB2b2lkIGxheWVyV2lsbEJlUmVtb3ZlZChSZW5kZXJMYXll
ciYgcGFyZW50LCBSZW5kZXJMYXllciYgY2hpbGQpOwogCi0gICAgdm9pZCBsYXllclN0eWxlQ2hh
bmdlZChSZW5kZXJMYXllciYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CisgICAgdm9p
ZCBsYXllclN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIFJlbmRlckxheWVyJiwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAogICAgIHN0YXRpYyBib29sIGNhbkNvbXBvc2l0ZUNs
aXBQYXRoKGNvbnN0IFJlbmRlckxheWVyJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKaW5kZXggMWIzZjVmNjU0NDJl
ODhjNWIzMzE2MzhlNDQ1ZjM4ZDg2ZWQwZTRlMi4uYWU4NjU1MWIwNmE0ODU3YWQ4NjAzNjhiMzY1
YzRiOWJiMjJmYTg0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKQEAgLTU1LDcgKzU1LDggQEAgZW51bSBTdHlsZURp
ZmZlcmVuY2UgewogICAgIFN0eWxlRGlmZmVyZW5jZUxheW91dFBvc2l0aW9uZWRNb3ZlbWVudE9u
bHksCiAgICAgU3R5bGVEaWZmZXJlbmNlU2ltcGxpZmllZExheW91dCwKICAgICBTdHlsZURpZmZl
cmVuY2VTaW1wbGlmaWVkTGF5b3V0QW5kUG9zaXRpb25lZE1vdmVtZW50LAotICAgIFN0eWxlRGlm
ZmVyZW5jZUxheW91dAorICAgIFN0eWxlRGlmZmVyZW5jZUxheW91dCwKKyAgICBTdHlsZURpZmZl
cmVuY2VOZXdTdHlsZQogfTsKIAogLy8gV2hlbiBzb21lIHN0eWxlIHByb3BlcnRpZXMgY2hhbmdl
LCBkaWZmZXJlbnQgYW1vdW50cyBvZiB3b3JrIGhhdmUgdG8gYmUgZG9uZSBkZXBlbmRpbmcgb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKaW5kZXggMzI0Y2ZiYTgw
Y2ZkMmE2MWVjNjc3ZDk0MzIwYzY1NTk5YTg3NWQ3Zi4uZDgxNDA5Mjk1ZGZkYTA1ODk5NDU1ODMz
MTcxMGEzZGU0Yjg1Zjg0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVS
ZXNvbHZlVHJlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJl
ZS5jcHAKQEAgLTIwMSw3ICsyMDEsOSBAQCBzdGF0aWMgdm9pZCBjcmVhdGVSZW5kZXJlcklmTmVl
ZGVkKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiBpbmhlcml0ZWRTdHlsZQogCiAgICAg
Ly8gRklYTUU6IFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGZhY3RvciB0aGlzLgog
ICAgIC8vIFRoaXMganVzdCBkb2VzIHdoYXQgc2V0QW5pbWF0ZWRTdHlsZSgpIGRvZXMsIGV4Y2Vw
dCB3aXRoIHNldFN0eWxlSW50ZXJuYWwoKSBpbnN0ZWFkIG9mIHNldFN0eWxlKCkuCi0gICAgbmV3
UmVuZGVyZXItPnNldFN0eWxlSW50ZXJuYWwobmV3UmVuZGVyZXItPmFuaW1hdGlvbigpLnVwZGF0
ZUFuaW1hdGlvbnMoKm5ld1JlbmRlcmVyLCBuZXdSZW5kZXJlci0+c3R5bGUoKSkpOworICAgIFJl
ZjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHlsZSA9IG5ld1JlbmRlcmVyLT5zdHlsZSgpOworICAg
IG5ld1JlbmRlcmVyLT5hbmltYXRpb24oKS51cGRhdGVBbmltYXRpb25zKCpuZXdSZW5kZXJlciwg
YW5pbWF0ZWRTdHlsZSwgYW5pbWF0ZWRTdHlsZSk7CisgICAgbmV3UmVuZGVyZXItPnNldFN0eWxl
SW50ZXJuYWwoV1RGOjptb3ZlKGFuaW1hdGVkU3R5bGUpKTsKIAogICAgIG5ld1JlbmRlcmVyLT5p
bml0aWFsaXplU3R5bGUoKTsKIApAQCAtNjMwLDcgKzYzMiw3IEBAIHN0YXRpYyBDaGFuZ2UgcmVz
b2x2ZUxvY2FsKEVsZW1lbnQmIGN1cnJlbnQsIFJlbmRlclN0eWxlJiBpbmhlcml0ZWRTdHlsZSwg
UmVuZGVyCiAKICAgICBpZiAoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBjdXJyZW50LnJlbmRl
cmVyKCkpIHsKICAgICAgICAgaWYgKGxvY2FsQ2hhbmdlICE9IE5vQ2hhbmdlIHx8IHBzZXVkb1N0
eWxlQ2FjaGVJc0ludmFsaWQocmVuZGVyZXIsIG5ld1N0eWxlLmdldCgpKSB8fCAoaW5oZXJpdGVk
Q2hhbmdlID09IEZvcmNlICYmIHJlbmRlcmVyLT5yZXF1aXJlc0ZvcmNlZFN0eWxlUmVjYWxjUHJv
cGFnYXRpb24oKSkgfHwgY3VycmVudC5zdHlsZUNoYW5nZVR5cGUoKSA9PSBTeW50aGV0aWNTdHls
ZUNoYW5nZSkKLSAgICAgICAgICAgIHJlbmRlcmVyLT5zZXRBbmltYXRhYmxlU3R5bGUoKm5ld1N0
eWxlKTsKKyAgICAgICAgICAgIHJlbmRlcmVyLT5zZXRBbmltYXRhYmxlU3R5bGUoKm5ld1N0eWxl
LCBjdXJyZW50LnN0eWxlQ2hhbmdlVHlwZSgpID09IFN5bnRoZXRpY1N0eWxlQ2hhbmdlID8gU3R5
bGVEaWZmZXJlbmNlUmVjb21wb3NpdGVMYXllciA6IFN0eWxlRGlmZmVyZW5jZUVxdWFsKTsKICAg
ICAgICAgZWxzZSBpZiAoY3VycmVudC5uZWVkc1N0eWxlUmVjYWxjKCkpIHsKICAgICAgICAgICAg
IC8vIEFsdGhvdWdoIG5vIGNoYW5nZSBvY2N1cnJlZCwgd2UgdXNlIHRoZSBuZXcgc3R5bGUgc28g
dGhhdCB0aGUgY291c2luIHN0eWxlIHNoYXJpbmcgY29kZSB3b24ndCBnZXQKICAgICAgICAgICAg
IC8vIGZvb2xlZCBpbnRvIGJlbGlldmluZyB0aGlzIHN0eWxlIGlzIHRoZSBzYW1lLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDVkMzEyMDRkOTk4ZDdiMzVkMDljZTgyZDY0YzM0NGYyMDVkOGIzMjguLjQxY2I1MTg3ZGFkNDkx
Y2I3Njk0NTk0NTFlNmQ3YTM2OGRiMWI3YWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNS0w
NC0yNSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBF
bGltaW5hdGUgc3R5bGVEaWRDaGFuZ2Ugd2l0aCBTdHlsZURpZmZlcmVuY2VFcXVhbCB3aGVuIHVw
ZGF0ZXMgYXJlIGFjdHVhbGx5IG5lY2Vzc2FyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCisgICAgICAgIAorICAgICAgICBOZXcgdGVzdCB0aGF0IGRldGVjdHMgd2hldGhlciBh
ICJoYXJkd2FyZSIgYW5pbWF0aW9uIGlzIGZpcmluZyB0aGUgc3R5bGUgcmVjYWxjCisgICAgICAg
IHRpbWVyIG9uIGV2ZXJ5IGZyYW1lLCB3aGljaCBoYXBwZW5lZCBkdXJpbmcgZGV2ZWxvcG1lbnQg
b2YgdGhpcyBwYXRjaC4KKworICAgICAgICAqIGNvbXBvc2l0aW5nL2FuaW1hdGlvbi9uby1zdHls
ZS1yZWNhbGMtZHVyaW5nLWFjY2VsZXJhdGVkLWFuaW1hdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGNvbXBvc2l0aW5nL2FuaW1hdGlvbi9uby1zdHlsZS1yZWNhbGMtZHVyaW5n
LWFjY2VsZXJhdGVkLWFuaW1hdGlvbi5odG1sOiBBZGRlZC4KKwogMjAxNS0wNC0yNiAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjE3Njc1MSk6
IGxpbmUtaGVpZ2h0IGlnbm9yZWQgaW4gPGJ1dHRvbj4gZWxlbWVudHMKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2NvbXBvc2l0aW5nL2FuaW1hdGlvbi9uby1zdHlsZS1yZWNhbGMtZHVyaW5nLWFj
Y2VsZXJhdGVkLWFuaW1hdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGlu
Zy9hbmltYXRpb24vbm8tc3R5bGUtcmVjYWxjLWR1cmluZy1hY2NlbGVyYXRlZC1hbmltYXRpb24t
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3MTZkNWQyNWRiNTIyNjhkY2JkOTIzOTVhNDAwYTIy
N2ExYWE1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9hbmlt
YXRpb24vbm8tc3R5bGUtcmVjYWxjLWR1cmluZy1hY2NlbGVyYXRlZC1hbmltYXRpb24tZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorUEFTUzogc2F3IHR3byBvciBmZXdlciBzdHlsZSByZWNh
bGNzIGR1cmluZyB0aGUgYW5pbWF0aW9uLgorCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Nv
bXBvc2l0aW5nL2FuaW1hdGlvbi9uby1zdHlsZS1yZWNhbGMtZHVyaW5nLWFjY2VsZXJhdGVkLWFu
aW1hdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvYW5pbWF0aW9uL25vLXN0eWxl
LXJlY2FsYy1kdXJpbmctYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y3
NjMwYTMyYjJiODBkZWI2MjczMTI0Mjg3OTgyODUxOTYwNTM0YQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL2FuaW1hdGlvbi9uby1zdHlsZS1yZWNhbGMtZHVyaW5n
LWFjY2VsZXJhdGVkLWFuaW1hdGlvbi5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBo
dG1sPgorCis8aHRtbD4KKzxoZWFkPgorICAgIDxzdHlsZT4KKyAgICAgICAgI2JveCB7CisgICAg
ICAgICAgICB3aWR0aDogMTAwcHg7CisgICAgICAgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAg
ICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAgICAgICAgICAgIAorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAuYW5pbWF0aW5nIHsKKyAgICAgICAgICAgIGFuaW1hdGlvbjogbW92
ZSAxNTBtcyBsaW5lYXI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEBrZXlmcmFtZXMg
bW92ZSB7CisgICAgICAgICAgICBmcm9tIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9Cisg
ICAgICAgICAgICB0byAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDUwMHB4KTsgfQorICAgICAg
ICB9CisgICAgPC9zdHlsZT4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rp
b24gc3RhcnRBbmltYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgYm94ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JveCcpOworICAgICAgICAgICAgYm94LmFkZEV2ZW50TGlz
dGVuZXIoJ2FuaW1hdGlvbnN0YXJ0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAgICAgICAgICAgIGludGVybmFscy5zdGFydFRy
YWNraW5nU3R5bGVSZWNhbGNzKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGJveC5h
ZGRFdmVudExpc3RlbmVyKCdhbmltYXRpb25lbmQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICBpZiAod2luZG93LmludGVybmFscykgeworICAgICAgICAgICAgICAgICAgICB2YXIgbnVt
UmVjYWxjcyA9IGludGVybmFscy5zdHlsZVJlY2FsY0NvdW50KCk7CisgICAgICAgICAgICAgICAg
ICAgIHZhciByZXN1bHREaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0Jyk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAobnVtUmVjYWxjcyA+
IDIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHREaXYuaW5uZXJUZXh0ID0gIkZBSUw6
IHNhdyAiICsgbnVtUmVjYWxjcyArICIgc3R5bGUgcmVjYWxjcyBkdXJpbmcgdGhlIGFuaW1hdGlv
biwgc2hvdWxkIG9ubHkgc2VlIHR3by4iCisgICAgICAgICAgICAgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHREaXYuaW5uZXJUZXh0ID0gIlBBU1M6IHNhdyB0d28g
b3IgZmV3ZXIgc3R5bGUgcmVjYWxjcyBkdXJpbmcgdGhlIGFuaW1hdGlvbi4iCisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0pCisg
ICAgICAgICAgICBib3guY2xhc3NMaXN0LmFkZCgnYW5pbWF0aW5nJyk7CisgICAgICAgIH0KKyAg
ICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBzdGFydEFuaW1hdGlvbiwgZmFs
c2UpOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJib3giPjwvZGl2
PgorPHAgaWQ9InJlc3VsdCI+PHAvPgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="276538"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>