<?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>152112</bug_id>
          
          <creation_ts>2015-12-10 01:46:47 -0800</creation_ts>
          <short_desc>[TexMap] Clean up TextureMapperAnimation, TextureMapperAnimations</short_desc>
          <delta_ts>2015-12-30 01:47:43 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>mrobinson</cc>
    
    <cc>noam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1148104</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-12-10 01:46:47 -0800</bug_when>
    <thetext>[TexMap] Clean up TextureMapperAnimation, TextureMapperAnimations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148105</commentid>
    <comment_count>1</comment_count>
      <attachid>267081</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-12-10 02:12:21 -0800</bug_when>
    <thetext>Created attachment 267081
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148106</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-10 02:14:03 -0800</bug_when>
    <thetext>Attachment 267081 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:378:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:384:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148263</commentid>
    <comment_count>3</comment_count>
      <attachid>267081</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-12-10 11:50:10 -0800</bug_when>
    <thetext>Comment on attachment 267081
Patch

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

Need to fix EFL build.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:186
&gt; +            operation-&gt;blend(nullptr, 1.0 - progress, true)-&gt;apply(matrix, boxSize);

Could be just &quot;1 - progress&quot; instead of &quot;1.0 - progress&quot;.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:280
&gt; +void TextureMapperAnimation::pause(double time)

Would like to see this using std::chrono instead of double in the future.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:323
&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();

Normally we’d put this assertion outside the switch statement so the compiler can warn if we don’t cover all the enum cases. Depends on the type of m_keyframes.property() and whether it has other values we intentionally do not handle.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:378
&gt; +        [&amp;type](const TextureMapperAnimation&amp; animation) { return animation.isActive() &amp;&amp; animation.keyframes().property() == type; });

Why [&amp;type] instead of [type]?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149253</commentid>
    <comment_count>4</comment_count>
      <attachid>267081</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-12-15 02:46:03 -0800</bug_when>
    <thetext>Comment on attachment 267081
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:323
&gt;&gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; Normally we’d put this assertion outside the switch statement so the compiler can warn if we don’t cover all the enum cases. Depends on the type of m_keyframes.property() and whether it has other values we intentionally do not handle.

This intentionally handles only 3 of 6 possible values for AnimationPropertyID.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:378
&gt;&gt; +        [&amp;type](const TextureMapperAnimation&amp; animation) { return animation.isActive() &amp;&amp; animation.keyframes().property() == type; });
&gt; 
&gt; Why [&amp;type] instead of [type]?

It makes it clear that the intent is to reference the argument, instead of copying its value.

I don&apos;t think there&apos;s any difference in the code that&apos;s generated though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149262</commentid>
    <comment_count>5</comment_count>
      <attachid>267362</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-12-15 03:33:50 -0800</bug_when>
    <thetext>Created attachment 267362
Patch for landing

Running through the EWS again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149264</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-15 03:35:33 -0800</bug_when>
    <thetext>Attachment 267362 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:378:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:384:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149973</commentid>
    <comment_count>7</comment_count>
      <attachid>267559</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-12-17 07:12:42 -0800</bug_when>
    <thetext>Created attachment 267559
Patch for landing

Another run through EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149974</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-17 07:14:10 -0800</bug_when>
    <thetext>Attachment 267559 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:378:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:384:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151593</commentid>
    <comment_count>9</comment_count>
      <attachid>268002</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-12-29 23:44:53 -0800</bug_when>
    <thetext>Created attachment 268002
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151594</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-29 23:51:46 -0800</bug_when>
    <thetext>Attachment 268002 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:378:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:384:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151598</commentid>
    <comment_count>11</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-12-30 01:47:43 -0800</bug_when>
    <thetext>Committed r194445: &lt;http://trac.webkit.org/changeset/194445&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267081</attachid>
            <date>2015-12-10 02:12:21 -0800</date>
            <delta_ts>2015-12-15 03:33:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152112-20151210021147.patch</filename>
            <type>text/plain</type>
            <size>24567</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkzODkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjY5NGE4MDczODYzODRi
