<?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>225557</bug_id>
          
          <creation_ts>2021-05-07 23:00:52 -0700</creation_ts>
          <short_desc>Factor out text indicator bounce layer to be cross-platform</short_desc>
          <delta_ts>2021-05-11 10:47:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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="Megan Gardner">megan_gardner</reporter>
          <assigned_to name="Megan Gardner">megan_gardner</assigned_to>
          <cc>darin</cc>
    
    <cc>rniwa</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1758159</commentid>
    <comment_count>0</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2021-05-07 23:00:52 -0700</bug_when>
    <thetext>Factor out find bounce layer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758162</commentid>
    <comment_count>1</comment_count>
      <attachid>428078</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2021-05-07 23:17:05 -0700</bug_when>
    <thetext>Created attachment 428078
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758187</commentid>
    <comment_count>2</comment_count>
      <attachid>428078</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-05-08 08:47:32 -0700</bug_when>
    <thetext>Comment on attachment 428078
Patch

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

&gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.h:35
&gt; +    RefPtr&lt;WebCore::TextIndicator&gt; _textIndicator;

Nit - it looks like this could be a Ref&lt;WebCore::TextIndicator&gt; instead?

&gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.mm:167
&gt; +    RetainPtr&lt;CGColorRef&gt; rimShadowColor = CGColorCreateGenericGray(0, 0.35);
&gt; +    RetainPtr&lt;CGColorRef&gt; dropShadowColor = CGColorCreateGenericGray(0, 0.2);
&gt; +    RetainPtr&lt;CGColorRef&gt; borderColor = CGColorCreateSRGB(0.96, 0.9, 0, 1);

adoptCF() here to fix the leaks.

&gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.mm:171
&gt; +    highlightColor = CGColorCreateSRGB(.99, .89, 0.22, 1.0);

(This leaks too)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758221</commentid>
    <comment_count>3</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-05-08 16:38:57 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #2)
&gt; Comment on attachment 428078 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428078&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.h:35
&gt; &gt; +    RefPtr&lt;WebCore::TextIndicator&gt; _textIndicator;
&gt; 
&gt; Nit - it looks like this could be a Ref&lt;WebCore::TextIndicator&gt; instead?

(Never mind — as you discovered, we can&apos;t use Ref because ivars in ObjC++ must be default constructible :P)

&gt; 
&gt; &gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.mm:167
&gt; &gt; +    RetainPtr&lt;CGColorRef&gt; rimShadowColor = CGColorCreateGenericGray(0, 0.35);
&gt; &gt; +    RetainPtr&lt;CGColorRef&gt; dropShadowColor = CGColorCreateGenericGray(0, 0.2);
&gt; &gt; +    RetainPtr&lt;CGColorRef&gt; borderColor = CGColorCreateSRGB(0.96, 0.9, 0, 1);
&gt; 
&gt; adoptCF() here to fix the leaks.
&gt; 
&gt; &gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.mm:171
&gt; &gt; +    highlightColor = CGColorCreateSRGB(.99, .89, 0.22, 1.0);
&gt; 
&gt; (This leaks too)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758274</commentid>
    <comment_count>4</comment_count>
      <attachid>428110</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2021-05-08 21:07:41 -0700</bug_when>
    <thetext>Created attachment 428110
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758285</commentid>
    <comment_count>5</comment_count>
      <attachid>428110</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-08 21:38:42 -0700</bug_when>
    <thetext>Comment on attachment 428110
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Factor out find bounce layer

This really undersells the change. It&apos;s not just &quot;factor it out&quot; but really &quot;reimplement it in terms of CALayer to make it cross-platform&quot;

&gt; Source/WebCore/ChangeLog:9
&gt; +        compatable with iOS. 

sp: Compatible

&gt; Source/WebCore/ChangeLog:11
&gt; +        No behavior change. 

Please make sure you test find in both modern WebKit and WebKitLegacy, since there are precisely 0 automated tests for TextIndicatorWindow+friends.

&gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.mm:163
&gt; +    

Weird extraneous newline

&gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.mm:165
&gt; +    RetainPtr&lt;CGColorRef&gt; rimShadowColor =adoptCF(CGColorCreateGenericGray(0, 0.35));

Missing a space after the =

&gt; Source/WebCore/page/mac/TextIndicatorWindow.mm:119
&gt; +    [m_textIndicatorView setWantsLayer:YES];
&gt; +    [m_textIndicatorView setLayer:m_textIndicatorLayer.get()];

