<?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>224837</bug_id>
          
          <creation_ts>2021-04-20 15:35:30 -0700</creation_ts>
          <short_desc>[iOS] Text selection in image overlays should not be limited to rectilinear quads</short_desc>
          <delta_ts>2021-04-21 13:11:44 -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>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>bdakin</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1752466</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-20 15:35:30 -0700</bug_when>
    <thetext>rdar://76829981</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752496</commentid>
    <comment_count>1</comment_count>
      <attachid>426609</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-20 16:18:21 -0700</bug_when>
    <thetext>Created attachment 426609
Depends on #224820</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752648</commentid>
    <comment_count>2</comment_count>
      <attachid>426609</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-04-20 23:44:56 -0700</bug_when>
    <thetext>Comment on attachment 426609
Depends on #224820

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

&gt; Source/WebCore/rendering/RenderLineBreak.cpp:235
&gt; +    auto behavior = HTMLElement::isImageOverlayText(element()) ? SelectionRenderingBehavior::UseIndividualQuads : SelectionRenderingBehavior::CoalesceBoundingRects;

It&apos;s a bit unfortunate that isImageOverlayText is infecting something like RenderLineBreak. Can we maybe hide it in a SelectionGeometry helper or something?

&gt; Source/WebCore/rendering/RenderObject.cpp:740
&gt; +    auto behavior = HTMLElement::isImageOverlayText(node()) ? SelectionRenderingBehavior::UseIndividualQuads : SelectionRenderingBehavior::CoalesceBoundingRects;

Ditto

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:4808
&gt; -static NSArray&lt;WKTextSelectionRect *&gt; *wkTextSelectionRects(const Vector&lt;WebCore::SelectionGeometry&gt;&amp; rects)
&gt; +static NSArray&lt;WKTextSelectionRect *&gt; *wkTextSelectionRects(const Vector&lt;WebCore::SelectionGeometry&gt;&amp; rects, CGFloat scaleFactor)

While you&apos;re here... maybe drop the `wk` prefix?

&gt; Source/WebKit/UIProcess/ios/WKTextSelectionRect.mm:114
&gt; +- (WKTextSelectionRectCustomHandleInfo *)_customHandleInfo

Returning a random unrelated type here where this expects a UITextSelectionRectCustomHandleInfo is pretty sketchy, even if it&apos;s &quot;OK&quot;. Can WKTextSelectionRectCustomHandleInfo be a subclass of WKTextSelectionRectCustomHandleInfo like WKTextSelectionRect is a subclass of UITextSelectionRect?

&gt; Source/WebKit/UIProcess/ios/WKTextSelectionRect.mm:121
&gt; +    return [[[WKTextSelectionRectCustomHandleInfo alloc] initWithFloatQuad:scaledQuad] autorelease];

See https://commits.webkit.org/r273062; I think this should be adoptNS().autorelease() for future-ARC-happiness

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:265
&gt; +        convertedQuad.setP1(view.contentsToRootView(convertedQuad.p1()));

There are two other instances of this code (InspectorTimelineAgent and sendTapHighlightForNode), maybe it&apos;s time for ScrollView/FrameView to get a FloatQuad version of contentsToRootView??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752758</commentid>
    <comment_count>3</comment_count>
      <attachid>426609</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-21 08:35:35 -0700</bug_when>
    <thetext>Comment on attachment 426609
Depends on #224820

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

Thanks for the review!

&gt;&gt; Source/WebCore/rendering/RenderLineBreak.cpp:235
&gt;&gt; +    auto behavior = HTMLElement::isImageOverlayText(element()) ? SelectionRenderingBehavior::UseIndividualQuads : SelectionRenderingBehavior::CoalesceBoundingRects;
&gt; 
&gt; It&apos;s a bit unfortunate that isImageOverlayText is infecting something like RenderLineBreak. Can we maybe hide it in a SelectionGeometry helper or something?

That is true! It&apos;s a bit odd to add a helper for this on SelectionGeometry though, since `SelectionGeometry.h` is included in the UI process and ideally shouldn&apos;t know about DOM nodes/renderers. I think I&apos;ll add something like:

```
SelectionRenderingBehavior HTMLElement::selectionRenderingBehavior(const Node* node)
{
    …
}
```

…since HTMLElement is already well aware of image overlays.

&gt;&gt; Source/WebCore/rendering/RenderObject.cpp:740
&gt;&gt; +    auto behavior = HTMLElement::isImageOverlayText(node()) ? SelectionRenderingBehavior::UseIndividualQuads : SelectionRenderingBehavior::CoalesceBoundingRects;
&gt; 
&gt; Ditto

👍🏻

&gt;&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:4808
&gt;&gt; +static NSArray&lt;WKTextSelectionRect *&gt; *wkTextSelectionRects(const Vector&lt;WebCore::SelectionGeometry&gt;&amp; rects, CGFloat scaleFactor)
&gt; 
&gt; While you&apos;re here... maybe drop the `wk` prefix?

Done!

&gt;&gt; Source/WebKit/UIProcess/ios/WKTextSelectionRect.mm:114
&gt;&gt; +- (WKTextSelectionRectCustomHandleInfo *)_customHandleInfo
&gt; 
&gt; Returning a random unrelated type here where this expects a UITextSelectionRectCustomHandleInfo is pretty sketchy, even if it&apos;s &quot;OK&quot;. Can WKTextSelectionRectCustomHandleInfo be a subclass of WKTextSelectionRectCustomHandleInfo like WKTextSelectionRect is a subclass of UITextSelectionRect?

Ah, so this was a sneaky attempt to avoid introducing another compile-time guard for versions of iOS with `UITextSelectionRectCustomHandleInfo` 😅.

I&apos;ll add a compile-time guard for this and use it here.

&gt;&gt; Source/WebKit/UIProcess/ios/WKTextSelectionRect.mm:121
&gt;&gt; +    return [[[WKTextSelectionRectCustomHandleInfo alloc] initWithFloatQuad:scaledQuad] autorelease];
&gt; 
&gt; See https://commits.webkit.org/r273062; I think this should be adoptNS().autorelease() for future-ARC-happiness

Done!

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:265
&gt;&gt; +        convertedQuad.setP1(view.contentsToRootView(convertedQuad.p1()));
&gt; 
&gt; There are two other instances of this code (InspectorTimelineAgent and sendTapHighlightForNode), maybe it&apos;s time for ScrollView/FrameView to get a FloatQuad version of contentsToRootView??

That&apos;s a good point! I&apos;ll split this out into a separate patch, and fix all three call sites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752826</commentid>
    <comment_count>4</comment_count>
      <attachid>426714</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-21 11:08:40 -0700</bug_when>
    <thetext>Created attachment 426714
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752889</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-21 13:11:41 -0700</bug_when>
    <thetext>Committed r276388 (236863@main): &lt;https://commits.webkit.org/236863@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 426714.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426609</attachid>
            <date>2021-04-20 16:18:21 -0700</date>
            <delta_ts>2021-04-21 11:08:37 -0700</delta_ts>
            <desc>Depends on #224820</desc>
            <filename>bug-224837-20210420161820.patch</filename>
            <type>text/plain</type>
            <size>40906</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk5MTJlOWE1OTAzNDc4