NTEzZmNmNGU4MTdiOWYwZTAxZGNlMjU2OC4uNzk0ZTk2MjYzMWQwMzczOTFiZjJiMGNiYmFhMjcx
ZTdjOTdkZWVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY4IEBACiAyMDE1LTEyLTEwICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAorICAgICAgICBbVGV4TWFwXSBDbGVh
biB1cCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMTEyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgdGhl
IFRleHR1cmVNYXBwZXJBbmltYXRpb24gY2xhc3MuIFR1cm4gQW5pbWF0aW9uU3RhdGUgaW50byBh
biBlbnVtCisgICAgICAgIGNsYXNzLiBVc2UgcmVmZXJlbmNlcyBmb3Igbm9uLW51bGwgcG9pbnRl
ciBwYXJhbWV0ZXJzIHRvIG9uZSB2ZXJzaW9uIG9mIHRoZQorICAgICAgICBjb25zdHJ1Y3RvciBh
bmQgdGhlIGFwcGx5KCkgYW5kIGFwcGx5SW50ZXJuYWwoKSBtZXRob2RzLiBSZW1vdmUgdW5uZWNl
c3NhcnkKKyAgICAgICAgcHVibGljIG1ldGhvZHMgYW5kIHJlb3JkZXIgdGhlIHJlbWFpbmluZyBv
bmVzIGludG8gc29tZXRoaW5nIG1vcmUgc2Vuc2libGUuCisgICAgICAgIEluIHRlcm1zIG9mIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzLCB0aGUgbWV0aG9kcyBhcmUgbW92ZWQgYXJv
dW5kIHRvCisgICAgICAgIGZvbGxvdyB0aGUgb3JkZXIgb2YgZGVjbGFyYXRpb25zLCBhbG9uZyB3
aXRoIHNvbWUgc21hbGwgY2xlYW51cHMgYW5kIGltcHJvdmVtZW50cworICAgICAgICBhcHBsaWVk
LgorCisgICAgICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIGNsYXNzIGlzIGFsc28gcmVmcmVz
aGVkLiBUaGUgY29uc3RydWN0b3IgaXMgZGVmYXVsdGVkLAorICAgICAgICBhbmQgdGhlIG1ldGhv
ZCBpbXBsZW1lbnRhdGlvbnMgYXJlIHJlb3JkZXJlZCBhIGJpdCBhbmQgYWxzbyBhZGp1c3RlZCB0
byB1c2UgdGhlCisgICAgICAgIHJhbmdlLWJhc2VkIGZvci1sb29wcyBhbmQgc29tZSBTVEwgdXRp
bGl0aWVzLgorCisgICAgICAgIFN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGltcGxlbWVudGF0aW9u
IGZpbGUgYXJlIGFsc28gdXBkYXRlZCB0byB1c2UgcmFuZ2UtYmFzZWQKKyAgICAgICAgZm9yLWxv
b3BzLCByZWZlcmVuY2VzIGFuZCBudWxscHRycyB3aGVyZSBwb3NzaWJsZS4KKworICAgICAgICBU
aGVyZSdzIG5vIGNoYW5nZSBpbiBiZWhhdmlvciBhcyB0aGlzIGlzIGp1c3QgYSByZWZhY3Rvcmlu
Zy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpibGVuZEZ1bmMp
OgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlGaWx0ZXJBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmFw
cGx5VHJhbnNmb3JtQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJB
bmltYXRpb246OlRleHR1cmVNYXBwZXJBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckFuaW1hdGlvbjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckFuaW1hdGlvbjo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFu
aW1hdGlvbjo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRp
b246OmNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJBbmltYXRpb246OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJBbmltYXRpb246OmFwcGx5SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckFuaW1hdGlvbnM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uczo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRp
b25zOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6
c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cmVz
dW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5p
bWF0aW9uc09mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
czo6aGFzUnVubmluZ0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmg6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJBbmltYXRpb246OnN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJBbmltYXRpb246OnNldFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJBbmltYXRpb246OnByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJBbmltYXRpb246OmJveFNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6c3RhcnRUaW1lKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb246OnBhdXNlVGltZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphbmltYXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6bGlzdHNN
YXRjaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
czo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZEFuaW1h
dGlvbik6CisKKzIwMTUtMTItMTAgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29t
PgorCiAgICAgICAgIFtUZXhNYXBdIFJlbW92ZSB0aGUgVEVYTUFQX09QRU5HTF9FU18yIGRlZmlu
ZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMDY5
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGNlZGE4
MmRmMjQ2NjQ0MWZhNmZiNDYyMmQwNzk1YTg1YWJhMDBiYWYuLjQ4MmI3M2YxOGE0YTc0NWUwYjlj
MzVlM2MyYjExODRkMjEyNmRhYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmNwcApAQCAtNTc0LDcgKzU3NCw3IEBAIGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0CiAg
ICAgICAgIGxpc3RzTWF0Y2ggPSB2YWxpZGF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVMaXN0
LCBoYXNCaWdSb3RhdGlvbikgPj0gMDsKIAogICAgIGNvbnN0IGRvdWJsZSBjdXJyZW50VGltZSA9
IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwotICAgIG1fYW5pbWF0aW9ucy5hZGQoVGV4
dHVyZU1hcHBlckFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIGFu
aW0sIGN1cnJlbnRUaW1lIC0gdGltZU9mZnNldCwgbGlzdHNNYXRjaCkpOworICAgIG1fYW5pbWF0
aW9ucy5hZGQoVGV4dHVyZU1hcHBlckFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3Qs
IGJveFNpemUsICphbmltLCBjdXJyZW50VGltZSAtIHRpbWVPZmZzZXQsIGxpc3RzTWF0Y2gpKTsK
ICAgICAvLyBtX2FuaW1hdGlvblN0YXJ0VGltZSBpcyB0aGUgdGltZSBvZiB0aGUgZmlyc3QgcmVh
bCBmcmFtZSBvZiBhbmltYXRpb24sIG5vdyBvciBkZWxheWVkIGJ5IGEgbmVnYXRpdmUgb2Zmc2V0
LgogICAgIGlmICh0aW1lT2Zmc2V0ID4gMCkKICAgICAgICAgbV9hbmltYXRpb25TdGFydFRpbWUg
PSBjdXJyZW50VGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcAppbmRleCAy
NGVkNTQyMzE1YTE0NTYyYjIyMjE5NGFhOWJmNmZlYTM3NDQ5OWIyLi4wOWNiOTkyYWY5ZGU0Mzhl
Yjc2MTQyYmY3MmVlNDQ1YTY5YWNiMWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRp
b24uY3BwCkBAIC0yNiwxNiArMjYsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoRmlsdGVyT3Bl
cmF0aW9uKiBmcm9tT3AsIEZpbHRlck9wZXJhdGlvbiogdG9PcCwgZG91YmxlIHByb2dyZXNzLCBj
b25zdCBGbG9hdFNpemUmIHNpemUsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCitz
dGF0aWMgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKEZpbHRlck9wZXJhdGlvbiog
ZnJvbU9wLCBGaWx0ZXJPcGVyYXRpb24mIHRvT3AsIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgRmxv
YXRTaXplJiBzaXplLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQogewotICAgIEFT
U0VSVCh0b09wKTsKLSAgICBpZiAodG9PcC0+YmxlbmRpbmdOZWVkc1JlbmRlcmVyU2l6ZSgpKQot
ICAgICAgICByZXR1cm4gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgTGF5b3V0U2l6ZShz
aXplKSwgYmxlbmRUb1Bhc3N0aHJvdWdoKTsKLQotICAgIHJldHVybiB0b09wLT5ibGVuZChmcm9t
T3AsIHByb2dyZXNzLCBibGVuZFRvUGFzc3Rocm91Z2gpOworICAgIGlmICh0b09wLmJsZW5kaW5n
TmVlZHNSZW5kZXJlclNpemUoKSkKKyAgICAgICAgcmV0dXJuIHRvT3AuYmxlbmQoZnJvbU9wLCBw
cm9ncmVzcywgTGF5b3V0U2l6ZShzaXplKSwgYmxlbmRUb1Bhc3N0aHJvdWdoKTsKKyAgICByZXR1
cm4gdG9PcC5ibGVuZChmcm9tT3AsIHByb2dyZXNzLCBibGVuZFRvUGFzc3Rocm91Z2gpOwogfQog
Ci0KIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb25zIGFwcGx5RmlsdGVyQW5pbWF0aW9uKGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUg
cHJvZ3Jlc3MsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKIHsKICAgICAvLyBGaXJzdCBmcmFt
ZSBvZiBhbiBhbmltYXRpb24uCkBAIC01NSw5ICs1Miw5IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRp
b25zIGFwcGx5RmlsdGVyQW5pbWF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNv
bnN0CiAgICAgc2l6ZV90IHRvU2l6ZSA9IHRvLm9wZXJhdGlvbnMoKS5zaXplKCk7CiAgICAgc2l6
ZV90IHNpemUgPSBzdGQ6Om1heChmcm9tU2l6ZSwgdG9TaXplKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBm
cm9tT3AgPSAoaSA8IGZyb21TaXplKSA/IGZyb20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsK
LSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRv
Lm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRp
b24+IGJsZW5kZWRPcCA9IHRvT3AgPyBibGVuZEZ1bmMoZnJvbU9wLmdldCgpLCB0b09wLmdldCgp
LCBwcm9ncmVzcywgYm94U2l6ZSkgOiAoZnJvbU9wID8gYmxlbmRGdW5jKDAsIGZyb21PcC5nZXQo
KSwgcHJvZ3Jlc3MsIGJveFNpemUsIHRydWUpIDogMCk7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+IGZyb21PcCA9IChpIDwgZnJvbVNpemUpID8gZnJvbS5vcGVyYXRpb25zKClbaV0u
Z2V0KCkgOiBudWxscHRyOworICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiB0b09wID0g
KGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogbnVsbHB0cjsKKyAgICAg
ICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9wID0gdG9PcCA/IGJsZW5kRnVuYyhm
cm9tT3AuZ2V0KCksICp0b09wLCBwcm9ncmVzcywgYm94U2l6ZSkgOiAoZnJvbU9wID8gYmxlbmRG
dW5jKG51bGxwdHIsICpmcm9tT3AsIHByb2dyZXNzLCBib3hTaXplLCB0cnVlKSA6IG51bGxwdHIp
OwogICAgICAgICBpZiAoYmxlbmRlZE9wKQogICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMo
KS5hcHBlbmQoYmxlbmRlZE9wKTsKICAgICAgICAgZWxzZSB7CkBAIC03NCwxMSArNzEsOSBAQCBz
dGF0aWMgRmlsdGVyT3BlcmF0aW9ucyBhcHBseUZpbHRlckFuaW1hdGlvbihjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmcm9tLCBjb25zdAogCiBzdGF0aWMgYm9vbCBzaG91bGRSZXZlcnNlQW5pbWF0
aW9uVmFsdWUoQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbG9v
cENvdW50KQogewotICAgIGlmICgoKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvbkFsdGVybmF0ZSkgJiYgKGxvb3BDb3VudCAmIDEpKQotICAgICAgICB8fCAoKGRpcmVj
dGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpICYm
ICEobG9vcENvdW50ICYgMSkpCi0gICAgICAgIHx8IGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFu
aW1hdGlvbkRpcmVjdGlvblJldmVyc2UpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvbkFsdGVybmF0ZSAmJiBsb29wQ291bnQgJiAxKQorICAgICAgICB8fCAoZGlyZWN0aW9u
ID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSAmJiAhKGxv
b3BDb3VudCAmIDEpKQorICAgICAgICB8fCBkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRp
b25EaXJlY3Rpb25SZXZlcnNlOwogfQogCiBzdGF0aWMgZG91YmxlIG5vcm1hbGl6ZWRBbmltYXRp
b25WYWx1ZShkb3VibGUgcnVubmluZ1RpbWUsIGRvdWJsZSBkdXJhdGlvbiwgQW5pbWF0aW9uOjpB
bmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBkb3VibGUgaXRlcmF0aW9uQ291bnQpCkBAIC0x
NzksMTYgKzE3NCwxNiBAQCBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggYXBwbHlUcmFuc2Zv
cm1BbmltYXRpb24oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZgogICAgIC8vIEFuaW1hdGlv
biB0byAiLXdlYmtpdC10cmFuc2Zvcm06IG5vbmUiLgogICAgIGlmICghdG8uc2l6ZSgpKSB7CiAg
ICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZChmcm9tKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBibGVuZGVkLm9wZXJhdGlvbnMoKS5zaXplKCk7ICsraSkKLSAgICAg
ICAgICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZCgwLCBwcm9ncmVzcywgdHJ1ZSkt
PmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7CisgICAgICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDog
YmxlbmRlZC5vcGVyYXRpb25zKCkpCisgICAgICAgICAgICBvcGVyYXRpb24tPmJsZW5kKG51bGxw
dHIsIHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKICAgICAgICAgcmV0
dXJuIG1hdHJpeDsKICAgICB9CiAKICAgICAvLyBBbmltYXRpb24gZnJvbSAiLXdlYmtpdC10cmFu
c2Zvcm06IG5vbmUiLgogICAgIGlmICghZnJvbS5zaXplKCkpIHsKICAgICAgICAgVHJhbnNmb3Jt
T3BlcmF0aW9ucyBibGVuZGVkKHRvKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bGVuZGVkLm9wZXJhdGlvbnMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGJsZW5kZWQub3Bl
cmF0aW9ucygpW2ldLT5ibGVuZCgwLCAxLiAtIHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0cml4
LCBib3hTaXplKTsKKyAgICAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBibGVuZGVkLm9wZXJh
dGlvbnMoKSkKKyAgICAgICAgICAgIG9wZXJhdGlvbi0+YmxlbmQobnVsbHB0ciwgMS4wIC0gcHJv
Z3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOwogICAgICAgICByZXR1cm4gbWF0
cml4OwogICAgIH0KIApAQCAtMjA5LDc5ICsyMDQsMzUgQEAgc3RhdGljIGNvbnN0IFRpbWluZ0Z1
bmN0aW9uKiB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvblZh
bHUKICAgICByZXR1cm4gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6ZGVmYXVsdFRpbWluZ0Z1
bmN0aW9uKCk7CiB9CiAKLVRleHR1cmVNYXBwZXJBbmltYXRpb246OlRleHR1cmVNYXBwZXJBbmlt
YXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJh
bWVzLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9u
LCBkb3VibGUgc3RhcnRUaW1lLCBib29sIGxpc3RzTWF0Y2gpCitUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplLCBjb25z
dCBBbmltYXRpb24mIGFuaW1hdGlvbiwgZG91YmxlIHN0YXJ0VGltZSwgYm9vbCBsaXN0c01hdGNo
KQogICAgIDogbV9rZXlmcmFtZXMoa2V5ZnJhbWVzKQogICAgICwgbV9ib3hTaXplKGJveFNpemUp
Ci0gICAgLCBtX2FuaW1hdGlvbihBbmltYXRpb246OmNyZWF0ZSgqYW5pbWF0aW9uKSkKKyAgICAs
IG1fYW5pbWF0aW9uKEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW1hdGlvbikpCiAgICAgLCBtX25hbWUo
bmFtZS5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSA/IG5hbWUgOiBuYW1lLmlzb2xhdGVk
Q29weSgpKQogICAgICwgbV9saXN0c01hdGNoKGxpc3RzTWF0Y2gpCiAgICAgLCBtX3N0YXJ0VGlt
ZShzdGFydFRpbWUpCiAgICAgLCBtX3BhdXNlVGltZSgwKQogICAgICwgbV90b3RhbFJ1bm5pbmdU
aW1lKDApCiAgICAgLCBtX2xhc3RSZWZyZXNoZWRUaW1lKG1fc3RhcnRUaW1lKQotICAgICwgbV9z
dGF0ZShQbGF5aW5nU3RhdGUpCisgICAgLCBtX3N0YXRlKEFuaW1hdGlvblN0YXRlOjpQbGF5aW5n
KQogewogfQogCiBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
KGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIG90aGVyKQotICAgIDogbV9rZXlmcmFtZXMo
b3RoZXIua2V5ZnJhbWVzKCkpCi0gICAgLCBtX2JveFNpemUob3RoZXIuYm94U2l6ZSgpKQotICAg
ICwgbV9hbmltYXRpb24oQW5pbWF0aW9uOjpjcmVhdGUoKm90aGVyLmFuaW1hdGlvbigpKSkKLSAg
ICAsIG1fbmFtZShvdGhlci5uYW1lKCkuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkgPyBv
dGhlci5uYW1lKCkgOiBvdGhlci5uYW1lKCkuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX2xpc3Rz
TWF0Y2gob3RoZXIubGlzdHNNYXRjaCgpKQotICAgICwgbV9zdGFydFRpbWUob3RoZXIuc3RhcnRU
aW1lKCkpCi0gICAgLCBtX3BhdXNlVGltZShvdGhlci5wYXVzZVRpbWUoKSkKKyAgICA6IG1fa2V5
ZnJhbWVzKG90aGVyLm1fa2V5ZnJhbWVzKQorICAgICwgbV9ib3hTaXplKG90aGVyLm1fYm94U2l6
ZSkKKyAgICAsIG1fYW5pbWF0aW9uKEFuaW1hdGlvbjo6Y3JlYXRlKCpvdGhlci5tX2FuaW1hdGlv
bikpCisgICAgLCBtX25hbWUob3RoZXIubV9uYW1lLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVh
ZCgpID8gb3RoZXIubV9uYW1lIDogb3RoZXIubV9uYW1lLmlzb2xhdGVkQ29weSgpKQorICAgICwg
bV9saXN0c01hdGNoKG90aGVyLm1fbGlzdHNNYXRjaCkKKyAgICAsIG1fc3RhcnRUaW1lKG90aGVy
Lm1fc3RhcnRUaW1lKQorICAgICwgbV9wYXVzZVRpbWUob3RoZXIubV9wYXVzZVRpbWUpCiAgICAg
LCBtX3RvdGFsUnVubmluZ1RpbWUob3RoZXIubV90b3RhbFJ1bm5pbmdUaW1lKQogICAgICwgbV9s
YXN0UmVmcmVzaGVkVGltZShvdGhlci5tX2xhc3RSZWZyZXNoZWRUaW1lKQotICAgICwgbV9zdGF0
ZShvdGhlci5zdGF0ZSgpKQorICAgICwgbV9zdGF0ZShvdGhlci5tX3N0YXRlKQogewogfQogCi12
b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb246OmFwcGx5SW50ZXJuYWwoQ2xpZW50KiBjbGllbnQs
IGNvbnN0IEFuaW1hdGlvblZhbHVlJiBmcm9tLCBjb25zdCBBbmltYXRpb25WYWx1ZSYgdG8sIGZs
b2F0IHByb2dyZXNzKQotewotICAgIHN3aXRjaCAobV9rZXlmcmFtZXMucHJvcGVydHkoKSkgewot
ICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgICAgIGNsaWVudC0+c2V0QW5p
bWF0ZWRPcGFjaXR5KGFwcGx5T3BhY2l0eUFuaW1hdGlvbigoc3RhdGljX2Nhc3Q8Y29uc3QgRmxv
YXRBbmltYXRpb25WYWx1ZSY+KGZyb20pLnZhbHVlKCkpLCAoc3RhdGljX2Nhc3Q8Y29uc3QgRmxv
YXRBbmltYXRpb25WYWx1ZSY+KHRvKS52YWx1ZSgpKSwgcHJvZ3Jlc3MpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybToKLSAgICAgICAgY2xpZW50
LT5zZXRBbmltYXRlZFRyYW5zZm9ybShhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihzdGF0aWNfY2Fz
dDxjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSY+KGZyb20pLnZhbHVlKCksIHN0YXRpY19j
YXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlJj4odG8pLnZhbHVlKCksIHByb2dyZXNz
LCBtX2JveFNpemUsIG1fbGlzdHNNYXRjaCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBB
bmltYXRlZFByb3BlcnR5RmlsdGVyOgotICAgICAgICBjbGllbnQtPnNldEFuaW1hdGVkRmlsdGVy
cyhhcHBseUZpbHRlckFuaW1hdGlvbihzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25W
YWx1ZSY+KGZyb20pLnZhbHVlKCksIHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZh
bHVlJj4odG8pLnZhbHVlKCksIHByb2dyZXNzLCBtX2JveFNpemUpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0K
LQotYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKHN0YXRlKCkgIT0gU3RvcHBlZFN0YXRlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IHJldHVybiBtX2FuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpOwotfQotCi1ib29sIFRleHR1cmVN
YXBwZXJBbmltYXRpb25zOjpoYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVy
dHlJRCB0eXBlKSBjb25zdAotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRp
b25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0uaXNBY3RpdmUo
KSAmJiBtX2FuaW1hdGlvbnNbaV0ucHJvcGVydHkoKSA9PSB0eXBlKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAotewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChtX2FuaW1hdGlvbnNbaV0uc3RhdGUoKSA9PSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpQbGF5
aW5nU3RhdGUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6YXBwbHkoQ2xpZW50KiBj
bGllbnQpCit2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb246OmFwcGx5KENsaWVudCYgY2xpZW50
KQogewogICAgIGlmICghaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjkwLDcgKzI0
MSw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6YXBwbHkoQ2xpZW50KiBjbGllbnQp
CiAgICAgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZSh0
b3RhbFJ1bm5pbmdUaW1lLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSwgbV9hbmltYXRpb24tPmRp
cmVjdGlvbigpLCBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSk7CiAKICAgICBpZiAobV9h
bmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudElu
ZmluaXRlICYmIHRvdGFsUnVubmluZ1RpbWUgPj0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgKiBt
X2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSkgewotICAgICAgICBzZXRTdGF0ZShTdG9wcGVk
U3RhdGUpOworICAgICAgICBtX3N0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0b3BwZWQ7CisgICAg
ICAgIG1fcGF1c2VUaW1lID0gMDsKICAgICAgICAgaWYgKG1fYW5pbWF0aW9uLT5maWxsc0Zvcndh
cmRzKCkpCiAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVkQW5pbWF0aW9u
VmFsdWVGb3JGaWxsc0ZvcndhcmRzKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpLCBtX2Fu
aW1hdGlvbi0+ZGlyZWN0aW9uKCkpOwogICAgIH0KQEAgLTMyNSw5ICsyNzcsMjMgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphcHBseShDbGllbnQqIGNsaWVudCkKICAgICB9CiB9CiAK
K3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6cGF1c2UoZG91YmxlIHRpbWUpCit7CisgICAg
bV9zdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWQ7CisgICAgbV9wYXVzZVRpbWUgPSB0aW1l
OworfQorCit2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb246OnJlc3VtZSgpCit7CisgICAgbV9z
dGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpQbGF5aW5nOworICAgIG1fcGF1c2VUaW1lID0gMDsKKyAg
ICBtX3RvdGFsUnVubmluZ1RpbWUgPSBtX3BhdXNlVGltZTsKKyAgICBtX2xhc3RSZWZyZXNoZWRU
aW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Cit9CisKIGRvdWJsZSBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uOjpjb21wdXRlVG90YWxSdW5uaW5nVGltZSgpCiB7Ci0gICAgaWYgKHN0
YXRlKCkgPT0gUGF1c2VkU3RhdGUpCisgICAgaWYgKG1fc3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6
OlBhdXNlZCkKICAgICAgICAgcmV0dXJuIG1fcGF1c2VUaW1lOwogCiAgICAgZG91YmxlIG9sZExh
c3RSZWZyZXNoZWRUaW1lID0gbV9sYXN0UmVmcmVzaGVkVGltZTsKQEAgLTMzNiw3NCArMzAyLDk2
IEBAIGRvdWJsZSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpjb21wdXRlVG90YWxSdW5uaW5nVGlt
ZSgpCiAgICAgcmV0dXJuIG1fdG90YWxSdW5uaW5nVGltZTsKIH0KIAotdm9pZCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uOjpwYXVzZShkb3VibGUgdGltZSkKK2Jvb2wgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbjo6aXNBY3RpdmUoKSBjb25zdAogewotICAgIHNldFN0YXRlKFBhdXNlZFN0YXRlKTsKLSAg
ICBtX3BhdXNlVGltZSA9IHRpbWU7CisgICAgcmV0dXJuIG1fc3RhdGUgIT0gQW5pbWF0aW9uU3Rh
dGU6OlN0b3BwZWQgfHwgbV9hbmltYXRpb24tPmZpbGxzRm9yd2FyZHMoKTsKIH0KIAotdm9pZCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpyZXN1bWUoKQordm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uOjphcHBseUludGVybmFsKENsaWVudCYgY2xpZW50LCBjb25zdCBBbmltYXRpb25WYWx1ZSYg
ZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFsdWUmIHRvLCBmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBz
ZXRTdGF0ZShQbGF5aW5nU3RhdGUpOwotICAgIG1fdG90YWxSdW5uaW5nVGltZSA9IG1fcGF1c2VU
aW1lOwotICAgIG1fbGFzdFJlZnJlc2hlZFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWUoKTsKKyAgICBzd2l0Y2ggKG1fa2V5ZnJhbWVzLnByb3BlcnR5KCkpIHsKKyAgICBjYXNlIEFu
aW1hdGVkUHJvcGVydHlPcGFjaXR5OgorICAgICAgICBjbGllbnQuc2V0QW5pbWF0ZWRPcGFjaXR5
KGFwcGx5T3BhY2l0eUFuaW1hdGlvbigoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25W
YWx1ZSY+KGZyb20pLnZhbHVlKCkpLCAoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25W
YWx1ZSY+KHRvKS52YWx1ZSgpKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybToKKyAgICAgICAgY2xpZW50LnNldEFuaW1hdGVk
VHJhbnNmb3JtKGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKHN0YXRpY19jYXN0PGNvbnN0IFRyYW5z
Zm9ybUFuaW1hdGlvblZhbHVlJj4oZnJvbSkudmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJh
bnNmb3JtQW5pbWF0aW9uVmFsdWUmPih0bykudmFsdWUoKSwgcHJvZ3Jlc3MsIG1fYm94U2l6ZSwg
bV9saXN0c01hdGNoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVy
dHlGaWx0ZXI6CisgICAgICAgIGNsaWVudC5zZXRBbmltYXRlZEZpbHRlcnMoYXBwbHlGaWx0ZXJB
bmltYXRpb24oc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUmPihmcm9tKS52
YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KHRvKS52YWx1
ZSgpLCBwcm9ncmVzcywgbV9ib3hTaXplKSk7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIHZvaWQgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbnM6OmFkZChjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmlt
YXRpb24pCiB7CiAgICAgLy8gUmVtb3ZlIHRoZSBvbGQgc3RhdGUgaWYgd2UgYXJlIHJlc3VtaW5n
IGEgcGF1c2VkIGFuaW1hdGlvbi4KLSAgICByZW1vdmUoYW5pbWF0aW9uLm5hbWUoKSwgYW5pbWF0
aW9uLnByb3BlcnR5KCkpOworICAgIHJlbW92ZShhbmltYXRpb24ubmFtZSgpLCBhbmltYXRpb24u
a2V5ZnJhbWVzKCkucHJvcGVydHkoKSk7CiAKICAgICBtX2FuaW1hdGlvbnMuYXBwZW5kKGFuaW1h
dGlvbik7CiB9CiAKK3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnJlbW92ZShjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFt
ZV0gKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbikgeworICAgICAgICBy
ZXR1cm4gYW5pbWF0aW9uLm5hbWUoKSA9PSBuYW1lOworICAgIH0pOworfQorCit2b2lkIFRleHR1
cmVNYXBwZXJBbmltYXRpb25zOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBBbmltYXRlZFBy
b3BlcnR5SUQgcHJvcGVydHkpCit7CisgICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1hdGNoaW5n
KFsmbmFtZSwgcHJvcGVydHldIChjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRp
b24pIHsKKyAgICAgICAgcmV0dXJuIGFuaW1hdGlvbi5uYW1lKCkgPT0gbmFtZSAmJiBhbmltYXRp
b24ua2V5ZnJhbWVzKCkucHJvcGVydHkoKSA9PSBwcm9wZXJ0eTsKKyAgICB9KTsKK30KKwogdm9p
ZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cGF1c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3Vi
bGUgb2Zmc2V0KQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0ubmFtZSgpID09IG5hbWUp
Ci0gICAgICAgICAgICBtX2FuaW1hdGlvbnNbaV0ucGF1c2Uob2Zmc2V0KTsKKyAgICBmb3IgKGF1
dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykgeworICAgICAgICBpZiAoYW5pbWF0aW9uLm5h
bWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgYW5pbWF0aW9uLnBhdXNlKG9mZnNldCk7CiAgICAg
fQogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpzdXNwZW5kKGRvdWJsZSBvZmZz
ZXQpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIG1fYW5pbWF0aW9uc1tpXS5wYXVzZShvZmZzZXQpOworICAgIGZvciAoYXV0
byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25zKQorICAgICAgICBhbmltYXRpb24ucGF1c2Uob2Zm
c2V0KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cmVzdW1lKCkKIHsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAg
ICAgbV9hbmltYXRpb25zW2ldLnJlc3VtZSgpOworICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDog
bV9hbmltYXRpb25zKQorICAgICAgICBhbmltYXRpb24ucmVzdW1lKCk7CiB9CiAKLXZvaWQgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbnM6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIFRl
eHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpDbGll
bnQmIGNsaWVudCkKIHsKLSAgICBtX2FuaW1hdGlvbnMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZuYW1l
XSAoY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7Ci0gICAgICAgIHJl
dHVybiBhbmltYXRpb24ubmFtZSgpID09IG5hbWU7Ci0gICAgfSk7CisgICAgZm9yIChhdXRvJiBh
bmltYXRpb24gOiBtX2FuaW1hdGlvbnMpCisgICAgICAgIGFuaW1hdGlvbi5hcHBseShjbGllbnQp
OwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpyZW1vdmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkpCitib29sIFRleHR1cmVNYXBwZXJB
bmltYXRpb25zOjpoYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0
eXBlKSBjb25zdAogewotICAgIG1fYW5pbWF0aW9ucy5yZW1vdmVBbGxNYXRjaGluZyhbJm5hbWUs
IHByb3BlcnR5XSAoY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7Ci0g
ICAgICAgIHJldHVybiBhbmltYXRpb24ubmFtZSgpID09IG5hbWUgJiYgYW5pbWF0aW9uLnByb3Bl
cnR5KCkgPT0gcHJvcGVydHk7Ci0gICAgfSk7CisgICAgcmV0dXJuIHN0ZDo6YW55X29mKG1fYW5p
bWF0aW9ucy5iZWdpbigpLCBtX2FuaW1hdGlvbnMuZW5kKCksCisgICAgICAgIFsmdHlwZV0oY29u
c3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7IHJldHVybiBhbmltYXRpb24u
aXNBY3RpdmUoKSAmJiBhbmltYXRpb24ua2V5ZnJhbWVzKCkucHJvcGVydHkoKSA9PSB0eXBlOyB9
KTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6YXBwbHkoVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbjo6Q2xpZW50KiBjbGllbnQpCitib29sIFRleHR1cmVNYXBwZXJBbmltYXRpb25z
OjpoYXNSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYW5pbWF0aW9uc1tpXS5h
cHBseShjbGllbnQpOworICAgIHJldHVybiBzdGQ6OmFueV9vZihtX2FuaW1hdGlvbnMuYmVnaW4o
KSwgbV9hbmltYXRpb25zLmVuZCgpLAorICAgICAgICBbXShjb25zdCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uJiBhbmltYXRpb24pIHsgcmV0dXJuIGFuaW1hdGlvbi5zdGF0ZSgpID09IFRleHR1cmVN
YXBwZXJBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpQbGF5aW5nOyB9KTsKIH0KIAogVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbnMgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1h
dGlvbnMoKSBjb25zdAogewogICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIGFjdGl2ZTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAobV9hbmltYXRpb25zW2ldLmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBhY3RpdmUu
YWRkKG1fYW5pbWF0aW9uc1tpXSk7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1h
dGlvbnMpIHsKKyAgICAgICAgaWYgKGFuaW1hdGlvbi5pc0FjdGl2ZSgpKQorICAgICAgICAgICAg
YWN0aXZlLmFkZChhbmltYXRpb24pOwogICAgIH0KICAgICByZXR1cm4gYWN0aXZlOwogfQotfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaApp
bmRleCAzNzZiYzJkY2UyMjBlM2Y5NWM5YjgzNWI4NDFjNGRkN2U4ZWVmNzE5Li4wYmJmNTFlZjE0
N2VjYzAxYjhhZTY1YmM1MTg2NTk0YjNiYmExYTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5p
bWF0aW9uLmgKQEAgLTIxLDE1ICsyMSwxNSBAQAogI2RlZmluZSBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uX2gKIAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFRyYW5zZm9y
bWF0aW9uTWF0cml4OworCiBjbGFzcyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uIHsKIHB1YmxpYzoK
LSAgICBlbnVtIEFuaW1hdGlvblN0YXRlIHsgUGxheWluZ1N0YXRlLCBQYXVzZWRTdGF0ZSwgU3Rv
cHBlZFN0YXRlIH07CisgICAgZW51bSBjbGFzcyBBbmltYXRpb25TdGF0ZSB7IFBsYXlpbmcsIFBh
dXNlZCwgU3RvcHBlZCB9OworCiAgICAgY2xhc3MgQ2xpZW50IHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRlZFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpID0gMDsKQEAgLTQwLDMwICs0MCwyMiBAQCBwdWJsaWM6CiAgICAgVGV4dHVyZU1h
cHBlckFuaW1hdGlvbigpCiAgICAgICAgIDogbV9rZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eUlu
dmFsaWQpCiAgICAgeyB9Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBTdHJpbmcm
LCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEFuaW1h
dGlvbiosIGRvdWJsZSwgYm9vbCk7CisgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBT
dHJpbmcmLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEFuaW1hdGlvbiYsIGRvdWJsZSwgYm9vbCk7CiAgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbihj
b25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJik7Ci0gICAgdm9pZCBhcHBseShDbGllbnQqKTsK
KworICAgIHZvaWQgYXBwbHkoQ2xpZW50Jik7CiAgICAgdm9pZCBwYXVzZShkb3VibGUpOwogICAg
IHZvaWQgcmVzdW1lKCk7Ci0gICAgZG91YmxlIGNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKCk7Ci0g
ICAgQW5pbWF0aW9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0gICAg
dm9pZCBzZXRTdGF0ZShBbmltYXRpb25TdGF0ZSBzLCBkb3VibGUgcGF1c2VUaW1lID0gMCkKLSAg
ICB7Ci0gICAgICAgIG1fc3RhdGUgPSBzOwotICAgICAgICBtX3BhdXNlVGltZSA9IHBhdXNlVGlt
ZTsKLSAgICB9Ci0gICAgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1
cm4gbV9rZXlmcmFtZXMucHJvcGVydHkoKTsgfQogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsK
LSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIEZsb2F0U2l6
ZSBib3hTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ib3hTaXplOyB9Ci0gICAgZG91YmxlIHN0YXJ0
VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9Ci0gICAgZG91YmxlIHBhdXNlVGlt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VUaW1lOyB9Ci0gICAgUGFzc1JlZlB0cjxBbmltYXRp
b24+IGFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uLmdldCgpOyB9CisKICAg
ICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzKCkgY29uc3QgeyByZXR1cm4gbV9r
ZXlmcmFtZXM7IH0KLSAgICBib29sIGxpc3RzTWF0Y2goKSBjb25zdCB7IHJldHVybiBtX2xpc3Rz
TWF0Y2g7IH0KKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7
IH0KKyAgICBBbmltYXRpb25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0K
IAogcHJpdmF0ZToKLSAgICB2b2lkIGFwcGx5SW50ZXJuYWwoQ2xpZW50KiwgY29uc3QgQW5pbWF0
aW9uVmFsdWUmIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlJiB0bywgZmxvYXQgcHJvZ3Jlc3Mp
OworICAgIHZvaWQgYXBwbHlJbnRlcm5hbChDbGllbnQmLCBjb25zdCBBbmltYXRpb25WYWx1ZSYg
ZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFsdWUmIHRvLCBmbG9hdCBwcm9ncmVzcyk7CisgICAgZG91
YmxlIGNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKCk7CisKICAgICBLZXlmcmFtZVZhbHVlTGlzdCBt
X2tleWZyYW1lczsKICAgICBGbG9hdFNpemUgbV9ib3hTaXplOwogICAgIFJlZlB0cjxBbmltYXRp
b24+IG1fYW5pbWF0aW9uOwpAQCAtNzgsNyArNzAsNyBAQCBwcml2YXRlOgogCiBjbGFzcyBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9ucyB7CiBwdWJsaWM6Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlv
bnMoKSB7IH0KKyAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucygpID0gZGVmYXVsdDsKIAogICAg
IHZvaWQgYWRkKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mKTsKICAgICB2b2lkIHJlbW92
ZShjb25zdCBTdHJpbmcmIG5hbWUpOwpAQCAtODYsNyArNzgsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBwYXVzZShjb25zdCBTdHJpbmcmLCBkb3VibGUpOwogICAgIHZvaWQgc3VzcGVuZChkb3VibGUp
OwogICAgIHZvaWQgcmVzdW1lKCk7Ci0gICAgdm9pZCBhcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uOjpDbGllbnQqKTsKKworICAgIHZvaWQgYXBwbHkoVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6
Q2xpZW50Jik7CisKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlv
bnMuaXNFbXB0eSgpOyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1h
dGlvbnMuc2l6ZSgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFRleHR1cmVNYXBwZXJBbmltYXRpb24+
JiBhbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zOyB9CkBAIC05NCw3ICs4
OCw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdDsK
ICAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eUlEIHR5
cGUpIGNvbnN0OwotCiAgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgZ2V0QWN0aXZlQW5pbWF0
aW9ucygpIGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAppbmRl
eCBmYzc3MTA2MmUxYzAyYWY3MGYzZjNjMzJkNjM3ZmNkMDNlZjg3ZmYxLi44NjM2ZTBkMWNiYTJm
ODliYmVmZDg5YjQ3MDEzMzkyNjRkZmI0ZmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNw
cApAQCAtNjU3LDcgKzY1Nyw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjphcHBseUFuaW1h
dGlvbnNSZWN1cnNpdmVseSgpCiAKIHZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQW5pbWF0
aW9ucygpCiB7Ci0gICAgbV9hbmltYXRpb25zLmFwcGx5KHRoaXMpOworICAgIG1fYW5pbWF0aW9u
cy5hcHBseSgqdGhpcyk7CiAgICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9u
c09mVHlwZShBbmltYXRlZFByb3BlcnR5VHJhbnNmb3JtKSkKICAgICAgICAgbV9jdXJyZW50VHJh
bnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKG1fc3RhdGUudHJhbnNmb3JtKTsKICAgICBpZiAoIW1f
YW5pbWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlPcGFj
aXR5KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5jcHAKaW5kZXggMjljNjc0MThiMjc3NWFjMjkxYWNlMWEyZDE0NTMzNDk3NDUyYjA4
MC4uZjNlMzk1MzM3MzUwY2M5NmRhNWU0YWYxZmM0M2Q4MjJiODY1NTY4ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKQEAg
LTExODUsNyArMTE4NSw3IEBAIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRBbmlt
YXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKICAgICAgICAgbGlzdHNN
YXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZUxpc3QsIGlnbm9yZWRIYXNC
aWdSb3RhdGlvbikgPj0gMDsKIAogICAgIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZSA9IG1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gZGVsYXlBc05lZ2F0aXZlVGltZU9mZnNldDsKLSAg
ICBtX2FuaW1hdGlvbnMuYWRkKFRleHR1cmVNYXBwZXJBbmltYXRpb24oa2V5ZnJhbWVzTmFtZSwg
dmFsdWVMaXN0LCBib3hTaXplLCBhbmltLCBtX2xhc3RBbmltYXRpb25TdGFydFRpbWUsIGxpc3Rz
TWF0Y2gpKTsKKyAgICBtX2FuaW1hdGlvbnMuYWRkKFRleHR1cmVNYXBwZXJBbmltYXRpb24oa2V5
ZnJhbWVzTmFtZSwgdmFsdWVMaXN0LCBib3hTaXplLCAqYW5pbSwgbV9sYXN0QW5pbWF0aW9uU3Rh
cnRUaW1lLCBsaXN0c01hdGNoKSk7CiAgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIuc3RhcnRP
bmVTaG90KDApOwogICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKICAgICByZXR1cm4gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267362</attachid>
            <date>2015-12-15 03:33:50 -0800</date>
            <delta_ts>2015-12-17 07:12:35 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-152112-20151215033312.patch</filename>
            <type>text/plain</type>
            <size>25960</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0MDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWMyMDdjNDEzOGY0ZTA1
