<?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>149376</bug_id>
          
          <creation_ts>2015-09-19 16:23:50 -0700</creation_ts>
          <short_desc>[Web IDL] Add support for [PutForwards=XXX] IDL extended attribute</short_desc>
          <delta_ts>2015-09-20 14:59:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Bindings</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>https://heycam.github.io/webidl/#PutForwards</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>149392</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1127433</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-19 16:23:50 -0700</bug_when>
    <thetext>[Web IDL] Add support for [PutForwards=XXX] IDL extended attribute:
https://heycam.github.io/webidl/#PutForwards

As an initial proof of concept, use it for Document.location as per the specification instead of using custom bindings:
https://html.spec.whatwg.org/multipage/dom.html#the-document-object

More attributes can be ported later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127435</commentid>
    <comment_count>1</comment_count>
      <attachid>261590</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-19 16:53:06 -0700</bug_when>
    <thetext>Created attachment 261590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127440</commentid>
    <comment_count>2</comment_count>
      <attachid>261590</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-09-19 17:10:58 -0700</bug_when>
    <thetext>Comment on attachment 261590
Patch

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

Looks OK, but there is one significant problem.

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:3098
&gt; +    auto* forwardedImpl = WTF::getPtr(castedThis-&gt;impl().putForwardsAttribute());
&gt; +    if (!forwardedImpl)
&gt; +        return;
&gt; +    auto&amp; impl = *forwardedImpl;
&gt; +    String nativeValue = value.toString(exec)-&gt;value(exec);
&gt; +    if (UNLIKELY(exec-&gt;hadException()))
&gt; +        return;
&gt; +    impl.setName(nativeValue);

We can see here that we have a possible object lifetime problem. The reason the code uses WTF::getPtr is that the attribute might return a RefPtr, for example. The whole reason a function would return a RefPtr is that it might want to return a new object where the only owner is the RefPtr. So once we put the pointer into a raw pointer and then let the expression fall out of scope, we have a pointer to a deleted object.

This is not a problem when we use the result of getPtr to call a function, because the underlying RefPtr doesn’t get deallocated until the end of the full expression.

I think the best thing to do for this would be to leave out the call to WTF::getPtr; then this won’t compile if the underlying function returns a RefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127441</commentid>
    <comment_count>3</comment_count>
      <attachid>261590</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-09-19 17:12:27 -0700</bug_when>
    <thetext>Comment on attachment 261590
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:3098
&gt;&gt; +    impl.setName(nativeValue);
&gt; 
&gt; We can see here that we have a possible object lifetime problem. The reason the code uses WTF::getPtr is that the attribute might return a RefPtr, for example. The whole reason a function would return a RefPtr is that it might want to return a new object where the only owner is the RefPtr. So once we put the pointer into a raw pointer and then let the expression fall out of scope, we have a pointer to a deleted object.
&gt; 
&gt; This is not a problem when we use the result of getPtr to call a function, because the underlying RefPtr doesn’t get deallocated until the end of the full expression.
&gt; 
&gt; I think the best thing to do for this would be to leave out the call to WTF::getPtr; then this won’t compile if the underlying function returns a RefPtr.

Another option would be to generate this code:

    auto a = castedThis-&gt;impl().putForwardsAttribute();
    auto* b = WTF::getPtr(a);
    if (!b)
        return;
    auto&amp; impl = *b;

Not sure what &quot;a&quot; and &quot;b&quot; should be named, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127444</commentid>
    <comment_count>4</comment_count>
      <attachid>261590</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-19 17:19:03 -0700</bug_when>
    <thetext>Comment on attachment 261590
Patch

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

&gt;&gt;&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:3098
&gt;&gt;&gt; +    impl.setName(nativeValue);
&gt;&gt; 
&gt;&gt; We can see here that we have a possible object lifetime problem. The reason the code uses WTF::getPtr is that the attribute might return a RefPtr, for example. The whole reason a function would return a RefPtr is that it might want to return a new object where the only owner is the RefPtr. So once we put the pointer into a raw pointer and then let the expression fall out of scope, we have a pointer to a deleted object.
&gt;&gt; 
&gt;&gt; This is not a problem when we use the result of getPtr to call a function, because the underlying RefPtr doesn’t get deallocated until the end of the full expression.
&gt;&gt; 
&gt;&gt; I think the best thing to do for this would be to leave out the call to WTF::getPtr; then this won’t compile if the underlying function returns a RefPtr.
&gt; 
&gt; Another option would be to generate this code:
&gt; 
&gt;     auto a = castedThis-&gt;impl().putForwardsAttribute();
&gt;     auto* b = WTF::getPtr(a);
&gt;     if (!b)
&gt;         return;
&gt;     auto&amp; impl = *b;
&gt; 
&gt; Not sure what &quot;a&quot; and &quot;b&quot; should be named, though.

Good point, although it would be weird to call a setter on an object that is temporary. It was assumed that the implementation would retain the forwarded attribute&apos;s object. I will revisit before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127445</commentid>
    <comment_count>5</comment_count>
      <attachid>261590</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-09-19 17:25:29 -0700</bug_when>
    <thetext>Comment on attachment 261590
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:3098
&gt;&gt;&gt;&gt; +    impl.setName(nativeValue);
&gt;&gt;&gt; 
&gt;&gt;&gt; We can see here that we have a possible object lifetime problem. The reason the code uses WTF::getPtr is that the attribute might return a RefPtr, for example. The whole reason a function would return a RefPtr is that it might want to return a new object where the only owner is the RefPtr. So once we put the pointer into a raw pointer and then let the expression fall out of scope, we have a pointer to a deleted object.
&gt;&gt;&gt; 
&gt;&gt;&gt; This is not a problem when we use the result of getPtr to call a function, because the underlying RefPtr doesn’t get deallocated until the end of the full expression.
&gt;&gt;&gt; 
&gt;&gt;&gt; I think the best thing to do for this would be to leave out the call to WTF::getPtr; then this won’t compile if the underlying function returns a RefPtr.
&gt;&gt; 
&gt;&gt; Another option would be to generate this code:
&gt;&gt; 
&gt;&gt;     auto a = castedThis-&gt;impl().putForwardsAttribute();
&gt;&gt;     auto* b = WTF::getPtr(a);
&gt;&gt;     if (!b)
&gt;&gt;         return;
&gt;&gt;     auto&amp; impl = *b;
&gt;&gt; 
&gt;&gt; Not sure what &quot;a&quot; and &quot;b&quot; should be named, though.
&gt; 
&gt; Good point, although it would be weird to call a setter on an object that is temporary. It was assumed that the implementation would retain the forwarded attribute&apos;s object. I will revisit before landing.

I think that’s why it’s good to use a raw pointer and remove the call to getPtr. It makes sense for all the cases where forwarding makes sense. There’s no reason for the attribute value to return a RefPtr; it should just be a raw pointer. And I think location() does return a raw pointer. Maybe might be nice to support a reference too, but not RefPtr or Ref.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127446</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-19 17:28:44 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 261590 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=261590&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:3098
&gt; &gt;&gt;&gt;&gt; +    impl.setName(nativeValue);
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; We can see here that we have a possible object lifetime problem. The reason the code uses WTF::getPtr is that the attribute might return a RefPtr, for example. The whole reason a function would return a RefPtr is that it might want to return a new object where the only owner is the RefPtr. So once we put the pointer into a raw pointer and then let the expression fall out of scope, we have a pointer to a deleted object.
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; This is not a problem when we use the result of getPtr to call a function, because the underlying RefPtr doesn’t get deallocated until the end of the full expression.
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; I think the best thing to do for this would be to leave out the call to WTF::getPtr; then this won’t compile if the underlying function returns a RefPtr.
&gt; &gt;&gt; 
&gt; &gt;&gt; Another option would be to generate this code:
&gt; &gt;&gt; 
&gt; &gt;&gt;     auto a = castedThis-&gt;impl().putForwardsAttribute();
&gt; &gt;&gt;     auto* b = WTF::getPtr(a);
&gt; &gt;&gt;     if (!b)
&gt; &gt;&gt;         return;
&gt; &gt;&gt;     auto&amp; impl = *b;
&gt; &gt;&gt; 
&gt; &gt;&gt; Not sure what &quot;a&quot; and &quot;b&quot; should be named, though.
&gt; &gt; 
&gt; &gt; Good point, although it would be weird to call a setter on an object that is temporary. It was assumed that the implementation would retain the forwarded attribute&apos;s object. I will revisit before landing.
&gt; 
&gt; I think that’s why it’s good to use a raw pointer and remove the call to
&gt; getPtr. It makes sense for all the cases where forwarding makes sense.
&gt; There’s no reason for the attribute value to return a RefPtr; it should just
&gt; be a raw pointer. And I think location() does return a raw pointer. Maybe
&gt; might be nice to support a reference too, but not RefPtr or Ref.