MWFlOTlmMGY2YzI2ZWEwM2JiZDIxN2I1YS4uNGRhNWQzOThiYzZhNDBlNDljMTE1NjViZjAwNjAy
ZjdmOTg5MWRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDIxLTA0LTIwICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFRleHQg
c2VsZWN0aW9uIGluIGltYWdlIG92ZXJsYXlzIHNob3VsZCBub3QgYmUgbGltaXRlZCB0byByZWN0
aWxpbmVhciBxdWFkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI0ODM3CisgICAgICAgIDxyZGFyOi8vNzY4Mjk5ODE+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgdGhlIGlPUy1zcGVjaWZp
YyBgV2ViQ29yZTo6U2VsZWN0aW9uR2VvbWV0cnlgIHN1Y2ggdGhhdCBpdCBpcyBiYWNrZWQgYnkg
YSBgRmxvYXRRdWFkYCBpbnN0ZWFkIG9mIGFuCisgICAgICAgIGBJbnRSZWN0YCwgYW5kIGFkZGl0
aW9uYWxseSBzdXBwb3J0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzZWxlY3Rpb24gZ2Vv
bWV0cnkgc2hvdWxkIHJlbmRlciBhcyBpbmRpdmlkdWFsCisgICAgICAgIHF1YWRzLCBpbnN0ZWFk
IG9mIGFsbG93aW5nIGFkamFjZW50IHJlY3RzIHRvIGJlIGNvYWxlc2NlZCBiYXNlZCBvbiBlYWNo
IHJlY3RzJyBlbmNsb3NpbmcgYm91bmRzLgorCisgICAgICAgIFNlZSBjb21tZW50cyBiZWxvdyBm
b3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICAgICBUZXN0OiBmYXN0L2ltYWdlcy9pbWFnZS1l
eHRyYWN0aW9uL2lvcy9zZWxlY3Rpb24tcmVjdHMtaW4taW1hZ2Utb3ZlcmxheS5odG1sCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pb3MvU2VsZWN0aW9uR2VvbWV0cnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uR2VvbWV0cnk6OlNlbGVjdGlvbkdlb21ldHJ5KToKKworICAgICAgICBD
aGFuZ2UgdGhlc2UgY29uc3RydWN0b3JzIHRvIHRha2UgYEZsb2F0UXVhZGAgaW5zdGVhZCBvZiBh
biBlbmNsb3NpbmcgYm91bmRpbmcgYm94IG9mIGEgcXVhZC4gUmVmZXIgdG8gY2FsbAorICAgICAg
ICBzaXRlcyBiZWxvdy4KKworICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uR2VvbWV0cnk6OnNl
dExvZ2ljYWxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkdlb21ldHJ5OjpzZXRM
b2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uR2VvbWV0cnk6OnNldExv
Z2ljYWxUb3ApOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uR2VvbWV0cnk6OnNldExvZ2lj
YWxIZWlnaHQpOgorCisgICAgICAgIEFkanVzdCB0aGVzZSBmb3VyIHNldHRlcnMgc28gdGhhdCB0
aGV5IGF1dG9tYXRpY2FsbHkgaW5mbGF0ZSB0aGUgc2VsZWN0aW9uIHF1YWQgdG8gdGhlIHF1YWQn
cyBlbmNsb3NpbmcgYm91bmRzCisgICAgICAgIGJlZm9yZSBjaGFuZ2luZyBhbnkgb2YgdGhlIGRp
bWVuc2lvbnMgb2YgdGhlIHJlY3QuIE5vdGUgdGhhdCBpbiBwcmFjdGljZSwgdGhlc2UgbWV0aG9k
cyBhcmUgb25seSB1c2VkIGJ5IGNvZGUKKyAgICAgICAgdGhhdCBhdHRlbXB0cyB0byBjb2FsZXNj
ZSBhZGphY2VudCBzZWxlY3Rpb24gZ2VvbWV0cmllcywgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGRu
J3QgYmUgcmVuZGVyaW5nIG5vbi1yZWN0aWxpbmVhcgorICAgICAgICBxdWFkcyBhbnl3YXlzLgor
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRyeTo6cmVjdCBjb25zdCk6CisKKyAg
ICAgICAgVGhpcyBtZXRob2Qgbm93IGNvbXB1dGVzIHRoZSBlbmNsb3NpbmcgYm91bmRpbmcgcmVj
dCBvZiB0aGUgc2VsZWN0aW9uIHF1YWQuIFNpbmNlIHRoaXMgY2FuIGJlIGNhbGxlZCBtYW55IHRp
bWVzCisgICAgICAgIGZvciBhIHNpbmdsZSBzZWxlY3Rpb24gZ2VvbWV0cnksIHdlIGNhY2hlIHRo
ZSBlbmNsb3NpbmcgYm91bmRzIGluIGBtX2NhY2hlZEVuY2xvc2luZ1JlY3RgIHRvIGF2b2lkIHJl
cGVhdGVkCisgICAgICAgIGJvdW5kaW5nIGJveCBjb21wdXRhdGlvbi4KKworICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uR2VvbWV0cnk6OnNldFF1YWQpOgorCisgICAgICAgIFNldCB0aGUgc2Vs
ZWN0aW9uIHF1YWQsIGFuZCBpbnZhbGlkYXRlIHRoZSBlbmNsb3NpbmcgYm91bmRpbmcgcmVjdC4K
KworICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uR2VvbWV0cnk6OnNldFJlY3QpOgorCisgICAg
ICAgIFNpbmNlIHdlJ3JlIGFscmVhZHkgc2V0dGluZyB0aGUgcXVhZCBmcm9tIGFuIGBJbnRSZWN0
YCwgd2UgY2FuIGdvIGFoZWFkIGFuZCBzZXQgdGhlIGNhY2hlZCBlbmNsb3NpbmcgcmVjdCBhdCB0
aGUKKyAgICAgICAgc2FtZSB0aW1lIHRvIGF2b2lkIGNvbXB1dGluZyBpdCBhZ2FpbiBpbiB0aGUg
ZnV0dXJlLgorCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9pb3MvU2VsZWN0aW9uR2VvbWV0cnkuaDoKKworICAgICAgICBBZGQgYSBmZXcgbmV3IG1l
bWJlcnMgdG8gYFNlbGVjdGlvbkdlb21ldHJ5YC4gSW5zdGVhZCBvZiBtYWludGFpbmluZyBhbiBg
SW50UmVjdGAsIHN0b3JlIGEgYEZsb2F0UmVjdGAgaW4KKyAgICAgICAgYG1fcXVhZGAuIEFkZGl0
aW9uYWxseSwgYWRkIGEgbmV3IGVudW0gZGVzY3JpYmluZyBob3cgdGhlIGBTZWxlY3Rpb25HZW9t
ZXRyeWAgc2hvdWxkIGJlaGF2ZS4gVGhpcyBlbnVtIG9ubHkgaGFzCisgICAgICAgIHR3byB2YWx1
ZXM6IGBDb2FsZXNjZUJvdW5kaW5nUmVjdHNgLCBpbmRpY2F0aW5nIHRoYXQgYWRqYWNlbnQgc2Vs
ZWN0aW9uIGdlb21ldHJpZXMgc2hvdWxkIGJlIGNvYWxlc2NlZCBiYXNlZCBvbgorICAgICAgICB0
aGUgZW5jbG9zaW5nIGJvdW5kaW5nIHJlY3RzIG9mIHRoZWlyIHF1YWRzLCBhbmQgYFVzZUluZGl2
aWR1YWxRdWFkc2AsIGluZGljYXRpbmcgdGhhdCBlYWNoIHF1YWQgc2hvdWxkIGJlCisgICAgICAg
IHJlbmRlcmVkIGluZGl2aWR1YWxseS4KKworICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uR2Vv
bWV0cnk6OnF1YWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uR2VvbWV0cnk6
OmxvZ2ljYWxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkdlb21ldHJ5
Ojpsb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uR2VvbWV0
cnk6OmxvZ2ljYWxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uR2VvbWV0
cnk6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uR2Vv
bWV0cnk6OmJlaGF2aW9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkdlb21l
dHJ5OjpzZXRCZWhhdmlvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRyeTo6
cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRy
eTo6c2V0UmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0
cmllcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaW5lQnJlYWs6OmNvbGxlY3RTZWxlY3Rpb25HZW9tZXRyaWVzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvbkdlb21ldHJpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6YWRqdXN0TGluZUhlaWdodE9mU2VsZWN0aW9uR2VvbWV0cmllcyk6CisKKyAgICAgICAg
V2hlbiBjb2xsZWN0aW5nIHNlbGVjdGlvbiBnZW9tZXRyeSBmcm9tIHJlbmRlcmVycywgYXZvaWQg
Y29hbGVzY2luZyBzZWxlY3Rpb24gZ2VvbWV0cnkgd2hlbiB0aGUKKyAgICAgICAgYFNlbGVjdGlv
bkdlb21ldHJ5YCBoYXMgYFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpVc2VJbmRpdmlkdWFs
UXVhZHNgLgorCisgICAgICAgIChXZWJDb3JlOjpjb2FsZXNjZVNlbGVjdGlvbkdlb21ldHJpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0
cmllc0ludGVybmFsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0cmllcyk6CisK
IDIwMjEtMDQtMjAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVuYW1lIFdlYkNvcmU6OlNlbGVjdGlvblJlY3QgdG8gV2ViQ29yZTo6U2VsZWN0aW9u
R2VvbWV0cnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKaW5kZXggMTUwNmMzNzVhMWYyMWUxM2ZlMzM3YjUwODhjMzlhYWYzYjU2
YWQ2Ni4uZWRhYjQ4NTU2NWI1NjlhNDYyZWU4OWU5MzZhMTk4YzI1YzA5NTRhYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0MSBAQAorMjAyMS0wNC0yMCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBUZXh0IHNlbGVjdGlvbiBpbiBpbWFnZSBvdmVy
bGF5cyBzaG91bGQgbm90IGJlIGxpbWl0ZWQgdG8gcmVjdGlsaW5lYXIgcXVhZHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDgzNworICAgICAgICA8
cmRhcjovLzc2ODI5OTgxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFNlZSBXZWJDb3JlIENoYW5nZUxvZyBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
ICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFy
Z3VtZW50Q29kZXI8U2VsZWN0aW9uR2VvbWV0cnk+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpB
cmd1bWVudENvZGVyPFNlbGVjdGlvbkdlb21ldHJ5Pjo6ZGVjb2RlKToKKworICAgICAgICBFbmNv
ZGUgdGhlIGBTZWxlY3Rpb25HZW9tZXRyeWAgYnkgc2VyaWFsaXppbmcgYSBgRmxvYXRRdWFkYCBp
bnN0ZWFkIG9mIGFuIGVuY2xvc2luZyByZWN0LgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNlbGVjdGVkVGV4dFJhbmdlXSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgbWFya2VkVGV4dFJhbmdlXSk6CisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XS1RleHRTZWxlY3Rpb25SZWN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS1Rl
eHRTZWxlY3Rpb25SZWN0Lm1tOgorICAgICAgICAoLVtXS1RleHRTZWxlY3Rpb25SZWN0Q3VzdG9t
SGFuZGxlSW5mbyBpbml0V2l0aEZsb2F0UXVhZDpdKToKKyAgICAgICAgKC1bV0tUZXh0U2VsZWN0
aW9uUmVjdEN1c3RvbUhhbmRsZUluZm8gYm90dG9tTGVmdF0pOgorICAgICAgICAoLVtXS1RleHRT
ZWxlY3Rpb25SZWN0Q3VzdG9tSGFuZGxlSW5mbyB0b3BMZWZ0XSk6CisgICAgICAgICgtW1dLVGV4
dFNlbGVjdGlvblJlY3RDdXN0b21IYW5kbGVJbmZvIGJvdHRvbVJpZ2h0XSk6CisgICAgICAgICgt
W1dLVGV4dFNlbGVjdGlvblJlY3RDdXN0b21IYW5kbGVJbmZvIHRvcFJpZ2h0XSk6CisgICAgICAg
ICgtW1dLVGV4dFNlbGVjdGlvblJlY3QgaW5pdFdpdGhDR1JlY3Q6XSk6CisgICAgICAgICgtW1dL
VGV4dFNlbGVjdGlvblJlY3QgaW5pdFdpdGhTZWxlY3Rpb25HZW9tZXRyeTpzY2FsZUZhY3Rvcjpd
KToKKyAgICAgICAgKC1bV0tUZXh0U2VsZWN0aW9uUmVjdCBfcGF0aF0pOgorICAgICAgICAoLVtX
S1RleHRTZWxlY3Rpb25SZWN0IF9jdXN0b21IYW5kbGVJbmZvXSk6CisKKyAgICAgICAgSW1wbGVt
ZW50IFNQSSBtZXRob2RzIG9uIGBVSVRleHRTZWxlY3Rpb25SZWN0YCB0byByZW5kZXIgdGV4dCBz
ZWxlY3Rpb24gVUkgdXNpbmcgcXVhZHMgaW5zdGVhZCBvZiByZWN0cy4KKworICAgICAgICAoLVtX
S1RleHRTZWxlY3Rpb25SZWN0IGluaXRXaXRoU2VsZWN0aW9uR2VvbWV0cnk6XSk6IERlbGV0ZWQu
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAg
ICAoV2ViS2l0Ojpjb252ZXJ0Q29udGVudFRvUm9vdFZpZXcpOgorCiAyMDIxLTA0LTIwICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBXZWJD
b3JlOjpTZWxlY3Rpb25SZWN0IHRvIFdlYkNvcmU6OlNlbGVjdGlvbkdlb21ldHJ5CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2VsZWN0aW9uR2VvbWV0cnkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmNwcAppbmRleCBk
YWU5M2NjMDVkZDA4OTk3M2M0YTdlNjlhNTJkZGIxNDMzNTEwMWMyLi4zZGQ5N2MxM2VkNzRkMGEy
N2I2YjNmMTE4N2NkZThhNDA3Y2MxYzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvU2VsZWN0aW9uR2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5jcHAKQEAgLTI2LDIxICsyNiwyMyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkdlb21ldHJ5LmgiCiAKKyNpbmNsdWRl
ICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotU2VsZWN0aW9uR2VvbWV0cnk6OlNlbGVjdGlvbkdlb21ldHJ5KGNv
bnN0IEludFJlY3QmIHJlY3QsIGJvb2wgaXNIb3Jpem9udGFsLCBpbnQgcGFnZU51bWJlcikKLSAg
ICA6IG1fcmVjdChyZWN0KQotICAgICwgbV9kaXJlY3Rpb24oVGV4dERpcmVjdGlvbjo6TFRSKQor
U2VsZWN0aW9uR2VvbWV0cnk6OlNlbGVjdGlvbkdlb21ldHJ5KGNvbnN0IEZsb2F0UXVhZCYgcXVh
ZCwgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IgYmVoYXZpb3IsIGJvb2wgaXNIb3Jpem9udGFs
LCBpbnQgcGFnZU51bWJlcikKKyAgICA6IG1fcXVhZChxdWFkKQorICAgICwgbV9iZWhhdmlvcihi
ZWhhdmlvcikKICAgICAsIG1faXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCkKICAgICAsIG1fcGFn
ZU51bWJlcihwYWdlTnVtYmVyKQogewogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1vdmUgc29t
ZSBvZiB0aGVzZSBhcmd1bWVudHMgdG8gYW4gYXV4aWxsYXJ5IHN0cnVjdC4KLVNlbGVjdGlvbkdl
b21ldHJ5OjpTZWxlY3Rpb25HZW9tZXRyeShjb25zdCBJbnRSZWN0JiByZWN0LCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiwgaW50IG1pblgsIGludCBtYXhYLCBpbnQgbWF4WSwgaW50IGxpbmVOdW1i
ZXIsIGJvb2wgaXNMaW5lQnJlYWssIGJvb2wgaXNGaXJzdE9uTGluZSwgYm9vbCBpc0xhc3RPbkxp
bmUsIGJvb2wgY29udGFpbnNTdGFydCwgYm9vbCBjb250YWluc0VuZCwgYm9vbCBpc0hvcml6b250
YWwsIGJvb2wgaXNJbkZpeGVkUG9zaXRpb24sIGJvb2wgaXNSdWJ5VGV4dCwgaW50IHBhZ2VOdW1i
ZXIpCi0gICAgOiBtX3JlY3QocmVjdCkKK1NlbGVjdGlvbkdlb21ldHJ5OjpTZWxlY3Rpb25HZW9t
ZXRyeShjb25zdCBGbG9hdFF1YWQmIHF1YWQsIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yIGJl
aGF2aW9yLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgaW50IG1pblgsIGludCBtYXhYLCBpbnQg
bWF4WSwgaW50IGxpbmVOdW1iZXIsIGJvb2wgaXNMaW5lQnJlYWssIGJvb2wgaXNGaXJzdE9uTGlu
ZSwgYm9vbCBpc0xhc3RPbkxpbmUsIGJvb2wgY29udGFpbnNTdGFydCwgYm9vbCBjb250YWluc0Vu
ZCwgYm9vbCBpc0hvcml6b250YWwsIGJvb2wgaXNJbkZpeGVkUG9zaXRpb24sIGJvb2wgaXNSdWJ5
VGV4dCwgaW50IHBhZ2VOdW1iZXIpCisgICAgOiBtX3F1YWQocXVhZCkKKyAgICAsIG1fYmVoYXZp
b3IoYmVoYXZpb3IpCiAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgLCBtX21pblgo
bWluWCkKICAgICAsIG1fbWF4WChtYXhYKQpAQCAtNjAsMzQgKzYyLDYxIEBAIFNlbGVjdGlvbkdl
b21ldHJ5OjpTZWxlY3Rpb25HZW9tZXRyeShjb25zdCBJbnRSZWN0JiByZWN0LCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvCiAKIHZvaWQgU2VsZWN0aW9uR2VvbWV0cnk6OnNldExvZ2ljYWxMZWZ0KGlu
dCBsZWZ0KQogeworICAgIGF1dG8gcmVjdCA9IHRoaXMtPnJlY3QoKTsKICAgICBpZiAobV9pc0hv
cml6b250YWwpCi0gICAgICAgIG1fcmVjdC5zZXRYKGxlZnQpOworICAgICAgICByZWN0LnNldFgo
bGVmdCk7CiAgICAgZWxzZQotICAgICAgICBtX3JlY3Quc2V0WShsZWZ0KTsKKyAgICAgICAgcmVj
dC5zZXRZKGxlZnQpOworICAgIHNldFJlY3QocmVjdCk7CiB9CiAKIHZvaWQgU2VsZWN0aW9uR2Vv
bWV0cnk6OnNldExvZ2ljYWxXaWR0aChpbnQgd2lkdGgpCiB7CisgICAgYXV0byByZWN0ID0gdGhp
cy0+cmVjdCgpOwogICAgIGlmIChtX2lzSG9yaXpvbnRhbCkKLSAgICAgICAgbV9yZWN0LnNldFdp
ZHRoKHdpZHRoKTsKKyAgICAgICAgcmVjdC5zZXRXaWR0aCh3aWR0aCk7CiAgICAgZWxzZQotICAg
ICAgICBtX3JlY3Quc2V0SGVpZ2h0KHdpZHRoKTsKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQod2lk
dGgpOworICAgIHNldFJlY3QocmVjdCk7CiB9CiAKIHZvaWQgU2VsZWN0aW9uR2VvbWV0cnk6OnNl
dExvZ2ljYWxUb3AoaW50IHRvcCkKIHsKKyAgICBhdXRvIHJlY3QgPSB0aGlzLT5yZWN0KCk7CiAg
ICAgaWYgKG1faXNIb3Jpem9udGFsKQotICAgICAgICBtX3JlY3Quc2V0WSh0b3ApOworICAgICAg
ICByZWN0LnNldFkodG9wKTsKICAgICBlbHNlCi0gICAgICAgIG1fcmVjdC5zZXRYKHRvcCk7Cisg
ICAgICAgIHJlY3Quc2V0WCh0b3ApOworICAgIHNldFJlY3QocmVjdCk7CiB9CiAKIHZvaWQgU2Vs
ZWN0aW9uR2VvbWV0cnk6OnNldExvZ2ljYWxIZWlnaHQoaW50IGhlaWdodCkKIHsKKyAgICBhdXRv
IHJlY3QgPSB0aGlzLT5yZWN0KCk7CiAgICAgaWYgKG1faXNIb3Jpem9udGFsKQotICAgICAgICBt
X3JlY3Quc2V0SGVpZ2h0KGhlaWdodCk7CisgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7
CiAgICAgZWxzZQotICAgICAgICBtX3JlY3Quc2V0V2lkdGgoaGVpZ2h0KTsKKyAgICAgICAgcmVj
dC5zZXRXaWR0aChoZWlnaHQpOworICAgIHNldFJlY3QocmVjdCk7Cit9CisKK0ludFJlY3QgU2Vs
ZWN0aW9uR2VvbWV0cnk6OnJlY3QoKSBjb25zdAoreworICAgIGlmICghbV9jYWNoZWRFbmNsb3Np
bmdSZWN0KQorICAgICAgICBtX2NhY2hlZEVuY2xvc2luZ1JlY3QgPSBtX3F1YWQuZW5jbG9zaW5n
Qm91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gKm1fY2FjaGVkRW5jbG9zaW5nUmVjdDsKK30KKwor
dm9pZCBTZWxlY3Rpb25HZW9tZXRyeTo6c2V0UXVhZChjb25zdCBGbG9hdFF1YWQmIHF1YWQpCit7
CisgICAgbV9xdWFkID0gcXVhZDsKKyAgICBtX2NhY2hlZEVuY2xvc2luZ1JlY3QucmVzZXQoKTsK
K30KKwordm9pZCBTZWxlY3Rpb25HZW9tZXRyeTo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIG1fcXVhZCA9IEZsb2F0UXVhZCB7IHJlY3QgfTsKKyAgICBtX2NhY2hlZEVuY2xv
c2luZ1JlY3QgPSByZWN0OwogfQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHN0cmVhbSwgU2VsZWN0aW9uR2VvbWV0cnkgcmVjdCkKQEAgLTk1LDcgKzEyNCw3IEBAIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgc3RyZWFtLCBTZWxlY3Rpb25HZW9tZXRyeSBy
ZWN0KQogICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAoc3RyZWFtKTsKICAgICBzdHJl
YW0gPDwgInNlbGVjdGlvbiBnZW9tZXRyeSI7CiAKLSAgICBzdHJlYW0uZHVtcFByb3BlcnR5KCJy
ZWN0IiwgcmVjdC5yZWN0KCkpOworICAgIHN0cmVhbS5kdW1wUHJvcGVydHkoInF1YWQiLCByZWN0
LnF1YWQoKSk7CiAgICAgc3RyZWFtLmR1bXBQcm9wZXJ0eSgiZGlyZWN0aW9uIiwgaXNMZWZ0VG9S
aWdodERpcmVjdGlvbihyZWN0LmRpcmVjdGlvbigpKSA/ICJsdHIiIDogInJ0bCIpOwogCiAgICAg
c3RyZWFtLmR1bXBQcm9wZXJ0eSgibWluLXgiLCByZWN0Lm1pblgoKSk7CkBAIC0xMjUsNiArMTU0
LDkgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiBzdHJlYW0sIFNlbGVjdGlv
bkdlb21ldHJ5IHJlY3QpCiAgICAgaWYgKHJlY3QuaXNSdWJ5VGV4dCgpKQogICAgICAgICBzdHJl
YW0uZHVtcFByb3BlcnR5KCJpcyBydWJ5IHRleHQiLCB0cnVlKTsKIAorICAgIGlmIChyZWN0LmJl
aGF2aW9yKCkgPT0gU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OlVzZUluZGl2aWR1YWxRdWFk
cykKKyAgICAgICAgc3RyZWFtLmR1bXBQcm9wZXJ0eSgidXNpbmcgaW5kaXZpZHVhbCBxdWFkcyIs
IHRydWUpOworCiAgICAgc3RyZWFtLmR1bXBQcm9wZXJ0eSgicGFnZSBudW1iZXIiLCByZWN0LnBh
Z2VOdW1iZXIoKSk7CiAgICAgcmV0dXJuIHN0cmVhbTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmgKaW5kZXggOWQ3NTNhMzRlMzM3ZDlmNDU4
YjA1NzQwYWUyNGY0NWRkN2QwMGZkMy4uOGNlZmU1MjZkN2EyZDZmNDJkMzVlN2EyZTBmMGUzNGNi
MTU0MmE0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlv
bkdlb21ldHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdl
b21ldHJ5LmgKQEAgLTI1LDI4ICsyNSwzOSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
IkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJXcml0aW5nTW9k
ZS5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorZW51bSBjbGFzcyBTZWxlY3Rpb25SZW5kZXJp
bmdCZWhhdmlvciA6IGJvb2wgeworICAgIENvYWxlc2NlQm91bmRpbmdSZWN0cywKKyAgICBVc2VJ
bmRpdmlkdWFsUXVhZHMsCit9OworCiBjbGFzcyBTZWxlY3Rpb25HZW9tZXRyeSB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGlj
aXQgU2VsZWN0aW9uR2VvbWV0cnkoY29uc3QgSW50UmVjdCYsIGJvb2wgaXNIb3Jpem9udGFsLCBp
bnQgY29sdW1uTnVtYmVyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBTZWxlY3Rpb25H
ZW9tZXRyeShjb25zdCBGbG9hdFF1YWQmLCBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvciwgYm9v
bCBpc0hvcml6b250YWwsIGludCBjb2x1bW5OdW1iZXIpOwogCiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBtb3ZlIHNvbWUgb2YgdGhlc2UgYXJndW1lbnRzIHRvIGFuIGF1eGlsbGFyeSBzdHJ1Y3Qu
Ci0gICAgU2VsZWN0aW9uR2VvbWV0cnkoY29uc3QgSW50UmVjdCYsIFRleHREaXJlY3Rpb24sIGlu
dCwgaW50LCBpbnQsIGludCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9v
bCwgYm9vbCwgaW50KTsKKyAgICBTZWxlY3Rpb25HZW9tZXRyeShjb25zdCBGbG9hdFF1YWQmLCBT
ZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvciwgVGV4dERpcmVjdGlvbiwgaW50LCBpbnQsIGludCwg
aW50LCBib29sLCBib29sLCBib29sLCBib29sLCBib29sLCBib29sLCBib29sLCBib29sLCBpbnQp
OwogICAgIFNlbGVjdGlvbkdlb21ldHJ5KCkgPSBkZWZhdWx0OwogICAgIH5TZWxlY3Rpb25HZW9t
ZXRyeSgpID0gZGVmYXVsdDsKIAotICAgIEludFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQorICAgIEZsb2F0UXVhZCBxdWFkKCkgY29uc3QgeyByZXR1cm4gbV9xdWFkOyB9Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRRdWFkKGNvbnN0IEZsb2F0UXVhZCYpOworCisgICAg
V0VCQ09SRV9FWFBPUlQgSW50UmVjdCByZWN0KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmKTsKIAotICAgIGludCBsb2dpY2FsTGVmdCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNIb3Jpem9udGFsID8gbV9yZWN0LngoKSA6IG1fcmVjdC55KCk7IH0K
LSAgICBpbnQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWwgPyBt
X3JlY3Qud2lkdGgoKSA6IG1fcmVjdC5oZWlnaHQoKTsgfQotICAgIGludCBsb2dpY2FsVG9wKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWwgPyBtX3JlY3QueSgpIDogbV9yZWN0LngoKTsg
fQotICAgIGludCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWwg
PyBtX3JlY3QuaGVpZ2h0KCkgOiBtX3JlY3Qud2lkdGgoKTsgfQorICAgIGludCBsb2dpY2FsTGVm
dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIb3Jpem9udGFsID8gcmVjdCgpLngoKSA6IHJlY3QoKS55
KCk7IH0KKyAgICBpbnQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250
YWwgPyByZWN0KCkud2lkdGgoKSA6IHJlY3QoKS5oZWlnaHQoKTsgfQorICAgIGludCBsb2dpY2Fs
VG9wKCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWwgPyByZWN0KCkueSgpIDogcmVjdCgp
LngoKTsgfQorICAgIGludCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6
b250YWwgPyByZWN0KCkuaGVpZ2h0KCkgOiByZWN0KCkud2lkdGgoKTsgfQogCiAgICAgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQogICAgIGlu
dCBtaW5YKCkgY29uc3QgeyByZXR1cm4gbV9taW5YOyB9CkBAIC02Miw4ICs3Myw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzSW5GaXhlZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0luRml4
ZWRQb3NpdGlvbjsgfQogICAgIGJvb2wgaXNSdWJ5VGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNS
dWJ5VGV4dDsgfQogICAgIGludCBwYWdlTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlTnVt
YmVyOyB9Ci0KLSAgICB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX3JlY3Qg
PSByZWN0OyB9CisgICAgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IgYmVoYXZpb3IoKSBjb25z
dCB7IHJldHVybiBtX2JlaGF2aW9yOyB9CiAKICAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KGludCk7
CiAgICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoaW50KTsKQEAgLTgxLDkgKzkxLDExIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldENvbnRhaW5zU3RhcnQoYm9vbCBjb250YWluc1N0YXJ0KSB7IG1fY29u
dGFpbnNTdGFydCA9IGNvbnRhaW5zU3RhcnQ7IH0KICAgICB2b2lkIHNldENvbnRhaW5zRW5kKGJv
b2wgY29udGFpbnNFbmQpIHsgbV9jb250YWluc0VuZCA9IGNvbnRhaW5zRW5kOyB9CiAgICAgdm9p
ZCBzZXRJc0hvcml6b250YWwoYm9vbCBpc0hvcml6b250YWwpIHsgbV9pc0hvcml6b250YWwgPSBp
c0hvcml6b250YWw7IH0KKyAgICB2b2lkIHNldEJlaGF2aW9yKFNlbGVjdGlvblJlbmRlcmluZ0Jl
aGF2aW9yIGJlaGF2aW9yKSB7IG1fYmVoYXZpb3IgPSBiZWhhdmlvcjsgfQogCiBwcml2YXRlOgot
ICAgIEludFJlY3QgbV9yZWN0OworICAgIEZsb2F0UXVhZCBtX3F1YWQ7CisgICAgU2VsZWN0aW9u
UmVuZGVyaW5nQmVoYXZpb3IgbV9iZWhhdmlvciB7IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9y
OjpDb2FsZXNjZUJvdW5kaW5nUmVjdHMgfTsKICAgICBUZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9u
IHsgVGV4dERpcmVjdGlvbjo6TFRSIH07CiAgICAgaW50IG1fbWluWCB7IDAgfTsKICAgICBpbnQg
bV9tYXhYIHsgMCB9OwpAQCAtOTgsOCArMTEwLDIyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lz
SW5GaXhlZFBvc2l0aW9uIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNSdWJ5VGV4dCB7IGZhbHNl
IH07CiAgICAgaW50IG1fcGFnZU51bWJlciB7IDAgfTsKKworICAgIG11dGFibGUgT3B0aW9uYWw8
SW50UmVjdD4gbV9jYWNoZWRFbmNsb3NpbmdSZWN0OwogfTsKIAogV0VCQ09SRV9FWFBPUlQgV1RG
OjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFNlbGVjdGlvbkdlb21l
dHJ5KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpTZWxlY3Rpb25SZW5kZXJpbmdCZWhh
dmlvcj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6
OlNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yLAorICAgICAgICBXZWJDb3JlOjpTZWxlY3Rpb25S
ZW5kZXJpbmdCZWhhdmlvcjo6Q29hbGVzY2VCb3VuZGluZ1JlY3RzLAorICAgICAgICBXZWJDb3Jl
OjpTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvcjo6VXNlSW5kaXZpZHVhbFF1YWRzCisgICAgPjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAKaW5kZXggMzI1MTBjZDQ1YmIzYjAwNDNiMzg1MjIwMmE1YjY4MDliOGI2ZjlhMi4u
ZGMxODM5N2FiNjk3YWQxZGZhMjI2OWU1MTNlZGQ1MmMyMTE5OTY0MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBAIC0xMjMsMTQgKzEyMywxNCBAQCB2b2lkIFJl
bmRlckltYWdlOjpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0cmllcyhWZWN0b3I8U2VsZWN0aW9uR2Vv
bWV0cnk+JiBnZW9tZXRyaQogICAgIH0KIAogICAgIGJvb2wgaXNGaXhlZCA9IGZhbHNlOwotICAg
IEludFJlY3QgYWJzb2x1dGVCb3VuZHMgPSBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChp
bWFnZVJlY3QpLCBVc2VUcmFuc2Zvcm1zLCAmaXNGaXhlZCkuZW5jbG9zaW5nQm91bmRpbmdCb3go
KTsKLSAgICBJbnRSZWN0IGxpbmVFeHRlbnRCb3VuZHMgPSBsb2NhbFRvQWJzb2x1dGVRdWFkKEZs
b2F0UmVjdChsaW5lRXh0ZW50UmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgYXV0
byBhYnNvbHV0ZVF1YWQgPSBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChpbWFnZVJlY3Qp
LCBVc2VUcmFuc2Zvcm1zLCAmaXNGaXhlZCk7CisgICAgYXV0byBsaW5lRXh0ZW50Qm91bmRzID0g
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobGluZUV4dGVudFJlY3QpKS5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpOwogICAgIGlmICghY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKQogICAgICAgICBsaW5lRXh0ZW50Qm91bmRzID0gbGluZUV4dGVudEJvdW5kcy50
cmFuc3Bvc2VkUmVjdCgpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBlaXRo
ZXIgbWFraW5nIFNlbGVjdGlvbkdlb21ldHJ5IGEgc3RydWN0IG9yIGJldHRlciBvcmdhbml6ZSBp
dHMgb3B0aW9uYWwgZmllbGRzIGludG8KICAgICAvLyBhbiBhdXhpbGlhcnkgc3RydWN0IHRvIHNp
bXBsaWZ5IGl0cyBpbml0aWFsaXphdGlvbi4KLSAgICBnZW9tZXRyaWVzLmFwcGVuZChTZWxlY3Rp
b25HZW9tZXRyeShhYnNvbHV0ZUJvdW5kcywgY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpLmRpcmVj
dGlvbigpLCBsaW5lRXh0ZW50Qm91bmRzLngoKSwgbGluZUV4dGVudEJvdW5kcy5tYXhYKCksIGxp
bmVFeHRlbnRCb3VuZHMubWF4WSgpLCAwLCBmYWxzZSAvKiBsaW5lIGJyZWFrICovLCBpc0ZpcnN0
T25MaW5lLCBpc0xhc3RPbkxpbmUsIGZhbHNlIC8qIGNvbnRhaW5zIHN0YXJ0ICovLCBmYWxzZSAv
KiBjb250YWlucyBlbmQgKi8sIGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpLCBpc0ZpeGVkLCBmYWxzZSAvKiBydWJ5IHRleHQgKi8sIHZpZXcoKS5wYWdl
TnVtYmVyRm9yQmxvY2tQcm9ncmVzc2lvbk9mZnNldChhYnNvbHV0ZUJvdW5kcy54KCkpKSk7Cisg
ICAgZ2VvbWV0cmllcy5hcHBlbmQoU2VsZWN0aW9uR2VvbWV0cnkoYWJzb2x1dGVRdWFkLCBTZWxl
Y3Rpb25SZW5kZXJpbmdCZWhhdmlvcjo6Q29hbGVzY2VCb3VuZGluZ1JlY3RzLCBjb250YWluaW5n
QmxvY2stPnN0eWxlKCkuZGlyZWN0aW9uKCksIGxpbmVFeHRlbnRCb3VuZHMueCgpLCBsaW5lRXh0
ZW50Qm91bmRzLm1heFgoKSwgbGluZUV4dGVudEJvdW5kcy5tYXhZKCksIDAsIGZhbHNlIC8qIGxp
bmUgYnJlYWsgKi8sIGlzRmlyc3RPbkxpbmUsIGlzTGFzdE9uTGluZSwgZmFsc2UgLyogY29udGFp
bnMgc3RhcnQgKi8sIGZhbHNlIC8qIGNvbnRhaW5zIGVuZCAqLywgY29udGFpbmluZ0Jsb2NrLT5z
dHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIGlzRml4ZWQsIGZhbHNlIC8qIHJ1Ynkg
dGV4dCAqLywgdmlldygpLnBhZ2VOdW1iZXJGb3JCbG9ja1Byb2dyZXNzaW9uT2Zmc2V0KGFic29s
dXRlUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpLngoKSkpKTsKIH0KICNlbmRpZgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwCmluZGV4IGJiMGM5Nzcz
YjIyODhiYzgxYTNjYmU3NWM3MGZhM2YwNmVlOWNiOTkuLjYyOTAxNjc4YjY0OTQ1Y2Y3ZThlNzU4
MWEwZjQ1YTA1YWU5ZGJmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaW5lQnJlYWsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aW5lQnJlYWsuY3BwCkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBSZW5kZXJMaW5lQnJlYWs6OmNv
bGxlY3RTZWxlY3Rpb25HZW9tZXRyaWVzKFZlY3RvcjxTZWxlY3Rpb25HZW9tZXRyeT4mIHJlY3QK
ICAgICAgICAgaXNMYXN0T25MaW5lID0gIWNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2Nr
KCktPmlubGluZUJveFdyYXBwZXIoKS0+bmV4dE9uTGluZUV4aXN0cygpOwogCiAgICAgYm9vbCBp
c0ZpeGVkID0gZmFsc2U7Ci0gICAgSW50UmVjdCBhYnNSZWN0ID0gbG9jYWxUb0Fic29sdXRlUXVh
ZChGbG9hdFJlY3QocmVjdCksIFVzZVRyYW5zZm9ybXMsICZpc0ZpeGVkKS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOworICAgIGF1dG8gYWJzb2x1dGVRdWFkID0gbG9jYWxUb0Fic29sdXRlUXVhZChG
bG9hdFJlY3QocmVjdCksIFVzZVRyYW5zZm9ybXMsICZpc0ZpeGVkKTsKICAgICBib29sIGJveElz
SG9yaXpvbnRhbCA9ICFpczxTVkdJbmxpbmVUZXh0Qm94PihydW4tPmxlZ2FjeUlubGluZUJveCgp
KSA/IHJ1bi0+aXNIb3Jpem9udGFsKCkgOiAhc3R5bGUoKS5pc1ZlcnRpY2FsV3JpdGluZ01vZGUo
KTsKICAgICAvLyBJZiB0aGUgY29udGFpbmluZyBibG9jayBpcyBhbiBpbmxpbmUgZWxlbWVudCwg
d2Ugd2FudCB0byBjaGVjayB0aGUgaW5saW5lQm94V3JhcHBlciBvcmllbnRhdGlvbgogICAgIC8v
IHRvIGRldGVybWluZSB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGJsb2NrLiBJbiB0aGlzIGNhc2Ug
d2UgYWxzbyB1c2UgdGhlIGlubGluZUJveFdyYXBwZXIgdG8KQEAgLTIzMiw3ICsyMzIsOCBAQCB2
b2lkIFJlbmRlckxpbmVCcmVhazo6Y29sbGVjdFNlbGVjdGlvbkdlb21ldHJpZXMoVmVjdG9yPFNl
bGVjdGlvbkdlb21ldHJ5PiYgcmVjdAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmVjdHMuYXBw
ZW5kKFNlbGVjdGlvbkdlb21ldHJ5KGFic1JlY3QsIHJ1bi0+ZGlyZWN0aW9uKCksIGV4dGVudHNS
ZWN0LngoKSwgZXh0ZW50c1JlY3QubWF4WCgpLCBleHRlbnRzUmVjdC5tYXhZKCksIDAsIHJ1bi0+
aXNMaW5lQnJlYWsoKSwgaXNGaXJzdE9uTGluZSwgaXNMYXN0T25MaW5lLCBmYWxzZSwgZmFsc2Us
IGJveElzSG9yaXpvbnRhbCwgaXNGaXhlZCwgY29udGFpbmluZ0Jsb2NrLT5pc1J1YnlUZXh0KCks
IHZpZXcoKS5wYWdlTnVtYmVyRm9yQmxvY2tQcm9ncmVzc2lvbk9mZnNldChhYnNSZWN0LngoKSkp
KTsKKyAgICBhdXRvIGJlaGF2aW9yID0gSFRNTEVsZW1lbnQ6OmlzSW1hZ2VPdmVybGF5VGV4dChl
bGVtZW50KCkpID8gU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OlVzZUluZGl2aWR1YWxRdWFk
cyA6IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpDb2FsZXNjZUJvdW5kaW5nUmVjdHM7Cisg
ICAgcmVjdHMuYXBwZW5kKFNlbGVjdGlvbkdlb21ldHJ5KGFic29sdXRlUXVhZCwgYmVoYXZpb3Is
IHJ1bi0+ZGlyZWN0aW9uKCksIGV4dGVudHNSZWN0LngoKSwgZXh0ZW50c1JlY3QubWF4WCgpLCBl
eHRlbnRzUmVjdC5tYXhZKCksIDAsIHJ1bi0+aXNMaW5lQnJlYWsoKSwgaXNGaXJzdE9uTGluZSwg
aXNMYXN0T25MaW5lLCBmYWxzZSwgZmFsc2UsIGJveElzSG9yaXpvbnRhbCwgaXNGaXhlZCwgY29u
dGFpbmluZ0Jsb2NrLT5pc1J1YnlUZXh0KCksIHZpZXcoKS5wYWdlTnVtYmVyRm9yQmxvY2tQcm9n
cmVzc2lvbk9mZnNldChhYnNvbHV0ZVF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKS54KCkpKSk7
CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApp
bmRleCBmNGMxY2VlZjYxMDI0NGYyMDA1ZTAyZjc1OGU2YzM3OTJlMGM1OWEyLi5lOGQxYjc4ZDkx
YjAzMDhjOWUwNDY5YmUyOGM0ZGEwNTU1NGU1OTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtNzM3LDkgKzczNyw5IEBAIHZvaWQgUmVuZGVyT2JqZWN0
Ojpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0cmllcyhWZWN0b3I8U2VsZWN0aW9uR2VvbWV0cnk+JiBn
ZW9tZXRyCiAgICAgICAgICAgICBjaGlsZC0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CiAgICAgfQog
Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZRdWFkcyA9IHF1YWRzLnNpemUoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZRdWFkczsgKytpKQotICAgICAgICBnZW9tZXRyaWVz
LmFwcGVuZChTZWxlY3Rpb25HZW9tZXRyeShxdWFkc1tpXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgp
LCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCB2aWV3KCkucGFnZU51bWJlckZvckJsb2NrUHJv
Z3Jlc3Npb25PZmZzZXQocXVhZHNbaV0uZW5jbG9zaW5nQm91bmRpbmdCb3goKS54KCkpKSk7Cisg
ICAgYXV0byBiZWhhdmlvciA9IEhUTUxFbGVtZW50Ojppc0ltYWdlT3ZlcmxheVRleHQobm9kZSgp
KSA/IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpVc2VJbmRpdmlkdWFsUXVhZHMgOiBTZWxl
Y3Rpb25SZW5kZXJpbmdCZWhhdmlvcjo6Q29hbGVzY2VCb3VuZGluZ1JlY3RzOworICAgIGZvciAo
YXV0byYgcXVhZCA6IHF1YWRzKQorICAgICAgICBnZW9tZXRyaWVzLmFwcGVuZChTZWxlY3Rpb25H
ZW9tZXRyeShxdWFkLCBiZWhhdmlvciwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgdmlldygp
LnBhZ2VOdW1iZXJGb3JCbG9ja1Byb2dyZXNzaW9uT2Zmc2V0KHF1YWQuZW5jbG9zaW5nQm91bmRp
bmdCb3goKS54KCkpKSk7CiB9CiAjZW5kaWYKIApAQCAtMjEyNCw2ICsyMTI0LDggQEAgc3RhdGlj
IGlubGluZSB2b2lkIGFkanVzdExpbmVIZWlnaHRPZlNlbGVjdGlvbkdlb21ldHJpZXMoVmVjdG9y
PFNlbGVjdGlvbkdlb21ldHIKICAgICAgICAgLS1pOwogICAgICAgICBpZiAoZ2VvbWV0cmllc1tp
XS5saW5lTnVtYmVyKCkpCiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGdlb21ldHJp
ZXNbaV0uYmVoYXZpb3IoKSA9PSBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvcjo6VXNlSW5kaXZp
ZHVhbFF1YWRzKQorICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGdlb21ldHJpZXNbaV0u
c2V0TGluZU51bWJlcihsaW5lTnVtYmVyKTsKICAgICAgICAgZ2VvbWV0cmllc1tpXS5zZXRMb2dp
Y2FsVG9wKGxpbmVUb3ApOwogICAgICAgICBnZW9tZXRyaWVzW2ldLnNldExvZ2ljYWxIZWlnaHQo
bGluZUhlaWdodCk7CkBAIC0yMTMyLDcgKzIxMzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRq
dXN0TGluZUhlaWdodE9mU2VsZWN0aW9uR2VvbWV0cmllcyhWZWN0b3I8U2VsZWN0aW9uR2VvbWV0
cgogCiBzdGF0aWMgU2VsZWN0aW9uR2VvbWV0cnkgY29hbGVzY2VTZWxlY3Rpb25HZW9tZXRyaWVz
KGNvbnN0IFNlbGVjdGlvbkdlb21ldHJ5JiBvcmlnaW5hbCwgY29uc3QgU2VsZWN0aW9uR2VvbWV0
cnkmIHByZXZpb3VzKQogewotICAgIFNlbGVjdGlvbkdlb21ldHJ5IHJlc3VsdCh1bmlvblJlY3Qo
cHJldmlvdXMucmVjdCgpLCBvcmlnaW5hbC5yZWN0KCkpLCBvcmlnaW5hbC5pc0hvcml6b250YWwo
KSwgb3JpZ2luYWwucGFnZU51bWJlcigpKTsKKyAgICBTZWxlY3Rpb25HZW9tZXRyeSByZXN1bHQo
eyB1bmlvblJlY3QocHJldmlvdXMucmVjdCgpLCBvcmlnaW5hbC5yZWN0KCkpIH0sIFNlbGVjdGlv
blJlbmRlcmluZ0JlaGF2aW9yOjpDb2FsZXNjZUJvdW5kaW5nUmVjdHMsIG9yaWdpbmFsLmlzSG9y
aXpvbnRhbCgpLCBvcmlnaW5hbC5wYWdlTnVtYmVyKCkpOwogICAgIHJlc3VsdC5zZXREaXJlY3Rp
b24ob3JpZ2luYWwuY29udGFpbnNTdGFydCgpIHx8IG9yaWdpbmFsLmNvbnRhaW5zRW5kKCkgPyBv
cmlnaW5hbC5kaXJlY3Rpb24oKSA6IHByZXZpb3VzLmRpcmVjdGlvbigpKTsKICAgICByZXN1bHQu
c2V0Q29udGFpbnNTdGFydChwcmV2aW91cy5jb250YWluc1N0YXJ0KCkgfHwgb3JpZ2luYWwuY29u
dGFpbnNTdGFydCgpKTsKICAgICByZXN1bHQuc2V0Q29udGFpbnNFbmQocHJldmlvdXMuY29udGFp
bnNFbmQoKSB8fCBvcmlnaW5hbC5jb250YWluc0VuZCgpKTsKQEAgLTIyNzIsNiArMjI3NCw4IEBA
IGF1dG8gUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0cmllc0ludGVybmFsKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICBmb3IgKHNpemVfdCBqID0gMTsgaiA8IG51bWJl
ck9mR2VvbWV0cmllczsgKytqKSB7CiAgICAgICAgIGlmIChnZW9tZXRyaWVzW2pdLmxpbmVOdW1i
ZXIoKSAhPSBnZW9tZXRyaWVzW2ogLSAxXS5saW5lTnVtYmVyKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgaWYgKGdlb21ldHJpZXNbal0uYmVoYXZpb3IoKSA9PSBTZWxlY3Rpb25S
ZW5kZXJpbmdCZWhhdmlvcjo6VXNlSW5kaXZpZHVhbFF1YWRzKQorICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIGF1dG8mIHByZXZpb3VzUmVjdCA9IGdlb21ldHJpZXNbaiAtIDFdOwogICAg
ICAgICBib29sIHByZXZpb3VzUmVjdE1heU5vdFJlYWNoUmlnaHRFZGdlID0gKHByZXZpb3VzUmVj
dC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgJiYgcHJldmlvdXNSZWN0LmNvbnRh
aW5zRW5kKCkpIHx8IChwcmV2aW91c1JlY3QuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6
UlRMICYmIHByZXZpb3VzUmVjdC5jb250YWluc1N0YXJ0KCkpOwogICAgICAgICBpZiAocHJldmlv
dXNSZWN0TWF5Tm90UmVhY2hSaWdodEVkZ2UpCkBAIC0yMjg4LDYgKzIyOTIsOCBAQCBhdXRvIFJl
bmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvbkdlb21ldHJpZXNJbnRlcm5hbChjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UpCiAgICAgICAgIGF1dG8mIHNlbGVjdGlvbkdlb21ldHJ5ID0gZ2VvbWV0
cmllc1tpXTsKICAgICAgICAgaWYgKCFzZWxlY3Rpb25HZW9tZXRyeS5pc0xpbmVCcmVhaygpICYm
IHNlbGVjdGlvbkdlb21ldHJ5LmxpbmVOdW1iZXIoKSA+PSBtYXhMaW5lTnVtYmVyKQogICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChzZWxlY3Rpb25HZW9tZXRyeS5iZWhhdmlvcigp
ID09IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpVc2VJbmRpdmlkdWFsUXVhZHMpCisgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHNlbGVjdGlvbkdlb21ldHJ5LmRpcmVjdGlv
bigpID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBzZWxlY3Rpb25HZW9tZXRyeS5pc0ZpcnN0T25M
aW5lKCkpIHsKICAgICAgICAgICAgIHNlbGVjdGlvbkdlb21ldHJ5LnNldExvZ2ljYWxXaWR0aChz
ZWxlY3Rpb25HZW9tZXRyeS5sb2dpY2FsV2lkdGgoKSArIHNlbGVjdGlvbkdlb21ldHJ5LmxvZ2lj
YWxMZWZ0KCkgLSBzZWxlY3Rpb25HZW9tZXRyeS5taW5YKCkpOwogICAgICAgICAgICAgc2VsZWN0
aW9uR2VvbWV0cnkuc2V0TG9naWNhbExlZnQoc2VsZWN0aW9uR2VvbWV0cnkubWluWCgpKTsKQEAg
LTIzMDksNiArMjMxNSwxNSBAQCBWZWN0b3I8U2VsZWN0aW9uR2VvbWV0cnk+IFJlbmRlck9iamVj
dDo6Y29sbGVjdFNlbGVjdGlvbkdlb21ldHJpZXMoY29uc3QgU2ltcGxlUgogICAgIEludFJlY3Qg
aW50ZXJpb3JVbmlvblJlY3Q7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkdl
b21ldHJpZXM7ICsraSkgewogICAgICAgICBhdXRvJiBjdXJyZW50R2VvbWV0cnkgPSByZXN1bHQu
Z2VvbWV0cmllc1tpXTsKKyAgICAgICAgaWYgKGN1cnJlbnRHZW9tZXRyeS5iZWhhdmlvcigpID09
IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpVc2VJbmRpdmlkdWFsUXVhZHMpIHsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBzdGlsbCBwcm9iYWJseSB3YW50IHNvbWUgd2F5IHRvIGNvYWxl
c2NlIHF1YWRzLCBwcm9iYWJseSBieSBwcm9qZWN0aW5nIHRoZW0gb250byByb3RhdGVkIGJvdW5k
aW5nIHJlY3RzCisgICAgICAgICAgICAvLyBhbmQgdGhlbiBjaGVja2luZyB3aGV0aGVyIHRoZSBy
b3RhdGVkIGJvdW5kaW5nIHJlY3RzIGFyZSBvdmVybGFwcGluZyBhbmQgc2hhcmUgdGhlIHNhbWUg
cm90YXRpb24gYW5nbGUuIFVudGlsIHRoZW4sCisgICAgICAgICAgICAvLyB3ZSBzaW1wbHkgYXBw
ZW5kIGFsbCBub24tZW1wdHkgcXVhZHMuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnRHZW9tZXRy
eS5xdWFkKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvYWxlc2NlZEdlb21ldHJpZXMu
YXBwZW5kKGN1cnJlbnRHZW9tZXRyeSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorCiAgICAgICAgIGlmIChjdXJyZW50R2VvbWV0cnkubGluZU51bWJlcigpID09IDEpIHsKICAg
ICAgICAgICAgIEFTU0VSVChpbnRlcmlvclVuaW9uUmVjdC5pc0VtcHR5KCkpOwogICAgICAgICAg
ICAgaWYgKCFjb2FsZXNjZWRHZW9tZXRyaWVzLmlzRW1wdHkoKSkgewpAQCAtMjMzMywxMyArMjM0
OCwxMyBAQCBWZWN0b3I8U2VsZWN0aW9uR2VvbWV0cnk+IFJlbmRlck9iamVjdDo6Y29sbGVjdFNl
bGVjdGlvbkdlb21ldHJpZXMoY29uc3QgU2ltcGxlUgogICAgICAgICAgICAgICAgIC8vIEZvciBp
Qm9va3MsIHRoZSBpbnRlcmlvciBsaW5lcyBtYXkgY3Jvc3MgbXVsdGlwbGUgaG9yaXpvbnRhbCBw
YWdlcy4KICAgICAgICAgICAgICAgICBpbnRlcmlvclVuaW9uUmVjdC51bml0ZShjdXJyZW50R2Vv
bWV0cnkucmVjdCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29h
bGVzY2VkR2VvbWV0cmllcy5hcHBlbmQoU2VsZWN0aW9uR2VvbWV0cnkoaW50ZXJpb3JVbmlvblJl
Y3QsIGN1cnJlbnRHZW9tZXRyeS5pc0hvcml6b250YWwoKSwgY3VycmVudEdlb21ldHJ5LnBhZ2VO
dW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGNvYWxlc2NlZEdlb21ldHJpZXMuYXBwZW5kKFNl
bGVjdGlvbkdlb21ldHJ5KHsgaW50ZXJpb3JVbmlvblJlY3QgfSwgU2VsZWN0aW9uUmVuZGVyaW5n
QmVoYXZpb3I6OkNvYWxlc2NlQm91bmRpbmdSZWN0cywgY3VycmVudEdlb21ldHJ5LmlzSG9yaXpv
bnRhbCgpLCBjdXJyZW50R2VvbWV0cnkucGFnZU51bWJlcigpKSk7CiAgICAgICAgICAgICAgICAg
aW50ZXJpb3JVbmlvblJlY3QgPSBjdXJyZW50R2VvbWV0cnkucmVjdCgpOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gUHJvY2Vzc2luZyBsYXN0IGxpbmUu
CiAgICAgICAgICAgICBpZiAoIWludGVyaW9yVW5pb25SZWN0LmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgICAgIGNvYWxlc2NlZEdlb21ldHJpZXMuYXBwZW5kKFNlbGVjdGlvbkdlb21ldHJ5KGlu
dGVyaW9yVW5pb25SZWN0LCBjdXJyZW50R2VvbWV0cnkuaXNIb3Jpem9udGFsKCksIGN1cnJlbnRH
ZW9tZXRyeS5wYWdlTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICBjb2FsZXNjZWRHZW9tZXRy
aWVzLmFwcGVuZChTZWxlY3Rpb25HZW9tZXRyeSh7IGludGVyaW9yVW5pb25SZWN0IH0sIFNlbGVj
dGlvblJlbmRlcmluZ0JlaGF2aW9yOjpDb2FsZXNjZUJvdW5kaW5nUmVjdHMsIGN1cnJlbnRHZW9t
ZXRyeS5pc0hvcml6b250YWwoKSwgY3VycmVudEdlb21ldHJ5LnBhZ2VOdW1iZXIoKSkpOwogICAg
ICAgICAgICAgICAgIGludGVyaW9yVW5pb25SZWN0ID0gSW50UmVjdCgpOwogICAgICAgICAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggOGFjYjEzYmZj
MzM4MmMxMTgzYTM0ZDlhZDBmOTNhZDk1MmRmMThlMi4uOWU2Yzc3NDQyZDhjNDJlOTljMjdhNDdl
YmQzNjEzNjcwZGExODRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cApAQCAtMzY5LDcgKzM2OSw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvbkdl
b21ldHJpZXMoVmVjdG9yPFNlbGVjdGlvbkdlb21ldHJ5PiYgcmVjdHMsIHVuCiAgICAgICAgIGJv
b2wgY29udGFpbnNFbmQgPSBydW4tPnN0YXJ0KCkgPD0gZW5kICYmIHJ1bi0+ZW5kKCkgPj0gZW5k
OwogCiAgICAgICAgIGJvb2wgaXNGaXhlZCA9IGZhbHNlOwotICAgICAgICBJbnRSZWN0IGFic1Jl
Y3QgPSBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyZWN0KSwgVXNlVHJhbnNmb3Jtcywg
JmlzRml4ZWQpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAgIGF1dG8gYWJzb2x1dGVR
dWFkID0gbG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocmVjdCksIFVzZVRyYW5zZm9ybXMs
ICZpc0ZpeGVkKTsKICAgICAgICAgYm9vbCBib3hJc0hvcml6b250YWwgPSAhaXM8U1ZHSW5saW5l
VGV4dEJveD4ocnVuLT5sZWdhY3lJbmxpbmVCb3goKSkgPyBydW4tPmlzSG9yaXpvbnRhbCgpIDog
IXN0eWxlKCkuaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCk7CiAgICAgICAgIC8vIElmIHRoZSBjb250
YWluaW5nIGJsb2NrIGlzIGFuIGlubGluZSBlbGVtZW50LCB3ZSB3YW50IHRvIGNoZWNrIHRoZSBp
bmxpbmVCb3hXcmFwcGVyIG9yaWVudGF0aW9uCiAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUg
b3JpZW50YXRpb24gb2YgdGhlIGJsb2NrLiBJbiB0aGlzIGNhc2Ugd2UgYWxzbyB1c2UgdGhlIGlu
bGluZUJveFdyYXBwZXIgdG8KQEAgLTM4MSw3ICszODEsOCBAQCB2b2lkIFJlbmRlclRleHQ6OmNv
bGxlY3RTZWxlY3Rpb25HZW9tZXRyaWVzKFZlY3RvcjxTZWxlY3Rpb25HZW9tZXRyeT4mIHJlY3Rz
LCB1bgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmVjdHMuYXBwZW5kKFNl
bGVjdGlvbkdlb21ldHJ5KGFic1JlY3QsIHJ1bi0+ZGlyZWN0aW9uKCksIGV4dGVudHNSZWN0Lngo
KSwgZXh0ZW50c1JlY3QubWF4WCgpLCBleHRlbnRzUmVjdC5tYXhZKCksIDAsIHJ1bi0+aXNMaW5l
QnJlYWsoKSwgaXNGaXJzdE9uTGluZSwgaXNMYXN0T25MaW5lLCBjb250YWluc1N0YXJ0LCBjb250
YWluc0VuZCwgYm94SXNIb3Jpem9udGFsLCBpc0ZpeGVkLCBjb250YWluaW5nQmxvY2stPmlzUnVi
eVRleHQoKSwgdmlldygpLnBhZ2VOdW1iZXJGb3JCbG9ja1Byb2dyZXNzaW9uT2Zmc2V0KGFic1Jl
Y3QueCgpKSkpOworICAgICAgICBhdXRvIGNhbkNvYWxlc2NlID0gSFRNTEVsZW1lbnQ6OmlzSW1h
Z2VPdmVybGF5VGV4dCh0ZXh0Tm9kZSgpKSA/IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpV
c2VJbmRpdmlkdWFsUXVhZHMgOiBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvcjo6Q29hbGVzY2VC
b3VuZGluZ1JlY3RzOworICAgICAgICByZWN0cy5hcHBlbmQoU2VsZWN0aW9uR2VvbWV0cnkoYWJz
b2x1dGVRdWFkLCBjYW5Db2FsZXNjZSwgcnVuLT5kaXJlY3Rpb24oKSwgZXh0ZW50c1JlY3QueCgp
LCBleHRlbnRzUmVjdC5tYXhYKCksIGV4dGVudHNSZWN0Lm1heFkoKSwgMCwgcnVuLT5pc0xpbmVC
cmVhaygpLCBpc0ZpcnN0T25MaW5lLCBpc0xhc3RPbkxpbmUsIGNvbnRhaW5zU3RhcnQsIGNvbnRh
aW5zRW5kLCBib3hJc0hvcml6b250YWwsIGlzRml4ZWQsIGNvbnRhaW5pbmdCbG9jay0+aXNSdWJ5
VGV4dCgpLCB2aWV3KCkucGFnZU51bWJlckZvckJsb2NrUHJvZ3Jlc3Npb25PZmZzZXQoYWJzb2x1
dGVRdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkueCgpKSkpOwogICAgIH0KIH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKaW5kZXgg
NTcwMTY1MGUyOTExNDAxNDlhNzAxMTZmNjBiNDVlNDUxOGJlNjRkYi4uOTFkOGIxOTNkMDZhMWEw
ZTgwZjNmNzY5MGNiYjNmYTdjNDNlMTNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC0xMzA0LDcgKzEzMDQsOCBAQCBib29sIEFyZ3Vt
ZW50Q29kZXI8UmVzb3VyY2VFcnJvcj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXNvdXJj
ZUVycm9yJiByZXNvdQogCiB2b2lkIEFyZ3VtZW50Q29kZXI8U2VsZWN0aW9uR2VvbWV0cnk+Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU2VsZWN0aW9uR2VvbWV0cnkmIHNlbGVjdGlv
bkdlb21ldHJ5KQogewotICAgIGVuY29kZXIgPDwgc2VsZWN0aW9uR2VvbWV0cnkucmVjdCgpOwor
ICAgIGVuY29kZXIgPDwgc2VsZWN0aW9uR2VvbWV0cnkucXVhZCgpOworICAgIGVuY29kZXIgPDwg
c2VsZWN0aW9uR2VvbWV0cnkuYmVoYXZpb3IoKTsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PHVpbnQzMl90PihzZWxlY3Rpb25HZW9tZXRyeS5kaXJlY3Rpb24oKSk7CiAgICAgZW5jb2RlciA8
PCBzZWxlY3Rpb25HZW9tZXRyeS5taW5YKCk7CiAgICAgZW5jb2RlciA8PCBzZWxlY3Rpb25HZW9t
ZXRyeS5tYXhYKCk7CkBAIC0xMzIxLDEwICsxMzIyLDE2IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxT
ZWxlY3Rpb25HZW9tZXRyeT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTZWxlY3Rp
b25HCiBPcHRpb25hbDxTZWxlY3Rpb25HZW9tZXRyeT4gQXJndW1lbnRDb2RlcjxTZWxlY3Rpb25H
ZW9tZXRyeT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIFNlbGVjdGlvbkdlb21l
dHJ5IHNlbGVjdGlvbkdlb21ldHJ5OwotICAgIEludFJlY3QgcmVjdDsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlY3QpKQorICAgIEZsb2F0UXVhZCBxdWFkOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocXVhZCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgc2VsZWN0aW9u
R2VvbWV0cnkuc2V0UXVhZChxdWFkKTsKKworICAgIE9wdGlvbmFsPFNlbGVjdGlvblJlbmRlcmlu
Z0JlaGF2aW9yPiBiZWhhdmlvcjsKKyAgICBkZWNvZGVyID4+IGJlaGF2aW9yOworICAgIGlmICgh
YmVoYXZpb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgc2VsZWN0aW9uR2Vv
bWV0cnkuc2V0UmVjdChyZWN0KTsKKyAgICBzZWxlY3Rpb25HZW9tZXRyeS5zZXRCZWhhdmlvcigq
YmVoYXZpb3IpOwogCiAgICAgdWludDMyX3QgZGlyZWN0aW9uOwogICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoZGlyZWN0aW9uKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IGU1NWQzZjQ4MDhjMjA4MTNmMTJi
NjZkNDc3MGE0ZDk0Zjg5ZjhhMGUuLmE1ZDNkZjY0NTBiOWQ4ZTIzZTk4MTExY2FkN2IyNmI0MDA1
MWM3NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMjQzLDcgKzI0MywxNiBAQCBpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFdLU2VsZWN0aW9uRHJhd2luZ0luZm8mIGEsIGNvbnN0IFdLU2VsZWN0
aW9uRHJhd2luZwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhLnNlbGVjdGlvbkdlb21ldHJpZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmIChhLnNlbGVjdGlvbkdlb21ldHJpZXNbaV0ucmVjdCgpICE9IGIuc2VsZWN0
aW9uR2VvbWV0cmllc1tpXS5yZWN0KCkpCisgICAgICAgICAgICBhdXRvJiBhR2VvbWV0cnkgPSBh
LnNlbGVjdGlvbkdlb21ldHJpZXNbaV07CisgICAgICAgICAgICBhdXRvJiBiR2VvbWV0cnkgPSBi
LnNlbGVjdGlvbkdlb21ldHJpZXNbaV07CisgICAgICAgICAgICBhdXRvIGJlaGF2aW9yID0gYUdl
b21ldHJ5LmJlaGF2aW9yKCk7CisgICAgICAgICAgICBpZiAoYmVoYXZpb3IgIT0gYkdlb21ldHJ5
LmJlaGF2aW9yKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAg
ICBpZiAoYmVoYXZpb3IgPT0gV2ViQ29yZTo6U2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OkNv
YWxlc2NlQm91bmRpbmdSZWN0cyAmJiBhR2VvbWV0cnkucmVjdCgpICE9IGJHZW9tZXRyeS5yZWN0
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoYmVo
YXZpb3IgPT0gV2ViQ29yZTo6U2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OlVzZUluZGl2aWR1
YWxRdWFkcyAmJiBhR2VvbWV0cnkucXVhZCgpICE9IGJHZW9tZXRyeS5xdWFkKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDc5NiwxMCArNDgw
NSwxMCBAQCAtICh2b2lkKXJlcGxhY2VSYW5nZTooVUlUZXh0UmFuZ2UgKilyYW5nZSB3aXRoVGV4
dDooTlNTdHJpbmcgKil0ZXh0CiB7CiB9CiAKLXN0YXRpYyBOU0FycmF5PFdLVGV4dFNlbGVjdGlv
blJlY3QgKj4gKndrVGV4dFNlbGVjdGlvblJlY3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxl
Y3Rpb25HZW9tZXRyeT4mIHJlY3RzKQorc3RhdGljIE5TQXJyYXk8V0tUZXh0U2VsZWN0aW9uUmVj
dCAqPiAqd2tUZXh0U2VsZWN0aW9uUmVjdHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlv
bkdlb21ldHJ5PiYgcmVjdHMsIENHRmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZU5TQXJyYXkocmVjdHMsIFtdIChhdXRvJiByZWN0KSB7Ci0gICAgICAgIHJldHVybiBhZG9w
dE5TKFtbV0tUZXh0U2VsZWN0aW9uUmVjdCBhbGxvY10gaW5pdFdpdGhTZWxlY3Rpb25HZW9tZXRy
eTpyZWN0XSk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocmVjdHMsIFtzY2FsZUZhY3Rvcl0g
KGF1dG8mIHJlY3QpIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXS1RleHRTZWxlY3Rpb25S
ZWN0IGFsbG9jXSBpbml0V2l0aFNlbGVjdGlvbkdlb21ldHJ5OnJlY3Qgc2NhbGVGYWN0b3I6c2Nh
bGVGYWN0b3JdKTsKICAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCkBAIC00ODUyLDcgKzQ4NjEs
NyBAQCAtIChVSVRleHRSYW5nZSAqKXNlbGVjdGVkVGV4dFJhbmdlCiAKICAgICBhdXRvIGNhcmV0
U3RhcnRSZWN0ID0gW3NlbGYgX3NjYWxlZENhcmV0UmVjdEZvclNlbGVjdGlvblN0YXJ0Ol9wYWdl
LT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuY2FyZXRSZWN0QXRTdGFydF07CiAgICAg
YXV0byBjYXJldEVuZFJlY3QgPSBbc2VsZiBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0aW9uRW5k
Ol9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuY2FyZXRSZWN0QXRFbmRdOwot
ICAgIGF1dG8gc2VsZWN0aW9uUmVjdHMgPSB3a1RleHRTZWxlY3Rpb25SZWN0cyhfcGFnZS0+ZWRp
dG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLnNlbGVjdGlvbkdlb21ldHJpZXMpOworICAgIGF1
dG8gc2VsZWN0aW9uUmVjdHMgPSB3a1RleHRTZWxlY3Rpb25SZWN0cyhfcGFnZS0+ZWRpdG9yU3Rh
dGUoKS5wb3N0TGF5b3V0RGF0YSgpLnNlbGVjdGlvbkdlb21ldHJpZXMsIHNlbGYuX2NvbnRlbnRa
b29tU2NhbGUpOwogICAgIGF1dG8gc2VsZWN0ZWRUZXh0TGVuZ3RoID0gZWRpdG9yU3RhdGUucG9z
dExheW91dERhdGEoKS5zZWxlY3RlZFRleHRMZW5ndGg7CiAgICAgX2NhY2hlZFNlbGVjdGVkVGV4
dFJhbmdlID0gW1dLVGV4dFJhbmdlIHRleHRSYW5nZVdpdGhTdGF0ZTohaGFzU2VsZWN0aW9uIGlz
UmFuZ2U6aXNSYW5nZSBpc0VkaXRhYmxlOmlzQ29udGVudEVkaXRhYmxlIHN0YXJ0UmVjdDpjYXJl
dFN0YXJ0UmVjdCBlbmRSZWN0OmNhcmV0RW5kUmVjdCBzZWxlY3Rpb25SZWN0czpzZWxlY3Rpb25S
ZWN0cyBzZWxlY3RlZFRleHRMZW5ndGg6c2VsZWN0ZWRUZXh0TGVuZ3RoXTsKICAgICByZXR1cm4g
X2NhY2hlZFNlbGVjdGVkVGV4dFJhbmdlLmdldCgpOwpAQCAtNDkwMiw3ICs0OTExLDcgQEAgLSAo
VUlUZXh0UmFuZ2UgKiltYXJrZWRUZXh0UmFuZ2UKICAgICBhdXRvIGlzQ29udGVudEVkaXRhYmxl
ID0gZWRpdG9yU3RhdGUuaXNDb250ZW50RWRpdGFibGU7CiAgICAgYXV0byBjYXJldFN0YXJ0UmVj
dCA9IFtzZWxmIF9zY2FsZWRDYXJldFJlY3RGb3JTZWxlY3Rpb25TdGFydDp1bnNjYWxlZENhcmV0
UmVjdEF0U3RhcnRdOwogICAgIGF1dG8gY2FyZXRFbmRSZWN0ID0gW3NlbGYgX3NjYWxlZENhcmV0
UmVjdEZvclNlbGVjdGlvbkVuZDp1bnNjYWxlZENhcmV0UmVjdEF0RW5kXTsKLSAgICBhdXRvIHNl
bGVjdGlvblJlY3RzID0gd2tUZXh0U2VsZWN0aW9uUmVjdHMocG9zdExheW91dERhdGEubWFya2Vk
VGV4dFJlY3RzKTsKKyAgICBhdXRvIHNlbGVjdGlvblJlY3RzID0gd2tUZXh0U2VsZWN0aW9uUmVj
dHMocG9zdExheW91dERhdGEubWFya2VkVGV4dFJlY3RzLCBzZWxmLl9jb250ZW50Wm9vbVNjYWxl
KTsKICAgICBhdXRvIHNlbGVjdGVkVGV4dExlbmd0aCA9IHBvc3RMYXlvdXREYXRhLm1hcmtlZFRl
eHQubGVuZ3RoKCk7CiAgICAgcmV0dXJuIFtXS1RleHRSYW5nZSB0ZXh0UmFuZ2VXaXRoU3RhdGU6
IWhhc0NvbXBvc2l0aW9uIGlzUmFuZ2U6aXNSYW5nZSBpc0VkaXRhYmxlOmlzQ29udGVudEVkaXRh
YmxlIHN0YXJ0UmVjdDpjYXJldFN0YXJ0UmVjdCBlbmRSZWN0OmNhcmV0RW5kUmVjdCBzZWxlY3Rp
b25SZWN0czpzZWxlY3Rpb25SZWN0cyBzZWxlY3RlZFRleHRMZW5ndGg6c2VsZWN0ZWRUZXh0TGVu
Z3RoXTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1RleHRT
ZWxlY3Rpb25SZWN0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tUZXh0U2VsZWN0
aW9uUmVjdC5oCmluZGV4IDk5YjIyYzU1MmZlZGU0NjdhNWMwOGI4Zjc2YzE0YWFjYjk1ZmMxZGUu
LjEwOTJmN2NlODExNWY1OWU3MTJmOTZjYjIwOGRlYzQzYWQyOWI0Y2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1RleHRTZWxlY3Rpb25SZWN0LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QuaApAQCAtMzQsNyAr
MzQsNyBAQCBjbGFzcyBTZWxlY3Rpb25HZW9tZXRyeTsKIEBpbnRlcmZhY2UgV0tUZXh0U2VsZWN0
aW9uUmVjdCA6IFVJVGV4dFNlbGVjdGlvblJlY3QKIAogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q0dSZWN0OihDR1JlY3QpcmVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNlbGVjdGlvbkdl
b21ldHJ5Oihjb25zdCBXZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRyeSYpc2VsZWN0aW9uUmVjdDsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNlbGVjdGlvbkdlb21ldHJ5Oihjb25zdCBXZWJDb3Jl
OjpTZWxlY3Rpb25HZW9tZXRyeSYpc2VsZWN0aW9uR2VvbWV0cnkgc2NhbGVGYWN0b3I6KENHRmxv
YXQpc2NhbGVGYWN0b3I7CiAKIEBlbmQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tUZXh0U2VsZWN0aW9uUmVjdC5tbQppbmRleCBlYzMwZDhiYjE3M2IwNmZiNTJmNmFj
ZDMxZjhjYWU0NDEyMTQwNzNmLi42ZjM5ZmZjMzNjODRiZjZkZjczZGI1NDA0YWQzOTgyMTI4NDZi
M2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tUZXh0U2VsZWN0
aW9uUmVjdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tUZXh0U2VsZWN0
aW9uUmVjdC5tbQpAQCAtMzAsMjUgKzMwLDk3IEBACiAKICNpbXBvcnQgPFdlYkNvcmUvU2VsZWN0
aW9uR2VvbWV0cnkuaD4KIAorQGludGVyZmFjZSBXS1RleHRTZWxlY3Rpb25SZWN0Q3VzdG9tSGFu
ZGxlSW5mbyA6IE5TT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGbG9hdFF1YWQ6KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UXVhZClxdWFkOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tU
ZXh0U2VsZWN0aW9uUmVjdEN1c3RvbUhhbmRsZUluZm8geworICAgIFdlYkNvcmU6OkZsb2F0UXVh
ZCBfcXVhZDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRmxvYXRRdWFkOihjb25zdCBX
ZWJDb3JlOjpGbG9hdFF1YWQpcXVhZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3F1YWQgPSBxdWFkOworICAgIHJldHVybiBz
ZWxmOworfQorCistIChDR1BvaW50KWJvdHRvbUxlZnQKK3sKKyAgICByZXR1cm4gX3F1YWQucDQo
KTsKK30KKworLSAoQ0dQb2ludCl0b3BMZWZ0Cit7CisgICAgcmV0dXJuIF9xdWFkLnAxKCk7Cit9
CisKKy0gKENHUG9pbnQpYm90dG9tUmlnaHQKK3sKKyAgICByZXR1cm4gX3F1YWQucDMoKTsKK30K
KworLSAoQ0dQb2ludCl0b3BSaWdodAoreworICAgIHJldHVybiBfcXVhZC5wMigpOworfQorCitA
ZW5kCisKIEBpbXBsZW1lbnRhdGlvbiBXS1RleHRTZWxlY3Rpb25SZWN0IHsKICAgICBXZWJDb3Jl
OjpTZWxlY3Rpb25HZW9tZXRyeSBfc2VsZWN0aW9uR2VvbWV0cnk7CisgICAgQ0dGbG9hdCBfc2Nh
bGVGYWN0b3I7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aENHUmVjdDooQ0dSZWN0KXJl
Y3QKIHsKICAgICBXZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRyeSBzZWxlY3Rpb25HZW9tZXRyeTsK
ICAgICBzZWxlY3Rpb25HZW9tZXRyeS5zZXRSZWN0KFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3Qo
cmVjdCkpOwotICAgIHJldHVybiBbc2VsZiBpbml0V2l0aFNlbGVjdGlvbkdlb21ldHJ5OldURk1v
dmUoc2VsZWN0aW9uR2VvbWV0cnkpXTsKKyAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhTZWxlY3Rp
b25HZW9tZXRyeTpXVEZNb3ZlKHNlbGVjdGlvbkdlb21ldHJ5KSBzY2FsZUZhY3RvcjoxXTsKIH0K
IAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2VsZWN0aW9uR2VvbWV0cnk6KGNvbnN0IFdlYkNv
cmU6OlNlbGVjdGlvbkdlb21ldHJ5JilzZWxlY3Rpb25SZWN0CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhTZWxlY3Rpb25HZW9tZXRyeTooY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uR2VvbWV0cnkm
KXNlbGVjdGlvbkdlb21ldHJ5IHNjYWxlRmFjdG9yOihDR0Zsb2F0KXNjYWxlRmFjdG9yCiB7CiAg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
X3NlbGVjdGlvbkdlb21ldHJ5ID0gc2VsZWN0aW9uUmVjdDsKKworICAgIF9zZWxlY3Rpb25HZW9t
ZXRyeSA9IHNlbGVjdGlvbkdlb21ldHJ5OworICAgIF9zY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9y
OwogICAgIHJldHVybiBzZWxmOwogfQogCistIChVSUJlemllclBhdGggKilfcGF0aAoreworICAg
IGlmIChfc2VsZWN0aW9uR2VvbWV0cnkuYmVoYXZpb3IoKSA9PSBXZWJDb3JlOjpTZWxlY3Rpb25S
ZW5kZXJpbmdCZWhhdmlvcjo6Q29hbGVzY2VCb3VuZGluZ1JlY3RzKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgYXV0byBzZWxlY3Rpb25Cb3VuZHMgPSBfc2VsZWN0aW9uR2VvbWV0cnkucmVj
dCgpOworICAgIGF1dG8gcXVhZCA9IF9zZWxlY3Rpb25HZW9tZXRyeS5xdWFkKCk7CisgICAgcXVh
ZC5zY2FsZShfc2NhbGVGYWN0b3IpOworICAgIHF1YWQubW92ZSgtc2VsZWN0aW9uQm91bmRzLngo
KSAqIF9zY2FsZUZhY3RvciwgLXNlbGVjdGlvbkJvdW5kcy55KCkgKiBfc2NhbGVGYWN0b3IpOwor
CisgICAgYXV0byByZXN1bHQgPSBbVUlCZXppZXJQYXRoIGJlemllclBhdGhdOworICAgIFtyZXN1
bHQgbW92ZVRvUG9pbnQ6cXVhZC5wMSgpXTsKKyAgICBbcmVzdWx0IGFkZExpbmVUb1BvaW50OnF1
YWQucDIoKV07CisgICAgW3Jlc3VsdCBhZGRMaW5lVG9Qb2ludDpxdWFkLnAzKCldOworICAgIFty
ZXN1bHQgYWRkTGluZVRvUG9pbnQ6cXVhZC5wNCgpXTsKKyAgICBbcmVzdWx0IGFkZExpbmVUb1Bv
aW50OnF1YWQucDEoKV07CisgICAgW3Jlc3VsdCBjbG9zZVBhdGhdOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKy0gKFdLVGV4dFNlbGVjdGlvblJlY3RDdXN0b21IYW5kbGVJbmZvICopX2N1c3Rv
bUhhbmRsZUluZm8KK3sKKyAgICBpZiAoX3NlbGVjdGlvbkdlb21ldHJ5LmJlaGF2aW9yKCkgPT0g
V2ViQ29yZTo6U2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OkNvYWxlc2NlQm91bmRpbmdSZWN0
cykKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGF1dG8gc2NhbGVkUXVhZCA9IF9zZWxlY3Rp
b25HZW9tZXRyeS5xdWFkKCk7CisgICAgc2NhbGVkUXVhZC5zY2FsZShfc2NhbGVGYWN0b3IpOwor
ICAgIHJldHVybiBbW1tXS1RleHRTZWxlY3Rpb25SZWN0Q3VzdG9tSGFuZGxlSW5mbyBhbGxvY10g
aW5pdFdpdGhGbG9hdFF1YWQ6c2NhbGVkUXVhZF0gYXV0b3JlbGVhc2VdOworfQorCiAtIChDR1Jl
Y3QpcmVjdAogewogICAgIHJldHVybiBfc2VsZWN0aW9uR2VvbWV0cnkucmVjdCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRl
eCBhZTVmZmY4Njc0ZjNiNjM5M2MxYTIzOWY0NmQ0Mzg0OTg3NmMyZmVkLi5kODFlMjE4YmU4YjFh
NzI1MWE4YmMzNzUwYjViNmVjNTljN2VhNTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjU4LDEwICsyNTgsMTYgQEAg
Ym9vbCBXZWJQYWdlOjpwbGF0Zm9ybU5lZWRzTGF5b3V0Rm9yRWRpdG9yU3RhdGUoY29uc3QgRnJh
bWUmIGZyYW1lKSBjb25zdAogICAgIHJldHVybiBuZWVkc0xheW91dDsKIH0KIAotc3RhdGljIHZv
aWQgY29udmVydENvbnRlbnRUb1Jvb3RWaWV3KGNvbnN0IEZyYW1lVmlldyYgdmlldywgVmVjdG9y
PFNlbGVjdGlvbkdlb21ldHJ5PiYgcmVjdHMpCitzdGF0aWMgdm9pZCBjb252ZXJ0Q29udGVudFRv
Um9vdFZpZXcoY29uc3QgRnJhbWVWaWV3JiB2aWV3LCBWZWN0b3I8U2VsZWN0aW9uR2VvbWV0cnk+
JiBnZW9tZXRyaWVzKQogewotICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKQotICAgICAgICBy
ZWN0LnNldFJlY3Qodmlldy5jb250ZW50c1RvUm9vdFZpZXcocmVjdC5yZWN0KCkpKTsKKyAgICBm
b3IgKGF1dG8mIGdlb21ldHJ5IDogZ2VvbWV0cmllcykgeworICAgICAgICBhdXRvIGNvbnZlcnRl
ZFF1YWQgPSBnZW9tZXRyeS5xdWFkKCk7CisgICAgICAgIGNvbnZlcnRlZFF1YWQuc2V0UDEodmll
dy5jb250ZW50c1RvUm9vdFZpZXcoY29udmVydGVkUXVhZC5wMSgpKSk7CisgICAgICAgIGNvbnZl
cnRlZFF1YWQuc2V0UDIodmlldy5jb250ZW50c1RvUm9vdFZpZXcoY29udmVydGVkUXVhZC5wMigp
KSk7CisgICAgICAgIGNvbnZlcnRlZFF1YWQuc2V0UDModmlldy5jb250ZW50c1RvUm9vdFZpZXco
Y29udmVydGVkUXVhZC5wMygpKSk7CisgICAgICAgIGNvbnZlcnRlZFF1YWQuc2V0UDQodmlldy5j
b250ZW50c1RvUm9vdFZpZXcoY29udmVydGVkUXVhZC5wNCgpKSk7CisgICAgICAgIGdlb21ldHJ5
LnNldFF1YWQoY29udmVydGVkUXVhZCk7CisgICAgfQogfQogCiB2b2lkIFdlYlBhZ2U6OmdldFBs
YXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0KSBjb25z
dApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDM2MjI0NTkwMGY2N2E4NzFmNWI0ODg5ZWQ5OTIxY2E1NjgyM2ZlM2QuLmE1YWY2
ZDAxMjllZjlhODFiMGE3OWY3MzI1ZmMxMjVhZWQ5YzZiODYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBA
QAorMjAyMS0wNC0yMCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbaU9TXSBUZXh0IHNlbGVjdGlvbiBpbiBpbWFnZSBvdmVybGF5cyBzaG91bGQgbm90
IGJlIGxpbWl0ZWQgdG8gcmVjdGlsaW5lYXIgcXVhZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDgzNworICAgICAgICA8cmRhcjovLzc2ODI5OTgx
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
IG5ldyBsYXlvdXQgdGVzdCB0byBleGVyY2lzZSB0aGUgbmV3IHNlbGVjdGlvbiByZW5kZXJpbmcg
YmVoYXZpb3IuCisKKyAgICAgICAgKiBmYXN0L2ltYWdlcy9pbWFnZS1leHRyYWN0aW9uL2lvcy9z
ZWxlY3Rpb24tcmVjdHMtaW4taW1hZ2Utb3ZlcmxheS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvaW1hZ2VzL2ltYWdlLWV4dHJhY3Rpb24vaW9zL3NlbGVjdGlvbi1yZWN0cy1p
bi1pbWFnZS1vdmVybGF5Lmh0bWw6IEFkZGVkLgorCiAyMDIxLTA0LTE5ICBEaWVnbyBQaW5vIEdh
cmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdIFVucmV2aWV3ZWQgdGVz
dCBnYXJkZW5pbmcuIEdhcmRlbmVkIGZsYWt5IGZhaWx1cmVzIGFmdGVyIHIyMjQ3OTEuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFnZS1leHRyYWN0aW9uL2lvcy9zZWxl
Y3Rpb24tcmVjdHMtaW4taW1hZ2Utb3ZlcmxheS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2ltYWdlcy9pbWFnZS1leHRyYWN0aW9uL2lvcy9zZWxlY3Rpb24tcmVjdHMtaW4taW1hZ2Ut
b3ZlcmxheS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTcyZDY0YzFmZTA1NTY4ODE3NGI1NmQ2
YzA5NjE0ZjFiOGFjMTJiNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaW1h
Z2VzL2ltYWdlLWV4dHJhY3Rpb24vaW9zL3NlbGVjdGlvbi1yZWN0cy1pbi1pbWFnZS1vdmVybGF5
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYgQEAKK1BBU1MgaW5pdGlhbFNlbGVjdGlvblJlY3Rz
Lmxlbmd0aCBpcyAxCitQQVNTIHNlbGVjdGlvblJlY3RzQWZ0ZXJTZWxlY3RpbmdBbGwubGVuZ3Ro
IGlzIDQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFnZS1leHRyYWN0aW9uL2lv
cy9zZWxlY3Rpb24tcmVjdHMtaW4taW1hZ2Utb3ZlcmxheS5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9pbWFnZXMvaW1hZ2UtZXh0cmFjdGlvbi9pb3Mvc2VsZWN0aW9uLXJlY3RzLWluLWltYWdlLW92
ZXJsYXkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTkwNzlmNGRlYWQ2Yzg4YjM3ZmQ1MjM4MTdkMDFmMzdk
OTcwYmNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2Ut
ZXh0cmFjdGlvbi9pb3Mvc2VsZWN0aW9uLXJlY3RzLWluLWltYWdlLW92ZXJsYXkuaHRtbApAQCAt
MCwwICsxLDY1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy91aS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHN0eWxl
PgoraW1nIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGxlZnQ6
IDA7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8aW1nIHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2dyZWVuLTQwMHg0MDAucG5nIj48L2ltZz4KKzxzY3JpcHQ+Citqc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKKworYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGFzeW5jICgpID0+IHsKKyAgICBsZXQg
aW1hZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJpbWciKTsKKyAgICBpbnRlcm5hbHMuaW5z
dGFsbEltYWdlT3ZlcmxheShpbWFnZSwgWworICAgICAgICB7CisgICAgICAgICAgICB0ZXh0OiAi
b25lIiwKKyAgICAgICAgICAgIHRvcExlZnQ6IG5ldyBET01Qb2ludFJlYWRPbmx5KDAuMSwgMC4y
NSksCisgICAgICAgICAgICB0b3BSaWdodDogbmV3IERPTVBvaW50UmVhZE9ubHkoMC4yNSwgMC4x
KSwKKyAgICAgICAgICAgIGJvdHRvbVJpZ2h0OiBuZXcgRE9NUG9pbnRSZWFkT25seSgwLjM1LCAw
LjIpLAorICAgICAgICAgICAgYm90dG9tTGVmdDogbmV3IERPTVBvaW50UmVhZE9ubHkoMC4yLCAw
LjM1KQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB0ZXh0OiAidHdvIiwKKyAg
ICAgICAgICAgIHRvcExlZnQ6IG5ldyBET01Qb2ludFJlYWRPbmx5KDAuMywgMC40NSksCisgICAg
ICAgICAgICB0b3BSaWdodDogbmV3IERPTVBvaW50UmVhZE9ubHkoMC40NSwgMC4zKSwKKyAgICAg
ICAgICAgIGJvdHRvbVJpZ2h0OiBuZXcgRE9NUG9pbnRSZWFkT25seSgwLjU1LCAwLjQpLAorICAg
ICAgICAgICAgYm90dG9tTGVmdDogbmV3IERPTVBvaW50UmVhZE9ubHkoMC40LCAwLjU1KQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB0ZXh0OiAidGhyZWUiLAorICAgICAgICAg
ICAgdG9wTGVmdDogbmV3IERPTVBvaW50UmVhZE9ubHkoMC41LCAwLjY1KSwKKyAgICAgICAgICAg
IHRvcFJpZ2h0OiBuZXcgRE9NUG9pbnRSZWFkT25seSgwLjY1LCAwLjUpLAorICAgICAgICAgICAg
Ym90dG9tUmlnaHQ6IG5ldyBET01Qb2ludFJlYWRPbmx5KDAuNzUsIDAuNiksCisgICAgICAgICAg
ICBib3R0b21MZWZ0OiBuZXcgRE9NUG9pbnRSZWFkT25seSgwLjYsIDAuNzUpCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHQ6ICJmb3VyIiwKKyAgICAgICAgICAgIHRvcExl
ZnQ6IG5ldyBET01Qb2ludFJlYWRPbmx5KDAuNywgMC44NSksCisgICAgICAgICAgICB0b3BSaWdo
dDogbmV3IERPTVBvaW50UmVhZE9ubHkoMC44NSwgMC43KSwKKyAgICAgICAgICAgIGJvdHRvbVJp
Z2h0OiBuZXcgRE9NUG9pbnRSZWFkT25seSgwLjk1LCAwLjgpLAorICAgICAgICAgICAgYm90dG9t
TGVmdDogbmV3IERPTVBvaW50UmVhZE9ubHkoMC44LCAwLjk1KQorICAgICAgICB9CisgICAgXSk7
CisKKyAgICBhd2FpdCBVSUhlbHBlci5sb25nUHJlc3NBdFBvaW50KDkwLCA5MCk7CisgICAgaW5p
dGlhbFNlbGVjdGlvblJlY3RzID0gYXdhaXQgVUlIZWxwZXIud2FpdEZvclNlbGVjdGlvblRvQXBw
ZWFyKCk7CisgICAgc2hvdWxkQmUoImluaXRpYWxTZWxlY3Rpb25SZWN0cy5sZW5ndGgiLCAiMSIp
OworCisgICAgdGVzdFJ1bm5lci5leGVjQ29tbWFuZCgiU2VsZWN0QWxsIik7CisgICAgYXdhaXQg
VUlIZWxwZXIuZW5zdXJlUHJlc2VudGF0aW9uVXBkYXRlKCk7CisgICAgc2VsZWN0aW9uUmVjdHNB
ZnRlclNlbGVjdGluZ0FsbCA9IGF3YWl0IFVJSGVscGVyLmdldFVJU2VsZWN0aW9uVmlld1JlY3Rz
KCk7CisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJlY3RzQWZ0ZXJTZWxlY3RpbmdBbGwubGVuZ3Ro
IiwgIjQiKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426714</attachid>
            <date>2021-04-21 11:08:40 -0700</date>
            <delta_ts>2021-04-21 13:11:42 -0700</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-224837-20210421110839.patch</filename>
            <type>text/plain</type>
            <size>42739</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZlMDI1MjMzMWNkZjRj