NDg1YTdiNWFlMWJhMGFlN2ZkNDIwMDcxZC4uYWYyY2VjMDcwMDM1NzRkZmE5MmM5OGY5NjMzYTIw
ZDkwOWQ5MjFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDE1LTEyLTE1ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbVGV4TWFwXSBDbGVh
biB1cCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMTEyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQ2xlYW4gdXAgdGhlIFRl
eHR1cmVNYXBwZXJBbmltYXRpb24gY2xhc3MuIFR1cm4gQW5pbWF0aW9uU3RhdGUgaW50byBhbiBl
bnVtCisgICAgICAgIGNsYXNzLiBVc2UgcmVmZXJlbmNlcyBmb3Igbm9uLW51bGwgcG9pbnRlciBw
YXJhbWV0ZXJzIHRvIG9uZSB2ZXJzaW9uIG9mIHRoZQorICAgICAgICBjb25zdHJ1Y3RvciBhbmQg
dGhlIGFwcGx5KCkgYW5kIGFwcGx5SW50ZXJuYWwoKSBtZXRob2RzLiBSZW1vdmUgdW5uZWNlc3Nh
cnkKKyAgICAgICAgcHVibGljIG1ldGhvZHMgYW5kIHJlb3JkZXIgdGhlIHJlbWFpbmluZyBvbmVz
IGludG8gc29tZXRoaW5nIG1vcmUgc2Vuc2libGUuCisgICAgICAgIEluIHRlcm1zIG9mIHRoZSBp
bXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzLCB0aGUgbWV0aG9kcyBhcmUgbW92ZWQgYXJvdW5k
IHRvCisgICAgICAgIGZvbGxvdyB0aGUgb3JkZXIgb2YgZGVjbGFyYXRpb25zLCBhbG9uZyB3aXRo
IHNvbWUgc21hbGwgY2xlYW51cHMgYW5kIGltcHJvdmVtZW50cworICAgICAgICBhcHBsaWVkLgor
CisgICAgICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIGNsYXNzIGlzIGFsc28gcmVmcmVzaGVk
LiBUaGUgY29uc3RydWN0b3IgaXMgZGVmYXVsdGVkLAorICAgICAgICBhbmQgdGhlIG1ldGhvZCBp
bXBsZW1lbnRhdGlvbnMgYXJlIHJlb3JkZXJlZCBhIGJpdCBhbmQgYWxzbyBhZGp1c3RlZCB0byB1
c2UgdGhlCisgICAgICAgIHJhbmdlLWJhc2VkIGZvci1sb29wcyBhbmQgc29tZSBTVEwgdXRpbGl0
aWVzLgorCisgICAgICAgIFN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGltcGxlbWVudGF0aW9uIGZp
bGUgYXJlIGFsc28gdXBkYXRlZCB0byB1c2UgcmFuZ2UtYmFzZWQKKyAgICAgICAgZm9yLWxvb3Bz
LCByZWZlcmVuY2VzIGFuZCBudWxscHRycyB3aGVyZSBwb3NzaWJsZS4KKworICAgICAgICBUaGVy
ZSdzIG5vIGNoYW5nZSBpbiBiZWhhdmlvciBhcyB0aGlzIGlzIGp1c3QgYSByZWZhY3RvcmluZy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpibGVuZEZ1bmMpOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwbHlGaWx0ZXJBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6c2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5
VHJhbnNmb3JtQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmlt
YXRpb246OlRleHR1cmVNYXBwZXJBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckFuaW1hdGlvbjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckFuaW1hdGlvbjo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1h
dGlvbjo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb246
OmNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJBbmltYXRpb246OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJB
bmltYXRpb246OmFwcGx5SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckFuaW1hdGlvbnM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uczo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25z
OjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6c3Vz
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cmVzdW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0
aW9uc09mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6
aGFzUnVubmluZ0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFu
aW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJBbmltYXRpb246OnN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJB
bmltYXRpb246OnNldFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJBbmltYXRpb246OnByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJBbmltYXRpb246OmJveFNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6c3RhcnRUaW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb246OnBhdXNlVGltZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphbmltYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6bGlzdHNNYXRj
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6
VGV4dHVyZU1hcHBlckFuaW1hdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZEFuaW1hdGlv
bik6CisKIDIwMTUtMTItMTQgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlc291cmNlVXNhZ2VPdmVybGF5IHNob3VsZCBzaG93IEdDIHRpbWVycy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGNlZGE4MmRmMjQ2NjQ0
MWZhNmZiNDYyMmQwNzk1YTg1YWJhMDBiYWYuLjc2YTNkOTg0YWQ1OGU1OWRmOGIzNzEzMTJiZjE5
MDRmMWQxODA3MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNw
cApAQCAtNTc0LDcgKzU3NCw3IEBAIGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFk
ZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0CiAgICAgICAgIGxp
c3RzTWF0Y2ggPSB2YWxpZGF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVMaXN0LCBoYXNCaWdS
b3RhdGlvbikgPj0gMDsKIAogICAgIGNvbnN0IGRvdWJsZSBjdXJyZW50VGltZSA9IG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpOwotICAgIG1fYW5pbWF0aW9ucy5hZGQoVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIGFuaW0sIGN1cnJl
bnRUaW1lIC0gdGltZU9mZnNldCwgbGlzdHNNYXRjaCkpOworICAgIG1fYW5pbWF0aW9ucy5hZGQo
VGV4dHVyZU1hcHBlckFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUs
ICphbmltLCBsaXN0c01hdGNoLCBjdXJyZW50VGltZSAtIHRpbWVPZmZzZXQsIDAsIFRleHR1cmVN
YXBwZXJBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpQbGF5aW5nKSk7CiAgICAgLy8gbV9hbmlt
YXRpb25TdGFydFRpbWUgaXMgdGhlIHRpbWUgb2YgdGhlIGZpcnN0IHJlYWwgZnJhbWUgb2YgYW5p
bWF0aW9uLCBub3cgb3IgZGVsYXllZCBieSBhIG5lZ2F0aXZlIG9mZnNldC4KICAgICBpZiAodGlt
ZU9mZnNldCA+IDApCiAgICAgICAgIG1fYW5pbWF0aW9uU3RhcnRUaW1lID0gY3VycmVudFRpbWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAKaW5kZXggMjRlZDU0MjMxNWExNDU2
MmIyMjIxOTRhYTliZjZmZWEzNzQ0OTliMi4uMGJlZGQwYTU3NGMyNDk5ZTVlM2FjZTkyN2I1NDEx
Zjk0MjAxYTg1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcApAQCAtMjYs
MTYgKzI2LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBQYXNz
UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKEZpbHRlck9wZXJhdGlvbiogZnJvbU9w
LCBGaWx0ZXJPcGVyYXRpb24qIHRvT3AsIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQorc3RhdGljIFJlZlB0cjxG
aWx0ZXJPcGVyYXRpb24+IGJsZW5kRnVuYyhGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVy
T3BlcmF0aW9uJiB0b09wLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
Ym9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkKIHsKLSAgICBBU1NFUlQodG9PcCk7Ci0g
ICAgaWYgKHRvT3AtPmJsZW5kaW5nTmVlZHNSZW5kZXJlclNpemUoKSkKLSAgICAgICAgcmV0dXJu
IHRvT3AtPmJsZW5kKGZyb21PcCwgcHJvZ3Jlc3MsIExheW91dFNpemUoc2l6ZSksIGJsZW5kVG9Q
YXNzdGhyb3VnaCk7Ci0KLSAgICByZXR1cm4gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcywg
YmxlbmRUb1Bhc3N0aHJvdWdoKTsKKyAgICBpZiAodG9PcC5ibGVuZGluZ05lZWRzUmVuZGVyZXJT
aXplKCkpCisgICAgICAgIHJldHVybiB0b09wLmJsZW5kKGZyb21PcCwgcHJvZ3Jlc3MsIExheW91
dFNpemUoc2l6ZSksIGJsZW5kVG9QYXNzdGhyb3VnaCk7CisgICAgcmV0dXJuIHRvT3AuYmxlbmQo
ZnJvbU9wLCBwcm9ncmVzcywgYmxlbmRUb1Bhc3N0aHJvdWdoKTsKIH0KIAotCiBzdGF0aWMgRmls
dGVyT3BlcmF0aW9ucyBhcHBseUZpbHRlckFuaW1hdGlvbihjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dyZXNzLCBjb25z
dCBGbG9hdFNpemUmIGJveFNpemUpCiB7CiAgICAgLy8gRmlyc3QgZnJhbWUgb2YgYW4gYW5pbWF0
aW9uLgpAQCAtNTUsOSArNTIsOSBAQCBzdGF0aWMgRmlsdGVyT3BlcmF0aW9ucyBhcHBseUZpbHRl
ckFuaW1hdGlvbihjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdAogICAgIHNpemVf
dCB0b1NpemUgPSB0by5vcGVyYXRpb25zKCkuc2l6ZSgpOwogICAgIHNpemVfdCBzaXplID0gc3Rk
OjptYXgoZnJvbVNpemUsIHRvU2l6ZSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyBpKyspIHsKLSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZnJvbU9wID0gKGkgPCBm
cm9tU2l6ZSkgPyBmcm9tLm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7Ci0gICAgICAgIFJlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+IHRvT3AgPSAoaSA8IHRvU2l6ZSkgPyB0by5vcGVyYXRpb25zKClb
aV0uZ2V0KCkgOiAwOwotICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZGVkT3Ag
PSB0b09wID8gYmxlbmRGdW5jKGZyb21PcC5nZXQoKSwgdG9PcC5nZXQoKSwgcHJvZ3Jlc3MsIGJv
eFNpemUpIDogKGZyb21PcCA/IGJsZW5kRnVuYygwLCBmcm9tT3AuZ2V0KCksIHByb2dyZXNzLCBi
b3hTaXplLCB0cnVlKSA6IDApOworICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9t
T3AgPSAoaSA8IGZyb21TaXplKSA/IGZyb20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogbnVsbHB0
cjsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gdG9PcCA9IChpIDwgdG9TaXplKSA/
IHRvLm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IG51bGxwdHI7CisgICAgICAgIFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyBibGVuZEZ1bmMoZnJvbU9wLmdldCgpLCAq
dG9PcCwgcHJvZ3Jlc3MsIGJveFNpemUpIDogKGZyb21PcCA/IGJsZW5kRnVuYyhudWxscHRyLCAq
ZnJvbU9wLCBwcm9ncmVzcywgYm94U2l6ZSwgdHJ1ZSkgOiBudWxscHRyKTsKICAgICAgICAgaWYg
KGJsZW5kZWRPcCkKICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5k
ZWRPcCk7CiAgICAgICAgIGVsc2UgewpAQCAtNzQsMTEgKzcxLDkgQEAgc3RhdGljIEZpbHRlck9w
ZXJhdGlvbnMgYXBwbHlGaWx0ZXJBbmltYXRpb24oY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJv
bSwgY29uc3QKIAogc3RhdGljIGJvb2wgc2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZhbHVlKEFuaW1h
dGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgaW50IGxvb3BDb3VudCkKIHsKLSAg
ICBpZiAoKChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5h
dGUpICYmIChsb29wQ291bnQgJiAxKSkKLSAgICAgICAgfHwgKChkaXJlY3Rpb24gPT0gQW5pbWF0
aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlKSAmJiAhKGxvb3BDb3VudCAm
IDEpKQotICAgICAgICB8fCBkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rp
b25SZXZlcnNlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5h
dGUgJiYgbG9vcENvdW50ICYgMSkKKyAgICAgICAgfHwgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246
OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UgJiYgIShsb29wQ291bnQgJiAxKSkK
KyAgICAgICAgfHwgZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2
ZXJzZTsKIH0KIAogc3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUoZG91Ymxl
IHJ1bm5pbmdUaW1lLCBkb3VibGUgZHVyYXRpb24sIEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbiwgZG91YmxlIGl0ZXJhdGlvbkNvdW50KQpAQCAtMTc5LDE2ICsxNzQsMTYg
QEAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGYKICAgICAvLyBBbmltYXRpb24gdG8gIi13ZWJraXQt
dHJhbnNmb3JtOiBub25lIi4KICAgICBpZiAoIXRvLnNpemUoKSkgewogICAgICAgICBUcmFuc2Zv
cm1PcGVyYXRpb25zIGJsZW5kZWQoZnJvbSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxlbmRlZC5vcGVyYXRpb25zKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBibGVuZGVk
Lm9wZXJhdGlvbnMoKVtpXS0+YmxlbmQoMCwgcHJvZ3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgs
IGJveFNpemUpOworICAgICAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IGJsZW5kZWQub3BlcmF0
aW9ucygpKQorICAgICAgICAgICAgb3BlcmF0aW9uLT5ibGVuZChudWxscHRyLCBwcm9ncmVzcywg
dHJ1ZSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7CiAgICAgICAgIHJldHVybiBtYXRyaXg7CiAg
ICAgfQogCiAgICAgLy8gQW5pbWF0aW9uIGZyb20gIi13ZWJraXQtdHJhbnNmb3JtOiBub25lIi4K
ICAgICBpZiAoIWZyb20uc2l6ZSgpKSB7CiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxl
bmRlZCh0byk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxlbmRlZC5vcGVyYXRp
b25zKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBibGVuZGVkLm9wZXJhdGlvbnMoKVtpXS0+
YmxlbmQoMCwgMS4gLSBwcm9ncmVzcywgdHJ1ZSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7Cisg
ICAgICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogYmxlbmRlZC5vcGVyYXRpb25zKCkpCisgICAg
ICAgICAgICBvcGVyYXRpb24tPmJsZW5kKG51bGxwdHIsIDEgLSBwcm9ncmVzcywgdHJ1ZSktPmFw
cGx5KG1hdHJpeCwgYm94U2l6ZSk7CiAgICAgICAgIHJldHVybiBtYXRyaXg7CiAgICAgfQogCkBA
IC0yMDksNzkgKzIwNCwzNSBAQCBzdGF0aWMgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1
bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUoY29uc3QgQW5pbWF0aW9uVmFsdQogICAgIHJldHVybiBD
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpkZWZhdWx0VGltaW5nRnVuY3Rpb24oKTsKIH0KIAot
VGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMsIGNvbnN0IEZsb2F0
U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGRvdWJsZSBzdGFydFRp
bWUsIGJvb2wgbGlzdHNNYXRjaCkKLSAgICA6IG1fa2V5ZnJhbWVzKGtleWZyYW1lcykKK1RleHR1
cmVNYXBwZXJBbmltYXRpb246OlRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzLCBjb25zdCBGbG9hdFNpemUm
IGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBib29sIGxpc3RzTWF0Y2gsIGRv
dWJsZSBzdGFydFRpbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEFuaW1hdGlvblN0YXRlIHN0YXRlKQor
ICAgIDogbV9uYW1lKG5hbWUuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkgPyBuYW1lIDog
bmFtZS5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fa2V5ZnJhbWVzKGtleWZyYW1lcykKICAgICAs
IG1fYm94U2l6ZShib3hTaXplKQotICAgICwgbV9hbmltYXRpb24oQW5pbWF0aW9uOjpjcmVhdGUo
KmFuaW1hdGlvbikpCi0gICAgLCBtX25hbWUobmFtZS5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJl
YWQoKSA/IG5hbWUgOiBuYW1lLmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9hbmltYXRpb24oQW5p
bWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9uKSkKICAgICAsIG1fbGlzdHNNYXRjaChsaXN0c01hdGNo
KQogICAgICwgbV9zdGFydFRpbWUoc3RhcnRUaW1lKQotICAgICwgbV9wYXVzZVRpbWUoMCkKKyAg
ICAsIG1fcGF1c2VUaW1lKHBhdXNlVGltZSkKICAgICAsIG1fdG90YWxSdW5uaW5nVGltZSgwKQog
ICAgICwgbV9sYXN0UmVmcmVzaGVkVGltZShtX3N0YXJ0VGltZSkKLSAgICAsIG1fc3RhdGUoUGxh
eWluZ1N0YXRlKQorICAgICwgbV9zdGF0ZShzdGF0ZSkKIHsKIH0KIAogVGV4dHVyZU1hcHBlckFu
aW1hdGlvbjo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uJiBvdGhlcikKLSAgICA6IG1fa2V5ZnJhbWVzKG90aGVyLmtleWZyYW1lcygpKQotICAgICwg
bV9ib3hTaXplKG90aGVyLmJveFNpemUoKSkKLSAgICAsIG1fYW5pbWF0aW9uKEFuaW1hdGlvbjo6
Y3JlYXRlKCpvdGhlci5hbmltYXRpb24oKSkpCi0gICAgLCBtX25hbWUob3RoZXIubmFtZSgpLmlz
U2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpID8gb3RoZXIubmFtZSgpIDogb3RoZXIubmFtZSgp
Lmlzb2xhdGVkQ29weSgpKQotICAgICwgbV9saXN0c01hdGNoKG90aGVyLmxpc3RzTWF0Y2goKSkK
LSAgICAsIG1fc3RhcnRUaW1lKG90aGVyLnN0YXJ0VGltZSgpKQotICAgICwgbV9wYXVzZVRpbWUo
b3RoZXIucGF1c2VUaW1lKCkpCisgICAgOiBtX25hbWUob3RoZXIubV9uYW1lLmlzU2FmZVRvU2Vu
ZFRvQW5vdGhlclRocmVhZCgpID8gb3RoZXIubV9uYW1lIDogb3RoZXIubV9uYW1lLmlzb2xhdGVk
Q29weSgpKQorICAgICwgbV9rZXlmcmFtZXMob3RoZXIubV9rZXlmcmFtZXMpCisgICAgLCBtX2Jv
eFNpemUob3RoZXIubV9ib3hTaXplKQorICAgICwgbV9hbmltYXRpb24oQW5pbWF0aW9uOjpjcmVh
dGUoKm90aGVyLm1fYW5pbWF0aW9uKSkKKyAgICAsIG1fbGlzdHNNYXRjaChvdGhlci5tX2xpc3Rz
TWF0Y2gpCisgICAgLCBtX3N0YXJ0VGltZShvdGhlci5tX3N0YXJ0VGltZSkKKyAgICAsIG1fcGF1
c2VUaW1lKG90aGVyLm1fcGF1c2VUaW1lKQogICAgICwgbV90b3RhbFJ1bm5pbmdUaW1lKG90aGVy
Lm1fdG90YWxSdW5uaW5nVGltZSkKICAgICAsIG1fbGFzdFJlZnJlc2hlZFRpbWUob3RoZXIubV9s
YXN0UmVmcmVzaGVkVGltZSkKLSAgICAsIG1fc3RhdGUob3RoZXIuc3RhdGUoKSkKKyAgICAsIG1f
c3RhdGUob3RoZXIubV9zdGF0ZSkKIHsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
OjphcHBseUludGVybmFsKENsaWVudCogY2xpZW50LCBjb25zdCBBbmltYXRpb25WYWx1ZSYgZnJv
bSwgY29uc3QgQW5pbWF0aW9uVmFsdWUmIHRvLCBmbG9hdCBwcm9ncmVzcykKLXsKLSAgICBzd2l0
Y2ggKG1fa2V5ZnJhbWVzLnByb3BlcnR5KCkpIHsKLSAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlP
cGFjaXR5OgotICAgICAgICBjbGllbnQtPnNldEFuaW1hdGVkT3BhY2l0eShhcHBseU9wYWNpdHlB
bmltYXRpb24oKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUmPihmcm9tKS52
YWx1ZSgpKSwgKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUmPih0bykudmFs
dWUoKSksIHByb2dyZXNzKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEFuaW1hdGVkUHJv
cGVydHlUcmFuc2Zvcm06Ci0gICAgICAgIGNsaWVudC0+c2V0QW5pbWF0ZWRUcmFuc2Zvcm0oYXBw
bHlUcmFuc2Zvcm1BbmltYXRpb24oc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUmPihmcm9tKS52YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRp
b25WYWx1ZSY+KHRvKS52YWx1ZSgpLCBwcm9ncmVzcywgbV9ib3hTaXplLCBtX2xpc3RzTWF0Y2gp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eUZpbHRlcjoKLSAg
ICAgICAgY2xpZW50LT5zZXRBbmltYXRlZEZpbHRlcnMoYXBwbHlGaWx0ZXJBbmltYXRpb24oc3Rh
dGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUmPihmcm9tKS52YWx1ZSgpLCBzdGF0
aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KHRvKS52YWx1ZSgpLCBwcm9ncmVz
cywgbV9ib3hTaXplKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbjo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIGlmIChzdGF0ZSgpICE9IFN0b3BwZWRTdGF0
ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gbV9hbmltYXRpb24tPmZpbGxz
Rm9yd2FyZHMoKTsKLX0KLQotYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZl
QW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkgY29uc3QKLXsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAobV9hbmltYXRpb25zW2ldLmlzQWN0aXZlKCkgJiYgbV9hbmltYXRpb25zW2ldLnByb3Bl
cnR5KCkgPT0gdHlwZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6Omhhc1J1bm5pbmdB
bmltYXRpb25zKCkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0
aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLnN0YXRlKCkg
PT0gVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6UGxheWluZ1N0YXRlKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFRleHR1cmVN
YXBwZXJBbmltYXRpb246OmFwcGx5KENsaWVudCogY2xpZW50KQordm9pZCBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uOjphcHBseShDbGllbnQmIGNsaWVudCkKIHsKICAgICBpZiAoIWlzQWN0aXZlKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTI5MCw3ICsyNDEsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJB
bmltYXRpb246OmFwcGx5KENsaWVudCogY2xpZW50KQogICAgIGRvdWJsZSBub3JtYWxpemVkVmFs
dWUgPSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUodG90YWxSdW5uaW5nVGltZSwgbV9hbmltYXRp
b24tPmR1cmF0aW9uKCksIG1fYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSwgbV9hbmltYXRpb24tPml0
ZXJhdGlvbkNvdW50KCkpOwogCiAgICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgp
ICE9IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSAmJiB0b3RhbFJ1bm5pbmdUaW1l
ID49IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50
KCkpIHsKLSAgICAgICAgc2V0U3RhdGUoU3RvcHBlZFN0YXRlKTsKKyAgICAgICAgbV9zdGF0ZSA9
IEFuaW1hdGlvblN0YXRlOjpTdG9wcGVkOworICAgICAgICBtX3BhdXNlVGltZSA9IDA7CiAgICAg
ICAgIGlmIChtX2FuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpKQogICAgICAgICAgICAgbm9ybWFs
aXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yRmlsbHNGb3J3YXJkcyhtX2Fu
aW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSwgbV9hbmltYXRpb24tPmRpcmVjdGlvbigpKTsKICAg
ICB9CkBAIC0zMjUsOSArMjc3LDIzIEBAIHZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6YXBw
bHkoQ2xpZW50KiBjbGllbnQpCiAgICAgfQogfQogCit2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRp
b246OnBhdXNlKGRvdWJsZSB0aW1lKQoreworICAgIG1fc3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6
UGF1c2VkOworICAgIG1fcGF1c2VUaW1lID0gdGltZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uOjpyZXN1bWUoKQoreworICAgIG1fc3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGxh
eWluZzsKKyAgICBtX3BhdXNlVGltZSA9IDA7CisgICAgbV90b3RhbFJ1bm5pbmdUaW1lID0gbV9w
YXVzZVRpbWU7CisgICAgbV9sYXN0UmVmcmVzaGVkVGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpOworfQorCiBkb3VibGUgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6Y29tcHV0ZVRv
dGFsUnVubmluZ1RpbWUoKQogewotICAgIGlmIChzdGF0ZSgpID09IFBhdXNlZFN0YXRlKQorICAg
IGlmIChtX3N0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQYXVzZWQpCiAgICAgICAgIHJldHVybiBt
X3BhdXNlVGltZTsKIAogICAgIGRvdWJsZSBvbGRMYXN0UmVmcmVzaGVkVGltZSA9IG1fbGFzdFJl
ZnJlc2hlZFRpbWU7CkBAIC0zMzYsNzQgKzMwMiw5NiBAQCBkb3VibGUgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbjo6Y29tcHV0ZVRvdGFsUnVubmluZ1RpbWUoKQogICAgIHJldHVybiBtX3RvdGFsUnVu
bmluZ1RpbWU7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6cGF1c2UoZG91Ymxl
IHRpbWUpCitib29sIFRleHR1cmVNYXBwZXJBbmltYXRpb246OmlzQWN0aXZlKCkgY29uc3QKIHsK
LSAgICBzZXRTdGF0ZShQYXVzZWRTdGF0ZSk7Ci0gICAgbV9wYXVzZVRpbWUgPSB0aW1lOworICAg
IHJldHVybiBtX3N0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpTdG9wcGVkIHx8IG1fYW5pbWF0aW9u
LT5maWxsc0ZvcndhcmRzKCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6cmVz
dW1lKCkKK3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6YXBwbHlJbnRlcm5hbChDbGllbnQm
IGNsaWVudCwgY29uc3QgQW5pbWF0aW9uVmFsdWUmIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVl
JiB0bywgZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgc2V0U3RhdGUoUGxheWluZ1N0YXRlKTsKLSAg
ICBtX3RvdGFsUnVubmluZ1RpbWUgPSBtX3BhdXNlVGltZTsKLSAgICBtX2xhc3RSZWZyZXNoZWRU
aW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgc3dpdGNoIChtX2tleWZy
YW1lcy5wcm9wZXJ0eSgpKSB7CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eToKKyAg
ICAgICAgY2xpZW50LnNldEFuaW1hdGVkT3BhY2l0eShhcHBseU9wYWNpdHlBbmltYXRpb24oKHN0
YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUmPihmcm9tKS52YWx1ZSgpKSwgKHN0
YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUmPih0bykudmFsdWUoKSksIHByb2dy
ZXNzKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlUcmFuc2Zv
cm06CisgICAgICAgIGNsaWVudC5zZXRBbmltYXRlZFRyYW5zZm9ybShhcHBseVRyYW5zZm9ybUFu
aW1hdGlvbihzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSY+KGZyb20p
LnZhbHVlKCksIHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlJj4odG8p
LnZhbHVlKCksIHByb2dyZXNzLCBtX2JveFNpemUsIG1fbGlzdHNNYXRjaCkpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5RmlsdGVyOgorICAgICAgICBjbGllbnQu
c2V0QW5pbWF0ZWRGaWx0ZXJzKGFwcGx5RmlsdGVyQW5pbWF0aW9uKHN0YXRpY19jYXN0PGNvbnN0
IEZpbHRlckFuaW1hdGlvblZhbHVlJj4oZnJvbSkudmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3Qg
RmlsdGVyQW5pbWF0aW9uVmFsdWUmPih0bykudmFsdWUoKSwgcHJvZ3Jlc3MsIG1fYm94U2l6ZSkp
OworICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphZGQoY29u
c3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKQogewogICAgIC8vIFJlbW92ZSB0
aGUgb2xkIHN0YXRlIGlmIHdlIGFyZSByZXN1bWluZyBhIHBhdXNlZCBhbmltYXRpb24uCi0gICAg
cmVtb3ZlKGFuaW1hdGlvbi5uYW1lKCksIGFuaW1hdGlvbi5wcm9wZXJ0eSgpKTsKKyAgICByZW1v
dmUoYW5pbWF0aW9uLm5hbWUoKSwgYW5pbWF0aW9uLmtleWZyYW1lcygpLnByb3BlcnR5KCkpOwog
CiAgICAgbV9hbmltYXRpb25zLmFwcGVuZChhbmltYXRpb24pOwogfQogCit2b2lkIFRleHR1cmVN
YXBwZXJBbmltYXRpb25zOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIG1fYW5p
bWF0aW9ucy5yZW1vdmVBbGxNYXRjaGluZyhbJm5hbWVdIChjb25zdCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uJiBhbmltYXRpb24pIHsKKyAgICAgICAgcmV0dXJuIGFuaW1hdGlvbi5uYW1lKCkgPT0g
bmFtZTsKKyAgICB9KTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cmVtb3Zl
KGNvbnN0IFN0cmluZyYgbmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KQoreworICAg
IG1fYW5pbWF0aW9ucy5yZW1vdmVBbGxNYXRjaGluZyhbJm5hbWUsIHByb3BlcnR5XSAoY29uc3Qg
VGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7CisgICAgICAgIHJldHVybiBhbmlt
YXRpb24ubmFtZSgpID09IG5hbWUgJiYgYW5pbWF0aW9uLmtleWZyYW1lcygpLnByb3BlcnR5KCkg
PT0gcHJvcGVydHk7CisgICAgfSk7Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6
OnBhdXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIG9mZnNldCkKIHsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
bV9hbmltYXRpb25zW2ldLm5hbWUoKSA9PSBuYW1lKQotICAgICAgICAgICAgbV9hbmltYXRpb25z
W2ldLnBhdXNlKG9mZnNldCk7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlv
bnMpIHsKKyAgICAgICAgaWYgKGFuaW1hdGlvbi5uYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAg
IGFuaW1hdGlvbi5wYXVzZShvZmZzZXQpOwogICAgIH0KIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uczo6c3VzcGVuZChkb3VibGUgb2Zmc2V0KQogewotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytpKQotICAgICAgICBtX2FuaW1hdGlvbnNb
aV0ucGF1c2Uob2Zmc2V0KTsKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9u
cykKKyAgICAgICAgYW5pbWF0aW9uLnBhdXNlKG9mZnNldCk7CiB9CiAKIHZvaWQgVGV4dHVyZU1h
cHBlckFuaW1hdGlvbnM6OnJlc3VtZSgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYW5pbWF0aW9uc1tpXS5yZXN1bWUo
KTsKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykKKyAgICAgICAgYW5p
bWF0aW9uLnJlc3VtZSgpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpyZW1v
dmUoY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6YXBw
bHkoVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6Q2xpZW50JiBjbGllbnQpCiB7Ci0gICAgbV9hbmlt
YXRpb25zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFtZV0gKGNvbnN0IFRleHR1cmVNYXBwZXJBbmlt
YXRpb24mIGFuaW1hdGlvbikgewotICAgICAgICByZXR1cm4gYW5pbWF0aW9uLm5hbWUoKSA9PSBu
YW1lOwotICAgIH0pOworICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25zKQor
ICAgICAgICBhbmltYXRpb24uYXBwbHkoY2xpZW50KTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uczo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eUlE
IHByb3BlcnR5KQorYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0
aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkgY29uc3QKIHsKLSAgICBtX2FuaW1h
dGlvbnMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZuYW1lLCBwcm9wZXJ0eV0gKGNvbnN0IFRleHR1cmVN
YXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbikgewotICAgICAgICByZXR1cm4gYW5pbWF0aW9uLm5h
bWUoKSA9PSBuYW1lICYmIGFuaW1hdGlvbi5wcm9wZXJ0eSgpID09IHByb3BlcnR5OwotICAgIH0p
OworICAgIHJldHVybiBzdGQ6OmFueV9vZihtX2FuaW1hdGlvbnMuYmVnaW4oKSwgbV9hbmltYXRp
b25zLmVuZCgpLAorICAgICAgICBbJnR5cGVdKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24m
IGFuaW1hdGlvbikgeyByZXR1cm4gYW5pbWF0aW9uLmlzQWN0aXZlKCkgJiYgYW5pbWF0aW9uLmtl
eWZyYW1lcygpLnByb3BlcnR5KCkgPT0gdHlwZTsgfSk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbnM6OmFwcGx5KFRleHR1cmVNYXBwZXJBbmltYXRpb246OkNsaWVudCogY2xpZW50
KQorYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1hdGlvbnMoKSBj
b25zdAogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsg
KytpKQotICAgICAgICBtX2FuaW1hdGlvbnNbaV0uYXBwbHkoY2xpZW50KTsKKyAgICByZXR1cm4g
c3RkOjphbnlfb2YobV9hbmltYXRpb25zLmJlZ2luKCksIG1fYW5pbWF0aW9ucy5lbmQoKSwKKyAg
ICAgICAgW10oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7IHJldHVy
biBhbmltYXRpb24uc3RhdGUoKSA9PSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpBbmltYXRpb25T
dGF0ZTo6UGxheWluZzsgfSk7CiB9CiAKIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIFRleHR1cmVN
YXBwZXJBbmltYXRpb25zOjpnZXRBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKIHsKICAgICBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9ucyBhY3RpdmU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS5p
c0FjdGl2ZSgpKQotICAgICAgICAgICAgYWN0aXZlLmFkZChtX2FuaW1hdGlvbnNbaV0pOworICAg
IGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25zKSB7CisgICAgICAgIGlmIChhbmlt
YXRpb24uaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIGFjdGl2ZS5hZGQoYW5pbWF0aW9uKTsKICAg
ICB9CiAgICAgcmV0dXJuIGFjdGl2ZTsKIH0KLX0KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgKaW5kZXggMzc2YmMyZGNlMjIwZTNmOTVjOWI4
MzViODQxYzRkZDdlOGVlZjcxOS4uNmE0NDdkNzZlNzcxNDhkNTMxMGVlMjc1OWI1MmRkZjVhYTQ4
MTk4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCkBAIC0yMSwxNSArMjEsMTUg
QEAKICNkZWZpbmUgVGV4dHVyZU1hcHBlckFuaW1hdGlvbl9oCiAKICNpbmNsdWRlICJHcmFwaGlj
c0xheWVyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKwogY2xhc3MgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbiB7CiBwdWJsaWM6Ci0gICAgZW51bSBBbmltYXRpb25TdGF0ZSB7
IFBsYXlpbmdTdGF0ZSwgUGF1c2VkU3RhdGUsIFN0b3BwZWRTdGF0ZSB9OworICAgIGVudW0gY2xh
c3MgQW5pbWF0aW9uU3RhdGUgeyBQbGF5aW5nLCBQYXVzZWQsIFN0b3BwZWQgfTsKKwogICAgIGNs
YXNzIENsaWVudCB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0
ZWRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7CkBAIC00MCwzNCAr
NDAsMzEgQEAgcHVibGljOgogICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb24oKQogICAgICAgICA6
IG1fa2V5ZnJhbWVzKEFuaW1hdGVkUHJvcGVydHlJbnZhbGlkKQogICAgIHsgfQotICAgIFRleHR1
cmVNYXBwZXJBbmltYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBBbmltYXRpb24qLCBkb3VibGUsIGJvb2wpOworICAg
IFRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBBbmltYXRpb24mLCBib29sLCBkb3VibGUs
IGRvdWJsZSwgQW5pbWF0aW9uU3RhdGUpOwogICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb24oY29u
c3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYpOwotICAgIHZvaWQgYXBwbHkoQ2xpZW50Kik7CisK
KyAgICB2b2lkIGFwcGx5KENsaWVudCYpOwogICAgIHZvaWQgcGF1c2UoZG91YmxlKTsKICAgICB2
b2lkIHJlc3VtZSgpOwotICAgIGRvdWJsZSBjb21wdXRlVG90YWxSdW5uaW5nVGltZSgpOwotICAg
IEFuaW1hdGlvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIHZv
aWQgc2V0U3RhdGUoQW5pbWF0aW9uU3RhdGUgcywgZG91YmxlIHBhdXNlVGltZSA9IDApCi0gICAg
ewotICAgICAgICBtX3N0YXRlID0gczsKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBwYXVzZVRpbWU7
Ci0gICAgfQotICAgIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fa2V5ZnJhbWVzLnByb3BlcnR5KCk7IH0KICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0g
ICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBGbG9hdFNpemUg
Ym94U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2l6ZTsgfQotICAgIGRvdWJsZSBzdGFydFRp
bWUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0VGltZTsgfQotICAgIGRvdWJsZSBwYXVzZVRpbWUo
KSBjb25zdCB7IHJldHVybiBtX3BhdXNlVGltZTsgfQotICAgIFBhc3NSZWZQdHI8QW5pbWF0aW9u
PiBhbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbi5nZXQoKTsgfQorCisgICAg
Y29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVz
OyB9CisgICAgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ib3hT
aXplOyB9CisgICAgY29uc3QgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmltYXRpb247IH0KICAgICBib29sIGxpc3RzTWF0Y2goKSBjb25zdCB7IHJldHVy
biBtX2xpc3RzTWF0Y2g7IH0KKyAgICBkb3VibGUgc3RhcnRUaW1lKCkgY29uc3QgeyByZXR1cm4g
bV9zdGFydFRpbWU7IH0KKyAgICBkb3VibGUgcGF1c2VUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9w
YXVzZVRpbWU7IH0KKyAgICBBbmltYXRpb25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGU7IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGFwcGx5SW50ZXJuYWwoQ2xpZW50KiwgY29u
c3QgQW5pbWF0aW9uVmFsdWUmIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlJiB0bywgZmxvYXQg
cHJvZ3Jlc3MpOworICAgIHZvaWQgYXBwbHlJbnRlcm5hbChDbGllbnQmLCBjb25zdCBBbmltYXRp
b25WYWx1ZSYgZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFsdWUmIHRvLCBmbG9hdCBwcm9ncmVzcyk7
CisgICAgZG91YmxlIGNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKCk7CisKKyAgICBTdHJpbmcgbV9u
YW1lOwogICAgIEtleWZyYW1lVmFsdWVMaXN0IG1fa2V5ZnJhbWVzOwogICAgIEZsb2F0U2l6ZSBt
X2JveFNpemU7CiAgICAgUmVmUHRyPEFuaW1hdGlvbj4gbV9hbmltYXRpb247Ci0gICAgU3RyaW5n
IG1fbmFtZTsKICAgICBib29sIG1fbGlzdHNNYXRjaDsKICAgICBkb3VibGUgbV9zdGFydFRpbWU7
CiAgICAgZG91YmxlIG1fcGF1c2VUaW1lOwpAQCAtNzgsNyArNzUsNyBAQCBwcml2YXRlOgogCiBj
bGFzcyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyB7CiBwdWJsaWM6Ci0gICAgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbnMoKSB7IH0KKyAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucygpID0gZGVmYXVs
dDsKIAogICAgIHZvaWQgYWRkKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mKTsKICAgICB2
b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOwpAQCAtODYsNyArODMsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBwYXVzZShjb25zdCBTdHJpbmcmLCBkb3VibGUpOwogICAgIHZvaWQgc3VzcGVu
ZChkb3VibGUpOwogICAgIHZvaWQgcmVzdW1lKCk7Ci0gICAgdm9pZCBhcHBseShUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uOjpDbGllbnQqKTsKKworICAgIHZvaWQgYXBwbHkoVGV4dHVyZU1hcHBlckFu
aW1hdGlvbjo6Q2xpZW50Jik7CisKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBt
X2FuaW1hdGlvbnMuaXNFbXB0eSgpOyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX2FuaW1hdGlvbnMuc2l6ZSgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFRleHR1cmVNYXBwZXJB
bmltYXRpb24+JiBhbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zOyB9CkBA
IC05NCw3ICs5Myw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzUnVubmluZ0FuaW1hdGlvbnMo
KSBjb25zdDsKICAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9w
ZXJ0eUlEIHR5cGUpIGNvbnN0OwotCiAgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgZ2V0QWN0
aXZlQW5pbWF0aW9ucygpIGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVy
LmNwcAppbmRleCBmYzc3MTA2MmUxYzAyYWY3MGYzZjNjMzJkNjM3ZmNkMDNlZjg3ZmYxLi44NjM2
ZTBkMWNiYTJmODliYmVmZDg5YjQ3MDEzMzkyNjRkZmI0ZmJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckxheWVyLmNwcApAQCAtNjU3LDcgKzY1Nyw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjph
cHBseUFuaW1hdGlvbnNSZWN1cnNpdmVseSgpCiAKIHZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpz
eW5jQW5pbWF0aW9ucygpCiB7Ci0gICAgbV9hbmltYXRpb25zLmFwcGx5KHRoaXMpOworICAgIG1f
YW5pbWF0aW9ucy5hcHBseSgqdGhpcyk7CiAgICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZl
QW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5VHJhbnNmb3JtKSkKICAgICAgICAgbV9j
dXJyZW50VHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKG1fc3RhdGUudHJhbnNmb3JtKTsKICAg
ICBpZiAoIW1fYW5pbWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJv
cGVydHlPcGFjaXR5KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggMjljNjc0MThiMjc3NWFjMjkxYWNlMWEyZDE0NTMz
NDk3NDUyYjA4MC4uZjNlMzk1MzM3MzUwY2M5NmRhNWU0YWYxZmM0M2Q4MjJiODY1NTY4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHAKQEAgLTExODUsNyArMTE4NSw3IEBAIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKICAgICAg
ICAgbGlzdHNNYXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZUxpc3QsIGln
bm9yZWRIYXNCaWdSb3RhdGlvbikgPj0gMDsKIAogICAgIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGlt
ZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gZGVsYXlBc05lZ2F0aXZlVGltZU9m
ZnNldDsKLSAgICBtX2FuaW1hdGlvbnMuYWRkKFRleHR1cmVNYXBwZXJBbmltYXRpb24oa2V5ZnJh
bWVzTmFtZSwgdmFsdWVMaXN0LCBib3hTaXplLCBhbmltLCBtX2xhc3RBbmltYXRpb25TdGFydFRp
bWUsIGxpc3RzTWF0Y2gpKTsKKyAgICBtX2FuaW1hdGlvbnMuYWRkKFRleHR1cmVNYXBwZXJBbmlt
YXRpb24oa2V5ZnJhbWVzTmFtZSwgdmFsdWVMaXN0LCBib3hTaXplLCAqYW5pbSwgbV9sYXN0QW5p
bWF0aW9uU3RhcnRUaW1lLCBsaXN0c01hdGNoKSk7CiAgICAgbV9hbmltYXRpb25TdGFydGVkVGlt
ZXIuc3RhcnRPbmVTaG90KDApOwogICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKICAgICByZXR1
cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1l
bnRDb2RlcnMuY3BwCmluZGV4IDFjMzQ1OTlhOGJiNWM1NGRhZDJhOWU3MzAyN2RjMWVkODE5ODE3
MDEuLjlkZDYzZmQyM2NjYzE2NjgyOTc3ZGZlZDAwZDRkYjllYmE4YTJjNWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApAQCAt
NTQ2LDkgKzU0Niw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgVGV4CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBhbmltYXRpb24gPSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKG5hbWUsIGtleWZyYW1l
cywgYm94U2l6ZSwgYW5pbWF0aW9uT2JqZWN0LmdldCgpLCBzdGFydFRpbWUsIGxpc3RzTWF0Y2gp
OwotICAgIGFuaW1hdGlvbi5zZXRTdGF0ZShzdGF0ZSwgcGF1c2VUaW1lKTsKLQorICAgIGFuaW1h
dGlvbiA9IFRleHR1cmVNYXBwZXJBbmltYXRpb24obmFtZSwga2V5ZnJhbWVzLCBib3hTaXplLCAq
YW5pbWF0aW9uT2JqZWN0LCBsaXN0c01hdGNoLCBzdGFydFRpbWUsIHBhdXNlVGltZSwgc3RhdGUp
OwogICAgIHJldHVybiB0cnVlOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267559</attachid>
            <date>2015-12-17 07:12:42 -0800</date>
            <delta_ts>2015-12-29 23:44:47 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-152112-20151217071202.patch</filename>
            <type>text/plain</type>
            <size>26641</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0MjE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDg3ZWE1MWE2NzIxMDMx
