<?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>95937</bug_id>
          
          <creation_ts>2012-09-05 23:46:50 -0700</creation_ts>
          <short_desc>[Gtk] GObject DOM generator should consider conditionals for EventTarget interface</short_desc>
          <delta_ts>2013-05-07 01:45:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>105743</dup_id>
          
          <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>95582</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="José Dapena Paz">jdapena</reporter>
          <assigned_to name="José Dapena Paz">jdapena</assigned_to>
          <cc>abarth</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jdapena</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>712933</commentid>
    <comment_count>0</comment_count>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2012-09-05 23:46:50 -0700</bug_when>
    <thetext>GObject DOM generator generates the implementation in GObject of the EventTarget interface in method GenerateEventTargetIface. The implementation dumps the hardcoded methods with no check about conditionals.

In the case we add support for BATTERY_STATUS on WebKit GTK, it will break in case BATTERY_STATUS is disabled, as it will generate anyway code depending on battery module.

So support for conditionals is required in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712973</commentid>
    <comment_count>1</comment_count>
      <attachid>162437</attachid>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2012-09-06 00:42:44 -0700</bug_when>
    <thetext>Created attachment 162437
Add support for conditional interface EventTarget on bindings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712978</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-06 00:45:59 -0700</bug_when>
    <thetext>Attachment 162437 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/ObjC/DOMTestConditionalEventTargetInternal.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/JS/JSTestConditionalEventTarget.h:62:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WebCore/bindings/scripts/test/CPP/WebDOMTestConditionalEventTarget.h:44:  The parameter name &quot;listener&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/scripts/test/CPP/WebDOMTestConditionalEventTarget.h:45:  The parameter name &quot;listener&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/scripts/test/CPP/WebDOMTestConditionalEventTarget.cpp:34:  wtf includes should be &lt;wtf/file.h&gt; instead of &quot;wtf/file.h&quot;.  [build/include] [4]
Total errors found: 5 in 15 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>713017</commentid>
    <comment_count>3</comment_count>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2012-09-06 01:22:30 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 162437 [details] did not pass style-queue:
&gt; 
&gt; 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
&gt; Source/WebCore/bindings/scripts/test/ObjC/DOMTestConditionalEventTargetInternal.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
&gt; Source/WebCore/bindings/scripts/test/JS/JSTestConditionalEventTarget.h:62:  More than one command on the same line in if  [whitespace/parens] [4]
&gt; Source/WebCore/bindings/scripts/test/CPP/WebDOMTestConditionalEventTarget.h:44:  The parameter name &quot;listener&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebCore/bindings/scripts/test/CPP/WebDOMTestConditionalEventTarget.h:45:  The parameter name &quot;listener&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebCore/bindings/scripts/test/CPP/WebDOMTestConditionalEventTarget.cpp:34:  wtf includes should be &lt;wtf/file.h&gt; instead of &quot;wtf/file.h&quot;.  [build/include] [4]
&gt; Total errors found: 5 in 15 files

Unfortunately all these reports are caused by bugs in bindings generators. The generated code does not match our style guidelines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732801</commentid>
    <comment_count>4</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-10-02 10:39:00 -0700</bug_when>
    <thetext>The code changes look OK (although I really hate to have to change to so many &apos;push&apos; calls, but don&apos;t see a better option).

Only comment is whether it wouldn&apos;t make more sense to just add a Conditional like in the aleady existing TestEventTarget.idl file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733710</commentid>
    <comment_count>5</comment_count>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2012-10-03 08:08:56 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; The code changes look OK (although I really hate to have to change to so many &apos;push&apos; calls, but don&apos;t see a better option).
&gt; 
&gt; Only comment is whether it wouldn&apos;t make more sense to just add a Conditional like in the aleady existing TestEventTarget.idl file.

I kept the old test, as this way we are testing 2 different outputs: non conditional and conditional. So tests will be more accurate catching regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733781</commentid>
    <comment_count>6</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-10-03 09:31:04 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; The code changes look OK (although I really hate to have to change to so many &apos;push&apos; calls, but don&apos;t see a better option).
&gt; &gt; 
&gt; &gt; Only comment is whether it wouldn&apos;t make more sense to just add a Conditional like in the aleady existing TestEventTarget.idl file.
&gt; 
&gt; I kept the old test, as this way we are testing 2 different outputs: non conditional and conditional. So tests will be more accurate catching regressions.

OK. I went through the different tests and it seemed some were already including Conditional clauses as part of them, so it could make sense to just make the EventTarget test include that. Anyway maybe you can just try to ask people whether they want a new test or not, and then we&apos;ll move forward with whatever they prefer. No strong opinion here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734511</commentid>
    <comment_count>7</comment_count>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2012-10-04 01:50:42 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; OK. I went through the different tests and it seemed some were already including Conditional clauses as part of them, so it could make sense to just make the EventTarget test include that. Anyway maybe you can just try to ask people whether they want a new test or not, and then we&apos;ll move forward with whatever they prefer. No strong opinion here.

Yeah, the main difference is that the conditional applies to an EventTarget. Another approach would be just adding the conditional clause to the TestEventTarget.idl. Anyway, I&apos;ll check with committers of the other idl files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734576</commentid>
    <comment_count>8</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-10-04 04:01:44 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Yeah, the main difference is that the conditional applies to an EventTarget. Another approach would be just adding the conditional clause to the TestEventTarget.idl. Anyway, I&apos;ll check with committers of the other idl files.

Adding the conditional clause to TestEventTarget.idl is exactly what I&apos;m proposing.

From comment #4:

&gt; Only comment is whether it wouldn&apos;t make more sense to just add a Conditional like in the aleady existing TestEventTarget.idl file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874893</commentid>
    <comment_count>9</comment_count>
      <attachid>162437</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-04-12 12:18:36 -0700</bug_when>
    <thetext>Comment on attachment 162437
Add support for conditional interface EventTarget on bindings

r- as per Xan&apos;s comments and style issues, I suppose some of them, at least, should be fixed :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885642</commentid>
    <comment_count>10</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-05-07 01:45:52 -0700</bug_when>
    <thetext>Fixed in bug #105743.

*** This bug has been marked as a duplicate of bug 105743 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162437</attachid>
            <date>2012-09-06 00:42:44 -0700</date>
            <delta_ts>2013-04-12 12:18:36 -0700</delta_ts>
            <desc>Add support for conditional interface EventTarget on bindings</desc>
            <filename>bug-95937-20120906094224.patch</filename>
            <type>text/plain</type>
            <size>78425</size>
            <attacher name="José Dapena Paz">jdapena</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3Njk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWY2NGExNWYwODM4NWFk
