<?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>168293</bug_id>
          
          <creation_ts>2017-02-14 00:53:40 -0800</creation_ts>
          <short_desc>[WebIDL] Improve serializer = { inherit }</short_desc>
          <delta_ts>2017-02-14 23:13:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>168086</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>joepeck</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1276637</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-02-14 00:53:40 -0800</bug_when>
    <thetext>This improves, and fixes serializer = { inherit } now that I have a class where I can test it.

Given:

&gt;    interface TestSerialization {
&gt;        attribute long a;
&gt;        attribute long b;
&gt;        attribute long c;
&gt;        serializer = { attribute };
&gt;    };
&gt;
&gt;    interface TestSerializationFinal : TestSerialization {
&gt;        attribute long x;
&gt;        attribute long y;
&gt;        serializer = { inherit, attribute };
&gt;    };

The existing code would have compiler errors for TestSerializationFinal trying to access static inline functions that only exist inside of TestSerialization.cpp when trying to generate the toJSON serializer for TestSerializationFinal.

I will change serializer generation to create an exposed serialize method which does what we do now:

&gt;    class JSTestSerialization : public JSDOMWrapper&lt;TestSerialization&gt; {
&gt;    public:
&gt;        ...
&gt;        static JSC::JSObject* serialize(JSC::ExecState*, JSTestSerialization* thisObject, JSC::ThrowScope&amp;);
&gt;        ...
&gt;    };

Which any subclass (a serializer with {inherit}) can use to get the parent&apos;s serialization:

&gt;    JSC::JSObject* JSTestSerializationInherit::serialize(ExecState* state, JSTestSerializationInherit* thisObject, ThrowScope&amp; throwScope)
&gt;    {
&gt;        auto&amp; vm = state-&gt;vm();
&gt;        auto* result = JSTestSerialization::serialize(state, thisObject, throwScope);
&gt;
&gt;        auto inheritLongAttributeValue = jsTestSerializationInheritX(*state, *thisObject, throwScope);
&gt;        ASSERT(!throwScope.exception());
&gt;        result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;x&quot;), inheritLongAttributeValue);
&gt;
&gt;        auto inheritLongAttributeValue = jsTestSerializationInheritY(*state, *thisObject, throwScope);
&gt;        ASSERT(!throwScope.exception());
&gt;        result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;y&quot;), inheritLongAttributeValue);
&gt;
&gt;        return result;
&gt;    }

This is way better (each class only needs to generate for its own accessors) and more importantly it actually works!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276638</commentid>
    <comment_count>1</comment_count>
      <attachid>301474</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-02-14 00:58:56 -0800</bug_when>
    <thetext>Created attachment 301474
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277067</commentid>
    <comment_count>2</comment_count>
      <attachid>301474</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-02-14 22:04:10 -0800</bug_when>
    <thetext>Comment on attachment 301474
[PATCH] Proposed Fix

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1938
&gt; +    push(@headerContent, &quot;    static JSC::JSObject* serialize(JSC::ExecState*, JS${interfaceName}* thisObject, JSC::ThrowScope&amp;);\n&quot;) if $interface-&gt;serializable;

Can we pass ExecState&amp; and JSXX&amp; instead of pointers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277073</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-02-14 22:47:49 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 301474 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=301474&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1938
&gt; &gt; +    push(@headerContent, &quot;    static JSC::JSObject* serialize(JSC::ExecState*, JS${interfaceName}* thisObject, JSC::ThrowScope&amp;);\n&quot;) if $interface-&gt;serializable;
&gt; 
&gt; Can we pass ExecState&amp; and JSXX&amp; instead of pointers?

Hmm, probably. I&apos;ll look at that in a follow-up if I have time. This uses whatever the existing bindings code expects, so I&apos;m going to keep it consistent for now.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277083</commentid>
    <comment_count>4</comment_count>
      <attachid>301474</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-14 23:13:44 -0800</bug_when>
    <thetext>Comment on attachment 301474
[PATCH] Proposed Fix

Clearing flags on attachment: 301474