ZTM2NDBlNjY0Mzg2M2RhNGZhYmQzMDYyMS4uMWY0NzU0Y2VmZTRmY2E4NWM4ZDFlMzYyYTIwNTY1
NjVhYzc5ZTI5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE1LTEyLTE3ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbVGV4TWFwXSBDbGVh
biB1cCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMTEyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgdGhl
IFRleHR1cmVNYXBwZXJBbmltYXRpb24gY2xhc3MuIFR1cm4gQW5pbWF0aW9uU3RhdGUgaW50byBh
biBlbnVtCisgICAgICAgIGNsYXNzLiBVc2UgcmVmZXJlbmNlcyBmb3Igbm9uLW51bGwgcG9pbnRl
ciBwYXJhbWV0ZXJzIHRvIG9uZSB2ZXJzaW9uIG9mIHRoZQorICAgICAgICBjb25zdHJ1Y3RvciBh
bmQgdGhlIGFwcGx5KCkgYW5kIGFwcGx5SW50ZXJuYWwoKSBtZXRob2RzLiBSZW1vdmUgdW5uZWNl
c3NhcnkKKyAgICAgICAgcHVibGljIG1ldGhvZHMgYW5kIHJlb3JkZXIgdGhlIHJlbWFpbmluZyBv
bmVzIGludG8gc29tZXRoaW5nIG1vcmUgc2Vuc2libGUuCisgICAgICAgIEluIHRlcm1zIG9mIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzLCB0aGUgbWV0aG9kcyBhcmUgbW92ZWQgYXJv
dW5kIHRvCisgICAgICAgIGZvbGxvdyB0aGUgb3JkZXIgb2YgZGVjbGFyYXRpb25zLCBhbG9uZyB3
aXRoIHNvbWUgc21hbGwgY2xlYW51cHMgYW5kIGltcHJvdmVtZW50cworICAgICAgICBhcHBsaWVk
LgorCisgICAgICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIGNsYXNzIGlzIGFsc28gcmVmcmVz
aGVkLiBUaGUgY29uc3RydWN0b3IgaXMgZGVmYXVsdGVkLAorICAgICAgICBhbmQgdGhlIG1ldGhv
ZCBpbXBsZW1lbnRhdGlvbnMgYXJlIHJlb3JkZXJlZCBhIGJpdCBhbmQgYWxzbyBhZGp1c3RlZCB0
byB1c2UgdGhlCisgICAgICAgIHJhbmdlLWJhc2VkIGZvci1sb29wcyBhbmQgc29tZSBTVEwgdXRp
bGl0aWVzLgorCisgICAgICAgIFN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGltcGxlbWVudGF0aW9u
IGZpbGUgYXJlIGFsc28gdXBkYXRlZCB0byB1c2UgcmFuZ2UtYmFzZWQKKyAgICAgICAgZm9yLWxv
b3BzLCByZWZlcmVuY2VzIGFuZCBudWxscHRycyB3aGVyZSBwb3NzaWJsZS4KKworICAgICAgICBU
aGVyZSdzIG5vIGNoYW5nZSBpbiBiZWhhdmlvciBhcyB0aGlzIGlzIGp1c3QgYSByZWZhY3Rvcmlu
Zy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpibGVuZEZ1bmMp
OgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlGaWx0ZXJBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmFw
cGx5VHJhbnNmb3JtQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJB
bmltYXRpb246OlRleHR1cmVNYXBwZXJBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckFuaW1hdGlvbjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckFuaW1hdGlvbjo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFu
aW1hdGlvbjo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRp
b246OmNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJBbmltYXRpb246OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJBbmltYXRpb246OmFwcGx5SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckFuaW1hdGlvbnM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uczo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRp
b25zOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6
c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cmVz
dW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5p
bWF0aW9uc09mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
czo6aGFzUnVubmluZ0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmg6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJBbmltYXRpb246OmJveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckFuaW1hdGlvbjo6YW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJBbmltYXRpb246OnN0YXJ0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uOjpwYXVzZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFu
aW1hdGlvbjo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlv
bjo6c2V0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFu
aW1hdGlvbjo6cHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckFuaW1hdGlvbnM6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c3luY0FuaW1hdGlvbnMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjphZGRBbmltYXRpb24pOgorCiAyMDE1LTEyLTE2ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBTZXNzaW9uSUQgdXNlIGludEhh
c2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCBlMzQ1Y2EyYTdhYmM2MjgzMTliMDg4ZTMzNTRlMmQ2MzcxOWZjOTc1
Li42ZGQ0NDIzZDhkZTU4YWY1ODFjMjM0MTg3YmZlZTZiZjZkNDI3ZmQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTUtMTItMTcgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtUZXhNYXBdIENsZWFuIHVwIFRleHR1cmVNYXBwZXJBbmltYXRp
b24sIFRleHR1cmVNYXBwZXJBbmltYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIxMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj46OmRlY29kZSk6CisKIDIwMTUtMTItMTYgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBQcm9ncmVz
cyB0b3dhcmRzIGltcGxlbWVudGluZyBkb3dubG9hZHMgd2l0aCBOZXR3b3JrU2Vzc2lvbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggYzE1NDkyOWMwMjIx
MDQxYTY4MmRjYjgwZTY3OGY0MmY5N2NkYTJhMi4uM2FmNGE4OWJlMjZmMjUwYzQ1MmVjNzAwZTMz
ODgwMzA0ZjI5NzdjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIu
Y3BwCkBAIC01NzQsNyArNTc0LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QKICAgICAgICAg
bGlzdHNNYXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZUxpc3QsIGhhc0Jp
Z1JvdGF0aW9uKSA+PSAwOwogCiAgICAgY29uc3QgZG91YmxlIGN1cnJlbnRUaW1lID0gbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0gICAgbV9hbmltYXRpb25zLmFkZChUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uKGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5pbSwgY3Vy
cmVudFRpbWUgLSB0aW1lT2Zmc2V0LCBsaXN0c01hdGNoKSk7CisgICAgbV9hbmltYXRpb25zLmFk
ZChUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6
ZSwgKmFuaW0sIGxpc3RzTWF0Y2gsIGN1cnJlbnRUaW1lIC0gdGltZU9mZnNldCwgMCwgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlBsYXlpbmcpKTsKICAgICAvLyBtX2Fu
aW1hdGlvblN0YXJ0VGltZSBpcyB0aGUgdGltZSBvZiB0aGUgZmlyc3QgcmVhbCBmcmFtZSBvZiBh
bmltYXRpb24sIG5vdyBvciBkZWxheWVkIGJ5IGEgbmVnYXRpdmUgb2Zmc2V0LgogICAgIGlmICh0
aW1lT2Zmc2V0ID4gMCkKICAgICAgICAgbV9hbmltYXRpb25TdGFydFRpbWUgPSBjdXJyZW50VGlt
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcAppbmRleCAyNGVkNTQyMzE1YTE0
NTYyYjIyMjE5NGFhOWJmNmZlYTM3NDQ5OWIyLi4wYmVkZDBhNTc0YzI0OTllNWUzYWNlOTI3YjU0
MTFmOTQyMDFhODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCkBAIC0y
NiwxNiArMjYsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoRmlsdGVyT3BlcmF0aW9uKiBmcm9t
T3AsIEZpbHRlck9wZXJhdGlvbiogdG9PcCwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBGbG9hdFNp
emUmIHNpemUsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCitzdGF0aWMgUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKEZpbHRlck9wZXJhdGlvbiogZnJvbU9wLCBGaWx0
ZXJPcGVyYXRpb24mIHRvT3AsIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQogewotICAgIEFTU0VSVCh0b09wKTsK
LSAgICBpZiAodG9PcC0+YmxlbmRpbmdOZWVkc1JlbmRlcmVyU2l6ZSgpKQotICAgICAgICByZXR1
cm4gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgTGF5b3V0U2l6ZShzaXplKSwgYmxlbmRU
b1Bhc3N0aHJvdWdoKTsKLQotICAgIHJldHVybiB0b09wLT5ibGVuZChmcm9tT3AsIHByb2dyZXNz
LCBibGVuZFRvUGFzc3Rocm91Z2gpOworICAgIGlmICh0b09wLmJsZW5kaW5nTmVlZHNSZW5kZXJl
clNpemUoKSkKKyAgICAgICAgcmV0dXJuIHRvT3AuYmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgTGF5
b3V0U2l6ZShzaXplKSwgYmxlbmRUb1Bhc3N0aHJvdWdoKTsKKyAgICByZXR1cm4gdG9PcC5ibGVu
ZChmcm9tT3AsIHByb2dyZXNzLCBibGVuZFRvUGFzc3Rocm91Z2gpOwogfQogCi0KIHN0YXRpYyBG
aWx0ZXJPcGVyYXRpb25zIGFwcGx5RmlsdGVyQW5pbWF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGNv
bnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKIHsKICAgICAvLyBGaXJzdCBmcmFtZSBvZiBhbiBhbmlt
YXRpb24uCkBAIC01NSw5ICs1Miw5IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb25zIGFwcGx5Rmls
dGVyQW5pbWF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0CiAgICAgc2l6
ZV90IHRvU2l6ZSA9IHRvLm9wZXJhdGlvbnMoKS5zaXplKCk7CiAgICAgc2l6ZV90IHNpemUgPSBz
dGQ6Om1heChmcm9tU2l6ZSwgdG9TaXplKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7IGkrKykgewotICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9tT3AgPSAoaSA8
IGZyb21TaXplKSA/IGZyb20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsKLSAgICAgICAgUmVm
UHRyPEZpbHRlck9wZXJhdGlvbj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRvLm9wZXJhdGlvbnMo
KVtpXS5nZXQoKSA6IDA7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kZWRP
cCA9IHRvT3AgPyBibGVuZEZ1bmMoZnJvbU9wLmdldCgpLCB0b09wLmdldCgpLCBwcm9ncmVzcywg
Ym94U2l6ZSkgOiAoZnJvbU9wID8gYmxlbmRGdW5jKDAsIGZyb21PcC5nZXQoKSwgcHJvZ3Jlc3Ms
IGJveFNpemUsIHRydWUpIDogMCk7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZy
b21PcCA9IChpIDwgZnJvbVNpemUpID8gZnJvbS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiBudWxs
cHRyOworICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiB0b09wID0gKGkgPCB0b1NpemUp
ID8gdG8ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogbnVsbHB0cjsKKyAgICAgICAgUmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gYmxlbmRlZE9wID0gdG9PcCA/IGJsZW5kRnVuYyhmcm9tT3AuZ2V0KCks
ICp0b09wLCBwcm9ncmVzcywgYm94U2l6ZSkgOiAoZnJvbU9wID8gYmxlbmRGdW5jKG51bGxwdHIs
ICpmcm9tT3AsIHByb2dyZXNzLCBib3hTaXplLCB0cnVlKSA6IG51bGxwdHIpOwogICAgICAgICBp
ZiAoYmxlbmRlZE9wKQogICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoYmxl
bmRlZE9wKTsKICAgICAgICAgZWxzZSB7CkBAIC03NCwxMSArNzEsOSBAQCBzdGF0aWMgRmlsdGVy
T3BlcmF0aW9ucyBhcHBseUZpbHRlckFuaW1hdGlvbihjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBm
cm9tLCBjb25zdAogCiBzdGF0aWMgYm9vbCBzaG91bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUoQW5p
bWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbG9vcENvdW50KQogewot
ICAgIGlmICgoKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVy
bmF0ZSkgJiYgKGxvb3BDb3VudCAmIDEpKQotICAgICAgICB8fCAoKGRpcmVjdGlvbiA9PSBBbmlt
YXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpICYmICEobG9vcENvdW50
ICYgMSkpCi0gICAgICAgIHx8IGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVj
dGlvblJldmVyc2UpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVy
bmF0ZSAmJiBsb29wQ291bnQgJiAxKQorICAgICAgICB8fCAoZGlyZWN0aW9uID09IEFuaW1hdGlv
bjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSAmJiAhKGxvb3BDb3VudCAmIDEp
KQorICAgICAgICB8fCBkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25S
ZXZlcnNlOwogfQogCiBzdGF0aWMgZG91YmxlIG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZShkb3Vi
bGUgcnVubmluZ1RpbWUsIGRvdWJsZSBkdXJhdGlvbiwgQW5pbWF0aW9uOjpBbmltYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uLCBkb3VibGUgaXRlcmF0aW9uQ291bnQpCkBAIC0xNzksMTYgKzE3NCwx
NiBAQCBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24o
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZgogICAgIC8vIEFuaW1hdGlvbiB0byAiLXdlYmtp
dC10cmFuc2Zvcm06IG5vbmUiLgogICAgIGlmICghdG8uc2l6ZSgpKSB7CiAgICAgICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgYmxlbmRlZChmcm9tKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBibGVuZGVkLm9wZXJhdGlvbnMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGJsZW5k
ZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZCgwLCBwcm9ncmVzcywgdHJ1ZSktPmFwcGx5KG1hdHJp
eCwgYm94U2l6ZSk7CisgICAgICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogYmxlbmRlZC5vcGVy
YXRpb25zKCkpCisgICAgICAgICAgICBvcGVyYXRpb24tPmJsZW5kKG51bGxwdHIsIHByb2dyZXNz
LCB0cnVlKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKICAgICAgICAgcmV0dXJuIG1hdHJpeDsK
ICAgICB9CiAKICAgICAvLyBBbmltYXRpb24gZnJvbSAiLXdlYmtpdC10cmFuc2Zvcm06IG5vbmUi
LgogICAgIGlmICghZnJvbS5zaXplKCkpIHsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBi
bGVuZGVkKHRvKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibGVuZGVkLm9wZXJh
dGlvbnMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ld
LT5ibGVuZCgwLCAxLiAtIHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsK
KyAgICAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBibGVuZGVkLm9wZXJhdGlvbnMoKSkKKyAg
ICAgICAgICAgIG9wZXJhdGlvbi0+YmxlbmQobnVsbHB0ciwgMSAtIHByb2dyZXNzLCB0cnVlKS0+
YXBwbHkobWF0cml4LCBib3hTaXplKTsKICAgICAgICAgcmV0dXJuIG1hdHJpeDsKICAgICB9CiAK
QEAgLTIwOSw3OSArMjA0LDM1IEBAIHN0YXRpYyBjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5n
RnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShjb25zdCBBbmltYXRpb25WYWx1CiAgICAgcmV0dXJu
IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmRlZmF1bHRUaW1pbmdGdW5jdGlvbigpOwogfQog
Ci1UZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcywgY29uc3QgRmxv
YXRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgZG91YmxlIHN0YXJ0
VGltZSwgYm9vbCBsaXN0c01hdGNoKQotICAgIDogbV9rZXlmcmFtZXMoa2V5ZnJhbWVzKQorVGV4
dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMsIGNvbnN0IEZsb2F0U2l6
ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIGJvb2wgbGlzdHNNYXRjaCwg
ZG91YmxlIHN0YXJ0VGltZSwgZG91YmxlIHBhdXNlVGltZSwgQW5pbWF0aW9uU3RhdGUgc3RhdGUp
CisgICAgOiBtX25hbWUobmFtZS5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSA/IG5hbWUg
OiBuYW1lLmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9rZXlmcmFtZXMoa2V5ZnJhbWVzKQogICAg
ICwgbV9ib3hTaXplKGJveFNpemUpCi0gICAgLCBtX2FuaW1hdGlvbihBbmltYXRpb246OmNyZWF0
ZSgqYW5pbWF0aW9uKSkKLSAgICAsIG1fbmFtZShuYW1lLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRo
cmVhZCgpID8gbmFtZSA6IG5hbWUuaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX2FuaW1hdGlvbihB
bmltYXRpb246OmNyZWF0ZShhbmltYXRpb24pKQogICAgICwgbV9saXN0c01hdGNoKGxpc3RzTWF0
Y2gpCiAgICAgLCBtX3N0YXJ0VGltZShzdGFydFRpbWUpCi0gICAgLCBtX3BhdXNlVGltZSgwKQor
ICAgICwgbV9wYXVzZVRpbWUocGF1c2VUaW1lKQogICAgICwgbV90b3RhbFJ1bm5pbmdUaW1lKDAp
CiAgICAgLCBtX2xhc3RSZWZyZXNoZWRUaW1lKG1fc3RhcnRUaW1lKQotICAgICwgbV9zdGF0ZShQ
bGF5aW5nU3RhdGUpCisgICAgLCBtX3N0YXRlKHN0YXRlKQogewogfQogCiBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJBbmlt
YXRpb24mIG90aGVyKQotICAgIDogbV9rZXlmcmFtZXMob3RoZXIua2V5ZnJhbWVzKCkpCi0gICAg
LCBtX2JveFNpemUob3RoZXIuYm94U2l6ZSgpKQotICAgICwgbV9hbmltYXRpb24oQW5pbWF0aW9u
OjpjcmVhdGUoKm90aGVyLmFuaW1hdGlvbigpKSkKLSAgICAsIG1fbmFtZShvdGhlci5uYW1lKCku
aXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkgPyBvdGhlci5uYW1lKCkgOiBvdGhlci5uYW1l
KCkuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX2xpc3RzTWF0Y2gob3RoZXIubGlzdHNNYXRjaCgp
KQotICAgICwgbV9zdGFydFRpbWUob3RoZXIuc3RhcnRUaW1lKCkpCi0gICAgLCBtX3BhdXNlVGlt
ZShvdGhlci5wYXVzZVRpbWUoKSkKKyAgICA6IG1fbmFtZShvdGhlci5tX25hbWUuaXNTYWZlVG9T
ZW5kVG9Bbm90aGVyVGhyZWFkKCkgPyBvdGhlci5tX25hbWUgOiBvdGhlci5tX25hbWUuaXNvbGF0
ZWRDb3B5KCkpCisgICAgLCBtX2tleWZyYW1lcyhvdGhlci5tX2tleWZyYW1lcykKKyAgICAsIG1f
Ym94U2l6ZShvdGhlci5tX2JveFNpemUpCisgICAgLCBtX2FuaW1hdGlvbihBbmltYXRpb246OmNy
ZWF0ZSgqb3RoZXIubV9hbmltYXRpb24pKQorICAgICwgbV9saXN0c01hdGNoKG90aGVyLm1fbGlz
dHNNYXRjaCkKKyAgICAsIG1fc3RhcnRUaW1lKG90aGVyLm1fc3RhcnRUaW1lKQorICAgICwgbV9w
YXVzZVRpbWUob3RoZXIubV9wYXVzZVRpbWUpCiAgICAgLCBtX3RvdGFsUnVubmluZ1RpbWUob3Ro
ZXIubV90b3RhbFJ1bm5pbmdUaW1lKQogICAgICwgbV9sYXN0UmVmcmVzaGVkVGltZShvdGhlci5t
X2xhc3RSZWZyZXNoZWRUaW1lKQotICAgICwgbV9zdGF0ZShvdGhlci5zdGF0ZSgpKQorICAgICwg
bV9zdGF0ZShvdGhlci5tX3N0YXRlKQogewogfQogCi12b2lkIFRleHR1cmVNYXBwZXJBbmltYXRp
b246OmFwcGx5SW50ZXJuYWwoQ2xpZW50KiBjbGllbnQsIGNvbnN0IEFuaW1hdGlvblZhbHVlJiBm
cm9tLCBjb25zdCBBbmltYXRpb25WYWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKQotewotICAgIHN3
aXRjaCAobV9rZXlmcmFtZXMucHJvcGVydHkoKSkgewotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0
eU9wYWNpdHk6Ci0gICAgICAgIGNsaWVudC0+c2V0QW5pbWF0ZWRPcGFjaXR5KGFwcGx5T3BhY2l0
eUFuaW1hdGlvbigoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSY+KGZyb20p
LnZhbHVlKCkpLCAoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSY+KHRvKS52
YWx1ZSgpKSwgcHJvZ3Jlc3MpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQW5pbWF0ZWRQ
cm9wZXJ0eVRyYW5zZm9ybToKLSAgICAgICAgY2xpZW50LT5zZXRBbmltYXRlZFRyYW5zZm9ybShh
cHBseVRyYW5zZm9ybUFuaW1hdGlvbihzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRp
b25WYWx1ZSY+KGZyb20pLnZhbHVlKCksIHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlJj4odG8pLnZhbHVlKCksIHByb2dyZXNzLCBtX2JveFNpemUsIG1fbGlzdHNNYXRj
aCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5RmlsdGVyOgot
ICAgICAgICBjbGllbnQtPnNldEFuaW1hdGVkRmlsdGVycyhhcHBseUZpbHRlckFuaW1hdGlvbihz
dGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KGZyb20pLnZhbHVlKCksIHN0
YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlJj4odG8pLnZhbHVlKCksIHByb2dy
ZXNzLCBtX2JveFNpemUpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotYm9vbCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKHN0YXRlKCkgIT0gU3RvcHBlZFN0
YXRlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+Zmls
bHNGb3J3YXJkcygpOwotfQotCi1ib29sIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpoYXNBY3Rp
dmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0eXBlKSBjb25zdAotewotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmIChtX2FuaW1hdGlvbnNbaV0uaXNBY3RpdmUoKSAmJiBtX2FuaW1hdGlvbnNbaV0ucHJv
cGVydHkoKSA9PSB0eXBlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzUnVubmlu
Z0FuaW1hdGlvbnMoKSBjb25zdAotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmlt
YXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0uc3RhdGUo
KSA9PSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpQbGF5aW5nU3RhdGUpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbjo6YXBwbHkoQ2xpZW50KiBjbGllbnQpCit2b2lkIFRleHR1cmVNYXBw
ZXJBbmltYXRpb246OmFwcGx5KENsaWVudCYgY2xpZW50KQogewogICAgIGlmICghaXNBY3RpdmUo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjkwLDcgKzI0MSw4IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbjo6YXBwbHkoQ2xpZW50KiBjbGllbnQpCiAgICAgZG91YmxlIG5vcm1hbGl6ZWRW
YWx1ZSA9IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZSh0b3RhbFJ1bm5pbmdUaW1lLCBtX2FuaW1h
dGlvbi0+ZHVyYXRpb24oKSwgbV9hbmltYXRpb24tPmRpcmVjdGlvbigpLCBtX2FuaW1hdGlvbi0+
aXRlcmF0aW9uQ291bnQoKSk7CiAKICAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50
KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlICYmIHRvdGFsUnVubmluZ1Rp
bWUgPj0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgKiBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291
bnQoKSkgewotICAgICAgICBzZXRTdGF0ZShTdG9wcGVkU3RhdGUpOworICAgICAgICBtX3N0YXRl
ID0gQW5pbWF0aW9uU3RhdGU6OlN0b3BwZWQ7CisgICAgICAgIG1fcGF1c2VUaW1lID0gMDsKICAg
ICAgICAgaWYgKG1fYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCkpCiAgICAgICAgICAgICBub3Jt
YWxpemVkVmFsdWUgPSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JGaWxsc0ZvcndhcmRzKG1f
YW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpLCBtX2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCkpOwog
ICAgIH0KQEAgLTMyNSw5ICsyNzcsMjMgQEAgdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjph
cHBseShDbGllbnQqIGNsaWVudCkKICAgICB9CiB9CiAKK3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbjo6cGF1c2UoZG91YmxlIHRpbWUpCit7CisgICAgbV9zdGF0ZSA9IEFuaW1hdGlvblN0YXRl
OjpQYXVzZWQ7CisgICAgbV9wYXVzZVRpbWUgPSB0aW1lOworfQorCit2b2lkIFRleHR1cmVNYXBw
ZXJBbmltYXRpb246OnJlc3VtZSgpCit7CisgICAgbV9zdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpQ
bGF5aW5nOworICAgIG1fcGF1c2VUaW1lID0gMDsKKyAgICBtX3RvdGFsUnVubmluZ1RpbWUgPSBt
X3BhdXNlVGltZTsKKyAgICBtX2xhc3RSZWZyZXNoZWRUaW1lID0gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCk7Cit9CisKIGRvdWJsZSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpjb21wdXRl
VG90YWxSdW5uaW5nVGltZSgpCiB7Ci0gICAgaWYgKHN0YXRlKCkgPT0gUGF1c2VkU3RhdGUpCisg
ICAgaWYgKG1fc3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZCkKICAgICAgICAgcmV0dXJu
IG1fcGF1c2VUaW1lOwogCiAgICAgZG91YmxlIG9sZExhc3RSZWZyZXNoZWRUaW1lID0gbV9sYXN0
UmVmcmVzaGVkVGltZTsKQEAgLTMzNiw3NCArMzAyLDk2IEBAIGRvdWJsZSBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uOjpjb21wdXRlVG90YWxSdW5uaW5nVGltZSgpCiAgICAgcmV0dXJuIG1fdG90YWxS
dW5uaW5nVGltZTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpwYXVzZShkb3Vi
bGUgdGltZSkKK2Jvb2wgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6aXNBY3RpdmUoKSBjb25zdAog
ewotICAgIHNldFN0YXRlKFBhdXNlZFN0YXRlKTsKLSAgICBtX3BhdXNlVGltZSA9IHRpbWU7Cisg
ICAgcmV0dXJuIG1fc3RhdGUgIT0gQW5pbWF0aW9uU3RhdGU6OlN0b3BwZWQgfHwgbV9hbmltYXRp
b24tPmZpbGxzRm9yd2FyZHMoKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpy
ZXN1bWUoKQordm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphcHBseUludGVybmFsKENsaWVu
dCYgY2xpZW50LCBjb25zdCBBbmltYXRpb25WYWx1ZSYgZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFs
dWUmIHRvLCBmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBzZXRTdGF0ZShQbGF5aW5nU3RhdGUpOwot
ICAgIG1fdG90YWxSdW5uaW5nVGltZSA9IG1fcGF1c2VUaW1lOwotICAgIG1fbGFzdFJlZnJlc2hl
ZFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBzd2l0Y2ggKG1fa2V5
ZnJhbWVzLnByb3BlcnR5KCkpIHsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5Ogor
ICAgICAgICBjbGllbnQuc2V0QW5pbWF0ZWRPcGFjaXR5KGFwcGx5T3BhY2l0eUFuaW1hdGlvbigo
c3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSY+KGZyb20pLnZhbHVlKCkpLCAo
c3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSY+KHRvKS52YWx1ZSgpKSwgcHJv
Z3Jlc3MpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVRyYW5z
Zm9ybToKKyAgICAgICAgY2xpZW50LnNldEFuaW1hdGVkVHJhbnNmb3JtKGFwcGx5VHJhbnNmb3Jt
QW5pbWF0aW9uKHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlJj4oZnJv
bSkudmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUmPih0
bykudmFsdWUoKSwgcHJvZ3Jlc3MsIG1fYm94U2l6ZSwgbV9saXN0c01hdGNoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlGaWx0ZXI6CisgICAgICAgIGNsaWVu
dC5zZXRBbmltYXRlZEZpbHRlcnMoYXBwbHlGaWx0ZXJBbmltYXRpb24oc3RhdGljX2Nhc3Q8Y29u
c3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUmPihmcm9tKS52YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25z
dCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KHRvKS52YWx1ZSgpLCBwcm9ncmVzcywgbV9ib3hTaXpl
KSk7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OmFkZChj
b25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pCiB7CiAgICAgLy8gUmVtb3Zl
IHRoZSBvbGQgc3RhdGUgaWYgd2UgYXJlIHJlc3VtaW5nIGEgcGF1c2VkIGFuaW1hdGlvbi4KLSAg
ICByZW1vdmUoYW5pbWF0aW9uLm5hbWUoKSwgYW5pbWF0aW9uLnByb3BlcnR5KCkpOworICAgIHJl
bW92ZShhbmltYXRpb24ubmFtZSgpLCBhbmltYXRpb24ua2V5ZnJhbWVzKCkucHJvcGVydHkoKSk7
CiAKICAgICBtX2FuaW1hdGlvbnMuYXBwZW5kKGFuaW1hdGlvbik7CiB9CiAKK3ZvaWQgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbnM6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgbV9h
bmltYXRpb25zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFtZV0gKGNvbnN0IFRleHR1cmVNYXBwZXJB
bmltYXRpb24mIGFuaW1hdGlvbikgeworICAgICAgICByZXR1cm4gYW5pbWF0aW9uLm5hbWUoKSA9
PSBuYW1lOworICAgIH0pOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpyZW1v
dmUoY29uc3QgU3RyaW5nJiBuYW1lLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkpCit7Cisg
ICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFtZSwgcHJvcGVydHldIChjb25z
dCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsKKyAgICAgICAgcmV0dXJuIGFu
aW1hdGlvbi5uYW1lKCkgPT0gbmFtZSAmJiBhbmltYXRpb24ua2V5ZnJhbWVzKCkucHJvcGVydHko
KSA9PSBwcm9wZXJ0eTsKKyAgICB9KTsKK30KKwogdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
czo6cGF1c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgb2Zmc2V0KQogewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChtX2FuaW1hdGlvbnNbaV0ubmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICBtX2FuaW1hdGlv
bnNbaV0ucGF1c2Uob2Zmc2V0KTsKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0
aW9ucykgeworICAgICAgICBpZiAoYW5pbWF0aW9uLm5hbWUoKSA9PSBuYW1lKQorICAgICAgICAg
ICAgYW5pbWF0aW9uLnBhdXNlKG9mZnNldCk7CiAgICAgfQogfQogCiB2b2lkIFRleHR1cmVNYXBw
ZXJBbmltYXRpb25zOjpzdXNwZW5kKGRvdWJsZSBvZmZzZXQpCiB7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYW5pbWF0aW9u
c1tpXS5wYXVzZShvZmZzZXQpOworICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRp
b25zKQorICAgICAgICBhbmltYXRpb24ucGF1c2Uob2Zmc2V0KTsKIH0KIAogdm9pZCBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uczo6cmVzdW1lKCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9hbmltYXRpb25zW2ldLnJlc3Vt
ZSgpOworICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25zKQorICAgICAgICBh
bmltYXRpb24ucmVzdW1lKCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnJl
bW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjph
cHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpDbGllbnQmIGNsaWVudCkKIHsKLSAgICBtX2Fu
aW1hdGlvbnMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZuYW1lXSAoY29uc3QgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbiYgYW5pbWF0aW9uKSB7Ci0gICAgICAgIHJldHVybiBhbmltYXRpb24ubmFtZSgpID09
IG5hbWU7Ci0gICAgfSk7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnMp
CisgICAgICAgIGFuaW1hdGlvbi5hcHBseShjbGllbnQpOwogfQogCi12b2lkIFRleHR1cmVNYXBw
ZXJBbmltYXRpb25zOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBBbmltYXRlZFByb3BlcnR5
SUQgcHJvcGVydHkpCitib29sIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpoYXNBY3RpdmVBbmlt
YXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0eXBlKSBjb25zdAogewotICAgIG1fYW5p
bWF0aW9ucy5yZW1vdmVBbGxNYXRjaGluZyhbJm5hbWUsIHByb3BlcnR5XSAoY29uc3QgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7Ci0gICAgICAgIHJldHVybiBhbmltYXRpb24u
bmFtZSgpID09IG5hbWUgJiYgYW5pbWF0aW9uLnByb3BlcnR5KCkgPT0gcHJvcGVydHk7Ci0gICAg
fSk7CisgICAgcmV0dXJuIHN0ZDo6YW55X29mKG1fYW5pbWF0aW9ucy5iZWdpbigpLCBtX2FuaW1h
dGlvbnMuZW5kKCksCisgICAgICAgIFsmdHlwZV0oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlv
biYgYW5pbWF0aW9uKSB7IHJldHVybiBhbmltYXRpb24uaXNBY3RpdmUoKSAmJiBhbmltYXRpb24u
a2V5ZnJhbWVzKCkucHJvcGVydHkoKSA9PSB0eXBlOyB9KTsKIH0KIAotdm9pZCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uczo6YXBwbHkoVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6Q2xpZW50KiBjbGll
bnQpCitib29sIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpoYXNSdW5uaW5nQW5pbWF0aW9ucygp
IGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIG1fYW5pbWF0aW9uc1tpXS5hcHBseShjbGllbnQpOworICAgIHJldHVy
biBzdGQ6OmFueV9vZihtX2FuaW1hdGlvbnMuYmVnaW4oKSwgbV9hbmltYXRpb25zLmVuZCgpLAor
ICAgICAgICBbXShjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgcmV0
dXJuIGFuaW1hdGlvbi5zdGF0ZSgpID09IFRleHR1cmVNYXBwZXJBbmltYXRpb246OkFuaW1hdGlv
blN0YXRlOjpQbGF5aW5nOyB9KTsKIH0KIAogVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogewogICAgIFRl
eHR1cmVNYXBwZXJBbmltYXRpb25zIGFjdGl2ZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hbmltYXRpb25zW2ld
LmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBhY3RpdmUuYWRkKG1fYW5pbWF0aW9uc1tpXSk7Cisg
ICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnMpIHsKKyAgICAgICAgaWYgKGFu
aW1hdGlvbi5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgYWN0aXZlLmFkZChhbmltYXRpb24pOwog
ICAgIH0KICAgICByZXR1cm4gYWN0aXZlOwogfQotfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaAppbmRleCAzNzZiYzJkY2UyMjBlM2Y5NWM5
YjgzNWI4NDFjNGRkN2U4ZWVmNzE5Li42YTQ0N2Q3NmU3NzE0OGQ1MzEwZWUyNzU5YjUyZGRmNWFh
NDgxOTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgKQEAgLTIxLDE1ICsyMSwx
NSBAQAogI2RlZmluZSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKIAogI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworCiBjbGFzcyBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uIHsKIHB1YmxpYzoKLSAgICBlbnVtIEFuaW1hdGlvblN0YXRl
IHsgUGxheWluZ1N0YXRlLCBQYXVzZWRTdGF0ZSwgU3RvcHBlZFN0YXRlIH07CisgICAgZW51bSBj
bGFzcyBBbmltYXRpb25TdGF0ZSB7IFBsYXlpbmcsIFBhdXNlZCwgU3RvcHBlZCB9OworCiAgICAg
Y2xhc3MgQ2xpZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRBbmlt
YXRlZFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKQEAgLTQwLDM0
ICs0MCwzMSBAQCBwdWJsaWM6CiAgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbigpCiAgICAgICAg
IDogbV9rZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQpCiAgICAgeyB9Ci0gICAgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEFuaW1hdGlvbiosIGRvdWJsZSwgYm9vbCk7Cisg
ICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBLZXlmcmFtZVZh
bHVlTGlzdCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEFuaW1hdGlvbiYsIGJvb2wsIGRvdWJs
ZSwgZG91YmxlLCBBbmltYXRpb25TdGF0ZSk7CiAgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbihj
b25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJik7Ci0gICAgdm9pZCBhcHBseShDbGllbnQqKTsK
KworICAgIHZvaWQgYXBwbHkoQ2xpZW50Jik7CiAgICAgdm9pZCBwYXVzZShkb3VibGUpOwogICAg
IHZvaWQgcmVzdW1lKCk7Ci0gICAgZG91YmxlIGNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKCk7Ci0g
ICAgQW5pbWF0aW9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0gICAg
dm9pZCBzZXRTdGF0ZShBbmltYXRpb25TdGF0ZSBzLCBkb3VibGUgcGF1c2VUaW1lID0gMCkKLSAg
ICB7Ci0gICAgICAgIG1fc3RhdGUgPSBzOwotICAgICAgICBtX3BhdXNlVGltZSA9IHBhdXNlVGlt
ZTsKLSAgICB9Ci0gICAgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1
cm4gbV9rZXlmcmFtZXMucHJvcGVydHkoKTsgfQogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsK
LSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIEZsb2F0U2l6
ZSBib3hTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ib3hTaXplOyB9Ci0gICAgZG91YmxlIHN0YXJ0
VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9Ci0gICAgZG91YmxlIHBhdXNlVGlt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VUaW1lOyB9Ci0gICAgUGFzc1JlZlB0cjxBbmltYXRp
b24+IGFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uLmdldCgpOyB9CisKKyAg
ICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICBjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFt
ZXM7IH0KKyAgICBjb25zdCBGbG9hdFNpemUmIGJveFNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jv
eFNpemU7IH0KKyAgICBjb25zdCBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2FuaW1hdGlvbjsgfQogICAgIGJvb2wgbGlzdHNNYXRjaCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGlzdHNNYXRjaDsgfQorICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdCB7IHJldHVy
biBtX3N0YXJ0VGltZTsgfQorICAgIGRvdWJsZSBwYXVzZVRpbWUoKSBjb25zdCB7IHJldHVybiBt
X3BhdXNlVGltZTsgfQorICAgIEFuaW1hdGlvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgYXBwbHlJbnRlcm5hbChDbGllbnQqLCBj
b25zdCBBbmltYXRpb25WYWx1ZSYgZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFsdWUmIHRvLCBmbG9h
dCBwcm9ncmVzcyk7CisgICAgdm9pZCBhcHBseUludGVybmFsKENsaWVudCYsIGNvbnN0IEFuaW1h
dGlvblZhbHVlJiBmcm9tLCBjb25zdCBBbmltYXRpb25WYWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNz
KTsKKyAgICBkb3VibGUgY29tcHV0ZVRvdGFsUnVubmluZ1RpbWUoKTsKKworICAgIFN0cmluZyBt
X25hbWU7CiAgICAgS2V5ZnJhbWVWYWx1ZUxpc3QgbV9rZXlmcmFtZXM7CiAgICAgRmxvYXRTaXpl
IG1fYm94U2l6ZTsKICAgICBSZWZQdHI8QW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsKLSAgICBTdHJp
bmcgbV9uYW1lOwogICAgIGJvb2wgbV9saXN0c01hdGNoOwogICAgIGRvdWJsZSBtX3N0YXJ0VGlt
ZTsKICAgICBkb3VibGUgbV9wYXVzZVRpbWU7CkBAIC03OCw3ICs3NSw3IEBAIHByaXZhdGU6CiAK
IGNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIHsKIHB1YmxpYzoKLSAgICBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9ucygpIHsgfQorICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zKCkgPSBkZWZh
dWx0OwogCiAgICAgdm9pZCBhZGQoY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYpOwogICAg
IHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSk7CkBAIC04Niw3ICs4Myw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHBhdXNlKGNvbnN0IFN0cmluZyYsIGRvdWJsZSk7CiAgICAgdm9pZCBzdXNw
ZW5kKGRvdWJsZSk7CiAgICAgdm9pZCByZXN1bWUoKTsKLSAgICB2b2lkIGFwcGx5KFRleHR1cmVN
YXBwZXJBbmltYXRpb246OkNsaWVudCopOworCisgICAgdm9pZCBhcHBseShUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uOjpDbGllbnQmKTsKKwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fYW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0KICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5pbWF0aW9ucy5zaXplKCk7IH0KICAgICBjb25zdCBWZWN0b3I8VGV4dHVyZU1hcHBl
ckFuaW1hdGlvbj4mIGFuaW1hdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbnM7IH0K
QEAgLTk0LDcgKzkzLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNSdW5uaW5nQW5pbWF0aW9u
cygpIGNvbnN0OwogICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFBy
b3BlcnR5SUQgdHlwZSkgY29uc3Q7Ci0KICAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyBnZXRB
Y3RpdmVBbmltYXRpb25zKCkgY29uc3Q7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5
ZXIuY3BwCmluZGV4IDZiZGU0MGE1MDljMjMzNjg2MjZkZGYxZDBkNzY5Y2Y3MGJiYjU2YjEuLjcz
ODY0MTJjNDViM2IzMTg3MmZmZmE5NWFlZGIxYzBmZDM4OGRlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTGF5ZXIuY3BwCkBAIC02NTgsNyArNjU4LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6
OmFwcGx5QW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6
OnN5bmNBbmltYXRpb25zKCkKIHsKLSAgICBtX2FuaW1hdGlvbnMuYXBwbHkodGhpcyk7CisgICAg
bV9hbmltYXRpb25zLmFwcGx5KCp0aGlzKTsKICAgICBpZiAoIW1fYW5pbWF0aW9ucy5oYXNBY3Rp
dmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlUcmFuc2Zvcm0pKQogICAgICAgICBt
X2N1cnJlbnRUcmFuc2Zvcm0uc2V0TG9jYWxUcmFuc2Zvcm0obV9zdGF0ZS50cmFuc2Zvcm0pOwog
ICAgIGlmICghbV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQ
cm9wZXJ0eU9wYWNpdHkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCAyOWM2NzQxOGIyNzc1YWMyOTFhY2UxYTJkMTQ1
MzM0OTc0NTJiMDgwLi5jODE0YjkxYzM2YmM2MmY5ZGRmNzYxODRiMDdiN2Y2NWVhYjY5NDg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmNwcApAQCAtMTE4NSw3ICsxMTg1LDcgQEAgYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LAogICAg
ICAgICBsaXN0c01hdGNoID0gdmFsaWRhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlTGlzdCwg
aWdub3JlZEhhc0JpZ1JvdGF0aW9uKSA+PSAwOwogCiAgICAgbV9sYXN0QW5pbWF0aW9uU3RhcnRU
aW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBkZWxheUFzTmVnYXRpdmVUaW1l
T2Zmc2V0OwotICAgIG1fYW5pbWF0aW9ucy5hZGQoVGV4dHVyZU1hcHBlckFuaW1hdGlvbihrZXlm
cmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIGFuaW0sIG1fbGFzdEFuaW1hdGlvblN0YXJ0
VGltZSwgbGlzdHNNYXRjaCkpOworICAgIG1fYW5pbWF0aW9ucy5hZGQoVGV4dHVyZU1hcHBlckFu
aW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsICphbmltLCBsaXN0c01h
dGNoLCBtX2xhc3RBbmltYXRpb25TdGFydFRpbWUsIDAsIFRleHR1cmVNYXBwZXJBbmltYXRpb246
OkFuaW1hdGlvblN0YXRlOjpQbGF5aW5nKSk7CiAgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIu
c3RhcnRPbmVTaG90KDApOwogICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKICAgICByZXR1cm4g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRD
b2RlcnMuY3BwCmluZGV4IDFjMzQ1OTlhOGJiNWM1NGRhZDJhOWU3MzAyN2RjMWVkODE5ODE3MDEu
LjlkZDYzZmQyM2NjYzE2NjgyOTc3ZGZlZDAwZDRkYjllYmE4YTJjNWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApAQCAtNTQ2
LDkgKzU0Niw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6
ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgVGV4CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBhbmltYXRpb24gPSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKG5hbWUsIGtleWZyYW1lcywg
Ym94U2l6ZSwgYW5pbWF0aW9uT2JqZWN0LmdldCgpLCBzdGFydFRpbWUsIGxpc3RzTWF0Y2gpOwot
ICAgIGFuaW1hdGlvbi5zZXRTdGF0ZShzdGF0ZSwgcGF1c2VUaW1lKTsKLQorICAgIGFuaW1hdGlv
biA9IFRleHR1cmVNYXBwZXJBbmltYXRpb24obmFtZSwga2V5ZnJhbWVzLCBib3hTaXplLCAqYW5p
bWF0aW9uT2JqZWN0LCBsaXN0c01hdGNoLCBzdGFydFRpbWUsIHBhdXNlVGltZSwgc3RhdGUpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268002</attachid>
            <date>2015-12-29 23:44:53 -0800</date>
            <delta_ts>2015-12-29 23:44:53 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-152112-20151229234418.patch</filename>
            <type>text/plain</type>
            <size>26730</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0NDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDE4NTdhZmVkMjMzMWU3