Yjg3MjNmYzBhNmFmMWY5NDVhNDFiMjQ3Zi4uZDgwYzU3MzU2NzU3NjkxMjg2OThlMWU4YWQyZDA3
YmQxNmU3MWQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDIxLTA0LTIxICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFRleHQg
c2VsZWN0aW9uIGluIGltYWdlIG92ZXJsYXlzIHNob3VsZCBub3QgYmUgbGltaXRlZCB0byByZWN0
aWxpbmVhciBxdWFkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI0ODM3CisgICAgICAgIDxyZGFyOi8vNzY4Mjk5ODE+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAgICBSZWZhY3RvciB0aGUgaU9TLXNwZWNpZmljIGBX
ZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRyeWAgc3VjaCB0aGF0IGl0IGlzIGJhY2tlZCBieSBhIGBG
bG9hdFF1YWRgIGluc3RlYWQgb2YgYW4KKyAgICAgICAgYEludFJlY3RgLCBhbmQgYWRkaXRpb25h
bGx5IHN1cHBvcnQgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHNlbGVjdGlvbiBnZW9tZXRy
eSBzaG91bGQgcmVuZGVyIGFzIGluZGl2aWR1YWwKKyAgICAgICAgcXVhZHMsIGluc3RlYWQgb2Yg
YWxsb3dpbmcgYWRqYWNlbnQgcmVjdHMgdG8gYmUgY29hbGVzY2VkIGJhc2VkIG9uIGVhY2ggcmVj
dHMnIGVuY2xvc2luZyBib3VuZHMuCisKKyAgICAgICAgU2VlIGNvbW1lbnRzIGJlbG93IGZvciBt
b3JlIGluZm9ybWF0aW9uLgorCisgICAgICAgIFRlc3Q6IGZhc3QvaW1hZ2VzL2ltYWdlLWV4dHJh
Y3Rpb24vaW9zL3NlbGVjdGlvbi1yZWN0cy1pbi1pbWFnZS1vdmVybGF5Lmh0bWwKKworICAgICAg
ICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6
OnNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50
Lmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvbkdlb21ldHJ5OjpTZWxlY3Rpb25HZW9tZXRyeSk6CisKKyAg
ICAgICAgQ2hhbmdlIHRoZXNlIGNvbnN0cnVjdG9ycyB0byB0YWtlIGBGbG9hdFF1YWRgIGluc3Rl
YWQgb2YgYW4gZW5jbG9zaW5nIGJvdW5kaW5nIGJveCBvZiBhIHF1YWQuIFJlZmVyIHRvIGNhbGwK
KyAgICAgICAgc2l0ZXMgYmVsb3cuCisKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkdlb21l
dHJ5OjpzZXRMb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRy
eTo6c2V0TG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkdlb21ldHJ5
OjpzZXRMb2dpY2FsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkdlb21ldHJ5Ojpz
ZXRMb2dpY2FsSGVpZ2h0KToKKworICAgICAgICBBZGp1c3QgdGhlc2UgZm91ciBzZXR0ZXJzIHNv
IHRoYXQgdGhleSBhdXRvbWF0aWNhbGx5IGluZmxhdGUgdGhlIHNlbGVjdGlvbiBxdWFkIHRvIHRo
ZSBxdWFkJ3MgZW5jbG9zaW5nIGJvdW5kcworICAgICAgICBiZWZvcmUgY2hhbmdpbmcgYW55IG9m
IHRoZSBkaW1lbnNpb25zIG9mIHRoZSByZWN0LiBOb3RlIHRoYXQgaW4gcHJhY3RpY2UsIHRoZXNl
IG1ldGhvZHMgYXJlIG9ubHkgdXNlZCBieSBjb2RlCisgICAgICAgIHRoYXQgYXR0ZW1wdHMgdG8g
Y29hbGVzY2UgYWRqYWNlbnQgc2VsZWN0aW9uIGdlb21ldHJpZXMsIGluIHdoaWNoIGNhc2Ugd2Ug
c2hvdWxkbid0IGJlIHJlbmRlcmluZyBub24tcmVjdGlsaW5lYXIKKyAgICAgICAgcXVhZHMgYW55
d2F5cy4KKworICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uR2VvbWV0cnk6OnJlY3QgY29uc3Qp
OgorCisgICAgICAgIFRoaXMgbWV0aG9kIG5vdyBjb21wdXRlcyB0aGUgZW5jbG9zaW5nIGJvdW5k
aW5nIHJlY3Qgb2YgdGhlIHNlbGVjdGlvbiBxdWFkLiBTaW5jZSB0aGlzIGNhbiBiZSBjYWxsZWQg
bWFueSB0aW1lcworICAgICAgICBmb3IgYSBzaW5nbGUgc2VsZWN0aW9uIGdlb21ldHJ5LCB3ZSBj
YWNoZSB0aGUgZW5jbG9zaW5nIGJvdW5kcyBpbiBgbV9jYWNoZWRFbmNsb3NpbmdSZWN0YCB0byBh
dm9pZCByZXBlYXRlZAorICAgICAgICBib3VuZGluZyBib3ggY29tcHV0YXRpb24uCisKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvbkdlb21ldHJ5OjpzZXRRdWFkKToKKworICAgICAgICBTZXQg
dGhlIHNlbGVjdGlvbiBxdWFkLCBhbmQgaW52YWxpZGF0ZSB0aGUgZW5jbG9zaW5nIGJvdW5kaW5n
IHJlY3QuCisKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkdlb21ldHJ5OjpzZXRSZWN0KToK
KworICAgICAgICBTaW5jZSB3ZSdyZSBhbHJlYWR5IHNldHRpbmcgdGhlIHF1YWQgZnJvbSBhbiBg
SW50UmVjdGAsIHdlIGNhbiBnbyBhaGVhZCBhbmQgc2V0IHRoZSBjYWNoZWQgZW5jbG9zaW5nIHJl
Y3QgYXQgdGhlCisgICAgICAgIHNhbWUgdGltZSB0byBhdm9pZCBjb21wdXRpbmcgaXQgYWdhaW4g
aW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAg
ICogcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5Lmg6CisKKyAgICAgICAgQWRkIGEgZmV3
IG5ldyBtZW1iZXJzIHRvIGBTZWxlY3Rpb25HZW9tZXRyeWAuIEluc3RlYWQgb2YgbWFpbnRhaW5p
bmcgYW4gYEludFJlY3RgLCBzdG9yZSBhIGBGbG9hdFJlY3RgIGluCisgICAgICAgIGBtX3F1YWRg
LiBBZGRpdGlvbmFsbHksIGFkZCBhIG5ldyBlbnVtIGRlc2NyaWJpbmcgaG93IHRoZSBgU2VsZWN0
aW9uR2VvbWV0cnlgIHNob3VsZCBiZWhhdmUuIFRoaXMgZW51bSBvbmx5IGhhcworICAgICAgICB0
d28gdmFsdWVzOiBgQ29hbGVzY2VCb3VuZGluZ1JlY3RzYCwgaW5kaWNhdGluZyB0aGF0IGFkamFj
ZW50IHNlbGVjdGlvbiBnZW9tZXRyaWVzIHNob3VsZCBiZSBjb2FsZXNjZWQgYmFzZWQgb24KKyAg
ICAgICAgdGhlIGVuY2xvc2luZyBib3VuZGluZyByZWN0cyBvZiB0aGVpciBxdWFkcywgYW5kIGBV
c2VJbmRpdmlkdWFsUXVhZHNgLCBpbmRpY2F0aW5nIHRoYXQgZWFjaCBxdWFkIHNob3VsZCBiZQor
ICAgICAgICByZW5kZXJlZCBpbmRpdmlkdWFsbHkuCisKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvbkdlb21ldHJ5OjpxdWFkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkdl
b21ldHJ5Ojpsb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25H
ZW9tZXRyeTo6bG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlv
bkdlb21ldHJ5Ojpsb2dpY2FsVG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlv
bkdlb21ldHJ5Ojpsb2dpY2FsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvbkdlb21ldHJ5OjpiZWhhdmlvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rp
b25HZW9tZXRyeTo6c2V0QmVoYXZpb3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uR2Vv
bWV0cnk6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
R2VvbWV0cnk6OnNldFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6Y29sbGVjdFNlbGVjdGlv
bkdlb21ldHJpZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJyZWFrOjpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0
cmllcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25HZW9tZXRyaWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmFkanVzdExpbmVIZWlnaHRPZlNlbGVjdGlvbkdlb21ldHJpZXMpOgorCisg
ICAgICAgIFdoZW4gY29sbGVjdGluZyBzZWxlY3Rpb24gZ2VvbWV0cnkgZnJvbSByZW5kZXJlcnMs
IGF2b2lkIGNvYWxlc2Npbmcgc2VsZWN0aW9uIGdlb21ldHJ5IHdoZW4gdGhlCisgICAgICAgIGBT
ZWxlY3Rpb25HZW9tZXRyeWAgaGFzIGBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvcjo6VXNlSW5k
aXZpZHVhbFF1YWRzYC4KKworICAgICAgICAoV2ViQ29yZTo6Y29hbGVzY2VTZWxlY3Rpb25HZW9t
ZXRyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlv
bkdlb21ldHJpZXNJbnRlcm5hbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvbkdlb21ldHJp
ZXMpOgorCiAyMDIxLTA0LTIxICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AZ25vbWUu
b3JnPgogCiAgICAgICAgIFVSTDo6VVJMKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIHRyaWdn
ZXJzIC1XdW5pbml0aWFsaXplZCB3YXJuaW5ncyB3aXRoIEdDQyAxMQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBhYWE0
Mjg2Y2M2NzkwNGMyZGZkMTExYjYyNWI5OWMwYmVhNjJhZDc2Li4wNzZiZjc5YzQyNTgwOTRhN2M5
MDNmYjc4NmE4NDQ3ZjJkNTVhZWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIxLTA0
LTIxICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtp
T1NdIFRleHQgc2VsZWN0aW9uIGluIGltYWdlIG92ZXJsYXlzIHNob3VsZCBub3QgYmUgbGltaXRl
ZCB0byByZWN0aWxpbmVhciBxdWFkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI0ODM3CisgICAgICAgIDxyZGFyOi8vNzY4Mjk5ODE+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAgICBTZWUgV2ViQ29yZSBDaGFuZ2VM
b2cgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFNlbGVjdGlvbkdlb21ldHJ5
Pjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTZWxlY3Rpb25HZW9tZXRy
eT46OmRlY29kZSk6CisKKyAgICAgICAgRW5jb2RlIHRoZSBgU2VsZWN0aW9uR2VvbWV0cnlgIGJ5
IHNlcmlhbGl6aW5nIGEgYEZsb2F0UXVhZGAgaW5zdGVhZCBvZiBhbiBlbmNsb3NpbmcgcmVjdC4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgor
ICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBz
ZWxlY3RlZFRleHRSYW5nZV0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IG1hcmtlZFRleHRS
YW5nZV0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tUZXh0U2VsZWN0aW9uUmVjdC5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tUZXh0U2VsZWN0aW9uUmVjdC5tbToKKyAgICAgICAg
KC1bV0tUZXh0U2VsZWN0aW9uUmVjdEN1c3RvbUhhbmRsZUluZm8gaW5pdFdpdGhGbG9hdFF1YWQ6
XSk6CisgICAgICAgICgtW1dLVGV4dFNlbGVjdGlvblJlY3RDdXN0b21IYW5kbGVJbmZvIGJvdHRv
bUxlZnRdKToKKyAgICAgICAgKC1bV0tUZXh0U2VsZWN0aW9uUmVjdEN1c3RvbUhhbmRsZUluZm8g
dG9wTGVmdF0pOgorICAgICAgICAoLVtXS1RleHRTZWxlY3Rpb25SZWN0Q3VzdG9tSGFuZGxlSW5m
byBib3R0b21SaWdodF0pOgorICAgICAgICAoLVtXS1RleHRTZWxlY3Rpb25SZWN0Q3VzdG9tSGFu
ZGxlSW5mbyB0b3BSaWdodF0pOgorICAgICAgICAoLVtXS1RleHRTZWxlY3Rpb25SZWN0IGluaXRX
aXRoQ0dSZWN0Ol0pOgorICAgICAgICAoLVtXS1RleHRTZWxlY3Rpb25SZWN0IGluaXRXaXRoU2Vs
ZWN0aW9uR2VvbWV0cnk6c2NhbGVGYWN0b3I6XSk6CisgICAgICAgICgtW1dLVGV4dFNlbGVjdGlv
blJlY3QgX3BhdGhdKToKKyAgICAgICAgKC1bV0tUZXh0U2VsZWN0aW9uUmVjdCBfY3VzdG9tSGFu
ZGxlSW5mb10pOgorCisgICAgICAgIEltcGxlbWVudCBTUEkgbWV0aG9kcyBvbiBgVUlUZXh0U2Vs
ZWN0aW9uUmVjdGAgdG8gcmVuZGVyIHRleHQgc2VsZWN0aW9uIFVJIHVzaW5nIHF1YWRzIGluc3Rl
YWQgb2YgcmVjdHMuCisKKyAgICAgICAgKC1bV0tUZXh0U2VsZWN0aW9uUmVjdCBpbml0V2l0aFNl
bGVjdGlvbkdlb21ldHJ5Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29udmVydENvbnRlbnRUb1Jv
b3RWaWV3KToKKwogMjAyMS0wNC0yMSAgQWRpdHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IHRoZSB3YXRjaE9TIGJ1aWxkIGFmdGVyIHIyNzYzMjUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggNWQxMDI2YjhmZDRkNDYzNzI4YTRhODg1Njc3
YzlkY2MzNzEzYzBiNi4uNTI0Yzg2YzE0OWZlOTBhNWY4YWY3OGM0OThhMmMwMmQwMWE1OGYyZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTgyLDYgKzgyLDEwIEBACiAjaW5j
bHVkZSAiSW1hZ2VFeHRyYWN0aW9uUmVzdWx0LmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisjaW5jbHVkZSAiU2VsZWN0aW9uR2VvbWV0cnkuaCIKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChIVE1MRWxlbWVu
dCk7CkBAIC0xMzcyLDYgKzEzNzYsMTUgQEAgdm9pZCBIVE1MRWxlbWVudDo6dXBkYXRlV2l0aElt
YWdlRXh0cmFjdGlvblJlc3VsdChJbWFnZUV4dHJhY3Rpb25SZXN1bHQmJiByZXN1bHQKIAogI2Vu
ZGlmIC8vIEVOQUJMRShJTUFHRV9FWFRSQUNUSU9OKQogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKworU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IgSFRNTEVsZW1lbnQ6OnNlbGVjdGlvblJl
bmRlcmluZ0JlaGF2aW9yKGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIGlzSW1hZ2VP
dmVybGF5VGV4dChub2RlKSA/IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpVc2VJbmRpdmlk
dWFsUXVhZHMgOiBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvcjo6Q29hbGVzY2VCb3VuZGluZ1Jl
Y3RzOworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCmlu
ZGV4IGFjMWIxNWZkMTAzZDU5MTNiNWM0MTBhMzYyZmQ5ZjIxM2IyODAxZmQuLjk3ZTczNTdjNDBi
OTdlYTQ4YzhmOWRiODllMzJiY2QzNDZjZGVkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmgKQEAgLTQzLDYgKzQzLDEwIEBAIHN0cnVjdCBJbWFnZUV4dHJhY3Rpb25SZXN1bHQ7CiAKIGVu
dW0gY2xhc3MgRW50ZXJLZXlIaW50IDogdWludDhfdDsKIAorI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCitlbnVtIGNsYXNzIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yIDogdWludDhfdDsKKyNl
bmRpZgorCiBjbGFzcyBIVE1MRWxlbWVudCA6IHB1YmxpYyBTdHlsZWRFbGVtZW50IHsKICAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKEhUTUxFbGVtZW50KTsKIHB1YmxpYzoKQEAgLTE0MCw2ICsx
NDQsMTAgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlV2l0aEltYWdl
RXh0cmFjdGlvblJlc3VsdChJbWFnZUV4dHJhY3Rpb25SZXN1bHQmJik7CiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3RhdGljIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2
aW9yIHNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yKGNvbnN0IE5vZGUqKTsKKyNlbmRpZgorCiBw
cm90ZWN0ZWQ6CiAgICAgSFRNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQmLCBDb25zdHJ1Y3Rpb25UeXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5jcHAKaW5kZXggZGFlOTNjYzA1ZGQwODk5NzNj
NGE3ZTY5YTUyZGRiMTQzMzUxMDFjMi4uM2RkOTdjMTNlZDc0ZDBhMjdiNmIzZjExODdjZGU4YTQw
N2NjMWMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlv
bkdlb21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2VsZWN0aW9u
R2VvbWV0cnkuY3BwCkBAIC0yNiwyMSArMjYsMjMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTZWxlY3Rpb25HZW9tZXRyeS5oIgogCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVNlbGVjdGlvbkdlb21ldHJ5OjpTZWxlY3Rpb25HZW9tZXRyeShjb25zdCBJbnRSZWN0JiByZWN0
LCBib29sIGlzSG9yaXpvbnRhbCwgaW50IHBhZ2VOdW1iZXIpCi0gICAgOiBtX3JlY3QocmVjdCkK
LSAgICAsIG1fZGlyZWN0aW9uKFRleHREaXJlY3Rpb246OkxUUikKK1NlbGVjdGlvbkdlb21ldHJ5
OjpTZWxlY3Rpb25HZW9tZXRyeShjb25zdCBGbG9hdFF1YWQmIHF1YWQsIFNlbGVjdGlvblJlbmRl
cmluZ0JlaGF2aW9yIGJlaGF2aW9yLCBib29sIGlzSG9yaXpvbnRhbCwgaW50IHBhZ2VOdW1iZXIp
CisgICAgOiBtX3F1YWQocXVhZCkKKyAgICAsIG1fYmVoYXZpb3IoYmVoYXZpb3IpCiAgICAgLCBt
X2lzSG9yaXpvbnRhbChpc0hvcml6b250YWwpCiAgICAgLCBtX3BhZ2VOdW1iZXIocGFnZU51bWJl
cikKIHsKIH0KIAogLy8gRklYTUU6IFdlIHNob3VsZCBtb3ZlIHNvbWUgb2YgdGhlc2UgYXJndW1l
bnRzIHRvIGFuIGF1eGlsbGFyeSBzdHJ1Y3QuCi1TZWxlY3Rpb25HZW9tZXRyeTo6U2VsZWN0aW9u
R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcmVjdCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGlu
dCBtaW5YLCBpbnQgbWF4WCwgaW50IG1heFksIGludCBsaW5lTnVtYmVyLCBib29sIGlzTGluZUJy
ZWFrLCBib29sIGlzRmlyc3RPbkxpbmUsIGJvb2wgaXNMYXN0T25MaW5lLCBib29sIGNvbnRhaW5z
U3RhcnQsIGJvb2wgY29udGFpbnNFbmQsIGJvb2wgaXNIb3Jpem9udGFsLCBib29sIGlzSW5GaXhl
ZFBvc2l0aW9uLCBib29sIGlzUnVieVRleHQsIGludCBwYWdlTnVtYmVyKQotICAgIDogbV9yZWN0
KHJlY3QpCitTZWxlY3Rpb25HZW9tZXRyeTo6U2VsZWN0aW9uR2VvbWV0cnkoY29uc3QgRmxvYXRR
dWFkJiBxdWFkLCBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvciBiZWhhdmlvciwgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24sIGludCBtaW5YLCBpbnQgbWF4WCwgaW50IG1heFksIGludCBsaW5lTnVt
YmVyLCBib29sIGlzTGluZUJyZWFrLCBib29sIGlzRmlyc3RPbkxpbmUsIGJvb2wgaXNMYXN0T25M
aW5lLCBib29sIGNvbnRhaW5zU3RhcnQsIGJvb2wgY29udGFpbnNFbmQsIGJvb2wgaXNIb3Jpem9u
dGFsLCBib29sIGlzSW5GaXhlZFBvc2l0aW9uLCBib29sIGlzUnVieVRleHQsIGludCBwYWdlTnVt
YmVyKQorICAgIDogbV9xdWFkKHF1YWQpCisgICAgLCBtX2JlaGF2aW9yKGJlaGF2aW9yKQogICAg
ICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgICwgbV9taW5YKG1pblgpCiAgICAgLCBtX21h
eFgobWF4WCkKQEAgLTYwLDM0ICs2Miw2MSBAQCBTZWxlY3Rpb25HZW9tZXRyeTo6U2VsZWN0aW9u
R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcmVjdCwgVGV4dERpcmVjdGlvbiBkaXJlY3RpbwogCiB2
b2lkIFNlbGVjdGlvbkdlb21ldHJ5OjpzZXRMb2dpY2FsTGVmdChpbnQgbGVmdCkKIHsKKyAgICBh
dXRvIHJlY3QgPSB0aGlzLT5yZWN0KCk7CiAgICAgaWYgKG1faXNIb3Jpem9udGFsKQotICAgICAg
ICBtX3JlY3Quc2V0WChsZWZ0KTsKKyAgICAgICAgcmVjdC5zZXRYKGxlZnQpOwogICAgIGVsc2UK
LSAgICAgICAgbV9yZWN0LnNldFkobGVmdCk7CisgICAgICAgIHJlY3Quc2V0WShsZWZ0KTsKKyAg
ICBzZXRSZWN0KHJlY3QpOwogfQogCiB2b2lkIFNlbGVjdGlvbkdlb21ldHJ5OjpzZXRMb2dpY2Fs
V2lkdGgoaW50IHdpZHRoKQogeworICAgIGF1dG8gcmVjdCA9IHRoaXMtPnJlY3QoKTsKICAgICBp
ZiAobV9pc0hvcml6b250YWwpCi0gICAgICAgIG1fcmVjdC5zZXRXaWR0aCh3aWR0aCk7CisgICAg
ICAgIHJlY3Quc2V0V2lkdGgod2lkdGgpOwogICAgIGVsc2UKLSAgICAgICAgbV9yZWN0LnNldEhl
aWdodCh3aWR0aCk7CisgICAgICAgIHJlY3Quc2V0SGVpZ2h0KHdpZHRoKTsKKyAgICBzZXRSZWN0
KHJlY3QpOwogfQogCiB2b2lkIFNlbGVjdGlvbkdlb21ldHJ5OjpzZXRMb2dpY2FsVG9wKGludCB0
b3ApCiB7CisgICAgYXV0byByZWN0ID0gdGhpcy0+cmVjdCgpOwogICAgIGlmIChtX2lzSG9yaXpv
bnRhbCkKLSAgICAgICAgbV9yZWN0LnNldFkodG9wKTsKKyAgICAgICAgcmVjdC5zZXRZKHRvcCk7
CiAgICAgZWxzZQotICAgICAgICBtX3JlY3Quc2V0WCh0b3ApOworICAgICAgICByZWN0LnNldFgo
dG9wKTsKKyAgICBzZXRSZWN0KHJlY3QpOwogfQogCiB2b2lkIFNlbGVjdGlvbkdlb21ldHJ5Ojpz
ZXRMb2dpY2FsSGVpZ2h0KGludCBoZWlnaHQpCiB7CisgICAgYXV0byByZWN0ID0gdGhpcy0+cmVj
dCgpOwogICAgIGlmIChtX2lzSG9yaXpvbnRhbCkKLSAgICAgICAgbV9yZWN0LnNldEhlaWdodCho
ZWlnaHQpOworICAgICAgICByZWN0LnNldEhlaWdodChoZWlnaHQpOwogICAgIGVsc2UKLSAgICAg
ICAgbV9yZWN0LnNldFdpZHRoKGhlaWdodCk7CisgICAgICAgIHJlY3Quc2V0V2lkdGgoaGVpZ2h0
KTsKKyAgICBzZXRSZWN0KHJlY3QpOworfQorCitJbnRSZWN0IFNlbGVjdGlvbkdlb21ldHJ5Ojpy
ZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY2FjaGVkRW5jbG9zaW5nUmVjdCkKKyAgICAgICAg
bV9jYWNoZWRFbmNsb3NpbmdSZWN0ID0gbV9xdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Cisg
ICAgcmV0dXJuICptX2NhY2hlZEVuY2xvc2luZ1JlY3Q7Cit9CisKK3ZvaWQgU2VsZWN0aW9uR2Vv
bWV0cnk6OnNldFF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQoreworICAgIG1fcXVhZCA9IHF1
YWQ7CisgICAgbV9jYWNoZWRFbmNsb3NpbmdSZWN0LnJlc2V0KCk7Cit9CisKK3ZvaWQgU2VsZWN0
aW9uR2VvbWV0cnk6OnNldFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX3F1YWQg
PSBGbG9hdFF1YWQgeyByZWN0IH07CisgICAgbV9jYWNoZWRFbmNsb3NpbmdSZWN0ID0gcmVjdDsK
IH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiBzdHJlYW0sIFNlbGVjdGlv
bkdlb21ldHJ5IHJlY3QpCkBAIC05NSw3ICsxMjQsNyBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHN0cmVhbSwgU2VsZWN0aW9uR2VvbWV0cnkgcmVjdCkKICAgICBUZXh0U3Ry
ZWFtOjpHcm91cFNjb3BlIGdyb3VwKHN0cmVhbSk7CiAgICAgc3RyZWFtIDw8ICJzZWxlY3Rpb24g
Z2VvbWV0cnkiOwogCi0gICAgc3RyZWFtLmR1bXBQcm9wZXJ0eSgicmVjdCIsIHJlY3QucmVjdCgp
KTsKKyAgICBzdHJlYW0uZHVtcFByb3BlcnR5KCJxdWFkIiwgcmVjdC5xdWFkKCkpOwogICAgIHN0
cmVhbS5kdW1wUHJvcGVydHkoImRpcmVjdGlvbiIsIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24ocmVj
dC5kaXJlY3Rpb24oKSkgPyAibHRyIiA6ICJydGwiKTsKIAogICAgIHN0cmVhbS5kdW1wUHJvcGVy
dHkoIm1pbi14IiwgcmVjdC5taW5YKCkpOwpAQCAtMTI1LDYgKzE1NCw5IEBAIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgc3RyZWFtLCBTZWxlY3Rpb25HZW9tZXRyeSByZWN0KQog
ICAgIGlmIChyZWN0LmlzUnVieVRleHQoKSkKICAgICAgICAgc3RyZWFtLmR1bXBQcm9wZXJ0eSgi
aXMgcnVieSB0ZXh0IiwgdHJ1ZSk7CiAKKyAgICBpZiAocmVjdC5iZWhhdmlvcigpID09IFNlbGVj
dGlvblJlbmRlcmluZ0JlaGF2aW9yOjpVc2VJbmRpdmlkdWFsUXVhZHMpCisgICAgICAgIHN0cmVh
bS5kdW1wUHJvcGVydHkoInVzaW5nIGluZGl2aWR1YWwgcXVhZHMiLCB0cnVlKTsKKwogICAgIHN0
cmVhbS5kdW1wUHJvcGVydHkoInBhZ2UgbnVtYmVyIiwgcmVjdC5wYWdlTnVtYmVyKCkpOwogICAg
IHJldHVybiBzdHJlYW07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvU2VsZWN0aW9uR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxl
Y3Rpb25HZW9tZXRyeS5oCmluZGV4IDlkNzUzYTM0ZTMzN2Q5ZjQ1OGIwNTc0MGFlMjRmNDVkZDdk
MDBmZDMuLjEwMzJlZDU5OTUwY2RiYzRlNjY1ZjNhYjVlYjgxMGQ2YjYzOWE4OWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5oCkBAIC0yNSwy
OCArMjUsMzkgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKICNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2VudW0gY2xhc3MgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IgOiB1aW50
OF90IHsKKyAgICBDb2FsZXNjZUJvdW5kaW5nUmVjdHMsCisgICAgVXNlSW5kaXZpZHVhbFF1YWRz
LAorfTsKKwogY2xhc3MgU2VsZWN0aW9uR2VvbWV0cnkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IFNlbGVjdGlvbkdl
b21ldHJ5KGNvbnN0IEludFJlY3QmLCBib29sIGlzSG9yaXpvbnRhbCwgaW50IGNvbHVtbk51bWJl
cik7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgU2VsZWN0aW9uR2VvbWV0cnkoY29uc3Qg
RmxvYXRRdWFkJiwgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IsIGJvb2wgaXNIb3Jpem9udGFs
LCBpbnQgY29sdW1uTnVtYmVyKTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbW92ZSBzb21l
IG9mIHRoZXNlIGFyZ3VtZW50cyB0byBhbiBhdXhpbGxhcnkgc3RydWN0LgotICAgIFNlbGVjdGlv
bkdlb21ldHJ5KGNvbnN0IEludFJlY3QmLCBUZXh0RGlyZWN0aW9uLCBpbnQsIGludCwgaW50LCBp
bnQsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGludCk7
CisgICAgU2VsZWN0aW9uR2VvbWV0cnkoY29uc3QgRmxvYXRRdWFkJiwgU2VsZWN0aW9uUmVuZGVy
aW5nQmVoYXZpb3IsIFRleHREaXJlY3Rpb24sIGludCwgaW50LCBpbnQsIGludCwgYm9vbCwgYm9v
bCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgaW50KTsKICAgICBTZWxlY3Rp
b25HZW9tZXRyeSgpID0gZGVmYXVsdDsKICAgICB+U2VsZWN0aW9uR2VvbWV0cnkoKSA9IGRlZmF1
bHQ7CiAKLSAgICBJbnRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBG
bG9hdFF1YWQgcXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZDsgfQorICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0UXVhZChjb25zdCBGbG9hdFF1YWQmKTsKKworICAgIFdFQkNPUkVfRVhQT1JU
IEludFJlY3QgcmVjdCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UmVjdChj
b25zdCBJbnRSZWN0Jik7CiAKLSAgICBpbnQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBt
X2lzSG9yaXpvbnRhbCA/IG1fcmVjdC54KCkgOiBtX3JlY3QueSgpOyB9Ci0gICAgaW50IGxvZ2lj
YWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIb3Jpem9udGFsID8gbV9yZWN0LndpZHRoKCkg
OiBtX3JlY3QuaGVpZ2h0KCk7IH0KLSAgICBpbnQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNIb3Jpem9udGFsID8gbV9yZWN0LnkoKSA6IG1fcmVjdC54KCk7IH0KLSAgICBpbnQgbG9n
aWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIb3Jpem9udGFsID8gbV9yZWN0LmhlaWdo
dCgpIDogbV9yZWN0LndpZHRoKCk7IH0KKyAgICBpbnQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJl
dHVybiBtX2lzSG9yaXpvbnRhbCA/IHJlY3QoKS54KCkgOiByZWN0KCkueSgpOyB9CisgICAgaW50
IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIb3Jpem9udGFsID8gcmVjdCgpLndp
ZHRoKCkgOiByZWN0KCkuaGVpZ2h0KCk7IH0KKyAgICBpbnQgbG9naWNhbFRvcCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNIb3Jpem9udGFsID8gcmVjdCgpLnkoKSA6IHJlY3QoKS54KCk7IH0KKyAgICBp
bnQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIb3Jpem9udGFsID8gcmVjdCgp
LmhlaWdodCgpIDogcmVjdCgpLndpZHRoKCk7IH0KIAogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KICAgICBpbnQgbWluWCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWluWDsgfQpAQCAtNjIsOCArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0luRml4ZWRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNJbkZpeGVkUG9zaXRpb247IH0K
ICAgICBib29sIGlzUnVieVRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzUnVieVRleHQ7IH0KICAg
ICBpbnQgcGFnZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZU51bWJlcjsgfQotCi0gICAg
dm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9yZWN0ID0gcmVjdDsgfQorICAg
IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yIGJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gbV9i
ZWhhdmlvcjsgfQogCiAgICAgdm9pZCBzZXRMb2dpY2FsTGVmdChpbnQpOwogICAgIHZvaWQgc2V0
TG9naWNhbFdpZHRoKGludCk7CkBAIC04MSw5ICs5MSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRDb250YWluc1N0YXJ0KGJvb2wgY29udGFpbnNTdGFydCkgeyBtX2NvbnRhaW5zU3RhcnQgPSBj
b250YWluc1N0YXJ0OyB9CiAgICAgdm9pZCBzZXRDb250YWluc0VuZChib29sIGNvbnRhaW5zRW5k
KSB7IG1fY29udGFpbnNFbmQgPSBjb250YWluc0VuZDsgfQogICAgIHZvaWQgc2V0SXNIb3Jpem9u
dGFsKGJvb2wgaXNIb3Jpem9udGFsKSB7IG1faXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsOyB9
CisgICAgdm9pZCBzZXRCZWhhdmlvcihTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvciBiZWhhdmlv
cikgeyBtX2JlaGF2aW9yID0gYmVoYXZpb3I7IH0KIAogcHJpdmF0ZToKLSAgICBJbnRSZWN0IG1f
cmVjdDsKKyAgICBGbG9hdFF1YWQgbV9xdWFkOworICAgIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2
aW9yIG1fYmVoYXZpb3IgeyBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvcjo6Q29hbGVzY2VCb3Vu
ZGluZ1JlY3RzIH07CiAgICAgVGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbiB7IFRleHREaXJlY3Rp
b246OkxUUiB9OwogICAgIGludCBtX21pblggeyAwIH07CiAgICAgaW50IG1fbWF4WCB7IDAgfTsK
QEAgLTk4LDggKzExMCwyMiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0luRml4ZWRQb3NpdGlv
biB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzUnVieVRleHQgeyBmYWxzZSB9OwogICAgIGludCBt
X3BhZ2VOdW1iZXIgeyAwIH07CisKKyAgICBtdXRhYmxlIE9wdGlvbmFsPEludFJlY3Q+IG1fY2Fj
aGVkRW5jbG9zaW5nUmVjdDsKIH07CiAKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBTZWxlY3Rpb25HZW9tZXRyeSk7CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0
IEVudW1UcmFpdHM8V2ViQ29yZTo6U2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I+IHsKKyAgICB1
c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpTZWxlY3Rpb25SZW5k
ZXJpbmdCZWhhdmlvciwKKyAgICAgICAgV2ViQ29yZTo6U2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZp
b3I6OkNvYWxlc2NlQm91bmRpbmdSZWN0cywKKyAgICAgICAgV2ViQ29yZTo6U2VsZWN0aW9uUmVu
ZGVyaW5nQmVoYXZpb3I6OlVzZUluZGl2aWR1YWxRdWFkcworICAgID47Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4
IDMyNTEwY2Q0NWJiM2IwMDQzYjM4NTIyMDJhNWI2ODA5YjhiNmY5YTIuLmRjMTgzOTdhYjY5N2Fk
MWRmYTIyNjllNTEzZWRkNTJjMjExOTk2NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmNwcApAQCAtMTIzLDE0ICsxMjMsMTQgQEAgdm9pZCBSZW5kZXJJbWFnZTo6Y29s
bGVjdFNlbGVjdGlvbkdlb21ldHJpZXMoVmVjdG9yPFNlbGVjdGlvbkdlb21ldHJ5PiYgZ2VvbWV0
cmkKICAgICB9CiAKICAgICBib29sIGlzRml4ZWQgPSBmYWxzZTsKLSAgICBJbnRSZWN0IGFic29s
dXRlQm91bmRzID0gbG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoaW1hZ2VSZWN0KSwgVXNl
VHJhbnNmb3JtcywgJmlzRml4ZWQpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0gICAgSW50UmVj
dCBsaW5lRXh0ZW50Qm91bmRzID0gbG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobGluZUV4
dGVudFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgIGF1dG8gYWJzb2x1dGVRdWFk
ID0gbG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoaW1hZ2VSZWN0KSwgVXNlVHJhbnNmb3Jt
cywgJmlzRml4ZWQpOworICAgIGF1dG8gbGluZUV4dGVudEJvdW5kcyA9IGxvY2FsVG9BYnNvbHV0
ZVF1YWQoRmxvYXRSZWN0KGxpbmVFeHRlbnRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
ICAgICBpZiAoIWNvbnRhaW5pbmdCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAg
ICAgICAgbGluZUV4dGVudEJvdW5kcyA9IGxpbmVFeHRlbnRCb3VuZHMudHJhbnNwb3NlZFJlY3Qo
KTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgZWl0aGVyIG1ha2luZyBTZWxl
Y3Rpb25HZW9tZXRyeSBhIHN0cnVjdCBvciBiZXR0ZXIgb3JnYW5pemUgaXRzIG9wdGlvbmFsIGZp
ZWxkcyBpbnRvCiAgICAgLy8gYW4gYXV4aWxpYXJ5IHN0cnVjdCB0byBzaW1wbGlmeSBpdHMgaW5p
dGlhbGl6YXRpb24uCi0gICAgZ2VvbWV0cmllcy5hcHBlbmQoU2VsZWN0aW9uR2VvbWV0cnkoYWJz
b2x1dGVCb3VuZHMsIGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS5kaXJlY3Rpb24oKSwgbGluZUV4
dGVudEJvdW5kcy54KCksIGxpbmVFeHRlbnRCb3VuZHMubWF4WCgpLCBsaW5lRXh0ZW50Qm91bmRz
Lm1heFkoKSwgMCwgZmFsc2UgLyogbGluZSBicmVhayAqLywgaXNGaXJzdE9uTGluZSwgaXNMYXN0
T25MaW5lLCBmYWxzZSAvKiBjb250YWlucyBzdGFydCAqLywgZmFsc2UgLyogY29udGFpbnMgZW5k
ICovLCBjb250YWluaW5nQmxvY2stPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwg
aXNGaXhlZCwgZmFsc2UgLyogcnVieSB0ZXh0ICovLCB2aWV3KCkucGFnZU51bWJlckZvckJsb2Nr
UHJvZ3Jlc3Npb25PZmZzZXQoYWJzb2x1dGVCb3VuZHMueCgpKSkpOworICAgIGdlb21ldHJpZXMu
YXBwZW5kKFNlbGVjdGlvbkdlb21ldHJ5KGFic29sdXRlUXVhZCwgU2VsZWN0aW9uUmVuZGVyaW5n
QmVoYXZpb3I6OkNvYWxlc2NlQm91bmRpbmdSZWN0cywgY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgp
LmRpcmVjdGlvbigpLCBsaW5lRXh0ZW50Qm91bmRzLngoKSwgbGluZUV4dGVudEJvdW5kcy5tYXhY
KCksIGxpbmVFeHRlbnRCb3VuZHMubWF4WSgpLCAwLCBmYWxzZSAvKiBsaW5lIGJyZWFrICovLCBp
c0ZpcnN0T25MaW5lLCBpc0xhc3RPbkxpbmUsIGZhbHNlIC8qIGNvbnRhaW5zIHN0YXJ0ICovLCBm
YWxzZSAvKiBjb250YWlucyBlbmQgKi8sIGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpLCBpc0ZpeGVkLCBmYWxzZSAvKiBydWJ5IHRleHQgKi8sIHZpZXco
KS5wYWdlTnVtYmVyRm9yQmxvY2tQcm9ncmVzc2lvbk9mZnNldChhYnNvbHV0ZVF1YWQuZW5jbG9z
aW5nQm91bmRpbmdCb3goKS54KCkpKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAppbmRleCBiYjBjOTc3M2IyMjg4YmM4MWEzY2Jl
NzVjNzBmYTNmMDZlZTljYjk5Li5jMTg3NGUyMTllMTdhMDg5ZmYxZmRhMWJlYTgzMmVmOGY5OWI1
MTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFr
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcApA
QCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgUmVuZGVyTGluZUJyZWFrOjpjb2xsZWN0U2VsZWN0aW9u
R2VvbWV0cmllcyhWZWN0b3I8U2VsZWN0aW9uR2VvbWV0cnk+JiByZWN0CiAgICAgICAgIGlzTGFz
dE9uTGluZSA9ICFjb250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygpLT5pbmxpbmVCb3hX
cmFwcGVyKCktPm5leHRPbkxpbmVFeGlzdHMoKTsKIAogICAgIGJvb2wgaXNGaXhlZCA9IGZhbHNl
OwotICAgIEludFJlY3QgYWJzUmVjdCA9IGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHJl
Y3QpLCBVc2VUcmFuc2Zvcm1zLCAmaXNGaXhlZCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAg
ICBhdXRvIGFic29sdXRlUXVhZCA9IGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHJlY3Qp
LCBVc2VUcmFuc2Zvcm1zLCAmaXNGaXhlZCk7CiAgICAgYm9vbCBib3hJc0hvcml6b250YWwgPSAh
aXM8U1ZHSW5saW5lVGV4dEJveD4ocnVuLT5sZWdhY3lJbmxpbmVCb3goKSkgPyBydW4tPmlzSG9y
aXpvbnRhbCgpIDogIXN0eWxlKCkuaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCk7CiAgICAgLy8gSWYg
dGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgYW4gaW5saW5lIGVsZW1lbnQsIHdlIHdhbnQgdG8gY2hl
Y2sgdGhlIGlubGluZUJveFdyYXBwZXIgb3JpZW50YXRpb24KICAgICAvLyB0byBkZXRlcm1pbmUg
dGhlIG9yaWVudGF0aW9uIG9mIHRoZSBibG9jay4gSW4gdGhpcyBjYXNlIHdlIGFsc28gdXNlIHRo
ZSBpbmxpbmVCb3hXcmFwcGVyIHRvCkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBSZW5kZXJMaW5l
QnJlYWs6OmNvbGxlY3RTZWxlY3Rpb25HZW9tZXRyaWVzKFZlY3RvcjxTZWxlY3Rpb25HZW9tZXRy
eT4mIHJlY3QKICAgICAgICAgfQogICAgIH0KIAotICAgIHJlY3RzLmFwcGVuZChTZWxlY3Rpb25H
ZW9tZXRyeShhYnNSZWN0LCBydW4tPmRpcmVjdGlvbigpLCBleHRlbnRzUmVjdC54KCksIGV4dGVu
dHNSZWN0Lm1heFgoKSwgZXh0ZW50c1JlY3QubWF4WSgpLCAwLCBydW4tPmlzTGluZUJyZWFrKCks
IGlzRmlyc3RPbkxpbmUsIGlzTGFzdE9uTGluZSwgZmFsc2UsIGZhbHNlLCBib3hJc0hvcml6b250
YWwsIGlzRml4ZWQsIGNvbnRhaW5pbmdCbG9jay0+aXNSdWJ5VGV4dCgpLCB2aWV3KCkucGFnZU51
bWJlckZvckJsb2NrUHJvZ3Jlc3Npb25PZmZzZXQoYWJzUmVjdC54KCkpKSk7CisgICAgcmVjdHMu
YXBwZW5kKFNlbGVjdGlvbkdlb21ldHJ5KGFic29sdXRlUXVhZCwgSFRNTEVsZW1lbnQ6OnNlbGVj
dGlvblJlbmRlcmluZ0JlaGF2aW9yKGVsZW1lbnQoKSksIHJ1bi0+ZGlyZWN0aW9uKCksIGV4dGVu
dHNSZWN0LngoKSwgZXh0ZW50c1JlY3QubWF4WCgpLCBleHRlbnRzUmVjdC5tYXhZKCksIDAsIHJ1
bi0+aXNMaW5lQnJlYWsoKSwgaXNGaXJzdE9uTGluZSwgaXNMYXN0T25MaW5lLCBmYWxzZSwgZmFs
c2UsIGJveElzSG9yaXpvbnRhbCwgaXNGaXhlZCwgY29udGFpbmluZ0Jsb2NrLT5pc1J1YnlUZXh0
KCksIHZpZXcoKS5wYWdlTnVtYmVyRm9yQmxvY2tQcm9ncmVzc2lvbk9mZnNldChhYnNvbHV0ZVF1
YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKS54KCkpKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCBmNGMxY2VlZjYxMDI0NGYyMDA1
ZTAyZjc1OGU2YzM3OTJlMGM1OWEyLi43MjUwOWYyZjhiNzMwZGYxZjc1MzYwMmM5NDgxNmFiYTZh
YzIxNWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAt
NzM3LDkgKzczNyw4IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0
cmllcyhWZWN0b3I8U2VsZWN0aW9uR2VvbWV0cnk+JiBnZW9tZXRyCiAgICAgICAgICAgICBjaGls
ZC0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZR
dWFkcyA9IHF1YWRzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVy
T2ZRdWFkczsgKytpKQotICAgICAgICBnZW9tZXRyaWVzLmFwcGVuZChTZWxlY3Rpb25HZW9tZXRy
eShxdWFkc1tpXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpLCBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpLCB2aWV3KCkucGFnZU51bWJlckZvckJsb2NrUHJvZ3Jlc3Npb25PZmZzZXQocXVhZHNbaV0u
ZW5jbG9zaW5nQm91bmRpbmdCb3goKS54KCkpKSk7CisgICAgZm9yIChhdXRvJiBxdWFkIDogcXVh
ZHMpCisgICAgICAgIGdlb21ldHJpZXMuYXBwZW5kKFNlbGVjdGlvbkdlb21ldHJ5KHF1YWQsIEhU
TUxFbGVtZW50OjpzZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvcihub2RlKCkpLCBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpLCB2aWV3KCkucGFnZU51bWJlckZvckJsb2NrUHJvZ3Jlc3Npb25PZmZz
ZXQocXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpLngoKSkpKTsKIH0KICNlbmRpZgogCkBAIC0y
MTI0LDYgKzIxMjMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0TGluZUhlaWdodE9mU2Vs
ZWN0aW9uR2VvbWV0cmllcyhWZWN0b3I8U2VsZWN0aW9uR2VvbWV0cgogICAgICAgICAtLWk7CiAg
ICAgICAgIGlmIChnZW9tZXRyaWVzW2ldLmxpbmVOdW1iZXIoKSkKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBpZiAoZ2VvbWV0cmllc1tpXS5iZWhhdmlvcigpID09IFNlbGVjdGlvblJlbmRl
cmluZ0JlaGF2aW9yOjpVc2VJbmRpdmlkdWFsUXVhZHMpCisgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgZ2VvbWV0cmllc1tpXS5zZXRMaW5lTnVtYmVyKGxpbmVOdW1iZXIpOwogICAgICAg
ICBnZW9tZXRyaWVzW2ldLnNldExvZ2ljYWxUb3AobGluZVRvcCk7CiAgICAgICAgIGdlb21ldHJp
ZXNbaV0uc2V0TG9naWNhbEhlaWdodChsaW5lSGVpZ2h0KTsKQEAgLTIxMzIsNyArMjEzMyw3IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RMaW5lSGVpZ2h0T2ZTZWxlY3Rpb25HZW9tZXRyaWVz
KFZlY3RvcjxTZWxlY3Rpb25HZW9tZXRyCiAKIHN0YXRpYyBTZWxlY3Rpb25HZW9tZXRyeSBjb2Fs
ZXNjZVNlbGVjdGlvbkdlb21ldHJpZXMoY29uc3QgU2VsZWN0aW9uR2VvbWV0cnkmIG9yaWdpbmFs
LCBjb25zdCBTZWxlY3Rpb25HZW9tZXRyeSYgcHJldmlvdXMpCiB7Ci0gICAgU2VsZWN0aW9uR2Vv
bWV0cnkgcmVzdWx0KHVuaW9uUmVjdChwcmV2aW91cy5yZWN0KCksIG9yaWdpbmFsLnJlY3QoKSks
IG9yaWdpbmFsLmlzSG9yaXpvbnRhbCgpLCBvcmlnaW5hbC5wYWdlTnVtYmVyKCkpOworICAgIFNl
bGVjdGlvbkdlb21ldHJ5IHJlc3VsdCh7IHVuaW9uUmVjdChwcmV2aW91cy5yZWN0KCksIG9yaWdp
bmFsLnJlY3QoKSkgfSwgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OkNvYWxlc2NlQm91bmRp
bmdSZWN0cywgb3JpZ2luYWwuaXNIb3Jpem9udGFsKCksIG9yaWdpbmFsLnBhZ2VOdW1iZXIoKSk7
CiAgICAgcmVzdWx0LnNldERpcmVjdGlvbihvcmlnaW5hbC5jb250YWluc1N0YXJ0KCkgfHwgb3Jp
Z2luYWwuY29udGFpbnNFbmQoKSA/IG9yaWdpbmFsLmRpcmVjdGlvbigpIDogcHJldmlvdXMuZGly
ZWN0aW9uKCkpOwogICAgIHJlc3VsdC5zZXRDb250YWluc1N0YXJ0KHByZXZpb3VzLmNvbnRhaW5z
U3RhcnQoKSB8fCBvcmlnaW5hbC5jb250YWluc1N0YXJ0KCkpOwogICAgIHJlc3VsdC5zZXRDb250
YWluc0VuZChwcmV2aW91cy5jb250YWluc0VuZCgpIHx8IG9yaWdpbmFsLmNvbnRhaW5zRW5kKCkp
OwpAQCAtMjI3Miw2ICsyMjczLDggQEAgYXV0byBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rp
b25HZW9tZXRyaWVzSW50ZXJuYWwoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgIGZvciAo
c2l6ZV90IGogPSAxOyBqIDwgbnVtYmVyT2ZHZW9tZXRyaWVzOyArK2opIHsKICAgICAgICAgaWYg
KGdlb21ldHJpZXNbal0ubGluZU51bWJlcigpICE9IGdlb21ldHJpZXNbaiAtIDFdLmxpbmVOdW1i
ZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZ2VvbWV0cmllc1tqXS5i
ZWhhdmlvcigpID09IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpVc2VJbmRpdmlkdWFsUXVh
ZHMpCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byYgcHJldmlvdXNSZWN0ID0g
Z2VvbWV0cmllc1tqIC0gMV07CiAgICAgICAgIGJvb2wgcHJldmlvdXNSZWN0TWF5Tm90UmVhY2hS
aWdodEVkZ2UgPSAocHJldmlvdXNSZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxU
UiAmJiBwcmV2aW91c1JlY3QuY29udGFpbnNFbmQoKSkgfHwgKHByZXZpb3VzUmVjdC5kaXJlY3Rp
b24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgJiYgcHJldmlvdXNSZWN0LmNvbnRhaW5zU3RhcnQo
KSk7CiAgICAgICAgIGlmIChwcmV2aW91c1JlY3RNYXlOb3RSZWFjaFJpZ2h0RWRnZSkKQEAgLTIy
ODgsNiArMjI5MSw4IEBAIGF1dG8gUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0
cmllc0ludGVybmFsKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICAgICAgYXV0byYgc2Vs
ZWN0aW9uR2VvbWV0cnkgPSBnZW9tZXRyaWVzW2ldOwogICAgICAgICBpZiAoIXNlbGVjdGlvbkdl
b21ldHJ5LmlzTGluZUJyZWFrKCkgJiYgc2VsZWN0aW9uR2VvbWV0cnkubGluZU51bWJlcigpID49
IG1heExpbmVOdW1iZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHNlbGVj
dGlvbkdlb21ldHJ5LmJlaGF2aW9yKCkgPT0gU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OlVz
ZUluZGl2aWR1YWxRdWFkcykKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc2Vs
ZWN0aW9uR2VvbWV0cnkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMICYmIHNlbGVj
dGlvbkdlb21ldHJ5LmlzRmlyc3RPbkxpbmUoKSkgewogICAgICAgICAgICAgc2VsZWN0aW9uR2Vv
bWV0cnkuc2V0TG9naWNhbFdpZHRoKHNlbGVjdGlvbkdlb21ldHJ5LmxvZ2ljYWxXaWR0aCgpICsg
c2VsZWN0aW9uR2VvbWV0cnkubG9naWNhbExlZnQoKSAtIHNlbGVjdGlvbkdlb21ldHJ5Lm1pblgo
KSk7CiAgICAgICAgICAgICBzZWxlY3Rpb25HZW9tZXRyeS5zZXRMb2dpY2FsTGVmdChzZWxlY3Rp
b25HZW9tZXRyeS5taW5YKCkpOwpAQCAtMjMwOSw2ICsyMzE0LDE1IEBAIFZlY3RvcjxTZWxlY3Rp
b25HZW9tZXRyeT4gUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0cmllcyhjb25z
dCBTaW1wbGVSCiAgICAgSW50UmVjdCBpbnRlcmlvclVuaW9uUmVjdDsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bWJlck9mR2VvbWV0cmllczsgKytpKSB7CiAgICAgICAgIGF1dG8mIGN1
cnJlbnRHZW9tZXRyeSA9IHJlc3VsdC5nZW9tZXRyaWVzW2ldOworICAgICAgICBpZiAoY3VycmVu
dEdlb21ldHJ5LmJlaGF2aW9yKCkgPT0gU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OlVzZUlu
ZGl2aWR1YWxRdWFkcykgeworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHN0aWxsIHByb2JhYmx5
IHdhbnQgc29tZSB3YXkgdG8gY29hbGVzY2UgcXVhZHMsIHByb2JhYmx5IGJ5IHByb2plY3Rpbmcg
dGhlbSBvbnRvIHJvdGF0ZWQgYm91bmRpbmcgcmVjdHMKKyAgICAgICAgICAgIC8vIGFuZCB0aGVu
IGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvdGF0ZWQgYm91bmRpbmcgcmVjdHMgYXJlIG92ZXJsYXBw
aW5nIGFuZCBzaGFyZSB0aGUgc2FtZSByb3RhdGlvbiBhbmdsZS4gVW50aWwgdGhlbiwKKyAgICAg
ICAgICAgIC8vIHdlIHNpbXBseSBhcHBlbmQgYWxsIG5vbi1lbXB0eSBxdWFkcy4KKyAgICAgICAg
ICAgIGlmICghY3VycmVudEdlb21ldHJ5LnF1YWQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgY29hbGVzY2VkR2VvbWV0cmllcy5hcHBlbmQoY3VycmVudEdlb21ldHJ5KTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAgaWYgKGN1cnJlbnRHZW9tZXRyeS5s
aW5lTnVtYmVyKCkgPT0gMSkgewogICAgICAgICAgICAgQVNTRVJUKGludGVyaW9yVW5pb25SZWN0
LmlzRW1wdHkoKSk7CiAgICAgICAgICAgICBpZiAoIWNvYWxlc2NlZEdlb21ldHJpZXMuaXNFbXB0
eSgpKSB7CkBAIC0yMzMzLDEzICsyMzQ3LDEzIEBAIFZlY3RvcjxTZWxlY3Rpb25HZW9tZXRyeT4g
UmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0cmllcyhjb25zdCBTaW1wbGVSCiAg
ICAgICAgICAgICAgICAgLy8gRm9yIGlCb29rcywgdGhlIGludGVyaW9yIGxpbmVzIG1heSBjcm9z
cyBtdWx0aXBsZSBob3Jpem9udGFsIHBhZ2VzLgogICAgICAgICAgICAgICAgIGludGVyaW9yVW5p
b25SZWN0LnVuaXRlKGN1cnJlbnRHZW9tZXRyeS5yZWN0KCkpOwogICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBjb2FsZXNjZWRHZW9tZXRyaWVzLmFwcGVuZChTZWxlY3Rpb25H
ZW9tZXRyeShpbnRlcmlvclVuaW9uUmVjdCwgY3VycmVudEdlb21ldHJ5LmlzSG9yaXpvbnRhbCgp
LCBjdXJyZW50R2VvbWV0cnkucGFnZU51bWJlcigpKSk7CisgICAgICAgICAgICAgICAgY29hbGVz
Y2VkR2VvbWV0cmllcy5hcHBlbmQoU2VsZWN0aW9uR2VvbWV0cnkoeyBpbnRlcmlvclVuaW9uUmVj
dCB9LCBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvcjo6Q29hbGVzY2VCb3VuZGluZ1JlY3RzLCBj
dXJyZW50R2VvbWV0cnkuaXNIb3Jpem9udGFsKCksIGN1cnJlbnRHZW9tZXRyeS5wYWdlTnVtYmVy
KCkpKTsKICAgICAgICAgICAgICAgICBpbnRlcmlvclVuaW9uUmVjdCA9IGN1cnJlbnRHZW9tZXRy
eS5yZWN0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBQcm9jZXNzaW5nIGxhc3QgbGluZS4KICAgICAgICAgICAgIGlmICghaW50ZXJpb3JVbmlvblJl
Y3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgY29hbGVzY2VkR2VvbWV0cmllcy5hcHBl
bmQoU2VsZWN0aW9uR2VvbWV0cnkoaW50ZXJpb3JVbmlvblJlY3QsIGN1cnJlbnRHZW9tZXRyeS5p
c0hvcml6b250YWwoKSwgY3VycmVudEdlb21ldHJ5LnBhZ2VOdW1iZXIoKSkpOworICAgICAgICAg
ICAgICAgIGNvYWxlc2NlZEdlb21ldHJpZXMuYXBwZW5kKFNlbGVjdGlvbkdlb21ldHJ5KHsgaW50
ZXJpb3JVbmlvblJlY3QgfSwgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OkNvYWxlc2NlQm91
bmRpbmdSZWN0cywgY3VycmVudEdlb21ldHJ5LmlzSG9yaXpvbnRhbCgpLCBjdXJyZW50R2VvbWV0
cnkucGFnZU51bWJlcigpKSk7CiAgICAgICAgICAgICAgICAgaW50ZXJpb3JVbmlvblJlY3QgPSBJ
bnRSZWN0KCk7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAppbmRleCA4YWNiMTNiZmMzMzgyYzExODNhMzRkOWFkMGY5M2FkOTUyZGYxOGUyLi4x
YzUyNTQ0MDE4OTQ5YWFhYzZmYjJkMTQ5ZDQ0NzNhN2ZhZjBlZDIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0zNjksNyArMzY5LDcgQEAgdm9pZCBSZW5kZXJU
ZXh0Ojpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0cmllcyhWZWN0b3I8U2VsZWN0aW9uR2VvbWV0cnk+
JiByZWN0cywgdW4KICAgICAgICAgYm9vbCBjb250YWluc0VuZCA9IHJ1bi0+c3RhcnQoKSA8PSBl
bmQgJiYgcnVuLT5lbmQoKSA+PSBlbmQ7CiAKICAgICAgICAgYm9vbCBpc0ZpeGVkID0gZmFsc2U7
Ci0gICAgICAgIEludFJlY3QgYWJzUmVjdCA9IGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0
KHJlY3QpLCBVc2VUcmFuc2Zvcm1zLCAmaXNGaXhlZCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
KyAgICAgICAgYXV0byBhYnNvbHV0ZVF1YWQgPSBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChyZWN0KSwgVXNlVHJhbnNmb3JtcywgJmlzRml4ZWQpOwogICAgICAgICBib29sIGJveElzSG9y
aXpvbnRhbCA9ICFpczxTVkdJbmxpbmVUZXh0Qm94PihydW4tPmxlZ2FjeUlubGluZUJveCgpKSA/
IHJ1bi0+aXNIb3Jpem9udGFsKCkgOiAhc3R5bGUoKS5pc1ZlcnRpY2FsV3JpdGluZ01vZGUoKTsK
ICAgICAgICAgLy8gSWYgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgYW4gaW5saW5lIGVsZW1lbnQs
IHdlIHdhbnQgdG8gY2hlY2sgdGhlIGlubGluZUJveFdyYXBwZXIgb3JpZW50YXRpb24KICAgICAg
ICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgYmxvY2suIEluIHRoaXMg
Y2FzZSB3ZSBhbHNvIHVzZSB0aGUgaW5saW5lQm94V3JhcHBlciB0bwpAQCAtMzgxLDcgKzM4MSw3
IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvbkdlb21ldHJpZXMoVmVjdG9yPFNl
bGVjdGlvbkdlb21ldHJ5PiYgcmVjdHMsIHVuCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICByZWN0cy5hcHBlbmQoU2VsZWN0aW9uR2VvbWV0cnkoYWJzUmVjdCwgcnVuLT5kaXJl
Y3Rpb24oKSwgZXh0ZW50c1JlY3QueCgpLCBleHRlbnRzUmVjdC5tYXhYKCksIGV4dGVudHNSZWN0
Lm1heFkoKSwgMCwgcnVuLT5pc0xpbmVCcmVhaygpLCBpc0ZpcnN0T25MaW5lLCBpc0xhc3RPbkxp
bmUsIGNvbnRhaW5zU3RhcnQsIGNvbnRhaW5zRW5kLCBib3hJc0hvcml6b250YWwsIGlzRml4ZWQs
IGNvbnRhaW5pbmdCbG9jay0+aXNSdWJ5VGV4dCgpLCB2aWV3KCkucGFnZU51bWJlckZvckJsb2Nr
UHJvZ3Jlc3Npb25PZmZzZXQoYWJzUmVjdC54KCkpKSk7CisgICAgICAgIHJlY3RzLmFwcGVuZChT
ZWxlY3Rpb25HZW9tZXRyeShhYnNvbHV0ZVF1YWQsIEhUTUxFbGVtZW50OjpzZWxlY3Rpb25SZW5k
ZXJpbmdCZWhhdmlvcih0ZXh0Tm9kZSgpKSwgcnVuLT5kaXJlY3Rpb24oKSwgZXh0ZW50c1JlY3Qu
eCgpLCBleHRlbnRzUmVjdC5tYXhYKCksIGV4dGVudHNSZWN0Lm1heFkoKSwgMCwgcnVuLT5pc0xp
bmVCcmVhaygpLCBpc0ZpcnN0T25MaW5lLCBpc0xhc3RPbkxpbmUsIGNvbnRhaW5zU3RhcnQsIGNv
bnRhaW5zRW5kLCBib3hJc0hvcml6b250YWwsIGlzRml4ZWQsIGNvbnRhaW5pbmdCbG9jay0+aXNS
dWJ5VGV4dCgpLCB2aWV3KCkucGFnZU51bWJlckZvckJsb2NrUHJvZ3Jlc3Npb25PZmZzZXQoYWJz
b2x1dGVRdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkueCgpKSkpOwogICAgIH0KIH0KICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKaW5k
ZXggNTcwMTY1MGUyOTExNDAxNDlhNzAxMTZmNjBiNDVlNDUxOGJlNjRkYi4uOTFkOGIxOTNkMDZh
MWEwZTgwZjNmNzY5MGNiYjNmYTdjNDNlMTNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC0xMzA0LDcgKzEzMDQsOCBAQCBib29sIEFy
Z3VtZW50Q29kZXI8UmVzb3VyY2VFcnJvcj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXNv
dXJjZUVycm9yJiByZXNvdQogCiB2b2lkIEFyZ3VtZW50Q29kZXI8U2VsZWN0aW9uR2VvbWV0cnk+
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU2VsZWN0aW9uR2VvbWV0cnkmIHNlbGVj
dGlvbkdlb21ldHJ5KQogewotICAgIGVuY29kZXIgPDwgc2VsZWN0aW9uR2VvbWV0cnkucmVjdCgp
OworICAgIGVuY29kZXIgPDwgc2VsZWN0aW9uR2VvbWV0cnkucXVhZCgpOworICAgIGVuY29kZXIg
PDwgc2VsZWN0aW9uR2VvbWV0cnkuYmVoYXZpb3IoKTsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PHVpbnQzMl90PihzZWxlY3Rpb25HZW9tZXRyeS5kaXJlY3Rpb24oKSk7CiAgICAgZW5jb2Rl
ciA8PCBzZWxlY3Rpb25HZW9tZXRyeS5taW5YKCk7CiAgICAgZW5jb2RlciA8PCBzZWxlY3Rpb25H
ZW9tZXRyeS5tYXhYKCk7CkBAIC0xMzIxLDEwICsxMzIyLDE2IEBAIHZvaWQgQXJndW1lbnRDb2Rl
cjxTZWxlY3Rpb25HZW9tZXRyeT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTZWxl
Y3Rpb25HCiBPcHRpb25hbDxTZWxlY3Rpb25HZW9tZXRyeT4gQXJndW1lbnRDb2RlcjxTZWxlY3Rp
b25HZW9tZXRyeT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIFNlbGVjdGlvbkdl
b21ldHJ5IHNlbGVjdGlvbkdlb21ldHJ5OwotICAgIEludFJlY3QgcmVjdDsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlY3QpKQorICAgIEZsb2F0UXVhZCBxdWFkOworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocXVhZCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgc2VsZWN0
aW9uR2VvbWV0cnkuc2V0UXVhZChxdWFkKTsKKworICAgIE9wdGlvbmFsPFNlbGVjdGlvblJlbmRl
cmluZ0JlaGF2aW9yPiBiZWhhdmlvcjsKKyAgICBkZWNvZGVyID4+IGJlaGF2aW9yOworICAgIGlm
ICghYmVoYXZpb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgc2VsZWN0aW9u
R2VvbWV0cnkuc2V0UmVjdChyZWN0KTsKKyAgICBzZWxlY3Rpb25HZW9tZXRyeS5zZXRCZWhhdmlv
cigqYmVoYXZpb3IpOwogCiAgICAgdWludDMyX3QgZGlyZWN0aW9uOwogICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoZGlyZWN0aW9uKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDYyMDJmMjJjYmE0ZGE2NTc5
NzcxOTczMWQ5MDI1ZGMzMzk5NDdiZGYuLjdmMmRjNmMyMWRhMjMyMTY0Y2Y4MjA3YzYwZmNlNjkw
NGNlNWQxOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMjQzLDcgKzI0MywxNiBAQCBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFdLU2VsZWN0aW9uRHJhd2luZ0luZm8mIGEsIGNvbnN0IFdLU2Vs
ZWN0aW9uRHJhd2luZwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBhLnNlbGVjdGlvbkdlb21ldHJpZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIGlmIChhLnNlbGVjdGlvbkdlb21ldHJpZXNbaV0ucmVjdCgpICE9IGIuc2Vs
ZWN0aW9uR2VvbWV0cmllc1tpXS5yZWN0KCkpCisgICAgICAgICAgICBhdXRvJiBhR2VvbWV0cnkg
PSBhLnNlbGVjdGlvbkdlb21ldHJpZXNbaV07CisgICAgICAgICAgICBhdXRvJiBiR2VvbWV0cnkg
PSBiLnNlbGVjdGlvbkdlb21ldHJpZXNbaV07CisgICAgICAgICAgICBhdXRvIGJlaGF2aW9yID0g
YUdlb21ldHJ5LmJlaGF2aW9yKCk7CisgICAgICAgICAgICBpZiAoYmVoYXZpb3IgIT0gYkdlb21l
dHJ5LmJlaGF2aW9yKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
ICAgICBpZiAoYmVoYXZpb3IgPT0gV2ViQ29yZTo6U2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6
OkNvYWxlc2NlQm91bmRpbmdSZWN0cyAmJiBhR2VvbWV0cnkucmVjdCgpICE9IGJHZW9tZXRyeS5y
ZWN0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAo
YmVoYXZpb3IgPT0gV2ViQ29yZTo6U2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OlVzZUluZGl2
aWR1YWxRdWFkcyAmJiBhR2VvbWV0cnkucXVhZCgpICE9IGJHZW9tZXRyeS5xdWFkKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDc5NiwxMCAr
NDgwNSwxMCBAQCAtICh2b2lkKXJlcGxhY2VSYW5nZTooVUlUZXh0UmFuZ2UgKilyYW5nZSB3aXRo
VGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7CiB9CiAKLXN0YXRpYyBOU0FycmF5PFdLVGV4dFNlbGVj
dGlvblJlY3QgKj4gKndrVGV4dFNlbGVjdGlvblJlY3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpT
ZWxlY3Rpb25HZW9tZXRyeT4mIHJlY3RzKQorc3RhdGljIE5TQXJyYXk8V0tUZXh0U2VsZWN0aW9u
UmVjdCAqPiAqdGV4dFNlbGVjdGlvblJlY3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rp
b25HZW9tZXRyeT4mIHJlY3RzLCBDR0Zsb2F0IHNjYWxlRmFjdG9yKQogewotICAgIHJldHVybiBj
cmVhdGVOU0FycmF5KHJlY3RzLCBbXSAoYXV0byYgcmVjdCkgewotICAgICAgICByZXR1cm4gYWRv
cHROUyhbW1dLVGV4dFNlbGVjdGlvblJlY3QgYWxsb2NdIGluaXRXaXRoU2VsZWN0aW9uR2VvbWV0
cnk6cmVjdF0pOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHJlY3RzLCBbc2NhbGVGYWN0b3Jd
IChhdXRvJiByZWN0KSB7CisgICAgICAgIHJldHVybiBhZG9wdE5TKFtbV0tUZXh0U2VsZWN0aW9u
UmVjdCBhbGxvY10gaW5pdFdpdGhTZWxlY3Rpb25HZW9tZXRyeTpyZWN0IHNjYWxlRmFjdG9yOnNj
YWxlRmFjdG9yXSk7CiAgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIApAQCAtNDg1Miw3ICs0ODYx
LDcgQEAgLSAoVUlUZXh0UmFuZ2UgKilzZWxlY3RlZFRleHRSYW5nZQogCiAgICAgYXV0byBjYXJl
dFN0YXJ0UmVjdCA9IFtzZWxmIF9zY2FsZWRDYXJldFJlY3RGb3JTZWxlY3Rpb25TdGFydDpfcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLmNhcmV0UmVjdEF0U3RhcnRdOwogICAg
IGF1dG8gY2FyZXRFbmRSZWN0ID0gW3NlbGYgX3NjYWxlZENhcmV0UmVjdEZvclNlbGVjdGlvbkVu
ZDpfcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLmNhcmV0UmVjdEF0RW5kXTsK
LSAgICBhdXRvIHNlbGVjdGlvblJlY3RzID0gd2tUZXh0U2VsZWN0aW9uUmVjdHMoX3BhZ2UtPmVk
aXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5zZWxlY3Rpb25HZW9tZXRyaWVzKTsKKyAgICBh
dXRvIHNlbGVjdGlvblJlY3RzID0gdGV4dFNlbGVjdGlvblJlY3RzKF9wYWdlLT5lZGl0b3JTdGF0
ZSgpLnBvc3RMYXlvdXREYXRhKCkuc2VsZWN0aW9uR2VvbWV0cmllcywgc2VsZi5fY29udGVudFpv
b21TY2FsZSk7CiAgICAgYXV0byBzZWxlY3RlZFRleHRMZW5ndGggPSBlZGl0b3JTdGF0ZS5wb3N0
TGF5b3V0RGF0YSgpLnNlbGVjdGVkVGV4dExlbmd0aDsKICAgICBfY2FjaGVkU2VsZWN0ZWRUZXh0
UmFuZ2UgPSBbV0tUZXh0UmFuZ2UgdGV4dFJhbmdlV2l0aFN0YXRlOiFoYXNTZWxlY3Rpb24gaXNS
YW5nZTppc1JhbmdlIGlzRWRpdGFibGU6aXNDb250ZW50RWRpdGFibGUgc3RhcnRSZWN0OmNhcmV0
U3RhcnRSZWN0IGVuZFJlY3Q6Y2FyZXRFbmRSZWN0IHNlbGVjdGlvblJlY3RzOnNlbGVjdGlvblJl
Y3RzIHNlbGVjdGVkVGV4dExlbmd0aDpzZWxlY3RlZFRleHRMZW5ndGhdOwogICAgIHJldHVybiBf
Y2FjaGVkU2VsZWN0ZWRUZXh0UmFuZ2UuZ2V0KCk7CkBAIC00OTAyLDcgKzQ5MTEsNyBAQCAtIChV
SVRleHRSYW5nZSAqKW1hcmtlZFRleHRSYW5nZQogICAgIGF1dG8gaXNDb250ZW50RWRpdGFibGUg
PSBlZGl0b3JTdGF0ZS5pc0NvbnRlbnRFZGl0YWJsZTsKICAgICBhdXRvIGNhcmV0U3RhcnRSZWN0
ID0gW3NlbGYgX3NjYWxlZENhcmV0UmVjdEZvclNlbGVjdGlvblN0YXJ0OnVuc2NhbGVkQ2FyZXRS
ZWN0QXRTdGFydF07CiAgICAgYXV0byBjYXJldEVuZFJlY3QgPSBbc2VsZiBfc2NhbGVkQ2FyZXRS
ZWN0Rm9yU2VsZWN0aW9uRW5kOnVuc2NhbGVkQ2FyZXRSZWN0QXRFbmRdOwotICAgIGF1dG8gc2Vs
ZWN0aW9uUmVjdHMgPSB3a1RleHRTZWxlY3Rpb25SZWN0cyhwb3N0TGF5b3V0RGF0YS5tYXJrZWRU
ZXh0UmVjdHMpOworICAgIGF1dG8gc2VsZWN0aW9uUmVjdHMgPSB0ZXh0U2VsZWN0aW9uUmVjdHMo
cG9zdExheW91dERhdGEubWFya2VkVGV4dFJlY3RzLCBzZWxmLl9jb250ZW50Wm9vbVNjYWxlKTsK
ICAgICBhdXRvIHNlbGVjdGVkVGV4dExlbmd0aCA9IHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHQu
bGVuZ3RoKCk7CiAgICAgcmV0dXJuIFtXS1RleHRSYW5nZSB0ZXh0UmFuZ2VXaXRoU3RhdGU6IWhh
c0NvbXBvc2l0aW9uIGlzUmFuZ2U6aXNSYW5nZSBpc0VkaXRhYmxlOmlzQ29udGVudEVkaXRhYmxl
IHN0YXJ0UmVjdDpjYXJldFN0YXJ0UmVjdCBlbmRSZWN0OmNhcmV0RW5kUmVjdCBzZWxlY3Rpb25S
ZWN0czpzZWxlY3Rpb25SZWN0cyBzZWxlY3RlZFRleHRMZW5ndGg6c2VsZWN0ZWRUZXh0TGVuZ3Ro
XTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1RleHRTZWxl
Y3Rpb25SZWN0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tUZXh0U2VsZWN0aW9u
UmVjdC5oCmluZGV4IDk5YjIyYzU1MmZlZGU0NjdhNWMwOGI4Zjc2YzE0YWFjYjk1ZmMxZGUuLjEw
OTJmN2NlODExNWY1OWU3MTJmOTZjYjIwOGRlYzQzYWQyOWI0Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1RleHRTZWxlY3Rpb25SZWN0LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QuaApAQCAtMzQsNyArMzQs
NyBAQCBjbGFzcyBTZWxlY3Rpb25HZW9tZXRyeTsKIEBpbnRlcmZhY2UgV0tUZXh0U2VsZWN0aW9u
UmVjdCA6IFVJVGV4dFNlbGVjdGlvblJlY3QKIAogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ0dS
ZWN0OihDR1JlY3QpcmVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNlbGVjdGlvbkdlb21l
dHJ5Oihjb25zdCBXZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRyeSYpc2VsZWN0aW9uUmVjdDsKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFNlbGVjdGlvbkdlb21ldHJ5Oihjb25zdCBXZWJDb3JlOjpT
ZWxlY3Rpb25HZW9tZXRyeSYpc2VsZWN0aW9uR2VvbWV0cnkgc2NhbGVGYWN0b3I6KENHRmxvYXQp
c2NhbGVGYWN0b3I7CiAKIEBlbmQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tUZXh0U2VsZWN0aW9uUmVjdC5tbQppbmRleCBlYzMwZDhiYjE3M2IwNmZiNTJmNmFjZDMx
ZjhjYWU0NDEyMTQwNzNmLi5mNzhkMjVhMDU0NDA2ODM5Njc3Yjk3NzE5NTI4M2QyMzYzN2E5Y2Jk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tUZXh0U2VsZWN0aW9u
UmVjdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tUZXh0U2VsZWN0aW9u
UmVjdC5tbQpAQCAtMzAsMjUgKzMwLDEwNSBAQAogCiAjaW1wb3J0IDxXZWJDb3JlL1NlbGVjdGlv
bkdlb21ldHJ5Lmg+CiAKKyNpZiBIQVZFKFVJX1RFWFRfU0VMRUNUSU9OX1JFQ1RfQ1VTVE9NX0hB
TkRMRV9JTkZPKQorCitAaW50ZXJmYWNlIFdLVGV4dFNlbGVjdGlvblJlY3RDdXN0b21IYW5kbGVJ
bmZvIDogVUlUZXh0U2VsZWN0aW9uUmVjdEN1c3RvbUhhbmRsZUluZm8KKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aEZsb2F0UXVhZDooY29uc3QgV2ViQ29yZTo6RmxvYXRRdWFkJilxdWFkOworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gV0tUZXh0U2VsZWN0aW9uUmVjdEN1c3RvbUhhbmRsZUluZm8g
eworICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBfcXVhZDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoRmxvYXRRdWFkOihjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmKXF1YWQKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9x
dWFkID0gcXVhZDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoQ0dQb2ludClib3R0b21MZWZ0
Cit7CisgICAgcmV0dXJuIF9xdWFkLnA0KCk7Cit9CisKKy0gKENHUG9pbnQpdG9wTGVmdAorewor
ICAgIHJldHVybiBfcXVhZC5wMSgpOworfQorCistIChDR1BvaW50KWJvdHRvbVJpZ2h0Cit7Cisg
ICAgcmV0dXJuIF9xdWFkLnAzKCk7Cit9CisKKy0gKENHUG9pbnQpdG9wUmlnaHQKK3sKKyAgICBy
ZXR1cm4gX3F1YWQucDIoKTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gSEFWRShVSV9URVhUX1NF
TEVDVElPTl9SRUNUX0NVU1RPTV9IQU5ETEVfSU5GTykKKwogQGltcGxlbWVudGF0aW9uIFdLVGV4
dFNlbGVjdGlvblJlY3QgewogICAgIFdlYkNvcmU6OlNlbGVjdGlvbkdlb21ldHJ5IF9zZWxlY3Rp
b25HZW9tZXRyeTsKKyAgICBDR0Zsb2F0IF9zY2FsZUZhY3RvcjsKIH0KIAogLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ0dSZWN0OihDR1JlY3QpcmVjdAogewogICAgIFdlYkNvcmU6OlNlbGVjdGlv
bkdlb21ldHJ5IHNlbGVjdGlvbkdlb21ldHJ5OwogICAgIHNlbGVjdGlvbkdlb21ldHJ5LnNldFJl
Y3QoV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7Ci0gICAgcmV0dXJuIFtzZWxmIGlu
aXRXaXRoU2VsZWN0aW9uR2VvbWV0cnk6V1RGTW92ZShzZWxlY3Rpb25HZW9tZXRyeSldOworICAg
IHJldHVybiBbc2VsZiBpbml0V2l0aFNlbGVjdGlvbkdlb21ldHJ5OldURk1vdmUoc2VsZWN0aW9u
R2VvbWV0cnkpIHNjYWxlRmFjdG9yOjFdOwogfQogCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhT
ZWxlY3Rpb25HZW9tZXRyeTooY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uR2VvbWV0cnkmKXNlbGVj
dGlvblJlY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNlbGVjdGlvbkdlb21ldHJ5Oihjb25z
dCBXZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRyeSYpc2VsZWN0aW9uR2VvbWV0cnkgc2NhbGVGYWN0
b3I6KENHRmxvYXQpc2NhbGVGYWN0b3IKIHsKICAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBfc2VsZWN0aW9uR2VvbWV0cnkgPSBzZWxlY3Rp
b25SZWN0OworCisgICAgX3NlbGVjdGlvbkdlb21ldHJ5ID0gc2VsZWN0aW9uR2VvbWV0cnk7Cisg
ICAgX3NjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKKy0g
KFVJQmV6aWVyUGF0aCAqKV9wYXRoCit7CisgICAgaWYgKF9zZWxlY3Rpb25HZW9tZXRyeS5iZWhh
dmlvcigpID09IFdlYkNvcmU6OlNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpDb2FsZXNjZUJv
dW5kaW5nUmVjdHMpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBhdXRvIHNlbGVjdGlvbkJv
dW5kcyA9IF9zZWxlY3Rpb25HZW9tZXRyeS5yZWN0KCk7CisgICAgYXV0byBxdWFkID0gX3NlbGVj
dGlvbkdlb21ldHJ5LnF1YWQoKTsKKyAgICBxdWFkLnNjYWxlKF9zY2FsZUZhY3Rvcik7CisgICAg
cXVhZC5tb3ZlKC1zZWxlY3Rpb25Cb3VuZHMueCgpICogX3NjYWxlRmFjdG9yLCAtc2VsZWN0aW9u
Qm91bmRzLnkoKSAqIF9zY2FsZUZhY3Rvcik7CisKKyAgICBhdXRvIHJlc3VsdCA9IFtVSUJlemll
clBhdGggYmV6aWVyUGF0aF07CisgICAgW3Jlc3VsdCBtb3ZlVG9Qb2ludDpxdWFkLnAxKCldOwor
ICAgIFtyZXN1bHQgYWRkTGluZVRvUG9pbnQ6cXVhZC5wMigpXTsKKyAgICBbcmVzdWx0IGFkZExp
bmVUb1BvaW50OnF1YWQucDMoKV07CisgICAgW3Jlc3VsdCBhZGRMaW5lVG9Qb2ludDpxdWFkLnA0
KCldOworICAgIFtyZXN1bHQgYWRkTGluZVRvUG9pbnQ6cXVhZC5wMSgpXTsKKyAgICBbcmVzdWx0
IGNsb3NlUGF0aF07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIEhBVkUoVUlfVEVYVF9T
RUxFQ1RJT05fUkVDVF9DVVNUT01fSEFORExFX0lORk8pCisKKy0gKFdLVGV4dFNlbGVjdGlvblJl
Y3RDdXN0b21IYW5kbGVJbmZvICopX2N1c3RvbUhhbmRsZUluZm8KK3sKKyAgICBpZiAoX3NlbGVj
dGlvbkdlb21ldHJ5LmJlaGF2aW9yKCkgPT0gV2ViQ29yZTo6U2VsZWN0aW9uUmVuZGVyaW5nQmVo
YXZpb3I6OkNvYWxlc2NlQm91bmRpbmdSZWN0cykKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IGF1dG8gc2NhbGVkUXVhZCA9IF9zZWxlY3Rpb25HZW9tZXRyeS5xdWFkKCk7CisgICAgc2NhbGVk
UXVhZC5zY2FsZShfc2NhbGVGYWN0b3IpOworICAgIHJldHVybiBhZG9wdE5TKFtbV0tUZXh0U2Vs
ZWN0aW9uUmVjdEN1c3RvbUhhbmRsZUluZm8gYWxsb2NdIGluaXRXaXRoRmxvYXRRdWFkOnNjYWxl
ZFF1YWRdKS5hdXRvcmVsZWFzZSgpOworfQorCisjZW5kaWYgLy8gSEFWRShVSV9URVhUX1NFTEVD
VElPTl9SRUNUX0NVU1RPTV9IQU5ETEVfSU5GTykKKwogLSAoQ0dSZWN0KXJlY3QKIHsKICAgICBy
ZXR1cm4gX3NlbGVjdGlvbkdlb21ldHJ5LnJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggYWU1ZmZmODY3NGYzYjYz
OTNjMWEyMzlmNDZkNDM4NDk4NzZjMmZlZC4uZDgxZTIxOGJlOGIxYTcyNTFhOGJjMzc1MGI1YjZl
YzU5YzdlYTU4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KQEAgLTI1OCwxMCArMjU4LDE2IEBAIGJvb2wgV2ViUGFnZTo6cGxh
dGZvcm1OZWVkc0xheW91dEZvckVkaXRvclN0YXRlKGNvbnN0IEZyYW1lJiBmcmFtZSkgY29uc3QK
ICAgICByZXR1cm4gbmVlZHNMYXlvdXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbnZlcnRDb250ZW50
VG9Sb290Vmlldyhjb25zdCBGcmFtZVZpZXcmIHZpZXcsIFZlY3RvcjxTZWxlY3Rpb25HZW9tZXRy
eT4mIHJlY3RzKQorc3RhdGljIHZvaWQgY29udmVydENvbnRlbnRUb1Jvb3RWaWV3KGNvbnN0IEZy
YW1lVmlldyYgdmlldywgVmVjdG9yPFNlbGVjdGlvbkdlb21ldHJ5PiYgZ2VvbWV0cmllcykKIHsK
LSAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0cykKLSAgICAgICAgcmVjdC5zZXRSZWN0KHZpZXcu
Y29udGVudHNUb1Jvb3RWaWV3KHJlY3QucmVjdCgpKSk7CisgICAgZm9yIChhdXRvJiBnZW9tZXRy
eSA6IGdlb21ldHJpZXMpIHsKKyAgICAgICAgYXV0byBjb252ZXJ0ZWRRdWFkID0gZ2VvbWV0cnku
cXVhZCgpOworICAgICAgICBjb252ZXJ0ZWRRdWFkLnNldFAxKHZpZXcuY29udGVudHNUb1Jvb3RW
aWV3KGNvbnZlcnRlZFF1YWQucDEoKSkpOworICAgICAgICBjb252ZXJ0ZWRRdWFkLnNldFAyKHZp
ZXcuY29udGVudHNUb1Jvb3RWaWV3KGNvbnZlcnRlZFF1YWQucDIoKSkpOworICAgICAgICBjb252
ZXJ0ZWRRdWFkLnNldFAzKHZpZXcuY29udGVudHNUb1Jvb3RWaWV3KGNvbnZlcnRlZFF1YWQucDMo
KSkpOworICAgICAgICBjb252ZXJ0ZWRRdWFkLnNldFA0KHZpZXcuY29udGVudHNUb1Jvb3RWaWV3
KGNvbnZlcnRlZFF1YWQucDQoKSkpOworICAgICAgICBnZW9tZXRyeS5zZXRRdWFkKGNvbnZlcnRl
ZFF1YWQpOworICAgIH0KIH0KIAogdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRl
KEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2YjVlNGI0
MGU1ZjJiNjIxM2I3YzZkZmUyNDhkMDY2YTEyNmI1MWNmLi4yNDFlNGMyM2JiZjAzMDE1MzM5MTUw
MzZjZjg4NmFjMTZjN2NiOTYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMDQtMjEgIFdl
bnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gVGV4
dCBzZWxlY3Rpb24gaW4gaW1hZ2Ugb3ZlcmxheXMgc2hvdWxkIG5vdCBiZSBsaW1pdGVkIHRvIHJl
Y3RpbGluZWFyIHF1YWRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjQ4MzcKKyAgICAgICAgPHJkYXI6Ly83NjgyOTk4MT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgIEFkZCBhIG5ldyBsYXlvdXQgdGVzdCB0byBl
eGVyY2lzZSB0aGUgbmV3IHNlbGVjdGlvbiByZW5kZXJpbmcgYmVoYXZpb3IuCisKKyAgICAgICAg
KiBmYXN0L2ltYWdlcy9pbWFnZS1leHRyYWN0aW9uL2lvcy9zZWxlY3Rpb24tcmVjdHMtaW4taW1h
Z2Utb3ZlcmxheS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaW1hZ2VzL2lt
YWdlLWV4dHJhY3Rpb24vaW9zL3NlbGVjdGlvbi1yZWN0cy1pbi1pbWFnZS1vdmVybGF5Lmh0bWw6
IEFkZGVkLgorCiAyMDIxLTA0LTIxICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUkVHUkVTU0lPTihyMjU2MTA3KTogVGV4dCBtb3ZlcyBhcm91bmQgd2hlbiBzZWxl
Y3RpbmcgYXQgaHR0cHM6Ly93d3cudG9reW8tc3BvcnRzLmNvLmpwL2VudGFtZS9uZXdzLzI4MzQx
ODcvCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFnZS1leHRyYWN0aW9u
L2lvcy9zZWxlY3Rpb24tcmVjdHMtaW4taW1hZ2Utb3ZlcmxheS1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFnZS1leHRyYWN0aW9uL2lvcy9zZWxlY3Rpb24tcmVjdHMt
aW4taW1hZ2Utb3ZlcmxheS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTcyZDY0YzFmZTA1NTY4
ODE3NGI1NmQ2YzA5NjE0ZjFiOGFjMTJiNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvaW1hZ2VzL2ltYWdlLWV4dHJhY3Rpb24vaW9zL3NlbGVjdGlvbi1yZWN0cy1pbi1pbWFn
ZS1vdmVybGF5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYgQEAKK1BBU1MgaW5pdGlhbFNlbGVj
dGlvblJlY3RzLmxlbmd0aCBpcyAxCitQQVNTIHNlbGVjdGlvblJlY3RzQWZ0ZXJTZWxlY3RpbmdB
bGwubGVuZ3RoIGlzIDQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFnZS1leHRy
YWN0aW9uL2lvcy9zZWxlY3Rpb24tcmVjdHMtaW4taW1hZ2Utb3ZlcmxheS5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2UtZXh0cmFjdGlvbi9pb3Mvc2VsZWN0aW9uLXJlY3RzLWlu
LWltYWdlLW92ZXJsYXkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTkwNzlmNGRlYWQ2Yzg4YjM3ZmQ1MjM4
MTdkMDFmMzdkOTcwYmNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFn
ZXMvaW1hZ2UtZXh0cmFjdGlvbi9pb3Mvc2VsZWN0aW9uLXJlY3RzLWluLWltYWdlLW92ZXJsYXku
aHRtbApAQCAtMCwwICsxLDY1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy91aS1oZWxwZXIuanMiPjwvc2NyaXB0
PgorPHN0eWxlPgoraW1nIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOwor
ICAgIGxlZnQ6IDA7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8aW1nIHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2dyZWVuLTQwMHg0MDAucG5nIj48L2ltZz4KKzxzY3JpcHQ+Citqc1Rlc3RJ
c0FzeW5jID0gdHJ1ZTsKKworYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGFzeW5jICgpID0+IHsK
KyAgICBsZXQgaW1hZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJpbWciKTsKKyAgICBpbnRl
cm5hbHMuaW5zdGFsbEltYWdlT3ZlcmxheShpbWFnZSwgWworICAgICAgICB7CisgICAgICAgICAg
ICB0ZXh0OiAib25lIiwKKyAgICAgICAgICAgIHRvcExlZnQ6IG5ldyBET01Qb2ludFJlYWRPbmx5
KDAuMSwgMC4yNSksCisgICAgICAgICAgICB0b3BSaWdodDogbmV3IERPTVBvaW50UmVhZE9ubHko
MC4yNSwgMC4xKSwKKyAgICAgICAgICAgIGJvdHRvbVJpZ2h0OiBuZXcgRE9NUG9pbnRSZWFkT25s
eSgwLjM1LCAwLjIpLAorICAgICAgICAgICAgYm90dG9tTGVmdDogbmV3IERPTVBvaW50UmVhZE9u
bHkoMC4yLCAwLjM1KQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB0ZXh0OiAi
dHdvIiwKKyAgICAgICAgICAgIHRvcExlZnQ6IG5ldyBET01Qb2ludFJlYWRPbmx5KDAuMywgMC40
NSksCisgICAgICAgICAgICB0b3BSaWdodDogbmV3IERPTVBvaW50UmVhZE9ubHkoMC40NSwgMC4z
KSwKKyAgICAgICAgICAgIGJvdHRvbVJpZ2h0OiBuZXcgRE9NUG9pbnRSZWFkT25seSgwLjU1LCAw
LjQpLAorICAgICAgICAgICAgYm90dG9tTGVmdDogbmV3IERPTVBvaW50UmVhZE9ubHkoMC40LCAw
LjU1KQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB0ZXh0OiAidGhyZWUiLAor
ICAgICAgICAgICAgdG9wTGVmdDogbmV3IERPTVBvaW50UmVhZE9ubHkoMC41LCAwLjY1KSwKKyAg
ICAgICAgICAgIHRvcFJpZ2h0OiBuZXcgRE9NUG9pbnRSZWFkT25seSgwLjY1LCAwLjUpLAorICAg
ICAgICAgICAgYm90dG9tUmlnaHQ6IG5ldyBET01Qb2ludFJlYWRPbmx5KDAuNzUsIDAuNiksCisg
ICAgICAgICAgICBib3R0b21MZWZ0OiBuZXcgRE9NUG9pbnRSZWFkT25seSgwLjYsIDAuNzUpCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHQ6ICJmb3VyIiwKKyAgICAgICAg
ICAgIHRvcExlZnQ6IG5ldyBET01Qb2ludFJlYWRPbmx5KDAuNywgMC44NSksCisgICAgICAgICAg
ICB0b3BSaWdodDogbmV3IERPTVBvaW50UmVhZE9ubHkoMC44NSwgMC43KSwKKyAgICAgICAgICAg
IGJvdHRvbVJpZ2h0OiBuZXcgRE9NUG9pbnRSZWFkT25seSgwLjk1LCAwLjgpLAorICAgICAgICAg
ICAgYm90dG9tTGVmdDogbmV3IERPTVBvaW50UmVhZE9ubHkoMC44LCAwLjk1KQorICAgICAgICB9
CisgICAgXSk7CisKKyAgICBhd2FpdCBVSUhlbHBlci5sb25nUHJlc3NBdFBvaW50KDkwLCA5MCk7
CisgICAgaW5pdGlhbFNlbGVjdGlvblJlY3RzID0gYXdhaXQgVUlIZWxwZXIud2FpdEZvclNlbGVj
dGlvblRvQXBwZWFyKCk7CisgICAgc2hvdWxkQmUoImluaXRpYWxTZWxlY3Rpb25SZWN0cy5sZW5n
dGgiLCAiMSIpOworCisgICAgdGVzdFJ1bm5lci5leGVjQ29tbWFuZCgiU2VsZWN0QWxsIik7Cisg
ICAgYXdhaXQgVUlIZWxwZXIuZW5zdXJlUHJlc2VudGF0aW9uVXBkYXRlKCk7CisgICAgc2VsZWN0
aW9uUmVjdHNBZnRlclNlbGVjdGluZ0FsbCA9IGF3YWl0IFVJSGVscGVyLmdldFVJU2VsZWN0aW9u
Vmlld1JlY3RzKCk7CisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJlY3RzQWZ0ZXJTZWxlY3RpbmdB
bGwubGVuZ3RoIiwgIjQiKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>