IIRC the order of these is important. The documentation says that you want them in the opposite order to make a layer-hosting view, which I think is the mode you want? Take a gander at the discussion section in https://developer.apple.com/documentation/appkit/nsview/1483695-wantslayer?language=objc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758286</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-08 21:39:45 -0700</bug_when>
    <thetext>(In reply to Tim Horton from comment #5)
&gt; Comment on attachment 428110 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428110&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; +        Factor out find bounce layer
&gt; 
&gt; This really undersells the change. It&apos;s not just &quot;factor it out&quot; but really
&gt; &quot;reimplement it in terms of CALayer to make it cross-platform&quot;
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        compatable with iOS. 
&gt; 
&gt; sp: Compatible
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        No behavior change. 
&gt; 
&gt; Please make sure you test find in both modern WebKit and WebKitLegacy, since
&gt; there are precisely 0 automated tests for TextIndicatorWindow+friends.

Not just find: test Lookup! (with force-touch trackpad, or three-finger tap, or right-click on a selection; they all use different animations)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758288</commentid>
    <comment_count>7</comment_count>
      <attachid>428110</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-08 21:49:19 -0700</bug_when>
    <thetext>Comment on attachment 428110
Patch

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

Some style tweaks you could consider: not required

&gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.mm:57
&gt; +const CFTimeInterval bounceAnimationDuration = 0.12;
&gt; +const CFTimeInterval bounceWithCrossfadeAnimationDuration = 0.3;
&gt; +const CFTimeInterval fadeInAnimationDuration = 0.15;
&gt; +const CFTimeInterval timeBeforeFadeStarts = bounceAnimationDuration + 0.2;
&gt; +const CFTimeInterval fadeOutAnimationDuration = 0.3;
&gt; +
&gt; +const CGFloat midBounceScale = 1.25;
&gt; +const CGFloat borderWidth = 0;
&gt; +const CGFloat cornerRadius = 0;
&gt; +const CGFloat dropShadowOffsetX = 0;
&gt; +const CGFloat dropShadowOffsetY = 1;
&gt; +const CGFloat dropShadowBlurRadius = 2;
&gt; +const CGFloat rimShadowBlurRadius = 1;
&gt; +
&gt; +NSString *textLayerKey = @&quot;TextLayer&quot;;
&gt; +NSString *dropShadowLayerKey = @&quot;DropShadowLayer&quot;;
&gt; +NSString *rimShadowLayerKey = @&quot;RimShadowLayer&quot;;

We should use constexpr for all of these.

&gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.mm:59
&gt; +using namespace WebCore;

We should avoid this, and instead write the WebCore:: prefix where needed.

&gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.mm:65
&gt; +#if PLATFORM(MAC)
&gt; +OBJC_CLASS NSColor;
&gt; +using CocoaColor = NSColor;
&gt; +#endif

Should get this from the CocoaColor.h header. Since we need this in WebCore, should move that header from WebKit to WebCore.

&gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.mm:161
&gt; +    RetainPtr&lt;NSMutableArray&gt; bounceLayers = adoptNS([[NSMutableArray alloc] init]);

We should use auto here.

&gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.mm:167
&gt; +    RetainPtr&lt;CGColorRef&gt; rimShadowColor =adoptCF(CGColorCreateGenericGray(0, 0.35));
&gt; +    RetainPtr&lt;CGColorRef&gt; dropShadowColor = adoptCF(CGColorCreateGenericGray(0, 0.2));
&gt; +    RetainPtr&lt;CGColorRef&gt; borderColor = adoptCF(CGColorCreateSRGB(0.96, 0.9, 0, 1));

We should use auto for these. Also there is a missing space after the &quot;=&quot; in the rimShadowColor line.

&gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.mm:174
&gt; +    Vector&lt;FloatRect&gt; textRectsInBoundingRectCoordinates = _textIndicator-&gt;textRectsInBoundingRectCoordinates();

auto

&gt; Source/WebCore/page/cocoa/WebTextIndicatorLayer.mm:176
&gt; +    Vector&lt;Path&gt; paths = PathUtilities::pathsWithShrinkWrappedRects(textRectsInBoundingRectCoordinates, cornerRadius);

auto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758935</commentid>
    <comment_count>8</comment_count>
      <attachid>428287</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2021-05-11 09:56:31 -0700</bug_when>
    <thetext>Created attachment 428287
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758968</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-11 10:46:48 -0700</bug_when>
    <thetext>Committed r277330 (237589@main): &lt;https://commits.webkit.org/237589@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428287.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758969</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-11 10:47:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/77853815&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428078</attachid>
            <date>2021-05-07 23:17:05 -0700</date>
            <delta_ts>2021-05-08 21:07:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225557-20210508001704.patch</filename>
            <type>text/plain</type>
            <size>47018</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk2MTRhNzY0NGU3MDA0
MGY1OTlhOGY4OTk5MTgxZDIxMjhlN2M3ZS4uNGJkNzAxZGVhZmE4YTI2MDI3MTAyMjIxNDIzMmZk
MDk3YTQzODUyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIxLTA1LTA3ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG91
dCBmaW5kIGJvdW5jZSBsYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1NTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRmFjdG9yIG91dCB0aGUgdGV4dCBpbmRpY2F0b3IgYm91bmNlIGxheWVyIGlu
IHByZXBhcmF0aW9uIG9mIG1ha2luZyB0aGlzIAorICAgICAgICBjb21wYXRhYmxlIHdpdGggaU9T
LiAKKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuIAorCisgICAgICAgICogU291cmNlc0Nv
Y29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5oOgorICAgICAgICAqIHBhZ2Uv
bWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW06CisgICAgICAgIChXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yV2luZG93OjpzZXRBbmltYXRpb25Qcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
SW5kaWNhdG9yV2luZG93OjpjbGVhclRleHRJbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEluZGljYXRvcldpbmRvdzo6c2V0VGV4dEluZGljYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yV2luZG93OjpjbG9zZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yV2luZG93OjpzdGFydEZhZGVPdXQpOgorICAgICAgICAoaW5kaWNhdG9yV2Fu
dHNCb3VuY2UpOiBEZWxldGVkLgorICAgICAgICAoaW5kaWNhdG9yV2FudHNDb250ZW50Q3Jvc3Nm
YWRlKTogRGVsZXRlZC4KKyAgICAgICAgKGluZGljYXRvcldhbnRzRmFkZUluKTogRGVsZXRlZC4K
KyAgICAgICAgKGluZGljYXRvcldhbnRzTWFudWFsQW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV2ViVGV4dEluZGljYXRvclZpZXcgaW5pdFdpdGhGcmFtZTp0ZXh0SW5kaWNhdG9yOm1h
cmdpbjpvZmZzZXQ6XSk6IERlbGV0ZWQuCisgICAgICAgIChjcmVhdGVCb3VuY2VBbmltYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChjcmVhdGVTaGFkb3dGYWRlQW5pbWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKGNyZWF0ZUZhZGVJbkFuaW1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlRl
eHRJbmRpY2F0b3JWaWV3IF9hbmltYXRpb25EdXJhdGlvbl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXZWJUZXh0SW5kaWNhdG9yVmlldyBoYXNDb21wbGV0ZWRBbmltYXRpb25dKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV2ViVGV4dEluZGljYXRvclZpZXcgcHJlc2VudF0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXZWJUZXh0SW5kaWNhdG9yVmlldyBoaWRlV2l0aENvbXBsZXRpb25IYW5kbGVyOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXZWJUZXh0SW5kaWNhdG9yVmlldyBzZXRBbmltYXRpb25Q
cm9ncmVzczpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVGV4dEluZGljYXRvclZpZXcgaXNG
bGlwcGVkXSk6IERlbGV0ZWQuCisKIDIwMjEtMDUtMDUgIENhbWVyb24gTWNDb3JtYWNrICA8aGV5
Y2FtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIERpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6Q29udGV4dFN0YXRlOjp3YXNVc2VkRm9yRHJhd2luZwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKaW5kZXggYTc1ZGNjN2VhYWY5ZGE5MDgxYmJlNzk3YmM0OTg0Yjc4Njc5NWVmZC4uNjM2NDcz
ZjRiNDg1NGQzZDY0ZDJhMWQzNGZmYjVkYWY5NDEwOTA3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CkBAIC0xODIsNiArMTgyLDcgQEAgcGFnZS9jb2NvYS9QZXJmb3JtYW5jZUxvZ2dpbmdDb2Nv
YS5tbQogcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tCiBwYWdlL2NvY29h
L1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQogcGFnZS9jb2NvYS9TZXR0aW5nc0Jhc2VDb2Nv
YS5tbQorcGFnZS9jb2NvYS9XZWJUZXh0SW5kaWNhdG9yTGF5ZXIubW0KIHBhZ2UvaW9zL0NvbnRl
bnRDaGFuZ2VPYnNlcnZlci5jcHAKIHBhZ2UvaW9zL0RPTVRpbWVySG9sZGluZ1RhbmsuY3BwCiBw
YWdlL2lvcy9FdmVudEhhbmRsZXJJT1MubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmMTkzNTNjOWYxYjk1NWU1NGQzZDFhMjFk
OTMzZTZjMmE0N2M2MzAzLi44OWUyZWQyM2E4Njk0ZTY5NmJiMGQyZDRkMDZjMzU4MjdjMGVjZjlk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMjcxLDYgKzEyNzEsNyBAQAogCQk0NEFFMDQ1QzI1NzlDRkZCMDBDNDJFNjUgLyog
QXBwSGlnaGxpZ2h0UmFuZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NEFFMDQ1QTI1NzlDRkZCMDBDNDJFNjUgLyogQXBwSGlnaGxpZ2h0UmFu
Z2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNDRDOTkxODYwRjNEMUVCRTAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEM5OTE4NTBGM0QxRUJF
MDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCAqLzsgfTsKIAkJNDRDOTkxOUYwRjNEMjEw
RTAwNTg2NjcwIC8qIFRoZW1lSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCAqLzsg
fTsKKwkJNDRDRTJCQkYyNjQzNzlBRjAwN0FFMTEwIC8qIFdlYlRleHRJbmRpY2F0b3JMYXllci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRDRTJCQkUy
NjQzNzk5RTAwN0FFMTEwIC8qIFdlYlRleHRJbmRpY2F0b3JMYXllci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0RTM0OUY5MjQ2RjRFMTkwMDY4
NDc5QyAvKiBMaWJXZWJSVENFbnVtVHJhaXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0NEUzNDlGNzI0NkY0REM3MDA2ODQ3OUMgLyogTGliV2ViUlRD
RW51bVRyYWl0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTQ1MENFQkYxMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTBDRUJFRjE1MDcz
QkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ1MTI1MDIzMTVEQ0UzN0QwMDJGODRFMiAvKiBT
cGluQnV0dG9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDUxMjUwMjExNURDRTM3RDAwMkY4NEUyIC8qIFNwaW5CdXR0b25FbGVtZW50Lmgg
Ki87IH07CkBAIC04MjU1LDYgKzgyNTYsOCBAQAogCQk0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAg
LyogVGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhlbWVJT1Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRDOTkxOUUwRjNEMjEwRTAwNTg2Njcw
IC8qIFRoZW1lSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
VGhlbWVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0Q0EyODQzMjQ1RkNB
NTAwMEM5NEM3RiAvKiBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHRJT1MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0Q0UyQkJDMjY0Mzc5OUQw
MDdBRTExMCAvKiBXZWJUZXh0SW5kaWNhdG9yTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJUZXh0SW5kaWNhdG9yTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQ0Q0UyQkJFMjY0Mzc5OUUwMDdBRTExMCAvKiBXZWJUZXh0SW5kaWNhdG9yTGF5ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViVGV4dEluZGljYXRvckxheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ0RDhEQTk4MTM5NTQ1QkUwMDMzN0I3NSAvKiBTVkdNUGF0aEVsZW1lbnQuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR01QYXRoRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ0RDhEQTlBMTM5NTQ1Q0QwMDMzN0I3NSAvKiBTVkdBbmltYXRl
TW90aW9uRWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEUzNDlGNzI0NkY0
REM3MDA2ODQ3OUMgLyogTGliV2ViUlRDRW51bVRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBMaWJXZWJSVENFbnVtVHJhaXRzLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGli
V2ViUlRDRW51bVRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE4MzQs
NiArMjE4MzcsOCBAQAogCQkJCUFERkUyQjU0MUJENUY0MTIwMERBQjQ1NyAvKiBSZXNvdXJjZVVz
YWdlT3ZlcmxheUNvY29hLm1tICovLAogCQkJCUE1MDcxRTg4MUM1NkQ0RkEwMDk5NTFCRSAvKiBS
ZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2EubW0gKi8sCiAJCQkJQTE4MkQ1QjYxQkU3MjI2MjAwODdB
N0NDIC8qIFNldHRpbmdzQmFzZUNvY29hLm1tICovLAorCQkJCTQ0Q0UyQkJFMjY0Mzc5OUUwMDdB
RTExMCAvKiBXZWJUZXh0SW5kaWNhdG9yTGF5ZXIuaCAqLywKKwkJCQk0NENFMkJCQzI2NDM3OTlE
MDA3QUUxMTAgLyogV2ViVGV4dEluZGljYXRvckxheWVyLm1tICovLAogCQkJKTsKIAkJCXBhdGgg
PSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zMTQyNiw3ICszMTQzMSw2
IEBACiAJCQkJMzFBNzk1QzcxODg4QkNCMjAwMzgyRjkwIC8qIEFOR0xFSW5zdGFuY2VkQXJyYXlz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUU5MTJBQjBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5p
bWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk0NDlEODY0RjI2NDBDOUM1MDAwMTIy
REUgLyogSGlnaGxpZ2h0VmlzaWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzFFMkM0MjYy
MUM5MzUyODAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTk4NDgwMTFBMUQ4MTdCMDBBMTMzMTggLyogQW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcxMUFEMTI2MjM2RDg2RTUwMDZGRjM3QyAvKiBBbmltYXRpb25FdmVudEJh
c2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzI2NDUsNiArMzI2NDksNyBAQAogCQkJCTQ0MzBEMDBC
MjU3NUE4M0UwMDQ2RDQwMSAvKiBIaWdobGlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQ0ZB
QkJEMThDMEFGNzgwMDZGODQ1MCAvKiBIaWdobGlnaHREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0NDMwRDAwRDI1NzVBOEE1MDA0NkQ0MDEgLyogSGlnaGxpZ2h0UmVnaXN0ZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTQ0OUQ4NjRGMjY0MEM5QzUwMDAxMjJERSAvKiBIaWdobGlnaHRWaXNpYmls
aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0RDE1NDBDMjc1QzhCMDA2QkM2MTcgLyogSGlz
dG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdEQ0UyMDIxMDgwN0M3NTAwNTdEMzk0IC8qIEhp
c3RvcnlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTc0MUQxMTBCMDcyNTlBMDBF
RDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAtMzQ4ODMsNyArMzQ4ODgs
NiBAQAogCQkJCUU0NkI0MUY5MUNCMjRFNzAwMDhGMTFERSAvKiBTY3JpcHREaXNhbGxvd2VkU2Nv
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OThBRUQyMTNGQjIyNEQwMDkwQjFBQSAvKiBTY3Jp
cHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4QTQ4NDc4MEU1
MjcyQzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEQ4
NkU2RDI2NDAzOTRDMDBCNjI0MjUgLyogU3R5bGVTY29wZU9yZGluYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzRTRFMkE4MUUzQjE3MTAwMDIzQkI4QSAvKiBTY3JpcHRFbGVtZW50Q2FjaGVkU2Ny
aXB0RmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTExQzlEOUIwRUIzNjgxMjAwRTQwOURC
IC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMTIyM0JB
MjYwMjQ0RkUwMEIwQTBCNiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNTE5OSw2ICszNTIwMyw3IEBACiAJCQkJRTQ5NDZFQUYxNTZFNjRE
RDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NEYz
N0UyMzY2MTYyNjAwM0FBNUM3IC8qIFN0eWxlUnVsZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUU0NjFENjVGMUJCMEM4MEQwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmggaW4gSGVhZGVycyAqLywK
KwkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUgLyogU3R5bGVTY29wZU9yZGluYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTRBNEY0OEFBMTZCMERGQzAwMEVEQkIyOSAvKiBTdHlsZVNjb3BlUnVs
ZVNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0N0E1RTNFMTk1QjhDOEEwMDQ4MzEwMCAvKiBT
dHlsZVNjcm9sbFNuYXBQb2ludHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTlENjM4MDEwMUFGMTcz
MjIwMDMxQTE1QyAvKiBTdHlsZVNlbGZBbGlnbm1lbnREYXRhLmggaW4gSGVhZGVycyAqLywKQEAg
LTM1Nzk2LDYgKzM1ODAxLDcgQEAKIAkJCQk5M0IzOEVDNDI1ODIxREI3MDAxOThFNjMgLyogV2Vi
U3BlZWNoUmVjb2duaXplclRhc2tNb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxRjg3NTZCMjFF
MjJDMzM1MDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMURFQTQ1NjFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFja2Ry
b3BMYXllci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDRDRTJCQkYyNjQzNzlBRjAwN0FFMTEwIC8q
IFdlYlRleHRJbmRpY2F0b3JMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBGQTMxNDk2
OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxREFCMzExMjI1MUQ2QkYzMDBGQzk0ODUgLyogV2ViVmlkZW9Db250YWluZXJMYXllci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJM0Y0MkIzMUQxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NvY29hL1dlYlRleHRJbmRpY2F0b3JMYXllci5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9jb2NvYS9XZWJUZXh0SW5kaWNhdG9yTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDEz
ZDA0MGVmZmI3NWIwZWEwMDRlYTU1MWUzMjIxNTRhZTE4ZmFmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9XZWJUZXh0SW5kaWNhdG9yTGF5ZXIuaApAQCAtMCww
ICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgIlRleHRJbmRp
Y2F0b3IuaCIKKyNpbXBvcnQgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2ltcG9ydCA8d3RmL1JlZlB0
ci5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4K
KworQGludGVyZmFjZSBXZWJUZXh0SW5kaWNhdG9yTGF5ZXIgOiBDQUxheWVyIHsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcj4gX3RleHRJbmRpY2F0b3I7CisgICAgUmV0YWluUHRy
PE5TQXJyYXk+IF9ib3VuY2VMYXllcnM7CisgICAgQ0dTaXplIF9tYXJnaW47CisgICAgYm9vbCBf
aGFzQ29tcGxldGVkQW5pbWF0aW9uOworICAgIEJPT0wgX2ZhZGluZ091dDsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yJil0ZXh0SW5kaWNhdG9yIG1hcmdpbjooQ0dTaXplKW1hcmdpbiBv
ZmZzZXQ6KENHUG9pbnQpb2Zmc2V0OworCistIChib29sKWluZGljYXRvcldhbnRzTWFudWFsQW5p
bWF0aW9uOihjb25zdCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yJilpbmRpY2F0b3I7CistIChib29s
KWluZGljYXRvcldhbnRzQm91bmNlOihjb25zdCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yJilpbmRp
Y2F0b3I7CisKKy0gKHZvaWQpcHJlc2VudDsKKy0gKHZvaWQpaGlkZVdpdGhDb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKKworLSAodm9pZClzZXRBbmlt
YXRpb25Qcm9ncmVzczooZmxvYXQpcHJvZ3Jlc3M7CistIChCT09MKWhhc0NvbXBsZXRlZEFuaW1h
dGlvbjsKKworQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1pc0ZhZGluZ091dCkgQk9PTCBm
YWRpbmdPdXQ7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2Ev
V2ViVGV4dEluZGljYXRvckxheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9XZWJU
ZXh0SW5kaWNhdG9yTGF5ZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmM5NDNmZmNkMjUzYWU0MGVhNGZlNDll
MDhhZTNhMzg2NmZiMzAwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y29jb2EvV2ViVGV4dEluZGljYXRvckxheWVyLm1tCkBAIC0wLDAgKzEsNDAxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJUZXh0SW5kaWNhdG9yTGF5ZXIu
aCIKKworI2ltcG9ydCAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2ltcG9ydCAiUGF0aFV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGV4dEluZGljYXRv
ci5oIgorI2ltcG9ydCAiV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlLmgiCisjaW1w
b3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2Nv
YS9RdWFydHpDb3JlU1BJLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxwYWwvc3Bp
L2NvY29hL05TQ29sb3JTUEkuaD4KKyNlbmRpZgorCitjb25zdCBDRlRpbWVJbnRlcnZhbCBib3Vu
Y2VBbmltYXRpb25EdXJhdGlvbiA9IDAuMTI7Citjb25zdCBDRlRpbWVJbnRlcnZhbCBib3VuY2VX
aXRoQ3Jvc3NmYWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjM7Citjb25zdCBDRlRpbWVJbnRlcnZh
bCBmYWRlSW5BbmltYXRpb25EdXJhdGlvbiA9IDAuMTU7Citjb25zdCBDRlRpbWVJbnRlcnZhbCB0
aW1lQmVmb3JlRmFkZVN0YXJ0cyA9IGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9uICsgMC4yOworY29u
c3QgQ0ZUaW1lSW50ZXJ2YWwgZmFkZU91dEFuaW1hdGlvbkR1cmF0aW9uID0gMC4zOworCitjb25z
dCBDR0Zsb2F0IG1pZEJvdW5jZVNjYWxlID0gMS4yNTsKK2NvbnN0IENHRmxvYXQgYm9yZGVyV2lk
dGggPSAwOworY29uc3QgQ0dGbG9hdCBjb3JuZXJSYWRpdXMgPSAwOworY29uc3QgQ0dGbG9hdCBk
cm9wU2hhZG93T2Zmc2V0WCA9IDA7Citjb25zdCBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRZID0g
MTsKK2NvbnN0IENHRmxvYXQgZHJvcFNoYWRvd0JsdXJSYWRpdXMgPSAyOworY29uc3QgQ0dGbG9h
dCByaW1TaGFkb3dCbHVyUmFkaXVzID0gMTsKKworTlNTdHJpbmcgKnRleHRMYXllcktleSA9IEAi
VGV4dExheWVyIjsKK05TU3RyaW5nICpkcm9wU2hhZG93TGF5ZXJLZXkgPSBAIkRyb3BTaGFkb3dM
YXllciI7CitOU1N0cmluZyAqcmltU2hhZG93TGF5ZXJLZXkgPSBAIlJpbVNoYWRvd0xheWVyIjsK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKworI2lmIFBMQVRGT1JNKE1BQykKK09CSkNf
Q0xBU1MgTlNDb2xvcjsKK3VzaW5nIENvY29hQ29sb3IgPSBOU0NvbG9yOworI2VuZGlmCisKK0Bp
bXBsZW1lbnRhdGlvbiBXZWJUZXh0SW5kaWNhdG9yTGF5ZXIKKworQHN5bnRoZXNpemUgZmFkaW5n
T3V0ID0gX2ZhZGluZ091dDsKKworc3RhdGljIGJvb2wgaW5kaWNhdG9yV2FudHNDb250ZW50Q3Jv
c3NmYWRlKGNvbnN0IFRleHRJbmRpY2F0b3ImIGluZGljYXRvcikKK3sKKyAgICBpZiAoIWluZGlj
YXRvci5kYXRhKCkuY29udGVudEltYWdlV2l0aEhpZ2hsaWdodCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgc3dpdGNoIChpbmRpY2F0b3IucHJlc2VudGF0aW9uVHJhbnNpdGlvbigpKSB7
CisgICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5k
Q3Jvc3NmYWRlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZToKKyAgICBjYXNlIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpGYWRlSW46CisgICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIGJvb2wgaW5kaWNhdG9yV2FudHNGYWRlSW4oY29uc3QgVGV4dEluZGljYXRvciYgaW5kaWNh
dG9yKQoreworICAgIHN3aXRjaCAoaW5kaWNhdG9yLnByZXNlbnRhdGlvblRyYW5zaXRpb24oKSkg
eworICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbjoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50YXRp
b25UcmFuc2l0aW9uOjpCb3VuY2U6CisgICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9u
VHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlOgorICAgIGNhc2UgVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy0g
KGJvb2wpaW5kaWNhdG9yV2FudHNCb3VuY2U6KGNvbnN0IFdlYkNvcmU6OlRleHRJbmRpY2F0b3Im
KWluZGljYXRvcgoreworICAgIHN3aXRjaCAoaW5kaWNhdG9yLnByZXNlbnRhdGlvblRyYW5zaXRp
b24oKSkgeworICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJv
dW5jZUFuZENyb3NzZmFkZToKKyAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFu
c2l0aW9uOjpCb3VuY2U6CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluOgorICAgIGNhc2UgVGV4dEluZGlj
YXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmU6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy0gKGJvb2wpaW5kaWNhdG9yV2FudHNNYW51YWxBbmltYXRpb246KGNvbnN0IFdlYkNvcmU6
OlRleHRJbmRpY2F0b3ImKWluZGljYXRvcgoreworICAgIHN3aXRjaCAoaW5kaWNhdG9yLnByZXNl
bnRhdGlvblRyYW5zaXRpb24oKSkgeworICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb246OkZhZGVJbjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFRl
eHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2U6CisgICAgY2FzZSBUZXh0
SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlOgorICAg
IGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmU6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3Qp
ZnJhbWUgdGV4dEluZGljYXRvcjooV2ViQ29yZTo6VGV4dEluZGljYXRvciYpdGV4dEluZGljYXRv
ciBtYXJnaW46KENHU2l6ZSltYXJnaW4gb2Zmc2V0OihDR1BvaW50KW9mZnNldAoreworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAg
IHNlbGYuZnJhbWUgPSBmcmFtZTsKKworICAgIF90ZXh0SW5kaWNhdG9yID0gJnRleHRJbmRpY2F0
b3I7CisgICAgX21hcmdpbiA9IG1hcmdpbjsKKworICAgIHNlbGYuYW5jaG9yUG9pbnQgPSBDR1Bv
aW50WmVybzsKKworICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gY29udGVudHNJbWFnZTsKKyAgICBG
bG9hdFNpemUgY29udGVudHNJbWFnZUxvZ2ljYWxTaXplIHsgMSwgMSB9OworICAgIGlmIChhdXRv
KiBjb250ZW50SW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCkpIHsKKyAgICAg
ICAgY29udGVudHNJbWFnZUxvZ2ljYWxTaXplID0gY29udGVudEltYWdlLT5zaXplKCk7CisgICAg
ICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgxIC8gX3RleHRJbmRpY2F0b3ItPmNv
bnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOworICAgICAgICBpZiAoaW5kaWNhdG9yV2FudHNDb250
ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikgJiYgX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJ
bWFnZVdpdGhIaWdobGlnaHQoKSkKKyAgICAgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dElu
ZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjb250ZW50c0ltYWdlID0gY29udGVudEltYWdlLT5uYXRp
dmVJbWFnZSgpOworICAgIH0KKworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYm91bmNl
TGF5ZXJzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisKKyAgICAK
KyAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gaGlnaGxpZ2h0Q29sb3I7CisgICAgUmV0YWluUHRy
PENHQ29sb3JSZWY+IHJpbVNoYWRvd0NvbG9yID0gQ0dDb2xvckNyZWF0ZUdlbmVyaWNHcmF5KDAs
IDAuMzUpOworICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBkcm9wU2hhZG93Q29sb3IgPSBDR0Nv
bG9yQ3JlYXRlR2VuZXJpY0dyYXkoMCwgMC4yKTsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4g
Ym9yZGVyQ29sb3IgPSBDR0NvbG9yQ3JlYXRlU1JHQigwLjk2LCAwLjksIDAsIDEpOworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBoaWdobGlnaHRDb2xvciA9IFtOU0NvbG9yIGZpbmRIaWdobGlnaHRD
b2xvcl0uQ0dDb2xvcjsKKyNlbHNlCisgICAgaGlnaGxpZ2h0Q29sb3IgPSBDR0NvbG9yQ3JlYXRl
U1JHQiguOTksIC44OSwgMC4yMiwgMS4wKTsKKyNlbmRpZgorICAgIAorICAgIFZlY3RvcjxGbG9h
dFJlY3Q+IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBfdGV4dEluZGljYXRv
ci0+dGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcygpOworCisgICAgVmVjdG9yPFBh
dGg+IHBhdGhzID0gUGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKHRl
eHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMsIGNvcm5lclJhZGl1cyk7CisKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIHBhdGggOiBwYXRocykgeworICAgICAgICBGbG9hdFJlY3QgcGF0aEJv
dW5kaW5nUmVjdCA9IHBhdGguYm91bmRpbmdSZWN0KCk7CisKKyAgICAgICAgUGF0aCB0cmFuc2xh
dGVkUGF0aDsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICAgICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZSgtcGF0aEJvdW5kaW5nUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAg
dHJhbnNsYXRlZFBhdGguYWRkUGF0aChwYXRoLCB0cmFuc2Zvcm0pOworCisgICAgICAgIEZsb2F0
UmVjdCBvZmZzZXRUZXh0UmVjdCA9IHBhdGhCb3VuZGluZ1JlY3Q7CisgICAgICAgIG9mZnNldFRl
eHRSZWN0Lm1vdmUob2Zmc2V0LngsIG9mZnNldC55KTsKKworICAgICAgICBGbG9hdFJlY3QgYm91
bmNlTGF5ZXJSZWN0ID0gb2Zmc2V0VGV4dFJlY3Q7CisgICAgICAgIGJvdW5jZUxheWVyUmVjdC5t
b3ZlKF9tYXJnaW4ud2lkdGgsIF9tYXJnaW4uaGVpZ2h0KTsKKworICAgICAgICBSZXRhaW5QdHI8
Q0FMYXllcj4gYm91bmNlTGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOwor
ICAgICAgICBbYm91bmNlTGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5
ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKKyAgICAgICAgW2JvdW5jZUxheWVyIHNldEZyYW1lOmJvdW5j
ZUxheWVyUmVjdF07CisgICAgICAgIFtib3VuY2VMYXllciBzZXRPcGFjaXR5OjBdOworICAgICAg
ICBbYm91bmNlTGF5ZXJzIGFkZE9iamVjdDpib3VuY2VMYXllci5nZXQoKV07CisKKyAgICAgICAg
RmxvYXRSZWN0IHllbGxvd0hpZ2hsaWdodFJlY3QoRmxvYXRQb2ludCgpLCBib3VuY2VMYXllclJl
Y3Quc2l6ZSgpKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgUmV0YWluUHRyPENBTGF5
ZXI+IGRyb3BTaGFkb3dMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7Cisg
ICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NB
TGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKKyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRTaGFk
b3dDb2xvcjpkcm9wU2hhZG93Q29sb3IuZ2V0KCldOworICAgICAgICBbZHJvcFNoYWRvd0xheWVy
IHNldFNoYWRvd1JhZGl1czpkcm9wU2hhZG93Qmx1clJhZGl1c107CisgICAgICAgIFtkcm9wU2hh
ZG93TGF5ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZU1ha2UoZHJvcFNoYWRvd09mZnNldFgsIGRy
b3BTaGFkb3dPZmZzZXRZKV07CisgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93UGF0
aDp0cmFuc2xhdGVkUGF0aC5wbGF0Zm9ybVBhdGgoKV07CisgICAgICAgIFtkcm9wU2hhZG93TGF5
ZXIgc2V0U2hhZG93T3BhY2l0eToxXTsKKyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRGcmFt
ZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsKKyAgICAgICAgW2JvdW5jZUxheWVyIGFkZFN1YmxheWVy
OmRyb3BTaGFkb3dMYXllci5nZXQoKV07CisgICAgICAgIFtib3VuY2VMYXllciBzZXRWYWx1ZTpk
cm9wU2hhZG93TGF5ZXIuZ2V0KCkgZm9yS2V5OmRyb3BTaGFkb3dMYXllcktleV07CisKKyAgICAg
ICAgUmV0YWluUHRyPENBTGF5ZXI+IHJpbVNoYWRvd0xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIg
YWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldERlbGVnYXRlOltXZWJB
Y3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07CisgICAgICAgIFtyaW1TaGFk
b3dMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsKKyAgICAgICAgW3JpbVNoYWRv
d0xheWVyIHNldFNoYWRvd0NvbG9yOnJpbVNoYWRvd0NvbG9yLmdldCgpXTsKKyAgICAgICAgW3Jp
bVNoYWRvd0xheWVyIHNldFNoYWRvd1JhZGl1czpyaW1TaGFkb3dCbHVyUmFkaXVzXTsKKyAgICAg
ICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd1BhdGg6dHJhbnNsYXRlZFBhdGgucGxhdGZvcm1Q
YXRoKCldOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZVpl
cm9dOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93T3BhY2l0eToxXTsKKyAgICAg
ICAgW3JpbVNoYWRvd0xheWVyIHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOworICAgICAg
ICBbYm91bmNlTGF5ZXIgYWRkU3VibGF5ZXI6cmltU2hhZG93TGF5ZXIuZ2V0KCldOworICAgICAg
ICBbYm91bmNlTGF5ZXIgc2V0VmFsdWU6cmltU2hhZG93TGF5ZXIuZ2V0KCkgZm9yS2V5OnJpbVNo
YWRvd0xheWVyS2V5XTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgICAgIAorICAgICAg
ICBSZXRhaW5QdHI8Q0FMYXllcj4gdGV4dExheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2Nd
IGluaXRdKTsKKyAgICAgICAgW3RleHRMYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6aGlnaGxpZ2h0
Q29sb3IuZ2V0KCldOworICAgICAgICBbdGV4dExheWVyIHNldEJvcmRlckNvbG9yOmJvcmRlckNv
bG9yLmdldCgpXTsKKyAgICAgICAgW3RleHRMYXllciBzZXRCb3JkZXJXaWR0aDpib3JkZXJXaWR0
aF07CisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NB
TGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKKyAgICAgICAgaWYgKGNvbnRlbnRzSW1hZ2UpCisgICAg
ICAgICAgICBbdGV4dExheWVyIHNldENvbnRlbnRzOihfX2JyaWRnZSBpZCljb250ZW50c0ltYWdl
LT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCldOworCisgICAgICAgIFJldGFpblB0cjxDQVNoYXBlTGF5
ZXI+IG1hc2tMYXllciA9IGFkb3B0TlMoW1tDQVNoYXBlTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAg
ICAgICAgW21hc2tMYXllciBzZXRQYXRoOnRyYW5zbGF0ZWRQYXRoLnBsYXRmb3JtUGF0aCgpXTsK
KyAgICAgICAgW3RleHRMYXllciBzZXRNYXNrOm1hc2tMYXllci5nZXQoKV07CisKKyAgICAgICAg
RmxvYXRSZWN0IGltYWdlUmVjdCA9IHBhdGhCb3VuZGluZ1JlY3Q7CisgICAgICAgIFt0ZXh0TGF5
ZXIgc2V0Q29udGVudHNSZWN0OkNHUmVjdE1ha2UoaW1hZ2VSZWN0LngoKSAvIGNvbnRlbnRzSW1h
Z2VMb2dpY2FsU2l6ZS53aWR0aCgpLCBpbWFnZVJlY3QueSgpIC8gY29udGVudHNJbWFnZUxvZ2lj
YWxTaXplLmhlaWdodCgpLCBpbWFnZVJlY3Qud2lkdGgoKSAvIGNvbnRlbnRzSW1hZ2VMb2dpY2Fs
U2l6ZS53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkgLyBjb250ZW50c0ltYWdlTG9naWNhbFNp
emUuaGVpZ2h0KCkpXTsKKyAgICAgICAgW3RleHRMYXllciBzZXRDb250ZW50c0dyYXZpdHk6a0NB
R3Jhdml0eUNlbnRlcl07CisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHNTY2FsZTpfdGV4
dEluZGljYXRvci0+Y29udGVudEltYWdlU2NhbGVGYWN0b3IoKV07CisgICAgICAgIFt0ZXh0TGF5
ZXIgc2V0RnJhbWU6eWVsbG93SGlnaGxpZ2h0UmVjdF07CisgICAgICAgIFtib3VuY2VMYXllciBz
ZXRWYWx1ZTp0ZXh0TGF5ZXIuZ2V0KCkgZm9yS2V5OnRleHRMYXllcktleV07CisgICAgICAgIFti
b3VuY2VMYXllciBhZGRTdWJsYXllcjp0ZXh0TGF5ZXIuZ2V0KCldOworICAgIH0KKworICAgIHNl
bGYuc3VibGF5ZXJzID0gYm91bmNlTGF5ZXJzLmdldCgpOworICAgIF9ib3VuY2VMYXllcnMgPSBi
b3VuY2VMYXllcnM7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGljIFJldGFpblB0cjxD
QUtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGVCb3VuY2VBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwg
ZHVyYXRpb24pCit7CisgICAgUmV0YWluUHRyPENBS2V5ZnJhbWVBbmltYXRpb24+IGJvdW5jZUFu
aW1hdGlvbiA9IFtDQUtleWZyYW1lQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAidHJh
bnNmb3JtIl07CisgICAgW2JvdW5jZUFuaW1hdGlvbiBzZXRWYWx1ZXM6QFsKKyAgICAgICAgW05T
VmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9ybTNESWRlbnRpdHldLAorICAg
ICAgICBbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOkNBVHJhbnNmb3JtM0RNYWtlU2Nh
bGUobWlkQm91bmNlU2NhbGUsIG1pZEJvdW5jZVNjYWxlLCAxKV0sCisgICAgICAgIFtOU1ZhbHVl
IHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRElkZW50aXR5XQorICAgICAgICBd
XTsKKyAgICBbYm91bmNlQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKKworICAgIHJl
dHVybiBib3VuY2VBbmltYXRpb247Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1h
dGlvbj4gY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbihDRlRpbWVJbnRlcnZhbCBkdXJh
dGlvbiwgVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRvcikKK3sKKyAgICBSZXRhaW5QdHI8Q0FC
YXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5p
bWF0aW9uV2l0aEtleVBhdGg6QCJjb250ZW50cyJdOworICAgIGF1dG8gY29udGVudHNJbWFnZSA9
IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CisgICAgW2Nyb3Nz
ZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihfX2JyaWRnZSBpZCljb250ZW50c0ltYWdlLT5wbGF0
Zm9ybUltYWdlKCkuZ2V0KCldOworICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6
a0NBRmlsbE1vZGVGb3J3YXJkc107CisgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVk
T25Db21wbGV0aW9uOk5PXTsKKyAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1
cmF0aW9uXTsKKworICAgIHJldHVybiBjcm9zc2ZhZGVBbmltYXRpb247Cit9CisKK3N0YXRpYyBS
ZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3JlYXRlU2hhZG93RmFkZUFuaW1hdGlvbihDRlRp
bWVJbnRlcnZhbCBkdXJhdGlvbikKK3sKKyAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4g
ZmFkZVNoYWRvd0luQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtl
eVBhdGg6QCJzaGFkb3dPcGFjaXR5Il07CisgICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlvbiBzZXRG
cm9tVmFsdWU6QDBdOworICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0VG9WYWx1ZTpAMV07
CisgICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndh
cmRzXTsKKyAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246
Tk9dOworICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25dOwor
CisgICAgcmV0dXJuIGZhZGVTaGFkb3dJbkFuaW1hdGlvbjsKK30KKworc3RhdGljIFJldGFpblB0
cjxDQUJhc2ljQW5pbWF0aW9uPiBjcmVhdGVGYWRlSW5BbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwg
ZHVyYXRpb24pCit7CisgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGZhZGVJbkFuaW1h
dGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAib3BhY2l0eSJd
OworICAgIFtmYWRlSW5BbmltYXRpb24gc2V0RnJvbVZhbHVlOkAwXTsKKyAgICBbZmFkZUluQW5p
bWF0aW9uIHNldFRvVmFsdWU6QDFdOworICAgIFtmYWRlSW5BbmltYXRpb24gc2V0RmlsbE1vZGU6
a0NBRmlsbE1vZGVGb3J3YXJkc107CisgICAgW2ZhZGVJbkFuaW1hdGlvbiBzZXRSZW1vdmVkT25D
b21wbGV0aW9uOk5PXTsKKyAgICBbZmFkZUluQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9u
XTsKKworICAgIHJldHVybiBmYWRlSW5BbmltYXRpb247Cit9CisKKy0gKENGVGltZUludGVydmFs
KV9hbmltYXRpb25EdXJhdGlvbgoreworICAgIGlmIChbc2VsZiBpbmRpY2F0b3JXYW50c0JvdW5j
ZToqX3RleHRJbmRpY2F0b3JdKSB7CisgICAgICAgIGlmIChpbmRpY2F0b3JXYW50c0NvbnRlbnRD
cm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkKKyAgICAgICAgICAgIHJldHVybiBib3VuY2VXaXRo
Q3Jvc3NmYWRlQW5pbWF0aW9uRHVyYXRpb247CisgICAgICAgIHJldHVybiBib3VuY2VBbmltYXRp
b25EdXJhdGlvbjsKKyAgICB9CisKKyAgICByZXR1cm4gZmFkZUluQW5pbWF0aW9uRHVyYXRpb247
Cit9CisKKy0gKEJPT0wpaGFzQ29tcGxldGVkQW5pbWF0aW9uCit7CisgICAgcmV0dXJuIF9oYXND
b21wbGV0ZWRBbmltYXRpb247Cit9CisKKy0gKHZvaWQpcHJlc2VudAoreworICAgIGJvb2wgd2Fu
dHNCb3VuY2UgPSBbc2VsZiBpbmRpY2F0b3JXYW50c0JvdW5jZToqX3RleHRJbmRpY2F0b3JdOwor
ICAgIGJvb2wgd2FudHNDcm9zc2ZhZGUgPSBpbmRpY2F0b3JXYW50c0NvbnRlbnRDcm9zc2ZhZGUo
Kl90ZXh0SW5kaWNhdG9yKTsKKyAgICBib29sIHdhbnRzRmFkZUluID0gaW5kaWNhdG9yV2FudHNG
YWRlSW4oKl90ZXh0SW5kaWNhdG9yKTsKKyAgICBDRlRpbWVJbnRlcnZhbCBhbmltYXRpb25EdXJh
dGlvbiA9IFtzZWxmIF9hbmltYXRpb25EdXJhdGlvbl07CisKKyAgICBfaGFzQ29tcGxldGVkQW5p
bWF0aW9uID0gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0FBbmltYXRpb24+IHByZXNlbnRhdGlv
bkFuaW1hdGlvbjsKKyAgICBpZiAod2FudHNCb3VuY2UpCisgICAgICAgIHByZXNlbnRhdGlvbkFu
aW1hdGlvbiA9IGNyZWF0ZUJvdW5jZUFuaW1hdGlvbihhbmltYXRpb25EdXJhdGlvbik7CisgICAg
ZWxzZSBpZiAod2FudHNGYWRlSW4pCisgICAgICAgIHByZXNlbnRhdGlvbkFuaW1hdGlvbiA9IGNy
ZWF0ZUZhZGVJbkFuaW1hdGlvbihhbmltYXRpb25EdXJhdGlvbik7CisKKyAgICBSZXRhaW5QdHI8
Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uOworICAgIFJldGFpblB0cjxDQUJh
c2ljQW5pbWF0aW9uPiBmYWRlU2hhZG93SW5BbmltYXRpb247CisgICAgaWYgKHdhbnRzQ3Jvc3Nm
YWRlKSB7CisgICAgICAgIGNyb3NzZmFkZUFuaW1hdGlvbiA9IGNyZWF0ZUNvbnRlbnRDcm9zc2Zh
ZGVBbmltYXRpb24oYW5pbWF0aW9uRHVyYXRpb24sICpfdGV4dEluZGljYXRvcik7CisgICAgICAg
IGZhZGVTaGFkb3dJbkFuaW1hdGlvbiA9IGNyZWF0ZVNoYWRvd0ZhZGVBbmltYXRpb24oYW5pbWF0
aW9uRHVyYXRpb24pOworICAgIH0KKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBm
b3IgKENBTGF5ZXIgKmJvdW5jZUxheWVyIGluIF9ib3VuY2VMYXllcnMuZ2V0KCkpIHsKKyAgICAg
ICAgaWYgKFtzZWxmIGluZGljYXRvcldhbnRzTWFudWFsQW5pbWF0aW9uOipfdGV4dEluZGljYXRv
cl0pCisgICAgICAgICAgICBib3VuY2VMYXllci5zcGVlZCA9IDA7CisKKyAgICAgICAgaWYgKCF3
YW50c0ZhZGVJbikKKyAgICAgICAgICAgIGJvdW5jZUxheWVyLm9wYWNpdHkgPSAxOworCisgICAg
ICAgIGlmIChwcmVzZW50YXRpb25BbmltYXRpb24pCisgICAgICAgICAgICBbYm91bmNlTGF5ZXIg
YWRkQW5pbWF0aW9uOnByZXNlbnRhdGlvbkFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJwcmVzZW50
YXRpb24iXTsKKworICAgICAgICBpZiAod2FudHNDcm9zc2ZhZGUpIHsKKyAgICAgICAgICAgIFtb
Ym91bmNlTGF5ZXIgdmFsdWVGb3JLZXk6dGV4dExheWVyS2V5XSBhZGRBbmltYXRpb246Y3Jvc3Nm
YWRlQW5pbWF0aW9uLmdldCgpIGZvcktleTpAImNvbnRlbnRUcmFuc2l0aW9uIl07CisgICAgICAg
ICAgICBbW2JvdW5jZUxheWVyIHZhbHVlRm9yS2V5OmRyb3BTaGFkb3dMYXllcktleV0gYWRkQW5p
bWF0aW9uOmZhZGVTaGFkb3dJbkFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJmYWRlU2hhZG93SW4i
XTsKKyAgICAgICAgICAgIFtbYm91bmNlTGF5ZXIgdmFsdWVGb3JLZXk6cmltU2hhZG93TGF5ZXJL
ZXldIGFkZEFuaW1hdGlvbjpmYWRlU2hhZG93SW5BbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiZmFk
ZVNoYWRvd0luIl07CisgICAgICAgIH0KKyAgICB9CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0
XTsKK30KKworLSAodm9pZCloaWRlV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQp
KWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGZh
ZGVBbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAIm9w
YWNpdHkiXTsKKyAgICBbZmFkZUFuaW1hdGlvbiBzZXRGcm9tVmFsdWU6QDFdOworICAgIFtmYWRl
QW5pbWF0aW9uIHNldFRvVmFsdWU6QDBdOworICAgIFtmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2Rl
OmtDQUZpbGxNb2RlRm9yd2FyZHNdOworICAgIFtmYWRlQW5pbWF0aW9uIHNldFJlbW92ZWRPbkNv
bXBsZXRpb246Tk9dOworICAgIFtmYWRlQW5pbWF0aW9uIHNldER1cmF0aW9uOmZhZGVPdXRBbmlt
YXRpb25EdXJhdGlvbl07CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJh
bnNhY3Rpb24gc2V0Q29tcGxldGlvbkJsb2NrOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBbc2Vs
ZiBhZGRBbmltYXRpb246ZmFkZUFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJmYWRlT3V0Il07Cisg
ICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKworLSAodm9pZClzZXRBbmltYXRpb25Qcm9n
cmVzczooZmxvYXQpcHJvZ3Jlc3MKK3sKKyAgICBpZiAoX2hhc0NvbXBsZXRlZEFuaW1hdGlvbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHByb2dyZXNzID09IDEpIHsKKyAgICAgICAgX2hh
c0NvbXBsZXRlZEFuaW1hdGlvbiA9IHRydWU7CisKKyAgICAgICAgZm9yIChDQUxheWVyICpib3Vu
Y2VMYXllciBpbiBfYm91bmNlTGF5ZXJzLmdldCgpKSB7CisgICAgICAgICAgICAvLyBDb250aW51
ZSB0aGUgYW5pbWF0aW9uIGZyb20gd2hlcmV2ZXIgaXQgaGFkIG1hbnVhbGx5IHByb2dyZXNzZWQg
dG8uCisgICAgICAgICAgICBDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUgPSBib3VuY2VMYXllci50
aW1lT2Zmc2V0OworICAgICAgICAgICAgYm91bmNlTGF5ZXIuc3BlZWQgPSAxOworICAgICAgICAg
ICAgYmVnaW5UaW1lID0gW2JvdW5jZUxheWVyIGNvbnZlcnRUaW1lOkNBQ3VycmVudE1lZGlhVGlt
ZSgpIGZyb21MYXllcjpuaWxdIC0gYmVnaW5UaW1lOworICAgICAgICAgICAgYm91bmNlTGF5ZXIu
YmVnaW5UaW1lID0gYmVnaW5UaW1lOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Q0ZUaW1lSW50ZXJ2YWwgYW5pbWF0aW9uRHVyYXRpb24gPSBbc2VsZiBfYW5pbWF0aW9uRHVyYXRp
b25dOworICAgICAgICBmb3IgKENBTGF5ZXIgKmJvdW5jZUxheWVyIGluIF9ib3VuY2VMYXllcnMu
Z2V0KCkpCisgICAgICAgICAgICBib3VuY2VMYXllci50aW1lT2Zmc2V0ID0gcHJvZ3Jlc3MgKiBh
bmltYXRpb25EdXJhdGlvbjsKKyAgICB9Cit9CisKKy0gKEJPT0wpaXNGbGlwcGVkCit7CisgICAg
cmV0dXJuIFlFUzsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9t
YWMvVGV4dEluZGljYXRvcldpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dElu
ZGljYXRvcldpbmRvdy5oCmluZGV4IDY0NzVjZTVlYmM5MDdhZTE4ODBhZjE3MWMwNzM2ZmYzZWNi
NTAyNmUuLmMzYjMzZWJhMmM4YmMwZDc1NDU5ZGQyMTUwODliNjUyOWM1ZDMxNWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93LmgKQEAgLTMyLDcgKzMy
LDcgQEAKICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAKIE9CSkNfQ0xBU1MgTlNWaWV3OwotT0JK
Q19DTEFTUyBXZWJUZXh0SW5kaWNhdG9yVmlldzsKK09CSkNfQ0xBU1MgV2ViVGV4dEluZGljYXRv
ckxheWVyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTcyLDcgKzcyLDggQEAgcHJpdmF0
ZToKICAgICBOU1ZpZXcgKm1fdGFyZ2V0VmlldzsKICAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4g
bV90ZXh0SW5kaWNhdG9yOwogICAgIFJldGFpblB0cjxOU1dpbmRvdz4gbV90ZXh0SW5kaWNhdG9y
V2luZG93OwotICAgIFJldGFpblB0cjxXZWJUZXh0SW5kaWNhdG9yVmlldz4gbV90ZXh0SW5kaWNh
dG9yVmlldzsKKyAgICBSZXRhaW5QdHI8TlNWaWV3PiBtX3RleHRJbmRpY2F0b3JWaWV3OworICAg
IFJldGFpblB0cjxXZWJUZXh0SW5kaWNhdG9yTGF5ZXI+IG1fdGV4dEluZGljYXRvckxheWVyOwog
CiAgICAgUnVuTG9vcDo6VGltZXI8VGV4dEluZGljYXRvcldpbmRvdz4gbV90ZW1wb3JhcnlUZXh0
SW5kaWNhdG9yVGltZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
VGV4dEluZGljYXRvcldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRp
Y2F0b3JXaW5kb3cubW0KaW5kZXggMjcyZWQ0NDc3NGI1NjVmOGNhMWFkNGFlMDc2ZDAxMzQ0NzMw
MTc2My4uZDdiZmJjYzE5Yzg0Y2RmMzZlZDNhYjQ3ZjE3MTYxMDRjOGVlYWI4YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBAIC0zMywzNzgg
KzMzLDE5IEBACiAjaW1wb3J0ICJQYXRoVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXh0SW5kaWNh
dG9yLmgiCiAjaW1wb3J0ICJXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUuaCIKKyNp
bXBvcnQgIldlYlRleHRJbmRpY2F0b3JMYXllci5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3Jl
R3JhcGhpY3NTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNDb2xvclNQSS5oPgogI2lt
cG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CiAKIGNvbnN0IENGVGltZUludGVy
dmFsIGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9uID0gMC4xMjsKLWNvbnN0IENGVGltZUludGVydmFs
IGJvdW5jZVdpdGhDcm9zc2ZhZGVBbmltYXRpb25EdXJhdGlvbiA9IDAuMzsKLWNvbnN0IENGVGlt
ZUludGVydmFsIGZhZGVJbkFuaW1hdGlvbkR1cmF0aW9uID0gMC4xNTsKIGNvbnN0IENGVGltZUlu
dGVydmFsIHRpbWVCZWZvcmVGYWRlU3RhcnRzID0gYm91bmNlQW5pbWF0aW9uRHVyYXRpb24gKyAw
LjI7Ci1jb25zdCBDRlRpbWVJbnRlcnZhbCBmYWRlT3V0QW5pbWF0aW9uRHVyYXRpb24gPSAwLjM7
CiAKIGNvbnN0IENHRmxvYXQgbWlkQm91bmNlU2NhbGUgPSAxLjI1OwotY29uc3QgQ0dGbG9hdCBi
b3JkZXJXaWR0aCA9IDA7Ci1jb25zdCBDR0Zsb2F0IGNvcm5lclJhZGl1cyA9IDA7Ci1jb25zdCBD
R0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRYID0gMDsKLWNvbnN0IENHRmxvYXQgZHJvcFNoYWRvd09m
ZnNldFkgPSAxOwogY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93Qmx1clJhZGl1cyA9IDI7Ci1jb25z
dCBDR0Zsb2F0IHJpbVNoYWRvd0JsdXJSYWRpdXMgPSAxOwotCi1OU1N0cmluZyAqdGV4dExheWVy
S2V5ID0gQCJUZXh0TGF5ZXIiOwotTlNTdHJpbmcgKmRyb3BTaGFkb3dMYXllcktleSA9IEAiRHJv
cFNoYWRvd0xheWVyIjsKLU5TU3RyaW5nICpyaW1TaGFkb3dMYXllcktleSA9IEAiUmltU2hhZG93
TGF5ZXIiOwogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotQGludGVyZmFjZSBXZWJUZXh0
SW5kaWNhdG9yVmlldyA6IE5TVmlldyB7Ci0gICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IF90ZXh0
SW5kaWNhdG9yOwotICAgIFJldGFpblB0cjxOU0FycmF5PiBfYm91bmNlTGF5ZXJzOwotICAgIE5T
U2l6ZSBfbWFyZ2luOwotICAgIGJvb2wgX2hhc0NvbXBsZXRlZEFuaW1hdGlvbjsKLSAgICBCT09M
IF9mYWRpbmdPdXQ7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihOU1JlY3Qp
ZnJhbWUgdGV4dEluZGljYXRvcjooVGV4dEluZGljYXRvciYpdGV4dEluZGljYXRvciBtYXJnaW46
KE5TU2l6ZSltYXJnaW4gb2Zmc2V0OihOU1BvaW50KW9mZnNldDsKLQotLSAodm9pZClwcmVzZW50
OwotLSAodm9pZCloaWRlV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyOwotCi0tICh2b2lkKXNldEFuaW1hdGlvblByb2dyZXNzOihmbG9hdClwcm9n
cmVzczsKLS0gKEJPT0wpaGFzQ29tcGxldGVkQW5pbWF0aW9uOwotCi1AcHJvcGVydHkgKG5vbmF0
b21pYywgZ2V0dGVyPWlzRmFkaW5nT3V0KSBCT09MIGZhZGluZ091dDsKLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gV2ViVGV4dEluZGljYXRvclZpZXcKLQotQHN5bnRoZXNpemUgZmFkaW5nT3V0
ID0gX2ZhZGluZ091dDsKLQotc3RhdGljIGJvb2wgaW5kaWNhdG9yV2FudHNCb3VuY2UoY29uc3Qg
VGV4dEluZGljYXRvciYgaW5kaWNhdG9yKQotewotICAgIHN3aXRjaCAoaW5kaWNhdG9yLnByZXNl
bnRhdGlvblRyYW5zaXRpb24oKSkgewotICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZToKLSAgICBjYXNlIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2U6Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluOgotICAg
IGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmU6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGluZGljYXRvcldhbnRzQ29udGVudENyb3Nz
ZmFkZShjb25zdCBUZXh0SW5kaWNhdG9yJiBpbmRpY2F0b3IpCi17Ci0gICAgaWYgKCFpbmRpY2F0
b3IuZGF0YSgpLmNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHN3aXRjaCAoaW5kaWNhdG9yLnByZXNlbnRhdGlvblRyYW5zaXRpb24oKSkgewot
ICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENy
b3NzZmFkZToKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2U6Ci0gICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluOgotICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb246Ok5vbmU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRp
YyBib29sIGluZGljYXRvcldhbnRzRmFkZUluKGNvbnN0IFRleHRJbmRpY2F0b3ImIGluZGljYXRv
cikKLXsKLSAgICBzd2l0Y2ggKGluZGljYXRvci5wcmVzZW50YXRpb25UcmFuc2l0aW9uKCkpIHsK
LSAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpGYWRlSW46Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9u
VHJhbnNpdGlvbjo6Qm91bmNlOgotICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZToKLSAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uOjpOb25lOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0
aWMgYm9vbCBpbmRpY2F0b3JXYW50c01hbnVhbEFuaW1hdGlvbihjb25zdCBUZXh0SW5kaWNhdG9y
JiBpbmRpY2F0b3IpCi17Ci0gICAgc3dpdGNoIChpbmRpY2F0b3IucHJlc2VudGF0aW9uVHJhbnNp
dGlvbigpKSB7Ci0gICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6
RmFkZUluOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZToKLSAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGU6Ci0gICAgY2FzZSBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZToKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5k
aWNhdG9yOihUZXh0SW5kaWNhdG9yJil0ZXh0SW5kaWNhdG9yIG1hcmdpbjooTlNTaXplKW1hcmdp
biBvZmZzZXQ6KE5TUG9pbnQpb2Zmc2V0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
V2l0aEZyYW1lOmZyYW1lXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfdGV4dEluZGlj
YXRvciA9ICZ0ZXh0SW5kaWNhdG9yOwotICAgIF9tYXJnaW4gPSBtYXJnaW47Ci0KLSAgICBzZWxm
LndhbnRzTGF5ZXIgPSBZRVM7Ci0gICAgc2VsZi5sYXllci5hbmNob3JQb2ludCA9IENHUG9pbnRa
ZXJvOwotCi0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBjb250ZW50c0ltYWdlOwotICAgIEZsb2F0
U2l6ZSBjb250ZW50c0ltYWdlTG9naWNhbFNpemUgeyAxLCAxIH07Ci0gICAgaWYgKGF1dG8qIGNv
bnRlbnRJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKSkgewotICAgICAgICBj
b250ZW50c0ltYWdlTG9naWNhbFNpemUgPSBjb250ZW50SW1hZ2UtPnNpemUoKTsKLSAgICAgICAg
Y29udGVudHNJbWFnZUxvZ2ljYWxTaXplLnNjYWxlKDEgLyBfdGV4dEluZGljYXRvci0+Y29udGVu
dEltYWdlU2NhbGVGYWN0b3IoKSk7Ci0gICAgICAgIGlmIChpbmRpY2F0b3JXYW50c0NvbnRlbnRD
cm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSAmJiBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdl
V2l0aEhpZ2hsaWdodCgpKQotICAgICAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNh
dG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBjb250ZW50SW1hZ2UtPm5hdGl2ZUlt
YWdlKCk7Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBib3VuY2VMYXll
cnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLQotICAgIFJldGFp
blB0cjxDR0NvbG9yUmVmPiBoaWdobGlnaHRDb2xvciA9IFtOU0NvbG9yIGZpbmRIaWdobGlnaHRD
b2xvcl0uQ0dDb2xvcjsKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gcmltU2hhZG93Q29sb3Ig
PSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0ZTowIGFscGhhOjAuMzVdLkNHQ29sb3I7Ci0g
ICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGRyb3BTaGFkb3dDb2xvciA9IFtOU0NvbG9yIGNvbG9y
V2l0aERldmljZVdoaXRlOjAgYWxwaGE6MC4yXS5DR0NvbG9yOwotCi0gICAgUmV0YWluUHRyPENH
Q29sb3JSZWY+IGJvcmRlckNvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOi45NiBn
cmVlbjouOTAgYmx1ZTowIGFscGhhOjFdLkNHQ29sb3I7Ci0KLSAgICBWZWN0b3I8RmxvYXRSZWN0
PiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzID0gX3RleHRJbmRpY2F0b3ItPnRl
eHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKTsKLQotICAgIFZlY3RvcjxQYXRoPiBw
YXRocyA9IFBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyh0ZXh0UmVj
dHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzLCBjb3JuZXJSYWRpdXMpOwotCi0gICAgZm9yIChj
b25zdCBhdXRvJiBwYXRoIDogcGF0aHMpIHsKLSAgICAgICAgRmxvYXRSZWN0IHBhdGhCb3VuZGlu
Z1JlY3QgPSBwYXRoLmJvdW5kaW5nUmVjdCgpOwotCi0gICAgICAgIFBhdGggdHJhbnNsYXRlZFBh
dGg7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgICAgIHRyYW5zZm9y
bS50cmFuc2xhdGUoLXBhdGhCb3VuZGluZ1JlY3QubG9jYXRpb24oKSk7Ci0gICAgICAgIHRyYW5z
bGF0ZWRQYXRoLmFkZFBhdGgocGF0aCwgdHJhbnNmb3JtKTsKLQotICAgICAgICBGbG9hdFJlY3Qg
b2Zmc2V0VGV4dFJlY3QgPSBwYXRoQm91bmRpbmdSZWN0OwotICAgICAgICBvZmZzZXRUZXh0UmVj
dC5tb3ZlKG9mZnNldC54LCBvZmZzZXQueSk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IGJvdW5jZUxh
eWVyUmVjdCA9IG9mZnNldFRleHRSZWN0OwotICAgICAgICBib3VuY2VMYXllclJlY3QubW92ZShf
bWFyZ2luLndpZHRoLCBfbWFyZ2luLmhlaWdodCk7Ci0KLSAgICAgICAgUmV0YWluUHRyPENBTGF5
ZXI+IGJvdW5jZUxheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKLSAgICAg
ICAgW2JvdW5jZUxheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVs
ZWdhdGUgc2hhcmVkXV07Ci0gICAgICAgIFtib3VuY2VMYXllciBzZXRGcmFtZTpib3VuY2VMYXll
clJlY3RdOwotICAgICAgICBbYm91bmNlTGF5ZXIgc2V0T3BhY2l0eTowXTsKLSAgICAgICAgW2Jv
dW5jZUxheWVycyBhZGRPYmplY3Q6Ym91bmNlTGF5ZXIuZ2V0KCldOwotCi0gICAgICAgIEZsb2F0
UmVjdCB5ZWxsb3dIaWdobGlnaHRSZWN0KEZsb2F0UG9pbnQoKSwgYm91bmNlTGF5ZXJSZWN0LnNp
emUoKSk7Ci0KLSAgICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IGRyb3BTaGFkb3dMYXllciA9IGFk
b3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIg
c2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsK
LSAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRTaGFkb3dDb2xvcjpkcm9wU2hhZG93Q29sb3Iu
Z2V0KCldOwotICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNoYWRvd1JhZGl1czpkcm9wU2hh
ZG93Qmx1clJhZGl1c107Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93T2Zmc2V0
OkNHU2l6ZU1ha2UoZHJvcFNoYWRvd09mZnNldFgsIGRyb3BTaGFkb3dPZmZzZXRZKV07Ci0gICAg
ICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93UGF0aDp0cmFuc2xhdGVkUGF0aC5wbGF0Zm9y
bVBhdGgoKV07Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93T3BhY2l0eToxXTsK
LSAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsK
LSAgICAgICAgW2JvdW5jZUxheWVyIGFkZFN1YmxheWVyOmRyb3BTaGFkb3dMYXllci5nZXQoKV07
Ci0gICAgICAgIFtib3VuY2VMYXllciBzZXRWYWx1ZTpkcm9wU2hhZG93TGF5ZXIuZ2V0KCkgZm9y
S2V5OmRyb3BTaGFkb3dMYXllcktleV07Ci0KLSAgICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IHJp
bVNoYWRvd0xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKLSAgICAgICAg
W3JpbVNoYWRvd0xheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVs
ZWdhdGUgc2hhcmVkXV07Ci0gICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRGcmFtZTp5ZWxsb3dI
aWdobGlnaHRSZWN0XTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd0NvbG9yOnJp
bVNoYWRvd0NvbG9yLmdldCgpXTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd1Jh
ZGl1czpyaW1TaGFkb3dCbHVyUmFkaXVzXTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNo
YWRvd1BhdGg6dHJhbnNsYXRlZFBhdGgucGxhdGZvcm1QYXRoKCldOwotICAgICAgICBbcmltU2hh
ZG93TGF5ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZVplcm9dOwotICAgICAgICBbcmltU2hhZG93
TGF5ZXIgc2V0U2hhZG93T3BhY2l0eToxXTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldEZy
YW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOwotICAgICAgICBbYm91bmNlTGF5ZXIgYWRkU3VibGF5
ZXI6cmltU2hhZG93TGF5ZXIuZ2V0KCldOwotICAgICAgICBbYm91bmNlTGF5ZXIgc2V0VmFsdWU6
cmltU2hhZG93TGF5ZXIuZ2V0KCkgZm9yS2V5OnJpbVNoYWRvd0xheWVyS2V5XTsKLQotICAgICAg
ICBSZXRhaW5QdHI8Q0FMYXllcj4gdGV4dExheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2Nd
IGluaXRdKTsKLSAgICAgICAgW3RleHRMYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6aGlnaGxpZ2h0
Q29sb3IuZ2V0KCldOwotICAgICAgICBbdGV4dExheWVyIHNldEJvcmRlckNvbG9yOmJvcmRlckNv
bG9yLmdldCgpXTsKLSAgICAgICAgW3RleHRMYXllciBzZXRCb3JkZXJXaWR0aDpib3JkZXJXaWR0
aF07Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NB
TGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKLSAgICAgICAgaWYgKGNvbnRlbnRzSW1hZ2UpCi0gICAg
ICAgICAgICBbdGV4dExheWVyIHNldENvbnRlbnRzOihfX2JyaWRnZSBpZCljb250ZW50c0ltYWdl
LT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCldOwotCi0gICAgICAgIFJldGFpblB0cjxDQVNoYXBlTGF5
ZXI+IG1hc2tMYXllciA9IGFkb3B0TlMoW1tDQVNoYXBlTGF5ZXIgYWxsb2NdIGluaXRdKTsKLSAg
ICAgICAgW21hc2tMYXllciBzZXRQYXRoOnRyYW5zbGF0ZWRQYXRoLnBsYXRmb3JtUGF0aCgpXTsK
LSAgICAgICAgW3RleHRMYXllciBzZXRNYXNrOm1hc2tMYXllci5nZXQoKV07Ci0KLSAgICAgICAg
RmxvYXRSZWN0IGltYWdlUmVjdCA9IHBhdGhCb3VuZGluZ1JlY3Q7Ci0gICAgICAgIFt0ZXh0TGF5
ZXIgc2V0Q29udGVudHNSZWN0OkNHUmVjdE1ha2UoaW1hZ2VSZWN0LngoKSAvIGNvbnRlbnRzSW1h
Z2VMb2dpY2FsU2l6ZS53aWR0aCgpLCBpbWFnZVJlY3QueSgpIC8gY29udGVudHNJbWFnZUxvZ2lj
YWxTaXplLmhlaWdodCgpLCBpbWFnZVJlY3Qud2lkdGgoKSAvIGNvbnRlbnRzSW1hZ2VMb2dpY2Fs
U2l6ZS53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkgLyBjb250ZW50c0ltYWdlTG9naWNhbFNp
emUuaGVpZ2h0KCkpXTsKLSAgICAgICAgW3RleHRMYXllciBzZXRDb250ZW50c0dyYXZpdHk6a0NB
R3Jhdml0eUNlbnRlcl07Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHNTY2FsZTpfdGV4
dEluZGljYXRvci0+Y29udGVudEltYWdlU2NhbGVGYWN0b3IoKV07Ci0gICAgICAgIFt0ZXh0TGF5
ZXIgc2V0RnJhbWU6eWVsbG93SGlnaGxpZ2h0UmVjdF07Ci0gICAgICAgIFtib3VuY2VMYXllciBz
ZXRWYWx1ZTp0ZXh0TGF5ZXIuZ2V0KCkgZm9yS2V5OnRleHRMYXllcktleV07Ci0gICAgICAgIFti
b3VuY2VMYXllciBhZGRTdWJsYXllcjp0ZXh0TGF5ZXIuZ2V0KCldOwotICAgIH0KLQotICAgIHNl
bGYubGF5ZXIuc3VibGF5ZXJzID0gYm91bmNlTGF5ZXJzLmdldCgpOwotICAgIF9ib3VuY2VMYXll
cnMgPSBib3VuY2VMYXllcnM7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotc3RhdGljIFJldGFp
blB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGVCb3VuY2VBbmltYXRpb24oQ0ZUaW1lSW50
ZXJ2YWwgZHVyYXRpb24pCi17Ci0gICAgUmV0YWluUHRyPENBS2V5ZnJhbWVBbmltYXRpb24+IGJv
dW5jZUFuaW1hdGlvbiA9IFtDQUtleWZyYW1lQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRo
OkAidHJhbnNmb3JtIl07Ci0gICAgW2JvdW5jZUFuaW1hdGlvbiBzZXRWYWx1ZXM6QFsKLSAgICAg
ICAgW05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9ybTNESWRlbnRpdHld
LAotICAgICAgICBbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOkNBVHJhbnNmb3JtM0RN
YWtlU2NhbGUobWlkQm91bmNlU2NhbGUsIG1pZEJvdW5jZVNjYWxlLCAxKV0sCi0gICAgICAgIFtO
U1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRElkZW50aXR5XQotICAg
ICAgICBdXTsKLSAgICBbYm91bmNlQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKLQot
ICAgIHJldHVybiBib3VuY2VBbmltYXRpb247Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0FCYXNp
Y0FuaW1hdGlvbj4gY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbihDRlRpbWVJbnRlcnZh
bCBkdXJhdGlvbiwgVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRvcikKLXsKLSAgICBSZXRhaW5Q
dHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRp
b24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJjb250ZW50cyJdOwotICAgIGF1dG8gY29udGVudHNJ
bWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7Ci0gICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihfX2JyaWRnZSBpZCljb250ZW50c0ltYWdl
LT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCldOwotICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0Rmls
bE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107Ci0gICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRS
ZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKLSAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldER1cmF0
aW9uOmR1cmF0aW9uXTsKLQotICAgIHJldHVybiBjcm9zc2ZhZGVBbmltYXRpb247Ci19Ci0KLXN0
YXRpYyBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3JlYXRlU2hhZG93RmFkZUFuaW1hdGlv
bihDRlRpbWVJbnRlcnZhbCBkdXJhdGlvbikKLXsKLSAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1h
dGlvbj4gZmFkZVNoYWRvd0luQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9u
V2l0aEtleVBhdGg6QCJzaGFkb3dPcGFjaXR5Il07Ci0gICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlv
biBzZXRGcm9tVmFsdWU6QDBdOwotICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0VG9WYWx1
ZTpAMV07Ci0gICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9k
ZUZvcndhcmRzXTsKLSAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBs
ZXRpb246Tk9dOwotICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRp
b25dOwotCi0gICAgcmV0dXJuIGZhZGVTaGFkb3dJbkFuaW1hdGlvbjsKLX0KLQotc3RhdGljIFJl
dGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBjcmVhdGVGYWRlSW5BbmltYXRpb24oQ0ZUaW1lSW50
ZXJ2YWwgZHVyYXRpb24pCi17Ci0gICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGZhZGVJ
bkFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAib3Bh
Y2l0eSJdOwotICAgIFtmYWRlSW5BbmltYXRpb24gc2V0RnJvbVZhbHVlOkAwXTsKLSAgICBbZmFk
ZUluQW5pbWF0aW9uIHNldFRvVmFsdWU6QDFdOwotICAgIFtmYWRlSW5BbmltYXRpb24gc2V0Rmls
bE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107Ci0gICAgW2ZhZGVJbkFuaW1hdGlvbiBzZXRSZW1v
dmVkT25Db21wbGV0aW9uOk5PXTsKLSAgICBbZmFkZUluQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1
cmF0aW9uXTsKLQotICAgIHJldHVybiBmYWRlSW5BbmltYXRpb247Ci19Ci0KLS0gKENGVGltZUlu
dGVydmFsKV9hbmltYXRpb25EdXJhdGlvbgotewotICAgIGlmIChpbmRpY2F0b3JXYW50c0JvdW5j
ZSgqX3RleHRJbmRpY2F0b3IpKSB7Ci0gICAgICAgIGlmIChpbmRpY2F0b3JXYW50c0NvbnRlbnRD
cm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgICAgIHJldHVybiBib3VuY2VXaXRo
Q3Jvc3NmYWRlQW5pbWF0aW9uRHVyYXRpb247Ci0gICAgICAgIHJldHVybiBib3VuY2VBbmltYXRp
b25EdXJhdGlvbjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFkZUluQW5pbWF0aW9uRHVyYXRpb247
Ci19Ci0KLS0gKEJPT0wpaGFzQ29tcGxldGVkQW5pbWF0aW9uCi17Ci0gICAgcmV0dXJuIF9oYXND
b21wbGV0ZWRBbmltYXRpb247Ci19Ci0KLS0gKHZvaWQpcHJlc2VudAotewotICAgIGJvb2wgd2Fu
dHNCb3VuY2UgPSBpbmRpY2F0b3JXYW50c0JvdW5jZSgqX3RleHRJbmRpY2F0b3IpOwotICAgIGJv
b2wgd2FudHNDcm9zc2ZhZGUgPSBpbmRpY2F0b3JXYW50c0NvbnRlbnRDcm9zc2ZhZGUoKl90ZXh0
SW5kaWNhdG9yKTsKLSAgICBib29sIHdhbnRzRmFkZUluID0gaW5kaWNhdG9yV2FudHNGYWRlSW4o
Kl90ZXh0SW5kaWNhdG9yKTsKLSAgICBDRlRpbWVJbnRlcnZhbCBhbmltYXRpb25EdXJhdGlvbiA9
IFtzZWxmIF9hbmltYXRpb25EdXJhdGlvbl07Ci0KLSAgICBfaGFzQ29tcGxldGVkQW5pbWF0aW9u
ID0gZmFsc2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0FBbmltYXRpb24+IHByZXNlbnRhdGlvbkFuaW1h
dGlvbjsKLSAgICBpZiAod2FudHNCb3VuY2UpCi0gICAgICAgIHByZXNlbnRhdGlvbkFuaW1hdGlv
biA9IGNyZWF0ZUJvdW5jZUFuaW1hdGlvbihhbmltYXRpb25EdXJhdGlvbik7Ci0gICAgZWxzZSBp
ZiAod2FudHNGYWRlSW4pCi0gICAgICAgIHByZXNlbnRhdGlvbkFuaW1hdGlvbiA9IGNyZWF0ZUZh
ZGVJbkFuaW1hdGlvbihhbmltYXRpb25EdXJhdGlvbik7Ci0KLSAgICBSZXRhaW5QdHI8Q0FCYXNp
Y0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uOwotICAgIFJldGFpblB0cjxDQUJhc2ljQW5p
bWF0aW9uPiBmYWRlU2hhZG93SW5BbmltYXRpb247Ci0gICAgaWYgKHdhbnRzQ3Jvc3NmYWRlKSB7
Ci0gICAgICAgIGNyb3NzZmFkZUFuaW1hdGlvbiA9IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmlt
YXRpb24oYW5pbWF0aW9uRHVyYXRpb24sICpfdGV4dEluZGljYXRvcik7Ci0gICAgICAgIGZhZGVT
aGFkb3dJbkFuaW1hdGlvbiA9IGNyZWF0ZVNoYWRvd0ZhZGVBbmltYXRpb24oYW5pbWF0aW9uRHVy
YXRpb24pOwotICAgIH0KLQotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBmb3IgKENB
TGF5ZXIgKmJvdW5jZUxheWVyIGluIF9ib3VuY2VMYXllcnMuZ2V0KCkpIHsKLSAgICAgICAgaWYg
KGluZGljYXRvcldhbnRzTWFudWFsQW5pbWF0aW9uKCpfdGV4dEluZGljYXRvcikpCi0gICAgICAg
ICAgICBib3VuY2VMYXllci5zcGVlZCA9IDA7Ci0KLSAgICAgICAgaWYgKCF3YW50c0ZhZGVJbikK
LSAgICAgICAgICAgIGJvdW5jZUxheWVyLm9wYWNpdHkgPSAxOwotCi0gICAgICAgIGlmIChwcmVz
ZW50YXRpb25BbmltYXRpb24pCi0gICAgICAgICAgICBbYm91bmNlTGF5ZXIgYWRkQW5pbWF0aW9u
OnByZXNlbnRhdGlvbkFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJwcmVzZW50YXRpb24iXTsKLQot
ICAgICAgICBpZiAod2FudHNDcm9zc2ZhZGUpIHsKLSAgICAgICAgICAgIFtbYm91bmNlTGF5ZXIg
dmFsdWVGb3JLZXk6dGV4dExheWVyS2V5XSBhZGRBbmltYXRpb246Y3Jvc3NmYWRlQW5pbWF0aW9u
LmdldCgpIGZvcktleTpAImNvbnRlbnRUcmFuc2l0aW9uIl07Ci0gICAgICAgICAgICBbW2JvdW5j
ZUxheWVyIHZhbHVlRm9yS2V5OmRyb3BTaGFkb3dMYXllcktleV0gYWRkQW5pbWF0aW9uOmZhZGVT
aGFkb3dJbkFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJmYWRlU2hhZG93SW4iXTsKLSAgICAgICAg
ICAgIFtbYm91bmNlTGF5ZXIgdmFsdWVGb3JLZXk6cmltU2hhZG93TGF5ZXJLZXldIGFkZEFuaW1h
dGlvbjpmYWRlU2hhZG93SW5BbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiZmFkZVNoYWRvd0luIl07
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLX0KLQotLSAo
dm9pZCloaWRlV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25I
YW5kbGVyCi17Ci0gICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGZhZGVBbmltYXRpb24g
PSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAIm9wYWNpdHkiXTsKLSAg
ICBbZmFkZUFuaW1hdGlvbiBzZXRGcm9tVmFsdWU6QDFdOwotICAgIFtmYWRlQW5pbWF0aW9uIHNl
dFRvVmFsdWU6QDBdOwotICAgIFtmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2Rl
Rm9yd2FyZHNdOwotICAgIFtmYWRlQW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246Tk9d
OwotICAgIFtmYWRlQW5pbWF0aW9uIHNldER1cmF0aW9uOmZhZGVPdXRBbmltYXRpb25EdXJhdGlv
bl07Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0
Q29tcGxldGlvbkJsb2NrOmNvbXBsZXRpb25IYW5kbGVyXTsKLSAgICBbc2VsZi5sYXllciBhZGRB
bmltYXRpb246ZmFkZUFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJmYWRlT3V0Il07Ci0gICAgW0NB
VHJhbnNhY3Rpb24gY29tbWl0XTsKLX0KLQotLSAodm9pZClzZXRBbmltYXRpb25Qcm9ncmVzczoo
ZmxvYXQpcHJvZ3Jlc3MKLXsKLSAgICBpZiAoX2hhc0NvbXBsZXRlZEFuaW1hdGlvbikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKHByb2dyZXNzID09IDEpIHsKLSAgICAgICAgX2hhc0NvbXBs
ZXRlZEFuaW1hdGlvbiA9IHRydWU7Ci0KLSAgICAgICAgZm9yIChDQUxheWVyICpib3VuY2VMYXll
ciBpbiBfYm91bmNlTGF5ZXJzLmdldCgpKSB7Ci0gICAgICAgICAgICAvLyBDb250aW51ZSB0aGUg
YW5pbWF0aW9uIGZyb20gd2hlcmV2ZXIgaXQgaGFkIG1hbnVhbGx5IHByb2dyZXNzZWQgdG8uCi0g
ICAgICAgICAgICBDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUgPSBib3VuY2VMYXllci50aW1lT2Zm
c2V0OwotICAgICAgICAgICAgYm91bmNlTGF5ZXIuc3BlZWQgPSAxOwotICAgICAgICAgICAgYmVn
aW5UaW1lID0gW2JvdW5jZUxheWVyIGNvbnZlcnRUaW1lOkNBQ3VycmVudE1lZGlhVGltZSgpIGZy
b21MYXllcjpuaWxdIC0gYmVnaW5UaW1lOwotICAgICAgICAgICAgYm91bmNlTGF5ZXIuYmVnaW5U
aW1lID0gYmVnaW5UaW1lOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQ0ZUaW1l
SW50ZXJ2YWwgYW5pbWF0aW9uRHVyYXRpb24gPSBbc2VsZiBfYW5pbWF0aW9uRHVyYXRpb25dOwot
ICAgICAgICBmb3IgKENBTGF5ZXIgKmJvdW5jZUxheWVyIGluIF9ib3VuY2VMYXllcnMuZ2V0KCkp
Ci0gICAgICAgICAgICBib3VuY2VMYXllci50aW1lT2Zmc2V0ID0gcHJvZ3Jlc3MgKiBhbmltYXRp
b25EdXJhdGlvbjsKLSAgICB9Ci19Ci0KLS0gKEJPT0wpaXNGbGlwcGVkCi17Ci0gICAgcmV0dXJu
IFlFUzsKLX0KLQotQGVuZAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRleHRJbmRpY2F0b3JX
aW5kb3c6OlRleHRJbmRpY2F0b3JXaW5kb3coTlNWaWV3ICp0YXJnZXRWaWV3KQpAQCAtNDIzLDE3
ICs2NCwxNyBAQCB2b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6OnNldEFuaW1hdGlvblByb2dyZXNz
KGZsb2F0IHByb2dyZXNzKQogICAgIGlmICghbV90ZXh0SW5kaWNhdG9yKQogICAgICAgICByZXR1
cm47CiAKLSAgICBbbV90ZXh0SW5kaWNhdG9yVmlldyBzZXRBbmltYXRpb25Qcm9ncmVzczpwcm9n
cmVzc107CisgICAgW21fdGV4dEluZGljYXRvckxheWVyIHNldEFuaW1hdGlvblByb2dyZXNzOnBy
b2dyZXNzXTsKIH0KIAogdm9pZCBUZXh0SW5kaWNhdG9yV2luZG93OjpjbGVhclRleHRJbmRpY2F0
b3IoVGV4dEluZGljYXRvcldpbmRvd0Rpc21pc3NhbEFuaW1hdGlvbiBhbmltYXRpb24pCiB7CiAg
ICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBXVEZNb3ZlKG1fdGV4dElu
ZGljYXRvcik7CiAKLSAgICBpZiAoW21fdGV4dEluZGljYXRvclZpZXcgaXNGYWRpbmdPdXRdKQor
ICAgIGlmIChbbV90ZXh0SW5kaWNhdG9yTGF5ZXIgaXNGYWRpbmdPdXRdKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAodGV4dEluZGljYXRvciAmJiBpbmRpY2F0b3JXYW50c01hbnVhbEFuaW1h
dGlvbigqdGV4dEluZGljYXRvcikgJiYgW21fdGV4dEluZGljYXRvclZpZXcgaGFzQ29tcGxldGVk
QW5pbWF0aW9uXSAmJiBhbmltYXRpb24gPT0gVGV4dEluZGljYXRvcldpbmRvd0Rpc21pc3NhbEFu
aW1hdGlvbjo6RmFkZU91dCkgeworICAgIGlmICh0ZXh0SW5kaWNhdG9yICYmIFttX3RleHRJbmRp
Y2F0b3JMYXllciBpbmRpY2F0b3JXYW50c01hbnVhbEFuaW1hdGlvbjoqdGV4dEluZGljYXRvcl0g
JiYgW21fdGV4dEluZGljYXRvckxheWVyIGhhc0NvbXBsZXRlZEFuaW1hdGlvbl0gJiYgYW5pbWF0
aW9uID09IFRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb246OkZhZGVPdXQpIHsK
ICAgICAgICAgc3RhcnRGYWRlT3V0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00NTMs
NyArOTQsNyBAQCB2b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6OnNldFRleHRJbmRpY2F0b3IoUmVm
PFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IsIENHUgogICAgIENHRmxvYXQgaG9yaXpvbnRh
bE1hcmdpbiA9IGRyb3BTaGFkb3dCbHVyUmFkaXVzICogMiArIFRleHRJbmRpY2F0b3I6OmRlZmF1
bHRIb3Jpem9udGFsTWFyZ2luOwogICAgIENHRmxvYXQgdmVydGljYWxNYXJnaW4gPSBkcm9wU2hh
ZG93Qmx1clJhZGl1cyAqIDIgKyBUZXh0SW5kaWNhdG9yOjpkZWZhdWx0VmVydGljYWxNYXJnaW47
CiAgICAgCi0gICAgaWYgKGluZGljYXRvcldhbnRzQm91bmNlKCptX3RleHRJbmRpY2F0b3IpKSB7
CisgICAgaWYgKFttX3RleHRJbmRpY2F0b3JMYXllciBpbmRpY2F0b3JXYW50c0JvdW5jZToqbV90
ZXh0SW5kaWNhdG9yXSkgewogICAgICAgICBob3Jpem9udGFsTWFyZ2luID0gc3RkOjptYXgoaG9y
aXpvbnRhbE1hcmdpbiwgdGV4dEJvdW5kaW5nUmVjdEluU2NyZWVuQ29vcmRpbmF0ZXMuc2l6ZS53
aWR0aCAqIChtaWRCb3VuY2VTY2FsZSAtIDEpICsgaG9yaXpvbnRhbE1hcmdpbik7CiAgICAgICAg
IHZlcnRpY2FsTWFyZ2luID0gc3RkOjptYXgodmVydGljYWxNYXJnaW4sIHRleHRCb3VuZGluZ1Jl
Y3RJblNjcmVlbkNvb3JkaW5hdGVzLnNpemUuaGVpZ2h0ICogKG1pZEJvdW5jZVNjYWxlIC0gMSkg
KyB2ZXJ0aWNhbE1hcmdpbik7CiAgICAgfQpAQCAtNDcwLDE1ICsxMTEsMTkgQEAgdm9pZCBUZXh0
SW5kaWNhdG9yV2luZG93OjpzZXRUZXh0SW5kaWNhdG9yKFJlZjxUZXh0SW5kaWNhdG9yPiB0ZXh0
SW5kaWNhdG9yLCBDR1IKICAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93IHNldE9wYXF1ZTpOT107
CiAgICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRJZ25vcmVzTW91c2VFdmVudHM6WUVTXTsK
IAotICAgIG1fdGV4dEluZGljYXRvclZpZXcgPSBhZG9wdE5TKFtbV2ViVGV4dEluZGljYXRvclZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCBbbV90ZXh0SW5kaWNhdG9y
V2luZG93IGZyYW1lXS5zaXplLndpZHRoLCBbbV90ZXh0SW5kaWNhdG9yV2luZG93IGZyYW1lXS5z
aXplLmhlaWdodCkKKyAgICBOU1JlY3QgZnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIFttX3RleHRJ
bmRpY2F0b3JXaW5kb3cgZnJhbWVdLnNpemUud2lkdGgsIFttX3RleHRJbmRpY2F0b3JXaW5kb3cg
ZnJhbWVdLnNpemUuaGVpZ2h0KTsKKyAgICBtX3RleHRJbmRpY2F0b3JMYXllciA9IGFkb3B0TlMo
W1tXZWJUZXh0SW5kaWNhdG9yTGF5ZXIgYWxsb2NdIGluaXRXaXRoRnJhbWU6ZnJhbWUKICAgICAg
ICAgdGV4dEluZGljYXRvcjoqbV90ZXh0SW5kaWNhdG9yIG1hcmdpbjpOU01ha2VTaXplKGhvcml6
b250YWxNYXJnaW4sIHZlcnRpY2FsTWFyZ2luKSBvZmZzZXQ6ZnJhY3Rpb25hbFRleHRPZmZzZXRd
KTsKKyAgICBtX3RleHRJbmRpY2F0b3JWaWV3ID0gYWRvcHROUyhbW05TVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpmcmFtZV0pOworICAgIFttX3RleHRJbmRpY2F0b3JWaWV3IHNldFdhbnRzTGF5
ZXI6WUVTXTsKKyAgICBbbV90ZXh0SW5kaWNhdG9yVmlldyBzZXRMYXllcjptX3RleHRJbmRpY2F0
b3JMYXllci5nZXQoKV07CiAgICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRDb250ZW50Vmll
dzptX3RleHRJbmRpY2F0b3JWaWV3LmdldCgpXTsKIAogICAgIFtbbV90YXJnZXRWaWV3IHdpbmRv
d10gYWRkQ2hpbGRXaW5kb3c6bV90ZXh0SW5kaWNhdG9yV2luZG93LmdldCgpIG9yZGVyZWQ6TlNX
aW5kb3dBYm92ZV07CiAgICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRSZWxlYXNlZFdoZW5D
bG9zZWQ6Tk9dOwogCiAgICAgaWYgKG1fdGV4dEluZGljYXRvci0+cHJlc2VudGF0aW9uVHJhbnNp
dGlvbigpICE9IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lKQotICAg
ICAgICBbbV90ZXh0SW5kaWNhdG9yVmlldyBwcmVzZW50XTsKKyAgICAgICAgW21fdGV4dEluZGlj
YXRvckxheWVyIHByZXNlbnRdOwogCiAgICAgaWYgKGxpZmV0aW1lID09IFRleHRJbmRpY2F0b3JX
aW5kb3dMaWZldGltZTo6VGVtcG9yYXJ5KQogICAgICAgICBtX3RlbXBvcmFyeVRleHRJbmRpY2F0
b3JUaW1lci5zdGFydE9uZVNob3QoMV9zICogdGltZUJlZm9yZUZhZGVTdGFydHMpOwpAQCAtNDg5
LDcgKzEzNCw3IEBAIHZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6Y2xvc2VXaW5kb3coKQogICAg
IGlmICghbV90ZXh0SW5kaWNhdG9yV2luZG93KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
W21fdGV4dEluZGljYXRvclZpZXcgaXNGYWRpbmdPdXRdKQorICAgIGlmIChbbV90ZXh0SW5kaWNh
dG9yTGF5ZXIgaXNGYWRpbmdPdXRdKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3RlbXBvcmFy
eVRleHRJbmRpY2F0b3JUaW1lci5zdG9wKCk7CkBAIC01MDEsOSArMTQ2LDkgQEAgdm9pZCBUZXh0
SW5kaWNhdG9yV2luZG93OjpjbG9zZVdpbmRvdygpCiAKIHZvaWQgVGV4dEluZGljYXRvcldpbmRv
dzo6c3RhcnRGYWRlT3V0KCkKIHsKLSAgICBbbV90ZXh0SW5kaWNhdG9yVmlldyBzZXRGYWRpbmdP
dXQ6WUVTXTsKKyAgICBbbV90ZXh0SW5kaWNhdG9yTGF5ZXIgc2V0RmFkaW5nT3V0OllFU107CiAg
ICAgUmV0YWluUHRyPE5TV2luZG93PiBpbmRpY2F0b3JXaW5kb3cgPSBtX3RleHRJbmRpY2F0b3JX
aW5kb3c7Ci0gICAgW21fdGV4dEluZGljYXRvclZpZXcgaGlkZVdpdGhDb21wbGV0aW9uSGFuZGxl
cjpbaW5kaWNhdG9yV2luZG93XSB7CisgICAgW21fdGV4dEluZGljYXRvckxheWVyIGhpZGVXaXRo
Q29tcGxldGlvbkhhbmRsZXI6W2luZGljYXRvcldpbmRvd10gewogICAgICAgICBbW2luZGljYXRv
cldpbmRvdyBwYXJlbnRXaW5kb3ddIHJlbW92ZUNoaWxkV2luZG93OmluZGljYXRvcldpbmRvdy5n
ZXQoKV07CiAgICAgICAgIFtpbmRpY2F0b3JXaW5kb3cgY2xvc2VdOwogICAgIH1dOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428110</attachid>
            <date>2021-05-08 21:07:41 -0700</date>
            <delta_ts>2021-05-11 09:56:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225557-20210508220740.patch</filename>
            <type>text/plain</type>
            <size>44983</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDJhZDhjNjk3MGZmY2I3
MDg5ZjY3ZTY5ODVlMGJkMTA1MzBkOTI2OC4uN2IzZGJjNzg3ZTZlYTg4YWVmZDgwNDdiYmM5NmQ1
M2U0ODRlYTM0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIxLTA1LTA3ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG91
dCBmaW5kIGJvdW5jZSBsYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1NTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRmFjdG9yIG91dCB0aGUgdGV4dCBpbmRpY2F0b3IgYm91bmNlIGxheWVyIGlu
IHByZXBhcmF0aW9uIG9mIG1ha2luZyB0aGlzIAorICAgICAgICBjb21wYXRhYmxlIHdpdGggaU9T
LiAKKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuIAorCisgICAgICAgICogU291cmNlc0Nv
Y29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5oOgorICAgICAgICAqIHBhZ2Uv
bWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW06CisgICAgICAgIChXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yV2luZG93OjpzZXRBbmltYXRpb25Qcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
SW5kaWNhdG9yV2luZG93OjpjbGVhclRleHRJbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEluZGljYXRvcldpbmRvdzo6c2V0VGV4dEluZGljYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yV2luZG93OjpjbG9zZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yV2luZG93OjpzdGFydEZhZGVPdXQpOgorICAgICAgICAoaW5kaWNhdG9yV2Fu
dHNCb3VuY2UpOiBEZWxldGVkLgorICAgICAgICAoaW5kaWNhdG9yV2FudHNDb250ZW50Q3Jvc3Nm
YWRlKTogRGVsZXRlZC4KKyAgICAgICAgKGluZGljYXRvcldhbnRzRmFkZUluKTogRGVsZXRlZC4K
KyAgICAgICAgKGluZGljYXRvcldhbnRzTWFudWFsQW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV2ViVGV4dEluZGljYXRvclZpZXcgaW5pdFdpdGhGcmFtZTp0ZXh0SW5kaWNhdG9yOm1h
cmdpbjpvZmZzZXQ6XSk6IERlbGV0ZWQuCisgICAgICAgIChjcmVhdGVCb3VuY2VBbmltYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChjcmVhdGVTaGFkb3dGYWRlQW5pbWF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKGNyZWF0ZUZhZGVJbkFuaW1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlRl
eHRJbmRpY2F0b3JWaWV3IF9hbmltYXRpb25EdXJhdGlvbl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXZWJUZXh0SW5kaWNhdG9yVmlldyBoYXNDb21wbGV0ZWRBbmltYXRpb25dKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV2ViVGV4dEluZGljYXRvclZpZXcgcHJlc2VudF0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXZWJUZXh0SW5kaWNhdG9yVmlldyBoaWRlV2l0aENvbXBsZXRpb25IYW5kbGVyOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXZWJUZXh0SW5kaWNhdG9yVmlldyBzZXRBbmltYXRpb25Q
cm9ncmVzczpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVGV4dEluZGljYXRvclZpZXcgaXNG
bGlwcGVkXSk6IERlbGV0ZWQuCisKIDIwMjEtMDUtMDggIFJpY2t5IE1vbmRlbGxvICA8cm1vbmRl
bGxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSB0eXBvCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dAppbmRleCBhNzVkY2M3ZWFhZjlkYTkwODFiYmU3OTdiYzQ5ODRiNzg2Nzk1ZWZkLi42MzY0NzNm
NGI0ODU0ZDNkNjRkMmExZDM0ZmZiNWRhZjk0MTA5MDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKQEAgLTE4Miw2ICsxODIsNyBAQCBwYWdlL2NvY29hL1BlcmZvcm1hbmNlTG9nZ2luZ0NvY29h
Lm1tCiBwYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0KIHBhZ2UvY29jb2Ev
UmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCiBwYWdlL2NvY29hL1NldHRpbmdzQmFzZUNvY29h
Lm1tCitwYWdlL2NvY29hL1dlYlRleHRJbmRpY2F0b3JMYXllci5tbQogcGFnZS9pb3MvQ29udGVu
dENoYW5nZU9ic2VydmVyLmNwcAogcGFnZS9pb3MvRE9NVGltZXJIb2xkaW5nVGFuay5jcHAKIHBh
Z2UvaW9zL0V2ZW50SGFuZGxlcklPUy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDUwYzBhYTY0MzMwOGYxYjI1ZTRkOWQ2Y2E3
MGJlYWVhMTBmNWQ0ZmIuLjMyNDEzODhlZGExYjdlMjc5ODM0N2MxNTc5ZjIzNjFhMWE4ZDkwYTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTEyNzEsNiArMTI3MSw3IEBACiAJCTQ0QUUwNDVDMjU3OUNGRkIwMEM0MkU2NSAvKiBB
cHBIaWdobGlnaHRSYW5nZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ0QUUwNDVBMjU3OUNGRkIwMEM0MkU2NSAvKiBBcHBIaWdobGlnaHRSYW5n
ZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk0NEM5OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Qzk5MTg1MEYzRDFFQkUw
MDU4NjY3MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oICovOyB9OwogCQk0NEM5OTE5RjBGM0QyMTBF
MDA1ODY2NzAgLyogVGhlbWVJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ0Qzk5MTlEMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5oICovOyB9
OworCQk0NENFMkJCRjI2NDM3OUFGMDA3QUUxMTAgLyogV2ViVGV4dEluZGljYXRvckxheWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NENFMkJCRTI2
NDM3OTlFMDA3QUUxMTAgLyogV2ViVGV4dEluZGljYXRvckxheWVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDRFMzQ5RjkyNDZGNEUxOTAwNjg0
NzlDIC8qIExpYldlYlJUQ0VudW1UcmFpdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ0RTM0OUY3MjQ2RjREQzcwMDY4NDc5QyAvKiBMaWJXZWJSVENF
bnVtVHJhaXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDUwQ0VCRjExNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVGMTUwNzNC
QkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDUxMjUwMjMxNURDRTM3RDAwMkY4NEUyIC8qIFNw
aW5CdXR0b25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NTEyNTAyMTE1RENFMzdEMDAyRjg0RTIgLyogU3BpbkJ1dHRvbkVsZW1lbnQuaCAq
LzsgfTsKQEAgLTgyNTYsNiArODI1Nyw4IEBACiAJCTQ0Qzk5MTlEMEYzRDIxMEUwMDU4NjY3MCAv
KiBUaGVtZUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaGVtZUlPUy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEM5OTE5RTBGM0QyMTBFMDA1ODY2NzAg
LyogVGhlbWVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBU
aGVtZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRDQTI4NDMyNDVGQ0E1
MDAwQzk0QzdGIC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dElPUy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4
dElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDRDRTJCQkMyNjQzNzk5RDAw
N0FFMTEwIC8qIFdlYlRleHRJbmRpY2F0b3JMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYlRleHRJbmRpY2F0b3JMYXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDRDRTJCQkUyNjQzNzk5RTAwN0FFMTEwIC8qIFdlYlRleHRJbmRpY2F0b3JMYXllci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJUZXh0SW5kaWNhdG9yTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDREOERBOTgxMzk1NDVCRTAwMzM3Qjc1IC8qIFNWR01QYXRoRWxlbWVudC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHTVBhdGhFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDREOERBOUExMzk1NDVDRDAwMzM3Qjc1IC8qIFNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdBbmltYXRlTW90aW9u
RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0RTM0OUY3MjQ2RjRE
QzcwMDY4NDc5QyAvKiBMaWJXZWJSVENFbnVtVHJhaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IExpYldlYlJUQ0VudW1UcmFpdHMuaDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJX
ZWJSVENFbnVtVHJhaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTgzNiw2
ICsyMTgzOSw4IEBACiAJCQkJQURGRTJCNTQxQkQ1RjQxMjAwREFCNDU3IC8qIFJlc291cmNlVXNh
Z2VPdmVybGF5Q29jb2EubW0gKi8sCiAJCQkJQTUwNzFFODgxQzU2RDRGQTAwOTk1MUJFIC8qIFJl
c291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbSAqLywKIAkJCQlBMTgyRDVCNjFCRTcyMjYyMDA4N0E3
Q0MgLyogU2V0dGluZ3NCYXNlQ29jb2EubW0gKi8sCisJCQkJNDRDRTJCQkUyNjQzNzk5RTAwN0FF
MTEwIC8qIFdlYlRleHRJbmRpY2F0b3JMYXllci5oICovLAorCQkJCTQ0Q0UyQkJDMjY0Mzc5OUQw
MDdBRTExMCAvKiBXZWJUZXh0SW5kaWNhdG9yTGF5ZXIubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9
IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM1ODAwLDYgKzM1ODA1LDcg
QEAKIAkJCQk5M0IzOEVDNDI1ODIxREI3MDAxOThFNjMgLyogV2ViU3BlZWNoUmVjb2duaXplclRh
c2tNb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxRjg3NTZCMjFFMjJDMzM1MDA0MkM0MEQgLyog
V2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMURF
QTQ1NjFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFja2Ryb3BMYXllci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNDRDRTJCQkYyNjQzNzlBRjAwN0FFMTEwIC8qIFdlYlRleHRJbmRpY2F0b3JM
YXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBGQTMxNDk2OTM5MTAwRkI1QkQ4IC8qIFdl
YlRpbGVkQmFja2luZ0xheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxREFCMzExMjI1MUQ2QkYz
MDBGQzk0ODUgLyogV2ViVmlkZW9Db250YWluZXJMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
M0Y0MkIzMUQxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJB
VktpdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nv
Y29hL1dlYlRleHRJbmRpY2F0b3JMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9X
ZWJUZXh0SW5kaWNhdG9yTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDEzZDA0MGVmZmI3NWIwZWEwMDRl
YTU1MWUzMjIxNTRhZTE4ZmFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9jb2NvYS9XZWJUZXh0SW5kaWNhdG9yTGF5ZXIuaApAQCAtMCwwICsxLDU1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgIlRleHRJbmRpY2F0b3IuaCIKKyNpbXBvcnQg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KKworQGludGVyZmFjZSBXZWJU
ZXh0SW5kaWNhdG9yTGF5ZXIgOiBDQUxheWVyIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dElu
ZGljYXRvcj4gX3RleHRJbmRpY2F0b3I7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IF9ib3VuY2VM
YXllcnM7CisgICAgQ0dTaXplIF9tYXJnaW47CisgICAgYm9vbCBfaGFzQ29tcGxldGVkQW5pbWF0
aW9uOworICAgIEJPT0wgX2ZhZGluZ091dDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
RnJhbWU6KENHUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9y
Jil0ZXh0SW5kaWNhdG9yIG1hcmdpbjooQ0dTaXplKW1hcmdpbiBvZmZzZXQ6KENHUG9pbnQpb2Zm
c2V0OworCistIChib29sKWluZGljYXRvcldhbnRzTWFudWFsQW5pbWF0aW9uOihjb25zdCBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yJilpbmRpY2F0b3I7CistIChib29sKWluZGljYXRvcldhbnRzQm91
bmNlOihjb25zdCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yJilpbmRpY2F0b3I7CisKKy0gKHZvaWQp
cHJlc2VudDsKKy0gKHZvaWQpaGlkZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lk
KSljb21wbGV0aW9uSGFuZGxlcjsKKworLSAodm9pZClzZXRBbmltYXRpb25Qcm9ncmVzczooZmxv
YXQpcHJvZ3Jlc3M7CistIChCT09MKWhhc0NvbXBsZXRlZEFuaW1hdGlvbjsKKworQHByb3BlcnR5
IChub25hdG9taWMsIGdldHRlcj1pc0ZhZGluZ091dCkgQk9PTCBmYWRpbmdPdXQ7CisKK0BlbmQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvV2ViVGV4dEluZGljYXRvckxh
eWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9XZWJUZXh0SW5kaWNhdG9yTGF5ZXIu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWNlNDM3NDkyMmZlMmE0MzQ1ZmJkYmFhMjcyYzExODlmYWNjY2NmYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvV2ViVGV4dEluZGlj
YXRvckxheWVyLm1tCkBAIC0wLDAgKzEsNDAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJXZWJUZXh0SW5kaWNhdG9yTGF5ZXIuaCIKKworI2ltcG9ydCAiR2Vv
bWV0cnlVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAi
UGF0aFV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGV4dEluZGljYXRvci5oIgorI2ltcG9ydCAiV2Vi
QWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlLmgiCisjaW1wb3J0IDxwYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+
CisKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TQ29sb3JTUEku
aD4KKyNlbmRpZgorCitjb25zdCBDRlRpbWVJbnRlcnZhbCBib3VuY2VBbmltYXRpb25EdXJhdGlv
biA9IDAuMTI7Citjb25zdCBDRlRpbWVJbnRlcnZhbCBib3VuY2VXaXRoQ3Jvc3NmYWRlQW5pbWF0
aW9uRHVyYXRpb24gPSAwLjM7Citjb25zdCBDRlRpbWVJbnRlcnZhbCBmYWRlSW5BbmltYXRpb25E
dXJhdGlvbiA9IDAuMTU7Citjb25zdCBDRlRpbWVJbnRlcnZhbCB0aW1lQmVmb3JlRmFkZVN0YXJ0
cyA9IGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9uICsgMC4yOworY29uc3QgQ0ZUaW1lSW50ZXJ2YWwg
ZmFkZU91dEFuaW1hdGlvbkR1cmF0aW9uID0gMC4zOworCitjb25zdCBDR0Zsb2F0IG1pZEJvdW5j
ZVNjYWxlID0gMS4yNTsKK2NvbnN0IENHRmxvYXQgYm9yZGVyV2lkdGggPSAwOworY29uc3QgQ0dG
bG9hdCBjb3JuZXJSYWRpdXMgPSAwOworY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93T2Zmc2V0WCA9
IDA7Citjb25zdCBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRZID0gMTsKK2NvbnN0IENHRmxvYXQg
ZHJvcFNoYWRvd0JsdXJSYWRpdXMgPSAyOworY29uc3QgQ0dGbG9hdCByaW1TaGFkb3dCbHVyUmFk
aXVzID0gMTsKKworTlNTdHJpbmcgKnRleHRMYXllcktleSA9IEAiVGV4dExheWVyIjsKK05TU3Ry
aW5nICpkcm9wU2hhZG93TGF5ZXJLZXkgPSBAIkRyb3BTaGFkb3dMYXllciI7CitOU1N0cmluZyAq
cmltU2hhZG93TGF5ZXJLZXkgPSBAIlJpbVNoYWRvd0xheWVyIjsKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKKworI2lmIFBMQVRGT1JNKE1BQykKK09CSkNfQ0xBU1MgTlNDb2xvcjsKK3Vz
aW5nIENvY29hQ29sb3IgPSBOU0NvbG9yOworI2VuZGlmCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJU
ZXh0SW5kaWNhdG9yTGF5ZXIKKworQHN5bnRoZXNpemUgZmFkaW5nT3V0ID0gX2ZhZGluZ091dDsK
Kworc3RhdGljIGJvb2wgaW5kaWNhdG9yV2FudHNDb250ZW50Q3Jvc3NmYWRlKGNvbnN0IFRleHRJ
bmRpY2F0b3ImIGluZGljYXRvcikKK3sKKyAgICBpZiAoIWluZGljYXRvci5kYXRhKCkuY29udGVu
dEltYWdlV2l0aEhpZ2hsaWdodCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNo
IChpbmRpY2F0b3IucHJlc2VudGF0aW9uVHJhbnNpdGlvbigpKSB7CisgICAgY2FzZSBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb246OkJvdW5jZToKKyAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uOjpGYWRlSW46CisgICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlv
bjo6Tm9uZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaW5kaWNhdG9y
V2FudHNGYWRlSW4oY29uc3QgVGV4dEluZGljYXRvciYgaW5kaWNhdG9yKQoreworICAgIHN3aXRj
aCAoaW5kaWNhdG9yLnByZXNlbnRhdGlvblRyYW5zaXRpb24oKSkgeworICAgIGNhc2UgVGV4dElu
ZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbjoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3Vu
Y2U6CisgICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNl
QW5kQ3Jvc3NmYWRlOgorICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRp
b246Ok5vbmU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy0gKGJvb2wpaW5kaWNhdG9yV2Fu
dHNCb3VuY2U6KGNvbnN0IFdlYkNvcmU6OlRleHRJbmRpY2F0b3ImKWluZGljYXRvcgoreworICAg
IHN3aXRjaCAoaW5kaWNhdG9yLnByZXNlbnRhdGlvblRyYW5zaXRpb24oKSkgeworICAgIGNhc2Ug
VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZToK
KyAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2U6Cisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9u
VHJhbnNpdGlvbjo6RmFkZUluOgorICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb246Ok5vbmU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy0gKGJvb2wpaW5kaWNh
dG9yV2FudHNNYW51YWxBbmltYXRpb246KGNvbnN0IFdlYkNvcmU6OlRleHRJbmRpY2F0b3ImKWlu
ZGljYXRvcgoreworICAgIHN3aXRjaCAoaW5kaWNhdG9yLnByZXNlbnRhdGlvblRyYW5zaXRpb24o
KSkgeworICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJ
bjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uOjpCb3VuY2U6CisgICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0
aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlOgorICAgIGNhc2UgVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUgdGV4dEluZGljYXRv
cjooV2ViQ29yZTo6VGV4dEluZGljYXRvciYpdGV4dEluZGljYXRvciBtYXJnaW46KENHU2l6ZSlt
YXJnaW4gb2Zmc2V0OihDR1BvaW50KW9mZnNldAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHNlbGYuZnJhbWUgPSBmcmFt
ZTsKKworICAgIF90ZXh0SW5kaWNhdG9yID0gJnRleHRJbmRpY2F0b3I7CisgICAgX21hcmdpbiA9
IG1hcmdpbjsKKworICAgIHNlbGYuYW5jaG9yUG9pbnQgPSBDR1BvaW50WmVybzsKKworICAgIFJl
ZlB0cjxOYXRpdmVJbWFnZT4gY29udGVudHNJbWFnZTsKKyAgICBGbG9hdFNpemUgY29udGVudHNJ
bWFnZUxvZ2ljYWxTaXplIHsgMSwgMSB9OworICAgIGlmIChhdXRvKiBjb250ZW50SW1hZ2UgPSBf
dGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCkpIHsKKyAgICAgICAgY29udGVudHNJbWFnZUxv
Z2ljYWxTaXplID0gY29udGVudEltYWdlLT5zaXplKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2VM
b2dpY2FsU2l6ZS5zY2FsZSgxIC8gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFj
dG9yKCkpOworICAgICAgICBpZiAoaW5kaWNhdG9yV2FudHNDb250ZW50Q3Jvc3NmYWRlKCpfdGV4
dEluZGljYXRvcikgJiYgX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQo
KSkKKyAgICAgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudElt
YWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBjb250ZW50c0ltYWdlID0gY29udGVudEltYWdlLT5uYXRpdmVJbWFnZSgpOworICAgIH0K
KworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYm91bmNlTGF5ZXJzID0gYWRvcHROUyhb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0dD
b2xvclJlZj4gaGlnaGxpZ2h0Q29sb3I7CisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IHJpbVNo
YWRvd0NvbG9yID1hZG9wdENGKENHQ29sb3JDcmVhdGVHZW5lcmljR3JheSgwLCAwLjM1KSk7Cisg
ICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGRyb3BTaGFkb3dDb2xvciA9IGFkb3B0Q0YoQ0dDb2xv
ckNyZWF0ZUdlbmVyaWNHcmF5KDAsIDAuMikpOworICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBi
b3JkZXJDb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZVNSR0IoMC45NiwgMC45LCAwLCAxKSk7
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGhpZ2hsaWdodENvbG9yID0gW05TQ29sb3IgZmluZEhp
Z2hsaWdodENvbG9yXS5DR0NvbG9yOworI2Vsc2UKKyAgICBoaWdobGlnaHRDb2xvciA9IGFkb3B0
Q0YoQ0dDb2xvckNyZWF0ZVNSR0IoLjk5LCAuODksIDAuMjIsIDEuMCkpOworI2VuZGlmCisgICAg
CisgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
cyA9IF90ZXh0SW5kaWNhdG9yLT50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCk7
CisKKyAgICBWZWN0b3I8UGF0aD4gcGF0aHMgPSBQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJp
bmtXcmFwcGVkUmVjdHModGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcywgY29ybmVy
UmFkaXVzKTsKKworICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6IHBhdGhzKSB7CisgICAgICAg
IEZsb2F0UmVjdCBwYXRoQm91bmRpbmdSZWN0ID0gcGF0aC5ib3VuZGluZ1JlY3QoKTsKKworICAg
ICAgICBQYXRoIHRyYW5zbGF0ZWRQYXRoOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNm
b3JtOworICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1wYXRoQm91bmRpbmdSZWN0LmxvY2F0
aW9uKCkpOworICAgICAgICB0cmFuc2xhdGVkUGF0aC5hZGRQYXRoKHBhdGgsIHRyYW5zZm9ybSk7
CisKKyAgICAgICAgRmxvYXRSZWN0IG9mZnNldFRleHRSZWN0ID0gcGF0aEJvdW5kaW5nUmVjdDsK
KyAgICAgICAgb2Zmc2V0VGV4dFJlY3QubW92ZShvZmZzZXQueCwgb2Zmc2V0LnkpOworCisgICAg
ICAgIEZsb2F0UmVjdCBib3VuY2VMYXllclJlY3QgPSBvZmZzZXRUZXh0UmVjdDsKKyAgICAgICAg
Ym91bmNlTGF5ZXJSZWN0Lm1vdmUoX21hcmdpbi53aWR0aCwgX21hcmdpbi5oZWlnaHQpOworCisg
ICAgICAgIFJldGFpblB0cjxDQUxheWVyPiBib3VuY2VMYXllciA9IGFkb3B0TlMoW1tDQUxheWVy
IGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtib3VuY2VMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0
aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOworICAgICAgICBbYm91bmNlTGF5
ZXIgc2V0RnJhbWU6Ym91bmNlTGF5ZXJSZWN0XTsKKyAgICAgICAgW2JvdW5jZUxheWVyIHNldE9w
YWNpdHk6MF07CisgICAgICAgIFtib3VuY2VMYXllcnMgYWRkT2JqZWN0OmJvdW5jZUxheWVyLmdl
dCgpXTsKKworICAgICAgICBGbG9hdFJlY3QgeWVsbG93SGlnaGxpZ2h0UmVjdChGbG9hdFBvaW50
KCksIGJvdW5jZUxheWVyUmVjdC5zaXplKCkpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAg
ICBSZXRhaW5QdHI8Q0FMYXllcj4gZHJvcFNoYWRvd0xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIg
YWxsb2NdIGluaXRdKTsKKyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXREZWxlZ2F0ZTpbV2Vi
QWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOworICAgICAgICBbZHJvcFNo
YWRvd0xheWVyIHNldFNoYWRvd0NvbG9yOmRyb3BTaGFkb3dDb2xvci5nZXQoKV07CisgICAgICAg
IFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93UmFkaXVzOmRyb3BTaGFkb3dCbHVyUmFkaXVzXTsK
KyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRTaGFkb3dPZmZzZXQ6Q0dTaXplTWFrZShkcm9w
U2hhZG93T2Zmc2V0WCwgZHJvcFNoYWRvd09mZnNldFkpXTsKKyAgICAgICAgW2Ryb3BTaGFkb3dM
YXllciBzZXRTaGFkb3dQYXRoOnRyYW5zbGF0ZWRQYXRoLnBsYXRmb3JtUGF0aCgpXTsKKyAgICAg
ICAgW2Ryb3BTaGFkb3dMYXllciBzZXRTaGFkb3dPcGFjaXR5OjFdOworICAgICAgICBbZHJvcFNo
YWRvd0xheWVyIHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOworICAgICAgICBbYm91bmNl
TGF5ZXIgYWRkU3VibGF5ZXI6ZHJvcFNoYWRvd0xheWVyLmdldCgpXTsKKyAgICAgICAgW2JvdW5j
ZUxheWVyIHNldFZhbHVlOmRyb3BTaGFkb3dMYXllci5nZXQoKSBmb3JLZXk6ZHJvcFNoYWRvd0xh
eWVyS2V5XTsKKworICAgICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gcmltU2hhZG93TGF5ZXIgPSBh
ZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAgICAgICBbcmltU2hhZG93TGF5ZXIg
c2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsK
KyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOwor
ICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93Q29sb3I6cmltU2hhZG93Q29sb3IuZ2V0
KCldOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93UmFkaXVzOnJpbVNoYWRvd0Js
dXJSYWRpdXNdOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93UGF0aDp0cmFuc2xh
dGVkUGF0aC5wbGF0Zm9ybVBhdGgoKV07CisgICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRTaGFk
b3dPZmZzZXQ6Q0dTaXplWmVyb107CisgICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRTaGFkb3dP
cGFjaXR5OjFdOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0RnJhbWU6eWVsbG93SGlnaGxp
Z2h0UmVjdF07CisgICAgICAgIFtib3VuY2VMYXllciBhZGRTdWJsYXllcjpyaW1TaGFkb3dMYXll
ci5nZXQoKV07CisgICAgICAgIFtib3VuY2VMYXllciBzZXRWYWx1ZTpyaW1TaGFkb3dMYXllci5n
ZXQoKSBmb3JLZXk6cmltU2hhZG93TGF5ZXJLZXldOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
KyAgICAgICAgCisgICAgICAgIFJldGFpblB0cjxDQUxheWVyPiB0ZXh0TGF5ZXIgPSBhZG9wdE5T
KFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAgICAgICBbdGV4dExheWVyIHNldEJhY2tncm91
bmRDb2xvcjpoaWdobGlnaHRDb2xvci5nZXQoKV07CisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Qm9y
ZGVyQ29sb3I6Ym9yZGVyQ29sb3IuZ2V0KCldOworICAgICAgICBbdGV4dExheWVyIHNldEJvcmRl
cldpZHRoOmJvcmRlcldpZHRoXTsKKyAgICAgICAgW3RleHRMYXllciBzZXREZWxlZ2F0ZTpbV2Vi
QWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOworICAgICAgICBpZiAoY29u
dGVudHNJbWFnZSkKKyAgICAgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHM6KF9fYnJpZGdl
IGlkKWNvbnRlbnRzSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKV07CisKKyAgICAgICAgUmV0
YWluUHRyPENBU2hhcGVMYXllcj4gbWFza0xheWVyID0gYWRvcHROUyhbW0NBU2hhcGVMYXllciBh
bGxvY10gaW5pdF0pOworICAgICAgICBbbWFza0xheWVyIHNldFBhdGg6dHJhbnNsYXRlZFBhdGgu
cGxhdGZvcm1QYXRoKCldOworICAgICAgICBbdGV4dExheWVyIHNldE1hc2s6bWFza0xheWVyLmdl
dCgpXTsKKworICAgICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gcGF0aEJvdW5kaW5nUmVjdDsK
KyAgICAgICAgW3RleHRMYXllciBzZXRDb250ZW50c1JlY3Q6Q0dSZWN0TWFrZShpbWFnZVJlY3Qu
eCgpIC8gY29udGVudHNJbWFnZUxvZ2ljYWxTaXplLndpZHRoKCksIGltYWdlUmVjdC55KCkgLyBj
b250ZW50c0ltYWdlTG9naWNhbFNpemUuaGVpZ2h0KCksIGltYWdlUmVjdC53aWR0aCgpIC8gY29u
dGVudHNJbWFnZUxvZ2ljYWxTaXplLndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSAvIGNvbnRl
bnRzSW1hZ2VMb2dpY2FsU2l6ZS5oZWlnaHQoKSldOworICAgICAgICBbdGV4dExheWVyIHNldENv
bnRlbnRzR3Jhdml0eTprQ0FHcmF2aXR5Q2VudGVyXTsKKyAgICAgICAgW3RleHRMYXllciBzZXRD
b250ZW50c1NjYWxlOl90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpXTsK
KyAgICAgICAgW3RleHRMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsKKyAgICAg
ICAgW2JvdW5jZUxheWVyIHNldFZhbHVlOnRleHRMYXllci5nZXQoKSBmb3JLZXk6dGV4dExheWVy
S2V5XTsKKyAgICAgICAgW2JvdW5jZUxheWVyIGFkZFN1YmxheWVyOnRleHRMYXllci5nZXQoKV07
CisgICAgfQorCisgICAgc2VsZi5zdWJsYXllcnMgPSBib3VuY2VMYXllcnMuZ2V0KCk7CisgICAg
X2JvdW5jZUxheWVycyA9IGJvdW5jZUxheWVyczsKKworICAgIHJldHVybiBzZWxmOworfQorCitz
dGF0aWMgUmV0YWluUHRyPENBS2V5ZnJhbWVBbmltYXRpb24+IGNyZWF0ZUJvdW5jZUFuaW1hdGlv
bihDRlRpbWVJbnRlcnZhbCBkdXJhdGlvbikKK3sKKyAgICBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFu
aW1hdGlvbj4gYm91bmNlQW5pbWF0aW9uID0gW0NBS2V5ZnJhbWVBbmltYXRpb24gYW5pbWF0aW9u
V2l0aEtleVBhdGg6QCJ0cmFuc2Zvcm0iXTsKKyAgICBbYm91bmNlQW5pbWF0aW9uIHNldFZhbHVl
czpAWworICAgICAgICBbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOkNBVHJhbnNmb3Jt
M0RJZGVudGl0eV0sCisgICAgICAgIFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FU
cmFuc2Zvcm0zRE1ha2VTY2FsZShtaWRCb3VuY2VTY2FsZSwgbWlkQm91bmNlU2NhbGUsIDEpXSwK
KyAgICAgICAgW05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9ybTNESWRl
bnRpdHldCisgICAgICAgIF1dOworICAgIFtib3VuY2VBbmltYXRpb24gc2V0RHVyYXRpb246ZHVy
YXRpb25dOworCisgICAgcmV0dXJuIGJvdW5jZUFuaW1hdGlvbjsKK30KKworc3RhdGljIFJldGFp
blB0cjxDQUJhc2ljQW5pbWF0aW9uPiBjcmVhdGVDb250ZW50Q3Jvc3NmYWRlQW5pbWF0aW9uKENG
VGltZUludGVydmFsIGR1cmF0aW9uLCBUZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNhdG9yKQorewor
ICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBjcm9zc2ZhZGVBbmltYXRpb24gPSBbQ0FC
YXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAImNvbnRlbnRzIl07CisgICAgYXV0
byBjb250ZW50c0ltYWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+bmF0aXZlSW1h
Z2UoKTsKKyAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6KF9fYnJpZGdlIGlkKWNv
bnRlbnRzSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKV07CisgICAgW2Nyb3NzZmFkZUFuaW1h
dGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKKyAgICBbY3Jvc3NmYWRlQW5p
bWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246Tk9dOworICAgIFtjcm9zc2ZhZGVBbmltYXRp
b24gc2V0RHVyYXRpb246ZHVyYXRpb25dOworCisgICAgcmV0dXJuIGNyb3NzZmFkZUFuaW1hdGlv
bjsKK30KKworc3RhdGljIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBjcmVhdGVTaGFkb3dG
YWRlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0aW9uKQoreworICAgIFJldGFpblB0cjxD
QUJhc2ljQW5pbWF0aW9uPiBmYWRlU2hhZG93SW5BbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlv
biBhbmltYXRpb25XaXRoS2V5UGF0aDpAInNoYWRvd09wYWNpdHkiXTsKKyAgICBbZmFkZVNoYWRv
d0luQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpAMF07CisgICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlv
biBzZXRUb1ZhbHVlOkAxXTsKKyAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldEZpbGxNb2Rl
OmtDQUZpbGxNb2RlRm9yd2FyZHNdOworICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0UmVt
b3ZlZE9uQ29tcGxldGlvbjpOT107CisgICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlvbiBzZXREdXJh
dGlvbjpkdXJhdGlvbl07CisKKyAgICByZXR1cm4gZmFkZVNoYWRvd0luQW5pbWF0aW9uOworfQor
CitzdGF0aWMgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUZhZGVJbkFuaW1hdGlv
bihDRlRpbWVJbnRlcnZhbCBkdXJhdGlvbikKK3sKKyAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1h
dGlvbj4gZmFkZUluQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtl
eVBhdGg6QCJvcGFjaXR5Il07CisgICAgW2ZhZGVJbkFuaW1hdGlvbiBzZXRGcm9tVmFsdWU6QDBd
OworICAgIFtmYWRlSW5BbmltYXRpb24gc2V0VG9WYWx1ZTpAMV07CisgICAgW2ZhZGVJbkFuaW1h
dGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKKyAgICBbZmFkZUluQW5pbWF0
aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246Tk9dOworICAgIFtmYWRlSW5BbmltYXRpb24gc2V0
RHVyYXRpb246ZHVyYXRpb25dOworCisgICAgcmV0dXJuIGZhZGVJbkFuaW1hdGlvbjsKK30KKwor
LSAoQ0ZUaW1lSW50ZXJ2YWwpX2FuaW1hdGlvbkR1cmF0aW9uCit7CisgICAgaWYgKFtzZWxmIGlu
ZGljYXRvcldhbnRzQm91bmNlOipfdGV4dEluZGljYXRvcl0pIHsKKyAgICAgICAgaWYgKGluZGlj
YXRvcldhbnRzQ29udGVudENyb3NzZmFkZSgqX3RleHRJbmRpY2F0b3IpKQorICAgICAgICAgICAg
cmV0dXJuIGJvdW5jZVdpdGhDcm9zc2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKKyAgICAgICAgcmV0
dXJuIGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9uOworICAgIH0KKworICAgIHJldHVybiBmYWRlSW5B
bmltYXRpb25EdXJhdGlvbjsKK30KKworLSAoQk9PTCloYXNDb21wbGV0ZWRBbmltYXRpb24KK3sK
KyAgICByZXR1cm4gX2hhc0NvbXBsZXRlZEFuaW1hdGlvbjsKK30KKworLSAodm9pZClwcmVzZW50
Cit7CisgICAgYm9vbCB3YW50c0JvdW5jZSA9IFtzZWxmIGluZGljYXRvcldhbnRzQm91bmNlOipf
dGV4dEluZGljYXRvcl07CisgICAgYm9vbCB3YW50c0Nyb3NzZmFkZSA9IGluZGljYXRvcldhbnRz
Q29udGVudENyb3NzZmFkZSgqX3RleHRJbmRpY2F0b3IpOworICAgIGJvb2wgd2FudHNGYWRlSW4g
PSBpbmRpY2F0b3JXYW50c0ZhZGVJbigqX3RleHRJbmRpY2F0b3IpOworICAgIENGVGltZUludGVy
dmFsIGFuaW1hdGlvbkR1cmF0aW9uID0gW3NlbGYgX2FuaW1hdGlvbkR1cmF0aW9uXTsKKworICAg
IF9oYXNDb21wbGV0ZWRBbmltYXRpb24gPSBmYWxzZTsKKworICAgIFJldGFpblB0cjxDQUFuaW1h
dGlvbj4gcHJlc2VudGF0aW9uQW5pbWF0aW9uOworICAgIGlmICh3YW50c0JvdW5jZSkKKyAgICAg
ICAgcHJlc2VudGF0aW9uQW5pbWF0aW9uID0gY3JlYXRlQm91bmNlQW5pbWF0aW9uKGFuaW1hdGlv
bkR1cmF0aW9uKTsKKyAgICBlbHNlIGlmICh3YW50c0ZhZGVJbikKKyAgICAgICAgcHJlc2VudGF0
aW9uQW5pbWF0aW9uID0gY3JlYXRlRmFkZUluQW5pbWF0aW9uKGFuaW1hdGlvbkR1cmF0aW9uKTsK
KworICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBjcm9zc2ZhZGVBbmltYXRpb247Cisg
ICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGZhZGVTaGFkb3dJbkFuaW1hdGlvbjsKKyAg
ICBpZiAod2FudHNDcm9zc2ZhZGUpIHsKKyAgICAgICAgY3Jvc3NmYWRlQW5pbWF0aW9uID0gY3Jl
YXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbihhbmltYXRpb25EdXJhdGlvbiwgKl90ZXh0SW5k
aWNhdG9yKTsKKyAgICAgICAgZmFkZVNoYWRvd0luQW5pbWF0aW9uID0gY3JlYXRlU2hhZG93RmFk
ZUFuaW1hdGlvbihhbmltYXRpb25EdXJhdGlvbik7CisgICAgfQorCisgICAgW0NBVHJhbnNhY3Rp
b24gYmVnaW5dOworICAgIGZvciAoQ0FMYXllciAqYm91bmNlTGF5ZXIgaW4gX2JvdW5jZUxheWVy
cy5nZXQoKSkgeworICAgICAgICBpZiAoW3NlbGYgaW5kaWNhdG9yV2FudHNNYW51YWxBbmltYXRp
b246Kl90ZXh0SW5kaWNhdG9yXSkKKyAgICAgICAgICAgIGJvdW5jZUxheWVyLnNwZWVkID0gMDsK
KworICAgICAgICBpZiAoIXdhbnRzRmFkZUluKQorICAgICAgICAgICAgYm91bmNlTGF5ZXIub3Bh
Y2l0eSA9IDE7CisKKyAgICAgICAgaWYgKHByZXNlbnRhdGlvbkFuaW1hdGlvbikKKyAgICAgICAg
ICAgIFtib3VuY2VMYXllciBhZGRBbmltYXRpb246cHJlc2VudGF0aW9uQW5pbWF0aW9uLmdldCgp
IGZvcktleTpAInByZXNlbnRhdGlvbiJdOworCisgICAgICAgIGlmICh3YW50c0Nyb3NzZmFkZSkg
eworICAgICAgICAgICAgW1tib3VuY2VMYXllciB2YWx1ZUZvcktleTp0ZXh0TGF5ZXJLZXldIGFk
ZEFuaW1hdGlvbjpjcm9zc2ZhZGVBbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiY29udGVudFRyYW5z
aXRpb24iXTsKKyAgICAgICAgICAgIFtbYm91bmNlTGF5ZXIgdmFsdWVGb3JLZXk6ZHJvcFNoYWRv
d0xheWVyS2V5XSBhZGRBbmltYXRpb246ZmFkZVNoYWRvd0luQW5pbWF0aW9uLmdldCgpIGZvcktl
eTpAImZhZGVTaGFkb3dJbiJdOworICAgICAgICAgICAgW1tib3VuY2VMYXllciB2YWx1ZUZvcktl
eTpyaW1TaGFkb3dMYXllcktleV0gYWRkQW5pbWF0aW9uOmZhZGVTaGFkb3dJbkFuaW1hdGlvbi5n
ZXQoKSBmb3JLZXk6QCJmYWRlU2hhZG93SW4iXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBbQ0FU
cmFuc2FjdGlvbiBjb21taXRdOworfQorCistICh2b2lkKWhpZGVXaXRoQ29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBSZXRhaW5QdHI8Q0FC
YXNpY0FuaW1hdGlvbj4gZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlv
bldpdGhLZXlQYXRoOkAib3BhY2l0eSJdOworICAgIFtmYWRlQW5pbWF0aW9uIHNldEZyb21WYWx1
ZTpAMV07CisgICAgW2ZhZGVBbmltYXRpb24gc2V0VG9WYWx1ZTpAMF07CisgICAgW2ZhZGVBbmlt
YXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CisgICAgW2ZhZGVBbmltYXRp
b24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CisgICAgW2ZhZGVBbmltYXRpb24gc2V0RHVy
YXRpb246ZmFkZU91dEFuaW1hdGlvbkR1cmF0aW9uXTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJl
Z2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRDb21wbGV0aW9uQmxvY2s6Y29tcGxldGlvbkhh
bmRsZXJdOworICAgIFtzZWxmIGFkZEFuaW1hdGlvbjpmYWRlQW5pbWF0aW9uLmdldCgpIGZvcktl
eTpAImZhZGVPdXQiXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCistICh2b2lk
KXNldEFuaW1hdGlvblByb2dyZXNzOihmbG9hdClwcm9ncmVzcworeworICAgIGlmIChfaGFzQ29t
cGxldGVkQW5pbWF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocHJvZ3Jlc3MgPT0g
MSkgeworICAgICAgICBfaGFzQ29tcGxldGVkQW5pbWF0aW9uID0gdHJ1ZTsKKworICAgICAgICBm
b3IgKENBTGF5ZXIgKmJvdW5jZUxheWVyIGluIF9ib3VuY2VMYXllcnMuZ2V0KCkpIHsKKyAgICAg
ICAgICAgIC8vIENvbnRpbnVlIHRoZSBhbmltYXRpb24gZnJvbSB3aGVyZXZlciBpdCBoYWQgbWFu
dWFsbHkgcHJvZ3Jlc3NlZCB0by4KKyAgICAgICAgICAgIENGVGltZUludGVydmFsIGJlZ2luVGlt
ZSA9IGJvdW5jZUxheWVyLnRpbWVPZmZzZXQ7CisgICAgICAgICAgICBib3VuY2VMYXllci5zcGVl
ZCA9IDE7CisgICAgICAgICAgICBiZWdpblRpbWUgPSBbYm91bmNlTGF5ZXIgY29udmVydFRpbWU6
Q0FDdXJyZW50TWVkaWFUaW1lKCkgZnJvbUxheWVyOm5pbF0gLSBiZWdpblRpbWU7CisgICAgICAg
ICAgICBib3VuY2VMYXllci5iZWdpblRpbWUgPSBiZWdpblRpbWU7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBDRlRpbWVJbnRlcnZhbCBhbmltYXRpb25EdXJhdGlvbiA9IFtzZWxm
IF9hbmltYXRpb25EdXJhdGlvbl07CisgICAgICAgIGZvciAoQ0FMYXllciAqYm91bmNlTGF5ZXIg
aW4gX2JvdW5jZUxheWVycy5nZXQoKSkKKyAgICAgICAgICAgIGJvdW5jZUxheWVyLnRpbWVPZmZz
ZXQgPSBwcm9ncmVzcyAqIGFuaW1hdGlvbkR1cmF0aW9uOworICAgIH0KK30KKworLSAoQk9PTClp
c0ZsaXBwZWQKK3sKKyAgICByZXR1cm4gWUVTOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93LmgKaW5kZXggNjQ3NWNlNWViYzkwN2FlMTg4
MGFmMTcxYzA3MzZmZjNlY2I1MDI2ZS4uYzNiMzNlYmEyYzhiYzBkNzU0NTlkZDIxNTA4OWI2NTI5
YzVkMzE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRv
cldpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5k
b3cuaApAQCAtMzIsNyArMzIsNyBAQAogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KIAogT0JKQ19D
TEFTUyBOU1ZpZXc7Ci1PQkpDX0NMQVNTIFdlYlRleHRJbmRpY2F0b3JWaWV3OworT0JKQ19DTEFT
UyBXZWJUZXh0SW5kaWNhdG9yTGF5ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzIs
NyArNzIsOCBAQCBwcml2YXRlOgogICAgIE5TVmlldyAqbV90YXJnZXRWaWV3OwogICAgIFJlZlB0
cjxUZXh0SW5kaWNhdG9yPiBtX3RleHRJbmRpY2F0b3I7CiAgICAgUmV0YWluUHRyPE5TV2luZG93
PiBtX3RleHRJbmRpY2F0b3JXaW5kb3c7Ci0gICAgUmV0YWluUHRyPFdlYlRleHRJbmRpY2F0b3JW
aWV3PiBtX3RleHRJbmRpY2F0b3JWaWV3OworICAgIFJldGFpblB0cjxOU1ZpZXc+IG1fdGV4dElu
ZGljYXRvclZpZXc7CisgICAgUmV0YWluUHRyPFdlYlRleHRJbmRpY2F0b3JMYXllcj4gbV90ZXh0
SW5kaWNhdG9yTGF5ZXI7CiAKICAgICBSdW5Mb29wOjpUaW1lcjxUZXh0SW5kaWNhdG9yV2luZG93
PiBtX3RlbXBvcmFyeVRleHRJbmRpY2F0b3JUaW1lcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQppbmRleCAyNzJlZDQ0Nzc0YjU2NWY4Y2Ex
YWQ0YWUwNzZkMDEzNDQ3MzAxNzYzLi5kN2JmYmNjMTljODRjZGYzNmVkM2FiNDdmMTcxNjEwNGM4
ZWVhYjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9y
V2luZG93Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5k
b3cubW0KQEAgLTMzLDM3OCArMzMsMTkgQEAKICNpbXBvcnQgIlBhdGhVdGlsaXRpZXMuaCIKICNp
bXBvcnQgIlRleHRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIldlYkFjdGlvbkRpc2FibGluZ0NBTGF5
ZXJEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV2ViVGV4dEluZGljYXRvckxheWVyLmgiCiAjaW1wb3J0
IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9O
U0NvbG9yU1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KIAog
Y29uc3QgQ0ZUaW1lSW50ZXJ2YWwgYm91bmNlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjEyOwotY29u
c3QgQ0ZUaW1lSW50ZXJ2YWwgYm91bmNlV2l0aENyb3NzZmFkZUFuaW1hdGlvbkR1cmF0aW9uID0g
MC4zOwotY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgZmFkZUluQW5pbWF0aW9uRHVyYXRpb24gPSAwLjE1
OwogY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgdGltZUJlZm9yZUZhZGVTdGFydHMgPSBib3VuY2VBbmlt
YXRpb25EdXJhdGlvbiArIDAuMjsKLWNvbnN0IENGVGltZUludGVydmFsIGZhZGVPdXRBbmltYXRp
b25EdXJhdGlvbiA9IDAuMzsKIAogY29uc3QgQ0dGbG9hdCBtaWRCb3VuY2VTY2FsZSA9IDEuMjU7
Ci1jb25zdCBDR0Zsb2F0IGJvcmRlcldpZHRoID0gMDsKLWNvbnN0IENHRmxvYXQgY29ybmVyUmFk
aXVzID0gMDsKLWNvbnN0IENHRmxvYXQgZHJvcFNoYWRvd09mZnNldFggPSAwOwotY29uc3QgQ0dG
bG9hdCBkcm9wU2hhZG93T2Zmc2V0WSA9IDE7CiBjb25zdCBDR0Zsb2F0IGRyb3BTaGFkb3dCbHVy
UmFkaXVzID0gMjsKLWNvbnN0IENHRmxvYXQgcmltU2hhZG93Qmx1clJhZGl1cyA9IDE7Ci0KLU5T
U3RyaW5nICp0ZXh0TGF5ZXJLZXkgPSBAIlRleHRMYXllciI7Ci1OU1N0cmluZyAqZHJvcFNoYWRv
d0xheWVyS2V5ID0gQCJEcm9wU2hhZG93TGF5ZXIiOwotTlNTdHJpbmcgKnJpbVNoYWRvd0xheWVy
S2V5ID0gQCJSaW1TaGFkb3dMYXllciI7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1A
aW50ZXJmYWNlIFdlYlRleHRJbmRpY2F0b3JWaWV3IDogTlNWaWV3IHsKLSAgICBSZWZQdHI8VGV4
dEluZGljYXRvcj4gX3RleHRJbmRpY2F0b3I7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXk+IF9ib3Vu
Y2VMYXllcnM7Ci0gICAgTlNTaXplIF9tYXJnaW47Ci0gICAgYm9vbCBfaGFzQ29tcGxldGVkQW5p
bWF0aW9uOwotICAgIEJPT0wgX2ZhZGluZ091dDsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihUZXh0SW5kaWNhdG9yJil0ZXh0
SW5kaWNhdG9yIG1hcmdpbjooTlNTaXplKW1hcmdpbiBvZmZzZXQ6KE5TUG9pbnQpb2Zmc2V0Owot
Ci0tICh2b2lkKXByZXNlbnQ7Ci0tICh2b2lkKWhpZGVXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7Ci0KLS0gKHZvaWQpc2V0QW5pbWF0aW9uUHJv
Z3Jlc3M6KGZsb2F0KXByb2dyZXNzOwotLSAoQk9PTCloYXNDb21wbGV0ZWRBbmltYXRpb247Ci0K
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNGYWRpbmdPdXQpIEJPT0wgZmFkaW5nT3V0
OwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJUZXh0SW5kaWNhdG9yVmlldwotCi1Ac3lu
dGhlc2l6ZSBmYWRpbmdPdXQgPSBfZmFkaW5nT3V0OwotCi1zdGF0aWMgYm9vbCBpbmRpY2F0b3JX
YW50c0JvdW5jZShjb25zdCBUZXh0SW5kaWNhdG9yJiBpbmRpY2F0b3IpCi17Ci0gICAgc3dpdGNo
IChpbmRpY2F0b3IucHJlc2VudGF0aW9uVHJhbnNpdGlvbigpKSB7Ci0gICAgY2FzZSBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlOgotICAgIGNh
c2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZToKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uOjpGYWRlSW46Ci0gICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlv
bjo6Tm9uZToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgaW5kaWNhdG9y
V2FudHNDb250ZW50Q3Jvc3NmYWRlKGNvbnN0IFRleHRJbmRpY2F0b3ImIGluZGljYXRvcikKLXsK
LSAgICBpZiAoIWluZGljYXRvci5kYXRhKCkuY29udGVudEltYWdlV2l0aEhpZ2hsaWdodCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoIChpbmRpY2F0b3IucHJlc2VudGF0aW9u
VHJhbnNpdGlvbigpKSB7Ci0gICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNh
c2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZToKLSAgICBjYXNl
IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpGYWRlSW46Ci0gICAgY2FzZSBU
ZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZToKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotc3RhdGljIGJvb2wgaW5kaWNhdG9yV2FudHNGYWRlSW4oY29uc3QgVGV4dElu
ZGljYXRvciYgaW5kaWNhdG9yKQotewotICAgIHN3aXRjaCAoaW5kaWNhdG9yLnByZXNlbnRhdGlv
blRyYW5zaXRpb24oKSkgewotICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb246OkZhZGVJbjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIFRleHRJbmRp
Y2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2U6Ci0gICAgY2FzZSBUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlOgotICAgIGNhc2Ug
VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmU6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGluZGljYXRvcldhbnRzTWFudWFsQW5pbWF0aW9uKGNv
bnN0IFRleHRJbmRpY2F0b3ImIGluZGljYXRvcikKLXsKLSAgICBzd2l0Y2ggKGluZGljYXRvci5w
cmVzZW50YXRpb25UcmFuc2l0aW9uKCkpIHsKLSAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uOjpGYWRlSW46Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2Fz
ZSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlOgotICAgIGNhc2Ug
VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZToK
LSAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lOgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNS
ZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFRleHRJbmRpY2F0b3ImKXRleHRJbmRpY2F0b3IgbWFy
Z2luOihOU1NpemUpbWFyZ2luIG9mZnNldDooTlNQb2ludClvZmZzZXQKLXsKLSAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIF90ZXh0SW5kaWNhdG9yID0gJnRleHRJbmRpY2F0b3I7Ci0gICAgX21hcmdpbiA9IG1h
cmdpbjsKLQotICAgIHNlbGYud2FudHNMYXllciA9IFlFUzsKLSAgICBzZWxmLmxheWVyLmFuY2hv
clBvaW50ID0gQ0dQb2ludFplcm87Ci0KLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvbnRlbnRz
SW1hZ2U7Ci0gICAgRmxvYXRTaXplIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZSB7IDEsIDEgfTsK
LSAgICBpZiAoYXV0byogY29udGVudEltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpKSB7Ci0gICAgICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZSA9IGNvbnRlbnRJbWFnZS0+
c2l6ZSgpOwotICAgICAgICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUoMSAvIF90ZXh0
SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKLSAgICAgICAgaWYgKGluZGlj
YXRvcldhbnRzQ29udGVudENyb3NzZmFkZSgqX3RleHRJbmRpY2F0b3IpICYmIF90ZXh0SW5kaWNh
dG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCkpCi0gICAgICAgICAgICBjb250ZW50c0lt
YWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQoKS0+bmF0aXZl
SW1hZ2UoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGVudHNJbWFnZSA9IGNvbnRl
bnRJbWFnZS0+bmF0aXZlSW1hZ2UoKTsKLSAgICB9Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
QXJyYXk+IGJvdW5jZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dF0pOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGhpZ2hsaWdodENvbG9yID0gW05TQ29s
b3IgZmluZEhpZ2hsaWdodENvbG9yXS5DR0NvbG9yOwotICAgIFJldGFpblB0cjxDR0NvbG9yUmVm
PiByaW1TaGFkb3dDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVdoaXRlOjAgYWxwaGE6
MC4zNV0uQ0dDb2xvcjsKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gZHJvcFNoYWRvd0NvbG9y
ID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlV2hpdGU6MCBhbHBoYTowLjJdLkNHQ29sb3I7Ci0K
LSAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gYm9yZGVyQ29sb3IgPSBbTlNDb2xvciBjb2xvcldp
dGhEZXZpY2VSZWQ6Ljk2IGdyZWVuOi45MCBibHVlOjAgYWxwaGE6MV0uQ0dDb2xvcjsKLQotICAg
IFZlY3RvcjxGbG9hdFJlY3Q+IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBf
dGV4dEluZGljYXRvci0+dGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcygpOwotCi0g
ICAgVmVjdG9yPFBhdGg+IHBhdGhzID0gUGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3Jh
cHBlZFJlY3RzKHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMsIGNvcm5lclJhZGl1
cyk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBwYXRocykgewotICAgICAgICBGbG9h
dFJlY3QgcGF0aEJvdW5kaW5nUmVjdCA9IHBhdGguYm91bmRpbmdSZWN0KCk7Ci0KLSAgICAgICAg
UGF0aCB0cmFuc2xhdGVkUGF0aDsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsK
LSAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtcGF0aEJvdW5kaW5nUmVjdC5sb2NhdGlvbigp
KTsKLSAgICAgICAgdHJhbnNsYXRlZFBhdGguYWRkUGF0aChwYXRoLCB0cmFuc2Zvcm0pOwotCi0g
ICAgICAgIEZsb2F0UmVjdCBvZmZzZXRUZXh0UmVjdCA9IHBhdGhCb3VuZGluZ1JlY3Q7Ci0gICAg
ICAgIG9mZnNldFRleHRSZWN0Lm1vdmUob2Zmc2V0LngsIG9mZnNldC55KTsKLQotICAgICAgICBG
bG9hdFJlY3QgYm91bmNlTGF5ZXJSZWN0ID0gb2Zmc2V0VGV4dFJlY3Q7Ci0gICAgICAgIGJvdW5j
ZUxheWVyUmVjdC5tb3ZlKF9tYXJnaW4ud2lkdGgsIF9tYXJnaW4uaGVpZ2h0KTsKLQotICAgICAg
ICBSZXRhaW5QdHI8Q0FMYXllcj4gYm91bmNlTGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxv
Y10gaW5pdF0pOwotICAgICAgICBbYm91bmNlTGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRp
c2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKLSAgICAgICAgW2JvdW5jZUxheWVyIHNl
dEZyYW1lOmJvdW5jZUxheWVyUmVjdF07Ci0gICAgICAgIFtib3VuY2VMYXllciBzZXRPcGFjaXR5
OjBdOwotICAgICAgICBbYm91bmNlTGF5ZXJzIGFkZE9iamVjdDpib3VuY2VMYXllci5nZXQoKV07
Ci0KLSAgICAgICAgRmxvYXRSZWN0IHllbGxvd0hpZ2hsaWdodFJlY3QoRmxvYXRQb2ludCgpLCBi
b3VuY2VMYXllclJlY3Quc2l6ZSgpKTsKLQotICAgICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gZHJv
cFNoYWRvd0xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKLSAgICAgICAg
W2Ryb3BTaGFkb3dMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRl
bGVnYXRlIHNoYXJlZF1dOwotICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNoYWRvd0NvbG9y
OmRyb3BTaGFkb3dDb2xvci5nZXQoKV07Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hh
ZG93UmFkaXVzOmRyb3BTaGFkb3dCbHVyUmFkaXVzXTsKLSAgICAgICAgW2Ryb3BTaGFkb3dMYXll
ciBzZXRTaGFkb3dPZmZzZXQ6Q0dTaXplTWFrZShkcm9wU2hhZG93T2Zmc2V0WCwgZHJvcFNoYWRv
d09mZnNldFkpXTsKLSAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRTaGFkb3dQYXRoOnRyYW5z
bGF0ZWRQYXRoLnBsYXRmb3JtUGF0aCgpXTsKLSAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRT
aGFkb3dPcGFjaXR5OjFdOwotICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldEZyYW1lOnllbGxv
d0hpZ2hsaWdodFJlY3RdOwotICAgICAgICBbYm91bmNlTGF5ZXIgYWRkU3VibGF5ZXI6ZHJvcFNo
YWRvd0xheWVyLmdldCgpXTsKLSAgICAgICAgW2JvdW5jZUxheWVyIHNldFZhbHVlOmRyb3BTaGFk
b3dMYXllci5nZXQoKSBmb3JLZXk6ZHJvcFNoYWRvd0xheWVyS2V5XTsKLQotICAgICAgICBSZXRh
aW5QdHI8Q0FMYXllcj4gcmltU2hhZG93TGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10g
aW5pdF0pOwotICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRp
c2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVy
IHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOwotICAgICAgICBbcmltU2hhZG93TGF5ZXIg
c2V0U2hhZG93Q29sb3I6cmltU2hhZG93Q29sb3IuZ2V0KCldOwotICAgICAgICBbcmltU2hhZG93
TGF5ZXIgc2V0U2hhZG93UmFkaXVzOnJpbVNoYWRvd0JsdXJSYWRpdXNdOwotICAgICAgICBbcmlt
U2hhZG93TGF5ZXIgc2V0U2hhZG93UGF0aDp0cmFuc2xhdGVkUGF0aC5wbGF0Zm9ybVBhdGgoKV07
Ci0gICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRTaGFkb3dPZmZzZXQ6Q0dTaXplWmVyb107Ci0g
ICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRTaGFkb3dPcGFjaXR5OjFdOwotICAgICAgICBbcmlt
U2hhZG93TGF5ZXIgc2V0RnJhbWU6eWVsbG93SGlnaGxpZ2h0UmVjdF07Ci0gICAgICAgIFtib3Vu
Y2VMYXllciBhZGRTdWJsYXllcjpyaW1TaGFkb3dMYXllci5nZXQoKV07Ci0gICAgICAgIFtib3Vu
Y2VMYXllciBzZXRWYWx1ZTpyaW1TaGFkb3dMYXllci5nZXQoKSBmb3JLZXk6cmltU2hhZG93TGF5
ZXJLZXldOwotCi0gICAgICAgIFJldGFpblB0cjxDQUxheWVyPiB0ZXh0TGF5ZXIgPSBhZG9wdE5T
KFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOwotICAgICAgICBbdGV4dExheWVyIHNldEJhY2tncm91
bmRDb2xvcjpoaWdobGlnaHRDb2xvci5nZXQoKV07Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0Qm9y
ZGVyQ29sb3I6Ym9yZGVyQ29sb3IuZ2V0KCldOwotICAgICAgICBbdGV4dExheWVyIHNldEJvcmRl
cldpZHRoOmJvcmRlcldpZHRoXTsKLSAgICAgICAgW3RleHRMYXllciBzZXREZWxlZ2F0ZTpbV2Vi
QWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOwotICAgICAgICBpZiAoY29u
dGVudHNJbWFnZSkKLSAgICAgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHM6KF9fYnJpZGdl
IGlkKWNvbnRlbnRzSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKV07Ci0KLSAgICAgICAgUmV0
YWluUHRyPENBU2hhcGVMYXllcj4gbWFza0xheWVyID0gYWRvcHROUyhbW0NBU2hhcGVMYXllciBh
bGxvY10gaW5pdF0pOwotICAgICAgICBbbWFza0xheWVyIHNldFBhdGg6dHJhbnNsYXRlZFBhdGgu
cGxhdGZvcm1QYXRoKCldOwotICAgICAgICBbdGV4dExheWVyIHNldE1hc2s6bWFza0xheWVyLmdl
dCgpXTsKLQotICAgICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gcGF0aEJvdW5kaW5nUmVjdDsK
LSAgICAgICAgW3RleHRMYXllciBzZXRDb250ZW50c1JlY3Q6Q0dSZWN0TWFrZShpbWFnZVJlY3Qu
eCgpIC8gY29udGVudHNJbWFnZUxvZ2ljYWxTaXplLndpZHRoKCksIGltYWdlUmVjdC55KCkgLyBj
b250ZW50c0ltYWdlTG9naWNhbFNpemUuaGVpZ2h0KCksIGltYWdlUmVjdC53aWR0aCgpIC8gY29u
dGVudHNJbWFnZUxvZ2ljYWxTaXplLndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSAvIGNvbnRl
bnRzSW1hZ2VMb2dpY2FsU2l6ZS5oZWlnaHQoKSldOwotICAgICAgICBbdGV4dExheWVyIHNldENv
bnRlbnRzR3Jhdml0eTprQ0FHcmF2aXR5Q2VudGVyXTsKLSAgICAgICAgW3RleHRMYXllciBzZXRD
b250ZW50c1NjYWxlOl90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpXTsK
LSAgICAgICAgW3RleHRMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsKLSAgICAg
ICAgW2JvdW5jZUxheWVyIHNldFZhbHVlOnRleHRMYXllci5nZXQoKSBmb3JLZXk6dGV4dExheWVy
S2V5XTsKLSAgICAgICAgW2JvdW5jZUxheWVyIGFkZFN1YmxheWVyOnRleHRMYXllci5nZXQoKV07
Ci0gICAgfQotCi0gICAgc2VsZi5sYXllci5zdWJsYXllcnMgPSBib3VuY2VMYXllcnMuZ2V0KCk7
Ci0gICAgX2JvdW5jZUxheWVycyA9IGJvdW5jZUxheWVyczsKLQotICAgIHJldHVybiBzZWxmOwot
fQotCi1zdGF0aWMgUmV0YWluUHRyPENBS2V5ZnJhbWVBbmltYXRpb24+IGNyZWF0ZUJvdW5jZUFu
aW1hdGlvbihDRlRpbWVJbnRlcnZhbCBkdXJhdGlvbikKLXsKLSAgICBSZXRhaW5QdHI8Q0FLZXlm
cmFtZUFuaW1hdGlvbj4gYm91bmNlQW5pbWF0aW9uID0gW0NBS2V5ZnJhbWVBbmltYXRpb24gYW5p
bWF0aW9uV2l0aEtleVBhdGg6QCJ0cmFuc2Zvcm0iXTsKLSAgICBbYm91bmNlQW5pbWF0aW9uIHNl
dFZhbHVlczpAWwotICAgICAgICBbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOkNBVHJh
bnNmb3JtM0RJZGVudGl0eV0sCi0gICAgICAgIFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3Jt
M0Q6Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShtaWRCb3VuY2VTY2FsZSwgbWlkQm91bmNlU2NhbGUs
IDEpXSwKLSAgICAgICAgW05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9y
bTNESWRlbnRpdHldCi0gICAgICAgIF1dOwotICAgIFtib3VuY2VBbmltYXRpb24gc2V0RHVyYXRp
b246ZHVyYXRpb25dOwotCi0gICAgcmV0dXJuIGJvdW5jZUFuaW1hdGlvbjsKLX0KLQotc3RhdGlj
IFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBjcmVhdGVDb250ZW50Q3Jvc3NmYWRlQW5pbWF0
aW9uKENGVGltZUludGVydmFsIGR1cmF0aW9uLCBUZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNhdG9y
KQotewotICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBjcm9zc2ZhZGVBbmltYXRpb24g
PSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAImNvbnRlbnRzIl07Ci0g
ICAgYXV0byBjb250ZW50c0ltYWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+bmF0
aXZlSW1hZ2UoKTsKLSAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6KF9fYnJpZGdl
IGlkKWNvbnRlbnRzSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKV07Ci0gICAgW2Nyb3NzZmFk
ZUFuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKLSAgICBbY3Jvc3Nm
YWRlQW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246Tk9dOwotICAgIFtjcm9zc2ZhZGVB
bmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25dOwotCi0gICAgcmV0dXJuIGNyb3NzZmFkZUFu
aW1hdGlvbjsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBjcmVhdGVT
aGFkb3dGYWRlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0aW9uKQotewotICAgIFJldGFp
blB0cjxDQUJhc2ljQW5pbWF0aW9uPiBmYWRlU2hhZG93SW5BbmltYXRpb24gPSBbQ0FCYXNpY0Fu
aW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAInNoYWRvd09wYWNpdHkiXTsKLSAgICBbZmFk
ZVNoYWRvd0luQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpAMF07Ci0gICAgW2ZhZGVTaGFkb3dJbkFu
aW1hdGlvbiBzZXRUb1ZhbHVlOkAxXTsKLSAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldEZp
bGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOwotICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24g
c2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107Ci0gICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlvbiBz
ZXREdXJhdGlvbjpkdXJhdGlvbl07Ci0KLSAgICByZXR1cm4gZmFkZVNoYWRvd0luQW5pbWF0aW9u
OwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUZhZGVJbkFu
aW1hdGlvbihDRlRpbWVJbnRlcnZhbCBkdXJhdGlvbikKLXsKLSAgICBSZXRhaW5QdHI8Q0FCYXNp
Y0FuaW1hdGlvbj4gZmFkZUluQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9u
V2l0aEtleVBhdGg6QCJvcGFjaXR5Il07Ci0gICAgW2ZhZGVJbkFuaW1hdGlvbiBzZXRGcm9tVmFs
dWU6QDBdOwotICAgIFtmYWRlSW5BbmltYXRpb24gc2V0VG9WYWx1ZTpAMV07Ci0gICAgW2ZhZGVJ
bkFuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKLSAgICBbZmFkZUlu
QW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246Tk9dOwotICAgIFtmYWRlSW5BbmltYXRp
b24gc2V0RHVyYXRpb246ZHVyYXRpb25dOwotCi0gICAgcmV0dXJuIGZhZGVJbkFuaW1hdGlvbjsK
LX0KLQotLSAoQ0ZUaW1lSW50ZXJ2YWwpX2FuaW1hdGlvbkR1cmF0aW9uCi17Ci0gICAgaWYgKGlu
ZGljYXRvcldhbnRzQm91bmNlKCpfdGV4dEluZGljYXRvcikpIHsKLSAgICAgICAgaWYgKGluZGlj
YXRvcldhbnRzQ29udGVudENyb3NzZmFkZSgqX3RleHRJbmRpY2F0b3IpKQotICAgICAgICAgICAg
cmV0dXJuIGJvdW5jZVdpdGhDcm9zc2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKLSAgICAgICAgcmV0
dXJuIGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9uOwotICAgIH0KLQotICAgIHJldHVybiBmYWRlSW5B
bmltYXRpb25EdXJhdGlvbjsKLX0KLQotLSAoQk9PTCloYXNDb21wbGV0ZWRBbmltYXRpb24KLXsK
LSAgICByZXR1cm4gX2hhc0NvbXBsZXRlZEFuaW1hdGlvbjsKLX0KLQotLSAodm9pZClwcmVzZW50
Ci17Ci0gICAgYm9vbCB3YW50c0JvdW5jZSA9IGluZGljYXRvcldhbnRzQm91bmNlKCpfdGV4dElu
ZGljYXRvcik7Ci0gICAgYm9vbCB3YW50c0Nyb3NzZmFkZSA9IGluZGljYXRvcldhbnRzQ29udGVu
dENyb3NzZmFkZSgqX3RleHRJbmRpY2F0b3IpOwotICAgIGJvb2wgd2FudHNGYWRlSW4gPSBpbmRp
Y2F0b3JXYW50c0ZhZGVJbigqX3RleHRJbmRpY2F0b3IpOwotICAgIENGVGltZUludGVydmFsIGFu
aW1hdGlvbkR1cmF0aW9uID0gW3NlbGYgX2FuaW1hdGlvbkR1cmF0aW9uXTsKLQotICAgIF9oYXND
b21wbGV0ZWRBbmltYXRpb24gPSBmYWxzZTsKLQotICAgIFJldGFpblB0cjxDQUFuaW1hdGlvbj4g
cHJlc2VudGF0aW9uQW5pbWF0aW9uOwotICAgIGlmICh3YW50c0JvdW5jZSkKLSAgICAgICAgcHJl
c2VudGF0aW9uQW5pbWF0aW9uID0gY3JlYXRlQm91bmNlQW5pbWF0aW9uKGFuaW1hdGlvbkR1cmF0
aW9uKTsKLSAgICBlbHNlIGlmICh3YW50c0ZhZGVJbikKLSAgICAgICAgcHJlc2VudGF0aW9uQW5p
bWF0aW9uID0gY3JlYXRlRmFkZUluQW5pbWF0aW9uKGFuaW1hdGlvbkR1cmF0aW9uKTsKLQotICAg
IFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBjcm9zc2ZhZGVBbmltYXRpb247Ci0gICAgUmV0
YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGZhZGVTaGFkb3dJbkFuaW1hdGlvbjsKLSAgICBpZiAo
d2FudHNDcm9zc2ZhZGUpIHsKLSAgICAgICAgY3Jvc3NmYWRlQW5pbWF0aW9uID0gY3JlYXRlQ29u
dGVudENyb3NzZmFkZUFuaW1hdGlvbihhbmltYXRpb25EdXJhdGlvbiwgKl90ZXh0SW5kaWNhdG9y
KTsKLSAgICAgICAgZmFkZVNoYWRvd0luQW5pbWF0aW9uID0gY3JlYXRlU2hhZG93RmFkZUFuaW1h
dGlvbihhbmltYXRpb25EdXJhdGlvbik7Ci0gICAgfQotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVn
aW5dOwotICAgIGZvciAoQ0FMYXllciAqYm91bmNlTGF5ZXIgaW4gX2JvdW5jZUxheWVycy5nZXQo
KSkgewotICAgICAgICBpZiAoaW5kaWNhdG9yV2FudHNNYW51YWxBbmltYXRpb24oKl90ZXh0SW5k
aWNhdG9yKSkKLSAgICAgICAgICAgIGJvdW5jZUxheWVyLnNwZWVkID0gMDsKLQotICAgICAgICBp
ZiAoIXdhbnRzRmFkZUluKQotICAgICAgICAgICAgYm91bmNlTGF5ZXIub3BhY2l0eSA9IDE7Ci0K
LSAgICAgICAgaWYgKHByZXNlbnRhdGlvbkFuaW1hdGlvbikKLSAgICAgICAgICAgIFtib3VuY2VM
YXllciBhZGRBbmltYXRpb246cHJlc2VudGF0aW9uQW5pbWF0aW9uLmdldCgpIGZvcktleTpAInBy
ZXNlbnRhdGlvbiJdOwotCi0gICAgICAgIGlmICh3YW50c0Nyb3NzZmFkZSkgewotICAgICAgICAg
ICAgW1tib3VuY2VMYXllciB2YWx1ZUZvcktleTp0ZXh0TGF5ZXJLZXldIGFkZEFuaW1hdGlvbjpj
cm9zc2ZhZGVBbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiY29udGVudFRyYW5zaXRpb24iXTsKLSAg
ICAgICAgICAgIFtbYm91bmNlTGF5ZXIgdmFsdWVGb3JLZXk6ZHJvcFNoYWRvd0xheWVyS2V5XSBh
ZGRBbmltYXRpb246ZmFkZVNoYWRvd0luQW5pbWF0aW9uLmdldCgpIGZvcktleTpAImZhZGVTaGFk
b3dJbiJdOwotICAgICAgICAgICAgW1tib3VuY2VMYXllciB2YWx1ZUZvcktleTpyaW1TaGFkb3dM
YXllcktleV0gYWRkQW5pbWF0aW9uOmZhZGVTaGFkb3dJbkFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6
QCJmYWRlU2hhZG93SW4iXTsKLSAgICAgICAgfQotICAgIH0KLSAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOwotfQotCi0tICh2b2lkKWhpZGVXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXiko
dm9pZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlv
bj4gZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRo
OkAib3BhY2l0eSJdOwotICAgIFtmYWRlQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpAMV07Ci0gICAg
W2ZhZGVBbmltYXRpb24gc2V0VG9WYWx1ZTpAMF07Ci0gICAgW2ZhZGVBbmltYXRpb24gc2V0Rmls
bE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107Ci0gICAgW2ZhZGVBbmltYXRpb24gc2V0UmVtb3Zl
ZE9uQ29tcGxldGlvbjpOT107Ci0gICAgW2ZhZGVBbmltYXRpb24gc2V0RHVyYXRpb246ZmFkZU91
dEFuaW1hdGlvbkR1cmF0aW9uXTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBb
Q0FUcmFuc2FjdGlvbiBzZXRDb21wbGV0aW9uQmxvY2s6Y29tcGxldGlvbkhhbmRsZXJdOwotICAg
IFtzZWxmLmxheWVyIGFkZEFuaW1hdGlvbjpmYWRlQW5pbWF0aW9uLmdldCgpIGZvcktleTpAImZh
ZGVPdXQiXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotfQotCi0tICh2b2lkKXNldEFu
aW1hdGlvblByb2dyZXNzOihmbG9hdClwcm9ncmVzcwotewotICAgIGlmIChfaGFzQ29tcGxldGVk
QW5pbWF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJvZ3Jlc3MgPT0gMSkgewot
ICAgICAgICBfaGFzQ29tcGxldGVkQW5pbWF0aW9uID0gdHJ1ZTsKLQotICAgICAgICBmb3IgKENB
TGF5ZXIgKmJvdW5jZUxheWVyIGluIF9ib3VuY2VMYXllcnMuZ2V0KCkpIHsKLSAgICAgICAgICAg
IC8vIENvbnRpbnVlIHRoZSBhbmltYXRpb24gZnJvbSB3aGVyZXZlciBpdCBoYWQgbWFudWFsbHkg
cHJvZ3Jlc3NlZCB0by4KLSAgICAgICAgICAgIENGVGltZUludGVydmFsIGJlZ2luVGltZSA9IGJv
dW5jZUxheWVyLnRpbWVPZmZzZXQ7Ci0gICAgICAgICAgICBib3VuY2VMYXllci5zcGVlZCA9IDE7
Ci0gICAgICAgICAgICBiZWdpblRpbWUgPSBbYm91bmNlTGF5ZXIgY29udmVydFRpbWU6Q0FDdXJy
ZW50TWVkaWFUaW1lKCkgZnJvbUxheWVyOm5pbF0gLSBiZWdpblRpbWU7Ci0gICAgICAgICAgICBi
b3VuY2VMYXllci5iZWdpblRpbWUgPSBiZWdpblRpbWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBDRlRpbWVJbnRlcnZhbCBhbmltYXRpb25EdXJhdGlvbiA9IFtzZWxmIF9hbmlt
YXRpb25EdXJhdGlvbl07Ci0gICAgICAgIGZvciAoQ0FMYXllciAqYm91bmNlTGF5ZXIgaW4gX2Jv
dW5jZUxheWVycy5nZXQoKSkKLSAgICAgICAgICAgIGJvdW5jZUxheWVyLnRpbWVPZmZzZXQgPSBw
cm9ncmVzcyAqIGFuaW1hdGlvbkR1cmF0aW9uOwotICAgIH0KLX0KLQotLSAoQk9PTClpc0ZsaXBw
ZWQKLXsKLSAgICByZXR1cm4gWUVTOwotfQotCi1AZW5kCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogVGV4dEluZGljYXRvcldpbmRvdzo6VGV4dEluZGljYXRvcldpbmRvdyhOU1ZpZXcgKnRhcmdl
dFZpZXcpCkBAIC00MjMsMTcgKzY0LDE3IEBAIHZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6c2V0
QW5pbWF0aW9uUHJvZ3Jlc3MoZmxvYXQgcHJvZ3Jlc3MpCiAgICAgaWYgKCFtX3RleHRJbmRpY2F0
b3IpCiAgICAgICAgIHJldHVybjsKIAotICAgIFttX3RleHRJbmRpY2F0b3JWaWV3IHNldEFuaW1h
dGlvblByb2dyZXNzOnByb2dyZXNzXTsKKyAgICBbbV90ZXh0SW5kaWNhdG9yTGF5ZXIgc2V0QW5p
bWF0aW9uUHJvZ3Jlc3M6cHJvZ3Jlc3NdOwogfQogCiB2b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6
OmNsZWFyVGV4dEluZGljYXRvcihUZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9u
IGFuaW1hdGlvbikKIHsKICAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9
IFdURk1vdmUobV90ZXh0SW5kaWNhdG9yKTsKIAotICAgIGlmIChbbV90ZXh0SW5kaWNhdG9yVmll
dyBpc0ZhZGluZ091dF0pCisgICAgaWYgKFttX3RleHRJbmRpY2F0b3JMYXllciBpc0ZhZGluZ091
dF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0ZXh0SW5kaWNhdG9yICYmIGluZGljYXRv
cldhbnRzTWFudWFsQW5pbWF0aW9uKCp0ZXh0SW5kaWNhdG9yKSAmJiBbbV90ZXh0SW5kaWNhdG9y
VmlldyBoYXNDb21wbGV0ZWRBbmltYXRpb25dICYmIGFuaW1hdGlvbiA9PSBUZXh0SW5kaWNhdG9y
V2luZG93RGlzbWlzc2FsQW5pbWF0aW9uOjpGYWRlT3V0KSB7CisgICAgaWYgKHRleHRJbmRpY2F0
b3IgJiYgW21fdGV4dEluZGljYXRvckxheWVyIGluZGljYXRvcldhbnRzTWFudWFsQW5pbWF0aW9u
Oip0ZXh0SW5kaWNhdG9yXSAmJiBbbV90ZXh0SW5kaWNhdG9yTGF5ZXIgaGFzQ29tcGxldGVkQW5p
bWF0aW9uXSAmJiBhbmltYXRpb24gPT0gVGV4dEluZGljYXRvcldpbmRvd0Rpc21pc3NhbEFuaW1h
dGlvbjo6RmFkZU91dCkgewogICAgICAgICBzdGFydEZhZGVPdXQoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTQ1Myw3ICs5NCw3IEBAIHZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6c2V0
VGV4dEluZGljYXRvcihSZWY8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciwgQ0dSCiAgICAg
Q0dGbG9hdCBob3Jpem9udGFsTWFyZ2luID0gZHJvcFNoYWRvd0JsdXJSYWRpdXMgKiAyICsgVGV4
dEluZGljYXRvcjo6ZGVmYXVsdEhvcml6b250YWxNYXJnaW47CiAgICAgQ0dGbG9hdCB2ZXJ0aWNh
bE1hcmdpbiA9IGRyb3BTaGFkb3dCbHVyUmFkaXVzICogMiArIFRleHRJbmRpY2F0b3I6OmRlZmF1
bHRWZXJ0aWNhbE1hcmdpbjsKICAgICAKLSAgICBpZiAoaW5kaWNhdG9yV2FudHNCb3VuY2UoKm1f
dGV4dEluZGljYXRvcikpIHsKKyAgICBpZiAoW21fdGV4dEluZGljYXRvckxheWVyIGluZGljYXRv
cldhbnRzQm91bmNlOiptX3RleHRJbmRpY2F0b3JdKSB7CiAgICAgICAgIGhvcml6b250YWxNYXJn
aW4gPSBzdGQ6Om1heChob3Jpem9udGFsTWFyZ2luLCB0ZXh0Qm91bmRpbmdSZWN0SW5TY3JlZW5D
b29yZGluYXRlcy5zaXplLndpZHRoICogKG1pZEJvdW5jZVNjYWxlIC0gMSkgKyBob3Jpem9udGFs
TWFyZ2luKTsKICAgICAgICAgdmVydGljYWxNYXJnaW4gPSBzdGQ6Om1heCh2ZXJ0aWNhbE1hcmdp
biwgdGV4dEJvdW5kaW5nUmVjdEluU2NyZWVuQ29vcmRpbmF0ZXMuc2l6ZS5oZWlnaHQgKiAobWlk
Qm91bmNlU2NhbGUgLSAxKSArIHZlcnRpY2FsTWFyZ2luKTsKICAgICB9CkBAIC00NzAsMTUgKzEx
MSwxOSBAQCB2b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6OnNldFRleHRJbmRpY2F0b3IoUmVmPFRl
eHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IsIENHUgogICAgIFttX3RleHRJbmRpY2F0b3JXaW5k
b3cgc2V0T3BhcXVlOk5PXTsKICAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93IHNldElnbm9yZXNN
b3VzZUV2ZW50czpZRVNdOwogCi0gICAgbV90ZXh0SW5kaWNhdG9yVmlldyA9IGFkb3B0TlMoW1tX
ZWJUZXh0SW5kaWNhdG9yVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IFttX3RleHRJbmRpY2F0b3JXaW5kb3cgZnJhbWVdLnNpemUud2lkdGgsIFttX3RleHRJbmRpY2F0
b3JXaW5kb3cgZnJhbWVdLnNpemUuaGVpZ2h0KQorICAgIE5TUmVjdCBmcmFtZSA9IE5TTWFrZVJl
Y3QoMCwgMCwgW21fdGV4dEluZGljYXRvcldpbmRvdyBmcmFtZV0uc2l6ZS53aWR0aCwgW21fdGV4
dEluZGljYXRvcldpbmRvdyBmcmFtZV0uc2l6ZS5oZWlnaHQpOworICAgIG1fdGV4dEluZGljYXRv
ckxheWVyID0gYWRvcHROUyhbW1dlYlRleHRJbmRpY2F0b3JMYXllciBhbGxvY10gaW5pdFdpdGhG
cmFtZTpmcmFtZQogICAgICAgICB0ZXh0SW5kaWNhdG9yOiptX3RleHRJbmRpY2F0b3IgbWFyZ2lu
Ok5TTWFrZVNpemUoaG9yaXpvbnRhbE1hcmdpbiwgdmVydGljYWxNYXJnaW4pIG9mZnNldDpmcmFj
dGlvbmFsVGV4dE9mZnNldF0pOworICAgIG1fdGV4dEluZGljYXRvclZpZXcgPSBhZG9wdE5TKFtb
TlNWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lXSk7CisgICAgW21fdGV4dEluZGljYXRv
clZpZXcgc2V0V2FudHNMYXllcjpZRVNdOworICAgIFttX3RleHRJbmRpY2F0b3JWaWV3IHNldExh
eWVyOm1fdGV4dEluZGljYXRvckxheWVyLmdldCgpXTsKICAgICBbbV90ZXh0SW5kaWNhdG9yV2lu
ZG93IHNldENvbnRlbnRWaWV3Om1fdGV4dEluZGljYXRvclZpZXcuZ2V0KCldOwogCiAgICAgW1tt
X3RhcmdldFZpZXcgd2luZG93XSBhZGRDaGlsZFdpbmRvdzptX3RleHRJbmRpY2F0b3JXaW5kb3cu
Z2V0KCkgb3JkZXJlZDpOU1dpbmRvd0Fib3ZlXTsKICAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93
IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107CiAKICAgICBpZiAobV90ZXh0SW5kaWNhdG9yLT5w
cmVzZW50YXRpb25UcmFuc2l0aW9uKCkgIT0gVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb246Ok5vbmUpCi0gICAgICAgIFttX3RleHRJbmRpY2F0b3JWaWV3IHByZXNlbnRdOworICAg
ICAgICBbbV90ZXh0SW5kaWNhdG9yTGF5ZXIgcHJlc2VudF07CiAKICAgICBpZiAobGlmZXRpbWUg
PT0gVGV4dEluZGljYXRvcldpbmRvd0xpZmV0aW1lOjpUZW1wb3JhcnkpCiAgICAgICAgIG1fdGVt
cG9yYXJ5VGV4dEluZGljYXRvclRpbWVyLnN0YXJ0T25lU2hvdCgxX3MgKiB0aW1lQmVmb3JlRmFk
ZVN0YXJ0cyk7CkBAIC00ODksNyArMTM0LDcgQEAgdm9pZCBUZXh0SW5kaWNhdG9yV2luZG93Ojpj
bG9zZVdpbmRvdygpCiAgICAgaWYgKCFtX3RleHRJbmRpY2F0b3JXaW5kb3cpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChbbV90ZXh0SW5kaWNhdG9yVmlldyBpc0ZhZGluZ091dF0pCisgICAg
aWYgKFttX3RleHRJbmRpY2F0b3JMYXllciBpc0ZhZGluZ091dF0pCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fdGVtcG9yYXJ5VGV4dEluZGljYXRvclRpbWVyLnN0b3AoKTsKQEAgLTUwMSw5ICsx
NDYsOSBAQCB2b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6OmNsb3NlV2luZG93KCkKIAogdm9pZCBU
ZXh0SW5kaWNhdG9yV2luZG93OjpzdGFydEZhZGVPdXQoKQogewotICAgIFttX3RleHRJbmRpY2F0
b3JWaWV3IHNldEZhZGluZ091dDpZRVNdOworICAgIFttX3RleHRJbmRpY2F0b3JMYXllciBzZXRG
YWRpbmdPdXQ6WUVTXTsKICAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IGluZGljYXRvcldpbmRvdyA9
IG1fdGV4dEluZGljYXRvcldpbmRvdzsKLSAgICBbbV90ZXh0SW5kaWNhdG9yVmlldyBoaWRlV2l0
aENvbXBsZXRpb25IYW5kbGVyOltpbmRpY2F0b3JXaW5kb3ddIHsKKyAgICBbbV90ZXh0SW5kaWNh
dG9yTGF5ZXIgaGlkZVdpdGhDb21wbGV0aW9uSGFuZGxlcjpbaW5kaWNhdG9yV2luZG93XSB7CiAg
ICAgICAgIFtbaW5kaWNhdG9yV2luZG93IHBhcmVudFdpbmRvd10gcmVtb3ZlQ2hpbGRXaW5kb3c6
aW5kaWNhdG9yV2luZG93LmdldCgpXTsKICAgICAgICAgW2luZGljYXRvcldpbmRvdyBjbG9zZV07
CiAgICAgfV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428287</attachid>
            <date>2021-05-11 09:56:31 -0700</date>
            <delta_ts>2021-05-11 10:46:49 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-225557-20210511095629.patch</filename>
            <type>text/plain</type>
            <size>46086</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjRmNDcxMzgwYTMyMGM0
OTRjYThlZTY5MWVkNzczMGM0NjI4NjIyMC4uYmE2NzNkOGZhMmM1MzRkMDQwMmM3ZTE4NDlmODNm
NjBkNDBiNjA3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIxLTA1LTA3ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG91
dCBmaW5kIGJvdW5jZSBsYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1NTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKwor
ICAgICAgICBGYWN0b3Igb3V0IHRoZSB0ZXh0IGluZGljYXRvciBib3VuY2UgbGF5ZXIgaW4gcHJl
cGFyYXRpb24gb2YgbWFraW5nIHRoaXMgCisgICAgICAgIGNvbXBhdGFibGUgd2l0aCBpT1MuIAor
CisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5nZS4gCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2Eu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBwYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lmg6CisgICAgICAgICogcGFnZS9tYWMv
VGV4dEluZGljYXRvcldpbmRvdy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3JX
aW5kb3c6OnNldEFuaW1hdGlvblByb2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JXaW5kb3c6OmNsZWFyVGV4dEluZGljYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
SW5kaWNhdG9yV2luZG93OjpzZXRUZXh0SW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRJbmRpY2F0b3JXaW5kb3c6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3JXaW5kb3c6OnN0YXJ0RmFkZU91dCk6CisgICAgICAgIChpbmRpY2F0b3JXYW50c0Jv
dW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChpbmRpY2F0b3JXYW50c0NvbnRlbnRDcm9zc2ZhZGUp
OiBEZWxldGVkLgorICAgICAgICAoaW5kaWNhdG9yV2FudHNGYWRlSW4pOiBEZWxldGVkLgorICAg
ICAgICAoaW5kaWNhdG9yV2FudHNNYW51YWxBbmltYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
LVtXZWJUZXh0SW5kaWNhdG9yVmlldyBpbml0V2l0aEZyYW1lOnRleHRJbmRpY2F0b3I6bWFyZ2lu
Om9mZnNldDpdKTogRGVsZXRlZC4KKyAgICAgICAgKGNyZWF0ZUJvdW5jZUFuaW1hdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChjcmVhdGVDb250ZW50Q3Jvc3NmYWRlQW5pbWF0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKGNyZWF0ZVNoYWRvd0ZhZGVBbmltYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoY3JlYXRlRmFkZUluQW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVGV4dElu
ZGljYXRvclZpZXcgX2FuaW1hdGlvbkR1cmF0aW9uXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dl
YlRleHRJbmRpY2F0b3JWaWV3IGhhc0NvbXBsZXRlZEFuaW1hdGlvbl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXZWJUZXh0SW5kaWNhdG9yVmlldyBwcmVzZW50XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGhpZGVXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IHNldEFuaW1hdGlvblByb2dy
ZXNzOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJUZXh0SW5kaWNhdG9yVmlldyBpc0ZsaXBw
ZWRdKTogRGVsZXRlZC4KKyAgICAgICAgCiAyMDIxLTA1LTEwICBLYXRlIENoZW5leSAgPGthdGhl
cmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIFByZWZsaWdodCByZXF1ZXN0cyBub3Qg
cHJvcGVybHkgYXR0cmlidXRlZCBhcyBhcHAtYm91bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0Cmlu
ZGV4IGUxYzNiZTU1NjlhOGMyNzY0YjU1ZTAzNGFmM2NkYzUxMGJhYzQ4YzMuLmIwZWVhNGU0Njg1
NWRkZjMzZGQ3NzRjNzI4NGU3YzhkNmU3NjBiYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApA
QCAtMTgyLDYgKzE4Miw3IEBAIHBhZ2UvY29jb2EvUGVyZm9ybWFuY2VMb2dnaW5nQ29jb2EubW0K
IHBhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQogcGFnZS9jb2NvYS9SZXNv
dXJjZVVzYWdlVGhyZWFkQ29jb2EubW0KIHBhZ2UvY29jb2EvU2V0dGluZ3NCYXNlQ29jb2EubW0K
K3BhZ2UvY29jb2EvV2ViVGV4dEluZGljYXRvckxheWVyLm1tCiBwYWdlL2lvcy9Db250ZW50Q2hh
bmdlT2JzZXJ2ZXIuY3BwCiBwYWdlL2lvcy9ET01UaW1lckhvbGRpbmdUYW5rLmNwcAogcGFnZS9p
b3MvRXZlbnRIYW5kbGVySU9TLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2M4NWRkMmM4Mzc5MzgxNWNlNDdjZDMzZWVhYTI5
NTZkMzgyOGY4Zi4uODg0NzczYzU1YjUyMzk4ZTg2YTQ1ZTJmOThkMmRmMjNiMWVkNmQyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTI3MSw2ICsxMjcxLDcgQEAKIAkJNDRBRTA0NUMyNTc5Q0ZGQjAwQzQyRTY1IC8qIEFwcEhp
Z2hsaWdodFJhbmdlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDRBRTA0NUEyNTc5Q0ZGQjAwQzQyRTY1IC8qIEFwcEhpZ2hsaWdodFJhbmdlRGF0
YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0
Qzk5MTg2MEYzRDFFQkUwMDU4NjY3MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRDOTkxODUwRjNEMUVCRTAwNTg2
NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLmggKi87IH07CiAJCTQ0Qzk5MTlGMEYzRDIxMEUwMDU4
NjY3MCAvKiBUaGVtZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDRDOTkxOUQwRjNEMjEwRTAwNTg2NjcwIC8qIFRoZW1lSU9TLmggKi87IH07CisJ
CTQ0Q0UyQkJGMjY0Mzc5QUYwMDdBRTExMCAvKiBXZWJUZXh0SW5kaWNhdG9yTGF5ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Q0UyQkJFMjY0Mzc5
OUUwMDdBRTExMCAvKiBXZWJUZXh0SW5kaWNhdG9yTGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NEUzNDlGOTI0NkY0RTE5MDA2ODQ3OUMg
LyogTGliV2ViUlRDRW51bVRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDRFMzQ5RjcyNDZGNERDNzAwNjg0NzlDIC8qIExpYldlYlJUQ0VudW1U
cmFpdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk0NTBDRUJGMTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwQ0VCRUYxNTA3M0JCRTAw
MkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk0NTEyNTAyMzE1RENFMzdEMDAyRjg0RTIgLyogU3BpbkJ1
dHRvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ1MTI1MDIxMTVEQ0UzN0QwMDJGODRFMiAvKiBTcGluQnV0dG9uRWxlbWVudC5oICovOyB9
OwpAQCAtODI1Nyw2ICs4MjU4LDggQEAKIAkJNDRDOTkxOUQwRjNEMjEwRTAwNTg2NjcwIC8qIFRo
ZW1lSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRoZW1lSU9TLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0Qzk5MTlFMEYzRDIxMEUwMDU4NjY3MCAvKiBU
aGVtZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRoZW1l
SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NENBMjg0MzI0NUZDQTUwMDBD
OTRDN0YgLyogTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0SU9TLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0SU9T
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NENFMkJCQzI2NDM3OTlEMDA3QUUx
MTAgLyogV2ViVGV4dEluZGljYXRvckxheWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
VGV4dEluZGljYXRvckxheWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NENF
MkJCRTI2NDM3OTlFMDA3QUUxMTAgLyogV2ViVGV4dEluZGljYXRvckxheWVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlRleHRJbmRpY2F0b3JMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0NEQ4REE5ODEzOTU0NUJFMDAzMzdCNzUgLyogU1ZHTVBhdGhFbGVtZW50LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBTVkdNUGF0aEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NEQ4REE5QTEzOTU0NUNEMDAzMzdCNzUgLyogU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRFMzQ5RjcyNDZGNERDNzAw
Njg0NzlDIC8qIExpYldlYlJUQ0VudW1UcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTGliV2ViUlRDRW51bVRyYWl0cy5oOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJU
Q0VudW1UcmFpdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxODQzLDYgKzIx
ODQ2LDggQEAKIAkJCQlBREZFMkI1NDFCRDVGNDEyMDBEQUI0NTcgLyogUmVzb3VyY2VVc2FnZU92
ZXJsYXlDb2NvYS5tbSAqLywKIAkJCQlBNTA3MUU4ODFDNTZENEZBMDA5OTUxQkUgLyogUmVzb3Vy
Y2VVc2FnZVRocmVhZENvY29hLm1tICovLAogCQkJCUExODJENUI2MUJFNzIyNjIwMDg3QTdDQyAv
KiBTZXR0aW5nc0Jhc2VDb2NvYS5tbSAqLywKKwkJCQk0NENFMkJCRTI2NDM3OTlFMDA3QUUxMTAg
LyogV2ViVGV4dEluZGljYXRvckxheWVyLmggKi8sCisJCQkJNDRDRTJCQkMyNjQzNzk5RDAwN0FF
MTEwIC8qIFdlYlRleHRJbmRpY2F0b3JMYXllci5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gY29j
b2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzU4MTAsNiArMzU4MTUsNyBAQAog
CQkJCTkzQjM4RUM0MjU4MjFEQjcwMDE5OEU2MyAvKiBXZWJTcGVlY2hSZWNvZ25pemVyVGFza01v
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTFGODc1NkIyMUUyMkMzMzUwMDQyQzQwRCAvKiBXZWJT
UUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxREVBNDU2
MUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQk0NENFMkJCRjI2NDM3OUFGMDA3QUUxMTAgLyogV2ViVGV4dEluZGljYXRvckxheWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGls
ZWRCYWNraW5nTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEQUIzMTEyMjUxRDZCRjMwMEZD
OTQ4NSAvKiBXZWJWaWRlb0NvbnRhaW5lckxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzRjQy
QjMxRDE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2Ev
V2ViVGV4dEluZGljYXRvckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1dlYlRl
eHRJbmRpY2F0b3JMYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkMTNkMDQwZWZmYjc1YjBlYTAwNGVhNTUx
ZTMyMjE1NGFlMThmYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nv
Y29hL1dlYlRleHRJbmRpY2F0b3JMYXllci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCAiVGV4dEluZGljYXRvci5oIgorI2ltcG9ydCA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgorCitAaW50ZXJmYWNlIFdlYlRleHRJ
bmRpY2F0b3JMYXllciA6IENBTGF5ZXIgeworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yPiBfdGV4dEluZGljYXRvcjsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gX2JvdW5jZUxheWVy
czsKKyAgICBDR1NpemUgX21hcmdpbjsKKyAgICBib29sIF9oYXNDb21wbGV0ZWRBbmltYXRpb247
CisgICAgQk9PTCBfZmFkaW5nT3V0OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFt
ZTooQ0dSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFdlYkNvcmU6OlRleHRJbmRpY2F0b3ImKXRl
eHRJbmRpY2F0b3IgbWFyZ2luOihDR1NpemUpbWFyZ2luIG9mZnNldDooQ0dQb2ludClvZmZzZXQ7
CisKKy0gKGJvb2wpaW5kaWNhdG9yV2FudHNNYW51YWxBbmltYXRpb246KGNvbnN0IFdlYkNvcmU6
OlRleHRJbmRpY2F0b3ImKWluZGljYXRvcjsKKy0gKGJvb2wpaW5kaWNhdG9yV2FudHNCb3VuY2U6
KGNvbnN0IFdlYkNvcmU6OlRleHRJbmRpY2F0b3ImKWluZGljYXRvcjsKKworLSAodm9pZClwcmVz
ZW50OworLSAodm9pZCloaWRlV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQpKWNv
bXBsZXRpb25IYW5kbGVyOworCistICh2b2lkKXNldEFuaW1hdGlvblByb2dyZXNzOihmbG9hdClw
cm9ncmVzczsKKy0gKEJPT0wpaGFzQ29tcGxldGVkQW5pbWF0aW9uOworCitAcHJvcGVydHkgKG5v
bmF0b21pYywgZ2V0dGVyPWlzRmFkaW5nT3V0KSBCT09MIGZhZGluZ091dDsKKworQGVuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9XZWJUZXh0SW5kaWNhdG9yTGF5ZXIu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1dlYlRleHRJbmRpY2F0b3JMYXllci5tbQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iOGM0ZDhmMDY3YmFjZWQwOWE4MTE4MDg3MTAzMDZjNTdhNzk0MzAwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9XZWJUZXh0SW5kaWNhdG9y
TGF5ZXIubW0KQEAgLTAsMCArMSwzOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIldlYlRleHRJbmRpY2F0b3JMYXllci5oIgorCisjaW1wb3J0ICJHZW9tZXRy
eVV0aWxpdGllcy5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJQYXRo
VXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXh0SW5kaWNhdG9yLmgiCisjaW1wb3J0ICJXZWJBY3Rp
b25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUuaCIKKyNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdy
YXBoaWNzU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KKwor
I2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNDb2xvclNQSS5oPgor
I2VuZGlmCisKK2NvbnN0ZXhwciBDRlRpbWVJbnRlcnZhbCBib3VuY2VBbmltYXRpb25EdXJhdGlv
biA9IDAuMTI7Citjb25zdGV4cHIgQ0ZUaW1lSW50ZXJ2YWwgYm91bmNlV2l0aENyb3NzZmFkZUFu
aW1hdGlvbkR1cmF0aW9uID0gMC4zOworY29uc3RleHByIENGVGltZUludGVydmFsIGZhZGVJbkFu
aW1hdGlvbkR1cmF0aW9uID0gMC4xNTsKK2NvbnN0ZXhwciBDRlRpbWVJbnRlcnZhbCB0aW1lQmVm
b3JlRmFkZVN0YXJ0cyA9IGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9uICsgMC4yOworY29uc3RleHBy
IENGVGltZUludGVydmFsIGZhZGVPdXRBbmltYXRpb25EdXJhdGlvbiA9IDAuMzsKKworY29uc3Rl
eHByIENHRmxvYXQgbWlkQm91bmNlU2NhbGUgPSAxLjI1OworY29uc3RleHByIENHRmxvYXQgYm9y
ZGVyV2lkdGggPSAwOworY29uc3RleHByIENHRmxvYXQgY29ybmVyUmFkaXVzID0gMDsKK2NvbnN0
ZXhwciBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRYID0gMDsKK2NvbnN0ZXhwciBDR0Zsb2F0IGRy
b3BTaGFkb3dPZmZzZXRZID0gMTsKK2NvbnN0ZXhwciBDR0Zsb2F0IGRyb3BTaGFkb3dCbHVyUmFk
aXVzID0gMjsKK2NvbnN0ZXhwciBDR0Zsb2F0IHJpbVNoYWRvd0JsdXJSYWRpdXMgPSAxOworCitj
b25zdGV4cHIgTlNTdHJpbmcgKiBjb25zdCB0ZXh0TGF5ZXJLZXkgPSBAIlRleHRMYXllciI7Citj
b25zdGV4cHIgTlNTdHJpbmcgKiBjb25zdCBkcm9wU2hhZG93TGF5ZXJLZXkgPSBAIkRyb3BTaGFk
b3dMYXllciI7Citjb25zdGV4cHIgTlNTdHJpbmcgKiBjb25zdCByaW1TaGFkb3dMYXllcktleSA9
IEAiUmltU2hhZG93TGF5ZXIiOworCitAaW1wbGVtZW50YXRpb24gV2ViVGV4dEluZGljYXRvckxh
eWVyCisKK0BzeW50aGVzaXplIGZhZGluZ091dCA9IF9mYWRpbmdPdXQ7CisKK3N0YXRpYyBib29s
IGluZGljYXRvcldhbnRzQ29udGVudENyb3NzZmFkZShjb25zdCBXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yJiBpbmRpY2F0b3IpCit7CisgICAgaWYgKCFpbmRpY2F0b3IuZGF0YSgpLmNvbnRlbnRJbWFn
ZVdpdGhIaWdobGlnaHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAoaW5k
aWNhdG9yLnByZXNlbnRhdGlvblRyYW5zaXRpb24oKSkgeworICAgIGNhc2UgV2ViQ29yZTo6VGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZToKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2U6CisgICAgY2FzZSBXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluOgorICAgIGNhc2UgV2ViQ29yZTo6VGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmU6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3N0YXRpYyBib29sIGluZGljYXRvcldhbnRzRmFkZUluKGNvbnN0IFdlYkNvcmU6
OlRleHRJbmRpY2F0b3ImIGluZGljYXRvcikKK3sKKyAgICBzd2l0Y2ggKGluZGljYXRvci5wcmVz
ZW50YXRpb25UcmFuc2l0aW9uKCkpIHsKKyAgICBjYXNlIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpGYWRlSW46CisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgY2FzZSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91
bmNlOgorICAgIGNhc2UgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRp
b246OkJvdW5jZUFuZENyb3NzZmFkZToKKyAgICBjYXNlIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCist
IChib29sKWluZGljYXRvcldhbnRzQm91bmNlOihjb25zdCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9y
JilpbmRpY2F0b3IKK3sKKyAgICBzd2l0Y2ggKGluZGljYXRvci5wcmVzZW50YXRpb25UcmFuc2l0
aW9uKCkpIHsKKyAgICBjYXNlIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFu
c2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGU6CisgICAgY2FzZSBXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGNhc2UgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246
OkZhZGVJbjoKKyAgICBjYXNlIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFu
c2l0aW9uOjpOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCistIChib29sKWluZGljYXRv
cldhbnRzTWFudWFsQW5pbWF0aW9uOihjb25zdCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yJilpbmRp
Y2F0b3IKK3sKKyAgICBzd2l0Y2ggKGluZGljYXRvci5wcmVzZW50YXRpb25UcmFuc2l0aW9uKCkp
IHsKKyAgICBjYXNlIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9u
OjpGYWRlSW46CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBXZWJDb3JlOjpUZXh0
SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlOgorICAgIGNhc2UgV2ViQ29y
ZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFk
ZToKKyAgICBjYXNlIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9u
OjpOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhGcmFtZTooQ0dSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFdlYkNvcmU6OlRleHRJbmRpY2F0
b3ImKXRleHRJbmRpY2F0b3IgbWFyZ2luOihDR1NpemUpbWFyZ2luIG9mZnNldDooQ0dQb2ludClv
ZmZzZXQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAKKyAgICBzZWxmLmZyYW1lID0gZnJhbWU7CisKKyAgICBfdGV4dEluZGljYXRv
ciA9ICZ0ZXh0SW5kaWNhdG9yOworICAgIF9tYXJnaW4gPSBtYXJnaW47CisKKyAgICBzZWxmLmFu
Y2hvclBvaW50ID0gQ0dQb2ludFplcm87CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6TmF0aXZlSW1h
Z2U+IGNvbnRlbnRzSW1hZ2U7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGNvbnRlbnRzSW1hZ2VM
b2dpY2FsU2l6ZSB7IDEsIDEgfTsKKyAgICBpZiAoYXV0byogY29udGVudEltYWdlID0gX3RleHRJ
bmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpKSB7CisgICAgICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2Fs
U2l6ZSA9IGNvbnRlbnRJbWFnZS0+c2l6ZSgpOworICAgICAgICBjb250ZW50c0ltYWdlTG9naWNh
bFNpemUuc2NhbGUoMSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3Rvcigp
KTsKKyAgICAgICAgaWYgKGluZGljYXRvcldhbnRzQ29udGVudENyb3NzZmFkZSgqX3RleHRJbmRp
Y2F0b3IpICYmIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCkpCisg
ICAgICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVdp
dGhIaWdobGlnaHQoKS0+bmF0aXZlSW1hZ2UoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y29udGVudHNJbWFnZSA9IGNvbnRlbnRJbWFnZS0+bmF0aXZlSW1hZ2UoKTsKKyAgICB9CisKKyAg
ICBhdXRvIGJvdW5jZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dF0pOworCisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGhpZ2hsaWdodENvbG9yOworICAgIGF1
dG8gcmltU2hhZG93Q29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGVHZW5lcmljR3JheSgwLCAw
LjM1KSk7CisgICAgYXV0byBkcm9wU2hhZG93Q29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGVH
ZW5lcmljR3JheSgwLCAwLjIpKTsKKyAgICBhdXRvIGJvcmRlckNvbG9yID0gYWRvcHRDRihDR0Nv
bG9yQ3JlYXRlU1JHQigwLjk2LCAwLjksIDAsIDEpKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAg
aGlnaGxpZ2h0Q29sb3IgPSBbTlNDb2xvciBmaW5kSGlnaGxpZ2h0Q29sb3JdLkNHQ29sb3I7Cisj
ZWxzZQorICAgIGhpZ2hsaWdodENvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlU1JHQiguOTks
IC44OSwgMC4yMiwgMS4wKSk7CisjZW5kaWYKKyAgICAKKyAgICBhdXRvIHRleHRSZWN0c0luQm91
bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBfdGV4dEluZGljYXRvci0+dGV4dFJlY3RzSW5Cb3VuZGlu
Z1JlY3RDb29yZGluYXRlcygpOworCisgICAgYXV0byBwYXRocyA9IFdlYkNvcmU6OlBhdGhVdGls
aXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyh0ZXh0UmVjdHNJbkJvdW5kaW5nUmVj
dENvb3JkaW5hdGVzLCBjb3JuZXJSYWRpdXMpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBwYXRo
IDogcGF0aHMpIHsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHBhdGhCb3VuZGluZ1JlY3Qg
PSBwYXRoLmJvdW5kaW5nUmVjdCgpOworCisgICAgICAgIFdlYkNvcmU6OlBhdGggdHJhbnNsYXRl
ZFBhdGg7CisgICAgICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAg
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLXBhdGhCb3VuZGluZ1JlY3QubG9jYXRpb24oKSk7Cisg
ICAgICAgIHRyYW5zbGF0ZWRQYXRoLmFkZFBhdGgocGF0aCwgdHJhbnNmb3JtKTsKKworICAgICAg
ICBXZWJDb3JlOjpGbG9hdFJlY3Qgb2Zmc2V0VGV4dFJlY3QgPSBwYXRoQm91bmRpbmdSZWN0Owor
ICAgICAgICBvZmZzZXRUZXh0UmVjdC5tb3ZlKG9mZnNldC54LCBvZmZzZXQueSk7CisKKyAgICAg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5jZUxheWVyUmVjdCA9IG9mZnNldFRleHRSZWN0Owor
ICAgICAgICBib3VuY2VMYXllclJlY3QubW92ZShfbWFyZ2luLndpZHRoLCBfbWFyZ2luLmhlaWdo
dCk7CisKKyAgICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IGJvdW5jZUxheWVyID0gYWRvcHROUyhb
W0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW2JvdW5jZUxheWVyIHNldERlbGVnYXRl
OltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07CisgICAgICAgIFti
b3VuY2VMYXllciBzZXRGcmFtZTpib3VuY2VMYXllclJlY3RdOworICAgICAgICBbYm91bmNlTGF5
ZXIgc2V0T3BhY2l0eTowXTsKKyAgICAgICAgW2JvdW5jZUxheWVycyBhZGRPYmplY3Q6Ym91bmNl
TGF5ZXIuZ2V0KCldOworCisgICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB5ZWxsb3dIaWdobGln
aHRSZWN0KFdlYkNvcmU6OkZsb2F0UG9pbnQoKSwgYm91bmNlTGF5ZXJSZWN0LnNpemUoKSk7CisK
KyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIFJldGFpblB0cjxDQUxheWVyPiBkcm9wU2hhZG93
TGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAgICAgICBbZHJvcFNo
YWRvd0xheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUg
c2hhcmVkXV07CisgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93Q29sb3I6ZHJvcFNo
YWRvd0NvbG9yLmdldCgpXTsKKyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRTaGFkb3dSYWRp
dXM6ZHJvcFNoYWRvd0JsdXJSYWRpdXNdOworICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNo
YWRvd09mZnNldDpDR1NpemVNYWtlKGRyb3BTaGFkb3dPZmZzZXRYLCBkcm9wU2hhZG93T2Zmc2V0
WSldOworICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNoYWRvd1BhdGg6dHJhbnNsYXRlZFBh
dGgucGxhdGZvcm1QYXRoKCldOworICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNoYWRvd09w
YWNpdHk6MV07CisgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0RnJhbWU6eWVsbG93SGlnaGxp
Z2h0UmVjdF07CisgICAgICAgIFtib3VuY2VMYXllciBhZGRTdWJsYXllcjpkcm9wU2hhZG93TGF5
ZXIuZ2V0KCldOworICAgICAgICBbYm91bmNlTGF5ZXIgc2V0VmFsdWU6ZHJvcFNoYWRvd0xheWVy
LmdldCgpIGZvcktleTpkcm9wU2hhZG93TGF5ZXJLZXldOworCisgICAgICAgIFJldGFpblB0cjxD
QUxheWVyPiByaW1TaGFkb3dMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7
CisgICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5n
Q0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0RnJh
bWU6eWVsbG93SGlnaGxpZ2h0UmVjdF07CisgICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRTaGFk
b3dDb2xvcjpyaW1TaGFkb3dDb2xvci5nZXQoKV07CisgICAgICAgIFtyaW1TaGFkb3dMYXllciBz
ZXRTaGFkb3dSYWRpdXM6cmltU2hhZG93Qmx1clJhZGl1c107CisgICAgICAgIFtyaW1TaGFkb3dM
YXllciBzZXRTaGFkb3dQYXRoOnRyYW5zbGF0ZWRQYXRoLnBsYXRmb3JtUGF0aCgpXTsKKyAgICAg
ICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd09mZnNldDpDR1NpemVaZXJvXTsKKyAgICAgICAg
W3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd09wYWNpdHk6MV07CisgICAgICAgIFtyaW1TaGFkb3dM
YXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsKKyAgICAgICAgW2JvdW5jZUxheWVy
IGFkZFN1YmxheWVyOnJpbVNoYWRvd0xheWVyLmdldCgpXTsKKyAgICAgICAgW2JvdW5jZUxheWVy
IHNldFZhbHVlOnJpbVNoYWRvd0xheWVyLmdldCgpIGZvcktleTpyaW1TaGFkb3dMYXllcktleV07
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAgICAgICAKKyAgICAgICAgUmV0YWluUHRyPENB
TGF5ZXI+IHRleHRMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAg
ICAgIFt0ZXh0TGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmhpZ2hsaWdodENvbG9yLmdldCgpXTsK
KyAgICAgICAgW3RleHRMYXllciBzZXRCb3JkZXJDb2xvcjpib3JkZXJDb2xvci5nZXQoKV07Cisg
ICAgICAgIFt0ZXh0TGF5ZXIgc2V0Qm9yZGVyV2lkdGg6Ym9yZGVyV2lkdGhdOworICAgICAgICBb
dGV4dExheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUg
c2hhcmVkXV07CisgICAgICAgIGlmIChjb250ZW50c0ltYWdlKQorICAgICAgICAgICAgW3RleHRM
YXllciBzZXRDb250ZW50czooX19icmlkZ2UgaWQpY29udGVudHNJbWFnZS0+cGxhdGZvcm1JbWFn
ZSgpLmdldCgpXTsKKworICAgICAgICBSZXRhaW5QdHI8Q0FTaGFwZUxheWVyPiBtYXNrTGF5ZXIg
PSBhZG9wdE5TKFtbQ0FTaGFwZUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFttYXNrTGF5
ZXIgc2V0UGF0aDp0cmFuc2xhdGVkUGF0aC5wbGF0Zm9ybVBhdGgoKV07CisgICAgICAgIFt0ZXh0
TGF5ZXIgc2V0TWFzazptYXNrTGF5ZXIuZ2V0KCldOworCisgICAgICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCBpbWFnZVJlY3QgPSBwYXRoQm91bmRpbmdSZWN0OworICAgICAgICBbdGV4dExheWVyIHNl
dENvbnRlbnRzUmVjdDpDR1JlY3RNYWtlKGltYWdlUmVjdC54KCkgLyBjb250ZW50c0ltYWdlTG9n
aWNhbFNpemUud2lkdGgoKSwgaW1hZ2VSZWN0LnkoKSAvIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6
ZS5oZWlnaHQoKSwgaW1hZ2VSZWN0LndpZHRoKCkgLyBjb250ZW50c0ltYWdlTG9naWNhbFNpemUu
d2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpIC8gY29udGVudHNJbWFnZUxvZ2ljYWxTaXplLmhl
aWdodCgpKV07CisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHNHcmF2aXR5OmtDQUdyYXZp
dHlDZW50ZXJdOworICAgICAgICBbdGV4dExheWVyIHNldENvbnRlbnRzU2NhbGU6X3RleHRJbmRp
Y2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCldOworICAgICAgICBbdGV4dExheWVyIHNl
dEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOworICAgICAgICBbYm91bmNlTGF5ZXIgc2V0VmFs
dWU6dGV4dExheWVyLmdldCgpIGZvcktleTp0ZXh0TGF5ZXJLZXldOworICAgICAgICBbYm91bmNl
TGF5ZXIgYWRkU3VibGF5ZXI6dGV4dExheWVyLmdldCgpXTsKKyAgICB9CisKKyAgICBzZWxmLnN1
YmxheWVycyA9IGJvdW5jZUxheWVycy5nZXQoKTsKKyAgICBfYm91bmNlTGF5ZXJzID0gYm91bmNl
TGF5ZXJzOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0FLZXlm
cmFtZUFuaW1hdGlvbj4gY3JlYXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0
aW9uKQoreworICAgIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBib3VuY2VBbmltYXRp
b24gPSBbQ0FLZXlmcmFtZUFuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAInRyYW5zZm9y
bSJdOworICAgIFtib3VuY2VBbmltYXRpb24gc2V0VmFsdWVzOkBbCisgICAgICAgIFtOU1ZhbHVl
IHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRElkZW50aXR5XSwKKyAgICAgICAg
W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKG1p
ZEJvdW5jZVNjYWxlLCBtaWRCb3VuY2VTY2FsZSwgMSldLAorICAgICAgICBbTlNWYWx1ZSB2YWx1
ZVdpdGhDQVRyYW5zZm9ybTNEOkNBVHJhbnNmb3JtM0RJZGVudGl0eV0KKyAgICAgICAgXV07Cisg
ICAgW2JvdW5jZUFuaW1hdGlvbiBzZXREdXJhdGlvbjpkdXJhdGlvbl07CisKKyAgICByZXR1cm4g
Ym91bmNlQW5pbWF0aW9uOworfQorCitzdGF0aWMgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+
IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXRpb24s
IFdlYkNvcmU6OlRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpCit7CisgICAgUmV0YWluUHRy
PENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9u
IGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsKKyAgICBhdXRvIGNvbnRlbnRzSW1h
Z2UgPSB0ZXh0SW5kaWNhdG9yLmNvbnRlbnRJbWFnZSgpLT5uYXRpdmVJbWFnZSgpOworICAgIFtj
cm9zc2ZhZGVBbmltYXRpb24gc2V0VG9WYWx1ZTooX19icmlkZ2UgaWQpY29udGVudHNJbWFnZS0+
cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKKyAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxN
b2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOworICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVt
b3ZlZE9uQ29tcGxldGlvbjpOT107CisgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXREdXJhdGlv
bjpkdXJhdGlvbl07CisKKyAgICByZXR1cm4gY3Jvc3NmYWRlQW5pbWF0aW9uOworfQorCitzdGF0
aWMgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZVNoYWRvd0ZhZGVBbmltYXRpb24o
Q0ZUaW1lSW50ZXJ2YWwgZHVyYXRpb24pCit7CisgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRp
b24+IGZhZGVTaGFkb3dJbkFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldp
dGhLZXlQYXRoOkAic2hhZG93T3BhY2l0eSJdOworICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24g
c2V0RnJvbVZhbHVlOkAwXTsKKyAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldFRvVmFsdWU6
QDFdOworICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVG
b3J3YXJkc107CisgICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0
aW9uOk5PXTsKKyAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9u
XTsKKworICAgIHJldHVybiBmYWRlU2hhZG93SW5BbmltYXRpb247Cit9CisKK3N0YXRpYyBSZXRh
aW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3JlYXRlRmFkZUluQW5pbWF0aW9uKENGVGltZUludGVy
dmFsIGR1cmF0aW9uKQoreworICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBmYWRlSW5B
bmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAIm9wYWNp
dHkiXTsKKyAgICBbZmFkZUluQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpAMF07CisgICAgW2ZhZGVJ
bkFuaW1hdGlvbiBzZXRUb1ZhbHVlOkAxXTsKKyAgICBbZmFkZUluQW5pbWF0aW9uIHNldEZpbGxN
b2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOworICAgIFtmYWRlSW5BbmltYXRpb24gc2V0UmVtb3Zl
ZE9uQ29tcGxldGlvbjpOT107CisgICAgW2ZhZGVJbkFuaW1hdGlvbiBzZXREdXJhdGlvbjpkdXJh
dGlvbl07CisKKyAgICByZXR1cm4gZmFkZUluQW5pbWF0aW9uOworfQorCistIChDRlRpbWVJbnRl
cnZhbClfYW5pbWF0aW9uRHVyYXRpb24KK3sKKyAgICBpZiAoW3NlbGYgaW5kaWNhdG9yV2FudHNC
b3VuY2U6Kl90ZXh0SW5kaWNhdG9yXSkgeworICAgICAgICBpZiAoaW5kaWNhdG9yV2FudHNDb250
ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCisgICAgICAgICAgICByZXR1cm4gYm91bmNl
V2l0aENyb3NzZmFkZUFuaW1hdGlvbkR1cmF0aW9uOworICAgICAgICByZXR1cm4gYm91bmNlQW5p
bWF0aW9uRHVyYXRpb247CisgICAgfQorCisgICAgcmV0dXJuIGZhZGVJbkFuaW1hdGlvbkR1cmF0
aW9uOworfQorCistIChCT09MKWhhc0NvbXBsZXRlZEFuaW1hdGlvbgoreworICAgIHJldHVybiBf
aGFzQ29tcGxldGVkQW5pbWF0aW9uOworfQorCistICh2b2lkKXByZXNlbnQKK3sKKyAgICBib29s
IHdhbnRzQm91bmNlID0gW3NlbGYgaW5kaWNhdG9yV2FudHNCb3VuY2U6Kl90ZXh0SW5kaWNhdG9y
XTsKKyAgICBib29sIHdhbnRzQ3Jvc3NmYWRlID0gaW5kaWNhdG9yV2FudHNDb250ZW50Q3Jvc3Nm
YWRlKCpfdGV4dEluZGljYXRvcik7CisgICAgYm9vbCB3YW50c0ZhZGVJbiA9IGluZGljYXRvcldh
bnRzRmFkZUluKCpfdGV4dEluZGljYXRvcik7CisgICAgQ0ZUaW1lSW50ZXJ2YWwgYW5pbWF0aW9u
RHVyYXRpb24gPSBbc2VsZiBfYW5pbWF0aW9uRHVyYXRpb25dOworCisgICAgX2hhc0NvbXBsZXRl
ZEFuaW1hdGlvbiA9IGZhbHNlOworCisgICAgUmV0YWluUHRyPENBQW5pbWF0aW9uPiBwcmVzZW50
YXRpb25BbmltYXRpb247CisgICAgaWYgKHdhbnRzQm91bmNlKQorICAgICAgICBwcmVzZW50YXRp
b25BbmltYXRpb24gPSBjcmVhdGVCb3VuY2VBbmltYXRpb24oYW5pbWF0aW9uRHVyYXRpb24pOwor
ICAgIGVsc2UgaWYgKHdhbnRzRmFkZUluKQorICAgICAgICBwcmVzZW50YXRpb25BbmltYXRpb24g
PSBjcmVhdGVGYWRlSW5BbmltYXRpb24oYW5pbWF0aW9uRHVyYXRpb24pOworCisgICAgUmV0YWlu
UHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbjsKKyAgICBSZXRhaW5QdHI8
Q0FCYXNpY0FuaW1hdGlvbj4gZmFkZVNoYWRvd0luQW5pbWF0aW9uOworICAgIGlmICh3YW50c0Ny
b3NzZmFkZSkgeworICAgICAgICBjcm9zc2ZhZGVBbmltYXRpb24gPSBjcmVhdGVDb250ZW50Q3Jv
c3NmYWRlQW5pbWF0aW9uKGFuaW1hdGlvbkR1cmF0aW9uLCAqX3RleHRJbmRpY2F0b3IpOworICAg
ICAgICBmYWRlU2hhZG93SW5BbmltYXRpb24gPSBjcmVhdGVTaGFkb3dGYWRlQW5pbWF0aW9uKGFu
aW1hdGlvbkR1cmF0aW9uKTsKKyAgICB9CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Cisg
ICAgZm9yIChDQUxheWVyICpib3VuY2VMYXllciBpbiBfYm91bmNlTGF5ZXJzLmdldCgpKSB7Cisg
ICAgICAgIGlmIChbc2VsZiBpbmRpY2F0b3JXYW50c01hbnVhbEFuaW1hdGlvbjoqX3RleHRJbmRp
Y2F0b3JdKQorICAgICAgICAgICAgYm91bmNlTGF5ZXIuc3BlZWQgPSAwOworCisgICAgICAgIGlm
ICghd2FudHNGYWRlSW4pCisgICAgICAgICAgICBib3VuY2VMYXllci5vcGFjaXR5ID0gMTsKKwor
ICAgICAgICBpZiAocHJlc2VudGF0aW9uQW5pbWF0aW9uKQorICAgICAgICAgICAgW2JvdW5jZUxh
eWVyIGFkZEFuaW1hdGlvbjpwcmVzZW50YXRpb25BbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAicHJl
c2VudGF0aW9uIl07CisKKyAgICAgICAgaWYgKHdhbnRzQ3Jvc3NmYWRlKSB7CisgICAgICAgICAg
ICBbW2JvdW5jZUxheWVyIHZhbHVlRm9yS2V5OnRleHRMYXllcktleV0gYWRkQW5pbWF0aW9uOmNy
b3NzZmFkZUFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJjb250ZW50VHJhbnNpdGlvbiJdOworICAg
ICAgICAgICAgW1tib3VuY2VMYXllciB2YWx1ZUZvcktleTpkcm9wU2hhZG93TGF5ZXJLZXldIGFk
ZEFuaW1hdGlvbjpmYWRlU2hhZG93SW5BbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiZmFkZVNoYWRv
d0luIl07CisgICAgICAgICAgICBbW2JvdW5jZUxheWVyIHZhbHVlRm9yS2V5OnJpbVNoYWRvd0xh
eWVyS2V5XSBhZGRBbmltYXRpb246ZmFkZVNoYWRvd0luQW5pbWF0aW9uLmdldCgpIGZvcktleTpA
ImZhZGVTaGFkb3dJbiJdOworICAgICAgICB9CisgICAgfQorICAgIFtDQVRyYW5zYWN0aW9uIGNv
bW1pdF07Cit9CisKKy0gKHZvaWQpaGlkZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9u
PiBmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6
QCJvcGFjaXR5Il07CisgICAgW2ZhZGVBbmltYXRpb24gc2V0RnJvbVZhbHVlOkAxXTsKKyAgICBb
ZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOkAwXTsKKyAgICBbZmFkZUFuaW1hdGlvbiBzZXRGaWxs
TW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKKyAgICBbZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVk
T25Db21wbGV0aW9uOk5PXTsKKyAgICBbZmFkZUFuaW1hdGlvbiBzZXREdXJhdGlvbjpmYWRlT3V0
QW5pbWF0aW9uRHVyYXRpb25dOworCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtD
QVRyYW5zYWN0aW9uIHNldENvbXBsZXRpb25CbG9jazpjb21wbGV0aW9uSGFuZGxlcl07CisgICAg
W3NlbGYgYWRkQW5pbWF0aW9uOmZhZGVBbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiZmFkZU91dCJd
OworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisKKy0gKHZvaWQpc2V0QW5pbWF0aW9u
UHJvZ3Jlc3M6KGZsb2F0KXByb2dyZXNzCit7CisgICAgaWYgKF9oYXNDb21wbGV0ZWRBbmltYXRp
b24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7CisgICAgICAg
IF9oYXNDb21wbGV0ZWRBbmltYXRpb24gPSB0cnVlOworCisgICAgICAgIGZvciAoQ0FMYXllciAq
Ym91bmNlTGF5ZXIgaW4gX2JvdW5jZUxheWVycy5nZXQoKSkgeworICAgICAgICAgICAgLy8gQ29u
dGludWUgdGhlIGFuaW1hdGlvbiBmcm9tIHdoZXJldmVyIGl0IGhhZCBtYW51YWxseSBwcm9ncmVz
c2VkIHRvLgorICAgICAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lID0gYm91bmNlTGF5
ZXIudGltZU9mZnNldDsKKyAgICAgICAgICAgIGJvdW5jZUxheWVyLnNwZWVkID0gMTsKKyAgICAg
ICAgICAgIGJlZ2luVGltZSA9IFtib3VuY2VMYXllciBjb252ZXJ0VGltZTpDQUN1cnJlbnRNZWRp
YVRpbWUoKSBmcm9tTGF5ZXI6bmlsXSAtIGJlZ2luVGltZTsKKyAgICAgICAgICAgIGJvdW5jZUxh
eWVyLmJlZ2luVGltZSA9IGJlZ2luVGltZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIENGVGltZUludGVydmFsIGFuaW1hdGlvbkR1cmF0aW9uID0gW3NlbGYgX2FuaW1hdGlvbkR1
cmF0aW9uXTsKKyAgICAgICAgZm9yIChDQUxheWVyICpib3VuY2VMYXllciBpbiBfYm91bmNlTGF5
ZXJzLmdldCgpKQorICAgICAgICAgICAgYm91bmNlTGF5ZXIudGltZU9mZnNldCA9IHByb2dyZXNz
ICogYW5pbWF0aW9uRHVyYXRpb247CisgICAgfQorfQorCistIChCT09MKWlzRmxpcHBlZAorewor
ICAgIHJldHVybiBZRVM7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1Rl
eHRJbmRpY2F0b3JXaW5kb3cuaAppbmRleCA2NDc1Y2U1ZWJjOTA3YWUxODgwYWYxNzFjMDczNmZm
M2VjYjUwMjZlLi5jM2IzM2ViYTJjOGJjMGQ3NTQ1OWRkMjE1MDg5YjY1MjljNWQzMTVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5oCkBAIC0zMiw3
ICszMiw3IEBACiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgogCiBPQkpDX0NMQVNTIE5TVmlldzsK
LU9CSkNfQ0xBU1MgV2ViVGV4dEluZGljYXRvclZpZXc7CitPQkpDX0NMQVNTIFdlYlRleHRJbmRp
Y2F0b3JMYXllcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03Miw3ICs3Miw4IEBAIHBy
aXZhdGU6CiAgICAgTlNWaWV3ICptX3RhcmdldFZpZXc7CiAgICAgUmVmUHRyPFRleHRJbmRpY2F0
b3I+IG1fdGV4dEluZGljYXRvcjsKICAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IG1fdGV4dEluZGlj
YXRvcldpbmRvdzsKLSAgICBSZXRhaW5QdHI8V2ViVGV4dEluZGljYXRvclZpZXc+IG1fdGV4dElu
ZGljYXRvclZpZXc7CisgICAgUmV0YWluUHRyPE5TVmlldz4gbV90ZXh0SW5kaWNhdG9yVmlldzsK
KyAgICBSZXRhaW5QdHI8V2ViVGV4dEluZGljYXRvckxheWVyPiBtX3RleHRJbmRpY2F0b3JMYXll
cjsKIAogICAgIFJ1bkxvb3A6OlRpbWVyPFRleHRJbmRpY2F0b3JXaW5kb3c+IG1fdGVtcG9yYXJ5
VGV4dEluZGljYXRvclRpbWVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0
SW5kaWNhdG9yV2luZG93Lm1tCmluZGV4IDI3MmVkNDQ3NzRiNTY1ZjhjYTFhZDRhZTA3NmQwMTM0
NDczMDE3NjMuLmY4NWZhNTNiM2I0YTlmNDU5Njk3NzZhMTJjYzQxMWY3OTIyZGY3N2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQpAQCAtMzMs
Mzc4ICszMywxOSBAQAogI2ltcG9ydCAiUGF0aFV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGV4dElu
ZGljYXRvci5oIgogI2ltcG9ydCAiV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlLmgi
CisjaW1wb3J0ICJXZWJUZXh0SW5kaWNhdG9yTGF5ZXIuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cv
Q29yZUdyYXBoaWNzU1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TQ29sb3JTUEkuaD4K
ICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgogCiBjb25zdCBDRlRpbWVJ
bnRlcnZhbCBib3VuY2VBbmltYXRpb25EdXJhdGlvbiA9IDAuMTI7Ci1jb25zdCBDRlRpbWVJbnRl
cnZhbCBib3VuY2VXaXRoQ3Jvc3NmYWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjM7Ci1jb25zdCBD
RlRpbWVJbnRlcnZhbCBmYWRlSW5BbmltYXRpb25EdXJhdGlvbiA9IDAuMTU7CiBjb25zdCBDRlRp
bWVJbnRlcnZhbCB0aW1lQmVmb3JlRmFkZVN0YXJ0cyA9IGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9u
ICsgMC4yOwotY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgZmFkZU91dEFuaW1hdGlvbkR1cmF0aW9uID0g
MC4zOwogCiBjb25zdCBDR0Zsb2F0IG1pZEJvdW5jZVNjYWxlID0gMS4yNTsKLWNvbnN0IENHRmxv
YXQgYm9yZGVyV2lkdGggPSAwOwotY29uc3QgQ0dGbG9hdCBjb3JuZXJSYWRpdXMgPSAwOwotY29u
c3QgQ0dGbG9hdCBkcm9wU2hhZG93T2Zmc2V0WCA9IDA7Ci1jb25zdCBDR0Zsb2F0IGRyb3BTaGFk
b3dPZmZzZXRZID0gMTsKIGNvbnN0IENHRmxvYXQgZHJvcFNoYWRvd0JsdXJSYWRpdXMgPSAyOwot
Y29uc3QgQ0dGbG9hdCByaW1TaGFkb3dCbHVyUmFkaXVzID0gMTsKLQotTlNTdHJpbmcgKnRleHRM
YXllcktleSA9IEAiVGV4dExheWVyIjsKLU5TU3RyaW5nICpkcm9wU2hhZG93TGF5ZXJLZXkgPSBA
IkRyb3BTaGFkb3dMYXllciI7Ci1OU1N0cmluZyAqcmltU2hhZG93TGF5ZXJLZXkgPSBAIlJpbVNo
YWRvd0xheWVyIjsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUBpbnRlcmZhY2UgV2Vi
VGV4dEluZGljYXRvclZpZXcgOiBOU1ZpZXcgewotICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBf
dGV4dEluZGljYXRvcjsKLSAgICBSZXRhaW5QdHI8TlNBcnJheT4gX2JvdW5jZUxheWVyczsKLSAg
ICBOU1NpemUgX21hcmdpbjsKLSAgICBib29sIF9oYXNDb21wbGV0ZWRBbmltYXRpb247Ci0gICAg
Qk9PTCBfZmFkaW5nT3V0OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNS
ZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFRleHRJbmRpY2F0b3ImKXRleHRJbmRpY2F0b3IgbWFy
Z2luOihOU1NpemUpbWFyZ2luIG9mZnNldDooTlNQb2ludClvZmZzZXQ7Ci0KLS0gKHZvaWQpcHJl
c2VudDsKLS0gKHZvaWQpaGlkZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlcjsKLQotLSAodm9pZClzZXRBbmltYXRpb25Qcm9ncmVzczooZmxvYXQp
cHJvZ3Jlc3M7Ci0tIChCT09MKWhhc0NvbXBsZXRlZEFuaW1hdGlvbjsKLQotQHByb3BlcnR5IChu
b25hdG9taWMsIGdldHRlcj1pc0ZhZGluZ091dCkgQk9PTCBmYWRpbmdPdXQ7Ci0KLUBlbmQKLQot
QGltcGxlbWVudGF0aW9uIFdlYlRleHRJbmRpY2F0b3JWaWV3Ci0KLUBzeW50aGVzaXplIGZhZGlu
Z091dCA9IF9mYWRpbmdPdXQ7Ci0KLXN0YXRpYyBib29sIGluZGljYXRvcldhbnRzQm91bmNlKGNv
bnN0IFRleHRJbmRpY2F0b3ImIGluZGljYXRvcikKLXsKLSAgICBzd2l0Y2ggKGluZGljYXRvci5w
cmVzZW50YXRpb25UcmFuc2l0aW9uKCkpIHsKLSAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGU6Ci0gICAgY2FzZSBUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlOgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbjoK
LSAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lOgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBpbmRpY2F0b3JXYW50c0NvbnRlbnRD
cm9zc2ZhZGUoY29uc3QgVGV4dEluZGljYXRvciYgaW5kaWNhdG9yKQotewotICAgIGlmICghaW5k
aWNhdG9yLmRhdGEoKS5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGluZGljYXRvci5wcmVzZW50YXRpb25UcmFuc2l0aW9uKCkp
IHsKLSAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VB
bmRDcm9zc2ZhZGU6Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlOgotICAgIGNhc2UgVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbjoKLSAgICBjYXNlIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1z
dGF0aWMgYm9vbCBpbmRpY2F0b3JXYW50c0ZhZGVJbihjb25zdCBUZXh0SW5kaWNhdG9yJiBpbmRp
Y2F0b3IpCi17Ci0gICAgc3dpdGNoIChpbmRpY2F0b3IucHJlc2VudGF0aW9uVHJhbnNpdGlvbigp
KSB7Ci0gICAgY2FzZSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUlu
OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb246OkJvdW5jZToKLSAgICBjYXNlIFRleHRJbmRpY2F0b3JQcmVzZW50YXRp
b25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGU6Ci0gICAgY2FzZSBUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
c3RhdGljIGJvb2wgaW5kaWNhdG9yV2FudHNNYW51YWxBbmltYXRpb24oY29uc3QgVGV4dEluZGlj
YXRvciYgaW5kaWNhdG9yKQotewotICAgIHN3aXRjaCAoaW5kaWNhdG9yLnByZXNlbnRhdGlvblRy
YW5zaXRpb24oKSkgewotICAgIGNhc2UgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRp
b246OkZhZGVJbjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIFRleHRJbmRpY2F0
b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2U6Ci0gICAgY2FzZSBUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlOgotICAgIGNhc2UgVGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmU6Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgdGV4
dEluZGljYXRvcjooVGV4dEluZGljYXRvciYpdGV4dEluZGljYXRvciBtYXJnaW46KE5TU2l6ZSlt
YXJnaW4gb2Zmc2V0OihOU1BvaW50KW9mZnNldAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdFdpdGhGcmFtZTpmcmFtZV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgX3RleHRJ
bmRpY2F0b3IgPSAmdGV4dEluZGljYXRvcjsKLSAgICBfbWFyZ2luID0gbWFyZ2luOwotCi0gICAg
c2VsZi53YW50c0xheWVyID0gWUVTOwotICAgIHNlbGYubGF5ZXIuYW5jaG9yUG9pbnQgPSBDR1Bv
aW50WmVybzsKLQotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gY29udGVudHNJbWFnZTsKLSAgICBG
bG9hdFNpemUgY29udGVudHNJbWFnZUxvZ2ljYWxTaXplIHsgMSwgMSB9OwotICAgIGlmIChhdXRv
KiBjb250ZW50SW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCkpIHsKLSAgICAg
ICAgY29udGVudHNJbWFnZUxvZ2ljYWxTaXplID0gY29udGVudEltYWdlLT5zaXplKCk7Ci0gICAg
ICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgxIC8gX3RleHRJbmRpY2F0b3ItPmNv
bnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBpZiAoaW5kaWNhdG9yV2FudHNDb250
ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikgJiYgX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJ
bWFnZVdpdGhIaWdobGlnaHQoKSkKLSAgICAgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dElu
ZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjb250ZW50c0ltYWdlID0gY29udGVudEltYWdlLT5uYXRp
dmVJbWFnZSgpOwotICAgIH0KLQotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYm91bmNl
TGF5ZXJzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBS
ZXRhaW5QdHI8Q0dDb2xvclJlZj4gaGlnaGxpZ2h0Q29sb3IgPSBbTlNDb2xvciBmaW5kSGlnaGxp
Z2h0Q29sb3JdLkNHQ29sb3I7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IHJpbVNoYWRvd0Nv
bG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlV2hpdGU6MCBhbHBoYTowLjM1XS5DR0NvbG9y
OwotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBkcm9wU2hhZG93Q29sb3IgPSBbTlNDb2xvciBj
b2xvcldpdGhEZXZpY2VXaGl0ZTowIGFscGhhOjAuMl0uQ0dDb2xvcjsKLQotICAgIFJldGFpblB0
cjxDR0NvbG9yUmVmPiBib3JkZXJDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDou
OTYgZ3JlZW46LjkwIGJsdWU6MCBhbHBoYToxXS5DR0NvbG9yOwotCi0gICAgVmVjdG9yPEZsb2F0
UmVjdD4gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IF90ZXh0SW5kaWNhdG9y
LT50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCk7Ci0KLSAgICBWZWN0b3I8UGF0
aD4gcGF0aHMgPSBQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHModGV4
dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcywgY29ybmVyUmFkaXVzKTsKLQotICAgIGZv
ciAoY29uc3QgYXV0byYgcGF0aCA6IHBhdGhzKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBwYXRoQm91
bmRpbmdSZWN0ID0gcGF0aC5ib3VuZGluZ1JlY3QoKTsKLQotICAgICAgICBQYXRoIHRyYW5zbGF0
ZWRQYXRoOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotICAgICAgICB0cmFu
c2Zvcm0udHJhbnNsYXRlKC1wYXRoQm91bmRpbmdSZWN0LmxvY2F0aW9uKCkpOwotICAgICAgICB0
cmFuc2xhdGVkUGF0aC5hZGRQYXRoKHBhdGgsIHRyYW5zZm9ybSk7Ci0KLSAgICAgICAgRmxvYXRS
ZWN0IG9mZnNldFRleHRSZWN0ID0gcGF0aEJvdW5kaW5nUmVjdDsKLSAgICAgICAgb2Zmc2V0VGV4
dFJlY3QubW92ZShvZmZzZXQueCwgb2Zmc2V0LnkpOwotCi0gICAgICAgIEZsb2F0UmVjdCBib3Vu
Y2VMYXllclJlY3QgPSBvZmZzZXRUZXh0UmVjdDsKLSAgICAgICAgYm91bmNlTGF5ZXJSZWN0Lm1v
dmUoX21hcmdpbi53aWR0aCwgX21hcmdpbi5oZWlnaHQpOwotCi0gICAgICAgIFJldGFpblB0cjxD
QUxheWVyPiBib3VuY2VMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7Ci0g
ICAgICAgIFtib3VuY2VMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXll
ckRlbGVnYXRlIHNoYXJlZF1dOwotICAgICAgICBbYm91bmNlTGF5ZXIgc2V0RnJhbWU6Ym91bmNl
TGF5ZXJSZWN0XTsKLSAgICAgICAgW2JvdW5jZUxheWVyIHNldE9wYWNpdHk6MF07Ci0gICAgICAg
IFtib3VuY2VMYXllcnMgYWRkT2JqZWN0OmJvdW5jZUxheWVyLmdldCgpXTsKLQotICAgICAgICBG
bG9hdFJlY3QgeWVsbG93SGlnaGxpZ2h0UmVjdChGbG9hdFBvaW50KCksIGJvdW5jZUxheWVyUmVj
dC5zaXplKCkpOwotCi0gICAgICAgIFJldGFpblB0cjxDQUxheWVyPiBkcm9wU2hhZG93TGF5ZXIg
PSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOwotICAgICAgICBbZHJvcFNoYWRvd0xh
eWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVk
XV07Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93Q29sb3I6ZHJvcFNoYWRvd0Nv
bG9yLmdldCgpXTsKLSAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRTaGFkb3dSYWRpdXM6ZHJv
cFNoYWRvd0JsdXJSYWRpdXNdOwotICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNoYWRvd09m
ZnNldDpDR1NpemVNYWtlKGRyb3BTaGFkb3dPZmZzZXRYLCBkcm9wU2hhZG93T2Zmc2V0WSldOwot
ICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNoYWRvd1BhdGg6dHJhbnNsYXRlZFBhdGgucGxh
dGZvcm1QYXRoKCldOwotICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNoYWRvd09wYWNpdHk6
MV07Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0RnJhbWU6eWVsbG93SGlnaGxpZ2h0UmVj
dF07Ci0gICAgICAgIFtib3VuY2VMYXllciBhZGRTdWJsYXllcjpkcm9wU2hhZG93TGF5ZXIuZ2V0
KCldOwotICAgICAgICBbYm91bmNlTGF5ZXIgc2V0VmFsdWU6ZHJvcFNoYWRvd0xheWVyLmdldCgp
IGZvcktleTpkcm9wU2hhZG93TGF5ZXJLZXldOwotCi0gICAgICAgIFJldGFpblB0cjxDQUxheWVy
PiByaW1TaGFkb3dMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7Ci0gICAg
ICAgIFtyaW1TaGFkb3dMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXll
ckRlbGVnYXRlIHNoYXJlZF1dOwotICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0RnJhbWU6eWVs
bG93SGlnaGxpZ2h0UmVjdF07Ci0gICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRTaGFkb3dDb2xv
cjpyaW1TaGFkb3dDb2xvci5nZXQoKV07Ci0gICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRTaGFk
b3dSYWRpdXM6cmltU2hhZG93Qmx1clJhZGl1c107Ci0gICAgICAgIFtyaW1TaGFkb3dMYXllciBz
ZXRTaGFkb3dQYXRoOnRyYW5zbGF0ZWRQYXRoLnBsYXRmb3JtUGF0aCgpXTsKLSAgICAgICAgW3Jp
bVNoYWRvd0xheWVyIHNldFNoYWRvd09mZnNldDpDR1NpemVaZXJvXTsKLSAgICAgICAgW3JpbVNo
YWRvd0xheWVyIHNldFNoYWRvd09wYWNpdHk6MV07Ci0gICAgICAgIFtyaW1TaGFkb3dMYXllciBz
ZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsKLSAgICAgICAgW2JvdW5jZUxheWVyIGFkZFN1
YmxheWVyOnJpbVNoYWRvd0xheWVyLmdldCgpXTsKLSAgICAgICAgW2JvdW5jZUxheWVyIHNldFZh
bHVlOnJpbVNoYWRvd0xheWVyLmdldCgpIGZvcktleTpyaW1TaGFkb3dMYXllcktleV07Ci0KLSAg
ICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IHRleHRMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFs
bG9jXSBpbml0XSk7Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmhpZ2hs
aWdodENvbG9yLmdldCgpXTsKLSAgICAgICAgW3RleHRMYXllciBzZXRCb3JkZXJDb2xvcjpib3Jk
ZXJDb2xvci5nZXQoKV07Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0Qm9yZGVyV2lkdGg6Ym9yZGVy
V2lkdGhdOwotICAgICAgICBbdGV4dExheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxp
bmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07Ci0gICAgICAgIGlmIChjb250ZW50c0ltYWdlKQot
ICAgICAgICAgICAgW3RleHRMYXllciBzZXRDb250ZW50czooX19icmlkZ2UgaWQpY29udGVudHNJ
bWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKLQotICAgICAgICBSZXRhaW5QdHI8Q0FTaGFw
ZUxheWVyPiBtYXNrTGF5ZXIgPSBhZG9wdE5TKFtbQ0FTaGFwZUxheWVyIGFsbG9jXSBpbml0XSk7
Ci0gICAgICAgIFttYXNrTGF5ZXIgc2V0UGF0aDp0cmFuc2xhdGVkUGF0aC5wbGF0Zm9ybVBhdGgo
KV07Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0TWFzazptYXNrTGF5ZXIuZ2V0KCldOwotCi0gICAg
ICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QgPSBwYXRoQm91bmRpbmdSZWN0OwotICAgICAgICBbdGV4
dExheWVyIHNldENvbnRlbnRzUmVjdDpDR1JlY3RNYWtlKGltYWdlUmVjdC54KCkgLyBjb250ZW50
c0ltYWdlTG9naWNhbFNpemUud2lkdGgoKSwgaW1hZ2VSZWN0LnkoKSAvIGNvbnRlbnRzSW1hZ2VM
b2dpY2FsU2l6ZS5oZWlnaHQoKSwgaW1hZ2VSZWN0LndpZHRoKCkgLyBjb250ZW50c0ltYWdlTG9n
aWNhbFNpemUud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpIC8gY29udGVudHNJbWFnZUxvZ2lj
YWxTaXplLmhlaWdodCgpKV07Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHNHcmF2aXR5
OmtDQUdyYXZpdHlDZW50ZXJdOwotICAgICAgICBbdGV4dExheWVyIHNldENvbnRlbnRzU2NhbGU6
X3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCldOwotICAgICAgICBbdGV4
dExheWVyIHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOwotICAgICAgICBbYm91bmNlTGF5
ZXIgc2V0VmFsdWU6dGV4dExheWVyLmdldCgpIGZvcktleTp0ZXh0TGF5ZXJLZXldOwotICAgICAg
ICBbYm91bmNlTGF5ZXIgYWRkU3VibGF5ZXI6dGV4dExheWVyLmdldCgpXTsKLSAgICB9Ci0KLSAg
ICBzZWxmLmxheWVyLnN1YmxheWVycyA9IGJvdW5jZUxheWVycy5nZXQoKTsKLSAgICBfYm91bmNl
TGF5ZXJzID0gYm91bmNlTGF5ZXJzOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLXN0YXRpYyBS
ZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlQm91bmNlQW5pbWF0aW9uKENGVGlt
ZUludGVydmFsIGR1cmF0aW9uKQotewotICAgIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9u
PiBib3VuY2VBbmltYXRpb24gPSBbQ0FLZXlmcmFtZUFuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5
UGF0aDpAInRyYW5zZm9ybSJdOwotICAgIFtib3VuY2VBbmltYXRpb24gc2V0VmFsdWVzOkBbCi0g
ICAgICAgIFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRElkZW50
aXR5XSwKLSAgICAgICAgW05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9y
bTNETWFrZVNjYWxlKG1pZEJvdW5jZVNjYWxlLCBtaWRCb3VuY2VTY2FsZSwgMSldLAotICAgICAg
ICBbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOkNBVHJhbnNmb3JtM0RJZGVudGl0eV0K
LSAgICAgICAgXV07Ci0gICAgW2JvdW5jZUFuaW1hdGlvbiBzZXREdXJhdGlvbjpkdXJhdGlvbl07
Ci0KLSAgICByZXR1cm4gYm91bmNlQW5pbWF0aW9uOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENB
QmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24oQ0ZUaW1lSW50
ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpCi17Ci0gICAgUmV0
YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5p
bWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsKLSAgICBhdXRvIGNvbnRl
bnRzSW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLmNvbnRlbnRJbWFnZSgpLT5uYXRpdmVJbWFnZSgpOwot
ICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0VG9WYWx1ZTooX19icmlkZ2UgaWQpY29udGVudHNJ
bWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKLSAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNl
dEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOwotICAgIFtjcm9zc2ZhZGVBbmltYXRpb24g
c2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107Ci0gICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRE
dXJhdGlvbjpkdXJhdGlvbl07Ci0KLSAgICByZXR1cm4gY3Jvc3NmYWRlQW5pbWF0aW9uOwotfQot
Ci1zdGF0aWMgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZVNoYWRvd0ZhZGVBbmlt
YXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXRpb24pCi17Ci0gICAgUmV0YWluUHRyPENBQmFzaWNB
bmltYXRpb24+IGZhZGVTaGFkb3dJbkFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1h
dGlvbldpdGhLZXlQYXRoOkAic2hhZG93T3BhY2l0eSJdOwotICAgIFtmYWRlU2hhZG93SW5Bbmlt
YXRpb24gc2V0RnJvbVZhbHVlOkAwXTsKLSAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldFRv
VmFsdWU6QDFdOwotICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmls
bE1vZGVGb3J3YXJkc107Ci0gICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlvbiBzZXRSZW1vdmVkT25D
b21wbGV0aW9uOk5PXTsKLSAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1
cmF0aW9uXTsKLQotICAgIHJldHVybiBmYWRlU2hhZG93SW5BbmltYXRpb247Ci19Ci0KLXN0YXRp
YyBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3JlYXRlRmFkZUluQW5pbWF0aW9uKENGVGlt
ZUludGVydmFsIGR1cmF0aW9uKQotewotICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBm
YWRlSW5BbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpA
Im9wYWNpdHkiXTsKLSAgICBbZmFkZUluQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpAMF07Ci0gICAg
W2ZhZGVJbkFuaW1hdGlvbiBzZXRUb1ZhbHVlOkAxXTsKLSAgICBbZmFkZUluQW5pbWF0aW9uIHNl
dEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOwotICAgIFtmYWRlSW5BbmltYXRpb24gc2V0
UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107Ci0gICAgW2ZhZGVJbkFuaW1hdGlvbiBzZXREdXJhdGlv
bjpkdXJhdGlvbl07Ci0KLSAgICByZXR1cm4gZmFkZUluQW5pbWF0aW9uOwotfQotCi0tIChDRlRp
bWVJbnRlcnZhbClfYW5pbWF0aW9uRHVyYXRpb24KLXsKLSAgICBpZiAoaW5kaWNhdG9yV2FudHNC
b3VuY2UoKl90ZXh0SW5kaWNhdG9yKSkgewotICAgICAgICBpZiAoaW5kaWNhdG9yV2FudHNDb250
ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0gICAgICAgICAgICByZXR1cm4gYm91bmNl
V2l0aENyb3NzZmFkZUFuaW1hdGlvbkR1cmF0aW9uOwotICAgICAgICByZXR1cm4gYm91bmNlQW5p
bWF0aW9uRHVyYXRpb247Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhZGVJbkFuaW1hdGlvbkR1cmF0
aW9uOwotfQotCi0tIChCT09MKWhhc0NvbXBsZXRlZEFuaW1hdGlvbgotewotICAgIHJldHVybiBf
aGFzQ29tcGxldGVkQW5pbWF0aW9uOwotfQotCi0tICh2b2lkKXByZXNlbnQKLXsKLSAgICBib29s
IHdhbnRzQm91bmNlID0gaW5kaWNhdG9yV2FudHNCb3VuY2UoKl90ZXh0SW5kaWNhdG9yKTsKLSAg
ICBib29sIHdhbnRzQ3Jvc3NmYWRlID0gaW5kaWNhdG9yV2FudHNDb250ZW50Q3Jvc3NmYWRlKCpf
dGV4dEluZGljYXRvcik7Ci0gICAgYm9vbCB3YW50c0ZhZGVJbiA9IGluZGljYXRvcldhbnRzRmFk
ZUluKCpfdGV4dEluZGljYXRvcik7Ci0gICAgQ0ZUaW1lSW50ZXJ2YWwgYW5pbWF0aW9uRHVyYXRp
b24gPSBbc2VsZiBfYW5pbWF0aW9uRHVyYXRpb25dOwotCi0gICAgX2hhc0NvbXBsZXRlZEFuaW1h
dGlvbiA9IGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENBQW5pbWF0aW9uPiBwcmVzZW50YXRpb25B
bmltYXRpb247Ci0gICAgaWYgKHdhbnRzQm91bmNlKQotICAgICAgICBwcmVzZW50YXRpb25Bbmlt
YXRpb24gPSBjcmVhdGVCb3VuY2VBbmltYXRpb24oYW5pbWF0aW9uRHVyYXRpb24pOwotICAgIGVs
c2UgaWYgKHdhbnRzRmFkZUluKQotICAgICAgICBwcmVzZW50YXRpb25BbmltYXRpb24gPSBjcmVh
dGVGYWRlSW5BbmltYXRpb24oYW5pbWF0aW9uRHVyYXRpb24pOwotCi0gICAgUmV0YWluUHRyPENB
QmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbjsKLSAgICBSZXRhaW5QdHI8Q0FCYXNp
Y0FuaW1hdGlvbj4gZmFkZVNoYWRvd0luQW5pbWF0aW9uOwotICAgIGlmICh3YW50c0Nyb3NzZmFk
ZSkgewotICAgICAgICBjcm9zc2ZhZGVBbmltYXRpb24gPSBjcmVhdGVDb250ZW50Q3Jvc3NmYWRl
QW5pbWF0aW9uKGFuaW1hdGlvbkR1cmF0aW9uLCAqX3RleHRJbmRpY2F0b3IpOwotICAgICAgICBm
YWRlU2hhZG93SW5BbmltYXRpb24gPSBjcmVhdGVTaGFkb3dGYWRlQW5pbWF0aW9uKGFuaW1hdGlv
bkR1cmF0aW9uKTsKLSAgICB9Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgZm9y
IChDQUxheWVyICpib3VuY2VMYXllciBpbiBfYm91bmNlTGF5ZXJzLmdldCgpKSB7Ci0gICAgICAg
IGlmIChpbmRpY2F0b3JXYW50c01hbnVhbEFuaW1hdGlvbigqX3RleHRJbmRpY2F0b3IpKQotICAg
ICAgICAgICAgYm91bmNlTGF5ZXIuc3BlZWQgPSAwOwotCi0gICAgICAgIGlmICghd2FudHNGYWRl
SW4pCi0gICAgICAgICAgICBib3VuY2VMYXllci5vcGFjaXR5ID0gMTsKLQotICAgICAgICBpZiAo
cHJlc2VudGF0aW9uQW5pbWF0aW9uKQotICAgICAgICAgICAgW2JvdW5jZUxheWVyIGFkZEFuaW1h
dGlvbjpwcmVzZW50YXRpb25BbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAicHJlc2VudGF0aW9uIl07
Ci0KLSAgICAgICAgaWYgKHdhbnRzQ3Jvc3NmYWRlKSB7Ci0gICAgICAgICAgICBbW2JvdW5jZUxh
eWVyIHZhbHVlRm9yS2V5OnRleHRMYXllcktleV0gYWRkQW5pbWF0aW9uOmNyb3NzZmFkZUFuaW1h
dGlvbi5nZXQoKSBmb3JLZXk6QCJjb250ZW50VHJhbnNpdGlvbiJdOwotICAgICAgICAgICAgW1ti
b3VuY2VMYXllciB2YWx1ZUZvcktleTpkcm9wU2hhZG93TGF5ZXJLZXldIGFkZEFuaW1hdGlvbjpm
YWRlU2hhZG93SW5BbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiZmFkZVNoYWRvd0luIl07Ci0gICAg
ICAgICAgICBbW2JvdW5jZUxheWVyIHZhbHVlRm9yS2V5OnJpbVNoYWRvd0xheWVyS2V5XSBhZGRB
bmltYXRpb246ZmFkZVNoYWRvd0luQW5pbWF0aW9uLmdldCgpIGZvcktleTpAImZhZGVTaGFkb3dJ
biJdOwotICAgICAgICB9Ci0gICAgfQotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0K
LS0gKHZvaWQpaGlkZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0
aW9uSGFuZGxlcgotewotICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBmYWRlQW5pbWF0
aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJvcGFjaXR5Il07
Ci0gICAgW2ZhZGVBbmltYXRpb24gc2V0RnJvbVZhbHVlOkAxXTsKLSAgICBbZmFkZUFuaW1hdGlv
biBzZXRUb1ZhbHVlOkAwXTsKLSAgICBbZmFkZUFuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxs
TW9kZUZvcndhcmRzXTsKLSAgICBbZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9u
Ok5PXTsKLSAgICBbZmFkZUFuaW1hdGlvbiBzZXREdXJhdGlvbjpmYWRlT3V0QW5pbWF0aW9uRHVy
YXRpb25dOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9u
IHNldENvbXBsZXRpb25CbG9jazpjb21wbGV0aW9uSGFuZGxlcl07Ci0gICAgW3NlbGYubGF5ZXIg
YWRkQW5pbWF0aW9uOmZhZGVBbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiZmFkZU91dCJdOwotICAg
IFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0KLS0gKHZvaWQpc2V0QW5pbWF0aW9uUHJvZ3Jl
c3M6KGZsb2F0KXByb2dyZXNzCi17Ci0gICAgaWYgKF9oYXNDb21wbGV0ZWRBbmltYXRpb24pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7Ci0gICAgICAgIF9oYXND
b21wbGV0ZWRBbmltYXRpb24gPSB0cnVlOwotCi0gICAgICAgIGZvciAoQ0FMYXllciAqYm91bmNl
TGF5ZXIgaW4gX2JvdW5jZUxheWVycy5nZXQoKSkgewotICAgICAgICAgICAgLy8gQ29udGludWUg
dGhlIGFuaW1hdGlvbiBmcm9tIHdoZXJldmVyIGl0IGhhZCBtYW51YWxseSBwcm9ncmVzc2VkIHRv
LgotICAgICAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lID0gYm91bmNlTGF5ZXIudGlt
ZU9mZnNldDsKLSAgICAgICAgICAgIGJvdW5jZUxheWVyLnNwZWVkID0gMTsKLSAgICAgICAgICAg
IGJlZ2luVGltZSA9IFtib3VuY2VMYXllciBjb252ZXJ0VGltZTpDQUN1cnJlbnRNZWRpYVRpbWUo
KSBmcm9tTGF5ZXI6bmlsXSAtIGJlZ2luVGltZTsKLSAgICAgICAgICAgIGJvdW5jZUxheWVyLmJl
Z2luVGltZSA9IGJlZ2luVGltZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIENG
VGltZUludGVydmFsIGFuaW1hdGlvbkR1cmF0aW9uID0gW3NlbGYgX2FuaW1hdGlvbkR1cmF0aW9u
XTsKLSAgICAgICAgZm9yIChDQUxheWVyICpib3VuY2VMYXllciBpbiBfYm91bmNlTGF5ZXJzLmdl
dCgpKQotICAgICAgICAgICAgYm91bmNlTGF5ZXIudGltZU9mZnNldCA9IHByb2dyZXNzICogYW5p
bWF0aW9uRHVyYXRpb247Ci0gICAgfQotfQotCi0tIChCT09MKWlzRmxpcHBlZAotewotICAgIHJl
dHVybiBZRVM7Ci19Ci0KLUBlbmQKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBUZXh0SW5kaWNh
dG9yV2luZG93OjpUZXh0SW5kaWNhdG9yV2luZG93KE5TVmlldyAqdGFyZ2V0VmlldykKQEAgLTQy
MywxNyArNjQsMTcgQEAgdm9pZCBUZXh0SW5kaWNhdG9yV2luZG93OjpzZXRBbmltYXRpb25Qcm9n
cmVzcyhmbG9hdCBwcm9ncmVzcykKICAgICBpZiAoIW1fdGV4dEluZGljYXRvcikKICAgICAgICAg
cmV0dXJuOwogCi0gICAgW21fdGV4dEluZGljYXRvclZpZXcgc2V0QW5pbWF0aW9uUHJvZ3Jlc3M6
cHJvZ3Jlc3NdOworICAgIFttX3RleHRJbmRpY2F0b3JMYXllciBzZXRBbmltYXRpb25Qcm9ncmVz
czpwcm9ncmVzc107CiB9CiAKIHZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6Y2xlYXJUZXh0SW5k
aWNhdG9yKFRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb24gYW5pbWF0aW9uKQog
ewogICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yID0gV1RGTW92ZShtX3Rl
eHRJbmRpY2F0b3IpOwogCi0gICAgaWYgKFttX3RleHRJbmRpY2F0b3JWaWV3IGlzRmFkaW5nT3V0
XSkKKyAgICBpZiAoW21fdGV4dEluZGljYXRvckxheWVyIGlzRmFkaW5nT3V0XSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKHRleHRJbmRpY2F0b3IgJiYgaW5kaWNhdG9yV2FudHNNYW51YWxB
bmltYXRpb24oKnRleHRJbmRpY2F0b3IpICYmIFttX3RleHRJbmRpY2F0b3JWaWV3IGhhc0NvbXBs
ZXRlZEFuaW1hdGlvbl0gJiYgYW5pbWF0aW9uID09IFRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNz
YWxBbmltYXRpb246OkZhZGVPdXQpIHsKKyAgICBpZiAodGV4dEluZGljYXRvciAmJiBbbV90ZXh0
SW5kaWNhdG9yTGF5ZXIgaW5kaWNhdG9yV2FudHNNYW51YWxBbmltYXRpb246KnRleHRJbmRpY2F0
b3JdICYmIFttX3RleHRJbmRpY2F0b3JMYXllciBoYXNDb21wbGV0ZWRBbmltYXRpb25dICYmIGFu
aW1hdGlvbiA9PSBUZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uOjpGYWRlT3V0
KSB7CiAgICAgICAgIHN0YXJ0RmFkZU91dCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
NDUzLDcgKzk0LDcgQEAgdm9pZCBUZXh0SW5kaWNhdG9yV2luZG93OjpzZXRUZXh0SW5kaWNhdG9y
KFJlZjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yLCBDR1IKICAgICBDR0Zsb2F0IGhvcml6
b250YWxNYXJnaW4gPSBkcm9wU2hhZG93Qmx1clJhZGl1cyAqIDIgKyBUZXh0SW5kaWNhdG9yOjpk
ZWZhdWx0SG9yaXpvbnRhbE1hcmdpbjsKICAgICBDR0Zsb2F0IHZlcnRpY2FsTWFyZ2luID0gZHJv
cFNoYWRvd0JsdXJSYWRpdXMgKiAyICsgVGV4dEluZGljYXRvcjo6ZGVmYXVsdFZlcnRpY2FsTWFy
Z2luOwogICAgIAotICAgIGlmIChpbmRpY2F0b3JXYW50c0JvdW5jZSgqbV90ZXh0SW5kaWNhdG9y
KSkgeworICAgIGlmIChbbV90ZXh0SW5kaWNhdG9yTGF5ZXIgaW5kaWNhdG9yV2FudHNCb3VuY2U6
Km1fdGV4dEluZGljYXRvcl0pIHsKICAgICAgICAgaG9yaXpvbnRhbE1hcmdpbiA9IHN0ZDo6bWF4
KGhvcml6b250YWxNYXJnaW4sIHRleHRCb3VuZGluZ1JlY3RJblNjcmVlbkNvb3JkaW5hdGVzLnNp
emUud2lkdGggKiAobWlkQm91bmNlU2NhbGUgLSAxKSArIGhvcml6b250YWxNYXJnaW4pOwogICAg
ICAgICB2ZXJ0aWNhbE1hcmdpbiA9IHN0ZDo6bWF4KHZlcnRpY2FsTWFyZ2luLCB0ZXh0Qm91bmRp
bmdSZWN0SW5TY3JlZW5Db29yZGluYXRlcy5zaXplLmhlaWdodCAqIChtaWRCb3VuY2VTY2FsZSAt
IDEpICsgdmVydGljYWxNYXJnaW4pOwogICAgIH0KQEAgLTQ3MCwxNSArMTExLDE5IEBAIHZvaWQg
VGV4dEluZGljYXRvcldpbmRvdzo6c2V0VGV4dEluZGljYXRvcihSZWY8VGV4dEluZGljYXRvcj4g
dGV4dEluZGljYXRvciwgQ0dSCiAgICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRPcGFxdWU6
Tk9dOwogICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgc2V0SWdub3Jlc01vdXNlRXZlbnRzOllF
U107CiAKLSAgICBtX3RleHRJbmRpY2F0b3JWaWV3ID0gYWRvcHROUyhbW1dlYlRleHRJbmRpY2F0
b3JWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgW21fdGV4dEluZGlj
YXRvcldpbmRvdyBmcmFtZV0uc2l6ZS53aWR0aCwgW21fdGV4dEluZGljYXRvcldpbmRvdyBmcmFt
ZV0uc2l6ZS5oZWlnaHQpCisgICAgTlNSZWN0IGZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBbbV90
ZXh0SW5kaWNhdG9yV2luZG93IGZyYW1lXS5zaXplLndpZHRoLCBbbV90ZXh0SW5kaWNhdG9yV2lu
ZG93IGZyYW1lXS5zaXplLmhlaWdodCk7CisgICAgbV90ZXh0SW5kaWNhdG9yTGF5ZXIgPSBhZG9w
dE5TKFtbV2ViVGV4dEluZGljYXRvckxheWVyIGFsbG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lCiAg
ICAgICAgIHRleHRJbmRpY2F0b3I6Km1fdGV4dEluZGljYXRvciBtYXJnaW46TlNNYWtlU2l6ZSho
b3Jpem9udGFsTWFyZ2luLCB2ZXJ0aWNhbE1hcmdpbikgb2Zmc2V0OmZyYWN0aW9uYWxUZXh0T2Zm
c2V0XSk7CisgICAgbV90ZXh0SW5kaWNhdG9yVmlldyA9IGFkb3B0TlMoW1tOU1ZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6ZnJhbWVdKTsKKyAgICBbbV90ZXh0SW5kaWNhdG9yVmlldyBzZXRMYXll
cjptX3RleHRJbmRpY2F0b3JMYXllci5nZXQoKV07CisgICAgW21fdGV4dEluZGljYXRvclZpZXcg
c2V0V2FudHNMYXllcjpZRVNdOwogICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgc2V0Q29udGVu
dFZpZXc6bV90ZXh0SW5kaWNhdG9yVmlldy5nZXQoKV07CiAKICAgICBbW21fdGFyZ2V0VmlldyB3
aW5kb3ddIGFkZENoaWxkV2luZG93Om1fdGV4dEluZGljYXRvcldpbmRvdy5nZXQoKSBvcmRlcmVk
Ok5TV2luZG93QWJvdmVdOwogICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgc2V0UmVsZWFzZWRX
aGVuQ2xvc2VkOk5PXTsKIAogICAgIGlmIChtX3RleHRJbmRpY2F0b3ItPnByZXNlbnRhdGlvblRy
YW5zaXRpb24oKSAhPSBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSkK
LSAgICAgICAgW21fdGV4dEluZGljYXRvclZpZXcgcHJlc2VudF07CisgICAgICAgIFttX3RleHRJ
bmRpY2F0b3JMYXllciBwcmVzZW50XTsKIAogICAgIGlmIChsaWZldGltZSA9PSBUZXh0SW5kaWNh
dG9yV2luZG93TGlmZXRpbWU6OlRlbXBvcmFyeSkKICAgICAgICAgbV90ZW1wb3JhcnlUZXh0SW5k
aWNhdG9yVGltZXIuc3RhcnRPbmVTaG90KDFfcyAqIHRpbWVCZWZvcmVGYWRlU3RhcnRzKTsKQEAg
LTQ4OSw3ICsxMzQsNyBAQCB2b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6OmNsb3NlV2luZG93KCkK
ICAgICBpZiAoIW1fdGV4dEluZGljYXRvcldpbmRvdykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKFttX3RleHRJbmRpY2F0b3JWaWV3IGlzRmFkaW5nT3V0XSkKKyAgICBpZiAoW21fdGV4dElu
ZGljYXRvckxheWVyIGlzRmFkaW5nT3V0XSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV90ZW1w
b3JhcnlUZXh0SW5kaWNhdG9yVGltZXIuc3RvcCgpOwpAQCAtNTAxLDkgKzE0Niw5IEBAIHZvaWQg
VGV4dEluZGljYXRvcldpbmRvdzo6Y2xvc2VXaW5kb3coKQogCiB2b2lkIFRleHRJbmRpY2F0b3JX
aW5kb3c6OnN0YXJ0RmFkZU91dCgpCiB7Ci0gICAgW21fdGV4dEluZGljYXRvclZpZXcgc2V0RmFk
aW5nT3V0OllFU107CisgICAgW21fdGV4dEluZGljYXRvckxheWVyIHNldEZhZGluZ091dDpZRVNd
OwogICAgIFJldGFpblB0cjxOU1dpbmRvdz4gaW5kaWNhdG9yV2luZG93ID0gbV90ZXh0SW5kaWNh
dG9yV2luZG93OwotICAgIFttX3RleHRJbmRpY2F0b3JWaWV3IGhpZGVXaXRoQ29tcGxldGlvbkhh
bmRsZXI6W2luZGljYXRvcldpbmRvd10geworICAgIFttX3RleHRJbmRpY2F0b3JMYXllciBoaWRl
V2l0aENvbXBsZXRpb25IYW5kbGVyOltpbmRpY2F0b3JXaW5kb3ddIHsKICAgICAgICAgW1tpbmRp
Y2F0b3JXaW5kb3cgcGFyZW50V2luZG93XSByZW1vdmVDaGlsZFdpbmRvdzppbmRpY2F0b3JXaW5k
b3cuZ2V0KCldOwogICAgICAgICBbaW5kaWNhdG9yV2luZG93IGNsb3NlXTsKICAgICB9XTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC54Y3dvcmtzcGFjZS94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL0FsbCBT
b3VyY2UueGNzY2hlbWUgYi9XZWJLaXQueGN3b3Jrc3BhY2UveGNzaGFyZWRkYXRhL3hjc2NoZW1l
cy9BbGwgU291cmNlLnhjc2NoZW1lCmluZGV4IDUwNjYyNzUwMTc2MTNhN2Q4OGJlNDFjMjFjMjBk
MjdkOTcxOThkZmEuLjgyOThmMDUxYWE3ZjlhZDMyZjRiMDc5OTU0ZTA5NjgxMzBkODMyYmYgMTAw
NjQ0Ci0tLSBhL1dlYktpdC54Y3dvcmtzcGFjZS94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL0FsbCBT
b3VyY2UueGNzY2hlbWUJCisrKyBiL1dlYktpdC54Y3dvcmtzcGFjZS94Y3NoYXJlZGRhdGEveGNz
Y2hlbWVzL0FsbCBTb3VyY2UueGNzY2hlbWUJCkBAIC0xMjcsOCArMTI3LDggQEAKICAgICAgICAg
ICAgIDxCdWlsZGFibGVSZWZlcmVuY2UKICAgICAgICAgICAgICAgIEJ1aWxkYWJsZUlkZW50aWZp
ZXIgPSAicHJpbWFyeSIKICAgICAgICAgICAgICAgIEJsdWVwcmludElkZW50aWZpZXIgPSAiMUE1
MERCMzgxMTBBM0MxMzAwMEQzRkU1IgotICAgICAgICAgICAgICAgQnVpbGRhYmxlTmFtZSA9ICJB
bGwiCi0gICAgICAgICAgICAgICBCbHVlcHJpbnROYW1lID0gIkFsbCIKKyAgICAgICAgICAgICAg
IEJ1aWxkYWJsZU5hbWUgPSAiRnJhbWV3b3JrICZhbXA7IFhQQyBTZXJ2aWNlcyIKKyAgICAgICAg
ICAgICAgIEJsdWVwcmludE5hbWUgPSAiRnJhbWV3b3JrICZhbXA7IFhQQyBTZXJ2aWNlcyIKICAg
ICAgICAgICAgICAgIFJlZmVyZW5jZWRDb250YWluZXIgPSAiY29udGFpbmVyOlNvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvaiI+CiAgICAgICAgICAgICA8L0J1aWxkYWJsZVJlZmVyZW5jZT4K
ICAgICAgICAgIDwvQnVpbGRBY3Rpb25FbnRyeT4K
</data>

          </attachment>
      

    </bug>

</bugzilla>