Well, WTF::getPtr() was also useful if the implementation returned a C++ reference, which it can (and should if the pointer cannot be null).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127455</commentid>
    <comment_count>7</comment_count>
      <attachid>261595</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-19 18:11:05 -0700</bug_when>
    <thetext>Created attachment 261595
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127456</commentid>
    <comment_count>8</comment_count>
      <attachid>261590</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-19 18:12:17 -0700</bug_when>
    <thetext>Comment on attachment 261590
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:3098
&gt;&gt;&gt;&gt;&gt;&gt; +    impl.setName(nativeValue);
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; We can see here that we have a possible object lifetime problem. The reason the code uses WTF::getPtr is that the attribute might return a RefPtr, for example. The whole reason a function would return a RefPtr is that it might want to return a new object where the only owner is the RefPtr. So once we put the pointer into a raw pointer and then let the expression fall out of scope, we have a pointer to a deleted object.
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; This is not a problem when we use the result of getPtr to call a function, because the underlying RefPtr doesn’t get deallocated until the end of the full expression.
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; I think the best thing to do for this would be to leave out the call to WTF::getPtr; then this won’t compile if the underlying function returns a RefPtr.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Another option would be to generate this code:
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;     auto a = castedThis-&gt;impl().putForwardsAttribute();
&gt;&gt;&gt;&gt;     auto* b = WTF::getPtr(a);
&gt;&gt;&gt;&gt;     if (!b)
&gt;&gt;&gt;&gt;         return;
&gt;&gt;&gt;&gt;     auto&amp; impl = *b;
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Not sure what &quot;a&quot; and &quot;b&quot; should be named, though.
&gt;&gt;&gt; 
&gt;&gt;&gt; Good point, although it would be weird to call a setter on an object that is temporary. It was assumed that the implementation would retain the forwarded attribute&apos;s object. I will revisit before landing.
&gt;&gt; 
&gt;&gt; I think that’s why it’s good to use a raw pointer and remove the call to getPtr. It makes sense for all the cases where forwarding makes sense. There’s no reason for the attribute value to return a RefPtr; it should just be a raw pointer. And I think location() does return a raw pointer. Maybe might be nice to support a reference too, but not RefPtr or Ref.
&gt; 
&gt; Well, WTF::getPtr() was also useful if the implementation returned a C++ reference, which it can (and should if the pointer cannot be null).

I dropped the call to WTF::getPtr() for now. We&apos;ll see about supporting implementation methods returning C++ references if it turns out it is needed by any of the PutForwards attributes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127462</commentid>
    <comment_count>9</comment_count>
      <attachid>261595</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-19 18:59:54 -0700</bug_when>
    <thetext>Comment on attachment 261595
Patch

Clearing flags on attachment: 261595

Committed r190023: &lt;http://trac.webkit.org/changeset/190023&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127463</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-19 18:59:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127527</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-09-20 14:38:26 -0700</bug_when>
    <thetext>This introduced a use-after-free detected by ASan and GuardMalloc. Will roll out, as memory corruption on regression tests is especially not OK. Will e-mail an ASan violation log to Chris.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127528</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-09-20 14:41:54 -0700</bug_when>
    <thetext>Chris will roll out himself if this is not an easy fix.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261590</attachid>
            <date>2015-09-19 16:53:06 -0700</date>
            <delta_ts>2015-09-19 18:11:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149376-20150919165251.patch</filename>
            <type>text/plain</type>
            <size>27701</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDI5ZDEzYzZjMTc3NThl