OGMzODg0MzBmYTlmOTMwNzM1MGY1ODU1MC4uNjllNDdiMjNkZjlmZmUyZjI5ZjkyZTM2OThhYTJm
OGNhMjNjMjg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE1LTEyLTI5ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbVGV4TWFwXSBDbGVh
biB1cCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMTEyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgdGhl
IFRleHR1cmVNYXBwZXJBbmltYXRpb24gY2xhc3MuIFR1cm4gQW5pbWF0aW9uU3RhdGUgaW50byBh
biBlbnVtCisgICAgICAgIGNsYXNzLiBVc2UgcmVmZXJlbmNlcyBmb3Igbm9uLW51bGwgcG9pbnRl
ciBwYXJhbWV0ZXJzIHRvIG9uZSB2ZXJzaW9uIG9mIHRoZQorICAgICAgICBjb25zdHJ1Y3RvciBh
bmQgdGhlIGFwcGx5KCkgYW5kIGFwcGx5SW50ZXJuYWwoKSBtZXRob2RzLiBSZW1vdmUgdW5uZWNl
c3NhcnkKKyAgICAgICAgcHVibGljIG1ldGhvZHMgYW5kIHJlb3JkZXIgdGhlIHJlbWFpbmluZyBv
bmVzIGludG8gc29tZXRoaW5nIG1vcmUgc2Vuc2libGUuCisgICAgICAgIEluIHRlcm1zIG9mIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzLCB0aGUgbWV0aG9kcyBhcmUgbW92ZWQgYXJv
dW5kIHRvCisgICAgICAgIGZvbGxvdyB0aGUgb3JkZXIgb2YgZGVjbGFyYXRpb25zLCBhbG9uZyB3
aXRoIHNvbWUgc21hbGwgY2xlYW51cHMgYW5kIGltcHJvdmVtZW50cworICAgICAgICBhcHBsaWVk
LgorCisgICAgICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIGNsYXNzIGlzIGFsc28gcmVmcmVz
aGVkLiBUaGUgY29uc3RydWN0b3IgaXMgZGVmYXVsdGVkLAorICAgICAgICBhbmQgdGhlIG1ldGhv
ZCBpbXBsZW1lbnRhdGlvbnMgYXJlIHJlb3JkZXJlZCBhIGJpdCBhbmQgYWxzbyBhZGp1c3RlZCB0
byB1c2UgdGhlCisgICAgICAgIHJhbmdlLWJhc2VkIGZvci1sb29wcyBhbmQgc29tZSBTVEwgdXRp
bGl0aWVzLgorCisgICAgICAgIFN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGltcGxlbWVudGF0aW9u
IGZpbGUgYXJlIGFsc28gdXBkYXRlZCB0byB1c2UgcmFuZ2UtYmFzZWQKKyAgICAgICAgZm9yLWxv
b3BzLCByZWZlcmVuY2VzIGFuZCBudWxscHRycyB3aGVyZSBwb3NzaWJsZS4KKworICAgICAgICBU
aGVyZSdzIG5vIGNoYW5nZSBpbiBiZWhhdmlvciBhcyB0aGlzIGlzIGp1c3QgYSByZWZhY3Rvcmlu
Zy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpibGVuZEZ1bmMp
OgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlGaWx0ZXJBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmFw
cGx5VHJhbnNmb3JtQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJB
bmltYXRpb246OlRleHR1cmVNYXBwZXJBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckFuaW1hdGlvbjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckFuaW1hdGlvbjo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFu
aW1hdGlvbjo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRp
b246OmNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJBbmltYXRpb246OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJBbmltYXRpb246OmFwcGx5SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckFuaW1hdGlvbnM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uczo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRp
b25zOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6
c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cmVz
dW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5p
bWF0aW9uc09mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
czo6aGFzUnVubmluZ0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmg6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJBbmltYXRpb246OmJveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckFuaW1hdGlvbjo6YW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJBbmltYXRpb246OnN0YXJ0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uOjpwYXVzZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFu
aW1hdGlvbjo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlv
bjo6c2V0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFu
aW1hdGlvbjo6cHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckFuaW1hdGlvbnM6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c3luY0FuaW1hdGlvbnMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjphZGRBbmltYXRpb24pOgorCiAyMDE1LTEyLTI5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSAic2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQ
b3NpdGlvbiIgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIHJlZmVyIHRvIHNjcm9sbFBvc2l0aW9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggYzVjOGQwMDA1MGIzOWMzZTRiYWQxOTJhZmVhNzdlYTRmNGEyZjYzYy4u
OTZjOGNjNjk2OGI4NDdlN2I5OGM3ODM0ZGRmNzk3MjNjYzBkMzZmNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzIEBACisyMDE1LTEyLTI5ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlh
LmNvbT4KKworICAgICAgICBbVGV4TWFwXSBDbGVhbiB1cCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVy
PFRleHR1cmVNYXBwZXJBbmltYXRpb24+OjpkZWNvZGUpOgorCiAyMDE1LTEyLTI5ICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBTY3JvbGxW
aWV3OjpzY3JvbGxPZmZzZXQoKSBpbiBwcmVwYXJhdGlvbiBmb3Igc2Nyb2xsT2Zmc2V0IHZzLiBz
Y3JvbGxQb3NpdGlvbiBjbGFyaWZpY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmNwcAppbmRleCBjMTU0OTI5YzAyMjEwNDFhNjgyZGNiODBlNjc4ZjQyZjk3Y2Rh
MmEyLi4zYWY0YTg5YmUyNmYyNTBjNDUyZWM3MDBlMzM4ODAzMDRmMjk3N2M1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTU3NCw3ICs1NzQsNyBAQCBi
b29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJh
bWVWYWx1ZUxpc3QmIHZhbHVlTGlzdAogICAgICAgICBsaXN0c01hdGNoID0gdmFsaWRhdGVUcmFu
c2Zvcm1PcGVyYXRpb25zKHZhbHVlTGlzdCwgaGFzQmlnUm90YXRpb24pID49IDA7CiAKICAgICBj
b25zdCBkb3VibGUgY3VycmVudFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsK
LSAgICBtX2FuaW1hdGlvbnMuYWRkKFRleHR1cmVNYXBwZXJBbmltYXRpb24oa2V5ZnJhbWVzTmFt
ZSwgdmFsdWVMaXN0LCBib3hTaXplLCBhbmltLCBjdXJyZW50VGltZSAtIHRpbWVPZmZzZXQsIGxp
c3RzTWF0Y2gpKTsKKyAgICBtX2FuaW1hdGlvbnMuYWRkKFRleHR1cmVNYXBwZXJBbmltYXRpb24o
a2V5ZnJhbWVzTmFtZSwgdmFsdWVMaXN0LCBib3hTaXplLCAqYW5pbSwgbGlzdHNNYXRjaCwgY3Vy
cmVudFRpbWUgLSB0aW1lT2Zmc2V0LCAwLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpBbmltYXRp
b25TdGF0ZTo6UGxheWluZykpOwogICAgIC8vIG1fYW5pbWF0aW9uU3RhcnRUaW1lIGlzIHRoZSB0
aW1lIG9mIHRoZSBmaXJzdCByZWFsIGZyYW1lIG9mIGFuaW1hdGlvbiwgbm93IG9yIGRlbGF5ZWQg
YnkgYSBuZWdhdGl2ZSBvZmZzZXQuCiAgICAgaWYgKHRpbWVPZmZzZXQgPiAwKQogICAgICAgICBt
X2FuaW1hdGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJB
bmltYXRpb24uY3BwCmluZGV4IDI0ZWQ1NDIzMTVhMTQ1NjJiMjIyMTk0YWE5YmY2ZmVhMzc0NDk5
YjIuLjBiZWRkMGE1NzRjMjQ5OWU1ZTNhY2U5MjdiNTQxMWY5NDIwMWE4NTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5p
bWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAKQEAgLTI2LDE2ICsyNiwxMyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+
IGJsZW5kRnVuYyhGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uKiB0b09w
LCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgYm9vbCBibGVuZFRvUGFz
c3Rocm91Z2ggPSBmYWxzZSkKK3N0YXRpYyBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1
bmMoRmlsdGVyT3BlcmF0aW9uKiBmcm9tT3AsIEZpbHRlck9wZXJhdGlvbiYgdG9PcCwgZG91Ymxl
IHByb2dyZXNzLCBjb25zdCBGbG9hdFNpemUmIHNpemUsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdo
ID0gZmFsc2UpCiB7Ci0gICAgQVNTRVJUKHRvT3ApOwotICAgIGlmICh0b09wLT5ibGVuZGluZ05l
ZWRzUmVuZGVyZXJTaXplKCkpCi0gICAgICAgIHJldHVybiB0b09wLT5ibGVuZChmcm9tT3AsIHBy
b2dyZXNzLCBMYXlvdXRTaXplKHNpemUpLCBibGVuZFRvUGFzc3Rocm91Z2gpOwotCi0gICAgcmV0
dXJuIHRvT3AtPmJsZW5kKGZyb21PcCwgcHJvZ3Jlc3MsIGJsZW5kVG9QYXNzdGhyb3VnaCk7Cisg
ICAgaWYgKHRvT3AuYmxlbmRpbmdOZWVkc1JlbmRlcmVyU2l6ZSgpKQorICAgICAgICByZXR1cm4g
dG9PcC5ibGVuZChmcm9tT3AsIHByb2dyZXNzLCBMYXlvdXRTaXplKHNpemUpLCBibGVuZFRvUGFz
c3Rocm91Z2gpOworICAgIHJldHVybiB0b09wLmJsZW5kKGZyb21PcCwgcHJvZ3Jlc3MsIGJsZW5k
VG9QYXNzdGhyb3VnaCk7CiB9CiAKLQogc3RhdGljIEZpbHRlck9wZXJhdGlvbnMgYXBwbHlGaWx0
ZXJBbmltYXRpb24oY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQog
ewogICAgIC8vIEZpcnN0IGZyYW1lIG9mIGFuIGFuaW1hdGlvbi4KQEAgLTU1LDkgKzUyLDkgQEAg
c3RhdGljIEZpbHRlck9wZXJhdGlvbnMgYXBwbHlGaWx0ZXJBbmltYXRpb24oY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgZnJvbSwgY29uc3QKICAgICBzaXplX3QgdG9TaXplID0gdG8ub3BlcmF0aW9u
cygpLnNpemUoKTsKICAgICBzaXplX3Qgc2l6ZSA9IHN0ZDo6bWF4KGZyb21TaXplLCB0b1NpemUp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIFJlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwgZnJvbVNpemUpID8gZnJvbS5vcGVyYXRp
b25zKClbaV0uZ2V0KCkgOiAwOwotICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiB0b09w
ID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsKLSAgICAgICAg
UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9wID0gdG9PcCA/IGJsZW5kRnVuYyhmcm9t
T3AuZ2V0KCksIHRvT3AuZ2V0KCksIHByb2dyZXNzLCBib3hTaXplKSA6IChmcm9tT3AgPyBibGVu
ZEZ1bmMoMCwgZnJvbU9wLmdldCgpLCBwcm9ncmVzcywgYm94U2l6ZSwgdHJ1ZSkgOiAwKTsKKyAg
ICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZnJvbU9wID0gKGkgPCBmcm9tU2l6ZSkgPyBm
cm9tLm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IG51bGxwdHI7CisgICAgICAgIFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+IHRvT3AgPSAoaSA8IHRvU2l6ZSkgPyB0by5vcGVyYXRpb25zKClbaV0uZ2V0
KCkgOiBudWxscHRyOworICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZGVkT3Ag
PSB0b09wID8gYmxlbmRGdW5jKGZyb21PcC5nZXQoKSwgKnRvT3AsIHByb2dyZXNzLCBib3hTaXpl
KSA6IChmcm9tT3AgPyBibGVuZEZ1bmMobnVsbHB0ciwgKmZyb21PcCwgcHJvZ3Jlc3MsIGJveFNp
emUsIHRydWUpIDogbnVsbHB0cik7CiAgICAgICAgIGlmIChibGVuZGVkT3ApCiAgICAgICAgICAg
ICByZXN1bHQub3BlcmF0aW9ucygpLmFwcGVuZChibGVuZGVkT3ApOwogICAgICAgICBlbHNlIHsK
QEAgLTc0LDExICs3MSw5IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb25zIGFwcGx5RmlsdGVyQW5p
bWF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0CiAKIHN0YXRpYyBib29s
IHNob3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZShBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24sIGludCBsb29wQ291bnQpCiB7Ci0gICAgaWYgKCgoZGlyZWN0aW9uID09IEFu
aW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlKSAmJiAobG9vcENvdW50ICYgMSkp
Ci0gICAgICAgIHx8ICgoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9u
QWx0ZXJuYXRlUmV2ZXJzZSkgJiYgIShsb29wQ291bnQgJiAxKSkKLSAgICAgICAgfHwgZGlyZWN0
aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAoZGlyZWN0aW9uID09IEFu
aW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlICYmIGxvb3BDb3VudCAmIDEpCisg
ICAgICAgIHx8IChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRl
cm5hdGVSZXZlcnNlICYmICEobG9vcENvdW50ICYgMSkpCisgICAgICAgIHx8IGRpcmVjdGlvbiA9
PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2U7CiB9CiAKIHN0YXRpYyBkb3Vi
bGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKGRvdWJsZSBydW5uaW5nVGltZSwgZG91YmxlIGR1
cmF0aW9uLCBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIGRvdWJsZSBp
dGVyYXRpb25Db3VudCkKQEAgLTE3OSwxNiArMTc0LDE2IEBAIHN0YXRpYyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiBmCiAgICAgLy8gQW5pbWF0aW9uIHRvICItd2Via2l0LXRyYW5zZm9ybTogbm9uZSIuCiAgICAg
aWYgKCF0by5zaXplKCkpIHsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZGVkKGZy
b20pOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsZW5kZWQub3BlcmF0aW9ucygp
LnNpemUoKTsgKytpKQotICAgICAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5k
KDAsIHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKKyAgICAgICAgZm9y
IChhdXRvJiBvcGVyYXRpb24gOiBibGVuZGVkLm9wZXJhdGlvbnMoKSkKKyAgICAgICAgICAgIG9w
ZXJhdGlvbi0+YmxlbmQobnVsbHB0ciwgcHJvZ3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJv
eFNpemUpOwogICAgICAgICByZXR1cm4gbWF0cml4OwogICAgIH0KIAogICAgIC8vIEFuaW1hdGlv
biBmcm9tICItd2Via2l0LXRyYW5zZm9ybTogbm9uZSIuCiAgICAgaWYgKCFmcm9tLnNpemUoKSkg
ewogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQodG8pOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGJsZW5kZWQub3BlcmF0aW9ucygpLnNpemUoKTsgKytpKQotICAg
ICAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5kKDAsIDEuIC0gcHJvZ3Jlc3Ms
IHRydWUpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOworICAgICAgICBmb3IgKGF1dG8mIG9wZXJh
dGlvbiA6IGJsZW5kZWQub3BlcmF0aW9ucygpKQorICAgICAgICAgICAgb3BlcmF0aW9uLT5ibGVu
ZChudWxscHRyLCAxIC0gcHJvZ3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOwog
ICAgICAgICByZXR1cm4gbWF0cml4OwogICAgIH0KIApAQCAtMjA5LDc5ICsyMDQsMzUgQEAgc3Rh
dGljIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVl
KGNvbnN0IEFuaW1hdGlvblZhbHUKICAgICByZXR1cm4gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bjo6ZGVmYXVsdFRpbWluZ0Z1bmN0aW9uKCk7CiB9CiAKLVRleHR1cmVNYXBwZXJBbmltYXRpb246
OlRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLZXlmcmFt
ZVZhbHVlTGlzdCYga2V5ZnJhbWVzLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUsIGNvbnN0IEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBkb3VibGUgc3RhcnRUaW1lLCBib29sIGxpc3RzTWF0Y2gpCi0g
ICAgOiBtX2tleWZyYW1lcyhrZXlmcmFtZXMpCitUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmIGtleWZyYW1lcywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRp
b24mIGFuaW1hdGlvbiwgYm9vbCBsaXN0c01hdGNoLCBkb3VibGUgc3RhcnRUaW1lLCBkb3VibGUg
cGF1c2VUaW1lLCBBbmltYXRpb25TdGF0ZSBzdGF0ZSkKKyAgICA6IG1fbmFtZShuYW1lLmlzU2Fm
ZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpID8gbmFtZSA6IG5hbWUuaXNvbGF0ZWRDb3B5KCkpCisg
ICAgLCBtX2tleWZyYW1lcyhrZXlmcmFtZXMpCiAgICAgLCBtX2JveFNpemUoYm94U2l6ZSkKLSAg
ICAsIG1fYW5pbWF0aW9uKEFuaW1hdGlvbjo6Y3JlYXRlKCphbmltYXRpb24pKQotICAgICwgbV9u
YW1lKG5hbWUuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkgPyBuYW1lIDogbmFtZS5pc29s
YXRlZENvcHkoKSkKKyAgICAsIG1fYW5pbWF0aW9uKEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW1hdGlv
bikpCiAgICAgLCBtX2xpc3RzTWF0Y2gobGlzdHNNYXRjaCkKICAgICAsIG1fc3RhcnRUaW1lKHN0
YXJ0VGltZSkKLSAgICAsIG1fcGF1c2VUaW1lKDApCisgICAgLCBtX3BhdXNlVGltZShwYXVzZVRp
bWUpCiAgICAgLCBtX3RvdGFsUnVubmluZ1RpbWUoMCkKICAgICAsIG1fbGFzdFJlZnJlc2hlZFRp
bWUobV9zdGFydFRpbWUpCi0gICAgLCBtX3N0YXRlKFBsYXlpbmdTdGF0ZSkKKyAgICAsIG1fc3Rh
dGUoc3RhdGUpCiB7CiB9CiAKIFRleHR1cmVNYXBwZXJBbmltYXRpb246OlRleHR1cmVNYXBwZXJB
bmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgb3RoZXIpCi0gICAgOiBtX2tl
eWZyYW1lcyhvdGhlci5rZXlmcmFtZXMoKSkKLSAgICAsIG1fYm94U2l6ZShvdGhlci5ib3hTaXpl
KCkpCi0gICAgLCBtX2FuaW1hdGlvbihBbmltYXRpb246OmNyZWF0ZSgqb3RoZXIuYW5pbWF0aW9u
KCkpKQotICAgICwgbV9uYW1lKG90aGVyLm5hbWUoKS5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJl
YWQoKSA/IG90aGVyLm5hbWUoKSA6IG90aGVyLm5hbWUoKS5pc29sYXRlZENvcHkoKSkKLSAgICAs
IG1fbGlzdHNNYXRjaChvdGhlci5saXN0c01hdGNoKCkpCi0gICAgLCBtX3N0YXJ0VGltZShvdGhl
ci5zdGFydFRpbWUoKSkKLSAgICAsIG1fcGF1c2VUaW1lKG90aGVyLnBhdXNlVGltZSgpKQorICAg
IDogbV9uYW1lKG90aGVyLm1fbmFtZS5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSA/IG90
aGVyLm1fbmFtZSA6IG90aGVyLm1fbmFtZS5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fa2V5ZnJh
bWVzKG90aGVyLm1fa2V5ZnJhbWVzKQorICAgICwgbV9ib3hTaXplKG90aGVyLm1fYm94U2l6ZSkK
KyAgICAsIG1fYW5pbWF0aW9uKEFuaW1hdGlvbjo6Y3JlYXRlKCpvdGhlci5tX2FuaW1hdGlvbikp
CisgICAgLCBtX2xpc3RzTWF0Y2gob3RoZXIubV9saXN0c01hdGNoKQorICAgICwgbV9zdGFydFRp
bWUob3RoZXIubV9zdGFydFRpbWUpCisgICAgLCBtX3BhdXNlVGltZShvdGhlci5tX3BhdXNlVGlt
ZSkKICAgICAsIG1fdG90YWxSdW5uaW5nVGltZShvdGhlci5tX3RvdGFsUnVubmluZ1RpbWUpCiAg
ICAgLCBtX2xhc3RSZWZyZXNoZWRUaW1lKG90aGVyLm1fbGFzdFJlZnJlc2hlZFRpbWUpCi0gICAg
LCBtX3N0YXRlKG90aGVyLnN0YXRlKCkpCisgICAgLCBtX3N0YXRlKG90aGVyLm1fc3RhdGUpCiB7
CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6YXBwbHlJbnRlcm5hbChDbGllbnQq
IGNsaWVudCwgY29uc3QgQW5pbWF0aW9uVmFsdWUmIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVl
JiB0bywgZmxvYXQgcHJvZ3Jlc3MpCi17Ci0gICAgc3dpdGNoIChtX2tleWZyYW1lcy5wcm9wZXJ0
eSgpKSB7Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eToKLSAgICAgICAgY2xpZW50
LT5zZXRBbmltYXRlZE9wYWNpdHkoYXBwbHlPcGFjaXR5QW5pbWF0aW9uKChzdGF0aWNfY2FzdDxj
b25zdCBGbG9hdEFuaW1hdGlvblZhbHVlJj4oZnJvbSkudmFsdWUoKSksIChzdGF0aWNfY2FzdDxj
b25zdCBGbG9hdEFuaW1hdGlvblZhbHVlJj4odG8pLnZhbHVlKCkpLCBwcm9ncmVzcykpOwotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5VHJhbnNmb3JtOgotICAgICAg
ICBjbGllbnQtPnNldEFuaW1hdGVkVHJhbnNmb3JtKGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKHN0
YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlJj4oZnJvbSkudmFsdWUoKSwg
c3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUmPih0bykudmFsdWUoKSwg
cHJvZ3Jlc3MsIG1fYm94U2l6ZSwgbV9saXN0c01hdGNoKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEFuaW1hdGVkUHJvcGVydHlGaWx0ZXI6Ci0gICAgICAgIGNsaWVudC0+c2V0QW5pbWF0
ZWRGaWx0ZXJzKGFwcGx5RmlsdGVyQW5pbWF0aW9uKHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFu
aW1hdGlvblZhbHVlJj4oZnJvbSkudmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5p
bWF0aW9uVmFsdWUmPih0bykudmFsdWUoKSwgcHJvZ3Jlc3MsIG1fYm94U2l6ZSkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgfQotfQotCi1ib29sIFRleHR1cmVNYXBwZXJBbmltYXRpb246OmlzQWN0aXZlKCkgY29uc3QK
LXsKLSAgICBpZiAoc3RhdGUoKSAhPSBTdG9wcGVkU3RhdGUpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCk7Ci19Ci0KLWJvb2wg
VGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6Omhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0
ZWRQcm9wZXJ0eUlEIHR5cGUpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS5p
c0FjdGl2ZSgpICYmIG1fYW5pbWF0aW9uc1tpXS5wcm9wZXJ0eSgpID09IHR5cGUpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRl
eHR1cmVNYXBwZXJBbmltYXRpb25zOjpoYXNSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS5zdGF0ZSgpID09IFRleHR1cmVNYXBwZXJBbmltYXRp
b246OlBsYXlpbmdTdGF0ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphcHBseShD
bGllbnQqIGNsaWVudCkKK3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6YXBwbHkoQ2xpZW50
JiBjbGllbnQpCiB7CiAgICAgaWYgKCFpc0FjdGl2ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0y
OTAsNyArMjQxLDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphcHBseShDbGllbnQq
IGNsaWVudCkKICAgICBkb3VibGUgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlv
blZhbHVlKHRvdGFsUnVubmluZ1RpbWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpLCBtX2FuaW1h
dGlvbi0+ZGlyZWN0aW9uKCksIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpKTsKIAogICAg
IGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0ZXJhdGlv
bkNvdW50SW5maW5pdGUgJiYgdG90YWxSdW5uaW5nVGltZSA+PSBtX2FuaW1hdGlvbi0+ZHVyYXRp
b24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpKSB7Ci0gICAgICAgIHNldFN0YXRl
KFN0b3BwZWRTdGF0ZSk7CisgICAgICAgIG1fc3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3RvcHBl
ZDsKKyAgICAgICAgbV9wYXVzZVRpbWUgPSAwOwogICAgICAgICBpZiAobV9hbmltYXRpb24tPmZp
bGxzRm9yd2FyZHMoKSkKICAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRB
bmltYXRpb25WYWx1ZUZvckZpbGxzRm9yd2FyZHMobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50
KCksIG1fYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSk7CiAgICAgfQpAQCAtMzI1LDkgKzI3NywyMyBA
QCB2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb246OmFwcGx5KENsaWVudCogY2xpZW50KQogICAg
IH0KIH0KIAordm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpwYXVzZShkb3VibGUgdGltZSkK
K3sKKyAgICBtX3N0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZDsKKyAgICBtX3BhdXNlVGlt
ZSA9IHRpbWU7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6cmVzdW1lKCkKK3sK
KyAgICBtX3N0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBsYXlpbmc7CisgICAgbV9wYXVzZVRpbWUg
PSAwOworICAgIG1fdG90YWxSdW5uaW5nVGltZSA9IG1fcGF1c2VUaW1lOworICAgIG1fbGFzdFJl
ZnJlc2hlZFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKK30KKwogZG91Ymxl
IFRleHR1cmVNYXBwZXJBbmltYXRpb246OmNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKCkKIHsKLSAg
ICBpZiAoc3RhdGUoKSA9PSBQYXVzZWRTdGF0ZSkKKyAgICBpZiAobV9zdGF0ZSA9PSBBbmltYXRp
b25TdGF0ZTo6UGF1c2VkKQogICAgICAgICByZXR1cm4gbV9wYXVzZVRpbWU7CiAKICAgICBkb3Vi
bGUgb2xkTGFzdFJlZnJlc2hlZFRpbWUgPSBtX2xhc3RSZWZyZXNoZWRUaW1lOwpAQCAtMzM2LDc0
ICszMDIsOTYgQEAgZG91YmxlIFRleHR1cmVNYXBwZXJBbmltYXRpb246OmNvbXB1dGVUb3RhbFJ1
bm5pbmdUaW1lKCkKICAgICByZXR1cm4gbV90b3RhbFJ1bm5pbmdUaW1lOwogfQogCi12b2lkIFRl
eHR1cmVNYXBwZXJBbmltYXRpb246OnBhdXNlKGRvdWJsZSB0aW1lKQorYm9vbCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uOjppc0FjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgc2V0U3RhdGUoUGF1c2VkU3Rh
dGUpOwotICAgIG1fcGF1c2VUaW1lID0gdGltZTsKKyAgICByZXR1cm4gbV9zdGF0ZSAhPSBBbmlt
YXRpb25TdGF0ZTo6U3RvcHBlZCB8fCBtX2FuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpOwogfQog
Ci12b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb246OnJlc3VtZSgpCit2b2lkIFRleHR1cmVNYXBw
ZXJBbmltYXRpb246OmFwcGx5SW50ZXJuYWwoQ2xpZW50JiBjbGllbnQsIGNvbnN0IEFuaW1hdGlv
blZhbHVlJiBmcm9tLCBjb25zdCBBbmltYXRpb25WYWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKQog
ewotICAgIHNldFN0YXRlKFBsYXlpbmdTdGF0ZSk7Ci0gICAgbV90b3RhbFJ1bm5pbmdUaW1lID0g
bV9wYXVzZVRpbWU7Ci0gICAgbV9sYXN0UmVmcmVzaGVkVGltZSA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpOworICAgIHN3aXRjaCAobV9rZXlmcmFtZXMucHJvcGVydHkoKSkgeworICAg
IGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6CisgICAgICAgIGNsaWVudC5zZXRBbmltYXRl
ZE9wYWNpdHkoYXBwbHlPcGFjaXR5QW5pbWF0aW9uKChzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFu
aW1hdGlvblZhbHVlJj4oZnJvbSkudmFsdWUoKSksIChzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFu
aW1hdGlvblZhbHVlJj4odG8pLnZhbHVlKCkpLCBwcm9ncmVzcykpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5VHJhbnNmb3JtOgorICAgICAgICBjbGllbnQuc2V0
QW5pbWF0ZWRUcmFuc2Zvcm0oYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oc3RhdGljX2Nhc3Q8Y29u
c3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUmPihmcm9tKS52YWx1ZSgpLCBzdGF0aWNfY2FzdDxj
b25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSY+KHRvKS52YWx1ZSgpLCBwcm9ncmVzcywgbV9i
b3hTaXplLCBtX2xpc3RzTWF0Y2gpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQW5pbWF0
ZWRQcm9wZXJ0eUZpbHRlcjoKKyAgICAgICAgY2xpZW50LnNldEFuaW1hdGVkRmlsdGVycyhhcHBs
eUZpbHRlckFuaW1hdGlvbihzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+
KGZyb20pLnZhbHVlKCksIHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlJj4o
dG8pLnZhbHVlKCksIHByb2dyZXNzLCBtX2JveFNpemUpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAogdm9p
ZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6YWRkKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRp
b24mIGFuaW1hdGlvbikKIHsKICAgICAvLyBSZW1vdmUgdGhlIG9sZCBzdGF0ZSBpZiB3ZSBhcmUg
cmVzdW1pbmcgYSBwYXVzZWQgYW5pbWF0aW9uLgotICAgIHJlbW92ZShhbmltYXRpb24ubmFtZSgp
LCBhbmltYXRpb24ucHJvcGVydHkoKSk7CisgICAgcmVtb3ZlKGFuaW1hdGlvbi5uYW1lKCksIGFu
aW1hdGlvbi5rZXlmcmFtZXMoKS5wcm9wZXJ0eSgpKTsKIAogICAgIG1fYW5pbWF0aW9ucy5hcHBl
bmQoYW5pbWF0aW9uKTsKIH0KIAordm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cmVtb3Zl
KGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBtX2FuaW1hdGlvbnMucmVtb3ZlQWxsTWF0Y2hp
bmcoWyZuYW1lXSAoY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7Cisg
ICAgICAgIHJldHVybiBhbmltYXRpb24ubmFtZSgpID09IG5hbWU7CisgICAgfSk7Cit9CisKK3Zv
aWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUsIEFu
aW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSkKK3sKKyAgICBtX2FuaW1hdGlvbnMucmVtb3ZlQWxs
TWF0Y2hpbmcoWyZuYW1lLCBwcm9wZXJ0eV0gKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24m
IGFuaW1hdGlvbikgeworICAgICAgICByZXR1cm4gYW5pbWF0aW9uLm5hbWUoKSA9PSBuYW1lICYm
IGFuaW1hdGlvbi5rZXlmcmFtZXMoKS5wcm9wZXJ0eSgpID09IHByb3BlcnR5OworICAgIH0pOwor
fQorCiB2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpwYXVzZShjb25zdCBTdHJpbmcmIG5h
bWUsIGRvdWJsZSBvZmZzZXQpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1h
dGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS5uYW1lKCkg
PT0gbmFtZSkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9uc1tpXS5wYXVzZShvZmZzZXQpOworICAg
IGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25zKSB7CisgICAgICAgIGlmIChhbmlt
YXRpb24ubmFtZSgpID09IG5hbWUpCisgICAgICAgICAgICBhbmltYXRpb24ucGF1c2Uob2Zmc2V0
KTsKICAgICB9CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnN1c3BlbmQoZG91
YmxlIG9mZnNldCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5z
aXplKCk7ICsraSkKLSAgICAgICAgbV9hbmltYXRpb25zW2ldLnBhdXNlKG9mZnNldCk7CisgICAg
Zm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnMpCisgICAgICAgIGFuaW1hdGlvbi5w
YXVzZShvZmZzZXQpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpyZXN1bWUo
KQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytp
KQotICAgICAgICBtX2FuaW1hdGlvbnNbaV0ucmVzdW1lKCk7CisgICAgZm9yIChhdXRvJiBhbmlt
YXRpb24gOiBtX2FuaW1hdGlvbnMpCisgICAgICAgIGFuaW1hdGlvbi5yZXN1bWUoKTsKIH0KIAot
dm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OmFwcGx5KFRleHR1cmVNYXBwZXJBbmltYXRp
b246OkNsaWVudCYgY2xpZW50KQogewotICAgIG1fYW5pbWF0aW9ucy5yZW1vdmVBbGxNYXRjaGlu
ZyhbJm5hbWVdIChjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsKLSAg
ICAgICAgcmV0dXJuIGFuaW1hdGlvbi5uYW1lKCkgPT0gbmFtZTsKLSAgICB9KTsKKyAgICBmb3Ig
KGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykKKyAgICAgICAgYW5pbWF0aW9uLmFwcGx5
KGNsaWVudCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnJlbW92ZShjb25z
dCBTdHJpbmcmIG5hbWUsIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSkKK2Jvb2wgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbnM6Omhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9w
ZXJ0eUlEIHR5cGUpIGNvbnN0CiB7Ci0gICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1hdGNoaW5n
KFsmbmFtZSwgcHJvcGVydHldIChjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRp
b24pIHsKLSAgICAgICAgcmV0dXJuIGFuaW1hdGlvbi5uYW1lKCkgPT0gbmFtZSAmJiBhbmltYXRp
b24ucHJvcGVydHkoKSA9PSBwcm9wZXJ0eTsKLSAgICB9KTsKKyAgICByZXR1cm4gc3RkOjphbnlf
b2YobV9hbmltYXRpb25zLmJlZ2luKCksIG1fYW5pbWF0aW9ucy5lbmQoKSwKKyAgICAgICAgWyZ0
eXBlXShjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgcmV0dXJuIGFu
aW1hdGlvbi5pc0FjdGl2ZSgpICYmIGFuaW1hdGlvbi5rZXlmcmFtZXMoKS5wcm9wZXJ0eSgpID09
IHR5cGU7IH0pOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseShUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uOjpDbGllbnQqIGNsaWVudCkKK2Jvb2wgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbnM6Omhhc1J1bm5pbmdBbmltYXRpb25zKCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9hbmltYXRp
b25zW2ldLmFwcGx5KGNsaWVudCk7CisgICAgcmV0dXJuIHN0ZDo6YW55X29mKG1fYW5pbWF0aW9u
cy5iZWdpbigpLCBtX2FuaW1hdGlvbnMuZW5kKCksCisgICAgICAgIFtdKGNvbnN0IFRleHR1cmVN
YXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbikgeyByZXR1cm4gYW5pbWF0aW9uLnN0YXRlKCkgPT0g
VGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlBsYXlpbmc7IH0pOwogfQog
CiBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6Z2V0QWN0
aXZlQW5pbWF0aW9ucygpIGNvbnN0CiB7CiAgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgYWN0
aXZlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0uaXNBY3RpdmUoKSkKLSAgICAgICAgICAg
IGFjdGl2ZS5hZGQobV9hbmltYXRpb25zW2ldKTsKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6
IG1fYW5pbWF0aW9ucykgeworICAgICAgICBpZiAoYW5pbWF0aW9uLmlzQWN0aXZlKCkpCisgICAg
ICAgICAgICBhY3RpdmUuYWRkKGFuaW1hdGlvbik7CiAgICAgfQogICAgIHJldHVybiBhY3RpdmU7
CiB9Ci19CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1h
dGlvbi5oCmluZGV4IDM3NmJjMmRjZTIyMGUzZjk1YzliODM1Yjg0MWM0ZGQ3ZThlZWY3MTkuLjZh
NDQ3ZDc2ZTc3MTQ4ZDUzMTBlZTI3NTliNTJkZGY1YWE0ODE5ODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJBbmltYXRpb24uaApAQCAtMjEsMTUgKzIxLDE1IEBACiAjZGVmaW5lIFRleHR1cmVNYXBw
ZXJBbmltYXRpb25faAogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
VHJhbnNmb3JtYXRpb25NYXRyaXg7CisKIGNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb24gewog
cHVibGljOgotICAgIGVudW0gQW5pbWF0aW9uU3RhdGUgeyBQbGF5aW5nU3RhdGUsIFBhdXNlZFN0
YXRlLCBTdG9wcGVkU3RhdGUgfTsKKyAgICBlbnVtIGNsYXNzIEFuaW1hdGlvblN0YXRlIHsgUGxh
eWluZywgUGF1c2VkLCBTdG9wcGVkIH07CisKICAgICBjbGFzcyBDbGllbnQgewogICAgIHB1Ymxp
YzoKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEFuaW1hdGVkVHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JikgPSAwOwpAQCAtNDAsMzQgKzQwLDMxIEBAIHB1YmxpYzoKICAgICBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uKCkKICAgICAgICAgOiBtX2tleWZyYW1lcyhBbmltYXRlZFBy
b3BlcnR5SW52YWxpZCkKICAgICB7IH0KLSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNvbnN0
IFN0cmluZyYsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgRmxvYXRTaXplJiwgY29u
c3QgQW5pbWF0aW9uKiwgZG91YmxlLCBib29sKTsKKyAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
KGNvbnN0IFN0cmluZyYsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgQW5pbWF0aW9uJiwgYm9vbCwgZG91YmxlLCBkb3VibGUsIEFuaW1hdGlvblN0YXRl
KTsKICAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRp
b24mKTsKLSAgICB2b2lkIGFwcGx5KENsaWVudCopOworCisgICAgdm9pZCBhcHBseShDbGllbnQm
KTsKICAgICB2b2lkIHBhdXNlKGRvdWJsZSk7CiAgICAgdm9pZCByZXN1bWUoKTsKLSAgICBkb3Vi
bGUgY29tcHV0ZVRvdGFsUnVubmluZ1RpbWUoKTsKLSAgICBBbmltYXRpb25TdGF0ZSBzdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KLSAgICB2b2lkIHNldFN0YXRlKEFuaW1hdGlvblN0
YXRlIHMsIGRvdWJsZSBwYXVzZVRpbWUgPSAwKQotICAgIHsKLSAgICAgICAgbV9zdGF0ZSA9IHM7
Ci0gICAgICAgIG1fcGF1c2VUaW1lID0gcGF1c2VUaW1lOwotICAgIH0KLSAgICBBbmltYXRlZFBy
b3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5wcm9wZXJ0eSgp
OyB9CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotICAgIFN0cmluZyBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgRmxvYXRTaXplIGJveFNpemUoKSBjb25zdCB7IHJldHVy
biBtX2JveFNpemU7IH0KLSAgICBkb3VibGUgc3RhcnRUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9z
dGFydFRpbWU7IH0KLSAgICBkb3VibGUgcGF1c2VUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9wYXVz
ZVRpbWU7IH0KLSAgICBQYXNzUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmltYXRpb24uZ2V0KCk7IH0KKworICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlm
cmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lczsgfQorICAgIGNvbnN0IEZsb2F0U2l6
ZSYgYm94U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2l6ZTsgfQorICAgIGNvbnN0IFJlZlB0
cjxBbmltYXRpb24+IGFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uOyB9CiAg
ICAgYm9vbCBsaXN0c01hdGNoKCkgY29uc3QgeyByZXR1cm4gbV9saXN0c01hdGNoOyB9CisgICAg
ZG91YmxlIHN0YXJ0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9CisgICAgZG91
YmxlIHBhdXNlVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VUaW1lOyB9CisgICAgQW5pbWF0
aW9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAKIHByaXZhdGU6Ci0g
ICAgdm9pZCBhcHBseUludGVybmFsKENsaWVudCosIGNvbnN0IEFuaW1hdGlvblZhbHVlJiBmcm9t
LCBjb25zdCBBbmltYXRpb25WYWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKTsKKyAgICB2b2lkIGFw
cGx5SW50ZXJuYWwoQ2xpZW50JiwgY29uc3QgQW5pbWF0aW9uVmFsdWUmIGZyb20sIGNvbnN0IEFu
aW1hdGlvblZhbHVlJiB0bywgZmxvYXQgcHJvZ3Jlc3MpOworICAgIGRvdWJsZSBjb21wdXRlVG90
YWxSdW5uaW5nVGltZSgpOworCisgICAgU3RyaW5nIG1fbmFtZTsKICAgICBLZXlmcmFtZVZhbHVl
TGlzdCBtX2tleWZyYW1lczsKICAgICBGbG9hdFNpemUgbV9ib3hTaXplOwogICAgIFJlZlB0cjxB
bmltYXRpb24+IG1fYW5pbWF0aW9uOwotICAgIFN0cmluZyBtX25hbWU7CiAgICAgYm9vbCBtX2xp
c3RzTWF0Y2g7CiAgICAgZG91YmxlIG1fc3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX3BhdXNlVGlt
ZTsKQEAgLTc4LDcgKzc1LDcgQEAgcHJpdmF0ZToKIAogY2xhc3MgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbnMgewogcHVibGljOgotICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zKCkgeyB9CisgICAg
VGV4dHVyZU1hcHBlckFuaW1hdGlvbnMoKSA9IGRlZmF1bHQ7CiAKICAgICB2b2lkIGFkZChjb25z
dCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJik7CiAgICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5n
JiBuYW1lKTsKQEAgLTg2LDcgKzgzLDkgQEAgcHVibGljOgogICAgIHZvaWQgcGF1c2UoY29uc3Qg
U3RyaW5nJiwgZG91YmxlKTsKICAgICB2b2lkIHN1c3BlbmQoZG91YmxlKTsKICAgICB2b2lkIHJl
c3VtZSgpOwotICAgIHZvaWQgYXBwbHkoVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6Q2xpZW50Kik7
CisKKyAgICB2b2lkIGFwcGx5KFRleHR1cmVNYXBwZXJBbmltYXRpb246OkNsaWVudCYpOworCiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zLmlzRW1wdHkoKTsg
fQogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zLnNpemUoKTsg
fQogICAgIGNvbnN0IFZlY3RvcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiYgYW5pbWF0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uczsgfQpAQCAtOTQsNyArOTMsNiBAQCBwdWJsaWM6
CiAKICAgICBib29sIGhhc1J1bm5pbmdBbmltYXRpb25zKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNB
Y3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0eXBlKSBjb25zdDsKLQog
ICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIGdldEFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdDsK
IAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKaW5kZXggNmJkZTQwYTUwOWMy
MzM2ODYyNmRkZjFkMGQ3NjljZjcwYmJiNTZiMS4uNzM4NjQxMmM0NWIzYjMxODcyZmZmYTk1YWVk
YjFjMGZkMzg4ZGU0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKQEAgLTY1OCw3ICs2
NTgsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6YXBwbHlBbmltYXRpb25zUmVjdXJzaXZl
bHkoKQogCiB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6c3luY0FuaW1hdGlvbnMoKQogewotICAg
IG1fYW5pbWF0aW9ucy5hcHBseSh0aGlzKTsKKyAgICBtX2FuaW1hdGlvbnMuYXBwbHkoKnRoaXMp
OwogICAgIGlmICghbV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0
ZWRQcm9wZXJ0eVRyYW5zZm9ybSkpCiAgICAgICAgIG1fY3VycmVudFRyYW5zZm9ybS5zZXRMb2Nh
bFRyYW5zZm9ybShtX3N0YXRlLnRyYW5zZm9ybSk7CiAgICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFz
QWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmlu
ZGV4IDI5YzY3NDE4YjI3NzVhYzI5MWFjZTFhMmQxNDUzMzQ5NzQ1MmIwODAuLmM4MTRiOTFjMzZi
YzYyZjlkZGY3NjE4NGIwN2I3ZjY1ZWFiNjk0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0xMTg1LDcgKzExODUs
NyBAQCBib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtl
eWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsCiAgICAgICAgIGxpc3RzTWF0Y2ggPSB2YWxpZGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVMaXN0LCBpZ25vcmVkSGFzQmlnUm90YXRpb24pID49
IDA7CiAKICAgICBtX2xhc3RBbmltYXRpb25TdGFydFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKSAtIGRlbGF5QXNOZWdhdGl2ZVRpbWVPZmZzZXQ7Ci0gICAgbV9hbmltYXRpb25z
LmFkZChUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94
U2l6ZSwgYW5pbSwgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lLCBsaXN0c01hdGNoKSk7CisgICAg
bV9hbmltYXRpb25zLmFkZChUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGtleWZyYW1lc05hbWUsIHZh
bHVlTGlzdCwgYm94U2l6ZSwgKmFuaW0sIGxpc3RzTWF0Y2gsIG1fbGFzdEFuaW1hdGlvblN0YXJ0
VGltZSwgMCwgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlBsYXlpbmcp
KTsKICAgICBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7CiAgICAgZGlk
Q2hhbmdlQW5pbWF0aW9ucygpOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0Fy
Z3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKaW5kZXggMWMzNDU5OWE4
YmI1YzU0ZGFkMmE5ZTczMDI3ZGMxZWQ4MTk4MTcwMS4uOWRkNjNmZDIzY2NjMTY2ODI5NzdkZmVk
MDBkNGRiOWViYThhMmM1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdy
YXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCkBAIC01NDYsOSArNTQ2LDcgQEAgYm9vbCBBcmd1bWVu
dENvZGVyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBk
ZWNvZGVyLCBUZXgKICAgICAgICAgfQogICAgIH0KIAotICAgIGFuaW1hdGlvbiA9IFRleHR1cmVN
YXBwZXJBbmltYXRpb24obmFtZSwga2V5ZnJhbWVzLCBib3hTaXplLCBhbmltYXRpb25PYmplY3Qu
Z2V0KCksIHN0YXJ0VGltZSwgbGlzdHNNYXRjaCk7Ci0gICAgYW5pbWF0aW9uLnNldFN0YXRlKHN0
YXRlLCBwYXVzZVRpbWUpOwotCisgICAgYW5pbWF0aW9uID0gVGV4dHVyZU1hcHBlckFuaW1hdGlv
bihuYW1lLCBrZXlmcmFtZXMsIGJveFNpemUsICphbmltYXRpb25PYmplY3QsIGxpc3RzTWF0Y2gs
IHN0YXJ0VGltZSwgcGF1c2VUaW1lLCBzdGF0ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>