<?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>72055</bug_id>
          
          <creation_ts>2011-11-10 13:54:44 -0800</creation_ts>
          <short_desc>CodeGeneratorV8.pm can generate Event constructors</short_desc>
          <delta_ts>2011-11-10 14:45:27 -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>71379</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>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>500241</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-10 13:54:44 -0800</bug_when>
    <thetext>CodeGeneratorV8.pm implements the following two IDLs and generates Event constructors:
- [ConstructorTemplate=Event] IDL indicates that CodeGenerator should generate an Event constructor.
- [InitializedByConstructor] IDL on an attribute indicates that the attribute can be initialized by the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500257</commentid>
    <comment_count>1</comment_count>
      <attachid>114564</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-10 14:04:18 -0800</bug_when>
    <thetext>Created attachment 114564
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500261</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-10 14:07:18 -0800</bug_when>
    <thetext>Attachment 114564 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/CPP/WebDOMTestEventConstructor.cpp:28:  wtf includes should be &lt;wtf/file.h&gt; instead of &quot;wtf/file.h&quot;.  [build/include] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.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/WebKitDOMTestEventConstructor.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/WebKitDOMTestEventConstructor.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/WebKitDOMTestEventConstructor.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.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/WebKitDOMTestEventConstructor.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/WebKitDOMTestEventConstructor.cpp:129:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:154:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:193:  Extra space between return and WEBKIT_DOM_TEST_EVENT_CONSTRUCTOR  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/ObjC/DOMTestEventConstructorInternal.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventConstructorPrivate.h:21:  #ifndef header guard has wrong style, please use: WebKitDOMTestEventConstructorPrivate_h  [build/header_guard] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventConstructorPrivate.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventConstructorPrivate.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 15 in 21 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>500285</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-10 14:25:04 -0800</bug_when>
    <thetext>As I mention on the parent bug, I wonder if we can use the fact that an interface inherits from Event as the signal that it should use the Event constructor template.  (Although having an IDL attribute is also a nice explicit signal.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500291</commentid>
    <comment_count>4</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-10 14:31:28 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; As I mention on the parent bug, I wonder if we can use the fact that an interface inherits from Event as the signal that it should use the Event constructor template.  (Although having an IDL attribute is also a nice explicit signal.)

Ah, I got it. As you pointed out, it seems to require the refactoring to load all the IDL into the code generator at once, (although I would prefer the explicit signal.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500292</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-10 14:32:19 -0800</bug_when>
    <thetext>Ok.  Let&apos;s keep it explicit.  We can change our minds later if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500304</commentid>
    <comment_count>6</comment_count>
      <attachid>114576</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-10 14:41:38 -0800</bug_when>
    <thetext>Created attachment 114576
patch for commit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500306</commentid>
    <comment_count>7</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-10 14:44:07 -0800</bug_when>
    <thetext>Committed r99900: &lt;http://trac.webkit.org/changeset/99900&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500310</commentid>
    <comment_count>8</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-11-10 14:45:27 -0800</bug_when>
    <thetext>Committed it manually to avoid style check errors of CPP/GObject/ObjC (which are unrelated to this patch).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114564</attachid>
            <date>2011-11-10 14:04:18 -0800</date>
            <delta_ts>2011-11-10 14:24:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72055-20111110140417.patch</filename>
            <type>text/plain</type>
            <size>74029</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk4NjUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0NjYxNGYzNjFkMWJjNTg5
YWY2YmE0N2YzNzI1MDkxOGI3ZjQ2NDhiLi5iZWI5YjViODQyZTY0NjMwMDFjZjk1ZWMyMzg3MDZl
YzBjYzU3MDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTE3IEBACisyMDExLTExLTEwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBDb2RlR2VuZXJhdG9y
VjgucG0gY2FuIGdlbmVyYXRlIEV2ZW50IGNvbnN0cnVjdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIENvZGVHZW5lcmF0
b3JWOC5wbSBnZW5lcmF0ZSBFdmVudCBjb25zdHJ1Y3RvcnMKKyAgICAgICAgYW5kIHJlcGxhY2Vz
IGEgY3VzdG9tIGNvbnN0cnVjdG9yIG9mIEV2ZW50IHdpdGggdGhlIGdlbmVyYXRlZCBvbmUuCisg
ICAgICAgIEFmdGVyIHRoaXMgcGF0Y2ggaXMgbGFuZGVkIHdpdGhvdXQgcmVncmVzc2lvbiwKKyAg
ICAgICAgSSB3aWxsIHJlcGxhY2UgY3VzdG9tIGNvbnN0cnVjdG9ycyBvZiBhbGwgb3RoZXIgRXZl
bnRzLgorICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBJRExzOgorCisgICAg
ICAgIC0gW0NvbnN0cnVjdG9yVGVtcGxhdGU9RXZlbnRdIElETCBpbmRpY2F0ZXMgdGhhdCBDb2Rl
R2VuZXJhdG9yIHNob3VsZAorICAgICAgICBnZW5lcmF0ZSBhbiBFdmVudCBjb25zdHJ1Y3Rvci4K
KyAgICAgICAgLSBbSW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yXSBJREwgb24gYW4gYXR0cmlidXRl
IGluZGljYXRlcyB0aGF0CisgICAgICAgIHRoZSBhdHRyaWJ1dGUgY2FuIGJlIGluaXRpYWxpemVk
IGJ5IHRoZSBjb25zdHJ1Y3Rvci4KKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvY29uc3Ry
dWN0b3JzL2V2ZW50LWNvbnN0cnVjdG9ycy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50
cy9jb25zdHJ1Y3RvcnMvY3VzdG9tLWV2ZW50LWNvbnN0cnVjdG9yLmh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QvZXZlbnRzL2NvbnN0cnVjdG9ycy9wcm9ncmVzcy1ldmVudC1jb25zdHJ1Y3Rvci5o
dG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAg
ICAgICAgKEdlbmVyYXRlSGVhZGVyKTogQWRkZWQgYSBoZWFkZXIgZm9yIGZpbGxYWFhYRXZlbnRJ
bml0KC4uLikuCisgICAgICAgIChJc0NvbnN0cnVjdGFibGUpOiBKdWRnZXMgaWYgYSBnaXZlbiBp
bnRlcmZhY2UgaXMgY29uc3RydWN0YWJsZS4KKyAgICAgICAgKElzQ29uc3RydWN0b3JUZW1wbGF0
ZSk6IEp1ZGdlcyBpZiBhIGdpdmVuIGludGVyZmFjZSBoYXMgYSBnaXZlbiB0ZW1wbGF0ZSwgZS5n
LiBqdWRnZXMgaWYgYW4gaW50ZXJmYWNlIGhhcyBbQ29uc3RydWN0b3JUZW1wbGF0ZT1FdmVudF0u
CisgICAgICAgIChHZW5lcmF0ZUV2ZW50Q29uc3RydWN0b3JDYWxsYmFjayk6IEdlbmVyYXRlcyBh
biBFdmVudCBjb25zdHJ1Y3Rvci4gVGhlIGdlbmVyYXRlZCBjb2RlIGlzIHRoZSBzYW1lIGFzIHRo
ZSBjb2RlIHRoYXQgaGFkIGJlZW4gd3JpdHRlbiBpbiBWOEV2ZW50Q29uc3RydWN0b3JzLmNwcC4K
KyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOiBHZW5lcmF0ZXMgYW4gRXZlbnQgY29u
c3RydWN0b3IgaWYgW0NvbnN0cnVjdG9yVGVtcGxhdGU9RXZlbnRdIGlzIHNwZWNpZmllZC4KKyAg
ICAgICAgKiBkb20vRXZlbnQuaWRsOiBBZGRlZCBbQ29uc3RydWN0b3JUZW1wbGF0ZT1FdmVudF0g
SURMLiBBZGRlZCBbSW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yXSBJREwgdG8gYXR0cmlidXRlcyB0
aGF0IGNhbiBiZSBpbml0aWFsaXplZCBieSBhIGNvbnN0cnVjdG9yLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFdmVudENvbnN0cnVjdG9yLmlkbDogQWRkZWQgYSBuZXcg
cnVuLWJpbmRpbmdzLXRlc3QuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6IFVwZGF0ZWQgYSBydW4tYmluZGluZ3MtdGVz
dHMgcmVzdWx0LgorICAgICAgICAoV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6OldlYkRPTVRl
c3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZTo6V2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2
YXRlKToKKyAgICAgICAgKFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yOjpXZWJET01UZXN0RXZl
bnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yOjppbXBsKToKKyAg
ICAgICAgKFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yOjp+V2ViRE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3IpOgorICAgICAgICAoV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6OmF0dHIxKToKKyAg
ICAgICAgKFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yOjphdHRyMik6CisgICAgICAgICh0b1dl
YkNvcmUpOgorICAgICAgICAodG9XZWJLaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IuaDogRGl0dG8uCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0
b3IuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9nZXRfYXR0cjEpOgorICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMik6CisgICAgICAgIChXZWJLaXQ6OmNv
cmUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2ZpbmFsaXpl
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9zZXRfcHJvcGVy
dHkpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9wcm9w
ZXJ0eSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfY29uc3Ry
dWN0ZWQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2NsYXNz
X2luaXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2luaXQp
OgorICAgICAgICAoV2ViS2l0Ojp3cmFwVGVzdEV2ZW50Q29uc3RydWN0b3IpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVj
dG9yLmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZS5oOiBEaXR0by4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpK
U1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpKU1Rlc3RFdmVudENvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmNyZWF0
ZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEV2ZW50Q29uc3RydWN0b3JBdHRyMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RFdmVudENv
bnN0cnVjdG9yQXR0cjIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6
OmdldENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9UZXN0RXZlbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaDogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29u
c3RydWN0b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2
ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5oOiBEaXR0
by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0RXZlbnRDb25z
dHJ1Y3Rvci5tbTogRGl0dG8uCisgICAgICAgICgtW0RPTVRlc3RFdmVudENvbnN0cnVjdG9yIGRl
YWxsb2NdKToKKyAgICAgICAgKC1bRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgZmluYWxpemVdKToK
KyAgICAgICAgKC1bRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgYXR0cjFdKToKKyAgICAgICAgKC1b
RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgYXR0cjJdKToKKyAgICAgICAgKGNvcmUpOgorICAgICAg
ICAoa2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0RXZl
bnRDb25zdHJ1Y3RvckludGVybmFsLmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcDogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvckludGVybmFsOjpWOF9VU0UpOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3JJbnRlcm5hbDo6YXR0cjFBdHRyR2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9ySW50ZXJuYWw6OmF0dHIyQXR0
ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVWOFRlc3RFdmVudENvbnN0cnVj
dG9yVGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6
R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6SGFzSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6d3JhcFNsb3cpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6
ZGVyZWZPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RF
dmVudENvbnN0cnVjdG9yLmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRD
b25zdHJ1Y3Rvcjo6dG9OYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRDb25z
dHJ1Y3Rvcjo6ZXhpc3RpbmdXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEV2ZW50
Q29uc3RydWN0b3I6OndyYXApOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5oOiBEaXR0by4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5oOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5oOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0T2JqLmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaDogRGl0dG8uCisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDb25zdHJ1Y3RvcnMuY3BwOiBEaXR0by4KKwog
MjAxMS0xMS0xMCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IHdyb25nIEpTT04uc3RyaW5naWZ5IHVzZWQgaW4gd2ViSW5zcGVj
dG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCkgYmFja2VuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBiMzMzOTgyNTczMzQw
NzM2Y2JmNjE0NmM3MzdmNzE5NGM5NjJmYmFjLi5jNTE2ZTU0OGJkOTQ0MjAzZjdhOTRjNDdjMzA4
MWI5NWYzZjM1MjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMzA3LDIxICszMDcsMjQgQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG50ZW1wbGF0ZTx0eXBlbmFt
ZSBQcm9wZXJ0eVR5cGU+IGNsYXNzIFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY7XG4iKTsKICAgICAg
ICAgfQogICAgIH0KLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5jbGFzcyBGbG9hdFJlY3Q7
XG4iKSBpZiAkc3ZnUHJvcGVydHlUeXBlICYmICRzdmdQcm9wZXJ0eVR5cGUgZXEgIkZsb2F0UmVj
dCI7CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiY2xhc3MgRmxvYXRSZWN0O1xuIikgaWYgJHN2Z1Byb3BlcnR5VHlwZSAmJiAkc3Zn
UHJvcGVydHlUeXBlIGVxICJGbG9hdFJlY3QiOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJj
bGFzcyBPcHRpb25zT2JqZWN0O1xuIikgaWYgSXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRkYXRhTm9k
ZSwgIkV2ZW50Iik7CiAKICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGVGb3JDb252
ZXJzaW9ucygkZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1lKTsKICAgICBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7CiAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKLQogY2xhc3MgVjgke25hdGl2ZVR5cGV9Q29uc3RydWN0
b3IgewogcHVibGljOgogICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gR2V0VGVtcGxhdGUoKTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CiB9
OworCiBFTkQKICAgICB9CiAKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5jbGFzcyAkY2xh
c3NOYW1lIHtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyAkY2xhc3NOYW1l
IHtcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwdWJsaWM6XG4iKTsKIAogICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzRGVwZW5kZW50TGlm
ZXRpbWUgPSAiKTsKQEAgLTM5Myw3ICszOTYsNyBAQCBFTkQKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1Y3Rv
ciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4Q3VzdG9tQ29uc3RydWN0
b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9KSB7
CisgICAgaWYgKElzQ29uc3RydWN0YWJsZSgkZGF0YU5vZGUpKSB7CiAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsIDw8RU5EKTsKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNv
bnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwogRU5ECkBAIC01MDYsNyAr
NTA5LDExIEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCAk
e25hdGl2ZVR5cGV9ID4gaW1wbCR7Zm9yY2VOZXdPYmplCiBFTkQKICAgICB9CiAKLSAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAifVxuXG4iKTsKKyAgICBpZiAoSXNDb25zdHJ1Y3RvclRlbXBsYXRl
KCRkYXRhTm9kZSwgIkV2ZW50IikpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxu
Ym9vbCBmaWxsJHtpbXBsQ2xhc3NOYW1lfUluaXQoJHtpbXBsQ2xhc3NOYW1lfUluaXQmLCBjb25z
dCBPcHRpb25zT2JqZWN0Jik7XG4iKTsKKyAgICB9CisKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiXG59XG5cbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWYgLy8gJGNsYXNz
TmFtZSIgLiAiX2hcbiIpOwogCiAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVD
b25kaXRpb25hbFN0cmluZygkZGF0YU5vZGUpOwpAQCAtNjkyLDYgKzY5OSwyMSBAQCBzdWIgSXNW
aXNpYmxlQWNyb3NzT3JpZ2lucwogICAgIHJldHVybiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDaGVja0RvbWFpblNlY3VyaXR5In0gJiYgISgkZGF0YU5vZGUtPm5hbWUgZXEgIkRP
TVdpbmRvdyIpOwogfQogCitzdWIgSXNDb25zdHJ1Y3RhYmxlCit7CisgICAgbXkgJGRhdGFOb2Rl
ID0gc2hpZnQ7CisKKyAgICByZXR1cm4gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q3VzdG9tQ29uc3RydWN0b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJW
OEN1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q29uc3RydWN0b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOENvbnN0
cnVjdG9yVGVtcGxhdGUifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25z
dHJ1Y3RvclRlbXBsYXRlIn07Cit9CisKK3N1YiBJc0NvbnN0cnVjdG9yVGVtcGxhdGUKK3sKKyAg
ICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkdGVtcGxhdGUgPSBzaGlmdDsKKworICAg
IHJldHVybiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhDb25zdHJ1Y3RvclRl
bXBsYXRlIn0gJiYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhDb25zdHJ1Y3Rv
clRlbXBsYXRlIn0gZXEgJHRlbXBsYXRlKSB8fCAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ29uc3RydWN0b3JUZW1wbGF0ZSJ9ICYmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNvbnN0cnVjdG9yVGVtcGxhdGUifSBlcSAkdGVtcGxhdGUpOworfQorCiBzdWIgR2Vu
ZXJhdGVEb21haW5TYWZlRnVuY3Rpb25HZXR0ZXIKIHsKICAgICBteSAkZnVuY3Rpb24gPSBzaGlm
dDsKQEAgLTE2MDYsNiArMTYyOCwxMzAgQEAgRU5ECiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJc
biIpOwogfQogCitzdWIgR2VuZXJhdGVFdmVudENvbnN0cnVjdG9yQ2FsbGJhY2sKK3sKKyAgICBt
eSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworCisg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIk9wdGlvbnNPYmplY3QuaCIpOworICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJWOEJpbmRpbmdNYWNyb3MuaCIpOworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVO
RCk7Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjgke2ltcGxDbGFzc05hbWV9Ojpjb25zdHJ1Y3Rv
ckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJE
T00uJHtpbXBsQ2xhc3NOYW1lfS5Db25zdHJ1Y3RvciIpOworCisgICAgaWYgKCFhcmdzLklzQ29u
c3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25z
dHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIiwgVjhQcm94eTo6VHlwZUVy
cm9yKTsKKworICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1Y3Rv
ck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7
CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisKKyAgICBTVFJJ
TkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHR5cGUsIGFy
Z3NbMF0pOworICAgICR7aW1wbENsYXNzTmFtZX1Jbml0IGV2ZW50SW5pdDsKKyAgICBpZiAoYXJn
cy5MZW5ndGgoKSA+PSAyKSB7CisgICAgICAgIEVYQ0VQVElPTl9CTE9DSyhPcHRpb25zT2JqZWN0
LCBvcHRpb25zLCBhcmdzWzFdKTsKKyAgICAgICAgaWYgKCFmaWxsJHtpbXBsQ2xhc3NOYW1lfUlu
aXQoZXZlbnRJbml0LCBvcHRpb25zKSkKKyAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisgICAgfQorCisgICAgUmVmUHRyPCR7aW1wbENsYXNzTmFtZX0+IGV2ZW50ID0gJHtpbXBs
Q2xhc3NOYW1lfTo6Y3JlYXRlKHR5cGUsIGV2ZW50SW5pdCk7CisKKyAgICBWOERPTVdyYXBwZXI6
OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIGV2ZW50LmdldCgpKTsKKyAgICBy
ZXR1cm4gdG9WOChldmVudC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworfQorCitib29sIGZp
bGwke2ltcGxDbGFzc05hbWV9SW5pdCgke2ltcGxDbGFzc05hbWV9SW5pdCYgZXZlbnRJbml0LCBj
b25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zKQoreworRU5ECisKKyAgICBmb3JlYWNoIG15ICRp
bnRlcmZhY2VCYXNlIChAeyRkYXRhTm9kZS0+cGFyZW50c30pIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsIDw8RU5EKTsKKyAgICBpZiAoIWZpbGwke2ludGVyZmFjZUJhc2V9SW5pdChldmVu
dEluaXQsIG9wdGlvbnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKK0VORAorICAgIH0KKwor
ICAgIGZvciAobXkgJGluZGV4ID0gMDsgJGluZGV4IDwgQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9
OyAkaW5kZXgrKykgeworICAgICAgICBteSAkYXR0cmlidXRlID0gQHskZGF0YU5vZGUtPmF0dHJp
YnV0ZXN9WyRpbmRleF07CisgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJJbml0aWFsaXplZEJ5Q29uc3RydWN0b3IifSkgeworICAgICAgICAg
ICAgbXkgJGF0dHJpYnV0ZU5hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBvcHRpb25zLmdldChcIiRhdHRyaWJ1dGVO
YW1lXCIsIGV2ZW50SW5pdC4kYXR0cmlidXRlTmFtZSk7XG4iKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0VORAorfQorCitzdWIgR2VuZXJhdGVFdmVudENvbnN0cnVjdG9yQ2FsbGJhY2sKK3sKKyAgICBt
eSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworCisg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIk9wdGlvbnNPYmplY3QuaCIpOworICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJWOEJpbmRpbmdNYWNyb3MuaCIpOworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVO
RCk7Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjgke2ltcGxDbGFzc05hbWV9Ojpjb25zdHJ1Y3Rv
ckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJE
T00uJHtpbXBsQ2xhc3NOYW1lfS5Db25zdHJ1Y3RvciIpOworCisgICAgaWYgKCFhcmdzLklzQ29u
c3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25z
dHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIiwgVjhQcm94eTo6VHlwZUVy
cm9yKTsKKworICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1Y3Rv
ck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7
CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisKKyAgICBTVFJJ
TkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHR5cGUsIGFy
Z3NbMF0pOworICAgICR7aW1wbENsYXNzTmFtZX1Jbml0IGV2ZW50SW5pdDsKKyAgICBpZiAoYXJn
cy5MZW5ndGgoKSA+PSAyKSB7CisgICAgICAgIEVYQ0VQVElPTl9CTE9DSyhPcHRpb25zT2JqZWN0
LCBvcHRpb25zLCBhcmdzWzFdKTsKKyAgICAgICAgaWYgKCFmaWxsJHtpbXBsQ2xhc3NOYW1lfUlu
aXQoZXZlbnRJbml0LCBvcHRpb25zKSkKKyAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisgICAgfQorCisgICAgUmVmUHRyPCR7aW1wbENsYXNzTmFtZX0+IGV2ZW50ID0gJHtpbXBs
Q2xhc3NOYW1lfTo6Y3JlYXRlKHR5cGUsIGV2ZW50SW5pdCk7CisKKyAgICBWOERPTVdyYXBwZXI6
OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIGV2ZW50LmdldCgpKTsKKyAgICBy
ZXR1cm4gdG9WOChldmVudC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworfQorCitib29sIGZp
bGwke2ltcGxDbGFzc05hbWV9SW5pdCgke2ltcGxDbGFzc05hbWV9SW5pdCYgZXZlbnRJbml0LCBj
b25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zKQoreworRU5ECisKKyAgICBmb3JlYWNoIG15ICRp
bnRlcmZhY2VCYXNlIChAeyRkYXRhTm9kZS0+cGFyZW50c30pIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsIDw8RU5EKTsKKyAgICBpZiAoIWZpbGwke2ludGVyZmFjZUJhc2V9SW5pdChldmVu
dEluaXQsIG9wdGlvbnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKK0VORAorICAgIH0KKwor
ICAgIGZvciAobXkgJGluZGV4ID0gMDsgJGluZGV4IDwgQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9
OyAkaW5kZXgrKykgeworICAgICAgICBteSAkYXR0cmlidXRlID0gQHskZGF0YU5vZGUtPmF0dHJp
YnV0ZXN9WyRpbmRleF07CisgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJJbml0aWFsaXplZEF0Q29uc3RydWN0b3IifSkgeworICAgICAgICAg
ICAgbXkgJGF0dHJpYnV0ZU5hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBvcHRpb25zLmdldChcIiRhdHRyaWJ1dGVO
YW1lXCIsIGV2ZW50SW5pdC4kYXR0cmlidXRlTmFtZSk7XG4iKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0VORAorfQorCiBzdWIgR2VuZXJhdGVOYW1lZENvbnN0cnVjdG9yQ2FsbGJhY2sKIHsKICAgICBt
eSAkZnVuY3Rpb24gPSBzaGlmdDsKQEAgLTIyOTAsNiArMjQzNiw4IEBAIEVORAogICAgICAgICBH
ZW5lcmF0ZU5hbWVkQ29uc3RydWN0b3JDYWxsYmFjaygkZGF0YU5vZGUtPmNvbnN0cnVjdG9yLCAk
ZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1lKTsKICAgICB9IGVsc2lmICgkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9ICYmICEoJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiVjhDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0pKSB7CiAgICAgICAgIEdlbmVyYXRlQ29u
c3RydWN0b3JDYWxsYmFjaygkZGF0YU5vZGUtPmNvbnN0cnVjdG9yLCAkZGF0YU5vZGUsICRpbnRl
cmZhY2VOYW1lKTsKKyAgICB9IGVsc2lmIChJc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGRhdGFOb2Rl
LCAiRXZlbnQiKSkgeworICAgICAgICBHZW5lcmF0ZUV2ZW50Q29uc3RydWN0b3JDYWxsYmFjaygk
ZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1lKTsKICAgICB9CiAKICAgICBteSAkYWNjZXNzX2NoZWNr
ID0gIiI7CkBAIC0yMzYyLDcgKzI1MTAsNyBAQCBFTkQKICAgICBVTlVTRURfUEFSQU0oZGVmYXVs
dFNpZ25hdHVyZSk7IC8vIEluIHNvbWUgY2FzZXMsIGl0IHdpbGwgbm90IGJlIHVzZWQuCiBFTkQK
IAotICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1
Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4Q3VzdG9tQ29uc3Ry
dWN0b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9
KSB7CisgICAgaWYgKElzQ29uc3RydWN0YWJsZSgkZGF0YU5vZGUpKSB7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCA8PEVORCk7CiAgICAgZGVzYy0+U2V0Q2FsbEhhbmRsZXIoVjgke2ludGVy
ZmFjZU5hbWV9Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKTsKIEVORApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0RXZlbnRDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRP
TVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTBiMDRlMzhlZjY1MzEzMzI4
ZDQ2NGMzN2NjYjM0ZjJhMjBlN2UwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAK
QEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIktV
UkwuaCIKKyNpbmNsdWRlICJUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkRP
TVN0cmluZy5oIgorI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKKyNpbmNsdWRlICJ3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1Y3QgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6Oldl
YkRPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZSB7CisgICAgV2ViRE9NVGVzdEV2ZW50Q29u
c3RydWN0b3JQcml2YXRlKFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBvYmplY3QgPSAw
KQorICAgICAgICA6IGltcGwob2JqZWN0KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3I+IGltcGw7Cit9OworCitXZWJET01UZXN0RXZlbnRD
b25zdHJ1Y3Rvcjo6V2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IoKQorICAgIDogV2ViRE9NT2Jq
ZWN0KCkKKyAgICAsIG1faW1wbCgwKQoreworfQorCitXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6V2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0
b3IqIGltcGwpCisgICAgOiBXZWJET01PYmplY3QoKQorICAgICwgbV9pbXBsKG5ldyBXZWJET01U
ZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUoaW1wbCkpCit7Cit9CisKK1dlYkRPTVRlc3RFdmVu
dENvbnN0cnVjdG9yOjpXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvcihjb25zdCBXZWJET01UZXN0
RXZlbnRDb25zdHJ1Y3RvciYgY29weSkKKyAgICA6IFdlYkRPTU9iamVjdCgpCit7CisgICAgbV9p
bXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRl
KGNvcHkuaW1wbCgpKSA6IDA7Cit9CisKK1dlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yJiBXZWJE
T01UZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6b3BlcmF0b3I9KGNvbnN0IFdlYkRPTVRlc3RFdmVudENv
bnN0cnVjdG9yJiBjb3B5KQoreworICAgIGRlbGV0ZSBtX2ltcGw7CisgICAgbV9pbXBsID0gY29w
eS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlKGNvcHkuaW1w
bCgpKSA6IDA7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJDb3JlOjpUZXN0RXZlbnRDb25z
dHJ1Y3RvciogV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6OmltcGwoKSBjb25zdAoreworICAg
IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmltcGwuZ2V0KCkgOiAwOworfQorCitXZWJET01UZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6fldlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yKCkKK3sKKyAgICBk
ZWxldGUgbV9pbXBsOworICAgIG1faW1wbCA9IDA7Cit9CisKK1dlYkRPTVN0cmluZyBXZWJET01U
ZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6YXR0cjEoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQor
ICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgV1RGOjpTdHJpbmcmPihpbXBsKCktPmF0dHIxKCkpOworfQorCitXZWJET01TdHJpbmcg
V2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6OmF0dHIyKCkgY29uc3QKK3sKKyAgICBpZiAoIWlt
cGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOworCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFdURjo6U3RyaW5nJj4oaW1wbCgpLT5hdHRyMigpKTsKK30KKworV2ViQ29y
ZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0RXZlbnRD
b25zdHJ1Y3RvciYgd3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBlci5pbXBsKCk7Cit9CisK
K1dlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RFdmVudENv
bnN0cnVjdG9yKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0
b3IodmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU4YzQ5Mjk3ZTUzNTMyZTQ0ZWM4ODJhNzAyOGZhNWZiYjRkMGFiZDMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RFdmVudENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
U2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3JfaAorI2RlZmluZSBXZWJET01UZXN0RXZlbnRD
b25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4KKyNpbmNsdWRlIDxXZWJE
T01TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGVzdEV2ZW50Q29uc3Ry
dWN0b3I7Cit9OworCisKK2NsYXNzIFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yIDogcHVibGlj
IFdlYkRPTU9iamVjdCB7CitwdWJsaWM6CisgICAgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3Io
KTsKKyAgICBleHBsaWNpdCBXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0
RXZlbnRDb25zdHJ1Y3RvciopOworICAgIFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yKGNvbnN0
IFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yJik7CisgICAgV2ViRE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3ImIG9wZXJhdG9yPShjb25zdCBXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3RvciYpOworICAg
IHZpcnR1YWwgfldlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yKCk7CisKKyAgICBXZWJET01TdHJp
bmcgYXR0cjEoKSBjb25zdDsKKyAgICBXZWJET01TdHJpbmcgYXR0cjIoKSBjb25zdDsKKworICAg
IFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXBsKCkgY29uc3Q7CisKK3Byb3RlY3Rl
ZDoKKyAgICBzdHJ1Y3QgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlOworICAgIFdl
YkRPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZSogbV9pbXBsOworfTsKKworV2ViQ29yZTo6
VGVzdEV2ZW50Q29uc3RydWN0b3IqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0RXZlbnRDb25z
dHJ1Y3RvciYpOworV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgdG9XZWJLaXQoV2ViQ29yZTo6
VGVzdEV2ZW50Q29uc3RydWN0b3IqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzc4OGYxODQ0
NjQ4NDBiMjJmMzM4NTdkMDE5MTc1OGZkNjY2YTBhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAi
RE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAi
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisjaW5jbHVkZSAiVGVzdEV2ZW50Q29uc3RydWN0b3Iu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiZ29iamVjdC9Db252
ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVj
dG9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKyNpbmNsdWRlICJ3ZWJr
aXRnbG9iYWxzcHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisgICAgCitXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvcioga2l0KFdl
YkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBvYmopCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwob2JqLCAwKTsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6
Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0RXZlbnRD
b25zdHJ1Y3Rvcio+KHJldCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVz
dEV2ZW50Q29uc3RydWN0b3IqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFw
VGVzdEV2ZW50Q29uc3RydWN0b3Iob2JqKSkpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0IC8vCisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9h
dHRyMShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciogc2VsZikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IgKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmF0dHIxKCkpOworICAgIHJldHVybiByZXM7Cit9CisKK2djaGFyKgord2Via2l0X2RvbV90
ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMihXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1
Y3Rvciogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEV2
ZW50Q29uc3RydWN0b3IgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHIyKCkpOworICAgIHJldHVybiByZXM7
Cit9CisKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciwgd2Vi
a2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIGNv
cmUoV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7CisKKyAgICBXZWJDb3JlOjpUZXN0RXZlbnRDb25z
dHJ1Y3RvciogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RFdmVudENvbnN0
cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgcmV0dXJuIGNvcmVPYmpl
Y3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorZW51bSB7CisgICAgUFJPUF8wLAorICAg
IFBST1BfQVRUUjEsCisgICAgUFJPUF9BVFRSMiwKK307CisKKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmpl
Y3QpOworICAgIAorICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CisgICAgICAgIFdl
YkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IgKj4oZG9tX29iamVjdC0+Y29yZU9iamVjdCk7CisK
KyAgICAgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KGNvcmVPYmplY3QpOworICAg
ICAgICBjb3JlT2JqZWN0LT5kZXJlZigpOworCisgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmpl
Y3QgPSBOVUxMOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9l
dmVudF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3Jfc2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9l
dmVudF9jb25zdHJ1Y3Rvcl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
X2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3IqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1Iob2JqZWN0KTsK
KyAgICBXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvciogY29yZVNlbGYgPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0FUVFIxOgor
ICAgIHsKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0
cmluZyhjb3JlU2VsZi0+YXR0cjEoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBQUk9QX0FUVFIyOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
Y29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+YXR0cjIoKSkpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2NvbnN0
cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKworICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJr
aXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQp
CisgICAgICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rv
cl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0
RXZlbnRDb25zdHJ1Y3RvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNz
ICpnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZmlu
YWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rf
ZXZlbnRfY29uc3RydWN0b3Jfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9wcm9wZXJ0eTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVkID0gd2Via2l0X2RvbV90ZXN0X2V2ZW50X2Nv
bnN0cnVjdG9yX2NvbnN0cnVjdGVkOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
Uk9QX0FUVFIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygiYXR0cjEiLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X2V2ZW50X2NvbnN0cnVjdG9y
X2F0dHIxIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtb25seSAgZ2NoYXIqIFRl
c3RFdmVudENvbnN0cnVjdG9yLmF0dHIxIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21l
IGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAvKiBkZWZhdWx0ICovCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29i
amVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9BVFRS
MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoImF0dHIyIiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9hdHRyMiIs
IC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLW9ubHkgIGdjaGFyKiBUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5hdHRyMiIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBk
b2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiIiwgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25z
dHJ1Y3Rvcl9pbml0KFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiByZXF1ZXN0KQorewor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiB3
cmFwVGVzdEV2ZW50Q29uc3RydWN0b3IoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIGNv
cmVPYmplY3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisK
KyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50
ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxs
b2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRo
ZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVm
KCk7CisKKyAgICByZXR1cm4gIFdFQktJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUihnX29i
amVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNv
cmVPYmplY3QsIE5VTEwpKTsKK30KK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEV2ZW50Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmYz
MzdmYjYwMTU0NTczNGQ1OGQ3YzAyOGFiMWEzOTc5MDQ2MWI5ZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaWZuZGVmIFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yX2gKKyNkZWZpbmUg
V2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAid2Via2l0L3dlYmtp
dGRvbWRlZmluZXMuaCIKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRkZWZpbmVzLmg+CisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTU9iamVjdC5oIgor
CisKK0dfQkVHSU5fREVDTFMKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRE9NX1RFU1RfRVZFTlRfQ09O
U1RSVUNUT1IgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUihvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQ
RV9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0
b3IpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1JfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9N
X1RFU1RfRVZFTlRfQ09OU1RSVUNUT1IsIFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yQ2xh
c3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUihvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ET01f
VEVTVF9FVkVOVF9DT05TVFJVQ1RPUikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9FVkVO
VF9DT05TVFJVQ1RPUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUikpCisjZGVmaW5lIFdF
QktJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9FVkVOVF9DT05T
VFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JDbGFzcykpCisKK3N0cnVjdCBf
V2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJl
bnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9y
Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dF
QktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9nZXRfdHlw
ZSAodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dl
dF9hdHRyMToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvcgorICoK
KyAqIFJldHVybnM6CisgKgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV90ZXN0
X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rv
ciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dl
dF9hdHRyMjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvcgorICoK
KyAqIFJldHVybnM6CisgKgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV90ZXN0
X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMihXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rv
ciogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0RXZlbnRD
b25zdHJ1Y3Rvcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjMGU4NTI4OTAwZTM3ZmM2
YjM2MzVkY2Q3Y2YxMjY0YmZlMWZkZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1
Y3RvclByaXZhdGUuaApAQCAtMCwwICsxLDM5IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgV0VCX0tJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUl9QUklWQVRFX0gKKyNk
ZWZpbmUgV0VCX0tJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUl9QUklWQVRFX0gKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L1dlYktpdERPTU9iamVjdC5o
PgorI2luY2x1ZGUgIlRlc3RFdmVudENvbnN0cnVjdG9yLmgiCituYW1lc3BhY2UgV2ViS2l0IHsK
KyAgICBXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvciAqCisgICAgd3JhcFRlc3RFdmVudENv
bnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yICpjb3JlT2JqZWN0KTsKKwor
ICAgIFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yICoKKyAgICBjb3JlKFdlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yICpyZXF1ZXN0KTsKKworICAgIFdlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yKgorICAgIGtpdChXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3Rvciogbm9kZSk7
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV0VCX0tJVF9ET01fVEVTVF9F
VkVOVF9DT05TVFJVQ1RPUl9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVj
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43M2UyZmEzNWE0ZTNkMjA4YzQzMTUwMWU1MmZlNTQ0Njg0Y2Nh
ZWVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMjA2IEBACisvKgor
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rl
c3RFdmVudENvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiVGVz
dEV2ZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0FTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcik7CisKKy8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCisjaWYgRU5BQkxFKEpJ
VCkKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikgLCBnZW5lcmF0b3IKKyNlbHNl
CisjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCisjZW5kaWYKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKyNkZWZpbmUgSU5UUklOU0lDKGludHJpbnNpYykgLCBpbnRyaW5zaWMKKyNlbHNl
CisjZGVmaW5lIElOVFJJTlNJQyhpbnRyaW5zaWMpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KK3sKKyAg
ICB7ICJhdHRyMSIsIERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEp
LCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgSU5UUklOU0lDKERGRzo6Tm9JbnRyaW5z
aWMpIH0sCisgICAgeyAiYXR0cjIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RXZlbnRDb25zdHJ1
Y3RvckF0dHIyKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIElOVFJJTlNJQyhERkc6
Ok5vSW50cmluc2ljKSB9LAorICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0gfCBSZWFkT25s
eSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFU
T1IoMCkgSU5UUklOU0lDKERGRzo6Tm9JbnRyaW5zaWMpIH0sCisgICAgeyAwLCAwLCAwLCAwIFRI
VU5LX0dFTkVSQVRPUigwKSBJTlRSSU5TSUMoREZHOjpOb0ludHJpbnNpYykgfQorfTsKKworI3Vu
ZGVmIFRIVU5LX0dFTkVSQVRPUgorc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxl
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JUYWJsZSA9IHsgOSwgNywgSlNUZXN0RXZlbnRDb25zdHJ1
Y3RvclRhYmxlVmFsdWVzLCAwIH07CisvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwor
I2lmIEVOQUJMRShKSVQpCisjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpICwgZ2Vu
ZXJhdG9yCisjZWxzZQorI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQorI2VuZGlm
CisjaWYgRU5BQkxFKERGR19KSVQpCisjZGVmaW5lIElOVFJJTlNJQyhpbnRyaW5zaWMpICwgaW50
cmluc2ljCisjZWxzZQorI2RlZmluZSBJTlRSSU5TSUMoaW50cmluc2ljKQorI2VuZGlmCisKK3N0
YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0
b3JUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDAp
IElOVFJJTlNJQyhERkc6Ok5vSW50cmluc2ljKSB9Cit9OworCisjdW5kZWYgVEhVTktfR0VORVJB
VE9SCitzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0RXZlbnRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yVGFibGUgPSB7IDEsIDAsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JD
b25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07Citjb25zdCBDbGFzc0luZm8gSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RXZlbnRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yIiwgJkRPTUNvbnN0cnVjdG9yT2JqZWN0OjpzX2luZm8sICZKU1Rlc3RFdmVudENv
bnN0cnVjdG9yQ29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RF
dmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH07CisKK0pTVGVzdEV2ZW50Q29uc3RydWN0b3JD
b25zdHJ1Y3Rvcjo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29u
c3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK3ZvaWQgSlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoJnNf
aW5mbykpOworICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYo
ZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKK30KKworYm9vbCBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxK
U1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpT
VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlLCBzdGF0aWNfY2FzdDxKU1Rlc3RF
dmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsK
K30KKworYm9vbCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQor
eworICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0RXZlbnRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZKU1Rlc3RFdmVudENvbnN0cnVj
dG9yQ29uc3RydWN0b3JUYWJsZSwgc3RhdGljX2Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKworQ29u
c3RydWN0VHlwZSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldENvbnN0cnVj
dERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25z
dHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEpTVGVzdEV2ZW50Q29uc3RydWN0
b3I7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCisvKiBIYXNoIHRhYmxlIGZv
ciBwcm90b3R5cGUgKi8KKyNpZiBFTkFCTEUoSklUKQorI2RlZmluZSBUSFVOS19HRU5FUkFUT1Io
Z2VuZXJhdG9yKSAsIGdlbmVyYXRvcgorI2Vsc2UKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdl
bmVyYXRvcikKKyNlbmRpZgorI2lmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBJTlRSSU5TSUMo
aW50cmluc2ljKSAsIGludHJpbnNpYworI2Vsc2UKKyNkZWZpbmUgSU5UUklOU0lDKGludHJpbnNp
YykKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXZlbnRDb25z
dHJ1Y3RvclByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgMCwgMCwgMCwgMCBUSFVO
S19HRU5FUkFUT1IoMCkgSU5UUklOU0lDKERGRzo6Tm9JbnRyaW5zaWMpIH0KK307CisKKyN1bmRl
ZiBUSFVOS19HRU5FUkFUT1IKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGUgPSB7IDEsIDAsIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3JQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OworY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RFdmVudENvbnN0
cnVjdG9yUHJvdG90eXBlIiwgJkpTQzo6SlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAmSlNUZXN0
RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUpIH07CisKK0pTT2JqZWN0KiBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEV2
ZW50Q29uc3RydWN0b3I+KGV4ZWMsIGdsb2JhbE9iamVjdCk7Cit9CisKK2NvbnN0IENsYXNzSW5m
byBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciIsICZKU0RPTVdyYXBwZXI6OnNfaW5mbywgJkpTVGVzdEV2ZW50Q29uc3RydWN0b3JUYWJsZSwg
MCAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RXZlbnRDb25zdHJ1Y3RvcikgfTsKKworSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0
RXZlbnRDb25zdHJ1Y3Rvcj4gaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCkKKyAgICAsIG1faW1wbChpbXBsKQoreworfQorCit2b2lkIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBBU1NFUlQoaW5oZXJp
dHMoJnNfaW5mbykpOworfQorCitKU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKK3sKKyAgICByZXR1cm4gSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitib29s
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihjZWxsKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIHJldHVybiBnZXRT
dGF0aWNWYWx1ZVNsb3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvciwgQmFzZT4oZXhlYywgJkpTVGVz
dEV2ZW50Q29uc3RydWN0b3JUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsK
K30KKworYm9vbCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvcio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCAmc19pbmZvKTsKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpT
VGVzdEV2ZW50Q29uc3RydWN0b3IsIEJhc2U+KGV4ZWMsICZKU1Rlc3RFdmVudENvbnN0cnVjdG9y
VGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK0pTVmFs
dWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBz
bG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihhc09i
amVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0RXZlbnRD
b25zdHJ1Y3RvciogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdEV2ZW50Q29uc3RydWN0b3IqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmcoZXhlYywgaW1w
LT5hdHRyMSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK0pTVmFsdWUganNUZXN0RXZl
bnRDb25zdHJ1Y3RvckF0dHIyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29u
c3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogY2FzdGVkVGhp
cyA9IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihhc09iamVjdChzbG90QmFz
ZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0RXZlbnRDb25zdHJ1Y3Rvciog
aW1wID0gc3RhdGljX2Nhc3Q8VGVzdEV2ZW50Q29uc3RydWN0b3IqPihjYXN0ZWRUaGlzLT5pbXBs
KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmcoZXhlYywgaW1wLT5hdHRyMigpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK0pTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRl
bnRpZmllciYpCit7CisgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogZG9tT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Cisg
ICAgcmV0dXJuIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKGV4ZWMsIGRv
bU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOworfQorCitKU1ZhbHVlIEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3I6OmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yPihleGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGdsb2JhbE9iamVjdCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEV2ZW50Q29uc3Ry
dWN0b3IqIGltcGwpCit7CisgICAgcmV0dXJuIHdyYXA8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4o
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVzdEV2ZW50Q29uc3RydWN0b3IqIHRv
VGVzdEV2ZW50Q29uc3RydWN0b3IoSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB2
YWx1ZS5pbmhlcml0cygmSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6c19pbmZvKSA/IHN0YXRpY19j
YXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAw
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OWUx
OGNmZGE1NjIxYTM1NzU0OTI3ZTBiZTI5Yzc0ODkyOTZkMTVkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JfaAorI2RlZmluZSBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yX2gKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIlRlc3RFdmVudENv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlw
ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVGVzdEV2ZW50Q29uc3RydWN0
b3IgOiBwdWJsaWMgSlNET01XcmFwcGVyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTRE9NV3Jh
cHBlciBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiBjcmVhdGUoSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UGFzc1JlZlB0cjxUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4gaW1wbCkKKyAgICB7CisgICAgICAgIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVz
dEV2ZW50Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRl
UHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNz
SW5mbyBzX2luZm87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgVGVzdEV2ZW50Q29uc3Ry
dWN0b3IqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KKworcHJpdmF0ZToK
KyAgICBSZWZQdHI8VGVzdEV2ZW50Q29uc3RydWN0b3I+IG1faW1wbDsKK3Byb3RlY3RlZDoKKyAg
ICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBQYXNzUmVmUHRyPFRlc3RFdmVudENvbnN0cnVjdG9yPik7CisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6
U3RydWN0dXJlRmxhZ3M7Cit9OworCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEV2ZW50Q29uc3RydWN0b3IqKTsKK1Rlc3RFdmVudENv
bnN0cnVjdG9yKiB0b1Rlc3RFdmVudENvbnN0cnVjdG9yKEpTQzo6SlNWYWx1ZSk7CisKK2NsYXNz
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNl
OworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90
eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUqIHB0ciA9IG5ldyAoSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZT4oZ2xvYmFsRGF0YS5o
ZWFwKSkgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0
YSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IEpTQzo6
Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJv
dG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK2NsYXNz
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rv
ck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rv
cihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVz
dEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBw
dHIgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1
Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcihz
dHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZXhl
YywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7
CisgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0
b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShK
U0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOworfTsKKworLy8gQXR0cmlidXRlcwor
CitKU0M6OkpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3Ry
dWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlND
OjpJZGVudGlmaWVyJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
RXZlbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZmM0ZWM1ZDY5Mzc0
ZDFjMTMzMGJhNDIwNGZiZTE4ODg4MWQ3OGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdEV2ZW50Q29uc3RydWN0b3Iu
aApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4KKworI2lmIFdFQktJVF9WRVJTSU9O
X01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAorCitAY2xhc3MgTlNTdHJpbmc7
CisKK0BpbnRlcmZhY2UgRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgOiBET01PYmplY3QKKy0gKE5T
U3RyaW5nICopYXR0cjE7CistIChOU1N0cmluZyAqKWF0dHIyOworQGVuZAorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RFdmVudENvbnN0cnVjdG9yLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzdlNjFmMTM3
ZTBlZTdjNWU5ODQ4YjljMTdhYjkzYzk0MDM2ZDZmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RFdmVudENvbnN0cnVj
dG9yLm1tCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1wb3J0ICJET01U
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgorCisjaW1wb3J0ICJET01CbG9iSW50ZXJuYWwuaCIKKyNp
bXBvcnQgIkRPTUNTU1J1bGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NQ1NTVmFsdWVJbnRlcm5h
bC5oIgorI2ltcG9ydCAiRE9NRXZlbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NTm9kZUludGVy
bmFsLmgiCisjaW1wb3J0ICJET01TdHlsZVNoZWV0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVRl
c3RFdmVudENvbnN0cnVjdG9ySW50ZXJuYWwuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJz
LmgiCisjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbXBvcnQgIktVUkwuaCIK
KyNpbXBvcnQgIlRlc3RFdmVudENvbnN0cnVjdG9yLmgiCisjaW1wb3J0ICJUaHJlYWRDaGVjay5o
IgorI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYlNjcmlwdE9iamVj
dFByaXZhdGUuaCIKKyNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4KKworI2RlZmluZSBJTVBMIHJlaW50
ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqPihfaW50ZXJuYWwpCisK
K0BpbXBsZW1lbnRhdGlvbiBET01UZXN0RXZlbnRDb25zdHJ1Y3RvcgorCistICh2b2lkKWRlYWxs
b2MKK3sKKyAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQo
W0RPTVRlc3RFdmVudENvbnN0cnVjdG9yIGNsYXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVmKCk7CisgICAgW3N1cGVy
IGRlYWxsb2NdOworfQorCistICh2b2lkKWZpbmFsaXplCit7CisgICAgaWYgKF9pbnRlcm5hbCkK
KyAgICAgICAgSU1QTC0+ZGVyZWYoKTsKKyAgICBbc3VwZXIgZmluYWxpemVdOworfQorCistIChO
U1N0cmluZyAqKWF0dHIxCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIHJldHVybiBJTVBMLT5hdHRyMSgpOworfQorCistIChOU1N0cmluZyAqKWF0dHIy
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVy
biBJTVBMLT5hdHRyMigpOworfQorCitAZW5kCisKK1dlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVj
dG9yKiBjb3JlKERPTVRlc3RFdmVudENvbnN0cnVjdG9yICp3cmFwcGVyKQoreworICAgIHJldHVy
biB3cmFwcGVyID8gcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3Rv
cio+KHdyYXBwZXItPl9pbnRlcm5hbCkgOiAwOworfQorCitET01UZXN0RXZlbnRDb25zdHJ1Y3Rv
ciAqa2l0KFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiB2YWx1ZSkKK3sKKyAgICB7IERP
TV9BU1NFUlRfTUFJTl9USFJFQUQoKTsgV2ViQ29yZVRocmVhZFZpb2xhdGlvbkNoZWNrUm91bmRP
bmUoKTsgfTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gbmlsOworICAgIGlmIChE
T01UZXN0RXZlbnRDb25zdHJ1Y3RvciAqd3JhcHBlciA9IGdldERPTVdyYXBwZXIodmFsdWUpKQor
ICAgICAgICByZXR1cm4gW1t3cmFwcGVyIHJldGFpbl0gYXV0b3JlbGVhc2VdOworICAgIERPTVRl
c3RFdmVudENvbnN0cnVjdG9yICp3cmFwcGVyID0gW1tET01UZXN0RXZlbnRDb25zdHJ1Y3RvciBh
bGxvY10gX2luaXRdOworICAgIHdyYXBwZXItPl9pbnRlcm5hbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
RE9NT2JqZWN0SW50ZXJuYWwqPih2YWx1ZSk7CisgICAgdmFsdWUtPnJlZigpOworICAgIGFkZERP
TVdyYXBwZXIod3JhcHBlciwgdmFsdWUpOworICAgIHJldHVybiBbd3JhcHBlciBhdXRvcmVsZWFz
ZV07Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0RXZlbnRDb25zdHJ1Y3RvckludGVybmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0RXZlbnRDb25zdHJ1Y3RvckludGVybmFs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmFhYzhmZmYyYThiZjg0ZjM2MzkxYzk5NzA1YWVkYWQ3MzExY2RjZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RFdmVudENvbnN0cnVjdG9ySW50ZXJuYWwuaApAQCAtMCwwICsxLDM4IEBACisv
KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01UZXN0RXZlbnRD
b25zdHJ1Y3Rvci5oPgorCisjaWYgV0VCS0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lU
X1ZFUlNJT05fTEFURVNUCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBUZXN0RXZl
bnRDb25zdHJ1Y3RvcjsKK30KKworV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIGNvcmUo
RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgKik7CitET01UZXN0RXZlbnRDb25zdHJ1Y3RvciAqa2l0
KFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFdmVudENvbnN0cnVjdG9y
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RXZlbnRDb25z
dHJ1Y3Rvci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGQzYmFlZTMyMDdjNWQ4MTUwYTMwMGRlNjk4Zjc2M2Vj
MjFlNDMxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0RXZlbnRDb25zdHJ1Y3Rvci5pZGwKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXN0ckFy
Zywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVzdHJBcmcsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBUaGlzIElETCBmaWxlIGlzIGZvciB0ZXN0aW5nIHRoZSBiaW5kaW5ncyBjb2RlIGdl
bmVyYXRvciBhbmQgZm9yIHRyYWNraW5nCisvLyBjaGFuZ2VzIGluIGl0cyBvdXB1dC4KK21vZHVs
ZSB0ZXN0IHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDdXN0b21Db25zdHJ1Y3Rvcj1FdmVu
dAorICAgIF0gVGVzdEV2ZW50Q29uc3RydWN0b3IgeworICAgICAgICAvLyBBdHRyaWJ1dGVzCisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgYXR0cjE7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBbSW5pdGlhbGl6ZWRBdENvbnN0cnVjdG9yXSBET01TdHJpbmcgYXR0cjI7
CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jZTI4OTI3MTE0NmQ2MTYyNGU5MDNhN2MwNDkxZmZiYzg2YWI3MzNjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50
Q29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4VGVzdEV2ZW50Q29uc3RydWN0b3IuaCIK
KworI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBl
ci5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCisjaW5jbHVkZSAiVjhQcm94eS5o
IgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1dyYXBwZXJUeXBlSW5mbyBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjppbmZvID0geyBWOFRlc3RF
dmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSwgVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6ZGVy
ZWZPYmplY3QsIDAsIDAgfTsKKworbmFtZXNwYWNlIFRlc3RFdmVudENvbnN0cnVjdG9ySW50ZXJu
YWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkgeyB9CisKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXR0cjFBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFU
UygiRE9NLlRlc3RFdmVudENvbnN0cnVjdG9yLmF0dHIxLl9nZXQiKTsKKyAgICBUZXN0RXZlbnRD
b25zdHJ1Y3RvciogaW1wID0gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+YXR0cjEoKSk7Cit9CisKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXR0cjJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFU
UygiRE9NLlRlc3RFdmVudENvbnN0cnVjdG9yLmF0dHIyLl9nZXQiKTsKKyAgICBUZXN0RXZlbnRD
b25zdHJ1Y3RvciogaW1wID0gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+YXR0cjIoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RFdmVudENvbnN0cnVjdG9ySW50ZXJuYWwKKworc3RhdGljIGNvbnN0IEJh
dGNoZWRBdHRyaWJ1dGUgVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyc1tdID0geworICAgIC8vIEF0
dHJpYnV0ZSAnYXR0cjEnIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAnJykK
KyAgICB7ImF0dHIxIiwgVGVzdEV2ZW50Q29uc3RydWN0b3JJbnRlcm5hbDo6YXR0cjFBdHRyR2V0
dGVyLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2
ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUp
LCAwIC8qIG9uIGluc3RhbmNlICovfSwKKyAgICAvLyBBdHRyaWJ1dGUgJ2F0dHIyJyAoVHlwZTog
J3JlYWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJ0luaXRpYWxpemVkQXRDb25zdHJ1Y3Rvcicp
CisgICAgeyJhdHRyMiIsIFRlc3RFdmVudENvbnN0cnVjdG9ySW50ZXJuYWw6OmF0dHIyQXR0ckdl
dHRlciwgMCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4o
djg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25l
KSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCit9OworCitzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdEV2ZW50Q29uc3RydWN0b3JUZW1wbGF0
ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYykKK3sKKyAgICBkZXNj
LT5SZWFkT25seVByb3RvdHlwZSgpOworCisgICAgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+IGRl
ZmF1bHRTaWduYXR1cmU7CisgICAgZGVmYXVsdFNpZ25hdHVyZSA9IGNvbmZpZ3VyZVRlbXBsYXRl
KGRlc2MsICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPigpLCBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjppbnRlcm5hbEZpZWxkQ291bnQs
CisgICAgICAgIFRlc3RFdmVudENvbnN0cnVjdG9yQXR0cnMsIFdURl9BUlJBWV9MRU5HVEgoVGVz
dEV2ZW50Q29uc3RydWN0b3JBdHRycyksCisgICAgICAgIDAsIDApOworICAgIFVOVVNFRF9QQVJB
TShkZWZhdWx0U2lnbmF0dXJlKTsgLy8gSW4gc29tZSBjYXNlcywgaXQgd2lsbCBub3QgYmUgdXNl
ZC4KKyAgICBkZXNjLT5TZXRDYWxsSGFuZGxlcihWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpjb25z
dHJ1Y3RvckNhbGxiYWNrKTsKKyAgICAKKworICAgIC8vIEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0
ZQorICAgIGRlc2MtPlNldChnZXRUb1N0cmluZ05hbWUoKSwgZ2V0VG9TdHJpbmdUZW1wbGF0ZSgp
KTsKKyAgICByZXR1cm4gZGVzYzsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRlKCkKK3sKKyAgICBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpj
dXJyZW50KCk7CisgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVy
YXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOworICAgIGlm
IChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC0+c2Vjb25kOworCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1Rl
bXBsYXRlKCk7CisgICAgZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5hZGQoJmluZm8sIHRlbXBsKTsK
KyAgICByZXR1cm4gdGVtcGw7Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCit7CisgICAgVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOworICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKKyAgICBpZiAocmVzdWx0
ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCisgICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQorICAgICAgICBDb25maWd1cmVWOFRl
c3RFdmVudENvbnN0cnVjdG9yVGVtcGxhdGUoR2V0UmF3VGVtcGxhdGUoKSk7CisgICAgZGF0YS0+
dGVtcGxhdGVNYXAoKS5hZGQoJmluZm8sIHRlbXBsKTsKKyAgICByZXR1cm4gdGVtcGw7Cit9CisK
K2Jvb2wgVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhbHVlKQoreworICAgIHJldHVybiBHZXRSYXdUZW1wbGF0ZSgpLT5IYXNJbnN0YW5j
ZSh2YWx1ZSk7Cit9CisKKwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVudENvbnN0
cnVjdG9yOjp3cmFwU2xvdyhUZXN0RXZlbnRDb25zdHJ1Y3RvciogaW1wbCkKK3sKKyAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7CisgICAgVjhQcm94eSogcHJveHkgPSAwOworICAg
IHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QocHJveHksICZpbmZv
LCBpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFw
cGVyOworCisgICAgaW1wbC0+cmVmKCk7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4g
d3JhcHBlckhhbmRsZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcik7
CisKKyAgICBpZiAoIWhhc0RlcGVuZGVudExpZmV0aW1lKQorICAgICAgICB3cmFwcGVySGFuZGxl
Lk1hcmtJbmRlcGVuZGVudCgpOworICAgIGdldERPTU9iamVjdE1hcCgpLnNldChpbXBsLCB3cmFw
cGVySGFuZGxlKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwordm9pZCBWOFRlc3RFdmVudENv
bnN0cnVjdG9yOjpkZXJlZk9iamVjdCh2b2lkKiBvYmplY3QpCit7CisgICAgc3RhdGljX2Nhc3Q8
VGVzdEV2ZW50Q29uc3RydWN0b3IqPihvYmplY3QpLT5kZXJlZigpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
YTFlNTExZjU5MmJmMzhjZjUxZDAxYjlmOWIwZDRlYWJmNDcwZDExCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29u
c3RydWN0b3IuaApAQCAtMCwwICsxLDgwIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g
U3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2lmbmRl
ZiBWOFRlc3RFdmVudENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgVjhUZXN0RXZlbnRDb25zdHJ1Y3Rv
cl9oCisKKyNpbmNsdWRlICJUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlY4RE9N
V3JhcHBlci5oIgorI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5oIgorI2luY2x1ZGUgPHY4Lmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVjhUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzRGVwZW5kZW50TGlmZXRpbWUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4pOworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0
UmF3VGVtcGxhdGUoKTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IEdldFRlbXBsYXRlKCk7CisgICAgc3RhdGljIFRlc3RFdmVudENvbnN0cnVjdG9yKiB0
b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFRlc3RFdmVudENvbnN0cnVjdG9yKj4ob2JqZWN0LT5HZXRQ
b2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKKyAgICB9
CisgICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEV2ZW50
Q29uc3RydWN0b3IqKTsKKyAgICBzdGF0aWMgdm9pZCBkZXJlZk9iamVjdCh2b2lkKik7CisgICAg
c3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7CisgICAgc3Rh
dGljIGNvbnN0IGludCBpbnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJu
YWxGaWVsZENvdW50ICsgMDsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBleGlz
dGluZ1dyYXBwZXIoVGVzdEV2ZW50Q29uc3RydWN0b3IqKTsKKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhUZXN0RXZlbnRDb25zdHJ1Y3Rvciop
OworfTsKKworQUxXQVlTX0lOTElORSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEV2ZW50
Q29uc3RydWN0b3I6OmV4aXN0aW5nV3JhcHBlcihUZXN0RXZlbnRDb25zdHJ1Y3RvciogaW1wbCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOworfQorCit2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OndyYXAoVGVzdEV2ZW50Q29u
c3RydWN0b3IqIGltcGwpCit7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBl
ciA9IGV4aXN0aW5nV3JhcHBlcihpbXBsKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiBWOFRlc3RFdmVudENv
bnN0cnVjdG9yOjp3cmFwU2xvdyhpbXBsKTsKK30KKworaW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KFRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXBsKQoreworICAgIGlmICghaW1wbCkK
KyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgcmV0dXJuIFY4VGVzdEV2ZW50Q29uc3Ry
dWN0b3I6OndyYXAoaW1wbCk7Cit9CitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
UGFzc1JlZlB0cjwgVGVzdEV2ZW50Q29uc3RydWN0b3IgPiBpbXBsKQoreworICAgIHJldHVybiB0
b1Y4KGltcGwuZ2V0KCkpOworfQorCit9CisKKyNlbmRpZiAvLyBWOFRlc3RFdmVudENvbnN0cnVj
dG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RJbnRlcmZhY2UuaAppbmRleCBlNWI1YjlhYjg1ZDhjNDNmNDJkYzYwMGRhYjk2
MjE5ODA1NDc3ZTBkLi5hMDQ4YzgzNDE2YjAwOTBlM2ZiMmMyMTgxYmUwMmYyN2E2MjdjYTBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEludGVyZmFjZS5oCkBAIC03Nyw2ICs3Nyw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0SW50ZXJmYWNlID4gaW1wbCkKIHsKICAgICBy
ZXR1cm4gdG9WOChpbXBsLmdldCgpKTsKIH0KKwogfQogCiAjZW5kaWYgLy8gVjhUZXN0SW50ZXJm
YWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCmluZGV4IDFl
NGVmNDFjNDM0NDg4OTJiMDAyMjRmYmExMGFhMTJhYjg5NGNjOTAuLmFjZGUwZWE0OTU3YjQ0YjE2
NTQxNTRjOTkzYjFlMzNiN2NiYTFlYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIuaApAQCAtNzMsNiArNzMsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgPiBpbXBsKQog
ewogICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCkpOwogfQorCiB9CiAKICNlbmRpZiAvLyBWOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5o
CmluZGV4IDNmNmUzMjdkZWJhNWQyM2M4Nzc0NGFlMjU2YWY0ZDM0NTQ4OWM5YmEuLmFkZTYwMGU1
OTE2NmExYzMzODBjMzdmZjQ2NmJhMGIxMDk1ZDA5MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29u
c3RydWN0b3IuaApAQCAtODAsNiArODAsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE5hbWVkQ29uc3RydWN0b3IgPiBpbXBsKQogewogICAgIHJl
dHVybiB0b1Y4KGltcGwuZ2V0KCkpOwogfQorCiB9CiAKICNlbmRpZiAvLyBWOFRlc3ROYW1lZENv
bnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RPYmouaAppbmRleCAyMjRiMWQyZTk2ZDQwMGM0NGYwMDUwZmIxMjhmOTI0MjUz
NzJlZTQxLi44ZjUyMTkxMDUzM2RmNzI3NjcyN2VkZmE4NDU0ZWY4Yjc3NzI3M2U0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5o
CkBAIC03OCw2ICs3OCw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNz
UmVmUHRyPCBUZXN0T2JqID4gaW1wbCkKIHsKICAgICByZXR1cm4gdG9WOChpbXBsLmdldCgpKTsK
IH0KKwogfQogCiAjZW5kaWYgLy8gVjhUZXN0T2JqX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAppbmRleCA5NDk2OGU3ZTYzNjU3NDJm
N2M3OTE3ZmYwYWQyNzI4MjQ1OWZiODViLi5hZDE1ZDNkOWU3MzE5ZTlmNTZhZWVkNzg4ODEyOGQ3
MTI4MzRjNjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5oCkBAIC03NSw2ICs3NSw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
CiB7CiAgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSk7CiB9CisKIH0KIAogI2VuZGlmIC8vIFY4
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudENvbnN0cnVjdG9ycy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudENvbnN0cnVjdG9ycy5jcHAKaW5k
ZXggZjg5NWY0OWFjZjhiY2Q1MTQ0OGFkMDEwOTg2YzI1Njk5MjY2NjUyZS4uNWIyODk5MjQ4MjEx
Y2QzMDdhOWFmMDVmYTZiODhjMzk0MWQyNTQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDb25zdHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q29uc3RydWN0b3JzLmNwcApAQCAtMTI0
LDcgKzEyNCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0VjhFdmVu
dChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBib29sICgqCiAjZGVmaW5lIEZJTExfUFJPUEVS
VFkocHJvcGVydHlOYW1lKSBcCiAgICAgb3B0aW9ucy5nZXQoI3Byb3BlcnR5TmFtZSwgZXZlbnRJ
bml0LnByb3BlcnR5TmFtZSk7IC8vIFRoaXMgY2FuIGZhaWwgYnV0IGl0IGlzIE9LLgogCi1JTlNU
QU5USUFURV9JTklUSUFMSVpJTkdfQ09OU1RSVUNUT1JfRk9SX0VWRU5UKERJQ1RJT05BUllfU1RB
UlQsIERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZ
KQogSU5TVEFOVElBVEVfSU5JVElBTElaSU5HX0NPTlNUUlVDVE9SX0ZPUl9DVVNUT01fRVZFTlQo
RElDVElPTkFSWV9TVEFSVCwgRElDVElPTkFSWV9FTkQsIEZJTExfUEFSRU5UX1BST1BFUlRJRVMs
IEZJTExfUFJPUEVSVFkpCiBJTlNUQU5USUFURV9JTklUSUFMSVpJTkdfQ09OU1RSVUNUT1JfRk9S
X1BST0dSRVNTX0VWRU5UKERJQ1RJT05BUllfU1RBUlQsIERJQ1RJT05BUllfRU5ELCBGSUxMX1BB
UkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZKQogSU5TVEFOVElBVEVfSU5JVElBTElaSU5H
X0NPTlNUUlVDVE9SX0ZPUl9XRUJLSVRfQU5JTUFUSU9OX0VWRU5UKERJQ1RJT05BUllfU1RBUlQs
IERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudC5pZGwKaW5kZXggZjIyODI4YzRlNTYwZTBkNmFjNDhiOTU2MzVhZjNmNTUzN2Y5
YmQ3My4uMGZiNThlMmViYzNkMTZjMDg1NjAxMDNmMjRlYzcxMzQwZDU3MzUwYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnQuaWRsCkBAIC0yMyw3ICsyMyw4IEBAIG1vZHVsZSBldmVudHMgewogICAgIC8vIEludHJv
ZHVjZWQgaW4gRE9NIExldmVsIDI6CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ3VzdG9tVG9K
UywKLSAgICAgICAgQ3VzdG9tQ29uc3RydWN0b3IsCisgICAgICAgIFY4Q29uc3RydWN0b3JUZW1w
bGF0ZT1FdmVudCwKKyAgICAgICAgSlNDdXN0b21Db25zdHJ1Y3RvciwKICAgICAgICAgTm9TdGF0
aWNUYWJsZXMsCiAgICAgICAgIFBvbHltb3JwaGljCiAgICAgXSBFdmVudCB7CkBAIC01Nyw4ICs1
OCw4IEBAIG1vZHVsZSBldmVudHMgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRXZlbnRU
YXJnZXQgICAgICB0YXJnZXQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBFdmVudFRhcmdl
dCAgICAgIGN1cnJlbnRUYXJnZXQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBzaG9ydCAgIGV2ZW50UGhhc2U7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFu
ICAgICAgICAgIGJ1YmJsZXM7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuICAg
ICAgICAgIGNhbmNlbGFibGU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbSW5pdGlhbGl6
ZWRCeUNvbnN0cnVjdG9yXSBib29sZWFuIGJ1YmJsZXM7CisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBbSW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yXSBib29sZWFuIGNhbmNlbGFibGU7CiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01UaW1lU3RhbXAgICAgIHRpbWVTdGFtcDsKIAogICAg
ICAgICB2b2lkICAgICAgICAgICAgICAgc3RvcFByb3BhZ2F0aW9uKCk7Cg==
</data>
<flag name="review"
          id="113250"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114576</attachid>
            <date>2011-11-10 14:41:38 -0800</date>
            <delta_ts>2011-11-10 14:41:38 -0800</delta_ts>
            <desc>patch for commit</desc>
            <filename>bug-72055-20111110144137.patch</filename>
            <type>text/plain</type>
            <size>72034</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk4OTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNjRmOWYyNjhhZTBkOTVm
NDU4ZDk1YjViMTQwMjE3ZWM0MmU4NDViLi5mNTRkOTBlZmJmYTVmNDhhM2ZjODc4Njg1NmM2YjBj
MjExNWZiMDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTE3IEBACisyMDExLTExLTEwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBDb2RlR2VuZXJhdG9y
VjgucG0gY2FuIGdlbmVyYXRlIEV2ZW50IGNvbnN0cnVjdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtIEJhcnRoLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgQ29kZUdlbmVyYXRvclY4
LnBtIGdlbmVyYXRlIEV2ZW50IGNvbnN0cnVjdG9ycworICAgICAgICBhbmQgcmVwbGFjZXMgYSBj
dXN0b20gY29uc3RydWN0b3Igb2YgRXZlbnQgd2l0aCB0aGUgZ2VuZXJhdGVkIG9uZS4KKyAgICAg
ICAgQWZ0ZXIgdGhpcyBwYXRjaCBpcyBsYW5kZWQgd2l0aG91dCByZWdyZXNzaW9uLAorICAgICAg
ICBJIHdpbGwgcmVwbGFjZSBjdXN0b20gY29uc3RydWN0b3JzIG9mIGFsbCBvdGhlciBFdmVudHMu
CisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0d28gbmV3IElETHM6CisKKyAgICAgICAg
LSBbQ29uc3RydWN0b3JUZW1wbGF0ZT1FdmVudF0gSURMIGluZGljYXRlcyB0aGF0IENvZGVHZW5l
cmF0b3Igc2hvdWxkCisgICAgICAgIGdlbmVyYXRlIGFuIEV2ZW50IGNvbnN0cnVjdG9yLgorICAg
ICAgICAtIFtJbml0aWFsaXplZEJ5Q29uc3RydWN0b3JdIElETCBvbiBhbiBhdHRyaWJ1dGUgaW5k
aWNhdGVzIHRoYXQKKyAgICAgICAgdGhlIGF0dHJpYnV0ZSBjYW4gYmUgaW5pdGlhbGl6ZWQgYnkg
dGhlIGNvbnN0cnVjdG9yLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2V2ZW50cy9jb25zdHJ1Y3Rv
cnMvZXZlbnQtY29uc3RydWN0b3JzLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL2Nv
bnN0cnVjdG9ycy9jdXN0b20tZXZlbnQtY29uc3RydWN0b3IuaHRtbAorICAgICAgICAgICAgICAg
ZmFzdC9ldmVudHMvY29uc3RydWN0b3JzL3Byb2dyZXNzLWV2ZW50LWNvbnN0cnVjdG9yLmh0bWwK
KworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAg
ICAoR2VuZXJhdGVIZWFkZXIpOiBBZGRlZCBhIGhlYWRlciBmb3IgZmlsbFhYWFhFdmVudEluaXQo
Li4uKS4KKyAgICAgICAgKElzQ29uc3RydWN0YWJsZSk6IEp1ZGdlcyBpZiBhIGdpdmVuIGludGVy
ZmFjZSBpcyBjb25zdHJ1Y3RhYmxlLgorICAgICAgICAoSXNDb25zdHJ1Y3RvclRlbXBsYXRlKTog
SnVkZ2VzIGlmIGEgZ2l2ZW4gaW50ZXJmYWNlIGhhcyBhIGdpdmVuIHRlbXBsYXRlLCBlLmcuIGp1
ZGdlcyBpZiBhbiBpbnRlcmZhY2UgaGFzIFtDb25zdHJ1Y3RvclRlbXBsYXRlPUV2ZW50XS4KKyAg
ICAgICAgKEdlbmVyYXRlRXZlbnRDb25zdHJ1Y3RvckNhbGxiYWNrKTogR2VuZXJhdGVzIGFuIEV2
ZW50IGNvbnN0cnVjdG9yLiBUaGUgZ2VuZXJhdGVkIGNvZGUgaXMgdGhlIHNhbWUgYXMgdGhlIGNv
ZGUgdGhhdCBoYWQgYmVlbiB3cml0dGVuIGluIFY4RXZlbnRDb25zdHJ1Y3RvcnMuY3BwLgorICAg
ICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6IEdlbmVyYXRlcyBhbiBFdmVudCBjb25zdHJ1
Y3RvciBpZiBbQ29uc3RydWN0b3JUZW1wbGF0ZT1FdmVudF0gaXMgc3BlY2lmaWVkLgorICAgICAg
ICAqIGRvbS9FdmVudC5pZGw6IEFkZGVkIFtDb25zdHJ1Y3RvclRlbXBsYXRlPUV2ZW50XSBJREwu
IEFkZGVkIFtJbml0aWFsaXplZEJ5Q29uc3RydWN0b3JdIElETCB0byBhdHRyaWJ1dGVzIHRoYXQg
Y2FuIGJlIGluaXRpYWxpemVkIGJ5IGEgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdEV2ZW50Q29uc3RydWN0b3IuaWRsOiBBZGRlZCBhIG5ldyBydW4t
YmluZGluZ3MtdGVzdC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRP
TVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcDogVXBkYXRlZCBhIHJ1bi1iaW5kaW5ncy10ZXN0cyBy
ZXN1bHQuCisgICAgICAgIChXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6V2ViRE9NVGVzdEV2
ZW50Q29uc3RydWN0b3JQcml2YXRlOjpXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUp
OgorICAgICAgICAoV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6OldlYkRPTVRlc3RFdmVudENv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yOjpvcGVyYXRv
cj0pOgorICAgICAgICAoV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6OmltcGwpOgorICAgICAg
ICAoV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6On5XZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6YXR0cjEpOgorICAgICAg
ICAoV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6OmF0dHIyKToKKyAgICAgICAgKHRvV2ViQ29y
ZSk6CisgICAgICAgICh0b1dlYktpdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0NQUC9XZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5oOiBEaXR0by4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5j
cHA6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpraXQpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rl
c3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIyKToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZmluYWxpemUpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX3NldF9wcm9wZXJ0eSk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X3Byb3BlcnR5
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9jb25zdHJ1Y3Rl
ZCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfY2xhc3NfaW5p
dCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfaW5pdCk6Cisg
ICAgICAgIChXZWJLaXQ6OndyYXBUZXN0RXZlbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3Iu
aDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlLmg6IERpdHRvLgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcDogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OkpTVGVz
dEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RF
dmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlT
bG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rv
cjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2
ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxmKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlUHJv
dG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9y
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RXZl
bnRDb25zdHJ1Y3RvckF0dHIxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEV2ZW50Q29uc3Ry
dWN0b3JBdHRyMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RFdmVudENvbnN0cnVjdG9yQ29u
c3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b1Rlc3RFdmVudENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RFdmVudENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6aW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RF
dmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OkpTVGVzdEV2ZW50Q29u
c3RydWN0b3JQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RFdmVudENvbnN0cnVjdG9yLmg6IERpdHRvLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RFdmVudENvbnN0cnVj
dG9yLm1tOiBEaXR0by4KKyAgICAgICAgKC1bRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgZGVhbGxv
Y10pOgorICAgICAgICAoLVtET01UZXN0RXZlbnRDb25zdHJ1Y3RvciBmaW5hbGl6ZV0pOgorICAg
ICAgICAoLVtET01UZXN0RXZlbnRDb25zdHJ1Y3RvciBhdHRyMV0pOgorICAgICAgICAoLVtET01U
ZXN0RXZlbnRDb25zdHJ1Y3RvciBhdHRyMl0pOgorICAgICAgICAoY29yZSk6CisgICAgICAgIChr
aXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RFdmVudENv
bnN0cnVjdG9ySW50ZXJuYWwuaDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RFdmVudENvbnN0cnVjdG9ySW50ZXJuYWw6OlY4X1VTRSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvckludGVybmFsOjphdHRyMUF0dHJHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3JJbnRlcm5hbDo6YXR0cjJBdHRyR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdEV2ZW50Q29uc3RydWN0b3JU
ZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRS
YXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpH
ZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpI
YXNJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp3
cmFwU2xvdyk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpkZXJl
Zk9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50
Q29uc3RydWN0b3IuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudENvbnN0
cnVjdG9yOjp0b05hdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudENvbnN0cnVj
dG9yOjpleGlzdGluZ1dyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRDb25z
dHJ1Y3Rvcjo6d3JhcCk6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmg6IERpdHRvLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmg6
IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENv
bnN0cnVjdG9yLmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RPYmouaDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oOiBEaXR0by4KKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhFdmVudENvbnN0cnVjdG9ycy5jcHA6IFJlbW92ZWQgYSBjdXN0
b20gY29uc3RydWN0b3Igb2YgRXZlbnQuCisKIDIwMTEtMTEtMTAgIEJlbmphbWluIFBvdWxhaW4g
IDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIERvIG5vdCBzaGFyZSBDU1Mgc3R5bGUg
Zm9yIE1lZGlhRWxlbWVudCBiYWNrZWQgYnkgYSBwbHVnaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggYjMzMzk4MjU3MzM0
MDczNmNiZjYxNDZjNzM3ZjcxOTRjOTYyZmJhYy4uYzU1MzI1YjE5M2ZlNzY1ZDNjMTkzZmE1YTMz
YWQ5YWVjZDk0MDYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTMwNywyMSArMzA3LDI0IEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxudGVtcGxhdGU8dHlwZW5h
bWUgUHJvcGVydHlUeXBlPiBjbGFzcyBTVkdMaXN0UHJvcGVydHlUZWFyT2ZmO1xuIik7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuY2xhc3MgRmxvYXRSZWN0
O1xuIikgaWYgJHN2Z1Byb3BlcnR5VHlwZSAmJiAkc3ZnUHJvcGVydHlUeXBlIGVxICJGbG9hdFJl
Y3QiOworCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7CisgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgImNsYXNzIEZsb2F0UmVjdDtcbiIpIGlmICRzdmdQcm9wZXJ0eVR5cGUgJiYgJHN2
Z1Byb3BlcnR5VHlwZSBlcSAiRmxvYXRSZWN0IjsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
Y2xhc3MgT3B0aW9uc09iamVjdDtcbiIpIGlmIElzQ29uc3RydWN0b3JUZW1wbGF0ZSgkZGF0YU5v
ZGUsICJFdmVudCIpOwogCiAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlRm9yQ29u
dmVyc2lvbnMoJGRhdGFOb2RlLCAkaW50ZXJmYWNlTmFtZSk7CiAgICAgaWYgKCRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSkgewogICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCA8PEVORCk7Ci0KIGNsYXNzIFY4JHtuYXRpdmVUeXBlfUNvbnN0cnVj
dG9yIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IEdldFRlbXBsYXRlKCk7CiAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwog
fTsKKwogRU5ECiAgICAgfQogCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuY2xhc3MgJGNs
YXNzTmFtZSB7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgJGNsYXNzTmFt
ZSB7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7CiAKICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0RlcGVuZGVudExp
ZmV0aW1lID0gIik7CkBAIC0zOTMsNyArMzk2LDcgQEAgRU5ECiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0
b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOEN1c3RvbUNvbnN0cnVj
dG9yIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSkg
eworICAgIGlmIChJc0NvbnN0cnVjdGFibGUoJGRhdGFOb2RlKSkgewogICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCA8PEVORCk7CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
b25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmKTsKIEVORApAQCAtNTA2LDcg
KzUwOSwxMSBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwg
JHtuYXRpdmVUeXBlfSA+IGltcGwke2ZvcmNlTmV3T2JqZQogRU5ECiAgICAgfQogCi0gICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIn1cblxuIik7CisgICAgaWYgKElzQ29uc3RydWN0b3JUZW1wbGF0
ZSgkZGF0YU5vZGUsICJFdmVudCIpKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJc
bmJvb2wgZmlsbCR7aW1wbENsYXNzTmFtZX1Jbml0KCR7aW1wbENsYXNzTmFtZX1Jbml0JiwgY29u
c3QgT3B0aW9uc09iamVjdCYpO1xuIik7CisgICAgfQorCisgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIlxufVxuXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlmIC8vICRjbGFz
c05hbWUiIC4gIl9oXG4iKTsKIAogICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRl
Q29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKQEAgLTY5Miw2ICs2OTksMjEgQEAgc3ViIElz
VmlzaWJsZUFjcm9zc09yaWdpbnMKICAgICByZXR1cm4gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ2hlY2tEb21haW5TZWN1cml0eSJ9ICYmICEoJGRhdGFOb2RlLT5uYW1lIGVxICJE
T01XaW5kb3ciKTsKIH0KIAorc3ViIElzQ29uc3RydWN0YWJsZQoreworICAgIG15ICRkYXRhTm9k
ZSA9IHNoaWZ0OworCisgICAgcmV0dXJuICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
VjhDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhDb25z
dHJ1Y3RvclRlbXBsYXRlIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29u
c3RydWN0b3JUZW1wbGF0ZSJ9OworfQorCitzdWIgSXNDb25zdHJ1Y3RvclRlbXBsYXRlCit7Cisg
ICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkgJHRlbXBsYXRlID0gc2hpZnQ7CisKKyAg
ICByZXR1cm4gKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4Q29uc3RydWN0b3JU
ZW1wbGF0ZSJ9ICYmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4Q29uc3RydWN0
b3JUZW1wbGF0ZSJ9IGVxICR0ZW1wbGF0ZSkgfHwgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNvbnN0cnVjdG9yVGVtcGxhdGUifSAmJiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDb25zdHJ1Y3RvclRlbXBsYXRlIn0gZXEgJHRlbXBsYXRlKTsKK30KKwogc3ViIEdl
bmVyYXRlRG9tYWluU2FmZUZ1bmN0aW9uR2V0dGVyCiB7CiAgICAgbXkgJGZ1bmN0aW9uID0gc2hp
ZnQ7CkBAIC0xNjA2LDYgKzE2MjgsNjggQEAgRU5ECiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJc
biIpOwogfQogCitzdWIgR2VuZXJhdGVFdmVudENvbnN0cnVjdG9yQ2FsbGJhY2sKK3sKKyAgICBt
eSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworCisg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIk9wdGlvbnNPYmplY3QuaCIpOworICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJWOEJpbmRpbmdNYWNyb3MuaCIpOworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVO
RCk7Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjgke2ltcGxDbGFzc05hbWV9Ojpjb25zdHJ1Y3Rv
ckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJE
T00uJHtpbXBsQ2xhc3NOYW1lfS5Db25zdHJ1Y3RvciIpOworCisgICAgaWYgKCFhcmdzLklzQ29u
c3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25z
dHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIiwgVjhQcm94eTo6VHlwZUVy
cm9yKTsKKworICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1Y3Rv
ck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7
CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisKKyAgICBTVFJJ
TkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHR5cGUsIGFy
Z3NbMF0pOworICAgICR7aW1wbENsYXNzTmFtZX1Jbml0IGV2ZW50SW5pdDsKKyAgICBpZiAoYXJn
cy5MZW5ndGgoKSA+PSAyKSB7CisgICAgICAgIEVYQ0VQVElPTl9CTE9DSyhPcHRpb25zT2JqZWN0
LCBvcHRpb25zLCBhcmdzWzFdKTsKKyAgICAgICAgaWYgKCFmaWxsJHtpbXBsQ2xhc3NOYW1lfUlu
aXQoZXZlbnRJbml0LCBvcHRpb25zKSkKKyAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisgICAgfQorCisgICAgUmVmUHRyPCR7aW1wbENsYXNzTmFtZX0+IGV2ZW50ID0gJHtpbXBs
Q2xhc3NOYW1lfTo6Y3JlYXRlKHR5cGUsIGV2ZW50SW5pdCk7CisKKyAgICBWOERPTVdyYXBwZXI6
OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIGV2ZW50LmdldCgpKTsKKyAgICBy
ZXR1cm4gdG9WOChldmVudC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworfQorCitib29sIGZp
bGwke2ltcGxDbGFzc05hbWV9SW5pdCgke2ltcGxDbGFzc05hbWV9SW5pdCYgZXZlbnRJbml0LCBj
b25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zKQoreworRU5ECisKKyAgICBmb3JlYWNoIG15ICRp
bnRlcmZhY2VCYXNlIChAeyRkYXRhTm9kZS0+cGFyZW50c30pIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsIDw8RU5EKTsKKyAgICBpZiAoIWZpbGwke2ludGVyZmFjZUJhc2V9SW5pdChldmVu
dEluaXQsIG9wdGlvbnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKK0VORAorICAgIH0KKwor
ICAgIGZvciAobXkgJGluZGV4ID0gMDsgJGluZGV4IDwgQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9
OyAkaW5kZXgrKykgeworICAgICAgICBteSAkYXR0cmlidXRlID0gQHskZGF0YU5vZGUtPmF0dHJp
YnV0ZXN9WyRpbmRleF07CisgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJJbml0aWFsaXplZEJ5Q29uc3RydWN0b3IifSkgeworICAgICAgICAg
ICAgbXkgJGF0dHJpYnV0ZU5hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBvcHRpb25zLmdldChcIiRhdHRyaWJ1dGVO
YW1lXCIsIGV2ZW50SW5pdC4kYXR0cmlidXRlTmFtZSk7XG4iKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0VORAorfQorCiBzdWIgR2VuZXJhdGVOYW1lZENvbnN0cnVjdG9yQ2FsbGJhY2sKIHsKICAgICBt
eSAkZnVuY3Rpb24gPSBzaGlmdDsKQEAgLTIyOTAsNiArMjM3NCw4IEBAIEVORAogICAgICAgICBH
ZW5lcmF0ZU5hbWVkQ29uc3RydWN0b3JDYWxsYmFjaygkZGF0YU5vZGUtPmNvbnN0cnVjdG9yLCAk
ZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1lKTsKICAgICB9IGVsc2lmICgkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9ICYmICEoJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiVjhDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0pKSB7CiAgICAgICAgIEdlbmVyYXRlQ29u
c3RydWN0b3JDYWxsYmFjaygkZGF0YU5vZGUtPmNvbnN0cnVjdG9yLCAkZGF0YU5vZGUsICRpbnRl
cmZhY2VOYW1lKTsKKyAgICB9IGVsc2lmIChJc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGRhdGFOb2Rl
LCAiRXZlbnQiKSkgeworICAgICAgICBHZW5lcmF0ZUV2ZW50Q29uc3RydWN0b3JDYWxsYmFjaygk
ZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1lKTsKICAgICB9CiAKICAgICBteSAkYWNjZXNzX2NoZWNr
ID0gIiI7CkBAIC0yMzYyLDcgKzI0NDgsNyBAQCBFTkQKICAgICBVTlVTRURfUEFSQU0oZGVmYXVs
dFNpZ25hdHVyZSk7IC8vIEluIHNvbWUgY2FzZXMsIGl0IHdpbGwgbm90IGJlIHVzZWQuCiBFTkQK
IAotICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1
Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4Q3VzdG9tQ29uc3Ry
dWN0b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9
KSB7CisgICAgaWYgKElzQ29uc3RydWN0YWJsZSgkZGF0YU5vZGUpKSB7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCA8PEVORCk7CiAgICAgZGVzYy0+U2V0Q2FsbEhhbmRsZXIoVjgke2ludGVy
ZmFjZU5hbWV9Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKTsKIEVORApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0RXZlbnRDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRP
TVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTBiMDRlMzhlZjY1MzEzMzI4
ZDQ2NGMzN2NjYjM0ZjJhMjBlN2UwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAK
QEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIktV
UkwuaCIKKyNpbmNsdWRlICJUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkRP
TVN0cmluZy5oIgorI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKKyNpbmNsdWRlICJ3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1Y3QgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6Oldl
YkRPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZSB7CisgICAgV2ViRE9NVGVzdEV2ZW50Q29u
c3RydWN0b3JQcml2YXRlKFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBvYmplY3QgPSAw
KQorICAgICAgICA6IGltcGwob2JqZWN0KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3I+IGltcGw7Cit9OworCitXZWJET01UZXN0RXZlbnRD
b25zdHJ1Y3Rvcjo6V2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IoKQorICAgIDogV2ViRE9NT2Jq
ZWN0KCkKKyAgICAsIG1faW1wbCgwKQoreworfQorCitXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6V2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0
b3IqIGltcGwpCisgICAgOiBXZWJET01PYmplY3QoKQorICAgICwgbV9pbXBsKG5ldyBXZWJET01U
ZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUoaW1wbCkpCit7Cit9CisKK1dlYkRPTVRlc3RFdmVu
dENvbnN0cnVjdG9yOjpXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvcihjb25zdCBXZWJET01UZXN0
RXZlbnRDb25zdHJ1Y3RvciYgY29weSkKKyAgICA6IFdlYkRPTU9iamVjdCgpCit7CisgICAgbV9p
bXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRl
KGNvcHkuaW1wbCgpKSA6IDA7Cit9CisKK1dlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yJiBXZWJE
T01UZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6b3BlcmF0b3I9KGNvbnN0IFdlYkRPTVRlc3RFdmVudENv
bnN0cnVjdG9yJiBjb3B5KQoreworICAgIGRlbGV0ZSBtX2ltcGw7CisgICAgbV9pbXBsID0gY29w
eS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlKGNvcHkuaW1w
bCgpKSA6IDA7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJDb3JlOjpUZXN0RXZlbnRDb25z
dHJ1Y3RvciogV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6OmltcGwoKSBjb25zdAoreworICAg
IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmltcGwuZ2V0KCkgOiAwOworfQorCitXZWJET01UZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6fldlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yKCkKK3sKKyAgICBk
ZWxldGUgbV9pbXBsOworICAgIG1faW1wbCA9IDA7Cit9CisKK1dlYkRPTVN0cmluZyBXZWJET01U
ZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6YXR0cjEoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQor
ICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgV1RGOjpTdHJpbmcmPihpbXBsKCktPmF0dHIxKCkpOworfQorCitXZWJET01TdHJpbmcg
V2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6OmF0dHIyKCkgY29uc3QKK3sKKyAgICBpZiAoIWlt
cGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOworCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFdURjo6U3RyaW5nJj4oaW1wbCgpLT5hdHRyMigpKTsKK30KKworV2ViQ29y
ZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0RXZlbnRD
b25zdHJ1Y3RvciYgd3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBlci5pbXBsKCk7Cit9CisK
K1dlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RFdmVudENv
bnN0cnVjdG9yKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0
b3IodmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU4YzQ5Mjk3ZTUzNTMyZTQ0ZWM4ODJhNzAyOGZhNWZiYjRkMGFiZDMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RFdmVudENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
U2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3JfaAorI2RlZmluZSBXZWJET01UZXN0RXZlbnRD
b25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4KKyNpbmNsdWRlIDxXZWJE
T01TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGVzdEV2ZW50Q29uc3Ry
dWN0b3I7Cit9OworCisKK2NsYXNzIFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yIDogcHVibGlj
IFdlYkRPTU9iamVjdCB7CitwdWJsaWM6CisgICAgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3Io
KTsKKyAgICBleHBsaWNpdCBXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0
RXZlbnRDb25zdHJ1Y3RvciopOworICAgIFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yKGNvbnN0
IFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yJik7CisgICAgV2ViRE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3ImIG9wZXJhdG9yPShjb25zdCBXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3RvciYpOworICAg
IHZpcnR1YWwgfldlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yKCk7CisKKyAgICBXZWJET01TdHJp
bmcgYXR0cjEoKSBjb25zdDsKKyAgICBXZWJET01TdHJpbmcgYXR0cjIoKSBjb25zdDsKKworICAg
IFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXBsKCkgY29uc3Q7CisKK3Byb3RlY3Rl
ZDoKKyAgICBzdHJ1Y3QgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlOworICAgIFdl
YkRPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZSogbV9pbXBsOworfTsKKworV2ViQ29yZTo6
VGVzdEV2ZW50Q29uc3RydWN0b3IqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0RXZlbnRDb25z
dHJ1Y3RvciYpOworV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgdG9XZWJLaXQoV2ViQ29yZTo6
VGVzdEV2ZW50Q29uc3RydWN0b3IqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzc4OGYxODQ0
NjQ4NDBiMjJmMzM4NTdkMDE5MTc1OGZkNjY2YTBhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAi
RE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAi
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisjaW5jbHVkZSAiVGVzdEV2ZW50Q29uc3RydWN0b3Iu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiZ29iamVjdC9Db252
ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVj
dG9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKyNpbmNsdWRlICJ3ZWJr
aXRnbG9iYWxzcHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisgICAgCitXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvcioga2l0KFdl
YkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBvYmopCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwob2JqLCAwKTsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6
Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0RXZlbnRD
b25zdHJ1Y3Rvcio+KHJldCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVz
dEV2ZW50Q29uc3RydWN0b3IqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFw
VGVzdEV2ZW50Q29uc3RydWN0b3Iob2JqKSkpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0IC8vCisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9h
dHRyMShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciogc2VsZikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IgKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmF0dHIxKCkpOworICAgIHJldHVybiByZXM7Cit9CisKK2djaGFyKgord2Via2l0X2RvbV90
ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMihXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1
Y3Rvciogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEV2
ZW50Q29uc3RydWN0b3IgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHIyKCkpOworICAgIHJldHVybiByZXM7
Cit9CisKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciwgd2Vi
a2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIGNv
cmUoV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7CisKKyAgICBXZWJDb3JlOjpUZXN0RXZlbnRDb25z
dHJ1Y3RvciogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RFdmVudENvbnN0
cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgcmV0dXJuIGNvcmVPYmpl
Y3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorZW51bSB7CisgICAgUFJPUF8wLAorICAg
IFBST1BfQVRUUjEsCisgICAgUFJPUF9BVFRSMiwKK307CisKKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmpl
Y3QpOworICAgIAorICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CisgICAgICAgIFdl
YkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IgKj4oZG9tX29iamVjdC0+Y29yZU9iamVjdCk7CisK
KyAgICAgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KGNvcmVPYmplY3QpOworICAg
ICAgICBjb3JlT2JqZWN0LT5kZXJlZigpOworCisgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmpl
Y3QgPSBOVUxMOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9l
dmVudF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3Jfc2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9l
dmVudF9jb25zdHJ1Y3Rvcl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
X2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3IqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1Iob2JqZWN0KTsK
KyAgICBXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvciogY29yZVNlbGYgPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0FUVFIxOgor
ICAgIHsKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0
cmluZyhjb3JlU2VsZi0+YXR0cjEoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBQUk9QX0FUVFIyOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
Y29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+YXR0cjIoKSkpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2NvbnN0
cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKworICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJr
aXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQp
CisgICAgICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rv
cl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0
RXZlbnRDb25zdHJ1Y3RvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNz
ICpnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZmlu
YWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rf
ZXZlbnRfY29uc3RydWN0b3Jfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9wcm9wZXJ0eTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVkID0gd2Via2l0X2RvbV90ZXN0X2V2ZW50X2Nv
bnN0cnVjdG9yX2NvbnN0cnVjdGVkOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
Uk9QX0FUVFIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygiYXR0cjEiLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X2V2ZW50X2NvbnN0cnVjdG9y
X2F0dHIxIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtb25seSAgZ2NoYXIqIFRl
c3RFdmVudENvbnN0cnVjdG9yLmF0dHIxIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21l
IGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAvKiBkZWZhdWx0ICovCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29i
amVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9BVFRS
MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoImF0dHIyIiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9hdHRyMiIs
IC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLW9ubHkgIGdjaGFyKiBUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5hdHRyMiIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBk
b2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiIiwgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25z
dHJ1Y3Rvcl9pbml0KFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiByZXF1ZXN0KQorewor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiB3
cmFwVGVzdEV2ZW50Q29uc3RydWN0b3IoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIGNv
cmVPYmplY3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisK
KyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50
ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxs
b2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRo
ZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVm
KCk7CisKKyAgICByZXR1cm4gIFdFQktJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUihnX29i
amVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNv
cmVPYmplY3QsIE5VTEwpKTsKK30KK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEV2ZW50Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmYz
MzdmYjYwMTU0NTczNGQ1OGQ3YzAyOGFiMWEzOTc5MDQ2MWI5ZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaWZuZGVmIFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yX2gKKyNkZWZpbmUg
V2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAid2Via2l0L3dlYmtp
dGRvbWRlZmluZXMuaCIKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRkZWZpbmVzLmg+CisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTU9iamVjdC5oIgor
CisKK0dfQkVHSU5fREVDTFMKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRE9NX1RFU1RfRVZFTlRfQ09O
U1RSVUNUT1IgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUihvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQ
RV9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0
b3IpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1JfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9N
X1RFU1RfRVZFTlRfQ09OU1RSVUNUT1IsIFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yQ2xh
c3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUihvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ET01f
VEVTVF9FVkVOVF9DT05TVFJVQ1RPUikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9FVkVO
VF9DT05TVFJVQ1RPUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUikpCisjZGVmaW5lIFdF
QktJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9FVkVOVF9DT05T
VFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JDbGFzcykpCisKK3N0cnVjdCBf
V2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJl
bnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9y
Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dF
QktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9nZXRfdHlw
ZSAodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dl
dF9hdHRyMToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvcgorICoK
KyAqIFJldHVybnM6CisgKgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV90ZXN0
X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rv
ciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dl
dF9hdHRyMjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvcgorICoK
KyAqIFJldHVybnM6CisgKgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV90ZXN0
X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMihXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rv
ciogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0RXZlbnRD
b25zdHJ1Y3Rvcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjMGU4NTI4OTAwZTM3ZmM2
YjM2MzVkY2Q3Y2YxMjY0YmZlMWZkZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1
Y3RvclByaXZhdGUuaApAQCAtMCwwICsxLDM5IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgV0VCX0tJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUl9QUklWQVRFX0gKKyNk
ZWZpbmUgV0VCX0tJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUl9QUklWQVRFX0gKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L1dlYktpdERPTU9iamVjdC5o
PgorI2luY2x1ZGUgIlRlc3RFdmVudENvbnN0cnVjdG9yLmgiCituYW1lc3BhY2UgV2ViS2l0IHsK
KyAgICBXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvciAqCisgICAgd3JhcFRlc3RFdmVudENv
bnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yICpjb3JlT2JqZWN0KTsKKwor
ICAgIFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yICoKKyAgICBjb3JlKFdlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yICpyZXF1ZXN0KTsKKworICAgIFdlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yKgorICAgIGtpdChXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3Rvciogbm9kZSk7
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV0VCX0tJVF9ET01fVEVTVF9F
VkVOVF9DT05TVFJVQ1RPUl9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVj
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43M2UyZmEzNWE0ZTNkMjA4YzQzMTUwMWU1MmZlNTQ0Njg0Y2Nh
ZWVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMjA2IEBACisvKgor
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rl
c3RFdmVudENvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiVGVz
dEV2ZW50Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0FTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcik7CisKKy8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCisjaWYgRU5BQkxFKEpJ
VCkKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikgLCBnZW5lcmF0b3IKKyNlbHNl
CisjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCisjZW5kaWYKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKyNkZWZpbmUgSU5UUklOU0lDKGludHJpbnNpYykgLCBpbnRyaW5zaWMKKyNlbHNl
CisjZGVmaW5lIElOVFJJTlNJQyhpbnRyaW5zaWMpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KK3sKKyAg
ICB7ICJhdHRyMSIsIERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEp
LCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgSU5UUklOU0lDKERGRzo6Tm9JbnRyaW5z
aWMpIH0sCisgICAgeyAiYXR0cjIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RXZlbnRDb25zdHJ1
Y3RvckF0dHIyKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIElOVFJJTlNJQyhERkc6
Ok5vSW50cmluc2ljKSB9LAorICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0gfCBSZWFkT25s
eSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFU
T1IoMCkgSU5UUklOU0lDKERGRzo6Tm9JbnRyaW5zaWMpIH0sCisgICAgeyAwLCAwLCAwLCAwIFRI
VU5LX0dFTkVSQVRPUigwKSBJTlRSSU5TSUMoREZHOjpOb0ludHJpbnNpYykgfQorfTsKKworI3Vu
ZGVmIFRIVU5LX0dFTkVSQVRPUgorc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxl
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JUYWJsZSA9IHsgOSwgNywgSlNUZXN0RXZlbnRDb25zdHJ1
Y3RvclRhYmxlVmFsdWVzLCAwIH07CisvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwor
I2lmIEVOQUJMRShKSVQpCisjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpICwgZ2Vu
ZXJhdG9yCisjZWxzZQorI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQorI2VuZGlm
CisjaWYgRU5BQkxFKERGR19KSVQpCisjZGVmaW5lIElOVFJJTlNJQyhpbnRyaW5zaWMpICwgaW50
cmluc2ljCisjZWxzZQorI2RlZmluZSBJTlRSSU5TSUMoaW50cmluc2ljKQorI2VuZGlmCisKK3N0
YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0
b3JUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDAp
IElOVFJJTlNJQyhERkc6Ok5vSW50cmluc2ljKSB9Cit9OworCisjdW5kZWYgVEhVTktfR0VORVJB
VE9SCitzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0RXZlbnRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yVGFibGUgPSB7IDEsIDAsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JD
b25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07Citjb25zdCBDbGFzc0luZm8gSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RXZlbnRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yIiwgJkRPTUNvbnN0cnVjdG9yT2JqZWN0OjpzX2luZm8sICZKU1Rlc3RFdmVudENv
bnN0cnVjdG9yQ29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RF
dmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH07CisKK0pTVGVzdEV2ZW50Q29uc3RydWN0b3JD
b25zdHJ1Y3Rvcjo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29u
c3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK3ZvaWQgSlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoJnNf
aW5mbykpOworICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYo
ZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKK30KKworYm9vbCBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxK
U1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpT
VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlLCBzdGF0aWNfY2FzdDxKU1Rlc3RF
dmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsK
K30KKworYm9vbCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQor
eworICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0RXZlbnRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZKU1Rlc3RFdmVudENvbnN0cnVj
dG9yQ29uc3RydWN0b3JUYWJsZSwgc3RhdGljX2Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKworQ29u
c3RydWN0VHlwZSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldENvbnN0cnVj
dERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25z
dHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEpTVGVzdEV2ZW50Q29uc3RydWN0
b3I7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCisvKiBIYXNoIHRhYmxlIGZv
ciBwcm90b3R5cGUgKi8KKyNpZiBFTkFCTEUoSklUKQorI2RlZmluZSBUSFVOS19HRU5FUkFUT1Io
Z2VuZXJhdG9yKSAsIGdlbmVyYXRvcgorI2Vsc2UKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdl
bmVyYXRvcikKKyNlbmRpZgorI2lmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBJTlRSSU5TSUMo
aW50cmluc2ljKSAsIGludHJpbnNpYworI2Vsc2UKKyNkZWZpbmUgSU5UUklOU0lDKGludHJpbnNp
YykKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXZlbnRDb25z
dHJ1Y3RvclByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgMCwgMCwgMCwgMCBUSFVO
S19HRU5FUkFUT1IoMCkgSU5UUklOU0lDKERGRzo6Tm9JbnRyaW5zaWMpIH0KK307CisKKyN1bmRl
ZiBUSFVOS19HRU5FUkFUT1IKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGUgPSB7IDEsIDAsIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3JQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OworY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RFdmVudENvbnN0
cnVjdG9yUHJvdG90eXBlIiwgJkpTQzo6SlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAmSlNUZXN0
RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUpIH07CisKK0pTT2JqZWN0KiBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEV2
ZW50Q29uc3RydWN0b3I+KGV4ZWMsIGdsb2JhbE9iamVjdCk7Cit9CisKK2NvbnN0IENsYXNzSW5m
byBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciIsICZKU0RPTVdyYXBwZXI6OnNfaW5mbywgJkpTVGVzdEV2ZW50Q29uc3RydWN0b3JUYWJsZSwg
MCAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RXZlbnRDb25zdHJ1Y3RvcikgfTsKKworSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0
RXZlbnRDb25zdHJ1Y3Rvcj4gaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCkKKyAgICAsIG1faW1wbChpbXBsKQoreworfQorCit2b2lkIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBBU1NFUlQoaW5oZXJp
dHMoJnNfaW5mbykpOworfQorCitKU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKK3sKKyAgICByZXR1cm4gSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitib29s
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihjZWxsKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIHJldHVybiBnZXRT
dGF0aWNWYWx1ZVNsb3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvciwgQmFzZT4oZXhlYywgJkpTVGVz
dEV2ZW50Q29uc3RydWN0b3JUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsK
K30KKworYm9vbCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvcio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCAmc19pbmZvKTsKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpT
VGVzdEV2ZW50Q29uc3RydWN0b3IsIEJhc2U+KGV4ZWMsICZKU1Rlc3RFdmVudENvbnN0cnVjdG9y
VGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK0pTVmFs
dWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBz
bG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihhc09i
amVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0RXZlbnRD
b25zdHJ1Y3RvciogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdEV2ZW50Q29uc3RydWN0b3IqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmcoZXhlYywgaW1w
LT5hdHRyMSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK0pTVmFsdWUganNUZXN0RXZl
bnRDb25zdHJ1Y3RvckF0dHIyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29u
c3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogY2FzdGVkVGhp
cyA9IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihhc09iamVjdChzbG90QmFz
ZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0RXZlbnRDb25zdHJ1Y3Rvciog
aW1wID0gc3RhdGljX2Nhc3Q8VGVzdEV2ZW50Q29uc3RydWN0b3IqPihjYXN0ZWRUaGlzLT5pbXBs
KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmcoZXhlYywgaW1wLT5hdHRyMigpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK0pTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRl
bnRpZmllciYpCit7CisgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogZG9tT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Cisg
ICAgcmV0dXJuIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKGV4ZWMsIGRv
bU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOworfQorCitKU1ZhbHVlIEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3I6OmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yPihleGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGdsb2JhbE9iamVjdCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEV2ZW50Q29uc3Ry
dWN0b3IqIGltcGwpCit7CisgICAgcmV0dXJuIHdyYXA8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4o
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVzdEV2ZW50Q29uc3RydWN0b3IqIHRv
VGVzdEV2ZW50Q29uc3RydWN0b3IoSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB2
YWx1ZS5pbmhlcml0cygmSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6c19pbmZvKSA/IHN0YXRpY19j
YXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAw
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OWUx
OGNmZGE1NjIxYTM1NzU0OTI3ZTBiZTI5Yzc0ODkyOTZkMTVkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JfaAorI2RlZmluZSBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yX2gKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIlRlc3RFdmVudENv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlw
ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVGVzdEV2ZW50Q29uc3RydWN0
b3IgOiBwdWJsaWMgSlNET01XcmFwcGVyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTRE9NV3Jh
cHBlciBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiBjcmVhdGUoSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UGFzc1JlZlB0cjxUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4gaW1wbCkKKyAgICB7CisgICAgICAgIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVz
dEV2ZW50Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRl
UHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNz
SW5mbyBzX2luZm87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgVGVzdEV2ZW50Q29uc3Ry
dWN0b3IqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KKworcHJpdmF0ZToK
KyAgICBSZWZQdHI8VGVzdEV2ZW50Q29uc3RydWN0b3I+IG1faW1wbDsKK3Byb3RlY3RlZDoKKyAg
ICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBQYXNzUmVmUHRyPFRlc3RFdmVudENvbnN0cnVjdG9yPik7CisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6
U3RydWN0dXJlRmxhZ3M7Cit9OworCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEV2ZW50Q29uc3RydWN0b3IqKTsKK1Rlc3RFdmVudENv
bnN0cnVjdG9yKiB0b1Rlc3RFdmVudENvbnN0cnVjdG9yKEpTQzo6SlNWYWx1ZSk7CisKK2NsYXNz
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNl
OworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90
eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUqIHB0ciA9IG5ldyAoSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZT4oZ2xvYmFsRGF0YS5o
ZWFwKSkgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0
YSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IEpTQzo6
Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJv
dG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK2NsYXNz
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rv
ck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rv
cihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVz
dEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBw
dHIgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1
Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcihz
dHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZXhl
YywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7
CisgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0
b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShK
U0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOworfTsKKworLy8gQXR0cmlidXRlcwor
CitKU0M6OkpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3Ry
dWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlND
OjpJZGVudGlmaWVyJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
RXZlbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZmM0ZWM1ZDY5Mzc0
ZDFjMTMzMGJhNDIwNGZiZTE4ODg4MWQ3OGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdEV2ZW50Q29uc3RydWN0b3Iu
aApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4KKworI2lmIFdFQktJVF9WRVJTSU9O
X01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAorCitAY2xhc3MgTlNTdHJpbmc7
CisKK0BpbnRlcmZhY2UgRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgOiBET01PYmplY3QKKy0gKE5T
U3RyaW5nICopYXR0cjE7CistIChOU1N0cmluZyAqKWF0dHIyOworQGVuZAorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RFdmVudENvbnN0cnVjdG9yLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzdlNjFmMTM3
ZTBlZTdjNWU5ODQ4YjljMTdhYjkzYzk0MDM2ZDZmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RFdmVudENvbnN0cnVj
dG9yLm1tCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1wb3J0ICJET01U
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgorCisjaW1wb3J0ICJET01CbG9iSW50ZXJuYWwuaCIKKyNp
bXBvcnQgIkRPTUNTU1J1bGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NQ1NTVmFsdWVJbnRlcm5h
bC5oIgorI2ltcG9ydCAiRE9NRXZlbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NTm9kZUludGVy
bmFsLmgiCisjaW1wb3J0ICJET01TdHlsZVNoZWV0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVRl
c3RFdmVudENvbnN0cnVjdG9ySW50ZXJuYWwuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJz
LmgiCisjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbXBvcnQgIktVUkwuaCIK
KyNpbXBvcnQgIlRlc3RFdmVudENvbnN0cnVjdG9yLmgiCisjaW1wb3J0ICJUaHJlYWRDaGVjay5o
IgorI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYlNjcmlwdE9iamVj
dFByaXZhdGUuaCIKKyNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4KKworI2RlZmluZSBJTVBMIHJlaW50
ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqPihfaW50ZXJuYWwpCisK
K0BpbXBsZW1lbnRhdGlvbiBET01UZXN0RXZlbnRDb25zdHJ1Y3RvcgorCistICh2b2lkKWRlYWxs
b2MKK3sKKyAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQo
W0RPTVRlc3RFdmVudENvbnN0cnVjdG9yIGNsYXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVmKCk7CisgICAgW3N1cGVy
IGRlYWxsb2NdOworfQorCistICh2b2lkKWZpbmFsaXplCit7CisgICAgaWYgKF9pbnRlcm5hbCkK
KyAgICAgICAgSU1QTC0+ZGVyZWYoKTsKKyAgICBbc3VwZXIgZmluYWxpemVdOworfQorCistIChO
U1N0cmluZyAqKWF0dHIxCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIHJldHVybiBJTVBMLT5hdHRyMSgpOworfQorCistIChOU1N0cmluZyAqKWF0dHIy
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVy
biBJTVBMLT5hdHRyMigpOworfQorCitAZW5kCisKK1dlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVj
dG9yKiBjb3JlKERPTVRlc3RFdmVudENvbnN0cnVjdG9yICp3cmFwcGVyKQoreworICAgIHJldHVy
biB3cmFwcGVyID8gcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3Rv
cio+KHdyYXBwZXItPl9pbnRlcm5hbCkgOiAwOworfQorCitET01UZXN0RXZlbnRDb25zdHJ1Y3Rv
ciAqa2l0KFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiB2YWx1ZSkKK3sKKyAgICB7IERP
TV9BU1NFUlRfTUFJTl9USFJFQUQoKTsgV2ViQ29yZVRocmVhZFZpb2xhdGlvbkNoZWNrUm91bmRP
bmUoKTsgfTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gbmlsOworICAgIGlmIChE
T01UZXN0RXZlbnRDb25zdHJ1Y3RvciAqd3JhcHBlciA9IGdldERPTVdyYXBwZXIodmFsdWUpKQor
ICAgICAgICByZXR1cm4gW1t3cmFwcGVyIHJldGFpbl0gYXV0b3JlbGVhc2VdOworICAgIERPTVRl
c3RFdmVudENvbnN0cnVjdG9yICp3cmFwcGVyID0gW1tET01UZXN0RXZlbnRDb25zdHJ1Y3RvciBh
bGxvY10gX2luaXRdOworICAgIHdyYXBwZXItPl9pbnRlcm5hbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
RE9NT2JqZWN0SW50ZXJuYWwqPih2YWx1ZSk7CisgICAgdmFsdWUtPnJlZigpOworICAgIGFkZERP
TVdyYXBwZXIod3JhcHBlciwgdmFsdWUpOworICAgIHJldHVybiBbd3JhcHBlciBhdXRvcmVsZWFz
ZV07Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0RXZlbnRDb25zdHJ1Y3RvckludGVybmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0RXZlbnRDb25zdHJ1Y3RvckludGVybmFs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmFhYzhmZmYyYThiZjg0ZjM2MzkxYzk5NzA1YWVkYWQ3MzExY2RjZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RFdmVudENvbnN0cnVjdG9ySW50ZXJuYWwuaApAQCAtMCwwICsxLDM4IEBACisv
KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01UZXN0RXZlbnRD
b25zdHJ1Y3Rvci5oPgorCisjaWYgV0VCS0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lU
X1ZFUlNJT05fTEFURVNUCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBUZXN0RXZl
bnRDb25zdHJ1Y3RvcjsKK30KKworV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIGNvcmUo
RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgKik7CitET01UZXN0RXZlbnRDb25zdHJ1Y3RvciAqa2l0
KFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFdmVudENvbnN0cnVjdG9y
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RXZlbnRDb25z
dHJ1Y3Rvci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGQzYmFlZTMyMDdjNWQ4MTUwYTMwMGRlNjk4Zjc2M2Vj
MjFlNDMxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0RXZlbnRDb25zdHJ1Y3Rvci5pZGwKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXN0ckFy
Zywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVzdHJBcmcsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBUaGlzIElETCBmaWxlIGlzIGZvciB0ZXN0aW5nIHRoZSBiaW5kaW5ncyBjb2RlIGdl
bmVyYXRvciBhbmQgZm9yIHRyYWNraW5nCisvLyBjaGFuZ2VzIGluIGl0cyBvdXB1dC4KK21vZHVs
ZSB0ZXN0IHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDdXN0b21Db25zdHJ1Y3Rvcj1FdmVu
dAorICAgIF0gVGVzdEV2ZW50Q29uc3RydWN0b3IgeworICAgICAgICAvLyBBdHRyaWJ1dGVzCisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgYXR0cjE7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBbSW5pdGlhbGl6ZWRBdENvbnN0cnVjdG9yXSBET01TdHJpbmcgYXR0cjI7
CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jZTI4OTI3MTE0NmQ2MTYyNGU5MDNhN2MwNDkxZmZiYzg2YWI3MzNjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50
Q29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4VGVzdEV2ZW50Q29uc3RydWN0b3IuaCIK
KworI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBl
ci5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCisjaW5jbHVkZSAiVjhQcm94eS5o
IgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1dyYXBwZXJUeXBlSW5mbyBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjppbmZvID0geyBWOFRlc3RF
dmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSwgVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6ZGVy
ZWZPYmplY3QsIDAsIDAgfTsKKworbmFtZXNwYWNlIFRlc3RFdmVudENvbnN0cnVjdG9ySW50ZXJu
YWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkgeyB9CisKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXR0cjFBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFU
UygiRE9NLlRlc3RFdmVudENvbnN0cnVjdG9yLmF0dHIxLl9nZXQiKTsKKyAgICBUZXN0RXZlbnRD
b25zdHJ1Y3RvciogaW1wID0gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+YXR0cjEoKSk7Cit9CisKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXR0cjJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFU
UygiRE9NLlRlc3RFdmVudENvbnN0cnVjdG9yLmF0dHIyLl9nZXQiKTsKKyAgICBUZXN0RXZlbnRD
b25zdHJ1Y3RvciogaW1wID0gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+YXR0cjIoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RFdmVudENvbnN0cnVjdG9ySW50ZXJuYWwKKworc3RhdGljIGNvbnN0IEJh
dGNoZWRBdHRyaWJ1dGUgVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyc1tdID0geworICAgIC8vIEF0
dHJpYnV0ZSAnYXR0cjEnIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAnJykK
KyAgICB7ImF0dHIxIiwgVGVzdEV2ZW50Q29uc3RydWN0b3JJbnRlcm5hbDo6YXR0cjFBdHRyR2V0
dGVyLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2
ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUp
LCAwIC8qIG9uIGluc3RhbmNlICovfSwKKyAgICAvLyBBdHRyaWJ1dGUgJ2F0dHIyJyAoVHlwZTog
J3JlYWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJ0luaXRpYWxpemVkQXRDb25zdHJ1Y3Rvcicp
CisgICAgeyJhdHRyMiIsIFRlc3RFdmVudENvbnN0cnVjdG9ySW50ZXJuYWw6OmF0dHIyQXR0ckdl
dHRlciwgMCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4o
djg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25l
KSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCit9OworCitzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdEV2ZW50Q29uc3RydWN0b3JUZW1wbGF0
ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYykKK3sKKyAgICBkZXNj
LT5SZWFkT25seVByb3RvdHlwZSgpOworCisgICAgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+IGRl
ZmF1bHRTaWduYXR1cmU7CisgICAgZGVmYXVsdFNpZ25hdHVyZSA9IGNvbmZpZ3VyZVRlbXBsYXRl
KGRlc2MsICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPigpLCBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjppbnRlcm5hbEZpZWxkQ291bnQs
CisgICAgICAgIFRlc3RFdmVudENvbnN0cnVjdG9yQXR0cnMsIFdURl9BUlJBWV9MRU5HVEgoVGVz
dEV2ZW50Q29uc3RydWN0b3JBdHRycyksCisgICAgICAgIDAsIDApOworICAgIFVOVVNFRF9QQVJB
TShkZWZhdWx0U2lnbmF0dXJlKTsgLy8gSW4gc29tZSBjYXNlcywgaXQgd2lsbCBub3QgYmUgdXNl
ZC4KKyAgICBkZXNjLT5TZXRDYWxsSGFuZGxlcihWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpjb25z
dHJ1Y3RvckNhbGxiYWNrKTsKKyAgICAKKworICAgIC8vIEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0
ZQorICAgIGRlc2MtPlNldChnZXRUb1N0cmluZ05hbWUoKSwgZ2V0VG9TdHJpbmdUZW1wbGF0ZSgp
KTsKKyAgICByZXR1cm4gZGVzYzsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRlKCkKK3sKKyAgICBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpj
dXJyZW50KCk7CisgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVy
YXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOworICAgIGlm
IChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC0+c2Vjb25kOworCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1Rl
bXBsYXRlKCk7CisgICAgZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5hZGQoJmluZm8sIHRlbXBsKTsK
KyAgICByZXR1cm4gdGVtcGw7Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCit7CisgICAgVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOworICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKKyAgICBpZiAocmVzdWx0
ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCisgICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQorICAgICAgICBDb25maWd1cmVWOFRl
c3RFdmVudENvbnN0cnVjdG9yVGVtcGxhdGUoR2V0UmF3VGVtcGxhdGUoKSk7CisgICAgZGF0YS0+
dGVtcGxhdGVNYXAoKS5hZGQoJmluZm8sIHRlbXBsKTsKKyAgICByZXR1cm4gdGVtcGw7Cit9CisK
K2Jvb2wgVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhbHVlKQoreworICAgIHJldHVybiBHZXRSYXdUZW1wbGF0ZSgpLT5IYXNJbnN0YW5j
ZSh2YWx1ZSk7Cit9CisKKwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVudENvbnN0
cnVjdG9yOjp3cmFwU2xvdyhUZXN0RXZlbnRDb25zdHJ1Y3RvciogaW1wbCkKK3sKKyAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7CisgICAgVjhQcm94eSogcHJveHkgPSAwOworICAg
IHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QocHJveHksICZpbmZv
LCBpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFw
cGVyOworCisgICAgaW1wbC0+cmVmKCk7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4g
d3JhcHBlckhhbmRsZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcik7
CisKKyAgICBpZiAoIWhhc0RlcGVuZGVudExpZmV0aW1lKQorICAgICAgICB3cmFwcGVySGFuZGxl
Lk1hcmtJbmRlcGVuZGVudCgpOworICAgIGdldERPTU9iamVjdE1hcCgpLnNldChpbXBsLCB3cmFw
cGVySGFuZGxlKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwordm9pZCBWOFRlc3RFdmVudENv
bnN0cnVjdG9yOjpkZXJlZk9iamVjdCh2b2lkKiBvYmplY3QpCit7CisgICAgc3RhdGljX2Nhc3Q8
VGVzdEV2ZW50Q29uc3RydWN0b3IqPihvYmplY3QpLT5kZXJlZigpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
YTFlNTExZjU5MmJmMzhjZjUxZDAxYjlmOWIwZDRlYWJmNDcwZDExCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29u
c3RydWN0b3IuaApAQCAtMCwwICsxLDgwIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g
U3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2lmbmRl
ZiBWOFRlc3RFdmVudENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgVjhUZXN0RXZlbnRDb25zdHJ1Y3Rv
cl9oCisKKyNpbmNsdWRlICJUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlY4RE9N
V3JhcHBlci5oIgorI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5oIgorI2luY2x1ZGUgPHY4Lmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVjhUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzRGVwZW5kZW50TGlmZXRpbWUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4pOworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0
UmF3VGVtcGxhdGUoKTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IEdldFRlbXBsYXRlKCk7CisgICAgc3RhdGljIFRlc3RFdmVudENvbnN0cnVjdG9yKiB0
b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFRlc3RFdmVudENvbnN0cnVjdG9yKj4ob2JqZWN0LT5HZXRQ
b2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKKyAgICB9
CisgICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEV2ZW50
Q29uc3RydWN0b3IqKTsKKyAgICBzdGF0aWMgdm9pZCBkZXJlZk9iamVjdCh2b2lkKik7CisgICAg
c3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7CisgICAgc3Rh
dGljIGNvbnN0IGludCBpbnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJu
YWxGaWVsZENvdW50ICsgMDsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBleGlz
dGluZ1dyYXBwZXIoVGVzdEV2ZW50Q29uc3RydWN0b3IqKTsKKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhUZXN0RXZlbnRDb25zdHJ1Y3Rvciop
OworfTsKKworQUxXQVlTX0lOTElORSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEV2ZW50
Q29uc3RydWN0b3I6OmV4aXN0aW5nV3JhcHBlcihUZXN0RXZlbnRDb25zdHJ1Y3RvciogaW1wbCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOworfQorCit2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OndyYXAoVGVzdEV2ZW50Q29u
c3RydWN0b3IqIGltcGwpCit7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBl
ciA9IGV4aXN0aW5nV3JhcHBlcihpbXBsKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiBWOFRlc3RFdmVudENv
bnN0cnVjdG9yOjp3cmFwU2xvdyhpbXBsKTsKK30KKworaW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KFRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXBsKQoreworICAgIGlmICghaW1wbCkK
KyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgcmV0dXJuIFY4VGVzdEV2ZW50Q29uc3Ry
dWN0b3I6OndyYXAoaW1wbCk7Cit9CitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
UGFzc1JlZlB0cjwgVGVzdEV2ZW50Q29uc3RydWN0b3IgPiBpbXBsKQoreworICAgIHJldHVybiB0
b1Y4KGltcGwuZ2V0KCkpOworfQorCit9CisKKyNlbmRpZiAvLyBWOFRlc3RFdmVudENvbnN0cnVj
dG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RJbnRlcmZhY2UuaAppbmRleCBlNWI1YjlhYjg1ZDhjNDNmNDJkYzYwMGRhYjk2
MjE5ODA1NDc3ZTBkLi5hMDQ4YzgzNDE2YjAwOTBlM2ZiMmMyMTgxYmUwMmYyN2E2MjdjYTBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEludGVyZmFjZS5oCkBAIC03Nyw2ICs3Nyw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0SW50ZXJmYWNlID4gaW1wbCkKIHsKICAgICBy
ZXR1cm4gdG9WOChpbXBsLmdldCgpKTsKIH0KKwogfQogCiAjZW5kaWYgLy8gVjhUZXN0SW50ZXJm
YWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCmluZGV4IDFl
NGVmNDFjNDM0NDg4OTJiMDAyMjRmYmExMGFhMTJhYjg5NGNjOTAuLmFjZGUwZWE0OTU3YjQ0YjE2
NTQxNTRjOTkzYjFlMzNiN2NiYTFlYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIuaApAQCAtNzMsNiArNzMsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgPiBpbXBsKQog
ewogICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCkpOwogfQorCiB9CiAKICNlbmRpZiAvLyBWOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5o
CmluZGV4IDNmNmUzMjdkZWJhNWQyM2M4Nzc0NGFlMjU2YWY0ZDM0NTQ4OWM5YmEuLmFkZTYwMGU1
OTE2NmExYzMzODBjMzdmZjQ2NmJhMGIxMDk1ZDA5MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29u
c3RydWN0b3IuaApAQCAtODAsNiArODAsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE5hbWVkQ29uc3RydWN0b3IgPiBpbXBsKQogewogICAgIHJl
dHVybiB0b1Y4KGltcGwuZ2V0KCkpOwogfQorCiB9CiAKICNlbmRpZiAvLyBWOFRlc3ROYW1lZENv
bnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RPYmouaAppbmRleCAyMjRiMWQyZTk2ZDQwMGM0NGYwMDUwZmIxMjhmOTI0MjUz
NzJlZTQxLi44ZjUyMTkxMDUzM2RmNzI3NjcyN2VkZmE4NDU0ZWY4Yjc3NzI3M2U0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5o
CkBAIC03OCw2ICs3OCw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNz
UmVmUHRyPCBUZXN0T2JqID4gaW1wbCkKIHsKICAgICByZXR1cm4gdG9WOChpbXBsLmdldCgpKTsK
IH0KKwogfQogCiAjZW5kaWYgLy8gVjhUZXN0T2JqX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAppbmRleCA5NDk2OGU3ZTYzNjU3NDJm
N2M3OTE3ZmYwYWQyNzI4MjQ1OWZiODViLi5hZDE1ZDNkOWU3MzE5ZTlmNTZhZWVkNzg4ODEyOGQ3
MTI4MzRjNjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5oCkBAIC03NSw2ICs3NSw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
CiB7CiAgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSk7CiB9CisKIH0KIAogI2VuZGlmIC8vIFY4
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudENvbnN0cnVjdG9ycy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudENvbnN0cnVjdG9ycy5jcHAKaW5k
ZXggZjg5NWY0OWFjZjhiY2Q1MTQ0OGFkMDEwOTg2YzI1Njk5MjY2NjUyZS4uNWIyODk5MjQ4MjEx
Y2QzMDdhOWFmMDVmYTZiODhjMzk0MWQyNTQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDb25zdHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q29uc3RydWN0b3JzLmNwcApAQCAtMTI0
LDcgKzEyNCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0VjhFdmVu
dChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBib29sICgqCiAjZGVmaW5lIEZJTExfUFJPUEVS
VFkocHJvcGVydHlOYW1lKSBcCiAgICAgb3B0aW9ucy5nZXQoI3Byb3BlcnR5TmFtZSwgZXZlbnRJ
bml0LnByb3BlcnR5TmFtZSk7IC8vIFRoaXMgY2FuIGZhaWwgYnV0IGl0IGlzIE9LLgogCi1JTlNU
QU5USUFURV9JTklUSUFMSVpJTkdfQ09OU1RSVUNUT1JfRk9SX0VWRU5UKERJQ1RJT05BUllfU1RB
UlQsIERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZ
KQogSU5TVEFOVElBVEVfSU5JVElBTElaSU5HX0NPTlNUUlVDVE9SX0ZPUl9DVVNUT01fRVZFTlQo
RElDVElPTkFSWV9TVEFSVCwgRElDVElPTkFSWV9FTkQsIEZJTExfUEFSRU5UX1BST1BFUlRJRVMs
IEZJTExfUFJPUEVSVFkpCiBJTlNUQU5USUFURV9JTklUSUFMSVpJTkdfQ09OU1RSVUNUT1JfRk9S
X1BST0dSRVNTX0VWRU5UKERJQ1RJT05BUllfU1RBUlQsIERJQ1RJT05BUllfRU5ELCBGSUxMX1BB
UkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZKQogSU5TVEFOVElBVEVfSU5JVElBTElaSU5H
X0NPTlNUUlVDVE9SX0ZPUl9XRUJLSVRfQU5JTUFUSU9OX0VWRU5UKERJQ1RJT05BUllfU1RBUlQs
IERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudC5pZGwKaW5kZXggZjIyODI4YzRlNTYwZTBkNmFjNDhiOTU2MzVhZjNmNTUzN2Y5
YmQ3My4uMGZiNThlMmViYzNkMTZjMDg1NjAxMDNmMjRlYzcxMzQwZDU3MzUwYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnQuaWRsCkBAIC0yMyw3ICsyMyw4IEBAIG1vZHVsZSBldmVudHMgewogICAgIC8vIEludHJv
ZHVjZWQgaW4gRE9NIExldmVsIDI6CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ3VzdG9tVG9K
UywKLSAgICAgICAgQ3VzdG9tQ29uc3RydWN0b3IsCisgICAgICAgIFY4Q29uc3RydWN0b3JUZW1w
bGF0ZT1FdmVudCwKKyAgICAgICAgSlNDdXN0b21Db25zdHJ1Y3RvciwKICAgICAgICAgTm9TdGF0
aWNUYWJsZXMsCiAgICAgICAgIFBvbHltb3JwaGljCiAgICAgXSBFdmVudCB7CkBAIC01Nyw4ICs1
OCw4IEBAIG1vZHVsZSBldmVudHMgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRXZlbnRU
YXJnZXQgICAgICB0YXJnZXQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBFdmVudFRhcmdl
dCAgICAgIGN1cnJlbnRUYXJnZXQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBzaG9ydCAgIGV2ZW50UGhhc2U7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFu
ICAgICAgICAgIGJ1YmJsZXM7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuICAg
ICAgICAgIGNhbmNlbGFibGU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbSW5pdGlhbGl6
ZWRCeUNvbnN0cnVjdG9yXSBib29sZWFuIGJ1YmJsZXM7CisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBbSW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yXSBib29sZWFuIGNhbmNlbGFibGU7CiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01UaW1lU3RhbXAgICAgIHRpbWVTdGFtcDsKIAogICAg
ICAgICB2b2lkICAgICAgICAgICAgICAgc3RvcFByb3BhZ2F0aW9uKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>