<?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>71756</bug_id>
          
          <creation_ts>2011-11-07 18:03:08 -0800</creation_ts>
          <short_desc>CodeGeneratorV8.pm can generate a NamedConstructor</short_desc>
          <delta_ts>2011-11-08 17:46:09 -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>DOM</component>
          <version>528+ (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>71093</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>dominicc</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>497643</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-07 18:03:08 -0800</bug_when>
    <thetext>IDLParser.pm should parse [NamedConstructor] IDL and CodeGeneratorV8.pm should generate a NamedConstructor. 
The spec: http://www.w3.org/TR/WebIDL/#NamedConstructor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498158</commentid>
    <comment_count>1</comment_count>
      <attachid>114098</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-08 09:46:11 -0800</bug_when>
    <thetext>Created attachment 114098
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498161</commentid>
    <comment_count>2</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-08 09:48:54 -0800</bug_when>
    <thetext>I guess that we can ignore style errors in this patch, since their cause is in CodeGeneratorGObject.pm and CodeGeneratorObjC.pm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498164</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-08 09:50:24 -0800</bug_when>
    <thetext>Attachment 114098 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/ObjC/DOMTestNamedConstructorInternal.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:21:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:22:  Found WebCore config.h after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:24:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:32:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:120:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:145:  Extra space between return and WEBKIT_DOM_TEST_NAMED_CONSTRUCTOR  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h:21:  #ifndef header guard has wrong style, please use: WebKitDOMTestNamedConstructorPrivate_h  [build/header_guard] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 13 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498509</commentid>
    <comment_count>4</comment_count>
      <attachid>114098</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-08 16:21:41 -0800</bug_when>
    <thetext>Comment on attachment 114098
Patch

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

I feel slightly like we&apos;re copying and pasting code in the code generator, but I think it&apos;s ok.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1659
&gt; +    if (!document)
&gt; +        return throwError(&quot;${implClassName} constructor associated document is unavailable&quot;, V8Proxy::ReferenceError);

This can&apos;t occur.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1711
&gt; +    obj-&gt;ref();

Yuck.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1719
&gt; +    if ($raisesExceptions) {
&gt; +        push(@implContent, &quot;  fail:\n&quot;);
&gt; +        push(@implContent, &quot;    return throwError(ec);\n&quot;);
&gt; +    }

Why do we need goto?  There only seems to be one goto.  It seems like we should just put this code there.

&gt; Source/WebCore/bindings/scripts/IDLParser.pm:155
&gt; +            if ($name eq &quot;NamedConstructor&quot;) {

These regexps are kind of mysterious to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498513</commentid>
    <comment_count>5</comment_count>
      <attachid>114098</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-08 16:42:04 -0800</bug_when>
    <thetext>Comment on attachment 114098
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1659
&gt;&gt; +        return throwError(&quot;${implClassName} constructor associated document is unavailable&quot;, V8Proxy::ReferenceError);
&gt; 
&gt; This can&apos;t occur.

OK, I will remove this. (But I don&apos;t know if it cannot occur. Current HTMLXXXXElementConstructor.cpp has this check.)

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1711
&gt;&gt; +    obj-&gt;ref();
&gt; 
&gt; Yuck.

What do you mean?

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1719
&gt;&gt; +    }
&gt; 
&gt; Why do we need goto?  There only seems to be one goto.  It seems like we should just put this code there.

GenerateNamedConstructorCallback calls GenerateParamtersCheck, and GenerateParamtersCheck can generate goto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498525</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-08 16:51:32 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 114098 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114098&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1659
&gt; &gt;&gt; +        return throwError(&quot;${implClassName} constructor associated document is unavailable&quot;, V8Proxy::ReferenceError);
&gt; &gt; 
&gt; &gt; This can&apos;t occur.
&gt; 
&gt; OK, I will remove this. (But I don&apos;t know if it cannot occur. Current HTMLXXXXElementConstructor.cpp has this check.)

It used to be possible in the distant past, but not anymore.

&gt; &gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1711
&gt; &gt;&gt; +    obj-&gt;ref();
&gt; &gt; 
&gt; &gt; Yuck.
&gt; 
&gt; What do you mean?

We try to avoid manual reference counting whenever possible.  I understand that this is how the hand-written version of this code used to work.

&gt; &gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1719
&gt; &gt;&gt; +    }
&gt; &gt; 
&gt; &gt; Why do we need goto?  There only seems to be one goto.  It seems like we should just put this code there.
&gt; 
&gt; GenerateNamedConstructorCallback calls GenerateParamtersCheck, and GenerateParamtersCheck can generate goto.

I see.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498543</commentid>
    <comment_count>7</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-08 17:15:14 -0800</bug_when>
    <thetext>Committed r99641: &lt;http://trac.webkit.org/changeset/99641&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498545</commentid>
    <comment_count>8</comment_count>
      <attachid>114098</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-08 17:17:36 -0800</bug_when>
    <thetext>Comment on attachment 114098
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1659
&gt;&gt;&gt;&gt; +        return throwError(&quot;${implClassName} constructor associated document is unavailable&quot;, V8Proxy::ReferenceError);
&gt;&gt;&gt; 
&gt;&gt;&gt; This can&apos;t occur.
&gt;&gt; 
&gt;&gt; OK, I will remove this. (But I don&apos;t know if it cannot occur. Current HTMLXXXXElementConstructor.cpp has this check.)
&gt; 
&gt; It used to be possible in the distant past, but not anymore.

I got it, thanks. Removed it.

I committed this patch manually to avoid the style error check.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114098</attachid>
            <date>2011-11-08 09:46:11 -0800</date>
            <delta_ts>2011-11-08 17:17:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71756-20111108094610.patch</filename>
            <type>text/plain</type>
            <size>71060</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk1NzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlMzAxZDM0ZGI5MjFiOThj
