<?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>190345</bug_id>
          
          <creation_ts>2018-10-08 00:15:09 -0700</creation_ts>
          <short_desc>Adjust keyboard scrolling animator to be a bit more physical</short_desc>
          <delta_ts>2018-11-07 16:58:07 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          <blocked>191408</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1467001</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-10-08 00:15:09 -0700</bug_when>
    <thetext>Adjust keyboard scrolling animator to be a bit more physical</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467002</commentid>
    <comment_count>1</comment_count>
      <attachid>351763</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-10-08 00:20:52 -0700</bug_when>
    <thetext>Created attachment 351763
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467003</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-10-08 00:21:55 -0700</bug_when>
    <thetext>I&apos;ll flesh out the changelog a bit. Also I think maybe we can unit test the class independent of a scroll view, which would be nice, so I&apos;ll try that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467121</commentid>
    <comment_count>3</comment_count>
      <attachid>351794</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-10-08 11:29:18 -0700</bug_when>
    <thetext>Created attachment 351794
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467122</commentid>
    <comment_count>4</comment_count>
      <attachid>351795</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-10-08 11:30:03 -0700</bug_when>
    <thetext>Created attachment 351795
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467130</commentid>
    <comment_count>5</comment_count>
      <attachid>351795</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-10-08 11:44:33 -0700</bug_when>
    <thetext>Comment on attachment 351795
Patch

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

&gt; Source/WebKit/ChangeLog:3
&gt; +        Adjust keyboard scrolling animator to be a bit more physical

&quot;a bit more&quot;

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:3854
&gt; +        return self.bounds.size.height * selfScale;

Wouldn&apos;t that be the content view height?

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:3858
&gt; +        return WebCore::Scrollbar::pixelsPerLineStep() * selfScale;

Maybe get this from the content view too?

&gt; Source/WebKit/UIProcess/ios/WKKeyboardScrollingAnimator.mm:46
&gt; +    WebCore::FloatSize offset; // Points per increment.
&gt; +    WebCore::FloatSize maximumVelocity; // Points per second.

The comments indicate that the members could be named better (or maybe some typedef types)

&gt; Source/WebKit/UIProcess/ios/WKKeyboardScrollingAnimator.mm:142
&gt; +        return WebCore::FloatSize(0, -1);

return { 0., -1. } ?

&gt; Source/WebKit/UIProcess/ios/WKKeyboardScrollingAnimator.mm:292
&gt; +        _velocity = WebCore::FloatSize();

= { }

&gt; Source/WebKit/UIProcess/ios/WKKeyboardScrollingAnimator.mm:380
&gt; +    _velocity = WebCore::FloatSize();

= { }

&gt; Source/WebKit/UIProcess/ios/WKKeyboardScrollingAnimator.mm:391
&gt; +        WebCore::RectEdges&lt;bool&gt; scrollableDirections = [_scrollable scrollableDirectionsFromOffset:_currentPosition];

auto

&gt; Source/WebKit/UIProcess/ios/WKKeyboardScrollingAnimator.mm:421
&gt; +    // Compute the spring&apos;s force, and apply it in allowed directions.
&gt; +    // F_spring = -k * x - c * v
&gt; +    auto springForce = - displacement.scaled(self.parameters.springStiffness) - _velocity.scaled(self.parameters.springDamping);
&gt; +    force += springForce * axesToApplySpring;

I kinda feel like all the spring logic should be packaged up in a separate helper class.

&gt; Source/WebKit/UIProcess/ios/WKKeyboardScrollingAnimator.mm:435
&gt; +        _velocity = WebCore::FloatSize();

= { }

&gt; Source/WebKit/UIProcess/ios/WKKeyboardScrollingAnimator.mm:580
&gt; +    return CGSizeMake(scrollView._horizontalVelocity * 1000, scrollView._verticalVelocity * 1000);

Please document the * 1000</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467133</commentid>
    <comment_count>6</comment_count>
      <attachid>351799</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-10-08 12:03:33 -0700</bug_when>
    <thetext>Created attachment 351799
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467153</commentid>
    <comment_count>7</comment_count>
      <attachid>351806</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-10-08 12:49:28 -0700</bug_when>
    <thetext>Created attachment 351806
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467173</commentid>
    <comment_count>8</comment_count>
      <attachid>351806</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-08 13:18:33 -0700</bug_when>
    <thetext>Comment on attachment 351806
Patch

Clearing flags on attachment: 351806

Committed r236935: &lt;https://trac.webkit.org/changeset/236935&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467174</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-08 13:18:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467175</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-08 13:19:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/45101935&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476338</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-11-07 16:58:07 -0800</bug_when>
    <thetext>(In reply to WebKit Commit Bot from comment #8)
&gt; Comment on attachment 351806 [details]
&gt; Patch
&gt; 
&gt; Clearing flags on attachment: 351806
&gt; 
&gt; Committed r236935: &lt;https://trac.webkit.org/changeset/236935&gt;

This regressed key repeats for arrow keys on iOS device. See bug #191408 for more details.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351763</attachid>
            <date>2018-10-08 00:20:52 -0700</date>
            <delta_ts>2018-10-08 11:29:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190345-20181008002051.patch</filename>
            <type>text/plain</type>
            <size>40691</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2NjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZjMGRhNTUyYmIwYmNkOGMz
MzNhMzgxNWU1ZGRjNWVmN2E1OTVjZWQuLmRhYjhmMzc4ODhkOTFkMWIxMmZjMmVjY2VhZDU4MDFk
NjQzNjYxMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTgtMTAtMDggIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRqdXN0IGtleWJvYXJk
IHNjcm9sbGluZyBhbmltYXRvciB0byBiZSBhIGJpdCBtb3JlIHBoeXNpY2FsCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTAzNDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgV0tLZXlib2Fy
ZFNjcm9sbFZpZXdBbmltYXRvciwgd2hpY2ggd3JhcHMgV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yCisgICAgICAgIGFuZCBwcm92aWRlcyBhIHJlYXNvbmFibGUgc2V0IG9mIGRlZmF1bHQgYmVo
YXZpb3JzIGZvciBVSVNjcm9sbFZpZXcuCisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAg
b24gdGhlIHdheSB0byBXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IKKyAgICAgICAgYmVpbmcg
cGxhdGZvcm0tIGFuZCB0b29sa2l0LWFnbm9zdGljLCBhbmQgaGVscHMgYXZvaWQgYWRkaW5nIGEg
d2hvbGUKKyAgICAgICAgYnVuY2ggb2YgY29kZSB0byBXS0NvbnRlbnRWaWV3LgorCisgICAgICAg
IEFkb3B0IFVJS2l0J3Mgc2Nyb2xsLXRvLXRvcCBhbmltYXRpb24gY3VydmUgZm9yIHdob2xlLWRv
Y3VtZW50IHNjcm9sbHMuCisKKyAgICAgICAgQWRqdXN0IFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvcidzIHBoeXNpY3M7IGl0IG5vdyBzaW11bGF0ZXMgYSBzcHJpbmcKKyAgICAgICAgYXR0YWNo
ZWQgdG8gdGhlIHBhZ2Ugd2hlbiBkZWNlbGVyYXRpbmcuIFdoZW4gYSBrZXkgaXMgcHJlc3NlZCwg
aXQgYXBwbGllcworICAgICAgICBhIGNvbnN0YW50IGZvcmNlIHRvIHRoZSBwYWdlICh1cCB0byBz
b21lIG1heGltdW0gdmVsb2NpdHkpLiBXaGVuIHJlbGVhc2VkLAorICAgICAgICB0aGUgc3ByaW5n
IGNhdXNlcyB0aGUgcGFnZSB0byBkZWNlbGVyYXRlIHNtb290aGx5LgorCisgICAgICAgIEFkZCBy
dWJiZXItYmFuZGluZyB0byBrZXlib2FyZCBzY3JvbGxpbmcsIGJhc2VkIG9uIHRoZSBzYW1lIHNw
cmluZyB0aGF0CisgICAgICAgIGRlY2VsZXJhdGVzIHRoZSBwYWdlLgorCisgICAgICAgIFJlbW92
ZSB0aGUgaW5pdGlhbCBib3VuY2Ugb24ga2V5ZG93biBiZWZvcmUgc3RhcnRpbmcgdGhlIHNtb290
aCBzY3JvbGwuCisKKyAgICAgICAgUmVtb3ZlIGFycm93IGtleSBjb21tYW5kcyBmcm9tIFdLQ29u
dGVudFZpZXc7IHRoaXMgYXZvaWRzIGRvdWJsZS1wcm9jZXNzaW5nCisgICAgICAgIGluY29taW5n
IGFycm93IGtleSBldmVudHMsIG1ha2VzIHRoZSBldmVudCBzdHJlYW0gbWFrZSBtb3JlIHNlbnNl
LCBhbmQgd2FzCisgICAgICAgIGVudGlyZWx5IHVubmVjZXNzYXJ5LgorCisgICAgICAgICogUGxh
dGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Njcm9sbEJ5Q29udGVudE9mZnNl
dDphbmltYXRlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXR1cEludGVyYWN0aW9uXSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2Nyb2xsVmlld1dpbGxTdGFydFBhbk9yUGluY2hH
ZXN0dXJlXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2FuUGVyZm9ybUFjdGlvbkZvcldl
YlZpZXc6d2l0aFNlbmRlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBrZXlDb21tYW5k
c10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGlzU2Nyb2xsYWJsZUZvcktleWJvYXJkU2Ny
b2xsVmlld0FuaW1hdG9yOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGtleWJvYXJkU2Ny
b2xsVmlld0FuaW1hdG9yOmRpc3RhbmNlRm9ySW5jcmVtZW50Ol0pOgorICAgICAgICAoLVtXS0Nv
bnRlbnRWaWV3IGtleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yV2lsbFNjcm9sbDpdKToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBfYXJyb3dLZXlGb3JXZWJWaWV3Ol0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IGlzS2V5Ym9hcmRTY3JvbGxhYmxlXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgZGlzdGFuY2VGb3JTY3JvbGxpbmdJbmNyZW1lbnQ6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2Nyb2xsQnlDb250ZW50T2Zmc2V0
OmFuaW1hdGVkOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJk
U2Nyb2xsaW5nQW5pbWF0b3IubW06CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvciBpbml0V2l0aFNjcm9sbGFibGU6XSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvciBwYXJhbWV0ZXJzXSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdB
bmltYXRvciBpbnZhbGlkYXRlXSk6CisgICAgICAgICh1bml0VmVjdG9yKToKKyAgICAgICAgKHBl
cnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IpOgorICAgICAgICAoYm94U2lkZSk6CisgICAg
ICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciBrZXlib2FyZFNjcm9sbEZvckV2ZW50
Ol0pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgYmVnaW5XaXRoRXZl
bnQ6XSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciBoYW5kbGVLZXlF
dmVudDpdKToKKyAgICAgICAgKGZhcnRoZXN0UG9pbnRJbkRpcmVjdGlvbik6CisgICAgICAgICgt
W1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciBzdG9wQW5pbWF0ZWRTY3JvbGxdKToKKyAgICAg
ICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIHN0YXJ0RGlzcGxheUxpbmtJZk5lZWRl
ZF0pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Igc3RvcERpc3BsYXlM
aW5rXSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciB3aWxsU3RhcnRJ
bnRlcmFjdGl2ZVNjcm9sbF0pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IgZGlzcGxheUxpbmtGaXJlZDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvciBpbml0XSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
aW5pdFdpdGhTY3JvbGxWaWV3Ol0pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0Fu
aW1hdG9yIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRv
ciBpbnZhbGlkYXRlXSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
c2V0RGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
d2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGxdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9s
bFZpZXdBbmltYXRvciBiZWdpbldpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNj
cm9sbFZpZXdBbmltYXRvciBoYW5kbGVLZXlFdmVudDpdKToKKyAgICAgICAgKC1bV0tLZXlib2Fy
ZFNjcm9sbFZpZXdBbmltYXRvciBpc0tleWJvYXJkU2Nyb2xsYWJsZV0pOgorICAgICAgICAoLVtX
S0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIGRpc3RhbmNlRm9ySW5jcmVtZW50Ol0pOgorICAg
ICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIHNjcm9sbFRvQ29udGVudE9mZnNl
dDphbmltYXRlZDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciBz
Y3JvbGxXaXRoU2Nyb2xsVG9FeHRlbnRBbmltYXRpb25UbzpdKToKKyAgICAgICAgKC1bV0tLZXli
b2FyZFNjcm9sbFZpZXdBbmltYXRvciBjb250ZW50T2Zmc2V0XSk6CisgICAgICAgICgtW1dLS2V5
Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgYm91bmRlZENvbnRlbnRPZmZzZXQ6XSk6CisgICAgICAg
ICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgaW50ZXJhY3RpdmVTY3JvbGxWZWxvY2l0
eV0pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIHNjcm9sbGFibGVE
aXJlY3Rpb25zRnJvbU9mZnNldDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvciBydWJiZXJiYW5kYWJsZURpcmVjdGlvbnNdKToKKyAgICAgICAgKC1bV0tLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yIF9zY3JvbGxPZmZzZXRGb3JFdmVudDpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIHN0YXJ0QW5pbWF0ZWRTY3JvbGxd
KTogRGVsZXRlZC4KKwogMjAxOC0wOS0yOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIzNjYzMS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKaW5kZXggYWFlY2EwZWZjYjUz
ODQzOThmODE5Y2NmZWFkNTg2N2IxNzIzNzQxMC4uMjU3ZTg4MDEwZWUxODBmZmY3OGMxN2M5Yzc1
Y2I3OTJjMjE4ZTJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9z
L1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJ
LmgKQEAgLTEwMjIsNiArMTAyMiwxMCBAQCB0eXBlZGVmIE5TSW50ZWdlciBVSUNvbXBvc2l0aW5n
TW9kZTsKIC0gKHZvaWQpX2FkanVzdEZvckF1dG9tYXRpY0tleWJvYXJkSW5mbzooTlNEaWN0aW9u
YXJ5ICopaW5mbyBhbmltYXRlZDooQk9PTClhbmltYXRlZCBsYXN0QWRqdXN0bWVudDooQ0dGbG9h
dCopbGFzdEFkanVzdG1lbnQ7CiAtIChCT09MKV9pc1Njcm9sbGluZ1RvVG9wOwogLSAoQ0dQb2lu
dClfYW5pbWF0ZWRUYXJnZXRPZmZzZXQ7CistIChCT09MKV9jYW5TY3JvbGxYOworLSAoQk9PTClf
Y2FuU2Nyb2xsWTsKKy0gKHZvaWQpX3NldENvbnRlbnRPZmZzZXRXaXRoRGVjZWxlcmF0aW9uQW5p
bWF0aW9uOihDR1BvaW50KWNvbnRlbnRPZmZzZXQ7CistIChDR1BvaW50KV9hZGp1c3RlZENvbnRl
bnRPZmZzZXRGb3JDb250ZW50T2Zmc2V0OihDR1BvaW50KWNvbnRlbnRPZmZzZXQ7CiBAZW5kCiAK
IEBpbnRlcmZhY2UgVUlQZXJpcGhlcmFsSG9zdCAoSVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggODc5ZjkzMjU5YzZkMzE5MmIzNjQ2
NmNlNmFiYjUwZDUzZjVhNjQxYy4uNDM5MWNhYjM0MzA1ODY4OGFiYzMzYTllOGNjYzNhMThiZGFj
ZTQ0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tCkBAIC0yMTI5LDI0ICsyMTI5LDYgQEAgLSAoQk9PTClfc2Nyb2xsVG9SZWN0OihXZWJDb3Jl
OjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCBvcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotLSAodm9pZClfc2Nyb2xsQnlDb250ZW50T2Zmc2V0OihXZWJDb3Jl
OjpGbG9hdFBvaW50KWNvbnRlbnRPZmZzZXREZWx0YSBhbmltYXRlZDooQk9PTClhbmltYXRlZAot
ewotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgc2NhbGVkT2Zmc2V0RGVsdGEgPSBjb250ZW50T2Zm
c2V0RGVsdGE7Ci0gICAgQ0dGbG9hdCB6b29tU2NhbGUgPSBjb250ZW50Wm9vbVNjYWxlKHNlbGYp
OwotICAgIHNjYWxlZE9mZnNldERlbHRhLnNjYWxlKHpvb21TY2FsZSk7Ci0KLSAgICBDR1BvaW50
IGN1cnJlbnRPZmZzZXQgPSBbX3Njcm9sbFZpZXcgX2lzQW5pbWF0aW5nU2Nyb2xsXSA/IFtfc2Ny
b2xsVmlldyBfYW5pbWF0ZWRUYXJnZXRPZmZzZXRdIDogW19zY3JvbGxWaWV3IGNvbnRlbnRPZmZz
ZXRdOwotICAgIENHUG9pbnQgYm91bmRlZE9mZnNldCA9IGNvbnRlbnRPZmZzZXRCb3VuZGVkSW5W
YWxpZFJhbmdlKF9zY3JvbGxWaWV3LmdldCgpLCBjdXJyZW50T2Zmc2V0ICsgc2NhbGVkT2Zmc2V0
RGVsdGEpOwotCi0gICAgaWYgKENHUG9pbnRFcXVhbFRvUG9pbnQoYm91bmRlZE9mZnNldCwgY3Vy
cmVudE9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLSAgICBbX2NvbnRlbnRWaWV3IHdpbGxTdGFy
dFpvb21PclNjcm9sbF07Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJl
YW0gPDwgIl9zY3JvbGxCeUNvbnRlbnRPZmZzZXQ6IHNjcm9sbGluZyB0byAiIDw8IFdlYkNvcmU6
OkZsb2F0UG9pbnQoYm91bmRlZE9mZnNldCkpOwotCi0gICAgW19zY3JvbGxWaWV3IHNldENvbnRl
bnRPZmZzZXQ6Ym91bmRlZE9mZnNldCBhbmltYXRlZDphbmltYXRlZF07Ci19Ci0KIC0gKHZvaWQp
X3pvb21PdXRXaXRoT3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBhbmltYXRlZDoo
Qk9PTClhbmltYXRlZAogewogICAgIFtzZWxmIF96b29tVG9Qb2ludDpvcmlnaW4gYXRTY2FsZTpb
X3Njcm9sbFZpZXcgbWluaW11bVpvb21TY2FsZV0gYW5pbWF0ZWQ6YW5pbWF0ZWRdOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFs
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwu
aAppbmRleCBhMWEwNDU2MGMyYjA3N2Y2OTQwN2FkOGVmZTA0ZTM2N2FiODgzMWU5Li43MTg5Y2Ew
ZTZmYTczNGQwNTZkNTAyNjI5OWE1YWM2NGViN2UxYzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaApAQCAtOTcsNyAr
OTcsNiBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwogCiAtICh2b2lkKV9zY3JvbGxUb0NvbnRlbnRTY3Jv
bGxQb3NpdGlvbjooV2ViQ29yZTo6RmxvYXRQb2ludClzY3JvbGxQb3NpdGlvbiBzY3JvbGxPcmln
aW46KFdlYkNvcmU6OkludFBvaW50KXNjcm9sbE9yaWdpbjsKIC0gKEJPT0wpX3Njcm9sbFRvUmVj
dDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qgb3JpZ2luOihXZWJDb3JlOjpGbG9hdFBv
aW50KW9yaWdpbiBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0KW1pbmltdW1TY3JvbGxEaXN0
YW5jZTsKLS0gKHZvaWQpX3Njcm9sbEJ5Q29udGVudE9mZnNldDooV2ViQ29yZTo6RmxvYXRQb2lu
dClvZmZzZXQgYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQ7CiAtICh2b2lkKV96b29tVG9Gb2N1c1Jl
Y3Q6KFdlYkNvcmU6OkZsb2F0UmVjdClmb2N1c2VkRWxlbWVudFJlY3Qgc2VsZWN0aW9uUmVjdDoo
V2ViQ29yZTo6RmxvYXRSZWN0KXNlbGVjdGlvblJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMgaW5z
aWRlRml4ZWQ6KEJPT0wpaW5zaWRlRml4ZWQgZm9udFNpemU6KGZsb2F0KWZvbnRTaXplIG1pbmlt
dW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVt
U2NhbGUgYWxsb3dTY2FsaW5nOihCT09MKWFsbG93U2NhbGluZyBmb3JjZVNjcm9sbDooQk9PTClm
b3JjZVNjcm9sbDsKIC0gKEJPT0wpX3pvb21Ub1JlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl0YXJn
ZXRSZWN0IHdpdGhPcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2luIGZpdEVudGlyZVJl
Y3Q6KEJPT0wpZml0RW50aXJlUmVjdCBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5pbXVtU2NhbGUg
bWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlIG1pbmltdW1TY3JvbGxEaXN0YW5jZToo
ZmxvYXQpbWluaW11bVNjcm9sbERpc3RhbmNlOwogLSAodm9pZClfem9vbU91dFdpdGhPcmlnaW46
KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2luIGFuaW1hdGVkOihCT09MKWFuaW1hdGVkOwpAQCAt
MTM1LDcgKzEzNCw2IEBAIHN0cnVjdCBQcmludEluZm87CiAtICh2b2lkKV9kaWRDaGFuZ2VFZGl0
b3JTdGF0ZTsKIAogLSAodm9pZClfYWRkU2hvcnRjdXQ6KGlkKXNlbmRlcjsKLS0gKHZvaWQpX2Fy
cm93S2V5OihpZClzZW5kZXI7CiAtICh2b2lkKV9kZWZpbmU6KGlkKXNlbmRlcjsKIC0gKHZvaWQp
X2xvb2t1cDooaWQpc2VuZGVyOwogLSAodm9pZClfc2hhcmU6KGlkKXNlbmRlcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
aAppbmRleCBhMjM5ZGU5ZGM1ZTFlYzA4NTQ2ZWQzMWVhMzcyZDBkYzUxNDQ3YzUwLi4xY2MwOWRj
NGZhNTkxNGQzMTFlZGEyN2Y4YWQyNmZiMThkMWUyYzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCkBAIC0xMDYs
NyArMTA2LDYgQEAgdHlwZWRlZiBzdGQ6OnBhaXI8V2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0
aW9uUmVxdWVzdCwgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkMKIAogI2RlZmluZSBGT1JfRUFDSF9X
S0NPTlRFTlRWSUVXX0FDVElPTihNKSBcCiAgICAgTShfYWRkU2hvcnRjdXQpIFwKLSAgICBNKF9h
cnJvd0tleSkgXAogICAgIE0oX2RlZmluZSkgXAogICAgIE0oX2xvb2t1cCkgXAogICAgIE0oX3By
b21wdEZvclJlcGxhY2UpIFwKQEAgLTIzNSw3ICsyMzQsNyBAQCBzdHJ1Y3QgV0tBdXRvQ29ycmVj
dGlvbkRhdGEgewogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OklucHV0Vmlld1Vw
ZGF0ZURlZmVycmVyPiBfaW5wdXRWaWV3VXBkYXRlRGVmZXJyZXI7CiAKLSAgICBSZXRhaW5QdHI8
V0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yPiBfa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjsK
KyAgICBSZXRhaW5QdHI8V0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvcj4gX2tleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0b3I7CiAKICAgICBCT09MIF9pc0VkaXRhYmxlOwogICAgIEJPT0wgX3Nob3dp
bmdUZXh0U3R5bGVPcHRpb25zOwpAQCAtMjgzLDExICsyODIsMTAgQEAgc3RydWN0IFdLQXV0b0Nv
cnJlY3Rpb25EYXRhIHsKIAogQGVuZAogCi1AaW50ZXJmYWNlIFdLQ29udGVudFZpZXcgKFdLSW50
ZXJhY3Rpb24pIDxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJVGV4dEF1dG9zY3JvbGxp
bmcsIFVJVGV4dElucHV0TXVsdGlEb2N1bWVudCwgVUlUZXh0SW5wdXRQcml2YXRlLCBVSVdlYkZv
cm1BY2Nlc3NvcnlEZWxlZ2F0ZSwgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVs
ZWdhdGUsIFVJV0tJbnRlcmFjdGlvblZpZXdQcm90b2NvbCwgV0tBY3Rpb25TaGVldEFzc2lzdGFu
dERlbGVnYXRlLCBXS0ZpbGVVcGxvYWRQYW5lbERlbGVnYXRlCitAaW50ZXJmYWNlIFdLQ29udGVu
dFZpZXcgKFdLSW50ZXJhY3Rpb24pIDxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJVGV4
dEF1dG9zY3JvbGxpbmcsIFVJVGV4dElucHV0TXVsdGlEb2N1bWVudCwgVUlUZXh0SW5wdXRQcml2
YXRlLCBVSVdlYkZvcm1BY2Nlc3NvcnlEZWxlZ2F0ZSwgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVS
ZWNvZ25pemVyRGVsZWdhdGUsIFVJV0tJbnRlcmFjdGlvblZpZXdQcm90b2NvbCwgV0tBY3Rpb25T
aGVldEFzc2lzdGFudERlbGVnYXRlLCBXS0ZpbGVVcGxvYWRQYW5lbERlbGVnYXRlLCBXS0tleWJv
YXJkU2Nyb2xsVmlld0FuaW1hdG9yRGVsZWdhdGUKICNpZiAhUExBVEZPUk0oV0FUQ0hPUykgJiYg
IVBMQVRGT1JNKEFQUExFVFYpCiAgICAgLCBXS1NoYXJlU2hlZXREZWxlZ2F0ZQogI2VuZGlmCi0g
ICAgLCBXS0tleWJvYXJkU2Nyb2xsYWJsZQogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQog
ICAgICwgVUlEcmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZSwgVUlEcm9wSW50ZXJhY3Rpb25EZWxlZ2F0
ZQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCA3ZTY0YTVlZTJjZjFiYjhkYmQ3OTliYzg0NmY3
M2E0MTM1YTBhNzZkLi5mZGM2MjI5MzgzNzlhMjBlMDE1NzQ5ZTVjNjEzMDgyZGNmNTFlNmQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24ubW0KQEAgLTEyMSw3ICsxMjEsNyBAQAogI2ltcG9ydCA8V2ViS2l0QWRkaXRp
b25zL1dLUGxhdGZvcm1GaWxlVXBsb2FkUGFuZWwubW0+CiAjZW5kaWYKIAotQGludGVyZmFjZSBV
SUV2ZW50KFVJRXZlbnRJbnRlcm5hbCkKK0BpbnRlcmZhY2UgVUlFdmVudCAoVUlFdmVudEludGVy
bmFsKQogQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVUlLZXlib2FyZElucHV0RmxhZ3Mg
X2lucHV0RmxhZ3M7CiBAZW5kCiAKQEAgLTYzOCw3ICs2MzgsOCBAQCAtICh2b2lkKXNldHVwSW50
ZXJhY3Rpb24KICAgICAgICAgW3NlbGYuc3VwZXJ2aWV3IGFkZFN1YnZpZXc6X2ludGVyYWN0aW9u
Vmlld3NDb250YWluZXJWaWV3LmdldCgpXTsKICAgICB9CiAKLSAgICBfa2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvciA9IGFkb3B0TlMoW1tXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgYWxsb2Nd
IGluaXRXaXRoU2Nyb2xsYWJsZTpzZWxmXSk7CisgICAgX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IgPSBhZG9wdE5TKFtbV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciBhbGxvY10gaW5pdFdp
dGhTY3JvbGxWaWV3Ol93ZWJWaWV3LnNjcm9sbFZpZXddKTsKKyAgICBbX2tleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0b3Igc2V0RGVsZWdhdGU6c2VsZl07CiAKICAgICBbc2VsZi5sYXllciBhZGRPYnNl
cnZlcjpzZWxmIGZvcktleVBhdGg6QCJ0cmFuc2Zvcm0iIG9wdGlvbnM6TlNLZXlWYWx1ZU9ic2Vy
dmluZ09wdGlvbkluaXRpYWwgY29udGV4dDpuaWxdOwogCkBAIC0yMDY4LDYgKzIwNjksOCBAQCAt
ICh2b2lkKXNjcm9sbFZpZXdXaWxsU3RhcnRQYW5PclBpbmNoR2VzdHVyZQogewogICAgIF9wYWdl
LT5oaWRlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKIAorICAgIFtfa2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvciB3aWxsU3RhcnRJbnRlcmFjdGl2ZVNjcm9sbF07CisKICAgICBfY2FuU2VuZFRvdWNoRXZl
bnRzQXN5bmNocm9ub3VzbHkgPSBZRVM7CiB9CiAKQEAgLTIzMTEsMTAgKzIzMTQsNyBAQCAtIChC
T09MKWNhblBlcmZvcm1BY3Rpb246KFNFTClhY3Rpb24gd2l0aFNlbmRlcjooaWQpc2VuZGVyCiB9
CiAKIC0gKEJPT0wpY2FuUGVyZm9ybUFjdGlvbkZvcldlYlZpZXc6KFNFTClhY3Rpb24gd2l0aFNl
bmRlcjooaWQpc2VuZGVyCi17Ci0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX2Fycm93S2V5
OikpCi0gICAgICAgIHJldHVybiBbc2VsZiBpc0ZpcnN0UmVzcG9uZGVyXTsKLSAgICAgICAgCit7
ICAgICAgICAKICAgICBhdXRvIGVkaXRvclN0YXRlID0gX3BhZ2UtPmVkaXRvclN0YXRlKCk7CiAg
ICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX3Nob3dUZXh0U3R5bGVPcHRpb25zOikpCiAgICAg
ICAgIHJldHVybiBlZGl0b3JTdGF0ZS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSAmJiBlZGl0b3JT
dGF0ZS5zZWxlY3Rpb25Jc1JhbmdlICYmICFfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnM7CkBAIC0z
MDkwLDQ0ICszMDkwLDE0IEBAIC0gKHZvaWQpYWNjZXNzb3J5RG9uZQogCiAtIChOU0FycmF5ICop
a2V5Q29tbWFuZHMKIHsKLSAgICBzdGF0aWMgTlNBcnJheSogbm9uRWRpdGFibGVLZXlDb21tYW5k
cyA9IFtAWwotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlu
cHV0VXBBcnJvdyBtb2RpZmllckZsYWdzOjAgYWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0s
Ci0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0aElucHV0OlVJS2V5SW5wdXREb3du
QXJyb3cgbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAg
ICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0TGVmdEFycm93
IG1vZGlmaWVyRmxhZ3M6MCBhY3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBb
VUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dFJpZ2h0QXJyb3cgbW9k
aWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAgICAgIAotICAg
ICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0VXBBcnJvdyBt
b2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJDb21tYW5kIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93
S2V5OildLAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlu
cHV0RG93bkFycm93IG1vZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmllckNvbW1hbmQgYWN0aW9uOkBz
ZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAgICAgCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlD
b21tYW5kV2l0aElucHV0OlVJS2V5SW5wdXRVcEFycm93IG1vZGlmaWVyRmxhZ3M6VUlLZXlNb2Rp
ZmllclNoaWZ0IGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAgICAgIFtVSUtleUNv
bW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0RG93bkFycm93IG1vZGlmaWVyRmxh
Z3M6VUlLZXlNb2RpZmllclNoaWZ0IGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAg
ICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0TGVmdEFycm93
IG1vZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmllclNoaWZ0IGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93
S2V5OildLAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlu
cHV0UmlnaHRBcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJTaGlmdCBhY3Rpb246QHNl
bGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICAKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNv
bW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dFVwQXJyb3cgbW9kaWZpZXJGbGFnczpVSUtleU1vZGlm
aWVyQWx0ZXJuYXRlIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAgICAgIFtVSUtl
eUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0RG93bkFycm93IG1vZGlmaWVy
RmxhZ3M6VUlLZXlNb2RpZmllckFsdGVybmF0ZSBhY3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTop
XSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dExl
ZnRBcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJBbHRlcm5hdGUgYWN0aW9uOkBzZWxl
Y3RvcihfYXJyb3dLZXk6KV0sCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0aElu
cHV0OlVJS2V5SW5wdXRSaWdodEFycm93IG1vZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmllckFsdGVy
bmF0ZSBhY3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICAKLSAgICAgICBbVUlL
ZXlDb21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6QCIgIiBtb2RpZmllckZsYWdzOjAgYWN0aW9u
OkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5k
V2l0aElucHV0OkAiICIgbW9kaWZpZXJGbGFnczpVSUtleU1vZGlmaWVyU2hpZnQgYWN0aW9uOkBz
ZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAgICAgCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlD
b21tYW5kV2l0aElucHV0OlVJS2V5SW5wdXRQYWdlRG93biBtb2RpZmllckZsYWdzOjAgYWN0aW9u
OkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5k
V2l0aElucHV0OlVJS2V5SW5wdXRQYWdlRG93biBtb2RpZmllckZsYWdzOjAgYWN0aW9uOkBzZWxl
Y3RvcihfYXJyb3dLZXk6KV0sCi0gICAgXSByZXRhaW5dOworICAgIGlmICghX3BhZ2UtPmVkaXRv
clN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpCisgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBz
dGF0aWMgTlNBcnJheSogZWRpdGFibGVLZXlDb21tYW5kcyA9IFtAWwogICAgICAgIFtVSUtleUNv
bW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpAIlx0IiBtb2RpZmllckZsYWdzOjAgYWN0aW9uOkBz
ZWxlY3RvcihfbmV4dEFjY2Vzc29yeVRhYjopXSwKICAgICAgICBbVUlLZXlDb21tYW5kIGtleUNv
bW1hbmRXaXRoSW5wdXQ6QCJcdCIgbW9kaWZpZXJGbGFnczpVSUtleU1vZGlmaWVyU2hpZnQgYWN0
aW9uOkBzZWxlY3RvcihfcHJldkFjY2Vzc29yeVRhYjopXQogICAgIF0gcmV0YWluXTsKLSAgICAK
LSAgICByZXR1cm4gKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlKSA/IGVk
aXRhYmxlS2V5Q29tbWFuZHMgOiBub25FZGl0YWJsZUtleUNvbW1hbmRzOwotfQotCi0tICh2b2lk
KV9hcnJvd0tleUZvcldlYlZpZXc6KGlkKXNlbmRlcgotewotICAgIFVJS2V5Q29tbWFuZCogY29t
bWFuZCA9IHNlbmRlcjsKLSAgICBbc2VsZiBoYW5kbGVLZXlFdmVudDpjb21tYW5kLl90cmlnZ2Vy
aW5nRXZlbnRdOworICAgIHJldHVybiBlZGl0YWJsZUtleUNvbW1hbmRzOwogfQogCiAtICh2b2lk
KV9uZXh0QWNjZXNzb3J5VGFiOihpZClzZW5kZXIKQEAgLTM4NjQsNyArMzgzNCw3IEBAIC0gKEJP
T0wpX2ludGVycHJldEtleUV2ZW50Oig6OldlYkV2ZW50ICopZXZlbnQgaXNDaGFyRXZlbnQ6KEJP
T0wpaXNDaGFyRXZlbnQKICAgICByZXR1cm4gTk87CiB9CiAKLS0gKEJPT0wpaXNLZXlib2FyZFNj
cm9sbGFibGUKKy0gKEJPT0wpaXNTY3JvbGxhYmxlRm9yS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0
b3I6KFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgKilhbmltYXRvcgogewogICAgIGlmIChf
cGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkKICAgICAgICAgcmV0dXJuIE5P
OwpAQCAtMzg3NSwxMyArMzg0NSwxNSBAQCAtIChCT09MKWlzS2V5Ym9hcmRTY3JvbGxhYmxlCiAg
ICAgcmV0dXJuIFlFUzsKIH0KIAotLSAoQ0dGbG9hdClkaXN0YW5jZUZvclNjcm9sbGluZ0luY3Jl
bWVudDooU2Nyb2xsaW5nSW5jcmVtZW50KWluY3JlbWVudAorLSAoQ0dGbG9hdClrZXlib2FyZFNj
cm9sbFZpZXdBbmltYXRvcjooV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciAqKWFuaW1hdG9y
IGRpc3RhbmNlRm9ySW5jcmVtZW50OihTY3JvbGxpbmdJbmNyZW1lbnQpaW5jcmVtZW50CiB7Cisg
ICAgQ0dGbG9hdCBzZWxmU2NhbGUgPSBzZWxmLmxheWVyLnRyYW5zZm9ybS5tMTE7CisKICAgICBz
d2l0Y2ggKGluY3JlbWVudCkgewogICAgIGNhc2UgU2Nyb2xsaW5nSW5jcmVtZW50OjpEb2N1bWVu
dDoKLSAgICAgICAgcmV0dXJuIHNlbGYuYm91bmRzLnNpemUuaGVpZ2h0OworICAgICAgICByZXR1
cm4gc2VsZi5ib3VuZHMuc2l6ZS5oZWlnaHQgKiBzZWxmU2NhbGU7CiAgICAgY2FzZSBTY3JvbGxp
bmdJbmNyZW1lbnQ6OlBhZ2U6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpTY3JvbGxiYXI6OnBh
Z2VTdGVwKF9wYWdlLT51bm9ic2N1cmVkQ29udGVudFJlY3QoKS5oZWlnaHQoKSwgc2VsZi5ib3Vu
ZHMuc2l6ZS5oZWlnaHQpOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6U2Nyb2xsYmFyOjpwYWdl
U3RlcChfcGFnZS0+dW5vYnNjdXJlZENvbnRlbnRSZWN0KCkuaGVpZ2h0KCksIHNlbGYuYm91bmRz
LnNpemUuaGVpZ2h0KSAqIHNlbGZTY2FsZTsKICAgICBjYXNlIFNjcm9sbGluZ0luY3JlbWVudDo6
TGluZToKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0
ZXAoKTsKICAgICB9CkBAIC0zODg5LDkgKzM4NjEsOSBAQCAtIChDR0Zsb2F0KWRpc3RhbmNlRm9y
U2Nyb2xsaW5nSW5jcmVtZW50OihTY3JvbGxpbmdJbmNyZW1lbnQpaW5jcmVtZW50CiAgICAgcmV0
dXJuIDA7CiB9CiAKLS0gKHZvaWQpc2Nyb2xsQnlDb250ZW50T2Zmc2V0OihXZWJDb3JlOjpGbG9h
dFBvaW50KW9mZnNldCBhbmltYXRlZDooQk9PTClhbmltYXRlZAorLSAodm9pZClrZXlib2FyZFNj
cm9sbFZpZXdBbmltYXRvcldpbGxTY3JvbGw6KFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
KilhbmltYXRvcgogewotICAgIFtfd2ViVmlldyBfc2Nyb2xsQnlDb250ZW50T2Zmc2V0Om9mZnNl
dCBhbmltYXRlZDphbmltYXRlZF07CisgICAgW3NlbGYgd2lsbFN0YXJ0Wm9vbU9yU2Nyb2xsXTsK
IH0KIAogLSAodm9pZClleGVjdXRlRWRpdENvbW1hbmRXaXRoQ2FsbGJhY2s6KE5TU3RyaW5nICop
Y29tbWFuZE5hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0tl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaAppbmRleCBhNTM5YWQ3MjA5OTFlMGJlYjc2NjIw
OGMwMzNjNTgzZmI1NGRkZjJjLi4wYTdmMGUxMWE2NzM3MGQ4YjVjYTdiNmI3MTZiOWE0OWZjNjZh
NGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNj
cm9sbGluZ0FuaW1hdG9yLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLS2V5
Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oCkBAIC0zOSwyNiArMzksMzIgQEAgZW51bSBjbGFzcyBT
Y3JvbGxpbmdJbmNyZW1lbnQgOiB1aW50OF90IHsKIAogfQogCitAY2xhc3MgVUlTY3JvbGxWaWV3
OwogQGNsYXNzIFdlYkV2ZW50OwotQHByb3RvY29sIFdLS2V5Ym9hcmRTY3JvbGxhYmxlOworQHBy
b3RvY29sIFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3JEZWxlZ2F0ZTsKIAotQGludGVyZmFj
ZSBXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgOiBOU09iamVjdAorQGludGVyZmFjZSBXS0tl
eWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIDogTlNPYmplY3QKIAogLSAoaW5zdGFuY2V0eXBlKWlu
aXQgTlNfVU5BVkFJTEFCTEU7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxhYmxlOihp
ZCA8V0tLZXlib2FyZFNjcm9sbGFibGU+KXNjcm9sbGFibGU7CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhTY3JvbGxWaWV3OihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3OwogCiAtICh2b2lkKWlu
dmFsaWRhdGU7CiAKKy0gKHZvaWQpd2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGw7CisKIC0gKEJP
T0wpYmVnaW5XaXRoRXZlbnQ6KDo6V2ViRXZlbnQgKilldmVudDsKIC0gKEJPT0wpaGFuZGxlS2V5
RXZlbnQ6KDo6V2ViRXZlbnQgKilldmVudDsKIAorQHByb3BlcnR5IChub25hdG9taWMsIHdlYWsp
IGlkIDxXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yRGVsZWdhdGU+IGRlbGVnYXRlOworCiBA
ZW5kCiAKLUBwcm90b2NvbCBXS0tleWJvYXJkU2Nyb2xsYWJsZSA8TlNPYmplY3Q+Ci1AcmVxdWly
ZWQKLS0gKEJPT0wpaXNLZXlib2FyZFNjcm9sbGFibGU7Ci0tIChDR0Zsb2F0KWRpc3RhbmNlRm9y
U2Nyb2xsaW5nSW5jcmVtZW50OihXZWJLaXQ6OlNjcm9sbGluZ0luY3JlbWVudClpbmNyZW1lbnQ7
Ci0tICh2b2lkKXNjcm9sbEJ5Q29udGVudE9mZnNldDooV2ViQ29yZTo6RmxvYXRQb2ludClvZmZz
ZXQgYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQ7CitAcHJvdG9jb2wgV0tLZXlib2FyZFNjcm9sbFZp
ZXdBbmltYXRvckRlbGVnYXRlIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAoQk9PTClpc1Njcm9s
bGFibGVGb3JLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvcjooV0tLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvciAqKWFuaW1hdG9yOworLSAoQ0dGbG9hdClrZXlib2FyZFNjcm9sbFZpZXdBbmltYXRv
cjooV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciAqKWFuaW1hdG9yIGRpc3RhbmNlRm9ySW5j
cmVtZW50OihXZWJLaXQ6OlNjcm9sbGluZ0luY3JlbWVudClpbmNyZW1lbnQ7CistICh2b2lkKWtl
eWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yV2lsbFNjcm9sbDooV0tLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvciAqKWFuaW1hdG9yOworCiBAZW5kCiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGlu
Z0FuaW1hdG9yLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3Jv
bGxpbmdBbmltYXRvci5tbQppbmRleCBmNzc5NzA3ZWNiMGFlYWYzM2RiNjk3ZmY4YWRhYjhlYWFl
YzQ1ZTAwLi5jYzU1MmY2ZDEzOGI3MDMzMjY3MDI2MmE3NzNjYjRiMDY0ZWI2Mjk4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0b3IubW0KQEAgLTMwLDI3ICszMCw4MCBAQAogCiAjaW1wb3J0ICJVSUtpdFNQSS5o
IgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlY3RF
ZGdlcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJFdmVudC5oPgorI2ltcG9ydCA8V2ViS2l0L1VJ
S2l0U1BJLmg+CiAjaW1wb3J0IDxhbGdvcml0aG0+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1
YXJ0ekNvcmVTUEkuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9X
ZWFrT2JqQ1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotZW51bSBjbGFzcyBLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yU3RhdGUgOiB1aW50OF90IHsKLSAgICBXYWl0aW5nRm9yRmlyc3RF
dmVudCwKLSAgICBXYWl0aW5nRm9yUmVwZWF0LAotICAgIEFuaW1hdGluZworZW51bSBjbGFzcyBT
Y3JvbGxpbmdEaXJlY3Rpb24gOiB1aW50OF90IHsgVXAsIERvd24sIExlZnQsIFJpZ2h0IH07CisK
K3N0cnVjdCBLZXlib2FyZFNjcm9sbCB7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG9mZnNldDsg
Ly8gUG9pbnRzIHBlciBpbmNyZW1lbnQuCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1heGltdW1W
ZWxvY2l0eTsgLy8gUG9pbnRzIHBlciBzZWNvbmQuCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGZv
cmNlOworCisgICAgV2ViS2l0OjpTY3JvbGxpbmdJbmNyZW1lbnQgaW5jcmVtZW50OworICAgIFdl
YktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uIGRpcmVjdGlvbjsKIH07CiAKK3N0cnVjdCBLZXlib2Fy
ZFNjcm9sbFBhcmFtZXRlcnMgeworICAgIENHRmxvYXQgc3ByaW5nTWFzcyB7IDEgfTsKKyAgICBD
R0Zsb2F0IHNwcmluZ1N0aWZmbmVzcyB7IDEwOSB9OworICAgIENHRmxvYXQgc3ByaW5nRGFtcGlu
ZyB7IDIwIH07CisKKyAgICBDR0Zsb2F0IG1heGltdW1WZWxvY2l0eU11bHRpcGxpZXIgeyAyNSB9
OworICAgIENHRmxvYXQgdGltZVRvTWF4aW11bVZlbG9jaXR5IHsgMSB9OworCisgICAgQ0dGbG9h
dCBydWJiZXJCYW5kRm9yY2UgeyA1MDAwIH07CiB9OwogCit9CisKK0Bwcm90b2NvbCBXS0tleWJv
YXJkU2Nyb2xsYWJsZUludGVybmFsIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAoQk9PTClpc0tl
eWJvYXJkU2Nyb2xsYWJsZTsKKy0gKENHRmxvYXQpZGlzdGFuY2VGb3JJbmNyZW1lbnQ6KFdlYktp
dDo6U2Nyb2xsaW5nSW5jcmVtZW50KWluY3JlbWVudDsKKy0gKHZvaWQpc2Nyb2xsVG9Db250ZW50
T2Zmc2V0OihXZWJDb3JlOjpGbG9hdFBvaW50KW9mZnNldCBhbmltYXRlZDooQk9PTClhbmltYXRl
ZDsKKy0gKHZvaWQpc2Nyb2xsV2l0aFNjcm9sbFRvRXh0ZW50QW5pbWF0aW9uVG86KENHUG9pbnQp
b2Zmc2V0OworLSAoQ0dQb2ludCljb250ZW50T2Zmc2V0OworLSAoQ0dTaXplKWludGVyYWN0aXZl
U2Nyb2xsVmVsb2NpdHk7CistIChDR1BvaW50KWJvdW5kZWRDb250ZW50T2Zmc2V0OihDR1BvaW50
KW9mZnNldDsKKy0gKFdlYkNvcmU6OlJlY3RFZGdlczxib29sPilzY3JvbGxhYmxlRGlyZWN0aW9u
c0Zyb21PZmZzZXQ6KENHUG9pbnQpb2Zmc2V0OworLSAoV2ViQ29yZTo6UmVjdEVkZ2VzPGJvb2w+
KXJ1YmJlcmJhbmRhYmxlRGlyZWN0aW9uczsKKworQGVuZAorCitAaW50ZXJmYWNlIFdLS2V5Ym9h
cmRTY3JvbGxpbmdBbmltYXRvciA6IE5TT2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0IE5T
X1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsYWJsZTooaWQgPFdL
S2V5Ym9hcmRTY3JvbGxhYmxlSW50ZXJuYWw+KXNjcm9sbGFibGU7CisKKy0gKHZvaWQpaW52YWxp
ZGF0ZTsKKworLSAodm9pZCl3aWxsU3RhcnRJbnRlcmFjdGl2ZVNjcm9sbDsKKworLSAoQk9PTCli
ZWdpbldpdGhFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50OworLSAoQk9PTCloYW5kbGVLZXlFdmVu
dDooOjpXZWJFdmVudCAqKWV2ZW50OworCitAZW5kCisKIEBpbXBsZW1lbnRhdGlvbiBXS0tleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IgewotICAgIGlkIDxXS0tleWJvYXJkU2Nyb2xsYWJsZT4gX3Nj
cm9sbGFibGU7Ci0gICAgQ0ZUaW1lSW50ZXJ2YWwgX3N0YXJ0VGltZTsKLSAgICBXZWJDb3JlOjpG
bG9hdFBvaW50IF9zY3JvbGxPZmZzZXRQZXJJbmNyZW1lbnQ7CisgICAgaWQgPFdLS2V5Ym9hcmRT
Y3JvbGxhYmxlSW50ZXJuYWw+IF9zY3JvbGxhYmxlOwogICAgIFJldGFpblB0cjxDQURpc3BsYXlM
aW5rPiBfZGlzcGxheUxpbms7Ci0gICAgV2ViS2l0OjpLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9y
U3RhdGUgX3N0YXRlOworCisgICAgc3RkOjpvcHRpb25hbDxXZWJLaXQ6OktleWJvYXJkU2Nyb2xs
PiBfY3VycmVudFNjcm9sbDsKKworICAgIEJPT0wgX2hhc1ByZXNzZWRTY3JvbGxpbmdLZXk7CisK
KyAgICBXZWJDb3JlOjpGbG9hdFNpemUgX3ZlbG9jaXR5OyAvLyBQb2ludHMgcGVyIHNlY29uZC4K
KworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgX2lkZWFsUG9zaXRpb247CisgICAgV2ViQ29yZTo6
RmxvYXRQb2ludCBfY3VycmVudFBvc2l0aW9uOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgX2lk
ZWFsUG9zaXRpb25Gb3JNaW5pbXVtVHJhdmVsOwogfQogCiAtIChpbnN0YW5jZXR5cGUpaW5pdApA
QCAtNTgsNyArMTExLDcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXQKICAgICByZXR1cm4gbmlsOwog
fQogCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxhYmxlOihpZCA8V0tLZXlib2FyZFNj
cm9sbGFibGU+KXNjcm9sbGFibGUKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGFibGU6
KGlkIDxXS0tleWJvYXJkU2Nyb2xsYWJsZUludGVybmFsPilzY3JvbGxhYmxlCiB7CiAgICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKICAgICBpZiAoIXNlbGYpCkBAIC02OSwxMyArMTIyLDYwIEBAIC0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGFibGU6KGlkIDxXS0tleWJvYXJkU2Nyb2xsYWJs
ZT4pc2Nyb2xsYWJsZQogICAgIHJldHVybiBzZWxmOwogfQogCistIChjb25zdCBXZWJLaXQ6Oktl
eWJvYXJkU2Nyb2xsUGFyYW1ldGVycyAmKXBhcmFtZXRlcnMKK3sKKyAgICBzdGF0aWMgY29uc3Qg
V2ViS2l0OjpLZXlib2FyZFNjcm9sbFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICByZXR1cm4g
cGFyYW1ldGVyczsKK30KKwogLSAodm9pZClpbnZhbGlkYXRlCiB7CiAgICAgW3NlbGYgc3RvcEFu
aW1hdGVkU2Nyb2xsXTsKKyAgICBbc2VsZiBzdG9wRGlzcGxheUxpbmtdOwogICAgIF9zY3JvbGxh
YmxlID0gbmlsOwogfQogCi0tIChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+KV9z
Y3JvbGxPZmZzZXRGb3JFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50CitzdGF0aWMgV2ViQ29yZTo6
RmxvYXRTaXplIHVuaXRWZWN0b3IoV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb24gZGlyZWN0aW9u
KQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGlu
Z0RpcmVjdGlvbjo6VXA6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFNpemUoMCwgLTEp
OworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OkRvd246CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpGbG9hdFNpemUoMCwgMSk7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGlu
Z0RpcmVjdGlvbjo6TGVmdDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0U2l6ZSgtMSwg
MCk7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6UmlnaHQ6CisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpGbG9hdFNpemUoMSwgMCk7CisgICAgfQorfQorCitzdGF0aWMgV2Vi
Q29yZTo6RmxvYXRTaXplIHBlcnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IoV2ViS2l0OjpT
Y3JvbGxpbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7
CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6VXA6CisgICAgY2FzZSBXZWJL
aXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6RG93bjoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZs
b2F0U2l6ZSgxLCAwKTsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uOjpMZWZ0
OgorICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OlJpZ2h0OgorICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6RmxvYXRTaXplKDAsIDEpOworICAgIH0KK30KKworc3RhdGljIFdlYkNv
cmU6OlBoeXNpY2FsQm94U2lkZSBib3hTaWRlKFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgV2ViS2l0OjpT
Y3JvbGxpbmdEaXJlY3Rpb246OlVwOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGh5c2ljYWxC
b3hTaWRlOjpUb3A7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6RG93bjoK
KyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlBoeXNpY2FsQm94U2lkZTo6Qm90dG9tOworICAgIGNh
c2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OkxlZnQ6CisgICAgICAgIHJldHVybiBXZWJD
b3JlOjpQaHlzaWNhbEJveFNpZGU6OkxlZnQ7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0Rp
cmVjdGlvbjo6UmlnaHQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpQaHlzaWNhbEJveFNpZGU6
OlJpZ2h0OworICAgIH0KK30KKworLSAoc3RkOjpvcHRpb25hbDxXZWJLaXQ6OktleWJvYXJkU2Ny
b2xsPilrZXlib2FyZFNjcm9sbEZvckV2ZW50Oig6OldlYkV2ZW50ICopZXZlbnQKIHsKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQga1dlYlNwYWNlS2V5ID0gMHgyMDsKIApAQCAtODYsNyArMTg2
LDYgQEAgLSAoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50Pilfc2Nyb2xsT2Zmc2V0
Rm9yRXZlbnQ6KDo6V2ViRXZlbnQgKilldmVudAogICAgIGlmICghY2hhcmFjdGVyc0lnbm9yaW5n
TW9kaWZpZXJzLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGVu
dW0gY2xhc3MgRGlyZWN0aW9uIDogdWludDhfdCB7IFVwLCBEb3duLCBMZWZ0LCBSaWdodCB9Owog
ICAgIGVudW0gY2xhc3MgS2V5IDogdWludDhfdCB7IE90aGVyLCBMZWZ0QXJyb3csIFJpZ2h0QXJy
b3csIFVwQXJyb3csIERvd25BcnJvdywgUGFnZVVwLCBQYWdlRG93biwgU3BhY2UgfTsKICAgICAK
ICAgICBhdXRvIGtleSA9IF57CkBAIC0xMTMsNyArMjEyLDcgQEAgLSAoc3RkOjpvcHRpb25hbDxX
ZWJDb3JlOjpGbG9hdFBvaW50Pilfc2Nyb2xsT2Zmc2V0Rm9yRXZlbnQ6KDo6V2ViRXZlbnQgKill
dmVudAogICAgIEJPT0wgc2hpZnRQcmVzc2VkID0gZXZlbnQubW9kaWZpZXJGbGFncyAmIFdlYkV2
ZW50RmxhZ01hc2tTaGlmdDsKICAgICBCT09MIGFsdFByZXNzZWQgPSBldmVudC5tb2RpZmllckZs
YWdzICYgV2ViRXZlbnRGbGFnTWFza0FsdGVybmF0ZTsKICAgICBCT09MIGNtZFByZXNzZWQgPSBl
dmVudC5tb2RpZmllckZsYWdzICYgV2ViRXZlbnRGbGFnTWFza0NvbW1hbmQ7Ci0gICAgCisKICAg
ICBhdXRvIGluY3JlbWVudCA9IF57CiAgICAgICAgIHN3aXRjaCAoa2V5KSB7CiAgICAgICAgIGNh
c2UgS2V5OjpMZWZ0QXJyb3c6CkBAIC0xMzksMTA0ICsyMzgsMzg2IEBAIC0gKHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6RmxvYXRQb2ludD4pX3Njcm9sbE9mZnNldEZvckV2ZW50Oig6OldlYkV2ZW50
ICopZXZlbnQKICAgICBhdXRvIGRpcmVjdGlvbiA9IF4oKSB7CiAgICAgICAgIHN3aXRjaCAoa2V5
KSB7CiAgICAgICAgIGNhc2UgS2V5OjpMZWZ0QXJyb3c6Ci0gICAgICAgICAgICByZXR1cm4gRGly
ZWN0aW9uOjpMZWZ0OworICAgICAgICAgICAgcmV0dXJuIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0
aW9uOjpMZWZ0OwogICAgICAgICBjYXNlIEtleTo6UmlnaHRBcnJvdzoKLSAgICAgICAgICAgIHJl
dHVybiBEaXJlY3Rpb246OlJpZ2h0OworICAgICAgICAgICAgcmV0dXJuIFdlYktpdDo6U2Nyb2xs
aW5nRGlyZWN0aW9uOjpSaWdodDsKICAgICAgICAgY2FzZSBLZXk6OlVwQXJyb3c6CiAgICAgICAg
IGNhc2UgS2V5OjpQYWdlVXA6Ci0gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uOjpVcDsKKyAg
ICAgICAgICAgIHJldHVybiBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6VXA7CiAgICAgICAg
IGNhc2UgS2V5OjpEb3duQXJyb3c6CiAgICAgICAgIGNhc2UgS2V5OjpQYWdlRG93bjoKLSAgICAg
ICAgICAgIHJldHVybiBEaXJlY3Rpb246OkRvd247CisgICAgICAgICAgICByZXR1cm4gV2ViS2l0
OjpTY3JvbGxpbmdEaXJlY3Rpb246OkRvd247CiAgICAgICAgIGNhc2UgS2V5OjpTcGFjZToKLSAg
ICAgICAgICAgIHJldHVybiBzaGlmdFByZXNzZWQgPyBEaXJlY3Rpb246OlVwIDogRGlyZWN0aW9u
OjpEb3duOworICAgICAgICAgICAgcmV0dXJuIHNoaWZ0UHJlc3NlZCA/IFdlYktpdDo6U2Nyb2xs
aW5nRGlyZWN0aW9uOjpVcCA6IFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uOjpEb3duOwogICAg
ICAgICBjYXNlIEtleTo6T3RoZXI6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIHJldHVybiBEaXJlY3Rpb246OkRvd247CisgICAgICAgICAgICByZXR1cm4g
V2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OkRvd247CiAgICAgICAgIH07CiAgICAgfSgpOwog
Ci0gICAgYm9vbCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpMZWZ0IHx8
IGRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OlJpZ2h0OwotICAgIENHRmxvYXQgc2Nyb2xsRGlzdGFu
Y2UgPSBbX3Njcm9sbGFibGUgZGlzdGFuY2VGb3JTY3JvbGxpbmdJbmNyZW1lbnQ6aW5jcmVtZW50
XTsKLSAgICAKLSAgICBpZiAoZGlyZWN0aW9uID09IERpcmVjdGlvbjo6VXAgfHwgZGlyZWN0aW9u
ID09IERpcmVjdGlvbjo6TGVmdCkKLSAgICAgICAgc2Nyb2xsRGlzdGFuY2UgPSAtc2Nyb2xsRGlz
dGFuY2U7CisgICAgQ0dGbG9hdCBzY3JvbGxEaXN0YW5jZSA9IFtfc2Nyb2xsYWJsZSBkaXN0YW5j
ZUZvckluY3JlbWVudDppbmNyZW1lbnRdOworCisgICAgV2ViS2l0OjpLZXlib2FyZFNjcm9sbCBz
Y3JvbGw7CisgICAgc2Nyb2xsLm9mZnNldCA9IHVuaXRWZWN0b3IoZGlyZWN0aW9uKS5zY2FsZWQo
c2Nyb2xsRGlzdGFuY2UpOworICAgIHNjcm9sbC5pbmNyZW1lbnQgPSBpbmNyZW1lbnQ7CisgICAg
c2Nyb2xsLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKyAgICBzY3JvbGwubWF4aW11bVZlbG9jaXR5
ID0gc2Nyb2xsLm9mZnNldC5zY2FsZWQoc2VsZi5wYXJhbWV0ZXJzLm1heGltdW1WZWxvY2l0eU11
bHRpcGxpZXIpOworCisgICAgLy8gQXBwbHkgYSBjb25zdGFudCBmb3JjZSB0byBhY2hpZXZlIFZt
YXggaW4gdGltZVRvTWF4aW11bVZlbG9jaXR5IHNlY29uZHMuCisgICAgLy8gRl9jb25zdGFudCA9
IG0gKiBWbWF4IC8gdAorICAgIHNjcm9sbC5mb3JjZSA9IHNjcm9sbC5tYXhpbXVtVmVsb2NpdHku
c2NhbGVkKHNlbGYucGFyYW1ldGVycy5zcHJpbmdNYXNzIC8gc2VsZi5wYXJhbWV0ZXJzLnRpbWVU
b01heGltdW1WZWxvY2l0eSk7CiAgICAgCi0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbCA/IFdlYkNv
cmU6OkZsb2F0UG9pbnQoc2Nyb2xsRGlzdGFuY2UsIDApIDogV2ViQ29yZTo6RmxvYXRQb2ludCgw
LCBzY3JvbGxEaXN0YW5jZSk7CisgICAgcmV0dXJuIHNjcm9sbDsKIH0KIAogLSAoQk9PTCliZWdp
bldpdGhFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50CiB7Ci0gICAgaWYgKF9zdGF0ZSAhPSBXZWJL
aXQ6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3JTdGF0ZTo6V2FpdGluZ0ZvckZpcnN0RXZlbnQp
Ci0gICAgICAgIHJldHVybiBOTzsKLSAgICAKICAgICBpZiAoZXZlbnQudHlwZSAhPSBXZWJFdmVu
dEtleURvd24pCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIGF1dG8gb2Zmc2V0ID0gW3NlbGYg
X3Njcm9sbE9mZnNldEZvckV2ZW50OmV2ZW50XTsKLSAgICBpZiAoIW9mZnNldCkKKyAgICBhdXRv
IHNjcm9sbCA9IFtzZWxmIGtleWJvYXJkU2Nyb2xsRm9yRXZlbnQ6ZXZlbnRdOworICAgIGlmICgh
c2Nyb2xsKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICBpZiAoX2hhc1ByZXNzZWRTY3JvbGxp
bmdLZXkpCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIF9zdGF0ZSA9IFdlYktpdDo6S2V5Ym9h
cmRTY3JvbGxpbmdBbmltYXRvclN0YXRlOjpXYWl0aW5nRm9yUmVwZWF0OwotICAgIF9zY3JvbGxP
ZmZzZXRQZXJJbmNyZW1lbnQgPSBvZmZzZXQudmFsdWUoKTsKKyAgICBpZiAoIVtfc2Nyb2xsYWJs
ZSBydWJiZXJiYW5kYWJsZURpcmVjdGlvbnNdLmF0KGJveFNpZGUoc2Nyb2xsLT5kaXJlY3Rpb24p
KSkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgX2hhc1ByZXNzZWRTY3JvbGxpbmdLZXkgPSBZ
RVM7CisgICAgX2N1cnJlbnRTY3JvbGwgPSBzY3JvbGw7CisKKyAgICBpZiAoc2Nyb2xsLT5pbmNy
ZW1lbnQgPT0gV2ViS2l0OjpTY3JvbGxpbmdJbmNyZW1lbnQ6OkRvY3VtZW50KSB7CisgICAgICAg
IF92ZWxvY2l0eSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOworICAgICAgICBbc2VsZiBzdG9wQW5p
bWF0ZWRTY3JvbGxdOworICAgICAgICBbc2VsZiBzdG9wRGlzcGxheUxpbmtdOworICAgICAgICBb
X3Njcm9sbGFibGUgc2Nyb2xsV2l0aFNjcm9sbFRvRXh0ZW50QW5pbWF0aW9uVG86W19zY3JvbGxh
YmxlIGJvdW5kZWRDb250ZW50T2Zmc2V0Ol9jdXJyZW50UG9zaXRpb24gKyBzY3JvbGwtPm9mZnNl
dF1dOworICAgICAgICByZXR1cm4gWUVTOworICAgIH0KIAotICAgIC8vIFRoZSBmaXJzdCBrZXli
b2FyZCBldmVudCB0aGF0IHN0YXJ0cyBzY3JvbGxpbmcgcGVyZm9ybXMgaXRzIG93bgotICAgIC8v
IGRpc2NyZXRlIGFuaW1hdGVkIHNjcm9sbC4gQ29udGludW91c2x5IGFuaW1hdGVkIHNjcm9sbGlu
ZyBzdGFydHMKLSAgICAvLyB3aGVuIHRoZSBrZXkgcmVwZWF0cy4KLSAgICBbX3Njcm9sbGFibGUg
c2Nyb2xsQnlDb250ZW50T2Zmc2V0Ol9zY3JvbGxPZmZzZXRQZXJJbmNyZW1lbnQgYW5pbWF0ZWQ6
WUVTXTsKKyAgICBbc2VsZiBzdGFydERpc3BsYXlMaW5rSWZOZWVkZWRdOworCisgICAgX2N1cnJl
bnRQb3NpdGlvbiA9IFdlYkNvcmU6OkZsb2F0UG9pbnQoW19zY3JvbGxhYmxlIGNvbnRlbnRPZmZz
ZXRdKTsKKyAgICBfdmVsb2NpdHkgKz0gV2ViQ29yZTo6RmxvYXRTaXplKFtfc2Nyb2xsYWJsZSBp
bnRlcmFjdGl2ZVNjcm9sbFZlbG9jaXR5XSk7CisgICAgX2lkZWFsUG9zaXRpb25Gb3JNaW5pbXVt
VHJhdmVsID0gX2N1cnJlbnRQb3NpdGlvbiArIF9jdXJyZW50U2Nyb2xsLT5vZmZzZXQ7CiAKICAg
ICByZXR1cm4gWUVTOwogfQogCiAtIChCT09MKWhhbmRsZUtleUV2ZW50Oig6OldlYkV2ZW50ICop
ZXZlbnQKIHsKLSAgICBpZiAoX3N0YXRlID09IFdlYktpdDo6S2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvclN0YXRlOjpXYWl0aW5nRm9yRmlyc3RFdmVudCkKKyAgICBpZiAoIV9oYXNQcmVzc2VkU2Ny
b2xsaW5nS2V5KQogICAgICAgICByZXR1cm4gTk87CiAKLSAgICBhdXRvIG9mZnNldCA9IFtzZWxm
IF9zY3JvbGxPZmZzZXRGb3JFdmVudDpldmVudF07Ci0gICAgaWYgKCFvZmZzZXQgfHwgZXZlbnQu
dHlwZSA9PSBXZWJFdmVudEtleVVwKSB7CisgICAgYXV0byBzY3JvbGwgPSBbc2VsZiBrZXlib2Fy
ZFNjcm9sbEZvckV2ZW50OmV2ZW50XTsKKyAgICBpZiAoIXNjcm9sbCB8fCBldmVudC50eXBlID09
IFdlYkV2ZW50S2V5VXApIHsKICAgICAgICAgW3NlbGYgc3RvcEFuaW1hdGVkU2Nyb2xsXTsKLSAg
ICAgICAgcmV0dXJuIE5POworICAgICAgICBfaGFzUHJlc3NlZFNjcm9sbGluZ0tleSA9IE5POwog
ICAgIH0KIAotICAgIGlmIChfc3RhdGUgPT0gV2ViS2l0OjpLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yU3RhdGU6OldhaXRpbmdGb3JSZXBlYXQpCi0gICAgICAgIFtzZWxmIHN0YXJ0QW5pbWF0ZWRT
Y3JvbGxdOworICAgIHJldHVybiBOTzsKK30KIAotICAgIHJldHVybiBZRVM7CitzdGF0aWMgV2Vi
Q29yZTo6RmxvYXRQb2ludCBmYXJ0aGVzdFBvaW50SW5EaXJlY3Rpb24oV2ViQ29yZTo6RmxvYXRQ
b2ludCBhLCBXZWJDb3JlOjpGbG9hdFBvaW50IGIsIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9u
IGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgV2ViS2l0
OjpTY3JvbGxpbmdEaXJlY3Rpb246OlVwOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRQ
b2ludChhLngoKSwgc3RkOjptaW4oYS55KCksIGIueSgpKSk7CisgICAgY2FzZSBXZWJLaXQ6OlNj
cm9sbGluZ0RpcmVjdGlvbjo6RG93bjoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UG9p
bnQoYS54KCksIHN0ZDo6bWF4KGEueSgpLCBiLnkoKSkpOworICAgIGNhc2UgV2ViS2l0OjpTY3Jv
bGxpbmdEaXJlY3Rpb246OkxlZnQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFBvaW50
KHN0ZDo6bWluKGEueCgpLCBiLngoKSksIGEueSgpKTsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xs
aW5nRGlyZWN0aW9uOjpSaWdodDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UG9pbnQo
c3RkOjptYXgoYS54KCksIGIueCgpKSwgYS55KCkpOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKKy0gKHZvaWQpc3RvcEFuaW1hdGVkU2Ny
b2xsCit7CisgICAgaWYgKCFfY3VycmVudFNjcm9sbCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBzZXR0bGluZyBwb3NpdGlvbiBvZiB0aGUgc3ByaW5nLCBjb25zZXJ2
aW5nIHRoZSBzeXN0ZW0ncyBjdXJyZW50IGVuZXJneS4KKyAgICAvLyBLaW5ldGljID0gZWxhc3Rp
YyBwb3RlbnRpYWwKKyAgICAvLyAxLzIgKiBtICogdl4yID0gMS8yICogayAqIHheMgorICAgIC8v
IHggPSBzcXJ0KHZeMiAqIG0gLyBrKQorICAgIGF1dG8gZGlzcGxhY2VtZW50TWFnbml0dWRlU3F1
YXJlZCA9IChfdmVsb2NpdHkgKiBfdmVsb2NpdHkpLnNjYWxlZChzZWxmLnBhcmFtZXRlcnMuc3By
aW5nTWFzcyAvIHNlbGYucGFyYW1ldGVycy5zcHJpbmdTdGlmZm5lc3MpOworICAgIFdlYkNvcmU6
OkZsb2F0U2l6ZSBkaXNwbGFjZW1lbnQgPSB7CisgICAgICAgIHN0ZDo6Y29weXNpZ24oc3FydChk
aXNwbGFjZW1lbnRNYWduaXR1ZGVTcXVhcmVkLndpZHRoKCkpLCBfY3VycmVudFNjcm9sbC0+Zm9y
Y2Uud2lkdGgoKSksCisgICAgICAgIHN0ZDo6Y29weXNpZ24oc3FydChkaXNwbGFjZW1lbnRNYWdu
aXR1ZGVTcXVhcmVkLmhlaWdodCgpKSwgX2N1cnJlbnRTY3JvbGwtPmZvcmNlLmhlaWdodCgpKQor
ICAgIH07CisKKyAgICAvLyBJZiB0aGUgc3ByaW5nIHdvdWxkIHNldHRsZSBiZWZvcmUgdGhlIG1p
bmltdW0gdHJhdmVsIGRpc3RhbmNlCisgICAgLy8gZm9yIGFuIGluc3RhbnRhbmVvdXMgdGFwLCBt
b3ZlIHRoZSBzZXR0bGluZyBwb3NpdGlvbiBvZiB0aGUgc3ByaW5nCisgICAgLy8gb3V0IHRvIHRo
YXQgcG9pbnQuCisgICAgX2lkZWFsUG9zaXRpb24gPSBbX3Njcm9sbGFibGUgYm91bmRlZENvbnRl
bnRPZmZzZXQ6ZmFydGhlc3RQb2ludEluRGlyZWN0aW9uKF9jdXJyZW50UG9zaXRpb24gKyBkaXNw
bGFjZW1lbnQsIF9pZGVhbFBvc2l0aW9uRm9yTWluaW11bVRyYXZlbCwgX2N1cnJlbnRTY3JvbGwt
PmRpcmVjdGlvbildOworCisgICAgX2N1cnJlbnRTY3JvbGwgPSBzdGQ6Om51bGxvcHQ7CiB9CiAK
LS0gKHZvaWQpc3RhcnRBbmltYXRlZFNjcm9sbAorLSAodm9pZClzdGFydERpc3BsYXlMaW5rSWZO
ZWVkZWQKIHsKLSAgICBBU1NFUlQoIV9kaXNwbGF5TGluayk7CisgICAgaWYgKF9kaXNwbGF5TGlu
aykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgX3N0YXRlID0gV2ViS2l0OjpLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yU3RhdGU6OkFuaW1hdGluZzsKLSAgICBfc3RhcnRUaW1lID0gQ0FDdXJyZW50
TWVkaWFUaW1lKCk7CiAgICAgX2Rpc3BsYXlMaW5rID0gW0NBRGlzcGxheUxpbmsgZGlzcGxheUxp
bmtXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGRpc3BsYXlMaW5rRmlyZWQ6KV07
CiAgICAgW19kaXNwbGF5TGluayBhZGRUb1J1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0g
Zm9yTW9kZTpOU1J1bkxvb3BDb21tb25Nb2Rlc107CiB9CiAKLS0gKHZvaWQpc3RvcEFuaW1hdGVk
U2Nyb2xsCistICh2b2lkKXN0b3BEaXNwbGF5TGluawogewotICAgIF9zdGF0ZSA9IFdlYktpdDo6
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvclN0YXRlOjpXYWl0aW5nRm9yRmlyc3RFdmVudDsKICAg
ICBbX2Rpc3BsYXlMaW5rIGludmFsaWRhdGVdOwogICAgIF9kaXNwbGF5TGluayA9IG5pbDsKIH0K
IAorLSAodm9pZCl3aWxsU3RhcnRJbnRlcmFjdGl2ZVNjcm9sbAoreworICAgIC8vIElmIHRoZSB1
c2VyIHRvdWNoZXMgdGhlIHNjcmVlbiB0byBzdGFydCBhbiBpbnRlcmFjdGl2ZSBzY3JvbGwsIHN0
b3AgZXZlcnl0aGluZy4KKyAgICBfdmVsb2NpdHkgPSBXZWJDb3JlOjpGbG9hdFNpemUoKTsKKyAg
ICBbc2VsZiBzdG9wQW5pbWF0ZWRTY3JvbGxdOworICAgIFtzZWxmIHN0b3BEaXNwbGF5TGlua107
Cit9CisKIC0gKHZvaWQpZGlzcGxheUxpbmtGaXJlZDooQ0FEaXNwbGF5TGluayAqKXNlbmRlcgog
ewotICAgIGNvbnN0IENGVGltZUludGVydmFsIHNlY29uZHNQZXJTY3JvbGxJbmNyZW1lbnQgPSAw
LjA1OyAvLyBTZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIGNvdmVyIG9uZSBpbmNyZW1lbnQgd2hl
biBhdCBmdWxsIHNwZWVkLgotICAgIGNvbnN0IGZsb2F0IG1heGltdW1WZWxvY2l0eSA9IDIwMDA7
IC8vIE1heGltdW0gdmVsb2NpdHkgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIEVtcGlyaWNhbGx5IGRl
dGVybWluZWQuCi0gICAgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgYWNjZWxlcmF0aW9uRHVyYXRpb24g
PSAwLjM7IC8vIER1cmF0aW9uIG9mIGFjY2VsZXJhdGlvbiBpbiBzZWNvbmRzLiBUaGlzIG1hdGNo
ZXMgVUlTY3JvbGxWaWV3LgorICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBmb3JjZTsKKyAgICBXZWJD
b3JlOjpGbG9hdFNpemUgYXhlc1RvQXBwbHlTcHJpbmcgPSB7IDEsIDEgfTsKKworICAgIGlmIChf
Y3VycmVudFNjcm9sbCkgeworICAgICAgICBXZWJDb3JlOjpSZWN0RWRnZXM8Ym9vbD4gc2Nyb2xs
YWJsZURpcmVjdGlvbnMgPSBbX3Njcm9sbGFibGUgc2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zm
c2V0Ol9jdXJyZW50UG9zaXRpb25dOworICAgICAgICBhdXRvIGRpcmVjdGlvbiA9IF9jdXJyZW50
U2Nyb2xsLT5kaXJlY3Rpb247CisKKyAgICAgICAgaWYgKHNjcm9sbGFibGVEaXJlY3Rpb25zLmF0
KGJveFNpZGUoZGlyZWN0aW9uKSkpIHsKKyAgICAgICAgICAgIC8vIEFwcGx5IHRoZSBzY3JvbGxp
bmcgZm9yY2UuIE9ubHkgYXBwbHkgdGhlIHNwcmluZyBpbiB0aGUgcGVycGVuZGljdWxhciBheGlz
LAorICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGRyYWdzIGFnYWluc3QgdGhlIGRpcmVjdGlv
biBvZiBtb3Rpb24uCisgICAgICAgICAgICBheGVzVG9BcHBseVNwcmluZyA9IHBlcnBlbmRpY3Vs
YXJBYnNvbHV0ZVVuaXRWZWN0b3IoZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGZvcmNlID0gX2N1
cnJlbnRTY3JvbGwtPmZvcmNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhl
IHNjcm9sbCB2aWV3IGNhbm5vdCBzY3JvbGwgaW4gdGhpcyBkaXJlY3Rpb24sIGFuZCBpcyBydWJi
ZXItYmFuZGluZy4KKyAgICAgICAgICAgIC8vIEFwcGx5IGEgY29uc3RhbnQgYW5kIHNpZ25pZmlj
YW50IGZvcmNlOyBvdGhlcndpc2UsIHRoZSBmb3JjZSBmb3IgYQorICAgICAgICAgICAgLy8gc2lu
Z2xlLWxpbmUgaW5jcmVtZW50IGlzIG5vdCBzdHJvbmcgZW5vdWdoIHRvIHJ1YmJlci1iYW5kIHBl
cmNlcHRpYmx5LgorICAgICAgICAgICAgZm9yY2UgPSB1bml0VmVjdG9yKGRpcmVjdGlvbikuc2Nh
bGVkKHNlbGYucGFyYW1ldGVycy5ydWJiZXJCYW5kRm9yY2UpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gSWYgd2UndmUgcmVhY2hlZCBvciBleGNlZWRlZCB0aGUgbWF4aW11bSB2ZWxvY2l0eSwg
c3RvcCBhcHBseWluZyBhbnkgZm9yY2UuCisgICAgICAgIC8vIEhvd2V2ZXIsIHdlIHdvbid0IGxl
dCB0aGUgc3ByaW5nIHNuYXAsIHdlJ2xsIGp1c3Qga2VlcCBnb2luZyBhdCB0aGUgc2FtZQorICAg
ICAgICAvLyB2ZWxvY2l0eSB1bnRpbCB0aGUgdXNlciByYWlzZXMgdGhlaXIgZmluZ2VyIG9yIHdl
IGhpdCBhbiBlZGdlLgorICAgICAgICBpZiAoZmFicyhfdmVsb2NpdHkud2lkdGgoKSkgPj0gZmFi
cyhfY3VycmVudFNjcm9sbC0+bWF4aW11bVZlbG9jaXR5LndpZHRoKCkpKQorICAgICAgICAgICAg
Zm9yY2Uuc2V0V2lkdGgoMCk7CisgICAgICAgIGlmIChmYWJzKF92ZWxvY2l0eS5oZWlnaHQoKSkg
Pj0gZmFicyhfY3VycmVudFNjcm9sbC0+bWF4aW11bVZlbG9jaXR5LmhlaWdodCgpKSkKKyAgICAg
ICAgICAgIGZvcmNlLnNldEhlaWdodCgwKTsKKyAgICB9CiAKLSAgICBhdXRvIHZlbG9jaXR5ID0g
X3Njcm9sbE9mZnNldFBlckluY3JlbWVudC5zY2FsZWQoMS4gLyBzZWNvbmRzUGVyU2Nyb2xsSW5j
cmVtZW50KTsKLSAgICB2ZWxvY2l0eSA9IHZlbG9jaXR5LmNvbnN0cmFpbmVkQmV0d2Vlbih7IC1t
YXhpbXVtVmVsb2NpdHksIC1tYXhpbXVtVmVsb2NpdHkgfSwgeyBtYXhpbXVtVmVsb2NpdHksIG1h
eGltdW1WZWxvY2l0eSB9KTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGlkZWFsUG9zaXRpb24g
PSBbX3Njcm9sbGFibGUgYm91bmRlZENvbnRlbnRPZmZzZXQ6X2N1cnJlbnRTY3JvbGwgPyBfY3Vy
cmVudFBvc2l0aW9uIDogX2lkZWFsUG9zaXRpb25dOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBk
aXNwbGFjZW1lbnQgPSBfY3VycmVudFBvc2l0aW9uIC0gaWRlYWxQb3NpdGlvbjsKIAorICAgIC8v
IENvbXB1dGUgdGhlIHNwcmluZydzIGZvcmNlLCBhbmQgYXBwbHkgaXQgaW4gYWxsb3dlZCBkaXJl
Y3Rpb25zLgorICAgIC8vIEZfc3ByaW5nID0gLWsgKiB4IC0gYyAqIHYKKyAgICBhdXRvIHNwcmlu
Z0ZvcmNlID0gLSBkaXNwbGFjZW1lbnQuc2NhbGVkKHNlbGYucGFyYW1ldGVycy5zcHJpbmdTdGlm
Zm5lc3MpIC0gX3ZlbG9jaXR5LnNjYWxlZChzZWxmLnBhcmFtZXRlcnMuc3ByaW5nRGFtcGluZyk7
CisgICAgZm9yY2UgKz0gc3ByaW5nRm9yY2UgKiBheGVzVG9BcHBseVNwcmluZzsKKworICAgIC8v
IEludGVncmF0ZSBhY2NlbGVyYXRpb24gLT4gdmVsb2NpdHkgLT4gcG9zaXRpb24gZm9yIHRoaXMg
dGltZSBzdGVwLgogICAgIENGVGltZUludGVydmFsIGZyYW1lRHVyYXRpb24gPSBzZW5kZXIudGFy
Z2V0VGltZXN0YW1wIC0gc2VuZGVyLnRpbWVzdGFtcDsKLSAgICBDRlRpbWVJbnRlcnZhbCB0aW1l
RnJvbUFuaW1hdGlvblN0YXJ0ID0gc2VuZGVyLnRpbWVzdGFtcCAtIF9zdGFydFRpbWU7Ci0gICAg
ZmxvYXQgYWNjZWxlcmF0aW9uRmFjdG9yID0gW1tDQU1lZGlhVGltaW5nRnVuY3Rpb24gZnVuY3Rp
b25XaXRoTmFtZTprQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uRWFzZUluRWFzZU91dF0gX3NvbHZlRm9y
SW5wdXQ6c3RkOjptaW48Q0ZUaW1lSW50ZXJ2YWw+KHRpbWVGcm9tQW5pbWF0aW9uU3RhcnQsIGFj
Y2VsZXJhdGlvbkR1cmF0aW9uKSAvIGFjY2VsZXJhdGlvbkR1cmF0aW9uXTsKKyAgICBXZWJDb3Jl
OjpGbG9hdFNpemUgYWNjZWxlcmF0aW9uID0gZm9yY2Uuc2NhbGVkKDEuIC8gc2VsZi5wYXJhbWV0
ZXJzLnNwcmluZ01hc3MpOworICAgIF92ZWxvY2l0eSArPSBhY2NlbGVyYXRpb24uc2NhbGVkKGZy
YW1lRHVyYXRpb24pOworICAgIF9jdXJyZW50UG9zaXRpb24gKz0gX3ZlbG9jaXR5LnNjYWxlZChm
cmFtZUR1cmF0aW9uKTsKKworICAgIFtfc2Nyb2xsYWJsZSBzY3JvbGxUb0NvbnRlbnRPZmZzZXQ6
X2N1cnJlbnRQb3NpdGlvbiBhbmltYXRlZDpOT107CisKKyAgICAvLyBJZiB3ZSd2ZSBlZmZlY3Rp
dmVseSBzdG9wcGVkIHNjcm9sbGluZywgYW5kIG5vIGtleSBpcyBwcmVzc2VkLAorICAgIC8vIHNo
dXQgZG93biB0aGUgZGlzcGxheSBsaW5rLgorICAgIGlmICghX2hhc1ByZXNzZWRTY3JvbGxpbmdL
ZXkgJiYgX3ZlbG9jaXR5LmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpIDwgMSkgeworICAgICAgICBb
c2VsZiBzdG9wRGlzcGxheUxpbmtdOworICAgICAgICBfdmVsb2NpdHkgPSBXZWJDb3JlOjpGbG9h
dFNpemUoKTsKKyAgICB9Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBXS0tleWJvYXJkU2Nyb2xs
Vmlld0FuaW1hdG9yICgpIDxXS0tleWJvYXJkU2Nyb2xsYWJsZUludGVybmFsPgorQGVuZAorCitA
aW1wbGVtZW50YXRpb24gV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciB7CisgICAgV2Vha09i
akNQdHI8VUlTY3JvbGxWaWV3PiBfc2Nyb2xsVmlldzsKKyAgICBSZXRhaW5QdHI8V0tLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yPiBfYW5pbWF0b3I7CisKKyAgICBCT09MIF9kZWxlZ2F0ZVJlc3Bv
bmRzVG9Jc0tleWJvYXJkU2Nyb2xsYWJsZTsKKyAgICBCT09MIF9kZWxlZ2F0ZVJlc3BvbmRzVG9E
aXN0YW5jZUZvckluY3JlbWVudDsKKyAgICBCT09MIF9kZWxlZ2F0ZVJlc3BvbmRzVG9XaWxsU2Ny
b2xsOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIHJldHVybiBuaWw7Cit9CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbFZpZXc6KFVJU2Nyb2xsVmlldyAqKXNjcm9s
bFZpZXcKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIF9zY3JvbGxWaWV3ID0gc2Nyb2xsVmlldzsKKyAgICBfYW5p
bWF0b3IgPSBhZG9wdE5TKFtbV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIGFsbG9jXSBpbml0
V2l0aFNjcm9sbGFibGU6c2VsZl0pOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZGVhbGxvYworeworICAgIFtfYW5pbWF0b3IgaW52YWxpZGF0ZV07CisgICAgW3N1cGVyIGRlYWxs
b2NdOworfQorCistICh2b2lkKWludmFsaWRhdGUKK3sKKyAgICBfc2Nyb2xsVmlldyA9IG5pbDsK
KworICAgIFtfYW5pbWF0b3IgaW52YWxpZGF0ZV07CisgICAgX2FuaW1hdG9yID0gbmlsOworfQor
CistICh2b2lkKXNldERlbGVnYXRlOihpZCA8V0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvckRl
bGVnYXRlPilkZWxlZ2F0ZQoreworICAgIF9kZWxlZ2F0ZSA9IGRlbGVnYXRlOworCisgICAgX2Rl
bGVnYXRlUmVzcG9uZHNUb0lzS2V5Ym9hcmRTY3JvbGxhYmxlID0gW19kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGlzU2Nyb2xsYWJsZUZvcktleWJvYXJkU2Nyb2xsVmlld0Fu
aW1hdG9yOildOworICAgIF9kZWxlZ2F0ZVJlc3BvbmRzVG9EaXN0YW5jZUZvckluY3JlbWVudCA9
IFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihrZXlib2FyZFNjcm9sbFZp
ZXdBbmltYXRvcjpkaXN0YW5jZUZvckluY3JlbWVudDopXTsKKyAgICBfZGVsZWdhdGVSZXNwb25k
c1RvV2lsbFNjcm9sbCA9IFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihr
ZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvcldpbGxTY3JvbGw6KV07Cit9CisKKy0gKHZvaWQpd2ls
bFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGwKK3sKKyAgICBbX2FuaW1hdG9yIHdpbGxTdGFydEludGVy
YWN0aXZlU2Nyb2xsXTsKK30KKworLSAoQk9PTCliZWdpbldpdGhFdmVudDooOjpXZWJFdmVudCAq
KWV2ZW50Cit7CisgICAgcmV0dXJuIFtfYW5pbWF0b3IgYmVnaW5XaXRoRXZlbnQ6ZXZlbnRdOwor
fQorCistIChCT09MKWhhbmRsZUtleUV2ZW50Oig6OldlYkV2ZW50ICopZXZlbnQKK3sKKyAgICBy
ZXR1cm4gW19hbmltYXRvciBoYW5kbGVLZXlFdmVudDpldmVudF07Cit9CisKKy0gKEJPT0wpaXNL
ZXlib2FyZFNjcm9sbGFibGUKK3sKKyAgICBpZiAoIV9kZWxlZ2F0ZVJlc3BvbmRzVG9Jc0tleWJv
YXJkU2Nyb2xsYWJsZSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICByZXR1cm4gW19kZWxlZ2F0
ZSBpc1Njcm9sbGFibGVGb3JLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvcjpzZWxmXTsKK30KKwor
LSAoQ0dGbG9hdClkaXN0YW5jZUZvckluY3JlbWVudDooV2ViS2l0OjpTY3JvbGxpbmdJbmNyZW1l
bnQpaW5jcmVtZW50Cit7CisgICAgYXV0byBzY3JvbGxWaWV3ID0gX3Njcm9sbFZpZXcuZ2V0QXV0
b3JlbGVhc2VkKCk7CisgICAgaWYgKCFzY3JvbGxWaWV3KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGNvbnN0IENHRmxvYXQgZGVmYXVsdFBhZ2VTY3JvbGxGcmFjdGlvbiA9IDAuODsKKyAgICBj
b25zdCBDR0Zsb2F0IGRlZmF1bHRMaW5lU2Nyb2xsSGVpZ2h0ID0gNDA7CisKKyAgICBpZiAoIV9k
ZWxlZ2F0ZVJlc3BvbmRzVG9EaXN0YW5jZUZvckluY3JlbWVudCkgeworICAgICAgICBzd2l0Y2gg
KGluY3JlbWVudCkgeworICAgICAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nSW5jcmVtZW50OjpE
b2N1bWVudDoKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLmhlaWdo
dDsKKyAgICAgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0luY3JlbWVudDo6UGFnZToKKyAgICAg
ICAgICAgIHJldHVybiBzY3JvbGxWaWV3LmZyYW1lLnNpemUuaGVpZ2h0ICogZGVmYXVsdFBhZ2VT
Y3JvbGxGcmFjdGlvbjsKKyAgICAgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0luY3JlbWVudDo6
TGluZToKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0TGluZVNjcm9sbEhlaWdodDsKKyAgICAg
ICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgcmV0dXJuIFtfZGVsZWdhdGUga2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6
c2VsZiBkaXN0YW5jZUZvckluY3JlbWVudDppbmNyZW1lbnRdOworfQorCistICh2b2lkKXNjcm9s
bFRvQ29udGVudE9mZnNldDooV2ViQ29yZTo6RmxvYXRQb2ludCljb250ZW50T2Zmc2V0RGVsdGEg
YW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKK3sKKyAgICBhdXRvIHNjcm9sbFZpZXcgPSBfc2Nyb2xs
Vmlldy5nZXRBdXRvcmVsZWFzZWQoKTsKKyAgICBpZiAoIXNjcm9sbFZpZXcpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoX2RlbGVnYXRlUmVzcG9uZHNUb1dpbGxTY3JvbGwpCisgICAgICAgIFtf
ZGVsZWdhdGUga2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3JXaWxsU2Nyb2xsOnNlbGZdOworICAg
IFtzY3JvbGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6Y29udGVudE9mZnNldERlbHRhIGFuaW1hdGVk
OmFuaW1hdGVkXTsKK30KKworLSAodm9pZClzY3JvbGxXaXRoU2Nyb2xsVG9FeHRlbnRBbmltYXRp
b25UbzooQ0dQb2ludClvZmZzZXQKK3sKKyAgICBhdXRvIHNjcm9sbFZpZXcgPSBfc2Nyb2xsVmll
dy5nZXRBdXRvcmVsZWFzZWQoKTsKKyAgICBbc2Nyb2xsVmlldyBfc2V0Q29udGVudE9mZnNldFdp
dGhEZWNlbGVyYXRpb25BbmltYXRpb246b2Zmc2V0XTsKK30KKworLSAoQ0dQb2ludCljb250ZW50
T2Zmc2V0Cit7CisgICAgYXV0byBzY3JvbGxWaWV3ID0gX3Njcm9sbFZpZXcuZ2V0QXV0b3JlbGVh
c2VkKCk7CisgICAgaWYgKCFzY3JvbGxWaWV3KQorICAgICAgICByZXR1cm4gQ0dQb2ludFplcm87
CisKKyAgICByZXR1cm4gW3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07Cit9CisKKy0gKENHUG9p
bnQpYm91bmRlZENvbnRlbnRPZmZzZXQ6KENHUG9pbnQpb2Zmc2V0Cit7CisgICAgYXV0byBzY3Jv
bGxWaWV3ID0gX3Njcm9sbFZpZXcuZ2V0QXV0b3JlbGVhc2VkKCk7CisgICAgaWYgKCFzY3JvbGxW
aWV3KQorICAgICAgICByZXR1cm4gQ0dQb2ludFplcm87CisKKyAgICByZXR1cm4gW3Njcm9sbFZp
ZXcgX2FkanVzdGVkQ29udGVudE9mZnNldEZvckNvbnRlbnRPZmZzZXQ6b2Zmc2V0XTsKK30KKwor
LSAoQ0dTaXplKWludGVyYWN0aXZlU2Nyb2xsVmVsb2NpdHkKK3sKKyAgICBhdXRvIHNjcm9sbFZp
ZXcgPSBfc2Nyb2xsVmlldy5nZXRBdXRvcmVsZWFzZWQoKTsKKyAgICBpZiAoIXNjcm9sbFZpZXcp
CisgICAgICAgIHJldHVybiBDR1NpemVaZXJvOworCisgICAgcmV0dXJuIENHU2l6ZU1ha2Uoc2Ny
b2xsVmlldy5faG9yaXpvbnRhbFZlbG9jaXR5ICogMTAwMCwgc2Nyb2xsVmlldy5fdmVydGljYWxW
ZWxvY2l0eSAqIDEwMDApOworfQorCistIChXZWJDb3JlOjpSZWN0RWRnZXM8Ym9vbD4pc2Nyb2xs
YWJsZURpcmVjdGlvbnNGcm9tT2Zmc2V0OihDR1BvaW50KW9mZnNldAoreworICAgIGF1dG8gc2Ny
b2xsVmlldyA9IF9zY3JvbGxWaWV3LmdldEF1dG9yZWxlYXNlZCgpOworICAgIGlmICghc2Nyb2xs
VmlldykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFVJRWRnZUluc2V0cyBjb250ZW50SW5z
ZXRzID0gc2Nyb2xsVmlldy5hZGp1c3RlZENvbnRlbnRJbnNldDsKKworICAgIENHU2l6ZSBjb250
ZW50U2l6ZSA9IHNjcm9sbFZpZXcuY29udGVudFNpemU7CisgICAgQ0dTaXplIHNjcm9sbFZpZXdT
aXplID0gc2Nyb2xsVmlldy5ib3VuZHMuc2l6ZTsKKworICAgIENHUG9pbnQgbWluaW11bUNvbnRl
bnRPZmZzZXQgPSBDR1BvaW50TWFrZSgtY29udGVudEluc2V0cy5sZWZ0LCAtY29udGVudEluc2V0
cy50b3ApOworICAgIENHUG9pbnQgbWF4aW11bUNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFrZShz
dGQ6Om1heChtaW5pbXVtQ29udGVudE9mZnNldC54LCBjb250ZW50U2l6ZS53aWR0aCArIGNvbnRl
bnRJbnNldHMucmlnaHQgLSBzY3JvbGxWaWV3U2l6ZS53aWR0aCksIHN0ZDo6bWF4KG1pbmltdW1D
b250ZW50T2Zmc2V0LnksIGNvbnRlbnRTaXplLmhlaWdodCArIGNvbnRlbnRJbnNldHMuYm90dG9t
IC0gc2Nyb2xsVmlld1NpemUuaGVpZ2h0KSk7CisKKyAgICBXZWJDb3JlOjpSZWN0RWRnZXM8Ym9v
bD4gZWRnZXM7CisKKyAgICBlZGdlcy5zZXRUb3Aob2Zmc2V0LnkgPiBtaW5pbXVtQ29udGVudE9m
ZnNldC55KTsKKyAgICBlZGdlcy5zZXRCb3R0b20ob2Zmc2V0LnkgPCBtYXhpbXVtQ29udGVudE9m
ZnNldC55KTsKKyAgICBlZGdlcy5zZXRMZWZ0KG9mZnNldC54ID4gbWluaW11bUNvbnRlbnRPZmZz
ZXQueCk7CisgICAgZWRnZXMuc2V0UmlnaHQob2Zmc2V0LnggPCBtYXhpbXVtQ29udGVudE9mZnNl
dC54KTsKKworICAgIHJldHVybiBlZGdlczsKK30KKworLSAoV2ViQ29yZTo6UmVjdEVkZ2VzPGJv
b2w+KXJ1YmJlcmJhbmRhYmxlRGlyZWN0aW9ucworeworICAgIGF1dG8gc2Nyb2xsVmlldyA9IF9z
Y3JvbGxWaWV3LmdldEF1dG9yZWxlYXNlZCgpOworICAgIGlmICghc2Nyb2xsVmlldykKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIFdlYkNvcmU6OlJlY3RFZGdlczxib29sPiBlZGdlczsKKwor
ICAgIGVkZ2VzLnNldFRvcChzY3JvbGxWaWV3Ll9jYW5TY3JvbGxZKTsKKyAgICBlZGdlcy5zZXRC
b3R0b20oZWRnZXMudG9wKCkpOworICAgIGVkZ2VzLnNldExlZnQoc2Nyb2xsVmlldy5fY2FuU2Ny
b2xsWCk7CisgICAgZWRnZXMuc2V0UmlnaHQoZWRnZXMubGVmdCgpKTsKIAotICAgIGF1dG8gY29u
dGVudE9mZnNldCA9IHZlbG9jaXR5LnNjYWxlZChhY2NlbGVyYXRpb25GYWN0b3IgKiBmcmFtZUR1
cmF0aW9uKTsKLSAgICBbX3Njcm9sbGFibGUgc2Nyb2xsQnlDb250ZW50T2Zmc2V0OmNvbnRlbnRP
ZmZzZXQgYW5pbWF0ZWQ6Tk9dOworICAgIHJldHVybiBlZGdlczsKIH0KIAogQGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351794</attachid>
            <date>2018-10-08 11:29:18 -0700</date>
            <delta_ts>2018-10-08 11:30:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190345-20181008112918.patch</filename>
            <type>text/plain</type>
            <size>44090</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2NjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZjMGRhNTUyYmIwYmNkOGMz
MzNhMzgxNWU1ZGRjNWVmN2E1OTVjZWQuLmIwMDVhMDJmMDgzYjljY2ZiODlmZmJmMzA3YjRmZjhk
YTM2YWM1YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ1IEBACisyMDE4LTEwLTA4ICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkanVzdCBrZXlib2Fy
ZCBzY3JvbGxpbmcgYW5pbWF0b3IgdG8gYmUgYSBiaXQgbW9yZSBwaHlzaWNhbAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwMzQ1CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8yMjk5NzY1ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciwg
d2hpY2ggd3JhcHMgV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yCisgICAgICAgIGFuZCBwcm92
aWRlcyBhIHJlYXNvbmFibGUgc2V0IG9mIGRlZmF1bHQgYmVoYXZpb3JzIGZvciBVSVNjcm9sbFZp
ZXcuCisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgb24gdGhlIHdheSB0byBXS0tleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IKKyAgICAgICAgYmVpbmcgcGxhdGZvcm0tIGFuZCB0b29sa2l0
LWFnbm9zdGljLCBhbmQgaGVscHMgYXZvaWQgYWRkaW5nIGEgd2hvbGUKKyAgICAgICAgYnVuY2gg
b2YgY29kZSB0byBXS0NvbnRlbnRWaWV3LgorCisgICAgICAgIEFkb3B0IFVJS2l0J3Mgc2Nyb2xs
LXRvLXRvcCBhbmltYXRpb24gY3VydmUgZm9yIHdob2xlLWRvY3VtZW50IHNjcm9sbHMuCisKKyAg
ICAgICAgQWRqdXN0IFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcidzIHBoeXNpY3M7IGl0IG5v
dyBzaW11bGF0ZXMgYSBzcHJpbmcKKyAgICAgICAgYXR0YWNoZWQgdG8gdGhlIHBhZ2Ugd2hlbiBk
ZWNlbGVyYXRpbmcuIFdoZW4gYSBrZXkgaXMgcHJlc3NlZCwgaXQgYXBwbGllcworICAgICAgICBh
IGNvbnN0YW50IGZvcmNlIHRvIHRoZSBwYWdlICh1cCB0byBzb21lIG1heGltdW0gdmVsb2NpdHkp
LiBXaGVuIHJlbGVhc2VkLAorICAgICAgICB0aGUgc3ByaW5nIGNhdXNlcyB0aGUgcGFnZSB0byBk
ZWNlbGVyYXRlIHNtb290aGx5LgorCisgICAgICAgIEFkZCBydWJiZXItYmFuZGluZyB0byBrZXli
b2FyZCBzY3JvbGxpbmcsIGJhc2VkIG9uIHRoZSBzYW1lIHNwcmluZyB0aGF0CisgICAgICAgIGRl
Y2VsZXJhdGVzIHRoZSBwYWdlLgorCisgICAgICAgIFJlbW92ZSB0aGUgaW5pdGlhbCBib3VuY2Ug
b24ga2V5ZG93biBiZWZvcmUgc3RhcnRpbmcgdGhlIHNtb290aCBzY3JvbGwuCisKKyAgICAgICAg
UmVtb3ZlIGFycm93IGtleSBjb21tYW5kcyBmcm9tIFdLQ29udGVudFZpZXc7IHRoaXMgYXZvaWRz
IGRvdWJsZS1wcm9jZXNzaW5nCisgICAgICAgIGluY29taW5nIGFycm93IGtleSBldmVudHMsIG1h
a2VzIHRoZSBldmVudCBzdHJlYW0gbWFrZSBtb3JlIHNlbnNlLCBhbmQgd2FzCisgICAgICAgIGVu
dGlyZWx5IHVubmVjZXNzYXJ5LgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQ
SS5oOgorICAgICAgICBBZGQgYSB3aWRlIHZhcmlldHkgb2YgdXNlZnVsIFNQSS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgUmVtb3ZlIF9zY3JvbGxC
eUNvbnRlbnRPZmZzZXQ6YW5pbWF0ZWQ6IGJlY2F1c2UgaXQncyBvbmx5IHVzZWQgYnkKKyAgICAg
ICAgdGhlIGtleWJvYXJkIHNjcm9sbGluZyBtZWNoYW5pc20uCisKKyAgICAgICAgUmVtb3ZlIF9h
cnJvd0tleSBiZWNhdXNlIHdlJ3JlIHJlbW92aW5nIHRoZSBhcnJvdyBrZXkgY29tbWFuZHMuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IHNldHVwSW50ZXJhY3Rpb25dKToKKyAgICAgICAgQ3JlYXRlIGEg
V0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciAod2hpY2gga25vd3MgaG93IHRvIGRpcmVjdGx5
CisgICAgICAgIG1hbmlwdWxhdGUgYSBVSVNjcm9sbFZpZXcpIGluc3RlYWQgb2YgYSBXS0tleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IKKyAgICAgICAgKHdoaWNoIHJlcXVpcmVzIGl0cyBjbGllbnRz
IHRvIGltcGxlbWVudCBldmVyeXRoaW5nIGluIHRlcm1zIG9mIGFuCisgICAgICAgIGFic3RyYWN0
IGludGVyZmFjZS4KKworICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNjcm9sbFZpZXdXaWxsU3Rh
cnRQYW5PclBpbmNoR2VzdHVyZV0pOgorICAgICAgICBJbmZvcm0gdGhlIGtleWJvYXJkIHNjcm9s
bGluZyBhbmltYXRvciB0aGF0IHRoZSB1c2VyIGlzIGdvaW5nIHRvIHN0YXJ0CisgICAgICAgIGFu
IGludGVyYWN0aXZlIGdlc3R1cmUgdGhhdCBuZWVkcyBjb250cm9sIG9mIHRoZSBzY3JvbGwgdmll
dywgc28gaXQKKyAgICAgICAgY2FuIHN0b3AgaXRzIGN1cnJlbnQgYW5pbWF0ZWQgc2Nyb2xsLgor
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2FuUGVyZm9ybUFjdGlvbkZvcldlYlZpZXc6d2l0
aFNlbmRlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBrZXlDb21tYW5kc10pOgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hcnJvd0tleUZvcldlYlZpZXc6XSk6IERlbGV0ZWQuCisg
ICAgICAgIFJlbW92ZSBhcnJvdyBrZXkgY29tbWFuZHMuCisKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBrZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvcjpkaXN0YW5jZUZvckluY3JlbWVudDpdKToK
KyAgICAgICAgU2NhbGUgZnJvbSBjb250ZW50IHRvIFdLV2ViVmlldyBjb29yZGluYXRlIHNwYWNl
OyB0aGUga2V5Ym9hcmQgc2Nyb2xsaW5nCisgICAgICAgIGFuaW1hdG9yIG9wZXJhdGVzIGluIFdL
V2ViVmlldyBjb29yZGluYXRlcy4gVGhpcyB3YXMgYnJva2VuIGJlZm9yZS4KKworICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGtleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yV2lsbFNjcm9sbDpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpc1Njcm9sbGFibGVGb3JLZXlib2FyZFNjcm9sbFZp
ZXdBbmltYXRvcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpc0tleWJvYXJkU2Nyb2xs
YWJsZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRpc3RhbmNlRm9yU2Ny
b2xsaW5nSW5jcmVtZW50Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNj
cm9sbEJ5Q29udGVudE9mZnNldDphbmltYXRlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgUmVpbXBs
ZW1lbnQgdGhlc2UgYXMga2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgZGVsZWdhdGUgbWV0aG9k
cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9y
Lmg6CisgICAgICAgIEFkZCBXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yLCBoaWRlIHRoZSBp
bnRlcmZhY2UgZm9yCisgICAgICAgIFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciBpdHNlbGYg
aW4gdGhlIGltcGxlbWVudGF0aW9uIGZpbGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dL
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yIGluaXRXaXRoU2Nyb2xsYWJsZTpdKToKKyAgICAgICAgKC1bV0tLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yIHBhcmFtZXRlcnNdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNj
cm9sbGluZ0FuaW1hdG9yIGludmFsaWRhdGVdKToKKyAgICAgICAgKHVuaXRWZWN0b3IpOgorICAg
ICAgICBSZXR1cm4gYSB1bml0IHZlY3RvciBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorCisgICAg
ICAgIChwZXJwZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9yKToKKyAgICAgICAgUmV0dXJuIGEg
cG9zaXRpdmUgdW5pdCB2ZWN0b3IgcGVycGVuZGljdWxhciB0byB0aGUgYXhpcyBvZiB0aGUgZ2l2
ZW4gZGlyZWN0aW9uLgorICAgICAgICBVc2VmdWwgZm9yIG11bHRpcGx5aW5nIHdpdGggYW5vdGhl
ciB2ZWN0b3IgdG8gcmVtb3ZlIHRoZSBjb21wb25lbnQgaW4gdGhlCisgICAgICAgIGF4aXMgb2Yg
dGhlIGdpdmVuIGRpcmVjdGlvbi4KKworICAgICAgICAoYm94U2lkZSk6CisgICAgICAgIENvbnZl
cnQgU2Nyb2xsaW5nRGlyZWN0aW9uIHRvIFdlYkNvcmU6OlBoeXNpY2FsQm94U2lkZSwgZm9yIHVz
ZSB3aXRoIFJlY3RFZGdlcy4KKworICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3Iga2V5Ym9hcmRTY3JvbGxGb3JFdmVudDpdKToKKyAgICAgICAgSW5zdGVhZCBvZiBqdXN0IHJl
dHVybmluZyB0aGUgZGVzaXJlZCBpbmNyZW1lbnQsIGNvbXB1dGUgZXZlcnl0aGluZyB3ZSdsbCBu
ZWVkCisgICAgICAgIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHNjcm9sbCAoaW5jbHVkaW5nIHRo
ZSBmb3JjZSBhcHBsaWVkLCBtYXhpbXVtCisgICAgICAgIHZlbG9jaXR5LCBldGMuKSBhbmQgcmV0
dXJuIHRoZW0gdG9nZXRoZXIuCisKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yIGJlZ2luV2l0aEV2ZW50Ol0pOgorICAgICAgICBVc2UgdGhlIHNjcm9sbGFibGUncyBuYXRp
dmUgc2Nyb2xsLXRvLWV4dGVudCBhbmltYXRpb24gKGUuZy4gVUlTY3JvbGxWaWV3J3MKKyAgICAg
ICAgc2Nyb2xsLXRvLXRvcCBjdXJ2ZSkgZm9yIHdob2xlLWRvY3VtZW50IHNjcm9sbHMuCisKKyAg
ICAgICAgUmVtb3ZlIHRoZSBmaXJzdCBkaXNjcmV0ZSBzY3JvbGw7IHN0YXJ0IHRoZSBzbW9vdGgg
c2Nyb2xsIGltbWVkaWF0ZWx5LgorCisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvciBoYW5kbGVLZXlFdmVudDpdKToKKyAgICAgICAgKGZhcnRoZXN0UG9pbnRJbkRpcmVjdGlv
bik6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciBzdG9wQW5pbWF0ZWRT
Y3JvbGxdKToKKyAgICAgICAgU3RvcCB0aGUgY3VycmVudCBzY3JvbGwuIExldCB0aGUgc3ByaW5n
IGNvYXN0IHRvIGl0cyBuYXR1cmFsIHN0b3BwaW5nCisgICAgICAgIHBvaW50IGdpdmVuIHRoZSBz
eXN0ZW0ncyBjdXJyZW50IGVuZXJneSwgdW5sZXNzIHRoYXQgc3RvcHBpbmcgcG9pbnQgaXMKKyAg
ICAgICAgbGVzcyB0aGFuIG9uZSBpbmNyZW1lbnQgZnJvbSB0aGUgc3RhcnRpbmcgcG9pbnQuIElu
IHRoYXQgY2FzZSwgd2UgYXR0YWNoCisgICAgICAgIHRoZSBzcHJpbmcgdG8gL3RoYXQvIHBvaW50
IGFuZCBsZXQgaXQgcnVuLgorCisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRv
ciBzdGFydERpc3BsYXlMaW5rSWZOZWVkZWRdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yIHN0b3BEaXNwbGF5TGlua10pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0b3Igd2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGxdKToKKyAgICAgICAgSW1t
ZWRpYXRlbHkgc3RvcCBhbGwgbW90aW9uIGlmIHRoZSB1c2VyIHRvdWNoZXMgdGhlIHNjcmVlbiB0
byBzY3JvbGwKKyAgICAgICAgb3Igem9vbSB3aXRoIGZpbmdlcnMuCisKKyAgICAgICAgKC1bV0tL
ZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIGRpc3BsYXlMaW5rRmlyZWQ6XSk6CisgICAgICAgIFVw
ZGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIHNjcm9sbGFibGUgYmFzZWQgb24gdGhlIGFwcGxpZWQg
Zm9yY2UgYW5kIHNwcmluZy4KKyAgICAgICAgU2VlIHRoZSBjb21tZW50cyBpbiB0aGlzIGZ1bmN0
aW9uIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvciBpbml0XSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
aW5pdFdpdGhTY3JvbGxWaWV3Ol0pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0Fu
aW1hdG9yIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRv
ciBpbnZhbGlkYXRlXSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
c2V0RGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
d2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGxdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9s
bFZpZXdBbmltYXRvciBiZWdpbldpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNj
cm9sbFZpZXdBbmltYXRvciBoYW5kbGVLZXlFdmVudDpdKToKKyAgICAgICAgKC1bV0tLZXlib2Fy
ZFNjcm9sbFZpZXdBbmltYXRvciBpc0tleWJvYXJkU2Nyb2xsYWJsZV0pOgorICAgICAgICAoLVtX
S0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIGRpc3RhbmNlRm9ySW5jcmVtZW50Ol0pOgorICAg
ICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIHNjcm9sbFRvQ29udGVudE9mZnNl
dDphbmltYXRlZDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciBz
Y3JvbGxXaXRoU2Nyb2xsVG9FeHRlbnRBbmltYXRpb25UbzpdKToKKyAgICAgICAgKC1bV0tLZXli
b2FyZFNjcm9sbFZpZXdBbmltYXRvciBjb250ZW50T2Zmc2V0XSk6CisgICAgICAgICgtW1dLS2V5
Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgYm91bmRlZENvbnRlbnRPZmZzZXQ6XSk6CisgICAgICAg
ICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgaW50ZXJhY3RpdmVTY3JvbGxWZWxvY2l0
eV0pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIHNjcm9sbGFibGVE
aXJlY3Rpb25zRnJvbU9mZnNldDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvciBydWJiZXJiYW5kYWJsZURpcmVjdGlvbnNdKToKKyAgICAgICAgQWRkIFdLS2V5Ym9h
cmRTY3JvbGxWaWV3QW5pbWF0b3IsIHdoaWNoIHdyYXBzIFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvcgorICAgICAgICBhbmQgcHJvdmlkZXMgYW5pbWF0ZWQga2V5Ym9hcmQgc2Nyb2xsaW5nIGZv
ciBhIFVJU2Nyb2xsVmlldyB3aXRob3V0IG11Y2gKKyAgICAgICAgYWRkaXRpb25hbCBwbHVtYmlu
ZyB3b3JrLiBJdCBjb250YWlucyByZWFzb25hYmxlIGRlZmF1bHQgYmVoYXZpb3JzLAorICAgICAg
ICB3aXRoIGEgZmV3IG9wdGlvbmFsIGRlbGVnYXRlIG1ldGhvZHMgZm9yIGN1c3RvbWl6YXRpb24u
CisKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIF9zY3JvbGxPZmZzZXRG
b3JFdmVudDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yIHN0YXJ0QW5pbWF0ZWRTY3JvbGxdKTogRGVsZXRlZC4KKwogMjAxOC0wOS0yOSAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjIzNjYzMS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
c3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0
U1BJLmgKaW5kZXggYWFlY2EwZWZjYjUzODQzOThmODE5Y2NmZWFkNTg2N2IxNzIzNzQxMC4uYjhi
OTkxMTM0MDBmZjk0MTNkZDdjMTU5YTU4OTdiMWU1Y2QwNzBhNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTMyOCw2ICszMjgsOCBAQCB0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBVSVNjcm9sbFZpZXdJbmRpY2F0b3JJbnNldEFkanVzdG1lbnRCZWhh
dmlvcikgewogLSAodm9pZClfc3RvcFNjcm9sbGluZ0FuZFpvb21pbmdBbmltYXRpb25zOwogLSAo
dm9pZClfem9vbVRvQ2VudGVyOihDR1BvaW50KWNlbnRlciBzY2FsZTooQ0dGbG9hdClzY2FsZSBk
dXJhdGlvbjooQ0ZUaW1lSW50ZXJ2YWwpZHVyYXRpb24gZm9yY2U6KEJPT0wpZm9yY2U7CiAtICh2
b2lkKV96b29tVG9DZW50ZXI6KENHUG9pbnQpY2VudGVyIHNjYWxlOihDR0Zsb2F0KXNjYWxlIGR1
cmF0aW9uOihDRlRpbWVJbnRlcnZhbClkdXJhdGlvbjsKKy0gKGRvdWJsZSlfaG9yaXpvbnRhbFZl
bG9jaXR5OworLSAoZG91YmxlKV92ZXJ0aWNhbFZlbG9jaXR5OwogQHByb3BlcnR5IChub25hdG9t
aWMsIGdldHRlcj1pc1pvb21FbmFibGVkKSBCT09MIHpvb21FbmFibGVkOwogQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9X2lzQW5pbWF0aW5nWm9vbSkgQk9PTCBpc0FuaW1h
dGluZ1pvb207CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1faXNBbmlt
YXRpbmdTY3JvbGwpIEJPT0wgaXNBbmltYXRpbmdTY3JvbGw7CkBAIC0xMDIyLDYgKzEwMjQsMTAg
QEAgdHlwZWRlZiBOU0ludGVnZXIgVUlDb21wb3NpdGluZ01vZGU7CiAtICh2b2lkKV9hZGp1c3RG
b3JBdXRvbWF0aWNLZXlib2FyZEluZm86KE5TRGljdGlvbmFyeSAqKWluZm8gYW5pbWF0ZWQ6KEJP
T0wpYW5pbWF0ZWQgbGFzdEFkanVzdG1lbnQ6KENHRmxvYXQqKWxhc3RBZGp1c3RtZW50OwogLSAo
Qk9PTClfaXNTY3JvbGxpbmdUb1RvcDsKIC0gKENHUG9pbnQpX2FuaW1hdGVkVGFyZ2V0T2Zmc2V0
OworLSAoQk9PTClfY2FuU2Nyb2xsWDsKKy0gKEJPT0wpX2NhblNjcm9sbFk7CistICh2b2lkKV9z
ZXRDb250ZW50T2Zmc2V0V2l0aERlY2VsZXJhdGlvbkFuaW1hdGlvbjooQ0dQb2ludCljb250ZW50
T2Zmc2V0OworLSAoQ0dQb2ludClfYWRqdXN0ZWRDb250ZW50T2Zmc2V0Rm9yQ29udGVudE9mZnNl
dDooQ0dQb2ludCljb250ZW50T2Zmc2V0OwogQGVuZAogCiBAaW50ZXJmYWNlIFVJUGVyaXBoZXJh
bEhvc3QgKElQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tCmluZGV4IDg3OWY5MzI1OWM2ZDMxOTJiMzY0NjZjZTZhYmI1MGQ1M2Y1YTY0MWMuLjQz
OTFjYWIzNDMwNTg2ODhhYmMzM2E5ZThjY2MzYTE4YmRhY2U0NGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtMjEyOSwyNCArMjEyOSw2
IEBAIC0gKEJPT0wpX3Njcm9sbFRvUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qg
b3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS0gKHZv
aWQpX3Njcm9sbEJ5Q29udGVudE9mZnNldDooV2ViQ29yZTo6RmxvYXRQb2ludCljb250ZW50T2Zm
c2V0RGVsdGEgYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKLXsKLSAgICBXZWJDb3JlOjpGbG9hdFBv
aW50IHNjYWxlZE9mZnNldERlbHRhID0gY29udGVudE9mZnNldERlbHRhOwotICAgIENHRmxvYXQg
em9vbVNjYWxlID0gY29udGVudFpvb21TY2FsZShzZWxmKTsKLSAgICBzY2FsZWRPZmZzZXREZWx0
YS5zY2FsZSh6b29tU2NhbGUpOwotCi0gICAgQ0dQb2ludCBjdXJyZW50T2Zmc2V0ID0gW19zY3Jv
bGxWaWV3IF9pc0FuaW1hdGluZ1Njcm9sbF0gPyBbX3Njcm9sbFZpZXcgX2FuaW1hdGVkVGFyZ2V0
T2Zmc2V0XSA6IFtfc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XTsKLSAgICBDR1BvaW50IGJvdW5k
ZWRPZmZzZXQgPSBjb250ZW50T2Zmc2V0Qm91bmRlZEluVmFsaWRSYW5nZShfc2Nyb2xsVmlldy5n
ZXQoKSwgY3VycmVudE9mZnNldCArIHNjYWxlZE9mZnNldERlbHRhKTsKLQotICAgIGlmIChDR1Bv
aW50RXF1YWxUb1BvaW50KGJvdW5kZWRPZmZzZXQsIGN1cnJlbnRPZmZzZXQpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgW19jb250ZW50VmlldyB3aWxsU3RhcnRab29tT3JTY3JvbGxdOwotCi0gICAg
TE9HX1dJVEhfU1RSRUFNKFZpc2libGVSZWN0cywgc3RyZWFtIDw8ICJfc2Nyb2xsQnlDb250ZW50
T2Zmc2V0OiBzY3JvbGxpbmcgdG8gIiA8PCBXZWJDb3JlOjpGbG9hdFBvaW50KGJvdW5kZWRPZmZz
ZXQpKTsKLQotICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OmJvdW5kZWRPZmZzZXQg
YW5pbWF0ZWQ6YW5pbWF0ZWRdOwotfQotCiAtICh2b2lkKV96b29tT3V0V2l0aE9yaWdpbjooV2Vi
Q29yZTo6RmxvYXRQb2ludClvcmlnaW4gYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKIHsKICAgICBb
c2VsZiBfem9vbVRvUG9pbnQ6b3JpZ2luIGF0U2NhbGU6W19zY3JvbGxWaWV3IG1pbmltdW1ab29t
U2NhbGVdIGFuaW1hdGVkOmFuaW1hdGVkXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKaW5kZXggYTFhMDQ1NjBjMmIwNzdm
Njk0MDdhZDhlZmUwNGUzNjdhYjg4MzFlOS4uNzE4OWNhMGU2ZmE3MzRkMDU2ZDUwMjYyOTlhNWFj
NjRlYjdlMWM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld0ludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlld0ludGVybmFsLmgKQEAgLTk3LDcgKzk3LDYgQEAgc3RydWN0IFByaW50SW5m
bzsKIAogLSAodm9pZClfc2Nyb2xsVG9Db250ZW50U2Nyb2xsUG9zaXRpb246KFdlYkNvcmU6OkZs
b2F0UG9pbnQpc2Nyb2xsUG9zaXRpb24gc2Nyb2xsT3JpZ2luOihXZWJDb3JlOjpJbnRQb2ludClz
Y3JvbGxPcmlnaW47CiAtIChCT09MKV9zY3JvbGxUb1JlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl0
YXJnZXRSZWN0IG9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4gbWluaW11bVNjcm9s
bERpc3RhbmNlOihmbG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFuY2U7Ci0tICh2b2lkKV9zY3JvbGxC
eUNvbnRlbnRPZmZzZXQ6KFdlYkNvcmU6OkZsb2F0UG9pbnQpb2Zmc2V0IGFuaW1hdGVkOihCT09M
KWFuaW1hdGVkOwogLSAodm9pZClfem9vbVRvRm9jdXNSZWN0OihXZWJDb3JlOjpGbG9hdFJlY3Qp
Zm9jdXNlZEVsZW1lbnRSZWN0IHNlbGVjdGlvblJlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdClzZWxl
Y3Rpb25SZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzIGluc2lkZUZpeGVkOihCT09MKWluc2lkZUZp
eGVkIGZvbnRTaXplOihmbG9hdClmb250U2l6ZSBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5pbXVt
U2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlIGFsbG93U2NhbGluZzooQk9P
TClhbGxvd1NjYWxpbmcgZm9yY2VTY3JvbGw6KEJPT0wpZm9yY2VTY3JvbGw7CiAtIChCT09MKV96
b29tVG9SZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCB3aXRoT3JpZ2luOihXZWJD
b3JlOjpGbG9hdFBvaW50KW9yaWdpbiBmaXRFbnRpcmVSZWN0OihCT09MKWZpdEVudGlyZVJlY3Qg
bWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1h
eGltdW1TY2FsZSBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0KW1pbmltdW1TY3JvbGxEaXN0
YW5jZTsKIC0gKHZvaWQpX3pvb21PdXRXaXRoT3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9y
aWdpbiBhbmltYXRlZDooQk9PTClhbmltYXRlZDsKQEAgLTEzNSw3ICsxMzQsNiBAQCBzdHJ1Y3Qg
UHJpbnRJbmZvOwogLSAodm9pZClfZGlkQ2hhbmdlRWRpdG9yU3RhdGU7CiAKIC0gKHZvaWQpX2Fk
ZFNob3J0Y3V0OihpZClzZW5kZXI7Ci0tICh2b2lkKV9hcnJvd0tleTooaWQpc2VuZGVyOwogLSAo
dm9pZClfZGVmaW5lOihpZClzZW5kZXI7CiAtICh2b2lkKV9sb29rdXA6KGlkKXNlbmRlcjsKIC0g
KHZvaWQpX3NoYXJlOihpZClzZW5kZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKaW5kZXggYTIzOWRlOWRjNWUxZWMw
ODU0NmVkMzFlYTM3MmQwZGM1MTQ0N2M1MC4uMWNjMDlkYzRmYTU5MTRkMzExZWRhMjdmOGFkMjZm
YjE4ZDFlMmM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApAQCAtMTA2LDcgKzEwNiw2IEBAIHR5cGVkZWYgc3Rk
OjpwYWlyPFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3QsIEludGVyYWN0aW9u
SW5mb3JtYXRpb25DCiAKICNkZWZpbmUgRk9SX0VBQ0hfV0tDT05URU5UVklFV19BQ1RJT04oTSkg
XAogICAgIE0oX2FkZFNob3J0Y3V0KSBcCi0gICAgTShfYXJyb3dLZXkpIFwKICAgICBNKF9kZWZp
bmUpIFwKICAgICBNKF9sb29rdXApIFwKICAgICBNKF9wcm9tcHRGb3JSZXBsYWNlKSBcCkBAIC0y
MzUsNyArMjM0LDcgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKICAgICAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpJbnB1dFZpZXdVcGRhdGVEZWZlcnJlcj4gX2lucHV0Vmll
d1VwZGF0ZURlZmVycmVyOwogCi0gICAgUmV0YWluUHRyPFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvcj4gX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I7CisgICAgUmV0YWluUHRyPFdLS2V5Ym9h
cmRTY3JvbGxWaWV3QW5pbWF0b3I+IF9rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOwogCiAgICAg
Qk9PTCBfaXNFZGl0YWJsZTsKICAgICBCT09MIF9zaG93aW5nVGV4dFN0eWxlT3B0aW9uczsKQEAg
LTI4MywxMSArMjgyLDEwIEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0aW9uRGF0YSB7CiAKIEBlbmQK
IAotQGludGVyZmFjZSBXS0NvbnRlbnRWaWV3IChXS0ludGVyYWN0aW9uKSA8VUlHZXN0dXJlUmVj
b2duaXplckRlbGVnYXRlLCBVSVRleHRBdXRvc2Nyb2xsaW5nLCBVSVRleHRJbnB1dE11bHRpRG9j
dW1lbnQsIFVJVGV4dElucHV0UHJpdmF0ZSwgVUlXZWJGb3JtQWNjZXNzb3J5RGVsZWdhdGUsIFVJ
V2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVdLSW50ZXJhY3Rpb25W
aWV3UHJvdG9jb2wsIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnREZWxlZ2F0ZSwgV0tGaWxlVXBsb2Fk
UGFuZWxEZWxlZ2F0ZQorQGludGVyZmFjZSBXS0NvbnRlbnRWaWV3IChXS0ludGVyYWN0aW9uKSA8
VUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVRleHRBdXRvc2Nyb2xsaW5nLCBVSVRleHRJ
bnB1dE11bHRpRG9jdW1lbnQsIFVJVGV4dElucHV0UHJpdmF0ZSwgVUlXZWJGb3JtQWNjZXNzb3J5
RGVsZWdhdGUsIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVdL
SW50ZXJhY3Rpb25WaWV3UHJvdG9jb2wsIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnREZWxlZ2F0ZSwg
V0tGaWxlVXBsb2FkUGFuZWxEZWxlZ2F0ZSwgV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvckRl
bGVnYXRlCiAjaWYgIVBMQVRGT1JNKFdBVENIT1MpICYmICFQTEFURk9STShBUFBMRVRWKQogICAg
ICwgV0tTaGFyZVNoZWV0RGVsZWdhdGUKICNlbmRpZgotICAgICwgV0tLZXlib2FyZFNjcm9sbGFi
bGUKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKICAgICAsIFVJRHJhZ0ludGVyYWN0aW9u
RGVsZWdhdGUsIFVJRHJvcEludGVyYWN0aW9uRGVsZWdhdGUKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0K
aW5kZXggN2U2NGE1ZWUyY2YxYmI4ZGJkNzk5YmM4NDZmNzNhNDEzNWEwYTc2ZC4uN2U2NDViOTU2
NjI5Y2M2MmE5OTZiNjI0NjE5NDJjNmM2NGFmOWNlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0xMjEs
NyArMTIxLDcgQEAKICNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XS1BsYXRmb3JtRmlsZVVwbG9h
ZFBhbmVsLm1tPgogI2VuZGlmCiAKLUBpbnRlcmZhY2UgVUlFdmVudChVSUV2ZW50SW50ZXJuYWwp
CitAaW50ZXJmYWNlIFVJRXZlbnQgKFVJRXZlbnRJbnRlcm5hbCkKIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBhc3NpZ24pIFVJS2V5Ym9hcmRJbnB1dEZsYWdzIF9pbnB1dEZsYWdzOwogQGVuZAogCkBA
IC02MzgsNyArNjM4LDggQEAgLSAodm9pZClzZXR1cEludGVyYWN0aW9uCiAgICAgICAgIFtzZWxm
LnN1cGVydmlldyBhZGRTdWJ2aWV3Ol9pbnRlcmFjdGlvblZpZXdzQ29udGFpbmVyVmlldy5nZXQo
KV07CiAgICAgfQogCi0gICAgX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgPSBhZG9wdE5TKFtb
V0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIGFsbG9jXSBpbml0V2l0aFNjcm9sbGFibGU6c2Vs
Zl0pOworICAgIF9rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yID0gYWRvcHROUyhbW1dLS2V5Ym9h
cmRTY3JvbGxWaWV3QW5pbWF0b3IgYWxsb2NdIGluaXRXaXRoU2Nyb2xsVmlldzpfd2ViVmlldy5z
Y3JvbGxWaWV3XSk7CisgICAgW19rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIHNldERlbGVnYXRl
OnNlbGZdOwogCiAgICAgW3NlbGYubGF5ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBmb3JLZXlQYXRoOkAi
dHJhbnNmb3JtIiBvcHRpb25zOk5TS2V5VmFsdWVPYnNlcnZpbmdPcHRpb25Jbml0aWFsIGNvbnRl
eHQ6bmlsXTsKIApAQCAtMjA2OCw2ICsyMDY5LDggQEAgLSAodm9pZClzY3JvbGxWaWV3V2lsbFN0
YXJ0UGFuT3JQaW5jaEdlc3R1cmUKIHsKICAgICBfcGFnZS0+aGlkZVZhbGlkYXRpb25NZXNzYWdl
KCk7CiAKKyAgICBbX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Igd2lsbFN0YXJ0SW50ZXJhY3Rp
dmVTY3JvbGxdOworCiAgICAgX2NhblNlbmRUb3VjaEV2ZW50c0FzeW5jaHJvbm91c2x5ID0gWUVT
OwogfQogCkBAIC0yMzExLDEwICsyMzE0LDcgQEAgLSAoQk9PTCljYW5QZXJmb3JtQWN0aW9uOihT
RUwpYWN0aW9uIHdpdGhTZW5kZXI6KGlkKXNlbmRlcgogfQogCiAtIChCT09MKWNhblBlcmZvcm1B
Y3Rpb25Gb3JXZWJWaWV3OihTRUwpYWN0aW9uIHdpdGhTZW5kZXI6KGlkKXNlbmRlcgotewotICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9hcnJvd0tleTopKQotICAgICAgICByZXR1cm4gW3Nl
bGYgaXNGaXJzdFJlc3BvbmRlcl07Ci0gICAgICAgIAoreyAgICAgICAgCiAgICAgYXV0byBlZGl0
b3JTdGF0ZSA9IF9wYWdlLT5lZGl0b3JTdGF0ZSgpOwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKF9zaG93VGV4dFN0eWxlT3B0aW9uczopKQogICAgICAgICByZXR1cm4gZWRpdG9yU3RhdGUu
aXNDb250ZW50UmljaGx5RWRpdGFibGUgJiYgZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5nZSAm
JiAhX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zOwpAQCAtMzA5MCw0NCArMzA5MCwxNCBAQCAtICh2
b2lkKWFjY2Vzc29yeURvbmUKIAogLSAoTlNBcnJheSAqKWtleUNvbW1hbmRzCiB7Ci0gICAgc3Rh
dGljIE5TQXJyYXkqIG5vbkVkaXRhYmxlS2V5Q29tbWFuZHMgPSBbQFsKLSAgICAgICBbVUlLZXlD
b21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dFVwQXJyb3cgbW9kaWZpZXJGbGFn
czowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAgICAgIFtVSUtleUNvbW1hbmQg
a2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0RG93bkFycm93IG1vZGlmaWVyRmxhZ3M6MCBh
Y3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNv
bW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dExlZnRBcnJvdyBtb2RpZmllckZsYWdzOjAgYWN0aW9u
OkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5k
V2l0aElucHV0OlVJS2V5SW5wdXRSaWdodEFycm93IG1vZGlmaWVyRmxhZ3M6MCBhY3Rpb246QHNl
bGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICAKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNv
bW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dFVwQXJyb3cgbW9kaWZpZXJGbGFnczpVSUtleU1vZGlm
aWVyQ29tbWFuZCBhY3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlD
b21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dERvd25BcnJvdyBtb2RpZmllckZs
YWdzOlVJS2V5TW9kaWZpZXJDb21tYW5kIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAot
ICAgICAgIAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlu
cHV0VXBBcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJTaGlmdCBhY3Rpb246QHNlbGVj
dG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRoSW5w
dXQ6VUlLZXlJbnB1dERvd25BcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJTaGlmdCBh
Y3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNv
bW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dExlZnRBcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9k
aWZpZXJTaGlmdCBhY3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlD
b21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dFJpZ2h0QXJyb3cgbW9kaWZpZXJG
bGFnczpVSUtleU1vZGlmaWVyU2hpZnQgYWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0g
ICAgICAgCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0aElucHV0OlVJS2V5SW5w
dXRVcEFycm93IG1vZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmllckFsdGVybmF0ZSBhY3Rpb246QHNl
bGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRo
SW5wdXQ6VUlLZXlJbnB1dERvd25BcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJBbHRl
cm5hdGUgYWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAgICAgW1VJS2V5Q29tbWFu
ZCBrZXlDb21tYW5kV2l0aElucHV0OlVJS2V5SW5wdXRMZWZ0QXJyb3cgbW9kaWZpZXJGbGFnczpV
SUtleU1vZGlmaWVyQWx0ZXJuYXRlIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAg
ICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0UmlnaHRBcnJv
dyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJBbHRlcm5hdGUgYWN0aW9uOkBzZWxlY3Rvcihf
YXJyb3dLZXk6KV0sCi0gICAgICAgCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0
aElucHV0OkAiICIgbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5Oild
LAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpAIiAiIG1vZGlmaWVy
RmxhZ3M6VUlLZXlNb2RpZmllclNoaWZ0IGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAot
ICAgICAgIAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlu
cHV0UGFnZURvd24gbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5Oild
LAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0UGFn
ZURvd24gbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAg
IF0gcmV0YWluXTsKKyAgICBpZiAoIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRh
YmxlKQorICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgc3RhdGljIE5TQXJyYXkqIGVkaXRhYmxl
S2V5Q29tbWFuZHMgPSBbQFsKICAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRoSW5w
dXQ6QCJcdCIgbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX25leHRBY2Nlc3NvcnlU
YWI6KV0sCiAgICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0aElucHV0OkAiXHQiIG1v
ZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmllclNoaWZ0IGFjdGlvbjpAc2VsZWN0b3IoX3ByZXZBY2Nl
c3NvcnlUYWI6KV0KICAgICBdIHJldGFpbl07Ci0gICAgCi0gICAgcmV0dXJuIChfcGFnZS0+ZWRp
dG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkgPyBlZGl0YWJsZUtleUNvbW1hbmRzIDogbm9u
RWRpdGFibGVLZXlDb21tYW5kczsKLX0KLQotLSAodm9pZClfYXJyb3dLZXlGb3JXZWJWaWV3Oihp
ZClzZW5kZXIKLXsKLSAgICBVSUtleUNvbW1hbmQqIGNvbW1hbmQgPSBzZW5kZXI7Ci0gICAgW3Nl
bGYgaGFuZGxlS2V5RXZlbnQ6Y29tbWFuZC5fdHJpZ2dlcmluZ0V2ZW50XTsKKyAgICByZXR1cm4g
ZWRpdGFibGVLZXlDb21tYW5kczsKIH0KIAogLSAodm9pZClfbmV4dEFjY2Vzc29yeVRhYjooaWQp
c2VuZGVyCkBAIC0zODY0LDcgKzM4MzQsNyBAQCAtIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDoo
OjpXZWJFdmVudCAqKWV2ZW50IGlzQ2hhckV2ZW50OihCT09MKWlzQ2hhckV2ZW50CiAgICAgcmV0
dXJuIE5POwogfQogCi0tIChCT09MKWlzS2V5Ym9hcmRTY3JvbGxhYmxlCistIChCT09MKWlzU2Ny
b2xsYWJsZUZvcktleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yOihXS0tleWJvYXJkU2Nyb2xsVmll
d0FuaW1hdG9yICopYW5pbWF0b3IKIHsKICAgICBpZiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXND
b250ZW50RWRpdGFibGUpCiAgICAgICAgIHJldHVybiBOTzsKQEAgLTM4NzUsMjMgKzM4NDUsMjUg
QEAgLSAoQk9PTClpc0tleWJvYXJkU2Nyb2xsYWJsZQogICAgIHJldHVybiBZRVM7CiB9CiAKLS0g
KENHRmxvYXQpZGlzdGFuY2VGb3JTY3JvbGxpbmdJbmNyZW1lbnQ6KFNjcm9sbGluZ0luY3JlbWVu
dClpbmNyZW1lbnQKKy0gKENHRmxvYXQpa2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6KFdLS2V5
Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgKilhbmltYXRvciBkaXN0YW5jZUZvckluY3JlbWVudDoo
U2Nyb2xsaW5nSW5jcmVtZW50KWluY3JlbWVudAogeworICAgIENHRmxvYXQgc2VsZlNjYWxlID0g
c2VsZi5sYXllci50cmFuc2Zvcm0ubTExOworCiAgICAgc3dpdGNoIChpbmNyZW1lbnQpIHsKICAg
ICBjYXNlIFNjcm9sbGluZ0luY3JlbWVudDo6RG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiBzZWxm
LmJvdW5kcy5zaXplLmhlaWdodDsKKyAgICAgICAgcmV0dXJuIHNlbGYuYm91bmRzLnNpemUuaGVp
Z2h0ICogc2VsZlNjYWxlOwogICAgIGNhc2UgU2Nyb2xsaW5nSW5jcmVtZW50OjpQYWdlOgotICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6U2Nyb2xsYmFyOjpwYWdlU3RlcChfcGFnZS0+dW5vYnNjdXJl
ZENvbnRlbnRSZWN0KCkuaGVpZ2h0KCksIHNlbGYuYm91bmRzLnNpemUuaGVpZ2h0KTsKKyAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OlNjcm9sbGJhcjo6cGFnZVN0ZXAoX3BhZ2UtPnVub2JzY3VyZWRD
b250ZW50UmVjdCgpLmhlaWdodCgpLCBzZWxmLmJvdW5kcy5zaXplLmhlaWdodCkgKiBzZWxmU2Nh
bGU7CiAgICAgY2FzZSBTY3JvbGxpbmdJbmNyZW1lbnQ6OkxpbmU6Ci0gICAgICAgIHJldHVybiBX
ZWJDb3JlOjpTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkgKiBzZWxmU2NhbGU7CiAgICAg
fQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwogfQogCi0tICh2b2lk
KXNjcm9sbEJ5Q29udGVudE9mZnNldDooV2ViQ29yZTo6RmxvYXRQb2ludClvZmZzZXQgYW5pbWF0
ZWQ6KEJPT0wpYW5pbWF0ZWQKKy0gKHZvaWQpa2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3JXaWxs
U2Nyb2xsOihXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yICopYW5pbWF0b3IKIHsKLSAgICBb
X3dlYlZpZXcgX3Njcm9sbEJ5Q29udGVudE9mZnNldDpvZmZzZXQgYW5pbWF0ZWQ6YW5pbWF0ZWRd
OworICAgIFtzZWxmIHdpbGxTdGFydFpvb21PclNjcm9sbF07CiB9CiAKIC0gKHZvaWQpZXhlY3V0
ZUVkaXRDb21tYW5kV2l0aENhbGxiYWNrOihOU1N0cmluZyAqKWNvbW1hbmROYW1lCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdG9yLmgKaW5kZXggYTUzOWFkNzIwOTkxZTBiZWI3NjYyMDhjMDMzYzU4M2ZiNTRkZGYyYy4u
MGE3ZjBlMTFhNjczNzBkOGI1Y2E3YjZiNzE2YjlhNDlmYzY2YTRiNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IuaApAQCAtMzksMjYgKzM5LDMyIEBAIGVudW0gY2xhc3MgU2Nyb2xsaW5nSW5jcmVtZW50IDog
dWludDhfdCB7CiAKIH0KIAorQGNsYXNzIFVJU2Nyb2xsVmlldzsKIEBjbGFzcyBXZWJFdmVudDsK
LUBwcm90b2NvbCBXS0tleWJvYXJkU2Nyb2xsYWJsZTsKK0Bwcm90b2NvbCBXS0tleWJvYXJkU2Ny
b2xsVmlld0FuaW1hdG9yRGVsZWdhdGU7CiAKLUBpbnRlcmZhY2UgV0tLZXlib2FyZFNjcm9sbGlu
Z0FuaW1hdG9yIDogTlNPYmplY3QKK0BpbnRlcmZhY2UgV0tLZXlib2FyZFNjcm9sbFZpZXdBbmlt
YXRvciA6IE5TT2JqZWN0CiAKIC0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOwot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsYWJsZTooaWQgPFdLS2V5Ym9hcmRTY3JvbGxh
YmxlPilzY3JvbGxhYmxlOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsVmlldzooVUlT
Y3JvbGxWaWV3ICopc2Nyb2xsVmlldzsKIAogLSAodm9pZClpbnZhbGlkYXRlOwogCistICh2b2lk
KXdpbGxTdGFydEludGVyYWN0aXZlU2Nyb2xsOworCiAtIChCT09MKWJlZ2luV2l0aEV2ZW50Oig6
OldlYkV2ZW50ICopZXZlbnQ7CiAtIChCT09MKWhhbmRsZUtleUV2ZW50Oig6OldlYkV2ZW50ICop
ZXZlbnQ7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8V0tLZXlib2FyZFNjcm9s
bFZpZXdBbmltYXRvckRlbGVnYXRlPiBkZWxlZ2F0ZTsKKwogQGVuZAogCi1AcHJvdG9jb2wgV0tL
ZXlib2FyZFNjcm9sbGFibGUgPE5TT2JqZWN0PgotQHJlcXVpcmVkCi0tIChCT09MKWlzS2V5Ym9h
cmRTY3JvbGxhYmxlOwotLSAoQ0dGbG9hdClkaXN0YW5jZUZvclNjcm9sbGluZ0luY3JlbWVudDoo
V2ViS2l0OjpTY3JvbGxpbmdJbmNyZW1lbnQpaW5jcmVtZW50OwotLSAodm9pZClzY3JvbGxCeUNv
bnRlbnRPZmZzZXQ6KFdlYkNvcmU6OkZsb2F0UG9pbnQpb2Zmc2V0IGFuaW1hdGVkOihCT09MKWFu
aW1hdGVkOworQHByb3RvY29sIFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3JEZWxlZ2F0ZSA8
TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKEJPT0wpaXNTY3JvbGxhYmxlRm9yS2V5Ym9hcmRTY3Jv
bGxWaWV3QW5pbWF0b3I6KFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgKilhbmltYXRvcjsK
Ky0gKENHRmxvYXQpa2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6KFdLS2V5Ym9hcmRTY3JvbGxW
aWV3QW5pbWF0b3IgKilhbmltYXRvciBkaXN0YW5jZUZvckluY3JlbWVudDooV2ViS2l0OjpTY3Jv
bGxpbmdJbmNyZW1lbnQpaW5jcmVtZW50OworLSAodm9pZClrZXlib2FyZFNjcm9sbFZpZXdBbmlt
YXRvcldpbGxTY3JvbGw6KFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgKilhbmltYXRvcjsK
KwogQGVuZAogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IubW0KaW5k
ZXggZjc3OTcwN2VjYjBhZWFmMzNkYjY5N2ZmOGFkYWI4ZWFhZWM0NWUwMC4uYTU0ZjZlNDI2NDFm
NjA1OTMwZDIzMmUxN2MzZjRlMDdjYjc0MmE0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLm1tCkBAIC0z
MCwyNyArMzAsODAgQEAKIAogI2ltcG9ydCAiVUlLaXRTUEkuaCIKICNpbXBvcnQgPFdlYkNvcmUv
RmxvYXRQb2ludC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZWN0RWRnZXMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvV2ViRXZlbnQuaD4KKyNpbXBvcnQgPFdlYktpdC9VSUtpdFNQSS5oPgogI2ltcG9ydCA8
YWxnb3JpdGhtPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLWVudW0gY2xhc3MgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvclN0
YXRlIDogdWludDhfdCB7Ci0gICAgV2FpdGluZ0ZvckZpcnN0RXZlbnQsCi0gICAgV2FpdGluZ0Zv
clJlcGVhdCwKLSAgICBBbmltYXRpbmcKK2VudW0gY2xhc3MgU2Nyb2xsaW5nRGlyZWN0aW9uIDog
dWludDhfdCB7IFVwLCBEb3duLCBMZWZ0LCBSaWdodCB9OworCitzdHJ1Y3QgS2V5Ym9hcmRTY3Jv
bGwgeworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBvZmZzZXQ7IC8vIFBvaW50cyBwZXIgaW5jcmVt
ZW50LgorICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtYXhpbXVtVmVsb2NpdHk7IC8vIFBvaW50cyBw
ZXIgc2Vjb25kLgorICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBmb3JjZTsKKworICAgIFdlYktpdDo6
U2Nyb2xsaW5nSW5jcmVtZW50IGluY3JlbWVudDsKKyAgICBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVj
dGlvbiBkaXJlY3Rpb247CiB9OwogCitzdHJ1Y3QgS2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzIHsK
KyAgICBDR0Zsb2F0IHNwcmluZ01hc3MgeyAxIH07CisgICAgQ0dGbG9hdCBzcHJpbmdTdGlmZm5l
c3MgeyAxMDkgfTsKKyAgICBDR0Zsb2F0IHNwcmluZ0RhbXBpbmcgeyAyMCB9OworCisgICAgQ0dG
bG9hdCBtYXhpbXVtVmVsb2NpdHlNdWx0aXBsaWVyIHsgMjUgfTsKKyAgICBDR0Zsb2F0IHRpbWVU
b01heGltdW1WZWxvY2l0eSB7IDEgfTsKKworICAgIENHRmxvYXQgcnViYmVyQmFuZEZvcmNlIHsg
NTAwMCB9OwogfTsKIAorfQorCitAcHJvdG9jb2wgV0tLZXlib2FyZFNjcm9sbGFibGVJbnRlcm5h
bCA8TlNPYmplY3Q+CitAcmVxdWlyZWQKKy0gKEJPT0wpaXNLZXlib2FyZFNjcm9sbGFibGU7Cist
IChDR0Zsb2F0KWRpc3RhbmNlRm9ySW5jcmVtZW50OihXZWJLaXQ6OlNjcm9sbGluZ0luY3JlbWVu
dClpbmNyZW1lbnQ7CistICh2b2lkKXNjcm9sbFRvQ29udGVudE9mZnNldDooV2ViQ29yZTo6Rmxv
YXRQb2ludClvZmZzZXQgYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQ7CistICh2b2lkKXNjcm9sbFdp
dGhTY3JvbGxUb0V4dGVudEFuaW1hdGlvblRvOihDR1BvaW50KW9mZnNldDsKKy0gKENHUG9pbnQp
Y29udGVudE9mZnNldDsKKy0gKENHU2l6ZSlpbnRlcmFjdGl2ZVNjcm9sbFZlbG9jaXR5OworLSAo
Q0dQb2ludClib3VuZGVkQ29udGVudE9mZnNldDooQ0dQb2ludClvZmZzZXQ7CistIChXZWJDb3Jl
OjpSZWN0RWRnZXM8Ym9vbD4pc2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zmc2V0OihDR1BvaW50
KW9mZnNldDsKKy0gKFdlYkNvcmU6OlJlY3RFZGdlczxib29sPilydWJiZXJiYW5kYWJsZURpcmVj
dGlvbnM7CisKK0BlbmQKKworQGludGVyZmFjZSBXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Ig
OiBOU09iamVjdAorCistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGFibGU6KGlkIDxXS0tleWJvYXJkU2Nyb2xsYWJsZUlu
dGVybmFsPilzY3JvbGxhYmxlOworCistICh2b2lkKWludmFsaWRhdGU7CisKKy0gKHZvaWQpd2ls
bFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGw7CisKKy0gKEJPT0wpYmVnaW5XaXRoRXZlbnQ6KDo6V2Vi
RXZlbnQgKilldmVudDsKKy0gKEJPT0wpaGFuZGxlS2V5RXZlbnQ6KDo6V2ViRXZlbnQgKilldmVu
dDsKKworQGVuZAorCiBAaW1wbGVtZW50YXRpb24gV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9y
IHsKLSAgICBpZCA8V0tLZXlib2FyZFNjcm9sbGFibGU+IF9zY3JvbGxhYmxlOwotICAgIENGVGlt
ZUludGVydmFsIF9zdGFydFRpbWU7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBfc2Nyb2xsT2Zm
c2V0UGVySW5jcmVtZW50OworICAgIGlkIDxXS0tleWJvYXJkU2Nyb2xsYWJsZUludGVybmFsPiBf
c2Nyb2xsYWJsZTsKICAgICBSZXRhaW5QdHI8Q0FEaXNwbGF5TGluaz4gX2Rpc3BsYXlMaW5rOwot
ICAgIFdlYktpdDo6S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvclN0YXRlIF9zdGF0ZTsKKworICAg
IHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpLZXlib2FyZFNjcm9sbD4gX2N1cnJlbnRTY3JvbGw7CisK
KyAgICBCT09MIF9oYXNQcmVzc2VkU2Nyb2xsaW5nS2V5OworCisgICAgV2ViQ29yZTo6RmxvYXRT
aXplIF92ZWxvY2l0eTsgLy8gUG9pbnRzIHBlciBzZWNvbmQuCisKKyAgICBXZWJDb3JlOjpGbG9h
dFBvaW50IF9pZGVhbFBvc2l0aW9uOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgX2N1cnJlbnRQ
b3NpdGlvbjsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IF9pZGVhbFBvc2l0aW9uRm9yTWluaW11
bVRyYXZlbDsKIH0KIAogLSAoaW5zdGFuY2V0eXBlKWluaXQKQEAgLTU4LDcgKzExMSw3IEBAIC0g
KGluc3RhbmNldHlwZSlpbml0CiAgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoU2Nyb2xsYWJsZTooaWQgPFdLS2V5Ym9hcmRTY3JvbGxhYmxlPilzY3JvbGxhYmxl
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxhYmxlOihpZCA8V0tLZXlib2FyZFNjcm9s
bGFibGVJbnRlcm5hbD4pc2Nyb2xsYWJsZQogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAg
ICAgaWYgKCFzZWxmKQpAQCAtNjksMTMgKzEyMiw2MCBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhTY3JvbGxhYmxlOihpZCA8V0tLZXlib2FyZFNjcm9sbGFibGU+KXNjcm9sbGFibGUKICAgICBy
ZXR1cm4gc2VsZjsKIH0KIAorLSAoY29uc3QgV2ViS2l0OjpLZXlib2FyZFNjcm9sbFBhcmFtZXRl
cnMgJilwYXJhbWV0ZXJzCit7CisgICAgc3RhdGljIGNvbnN0IFdlYktpdDo6S2V5Ym9hcmRTY3Jv
bGxQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcmV0dXJuIHBhcmFtZXRlcnM7Cit9CisKIC0g
KHZvaWQpaW52YWxpZGF0ZQogewogICAgIFtzZWxmIHN0b3BBbmltYXRlZFNjcm9sbF07CisgICAg
W3NlbGYgc3RvcERpc3BsYXlMaW5rXTsKICAgICBfc2Nyb2xsYWJsZSA9IG5pbDsKIH0KIAotLSAo
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50Pilfc2Nyb2xsT2Zmc2V0Rm9yRXZlbnQ6
KDo6V2ViRXZlbnQgKilldmVudAorc3RhdGljIFdlYkNvcmU6OkZsb2F0U2l6ZSB1bml0VmVjdG9y
KFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRp
cmVjdGlvbikgeworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OlVwOgorICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRTaXplKDAsIC0xKTsKKyAgICBjYXNlIFdlYktpdDo6
U2Nyb2xsaW5nRGlyZWN0aW9uOjpEb3duOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRT
aXplKDAsIDEpOworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OkxlZnQ6Cisg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFNpemUoLTEsIDApOworICAgIGNhc2UgV2ViS2l0
OjpTY3JvbGxpbmdEaXJlY3Rpb246OlJpZ2h0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Rmxv
YXRTaXplKDEsIDApOworICAgIH0KK30KKworc3RhdGljIFdlYkNvcmU6OkZsb2F0U2l6ZSBwZXJw
ZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9yKFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgV2ViS2l0OjpT
Y3JvbGxpbmdEaXJlY3Rpb246OlVwOgorICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rp
b246OkRvd246CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFNpemUoMSwgMCk7CisgICAg
Y2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6TGVmdDoKKyAgICBjYXNlIFdlYktpdDo6
U2Nyb2xsaW5nRGlyZWN0aW9uOjpSaWdodDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0
U2l6ZSgwLCAxKTsKKyAgICB9Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpQaHlzaWNhbEJveFNpZGUg
Ym94U2lkZShXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3dp
dGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uOjpV
cDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlBoeXNpY2FsQm94U2lkZTo6VG9wOworICAgIGNh
c2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OkRvd246CisgICAgICAgIHJldHVybiBXZWJD
b3JlOjpQaHlzaWNhbEJveFNpZGU6OkJvdHRvbTsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5n
RGlyZWN0aW9uOjpMZWZ0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGh5c2ljYWxCb3hTaWRl
OjpMZWZ0OworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OlJpZ2h0OgorICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6UGh5c2ljYWxCb3hTaWRlOjpSaWdodDsKKyAgICB9Cit9CisK
Ky0gKHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpLZXlib2FyZFNjcm9sbD4pa2V5Ym9hcmRTY3JvbGxG
b3JFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50CiB7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGtXZWJTcGFjZUtleSA9IDB4MjA7CiAKQEAgLTg2LDcgKzE4Niw2IEBAIC0gKHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6RmxvYXRQb2ludD4pX3Njcm9sbE9mZnNldEZvckV2ZW50Oig6OldlYkV2ZW50
ICopZXZlbnQKICAgICBpZiAoIWNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycy5sZW5ndGgpCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBlbnVtIGNsYXNzIERpcmVjdGlvbiA6
IHVpbnQ4X3QgeyBVcCwgRG93biwgTGVmdCwgUmlnaHQgfTsKICAgICBlbnVtIGNsYXNzIEtleSA6
IHVpbnQ4X3QgeyBPdGhlciwgTGVmdEFycm93LCBSaWdodEFycm93LCBVcEFycm93LCBEb3duQXJy
b3csIFBhZ2VVcCwgUGFnZURvd24sIFNwYWNlIH07CiAgICAgCiAgICAgYXV0byBrZXkgPSBeewpA
QCAtMTEzLDcgKzIxMiw3IEBAIC0gKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRQb2ludD4p
X3Njcm9sbE9mZnNldEZvckV2ZW50Oig6OldlYkV2ZW50ICopZXZlbnQKICAgICBCT09MIHNoaWZ0
UHJlc3NlZCA9IGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrU2hpZnQ7CiAg
ICAgQk9PTCBhbHRQcmVzc2VkID0gZXZlbnQubW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01h
c2tBbHRlcm5hdGU7CiAgICAgQk9PTCBjbWRQcmVzc2VkID0gZXZlbnQubW9kaWZpZXJGbGFncyAm
IFdlYkV2ZW50RmxhZ01hc2tDb21tYW5kOwotICAgIAorCiAgICAgYXV0byBpbmNyZW1lbnQgPSBe
ewogICAgICAgICBzd2l0Y2ggKGtleSkgewogICAgICAgICBjYXNlIEtleTo6TGVmdEFycm93OgpA
QCAtMTM5LDEwNCArMjM4LDM4NiBAQCAtIChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9p
bnQ+KV9zY3JvbGxPZmZzZXRGb3JFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50CiAgICAgYXV0byBk
aXJlY3Rpb24gPSBeKCkgewogICAgICAgICBzd2l0Y2ggKGtleSkgewogICAgICAgICBjYXNlIEtl
eTo6TGVmdEFycm93OgotICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbjo6TGVmdDsKKyAgICAg
ICAgICAgIHJldHVybiBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6TGVmdDsKICAgICAgICAg
Y2FzZSBLZXk6OlJpZ2h0QXJyb3c6Ci0gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uOjpSaWdo
dDsKKyAgICAgICAgICAgIHJldHVybiBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6UmlnaHQ7
CiAgICAgICAgIGNhc2UgS2V5OjpVcEFycm93OgogICAgICAgICBjYXNlIEtleTo6UGFnZVVwOgot
ICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbjo6VXA7CisgICAgICAgICAgICByZXR1cm4gV2Vi
S2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OlVwOwogICAgICAgICBjYXNlIEtleTo6RG93bkFycm93
OgogICAgICAgICBjYXNlIEtleTo6UGFnZURvd246Ci0gICAgICAgICAgICByZXR1cm4gRGlyZWN0
aW9uOjpEb3duOworICAgICAgICAgICAgcmV0dXJuIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9u
OjpEb3duOwogICAgICAgICBjYXNlIEtleTo6U3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gc2hp
ZnRQcmVzc2VkID8gRGlyZWN0aW9uOjpVcCA6IERpcmVjdGlvbjo6RG93bjsKKyAgICAgICAgICAg
IHJldHVybiBzaGlmdFByZXNzZWQgPyBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6VXAgOiBX
ZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6RG93bjsKICAgICAgICAgY2FzZSBLZXk6Ok90aGVy
OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4g
RGlyZWN0aW9uOjpEb3duOworICAgICAgICAgICAgcmV0dXJuIFdlYktpdDo6U2Nyb2xsaW5nRGly
ZWN0aW9uOjpEb3duOwogICAgICAgICB9OwogICAgIH0oKTsKIAotICAgIGJvb2wgaXNIb3Jpem9u
dGFsID0gZGlyZWN0aW9uID09IERpcmVjdGlvbjo6TGVmdCB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0
aW9uOjpSaWdodDsKLSAgICBDR0Zsb2F0IHNjcm9sbERpc3RhbmNlID0gW19zY3JvbGxhYmxlIGRp
c3RhbmNlRm9yU2Nyb2xsaW5nSW5jcmVtZW50OmluY3JlbWVudF07Ci0gICAgCi0gICAgaWYgKGRp
cmVjdGlvbiA9PSBEaXJlY3Rpb246OlVwIHx8IGRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OkxlZnQp
Ci0gICAgICAgIHNjcm9sbERpc3RhbmNlID0gLXNjcm9sbERpc3RhbmNlOworICAgIENHRmxvYXQg
c2Nyb2xsRGlzdGFuY2UgPSBbX3Njcm9sbGFibGUgZGlzdGFuY2VGb3JJbmNyZW1lbnQ6aW5jcmVt
ZW50XTsKKworICAgIFdlYktpdDo6S2V5Ym9hcmRTY3JvbGwgc2Nyb2xsOworICAgIHNjcm9sbC5v
ZmZzZXQgPSB1bml0VmVjdG9yKGRpcmVjdGlvbikuc2NhbGVkKHNjcm9sbERpc3RhbmNlKTsKKyAg
ICBzY3JvbGwuaW5jcmVtZW50ID0gaW5jcmVtZW50OworICAgIHNjcm9sbC5kaXJlY3Rpb24gPSBk
aXJlY3Rpb247CisgICAgc2Nyb2xsLm1heGltdW1WZWxvY2l0eSA9IHNjcm9sbC5vZmZzZXQuc2Nh
bGVkKHNlbGYucGFyYW1ldGVycy5tYXhpbXVtVmVsb2NpdHlNdWx0aXBsaWVyKTsKKworICAgIC8v
IEFwcGx5IGEgY29uc3RhbnQgZm9yY2UgdG8gYWNoaWV2ZSBWbWF4IGluIHRpbWVUb01heGltdW1W
ZWxvY2l0eSBzZWNvbmRzLgorICAgIC8vIEZfY29uc3RhbnQgPSBtICogVm1heCAvIHQKKyAgICBz
Y3JvbGwuZm9yY2UgPSBzY3JvbGwubWF4aW11bVZlbG9jaXR5LnNjYWxlZChzZWxmLnBhcmFtZXRl
cnMuc3ByaW5nTWFzcyAvIHNlbGYucGFyYW1ldGVycy50aW1lVG9NYXhpbXVtVmVsb2NpdHkpOwog
ICAgIAotICAgIHJldHVybiBpc0hvcml6b250YWwgPyBXZWJDb3JlOjpGbG9hdFBvaW50KHNjcm9s
bERpc3RhbmNlLCAwKSA6IFdlYkNvcmU6OkZsb2F0UG9pbnQoMCwgc2Nyb2xsRGlzdGFuY2UpOwor
ICAgIHJldHVybiBzY3JvbGw7CiB9CiAKIC0gKEJPT0wpYmVnaW5XaXRoRXZlbnQ6KDo6V2ViRXZl
bnQgKilldmVudAogewotICAgIGlmIChfc3RhdGUgIT0gV2ViS2l0OjpLZXlib2FyZFNjcm9sbGlu
Z0FuaW1hdG9yU3RhdGU6OldhaXRpbmdGb3JGaXJzdEV2ZW50KQotICAgICAgICByZXR1cm4gTk87
Ci0gICAgCiAgICAgaWYgKGV2ZW50LnR5cGUgIT0gV2ViRXZlbnRLZXlEb3duKQogICAgICAgICBy
ZXR1cm4gTk87CiAKLSAgICBhdXRvIG9mZnNldCA9IFtzZWxmIF9zY3JvbGxPZmZzZXRGb3JFdmVu
dDpldmVudF07Ci0gICAgaWYgKCFvZmZzZXQpCisgICAgYXV0byBzY3JvbGwgPSBbc2VsZiBrZXli
b2FyZFNjcm9sbEZvckV2ZW50OmV2ZW50XTsKKyAgICBpZiAoIXNjcm9sbCkKKyAgICAgICAgcmV0
dXJuIE5POworCisgICAgaWYgKF9oYXNQcmVzc2VkU2Nyb2xsaW5nS2V5KQogICAgICAgICByZXR1
cm4gTk87CiAKLSAgICBfc3RhdGUgPSBXZWJLaXQ6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3JT
dGF0ZTo6V2FpdGluZ0ZvclJlcGVhdDsKLSAgICBfc2Nyb2xsT2Zmc2V0UGVySW5jcmVtZW50ID0g
b2Zmc2V0LnZhbHVlKCk7CisgICAgaWYgKCFbX3Njcm9sbGFibGUgcnViYmVyYmFuZGFibGVEaXJl
Y3Rpb25zXS5hdChib3hTaWRlKHNjcm9sbC0+ZGlyZWN0aW9uKSkpCisgICAgICAgIHJldHVybiBO
TzsKKworICAgIF9oYXNQcmVzc2VkU2Nyb2xsaW5nS2V5ID0gWUVTOworICAgIF9jdXJyZW50U2Ny
b2xsID0gc2Nyb2xsOworCisgICAgaWYgKHNjcm9sbC0+aW5jcmVtZW50ID09IFdlYktpdDo6U2Ny
b2xsaW5nSW5jcmVtZW50OjpEb2N1bWVudCkgeworICAgICAgICBfdmVsb2NpdHkgPSBXZWJDb3Jl
OjpGbG9hdFNpemUoKTsKKyAgICAgICAgW3NlbGYgc3RvcEFuaW1hdGVkU2Nyb2xsXTsKKyAgICAg
ICAgW3NlbGYgc3RvcERpc3BsYXlMaW5rXTsKKyAgICAgICAgW19zY3JvbGxhYmxlIHNjcm9sbFdp
dGhTY3JvbGxUb0V4dGVudEFuaW1hdGlvblRvOltfc2Nyb2xsYWJsZSBib3VuZGVkQ29udGVudE9m
ZnNldDpfY3VycmVudFBvc2l0aW9uICsgc2Nyb2xsLT5vZmZzZXRdXTsKKyAgICAgICAgcmV0dXJu
IFlFUzsKKyAgICB9CiAKLSAgICAvLyBUaGUgZmlyc3Qga2V5Ym9hcmQgZXZlbnQgdGhhdCBzdGFy
dHMgc2Nyb2xsaW5nIHBlcmZvcm1zIGl0cyBvd24KLSAgICAvLyBkaXNjcmV0ZSBhbmltYXRlZCBz
Y3JvbGwuIENvbnRpbnVvdXNseSBhbmltYXRlZCBzY3JvbGxpbmcgc3RhcnRzCi0gICAgLy8gd2hl
biB0aGUga2V5IHJlcGVhdHMuCi0gICAgW19zY3JvbGxhYmxlIHNjcm9sbEJ5Q29udGVudE9mZnNl
dDpfc2Nyb2xsT2Zmc2V0UGVySW5jcmVtZW50IGFuaW1hdGVkOllFU107CisgICAgW3NlbGYgc3Rh
cnREaXNwbGF5TGlua0lmTmVlZGVkXTsKKworICAgIF9jdXJyZW50UG9zaXRpb24gPSBXZWJDb3Jl
OjpGbG9hdFBvaW50KFtfc2Nyb2xsYWJsZSBjb250ZW50T2Zmc2V0XSk7CisgICAgX3ZlbG9jaXR5
ICs9IFdlYkNvcmU6OkZsb2F0U2l6ZShbX3Njcm9sbGFibGUgaW50ZXJhY3RpdmVTY3JvbGxWZWxv
Y2l0eV0pOworICAgIF9pZGVhbFBvc2l0aW9uRm9yTWluaW11bVRyYXZlbCA9IF9jdXJyZW50UG9z
aXRpb24gKyBfY3VycmVudFNjcm9sbC0+b2Zmc2V0OwogCiAgICAgcmV0dXJuIFlFUzsKIH0KIAog
LSAoQk9PTCloYW5kbGVLZXlFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50CiB7Ci0gICAgaWYgKF9z
dGF0ZSA9PSBXZWJLaXQ6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3JTdGF0ZTo6V2FpdGluZ0Zv
ckZpcnN0RXZlbnQpCisgICAgaWYgKCFfaGFzUHJlc3NlZFNjcm9sbGluZ0tleSkKICAgICAgICAg
cmV0dXJuIE5POwogCi0gICAgYXV0byBvZmZzZXQgPSBbc2VsZiBfc2Nyb2xsT2Zmc2V0Rm9yRXZl
bnQ6ZXZlbnRdOwotICAgIGlmICghb2Zmc2V0IHx8IGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlV
cCkgeworICAgIGF1dG8gc2Nyb2xsID0gW3NlbGYga2V5Ym9hcmRTY3JvbGxGb3JFdmVudDpldmVu
dF07CisgICAgaWYgKCFzY3JvbGwgfHwgZXZlbnQudHlwZSA9PSBXZWJFdmVudEtleVVwKSB7CiAg
ICAgICAgIFtzZWxmIHN0b3BBbmltYXRlZFNjcm9sbF07Ci0gICAgICAgIHJldHVybiBOTzsKKyAg
ICAgICAgX2hhc1ByZXNzZWRTY3JvbGxpbmdLZXkgPSBOTzsKICAgICB9CiAKLSAgICBpZiAoX3N0
YXRlID09IFdlYktpdDo6S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvclN0YXRlOjpXYWl0aW5nRm9y
UmVwZWF0KQotICAgICAgICBbc2VsZiBzdGFydEFuaW1hdGVkU2Nyb2xsXTsKKyAgICByZXR1cm4g
Tk87Cit9CiAKLSAgICByZXR1cm4gWUVTOworc3RhdGljIFdlYkNvcmU6OkZsb2F0UG9pbnQgZmFy
dGhlc3RQb2ludEluRGlyZWN0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgYSwgV2ViQ29yZTo6Rmxv
YXRQb2ludCBiLCBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAg
c3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9u
OjpVcDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UG9pbnQoYS54KCksIHN0ZDo6bWlu
KGEueSgpLCBiLnkoKSkpOworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OkRv
d246CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFBvaW50KGEueCgpLCBzdGQ6Om1heChh
LnkoKSwgYi55KCkpKTsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uOjpMZWZ0
OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRQb2ludChzdGQ6Om1pbihhLngoKSwgYi54
KCkpLCBhLnkoKSk7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6UmlnaHQ6
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFBvaW50KHN0ZDo6bWF4KGEueCgpLCBiLngo
KSksIGEueSgpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4geyB9OworfQorCistICh2b2lkKXN0b3BBbmltYXRlZFNjcm9sbAoreworICAgIGlmICghX2N1
cnJlbnRTY3JvbGwpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERldGVybWluZSB0aGUgc2V0
dGxpbmcgcG9zaXRpb24gb2YgdGhlIHNwcmluZywgY29uc2VydmluZyB0aGUgc3lzdGVtJ3MgY3Vy
cmVudCBlbmVyZ3kuCisgICAgLy8gS2luZXRpYyA9IGVsYXN0aWMgcG90ZW50aWFsCisgICAgLy8g
MS8yICogbSAqIHZeMiA9IDEvMiAqIGsgKiB4XjIKKyAgICAvLyB4ID0gc3FydCh2XjIgKiBtIC8g
aykKKyAgICBhdXRvIGRpc3BsYWNlbWVudE1hZ25pdHVkZVNxdWFyZWQgPSAoX3ZlbG9jaXR5ICog
X3ZlbG9jaXR5KS5zY2FsZWQoc2VsZi5wYXJhbWV0ZXJzLnNwcmluZ01hc3MgLyBzZWxmLnBhcmFt
ZXRlcnMuc3ByaW5nU3RpZmZuZXNzKTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZGlzcGxhY2Vt
ZW50ID0geworICAgICAgICBzdGQ6OmNvcHlzaWduKHNxcnQoZGlzcGxhY2VtZW50TWFnbml0dWRl
U3F1YXJlZC53aWR0aCgpKSwgX3ZlbG9jaXR5LndpZHRoKCkpLAorICAgICAgICBzdGQ6OmNvcHlz
aWduKHNxcnQoZGlzcGxhY2VtZW50TWFnbml0dWRlU3F1YXJlZC5oZWlnaHQoKSksIF92ZWxvY2l0
eS5oZWlnaHQoKSkKKyAgICB9OworCisgICAgLy8gSWYgdGhlIHNwcmluZyB3b3VsZCBzZXR0bGUg
YmVmb3JlIHRoZSBtaW5pbXVtIHRyYXZlbCBkaXN0YW5jZQorICAgIC8vIGZvciBhbiBpbnN0YW50
YW5lb3VzIHRhcCwgbW92ZSB0aGUgc2V0dGxpbmcgcG9zaXRpb24gb2YgdGhlIHNwcmluZworICAg
IC8vIG91dCB0byB0aGF0IHBvaW50LgorICAgIF9pZGVhbFBvc2l0aW9uID0gW19zY3JvbGxhYmxl
IGJvdW5kZWRDb250ZW50T2Zmc2V0OmZhcnRoZXN0UG9pbnRJbkRpcmVjdGlvbihfY3VycmVudFBv
c2l0aW9uICsgZGlzcGxhY2VtZW50LCBfaWRlYWxQb3NpdGlvbkZvck1pbmltdW1UcmF2ZWwsIF9j
dXJyZW50U2Nyb2xsLT5kaXJlY3Rpb24pXTsKKworICAgIF9jdXJyZW50U2Nyb2xsID0gc3RkOjpu
dWxsb3B0OwogfQogCi0tICh2b2lkKXN0YXJ0QW5pbWF0ZWRTY3JvbGwKKy0gKHZvaWQpc3RhcnRE
aXNwbGF5TGlua0lmTmVlZGVkCiB7Ci0gICAgQVNTRVJUKCFfZGlzcGxheUxpbmspOworICAgIGlm
IChfZGlzcGxheUxpbmspCisgICAgICAgIHJldHVybjsKIAotICAgIF9zdGF0ZSA9IFdlYktpdDo6
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvclN0YXRlOjpBbmltYXRpbmc7Ci0gICAgX3N0YXJ0VGlt
ZSA9IENBQ3VycmVudE1lZGlhVGltZSgpOwogICAgIF9kaXNwbGF5TGluayA9IFtDQURpc3BsYXlM
aW5rIGRpc3BsYXlMaW5rV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihkaXNwbGF5
TGlua0ZpcmVkOildOwogICAgIFtfZGlzcGxheUxpbmsgYWRkVG9SdW5Mb29wOltOU1J1bkxvb3Ag
bWFpblJ1bkxvb3BdIGZvck1vZGU6TlNSdW5Mb29wQ29tbW9uTW9kZXNdOwogfQogCi0tICh2b2lk
KXN0b3BBbmltYXRlZFNjcm9sbAorLSAodm9pZClzdG9wRGlzcGxheUxpbmsKIHsKLSAgICBfc3Rh
dGUgPSBXZWJLaXQ6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3JTdGF0ZTo6V2FpdGluZ0ZvckZp
cnN0RXZlbnQ7CiAgICAgW19kaXNwbGF5TGluayBpbnZhbGlkYXRlXTsKICAgICBfZGlzcGxheUxp
bmsgPSBuaWw7CiB9CiAKKy0gKHZvaWQpd2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGwKK3sKKyAg
ICAvLyBJZiB0aGUgdXNlciB0b3VjaGVzIHRoZSBzY3JlZW4gdG8gc3RhcnQgYW4gaW50ZXJhY3Rp
dmUgc2Nyb2xsLCBzdG9wIGV2ZXJ5dGhpbmcuCisgICAgX3ZlbG9jaXR5ID0gV2ViQ29yZTo6Rmxv
YXRTaXplKCk7CisgICAgW3NlbGYgc3RvcEFuaW1hdGVkU2Nyb2xsXTsKKyAgICBbc2VsZiBzdG9w
RGlzcGxheUxpbmtdOworfQorCiAtICh2b2lkKWRpc3BsYXlMaW5rRmlyZWQ6KENBRGlzcGxheUxp
bmsgKilzZW5kZXIKIHsKLSAgICBjb25zdCBDRlRpbWVJbnRlcnZhbCBzZWNvbmRzUGVyU2Nyb2xs
SW5jcmVtZW50ID0gMC4wNTsgLy8gU2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byBjb3ZlciBvbmUg
aW5jcmVtZW50IHdoZW4gYXQgZnVsbCBzcGVlZC4KLSAgICBjb25zdCBmbG9hdCBtYXhpbXVtVmVs
b2NpdHkgPSAyMDAwOyAvLyBNYXhpbXVtIHZlbG9jaXR5IGluIHBpeGVscyBwZXIgc2Vjb25kLiBF
bXBpcmljYWxseSBkZXRlcm1pbmVkLgotICAgIGNvbnN0IENGVGltZUludGVydmFsIGFjY2VsZXJh
dGlvbkR1cmF0aW9uID0gMC4zOyAvLyBEdXJhdGlvbiBvZiBhY2NlbGVyYXRpb24gaW4gc2Vjb25k
cy4gVGhpcyBtYXRjaGVzIFVJU2Nyb2xsVmlldy4KKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZm9y
Y2U7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGF4ZXNUb0FwcGx5U3ByaW5nID0geyAxLCAxIH07
CisKKyAgICBpZiAoX2N1cnJlbnRTY3JvbGwpIHsKKyAgICAgICAgV2ViQ29yZTo6UmVjdEVkZ2Vz
PGJvb2w+IHNjcm9sbGFibGVEaXJlY3Rpb25zID0gW19zY3JvbGxhYmxlIHNjcm9sbGFibGVEaXJl
Y3Rpb25zRnJvbU9mZnNldDpfY3VycmVudFBvc2l0aW9uXTsKKyAgICAgICAgYXV0byBkaXJlY3Rp
b24gPSBfY3VycmVudFNjcm9sbC0+ZGlyZWN0aW9uOworCisgICAgICAgIGlmIChzY3JvbGxhYmxl
RGlyZWN0aW9ucy5hdChib3hTaWRlKGRpcmVjdGlvbikpKSB7CisgICAgICAgICAgICAvLyBBcHBs
eSB0aGUgc2Nyb2xsaW5nIGZvcmNlLiBPbmx5IGFwcGx5IHRoZSBzcHJpbmcgaW4gdGhlIHBlcnBl
bmRpY3VsYXIgYXhpcywKKyAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdCBkcmFncyBhZ2FpbnN0
IHRoZSBkaXJlY3Rpb24gb2YgbW90aW9uLgorICAgICAgICAgICAgYXhlc1RvQXBwbHlTcHJpbmcg
PSBwZXJwZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9yKGRpcmVjdGlvbik7CisgICAgICAgICAg
ICBmb3JjZSA9IF9jdXJyZW50U2Nyb2xsLT5mb3JjZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIFRoZSBzY3JvbGwgdmlldyBjYW5ub3Qgc2Nyb2xsIGluIHRoaXMgZGlyZWN0aW9u
LCBhbmQgaXMgcnViYmVyLWJhbmRpbmcuCisgICAgICAgICAgICAvLyBBcHBseSBhIGNvbnN0YW50
IGFuZCBzaWduaWZpY2FudCBmb3JjZTsgb3RoZXJ3aXNlLCB0aGUgZm9yY2UgZm9yIGEKKyAgICAg
ICAgICAgIC8vIHNpbmdsZS1saW5lIGluY3JlbWVudCBpcyBub3Qgc3Ryb25nIGVub3VnaCB0byBy
dWJiZXItYmFuZCBwZXJjZXB0aWJseS4KKyAgICAgICAgICAgIGZvcmNlID0gdW5pdFZlY3Rvcihk
aXJlY3Rpb24pLnNjYWxlZChzZWxmLnBhcmFtZXRlcnMucnViYmVyQmFuZEZvcmNlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIElmIHdlJ3ZlIHJlYWNoZWQgb3IgZXhjZWVkZWQgdGhlIG1heGlt
dW0gdmVsb2NpdHksIHN0b3AgYXBwbHlpbmcgYW55IGZvcmNlLgorICAgICAgICAvLyBIb3dldmVy
LCB3ZSB3b24ndCBsZXQgdGhlIHNwcmluZyBzbmFwLCB3ZSdsbCBqdXN0IGtlZXAgZ29pbmcgYXQg
dGhlIHNhbWUKKyAgICAgICAgLy8gdmVsb2NpdHkgdW50aWwgdGhlIHVzZXIgcmFpc2VzIHRoZWly
IGZpbmdlciBvciB3ZSBoaXQgYW4gZWRnZS4KKyAgICAgICAgaWYgKGZhYnMoX3ZlbG9jaXR5Lndp
ZHRoKCkpID49IGZhYnMoX2N1cnJlbnRTY3JvbGwtPm1heGltdW1WZWxvY2l0eS53aWR0aCgpKSkK
KyAgICAgICAgICAgIGZvcmNlLnNldFdpZHRoKDApOworICAgICAgICBpZiAoZmFicyhfdmVsb2Np
dHkuaGVpZ2h0KCkpID49IGZhYnMoX2N1cnJlbnRTY3JvbGwtPm1heGltdW1WZWxvY2l0eS5oZWln
aHQoKSkpCisgICAgICAgICAgICBmb3JjZS5zZXRIZWlnaHQoMCk7CisgICAgfQogCi0gICAgYXV0
byB2ZWxvY2l0eSA9IF9zY3JvbGxPZmZzZXRQZXJJbmNyZW1lbnQuc2NhbGVkKDEuIC8gc2Vjb25k
c1BlclNjcm9sbEluY3JlbWVudCk7Ci0gICAgdmVsb2NpdHkgPSB2ZWxvY2l0eS5jb25zdHJhaW5l
ZEJldHdlZW4oeyAtbWF4aW11bVZlbG9jaXR5LCAtbWF4aW11bVZlbG9jaXR5IH0sIHsgbWF4aW11
bVZlbG9jaXR5LCBtYXhpbXVtVmVsb2NpdHkgfSk7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBp
ZGVhbFBvc2l0aW9uID0gW19zY3JvbGxhYmxlIGJvdW5kZWRDb250ZW50T2Zmc2V0Ol9jdXJyZW50
U2Nyb2xsID8gX2N1cnJlbnRQb3NpdGlvbiA6IF9pZGVhbFBvc2l0aW9uXTsKKyAgICBXZWJDb3Jl
OjpGbG9hdFNpemUgZGlzcGxhY2VtZW50ID0gX2N1cnJlbnRQb3NpdGlvbiAtIGlkZWFsUG9zaXRp
b247CiAKKyAgICAvLyBDb21wdXRlIHRoZSBzcHJpbmcncyBmb3JjZSwgYW5kIGFwcGx5IGl0IGlu
IGFsbG93ZWQgZGlyZWN0aW9ucy4KKyAgICAvLyBGX3NwcmluZyA9IC1rICogeCAtIGMgKiB2Cisg
ICAgYXV0byBzcHJpbmdGb3JjZSA9IC0gZGlzcGxhY2VtZW50LnNjYWxlZChzZWxmLnBhcmFtZXRl
cnMuc3ByaW5nU3RpZmZuZXNzKSAtIF92ZWxvY2l0eS5zY2FsZWQoc2VsZi5wYXJhbWV0ZXJzLnNw
cmluZ0RhbXBpbmcpOworICAgIGZvcmNlICs9IHNwcmluZ0ZvcmNlICogYXhlc1RvQXBwbHlTcHJp
bmc7CisKKyAgICAvLyBJbnRlZ3JhdGUgYWNjZWxlcmF0aW9uIC0+IHZlbG9jaXR5IC0+IHBvc2l0
aW9uIGZvciB0aGlzIHRpbWUgc3RlcC4KICAgICBDRlRpbWVJbnRlcnZhbCBmcmFtZUR1cmF0aW9u
ID0gc2VuZGVyLnRhcmdldFRpbWVzdGFtcCAtIHNlbmRlci50aW1lc3RhbXA7Ci0gICAgQ0ZUaW1l
SW50ZXJ2YWwgdGltZUZyb21BbmltYXRpb25TdGFydCA9IHNlbmRlci50aW1lc3RhbXAgLSBfc3Rh
cnRUaW1lOwotICAgIGZsb2F0IGFjY2VsZXJhdGlvbkZhY3RvciA9IFtbQ0FNZWRpYVRpbWluZ0Z1
bmN0aW9uIGZ1bmN0aW9uV2l0aE5hbWU6a0NBTWVkaWFUaW1pbmdGdW5jdGlvbkVhc2VJbkVhc2VP
dXRdIF9zb2x2ZUZvcklucHV0OnN0ZDo6bWluPENGVGltZUludGVydmFsPih0aW1lRnJvbUFuaW1h
dGlvblN0YXJ0LCBhY2NlbGVyYXRpb25EdXJhdGlvbikgLyBhY2NlbGVyYXRpb25EdXJhdGlvbl07
CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGFjY2VsZXJhdGlvbiA9IGZvcmNlLnNjYWxlZCgxLiAv
IHNlbGYucGFyYW1ldGVycy5zcHJpbmdNYXNzKTsKKyAgICBfdmVsb2NpdHkgKz0gYWNjZWxlcmF0
aW9uLnNjYWxlZChmcmFtZUR1cmF0aW9uKTsKKyAgICBfY3VycmVudFBvc2l0aW9uICs9IF92ZWxv
Y2l0eS5zY2FsZWQoZnJhbWVEdXJhdGlvbik7CisKKyAgICBbX3Njcm9sbGFibGUgc2Nyb2xsVG9D
b250ZW50T2Zmc2V0Ol9jdXJyZW50UG9zaXRpb24gYW5pbWF0ZWQ6Tk9dOworCisgICAgLy8gSWYg
d2UndmUgZWZmZWN0aXZlbHkgc3RvcHBlZCBzY3JvbGxpbmcsIGFuZCBubyBrZXkgaXMgcHJlc3Nl
ZCwKKyAgICAvLyBzaHV0IGRvd24gdGhlIGRpc3BsYXkgbGluay4KKyAgICBpZiAoIV9oYXNQcmVz
c2VkU2Nyb2xsaW5nS2V5ICYmIF92ZWxvY2l0eS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKSA8IDEp
IHsKKyAgICAgICAgW3NlbGYgc3RvcERpc3BsYXlMaW5rXTsKKyAgICAgICAgX3ZlbG9jaXR5ID0g
V2ViQ29yZTo6RmxvYXRTaXplKCk7CisgICAgfQorfQorCitAZW5kCisKK0BpbnRlcmZhY2UgV0tL
ZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciAoKSA8V0tLZXlib2FyZFNjcm9sbGFibGVJbnRlcm5h
bD4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
eworICAgIFdlYWtPYmpDUHRyPFVJU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7CisgICAgUmV0YWlu
UHRyPFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcj4gX2FuaW1hdG9yOworCisgICAgQk9PTCBf
ZGVsZWdhdGVSZXNwb25kc1RvSXNLZXlib2FyZFNjcm9sbGFibGU7CisgICAgQk9PTCBfZGVsZWdh
dGVSZXNwb25kc1RvRGlzdGFuY2VGb3JJbmNyZW1lbnQ7CisgICAgQk9PTCBfZGVsZWdhdGVSZXNw
b25kc1RvV2lsbFNjcm9sbDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICByZXR1
cm4gbmlsOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxWaWV3OihVSVNjcm9s
bFZpZXcgKilzY3JvbGxWaWV3Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAo
IXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfc2Nyb2xsVmlldyA9IHNjcm9sbFZp
ZXc7CisgICAgX2FuaW1hdG9yID0gYWRvcHROUyhbW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRv
ciBhbGxvY10gaW5pdFdpdGhTY3JvbGxhYmxlOnNlbGZdKTsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2FuaW1hdG9yIGludmFsaWRhdGVdOworICAg
IFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClpbnZhbGlkYXRlCit7CisgICAgX3Njcm9s
bFZpZXcgPSBuaWw7CisKKyAgICBbX2FuaW1hdG9yIGludmFsaWRhdGVdOworICAgIF9hbmltYXRv
ciA9IG5pbDsKK30KKworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdLS2V5Ym9hcmRTY3JvbGxW
aWV3QW5pbWF0b3JEZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICBfZGVsZWdhdGUgPSBkZWxlZ2F0
ZTsKKworICAgIF9kZWxlZ2F0ZVJlc3BvbmRzVG9Jc0tleWJvYXJkU2Nyb2xsYWJsZSA9IFtfZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihpc1Njcm9sbGFibGVGb3JLZXlib2Fy
ZFNjcm9sbFZpZXdBbmltYXRvcjopXTsKKyAgICBfZGVsZWdhdGVSZXNwb25kc1RvRGlzdGFuY2VG
b3JJbmNyZW1lbnQgPSBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioa2V5
Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6ZGlzdGFuY2VGb3JJbmNyZW1lbnQ6KV07CisgICAgX2Rl
bGVnYXRlUmVzcG9uZHNUb1dpbGxTY3JvbGwgPSBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3Ioa2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3JXaWxsU2Nyb2xsOildOworfQor
CistICh2b2lkKXdpbGxTdGFydEludGVyYWN0aXZlU2Nyb2xsCit7CisgICAgW19hbmltYXRvciB3
aWxsU3RhcnRJbnRlcmFjdGl2ZVNjcm9sbF07Cit9CisKKy0gKEJPT0wpYmVnaW5XaXRoRXZlbnQ6
KDo6V2ViRXZlbnQgKilldmVudAoreworICAgIHJldHVybiBbX2FuaW1hdG9yIGJlZ2luV2l0aEV2
ZW50OmV2ZW50XTsKK30KKworLSAoQk9PTCloYW5kbGVLZXlFdmVudDooOjpXZWJFdmVudCAqKWV2
ZW50Cit7CisgICAgcmV0dXJuIFtfYW5pbWF0b3IgaGFuZGxlS2V5RXZlbnQ6ZXZlbnRdOworfQor
CistIChCT09MKWlzS2V5Ym9hcmRTY3JvbGxhYmxlCit7CisgICAgaWYgKCFfZGVsZWdhdGVSZXNw
b25kc1RvSXNLZXlib2FyZFNjcm9sbGFibGUpCisgICAgICAgIHJldHVybiBZRVM7CisgICAgcmV0
dXJuIFtfZGVsZWdhdGUgaXNTY3JvbGxhYmxlRm9yS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6
c2VsZl07Cit9CisKKy0gKENHRmxvYXQpZGlzdGFuY2VGb3JJbmNyZW1lbnQ6KFdlYktpdDo6U2Ny
b2xsaW5nSW5jcmVtZW50KWluY3JlbWVudAoreworICAgIGF1dG8gc2Nyb2xsVmlldyA9IF9zY3Jv
bGxWaWV3LmdldEF1dG9yZWxlYXNlZCgpOworICAgIGlmICghc2Nyb2xsVmlldykKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBjb25zdCBDR0Zsb2F0IGRlZmF1bHRQYWdlU2Nyb2xsRnJhY3Rpb24g
PSAwLjg7CisgICAgY29uc3QgQ0dGbG9hdCBkZWZhdWx0TGluZVNjcm9sbEhlaWdodCA9IDQwOwor
CisgICAgaWYgKCFfZGVsZWdhdGVSZXNwb25kc1RvRGlzdGFuY2VGb3JJbmNyZW1lbnQpIHsKKyAg
ICAgICAgc3dpdGNoIChpbmNyZW1lbnQpIHsKKyAgICAgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGlu
Z0luY3JlbWVudDo6RG9jdW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsVmlldy5jb250
ZW50U2l6ZS5oZWlnaHQ7CisgICAgICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdJbmNyZW1lbnQ6
OlBhZ2U6CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsVmlldy5mcmFtZS5zaXplLmhlaWdodCAq
IGRlZmF1bHRQYWdlU2Nyb2xsRnJhY3Rpb247CisgICAgICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxp
bmdJbmNyZW1lbnQ6OkxpbmU6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdExpbmVTY3JvbGxI
ZWlnaHQgKiBzY3JvbGxWaWV3Lnpvb21TY2FsZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIFtf
ZGVsZWdhdGUga2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6c2VsZiBkaXN0YW5jZUZvckluY3Jl
bWVudDppbmNyZW1lbnRdOworfQorCistICh2b2lkKXNjcm9sbFRvQ29udGVudE9mZnNldDooV2Vi
Q29yZTo6RmxvYXRQb2ludCljb250ZW50T2Zmc2V0RGVsdGEgYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0
ZWQKK3sKKyAgICBhdXRvIHNjcm9sbFZpZXcgPSBfc2Nyb2xsVmlldy5nZXRBdXRvcmVsZWFzZWQo
KTsKKyAgICBpZiAoIXNjcm9sbFZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoX2RlbGVn
YXRlUmVzcG9uZHNUb1dpbGxTY3JvbGwpCisgICAgICAgIFtfZGVsZWdhdGUga2V5Ym9hcmRTY3Jv
bGxWaWV3QW5pbWF0b3JXaWxsU2Nyb2xsOnNlbGZdOworICAgIFtzY3JvbGxWaWV3IHNldENvbnRl
bnRPZmZzZXQ6Y29udGVudE9mZnNldERlbHRhIGFuaW1hdGVkOmFuaW1hdGVkXTsKK30KKworLSAo
dm9pZClzY3JvbGxXaXRoU2Nyb2xsVG9FeHRlbnRBbmltYXRpb25UbzooQ0dQb2ludClvZmZzZXQK
K3sKKyAgICBhdXRvIHNjcm9sbFZpZXcgPSBfc2Nyb2xsVmlldy5nZXRBdXRvcmVsZWFzZWQoKTsK
KyAgICBbc2Nyb2xsVmlldyBfc2V0Q29udGVudE9mZnNldFdpdGhEZWNlbGVyYXRpb25BbmltYXRp
b246b2Zmc2V0XTsKK30KKworLSAoQ0dQb2ludCljb250ZW50T2Zmc2V0Cit7CisgICAgYXV0byBz
Y3JvbGxWaWV3ID0gX3Njcm9sbFZpZXcuZ2V0QXV0b3JlbGVhc2VkKCk7CisgICAgaWYgKCFzY3Jv
bGxWaWV3KQorICAgICAgICByZXR1cm4gQ0dQb2ludFplcm87CisKKyAgICByZXR1cm4gW3Njcm9s
bFZpZXcgY29udGVudE9mZnNldF07Cit9CisKKy0gKENHUG9pbnQpYm91bmRlZENvbnRlbnRPZmZz
ZXQ6KENHUG9pbnQpb2Zmc2V0Cit7CisgICAgYXV0byBzY3JvbGxWaWV3ID0gX3Njcm9sbFZpZXcu
Z2V0QXV0b3JlbGVhc2VkKCk7CisgICAgaWYgKCFzY3JvbGxWaWV3KQorICAgICAgICByZXR1cm4g
Q0dQb2ludFplcm87CisKKyAgICByZXR1cm4gW3Njcm9sbFZpZXcgX2FkanVzdGVkQ29udGVudE9m
ZnNldEZvckNvbnRlbnRPZmZzZXQ6b2Zmc2V0XTsKK30KKworLSAoQ0dTaXplKWludGVyYWN0aXZl
U2Nyb2xsVmVsb2NpdHkKK3sKKyAgICBhdXRvIHNjcm9sbFZpZXcgPSBfc2Nyb2xsVmlldy5nZXRB
dXRvcmVsZWFzZWQoKTsKKyAgICBpZiAoIXNjcm9sbFZpZXcpCisgICAgICAgIHJldHVybiBDR1Np
emVaZXJvOworCisgICAgcmV0dXJuIENHU2l6ZU1ha2Uoc2Nyb2xsVmlldy5faG9yaXpvbnRhbFZl
bG9jaXR5ICogMTAwMCwgc2Nyb2xsVmlldy5fdmVydGljYWxWZWxvY2l0eSAqIDEwMDApOworfQor
CistIChXZWJDb3JlOjpSZWN0RWRnZXM8Ym9vbD4pc2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zm
c2V0OihDR1BvaW50KW9mZnNldAoreworICAgIGF1dG8gc2Nyb2xsVmlldyA9IF9zY3JvbGxWaWV3
LmdldEF1dG9yZWxlYXNlZCgpOworICAgIGlmICghc2Nyb2xsVmlldykKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIFVJRWRnZUluc2V0cyBjb250ZW50SW5zZXRzID0gc2Nyb2xsVmlldy5hZGp1
c3RlZENvbnRlbnRJbnNldDsKKworICAgIENHU2l6ZSBjb250ZW50U2l6ZSA9IHNjcm9sbFZpZXcu
Y29udGVudFNpemU7CisgICAgQ0dTaXplIHNjcm9sbFZpZXdTaXplID0gc2Nyb2xsVmlldy5ib3Vu
ZHMuc2l6ZTsKKworICAgIENHUG9pbnQgbWluaW11bUNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFr
ZSgtY29udGVudEluc2V0cy5sZWZ0LCAtY29udGVudEluc2V0cy50b3ApOworICAgIENHUG9pbnQg
bWF4aW11bUNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFrZShzdGQ6Om1heChtaW5pbXVtQ29udGVu
dE9mZnNldC54LCBjb250ZW50U2l6ZS53aWR0aCArIGNvbnRlbnRJbnNldHMucmlnaHQgLSBzY3Jv
bGxWaWV3U2l6ZS53aWR0aCksIHN0ZDo6bWF4KG1pbmltdW1Db250ZW50T2Zmc2V0LnksIGNvbnRl
bnRTaXplLmhlaWdodCArIGNvbnRlbnRJbnNldHMuYm90dG9tIC0gc2Nyb2xsVmlld1NpemUuaGVp
Z2h0KSk7CisKKyAgICBXZWJDb3JlOjpSZWN0RWRnZXM8Ym9vbD4gZWRnZXM7CisKKyAgICBlZGdl
cy5zZXRUb3Aob2Zmc2V0LnkgPiBtaW5pbXVtQ29udGVudE9mZnNldC55KTsKKyAgICBlZGdlcy5z
ZXRCb3R0b20ob2Zmc2V0LnkgPCBtYXhpbXVtQ29udGVudE9mZnNldC55KTsKKyAgICBlZGdlcy5z
ZXRMZWZ0KG9mZnNldC54ID4gbWluaW11bUNvbnRlbnRPZmZzZXQueCk7CisgICAgZWRnZXMuc2V0
UmlnaHQob2Zmc2V0LnggPCBtYXhpbXVtQ29udGVudE9mZnNldC54KTsKKworICAgIHJldHVybiBl
ZGdlczsKK30KKworLSAoV2ViQ29yZTo6UmVjdEVkZ2VzPGJvb2w+KXJ1YmJlcmJhbmRhYmxlRGly
ZWN0aW9ucworeworICAgIGF1dG8gc2Nyb2xsVmlldyA9IF9zY3JvbGxWaWV3LmdldEF1dG9yZWxl
YXNlZCgpOworICAgIGlmICghc2Nyb2xsVmlldykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IFdlYkNvcmU6OlJlY3RFZGdlczxib29sPiBlZGdlczsKKworICAgIGVkZ2VzLnNldFRvcChzY3Jv
bGxWaWV3Ll9jYW5TY3JvbGxZKTsKKyAgICBlZGdlcy5zZXRCb3R0b20oZWRnZXMudG9wKCkpOwor
ICAgIGVkZ2VzLnNldExlZnQoc2Nyb2xsVmlldy5fY2FuU2Nyb2xsWCk7CisgICAgZWRnZXMuc2V0
UmlnaHQoZWRnZXMubGVmdCgpKTsKIAotICAgIGF1dG8gY29udGVudE9mZnNldCA9IHZlbG9jaXR5
LnNjYWxlZChhY2NlbGVyYXRpb25GYWN0b3IgKiBmcmFtZUR1cmF0aW9uKTsKLSAgICBbX3Njcm9s
bGFibGUgc2Nyb2xsQnlDb250ZW50T2Zmc2V0OmNvbnRlbnRPZmZzZXQgYW5pbWF0ZWQ6Tk9dOwor
ICAgIHJldHVybiBlZGdlczsKIH0KIAogQGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351795</attachid>
            <date>2018-10-08 11:30:03 -0700</date>
            <delta_ts>2018-10-08 12:03:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190345-20181008113003.patch</filename>
            <type>text/plain</type>
            <size>44090</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2NjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZjMGRhNTUyYmIwYmNkOGMz
MzNhMzgxNWU1ZGRjNWVmN2E1OTVjZWQuLmEyZWJhNWQ1YmEzMzJkZjY3OTJmZDk4MjFlZmQ2M2M1
NTY5YzE2ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ1IEBACisyMDE4LTEwLTA4ICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkanVzdCBrZXlib2Fy
ZCBzY3JvbGxpbmcgYW5pbWF0b3IgdG8gYmUgYSBiaXQgbW9yZSBwaHlzaWNhbAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwMzQ1CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS80MzQ5NDM5Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciwg
d2hpY2ggd3JhcHMgV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yCisgICAgICAgIGFuZCBwcm92
aWRlcyBhIHJlYXNvbmFibGUgc2V0IG9mIGRlZmF1bHQgYmVoYXZpb3JzIGZvciBVSVNjcm9sbFZp
ZXcuCisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgb24gdGhlIHdheSB0byBXS0tleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IKKyAgICAgICAgYmVpbmcgcGxhdGZvcm0tIGFuZCB0b29sa2l0
LWFnbm9zdGljLCBhbmQgaGVscHMgYXZvaWQgYWRkaW5nIGEgd2hvbGUKKyAgICAgICAgYnVuY2gg
b2YgY29kZSB0byBXS0NvbnRlbnRWaWV3LgorCisgICAgICAgIEFkb3B0IFVJS2l0J3Mgc2Nyb2xs
LXRvLXRvcCBhbmltYXRpb24gY3VydmUgZm9yIHdob2xlLWRvY3VtZW50IHNjcm9sbHMuCisKKyAg
ICAgICAgQWRqdXN0IFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcidzIHBoeXNpY3M7IGl0IG5v
dyBzaW11bGF0ZXMgYSBzcHJpbmcKKyAgICAgICAgYXR0YWNoZWQgdG8gdGhlIHBhZ2Ugd2hlbiBk
ZWNlbGVyYXRpbmcuIFdoZW4gYSBrZXkgaXMgcHJlc3NlZCwgaXQgYXBwbGllcworICAgICAgICBh
IGNvbnN0YW50IGZvcmNlIHRvIHRoZSBwYWdlICh1cCB0byBzb21lIG1heGltdW0gdmVsb2NpdHkp
LiBXaGVuIHJlbGVhc2VkLAorICAgICAgICB0aGUgc3ByaW5nIGNhdXNlcyB0aGUgcGFnZSB0byBk
ZWNlbGVyYXRlIHNtb290aGx5LgorCisgICAgICAgIEFkZCBydWJiZXItYmFuZGluZyB0byBrZXli
b2FyZCBzY3JvbGxpbmcsIGJhc2VkIG9uIHRoZSBzYW1lIHNwcmluZyB0aGF0CisgICAgICAgIGRl
Y2VsZXJhdGVzIHRoZSBwYWdlLgorCisgICAgICAgIFJlbW92ZSB0aGUgaW5pdGlhbCBib3VuY2Ug
b24ga2V5ZG93biBiZWZvcmUgc3RhcnRpbmcgdGhlIHNtb290aCBzY3JvbGwuCisKKyAgICAgICAg
UmVtb3ZlIGFycm93IGtleSBjb21tYW5kcyBmcm9tIFdLQ29udGVudFZpZXc7IHRoaXMgYXZvaWRz
IGRvdWJsZS1wcm9jZXNzaW5nCisgICAgICAgIGluY29taW5nIGFycm93IGtleSBldmVudHMsIG1h
a2VzIHRoZSBldmVudCBzdHJlYW0gbWFrZSBtb3JlIHNlbnNlLCBhbmQgd2FzCisgICAgICAgIGVu
dGlyZWx5IHVubmVjZXNzYXJ5LgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQ
SS5oOgorICAgICAgICBBZGQgYSB3aWRlIHZhcmlldHkgb2YgdXNlZnVsIFNQSS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgUmVtb3ZlIF9zY3JvbGxC
eUNvbnRlbnRPZmZzZXQ6YW5pbWF0ZWQ6IGJlY2F1c2UgaXQncyBvbmx5IHVzZWQgYnkKKyAgICAg
ICAgdGhlIGtleWJvYXJkIHNjcm9sbGluZyBtZWNoYW5pc20uCisKKyAgICAgICAgUmVtb3ZlIF9h
cnJvd0tleSBiZWNhdXNlIHdlJ3JlIHJlbW92aW5nIHRoZSBhcnJvdyBrZXkgY29tbWFuZHMuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IHNldHVwSW50ZXJhY3Rpb25dKToKKyAgICAgICAgQ3JlYXRlIGEg
V0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciAod2hpY2gga25vd3MgaG93IHRvIGRpcmVjdGx5
CisgICAgICAgIG1hbmlwdWxhdGUgYSBVSVNjcm9sbFZpZXcpIGluc3RlYWQgb2YgYSBXS0tleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IKKyAgICAgICAgKHdoaWNoIHJlcXVpcmVzIGl0cyBjbGllbnRz
IHRvIGltcGxlbWVudCBldmVyeXRoaW5nIGluIHRlcm1zIG9mIGFuCisgICAgICAgIGFic3RyYWN0
IGludGVyZmFjZS4KKworICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNjcm9sbFZpZXdXaWxsU3Rh
cnRQYW5PclBpbmNoR2VzdHVyZV0pOgorICAgICAgICBJbmZvcm0gdGhlIGtleWJvYXJkIHNjcm9s
bGluZyBhbmltYXRvciB0aGF0IHRoZSB1c2VyIGlzIGdvaW5nIHRvIHN0YXJ0CisgICAgICAgIGFu
IGludGVyYWN0aXZlIGdlc3R1cmUgdGhhdCBuZWVkcyBjb250cm9sIG9mIHRoZSBzY3JvbGwgdmll
dywgc28gaXQKKyAgICAgICAgY2FuIHN0b3AgaXRzIGN1cnJlbnQgYW5pbWF0ZWQgc2Nyb2xsLgor
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2FuUGVyZm9ybUFjdGlvbkZvcldlYlZpZXc6d2l0
aFNlbmRlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBrZXlDb21tYW5kc10pOgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hcnJvd0tleUZvcldlYlZpZXc6XSk6IERlbGV0ZWQuCisg
ICAgICAgIFJlbW92ZSBhcnJvdyBrZXkgY29tbWFuZHMuCisKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBrZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvcjpkaXN0YW5jZUZvckluY3JlbWVudDpdKToK
KyAgICAgICAgU2NhbGUgZnJvbSBjb250ZW50IHRvIFdLV2ViVmlldyBjb29yZGluYXRlIHNwYWNl
OyB0aGUga2V5Ym9hcmQgc2Nyb2xsaW5nCisgICAgICAgIGFuaW1hdG9yIG9wZXJhdGVzIGluIFdL
V2ViVmlldyBjb29yZGluYXRlcy4gVGhpcyB3YXMgYnJva2VuIGJlZm9yZS4KKworICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGtleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yV2lsbFNjcm9sbDpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpc1Njcm9sbGFibGVGb3JLZXlib2FyZFNjcm9sbFZp
ZXdBbmltYXRvcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpc0tleWJvYXJkU2Nyb2xs
YWJsZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRpc3RhbmNlRm9yU2Ny
b2xsaW5nSW5jcmVtZW50Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNj
cm9sbEJ5Q29udGVudE9mZnNldDphbmltYXRlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgUmVpbXBs
ZW1lbnQgdGhlc2UgYXMga2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgZGVsZWdhdGUgbWV0aG9k
cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9y
Lmg6CisgICAgICAgIEFkZCBXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yLCBoaWRlIHRoZSBp
bnRlcmZhY2UgZm9yCisgICAgICAgIFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciBpdHNlbGYg
aW4gdGhlIGltcGxlbWVudGF0aW9uIGZpbGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dL
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yIGluaXRXaXRoU2Nyb2xsYWJsZTpdKToKKyAgICAgICAgKC1bV0tLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yIHBhcmFtZXRlcnNdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNj
cm9sbGluZ0FuaW1hdG9yIGludmFsaWRhdGVdKToKKyAgICAgICAgKHVuaXRWZWN0b3IpOgorICAg
ICAgICBSZXR1cm4gYSB1bml0IHZlY3RvciBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorCisgICAg
ICAgIChwZXJwZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9yKToKKyAgICAgICAgUmV0dXJuIGEg
cG9zaXRpdmUgdW5pdCB2ZWN0b3IgcGVycGVuZGljdWxhciB0byB0aGUgYXhpcyBvZiB0aGUgZ2l2
ZW4gZGlyZWN0aW9uLgorICAgICAgICBVc2VmdWwgZm9yIG11bHRpcGx5aW5nIHdpdGggYW5vdGhl
ciB2ZWN0b3IgdG8gcmVtb3ZlIHRoZSBjb21wb25lbnQgaW4gdGhlCisgICAgICAgIGF4aXMgb2Yg
dGhlIGdpdmVuIGRpcmVjdGlvbi4KKworICAgICAgICAoYm94U2lkZSk6CisgICAgICAgIENvbnZl
cnQgU2Nyb2xsaW5nRGlyZWN0aW9uIHRvIFdlYkNvcmU6OlBoeXNpY2FsQm94U2lkZSwgZm9yIHVz
ZSB3aXRoIFJlY3RFZGdlcy4KKworICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3Iga2V5Ym9hcmRTY3JvbGxGb3JFdmVudDpdKToKKyAgICAgICAgSW5zdGVhZCBvZiBqdXN0IHJl
dHVybmluZyB0aGUgZGVzaXJlZCBpbmNyZW1lbnQsIGNvbXB1dGUgZXZlcnl0aGluZyB3ZSdsbCBu
ZWVkCisgICAgICAgIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHNjcm9sbCAoaW5jbHVkaW5nIHRo
ZSBmb3JjZSBhcHBsaWVkLCBtYXhpbXVtCisgICAgICAgIHZlbG9jaXR5LCBldGMuKSBhbmQgcmV0
dXJuIHRoZW0gdG9nZXRoZXIuCisKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yIGJlZ2luV2l0aEV2ZW50Ol0pOgorICAgICAgICBVc2UgdGhlIHNjcm9sbGFibGUncyBuYXRp
dmUgc2Nyb2xsLXRvLWV4dGVudCBhbmltYXRpb24gKGUuZy4gVUlTY3JvbGxWaWV3J3MKKyAgICAg
ICAgc2Nyb2xsLXRvLXRvcCBjdXJ2ZSkgZm9yIHdob2xlLWRvY3VtZW50IHNjcm9sbHMuCisKKyAg
ICAgICAgUmVtb3ZlIHRoZSBmaXJzdCBkaXNjcmV0ZSBzY3JvbGw7IHN0YXJ0IHRoZSBzbW9vdGgg
c2Nyb2xsIGltbWVkaWF0ZWx5LgorCisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvciBoYW5kbGVLZXlFdmVudDpdKToKKyAgICAgICAgKGZhcnRoZXN0UG9pbnRJbkRpcmVjdGlv
bik6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciBzdG9wQW5pbWF0ZWRT
Y3JvbGxdKToKKyAgICAgICAgU3RvcCB0aGUgY3VycmVudCBzY3JvbGwuIExldCB0aGUgc3ByaW5n
IGNvYXN0IHRvIGl0cyBuYXR1cmFsIHN0b3BwaW5nCisgICAgICAgIHBvaW50IGdpdmVuIHRoZSBz
eXN0ZW0ncyBjdXJyZW50IGVuZXJneSwgdW5sZXNzIHRoYXQgc3RvcHBpbmcgcG9pbnQgaXMKKyAg
ICAgICAgbGVzcyB0aGFuIG9uZSBpbmNyZW1lbnQgZnJvbSB0aGUgc3RhcnRpbmcgcG9pbnQuIElu
IHRoYXQgY2FzZSwgd2UgYXR0YWNoCisgICAgICAgIHRoZSBzcHJpbmcgdG8gL3RoYXQvIHBvaW50
IGFuZCBsZXQgaXQgcnVuLgorCisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRv
ciBzdGFydERpc3BsYXlMaW5rSWZOZWVkZWRdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yIHN0b3BEaXNwbGF5TGlua10pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0b3Igd2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGxdKToKKyAgICAgICAgSW1t
ZWRpYXRlbHkgc3RvcCBhbGwgbW90aW9uIGlmIHRoZSB1c2VyIHRvdWNoZXMgdGhlIHNjcmVlbiB0
byBzY3JvbGwKKyAgICAgICAgb3Igem9vbSB3aXRoIGZpbmdlcnMuCisKKyAgICAgICAgKC1bV0tL
ZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIGRpc3BsYXlMaW5rRmlyZWQ6XSk6CisgICAgICAgIFVw
ZGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIHNjcm9sbGFibGUgYmFzZWQgb24gdGhlIGFwcGxpZWQg
Zm9yY2UgYW5kIHNwcmluZy4KKyAgICAgICAgU2VlIHRoZSBjb21tZW50cyBpbiB0aGlzIGZ1bmN0
aW9uIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvciBpbml0XSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
aW5pdFdpdGhTY3JvbGxWaWV3Ol0pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0Fu
aW1hdG9yIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRv
ciBpbnZhbGlkYXRlXSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
c2V0RGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
d2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGxdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9s
bFZpZXdBbmltYXRvciBiZWdpbldpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNj
cm9sbFZpZXdBbmltYXRvciBoYW5kbGVLZXlFdmVudDpdKToKKyAgICAgICAgKC1bV0tLZXlib2Fy
ZFNjcm9sbFZpZXdBbmltYXRvciBpc0tleWJvYXJkU2Nyb2xsYWJsZV0pOgorICAgICAgICAoLVtX
S0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIGRpc3RhbmNlRm9ySW5jcmVtZW50Ol0pOgorICAg
ICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIHNjcm9sbFRvQ29udGVudE9mZnNl
dDphbmltYXRlZDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciBz
Y3JvbGxXaXRoU2Nyb2xsVG9FeHRlbnRBbmltYXRpb25UbzpdKToKKyAgICAgICAgKC1bV0tLZXli
b2FyZFNjcm9sbFZpZXdBbmltYXRvciBjb250ZW50T2Zmc2V0XSk6CisgICAgICAgICgtW1dLS2V5
Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgYm91bmRlZENvbnRlbnRPZmZzZXQ6XSk6CisgICAgICAg
ICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgaW50ZXJhY3RpdmVTY3JvbGxWZWxvY2l0
eV0pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIHNjcm9sbGFibGVE
aXJlY3Rpb25zRnJvbU9mZnNldDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvciBydWJiZXJiYW5kYWJsZURpcmVjdGlvbnNdKToKKyAgICAgICAgQWRkIFdLS2V5Ym9h
cmRTY3JvbGxWaWV3QW5pbWF0b3IsIHdoaWNoIHdyYXBzIFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvcgorICAgICAgICBhbmQgcHJvdmlkZXMgYW5pbWF0ZWQga2V5Ym9hcmQgc2Nyb2xsaW5nIGZv
ciBhIFVJU2Nyb2xsVmlldyB3aXRob3V0IG11Y2gKKyAgICAgICAgYWRkaXRpb25hbCBwbHVtYmlu
ZyB3b3JrLiBJdCBjb250YWlucyByZWFzb25hYmxlIGRlZmF1bHQgYmVoYXZpb3JzLAorICAgICAg
ICB3aXRoIGEgZmV3IG9wdGlvbmFsIGRlbGVnYXRlIG1ldGhvZHMgZm9yIGN1c3RvbWl6YXRpb24u
CisKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIF9zY3JvbGxPZmZzZXRG
b3JFdmVudDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yIHN0YXJ0QW5pbWF0ZWRTY3JvbGxdKTogRGVsZXRlZC4KKwogMjAxOC0wOS0yOSAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjIzNjYzMS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
c3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0
U1BJLmgKaW5kZXggYWFlY2EwZWZjYjUzODQzOThmODE5Y2NmZWFkNTg2N2IxNzIzNzQxMC4uYjhi
OTkxMTM0MDBmZjk0MTNkZDdjMTU5YTU4OTdiMWU1Y2QwNzBhNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTMyOCw2ICszMjgsOCBAQCB0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBVSVNjcm9sbFZpZXdJbmRpY2F0b3JJbnNldEFkanVzdG1lbnRCZWhh
dmlvcikgewogLSAodm9pZClfc3RvcFNjcm9sbGluZ0FuZFpvb21pbmdBbmltYXRpb25zOwogLSAo
dm9pZClfem9vbVRvQ2VudGVyOihDR1BvaW50KWNlbnRlciBzY2FsZTooQ0dGbG9hdClzY2FsZSBk
dXJhdGlvbjooQ0ZUaW1lSW50ZXJ2YWwpZHVyYXRpb24gZm9yY2U6KEJPT0wpZm9yY2U7CiAtICh2
b2lkKV96b29tVG9DZW50ZXI6KENHUG9pbnQpY2VudGVyIHNjYWxlOihDR0Zsb2F0KXNjYWxlIGR1
cmF0aW9uOihDRlRpbWVJbnRlcnZhbClkdXJhdGlvbjsKKy0gKGRvdWJsZSlfaG9yaXpvbnRhbFZl
bG9jaXR5OworLSAoZG91YmxlKV92ZXJ0aWNhbFZlbG9jaXR5OwogQHByb3BlcnR5IChub25hdG9t
aWMsIGdldHRlcj1pc1pvb21FbmFibGVkKSBCT09MIHpvb21FbmFibGVkOwogQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9X2lzQW5pbWF0aW5nWm9vbSkgQk9PTCBpc0FuaW1h
dGluZ1pvb207CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1faXNBbmlt
YXRpbmdTY3JvbGwpIEJPT0wgaXNBbmltYXRpbmdTY3JvbGw7CkBAIC0xMDIyLDYgKzEwMjQsMTAg
QEAgdHlwZWRlZiBOU0ludGVnZXIgVUlDb21wb3NpdGluZ01vZGU7CiAtICh2b2lkKV9hZGp1c3RG
b3JBdXRvbWF0aWNLZXlib2FyZEluZm86KE5TRGljdGlvbmFyeSAqKWluZm8gYW5pbWF0ZWQ6KEJP
T0wpYW5pbWF0ZWQgbGFzdEFkanVzdG1lbnQ6KENHRmxvYXQqKWxhc3RBZGp1c3RtZW50OwogLSAo
Qk9PTClfaXNTY3JvbGxpbmdUb1RvcDsKIC0gKENHUG9pbnQpX2FuaW1hdGVkVGFyZ2V0T2Zmc2V0
OworLSAoQk9PTClfY2FuU2Nyb2xsWDsKKy0gKEJPT0wpX2NhblNjcm9sbFk7CistICh2b2lkKV9z
ZXRDb250ZW50T2Zmc2V0V2l0aERlY2VsZXJhdGlvbkFuaW1hdGlvbjooQ0dQb2ludCljb250ZW50
T2Zmc2V0OworLSAoQ0dQb2ludClfYWRqdXN0ZWRDb250ZW50T2Zmc2V0Rm9yQ29udGVudE9mZnNl
dDooQ0dQb2ludCljb250ZW50T2Zmc2V0OwogQGVuZAogCiBAaW50ZXJmYWNlIFVJUGVyaXBoZXJh
bEhvc3QgKElQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tCmluZGV4IDg3OWY5MzI1OWM2ZDMxOTJiMzY0NjZjZTZhYmI1MGQ1M2Y1YTY0MWMuLjQz
OTFjYWIzNDMwNTg2ODhhYmMzM2E5ZThjY2MzYTE4YmRhY2U0NGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtMjEyOSwyNCArMjEyOSw2
IEBAIC0gKEJPT0wpX3Njcm9sbFRvUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qg
b3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS0gKHZv
aWQpX3Njcm9sbEJ5Q29udGVudE9mZnNldDooV2ViQ29yZTo6RmxvYXRQb2ludCljb250ZW50T2Zm
c2V0RGVsdGEgYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKLXsKLSAgICBXZWJDb3JlOjpGbG9hdFBv
aW50IHNjYWxlZE9mZnNldERlbHRhID0gY29udGVudE9mZnNldERlbHRhOwotICAgIENHRmxvYXQg
em9vbVNjYWxlID0gY29udGVudFpvb21TY2FsZShzZWxmKTsKLSAgICBzY2FsZWRPZmZzZXREZWx0
YS5zY2FsZSh6b29tU2NhbGUpOwotCi0gICAgQ0dQb2ludCBjdXJyZW50T2Zmc2V0ID0gW19zY3Jv
bGxWaWV3IF9pc0FuaW1hdGluZ1Njcm9sbF0gPyBbX3Njcm9sbFZpZXcgX2FuaW1hdGVkVGFyZ2V0
T2Zmc2V0XSA6IFtfc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XTsKLSAgICBDR1BvaW50IGJvdW5k
ZWRPZmZzZXQgPSBjb250ZW50T2Zmc2V0Qm91bmRlZEluVmFsaWRSYW5nZShfc2Nyb2xsVmlldy5n
ZXQoKSwgY3VycmVudE9mZnNldCArIHNjYWxlZE9mZnNldERlbHRhKTsKLQotICAgIGlmIChDR1Bv
aW50RXF1YWxUb1BvaW50KGJvdW5kZWRPZmZzZXQsIGN1cnJlbnRPZmZzZXQpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgW19jb250ZW50VmlldyB3aWxsU3RhcnRab29tT3JTY3JvbGxdOwotCi0gICAg
TE9HX1dJVEhfU1RSRUFNKFZpc2libGVSZWN0cywgc3RyZWFtIDw8ICJfc2Nyb2xsQnlDb250ZW50
T2Zmc2V0OiBzY3JvbGxpbmcgdG8gIiA8PCBXZWJDb3JlOjpGbG9hdFBvaW50KGJvdW5kZWRPZmZz
ZXQpKTsKLQotICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OmJvdW5kZWRPZmZzZXQg
YW5pbWF0ZWQ6YW5pbWF0ZWRdOwotfQotCiAtICh2b2lkKV96b29tT3V0V2l0aE9yaWdpbjooV2Vi
Q29yZTo6RmxvYXRQb2ludClvcmlnaW4gYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKIHsKICAgICBb
c2VsZiBfem9vbVRvUG9pbnQ6b3JpZ2luIGF0U2NhbGU6W19zY3JvbGxWaWV3IG1pbmltdW1ab29t
U2NhbGVdIGFuaW1hdGVkOmFuaW1hdGVkXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKaW5kZXggYTFhMDQ1NjBjMmIwNzdm
Njk0MDdhZDhlZmUwNGUzNjdhYjg4MzFlOS4uNzE4OWNhMGU2ZmE3MzRkMDU2ZDUwMjYyOTlhNWFj
NjRlYjdlMWM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld0ludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlld0ludGVybmFsLmgKQEAgLTk3LDcgKzk3LDYgQEAgc3RydWN0IFByaW50SW5m
bzsKIAogLSAodm9pZClfc2Nyb2xsVG9Db250ZW50U2Nyb2xsUG9zaXRpb246KFdlYkNvcmU6OkZs
b2F0UG9pbnQpc2Nyb2xsUG9zaXRpb24gc2Nyb2xsT3JpZ2luOihXZWJDb3JlOjpJbnRQb2ludClz
Y3JvbGxPcmlnaW47CiAtIChCT09MKV9zY3JvbGxUb1JlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl0
YXJnZXRSZWN0IG9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4gbWluaW11bVNjcm9s
bERpc3RhbmNlOihmbG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFuY2U7Ci0tICh2b2lkKV9zY3JvbGxC
eUNvbnRlbnRPZmZzZXQ6KFdlYkNvcmU6OkZsb2F0UG9pbnQpb2Zmc2V0IGFuaW1hdGVkOihCT09M
KWFuaW1hdGVkOwogLSAodm9pZClfem9vbVRvRm9jdXNSZWN0OihXZWJDb3JlOjpGbG9hdFJlY3Qp
Zm9jdXNlZEVsZW1lbnRSZWN0IHNlbGVjdGlvblJlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdClzZWxl
Y3Rpb25SZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzIGluc2lkZUZpeGVkOihCT09MKWluc2lkZUZp
eGVkIGZvbnRTaXplOihmbG9hdClmb250U2l6ZSBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5pbXVt
U2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlIGFsbG93U2NhbGluZzooQk9P
TClhbGxvd1NjYWxpbmcgZm9yY2VTY3JvbGw6KEJPT0wpZm9yY2VTY3JvbGw7CiAtIChCT09MKV96
b29tVG9SZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCB3aXRoT3JpZ2luOihXZWJD
b3JlOjpGbG9hdFBvaW50KW9yaWdpbiBmaXRFbnRpcmVSZWN0OihCT09MKWZpdEVudGlyZVJlY3Qg
bWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1h
eGltdW1TY2FsZSBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0KW1pbmltdW1TY3JvbGxEaXN0
YW5jZTsKIC0gKHZvaWQpX3pvb21PdXRXaXRoT3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9y
aWdpbiBhbmltYXRlZDooQk9PTClhbmltYXRlZDsKQEAgLTEzNSw3ICsxMzQsNiBAQCBzdHJ1Y3Qg
UHJpbnRJbmZvOwogLSAodm9pZClfZGlkQ2hhbmdlRWRpdG9yU3RhdGU7CiAKIC0gKHZvaWQpX2Fk
ZFNob3J0Y3V0OihpZClzZW5kZXI7Ci0tICh2b2lkKV9hcnJvd0tleTooaWQpc2VuZGVyOwogLSAo
dm9pZClfZGVmaW5lOihpZClzZW5kZXI7CiAtICh2b2lkKV9sb29rdXA6KGlkKXNlbmRlcjsKIC0g
KHZvaWQpX3NoYXJlOihpZClzZW5kZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKaW5kZXggYTIzOWRlOWRjNWUxZWMw
ODU0NmVkMzFlYTM3MmQwZGM1MTQ0N2M1MC4uMWNjMDlkYzRmYTU5MTRkMzExZWRhMjdmOGFkMjZm
YjE4ZDFlMmM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApAQCAtMTA2LDcgKzEwNiw2IEBAIHR5cGVkZWYgc3Rk
OjpwYWlyPFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3QsIEludGVyYWN0aW9u
SW5mb3JtYXRpb25DCiAKICNkZWZpbmUgRk9SX0VBQ0hfV0tDT05URU5UVklFV19BQ1RJT04oTSkg
XAogICAgIE0oX2FkZFNob3J0Y3V0KSBcCi0gICAgTShfYXJyb3dLZXkpIFwKICAgICBNKF9kZWZp
bmUpIFwKICAgICBNKF9sb29rdXApIFwKICAgICBNKF9wcm9tcHRGb3JSZXBsYWNlKSBcCkBAIC0y
MzUsNyArMjM0LDcgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKICAgICAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpJbnB1dFZpZXdVcGRhdGVEZWZlcnJlcj4gX2lucHV0Vmll
d1VwZGF0ZURlZmVycmVyOwogCi0gICAgUmV0YWluUHRyPFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvcj4gX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I7CisgICAgUmV0YWluUHRyPFdLS2V5Ym9h
cmRTY3JvbGxWaWV3QW5pbWF0b3I+IF9rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOwogCiAgICAg
Qk9PTCBfaXNFZGl0YWJsZTsKICAgICBCT09MIF9zaG93aW5nVGV4dFN0eWxlT3B0aW9uczsKQEAg
LTI4MywxMSArMjgyLDEwIEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0aW9uRGF0YSB7CiAKIEBlbmQK
IAotQGludGVyZmFjZSBXS0NvbnRlbnRWaWV3IChXS0ludGVyYWN0aW9uKSA8VUlHZXN0dXJlUmVj
b2duaXplckRlbGVnYXRlLCBVSVRleHRBdXRvc2Nyb2xsaW5nLCBVSVRleHRJbnB1dE11bHRpRG9j
dW1lbnQsIFVJVGV4dElucHV0UHJpdmF0ZSwgVUlXZWJGb3JtQWNjZXNzb3J5RGVsZWdhdGUsIFVJ
V2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVdLSW50ZXJhY3Rpb25W
aWV3UHJvdG9jb2wsIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnREZWxlZ2F0ZSwgV0tGaWxlVXBsb2Fk
UGFuZWxEZWxlZ2F0ZQorQGludGVyZmFjZSBXS0NvbnRlbnRWaWV3IChXS0ludGVyYWN0aW9uKSA8
VUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVRleHRBdXRvc2Nyb2xsaW5nLCBVSVRleHRJ
bnB1dE11bHRpRG9jdW1lbnQsIFVJVGV4dElucHV0UHJpdmF0ZSwgVUlXZWJGb3JtQWNjZXNzb3J5
RGVsZWdhdGUsIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVdL
SW50ZXJhY3Rpb25WaWV3UHJvdG9jb2wsIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnREZWxlZ2F0ZSwg
V0tGaWxlVXBsb2FkUGFuZWxEZWxlZ2F0ZSwgV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvckRl
bGVnYXRlCiAjaWYgIVBMQVRGT1JNKFdBVENIT1MpICYmICFQTEFURk9STShBUFBMRVRWKQogICAg
ICwgV0tTaGFyZVNoZWV0RGVsZWdhdGUKICNlbmRpZgotICAgICwgV0tLZXlib2FyZFNjcm9sbGFi
bGUKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKICAgICAsIFVJRHJhZ0ludGVyYWN0aW9u
RGVsZWdhdGUsIFVJRHJvcEludGVyYWN0aW9uRGVsZWdhdGUKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0K
aW5kZXggN2U2NGE1ZWUyY2YxYmI4ZGJkNzk5YmM4NDZmNzNhNDEzNWEwYTc2ZC4uN2U2NDViOTU2
NjI5Y2M2MmE5OTZiNjI0NjE5NDJjNmM2NGFmOWNlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0xMjEs
NyArMTIxLDcgQEAKICNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XS1BsYXRmb3JtRmlsZVVwbG9h
ZFBhbmVsLm1tPgogI2VuZGlmCiAKLUBpbnRlcmZhY2UgVUlFdmVudChVSUV2ZW50SW50ZXJuYWwp
CitAaW50ZXJmYWNlIFVJRXZlbnQgKFVJRXZlbnRJbnRlcm5hbCkKIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBhc3NpZ24pIFVJS2V5Ym9hcmRJbnB1dEZsYWdzIF9pbnB1dEZsYWdzOwogQGVuZAogCkBA
IC02MzgsNyArNjM4LDggQEAgLSAodm9pZClzZXR1cEludGVyYWN0aW9uCiAgICAgICAgIFtzZWxm
LnN1cGVydmlldyBhZGRTdWJ2aWV3Ol9pbnRlcmFjdGlvblZpZXdzQ29udGFpbmVyVmlldy5nZXQo
KV07CiAgICAgfQogCi0gICAgX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgPSBhZG9wdE5TKFtb
V0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIGFsbG9jXSBpbml0V2l0aFNjcm9sbGFibGU6c2Vs
Zl0pOworICAgIF9rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yID0gYWRvcHROUyhbW1dLS2V5Ym9h
cmRTY3JvbGxWaWV3QW5pbWF0b3IgYWxsb2NdIGluaXRXaXRoU2Nyb2xsVmlldzpfd2ViVmlldy5z
Y3JvbGxWaWV3XSk7CisgICAgW19rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIHNldERlbGVnYXRl
OnNlbGZdOwogCiAgICAgW3NlbGYubGF5ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBmb3JLZXlQYXRoOkAi
dHJhbnNmb3JtIiBvcHRpb25zOk5TS2V5VmFsdWVPYnNlcnZpbmdPcHRpb25Jbml0aWFsIGNvbnRl
eHQ6bmlsXTsKIApAQCAtMjA2OCw2ICsyMDY5LDggQEAgLSAodm9pZClzY3JvbGxWaWV3V2lsbFN0
YXJ0UGFuT3JQaW5jaEdlc3R1cmUKIHsKICAgICBfcGFnZS0+aGlkZVZhbGlkYXRpb25NZXNzYWdl
KCk7CiAKKyAgICBbX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Igd2lsbFN0YXJ0SW50ZXJhY3Rp
dmVTY3JvbGxdOworCiAgICAgX2NhblNlbmRUb3VjaEV2ZW50c0FzeW5jaHJvbm91c2x5ID0gWUVT
OwogfQogCkBAIC0yMzExLDEwICsyMzE0LDcgQEAgLSAoQk9PTCljYW5QZXJmb3JtQWN0aW9uOihT
RUwpYWN0aW9uIHdpdGhTZW5kZXI6KGlkKXNlbmRlcgogfQogCiAtIChCT09MKWNhblBlcmZvcm1B
Y3Rpb25Gb3JXZWJWaWV3OihTRUwpYWN0aW9uIHdpdGhTZW5kZXI6KGlkKXNlbmRlcgotewotICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9hcnJvd0tleTopKQotICAgICAgICByZXR1cm4gW3Nl
bGYgaXNGaXJzdFJlc3BvbmRlcl07Ci0gICAgICAgIAoreyAgICAgICAgCiAgICAgYXV0byBlZGl0
b3JTdGF0ZSA9IF9wYWdlLT5lZGl0b3JTdGF0ZSgpOwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKF9zaG93VGV4dFN0eWxlT3B0aW9uczopKQogICAgICAgICByZXR1cm4gZWRpdG9yU3RhdGUu
aXNDb250ZW50UmljaGx5RWRpdGFibGUgJiYgZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5nZSAm
JiAhX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zOwpAQCAtMzA5MCw0NCArMzA5MCwxNCBAQCAtICh2
b2lkKWFjY2Vzc29yeURvbmUKIAogLSAoTlNBcnJheSAqKWtleUNvbW1hbmRzCiB7Ci0gICAgc3Rh
dGljIE5TQXJyYXkqIG5vbkVkaXRhYmxlS2V5Q29tbWFuZHMgPSBbQFsKLSAgICAgICBbVUlLZXlD
b21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dFVwQXJyb3cgbW9kaWZpZXJGbGFn
czowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAgICAgIFtVSUtleUNvbW1hbmQg
a2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0RG93bkFycm93IG1vZGlmaWVyRmxhZ3M6MCBh
Y3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNv
bW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dExlZnRBcnJvdyBtb2RpZmllckZsYWdzOjAgYWN0aW9u
OkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5k
V2l0aElucHV0OlVJS2V5SW5wdXRSaWdodEFycm93IG1vZGlmaWVyRmxhZ3M6MCBhY3Rpb246QHNl
bGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICAKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNv
bW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dFVwQXJyb3cgbW9kaWZpZXJGbGFnczpVSUtleU1vZGlm
aWVyQ29tbWFuZCBhY3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlD
b21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dERvd25BcnJvdyBtb2RpZmllckZs
YWdzOlVJS2V5TW9kaWZpZXJDb21tYW5kIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAot
ICAgICAgIAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlu
cHV0VXBBcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJTaGlmdCBhY3Rpb246QHNlbGVj
dG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRoSW5w
dXQ6VUlLZXlJbnB1dERvd25BcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJTaGlmdCBh
Y3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNv
bW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dExlZnRBcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9k
aWZpZXJTaGlmdCBhY3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlD
b21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dFJpZ2h0QXJyb3cgbW9kaWZpZXJG
bGFnczpVSUtleU1vZGlmaWVyU2hpZnQgYWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0g
ICAgICAgCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0aElucHV0OlVJS2V5SW5w
dXRVcEFycm93IG1vZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmllckFsdGVybmF0ZSBhY3Rpb246QHNl
bGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRo
SW5wdXQ6VUlLZXlJbnB1dERvd25BcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJBbHRl
cm5hdGUgYWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAgICAgW1VJS2V5Q29tbWFu
ZCBrZXlDb21tYW5kV2l0aElucHV0OlVJS2V5SW5wdXRMZWZ0QXJyb3cgbW9kaWZpZXJGbGFnczpV
SUtleU1vZGlmaWVyQWx0ZXJuYXRlIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAg
ICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0UmlnaHRBcnJv
dyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJBbHRlcm5hdGUgYWN0aW9uOkBzZWxlY3Rvcihf
YXJyb3dLZXk6KV0sCi0gICAgICAgCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0
aElucHV0OkAiICIgbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5Oild
LAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpAIiAiIG1vZGlmaWVy
RmxhZ3M6VUlLZXlNb2RpZmllclNoaWZ0IGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAot
ICAgICAgIAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlu
cHV0UGFnZURvd24gbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5Oild
LAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0UGFn
ZURvd24gbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAg
IF0gcmV0YWluXTsKKyAgICBpZiAoIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRh
YmxlKQorICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgc3RhdGljIE5TQXJyYXkqIGVkaXRhYmxl
S2V5Q29tbWFuZHMgPSBbQFsKICAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRoSW5w
dXQ6QCJcdCIgbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX25leHRBY2Nlc3NvcnlU
YWI6KV0sCiAgICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0aElucHV0OkAiXHQiIG1v
ZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmllclNoaWZ0IGFjdGlvbjpAc2VsZWN0b3IoX3ByZXZBY2Nl
c3NvcnlUYWI6KV0KICAgICBdIHJldGFpbl07Ci0gICAgCi0gICAgcmV0dXJuIChfcGFnZS0+ZWRp
dG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkgPyBlZGl0YWJsZUtleUNvbW1hbmRzIDogbm9u
RWRpdGFibGVLZXlDb21tYW5kczsKLX0KLQotLSAodm9pZClfYXJyb3dLZXlGb3JXZWJWaWV3Oihp
ZClzZW5kZXIKLXsKLSAgICBVSUtleUNvbW1hbmQqIGNvbW1hbmQgPSBzZW5kZXI7Ci0gICAgW3Nl
bGYgaGFuZGxlS2V5RXZlbnQ6Y29tbWFuZC5fdHJpZ2dlcmluZ0V2ZW50XTsKKyAgICByZXR1cm4g
ZWRpdGFibGVLZXlDb21tYW5kczsKIH0KIAogLSAodm9pZClfbmV4dEFjY2Vzc29yeVRhYjooaWQp
c2VuZGVyCkBAIC0zODY0LDcgKzM4MzQsNyBAQCAtIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDoo
OjpXZWJFdmVudCAqKWV2ZW50IGlzQ2hhckV2ZW50OihCT09MKWlzQ2hhckV2ZW50CiAgICAgcmV0
dXJuIE5POwogfQogCi0tIChCT09MKWlzS2V5Ym9hcmRTY3JvbGxhYmxlCistIChCT09MKWlzU2Ny
b2xsYWJsZUZvcktleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yOihXS0tleWJvYXJkU2Nyb2xsVmll
d0FuaW1hdG9yICopYW5pbWF0b3IKIHsKICAgICBpZiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXND
b250ZW50RWRpdGFibGUpCiAgICAgICAgIHJldHVybiBOTzsKQEAgLTM4NzUsMjMgKzM4NDUsMjUg
QEAgLSAoQk9PTClpc0tleWJvYXJkU2Nyb2xsYWJsZQogICAgIHJldHVybiBZRVM7CiB9CiAKLS0g
KENHRmxvYXQpZGlzdGFuY2VGb3JTY3JvbGxpbmdJbmNyZW1lbnQ6KFNjcm9sbGluZ0luY3JlbWVu
dClpbmNyZW1lbnQKKy0gKENHRmxvYXQpa2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6KFdLS2V5
Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgKilhbmltYXRvciBkaXN0YW5jZUZvckluY3JlbWVudDoo
U2Nyb2xsaW5nSW5jcmVtZW50KWluY3JlbWVudAogeworICAgIENHRmxvYXQgc2VsZlNjYWxlID0g
c2VsZi5sYXllci50cmFuc2Zvcm0ubTExOworCiAgICAgc3dpdGNoIChpbmNyZW1lbnQpIHsKICAg
ICBjYXNlIFNjcm9sbGluZ0luY3JlbWVudDo6RG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiBzZWxm
LmJvdW5kcy5zaXplLmhlaWdodDsKKyAgICAgICAgcmV0dXJuIHNlbGYuYm91bmRzLnNpemUuaGVp
Z2h0ICogc2VsZlNjYWxlOwogICAgIGNhc2UgU2Nyb2xsaW5nSW5jcmVtZW50OjpQYWdlOgotICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6U2Nyb2xsYmFyOjpwYWdlU3RlcChfcGFnZS0+dW5vYnNjdXJl
ZENvbnRlbnRSZWN0KCkuaGVpZ2h0KCksIHNlbGYuYm91bmRzLnNpemUuaGVpZ2h0KTsKKyAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OlNjcm9sbGJhcjo6cGFnZVN0ZXAoX3BhZ2UtPnVub2JzY3VyZWRD
b250ZW50UmVjdCgpLmhlaWdodCgpLCBzZWxmLmJvdW5kcy5zaXplLmhlaWdodCkgKiBzZWxmU2Nh
bGU7CiAgICAgY2FzZSBTY3JvbGxpbmdJbmNyZW1lbnQ6OkxpbmU6Ci0gICAgICAgIHJldHVybiBX
ZWJDb3JlOjpTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkgKiBzZWxmU2NhbGU7CiAgICAg
fQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwogfQogCi0tICh2b2lk
KXNjcm9sbEJ5Q29udGVudE9mZnNldDooV2ViQ29yZTo6RmxvYXRQb2ludClvZmZzZXQgYW5pbWF0
ZWQ6KEJPT0wpYW5pbWF0ZWQKKy0gKHZvaWQpa2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3JXaWxs
U2Nyb2xsOihXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yICopYW5pbWF0b3IKIHsKLSAgICBb
X3dlYlZpZXcgX3Njcm9sbEJ5Q29udGVudE9mZnNldDpvZmZzZXQgYW5pbWF0ZWQ6YW5pbWF0ZWRd
OworICAgIFtzZWxmIHdpbGxTdGFydFpvb21PclNjcm9sbF07CiB9CiAKIC0gKHZvaWQpZXhlY3V0
ZUVkaXRDb21tYW5kV2l0aENhbGxiYWNrOihOU1N0cmluZyAqKWNvbW1hbmROYW1lCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdG9yLmgKaW5kZXggYTUzOWFkNzIwOTkxZTBiZWI3NjYyMDhjMDMzYzU4M2ZiNTRkZGYyYy4u
MGE3ZjBlMTFhNjczNzBkOGI1Y2E3YjZiNzE2YjlhNDlmYzY2YTRiNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IuaApAQCAtMzksMjYgKzM5LDMyIEBAIGVudW0gY2xhc3MgU2Nyb2xsaW5nSW5jcmVtZW50IDog
dWludDhfdCB7CiAKIH0KIAorQGNsYXNzIFVJU2Nyb2xsVmlldzsKIEBjbGFzcyBXZWJFdmVudDsK
LUBwcm90b2NvbCBXS0tleWJvYXJkU2Nyb2xsYWJsZTsKK0Bwcm90b2NvbCBXS0tleWJvYXJkU2Ny
b2xsVmlld0FuaW1hdG9yRGVsZWdhdGU7CiAKLUBpbnRlcmZhY2UgV0tLZXlib2FyZFNjcm9sbGlu
Z0FuaW1hdG9yIDogTlNPYmplY3QKK0BpbnRlcmZhY2UgV0tLZXlib2FyZFNjcm9sbFZpZXdBbmlt
YXRvciA6IE5TT2JqZWN0CiAKIC0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOwot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsYWJsZTooaWQgPFdLS2V5Ym9hcmRTY3JvbGxh
YmxlPilzY3JvbGxhYmxlOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsVmlldzooVUlT
Y3JvbGxWaWV3ICopc2Nyb2xsVmlldzsKIAogLSAodm9pZClpbnZhbGlkYXRlOwogCistICh2b2lk
KXdpbGxTdGFydEludGVyYWN0aXZlU2Nyb2xsOworCiAtIChCT09MKWJlZ2luV2l0aEV2ZW50Oig6
OldlYkV2ZW50ICopZXZlbnQ7CiAtIChCT09MKWhhbmRsZUtleUV2ZW50Oig6OldlYkV2ZW50ICop
ZXZlbnQ7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8V0tLZXlib2FyZFNjcm9s
bFZpZXdBbmltYXRvckRlbGVnYXRlPiBkZWxlZ2F0ZTsKKwogQGVuZAogCi1AcHJvdG9jb2wgV0tL
ZXlib2FyZFNjcm9sbGFibGUgPE5TT2JqZWN0PgotQHJlcXVpcmVkCi0tIChCT09MKWlzS2V5Ym9h
cmRTY3JvbGxhYmxlOwotLSAoQ0dGbG9hdClkaXN0YW5jZUZvclNjcm9sbGluZ0luY3JlbWVudDoo
V2ViS2l0OjpTY3JvbGxpbmdJbmNyZW1lbnQpaW5jcmVtZW50OwotLSAodm9pZClzY3JvbGxCeUNv
bnRlbnRPZmZzZXQ6KFdlYkNvcmU6OkZsb2F0UG9pbnQpb2Zmc2V0IGFuaW1hdGVkOihCT09MKWFu
aW1hdGVkOworQHByb3RvY29sIFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3JEZWxlZ2F0ZSA8
TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKEJPT0wpaXNTY3JvbGxhYmxlRm9yS2V5Ym9hcmRTY3Jv
bGxWaWV3QW5pbWF0b3I6KFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgKilhbmltYXRvcjsK
Ky0gKENHRmxvYXQpa2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6KFdLS2V5Ym9hcmRTY3JvbGxW
aWV3QW5pbWF0b3IgKilhbmltYXRvciBkaXN0YW5jZUZvckluY3JlbWVudDooV2ViS2l0OjpTY3Jv
bGxpbmdJbmNyZW1lbnQpaW5jcmVtZW50OworLSAodm9pZClrZXlib2FyZFNjcm9sbFZpZXdBbmlt
YXRvcldpbGxTY3JvbGw6KFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgKilhbmltYXRvcjsK
KwogQGVuZAogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IubW0KaW5k
ZXggZjc3OTcwN2VjYjBhZWFmMzNkYjY5N2ZmOGFkYWI4ZWFhZWM0NWUwMC4uYTU0ZjZlNDI2NDFm
NjA1OTMwZDIzMmUxN2MzZjRlMDdjYjc0MmE0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLm1tCkBAIC0z
MCwyNyArMzAsODAgQEAKIAogI2ltcG9ydCAiVUlLaXRTUEkuaCIKICNpbXBvcnQgPFdlYkNvcmUv
RmxvYXRQb2ludC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZWN0RWRnZXMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvV2ViRXZlbnQuaD4KKyNpbXBvcnQgPFdlYktpdC9VSUtpdFNQSS5oPgogI2ltcG9ydCA8
YWxnb3JpdGhtPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLWVudW0gY2xhc3MgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvclN0
YXRlIDogdWludDhfdCB7Ci0gICAgV2FpdGluZ0ZvckZpcnN0RXZlbnQsCi0gICAgV2FpdGluZ0Zv
clJlcGVhdCwKLSAgICBBbmltYXRpbmcKK2VudW0gY2xhc3MgU2Nyb2xsaW5nRGlyZWN0aW9uIDog
dWludDhfdCB7IFVwLCBEb3duLCBMZWZ0LCBSaWdodCB9OworCitzdHJ1Y3QgS2V5Ym9hcmRTY3Jv
bGwgeworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBvZmZzZXQ7IC8vIFBvaW50cyBwZXIgaW5jcmVt
ZW50LgorICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtYXhpbXVtVmVsb2NpdHk7IC8vIFBvaW50cyBw
ZXIgc2Vjb25kLgorICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBmb3JjZTsKKworICAgIFdlYktpdDo6
U2Nyb2xsaW5nSW5jcmVtZW50IGluY3JlbWVudDsKKyAgICBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVj
dGlvbiBkaXJlY3Rpb247CiB9OwogCitzdHJ1Y3QgS2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzIHsK
KyAgICBDR0Zsb2F0IHNwcmluZ01hc3MgeyAxIH07CisgICAgQ0dGbG9hdCBzcHJpbmdTdGlmZm5l
c3MgeyAxMDkgfTsKKyAgICBDR0Zsb2F0IHNwcmluZ0RhbXBpbmcgeyAyMCB9OworCisgICAgQ0dG
bG9hdCBtYXhpbXVtVmVsb2NpdHlNdWx0aXBsaWVyIHsgMjUgfTsKKyAgICBDR0Zsb2F0IHRpbWVU
b01heGltdW1WZWxvY2l0eSB7IDEgfTsKKworICAgIENHRmxvYXQgcnViYmVyQmFuZEZvcmNlIHsg
NTAwMCB9OwogfTsKIAorfQorCitAcHJvdG9jb2wgV0tLZXlib2FyZFNjcm9sbGFibGVJbnRlcm5h
bCA8TlNPYmplY3Q+CitAcmVxdWlyZWQKKy0gKEJPT0wpaXNLZXlib2FyZFNjcm9sbGFibGU7Cist
IChDR0Zsb2F0KWRpc3RhbmNlRm9ySW5jcmVtZW50OihXZWJLaXQ6OlNjcm9sbGluZ0luY3JlbWVu
dClpbmNyZW1lbnQ7CistICh2b2lkKXNjcm9sbFRvQ29udGVudE9mZnNldDooV2ViQ29yZTo6Rmxv
YXRQb2ludClvZmZzZXQgYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQ7CistICh2b2lkKXNjcm9sbFdp
dGhTY3JvbGxUb0V4dGVudEFuaW1hdGlvblRvOihDR1BvaW50KW9mZnNldDsKKy0gKENHUG9pbnQp
Y29udGVudE9mZnNldDsKKy0gKENHU2l6ZSlpbnRlcmFjdGl2ZVNjcm9sbFZlbG9jaXR5OworLSAo
Q0dQb2ludClib3VuZGVkQ29udGVudE9mZnNldDooQ0dQb2ludClvZmZzZXQ7CistIChXZWJDb3Jl
OjpSZWN0RWRnZXM8Ym9vbD4pc2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zmc2V0OihDR1BvaW50
KW9mZnNldDsKKy0gKFdlYkNvcmU6OlJlY3RFZGdlczxib29sPilydWJiZXJiYW5kYWJsZURpcmVj
dGlvbnM7CisKK0BlbmQKKworQGludGVyZmFjZSBXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Ig
OiBOU09iamVjdAorCistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGFibGU6KGlkIDxXS0tleWJvYXJkU2Nyb2xsYWJsZUlu
dGVybmFsPilzY3JvbGxhYmxlOworCistICh2b2lkKWludmFsaWRhdGU7CisKKy0gKHZvaWQpd2ls
bFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGw7CisKKy0gKEJPT0wpYmVnaW5XaXRoRXZlbnQ6KDo6V2Vi
RXZlbnQgKilldmVudDsKKy0gKEJPT0wpaGFuZGxlS2V5RXZlbnQ6KDo6V2ViRXZlbnQgKilldmVu
dDsKKworQGVuZAorCiBAaW1wbGVtZW50YXRpb24gV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9y
IHsKLSAgICBpZCA8V0tLZXlib2FyZFNjcm9sbGFibGU+IF9zY3JvbGxhYmxlOwotICAgIENGVGlt
ZUludGVydmFsIF9zdGFydFRpbWU7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBfc2Nyb2xsT2Zm
c2V0UGVySW5jcmVtZW50OworICAgIGlkIDxXS0tleWJvYXJkU2Nyb2xsYWJsZUludGVybmFsPiBf
c2Nyb2xsYWJsZTsKICAgICBSZXRhaW5QdHI8Q0FEaXNwbGF5TGluaz4gX2Rpc3BsYXlMaW5rOwot
ICAgIFdlYktpdDo6S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvclN0YXRlIF9zdGF0ZTsKKworICAg
IHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpLZXlib2FyZFNjcm9sbD4gX2N1cnJlbnRTY3JvbGw7CisK
KyAgICBCT09MIF9oYXNQcmVzc2VkU2Nyb2xsaW5nS2V5OworCisgICAgV2ViQ29yZTo6RmxvYXRT
aXplIF92ZWxvY2l0eTsgLy8gUG9pbnRzIHBlciBzZWNvbmQuCisKKyAgICBXZWJDb3JlOjpGbG9h
dFBvaW50IF9pZGVhbFBvc2l0aW9uOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgX2N1cnJlbnRQ
b3NpdGlvbjsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IF9pZGVhbFBvc2l0aW9uRm9yTWluaW11
bVRyYXZlbDsKIH0KIAogLSAoaW5zdGFuY2V0eXBlKWluaXQKQEAgLTU4LDcgKzExMSw3IEBAIC0g
KGluc3RhbmNldHlwZSlpbml0CiAgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoU2Nyb2xsYWJsZTooaWQgPFdLS2V5Ym9hcmRTY3JvbGxhYmxlPilzY3JvbGxhYmxl
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxhYmxlOihpZCA8V0tLZXlib2FyZFNjcm9s
bGFibGVJbnRlcm5hbD4pc2Nyb2xsYWJsZQogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAg
ICAgaWYgKCFzZWxmKQpAQCAtNjksMTMgKzEyMiw2MCBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhTY3JvbGxhYmxlOihpZCA8V0tLZXlib2FyZFNjcm9sbGFibGU+KXNjcm9sbGFibGUKICAgICBy
ZXR1cm4gc2VsZjsKIH0KIAorLSAoY29uc3QgV2ViS2l0OjpLZXlib2FyZFNjcm9sbFBhcmFtZXRl
cnMgJilwYXJhbWV0ZXJzCit7CisgICAgc3RhdGljIGNvbnN0IFdlYktpdDo6S2V5Ym9hcmRTY3Jv
bGxQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcmV0dXJuIHBhcmFtZXRlcnM7Cit9CisKIC0g
KHZvaWQpaW52YWxpZGF0ZQogewogICAgIFtzZWxmIHN0b3BBbmltYXRlZFNjcm9sbF07CisgICAg
W3NlbGYgc3RvcERpc3BsYXlMaW5rXTsKICAgICBfc2Nyb2xsYWJsZSA9IG5pbDsKIH0KIAotLSAo
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50Pilfc2Nyb2xsT2Zmc2V0Rm9yRXZlbnQ6
KDo6V2ViRXZlbnQgKilldmVudAorc3RhdGljIFdlYkNvcmU6OkZsb2F0U2l6ZSB1bml0VmVjdG9y
KFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRp
cmVjdGlvbikgeworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OlVwOgorICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRTaXplKDAsIC0xKTsKKyAgICBjYXNlIFdlYktpdDo6
U2Nyb2xsaW5nRGlyZWN0aW9uOjpEb3duOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRT
aXplKDAsIDEpOworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OkxlZnQ6Cisg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFNpemUoLTEsIDApOworICAgIGNhc2UgV2ViS2l0
OjpTY3JvbGxpbmdEaXJlY3Rpb246OlJpZ2h0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Rmxv
YXRTaXplKDEsIDApOworICAgIH0KK30KKworc3RhdGljIFdlYkNvcmU6OkZsb2F0U2l6ZSBwZXJw
ZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9yKFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgV2ViS2l0OjpT
Y3JvbGxpbmdEaXJlY3Rpb246OlVwOgorICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rp
b246OkRvd246CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFNpemUoMSwgMCk7CisgICAg
Y2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6TGVmdDoKKyAgICBjYXNlIFdlYktpdDo6
U2Nyb2xsaW5nRGlyZWN0aW9uOjpSaWdodDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0
U2l6ZSgwLCAxKTsKKyAgICB9Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpQaHlzaWNhbEJveFNpZGUg
Ym94U2lkZShXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3dp
dGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uOjpV
cDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlBoeXNpY2FsQm94U2lkZTo6VG9wOworICAgIGNh
c2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OkRvd246CisgICAgICAgIHJldHVybiBXZWJD
b3JlOjpQaHlzaWNhbEJveFNpZGU6OkJvdHRvbTsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5n
RGlyZWN0aW9uOjpMZWZ0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGh5c2ljYWxCb3hTaWRl
OjpMZWZ0OworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OlJpZ2h0OgorICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6UGh5c2ljYWxCb3hTaWRlOjpSaWdodDsKKyAgICB9Cit9CisK
Ky0gKHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpLZXlib2FyZFNjcm9sbD4pa2V5Ym9hcmRTY3JvbGxG
b3JFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50CiB7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGtXZWJTcGFjZUtleSA9IDB4MjA7CiAKQEAgLTg2LDcgKzE4Niw2IEBAIC0gKHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6RmxvYXRQb2ludD4pX3Njcm9sbE9mZnNldEZvckV2ZW50Oig6OldlYkV2ZW50
ICopZXZlbnQKICAgICBpZiAoIWNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycy5sZW5ndGgpCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBlbnVtIGNsYXNzIERpcmVjdGlvbiA6
IHVpbnQ4X3QgeyBVcCwgRG93biwgTGVmdCwgUmlnaHQgfTsKICAgICBlbnVtIGNsYXNzIEtleSA6
IHVpbnQ4X3QgeyBPdGhlciwgTGVmdEFycm93LCBSaWdodEFycm93LCBVcEFycm93LCBEb3duQXJy
b3csIFBhZ2VVcCwgUGFnZURvd24sIFNwYWNlIH07CiAgICAgCiAgICAgYXV0byBrZXkgPSBeewpA
QCAtMTEzLDcgKzIxMiw3IEBAIC0gKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRQb2ludD4p
X3Njcm9sbE9mZnNldEZvckV2ZW50Oig6OldlYkV2ZW50ICopZXZlbnQKICAgICBCT09MIHNoaWZ0
UHJlc3NlZCA9IGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrU2hpZnQ7CiAg
ICAgQk9PTCBhbHRQcmVzc2VkID0gZXZlbnQubW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01h
c2tBbHRlcm5hdGU7CiAgICAgQk9PTCBjbWRQcmVzc2VkID0gZXZlbnQubW9kaWZpZXJGbGFncyAm
IFdlYkV2ZW50RmxhZ01hc2tDb21tYW5kOwotICAgIAorCiAgICAgYXV0byBpbmNyZW1lbnQgPSBe
ewogICAgICAgICBzd2l0Y2ggKGtleSkgewogICAgICAgICBjYXNlIEtleTo6TGVmdEFycm93OgpA
QCAtMTM5LDEwNCArMjM4LDM4NiBAQCAtIChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9p
bnQ+KV9zY3JvbGxPZmZzZXRGb3JFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50CiAgICAgYXV0byBk
aXJlY3Rpb24gPSBeKCkgewogICAgICAgICBzd2l0Y2ggKGtleSkgewogICAgICAgICBjYXNlIEtl
eTo6TGVmdEFycm93OgotICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbjo6TGVmdDsKKyAgICAg
ICAgICAgIHJldHVybiBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6TGVmdDsKICAgICAgICAg
Y2FzZSBLZXk6OlJpZ2h0QXJyb3c6Ci0gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uOjpSaWdo
dDsKKyAgICAgICAgICAgIHJldHVybiBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6UmlnaHQ7
CiAgICAgICAgIGNhc2UgS2V5OjpVcEFycm93OgogICAgICAgICBjYXNlIEtleTo6UGFnZVVwOgot
ICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbjo6VXA7CisgICAgICAgICAgICByZXR1cm4gV2Vi
S2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OlVwOwogICAgICAgICBjYXNlIEtleTo6RG93bkFycm93
OgogICAgICAgICBjYXNlIEtleTo6UGFnZURvd246Ci0gICAgICAgICAgICByZXR1cm4gRGlyZWN0
aW9uOjpEb3duOworICAgICAgICAgICAgcmV0dXJuIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9u
OjpEb3duOwogICAgICAgICBjYXNlIEtleTo6U3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gc2hp
ZnRQcmVzc2VkID8gRGlyZWN0aW9uOjpVcCA6IERpcmVjdGlvbjo6RG93bjsKKyAgICAgICAgICAg
IHJldHVybiBzaGlmdFByZXNzZWQgPyBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6VXAgOiBX
ZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6RG93bjsKICAgICAgICAgY2FzZSBLZXk6Ok90aGVy
OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4g
RGlyZWN0aW9uOjpEb3duOworICAgICAgICAgICAgcmV0dXJuIFdlYktpdDo6U2Nyb2xsaW5nRGly
ZWN0aW9uOjpEb3duOwogICAgICAgICB9OwogICAgIH0oKTsKIAotICAgIGJvb2wgaXNIb3Jpem9u
dGFsID0gZGlyZWN0aW9uID09IERpcmVjdGlvbjo6TGVmdCB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0
aW9uOjpSaWdodDsKLSAgICBDR0Zsb2F0IHNjcm9sbERpc3RhbmNlID0gW19zY3JvbGxhYmxlIGRp
c3RhbmNlRm9yU2Nyb2xsaW5nSW5jcmVtZW50OmluY3JlbWVudF07Ci0gICAgCi0gICAgaWYgKGRp
cmVjdGlvbiA9PSBEaXJlY3Rpb246OlVwIHx8IGRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OkxlZnQp
Ci0gICAgICAgIHNjcm9sbERpc3RhbmNlID0gLXNjcm9sbERpc3RhbmNlOworICAgIENHRmxvYXQg
c2Nyb2xsRGlzdGFuY2UgPSBbX3Njcm9sbGFibGUgZGlzdGFuY2VGb3JJbmNyZW1lbnQ6aW5jcmVt
ZW50XTsKKworICAgIFdlYktpdDo6S2V5Ym9hcmRTY3JvbGwgc2Nyb2xsOworICAgIHNjcm9sbC5v
ZmZzZXQgPSB1bml0VmVjdG9yKGRpcmVjdGlvbikuc2NhbGVkKHNjcm9sbERpc3RhbmNlKTsKKyAg
ICBzY3JvbGwuaW5jcmVtZW50ID0gaW5jcmVtZW50OworICAgIHNjcm9sbC5kaXJlY3Rpb24gPSBk
aXJlY3Rpb247CisgICAgc2Nyb2xsLm1heGltdW1WZWxvY2l0eSA9IHNjcm9sbC5vZmZzZXQuc2Nh
bGVkKHNlbGYucGFyYW1ldGVycy5tYXhpbXVtVmVsb2NpdHlNdWx0aXBsaWVyKTsKKworICAgIC8v
IEFwcGx5IGEgY29uc3RhbnQgZm9yY2UgdG8gYWNoaWV2ZSBWbWF4IGluIHRpbWVUb01heGltdW1W
ZWxvY2l0eSBzZWNvbmRzLgorICAgIC8vIEZfY29uc3RhbnQgPSBtICogVm1heCAvIHQKKyAgICBz
Y3JvbGwuZm9yY2UgPSBzY3JvbGwubWF4aW11bVZlbG9jaXR5LnNjYWxlZChzZWxmLnBhcmFtZXRl
cnMuc3ByaW5nTWFzcyAvIHNlbGYucGFyYW1ldGVycy50aW1lVG9NYXhpbXVtVmVsb2NpdHkpOwog
ICAgIAotICAgIHJldHVybiBpc0hvcml6b250YWwgPyBXZWJDb3JlOjpGbG9hdFBvaW50KHNjcm9s
bERpc3RhbmNlLCAwKSA6IFdlYkNvcmU6OkZsb2F0UG9pbnQoMCwgc2Nyb2xsRGlzdGFuY2UpOwor
ICAgIHJldHVybiBzY3JvbGw7CiB9CiAKIC0gKEJPT0wpYmVnaW5XaXRoRXZlbnQ6KDo6V2ViRXZl
bnQgKilldmVudAogewotICAgIGlmIChfc3RhdGUgIT0gV2ViS2l0OjpLZXlib2FyZFNjcm9sbGlu
Z0FuaW1hdG9yU3RhdGU6OldhaXRpbmdGb3JGaXJzdEV2ZW50KQotICAgICAgICByZXR1cm4gTk87
Ci0gICAgCiAgICAgaWYgKGV2ZW50LnR5cGUgIT0gV2ViRXZlbnRLZXlEb3duKQogICAgICAgICBy
ZXR1cm4gTk87CiAKLSAgICBhdXRvIG9mZnNldCA9IFtzZWxmIF9zY3JvbGxPZmZzZXRGb3JFdmVu
dDpldmVudF07Ci0gICAgaWYgKCFvZmZzZXQpCisgICAgYXV0byBzY3JvbGwgPSBbc2VsZiBrZXli
b2FyZFNjcm9sbEZvckV2ZW50OmV2ZW50XTsKKyAgICBpZiAoIXNjcm9sbCkKKyAgICAgICAgcmV0
dXJuIE5POworCisgICAgaWYgKF9oYXNQcmVzc2VkU2Nyb2xsaW5nS2V5KQogICAgICAgICByZXR1
cm4gTk87CiAKLSAgICBfc3RhdGUgPSBXZWJLaXQ6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3JT
dGF0ZTo6V2FpdGluZ0ZvclJlcGVhdDsKLSAgICBfc2Nyb2xsT2Zmc2V0UGVySW5jcmVtZW50ID0g
b2Zmc2V0LnZhbHVlKCk7CisgICAgaWYgKCFbX3Njcm9sbGFibGUgcnViYmVyYmFuZGFibGVEaXJl
Y3Rpb25zXS5hdChib3hTaWRlKHNjcm9sbC0+ZGlyZWN0aW9uKSkpCisgICAgICAgIHJldHVybiBO
TzsKKworICAgIF9oYXNQcmVzc2VkU2Nyb2xsaW5nS2V5ID0gWUVTOworICAgIF9jdXJyZW50U2Ny
b2xsID0gc2Nyb2xsOworCisgICAgaWYgKHNjcm9sbC0+aW5jcmVtZW50ID09IFdlYktpdDo6U2Ny
b2xsaW5nSW5jcmVtZW50OjpEb2N1bWVudCkgeworICAgICAgICBfdmVsb2NpdHkgPSBXZWJDb3Jl
OjpGbG9hdFNpemUoKTsKKyAgICAgICAgW3NlbGYgc3RvcEFuaW1hdGVkU2Nyb2xsXTsKKyAgICAg
ICAgW3NlbGYgc3RvcERpc3BsYXlMaW5rXTsKKyAgICAgICAgW19zY3JvbGxhYmxlIHNjcm9sbFdp
dGhTY3JvbGxUb0V4dGVudEFuaW1hdGlvblRvOltfc2Nyb2xsYWJsZSBib3VuZGVkQ29udGVudE9m
ZnNldDpfY3VycmVudFBvc2l0aW9uICsgc2Nyb2xsLT5vZmZzZXRdXTsKKyAgICAgICAgcmV0dXJu
IFlFUzsKKyAgICB9CiAKLSAgICAvLyBUaGUgZmlyc3Qga2V5Ym9hcmQgZXZlbnQgdGhhdCBzdGFy
dHMgc2Nyb2xsaW5nIHBlcmZvcm1zIGl0cyBvd24KLSAgICAvLyBkaXNjcmV0ZSBhbmltYXRlZCBz
Y3JvbGwuIENvbnRpbnVvdXNseSBhbmltYXRlZCBzY3JvbGxpbmcgc3RhcnRzCi0gICAgLy8gd2hl
biB0aGUga2V5IHJlcGVhdHMuCi0gICAgW19zY3JvbGxhYmxlIHNjcm9sbEJ5Q29udGVudE9mZnNl
dDpfc2Nyb2xsT2Zmc2V0UGVySW5jcmVtZW50IGFuaW1hdGVkOllFU107CisgICAgW3NlbGYgc3Rh
cnREaXNwbGF5TGlua0lmTmVlZGVkXTsKKworICAgIF9jdXJyZW50UG9zaXRpb24gPSBXZWJDb3Jl
OjpGbG9hdFBvaW50KFtfc2Nyb2xsYWJsZSBjb250ZW50T2Zmc2V0XSk7CisgICAgX3ZlbG9jaXR5
ICs9IFdlYkNvcmU6OkZsb2F0U2l6ZShbX3Njcm9sbGFibGUgaW50ZXJhY3RpdmVTY3JvbGxWZWxv
Y2l0eV0pOworICAgIF9pZGVhbFBvc2l0aW9uRm9yTWluaW11bVRyYXZlbCA9IF9jdXJyZW50UG9z
aXRpb24gKyBfY3VycmVudFNjcm9sbC0+b2Zmc2V0OwogCiAgICAgcmV0dXJuIFlFUzsKIH0KIAog
LSAoQk9PTCloYW5kbGVLZXlFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50CiB7Ci0gICAgaWYgKF9z
dGF0ZSA9PSBXZWJLaXQ6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3JTdGF0ZTo6V2FpdGluZ0Zv
ckZpcnN0RXZlbnQpCisgICAgaWYgKCFfaGFzUHJlc3NlZFNjcm9sbGluZ0tleSkKICAgICAgICAg
cmV0dXJuIE5POwogCi0gICAgYXV0byBvZmZzZXQgPSBbc2VsZiBfc2Nyb2xsT2Zmc2V0Rm9yRXZl
bnQ6ZXZlbnRdOwotICAgIGlmICghb2Zmc2V0IHx8IGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlV
cCkgeworICAgIGF1dG8gc2Nyb2xsID0gW3NlbGYga2V5Ym9hcmRTY3JvbGxGb3JFdmVudDpldmVu
dF07CisgICAgaWYgKCFzY3JvbGwgfHwgZXZlbnQudHlwZSA9PSBXZWJFdmVudEtleVVwKSB7CiAg
ICAgICAgIFtzZWxmIHN0b3BBbmltYXRlZFNjcm9sbF07Ci0gICAgICAgIHJldHVybiBOTzsKKyAg
ICAgICAgX2hhc1ByZXNzZWRTY3JvbGxpbmdLZXkgPSBOTzsKICAgICB9CiAKLSAgICBpZiAoX3N0
YXRlID09IFdlYktpdDo6S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvclN0YXRlOjpXYWl0aW5nRm9y
UmVwZWF0KQotICAgICAgICBbc2VsZiBzdGFydEFuaW1hdGVkU2Nyb2xsXTsKKyAgICByZXR1cm4g
Tk87Cit9CiAKLSAgICByZXR1cm4gWUVTOworc3RhdGljIFdlYkNvcmU6OkZsb2F0UG9pbnQgZmFy
dGhlc3RQb2ludEluRGlyZWN0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgYSwgV2ViQ29yZTo6Rmxv
YXRQb2ludCBiLCBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAg
c3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9u
OjpVcDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UG9pbnQoYS54KCksIHN0ZDo6bWlu
KGEueSgpLCBiLnkoKSkpOworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OkRv
d246CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFBvaW50KGEueCgpLCBzdGQ6Om1heChh
LnkoKSwgYi55KCkpKTsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uOjpMZWZ0
OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRQb2ludChzdGQ6Om1pbihhLngoKSwgYi54
KCkpLCBhLnkoKSk7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6UmlnaHQ6
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFBvaW50KHN0ZDo6bWF4KGEueCgpLCBiLngo
KSksIGEueSgpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4geyB9OworfQorCistICh2b2lkKXN0b3BBbmltYXRlZFNjcm9sbAoreworICAgIGlmICghX2N1
cnJlbnRTY3JvbGwpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERldGVybWluZSB0aGUgc2V0
dGxpbmcgcG9zaXRpb24gb2YgdGhlIHNwcmluZywgY29uc2VydmluZyB0aGUgc3lzdGVtJ3MgY3Vy
cmVudCBlbmVyZ3kuCisgICAgLy8gS2luZXRpYyA9IGVsYXN0aWMgcG90ZW50aWFsCisgICAgLy8g
MS8yICogbSAqIHZeMiA9IDEvMiAqIGsgKiB4XjIKKyAgICAvLyB4ID0gc3FydCh2XjIgKiBtIC8g
aykKKyAgICBhdXRvIGRpc3BsYWNlbWVudE1hZ25pdHVkZVNxdWFyZWQgPSAoX3ZlbG9jaXR5ICog
X3ZlbG9jaXR5KS5zY2FsZWQoc2VsZi5wYXJhbWV0ZXJzLnNwcmluZ01hc3MgLyBzZWxmLnBhcmFt
ZXRlcnMuc3ByaW5nU3RpZmZuZXNzKTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZGlzcGxhY2Vt
ZW50ID0geworICAgICAgICBzdGQ6OmNvcHlzaWduKHNxcnQoZGlzcGxhY2VtZW50TWFnbml0dWRl
U3F1YXJlZC53aWR0aCgpKSwgX3ZlbG9jaXR5LndpZHRoKCkpLAorICAgICAgICBzdGQ6OmNvcHlz
aWduKHNxcnQoZGlzcGxhY2VtZW50TWFnbml0dWRlU3F1YXJlZC5oZWlnaHQoKSksIF92ZWxvY2l0
eS5oZWlnaHQoKSkKKyAgICB9OworCisgICAgLy8gSWYgdGhlIHNwcmluZyB3b3VsZCBzZXR0bGUg
YmVmb3JlIHRoZSBtaW5pbXVtIHRyYXZlbCBkaXN0YW5jZQorICAgIC8vIGZvciBhbiBpbnN0YW50
YW5lb3VzIHRhcCwgbW92ZSB0aGUgc2V0dGxpbmcgcG9zaXRpb24gb2YgdGhlIHNwcmluZworICAg
IC8vIG91dCB0byB0aGF0IHBvaW50LgorICAgIF9pZGVhbFBvc2l0aW9uID0gW19zY3JvbGxhYmxl
IGJvdW5kZWRDb250ZW50T2Zmc2V0OmZhcnRoZXN0UG9pbnRJbkRpcmVjdGlvbihfY3VycmVudFBv
c2l0aW9uICsgZGlzcGxhY2VtZW50LCBfaWRlYWxQb3NpdGlvbkZvck1pbmltdW1UcmF2ZWwsIF9j
dXJyZW50U2Nyb2xsLT5kaXJlY3Rpb24pXTsKKworICAgIF9jdXJyZW50U2Nyb2xsID0gc3RkOjpu
dWxsb3B0OwogfQogCi0tICh2b2lkKXN0YXJ0QW5pbWF0ZWRTY3JvbGwKKy0gKHZvaWQpc3RhcnRE
aXNwbGF5TGlua0lmTmVlZGVkCiB7Ci0gICAgQVNTRVJUKCFfZGlzcGxheUxpbmspOworICAgIGlm
IChfZGlzcGxheUxpbmspCisgICAgICAgIHJldHVybjsKIAotICAgIF9zdGF0ZSA9IFdlYktpdDo6
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvclN0YXRlOjpBbmltYXRpbmc7Ci0gICAgX3N0YXJ0VGlt
ZSA9IENBQ3VycmVudE1lZGlhVGltZSgpOwogICAgIF9kaXNwbGF5TGluayA9IFtDQURpc3BsYXlM
aW5rIGRpc3BsYXlMaW5rV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihkaXNwbGF5
TGlua0ZpcmVkOildOwogICAgIFtfZGlzcGxheUxpbmsgYWRkVG9SdW5Mb29wOltOU1J1bkxvb3Ag
bWFpblJ1bkxvb3BdIGZvck1vZGU6TlNSdW5Mb29wQ29tbW9uTW9kZXNdOwogfQogCi0tICh2b2lk
KXN0b3BBbmltYXRlZFNjcm9sbAorLSAodm9pZClzdG9wRGlzcGxheUxpbmsKIHsKLSAgICBfc3Rh
dGUgPSBXZWJLaXQ6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3JTdGF0ZTo6V2FpdGluZ0ZvckZp
cnN0RXZlbnQ7CiAgICAgW19kaXNwbGF5TGluayBpbnZhbGlkYXRlXTsKICAgICBfZGlzcGxheUxp
bmsgPSBuaWw7CiB9CiAKKy0gKHZvaWQpd2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGwKK3sKKyAg
ICAvLyBJZiB0aGUgdXNlciB0b3VjaGVzIHRoZSBzY3JlZW4gdG8gc3RhcnQgYW4gaW50ZXJhY3Rp
dmUgc2Nyb2xsLCBzdG9wIGV2ZXJ5dGhpbmcuCisgICAgX3ZlbG9jaXR5ID0gV2ViQ29yZTo6Rmxv
YXRTaXplKCk7CisgICAgW3NlbGYgc3RvcEFuaW1hdGVkU2Nyb2xsXTsKKyAgICBbc2VsZiBzdG9w
RGlzcGxheUxpbmtdOworfQorCiAtICh2b2lkKWRpc3BsYXlMaW5rRmlyZWQ6KENBRGlzcGxheUxp
bmsgKilzZW5kZXIKIHsKLSAgICBjb25zdCBDRlRpbWVJbnRlcnZhbCBzZWNvbmRzUGVyU2Nyb2xs
SW5jcmVtZW50ID0gMC4wNTsgLy8gU2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byBjb3ZlciBvbmUg
aW5jcmVtZW50IHdoZW4gYXQgZnVsbCBzcGVlZC4KLSAgICBjb25zdCBmbG9hdCBtYXhpbXVtVmVs
b2NpdHkgPSAyMDAwOyAvLyBNYXhpbXVtIHZlbG9jaXR5IGluIHBpeGVscyBwZXIgc2Vjb25kLiBF
bXBpcmljYWxseSBkZXRlcm1pbmVkLgotICAgIGNvbnN0IENGVGltZUludGVydmFsIGFjY2VsZXJh
dGlvbkR1cmF0aW9uID0gMC4zOyAvLyBEdXJhdGlvbiBvZiBhY2NlbGVyYXRpb24gaW4gc2Vjb25k
cy4gVGhpcyBtYXRjaGVzIFVJU2Nyb2xsVmlldy4KKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZm9y
Y2U7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGF4ZXNUb0FwcGx5U3ByaW5nID0geyAxLCAxIH07
CisKKyAgICBpZiAoX2N1cnJlbnRTY3JvbGwpIHsKKyAgICAgICAgV2ViQ29yZTo6UmVjdEVkZ2Vz
PGJvb2w+IHNjcm9sbGFibGVEaXJlY3Rpb25zID0gW19zY3JvbGxhYmxlIHNjcm9sbGFibGVEaXJl
Y3Rpb25zRnJvbU9mZnNldDpfY3VycmVudFBvc2l0aW9uXTsKKyAgICAgICAgYXV0byBkaXJlY3Rp
b24gPSBfY3VycmVudFNjcm9sbC0+ZGlyZWN0aW9uOworCisgICAgICAgIGlmIChzY3JvbGxhYmxl
RGlyZWN0aW9ucy5hdChib3hTaWRlKGRpcmVjdGlvbikpKSB7CisgICAgICAgICAgICAvLyBBcHBs
eSB0aGUgc2Nyb2xsaW5nIGZvcmNlLiBPbmx5IGFwcGx5IHRoZSBzcHJpbmcgaW4gdGhlIHBlcnBl
bmRpY3VsYXIgYXhpcywKKyAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdCBkcmFncyBhZ2FpbnN0
IHRoZSBkaXJlY3Rpb24gb2YgbW90aW9uLgorICAgICAgICAgICAgYXhlc1RvQXBwbHlTcHJpbmcg
PSBwZXJwZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9yKGRpcmVjdGlvbik7CisgICAgICAgICAg
ICBmb3JjZSA9IF9jdXJyZW50U2Nyb2xsLT5mb3JjZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIFRoZSBzY3JvbGwgdmlldyBjYW5ub3Qgc2Nyb2xsIGluIHRoaXMgZGlyZWN0aW9u
LCBhbmQgaXMgcnViYmVyLWJhbmRpbmcuCisgICAgICAgICAgICAvLyBBcHBseSBhIGNvbnN0YW50
IGFuZCBzaWduaWZpY2FudCBmb3JjZTsgb3RoZXJ3aXNlLCB0aGUgZm9yY2UgZm9yIGEKKyAgICAg
ICAgICAgIC8vIHNpbmdsZS1saW5lIGluY3JlbWVudCBpcyBub3Qgc3Ryb25nIGVub3VnaCB0byBy
dWJiZXItYmFuZCBwZXJjZXB0aWJseS4KKyAgICAgICAgICAgIGZvcmNlID0gdW5pdFZlY3Rvcihk
aXJlY3Rpb24pLnNjYWxlZChzZWxmLnBhcmFtZXRlcnMucnViYmVyQmFuZEZvcmNlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIElmIHdlJ3ZlIHJlYWNoZWQgb3IgZXhjZWVkZWQgdGhlIG1heGlt
dW0gdmVsb2NpdHksIHN0b3AgYXBwbHlpbmcgYW55IGZvcmNlLgorICAgICAgICAvLyBIb3dldmVy
LCB3ZSB3b24ndCBsZXQgdGhlIHNwcmluZyBzbmFwLCB3ZSdsbCBqdXN0IGtlZXAgZ29pbmcgYXQg
dGhlIHNhbWUKKyAgICAgICAgLy8gdmVsb2NpdHkgdW50aWwgdGhlIHVzZXIgcmFpc2VzIHRoZWly
IGZpbmdlciBvciB3ZSBoaXQgYW4gZWRnZS4KKyAgICAgICAgaWYgKGZhYnMoX3ZlbG9jaXR5Lndp
ZHRoKCkpID49IGZhYnMoX2N1cnJlbnRTY3JvbGwtPm1heGltdW1WZWxvY2l0eS53aWR0aCgpKSkK
KyAgICAgICAgICAgIGZvcmNlLnNldFdpZHRoKDApOworICAgICAgICBpZiAoZmFicyhfdmVsb2Np
dHkuaGVpZ2h0KCkpID49IGZhYnMoX2N1cnJlbnRTY3JvbGwtPm1heGltdW1WZWxvY2l0eS5oZWln
aHQoKSkpCisgICAgICAgICAgICBmb3JjZS5zZXRIZWlnaHQoMCk7CisgICAgfQogCi0gICAgYXV0
byB2ZWxvY2l0eSA9IF9zY3JvbGxPZmZzZXRQZXJJbmNyZW1lbnQuc2NhbGVkKDEuIC8gc2Vjb25k
c1BlclNjcm9sbEluY3JlbWVudCk7Ci0gICAgdmVsb2NpdHkgPSB2ZWxvY2l0eS5jb25zdHJhaW5l
ZEJldHdlZW4oeyAtbWF4aW11bVZlbG9jaXR5LCAtbWF4aW11bVZlbG9jaXR5IH0sIHsgbWF4aW11
bVZlbG9jaXR5LCBtYXhpbXVtVmVsb2NpdHkgfSk7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBp
ZGVhbFBvc2l0aW9uID0gW19zY3JvbGxhYmxlIGJvdW5kZWRDb250ZW50T2Zmc2V0Ol9jdXJyZW50
U2Nyb2xsID8gX2N1cnJlbnRQb3NpdGlvbiA6IF9pZGVhbFBvc2l0aW9uXTsKKyAgICBXZWJDb3Jl
OjpGbG9hdFNpemUgZGlzcGxhY2VtZW50ID0gX2N1cnJlbnRQb3NpdGlvbiAtIGlkZWFsUG9zaXRp
b247CiAKKyAgICAvLyBDb21wdXRlIHRoZSBzcHJpbmcncyBmb3JjZSwgYW5kIGFwcGx5IGl0IGlu
IGFsbG93ZWQgZGlyZWN0aW9ucy4KKyAgICAvLyBGX3NwcmluZyA9IC1rICogeCAtIGMgKiB2Cisg
ICAgYXV0byBzcHJpbmdGb3JjZSA9IC0gZGlzcGxhY2VtZW50LnNjYWxlZChzZWxmLnBhcmFtZXRl
cnMuc3ByaW5nU3RpZmZuZXNzKSAtIF92ZWxvY2l0eS5zY2FsZWQoc2VsZi5wYXJhbWV0ZXJzLnNw
cmluZ0RhbXBpbmcpOworICAgIGZvcmNlICs9IHNwcmluZ0ZvcmNlICogYXhlc1RvQXBwbHlTcHJp
bmc7CisKKyAgICAvLyBJbnRlZ3JhdGUgYWNjZWxlcmF0aW9uIC0+IHZlbG9jaXR5IC0+IHBvc2l0
aW9uIGZvciB0aGlzIHRpbWUgc3RlcC4KICAgICBDRlRpbWVJbnRlcnZhbCBmcmFtZUR1cmF0aW9u
ID0gc2VuZGVyLnRhcmdldFRpbWVzdGFtcCAtIHNlbmRlci50aW1lc3RhbXA7Ci0gICAgQ0ZUaW1l
SW50ZXJ2YWwgdGltZUZyb21BbmltYXRpb25TdGFydCA9IHNlbmRlci50aW1lc3RhbXAgLSBfc3Rh
cnRUaW1lOwotICAgIGZsb2F0IGFjY2VsZXJhdGlvbkZhY3RvciA9IFtbQ0FNZWRpYVRpbWluZ0Z1
bmN0aW9uIGZ1bmN0aW9uV2l0aE5hbWU6a0NBTWVkaWFUaW1pbmdGdW5jdGlvbkVhc2VJbkVhc2VP
dXRdIF9zb2x2ZUZvcklucHV0OnN0ZDo6bWluPENGVGltZUludGVydmFsPih0aW1lRnJvbUFuaW1h
dGlvblN0YXJ0LCBhY2NlbGVyYXRpb25EdXJhdGlvbikgLyBhY2NlbGVyYXRpb25EdXJhdGlvbl07
CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGFjY2VsZXJhdGlvbiA9IGZvcmNlLnNjYWxlZCgxLiAv
IHNlbGYucGFyYW1ldGVycy5zcHJpbmdNYXNzKTsKKyAgICBfdmVsb2NpdHkgKz0gYWNjZWxlcmF0
aW9uLnNjYWxlZChmcmFtZUR1cmF0aW9uKTsKKyAgICBfY3VycmVudFBvc2l0aW9uICs9IF92ZWxv
Y2l0eS5zY2FsZWQoZnJhbWVEdXJhdGlvbik7CisKKyAgICBbX3Njcm9sbGFibGUgc2Nyb2xsVG9D
b250ZW50T2Zmc2V0Ol9jdXJyZW50UG9zaXRpb24gYW5pbWF0ZWQ6Tk9dOworCisgICAgLy8gSWYg
d2UndmUgZWZmZWN0aXZlbHkgc3RvcHBlZCBzY3JvbGxpbmcsIGFuZCBubyBrZXkgaXMgcHJlc3Nl
ZCwKKyAgICAvLyBzaHV0IGRvd24gdGhlIGRpc3BsYXkgbGluay4KKyAgICBpZiAoIV9oYXNQcmVz
c2VkU2Nyb2xsaW5nS2V5ICYmIF92ZWxvY2l0eS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKSA8IDEp
IHsKKyAgICAgICAgW3NlbGYgc3RvcERpc3BsYXlMaW5rXTsKKyAgICAgICAgX3ZlbG9jaXR5ID0g
V2ViQ29yZTo6RmxvYXRTaXplKCk7CisgICAgfQorfQorCitAZW5kCisKK0BpbnRlcmZhY2UgV0tL
ZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciAoKSA8V0tLZXlib2FyZFNjcm9sbGFibGVJbnRlcm5h
bD4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
eworICAgIFdlYWtPYmpDUHRyPFVJU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7CisgICAgUmV0YWlu
UHRyPFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcj4gX2FuaW1hdG9yOworCisgICAgQk9PTCBf
ZGVsZWdhdGVSZXNwb25kc1RvSXNLZXlib2FyZFNjcm9sbGFibGU7CisgICAgQk9PTCBfZGVsZWdh
dGVSZXNwb25kc1RvRGlzdGFuY2VGb3JJbmNyZW1lbnQ7CisgICAgQk9PTCBfZGVsZWdhdGVSZXNw
b25kc1RvV2lsbFNjcm9sbDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICByZXR1
cm4gbmlsOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxWaWV3OihVSVNjcm9s
bFZpZXcgKilzY3JvbGxWaWV3Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAo
IXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfc2Nyb2xsVmlldyA9IHNjcm9sbFZp
ZXc7CisgICAgX2FuaW1hdG9yID0gYWRvcHROUyhbW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRv
ciBhbGxvY10gaW5pdFdpdGhTY3JvbGxhYmxlOnNlbGZdKTsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2FuaW1hdG9yIGludmFsaWRhdGVdOworICAg
IFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClpbnZhbGlkYXRlCit7CisgICAgX3Njcm9s
bFZpZXcgPSBuaWw7CisKKyAgICBbX2FuaW1hdG9yIGludmFsaWRhdGVdOworICAgIF9hbmltYXRv
ciA9IG5pbDsKK30KKworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdLS2V5Ym9hcmRTY3JvbGxW
aWV3QW5pbWF0b3JEZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICBfZGVsZWdhdGUgPSBkZWxlZ2F0
ZTsKKworICAgIF9kZWxlZ2F0ZVJlc3BvbmRzVG9Jc0tleWJvYXJkU2Nyb2xsYWJsZSA9IFtfZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihpc1Njcm9sbGFibGVGb3JLZXlib2Fy
ZFNjcm9sbFZpZXdBbmltYXRvcjopXTsKKyAgICBfZGVsZWdhdGVSZXNwb25kc1RvRGlzdGFuY2VG
b3JJbmNyZW1lbnQgPSBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioa2V5
Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6ZGlzdGFuY2VGb3JJbmNyZW1lbnQ6KV07CisgICAgX2Rl
bGVnYXRlUmVzcG9uZHNUb1dpbGxTY3JvbGwgPSBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3Ioa2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3JXaWxsU2Nyb2xsOildOworfQor
CistICh2b2lkKXdpbGxTdGFydEludGVyYWN0aXZlU2Nyb2xsCit7CisgICAgW19hbmltYXRvciB3
aWxsU3RhcnRJbnRlcmFjdGl2ZVNjcm9sbF07Cit9CisKKy0gKEJPT0wpYmVnaW5XaXRoRXZlbnQ6
KDo6V2ViRXZlbnQgKilldmVudAoreworICAgIHJldHVybiBbX2FuaW1hdG9yIGJlZ2luV2l0aEV2
ZW50OmV2ZW50XTsKK30KKworLSAoQk9PTCloYW5kbGVLZXlFdmVudDooOjpXZWJFdmVudCAqKWV2
ZW50Cit7CisgICAgcmV0dXJuIFtfYW5pbWF0b3IgaGFuZGxlS2V5RXZlbnQ6ZXZlbnRdOworfQor
CistIChCT09MKWlzS2V5Ym9hcmRTY3JvbGxhYmxlCit7CisgICAgaWYgKCFfZGVsZWdhdGVSZXNw
b25kc1RvSXNLZXlib2FyZFNjcm9sbGFibGUpCisgICAgICAgIHJldHVybiBZRVM7CisgICAgcmV0
dXJuIFtfZGVsZWdhdGUgaXNTY3JvbGxhYmxlRm9yS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6
c2VsZl07Cit9CisKKy0gKENHRmxvYXQpZGlzdGFuY2VGb3JJbmNyZW1lbnQ6KFdlYktpdDo6U2Ny
b2xsaW5nSW5jcmVtZW50KWluY3JlbWVudAoreworICAgIGF1dG8gc2Nyb2xsVmlldyA9IF9zY3Jv
bGxWaWV3LmdldEF1dG9yZWxlYXNlZCgpOworICAgIGlmICghc2Nyb2xsVmlldykKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBjb25zdCBDR0Zsb2F0IGRlZmF1bHRQYWdlU2Nyb2xsRnJhY3Rpb24g
PSAwLjg7CisgICAgY29uc3QgQ0dGbG9hdCBkZWZhdWx0TGluZVNjcm9sbEhlaWdodCA9IDQwOwor
CisgICAgaWYgKCFfZGVsZWdhdGVSZXNwb25kc1RvRGlzdGFuY2VGb3JJbmNyZW1lbnQpIHsKKyAg
ICAgICAgc3dpdGNoIChpbmNyZW1lbnQpIHsKKyAgICAgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGlu
Z0luY3JlbWVudDo6RG9jdW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsVmlldy5jb250
ZW50U2l6ZS5oZWlnaHQ7CisgICAgICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdJbmNyZW1lbnQ6
OlBhZ2U6CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsVmlldy5mcmFtZS5zaXplLmhlaWdodCAq
IGRlZmF1bHRQYWdlU2Nyb2xsRnJhY3Rpb247CisgICAgICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxp
bmdJbmNyZW1lbnQ6OkxpbmU6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdExpbmVTY3JvbGxI
ZWlnaHQgKiBzY3JvbGxWaWV3Lnpvb21TY2FsZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIFtf
ZGVsZWdhdGUga2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6c2VsZiBkaXN0YW5jZUZvckluY3Jl
bWVudDppbmNyZW1lbnRdOworfQorCistICh2b2lkKXNjcm9sbFRvQ29udGVudE9mZnNldDooV2Vi
Q29yZTo6RmxvYXRQb2ludCljb250ZW50T2Zmc2V0RGVsdGEgYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0
ZWQKK3sKKyAgICBhdXRvIHNjcm9sbFZpZXcgPSBfc2Nyb2xsVmlldy5nZXRBdXRvcmVsZWFzZWQo
KTsKKyAgICBpZiAoIXNjcm9sbFZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoX2RlbGVn
YXRlUmVzcG9uZHNUb1dpbGxTY3JvbGwpCisgICAgICAgIFtfZGVsZWdhdGUga2V5Ym9hcmRTY3Jv
bGxWaWV3QW5pbWF0b3JXaWxsU2Nyb2xsOnNlbGZdOworICAgIFtzY3JvbGxWaWV3IHNldENvbnRl
bnRPZmZzZXQ6Y29udGVudE9mZnNldERlbHRhIGFuaW1hdGVkOmFuaW1hdGVkXTsKK30KKworLSAo
dm9pZClzY3JvbGxXaXRoU2Nyb2xsVG9FeHRlbnRBbmltYXRpb25UbzooQ0dQb2ludClvZmZzZXQK
K3sKKyAgICBhdXRvIHNjcm9sbFZpZXcgPSBfc2Nyb2xsVmlldy5nZXRBdXRvcmVsZWFzZWQoKTsK
KyAgICBbc2Nyb2xsVmlldyBfc2V0Q29udGVudE9mZnNldFdpdGhEZWNlbGVyYXRpb25BbmltYXRp
b246b2Zmc2V0XTsKK30KKworLSAoQ0dQb2ludCljb250ZW50T2Zmc2V0Cit7CisgICAgYXV0byBz
Y3JvbGxWaWV3ID0gX3Njcm9sbFZpZXcuZ2V0QXV0b3JlbGVhc2VkKCk7CisgICAgaWYgKCFzY3Jv
bGxWaWV3KQorICAgICAgICByZXR1cm4gQ0dQb2ludFplcm87CisKKyAgICByZXR1cm4gW3Njcm9s
bFZpZXcgY29udGVudE9mZnNldF07Cit9CisKKy0gKENHUG9pbnQpYm91bmRlZENvbnRlbnRPZmZz
ZXQ6KENHUG9pbnQpb2Zmc2V0Cit7CisgICAgYXV0byBzY3JvbGxWaWV3ID0gX3Njcm9sbFZpZXcu
Z2V0QXV0b3JlbGVhc2VkKCk7CisgICAgaWYgKCFzY3JvbGxWaWV3KQorICAgICAgICByZXR1cm4g
Q0dQb2ludFplcm87CisKKyAgICByZXR1cm4gW3Njcm9sbFZpZXcgX2FkanVzdGVkQ29udGVudE9m
ZnNldEZvckNvbnRlbnRPZmZzZXQ6b2Zmc2V0XTsKK30KKworLSAoQ0dTaXplKWludGVyYWN0aXZl
U2Nyb2xsVmVsb2NpdHkKK3sKKyAgICBhdXRvIHNjcm9sbFZpZXcgPSBfc2Nyb2xsVmlldy5nZXRB
dXRvcmVsZWFzZWQoKTsKKyAgICBpZiAoIXNjcm9sbFZpZXcpCisgICAgICAgIHJldHVybiBDR1Np
emVaZXJvOworCisgICAgcmV0dXJuIENHU2l6ZU1ha2Uoc2Nyb2xsVmlldy5faG9yaXpvbnRhbFZl
bG9jaXR5ICogMTAwMCwgc2Nyb2xsVmlldy5fdmVydGljYWxWZWxvY2l0eSAqIDEwMDApOworfQor
CistIChXZWJDb3JlOjpSZWN0RWRnZXM8Ym9vbD4pc2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zm
c2V0OihDR1BvaW50KW9mZnNldAoreworICAgIGF1dG8gc2Nyb2xsVmlldyA9IF9zY3JvbGxWaWV3
LmdldEF1dG9yZWxlYXNlZCgpOworICAgIGlmICghc2Nyb2xsVmlldykKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIFVJRWRnZUluc2V0cyBjb250ZW50SW5zZXRzID0gc2Nyb2xsVmlldy5hZGp1
c3RlZENvbnRlbnRJbnNldDsKKworICAgIENHU2l6ZSBjb250ZW50U2l6ZSA9IHNjcm9sbFZpZXcu
Y29udGVudFNpemU7CisgICAgQ0dTaXplIHNjcm9sbFZpZXdTaXplID0gc2Nyb2xsVmlldy5ib3Vu
ZHMuc2l6ZTsKKworICAgIENHUG9pbnQgbWluaW11bUNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFr
ZSgtY29udGVudEluc2V0cy5sZWZ0LCAtY29udGVudEluc2V0cy50b3ApOworICAgIENHUG9pbnQg
bWF4aW11bUNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFrZShzdGQ6Om1heChtaW5pbXVtQ29udGVu
dE9mZnNldC54LCBjb250ZW50U2l6ZS53aWR0aCArIGNvbnRlbnRJbnNldHMucmlnaHQgLSBzY3Jv
bGxWaWV3U2l6ZS53aWR0aCksIHN0ZDo6bWF4KG1pbmltdW1Db250ZW50T2Zmc2V0LnksIGNvbnRl
bnRTaXplLmhlaWdodCArIGNvbnRlbnRJbnNldHMuYm90dG9tIC0gc2Nyb2xsVmlld1NpemUuaGVp
Z2h0KSk7CisKKyAgICBXZWJDb3JlOjpSZWN0RWRnZXM8Ym9vbD4gZWRnZXM7CisKKyAgICBlZGdl
cy5zZXRUb3Aob2Zmc2V0LnkgPiBtaW5pbXVtQ29udGVudE9mZnNldC55KTsKKyAgICBlZGdlcy5z
ZXRCb3R0b20ob2Zmc2V0LnkgPCBtYXhpbXVtQ29udGVudE9mZnNldC55KTsKKyAgICBlZGdlcy5z
ZXRMZWZ0KG9mZnNldC54ID4gbWluaW11bUNvbnRlbnRPZmZzZXQueCk7CisgICAgZWRnZXMuc2V0
UmlnaHQob2Zmc2V0LnggPCBtYXhpbXVtQ29udGVudE9mZnNldC54KTsKKworICAgIHJldHVybiBl
ZGdlczsKK30KKworLSAoV2ViQ29yZTo6UmVjdEVkZ2VzPGJvb2w+KXJ1YmJlcmJhbmRhYmxlRGly
ZWN0aW9ucworeworICAgIGF1dG8gc2Nyb2xsVmlldyA9IF9zY3JvbGxWaWV3LmdldEF1dG9yZWxl
YXNlZCgpOworICAgIGlmICghc2Nyb2xsVmlldykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IFdlYkNvcmU6OlJlY3RFZGdlczxib29sPiBlZGdlczsKKworICAgIGVkZ2VzLnNldFRvcChzY3Jv
bGxWaWV3Ll9jYW5TY3JvbGxZKTsKKyAgICBlZGdlcy5zZXRCb3R0b20oZWRnZXMudG9wKCkpOwor
ICAgIGVkZ2VzLnNldExlZnQoc2Nyb2xsVmlldy5fY2FuU2Nyb2xsWCk7CisgICAgZWRnZXMuc2V0
UmlnaHQoZWRnZXMubGVmdCgpKTsKIAotICAgIGF1dG8gY29udGVudE9mZnNldCA9IHZlbG9jaXR5
LnNjYWxlZChhY2NlbGVyYXRpb25GYWN0b3IgKiBmcmFtZUR1cmF0aW9uKTsKLSAgICBbX3Njcm9s
bGFibGUgc2Nyb2xsQnlDb250ZW50T2Zmc2V0OmNvbnRlbnRPZmZzZXQgYW5pbWF0ZWQ6Tk9dOwor
ICAgIHJldHVybiBlZGdlczsKIH0KIAogQGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351799</attachid>
            <date>2018-10-08 12:03:33 -0700</date>
            <delta_ts>2018-10-08 12:49:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190345-20181008120332.patch</filename>
            <type>text/plain</type>
            <size>44073</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2NjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZjMGRhNTUyYmIwYmNkOGMz
MzNhMzgxNWU1ZGRjNWVmN2E1OTVjZWQuLjg0ZTEwNDNiNjU1NDg3MjZiZDcwYmM3ZDAwYTMzODk4
ODRiN2MwODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ1IEBACisyMDE4LTEwLTA4ICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkanVzdCBrZXlib2Fy
ZCBzY3JvbGxpbmcgYW5pbWF0b3IgdG8gc3ByaW5neSBhbmQgc2VtaXBoeXNpY2FsCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTAzNDUKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzQzNDk0MzkzPgorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZy
YXNlci4KKworICAgICAgICBJbnRyb2R1Y2UgV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciwg
d2hpY2ggd3JhcHMgV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yCisgICAgICAgIGFuZCBwcm92
aWRlcyBhIHJlYXNvbmFibGUgc2V0IG9mIGRlZmF1bHQgYmVoYXZpb3JzIGZvciBVSVNjcm9sbFZp
ZXcuCisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgb24gdGhlIHdheSB0byBXS0tleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IKKyAgICAgICAgYmVpbmcgcGxhdGZvcm0tIGFuZCB0b29sa2l0
LWFnbm9zdGljLCBhbmQgaGVscHMgYXZvaWQgYWRkaW5nIGEgd2hvbGUKKyAgICAgICAgYnVuY2gg
b2YgY29kZSB0byBXS0NvbnRlbnRWaWV3LgorCisgICAgICAgIEFkb3B0IFVJS2l0J3Mgc2Nyb2xs
LXRvLXRvcCBhbmltYXRpb24gY3VydmUgZm9yIHdob2xlLWRvY3VtZW50IHNjcm9sbHMuCisKKyAg
ICAgICAgQWRqdXN0IFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcidzIHBoeXNpY3M7IGl0IG5v
dyBzaW11bGF0ZXMgYSBzcHJpbmcKKyAgICAgICAgYXR0YWNoZWQgdG8gdGhlIHBhZ2Ugd2hlbiBk
ZWNlbGVyYXRpbmcuIFdoZW4gYSBrZXkgaXMgcHJlc3NlZCwgaXQgYXBwbGllcworICAgICAgICBh
IGNvbnN0YW50IGZvcmNlIHRvIHRoZSBwYWdlICh1cCB0byBzb21lIG1heGltdW0gdmVsb2NpdHkp
LiBXaGVuIHJlbGVhc2VkLAorICAgICAgICB0aGUgc3ByaW5nIGNhdXNlcyB0aGUgcGFnZSB0byBk
ZWNlbGVyYXRlIHNtb290aGx5LgorCisgICAgICAgIEFkZCBydWJiZXItYmFuZGluZyB0byBrZXli
b2FyZCBzY3JvbGxpbmcsIGJhc2VkIG9uIHRoZSBzYW1lIHNwcmluZyB0aGF0CisgICAgICAgIGRl
Y2VsZXJhdGVzIHRoZSBwYWdlLgorCisgICAgICAgIFJlbW92ZSB0aGUgaW5pdGlhbCBib3VuY2Ug
b24ga2V5ZG93biBiZWZvcmUgc3RhcnRpbmcgdGhlIHNtb290aCBzY3JvbGwuCisKKyAgICAgICAg
UmVtb3ZlIGFycm93IGtleSBjb21tYW5kcyBmcm9tIFdLQ29udGVudFZpZXc7IHRoaXMgYXZvaWRz
IGRvdWJsZS1wcm9jZXNzaW5nCisgICAgICAgIGluY29taW5nIGFycm93IGtleSBldmVudHMsIG1h
a2VzIHRoZSBldmVudCBzdHJlYW0gbWFrZSBtb3JlIHNlbnNlLCBhbmQgd2FzCisgICAgICAgIGVu
dGlyZWx5IHVubmVjZXNzYXJ5LgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQ
SS5oOgorICAgICAgICBBZGQgYSB3aWRlIHZhcmlldHkgb2YgdXNlZnVsIFNQSS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgUmVtb3ZlIF9zY3JvbGxC
eUNvbnRlbnRPZmZzZXQ6YW5pbWF0ZWQ6IGJlY2F1c2UgaXQncyBvbmx5IHVzZWQgYnkKKyAgICAg
ICAgdGhlIGtleWJvYXJkIHNjcm9sbGluZyBtZWNoYW5pc20uCisKKyAgICAgICAgUmVtb3ZlIF9h
cnJvd0tleSBiZWNhdXNlIHdlJ3JlIHJlbW92aW5nIHRoZSBhcnJvdyBrZXkgY29tbWFuZHMuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IHNldHVwSW50ZXJhY3Rpb25dKToKKyAgICAgICAgQ3JlYXRlIGEg
V0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciAod2hpY2gga25vd3MgaG93IHRvIGRpcmVjdGx5
CisgICAgICAgIG1hbmlwdWxhdGUgYSBVSVNjcm9sbFZpZXcpIGluc3RlYWQgb2YgYSBXS0tleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IKKyAgICAgICAgKHdoaWNoIHJlcXVpcmVzIGl0cyBjbGllbnRz
IHRvIGltcGxlbWVudCBldmVyeXRoaW5nIGluIHRlcm1zIG9mIGFuCisgICAgICAgIGFic3RyYWN0
IGludGVyZmFjZS4KKworICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNjcm9sbFZpZXdXaWxsU3Rh
cnRQYW5PclBpbmNoR2VzdHVyZV0pOgorICAgICAgICBJbmZvcm0gdGhlIGtleWJvYXJkIHNjcm9s
bGluZyBhbmltYXRvciB0aGF0IHRoZSB1c2VyIGlzIGdvaW5nIHRvIHN0YXJ0CisgICAgICAgIGFu
IGludGVyYWN0aXZlIGdlc3R1cmUgdGhhdCBuZWVkcyBjb250cm9sIG9mIHRoZSBzY3JvbGwgdmll
dywgc28gaXQKKyAgICAgICAgY2FuIHN0b3AgaXRzIGN1cnJlbnQgYW5pbWF0ZWQgc2Nyb2xsLgor
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2FuUGVyZm9ybUFjdGlvbkZvcldlYlZpZXc6d2l0
aFNlbmRlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBrZXlDb21tYW5kc10pOgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hcnJvd0tleUZvcldlYlZpZXc6XSk6IERlbGV0ZWQuCisg
ICAgICAgIFJlbW92ZSBhcnJvdyBrZXkgY29tbWFuZHMuCisKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBrZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvcjpkaXN0YW5jZUZvckluY3JlbWVudDpdKToK
KyAgICAgICAgU2NhbGUgZnJvbSBjb250ZW50IHRvIFdLV2ViVmlldyBjb29yZGluYXRlIHNwYWNl
OyB0aGUga2V5Ym9hcmQgc2Nyb2xsaW5nCisgICAgICAgIGFuaW1hdG9yIG9wZXJhdGVzIGluIFdL
V2ViVmlldyBjb29yZGluYXRlcy4gVGhpcyB3YXMgYnJva2VuIGJlZm9yZS4KKworICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGtleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yV2lsbFNjcm9sbDpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpc1Njcm9sbGFibGVGb3JLZXlib2FyZFNjcm9sbFZp
ZXdBbmltYXRvcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpc0tleWJvYXJkU2Nyb2xs
YWJsZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRpc3RhbmNlRm9yU2Ny
b2xsaW5nSW5jcmVtZW50Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNj
cm9sbEJ5Q29udGVudE9mZnNldDphbmltYXRlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgUmVpbXBs
ZW1lbnQgdGhlc2UgYXMga2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgZGVsZWdhdGUgbWV0aG9k
cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9y
Lmg6CisgICAgICAgIEFkZCBXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yLCBoaWRlIHRoZSBp
bnRlcmZhY2UgZm9yCisgICAgICAgIFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciBpdHNlbGYg
aW4gdGhlIGltcGxlbWVudGF0aW9uIGZpbGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dL
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yIGluaXRXaXRoU2Nyb2xsYWJsZTpdKToKKyAgICAgICAgKC1bV0tLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yIHBhcmFtZXRlcnNdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNj
cm9sbGluZ0FuaW1hdG9yIGludmFsaWRhdGVdKToKKyAgICAgICAgKHVuaXRWZWN0b3IpOgorICAg
ICAgICBSZXR1cm4gYSB1bml0IHZlY3RvciBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorCisgICAg
ICAgIChwZXJwZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9yKToKKyAgICAgICAgUmV0dXJuIGEg
cG9zaXRpdmUgdW5pdCB2ZWN0b3IgcGVycGVuZGljdWxhciB0byB0aGUgYXhpcyBvZiB0aGUgZ2l2
ZW4gZGlyZWN0aW9uLgorICAgICAgICBVc2VmdWwgZm9yIG11bHRpcGx5aW5nIHdpdGggYW5vdGhl
ciB2ZWN0b3IgdG8gcmVtb3ZlIHRoZSBjb21wb25lbnQgaW4gdGhlCisgICAgICAgIGF4aXMgb2Yg
dGhlIGdpdmVuIGRpcmVjdGlvbi4KKworICAgICAgICAoYm94U2lkZSk6CisgICAgICAgIENvbnZl
cnQgU2Nyb2xsaW5nRGlyZWN0aW9uIHRvIFdlYkNvcmU6OlBoeXNpY2FsQm94U2lkZSwgZm9yIHVz
ZSB3aXRoIFJlY3RFZGdlcy4KKworICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3Iga2V5Ym9hcmRTY3JvbGxGb3JFdmVudDpdKToKKyAgICAgICAgSW5zdGVhZCBvZiBqdXN0IHJl
dHVybmluZyB0aGUgZGVzaXJlZCBpbmNyZW1lbnQsIGNvbXB1dGUgZXZlcnl0aGluZyB3ZSdsbCBu
ZWVkCisgICAgICAgIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHNjcm9sbCAoaW5jbHVkaW5nIHRo
ZSBmb3JjZSBhcHBsaWVkLCBtYXhpbXVtCisgICAgICAgIHZlbG9jaXR5LCBldGMuKSBhbmQgcmV0
dXJuIHRoZW0gdG9nZXRoZXIuCisKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yIGJlZ2luV2l0aEV2ZW50Ol0pOgorICAgICAgICBVc2UgdGhlIHNjcm9sbGFibGUncyBuYXRp
dmUgc2Nyb2xsLXRvLWV4dGVudCBhbmltYXRpb24gKGUuZy4gVUlTY3JvbGxWaWV3J3MKKyAgICAg
ICAgc2Nyb2xsLXRvLXRvcCBjdXJ2ZSkgZm9yIHdob2xlLWRvY3VtZW50IHNjcm9sbHMuCisKKyAg
ICAgICAgUmVtb3ZlIHRoZSBmaXJzdCBkaXNjcmV0ZSBzY3JvbGw7IHN0YXJ0IHRoZSBzbW9vdGgg
c2Nyb2xsIGltbWVkaWF0ZWx5LgorCisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvciBoYW5kbGVLZXlFdmVudDpdKToKKyAgICAgICAgKGZhcnRoZXN0UG9pbnRJbkRpcmVjdGlv
bik6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciBzdG9wQW5pbWF0ZWRT
Y3JvbGxdKToKKyAgICAgICAgU3RvcCB0aGUgY3VycmVudCBzY3JvbGwuIExldCB0aGUgc3ByaW5n
IGNvYXN0IHRvIGl0cyBuYXR1cmFsIHN0b3BwaW5nCisgICAgICAgIHBvaW50IGdpdmVuIHRoZSBz
eXN0ZW0ncyBjdXJyZW50IGVuZXJneSwgdW5sZXNzIHRoYXQgc3RvcHBpbmcgcG9pbnQgaXMKKyAg
ICAgICAgbGVzcyB0aGFuIG9uZSBpbmNyZW1lbnQgZnJvbSB0aGUgc3RhcnRpbmcgcG9pbnQuIElu
IHRoYXQgY2FzZSwgd2UgYXR0YWNoCisgICAgICAgIHRoZSBzcHJpbmcgdG8gL3RoYXQvIHBvaW50
IGFuZCBsZXQgaXQgcnVuLgorCisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRv
ciBzdGFydERpc3BsYXlMaW5rSWZOZWVkZWRdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yIHN0b3BEaXNwbGF5TGlua10pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0b3Igd2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGxdKToKKyAgICAgICAgSW1t
ZWRpYXRlbHkgc3RvcCBhbGwgbW90aW9uIGlmIHRoZSB1c2VyIHRvdWNoZXMgdGhlIHNjcmVlbiB0
byBzY3JvbGwKKyAgICAgICAgb3Igem9vbSB3aXRoIGZpbmdlcnMuCisKKyAgICAgICAgKC1bV0tL
ZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIGRpc3BsYXlMaW5rRmlyZWQ6XSk6CisgICAgICAgIFVw
ZGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIHNjcm9sbGFibGUgYmFzZWQgb24gdGhlIGFwcGxpZWQg
Zm9yY2UgYW5kIHNwcmluZy4KKyAgICAgICAgU2VlIHRoZSBjb21tZW50cyBpbiB0aGlzIGZ1bmN0
aW9uIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvciBpbml0XSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
aW5pdFdpdGhTY3JvbGxWaWV3Ol0pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0Fu
aW1hdG9yIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRv
ciBpbnZhbGlkYXRlXSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
c2V0RGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
d2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGxdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9s
bFZpZXdBbmltYXRvciBiZWdpbldpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNj
cm9sbFZpZXdBbmltYXRvciBoYW5kbGVLZXlFdmVudDpdKToKKyAgICAgICAgKC1bV0tLZXlib2Fy
ZFNjcm9sbFZpZXdBbmltYXRvciBpc0tleWJvYXJkU2Nyb2xsYWJsZV0pOgorICAgICAgICAoLVtX
S0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIGRpc3RhbmNlRm9ySW5jcmVtZW50Ol0pOgorICAg
ICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIHNjcm9sbFRvQ29udGVudE9mZnNl
dDphbmltYXRlZDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciBz
Y3JvbGxXaXRoU2Nyb2xsVG9FeHRlbnRBbmltYXRpb25UbzpdKToKKyAgICAgICAgKC1bV0tLZXli
b2FyZFNjcm9sbFZpZXdBbmltYXRvciBjb250ZW50T2Zmc2V0XSk6CisgICAgICAgICgtW1dLS2V5
Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgYm91bmRlZENvbnRlbnRPZmZzZXQ6XSk6CisgICAgICAg
ICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgaW50ZXJhY3RpdmVTY3JvbGxWZWxvY2l0
eV0pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIHNjcm9sbGFibGVE
aXJlY3Rpb25zRnJvbU9mZnNldDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvciBydWJiZXJiYW5kYWJsZURpcmVjdGlvbnNdKToKKyAgICAgICAgQWRkIFdLS2V5Ym9h
cmRTY3JvbGxWaWV3QW5pbWF0b3IsIHdoaWNoIHdyYXBzIFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvcgorICAgICAgICBhbmQgcHJvdmlkZXMgYW5pbWF0ZWQga2V5Ym9hcmQgc2Nyb2xsaW5nIGZv
ciBhIFVJU2Nyb2xsVmlldyB3aXRob3V0IG11Y2gKKyAgICAgICAgYWRkaXRpb25hbCBwbHVtYmlu
ZyB3b3JrLiBJdCBjb250YWlucyByZWFzb25hYmxlIGRlZmF1bHQgYmVoYXZpb3JzLAorICAgICAg
ICB3aXRoIGEgZmV3IG9wdGlvbmFsIGRlbGVnYXRlIG1ldGhvZHMgZm9yIGN1c3RvbWl6YXRpb24u
CisKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIF9zY3JvbGxPZmZzZXRG
b3JFdmVudDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yIHN0YXJ0QW5pbWF0ZWRTY3JvbGxdKTogRGVsZXRlZC4KKwogMjAxOC0wOS0yOSAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjIzNjYzMS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
c3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0
U1BJLmgKaW5kZXggYWFlY2EwZWZjYjUzODQzOThmODE5Y2NmZWFkNTg2N2IxNzIzNzQxMC4uYjhi
OTkxMTM0MDBmZjk0MTNkZDdjMTU5YTU4OTdiMWU1Y2QwNzBhNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTMyOCw2ICszMjgsOCBAQCB0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBVSVNjcm9sbFZpZXdJbmRpY2F0b3JJbnNldEFkanVzdG1lbnRCZWhh
dmlvcikgewogLSAodm9pZClfc3RvcFNjcm9sbGluZ0FuZFpvb21pbmdBbmltYXRpb25zOwogLSAo
dm9pZClfem9vbVRvQ2VudGVyOihDR1BvaW50KWNlbnRlciBzY2FsZTooQ0dGbG9hdClzY2FsZSBk
dXJhdGlvbjooQ0ZUaW1lSW50ZXJ2YWwpZHVyYXRpb24gZm9yY2U6KEJPT0wpZm9yY2U7CiAtICh2
b2lkKV96b29tVG9DZW50ZXI6KENHUG9pbnQpY2VudGVyIHNjYWxlOihDR0Zsb2F0KXNjYWxlIGR1
cmF0aW9uOihDRlRpbWVJbnRlcnZhbClkdXJhdGlvbjsKKy0gKGRvdWJsZSlfaG9yaXpvbnRhbFZl
bG9jaXR5OworLSAoZG91YmxlKV92ZXJ0aWNhbFZlbG9jaXR5OwogQHByb3BlcnR5IChub25hdG9t
aWMsIGdldHRlcj1pc1pvb21FbmFibGVkKSBCT09MIHpvb21FbmFibGVkOwogQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9X2lzQW5pbWF0aW5nWm9vbSkgQk9PTCBpc0FuaW1h
dGluZ1pvb207CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1faXNBbmlt
YXRpbmdTY3JvbGwpIEJPT0wgaXNBbmltYXRpbmdTY3JvbGw7CkBAIC0xMDIyLDYgKzEwMjQsMTAg
QEAgdHlwZWRlZiBOU0ludGVnZXIgVUlDb21wb3NpdGluZ01vZGU7CiAtICh2b2lkKV9hZGp1c3RG
b3JBdXRvbWF0aWNLZXlib2FyZEluZm86KE5TRGljdGlvbmFyeSAqKWluZm8gYW5pbWF0ZWQ6KEJP
T0wpYW5pbWF0ZWQgbGFzdEFkanVzdG1lbnQ6KENHRmxvYXQqKWxhc3RBZGp1c3RtZW50OwogLSAo
Qk9PTClfaXNTY3JvbGxpbmdUb1RvcDsKIC0gKENHUG9pbnQpX2FuaW1hdGVkVGFyZ2V0T2Zmc2V0
OworLSAoQk9PTClfY2FuU2Nyb2xsWDsKKy0gKEJPT0wpX2NhblNjcm9sbFk7CistICh2b2lkKV9z
ZXRDb250ZW50T2Zmc2V0V2l0aERlY2VsZXJhdGlvbkFuaW1hdGlvbjooQ0dQb2ludCljb250ZW50
T2Zmc2V0OworLSAoQ0dQb2ludClfYWRqdXN0ZWRDb250ZW50T2Zmc2V0Rm9yQ29udGVudE9mZnNl
dDooQ0dQb2ludCljb250ZW50T2Zmc2V0OwogQGVuZAogCiBAaW50ZXJmYWNlIFVJUGVyaXBoZXJh
bEhvc3QgKElQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tCmluZGV4IDg3OWY5MzI1OWM2ZDMxOTJiMzY0NjZjZTZhYmI1MGQ1M2Y1YTY0MWMuLjQz
OTFjYWIzNDMwNTg2ODhhYmMzM2E5ZThjY2MzYTE4YmRhY2U0NGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtMjEyOSwyNCArMjEyOSw2
IEBAIC0gKEJPT0wpX3Njcm9sbFRvUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qg
b3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS0gKHZv
aWQpX3Njcm9sbEJ5Q29udGVudE9mZnNldDooV2ViQ29yZTo6RmxvYXRQb2ludCljb250ZW50T2Zm
c2V0RGVsdGEgYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKLXsKLSAgICBXZWJDb3JlOjpGbG9hdFBv
aW50IHNjYWxlZE9mZnNldERlbHRhID0gY29udGVudE9mZnNldERlbHRhOwotICAgIENHRmxvYXQg
em9vbVNjYWxlID0gY29udGVudFpvb21TY2FsZShzZWxmKTsKLSAgICBzY2FsZWRPZmZzZXREZWx0
YS5zY2FsZSh6b29tU2NhbGUpOwotCi0gICAgQ0dQb2ludCBjdXJyZW50T2Zmc2V0ID0gW19zY3Jv
bGxWaWV3IF9pc0FuaW1hdGluZ1Njcm9sbF0gPyBbX3Njcm9sbFZpZXcgX2FuaW1hdGVkVGFyZ2V0
T2Zmc2V0XSA6IFtfc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XTsKLSAgICBDR1BvaW50IGJvdW5k
ZWRPZmZzZXQgPSBjb250ZW50T2Zmc2V0Qm91bmRlZEluVmFsaWRSYW5nZShfc2Nyb2xsVmlldy5n
ZXQoKSwgY3VycmVudE9mZnNldCArIHNjYWxlZE9mZnNldERlbHRhKTsKLQotICAgIGlmIChDR1Bv
aW50RXF1YWxUb1BvaW50KGJvdW5kZWRPZmZzZXQsIGN1cnJlbnRPZmZzZXQpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgW19jb250ZW50VmlldyB3aWxsU3RhcnRab29tT3JTY3JvbGxdOwotCi0gICAg
TE9HX1dJVEhfU1RSRUFNKFZpc2libGVSZWN0cywgc3RyZWFtIDw8ICJfc2Nyb2xsQnlDb250ZW50
T2Zmc2V0OiBzY3JvbGxpbmcgdG8gIiA8PCBXZWJDb3JlOjpGbG9hdFBvaW50KGJvdW5kZWRPZmZz
ZXQpKTsKLQotICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OmJvdW5kZWRPZmZzZXQg
YW5pbWF0ZWQ6YW5pbWF0ZWRdOwotfQotCiAtICh2b2lkKV96b29tT3V0V2l0aE9yaWdpbjooV2Vi
Q29yZTo6RmxvYXRQb2ludClvcmlnaW4gYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKIHsKICAgICBb
c2VsZiBfem9vbVRvUG9pbnQ6b3JpZ2luIGF0U2NhbGU6W19zY3JvbGxWaWV3IG1pbmltdW1ab29t
U2NhbGVdIGFuaW1hdGVkOmFuaW1hdGVkXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKaW5kZXggYTFhMDQ1NjBjMmIwNzdm
Njk0MDdhZDhlZmUwNGUzNjdhYjg4MzFlOS4uNzE4OWNhMGU2ZmE3MzRkMDU2ZDUwMjYyOTlhNWFj
NjRlYjdlMWM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld0ludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlld0ludGVybmFsLmgKQEAgLTk3LDcgKzk3LDYgQEAgc3RydWN0IFByaW50SW5m
bzsKIAogLSAodm9pZClfc2Nyb2xsVG9Db250ZW50U2Nyb2xsUG9zaXRpb246KFdlYkNvcmU6OkZs
b2F0UG9pbnQpc2Nyb2xsUG9zaXRpb24gc2Nyb2xsT3JpZ2luOihXZWJDb3JlOjpJbnRQb2ludClz
Y3JvbGxPcmlnaW47CiAtIChCT09MKV9zY3JvbGxUb1JlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl0
YXJnZXRSZWN0IG9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4gbWluaW11bVNjcm9s
bERpc3RhbmNlOihmbG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFuY2U7Ci0tICh2b2lkKV9zY3JvbGxC
eUNvbnRlbnRPZmZzZXQ6KFdlYkNvcmU6OkZsb2F0UG9pbnQpb2Zmc2V0IGFuaW1hdGVkOihCT09M
KWFuaW1hdGVkOwogLSAodm9pZClfem9vbVRvRm9jdXNSZWN0OihXZWJDb3JlOjpGbG9hdFJlY3Qp
Zm9jdXNlZEVsZW1lbnRSZWN0IHNlbGVjdGlvblJlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdClzZWxl
Y3Rpb25SZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzIGluc2lkZUZpeGVkOihCT09MKWluc2lkZUZp
eGVkIGZvbnRTaXplOihmbG9hdClmb250U2l6ZSBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5pbXVt
U2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlIGFsbG93U2NhbGluZzooQk9P
TClhbGxvd1NjYWxpbmcgZm9yY2VTY3JvbGw6KEJPT0wpZm9yY2VTY3JvbGw7CiAtIChCT09MKV96
b29tVG9SZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCB3aXRoT3JpZ2luOihXZWJD
b3JlOjpGbG9hdFBvaW50KW9yaWdpbiBmaXRFbnRpcmVSZWN0OihCT09MKWZpdEVudGlyZVJlY3Qg
bWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1h
eGltdW1TY2FsZSBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0KW1pbmltdW1TY3JvbGxEaXN0
YW5jZTsKIC0gKHZvaWQpX3pvb21PdXRXaXRoT3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9y
aWdpbiBhbmltYXRlZDooQk9PTClhbmltYXRlZDsKQEAgLTEzNSw3ICsxMzQsNiBAQCBzdHJ1Y3Qg
UHJpbnRJbmZvOwogLSAodm9pZClfZGlkQ2hhbmdlRWRpdG9yU3RhdGU7CiAKIC0gKHZvaWQpX2Fk
ZFNob3J0Y3V0OihpZClzZW5kZXI7Ci0tICh2b2lkKV9hcnJvd0tleTooaWQpc2VuZGVyOwogLSAo
dm9pZClfZGVmaW5lOihpZClzZW5kZXI7CiAtICh2b2lkKV9sb29rdXA6KGlkKXNlbmRlcjsKIC0g
KHZvaWQpX3NoYXJlOihpZClzZW5kZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKaW5kZXggYTIzOWRlOWRjNWUxZWMw
ODU0NmVkMzFlYTM3MmQwZGM1MTQ0N2M1MC4uMWNjMDlkYzRmYTU5MTRkMzExZWRhMjdmOGFkMjZm
YjE4ZDFlMmM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApAQCAtMTA2LDcgKzEwNiw2IEBAIHR5cGVkZWYgc3Rk
OjpwYWlyPFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3QsIEludGVyYWN0aW9u
SW5mb3JtYXRpb25DCiAKICNkZWZpbmUgRk9SX0VBQ0hfV0tDT05URU5UVklFV19BQ1RJT04oTSkg
XAogICAgIE0oX2FkZFNob3J0Y3V0KSBcCi0gICAgTShfYXJyb3dLZXkpIFwKICAgICBNKF9kZWZp
bmUpIFwKICAgICBNKF9sb29rdXApIFwKICAgICBNKF9wcm9tcHRGb3JSZXBsYWNlKSBcCkBAIC0y
MzUsNyArMjM0LDcgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKICAgICAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpJbnB1dFZpZXdVcGRhdGVEZWZlcnJlcj4gX2lucHV0Vmll
d1VwZGF0ZURlZmVycmVyOwogCi0gICAgUmV0YWluUHRyPFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvcj4gX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I7CisgICAgUmV0YWluUHRyPFdLS2V5Ym9h
cmRTY3JvbGxWaWV3QW5pbWF0b3I+IF9rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOwogCiAgICAg
Qk9PTCBfaXNFZGl0YWJsZTsKICAgICBCT09MIF9zaG93aW5nVGV4dFN0eWxlT3B0aW9uczsKQEAg
LTI4MywxMSArMjgyLDEwIEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0aW9uRGF0YSB7CiAKIEBlbmQK
IAotQGludGVyZmFjZSBXS0NvbnRlbnRWaWV3IChXS0ludGVyYWN0aW9uKSA8VUlHZXN0dXJlUmVj
b2duaXplckRlbGVnYXRlLCBVSVRleHRBdXRvc2Nyb2xsaW5nLCBVSVRleHRJbnB1dE11bHRpRG9j
dW1lbnQsIFVJVGV4dElucHV0UHJpdmF0ZSwgVUlXZWJGb3JtQWNjZXNzb3J5RGVsZWdhdGUsIFVJ
V2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVdLSW50ZXJhY3Rpb25W
aWV3UHJvdG9jb2wsIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnREZWxlZ2F0ZSwgV0tGaWxlVXBsb2Fk
UGFuZWxEZWxlZ2F0ZQorQGludGVyZmFjZSBXS0NvbnRlbnRWaWV3IChXS0ludGVyYWN0aW9uKSA8
VUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVRleHRBdXRvc2Nyb2xsaW5nLCBVSVRleHRJ
bnB1dE11bHRpRG9jdW1lbnQsIFVJVGV4dElucHV0UHJpdmF0ZSwgVUlXZWJGb3JtQWNjZXNzb3J5
RGVsZWdhdGUsIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVdL
SW50ZXJhY3Rpb25WaWV3UHJvdG9jb2wsIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnREZWxlZ2F0ZSwg
V0tGaWxlVXBsb2FkUGFuZWxEZWxlZ2F0ZSwgV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvckRl
bGVnYXRlCiAjaWYgIVBMQVRGT1JNKFdBVENIT1MpICYmICFQTEFURk9STShBUFBMRVRWKQogICAg
ICwgV0tTaGFyZVNoZWV0RGVsZWdhdGUKICNlbmRpZgotICAgICwgV0tLZXlib2FyZFNjcm9sbGFi
bGUKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKICAgICAsIFVJRHJhZ0ludGVyYWN0aW9u
RGVsZWdhdGUsIFVJRHJvcEludGVyYWN0aW9uRGVsZWdhdGUKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0K
aW5kZXggN2U2NGE1ZWUyY2YxYmI4ZGJkNzk5YmM4NDZmNzNhNDEzNWEwYTc2ZC4uNDkyYmJlMjgz
NDE1NTI3Mzk4ZmY3M2ZlY2JiNGY0MTAxMDRmNWRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0xMjEs
NyArMTIxLDcgQEAKICNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XS1BsYXRmb3JtRmlsZVVwbG9h
ZFBhbmVsLm1tPgogI2VuZGlmCiAKLUBpbnRlcmZhY2UgVUlFdmVudChVSUV2ZW50SW50ZXJuYWwp
CitAaW50ZXJmYWNlIFVJRXZlbnQgKFVJRXZlbnRJbnRlcm5hbCkKIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBhc3NpZ24pIFVJS2V5Ym9hcmRJbnB1dEZsYWdzIF9pbnB1dEZsYWdzOwogQGVuZAogCkBA
IC02MzgsNyArNjM4LDggQEAgLSAodm9pZClzZXR1cEludGVyYWN0aW9uCiAgICAgICAgIFtzZWxm
LnN1cGVydmlldyBhZGRTdWJ2aWV3Ol9pbnRlcmFjdGlvblZpZXdzQ29udGFpbmVyVmlldy5nZXQo
KV07CiAgICAgfQogCi0gICAgX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgPSBhZG9wdE5TKFtb
V0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIGFsbG9jXSBpbml0V2l0aFNjcm9sbGFibGU6c2Vs
Zl0pOworICAgIF9rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yID0gYWRvcHROUyhbW1dLS2V5Ym9h
cmRTY3JvbGxWaWV3QW5pbWF0b3IgYWxsb2NdIGluaXRXaXRoU2Nyb2xsVmlldzpfd2ViVmlldy5z
Y3JvbGxWaWV3XSk7CisgICAgW19rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIHNldERlbGVnYXRl
OnNlbGZdOwogCiAgICAgW3NlbGYubGF5ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBmb3JLZXlQYXRoOkAi
dHJhbnNmb3JtIiBvcHRpb25zOk5TS2V5VmFsdWVPYnNlcnZpbmdPcHRpb25Jbml0aWFsIGNvbnRl
eHQ6bmlsXTsKIApAQCAtMjA2OCw2ICsyMDY5LDggQEAgLSAodm9pZClzY3JvbGxWaWV3V2lsbFN0
YXJ0UGFuT3JQaW5jaEdlc3R1cmUKIHsKICAgICBfcGFnZS0+aGlkZVZhbGlkYXRpb25NZXNzYWdl
KCk7CiAKKyAgICBbX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Igd2lsbFN0YXJ0SW50ZXJhY3Rp
dmVTY3JvbGxdOworCiAgICAgX2NhblNlbmRUb3VjaEV2ZW50c0FzeW5jaHJvbm91c2x5ID0gWUVT
OwogfQogCkBAIC0yMzExLDEwICsyMzE0LDcgQEAgLSAoQk9PTCljYW5QZXJmb3JtQWN0aW9uOihT
RUwpYWN0aW9uIHdpdGhTZW5kZXI6KGlkKXNlbmRlcgogfQogCiAtIChCT09MKWNhblBlcmZvcm1B
Y3Rpb25Gb3JXZWJWaWV3OihTRUwpYWN0aW9uIHdpdGhTZW5kZXI6KGlkKXNlbmRlcgotewotICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9hcnJvd0tleTopKQotICAgICAgICByZXR1cm4gW3Nl
bGYgaXNGaXJzdFJlc3BvbmRlcl07Ci0gICAgICAgIAoreyAgICAgICAgCiAgICAgYXV0byBlZGl0
b3JTdGF0ZSA9IF9wYWdlLT5lZGl0b3JTdGF0ZSgpOwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKF9zaG93VGV4dFN0eWxlT3B0aW9uczopKQogICAgICAgICByZXR1cm4gZWRpdG9yU3RhdGUu
aXNDb250ZW50UmljaGx5RWRpdGFibGUgJiYgZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5nZSAm
JiAhX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zOwpAQCAtMzA5MCw0NCArMzA5MCwxNCBAQCAtICh2
b2lkKWFjY2Vzc29yeURvbmUKIAogLSAoTlNBcnJheSAqKWtleUNvbW1hbmRzCiB7Ci0gICAgc3Rh
dGljIE5TQXJyYXkqIG5vbkVkaXRhYmxlS2V5Q29tbWFuZHMgPSBbQFsKLSAgICAgICBbVUlLZXlD
b21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dFVwQXJyb3cgbW9kaWZpZXJGbGFn
czowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAgICAgIFtVSUtleUNvbW1hbmQg
a2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0RG93bkFycm93IG1vZGlmaWVyRmxhZ3M6MCBh
Y3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNv
bW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dExlZnRBcnJvdyBtb2RpZmllckZsYWdzOjAgYWN0aW9u
OkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5k
V2l0aElucHV0OlVJS2V5SW5wdXRSaWdodEFycm93IG1vZGlmaWVyRmxhZ3M6MCBhY3Rpb246QHNl
bGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICAKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNv
bW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dFVwQXJyb3cgbW9kaWZpZXJGbGFnczpVSUtleU1vZGlm
aWVyQ29tbWFuZCBhY3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlD
b21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dERvd25BcnJvdyBtb2RpZmllckZs
YWdzOlVJS2V5TW9kaWZpZXJDb21tYW5kIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAot
ICAgICAgIAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlu
cHV0VXBBcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJTaGlmdCBhY3Rpb246QHNlbGVj
dG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRoSW5w
dXQ6VUlLZXlJbnB1dERvd25BcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJTaGlmdCBh
Y3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNv
bW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dExlZnRBcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9k
aWZpZXJTaGlmdCBhY3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlD
b21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dFJpZ2h0QXJyb3cgbW9kaWZpZXJG
bGFnczpVSUtleU1vZGlmaWVyU2hpZnQgYWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0g
ICAgICAgCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0aElucHV0OlVJS2V5SW5w
dXRVcEFycm93IG1vZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmllckFsdGVybmF0ZSBhY3Rpb246QHNl
bGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRo
SW5wdXQ6VUlLZXlJbnB1dERvd25BcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJBbHRl
cm5hdGUgYWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAgICAgW1VJS2V5Q29tbWFu
ZCBrZXlDb21tYW5kV2l0aElucHV0OlVJS2V5SW5wdXRMZWZ0QXJyb3cgbW9kaWZpZXJGbGFnczpV
SUtleU1vZGlmaWVyQWx0ZXJuYXRlIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAg
ICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0UmlnaHRBcnJv
dyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJBbHRlcm5hdGUgYWN0aW9uOkBzZWxlY3Rvcihf
YXJyb3dLZXk6KV0sCi0gICAgICAgCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0
aElucHV0OkAiICIgbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5Oild
LAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpAIiAiIG1vZGlmaWVy
RmxhZ3M6VUlLZXlNb2RpZmllclNoaWZ0IGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAot
ICAgICAgIAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlu
cHV0UGFnZURvd24gbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5Oild
LAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0UGFn
ZURvd24gbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAg
IF0gcmV0YWluXTsKKyAgICBpZiAoIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRh
YmxlKQorICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgc3RhdGljIE5TQXJyYXkqIGVkaXRhYmxl
S2V5Q29tbWFuZHMgPSBbQFsKICAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRoSW5w
dXQ6QCJcdCIgbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0b3IoX25leHRBY2Nlc3NvcnlU
YWI6KV0sCiAgICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0aElucHV0OkAiXHQiIG1v
ZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmllclNoaWZ0IGFjdGlvbjpAc2VsZWN0b3IoX3ByZXZBY2Nl
c3NvcnlUYWI6KV0KICAgICBdIHJldGFpbl07Ci0gICAgCi0gICAgcmV0dXJuIChfcGFnZS0+ZWRp
dG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkgPyBlZGl0YWJsZUtleUNvbW1hbmRzIDogbm9u
RWRpdGFibGVLZXlDb21tYW5kczsKLX0KLQotLSAodm9pZClfYXJyb3dLZXlGb3JXZWJWaWV3Oihp
ZClzZW5kZXIKLXsKLSAgICBVSUtleUNvbW1hbmQqIGNvbW1hbmQgPSBzZW5kZXI7Ci0gICAgW3Nl
bGYgaGFuZGxlS2V5RXZlbnQ6Y29tbWFuZC5fdHJpZ2dlcmluZ0V2ZW50XTsKKyAgICByZXR1cm4g
ZWRpdGFibGVLZXlDb21tYW5kczsKIH0KIAogLSAodm9pZClfbmV4dEFjY2Vzc29yeVRhYjooaWQp
c2VuZGVyCkBAIC0zODY0LDcgKzM4MzQsNyBAQCAtIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDoo
OjpXZWJFdmVudCAqKWV2ZW50IGlzQ2hhckV2ZW50OihCT09MKWlzQ2hhckV2ZW50CiAgICAgcmV0
dXJuIE5POwogfQogCi0tIChCT09MKWlzS2V5Ym9hcmRTY3JvbGxhYmxlCistIChCT09MKWlzU2Ny
b2xsYWJsZUZvcktleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yOihXS0tleWJvYXJkU2Nyb2xsVmll
d0FuaW1hdG9yICopYW5pbWF0b3IKIHsKICAgICBpZiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXND
b250ZW50RWRpdGFibGUpCiAgICAgICAgIHJldHVybiBOTzsKQEAgLTM4NzUsMjMgKzM4NDUsMjMg
QEAgLSAoQk9PTClpc0tleWJvYXJkU2Nyb2xsYWJsZQogICAgIHJldHVybiBZRVM7CiB9CiAKLS0g
KENHRmxvYXQpZGlzdGFuY2VGb3JTY3JvbGxpbmdJbmNyZW1lbnQ6KFNjcm9sbGluZ0luY3JlbWVu
dClpbmNyZW1lbnQKKy0gKENHRmxvYXQpa2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6KFdLS2V5
Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgKilhbmltYXRvciBkaXN0YW5jZUZvckluY3JlbWVudDoo
U2Nyb2xsaW5nSW5jcmVtZW50KWluY3JlbWVudAogewogICAgIHN3aXRjaCAoaW5jcmVtZW50KSB7
CiAgICAgY2FzZSBTY3JvbGxpbmdJbmNyZW1lbnQ6OkRvY3VtZW50OgotICAgICAgICByZXR1cm4g
c2VsZi5ib3VuZHMuc2l6ZS5oZWlnaHQ7CisgICAgICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVj
dDpzZWxmLmJvdW5kcyB0b1ZpZXc6X3dlYlZpZXddLnNpemUuaGVpZ2h0OwogICAgIGNhc2UgU2Ny
b2xsaW5nSW5jcmVtZW50OjpQYWdlOgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6U2Nyb2xsYmFy
OjpwYWdlU3RlcChfcGFnZS0+dW5vYnNjdXJlZENvbnRlbnRSZWN0KCkuaGVpZ2h0KCksIHNlbGYu
Ym91bmRzLnNpemUuaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRTaXplOkNH
U2l6ZU1ha2UoMCwgV2ViQ29yZTo6U2Nyb2xsYmFyOjpwYWdlU3RlcChfcGFnZS0+dW5vYnNjdXJl
ZENvbnRlbnRSZWN0KCkuaGVpZ2h0KCksIHNlbGYuYm91bmRzLnNpemUuaGVpZ2h0KSkgdG9WaWV3
Ol93ZWJWaWV3XS5oZWlnaHQ7CiAgICAgY2FzZSBTY3JvbGxpbmdJbmNyZW1lbnQ6OkxpbmU6Ci0g
ICAgICAgIHJldHVybiBXZWJDb3JlOjpTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7Cisg
ICAgICAgIHJldHVybiBbc2VsZiBjb252ZXJ0U2l6ZTpDR1NpemVNYWtlKDAsIFdlYkNvcmU6OlNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSkgdG9WaWV3Ol93ZWJWaWV3XS5oZWlnaHQ7CiAg
ICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwogfQogCi0tICh2
b2lkKXNjcm9sbEJ5Q29udGVudE9mZnNldDooV2ViQ29yZTo6RmxvYXRQb2ludClvZmZzZXQgYW5p
bWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKKy0gKHZvaWQpa2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3JX
aWxsU2Nyb2xsOihXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yICopYW5pbWF0b3IKIHsKLSAg
ICBbX3dlYlZpZXcgX3Njcm9sbEJ5Q29udGVudE9mZnNldDpvZmZzZXQgYW5pbWF0ZWQ6YW5pbWF0
ZWRdOworICAgIFtzZWxmIHdpbGxTdGFydFpvb21PclNjcm9sbF07CiB9CiAKIC0gKHZvaWQpZXhl
Y3V0ZUVkaXRDb21tYW5kV2l0aENhbGxiYWNrOihOU1N0cmluZyAqKWNvbW1hbmROYW1lCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGlu
Z0FuaW1hdG9yLmgKaW5kZXggYTUzOWFkNzIwOTkxZTBiZWI3NjYyMDhjMDMzYzU4M2ZiNTRkZGYy
Yy4uMGE3ZjBlMTFhNjczNzBkOGI1Y2E3YjZiNzE2YjlhNDlmYzY2YTRiNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xsaW5nQW5p
bWF0b3IuaApAQCAtMzksMjYgKzM5LDMyIEBAIGVudW0gY2xhc3MgU2Nyb2xsaW5nSW5jcmVtZW50
IDogdWludDhfdCB7CiAKIH0KIAorQGNsYXNzIFVJU2Nyb2xsVmlldzsKIEBjbGFzcyBXZWJFdmVu
dDsKLUBwcm90b2NvbCBXS0tleWJvYXJkU2Nyb2xsYWJsZTsKK0Bwcm90b2NvbCBXS0tleWJvYXJk
U2Nyb2xsVmlld0FuaW1hdG9yRGVsZWdhdGU7CiAKLUBpbnRlcmZhY2UgV0tLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yIDogTlNPYmplY3QKK0BpbnRlcmZhY2UgV0tLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvciA6IE5TT2JqZWN0CiAKIC0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxF
OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsYWJsZTooaWQgPFdLS2V5Ym9hcmRTY3Jv
bGxhYmxlPilzY3JvbGxhYmxlOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsVmlldzoo
VUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldzsKIAogLSAodm9pZClpbnZhbGlkYXRlOwogCistICh2
b2lkKXdpbGxTdGFydEludGVyYWN0aXZlU2Nyb2xsOworCiAtIChCT09MKWJlZ2luV2l0aEV2ZW50
Oig6OldlYkV2ZW50ICopZXZlbnQ7CiAtIChCT09MKWhhbmRsZUtleUV2ZW50Oig6OldlYkV2ZW50
ICopZXZlbnQ7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8V0tLZXlib2FyZFNj
cm9sbFZpZXdBbmltYXRvckRlbGVnYXRlPiBkZWxlZ2F0ZTsKKwogQGVuZAogCi1AcHJvdG9jb2wg
V0tLZXlib2FyZFNjcm9sbGFibGUgPE5TT2JqZWN0PgotQHJlcXVpcmVkCi0tIChCT09MKWlzS2V5
Ym9hcmRTY3JvbGxhYmxlOwotLSAoQ0dGbG9hdClkaXN0YW5jZUZvclNjcm9sbGluZ0luY3JlbWVu
dDooV2ViS2l0OjpTY3JvbGxpbmdJbmNyZW1lbnQpaW5jcmVtZW50OwotLSAodm9pZClzY3JvbGxC
eUNvbnRlbnRPZmZzZXQ6KFdlYkNvcmU6OkZsb2F0UG9pbnQpb2Zmc2V0IGFuaW1hdGVkOihCT09M
KWFuaW1hdGVkOworQHByb3RvY29sIFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3JEZWxlZ2F0
ZSA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKEJPT0wpaXNTY3JvbGxhYmxlRm9yS2V5Ym9hcmRT
Y3JvbGxWaWV3QW5pbWF0b3I6KFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgKilhbmltYXRv
cjsKKy0gKENHRmxvYXQpa2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6KFdLS2V5Ym9hcmRTY3Jv
bGxWaWV3QW5pbWF0b3IgKilhbmltYXRvciBkaXN0YW5jZUZvckluY3JlbWVudDooV2ViS2l0OjpT
Y3JvbGxpbmdJbmNyZW1lbnQpaW5jcmVtZW50OworLSAodm9pZClrZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvcldpbGxTY3JvbGw6KFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgKilhbmltYXRv
cjsKKwogQGVuZAogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IubW0K
aW5kZXggZjc3OTcwN2VjYjBhZWFmMzNkYjY5N2ZmOGFkYWI4ZWFhZWM0NWUwMC4uZmY4ZjA5OTI3
MmVkMzVmZjhkNTFkODcyYmE0Y2Y5YTlhZjA3YmYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLm1tCkBA
IC0zMCwyNyArMzAsODAgQEAKIAogI2ltcG9ydCAiVUlLaXRTUEkuaCIKICNpbXBvcnQgPFdlYkNv
cmUvRmxvYXRQb2ludC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZWN0RWRnZXMuaD4KICNpbXBvcnQg
PFdlYkNvcmUvV2ViRXZlbnQuaD4KKyNpbXBvcnQgPFdlYktpdC9VSUtpdFNQSS5oPgogI2ltcG9y
dCA8YWxnb3JpdGhtPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLWVudW0gY2xhc3MgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRv
clN0YXRlIDogdWludDhfdCB7Ci0gICAgV2FpdGluZ0ZvckZpcnN0RXZlbnQsCi0gICAgV2FpdGlu
Z0ZvclJlcGVhdCwKLSAgICBBbmltYXRpbmcKK2VudW0gY2xhc3MgU2Nyb2xsaW5nRGlyZWN0aW9u
IDogdWludDhfdCB7IFVwLCBEb3duLCBMZWZ0LCBSaWdodCB9OworCitzdHJ1Y3QgS2V5Ym9hcmRT
Y3JvbGwgeworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBvZmZzZXQ7IC8vIFBvaW50cyBwZXIgaW5j
cmVtZW50LgorICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtYXhpbXVtVmVsb2NpdHk7IC8vIFBvaW50
cyBwZXIgc2Vjb25kLgorICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBmb3JjZTsKKworICAgIFdlYktp
dDo6U2Nyb2xsaW5nSW5jcmVtZW50IGluY3JlbWVudDsKKyAgICBXZWJLaXQ6OlNjcm9sbGluZ0Rp
cmVjdGlvbiBkaXJlY3Rpb247CiB9OwogCitzdHJ1Y3QgS2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJz
IHsKKyAgICBDR0Zsb2F0IHNwcmluZ01hc3MgeyAxIH07CisgICAgQ0dGbG9hdCBzcHJpbmdTdGlm
Zm5lc3MgeyAxMDkgfTsKKyAgICBDR0Zsb2F0IHNwcmluZ0RhbXBpbmcgeyAyMCB9OworCisgICAg
Q0dGbG9hdCBtYXhpbXVtVmVsb2NpdHlNdWx0aXBsaWVyIHsgMjUgfTsKKyAgICBDR0Zsb2F0IHRp
bWVUb01heGltdW1WZWxvY2l0eSB7IDEgfTsKKworICAgIENHRmxvYXQgcnViYmVyQmFuZEZvcmNl
IHsgNTAwMCB9OwogfTsKIAorfQorCitAcHJvdG9jb2wgV0tLZXlib2FyZFNjcm9sbGFibGVJbnRl
cm5hbCA8TlNPYmplY3Q+CitAcmVxdWlyZWQKKy0gKEJPT0wpaXNLZXlib2FyZFNjcm9sbGFibGU7
CistIChDR0Zsb2F0KWRpc3RhbmNlRm9ySW5jcmVtZW50OihXZWJLaXQ6OlNjcm9sbGluZ0luY3Jl
bWVudClpbmNyZW1lbnQ7CistICh2b2lkKXNjcm9sbFRvQ29udGVudE9mZnNldDooV2ViQ29yZTo6
RmxvYXRQb2ludClvZmZzZXQgYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQ7CistICh2b2lkKXNjcm9s
bFdpdGhTY3JvbGxUb0V4dGVudEFuaW1hdGlvblRvOihDR1BvaW50KW9mZnNldDsKKy0gKENHUG9p
bnQpY29udGVudE9mZnNldDsKKy0gKENHU2l6ZSlpbnRlcmFjdGl2ZVNjcm9sbFZlbG9jaXR5Owor
LSAoQ0dQb2ludClib3VuZGVkQ29udGVudE9mZnNldDooQ0dQb2ludClvZmZzZXQ7CistIChXZWJD
b3JlOjpSZWN0RWRnZXM8Ym9vbD4pc2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zmc2V0OihDR1Bv
aW50KW9mZnNldDsKKy0gKFdlYkNvcmU6OlJlY3RFZGdlczxib29sPilydWJiZXJiYW5kYWJsZURp
cmVjdGlvbnM7CisKK0BlbmQKKworQGludGVyZmFjZSBXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IgOiBOU09iamVjdAorCistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGFibGU6KGlkIDxXS0tleWJvYXJkU2Nyb2xsYWJs
ZUludGVybmFsPilzY3JvbGxhYmxlOworCistICh2b2lkKWludmFsaWRhdGU7CisKKy0gKHZvaWQp
d2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGw7CisKKy0gKEJPT0wpYmVnaW5XaXRoRXZlbnQ6KDo6
V2ViRXZlbnQgKilldmVudDsKKy0gKEJPT0wpaGFuZGxlS2V5RXZlbnQ6KDo6V2ViRXZlbnQgKill
dmVudDsKKworQGVuZAorCiBAaW1wbGVtZW50YXRpb24gV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yIHsKLSAgICBpZCA8V0tLZXlib2FyZFNjcm9sbGFibGU+IF9zY3JvbGxhYmxlOwotICAgIENG
VGltZUludGVydmFsIF9zdGFydFRpbWU7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBfc2Nyb2xs
T2Zmc2V0UGVySW5jcmVtZW50OworICAgIGlkIDxXS0tleWJvYXJkU2Nyb2xsYWJsZUludGVybmFs
PiBfc2Nyb2xsYWJsZTsKICAgICBSZXRhaW5QdHI8Q0FEaXNwbGF5TGluaz4gX2Rpc3BsYXlMaW5r
OwotICAgIFdlYktpdDo6S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvclN0YXRlIF9zdGF0ZTsKKwor
ICAgIHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpLZXlib2FyZFNjcm9sbD4gX2N1cnJlbnRTY3JvbGw7
CisKKyAgICBCT09MIF9oYXNQcmVzc2VkU2Nyb2xsaW5nS2V5OworCisgICAgV2ViQ29yZTo6Rmxv
YXRTaXplIF92ZWxvY2l0eTsgLy8gUG9pbnRzIHBlciBzZWNvbmQuCisKKyAgICBXZWJDb3JlOjpG
bG9hdFBvaW50IF9pZGVhbFBvc2l0aW9uOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgX2N1cnJl
bnRQb3NpdGlvbjsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IF9pZGVhbFBvc2l0aW9uRm9yTWlu
aW11bVRyYXZlbDsKIH0KIAogLSAoaW5zdGFuY2V0eXBlKWluaXQKQEAgLTU4LDcgKzExMSw3IEBA
IC0gKGluc3RhbmNldHlwZSlpbml0CiAgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoU2Nyb2xsYWJsZTooaWQgPFdLS2V5Ym9hcmRTY3JvbGxhYmxlPilzY3JvbGxh
YmxlCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxhYmxlOihpZCA8V0tLZXlib2FyZFNj
cm9sbGFibGVJbnRlcm5hbD4pc2Nyb2xsYWJsZQogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CiAgICAgaWYgKCFzZWxmKQpAQCAtNjksMTMgKzEyMiw2MCBAQCAtIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhTY3JvbGxhYmxlOihpZCA8V0tLZXlib2FyZFNjcm9sbGFibGU+KXNjcm9sbGFibGUKICAg
ICByZXR1cm4gc2VsZjsKIH0KIAorLSAoY29uc3QgV2ViS2l0OjpLZXlib2FyZFNjcm9sbFBhcmFt
ZXRlcnMgJilwYXJhbWV0ZXJzCit7CisgICAgc3RhdGljIGNvbnN0IFdlYktpdDo6S2V5Ym9hcmRT
Y3JvbGxQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcmV0dXJuIHBhcmFtZXRlcnM7Cit9CisK
IC0gKHZvaWQpaW52YWxpZGF0ZQogewogICAgIFtzZWxmIHN0b3BBbmltYXRlZFNjcm9sbF07Cisg
ICAgW3NlbGYgc3RvcERpc3BsYXlMaW5rXTsKICAgICBfc2Nyb2xsYWJsZSA9IG5pbDsKIH0KIAot
LSAoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50Pilfc2Nyb2xsT2Zmc2V0Rm9yRXZl
bnQ6KDo6V2ViRXZlbnQgKilldmVudAorc3RhdGljIFdlYkNvcmU6OkZsb2F0U2l6ZSB1bml0VmVj
dG9yKFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2gg
KGRpcmVjdGlvbikgeworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OlVwOgor
ICAgICAgICByZXR1cm4geyAwLCAtMSB9OworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJl
Y3Rpb246OkRvd246CisgICAgICAgIHJldHVybiB7IDAsIDEgfTsKKyAgICBjYXNlIFdlYktpdDo6
U2Nyb2xsaW5nRGlyZWN0aW9uOjpMZWZ0OgorICAgICAgICByZXR1cm4geyAtMSwgMCB9OworICAg
IGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OlJpZ2h0OgorICAgICAgICByZXR1cm4g
eyAxLCAwIH07CisgICAgfQorfQorCitzdGF0aWMgV2ViQ29yZTo6RmxvYXRTaXplIHBlcnBlbmRp
Y3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IoV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb24gZGlyZWN0
aW9uKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9s
bGluZ0RpcmVjdGlvbjo6VXA6CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6
RG93bjoKKyAgICAgICAgcmV0dXJuIHsgMSwgMCB9OworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxp
bmdEaXJlY3Rpb246OkxlZnQ6CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6
UmlnaHQ6CisgICAgICAgIHJldHVybiB7IDAsIDEgfTsKKyAgICB9Cit9CisKK3N0YXRpYyBXZWJD
b3JlOjpQaHlzaWNhbEJveFNpZGUgYm94U2lkZShXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFdlYktpdDo6
U2Nyb2xsaW5nRGlyZWN0aW9uOjpVcDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlBoeXNpY2Fs
Qm94U2lkZTo6VG9wOworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OkRvd246
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpQaHlzaWNhbEJveFNpZGU6OkJvdHRvbTsKKyAgICBj
YXNlIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uOjpMZWZ0OgorICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6UGh5c2ljYWxCb3hTaWRlOjpMZWZ0OworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdE
aXJlY3Rpb246OlJpZ2h0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGh5c2ljYWxCb3hTaWRl
OjpSaWdodDsKKyAgICB9Cit9CisKKy0gKHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpLZXlib2FyZFNj
cm9sbD4pa2V5Ym9hcmRTY3JvbGxGb3JFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50CiB7CiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGtXZWJTcGFjZUtleSA9IDB4MjA7CiAKQEAgLTg2LDcgKzE4
Niw2IEBAIC0gKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRQb2ludD4pX3Njcm9sbE9mZnNl
dEZvckV2ZW50Oig6OldlYkV2ZW50ICopZXZlbnQKICAgICBpZiAoIWNoYXJhY3RlcnNJZ25vcmlu
Z01vZGlmaWVycy5sZW5ndGgpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBl
bnVtIGNsYXNzIERpcmVjdGlvbiA6IHVpbnQ4X3QgeyBVcCwgRG93biwgTGVmdCwgUmlnaHQgfTsK
ICAgICBlbnVtIGNsYXNzIEtleSA6IHVpbnQ4X3QgeyBPdGhlciwgTGVmdEFycm93LCBSaWdodEFy
cm93LCBVcEFycm93LCBEb3duQXJyb3csIFBhZ2VVcCwgUGFnZURvd24sIFNwYWNlIH07CiAgICAg
CiAgICAgYXV0byBrZXkgPSBeewpAQCAtMTEzLDcgKzIxMiw3IEBAIC0gKHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6RmxvYXRQb2ludD4pX3Njcm9sbE9mZnNldEZvckV2ZW50Oig6OldlYkV2ZW50ICop
ZXZlbnQKICAgICBCT09MIHNoaWZ0UHJlc3NlZCA9IGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJF
dmVudEZsYWdNYXNrU2hpZnQ7CiAgICAgQk9PTCBhbHRQcmVzc2VkID0gZXZlbnQubW9kaWZpZXJG
bGFncyAmIFdlYkV2ZW50RmxhZ01hc2tBbHRlcm5hdGU7CiAgICAgQk9PTCBjbWRQcmVzc2VkID0g
ZXZlbnQubW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01hc2tDb21tYW5kOwotICAgIAorCiAg
ICAgYXV0byBpbmNyZW1lbnQgPSBeewogICAgICAgICBzd2l0Y2ggKGtleSkgewogICAgICAgICBj
YXNlIEtleTo6TGVmdEFycm93OgpAQCAtMTM5LDEwNCArMjM4LDM4NyBAQCAtIChzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+KV9zY3JvbGxPZmZzZXRGb3JFdmVudDooOjpXZWJFdmVu
dCAqKWV2ZW50CiAgICAgYXV0byBkaXJlY3Rpb24gPSBeKCkgewogICAgICAgICBzd2l0Y2ggKGtl
eSkgewogICAgICAgICBjYXNlIEtleTo6TGVmdEFycm93OgotICAgICAgICAgICAgcmV0dXJuIERp
cmVjdGlvbjo6TGVmdDsKKyAgICAgICAgICAgIHJldHVybiBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVj
dGlvbjo6TGVmdDsKICAgICAgICAgY2FzZSBLZXk6OlJpZ2h0QXJyb3c6Ci0gICAgICAgICAgICBy
ZXR1cm4gRGlyZWN0aW9uOjpSaWdodDsKKyAgICAgICAgICAgIHJldHVybiBXZWJLaXQ6OlNjcm9s
bGluZ0RpcmVjdGlvbjo6UmlnaHQ7CiAgICAgICAgIGNhc2UgS2V5OjpVcEFycm93OgogICAgICAg
ICBjYXNlIEtleTo6UGFnZVVwOgotICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbjo6VXA7Cisg
ICAgICAgICAgICByZXR1cm4gV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OlVwOwogICAgICAg
ICBjYXNlIEtleTo6RG93bkFycm93OgogICAgICAgICBjYXNlIEtleTo6UGFnZURvd246Ci0gICAg
ICAgICAgICByZXR1cm4gRGlyZWN0aW9uOjpEb3duOworICAgICAgICAgICAgcmV0dXJuIFdlYktp
dDo6U2Nyb2xsaW5nRGlyZWN0aW9uOjpEb3duOwogICAgICAgICBjYXNlIEtleTo6U3BhY2U6Ci0g
ICAgICAgICAgICByZXR1cm4gc2hpZnRQcmVzc2VkID8gRGlyZWN0aW9uOjpVcCA6IERpcmVjdGlv
bjo6RG93bjsKKyAgICAgICAgICAgIHJldHVybiBzaGlmdFByZXNzZWQgPyBXZWJLaXQ6OlNjcm9s
bGluZ0RpcmVjdGlvbjo6VXAgOiBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6RG93bjsKICAg
ICAgICAgY2FzZSBLZXk6Ok90aGVyOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uOjpEb3duOworICAgICAgICAgICAgcmV0dXJu
IFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uOjpEb3duOwogICAgICAgICB9OwogICAgIH0oKTsK
IAotICAgIGJvb2wgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09IERpcmVjdGlvbjo6TGVmdCB8
fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpSaWdodDsKLSAgICBDR0Zsb2F0IHNjcm9sbERpc3Rh
bmNlID0gW19zY3JvbGxhYmxlIGRpc3RhbmNlRm9yU2Nyb2xsaW5nSW5jcmVtZW50OmluY3JlbWVu
dF07Ci0gICAgCi0gICAgaWYgKGRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OlVwIHx8IGRpcmVjdGlv
biA9PSBEaXJlY3Rpb246OkxlZnQpCi0gICAgICAgIHNjcm9sbERpc3RhbmNlID0gLXNjcm9sbERp
c3RhbmNlOworICAgIENHRmxvYXQgc2Nyb2xsRGlzdGFuY2UgPSBbX3Njcm9sbGFibGUgZGlzdGFu
Y2VGb3JJbmNyZW1lbnQ6aW5jcmVtZW50XTsKKworICAgIFdlYktpdDo6S2V5Ym9hcmRTY3JvbGwg
c2Nyb2xsOworICAgIHNjcm9sbC5vZmZzZXQgPSB1bml0VmVjdG9yKGRpcmVjdGlvbikuc2NhbGVk
KHNjcm9sbERpc3RhbmNlKTsKKyAgICBzY3JvbGwuaW5jcmVtZW50ID0gaW5jcmVtZW50OworICAg
IHNjcm9sbC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisgICAgc2Nyb2xsLm1heGltdW1WZWxvY2l0
eSA9IHNjcm9sbC5vZmZzZXQuc2NhbGVkKHNlbGYucGFyYW1ldGVycy5tYXhpbXVtVmVsb2NpdHlN
dWx0aXBsaWVyKTsKKworICAgIC8vIEFwcGx5IGEgY29uc3RhbnQgZm9yY2UgdG8gYWNoaWV2ZSBW
bWF4IGluIHRpbWVUb01heGltdW1WZWxvY2l0eSBzZWNvbmRzLgorICAgIC8vIEZfY29uc3RhbnQg
PSBtICogVm1heCAvIHQKKyAgICBzY3JvbGwuZm9yY2UgPSBzY3JvbGwubWF4aW11bVZlbG9jaXR5
LnNjYWxlZChzZWxmLnBhcmFtZXRlcnMuc3ByaW5nTWFzcyAvIHNlbGYucGFyYW1ldGVycy50aW1l
VG9NYXhpbXVtVmVsb2NpdHkpOwogICAgIAotICAgIHJldHVybiBpc0hvcml6b250YWwgPyBXZWJD
b3JlOjpGbG9hdFBvaW50KHNjcm9sbERpc3RhbmNlLCAwKSA6IFdlYkNvcmU6OkZsb2F0UG9pbnQo
MCwgc2Nyb2xsRGlzdGFuY2UpOworICAgIHJldHVybiBzY3JvbGw7CiB9CiAKIC0gKEJPT0wpYmVn
aW5XaXRoRXZlbnQ6KDo6V2ViRXZlbnQgKilldmVudAogewotICAgIGlmIChfc3RhdGUgIT0gV2Vi
S2l0OjpLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yU3RhdGU6OldhaXRpbmdGb3JGaXJzdEV2ZW50
KQotICAgICAgICByZXR1cm4gTk87Ci0gICAgCiAgICAgaWYgKGV2ZW50LnR5cGUgIT0gV2ViRXZl
bnRLZXlEb3duKQogICAgICAgICByZXR1cm4gTk87CiAKLSAgICBhdXRvIG9mZnNldCA9IFtzZWxm
IF9zY3JvbGxPZmZzZXRGb3JFdmVudDpldmVudF07Ci0gICAgaWYgKCFvZmZzZXQpCisgICAgYXV0
byBzY3JvbGwgPSBbc2VsZiBrZXlib2FyZFNjcm9sbEZvckV2ZW50OmV2ZW50XTsKKyAgICBpZiAo
IXNjcm9sbCkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgaWYgKF9oYXNQcmVzc2VkU2Nyb2xs
aW5nS2V5KQogICAgICAgICByZXR1cm4gTk87CiAKLSAgICBfc3RhdGUgPSBXZWJLaXQ6OktleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3JTdGF0ZTo6V2FpdGluZ0ZvclJlcGVhdDsKLSAgICBfc2Nyb2xs
T2Zmc2V0UGVySW5jcmVtZW50ID0gb2Zmc2V0LnZhbHVlKCk7CisgICAgaWYgKCFbX3Njcm9sbGFi
bGUgcnViYmVyYmFuZGFibGVEaXJlY3Rpb25zXS5hdChib3hTaWRlKHNjcm9sbC0+ZGlyZWN0aW9u
KSkpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIF9oYXNQcmVzc2VkU2Nyb2xsaW5nS2V5ID0g
WUVTOworICAgIF9jdXJyZW50U2Nyb2xsID0gc2Nyb2xsOworCisgICAgaWYgKHNjcm9sbC0+aW5j
cmVtZW50ID09IFdlYktpdDo6U2Nyb2xsaW5nSW5jcmVtZW50OjpEb2N1bWVudCkgeworICAgICAg
ICBfdmVsb2NpdHkgPSB7IH07CisgICAgICAgIFtzZWxmIHN0b3BBbmltYXRlZFNjcm9sbF07Cisg
ICAgICAgIFtzZWxmIHN0b3BEaXNwbGF5TGlua107CisgICAgICAgIFtfc2Nyb2xsYWJsZSBzY3Jv
bGxXaXRoU2Nyb2xsVG9FeHRlbnRBbmltYXRpb25UbzpbX3Njcm9sbGFibGUgYm91bmRlZENvbnRl
bnRPZmZzZXQ6X2N1cnJlbnRQb3NpdGlvbiArIHNjcm9sbC0+b2Zmc2V0XV07CisgICAgICAgIHJl
dHVybiBZRVM7CisgICAgfQogCi0gICAgLy8gVGhlIGZpcnN0IGtleWJvYXJkIGV2ZW50IHRoYXQg
c3RhcnRzIHNjcm9sbGluZyBwZXJmb3JtcyBpdHMgb3duCi0gICAgLy8gZGlzY3JldGUgYW5pbWF0
ZWQgc2Nyb2xsLiBDb250aW51b3VzbHkgYW5pbWF0ZWQgc2Nyb2xsaW5nIHN0YXJ0cwotICAgIC8v
IHdoZW4gdGhlIGtleSByZXBlYXRzLgotICAgIFtfc2Nyb2xsYWJsZSBzY3JvbGxCeUNvbnRlbnRP
ZmZzZXQ6X3Njcm9sbE9mZnNldFBlckluY3JlbWVudCBhbmltYXRlZDpZRVNdOworICAgIFtzZWxm
IHN0YXJ0RGlzcGxheUxpbmtJZk5lZWRlZF07CisKKyAgICBfY3VycmVudFBvc2l0aW9uID0gV2Vi
Q29yZTo6RmxvYXRQb2ludChbX3Njcm9sbGFibGUgY29udGVudE9mZnNldF0pOworICAgIF92ZWxv
Y2l0eSArPSBXZWJDb3JlOjpGbG9hdFNpemUoW19zY3JvbGxhYmxlIGludGVyYWN0aXZlU2Nyb2xs
VmVsb2NpdHldKTsKKyAgICBfaWRlYWxQb3NpdGlvbkZvck1pbmltdW1UcmF2ZWwgPSBfY3VycmVu
dFBvc2l0aW9uICsgX2N1cnJlbnRTY3JvbGwtPm9mZnNldDsKIAogICAgIHJldHVybiBZRVM7CiB9
CiAKIC0gKEJPT0wpaGFuZGxlS2V5RXZlbnQ6KDo6V2ViRXZlbnQgKilldmVudAogewotICAgIGlm
IChfc3RhdGUgPT0gV2ViS2l0OjpLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yU3RhdGU6OldhaXRp
bmdGb3JGaXJzdEV2ZW50KQorICAgIGlmICghX2hhc1ByZXNzZWRTY3JvbGxpbmdLZXkpCiAgICAg
ICAgIHJldHVybiBOTzsKIAotICAgIGF1dG8gb2Zmc2V0ID0gW3NlbGYgX3Njcm9sbE9mZnNldEZv
ckV2ZW50OmV2ZW50XTsKLSAgICBpZiAoIW9mZnNldCB8fCBldmVudC50eXBlID09IFdlYkV2ZW50
S2V5VXApIHsKKyAgICBhdXRvIHNjcm9sbCA9IFtzZWxmIGtleWJvYXJkU2Nyb2xsRm9yRXZlbnQ6
ZXZlbnRdOworICAgIGlmICghc2Nyb2xsIHx8IGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlVcCkg
ewogICAgICAgICBbc2VsZiBzdG9wQW5pbWF0ZWRTY3JvbGxdOwotICAgICAgICByZXR1cm4gTk87
CisgICAgICAgIF9oYXNQcmVzc2VkU2Nyb2xsaW5nS2V5ID0gTk87CiAgICAgfQogCi0gICAgaWYg
KF9zdGF0ZSA9PSBXZWJLaXQ6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3JTdGF0ZTo6V2FpdGlu
Z0ZvclJlcGVhdCkKLSAgICAgICAgW3NlbGYgc3RhcnRBbmltYXRlZFNjcm9sbF07CisgICAgcmV0
dXJuIE5POworfQogCi0gICAgcmV0dXJuIFlFUzsKK3N0YXRpYyBXZWJDb3JlOjpGbG9hdFBvaW50
IGZhcnRoZXN0UG9pbnRJbkRpcmVjdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGEsIFdlYkNvcmU6
OkZsb2F0UG9pbnQgYiwgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQorewor
ICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVj
dGlvbjo6VXA6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFBvaW50KGEueCgpLCBzdGQ6
Om1pbihhLnkoKSwgYi55KCkpKTsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9u
OjpEb3duOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRQb2ludChhLngoKSwgc3RkOjpt
YXgoYS55KCksIGIueSgpKSk7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6
TGVmdDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UG9pbnQoc3RkOjptaW4oYS54KCks
IGIueCgpKSwgYS55KCkpOworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OlJp
Z2h0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRQb2ludChzdGQ6Om1heChhLngoKSwg
Yi54KCkpLCBhLnkoKSk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKworLSAodm9pZClzdG9wQW5pbWF0ZWRTY3JvbGwKK3sKKyAgICBpZiAo
IV9jdXJyZW50U2Nyb2xsKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEZXRlcm1pbmUgdGhl
IHNldHRsaW5nIHBvc2l0aW9uIG9mIHRoZSBzcHJpbmcsIGNvbnNlcnZpbmcgdGhlIHN5c3RlbSdz
IGN1cnJlbnQgZW5lcmd5LgorICAgIC8vIEtpbmV0aWMgPSBlbGFzdGljIHBvdGVudGlhbAorICAg
IC8vIDEvMiAqIG0gKiB2XjIgPSAxLzIgKiBrICogeF4yCisgICAgLy8geCA9IHNxcnQodl4yICog
bSAvIGspCisgICAgYXV0byBkaXNwbGFjZW1lbnRNYWduaXR1ZGVTcXVhcmVkID0gKF92ZWxvY2l0
eSAqIF92ZWxvY2l0eSkuc2NhbGVkKHNlbGYucGFyYW1ldGVycy5zcHJpbmdNYXNzIC8gc2VsZi5w
YXJhbWV0ZXJzLnNwcmluZ1N0aWZmbmVzcyk7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGRpc3Bs
YWNlbWVudCA9IHsKKyAgICAgICAgc3RkOjpjb3B5c2lnbihzcXJ0KGRpc3BsYWNlbWVudE1hZ25p
dHVkZVNxdWFyZWQud2lkdGgoKSksIF92ZWxvY2l0eS53aWR0aCgpKSwKKyAgICAgICAgc3RkOjpj
b3B5c2lnbihzcXJ0KGRpc3BsYWNlbWVudE1hZ25pdHVkZVNxdWFyZWQuaGVpZ2h0KCkpLCBfdmVs
b2NpdHkuaGVpZ2h0KCkpCisgICAgfTsKKworICAgIC8vIElmIHRoZSBzcHJpbmcgd291bGQgc2V0
dGxlIGJlZm9yZSB0aGUgbWluaW11bSB0cmF2ZWwgZGlzdGFuY2UKKyAgICAvLyBmb3IgYW4gaW5z
dGFudGFuZW91cyB0YXAsIG1vdmUgdGhlIHNldHRsaW5nIHBvc2l0aW9uIG9mIHRoZSBzcHJpbmcK
KyAgICAvLyBvdXQgdG8gdGhhdCBwb2ludC4KKyAgICBfaWRlYWxQb3NpdGlvbiA9IFtfc2Nyb2xs
YWJsZSBib3VuZGVkQ29udGVudE9mZnNldDpmYXJ0aGVzdFBvaW50SW5EaXJlY3Rpb24oX2N1cnJl
bnRQb3NpdGlvbiArIGRpc3BsYWNlbWVudCwgX2lkZWFsUG9zaXRpb25Gb3JNaW5pbXVtVHJhdmVs
LCBfY3VycmVudFNjcm9sbC0+ZGlyZWN0aW9uKV07CisKKyAgICBfY3VycmVudFNjcm9sbCA9IHN0
ZDo6bnVsbG9wdDsKIH0KIAotLSAodm9pZClzdGFydEFuaW1hdGVkU2Nyb2xsCistICh2b2lkKXN0
YXJ0RGlzcGxheUxpbmtJZk5lZWRlZAogewotICAgIEFTU0VSVCghX2Rpc3BsYXlMaW5rKTsKKyAg
ICBpZiAoX2Rpc3BsYXlMaW5rKQorICAgICAgICByZXR1cm47CiAKLSAgICBfc3RhdGUgPSBXZWJL
aXQ6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3JTdGF0ZTo6QW5pbWF0aW5nOwotICAgIF9zdGFy
dFRpbWUgPSBDQUN1cnJlbnRNZWRpYVRpbWUoKTsKICAgICBfZGlzcGxheUxpbmsgPSBbQ0FEaXNw
bGF5TGluayBkaXNwbGF5TGlua1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoZGlz
cGxheUxpbmtGaXJlZDopXTsKICAgICBbX2Rpc3BsYXlMaW5rIGFkZFRvUnVuTG9vcDpbTlNSdW5M
b29wIG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TUnVuTG9vcENvbW1vbk1vZGVzXTsKIH0KIAotLSAo
dm9pZClzdG9wQW5pbWF0ZWRTY3JvbGwKKy0gKHZvaWQpc3RvcERpc3BsYXlMaW5rCiB7Ci0gICAg
X3N0YXRlID0gV2ViS2l0OjpLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yU3RhdGU6OldhaXRpbmdG
b3JGaXJzdEV2ZW50OwogICAgIFtfZGlzcGxheUxpbmsgaW52YWxpZGF0ZV07CiAgICAgX2Rpc3Bs
YXlMaW5rID0gbmlsOwogfQogCistICh2b2lkKXdpbGxTdGFydEludGVyYWN0aXZlU2Nyb2xsCit7
CisgICAgLy8gSWYgdGhlIHVzZXIgdG91Y2hlcyB0aGUgc2NyZWVuIHRvIHN0YXJ0IGFuIGludGVy
YWN0aXZlIHNjcm9sbCwgc3RvcCBldmVyeXRoaW5nLgorICAgIF92ZWxvY2l0eSA9IHsgfTsKKyAg
ICBbc2VsZiBzdG9wQW5pbWF0ZWRTY3JvbGxdOworICAgIFtzZWxmIHN0b3BEaXNwbGF5TGlua107
Cit9CisKIC0gKHZvaWQpZGlzcGxheUxpbmtGaXJlZDooQ0FEaXNwbGF5TGluayAqKXNlbmRlcgog
ewotICAgIGNvbnN0IENGVGltZUludGVydmFsIHNlY29uZHNQZXJTY3JvbGxJbmNyZW1lbnQgPSAw
LjA1OyAvLyBTZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIGNvdmVyIG9uZSBpbmNyZW1lbnQgd2hl
biBhdCBmdWxsIHNwZWVkLgotICAgIGNvbnN0IGZsb2F0IG1heGltdW1WZWxvY2l0eSA9IDIwMDA7
IC8vIE1heGltdW0gdmVsb2NpdHkgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIEVtcGlyaWNhbGx5IGRl
dGVybWluZWQuCi0gICAgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgYWNjZWxlcmF0aW9uRHVyYXRpb24g
PSAwLjM7IC8vIER1cmF0aW9uIG9mIGFjY2VsZXJhdGlvbiBpbiBzZWNvbmRzLiBUaGlzIG1hdGNo
ZXMgVUlTY3JvbGxWaWV3LgorICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBmb3JjZTsKKyAgICBXZWJD
b3JlOjpGbG9hdFNpemUgYXhlc1RvQXBwbHlTcHJpbmcgPSB7IDEsIDEgfTsKKworICAgIGlmIChf
Y3VycmVudFNjcm9sbCkgeworICAgICAgICBhdXRvIHNjcm9sbGFibGVEaXJlY3Rpb25zID0gW19z
Y3JvbGxhYmxlIHNjcm9sbGFibGVEaXJlY3Rpb25zRnJvbU9mZnNldDpfY3VycmVudFBvc2l0aW9u
XTsKKyAgICAgICAgYXV0byBkaXJlY3Rpb24gPSBfY3VycmVudFNjcm9sbC0+ZGlyZWN0aW9uOwor
CisgICAgICAgIGlmIChzY3JvbGxhYmxlRGlyZWN0aW9ucy5hdChib3hTaWRlKGRpcmVjdGlvbikp
KSB7CisgICAgICAgICAgICAvLyBBcHBseSB0aGUgc2Nyb2xsaW5nIGZvcmNlLiBPbmx5IGFwcGx5
IHRoZSBzcHJpbmcgaW4gdGhlIHBlcnBlbmRpY3VsYXIgYXhpcywKKyAgICAgICAgICAgIC8vIG90
aGVyd2lzZSBpdCBkcmFncyBhZ2FpbnN0IHRoZSBkaXJlY3Rpb24gb2YgbW90aW9uLgorICAgICAg
ICAgICAgYXhlc1RvQXBwbHlTcHJpbmcgPSBwZXJwZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9y
KGRpcmVjdGlvbik7CisgICAgICAgICAgICBmb3JjZSA9IF9jdXJyZW50U2Nyb2xsLT5mb3JjZTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoZSBzY3JvbGwgdmlldyBjYW5ub3Qg
c2Nyb2xsIGluIHRoaXMgZGlyZWN0aW9uLCBhbmQgaXMgcnViYmVyLWJhbmRpbmcuCisgICAgICAg
ICAgICAvLyBBcHBseSBhIGNvbnN0YW50IGFuZCBzaWduaWZpY2FudCBmb3JjZTsgb3RoZXJ3aXNl
LCB0aGUgZm9yY2UgZm9yIGEKKyAgICAgICAgICAgIC8vIHNpbmdsZS1saW5lIGluY3JlbWVudCBp
cyBub3Qgc3Ryb25nIGVub3VnaCB0byBydWJiZXItYmFuZCBwZXJjZXB0aWJseS4KKyAgICAgICAg
ICAgIGZvcmNlID0gdW5pdFZlY3RvcihkaXJlY3Rpb24pLnNjYWxlZChzZWxmLnBhcmFtZXRlcnMu
cnViYmVyQmFuZEZvcmNlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlJ3ZlIHJlYWNo
ZWQgb3IgZXhjZWVkZWQgdGhlIG1heGltdW0gdmVsb2NpdHksIHN0b3AgYXBwbHlpbmcgYW55IGZv
cmNlLgorICAgICAgICAvLyBIb3dldmVyLCB3ZSB3b24ndCBsZXQgdGhlIHNwcmluZyBzbmFwLCB3
ZSdsbCBqdXN0IGtlZXAgZ29pbmcgYXQgdGhlIHNhbWUKKyAgICAgICAgLy8gdmVsb2NpdHkgdW50
aWwgdGhlIHVzZXIgcmFpc2VzIHRoZWlyIGZpbmdlciBvciB3ZSBoaXQgYW4gZWRnZS4KKyAgICAg
ICAgaWYgKGZhYnMoX3ZlbG9jaXR5LndpZHRoKCkpID49IGZhYnMoX2N1cnJlbnRTY3JvbGwtPm1h
eGltdW1WZWxvY2l0eS53aWR0aCgpKSkKKyAgICAgICAgICAgIGZvcmNlLnNldFdpZHRoKDApOwor
ICAgICAgICBpZiAoZmFicyhfdmVsb2NpdHkuaGVpZ2h0KCkpID49IGZhYnMoX2N1cnJlbnRTY3Jv
bGwtPm1heGltdW1WZWxvY2l0eS5oZWlnaHQoKSkpCisgICAgICAgICAgICBmb3JjZS5zZXRIZWln
aHQoMCk7CisgICAgfQogCi0gICAgYXV0byB2ZWxvY2l0eSA9IF9zY3JvbGxPZmZzZXRQZXJJbmNy
ZW1lbnQuc2NhbGVkKDEuIC8gc2Vjb25kc1BlclNjcm9sbEluY3JlbWVudCk7Ci0gICAgdmVsb2Np
dHkgPSB2ZWxvY2l0eS5jb25zdHJhaW5lZEJldHdlZW4oeyAtbWF4aW11bVZlbG9jaXR5LCAtbWF4
aW11bVZlbG9jaXR5IH0sIHsgbWF4aW11bVZlbG9jaXR5LCBtYXhpbXVtVmVsb2NpdHkgfSk7Cisg
ICAgV2ViQ29yZTo6RmxvYXRQb2ludCBpZGVhbFBvc2l0aW9uID0gW19zY3JvbGxhYmxlIGJvdW5k
ZWRDb250ZW50T2Zmc2V0Ol9jdXJyZW50U2Nyb2xsID8gX2N1cnJlbnRQb3NpdGlvbiA6IF9pZGVh
bFBvc2l0aW9uXTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZGlzcGxhY2VtZW50ID0gX2N1cnJl
bnRQb3NpdGlvbiAtIGlkZWFsUG9zaXRpb247CiAKKyAgICAvLyBDb21wdXRlIHRoZSBzcHJpbmcn
cyBmb3JjZSwgYW5kIGFwcGx5IGl0IGluIGFsbG93ZWQgZGlyZWN0aW9ucy4KKyAgICAvLyBGX3Nw
cmluZyA9IC1rICogeCAtIGMgKiB2CisgICAgYXV0byBzcHJpbmdGb3JjZSA9IC0gZGlzcGxhY2Vt
ZW50LnNjYWxlZChzZWxmLnBhcmFtZXRlcnMuc3ByaW5nU3RpZmZuZXNzKSAtIF92ZWxvY2l0eS5z
Y2FsZWQoc2VsZi5wYXJhbWV0ZXJzLnNwcmluZ0RhbXBpbmcpOworICAgIGZvcmNlICs9IHNwcmlu
Z0ZvcmNlICogYXhlc1RvQXBwbHlTcHJpbmc7CisKKyAgICAvLyBJbnRlZ3JhdGUgYWNjZWxlcmF0
aW9uIC0+IHZlbG9jaXR5IC0+IHBvc2l0aW9uIGZvciB0aGlzIHRpbWUgc3RlcC4KICAgICBDRlRp
bWVJbnRlcnZhbCBmcmFtZUR1cmF0aW9uID0gc2VuZGVyLnRhcmdldFRpbWVzdGFtcCAtIHNlbmRl
ci50aW1lc3RhbXA7Ci0gICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZUZyb21BbmltYXRpb25TdGFydCA9
IHNlbmRlci50aW1lc3RhbXAgLSBfc3RhcnRUaW1lOwotICAgIGZsb2F0IGFjY2VsZXJhdGlvbkZh
Y3RvciA9IFtbQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uIGZ1bmN0aW9uV2l0aE5hbWU6a0NBTWVkaWFU
aW1pbmdGdW5jdGlvbkVhc2VJbkVhc2VPdXRdIF9zb2x2ZUZvcklucHV0OnN0ZDo6bWluPENGVGlt
ZUludGVydmFsPih0aW1lRnJvbUFuaW1hdGlvblN0YXJ0LCBhY2NlbGVyYXRpb25EdXJhdGlvbikg
LyBhY2NlbGVyYXRpb25EdXJhdGlvbl07CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGFjY2VsZXJh
dGlvbiA9IGZvcmNlLnNjYWxlZCgxLiAvIHNlbGYucGFyYW1ldGVycy5zcHJpbmdNYXNzKTsKKyAg
ICBfdmVsb2NpdHkgKz0gYWNjZWxlcmF0aW9uLnNjYWxlZChmcmFtZUR1cmF0aW9uKTsKKyAgICBf
Y3VycmVudFBvc2l0aW9uICs9IF92ZWxvY2l0eS5zY2FsZWQoZnJhbWVEdXJhdGlvbik7CisKKyAg
ICBbX3Njcm9sbGFibGUgc2Nyb2xsVG9Db250ZW50T2Zmc2V0Ol9jdXJyZW50UG9zaXRpb24gYW5p
bWF0ZWQ6Tk9dOworCisgICAgLy8gSWYgd2UndmUgZWZmZWN0aXZlbHkgc3RvcHBlZCBzY3JvbGxp
bmcsIGFuZCBubyBrZXkgaXMgcHJlc3NlZCwKKyAgICAvLyBzaHV0IGRvd24gdGhlIGRpc3BsYXkg
bGluay4KKyAgICBpZiAoIV9oYXNQcmVzc2VkU2Nyb2xsaW5nS2V5ICYmIF92ZWxvY2l0eS5kaWFn
b25hbExlbmd0aFNxdWFyZWQoKSA8IDEpIHsKKyAgICAgICAgW3NlbGYgc3RvcERpc3BsYXlMaW5r
XTsKKyAgICAgICAgX3ZlbG9jaXR5ID0geyB9OworICAgIH0KK30KKworQGVuZAorCitAaW50ZXJm
YWNlIFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgKCkgPFdLS2V5Ym9hcmRTY3JvbGxhYmxl
SW50ZXJuYWw+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0tleWJvYXJkU2Nyb2xsVmlld0Fu
aW1hdG9yIHsKKyAgICBXZWFrT2JqQ1B0cjxVSVNjcm9sbFZpZXc+IF9zY3JvbGxWaWV3OworICAg
IFJldGFpblB0cjxXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I+IF9hbmltYXRvcjsKKworICAg
IEJPT0wgX2RlbGVnYXRlUmVzcG9uZHNUb0lzS2V5Ym9hcmRTY3JvbGxhYmxlOworICAgIEJPT0wg
X2RlbGVnYXRlUmVzcG9uZHNUb0Rpc3RhbmNlRm9ySW5jcmVtZW50OworICAgIEJPT0wgX2RlbGVn
YXRlUmVzcG9uZHNUb1dpbGxTY3JvbGw7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7Cisg
ICAgcmV0dXJuIG5pbDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsVmlldzoo
VUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3Njcm9sbFZpZXcgPSBz
Y3JvbGxWaWV3OworICAgIF9hbmltYXRvciA9IGFkb3B0TlMoW1tXS0tleWJvYXJkU2Nyb2xsaW5n
QW5pbWF0b3IgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYWJsZTpzZWxmXSk7CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19hbmltYXRvciBpbnZhbGlkYXRl
XTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0ZQoreworICAg
IF9zY3JvbGxWaWV3ID0gbmlsOworCisgICAgW19hbmltYXRvciBpbnZhbGlkYXRlXTsKKyAgICBf
YW5pbWF0b3IgPSBuaWw7Cit9CisKKy0gKHZvaWQpc2V0RGVsZWdhdGU6KGlkIDxXS0tleWJvYXJk
U2Nyb2xsVmlld0FuaW1hdG9yRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgX2RlbGVnYXRlID0g
ZGVsZWdhdGU7CisKKyAgICBfZGVsZWdhdGVSZXNwb25kc1RvSXNLZXlib2FyZFNjcm9sbGFibGUg
PSBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaXNTY3JvbGxhYmxlRm9y
S2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6KV07CisgICAgX2RlbGVnYXRlUmVzcG9uZHNUb0Rp
c3RhbmNlRm9ySW5jcmVtZW50ID0gW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKGtleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yOmRpc3RhbmNlRm9ySW5jcmVtZW50OildOwor
ICAgIF9kZWxlZ2F0ZVJlc3BvbmRzVG9XaWxsU2Nyb2xsID0gW19kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGtleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yV2lsbFNjcm9sbDop
XTsKK30KKworLSAodm9pZCl3aWxsU3RhcnRJbnRlcmFjdGl2ZVNjcm9sbAoreworICAgIFtfYW5p
bWF0b3Igd2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGxdOworfQorCistIChCT09MKWJlZ2luV2l0
aEV2ZW50Oig6OldlYkV2ZW50ICopZXZlbnQKK3sKKyAgICByZXR1cm4gW19hbmltYXRvciBiZWdp
bldpdGhFdmVudDpldmVudF07Cit9CisKKy0gKEJPT0wpaGFuZGxlS2V5RXZlbnQ6KDo6V2ViRXZl
bnQgKilldmVudAoreworICAgIHJldHVybiBbX2FuaW1hdG9yIGhhbmRsZUtleUV2ZW50OmV2ZW50
XTsKK30KKworLSAoQk9PTClpc0tleWJvYXJkU2Nyb2xsYWJsZQoreworICAgIGlmICghX2RlbGVn
YXRlUmVzcG9uZHNUb0lzS2V5Ym9hcmRTY3JvbGxhYmxlKQorICAgICAgICByZXR1cm4gWUVTOwor
ICAgIHJldHVybiBbX2RlbGVnYXRlIGlzU2Nyb2xsYWJsZUZvcktleWJvYXJkU2Nyb2xsVmlld0Fu
aW1hdG9yOnNlbGZdOworfQorCistIChDR0Zsb2F0KWRpc3RhbmNlRm9ySW5jcmVtZW50OihXZWJL
aXQ6OlNjcm9sbGluZ0luY3JlbWVudClpbmNyZW1lbnQKK3sKKyAgICBhdXRvIHNjcm9sbFZpZXcg
PSBfc2Nyb2xsVmlldy5nZXRBdXRvcmVsZWFzZWQoKTsKKyAgICBpZiAoIXNjcm9sbFZpZXcpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgQ0dGbG9hdCBkZWZhdWx0UGFnZVNjcm9sbEZy
YWN0aW9uID0gMC44OworICAgIGNvbnN0IENHRmxvYXQgZGVmYXVsdExpbmVTY3JvbGxIZWlnaHQg
PSA0MDsKKworICAgIGlmICghX2RlbGVnYXRlUmVzcG9uZHNUb0Rpc3RhbmNlRm9ySW5jcmVtZW50
KSB7CisgICAgICAgIHN3aXRjaCAoaW5jcmVtZW50KSB7CisgICAgICAgIGNhc2UgV2ViS2l0OjpT
Y3JvbGxpbmdJbmNyZW1lbnQ6OkRvY3VtZW50OgorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbFZp
ZXcuY29udGVudFNpemUuaGVpZ2h0OworICAgICAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nSW5j
cmVtZW50OjpQYWdlOgorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbFZpZXcuZnJhbWUuc2l6ZS5o
ZWlnaHQgKiBkZWZhdWx0UGFnZVNjcm9sbEZyYWN0aW9uOworICAgICAgICBjYXNlIFdlYktpdDo6
U2Nyb2xsaW5nSW5jcmVtZW50OjpMaW5lOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRMaW5l
U2Nyb2xsSGVpZ2h0ICogc2Nyb2xsVmlldy56b29tU2NhbGU7CisgICAgICAgIH0KKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJl
dHVybiBbX2RlbGVnYXRlIGtleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yOnNlbGYgZGlzdGFuY2VG
b3JJbmNyZW1lbnQ6aW5jcmVtZW50XTsKK30KKworLSAodm9pZClzY3JvbGxUb0NvbnRlbnRPZmZz
ZXQ6KFdlYkNvcmU6OkZsb2F0UG9pbnQpY29udGVudE9mZnNldERlbHRhIGFuaW1hdGVkOihCT09M
KWFuaW1hdGVkCit7CisgICAgYXV0byBzY3JvbGxWaWV3ID0gX3Njcm9sbFZpZXcuZ2V0QXV0b3Jl
bGVhc2VkKCk7CisgICAgaWYgKCFzY3JvbGxWaWV3KQorICAgICAgICByZXR1cm47CisgICAgaWYg
KF9kZWxlZ2F0ZVJlc3BvbmRzVG9XaWxsU2Nyb2xsKQorICAgICAgICBbX2RlbGVnYXRlIGtleWJv
YXJkU2Nyb2xsVmlld0FuaW1hdG9yV2lsbFNjcm9sbDpzZWxmXTsKKyAgICBbc2Nyb2xsVmlldyBz
ZXRDb250ZW50T2Zmc2V0OmNvbnRlbnRPZmZzZXREZWx0YSBhbmltYXRlZDphbmltYXRlZF07Cit9
CisKKy0gKHZvaWQpc2Nyb2xsV2l0aFNjcm9sbFRvRXh0ZW50QW5pbWF0aW9uVG86KENHUG9pbnQp
b2Zmc2V0Cit7CisgICAgYXV0byBzY3JvbGxWaWV3ID0gX3Njcm9sbFZpZXcuZ2V0QXV0b3JlbGVh
c2VkKCk7CisgICAgW3Njcm9sbFZpZXcgX3NldENvbnRlbnRPZmZzZXRXaXRoRGVjZWxlcmF0aW9u
QW5pbWF0aW9uOm9mZnNldF07Cit9CisKKy0gKENHUG9pbnQpY29udGVudE9mZnNldAoreworICAg
IGF1dG8gc2Nyb2xsVmlldyA9IF9zY3JvbGxWaWV3LmdldEF1dG9yZWxlYXNlZCgpOworICAgIGlm
ICghc2Nyb2xsVmlldykKKyAgICAgICAgcmV0dXJuIENHUG9pbnRaZXJvOworCisgICAgcmV0dXJu
IFtzY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOworfQorCistIChDR1BvaW50KWJvdW5kZWRDb250
ZW50T2Zmc2V0OihDR1BvaW50KW9mZnNldAoreworICAgIGF1dG8gc2Nyb2xsVmlldyA9IF9zY3Jv
bGxWaWV3LmdldEF1dG9yZWxlYXNlZCgpOworICAgIGlmICghc2Nyb2xsVmlldykKKyAgICAgICAg
cmV0dXJuIENHUG9pbnRaZXJvOworCisgICAgcmV0dXJuIFtzY3JvbGxWaWV3IF9hZGp1c3RlZENv
bnRlbnRPZmZzZXRGb3JDb250ZW50T2Zmc2V0Om9mZnNldF07Cit9CisKKy0gKENHU2l6ZSlpbnRl
cmFjdGl2ZVNjcm9sbFZlbG9jaXR5Cit7CisgICAgYXV0byBzY3JvbGxWaWV3ID0gX3Njcm9sbFZp
ZXcuZ2V0QXV0b3JlbGVhc2VkKCk7CisgICAgaWYgKCFzY3JvbGxWaWV3KQorICAgICAgICByZXR1
cm4gQ0dTaXplWmVybzsKKworICAgIGNvbnN0IE5TVGltZUludGVydmFsIG1pbGxpc2Vjb25kc1Bl
clNlY29uZCA9IDEwMDA7CisgICAgcmV0dXJuIENHU2l6ZU1ha2Uoc2Nyb2xsVmlldy5faG9yaXpv
bnRhbFZlbG9jaXR5ICogbWlsbGlzZWNvbmRzUGVyU2Vjb25kLCBzY3JvbGxWaWV3Ll92ZXJ0aWNh
bFZlbG9jaXR5ICogbWlsbGlzZWNvbmRzUGVyU2Vjb25kKTsKK30KKworLSAoV2ViQ29yZTo6UmVj
dEVkZ2VzPGJvb2w+KXNjcm9sbGFibGVEaXJlY3Rpb25zRnJvbU9mZnNldDooQ0dQb2ludClvZmZz
ZXQKK3sKKyAgICBhdXRvIHNjcm9sbFZpZXcgPSBfc2Nyb2xsVmlldy5nZXRBdXRvcmVsZWFzZWQo
KTsKKyAgICBpZiAoIXNjcm9sbFZpZXcpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBVSUVk
Z2VJbnNldHMgY29udGVudEluc2V0cyA9IHNjcm9sbFZpZXcuYWRqdXN0ZWRDb250ZW50SW5zZXQ7
CisKKyAgICBDR1NpemUgY29udGVudFNpemUgPSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplOworICAg
IENHU2l6ZSBzY3JvbGxWaWV3U2l6ZSA9IHNjcm9sbFZpZXcuYm91bmRzLnNpemU7CisKKyAgICBD
R1BvaW50IG1pbmltdW1Db250ZW50T2Zmc2V0ID0gQ0dQb2ludE1ha2UoLWNvbnRlbnRJbnNldHMu
bGVmdCwgLWNvbnRlbnRJbnNldHMudG9wKTsKKyAgICBDR1BvaW50IG1heGltdW1Db250ZW50T2Zm
c2V0ID0gQ0dQb2ludE1ha2Uoc3RkOjptYXgobWluaW11bUNvbnRlbnRPZmZzZXQueCwgY29udGVu
dFNpemUud2lkdGggKyBjb250ZW50SW5zZXRzLnJpZ2h0IC0gc2Nyb2xsVmlld1NpemUud2lkdGgp
LCBzdGQ6Om1heChtaW5pbXVtQ29udGVudE9mZnNldC55LCBjb250ZW50U2l6ZS5oZWlnaHQgKyBj
b250ZW50SW5zZXRzLmJvdHRvbSAtIHNjcm9sbFZpZXdTaXplLmhlaWdodCkpOworCisgICAgV2Vi
Q29yZTo6UmVjdEVkZ2VzPGJvb2w+IGVkZ2VzOworCisgICAgZWRnZXMuc2V0VG9wKG9mZnNldC55
ID4gbWluaW11bUNvbnRlbnRPZmZzZXQueSk7CisgICAgZWRnZXMuc2V0Qm90dG9tKG9mZnNldC55
IDwgbWF4aW11bUNvbnRlbnRPZmZzZXQueSk7CisgICAgZWRnZXMuc2V0TGVmdChvZmZzZXQueCA+
IG1pbmltdW1Db250ZW50T2Zmc2V0LngpOworICAgIGVkZ2VzLnNldFJpZ2h0KG9mZnNldC54IDwg
bWF4aW11bUNvbnRlbnRPZmZzZXQueCk7CisKKyAgICByZXR1cm4gZWRnZXM7Cit9CisKKy0gKFdl
YkNvcmU6OlJlY3RFZGdlczxib29sPilydWJiZXJiYW5kYWJsZURpcmVjdGlvbnMKK3sKKyAgICBh
dXRvIHNjcm9sbFZpZXcgPSBfc2Nyb2xsVmlldy5nZXRBdXRvcmVsZWFzZWQoKTsKKyAgICBpZiAo
IXNjcm9sbFZpZXcpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBXZWJDb3JlOjpSZWN0RWRn
ZXM8Ym9vbD4gZWRnZXM7CisKKyAgICBlZGdlcy5zZXRUb3Aoc2Nyb2xsVmlldy5fY2FuU2Nyb2xs
WSk7CisgICAgZWRnZXMuc2V0Qm90dG9tKGVkZ2VzLnRvcCgpKTsKKyAgICBlZGdlcy5zZXRMZWZ0
KHNjcm9sbFZpZXcuX2NhblNjcm9sbFgpOworICAgIGVkZ2VzLnNldFJpZ2h0KGVkZ2VzLmxlZnQo
KSk7CiAKLSAgICBhdXRvIGNvbnRlbnRPZmZzZXQgPSB2ZWxvY2l0eS5zY2FsZWQoYWNjZWxlcmF0
aW9uRmFjdG9yICogZnJhbWVEdXJhdGlvbik7Ci0gICAgW19zY3JvbGxhYmxlIHNjcm9sbEJ5Q29u
dGVudE9mZnNldDpjb250ZW50T2Zmc2V0IGFuaW1hdGVkOk5PXTsKKyAgICByZXR1cm4gZWRnZXM7
CiB9CiAKIEBlbmQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351806</attachid>
            <date>2018-10-08 12:49:28 -0700</date>
            <delta_ts>2018-10-08 13:18:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190345-20181008124927.patch</filename>
            <type>text/plain</type>
            <size>44468</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2NjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZjMGRhNTUyYmIwYmNkOGMz
MzNhMzgxNWU1ZGRjNWVmN2E1OTVjZWQuLjg0ZTEwNDNiNjU1NDg3MjZiZDcwYmM3ZDAwYTMzODk4
ODRiN2MwODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ1IEBACisyMDE4LTEwLTA4ICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkanVzdCBrZXlib2Fy
ZCBzY3JvbGxpbmcgYW5pbWF0b3IgdG8gc3ByaW5neSBhbmQgc2VtaXBoeXNpY2FsCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTAzNDUKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzQzNDk0MzkzPgorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZy
YXNlci4KKworICAgICAgICBJbnRyb2R1Y2UgV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciwg
d2hpY2ggd3JhcHMgV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yCisgICAgICAgIGFuZCBwcm92
aWRlcyBhIHJlYXNvbmFibGUgc2V0IG9mIGRlZmF1bHQgYmVoYXZpb3JzIGZvciBVSVNjcm9sbFZp
ZXcuCisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgb24gdGhlIHdheSB0byBXS0tleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IKKyAgICAgICAgYmVpbmcgcGxhdGZvcm0tIGFuZCB0b29sa2l0
LWFnbm9zdGljLCBhbmQgaGVscHMgYXZvaWQgYWRkaW5nIGEgd2hvbGUKKyAgICAgICAgYnVuY2gg
b2YgY29kZSB0byBXS0NvbnRlbnRWaWV3LgorCisgICAgICAgIEFkb3B0IFVJS2l0J3Mgc2Nyb2xs
LXRvLXRvcCBhbmltYXRpb24gY3VydmUgZm9yIHdob2xlLWRvY3VtZW50IHNjcm9sbHMuCisKKyAg
ICAgICAgQWRqdXN0IFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcidzIHBoeXNpY3M7IGl0IG5v
dyBzaW11bGF0ZXMgYSBzcHJpbmcKKyAgICAgICAgYXR0YWNoZWQgdG8gdGhlIHBhZ2Ugd2hlbiBk
ZWNlbGVyYXRpbmcuIFdoZW4gYSBrZXkgaXMgcHJlc3NlZCwgaXQgYXBwbGllcworICAgICAgICBh
IGNvbnN0YW50IGZvcmNlIHRvIHRoZSBwYWdlICh1cCB0byBzb21lIG1heGltdW0gdmVsb2NpdHkp
LiBXaGVuIHJlbGVhc2VkLAorICAgICAgICB0aGUgc3ByaW5nIGNhdXNlcyB0aGUgcGFnZSB0byBk
ZWNlbGVyYXRlIHNtb290aGx5LgorCisgICAgICAgIEFkZCBydWJiZXItYmFuZGluZyB0byBrZXli
b2FyZCBzY3JvbGxpbmcsIGJhc2VkIG9uIHRoZSBzYW1lIHNwcmluZyB0aGF0CisgICAgICAgIGRl
Y2VsZXJhdGVzIHRoZSBwYWdlLgorCisgICAgICAgIFJlbW92ZSB0aGUgaW5pdGlhbCBib3VuY2Ug
b24ga2V5ZG93biBiZWZvcmUgc3RhcnRpbmcgdGhlIHNtb290aCBzY3JvbGwuCisKKyAgICAgICAg
UmVtb3ZlIGFycm93IGtleSBjb21tYW5kcyBmcm9tIFdLQ29udGVudFZpZXc7IHRoaXMgYXZvaWRz
IGRvdWJsZS1wcm9jZXNzaW5nCisgICAgICAgIGluY29taW5nIGFycm93IGtleSBldmVudHMsIG1h
a2VzIHRoZSBldmVudCBzdHJlYW0gbWFrZSBtb3JlIHNlbnNlLCBhbmQgd2FzCisgICAgICAgIGVu
dGlyZWx5IHVubmVjZXNzYXJ5LgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQ
SS5oOgorICAgICAgICBBZGQgYSB3aWRlIHZhcmlldHkgb2YgdXNlZnVsIFNQSS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgUmVtb3ZlIF9zY3JvbGxC
eUNvbnRlbnRPZmZzZXQ6YW5pbWF0ZWQ6IGJlY2F1c2UgaXQncyBvbmx5IHVzZWQgYnkKKyAgICAg
ICAgdGhlIGtleWJvYXJkIHNjcm9sbGluZyBtZWNoYW5pc20uCisKKyAgICAgICAgUmVtb3ZlIF9h
cnJvd0tleSBiZWNhdXNlIHdlJ3JlIHJlbW92aW5nIHRoZSBhcnJvdyBrZXkgY29tbWFuZHMuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IHNldHVwSW50ZXJhY3Rpb25dKToKKyAgICAgICAgQ3JlYXRlIGEg
V0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciAod2hpY2gga25vd3MgaG93IHRvIGRpcmVjdGx5
CisgICAgICAgIG1hbmlwdWxhdGUgYSBVSVNjcm9sbFZpZXcpIGluc3RlYWQgb2YgYSBXS0tleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IKKyAgICAgICAgKHdoaWNoIHJlcXVpcmVzIGl0cyBjbGllbnRz
IHRvIGltcGxlbWVudCBldmVyeXRoaW5nIGluIHRlcm1zIG9mIGFuCisgICAgICAgIGFic3RyYWN0
IGludGVyZmFjZS4KKworICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNjcm9sbFZpZXdXaWxsU3Rh
cnRQYW5PclBpbmNoR2VzdHVyZV0pOgorICAgICAgICBJbmZvcm0gdGhlIGtleWJvYXJkIHNjcm9s
bGluZyBhbmltYXRvciB0aGF0IHRoZSB1c2VyIGlzIGdvaW5nIHRvIHN0YXJ0CisgICAgICAgIGFu
IGludGVyYWN0aXZlIGdlc3R1cmUgdGhhdCBuZWVkcyBjb250cm9sIG9mIHRoZSBzY3JvbGwgdmll
dywgc28gaXQKKyAgICAgICAgY2FuIHN0b3AgaXRzIGN1cnJlbnQgYW5pbWF0ZWQgc2Nyb2xsLgor
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2FuUGVyZm9ybUFjdGlvbkZvcldlYlZpZXc6d2l0
aFNlbmRlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBrZXlDb21tYW5kc10pOgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hcnJvd0tleUZvcldlYlZpZXc6XSk6IERlbGV0ZWQuCisg
ICAgICAgIFJlbW92ZSBhcnJvdyBrZXkgY29tbWFuZHMuCisKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBrZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvcjpkaXN0YW5jZUZvckluY3JlbWVudDpdKToK
KyAgICAgICAgU2NhbGUgZnJvbSBjb250ZW50IHRvIFdLV2ViVmlldyBjb29yZGluYXRlIHNwYWNl
OyB0aGUga2V5Ym9hcmQgc2Nyb2xsaW5nCisgICAgICAgIGFuaW1hdG9yIG9wZXJhdGVzIGluIFdL
V2ViVmlldyBjb29yZGluYXRlcy4gVGhpcyB3YXMgYnJva2VuIGJlZm9yZS4KKworICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGtleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yV2lsbFNjcm9sbDpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpc1Njcm9sbGFibGVGb3JLZXlib2FyZFNjcm9sbFZp
ZXdBbmltYXRvcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpc0tleWJvYXJkU2Nyb2xs
YWJsZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRpc3RhbmNlRm9yU2Ny
b2xsaW5nSW5jcmVtZW50Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNj
cm9sbEJ5Q29udGVudE9mZnNldDphbmltYXRlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgUmVpbXBs
ZW1lbnQgdGhlc2UgYXMga2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgZGVsZWdhdGUgbWV0aG9k
cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9y
Lmg6CisgICAgICAgIEFkZCBXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yLCBoaWRlIHRoZSBp
bnRlcmZhY2UgZm9yCisgICAgICAgIFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciBpdHNlbGYg
aW4gdGhlIGltcGxlbWVudGF0aW9uIGZpbGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dL
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yIGluaXRXaXRoU2Nyb2xsYWJsZTpdKToKKyAgICAgICAgKC1bV0tLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yIHBhcmFtZXRlcnNdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNj
cm9sbGluZ0FuaW1hdG9yIGludmFsaWRhdGVdKToKKyAgICAgICAgKHVuaXRWZWN0b3IpOgorICAg
ICAgICBSZXR1cm4gYSB1bml0IHZlY3RvciBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorCisgICAg
ICAgIChwZXJwZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9yKToKKyAgICAgICAgUmV0dXJuIGEg
cG9zaXRpdmUgdW5pdCB2ZWN0b3IgcGVycGVuZGljdWxhciB0byB0aGUgYXhpcyBvZiB0aGUgZ2l2
ZW4gZGlyZWN0aW9uLgorICAgICAgICBVc2VmdWwgZm9yIG11bHRpcGx5aW5nIHdpdGggYW5vdGhl
ciB2ZWN0b3IgdG8gcmVtb3ZlIHRoZSBjb21wb25lbnQgaW4gdGhlCisgICAgICAgIGF4aXMgb2Yg
dGhlIGdpdmVuIGRpcmVjdGlvbi4KKworICAgICAgICAoYm94U2lkZSk6CisgICAgICAgIENvbnZl
cnQgU2Nyb2xsaW5nRGlyZWN0aW9uIHRvIFdlYkNvcmU6OlBoeXNpY2FsQm94U2lkZSwgZm9yIHVz
ZSB3aXRoIFJlY3RFZGdlcy4KKworICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3Iga2V5Ym9hcmRTY3JvbGxGb3JFdmVudDpdKToKKyAgICAgICAgSW5zdGVhZCBvZiBqdXN0IHJl
dHVybmluZyB0aGUgZGVzaXJlZCBpbmNyZW1lbnQsIGNvbXB1dGUgZXZlcnl0aGluZyB3ZSdsbCBu
ZWVkCisgICAgICAgIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHNjcm9sbCAoaW5jbHVkaW5nIHRo
ZSBmb3JjZSBhcHBsaWVkLCBtYXhpbXVtCisgICAgICAgIHZlbG9jaXR5LCBldGMuKSBhbmQgcmV0
dXJuIHRoZW0gdG9nZXRoZXIuCisKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yIGJlZ2luV2l0aEV2ZW50Ol0pOgorICAgICAgICBVc2UgdGhlIHNjcm9sbGFibGUncyBuYXRp
dmUgc2Nyb2xsLXRvLWV4dGVudCBhbmltYXRpb24gKGUuZy4gVUlTY3JvbGxWaWV3J3MKKyAgICAg
ICAgc2Nyb2xsLXRvLXRvcCBjdXJ2ZSkgZm9yIHdob2xlLWRvY3VtZW50IHNjcm9sbHMuCisKKyAg
ICAgICAgUmVtb3ZlIHRoZSBmaXJzdCBkaXNjcmV0ZSBzY3JvbGw7IHN0YXJ0IHRoZSBzbW9vdGgg
c2Nyb2xsIGltbWVkaWF0ZWx5LgorCisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvciBoYW5kbGVLZXlFdmVudDpdKToKKyAgICAgICAgKGZhcnRoZXN0UG9pbnRJbkRpcmVjdGlv
bik6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciBzdG9wQW5pbWF0ZWRT
Y3JvbGxdKToKKyAgICAgICAgU3RvcCB0aGUgY3VycmVudCBzY3JvbGwuIExldCB0aGUgc3ByaW5n
IGNvYXN0IHRvIGl0cyBuYXR1cmFsIHN0b3BwaW5nCisgICAgICAgIHBvaW50IGdpdmVuIHRoZSBz
eXN0ZW0ncyBjdXJyZW50IGVuZXJneSwgdW5sZXNzIHRoYXQgc3RvcHBpbmcgcG9pbnQgaXMKKyAg
ICAgICAgbGVzcyB0aGFuIG9uZSBpbmNyZW1lbnQgZnJvbSB0aGUgc3RhcnRpbmcgcG9pbnQuIElu
IHRoYXQgY2FzZSwgd2UgYXR0YWNoCisgICAgICAgIHRoZSBzcHJpbmcgdG8gL3RoYXQvIHBvaW50
IGFuZCBsZXQgaXQgcnVuLgorCisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRv
ciBzdGFydERpc3BsYXlMaW5rSWZOZWVkZWRdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yIHN0b3BEaXNwbGF5TGlua10pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0b3Igd2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGxdKToKKyAgICAgICAgSW1t
ZWRpYXRlbHkgc3RvcCBhbGwgbW90aW9uIGlmIHRoZSB1c2VyIHRvdWNoZXMgdGhlIHNjcmVlbiB0
byBzY3JvbGwKKyAgICAgICAgb3Igem9vbSB3aXRoIGZpbmdlcnMuCisKKyAgICAgICAgKC1bV0tL
ZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIGRpc3BsYXlMaW5rRmlyZWQ6XSk6CisgICAgICAgIFVw
ZGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIHNjcm9sbGFibGUgYmFzZWQgb24gdGhlIGFwcGxpZWQg
Zm9yY2UgYW5kIHNwcmluZy4KKyAgICAgICAgU2VlIHRoZSBjb21tZW50cyBpbiB0aGlzIGZ1bmN0
aW9uIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvciBpbml0XSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
aW5pdFdpdGhTY3JvbGxWaWV3Ol0pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0Fu
aW1hdG9yIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRv
ciBpbnZhbGlkYXRlXSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
c2V0RGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3Ig
d2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGxdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9s
bFZpZXdBbmltYXRvciBiZWdpbldpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNj
cm9sbFZpZXdBbmltYXRvciBoYW5kbGVLZXlFdmVudDpdKToKKyAgICAgICAgKC1bV0tLZXlib2Fy
ZFNjcm9sbFZpZXdBbmltYXRvciBpc0tleWJvYXJkU2Nyb2xsYWJsZV0pOgorICAgICAgICAoLVtX
S0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIGRpc3RhbmNlRm9ySW5jcmVtZW50Ol0pOgorICAg
ICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIHNjcm9sbFRvQ29udGVudE9mZnNl
dDphbmltYXRlZDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciBz
Y3JvbGxXaXRoU2Nyb2xsVG9FeHRlbnRBbmltYXRpb25UbzpdKToKKyAgICAgICAgKC1bV0tLZXli
b2FyZFNjcm9sbFZpZXdBbmltYXRvciBjb250ZW50T2Zmc2V0XSk6CisgICAgICAgICgtW1dLS2V5
Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgYm91bmRlZENvbnRlbnRPZmZzZXQ6XSk6CisgICAgICAg
ICgtW1dLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgaW50ZXJhY3RpdmVTY3JvbGxWZWxvY2l0
eV0pOgorICAgICAgICAoLVtXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yIHNjcm9sbGFibGVE
aXJlY3Rpb25zRnJvbU9mZnNldDpdKToKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvciBydWJiZXJiYW5kYWJsZURpcmVjdGlvbnNdKToKKyAgICAgICAgQWRkIFdLS2V5Ym9h
cmRTY3JvbGxWaWV3QW5pbWF0b3IsIHdoaWNoIHdyYXBzIFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvcgorICAgICAgICBhbmQgcHJvdmlkZXMgYW5pbWF0ZWQga2V5Ym9hcmQgc2Nyb2xsaW5nIGZv
ciBhIFVJU2Nyb2xsVmlldyB3aXRob3V0IG11Y2gKKyAgICAgICAgYWRkaXRpb25hbCBwbHVtYmlu
ZyB3b3JrLiBJdCBjb250YWlucyByZWFzb25hYmxlIGRlZmF1bHQgYmVoYXZpb3JzLAorICAgICAg
ICB3aXRoIGEgZmV3IG9wdGlvbmFsIGRlbGVnYXRlIG1ldGhvZHMgZm9yIGN1c3RvbWl6YXRpb24u
CisKKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIF9zY3JvbGxPZmZzZXRG
b3JFdmVudDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yIHN0YXJ0QW5pbWF0ZWRTY3JvbGxdKTogRGVsZXRlZC4KKwogMjAxOC0wOS0yOSAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjIzNjYzMS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
c3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0
U1BJLmgKaW5kZXggYWFlY2EwZWZjYjUzODQzOThmODE5Y2NmZWFkNTg2N2IxNzIzNzQxMC4uMDVl
ZWQ4ZWFhMmJjYjdmNGUwODhkMTI0ODVkN2ZhOTYzNmMyNDllMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTMyOCw2ICszMjgsOCBAQCB0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBVSVNjcm9sbFZpZXdJbmRpY2F0b3JJbnNldEFkanVzdG1lbnRCZWhh
dmlvcikgewogLSAodm9pZClfc3RvcFNjcm9sbGluZ0FuZFpvb21pbmdBbmltYXRpb25zOwogLSAo
dm9pZClfem9vbVRvQ2VudGVyOihDR1BvaW50KWNlbnRlciBzY2FsZTooQ0dGbG9hdClzY2FsZSBk
dXJhdGlvbjooQ0ZUaW1lSW50ZXJ2YWwpZHVyYXRpb24gZm9yY2U6KEJPT0wpZm9yY2U7CiAtICh2
b2lkKV96b29tVG9DZW50ZXI6KENHUG9pbnQpY2VudGVyIHNjYWxlOihDR0Zsb2F0KXNjYWxlIGR1
cmF0aW9uOihDRlRpbWVJbnRlcnZhbClkdXJhdGlvbjsKKy0gKGRvdWJsZSlfaG9yaXpvbnRhbFZl
bG9jaXR5OworLSAoZG91YmxlKV92ZXJ0aWNhbFZlbG9jaXR5OwogQHByb3BlcnR5IChub25hdG9t
aWMsIGdldHRlcj1pc1pvb21FbmFibGVkKSBCT09MIHpvb21FbmFibGVkOwogQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9X2lzQW5pbWF0aW5nWm9vbSkgQk9PTCBpc0FuaW1h
dGluZ1pvb207CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1faXNBbmlt
YXRpbmdTY3JvbGwpIEJPT0wgaXNBbmltYXRpbmdTY3JvbGw7CkBAIC00OTEsNiArNDkzLDcgQEAg
dHlwZWRlZiBOU19FTlVNIChOU0ludGVnZXIsIF9VSUJhY2tkcm9wTWFza1ZpZXdGbGFncykgewog
QHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0Q29udGludW91c0Nvcm5lclJhZGl1czop
IENHRmxvYXQgX2NvbnRpbnVvdXNDb3JuZXJSYWRpdXM7CiAtICh2b2lkKWluc2VydFN1YnZpZXc6
KFVJVmlldyAqKXZpZXcgYWJvdmU6KFVJVmlldyAqKXNpYmxpbmc7CiAtICh2b2lkKXZpZXdXaWxs
TW92ZVRvU3VwZXJ2aWV3OihVSVZpZXcgKiluZXdTdXBlcnZpZXc7CistIChDR1NpemUpY29udmVy
dFNpemU6KENHU2l6ZSlzaXplIHRvVmlldzooVUlWaWV3ICopdmlldzsKIEBlbmQKIAogQGludGVy
ZmFjZSBVSVdlYlNlbGVjdGlvblZpZXcgOiBVSVZpZXcKQEAgLTEwMjIsNiArMTAyNSwxMCBAQCB0
eXBlZGVmIE5TSW50ZWdlciBVSUNvbXBvc2l0aW5nTW9kZTsKIC0gKHZvaWQpX2FkanVzdEZvckF1
dG9tYXRpY0tleWJvYXJkSW5mbzooTlNEaWN0aW9uYXJ5ICopaW5mbyBhbmltYXRlZDooQk9PTClh
bmltYXRlZCBsYXN0QWRqdXN0bWVudDooQ0dGbG9hdCopbGFzdEFkanVzdG1lbnQ7CiAtIChCT09M
KV9pc1Njcm9sbGluZ1RvVG9wOwogLSAoQ0dQb2ludClfYW5pbWF0ZWRUYXJnZXRPZmZzZXQ7Cist
IChCT09MKV9jYW5TY3JvbGxYOworLSAoQk9PTClfY2FuU2Nyb2xsWTsKKy0gKHZvaWQpX3NldENv
bnRlbnRPZmZzZXRXaXRoRGVjZWxlcmF0aW9uQW5pbWF0aW9uOihDR1BvaW50KWNvbnRlbnRPZmZz
ZXQ7CistIChDR1BvaW50KV9hZGp1c3RlZENvbnRlbnRPZmZzZXRGb3JDb250ZW50T2Zmc2V0OihD
R1BvaW50KWNvbnRlbnRPZmZzZXQ7CiBAZW5kCiAKIEBpbnRlcmZhY2UgVUlQZXJpcGhlcmFsSG9z
dCAoSVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW0KaW5kZXggODc5ZjkzMjU5YzZkMzE5MmIzNjQ2NmNlNmFiYjUwZDUzZjVhNjQxYy4uNDM5MWNh
YjM0MzA1ODY4OGFiYzMzYTllOGNjYzNhMThiZGFjZTQ0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0yMTI5LDI0ICsyMTI5LDYgQEAg
LSAoQk9PTClfc2Nyb2xsVG9SZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCBvcmln
aW46KFdlYkNvcmU6OkZsb2F0UG9pbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLSAodm9pZClf
c2Nyb2xsQnlDb250ZW50T2Zmc2V0OihXZWJDb3JlOjpGbG9hdFBvaW50KWNvbnRlbnRPZmZzZXRE
ZWx0YSBhbmltYXRlZDooQk9PTClhbmltYXRlZAotewotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQg
c2NhbGVkT2Zmc2V0RGVsdGEgPSBjb250ZW50T2Zmc2V0RGVsdGE7Ci0gICAgQ0dGbG9hdCB6b29t
U2NhbGUgPSBjb250ZW50Wm9vbVNjYWxlKHNlbGYpOwotICAgIHNjYWxlZE9mZnNldERlbHRhLnNj
YWxlKHpvb21TY2FsZSk7Ci0KLSAgICBDR1BvaW50IGN1cnJlbnRPZmZzZXQgPSBbX3Njcm9sbFZp
ZXcgX2lzQW5pbWF0aW5nU2Nyb2xsXSA/IFtfc2Nyb2xsVmlldyBfYW5pbWF0ZWRUYXJnZXRPZmZz
ZXRdIDogW19zY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOwotICAgIENHUG9pbnQgYm91bmRlZE9m
ZnNldCA9IGNvbnRlbnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKF9zY3JvbGxWaWV3LmdldCgp
LCBjdXJyZW50T2Zmc2V0ICsgc2NhbGVkT2Zmc2V0RGVsdGEpOwotCi0gICAgaWYgKENHUG9pbnRF
cXVhbFRvUG9pbnQoYm91bmRlZE9mZnNldCwgY3VycmVudE9mZnNldCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBbX2NvbnRlbnRWaWV3IHdpbGxTdGFydFpvb21PclNjcm9sbF07Ci0KLSAgICBMT0df
V0lUSF9TVFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwgIl9zY3JvbGxCeUNvbnRlbnRPZmZz
ZXQ6IHNjcm9sbGluZyB0byAiIDw8IFdlYkNvcmU6OkZsb2F0UG9pbnQoYm91bmRlZE9mZnNldCkp
OwotCi0gICAgW19zY3JvbGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6Ym91bmRlZE9mZnNldCBhbmlt
YXRlZDphbmltYXRlZF07Ci19Ci0KIC0gKHZvaWQpX3pvb21PdXRXaXRoT3JpZ2luOihXZWJDb3Jl
OjpGbG9hdFBvaW50KW9yaWdpbiBhbmltYXRlZDooQk9PTClhbmltYXRlZAogewogICAgIFtzZWxm
IF96b29tVG9Qb2ludDpvcmlnaW4gYXRTY2FsZTpbX3Njcm9sbFZpZXcgbWluaW11bVpvb21TY2Fs
ZV0gYW5pbWF0ZWQ6YW5pbWF0ZWRdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAppbmRleCBhMWEwNDU2MGMyYjA3N2Y2OTQw
N2FkOGVmZTA0ZTM2N2FiODgzMWU5Li43MTg5Y2EwZTZmYTczNGQwNTZkNTAyNjI5OWE1YWM2NGVi
N2UxYzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3SW50ZXJuYWwuaApAQCAtOTcsNyArOTcsNiBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwog
CiAtICh2b2lkKV9zY3JvbGxUb0NvbnRlbnRTY3JvbGxQb3NpdGlvbjooV2ViQ29yZTo6RmxvYXRQ
b2ludClzY3JvbGxQb3NpdGlvbiBzY3JvbGxPcmlnaW46KFdlYkNvcmU6OkludFBvaW50KXNjcm9s
bE9yaWdpbjsKIC0gKEJPT0wpX3Njcm9sbFRvUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdl
dFJlY3Qgb3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBtaW5pbXVtU2Nyb2xsRGlz
dGFuY2U6KGZsb2F0KW1pbmltdW1TY3JvbGxEaXN0YW5jZTsKLS0gKHZvaWQpX3Njcm9sbEJ5Q29u
dGVudE9mZnNldDooV2ViQ29yZTo6RmxvYXRQb2ludClvZmZzZXQgYW5pbWF0ZWQ6KEJPT0wpYW5p
bWF0ZWQ7CiAtICh2b2lkKV96b29tVG9Gb2N1c1JlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdClmb2N1
c2VkRWxlbWVudFJlY3Qgc2VsZWN0aW9uUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXNlbGVjdGlv
blJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMgaW5zaWRlRml4ZWQ6KEJPT0wpaW5zaWRlRml4ZWQg
Zm9udFNpemU6KGZsb2F0KWZvbnRTaXplIG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2Fs
ZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGUgYWxsb3dTY2FsaW5nOihCT09MKWFs
bG93U2NhbGluZyBmb3JjZVNjcm9sbDooQk9PTClmb3JjZVNjcm9sbDsKIC0gKEJPT0wpX3pvb21U
b1JlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl0YXJnZXRSZWN0IHdpdGhPcmlnaW46KFdlYkNvcmU6
OkZsb2F0UG9pbnQpb3JpZ2luIGZpdEVudGlyZVJlY3Q6KEJPT0wpZml0RW50aXJlUmVjdCBtaW5p
bXVtU2NhbGU6KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11
bVNjYWxlIG1pbmltdW1TY3JvbGxEaXN0YW5jZTooZmxvYXQpbWluaW11bVNjcm9sbERpc3RhbmNl
OwogLSAodm9pZClfem9vbU91dFdpdGhPcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2lu
IGFuaW1hdGVkOihCT09MKWFuaW1hdGVkOwpAQCAtMTM1LDcgKzEzNCw2IEBAIHN0cnVjdCBQcmlu
dEluZm87CiAtICh2b2lkKV9kaWRDaGFuZ2VFZGl0b3JTdGF0ZTsKIAogLSAodm9pZClfYWRkU2hv
cnRjdXQ6KGlkKXNlbmRlcjsKLS0gKHZvaWQpX2Fycm93S2V5OihpZClzZW5kZXI7CiAtICh2b2lk
KV9kZWZpbmU6KGlkKXNlbmRlcjsKIC0gKHZvaWQpX2xvb2t1cDooaWQpc2VuZGVyOwogLSAodm9p
ZClfc2hhcmU6KGlkKXNlbmRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRleCBhMjM5ZGU5ZGM1ZTFlYzA4NTQ2
ZWQzMWVhMzcyZDBkYzUxNDQ3YzUwLi4xY2MwOWRjNGZhNTkxNGQzMTFlZGEyN2Y4YWQyNmZiMThk
MWUyYzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5oCkBAIC0xMDYsNyArMTA2LDYgQEAgdHlwZWRlZiBzdGQ6OnBh
aXI8V2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVzdCwgSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkMKIAogI2RlZmluZSBGT1JfRUFDSF9XS0NPTlRFTlRWSUVXX0FDVElPTihNKSBcCiAg
ICAgTShfYWRkU2hvcnRjdXQpIFwKLSAgICBNKF9hcnJvd0tleSkgXAogICAgIE0oX2RlZmluZSkg
XAogICAgIE0oX2xvb2t1cCkgXAogICAgIE0oX3Byb21wdEZvclJlcGxhY2UpIFwKQEAgLTIzNSw3
ICsyMzQsNyBAQCBzdHJ1Y3QgV0tBdXRvQ29ycmVjdGlvbkRhdGEgewogICAgIAogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJLaXQ6OklucHV0Vmlld1VwZGF0ZURlZmVycmVyPiBfaW5wdXRWaWV3VXBk
YXRlRGVmZXJyZXI7CiAKLSAgICBSZXRhaW5QdHI8V0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9y
PiBfa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjsKKyAgICBSZXRhaW5QdHI8V0tLZXlib2FyZFNj
cm9sbFZpZXdBbmltYXRvcj4gX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I7CiAKICAgICBCT09M
IF9pc0VkaXRhYmxlOwogICAgIEJPT0wgX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zOwpAQCAtMjgz
LDExICsyODIsMTAgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKIAogQGVuZAogCi1A
aW50ZXJmYWNlIFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb24pIDxVSUdlc3R1cmVSZWNvZ25p
emVyRGVsZWdhdGUsIFVJVGV4dEF1dG9zY3JvbGxpbmcsIFVJVGV4dElucHV0TXVsdGlEb2N1bWVu
dCwgVUlUZXh0SW5wdXRQcml2YXRlLCBVSVdlYkZvcm1BY2Nlc3NvcnlEZWxlZ2F0ZSwgVUlXZWJU
b3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJV0tJbnRlcmFjdGlvblZpZXdQ
cm90b2NvbCwgV0tBY3Rpb25TaGVldEFzc2lzdGFudERlbGVnYXRlLCBXS0ZpbGVVcGxvYWRQYW5l
bERlbGVnYXRlCitAaW50ZXJmYWNlIFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb24pIDxVSUdl
c3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJVGV4dEF1dG9zY3JvbGxpbmcsIFVJVGV4dElucHV0
TXVsdGlEb2N1bWVudCwgVUlUZXh0SW5wdXRQcml2YXRlLCBVSVdlYkZvcm1BY2Nlc3NvcnlEZWxl
Z2F0ZSwgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJV0tJbnRl
cmFjdGlvblZpZXdQcm90b2NvbCwgV0tBY3Rpb25TaGVldEFzc2lzdGFudERlbGVnYXRlLCBXS0Zp
bGVVcGxvYWRQYW5lbERlbGVnYXRlLCBXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yRGVsZWdh
dGUKICNpZiAhUExBVEZPUk0oV0FUQ0hPUykgJiYgIVBMQVRGT1JNKEFQUExFVFYpCiAgICAgLCBX
S1NoYXJlU2hlZXREZWxlZ2F0ZQogI2VuZGlmCi0gICAgLCBXS0tleWJvYXJkU2Nyb2xsYWJsZQog
I2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQogICAgICwgVUlEcmFnSW50ZXJhY3Rpb25EZWxl
Z2F0ZSwgVUlEcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRl
eCA3ZTY0YTVlZTJjZjFiYjhkYmQ3OTliYzg0NmY3M2E0MTM1YTBhNzZkLi40OTJiYmUyODM0MTU1
MjczOThmZjczZmVjYmI0ZjQxMDEwNGY1ZGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTEyMSw3ICsx
MjEsNyBAQAogI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dLUGxhdGZvcm1GaWxlVXBsb2FkUGFu
ZWwubW0+CiAjZW5kaWYKIAotQGludGVyZmFjZSBVSUV2ZW50KFVJRXZlbnRJbnRlcm5hbCkKK0Bp
bnRlcmZhY2UgVUlFdmVudCAoVUlFdmVudEludGVybmFsKQogQHByb3BlcnR5IChub25hdG9taWMs
IGFzc2lnbikgVUlLZXlib2FyZElucHV0RmxhZ3MgX2lucHV0RmxhZ3M7CiBAZW5kCiAKQEAgLTYz
OCw3ICs2MzgsOCBAQCAtICh2b2lkKXNldHVwSW50ZXJhY3Rpb24KICAgICAgICAgW3NlbGYuc3Vw
ZXJ2aWV3IGFkZFN1YnZpZXc6X2ludGVyYWN0aW9uVmlld3NDb250YWluZXJWaWV3LmdldCgpXTsK
ICAgICB9CiAKLSAgICBfa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciA9IGFkb3B0TlMoW1tXS0tl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYWJsZTpzZWxmXSk7
CisgICAgX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgPSBhZG9wdE5TKFtbV0tLZXlib2FyZFNj
cm9sbFZpZXdBbmltYXRvciBhbGxvY10gaW5pdFdpdGhTY3JvbGxWaWV3Ol93ZWJWaWV3LnNjcm9s
bFZpZXddKTsKKyAgICBbX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Igc2V0RGVsZWdhdGU6c2Vs
Zl07CiAKICAgICBbc2VsZi5sYXllciBhZGRPYnNlcnZlcjpzZWxmIGZvcktleVBhdGg6QCJ0cmFu
c2Zvcm0iIG9wdGlvbnM6TlNLZXlWYWx1ZU9ic2VydmluZ09wdGlvbkluaXRpYWwgY29udGV4dDpu
aWxdOwogCkBAIC0yMDY4LDYgKzIwNjksOCBAQCAtICh2b2lkKXNjcm9sbFZpZXdXaWxsU3RhcnRQ
YW5PclBpbmNoR2VzdHVyZQogewogICAgIF9wYWdlLT5oaWRlVmFsaWRhdGlvbk1lc3NhZ2UoKTsK
IAorICAgIFtfa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciB3aWxsU3RhcnRJbnRlcmFjdGl2ZVNj
cm9sbF07CisKICAgICBfY2FuU2VuZFRvdWNoRXZlbnRzQXN5bmNocm9ub3VzbHkgPSBZRVM7CiB9
CiAKQEAgLTIzMTEsMTAgKzIzMTQsNyBAQCAtIChCT09MKWNhblBlcmZvcm1BY3Rpb246KFNFTClh
Y3Rpb24gd2l0aFNlbmRlcjooaWQpc2VuZGVyCiB9CiAKIC0gKEJPT0wpY2FuUGVyZm9ybUFjdGlv
bkZvcldlYlZpZXc6KFNFTClhY3Rpb24gd2l0aFNlbmRlcjooaWQpc2VuZGVyCi17Ci0gICAgaWYg
KGFjdGlvbiA9PSBAc2VsZWN0b3IoX2Fycm93S2V5OikpCi0gICAgICAgIHJldHVybiBbc2VsZiBp
c0ZpcnN0UmVzcG9uZGVyXTsKLSAgICAgICAgCit7ICAgICAgICAKICAgICBhdXRvIGVkaXRvclN0
YXRlID0gX3BhZ2UtPmVkaXRvclN0YXRlKCk7CiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Io
X3Nob3dUZXh0U3R5bGVPcHRpb25zOikpCiAgICAgICAgIHJldHVybiBlZGl0b3JTdGF0ZS5pc0Nv
bnRlbnRSaWNobHlFZGl0YWJsZSAmJiBlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc1JhbmdlICYmICFf
c2hvd2luZ1RleHRTdHlsZU9wdGlvbnM7CkBAIC0zMDkwLDQ0ICszMDkwLDE0IEBAIC0gKHZvaWQp
YWNjZXNzb3J5RG9uZQogCiAtIChOU0FycmF5ICopa2V5Q29tbWFuZHMKIHsKLSAgICBzdGF0aWMg
TlNBcnJheSogbm9uRWRpdGFibGVLZXlDb21tYW5kcyA9IFtAWwotICAgICAgIFtVSUtleUNvbW1h
bmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0VXBBcnJvdyBtb2RpZmllckZsYWdzOjAg
YWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlD
b21tYW5kV2l0aElucHV0OlVJS2V5SW5wdXREb3duQXJyb3cgbW9kaWZpZXJGbGFnczowIGFjdGlv
bjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFu
ZFdpdGhJbnB1dDpVSUtleUlucHV0TGVmdEFycm93IG1vZGlmaWVyRmxhZ3M6MCBhY3Rpb246QHNl
bGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRo
SW5wdXQ6VUlLZXlJbnB1dFJpZ2h0QXJyb3cgbW9kaWZpZXJGbGFnczowIGFjdGlvbjpAc2VsZWN0
b3IoX2Fycm93S2V5OildLAotICAgICAgIAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFu
ZFdpdGhJbnB1dDpVSUtleUlucHV0VXBBcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5TW9kaWZpZXJD
b21tYW5kIGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAgICAgIFtVSUtleUNvbW1h
bmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0RG93bkFycm93IG1vZGlmaWVyRmxhZ3M6
VUlLZXlNb2RpZmllckNvbW1hbmQgYWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAg
ICAgCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0aElucHV0OlVJS2V5SW5wdXRV
cEFycm93IG1vZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmllclNoaWZ0IGFjdGlvbjpAc2VsZWN0b3Io
X2Fycm93S2V5OildLAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpV
SUtleUlucHV0RG93bkFycm93IG1vZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmllclNoaWZ0IGFjdGlv
bjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFu
ZFdpdGhJbnB1dDpVSUtleUlucHV0TGVmdEFycm93IG1vZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmll
clNoaWZ0IGFjdGlvbjpAc2VsZWN0b3IoX2Fycm93S2V5OildLAotICAgICAgIFtVSUtleUNvbW1h
bmQga2V5Q29tbWFuZFdpdGhJbnB1dDpVSUtleUlucHV0UmlnaHRBcnJvdyBtb2RpZmllckZsYWdz
OlVJS2V5TW9kaWZpZXJTaGlmdCBhY3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAg
ICAKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dFVw
QXJyb3cgbW9kaWZpZXJGbGFnczpVSUtleU1vZGlmaWVyQWx0ZXJuYXRlIGFjdGlvbjpAc2VsZWN0
b3IoX2Fycm93S2V5OildLAotICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1
dDpVSUtleUlucHV0RG93bkFycm93IG1vZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmllckFsdGVybmF0
ZSBhY3Rpb246QHNlbGVjdG9yKF9hcnJvd0tleTopXSwKLSAgICAgICBbVUlLZXlDb21tYW5kIGtl
eUNvbW1hbmRXaXRoSW5wdXQ6VUlLZXlJbnB1dExlZnRBcnJvdyBtb2RpZmllckZsYWdzOlVJS2V5
TW9kaWZpZXJBbHRlcm5hdGUgYWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAgICAg
W1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0aElucHV0OlVJS2V5SW5wdXRSaWdodEFycm93IG1v
ZGlmaWVyRmxhZ3M6VUlLZXlNb2RpZmllckFsdGVybmF0ZSBhY3Rpb246QHNlbGVjdG9yKF9hcnJv
d0tleTopXSwKLSAgICAgICAKLSAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRoSW5w
dXQ6QCIgIiBtb2RpZmllckZsYWdzOjAgYWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0g
ICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0aElucHV0OkAiICIgbW9kaWZpZXJGbGFn
czpVSUtleU1vZGlmaWVyU2hpZnQgYWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAg
ICAgCi0gICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0aElucHV0OlVJS2V5SW5wdXRQ
YWdlRG93biBtb2RpZmllckZsYWdzOjAgYWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0g
ICAgICAgW1VJS2V5Q29tbWFuZCBrZXlDb21tYW5kV2l0aElucHV0OlVJS2V5SW5wdXRQYWdlRG93
biBtb2RpZmllckZsYWdzOjAgYWN0aW9uOkBzZWxlY3RvcihfYXJyb3dLZXk6KV0sCi0gICAgXSBy
ZXRhaW5dOworICAgIGlmICghX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUp
CisgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBzdGF0aWMgTlNBcnJheSogZWRpdGFibGVLZXlD
b21tYW5kcyA9IFtAWwogICAgICAgIFtVSUtleUNvbW1hbmQga2V5Q29tbWFuZFdpdGhJbnB1dDpA
Ilx0IiBtb2RpZmllckZsYWdzOjAgYWN0aW9uOkBzZWxlY3RvcihfbmV4dEFjY2Vzc29yeVRhYjop
XSwKICAgICAgICBbVUlLZXlDb21tYW5kIGtleUNvbW1hbmRXaXRoSW5wdXQ6QCJcdCIgbW9kaWZp
ZXJGbGFnczpVSUtleU1vZGlmaWVyU2hpZnQgYWN0aW9uOkBzZWxlY3RvcihfcHJldkFjY2Vzc29y
eVRhYjopXQogICAgIF0gcmV0YWluXTsKLSAgICAKLSAgICByZXR1cm4gKF9wYWdlLT5lZGl0b3JT
dGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlKSA/IGVkaXRhYmxlS2V5Q29tbWFuZHMgOiBub25FZGl0
YWJsZUtleUNvbW1hbmRzOwotfQotCi0tICh2b2lkKV9hcnJvd0tleUZvcldlYlZpZXc6KGlkKXNl
bmRlcgotewotICAgIFVJS2V5Q29tbWFuZCogY29tbWFuZCA9IHNlbmRlcjsKLSAgICBbc2VsZiBo
YW5kbGVLZXlFdmVudDpjb21tYW5kLl90cmlnZ2VyaW5nRXZlbnRdOworICAgIHJldHVybiBlZGl0
YWJsZUtleUNvbW1hbmRzOwogfQogCiAtICh2b2lkKV9uZXh0QWNjZXNzb3J5VGFiOihpZClzZW5k
ZXIKQEAgLTM4NjQsNyArMzgzNCw3IEBAIC0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50Oig6Oldl
YkV2ZW50ICopZXZlbnQgaXNDaGFyRXZlbnQ6KEJPT0wpaXNDaGFyRXZlbnQKICAgICByZXR1cm4g
Tk87CiB9CiAKLS0gKEJPT0wpaXNLZXlib2FyZFNjcm9sbGFibGUKKy0gKEJPT0wpaXNTY3JvbGxh
YmxlRm9yS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6KFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5p
bWF0b3IgKilhbmltYXRvcgogewogICAgIGlmIChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRl
bnRFZGl0YWJsZSkKICAgICAgICAgcmV0dXJuIE5POwpAQCAtMzg3NSwyMyArMzg0NSwyMyBAQCAt
IChCT09MKWlzS2V5Ym9hcmRTY3JvbGxhYmxlCiAgICAgcmV0dXJuIFlFUzsKIH0KIAotLSAoQ0dG
bG9hdClkaXN0YW5jZUZvclNjcm9sbGluZ0luY3JlbWVudDooU2Nyb2xsaW5nSW5jcmVtZW50KWlu
Y3JlbWVudAorLSAoQ0dGbG9hdClrZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvcjooV0tLZXlib2Fy
ZFNjcm9sbFZpZXdBbmltYXRvciAqKWFuaW1hdG9yIGRpc3RhbmNlRm9ySW5jcmVtZW50OihTY3Jv
bGxpbmdJbmNyZW1lbnQpaW5jcmVtZW50CiB7CiAgICAgc3dpdGNoIChpbmNyZW1lbnQpIHsKICAg
ICBjYXNlIFNjcm9sbGluZ0luY3JlbWVudDo6RG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiBzZWxm
LmJvdW5kcy5zaXplLmhlaWdodDsKKyAgICAgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0OnNl
bGYuYm91bmRzIHRvVmlldzpfd2ViVmlld10uc2l6ZS5oZWlnaHQ7CiAgICAgY2FzZSBTY3JvbGxp
bmdJbmNyZW1lbnQ6OlBhZ2U6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpTY3JvbGxiYXI6OnBh
Z2VTdGVwKF9wYWdlLT51bm9ic2N1cmVkQ29udGVudFJlY3QoKS5oZWlnaHQoKSwgc2VsZi5ib3Vu
ZHMuc2l6ZS5oZWlnaHQpOworICAgICAgICByZXR1cm4gW3NlbGYgY29udmVydFNpemU6Q0dTaXpl
TWFrZSgwLCBXZWJDb3JlOjpTY3JvbGxiYXI6OnBhZ2VTdGVwKF9wYWdlLT51bm9ic2N1cmVkQ29u
dGVudFJlY3QoKS5oZWlnaHQoKSwgc2VsZi5ib3VuZHMuc2l6ZS5oZWlnaHQpKSB0b1ZpZXc6X3dl
YlZpZXddLmhlaWdodDsKICAgICBjYXNlIFNjcm9sbGluZ0luY3JlbWVudDo6TGluZToKLSAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OlNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICAg
ICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRTaXplOkNHU2l6ZU1ha2UoMCwgV2ViQ29yZTo6U2Nyb2xs
YmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKSB0b1ZpZXc6X3dlYlZpZXddLmhlaWdodDsKICAgICB9
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLS0gKHZvaWQp
c2Nyb2xsQnlDb250ZW50T2Zmc2V0OihXZWJDb3JlOjpGbG9hdFBvaW50KW9mZnNldCBhbmltYXRl
ZDooQk9PTClhbmltYXRlZAorLSAodm9pZClrZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvcldpbGxT
Y3JvbGw6KFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3IgKilhbmltYXRvcgogewotICAgIFtf
d2ViVmlldyBfc2Nyb2xsQnlDb250ZW50T2Zmc2V0Om9mZnNldCBhbmltYXRlZDphbmltYXRlZF07
CisgICAgW3NlbGYgd2lsbFN0YXJ0Wm9vbU9yU2Nyb2xsXTsKIH0KIAogLSAodm9pZClleGVjdXRl
RWRpdENvbW1hbmRXaXRoQ2FsbGJhY2s6KE5TU3RyaW5nICopY29tbWFuZE5hbWUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xsaW5nQW5p
bWF0b3IuaAppbmRleCBhNTM5YWQ3MjA5OTFlMGJlYjc2NjIwOGMwMzNjNTgzZmI1NGRkZjJjLi4w
YTdmMGUxMWE2NzM3MGQ4YjVjYTdiNmI3MTZiOWE0OWZjNjZhNGI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRv
ci5oCkBAIC0zOSwyNiArMzksMzIgQEAgZW51bSBjbGFzcyBTY3JvbGxpbmdJbmNyZW1lbnQgOiB1
aW50OF90IHsKIAogfQogCitAY2xhc3MgVUlTY3JvbGxWaWV3OwogQGNsYXNzIFdlYkV2ZW50Owot
QHByb3RvY29sIFdLS2V5Ym9hcmRTY3JvbGxhYmxlOworQHByb3RvY29sIFdLS2V5Ym9hcmRTY3Jv
bGxWaWV3QW5pbWF0b3JEZWxlZ2F0ZTsKIAotQGludGVyZmFjZSBXS0tleWJvYXJkU2Nyb2xsaW5n
QW5pbWF0b3IgOiBOU09iamVjdAorQGludGVyZmFjZSBXS0tleWJvYXJkU2Nyb2xsVmlld0FuaW1h
dG9yIDogTlNPYmplY3QKIAogLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxhYmxlOihpZCA8V0tLZXlib2FyZFNjcm9sbGFi
bGU+KXNjcm9sbGFibGU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxWaWV3OihVSVNj
cm9sbFZpZXcgKilzY3JvbGxWaWV3OwogCiAtICh2b2lkKWludmFsaWRhdGU7CiAKKy0gKHZvaWQp
d2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGw7CisKIC0gKEJPT0wpYmVnaW5XaXRoRXZlbnQ6KDo6
V2ViRXZlbnQgKilldmVudDsKIC0gKEJPT0wpaGFuZGxlS2V5RXZlbnQ6KDo6V2ViRXZlbnQgKill
dmVudDsKIAorQHByb3BlcnR5IChub25hdG9taWMsIHdlYWspIGlkIDxXS0tleWJvYXJkU2Nyb2xs
Vmlld0FuaW1hdG9yRGVsZWdhdGU+IGRlbGVnYXRlOworCiBAZW5kCiAKLUBwcm90b2NvbCBXS0tl
eWJvYXJkU2Nyb2xsYWJsZSA8TlNPYmplY3Q+Ci1AcmVxdWlyZWQKLS0gKEJPT0wpaXNLZXlib2Fy
ZFNjcm9sbGFibGU7Ci0tIChDR0Zsb2F0KWRpc3RhbmNlRm9yU2Nyb2xsaW5nSW5jcmVtZW50OihX
ZWJLaXQ6OlNjcm9sbGluZ0luY3JlbWVudClpbmNyZW1lbnQ7Ci0tICh2b2lkKXNjcm9sbEJ5Q29u
dGVudE9mZnNldDooV2ViQ29yZTo6RmxvYXRQb2ludClvZmZzZXQgYW5pbWF0ZWQ6KEJPT0wpYW5p
bWF0ZWQ7CitAcHJvdG9jb2wgV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvckRlbGVnYXRlIDxO
U09iamVjdD4KK0BvcHRpb25hbAorLSAoQk9PTClpc1Njcm9sbGFibGVGb3JLZXlib2FyZFNjcm9s
bFZpZXdBbmltYXRvcjooV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciAqKWFuaW1hdG9yOwor
LSAoQ0dGbG9hdClrZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvcjooV0tLZXlib2FyZFNjcm9sbFZp
ZXdBbmltYXRvciAqKWFuaW1hdG9yIGRpc3RhbmNlRm9ySW5jcmVtZW50OihXZWJLaXQ6OlNjcm9s
bGluZ0luY3JlbWVudClpbmNyZW1lbnQ7CistICh2b2lkKWtleWJvYXJkU2Nyb2xsVmlld0FuaW1h
dG9yV2lsbFNjcm9sbDooV0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciAqKWFuaW1hdG9yOwor
CiBAZW5kCiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbQppbmRl
eCBmNzc5NzA3ZWNiMGFlYWYzM2RiNjk3ZmY4YWRhYjhlYWFlYzQ1ZTAwLi5mZjhmMDk5MjcyZWQz
NWZmOGQ1MWQ4NzJiYTRjZjlhOWFmMDdiZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IubW0KQEAgLTMw
LDI3ICszMCw4MCBAQAogCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgogI2ltcG9ydCA8V2ViQ29yZS9G
bG9hdFBvaW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlY3RFZGdlcy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9XZWJFdmVudC5oPgorI2ltcG9ydCA8V2ViS2l0L1VJS2l0U1BJLmg+CiAjaW1wb3J0IDxh
bGdvcml0aG0+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KICNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotZW51bSBjbGFzcyBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yU3Rh
dGUgOiB1aW50OF90IHsKLSAgICBXYWl0aW5nRm9yRmlyc3RFdmVudCwKLSAgICBXYWl0aW5nRm9y
UmVwZWF0LAotICAgIEFuaW1hdGluZworZW51bSBjbGFzcyBTY3JvbGxpbmdEaXJlY3Rpb24gOiB1
aW50OF90IHsgVXAsIERvd24sIExlZnQsIFJpZ2h0IH07CisKK3N0cnVjdCBLZXlib2FyZFNjcm9s
bCB7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG9mZnNldDsgLy8gUG9pbnRzIHBlciBpbmNyZW1l
bnQuCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1heGltdW1WZWxvY2l0eTsgLy8gUG9pbnRzIHBl
ciBzZWNvbmQuCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGZvcmNlOworCisgICAgV2ViS2l0OjpT
Y3JvbGxpbmdJbmNyZW1lbnQgaW5jcmVtZW50OworICAgIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0
aW9uIGRpcmVjdGlvbjsKIH07CiAKK3N0cnVjdCBLZXlib2FyZFNjcm9sbFBhcmFtZXRlcnMgewor
ICAgIENHRmxvYXQgc3ByaW5nTWFzcyB7IDEgfTsKKyAgICBDR0Zsb2F0IHNwcmluZ1N0aWZmbmVz
cyB7IDEwOSB9OworICAgIENHRmxvYXQgc3ByaW5nRGFtcGluZyB7IDIwIH07CisKKyAgICBDR0Zs
b2F0IG1heGltdW1WZWxvY2l0eU11bHRpcGxpZXIgeyAyNSB9OworICAgIENHRmxvYXQgdGltZVRv
TWF4aW11bVZlbG9jaXR5IHsgMSB9OworCisgICAgQ0dGbG9hdCBydWJiZXJCYW5kRm9yY2UgeyA1
MDAwIH07CiB9OwogCit9CisKK0Bwcm90b2NvbCBXS0tleWJvYXJkU2Nyb2xsYWJsZUludGVybmFs
IDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAoQk9PTClpc0tleWJvYXJkU2Nyb2xsYWJsZTsKKy0g
KENHRmxvYXQpZGlzdGFuY2VGb3JJbmNyZW1lbnQ6KFdlYktpdDo6U2Nyb2xsaW5nSW5jcmVtZW50
KWluY3JlbWVudDsKKy0gKHZvaWQpc2Nyb2xsVG9Db250ZW50T2Zmc2V0OihXZWJDb3JlOjpGbG9h
dFBvaW50KW9mZnNldCBhbmltYXRlZDooQk9PTClhbmltYXRlZDsKKy0gKHZvaWQpc2Nyb2xsV2l0
aFNjcm9sbFRvRXh0ZW50QW5pbWF0aW9uVG86KENHUG9pbnQpb2Zmc2V0OworLSAoQ0dQb2ludClj
b250ZW50T2Zmc2V0OworLSAoQ0dTaXplKWludGVyYWN0aXZlU2Nyb2xsVmVsb2NpdHk7CistIChD
R1BvaW50KWJvdW5kZWRDb250ZW50T2Zmc2V0OihDR1BvaW50KW9mZnNldDsKKy0gKFdlYkNvcmU6
OlJlY3RFZGdlczxib29sPilzY3JvbGxhYmxlRGlyZWN0aW9uc0Zyb21PZmZzZXQ6KENHUG9pbnQp
b2Zmc2V0OworLSAoV2ViQ29yZTo6UmVjdEVkZ2VzPGJvb2w+KXJ1YmJlcmJhbmRhYmxlRGlyZWN0
aW9uczsKKworQGVuZAorCitAaW50ZXJmYWNlIFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciA6
IE5TT2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsYWJsZTooaWQgPFdLS2V5Ym9hcmRTY3JvbGxhYmxlSW50
ZXJuYWw+KXNjcm9sbGFibGU7CisKKy0gKHZvaWQpaW52YWxpZGF0ZTsKKworLSAodm9pZCl3aWxs
U3RhcnRJbnRlcmFjdGl2ZVNjcm9sbDsKKworLSAoQk9PTCliZWdpbldpdGhFdmVudDooOjpXZWJF
dmVudCAqKWV2ZW50OworLSAoQk9PTCloYW5kbGVLZXlFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50
OworCitAZW5kCisKIEBpbXBsZW1lbnRhdGlvbiBXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Ig
ewotICAgIGlkIDxXS0tleWJvYXJkU2Nyb2xsYWJsZT4gX3Njcm9sbGFibGU7Ci0gICAgQ0ZUaW1l
SW50ZXJ2YWwgX3N0YXJ0VGltZTsKLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IF9zY3JvbGxPZmZz
ZXRQZXJJbmNyZW1lbnQ7CisgICAgaWQgPFdLS2V5Ym9hcmRTY3JvbGxhYmxlSW50ZXJuYWw+IF9z
Y3JvbGxhYmxlOwogICAgIFJldGFpblB0cjxDQURpc3BsYXlMaW5rPiBfZGlzcGxheUxpbms7Ci0g
ICAgV2ViS2l0OjpLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yU3RhdGUgX3N0YXRlOworCisgICAg
c3RkOjpvcHRpb25hbDxXZWJLaXQ6OktleWJvYXJkU2Nyb2xsPiBfY3VycmVudFNjcm9sbDsKKwor
ICAgIEJPT0wgX2hhc1ByZXNzZWRTY3JvbGxpbmdLZXk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNp
emUgX3ZlbG9jaXR5OyAvLyBQb2ludHMgcGVyIHNlY29uZC4KKworICAgIFdlYkNvcmU6OkZsb2F0
UG9pbnQgX2lkZWFsUG9zaXRpb247CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBfY3VycmVudFBv
c2l0aW9uOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgX2lkZWFsUG9zaXRpb25Gb3JNaW5pbXVt
VHJhdmVsOwogfQogCiAtIChpbnN0YW5jZXR5cGUpaW5pdApAQCAtNTgsNyArMTExLDcgQEAgLSAo
aW5zdGFuY2V0eXBlKWluaXQKICAgICByZXR1cm4gbmlsOwogfQogCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhTY3JvbGxhYmxlOihpZCA8V0tLZXlib2FyZFNjcm9sbGFibGU+KXNjcm9sbGFibGUK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGFibGU6KGlkIDxXS0tleWJvYXJkU2Nyb2xs
YWJsZUludGVybmFsPilzY3JvbGxhYmxlCiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKICAg
ICBpZiAoIXNlbGYpCkBAIC02OSwxMyArMTIyLDYwIEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFNjcm9sbGFibGU6KGlkIDxXS0tleWJvYXJkU2Nyb2xsYWJsZT4pc2Nyb2xsYWJsZQogICAgIHJl
dHVybiBzZWxmOwogfQogCistIChjb25zdCBXZWJLaXQ6OktleWJvYXJkU2Nyb2xsUGFyYW1ldGVy
cyAmKXBhcmFtZXRlcnMKK3sKKyAgICBzdGF0aWMgY29uc3QgV2ViS2l0OjpLZXlib2FyZFNjcm9s
bFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICByZXR1cm4gcGFyYW1ldGVyczsKK30KKwogLSAo
dm9pZClpbnZhbGlkYXRlCiB7CiAgICAgW3NlbGYgc3RvcEFuaW1hdGVkU2Nyb2xsXTsKKyAgICBb
c2VsZiBzdG9wRGlzcGxheUxpbmtdOwogICAgIF9zY3JvbGxhYmxlID0gbmlsOwogfQogCi0tIChz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+KV9zY3JvbGxPZmZzZXRGb3JFdmVudDoo
OjpXZWJFdmVudCAqKWV2ZW50CitzdGF0aWMgV2ViQ29yZTo6RmxvYXRTaXplIHVuaXRWZWN0b3Io
V2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHN3aXRjaCAoZGly
ZWN0aW9uKSB7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6VXA6CisgICAg
ICAgIHJldHVybiB7IDAsIC0xIH07CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlv
bjo6RG93bjoKKyAgICAgICAgcmV0dXJuIHsgMCwgMSB9OworICAgIGNhc2UgV2ViS2l0OjpTY3Jv
bGxpbmdEaXJlY3Rpb246OkxlZnQ6CisgICAgICAgIHJldHVybiB7IC0xLCAwIH07CisgICAgY2Fz
ZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6UmlnaHQ6CisgICAgICAgIHJldHVybiB7IDEs
IDAgfTsKKyAgICB9Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpGbG9hdFNpemUgcGVycGVuZGljdWxh
ckFic29sdXRlVW5pdFZlY3RvcihXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24p
Cit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5n
RGlyZWN0aW9uOjpVcDoKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uOjpEb3du
OgorICAgICAgICByZXR1cm4geyAxLCAwIH07CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0Rp
cmVjdGlvbjo6TGVmdDoKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uOjpSaWdo
dDoKKyAgICAgICAgcmV0dXJuIHsgMCwgMSB9OworICAgIH0KK30KKworc3RhdGljIFdlYkNvcmU6
OlBoeXNpY2FsQm94U2lkZSBib3hTaWRlKFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uIGRpcmVj
dGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgV2ViS2l0OjpTY3Jv
bGxpbmdEaXJlY3Rpb246OlVwOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGh5c2ljYWxCb3hT
aWRlOjpUb3A7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6RG93bjoKKyAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OlBoeXNpY2FsQm94U2lkZTo6Qm90dG9tOworICAgIGNhc2Ug
V2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OkxlZnQ6CisgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpQaHlzaWNhbEJveFNpZGU6OkxlZnQ7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVj
dGlvbjo6UmlnaHQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpQaHlzaWNhbEJveFNpZGU6OlJp
Z2h0OworICAgIH0KK30KKworLSAoc3RkOjpvcHRpb25hbDxXZWJLaXQ6OktleWJvYXJkU2Nyb2xs
PilrZXlib2FyZFNjcm9sbEZvckV2ZW50Oig6OldlYkV2ZW50ICopZXZlbnQKIHsKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQga1dlYlNwYWNlS2V5ID0gMHgyMDsKIApAQCAtODYsNyArMTg2LDYg
QEAgLSAoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50Pilfc2Nyb2xsT2Zmc2V0Rm9y
RXZlbnQ6KDo6V2ViRXZlbnQgKilldmVudAogICAgIGlmICghY2hhcmFjdGVyc0lnbm9yaW5nTW9k
aWZpZXJzLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGVudW0g
Y2xhc3MgRGlyZWN0aW9uIDogdWludDhfdCB7IFVwLCBEb3duLCBMZWZ0LCBSaWdodCB9OwogICAg
IGVudW0gY2xhc3MgS2V5IDogdWludDhfdCB7IE90aGVyLCBMZWZ0QXJyb3csIFJpZ2h0QXJyb3cs
IFVwQXJyb3csIERvd25BcnJvdywgUGFnZVVwLCBQYWdlRG93biwgU3BhY2UgfTsKICAgICAKICAg
ICBhdXRvIGtleSA9IF57CkBAIC0xMTMsNyArMjEyLDcgQEAgLSAoc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpGbG9hdFBvaW50Pilfc2Nyb2xsT2Zmc2V0Rm9yRXZlbnQ6KDo6V2ViRXZlbnQgKilldmVu
dAogICAgIEJPT0wgc2hpZnRQcmVzc2VkID0gZXZlbnQubW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50
RmxhZ01hc2tTaGlmdDsKICAgICBCT09MIGFsdFByZXNzZWQgPSBldmVudC5tb2RpZmllckZsYWdz
ICYgV2ViRXZlbnRGbGFnTWFza0FsdGVybmF0ZTsKICAgICBCT09MIGNtZFByZXNzZWQgPSBldmVu
dC5tb2RpZmllckZsYWdzICYgV2ViRXZlbnRGbGFnTWFza0NvbW1hbmQ7Ci0gICAgCisKICAgICBh
dXRvIGluY3JlbWVudCA9IF57CiAgICAgICAgIHN3aXRjaCAoa2V5KSB7CiAgICAgICAgIGNhc2Ug
S2V5OjpMZWZ0QXJyb3c6CkBAIC0xMzksMTA0ICsyMzgsMzg3IEBAIC0gKHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6RmxvYXRQb2ludD4pX3Njcm9sbE9mZnNldEZvckV2ZW50Oig6OldlYkV2ZW50ICop
ZXZlbnQKICAgICBhdXRvIGRpcmVjdGlvbiA9IF4oKSB7CiAgICAgICAgIHN3aXRjaCAoa2V5KSB7
CiAgICAgICAgIGNhc2UgS2V5OjpMZWZ0QXJyb3c6Ci0gICAgICAgICAgICByZXR1cm4gRGlyZWN0
aW9uOjpMZWZ0OworICAgICAgICAgICAgcmV0dXJuIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9u
OjpMZWZ0OwogICAgICAgICBjYXNlIEtleTo6UmlnaHRBcnJvdzoKLSAgICAgICAgICAgIHJldHVy
biBEaXJlY3Rpb246OlJpZ2h0OworICAgICAgICAgICAgcmV0dXJuIFdlYktpdDo6U2Nyb2xsaW5n
RGlyZWN0aW9uOjpSaWdodDsKICAgICAgICAgY2FzZSBLZXk6OlVwQXJyb3c6CiAgICAgICAgIGNh
c2UgS2V5OjpQYWdlVXA6Ci0gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uOjpVcDsKKyAgICAg
ICAgICAgIHJldHVybiBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6VXA7CiAgICAgICAgIGNh
c2UgS2V5OjpEb3duQXJyb3c6CiAgICAgICAgIGNhc2UgS2V5OjpQYWdlRG93bjoKLSAgICAgICAg
ICAgIHJldHVybiBEaXJlY3Rpb246OkRvd247CisgICAgICAgICAgICByZXR1cm4gV2ViS2l0OjpT
Y3JvbGxpbmdEaXJlY3Rpb246OkRvd247CiAgICAgICAgIGNhc2UgS2V5OjpTcGFjZToKLSAgICAg
ICAgICAgIHJldHVybiBzaGlmdFByZXNzZWQgPyBEaXJlY3Rpb246OlVwIDogRGlyZWN0aW9uOjpE
b3duOworICAgICAgICAgICAgcmV0dXJuIHNoaWZ0UHJlc3NlZCA/IFdlYktpdDo6U2Nyb2xsaW5n
RGlyZWN0aW9uOjpVcCA6IFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uOjpEb3duOwogICAgICAg
ICBjYXNlIEtleTo6T3RoZXI6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIHJldHVybiBEaXJlY3Rpb246OkRvd247CisgICAgICAgICAgICByZXR1cm4gV2Vi
S2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OkRvd247CiAgICAgICAgIH07CiAgICAgfSgpOwogCi0g
ICAgYm9vbCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpMZWZ0IHx8IGRp
cmVjdGlvbiA9PSBEaXJlY3Rpb246OlJpZ2h0OwotICAgIENHRmxvYXQgc2Nyb2xsRGlzdGFuY2Ug
PSBbX3Njcm9sbGFibGUgZGlzdGFuY2VGb3JTY3JvbGxpbmdJbmNyZW1lbnQ6aW5jcmVtZW50XTsK
LSAgICAKLSAgICBpZiAoZGlyZWN0aW9uID09IERpcmVjdGlvbjo6VXAgfHwgZGlyZWN0aW9uID09
IERpcmVjdGlvbjo6TGVmdCkKLSAgICAgICAgc2Nyb2xsRGlzdGFuY2UgPSAtc2Nyb2xsRGlzdGFu
Y2U7CisgICAgQ0dGbG9hdCBzY3JvbGxEaXN0YW5jZSA9IFtfc2Nyb2xsYWJsZSBkaXN0YW5jZUZv
ckluY3JlbWVudDppbmNyZW1lbnRdOworCisgICAgV2ViS2l0OjpLZXlib2FyZFNjcm9sbCBzY3Jv
bGw7CisgICAgc2Nyb2xsLm9mZnNldCA9IHVuaXRWZWN0b3IoZGlyZWN0aW9uKS5zY2FsZWQoc2Ny
b2xsRGlzdGFuY2UpOworICAgIHNjcm9sbC5pbmNyZW1lbnQgPSBpbmNyZW1lbnQ7CisgICAgc2Ny
b2xsLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKyAgICBzY3JvbGwubWF4aW11bVZlbG9jaXR5ID0g
c2Nyb2xsLm9mZnNldC5zY2FsZWQoc2VsZi5wYXJhbWV0ZXJzLm1heGltdW1WZWxvY2l0eU11bHRp
cGxpZXIpOworCisgICAgLy8gQXBwbHkgYSBjb25zdGFudCBmb3JjZSB0byBhY2hpZXZlIFZtYXgg
aW4gdGltZVRvTWF4aW11bVZlbG9jaXR5IHNlY29uZHMuCisgICAgLy8gRl9jb25zdGFudCA9IG0g
KiBWbWF4IC8gdAorICAgIHNjcm9sbC5mb3JjZSA9IHNjcm9sbC5tYXhpbXVtVmVsb2NpdHkuc2Nh
bGVkKHNlbGYucGFyYW1ldGVycy5zcHJpbmdNYXNzIC8gc2VsZi5wYXJhbWV0ZXJzLnRpbWVUb01h
eGltdW1WZWxvY2l0eSk7CiAgICAgCi0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbCA/IFdlYkNvcmU6
OkZsb2F0UG9pbnQoc2Nyb2xsRGlzdGFuY2UsIDApIDogV2ViQ29yZTo6RmxvYXRQb2ludCgwLCBz
Y3JvbGxEaXN0YW5jZSk7CisgICAgcmV0dXJuIHNjcm9sbDsKIH0KIAogLSAoQk9PTCliZWdpbldp
dGhFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50CiB7Ci0gICAgaWYgKF9zdGF0ZSAhPSBXZWJLaXQ6
OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3JTdGF0ZTo6V2FpdGluZ0ZvckZpcnN0RXZlbnQpCi0g
ICAgICAgIHJldHVybiBOTzsKLSAgICAKICAgICBpZiAoZXZlbnQudHlwZSAhPSBXZWJFdmVudEtl
eURvd24pCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIGF1dG8gb2Zmc2V0ID0gW3NlbGYgX3Nj
cm9sbE9mZnNldEZvckV2ZW50OmV2ZW50XTsKLSAgICBpZiAoIW9mZnNldCkKKyAgICBhdXRvIHNj
cm9sbCA9IFtzZWxmIGtleWJvYXJkU2Nyb2xsRm9yRXZlbnQ6ZXZlbnRdOworICAgIGlmICghc2Ny
b2xsKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICBpZiAoX2hhc1ByZXNzZWRTY3JvbGxpbmdL
ZXkpCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIF9zdGF0ZSA9IFdlYktpdDo6S2V5Ym9hcmRT
Y3JvbGxpbmdBbmltYXRvclN0YXRlOjpXYWl0aW5nRm9yUmVwZWF0OwotICAgIF9zY3JvbGxPZmZz
ZXRQZXJJbmNyZW1lbnQgPSBvZmZzZXQudmFsdWUoKTsKKyAgICBpZiAoIVtfc2Nyb2xsYWJsZSBy
dWJiZXJiYW5kYWJsZURpcmVjdGlvbnNdLmF0KGJveFNpZGUoc2Nyb2xsLT5kaXJlY3Rpb24pKSkK
KyAgICAgICAgcmV0dXJuIE5POworCisgICAgX2hhc1ByZXNzZWRTY3JvbGxpbmdLZXkgPSBZRVM7
CisgICAgX2N1cnJlbnRTY3JvbGwgPSBzY3JvbGw7CisKKyAgICBpZiAoc2Nyb2xsLT5pbmNyZW1l
bnQgPT0gV2ViS2l0OjpTY3JvbGxpbmdJbmNyZW1lbnQ6OkRvY3VtZW50KSB7CisgICAgICAgIF92
ZWxvY2l0eSA9IHsgfTsKKyAgICAgICAgW3NlbGYgc3RvcEFuaW1hdGVkU2Nyb2xsXTsKKyAgICAg
ICAgW3NlbGYgc3RvcERpc3BsYXlMaW5rXTsKKyAgICAgICAgW19zY3JvbGxhYmxlIHNjcm9sbFdp
dGhTY3JvbGxUb0V4dGVudEFuaW1hdGlvblRvOltfc2Nyb2xsYWJsZSBib3VuZGVkQ29udGVudE9m
ZnNldDpfY3VycmVudFBvc2l0aW9uICsgc2Nyb2xsLT5vZmZzZXRdXTsKKyAgICAgICAgcmV0dXJu
IFlFUzsKKyAgICB9CiAKLSAgICAvLyBUaGUgZmlyc3Qga2V5Ym9hcmQgZXZlbnQgdGhhdCBzdGFy
dHMgc2Nyb2xsaW5nIHBlcmZvcm1zIGl0cyBvd24KLSAgICAvLyBkaXNjcmV0ZSBhbmltYXRlZCBz
Y3JvbGwuIENvbnRpbnVvdXNseSBhbmltYXRlZCBzY3JvbGxpbmcgc3RhcnRzCi0gICAgLy8gd2hl
biB0aGUga2V5IHJlcGVhdHMuCi0gICAgW19zY3JvbGxhYmxlIHNjcm9sbEJ5Q29udGVudE9mZnNl
dDpfc2Nyb2xsT2Zmc2V0UGVySW5jcmVtZW50IGFuaW1hdGVkOllFU107CisgICAgW3NlbGYgc3Rh
cnREaXNwbGF5TGlua0lmTmVlZGVkXTsKKworICAgIF9jdXJyZW50UG9zaXRpb24gPSBXZWJDb3Jl
OjpGbG9hdFBvaW50KFtfc2Nyb2xsYWJsZSBjb250ZW50T2Zmc2V0XSk7CisgICAgX3ZlbG9jaXR5
ICs9IFdlYkNvcmU6OkZsb2F0U2l6ZShbX3Njcm9sbGFibGUgaW50ZXJhY3RpdmVTY3JvbGxWZWxv
Y2l0eV0pOworICAgIF9pZGVhbFBvc2l0aW9uRm9yTWluaW11bVRyYXZlbCA9IF9jdXJyZW50UG9z
aXRpb24gKyBfY3VycmVudFNjcm9sbC0+b2Zmc2V0OwogCiAgICAgcmV0dXJuIFlFUzsKIH0KIAog
LSAoQk9PTCloYW5kbGVLZXlFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50CiB7Ci0gICAgaWYgKF9z
dGF0ZSA9PSBXZWJLaXQ6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3JTdGF0ZTo6V2FpdGluZ0Zv
ckZpcnN0RXZlbnQpCisgICAgaWYgKCFfaGFzUHJlc3NlZFNjcm9sbGluZ0tleSkKICAgICAgICAg
cmV0dXJuIE5POwogCi0gICAgYXV0byBvZmZzZXQgPSBbc2VsZiBfc2Nyb2xsT2Zmc2V0Rm9yRXZl
bnQ6ZXZlbnRdOwotICAgIGlmICghb2Zmc2V0IHx8IGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlV
cCkgeworICAgIGF1dG8gc2Nyb2xsID0gW3NlbGYga2V5Ym9hcmRTY3JvbGxGb3JFdmVudDpldmVu
dF07CisgICAgaWYgKCFzY3JvbGwgfHwgZXZlbnQudHlwZSA9PSBXZWJFdmVudEtleVVwKSB7CiAg
ICAgICAgIFtzZWxmIHN0b3BBbmltYXRlZFNjcm9sbF07Ci0gICAgICAgIHJldHVybiBOTzsKKyAg
ICAgICAgX2hhc1ByZXNzZWRTY3JvbGxpbmdLZXkgPSBOTzsKICAgICB9CiAKLSAgICBpZiAoX3N0
YXRlID09IFdlYktpdDo6S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvclN0YXRlOjpXYWl0aW5nRm9y
UmVwZWF0KQotICAgICAgICBbc2VsZiBzdGFydEFuaW1hdGVkU2Nyb2xsXTsKKyAgICByZXR1cm4g
Tk87Cit9CiAKLSAgICByZXR1cm4gWUVTOworc3RhdGljIFdlYkNvcmU6OkZsb2F0UG9pbnQgZmFy
dGhlc3RQb2ludEluRGlyZWN0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgYSwgV2ViQ29yZTo6Rmxv
YXRQb2ludCBiLCBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAg
c3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9u
OjpVcDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UG9pbnQoYS54KCksIHN0ZDo6bWlu
KGEueSgpLCBiLnkoKSkpOworICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdEaXJlY3Rpb246OkRv
d246CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFBvaW50KGEueCgpLCBzdGQ6Om1heChh
LnkoKSwgYi55KCkpKTsKKyAgICBjYXNlIFdlYktpdDo6U2Nyb2xsaW5nRGlyZWN0aW9uOjpMZWZ0
OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRQb2ludChzdGQ6Om1pbihhLngoKSwgYi54
KCkpLCBhLnkoKSk7CisgICAgY2FzZSBXZWJLaXQ6OlNjcm9sbGluZ0RpcmVjdGlvbjo6UmlnaHQ6
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFBvaW50KHN0ZDo6bWF4KGEueCgpLCBiLngo
KSksIGEueSgpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4geyB9OworfQorCistICh2b2lkKXN0b3BBbmltYXRlZFNjcm9sbAoreworICAgIGlmICghX2N1
cnJlbnRTY3JvbGwpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERldGVybWluZSB0aGUgc2V0
dGxpbmcgcG9zaXRpb24gb2YgdGhlIHNwcmluZywgY29uc2VydmluZyB0aGUgc3lzdGVtJ3MgY3Vy
cmVudCBlbmVyZ3kuCisgICAgLy8gS2luZXRpYyA9IGVsYXN0aWMgcG90ZW50aWFsCisgICAgLy8g
MS8yICogbSAqIHZeMiA9IDEvMiAqIGsgKiB4XjIKKyAgICAvLyB4ID0gc3FydCh2XjIgKiBtIC8g
aykKKyAgICBhdXRvIGRpc3BsYWNlbWVudE1hZ25pdHVkZVNxdWFyZWQgPSAoX3ZlbG9jaXR5ICog
X3ZlbG9jaXR5KS5zY2FsZWQoc2VsZi5wYXJhbWV0ZXJzLnNwcmluZ01hc3MgLyBzZWxmLnBhcmFt
ZXRlcnMuc3ByaW5nU3RpZmZuZXNzKTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZGlzcGxhY2Vt
ZW50ID0geworICAgICAgICBzdGQ6OmNvcHlzaWduKHNxcnQoZGlzcGxhY2VtZW50TWFnbml0dWRl
U3F1YXJlZC53aWR0aCgpKSwgX3ZlbG9jaXR5LndpZHRoKCkpLAorICAgICAgICBzdGQ6OmNvcHlz
aWduKHNxcnQoZGlzcGxhY2VtZW50TWFnbml0dWRlU3F1YXJlZC5oZWlnaHQoKSksIF92ZWxvY2l0
eS5oZWlnaHQoKSkKKyAgICB9OworCisgICAgLy8gSWYgdGhlIHNwcmluZyB3b3VsZCBzZXR0bGUg
YmVmb3JlIHRoZSBtaW5pbXVtIHRyYXZlbCBkaXN0YW5jZQorICAgIC8vIGZvciBhbiBpbnN0YW50
YW5lb3VzIHRhcCwgbW92ZSB0aGUgc2V0dGxpbmcgcG9zaXRpb24gb2YgdGhlIHNwcmluZworICAg
IC8vIG91dCB0byB0aGF0IHBvaW50LgorICAgIF9pZGVhbFBvc2l0aW9uID0gW19zY3JvbGxhYmxl
IGJvdW5kZWRDb250ZW50T2Zmc2V0OmZhcnRoZXN0UG9pbnRJbkRpcmVjdGlvbihfY3VycmVudFBv
c2l0aW9uICsgZGlzcGxhY2VtZW50LCBfaWRlYWxQb3NpdGlvbkZvck1pbmltdW1UcmF2ZWwsIF9j
dXJyZW50U2Nyb2xsLT5kaXJlY3Rpb24pXTsKKworICAgIF9jdXJyZW50U2Nyb2xsID0gc3RkOjpu
dWxsb3B0OwogfQogCi0tICh2b2lkKXN0YXJ0QW5pbWF0ZWRTY3JvbGwKKy0gKHZvaWQpc3RhcnRE
aXNwbGF5TGlua0lmTmVlZGVkCiB7Ci0gICAgQVNTRVJUKCFfZGlzcGxheUxpbmspOworICAgIGlm
IChfZGlzcGxheUxpbmspCisgICAgICAgIHJldHVybjsKIAotICAgIF9zdGF0ZSA9IFdlYktpdDo6
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvclN0YXRlOjpBbmltYXRpbmc7Ci0gICAgX3N0YXJ0VGlt
ZSA9IENBQ3VycmVudE1lZGlhVGltZSgpOwogICAgIF9kaXNwbGF5TGluayA9IFtDQURpc3BsYXlM
aW5rIGRpc3BsYXlMaW5rV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihkaXNwbGF5
TGlua0ZpcmVkOildOwogICAgIFtfZGlzcGxheUxpbmsgYWRkVG9SdW5Mb29wOltOU1J1bkxvb3Ag
bWFpblJ1bkxvb3BdIGZvck1vZGU6TlNSdW5Mb29wQ29tbW9uTW9kZXNdOwogfQogCi0tICh2b2lk
KXN0b3BBbmltYXRlZFNjcm9sbAorLSAodm9pZClzdG9wRGlzcGxheUxpbmsKIHsKLSAgICBfc3Rh
dGUgPSBXZWJLaXQ6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3JTdGF0ZTo6V2FpdGluZ0ZvckZp
cnN0RXZlbnQ7CiAgICAgW19kaXNwbGF5TGluayBpbnZhbGlkYXRlXTsKICAgICBfZGlzcGxheUxp
bmsgPSBuaWw7CiB9CiAKKy0gKHZvaWQpd2lsbFN0YXJ0SW50ZXJhY3RpdmVTY3JvbGwKK3sKKyAg
ICAvLyBJZiB0aGUgdXNlciB0b3VjaGVzIHRoZSBzY3JlZW4gdG8gc3RhcnQgYW4gaW50ZXJhY3Rp
dmUgc2Nyb2xsLCBzdG9wIGV2ZXJ5dGhpbmcuCisgICAgX3ZlbG9jaXR5ID0geyB9OworICAgIFtz
ZWxmIHN0b3BBbmltYXRlZFNjcm9sbF07CisgICAgW3NlbGYgc3RvcERpc3BsYXlMaW5rXTsKK30K
KwogLSAodm9pZClkaXNwbGF5TGlua0ZpcmVkOihDQURpc3BsYXlMaW5rICopc2VuZGVyCiB7Ci0g
ICAgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgc2Vjb25kc1BlclNjcm9sbEluY3JlbWVudCA9IDAuMDU7
IC8vIFNlY29uZHMgaXQgc2hvdWxkIHRha2UgdG8gY292ZXIgb25lIGluY3JlbWVudCB3aGVuIGF0
IGZ1bGwgc3BlZWQuCi0gICAgY29uc3QgZmxvYXQgbWF4aW11bVZlbG9jaXR5ID0gMjAwMDsgLy8g
TWF4aW11bSB2ZWxvY2l0eSBpbiBwaXhlbHMgcGVyIHNlY29uZC4gRW1waXJpY2FsbHkgZGV0ZXJt
aW5lZC4KLSAgICBjb25zdCBDRlRpbWVJbnRlcnZhbCBhY2NlbGVyYXRpb25EdXJhdGlvbiA9IDAu
MzsgLy8gRHVyYXRpb24gb2YgYWNjZWxlcmF0aW9uIGluIHNlY29uZHMuIFRoaXMgbWF0Y2hlcyBV
SVNjcm9sbFZpZXcuCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGZvcmNlOworICAgIFdlYkNvcmU6
OkZsb2F0U2l6ZSBheGVzVG9BcHBseVNwcmluZyA9IHsgMSwgMSB9OworCisgICAgaWYgKF9jdXJy
ZW50U2Nyb2xsKSB7CisgICAgICAgIGF1dG8gc2Nyb2xsYWJsZURpcmVjdGlvbnMgPSBbX3Njcm9s
bGFibGUgc2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zmc2V0Ol9jdXJyZW50UG9zaXRpb25dOwor
ICAgICAgICBhdXRvIGRpcmVjdGlvbiA9IF9jdXJyZW50U2Nyb2xsLT5kaXJlY3Rpb247CisKKyAg
ICAgICAgaWYgKHNjcm9sbGFibGVEaXJlY3Rpb25zLmF0KGJveFNpZGUoZGlyZWN0aW9uKSkpIHsK
KyAgICAgICAgICAgIC8vIEFwcGx5IHRoZSBzY3JvbGxpbmcgZm9yY2UuIE9ubHkgYXBwbHkgdGhl
IHNwcmluZyBpbiB0aGUgcGVycGVuZGljdWxhciBheGlzLAorICAgICAgICAgICAgLy8gb3RoZXJ3
aXNlIGl0IGRyYWdzIGFnYWluc3QgdGhlIGRpcmVjdGlvbiBvZiBtb3Rpb24uCisgICAgICAgICAg
ICBheGVzVG9BcHBseVNwcmluZyA9IHBlcnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IoZGly
ZWN0aW9uKTsKKyAgICAgICAgICAgIGZvcmNlID0gX2N1cnJlbnRTY3JvbGwtPmZvcmNlOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhlIHNjcm9sbCB2aWV3IGNhbm5vdCBzY3Jv
bGwgaW4gdGhpcyBkaXJlY3Rpb24sIGFuZCBpcyBydWJiZXItYmFuZGluZy4KKyAgICAgICAgICAg
IC8vIEFwcGx5IGEgY29uc3RhbnQgYW5kIHNpZ25pZmljYW50IGZvcmNlOyBvdGhlcndpc2UsIHRo
ZSBmb3JjZSBmb3IgYQorICAgICAgICAgICAgLy8gc2luZ2xlLWxpbmUgaW5jcmVtZW50IGlzIG5v
dCBzdHJvbmcgZW5vdWdoIHRvIHJ1YmJlci1iYW5kIHBlcmNlcHRpYmx5LgorICAgICAgICAgICAg
Zm9yY2UgPSB1bml0VmVjdG9yKGRpcmVjdGlvbikuc2NhbGVkKHNlbGYucGFyYW1ldGVycy5ydWJi
ZXJCYW5kRm9yY2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2UndmUgcmVhY2hlZCBv
ciBleGNlZWRlZCB0aGUgbWF4aW11bSB2ZWxvY2l0eSwgc3RvcCBhcHBseWluZyBhbnkgZm9yY2Uu
CisgICAgICAgIC8vIEhvd2V2ZXIsIHdlIHdvbid0IGxldCB0aGUgc3ByaW5nIHNuYXAsIHdlJ2xs
IGp1c3Qga2VlcCBnb2luZyBhdCB0aGUgc2FtZQorICAgICAgICAvLyB2ZWxvY2l0eSB1bnRpbCB0
aGUgdXNlciByYWlzZXMgdGhlaXIgZmluZ2VyIG9yIHdlIGhpdCBhbiBlZGdlLgorICAgICAgICBp
ZiAoZmFicyhfdmVsb2NpdHkud2lkdGgoKSkgPj0gZmFicyhfY3VycmVudFNjcm9sbC0+bWF4aW11
bVZlbG9jaXR5LndpZHRoKCkpKQorICAgICAgICAgICAgZm9yY2Uuc2V0V2lkdGgoMCk7CisgICAg
ICAgIGlmIChmYWJzKF92ZWxvY2l0eS5oZWlnaHQoKSkgPj0gZmFicyhfY3VycmVudFNjcm9sbC0+
bWF4aW11bVZlbG9jaXR5LmhlaWdodCgpKSkKKyAgICAgICAgICAgIGZvcmNlLnNldEhlaWdodCgw
KTsKKyAgICB9CiAKLSAgICBhdXRvIHZlbG9jaXR5ID0gX3Njcm9sbE9mZnNldFBlckluY3JlbWVu
dC5zY2FsZWQoMS4gLyBzZWNvbmRzUGVyU2Nyb2xsSW5jcmVtZW50KTsKLSAgICB2ZWxvY2l0eSA9
IHZlbG9jaXR5LmNvbnN0cmFpbmVkQmV0d2Vlbih7IC1tYXhpbXVtVmVsb2NpdHksIC1tYXhpbXVt
VmVsb2NpdHkgfSwgeyBtYXhpbXVtVmVsb2NpdHksIG1heGltdW1WZWxvY2l0eSB9KTsKKyAgICBX
ZWJDb3JlOjpGbG9hdFBvaW50IGlkZWFsUG9zaXRpb24gPSBbX3Njcm9sbGFibGUgYm91bmRlZENv
bnRlbnRPZmZzZXQ6X2N1cnJlbnRTY3JvbGwgPyBfY3VycmVudFBvc2l0aW9uIDogX2lkZWFsUG9z
aXRpb25dOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBkaXNwbGFjZW1lbnQgPSBfY3VycmVudFBv
c2l0aW9uIC0gaWRlYWxQb3NpdGlvbjsKIAorICAgIC8vIENvbXB1dGUgdGhlIHNwcmluZydzIGZv
cmNlLCBhbmQgYXBwbHkgaXQgaW4gYWxsb3dlZCBkaXJlY3Rpb25zLgorICAgIC8vIEZfc3ByaW5n
ID0gLWsgKiB4IC0gYyAqIHYKKyAgICBhdXRvIHNwcmluZ0ZvcmNlID0gLSBkaXNwbGFjZW1lbnQu
c2NhbGVkKHNlbGYucGFyYW1ldGVycy5zcHJpbmdTdGlmZm5lc3MpIC0gX3ZlbG9jaXR5LnNjYWxl
ZChzZWxmLnBhcmFtZXRlcnMuc3ByaW5nRGFtcGluZyk7CisgICAgZm9yY2UgKz0gc3ByaW5nRm9y
Y2UgKiBheGVzVG9BcHBseVNwcmluZzsKKworICAgIC8vIEludGVncmF0ZSBhY2NlbGVyYXRpb24g
LT4gdmVsb2NpdHkgLT4gcG9zaXRpb24gZm9yIHRoaXMgdGltZSBzdGVwLgogICAgIENGVGltZUlu
dGVydmFsIGZyYW1lRHVyYXRpb24gPSBzZW5kZXIudGFyZ2V0VGltZXN0YW1wIC0gc2VuZGVyLnRp
bWVzdGFtcDsKLSAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRnJvbUFuaW1hdGlvblN0YXJ0ID0gc2Vu
ZGVyLnRpbWVzdGFtcCAtIF9zdGFydFRpbWU7Ci0gICAgZmxvYXQgYWNjZWxlcmF0aW9uRmFjdG9y
ID0gW1tDQU1lZGlhVGltaW5nRnVuY3Rpb24gZnVuY3Rpb25XaXRoTmFtZTprQ0FNZWRpYVRpbWlu
Z0Z1bmN0aW9uRWFzZUluRWFzZU91dF0gX3NvbHZlRm9ySW5wdXQ6c3RkOjptaW48Q0ZUaW1lSW50
ZXJ2YWw+KHRpbWVGcm9tQW5pbWF0aW9uU3RhcnQsIGFjY2VsZXJhdGlvbkR1cmF0aW9uKSAvIGFj
Y2VsZXJhdGlvbkR1cmF0aW9uXTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgYWNjZWxlcmF0aW9u
ID0gZm9yY2Uuc2NhbGVkKDEuIC8gc2VsZi5wYXJhbWV0ZXJzLnNwcmluZ01hc3MpOworICAgIF92
ZWxvY2l0eSArPSBhY2NlbGVyYXRpb24uc2NhbGVkKGZyYW1lRHVyYXRpb24pOworICAgIF9jdXJy
ZW50UG9zaXRpb24gKz0gX3ZlbG9jaXR5LnNjYWxlZChmcmFtZUR1cmF0aW9uKTsKKworICAgIFtf
c2Nyb2xsYWJsZSBzY3JvbGxUb0NvbnRlbnRPZmZzZXQ6X2N1cnJlbnRQb3NpdGlvbiBhbmltYXRl
ZDpOT107CisKKyAgICAvLyBJZiB3ZSd2ZSBlZmZlY3RpdmVseSBzdG9wcGVkIHNjcm9sbGluZywg
YW5kIG5vIGtleSBpcyBwcmVzc2VkLAorICAgIC8vIHNodXQgZG93biB0aGUgZGlzcGxheSBsaW5r
LgorICAgIGlmICghX2hhc1ByZXNzZWRTY3JvbGxpbmdLZXkgJiYgX3ZlbG9jaXR5LmRpYWdvbmFs
TGVuZ3RoU3F1YXJlZCgpIDwgMSkgeworICAgICAgICBbc2VsZiBzdG9wRGlzcGxheUxpbmtdOwor
ICAgICAgICBfdmVsb2NpdHkgPSB7IH07CisgICAgfQorfQorCitAZW5kCisKK0BpbnRlcmZhY2Ug
V0tLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvciAoKSA8V0tLZXlib2FyZFNjcm9sbGFibGVJbnRl
cm5hbD4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0
b3IgeworICAgIFdlYWtPYmpDUHRyPFVJU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7CisgICAgUmV0
YWluUHRyPFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcj4gX2FuaW1hdG9yOworCisgICAgQk9P
TCBfZGVsZWdhdGVSZXNwb25kc1RvSXNLZXlib2FyZFNjcm9sbGFibGU7CisgICAgQk9PTCBfZGVs
ZWdhdGVSZXNwb25kc1RvRGlzdGFuY2VGb3JJbmNyZW1lbnQ7CisgICAgQk9PTCBfZGVsZWdhdGVS
ZXNwb25kc1RvV2lsbFNjcm9sbDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICBy
ZXR1cm4gbmlsOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxWaWV3OihVSVNj
cm9sbFZpZXcgKilzY3JvbGxWaWV3Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfc2Nyb2xsVmlldyA9IHNjcm9s
bFZpZXc7CisgICAgX2FuaW1hdG9yID0gYWRvcHROUyhbW1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvciBhbGxvY10gaW5pdFdpdGhTY3JvbGxhYmxlOnNlbGZdKTsKKworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2FuaW1hdG9yIGludmFsaWRhdGVdOwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClpbnZhbGlkYXRlCit7CisgICAgX3Nj
cm9sbFZpZXcgPSBuaWw7CisKKyAgICBbX2FuaW1hdG9yIGludmFsaWRhdGVdOworICAgIF9hbmlt
YXRvciA9IG5pbDsKK30KKworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdLS2V5Ym9hcmRTY3Jv
bGxWaWV3QW5pbWF0b3JEZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICBfZGVsZWdhdGUgPSBkZWxl
Z2F0ZTsKKworICAgIF9kZWxlZ2F0ZVJlc3BvbmRzVG9Jc0tleWJvYXJkU2Nyb2xsYWJsZSA9IFtf
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihpc1Njcm9sbGFibGVGb3JLZXli
b2FyZFNjcm9sbFZpZXdBbmltYXRvcjopXTsKKyAgICBfZGVsZWdhdGVSZXNwb25kc1RvRGlzdGFu
Y2VGb3JJbmNyZW1lbnQgPSBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
a2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6ZGlzdGFuY2VGb3JJbmNyZW1lbnQ6KV07CisgICAg
X2RlbGVnYXRlUmVzcG9uZHNUb1dpbGxTY3JvbGwgPSBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3Ioa2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3JXaWxsU2Nyb2xsOildOwor
fQorCistICh2b2lkKXdpbGxTdGFydEludGVyYWN0aXZlU2Nyb2xsCit7CisgICAgW19hbmltYXRv
ciB3aWxsU3RhcnRJbnRlcmFjdGl2ZVNjcm9sbF07Cit9CisKKy0gKEJPT0wpYmVnaW5XaXRoRXZl
bnQ6KDo6V2ViRXZlbnQgKilldmVudAoreworICAgIHJldHVybiBbX2FuaW1hdG9yIGJlZ2luV2l0
aEV2ZW50OmV2ZW50XTsKK30KKworLSAoQk9PTCloYW5kbGVLZXlFdmVudDooOjpXZWJFdmVudCAq
KWV2ZW50Cit7CisgICAgcmV0dXJuIFtfYW5pbWF0b3IgaGFuZGxlS2V5RXZlbnQ6ZXZlbnRdOwor
fQorCistIChCT09MKWlzS2V5Ym9hcmRTY3JvbGxhYmxlCit7CisgICAgaWYgKCFfZGVsZWdhdGVS
ZXNwb25kc1RvSXNLZXlib2FyZFNjcm9sbGFibGUpCisgICAgICAgIHJldHVybiBZRVM7CisgICAg
cmV0dXJuIFtfZGVsZWdhdGUgaXNTY3JvbGxhYmxlRm9yS2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0
b3I6c2VsZl07Cit9CisKKy0gKENHRmxvYXQpZGlzdGFuY2VGb3JJbmNyZW1lbnQ6KFdlYktpdDo6
U2Nyb2xsaW5nSW5jcmVtZW50KWluY3JlbWVudAoreworICAgIGF1dG8gc2Nyb2xsVmlldyA9IF9z
Y3JvbGxWaWV3LmdldEF1dG9yZWxlYXNlZCgpOworICAgIGlmICghc2Nyb2xsVmlldykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBDR0Zsb2F0IGRlZmF1bHRQYWdlU2Nyb2xsRnJhY3Rp
b24gPSAwLjg7CisgICAgY29uc3QgQ0dGbG9hdCBkZWZhdWx0TGluZVNjcm9sbEhlaWdodCA9IDQw
OworCisgICAgaWYgKCFfZGVsZWdhdGVSZXNwb25kc1RvRGlzdGFuY2VGb3JJbmNyZW1lbnQpIHsK
KyAgICAgICAgc3dpdGNoIChpbmNyZW1lbnQpIHsKKyAgICAgICAgY2FzZSBXZWJLaXQ6OlNjcm9s
bGluZ0luY3JlbWVudDo6RG9jdW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsVmlldy5j
b250ZW50U2l6ZS5oZWlnaHQ7CisgICAgICAgIGNhc2UgV2ViS2l0OjpTY3JvbGxpbmdJbmNyZW1l
bnQ6OlBhZ2U6CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsVmlldy5mcmFtZS5zaXplLmhlaWdo
dCAqIGRlZmF1bHRQYWdlU2Nyb2xsRnJhY3Rpb247CisgICAgICAgIGNhc2UgV2ViS2l0OjpTY3Jv
bGxpbmdJbmNyZW1lbnQ6OkxpbmU6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdExpbmVTY3Jv
bGxIZWlnaHQgKiBzY3JvbGxWaWV3Lnpvb21TY2FsZTsKKyAgICAgICAgfQorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IFtfZGVsZWdhdGUga2V5Ym9hcmRTY3JvbGxWaWV3QW5pbWF0b3I6c2VsZiBkaXN0YW5jZUZvcklu
Y3JlbWVudDppbmNyZW1lbnRdOworfQorCistICh2b2lkKXNjcm9sbFRvQ29udGVudE9mZnNldDoo
V2ViQ29yZTo6RmxvYXRQb2ludCljb250ZW50T2Zmc2V0RGVsdGEgYW5pbWF0ZWQ6KEJPT0wpYW5p
bWF0ZWQKK3sKKyAgICBhdXRvIHNjcm9sbFZpZXcgPSBfc2Nyb2xsVmlldy5nZXRBdXRvcmVsZWFz
ZWQoKTsKKyAgICBpZiAoIXNjcm9sbFZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoX2Rl
bGVnYXRlUmVzcG9uZHNUb1dpbGxTY3JvbGwpCisgICAgICAgIFtfZGVsZWdhdGUga2V5Ym9hcmRT
Y3JvbGxWaWV3QW5pbWF0b3JXaWxsU2Nyb2xsOnNlbGZdOworICAgIFtzY3JvbGxWaWV3IHNldENv
bnRlbnRPZmZzZXQ6Y29udGVudE9mZnNldERlbHRhIGFuaW1hdGVkOmFuaW1hdGVkXTsKK30KKwor
LSAodm9pZClzY3JvbGxXaXRoU2Nyb2xsVG9FeHRlbnRBbmltYXRpb25UbzooQ0dQb2ludClvZmZz
ZXQKK3sKKyAgICBhdXRvIHNjcm9sbFZpZXcgPSBfc2Nyb2xsVmlldy5nZXRBdXRvcmVsZWFzZWQo
KTsKKyAgICBbc2Nyb2xsVmlldyBfc2V0Q29udGVudE9mZnNldFdpdGhEZWNlbGVyYXRpb25Bbmlt
YXRpb246b2Zmc2V0XTsKK30KKworLSAoQ0dQb2ludCljb250ZW50T2Zmc2V0Cit7CisgICAgYXV0
byBzY3JvbGxWaWV3ID0gX3Njcm9sbFZpZXcuZ2V0QXV0b3JlbGVhc2VkKCk7CisgICAgaWYgKCFz
Y3JvbGxWaWV3KQorICAgICAgICByZXR1cm4gQ0dQb2ludFplcm87CisKKyAgICByZXR1cm4gW3Nj
cm9sbFZpZXcgY29udGVudE9mZnNldF07Cit9CisKKy0gKENHUG9pbnQpYm91bmRlZENvbnRlbnRP
ZmZzZXQ6KENHUG9pbnQpb2Zmc2V0Cit7CisgICAgYXV0byBzY3JvbGxWaWV3ID0gX3Njcm9sbFZp
ZXcuZ2V0QXV0b3JlbGVhc2VkKCk7CisgICAgaWYgKCFzY3JvbGxWaWV3KQorICAgICAgICByZXR1
cm4gQ0dQb2ludFplcm87CisKKyAgICByZXR1cm4gW3Njcm9sbFZpZXcgX2FkanVzdGVkQ29udGVu
dE9mZnNldEZvckNvbnRlbnRPZmZzZXQ6b2Zmc2V0XTsKK30KKworLSAoQ0dTaXplKWludGVyYWN0
aXZlU2Nyb2xsVmVsb2NpdHkKK3sKKyAgICBhdXRvIHNjcm9sbFZpZXcgPSBfc2Nyb2xsVmlldy5n
ZXRBdXRvcmVsZWFzZWQoKTsKKyAgICBpZiAoIXNjcm9sbFZpZXcpCisgICAgICAgIHJldHVybiBD
R1NpemVaZXJvOworCisgICAgY29uc3QgTlNUaW1lSW50ZXJ2YWwgbWlsbGlzZWNvbmRzUGVyU2Vj
b25kID0gMTAwMDsKKyAgICByZXR1cm4gQ0dTaXplTWFrZShzY3JvbGxWaWV3Ll9ob3Jpem9udGFs
VmVsb2NpdHkgKiBtaWxsaXNlY29uZHNQZXJTZWNvbmQsIHNjcm9sbFZpZXcuX3ZlcnRpY2FsVmVs
b2NpdHkgKiBtaWxsaXNlY29uZHNQZXJTZWNvbmQpOworfQorCistIChXZWJDb3JlOjpSZWN0RWRn
ZXM8Ym9vbD4pc2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zmc2V0OihDR1BvaW50KW9mZnNldAor
eworICAgIGF1dG8gc2Nyb2xsVmlldyA9IF9zY3JvbGxWaWV3LmdldEF1dG9yZWxlYXNlZCgpOwor
ICAgIGlmICghc2Nyb2xsVmlldykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFVJRWRnZUlu
c2V0cyBjb250ZW50SW5zZXRzID0gc2Nyb2xsVmlldy5hZGp1c3RlZENvbnRlbnRJbnNldDsKKwor
ICAgIENHU2l6ZSBjb250ZW50U2l6ZSA9IHNjcm9sbFZpZXcuY29udGVudFNpemU7CisgICAgQ0dT
aXplIHNjcm9sbFZpZXdTaXplID0gc2Nyb2xsVmlldy5ib3VuZHMuc2l6ZTsKKworICAgIENHUG9p
bnQgbWluaW11bUNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFrZSgtY29udGVudEluc2V0cy5sZWZ0
LCAtY29udGVudEluc2V0cy50b3ApOworICAgIENHUG9pbnQgbWF4aW11bUNvbnRlbnRPZmZzZXQg
PSBDR1BvaW50TWFrZShzdGQ6Om1heChtaW5pbXVtQ29udGVudE9mZnNldC54LCBjb250ZW50U2l6
ZS53aWR0aCArIGNvbnRlbnRJbnNldHMucmlnaHQgLSBzY3JvbGxWaWV3U2l6ZS53aWR0aCksIHN0
ZDo6bWF4KG1pbmltdW1Db250ZW50T2Zmc2V0LnksIGNvbnRlbnRTaXplLmhlaWdodCArIGNvbnRl
bnRJbnNldHMuYm90dG9tIC0gc2Nyb2xsVmlld1NpemUuaGVpZ2h0KSk7CisKKyAgICBXZWJDb3Jl
OjpSZWN0RWRnZXM8Ym9vbD4gZWRnZXM7CisKKyAgICBlZGdlcy5zZXRUb3Aob2Zmc2V0LnkgPiBt
aW5pbXVtQ29udGVudE9mZnNldC55KTsKKyAgICBlZGdlcy5zZXRCb3R0b20ob2Zmc2V0LnkgPCBt
YXhpbXVtQ29udGVudE9mZnNldC55KTsKKyAgICBlZGdlcy5zZXRMZWZ0KG9mZnNldC54ID4gbWlu
aW11bUNvbnRlbnRPZmZzZXQueCk7CisgICAgZWRnZXMuc2V0UmlnaHQob2Zmc2V0LnggPCBtYXhp
bXVtQ29udGVudE9mZnNldC54KTsKKworICAgIHJldHVybiBlZGdlczsKK30KKworLSAoV2ViQ29y
ZTo6UmVjdEVkZ2VzPGJvb2w+KXJ1YmJlcmJhbmRhYmxlRGlyZWN0aW9ucworeworICAgIGF1dG8g
c2Nyb2xsVmlldyA9IF9zY3JvbGxWaWV3LmdldEF1dG9yZWxlYXNlZCgpOworICAgIGlmICghc2Ny
b2xsVmlldykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFdlYkNvcmU6OlJlY3RFZGdlczxi
b29sPiBlZGdlczsKKworICAgIGVkZ2VzLnNldFRvcChzY3JvbGxWaWV3Ll9jYW5TY3JvbGxZKTsK
KyAgICBlZGdlcy5zZXRCb3R0b20oZWRnZXMudG9wKCkpOworICAgIGVkZ2VzLnNldExlZnQoc2Ny
b2xsVmlldy5fY2FuU2Nyb2xsWCk7CisgICAgZWRnZXMuc2V0UmlnaHQoZWRnZXMubGVmdCgpKTsK
IAotICAgIGF1dG8gY29udGVudE9mZnNldCA9IHZlbG9jaXR5LnNjYWxlZChhY2NlbGVyYXRpb25G
YWN0b3IgKiBmcmFtZUR1cmF0aW9uKTsKLSAgICBbX3Njcm9sbGFibGUgc2Nyb2xsQnlDb250ZW50
T2Zmc2V0OmNvbnRlbnRPZmZzZXQgYW5pbWF0ZWQ6Tk9dOworICAgIHJldHVybiBlZGdlczsKIH0K
IAogQGVuZAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>