Committed r212344: &lt;http://trac.webkit.org/changeset/212344&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277084</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-14 23:13:50 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301474</attachid>
            <date>2017-02-14 00:58:56 -0800</date>
            <delta_ts>2017-02-14 23:13:44 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>idl-1.patch</filename>
            <type>text/plain</type>
            <size>22221</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5MTc3MWFlZDJjYS4uOGRhZDMyNDIwNjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MyBAQAorMjAxNy0wMi0xNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUu
Y29tPgorCisgICAgICAgIFtXZWJJRExdIEltcHJvdmUgc2VyaWFsaXplciA9IHsgaW5oZXJpdCB9
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjgyOTMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIp
OgorICAgICAgICBFeHBvc2UgYSBzZXJpYWxpemUoKSBtZXRob2Qgb24gdGhlIGludGVyZmFjZS4K
KworICAgICAgICAoR2VuZXJhdGVTZXJpYWxpemVyRnVuY3Rpb24pOgorICAgICAgICAoR2VuZXJh
dGVTZXJpYWxpemVyQXR0cmlidXRlc0ZvckludGVyZmFjZSk6IERlbGV0ZWQuCisgICAgICAgIFN1
YmNsYXNzZXMgdGhhdCBoYXZlIGBzZXJpYWxpemVyID0geyBpbmhlcml0IH1gIGNhbiB1c2UKKyAg
ICAgICAgdGhlaXIgcGFyZW50J3Mgc2VyaWFsaXplKCkgbWV0aG9kIHRvIGdldCB0aGUgaW5pdGlh
bCBvYmplY3QuCisgICAgICAgIFdlIGNhbiBub3cgY29sbGFwc2UgZXZlcnl0aGluZyBiYWNrIGlu
dG8gYSBzaW5nbGUgZnVuY3Rpb24KKyAgICAgICAgYmVjYXVzZSB3ZSBvbmx5IGdlbmVyYXRlIGNv
ZGUgZm9yIG91ciBvd24gYXR0cmlidXRlcy4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGU6OnNl
cmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25U
b0pTT05DYWxsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b2RlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OnNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcik6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdFNlcmlhbGl6YXRpb246OnNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05DYWxsZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90
b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Lmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90
b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaDoKKyAgICAgICAgVXBkYXRl
ZCByZXN1bHRzLgorCiAyMDE3LTAyLTEyICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+
CiAKICAgICAgICAgVHJpZWQgdG8gZml4IFVTRShBUFBMRV9JTlRFUk5BTF9TREspIGJ1aWxkcyBh
ZnRlciByMjEyMjExLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQppbmRleCA0YmM5MTFhNzA3ZC4uMWQ5NGViNDVlOWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBA
IC0xOTM0LDYgKzE5MzQsOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldE5hbWVkQ29uc3RydWN0b3Io
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e05hbWVkQ29uc3RydWN0b3J9OwogICAgIH0KIAorICAgICMgU2VyaWFs
aXplciBmdW5jdGlvbi4KKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpFeGVjU3RhdGUqLCBKUyR7aW50ZXJmYWNlTmFtZX0q
IHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpO1xuIikgaWYgJGludGVyZmFjZS0+c2VyaWFs
aXphYmxlOworCiAgICAgbXkgJG51bUN1c3RvbUZ1bmN0aW9ucyA9IDA7CiAgICAgbXkgJG51bUN1
c3RvbUF0dHJpYnV0ZXMgPSAwOwogCkBAIC00Mzk0LDQ2ICs0Mzk3LDE1IEBAIHN1YiBHZW5lcmF0
ZVNlcmlhbGl6ZXJGdW5jdGlvbgogCiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNl
LT50eXBlLT5uYW1lOwogCi0gICAgbXkgJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUgPSAidG9KU09O
IjsKLSAgICBteSAkc2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9y
LT5XS19sY2ZpcnN0KCRjbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9uIiAuICRjb2RlR2Vu
ZXJhdG9yLT5XS191Y2ZpcnN0KCRzZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsKLQotICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCI8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPiIpOwotICAgIHB1c2go
QGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke3NlcmlhbGl6ZXJO
YXRpdmVGdW5jdGlvbk5hbWV9Q2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTJGludGVyZmFjZU5h
bWUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSlcbiIpOwotICAgIHB1
c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1
dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTtcbiIpOwotICAgIHB1c2go
QGltcGxDb250ZW50LCAiXG4iKTsKLQotICAgIEdlbmVyYXRlU2VyaWFsaXplckF0dHJpYnV0ZXNG
b3JJbnRlcmZhY2UoJGludGVyZmFjZSwgJGNsYXNzTmFtZSk7Ci0KLSAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKLSAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKLSAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtzZXJp
YWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlKVxuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKUyRpbnRlcmZhY2VOYW1lPjo6Y2FsbE9wZXJhdGlvbjwke3Nlcmlh
bGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9Q2FsbGVyPihzdGF0ZSwgXCIkc2VyaWFsaXplckZ1bmN0
aW9uTmFtZVwiKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICJcbiIpOwotfQotCi1zdWIgR2VuZXJhdGVTZXJpYWxpemVyQXR0cmli
dXRlc0ZvckludGVyZmFjZQotewotICAgIG15ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBf
OwotCi0gICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT50eXBlLT5uYW1lOwotCisg
ICAgbXkgJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2UgPSAwOwogICAgIGlmICgkaW50ZXJmYWNl
LT5zZXJpYWxpemFibGUtPmhhc0luaGVyaXQpIHsKLSAgICAgICAgbXkgJHBhcmVudFNlcmlhbGl6
ZXJJbnRlcmZhY2UgPSAwOwogICAgICAgICAkY29kZUdlbmVyYXRvci0+Rm9yQWxsUGFyZW50cygk
aW50ZXJmYWNlLCBzdWIgewogICAgICAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9IHNoaWZ0
OwogICAgICAgICAgICAgaWYgKCRwYXJlbnRJbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSAmJiAhJHBh
cmVudFNlcmlhbGl6ZXJJbnRlcmZhY2UpIHsKICAgICAgICAgICAgICAgICAkcGFyZW50U2VyaWFs
aXplckludGVyZmFjZSA9ICRwYXJlbnRJbnRlcmZhY2U7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0sIDApOwotCiAgICAgICAgIGRpZSAiRmFpbGVkIHRvIGZpbmQgcGFyZW50IGludGVyZmFjZSB3
aXRoIFwic2VyaWFsaXplclwiIGZvciBcImluaGVyaXRcIiBzZXJpYWxpemVyIGluICRpbnRlcmZh
Y2VOYW1lXG4iIGlmICEkcGFyZW50U2VyaWFsaXplckludGVyZmFjZTsKLQotICAgICAgICBHZW5l
cmF0ZVNlcmlhbGl6ZXJBdHRyaWJ1dGVzRm9ySW50ZXJmYWNlKCRwYXJlbnRTZXJpYWxpemVySW50
ZXJmYWNlLCAkY2xhc3NOYW1lKTsKICAgICB9CiAKICAgICBteSBAc2VyaWFsaXplZEF0dHJpYnV0
ZXMgPSAoKTsKQEAgLTQ0NTEsMTkgKzQ0MjMsNDkgQEAgc3ViIEdlbmVyYXRlU2VyaWFsaXplckF0
dHJpYnV0ZXNGb3JJbnRlcmZhY2UKICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBkaWUgIkZhaWxlZCB0byBmaW5kIFwic2Vy
aWFsaXplclwiIGF0dHJpYnV0ZSBcIiRhdHRyaWJ1dGVOYW1lXCIgaW4gJGludGVyZmFjZU5hbWVc
biIgaWYgISRmb3VuZEF0dHJpYnV0ZTsKICAgICB9CiAKKyAgICBteSAkc2VyaWFsaXplckZ1bmN0
aW9uTmFtZSA9ICJ0b0pTT04iOworICAgIG15ICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1l
ID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAiUHJvdG90eXBlRnVu
Y3Rpb24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJHNlcmlhbGl6ZXJGdW5jdGlvbk5h
bWUpOworCisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1lL09iamVjdENvbnN0cnVjdG9y
Lmg+Iik7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNPYmplY3QqIEpTJHtpbnRl
cmZhY2VOYW1lfTo6c2VyaWFsaXplKEV4ZWNTdGF0ZSogc3RhdGUsIEpTJHtpbnRlcmZhY2VOYW1l
fSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSlcbiIpOworICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgdm0g
PSBzdGF0ZS0+dm0oKTtcbiIpOworCisgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+
aGFzSW5oZXJpdCkgeworICAgICAgICBteSAkcGFyZW50U2VyaWFsaXplckludGVyZmFjZU5hbWUg
PSAkcGFyZW50U2VyaWFsaXplckludGVyZmFjZS0+dHlwZS0+bmFtZTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgYXV0byogcmVzdWx0ID0gSlMke3BhcmVudFNlcmlhbGl6ZXJJbnRl
cmZhY2VOYW1lfTo6c2VyaWFsaXplKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTtcbiIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTtcbiIpOworICAgIH0KKyAgICBwdXNo
KEBpbXBsQ29udGVudCwgIlxuIik7CisKICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEBzZXJp
YWxpemVkQXR0cmlidXRlcykgewogICAgICAgICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7
Ci0KICAgICAgICAgbXkgJGdldEZ1bmN0aW9uTmFtZSA9IEdldEF0dHJpYnV0ZUdldHRlck5hbWUo
JGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGF0dHJpYnV0ZSk7CiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGF1dG8gJHtuYW1lfVZhbHVlID0gJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVy
KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpO1xuIik7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7XG4iKTsKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1WYWx1ZSk7XG4iKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwogICAgIH0KKworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIn1cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKworICAgIHB1c2goQGlt
cGxDb250ZW50LCAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke3NlcmlhbGl6ZXJOYXRp
dmVGdW5jdGlvbk5hbWV9Q2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTJHtpbnRlcmZhY2VOYW1l
fSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTJHtpbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKHN0YXRlLCB0
aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1c
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rp
b25OYW1lfShFeGVjU3RhdGUqIHN0YXRlKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
UyRpbnRlcmZhY2VOYW1lPjo6Y2FsbE9wZXJhdGlvbjwke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlv
bk5hbWV9Q2FsbGVyPihzdGF0ZSwgXCIkc2VyaWFsaXplckZ1bmN0aW9uTmFtZVwiKTtcbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJc
biIpOwogfQogCiBzdWIgR2VuZXJhdGVDYWxsV2l0aFVzaW5nUmVmZXJlbmNlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
CmluZGV4IGNkMWJiMTYwYTI3Li4yY2M4MWQ3ZDNmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMzM3LDcg
KzMzNyw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJv
dG90eXBlRnVuY3Rpb25Gb3JFYWNoKEpTQzo6RXhlY1N0CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0Tm9kZT46OmNhbGxPcGVyYXRpb248anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9u
Rm9yRWFjaENhbGxlcj4oc3RhdGUsICJmb3JFYWNoIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQ2FsbGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE5vZGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK0pTQzo6SlNPYmplY3QqIEpTVGVzdE5vZGU6OnNlcmlhbGl6ZShFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIGF1dG8mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogcmVzdWx0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3Qoc3RhdGUpOwpAQCAtMzQ2LDcgKzM0NiwxMiBAQCBzdGF0aWMgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcihF
eGVjU3RhdGUqCiAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIG5h
bWVWYWx1ZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2Rl
UHJvdG90eXBlRnVuY3Rpb25Ub0pTT05DYWxsZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9k
ZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Tm9kZTo6c2VyaWFsaXplKHN0YXRlLCB0aGlzT2JqZWN0
LCB0aHJvd1Njb3BlKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAppbmRl
eCBlZDhhMzQ3YzY0ZS4uNTJiZGRiYzYxNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaApAQCAtNDcsNiArNDcsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihK
U0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBzZXJpYWxpemUoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKIAogICAgIFRlc3ROb2RlJiB3cmFwcGVkKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKaW5kZXggMTU3NjAyMmZjZDYuLjViNTM5NGZiNDkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAt
ODU3OCw3ICs4NTc4LDcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdDYWxsZXIoSlNDOjoKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRvSlM8SURMVVNWU3RyaW5nPigqc3RhdGUsIGltcGwuc3RyaW5naWZpZXJB
dHRyaWJ1dGUoKSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQ2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorSlNDOjpKU09iamVj
dCogSlNUZXN0T2JqOjpzZXJpYWxpemUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIGF1dG8mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUpOwpA
QCAtODU5OSw3ICs4NTk5LDEyIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05DYWxsZXIoRXhlY1N0YXRlKiBzCiAgICAgQVNTRVJU
KCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJsb25nQXR0ciIpLCBsb25nQXR0clZhbHVlKTsKIAot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVG9KU09OQ2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNUZXN0T2JqOjpzZXJpYWxpemUoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCmluZGV4IDZiOWQ5NmU1OTc4Li42Yzdi
ZjA0NjZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouaApAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51
bWVyYXRpb25Nb2RlKCkpOwogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3Io
SlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpK
U09iamVjdCogc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmKTsKICAgICBtdXRhYmxlIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6
VW5rbm93bj4gbV9jYWNoZWRBdHRyaWJ1dGUxOwogICAgIG11dGFibGUgSlNDOjpXcml0ZUJhcnJp
ZXI8SlNDOjpVbmtub3duPiBtX2NhY2hlZEF0dHJpYnV0ZTI7CiAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbi5jcHAKaW5kZXggNjk0OTIwYzRjYWEuLmI0OTE4MDczOWRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6YXRpb24uY3BwCkBAIC00MDAsNyArNDAwLDcgQEAgSlNWYWx1ZSBKU1Rlc3RTZXJp
YWxpemF0aW9uOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWwKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0U2VyaWFsaXphdGlvbkNv
bnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RTZXJpYWxpemF0aW9uKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitKU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uOjpzZXJpYWxpemUoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHJlc3Vs
dCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTsKQEAgLTQyNSw3ICs0MjUsMTIgQEAgc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVu
Y3Rpb25Ub0pTT05DYWxsZXIoRXgKICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
InNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIpLCBzaXh0aFR5cGVkZWZBdHRyaWJ1dGVWYWx1ZSk7CiAK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJv
dG90eXBlRnVuY3Rpb25Ub0pTT05DYWxsZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFs
aXphdGlvbiogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbjo6c2VyaWFsaXplKHN0
YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNT
dGF0ZSogc3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uaAppbmRleCA2MTE0YjdmNjUwNi4u
NmEyOTRiNWExMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uaApAQCAtNDksNiArNDksNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3Rv
cihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxpemF0aW9u
KiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKTsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RT
ZXJpYWxpemF0aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVz
dFNlcmlhbGl6YXRpb24+JiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0LmNwcAppbmRleCAyZmE4NTE2YTQxZi4uYmI1MTgxMDg1ZjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcApAQCAtMjAxLDM2ICsyMDEsMjEgQEAgSlNWYWx1
ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25z
dCBKU0dsb2JhbE9iamVjdCoKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQ2Fs
bGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KiB0aGlzT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitKU0M6OkpTT2JqZWN0KiBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdDo6c2VyaWFsaXplKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIGF1dG8mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byogcmVzdWx0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3Qoc3RhdGUpOwotCi0gICAgYXV0byBmaXJzdFN0cmluZ0F0dHJpYnV0ZVZh
bHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKCpzdGF0
ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOwotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNl
cHRpb24oKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKSwgZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1
ZSk7Ci0KLSAgICBhdXRvIHNlY29uZExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6
YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93
U2NvcGUpOwotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2Vjb25kTG9uZ0F0
dHJpYnV0ZSIpLCBzZWNvbmRMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBmb3VydGhV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Gb3Vy
dGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwg
dGhyb3dTY29wZSk7Ci0gICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmb3VydGhV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKSwgZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0
cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVz
dFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVj
dCwgdGhyb3dTY29wZSk7Ci0gICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaWZ0
aExvbmdBdHRyaWJ1dGUiKSwgZmlmdGhMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBz
aXh0aFR5cGVkZWZBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVk
ZWZBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAg
QVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwg
c2l4dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUpOworICAgIGF1dG8qIHJlc3VsdCA9IEpTVGVzdFNl
cmlhbGl6YXRpb246OnNlcmlhbGl6ZShzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAK
ICAgICBhdXRvIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRo
cm93U2NvcGUpOwogICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5oZXJpdExv
bmdBdHRyaWJ1dGUiKSwgaW5oZXJpdExvbmdBdHRyaWJ1dGVWYWx1ZSk7CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlw
ZUZ1bmN0aW9uVG9KU09OQ2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0KiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCit7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c2Vy
aWFsaXplKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7CiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGVGdW5j
dGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQuaAppbmRleCA4ZGUxZGIyN2NjNy4uYjhjZjQ5ZGMyYzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oCkBAIC00Nyw2ICs0Nyw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBj
b25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNl
cmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KiB0aGlz
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKTsKICAgICBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQm
IHdyYXBwZWQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdCY+KEJhc2U6OndyYXBwZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAKaW5kZXggNDFhZmY0MjAzZWIuLjdm
MGE4MmI2YzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwuY3BwCkBAIC0yMzksNDAgKzIzOSwyMSBAQCBKU1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWw6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYgog
ICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQ2FsbGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqIHRoaXNPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK0pTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIGF1dG8mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byogcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUpOwotCi0gICAgYXV0byBmaXJzdFN0cmluZ0F0dHJp
YnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVy
KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOwotICAgIEFTU0VSVCghdGhyb3dTY29w
ZS5leGNlcHRpb24oKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKSwgZmlyc3RTdHJpbmdBdHRyaWJ1
dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHNlY29uZExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNl
cmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3Qs
IHRocm93U2NvcGUpOwotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Ci0gICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2Vjb25k
TG9uZ0F0dHJpYnV0ZSIpLCBzZWNvbmRMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBm
b3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRp
b25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09i
amVjdCwgdGhyb3dTY29wZSk7Ci0gICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsK
LSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJm
b3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKSwgZm91cnRoVW5yZXN0cmljdGVkRG91
YmxlQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSA9
IGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhp
c09iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJmaWZ0aExvbmdBdHRyaWJ1dGUiKSwgZmlmdGhMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAg
YXV0byBzaXh0aFR5cGVkZWZBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0
aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7
Ci0gICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1
dGUiKSwgc2l4dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBpbmhlcml0TG9u
Z0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0
dHJpYnV0ZUdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICBBU1NF
UlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImluaGVyaXRMb25nQXR0cmlidXRlIiksIGluaGVy
aXRMb25nQXR0cmlidXRlVmFsdWUpOworICAgIGF1dG8qIHJlc3VsdCA9IEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0OjpzZXJpYWxpemUoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOwog
CiAgICAgYXV0byBmaW5hbExvbmdBdHRyaWJ1dGVCYXJWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIoKnN0YXRlLCAqdGhpc09i
amVjdCwgdGhyb3dTY29wZSk7CiAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJm
aW5hbExvbmdBdHRyaWJ1dGVCYXIiKSwgZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUpOwogCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQ2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZShzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dT
Y29wZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgKaW5kZXgg
NjI4YmY3ODQxM2MuLjMyNTlkYzE3ZjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXpl
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogdGhpc09i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJik7CiAgICAgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwmIHdyYXBwZWQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJj4oQmFzZTo6d3JhcHBlZCgpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>