YmI1N2QzZTVhMzRhYmQwNDA5MWM0ODViLi44MzE0NDVkNTM2ZjgyNDc4ODIxOGUxNjk5MTZlMTIz
MWFlMDZlZjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAwIEBACisyMDExLTExLTA4ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBDb2RlR2VuZXJhdG9y
VjgucG0gY2FuIGdlbmVyYXRlIGEgTmFtZWRDb25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE3NTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIElETFBhcnNlci5wbSBjYW4gcGFyc2UgW05h
bWVkQ29uc3RydWN0b3JdIElETC4KKyAgICAgICAgLSBDb2RlR2VuZXJhdG9yVjgucG0gY2FuIGdl
bmVyYXRlIGEgTmFtZWRDb25zdHJ1Y3RvcgorICAgICAgICBhbmQgYSB0ZW1wbGF0ZSBnZXR0ZXIg
Zm9yIHRoZSBOYW1lZENvbnN0cnVjdG9yLgorICAgICAgICAtIEFkZGVkIGEgbmV3IGJpbmRpbmcg
dGVzdCBuYW1lZCBUZXN0TmFtZWRDb25zdHJ1Y3Rvci5pZGwuCisKKyAgICAgICAgVGVzdHM6IFdl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZENvbnN0cnVjdG9yLmlkbAorCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChH
ZW5lcmF0ZUhlYWRlcik6IEdlbmVyYXRlcyBhIGhlYWRlciBmb3IgYSBOYW1lZENvbnN0cnVjdG9y
LgorICAgICAgICAoR2VuZXJhdGVOYW1lZENvbnN0cnVjdG9yQ2FsbGJhY2spOiBHZW5lcmF0ZXMg
dGhlIE5hbWVkQ29uc3RydWN0b3IgYW5kIGEgdGVtcGxhdGUgZ2V0dGVyIGZvciB0aGUgTmFtZWRD
b25zdHJ1Y3Rvci4KKyAgICAgICAgKEdlbmVyYXRlU2luZ2xlQmF0Y2hlZEF0dHJpYnV0ZSk6IElm
IGFuIElETCB0eXBlIGlzICJYWFhYQ29uc3RydWN0b3JDb25zdHJ1Y3RvciIsIHRoZW4gd2UgZG8g
bm90IGFkZCBhIGhlYWRlciBmaWxlIG9mIFhYWFhDb25zdHJ1Y3RvciwgYmVjYXVzZSB0aGUgWFhY
WENvbnN0cnVjdG9yIGRlY2xhcmF0aW9uIGlzIHdyaXR0ZW4gaW4gdGhlIGhlYWRlciBmaWxlIG9m
IGNsYXNzIFhYWFguCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06Cisg
ICAgICAgIChwYXJzZUV4dGVuZGVkQXR0cmlidXRlcyk6IFBhcnNlcyAnTmFtZWRDb25zdHJ1Y3Rv
cicgJz0nIG5hbWUgJygnIHBhcmFtZXRlcnMgJyknICcsJz8KKyAgICAgICAgKFBhcnNlSW50ZXJm
YWNlKTogQ3JlYXRlcyB0aGUgc2lnbmF0dXJlIG9mIGEgTmFtZWRDb25zdHJ1Y3Rvci4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkQ29uc3RydWN0b3IuaWRsOiBBZGRl
ZCBhIG5ldyB0ZXN0IGZvciB0aGUgW05hbWVkQ29uc3RydWN0b3JdIElETC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcDog
QWRkZWQgYSBydW4tYmluZGluZy10ZXN0IHJlc3VsdCBvZiBUZXN0TmFtZWRDb25zdHJ1Y3Rvci5p
ZGwuCisgICAgICAgIChXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6V2ViRE9NVGVzdE5hbWVk
Q29uc3RydWN0b3JQcml2YXRlOjpXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUpOgor
ICAgICAgICAoV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3I6OldlYkRPTVRlc3ROYW1lZENvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yOjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3I6OmltcGwpOgorICAgICAgICAo
V2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3I6On5XZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcik6
CisgICAgICAgICh0b1dlYkNvcmUpOgorICAgICAgICAodG9XZWJLaXQpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuaDogRGl0
dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE5hbWVkQ29uc3RydWN0b3IuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6a2l0KToKKyAg
ICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29u
c3RydWN0b3JfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0
cnVjdG9yX3NldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29u
c3RydWN0b3JfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9j
b25zdHJ1Y3Rvcl9jb25zdHJ1Y3RlZCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfbmFtZWRf
Y29uc3RydWN0b3JfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfbmFtZWRf
Y29uc3RydWN0b3JfaW5pdCk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0TmFtZWRDb25zdHJ1
Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE5hbWVkQ29uc3RydWN0b3IuaDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlLmg6IERp
dHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0
cnVjdG9yLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yQ29uc3RydWN0b3I6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1
Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVk
Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6SlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVh
dGVQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6
Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6aXNP
YnNlcnZhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JPd25l
cjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRDb25zdHJ1Y3Rvck93bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVGVzdE5hbWVkQ29uc3RydWN0b3IpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmg6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjppbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OndyYXBwZXJPd25lcik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVyQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBl
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29u
c3RydWN0b3JQcm90b3R5cGU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3ROYW1lZENvbnN0cnVjdG9yLmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3ROYW1lZENvbnN0cnVjdG9yLm1tOiBEaXR0by4KKyAgICAgICAg
KC1bRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IgZGVhbGxvY10pOgorICAgICAgICAoLVtET01UZXN0
TmFtZWRDb25zdHJ1Y3RvciBmaW5hbGl6ZV0pOgorICAgICAgICAoY29yZSk6CisgICAgICAgIChr
aXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3ROYW1lZENv
bnN0cnVjdG9ySW50ZXJuYWwuaDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlRlc3ROYW1lZENvbnN0cnVjdG9ySW50ZXJuYWw6OlY4X1VTRSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpWOFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OkdldFRlbXBsYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdE5hbWVkQ29uc3RydWN0b3JUZW1w
bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRSYXdU
ZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRU
ZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpIYXNJ
bnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjp0b0Fj
dGl2ZURPTU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3ROYW1lZENvbnN0cnVjdG9y
Ojp3cmFwU2xvdyk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpk
ZXJlZk9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5h
bWVkQ29uc3RydWN0b3IuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpWOFRlc3ROYW1lZENv
bnN0cnVjdG9yOjp0b05hdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3ROYW1lZENvbnN0
cnVjdG9yOjpleGlzdGluZ1dyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRD
b25zdHJ1Y3Rvcjo6d3JhcCk6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBw
YWdlL0RPTVdpbmRvdy5pZGw6IEFkZGVkIFtDdXN0b21Db25zdHJ1Y3Rvcl0gSURMIHRvIEhUTUxB
dWRpb0VsZW1lbnQsIEhUTUxJbWFnZUVsZW1lbnQgYW5kIEhUTUxPcHRpb25FbGVtZW50LgorCiAy
MDExLTExLTA4ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogYWRkICJFdmFsdWF0ZSBpbiBjb25zb2xlIiBhcyBhIHNob3J0Y3V0
IGFuZCBjb250ZXh0IG1lbnUgaXRlbXMgdG8gc2NyaXB0cyBwYW5lbApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCA0NzFiOTRh
NmNlYWM4MmEyZGRkM2UzNjRkMjM3YzVkNWY5NzNjZjlhLi43MjczMTYwZmNiMmViODM5MWI0OWZh
ZTkwNWU5NmJhOGQ0NjdhOWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMzA4LDYgKzMwOCwxOSBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKICAgICAgICAgfQogICAgIH0KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5j
bGFzcyBGbG9hdFJlY3Q7XG4iKSBpZiAkc3ZnUHJvcGVydHlUeXBlICYmICRzdmdQcm9wZXJ0eVR5
cGUgZXEgIkZsb2F0UmVjdCI7CisKKyAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGVG
b3JDb252ZXJzaW9ucygkZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1lKTsKKyAgICBpZiAoJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKKworY2xhc3MgVjgke25hdGl2ZVR5cGV9Q29u
c3RydWN0b3IgeworcHVibGljOgorICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKKyAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGlu
Zm87Cit9OworRU5ECisgICAgfQorCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuY2xhc3Mg
JGNsYXNzTmFtZSB7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7
CiAKQEAgLTMzMCw3ICszNDMsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgImZhbHNlO1xuIik7CiAgICAgfQogCi0gICAgbXkgJG5hdGl2ZVR5cGUg
PSBHZXROYXRpdmVUeXBlRm9yQ29udmVyc2lvbnMoJGRhdGFOb2RlLCAkaW50ZXJmYWNlTmFtZSk7
CiAgICAgbXkgJGRvbU1hcEZ1bmN0aW9uID0gR2V0RG9tTWFwRnVuY3Rpb24oJGRhdGFOb2RlLCAk
aW50ZXJmYWNlTmFtZSk7CiAgICAgbXkgJGZvcmNlTmV3T2JqZWN0UGFyYW1ldGVyID0gSXNET01O
b2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkgPyAiLCBib29sIGZvcmNlTmV3T2JqZWN0ID0gZmFsc2Ui
IDogIiI7CiAgICAgbXkgJGZvcmNlTmV3T2JqZWN0SW5wdXQgPSBJc0RPTU5vZGVUeXBlKCRpbnRl
cmZhY2VOYW1lKSA/ICIsIGJvb2wgZm9yY2VOZXdPYmplY3QiIDogIiI7CkBAIC0xNTk0LDYgKzE2
MDYsMTQzIEBAIEVORAogICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKIH0KIAorc3ViIEdl
bmVyYXRlTmFtZWRDb25zdHJ1Y3RvckNhbGxiYWNrCit7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hp
ZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSBz
aGlmdDsKKworICAgIG15ICRyYWlzZXNFeGNlcHRpb25zID0gQHskZnVuY3Rpb24tPnJhaXNlc0V4
Y2VwdGlvbnN9OworICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25z
dHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbiJ9KSB7CisgICAgICAgICRyYWlzZXNFeGNlcHRpb25zID0g
MTsKKyAgICB9CisgICAgaWYgKCEkcmFpc2VzRXhjZXB0aW9ucykgeworICAgICAgICBmb3JlYWNo
IG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAgICAgICAg
aWYgKCghJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0gYW5kIFR5
cGVDYW5GYWlsQ29udmVyc2lvbigkcGFyYW1ldGVyKSkgb3IgJHBhcmFtZXRlci0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IklzSW5kZXgifSkgeworICAgICAgICAgICAgICAgICRyYWlzZXNFeGNlcHRp
b25zID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG15IEBiZWZv
cmVBcmd1bWVudExpc3Q7CisgICAgbXkgQGFmdGVyQXJndW1lbnRMaXN0OworCisgICAgaWYgKCRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkFjdGl2ZURPTU9iamVjdCJ9KSB7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CitXcmFwcGVyVHlwZUluZm8gVjgke2ltcGxD
bGFzc05hbWV9Q29uc3RydWN0b3I6OmluZm8gPSB7IFY4JHtpbXBsQ2xhc3NOYW1lfUNvbnN0cnVj
dG9yOjpHZXRUZW1wbGF0ZSwgVjgke2ltcGxDbGFzc05hbWV9OjpkZXJlZk9iamVjdCwgVjgke2lt
cGxDbGFzc05hbWV9Ojp0b0FjdGl2ZURPTU9iamVjdCwgMCB9OworCitFTkQKKyAgICB9IGVsc2Ug
eworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworV3JhcHBlclR5cGVJbmZvIFY4
JHtpbXBsQ2xhc3NOYW1lfUNvbnN0cnVjdG9yOjppbmZvID0geyBWOCR7aW1wbENsYXNzTmFtZX1D
b25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUsIDAsIDAsIDAgfTsKKworRU5ECisgICAgfQorCisgICAg
cHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Vjgke2ltcGxDbGFzc05hbWV9Q29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLiR7aW1wbENsYXNzTmFtZX0uQ29uc3RydWN0
b3IiKTsKKworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBh
IGZ1bmN0aW9uLiIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisKKyAgICBpZiAoQ29uc3RydWN0b3JN
b2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCisg
ICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworCisgICAgRnJhbWUqIGZyYW1lID0gVjhQcm94
eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250ZXh0KCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoIiR7aW1wbENsYXNzTmFtZX0gY29uc3RydWN0b3IgYXNz
b2NpYXRlZCBmcmFtZSBpcyB1bmF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVycm9yKTsK
KworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICgh
ZG9jdW1lbnQpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCIke2ltcGxDbGFzc05hbWV9IGNv
bnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiLCBWOFByb3h5OjpS
ZWZlcmVuY2VFcnJvcik7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGRvY3VtZW50IGlzIGFkZGVk
IHRvIHRoZSBET00gTm9kZSBtYXAuIE90aGVyd2lzZSwgdGhlICR7aW1wbENsYXNzTmFtZX0gaW5z
dGFuY2UKKyAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5vZGUgaW4gdGhlIG1hcCBh
bmQgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHByZW1hdHVyZWx5LgorICAgIHRvVjgoZG9jdW1lbnQp
OworCitFTkQKKworICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUFyZ3VtZW50c0NvdW50
Q2hlY2soJGZ1bmN0aW9uLCAkZGF0YU5vZGUpKTsKKworICAgIGlmICgkcmFpc2VzRXhjZXB0aW9u
cykgeworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRXhjZXB0aW9uQ29kZS5oIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKKyAgICB9CisKKyAgICBteSAoJHBhcmFt
ZXRlckNoZWNrU3RyaW5nLCAkcGFyYW1JbmRleCkgPSBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjaygk
ZnVuY3Rpb24sICRpbXBsQ2xhc3NOYW1lKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgJHBhcmFt
ZXRlckNoZWNrU3RyaW5nKTsKKworICAgIHB1c2goQGJlZm9yZUFyZ3VtZW50TGlzdCwgImRvY3Vt
ZW50Iik7CisKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3Ry
dWN0b3JSYWlzZXNFeGNlcHRpb24ifSkgeworICAgICAgICBwdXNoKEBhZnRlckFyZ3VtZW50TGlz
dCwgImVjIik7CisgICAgfQorCisgICAgbXkgQGFyZ3VtZW50TGlzdDsKKyAgICBteSAkaW5kZXgg
PSAwOworICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9
KSB7CisgICAgICAgIGxhc3QgaWYgJGluZGV4IGVxICRwYXJhbUluZGV4OworICAgICAgICBwdXNo
KEBhcmd1bWVudExpc3QsICRwYXJhbWV0ZXItPm5hbWUpOworICAgICAgICAkaW5kZXgrKzsKKyAg
ICB9CisKKyAgICBteSAkYXJndW1lbnRTdHJpbmcgPSBqb2luKCIsICIsIEBiZWZvcmVBcmd1bWVu
dExpc3QsIEBhcmd1bWVudExpc3QsIEBhZnRlckFyZ3VtZW50TGlzdCk7CisgICAgcHVzaChAaW1w
bENvbnRlbnQsICJcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwke2lt
cGxDbGFzc05hbWV9PiBvYmogPSAke2ltcGxDbGFzc05hbWV9OjpjcmVhdGVGb3JKU0NvbnN0cnVj
dG9yKCR7YXJndW1lbnRTdHJpbmd9KTtcbiIpOworCisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uIn0pIHsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGVjKVxuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICBnb3RvIGZhaWw7XG4iKTsKKyAgICB9CisKKyAgICBteSAkRE9NT2Jq
ZWN0ID0gIkRPTU9iamVjdCI7CisgICAgIyBBIERPTU9iamVjdCB0aGF0IGlzIGFuIEFjdGl2ZURP
TU9iamVjdCBhbmQgYWxzbyBhIERPTU5vZGUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gQWN0aXZl
RE9NT2JqZWN0LgorICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJBY3Rp
dmVET01PYmplY3QifSkgeworICAgICAgICAkRE9NT2JqZWN0ID0gIkFjdGl2ZURPTU9iamVjdCI7
CisgICAgfSBlbHNpZiAoSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpKSB7CisgICAgICAgICRET01P
YmplY3QgPSAiRE9NTm9kZSI7CisgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7
CisKKyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJlY4JHtp
bXBsQ2xhc3NOYW1lfUNvbnN0cnVjdG9yOjppbmZvLCBvYmouZ2V0KCkpOworICAgIG9iai0+cmVm
KCk7CisgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3Ike0RPTU9iamVjdH0ob2JqLmdl
dCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsKKyAg
ICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKK0VORAorCisgICAgaWYgKCRyYWlzZXNFeGNlcHRpb25z
KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICBmYWlsOlxuIik7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTtcbiIpOworICAgIH0K
KworICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CisKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgPDxFTkQpOworCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjgke2lt
cGxDbGFzc05hbWV9Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlKCkKK3sKKyAgICBzdGF0aWMgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNhY2hlZFRlbXBsYXRlOworICAgIGlm
ICghY2FjaGVkVGVtcGxhdGUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gY2FjaGVkVGVtcGxh
dGU7CisKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgdjg6OkxvY2FsPHY4OjpGdW5j
dGlvblRlbXBsYXRlPiByZXN1bHQgPSB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFY4JHtpbXBs
Q2xhc3NOYW1lfUNvbnN0cnVjdG9yQ2FsbGJhY2spOworCisgICAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3RUZW1wbGF0ZT4gaW5zdGFuY2UgPSByZXN1bHQtPkluc3RhbmNlVGVtcGxhdGUoKTsKKyAgICBp
bnN0YW5jZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50KFY4JHtpbXBsQ2xhc3NOYW1lfTo6aW50ZXJu
YWxGaWVsZENvdW50KTsKKyAgICByZXN1bHQtPlNldENsYXNzTmFtZSh2ODo6U3RyaW5nOjpOZXco
IiR7aW1wbENsYXNzTmFtZX0iKSk7CisgICAgcmVzdWx0LT5Jbmhlcml0KFY4JHtpbXBsQ2xhc3NO
YW1lfTo6R2V0VGVtcGxhdGUoKSk7CisKKyAgICBjYWNoZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHJlc3VsdCk7CisgICAgcmV0dXJuIGNhY2hl
ZFRlbXBsYXRlOworfQorCitFTkQKK30KKwogc3ViIEdlbmVyYXRlQmF0Y2hlZEF0dHJpYnV0ZURh
dGEKIHsKICAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKQEAgLTE2NzAsNyArMTgxOSwxMiBAQCBz
dWIgR2VuZXJhdGVTaW5nbGVCYXRjaGVkQXR0cmlidXRlCiAgICAgaWYgKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLykgewogICAgICAgICBteSAkY29uc3RydWN0
b3JUeXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+dHlwZSk7CiAgICAgICAgICRjb25zdHJ1Y3RvclR5cGUgPX4gcy9Db25zdHJ1Y3RvciQvLzsK
LSAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4JHtjb25zdHJ1Y3RvclR5cGV9LmgiLCAkYXR0
cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9KTsK
KyAgICAgICAgIyAkY29uc3RydWN0b3JUeXBlIH49IC9Db25zdHJ1Y3RvciQvIGluZGljYXRlcyB0
aGF0IGl0IGlzIE5hbWVkQ29uc3RydWN0b3IuCisgICAgICAgICMgV2UgZG8gbm90IGdlbmVyYXRl
IHRoZSBoZWFkZXIgZmlsZSBmb3IgTmFtZWRDb25zdHJ1Y3RvciBvZiBjbGFzcyBYWFhYLAorICAg
ICAgICAjIHNpbmNlIHdlIGdlbmVyYXRlIHRoZSBOYW1lZENvbnN0cnVjdG9yIGRlY2xhcmF0aW9u
IGludG8gdGhlIGhlYWRlciBmaWxlIG9mIGNsYXNzIFhYWFguCisgICAgICAgIGlmICgkY29uc3Ry
dWN0b3JUeXBlICF+IC9Db25zdHJ1Y3RvciQvIHx8ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IlY4Q3VzdG9tQ29uc3RydWN0b3IifSB8fCAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1Y3RvciJ9KSB7Cisg
ICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgke2NvbnN0cnVjdG9yVHlwZX0uaCIsICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn0p
OworICAgICAgICB9CiAgICAgICAgIGlmICgkY3VzdG9tQWNjZXNzb3IpIHsKICAgICAgICAgICAg
ICRnZXR0ZXIgPSAiVjgke2N1c3RvbUFjY2Vzc29yfUFjY2Vzc29yR2V0dGVyIjsKICAgICAgICAg
fSBlbHNlIHsKQEAgLTIxNTEsNiArMjMwNSw4IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke2Ns
YXNzTmFtZX06OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJnCiB9
CiAKIEVORAorICAgIH0gZWxzaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5h
bWVkQ29uc3RydWN0b3IifSAmJiAhKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4
Q3VzdG9tQ29uc3RydWN0b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21Db25zdHJ1Y3RvciJ9KSkgeworICAgICAgICBHZW5lcmF0ZU5hbWVkQ29uc3RydWN0b3JD
YWxsYmFjaygkZGF0YU5vZGUtPmNvbnN0cnVjdG9yLCAkZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1l
KTsKICAgICB9IGVsc2lmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYW5CZUNv
bnN0cnVjdGVkIn0gJiYgISgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOEN1c3Rv
bUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9t
Q29uc3RydWN0b3IifSkpIHsKICAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckNhbGxiYWNrKCRk
YXRhTm9kZS0+Y29uc3RydWN0b3IsICRkYXRhTm9kZSwgJGludGVyZmFjZU5hbWUpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBt
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KaW5kZXggZDZh
MWJlOTFhYmY1MDBkMWVmMmE5NjlhYjQyY2Y3OWEzNzAwN2E5ZC4uNjYxMTgzMmMzNTg4ZGZlZThj
NjY1NTYwMDU0NDBjZGY1MTg4NTcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9JRExQYXJzZXIucG0KQEAgLTE1MSwxNyArMTUxLDQxIEBAIHN1YiBwYXJzZUV4dGVuZGVk
QXR0cmlidXRlcwogICAgICAgICAkc3RyID1+IHMvXlxzKihbXHdcZF0rKS8vOwogCiAgICAgICAg
IGlmICgkc3RyID1+IC9eXHMqPS8pIHsKLSAgICAgICAgICAgICMgUGFyc2UgJz0nIHZhbHVlIHwg
Jz0nIHZhbHVlICcsJwogICAgICAgICAgICAgJHN0ciA9fiBzL15ccyo9Ly87Ci0gICAgICAgICAg
ICBpZiAoJHN0ciA9fiAvXlxzKihbXixdKiksPy8pIHsKLSAgICAgICAgICAgICAgICAkYXR0cnN7
JG5hbWV9ID0gJDE7Ci0gICAgICAgICAgICAgICAgJGF0dHJzeyRuYW1lfSA9fiBzL14oLio/KVxz
KiQvJDEvOwotICAgICAgICAgICAgICAgICRzdHIgPX4gcy9eXHMqKFteLF0qKSw/Ly87CisgICAg
ICAgICAgICBpZiAoJG5hbWUgZXEgIk5hbWVkQ29uc3RydWN0b3IiKSB7CisgICAgICAgICAgICAg
ICAgIyBQYXJzZSAnPScgbmFtZSAnKCcgYXJndW1lbnRzICcpJyAnLCc/CisgICAgICAgICAgICAg
ICAgaWYgKCRzdHIgPX4gL15ccyooW1x3XGRdKykvKSB7CisgICAgICAgICAgICAgICAgICAgICMg
Rm9yIG5vdyBpZ25vcmUgdGhlIG5hbWUsIHNpbmNlIHRoZSBuYW1lIGlzIG1hbmFnZWQgYnkgRE9N
V2luZG93LmlkbC4KKyAgICAgICAgICAgICAgICAgICAgJHN0ciA9fiBzL15ccyooW1x3XGRdKykv
LzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCRzdHIgPX4gL15ccypc
KC8pIHsKKyAgICAgICAgICAgICAgICAgICAgIyBQYXJzZSAnKCcgYXJndW1lbnRzICcpJyAnLCc/
CisgICAgICAgICAgICAgICAgICAgICRzdHIgPX4gcy9eXHMqXCgvLzsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCRzdHIgPX4gL14oW14pXSopXCksPy8pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICRhdHRyc3skbmFtZX0gPSAkMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICRhdHRyc3sk
bmFtZX0gPX4gcy9eKC4qPylccyokLyQxLzsKKyAgICAgICAgICAgICAgICAgICAgICAgICRzdHIg
PX4gcy9eKFteKV0qKVwpLD8vLzsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRpZSgiSW52YWxpZCBleHRlbmRlZCBhdHRyaWJ1dGU6ICckc3Ry
J1xuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2lmICgk
c3RyID1+IC9eXHMqLD8vKSB7CisgICAgICAgICAgICAgICAgICAgICRhdHRyc3skbmFtZX0gPSAi
IjsKKyAgICAgICAgICAgICAgICAgICAgJHN0ciA9fiBzL15ccyosPy8vOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRpZSgiSW52YWxpZCBleHRlbmRlZCBh
dHRyaWJ1dGU6ICckc3RyJ1xuIik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBkaWUoIkludmFsaWQgZXh0ZW5kZWQgYXR0cmlidXRlOiAn
JHN0cidcbiIpOworICAgICAgICAgICAgICAgICMgUGFyc2UgJz0nIHZhbHVlICcsJz8KKyAgICAg
ICAgICAgICAgICBpZiAoJHN0ciA9fiAvXlxzKihbXixdKiksPy8pIHsKKyAgICAgICAgICAgICAg
ICAgICAgJGF0dHJzeyRuYW1lfSA9ICQxOworICAgICAgICAgICAgICAgICAgICAkYXR0cnN7JG5h
bWV9ID1+IHMvXiguKj8pXHMqJC8kMS87CisgICAgICAgICAgICAgICAgICAgICRzdHIgPX4gcy9e
XHMqKFteLF0qKSw/Ly87CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgZGllKCJJbnZhbGlkIGV4dGVuZGVkIGF0dHJpYnV0ZTogJyRzdHInXG4iKTsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzaWYgKCRzdHIgPX4gL15c
cypcKC8pIHsKLSAgICAgICAgICAgICMgUGFyc2UgJygnIGFyZ3VtZW50cyAnKScgfCAnKCcgYXJn
dW1lbnRzICcpJyAnLCcKKyAgICAgICAgICAgICMgUGFyc2UgJygnIGFyZ3VtZW50cyAnKScgJywn
PwogICAgICAgICAgICAgJHN0ciA9fiBzL15ccypcKC8vOwogICAgICAgICAgICAgaWYgKCRzdHIg
PX4gL14oW14pXSopXCksPy8pIHsKICAgICAgICAgICAgICAgICAkYXR0cnN7JG5hbWV9ID0gJDE7
CkBAIC0yNTksNiArMjgzLDE0IEBAIHN1YiBQYXJzZUludGVyZmFjZQogICAgICAgICAgICAgcGFy
c2VQYXJhbWV0ZXJzKCRuZXdEYXRhTm9kZSwgJGV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1
Y3RvciJ9KTsKICAgICAgICAgICAgICRleHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3Ii
fSA9IDE7CiAgICAgICAgICAgICAkZGF0YU5vZGUtPmNvbnN0cnVjdG9yKCRuZXdEYXRhTm9kZSk7
CisgICAgICAgIH0gZWxzaWYgKGRlZmluZWQgJGV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENv
bnN0cnVjdG9yIn0pIHsKKyAgICAgICAgICAgIG15ICRuZXdEYXRhTm9kZSA9IG5ldyBkb21GdW5j
dGlvbigpOworICAgICAgICAgICAgJG5ld0RhdGFOb2RlLT5zaWduYXR1cmUobmV3IGRvbVNpZ25h
dHVyZSgpKTsKKyAgICAgICAgICAgICRuZXdEYXRhTm9kZS0+c2lnbmF0dXJlLT5uYW1lKCJOYW1l
ZENvbnN0cnVjdG9yIik7CisgICAgICAgICAgICAkbmV3RGF0YU5vZGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZXMpOworICAgICAgICAgICAgcGFyc2VQ
YXJhbWV0ZXJzKCRuZXdEYXRhTm9kZSwgJGV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0
cnVjdG9yIn0pOworICAgICAgICAgICAgJGV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0
cnVjdG9yIn0gPSAxOworICAgICAgICAgICAgJGRhdGFOb2RlLT5jb25zdHJ1Y3RvcigkbmV3RGF0
YU5vZGUpOwogICAgICAgICB9CiAgICAgICAgICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
KCRleHRlbmRlZEF0dHJpYnV0ZXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE5hbWVkQ29u
c3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwYzM3NzdiZjRjZjYyMjY5YjQ0ZWU3NjY2YTU1MTA3
MWYzZTk3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDgy
IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKKyNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1Y3QgV2ViRE9NVGVzdE5h
bWVkQ29uc3RydWN0b3I6OldlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZSB7CisgICAg
V2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlKFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0
cnVjdG9yKiBvYmplY3QgPSAwKQorICAgICAgICA6IGltcGwob2JqZWN0KQorICAgIHsKKyAgICB9
CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3I+IGltcGw7Cit9Owor
CitXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6V2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3Io
KQorICAgIDogV2ViRE9NT2JqZWN0KCkKKyAgICAsIG1faW1wbCgwKQoreworfQorCitXZWJET01U
ZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6V2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IoV2ViQ29yZTo6
VGVzdE5hbWVkQ29uc3RydWN0b3IqIGltcGwpCisgICAgOiBXZWJET01PYmplY3QoKQorICAgICwg
bV9pbXBsKG5ldyBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUoaW1wbCkpCit7Cit9
CisKK1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yOjpXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rv
cihjb25zdCBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvciYgY29weSkKKyAgICA6IFdlYkRPTU9i
amVjdCgpCit7CisgICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdE5hbWVk
Q29uc3RydWN0b3JQcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Cit9CisKK1dlYkRPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yJiBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6b3BlcmF0b3I9KGNvbnN0
IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yJiBjb3B5KQoreworICAgIGRlbGV0ZSBtX2ltcGw7
CisgICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0
b3JQcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJD
b3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvciogV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3I6Omlt
cGwoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmltcGwuZ2V0KCkgOiAw
OworfQorCitXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6fldlYkRPTVRlc3ROYW1lZENvbnN0
cnVjdG9yKCkKK3sKKyAgICBkZWxldGUgbV9pbXBsOworICAgIG1faW1wbCA9IDA7Cit9CisKK1dl
YkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdE5h
bWVkQ29uc3RydWN0b3ImIHdyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOwor
fQorCitXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvciB0b1dlYktpdChXZWJDb3JlOjpUZXN0TmFt
ZWRDb25zdHJ1Y3RvciogdmFsdWUpCit7CisgICAgcmV0dXJuIFdlYkRPTVRlc3ROYW1lZENvbnN0
cnVjdG9yKHZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3Iu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iNDVkYWE3NjFjOTJiZTI2MjU2ZWI0YWQ5NGIzZTJhOTU3MDczODFkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgV2ViRE9NVGVzdE5h
bWVkQ29uc3RydWN0b3JfaAorCisjaW5jbHVkZSA8V2ViRE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8
V2ViRE9NU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRlc3ROYW1lZENv
bnN0cnVjdG9yOworfTsKKworCitjbGFzcyBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvciA6IHB1
YmxpYyBXZWJET01PYmplY3QgeworcHVibGljOgorICAgIFdlYkRPTVRlc3ROYW1lZENvbnN0cnVj
dG9yKCk7CisgICAgZXhwbGljaXQgV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IoV2ViQ29yZTo6
VGVzdE5hbWVkQ29uc3RydWN0b3IqKTsKKyAgICBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcihj
b25zdCBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvciYpOworICAgIFdlYkRPTVRlc3ROYW1lZENv
bnN0cnVjdG9yJiBvcGVyYXRvcj0oY29uc3QgV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3ImKTsK
KyAgICB2aXJ0dWFsIH5XZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvcigpOworCisKKyAgICBXZWJD
b3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6Cisg
ICAgc3RydWN0IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZTsKKyAgICBXZWJET01U
ZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUqIG1faW1wbDsKK307CisKK1dlYkNvcmU6OlRlc3RO
YW1lZENvbnN0cnVjdG9yKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0
b3ImKTsKK1dlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RO
YW1lZENvbnN0cnVjdG9yKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwNDE3Mjk3OTAxZjhm
NThkZTZlOThkZDYyZjNjZjNjNWVjNmMyOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25z
dHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIkRPTU9i
amVjdENhY2hlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIlRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NQmluZGluZy5oIgorI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRv
VVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvclBy
aXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRkZWZpbmVzLmgiCisjaW5jbHVkZSAid2Via2l0Z2xv
YmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworICAgIAorV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqIGtpdChXZWJDb3Jl
OjpUZXN0TmFtZWRDb25zdHJ1Y3Rvciogb2JqKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KG9iaiwgMCk7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChv
YmopKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdE5hbWVkQ29uc3Ry
dWN0b3IqPihyZXQpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yKj4oRE9NT2JqZWN0Q2FjaGU6OnB1dChvYmosIFdlYktpdDo6d3JhcFRlc3RO
YW1lZENvbnN0cnVjdG9yKG9iaikpKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYktpdCAv
LworCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IsIHdlYmtp
dF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3RvciwgV0VCS0lUX1RZUEVfRE9NX09CSkVDVCkKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBjb3Jl
KFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOworCisgICAgV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3Ry
dWN0b3IqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1
Y3Rvcio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKKworICAgIHJldHVybiBjb3JlT2JqZWN0
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKK2VudW0geworICAgIFBST1BfMCwKK307CisK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2ZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBX
RUJLSVRfRE9NX09CSkVDVChvYmplY3QpOworICAgIAorICAgIGlmIChkb21fb2JqZWN0LT5jb3Jl
T2JqZWN0KSB7CisgICAgICAgIFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBjb3JlT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IgKj4oZG9tX29i
amVjdC0+Y29yZU9iamVjdCk7CisKKyAgICAgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9y
Z2V0KGNvcmVPYmplY3QpOworICAgICAgICBjb3JlT2JqZWN0LT5kZXJlZigpOworCisgICAgICAg
IGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOworICAgIH0KKworICAgIEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5h
bGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29u
c3RydWN0b3Jfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9nZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgc3dp
dGNoIChwcm9wX2lkKSB7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVj
dG9yX2NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKworICAgIGlmIChHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfcGFyZW50X2NsYXNzKS0+Y29u
c3RydWN0ZWQpCisgICAgICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9j
b25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfY2xhc3NfaW5pdChXZWJL
aXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09i
amVjdENsYXNzICpnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwor
ICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3Ry
dWN0b3JfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRf
ZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3Jfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2dldF9w
cm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVkID0gd2Via2l0X2RvbV90ZXN0
X25hbWVkX2NvbnN0cnVjdG9yX2NvbnN0cnVjdGVkOworCisKKworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfaW5pdChXZWJLaXRET01UZXN0TmFtZWRD
b25zdHJ1Y3RvciogcmVxdWVzdCkKK3sKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRE
T01UZXN0TmFtZWRDb25zdHJ1Y3Rvciogd3JhcFRlc3ROYW1lZENvbnN0cnVjdG9yKFdlYkNvcmU6
OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBjb3JlT2JqZWN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhh
biB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysg
b2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0
aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRjaGluZyBkZXJlZigpLgorICAg
ICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOworCisgICAgcmV0dXJuICBXRUJLSVRfRE9NX1RF
U1RfTkFNRURfQ09OU1RSVUNUT1IoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX05B
TUVEX0NPTlNUUlVDVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Cit9Cit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25z
dHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwZjljMjc4ZjAwNDhjMjQ5MDc2NTdiYTA3YTUxMDIwZGM1
MzcwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXN0TmFt
ZWRDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yX2gK
KworI2luY2x1ZGUgIndlYmtpdC93ZWJraXRkb21kZWZpbmVzLmgiCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorI2luY2x1ZGUgIndl
YmtpdC9XZWJLaXRET01PYmplY3QuaCIKKworCitHX0JFR0lOX0RFQ0xTCisjZGVmaW5lIFdFQktJ
VF9UWVBFX0RPTV9URVNUX05BTUVEX0NPTlNUUlVDVE9SICAgICAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RF
U1RfTkFNRURfQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRE9NX1RFU1RfTkFNRURfQ09OU1RSVUNUT1IsIFdl
YktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX05B
TUVEX0NPTlNUUlVDVE9SX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPTV9URVNUX05BTUVEX0NPTlNUUlVDVE9SLCBXZWJLaXRE
T01UZXN0TmFtZWRDb25zdHJ1Y3RvckNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1Rf
TkFNRURfQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX1RZUEVfRE9NX1RFU1RfTkFNRURfQ09OU1RSVUNUT1IpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX1RFU1RfTkFNRURfQ09OU1RSVUNUT1JfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfTkFNRURf
Q09OU1RSVUNUT1IpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfTkFNRURfQ09OU1RSVUNUT1Jf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X1RZUEVfRE9NX1RFU1RfTkFNRURfQ09OU1RSVUNUT1IsIFdlYktpdERPTVRlc3ROYW1lZENvbnN0
cnVjdG9yQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yIHsK
KyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJL
aXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvckNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFz
cyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3Rlc3Rf
bmFtZWRfY29uc3RydWN0b3JfZ2V0X3R5cGUgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5h
bWVkQ29uc3RydWN0b3JQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iNTg1MTcxYzIwZTk2YTkwMjg4N2ZjOTY4YzllOTY1OWYzOTkzMjNlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlLmgKQEAgLTAsMCArMSwzOSBAQAor
LyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFdFQl9LSVRfRE9NX1RFU1RfTkFNRURf
Q09OU1RSVUNUT1JfUFJJVkFURV9ICisjZGVmaW5lIFdFQl9LSVRfRE9NX1RFU1RfTkFNRURfQ09O
U1RSVUNUT1JfUFJJVkFURV9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlICJUZXN0TmFtZWRDb25zdHJ1Y3Rv
ci5oIgorbmFtZXNwYWNlIFdlYktpdCB7CisgICAgV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0
b3IgKgorICAgIHdyYXBUZXN0TmFtZWRDb25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0TmFtZWRDb25z
dHJ1Y3RvciAqY29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3Rv
ciAqCisgICAgY29yZShXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvciAqcmVxdWVzdCk7CisK
KyAgICBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvcioKKyAgICBraXQoV2ViQ29yZTo6VGVz
dE5hbWVkQ29uc3RydWN0b3IqIG5vZGUpOworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8qIFdFQl9LSVRfRE9NX1RFU1RfTkFNRURfQ09OU1RSVUNUT1JfUFJJVkFURV9IICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTRiMjBmOTg2ZDY0
ZTQ4NTQ0MzIwMWYyODNmZmMzZmNmOTczYjlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNw
cApAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVk
ZSAiVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQVNTRVJUX0NMQVNT
X0ZJVFNfSU5fQ0VMTChKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKTsKKworLyogSGFzaCB0YWJsZSBm
b3IgY29uc3RydWN0b3IgKi8KKyNpZiBFTkFCTEUoSklUKQorI2RlZmluZSBUSFVOS19HRU5FUkFU
T1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgorI2Vsc2UKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9S
KGdlbmVyYXRvcikKKyNlbmRpZgorI2lmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBJTlRSSU5T
SUMoaW50cmluc2ljKSAsIGludHJpbnNpYworI2Vsc2UKKyNkZWZpbmUgSU5UUklOU0lDKGludHJp
bnNpYykKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvclRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVu
dW0gfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpMCBU
SFVOS19HRU5FUkFUT1IoMCkgSU5UUklOU0lDKERGRzo6Tm9JbnRyaW5zaWMpIH0sCisgICAgeyAw
LCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSBJTlRSSU5TSUMoREZHOjpOb0ludHJpbnNpYykg
fQorfTsKKworI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgorc3RhdGljIEpTQ19DT05TVF9IQVNIVEFC
TEUgSGFzaFRhYmxlIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JUYWJsZSA9IHsgMiwgMSwgSlNUZXN0
TmFtZWRDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07CisvKiBIYXNoIHRhYmxlIGZvciBjb25z
dHJ1Y3RvciAqLworI2lmIEVOQUJMRShKSVQpCisjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5l
cmF0b3IpICwgZ2VuZXJhdG9yCisjZWxzZQorI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJh
dG9yKQorI2VuZGlmCisjaWYgRU5BQkxFKERGR19KSVQpCisjZGVmaW5lIElOVFJJTlNJQyhpbnRy
aW5zaWMpICwgaW50cmluc2ljCisjZWxzZQorI2RlZmluZSBJTlRSSU5TSUMoaW50cmluc2ljKQor
I2VuZGlmCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yQ29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7IDAsIDAsIDAsIDAgVEhVTktf
R0VORVJBVE9SKDApIElOVFJJTlNJQyhERkc6Ok5vSW50cmluc2ljKSB9Cit9OworCisjdW5kZWYg
VEhVTktfR0VORVJBVE9SCitzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yVGFibGUgPSB7IDEsIDAsIEpTVGVzdE5hbWVk
Q29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07Citjb25zdCBDbGFzc0luZm8g
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yIiwgJkRPTUNvbnN0cnVjdG9yT2JqZWN0OjpzX2luZm8sICZK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH07CisKK0pTVGVzdE5hbWVk
Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
ICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9
CisKK3ZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpOworICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90
b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
K30KKworYm9vbCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRp
Y1ZhbHVlU2xvdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBl
cj4oZXhlYywgJkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlLCBzdGF0aWNf
Y2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IqPihjZWxsKSwgcHJvcGVydHlO
YW1lLCBzbG90KTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAg
IHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29u
c3RydWN0b3JUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKworLyog
SGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisjaWYgRU5BQkxFKEpJVCkKKyNkZWZpbmUgVEhV
TktfR0VORVJBVE9SKGdlbmVyYXRvcikgLCBnZW5lcmF0b3IKKyNlbHNlCisjZGVmaW5lIFRIVU5L
X0dFTkVSQVRPUihnZW5lcmF0b3IpCisjZW5kaWYKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyNkZWZp
bmUgSU5UUklOU0lDKGludHJpbnNpYykgLCBpbnRyaW5zaWMKKyNlbHNlCisjZGVmaW5lIElOVFJJ
TlNJQyhpbnRyaW5zaWMpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7IDAs
IDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIElOVFJJTlNJQyhERkc6Ok5vSW50cmluc2ljKSB9
Cit9OworCisjdW5kZWYgVEhVTktfR0VORVJBVE9SCitzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJM
RSBIYXNoVGFibGUgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlID0geyAxLCAw
LCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKK2NvbnN0
IENsYXNzSW5mbyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7ICJU
ZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSIsICZKU0M6OkpTTm9uRmluYWxPYmplY3Q6OnNf
aW5mbywgJkpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKSB9OworCitKU09iamVj
dCogSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3Rv
dHlwZTxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yPihleGVjLCBnbG9iYWxPYmplY3QpOworfQorCitj
b25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE5h
bWVkQ29uc3RydWN0b3IiLCAmSlNET01XcmFwcGVyOjpzX2luZm8sICZKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yVGFibGUsIDAgLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQ29uc3RydWN0
b3IpIH07CisKK0pTVGVzdE5hbWVkQ29uc3RydWN0b3I6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3Io
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBh
c3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+IGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXIo
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCisgICAgLCBtX2ltcGwoaW1wbCkKK3sKK30KKwordm9p
ZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAg
QVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3I6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90
b3R5cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkp
KTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3Iq
IHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKj4oY2VsbCk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAg
ICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdE5hbWVkQ29uc3RydWN0b3IsIEJhc2U+
KGV4ZWMsICZKU1Rlc3ROYW1lZENvbnN0cnVjdG9yVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTsKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFs
dWVEZXNjcmlwdG9yPEpTVGVzdE5hbWVkQ29uc3RydWN0b3IsIEJhc2U+KGV4ZWMsICZKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9
CisKK0pTVmFsdWUganNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0
TmFtZWRDb25zdHJ1Y3RvciogZG9tT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvcio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgcmV0dXJuIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3I6OmdldENvbnN0cnVjdG9yKGV4ZWMsIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkp
OworfQorCitKU1ZhbHVlIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1
cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yPihl
eGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgaXNPYnNlcnZhYmxlKEpTVGVzdE5hbWVkQ29uc3RydWN0b3Iq
IGpzVGVzdE5hbWVkQ29uc3RydWN0b3IpCit7CisgICAgaWYgKGpzVGVzdE5hbWVkQ29uc3RydWN0
b3ItPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
KiBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvcio+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CisgICAgaWYgKGpzVGVzdE5hbWVkQ29uc3Ry
dWN0b3ItPmltcGwoKS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGlmICghaXNPYnNlcnZhYmxlKGpzVGVzdE5hbWVkQ29uc3RydWN0b3IpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yT3duZXI6OmZpbmFsaXplKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3IqIGpzVGVzdE5hbWVkQ29uc3RydWN0b3IgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBE
T01XcmFwcGVyV29ybGQqIHdvcmxkID0gc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29u
dGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsIGpzVGVzdE5hbWVkQ29uc3RydWN0b3It
PmltcGwoKSwganNUZXN0TmFtZWRDb25zdHJ1Y3Rvcik7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBU
ZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcDxKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yPihleGVjLCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0TmFtZWRD
b25zdHJ1Y3RvciogdG9UZXN0TmFtZWRDb25zdHJ1Y3RvcihKU0M6OkpTVmFsdWUgdmFsdWUpCit7
CisgICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKCZKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpzX2lu
Zm8pID8gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcio+KGFzT2JqZWN0KHZhbHVl
KSktPmltcGwoKSA6IDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjMyNTVjNjIyOTM0NDcxMzY4YmUzMmQ3YWMxYTkyYzk2ZWFhZDhiZTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpZm5kZWYgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
T2JqZWN0UHJvdG90eXBlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0
TmFtZWRDb25zdHJ1Y3RvciA6IHB1YmxpYyBKU0RPTVdyYXBwZXIgeworcHVibGljOgorICAgIHR5
cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3IqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3ROYW1lZENvbnN0cnVjdG9yPiBpbXBsKQorICAg
IHsKKyAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvciogcHRyID0gbmV3IChKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEo
KS5oZWFwKSkgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwg
aW1wbCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlND
OjpQcm9wZXJ0eVNsb3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvIHNfaW5mbzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBUZXN0TmFtZWRDb25zdHJ1
Y3RvciogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQorCitwcml2YXRlOgor
ICAgIFJlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gbV9pbXBsOworcHJvdGVjdGVkOgorICAg
IEpTVGVzdE5hbWVkQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+KTsKKyAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpT
dHJ1Y3R1cmVGbGFnczsKK307CisKK2NsYXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JPd25lciA6
IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpX
ZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQqLCBUZXN0TmFtZWRD
b25zdHJ1Y3RvciopCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yT3duZXIsIGpzVGVzdE5hbWVkQ29uc3RydWN0b3JPd25lciwgKCkpOworICAgIHJldHVy
biAmanNUZXN0TmFtZWRDb25zdHJ1Y3Rvck93bmVyOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBl
ckNvbnRleHQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgVGVzdE5hbWVkQ29uc3RydWN0b3IqKQor
eworICAgIHJldHVybiB3b3JsZDsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROYW1lZENvbnN0cnVjdG9yKik7CitUZXN0TmFt
ZWRDb25zdHJ1Y3RvciogdG9UZXN0TmFtZWRDb25zdHJ1Y3RvcihKU0M6OkpTVmFsdWUpOworCitj
bGFzcyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25G
aW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
QmFzZTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclBy
b3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
eworICAgICAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU+KGdsb2JhbERh
dGEuaGVhcCkpIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
clByb3RvdHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkgeyB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9OworCitj
bGFzcyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJs
aWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rv
ciogcHRyID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29u
c3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0
b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRp
YyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpT
dHJ1Y3R1cmVGbGFnczsKK307CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpKU1ZhbHVlIGpzVGVz
dE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
YTIzYWRkYjczMDU1ZDA5MjllYzM2ZTgzMTZmOTkxNzAyODlmOWEzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5hbWVk
Q29uc3RydWN0b3IuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdt
YWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4KKworI2lmIFdF
QktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAorCitAaW50
ZXJmYWNlIERPTVRlc3ROYW1lZENvbnN0cnVjdG9yIDogRE9NT2JqZWN0CitAZW5kCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvT2JqQy9ET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NjJj
ZTg5NDFiYzI0Y2ZlOTUxMDFiYzBmZDNkMzMyMDRmMTdhOWU5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5hbWVkQ29u
c3RydWN0b3IubW0KQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKKworI2ltcG9ydCAi
RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKKworI2ltcG9ydCAiRE9NQmxvYkludGVybmFsLmgi
CisjaW1wb3J0ICJET01DU1NSdWxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUNTU1ZhbHVlSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUV2ZW50SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTU5vZGVJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NU3R5bGVTaGVldEludGVybmFsLmgiCisjaW1wb3J0ICJE
T01UZXN0TmFtZWRDb25zdHJ1Y3RvckludGVybmFsLmgiCisjaW1wb3J0ICJFeGNlcHRpb25IYW5k
bGVycy5oIgorI2ltcG9ydCAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisjaW1wb3J0ICJUZXN0
TmFtZWRDb25zdHJ1Y3Rvci5oIgorI2ltcG9ydCAiVGhyZWFkQ2hlY2suaCIKKyNpbXBvcnQgIldl
YkNvcmVPYmpDRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRlLmgiCisj
aW1wb3J0IDx3dGYvR2V0UHRyLmg+CisKKyNkZWZpbmUgSU1QTCByZWludGVycHJldF9jYXN0PFdl
YkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKj4oX2ludGVybmFsKQorCitAaW1wbGVtZW50YXRp
b24gRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IKKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYg
KFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtET01UZXN0TmFtZWRD
b25zdHJ1Y3RvciBjbGFzc10sIHNlbGYpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoX2lu
dGVybmFsKQorICAgICAgICBJTVBMLT5kZXJlZigpOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30K
KworLSAodm9pZClmaW5hbGl6ZQoreworICAgIGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwt
PmRlcmVmKCk7CisgICAgW3N1cGVyIGZpbmFsaXplXTsKK30KKworQGVuZAorCitXZWJDb3JlOjpU
ZXN0TmFtZWRDb25zdHJ1Y3RvciogY29yZShET01UZXN0TmFtZWRDb25zdHJ1Y3RvciAqd3JhcHBl
cikKK3sKKyAgICByZXR1cm4gd3JhcHBlciA/IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVz
dE5hbWVkQ29uc3RydWN0b3IqPih3cmFwcGVyLT5faW50ZXJuYWwpIDogMDsKK30KKworRE9NVGVz
dE5hbWVkQ29uc3RydWN0b3IgKmtpdChXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvciogdmFs
dWUpCit7CisgICAgeyBET01fQVNTRVJUX01BSU5fVEhSRUFEKCk7IFdlYkNvcmVUaHJlYWRWaW9s
YXRpb25DaGVja1JvdW5kT25lKCk7IH07CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBpZiAoRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IgKndyYXBwZXIgPSBnZXRET01X
cmFwcGVyKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFtbd3JhcHBlciByZXRhaW5dIGF1dG9yZWxl
YXNlXTsKKyAgICBET01UZXN0TmFtZWRDb25zdHJ1Y3RvciAqd3JhcHBlciA9IFtbRE9NVGVzdE5h
bWVkQ29uc3RydWN0b3IgYWxsb2NdIF9pbml0XTsKKyAgICB3cmFwcGVyLT5faW50ZXJuYWwgPSBy
ZWludGVycHJldF9jYXN0PERPTU9iamVjdEludGVybmFsKj4odmFsdWUpOworICAgIHZhbHVlLT5y
ZWYoKTsKKyAgICBhZGRET01XcmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gW3dy
YXBwZXIgYXV0b3JlbGVhc2VdOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5hbWVkQ29uc3RydWN0b3JJbnRlcm5hbC5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5hbWVkQ29u
c3RydWN0b3JJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViNDkwNGIyNzVlODk3YWQyZmM4NDlkYjcw
ZDlhOGJhOGQyODM1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0TmFtZWRDb25zdHJ1Y3RvckludGVybmFsLmgKQEAg
LTAsMCArMSwzOCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFdlYkNv
cmUvRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuaD4KKworI2lmIFdFQktJVF9WRVJTSU9OX01BWF9B
TExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgY2xhc3MgVGVzdE5hbWVkQ29uc3RydWN0b3I7Cit9CisKK1dlYkNvcmU6OlRlc3ROYW1lZENv
bnN0cnVjdG9yKiBjb3JlKERPTVRlc3ROYW1lZENvbnN0cnVjdG9yICopOworRE9NVGVzdE5hbWVk
Q29uc3RydWN0b3IgKmtpdChXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvciopOworCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
TmFtZWRDb25zdHJ1Y3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdE5hbWVkQ29uc3RydWN0b3IuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2ZWM4YTllNzE1NDFlNTQ2
Y2MxYTU2MzU0NjQ2MzI2YmM4NGI3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkQ29uc3RydWN0b3IuaWRsCkBAIC0wLDAg
KzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zdHJBcmcsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFc3RyQXJnLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gVGhpcyBJREwgZmlsZSBpcyBmb3IgdGVzdGluZyB0aGUg
YmluZGluZ3MgY29kZSBnZW5lcmF0b3IgYW5kIGZvciB0cmFja2luZworLy8gY2hhbmdlcyBpbiBp
dHMgb3VwdXQuCittb2R1bGUgdGVzdCB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQWN0aXZl
RE9NT2JqZWN0LAorICAgICAgICBOYW1lZENvbnN0cnVjdG9yKGluIERPTVN0cmluZyBzdHIxLCBp
biBbT3B0aW9uYWw9Q2FsbFdpdGhEZWZhdWx0VmFsdWVdIERPTVN0cmluZyBzdHIyLCBpbiBbT3B0
aW9uYWw9Q2FsbFdpdGhOdWxsVmFsdWVdIERPTVN0cmluZyBzdHIzKSwKKyAgICAgICAgQ29uc3Ry
dWN0b3JSYWlzZXNFeGNlcHRpb24KKyAgICBdIFRlc3ROYW1lZENvbnN0cnVjdG9yIHsKKyAgICB9
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3ZWYz
MDI4ODFlODdkNGQ2MWFkMmI0MzRmNmExZjFlOWViNDgyYzkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHAKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIgorCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIK
KyNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgor
I2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2lu
Y2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dyYXBw
ZXJUeXBlSW5mbyBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjppbmZvID0geyBWOFRlc3ROYW1lZENv
bnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSwgVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6ZGVyZWZPYmpl
Y3QsIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OnRvQWN0aXZlRE9NT2JqZWN0LCAwIH07CisKK25h
bWVzcGFjZSBUZXN0TmFtZWRDb25zdHJ1Y3RvckludGVybmFsIHsKKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IHZvaWQgVjhfVVNFKFQpIHsgfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0TmFtZWRDb25z
dHJ1Y3RvckludGVybmFsCisKK1dyYXBwZXJUeXBlSW5mbyBWOFRlc3ROYW1lZENvbnN0cnVjdG9y
Q29uc3RydWN0b3I6OmluZm8gPSB7IFY4VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6
R2V0VGVtcGxhdGUsIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OmRlcmVmT2JqZWN0LCBWOFRlc3RO
YW1lZENvbnN0cnVjdG9yOjp0b0FjdGl2ZURPTU9iamVjdCwgMCB9OworCitzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvckNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE5h
bWVkQ29uc3RydWN0b3IuQ29uc3RydWN0b3IiKTsKKworICAgIGlmICghYXJncy5Jc0NvbnN0cnVj
dENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0
b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIFY4UHJveHk6OlR5cGVFcnJvcik7
CisKKyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0b3JNb2Rl
OjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworCisg
ICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250ZXh0
KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIlRlc3ROYW1l
ZENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZnJhbWUgaXMgdW5hdmFpbGFibGUi
LCBWOFByb3h5OjpSZWZlcmVuY2VFcnJvcik7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcigiVGVzdE5hbWVkQ29uc3RydWN0b3IgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1
bWVudCBpcyB1bmF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVycm9yKTsKKworICAgIC8v
IE1ha2Ugc3VyZSB0aGUgZG9jdW1lbnQgaXMgYWRkZWQgdG8gdGhlIERPTSBOb2RlIG1hcC4gT3Ro
ZXJ3aXNlLCB0aGUgVGVzdE5hbWVkQ29uc3RydWN0b3IgaW5zdGFuY2UKKyAgICAvLyBtYXkgZW5k
IHVwIGJlaW5nIHRoZSBvbmx5IG5vZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY29sbGVj
dGVkIHByZW1hdHVyZWx5LgorICAgIHRvVjgoZG9jdW1lbnQpOworCisgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVu
dHMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBz
dHIxLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBNaXNzaW5nSXNVbmRlZmluZWQp
KTsKKyAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVy
PD4sIHN0cjIsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIE1pc3NpbmdJc1VuZGVm
aW5lZCkpOworICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJh
bWV0ZXI8Piwgc3RyMywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMiwgTWlzc2luZ0lz
RW1wdHkpKTsKKworICAgIFJlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gb2JqID0gVGVzdE5h
bWVkQ29uc3RydWN0b3I6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoZG9jdW1lbnQsIHN0cjEsIHN0
cjIsIHN0cjMsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIFY4
RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmVjhUZXN0TmFtZWRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yOjppbmZvLCBvYmouZ2V0KCkpOworICAgIG9iai0+cmVmKCk7Cisg
ICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3Qob2JqLmdldCgp
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsKKyAgICBy
ZXR1cm4gYXJncy5Ib2xkZXIoKTsKKyAgZmFpbDoKKyAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7
Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROYW1lZENv
bnN0cnVjdG9yQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKCkKK3sKKyAgICBzdGF0aWMgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNhY2hlZFRlbXBsYXRlOworICAgIGlmICgh
Y2FjaGVkVGVtcGxhdGUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gY2FjaGVkVGVtcGxhdGU7
CisKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlv
blRlbXBsYXRlPiByZXN1bHQgPSB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFY4VGVzdE5hbWVk
Q29uc3RydWN0b3JDb25zdHJ1Y3RvckNhbGxiYWNrKTsKKworICAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0VGVtcGxhdGU+IGluc3RhbmNlID0gcmVzdWx0LT5JbnN0YW5jZVRlbXBsYXRlKCk7CisgICAg
aW5zdGFuY2UtPlNldEludGVybmFsRmllbGRDb3VudChWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpp
bnRlcm5hbEZpZWxkQ291bnQpOworICAgIHJlc3VsdC0+U2V0Q2xhc3NOYW1lKHY4OjpTdHJpbmc6
Ok5ldygiVGVzdE5hbWVkQ29uc3RydWN0b3IiKSk7CisgICAgcmVzdWx0LT5Jbmhlcml0KFY4VGVz
dE5hbWVkQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKCkpOworCisgICAgY2FjaGVkVGVtcGxhdGUg
PSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhyZXN1bHQpOworICAg
IHJldHVybiBjYWNoZWRUZW1wbGF0ZTsKK30KKworc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3ROYW1lZENvbnN0cnVjdG9yVGVtcGxhdGUo
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MpCit7CisgICAgZGVzYy0+
UmVhZE9ubHlQcm90b3R5cGUoKTsKKworICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBkZWZh
dWx0U2lnbmF0dXJlOworICAgIGRlZmF1bHRTaWduYXR1cmUgPSBjb25maWd1cmVUZW1wbGF0ZShk
ZXNjLCAiVGVzdE5hbWVkQ29uc3RydWN0b3IiLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4oKSwgVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6aW50ZXJuYWxGaWVsZENvdW50LAor
ICAgICAgICAwLCAwLAorICAgICAgICAwLCAwKTsKKyAgICBVTlVTRURfUEFSQU0oZGVmYXVsdFNp
Z25hdHVyZSk7IC8vIEluIHNvbWUgY2FzZXMsIGl0IHdpbGwgbm90IGJlIHVzZWQuCisgICAgCisK
KyAgICAvLyBDdXN0b20gdG9TdHJpbmcgdGVtcGxhdGUKKyAgICBkZXNjLT5TZXQoZ2V0VG9TdHJp
bmdOYW1lKCksIGdldFRvU3RyaW5nVGVtcGxhdGUoKSk7CisgICAgcmV0dXJuIGRlc2M7Cit9CisK
K3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROYW1lZENvbnN0cnVj
dG9yOjpHZXRSYXdUZW1wbGF0ZSgpCit7CisgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRh
dGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOworICAgIFY4QmluZGluZ1Bl
cklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVt
cGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKKyAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBs
YXRlTWFwKCkuZW5kKCkpCisgICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKworICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOworICAgIGRhdGEtPnJhd1Rl
bXBsYXRlTWFwKCkuYWRkKCZpbmZvLCB0ZW1wbCk7CisgICAgcmV0dXJuIHRlbXBsOworfQorCit2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rv
cjo6R2V0VGVtcGxhdGUoKQoreworICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0g
VjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKKyAgICBWOEJpbmRpbmdQZXJJc29s
YXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFw
KCkuZmluZCgmaW5mbyk7CisgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVu
ZCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisKKyAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0KKyAgICAgICAgQ29uZmlndXJlVjhUZXN0TmFtZWRDb25zdHJ1Y3RvclRlbXBsYXRl
KEdldFJhd1RlbXBsYXRlKCkpOworICAgIGRhdGEtPnRlbXBsYXRlTWFwKCkuYWRkKCZpbmZvLCB0
ZW1wbCk7CisgICAgcmV0dXJuIHRlbXBsOworfQorCitib29sIFY4VGVzdE5hbWVkQ29uc3RydWN0
b3I6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gR2V0UmF3VGVtcGxhdGUoKS0+SGFzSW5zdGFuY2UodmFsdWUpOworfQorCitBY3RpdmVET01P
YmplY3QqIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OnRvQWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIHJldHVybiB0b05hdGl2ZShvYmplY3QpOwor
fSAgICAgIAorCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6
OndyYXBTbG93KFRlc3ROYW1lZENvbnN0cnVjdG9yKiBpbXBsKQoreworICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd3JhcHBlcjsKKyAgICBWOFByb3h5KiBwcm94eSA9IDA7CisgICAgd3JhcHBl
ciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChwcm94eSwgJmluZm8sIGltcGwp
OworICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisK
KyAgICBpbXBsLT5yZWYoKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVy
SGFuZGxlID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKTsKKworICAg
IGlmICghaGFzRGVwZW5kZW50TGlmZXRpbWUpCisgICAgICAgIHdyYXBwZXJIYW5kbGUuTWFya0lu
ZGVwZW5kZW50KCk7CisgICAgZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCkuc2V0KGltcGwsIHdyYXBw
ZXJIYW5kbGUpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit2b2lkIFY4VGVzdE5hbWVkQ29u
c3RydWN0b3I6OmRlcmVmT2JqZWN0KHZvaWQqIG9iamVjdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxU
ZXN0TmFtZWRDb25zdHJ1Y3Rvcio+KG9iamVjdCktPmRlcmVmKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNm
NmUzMjdkZWJhNWQyM2M4Nzc0NGFlMjU2YWY0ZDM0NTQ4OWM5YmEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25z
dHJ1Y3Rvci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaWZuZGVm
IFY4VGVzdE5hbWVkQ29uc3RydWN0b3JfaAorI2RlZmluZSBWOFRlc3ROYW1lZENvbnN0cnVjdG9y
X2gKKworI2luY2x1ZGUgIlRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhET01X
cmFwcGVyLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCisjaW5jbHVkZSA8djguaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWOFRlc3ROYW1lZENvbnN0cnVjdG9y
Q29uc3RydWN0b3IgeworcHVibGljOgorICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKKyAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZv
IGluZm87Cit9OworCitjbGFzcyBWOFRlc3ROYW1lZENvbnN0cnVjdG9yIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNEZXBlbmRlbnRMaWZldGltZSA9IHRydWU7CisgICAgc3Rh
dGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKyAgICBzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFJhd1RlbXBsYXRlKCk7Cisg
ICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0
ZSgpOworICAgIHN0YXRpYyBUZXN0TmFtZWRDb25zdHJ1Y3RvciogdG9OYXRpdmUodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxUZXN0TmFtZWRDb25zdHJ1Y3Rvcio+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5h
bEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CisgICAgfQorICAgIGlubGluZSBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3ROYW1lZENvbnN0cnVjdG9yKik7Cisg
ICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOworICAgIHN0YXRpYyBXcmFwcGVyVHlw
ZUluZm8gaW5mbzsKKyAgICBzdGF0aWMgQWN0aXZlRE9NT2JqZWN0KiB0b0FjdGl2ZURPTU9iamVj
dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgICBzdGF0aWMgY29uc3QgaW50IGludGVybmFs
RmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOworICAg
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGV4aXN0aW5nV3JhcHBlcihUZXN0TmFtZWRD
b25zdHJ1Y3RvciopOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXBTbG93KFRlc3ROYW1lZENvbnN0cnVjdG9yKik7Cit9OworCitBTFdBWVNfSU5MSU5F
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6ZXhpc3RpbmdX
cmFwcGVyKFRlc3ROYW1lZENvbnN0cnVjdG9yKiBpbXBsKQoreworICAgIHJldHVybiBnZXRBY3Rp
dmVET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4g
VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6d3JhcChUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCkK
K3sKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZXhpc3RpbmdXcmFw
cGVyKGltcGwpOworICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OndyYXBT
bG93KGltcGwpOworfQorCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdE5h
bWVkQ29uc3RydWN0b3IqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4g
djg6Ok51bGwoKTsKKyAgICByZXR1cm4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6d3JhcChpbXBs
KTsKK30KK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0
TmFtZWRDb25zdHJ1Y3RvciA+IGltcGwpCit7CisgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSk7
Cit9Cit9CisKKyNlbmRpZiAvLyBWOFRlc3ROYW1lZENvbnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmlkbAppbmRleCA0ZThmMDY3MGY5ZjI3NmEwYzY0M2UyYjIxYzBlYzJhZmM1YzQz
Mzg2Li5lYzBjMzFmMDZkZjMxYjQ2ZWM0Y2FiOTllM2U5ZjMyYjA3MmI4MDQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3cuaWRsCkBAIC00OTAsOCArNDkwLDggQEAgbW9kdWxlIHdpbmRvdyB7CiAg
ICAgICAgIGF0dHJpYnV0ZSBIVE1MQWxsQ29sbGVjdGlvbkNvbnN0cnVjdG9yIEhUTUxBbGxDb2xs
ZWN0aW9uOwogICAgICAgICBhdHRyaWJ1dGUgSFRNTFVua25vd25FbGVtZW50Q29uc3RydWN0b3Ig
SFRNTFVua25vd25FbGVtZW50OwogCi0gICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVy
XSBIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciBJbWFnZTsgLy8gVXNhYmxl
IHdpdGggbmV3IG9wZXJhdG9yCi0gICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyXSBI
VE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IgT3B0aW9uOyAvLyBVc2FibGUg
d2l0aCBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXIsIEN1
c3RvbUNvbnN0cnVjdG9yXSBIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciBJ
bWFnZTsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCisgICAgICAgIGF0dHJpYnV0ZSBbSlND
Q3VzdG9tR2V0dGVyLCBDdXN0b21Db25zdHJ1Y3Rvcl0gSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yIE9wdGlvbjsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCiAKICAg
ICAgICAgYXR0cmlidXRlIENhbnZhc1BhdHRlcm5Db25zdHJ1Y3RvciBDYW52YXNQYXR0ZXJuOwog
ICAgICAgICBhdHRyaWJ1dGUgQ2FudmFzR3JhZGllbnRDb25zdHJ1Y3RvciBDYW52YXNHcmFkaWVu
dDsKQEAgLTYyNyw3ICs2MjcsNyBAQCBtb2R1bGUgd2luZG93IHsKIAogICAgICAgICBhdHRyaWJ1
dGUgU3RvcmFnZUNvbnN0cnVjdG9yIFN0b3JhZ2U7CiAKLSAgICAgICAgYXR0cmlidXRlIFtKU0ND
dXN0b21HZXR0ZXIsIENvbmRpdGlvbmFsPVZJREVPLCBFbmFibGVkQXRSdW50aW1lXSBIVE1MQXVk
aW9FbGVtZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciBBdWRpbzsgLy8gVXNhYmxlIHdpdGggdGhl
IG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlciwgQ3VzdG9t
Q29uc3RydWN0b3IsIENvbmRpdGlvbmFsPVZJREVPLCBFbmFibGVkQXRSdW50aW1lXSBIVE1MQXVk
aW9FbGVtZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciBBdWRpbzsgLy8gVXNhYmxlIHdpdGggdGhl
IG5ldyBvcGVyYXRvcgogICAgICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPVZJREVPLCBFbmFi
bGVkQXRSdW50aW1lXSBIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IgSFRNTEF1ZGlvRWxlbWVu
dDsKICAgICAgICAgYXR0cmlidXRlIFtDb25kaXRpb25hbD1WSURFTywgRW5hYmxlZEF0UnVudGlt
ZV0gSFRNTE1lZGlhRWxlbWVudENvbnN0cnVjdG9yIEhUTUxNZWRpYUVsZW1lbnQ7CiAgICAgICAg
IGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9VklERU8sIEVuYWJsZWRBdFJ1bnRpbWVdIEhUTUxWaWRl
b0VsZW1lbnRDb25zdHJ1Y3RvciBIVE1MVmlkZW9FbGVtZW50Owo=
</data>
<flag name="review"
          id="112651"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>