MDJiZmNlZmQ0ODQwNGY3YjViZDhiMjUxZS4uZjRlMmNiMzRhYjk1YTBhMzUwOWMzZWYyYjBhZDky
YzJhODUwMzY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU4IEBACiAyMDE1LTA5LTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgW1dlYiBJRExdIEFkZCBzdXBw
b3J0IGZvciBbUHV0Rm9yd2FyZHM9WFhYXSBJREwgZXh0ZW5kZWQgYXR0cmlidXRlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkzNzYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV2ViIElETF0gQWRkIHN1
cHBvcnQgZm9yIFtQdXRGb3J3YXJkcz1YWFhdIElETCBleHRlbmRlZCBhdHRyaWJ1dGU6CisgICAg
ICAgIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI1B1dEZvcndhcmRzCisKKyAgICAg
ICAgQXMgYW4gaW5pdGlhbCBwcm9vZiBvZiBjb25jZXB0LCB1c2UgaXQgZm9yIERvY3VtZW50Lmxv
Y2F0aW9uIGFzIHBlciB0aGUKKyAgICAgICAgSFRNTCBzcGVjaWZpY2F0aW9uLCBpbnN0ZWFkIG9m
IHVzaW5nIGN1c3RvbSBiaW5kaW5nczoKKyAgICAgICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdn
Lm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjdGhlLWRvY3VtZW50LW9iamVjdAorCisgICAgICAgIE1v
cmUgYXR0cmlidXRlcyBjYW4gYmUgcG9ydGVkIGxhdGVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cywgbm8gd2ViLWV4cG9zZWQgYmVoYXZpb3IgY2hhbmdlIGludGVuZGVkLiBCaW5kaW5ncyB0ZXN0
cworICAgICAgICBjb3ZlcmFnZSB3YXMgYWRkZWQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgRHJvcCBjdXN0b20gYmluZGluZ3MgZm9yIHRo
ZSBsb2NhdGlvbiBhdHRyaWJ1dGUgc2V0dGVyLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yLnBtOgorICAgICAgICAoR2V0QXR0cmlidXRlRnJvbUludGVyZmFjZSk6
CisgICAgICAgIEFkZCBjb252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IHJldHVybmVkIGFuIGF0dHJp
YnV0ZSBmcm9tIGFub3RoZXIKKyAgICAgICAgaW50ZXJmYWNlLiBUaGlzIGlzIHVzZWQgYnkgW1B1
dEZvcndhcmRzXSB0byByZXRyaWV2ZSB0aGUgZm9yd2FyZGVkCisgICAgICAgIGF0dHJpYnV0ZS4K
KworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAg
ICAoSXNSZWFkb25seSk6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0OgorICAgICAgICBBZGQgc3Vw
cG9ydCBmb3IgW1B1dEZvcndhcmRzPVhYWF0gSURMIGV4dGVuZGVkIGF0dHJpYnV0ZS4KKworICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb2RlLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
Tm9kZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RPYmouY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9kZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5vZGUu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Tm9kZS5tbToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbToKKyAgICAgICAg
QWRkIGJpbmRpbmcgdGVzdHMgY292ZXJhZ2UgZm9yIFtQdXRGb3J3YXJkcz1YWFhdIElETCBleHRl
bmRlZAorICAgICAgICBhdHRyaWJ1dGUuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOgor
ICAgICAgICBVc2UgW1B1dEZvcndhcmRzPWhyZWZdIGZvciBEb2N1bWVudC5sb2NhdGlvbiBhdHRy
aWJ1dGUsIGFzIHBlciB0aGUgSFRNTAorICAgICAgICBzcGVjaWZpY2F0aW9uIGFuZCBzdG9wIHVz
aW5nIGN1c3RvbSBiaW5kaW5ncyBmb3IgdGhlIHNldHRlci4gQWxzbyBtYXJrCisgICAgICAgIHRo
ZSBhdHRyaWJ1dGUgYXMgcmVhZG9ubHkgYXMgYWxsIGF0dHJpYnV0ZXMgdXNpbmcgW1B1dEZvcndh
cmRzXSBtdXN0IGJlCisgICAgICAgIG1hcmtlZCBhcyByZWFkb25seSBhcyBwZXIgdGhlIFdlYiBJ
REwgc3BlY2lmaWNhdGlvbi4KKworMjAxNS0wOS0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgorCiAgICAgICAgIEdldCByaWQgb2YgbW9zdCBjdXN0b20gYmluZGluZ3MgZm9yIExv
Y2F0aW9uLmlkbAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQ5MzcwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1
c3RvbS5jcHAKaW5kZXggZmZlYTBlOTA1Y2RiY2MxMTg5ZWFkMDU3NDIxNjFiNTFlYWQ4YTc0Yy4u
NDQ4MmJjYmJkZTk0ZTlmMzkyMjVhN2ZhMWJhOGIwNTg1MGI2MjI4MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTUwLDIxICs1MCw2
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklY
TUU6IFJlcXVpcmUgc3VwcG9ydCBmb3IgW1B1dEZvcndhcmQ9WFhYXSBXZWIgSURMIGV4dGVuZGVk
IGF0dHJpYnV0ZS4KLXZvaWQgSlNEb2N1bWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFN0cmluZyBsb2NhdGlvblN0cmluZyA9IHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBpbXBsKCkuZnJh
bWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoUmVmUHRy
PExvY2F0aW9uPiBsb2NhdGlvbiA9IGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+bG9j
YXRpb24oKSkKLSAgICAgICAgbG9jYXRpb24tPnNldEhyZWYoYWN0aXZlRE9NV2luZG93KGV4ZWMp
LCBmaXJzdERPTVdpbmRvdyhleGVjKSwgbG9jYXRpb25TdHJpbmcpOwotfQotCiBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUgY3JlYXRlTmV3RG9jdW1lbnRXcmFwcGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAg
ICBKU09iamVjdCogd3JhcHBlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvci5wbQppbmRleCA5MTBhOTI3Zjc4N2UxZWY5YTA5MDlmYzJjZDRkMTc3
ZTZhZmRjYTM5Li4xNGY2Y2ViZjRiMmM4ZjQ2ZWY0ZjE5NzRjYzVmNTYwMjJjOWNkM2NjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0K
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCkBA
IC0yMzQsNiArMjM0LDIwIEBAIHN1YiBJRExGaWxlRm9ySW50ZXJmYWNlCiAgICAgcmV0dXJuICRp
ZGxGaWxlcy0+eyRpbnRlcmZhY2VOYW1lfTsKIH0KIAorc3ViIEdldEF0dHJpYnV0ZUZyb21JbnRl
cmZhY2UoKQoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkb3V0ZXJJbnRlcmZh
Y2UgPSBzaGlmdDsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRhdHRy
aWJ1dGVOYW1lID0gc2hpZnQ7CisKKyAgICBteSAkaW50ZXJmYWNlID0gJG9iamVjdC0+UGFyc2VJ
bnRlcmZhY2UoJG91dGVySW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7CisgICAgZm9yIG15ICRh
dHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgcmV0dXJuICRh
dHRyaWJ1dGUgaWYgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIGVxICRhdHRyaWJ1dGVOYW1l
OworICAgIH0KKyAgICBkaWUoIkNvdWxkIG5vdCBmaW5kIGF0dHJpYnV0ZSAnJGF0dHJpYnV0ZU5h
bWUnIG9uIGludGVyZmFjZSAnJGludGVyZmFjZU5hbWUnLiIpOworfQorCiBzdWIgUGFyc2VJbnRl
cmZhY2UKIHsKICAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IGFkYzhkMmU0NTUzYjI1
YjZkZGVlNTg2OGE5N2Q1NTg1M2E1Yjk3NGQuLjlkOGM3NDZmZjg5OWUxNTBjMDQ2YjU1OTBiMGM4
ZTZkYTEwMzRlNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCkBAIC0zMzYsNyArMzM2LDcgQEAgc3ViIElzU2NyaXB0UHJvZmls
ZVR5cGUKIHN1YiBJc1JlYWRvbmx5CiB7CiAgICAgbXkgJGF0dHJpYnV0ZSA9IHNoaWZ0OwotICAg
IHJldHVybiAkYXR0cmlidXRlLT5pc1JlYWRPbmx5ICYmICEkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9OworICAgIHJldHVybiAkYXR0cmli
dXRlLT5pc1JlYWRPbmx5ICYmICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJSZXBsYWNlYWJsZSJ9ICYmICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJQdXRGb3J3YXJkcyJ9OwogfQogCiBzdWIgQWRkVHlwZWRlZkZvclNjcmlw
dFByb2ZpbGVUeXBlCkBAIC0yNjQ4LDcgKzI2NDgsMTcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRUaGlz
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBcIiRu
YW1lXCIpLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCEkYXR0cmlidXRlLT5pc1N0YXRpYykgewotICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpO1xuIik7
CisgICAgICAgICAgICAgICAgICAgIG15ICRwdXRGb3J3YXJkcyA9ICRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlB1dEZvcndhcmRzIn07CisgICAgICAgICAgICAg
ICAgICAgIGlmICgkcHV0Rm9yd2FyZHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15ICRp
bXBsR2V0dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRBcyJ9IHx8
ICRuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGF1dG8qIGZvcndhcmRlZEltcGwgPSBXVEY6OmdldFB0cihjYXN0ZWRUaGlzLT5pbXBsKCkuJHtp
bXBsR2V0dGVyRnVuY3Rpb25OYW1lfSgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFmb3J3YXJkZWRJbXBsKVxuIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuO1xuIik7
CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBp
bXBsID0gKmZvcndhcmRlZEltcGw7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICRhdHRy
aWJ1dGUgPSAkY29kZUdlbmVyYXRvci0+R2V0QXR0cmlidXRlRnJvbUludGVyZmFjZSgkaW50ZXJm
YWNlLCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUsICRwdXRGb3J3YXJkcyk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKSBpZiAkc2V0dGVy
UmFpc2VzRXhjZXB0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9JRExBdHRyaWJ1dGVzLnR4dAppbmRleCAyNjA4Y2U5MWU3ZWQzZDgyOTY0MmM4YzEwNTg1MjA5
ZDA2Nzk0NzcxLi45ZTFhNTVhZmQyYzhmOTg0YjBiMzBmY2NiYzUzYTEzNjczZWVkMmE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQK
QEAgLTEwMiw2ICsxMDIsNyBAQCBPYmpDUHJvdG9jb2wKIE9iakNVc2VEZWZhdWx0VmlldwogT3Zl
cnJpZGVCdWlsdGlucwogUGFzc0NvbnRleHQKK1B1dEZvcndhcmRzPSoKIFJhaXNlc0V4Y2VwdGlv
bgogUmVmbGVjdD0qCiBSZXBsYWNlYWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vZGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vZGUu
Y3BwCmluZGV4IGViZjY0YzJkNGNlM2U0NjlhOWEyOTBiNDk3N2YwMzM4YzBlMzNhZmUuLjRlNmFi
YzVkNWJjZWQyNTFlMTdlOTk1M2E0NmVkOTg1MzdhOTM5ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Tm9kZS5jcHAKQEAgLTkyLDkgKzkyLDU1IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCiAK
IEdfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTVRlc3ROb2RlLCB3ZWJraXRfZG9tX3Rl
c3Rfbm9kZSwgV0VCS0lUX0RPTV9UWVBFX05PREUsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJL
SVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkK
IAorZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTkFNRSwKK307CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdGVzdF9ub2RlX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYktpdERPTVRlc3ROb2RlKiBzZWxmID0gV0VCS0lUX0RPTV9URVNUX05PREUob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9OQU1FOgorICAg
ICAgICB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9zZXRfbmFtZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9u
b2RlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVRlc3ROb2RlKiBz
ZWxmID0gV0VCS0lUX0RPTV9URVNUX05PREUob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCiBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9jbGFzc19pbml0KFdlYktpdERP
TVRlc3ROb2RlQ2xhc3MqIHJlcXVlc3RDbGFzcykKIHsKLSAgICBVTlVTRURfUEFSQU0ocmVxdWVz
dENsYXNzKTsKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRf
ZG9tX3Rlc3Rfbm9kZV9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVy
dHkgPSB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1l
IiwKKyAgICAgICAgICAgICJUZXN0Tm9kZTpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBUZXN0Tm9kZTpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9ub2RlX2luaXQoV2ViS2l0RE9NVGVzdE5vZGUqIHJlcXVlc3QpCkBAIC0xMDIsMyArMTQ4LDIy
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ub2RlX2luaXQoV2ViS2l0RE9NVGVzdE5v
ZGUqIHJlcXVlc3QpCiAgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOwogfQogCitnY2hhciogd2Vi
a2l0X2RvbV90ZXN0X25vZGVfZ2V0X25hbWUoV2ViS2l0RE9NVGVzdE5vZGUqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9OT0RFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpUZXN0Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5uYW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV90ZXN0X25vZGVfc2V0X25hbWUoV2ViS2l0RE9NVGVzdE5v
ZGUqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfTk9ERShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6VGVzdE5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldE5hbWUoY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9kZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5v
ZGUuaAppbmRleCBlMWFlYmM2OWE4MWUzY2UwNDZkNTM2ZDFlM2RlMzQ0MWVlODFlZjNkLi4xYThj
ZWQ2MDZmZjc5NWNjZGQ2NzY5ZjJlYWNjYTE4MTFiNjQzYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9kZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3ROb2RlLmgKQEAgLTQ3LDYgKzQ3LDI3IEBAIHN0cnVjdCBfV2ViS2l0RE9NVGVzdE5v
ZGVDbGFzcyB7CiBXRUJLSVRfQVBJIEdUeXBlCiB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9nZXRfdHlw
ZSh2b2lkKTsKIAorLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9nZXRfbmFtZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXN0Tm9kZQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV90ZXN0X25vZGVfZ2V0X25hbWUoV2ViS2l0RE9NVGVzdE5vZGUqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fdGVzdF9ub2RlX3NldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRl
c3ROb2RlCisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9ub2RlX3NldF9uYW1lKFdlYktp
dERPTVRlc3ROb2RlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCiBHX0VORF9ERUNMUwog
CiAjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPYmouY3BwCmluZGV4IDFiOWFhMjgzNWNlMTY5YWQwNmNiNmRjOWM5NDI5MmIy
MjA1ODBmMzkuLmZmMjgxNTk2N2FmOWMwYzQxNjBjODMxYzliNGU2ODM2NGNkN2M2MTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCkBAIC0xMzUsNiArMTM1LDcgQEAgZW51bSB7
CiAgICAgUFJPUF9OVUxMQUJMRV9MT05HX1NFVFRBQkxFX0FUVFJJQlVURSwKICAgICBQUk9QX05V
TExBQkxFX1NUUklOR19WQUxVRSwKICAgICBQUk9QX0FUVFJJQlVURSwKKyAgICBQUk9QX1BVVF9G
T1JXQVJEU19BVFRSSUJVVEUsCiB9OwogCiBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKQEAgLTQzMCw2ICs0MzEsOSBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BlcnR5SWQsCiAgICAgY2FzZSBQUk9QX0FUVFJJQlVURToKICAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cmlidXRlKHNlbGYp
KTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BVVF9GT1JXQVJEU19BVFRSSUJVVEU6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfcHV0X2ZvcndhcmRzX2F0dHJpYnV0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BlcnR5SWQsIHBzcGVjKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDI2LDYgKzEwMzAsMTYg
QEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19pbml0KFdlYktpdERPTVRl
c3RPYmpDbGFzcyogcmVxdWVzdENsYXNzKQogICAgICAgICAgICAgIiIsCiAgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKIAorICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QVVRfRk9SV0FSRFNf
QVRUUklCVVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInB1
dC1mb3J3YXJkcy1hdHRyaWJ1dGUiLAorICAgICAgICAgICAgIlRlc3RPYmo6cHV0LWZvcndhcmRz
LWF0dHJpYnV0ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVRlc3ROb2RlKiBU
ZXN0T2JqOnB1dC1mb3J3YXJkcy1hdHRyaWJ1dGUiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX1RFU1RfTk9ERSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCiB9
CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfaW5pdChXZWJLaXRET01UZXN0T2Jq
KiByZXF1ZXN0KQpAQCAtMjU0NSwzICsyNTU5LDEyIEBAIGdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCitXZWJLaXRET01UZXN0Tm9kZSogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHV0
X2ZvcndhcmRzX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUZXN0T2Jq
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0Tm9k
ZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnB1dEZvcndhcmRzQXR0cmlidXRl
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCmluZGV4IDcyMzZlNjgzNWFkMDlkZmZmYzU0NTgz
MzA0NGY1YzQzYTVmZDI4YWIuLjMyNmZmMGQxMTQ1ZWU2OWM5NmNjNWEzMjY4NGEyMGYwZWJjZWZj
MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgKQEAgLTE2OTMsNiArMTY5MywxNyBA
QCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9zdHJpbmdfdmFsdWUoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdQogV0VCS0lUX0FQSSBnY2hhcioKIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKIAorLyoqCisg
KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wdXRfZm9yd2FyZHNfYXR0cmlidXRlOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RPYmoKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6
IEEgI1dlYktpdERPTVRlc3ROb2RlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTVRlc3ROb2RlKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHV0
X2ZvcndhcmRzX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKKwogR19FTkRfREVD
TFMKIAogI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
CmluZGV4IDVjZDIzZjhhZjcxZGY0N2Q4YjAxMmI4MzAzNzEzMTZkYzcwNTUzNDAuLmYyODc1ZWY0
MTQ1NDUyZjMzMjk5MzNhMzQxNGUzMDNiMmMwYWJjOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKQEAgLTI0LDcg
KzI0LDkgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiVGVzdE5vZGUuaCIKKyNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTMzLDYgKzM1LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBBdHRyaWJ1dGVzCiAKK0pTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0Tm9kZU5hbWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwordm9pZCBzZXRKU1Rlc3ROb2Rl
TmFtZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZUNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIAogY2xhc3MgSlNUZXN0Tm9kZVByb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewpAQCAtMTE4LDYgKzEyMiw3IEBAIENvbnN0
cnVjdFR5cGUgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCos
IENvbnN0cnVjdERhdGEmIGNvCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Tm9k
ZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQogewogICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVu
dW0gfCBSZWFkT25seSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3ROb2RlQ29uc3RydWN0b3IpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCisgICAg
eyAibmFtZSIsIERvbnREZWxldGUgfCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3ROb2Rl
TmFtZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHNldEpTVGVzdE5vZGVOYW1lKSB9IH0sCiB9OwogCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0
Tm9kZVByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5vZGVQcm90b3R5cGUiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5vZGVQcm90b3R5cGUpIH07CkBAIC0x
NDUsNiArMTUwLDIzIEBAIEpTT2JqZWN0KiBKU1Rlc3ROb2RlOjpnZXRQcm90b3R5cGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHJldHVybiBnZXRET01Qcm90b3R5
cGU8SlNUZXN0Tm9kZT4odm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oZXhl
Yyk7CisgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKKyAgICBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RO
b2RlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKKyAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9kZVByb3RvdHlw
ZSo+KHNsb3RCYXNlKSkKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVy
RXJyb3IoKmV4ZWMsICJUZXN0Tm9kZSIsICJuYW1lIik7CisgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3ROb2RlIiwgIm5hbWUiKTsKKyAgICB9CisgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKGV4ZWMsIGltcGwubmFtZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7Cit9CisKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZUNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICBKU1Rlc3ROb2RlUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE5vZGVQcm90b3R5cGUqPihiYXNlVmFsdWUpOwpAQCAtMTUzLDYgKzE3
NSwyNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogYmFzZVZhbHVlLCBFbmNvZAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNUZXN0Tm9kZTo6Z2V0Q29uc3RydWN0b3IoZXhlYy0+dm0oKSwgZG9tT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSkpOwogfQogCit2b2lkIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CisgICAg
SlNUZXN0Tm9kZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9kZSo+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CisgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE5vZGVQcm90b3R5cGUqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSkpCisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVy
RXJyb3IoKmV4ZWMsICJUZXN0Tm9kZSIsICJuYW1lIik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE5vZGUiLCAibmFtZSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
CisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpbXBsLnNldE5hbWUobmF0aXZlVmFsdWUpOworfQorCisKIEpTVmFsdWUgSlNU
ZXN0Tm9kZTo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogewogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3ROb2RlQ29uc3RydWN0
b3I+KHZtLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5j
cHAKaW5kZXggYTU2ZTMyYmEyZmRiZTk4NDVlY2MzYTE1YjI3NzE5YWM5MjgzMGM1YS4uMWFjMmEw
NTcxZGMwOTg0NDg0MWY3OTY3ZDM2MjVkOWUzMTZhYTQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTQ5LDYg
KzQ5LDcgQEAKICNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJUZXN0Tm9k
ZS5oIgogI2luY2x1ZGUgIlRlc3RPYmouaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJi
b29sLmgiCkBAIC0zMDgsNiArMzA5LDggQEAgdm9pZCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2QKIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwogdm9pZCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVt
VHlwZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHV0
Rm9yd2FyZHNBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwordm9pZCBzZXRKU1Rlc3RPYmpQdXRG
b3J3YXJkc0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogCiBjbGFzcyBKU1Rlc3RPYmpQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKQEAgLTU3NSw2ICs1Nzgs
NyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVW
YWx1ZXNbXSA9CiAgICAgeyAibnVsbGFibGVTdHJpbmdWYWx1ZSIsIERvbnREZWxldGUgfCBDdXN0
b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKSwgKGludHB0
cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0
T2JqTnVsbGFibGVTdHJpbmdWYWx1ZSkgfSB9LAogICAgIHsgImF0dHJpYnV0ZSIsIERvbnREZWxl
dGUgfCBSZWFkT25seSB8IEN1c3RvbUFjY2Vzc29yLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakF0dHJpYnV0
ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+
KDApIH0gfSwKICAgICB7ICJhdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIsIERvbnREZWxl
dGUgfCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2
ZWRFbnVtVHlwZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKSB9IH0s
CisgICAgeyAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiLCBEb250RGVsZXRlIHwgQ3VzdG9tQWNjZXNz
b3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RPYmpQdXRG
b3J3YXJkc0F0dHJpYnV0ZSkgfSB9LAogI2lmIEVOQUJMRShDb25kaXRpb24xKQogICAgIHsgIkNP
TkRJVElPTkFMX0NPTlNUIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgQ29uc3RhbnRJbnRlZ2Vy
LCBOb0ludHJpbnNpYywgeyAobG9uZyBsb25nKSgwKSB9IH0sCiAjZWxzZQpAQCAtMTk0MCw2ICsx
OTQ0LDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVu
dW1UeXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqCiB9CiAKIAorRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
c2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOworICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKKyAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQorICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERl
cHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicHV0Rm9yd2FyZHNBdHRyaWJ1
dGUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpOworICAgIH0KKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5wdXRGb3J3YXJkc0F0dHJpYnV0
ZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCisKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBKU1Rlc3RP
YmpQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBl
Kj4oYmFzZVZhbHVlKTsKQEAgLTMwNTUsNiArMzA3NiwyOSBAQCB2b2lkIHNldEpTVGVzdE9iakF0
dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJh
c2VPYgogfQogCiAKK3ZvaWQgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0
KTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CisgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRT
ZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
T2JqIiwgInB1dEZvcndhcmRzQXR0cmlidXRlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgYXV0byogZm9yd2FyZGVkSW1wbCA9IFdURjo6Z2V0UHRyKGNhc3RlZFRoaXMtPmltcGwoKS5w
dXRGb3J3YXJkc0F0dHJpYnV0ZSgpKTsKKyAgICBpZiAoIWZvcndhcmRlZEltcGwpCisgICAgICAg
IHJldHVybjsKKyAgICBhdXRvJiBpbXBsID0gKmZvcndhcmRlZEltcGw7CisgICAgU3RyaW5nIG5h
dGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybjsKKyAgICBpbXBs
LnNldE5hbWUobmF0aXZlVmFsdWUpOworfQorCisKIEpTVmFsdWUgSlNUZXN0T2JqOjpnZXRDb25z
dHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcmV0
dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdE9iakNvbnN0cnVjdG9yPih2bSwganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Tm9kZS5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5vZGUuaAppbmRleCAwYTdk
YmE1MDJiMzkzODBmNTI5ZDc2YzlhMGUzYmFkMjFhMjQwZDE3Li5mZTQ5YmQ1YzBjMTc5ZDE4NGJk
MDQ2MzExN2I4YWQzYzdhZTUxOWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Tm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3ROb2RlLmgKQEAgLTI2LDYgKzI2LDkgQEAK
IAogI2ltcG9ydCA8V2ViQ29yZS9ET01Ob2RlLmg+CiAKK0BjbGFzcyBOU1N0cmluZzsKKwogV0VC
S0lUX0NMQVNTX0FWQUlMQUJMRV9NQUMoOTg3Nl81KQogV0VCQ09SRV9FWFBPUlQgQGludGVyZmFj
ZSBET01UZXN0Tm9kZSA6IERPTU5vZGUKK0Bwcm9wZXJ0eSAoY29weSkgTlNTdHJpbmcgKm5hbWU7
CiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0Tm9kZS5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3ROb2RlLm1tCmluZGV4IDI5MDIxZThhNzMyMjNiZGE4NjZiNWMyZDRhMzli
MTc5MzdkMDlhMTAuLjQ4ZTE0NGIxMzUxMTY2NDg1NTg4ODk5MmIxOTMzNzg2N2E1NzE3NTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3ROb2RlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3ROb2RlLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0ICJKU01haW5UaHJlYWRF
eGVjU3RhdGUuaCIKICNpbXBvcnQgIlRlc3ROb2RlLmgiCiAjaW1wb3J0ICJUaHJlYWRDaGVjay5o
IgorI2ltcG9ydCAiVVJMLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRlLmgiCiAj
aW1wb3J0IDx3dGYvR2V0UHRyLmg+CiAKQEAgLTQyLDYgKzQzLDE4IEBACiAKIEBpbXBsZW1lbnRh
dGlvbiBET01UZXN0Tm9kZQogCistIChOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwtPm5hbWUoKTsKK30K
KworLSAodm9pZClzZXROYW1lOihOU1N0cmluZyAqKW5ld05hbWUKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+c2V0TmFtZShuZXdOYW1lKTsK
K30KKwogQGVuZAogCiBXZWJDb3JlOjpUZXN0Tm9kZSogY29yZShET01UZXN0Tm9kZSAqd3JhcHBl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RPYmouaAppbmRleCA0MjJkODYzMDA0NzAwMDEzMWZjZWRlZjdhMmViY2RhZWE0NDg1
MzAwLi41ZTU5N2Q3NzUwMmNmYTM4MWM0YWU1MzBhNGNjY2ZmZGJhNDAzZmJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9i
ai5oCkBAIC0xMjIsNiArMTIyLDcgQEAgV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBET01UZXN0
T2JqIDogRE9NT2JqZWN0CiBAcHJvcGVydHkgaW50IG51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmli
dXRlOwogQHByb3BlcnR5IGludCBudWxsYWJsZVN0cmluZ1ZhbHVlOwogQHByb3BlcnR5IChyZWFk
b25seSwgY29weSkgTlNTdHJpbmcgKmF0dHJpYnV0ZTsKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIHN0
cm9uZykgRE9NVGVzdE5vZGUgKnB1dEZvcndhcmRzQXR0cmlidXRlOwogCiAtICh2b2lkKXZvaWRN
ZXRob2Q7CiAtICh2b2lkKXZvaWRNZXRob2RXaXRoQXJnczooaW50KWxvbmdBcmcgc3RyQXJnOihO
U1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1t
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5t
bQppbmRleCA3NjkxNzU3MWM3NDc5YTBmMDY5OGZlYzcwZmIxNTAwZmFjZGY2MjgxLi44NTMxMDQw
ZGI0OWEwYjU5YzY0MDk0MzNiN2ZmNjkxZGM3NTg0NWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KQEAgLTgz
MCw2ICs4MzAsMTIgQEAgLSAoTlNTdHJpbmcgKilhdHRyaWJ1dGUKICAgICByZXR1cm4gSU1QTC0+
YXR0cmlidXRlKCk7CiB9CiAKKy0gKERPTVRlc3ROb2RlICopcHV0Rm9yd2FyZHNBdHRyaWJ1dGUK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJu
IGtpdChXVEY6OmdldFB0cihJTVBMLT5wdXRGb3J3YXJkc0F0dHJpYnV0ZSgpKSk7Cit9CisKIC0g
KHZvaWQpdm9pZE1ldGhvZAogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0Tm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5v
ZGUuaWRsCmluZGV4IGYyM2JhNjcxNjAwMjlhNzk1MTdlZTIxM2NmMDc4ZmNjYzM1M2Y0MmMuLjIw
ZTIwYTE1Y2EyZmVhZTMzNDA0ZDk2NzIwZjkyYzkyOGMyOTc4ODMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbApAQCAtMjIsNSArMjIs
NiBAQAogICAgIEV2ZW50VGFyZ2V0LAogICAgIENvbnN0cnVjdG9yLAogXSBpbnRlcmZhY2UgVGVz
dE5vZGUgOiBOb2RlIHsKKyAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXgg
OWQ1ZDc2MTViODc2ZDZiMzEzYjVhZjc1YzQ5NWYwMDMxZDY0OGIzOC4uOTBiYjMzNDZkM2VhNjY2
OGZlMWYyNTA0ZDE3NGZhYzI4NmM3M2E5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbApAQCAtMjk4LDYgKzI5OCw5IEBAIGVudW0gX29w
dGlvbmFsIHsgIiIsICJPcHRpb25hbFZhbHVlMSIsICJPcHRpb25hbFZhbHVlMiIsICJPcHRpb25h
bFZhbHVlMyIgfTsKICAgICBQcm9taXNlIHRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1
bWVudChmbG9hdCBhKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBQcm9taXNlIHRlc3RQcm9taXNl
RnVuY3Rpb25XaXRoRXhjZXB0aW9uKCk7CiAgICAgUHJvbWlzZSB0ZXN0UHJvbWlzZUZ1bmN0aW9u
V2l0aE9wdGlvbmFsSW50QXJndW1lbnQob3B0aW9uYWwgbG9uZyBhKTsKKworICAgIC8vIFB1dEZv
cndhcmRzCisgICAgW1B1dEZvcndhcmRzPW5hbWVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBUZXN0Tm9k
ZSBwdXRGb3J3YXJkc0F0dHJpYnV0ZTsKIH07CiAKIC8vIFRoZSBmb2xsb3dpbmcgY29tbWVudCBz
aG91bGQgbm90IGdlbmVyYXRlIGFueSBjb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKaW5kZXgg
ZGEwZjcyY2FhZDBhODdiNTc4YmZkNGNkN2U0ODQ1YTU2YWNiYWQyYS4uMWFjOWMwMzA3ZGUyNDE3
MzgwNjcyZmI1ZmJjMzc3ZWY3YzE4YmRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCkBAIC0x
NzAsNyArMTcwLDcgQEAKICAgICBOb2RlTGlzdCBnZXRFbGVtZW50c0J5TmFtZShbRGVmYXVsdD1V
bmRlZmluZWQsQXRvbWljU3RyaW5nXSBvcHRpb25hbCBET01TdHJpbmcgZWxlbWVudE5hbWUpOwog
CiAjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBU
Ci0gICAgW0N1c3RvbVNldHRlciwgVW5mb3JnZWFibGVdIGF0dHJpYnV0ZSBMb2NhdGlvbiBsb2Nh
dGlvbjsKKyAgICBbUHV0Rm9yd2FyZHM9aHJlZiwgVW5mb3JnZWFibGVdIHJlYWRvbmx5IGF0dHJp
YnV0ZSBMb2NhdGlvbiBsb2NhdGlvbjsKICNlbmRpZgogCiAgICAgLy8gSUUgZXh0ZW5zaW9ucwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261595</attachid>
            <date>2015-09-19 18:11:05 -0700</date>
            <delta_ts>2015-09-19 18:59:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149376-20150919181050.patch</filename>
            <type>text/plain</type>
            <size>28119</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMDIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjYzNmExMWM0NDY5ZGMw