YjM5OGE5OGZmMDBjNTJjYTFjZmZkN2EzNS4uMTFjMDBkMDM5OTQyNWMwOGVjMjZhNWFhMTBhYzM5
MTMzNWY2N2FlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNyBAQAorMjAxMi0wOS0wNiAgSm9z
w6kgRGFwZW5hIFBheiAgPGpkYXBlbmFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR3RrXSBHT2Jq
ZWN0IERPTSBnZW5lcmF0b3Igc2hvdWxkIGNvbnNpZGVyIGNvbmRpdGlvbmFscyBmb3IgRXZlbnRU
YXJnZXQgaW50ZXJmYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NTkzNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgY29uZGl0aW9uYWwgRXZlbnRUYXJn
ZXRzIG9uIEdPYmplY3QgRE9NCisgICAgICAgIGJpbmRpbmdzLgorCisgICAgICAgIEFkZCBuZXcg
dGVzdCBmb3IgYmluZGluZ3MsIFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LCBhbmQgYWRkIGV4
cGVjdGVkCisgICAgICAgIHJlc3VsdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JHT2JqZWN0LnBtOgorICAgICAgICAoR2VuZXJhdGVFdmVudFRhcmdldElmYWNl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJET01UZXN0Q29uZGl0aW9u
YWxFdmVudFRhcmdldDo6V2ViRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQpOgorICAgICAg
ICAoV2ViRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OmltcGwpOgorICAgICAgICAoV2Vi
RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAg
ICAoV2ViRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIp
OgorICAgICAgICAoV2ViRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZl
bnQpOgorICAgICAgICAodG9XZWJDb3JlKToKKyAgICAgICAgKHRvV2ViS2l0KToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFy
Z2V0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJET01UZXN0Q29u
ZGl0aW9uYWxFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJET01UZXN0Q29uZGl0aW9uYWxFdmVu
dFRhcmdldDo6fldlYkRPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q29uZGl0aW9uYWxFdmVu
dFRhcmdldC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6
a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0
Q29uZGl0aW9uYWxFdmVudFRhcmdldCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY29uZGl0
aW9uYWxfZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9jb25kaXRpb25hbF9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9jb25kaXRpb25hbF9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50
X2xpc3RlbmVyKToKKyAgICAgICAgKHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpOgorICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X2NvbmRpdGlvbmFsX2V2ZW50X3RhcmdldF9maW5hbGl6ZSk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY29uZGl0aW9uYWxfZXZlbnRfdGFyZ2V0X3NldF9w
cm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY29uZGl0aW9uYWxfZXZlbnRfdGFy
Z2V0X2dldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY29uZGl0aW9uYWxf
ZXZlbnRfdGFyZ2V0X2NvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jb25k
aXRpb25hbF9ldmVudF90YXJnZXRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rl
c3RfY29uZGl0aW9uYWxfZXZlbnRfdGFyZ2V0X2luaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Lmg6
IEFkZGVkLgorICAgICAgICAoX1dlYktpdERPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KToK
KyAgICAgICAgKF9XZWJLaXRET01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldENsYXNzKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q29uZGl0
aW9uYWxFdmVudFRhcmdldFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFy
Z2V0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6SlNUZXN0Q29uZGl0aW9uYWxF
dmVudFRhcmdldENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlv
bmFsRXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldENvbnN0cnVjdG9yOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdl
dENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldFByb3RvdHlwZTo6c2VsZik6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRh
cmdldFByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OkpTVGVzdENvbmRpdGlvbmFsRXZlbnRU
YXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxFdmVu
dFRhcmdldDo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRp
dGlvbmFsRXZlbnRUYXJnZXQ6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29u
ZGl0aW9uYWxFdmVudFRhcmdldDo6fkpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVy
dHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDb25k
aXRpb25hbEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0
UHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkRpc3BhdGNoRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjppc09ic2VydmFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldE93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDb25kaXRpb25hbEV2ZW50
VGFyZ2V0T3duZXI6OmZpbmFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEpTVGVzdENvbmRpdGlvbmFsRXZlbnRU
YXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6
OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDb25kaXRpb25hbEV2
ZW50VGFyZ2V0OjppbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlvbmFsRXZl
bnRUYXJnZXQ6OnJlbGVhc2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlv
bmFsRXZlbnRUYXJnZXQ6OnJlbGVhc2VJbXBsSWZOb3ROdWxsKToKKyAgICAgICAgKEpTVGVzdENv
bmRpdGlvbmFsRXZlbnRUYXJnZXRPd25lcik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVyT3du
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6d3JhcHBlckNvbnRleHQpOgorICAgICAgICAoSlNUZXN0
Q29uZGl0aW9uYWxFdmVudFRhcmdldFByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90
b3R5cGU6OkpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5cGUpOgorICAgICAgICAo
SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldC5tbTogQWRk
ZWQuCisgICAgICAgICgtW0RPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0IGRlYWxsb2NdKToK
KyAgICAgICAgKC1bRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQgZmluYWxpemVdKToKKyAg
ICAgICAgKC1bRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQgYWRkRXZlbnRMaXN0ZW5lcjps
aXN0ZW5lcjp1c2VDYXB0dXJlOl0pOgorICAgICAgICAoLVtET01UZXN0Q29uZGl0aW9uYWxFdmVu
dFRhcmdldCByZW1vdmVFdmVudExpc3RlbmVyOmxpc3RlbmVyOnVzZUNhcHR1cmU6XSk6CisgICAg
ICAgICgtW0RPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0IGRpc3BhdGNoRXZlbnQ6XSk6Cisg
ICAgICAgIChjb3JlKToKKyAgICAgICAgKGtpdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRJbnRlcm5hbC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldC5pZGw6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0
VjhJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdl
dFY4SW50ZXJuYWw6OlY4X1VTRSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q29uZGl0aW9uYWxF
dmVudFRhcmdldFY4SW50ZXJuYWw6OmFkZEV2ZW50TGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldFY4SW50ZXJuYWw6OnJlbW92ZUV2
ZW50TGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q29uZGl0aW9uYWxF
dmVudFRhcmdldFY4SW50ZXJuYWw6OmRpc3BhdGNoRXZlbnRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpDb25maWd1cmVWOFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0VGVtcGxhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6R2V0UmF3VGVt
cGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6
R2V0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q29uZGl0aW9uYWxFdmVudFRh
cmdldDo6SGFzSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q29uZGl0aW9uYWxF
dmVudFRhcmdldDo6d3JhcFNsb3cpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q29uZGl0aW9u
YWxFdmVudFRhcmdldDo6ZGVyZWZPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChWOFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OnRvTmF0aXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OndyYXApOgorICAg
ICAgICAoV2ViQ29yZTo6dG9WOCk6CisKIDIwMTItMDktMDUgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZDsgcmV2ZXJ0IGEgY2hhbmdl
IHRvIFNjcm9sbGluZ1RyZWVOb2RlTWFjIHdoaWNoIGFjY2lkZW50YWxseQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbSBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0K
aW5kZXggYzg0MDg3YjE5ZWY4NzgyYjkxYzA5YjQzOTk2NGYyMDcyZDM2NjU1MC4uOTVjNGQzZDM1
ZDNmOWU0MjFjY2ZjY2ZlYTAzYjkzMGY4ZTBhOTE1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCkBAIC0xMjcz
LDM2ICsxMjczLDYyIEBAIHN1YiBHZW5lcmF0ZUV2ZW50VGFyZ2V0SWZhY2UgewogICAgIG15ICRp
bnRlcmZhY2VOYW1lID0gJGRhdGFOb2RlLT5uYW1lOwogICAgIG15ICRkZWNhbWVsaXplID0gRml4
VXBEZWNhbWVsaXplZE5hbWUoZGVjYW1lbGl6ZSgkaW50ZXJmYWNlTmFtZSkpOwogCisgICAgbXkg
JGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxT
dHJpbmcoJGRhdGFOb2RlKTsKKyAgICBteSBAY29uZGl0aW9uYWxXYXJuID0gR2VuZXJhdGVDb25k
aXRpb25hbFdhcm5pbmcoJGRhdGFOb2RlKTsKKwogICAgICRpbXBsSW5jbHVkZXN7IkdPYmplY3RF
dmVudExpc3RlbmVyLmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siV2ViS2l0RE9NRXZlbnRU
YXJnZXQuaCJ9ID0gMTsKICAgICAkaW1wbEluY2x1ZGVzeyJXZWJLaXRET01FdmVudFByaXZhdGUu
aCJ9ID0gMTsKIAotICAgIG15ICRpbXBsID0gPDwgIkVPRiI7Ci1zdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tXyR7ZGVjYW1lbGl6ZX1fZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJD
b3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKLSAgICBXZWJDb3Jl
Ojoke2ludGVyZmFjZU5hbWV9KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtp
bnRlcmZhY2VOYW1lfSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwot
Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgY29yZVRhcmdldC0+ZGlz
cGF0Y2hFdmVudChjb3JlRXZlbnQsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKLSAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICBwdXNoKEBjQm9keVBy
b3BlcnRpZXMsICJzdGF0aWMgdm9pZCB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fZGlzcGF0Y2hf
ZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50
LCBHRXJyb3IqKiBlcnJvcilcbiIpOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIntcbiIp
OworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxu
IikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAg
ICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTtcbiIpOwor
ICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSo+KFdF
QktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpO1xuIik7CisgICAgcHVzaChAY0Jv
ZHlQcm9wZXJ0aWVzLCAiXG4iKTsKKyAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKKyAgICBwdXNoKEBjQm9keVByb3BlcnRp
ZXMsICIgICAgY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudChjb3JlRXZlbnQsIGVjKTtcbiIpOwor
ICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBpZiAoZWMpIHtcbiIpOworICAgIHB1c2go
QGNCb2R5UHJvcGVydGllcywgIiAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGRlc2NyaXB0aW9uKGVjKTtcbiIpOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZyhcIldF
QktJVF9ET01cIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpO1xuIik7Cisg
ICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIH1cbiIpOworICAgIGlmICgkY29uZGl0aW9u
YWxTdHJpbmcpIHsKKyAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2Vsc2VcbiIpOwor
ICAgICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsIEBjb25kaXRpb25hbFdhcm4pIGlmIHNjYWxh
cihAY29uZGl0aW9uYWxXYXJuKTsKKyAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2Vu
ZGlmIC8qICR7Y29uZGl0aW9uYWxTdHJpbmd9ICovXG4iKTsKICAgICB9Ci19Ci0KLXN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0NhbGxiYWNr
IGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgV2Vi
Q29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OiR7aW50ZXJmYWNlTmFtZX0qPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKLSAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBi
dWJibGUsIHVzZXJEYXRhKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fJHtkZWNh
bWVsaXplfV9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xlYW4gYnVi
YmxlKQotewotICAgIFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3Rl
bmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2
ZW50TmFtZSwgaGFuZGxlciwgYnViYmxlKTsKLX0KKyAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMs
ICJ9XG4iKTsKKyAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICJcbiIpOworCisgICAgcHVzaChA
Y0JvZHlQcm9wZXJ0aWVzLCAic3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fJHtkZWNhbWVsaXpl
fV9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3Qg
Y2hhciogZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxlLCBncG9p
bnRlciB1c2VyRGF0YSlcbiIpOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIntcbiIpOwor
ICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikg
aWYgJGNvbmRpdGlvbmFsU3RyaW5nOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBX
ZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6JHtpbnRlcmZhY2VOYW1lfSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmpl
Y3QpO1xuIik7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIHJldHVybiBXZWJDb3Jl
OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQp
LCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSwgdXNlckRhdGEpO1xuIik7
CisgICAgaWYgKCRjb25kaXRpb25hbFN0cmluZykgeworICAgICAgICBwdXNoKEBjQm9keVByb3Bl
cnRpZXMsICIjZWxzZVxuIik7CisgICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgQGNvbmRp
dGlvbmFsV2FybikgaWYgc2NhbGFyKEBjb25kaXRpb25hbFdhcm4pOworICAgICAgICBwdXNoKEBj
Qm9keVByb3BlcnRpZXMsICIgICAgcmV0dXJuIGZhbHNlO1xuIik7CisgICAgICAgIHB1c2goQGNC
b2R5UHJvcGVydGllcywgIiNlbmRpZiAvKiAke2NvbmRpdGlvbmFsU3RyaW5nfSAqL1xuIik7Cisg
ICAgfQorICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIn1cbiIpOworICAgIHB1c2goQGNCb2R5
UHJvcGVydGllcywgIlxuIik7CisKKyAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICJzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV8ke2RlY2FtZWxpemV9X3JlbW92ZV9ldmVudF9saXN0ZW5lcihX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDYWxs
YmFjayBoYW5kbGVyLCBnYm9vbGVhbiBidWJibGUpXG4iKTsKKyAgICBwdXNoKEBjQm9keVByb3Bl
cnRpZXMsICJ7XG4iKTsKKyAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIjaWYgJHtjb25kaXRp
b25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKKyAgICBwdXNoKEBjQm9keVBy
b3BlcnRpZXMsICIgICAgV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZVRhcmdldCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTtcbiIpOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAg
ICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBidWJi
bGUpO1xuIik7CisgICAgaWYgKCRjb25kaXRpb25hbFN0cmluZykgeworICAgICAgICBwdXNoKEBj
Qm9keVByb3BlcnRpZXMsICIjZWxzZVxuIik7CisgICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGll
cywgQGNvbmRpdGlvbmFsV2FybikgaWYgc2NhbGFyKEBjb25kaXRpb25hbFdhcm4pOworICAgICAg
ICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgcmV0dXJuIGZhbHNlO1xuIik7CisgICAgICAg
IHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNlbmRpZiAvKiAke2NvbmRpdGlvbmFsU3RyaW5nfSAq
L1xuIik7CisgICAgfQorICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIn1cbiIpOworICAgIHB1
c2goQGNCb2R5UHJvcGVydGllcywgIlxuIik7CiAKKyAgICBteSAkaW1wbCA9IDw8ICJFT0YiOwog
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRh
cmdldElmYWNlKiBpZmFjZSkKIHsKICAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRf
ZG9tXyR7ZGVjYW1lbGl6ZX1fZGlzcGF0Y2hfZXZlbnQ7CkBAIC0xMzExLDcgKzEzMzcsNiBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFy
Z2V0SWZhY2UqIGlmYWNlKQogfQogCiBFT0YKLQogICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywg
JGltcGwpOwogCiAgICAgJGRlZmluZVR5cGVNYWNybyA9ICJHX0RFRklORV9UWVBFX1dJVEhfQ09E
RSI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQ
L1dlYkRPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmY1YjZjZTRjNDU5ZmNkYTJjYzFjZDRkMzIzYzA3ZjA3NzQ3NzVkYjQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
Q1BQL1dlYkRPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LmNwcApAQCAtMCwwICsxLDkwIEBA
CisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKENP
TkRJVElPTkFMKQorCisjaW5jbHVkZSAiV2ViRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQu
aCIKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlRl
c3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKKyNp
bmNsdWRlICJXZWJET01TdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVyLmgi
CisjaW5jbHVkZSAiV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgInd0Zi90ZXh0
L0F0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK1dlYkRPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0OjpXZWJET01UZXN0
Q29uZGl0aW9uYWxFdmVudFRhcmdldCgpCisgICAgOiBXZWJET01FdmVudFRhcmdldCgpCit7Cit9
CisKK1dlYkRPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0OjpXZWJET01UZXN0Q29uZGl0aW9u
YWxFdmVudFRhcmdldChXZWJDb3JlOjpUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCogaW1wbCkK
KyAgICA6IFdlYkRPTUV2ZW50VGFyZ2V0KGltcGwpCit7Cit9CisKK1dlYkNvcmU6OlRlc3RDb25k
aXRpb25hbEV2ZW50VGFyZ2V0KiBXZWJET01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6aW1w
bCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0Kj4oV2ViRE9NRXZlbnRUYXJnZXQ6OmltcGwoKSk7Cit9CisKK3ZvaWQg
V2ViRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3Qg
V2ViRE9NU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJET01FdmVudExpc3RlbmVyJiBsaXN0ZW5lciwg
Ym9vbCB1c2VDYXB0dXJlKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdG9XZWJDb3JlKGxpc3RlbmVyKSwg
dXNlQ2FwdHVyZSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6
OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViRE9NU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJE
T01FdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIGlmICgh
aW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVu
ZXIodHlwZSwgdG9XZWJDb3JlKGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7Cit9CisKK2Jvb2wgV2Vi
RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoY29uc3QgV2ViRE9N
RXZlbnQmIGV2dCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYm9vbCByZXN1bHQgPSBp
bXBsKCktPmRpc3BhdGNoRXZlbnQodG9XZWJDb3JlKGV2dCksIGVjKTsKKyAgICB3ZWJET01SYWlz
ZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworV2ViQ29yZTo6VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqIHRvV2Vi
Q29yZShjb25zdCBXZWJET01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCYgd3JhcHBlcikKK3sK
KyAgICByZXR1cm4gd3JhcHBlci5pbXBsKCk7Cit9CisKK1dlYkRPTVRlc3RDb25kaXRpb25hbEV2
ZW50VGFyZ2V0IHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gV2ViRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQodmFs
dWUpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKENPTkRJVElPTkFMKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0Q29uZGl0aW9u
YWxFdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwNDk0OGM5
M2RjOTUyNjUzM2UwZWY1Njc2YzY0Y2RhODg4MDQ5NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RDb25kaXRpb25h
bEV2ZW50VGFyZ2V0LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5p
ZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViRE9NVGVz
dENvbmRpdGlvbmFsRXZlbnRUYXJnZXRfaAorI2RlZmluZSBXZWJET01UZXN0Q29uZGl0aW9uYWxF
dmVudFRhcmdldF9oCisKKyNpZiBFTkFCTEUoQ09ORElUSU9OQUwpCisKKyNpbmNsdWRlIDxXZWJE
T01FdmVudFRhcmdldC5oPgorI2luY2x1ZGUgPFdlYkRPTVN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDsKK307CisKK2NsYXNz
IFdlYkRPTUV2ZW50OworY2xhc3MgV2ViRE9NRXZlbnRMaXN0ZW5lcjsKKworY2xhc3MgV2ViRE9N
VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQgOiBwdWJsaWMgV2ViRE9NRXZlbnRUYXJnZXQgewor
cHVibGljOgorICAgIFdlYkRPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KCk7CisgICAgZXhw
bGljaXQgV2ViRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQoV2ViQ29yZTo6VGVzdENvbmRp
dGlvbmFsRXZlbnRUYXJnZXQqKTsKKyAgICB2aXJ0dWFsIH5XZWJET01UZXN0Q29uZGl0aW9uYWxF
dmVudFRhcmdldCgpIHsgfQorCisgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IFdlYkRP
TVN0cmluZyYgdHlwZSwgY29uc3QgV2ViRE9NRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wg
dXNlQ2FwdHVyZSk7CisgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IFdlYkRPTVN0
cmluZyYgdHlwZSwgY29uc3QgV2ViRE9NRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgdXNl
Q2FwdHVyZSk7CisgICAgYm9vbCBkaXNwYXRjaEV2ZW50KGNvbnN0IFdlYkRPTUV2ZW50JiBldnQp
OworCisgICAgV2ViQ29yZTo6VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqIGltcGwoKSBjb25z
dDsKK307CisKK1dlYkNvcmU6OlRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KiB0b1dlYkNvcmUo
Y29uc3QgV2ViRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQmKTsKK1dlYkRPTVRlc3RDb25k
aXRpb25hbEV2ZW50VGFyZ2V0IHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RDb25kaXRpb25hbEV2ZW50
VGFyZ2V0Kik7CisKKyNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShDT05ESVRJT05BTCkKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRU
YXJnZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliNmY5ZDRlNWQ0MmIxMzcyN2I2ODhlNzFjNjQ2N2NkMzQ3
MmQ3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldC5jcHAKQEAg
LTAsMCArMSwyMjIgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LmgiCisK
KyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkpTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIlRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NQmluZGluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiZ29i
amVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTUV2
ZW50LmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldFByaXZhdGUuaCIK
KyNpbmNsdWRlICJ3ZWJraXRkZWZpbmVzLmgiCisjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZh
dGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisj
aWYgRU5BQkxFKENPTkRJVElPTkFMKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9N
VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqIGtpdChXZWJDb3JlOjpUZXN0Q29uZGl0aW9uYWxF
dmVudFRhcmdldCogb2JqKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CisK
KyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQq
PihyZXQpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RDb25kaXRpb25h
bEV2ZW50VGFyZ2V0Kj4oRE9NT2JqZWN0Q2FjaGU6OnB1dChvYmosIFdlYktpdDo6d3JhcFRlc3RD
b25kaXRpb25hbEV2ZW50VGFyZ2V0KG9iaikpKTsKK30KKworV2ViQ29yZTo6VGVzdENvbmRpdGlv
bmFsRXZlbnRUYXJnZXQqIGNvcmUoV2ViS2l0RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQq
IHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7CisKKyAg
ICBXZWJDb3JlOjpUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCogY29yZU9iamVjdCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNv
cmVPYmplY3QsIDApOworCisgICAgcmV0dXJuIGNvcmVPYmplY3Q7Cit9CisKK1dlYktpdERPTVRl
c3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KiB3cmFwVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQo
V2ViQ29yZTo6VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqIGNvcmVPYmplY3QpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAgICAvLyBXZSBjYWxsIHJl
ZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4n
dCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAvLyBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3Ry
dWN0dXJlLiBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlIG1hdGNoaW5nIGRlcmVmKCku
CisgICAgY29yZU9iamVjdC0+cmVmKCk7CisKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0NP
TkRJVElPTkFMX0VWRU5UX1RBUkdFVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1Rf
Q09ORElUSU9OQUxfRVZFTlRfVEFSR0VULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxM
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKENPTkRJ
VElPTkFMKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY29uZGl0aW9uYWxfZXZlbnRf
dGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktp
dERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKENPTkRJVElP
TkFMKQorICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQp
OworICAgIFdlYkNvcmU6OlRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqPihXRUJLSVRf
RE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnQoY29yZUV2ZW50LCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVz
Y3JpcHRpb24ubmFtZSk7CisgICAgfQorI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJDb25kaXRpb25hbCIpCisjZW5kaWYgLyogRU5BQkxFKENPTkRJVElPTkFMKSAq
LworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X2NvbmRpdGlvbmFsX2V2ZW50
X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
Y29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2FsbGJhY2sgaGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxl
LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyNpZiBFTkFCTEUoQ09ORElUSU9OQUwpCisgICAgV2Vi
Q29yZTo6VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCo+KFdFQktJVF9ET01fT0JKRUNU
KHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSwgdXNlckRhdGEpOworI2Vsc2UKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb25hbCIpCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmIC8qIEVOQUJMRShDT05ESVRJT05BTCkgKi8KK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21fdGVzdF9jb25kaXRpb25hbF9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdib29sZWFuIGJ1YmJsZSkKK3sKKyNpZiBFTkFCTEUoQ09O
RElUSU9OQUwpCisgICAgV2ViQ29yZTo6VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJD
b3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0
YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIGJ1YmJsZSk7CisjZWxzZQor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbmFsIikKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYgLyogRU5BQkxFKENPTkRJVElPTkFMKSAqLworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0
SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21f
dGVzdF9jb25kaXRpb25hbF9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2Ut
PmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdGVzdF9jb25kaXRpb25hbF9ldmVudF90
YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX3Rlc3RfY29uZGl0aW9uYWxfZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVu
dF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NVGVzdENv
bmRpdGlvbmFsRXZlbnRUYXJnZXQsIHdlYmtpdF9kb21fdGVzdF9jb25kaXRpb25hbF9ldmVudF90
YXJnZXQsIFdFQktJVF9UWVBFX0RPTV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJL
SVRfVFlQRV9ET01fRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkK
KworZW51bSB7CisgICAgUFJPUF8wLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0
X2NvbmRpdGlvbmFsX2V2ZW50X3RhcmdldF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7Cisj
aWYgRU5BQkxFKENPTkRJVElPTkFMKQorICAgIFdlYktpdERPTU9iamVjdCogZG9tT2JqZWN0ID0g
V0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKKyAgICAKKyAgICBpZiAoZG9tT2JqZWN0LT5jb3Jl
T2JqZWN0KSB7CisgICAgICAgIFdlYkNvcmU6OlRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KiBj
b3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJn
ZXQqPihkb21PYmplY3QtPmNvcmVPYmplY3QpOworCisgICAgICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OmZvcmdldChjb3JlT2JqZWN0KTsKKyAgICAgICAgY29yZU9iamVjdC0+ZGVyZWYoKTsK
KworICAgICAgICBkb21PYmplY3QtPmNvcmVPYmplY3QgPSAwOworICAgIH0KKyNlbmRpZiAvLyBF
TkFCTEUoQ09ORElUSU9OQUwpCisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rf
Y29uZGl0aW9uYWxfZXZlbnRfdGFyZ2V0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jb25kaXRpb25hbF9ldmVudF90YXJn
ZXRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3Qg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jb25kaXRpb25hbF9ldmVudF90YXJnZXRfZ2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9jb25kaXRpb25hbF9ldmVudF90YXJnZXRfY29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0
KQoreworCisgICAgaWYgKEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jb25kaXRpb25h
bF9ldmVudF90YXJnZXRfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCisgICAgICAgIEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jb25kaXRpb25hbF9ldmVudF90YXJnZXRfcGFyZW50
X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X2NvbmRpdGlvbmFsX2V2ZW50X3RhcmdldF9jbGFzc19pbml0KFdlYktpdERPTVRlc3RD
b25kaXRpb25hbEV2ZW50VGFyZ2V0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAg
Z29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9jb25kaXRpb25hbF9ldmVu
dF90YXJnZXRfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX3Rlc3RfY29uZGl0aW9uYWxfZXZlbnRfdGFyZ2V0X3NldF9wcm9wZXJ0eTsKKyAgICBn
b2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9jb25kaXRpb25hbF9l
dmVudF90YXJnZXRfZ2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQg
PSB3ZWJraXRfZG9tX3Rlc3RfY29uZGl0aW9uYWxfZXZlbnRfdGFyZ2V0X2NvbnN0cnVjdGVkOwor
CisKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY29uZGl0aW9uYWxfZXZlbnRf
dGFyZ2V0X2luaXQoV2ViS2l0RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqIHJlcXVlc3Qp
Cit7Cit9CisKK2dib29sZWFuCit3ZWJraXRfZG9tX3Rlc3RfY29uZGl0aW9uYWxfZXZlbnRfdGFy
Z2V0X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KiBz
ZWxmLCBXZWJLaXRET01FdmVudCogZXZ0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUo
Q09ORElUSU9OQUwpCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RDb25k
aXRpb25hbEV2ZW50VGFyZ2V0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGV2dCwgMCk7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvbnZlcnRlZEV2
dCA9IDA7CisgICAgaWYgKGV2dCkgeworICAgICAgICBjb252ZXJ0ZWRFdnQgPSBXZWJLaXQ6OmNv
cmUoZXZ0KTsKKyAgICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29udmVydGVkRXZ0LCAwKTsK
KyAgICB9CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gaXRlbS0+ZGlzcGF0Y2hFdmVudChjb252ZXJ0ZWRFdnQsIGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiQ29uZGl0aW9uYWwiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7Cisj
ZW5kaWYgLyogRU5BQkxFKENPTkRJVElPTkFMKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q29uZGl0
aW9uYWxFdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42NjgwZDM0ZWFlOWMwMjVkYzhkMDkxNjhjODI4OWQ2Y2VhMDkyMmEzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQuaApAQCAtMCwwICsxLDYyIEBACisvKgorICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAg
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRU
YXJnZXRfaAorI2RlZmluZSBXZWJLaXRET01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldF9oCisK
KyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKyNkZWZpbmUgV0VCS0lUX1RZ
UEVfRE9NX1RFU1RfQ09ORElUSU9OQUxfRVZFTlRfVEFSR0VUICAgICAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9jb25kaXRpb25hbF9ldmVudF90YXJnZXRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9URVNUX0NPTkRJVElPTkFMX0VWRU5UX1RBUkdFVChvYmopICAgICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9DT05E
SVRJT05BTF9FVkVOVF9UQVJHRVQsIFdlYktpdERPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NPTkRJVElPTkFMX0VWRU5UX1RBUkdFVF9DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9ET01fVEVTVF9DT05ESVRJT05BTF9FVkVOVF9UQVJHRVQsIFdlYktpdERPTVRlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9DT05ESVRJ
T05BTF9FVkVOVF9UQVJHRVQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX1RZUEVfRE9NX1RFU1RfQ09ORElUSU9OQUxfRVZFTlRfVEFSR0VUKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0NPTkRJVElPTkFMX0VWRU5UX1RBUkdFVF9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9E
T01fVEVTVF9DT05ESVRJT05BTF9FVkVOVF9UQVJHRVQpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RF
U1RfQ09ORElUSU9OQUxfRVZFTlRfVEFSR0VUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RPTV9URVNUX0NPTkRJVElPTkFMX0VW
RU5UX1RBUkdFVCwgV2ViS2l0RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRDbGFzcykpCisK
K3N0cnVjdCBfV2ViS2l0RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQgeworICAgIFdlYktp
dERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RD
b25kaXRpb25hbEV2ZW50VGFyZ2V0Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBh
cmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGVzdF9jb25k
aXRpb25hbF9ldmVudF90YXJnZXRfZ2V0X3R5cGUgKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9k
b21fdGVzdF9jb25kaXRpb25hbF9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQKKyAqIEBldnQ6IEEgI1dl
YktpdERPTUV2ZW50CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOgorICoKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV90ZXN0X2NvbmRpdGlvbmFsX2V2ZW50
X3RhcmdldF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdl
dCogc2VsZiwgV2ViS2l0RE9NRXZlbnQqIGV2dCwgR0Vycm9yKiogZXJyb3IpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q29uZGl0
aW9uYWxFdmVudFRhcmdldFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Zjk5OTE3YjY0NjgxYjg3OWFk
MmMxOWI2OTljNDZhN2FhOTdlOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENvbmRpdGlvbmFsRXZl
bnRUYXJnZXRQcml2YXRlLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIFdlYktpdERPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0UHJpdmF0ZV9o
CisjZGVmaW5lIFdlYktpdERPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0UHJpdmF0ZV9oCisK
KyNpbmNsdWRlICJUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L1dlYktpdERPTU9iamVjdC5oPgorI2lmIEVOQUJM
RShDT05ESVRJT05BTCkKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01UZXN0Q29uZGl0
aW9uYWxFdmVudFRhcmdldCogd3JhcFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KFdlYkNvcmU6
OlRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Kik7CitXZWJDb3JlOjpUZXN0Q29uZGl0aW9uYWxF
dmVudFRhcmdldCogY29yZShXZWJLaXRET01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCogcmVx
dWVzdCk7CitXZWJLaXRET01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCoga2l0KFdlYkNvcmU6
OlRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KiBub2RlKTsKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLyogRU5BQkxFKENPTkRJVElPTkFMKSAqLworCisjZW5kaWYgLyogV2ViS2l0
RE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEV2
ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDBhZDkyOTQyNjQ3
OGU1NDZmZTYyZjgwZGM2MmRiNDE2NmVkM2E2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJn
ZXQuY3BwCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShDT05ESVRJT05BTCkKKworI2luY2x1ZGUgIkpT
VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQuaCIKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1
ZGUgIkpTRXZlbnQuaCIKKyNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJU
ZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4K
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1Rlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0KTsKKy8qIEhhc2ggdGFibGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hU
YWJsZVZhbHVlIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRUYWJsZVZhbHVlc1tdID0KK3sK
KyAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVtIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0Q29uZGl0aW9uYWxFdmVu
dFRhcmdldENvbnN0cnVjdG9yKSwgKGludHB0cl90KTAsIE5vSW50cmluc2ljIH0sCisgICAgeyAw
LCAwLCAwLCAwLCBOb0ludHJpbnNpYyB9Cit9OworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpT
VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRUYWJsZSA9IHsgMiwgMSwgSlNUZXN0Q29uZGl0aW9u
YWxFdmVudFRhcmdldFRhYmxlVmFsdWVzLCAwIH07CisvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1
Y3RvciAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Q29uZGl0aW9uYWxF
dmVudFRhcmdldENvbnN0cnVjdG9yVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAwLCAwLCAwLCAw
LCBOb0ludHJpbnNpYyB9Cit9OworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdENvbmRp
dGlvbmFsRXZlbnRUYXJnZXRDb25zdHJ1Y3RvclRhYmxlID0geyAxLCAwLCBKU1Rlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0Q29uc3RydWN0b3JUYWJsZVZhbHVlcywgMCB9OworY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAi
VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sICZK
U1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Q29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IpIH07CisK
K0pTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6SlNUZXN0Q29uZGl0aW9u
YWxFdmVudFRhcmdldENvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK3ZvaWQgSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRh
cmdldENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIHB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUsIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xv
YmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKK30KKworYm9vbCBKU1Rlc3RDb25k
aXRpb25hbEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0Q29u
ZGl0aW9uYWxFdmVudFRhcmdldENvbnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZKU1Rl
c3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Q29uc3RydWN0b3JUYWJsZSwganNDYXN0PEpTVGVzdENv
bmRpdGlvbmFsRXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcio+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOworfQorCitib29sIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQoreworICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0Q29uZGl0
aW9uYWxFdmVudFRhcmdldENvbnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZKU1Rlc3RD
b25kaXRpb25hbEV2ZW50VGFyZ2V0Q29uc3RydWN0b3JUYWJsZSwganNDYXN0PEpTVGVzdENvbmRp
dGlvbmFsRXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvcik7Cit9CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMg
Y29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldFByb3RvdHlw
ZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImFkZEV2ZW50TGlzdGVuZXIiLCBEb250RGVsZXRl
IHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3Rl
bmVyKSwgKGludHB0cl90KTMsIE5vSW50cmluc2ljIH0sCisgICAgeyAicmVtb3ZlRXZlbnRMaXN0
ZW5lciIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5j
dGlvblJlbW92ZUV2ZW50TGlzdGVuZXIpLCAoaW50cHRyX3QpMywgTm9JbnRyaW5zaWMgfSwKKyAg
ICB7ICJkaXNwYXRjaEV2ZW50IiwgRG9udERlbGV0ZSB8IEpTQzo6RnVuY3Rpb24sIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdl
dFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudCksIChpbnRwdHJfdCkxLCBOb0ludHJpbnNp
YyB9LAorICAgIHsgMCwgMCwgMCwgMCwgTm9JbnRyaW5zaWMgfQorfTsKKworc3RhdGljIGNvbnN0
IEhhc2hUYWJsZSBKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0UHJvdG90eXBlVGFibGUgPSB7
IDgsIDcsIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZVZhbHVlcywg
MCB9OworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5
cGU6OnNfaW5mbyA9IHsgIlRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0UHJvdG90eXBlIiwgJkJh
c2U6OnNfaW5mbywgJkpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZSwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0UHJvdG90
eXBlKSB9OworCitKU09iamVjdCogSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldFByb3RvdHlw
ZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7
CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0
PihleGVjLCBnbG9iYWxPYmplY3QpOworfQorCitib29sIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRU
YXJnZXRQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQor
eworICAgIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5cGUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldFByb3RvdHlwZSo+KGNlbGwpOwor
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KGV4ZWMsICZKU1Rlc3RD
b25kaXRpb25hbEV2ZW50VGFyZ2V0UHJvdG90eXBlVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldFByb3Rv
dHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQoreworICAgIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5cGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldFByb3RvdHlw
ZSo+KG9iamVjdCk7CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09i
amVjdD4oZXhlYywgJkpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZSwg
dGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKworY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OnNfaW5mbyA9IHsgIlRlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0IiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdENvbmRpdGlvbmFsRXZlbnRU
YXJnZXRUYWJsZSwgMCAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Q29uZGl0aW9uYWxFdmVu
dFRhcmdldCkgfTsKKworSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6SlNUZXN0Q29uZGl0
aW9uYWxFdmVudFRhcmdldChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldD4gaW1w
bCkKKyAgICA6IEpTRE9NV3JhcHBlcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1f
aW1wbChpbXBsLmxlYWtSZWYoKSkKK3sKK30KKwordm9pZCBKU1Rlc3RDb25kaXRpb25hbEV2ZW50
VGFyZ2V0OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTsKK30KKworSlNPYmplY3QqIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OmNy
ZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5cGU6
OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0Q29uZGl0aW9u
YWxFdmVudFRhcmdldFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkp
KTsKK30KKwordm9pZCBKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0OjpkZXN0cm95KEpTQzo6
SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Kj4oY2VsbCk7
CisgICAgdGhpc09iamVjdC0+SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6fkpTVGVzdENv
bmRpdGlvbmFsRXZlbnRUYXJnZXQoKTsKK30KKworSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdl
dDo6fkpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQoKQoreworICAgIHJlbGVhc2VJbXBsSWZO
b3ROdWxsKCk7Cit9CisKK2Jvb2wgSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6Z2V0T3du
UHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNUZXN0Q29uZGl0aW9u
YWxFdmVudFRhcmdldCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RDb25kaXRpb25hbEV2ZW50
VGFyZ2V0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCAmc19pbmZvKTsKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdENvbmRpdGlv
bmFsRXZlbnRUYXJnZXQsIEJhc2U+KGV4ZWMsICZKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0
VGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0
Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTVGVzdENvbmRpdGlvbmFsRXZl
bnRUYXJnZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdl
dCo+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAm
c19pbmZvKTsKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpTVGVzdENvbmRp
dGlvbmFsRXZlbnRUYXJnZXQsIEJhc2U+KGV4ZWMsICZKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFy
Z2V0VGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK0pT
VmFsdWUganNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVydHlOYW1lKQoreworICAgIEpTVGVzdENvbmRp
dGlvbmFsRXZlbnRUYXJnZXQqIGRvbU9iamVjdCA9IGpzQ2FzdDxKU1Rlc3RDb25kaXRpb25hbEV2
ZW50VGFyZ2V0Kj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICByZXR1cm4gSlNUZXN0Q29uZGl0
aW9uYWxFdmVudFRhcmdldDo6Z2V0Q29uc3RydWN0b3IoZXhlYywgZG9tT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSk7Cit9CisKK0pTVmFsdWUgSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6Z2V0
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RDb25kaXRpb25hbEV2ZW50
VGFyZ2V0Q29uc3RydWN0b3I+KGV4ZWMsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENvbmRp
dGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RDb25kaXRpb25hbEV2ZW50
VGFyZ2V0OjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
KyAgICBKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KiBjYXN0ZWRUaGlzID0ganNDYXN0PEpT
VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RDb25kaXRpb25hbEV2
ZW50VGFyZ2V0OjpzX2luZm8pOworICAgIFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KiBpbXBs
ID0gc3RhdGljX2Nhc3Q8VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOworICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBp
ZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgaW1wbC0+YWRkRXZlbnRMaXN0ZW5lcihleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRl
KGFzT2JqZWN0KGxpc3RlbmVyKSwgY2FzdGVkVGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVj
KSksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25SZW1vdmVF
dmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNU
ZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCogY2Fz
dGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Kj4oYXNPYmplY3Qo
dGhpc1ZhbHVlKSk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAm
SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6c19pbmZvKTsKKyAgICBUZXN0Q29uZGl0aW9u
YWxFdmVudFRhcmdldCogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RDb25kaXRpb25hbEV2ZW50VGFy
Z2V0Kj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIGxpc3RlbmVyID0gZXhlYy0+
YXJndW1lbnQoMSk7CisgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGltcGwtPnJlbW92ZUV2ZW50
TGlzdGVuZXIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGNhc3RlZFRoaXMsIGZh
bHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xl
YW4oZXhlYykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q29uZGl0aW9uYWxFdmVudFRh
cmdldFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudChFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgaWYgKCF0
aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OnNfaW5mbykp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpTVGVzdENvbmRp
dGlvbmFsRXZlbnRUYXJnZXQqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0Q29uZGl0aW9uYWxF
dmVudFRhcmdldCo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OnNfaW5m
byk7CisgICAgVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqIGltcGwgPSBzdGF0aWNfY2FzdDxU
ZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIEV2ZW50KiBldnQodG9FdmVudChNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworCisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLT5kaXNwYXRjaEV2
ZW50KGV2dCwgZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwordm9pZCBKU1Rlc3RDb25kaXRpb25hbEV2
ZW50VGFyZ2V0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit7CisgICAgSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VS
VChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOworICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdGhpc09iamVjdC0+aW1w
bCgpLT52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc09ic2VydmFibGUoSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCoganNUZXN0Q29u
ZGl0aW9uYWxFdmVudFRhcmdldCkKK3sKKyAgICBpZiAoanNUZXN0Q29uZGl0aW9uYWxFdmVudFRh
cmdldC0+aGFzQ3VzdG9tUHJvcGVydGllcygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAoanNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldC0+aW1wbCgpLT5oYXNFdmVudExpc3RlbmVy
cygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqIGpzVGVzdENv
bmRpdGlvbmFsRXZlbnRUYXJnZXQgPSBqc0Nhc3Q8SlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdl
dCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CisgICAgaWYgKCFpc09ic2VydmFibGUoanNUZXN0
Q29uZGl0aW9uYWxFdmVudFRhcmdldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBVTlVT
RURfUEFSQU0odmlzaXRvcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdENv
bmRpdGlvbmFsRXZlbnRUYXJnZXRPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgSlNUZXN0Q29uZGl0aW9uYWxFdmVu
dFRhcmdldCoganNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCA9IGpzQ2FzdDxKU1Rlc3RDb25k
aXRpb25hbEV2ZW50VGFyZ2V0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBET01XcmFw
cGVyV29ybGQqIHdvcmxkID0gc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7
CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsIGpzVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQt
PmltcGwoKSwganNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCk7CisgICAganNUZXN0Q29uZGl0
aW9uYWxFdmVudFRhcmdldC0+cmVsZWFzZUltcGwoKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRl
c3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KiBpbXBsKQoreworICAgIHJldHVybiB3cmFwPEpTVGVz
dENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisK
K1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KiB0b1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0
KEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoJkpTVGVz
dENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OnNfaW5mbykgPyBqc0Nhc3Q8SlNUZXN0Q29uZGl0aW9u
YWxFdmVudFRhcmdldCo+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwoKSA6IDA7Cit9CisKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShDT05ESVRJT05BTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9u
YWxFdmVudFRhcmdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0ODhlODdhZDk1ZGVjNmNmMGRjYmYwZmNmN2Y0
YjY2YzYxMjMxZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldC5oCkBAIC0wLDAgKzEs
MTU0IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgSlNUZXN0Q29uZGl0aW9u
YWxFdmVudFRhcmdldF9oCisjZGVmaW5lIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRfaAor
CisjaWYgRU5BQkxFKENPTkRJVElPTkFMKQorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlIDxydW50aW1l
L0pTR2xvYmFsT2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCA6IHB1YmxpYyBKU0RPTVdyYXBwZXIg
eworcHVibGljOgorICAgIHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CisgICAgc3RhdGljIEpT
VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RDb25k
aXRpb25hbEV2ZW50VGFyZ2V0PiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0Q29uZGl0aW9u
YWxFdmVudFRhcmdldCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0PihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFw
KSkgSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwg
aW1wbCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yJik7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworICAgIH5KU1Rl
c3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KCk7CisgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvIHNfaW5mbzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKworICAgIFRlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0KiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9CisgICAgdm9p
ZCByZWxlYXNlSW1wbCgpIHsgbV9pbXBsLT5kZXJlZigpOyBtX2ltcGwgPSAwOyB9CisKKyAgICB2
b2lkIHJlbGVhc2VJbXBsSWZOb3ROdWxsKCkgeyBpZiAobV9pbXBsKSB7IG1faW1wbC0+ZGVyZWYo
KTsgbV9pbXBsID0gMDsgfSB9CisKK3ByaXZhdGU6CisgICAgVGVzdENvbmRpdGlvbmFsRXZlbnRU
YXJnZXQqIG1faW1wbDsKK3Byb3RlY3RlZDoKKyAgICBKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFy
Z2V0KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RD
b25kaXRpb25hbEV2ZW50VGFyZ2V0Pik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpT
R2xvYmFsRGF0YSYpOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9OworCitjbGFzcyBKU1Rlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0T3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworICAg
IHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdmlydHVh
bCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQp
OworfTsKKworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3Jh
cHBlcldvcmxkKiwgVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldE93bmVyLCBqc1Rlc3RDb25k
aXRpb25hbEV2ZW50VGFyZ2V0T3duZXIsICgpKTsKKyAgICByZXR1cm4gJmpzVGVzdENvbmRpdGlv
bmFsRXZlbnRUYXJnZXRPd25lcjsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERP
TVdyYXBwZXJXb3JsZCogd29ybGQsIFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KikKK3sKKyAg
ICByZXR1cm4gd29ybGQ7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCopOworVGVzdENv
bmRpdGlvbmFsRXZlbnRUYXJnZXQqIHRvVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQoSlNDOjpK
U1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldFByb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlND
OjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTVGVz
dENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0Q29uZGl0aW9uYWxFdmVu
dFRhcmdldFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxK
U1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0UHJvdG90eXBlPihnbG9iYWxEYXRhLmhlYXApKSBK
U1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0UHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgSlNDOjpD
bGFzc0luZm8gc19pbmZvOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6
OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJn
ZXRQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVj
dChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7
Cit9OworCitjbGFzcyBKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IgOiBw
dWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVj
dCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Q29uc3RydWN0
b3IqIGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVz
dENvbmRpdGlvbmFsRXZlbnRUYXJnZXRDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I+
KCpleGVjLT5oZWFwKCkpKSBKU1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Q29uc3RydWN0b3Io
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGV4
ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6
OlN0cnVjdHVyZUZsYWdzOworfTsKKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVu
Y3Rpb25BZGRFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldFByb3RvdHlwZUZ1
bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRQcm90b3R5
cGVGdW5jdGlvbkRpc3BhdGNoRXZlbnQoSlNDOjpFeGVjU3RhdGUqKTsKKy8vIEF0dHJpYnV0ZXMK
KworSlNDOjpKU1ZhbHVlIGpzVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09ORElUSU9OQUwpCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09i
akMvRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOGMyYjQ1MGRhYWE0YTZjNmZkNzMwZWQ5Y2Q5YTMyOGI4YjFkNmE5MAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5p
ZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFdlYkNvcmUvRE9NT2Jq
ZWN0Lmg+CisKKyNpZiBXRUJLSVRfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJLSVRfVkVSU0lP
Tl9MQVRFU1QKKworQGNsYXNzIERPTUV2ZW50OworQGNsYXNzIE5TU3RyaW5nOworQHByb3RvY29s
IERPTUV2ZW50TGlzdGVuZXI7CisKK0BpbnRlcmZhY2UgRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRU
YXJnZXQgOiBET01PYmplY3QKKy0gKHZvaWQpYWRkRXZlbnRMaXN0ZW5lcjooTlNTdHJpbmcgKil0
eXBlIGxpc3RlbmVyOihpZCA8RE9NRXZlbnRMaXN0ZW5lcj4pbGlzdGVuZXIgdXNlQ2FwdHVyZToo
Qk9PTCl1c2VDYXB0dXJlOworLSAodm9pZClyZW1vdmVFdmVudExpc3RlbmVyOihOU1N0cmluZyAq
KXR5cGUgbGlzdGVuZXI6KGlkIDxET01FdmVudExpc3RlbmVyPilsaXN0ZW5lciB1c2VDYXB0dXJl
OihCT09MKXVzZUNhcHR1cmU7CistIChCT09MKWRpc3BhdGNoRXZlbnQ6KERPTUV2ZW50ICopZXZ0
OworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Lm1tIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENvbmRpdGlvbmFsRXZl
bnRUYXJnZXQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzdmZjE5NjQ0YWZiYjNjMDA3MmI2YzdmZTY4MzBlYTNk
NmY5YmJlOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Lm1tCkBAIC0wLDAgKzEs
MTE5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoQ09ORElUSU9OQUwpCisKKyNpbXBvcnQgIkRPTUludGVybmFsLmgiCisKKyNp
bXBvcnQgIkRPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LmgiCisKKyNpbXBvcnQgIkRPTUJs
b2JJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NQ1NTUnVsZUludGVybmFsLmgiCisjaW1wb3J0ICJE
T01DU1NWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCisjaW1w
b3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVN0eWxlU2hlZXRJbnRlcm5hbC5o
IgorI2ltcG9ydCAiRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRJbnRlcm5hbC5oIgorI2lt
cG9ydCAiRXZlbnQuaCIKKyNpbXBvcnQgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbXBvcnQgIkV4Y2Vw
dGlvbkhhbmRsZXJzLmgiCisjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbXBv
cnQgIktVUkwuaCIKKyNpbXBvcnQgIk9iakNFdmVudExpc3RlbmVyLmgiCisjaW1wb3J0ICJUZXN0
Q29uZGl0aW9uYWxFdmVudFRhcmdldC5oIgorI2ltcG9ydCAiVGhyZWFkQ2hlY2suaCIKKyNpbXBv
cnQgIldlYkNvcmVPYmpDRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRl
LmgiCisjaW1wb3J0IDx3dGYvR2V0UHRyLmg+CisKKyNkZWZpbmUgSU1QTCByZWludGVycHJldF9j
YXN0PFdlYkNvcmU6OlRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Kj4oX2ludGVybmFsKQorCitA
aW1wbGVtZW50YXRpb24gRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQKKworLSAodm9pZClk
ZWFsbG9jCit7CisgICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhy
ZWFkKFtET01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCBjbGFzc10sIHNlbGYpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoX2ludGVybmFsKQorICAgICAgICBJTVBMLT5kZXJlZigpOwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClmaW5hbGl6ZQoreworICAgIGlmIChf
aW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVmKCk7CisgICAgW3N1cGVyIGZpbmFsaXplXTsK
K30KKworLSAodm9pZClhZGRFdmVudExpc3RlbmVyOihOU1N0cmluZyAqKXR5cGUgbGlzdGVuZXI6
KGlkIDxET01FdmVudExpc3RlbmVyPilsaXN0ZW5lciB1c2VDYXB0dXJlOihCT09MKXVzZUNhcHR1
cmUKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgUmVm
UHRyPFdlYkNvcmU6OkV2ZW50TGlzdGVuZXI+IG5hdGl2ZUV2ZW50TGlzdGVuZXIgPSBXZWJDb3Jl
OjpPYmpDRXZlbnRMaXN0ZW5lcjo6d3JhcChsaXN0ZW5lcik7CisgICAgSU1QTC0+YWRkRXZlbnRM
aXN0ZW5lcih0eXBlLCBXVEY6OmdldFB0cihuYXRpdmVFdmVudExpc3RlbmVyKSwgdXNlQ2FwdHVy
ZSk7Cit9CisKKy0gKHZvaWQpcmVtb3ZlRXZlbnRMaXN0ZW5lcjooTlNTdHJpbmcgKil0eXBlIGxp
c3RlbmVyOihpZCA8RE9NRXZlbnRMaXN0ZW5lcj4pbGlzdGVuZXIgdXNlQ2FwdHVyZTooQk9PTCl1
c2VDYXB0dXJlCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpFdmVudExpc3RlbmVyPiBuYXRpdmVFdmVudExpc3RlbmVyID0g
V2ViQ29yZTo6T2JqQ0V2ZW50TGlzdGVuZXI6OndyYXAobGlzdGVuZXIpOworICAgIElNUEwtPnJl
bW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgV1RGOjpnZXRQdHIobmF0aXZlRXZlbnRMaXN0ZW5lciks
IHVzZUNhcHR1cmUpOworfQorCistIChCT09MKWRpc3BhdGNoRXZlbnQ6KERPTUV2ZW50ICopZXZ0
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIEJPT0wgcmVzdWx0ID0gSU1QTC0+ZGlzcGF0
Y2hFdmVudChjb3JlKGV2dCksIGVjKTsKKyAgICBXZWJDb3JlOjpyYWlzZU9uRE9NRXJyb3IoZWMp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKKworV2ViQ29yZTo6VGVzdENvbmRpdGlv
bmFsRXZlbnRUYXJnZXQqIGNvcmUoRE9NVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQgKndyYXBw
ZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyByZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRl
c3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Kj4od3JhcHBlci0+X2ludGVybmFsKSA6IDA7Cit9CisK
K0RPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0ICpraXQoV2ViQ29yZTo6VGVzdENvbmRpdGlv
bmFsRXZlbnRUYXJnZXQqIHZhbHVlKQoreworICAgIHsgRE9NX0FTU0VSVF9NQUlOX1RIUkVBRCgp
OyBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpOyB9OworICAgIGlmICghdmFs
dWUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgaWYgKERPTVRlc3RDb25kaXRpb25hbEV2ZW50
VGFyZ2V0ICp3cmFwcGVyID0gZ2V0RE9NV3JhcHBlcih2YWx1ZSkpCisgICAgICAgIHJldHVybiBb
W3dyYXBwZXIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgRE9NVGVzdENvbmRpdGlvbmFsRXZl
bnRUYXJnZXQgKndyYXBwZXIgPSBbW0RPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0IGFsbG9j
XSBfaW5pdF07CisgICAgd3JhcHBlci0+X2ludGVybmFsID0gcmVpbnRlcnByZXRfY2FzdDxET01P
YmplY3RJbnRlcm5hbCo+KHZhbHVlKTsKKyAgICB2YWx1ZS0+cmVmKCk7CisgICAgYWRkRE9NV3Jh
cHBlcih3cmFwcGVyLCB2YWx1ZSk7CisgICAgcmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsK
K30KKworI2VuZGlmIC8vIEVOQUJMRShDT05ESVRJT05BTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDb25kaXRpb25hbEV2ZW50
VGFyZ2V0SW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0SW50ZXJuYWwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
MzUyNDZkZjhlMTM0ZWRlZjhjNjBhYmM2MTFkZjg0NzI1NzMzNTM3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENvbmRp
dGlvbmFsRXZlbnRUYXJnZXRJbnRlcm5hbC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTVRlc3RDb25kaXRpb25hbEV2ZW50
VGFyZ2V0Lmg+CisKKyNpZiBXRUJLSVRfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJLSVRfVkVS
U0lPTl9MQVRFU1QKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFRlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0OworfQorCitXZWJDb3JlOjpUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdl
dCogY29yZShET01UZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCAqKTsKK0RPTVRlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0ICpraXQoV2ViQ29yZTo6VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQq
KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQuaWRsIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LmlkbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42OTBhNjNlMzRiYjA0NGJhMDYwMjcyMTE2MDU5Y2U3ODYyN2YyMWU0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0LmlkbApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSwgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXN0ckFyZywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVz
dHJBcmcsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUg
ZXZlbnRzIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUNPTkRJVElP
TkFMLAorICAgICAgICBFdmVudFRhcmdldAorICAgIF0gVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJn
ZXQgeworCisgICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVy
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9vbGVhbiB1
c2VDYXB0dXJlKTsKKyAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmlu
ZyB0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVu
ZXIgbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlv
bmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQo
aW4gRXZlbnQgZXZ0KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKKyAgICB9
OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTdlMTJhNmE0ZGU4NTg3Y2JkNWJiMzRlZDM1MTE3NTU3YWM1YzBhNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LmNwcApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOFRlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0LmgiCisKKyNpZiBFTkFCTEUoQ09ORElUSU9OQUwpCisKKyNpbmNsdWRl
ICJCaW5kaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJDb250ZXh0RmVhdHVyZXMuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhE
T01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVjhFdmVudC5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRD
b250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworV3JhcHBlclR5cGVJbmZvIFY4VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6Omlu
Zm8gPSB7IFY4VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OkdldFRlbXBsYXRlLCBWOFRlc3RD
b25kaXRpb25hbEV2ZW50VGFyZ2V0OjpkZXJlZk9iamVjdCwgMCwgMCwgMCwgV3JhcHBlclR5cGVP
YmplY3RQcm90b3R5cGUgfTsKKworbmFtZXNwYWNlIFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0
VjhJbnRlcm5hbCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4X1VTRShUKSB7IH0K
Kworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhZGRFdmVudExpc3RlbmVyQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0Q29u
ZGl0aW9uYWxFdmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCkiKTsKKyAgICBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoYXJn
c1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9yQ3JlYXRlKTsKKyAgICBpZiAobGlzdGVuZXIpIHsK
KyAgICAgICAgVjhUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6dG9OYXRpdmUoYXJncy5Ib2xk
ZXIoKSktPmFkZEV2ZW50TGlzdGVuZXIodG9XZWJDb3JlQXRvbWljU3RyaW5nKGFyZ3NbMF0pLCBs
aXN0ZW5lciwgYXJnc1syXS0+Qm9vbGVhblZhbHVlKCkpOworICAgICAgICBjcmVhdGVIaWRkZW5E
ZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4VGVzdENvbmRpdGlvbmFsRXZlbnRU
YXJnZXQ6OmV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIHY4VW5k
ZWZpbmVkKCk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVtb3ZlRXZlbnRM
aXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NU
QVRTKCJET00uVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigp
Iik7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpn
ZXRFdmVudExpc3RlbmVyKGFyZ3NbMV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPbmx5KTsKKyAgICBp
ZiAobGlzdGVuZXIpIHsKKyAgICAgICAgVjhUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6dG9O
YXRpdmUoYXJncy5Ib2xkZXIoKSktPnJlbW92ZUV2ZW50TGlzdGVuZXIodG9XZWJDb3JlQXRvbWlj
U3RyaW5nKGFyZ3NbMF0pLCBsaXN0ZW5lci5nZXQoKSwgYXJnc1syXS0+Qm9vbGVhblZhbHVlKCkp
OworICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0s
IFY4VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OmV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsK
KyAgICB9CisgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gZGlzcGF0Y2hFdmVudENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQuZGlz
cGF0Y2hFdmVudCIpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0dXJu
IHRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOworICAgIFRl
c3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0KiBpbXAgPSBWOFRlc3RDb25kaXRpb25hbEV2ZW50VGFy
Z2V0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICB7CisgICAgRVhDRVBUSU9OX0JMT0NLKEV2ZW50KiwgZXZ0LCBWOEV2ZW50OjpIYXNJbnN0
YW5jZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQp
KSA/IFY4RXZlbnQ6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7Cisg
ICAgYm9vbCByZXN1bHQgPSBpbXAtPmRpc3BhdGNoRXZlbnQoZXZ0LCBlYyk7CisgICAgaWYgKFVO
TElLRUxZKGVjKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIHJldHVybiB2OEJvb2xlYW4ocmVz
dWx0LCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgfQorICAgIGZhaWw6CisgICAgcmV0dXJuIHNl
dERPTUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldFY4SW50ZXJuYWwKKworc3RhdGljIGNvbnN0IFY4
RE9NQ29uZmlndXJhdGlvbjo6QmF0Y2hlZENhbGxiYWNrIFRlc3RDb25kaXRpb25hbEV2ZW50VGFy
Z2V0Q2FsbGJhY2tzW10gPSB7CisgICAgeyJhZGRFdmVudExpc3RlbmVyIiwgVGVzdENvbmRpdGlv
bmFsRXZlbnRUYXJnZXRWOEludGVybmFsOjphZGRFdmVudExpc3RlbmVyQ2FsbGJhY2t9LAorICAg
IHsicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0VjhJbnRl
cm5hbDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckNhbGxiYWNrfSwKK307CisKK3N0YXRpYyB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0Q29uZGl0aW9uYWxF
dmVudFRhcmdldFRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBk
ZXNjKQoreworICAgIGRlc2MtPlJlYWRPbmx5UHJvdG90eXBlKCk7CisKKyAgICB2ODo6TG9jYWw8
djg6OlNpZ25hdHVyZT4gZGVmYXVsdFNpZ25hdHVyZTsKKyAgICBkZWZhdWx0U2lnbmF0dXJlID0g
VjhET01Db25maWd1cmF0aW9uOjpjb25maWd1cmVUZW1wbGF0ZShkZXNjLCAiVGVzdENvbmRpdGlv
bmFsRXZlbnRUYXJnZXQiLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwg
VjhUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldDo6aW50ZXJuYWxGaWVsZENvdW50LAorICAgICAg
ICAwLCAwLAorICAgICAgICBUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldENhbGxiYWNrcywgV1RG
X0FSUkFZX0xFTkdUSChUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldENhbGxiYWNrcykpOworICAg
IFVOVVNFRF9QQVJBTShkZWZhdWx0U2lnbmF0dXJlKTsgLy8gSW4gc29tZSBjYXNlcywgaXQgd2ls
bCBub3QgYmUgdXNlZC4KKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5j
ZSA9IGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKTsKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRl
bXBsYXRlPiBwcm90byA9IGRlc2MtPlByb3RvdHlwZVRlbXBsYXRlKCk7CisgICAgVU5VU0VEX1BB
UkFNKGluc3RhbmNlKTsgLy8gSW4gc29tZSBjYXNlcywgaXQgd2lsbCBub3QgYmUgdXNlZC4KKyAg
ICBVTlVTRURfUEFSQU0ocHJvdG8pOyAvLyBJbiBzb21lIGNhc2VzLCBpdCB3aWxsIG5vdCBiZSB1
c2VkLgorICAgIAorCisgICAgLy8gQ3VzdG9tIFNpZ25hdHVyZSAnZGlzcGF0Y2hFdmVudCcKKyAg
ICBjb25zdCBpbnQgZGlzcGF0Y2hFdmVudEFyZ2MgPSAxOworICAgIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IGRpc3BhdGNoRXZlbnRBcmd2W2Rpc3BhdGNoRXZlbnRBcmdjXSA9IHsg
VjhFdmVudDo6R2V0UmF3VGVtcGxhdGUoKSB9OworICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVy
ZT4gZGlzcGF0Y2hFdmVudFNpZ25hdHVyZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBkaXNw
YXRjaEV2ZW50QXJnYywgZGlzcGF0Y2hFdmVudEFyZ3YpOworICAgIHByb3RvLT5TZXQodjg6OlN0
cmluZzo6TmV3U3ltYm9sKCJkaXNwYXRjaEV2ZW50IiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpO
ZXcoVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRWOEludGVybmFsOjpkaXNwYXRjaEV2ZW50Q2Fs
bGJhY2ssIHY4VW5kZWZpbmVkKCksIGRpc3BhdGNoRXZlbnRTaWduYXR1cmUpKTsKKworICAgIC8v
IEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0ZQorICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXdT
eW1ib2woInRvU3RyaW5nIiksIFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKS0+dG9TdHJpbmdU
ZW1wbGF0ZSgpKTsKKyAgICByZXR1cm4gZGVzYzsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IFY4VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6OkdldFJhd1RlbXBs
YXRlKCkKK3sKKyAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6
Y3VycmVudCgpOworICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOworICAgIGlmIChyZXN1
bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC0+c2Vjb25kOworCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRl
KCk7CisgICAgZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5hZGQoJmluZm8sIHRlbXBsKTsKKyAgICBy
ZXR1cm4gdGVtcGw7Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBW
OFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0OjpHZXRUZW1wbGF0ZSgpCit7CisgICAgVjhQZXJJ
c29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKKyAgICBWOFBl
cklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxh
dGVNYXAoKS5maW5kKCZpbmZvKTsKKyAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFw
KCkuZW5kKCkpCisgICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKworICAgIHY4OjpIYW5k
bGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gdGVtcGwgPQorICAgICAgICBDb25maWd1cmVWOFRlc3RDb25kaXRpb25hbEV2ZW50VGFy
Z2V0VGVtcGxhdGUoR2V0UmF3VGVtcGxhdGUoKSk7CisgICAgZGF0YS0+dGVtcGxhdGVNYXAoKS5h
ZGQoJmluZm8sIHRlbXBsKTsKKyAgICByZXR1cm4gdGVtcGw7Cit9CisKK2Jvb2wgVjhUZXN0Q29u
ZGl0aW9uYWxFdmVudFRhcmdldDo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZh
bHVlKQoreworICAgIHJldHVybiBHZXRSYXdUZW1wbGF0ZSgpLT5IYXNJbnN0YW5jZSh2YWx1ZSk7
Cit9CisKKwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RDb25kaXRpb25hbEV2ZW50VGFy
Z2V0Ojp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0PiBpbXBs
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZXI7CisgICAgRnJhbWUqIGZyYW1lID0gMDsKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVy
OjppbnN0YW50aWF0ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywgaW1wbC5nZXQoKSk7CisgICAgaWYg
KFVOTElLRUxZKHdyYXBwZXIuSXNFbXB0eSgpKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7Cisg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRsZSA9IFY4RE9NV3JhcHBl
cjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGltcGwsIHdyYXBwZXIsIGlzb2xhdGUpOworICAg
IGlmICghaGFzRGVwZW5kZW50TGlmZXRpbWUpCisgICAgICAgIHdyYXBwZXJIYW5kbGUuTWFya0lu
ZGVwZW5kZW50KCk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK3ZvaWQgVjhUZXN0Q29uZGl0
aW9uYWxFdmVudFRhcmdldDo6ZGVyZWZPYmplY3Qodm9pZCogb2JqZWN0KQoreworICAgIHN0YXRp
Y19jYXN0PFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Kj4ob2JqZWN0KS0+ZGVyZWYoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTkRJVElPTkFM
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjFmYTYxNmJmNGM5ZGY3YTllOTk0MDI2NDRhNmU4NWQyMWJhZDA3MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDb25kaXRp
b25hbEV2ZW50VGFyZ2V0LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisK
KyNpZiBFTkFCTEUoQ09ORElUSU9OQUwpCisKKyNpZm5kZWYgVjhUZXN0Q29uZGl0aW9uYWxFdmVu
dFRhcmdldF9oCisjZGVmaW5lIFY4VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXRfaAorCisjaW5j
bHVkZSAiVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcu
aCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8u
aCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFY4
VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc0RlcGVuZGVudExpZmV0aW1lID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgSGFzSW5z
dGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFJhd1RlbXBsYXRlKCk7CisgICAgc3RhdGljIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOworICAgIHN0YXRp
YyBUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldCogdG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUZXN0
Q29uZGl0aW9uYWxFdmVudFRhcmdldCo+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZp
ZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CisgICAgfQorICAgIGlubGluZSBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RDb25kaXRpb25hbEV2ZW50VGFyZ2V0Kiwg
djg6Oklzb2xhdGUqID0gMCk7CisgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOwor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqLCB2b2lkKiwgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOworICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5m
bzsKKyAgICBzdGF0aWMgY29uc3QgaW50IGV2ZW50TGlzdGVuZXJDYWNoZUluZGV4ID0gdjhEZWZh
dWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDA7CisgICAgc3RhdGljIGNvbnN0IGludCBp
bnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsg
MTsKK3ByaXZhdGU6CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3co
UGFzc1JlZlB0cjxUZXN0Q29uZGl0aW9uYWxFdmVudFRhcmdldD4sIHY4OjpJc29sYXRlKik7Cit9
OworCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQ6
OndyYXAoVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqIGltcGwsIHY4OjpJc29sYXRlKiBpc29s
YXRlKQoreworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01P
YmplY3RNYXAoaXNvbGF0ZSkuZ2V0KGltcGwpOworICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0
eSgpKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIFY4VGVzdENvbmRp
dGlvbmFsRXZlbnRUYXJnZXQ6OndyYXBTbG93KGltcGwsIGlzb2xhdGUpOworfQorCitpbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJnZXQqIGlt
cGwsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAg
IHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CisgICAgcmV0dXJuIFY4VGVzdENvbmRp
dGlvbmFsRXZlbnRUYXJnZXQ6OndyYXAoaW1wbCwgaXNvbGF0ZSk7Cit9CitpbmxpbmUgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdENvbmRpdGlvbmFsRXZlbnRUYXJn
ZXQgPiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCit7CisgICAgcmV0dXJuIHRvVjgo
aW1wbC5nZXQoKSwgaXNvbGF0ZSk7Cit9CisKK30KKworI2VuZGlmIC8vIFY4VGVzdENvbmRpdGlv
bmFsRXZlbnRUYXJnZXRfaAorI2VuZGlmIC8vIEVOQUJMRShDT05ESVRJT05BTCkKKwo=
</data>
<flag name="review"
          id="173554"
          type_id="1"
          status="-"
          setter="pnormand"
    />
          </attachment>
      

    </bug>

</bugzilla>