<?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>70101</bug_id>
          
          <creation_ts>2011-10-14 05:17:48 -0700</creation_ts>
          <short_desc>Implement [Constructor] IDL for JSC</short_desc>
          <delta_ts>2011-10-16 21:00:33 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>65839</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dominicc</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>483919</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-10-14 05:17:48 -0700</bug_when>
    <thetext>Currently, all constructors of JSC are manually written as custom constructors in WebCore/bindings/js/*.cpp. We need to support [Constructor] IDL in JSC.

After this patch is landed, I am planning to replace 6 custom constructors in JSC with the [Constructor] IDL. Please see the bug 65839 for more details.

The spec of [Constructor] IDL: http://www.w3.org/TR/WebIDL/#Constructor
Implement [Constructor] IDL for V8: bug 66536</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483962</commentid>
    <comment_count>1</comment_count>
      <attachid>111010</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-10-14 07:03:28 -0700</bug_when>
    <thetext>Created attachment 111010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484084</commentid>
    <comment_count>2</comment_count>
      <attachid>111010</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-14 11:21:56 -0700</bug_when>
    <thetext>Comment on attachment 111010
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3266
&gt; +                # We do not also support a constructor [Opitional] argument without CallWithDefaultValue.

Opitional &lt;-- typo

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp:111
&gt; +    ScriptExecutionContext* scriptContext = static_cast&lt;JSDOMGlobalObject*&gt;(exec-&gt;lexicalGlobalObject())-&gt;scriptExecutionContext();
&gt; +    if (!scriptContext)
&gt; +        return JSValue::encode(jsUndefined());

Why is this variable check needed?  It&apos;s not used in this function.

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp:122
&gt; +    RefPtr&lt;TestInterface&gt; object = TestInterface::create(str1, str2, context, ec);

This seems to be passing context at the end instead of the beginning.

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h:91
&gt; +class JSTestInterfaceConstructor : public DOMConstructorObject {

I don&apos;t quite understand when this moved from the cpp file to the h file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484743</commentid>
    <comment_count>3</comment_count>
      <attachid>111177</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-10-15 23:40:15 -0700</bug_when>
    <thetext>Created attachment 111177
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484745</commentid>
    <comment_count>4</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-10-15 23:43:17 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 111010 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111010&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3266
&gt; &gt; +                # We do not also support a constructor [Opitional] argument without CallWithDefaultValue.
&gt; 
&gt; Opitional &lt;-- typo

Fixed. 

&gt; &gt; Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp:111
&gt; &gt; +    ScriptExecutionContext* scriptContext = static_cast&lt;JSDOMGlobalObject*&gt;(exec-&gt;lexicalGlobalObject())-&gt;scriptExecutionContext();
&gt; &gt; +    if (!scriptContext)
&gt; &gt; +        return JSValue::encode(jsUndefined());
&gt; 
&gt; Why is this variable check needed?  It&apos;s not used in this function.

Removed this check.

&gt; &gt; Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp:122
&gt; &gt; +    RefPtr&lt;TestInterface&gt; object = TestInterface::create(str1, str2, context, ec);
&gt; 
&gt; This seems to be passing context at the end instead of the beginning.

Sorry, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484765</commentid>
    <comment_count>5</comment_count>
      <attachid>111179</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-10-16 04:43:31 -0700</bug_when>
    <thetext>Created attachment 111179
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484766</commentid>
    <comment_count>6</comment_count>
      <attachid>111010</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-10-16 04:44:19 -0700</bug_when>
    <thetext>Comment on attachment 111010
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h:91
&gt;&gt; +class JSTestInterfaceConstructor : public DOMConstructorObject {
&gt; 
&gt; I don&apos;t quite understand when this moved from the cpp file to the h file.

Currently, the declaration of XXXXConstructor exists on the h file if the constructor is a custom constructor, and on the cpp file if the constructor is not a custom constructor. This is inconsistent and I think that all declarations should exist on the h file.

Practical problem: For example, JSDOMWindowCustom.cpp assumes that the declaration of EventSourceConstructor exists on the h file. Currently, JSDOMWindowCustom.cpp can be compiled, since EventSourceConstructor is written as a custom constructor and thus it is declared on the h file. However, in a coming patch, I am planning to generate EventSourceConstructor by [Constructor] IDL, which will put the declaration to the cpp file (unless we move the declaration from the cpp file to the h file by this patch). This makes JSDOMWindowCustom.cpp fail to compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484772</commentid>
    <comment_count>7</comment_count>
      <attachid>111180</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-10-16 07:03:56 -0700</bug_when>
    <thetext>Created attachment 111180
Rebased patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484804</commentid>
    <comment_count>8</comment_count>
      <attachid>111180</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-16 12:56:28 -0700</bug_when>
    <thetext>Comment on attachment 111180
Rebased patch for review

ok!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484836</commentid>
    <comment_count>9</comment_count>
      <attachid>111180</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-16 16:29:15 -0700</bug_when>
    <thetext>Comment on attachment 111180
Rebased patch for review

Clearing flags on attachment: 111180

Committed r97578: &lt;http://trac.webkit.org/changeset/97578&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484837</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-16 16:29:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111010</attachid>
            <date>2011-10-14 07:03:28 -0700</date>
            <delta_ts>2011-10-16 04:44:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70101-20111014230326.patch</filename>
            <type>text/plain</type>
            <size>84460</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc0NTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMTk3OTkwNDdhZTE5NWEx
OGMxZDkzZGNlN2EwZjkxZTRhMTkyNDdmLi5iMWU0MWE1ZWFjOTRmMWMxNWU5NWUxNDFhZTg0MTlk
MmI4NDRkMjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODggQEAKKzIwMTEtMTAtMTQgIEtlbnRh
cm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN1cHBvcnQgW0NvbnN0
cnVjdG9yXSBJREwgZm9yIEpTQy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcwMTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIHNwZWMgZm9yIFtDb25zdHJ1Y3Rvcl0gSURMIGlzIGhlcmU6IGh0dHA6
Ly93d3cudzMub3JnL1RSL1dlYklETC8jQ29uc3RydWN0b3IKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VkIFtDb25zdHJ1Y3Rvcl0gSURMIGZvciBKU0MuIFRoaXMgcGF0Y2ggYWxzbyBhZGRl
ZAorICAgICAgICBbQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb25dIGZvciBKU0MuIElmIFtDb25z
dHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbl0gaXMgc3BlY2lmaWVkLAorICAgICAgICBhIHBsYWNlaG9s
ZGVyIGZvciBFeGNlcHRpb25Db2RlIGlzIHBhc3NlZCB0byBYWFg6OmNyZWF0ZSgpLCBsaWtlIFhY
WDo6Y3JlYXRlKC4uLiwgZWMpLgorCisgICAgICAgIE5vdGVzOgorICAgICAgICAtIFdlIGRvIG5v
dCB5ZXQgc3VwcG9ydCBjb25zdHJ1Y3RvciBvdmVybG9hZGluZy4KKyAgICAgICAgLSBXZSBkbyBu
b3QgeWV0IHN1cHBvcnQgW09wdGlvbmFsXSB3aXRob3V0IENhbGxXaXRoRGVmYXVsdFZhbHVlIGZv
ciBjb25zdHJ1Y3RvciBhcmd1bWVudHMuCisKKyAgICAgICAgVGVzdHM6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW50ZXJmYWNlLmlkbAorICAgICAgICAgICAgICAg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVy
YXRlSGVhZGVyKTogR2VuZXJhdGVzIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uIGNvZGUgdG8gYSBo
ZWFkZXIgZmlsZSwgaWYgYSBnaXZlbiBET00gb2JqZWN0IGhhcyBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOiBVc2VzIEdlbmVyYXRlQXJndW1lbnRzQ291bnRD
aGVjaygpIGFuZCBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjaygpLgorICAgICAgICAoR2VuZXJhdGVB
cmd1bWVudHNDb3VudENoZWNrKTogU3BsaXRzIG91dCBvZiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
KCkgZm9yIHJldXNlLgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOiBTcGxpdHMg
b3V0IG9mIEdlbmVyYXRlSW1wbGVtZW50YXRpb24oKSBmb3IgcmV1c2UuCisgICAgICAgIChHZW5l
cmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6IEdlbmVyYXRlcyBjb25zdHJ1Y3RvciBkZWZpbml0
aW9uIGNvZGUuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVy
ZmFjZS5jcHA6IFVwZGF0ZWQgdGhlIHJ1bi1iaW5kaW5nLXRlc3RzIHJlc3VsdHMuCisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0SW50
ZXJmYWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJm
YWNlLmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2QpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFy
Z3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbnRNZXRo
b2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbnRNZXRo
b2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9iak1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9iak1ldGhvZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJv
d3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxp
emVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25J
ZGJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRp
b25zT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkN1c3RvbUFyZ3NBbmRFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1p
Y0ZyYW1lQW5kQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNG
cmFtZUFuZFVzZXJHZXN0dXJlQVNBRCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWQpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmopOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNj
cmlwdFN0YXRlT2JqRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0
aW9uYWxBcmdBbmRPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhD
YWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9u
YWxBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25k
aXRpb25hbE1ldGhvZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db25kaXRpb25hbE1ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDMpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kNCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q1KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ2xhc3NNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE9iakNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6IERpdHRvLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorCiAyMDExLTEwLTE0ICBNaWhuZWEgT3ZpZGVuaWUgIDxtaWhuZWFA
YWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgUmVnaW9uc10gQ2hhbmdlIC13ZWJraXQtZmxvdyB0
byAtd2Via2l0LWZsb3ctaW50bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCBhNGExODVkYTEwODFjNzlkNWNiODIzYjAzODcy
NDEwMjgxY2I0ODFmLi4zYjM4MDFjMDYzMGE3YTk5NzJjM2VmOGFkY2JlMzA2Y2U3OWM4NGQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQpAQCAtMTA3MSwxMiArMTA3MSwxMSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKIAotICAgICMgQ29uZGl0aW9uYWxseSBlbWl0
IHRoZSBjb25zdHJ1Y3RvciBvYmplY3QncyBkZWNsYXJhdGlvbgotICAgIGlmICgkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkgeworICAgIGlmICgk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwg
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSB8fCAh
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiT21pdENvbnN0cnVjdG9yIn0pIHsKKyAg
ICAgICAgJGhlYWRlckluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKICAgICAgICAgR2Vu
ZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKFxAaGVhZGVyQ29udGVudCwgJGNsYXNzTmFtZSwg
JGRhdGFOb2RlKTsKICAgICB9CiAKLQogICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgewogICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCIvLyBGdW5jdGlvbnNcblxuIik7CiAgICAgICAgIGZv
cmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgewpAQCAtMTM2NCw4
ICsxMzYzLDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbXBpbGVUaW1lQ2hlY2tGb3JFbnVt
c0lmTmVlZGVkKCRkYXRhTm9kZSkpOwogCiAgICAgICAgIG15ICRwcm90b0NsYXNzTmFtZSA9ICIk
e2NsYXNzTmFtZX1Qcm90b3R5cGUiOwotCi0gICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JEZWNs
YXJhdGlvbihcQGltcGxDb250ZW50LCAkY2xhc3NOYW1lLCAkZGF0YU5vZGUpIHVubGVzcyAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0pOwogICAg
ICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbihcQGltcGxDb250ZW50LCAkY2xhc3NO
YW1lLCAkcHJvdG9DbGFzc05hbWUsICRpbnRlcmZhY2VOYW1lLCAkdmlzaWJsZUNsYXNzTmFtZSwg
JGRhdGFOb2RlKTsKICAgICB9CiAKQEAgLTIwMTMsMzMgKzIwMTAsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAkc3ZnUHJvcGVydHlUeXBlJiBwb2RJbXAgPSBpbXAtPnByb3BlcnR5UmVmZXJlbmNlKCk7XG4i
KTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBteSAkbnVtUGFyYW1ldGVy
cyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKLQotICAgICAgICAgICAgICAgIG15ICRyZXF1
aXJlc0FsbEFyZ3VtZW50czsKLSAgICAgICAgICAgICAgICBteSAkcmVxdWlyZXNBbGxBcmd1bWVu
dHNEZWZhdWx0ID0gIiI7Ci0gICAgICAgICAgICAgICAgaWYgKCEkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJMZWdhY3lEZWZhdWx0T3B0aW9uYWxBcmd1bWVudHMifSkgewotICAgICAg
ICAgICAgICAgICAgICAkcmVxdWlyZXNBbGxBcmd1bWVudHNEZWZhdWx0ID0gIlJhaXNlIjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgJHJlcXVpcmVzQWxsQXJndW1lbnRzID0g
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXF1aXJlc0FsbEFy
Z3VtZW50cyJ9IHx8ICRyZXF1aXJlc0FsbEFyZ3VtZW50c0RlZmF1bHQ7Ci0gICAgICAgICAgICAg
ICAgaWYgKCRyZXF1aXJlc0FsbEFyZ3VtZW50cykgewotICAgICAgICAgICAgICAgICAgICBteSAk
bnVtTWFuZGF0b3J5UGFyYW1zID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9OwotICAgICAgICAg
ICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAocmV2ZXJzZShAeyRmdW5jdGlvbi0+cGFyYW1l
dGVyc30pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiT3B0aW9uYWwifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRu
dW1NYW5kYXRvcnlQYXJhbXMtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoJG51bU1h
bmRhdG9yeVBhcmFtcyA+IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPCAkbnVtTWFuZGF0b3J5UGFyYW1zKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoJHJlcXVpcmVzQWxsQXJndW1lbnRzIGVxICJSYWlzZSIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgXCJOb3QgZW5vdWdoIGFyZ3VtZW50c1wiKSk7
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBH
ZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2soXEBpbXBsQ29udGVudCwgJGZ1bmN0aW9uLCAkZGF0
YU5vZGUpOwogCiAgICAgICAgICAgICAgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRp
b25zfSkgewogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDtcbiIpOwpAQCAtMjA1NiwxNTEgKzIwMjcsOCBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5uYW1lIGVxICJyZW1vdmVFdmVudExpc3RlbmVyIikgewogICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbCgkY2xhc3NO
YW1lLCAicmVtb3ZlIikpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG15ICRhcmdzSW5kZXggPSAwOwotICAgICAgICAgICAgICAgICAgICBteSAkcGFyYW1J
bmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRmdW5jdGlvblN0cmluZyA9ICgoJHN2
Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIGFuZCAhJHN2Z0xpc3RQcm9wZXJ0eVR5cGUpID8g
InBvZEltcC4iIDogImltcC0+IikgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKCI7
Ci0gICAgICAgICAgICAgICAgICAgIG15ICRoYXNPcHRpb25hbEFyZ3VtZW50cyA9IDA7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tQXJndW1lbnRIYW5kbGluZyJ9KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBzY3Jp
cHRBcmd1bWVudHMoY3JlYXRlU2NyaXB0QXJndW1lbnRzKGV4ZWMsICRudW1QYXJhbWV0ZXJzKSk7
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNp
emVfdCBtYXhTdGFja1NpemUgPSBpbXAtPnNob3VsZENhcHR1cmVGdWxsU3RhY2tUcmFjZSgpID8g
U2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlIDogMTtcbiIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPFNjcmlw
dENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFjayhleGVjLCBtYXhTdGFj
a1NpemUpKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siU2Ny
aXB0QXJndW1lbnRzLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1
ZGVzeyJTY3JpcHRDYWxsU3RhY2suaCJ9ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICRp
bXBsSW5jbHVkZXN7IlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCJ9ID0gMTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG15ICRjYWxsV2l0aCA9ICRmdW5jdGlv
bi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCRjYWxsV2l0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbXkg
JGNhbGxXaXRoQXJnID0gIkNPTVBJTEVfQVNTRVJUKGZhbHNlKSI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoJGNhbGxXaXRoIGVxICJEeW5hbWljRnJhbWUiKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRnJhbWUqIGR5bmFtaWNGcmFt
ZSA9IHRvRHluYW1pY0ZyYW1lKGV4ZWMpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFkeW5hbWljRnJhbWUpXG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICRjYWxsV2l0aEFyZyA9ICJkeW5hbWljRnJhbWUiOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNpZiAoJGNhbGxXaXRoIGVxICJTY3JpcHRTdGF0ZSIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAkY2FsbFdpdGhBcmcgPSAiZXhlYyI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2lmICgkY2FsbFdpdGggZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQi
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKCFzY3JpcHRDb250ZXh0KVxuIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
Y2FsbFdpdGhBcmcgPSAic2NyaXB0Q29udGV4dCI7IAotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBh
cmFtSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gJGNh
bGxXaXRoQXJnOwotICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmFtSW5kZXgrKzsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV4
Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3si
SlNET01CaW5kaW5nLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBh
cmFtZXRlciAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAjIE9wdGlvbmFsIGNhbGxiYWNrcyBzaG91bGQgYmUgdHJlYXRlZCBkaWZmZXJlbnRseSwg
YmVjYXVzZSB0aGV5IGFsd2F5cyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAoMCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAjIGFuZCB3ZSBjYW4gcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgdGhhdCB0YWtlIGEgZGlmZmVyZW50IG51bWJlciBvZiBwYXJhbWV0ZXJzLgot
ICAgICAgICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbCBhcmd1bWVudHMgd2l0aCBkZWZhdWx0
IHZhbHVlcyBbT3B0aW9uYWw9Q2FsbFdpdGhEZWZhdWx0VmFsdWVdIHNob3VsZCBub3QgZ2VuZXJh
dGUgYW4gZWFybHkgY2FsbC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG15ICRvcHRpb25hbCA9
ICRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25hbCJ9OyAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG9wdGlvbmFsICYmICRvcHRpb25hbCBuZSAiQ2Fs
bFdpdGhEZWZhdWx0VmFsdWUiICYmICEkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q2FsbGJhY2sifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR2VuZXJhdGUgZWFy
bHkgY2FsbCBpZiB0aGVyZSBhcmUgZW5vdWdoIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCEkaGFzT3B0aW9uYWxBcmd1bWVudHMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICBzaXplX3QgYXJnc0Nv
dW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICRoYXNPcHRpb25hbEFyZ3VtZW50cyA9IDE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmIChhcmdzQ291bnQgPD0gJGFyZ3NJbmRleCkge1xuIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rp
b24sICRmdW5jdGlvblN0cmluZywgJHBhcmFtSW5kZXgsICIgICAgIiB4IDIsICRzdmdQcm9wZXJ0
eVR5cGUsICRpbXBsQ2xhc3NOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICB9XG5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBteSAkbmFtZSA9ICRwYXJhbWV0ZXItPm5hbWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBteSAkYXJnVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJp
cE1vZHVsZSgkcGFyYW1ldGVyLT50eXBlKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCRhcmdUeXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gY3Vz
dG9tUmVzb2x2ZXI7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyID0gdG9YUGF0aE5TUmVzb2x2
ZXIoZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFyZXNvbHZlcikge1xuIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGN1
c3RvbVJlc29sdmVyID0gSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZShleGVjLCBleGVj
LT5hcmd1bWVudCgkYXJnc0luZGV4KSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKVxu
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc29s
dmVyID0gY3VzdG9tUmVzb2x2ZXIuZ2V0KCk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGNhbGxiYWNrQ2xhc3NOYW1lID0g
R2V0Q2FsbGJhY2tDbGFzc05hbWUoJGFyZ1R5cGUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICRpbXBsSW5jbHVkZXN7IiRjYWxsYmFja0NsYXNzTmFtZS5oIn0gPSAxOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
T3B0aW9uYWwifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+ICRuYW1lO1xuIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPiAkYXJnc0luZGV4ICYmICFleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmICghZXhlYy0+YXJndW1lbnQoJGFyZ3NJ
bmRleCkuaXNPYmplY3QoKSkge1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZ
UEVfTUlTTUFUQ0hfRVJSKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIH1cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgJG5hbWUgPSAke2NhbGxiYWNrQ2xhc3NO
YW1lfTo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpKSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gJGFyZ3NJbmRleCB8
fCAhZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNPYmplY3QoKSkge1xuIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+
ICRuYW1lID0gJHtjYWxsYmFja0NsYXNzTmFtZX06OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1
bWVudCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtcbiIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGUgIlN0cmljdFR5cGVDaGVj
a2luZyIgZXh0ZW5kZWQgYXR0cmlidXRlIGlzIHByZXNlbnQsIGFuZCB0aGUgYXJndW1lbnQncyB0
eXBlIGlzIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbnRlcmZhY2UgdHlwZSwg
dGhlbiBpZiB0aGUgaW5jb21pbmcgdmFsdWUgZG9lcyBub3QgaW1wbGVtZW50IHRoYXQgaW50ZXJm
YWNlLCBhIFR5cGVFcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaXMgdGhyb3du
IHJhdGhlciB0aGFuIHNpbGVudGx5IHBhc3NpbmcgTlVMTCB0byB0aGUgQysrIGNvZGUuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBQZXIgdGhlIFdlYiBJREwgYW5kIEVDTUFTY3JpcHQg
c2VtYW50aWNzLCBpbmNvbWluZyB2YWx1ZXMgY2FuIGFsd2F5cyBiZSBjb252ZXJ0ZWQgdG8gYm90
aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RyaW5ncyBhbmQgbnVtYmVycywgc28g
ZG8gbm90IHRocm93IFR5cGVFcnJvciBpZiB0aGUgYXJndW1lbnQgaXMgb2YgdGhlc2UgdHlwZXMu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiU3RyaWN0VHlwZUNoZWNraW5nIn0pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvRXJyb3IuaD4ifSA9
IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGFyZ1ZhbHVlID0gImV4
ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFJc05hdGl2ZVR5cGUoJGFyZ1R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpID4gJGFyZ3NJbmRleCAmJiAhJHthcmdWYWx1ZX0uaXNVbmRlZmluZWRPck51bGwoKSAm
JiAhJHthcmdWYWx1ZX0uaW5oZXJpdHMoJkpTJHthcmdUeXBlfTo6c19pbmZvKSlcbiIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0
aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lKCIgLiBKU1ZhbHVlVG9O
YXRpdmUoJHBhcmFtZXRlciwgImV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIikgLiAiKTtcbiIp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhIHBhcmFtZXRlciBpcyAiYW4g
aW5kZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0IHNob3VsZCB0aHJvdyBhbiBJTkRFWF9TSVpFX0VS
UiBleGNlcHRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBCdXQgdGhpcyBuZWVk
cyB0byBiZSBkb25lIGluIHRoZSBiaW5kaW5ncywgYmVjYXVzZSB0aGUgdHlwZSBpcyB1bnNpZ25l
ZCBhbmQgdGhlIGZhY3QgdGhhdCBpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2Fz
IG5lZ2F0aXZlIHdpbGwgYmUgbG9zdCBieSB0aGUgdGltZSB3ZSdyZSBpbnNpZGUgdGhlIERPTS4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IklzSW5kZXgifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJG5hbWUgPCAwKSB7XG4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBJTkRFWF9TSVpFX0VSUik7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgdHlw
ZSBjb252ZXJzaW9uIHN1Y2NlZWRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigk
YXJnVHlwZSkgYW5kIG5vdCAkaW1wbENsYXNzTmFtZSA9fiAvTGlzdCQvKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghJG5hbWUp
IHtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTtcbiIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiLCAiIGlmICRw
YXJhbUluZGV4OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIk5v
ZGVGaWx0ZXIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5n
IC49ICIkbmFtZS5nZXQoKSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2lmICgkY29k
ZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJGFyZ1R5cGUpIGFuZCBub3QgJGlt
cGxDbGFzc05hbWUgPX4gL0xpc3QkLykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRm
dW5jdGlvblN0cmluZyAuPSAiJG5hbWUtPnByb3BlcnR5UmVmZXJlbmNlKCkiOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZnVu
Y3Rpb25TdHJpbmcgLj0gJG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAkYXJnc0luZGV4Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAk
cGFyYW1JbmRleCsrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmVlZHNV
c2VyR2VzdHVyZUNoZWNrIn0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0
cmluZyAuPSAiLCAiIGlmICRwYXJhbUluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgJGZ1
bmN0aW9uU3RyaW5nIC49ICJTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUo
KSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1JbmRleCsrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siU2NyaXB0Q29udHJvbGxlci5oIn0gPSAxOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBteSAkbnVtUGFyYW1ldGVycyA9IEB7JGZ1
bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKyAgICAgICAgICAgICAgICAgICAgbXkgKCRmdW5jdGlvblN0
cmluZywgJHBhcmFtSW5kZXgpID0gR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2soXEBpbXBsQ29udGVu
dCwgJGZ1bmN0aW9uLCAkZGF0YU5vZGUsICRudW1QYXJhbWV0ZXJzLCAkaW1wbENsYXNzTmFtZSwg
JGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lLCAkc3ZnUHJvcGVydHlUeXBlLCAkc3ZnUHJvcGVy
dHlPckxpc3RQcm9wZXJ0eVR5cGUsICRzdmdMaXN0UHJvcGVydHlUeXBlKTsKICAgICAgICAgICAg
ICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rpb24sICRm
dW5jdGlvblN0cmluZywgJHBhcmFtSW5kZXgsICIgICAgIiwgJHN2Z1Byb3BlcnR5VHlwZSwgJGlt
cGxDbGFzc05hbWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIzOTUs
NiArMjIyMywyMDIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0
aW9uYWxTdHJpbmc7CiB9CiAKK3N1YiBHZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2sKK3sKKyAg
ICBteSAkb3V0cHV0QXJyYXkgPSBzaGlmdDsKKyAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKKyAg
ICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIG15ICRyZXF1aXJlc0FsbEFyZ3VtZW50czsK
KyAgICBteSAkcmVxdWlyZXNBbGxBcmd1bWVudHNEZWZhdWx0ID0gIiI7CisgICAgaWYgKCEkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lEZWZhdWx0T3B0aW9uYWxBcmd1bWVu
dHMifSkgeworICAgICAgICAkcmVxdWlyZXNBbGxBcmd1bWVudHNEZWZhdWx0ID0gIlJhaXNlIjsK
KyAgICB9CisgICAgJHJlcXVpcmVzQWxsQXJndW1lbnRzID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXF1aXJlc0FsbEFyZ3VtZW50cyJ9IHx8ICRyZXF1aXJl
c0FsbEFyZ3VtZW50c0RlZmF1bHQ7CisgICAgaWYgKCRyZXF1aXJlc0FsbEFyZ3VtZW50cykgewor
ICAgICAgICBteSAkbnVtTWFuZGF0b3J5UGFyYW1zID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9
OworICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAocmV2ZXJzZShAeyRmdW5jdGlvbi0+cGFyYW1l
dGVyc30pKSB7CisgICAgICAgICAgICBpZiAoJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
T3B0aW9uYWwifSkgeworICAgICAgICAgICAgICAgICRudW1NYW5kYXRvcnlQYXJhbXMtLTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAoJG51bU1hbmRhdG9yeVBhcmFtcyA+PSAxKQorICAgICAg
ICB7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8ICRudW1NYW5kYXRvcnlQYXJhbXMpXG4iKTsKKyAgICAgICAgICAgIGlmICgk
cmVxdWlyZXNBbGxBcmd1bWVudHMgZXEgIlJhaXNlIikgeworICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgXCJOb3QgZW5vdWdoIGFyZ3VtZW50c1wiKSk7XG4iKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFxuIik7
Cit9CisKK3N1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjaworeworICAgIG15ICRvdXRwdXRBcnJh
eSA9IHNoaWZ0OworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9
IHNoaWZ0OworICAgIG15ICRudW1QYXJhbWV0ZXJzID0gc2hpZnQ7CisgICAgbXkgJGltcGxDbGFz
c05hbWUgPSBzaGlmdDsKKyAgICBteSAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgPSBzaGlm
dDsKKyAgICBteSAkc3ZnUHJvcGVydHlUeXBlID0gc2hpZnQ7CisgICAgbXkgJHN2Z1Byb3BlcnR5
T3JMaXN0UHJvcGVydHlUeXBlID0gc2hpZnQ7CisgICAgbXkgJHN2Z0xpc3RQcm9wZXJ0eVR5cGUg
PSBzaGlmdDsKKworICAgIG15ICRwYXJhbUluZGV4ID0gMDsKKyAgICBteSAkYXJnc0luZGV4ID0g
MDsKKyAgICBteSAkaGFzT3B0aW9uYWxBcmd1bWVudHMgPSAwOworCisgICAgbXkgJGZ1bmN0aW9u
U3RyaW5nID0gKCgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgYW5kICEkc3ZnTGlzdFBy
b3BlcnR5VHlwZSkgPyAicG9kSW1wLiIgOiAiaW1wLT4iKSAuICRmdW5jdGlvbkltcGxlbWVudGF0
aW9uTmFtZSAuICIoIjsKKworICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbUFyZ3VtZW50SGFuZGxpbmcifSkgeworICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gc2NyaXB0QXJndW1lbnRz
KGNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAkbnVtUGFyYW1ldGVycykpO1xuIik7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzaXplX3QgbWF4U3RhY2tTaXplID0gaW1wLT5z
aG91bGRDYXB0dXJlRnVsbFN0YWNrVHJhY2UoKSA/IFNjcmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0
YWNrU2l6ZVRvQ2FwdHVyZSA6IDE7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3Rh
Y2soZXhlYywgbWF4U3RhY2tTaXplKSk7XG4iKTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siU2Ny
aXB0QXJndW1lbnRzLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlNjcmlwdENhbGxT
dGFjay5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRDYWxsU3RhY2tGYWN0
b3J5LmgifSA9IDE7CisgICAgfQorCisgICAgbXkgJGNhbGxXaXRoID0gJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9OworICAgIGlmICgkY2FsbFdp
dGgpIHsKKyAgICAgICAgbXkgJGNhbGxXaXRoQXJnID0gIkNPTVBJTEVfQVNTRVJUKGZhbHNlKSI7
CisgICAgICAgIGlmICgkY2FsbFdpdGggZXEgIkR5bmFtaWNGcmFtZSIpIHsKKyAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBGcmFtZSogZHluYW1pY0ZyYW1lID0gdG9EeW5hbWlj
RnJhbWUoZXhlYyk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBp
ZiAoIWR5bmFtaWNGcmFtZSlcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAg
ICAgICAgICAkY2FsbFdpdGhBcmcgPSAiZHluYW1pY0ZyYW1lIjsKKyAgICAgICAgfSBlbHNpZiAo
JGNhbGxXaXRoIGVxICJTY3JpcHRTdGF0ZSIpIHsKKyAgICAgICAgICAgICRjYWxsV2l0aEFyZyA9
ICJleGVjIjsKKyAgICAgICAgfSBlbHNpZiAoJGNhbGxXaXRoIGVxICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0IikgeworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghc2Ny
aXB0Q29udGV4dClcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAg
ICAkY2FsbFdpdGhBcmcgPSAic2NyaXB0Q29udGV4dCI7IAorICAgICAgICB9CisgICAgICAgICRm
dW5jdGlvblN0cmluZyAuPSAiLCAiIGlmICRwYXJhbUluZGV4OworICAgICAgICAkZnVuY3Rpb25T
dHJpbmcgLj0gJGNhbGxXaXRoQXJnOworICAgICAgICAkcGFyYW1JbmRleCsrOworICAgIH0KKwor
ICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1
ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKKworICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAo
QHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7CisgICAgICAgICMgT3B0aW9uYWwgY2FsbGJhY2tz
IHNob3VsZCBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LCBiZWNhdXNlIHRoZXkgYWx3YXlzIGhhdmUg
YSBkZWZhdWx0IHZhbHVlICgwKSwKKyAgICAgICAgIyBhbmQgd2UgY2FuIHJlZHVjZSB0aGUgbnVt
YmVyIG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zIHRoYXQgdGFrZSBhIGRpZmZlcmVudCBudW1iZXIg
b2YgcGFyYW1ldGVycy4KKyAgICAgICAgIyBPcHRpb25hbCBhcmd1bWVudHMgd2l0aCBbT3B0aW9u
YWw9Q2FsbFdpdGhEZWZhdWx0VmFsdWVdIHNob3VsZCBub3QgZ2VuZXJhdGUgYW4gZWFybHkgY2Fs
bC4KKyAgICAgICAgbXkgJG9wdGlvbmFsID0gJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ik9wdGlvbmFsIn07CisgICAgICAgIGlmICgkb3B0aW9uYWwgJiYgJG9wdGlvbmFsIG5lICJD
YWxsV2l0aERlZmF1bHRWYWx1ZSIgJiYgISRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDYWxsYmFjayJ9KSB7CisgICAgICAgICAgICAjIEdlbmVyYXRlIGVhcmx5IGNhbGwgaWYgdGhl
cmUgYXJlIGVub3VnaCBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgaWYgKCEkaGFzT3B0aW9uYWxB
cmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJcbiAgICBz
aXplX3QgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpO1xuIik7CisgICAgICAgICAg
ICAgICAgJGhhc09wdGlvbmFsQXJndW1lbnRzID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoYXJnc0NvdW50IDw9ICRhcmdzSW5kZXgp
IHtcbiIpOworICAgICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgk
ZnVuY3Rpb24sICRmdW5jdGlvblN0cmluZywgJHBhcmFtSW5kZXgsICIgICAgIiB4IDIsICRzdmdQ
cm9wZXJ0eVR5cGUsICRpbXBsQ2xhc3NOYW1lKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICB9XG5cbiIpOworICAgICAgICB9CisKKyAgICAgICAgbXkgJG5hbWUgPSAkcGFy
YW1ldGVyLT5uYW1lOworICAgICAgICBteSAkYXJnVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJp
cE1vZHVsZSgkcGFyYW1ldGVyLT50eXBlKTsKKworICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIlhQ
YXRoTlNSZXNvbHZlciIpIHsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBS
ZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiBjdXN0b21SZXNvbHZlcjtcbiIpOworICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIgPSB0b1hQ
YXRoTlNSZXNvbHZlcihleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSk7XG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIXJlc29sdmVyKSB7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgY3VzdG9tUmVzb2x2ZXIgPSBKU0N1
c3RvbVhQYXRoTlNSZXNvbHZlcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5k
ZXgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmVzb2x2ZXIgPSBj
dXN0b21SZXNvbHZlci5nZXQoKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIH1cbiIpOworICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ2FsbGJhY2sifSkgeworICAgICAgICAgICAgbXkgJGNhbGxiYWNrQ2xhc3NOYW1l
ID0gR2V0Q2FsbGJhY2tDbGFzc05hbWUoJGFyZ1R5cGUpOworICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siJGNhbGxiYWNrQ2xhc3NOYW1lLmgifSA9IDE7CisgICAgICAgICAgICBpZiAoJHBhcmFt
ZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn0pIHsKKyAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPCRhcmdUeXBlPiAkbmFtZTtcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID4gJGFyZ3NJbmRleCAmJiAhZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNV
bmRlZmluZWRPck51bGwoKSkge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLmlzT2JqZWN0KCkp
IHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7XG4iKTsKKyAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgICAgICRuYW1lID0gJHtjYWxsYmFja0NsYXNzTmFtZX06OmNyZWF0ZShhc09iamVj
dChleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gJGFyZ3NJbmRleCB8fCAhZXhlYy0+
YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNPYmplY3QoKSkge1xuIik7CisgICAgICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9N
SVNNQVRDSF9FUlIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+ICRuYW1lID0gJHtj
YWxsYmFja0NsYXNzTmFtZX06OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgkYXJnc0lu
ZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtcbiIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIyBJZiB0aGUgIlN0cmljdFR5cGVDaGVja2lu
ZyIgZXh0ZW5kZWQgYXR0cmlidXRlIGlzIHByZXNlbnQsIGFuZCB0aGUgYXJndW1lbnQncyB0eXBl
IGlzIGFuCisgICAgICAgICAgICAjIGludGVyZmFjZSB0eXBlLCB0aGVuIGlmIHRoZSBpbmNvbWlu
ZyB2YWx1ZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhhdCBpbnRlcmZhY2UsIGEgVHlwZUVycm9yCisg
ICAgICAgICAgICAjIGlzIHRocm93biByYXRoZXIgdGhhbiBzaWxlbnRseSBwYXNzaW5nIE5VTEwg
dG8gdGhlIEMrKyBjb2RlLgorICAgICAgICAgICAgIyBQZXIgdGhlIFdlYiBJREwgYW5kIEVDTUFT
Y3JpcHQgc2VtYW50aWNzLCBpbmNvbWluZyB2YWx1ZXMgY2FuIGFsd2F5cyBiZSBjb252ZXJ0ZWQg
dG8gYm90aAorICAgICAgICAgICAgIyBzdHJpbmdzIGFuZCBudW1iZXJzLCBzbyBkbyBub3QgdGhy
b3cgVHlwZUVycm9yIGlmIHRoZSBhcmd1bWVudCBpcyBvZiB0aGVzZSB0eXBlcy4KKyAgICAgICAg
ICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlN0cmlj
dFR5cGVDaGVja2luZyJ9KSB7CisgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRp
bWUvRXJyb3IuaD4ifSA9IDE7CisKKyAgICAgICAgICAgICAgICBteSAkYXJnVmFsdWUgPSAiZXhl
Yy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiOworICAgICAgICAgICAgICAgIGlmICghSXNOYXRpdmVU
eXBlKCRhcmdUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+ICRhcmdzSW5kZXggJiYgISR7YXJnVmFs
dWV9LmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgISR7YXJnVmFsdWV9LmluaGVyaXRzKCZKUyR7YXJn
VHlwZX06OnNfaW5mbykpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTtcbiIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIpIC4gIiAk
bmFtZSgiIC4gSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJleGVjLT5hcmd1bWVudCgkYXJn
c0luZGV4KSIpIC4gIik7XG4iKTsKKworICAgICAgICAgICAgIyBJZiBhIHBhcmFtZXRlciBpcyAi
YW4gaW5kZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0IHNob3VsZCB0aHJvdyBhbiBJTkRFWF9TSVpF
X0VSUiBleGNlcHRpb24uCisgICAgICAgICAgICAjIEJ1dCB0aGlzIG5lZWRzIHRvIGJlIGRvbmUg
aW4gdGhlIGJpbmRpbmdzLCBiZWNhdXNlIHRoZSB0eXBlIGlzIHVuc2lnbmVkIGFuZCB0aGUgZmFj
dCB0aGF0IGl0CisgICAgICAgICAgICAjIHdhcyBuZWdhdGl2ZSB3aWxsIGJlIGxvc3QgYnkgdGhl
IHRpbWUgd2UncmUgaW5zaWRlIHRoZSBET00uCisgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzSW5kZXgifSkgeworICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBpZiAoJG5hbWUgPCAwKSB7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJTkRF
WF9TSVpFX0VSUik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlIHR5cGUgY29udmVyc2lvbiBzdWNjZWVkZWQu
CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKVxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKworICAgICAgICAgICAg
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigkYXJnVHlwZSkgYW5k
IG5vdCAkaW1wbENsYXNzTmFtZSA9fiAvTGlzdCQvKSB7CisgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGlmICghJG5hbWUpIHtcbiIpOworICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlT
TUFUQ0hfRVJSKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiLCAiIGlmICRwYXJhbUlu
ZGV4OworCisgICAgICAgIGlmICgkYXJnVHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKKyAgICAgICAg
ICAgICRmdW5jdGlvblN0cmluZyAuPSAiJG5hbWUuZ2V0KCkiOworICAgICAgICB9IGVsc2lmICgk
Y29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJGFyZ1R5cGUpIGFuZCBub3Qg
JGltcGxDbGFzc05hbWUgPX4gL0xpc3QkLykgeworICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5n
IC49ICIkbmFtZS0+cHJvcGVydHlSZWZlcmVuY2UoKSI7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gJG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgJGFy
Z3NJbmRleCsrOworICAgICAgICAkcGFyYW1JbmRleCsrOworICAgIH0KKworICAgIGlmICgkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5lZWRzVXNlckdlc3R1cmVD
aGVjayJ9KSB7CisgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiLCAiIGlmICRwYXJhbUluZGV4
OworICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIlNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3Np
bmdVc2VyR2VzdHVyZSgpIjsKKyAgICAgICAgJHBhcmFtSW5kZXgrKzsKKyAgICAgICAgJGltcGxJ
bmNsdWRlc3siU2NyaXB0Q29udHJvbGxlci5oIn0gPSAxOworICAgIH0KKworICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBcbiIpOworICAgIHJldHVybiAoJGZ1bmN0aW9uU3RyaW5nLCAkcGFy
YW1JbmRleCk7Cit9CisKIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCiB7CiAgICAgbXkgJG9i
amVjdCA9IHNoaWZ0OwpAQCAtMzE4Nyw5ICszMjExLDYgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0
b3JEZWZpbml0aW9uCiAgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CiAKICAgICBteSAkY29uc3Ry
dWN0b3JDbGFzc05hbWUgPSAiJHtjbGFzc05hbWV9Q29uc3RydWN0b3IiOwotICAgIG15ICRjYW5D
b25zdHJ1Y3QgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYW5CZUNvbnN0cnVj
dGVkIn07Ci0gICAgbXkgJGN1c3RvbUNvbnN0cnVjdG9yID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSlNDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn07Ci0gICAgbXkgJGNhbGxXaXRoID0gJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKICAgICBteSAkbnVtYmVy
T2Zjb25zdHJ1Y3RQYXJhbWV0ZXJzID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q29uc3RydWN0b3JQYXJhbWV0ZXJzIn07CiAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJjb25z
dCBDbGFzc0luZm8gJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OnNfaW5mbyA9IHsgXCIke3Zpc2li
bGVDbGFzc05hbWV9Q29uc3RydWN0b3JcIiwgJkRPTUNvbnN0cnVjdG9yT2JqZWN0OjpzX2luZm8s
ICYke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKCRj
b25zdHJ1Y3RvckNsYXNzTmFtZSkgfTtcblxuIik7CkBAIC0zMjIxLDE4ICszMjQyLDY3IEBAIHN1
YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbgogICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPCR7Y29uc3RydWN0b3JDbGFzc05h
bWV9LCBKU0RPTVdyYXBwZXI+KGV4ZWMsICYke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfVRhYmxlLCB0
aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAifVxuXG4iKTsKIAotICAgIGlmICgkY2FuQ29uc3RydWN0KSB7Ci0gICAgICAgIGlmICgh
JGN1c3RvbUNvbnN0cnVjdG9yKSB7CisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNhbkJlQ29uc3RydWN0ZWQifSkgeworICAgICAgICBpZiAoISgkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkpIHsKICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25z
dHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdCR7Y2xhc3NOYW1lfShFeGVjU3RhdGUqIGV4ZWMp
XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAg
ICAgbXkgJGNvbnN0cnVjdG9yQXJnID0gIiI7Ci0gICAgICAgICAgICBpZiAoJGNhbGxXaXRoIGFu
ZCAkY2FsbFdpdGggZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiKSB7Ci0gICAgICAgICAgICAg
ICAgJGNvbnN0cnVjdG9yQXJnID0gImNvbnRleHQiOwotICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihleGVjLT5jYWxsZWUoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBpZiAoIWNvbnRleHQpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNl
RXJyb3IoZXhlYywgXCJSZWZlcmVuY2UgZXJyb3JcIikpO1xuIik7CisKKyAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSoganNDb25zdHJ1
Y3RvciA9IHN0YXRpY19jYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oZXhlYy0+Y2FsbGVl
KCkpO1xuIik7CisKKyAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAgICAgICAgICAgbXkgJGZ1bmN0aW9uID0gJGRh
dGFOb2RlLT5jb25zdHJ1Y3RvcjsKKyAgICAgICAgICAgICAgICBteSBAY29uc3RydWN0b3JBcmdM
aXN0OworCisgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvRXJyb3IuaD4i
fSA9IDE7CisKKyAgICAgICAgICAgICAgICBHZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2soJG91
dHB1dEFycmF5LCAkZnVuY3Rpb24sICRkYXRhTm9kZSk7CisKKyAgICAgICAgICAgICAgICBpZiAo
QHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNvbnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uIn0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgJGltcGxJbmNsdWRlc3siRXhjZXB0aW9uQ29kZS5oIn0gPSAxOworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4i
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIEZvciBub3csIHdlIGRv
IG5vdCBzdXBwb3J0IFNWRyBjb25zdHJ1Y3RvcnMuCisgICAgICAgICAgICAgICAgIyBXZSBkbyBu
b3QgYWxzbyBzdXBwb3J0IGEgY29uc3RydWN0b3IgW09waXRpb25hbF0gYXJndW1lbnQgd2l0aG91
dCBDYWxsV2l0aERlZmF1bHRWYWx1ZS4KKyAgICAgICAgICAgICAgICBteSAkbnVtUGFyYW1ldGVy
cyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKyAgICAgICAgICAgICAgICBteSAoJGR1bW15
LCAkcGFyYW1JbmRleCkgPSBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjaygkb3V0cHV0QXJyYXksICRm
dW5jdGlvbiwgJGRhdGFOb2RlLCAkbnVtUGFyYW1ldGVycywgJGludGVyZmFjZU5hbWUsICJjb25z
dHJ1Y3RvckNhbGxiYWNrIiwgdW5kZWYsIHVuZGVmLCB1bmRlZik7CisKKyAgICAgICAgICAgICAg
ICBteSAkaW5kZXggPSAwOworICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAo
QHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3QgaWYg
JGluZGV4IGVxICRwYXJhbUluZGV4OworICAgICAgICAgICAgICAgICAgICBwdXNoKEBjb25zdHJ1
Y3RvckFyZ0xpc3QsICRwYXJhbWV0ZXItPm5hbWUpOworICAgICAgICAgICAgICAgICAgICAkaW5k
ZXgrKzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSAmJiAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9IGVxICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Iikgewor
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBjb25zdHJ1Y3RvckFyZ0xpc3QsICJjb250ZXh0Iik7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0ID0ganNDb25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBpZiAoIWNvbnRleHQpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVy
cm9yKGV4ZWMsIFwiJHtpbnRlcmZhY2VOYW1lfSBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3Vt
ZW50IGlzIHVuYXZhaWxhYmxlXCIpKTtcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JS
YWlzZXNFeGNlcHRpb24ifSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBjb25zdHJ1Y3Rv
ckFyZ0xpc3QsICJlYyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBteSAk
Y29uc3RydWN0b3JBcmcgPSBqb2luKCIsICIsIEBjb25zdHJ1Y3RvckFyZ0xpc3QpOworICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8JHtpbnRlcmZhY2VOYW1l
fT4gb2JqZWN0ID0gJHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKCR7Y29uc3RydWN0b3JBcmd9KTtc
biIpOworICAgICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDb25zdHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbiJ9KSB7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoZWMpIHtcbiIpOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9yQXJnID0g
IiI7CisgICAgICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkNhbGxXaXRoIn0gYW5kICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRo
In0gZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiKSB7CisgICAgICAgICAgICAgICAgICAgICRj
b25zdHJ1Y3RvckFyZyA9ICJjb250ZXh0IjsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNf
Y2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KGV4ZWMtPmNhbGxlZSgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBpZiAoIWNvbnRleHQpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJl
ZmVyZW5jZUVycm9yKGV4ZWMsIFwiJHtpbnRlcmZhY2VOYW1lfSBjb25zdHJ1Y3RvciBhc3NvY2lh
dGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlXCIpKTtcbiIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPCR7aW50ZXJm
YWNlTmFtZX0+IG9iamVjdCA9ICR7aW50ZXJmYWNlTmFtZX06OmNyZWF0ZSgke2NvbnN0cnVjdG9y
QXJnfSk7XG4iKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywgc3RhdGlj
X2Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9i
amVjdCgpLCAke2ludGVyZmFjZU5hbWV9OjpjcmVhdGUoJHtjb25zdHJ1Y3RvckFyZ30pKSkpO1xu
Iik7CisKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0
KCksIG9iamVjdC5nZXQoKSkpKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAifVxuXG4iKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCmluZGV4IGJiZTYw
NmJkYzBiMDkzMDYwNmQ1M2RlOTc5YTUzNTRhZjg1NGYwMWMuLjRiOWU2ZGY4MjcwNjA2NDA5Njdm
Yzc0NGUyZGIyOTE5OThlZmFiMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCkBAIC0yNCw3ICsy
NCwxMCBAQAogCiAjaW5jbHVkZSAiSlNUZXN0SW50ZXJmYWNlLmgiCiAKKyNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVGVzdElu
dGVyZmFjZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC03MiwzNCArNzUsNiBAQCBzdGF0aWMg
Y29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZVZhbHVl
c1tdID0KIAogI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgogc3RhdGljIEpTQ19DT05TVF9IQVNIVEFC
TEUgSGFzaFRhYmxlIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yVGFibGUgPSB7IDEsIDAsIEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKLWNsYXNzIEpTVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZh
dGU6Ci0gICAgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1
Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvciog
Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMgY29uc3QgSlND
OjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJ
bXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxh
Z3M7Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKU1Rlc3RJbnRlcmZhY2UoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICB2aXJ0dWFsIEpTQzo6Q29u
c3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhVmlydHVhbChKU0M6OkNvbnN0cnVjdERhdGEmKTsK
LSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0Nl
bGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLX07Ci0KIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
IiwgJkRPTUNvbnN0cnVjdG9yT2JqZWN0OjpzX2luZm8sICZKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3RvclRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yKSB9OwogCiBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6SlNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCkBAIC0xMjYsMTAgKzEwMSwzMCBAQCBib29sIEpTVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdAogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpj
b25zdHJ1Y3RKU1Rlc3RJbnRlcmZhY2UoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxKU1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
IEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8
SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKKyAgICAK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFz
Y3JpcHRDb250ZXh0KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIGNvbnN0IFN0cmluZyYgc3RyMSh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgY29uc3Qg
U3RyaW5nJiBzdHIyKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhl
eGVjKSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0ID0ganNDb25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAiUmVmZXJlbmNlIGVycm9yIikpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBzdGF0aWNfY2FzdDxKU1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCksIFRl
c3RJbnRlcmZhY2U6OmNyZWF0ZShjb250ZXh0KSkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAiVGVzdEludGVyZmFjZSBjb25z
dHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIikpOworICAgIFJlZlB0
cjxUZXN0SW50ZXJmYWNlPiBvYmplY3QgPSBUZXN0SW50ZXJmYWNlOjpjcmVhdGUoc3RyMSwgc3Ry
MiwgY29udGV4dCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0Nv
bnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCiBDb25zdHJ1
Y3RUeXBlIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhVmlydHVh
bChDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCmluZGV4IDVi
ZmQ4OWYyMjNhNzVmODU5ZTdmMzNjZGIyODE4OTVhMGM3NzkwMmQuLmZhZmMxNmYxN2I4ZmRlNmFi
OGU4MzQzMTM0Yzk3MjM1MWFlYmY4OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgKQEAgLTg4LDYgKzg4
LDM0IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKK2NsYXNzIEpTVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAg
SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVj
dCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciogY3JlYXRlKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3IqIHB0ciA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZXhlYywg
Z2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwg
SlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0lu
Zm8gc19pbmZvOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAg
c3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RJ
bnRlcmZhY2UoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlw
ZSBnZXRDb25zdHJ1Y3REYXRhVmlydHVhbChKU0M6OkNvbnN0cnVjdERhdGEmKTsKKyAgICBzdGF0
aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6
OkNvbnN0cnVjdERhdGEmKTsKK307CisKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBj
b25zdCBKU0M6OklkZW50aWZpZXImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmNwcAppbmRleCAzYmY0Mzg5ZDIyYjYwODAwNTFkZWJiNDMyNjdkMGQ1MDU2MmJl
M2I4Li5kMzU5Njk3NGI2NmJlNDk3YzFjMDMzODcyNjRjNzhhZWRmZjA4YmJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC03MywzMSArNzMsNiBA
QCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ckNvbnN0cnVjdG9yVGFibGVWYWx1ZXNbXQogCiAjdW5kZWYgVEhVTktfR0VORVJBVE9SCiBzdGF0
aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNvbnN0cnVjdG9yVGFibGUgPSB7IDEsIDAsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07Ci1jbGFzcyBKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJp
dmF0ZToKLSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlw
ZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rv
ciogcHRyID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyQ29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZp
bmlzaENyZWF0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGlj
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0
cnVjdHVyZUZsYWdzOwotfTsKLQogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJDb25zdHJ1Y3RvciIsICZET01Db25zdHJ1Y3Rvck9iamVjdDo6c19pbmZvLCAmSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKSB9OwogCiBKU1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKQEAgLTIwOSwxMCArMTg0LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kCiAgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY2FzdGVkVGhpcyA9IHN0YXRp
Y19jYXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihhc09iamVjdCh0aGlzVmFsdWUp
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyOjpzX2luZm8pOwogICAgIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7CisgICAgCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+
IGxpc3RlbmVyKE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0ZShTY3JpcHRWYWx1ZShleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3VtZW50KDApKSkpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLQorICAgIAogICAgIGltcC0+bWV0aG9kKGxpc3RlbmVyKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmgKaW5kZXggNmMxNDJlOWQ5ZmE2ZGYxNGU5OWNlZjc0MTMyNzgxZTJjOTY5
NDIxNi4uNTcwNDRmYjM4OTBhNGMxMGEwZTY1YTUzNTZhOWM2ZWQ1ZmVmMjYxMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCkBAIC04OCw2ICs4OCwzMSBAQCBw
cm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07
CiAKK2NsYXNzIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJh
c2U7CisgICAgc3RhdGljIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvciog
Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAo
KSkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZv
OworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgfQor
cHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFu
Y2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Cit9OworCiAvLyBGdW5j
dGlvbnMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcAppbmRleCBjMDI0YTQ1MWQ3OTAzMmZlYTU4ZjRiYTliMjg0OWZiZTUxMDYyNjhjLi5l
YmZkYTM3NzE2YTg3Njk0MGQ5ZTE4M2RjZDhhYzYzM2NkYzJlYzNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAt
MTc1LDMxICsxNzUsNiBAQCBDT01QSUxFX0FTU0VSVCgweDAxID09IFRlc3RPYmo6OkNPTlNUX1ZB
TFVFXzEyLCBUZXN0T2JqRW51bUNPTlNUX1ZBTFVFXzEySXNXcm9uZwogQ09NUElMRV9BU1NFUlQo
MFgyMCA9PSBUZXN0T2JqOjpDT05TVF9WQUxVRV8xMywgVGVzdE9iakVudW1DT05TVF9WQUxVRV8x
M0lzV3JvbmdVc2VEb250Q2hlY2tFbnVtcyk7CiBDT01QSUxFX0FTU0VSVCgweDFhYmMgPT0gVGVz
dE9iajo6Q09OU1RfVkFMVUVfMTQsIFRlc3RPYmpFbnVtQ09OU1RfVkFMVUVfMTRJc1dyb25nVXNl
RG9udENoZWNrRW51bXMpOwogCi1jbGFzcyBKU1Rlc3RPYmpDb25zdHJ1Y3RvciA6IHB1YmxpYyBE
T01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE9iakNvbnN0cnVjdG9y
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgot
ICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0
T2JqQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0g
ICAgICAgIEpTVGVzdE9iakNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdE9iakNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgSlNUZXN0T2JqQ29uc3RydWN0
b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIGNvbnN0IEpTQzo6
Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1w
bGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdz
OwotfTsKLQogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpzX2luZm8gPSB7
ICJUZXN0T2JqQ29uc3RydWN0b3IiLCAmRE9NQ29uc3RydWN0b3JPYmplY3Q6OnNfaW5mbywgJkpT
VGVzdE9iakNvbnN0cnVjdG9yVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T2Jq
Q29uc3RydWN0b3IpIH07CiAKIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpKU1Rlc3RPYmpDb25zdHJ1
Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKQEAgLTEwNTcsNyArMTAzMiw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKEV4ZWNTdGF0ZSogZXhlCiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhp
c1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNU
ZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotCisgICAgCisgICAgCiAgICAgaW1wLT52b2lkTWV0aG9k
KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTEw
NzAsNiArMTA0Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MoRXhlY1N0CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpz
X2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOworICAgIAogICAgIGludCBpbnRBcmcoZXhlYy0+YXJndW1lbnQoMCkudG9J
bnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTA3OSw3ICsxMDU2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZv
aWRNZXRob2RXaXRoQXJncyhFeGVjU3QKICAgICBUZXN0T2JqKiBvYmpBcmcodG9UZXN0T2JqKGV4
ZWMtPmFyZ3VtZW50KDIpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCisgICAgCiAgICAgaW1w
LT52b2lkTWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIG9iakFyZyk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTEwOTIsNyArMTA2OSw4IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25J
bnRNZXRob2QoRXhlY1N0YXRlKiBleGVjCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRl
c3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwot
CisgICAgCisgICAgCiAKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5p
bnRNZXRob2QoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtMTEw
Niw2ICsxMDg0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkludE1ldGhvZFdpdGhBcmdzKEV4ZWNTdGEKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNf
aW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRo
aXMtPmltcGwoKSk7CisgICAgCiAgICAgaW50IGludEFyZyhleGVjLT5hcmd1bWVudCgwKS50b0lu
dDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xMTE1LDcgKzEwOTQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW50
TWV0aG9kV2l0aEFyZ3MoRXhlY1N0YQogICAgIFRlc3RPYmoqIG9iakFyZyh0b1Rlc3RPYmooZXhl
Yy0+YXJndW1lbnQoMikpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KKyAgICAKIAogICAgIEpT
Qzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmludE1ldGhvZFdpdGhBcmdzKGludEFy
Zywgc3RyQXJnLCBvYmpBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CkBAIC0xMTI5LDcgKzExMDgsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNW
YWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVz
dE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKLQorICAgIAorICAgIAogCiAgICAgSlNDOjpKU1ZhbHVlIHJl
c3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRy
KGltcC0+b2JqTWV0aG9kKCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CkBAIC0xMTQzLDYgKzExMjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YQogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNW
YWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVz
dE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICAKICAgICBpbnQgaW50QXJnKGV4ZWMtPmFyZ3VtZW50
KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTExNTIsNyArMTEz
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PYmpNZXRob2RXaXRoQXJncyhFeGVjU3RhCiAgICAgVGVzdE9iaiogb2JqQXJnKHRvVGVz
dE9iaihleGVjLT5hcmd1bWVudCgyKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQorICAgIAog
CiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcC0+b2JqTWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJB
cmcsIG9iakFyZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC0x
MTY4LDEzICsxMTQ5LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzCiAgICAgVGVzdE9iaiog
aW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgCiAgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcodXN0cmlu
Z1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIFRlc3RPYmoqIG9iakFyZyh0b1Rlc3RPYmooZXhlYy0+YXJndW1lbnQo
MSkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KKyAgICAKIAogICAgIEpTQzo6SlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0
cihpbXAtPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3Moc3RyQXJnLCBvYmpBcmcpKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtMTE5MCw2ICsxMTcyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFRoYXRSZXF1aXJlc0FsbEFyZ3MKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0
T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMikKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOworICAgIAogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnKHVzdHJpbmdUb1N0cmluZyhleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKQEAgLTExOTcsNyArMTE4MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzCiAgICAgVGVz
dE9iaiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgxKSkpOwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLQorICAgIAogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcC0+bWV0aG9kVGhhdFJl
cXVpcmVzQWxsQXJnc0FuZFRocm93cyhzdHJBcmcsIG9iakFyZywgZWMpKSk7CiAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKQEAgLTEyMTIsMTAgKzExOTUsMTEgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1
ZShFeGVjU3RhdGUKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0g
c3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgCiAgICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZEFyZyhTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLQorICAgIAogICAgIGltcC0+c2VyaWFsaXplZFZhbHVlKHNlcmlhbGl6ZWRBcmcpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xMjI4LDEw
ICsxMjEyLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25JZGJLZXkoRXhlY1N0YXRlKiBleGVjKQogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZv
KTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKKyAgICAKICAgICBSZWZQdHI8SURCS2V5PiBrZXkoY3JlYXRlSURCS2V5RnJvbVZh
bHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCisg
ICAgCiAgICAgaW1wLT5pZGJLZXkoa2V5KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQpAQCAtMTI0NCw2ICsxMjI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9wdGlvbnNPYmplY3QoRXhlY1N0
YXRlKgogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+
KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Fz
dGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICAKICAgICBPcHRpb25zT2Jq
ZWN0KiBvbyh0b09wdGlvbnNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC0xMjU3LDcgKzEyNDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3B0aW9uc09iamVjdChFeGVjU3RhdGUqCiAg
ICAgT3B0aW9uc09iamVjdCogb29vKHRvT3B0aW9uc09iamVjdChleGVjLT5hcmd1bWVudCgxKSkp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQorICAgIAogICAgIGltcC0+b3B0aW9uc09iamVjdChv
bywgb29vKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpA
QCAtMTI3MCw4ICsxMjU2LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oRXhlY1MKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RP
Ymo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7CisgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0KKyAg
ICAKICAgICBpbXAtPm1ldGhvZFdpdGhFeGNlcHRpb24oZWMpOwogICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
QEAgLTEzMDUsNiArMTI5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21BcmdzQW5kRXhjZXB0aW9uKEV4CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1Zh
bHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0
T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihj
YXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+IHNjcmlwdEFyZ3VtZW50cyhjcmVhdGVTY3JpcHRBcmd1
bWVudHMoZXhlYywgMSkpOwogICAgIHNpemVfdCBtYXhTdGFja1NpemUgPSBpbXAtPnNob3VsZENh
cHR1cmVGdWxsU3RhY2tUcmFjZSgpID8gU2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXpl
VG9DYXB0dXJlIDogMTsKQEAgLTEzMTIsNyArMTMwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21BcmdzQW5kRXhjZXB0aW9u
KEV4CiAgICAgbG9nKiBpbnRBcmcodG9sb2coZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0KKyAgICAKICAgICBpbXAtPmN1c3RvbUFyZ3NBbmRFeGNlcHRpb24oaW50
QXJnLCBzY3JpcHRBcmd1bWVudHMsIGNhbGxTdGFjaywgZWMpOwogICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
QEAgLTEzMjYsNiArMTMxNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1Zh
bHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0
T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihj
YXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBleGVjLT5h
cmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xMzQxLDYgKzEzMzAsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVt
b3ZlRXZlbnRMaXN0ZW5lcihFeGVjUwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRp
Y19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0
T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAg
ICAKICAgICBKU1ZhbHVlIGxpc3RlbmVyID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFs
aXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpAQCAtMTM1NiwxMCArMTM0NiwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFtZShFeGVjU3Rh
dAogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFz
T2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2Fz
dDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICAKICAgICBGcmFtZSogZHluYW1p
Y0ZyYW1lID0gdG9EeW5hbWljRnJhbWUoZXhlYyk7CiAgICAgaWYgKCFkeW5hbWljRnJhbWUpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KKyAgICAKICAg
ICBpbXAtPndpdGhEeW5hbWljRnJhbWUoZHluYW1pY0ZyYW1lKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTM3MiwxMyArMTM2MywxNCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5
bmFtaWNGcmFtZUFuZEFyZyhFeAogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19j
YXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2Jq
KiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICAK
ICAgICBGcmFtZSogZHluYW1pY0ZyYW1lID0gdG9EeW5hbWljRnJhbWUoZXhlYyk7CiAgICAgaWYg
KCFkeW5hbWljRnJhbWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaW50IGludEFyZyhleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KKyAgICAKICAgICBpbXAtPndpdGhEeW5hbWljRnJhbWVB
bmRBcmcoZHluYW1pY0ZyYW1lLCBpbnRBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CkBAIC0xMzkxLDYgKzEzODMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFu
ZE9wdGlvbgogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9i
aio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0
aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICAKICAgICBGcmFtZSog
ZHluYW1pY0ZyYW1lID0gdG9EeW5hbWljRnJhbWUoZXhlYyk7CiAgICAgaWYgKCFkeW5hbWljRnJh
bWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0x
NDA3LDcgKzE0MDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbgogICAgIGludCBvcHRpb25h
bEFyZyhleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0KKyAgICAKICAgICBpbXAtPndpdGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZyhkeW5h
bWljRnJhbWUsIGludEFyZywgb3B0aW9uYWxBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNDIwLDEzICsxNDEzLDE0IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0Zy
YW1lQW5kVXNlckdlCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNU
ZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAgIEZy
YW1lKiBkeW5hbWljRnJhbWUgPSB0b0R5bmFtaWNGcmFtZShleGVjKTsKICAgICBpZiAoIWR5bmFt
aWNGcmFtZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbnQgaW50QXJnKGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLQorICAgIAogICAgIGltcC0+d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJH
ZXN0dXJlKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5n
VXNlckdlc3R1cmUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KQEAgLTE0MzksNiArMTQzMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlCiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qo
dGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAm
SlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAgIEZyYW1lKiBkeW5hbWljRnJhbWUg
PSB0b0R5bmFtaWNGcmFtZShleGVjKTsKICAgICBpZiAoIWR5bmFtaWNGcmFtZSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTE0NTUsNyArMTQ1MCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlCiAgICAgaW50IG9wdGlvbmFsQXJnKGV4ZWMtPmFy
Z3VtZW50KDEpLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQorICAgIAog
ICAgIGltcC0+d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlQVNBRChkeW5hbWljRnJhbWUs
IGludEFyZywgb3B0aW9uYWxBcmcsIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpA
QCAtMTQ2OCw3ICsxNDYzLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWQoRXhlY1MKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RP
Ymo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7Ci0KKyAgICAKKyAgICAKICAgICBpbXAtPndpdGhTY3JpcHRTdGF0
ZVZvaWQoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KQEAgLTE0ODEsNyArMTQ3Nyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmooRXhlY1N0CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhp
c1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNU
ZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotCisgICAgCisgICAgCiAKICAgICBKU0M6OkpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQ
dHIoaW1wLT53aXRoU2NyaXB0U3RhdGVPYmooZXhlYykpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCkBAIC0xNDk3LDggKzE0OTQsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdAog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICAKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLQorICAgIAogICAgIGltcC0+d2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbihleGVj
LCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTUxMiw4ICsxNTEwLDkgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRT
dGF0ZU9iakV4Y2VwdGkKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxK
U1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1w
ID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgCiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0KKyAgICAKIAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQg
PSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAt
PndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihleGVjLCBlYykpKTsKICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOwpAQCAtMTUzMCwxMCArMTUyOSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleAogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9i
aio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0
aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICAKICAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCisgICAgCiAgICAgaW1wLT53aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dChzY3JpcHRDb250ZXh0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQpAQCAtMTU0Niw2ICsxNTQ2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFy
ZyhFeGUKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoq
Pihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGlj
X2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgCiAKICAgICBzaXplX3Qg
YXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIGlmIChhcmdzQ291bnQgPD0g
MCkgewpAQCAtMTU1Niw3ICsxNTU3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyhFeGUKICAgICBp
bnQgb3B0KGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLQorICAgIAogICAgIGltcC0+bWV0aG9kV2l0aE9wdGlvbmFsQXJnKG9wdCk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTE1NjksNiArMTU3
MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwog
ICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBs
KCkpOworICAgIAogICAgIGludCBub25PcHQoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVj
KSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTU4Miw3ICsxNTg0LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
b25PcHRpb25hbEFyZ0EKICAgICBpbnQgb3B0KGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhl
YykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQorICAgIAogICAgIGltcC0+bWV0aG9kV2l0aE5v
bk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0LCBvcHQpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNTk1LDYgKzE1OTcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE5vbk9wdGlvbmFsQXJnQQogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19j
YXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2Jq
KiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICAK
ICAgICBpbnQgbm9uT3B0KGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKQEAgLTE2MTEsNyArMTYxNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxB
cmdBCiAgICAgaW50IG9wdDIoZXhlYy0+YXJndW1lbnQoMikudG9JbnQzMihleGVjKSk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotCisgICAgCiAgICAgaW1wLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxB
cmdBbmRUd29PcHRpb25hbEFyZ3Mobm9uT3B0LCBvcHQxLCBvcHQyKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTYyNCwxMiArMTYyNywxMyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aENhbGxiYWNrQXJnKEV4ZQogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRp
Y19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0
T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAg
ICAKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDAgfHwgIWV4ZWMtPmFyZ3VtZW50
KDApLmlzT2JqZWN0KCkpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlT
TUFUQ0hfRVJSKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICB9CiAgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxs
YmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCkpOwotCisgICAgCiAgICAgaW1wLT5tZXRob2RXaXRoQ2FsbGJhY2tBcmcoY2Fs
bGJhY2spOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBA
IC0xNjQyLDYgKzE2NDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQQogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1
ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9i
ajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2Fz
dGVkVGhpcy0+aW1wbCgpKTsKKyAgICAKICAgICBpbnQgbm9uQ2FsbGJhY2soZXhlYy0+YXJndW1l
bnQoMCkudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTY1MCw3ICsx
NjU1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0EKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4g
Y2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50
KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwotCisgICAgCiAgICAgaW1wLT5tZXRo
b2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyhub25DYWxsYmFjaywgY2FsbGJhY2sp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNjYz
LDYgKzE2NjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aQogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19p
bmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKKyAgICAKICAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjazsKICAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMCAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaXNV
bmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2Jq
ZWN0KCkpIHsKQEAgLTE2NzEsNyArMTY3Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpCiAg
ICAgICAgIH0KICAgICAgICAgY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2Jq
ZWN0KGV4ZWMtPmFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwogICAg
IH0KLQorICAgIAogICAgIGltcC0+bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcoY2Fs
bGJhY2spOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBA
IC0xNjg1LDcgKzE2OTEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QxKEV4ZWNTdAogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1
ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9i
ajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2Fz
dGVkVGhpcy0+aW1wbCgpKTsKLQorICAgIAorICAgIAogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nKGV4ZWMsIGltcC0+Y29uZGl0aW9uYWxNZXRob2QxKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTE3MDIsNyArMTcwOSw4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25h
bE1ldGhvZDIoRXhlY1N0CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGlt
cCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotCisgICAgCisg
ICAgCiAgICAgaW1wLT5jb25kaXRpb25hbE1ldGhvZDIoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTcxOCw3ICsxNzI2LDggQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFs
TWV0aG9kMyhFeGVjU3QKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxK
U1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1w
ID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0KKyAgICAKKyAg
ICAKICAgICBpbXAtPmNvbmRpdGlvbmFsTWV0aG9kMygpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNzMzLDEzICsxNzQyLDE0IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDEoCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGlt
cCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAg
IFRlc3RPYmoqIG9iakFyZyh0b1Rlc3RPYmooZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcodXN0cmluZ1RvU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
CisgICAgCiAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZywgc3RyQXJnKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTc1Miw2ICsxNzYy
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMigKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAg
ICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7CisgICAgCiAgICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgw
KSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTE3NjUsNyArMTc3Niw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDIoCiAgICAgaW50IGludEFyZyhleGVjLT5hcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KKyAgICAKICAgICBpbXAtPm92ZXJsb2Fk
ZWRNZXRob2Qob2JqQXJnLCBpbnRBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CkBAIC0xNzc4LDEwICsxNzg5LDExIEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDMoCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2Jq
Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhj
YXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRp
Y19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAgIGNvbnN0IFN0
cmluZyYgc3RyQXJnKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQorICAgIAogICAgIGltcC0+b3ZlcmxvYWRl
ZE1ldGhvZChzdHJBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CkBAIC0xNzk0LDEwICsxODA2LDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQoCiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmpl
Y3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRl
c3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAgIGludCBpbnRBcmcoZXhlYy0+
YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCisgICAg
CiAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKGludEFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTE4MTAsMTIgKzE4MjMsMTMgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kNSgKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiog
aW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgCiAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAwIHx8ICFleGVjLT5hcmd1bWVudCgwKS5p
c09iamVjdCgpKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENI
X0VSUik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6
OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpKTsKLQorICAgIAogICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhvZChjYWxsYmFjayk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTE4NDYsNyAr
MTg2MCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25DbGFzc01ldGhvZChFeGVjU3RhdGUqIGV4CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8p
OwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOwotCisgICAgCisgICAgCiAgICAgaW1wLT5jbGFzc01ldGhvZCgpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xODU5LDYgKzE4NzQsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoRQogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0
YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBU
ZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsK
KyAgICAKIAogICAgIHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAg
ICAgaWYgKGFyZ3NDb3VudCA8PSAwKSB7CkBAIC0xODcwLDcgKzE4ODYsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RX
aXRoT3B0aW9uYWwoRQogICAgIGludCBhcmcoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVj
KSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCisgICAgCiAKICAgICBKU0M6OkpTVmFsdWUgcmVz
dWx0ID0ganNOdW1iZXIoaW1wLT5jbGFzc01ldGhvZFdpdGhPcHRpb25hbChhcmcpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKaW5kZXggYzNkMWIyNGNiYjE3MWE2
NGYyNjkyM2Y4N2ZhZWI1NzFhZDVjOGQzMy4uYTdmMTAyY2ZjN2JhYmIyNjg5ZDkxNDFhM2RkNTlk
NTMzNTNmMTgxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouaApAQCAtMTAyLDYgKzEwMiwzMSBAQCBwcm90ZWN0ZWQ6CiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsKIH07CiAKK2NsYXNzIEpTVGVzdE9iakNvbnN0cnVjdG9yIDogcHVibGljIERP
TUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0T2JqQ29uc3RydWN0b3Io
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RP
YmpDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgSlNUZXN0T2JqQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0T2JqQ29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBKU1Rlc3RPYmpDb25zdHJ1Y3Rv
cihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
ZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJiwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgY29uc3QgSlNDOjpD
bGFzc0luZm8gc19pbmZvOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBs
ZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7
Cit9OworCiAvLyBGdW5jdGlvbnMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcAppbmRleCAyYWQ2MTBiYjZiNzQxYzAxYjg4MzlmZDJiODY1NDVjZWZkMWRiZjY2Li45ZWVj
MzE4ODdlMzRlMzhhZmZhODM0MDY0MzZiMzYzMDNmNGU3NWNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtNzQsMzEg
Kzc0LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yVGFibGUKIAogI3VuZGVmIFRIVU5LX0dFTkVSQVRP
Ugogc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yVGFibGUgPSB7IDEsIDAsIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKLWNs
YXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yIDogcHVi
bGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
ck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsK
LSAgICAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3Iq
IHB0ciA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0g
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
cmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1
Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Ci19OwotCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciIsICZET01Db25zdHJ1
Y3Rvck9iamVjdDo6c19pbmZvLCAmSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcikgfTsKIAogSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5oCmluZGV4IGYxZmE0ZDQ0ZjBiZTVhMzA2MmI2Yjk3MDhhNGVi
YWFkMzY3NTM4NzEuLjQwOTBlNTk2ZDQ1NzVlNjkzY2FjYWQyZjBhYzcwODNhOTNkMjU0ZDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmgKQEAgLTg4LDYgKzg4LDMxIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKK2NsYXNzIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yIDogcHVibGljIERP
TUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVj
dCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VD
b25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAg
ICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IqIHB0ciA9
IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJu
IHB0cjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAg
ICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9i
amVjdDo6U3RydWN0dXJlRmxhZ3M7Cit9OworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111177</attachid>
            <date>2011-10-15 23:40:15 -0700</date>
            <delta_ts>2011-10-16 04:43:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70101-20111016154014.patch</filename>
            <type>text/plain</type>
            <size>84318</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc0NTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMTk3OTkwNDdhZTE5NWEx
OGMxZDkzZGNlN2EwZjkxZTRhMTkyNDdmLi5iMWU0MWE1ZWFjOTRmMWMxNWU5NWUxNDFhZTg0MTlk
MmI4NDRkMjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODggQEAKKzIwMTEtMTAtMTQgIEtlbnRh
cm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN1cHBvcnQgW0NvbnN0
cnVjdG9yXSBJREwgZm9yIEpTQy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcwMTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIHNwZWMgZm9yIFtDb25zdHJ1Y3Rvcl0gSURMIGlzIGhlcmU6IGh0dHA6
Ly93d3cudzMub3JnL1RSL1dlYklETC8jQ29uc3RydWN0b3IKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VkIFtDb25zdHJ1Y3Rvcl0gSURMIGZvciBKU0MuIFRoaXMgcGF0Y2ggYWxzbyBhZGRl
ZAorICAgICAgICBbQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb25dIGZvciBKU0MuIElmIFtDb25z
dHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbl0gaXMgc3BlY2lmaWVkLAorICAgICAgICBhIHBsYWNlaG9s
ZGVyIGZvciBFeGNlcHRpb25Db2RlIGlzIHBhc3NlZCB0byBYWFg6OmNyZWF0ZSgpLCBsaWtlIFhY
WDo6Y3JlYXRlKC4uLiwgZWMpLgorCisgICAgICAgIE5vdGVzOgorICAgICAgICAtIFdlIGRvIG5v
dCB5ZXQgc3VwcG9ydCBjb25zdHJ1Y3RvciBvdmVybG9hZGluZy4KKyAgICAgICAgLSBXZSBkbyBu
b3QgeWV0IHN1cHBvcnQgW09wdGlvbmFsXSB3aXRob3V0IENhbGxXaXRoRGVmYXVsdFZhbHVlIGZv
ciBjb25zdHJ1Y3RvciBhcmd1bWVudHMuCisKKyAgICAgICAgVGVzdHM6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW50ZXJmYWNlLmlkbAorICAgICAgICAgICAgICAg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVy
YXRlSGVhZGVyKTogR2VuZXJhdGVzIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uIGNvZGUgdG8gYSBo
ZWFkZXIgZmlsZSwgaWYgYSBnaXZlbiBET00gb2JqZWN0IGhhcyBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOiBVc2VzIEdlbmVyYXRlQXJndW1lbnRzQ291bnRD
aGVjaygpIGFuZCBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjaygpLgorICAgICAgICAoR2VuZXJhdGVB
cmd1bWVudHNDb3VudENoZWNrKTogU3BsaXRzIG91dCBvZiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
KCkgZm9yIHJldXNlLgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOiBTcGxpdHMg
b3V0IG9mIEdlbmVyYXRlSW1wbGVtZW50YXRpb24oKSBmb3IgcmV1c2UuCisgICAgICAgIChHZW5l
cmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6IEdlbmVyYXRlcyBjb25zdHJ1Y3RvciBkZWZpbml0
aW9uIGNvZGUuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVy
ZmFjZS5jcHA6IFVwZGF0ZWQgdGhlIHJ1bi1iaW5kaW5nLXRlc3RzIHJlc3VsdHMuCisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0SW50
ZXJmYWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJm
YWNlLmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2QpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFy
Z3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbnRNZXRo
b2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbnRNZXRo
b2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9iak1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9iak1ldGhvZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJv
d3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxp
emVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25J
ZGJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRp
b25zT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkN1c3RvbUFyZ3NBbmRFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1p
Y0ZyYW1lQW5kQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNG
cmFtZUFuZFVzZXJHZXN0dXJlQVNBRCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWQpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmopOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNj
cmlwdFN0YXRlT2JqRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0
aW9uYWxBcmdBbmRPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhD
YWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9u
YWxBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25k
aXRpb25hbE1ldGhvZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db25kaXRpb25hbE1ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDMpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kNCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q1KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ2xhc3NNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE9iakNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6IERpdHRvLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorCiAyMDExLTEwLTE0ICBNaWhuZWEgT3ZpZGVuaWUgIDxtaWhuZWFA
YWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgUmVnaW9uc10gQ2hhbmdlIC13ZWJraXQtZmxvdyB0
byAtd2Via2l0LWZsb3ctaW50bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCBhNGExODVkYTEwODFjNzlkNWNiODIzYjAzODcy
NDEwMjgxY2I0ODFmLi4wNDhjYmEyYjE5OTQ2MjRmNWExOWRjNWFlODFjNjYyMjkwOTMxMjZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQpAQCAtMTA3MSwxMiArMTA3MSwxMSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKIAotICAgICMgQ29uZGl0aW9uYWxseSBlbWl0
IHRoZSBjb25zdHJ1Y3RvciBvYmplY3QncyBkZWNsYXJhdGlvbgotICAgIGlmICgkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkgeworICAgIGlmICgk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwg
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSB8fCAh
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiT21pdENvbnN0cnVjdG9yIn0pIHsKKyAg
ICAgICAgJGhlYWRlckluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKICAgICAgICAgR2Vu
ZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKFxAaGVhZGVyQ29udGVudCwgJGNsYXNzTmFtZSwg
JGRhdGFOb2RlKTsKICAgICB9CiAKLQogICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgewogICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCIvLyBGdW5jdGlvbnNcblxuIik7CiAgICAgICAgIGZv
cmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgewpAQCAtMTM2NCw4
ICsxMzYzLDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbXBpbGVUaW1lQ2hlY2tGb3JFbnVt
c0lmTmVlZGVkKCRkYXRhTm9kZSkpOwogCiAgICAgICAgIG15ICRwcm90b0NsYXNzTmFtZSA9ICIk
e2NsYXNzTmFtZX1Qcm90b3R5cGUiOwotCi0gICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JEZWNs
YXJhdGlvbihcQGltcGxDb250ZW50LCAkY2xhc3NOYW1lLCAkZGF0YU5vZGUpIHVubGVzcyAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0pOwogICAg
ICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbihcQGltcGxDb250ZW50LCAkY2xhc3NO
YW1lLCAkcHJvdG9DbGFzc05hbWUsICRpbnRlcmZhY2VOYW1lLCAkdmlzaWJsZUNsYXNzTmFtZSwg
JGRhdGFOb2RlKTsKICAgICB9CiAKQEAgLTIwMTMsMzMgKzIwMTAsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAkc3ZnUHJvcGVydHlUeXBlJiBwb2RJbXAgPSBpbXAtPnByb3BlcnR5UmVmZXJlbmNlKCk7XG4i
KTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBteSAkbnVtUGFyYW1ldGVy
cyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKLQotICAgICAgICAgICAgICAgIG15ICRyZXF1
aXJlc0FsbEFyZ3VtZW50czsKLSAgICAgICAgICAgICAgICBteSAkcmVxdWlyZXNBbGxBcmd1bWVu
dHNEZWZhdWx0ID0gIiI7Ci0gICAgICAgICAgICAgICAgaWYgKCEkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJMZWdhY3lEZWZhdWx0T3B0aW9uYWxBcmd1bWVudHMifSkgewotICAgICAg
ICAgICAgICAgICAgICAkcmVxdWlyZXNBbGxBcmd1bWVudHNEZWZhdWx0ID0gIlJhaXNlIjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgJHJlcXVpcmVzQWxsQXJndW1lbnRzID0g
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXF1aXJlc0FsbEFy
Z3VtZW50cyJ9IHx8ICRyZXF1aXJlc0FsbEFyZ3VtZW50c0RlZmF1bHQ7Ci0gICAgICAgICAgICAg
ICAgaWYgKCRyZXF1aXJlc0FsbEFyZ3VtZW50cykgewotICAgICAgICAgICAgICAgICAgICBteSAk
bnVtTWFuZGF0b3J5UGFyYW1zID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9OwotICAgICAgICAg
ICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAocmV2ZXJzZShAeyRmdW5jdGlvbi0+cGFyYW1l
dGVyc30pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiT3B0aW9uYWwifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRu
dW1NYW5kYXRvcnlQYXJhbXMtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoJG51bU1h
bmRhdG9yeVBhcmFtcyA+IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPCAkbnVtTWFuZGF0b3J5UGFyYW1zKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoJHJlcXVpcmVzQWxsQXJndW1lbnRzIGVxICJSYWlzZSIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgXCJOb3QgZW5vdWdoIGFyZ3VtZW50c1wiKSk7
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBH
ZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2soXEBpbXBsQ29udGVudCwgJGZ1bmN0aW9uLCAkZGF0
YU5vZGUpOwogCiAgICAgICAgICAgICAgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRp
b25zfSkgewogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDtcbiIpOwpAQCAtMjA1NiwxNTEgKzIwMjcsOCBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5uYW1lIGVxICJyZW1vdmVFdmVudExpc3RlbmVyIikgewogICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbCgkY2xhc3NO
YW1lLCAicmVtb3ZlIikpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG15ICRhcmdzSW5kZXggPSAwOwotICAgICAgICAgICAgICAgICAgICBteSAkcGFyYW1J
bmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRmdW5jdGlvblN0cmluZyA9ICgoJHN2
Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIGFuZCAhJHN2Z0xpc3RQcm9wZXJ0eVR5cGUpID8g
InBvZEltcC4iIDogImltcC0+IikgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKCI7
Ci0gICAgICAgICAgICAgICAgICAgIG15ICRoYXNPcHRpb25hbEFyZ3VtZW50cyA9IDA7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tQXJndW1lbnRIYW5kbGluZyJ9KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBzY3Jp
cHRBcmd1bWVudHMoY3JlYXRlU2NyaXB0QXJndW1lbnRzKGV4ZWMsICRudW1QYXJhbWV0ZXJzKSk7
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNp
emVfdCBtYXhTdGFja1NpemUgPSBpbXAtPnNob3VsZENhcHR1cmVGdWxsU3RhY2tUcmFjZSgpID8g
U2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlIDogMTtcbiIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPFNjcmlw
dENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFjayhleGVjLCBtYXhTdGFj
a1NpemUpKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siU2Ny
aXB0QXJndW1lbnRzLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1
ZGVzeyJTY3JpcHRDYWxsU3RhY2suaCJ9ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICRp
bXBsSW5jbHVkZXN7IlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCJ9ID0gMTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG15ICRjYWxsV2l0aCA9ICRmdW5jdGlv
bi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCRjYWxsV2l0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbXkg
JGNhbGxXaXRoQXJnID0gIkNPTVBJTEVfQVNTRVJUKGZhbHNlKSI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoJGNhbGxXaXRoIGVxICJEeW5hbWljRnJhbWUiKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRnJhbWUqIGR5bmFtaWNGcmFt
ZSA9IHRvRHluYW1pY0ZyYW1lKGV4ZWMpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFkeW5hbWljRnJhbWUpXG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICRjYWxsV2l0aEFyZyA9ICJkeW5hbWljRnJhbWUiOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNpZiAoJGNhbGxXaXRoIGVxICJTY3JpcHRTdGF0ZSIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAkY2FsbFdpdGhBcmcgPSAiZXhlYyI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2lmICgkY2FsbFdpdGggZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQi
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKCFzY3JpcHRDb250ZXh0KVxuIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
Y2FsbFdpdGhBcmcgPSAic2NyaXB0Q29udGV4dCI7IAotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBh
cmFtSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gJGNh
bGxXaXRoQXJnOwotICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmFtSW5kZXgrKzsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV4
Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3si
SlNET01CaW5kaW5nLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBh
cmFtZXRlciAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAjIE9wdGlvbmFsIGNhbGxiYWNrcyBzaG91bGQgYmUgdHJlYXRlZCBkaWZmZXJlbnRseSwg
YmVjYXVzZSB0aGV5IGFsd2F5cyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAoMCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAjIGFuZCB3ZSBjYW4gcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgdGhhdCB0YWtlIGEgZGlmZmVyZW50IG51bWJlciBvZiBwYXJhbWV0ZXJzLgot
ICAgICAgICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbCBhcmd1bWVudHMgd2l0aCBkZWZhdWx0
IHZhbHVlcyBbT3B0aW9uYWw9Q2FsbFdpdGhEZWZhdWx0VmFsdWVdIHNob3VsZCBub3QgZ2VuZXJh
dGUgYW4gZWFybHkgY2FsbC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG15ICRvcHRpb25hbCA9
ICRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25hbCJ9OyAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG9wdGlvbmFsICYmICRvcHRpb25hbCBuZSAiQ2Fs
bFdpdGhEZWZhdWx0VmFsdWUiICYmICEkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q2FsbGJhY2sifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR2VuZXJhdGUgZWFy
bHkgY2FsbCBpZiB0aGVyZSBhcmUgZW5vdWdoIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCEkaGFzT3B0aW9uYWxBcmd1bWVudHMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICBzaXplX3QgYXJnc0Nv
dW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICRoYXNPcHRpb25hbEFyZ3VtZW50cyA9IDE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmIChhcmdzQ291bnQgPD0gJGFyZ3NJbmRleCkge1xuIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rp
b24sICRmdW5jdGlvblN0cmluZywgJHBhcmFtSW5kZXgsICIgICAgIiB4IDIsICRzdmdQcm9wZXJ0
eVR5cGUsICRpbXBsQ2xhc3NOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICB9XG5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBteSAkbmFtZSA9ICRwYXJhbWV0ZXItPm5hbWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBteSAkYXJnVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJp
cE1vZHVsZSgkcGFyYW1ldGVyLT50eXBlKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCRhcmdUeXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gY3Vz
dG9tUmVzb2x2ZXI7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyID0gdG9YUGF0aE5TUmVzb2x2
ZXIoZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFyZXNvbHZlcikge1xuIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGN1
c3RvbVJlc29sdmVyID0gSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZShleGVjLCBleGVj
LT5hcmd1bWVudCgkYXJnc0luZGV4KSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKVxu
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc29s
dmVyID0gY3VzdG9tUmVzb2x2ZXIuZ2V0KCk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGNhbGxiYWNrQ2xhc3NOYW1lID0g
R2V0Q2FsbGJhY2tDbGFzc05hbWUoJGFyZ1R5cGUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICRpbXBsSW5jbHVkZXN7IiRjYWxsYmFja0NsYXNzTmFtZS5oIn0gPSAxOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
T3B0aW9uYWwifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+ICRuYW1lO1xuIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPiAkYXJnc0luZGV4ICYmICFleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmICghZXhlYy0+YXJndW1lbnQoJGFyZ3NJ
bmRleCkuaXNPYmplY3QoKSkge1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZ
UEVfTUlTTUFUQ0hfRVJSKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIH1cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgJG5hbWUgPSAke2NhbGxiYWNrQ2xhc3NO
YW1lfTo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpKSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gJGFyZ3NJbmRleCB8
fCAhZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNPYmplY3QoKSkge1xuIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+
ICRuYW1lID0gJHtjYWxsYmFja0NsYXNzTmFtZX06OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1
bWVudCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtcbiIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGUgIlN0cmljdFR5cGVDaGVj
a2luZyIgZXh0ZW5kZWQgYXR0cmlidXRlIGlzIHByZXNlbnQsIGFuZCB0aGUgYXJndW1lbnQncyB0
eXBlIGlzIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbnRlcmZhY2UgdHlwZSwg
dGhlbiBpZiB0aGUgaW5jb21pbmcgdmFsdWUgZG9lcyBub3QgaW1wbGVtZW50IHRoYXQgaW50ZXJm
YWNlLCBhIFR5cGVFcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaXMgdGhyb3du
IHJhdGhlciB0aGFuIHNpbGVudGx5IHBhc3NpbmcgTlVMTCB0byB0aGUgQysrIGNvZGUuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBQZXIgdGhlIFdlYiBJREwgYW5kIEVDTUFTY3JpcHQg
c2VtYW50aWNzLCBpbmNvbWluZyB2YWx1ZXMgY2FuIGFsd2F5cyBiZSBjb252ZXJ0ZWQgdG8gYm90
aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RyaW5ncyBhbmQgbnVtYmVycywgc28g
ZG8gbm90IHRocm93IFR5cGVFcnJvciBpZiB0aGUgYXJndW1lbnQgaXMgb2YgdGhlc2UgdHlwZXMu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiU3RyaWN0VHlwZUNoZWNraW5nIn0pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvRXJyb3IuaD4ifSA9
IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGFyZ1ZhbHVlID0gImV4
ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFJc05hdGl2ZVR5cGUoJGFyZ1R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpID4gJGFyZ3NJbmRleCAmJiAhJHthcmdWYWx1ZX0uaXNVbmRlZmluZWRPck51bGwoKSAm
JiAhJHthcmdWYWx1ZX0uaW5oZXJpdHMoJkpTJHthcmdUeXBlfTo6c19pbmZvKSlcbiIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0
aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lKCIgLiBKU1ZhbHVlVG9O
YXRpdmUoJHBhcmFtZXRlciwgImV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIikgLiAiKTtcbiIp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhIHBhcmFtZXRlciBpcyAiYW4g
aW5kZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0IHNob3VsZCB0aHJvdyBhbiBJTkRFWF9TSVpFX0VS
UiBleGNlcHRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBCdXQgdGhpcyBuZWVk
cyB0byBiZSBkb25lIGluIHRoZSBiaW5kaW5ncywgYmVjYXVzZSB0aGUgdHlwZSBpcyB1bnNpZ25l
ZCBhbmQgdGhlIGZhY3QgdGhhdCBpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2Fz
IG5lZ2F0aXZlIHdpbGwgYmUgbG9zdCBieSB0aGUgdGltZSB3ZSdyZSBpbnNpZGUgdGhlIERPTS4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IklzSW5kZXgifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJG5hbWUgPCAwKSB7XG4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBJTkRFWF9TSVpFX0VSUik7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgdHlw
ZSBjb252ZXJzaW9uIHN1Y2NlZWRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigk
YXJnVHlwZSkgYW5kIG5vdCAkaW1wbENsYXNzTmFtZSA9fiAvTGlzdCQvKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghJG5hbWUp
IHtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTtcbiIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiLCAiIGlmICRw
YXJhbUluZGV4OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIk5v
ZGVGaWx0ZXIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5n
IC49ICIkbmFtZS5nZXQoKSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2lmICgkY29k
ZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJGFyZ1R5cGUpIGFuZCBub3QgJGlt
cGxDbGFzc05hbWUgPX4gL0xpc3QkLykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRm
dW5jdGlvblN0cmluZyAuPSAiJG5hbWUtPnByb3BlcnR5UmVmZXJlbmNlKCkiOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZnVu
Y3Rpb25TdHJpbmcgLj0gJG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAkYXJnc0luZGV4Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAk
cGFyYW1JbmRleCsrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmVlZHNV
c2VyR2VzdHVyZUNoZWNrIn0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0
cmluZyAuPSAiLCAiIGlmICRwYXJhbUluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgJGZ1
bmN0aW9uU3RyaW5nIC49ICJTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUo
KSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1JbmRleCsrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siU2NyaXB0Q29udHJvbGxlci5oIn0gPSAxOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBteSAkbnVtUGFyYW1ldGVycyA9IEB7JGZ1
bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKyAgICAgICAgICAgICAgICAgICAgbXkgKCRmdW5jdGlvblN0
cmluZywgJHBhcmFtSW5kZXgpID0gR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2soXEBpbXBsQ29udGVu
dCwgJGZ1bmN0aW9uLCAkZGF0YU5vZGUsICRudW1QYXJhbWV0ZXJzLCAkaW1wbENsYXNzTmFtZSwg
JGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lLCAkc3ZnUHJvcGVydHlUeXBlLCAkc3ZnUHJvcGVy
dHlPckxpc3RQcm9wZXJ0eVR5cGUsICRzdmdMaXN0UHJvcGVydHlUeXBlKTsKICAgICAgICAgICAg
ICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rpb24sICRm
dW5jdGlvblN0cmluZywgJHBhcmFtSW5kZXgsICIgICAgIiwgJHN2Z1Byb3BlcnR5VHlwZSwgJGlt
cGxDbGFzc05hbWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIzOTUs
NiArMjIyMywyMDIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0
aW9uYWxTdHJpbmc7CiB9CiAKK3N1YiBHZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2sKK3sKKyAg
ICBteSAkb3V0cHV0QXJyYXkgPSBzaGlmdDsKKyAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKKyAg
ICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIG15ICRyZXF1aXJlc0FsbEFyZ3VtZW50czsK
KyAgICBteSAkcmVxdWlyZXNBbGxBcmd1bWVudHNEZWZhdWx0ID0gIiI7CisgICAgaWYgKCEkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lEZWZhdWx0T3B0aW9uYWxBcmd1bWVu
dHMifSkgeworICAgICAgICAkcmVxdWlyZXNBbGxBcmd1bWVudHNEZWZhdWx0ID0gIlJhaXNlIjsK
KyAgICB9CisgICAgJHJlcXVpcmVzQWxsQXJndW1lbnRzID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXF1aXJlc0FsbEFyZ3VtZW50cyJ9IHx8ICRyZXF1aXJl
c0FsbEFyZ3VtZW50c0RlZmF1bHQ7CisgICAgaWYgKCRyZXF1aXJlc0FsbEFyZ3VtZW50cykgewor
ICAgICAgICBteSAkbnVtTWFuZGF0b3J5UGFyYW1zID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9
OworICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAocmV2ZXJzZShAeyRmdW5jdGlvbi0+cGFyYW1l
dGVyc30pKSB7CisgICAgICAgICAgICBpZiAoJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
T3B0aW9uYWwifSkgeworICAgICAgICAgICAgICAgICRudW1NYW5kYXRvcnlQYXJhbXMtLTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAoJG51bU1hbmRhdG9yeVBhcmFtcyA+PSAxKQorICAgICAg
ICB7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8ICRudW1NYW5kYXRvcnlQYXJhbXMpXG4iKTsKKyAgICAgICAgICAgIGlmICgk
cmVxdWlyZXNBbGxBcmd1bWVudHMgZXEgIlJhaXNlIikgeworICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgXCJOb3QgZW5vdWdoIGFyZ3VtZW50c1wiKSk7XG4iKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFxuIik7
Cit9CisKK3N1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjaworeworICAgIG15ICRvdXRwdXRBcnJh
eSA9IHNoaWZ0OworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9
IHNoaWZ0OworICAgIG15ICRudW1QYXJhbWV0ZXJzID0gc2hpZnQ7CisgICAgbXkgJGltcGxDbGFz
c05hbWUgPSBzaGlmdDsKKyAgICBteSAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgPSBzaGlm
dDsKKyAgICBteSAkc3ZnUHJvcGVydHlUeXBlID0gc2hpZnQ7CisgICAgbXkgJHN2Z1Byb3BlcnR5
T3JMaXN0UHJvcGVydHlUeXBlID0gc2hpZnQ7CisgICAgbXkgJHN2Z0xpc3RQcm9wZXJ0eVR5cGUg
PSBzaGlmdDsKKworICAgIG15ICRwYXJhbUluZGV4ID0gMDsKKyAgICBteSAkYXJnc0luZGV4ID0g
MDsKKyAgICBteSAkaGFzT3B0aW9uYWxBcmd1bWVudHMgPSAwOworCisgICAgbXkgJGZ1bmN0aW9u
U3RyaW5nID0gKCgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgYW5kICEkc3ZnTGlzdFBy
b3BlcnR5VHlwZSkgPyAicG9kSW1wLiIgOiAiaW1wLT4iKSAuICRmdW5jdGlvbkltcGxlbWVudGF0
aW9uTmFtZSAuICIoIjsKKworICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbUFyZ3VtZW50SGFuZGxpbmcifSkgeworICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gc2NyaXB0QXJndW1lbnRz
KGNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAkbnVtUGFyYW1ldGVycykpO1xuIik7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzaXplX3QgbWF4U3RhY2tTaXplID0gaW1wLT5z
aG91bGRDYXB0dXJlRnVsbFN0YWNrVHJhY2UoKSA/IFNjcmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0
YWNrU2l6ZVRvQ2FwdHVyZSA6IDE7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3Rh
Y2soZXhlYywgbWF4U3RhY2tTaXplKSk7XG4iKTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siU2Ny
aXB0QXJndW1lbnRzLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlNjcmlwdENhbGxT
dGFjay5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRDYWxsU3RhY2tGYWN0
b3J5LmgifSA9IDE7CisgICAgfQorCisgICAgbXkgJGNhbGxXaXRoID0gJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9OworICAgIGlmICgkY2FsbFdp
dGggYW5kICEkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0
cnVjdG9yIn0pIHsKKyAgICAgICAgbXkgJGNhbGxXaXRoQXJnID0gIkNPTVBJTEVfQVNTRVJUKGZh
bHNlKSI7CisgICAgICAgIGlmICgkY2FsbFdpdGggZXEgIkR5bmFtaWNGcmFtZSIpIHsKKyAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBGcmFtZSogZHluYW1pY0ZyYW1lID0gdG9E
eW5hbWljRnJhbWUoZXhlYyk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBpZiAoIWR5bmFtaWNGcmFtZSlcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7
CisgICAgICAgICAgICAkY2FsbFdpdGhBcmcgPSAiZHluYW1pY0ZyYW1lIjsKKyAgICAgICAgfSBl
bHNpZiAoJGNhbGxXaXRoIGVxICJTY3JpcHRTdGF0ZSIpIHsKKyAgICAgICAgICAgICRjYWxsV2l0
aEFyZyA9ICJleGVjIjsKKyAgICAgICAgfSBlbHNpZiAoJGNhbGxXaXRoIGVxICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0IikgeworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlm
ICghc2NyaXB0Q29udGV4dClcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAg
ICAgICAgICAkY2FsbFdpdGhBcmcgPSAic2NyaXB0Q29udGV4dCI7IAorICAgICAgICB9CisgICAg
ICAgICRmdW5jdGlvblN0cmluZyAuPSAiLCAiIGlmICRwYXJhbUluZGV4OworICAgICAgICAkZnVu
Y3Rpb25TdHJpbmcgLj0gJGNhbGxXaXRoQXJnOworICAgICAgICAkcGFyYW1JbmRleCsrOworICAg
IH0KKworICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKKyAgICAkaW1w
bEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKKworICAgIGZvcmVhY2ggbXkgJHBhcmFt
ZXRlciAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7CisgICAgICAgICMgT3B0aW9uYWwgY2Fs
bGJhY2tzIHNob3VsZCBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LCBiZWNhdXNlIHRoZXkgYWx3YXlz
IGhhdmUgYSBkZWZhdWx0IHZhbHVlICgwKSwKKyAgICAgICAgIyBhbmQgd2UgY2FuIHJlZHVjZSB0
aGUgbnVtYmVyIG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zIHRoYXQgdGFrZSBhIGRpZmZlcmVudCBu
dW1iZXIgb2YgcGFyYW1ldGVycy4KKyAgICAgICAgIyBPcHRpb25hbCBhcmd1bWVudHMgd2l0aCBb
T3B0aW9uYWw9Q2FsbFdpdGhEZWZhdWx0VmFsdWVdIHNob3VsZCBub3QgZ2VuZXJhdGUgYW4gZWFy
bHkgY2FsbC4KKyAgICAgICAgbXkgJG9wdGlvbmFsID0gJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ik9wdGlvbmFsIn07CisgICAgICAgIGlmICgkb3B0aW9uYWwgJiYgJG9wdGlvbmFs
IG5lICJDYWxsV2l0aERlZmF1bHRWYWx1ZSIgJiYgISRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDYWxsYmFjayJ9KSB7CisgICAgICAgICAgICAjIEdlbmVyYXRlIGVhcmx5IGNhbGwg
aWYgdGhlcmUgYXJlIGVub3VnaCBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgaWYgKCEkaGFzT3B0
aW9uYWxBcmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJc
biAgICBzaXplX3QgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpO1xuIik7CisgICAg
ICAgICAgICAgICAgJGhhc09wdGlvbmFsQXJndW1lbnRzID0gMTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoYXJnc0NvdW50IDw9ICRhcmdz
SW5kZXgpIHtcbiIpOworICAgICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9u
Q2FsbCgkZnVuY3Rpb24sICRmdW5jdGlvblN0cmluZywgJHBhcmFtSW5kZXgsICIgICAgIiB4IDIs
ICRzdmdQcm9wZXJ0eVR5cGUsICRpbXBsQ2xhc3NOYW1lKTsKKyAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICB9XG5cbiIpOworICAgICAgICB9CisKKyAgICAgICAgbXkgJG5hbWUg
PSAkcGFyYW1ldGVyLT5uYW1lOworICAgICAgICBteSAkYXJnVHlwZSA9ICRjb2RlR2VuZXJhdG9y
LT5TdHJpcE1vZHVsZSgkcGFyYW1ldGVyLT50eXBlKTsKKworICAgICAgICBpZiAoJGFyZ1R5cGUg
ZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiBjdXN0b21SZXNvbHZlcjtcbiIpOworICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIg
PSB0b1hQYXRoTlNSZXNvbHZlcihleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSk7XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIXJlc29sdmVyKSB7XG4iKTsK
KyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgY3VzdG9tUmVzb2x2ZXIg
PSBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KCRh
cmdzSW5kZXgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmVzb2x2
ZXIgPSBjdXN0b21SZXNvbHZlci5nZXQoKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIH1cbiIpOworICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ2FsbGJhY2sifSkgeworICAgICAgICAgICAgbXkgJGNhbGxiYWNrQ2xh
c3NOYW1lID0gR2V0Q2FsbGJhY2tDbGFzc05hbWUoJGFyZ1R5cGUpOworICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3siJGNhbGxiYWNrQ2xhc3NOYW1lLmgifSA9IDE7CisgICAgICAgICAgICBpZiAo
JHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn0pIHsKKyAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPCRhcmdUeXBlPiAkbmFtZTtc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpID4gJGFyZ3NJbmRleCAmJiAhZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRl
eCkuaXNVbmRlZmluZWRPck51bGwoKSkge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLmlzT2Jq
ZWN0KCkpIHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7XG4iKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgICRuYW1lID0gJHtjYWxsYmFja0NsYXNzTmFtZX06OmNyZWF0ZShh
c09iamVjdChleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9
XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gJGFyZ3NJbmRleCB8fCAh
ZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNPYmplY3QoKSkge1xuIik7CisgICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
VFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+ICRuYW1l
ID0gJHtjYWxsYmFja0NsYXNzTmFtZX06OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgk
YXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtcbiIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIyBJZiB0aGUgIlN0cmljdFR5cGVD
aGVja2luZyIgZXh0ZW5kZWQgYXR0cmlidXRlIGlzIHByZXNlbnQsIGFuZCB0aGUgYXJndW1lbnQn
cyB0eXBlIGlzIGFuCisgICAgICAgICAgICAjIGludGVyZmFjZSB0eXBlLCB0aGVuIGlmIHRoZSBp
bmNvbWluZyB2YWx1ZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhhdCBpbnRlcmZhY2UsIGEgVHlwZUVy
cm9yCisgICAgICAgICAgICAjIGlzIHRocm93biByYXRoZXIgdGhhbiBzaWxlbnRseSBwYXNzaW5n
IE5VTEwgdG8gdGhlIEMrKyBjb2RlLgorICAgICAgICAgICAgIyBQZXIgdGhlIFdlYiBJREwgYW5k
IEVDTUFTY3JpcHQgc2VtYW50aWNzLCBpbmNvbWluZyB2YWx1ZXMgY2FuIGFsd2F5cyBiZSBjb252
ZXJ0ZWQgdG8gYm90aAorICAgICAgICAgICAgIyBzdHJpbmdzIGFuZCBudW1iZXJzLCBzbyBkbyBu
b3QgdGhyb3cgVHlwZUVycm9yIGlmIHRoZSBhcmd1bWVudCBpcyBvZiB0aGVzZSB0eXBlcy4KKyAg
ICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IlN0cmljdFR5cGVDaGVja2luZyJ9KSB7CisgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3si
PHJ1bnRpbWUvRXJyb3IuaD4ifSA9IDE7CisKKyAgICAgICAgICAgICAgICBteSAkYXJnVmFsdWUg
PSAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiOworICAgICAgICAgICAgICAgIGlmICghSXNO
YXRpdmVUeXBlKCRhcmdUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+ICRhcmdzSW5kZXggJiYgISR7
YXJnVmFsdWV9LmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgISR7YXJnVmFsdWV9LmluaGVyaXRzKCZK
UyR7YXJnVHlwZX06OnNfaW5mbykpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTtcbiIpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIp
IC4gIiAkbmFtZSgiIC4gSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJleGVjLT5hcmd1bWVu
dCgkYXJnc0luZGV4KSIpIC4gIik7XG4iKTsKKworICAgICAgICAgICAgIyBJZiBhIHBhcmFtZXRl
ciBpcyAiYW4gaW5kZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0IHNob3VsZCB0aHJvdyBhbiBJTkRF
WF9TSVpFX0VSUiBleGNlcHRpb24uCisgICAgICAgICAgICAjIEJ1dCB0aGlzIG5lZWRzIHRvIGJl
IGRvbmUgaW4gdGhlIGJpbmRpbmdzLCBiZWNhdXNlIHRoZSB0eXBlIGlzIHVuc2lnbmVkIGFuZCB0
aGUgZmFjdCB0aGF0IGl0CisgICAgICAgICAgICAjIHdhcyBuZWdhdGl2ZSB3aWxsIGJlIGxvc3Qg
YnkgdGhlIHRpbWUgd2UncmUgaW5zaWRlIHRoZSBET00uCisgICAgICAgICAgICBpZiAoJHBhcmFt
ZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzSW5kZXgifSkgeworICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoJG5hbWUgPCAwKSB7XG4iKTsKKyAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBJTkRFWF9TSVpFX0VSUik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsK
KyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlIHR5cGUgY29udmVyc2lvbiBzdWNj
ZWVkZWQuCisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKVxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKworICAgICAg
ICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigkYXJnVHlw
ZSkgYW5kIG5vdCAkaW1wbENsYXNzTmFtZSA9fiAvTGlzdCQvKSB7CisgICAgICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghJG5hbWUpIHtcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZ
UEVfTUlTTUFUQ0hfRVJSKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiLCAiIGlmICRw
YXJhbUluZGV4OworCisgICAgICAgIGlmICgkYXJnVHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKKyAg
ICAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiJG5hbWUuZ2V0KCkiOworICAgICAgICB9IGVs
c2lmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJGFyZ1R5cGUpIGFu
ZCBub3QgJGltcGxDbGFzc05hbWUgPX4gL0xpc3QkLykgeworICAgICAgICAgICAgJGZ1bmN0aW9u
U3RyaW5nIC49ICIkbmFtZS0+cHJvcGVydHlSZWZlcmVuY2UoKSI7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gJG5hbWU7CisgICAgICAgIH0KKyAgICAg
ICAgJGFyZ3NJbmRleCsrOworICAgICAgICAkcGFyYW1JbmRleCsrOworICAgIH0KKworICAgIGlm
ICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5lZWRzVXNlckdl
c3R1cmVDaGVjayJ9KSB7CisgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiLCAiIGlmICRwYXJh
bUluZGV4OworICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIlNjcmlwdENvbnRyb2xsZXI6OnBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSgpIjsKKyAgICAgICAgJHBhcmFtSW5kZXgrKzsKKyAgICAgICAg
JGltcGxJbmNsdWRlc3siU2NyaXB0Q29udHJvbGxlci5oIn0gPSAxOworICAgIH0KKworICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBcbiIpOworICAgIHJldHVybiAoJGZ1bmN0aW9uU3RyaW5n
LCAkcGFyYW1JbmRleCk7Cit9CisKIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCiB7CiAgICAg
bXkgJG9iamVjdCA9IHNoaWZ0OwpAQCAtMzE4Nyw5ICszMjExLDYgQEAgc3ViIEdlbmVyYXRlQ29u
c3RydWN0b3JEZWZpbml0aW9uCiAgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CiAKICAgICBteSAk
Y29uc3RydWN0b3JDbGFzc05hbWUgPSAiJHtjbGFzc05hbWV9Q29uc3RydWN0b3IiOwotICAgIG15
ICRjYW5Db25zdHJ1Y3QgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYW5CZUNv
bnN0cnVjdGVkIn07Ci0gICAgbXkgJGN1c3RvbUNvbnN0cnVjdG9yID0gJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn07Ci0gICAgbXkgJGNhbGxXaXRo
ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKICAgICBteSAk
bnVtYmVyT2Zjb25zdHJ1Y3RQYXJhbWV0ZXJzID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ29uc3RydWN0b3JQYXJhbWV0ZXJzIn07CiAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJjb25zdCBDbGFzc0luZm8gJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OnNfaW5mbyA9IHsgXCIk
e3Zpc2libGVDbGFzc05hbWV9Q29uc3RydWN0b3JcIiwgJkRPTUNvbnN0cnVjdG9yT2JqZWN0Ojpz
X2luZm8sICYke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKCRjb25zdHJ1Y3RvckNsYXNzTmFtZSkgfTtcblxuIik7CkBAIC0zMjIxLDE4ICszMjQyLDY4
IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbgogICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPCR7Y29uc3RydWN0b3JD
bGFzc05hbWV9LCBKU0RPTVdyYXBwZXI+KGV4ZWMsICYke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfVRh
YmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xuIik7CiAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAifVxuXG4iKTsKIAotICAgIGlmICgkY2FuQ29uc3RydWN0KSB7Ci0gICAgICAg
IGlmICghJGN1c3RvbUNvbnN0cnVjdG9yKSB7CisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNhbkJlQ29uc3RydWN0ZWQifSkgeworICAgICAgICBpZiAoISgkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkpIHsKICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdCR7Y2xhc3NOYW1lfShFeGVjU3RhdGUq
IGV4ZWMpXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAg
ICAgICAgICAgbXkgJGNvbnN0cnVjdG9yQXJnID0gIiI7Ci0gICAgICAgICAgICBpZiAoJGNhbGxX
aXRoIGFuZCAkY2FsbFdpdGggZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiKSB7Ci0gICAgICAg
ICAgICAgICAgJGNvbnN0cnVjdG9yQXJnID0gImNvbnRleHQiOwotICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0g
c3RhdGljX2Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihleGVjLT5jYWxsZWUoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBpZiAoIWNvbnRleHQpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVm
ZXJlbmNlRXJyb3IoZXhlYywgXCJSZWZlcmVuY2UgZXJyb3JcIikpO1xuIik7CisKKyAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSoganND
b25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oZXhlYy0+
Y2FsbGVlKCkpO1xuIik7CisKKyAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAgICAgICAgICAgbXkgJGZ1bmN0aW9u
ID0gJGRhdGFOb2RlLT5jb25zdHJ1Y3RvcjsKKyAgICAgICAgICAgICAgICBteSBAY29uc3RydWN0
b3JBcmdMaXN0OworCisgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvRXJy
b3IuaD4ifSA9IDE7CisKKyAgICAgICAgICAgICAgICBHZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hl
Y2soJG91dHB1dEFycmF5LCAkZnVuY3Rpb24sICRkYXRhTm9kZSk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uIn0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siRXhjZXB0aW9uQ29kZS5oIn0gPSAxOworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7XG4iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIEZvciBub3cs
IHdlIGRvIG5vdCBzdXBwb3J0IFNWRyBjb25zdHJ1Y3RvcnMuCisgICAgICAgICAgICAgICAgIyBX
ZSBkbyBub3QgYWxzbyBzdXBwb3J0IGEgY29uc3RydWN0b3IgW09wdGlvbmFsXSBhcmd1bWVudCB3
aXRob3V0IENhbGxXaXRoRGVmYXVsdFZhbHVlLgorICAgICAgICAgICAgICAgIG15ICRudW1QYXJh
bWV0ZXJzID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9OworICAgICAgICAgICAgICAgIG15ICgk
ZHVtbXksICRwYXJhbUluZGV4KSA9IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrKCRvdXRwdXRBcnJh
eSwgJGZ1bmN0aW9uLCAkZGF0YU5vZGUsICRudW1QYXJhbWV0ZXJzLCAkaW50ZXJmYWNlTmFtZSwg
ImNvbnN0cnVjdG9yQ2FsbGJhY2siLCB1bmRlZiwgdW5kZWYsIHVuZGVmKTsKKworICAgICAgICAg
ICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9ICYm
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0gZXEgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQiKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGNvbnN0cnVjdG9y
QXJnTGlzdCwgImNvbnRleHQiKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9y
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIGlmICghY29udGV4dClcbiIpOworICAgICAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgXCIke2ludGVyZmFjZU5hbWV9IGNvbnN0cnVj
dG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGVcIikpO1xuIik7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbXkgJGluZGV4ID0gMDsKKyAgICAgICAgICAg
ICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewor
ICAgICAgICAgICAgICAgICAgICBsYXN0IGlmICRpbmRleCBlcSAkcGFyYW1JbmRleDsKKyAgICAg
ICAgICAgICAgICAgICAgcHVzaChAY29uc3RydWN0b3JBcmdMaXN0LCAkcGFyYW1ldGVyLT5uYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgJGluZGV4Kys7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0
cnVjdG9yUmFpc2VzRXhjZXB0aW9uIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAY29u
c3RydWN0b3JBcmdMaXN0LCAiZWMiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbXkgJGNvbnN0cnVjdG9yQXJnID0gam9pbigiLCAiLCBAY29uc3RydWN0b3JBcmdMaXN0KTsK
KyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPCR7aW50ZXJm
YWNlTmFtZX0+IG9iamVjdCA9ICR7aW50ZXJmYWNlTmFtZX06OmNyZWF0ZSgke2NvbnN0cnVjdG9y
QXJnfSk7XG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb24ifSkgeworICAgICAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKGVjKSB7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpO1xuIik7CisgICAgICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG15ICRjb25zdHJ1Y3Rv
ckFyZyA9ICIiOworICAgICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDYWxsV2l0aCJ9IGFuZCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
YWxsV2l0aCJ9IGVxICJTY3JpcHRFeGVjdXRpb25Db250ZXh0IikgeworICAgICAgICAgICAgICAg
ICAgICAkY29uc3RydWN0b3JBcmcgPSAiY29udGV4dCI7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0g
c3RhdGljX2Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihleGVjLT5jYWxsZWUoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgaWYgKCFjb250ZXh0KVxuIik7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCBcIiR7aW50ZXJmYWNlTmFtZX0gY29uc3RydWN0b3Ig
YXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZVwiKSk7XG4iKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZlB0cjwk
e2ludGVyZmFjZU5hbWV9PiBvYmplY3QgPSAke2ludGVyZmFjZU5hbWV9OjpjcmVhdGUoJHtjb25z
dHJ1Y3RvckFyZ30pO1xuIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMs
IHN0YXRpY19jYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oZXhlYy0+Y2FsbGVlKCkpLT5n
bG9iYWxPYmplY3QoKSwgJHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKCR7Y29uc3RydWN0b3JBcmd9
KSkpKTtcbiIpOworCisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2Jh
bE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIn1cblxuIik7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAppbmRl
eCBiYmU2MDZiZGMwYjA5MzA2MDZkNTNkZTk3OWE1MzU0YWY4NTRmMDFjLi4zNzFmMzA5YzAwNTQ1
ZGFjMDZiM2M0NmYyMzA1YjgwOWNiMDFkNjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcApAQCAt
MjQsNyArMjQsMTAgQEAKIAogI2luY2x1ZGUgIkpTVGVzdEludGVyZmFjZS5oIgogCisjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IlRlc3RJbnRlcmZhY2UuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNzIsMzQgKzc1LDYgQEAg
c3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yVGFi
bGVWYWx1ZXNbXSA9CiAKICN1bmRlZiBUSFVOS19HRU5FUkFUT1IKIHN0YXRpYyBKU0NfQ09OU1Rf
SEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlID0geyAx
LCAwLCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07Ci1jbGFzcyBK
U1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7
Ci1wcml2YXRlOgotICAgIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJl
KiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9N
Q29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3IqIGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgSlNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAg
fQotCi0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVj
dHVyZUZsYWdzOwotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlNUZXN0SW50ZXJmYWNlKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgdmlydHVhbCBK
U0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YVZpcnR1YWwoSlNDOjpDb25zdHJ1Y3RE
YXRhJik7Ci0gICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpT
Qzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci19OwotCiBjb25zdCBDbGFzc0luZm8g
SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvciIsICZET01Db25zdHJ1Y3Rvck9iamVjdDo6c19pbmZvLCAmSlNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvcikgfTsKIAogSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OkpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQpAQCAtMTI2LDEwICsxMDEsMjcgQEAgYm9vbCBKU1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3Rvcjo6Y29uc3RydWN0SlNUZXN0SW50ZXJmYWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRp
Y19jYXN0PEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7
CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgY29uc3QgU3RyaW5nJiBzdHIx
KHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0cjIodXN0cmluZ1RvU3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIAorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVj
dG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJS
ZWZlcmVuY2UgZXJyb3IiKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0
b0pTKGV4ZWMsIHN0YXRpY19jYXN0PEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKj4oZXhlYy0+
Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKSwgVGVzdEludGVyZmFjZTo6Y3JlYXRlKGNvbnRleHQp
KSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVy
cm9yKGV4ZWMsICJUZXN0SW50ZXJmYWNlIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQg
aXMgdW5hdmFpbGFibGUiKSk7CisgICAgUmVmUHRyPFRlc3RJbnRlcmZhY2U+IG9iamVjdCA9IFRl
c3RJbnRlcmZhY2U6OmNyZWF0ZShjb250ZXh0LCBzdHIxLCBzdHIyLCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBv
YmplY3QuZ2V0KCkpKSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgSlNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3I6OmdldENvbnN0cnVjdERhdGFWaXJ0dWFsKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERh
dGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlLmgKaW5kZXggNWJmZDg5ZjIyM2E3NWY4NTllN2YzM2NkYjI4MTg5
NWEwYzc3OTAyZC4uZmFmYzE2ZjE3YjhmZGU2YWI4ZTgzNDMxMzRjOTcyMzUxYWViZjg5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
dGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbnRlcmZhY2UuaApAQCAtODgsNiArODgsMzQgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwog
fTsKIAorY2xhc3MgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAg
eworICAgICAgICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciogcHRyID0gbmV3IChKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1
cm4gcHRyOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYp
OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwor
ICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9y
T2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdEludGVyZmFjZShKU0M6OkV4ZWNTdGF0ZSopOwor
ICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGFWaXJ0dWFsKEpT
Qzo6Q29uc3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOworfTsKKwogLy8g
QXR0cmlidXRlcwogCiBKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmluZGV4IDNiZjQzODlk
MjJiNjA4MDA1MWRlYmI0MzI2N2QwZDUwNTYyYmUzYjguLmQzNTk2OTc0YjY2YmU0OTdjMWMwMzM4
NzI2NGM3OGFlZGZmMDhiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5jcHAKQEAgLTczLDMxICs3Myw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3JUYWJsZVZhbHVlc1tdCiAK
ICN1bmRlZiBUSFVOS19HRU5FUkFUT1IKIHN0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hU
YWJsZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3JUYWJsZSA9IHsgMSwg
MCwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAg
fTsKLWNsYXNzIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJh
c2U7Ci0gICAgc3RhdGljIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvciog
Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAo
KSkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZv
OwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Ci0gICAgfQot
cHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFu
Y2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Ci19OwotCiBjb25zdCBD
bGFzc0luZm8gSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOjpzX2luZm8g
PSB7ICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yIiwgJkRPTUNvbnN0cnVj
dG9yT2JqZWN0OjpzX2luZm8sICZKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0
b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyQ29uc3RydWN0b3IpIH07CiAKIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1
Y3Rvcjo6SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtMjA5LDEwICsx
ODQsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2QKICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lcio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OnNfaW5mbyk7
CiAgICAgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICAKICAgICBS
ZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbGlzdGVuZXIoTWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcjo6Y3JlYXRlKFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1l
bnQoMCkpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCisgICAgCiAgICAgaW1wLT5tZXRob2Qo
bGlzdGVuZXIpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAppbmRleCA2YzE0MmU5
ZDlmYTZkZjE0ZTk5Y2VmNzQxMzI3ODFlMmM5Njk0MjE2Li41NzA0NGZiMzg5MGE0YzEwYTBlNjVh
NTM1NmE5YzZlZDVmZWYyNjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyLmgKQEAgLTg4LDYgKzg4LDMxIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAorY2xhc3MgSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lckNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3By
aXZhdGU6CisgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5
cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCisgICAgeworICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0
b3IqIHB0ciA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOwor
ICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRp
YyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpT
dHJ1Y3R1cmVGbGFnczsKK307CisKIC8vIEZ1bmN0aW9ucwogCiBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGMwMjRhNDUxZDc5MDMy
ZmVhNThmNGJhOWIyODQ5ZmJlNTEwNjI2OGMuLmViZmRhMzc3MTZhODc2OTQwZDllMTgzZGNkOGFj
NjMzY2RjMmVjM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0xNzUsMzEgKzE3NSw2IEBAIENPTVBJTEVfQVNT
RVJUKDB4MDEgPT0gVGVzdE9iajo6Q09OU1RfVkFMVUVfMTIsIFRlc3RPYmpFbnVtQ09OU1RfVkFM
VUVfMTJJc1dyb25nCiBDT01QSUxFX0FTU0VSVCgwWDIwID09IFRlc3RPYmo6OkNPTlNUX1ZBTFVF
XzEzLCBUZXN0T2JqRW51bUNPTlNUX1ZBTFVFXzEzSXNXcm9uZ1VzZURvbnRDaGVja0VudW1zKTsK
IENPTVBJTEVfQVNTRVJUKDB4MWFiYyA9PSBUZXN0T2JqOjpDT05TVF9WQUxVRV8xNCwgVGVzdE9i
akVudW1DT05TVF9WQUxVRV8xNElzV3JvbmdVc2VEb250Q2hlY2tFbnVtcyk7CiAKLWNsYXNzIEpT
VGVzdE9iakNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZh
dGU6Ci0gICAgSlNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2Jh
bE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9i
amVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RPYmpDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0T2JqQ29uc3RydWN0b3Iq
IHB0ciA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2JqQ29uc3RydWN0b3I+KCpleGVj
LT5oZWFwKCkpKSBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7
Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICAg
ICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0
eVNsb3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Ci0gICAgfQotcHJvdGVjdGVkOgot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25z
dHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Ci19OwotCiBjb25zdCBDbGFzc0luZm8gSlNU
ZXN0T2JqQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RPYmpDb25zdHJ1Y3RvciIsICZET01D
b25zdHJ1Y3Rvck9iamVjdDo6c19pbmZvLCAmSlNUZXN0T2JqQ29uc3RydWN0b3JUYWJsZSwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPYmpDb25zdHJ1Y3RvcikgfTsKIAogSlNUZXN0T2Jq
Q29uc3RydWN0b3I6OkpTVGVzdE9iakNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtMTA1Nyw3ICsxMDMyLDggQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRN
ZXRob2QoRXhlY1N0YXRlKiBleGUKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNf
Y2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9i
aiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0KKyAg
ICAKKyAgICAKICAgICBpbXAtPnZvaWRNZXRob2QoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTA3MCw2ICsxMDQ2LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRo
QXJncyhFeGVjU3QKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0g
c3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgCiAgICAgaW50
IGludEFyZyhleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkBAIC0xMDc5LDcgKzEwNTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzKEV4ZWNTdAogICAg
IFRlc3RPYmoqIG9iakFyZyh0b1Rlc3RPYmooZXhlYy0+YXJndW1lbnQoMikpKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0KKyAgICAKICAgICBpbXAtPnZvaWRNZXRob2RXaXRoQXJncyhpbnRBcmcs
IHN0ckFyZywgb2JqQXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQpAQCAtMTA5Miw3ICsxMDY5LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkludE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVj
dCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
ICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVz
dE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0KKyAgICAKKyAgICAKIAogICAgIEpTQzo6SlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmludE1ldGhvZCgpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC0xMTA2LDYgKzEwODQsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW50TWV0aG9kV2l0aEFy
Z3MoRXhlY1N0YQogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVz
dE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBz
dGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICAKICAgICBpbnQg
aW50QXJnKGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTExMTUsNyArMTA5NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbnRNZXRob2RXaXRoQXJncyhFeGVjU3RhCiAgICAg
VGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgyKSkpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLQorICAgIAogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVy
KGltcC0+aW50TWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIG9iakFyZykpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTExMjksNyArMTEwOCw4IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRo
b2QoRXhlY1N0YXRlKiBleGVjCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nh
c3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoq
IGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotCisgICAg
CisgICAgCiAKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wLT5vYmpNZXRob2QoKSkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTExNDMsNiArMTEyMyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRo
b2RXaXRoQXJncyhFeGVjU3RhCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nh
c3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoq
IGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAog
ICAgIGludCBpbnRBcmcoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtMTE1Miw3ICsxMTMzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEV4ZWNT
dGEKICAgICBUZXN0T2JqKiBvYmpBcmcodG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDIpKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotCisgICAgCiAKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wLT5v
YmpNZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgb2JqQXJnKSkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTExNjgsMTMgKzExNDksMTQgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRS
ZXF1aXJlc0FsbEFyZ3MKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKICAg
ICBjb25zdCBTdHJpbmcmIHN0ckFyZyh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYykpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVGVzdE9iaiogb2Jq
QXJnKHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgxKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LQorICAgIAogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcC0+bWV0aG9kVGhhdFJlcXVpcmVzQWxs
QXJncyhzdHJBcmcsIG9iakFyZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CkBAIC0xMTkwLDYgKzExNzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncwogICAgIFRl
c3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwog
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMi
KSk7CisgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgY29uc3QgU3RyaW5nJiBz
dHJBcmcodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAtMTE5Nyw3ICsxMTgwLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFRoYXRSZXF1aXJlc0FsbEFyZ3MKICAgICBUZXN0T2JqKiBvYmpBcmcodG9UZXN0T2JqKGV4ZWMt
PmFyZ3VtZW50KDEpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCisgICAgCiAKICAgICBKU0M6
OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
V1RGOjpnZXRQdHIoaW1wLT5tZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKHN0ckFy
Zywgb2JqQXJnLCBlYykpKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpAQCAtMTIx
MiwxMCArMTE5NSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlKEV4ZWNTdGF0ZQogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6
c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVk
VGhpcy0+aW1wbCgpKTsKKyAgICAKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBz
ZXJpYWxpemVkQXJnKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCisgICAgCiAgICAgaW1wLT5zZXJp
YWxpemVkVmFsdWUoc2VyaWFsaXplZEFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KQEAgLTEyMjgsMTAgKzEyMTIsMTEgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleShFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2Jq
Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhj
YXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRp
Y19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAgIFJlZlB0cjxJ
REJLZXk+IGtleShjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkp
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KKyAgICAKICAgICBpbXAtPmlkYktleShrZXkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xMjQ0LDYg
KzEyMjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3B0aW9uc09iamVjdChFeGVjU3RhdGUqCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8p
OwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOworICAgIAogICAgIE9wdGlvbnNPYmplY3QqIG9vKHRvT3B0aW9uc09iamVjdChleGVj
LT5hcmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTEyNTcsNyArMTI0Myw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PcHRpb25zT2JqZWN0KEV4ZWNTdGF0ZSoKICAgICBPcHRpb25zT2JqZWN0KiBvb28odG9PcHRp
b25zT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCisg
ICAgCiAgICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vLCBvb28pOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xMjcwLDggKzEyNTYsOSBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aEV4Y2VwdGlvbihFeGVjUwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0
PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBp
bXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLQorICAgIAogICAgIGltcC0+bWV0aG9kV2l0aEV4Y2Vw
dGlvbihlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTMwNSw2ICsxMjkyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbUFy
Z3NBbmRFeGNlcHRpb24oRXgKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiog
aW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gc2Ny
aXB0QXJndW1lbnRzKGNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAxKSk7CiAgICAgc2l6ZV90
IG1heFN0YWNrU2l6ZSA9IGltcC0+c2hvdWxkQ2FwdHVyZUZ1bGxTdGFja1RyYWNlKCkgPyBTY3Jp
cHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUgOiAxOwpAQCAtMTMxMiw3ICsx
MzAwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkN1c3RvbUFyZ3NBbmRFeGNlcHRpb24oRXgKICAgICBsb2cqIGludEFyZyh0b2xvZyhl
eGVjLT5hcmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQorICAgIAogICAgIGlt
cC0+Y3VzdG9tQXJnc0FuZEV4Y2VwdGlvbihpbnRBcmcsIHNjcmlwdEFyZ3VtZW50cywgY2FsbFN0
YWNrLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTMyNiw2ICsxMzE0LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50
TGlzdGVuZXIoRXhlY1N0YXQKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiog
aW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgCiAg
ICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIGlmICghbGlzdGVu
ZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTEzNDEsNiArMTMzMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTCiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qo
dGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAm
SlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBl
eGVjLT5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xMzU2LDEwICsxMzQ2
LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25XaXRoRHluYW1pY0ZyYW1lKEV4ZWNTdGF0CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwog
ICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBs
KCkpOworICAgIAogICAgIEZyYW1lKiBkeW5hbWljRnJhbWUgPSB0b0R5bmFtaWNGcmFtZShleGVj
KTsKICAgICBpZiAoIWR5bmFtaWNGcmFtZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLQorICAgIAogICAgIGltcC0+d2l0aER5bmFtaWNGcmFtZShkeW5h
bWljRnJhbWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CkBAIC0xMzcyLDEzICsxMzYzLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lQW5kQXJnKEV4CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhp
c1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNU
ZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAgIEZyYW1lKiBkeW5hbWljRnJhbWUgPSB0
b0R5bmFtaWNGcmFtZShleGVjKTsKICAgICBpZiAoIWR5bmFtaWNGcmFtZSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbnQgaW50QXJnKGV4ZWMt
PmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQorICAg
IAogICAgIGltcC0+d2l0aER5bmFtaWNGcmFtZUFuZEFyZyhkeW5hbWljRnJhbWUsIGludEFyZyk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTEzOTEs
NiArMTM4Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lQW5kT3B0aW9uCiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2lu
Zm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlz
LT5pbXBsKCkpOworICAgIAogICAgIEZyYW1lKiBkeW5hbWljRnJhbWUgPSB0b0R5bmFtaWNGcmFt
ZShleGVjKTsKICAgICBpZiAoIWR5bmFtaWNGcmFtZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTE0MDcsNyArMTQwMCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0Zy
YW1lQW5kT3B0aW9uCiAgICAgaW50IG9wdGlvbmFsQXJnKGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50
MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQorICAgIAogICAgIGltcC0+d2l0aER5
bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBvcHRpb25hbEFy
Zyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTE0
MjAsMTMgKzE0MTMsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2UKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUp
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6
OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7CisgICAgCiAgICAgRnJhbWUqIGR5bmFtaWNGcmFtZSA9IHRvRHluYW1p
Y0ZyYW1lKGV4ZWMpOwogICAgIGlmICghZHluYW1pY0ZyYW1lKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGludCBpbnRBcmcoZXhlYy0+YXJndW1l
bnQoMCkudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCisgICAgCiAgICAg
aW1wLT53aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmUoZHluYW1pY0ZyYW1lLCBpbnRBcmcs
IFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTQzOSw2ICsxNDMzLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldp
dGhEeW5hbWljRnJhbWVBbmRVc2VyR2UKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0
aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Cisg
ICAgCiAgICAgRnJhbWUqIGR5bmFtaWNGcmFtZSA9IHRvRHluYW1pY0ZyYW1lKGV4ZWMpOwogICAg
IGlmICghZHluYW1pY0ZyYW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpAQCAtMTQ1NSw3ICsxNDUwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2UK
ICAgICBpbnQgb3B0aW9uYWxBcmcoZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotCisgICAgCiAgICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lQW5k
VXNlckdlc3R1cmVBU0FEKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBvcHRpb25hbEFyZywgU2NyaXB0
Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNDY4LDcgKzE0NjMsOCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlw
dFN0YXRlVm9pZChFeGVjUwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0
PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBp
bXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLQorICAgIAor
ICAgIAogICAgIGltcC0+d2l0aFNjcmlwdFN0YXRlVm9pZChleGVjKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTQ4MSw3ICsxNDc3LDggQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhT
Y3JpcHRTdGF0ZU9iaihFeGVjU3QKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNf
Y2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9i
aiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0KKyAg
ICAKKyAgICAKIAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPndpdGhTY3JpcHRTdGF0ZU9iaihl
eGVjKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTE0OTcsOCArMTQ5NCw5
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
c3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAg
IFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OworICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotCisgICAgCiAgICAgaW1wLT53aXRo
U2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC0xNTEyLDggKzE1MTAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aQogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1
ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9i
ajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2Fz
dGVkVGhpcy0+aW1wbCgpKTsKKyAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLQorICAg
IAogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcC0+d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9u
KGV4ZWMsIGVjKSkpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CkBAIC0xNTMwLDEw
ICsxNTI5LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2lu
Zm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlz
LT5pbXBsKCkpOworICAgIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRl
eHQgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRl
eHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KKyAg
ICAKICAgICBpbXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdENvbnRleHQpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNTQ2LDYg
KzE1NDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnKEV4ZQogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZv
KTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKKyAgICAKIAogICAgIHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENv
dW50KCk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAwKSB7CkBAIC0xNTU2LDcgKzE1NTcsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsQXJnKEV4ZQogICAgIGludCBvcHQoZXhlYy0+YXJndW1lbnQoMCkudG9J
bnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCisgICAgCiAgICAgaW1wLT5tZXRo
b2RXaXRoT3B0aW9uYWxBcmcob3B0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQpAQCAtMTU2OSw2ICsxNTcwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFy
Z0EKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihh
c09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nh
c3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgCiAgICAgaW50IG5vbk9wdChl
eGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC0xNTgyLDcgKzE1ODQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQQogICAgIGludCBvcHQo
ZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
CisgICAgCiAgICAgaW1wLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhu
b25PcHQsIG9wdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KQEAgLTE1OTUsNiArMTU5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBCiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhp
c1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNU
ZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAgIGludCBub25PcHQoZXhlYy0+YXJndW1l
bnQoMCkudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTYxMSw3ICsx
NjE0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0EKICAgICBpbnQgb3B0MihleGVjLT5hcmd1
bWVudCgyKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KKyAgICAKICAg
ICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQs
IG9wdDEsIG9wdDIpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CkBAIC0xNjI0LDEyICsxNjI3LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmcoRXhlCiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qo
dGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAm
SlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPD0gMCB8fCAhZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkgewogICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KICAgICBSZWZQdHI8VGVzdENh
bGxiYWNrPiBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+
YXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7Ci0KKyAgICAKICAgICBp
bXAtPm1ldGhvZFdpdGhDYWxsYmFja0FyZyhjYWxsYmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTE2NDIsNiArMTY0Niw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
Tm9uQ2FsbGJhY2tBcmdBCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGlt
cCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAg
IGludCBub25DYWxsYmFjayhleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CkBAIC0xNjUwLDcgKzE2NTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNr
QXJnQQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0KICAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpj
cmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSk7Ci0KKyAgICAKICAgICBpbXAtPm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxi
YWNrQXJnKG5vbkNhbGxiYWNrLCBjYWxsYmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTE2NjMsNiArMTY2OCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJh
Y2tBbmRPcHRpCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0
T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0
YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogICAgIFJlZlB0
cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PiAwICYmICFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAg
IGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkgewpAQCAtMTY3MSw3ICsxNjc3LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGkKICAgICAgICAgfQogICAgICAgICBjYWxsYmFjayA9
IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgfQotCisgICAgCiAgICAgaW1wLT5tZXRob2RX
aXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhjYWxsYmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTE2ODUsNyArMTY5MSw4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25h
bE1ldGhvZDEoRXhlY1N0CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGlt
cCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotCisgICAgCisg
ICAgCiAKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmcoZXhlYywgaW1wLT5jb25k
aXRpb25hbE1ldGhvZDEoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpA
QCAtMTcwMiw3ICsxNzA5LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMihFeGVjU3QKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RP
Ymo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7Ci0KKyAgICAKKyAgICAKICAgICBpbXAtPmNvbmRpdGlvbmFsTWV0
aG9kMigpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBA
IC0xNzE4LDcgKzE3MjYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzKEV4ZWNTdAogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1
ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9i
ajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2Fz
dGVkVGhpcy0+aW1wbCgpKTsKLQorICAgIAorICAgIAogICAgIGltcC0+Y29uZGl0aW9uYWxNZXRo
b2QzKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAg
LTE3MzMsMTMgKzE3NDIsMTQgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMSgKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RP
Ymo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7CisgICAgCiAgICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihl
eGVjLT5hcmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBjb25zdCBTdHJp
bmcmIHN0ckFyZyh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhl
YykpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KKyAgICAKICAgICBpbXAtPm92ZXJsb2FkZWRN
ZXRob2Qob2JqQXJnLCBzdHJBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CkBAIC0xNzUyLDYgKzE3NjIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qy
KAogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFz
T2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2Fz
dDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICAKICAgICBUZXN0T2JqKiBvYmpB
cmcodG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpA
QCAtMTc2NSw3ICsxNzc2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMigKICAgICBpbnQgaW50
QXJnKGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLQorICAgIAogICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcsIGludEFyZyk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTE3NzgsMTAg
KzE3ODksMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMygKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5m
byk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMt
PmltcGwoKSk7CisgICAgCiAgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcodXN0cmluZ1RvU3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwotCisgICAgCiAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKHN0ckFyZyk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTE3OTQsMTAgKzE4MDYsMTEg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNCgKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBz
dGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAg
VGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CisgICAgCiAgICAgaW50IGludEFyZyhleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KKyAgICAKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qo
aW50QXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpA
QCAtMTgxMCwxMiArMTgyMywxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q1KAogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNW
YWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVz
dE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICAKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDw9IDAgfHwgIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpIHsKICAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgUmVmUHRyPFRlc3RDYWxsYmFj
az4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3Vt
ZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwotCisgICAgCiAgICAgaW1wLT5v
dmVybG9hZGVkTWV0aG9kKGNhbGxiYWNrKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQpAQCAtMTg0Niw3ICsxODYwLDggQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kKEV4ZWNTdGF0
ZSogZXgKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoq
Pihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGlj
X2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0KKyAgICAKKyAgICAKICAgICBp
bXAtPmNsYXNzTWV0aG9kKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KQEAgLTE4NTksNiArMTg3NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbChFCiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmpl
Y3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRl
c3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIAogCiAgICAgc2l6ZV90IGFyZ3NDb3Vu
dCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAoYXJnc0NvdW50IDw9IDApIHsKQEAg
LTE4NzAsNyArMTg4Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbChFCiAgICAgaW50IGFyZyhl
eGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0K
KyAgICAKIAogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmNsYXNzTWV0
aG9kV2l0aE9wdGlvbmFsKGFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouaAppbmRleCBjM2QxYjI0Y2JiMTcxYTY0ZjI2OTIzZjg3ZmFlYjU3MWFkNWM4ZDMzLi5h
N2YxMDJjZmM3YmFiYjI2ODlkOTE0MWEzZGQ1OWQ1MzM1M2YxODFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC0xMDIs
NiArMTAyLDMxIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAorY2xhc3MgSlNU
ZXN0T2JqQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0
ZToKKyAgICBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE9iakNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RPYmpDb25zdHJ1Y3Rvciog
cHRyID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPYmpDb25zdHJ1Y3Rvcj4oKmV4ZWMt
PmhlYXAoKSkpIEpTVGVzdE9iakNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsK
KyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgICAg
ICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5
U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYpOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICB9Citwcm90ZWN0ZWQ6Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0
cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKK307CisKIC8vIEZ1bmN0aW9ucwogCiBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
b2lkTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDJhZDYxMGJiNmI3NDFjMDFi
ODgzOWZkMmI4NjU0NWNlZmQxZGJmNjYuLjllZWMzMTg4N2UzNGUzOGFmZmE4MzQwNjQzNmIzNjMw
M2Y0ZTc1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC03NCwzMSArNzQsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3JU
YWJsZQogCiAjdW5kZWYgVEhVTktfR0VORVJBVE9SCiBzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJM
RSBIYXNoVGFibGUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0
b3JUYWJsZSA9IHsgMSwgMCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29u
c3RydWN0b3JUYWJsZVZhbHVlcywgMCB9OwotY2xhc3MgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qgewot
cHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1
Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciogcHRyID0gbmV3IChKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcj4oKmV4ZWMt
PmhlYXAoKSkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9y
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihl
eGVjLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxl
bWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsK
LX07Ci0KIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZUNvbnN0cnVjdG9yIiwgJkRPTUNvbnN0cnVjdG9yT2JqZWN0OjpzX2luZm8sICZKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVj
dG9yKSB9OwogCiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rv
cjo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKaW5kZXgg
ZjFmYTRkNDRmMGJlNWEzMDYyYjZiOTcwOGE0ZWJhYWQzNjc1Mzg3MS4uNDA5MGU1OTZkNDU3NWU2
OTNjYWNhZDJmMGFjNzA4M2E5M2QyNTRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaApAQCAtODgsNiArODgsMzEgQEAgcHJvdGVj
dGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOwogfTsKIAorY2xhc3MgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0
ZToKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VDb25zdHJ1Y3RvciogcHRyID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAo
KSkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihleGVjLCBn
bG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50
aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBK
U0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5m
byBzX2luZm87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
KyAgICB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNI
YXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKK307CisK
IC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6
OklkZW50aWZpZXImKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111179</attachid>
            <date>2011-10-16 04:43:31 -0700</date>
            <delta_ts>2011-10-16 07:03:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70101-20111016204329.patch</filename>
            <type>text/plain</type>
            <size>72201</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc0NTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMTk3OTkwNDdhZTE5NWEx
OGMxZDkzZGNlN2EwZjkxZTRhMTkyNDdmLi5iMWU0MWE1ZWFjOTRmMWMxNWU5NWUxNDFhZTg0MTlk
MmI4NDRkMjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODggQEAKKzIwMTEtMTAtMTQgIEtlbnRh
cm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN1cHBvcnQgW0NvbnN0
cnVjdG9yXSBJREwgZm9yIEpTQy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcwMTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIHNwZWMgZm9yIFtDb25zdHJ1Y3Rvcl0gSURMIGlzIGhlcmU6IGh0dHA6
Ly93d3cudzMub3JnL1RSL1dlYklETC8jQ29uc3RydWN0b3IKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VkIFtDb25zdHJ1Y3Rvcl0gSURMIGZvciBKU0MuIFRoaXMgcGF0Y2ggYWxzbyBhZGRl
ZAorICAgICAgICBbQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb25dIGZvciBKU0MuIElmIFtDb25z
dHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbl0gaXMgc3BlY2lmaWVkLAorICAgICAgICBhIHBsYWNlaG9s
ZGVyIGZvciBFeGNlcHRpb25Db2RlIGlzIHBhc3NlZCB0byBYWFg6OmNyZWF0ZSgpLCBsaWtlIFhY
WDo6Y3JlYXRlKC4uLiwgZWMpLgorCisgICAgICAgIE5vdGVzOgorICAgICAgICAtIFdlIGRvIG5v
dCB5ZXQgc3VwcG9ydCBjb25zdHJ1Y3RvciBvdmVybG9hZGluZy4KKyAgICAgICAgLSBXZSBkbyBu
b3QgeWV0IHN1cHBvcnQgW09wdGlvbmFsXSB3aXRob3V0IENhbGxXaXRoRGVmYXVsdFZhbHVlIGZv
ciBjb25zdHJ1Y3RvciBhcmd1bWVudHMuCisKKyAgICAgICAgVGVzdHM6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW50ZXJmYWNlLmlkbAorICAgICAgICAgICAgICAg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVy
YXRlSGVhZGVyKTogR2VuZXJhdGVzIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uIGNvZGUgdG8gYSBo
ZWFkZXIgZmlsZSwgaWYgYSBnaXZlbiBET00gb2JqZWN0IGhhcyBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOiBVc2VzIEdlbmVyYXRlQXJndW1lbnRzQ291bnRD
aGVjaygpIGFuZCBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjaygpLgorICAgICAgICAoR2VuZXJhdGVB
cmd1bWVudHNDb3VudENoZWNrKTogU3BsaXRzIG91dCBvZiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
KCkgZm9yIHJldXNlLgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOiBTcGxpdHMg
b3V0IG9mIEdlbmVyYXRlSW1wbGVtZW50YXRpb24oKSBmb3IgcmV1c2UuCisgICAgICAgIChHZW5l
cmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6IEdlbmVyYXRlcyBjb25zdHJ1Y3RvciBkZWZpbml0
aW9uIGNvZGUuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVy
ZmFjZS5jcHA6IFVwZGF0ZWQgdGhlIHJ1bi1iaW5kaW5nLXRlc3RzIHJlc3VsdHMuCisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0SW50
ZXJmYWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJm
YWNlLmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2QpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFy
Z3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbnRNZXRo
b2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbnRNZXRo
b2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9iak1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9iak1ldGhvZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJv
d3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxp
emVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25J
ZGJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRp
b25zT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkN1c3RvbUFyZ3NBbmRFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1p
Y0ZyYW1lQW5kQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNG
cmFtZUFuZFVzZXJHZXN0dXJlQVNBRCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWQpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmopOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNj
cmlwdFN0YXRlT2JqRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0
aW9uYWxBcmdBbmRPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhD
YWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9u
YWxBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25k
aXRpb25hbE1ldGhvZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db25kaXRpb25hbE1ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDMpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kNCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q1KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ2xhc3NNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE9iakNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6IERpdHRvLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorCiAyMDExLTEwLTE0ICBNaWhuZWEgT3ZpZGVuaWUgIDxtaWhuZWFA
YWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgUmVnaW9uc10gQ2hhbmdlIC13ZWJraXQtZmxvdyB0
byAtd2Via2l0LWZsb3ctaW50bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCBhNGExODVkYTEwODFjNzlkNWNiODIzYjAzODcy
NDEwMjgxY2I0ODFmLi5iNWNlZWUzMzIxYTk1YzAxYzBlZDA1NjcyMzgxYWUzZGE2ZmVjODdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQpAQCAtMTA3MSwxMiArMTA3MSwxMSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKIAotICAgICMgQ29uZGl0aW9uYWxseSBlbWl0
IHRoZSBjb25zdHJ1Y3RvciBvYmplY3QncyBkZWNsYXJhdGlvbgotICAgIGlmICgkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkgeworICAgIGlmICgk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwg
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSB8fCAh
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiT21pdENvbnN0cnVjdG9yIn0pIHsKKyAg
ICAgICAgJGhlYWRlckluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKICAgICAgICAgR2Vu
ZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKFxAaGVhZGVyQ29udGVudCwgJGNsYXNzTmFtZSwg
JGRhdGFOb2RlKTsKICAgICB9CiAKLQogICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgewogICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCIvLyBGdW5jdGlvbnNcblxuIik7CiAgICAgICAgIGZv
cmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgewpAQCAtMTM2NCw4
ICsxMzYzLDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbXBpbGVUaW1lQ2hlY2tGb3JFbnVt
c0lmTmVlZGVkKCRkYXRhTm9kZSkpOwogCiAgICAgICAgIG15ICRwcm90b0NsYXNzTmFtZSA9ICIk
e2NsYXNzTmFtZX1Qcm90b3R5cGUiOwotCi0gICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JEZWNs
YXJhdGlvbihcQGltcGxDb250ZW50LCAkY2xhc3NOYW1lLCAkZGF0YU5vZGUpIHVubGVzcyAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0pOwogICAg
ICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbihcQGltcGxDb250ZW50LCAkY2xhc3NO
YW1lLCAkcHJvdG9DbGFzc05hbWUsICRpbnRlcmZhY2VOYW1lLCAkdmlzaWJsZUNsYXNzTmFtZSwg
JGRhdGFOb2RlKTsKICAgICB9CiAKQEAgLTIwMTMsMzMgKzIwMTAsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAkc3ZnUHJvcGVydHlUeXBlJiBwb2RJbXAgPSBpbXAtPnByb3BlcnR5UmVmZXJlbmNlKCk7XG4i
KTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBteSAkbnVtUGFyYW1ldGVy
cyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKLQotICAgICAgICAgICAgICAgIG15ICRyZXF1
aXJlc0FsbEFyZ3VtZW50czsKLSAgICAgICAgICAgICAgICBteSAkcmVxdWlyZXNBbGxBcmd1bWVu
dHNEZWZhdWx0ID0gIiI7Ci0gICAgICAgICAgICAgICAgaWYgKCEkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJMZWdhY3lEZWZhdWx0T3B0aW9uYWxBcmd1bWVudHMifSkgewotICAgICAg
ICAgICAgICAgICAgICAkcmVxdWlyZXNBbGxBcmd1bWVudHNEZWZhdWx0ID0gIlJhaXNlIjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgJHJlcXVpcmVzQWxsQXJndW1lbnRzID0g
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXF1aXJlc0FsbEFy
Z3VtZW50cyJ9IHx8ICRyZXF1aXJlc0FsbEFyZ3VtZW50c0RlZmF1bHQ7Ci0gICAgICAgICAgICAg
ICAgaWYgKCRyZXF1aXJlc0FsbEFyZ3VtZW50cykgewotICAgICAgICAgICAgICAgICAgICBteSAk
bnVtTWFuZGF0b3J5UGFyYW1zID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9OwotICAgICAgICAg
ICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAocmV2ZXJzZShAeyRmdW5jdGlvbi0+cGFyYW1l
dGVyc30pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiT3B0aW9uYWwifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRu
dW1NYW5kYXRvcnlQYXJhbXMtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoJG51bU1h
bmRhdG9yeVBhcmFtcyA+IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPCAkbnVtTWFuZGF0b3J5UGFyYW1zKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoJHJlcXVpcmVzQWxsQXJndW1lbnRzIGVxICJSYWlzZSIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgXCJOb3QgZW5vdWdoIGFyZ3VtZW50c1wiKSk7
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBH
ZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2soXEBpbXBsQ29udGVudCwgJGZ1bmN0aW9uLCAkZGF0
YU5vZGUpOwogCiAgICAgICAgICAgICAgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRp
b25zfSkgewogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDtcbiIpOwpAQCAtMjA1NiwxNTEgKzIwMjcsOCBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5uYW1lIGVxICJyZW1vdmVFdmVudExpc3RlbmVyIikgewogICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbCgkY2xhc3NO
YW1lLCAicmVtb3ZlIikpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG15ICRhcmdzSW5kZXggPSAwOwotICAgICAgICAgICAgICAgICAgICBteSAkcGFyYW1J
bmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRmdW5jdGlvblN0cmluZyA9ICgoJHN2
Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIGFuZCAhJHN2Z0xpc3RQcm9wZXJ0eVR5cGUpID8g
InBvZEltcC4iIDogImltcC0+IikgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKCI7
Ci0gICAgICAgICAgICAgICAgICAgIG15ICRoYXNPcHRpb25hbEFyZ3VtZW50cyA9IDA7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tQXJndW1lbnRIYW5kbGluZyJ9KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBzY3Jp
cHRBcmd1bWVudHMoY3JlYXRlU2NyaXB0QXJndW1lbnRzKGV4ZWMsICRudW1QYXJhbWV0ZXJzKSk7
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNp
emVfdCBtYXhTdGFja1NpemUgPSBpbXAtPnNob3VsZENhcHR1cmVGdWxsU3RhY2tUcmFjZSgpID8g
U2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlIDogMTtcbiIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPFNjcmlw
dENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFjayhleGVjLCBtYXhTdGFj
a1NpemUpKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siU2Ny
aXB0QXJndW1lbnRzLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1
ZGVzeyJTY3JpcHRDYWxsU3RhY2suaCJ9ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICRp
bXBsSW5jbHVkZXN7IlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCJ9ID0gMTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG15ICRjYWxsV2l0aCA9ICRmdW5jdGlv
bi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCRjYWxsV2l0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbXkg
JGNhbGxXaXRoQXJnID0gIkNPTVBJTEVfQVNTRVJUKGZhbHNlKSI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoJGNhbGxXaXRoIGVxICJEeW5hbWljRnJhbWUiKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRnJhbWUqIGR5bmFtaWNGcmFt
ZSA9IHRvRHluYW1pY0ZyYW1lKGV4ZWMpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFkeW5hbWljRnJhbWUpXG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICRjYWxsV2l0aEFyZyA9ICJkeW5hbWljRnJhbWUiOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNpZiAoJGNhbGxXaXRoIGVxICJTY3JpcHRTdGF0ZSIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAkY2FsbFdpdGhBcmcgPSAiZXhlYyI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2lmICgkY2FsbFdpdGggZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQi
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKCFzY3JpcHRDb250ZXh0KVxuIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
Y2FsbFdpdGhBcmcgPSAic2NyaXB0Q29udGV4dCI7IAotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBh
cmFtSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gJGNh
bGxXaXRoQXJnOwotICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmFtSW5kZXgrKzsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV4
Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3si
SlNET01CaW5kaW5nLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBh
cmFtZXRlciAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAjIE9wdGlvbmFsIGNhbGxiYWNrcyBzaG91bGQgYmUgdHJlYXRlZCBkaWZmZXJlbnRseSwg
YmVjYXVzZSB0aGV5IGFsd2F5cyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAoMCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAjIGFuZCB3ZSBjYW4gcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgdGhhdCB0YWtlIGEgZGlmZmVyZW50IG51bWJlciBvZiBwYXJhbWV0ZXJzLgot
ICAgICAgICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbCBhcmd1bWVudHMgd2l0aCBkZWZhdWx0
IHZhbHVlcyBbT3B0aW9uYWw9Q2FsbFdpdGhEZWZhdWx0VmFsdWVdIHNob3VsZCBub3QgZ2VuZXJh
dGUgYW4gZWFybHkgY2FsbC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG15ICRvcHRpb25hbCA9
ICRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25hbCJ9OyAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG9wdGlvbmFsICYmICRvcHRpb25hbCBuZSAiQ2Fs
bFdpdGhEZWZhdWx0VmFsdWUiICYmICEkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q2FsbGJhY2sifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR2VuZXJhdGUgZWFy
bHkgY2FsbCBpZiB0aGVyZSBhcmUgZW5vdWdoIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCEkaGFzT3B0aW9uYWxBcmd1bWVudHMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICBzaXplX3QgYXJnc0Nv
dW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICRoYXNPcHRpb25hbEFyZ3VtZW50cyA9IDE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmIChhcmdzQ291bnQgPD0gJGFyZ3NJbmRleCkge1xuIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rp
b24sICRmdW5jdGlvblN0cmluZywgJHBhcmFtSW5kZXgsICIgICAgIiB4IDIsICRzdmdQcm9wZXJ0
eVR5cGUsICRpbXBsQ2xhc3NOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICB9XG5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBteSAkbmFtZSA9ICRwYXJhbWV0ZXItPm5hbWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBteSAkYXJnVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJp
cE1vZHVsZSgkcGFyYW1ldGVyLT50eXBlKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCRhcmdUeXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gY3Vz
dG9tUmVzb2x2ZXI7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyID0gdG9YUGF0aE5TUmVzb2x2
ZXIoZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFyZXNvbHZlcikge1xuIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGN1
c3RvbVJlc29sdmVyID0gSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZShleGVjLCBleGVj
LT5hcmd1bWVudCgkYXJnc0luZGV4KSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKVxu
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc29s
dmVyID0gY3VzdG9tUmVzb2x2ZXIuZ2V0KCk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGNhbGxiYWNrQ2xhc3NOYW1lID0g
R2V0Q2FsbGJhY2tDbGFzc05hbWUoJGFyZ1R5cGUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICRpbXBsSW5jbHVkZXN7IiRjYWxsYmFja0NsYXNzTmFtZS5oIn0gPSAxOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
T3B0aW9uYWwifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+ICRuYW1lO1xuIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPiAkYXJnc0luZGV4ICYmICFleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmICghZXhlYy0+YXJndW1lbnQoJGFyZ3NJ
bmRleCkuaXNPYmplY3QoKSkge1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZ
UEVfTUlTTUFUQ0hfRVJSKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIH1cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgJG5hbWUgPSAke2NhbGxiYWNrQ2xhc3NO
YW1lfTo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpKSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gJGFyZ3NJbmRleCB8
fCAhZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNPYmplY3QoKSkge1xuIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+
ICRuYW1lID0gJHtjYWxsYmFja0NsYXNzTmFtZX06OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1
bWVudCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtcbiIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGUgIlN0cmljdFR5cGVDaGVj
a2luZyIgZXh0ZW5kZWQgYXR0cmlidXRlIGlzIHByZXNlbnQsIGFuZCB0aGUgYXJndW1lbnQncyB0
eXBlIGlzIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbnRlcmZhY2UgdHlwZSwg
dGhlbiBpZiB0aGUgaW5jb21pbmcgdmFsdWUgZG9lcyBub3QgaW1wbGVtZW50IHRoYXQgaW50ZXJm
YWNlLCBhIFR5cGVFcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaXMgdGhyb3du
IHJhdGhlciB0aGFuIHNpbGVudGx5IHBhc3NpbmcgTlVMTCB0byB0aGUgQysrIGNvZGUuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBQZXIgdGhlIFdlYiBJREwgYW5kIEVDTUFTY3JpcHQg
c2VtYW50aWNzLCBpbmNvbWluZyB2YWx1ZXMgY2FuIGFsd2F5cyBiZSBjb252ZXJ0ZWQgdG8gYm90
aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RyaW5ncyBhbmQgbnVtYmVycywgc28g
ZG8gbm90IHRocm93IFR5cGVFcnJvciBpZiB0aGUgYXJndW1lbnQgaXMgb2YgdGhlc2UgdHlwZXMu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiU3RyaWN0VHlwZUNoZWNraW5nIn0pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvRXJyb3IuaD4ifSA9
IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGFyZ1ZhbHVlID0gImV4
ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFJc05hdGl2ZVR5cGUoJGFyZ1R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpID4gJGFyZ3NJbmRleCAmJiAhJHthcmdWYWx1ZX0uaXNVbmRlZmluZWRPck51bGwoKSAm
JiAhJHthcmdWYWx1ZX0uaW5oZXJpdHMoJkpTJHthcmdUeXBlfTo6c19pbmZvKSlcbiIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0
aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lKCIgLiBKU1ZhbHVlVG9O
YXRpdmUoJHBhcmFtZXRlciwgImV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIikgLiAiKTtcbiIp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhIHBhcmFtZXRlciBpcyAiYW4g
aW5kZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0IHNob3VsZCB0aHJvdyBhbiBJTkRFWF9TSVpFX0VS
UiBleGNlcHRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBCdXQgdGhpcyBuZWVk
cyB0byBiZSBkb25lIGluIHRoZSBiaW5kaW5ncywgYmVjYXVzZSB0aGUgdHlwZSBpcyB1bnNpZ25l
ZCBhbmQgdGhlIGZhY3QgdGhhdCBpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2Fz
IG5lZ2F0aXZlIHdpbGwgYmUgbG9zdCBieSB0aGUgdGltZSB3ZSdyZSBpbnNpZGUgdGhlIERPTS4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IklzSW5kZXgifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJG5hbWUgPCAwKSB7XG4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBJTkRFWF9TSVpFX0VSUik7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgdHlw
ZSBjb252ZXJzaW9uIHN1Y2NlZWRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigk
YXJnVHlwZSkgYW5kIG5vdCAkaW1wbENsYXNzTmFtZSA9fiAvTGlzdCQvKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghJG5hbWUp
IHtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTtcbiIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiLCAiIGlmICRw
YXJhbUluZGV4OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIk5v
ZGVGaWx0ZXIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5n
IC49ICIkbmFtZS5nZXQoKSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2lmICgkY29k
ZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJGFyZ1R5cGUpIGFuZCBub3QgJGlt
cGxDbGFzc05hbWUgPX4gL0xpc3QkLykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRm
dW5jdGlvblN0cmluZyAuPSAiJG5hbWUtPnByb3BlcnR5UmVmZXJlbmNlKCkiOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZnVu
Y3Rpb25TdHJpbmcgLj0gJG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAkYXJnc0luZGV4Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAk
cGFyYW1JbmRleCsrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmVlZHNV
c2VyR2VzdHVyZUNoZWNrIn0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0
cmluZyAuPSAiLCAiIGlmICRwYXJhbUluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgJGZ1
bmN0aW9uU3RyaW5nIC49ICJTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUo
KSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1JbmRleCsrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siU2NyaXB0Q29udHJvbGxlci5oIn0gPSAxOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBteSAkbnVtUGFyYW1ldGVycyA9IEB7JGZ1
bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKyAgICAgICAgICAgICAgICAgICAgbXkgKCRmdW5jdGlvblN0
cmluZywgJHBhcmFtSW5kZXgpID0gR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2soXEBpbXBsQ29udGVu
dCwgJGZ1bmN0aW9uLCAkZGF0YU5vZGUsICRudW1QYXJhbWV0ZXJzLCAkaW1wbENsYXNzTmFtZSwg
JGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lLCAkc3ZnUHJvcGVydHlUeXBlLCAkc3ZnUHJvcGVy
dHlPckxpc3RQcm9wZXJ0eVR5cGUsICRzdmdMaXN0UHJvcGVydHlUeXBlKTsKICAgICAgICAgICAg
ICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rpb24sICRm
dW5jdGlvblN0cmluZywgJHBhcmFtSW5kZXgsICIgICAgIiwgJHN2Z1Byb3BlcnR5VHlwZSwgJGlt
cGxDbGFzc05hbWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIzOTUs
NiArMjIyMywyMDAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0
aW9uYWxTdHJpbmc7CiB9CiAKK3N1YiBHZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2sKK3sKKyAg
ICBteSAkb3V0cHV0QXJyYXkgPSBzaGlmdDsKKyAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKKyAg
ICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIG15ICRyZXF1aXJlc0FsbEFyZ3VtZW50czsK
KyAgICBteSAkcmVxdWlyZXNBbGxBcmd1bWVudHNEZWZhdWx0ID0gIiI7CisgICAgaWYgKCEkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lEZWZhdWx0T3B0aW9uYWxBcmd1bWVu
dHMifSkgeworICAgICAgICAkcmVxdWlyZXNBbGxBcmd1bWVudHNEZWZhdWx0ID0gIlJhaXNlIjsK
KyAgICB9CisgICAgJHJlcXVpcmVzQWxsQXJndW1lbnRzID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXF1aXJlc0FsbEFyZ3VtZW50cyJ9IHx8ICRyZXF1aXJl
c0FsbEFyZ3VtZW50c0RlZmF1bHQ7CisgICAgaWYgKCRyZXF1aXJlc0FsbEFyZ3VtZW50cykgewor
ICAgICAgICBteSAkbnVtTWFuZGF0b3J5UGFyYW1zID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9
OworICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAocmV2ZXJzZShAeyRmdW5jdGlvbi0+cGFyYW1l
dGVyc30pKSB7CisgICAgICAgICAgICBpZiAoJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
T3B0aW9uYWwifSkgeworICAgICAgICAgICAgICAgICRudW1NYW5kYXRvcnlQYXJhbXMtLTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAoJG51bU1hbmRhdG9yeVBhcmFtcyA+PSAxKQorICAgICAg
ICB7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8ICRudW1NYW5kYXRvcnlQYXJhbXMpXG4iKTsKKyAgICAgICAgICAgIGlmICgk
cmVxdWlyZXNBbGxBcmd1bWVudHMgZXEgIlJhaXNlIikgeworICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgXCJOb3QgZW5vdWdoIGFyZ3VtZW50c1wiKSk7XG4iKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawor
eworICAgIG15ICRvdXRwdXRBcnJheSA9IHNoaWZ0OworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0
OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRudW1QYXJhbWV0ZXJzID0gc2hp
ZnQ7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlmdDsKKyAgICBteSAkZnVuY3Rpb25JbXBs
ZW1lbnRhdGlvbk5hbWUgPSBzaGlmdDsKKyAgICBteSAkc3ZnUHJvcGVydHlUeXBlID0gc2hpZnQ7
CisgICAgbXkgJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlID0gc2hpZnQ7CisgICAgbXkg
JHN2Z0xpc3RQcm9wZXJ0eVR5cGUgPSBzaGlmdDsKKworICAgIG15ICRwYXJhbUluZGV4ID0gMDsK
KyAgICBteSAkYXJnc0luZGV4ID0gMDsKKyAgICBteSAkaGFzT3B0aW9uYWxBcmd1bWVudHMgPSAw
OworCisgICAgbXkgJGZ1bmN0aW9uU3RyaW5nID0gKCgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0
eVR5cGUgYW5kICEkc3ZnTGlzdFByb3BlcnR5VHlwZSkgPyAicG9kSW1wLiIgOiAiaW1wLT4iKSAu
ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoIjsKKworICAgIGlmICgkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUFyZ3VtZW50SGFuZGxpbmci
fSkgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPFNjcmlwdEFyZ3Vt
ZW50cz4gc2NyaXB0QXJndW1lbnRzKGNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAkbnVtUGFy
YW1ldGVycykpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzaXplX3Qg
bWF4U3RhY2tTaXplID0gaW1wLT5zaG91bGRDYXB0dXJlRnVsbFN0YWNrVHJhY2UoKSA/IFNjcmlw
dENhbGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSA6IDE7XG4iKTsKKyAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFj
ayhjcmVhdGVTY3JpcHRDYWxsU3RhY2soZXhlYywgbWF4U3RhY2tTaXplKSk7XG4iKTsKKyAgICAg
ICAgJGltcGxJbmNsdWRlc3siU2NyaXB0QXJndW1lbnRzLmgifSA9IDE7CisgICAgICAgICRpbXBs
SW5jbHVkZXN7IlNjcmlwdENhbGxTdGFjay5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVz
eyJTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgifSA9IDE7CisgICAgfQorCisgICAgbXkgJGNhbGxX
aXRoID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0
aCJ9OworICAgIGlmICgkY2FsbFdpdGggYW5kICEkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yIn0pIHsKKyAgICAgICAgbXkgJGNhbGxXaXRoQXJn
ID0gIkNPTVBJTEVfQVNTRVJUKGZhbHNlKSI7CisgICAgICAgIGlmICgkY2FsbFdpdGggZXEgIkR5
bmFtaWNGcmFtZSIpIHsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBGcmFt
ZSogZHluYW1pY0ZyYW1lID0gdG9EeW5hbWljRnJhbWUoZXhlYyk7XG4iKTsKKyAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWR5bmFtaWNGcmFtZSlcbiIpOworICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAgICAkY2FsbFdpdGhBcmcgPSAiZHluYW1p
Y0ZyYW1lIjsKKyAgICAgICAgfSBlbHNpZiAoJGNhbGxXaXRoIGVxICJTY3JpcHRTdGF0ZSIpIHsK
KyAgICAgICAgICAgICRjYWxsV2l0aEFyZyA9ICJleGVjIjsKKyAgICAgICAgfSBlbHNpZiAoJGNh
bGxXaXRoIGVxICJTY3JpcHRFeGVjdXRpb25Db250ZXh0IikgeworICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQg
PSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOworICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGlmICghc2NyaXB0Q29udGV4dClcbiIpOworICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAgICAkY2FsbFdpdGhBcmcgPSAic2NyaXB0Q29udGV4
dCI7IAorICAgICAgICB9CisgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiLCAiIGlmICRwYXJh
bUluZGV4OworICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gJGNhbGxXaXRoQXJnOworICAgICAg
ICAkcGFyYW1JbmRleCsrOworICAgIH0KKworICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNv
ZGUuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKKwor
ICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7Cisg
ICAgICAgICMgT3B0aW9uYWwgY2FsbGJhY2tzIHNob3VsZCBiZSB0cmVhdGVkIGRpZmZlcmVudGx5
LCBiZWNhdXNlIHRoZXkgYWx3YXlzIGhhdmUgYSBkZWZhdWx0IHZhbHVlICgwKSwKKyAgICAgICAg
IyBhbmQgd2UgY2FuIHJlZHVjZSB0aGUgbnVtYmVyIG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zIHRo
YXQgdGFrZSBhIGRpZmZlcmVudCBudW1iZXIgb2YgcGFyYW1ldGVycy4KKyAgICAgICAgIyBPcHRp
b25hbCBhcmd1bWVudHMgd2l0aCBbT3B0aW9uYWw9Q2FsbFdpdGhEZWZhdWx0VmFsdWVdIHNob3Vs
ZCBub3QgZ2VuZXJhdGUgYW4gZWFybHkgY2FsbC4KKyAgICAgICAgbXkgJG9wdGlvbmFsID0gJHBh
cmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn07CisgICAgICAgIGlmICgk
b3B0aW9uYWwgJiYgJG9wdGlvbmFsIG5lICJDYWxsV2l0aERlZmF1bHRWYWx1ZSIgJiYgISRwYXJh
bWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9KSB7CisgICAgICAgICAgICAj
IEdlbmVyYXRlIGVhcmx5IGNhbGwgaWYgdGhlcmUgYXJlIGVub3VnaCBwYXJhbWV0ZXJzLgorICAg
ICAgICAgICAgaWYgKCEkaGFzT3B0aW9uYWxBcmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJcbiAgICBzaXplX3QgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1l
bnRDb3VudCgpO1xuIik7CisgICAgICAgICAgICAgICAgJGhhc09wdGlvbmFsQXJndW1lbnRzID0g
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBp
ZiAoYXJnc0NvdW50IDw9ICRhcmdzSW5kZXgpIHtcbiIpOworICAgICAgICAgICAgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rpb24sICRmdW5jdGlvblN0cmluZywgJHBh
cmFtSW5kZXgsICIgICAgIiB4IDIsICRzdmdQcm9wZXJ0eVR5cGUsICRpbXBsQ2xhc3NOYW1lKTsK
KyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG5cbiIpOworICAgICAgICB9
CisKKyAgICAgICAgbXkgJG5hbWUgPSAkcGFyYW1ldGVyLT5uYW1lOworICAgICAgICBteSAkYXJn
VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkcGFyYW1ldGVyLT50eXBlKTsKKwor
ICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKKyAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiBjdXN0b21S
ZXNvbHZlcjtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFhQYXRo
TlNSZXNvbHZlciogcmVzb2x2ZXIgPSB0b1hQYXRoTlNSZXNvbHZlcihleGVjLT5hcmd1bWVudCgk
YXJnc0luZGV4KSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBp
ZiAoIXJlc29sdmVyKSB7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgY3VzdG9tUmVzb2x2ZXIgPSBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6Y3JlYXRlKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgcmVzb2x2ZXIgPSBjdXN0b21SZXNvbHZlci5nZXQoKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOworICAgICAgICB9IGVsc2lm
ICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbGJhY2sifSkgeworICAgICAg
ICAgICAgbXkgJGNhbGxiYWNrQ2xhc3NOYW1lID0gR2V0Q2FsbGJhY2tDbGFzc05hbWUoJGFyZ1R5
cGUpOworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siJGNhbGxiYWNrQ2xhc3NOYW1lLmgifSA9
IDE7CisgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9w
dGlvbmFsIn0pIHsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVm
UHRyPCRhcmdUeXBlPiAkbmFtZTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gJGFyZ3NJbmRleCAmJiAhZXhl
Yy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNVbmRlZmluZWRPck51bGwoKSkge1xuIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBpZiAoIWV4ZWMtPmFyZ3Vt
ZW50KCRhcmdzSW5kZXgpLmlzT2JqZWN0KCkpIHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01J
U01BVENIX0VSUik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICB9XG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICRuYW1lID0gJHtjYWxsYmFj
a0NsYXNzTmFtZX06OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSks
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPD0gJGFyZ3NJbmRleCB8fCAhZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNPYmplY3Qo
KSkge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7CisgICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIH1cbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBS
ZWZQdHI8JGFyZ1R5cGU+ICRuYW1lID0gJHtjYWxsYmFja0NsYXNzTmFtZX06OmNyZWF0ZShhc09i
amVjdChleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpKTtcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
IyBJZiB0aGUgIlN0cmljdFR5cGVDaGVja2luZyIgZXh0ZW5kZWQgYXR0cmlidXRlIGlzIHByZXNl
bnQsIGFuZCB0aGUgYXJndW1lbnQncyB0eXBlIGlzIGFuCisgICAgICAgICAgICAjIGludGVyZmFj
ZSB0eXBlLCB0aGVuIGlmIHRoZSBpbmNvbWluZyB2YWx1ZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhh
dCBpbnRlcmZhY2UsIGEgVHlwZUVycm9yCisgICAgICAgICAgICAjIGlzIHRocm93biByYXRoZXIg
dGhhbiBzaWxlbnRseSBwYXNzaW5nIE5VTEwgdG8gdGhlIEMrKyBjb2RlLgorICAgICAgICAgICAg
IyBQZXIgdGhlIFdlYiBJREwgYW5kIEVDTUFTY3JpcHQgc2VtYW50aWNzLCBpbmNvbWluZyB2YWx1
ZXMgY2FuIGFsd2F5cyBiZSBjb252ZXJ0ZWQgdG8gYm90aAorICAgICAgICAgICAgIyBzdHJpbmdz
IGFuZCBudW1iZXJzLCBzbyBkbyBub3QgdGhyb3cgVHlwZUVycm9yIGlmIHRoZSBhcmd1bWVudCBp
cyBvZiB0aGVzZSB0eXBlcy4KKyAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlN0cmljdFR5cGVDaGVja2luZyJ9KSB7CisgICAgICAgICAg
ICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvRXJyb3IuaD4ifSA9IDE7CisKKyAgICAgICAg
ICAgICAgICBteSAkYXJnVmFsdWUgPSAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiOworICAg
ICAgICAgICAgICAgIGlmICghSXNOYXRpdmVUeXBlKCRhcmdUeXBlKSkgeworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+ICRhcmdzSW5kZXggJiYgISR7YXJnVmFsdWV9LmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgISR7
YXJnVmFsdWV9LmluaGVyaXRzKCZKUyR7YXJnVHlwZX06OnNfaW5mbykpXG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTtcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9t
U2lnbmF0dXJlKCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSgiIC4gSlNWYWx1ZVRvTmF0aXZlKCRwYXJh
bWV0ZXIsICJleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSIpIC4gIik7XG4iKTsKKworICAgICAg
ICAgICAgIyBJZiBhIHBhcmFtZXRlciBpcyAiYW4gaW5kZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0
IHNob3VsZCB0aHJvdyBhbiBJTkRFWF9TSVpFX0VSUiBleGNlcHRpb24uCisgICAgICAgICAgICAj
IEJ1dCB0aGlzIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhlIGJpbmRpbmdzLCBiZWNhdXNlIHRoZSB0
eXBlIGlzIHVuc2lnbmVkIGFuZCB0aGUgZmFjdCB0aGF0IGl0CisgICAgICAgICAgICAjIHdhcyBu
ZWdhdGl2ZSB3aWxsIGJlIGxvc3QgYnkgdGhlIHRpbWUgd2UncmUgaW5zaWRlIHRoZSBET00uCisg
ICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzSW5kZXgi
fSkgeworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoJG5hbWUg
PCAwKSB7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBJTkRFWF9TSVpFX0VSUik7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgfVxuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhl
IHR5cGUgY29udmVyc2lvbiBzdWNjZWVkZWQuCisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKVxuIik7CisgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7XG4iKTsKKworICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVO
ZWVkaW5nVGVhck9mZigkYXJnVHlwZSkgYW5kIG5vdCAkaW1wbENsYXNzTmFtZSA9fiAvTGlzdCQv
KSB7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghJG5hbWUp
IHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTtcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICB9XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICRmdW5jdGlv
blN0cmluZyAuPSAiLCAiIGlmICRwYXJhbUluZGV4OworCisgICAgICAgIGlmICgkYXJnVHlwZSBl
cSAiTm9kZUZpbHRlciIpIHsKKyAgICAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiJG5hbWUu
Z2V0KCkiOworICAgICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGlu
Z1RlYXJPZmYoJGFyZ1R5cGUpIGFuZCBub3QgJGltcGxDbGFzc05hbWUgPX4gL0xpc3QkLykgewor
ICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIkbmFtZS0+cHJvcGVydHlSZWZlcmVuY2Uo
KSI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gJG5h
bWU7CisgICAgICAgIH0KKyAgICAgICAgJGFyZ3NJbmRleCsrOworICAgICAgICAkcGFyYW1JbmRl
eCsrOworICAgIH0KKworICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ik5lZWRzVXNlckdlc3R1cmVDaGVjayJ9KSB7CisgICAgICAgICRmdW5jdGlvblN0
cmluZyAuPSAiLCAiIGlmICRwYXJhbUluZGV4OworICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0g
IlNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIjsKKyAgICAgICAgJHBh
cmFtSW5kZXgrKzsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siU2NyaXB0Q29udHJvbGxlci5oIn0g
PSAxOworICAgIH0KKworICAgIHJldHVybiAoJGZ1bmN0aW9uU3RyaW5nLCAkcGFyYW1JbmRleCk7
Cit9CisKIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCiB7CiAgICAgbXkgJG9iamVjdCA9IHNo
aWZ0OwpAQCAtMzE4Nyw5ICszMjA5LDYgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0
aW9uCiAgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CiAKICAgICBteSAkY29uc3RydWN0b3JDbGFz
c05hbWUgPSAiJHtjbGFzc05hbWV9Q29uc3RydWN0b3IiOwotICAgIG15ICRjYW5Db25zdHJ1Y3Qg
PSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYW5CZUNvbnN0cnVjdGVkIn07Ci0g
ICAgbXkgJGN1c3RvbUNvbnN0cnVjdG9yID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSlNDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkN1c3RvbUNvbnN0cnVjdG9yIn07Ci0gICAgbXkgJGNhbGxXaXRoID0gJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKICAgICBteSAkbnVtYmVyT2Zjb25zdHJ1
Y3RQYXJhbWV0ZXJzID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0
b3JQYXJhbWV0ZXJzIn07CiAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJjb25zdCBDbGFzc0lu
Zm8gJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OnNfaW5mbyA9IHsgXCIke3Zpc2libGVDbGFzc05h
bWV9Q29uc3RydWN0b3JcIiwgJkRPTUNvbnN0cnVjdG9yT2JqZWN0OjpzX2luZm8sICYke2NvbnN0
cnVjdG9yQ2xhc3NOYW1lfVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKCRjb25zdHJ1Y3Rv
ckNsYXNzTmFtZSkgfTtcblxuIik7CkBAIC0zMjIxLDE4ICszMjQwLDY4IEBAIHN1YiBHZW5lcmF0
ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbgogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1
cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPCR7Y29uc3RydWN0b3JDbGFzc05hbWV9LCBKU0RP
TVdyYXBwZXI+KGV4ZWMsICYke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfVRhYmxlLCB0aGlzLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxu
XG4iKTsKIAotICAgIGlmICgkY2FuQ29uc3RydWN0KSB7Ci0gICAgICAgIGlmICghJGN1c3RvbUNv
bnN0cnVjdG9yKSB7CisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNh
bkJlQ29uc3RydWN0ZWQifSkgeworICAgICAgICBpZiAoISgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkpIHsKICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNs
YXNzTmFtZX06OmNvbnN0cnVjdCR7Y2xhc3NOYW1lfShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgbXkgJGNv
bnN0cnVjdG9yQXJnID0gIiI7Ci0gICAgICAgICAgICBpZiAoJGNhbGxXaXRoIGFuZCAkY2FsbFdp
dGggZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiKSB7Ci0gICAgICAgICAgICAgICAgJGNvbnN0
cnVjdG9yQXJnID0gImNvbnRleHQiOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8JHtj
b25zdHJ1Y3RvckNsYXNzTmFtZX0qPihleGVjLT5jYWxsZWUoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBp
ZiAoIWNvbnRleHQpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhl
YywgXCJSZWZlcmVuY2UgZXJyb3JcIikpO1xuIik7CisKKyAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSoganNDb25zdHJ1Y3RvciA9IHN0
YXRpY19jYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oZXhlYy0+Y2FsbGVlKCkpO1xuIik7
CisKKyAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25z
dHJ1Y3RvciJ9KSB7CisgICAgICAgICAgICAgICAgbXkgJGZ1bmN0aW9uID0gJGRhdGFOb2RlLT5j
b25zdHJ1Y3RvcjsKKyAgICAgICAgICAgICAgICBteSBAY29uc3RydWN0b3JBcmdMaXN0OworCisg
ICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvRXJyb3IuaD4ifSA9IDE7CisK
KyAgICAgICAgICAgICAgICBHZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2soJG91dHB1dEFycmF5
LCAkZnVuY3Rpb24sICRkYXRhTm9kZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoQHskZnVuY3Rp
b24tPnJhaXNlc0V4Y2VwdGlvbnN9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkNvbnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3siRXhjZXB0aW9uQ29kZS5oIn0gPSAxOworICAgICAgICAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIEZvciBub3csIHdlIGRvIG5vdCBzdXBw
b3J0IFNWRyBjb25zdHJ1Y3RvcnMuCisgICAgICAgICAgICAgICAgIyBXZSBkbyBub3QgYWxzbyBz
dXBwb3J0IGEgY29uc3RydWN0b3IgW09wdGlvbmFsXSBhcmd1bWVudCB3aXRob3V0IENhbGxXaXRo
RGVmYXVsdFZhbHVlLgorICAgICAgICAgICAgICAgIG15ICRudW1QYXJhbWV0ZXJzID0gQHskZnVu
Y3Rpb24tPnBhcmFtZXRlcnN9OworICAgICAgICAgICAgICAgIG15ICgkZHVtbXksICRwYXJhbUlu
ZGV4KSA9IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrKCRvdXRwdXRBcnJheSwgJGZ1bmN0aW9uLCAk
ZGF0YU5vZGUsICRudW1QYXJhbWV0ZXJzLCAkaW50ZXJmYWNlTmFtZSwgImNvbnN0cnVjdG9yQ2Fs
bGJhY2siLCB1bmRlZiwgdW5kZWYsIHVuZGVmKTsKKworICAgICAgICAgICAgICAgIGlmICgkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9ICYmICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0gZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQi
KSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGNvbnN0cnVjdG9yQXJnTGlzdCwgImNvbnRl
eHQiKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmICghY29udGV4dClcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJl
bmNlRXJyb3IoZXhlYywgXCIke2ludGVyZmFjZU5hbWV9IGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQg
ZG9jdW1lbnQgaXMgdW5hdmFpbGFibGVcIikpO1xuIik7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgbXkgJGluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBmb3JlYWNoIG15
ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAgICAgICAgICAg
ICAgICBsYXN0IGlmICRpbmRleCBlcSAkcGFyYW1JbmRleDsKKyAgICAgICAgICAgICAgICAgICAg
cHVzaChAY29uc3RydWN0b3JBcmdMaXN0LCAkcGFyYW1ldGVyLT5uYW1lKTsKKyAgICAgICAgICAg
ICAgICAgICAgJGluZGV4Kys7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yUmFpc2VzRXhj
ZXB0aW9uIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAY29uc3RydWN0b3JBcmdMaXN0
LCAiZWMiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbXkgJGNvbnN0cnVj
dG9yQXJnID0gam9pbigiLCAiLCBAY29uc3RydWN0b3JBcmdMaXN0KTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPCR7aW50ZXJmYWNlTmFtZX0+IG9iamVj
dCA9ICR7aW50ZXJmYWNlTmFtZX06OmNyZWF0ZSgke2NvbnN0cnVjdG9yQXJnfSk7XG4iKTsKKyAg
ICAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3Ry
dWN0b3JSYWlzZXNFeGNlcHRpb24ifSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgaWYgKGVjKSB7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpO1xuIik7Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG15ICRjb25zdHJ1Y3RvckFyZyA9ICIiOworICAg
ICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0
aCJ9IGFuZCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9IGVxICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0IikgeworICAgICAgICAgICAgICAgICAgICAkY29uc3RydWN0
b3JBcmcgPSAiY29udGV4dCI7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8JHtj
b25zdHJ1Y3RvckNsYXNzTmFtZX0qPihleGVjLT5jYWxsZWUoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgaWYgKCFjb250ZXh0KVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSZWZlcmVuY2VF
cnJvcihleGVjLCBcIiR7aW50ZXJmYWNlTmFtZX0gY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1
bWVudCBpcyB1bmF2YWlsYWJsZVwiKSk7XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZlB0cjwke2ludGVyZmFjZU5hbWV9
PiBvYmplY3QgPSAke2ludGVyZmFjZU5hbWV9OjpjcmVhdGUoJHtjb25zdHJ1Y3RvckFyZ30pO1xu
Iik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PCR7
Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKSwg
JHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKCR7Y29uc3RydWN0b3JBcmd9KSkpKTtcbiIpOworCisg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBvYmpl
Y3QuZ2V0KCkpKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxu
Iik7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAppbmRleCBiYmU2MDZiZGMwYjA5
MzA2MDZkNTNkZTk3OWE1MzU0YWY4NTRmMDFjLi42N2ZlNTAzMTUwOGU4YmE5NTNjZDRmMzExY2Q1
YzYxYzVjNjgyY2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcApAQCAtMjQsNyArMjQsMTAgQEAK
IAogI2luY2x1ZGUgIkpTVGVzdEludGVyZmFjZS5oIgogCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIlRlc3RJbnRlcmZhY2Uu
aCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgog
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNzIsMzQgKzc1LDYgQEAgc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXNbXSA9CiAK
ICN1bmRlZiBUSFVOS19HRU5FUkFUT1IKIHN0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hU
YWJsZSBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlID0geyAxLCAwLCBKU1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07Ci1jbGFzcyBKU1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAg
IEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxP
YmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IqIGNyZWF0ZShK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yKiBwdHIgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3Ioc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGV4ZWMs
IGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRl
bnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYs
IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50
c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwotICAg
IHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0
SW50ZXJmYWNlKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5
cGUgZ2V0Q29uc3RydWN0RGF0YVZpcnR1YWwoSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci0gICAgc3Rh
dGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlND
OjpDb25zdHJ1Y3REYXRhJik7Ci19OwotCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciIsICZET01D
b25zdHJ1Y3Rvck9iamVjdDo6c19pbmZvLCAmSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JUYWJs
ZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcikgfTsK
IAogSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OkpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpA
QCAtMTI2LDEwICsxMDEsMjUgQEAgYm9vbCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QKIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0
SlNUZXN0SW50ZXJmYWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3Iq
PihleGVjLT5jYWxsZWUoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBKU1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgY29uc3QgU3RyaW5nJiBzdHIxKHVzdHJpbmdUb1N0cmluZyhleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICBjb25zdCBTdHJpbmcmIHN0cjIodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRv
U3RyaW5nKGV4ZWMpKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJSZWZlcmVuY2UgZXJyb3IiKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PEpTVGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKSwg
VGVzdEludGVyZmFjZTo6Y3JlYXRlKGNvbnRleHQpKSkpOworICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJUZXN0SW50ZXJmYWNlIGNv
bnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7CisgICAgUmVm
UHRyPFRlc3RJbnRlcmZhY2U+IG9iamVjdCA9IFRlc3RJbnRlcmZhY2U6OmNyZWF0ZShjb250ZXh0
LCBzdHIxLCBzdHIyLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
KyAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpz
Q29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7CiB9CiAKIENvbnN0
cnVjdFR5cGUgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGFWaXJ0
dWFsKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgKaW5kZXgg
NWJmZDg5ZjIyM2E3NWY4NTllN2YzM2NkYjI4MTg5NWEwYzc3OTAyZC4uZmFmYzE2ZjE3YjhmZGU2
YWI4ZTgzNDMxMzRjOTcyMzUxYWViZjg5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaApAQCAtODgsNiAr
ODgsMzQgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAorY2xhc3MgSlNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAg
ICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKiBjcmVhdGUo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvciogcHRyID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihleGVj
LCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
LCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNz
SW5mbyBzX2luZm87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVu
dHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAg
ICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVz
dEludGVyZmFjZShKU0M6OkV4ZWNTdGF0ZSopOworICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RU
eXBlIGdldENvbnN0cnVjdERhdGFWaXJ0dWFsKEpTQzo6Q29uc3RydWN0RGF0YSYpOworICAgIHN0
YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpT
Qzo6Q29uc3RydWN0RGF0YSYpOworfTsKKwogLy8gQXR0cmlidXRlcwogCiBKU0M6OkpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIuY3BwCmluZGV4IDNiZjQzODlkMjJiNjA4MDA1MWRlYmI0MzI2N2QwZDUwNTYy
YmUzYjguLjM5ZjdkOGEzODBiOWU3OWU4N2ExYzQyNWNkNmI0NWVmMGY5N2YxMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTczLDMxICs3Myw2
IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyQ29uc3RydWN0b3JUYWJsZVZhbHVlc1tdCiAKICN1bmRlZiBUSFVOS19HRU5FUkFUT1IKIHN0
YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyQ29uc3RydWN0b3JUYWJsZSA9IHsgMSwgMCwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKLWNsYXNzIEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1w
cml2YXRlOgotICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0
eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVj
dG9yKiBwdHIgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0
aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6
U3RydWN0dXJlRmxhZ3M7Ci19OwotCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNvbnN0cnVjdG9yIiwgJkRPTUNvbnN0cnVjdG9yT2JqZWN0OjpzX2luZm8sICZKU1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IpIH07CiAKIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6SlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lckNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQpAQCAtMjEyLDcgKzE4Nyw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+IGxpc3RlbmVyKE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXI6OmNyZWF0ZShTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPmFyZ3VtZW50KDApKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQogICAgIGltcC0+bWV0
aG9kKGxpc3RlbmVyKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKaW5kZXggNmMx
NDJlOWQ5ZmE2ZGYxNGU5OWNlZjc0MTMyNzgxZTJjOTY5NDIxNi4uNTcwNDRmYjM4OTBhNGMxMGEw
ZTY1YTUzNTZhOWM2ZWQ1ZmVmMjYxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5oCkBAIC04OCw2ICs4OCwzMSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKK2NsYXNzIEpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7
Citwcml2YXRlOgorICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0
cnVjdG9yKiBwdHIgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0
cjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBz
dGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVj
dDo6U3RydWN0dXJlRmxhZ3M7Cit9OworCiAvLyBGdW5jdGlvbnMKIAogSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCBjMDI0YTQ1MWQ3
OTAzMmZlYTU4ZjRiYTliMjg0OWZiZTUxMDYyNjhjLi5kZTk4YmFlZmVjZDBlYjM2ZTU5NDE3YzQz
Y2UzMWMxMmFmODA4MGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtMTc1LDMxICsxNzUsNiBAQCBDT01QSUxF
X0FTU0VSVCgweDAxID09IFRlc3RPYmo6OkNPTlNUX1ZBTFVFXzEyLCBUZXN0T2JqRW51bUNPTlNU
X1ZBTFVFXzEySXNXcm9uZwogQ09NUElMRV9BU1NFUlQoMFgyMCA9PSBUZXN0T2JqOjpDT05TVF9W
QUxVRV8xMywgVGVzdE9iakVudW1DT05TVF9WQUxVRV8xM0lzV3JvbmdVc2VEb250Q2hlY2tFbnVt
cyk7CiBDT01QSUxFX0FTU0VSVCgweDFhYmMgPT0gVGVzdE9iajo6Q09OU1RfVkFMVUVfMTQsIFRl
c3RPYmpFbnVtQ09OU1RfVkFMVUVfMTRJc1dyb25nVXNlRG9udENoZWNrRW51bXMpOwogCi1jbGFz
cyBKU1Rlc3RPYmpDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1w
cml2YXRlOgotICAgIEpTVGVzdE9iakNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0
b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0T2JqQ29uc3RydWN0b3IqIGNyZWF0ZShK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE9iakNvbnN0cnVj
dG9yKiBwdHIgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE9iakNvbnN0cnVjdG9yPigq
ZXhlYy0+aGVhcCgpKSkgSlNUZXN0T2JqQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci0g
ICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJv
cGVydHlTbG90Jik7Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNj
cmlwdG9yJik7Ci0gICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwotICAgIH0KLXByb3RlY3Rl
ZDoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9N
Q29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwotfTsKLQogY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdE9iakNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0T2JqQ29uc3RydWN0b3IiLCAm
RE9NQ29uc3RydWN0b3JPYmplY3Q6OnNfaW5mbywgJkpTVGVzdE9iakNvbnN0cnVjdG9yVGFibGUs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T2JqQ29uc3RydWN0b3IpIH07CiAKIEpTVGVz
dE9iakNvbnN0cnVjdG9yOjpKU1Rlc3RPYmpDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTEwNTcsNyArMTAzMiw2IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
b2lkTWV0aG9kKEV4ZWNTdGF0ZSogZXhlCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRl
c3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwot
CiAgICAgaW1wLT52b2lkTWV0aG9kKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KQEAgLTEwNzksNyArMTA1Myw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MoRXhl
Y1N0CiAgICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgyKSkpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLQogICAgIGltcC0+dm9pZE1ldGhvZFdpdGhBcmdzKGludEFy
Zywgc3RyQXJnLCBvYmpBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CkBAIC0xMDkzLDcgKzEwNjYsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW50TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19p
bmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKIAotCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+
aW50TWV0aG9kKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAg
LTExMTYsNyArMTA4OCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25JbnRNZXRob2RXaXRoQXJncyhFeGVjU3RhCiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCi0KICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5pbnRN
ZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgb2JqQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAtMTEzMCw3ICsxMTAxLDYgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZChFeGVj
U3RhdGUqIGV4ZWMKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZK
U1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9i
aio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0
b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPm9i
ak1ldGhvZCgpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAt
MTE1Myw3ICsxMTIzLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEV4ZWNTdGEKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPm9iak1ldGhvZFdpdGhBcmdzKGlu
dEFyZywgc3RyQXJnLCBvYmpBcmcpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwogfQpAQCAtMTE3NSw3ICsxMTQ0LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4
ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPm1ldGhvZFRo
YXRSZXF1aXJlc0FsbEFyZ3Moc3RyQXJnLCBvYmpBcmcpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogfQpAQCAtMTE5OCw3ICsxMTY2LDYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3MKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1
bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihp
bXAtPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Moc3RyQXJnLCBvYmpBcmcsIGVj
KSkpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwpAQCAtMTIxNSw3ICsxMTgyLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShFeGVj
U3RhdGUKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkQXJnKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotCiAgICAgaW1wLT5zZXJpYWxpemVkVmFsdWUoc2VyaWFsaXpl
ZEFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAg
LTEyMzEsNyArMTE5Nyw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25JZGJLZXkoRXhlY1N0YXRlKiBleGVjKQogICAgIFJlZlB0cjxJREJL
ZXk+IGtleShjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KICAgICBpbXAtPmlkYktleShrZXkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xMjU3LDcgKzEyMjIsNiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3B0aW9uc09iamVjdChFeGVjU3RhdGUqCiAgICAgT3B0aW9uc09iamVjdCogb29vKHRvT3B0aW9u
c09iamVjdChleGVjLT5hcmd1bWVudCgxKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQogICAg
IGltcC0+b3B0aW9uc09iamVjdChvbywgb29vKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTI3MSw3ICsxMjM1LDYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRp
b24oRXhlY1MKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rl
c3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+
KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0KICAgICBp
bXAtPm1ldGhvZFdpdGhFeGNlcHRpb24oZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTEzMTIs
NyArMTI3NSw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25DdXN0b21BcmdzQW5kRXhjZXB0aW9uKEV4CiAgICAgbG9nKiBpbnRBcmcodG9s
b2coZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KICAgICBpbXAt
PmN1c3RvbUFyZ3NBbmRFeGNlcHRpb24oaW50QXJnLCBzY3JpcHRBcmd1bWVudHMsIGNhbGxTdGFj
aywgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTEzNTksNyArMTMyMSw2IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1p
Y0ZyYW1lKEV4ZWNTdGF0CiAgICAgRnJhbWUqIGR5bmFtaWNGcmFtZSA9IHRvRHluYW1pY0ZyYW1l
KGV4ZWMpOwogICAgIGlmICghZHluYW1pY0ZyYW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCiAgICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lKGR5bmFt
aWNGcmFtZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
QEAgLTEzNzgsNyArMTMzOSw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lQW5kQXJnKEV4CiAgICAgaW50IGlu
dEFyZyhleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0KICAgICBpbXAtPndpdGhEeW5hbWljRnJhbWVBbmRBcmcoZHluYW1pY0ZyYW1lLCBpbnRB
cmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0x
NDA3LDcgKzEzNjcsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbgogICAgIGludCBvcHRpb25h
bEFyZyhleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0KICAgICBpbXAtPndpdGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZyhkeW5hbWljRnJh
bWUsIGludEFyZywgb3B0aW9uYWxBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CkBAIC0xNDI2LDcgKzEzODUsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFuZFVz
ZXJHZQogICAgIGludCBpbnRBcmcoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotCiAgICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdl
c3R1cmUoZHluYW1pY0ZyYW1lLCBpbnRBcmcsIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQpAQCAtMTQ1NSw3ICsxNDEzLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2UKICAgICBp
bnQgb3B0aW9uYWxBcmcoZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotCiAgICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVB
U0FEKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBvcHRpb25hbEFyZywgU2NyaXB0Q29udHJvbGxlcjo6
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CkBAIC0xNDY4LDcgKzE0MjUsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZChF
eGVjUwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+
KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Fz
dGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLQogICAgIGltcC0+d2l0aFNjcmlw
dFN0YXRlVm9pZChleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQpAQCAtMTQ4Miw3ICsxNDM4LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iaihFeGVjU3QKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5m
byk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMt
PmltcGwoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPndpdGhTY3JpcHRTdGF0ZU9i
aihleGVjKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTE0OTgsNyArMTQ1Myw2IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
U2NyaXB0U3RhdGVWb2lkRXhjZXB0CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotCiAgICAgaW1wLT53aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xNTE0LDcgKzE0NjgsNiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2Jq
RXhjZXB0aQogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCi0KICAgICBKU0M6OkpT
VmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RG
OjpnZXRQdHIoaW1wLT53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oZXhlYywgZWMpKSk7CiAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCkBAIC0xNTMzLDcgKzE0ODYsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleAogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KICAgICBpbXAtPndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KHNjcmlwdENvbnRleHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CkBAIC0xNTU2LDcgKzE1MDgsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJn
KEV4ZQogICAgIGludCBvcHQoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotCiAgICAgaW1wLT5tZXRob2RXaXRoT3B0aW9uYWxBcmcob3B0KTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTU4Miw3
ICsxNTMzLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0EKICAgICBpbnQgb3B0KGV4ZWMtPmFy
Z3VtZW50KDEpLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQogICAgIGlt
cC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0LCBvcHQpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNjExLDcg
KzE1NjEsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQQogICAgIGludCBvcHQyKGV4ZWMtPmFy
Z3VtZW50KDIpLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQogICAgIGlt
cC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKG5vbk9wdCwgb3B0
MSwgb3B0Mik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
QEAgLTE2MjksNyArMTU3OCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmcoRXhlCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogICAgIFJlZlB0cjxU
ZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChl
eGVjLT5hcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKLQogICAgIGlt
cC0+bWV0aG9kV2l0aENhbGxiYWNrQXJnKGNhbGxiYWNrKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTY1MCw3ICsxNTk4LDYgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0EKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICB9CiAgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RD
YWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCkpOwotCiAgICAgaW1wLT5tZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRD
YWxsYmFja0FyZyhub25DYWxsYmFjaywgY2FsbGJhY2spOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNjcxLDcgKzE2MTgsNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENh
bGxiYWNrQW5kT3B0aQogICAgICAgICB9CiAgICAgICAgIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJh
Y2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpKTsKICAgICB9Ci0KICAgICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlv
bmFsQXJnKGNhbGxiYWNrKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQpAQCAtMTY4Niw3ICsxNjMyLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMShFeGVjU3QKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5m
byk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMt
PmltcGwoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZyhleGVjLCBp
bXAtPmNvbmRpdGlvbmFsTWV0aG9kMSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CkBAIC0xNzAyLDcgKzE2NDcsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyKEV4ZWNTdAog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLQogICAgIGltcC0+Y29uZGl0aW9uYWxNZXRo
b2QyKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAg
LTE3MTgsNyArMTY2Miw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDMoRXhlY1N0CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVl
KSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2Jq
OjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOwotCiAgICAgaW1wLT5jb25kaXRpb25hbE1ldGhvZDMoKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTczOSw3ICsxNjgy
LDYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMSgKICAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyh1
c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0KICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnLCBzdHJB
cmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0x
NzY1LDcgKzE3MDcsNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKAogICAgIGludCBpbnRBcmco
ZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
CiAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZywgaW50QXJnKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTc4MSw3ICsxNzIyLDYgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kMygKICAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyh1c3RyaW5n
VG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0KICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qoc3RyQXJnKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTc5Nyw3ICsxNzM3LDYg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNCgKICAgICBpbnQgaW50QXJnKGV4ZWMtPmFyZ3VtZW50
KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQogICAgIGltcC0+b3Zl
cmxvYWRlZE1ldGhvZChpbnRBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CkBAIC0xODE1LDcgKzE3NTQsNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q1
KAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0K
ICAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVh
dGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSk7Ci0KICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2QoY2FsbGJhY2spOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xODQ2LDcgKzE3ODQsNiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xh
c3NNZXRob2QoRXhlY1N0YXRlKiBleAogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRp
Y19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0
T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLQog
ICAgIGltcC0+Y2xhc3NNZXRob2QoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQpAQCAtMTg3MSw3ICsxODA4LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFs
KEUKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXAtPmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKGFyZykpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAppbmRleCBjM2QxYjI0Y2JiMTcxYTY0ZjI2
OTIzZjg3ZmFlYjU3MWFkNWM4ZDMzLi5hN2YxMDJjZmM3YmFiYjI2ODlkOTE0MWEzZGQ1OWQ1MzM1
M2YxODFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5oCkBAIC0xMDIsNiArMTAyLDMxIEBAIHByb3RlY3RlZDoKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOwogfTsKIAorY2xhc3MgSlNUZXN0T2JqQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29u
c3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE9iakNv
bnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAg
ICBKU1Rlc3RPYmpDb25zdHJ1Y3RvciogcHRyID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RPYmpDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTVGVzdE9iakNvbnN0cnVjdG9yKHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihleGVj
LCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
LCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNz
SW5mbyBzX2luZm87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVu
dHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKK307
CisKIC8vIEZ1bmN0aW9ucwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3Bw
CmluZGV4IDJhZDYxMGJiNmI3NDFjMDFiODgzOWZkMmI4NjU0NWNlZmQxZGJmNjYuLjllZWMzMTg4
N2UzNGUzOGFmZmE4MzQwNjQzNmIzNjMwM2Y0ZTc1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC03NCwzMSArNzQs
NiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZQogCiAjdW5kZWYgVEhVTktfR0VORVJBVE9SCiBz
dGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZSA9IHsgMSwgMCwgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgMCB9OwotY2xhc3Mg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMg
RE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAg
ICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciogcHRy
ID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1
cm4gcHRyOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwot
ICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9y
T2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKLX07Ci0KIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yIiwgJkRPTUNvbnN0cnVjdG9y
T2JqZWN0OjpzX2luZm8sICZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25z
dHJ1Y3RvclRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKSB9OwogCiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ29uc3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmgKaW5kZXggZjFmYTRkNDRmMGJlNWEzMDYyYjZiOTcwOGE0ZWJhYWQz
Njc1Mzg3MS4uNDA5MGU1OTZkNDU3NWU2OTNjYWNhZDJmMGFjNzA4M2E5M2QyNTRkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaApA
QCAtODgsNiArODgsMzEgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAorY2xhc3MgSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29u
c3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJh
c2U7CisgICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0
cnVjdG9yKiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciogcHRyID0gbmV3
IChKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VD
b25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRy
OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0
YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0
OjpTdHJ1Y3R1cmVGbGFnczsKK307CisKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111180</attachid>
            <date>2011-10-16 07:03:56 -0700</date>
            <delta_ts>2011-10-16 16:29:14 -0700</delta_ts>
            <desc>Rebased patch for review</desc>
            <filename>bug-70101-20111016230354.patch</filename>
            <type>text/plain</type>
            <size>73128</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc1NzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZmIwYWZjZjMxZjBmMzJk
ZTE4MTg0MTU1MzIzOGUzMTY3NWE5ODk4Li45OGU1NTFhYWUxMTQzMWFkZjFhNjJkMjVkN2JiNTlk
OWMwNjg1OTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODggQEAKKzIwMTEtMTAtMTYgIEtlbnRh
cm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN1cHBvcnQgW0NvbnN0
cnVjdG9yXSBJREwgZm9yIEpTQy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcwMTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIHNwZWMgZm9yIFtDb25zdHJ1Y3Rvcl0gSURMIGlzIGhlcmU6IGh0dHA6
Ly93d3cudzMub3JnL1RSL1dlYklETC8jQ29uc3RydWN0b3IKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VkIFtDb25zdHJ1Y3Rvcl0gSURMIGZvciBKU0MuIFRoaXMgcGF0Y2ggYWxzbyBhZGRl
ZAorICAgICAgICBbQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb25dIGZvciBKU0MuIElmIFtDb25z
dHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbl0gaXMgc3BlY2lmaWVkLAorICAgICAgICBhIHBsYWNlaG9s
ZGVyIGZvciBFeGNlcHRpb25Db2RlIGlzIHBhc3NlZCB0byBYWFg6OmNyZWF0ZSgpLCBsaWtlIFhY
WDo6Y3JlYXRlKC4uLiwgZWMpLgorCisgICAgICAgIE5vdGVzOgorICAgICAgICAtIFdlIGRvIG5v
dCB5ZXQgc3VwcG9ydCBjb25zdHJ1Y3RvciBvdmVybG9hZGluZy4KKyAgICAgICAgLSBXZSBkbyBu
b3QgeWV0IHN1cHBvcnQgW09wdGlvbmFsXSB3aXRob3V0IENhbGxXaXRoRGVmYXVsdFZhbHVlIGZv
ciBjb25zdHJ1Y3RvciBhcmd1bWVudHMuCisKKyAgICAgICAgVGVzdHM6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW50ZXJmYWNlLmlkbAorICAgICAgICAgICAgICAg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVy
YXRlSGVhZGVyKTogR2VuZXJhdGVzIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uIGNvZGUgdG8gYSBo
ZWFkZXIgZmlsZSwgaWYgYSBnaXZlbiBET00gb2JqZWN0IGhhcyBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOiBVc2VzIEdlbmVyYXRlQXJndW1lbnRzQ291bnRD
aGVjaygpIGFuZCBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjaygpLgorICAgICAgICAoR2VuZXJhdGVB
cmd1bWVudHNDb3VudENoZWNrKTogU3BsaXRzIG91dCBvZiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
KCkgZm9yIHJldXNlLgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOiBTcGxpdHMg
b3V0IG9mIEdlbmVyYXRlSW1wbGVtZW50YXRpb24oKSBmb3IgcmV1c2UuCisgICAgICAgIChHZW5l
cmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6IEdlbmVyYXRlcyBjb25zdHJ1Y3RvciBkZWZpbml0
aW9uIGNvZGUuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVy
ZmFjZS5jcHA6IFVwZGF0ZWQgdGhlIHJ1bi1iaW5kaW5nLXRlc3RzIHJlc3VsdHMuCisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0SW50
ZXJmYWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJm
YWNlLmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2QpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFy
Z3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbnRNZXRo
b2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbnRNZXRo
b2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9iak1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9iak1ldGhvZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJv
d3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxp
emVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25J
ZGJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRp
b25zT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkN1c3RvbUFyZ3NBbmRFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1p
Y0ZyYW1lQW5kQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNG
cmFtZUFuZFVzZXJHZXN0dXJlQVNBRCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWQpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmopOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNj
cmlwdFN0YXRlT2JqRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0
aW9uYWxBcmdBbmRPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhD
YWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9u
YWxBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25k
aXRpb25hbE1ldGhvZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db25kaXRpb25hbE1ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDMpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kNCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q1KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ2xhc3NNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE9iakNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6IERpdHRvLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorCiAyMDExLTEwLTE2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgQWx3YXlzIGVuYWJsZSBFTkFCTEUoRE9NX1NUT1JBR0UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmlu
ZGV4IDA3NGMzZWVlNTIwNTQwZDVhYmY2YzlmYjdlNTE3OTQ0ODkyZGUyOGIuLmI5ZGYzZDNhYjEy
MWU3OGU2MjAxZWEwYWY0Yjg4MWM1ZmI1ZTM4YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0xMDc5LDEyICsxMDc5LDEx
IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG5c
biIpOwogCi0gICAgIyBDb25kaXRpb25hbGx5IGVtaXQgdGhlIGNvbnN0cnVjdG9yIG9iamVjdCdz
IGRlY2xhcmF0aW9uCi0gICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpT
Q3VzdG9tQ29uc3RydWN0b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21Db25zdHJ1Y3RvciJ9KSB7CisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkpTQ3VzdG9tQ29uc3RydWN0b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJPbWl0Q29uc3RydWN0b3IifSkgeworICAgICAgICAkaGVhZGVySW5jbHVkZXN7IkpT
RE9NQmluZGluZy5oIn0gPSAxOwogICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRp
b24oXEBoZWFkZXJDb250ZW50LCAkY2xhc3NOYW1lLCAkZGF0YU5vZGUpOwogICAgIH0KIAotCiAg
ICAgaWYgKCRudW1GdW5jdGlvbnMgPiAwKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
Ii8vIEZ1bmN0aW9uc1xuXG4iKTsKICAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRh
dGFOb2RlLT5mdW5jdGlvbnN9KSB7CkBAIC0xMzcyLDggKzEzNzEsNiBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGNvZGVHZW5lcmF0b3It
PkdlbmVyYXRlQ29tcGlsZVRpbWVDaGVja0ZvckVudW1zSWZOZWVkZWQoJGRhdGFOb2RlKSk7CiAK
ICAgICAgICAgbXkgJHByb3RvQ2xhc3NOYW1lID0gIiR7Y2xhc3NOYW1lfVByb3RvdHlwZSI7Ci0K
LSAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKFxAaW1wbENvbnRlbnQsICRj
bGFzc05hbWUsICRkYXRhTm9kZSkgdW5sZXNzICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSk7CiAgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JE
ZWZpbml0aW9uKFxAaW1wbENvbnRlbnQsICRjbGFzc05hbWUsICRwcm90b0NsYXNzTmFtZSwgJGlu
dGVyZmFjZU5hbWUsICR2aXNpYmxlQ2xhc3NOYW1lLCAkZGF0YU5vZGUpOwogICAgIH0KIApAQCAt
MjAzNywzMyArMjAzNCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9wZXJ0eVR5cGUmIHBvZElt
cCA9IGltcC0+cHJvcGVydHlSZWZlcmVuY2UoKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIG15ICRudW1QYXJhbWV0ZXJzID0gQHskZnVuY3Rpb24tPnBhcmFtZXRl
cnN9OwotCi0gICAgICAgICAgICAgICAgbXkgJHJlcXVpcmVzQWxsQXJndW1lbnRzOwotICAgICAg
ICAgICAgICAgIG15ICRyZXF1aXJlc0FsbEFyZ3VtZW50c0RlZmF1bHQgPSAiIjsKLSAgICAgICAg
ICAgICAgICBpZiAoISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkxlZ2FjeURlZmF1
bHRPcHRpb25hbEFyZ3VtZW50cyJ9KSB7Ci0gICAgICAgICAgICAgICAgICAgICRyZXF1aXJlc0Fs
bEFyZ3VtZW50c0RlZmF1bHQgPSAiUmFpc2UiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAkcmVxdWlyZXNBbGxBcmd1bWVudHMgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IlJlcXVpcmVzQWxsQXJndW1lbnRzIn0gfHwgJHJlcXVpcmVzQWxs
QXJndW1lbnRzRGVmYXVsdDsKLSAgICAgICAgICAgICAgICBpZiAoJHJlcXVpcmVzQWxsQXJndW1l
bnRzKSB7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRudW1NYW5kYXRvcnlQYXJhbXMgPSBAeyRm
dW5jdGlvbi0+cGFyYW1ldGVyc307Ci0gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBh
cmFtIChyZXZlcnNlKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICgkcGFyYW0tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25hbCJ9KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG51bU1hbmRhdG9yeVBhcmFtcy0tOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGlmICgkbnVtTWFuZGF0b3J5UGFyYW1zID4gMCkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8ICRudW1NYW5kYXRvcnlQYXJhbXMp
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcmVxdWlyZXNBbGxBcmd1bWVudHMg
ZXEgIlJhaXNlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCBcIk5vdCBlbm91Z2ggYXJndW1lbnRzXCIpKTtcbiIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEdlbmVyYXRlQXJndW1lbnRzQ291bnRDaGVj
ayhcQGltcGxDb250ZW50LCAkZnVuY3Rpb24sICRkYXRhTm9kZSk7CiAKICAgICAgICAgICAgICAg
ICBpZiAoQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9KSB7CiAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIik7CkBA
IC0yMDgwLDE1MSArMjA1MSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICAgICAgfSBlbHNpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgZXEgInJlbW92ZUV2
ZW50TGlzdGVuZXIiKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBH
ZW5lcmF0ZUV2ZW50TGlzdGVuZXJDYWxsKCRjbGFzc05hbWUsICJyZW1vdmUiKSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbXkgJGFyZ3NJbmRleCA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIG15ICRwYXJhbUluZGV4ID0gMDsKLSAgICAgICAgICAgICAg
ICAgICAgbXkgJGZ1bmN0aW9uU3RyaW5nID0gKCgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5
cGUgYW5kICEkc3ZnTGlzdFByb3BlcnR5VHlwZSkgPyAicG9kSW1wLiIgOiAiaW1wLT4iKSAuICRm
dW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoIjsKLSAgICAgICAgICAgICAgICAgICAgbXkg
JGhhc09wdGlvbmFsQXJndW1lbnRzID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoJGZ1
bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Bcmd1bWVudEhh
bmRsaW5nIn0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+IHNjcmlwdEFyZ3VtZW50cyhjcmVhdGVTY3JpcHRB
cmd1bWVudHMoZXhlYywgJG51bVBhcmFtZXRlcnMpKTtcbiIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc2l6ZV90IG1heFN0YWNrU2l6ZSA9IGltcC0+
c2hvdWxkQ2FwdHVyZUZ1bGxTdGFja1RyYWNlKCkgPyBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxT
dGFja1NpemVUb0NhcHR1cmUgOiAxO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrKGV4ZWMsIG1heFN0YWNrU2l6ZSkpO1xuIik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRBcmd1bWVudHMuaCJ9ID0gMTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlNjcmlwdENhbGxTdGFjay5oIn0g
PSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siU2NyaXB0Q2FsbFN0
YWNrRmFjdG9yeS5oIn0gPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgbXkgJGNhbGxXaXRoID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDYWxsV2l0aCJ9OwotICAgICAgICAgICAgICAgICAgICBpZiAoJGNhbGxXaXRo
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBteSAkY2FsbFdpdGhBcmcgPSAiQ09NUElMRV9B
U1NFUlQoZmFsc2UpIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY2FsbFdpdGggZXEg
IkR5bmFtaWNGcmFtZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBGcmFtZSogZHluYW1pY0ZyYW1lID0gdG9EeW5hbWljRnJhbWUoZXhlYyk7
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoIWR5bmFtaWNGcmFtZSlcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNhbGxXaXRoQXJnID0g
ImR5bmFtaWNGcmFtZSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2lmICgkY2FsbFdp
dGggZXEgIlNjcmlwdFN0YXRlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjYWxs
V2l0aEFyZyA9ICJleGVjIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRjYWxs
V2l0aCBlcSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dCIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7XG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXNjcmlw
dENvbnRleHQpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjYWxsV2l0aEFyZyA9ICJzY3JpcHRDb250
ZXh0IjsgCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAkZnVuY3Rpb25TdHJpbmcgLj0gIiwgIiBpZiAkcGFyYW1JbmRleDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAkY2FsbFdpdGhBcmc7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAkcGFyYW1JbmRleCsrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siRXhjZXB0aW9uQ29kZS5oIn0gPSAxOwotICAg
ICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+cGFy
YW1ldGVyc30pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICMgT3B0aW9uYWwgY2FsbGJhY2tz
IHNob3VsZCBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LCBiZWNhdXNlIHRoZXkgYWx3YXlzIGhhdmUg
YSBkZWZhdWx0IHZhbHVlICgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIHdlIGNh
biByZWR1Y2UgdGhlIG51bWJlciBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucyB0aGF0IHRha2UgYSBk
aWZmZXJlbnQgbnVtYmVyIG9mIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAj
IE9wdGlvbmFsIGFyZ3VtZW50cyB3aXRoIGRlZmF1bHQgdmFsdWVzIFtPcHRpb25hbD1DYWxsV2l0
aERlZmF1bHRWYWx1ZV0gc2hvdWxkIG5vdCBnZW5lcmF0ZSBhbiBlYXJseSBjYWxsLgotICAgICAg
ICAgICAgICAgICAgICAgICAgbXkgJG9wdGlvbmFsID0gJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ik9wdGlvbmFsIn07ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgkb3B0aW9uYWwgJiYgJG9wdGlvbmFsIG5lICJDYWxsV2l0aERlZmF1bHRWYWx1ZSIgJiYgISRw
YXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIyBHZW5lcmF0ZSBlYXJseSBjYWxsIGlmIHRoZXJlIGFyZSBlbm91
Z2ggcGFyYW1ldGVycy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRoYXNPcHRp
b25hbEFyZ3VtZW50cykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIlxuICAgIHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50
KCk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhhc09wdGlvbmFsQXJn
dW1lbnRzID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGFyZ3NDb3VudCA8PSAk
YXJnc0luZGV4KSB7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uRnVuY3Rpb25DYWxsKCRmdW5jdGlvbiwgJGZ1bmN0aW9uU3RyaW5nLCAkcGFy
YW1JbmRleCwgIiAgICAiIHggMiwgJHN2Z1Byb3BlcnR5VHlwZSwgJGltcGxDbGFzc05hbWUpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cblxu
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IG15ICRuYW1lID0gJHBhcmFtZXRlci0+bmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG15
ICRhcmdUeXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRwYXJhbWV0ZXItPnR5cGUp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIlhQYXRoTlNSZXNv
bHZlciIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiBjdXN0b21SZXNvbHZlcjtcbiIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFhQYXRoTlNSZXNv
bHZlciogcmVzb2x2ZXIgPSB0b1hQYXRoTlNSZXNvbHZlcihleGVjLT5hcmd1bWVudCgkYXJnc0lu
ZGV4KSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoIXJlc29sdmVyKSB7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgY3VzdG9tUmVzb2x2ZXIgPSBKU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpKTtc
biIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVzb2x2ZXIgPSBjdXN0b21SZXNvbHZlci5nZXQo
KTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIH1cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRlci0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBteSAkY2FsbGJhY2tDbGFzc05hbWUgPSBHZXRDYWxsYmFja0NsYXNzTmFtZSgkYXJn
VHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siJGNhbGxi
YWNrQ2xhc3NOYW1lLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRw
YXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25hbCJ9KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwkYXJn
VHlwZT4gJG5hbWU7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+ICRhcmdzSW5kZXgg
JiYgIWV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHtcbiIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5pc09iamVjdCgpKSB7XG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgfVxu
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICAkbmFtZSA9ICR7Y2FsbGJhY2tDbGFzc05hbWV9OjpjcmVhdGUoYXNPYmplY3QoZXhl
Yy0+YXJndW1lbnQoJGFyZ3NJbmRleCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7XG4i
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgfVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8PSAkYXJnc0luZGV4IHx8ICFleGVjLT5hcmd1bWVudCgkYXJnc0lu
ZGV4KS5pc09iamVjdCgpKSB7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01J
U01BVENIX0VSUik7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgfVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIFJlZlB0cjwkYXJnVHlwZT4gJG5hbWUgPSAke2NhbGxiYWNrQ2xhc3NO
YW1lfTo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpKSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAjIElmIHRoZSAiU3RyaWN0VHlwZUNoZWNraW5nIiBleHRlbmRlZCBhdHRyaWJ1dGUg
aXMgcHJlc2VudCwgYW5kIHRoZSBhcmd1bWVudCdzIHR5cGUgaXMgYW4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAjIGludGVyZmFjZSB0eXBlLCB0aGVuIGlmIHRoZSBpbmNvbWluZyB2YWx1
ZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhhdCBpbnRlcmZhY2UsIGEgVHlwZUVycm9yCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIyBpcyB0aHJvd24gcmF0aGVyIHRoYW4gc2lsZW50bHkgcGFz
c2luZyBOVUxMIHRvIHRoZSBDKysgY29kZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAj
IFBlciB0aGUgV2ViIElETCBhbmQgRUNNQVNjcmlwdCBzZW1hbnRpY3MsIGluY29taW5nIHZhbHVl
cyBjYW4gYWx3YXlzIGJlIGNvbnZlcnRlZCB0byBib3RoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyBzdHJpbmdzIGFuZCBudW1iZXJzLCBzbyBkbyBub3QgdGhyb3cgVHlwZUVycm9yIGlm
IHRoZSBhcmd1bWVudCBpcyBvZiB0aGVzZSB0eXBlcy4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJTdHJp
Y3RUeXBlQ2hlY2tpbmcifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1w
bEluY2x1ZGVzeyI8cnVudGltZS9FcnJvci5oPiJ9ID0gMTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBteSAkYXJnVmFsdWUgPSAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCki
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlzTmF0aXZlVHlwZSgkYXJn
VHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAkYXJnc0luZGV4ICYmICEk
e2FyZ1ZhbHVlfS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICEke2FyZ1ZhbHVlfS5pbmhlcml0cygm
SlMke2FyZ1R5cGV9OjpzX2luZm8pKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYyk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICIgLiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFy
YW1ldGVyKSAuICIgJG5hbWUoIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAiZXhlYy0+
YXJndW1lbnQoJGFyZ3NJbmRleCkiKSAuICIpO1xuIik7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAjIElmIGEgcGFyYW1ldGVyIGlzICJhbiBpbmRleCIgYW5kIGl0J3MgbmVnYXRpdmUg
aXQgc2hvdWxkIHRocm93IGFuIElOREVYX1NJWkVfRVJSIGV4Y2VwdGlvbi4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAjIEJ1dCB0aGlzIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhlIGJpbmRp
bmdzLCBiZWNhdXNlIHRoZSB0eXBlIGlzIHVuc2lnbmVkIGFuZCB0aGUgZmFjdCB0aGF0IGl0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3YXMgbmVnYXRpdmUgd2lsbCBiZSBsb3N0IGJ5
IHRoZSB0aW1lIHdlJ3JlIGluc2lkZSB0aGUgRE9NLgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSXNJbmRleCJ9KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
ICgkbmFtZSA8IDApIHtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIElOREVYX1NJWkVf
RVJSKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICB9XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSB0eXBlIGNvbnZlcnNpb24gc3VjY2VlZGVkLgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSlcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpO1xuIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPklzU1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCRhcmdUeXBlKSBhbmQgbm90ICRpbXBsQ2xh
c3NOYW1lID1+IC9MaXN0JC8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKCEkbmFtZSkge1xuIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBhcmFtSW5kZXg7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgkYXJnVHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIiRuYW1lLmdldCgpIjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVOZWVk
aW5nVGVhck9mZigkYXJnVHlwZSkgYW5kIG5vdCAkaW1wbENsYXNzTmFtZSA9fiAvTGlzdCQvKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIkbmFtZS0+
cHJvcGVydHlSZWZlcmVuY2UoKSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAkbmFtZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICRhcmdzSW5k
ZXgrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbUluZGV4Kys7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOZWVkc1VzZXJHZXN0dXJlQ2hlY2sifSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBhcmFtSW5k
ZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIlNjcmlwdENv
bnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICRwYXJhbUluZGV4Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVz
eyJTY3JpcHRDb250cm9sbGVyLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgICAgICAgICAg
ICAgICAgIG15ICRudW1QYXJhbWV0ZXJzID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9OworICAg
ICAgICAgICAgICAgICAgICBteSAoJGZ1bmN0aW9uU3RyaW5nLCAkcGFyYW1JbmRleCkgPSBHZW5l
cmF0ZVBhcmFtZXRlcnNDaGVjayhcQGltcGxDb250ZW50LCAkZnVuY3Rpb24sICRkYXRhTm9kZSwg
JG51bVBhcmFtZXRlcnMsICRpbXBsQ2xhc3NOYW1lLCAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5h
bWUsICRzdmdQcm9wZXJ0eVR5cGUsICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSwgJHN2
Z0xpc3RQcm9wZXJ0eVR5cGUpOwogICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uRnVuY3Rpb25DYWxsKCRmdW5jdGlvbiwgJGZ1bmN0aW9uU3RyaW5nLCAkcGFyYW1JbmRl
eCwgIiAgICAiLCAkc3ZnUHJvcGVydHlUeXBlLCAkaW1wbENsYXNzTmFtZSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjQxOSw2ICsyMjQ3LDIwMCBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtj
b25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAorc3ViIEdl
bmVyYXRlQXJndW1lbnRzQ291bnRDaGVjaworeworICAgIG15ICRvdXRwdXRBcnJheSA9IHNoaWZ0
OworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0Owor
CisgICAgbXkgJHJlcXVpcmVzQWxsQXJndW1lbnRzOworICAgIG15ICRyZXF1aXJlc0FsbEFyZ3Vt
ZW50c0RlZmF1bHQgPSAiIjsKKyAgICBpZiAoISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkxlZ2FjeURlZmF1bHRPcHRpb25hbEFyZ3VtZW50cyJ9KSB7CisgICAgICAgICRyZXF1aXJl
c0FsbEFyZ3VtZW50c0RlZmF1bHQgPSAiUmFpc2UiOworICAgIH0KKyAgICAkcmVxdWlyZXNBbGxB
cmd1bWVudHMgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJl
cXVpcmVzQWxsQXJndW1lbnRzIn0gfHwgJHJlcXVpcmVzQWxsQXJndW1lbnRzRGVmYXVsdDsKKyAg
ICBpZiAoJHJlcXVpcmVzQWxsQXJndW1lbnRzKSB7CisgICAgICAgIG15ICRudW1NYW5kYXRvcnlQ
YXJhbXMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CisgICAgICAgIGZvcmVhY2ggbXkgJHBh
cmFtIChyZXZlcnNlKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkpIHsKKyAgICAgICAgICAgIGlm
ICgkcGFyYW0tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25hbCJ9KSB7CisgICAgICAgICAg
ICAgICAgJG51bU1hbmRhdG9yeVBhcmFtcy0tOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBsYXN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICgk
bnVtTWFuZGF0b3J5UGFyYW1zID49IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgJG51bU1hbmRhdG9y
eVBhcmFtcylcbiIpOworICAgICAgICAgICAgaWYgKCRyZXF1aXJlc0FsbEFyZ3VtZW50cyBlcSAi
UmFpc2UiKSB7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBcIk5vdCBlbm91
Z2ggYXJndW1lbnRzXCIpKTtcbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K
Kworc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCit7CisgICAgbXkgJG91dHB1dEFycmF5ID0g
c2hpZnQ7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hp
ZnQ7CisgICAgbXkgJG51bVBhcmFtZXRlcnMgPSBzaGlmdDsKKyAgICBteSAkaW1wbENsYXNzTmFt
ZSA9IHNoaWZ0OworICAgIG15ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSA9IHNoaWZ0Owor
ICAgIG15ICRzdmdQcm9wZXJ0eVR5cGUgPSBzaGlmdDsKKyAgICBteSAkc3ZnUHJvcGVydHlPckxp
c3RQcm9wZXJ0eVR5cGUgPSBzaGlmdDsKKyAgICBteSAkc3ZnTGlzdFByb3BlcnR5VHlwZSA9IHNo
aWZ0OworCisgICAgbXkgJHBhcmFtSW5kZXggPSAwOworICAgIG15ICRhcmdzSW5kZXggPSAwOwor
ICAgIG15ICRoYXNPcHRpb25hbEFyZ3VtZW50cyA9IDA7CisKKyAgICBteSAkZnVuY3Rpb25TdHJp
bmcgPSAoKCRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSBhbmQgISRzdmdMaXN0UHJvcGVy
dHlUeXBlKSA/ICJwb2RJbXAuIiA6ICJpbXAtPiIpIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25O
YW1lIC4gIigiOworCisgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tQXJndW1lbnRIYW5kbGluZyJ9KSB7CisgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBzY3JpcHRBcmd1bWVudHMoY3Jl
YXRlU2NyaXB0QXJndW1lbnRzKGV4ZWMsICRudW1QYXJhbWV0ZXJzKSk7XG4iKTsKKyAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIHNpemVfdCBtYXhTdGFja1NpemUgPSBpbXAtPnNob3Vs
ZENhcHR1cmVGdWxsU3RhY2tUcmFjZSgpID8gU2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tT
aXplVG9DYXB0dXJlIDogMTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFjayhl
eGVjLCBtYXhTdGFja1NpemUpKTtcbiIpOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRB
cmd1bWVudHMuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siU2NyaXB0Q2FsbFN0YWNr
LmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlNjcmlwdENhbGxTdGFja0ZhY3Rvcnku
aCJ9ID0gMTsKKyAgICB9CisKKyAgICBteSAkY2FsbFdpdGggPSAkZnVuY3Rpb24tPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn07CisgICAgaWYgKCRjYWxsV2l0aCBh
bmQgISRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0
b3IifSkgeworICAgICAgICBteSAkY2FsbFdpdGhBcmcgPSAiQ09NUElMRV9BU1NFUlQoZmFsc2Up
IjsKKyAgICAgICAgaWYgKCRjYWxsV2l0aCBlcSAiRHluYW1pY0ZyYW1lIikgeworICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEZyYW1lKiBkeW5hbWljRnJhbWUgPSB0b0R5bmFt
aWNGcmFtZShleGVjKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGlmICghZHluYW1pY0ZyYW1lKVxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAg
ICAgICAgICAgICRjYWxsV2l0aEFyZyA9ICJkeW5hbWljRnJhbWUiOworICAgICAgICB9IGVsc2lm
ICgkY2FsbFdpdGggZXEgIlNjcmlwdFN0YXRlIikgeworICAgICAgICAgICAgJGNhbGxXaXRoQXJn
ID0gImV4ZWMiOworICAgICAgICB9IGVsc2lmICgkY2FsbFdpdGggZXEgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQiKSB7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFz
Y3JpcHRDb250ZXh0KVxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAg
ICAgICRjYWxsV2l0aEFyZyA9ICJzY3JpcHRDb250ZXh0IjsgCisgICAgICAgIH0KKyAgICAgICAg
JGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBhcmFtSW5kZXg7CisgICAgICAgICRmdW5jdGlv
blN0cmluZyAuPSAkY2FsbFdpdGhBcmc7CisgICAgICAgICRwYXJhbUluZGV4Kys7CisgICAgfQor
CisgICAgJGltcGxJbmNsdWRlc3siRXhjZXB0aW9uQ29kZS5oIn0gPSAxOworICAgICRpbXBsSW5j
bHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOworCisgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVy
IChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKyAgICAgICAgIyBPcHRpb25hbCBjYWxsYmFj
a3Mgc2hvdWxkIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHksIGJlY2F1c2UgdGhleSBhbHdheXMgaGF2
ZSBhIGRlZmF1bHQgdmFsdWUgKDApLAorICAgICAgICAjIGFuZCB3ZSBjYW4gcmVkdWNlIHRoZSBu
dW1iZXIgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMgdGhhdCB0YWtlIGEgZGlmZmVyZW50IG51bWJl
ciBvZiBwYXJhbWV0ZXJzLgorICAgICAgICAjIE9wdGlvbmFsIGFyZ3VtZW50cyB3aXRoIFtPcHRp
b25hbD1DYWxsV2l0aERlZmF1bHRWYWx1ZV0gc2hvdWxkIG5vdCBnZW5lcmF0ZSBhbiBlYXJseSBj
YWxsLgorICAgICAgICBteSAkb3B0aW9uYWwgPSAkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiT3B0aW9uYWwifTsKKyAgICAgICAgaWYgKCRvcHRpb25hbCAmJiAkb3B0aW9uYWwgbmUg
IkNhbGxXaXRoRGVmYXVsdFZhbHVlIiAmJiAhJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkNhbGxiYWNrIn0pIHsKKyAgICAgICAgICAgICMgR2VuZXJhdGUgZWFybHkgY2FsbCBpZiB0
aGVyZSBhcmUgZW5vdWdoIHBhcmFtZXRlcnMuCisgICAgICAgICAgICBpZiAoISRoYXNPcHRpb25h
bEFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxuICAg
IHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7XG4iKTsKKyAgICAgICAg
ICAgICAgICAkaGFzT3B0aW9uYWxBcmd1bWVudHMgPSAxOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChhcmdzQ291bnQgPD0gJGFyZ3NJbmRl
eCkge1xuIik7CisgICAgICAgICAgICBHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25DYWxs
KCRmdW5jdGlvbiwgJGZ1bmN0aW9uU3RyaW5nLCAkcGFyYW1JbmRleCwgIiAgICAiIHggMiwgJHN2
Z1Byb3BlcnR5VHlwZSwgJGltcGxDbGFzc05hbWUpOworICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIH1cblxuIik7CisgICAgICAgIH0KKworICAgICAgICBteSAkbmFtZSA9ICRw
YXJhbWV0ZXItPm5hbWU7CisgICAgICAgIG15ICRhcmdUeXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0
cmlwTW9kdWxlKCRwYXJhbWV0ZXItPnR5cGUpOworCisgICAgICAgIGlmICgkYXJnVHlwZSBlcSAi
WFBhdGhOU1Jlc29sdmVyIikgeworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IFJlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IGN1c3RvbVJlc29sdmVyO1xuIik7CisgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciA9IHRv
WFBhdGhOU1Jlc29sdmVyKGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpKTtcbiIpOworICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghcmVzb2x2ZXIpIHtcbiIpOworICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBjdXN0b21SZXNvbHZlciA9IEpT
Q3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoJGFyZ3NJ
bmRleCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSlcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtc
biIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXNvbHZlciA9
IGN1c3RvbVJlc29sdmVyLmdldCgpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgfVxuIik7CisgICAgICAgIH0gZWxzaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDYWxsYmFjayJ9KSB7CisgICAgICAgICAgICBteSAkY2FsbGJhY2tDbGFzc05h
bWUgPSBHZXRDYWxsYmFja0NsYXNzTmFtZSgkYXJnVHlwZSk7CisgICAgICAgICAgICAkaW1wbElu
Y2x1ZGVzeyIkY2FsbGJhY2tDbGFzc05hbWUuaCJ9ID0gMTsKKyAgICAgICAgICAgIGlmICgkcGFy
YW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiT3B0aW9uYWwifSkgeworICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+ICRuYW1lO1xuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPiAkYXJnc0luZGV4ICYmICFleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgICAgIGlmICghZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNPYmplY3Qo
KSkge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTtcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIH1cbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgJG5hbWUgPSAke2NhbGxiYWNrQ2xhc3NOYW1lfTo6Y3JlYXRlKGFzT2Jq
ZWN0KGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAkYXJnc0luZGV4IHx8ICFleGVj
LT5hcmd1bWVudCgkYXJnc0luZGV4KS5pc09iamVjdCgpKSB7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBF
X01JU01BVENIX0VSUik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7CisgICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZlB0cjwkYXJnVHlwZT4gJG5hbWUgPSAk
e2NhbGxiYWNrQ2xhc3NOYW1lfTo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KCRhcmdz
SW5kZXgpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAjIElmIHRoZSAiU3RyaWN0VHlwZUNoZWNr
aW5nIiBleHRlbmRlZCBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgYW5kIHRoZSBhcmd1bWVudCdzIHR5
cGUgaXMgYW4KKyAgICAgICAgICAgICMgaW50ZXJmYWNlIHR5cGUsIHRoZW4gaWYgdGhlIGluY29t
aW5nIHZhbHVlIGRvZXMgbm90IGltcGxlbWVudCB0aGF0IGludGVyZmFjZSwgYSBUeXBlRXJyb3IK
KyAgICAgICAgICAgICMgaXMgdGhyb3duIHJhdGhlciB0aGFuIHNpbGVudGx5IHBhc3NpbmcgTlVM
TCB0byB0aGUgQysrIGNvZGUuCisgICAgICAgICAgICAjIFBlciB0aGUgV2ViIElETCBhbmQgRUNN
QVNjcmlwdCBzZW1hbnRpY3MsIGluY29taW5nIHZhbHVlcyBjYW4gYWx3YXlzIGJlIGNvbnZlcnRl
ZCB0byBib3RoCisgICAgICAgICAgICAjIHN0cmluZ3MgYW5kIG51bWJlcnMsIHNvIGRvIG5vdCB0
aHJvdyBUeXBlRXJyb3IgaWYgdGhlIGFyZ3VtZW50IGlzIG9mIHRoZXNlIHR5cGVzLgorICAgICAg
ICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiU3Ry
aWN0VHlwZUNoZWNraW5nIn0pIHsKKyAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyI8cnVu
dGltZS9FcnJvci5oPiJ9ID0gMTsKKworICAgICAgICAgICAgICAgIG15ICRhcmdWYWx1ZSA9ICJl
eGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSI7CisgICAgICAgICAgICAgICAgaWYgKCFJc05hdGl2
ZVR5cGUoJGFyZ1R5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gJGFyZ3NJbmRleCAmJiAhJHthcmdW
YWx1ZX0uaXNVbmRlZmluZWRPck51bGwoKSAmJiAhJHthcmdWYWx1ZX0uaW5oZXJpdHMoJkpTJHth
cmdUeXBlfTo6c19pbmZvKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAi
ICRuYW1lKCIgLiBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImV4ZWMtPmFyZ3VtZW50KCRh
cmdzSW5kZXgpIikgLiAiKTtcbiIpOworCisgICAgICAgICAgICAjIElmIGEgcGFyYW1ldGVyIGlz
ICJhbiBpbmRleCIgYW5kIGl0J3MgbmVnYXRpdmUgaXQgc2hvdWxkIHRocm93IGFuIElOREVYX1NJ
WkVfRVJSIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgICMgQnV0IHRoaXMgbmVlZHMgdG8gYmUgZG9u
ZSBpbiB0aGUgYmluZGluZ3MsIGJlY2F1c2UgdGhlIHR5cGUgaXMgdW5zaWduZWQgYW5kIHRoZSBm
YWN0IHRoYXQgaXQKKyAgICAgICAgICAgICMgd2FzIG5lZ2F0aXZlIHdpbGwgYmUgbG9zdCBieSB0
aGUgdGltZSB3ZSdyZSBpbnNpZGUgdGhlIERPTS4KKyAgICAgICAgICAgIGlmICgkcGFyYW1ldGVy
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSXNJbmRleCJ9KSB7CisgICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIGlmICgkbmFtZSA8IDApIHtcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIElO
REVYX1NJWkVfRVJSKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworICAg
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgdHlwZSBjb252ZXJzaW9uIHN1Y2NlZWRl
ZC4KKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworCisgICAgICAgICAg
ICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCRhcmdUeXBlKSBh
bmQgbm90ICRpbXBsQ2xhc3NOYW1lID1+IC9MaXN0JC8pIHsKKyAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCEkbmFtZSkge1xuIik7CisgICAgICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9N
SVNNQVRDSF9FUlIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBhcmFt
SW5kZXg7CisKKyAgICAgICAgaWYgKCRhcmdUeXBlIGVxICJOb2RlRmlsdGVyIikgeworICAgICAg
ICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIkbmFtZS5nZXQoKSI7CisgICAgICAgIH0gZWxzaWYg
KCRjb2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigkYXJnVHlwZSkgYW5kIG5v
dCAkaW1wbENsYXNzTmFtZSA9fiAvTGlzdCQvKSB7CisgICAgICAgICAgICAkZnVuY3Rpb25TdHJp
bmcgLj0gIiRuYW1lLT5wcm9wZXJ0eVJlZmVyZW5jZSgpIjsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAkbmFtZTsKKyAgICAgICAgfQorICAgICAgICAk
YXJnc0luZGV4Kys7CisgICAgICAgICRwYXJhbUluZGV4Kys7CisgICAgfQorCisgICAgaWYgKCRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmVlZHNVc2VyR2VzdHVy
ZUNoZWNrIn0pIHsKKyAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBhcmFtSW5k
ZXg7CisgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCkiOworICAgICAgICAkcGFyYW1JbmRleCsrOworICAgICAgICAkaW1w
bEluY2x1ZGVzeyJTY3JpcHRDb250cm9sbGVyLmgifSA9IDE7CisgICAgfQorCisgICAgcmV0dXJu
ICgkZnVuY3Rpb25TdHJpbmcsICRwYXJhbUluZGV4KTsKK30KKwogc3ViIEdlbmVyYXRlQ2FsbGJh
Y2tIZWFkZXIKIHsKICAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CkBAIC0zMjEyLDkgKzMyMzQsNiBA
QCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24KICAgICBteSAkZGF0YU5vZGUgPSBz
aGlmdDsKIAogICAgIG15ICRjb25zdHJ1Y3RvckNsYXNzTmFtZSA9ICIke2NsYXNzTmFtZX1Db25z
dHJ1Y3RvciI7Ci0gICAgbXkgJGNhbkNvbnN0cnVjdCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNhbkJlQ29uc3RydWN0ZWQifTsKLSAgICBteSAkY3VzdG9tQ29uc3RydWN0b3Ig
PSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0g
fHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifTsK
LSAgICBteSAkY2FsbFdpdGggPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxs
V2l0aCJ9OwogICAgIG15ICRudW1iZXJPZmNvbnN0cnVjdFBhcmFtZXRlcnMgPSAkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclBhcmFtZXRlcnMifTsKIAogICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgImNvbnN0IENsYXNzSW5mbyAke2NvbnN0cnVjdG9yQ2xhc3NOYW1l
fTo6c19pbmZvID0geyBcIiR7dmlzaWJsZUNsYXNzTmFtZX1Db25zdHJ1Y3RvclwiLCAmRE9NQ29u
c3RydWN0b3JPYmplY3Q6OnNfaW5mbywgJiR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoJGNvbnN0cnVjdG9yQ2xhc3NOYW1lKSB9O1xuXG4iKTsKQEAg
LTMyNTEsMTggKzMyNzAsNjggQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uCiAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0
b3I8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0sIEpTRE9NV3JhcHBlcj4oZXhlYywgJiR7Y29uc3Ry
dWN0b3JDbGFzc05hbWV9VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4i
KTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwogCi0gICAgaWYgKCRjYW5Db25z
dHJ1Y3QpIHsKLSAgICAgICAgaWYgKCEkY3VzdG9tQ29uc3RydWN0b3IpIHsKKyAgICBpZiAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FuQmVDb25zdHJ1Y3RlZCJ9KSB7CisgICAg
ICAgIGlmICghKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tQ29uc3Ry
dWN0b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1
Y3RvciJ9KSkgewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Y29uc3RydWN0JHtjbGFz
c05hbWV9KEV4ZWNTdGF0ZSogZXhlYylcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAie1xuIik7Ci0gICAgICAgICAgICBteSAkY29uc3RydWN0b3JBcmcgPSAiIjsKLSAgICAg
ICAgICAgIGlmICgkY2FsbFdpdGggYW5kICRjYWxsV2l0aCBlcSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCIpIHsKLSAgICAgICAgICAgICAgICAkY29uc3RydWN0b3JBcmcgPSAiY29udGV4dCI7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KGV4
ZWMtPmNhbGxlZSgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7Ci0gICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghY29udGV4dClcbiIpOwotICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCBcIlJlZmVyZW5jZSBlcnJvclwiKSk7
XG4iKTsKKworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICR7Y29uc3RydWN0
b3JDbGFzc05hbWV9KiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8JHtjb25zdHJ1Y3RvckNs
YXNzTmFtZX0qPihleGVjLT5jYWxsZWUoKSk7XG4iKTsKKworICAgICAgICAgICAgaWYgKCRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yIn0pIHsKKyAgICAgICAgICAg
ICAgICBteSAkZnVuY3Rpb24gPSAkZGF0YU5vZGUtPmNvbnN0cnVjdG9yOworICAgICAgICAgICAg
ICAgIG15IEBjb25zdHJ1Y3RvckFyZ0xpc3Q7CisKKyAgICAgICAgICAgICAgICAkaW1wbEluY2x1
ZGVzeyI8cnVudGltZS9FcnJvci5oPiJ9ID0gMTsKKworICAgICAgICAgICAgICAgIEdlbmVyYXRl
QXJndW1lbnRzQ291bnRDaGVjaygkb3V0cHV0QXJyYXksICRmdW5jdGlvbiwgJGRhdGFOb2RlKTsK
KworICAgICAgICAgICAgICAgIGlmIChAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30gfHwg
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRp
b24ifSkgeworICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2Rl
LmgifSA9IDE7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICMgRm9yIG5vdywgd2UgZG8gbm90IHN1cHBvcnQgU1ZHIGNvbnN0cnVjdG9ycy4KKyAg
ICAgICAgICAgICAgICAjIFdlIGRvIG5vdCBhbHNvIHN1cHBvcnQgYSBjb25zdHJ1Y3RvciBbT3B0
aW9uYWxdIGFyZ3VtZW50IHdpdGhvdXQgQ2FsbFdpdGhEZWZhdWx0VmFsdWUuCisgICAgICAgICAg
ICAgICAgbXkgJG51bVBhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CisgICAg
ICAgICAgICAgICAgbXkgKCRkdW1teSwgJHBhcmFtSW5kZXgpID0gR2VuZXJhdGVQYXJhbWV0ZXJz
Q2hlY2soJG91dHB1dEFycmF5LCAkZnVuY3Rpb24sICRkYXRhTm9kZSwgJG51bVBhcmFtZXRlcnMs
ICRpbnRlcmZhY2VOYW1lLCAiY29uc3RydWN0b3JDYWxsYmFjayIsIHVuZGVmLCB1bmRlZiwgdW5k
ZWYpOworCisgICAgICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkNhbGxXaXRoIn0gJiYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdp
dGgifSBlcSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dCIpIHsKKyAgICAgICAgICAgICAgICAgICAg
cHVzaChAY29uc3RydWN0b3JBcmdMaXN0LCAiY29udGV4dCIpOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCA9IGpzQ29uc3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFjb250ZXh0KVxuIik7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCBcIiR7aW50ZXJm
YWNlTmFtZX0gY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZVwi
KSk7XG4iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBteSAkaW5kZXgg
PSAwOworICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQHskZnVuY3Rpb24t
PnBhcmFtZXRlcnN9KSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3QgaWYgJGluZGV4IGVxICRw
YXJhbUluZGV4OworICAgICAgICAgICAgICAgICAgICBwdXNoKEBjb25zdHJ1Y3RvckFyZ0xpc3Qs
ICRwYXJhbWV0ZXItPm5hbWUpOworICAgICAgICAgICAgICAgICAgICAkaW5kZXgrKzsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb24ifSkgeworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBjb25zdHJ1Y3RvckFyZ0xpc3QsICJlYyIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBteSAkY29uc3RydWN0b3JBcmcgPSBqb2luKCIsICIsIEBjb25z
dHJ1Y3RvckFyZ0xpc3QpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBSZWZQdHI8JHtpbnRlcmZhY2VOYW1lfT4gb2JqZWN0ID0gJHtpbnRlcmZhY2VOYW1lfTo6Y3Jl
YXRlKCR7Y29uc3RydWN0b3JBcmd9KTtcbiIpOworICAgICAgICAgICAgICAgIGlmICgkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbiJ9KSB7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoZWMpIHtc
biIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgbXkgJGNvbnN0cnVjdG9yQXJnID0gIiI7CisgICAgICAgICAgICAgICAgaWYgKCRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0gYW5kICRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0gZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiKSB7
CisgICAgICAgICAgICAgICAgICAgICRjb25zdHJ1Y3RvckFyZyA9ICJjb250ZXh0IjsKKyAgICAg
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KGV4
ZWMtPmNhbGxlZSgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7CisgICAgICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWNvbnRleHQpXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsIFwiJHtpbnRlcmZhY2VO
YW1lfSBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlXCIpKTtc
biIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgUmVmUHRyPCR7aW50ZXJmYWNlTmFtZX0+IG9iamVjdCA9ICR7aW50ZXJmYWNlTmFt
ZX06OmNyZWF0ZSgke2NvbnN0cnVjdG9yQXJnfSk7XG4iKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFz
T2JqZWN0KHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihl
eGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLCAke2ludGVyZmFjZU5hbWV9OjpjcmVhdGUo
JHtjb25zdHJ1Y3RvckFyZ30pKSkpO1xuIik7CisKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywganND
b25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5nZXQoKSkpKTtcbiIpOwogICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKICAgICAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJm
YWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bnRlcmZhY2UuY3BwCmluZGV4IGM5YjU2OGI0MmIzY2I5MTMxMGQ3MDdlYTJlYWU2MzNjNmZkZDg3
OTQuLjAwNDFjNDliYmQwZThkNWJjZTVjOWI3YWZhN2QxN2JmZDU2OWUxZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bnRlcmZhY2UuY3BwCkBAIC0yNCw3ICsyNCwxMCBAQAogCiAjaW5jbHVkZSAiSlNUZXN0SW50ZXJm
YWNlLmgiCiAKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiVGVzdEludGVyZmFjZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJy
b3IuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBA
IC03MiwzNSArNzUsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KIAogI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgog
c3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yVGFibGUgPSB7IDEsIDAsIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVWYWx1
ZXMsIDAgfTsKLWNsYXNzIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNv
bnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6
Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQot
ICAgIHsKLSAgICAgICAgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoSlND
OjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkp
KSBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0g
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
cmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
VmlydHVhbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJv
cGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlND
ZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3Jp
cHRvciYpOwotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNv
bnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdEludGVyZmFjZShKU0M6OkV4ZWNT
dGF0ZSopOwotICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGFW
aXJ0dWFsKEpTQzo6Q29uc3RydWN0RGF0YSYpOwotICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5
cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwot
fTsKLQogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpzX2luZm8g
PSB7ICJUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IiLCAmRE9NQ29uc3RydWN0b3JPYmplY3Q6OnNf
aW5mbywgJkpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yVGFibGUsIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IpIH07CiAKIEpTVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTEzMiwxMCArMTA2LDI1IEBA
IGJvb2wgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdEludGVyZmFjZShFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHN0
YXRpY19jYXN0PEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3Iq
IGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcio+
KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5v
dCBlbm91Z2ggYXJndW1lbnRzIikpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGNv
bnN0IFN0cmluZyYgc3RyMSh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYykpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgY29uc3QgU3RyaW5nJiBzdHIy
KHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSkpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0g
anNDb25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4
dCkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJv
cihleGVjLCAiUmVmZXJlbmNlIGVycm9yIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YXNPYmplY3QodG9KUyhleGVjLCBzdGF0aWNfY2FzdDxKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
cio+KGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCksIFRlc3RJbnRlcmZhY2U6OmNyZWF0
ZShjb250ZXh0KSkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVS
ZWZlcmVuY2VFcnJvcihleGVjLCAiVGVzdEludGVyZmFjZSBjb25zdHJ1Y3RvciBhc3NvY2lhdGVk
IGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIikpOworICAgIFJlZlB0cjxUZXN0SW50ZXJmYWNlPiBv
YmplY3QgPSBUZXN0SW50ZXJmYWNlOjpjcmVhdGUoY29udGV4dCwgc3RyMSwgc3RyMiwgZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxP
YmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhVmlydHVhbChDb25zdHJ1Y3REYXRhJiBj
b25zdHJ1Y3REYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCmluZGV4IGQwOGE5NDhiMmZlNzE5NDA0MTFj
ZjZjYjM1MzE3ZTc2OWE2ZjJmYzYuLjcxNTFmYjI5YTkzMDgzYzU2NDE1YjFlZTcxNjFiOGRiNWJl
YTBkOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgKQEAgLTg5LDYgKzg5LDM1IEBAIHByb3RlY3RlZDoK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFnczsKIH07CiAKK2NsYXNzIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yIDogcHVibGlj
IERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitw
dWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRp
YyBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IqIHB0ciA9IG5l
dyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I+KCpleGVjLT5o
ZWFwKCkpKSBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90VmlydHVhbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpT
Qzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
Qzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6
OlByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5
RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Cisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICB9Citwcm90
ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8
IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICBzdGF0aWMgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdEludGVyZmFjZShKU0M6
OkV4ZWNTdGF0ZSopOworICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVj
dERhdGFWaXJ0dWFsKEpTQzo6Q29uc3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBKU0M6OkNvbnN0
cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0
YSYpOworfTsKKwogLy8gQXR0cmlidXRlcwogCiBKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRl
bnRpZmllciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3Bw
CmluZGV4IGExYzY0MmU0ZDdmOGM3NjJlYzFhNmM1N2JlMjk2NzUzNmJkZjRiMWQuLjg0NzFmYWRm
YzExYjg5YWM1NDYxY2ZjNDY1NDdjNmE1YzU2YWQwZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTczLDMyICs3Myw2IEBAIHN0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3JU
YWJsZVZhbHVlc1tdCiAKICN1bmRlZiBUSFVOS19HRU5FUkFUT1IKIHN0YXRpYyBKU0NfQ09OU1Rf
SEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0
b3JUYWJsZSA9IHsgMSwgMCwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9y
VGFibGVWYWx1ZXMsIDAgfTsKLWNsYXNzIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25z
dHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0
cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAg
ICAgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcg
KEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rv
cj4oKmV4ZWMtPmhlYXAoKSkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rv
cihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
ZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90VmlydHVhbChKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6
OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVG
bGFnczsKLX07Ci0KIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3Ry
dWN0b3IiLCAmRE9NQ29uc3RydWN0b3JPYmplY3Q6OnNfaW5mbywgJkpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJDb25zdHJ1Y3RvclRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcikgfTsKIAogSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29u
c3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCkBAIC0yMzAsNyArMjA0LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2QKICAgICBS
ZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbGlzdGVuZXIoTWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcjo6Y3JlYXRlKFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1l
bnQoMCkpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCiAgICAgaW1wLT5tZXRob2QobGlzdGVu
ZXIpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAppbmRleCA5YjdlMzYyNGQ0YjVm
YmVjMGY0OWJhYThlOWQ5Y2IyZDg2Njk5OTk2Li42N2ZlMWQ4N2Y3MGJmM2U4NGQyNGIyYWExYTg2
NTEwOTIxYzJjNzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
LmgKQEAgLTkwLDYgKzkwLDMyIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAorY2xhc3MgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6
CisgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYg
RE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisg
ICAgeworICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IqIHB0
ciA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNv
bnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNv
bnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0K
KworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RWaXJ0dWFsKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGlj
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0
cnVjdHVyZUZsYWdzOworfTsKKwogLy8gRnVuY3Rpb25zCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rp
b25NZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggZmE2ZDA4ZGVkNGM2NTE0
NzA3YTllMmMyNjAxMDUyMDEzNjY0NDE1My4uNDhkNTVmN2M4M2EwMGUwNmIxYTdjYmY4NTIyYjcz
YTQ2N2ExMDg1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTE3NSwzMiArMTc1LDYgQEAgQ09NUElMRV9BU1NF
UlQoMHgwMSA9PSBUZXN0T2JqOjpDT05TVF9WQUxVRV8xMiwgVGVzdE9iakVudW1DT05TVF9WQUxV
RV8xMklzV3JvbmcKIENPTVBJTEVfQVNTRVJUKDBYMjAgPT0gVGVzdE9iajo6Q09OU1RfVkFMVUVf
MTMsIFRlc3RPYmpFbnVtQ09OU1RfVkFMVUVfMTNJc1dyb25nVXNlRG9udENoZWNrRW51bXMpOwog
Q09NUElMRV9BU1NFUlQoMHgxYWJjID09IFRlc3RPYmo6OkNPTlNUX1ZBTFVFXzE0LCBUZXN0T2Jq
RW51bUNPTlNUX1ZBTFVFXzE0SXNXcm9uZ1VzZURvbnRDaGVja0VudW1zKTsKIAotY2xhc3MgSlNU
ZXN0T2JqQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0
ZToKLSAgICBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdE9iakNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RPYmpDb25zdHJ1Y3Rvciog
cHRyID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPYmpDb25zdHJ1Y3Rvcj4oKmV4ZWMt
PmhlYXAoKSkpIEpTVGVzdE9iakNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOwotICAgICAg
ICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RWaXJ0dWFsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJv
cGVydHlTbG90Jik7Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNj
cmlwdG9yJik7Ci0gICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwotICAgIH0KLXByb3RlY3Rl
ZDoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9N
Q29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwotfTsKLQogY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdE9iakNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0T2JqQ29uc3RydWN0b3IiLCAm
RE9NQ29uc3RydWN0b3JPYmplY3Q6OnNfaW5mbywgJkpTVGVzdE9iakNvbnN0cnVjdG9yVGFibGUs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T2JqQ29uc3RydWN0b3IpIH07CiAKIEpTVGVz
dE9iakNvbnN0cnVjdG9yOjpKU1Rlc3RPYmpDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTEwNzUsNyArMTA0OSw2IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
b2lkTWV0aG9kKEV4ZWNTdGF0ZSogZXhlCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRl
c3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwot
CiAgICAgaW1wLT52b2lkTWV0aG9kKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KQEAgLTEwOTcsNyArMTA3MCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MoRXhl
Y1N0CiAgICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgyKSkpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLQogICAgIGltcC0+dm9pZE1ldGhvZFdpdGhBcmdzKGludEFy
Zywgc3RyQXJnLCBvYmpBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CkBAIC0xMTExLDcgKzEwODMsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW50TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19p
bmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKIAotCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+
aW50TWV0aG9kKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAg
LTExMzQsNyArMTEwNSw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25JbnRNZXRob2RXaXRoQXJncyhFeGVjU3RhCiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCi0KICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5pbnRN
ZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgb2JqQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAtMTE0OCw3ICsxMTE4LDYgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZChFeGVj
U3RhdGUqIGV4ZWMKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZK
U1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9i
aio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0
b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPm9i
ak1ldGhvZCgpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAt
MTE3MSw3ICsxMTQwLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEV4ZWNTdGEKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPm9iak1ldGhvZFdpdGhBcmdzKGlu
dEFyZywgc3RyQXJnLCBvYmpBcmcpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwogfQpAQCAtMTE5Myw3ICsxMTYxLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4
ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPm1ldGhvZFRo
YXRSZXF1aXJlc0FsbEFyZ3Moc3RyQXJnLCBvYmpBcmcpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogfQpAQCAtMTIxNiw3ICsxMTgzLDYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3MKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1
bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihp
bXAtPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Moc3RyQXJnLCBvYmpBcmcsIGVj
KSkpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwpAQCAtMTIzMyw3ICsxMTk5LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShFeGVj
U3RhdGUKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkQXJnKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotCiAgICAgaW1wLT5zZXJpYWxpemVkVmFsdWUoc2VyaWFsaXpl
ZEFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAg
LTEyNDksNyArMTIxNCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25JZGJLZXkoRXhlY1N0YXRlKiBleGVjKQogICAgIFJlZlB0cjxJREJL
ZXk+IGtleShjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KICAgICBpbXAtPmlkYktleShrZXkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xMjc1LDcgKzEyMzksNiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3B0aW9uc09iamVjdChFeGVjU3RhdGUqCiAgICAgT3B0aW9uc09iamVjdCogb29vKHRvT3B0aW9u
c09iamVjdChleGVjLT5hcmd1bWVudCgxKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQogICAg
IGltcC0+b3B0aW9uc09iamVjdChvbywgb29vKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTI4OSw3ICsxMjUyLDYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRp
b24oRXhlY1MKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rl
c3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+
KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0KICAgICBp
bXAtPm1ldGhvZFdpdGhFeGNlcHRpb24oZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTEzMzAs
NyArMTI5Miw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25DdXN0b21BcmdzQW5kRXhjZXB0aW9uKEV4CiAgICAgbG9nKiBpbnRBcmcodG9s
b2coZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KICAgICBpbXAt
PmN1c3RvbUFyZ3NBbmRFeGNlcHRpb24oaW50QXJnLCBzY3JpcHRBcmd1bWVudHMsIGNhbGxTdGFj
aywgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTEzNzcsNyArMTMzOCw2IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1p
Y0ZyYW1lKEV4ZWNTdGF0CiAgICAgRnJhbWUqIGR5bmFtaWNGcmFtZSA9IHRvRHluYW1pY0ZyYW1l
KGV4ZWMpOwogICAgIGlmICghZHluYW1pY0ZyYW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCiAgICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lKGR5bmFt
aWNGcmFtZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
QEAgLTEzOTYsNyArMTM1Niw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lQW5kQXJnKEV4CiAgICAgaW50IGlu
dEFyZyhleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0KICAgICBpbXAtPndpdGhEeW5hbWljRnJhbWVBbmRBcmcoZHluYW1pY0ZyYW1lLCBpbnRB
cmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0x
NDI1LDcgKzEzODQsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbgogICAgIGludCBvcHRpb25h
bEFyZyhleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0KICAgICBpbXAtPndpdGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZyhkeW5hbWljRnJh
bWUsIGludEFyZywgb3B0aW9uYWxBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CkBAIC0xNDQ0LDcgKzE0MDIsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFuZFVz
ZXJHZQogICAgIGludCBpbnRBcmcoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotCiAgICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdl
c3R1cmUoZHluYW1pY0ZyYW1lLCBpbnRBcmcsIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQpAQCAtMTQ3Myw3ICsxNDMwLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2UKICAgICBp
bnQgb3B0aW9uYWxBcmcoZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotCiAgICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVB
U0FEKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBvcHRpb25hbEFyZywgU2NyaXB0Q29udHJvbGxlcjo6
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CkBAIC0xNDg2LDcgKzE0NDIsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZChF
eGVjUwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+
KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Fz
dGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLQogICAgIGltcC0+d2l0aFNjcmlw
dFN0YXRlVm9pZChleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQpAQCAtMTUwMCw3ICsxNDU1LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iaihFeGVjU3QKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5m
byk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMt
PmltcGwoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPndpdGhTY3JpcHRTdGF0ZU9i
aihleGVjKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTE1MTYsNyArMTQ3MCw2IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
U2NyaXB0U3RhdGVWb2lkRXhjZXB0CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotCiAgICAgaW1wLT53aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xNTMyLDcgKzE0ODUsNiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2Jq
RXhjZXB0aQogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCi0KICAgICBKU0M6OkpT
VmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RG
OjpnZXRQdHIoaW1wLT53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oZXhlYywgZWMpKSk7CiAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCkBAIC0xNTUxLDcgKzE1MDMsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleAogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KICAgICBpbXAtPndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KHNjcmlwdENvbnRleHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CkBAIC0xNTc0LDcgKzE1MjUsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJn
KEV4ZQogICAgIGludCBvcHQoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotCiAgICAgaW1wLT5tZXRob2RXaXRoT3B0aW9uYWxBcmcob3B0KTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTYwMCw3
ICsxNTUwLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0EKICAgICBpbnQgb3B0KGV4ZWMtPmFy
Z3VtZW50KDEpLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQogICAgIGlt
cC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0LCBvcHQpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNjI5LDcg
KzE1NzgsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQQogICAgIGludCBvcHQyKGV4ZWMtPmFy
Z3VtZW50KDIpLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQogICAgIGlt
cC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKG5vbk9wdCwgb3B0
MSwgb3B0Mik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
QEAgLTE2NDcsNyArMTU5NSw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmcoRXhlCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogICAgIFJlZlB0cjxU
ZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChl
eGVjLT5hcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKLQogICAgIGlt
cC0+bWV0aG9kV2l0aENhbGxiYWNrQXJnKGNhbGxiYWNrKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTY2OCw3ICsxNjE1LDYgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0EKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICB9CiAgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RD
YWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCkpOwotCiAgICAgaW1wLT5tZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRD
YWxsYmFja0FyZyhub25DYWxsYmFjaywgY2FsbGJhY2spOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNjg5LDcgKzE2MzUsNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENh
bGxiYWNrQW5kT3B0aQogICAgICAgICB9CiAgICAgICAgIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJh
Y2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpKTsKICAgICB9Ci0KICAgICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlv
bmFsQXJnKGNhbGxiYWNrKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQpAQCAtMTcwNCw3ICsxNjQ5LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMShFeGVjU3QKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5m
byk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMt
PmltcGwoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZyhleGVjLCBp
bXAtPmNvbmRpdGlvbmFsTWV0aG9kMSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CkBAIC0xNzIwLDcgKzE2NjQsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyKEV4ZWNTdAog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLQogICAgIGltcC0+Y29uZGl0aW9uYWxNZXRo
b2QyKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAg
LTE3MzYsNyArMTY3OSw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDMoRXhlY1N0CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVl
KSk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2Jq
OjpzX2luZm8pOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOwotCiAgICAgaW1wLT5jb25kaXRpb25hbE1ldGhvZDMoKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTc1Nyw3ICsxNjk5
LDYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMSgKICAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyh1
c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0KICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnLCBzdHJB
cmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0x
NzgzLDcgKzE3MjQsNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKAogICAgIGludCBpbnRBcmco
ZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
CiAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZywgaW50QXJnKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTc5OSw3ICsxNzM5LDYgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kMygKICAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyh1c3RyaW5n
VG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0KICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qoc3RyQXJnKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTgxNSw3ICsxNzU0LDYg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNCgKICAgICBpbnQgaW50QXJnKGV4ZWMtPmFyZ3VtZW50
KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQogICAgIGltcC0+b3Zl
cmxvYWRlZE1ldGhvZChpbnRBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CkBAIC0xODMzLDcgKzE3NzEsNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q1
KAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0K
ICAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVh
dGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSk7Ci0KICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2QoY2FsbGJhY2spOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xODY0LDcgKzE4MDEsNiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xh
c3NNZXRob2QoRXhlY1N0YXRlKiBleAogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRp
Y19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKICAgICBUZXN0
T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLQog
ICAgIGltcC0+Y2xhc3NNZXRob2QoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQpAQCAtMTg4OSw3ICsxODI1LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFs
KEUKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLQogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXAtPmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKGFyZykpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAppbmRleCBjMTNjYmZlMDc2ZGExMjA5NTg5
N2NlMzIwODllODliOTNhZmI3ZTU1Li45MWI1NTU2YWMwYzM0NjU2ZTVlMjkyYWI1MzJlOTZhZDcz
ZGJhNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5oCkBAIC0xMDQsNiArMTA0LDMyIEBAIHByb3RlY3RlZDoKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOwogfTsKIAorY2xhc3MgSlNUZXN0T2JqQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29u
c3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE9iakNv
bnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAg
ICBKU1Rlc3RPYmpDb25zdHJ1Y3RvciogcHRyID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RPYmpDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTVGVzdE9iakNvbnN0cnVjdG9yKHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihleGVj
LCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RWaXJ0dWFsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIGNvbnN0IEpTQzo6
Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1w
bGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdz
OworfTsKKwogLy8gRnVuY3Rpb25zCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5jcHAKaW5kZXggN2YxYjkzYTAzNTllMzY1NTczMzgxNzA1M2I1OGM2NDhhM2QzZmQ1Mi4uYzk4
YzU2M2MzNjdiYjBiMGI5NGJmZTM4M2Q3NDhiYjhmYjk4NTJhNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTc0LDMy
ICs3NCw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlCiAKICN1bmRlZiBUSFVOS19HRU5FUkFU
T1IKIHN0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlID0geyAxLCAwLCBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07Ci1j
bGFzcyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciA6IHB1
YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0
b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7
Ci0gICAgICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9y
KiBwdHIgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwot
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xv
dFZpcnR1YWwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlBy
b3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpT
Q2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Ci0gICAgfQotcHJvdGVjdGVk
OgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01D
b25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Ci19OwotCiBjb25zdCBDbGFzc0luZm8g
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OnNfaW5mbyA9
IHsgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciIsICZET01D
b25zdHJ1Y3Rvck9iamVjdDo6c19pbmZvLCAmSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcikgfTsKIAogSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OkpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCmluZGV4IDUxZTY4YmUwNTAxNjg0NmMwMTZiMDdk
ZDU2ZTdlNjE1M2I5OGE5NjIuLjRlOGQzYjhkZjRiMWExMmZhM2ZjNmJkNzY5NDI5MTgyZDZkOTNm
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmgKQEAgLTg5LDYgKzg5LDMyIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKK2Ns
YXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yIDogcHVi
bGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
ck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsK
KyAgICAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3Iq
IHB0ciA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
cmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
VmlydHVhbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlND
ZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3Jp
cHRvciYpOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICB9Citwcm90ZWN0ZWQ6
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNv
bnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKK307CisKIC8vIEF0dHJpYnV0ZXMKIAog
SlNDOjpKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>