MDI3NmFjMGM2NThlMTYxZWFjZjU5OGFkMC4uMGNjYjM1N2NiYTUxMWNkYThhYzFkMjM5YmM2Mzk3
Mjc0YjYyMTk0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU4IEBACiAyMDE1LTA5LTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgW1dlYiBJRExdIEFkZCBzdXBw
b3J0IGZvciBbUHV0Rm9yd2FyZHM9WFhYXSBJREwgZXh0ZW5kZWQgYXR0cmlidXRlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkzNzYKKworICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBbV2ViIElETF0gQWRkIHN1cHBv
cnQgZm9yIFtQdXRGb3J3YXJkcz1YWFhdIElETCBleHRlbmRlZCBhdHRyaWJ1dGU6CisgICAgICAg
IGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI1B1dEZvcndhcmRzCisKKyAgICAgICAg
QXMgYW4gaW5pdGlhbCBwcm9vZiBvZiBjb25jZXB0LCB1c2UgaXQgZm9yIERvY3VtZW50LmxvY2F0
aW9uIGFzIHBlciB0aGUKKyAgICAgICAgSFRNTCBzcGVjaWZpY2F0aW9uLCBpbnN0ZWFkIG9mIHVz
aW5nIGN1c3RvbSBiaW5kaW5nczoKKyAgICAgICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9y
Zy9tdWx0aXBhZ2UvZG9tLmh0bWwjdGhlLWRvY3VtZW50LW9iamVjdAorCisgICAgICAgIE1vcmUg
YXR0cmlidXRlcyBjYW4gYmUgcG9ydGVkIGxhdGVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywg
bm8gd2ViLWV4cG9zZWQgYmVoYXZpb3IgY2hhbmdlIGludGVuZGVkLiBCaW5kaW5ncyB0ZXN0cwor
ICAgICAgICBjb3ZlcmFnZSB3YXMgYWRkZWQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Rv
Y3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgRHJvcCBjdXN0b20gYmluZGluZ3MgZm9yIHRoZSBs
b2NhdGlvbiBhdHRyaWJ1dGUgc2V0dGVyLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yLnBtOgorICAgICAgICAoR2V0QXR0cmlidXRlRnJvbUludGVyZmFjZSk6Cisg
ICAgICAgIEFkZCBjb252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IHJldHVybmVkIGFuIGF0dHJpYnV0
ZSBmcm9tIGFub3RoZXIKKyAgICAgICAgaW50ZXJmYWNlLiBUaGlzIGlzIHVzZWQgYnkgW1B1dEZv
cndhcmRzXSB0byByZXRyaWV2ZSB0aGUgZm9yd2FyZGVkCisgICAgICAgIGF0dHJpYnV0ZS4KKwor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAo
SXNSZWFkb25seSk6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0OgorICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgW1B1dEZvcndhcmRzPVhYWF0gSURMIGV4dGVuZGVkIGF0dHJpYnV0ZS4KKworICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb2RlLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9k
ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPYmouY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Tm9kZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5j
cHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5vZGUuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Tm9kZS5tbToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmg6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbToKKyAgICAgICAgQWRk
IGJpbmRpbmcgdGVzdHMgY292ZXJhZ2UgZm9yIFtQdXRGb3J3YXJkcz1YWFhdIElETCBleHRlbmRl
ZAorICAgICAgICBhdHRyaWJ1dGUuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOgorICAg
ICAgICBVc2UgW1B1dEZvcndhcmRzPWhyZWZdIGZvciBEb2N1bWVudC5sb2NhdGlvbiBhdHRyaWJ1
dGUsIGFzIHBlciB0aGUgSFRNTAorICAgICAgICBzcGVjaWZpY2F0aW9uIGFuZCBzdG9wIHVzaW5n
IGN1c3RvbSBiaW5kaW5ncyBmb3IgdGhlIHNldHRlci4gQWxzbyBtYXJrCisgICAgICAgIHRoZSBh
dHRyaWJ1dGUgYXMgcmVhZG9ubHkgYXMgYWxsIGF0dHJpYnV0ZXMgdXNpbmcgW1B1dEZvcndhcmRz
XSBtdXN0IGJlCisgICAgICAgIG1hcmtlZCBhcyByZWFkb25seSBhcyBwZXIgdGhlIFdlYiBJREwg
c3BlY2lmaWNhdGlvbi4KKworMjAxNS0wOS0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgorCiAgICAgICAgIFtXZWJJRExdIFNwZWNpZnkgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVz
IHdoZXJlIGl0IGlzIHVzZWZ1bAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ5MzMxCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yMjU0NTYwMD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXgg
ZmZlYTBlOTA1Y2RiY2MxMTg5ZWFkMDU3NDIxNjFiNTFlYWQ4YTc0Yy4uNDQ4MmJjYmJkZTk0ZTlm
MzkyMjVhN2ZhMWJhOGIwNTg1MGI2MjI4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTUwLDIxICs1MCw2IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFJlcXVpcmUgc3Vw
cG9ydCBmb3IgW1B1dEZvcndhcmQ9WFhYXSBXZWIgSURMIGV4dGVuZGVkIGF0dHJpYnV0ZS4KLXZv
aWQgSlNEb2N1bWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQotewotICAgIFN0cmluZyBsb2NhdGlvblN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBpbXBsKCkuZnJhbWUoKTsKLSAgICBpZiAo
IWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoUmVmUHRyPExvY2F0aW9uPiBsb2Nh
dGlvbiA9IGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+bG9jYXRpb24oKSkKLSAgICAg
ICAgbG9jYXRpb24tPnNldEhyZWYoYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRv
dyhleGVjKSwgbG9jYXRpb25TdHJpbmcpOwotfQotCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUgY3Jl
YXRlTmV3RG9jdW1lbnRXcmFwcGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBKU09iamVjdCogd3Jh
cHBlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvci5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ci5wbQppbmRleCA5MTBhOTI3Zjc4N2UxZWY5YTA5MDlmYzJjZDRkMTc3ZTZhZmRjYTM5Li4xNGY2
Y2ViZjRiMmM4ZjQ2ZWY0ZjE5NzRjYzVmNTYwMjJjOWNkM2NjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCkBAIC0yMzQsNiArMjM0LDIw
IEBAIHN1YiBJRExGaWxlRm9ySW50ZXJmYWNlCiAgICAgcmV0dXJuICRpZGxGaWxlcy0+eyRpbnRl
cmZhY2VOYW1lfTsKIH0KIAorc3ViIEdldEF0dHJpYnV0ZUZyb21JbnRlcmZhY2UoKQoreworICAg
IG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkb3V0ZXJJbnRlcmZhY2UgPSBzaGlmdDsKKyAg
ICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRhdHRyaWJ1dGVOYW1lID0gc2hp
ZnQ7CisKKyAgICBteSAkaW50ZXJmYWNlID0gJG9iamVjdC0+UGFyc2VJbnRlcmZhY2UoJG91dGVy
SW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7CisgICAgZm9yIG15ICRhdHRyaWJ1dGUgKEB7JGlu
dGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgcmV0dXJuICRhdHRyaWJ1dGUgaWYgJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIGVxICRhdHRyaWJ1dGVOYW1lOworICAgIH0KKyAgICBk
aWUoIkNvdWxkIG5vdCBmaW5kIGF0dHJpYnV0ZSAnJGF0dHJpYnV0ZU5hbWUnIG9uIGludGVyZmFj
ZSAnJGludGVyZmFjZU5hbWUnLiIpOworfQorCiBzdWIgUGFyc2VJbnRlcmZhY2UKIHsKICAgICBt
eSAkb2JqZWN0ID0gc2hpZnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDYxY2ZlNmI5ZGEwYzBkNzUwYjRmYzc3OTcxZjRh
ZDNhMjdlZGVlMGEuLjNlZjM1ZDExNjBmZTEzMGMzY2Q1NWNlMDMxMTRjYTIzNjc3MDExZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCkBAIC0zMzYsNyArMzM2LDcgQEAgc3ViIElzU2NyaXB0UHJvZmlsZVR5cGUKIHN1YiBJc1Jl
YWRvbmx5CiB7CiAgICAgbXkgJGF0dHJpYnV0ZSA9IHNoaWZ0OwotICAgIHJldHVybiAkYXR0cmli
dXRlLT5pc1JlYWRPbmx5ICYmICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJSZXBsYWNlYWJsZSJ9OworICAgIHJldHVybiAkYXR0cmlidXRlLT5pc1JlYWRPbmx5
ICYmICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBsYWNl
YWJsZSJ9ICYmICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJQ
dXRGb3J3YXJkcyJ9OwogfQogCiBzdWIgQWRkVHlwZWRlZkZvclNjcmlwdFByb2ZpbGVUeXBlCkBA
IC0yNjQ4LDcgKzI2NDgsMTcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRUaGlzLT5wdXREaXJlY3QoZXhl
Yy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBcIiRuYW1lXCIpLCB2YWx1ZSk7
XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKCEkYXR0cmli
dXRlLT5pc1N0YXRpYykgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpO1xuIik7CisgICAgICAgICAgICAg
ICAgICAgIG15ICRwdXRGb3J3YXJkcyA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IlB1dEZvcndhcmRzIn07CisgICAgICAgICAgICAgICAgICAgIGlmICgkcHV0
Rm9yd2FyZHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpbXBsR2V0dGVyRnVuY3Rp
b25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRBcyJ9IHx8ICRuYW1lKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIGZvcndhcmRl
ZEltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCkuJHtpbXBsR2V0dGVyRnVuY3Rpb25OYW1lfSgpO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAo
IWZvcndhcmRlZEltcGwpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICByZXR1cm47XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSAqZm9yd2FyZGVkSW1wbDtcbiIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgJGF0dHJpYnV0ZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRB
dHRyaWJ1dGVGcm9tSW50ZXJmYWNlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
dHlwZSwgJHB1dEZvcndhcmRzKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDtcbiIpIGlmICRzZXR0ZXJSYWlzZXNFeGNlcHRpb247CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CmluZGV4IDI2
MDhjZTkxZTdlZDNkODI5NjQyYzhjMTA1ODUyMDlkMDY3OTQ3NzEuLjllMWE1NWFmZDJjOGY5ODRi
MGIzMGZjY2JjNTNhMTM2NzNlZWQyYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dApAQCAtMTAyLDYgKzEwMiw3IEBAIE9iakNQcm90
b2NvbAogT2JqQ1VzZURlZmF1bHRWaWV3CiBPdmVycmlkZUJ1aWx0aW5zCiBQYXNzQ29udGV4dAor
UHV0Rm9yd2FyZHM9KgogUmFpc2VzRXhjZXB0aW9uCiBSZWZsZWN0PSoKIFJlcGxhY2VhYmxlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9kZS5jcHAKaW5kZXggZWJmNjRjMmQ0Y2UzZTQ2OWE5
YTI5MGI0OTc3ZjAzMzhjMGUzM2FmZS4uNGU2YWJjNWQ1YmNlZDI1MWUxN2U5OTUzYTQ2ZWQ5ODUz
N2E5MzlkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb2RlLmNwcApAQCAtOTIsOSAr
OTIsNTUgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRE
T01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKIAogR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2Vi
S2l0RE9NVGVzdE5vZGUsIHdlYmtpdF9kb21fdGVzdF9ub2RlLCBXRUJLSVRfRE9NX1RZUEVfTk9E
RSwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQogCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAg
UFJPUF9OQU1FLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25vZGVfc2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NVGVzdE5vZGUqIHNlbGYg
PSBXRUJLSVRfRE9NX1RFU1RfTk9ERShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlk
KSB7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIHdlYmtpdF9kb21fdGVzdF9ub2RlX3Nl
dF9uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25vZGVfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMp
Cit7CisgICAgV2ViS2l0RE9NVGVzdE5vZGUqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfTk9ERShv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX05BTUU6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9ub2Rl
X2dldF9uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9ub2RlX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdE5vZGVDbGFzcyogcmVxdWVzdENsYXNz
KQogewotICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0Q2xhc3MpOworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9ub2RlX3NldF9wcm9wZXJ0eTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9ub2RlX2dl
dF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAgIlRlc3ROb2RlOm5h
bWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3ROb2RlOm5hbWUiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKIH0K
IAogc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25vZGVfaW5pdChXZWJLaXRET01UZXN0Tm9k
ZSogcmVxdWVzdCkKQEAgLTEwMiwzICsxNDgsMjIgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90
ZXN0X25vZGVfaW5pdChXZWJLaXRET01UZXN0Tm9kZSogcmVxdWVzdCkKICAgICBVTlVTRURfUEFS
QU0ocmVxdWVzdCk7CiB9CiAKK2djaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9nZXRfbmFtZShX
ZWJLaXRET01UZXN0Tm9kZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNU
X05PREUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRlc3ROb2RlKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
Pm5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX3Rlc3Rf
bm9kZV9zZXRfbmFtZShXZWJLaXRET01UZXN0Tm9kZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9OT0RFKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpUZXN0Tm9kZSogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0TmFtZShjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3ROb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9kZS5oCmluZGV4IGUxYWViYzY5YTgxZTNjZTA0
NmQ1MzZkMWUzZGUzNDQxZWU4MWVmM2QuLjFhOGNlZDYwNmZmNzk1Y2NkZDY3NjlmMmVhY2NhMTgx
MWI2NDNhNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vZGUuaApAQCAtNDcsNiArNDcs
MjcgQEAgc3RydWN0IF9XZWJLaXRET01UZXN0Tm9kZUNsYXNzIHsKIFdFQktJVF9BUEkgR1R5cGUK
IHdlYmtpdF9kb21fdGVzdF9ub2RlX2dldF90eXBlKHZvaWQpOwogCisvKioKKyAqIHdlYmtpdF9k
b21fdGVzdF9ub2RlX2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3ROb2RlCisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9nZXRfbmFtZShXZWJLaXRE
T01UZXN0Tm9kZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X25vZGVfc2V0X25h
bWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE5vZGUKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV90ZXN0X25vZGVfc2V0X25hbWUoV2ViS2l0RE9NVGVzdE5vZGUqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKaW5kZXggYTU4
OWM3MWRiYmNlODFjYjlkN2YwZjMyYmQxOGFjMTJhNWY1NjNlZi4uMDAxYjFmNGU3ZTgwNzc1M2Ux
Y2JkZDJmZjkwNTE3MjYyMTlkNGUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5j
cHAKQEAgLTEzNSw2ICsxMzUsNyBAQCBlbnVtIHsKICAgICBQUk9QX05VTExBQkxFX0xPTkdfU0VU
VEFCTEVfQVRUUklCVVRFLAogICAgIFBST1BfTlVMTEFCTEVfU1RSSU5HX1ZBTFVFLAogICAgIFBS
T1BfQVRUUklCVVRFLAorICAgIFBST1BfUFVUX0ZPUldBUkRTX0FUVFJJQlVURSwKIH07CiAKIHN0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQpA
QCAtNDMwLDYgKzQzMSw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwKICAgICBjYXNlIFBST1Bf
QVRUUklCVVRFOgogICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9hdHRyaWJ1dGUoc2VsZikpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfUFVUX0ZPUldBUkRTX0FUVFJJQlVURToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0
KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wdXRfZm9yd2FyZHNfYXR0cmlidXRlKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwogICAgICAg
ICBicmVhazsKQEAgLTEwMjYsNiArMTAzMCwxNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdE9iakNsYXNzKiByZXF1ZXN0Q2xhc3MpCiAg
ICAgICAgICAgICAiIiwKICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwogCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1BVVF9GT1JXQVJEU19BVFRSSUJVVEUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAicHV0LWZvcndhcmRzLWF0dHJpYnV0ZSIsCisgICAg
ICAgICAgICAiVGVzdE9iajpwdXQtZm9yd2FyZHMtYXR0cmlidXRlIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NVGVzdE5vZGUqIFRlc3RPYmo6cHV0LWZvcndhcmRzLWF0dHJpYnV0
ZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OT0RFLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0X2RvbV90
ZXN0X29ial9pbml0KFdlYktpdERPTVRlc3RPYmoqIHJlcXVlc3QpCkBAIC0yNTU1LDMgKzI1Njks
MTIgQEAgZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1dlYktpdERPTVRlc3ROb2Rl
KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wdXRfZm9yd2FyZHNfYXR0cmlidXRlKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3ROb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+cHV0Rm9yd2FyZHNBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0
KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgK
aW5kZXggMjYzMWU1ODRjNzk0YmM3YTUxNzA4MDU3YzM0ZWIzZWFmN2ExNmU3Yy4uNDUzZmI4Y2Uy
YzNhY2Q4MTI1MmExNjMwMDM0MWExNTc0ZjkxYWRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPYmouaApAQCAtMTcwMyw2ICsxNzAzLDE3IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X251
bGxhYmxlX3N0cmluZ192YWx1ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1CiBX
RUJLSVRfQVBJIGdjaGFyKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cmlidXRlKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpOwogCisvKioKKyAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3B1
dF9mb3J3YXJkc19hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE5vZGUKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE5vZGUq
Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wdXRfZm9yd2FyZHNfYXR0cmlidXRlKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYgLyogV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKaW5kZXggNWNkMjNmOGFmNzFkZjQ3ZDhiMDEy
YjgzMDM3MTMxNmRjNzA1NTM0MC4uZjI4NzVlZjQxNDU0NTJmMzMyOTkzM2EzNDE0ZTMwM2IyYzBh
YmM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMjQsNyArMjQsOSBAQAogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJUZXN0Tm9kZS5o
IgorI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwpAQCAtMzMsNiArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8v
IEF0dHJpYnV0ZXMKIAorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Cit2b2lkIHNldEpTVGVzdE5vZGVOYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwog
CiBjbGFzcyBKU1Rlc3ROb2RlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7CkBAIC0xMTgsNiArMTIyLDcgQEAgQ29uc3RydWN0VHlwZSBKU1Rlc3ROb2RlQ29uc3RydWN0
b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY28KIHN0YXRpYyBj
b25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3ROb2RlUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9CiB7
CiAgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSB8IFJlYWRPbmx5LCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dE5vZGVDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKKyAgICB7ICJuYW1lIiwgRG9udERlbGV0ZSB8IEN1c3Rv
bUFjY2Vzc29yLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE5vZGVOYW1lKSwgKGludHB0cl90KSBzdGF0aWNfY2Fz
dDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0Tm9kZU5hbWUpIH0gfSwK
IH07CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROb2RlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJU
ZXN0Tm9kZVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNUZXN0Tm9kZVByb3RvdHlwZSkgfTsKQEAgLTE0NSw2ICsxNTAsMjMgQEAgSlNPYmplY3QqIEpT
VGVzdE5vZGU6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiAgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROb2RlPih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKIH0KIAorRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQoreworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc2xvdEJh
c2UpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOworICAgIEpTVGVzdE5vZGUqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vZGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgeworICAgICAgICBpZiAoanNE
eW5hbWljQ2FzdDxKU1Rlc3ROb2RlUHJvdG90eXBlKj4oc2xvdEJhc2UpKQorICAgICAgICAgICAg
cmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3ROb2RlIiwgIm5h
bWUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE5v
ZGUiLCAibmFtZSIpOworICAgIH0KKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbC5uYW1l
KCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3ROb2RlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
YmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpTVGVzdE5v
ZGVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9kZVByb3RvdHlw
ZSo+KGJhc2VWYWx1ZSk7CkBAIC0xNTMsNiArMTc1LDI2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE5vZGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVu
Y29kCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROb2RlOjpnZXRDb25zdHJ1Y3Rv
cihleGVjLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKK3ZvaWQgc2V0
SlNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKKyAgICBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3ROb2RlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKKyAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8
SlNUZXN0Tm9kZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKKyAgICAg
ICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3ROb2RlIiwgIm5h
bWUiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4
ZWMsICJUZXN0Tm9kZSIsICJuYW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGltcGwuc2V0TmFtZShuYXRp
dmVWYWx1ZSk7Cit9CisKKwogSlNWYWx1ZSBKU1Rlc3ROb2RlOjpnZXRDb25zdHJ1Y3RvcihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcj4odm0sIGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCBjMDg5M2RhMGZiOWM3OGEwMjBi
YzY1MWI5YzJkMDI3ODBmZTEzYWI0Li4yZWE2ODk0MzQ1MGM1NzE0NWExYmZkODBhNDdkZGM3NTg1
MDE0NTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlNjcmlwdFBy
b2ZpbGUuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRlc3ROb2RlLmgiCiAjaW5jbHVkZSAiVGVzdE9iai5oIgog
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgImJvb2wuaCIKQEAgLTMwOSw2ICszMTAsOCBAQCB2
b2lkIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFbmNvZAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRy
aWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRy
aWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiB2b2lkIHNldEpTVGVz
dE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Cit2b2lkIHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CiAKIGNsYXNzIEpTVGVzdE9ialByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgewpAQCAtNTc2LDYgKzU3OSw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVW
YWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KICAgICB7ICJudWxsYWJsZVN0
cmluZ1ZhbHVlIiwgRG9udERlbGV0ZSB8IEN1c3RvbUFjY2Vzc29yLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9i
ak51bGxhYmxlU3RyaW5nVmFsdWUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKSB9IH0s
CiAgICAgeyAiYXR0cmlidXRlIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgQ3VzdG9tQWNjZXNz
b3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0T2JqQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oMCkgfSB9LAogICAgIHsgImF0dHJpYnV0ZVdp
dGhSZXNlcnZlZEVudW1UeXBlIiwgRG9udERlbGV0ZSB8IEN1c3RvbUFjY2Vzc29yLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKSwgKGludHB0cl90KSBzdGF0
aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0T2JqQXR0cmli
dXRlV2l0aFJlc2VydmVkRW51bVR5cGUpIH0gfSwKKyAgICB7ICJwdXRGb3J3YXJkc0F0dHJpYnV0
ZSIsIERvbnREZWxldGUgfCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpQdXRGb3J3
YXJkc0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQ
dXRWYWx1ZUZ1bmM+KHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKSB9IH0sCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjEpCiAgICAgeyAiQ09ORElUSU9OQUxfQ09OU1QiLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcp
KDApIH0gfSwKICNlbHNlCkBAIC0xOTQyLDYgKzE5NDYsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCoKIH0KIAogCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVO
VVNFRF9QQVJBTShzbG90QmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CisgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewor
ICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkp
CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAi
VGVzdE9iaiIsICJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpOworICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInB1dEZvcndhcmRzQXR0cmlidXRlIik7
CisgICAgfQorICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihpbXBsLnB1dEZvcndhcmRzQXR0cmlidXRlKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7Cit9CisKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIEpTVGVzdE9ialByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihiYXNlVmFsdWUpOwpAQCAtMzA1Nyw2ICsz
MDc4LDI5IEBAIHZvaWQgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iCiB9CiAKIAordm9pZCBzZXRKU1Rlc3RP
YmpQdXRGb3J3YXJkc0F0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3sKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKKyAgICAgICAgaWYgKGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQor
ICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIs
ICJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aHJv
d1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhdXRvKiBmb3J3YXJkZWRJbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpLnB1dEZvcndhcmRzQXR0cmlidXRlKCk7CisgICAgaWYgKCFmb3J3YXJk
ZWRJbXBsKQorICAgICAgICByZXR1cm47CisgICAgYXV0byYgaW1wbCA9ICpmb3J3YXJkZWRJbXBs
OworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBy
ZXR1cm47CisgICAgaW1wbC5zZXROYW1lKG5hdGl2ZVZhbHVlKTsKK30KKworCiBKU1ZhbHVlIEpT
VGVzdE9iajo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogewogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RPYmpDb25zdHJ1Y3Rv
cj4odm0sIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwpAQCAtMzMw
OSw3ICszMzUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmcKIAogICAgIFN0cmluZyBlbnVt
QXJnOwogICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBl
bnVtQXJnID0gU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiRW51bVZhbHVlMSIpKTsKKyAgICAgICAgZW51
bUFyZyA9IEFTQ0lJTGl0ZXJhbCgiRW51bVZhbHVlMSIpOwogICAgIGVsc2UgewogICAgICAgICBl
bnVtQXJnID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dE5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3ROb2RlLmgKaW5kZXggMGE3ZGJhNTAyYjM5MzgwZjUyOWQ3NmM5YTBlM2JhZDIxYTI0MGQxNy4u
ZmU0OWJkNWMwYzE3OWQxODRiZDA0NjMxMTdiOGFkM2M3YWU1MTlmZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5vZGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Tm9kZS5o
CkBAIC0yNiw2ICsyNiw5IEBACiAKICNpbXBvcnQgPFdlYkNvcmUvRE9NTm9kZS5oPgogCitAY2xh
c3MgTlNTdHJpbmc7CisKIFdFQktJVF9DTEFTU19BVkFJTEFCTEVfTUFDKDk4NzZfNSkKIFdFQkNP
UkVfRVhQT1JUIEBpbnRlcmZhY2UgRE9NVGVzdE5vZGUgOiBET01Ob2RlCitAcHJvcGVydHkgKGNv
cHkpIE5TU3RyaW5nICpuYW1lOwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5vZGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Tm9kZS5tbQppbmRleCAyOTAyMWU4YTcz
MjIzYmRhODY2YjVjMmQ0YTM5YjE3OTM3ZDA5YTEwLi40OGUxNDRiMTM1MTE2NjQ4NTU4ODg5OTJi
MTkzMzc4NjdhNTcxNzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvT2JqQy9ET01UZXN0Tm9kZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Tm9kZS5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2lt
cG9ydCAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCiAjaW1wb3J0ICJUZXN0Tm9kZS5oIgogI2lt
cG9ydCAiVGhyZWFkQ2hlY2suaCIKKyNpbXBvcnQgIlVSTC5oIgogI2ltcG9ydCAiV2ViU2NyaXB0
T2JqZWN0UHJpdmF0ZS5oIgogI2ltcG9ydCA8d3RmL0dldFB0ci5oPgogCkBAIC00Miw2ICs0Mywx
OCBAQAogCiBAaW1wbGVtZW50YXRpb24gRE9NVGVzdE5vZGUKIAorLSAoTlNTdHJpbmcgKiluYW1l
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVy
biBJTVBMLT5uYW1lKCk7Cit9CisKKy0gKHZvaWQpc2V0TmFtZTooTlNTdHJpbmcgKiluZXdOYW1l
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwt
PnNldE5hbWUobmV3TmFtZSk7Cit9CisKIEBlbmQKIAogV2ViQ29yZTo6VGVzdE5vZGUqIGNvcmUo
RE9NVGVzdE5vZGUgKndyYXBwZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKaW5kZXggYmQ3MmRkZmUwYWNiNTFkNDdl
YmI1N2Q2ZGNhNDE2NDhlMDBlNDBjZi4uZTNlNWMxNjZjNmY5ODIxM2RjMDRkYjVkNDYzNjBkMDIw
ZDZiODA2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RPYmouaApAQCAtMTIyLDYgKzEyMiw3IEBAIFdFQkNPUkVfRVhQT1JU
IEBpbnRlcmZhY2UgRE9NVGVzdE9iaiA6IERPTU9iamVjdAogQHByb3BlcnR5IGludCBudWxsYWJs
ZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZTsKIEBwcm9wZXJ0eSBpbnQgbnVsbGFibGVTdHJpbmdWYWx1
ZTsKIEBwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICphdHRyaWJ1dGU7CitAcHJv
cGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIERPTVRlc3ROb2RlICpwdXRGb3J3YXJkc0F0dHJpYnV0
ZTsKIAogLSAodm9pZCl2b2lkTWV0aG9kOwogLSAodm9pZCl2b2lkTWV0aG9kV2l0aEFyZ3M6KGlu
dClsb25nQXJnIHN0ckFyZzooTlNTdHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICop
b2JqQXJnOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RPYmoubW0KaW5kZXggY2RkMTk2YWU2YTI5NTRkODQ4ZWI5MGUyNjQzOTE5
MWFjNTY4ZGJjYS4uMTFlMDY0M2I3NjhjOTU2ZmFiMzdkYTcxNGMxMTA5YTRiMGEyMjNlZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dE9iai5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0T2JqLm1tCkBAIC04MzAsNiArODMwLDEyIEBAIC0gKE5TU3RyaW5nICopYXR0cmlidXRl
CiAgICAgcmV0dXJuIElNUEwtPmF0dHJpYnV0ZSgpOwogfQogCistIChET01UZXN0Tm9kZSAqKXB1
dEZvcndhcmRzQXR0cmlidXRlCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIHJldHVybiBraXQoV1RGOjpnZXRQdHIoSU1QTC0+cHV0Rm9yd2FyZHNBdHRy
aWJ1dGUoKSkpOworfQorCiAtICh2b2lkKXZvaWRNZXRob2QKIHsKICAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAppbmRleCBmMjNiYTY3MTYwMDI5YTc5NTE3ZWUyMTNj
ZjA3OGZjY2MzNTNmNDJjLi4yMGUyMGExNWNhMmZlYWUzMzQwNGQ5NjcyMGY5MmM5MjhjMjk3ODgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5v
ZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9k
ZS5pZGwKQEAgLTIyLDUgKzIyLDYgQEAKICAgICBFdmVudFRhcmdldCwKICAgICBDb25zdHJ1Y3Rv
ciwKIF0gaW50ZXJmYWNlIFRlc3ROb2RlIDogTm9kZSB7CisgICAgYXR0cmlidXRlIERPTVN0cmlu
ZyBuYW1lOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RPYmouaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPYmouaWRsCmluZGV4IDQ1NzFiNmQxZDU2YjY3Njk2NTA4MTMyM2VhNDJiYzViOTE0ZWEz
MWUuLjM1YzA5Y2Q2YTZmMjI2NmU3YjFhN2NkMWQwZjBmYjU1N2RhOWQ5YTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTI5OSw2
ICsyOTksOSBAQCBlbnVtIF9vcHRpb25hbCB7ICIiLCAiT3B0aW9uYWxWYWx1ZTEiLCAiT3B0aW9u
YWxWYWx1ZTIiLCAiT3B0aW9uYWxWYWx1ZTMiIH07CiAgICAgUHJvbWlzZSB0ZXN0UHJvbWlzZUZ1
bmN0aW9uV2l0aEZsb2F0QXJndW1lbnQoZmxvYXQgYSk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0g
UHJvbWlzZSB0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbigpOwogICAgIFByb21pc2Ug
dGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50KG9wdGlvbmFsIGxvbmcg
YSk7CisKKyAgICAvLyBQdXRGb3J3YXJkcworICAgIFtQdXRGb3J3YXJkcz1uYW1lXSByZWFkb25s
eSBhdHRyaWJ1dGUgVGVzdE5vZGUgcHV0Rm9yd2FyZHNBdHRyaWJ1dGU7CiB9OwogCiAvLyBUaGUg
Zm9sbG93aW5nIGNvbW1lbnQgc2hvdWxkIG5vdCBnZW5lcmF0ZSBhbnkgY29kZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaWRsCmluZGV4IGRhMGY3MmNhYWQwYTg3YjU3OGJmZDRjZDdlNDg0NWE1NmFjYmFk
MmEuLjFhYzljMDMwN2RlMjQxNzM4MDY3MmZiNWZiYzM3N2VmN2MxOGJkY2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmlkbApAQCAtMTcwLDcgKzE3MCw3IEBACiAgICAgTm9kZUxpc3QgZ2V0RWxlbWVu
dHNCeU5hbWUoW0RlZmF1bHQ9VW5kZWZpbmVkLEF0b21pY1N0cmluZ10gb3B0aW9uYWwgRE9NU3Ry
aW5nIGVsZW1lbnROYW1lKTsKIAogI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkgJiYg
TEFOR1VBR0VfSkFWQVNDUklQVAotICAgIFtDdXN0b21TZXR0ZXIsIFVuZm9yZ2VhYmxlXSBhdHRy
aWJ1dGUgTG9jYXRpb24gbG9jYXRpb247CisgICAgW1B1dEZvcndhcmRzPWhyZWYsIFVuZm9yZ2Vh
YmxlXSByZWFkb25seSBhdHRyaWJ1dGUgTG9jYXRpb24gbG9jYXRpb247CiAjZW5kaWYKIAogICAg
IC8vIElFIGV4dGVuc2lvbnMK
</data>

          </attachment>
      

    </bug>

</bugzilla>