<?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>75900</bug_id>
          
          <creation_ts>2012-01-09 16:07:00 -0800</creation_ts>
          <short_desc>run-bindings-tests should exercise all the IDL attributes we use</short_desc>
          <delta_ts>2012-01-09 17:57:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>532604</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-09 16:07:00 -0800</bug_when>
    <thetext>run-bindings-tests should exercise all the IDL attributes we use</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532606</commentid>
    <comment_count>1</comment_count>
      <attachid>121747</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-09 16:09:30 -0800</bug_when>
    <thetext>Created attachment 121747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532609</commentid>
    <comment_count>2</comment_count>
      <attachid>121747</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-09 16:12:49 -0800</bug_when>
    <thetext>Comment on attachment 121747
Patch

I like tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532611</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 16:12:56 -0800</bug_when>
    <thetext>Attachment 121747 did not pass style-queue:

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

Last 3072 characters of output:
Core/bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObjectPrivate.h:21:  #ifndef header guard has wrong style, please use: WebKitDOMTestActiveDOMObjectPrivate_h  [build/header_guard] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObjectPrivate.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObjectPrivate.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/CPP/WebDOMTestOverridingNameGetter.h:42:  The parameter name &quot;str&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h:54:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h:61:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WebCore/bindings/scripts/test/ObjC/DOMTestEventTargetInternal.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h:57:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestOverridingNameGetter.cpp:21:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestOverridingNameGetter.cpp:22:  Found WebCore config.h after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestOverridingNameGetter.cpp:24:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestOverridingNameGetter.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestOverridingNameGetter.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestOverridingNameGetter.cpp:32:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestOverridingNameGetter.cpp:131:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestOverridingNameGetter.cpp:156:  Extra space between return and WEBKIT_DOM_TEST_OVERRIDING_NAME_GETTER  [whitespace/declaration] [3]
Total errors found: 75 in 57 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532733</commentid>
    <comment_count>4</comment_count>
      <attachid>121747</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 17:57:15 -0800</bug_when>
    <thetext>Comment on attachment 121747
Patch

Clearing flags on attachment: 121747

Committed r104526: &lt;http://trac.webkit.org/changeset/104526&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532734</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 17:57:20 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121747</attachid>
            <date>2012-01-09 16:09:30 -0800</date>
            <delta_ts>2012-01-09 17:57:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75900-20120109160929.patch</filename>
            <type>text/plain</type>
            <size>258208</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDEyLTAxLTA5ICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgcnVuLWJpbmRpbmdzLXRlc3RzIHNo
b3VsZCBleGVyY2lzZSBhbGwgdGhlIElETCBhdHRyaWJ1dGVzIHdlIHVzZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU5MDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJIGp1c3QgZ3JlcHBlZCB0aHJvdWdo
IHRoZSBjb2RlIGdlbmVyYXRvciBzY3JpcHQgZm9yIElETCBhdHRyaWJ1dGVzIGFuZAorICAgICAg
ICB3cm90ZSB0ZXN0cyBmb3IgdGhlbS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9DUFAvV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6IEFkZGVkLgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RFdmVudFRh
cmdldC5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2Vi
RE9NVGVzdEV2ZW50VGFyZ2V0Lmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9XZWJET01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0NQUC9XZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRl
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRU
YXJnZXQuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92ZXJyaWRp
bmdOYW1lR2V0dGVyLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmg6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVycmlk
aW5nTmFtZUdldHRlclByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6IEFkZGVkLgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuaDogQWRkZWQuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdl
dC5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
dmVudFRhcmdldC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW50ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkaW5n
TmFtZUdldHRlci5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0QWN0aXZlRE9NT2JqZWN0SW50ZXJuYWwuaDogQWRk
ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdEV2ZW50VGFy
Z2V0Lmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RFdmVudFRhcmdldC5tbTogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdEV2ZW50VGFyZ2V0SW50ZXJuYWwuaDogQWRkZWQuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW06CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L09iakMvRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmg6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlci5tbTogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVySW50ZXJuYWwuaDogQWRkZWQuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REb21haW5TZWN1cml0eS5pZGw6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RXZlbnRDb25zdHJ1Y3Rvci5pZGw6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFdmVudFRhcmdldC5pZGw6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW50ZXJmYWNlLmlkbDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlci5pZGw6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZl
RE9NT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuaDogQWRkZWQuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5oOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5jcHA6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVycmlkaW5nTmFtZUdldHRl
ci5oOiBBZGRlZC4KKwogMjAxMi0wMS0wOSAgSnVzdGluIE5vdm9zYWQgIDxqdW5vdkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtIHdpbl0gQ3JlYXRpbmcgbG90cyBvZiB0ZW1wb3Jh
cnkgY2FudmFzIGNvbnRleHRzIHdpbGwgY3Jhc2guCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERvbWFpblNlY3VyaXR5LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERvbWFpblNlY3VyaXR5Lmlk
bAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0RG9tYWluU2VjdXJpdHkuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtc3Ry
QXJnLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRXN0ckFyZywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK21vZHVsZSB0ZXN0IHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDaGVja0RvbWFp
blNlY3VyaXR5CisgICAgXSBUZXN0QWN0aXZlRE9NT2JqZWN0IHsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIGxvbmcgZXhjaXRpbmdBdHRyOworICAgICAgICB2b2lkIGV4Y2l0aW5nRnVuY3Rp
b24oaW4gTm9kZSBuZXh0Q2hpbGQpOworICAgICAgICBbRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5
XSB2b2lkIHBvc3RNZXNzYWdlKGluIERPTVN0cmluZyBtZXNzYWdlKTsKKyAgICB9OworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFdmVudENvbnN0cnVj
dG9yLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdEV2ZW50Q29uc3RydWN0b3IuaWRsCShyZXZpc2lvbiAxMDQ0OTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEV2ZW50Q29uc3RydWN0b3IuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw2IEBAIG1vZHVsZSB0ZXN0IHsKICAgICBdIFRlc3RF
dmVudENvbnN0cnVjdG9yIHsKICAgICAgICAgLy8gQXR0cmlidXRlcwogICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGF0dHIxOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
W0luaXRpYWxpemVkQXRDb25zdHJ1Y3Rvcl0gRE9NU3RyaW5nIGF0dHIyOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgW0luaXRpYWxpemVkQnlDb25zdHJ1Y3Rvcl0gRE9NU3RyaW5nIGF0dHIy
OwogICAgIH07CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdEV2ZW50VGFyZ2V0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdEV2ZW50VGFyZ2V0LmlkbAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RXZlbnRUYXJnZXQuaWRsCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRXN0ckFyZywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBldmVudHMgeworCisg
ICAgaW50ZXJmYWNlIFsKKyAgICAgICAgRXZlbnRUYXJnZXQsCisgICAgICAgIEhhc0luZGV4R2V0
dGVyLAorICAgICAgICBIYXNOYW1lR2V0dGVyLAorICAgICAgICBNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkCisgICAgXSBUZXN0RXZlbnRUYXJnZXQgeworCisgICAgICAgIE5vZGUgaXRlbShpbiBbSXNJ
bmRleF0gdW5zaWduZWQgbG9uZyBpbmRleCk7CisKKyAgICAgICAgdm9pZCBhZGRFdmVudExpc3Rl
bmVyKGluIERPTVN0cmluZyB0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gW09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICB2b2lkIHJlbW92ZUV2
ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAg
IGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCisgICAgICAgICAgICByYWlzZXMo
RXZlbnRFeGNlcHRpb24pOworICAgIH07CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0SW50ZXJmYWNlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEludGVyZmFjZS5pZGwJKHJldmlzaW9u
IDEwNDQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW50
ZXJmYWNlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogbW9kdWxlIHRlc3Qg
ewogICAgIGludGVyZmFjZSBbCiAgICAgICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICAgICAgRGVs
ZWdhdGluZ1B1dEZ1bmN0aW9uLAogICAgICAgICBDb25kaXRpb25hbD1Db25kaXRpb24xfENvbmRp
dGlvbjIsCiAgICAgICAgIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCiAgICAgICAg
IENvbnN0cnVjdG9yKGluIERPTVN0cmluZyBzdHIxLCBpbiBbT3B0aW9uYWw9Q2FsbFdpdGhEZWZh
dWx0VmFsdWVdIERPTVN0cmluZyBzdHIyKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwJKHJldmlzaW9uIDEwNDQ5MikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMTc5LDYgKzE3OSwyNyBAQCBtb2R1bGUgdGVzdCB7CiAgICAgICAgIGF0dHJpYnV0
ZSBkb3VibGVbXSAgICAgICAgICAgICAgICAgIGRvdWJsZUFycmF5OwogI2VuZGlmCiAKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDaGVja0ZyYW1lU2VjdXJpdHldIERvY3VtZW50IGNvbnRl
bnREb2N1bWVudDsKKyAgICAgICAgW1NWR0NoZWNrU2VjdXJpdHlEb2N1bWVudF0gU1ZHRG9jdW1l
bnQgZ2V0U1ZHRG9jdW1lbnQoKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisK
KyAgICAgICAgdm9pZCBjb252ZXJ0MShpbiBbQ29udmVydE51bGxTdHJpbmdUbz1OdWxsXSBhKTsK
KyAgICAgICAgdm9pZCBjb252ZXJ0MihpbiBbQ29udmVydE51bGxTdHJpbmdUbz1VbmRlZmluZWRd
IGIpOworICAgICAgICB2b2lkIGNvbnZlcnQzKGluIFtDb252ZXJ0TnVsbFN0cmluZ1RvPUZhbHNl
XSBjKTsKKyAgICAgICAgdm9pZCBjb252ZXJ0NChpbiBbQ29udmVydE51bGxUb051bGxTdHJpbmdd
IGQpOworICAgICAgICB2b2lkIGNvbnZlcnQ1KGluIFtDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9O
dWxsU3RyaW5nXSBlKTsKKworICAgICAgICBhdHRyaWJ1dGUgU1ZHUG9pbnQgbXV0YWJsZVBvaW50
OworICAgICAgICBhdHRyaWJ1dGUgW0ltbXV0YWJsZV0gU1ZHUG9pbnQgaW1tdXRhYmxlUG9pbnQ7
CisgICAgICAgIFNWR1BvaW50IG11dGFibGVQb2ludEZ1bmN0aW9uKCk7CisgICAgICAgIFtJbW11
dGFibGVdIFNWR1BvaW50IGltbXV0YWJsZVBvaW50RnVuY3Rpb24oKTsKKworICAgICAgICBbSW1w
bGVtZW50YXRpb25GdW5jdGlvbj1iYW5hbmFdIHZvaWQgb3JhbmdlKCk7CisKKyAgICAgICAgYXR0
cmlidXRlIFtTdHJpY3RUeXBlQ2hlY2tpbmddIGZsb2F0IHN0cmljdEZsb2F0OworICAgICAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSBib29sIHN0cmljdEZ1bmN0aW9uKGluIERPTVN0cmluZyBzdHIs
IGluIGZsb2F0IGEsIGluIGludCBiKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7
CisKICAgICAgICAgLy8gT2JqZWN0aXZlQyByZXNlcnZlZCB3b3Jkcy4KICAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIGxvbmcgICAgICBkZXNjcmlwdGlvbjsKICAgICAgICAgYXR0cmlidXRlIGxv
bmcgICAgICAgICAgICAgICBpZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIu
aWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlci5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zdHJBcmcsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFc3RyQXJnLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworbW9kdWxlIGV2ZW50cyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAg
ICBIYXNPdmVycmlkaW5nTmFtZUdldHRlcgorICAgIF0gVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
IHsKKyAgICAgICAgdm9pZCBhbm90aGVyRnVuY3Rpb24oaW4gRE9NU3RyaW5nIHN0cik7CisgICAg
fTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RBY3RpdmVET01PYmplY3QuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MTEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdC5oIgorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1
ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJUZXN0QWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAi
V2ViRE9NTm9kZS5oIgorI2luY2x1ZGUgIldlYkRPTVN0cmluZy5oIgorI2luY2x1ZGUgIldlYkV4
Y2VwdGlvbkhhbmRsZXIuaCIKKyNpbmNsdWRlICJ3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1Y3Qg
V2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdDo6V2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZh
dGUgeworICAgIFdlYkRPTVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlKFdlYkNvcmU6OlRlc3RB
Y3RpdmVET01PYmplY3QqIG9iamVjdCA9IDApCisgICAgICAgIDogaW1wbChvYmplY3QpCisgICAg
eworICAgIH0KKworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0PiBpbXBs
OworfTsKKworV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdDo6V2ViRE9NVGVzdEFjdGl2ZURPTU9i
amVjdCgpCisgICAgOiBXZWJET01PYmplY3QoKQorICAgICwgbV9pbXBsKDApCit7Cit9CisKK1dl
YkRPTVRlc3RBY3RpdmVET01PYmplY3Q6OldlYkRPTVRlc3RBY3RpdmVET01PYmplY3QoV2ViQ29y
ZTo6VGVzdEFjdGl2ZURPTU9iamVjdCogaW1wbCkKKyAgICA6IFdlYkRPTU9iamVjdCgpCisgICAg
LCBtX2ltcGwobmV3IFdlYkRPTVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlKGltcGwpKQorewor
fQorCitXZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0OjpXZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0
KGNvbnN0IFdlYkRPTVRlc3RBY3RpdmVET01PYmplY3QmIGNvcHkpCisgICAgOiBXZWJET01PYmpl
Y3QoKQoreworICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRPTVRlc3RBY3RpdmVE
T01PYmplY3RQcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Cit9CisKK1dlYkRPTVRlc3RBY3RpdmVE
T01PYmplY3QmIFdlYkRPTVRlc3RBY3RpdmVET01PYmplY3Q6Om9wZXJhdG9yPShjb25zdCBXZWJE
T01UZXN0QWN0aXZlRE9NT2JqZWN0JiBjb3B5KQoreworICAgIGRlbGV0ZSBtX2ltcGw7CisgICAg
bV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZh
dGUoY29weS5pbXBsKCkpIDogMDsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkNvcmU6OlRl
c3RBY3RpdmVET01PYmplY3QqIFdlYkRPTVRlc3RBY3RpdmVET01PYmplY3Q6OmltcGwoKSBjb25z
dAoreworICAgIHJldHVybiBtX2ltcGwgPyBXVEY6OmdldFB0cihtX2ltcGwtPmltcGwpIDogMDsK
K30KKworV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdDo6fldlYkRPTVRlc3RBY3RpdmVET01PYmpl
Y3QoKQoreworICAgIGRlbGV0ZSBtX2ltcGw7CisgICAgbV9pbXBsID0gMDsKK30KKworaW50IFdl
YkRPTVRlc3RBY3RpdmVET01PYmplY3Q6OmV4Y2l0aW5nQXR0cigpIGNvbnN0Cit7CisgICAgaWYg
KCFpbXBsKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGltcGwoKS0+ZXhjaXRp
bmdBdHRyKCk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdDo6ZXhjaXRpbmdG
dW5jdGlvbihjb25zdCBXZWJET01Ob2RlJiBuZXh0Q2hpbGQpCit7CisgICAgaWYgKCFpbXBsKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+ZXhjaXRpbmdGdW5jdGlvbih0b1dlYkNv
cmUobmV4dENoaWxkKSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdDo6cG9z
dE1lc3NhZ2UoY29uc3QgV2ViRE9NU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghaW1wbCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnBvc3RNZXNzYWdlKG1lc3NhZ2UpOwor
fQorCitXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0KiB0b1dlYkNvcmUoY29uc3QgV2ViRE9N
VGVzdEFjdGl2ZURPTU9iamVjdCYgd3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBlci5pbXBs
KCk7Cit9CisKK1dlYkRPTVRlc3RBY3RpdmVET01PYmplY3QgdG9XZWJLaXQoV2ViQ29yZTo6VGVz
dEFjdGl2ZURPTU9iamVjdCogdmFsdWUpCit7CisgICAgcmV0dXJuIFdlYkRPTVRlc3RBY3RpdmVE
T01PYmplY3QodmFsdWUpOworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0QWN0aXZlRE9N
T2JqZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvQ1BQL1dlYkRPTVRlc3RBY3RpdmVET01PYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdF9oCisj
ZGVmaW5lIFdlYkRPTVRlc3RBY3RpdmVET01PYmplY3RfaAorCisjaW5jbHVkZSA8V2ViRE9NT2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8V2ViRE9NU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIFRlc3RBY3RpdmVET01PYmplY3Q7Cit9OworCitjbGFzcyBXZWJET01Ob2RlOworCitj
bGFzcyBXZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0IDogcHVibGljIFdlYkRPTU9iamVjdCB7Citw
dWJsaWM6CisgICAgV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdCgpOworICAgIGV4cGxpY2l0IFdl
YkRPTVRlc3RBY3RpdmVET01PYmplY3QoV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCopOwor
ICAgIFdlYkRPTVRlc3RBY3RpdmVET01PYmplY3QoY29uc3QgV2ViRE9NVGVzdEFjdGl2ZURPTU9i
amVjdCYpOworICAgIFdlYkRPTVRlc3RBY3RpdmVET01PYmplY3QmIG9wZXJhdG9yPShjb25zdCBX
ZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0Jik7CisgICAgdmlydHVhbCB+V2ViRE9NVGVzdEFjdGl2
ZURPTU9iamVjdCgpOworCisgICAgaW50IGV4Y2l0aW5nQXR0cigpIGNvbnN0OworCisgICAgdm9p
ZCBleGNpdGluZ0Z1bmN0aW9uKGNvbnN0IFdlYkRPTU5vZGUmIG5leHRDaGlsZCk7CisgICAgdm9p
ZCBwb3N0TWVzc2FnZShjb25zdCBXZWJET01TdHJpbmcmIG1lc3NhZ2UpOworCisgICAgV2ViQ29y
ZTo6VGVzdEFjdGl2ZURPTU9iamVjdCogaW1wbCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAg
c3RydWN0IFdlYkRPTVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlOworICAgIFdlYkRPTVRlc3RB
Y3RpdmVET01PYmplY3RQcml2YXRlKiBtX2ltcGw7Cit9OworCitXZWJDb3JlOjpUZXN0QWN0aXZl
RE9NT2JqZWN0KiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdCYpOwor
V2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdCB0b1dlYktpdChXZWJDb3JlOjpUZXN0QWN0aXZlRE9N
T2JqZWN0Kik7CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01UZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEV2ZW50VGFyZ2V0
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9DUFAvV2ViRE9NVGVzdEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
NSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJET01UZXN0RXZlbnRUYXJnZXQuaCIKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAi
S1VSTC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJUZXN0RXZlbnRUYXJnZXQuaCIK
KyNpbmNsdWRlICJXZWJET01FdmVudC5oIgorI2luY2x1ZGUgIldlYkRPTU5vZGUuaCIKKyNpbmNs
dWRlICJXZWJET01TdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVyLmgiCisj
aW5jbHVkZSAiV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgInd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKK1dlYkRPTVRlc3RFdmVudFRhcmdldDo6V2ViRE9NVGVzdEV2ZW50VGFyZ2V0KCkK
KyAgICA6IFdlYkRPTUV2ZW50VGFyZ2V0KCkKK3sKK30KKworV2ViRE9NVGVzdEV2ZW50VGFyZ2V0
OjpXZWJET01UZXN0RXZlbnRUYXJnZXQoV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBpbXBsKQor
ICAgIDogV2ViRE9NRXZlbnRUYXJnZXQoaW1wbCkKK3sKK30KKworV2ViQ29yZTo6VGVzdEV2ZW50
VGFyZ2V0KiBXZWJET01UZXN0RXZlbnRUYXJnZXQ6OmltcGwoKSBjb25zdAoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXZWJET01FdmVudFRhcmdl
dDo6aW1wbCgpKTsKK30KKworV2ViRE9NTm9kZSBXZWJET01UZXN0RXZlbnRUYXJnZXQ6Oml0ZW0o
dW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJE
T01Ob2RlKCk7CisKKyAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT5pdGVt
KGluZGV4KSkpOworfQorCit2b2lkIFdlYkRPTVRlc3RFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0
ZW5lcihjb25zdCBXZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXIm
IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0b1dlYkNvcmUo
bGlzdGVuZXIpLCB1c2VDYXB0dXJlKTsKK30KKwordm9pZCBXZWJET01UZXN0RXZlbnRUYXJnZXQ6
OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViRE9NU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJE
T01FdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIGlmICgh
aW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVu
ZXIodHlwZSwgdG9XZWJDb3JlKGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7Cit9CisKK2Jvb2wgV2Vi
RE9NVGVzdEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGNvbnN0IFdlYkRPTUV2ZW50JiBldnQp
Cit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGJvb2wgcmVzdWx0ID0gaW1wbCgpLT5kaXNw
YXRjaEV2ZW50KHRvV2ViQ29yZShldnQpLCBlYyk7CisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0
aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1dlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RF
dmVudFRhcmdldCYgd3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBlci5pbXBsKCk7Cit9CisK
K1dlYkRPTVRlc3RFdmVudFRhcmdldCB0b1dlYktpdChXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQq
IHZhbHVlKQoreworICAgIHJldHVybiBXZWJET01UZXN0RXZlbnRUYXJnZXQodmFsdWUpOworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
RXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RFdmVudFRhcmdldC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0RXZlbnRUYXJn
ZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdl
aW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViRE9N
VGVzdEV2ZW50VGFyZ2V0X2gKKyNkZWZpbmUgV2ViRE9NVGVzdEV2ZW50VGFyZ2V0X2gKKworI2lu
Y2x1ZGUgPFdlYkRPTUV2ZW50VGFyZ2V0Lmg+CisjaW5jbHVkZSA8V2ViRE9NU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRlc3RFdmVudFRhcmdldDsKK307CisKK2NsYXNz
IFdlYkRPTUV2ZW50OworY2xhc3MgV2ViRE9NRXZlbnRMaXN0ZW5lcjsKK2NsYXNzIFdlYkRPTU5v
ZGU7CisKK2NsYXNzIFdlYkRPTVRlc3RFdmVudFRhcmdldCA6IHB1YmxpYyBXZWJET01FdmVudFRh
cmdldCB7CitwdWJsaWM6CisgICAgV2ViRE9NVGVzdEV2ZW50VGFyZ2V0KCk7CisgICAgZXhwbGlj
aXQgV2ViRE9NVGVzdEV2ZW50VGFyZ2V0KFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCopOworICAg
IHZpcnR1YWwgfldlYkRPTVRlc3RFdmVudFRhcmdldCgpIHsgfQorCisgICAgV2ViRE9NTm9kZSBp
dGVtKHVuc2lnbmVkIGluZGV4KTsKKyAgICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgV2Vi
RE9NU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJET01FdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9v
bCB1c2VDYXB0dXJlKTsKKyAgICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViRE9N
U3RyaW5nJiB0eXBlLCBjb25zdCBXZWJET01FdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCB1
c2VDYXB0dXJlKTsKKyAgICBib29sIGRpc3BhdGNoRXZlbnQoY29uc3QgV2ViRE9NRXZlbnQmIGV2
dCk7CisKKyAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGltcGwoKSBjb25zdDsKK307CisK
K1dlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RFdmVu
dFRhcmdldCYpOworV2ViRE9NVGVzdEV2ZW50VGFyZ2V0IHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RF
dmVudFRhcmdldCopOworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAkocmV2aXNp
b24gMTA0NDkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTcgKzIxLDMzIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViRE9NVGVzdE9iai5oIgogCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJREJLZXkuaCIK
ICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgorI2luY2x1ZGUg
IlNWR1BvaW50LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVk
ZSAiVGVzdE9iai5oIgorI2luY2x1ZGUgIldlYkRPTURvY3VtZW50LmgiCiAjaW5jbHVkZSAiV2Vi
RE9NSURCS2V5LmgiCiAjaW5jbHVkZSAiV2ViRE9NT3B0aW9uc09iamVjdC5oIgorI2luY2x1ZGUg
IldlYkRPTVNWR1BvaW50LmgiCiAjaW5jbHVkZSAiV2ViRE9NU3RyaW5nLmgiCisjaW5jbHVkZSAi
V2ViRE9NYS5oIgorI2luY2x1ZGUgIldlYkRPTWIuaCIKKyNpbmNsdWRlICJXZWJET01ib29sLmgi
CisjaW5jbHVkZSAiV2ViRE9NYy5oIgorI2luY2x1ZGUgIldlYkRPTWQuaCIKKyNpbmNsdWRlICJX
ZWJET01lLmgiCiAjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgogI2luY2x1ZGUgIldl
Yk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJhLmgiCisjaW5jbHVkZSAiYi5oIgor
I2luY2x1ZGUgImJvb2wuaCIKKyNpbmNsdWRlICJjLmgiCisjaW5jbHVkZSAiZC5oIgorI2luY2x1
ZGUgImUuaCIKICNpbmNsdWRlICJ3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNjE5LDYgKzYzNSw2MiBA
QCB2b2lkIFdlYkRPTVRlc3RPYmo6OnNldENvbmRpdGlvbmFsQXR0cjYoCiB9CiAKICNlbmRpZgor
V2ViRE9NRG9jdW1lbnQgV2ViRE9NVGVzdE9iajo6Y29udGVudERvY3VtZW50KCkgY29uc3QKK3sK
KyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTURvY3VtZW50KCk7CisKKyAg
ICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT5jb250ZW50RG9jdW1lbnQoKSkp
OworfQorCitXZWJET01TVkdQb2ludCBXZWJET01UZXN0T2JqOjptdXRhYmxlUG9pbnQoKSBjb25z
dAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NU1ZHUG9pbnQoKTsK
KworICAgIHJldHVybiB0b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPm11dGFibGVQb2ludCgp
KSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2V0TXV0YWJsZVBvaW50KGNvbnN0IFdlYkRP
TVNWR1BvaW50JiBuZXdNdXRhYmxlUG9pbnQpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGltcGwoKS0+c2V0TXV0YWJsZVBvaW50KHRvV2ViQ29yZShuZXdNdXRh
YmxlUG9pbnQpKTsKK30KKworV2ViRE9NU1ZHUG9pbnQgV2ViRE9NVGVzdE9iajo6aW1tdXRhYmxl
UG9pbnQoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9N
U1ZHUG9pbnQoKTsKKworICAgIHJldHVybiB0b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPmlt
bXV0YWJsZVBvaW50KCkpKTsKK30KKwordm9pZCBXZWJET01UZXN0T2JqOjpzZXRJbW11dGFibGVQ
b2ludChjb25zdCBXZWJET01TVkdQb2ludCYgbmV3SW1tdXRhYmxlUG9pbnQpCit7CisgICAgaWYg
KCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+c2V0SW1tdXRhYmxlUG9p
bnQodG9XZWJDb3JlKG5ld0ltbXV0YWJsZVBvaW50KSk7Cit9CisKK2Zsb2F0IFdlYkRPTVRlc3RP
Ymo6OnN0cmljdEZsb2F0KCkgY29uc3QKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gaW1wbCgpLT5zdHJpY3RGbG9hdCgpOworfQorCit2b2lkIFdl
YkRPTVRlc3RPYmo6OnNldFN0cmljdEZsb2F0KGZsb2F0IG5ld1N0cmljdEZsb2F0KQoreworICAg
IGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldFN0cmljdEZs
b2F0KG5ld1N0cmljdEZsb2F0KTsKK30KKwogaW50IFdlYkRPTVRlc3RPYmo6OmRlc2NyaXB0aW9u
KCkgY29uc3QKIHsKICAgICBpZiAoIWltcGwoKSkKQEAgLTkwNSw2ICs5NzcsODEgQEAgdm9pZCBX
ZWJET01UZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kMShjbwogCiAjZW5kaWYKIAordm9pZCBXZWJE
T01UZXN0T2JqOjpjb252ZXJ0MShjb25zdCBXZWJET01hJiApCit7CisgICAgaWYgKCFpbXBsKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+Y29udmVydDEodG9XZWJDb3JlKCkpOwor
fQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OmNvbnZlcnQyKGNvbnN0IFdlYkRPTWImICkKK3sKKyAg
ICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5jb252ZXJ0Mih0
b1dlYkNvcmUoKSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6Y29udmVydDMoY29uc3QgV2Vi
RE9NYyYgKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBs
KCktPmNvbnZlcnQzKHRvV2ViQ29yZSgpKTsKK30KKwordm9pZCBXZWJET01UZXN0T2JqOjpjb252
ZXJ0NChjb25zdCBXZWJET01kJiApCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGltcGwoKS0+Y29udmVydDQodG9XZWJDb3JlKCkpOworfQorCit2b2lkIFdlYkRP
TVRlc3RPYmo6OmNvbnZlcnQ1KGNvbnN0IFdlYkRPTWUmICkKK3sKKyAgICBpZiAoIWltcGwoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5jb252ZXJ0NSh0b1dlYkNvcmUoKSk7Cit9
CisKK1dlYkRPTVNWR1BvaW50IFdlYkRPTVRlc3RPYmo6Om11dGFibGVQb2ludEZ1bmN0aW9uKCkK
K3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVNWR1BvaW50KCk7CisK
KyAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT5tdXRhYmxlUG9pbnRGdW5j
dGlvbigpKSk7Cit9CisKK1dlYkRPTVNWR1BvaW50IFdlYkRPTVRlc3RPYmo6OmltbXV0YWJsZVBv
aW50RnVuY3Rpb24oKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9N
U1ZHUG9pbnQoKTsKKworICAgIHJldHVybiB0b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPmlt
bXV0YWJsZVBvaW50RnVuY3Rpb24oKSkpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6Om9yYW5n
ZSgpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+
b3JhbmdlKCk7Cit9CisKK1dlYkRPTWJvb2wgV2ViRE9NVGVzdE9iajo6c3RyaWN0RnVuY3Rpb24o
Y29uc3QgV2ViRE9NU3RyaW5nJiBzdHIsIGZsb2F0IGEsIGludCBiKQoreworICAgIGlmICghaW1w
bCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NYm9vbCgpOworCisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViRE9NYm9vbCByZXN1bHQgPSB0b1dlYktpdChXVEY6Omdl
dFB0cihpbXBsKCktPnN0cmljdEZ1bmN0aW9uKHN0ciwgYSwgYiwgZWMpKSk7CisgICAgd2ViRE9N
UmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIFdlYkNvcmU6OlRlc3RPYmoqIHRvV2ViQ29yZShjb25zdCBXZWJE
T01UZXN0T2JqJiB3cmFwcGVyKQogewogICAgIHJldHVybiB3cmFwcGVyLmltcGwoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdE9iai5oCShyZXZpc2lvbiAxMDQ0OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTQgKzMwLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFRlc3RPYmo7CiB9Owog
CitjbGFzcyBXZWJET01Eb2N1bWVudDsKIGNsYXNzIFdlYkRPTUV2ZW50TGlzdGVuZXI7CiBjbGFz
cyBXZWJET01JREJLZXk7CiBjbGFzcyBXZWJET01PcHRpb25zT2JqZWN0OworY2xhc3MgV2ViRE9N
U1ZHUG9pbnQ7CiBjbGFzcyBXZWJET01TdHJpbmc7CiBjbGFzcyBXZWJET01UZXN0T2JqOwogY2xh
c3MgV2ViRE9NVGVzdE9iamVjdEFDb25zdHJ1Y3RvcjsKIGNsYXNzIFdlYkRPTVRlc3RPYmplY3RC
Q29uc3RydWN0b3I7CiBjbGFzcyBXZWJET01UZXN0T2JqZWN0Q0NvbnN0cnVjdG9yOworY2xhc3Mg
V2ViRE9NYTsKK2NsYXNzIFdlYkRPTWI7CitjbGFzcyBXZWJET01ib29sOworY2xhc3MgV2ViRE9N
YzsKK2NsYXNzIFdlYkRPTWQ7CitjbGFzcyBXZWJET01lOwogCiBjbGFzcyBXZWJET01UZXN0T2Jq
IDogcHVibGljIFdlYkRPTU9iamVjdCB7CiBwdWJsaWM6CkBAIC0xNDMsNiArMTUxLDEzIEBAIHB1
YmxpYzoKICAgICBXZWJET01UZXN0T2JqZWN0Q0NvbnN0cnVjdG9yIGNvbmRpdGlvbmFsQXR0cjYo
KSBjb25zdDsKICAgICB2b2lkIHNldENvbmRpdGlvbmFsQXR0cjYoY29uc3QgV2ViRE9NVGVzdE9i
amVjdENDb25zdHJ1Y3RvciYpOwogI2VuZGlmCisgICAgV2ViRE9NRG9jdW1lbnQgY29udGVudERv
Y3VtZW50KCkgY29uc3Q7CisgICAgV2ViRE9NU1ZHUG9pbnQgbXV0YWJsZVBvaW50KCkgY29uc3Q7
CisgICAgdm9pZCBzZXRNdXRhYmxlUG9pbnQoY29uc3QgV2ViRE9NU1ZHUG9pbnQmKTsKKyAgICBX
ZWJET01TVkdQb2ludCBpbW11dGFibGVQb2ludCgpIGNvbnN0OworICAgIHZvaWQgc2V0SW1tdXRh
YmxlUG9pbnQoY29uc3QgV2ViRE9NU1ZHUG9pbnQmKTsKKyAgICBmbG9hdCBzdHJpY3RGbG9hdCgp
IGNvbnN0OworICAgIHZvaWQgc2V0U3RyaWN0RmxvYXQoZmxvYXQpOwogICAgIGludCBkZXNjcmlw
dGlvbigpIGNvbnN0OwogICAgIGludCBpZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0SWQoaW50KTsK
QEAgLTE3OCw2ICsxOTMsMTUgQEAgcHVibGljOgogICAgIGludCBjbGFzc01ldGhvZFdpdGhPcHRp
b25hbChpbnQgYXJnKTsKICAgICB2b2lkIG92ZXJsb2FkZWRNZXRob2QxKGludCBhcmcpOwogICAg
IHZvaWQgb3ZlcmxvYWRlZE1ldGhvZDEoY29uc3QgV2ViRE9NU3RyaW5nJiB0eXBlKTsKKyAgICB2
b2lkIGNvbnZlcnQxKGNvbnN0IFdlYkRPTWEmICk7CisgICAgdm9pZCBjb252ZXJ0Mihjb25zdCBX
ZWJET01iJiApOworICAgIHZvaWQgY29udmVydDMoY29uc3QgV2ViRE9NYyYgKTsKKyAgICB2b2lk
IGNvbnZlcnQ0KGNvbnN0IFdlYkRPTWQmICk7CisgICAgdm9pZCBjb252ZXJ0NShjb25zdCBXZWJE
T01lJiApOworICAgIFdlYkRPTVNWR1BvaW50IG11dGFibGVQb2ludEZ1bmN0aW9uKCk7CisgICAg
V2ViRE9NU1ZHUG9pbnQgaW1tdXRhYmxlUG9pbnRGdW5jdGlvbigpOworICAgIHZvaWQgb3Jhbmdl
KCk7CisgICAgV2ViRE9NYm9vbCBzdHJpY3RGdW5jdGlvbihjb25zdCBXZWJET01TdHJpbmcmIHN0
ciwgZmxvYXQgYSwgaW50IGIpOwogCiAgICAgV2ViQ29yZTo6VGVzdE9iaiogaW1wbCgpIGNvbnN0
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRP
TVRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0
ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9XZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDkzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oIgorCisjaW5jbHVkZSAi
S1VSTC5oIgorI2luY2x1ZGUgIlRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oIgorI2luY2x1ZGUg
IldlYkRPTVN0cmluZy5oIgorI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKKyNpbmNs
dWRlICJ3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1Y3QgV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyOjpXZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcml2YXRlIHsKKyAgICBXZWJE
T01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcml2YXRlKFdlYkNvcmU6OlRlc3RPdmVycmlkaW5n
TmFtZUdldHRlciogb2JqZWN0ID0gMCkKKyAgICAgICAgOiBpbXBsKG9iamVjdCkKKyAgICB7Cisg
ICAgfQorCisgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlcj4gaW1w
bDsKK307CisKK1dlYkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6V2ViRE9NVGVzdE92ZXJy
aWRpbmdOYW1lR2V0dGVyKCkKKyAgICA6IFdlYkRPTU9iamVjdCgpCisgICAgLCBtX2ltcGwoMCkK
K3sKK30KKworV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjpXZWJET01UZXN0T3ZlcnJp
ZGluZ05hbWVHZXR0ZXIoV2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBpbXBsKQor
ICAgIDogV2ViRE9NT2JqZWN0KCkKKyAgICAsIG1faW1wbChuZXcgV2ViRE9NVGVzdE92ZXJyaWRp
bmdOYW1lR2V0dGVyUHJpdmF0ZShpbXBsKSkKK3sKK30KKworV2ViRE9NVGVzdE92ZXJyaWRpbmdO
YW1lR2V0dGVyOjpXZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIoY29uc3QgV2ViRE9NVGVz
dE92ZXJyaWRpbmdOYW1lR2V0dGVyJiBjb3B5KQorICAgIDogV2ViRE9NT2JqZWN0KCkKK3sKKyAg
ICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0
ZXJQcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Cit9CisKK1dlYkRPTVRlc3RPdmVycmlkaW5nTmFt
ZUdldHRlciYgV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjpvcGVyYXRvcj0oY29uc3Qg
V2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyJiBjb3B5KQoreworICAgIGRlbGV0ZSBtX2lt
cGw7CisgICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdE92ZXJyaWRpbmdO
YW1lR2V0dGVyUHJpdmF0ZShjb3B5LmltcGwoKSkgOiAwOworICAgIHJldHVybiAqdGhpczsKK30K
KworV2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBXZWJET01UZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXI6OmltcGwoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwgPyBXVEY6Omdl
dFB0cihtX2ltcGwtPmltcGwpIDogMDsKK30KKworV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyOjp+V2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKCkKK3sKKyAgICBkZWxldGUgbV9p
bXBsOworICAgIG1faW1wbCA9IDA7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyOjphbm90aGVyRnVuY3Rpb24oY29uc3QgV2ViRE9NU3RyaW5nJiBzdHIpCit7CisgICAg
aWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+YW5vdGhlckZ1bmN0
aW9uKHN0cik7Cit9CisKK1dlYkNvcmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlciogdG9XZWJD
b3JlKGNvbnN0IFdlYkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlciYgd3JhcHBlcikKK3sKKyAg
ICByZXR1cm4gd3JhcHBlci5pbXBsKCk7Cit9CisKK1dlYkRPTVRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlciB0b1dlYktpdChXZWJDb3JlOjpUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIHZhbHVlKQor
eworICAgIHJldHVybiBXZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIodmFsdWUpOworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
T3ZlcnJpZGluZ05hbWVHZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+Cisg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyX2gKKyNk
ZWZpbmUgV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyX2gKKworI2luY2x1ZGUgPFdlYkRP
TU9iamVjdC5oPgorI2luY2x1ZGUgPFdlYkRPTVN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI7Cit9OworCisKK2NsYXNzIFdlYkRP
TVRlc3RPdmVycmlkaW5nTmFtZUdldHRlciA6IHB1YmxpYyBXZWJET01PYmplY3QgeworcHVibGlj
OgorICAgIFdlYkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlcigpOworICAgIGV4cGxpY2l0IFdl
YkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlcihXZWJDb3JlOjpUZXN0T3ZlcnJpZGluZ05hbWVH
ZXR0ZXIqKTsKKyAgICBXZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIoY29uc3QgV2ViRE9N
VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyJik7CisgICAgV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyJiBvcGVyYXRvcj0oY29uc3QgV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyJik7
CisgICAgdmlydHVhbCB+V2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKCk7CisKKyAgICB2
b2lkIGFub3RoZXJGdW5jdGlvbihjb25zdCBXZWJET01TdHJpbmcmIHN0cik7CisKKyAgICBXZWJD
b3JlOjpUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIGltcGwoKSBjb25zdDsKKworcHJvdGVjdGVk
OgorICAgIHN0cnVjdCBXZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcml2YXRlOworICAg
IFdlYkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlclByaXZhdGUqIG1faW1wbDsKK307CisKK1dl
YkNvcmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlciogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRl
c3RPdmVycmlkaW5nTmFtZUdldHRlciYpOworV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
IHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlciopOworCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RBY3RpdmVET01PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmpl
Y3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjAzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVj
U3RhdGUuaCIKKyNpbmNsdWRlICJUZXN0QWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NQmluZGluZy5oIgorI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01Ob2RlLmgiCisjaW5jbHVkZSAid2Via2l0L1dl
YktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RBY3Rp
dmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9i
amVjdFByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRkZWZpbmVzLmgiCisjaW5jbHVkZSAid2Vi
a2l0Z2xvYmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworICAgIAorV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCoga2l0KFdl
YkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QqIG9iaikKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChvYmosIDApOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpn
ZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RBY3RpdmVE
T01PYmplY3QqPihyZXQpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RB
Y3RpdmVET01PYmplY3QqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVz
dEFjdGl2ZURPTU9iamVjdChvYmopKSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQg
Ly8KKwordm9pZAord2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2V4Y2l0aW5nX2Z1
bmN0aW9uKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIHNlbGYsIFdlYktpdERPTU5vZGUq
IG5leHRfY2hpbGQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEFjdGl2ZURP
TU9iamVjdCAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFp
bChuZXh0X2NoaWxkKTsKKyAgICBXZWJDb3JlOjpOb2RlICogY29udmVydGVkX25leHRfY2hpbGQg
PSBOVUxMOworICAgIGlmIChuZXh0X2NoaWxkICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVk
X25leHRfY2hpbGQgPSBXZWJLaXQ6OmNvcmUobmV4dF9jaGlsZCk7CisgICAgICAgIGdfcmV0dXJu
X2lmX2ZhaWwoY29udmVydGVkX25leHRfY2hpbGQpOworICAgIH0KKyAgICBpdGVtLT5leGNpdGlu
Z0Z1bmN0aW9uKGNvbnZlcnRlZF9uZXh0X2NoaWxkKTsKK30KKwordm9pZAord2Via2l0X2RvbV90
ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X3Bvc3RfbWVzc2FnZShXZWJLaXRET01UZXN0QWN0aXZlRE9N
T2JqZWN0KiBzZWxmLCBjb25zdCBnY2hhciogbWVzc2FnZSkKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG1lc3NhZ2UpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZF9tZXNzYWdlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpOworICAgIGl0ZW0t
PnBvc3RNZXNzYWdlKGNvbnZlcnRlZF9tZXNzYWdlKTsKK30KKworZ2xvbmcKK3dlYmtpdF9kb21f
dGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cihXZWJLaXRET01UZXN0QWN0
aXZlRE9NT2JqZWN0KiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDAp
OworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3Jl
OjpUZXN0QWN0aXZlRE9NT2JqZWN0ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
bG9uZyByZXMgPSBpdGVtLT5leGNpdGluZ0F0dHIoKTsKKyAgICByZXR1cm4gcmVzOworfQorCisK
K0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCwgd2Via2l0X2RvbV90
ZXN0X2FjdGl2ZV9kb21fb2JqZWN0LCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCogY29yZShXZWJLaXRE
T01UZXN0QWN0aXZlRE9NT2JqZWN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHJlcXVlc3QsIDApOworCisgICAgV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCogY29y
ZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QqPihXRUJL
SVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAgICByZXR1cm4gY29yZU9iamVjdDsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9FWENJVElO
R19BVFRSLAorfTsKKworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9v
YmplY3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTU9iamVjdCog
ZG9tX29iamVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7CisgICAgCisgICAgaWYgKGRv
bV9vYmplY3QtPmNvcmVPYmplY3QpIHsKKyAgICAgICAgV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9i
amVjdCogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmpl
Y3QgKj4oZG9tX29iamVjdC0+Y29yZU9iamVjdCk7CisKKyAgICAgICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6Zm9yZ2V0KGNvcmVPYmplY3QpOworICAgICAgICBjb3JlT2JqZWN0LT5kZXJlZigp
OworCisgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOworICAgIH0KKworICAg
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3RfYWN0aXZlX2RvbV9vYmplY3Rfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHN3aXRjaCAocHJvcF9p
ZCkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogc2VsZiA9IFdFQktJVF9ET01f
VEVTVF9BQ1RJVkVfRE9NX09CSkVDVChvYmplY3QpOworICAgIFdlYkNvcmU6OlRlc3RBY3RpdmVE
T01PYmplY3QqIGNvcmVTZWxmID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIHN3aXRjaCAocHJv
cF9pZCkgeworICAgIGNhc2UgUFJPUF9FWENJVElOR19BVFRSOgorICAgIHsKKyAgICAgICAgZ192
YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmV4Y2l0aW5nQXR0cigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVj
dF9jb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7CisKKyAgICBpZiAoR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X3BhcmVudF9jbGFzcyktPmNvbnN0
cnVjdGVkKQorICAgICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2Rv
bV9vYmplY3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2NsYXNzX2luaXQoV2ViS2l0
RE9NVGVzdEFjdGl2ZURPTU9iamVjdENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVj
dENsYXNzICpnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAg
IGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmpl
Y3RfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9t
X3Rlc3RfYWN0aXZlX2RvbV9vYmplY3Rfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+
Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2dldF9wcm9w
ZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVkID0gd2Via2l0X2RvbV90ZXN0X2Fj
dGl2ZV9kb21fb2JqZWN0X2NvbnN0cnVjdGVkOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9QX0VYQ0lUSU5HX0FUVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfbG9uZygiZXhjaXRpbmctYXR0ciIsIC8qIG5hbWUgKi8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRl
c3RfYWN0aXZlX2RvbV9vYmplY3RfZXhjaXRpbmctYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9u
ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJyZWFkLW9ubHkgIGdsb25nIFRlc3RBY3RpdmVET01PYmplY3QuZXhjaXRpbmctYXR0
ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAq
LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLworR19NQVhMT05HLCAvKiBtYXggKi8KKzAsIC8qIGRl
ZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfaW5pdChXZWJLaXRET01UZXN0QWN0
aXZlRE9NT2JqZWN0KiByZXF1ZXN0KQoreworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTVRlc3RBY3RpdmVET01PYmplY3QqIHdyYXBUZXN0QWN0aXZlRE9NT2JqZWN0KFdlYkNvcmU6
OlRlc3RBY3RpdmVET01PYmplY3QqIGNvcmVPYmplY3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFu
IHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBv
YmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRo
ZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAg
ICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CisKKyAgICByZXR1cm4gIFdFQktJVF9ET01fVEVT
VF9BQ1RJVkVfRE9NX09CSkVDVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfQUNU
SVZFX0RPTV9PQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KK30gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3Rp
dmVET01PYmplY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVm
IFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RfaAorI2RlZmluZSBXZWJLaXRET01UZXN0QWN0
aXZlRE9NT2JqZWN0X2gKKworI2luY2x1ZGUgIndlYmtpdC93ZWJraXRkb21kZWZpbmVzLmgiCisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5o
PgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01PYmplY3QuaCIKKworCitHX0JFR0lOX0RFQ0xT
CisjZGVmaW5lIFdFQktJVF9UWVBFX0RPTV9URVNUX0FDVElWRV9ET01fT0JKRUNUICAgICAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1Qob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRE9NX1RFU1RfQUNUSVZF
X0RPTV9PQkpFQ1QsIFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QpKQorI2RlZmluZSBXRUJL
SVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfQUNUSVZFX0RPTV9P
QkpFQ1QsIFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RDbGFzcykKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19URVNUX0FDVElWRV9ET01fT0JKRUNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNUX0FDVElWRV9ET01fT0JK
RUNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0FDVElWRV9ET01fT0JKRUNUX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RP
TV9URVNUX0FDVElWRV9ET01fT0JKRUNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0FDVElW
RV9ET01fT0JKRUNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9UWVBFX0RPTV9URVNUX0FDVElWRV9ET01fT0JKRUNULCBXZWJLaXRET01U
ZXN0QWN0aXZlRE9NT2JqZWN0Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RBY3RpdmVE
T01PYmplY3QgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitz
dHJ1Y3QgX1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RDbGFzcyB7CisgICAgV2ViS2l0RE9N
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0
X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2dldF90eXBlICh2b2lkKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfZXhjaXRpbmdfZnVuY3Rpb246CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdAorICogQG5leHRfY2hpbGQ6IEEg
I1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfZXhjaXRpbmdfZnVuY3Rpb24oV2Vi
S2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogc2VsZiwgV2ViS2l0RE9NTm9kZSogbmV4dF9jaGls
ZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X3Bvc3RfbWVz
c2FnZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0CisgKiBAbWVz
c2FnZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfcG9zdF9tZXNzYWdlKFdlYktpdERP
TVRlc3RBY3RpdmVET01PYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZXNzYWdlKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfZ2V0X2V4Y2l0aW5nX2F0dHI6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdAorICoKKyAqIFJldHVy
bnM6CisgKgorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2Rv
bV9vYmplY3RfZ2V0X2V4Y2l0aW5nX2F0dHIoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCog
c2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0QWN0aXZlRE9N
T2JqZWN0X2ggKi8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01P
YmplY3RQcml2YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2lmbmRlZiBXRUJfS0lUX0RPTV9URVNUX0FDVElWRV9ET01fT0JKRUNU
X1BSSVZBVEVfSAorI2RlZmluZSBXRUJfS0lUX0RPTV9URVNUX0FDVElWRV9ET01fT0JKRUNUX1BS
SVZBVEVfSAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvV2Vi
S2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSAiVGVzdEFjdGl2ZURPTU9iamVjdC5oIgorbmFtZXNw
YWNlIFdlYktpdCB7CisgICAgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCAqCisgICAgd3Jh
cFRlc3RBY3RpdmVET01PYmplY3QoV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCAqY29yZU9i
amVjdCk7CisKKyAgICBXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0ICoKKyAgICBjb3JlKFdl
YktpdERPTVRlc3RBY3RpdmVET01PYmplY3QgKnJlcXVlc3QpOworCisgICAgV2ViS2l0RE9NVGVz
dEFjdGl2ZURPTU9iamVjdCoKKyAgICBraXQoV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCog
bm9kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV0VCX0tJVF9ET01f
VEVTVF9BQ1RJVkVfRE9NX09CSkVDVF9QUklWQVRFX0ggKi8KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVu
dFRhcmdldC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJUZXN0RXZlbnRUYXJnZXQu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZl
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRl
ICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0
RE9NRXZlbnQuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAid2Via2l0L1dlYktpdERPTU5vZGUuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0
RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdEV2ZW50VGFy
Z2V0LmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldFByaXZhdGUu
aCIKKyNpbmNsdWRlICJ3ZWJraXRkZWZpbmVzLmgiCisjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3By
aXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
eworICAgIAorV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBraXQoV2ViQ29yZTo6VGVzdEV2ZW50
VGFyZ2V0KiBvYmopCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAwKTsKKworICAg
IGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqPihyZXQpOworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RFdmVudFRhcmdldCo+KERPTU9iamVjdENh
Y2hlOjpwdXQob2JqLCBXZWJLaXQ6OndyYXBUZXN0RXZlbnRUYXJnZXQob2JqKSkpOworfQorICAg
IAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBXZWJDb3JlOjpU
ZXN0RXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZl
bnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGNvcmVUYXJnZXQtPmRpc3BhdGNo
RXZlbnQoY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVz
Y3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2FsbGJh
Y2sgaGFuZGxlciwgZ2Jvb2xlYW4gYnViYmxlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBX
ZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBi
dWJibGUsIHVzZXJEYXRhKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9l
dmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0NhbGxiYWNrIGhhbmRsZXIsIGdib29sZWFu
IGJ1YmJsZSkKK3sKKyAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlz
dGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwg
ZXZlbnROYW1lLCBoYW5kbGVyLCBidWJibGUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQorewor
ICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRf
ZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9k
b21fdGVzdF9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1v
dmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X3JlbW92ZV9l
dmVudF9saXN0ZW5lcjsKK30KKworV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fdGVzdF9ldmVu
dF90YXJnZXRfaXRlbShXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIHNlbGYsIGd1bG9uZyBpbmRl
eCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6Ok5v
ZGU+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+aXRlbShpbmRleCkpOworICAgIFdlYktpdERP
TU5vZGUqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOwor
fQorCitnYm9vbGVhbgord2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVu
dChXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIHNlbGYsIFdlYktpdERPTUV2ZW50KiBldnQsIEdF
cnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
RXZlbnRUYXJnZXQgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKGV2dCwgMCk7CisgICAgV2ViQ29yZTo6RXZlbnQgKiBjb252ZXJ0ZWRfZXZ0ID0g
TlVMTDsKKyAgICBpZiAoZXZ0ICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX2V2dCA9IFdl
YktpdDo6Y29yZShldnQpOworICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb252ZXJ0ZWRf
ZXZ0LCAwKTsKKyAgICB9CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Z2Jvb2xlYW4gcmVzID0gaXRlbS0+ZGlzcGF0Y2hFdmVudChjb252ZXJ0ZWRfZXZ0LCBlYyk7Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAg
fQorICAgIHJldHVybiByZXM7Cit9CisKKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0
RE9NVGVzdEV2ZW50VGFyZ2V0LCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0LCBXRUJLSVRf
VFlQRV9ET01fT0JKRUNULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX1RZUEVfRE9NX0VW
RU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmUoV2ViS2l0RE9NVGVzdEV2
ZW50VGFyZ2V0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3Qs
IDApOworCisgICAgV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBjb3JlT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVz
dCktPmNvcmVPYmplY3QpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDAp
OworCisgICAgcmV0dXJuIGNvcmVPYmplY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
ZW51bSB7CisgICAgUFJPUF8wLAorfTsKKworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rf
ZXZlbnRfdGFyZ2V0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01P
YmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOworICAgIAorICAg
IGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CisgICAgICAgIFdlYkNvcmU6OlRlc3RFdmVu
dFRhcmdldCogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RFdmVudFRhcmdl
dCAqPihkb21fb2JqZWN0LT5jb3JlT2JqZWN0KTsKKworICAgICAgICBXZWJLaXQ6OkRPTU9iamVj
dENhY2hlOjpmb3JnZXQoY29yZU9iamVjdCk7CisgICAgICAgIGNvcmVPYmplY3QtPmRlcmVmKCk7
CisKKyAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CisgICAgfQorCisgICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZl
bnRfdGFyZ2V0X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNv
bnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBzd2l0Y2gg
KHByb3BfaWQpIHsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2NvbnN0
cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKworICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJr
aXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQorICAg
ICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X3BhcmVudF9j
bGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9ldmVudF90YXJnZXRfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0RXZlbnRUYXJnZXRDbGFz
cyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyAqZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0g
d2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfc2V0X3Byb3BlcnR5
OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2V2ZW50
X3RhcmdldF9nZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdl
YmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfY29uc3RydWN0ZWQ7CisKKworCit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01UZXN0RXZl
bnRUYXJnZXQqIHJlcXVlc3QpCit7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9N
VGVzdEV2ZW50VGFyZ2V0KiB3cmFwVGVzdEV2ZW50VGFyZ2V0KFdlYkNvcmU6OlRlc3RFdmVudFRh
cmdldCogY29yZU9iamVjdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0
LCAwKTsKKworICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21h
cnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGlu
IGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29k
ZSBmb3IgdGhlCisgICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2Jq
ZWN0LT5yZWYoKTsKKworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX0VWRU5UX1RBUkdFVChn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfRVZFTlRfVEFSR0VULAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3Jl
T2JqZWN0LCBOVUxMKSk7Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRh
cmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2
ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXN0RXZlbnRUYXJnZXRfaAorI2RlZmluZSBX
ZWJLaXRET01UZXN0RXZlbnRUYXJnZXRfaAorCisjaW5jbHVkZSAid2Via2l0L3dlYmtpdGRvbWRl
ZmluZXMuaCIKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXRkZWZpbmVzLmg+CisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTU9iamVjdC5oIgorCisKK0df
QkVHSU5fREVDTFMKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRE9NX1RFU1RfRVZFTlRfVEFSR0VUICAg
ICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9URVNUX0VWRU5UX1RBUkdFVChvYmopICAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9FVkVOVF9UQVJH
RVQsIFdlYktpdERPTVRlc3RFdmVudFRhcmdldCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9F
VkVOVF9UQVJHRVRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfRVZFTlRfVEFSR0VULCBXZWJLaXRET01UZXN0RXZl
bnRUYXJnZXRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0VWRU5UX1RBUkdFVChv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQ
RV9ET01fVEVTVF9FVkVOVF9UQVJHRVQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfRVZF
TlRfVEFSR0VUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IFdFQktJVF9UWVBFX0RPTV9URVNUX0VWRU5UX1RBUkdFVCkpCisjZGVmaW5lIFdFQktJVF9ET01f
VEVTVF9FVkVOVF9UQVJHRVRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfRVZFTlRfVEFSR0VULCBXZWJLaXRET01U
ZXN0RXZlbnRUYXJnZXRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0
IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9X
ZWJLaXRET01UZXN0RXZlbnRUYXJnZXRDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3Mg
cGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV90ZXN0X2V2
ZW50X3RhcmdldF9nZXRfdHlwZSAodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X2V2
ZW50X3RhcmdldF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RFdmVudFRhcmdldAor
ICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6Cisg
KgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX3Rlc3RfZXZlbnRf
dGFyZ2V0X2l0ZW0oV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBzZWxmLCBndWxvbmcgaW5kZXgp
OworCisvKioKKyAqIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0CisgKiBAZXZ0OiBBICNXZWJL
aXRET01FdmVudAorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczoKKyAqCisqKi8K
K1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfZGlzcGF0
Y2hfZXZlbnQoV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBzZWxmLCBXZWJLaXRET01FdmVudCog
ZXZ0LCBHRXJyb3IgKiplcnJvcik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRE
T01UZXN0RXZlbnRUYXJnZXRfaCAqLwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RFdmVudFRhcmdldFByaXZhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRh
cmdldFByaXZhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaWZuZGVmIFdFQl9LSVRfRE9NX1RFU1RfRVZFTlRfVEFSR0VUX1BSSVZB
VEVfSAorI2RlZmluZSBXRUJfS0lUX0RPTV9URVNUX0VWRU5UX1RBUkdFVF9QUklWQVRFX0gKKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L1dlYktpdERPTU9iamVj
dC5oPgorI2luY2x1ZGUgIlRlc3RFdmVudFRhcmdldC5oIgorbmFtZXNwYWNlIFdlYktpdCB7Cisg
ICAgV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0ICoKKyAgICB3cmFwVGVzdEV2ZW50VGFyZ2V0KFdl
YkNvcmU6OlRlc3RFdmVudFRhcmdldCAqY29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpUZXN0
RXZlbnRUYXJnZXQgKgorICAgIGNvcmUoV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0ICpyZXF1ZXN0
KTsKKworICAgIFdlYktpdERPTVRlc3RFdmVudFRhcmdldCoKKyAgICBraXQoV2ViQ29yZTo6VGVz
dEV2ZW50VGFyZ2V0KiBub2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
KiBXRUJfS0lUX0RPTV9URVNUX0VWRU5UX1RBUkdFVF9QUklWQVRFX0ggKi8KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmou
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCShyZXZpc2lvbiAxMDQ0OTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsMjAgKzI0LDM5IEBACiAjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgor
I2luY2x1ZGUgIlNWR1BvaW50LmgiCiAjaW5jbHVkZSAiVGVzdE9iai5oIgogI2luY2x1ZGUgIldl
YktpdERPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJib29sLmgiCiAjaW5jbHVkZSAiZ29iamVjdC9D
b252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTURvY3VtZW50
LmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTURvY3VtZW50UHJpdmF0ZS5oIgogI2luY2x1
ZGUgIndlYmtpdC9XZWJLaXRET01JREJLZXkuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9N
SURCS2V5UHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01PcHRpb25zT2JqZWN0
LmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTU9wdGlvbnNPYmplY3RQcml2YXRlLmgiCisj
aW5jbHVkZSAid2Via2l0L1dlYktpdERPTVNWR1BvaW50LmgiCisjaW5jbHVkZSAid2Via2l0L1dl
YktpdERPTVNWR1BvaW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01TZXJp
YWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0T2Jq
LmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RPYmpQcml2YXRlLmgiCisjaW5jbHVk
ZSAid2Via2l0L1dlYktpdERPTWEuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NYVByaXZh
dGUuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NYi5oIgorI2luY2x1ZGUgIndlYmtpdC9X
ZWJLaXRET01iUHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01ib29sLmgiCisj
aW5jbHVkZSAid2Via2l0L1dlYktpdERPTWJvb2xQcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0
L1dlYktpdERPTWMuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NY1ByaXZhdGUuaCIKKyNp
bmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NZC5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01k
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01lLmgiCisjaW5jbHVkZSAid2Vi
a2l0L1dlYktpdERPTWVQcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0ZGVmaW5lcy5oIgogI2lu
Y2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5o
IgpAQCAtMzk0LDYgKzQxMywxMzAgQEAgd2Via2l0X2RvbV90ZXN0X29ial9vdmVybG9hZGVkX21l
dGhvZDEoVwogI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLwogfQogCit2b2lkCit3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQxKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERP
TWEqICkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCk7CisgICAgV2ViQ29yZTo6
YSAqIGNvbnZlcnRlZF8gPSBOVUxMOworICAgIGlmICggIT0gTlVMTCkgeworICAgICAgICBjb252
ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVy
dGVkXyk7CisgICAgfQorICAgIGl0ZW0tPmNvbnZlcnQxKGNvbnZlcnRlZF8pOworfQorCit2b2lk
Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdl
YktpdERPTWIqICkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCk7CisgICAgV2Vi
Q29yZTo6YiAqIGNvbnZlcnRlZF8gPSBOVUxMOworICAgIGlmICggIT0gTlVMTCkgeworICAgICAg
ICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwo
Y29udmVydGVkXyk7CisgICAgfQorICAgIGl0ZW0tPmNvbnZlcnQyKGNvbnZlcnRlZF8pOworfQor
Cit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQzKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIFdlYktpdERPTWMqICkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCk7Cisg
ICAgV2ViQ29yZTo6YyAqIGNvbnZlcnRlZF8gPSBOVUxMOworICAgIGlmICggIT0gTlVMTCkgewor
ICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7CisgICAgICAgIGdfcmV0dXJuX2lm
X2ZhaWwoY29udmVydGVkXyk7CisgICAgfQorICAgIGl0ZW0tPmNvbnZlcnQzKGNvbnZlcnRlZF8p
OworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQ0KFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTWQqICkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KCk7CisgICAgV2ViQ29yZTo6ZCAqIGNvbnZlcnRlZF8gPSBOVUxMOworICAgIGlmICggIT0gTlVM
TCkgeworICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7CisgICAgICAgIGdfcmV0
dXJuX2lmX2ZhaWwoY29udmVydGVkXyk7CisgICAgfQorICAgIGl0ZW0tPmNvbnZlcnQ0KGNvbnZl
cnRlZF8pOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQ1KFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTWUqICkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKCk7CisgICAgV2ViQ29yZTo6ZSAqIGNvbnZlcnRlZF8gPSBOVUxMOworICAgIGlmICgg
IT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7CisgICAgICAg
IGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkXyk7CisgICAgfQorICAgIGl0ZW0tPmNvbnZlcnQ1
KGNvbnZlcnRlZF8pOworfQorCitXZWJLaXRET01TVkdQb2ludCoKK3dlYmtpdF9kb21fdGVzdF9v
YmpfbXV0YWJsZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNWR1BvaW50PiBnX3JlcyA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPm11dGFibGVQb2ludEZ1bmN0aW9uKCkpOworICAgIFdlYktpdERPTVNW
R1BvaW50KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsK
K30KKworV2ViS2l0RE9NU1ZHUG9pbnQqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2ltbXV0YWJsZV9w
b2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNWR1BvaW50PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0
ZW0tPmltbXV0YWJsZVBvaW50RnVuY3Rpb24oKSk7CisgICAgV2ViS2l0RE9NU1ZHUG9pbnQqIHJl
cyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lk
Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX29yYW5nZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGl0ZW0tPm9yYW5nZSgpOworfQorCitXZWJLaXRET01ib29sKgord2Via2l0
X2RvbV90ZXN0X29ial9zdHJpY3RfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29u
c3QgZ2NoYXIqIHN0ciwgZ2Zsb2F0IGEsIGdpbnQgYiwgR0Vycm9yICoqZXJyb3IpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0ciwgMCk7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkX3N0ciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHIpOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Ym9v
bD4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5zdHJpY3RGdW5jdGlvbihjb252ZXJ0ZWRfc3Ry
LCBhLCBiLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNk
ZXNjLm5hbWUpOworICAgIH0KKyAgICBXZWJLaXRET01ib29sKiByZXMgPSBXZWJLaXQ6OmtpdChn
X3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwogZ2xvbmcKIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3JlYWRfb25seV9pbnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewpA
QCAtMTAyNCw2ICsxMTY3LDg4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFs
X2F0dHIKICNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIp
ICovCiB9CiAKK1dlYktpdERPTURvY3VtZW50Kgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29u
dGVudF9kb2N1bWVudChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0
ZW0tPmNvbnRlbnREb2N1bWVudCgpKTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogcmVzID0gV2Vi
S2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK1dlYktpdERPTVNW
R1BvaW50Kgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfbXV0YWJsZV9wb2ludChXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6
OlNWR1BvaW50PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPm11dGFibGVQb2ludCgpKTsKKyAg
ICBXZWJLaXRET01TVkdQb2ludCogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAg
IHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X211dGFibGVf
cG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU1ZHUG9pbnQqIHZhbHVlKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OlNW
R1BvaW50ICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkg
eworICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAg
ICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIGl0ZW0tPnNl
dE11dGFibGVQb2ludChjb252ZXJ0ZWRfdmFsdWUpOworfQorCitXZWJLaXRET01TVkdQb2ludCoK
K3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2ltbXV0YWJsZV9wb2ludChXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNWR1Bv
aW50PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPmltbXV0YWJsZVBvaW50KCkpOworICAgIFdl
YktpdERPTVNWR1BvaW50KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0
dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfaW1tdXRhYmxlX3Bv
aW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNWR1BvaW50KiB2YWx1ZSkKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpTVkdQ
b2ludCAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsK
KyAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICAgICAg
Z19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAgICBpdGVtLT5zZXRJ
bW11dGFibGVQb2ludChjb252ZXJ0ZWRfdmFsdWUpOworfQorCitnZmxvYXQKK3dlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3N0cmljdF9mbG9hdChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnZmxvYXQgcmVzID0gaXRlbS0+c3RyaWN0RmxvYXQoKTsKKyAgICBy
ZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpY3RfZmxv
YXQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Zsb2F0IHZhbHVlKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGl0ZW0tPnNldFN0cmljdEZsb2F0KHZhbHVlKTsKK30KKwogZ2xvbmcKIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X2Rlc2NyaXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7CkBAIC0xMTE5
LDYgKzEzNDQsMTAgQEAgZW51bSB7CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQogICAgIFBST1BfQ09ORElUSU9OQUxfQVRUUjMsCiAjZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworICAgIFBST1BfQ09OVEVOVF9E
T0NVTUVOVCwKKyAgICBQUk9QX01VVEFCTEVfUE9JTlQsCisgICAgUFJPUF9JTU1VVEFCTEVfUE9J
TlQsCisgICAgUFJPUF9TVFJJQ1RfRkxPQVQsCiAgICAgUFJPUF9ERVNDUklQVElPTiwKICAgICBQ
Uk9QX0lELAogICAgIFBST1BfSEFTSCwKQEAgLTEyNzIsNiArMTUwMSwxMSBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9wcm9wCiAgICAgICAgIGJyZWFrOwogICAgIH0KICNl
bmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCisgICAg
Y2FzZSBQUk9QX1NUUklDVF9GTE9BVDoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRTdHJp
Y3RGbG9hdCgoZ192YWx1ZV9nZXRfZmxvYXQodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KICAgICBjYXNlIFBST1BfSUQ6CiAgICAgewogICAgICAgICBjb3JlU2VsZi0+c2V0SWQoKGdf
dmFsdWVfZ2V0X2xvbmcodmFsdWUpKSk7CkBAIC0xNDU2LDYgKzE2OTAsMjkgQEAgc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHJvcAogICAgICAgICBicmVhazsKICAgICB9CiAj
ZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworICAg
IGNhc2UgUFJPUF9DT05URU5UX0RPQ1VNRU5UOgorICAgIHsKKyAgICAgICAgUmVmUHRyPFdlYkNv
cmU6OkRvY3VtZW50PiBwdHIgPSBjb3JlU2VsZi0+Y29udGVudERvY3VtZW50KCk7CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfTVVUQUJMRV9QT0lOVDoKKyAgICB7Cisg
ICAgICAgIFJlZlB0cjxXZWJDb3JlOjpTVkdQb2ludD4gcHRyID0gY29yZVNlbGYtPm11dGFibGVQ
b2ludCgpOworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0
ci5nZXQoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX0lNTVVUQUJM
RV9QT0lOVDoKKyAgICB7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpTVkdQb2ludD4gcHRyID0g
Y29yZVNlbGYtPmltbXV0YWJsZVBvaW50KCk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIFBST1BfU1RSSUNUX0ZMT0FUOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxv
YXQodmFsdWUsIGNvcmVTZWxmLT5zdHJpY3RGbG9hdCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQogICAgIGNhc2UgUFJPUF9ERVNDUklQVElPTjoKICAgICB7CiAgICAgICAgIGdfdmFsdWVfc2V0
X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5kZXNjcmlwdGlvbigpKTsKQEAgLTE3NDUsNiArMjAwMiwz
NiBAQCBHX01BWExPTkcsIC8qIG1heCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CiAj
ZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwogICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9DT05URU5UX0RPQ1VNRU5ULAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgiY29udGVu
dC1kb2N1bWVudCIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2NvbnRlbnQtZG9jdW1lbnQiLCAv
KiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC1vbmx5ICBXZWJLaXRET01Eb2N1bWVudCog
VGVzdE9iai5jb250ZW50LWRvY3VtZW50IiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21l
IGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPTV9ET0NVTUVOVCwgLyog
Z29iamVjdCB0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJPUF9NVVRBQkxFX1BPSU5ULAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgibXV0YWJsZS1wb2ludCIsIC8q
IG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInRlc3Rfb2JqX211dGFibGUtcG9pbnQiLCAvKiBzaG9ydCBkZXNjcmlwdGlv
biAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAicmVhZC13cml0ZSAgV2ViS2l0RE9NU1ZHUG9pbnQqIFRlc3RPYmoubXV0YWJsZS1w
b2ludCIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVy
ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXRUJLSVRfVFlQRV9ET01fU1ZHX1BPSU5ULCAvKiBnb2JqZWN0IHR5cGUgKi8KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9JTU1VVEFCTEVfUE9JTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJpbW11dGFibGUtcG9pbnQiLCAvKiBuYW1lICovCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
ZXN0X29ial9pbW11dGFibGUtcG9pbnQiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVh
ZC13cml0ZSAgV2ViS2l0RE9NU1ZHUG9pbnQqIFRlc3RPYmouaW1tdXRhYmxlLXBvaW50IiwgLyog
bG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9UWVBFX0RPTV9TVkdfUE9JTlQsIC8qIGdvYmplY3QgdHlwZSAqLworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NUUklD
VF9GTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3Bl
Y19mbG9hdCgic3RyaWN0LWZsb2F0IiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfc3RyaWN0LWZs
b2F0IiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdmbG9hdCBUZXN0
T2JqLnN0cmljdC1mbG9hdCIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBk
b2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtR19NQVhGTE9BVCwgLyogbWluICovCitHX01BWEZMT0FULCAv
KiBtYXggKi8KKzAuMCwgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0RFU0NSSVBUSU9OLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoImRlc2NyaXB0
aW9uIiwgLyogbmFtZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfZGVzY3JpcHRpb24iLCAvKiBzaG9ydCBkZXNj
cmlwdGlvbiAqLwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAkocmV2aXNpb24g
MTA0NDkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsNiArMzM1LDEwNSBAQCBX
RUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfb3ZlcmxvYWRlZF9tZXRob2QxKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB0eXBlKTsKIAogLyoqCisgKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQxOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoK
KyAqIEA6IEEgI1dlYktpdERPTWEKKyAqCisgKiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQxKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIFdlYktpdERPTWEqICk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X29ial9jb252ZXJ0
MjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCisgKiBAOiBBICNXZWJLaXRET01iCisg
KgorICogUmV0dXJuczoKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0
X29ial9jb252ZXJ0MihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01iKiApOworCisv
KioKKyAqIHdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDM6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdE9iagorICogQDogQSAjV2ViS2l0RE9NYworICoKKyAqIFJldHVybnM6CisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDMoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NYyogKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2NvbnZlcnQ0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKKyAqIEA6IEEgI1dl
YktpdERPTWQKKyAqCisgKiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQ0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERP
TWQqICk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X29ial9jb252ZXJ0NToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01UZXN0T2JqCisgKiBAOiBBICNXZWJLaXRET01lCisgKgorICogUmV0dXJu
czoKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X29ial9jb252ZXJ0
NShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01lKiApOworCisvKioKKyAqIHdlYmtp
dF9kb21fdGVzdF9vYmpfbXV0YWJsZV9wb2ludF9mdW5jdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOgorICoKKyoqLwor
V0VCS0lUX0FQSSBXZWJLaXRET01TVkdQb2ludCoKK3dlYmtpdF9kb21fdGVzdF9vYmpfbXV0YWJs
ZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2ltbXV0YWJsZV9wb2ludF9mdW5jdGlvbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0T2JqCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOgorICoKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01TVkdQb2ludCoKK3dlYmtpdF9kb21fdGVzdF9vYmpfaW1t
dXRhYmxlX3BvaW50X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fdGVzdF9vYmpfb3JhbmdlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKKyAqCisgKiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X3Rlc3Rfb2JqX29yYW5nZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3N0cmljdF9mdW5jdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0T2JqCisgKiBAc3RyOiBBICNnY2hhcgorICogQGE6IEEgI2dmbG9hdAorICogQGI6IEEgI2dp
bnQKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKToK
KyAqCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NYm9vbCoKK3dlYmtpdF9kb21fdGVzdF9vYmpf
c3RyaWN0X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIs
IGdmbG9hdCBhLCBnaW50IGIsIEdFcnJvciAqKmVycm9yKTsKKworLyoqCiAgKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfaW50X2F0dHI6CiAgKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdE9iagogICoKQEAgLTk0OCw2ICsxMDQ3LDc5IEBAIFdFQktJVF9BUEkgdm9pZAogd2Via2l0
X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjMoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2xvbmcgdmFsdWUpOwogCiAvKioKKyAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbnRl
bnRfZG9jdW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBub25lKToKKyAqCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRG9jdW1l
bnQqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb250ZW50X2RvY3VtZW50KFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X211dGFibGVf
cG9pbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKToKKyAqCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NU1ZHUG9pbnQqCit3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X211dGFibGVfcG9pbnQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagorICogQHZhbHVlOiBBICNXZWJLaXRET01TVkdQ
b2ludAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKToKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfbXV0YWJsZV9wb2ludChXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TVkdQb2ludCogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X2ltbXV0YWJsZV9wb2ludDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0T2JqCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOgorICoKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01TVkdQb2ludCoKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2ltbXV0
YWJsZV9wb2ludChXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9pbW11dGFibGVfcG9pbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVz
dE9iagorICogQHZhbHVlOiBBICNXZWJLaXRET01TVkdQb2ludAorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKToKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0
X29ial9zZXRfaW1tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERP
TVNWR1BvaW50KiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3Ry
aWN0X2Zsb2F0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKKyAqCisgKiBSZXR1cm5z
OgorICoKKyoqLworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0
cmljdF9mbG9hdChXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9zdHJpY3RfZmxvYXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9i
agorICogQHZhbHVlOiBBICNnZmxvYXQKKyAqCisgKiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpY3RfZmxvYXQoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2Zsb2F0IHZhbHVlKTsKKworLyoqCiAgKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9kZXNjcmlwdGlvbjoKICAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCiAgKgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIlRlc3RPdmVycmlkaW5nTmFtZUdldHRl
ci5oIgorI2luY2x1ZGUgIldlYktpdERPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJnb2JqZWN0L0Nv
bnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdE92ZXJy
aWRpbmdOYW1lR2V0dGVyLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RPdmVycmlk
aW5nTmFtZUdldHRlclByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRkZWZpbmVzLmgiCisjaW5j
bHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIAorV2ViS2l0RE9NVGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyKiBraXQoV2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBvYmopCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAwKTsKKworICAgIGlmIChncG9pbnRlciByZXQg
PSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJLaXRET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqPihyZXQpOworCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFdlYktpdERPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlcio+KERPTU9iamVjdENh
Y2hlOjpwdXQob2JqLCBXZWJLaXQ6OndyYXBUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIob2JqKSkp
OworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCisKK3ZvaWQKK3dlYmtpdF9kb21f
dGVzdF9vdmVycmlkaW5nX25hbWVfZ2V0dGVyX2Fub3RoZXJfZnVuY3Rpb24oV2ViS2l0RE9NVGVz
dE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlciAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChzdHIpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZF9zdHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKKyAgICBp
dGVtLT5hbm90aGVyRnVuY3Rpb24oY29udmVydGVkX3N0cik7Cit9CisKKworR19ERUZJTkVfVFlQ
RShXZWJLaXRET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIsIHdlYmtpdF9kb21fdGVzdF9vdmVy
cmlkaW5nX25hbWVfZ2V0dGVyLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworV2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBjb3JlKFdlYktp
dERPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlciogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChyZXF1ZXN0LCAwKTsKKworICAgIFdlYkNvcmU6OlRlc3RPdmVycmlkaW5nTmFt
ZUdldHRlciogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RPdmVycmlkaW5n
TmFtZUdldHRlcio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKKworICAgIHJldHVybiBjb3Jl
T2JqZWN0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKK2VudW0geworICAgIFBST1BfMCwK
K307CisKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X292ZXJyaWRpbmdfbmFtZV9nZXR0
ZXJfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTU9iamVjdCogZG9t
X29iamVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7CisgICAgCisgICAgaWYgKGRvbV9v
YmplY3QtPmNvcmVPYmplY3QpIHsKKyAgICAgICAgV2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdO
YW1lR2V0dGVyICo+KGRvbV9vYmplY3QtPmNvcmVPYmplY3QpOworCisgICAgICAgIFdlYktpdDo6
RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChjb3JlT2JqZWN0KTsKKyAgICAgICAgY29yZU9iamVjdC0+
ZGVyZWYoKTsKKworICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKKyAgICB9
CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGluZ19uYW1lX2dl
dHRlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGluZ19uYW1lX2dldHRlcl9zZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X292ZXJyaWRp
bmdfbmFtZV9nZXR0ZXJfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9p
ZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fdGVzdF9vdmVycmlkaW5nX25hbWVfZ2V0dGVyX2NvbnN0cnVjdGVkKEdP
YmplY3QqIG9iamVjdCkKK3sKKworICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rl
c3Rfb3ZlcnJpZGluZ19uYW1lX2dldHRlcl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKKyAg
ICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X292ZXJyaWRpbmdfbmFtZV9nZXR0
ZXJfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXN0X292ZXJyaWRpbmdfbmFtZV9nZXR0ZXJfY2xhc3NfaW5pdChXZWJLaXRE
T01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyAqZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X292ZXJyaWRpbmdf
bmFtZV9nZXR0ZXJfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGluZ19uYW1lX2dldHRlcl9zZXRfcHJvcGVydHk7CisgICAg
Z29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGluZ19u
YW1lX2dldHRlcl9nZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9
IHdlYmtpdF9kb21fdGVzdF9vdmVycmlkaW5nX25hbWVfZ2V0dGVyX2NvbnN0cnVjdGVkOworCisK
KworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGluZ19uYW1lX2dldHRl
cl9pbml0KFdlYktpdERPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlciogcmVxdWVzdCkKK3sKK30K
KworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIq
IHdyYXBUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIoV2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyKiBjb3JlT2JqZWN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmpl
Y3QsIDApOworCisgICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1c2luZyBhIEMrKyBz
bWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0CisgICAgICog
aW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmluYWxpemUoKSBj
b2RlIGZvciB0aGUKKyAgICAgKiBtYXRjaGluZyBkZXJlZigpLgorICAgICAqLworICAgIGNvcmVP
YmplY3QtPnJlZigpOworCisgICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfT1ZFUlJJRElOR19O
QU1FX0dFVFRFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfT1ZFUlJJRElOR19O
QU1FX0dFVFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOworfQorfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpZm5kZWYgV2ViS2l0RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyX2gKKyNkZWZpbmUg
V2ViS2l0RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyX2gKKworI2luY2x1ZGUgIndlYmtpdC93
ZWJraXRkb21kZWZpbmVzLmgiCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01PYmplY3Qu
aCIKKworCitHX0JFR0lOX0RFQ0xTCisjZGVmaW5lIFdFQktJVF9UWVBFX0RPTV9URVNUX09WRVJS
SURJTkdfTkFNRV9HRVRURVIgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X292ZXJyaWRpbmdf
bmFtZV9nZXR0ZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09WRVJSSURJ
TkdfTkFNRV9HRVRURVIob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX1RZUEVfRE9NX1RFU1RfT1ZFUlJJRElOR19OQU1FX0dFVFRFUiwgV2Vi
S2l0RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNU
X09WRVJSSURJTkdfTkFNRV9HRVRURVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfT1ZFUlJJRElOR19OQU1FX0dF
VFRFUiwgV2ViS2l0RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ2xhc3MpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfVEVTVF9PVkVSUklESU5HX05BTUVfR0VUVEVSKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNUX09WRVJS
SURJTkdfTkFNRV9HRVRURVIpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfT1ZFUlJJRElO
R19OQU1FX0dFVFRFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9PVkVSUklESU5HX05BTUVfR0VUVEVSKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9URVNUX09WRVJSSURJTkdfTkFNRV9HRVRURVJfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1Rf
T1ZFUlJJRElOR19OQU1FX0dFVFRFUiwgV2ViS2l0RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlciB7Cisg
ICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0
RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGVz
dF9vdmVycmlkaW5nX25hbWVfZ2V0dGVyX2dldF90eXBlICh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3Rlc3Rfb3ZlcnJpZGluZ19uYW1lX2dldHRlcl9hbm90aGVyX2Z1bmN0aW9uOgorICog
QHNlbGY6IEEgI1dlYktpdERPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlcgorICogQHN0cjogQSAj
Z2NoYXIKKyAqCisgKiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX3Rlc3Rfb3ZlcnJpZGluZ19uYW1lX2dldHRlcl9hbm90aGVyX2Z1bmN0aW9uKFdlYktpdERP
TVRlc3RPdmVycmlkaW5nTmFtZUdldHRlciogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cik7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJf
aCAqLwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyUHJpdmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPdmVycmlkaW5nTmFtZUdldHRlclByaXZhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVycmlk
aW5nTmFtZUdldHRlclByaXZhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoK
KyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFdFQl9LSVRfRE9NX1RFU1RfT1ZFUlJJRElO
R19OQU1FX0dFVFRFUl9QUklWQVRFX0gKKyNkZWZpbmUgV0VCX0tJVF9ET01fVEVTVF9PVkVSUklE
SU5HX05BTUVfR0VUVEVSX1BSSVZBVEVfSAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSAiVGVzdE92ZXJyaWRp
bmdOYW1lR2V0dGVyLmgiCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICBXZWJLaXRET01UZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXIgKgorICAgIHdyYXBUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIoV2Vi
Q29yZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyICpjb3JlT2JqZWN0KTsKKworICAgIFdlYkNv
cmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlciAqCisgICAgY29yZShXZWJLaXRET01UZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXIgKnJlcXVlc3QpOworCisgICAgV2ViS2l0RE9NVGVzdE92ZXJyaWRp
bmdOYW1lR2V0dGVyKgorICAgIGtpdChXZWJDb3JlOjpUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIq
IG5vZGUpOworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdFQl9LSVRfRE9N
X1RFU1RfT1ZFUlJJRElOR19OQU1FX0dFVFRFUl9QUklWQVRFX0ggKi8KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3RBY3RpdmVET01PYmplY3QuaCIKKworI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU05vZGUuaCIKKyNpbmNsdWRlICJUZXN0QWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBU1NFUlRfQ0xBU1NfRklUU19J
Tl9DRUxMKEpTVGVzdEFjdGl2ZURPTU9iamVjdCk7CitBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJV
Q1RPUihKU1Rlc3RBY3RpdmVET01PYmplY3QpOworCisvKiBIYXNoIHRhYmxlICovCisKK3N0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RBY3RpdmVET01PYmplY3RUYWJsZVZhbHVlc1td
ID0KK3sKKyAgICB7ICJleGNpdGluZ0F0dHIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRw
dHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0QWN0aXZl
RE9NT2JqZWN0RXhjaXRpbmdBdHRyKSwgKGludHB0cl90KTAsIE5vSW50cmluc2ljIH0sCisgICAg
eyAiY29uc3RydWN0b3IiLCBEb250RW51bSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0
cnVjdG9yKSwgKGludHB0cl90KTAsIE5vSW50cmluc2ljIH0sCisgICAgeyAwLCAwLCAwLCAwLCBO
b0ludHJpbnNpYyB9Cit9OworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEFjdGl2ZURP
TU9iamVjdFRhYmxlID0geyA0LCAzLCBKU1Rlc3RBY3RpdmVET01PYmplY3RUYWJsZVZhbHVlcywg
MCB9OworLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KKworc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yVGFibGVWYWx1ZXNb
XSA9Cit7CisgICAgeyAwLCAwLCAwLCAwLCBOb0ludHJpbnNpYyB9Cit9OworCitzdGF0aWMgY29u
c3QgSGFzaFRhYmxlIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yVGFibGUgPSB7IDEs
IDAsIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKK0FT
U0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVj
dG9yKTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9y
OjpzX2luZm8gPSB7ICJUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IiLCAmQmFzZTo6c19p
bmZvLCAmSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcikgfTsKKworSlNUZXN0
QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OkpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVj
dG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7
Cit9CisKK3ZvaWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJv
dG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7
Cit9CisKK2Jvb2wgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRp
Y1ZhbHVlU2xvdDxKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvciwgSlNET01XcmFwcGVy
PihleGVjLCAmSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3JUYWJsZSwgc3RhdGljX2Nh
c3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IqPihjZWxsKSwgcHJvcGVydHlOYW1l
LCBzbG90KTsKK30KKworYm9vbCBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcjo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU1Rlc3RBY3Rp
dmVET01PYmplY3RDb25zdHJ1Y3RvciwgSlNET01XcmFwcGVyPihleGVjLCAmSlNUZXN0QWN0aXZl
RE9NT2JqZWN0Q29uc3RydWN0b3JUYWJsZSwgc3RhdGljX2Nhc3Q8SlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0Q29uc3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQor
CisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQorewor
ICAgIHsgImV4Y2l0aW5nRnVuY3Rpb24iLCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RBY3RpdmVET01PYmplY3RQ
cm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb24pLCAoaW50cHRyX3QpMSwgTm9JbnRyaW5z
aWMgfSwKKyAgICB7ICJwb3N0TWVzc2FnZSIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdEFjdGl2ZURPTU9iamVj
dFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2UpLCAoaW50cHRyX3QpMSwgTm9JbnRyaW5zaWMg
fSwKKyAgICB7IDAsIDAsIDAsIDAsIE5vSW50cmluc2ljIH0KK307CisKK3N0YXRpYyBjb25zdCBI
YXNoVGFibGUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlVGFibGUgPSB7IDQsIDMsIEpT
VGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07Citjb25zdCBDbGFz
c0luZm8gSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdEFjdGl2ZURPTU9i
amVjdFByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEFjdGl2ZURP
TU9iamVjdFByb3RvdHlwZSkgfTsKKworSlNPYmplY3QqIEpTVGVzdEFjdGl2ZURPTU9iamVjdFBy
b3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RBY3RpdmVET01PYmplY3Q+
KGV4ZWMsIGdsb2JhbE9iamVjdCk7Cit9CisKK2Jvb2wgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJv
dG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorewor
ICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUqPihjZWxsKTsKKyAgICByZXR1cm4gZ2V0U3Rh
dGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCAmSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJv
dG90eXBlVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wg
SlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU1Rlc3RB
Y3RpdmVET01PYmplY3RQcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0QWN0aXZl
RE9NT2JqZWN0UHJvdG90eXBlKj4ob2JqZWN0KTsKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rp
b25EZXNjcmlwdG9yPEpTT2JqZWN0PihleGVjLCAmSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK2Nv
bnN0IENsYXNzSW5mbyBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OnNfaW5mbyA9IHsgIlRlc3RBY3Rp
dmVET01PYmplY3QiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0QWN0aXZlRE9NT2JqZWN0VGFibGUs
IDAgLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEFjdGl2ZURPTU9iamVjdCkgfTsKKworSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0OjpKU1Rlc3RBY3RpdmVET01PYmplY3QoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdEFj
dGl2ZURPTU9iamVjdD4gaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcihzdHJ1Y3R1cmUsIGdsb2Jh
bE9iamVjdCkKKyAgICAsIG1faW1wbChpbXBsLmxlYWtSZWYoKSkKK3sKK30KKwordm9pZCBKU1Rl
c3RBY3RpdmVET01PYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpOworfQorCitKU09iamVjdCogSlNUZXN0QWN0aXZlRE9NT2JqZWN0
OjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OmNy
ZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCit2
b2lkIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sK
KyAgICBKU1Rlc3RBY3RpdmVET01PYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0QWN0
aXZlRE9NT2JqZWN0Kj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+cmVsZWFzZUltcGxJZk5vdE51
bGwoKTsKK30KKworYm9vbCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEFjdGl2ZURPTU9iamVjdCo+KGNlbGwpOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgcmV0
dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3RBY3RpdmVET01PYmplY3QsIEJhc2U+KGV4ZWMs
ICZKU1Rlc3RBY3RpdmVET01PYmplY3RUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBz
bG90KTsKK30KKworYm9vbCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAg
IEpTVGVzdEFjdGl2ZURPTU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RBY3RpdmVE
T01PYmplY3QqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgJnNfaW5mbyk7CisgICAgaWYgKCFhbGxvd0FjY2Vzc1RvRnJhbWUoZXhlYywgdGhpc09i
amVjdC0+aW1wbCgpLT5mcmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0QWN0aXZlRE9NT2JqZWN0LCBCYXNlPihl
eGVjLCAmSlNUZXN0QWN0aXZlRE9NT2JqZWN0VGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7Cit9CisKK0pTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRp
bmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmll
ciYpCit7CisgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nh
c3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBpZiAo
IWNhc3RlZFRoaXMtPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0QWN0aXZlRE9NT2Jq
ZWN0KiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdEFjdGl2ZURPTU9iamVjdCo+KGNhc3RlZFRoaXMt
PmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLT5leGNpdGluZ0F0
dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVlIGpzVGVzdEFjdGl2ZURP
TU9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29u
c3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiBkb21PYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU1Rlc3RBY3RpdmVET01PYmplY3QqPihhc09iamVjdChzbG90QmFzZSkp
OworICAgIGlmICghZG9tT2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gSlNUZXN0QWN0aXZlRE9NT2JqZWN0Ojpn
ZXRDb25zdHJ1Y3RvcihleGVjLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKK30KKworSlNW
YWx1ZSBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19j
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25F
eGNpdGluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygm
SlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RBY3RpdmVET01PYmplY3QqIGNhc3RlZFRoaXMgPSBz
dGF0aWNfY2FzdDxKU1Rlc3RBY3RpdmVET01PYmplY3QqPihhc09iamVjdCh0aGlzVmFsdWUpKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RBY3RpdmVE
T01PYmplY3Q6OnNfaW5mbyk7CisgICAgaWYgKCFjYXN0ZWRUaGlzLT5hbGxvd3NBY2Nlc3NGcm9t
KGV4ZWMpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIFRlc3RBY3RpdmVET01PYmplY3QqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0QWN0aXZlRE9N
T2JqZWN0Kj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOworICAgIE5vZGUqIG5leHRDaGlsZCh0
b05vZGUoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgTWlzc2luZ0lzVW5kZWZpbmVk
KSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBpbXBsLT5leGNpdGluZ0Z1bmN0aW9uKG5l
eHRDaGlsZCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90
b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5p
bmhlcml0cygmSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpzX2luZm8pKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RBY3RpdmVET01PYmplY3QqIGNhc3Rl
ZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RBY3RpdmVET01PYmplY3QqPihhc09iamVjdCh0aGlz
VmFsdWUpKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rl
c3RBY3RpdmVET01PYmplY3Q6OnNfaW5mbyk7CisgICAgVGVzdEFjdGl2ZURPTU9iamVjdCogaW1w
bCA9IHN0YXRpY19jYXN0PFRlc3RBY3RpdmVET01PYmplY3QqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVu
dHMiKSk7CisgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlKHVzdHJpbmdUb1N0cmluZyhNQVlCRV9N
SVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBNaXNzaW5nSXNVbmRlZmluZWQpLmlzRW1wdHkoKSA/
IFVTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIE1pc3NpbmdJc1Vu
ZGVmaW5lZCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgaW1w
bC0+cG9zdE1lc3NhZ2UobWVzc2FnZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzT2JzZXJ2YWJsZShKU1Rlc3RB
Y3RpdmVET01PYmplY3QqIGpzVGVzdEFjdGl2ZURPTU9iamVjdCkKK3sKKyAgICBpZiAoanNUZXN0
QWN0aXZlRE9NT2JqZWN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKU1Rlc3RBY3RpdmVET01PYmplY3RP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1Rlc3RBY3Rp
dmVET01PYmplY3QqIGpzVGVzdEFjdGl2ZURPTU9iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEFj
dGl2ZURPTU9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CisgICAgaWYgKCFpc09ic2Vy
dmFibGUoanNUZXN0QWN0aXZlRE9NT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0T3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdCog
anNUZXN0QWN0aXZlRE9NT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0
Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0g
c3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBw
ZXIod29ybGQsIGpzVGVzdEFjdGl2ZURPTU9iamVjdC0+aW1wbCgpLCBqc1Rlc3RBY3RpdmVET01P
YmplY3QpOworICAgIGpzVGVzdEFjdGl2ZURPTU9iamVjdC0+cmVsZWFzZUltcGwoKTsKK30KKwor
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRlc3RBY3RpdmVET01PYmplY3QqIGltcGwpCit7CisgICAgcmV0dXJu
IHdyYXA8SlNUZXN0QWN0aXZlRE9NT2JqZWN0PihleGVjLCBnbG9iYWxPYmplY3QsIGltcGwpOwor
fQorCitUZXN0QWN0aXZlRE9NT2JqZWN0KiB0b1Rlc3RBY3RpdmVET01PYmplY3QoSlNDOjpKU1Zh
bHVlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cygmSlNUZXN0QWN0aXZlRE9N
T2JqZWN0OjpzX2luZm8pID8gc3RhdGljX2Nhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4oYXNP
YmplY3QodmFsdWUpKS0+aW1wbCgpIDogMDsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3Rp
dmVET01PYmplY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNDcgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBKU1Rlc3RBY3Rp
dmVET01PYmplY3RfaAorI2RlZmluZSBKU1Rlc3RBY3RpdmVET01PYmplY3RfaAorCisjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiVGVzdEFjdGl2ZURPTU9iamVjdC5oIgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3RBY3RpdmVET01PYmplY3QgOiBwdWJsaWMgSlNET01X
cmFwcGVyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOworICAgIHN0
YXRpYyBKU1Rlc3RBY3RpdmVET01PYmplY3QqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RBY3Rp
dmVET01PYmplY3Q+IGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RBY3RpdmVET01PYmplY3Qq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0PihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIHJldHVybiBwdHI7
CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0
eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7Cisg
ICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKKyAgICBUZXN0QWN0aXZlRE9NT2JqZWN0KiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9p
bXBsOyB9CisgICAgdm9pZCByZWxlYXNlSW1wbCgpIHsgbV9pbXBsLT5kZXJlZigpOyBtX2ltcGwg
PSAwOyB9CisKKyAgICB2b2lkIHJlbGVhc2VJbXBsSWZOb3ROdWxsKCkgeyBpZiAobV9pbXBsKSB7
IG1faW1wbC0+ZGVyZWYoKTsgbV9pbXBsID0gMDsgfSB9CisKK3ByaXZhdGU6CisgICAgVGVzdEFj
dGl2ZURPTU9iamVjdCogbV9pbXBsOworcHJvdGVjdGVkOgorICAgIEpTVGVzdEFjdGl2ZURPTU9i
amVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0
QWN0aXZlRE9NT2JqZWN0Pik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFs
RGF0YSYpOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9Owor
CitjbGFzcyBKU1Rlc3RBY3RpdmVET01PYmplY3RPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3Im
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBw
ZXJPd25lcihET01XcmFwcGVyV29ybGQqLCBUZXN0QWN0aXZlRE9NT2JqZWN0KikKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEpTVGVzdEFjdGl2ZURPTU9iamVjdE93bmVyLCBqc1Rlc3RBY3Rp
dmVET01PYmplY3RPd25lciwgKCkpOworICAgIHJldHVybiAmanNUZXN0QWN0aXZlRE9NT2JqZWN0
T3duZXI7Cit9CisKK2lubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV29ybGQq
IHdvcmxkLCBUZXN0QWN0aXZlRE9NT2JqZWN0KikKK3sKKyAgICByZXR1cm4gd29ybGQ7Cit9CisK
K0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBU
ZXN0QWN0aXZlRE9NT2JqZWN0Kik7CitUZXN0QWN0aXZlRE9NT2JqZWN0KiB0b1Rlc3RBY3RpdmVE
T01PYmplY3QoSlNDOjpKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJv
dG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0
aWMgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdEFjdGl2ZURPTU9iamVj
dFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RB
Y3RpdmVET01PYmplY3RQcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpIEpTVGVzdEFjdGl2ZURP
TU9iamVjdFByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Cisg
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBw
dHI7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKSB7IH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVj
dHVyZUZsYWdzOworfTsKKworY2xhc3MgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3Ig
OiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RBY3Rp
dmVET01PYmplY3RDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJh
c2U7CisgICAgc3RhdGljIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKiBjcmVhdGUo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RBY3RpdmVET01P
YmplY3RDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxK
U1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTVGVzdEFj
dGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1
cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6
OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwg
SlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0lu
Zm8gc19pbmZvOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Cit9Owor
CisvLyBGdW5jdGlvbnMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uRXhjaXRpbmdGdW5jdGlvbihKU0M6OkV4
ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEFjdGl2
ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUqKTsK
Ky8vIEF0dHJpYnV0ZXMKKworSlNDOjpKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0
aW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJik7CitKU0M6OkpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTA0NDkyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTMsNiArMTEzLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBK
U1Rlc3RFdmVudAogCiBib29sIGZpbGxUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQoVGVzdEV2ZW50
Q29uc3RydWN0b3JJbml0JiBldmVudEluaXQsIEpTRGljdGlvbmFyeSYgZGljdGlvbmFyeSkKIHsK
KyAgICBpZiAoIWRpY3Rpb25hcnkudHJ5R2V0UHJvcGVydHkoImF0dHIyIiwgZXZlbnRJbml0LmF0
dHIyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJn
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDM1NCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0RXZlbnRUYXJnZXQuaCIKKworI2luY2x1ZGUg
IkV2ZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgorI2luY2x1ZGUgIkpTRXZlbnQuaCIKKyNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlICJKU05vZGUuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiVGVz
dEV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAid3RmL3RleHQvQXRvbWljU3RyaW5nLmgiCisjaW5j
bHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJy
YXkuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1Rlc3RF
dmVudFRhcmdldCk7CitBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihKU1Rlc3RFdmVudFRh
cmdldCk7CisKKy8qIEhhc2ggdGFibGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTVGVzdEV2ZW50VGFyZ2V0VGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3Ii
LCBEb250RW51bSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IpLCAoaW50cHRyX3Qp
MCwgTm9JbnRyaW5zaWMgfSwKKyAgICB7IDAsIDAsIDAsIDAsIE5vSW50cmluc2ljIH0KK307CisK
K3N0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0RXZlbnRUYXJnZXRUYWJsZSA9IHsgMiwgMSwg
SlNUZXN0RXZlbnRUYXJnZXRUYWJsZVZhbHVlcywgMCB9OworLyogSGFzaCB0YWJsZSBmb3IgY29u
c3RydWN0b3IgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEV2ZW50VGFy
Z2V0Q29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7IDAsIDAsIDAsIDAsIE5vSW50
cmluc2ljIH0KK307CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0RXZlbnRUYXJnZXRD
b25zdHJ1Y3RvclRhYmxlID0geyAxLCAwLCBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yVGFi
bGVWYWx1ZXMsIDAgfTsKK0FTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTVGVzdEV2ZW50
VGFyZ2V0Q29uc3RydWN0b3IpOworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0RXZlbnRUYXJnZXRD
b25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IiLCAmQmFz
ZTo6c19pbmZvLCAmSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvclRhYmxlLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IpIH07CisKK0pTVGVzdEV2
ZW50VGFyZ2V0Q29uc3RydWN0b3I6OkpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBE
T01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3sKK30KKwordm9p
ZCBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoJnNf
aW5mbykpOworICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpzZWxmKGV4ZWMs
IGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Cit9CisKK2Jvb2wgSlNUZXN0
RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdEV2ZW50
VGFyZ2V0Q29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdEV2ZW50VGFyZ2V0
Q29uc3RydWN0b3JUYWJsZSwgc3RhdGljX2Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rv
cio+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTVGVzdEV2ZW50VGFy
Z2V0Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURl
c2NyaXB0b3I8SlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvciwgSlNET01XcmFwcGVyPihleGVj
LCAmSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvclRhYmxlLCBzdGF0aWNfY2FzdDxKU1Rlc3RF
dmVudFRhcmdldENvbnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKK30KKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQor
eworICAgIHsgIml0ZW0iLCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0
YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0
aW9uSXRlbSksIChpbnRwdHJfdCkxLCBOb0ludHJpbnNpYyB9LAorICAgIHsgImFkZEV2ZW50TGlz
dGVuZXIiLCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0
PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQWRkRXZl
bnRMaXN0ZW5lciksIChpbnRwdHJfdCkzLCBOb0ludHJpbnNpYyB9LAorICAgIHsgInJlbW92ZUV2
ZW50TGlzdGVuZXIiLCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9u
UmVtb3ZlRXZlbnRMaXN0ZW5lciksIChpbnRwdHJfdCkzLCBOb0ludHJpbnNpYyB9LAorICAgIHsg
ImRpc3BhdGNoRXZlbnQiLCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0
YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0
aW9uRGlzcGF0Y2hFdmVudCksIChpbnRwdHJfdCkxLCBOb0ludHJpbnNpYyB9LAorICAgIHsgMCwg
MCwgMCwgMCwgTm9JbnRyaW5zaWMgfQorfTsKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rl
c3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlID0geyA4LCA3LCBKU1Rlc3RFdmVudFRhcmdldFBy
b3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07Citjb25zdCBDbGFzc0luZm8gSlNUZXN0RXZlbnRUYXJn
ZXRQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RFdmVudFRhcmdldFByb3RvdHlwZSIsICZCYXNl
OjpzX2luZm8sICZKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKSB9OworCitKU09iamVjdCogSlNU
ZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0
RXZlbnRUYXJnZXQ+KGV4ZWMsIGdsb2JhbE9iamVjdCk7Cit9CisKK2Jvb2wgSlNUZXN0RXZlbnRU
YXJnZXRQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqPihjZWxsKTsKKyAgICByZXR1cm4gZ2V0U3Rh
dGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCAmSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5
cGVUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU1Rl
c3RFdmVudFRhcmdldFByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNUZXN0RXZlbnRUYXJn
ZXRQcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5
cGUqPihvYmplY3QpOworICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNP
YmplY3Q+KGV4ZWMsICZKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlLCB0aGlzT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0
RXZlbnRUYXJnZXQ6OnNfaW5mbyA9IHsgIlRlc3RFdmVudFRhcmdldCIsICZCYXNlOjpzX2luZm8s
ICZKU1Rlc3RFdmVudFRhcmdldFRhYmxlLCAwICwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RF
dmVudFRhcmdldCkgfTsKKworSlNUZXN0RXZlbnRUYXJnZXQ6OkpTVGVzdEV2ZW50VGFyZ2V0KFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNz
UmVmUHRyPFRlc3RFdmVudFRhcmdldD4gaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1faW1wbChpbXBsLmxlYWtSZWYoKSkKK3sKK30KKwor
dm9pZCBKU1Rlc3RFdmVudFRhcmdldDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3RFdmVudFRhcmdl
dDo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OmNyZWF0
ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0RXZlbnRUYXJnZXRQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK3ZvaWQgSlNU
ZXN0RXZlbnRUYXJnZXQ6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0
RXZlbnRUYXJnZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPihjZWxs
KTsKKyAgICB0aGlzT2JqZWN0LT5yZWxlYXNlSW1wbElmTm90TnVsbCgpOworfQorCitib29sIEpT
VGVzdEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dEV2ZW50VGFyZ2V0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCAmc19pbmZvKTsKKyAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gSlNUZXN0RXZl
bnRUYXJnZXRUYWJsZS5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChlbnRyeSkg
eworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0
ZXIoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBib29sIG9rOworICAgIHVu
c2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLnRvVUludDMyKG9rKTsKKyAgICBpZiAob2sgJiYg
aW5kZXggPCBzdGF0aWNfY2FzdDxUZXN0RXZlbnRUYXJnZXQqPih0aGlzT2JqZWN0LT5pbXBsKCkp
LT5sZW5ndGgoKSkgeworICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGlu
ZGV4LCBpbmRleEdldHRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAo
Y2FuR2V0SXRlbXNGb3JOYW1lKGV4ZWMsIHN0YXRpY19jYXN0PFRlc3RFdmVudFRhcmdldCo+KHRo
aXNPYmplY3QtPmltcGwoKSksIHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgc2xvdC5zZXRDdXN0
b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bmFtZUdldHRlcik7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdEV2ZW50VGFy
Z2V0LCBCYXNlPihleGVjLCAmSlNUZXN0RXZlbnRUYXJnZXRUYWJsZSwgdGhpc09iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Cit7CisgICAgSlNUZXN0RXZlbnRUYXJnZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0RXZl
bnRUYXJnZXQqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgJnNfaW5mbyk7CisgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IEpTVGVzdEV2ZW50
VGFyZ2V0VGFibGUuZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoZW50cnkpIHsK
KyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNP
YmplY3QsIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpKTsKKyAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgZW50cnktPmF0dHJp
YnV0ZXMoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBib29sIG9rOworICAg
IHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLnRvVUludDMyKG9rKTsKKyAgICBpZiAob2sg
JiYgaW5kZXggPCBzdGF0aWNfY2FzdDxUZXN0RXZlbnRUYXJnZXQqPih0aGlzT2JqZWN0LT5pbXBs
KCkpLT5sZW5ndGgoKSkgeworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAgc2xv
dC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIpOworICAgICAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5h
bWUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKGNhbkdldEl0ZW1zRm9yTmFtZShleGVjLCBzdGF0aWNfY2FzdDxUZXN0RXZlbnRU
YXJnZXQqPih0aGlzT2JqZWN0LT5pbXBsKCkpLCBwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIFBy
b3BlcnR5U2xvdCBzbG90OworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBuYW1l
R2V0dGVyKTsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUo
ZXhlYywgcHJvcGVydHlOYW1lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVz
Y3JpcHRvcjxKU1Rlc3RFdmVudFRhcmdldCwgQmFzZT4oZXhlYywgJkpTVGVzdEV2ZW50VGFyZ2V0
VGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK2Jvb2wg
SlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dEV2ZW50VGFyZ2V0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCAmc19pbmZvKTsKKyAgICBpZiAocHJvcGVydHlOYW1lIDwgc3RhdGljX2Nhc3Q8VGVz
dEV2ZW50VGFyZ2V0Kj4odGhpc09iamVjdC0+aW1wbCgpKS0+bGVuZ3RoKCkpIHsKKyAgICAgICAg
c2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3Qt
PmluZGV4R2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKK30KKwor
SlNWYWx1ZSBqc1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0RXZlbnRUYXJn
ZXQqIGRvbU9iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4oYXNPYmplY3Qo
c2xvdEJhc2UpKTsKKyAgICByZXR1cm4gSlNUZXN0RXZlbnRUYXJnZXQ6OmdldENvbnN0cnVjdG9y
KGV4ZWMsIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOworfQorCit2b2lkIEpTVGVzdEV2ZW50
VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQoreworICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dEV2ZW50VGFyZ2V0Kj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsICZzX2luZm8pOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNf
Y2FzdDxUZXN0RXZlbnRUYXJnZXQqPih0aGlzT2JqZWN0LT5pbXBsKCkpLT5sZW5ndGgoKTsgKytp
KQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsK
KyAgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKK30KKworSlNWYWx1ZSBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0Q29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9y
PihleGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90
eXBlRnVuY3Rpb25JdGVtKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygm
SlNUZXN0RXZlbnRUYXJnZXQ6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOworICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nh
c3Q8SlNUZXN0RXZlbnRUYXJnZXQqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RFdmVudFRhcmdldDo6c19pbmZv
KTsKKyAgICBUZXN0RXZlbnRUYXJnZXQqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0RXZlbnRUYXJn
ZXQqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisgICAgaW50IGluZGV4KE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGV4ZWMsIDAsIE1pc3NpbmdJc1VuZGVmaW5lZCkudG9VSW50MzIoZXhlYykp
OworICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIElO
REVYX1NJWkVfRVJSKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICB9CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgSlNDOjpKU1ZhbHVlIHJl
c3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRy
KGltcGwtPml0ZW0oaW5kZXgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJv
dG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNW
YWx1ZS5pbmhlcml0cygmSlNUZXN0RXZlbnRUYXJnZXQ6OnNfaW5mbykpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiBjYXN0ZWRU
aGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPihhc09iamVjdCh0aGlzVmFsdWUp
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RFdmVu
dFRhcmdldDo6c19pbmZvKTsKKyAgICBUZXN0RXZlbnRUYXJnZXQqIGltcGwgPSBzdGF0aWNfY2Fz
dDxUZXN0RXZlbnRUYXJnZXQqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPCAyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisgICAgSlNWYWx1
ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIGlmICghbGlzdGVuZXIuaXNPYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICBpbXBsLT5hZGRFdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0
KGxpc3RlbmVyKSwgY2FzdGVkVGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGV4ZWMt
PmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdEV2ZW50VGFyZ2V0OjpzX2lu
Zm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RF
dmVudFRhcmdldCogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4o
YXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCAmSlNUZXN0RXZlbnRUYXJnZXQ6OnNfaW5mbyk7CisgICAgVGVzdEV2ZW50VGFyZ2V0
KiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdEV2ZW50VGFyZ2V0Kj4oY2FzdGVkVGhpcy0+aW1wbCgp
KTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1l
bnRzIikpOworICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBp
ZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgaW1wbC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9B
dG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlz
dGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGNhc3RlZFRoaXMsIGZhbHNlLCBjdXJy
ZW50V29ybGQoZXhlYykpLmdldCgpLCBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYykp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlv
bkRpc3BhdGNoRXZlbnQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZK
U1Rlc3RFdmVudFRhcmdldDo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYyk7CisgICAgSlNUZXN0RXZlbnRUYXJnZXQqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RFdmVudFRhcmdldCo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdEV2ZW50VGFyZ2V0OjpzX2luZm8p
OworICAgIFRlc3RFdmVudFRhcmdldCogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RFdmVudFRhcmdl
dCo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDEpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBFdmVudCogZXZ0KHRvRXZlbnQoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwg
TWlzc2luZ0lzVW5kZWZpbmVkKSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIEpTQzo6
SlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC0+ZGlzcGF0Y2hFdmVudChldnQsIGVjKSk7
CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7Cit9CisKK3ZvaWQgSlNUZXN0RXZlbnRUYXJnZXQ6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1Rlc3RFdmVudFRh
cmdldCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KGNlbGwpOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQ09N
UElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKKyAgICBBU1NFUlQodGhpc09i
amVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsK
KyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHRoaXNP
YmplY3QtPmltcGwoKS0+dmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOworfQorCisKK0pT
VmFsdWUgSlNUZXN0RXZlbnRUYXJnZXQ6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBzbG90QmFzZSwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgSlNUZXN0RXZlbnRUYXJnZXQq
IHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KGFzT2JqZWN0KHNsb3RC
YXNlKSk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqLCAmc19pbmZvKTsK
KyAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgc3RhdGljX2Nh
c3Q8VGVzdEV2ZW50VGFyZ2V0Kj4odGhpc09iai0+aW1wbCgpKS0+aXRlbShpbmRleCkpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgaXNPYnNlcnZhYmxlKEpTVGVzdEV2ZW50VGFyZ2V0KiBqc1Rl
c3RFdmVudFRhcmdldCkKK3sKKyAgICBpZiAoanNUZXN0RXZlbnRUYXJnZXQtPmhhc0N1c3RvbVBy
b3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGpzVGVzdEV2ZW50VGFy
Z2V0LT5pbXBsKCktPmhhc0V2ZW50TGlzdGVuZXJzKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKU1Rlc3RFdmVudFRhcmdldE93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiBq
c1Rlc3RFdmVudFRhcmdldCA9IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4oaGFuZGxl
LmdldCgpLmFzQ2VsbCgpKTsKKyAgICBpZiAoIWlzT2JzZXJ2YWJsZShqc1Rlc3RFdmVudFRhcmdl
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0T3duZXI6OmZpbmFs
aXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQorewor
ICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiBqc1Rlc3RFdmVudFRhcmdldCA9IHN0YXRpY19jYXN0PEpT
VGVzdEV2ZW50VGFyZ2V0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBET01XcmFwcGVy
V29ybGQqIHdvcmxkID0gc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7Cisg
ICAgdW5jYWNoZVdyYXBwZXIod29ybGQsIGpzVGVzdEV2ZW50VGFyZ2V0LT5pbXBsKCksIGpzVGVz
dEV2ZW50VGFyZ2V0KTsKKyAgICBqc1Rlc3RFdmVudFRhcmdldC0+cmVsZWFzZUltcGwoKTsKK30K
KworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RFdmVudFRhcmdldCogaW1wbCkKK3sKKyAgICByZXR1cm4g
d3JhcDxKU1Rlc3RFdmVudFRhcmdldD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKwor
VGVzdEV2ZW50VGFyZ2V0KiB0b1Rlc3RFdmVudFRhcmdldChKU0M6OkpTVmFsdWUgdmFsdWUpCit7
CisgICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKCZKU1Rlc3RFdmVudFRhcmdldDo6c19pbmZvKSA/
IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4oYXNPYmplY3QodmFsdWUpKS0+aW1wbCgp
IDogMDsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJn
ZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2lmbmRlZiBKU1Rlc3RFdmVudFRhcmdldF9oCisjZGVmaW5lIEpTVGVzdEV2ZW50VGFy
Z2V0X2gKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIlRlc3RFdmVudFRh
cmdldC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTT2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3RFdmVudFRhcmdldCA6IHB1Ymxp
YyBKU0RPTVdyYXBwZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7
CisgICAgc3RhdGljIEpTVGVzdEV2ZW50VGFyZ2V0KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0
RXZlbnRUYXJnZXQ+IGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RFdmVudFRhcmdldCogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudFRhcmdldD4oZ2xv
YmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdEV2ZW50VGFyZ2V0KHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlT
bG90Jik7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworICAgIHN0YXRp
YyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlIG1vZGUgPSBKU0M6OkV4Y2x1ZGVEb250
RW51bVByb3BlcnRpZXMpOworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisKKyAgICBUZXN0RXZl
bnRUYXJnZXQqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGw7IH0KKyAgICB2b2lkIHJlbGVh
c2VJbXBsKCkgeyBtX2ltcGwtPmRlcmVmKCk7IG1faW1wbCA9IDA7IH0KKworICAgIHZvaWQgcmVs
ZWFzZUltcGxJZk5vdE51bGwoKSB7IGlmIChtX2ltcGwpIHsgbV9pbXBsLT5kZXJlZigpOyBtX2lt
cGwgPSAwOyB9IH0KKworcHJpdmF0ZToKKyAgICBUZXN0RXZlbnRUYXJnZXQqIG1faW1wbDsKK3By
b3RlY3RlZDoKKyAgICBKU1Rlc3RFdmVudFRhcmdldChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0RXZlbnRUYXJnZXQ+KTsKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
fCBKU0M6Ok1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGluZGV4R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCB1bnNpZ25lZCk7Citwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGNhbkdldEl0ZW1z
Rm9yTmFtZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RFdmVudFRhcmdldCosIGNvbnN0IEpTQzo6SWRl
bnRpZmllciYpOworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgbmFtZUdldHRlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cit9OworCitjbGFz
cyBKU1Rlc3RFdmVudFRhcmdldE93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZp
cnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERP
TVdyYXBwZXJXb3JsZCosIFRlc3RFdmVudFRhcmdldCopCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChKU1Rlc3RFdmVudFRhcmdldE93bmVyLCBqc1Rlc3RFdmVudFRhcmdldE93bmVyLCAoKSk7
CisgICAgcmV0dXJuICZqc1Rlc3RFdmVudFRhcmdldE93bmVyOworfQorCitpbmxpbmUgdm9pZCog
d3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgVGVzdEV2ZW50VGFyZ2V0KikK
K3sKKyAgICByZXR1cm4gd29ybGQ7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0RXZlbnRUYXJnZXQqKTsKK1Rlc3RFdmVudFRh
cmdldCogdG9UZXN0RXZlbnRUYXJnZXQoSlNDOjpKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0RXZl
bnRUYXJnZXRQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
OworICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RFdmVudFRh
cmdldFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RFdmVudFRhcmdldFByb3RvdHlwZT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNUZXN0RXZlbnRUYXJn
ZXRQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gcHRyOwor
ICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYp
OworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgfQor
Citwcml2YXRlOgorICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKEpTQzo6SlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7
IH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworfTsKKworY2xhc3MgSlNUZXN0RXZlbnRU
YXJnZXRDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRl
OgorICAgIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1
Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9y
KiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RF
dmVudFRhcmdldENvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBKU1Rlc3RF
dmVudFRhcmdldENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4g
cHRyOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpT
Q2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlND
OjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8g
c19pbmZvOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cisg
ICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFz
SW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Cit9OworCisv
LyBGdW5jdGlvbnMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2
ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JdGVtKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5j
dGlvbkFkZEV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uUmVtb3Zl
RXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25EaXNwYXRjaEV2ZW50
KEpTQzo6RXhlY1N0YXRlKik7CisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RF
dmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25z
dCBKU0M6OklkZW50aWZpZXImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRl
cmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAxMDQ0OTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTVGVzdEludGVyZmFjZUN1
c3RvbS5oIgogI2luY2x1ZGUgIlRlc3RJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJUZXN0U3VwcGxl
bWVudGFsLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgpAQCAtMjIyLDYgKzIyMyw4IEBA
IHZvaWQgSlNUZXN0SW50ZXJmYWNlOjpwdXQoSlNDZWxsKiBjZWxsLCAKIHsKICAgICBKU1Rlc3RJ
bnRlcmZhY2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBp
ZiAodGhpc09iamVjdC0+cHV0RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCkpCisgICAgICAgIHJldHVybjsKICAgICBsb29rdXBQdXQ8SlNUZXN0SW50ZXJmYWNlLCBCYXNl
PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAmSlNUZXN0SW50ZXJmYWNlVGFibGUsIHRoaXNP
YmplY3QsIHNsb3QpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCShyZXZpc2lvbiAxMDQ0
OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50
ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRpYyB2b2lkIHB1dChKU0M6OkpT
Q2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBib29sIHB1dERl
bGVnYXRlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
OjpKU0NlbGwqKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMTA0NDkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDIz
ICsyMSwzNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVGVzdE9iai5oIgog
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0V2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJKU09wdGlvbnNPYmplY3QuaCIKKyNpbmNsdWRlICJK
U1NWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAiSlNTVkdQb2ludC5oIgogI2luY2x1ZGUgIkpTVGVz
dENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNUZXN0T2JqLmgiCisjaW5jbHVkZSAiSlNhLmgiCisj
aW5jbHVkZSAiSlNiLmgiCisjaW5jbHVkZSAiSlNib29sLmgiCisjaW5jbHVkZSAiSlNjLmgiCisj
aW5jbHVkZSAiSlNkLmgiCisjaW5jbHVkZSAiSlNlLmgiCisjaW5jbHVkZSAiSlNpbnQuaCIKICNp
bmNsdWRlICJKU2xvZy5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJTVkdEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIlNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZi5oIgogI2luY2x1ZGUgIlNj
cmlwdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUg
IlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCIKICNpbmNsdWRlICJUZXN0T2JqLmgiCisjaW5jbHVkZSAiYm9vbC5oIgogI2luY2x1ZGUg
PHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgpAQCAtMTE0LDYgKzEyOCwxMCBAQCBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0T2JqVGFiCiAjZW5kaWYKICAgICB7ICJjYWNoZWRBdHRyaWJ1dGUxIiwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTEpLCAoaW50cHRyX3QpMCwg
Tm9JbnRyaW5zaWMgfSwKICAgICB7ICJjYWNoZWRBdHRyaWJ1dGUyIiwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIpLCAoaW50cHRyX3QpMCwgTm9JbnRyaW5zaWMgfSwK
KyAgICB7ICJjb250ZW50RG9jdW1lbnQiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ29udGVu
dERvY3VtZW50KSwgKGludHB0cl90KTAsIE5vSW50cmluc2ljIH0sCisgICAgeyAibXV0YWJsZVBv
aW50IiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RPYmpNdXRhYmxlUG9pbnQpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2Jq
TXV0YWJsZVBvaW50LCBOb0ludHJpbnNpYyB9LAorICAgIHsgImltbXV0YWJsZVBvaW50IiwgRG9u
dERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RPYmpJbW11dGFibGVQb2ludCksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpJbW11dGFi
bGVQb2ludCwgTm9JbnRyaW5zaWMgfSwKKyAgICB7ICJzdHJpY3RGbG9hdCIsIERvbnREZWxldGUs
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
T2JqU3RyaWN0RmxvYXQpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqU3RyaWN0RmxvYXQsIE5vSW50
cmluc2ljIH0sCiAgICAgeyAiZGVzY3JpcHRpb24iLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2Jq
RGVzY3JpcHRpb24pLCAoaW50cHRyX3QpMCwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJpZCIsIERv
bnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0T2JqSWQpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqSWQsIE5vSW50cmluc2ljIH0s
CiAgICAgeyAiaGFzaCIsIERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpIYXNoKSwgKGludHB0cl90
KTAsIE5vSW50cmluc2ljIH0sCkBAIC0xMjEsNyArMTM5LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hU
YWJsZVZhbHVlIEpTVGVzdE9ialRhYgogICAgIHsgMCwgMCwgMCwgMCwgTm9JbnRyaW5zaWMgfQog
fTsKIAotc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RPYmpUYWJsZSA9IHsgMTM1LCAxMjcs
IEpTVGVzdE9ialRhYmxlVmFsdWVzLCAwIH07CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVz
dE9ialRhYmxlID0geyAxMzYsIDEyNywgSlNUZXN0T2JqVGFibGVWYWx1ZXMsIDAgfTsKIC8qIEhh
c2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1Rlc3RPYmpDb25zdHJ1Y3RvclRhYmxlVmFsdWVzW10gPQpAQCAtMjYyLDEwICsyODAsMjAg
QEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialBybwogICAgIHsgImNvbmRp
dGlvbmFsTWV0aG9kMyIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0
aW9uYWxNZXRob2QzKSwgKGludHB0cl90KTAsIE5vSW50cmluc2ljIH0sCiAjZW5kaWYKICAgICB7
ICJvdmVybG9hZGVkTWV0aG9kIiwgRG9udERlbGV0ZSB8IEpTQzo6RnVuY3Rpb24sIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kKSwgKGludHB0cl90KTIsIE5vSW50cmluc2ljIH0sCisgICAgeyAiZ2V0
U1ZHRG9jdW1lbnQiLCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0Rv
Y3VtZW50KSwgKGludHB0cl90KTAsIE5vSW50cmluc2ljIH0sCisgICAgeyAiY29udmVydDEiLCBE
b250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQxKSwgKGludHB0cl90KTEs
IE5vSW50cmluc2ljIH0sCisgICAgeyAiY29udmVydDIiLCBEb250RGVsZXRlIHwgSlNDOjpGdW5j
dGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNvbnZlcnQyKSwgKGludHB0cl90KTEsIE5vSW50cmluc2ljIH0sCisgICAg
eyAiY29udmVydDMiLCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQz
KSwgKGludHB0cl90KTEsIE5vSW50cmluc2ljIH0sCisgICAgeyAiY29udmVydDQiLCBEb250RGVs
ZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ0KSwgKGludHB0cl90KTEsIE5vSW50
cmluc2ljIH0sCisgICAgeyAiY29udmVydDUiLCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbnZlcnQ1KSwgKGludHB0cl90KTEsIE5vSW50cmluc2ljIH0sCisgICAgeyAibXV0
YWJsZVBvaW50RnVuY3Rpb24iLCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90
KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk11
dGFibGVQb2ludEZ1bmN0aW9uKSwgKGludHB0cl90KTAsIE5vSW50cmluc2ljIH0sCisgICAgeyAi
aW1tdXRhYmxlUG9pbnRGdW5jdGlvbiIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbiksIChpbnRwdHJfdCkwLCBOb0ludHJpbnNpYyB9LAor
ICAgIHsgIm9yYW5nZSIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Jhbmdl
KSwgKGludHB0cl90KTAsIE5vSW50cmluc2ljIH0sCisgICAgeyAic3RyaWN0RnVuY3Rpb24iLCBE
b250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmljdEZ1bmN0aW9uKSwgKGludHB0
cl90KTMsIE5vSW50cmluc2ljIH0sCiAgICAgeyAwLCAwLCAwLCAwLCBOb0ludHJpbnNpYyB9CiB9
OwogCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0geyAx
MzUsIDEyNywgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKK3N0YXRpYyBjb25z
dCBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7IDEzOCwgMTI3LCBKU1Rlc3RP
YmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9ialBy
b3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE9ialByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZK
U1Rlc3RPYmpQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPYmpQ
cm90b3R5cGUpIH07CiAKIEpTT2JqZWN0KiBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtNzAyLDYgKzczMCw0
NCBAQCBKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIoRXhlY1N0CiB9CiAKIAorSlNW
YWx1ZSBqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNs
b3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFRlc3RP
YmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAg
ICByZXR1cm4gYWxsb3dBY2Nlc3NUb05vZGUoZXhlYywgaW1wbC0+Y29udGVudERvY3VtZW50KCkp
ID8gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1w
bC0+Y29udGVudERvY3VtZW50KCkpKSA6IGpzVW5kZWZpbmVkKCk7Cit9CisKKworSlNWYWx1ZSBq
c1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBj
b25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNf
Y2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRo
aXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihTVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8VGVz
dE9iaiwgRmxvYXRQb2ludD46OmNyZWF0ZShpbXBsLCBpbXBsLT5tdXRhYmxlUG9pbnQoKSwgJlRl
c3RPYmo6OnVwZGF0ZU11dGFibGVQb2ludCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisK
K0pTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVO
VVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9i
aio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihTVkdQcm9wZXJ0eVRlYXJP
ZmY8RmxvYXRQb2ludD46OmNyZWF0ZShpbXBsLT5pbW11dGFibGVQb2ludCgpKSkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpY3RGbG9hdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNs
b3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RPYmoqIGltcGwgPSBz
dGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcGwtPnN0cmljdEZsb2F0KCkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKKwogSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQogewogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CkBA
IC0xMDA4LDYgKzEwNzQsMzAgQEAgdm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29u
c3RydQogCiAjZW5kaWYKIAordm9pZCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsK
KyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmlt
cGwoKSk7CisgICAgaW1wbC0+c2V0TXV0YWJsZVBvaW50KHRvU1ZHUG9pbnQodmFsdWUpKTsKK30K
KworCit2b2lkIHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CisgICAgVGVzdE9i
aiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAg
IGltcGwtPnNldEltbXV0YWJsZVBvaW50KHRvU1ZHUG9pbnQodmFsdWUpKTsKK30KKworCit2b2lk
IHNldEpTVGVzdE9ialN0cmljdEZsb2F0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0
YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGltcGwtPnNldFN0
cmljdEZsb2F0KHZhbHVlLnRvRmxvYXQoZXhlYykpOworfQorCisKIHZvaWQgc2V0SlNUZXN0T2Jq
SWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0
aGlzT2JqZWN0KTsKQEAgLTE3ODYsNiArMTg3NiwxNzQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpDbwogCiAjZW5kaWYKIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50KEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsK
KyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7
CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlmICghYWxsb3dBY2Nlc3NU
b05vZGUoZXhlYywgaW1wbC0+Z2V0U1ZHRG9jdW1lbnQoZWMpKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQg
PSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBs
LT5nZXRTVkdEb2N1bWVudChlYykpKTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQxKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5m
byk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlz
LT5pbXBsKCkpOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3Vn
aCBhcmd1bWVudHMiKSk7CisgICAgYSogKHRvYShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVj
LCAwLCBNaXNzaW5nSXNVbmRlZmluZWQpKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGlt
cGwtPmNvbnZlcnQxKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbnZlcnQyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygm
SlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
KTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihh
c09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisgICAgYiogKHRvYihNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBNaXNzaW5nSXNVbmRlZmluZWQpKSk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIGltcGwtPmNvbnZlcnQyKCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBz
dGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAg
VGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVu
dHMiKSk7CisgICAgYyogKHRvYyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBNaXNz
aW5nSXNVbmRlZmluZWQpKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGltcGwtPmNvbnZl
cnQzKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bnZlcnQ0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2Jq
OjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0
aGlzVmFsdWUpKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZK
U1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisgICAgZCogKHRvZChNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihleGVjLCAwLCBNaXNzaW5nSXNVbmRlZmluZWQpKSk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIGltcGwtPmNvbnZlcnQ0KCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ1KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNW
YWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgVGVzdE9iaiog
aW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7Cisg
ICAgZSogKHRvZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBNaXNzaW5nSXNVbmRl
ZmluZWQpKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGltcGwtPmNvbnZlcnQ1KCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk11dGFibGVQb2lu
dEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0
T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVj
dCh0aGlzVmFsdWUpKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
ICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRl
c3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworCisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9
IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKFNWR1By
b3BlcnR5VGVhck9mZjxGbG9hdFBvaW50Pjo6Y3JlYXRlKGltcGwtPm11dGFibGVQb2ludEZ1bmN0
aW9uKCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW1tdXRh
YmxlUG9pbnRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMo
JkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4o
YXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKworICAgIEpTQzo6SlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0
cihTVkdQcm9wZXJ0eVRlYXJPZmY8RmxvYXRQb2ludD46OmNyZWF0ZShpbXBsLT5pbW11dGFibGVQ
b2ludEZ1bmN0aW9uKCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3JhbmdlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0
T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVj
dCh0aGlzVmFsdWUpKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
ICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRl
c3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGltcGwtPmJhbmFuYSgpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpY3RGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZv
KSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVl
KSk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2Jq
OjpzX2luZm8pOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2Fz
dGVkVGhpcy0+aW1wbCgpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5v
dCBlbm91Z2ggYXJndW1lbnRzIikpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGNv
bnN0IFN0cmluZyYgc3RyKHVzdHJpbmdUb1N0cmluZyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihl
eGVjLCAwLCBNaXNzaW5nSXNVbmRlZmluZWQpLmlzRW1wdHkoKSA/IFVTdHJpbmcoKSA6IE1BWUJF
X01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIE1pc3NpbmdJc1VuZGVmaW5lZCkudG9TdHJpbmco
ZXhlYykpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgZmxvYXQgYShNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihleGVjLCAxLCBNaXNzaW5nSXNVbmRlZmluZWQpLnRvRmxvYXQoZXhlYykpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMiAm
JiAhZXhlYy0+YXJndW1lbnQoMikuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhZXhlYy0+YXJndW1l
bnQoMikuaW5oZXJpdHMoJkpTaW50OjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKKyAgICBpbnQqIGIodG9pbnQoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
ZXhlYywgMiwgTWlzc2luZ0lzVW5kZWZpbmVkKSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKwor
ICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBXVEY6OmdldFB0cihpbXBsLT5zdHJpY3RGdW5jdGlvbihzdHIsIGEsIGIsIGVjKSkp
OworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworfQorCiB2b2lkIEpTVGVzdE9iajo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTVGVzdE9iaiogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9uIDEwNDQ5
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
aAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCwxNiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JG
dW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2QxKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudChKU0M6
OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDEoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQy
KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29u
dmVydDQoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ1KEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NdXRhYmxlUG9pbnRGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9p
bnRGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3JhbmdlKEpTQzo6RXhlY1N0YXRlKik7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25TdHJpY3RGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogLy8gQXR0cmlidXRlcwogCiBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlJbnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKQEAgLTI1NCw2ICsyNjQsMTMgQEAg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDbwogdm9pZCBzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU1ZhbHVlKTsKIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1
dGUxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
KTsKIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpDb250ZW50RG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2lu
dChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7
Cit2b2lkIHNldEpTVGVzdE9iak11dGFibGVQb2ludChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBv
aW50KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
KTsKK3ZvaWQgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpY3RG
bG9hdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVy
Jik7Cit2b2lkIHNldEpTVGVzdE9ialN0cmljdEZsb2F0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CiBKU0M6OkpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRp
b24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYp
OwogSlNDOjpKU1ZhbHVlIGpzVGVzdE9iaklkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKIHZvaWQgc2V0SlNUZXN0T2JqSWQoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRl
ci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3RPdmVycmlkaW5nTmFt
ZUdldHRlci5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgorI2luY2x1ZGUgIlRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oIgorI2luY2x1
ZGUgInd0Zi90ZXh0L0F0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4K
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1Rlc3RPdmVycmlk
aW5nTmFtZUdldHRlcik7CitBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihKU1Rlc3RPdmVy
cmlkaW5nTmFtZUdldHRlcik7CisKKy8qIEhhc2ggdGFibGUgKi8KKworc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyVGFibGVWYWx1ZXNbXSA9Cit7
CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpMCwgTm9JbnRyaW5zaWMgfSwKKyAgICB7IDAs
IDAsIDAsIDAsIE5vSW50cmluc2ljIH0KK307CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNU
ZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJUYWJsZSA9IHsgMiwgMSwgSlNUZXN0T3ZlcnJpZGluZ05h
bWVHZXR0ZXJUYWJsZVZhbHVlcywgMCB9OworLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3Ig
Ki8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyQ29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7IDAsIDAsIDAsIDAsIE5vSW50
cmluc2ljIH0KK307CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0T3ZlcnJpZGluZ05h
bWVHZXR0ZXJDb25zdHJ1Y3RvclRhYmxlID0geyAxLCAwLCBKU1Rlc3RPdmVycmlkaW5nTmFtZUdl
dHRlckNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKK0FTU0VSVF9IQVNfVFJJVklBTF9ERVNU
UlVDVE9SKEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0b3IpOworCitjb25zdCBD
bGFzc0luZm8gSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0g
eyAiVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAm
SlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJDb25zdHJ1Y3RvclRhYmxlLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0b3IpIH07CisKK0pT
VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0b3I6OkpTVGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyQ29uc3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCisgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCkKK3sKK30KKwordm9pZCBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlckNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFs
RGF0YSgpKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIHB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVz
dE92ZXJyaWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCks
IERvbnREZWxldGUgfCBSZWFkT25seSk7Cit9CisKK2Jvb2wgSlNUZXN0T3ZlcnJpZGluZ05hbWVH
ZXR0ZXJDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdE92ZXJyaWRpbmdO
YW1lR2V0dGVyQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdE92ZXJyaWRp
bmdOYW1lR2V0dGVyQ29uc3RydWN0b3JUYWJsZSwgc3RhdGljX2Nhc3Q8SlNUZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXJDb25zdHJ1Y3Rvcio+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQor
Citib29sIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQor
eworICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0T3ZlcnJpZGluZ05h
bWVHZXR0ZXJDb25zdHJ1Y3RvciwgSlNET01XcmFwcGVyPihleGVjLCAmSlNUZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXJDb25zdHJ1Y3RvclRhYmxlLCBzdGF0aWNfY2FzdDxKU1Rlc3RPdmVycmlkaW5n
TmFtZUdldHRlckNvbnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKK30KKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlclByb3RvdHlwZVRhYmxlVmFs
dWVzW10gPQoreworICAgIHsgImFub3RoZXJGdW5jdGlvbiIsIERvbnREZWxldGUgfCBKU0M6OkZ1
bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE92ZXJy
aWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rpb24pLCAoaW50cHRy
X3QpMSwgTm9JbnRyaW5zaWMgfSwKKyAgICB7IDAsIDAsIDAsIDAsIE5vSW50cmluc2ljIH0KK307
CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcm90
b3R5cGVUYWJsZSA9IHsgMiwgMSwgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcm90b3R5cGVU
YWJsZVZhbHVlcywgMCB9OworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcm90b3R5
cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcm90b3R5cGVU
YWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlclBy
b3RvdHlwZSkgfTsKKworSlNPYmplY3QqIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyUHJvdG90
eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
PihleGVjLCBnbG9iYWxPYmplY3QpOworfQorCitib29sIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQoreworICAgIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlKj4oY2VsbCk7Cisg
ICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU09iamVjdD4oZXhlYywgJkpTVGVzdE92
ZXJyaWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcm90b3R5cGU6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQoreworICAgIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlKj4o
b2JqZWN0KTsKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTT2JqZWN0
PihleGVjLCAmSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcm90b3R5cGVUYWJsZSwgdGhpc09i
amVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjpzX2luZm8gPSB7ICJUZXN0T3ZlcnJpZGluZ05hbWVH
ZXR0ZXIiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJUYWJsZSwg
MCAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIpIH07CisK
K0pTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjpKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlcihT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFz
c1JlZlB0cjxUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI+IGltcGwpCisgICAgOiBKU0RPTVdyYXBw
ZXIoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCisgICAgLCBtX2ltcGwoaW1wbC5sZWFrUmVmKCkp
Cit7Cit9CisKK3ZvaWQgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OmZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworfQorCitKU09iamVj
dCogSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVz
dE92ZXJyaWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QsIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCit2b2lkIEpTVGVzdE92ZXJyaWRp
bmdOYW1lR2V0dGVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdE92
ZXJyaWRpbmdOYW1lR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE92ZXJyaWRpbmdO
YW1lR2V0dGVyKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+cmVsZWFzZUltcGxJZk5vdE51bGwo
KTsKK30KKworYm9vbCBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6Z2V0T3duUHJvcGVydHlT
bG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU1Rlc3RPdmVycmlkaW5nTmFt
ZUdldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlcio+
KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5m
byk7CisgICAgaWYgKGNhbkdldEl0ZW1zRm9yTmFtZShleGVjLCBzdGF0aWNfY2FzdDxUZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXIqPih0aGlzT2JqZWN0LT5pbXBsKCkpLCBwcm9wZXJ0eU5hbWUpKSB7
CisgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPm5hbWVHZXR0
ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGdldFN0YXRpY1Zh
bHVlU2xvdDxKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlciwgQmFzZT4oZXhlYywgJkpTVGVzdE92
ZXJyaWRpbmdOYW1lR2V0dGVyVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7
Cit9CisKK2Jvb2wgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAg
IEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE92
ZXJyaWRpbmdOYW1lR2V0dGVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAgIGlmIChjYW5HZXRJdGVtc0Zvck5hbWUoZXhl
Yywgc3RhdGljX2Nhc3Q8VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKj4odGhpc09iamVjdC0+aW1w
bCgpKSwgcHJvcGVydHlOYW1lKSkgeworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAg
ICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbmFtZUdldHRlcik7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIFJl
YWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXIsIEJhc2U+KGV4ZWMsICZKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlclRhYmxl
LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCitKU1ZhbHVlIGpz
VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPdmVycmlkaW5n
TmFtZUdldHRlciogZG9tT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T3ZlcnJpZGluZ05hbWVH
ZXR0ZXIqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIHJldHVybiBKU1Rlc3RPdmVycmlkaW5n
TmFtZUdldHRlcjo6Z2V0Q29uc3RydWN0b3IoZXhlYywgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3Qo
KSk7Cit9CisKK0pTVmFsdWUgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OmdldENvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJDb25z
dHJ1Y3Rvcj4oZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmpl
Y3QpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPdmVycmlkaW5n
TmFtZUdldHRlclByb3RvdHlwZUZ1bmN0aW9uQW5vdGhlckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAg
ICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OnNf
aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpTVGVz
dE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXIqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6
c19pbmZvKTsKKyAgICBUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIGltcGwgPSBzdGF0aWNfY2Fz
dDxUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7Cisg
ICAgY29uc3QgU3RyaW5nJiBzdHIodXN0cmluZ1RvU3RyaW5nKE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGV4ZWMsIDAsIE1pc3NpbmdJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8gVVN0cmluZygpIDog
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgTWlzc2luZ0lzVW5kZWZpbmVkKS50b1N0
cmluZyhleGVjKSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBpbXBsLT5hbm90aGVyRnVu
Y3Rpb24oc3RyKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNPYnNlcnZhYmxlKEpTVGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyKiBqc1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlcikKK3sKKyAgICBpZiAoanNUZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXItPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEpTVGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNU
ZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIGpzVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqPihoYW5kbGUuZ2V0KCkuYXNDZWxs
KCkpOworICAgIGlmICghaXNPYnNlcnZhYmxlKGpzVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJPd25lcjo6
ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQp
Cit7CisgICAgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIGpzVGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyID0gc3RhdGljX2Nhc3Q8SlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqPihoYW5kbGUu
Z2V0KCkuYXNDZWxsKCkpOworICAgIERPTVdyYXBwZXJXb3JsZCogd29ybGQgPSBzdGF0aWNfY2Fz
dDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwg
anNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXItPmltcGwoKSwganNUZXN0T3ZlcnJpZGluZ05hbWVH
ZXR0ZXIpOworICAgIGpzVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLT5yZWxlYXNlSW1wbCgpOwor
fQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBpbXBsKQorewor
ICAgIHJldHVybiB3cmFwPEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyPihleGVjLCBnbG9iYWxP
YmplY3QsIGltcGwpOworfQorCitUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIHRvVGVzdE92ZXJy
aWRpbmdOYW1lR2V0dGVyKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUu
aW5oZXJpdHMoJkpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjpzX2luZm8pID8gc3RhdGljX2Nh
c3Q8SlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCkg
OiAwOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0
OCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEpTVGVzdE92ZXJyaWRpbmdO
YW1lR2V0dGVyX2gKKyNkZWZpbmUgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJfaAorCisjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
LmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyIDog
cHVibGljIEpTRE9NV3JhcHBlciB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIg
QmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIGNyZWF0ZShKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
YXNzUmVmUHRyPFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcj4gaW1wbCkKKyAgICB7CisgICAgICAg
IEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyPihnbG9iYWxPYmplY3QtPmdsb2Jh
bERhdGEoKS5oZWFwKSkgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIoc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QsIGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVj
dC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6
OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKyAgICBzdGF0aWMgY29uc3QgSlND
OjpDbGFzc0luZm8gc19pbmZvOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIFRlc3RPdmVy
cmlkaW5nTmFtZUdldHRlciogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbDsgfQorICAgIHZv
aWQgcmVsZWFzZUltcGwoKSB7IG1faW1wbC0+ZGVyZWYoKTsgbV9pbXBsID0gMDsgfQorCisgICAg
dm9pZCByZWxlYXNlSW1wbElmTm90TnVsbCgpIHsgaWYgKG1faW1wbCkgeyBtX2ltcGwtPmRlcmVm
KCk7IG1faW1wbCA9IDA7IH0gfQorCitwcml2YXRlOgorICAgIFRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlciogbV9pbXBsOworcHJvdGVjdGVkOgorICAgIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RPdmVy
cmlkaW5nTmFtZUdldHRlcj4pOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2Jh
bERhdGEmKTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworcHJp
dmF0ZToKKyAgICBzdGF0aWMgYm9vbCBjYW5HZXRJdGVtc0Zvck5hbWUoSlNDOjpFeGVjU3RhdGUq
LCBUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG5hbWVHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworfTsKKworY2xhc3MgSlNUZXN0T3ZlcnJp
ZGluZ05hbWVHZXR0ZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CisgICAg
dmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7
Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFw
cGVyV29ybGQqLCBUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJPd25lciwganNUZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXJPd25lciwgKCkpOworICAgIHJldHVybiAmanNUZXN0T3ZlcnJpZGluZ05hbWVH
ZXR0ZXJPd25lcjsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJX
b3JsZCogd29ybGQsIFRlc3RPdmVycmlkaW5nTmFtZUdldHRlciopCit7CisgICAgcmV0dXJuIHdv
cmxkOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKik7CitUZXN0T3ZlcnJpZGluZ05hbWVH
ZXR0ZXIqIHRvVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKEpTQzo6SlNWYWx1ZSk7CisKK2NsYXNz
IEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25G
aW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
QmFzZTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0
ZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgIHsKKyAgICAgICAgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcm90b3R5cGUqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0
ZXJQcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
UHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICB9CisKKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlclByb3RvdHlwZShKU0M6OkpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSkgeyB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1
cmVGbGFnczsKK307CisKK2NsYXNzIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0
b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RP
dmVycmlkaW5nTmFtZUdldHRlckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JP
YmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJDb25zdHJ1
Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNU
ZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlckNvbnN0cnVjdG9yPigq
ZXhlYy0+aGVhcCgpKSkgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJDb25zdHJ1Y3RvcihzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZXhlYywg
Z2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Cisg
ICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JP
YmplY3Q6OlN0cnVjdHVyZUZsYWdzOworfTsKKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlclByb3RvdHlw
ZUZ1bmN0aW9uQW5vdGhlckZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CisvLyBBdHRyaWJ1dGVz
CisKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlckNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RBY3RpdmVET01PYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
QWN0aXZlRE9NT2JqZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0QWN0aXZlRE9NT2JqZWN0LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0IDxXZWJDb3JlL0RPTU9iamVjdC5oPgorCisjaWYgV0VCS0lUX1ZFUlNJT05f
TUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCisKK0BjbGFzcyBET01Ob2RlOwor
QGNsYXNzIE5TU3RyaW5nOworCitAaW50ZXJmYWNlIERPTVRlc3RBY3RpdmVET01PYmplY3QgOiBE
T01PYmplY3QKKy0gKGludClleGNpdGluZ0F0dHI7CistICh2b2lkKWV4Y2l0aW5nRnVuY3Rpb246
KERPTU5vZGUgKiluZXh0Q2hpbGQ7CistICh2b2lkKXBvc3RNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2U7CitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L09iakMvRE9NVGVzdEFjdGl2ZURPTU9iamVjdC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0QWN0aXZlRE9N
T2JqZWN0Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdEFjdGl2ZURPTU9iamVjdC5tbQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIkRPTUludGVybmFsLmgiCisKKyNpbXBvcnQgIkRPTVRlc3RBY3RpdmVET01P
YmplY3QuaCIKKworI2ltcG9ydCAiRE9NQmxvYkludGVybmFsLmgiCisjaW1wb3J0ICJET01DU1NS
dWxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUNTU1ZhbHVlSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IkRPTUV2ZW50SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgorI2ltcG9y
dCAiRE9NU3R5bGVTaGVldEludGVybmFsLmgiCisjaW1wb3J0ICJET01UZXN0QWN0aXZlRE9NT2Jq
ZWN0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCisjaW1wb3J0ICJK
U01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbXBvcnQgIktVUkwuaCIKKyNpbXBvcnQgIk5vZGUu
aCIKKyNpbXBvcnQgIlRlc3RBY3RpdmVET01PYmplY3QuaCIKKyNpbXBvcnQgIlRocmVhZENoZWNr
LmgiCisjaW1wb3J0ICJXZWJDb3JlT2JqQ0V4dHJhcy5oIgorI2ltcG9ydCAiV2ViU2NyaXB0T2Jq
ZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8d3RmL0dldFB0ci5oPgorCisjZGVmaW5lIElNUEwgcmVp
bnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0Kj4oX2ludGVybmFsKQor
CitAaW1wbGVtZW50YXRpb24gRE9NVGVzdEFjdGl2ZURPTU9iamVjdAorCistICh2b2lkKWRlYWxs
b2MKK3sKKyAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQo
W0RPTVRlc3RBY3RpdmVET01PYmplY3QgY2xhc3NdLCBzZWxmKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKF9pbnRlcm5hbCkKKyAgICAgICAgSU1QTC0+ZGVyZWYoKTsKKyAgICBbc3VwZXIg
ZGVhbGxvY107Cit9CisKKy0gKHZvaWQpZmluYWxpemUKK3sKKyAgICBpZiAoX2ludGVybmFsKQor
ICAgICAgICBJTVBMLT5kZXJlZigpOworICAgIFtzdXBlciBmaW5hbGl6ZV07Cit9CisKKy0gKGlu
dClleGNpdGluZ0F0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgcmV0dXJuIElNUEwtPmV4Y2l0aW5nQXR0cigpOworfQorCistICh2b2lkKWV4Y2l0
aW5nRnVuY3Rpb246KERPTU5vZGUgKiluZXh0Q2hpbGQKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+ZXhjaXRpbmdGdW5jdGlvbihjb3JlKG5l
eHRDaGlsZCkpOworfQorCistICh2b2lkKXBvc3RNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+
cG9zdE1lc3NhZ2UobWVzc2FnZSk7Cit9CisKK0BlbmQKKworV2ViQ29yZTo6VGVzdEFjdGl2ZURP
TU9iamVjdCogY29yZShET01UZXN0QWN0aXZlRE9NT2JqZWN0ICp3cmFwcGVyKQoreworICAgIHJl
dHVybiB3cmFwcGVyID8gcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2Jq
ZWN0Kj4od3JhcHBlci0+X2ludGVybmFsKSA6IDA7Cit9CisKK0RPTVRlc3RBY3RpdmVET01PYmpl
Y3QgKmtpdChXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0KiB2YWx1ZSkKK3sKKyAgICB7IERP
TV9BU1NFUlRfTUFJTl9USFJFQUQoKTsgV2ViQ29yZVRocmVhZFZpb2xhdGlvbkNoZWNrUm91bmRP
bmUoKTsgfTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gbmlsOworICAgIGlmIChE
T01UZXN0QWN0aXZlRE9NT2JqZWN0ICp3cmFwcGVyID0gZ2V0RE9NV3JhcHBlcih2YWx1ZSkpCisg
ICAgICAgIHJldHVybiBbW3dyYXBwZXIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgRE9NVGVz
dEFjdGl2ZURPTU9iamVjdCAqd3JhcHBlciA9IFtbRE9NVGVzdEFjdGl2ZURPTU9iamVjdCBhbGxv
Y10gX2luaXRdOworICAgIHdyYXBwZXItPl9pbnRlcm5hbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RE9N
T2JqZWN0SW50ZXJuYWwqPih2YWx1ZSk7CisgICAgdmFsdWUtPnJlZigpOworICAgIGFkZERPTVdy
YXBwZXIod3JhcHBlciwgdmFsdWUpOworICAgIHJldHVybiBbd3JhcHBlciBhdXRvcmVsZWFzZV07
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01U
ZXN0QWN0aXZlRE9NT2JqZWN0SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0QWN0aXZlRE9NT2JqZWN0SW50ZXJu
YWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RBY3RpdmVET01PYmplY3RJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8V2ViQ29y
ZS9ET01UZXN0QWN0aXZlRE9NT2JqZWN0Lmg+CisKKyNpZiBXRUJLSVRfVkVSU0lPTl9NQVhfQUxM
T1dFRCA+PSBXRUJLSVRfVkVSU0lPTl9MQVRFU1QKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IGNsYXNzIFRlc3RBY3RpdmVET01PYmplY3Q7Cit9CisKK1dlYkNvcmU6OlRlc3RBY3RpdmVET01P
YmplY3QqIGNvcmUoRE9NVGVzdEFjdGl2ZURPTU9iamVjdCAqKTsKK0RPTVRlc3RBY3RpdmVET01P
YmplY3QgKmtpdChXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0Kik7CisKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdEV2ZW50
VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdEV2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0RXZlbnRUYXJnZXQuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5j
b20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbXBvcnQgPFdlYkNvcmUvRE9NT2JqZWN0Lmg+CisKKyNpZiBXRUJLSVRf
VkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJLSVRfVkVSU0lPTl9MQVRFU1QKKworQGNsYXNzIERP
TUV2ZW50OworQGNsYXNzIERPTU5vZGU7CitAY2xhc3MgTlNTdHJpbmc7CitAcHJvdG9jb2wgRE9N
RXZlbnRMaXN0ZW5lcjsKKworQGludGVyZmFjZSBET01UZXN0RXZlbnRUYXJnZXQgOiBET01PYmpl
Y3QKKy0gKERPTU5vZGUgKilpdGVtOih1bnNpZ25lZClpbmRleDsKKy0gKHZvaWQpYWRkRXZlbnRM
aXN0ZW5lcjooTlNTdHJpbmcgKil0eXBlIGxpc3RlbmVyOihpZCA8RE9NRXZlbnRMaXN0ZW5lcj4p
bGlzdGVuZXIgdXNlQ2FwdHVyZTooQk9PTCl1c2VDYXB0dXJlOworLSAodm9pZClyZW1vdmVFdmVu
dExpc3RlbmVyOihOU1N0cmluZyAqKXR5cGUgbGlzdGVuZXI6KGlkIDxET01FdmVudExpc3RlbmVy
PilsaXN0ZW5lciB1c2VDYXB0dXJlOihCT09MKXVzZUNhcHR1cmU7CistIChCT09MKWRpc3BhdGNo
RXZlbnQ6KERPTUV2ZW50ICopZXZ0OworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RFdmVudFRhcmdldC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01U
ZXN0RXZlbnRUYXJnZXQubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0RXZlbnRUYXJnZXQubW0JKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTIxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1wb3J0ICJET01UZXN0RXZlbnRU
YXJnZXQuaCIKKworI2ltcG9ydCAiRE9NQmxvYkludGVybmFsLmgiCisjaW1wb3J0ICJET01DU1NS
dWxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUNTU1ZhbHVlSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IkRPTUV2ZW50SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgorI2ltcG9y
dCAiRE9NU3R5bGVTaGVldEludGVybmFsLmgiCisjaW1wb3J0ICJET01UZXN0RXZlbnRUYXJnZXRJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiRXZlbnQuaCIKKyNpbXBvcnQgIkV2ZW50TGlzdGVuZXIuaCIK
KyNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCisjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVj
U3RhdGUuaCIKKyNpbXBvcnQgIktVUkwuaCIKKyNpbXBvcnQgIk5vZGUuaCIKKyNpbXBvcnQgIk9i
akNFdmVudExpc3RlbmVyLmgiCisjaW1wb3J0ICJUZXN0RXZlbnRUYXJnZXQuaCIKKyNpbXBvcnQg
IlRocmVhZENoZWNrLmgiCisjaW1wb3J0ICJXZWJDb3JlT2JqQ0V4dHJhcy5oIgorI2ltcG9ydCAi
V2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8d3RmL0dldFB0ci5oPgorCisjZGVm
aW5lIElNUEwgcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihfaW50
ZXJuYWwpCisKK0BpbXBsZW1lbnRhdGlvbiBET01UZXN0RXZlbnRUYXJnZXQKKworLSAodm9pZClk
ZWFsbG9jCit7CisgICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhy
ZWFkKFtET01UZXN0RXZlbnRUYXJnZXQgY2xhc3NdLCBzZWxmKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKF9pbnRlcm5hbCkKKyAgICAgICAgSU1QTC0+ZGVyZWYoKTsKKyAgICBbc3VwZXIg
ZGVhbGxvY107Cit9CisKKy0gKHZvaWQpZmluYWxpemUKK3sKKyAgICBpZiAoX2ludGVybmFsKQor
ICAgICAgICBJTVBMLT5kZXJlZigpOworICAgIFtzdXBlciBmaW5hbGl6ZV07Cit9CisKKy0gKERP
TU5vZGUgKilpdGVtOih1bnNpZ25lZClpbmRleAoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4ga2l0KFdURjo6Z2V0UHRyKElNUEwtPml0ZW0o
aW5kZXgpKSk7Cit9CisKKy0gKHZvaWQpYWRkRXZlbnRMaXN0ZW5lcjooTlNTdHJpbmcgKil0eXBl
IGxpc3RlbmVyOihpZCA8RE9NRXZlbnRMaXN0ZW5lcj4pbGlzdGVuZXIgdXNlQ2FwdHVyZTooQk9P
TCl1c2VDYXB0dXJlCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFJlZlB0cjxXZWJDb3JlOjpFdmVudExpc3RlbmVyPiBuYXRpdmVFdmVudExpc3RlbmVy
ID0gV2ViQ29yZTo6T2JqQ0V2ZW50TGlzdGVuZXI6OndyYXAobGlzdGVuZXIpOworICAgIElNUEwt
PmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgV1RGOjpnZXRQdHIobmF0aXZlRXZlbnRMaXN0ZW5lciks
IHVzZUNhcHR1cmUpOworfQorCistICh2b2lkKXJlbW92ZUV2ZW50TGlzdGVuZXI6KE5TU3RyaW5n
ICopdHlwZSBsaXN0ZW5lcjooaWQgPERPTUV2ZW50TGlzdGVuZXI+KWxpc3RlbmVyIHVzZUNhcHR1
cmU6KEJPT0wpdXNlQ2FwdHVyZQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RXZlbnRMaXN0ZW5lcj4gbmF0aXZlRXZlbnRM
aXN0ZW5lciA9IFdlYkNvcmU6Ok9iakNFdmVudExpc3RlbmVyOjp3cmFwKGxpc3RlbmVyKTsKKyAg
ICBJTVBMLT5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIFdURjo6Z2V0UHRyKG5hdGl2ZUV2ZW50
TGlzdGVuZXIpLCB1c2VDYXB0dXJlKTsKK30KKworLSAoQk9PTClkaXNwYXRjaEV2ZW50OihET01F
dmVudCAqKWV2dAoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBCT09MIHJlc3VsdCA9IElN
UEwtPmRpc3BhdGNoRXZlbnQoY29yZShldnQpLCBlYyk7CisgICAgV2ViQ29yZTo6cmFpc2VPbkRP
TUVycm9yKGVjKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitAZW5kCisKK1dlYkNvcmU6OlRl
c3RFdmVudFRhcmdldCogY29yZShET01UZXN0RXZlbnRUYXJnZXQgKndyYXBwZXIpCit7CisgICAg
cmV0dXJuIHdyYXBwZXIgPyByZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RFdmVudFRhcmdl
dCo+KHdyYXBwZXItPl9pbnRlcm5hbCkgOiAwOworfQorCitET01UZXN0RXZlbnRUYXJnZXQgKmtp
dChXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIHZhbHVlKQoreworICAgIHsgRE9NX0FTU0VSVF9N
QUlOX1RIUkVBRCgpOyBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpOyB9Owor
ICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgaWYgKERPTVRlc3RFdmVu
dFRhcmdldCAqd3JhcHBlciA9IGdldERPTVdyYXBwZXIodmFsdWUpKQorICAgICAgICByZXR1cm4g
W1t3cmFwcGVyIHJldGFpbl0gYXV0b3JlbGVhc2VdOworICAgIERPTVRlc3RFdmVudFRhcmdldCAq
d3JhcHBlciA9IFtbRE9NVGVzdEV2ZW50VGFyZ2V0IGFsbG9jXSBfaW5pdF07CisgICAgd3JhcHBl
ci0+X2ludGVybmFsID0gcmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KHZhbHVl
KTsKKyAgICB2YWx1ZS0+cmVmKCk7CisgICAgYWRkRE9NV3JhcHBlcih3cmFwcGVyLCB2YWx1ZSk7
CisgICAgcmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RFdmVudFRhcmdldEludGVybmFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09i
akMvRE9NVGVzdEV2ZW50VGFyZ2V0SW50ZXJuYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RFdmVudFRhcmdldEludGVy
bmFsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTVRlc3RFdmVudFRhcmdldC5oPgorCisjaWYgV0VC
S0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBUZXN0RXZlbnRUYXJnZXQ7Cit9CisKK1dlYkNvcmU6
OlRlc3RFdmVudFRhcmdldCogY29yZShET01UZXN0RXZlbnRUYXJnZXQgKik7CitET01UZXN0RXZl
bnRUYXJnZXQgKmtpdChXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqKTsKKworI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5oCShyZXZpc2lvbiAxMDQ0OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEy
ICsyOCwyMSBAQAogCiAjaWYgV0VCS0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZF
UlNJT05fTEFURVNUCiAKK0BjbGFzcyBET01Eb2N1bWVudDsKIEBjbGFzcyBET01JREJLZXk7CiBA
Y2xhc3MgRE9NT3B0aW9uc09iamVjdDsKK0BjbGFzcyBET01TVkdEb2N1bWVudDsKK0BjbGFzcyBE
T01TVkdQb2ludDsKIEBjbGFzcyBET01UZXN0T2JqOwogQGNsYXNzIERPTVRlc3RPYmplY3RBQ29u
c3RydWN0b3I7CiBAY2xhc3MgRE9NVGVzdE9iamVjdEJDb25zdHJ1Y3RvcjsKIEBjbGFzcyBET01U
ZXN0T2JqZWN0Q0NvbnN0cnVjdG9yOworQGNsYXNzIERPTWE7CitAY2xhc3MgRE9NYjsKK0BjbGFz
cyBET01ib29sOworQGNsYXNzIERPTWM7CitAY2xhc3MgRE9NZDsKK0BjbGFzcyBET01lOwogQGNs
YXNzIERPTWxvZzsKIEBjbGFzcyBOU1N0cmluZzsKIEBwcm90b2NvbCBET01FdmVudExpc3RlbmVy
OwpAQCAtMTM1LDYgKzE0NCwxMyBAQCBlbnVtIHsKIC0gKERPTVRlc3RPYmplY3RDQ29uc3RydWN0
b3IgKiljb25kaXRpb25hbEF0dHI2OwogLSAodm9pZClzZXRDb25kaXRpb25hbEF0dHI2OihET01U
ZXN0T2JqZWN0Q0NvbnN0cnVjdG9yICopbmV3Q29uZGl0aW9uYWxBdHRyNjsKICNlbmRpZgorLSAo
RE9NRG9jdW1lbnQgKiljb250ZW50RG9jdW1lbnQ7CistIChET01TVkdQb2ludCAqKW11dGFibGVQ
b2ludDsKKy0gKHZvaWQpc2V0TXV0YWJsZVBvaW50OihET01TVkdQb2ludCAqKW5ld011dGFibGVQ
b2ludDsKKy0gKERPTVNWR1BvaW50ICopaW1tdXRhYmxlUG9pbnQ7CistICh2b2lkKXNldEltbXV0
YWJsZVBvaW50OihET01TVkdQb2ludCAqKW5ld0ltbXV0YWJsZVBvaW50OworLSAoZmxvYXQpc3Ry
aWN0RmxvYXQ7CistICh2b2lkKXNldFN0cmljdEZsb2F0OihmbG9hdCluZXdTdHJpY3RGbG9hdDsK
IC0gKGludClkZXNjcmlwdGlvbk5hbWU7CiAtIChpbnQpaWROYW1lOwogLSAodm9pZClzZXRJZE5h
bWU6KGludCluZXdJZE5hbWU7CkBAIC0xNzAsNiArMTg2LDE2IEBAIGVudW0gewogLSAoaW50KWNs
YXNzTWV0aG9kV2l0aE9wdGlvbmFsOihpbnQpYXJnOwogLSAodm9pZClvdmVybG9hZGVkTWV0aG9k
MTooaW50KWFyZzsKIC0gKHZvaWQpb3ZlcmxvYWRlZE1ldGhvZDE6KE5TU3RyaW5nICopdHlwZTsK
Ky0gKERPTVNWR0RvY3VtZW50ICopZ2V0U1ZHRG9jdW1lbnQ7CistICh2b2lkKWNvbnZlcnQxOihE
T01hICopOworLSAodm9pZCljb252ZXJ0MjooRE9NYiAqKTsKKy0gKHZvaWQpY29udmVydDM6KERP
TWMgKik7CistICh2b2lkKWNvbnZlcnQ0OihET01kICopOworLSAodm9pZCljb252ZXJ0NTooRE9N
ZSAqKTsKKy0gKERPTVNWR1BvaW50ICopbXV0YWJsZVBvaW50RnVuY3Rpb247CistIChET01TVkdQ
b2ludCAqKWltbXV0YWJsZVBvaW50RnVuY3Rpb247CistICh2b2lkKW9yYW5nZTsKKy0gKERPTWJv
b2wgKilzdHJpY3RGdW5jdGlvbjooTlNTdHJpbmcgKilzdHIgYTooZmxvYXQpYSBiOihpbnQpYjsK
IEBlbmQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0T2JqLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0JKHJldmlzaW9uIDEwNDQ5MikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0J
KHdvcmtpbmcgY29weSkKQEAgLTMyLDE2ICszMiwyNiBAQAogI2ltcG9ydCAiRE9NQmxvYkludGVy
bmFsLmgiCiAjaW1wb3J0ICJET01DU1NSdWxlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUNTU1Zh
bHVlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTURvY3VtZW50SW50ZXJuYWwuaCIKICNpbXBvcnQg
IkRPTUV2ZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUlEQktleUludGVybmFsLmgiCiAjaW1w
b3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTU9wdGlvbnNPYmplY3RJbnRlcm5h
bC5oIgorI2ltcG9ydCAiRE9NU1ZHRG9jdW1lbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NU1ZH
UG9pbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NU3R5bGVTaGVldEludGVybmFsLmgiCiAjaW1w
b3J0ICJET01UZXN0T2JqSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVRlc3RPYmplY3RBQ29uc3Ry
dWN0b3JJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NVGVzdE9iamVjdEJDb25zdHJ1Y3RvckludGVy
bmFsLmgiCiAjaW1wb3J0ICJET01UZXN0T2JqZWN0Q0NvbnN0cnVjdG9ySW50ZXJuYWwuaCIKKyNp
bXBvcnQgIkRPTWFJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NYkludGVybmFsLmgiCisjaW1wb3J0
ICJET01ib29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTWNJbnRlcm5hbC5oIgorI2ltcG9ydCAi
RE9NZEludGVybmFsLmgiCisjaW1wb3J0ICJET01lSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTWxv
Z0ludGVybmFsLmgiCisjaW1wb3J0ICJEb2N1bWVudC5oIgogI2ltcG9ydCAiRXZlbnRMaXN0ZW5l
ci5oIgogI2ltcG9ydCAiRXhjZXB0aW9uSGFuZGxlcnMuaCIKICNpbXBvcnQgIkhUTUxOYW1lcy5o
IgpAQCAtNTAsNiArNjAsOCBAQAogI2ltcG9ydCAiS1VSTC5oIgogI2ltcG9ydCAiT2JqQ0V2ZW50
TGlzdGVuZXIuaCIKICNpbXBvcnQgIk9wdGlvbnNPYmplY3QuaCIKKyNpbXBvcnQgIlNWR0RvY3Vt
ZW50LmgiCisjaW1wb3J0ICJTVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaCIKICNpbXBvcnQgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2ltcG9ydCAiVGVzdE9iai5oIgogI2ltcG9ydCAiVGVz
dE9iamVjdEFDb25zdHJ1Y3Rvci5oIgpAQCAtNTgsNiArNzAsMTIgQEAKICNpbXBvcnQgIlRocmVh
ZENoZWNrLmgiCiAjaW1wb3J0ICJXZWJDb3JlT2JqQ0V4dHJhcy5oIgogI2ltcG9ydCAiV2ViU2Ny
aXB0T2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCAiYS5oIgorI2ltcG9ydCAiYi5oIgorI2ltcG9y
dCAiYm9vbC5oIgorI2ltcG9ydCAiYy5oIgorI2ltcG9ydCAiZC5oIgorI2ltcG9ydCAiZS5oIgog
I2ltcG9ydCAibG9nLmgiCiAjaW1wb3J0IDx3dGYvR2V0UHRyLmg+CiAKQEAgLTUxNCw2ICs1MzIs
NTIgQEAgLSAodm9pZClzZXRDb25kaXRpb25hbEF0dHI2OihET01UZXN0T2JqZQogfQogI2VuZGlm
CiAKKy0gKERPTURvY3VtZW50ICopY29udGVudERvY3VtZW50Cit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBraXQoV1RGOjpnZXRQdHIoSU1Q
TC0+Y29udGVudERvY3VtZW50KCkpKTsKK30KKworLSAoRE9NU1ZHUG9pbnQgKiltdXRhYmxlUG9p
bnQKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0
dXJuIGtpdChXVEY6OmdldFB0cihXZWJDb3JlOjpTVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8V2Vi
Q29yZTo6VGVzdE9iaiwgV2ViQ29yZTo6RmxvYXRQb2ludD46OmNyZWF0ZShJTVBMLCBJTVBMLT5t
dXRhYmxlUG9pbnQoKSwgJldlYkNvcmU6OlRlc3RPYmo6OnVwZGF0ZU11dGFibGVQb2ludCkpKTsK
K30KKworLSAodm9pZClzZXRNdXRhYmxlUG9pbnQ6KERPTVNWR1BvaW50ICopbmV3TXV0YWJsZVBv
aW50Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIEFT
U0VSVChuZXdNdXRhYmxlUG9pbnQpOworCisgICAgSU1QTC0+c2V0TXV0YWJsZVBvaW50KGNvcmUo
bmV3TXV0YWJsZVBvaW50KSk7Cit9CisKKy0gKERPTVNWR1BvaW50ICopaW1tdXRhYmxlUG9pbnQK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJu
IGtpdChXVEY6OmdldFB0cihXZWJDb3JlOjpTVkdQcm9wZXJ0eVRlYXJPZmY8V2ViQ29yZTo6Rmxv
YXRQb2ludD46OmNyZWF0ZShJTVBMLT5pbW11dGFibGVQb2ludCgpKSkpOworfQorCistICh2b2lk
KXNldEltbXV0YWJsZVBvaW50OihET01TVkdQb2ludCAqKW5ld0ltbXV0YWJsZVBvaW50Cit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIEFTU0VSVChuZXdJ
bW11dGFibGVQb2ludCk7CisKKyAgICBJTVBMLT5zZXRJbW11dGFibGVQb2ludChjb3JlKG5ld0lt
bXV0YWJsZVBvaW50KSk7Cit9CisKKy0gKGZsb2F0KXN0cmljdEZsb2F0Cit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBMLT5zdHJpY3RG
bG9hdCgpOworfQorCistICh2b2lkKXNldFN0cmljdEZsb2F0OihmbG9hdCluZXdTdHJpY3RGbG9h
dAoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBM
LT5zZXRTdHJpY3RGbG9hdChuZXdTdHJpY3RGbG9hdCk7Cit9CisKIC0gKGludClkZXNjcmlwdGlv
bk5hbWUKIHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CkBAIC03
NTgsNiArODIyLDcyIEBAIC0gKHZvaWQpb3ZlcmxvYWRlZE1ldGhvZDE6KE5TU3RyaW5nICopdHkK
IAogI2VuZGlmCiAKKy0gKERPTVNWR0RvY3VtZW50ICopZ2V0U1ZHRG9jdW1lbnQKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgRE9NU1ZHRG9jdW1lbnQgKnJlc3VsdCA9IGtpdChXVEY6Omdl
dFB0cihJTVBMLT5nZXRTVkdEb2N1bWVudChlYykpKTsKKyAgICBXZWJDb3JlOjpyYWlzZU9uRE9N
RXJyb3IoZWMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udmVydDE6KERP
TWEgKikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
SU1QTC0+Y29udmVydDEoY29yZSgpKTsKK30KKworLSAodm9pZCljb252ZXJ0MjooRE9NYiAqKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5j
b252ZXJ0Mihjb3JlKCkpOworfQorCistICh2b2lkKWNvbnZlcnQzOihET01jICopCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPmNvbnZlcnQz
KGNvcmUoKSk7Cit9CisKKy0gKHZvaWQpY29udmVydDQ6KERPTWQgKikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+Y29udmVydDQoY29yZSgp
KTsKK30KKworLSAodm9pZCljb252ZXJ0NTooRE9NZSAqKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5jb252ZXJ0NShjb3JlKCkpOworfQor
CistIChET01TVkdQb2ludCAqKW11dGFibGVQb2ludEZ1bmN0aW9uCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBraXQoV1RGOjpnZXRQdHIo
V2ViQ29yZTo6U1ZHUHJvcGVydHlUZWFyT2ZmPFdlYkNvcmU6OkZsb2F0UG9pbnQ+OjpjcmVhdGUo
SU1QTC0+bXV0YWJsZVBvaW50RnVuY3Rpb24oKSkpKTsKK30KKworLSAoRE9NU1ZHUG9pbnQgKilp
bW11dGFibGVQb2ludEZ1bmN0aW9uCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIHJldHVybiBraXQoV1RGOjpnZXRQdHIoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUZWFyT2ZmPFdlYkNvcmU6OkZsb2F0UG9pbnQ+OjpjcmVhdGUoSU1QTC0+aW1tdXRhYmxlUG9p
bnRGdW5jdGlvbigpKSkpOworfQorCistICh2b2lkKW9yYW5nZQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5vcmFuZ2UoKTsKK30KKworLSAo
RE9NYm9vbCAqKXN0cmljdEZ1bmN0aW9uOihOU1N0cmluZyAqKXN0ciBhOihmbG9hdClhIGI6KGlu
dCliCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIERPTWJvb2wgKnJlc3VsdCA9IGtpdChX
VEY6OmdldFB0cihJTVBMLT5zdHJpY3RGdW5jdGlvbihzdHIsIGEsIGIsIGVjKSkpOworICAgIFdl
YkNvcmU6OnJhaXNlT25ET01FcnJvcihlYyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogQGVu
ZAogCiBXZWJDb3JlOjpUZXN0T2JqKiBjb3JlKERPTVRlc3RPYmogKndyYXBwZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvT2JqQy9ET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPdmVy
cmlkaW5nTmFtZUdldHRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vp
bmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01P
YmplY3QuaD4KKworI2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJT
SU9OX0xBVEVTVAorCitAY2xhc3MgTlNTdHJpbmc7CisKK0BpbnRlcmZhY2UgRE9NVGVzdE92ZXJy
aWRpbmdOYW1lR2V0dGVyIDogRE9NT2JqZWN0CistICh2b2lkKWFub3RoZXJGdW5jdGlvbjooTlNT
dHJpbmcgKilzdHI7CitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RPdmVycmlkaW5nTmFtZUdldHRlci5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5t
bQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKKworI2ltcG9y
dCAiRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmgiCisKKyNpbXBvcnQgIkRPTUJsb2JJbnRl
cm5hbC5oIgorI2ltcG9ydCAiRE9NQ1NTUnVsZUludGVybmFsLmgiCisjaW1wb3J0ICJET01DU1NW
YWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCisjaW1wb3J0ICJE
T01Ob2RlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVN0eWxlU2hlZXRJbnRlcm5hbC5oIgorI2lt
cG9ydCAiRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVySW50ZXJuYWwuaCIKKyNpbXBvcnQgIkV4
Y2VwdGlvbkhhbmRsZXJzLmgiCisjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNp
bXBvcnQgIktVUkwuaCIKKyNpbXBvcnQgIlRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oIgorI2lt
cG9ydCAiVGhyZWFkQ2hlY2suaCIKKyNpbXBvcnQgIldlYkNvcmVPYmpDRXh0cmFzLmgiCisjaW1w
b3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDx3dGYvR2V0UHRyLmg+CisK
KyNkZWZpbmUgSU1QTCByZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RPdmVycmlkaW5nTmFt
ZUdldHRlcio+KF9pbnRlcm5hbCkKKworQGltcGxlbWVudGF0aW9uIERPTVRlc3RPdmVycmlkaW5n
TmFtZUdldHRlcgorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBpZiAoV2ViQ29yZU9iakNTY2hl
ZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW0RPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlciBj
bGFzc10sIHNlbGYpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoX2ludGVybmFsKQorICAg
ICAgICBJTVBMLT5kZXJlZigpOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClm
aW5hbGl6ZQoreworICAgIGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVmKCk7Cisg
ICAgW3N1cGVyIGZpbmFsaXplXTsKK30KKworLSAodm9pZClhbm90aGVyRnVuY3Rpb246KE5TU3Ry
aW5nICopc3RyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIElNUEwtPmFub3RoZXJGdW5jdGlvbihzdHIpOworfQorCitAZW5kCisKK1dlYkNvcmU6OlRl
c3RPdmVycmlkaW5nTmFtZUdldHRlciogY29yZShET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIg
KndyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyByZWludGVycHJldF9jYXN0PFdlYkNv
cmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlcio+KHdyYXBwZXItPl9pbnRlcm5hbCkgOiAwOwor
fQorCitET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIgKmtpdChXZWJDb3JlOjpUZXN0T3ZlcnJp
ZGluZ05hbWVHZXR0ZXIqIHZhbHVlKQoreworICAgIHsgRE9NX0FTU0VSVF9NQUlOX1RIUkVBRCgp
OyBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpOyB9OworICAgIGlmICghdmFs
dWUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgaWYgKERPTVRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlciAqd3JhcHBlciA9IGdldERPTVdyYXBwZXIodmFsdWUpKQorICAgICAgICByZXR1cm4gW1t3
cmFwcGVyIHJldGFpbl0gYXV0b3JlbGVhc2VdOworICAgIERPTVRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlciAqd3JhcHBlciA9IFtbRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyIGFsbG9jXSBfaW5p
dF07CisgICAgd3JhcHBlci0+X2ludGVybmFsID0gcmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJ
bnRlcm5hbCo+KHZhbHVlKTsKKyAgICB2YWx1ZS0+cmVmKCk7CisgICAgYWRkRE9NV3JhcHBlcih3
cmFwcGVyLCB2YWx1ZSk7CisgICAgcmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPdmVy
cmlkaW5nTmFtZUdldHRlckludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVySW50
ZXJuYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlckludGVybmFsLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0
IDxXZWJDb3JlL0RPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oPgorCisjaWYgV0VCS0lUX1ZF
UlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICBjbGFzcyBUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI7Cit9CisKK1dlYkNv
cmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlciogY29yZShET01UZXN0T3ZlcnJpZGluZ05hbWVH
ZXR0ZXIgKik7CitET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIgKmtpdChXZWJDb3JlOjpUZXN0
T3ZlcnJpZGluZ05hbWVHZXR0ZXIqKTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE5OSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwK
KyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJWOFRlc3RBY3RpdmVET01PYmplY3QuaCIKKworI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVk
ZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCisjaW5jbHVkZSAi
VjhCaW5kaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJW
OElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4Tm9kZS5oIgorI2luY2x1ZGUgIlY4UHJv
eHkuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitXcmFwcGVyVHlwZUluZm8gVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjppbmZvID0geyBWOFRl
c3RBY3RpdmVET01PYmplY3Q6OkdldFRlbXBsYXRlLCBWOFRlc3RBY3RpdmVET01PYmplY3Q6OmRl
cmVmT2JqZWN0LCAwLCAwIH07CisKK25hbWVzcGFjZSBUZXN0QWN0aXZlRE9NT2JqZWN0SW50ZXJu
YWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkgeyB9CisKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZXhjaXRpbmdBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJ
TkNfU1RBVFMoIkRPTS5UZXN0QWN0aXZlRE9NT2JqZWN0LmV4Y2l0aW5nQXR0ci5fZ2V0Iik7Cisg
ICAgVGVzdEFjdGl2ZURPTU9iamVjdCogaW1wID0gVjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmV4
Y2l0aW5nQXR0cigpKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBleGNpdGlu
Z0Z1bmN0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNf
U1RBVFMoIkRPTS5UZXN0QWN0aXZlRE9NT2JqZWN0LmV4Y2l0aW5nRnVuY3Rpb24iKTsKKyAgICBp
ZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5v
dWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisgICAgVGVzdEFjdGl2ZURPTU9i
amVjdCogaW1wID0gVjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigp
KTsKKyAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdT
dGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIHRydWUpKQorICAgICAgICByZXR1cm4gdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KCk7CisgICAgRVhDRVBUSU9OX0JMT0NLKE5vZGUqLCBuZXh0Q2hpbGQs
IFY4Tm9kZTo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgTWlz
c2luZ0lzVW5kZWZpbmVkKSkgPyBWOE5vZGU6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVj
dD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgTWlzc2luZ0lzVW5kZWZp
bmVkKSkpIDogMCk7CisgICAgaW1wLT5leGNpdGluZ0Z1bmN0aW9uKG5leHRDaGlsZCk7CisgICAg
cmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHBvc3RNZXNzYWdlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
K3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0QWN0aXZlRE9NT2JqZWN0LnBvc3RNZXNzYWdlIik7
CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigi
Tm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworICAgIFRlc3RBY3Rp
dmVET01PYmplY3QqIGltcCA9IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7CisgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBh
cmFtZXRlcjw+LCBtZXNzYWdlLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBNaXNz
aW5nSXNVbmRlZmluZWQpKTsKKyAgICBpbXAtPnBvc3RNZXNzYWdlKG1lc3NhZ2UpOworICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBwb3N0TWVzc2FnZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVz
dEFjdGl2ZURPTU9iamVjdC5wb3N0TWVzc2FnZS5fZ2V0Iik7CisgICAgc3RhdGljIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwcml2YXRlVGVtcGxhdGUgPSB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3
KFRlc3RBY3RpdmVET01PYmplY3RJbnRlcm5hbDo6cG9zdE1lc3NhZ2VDYWxsYmFjaywgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOFRlc3RBY3RpdmVET01PYmpl
Y3Q6OkdldFJhd1RlbXBsYXRlKCkpKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xk
ZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhUZXN0QWN0aXZlRE9NT2JqZWN0
OjpHZXRUZW1wbGF0ZSgpLCBpbmZvLlRoaXMoKSk7CisgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkp
IHsKKyAgICAgICAgLy8gY2FuIG9ubHkgcmVhY2ggaGVyZSBieSAnb2JqZWN0Ll9fcHJvdG9fXy5m
dW5jJywgYW5kIGl0IHNob3VsZCBwYXNzZWQKKyAgICAgICAgLy8gZG9tYWluIHNlY3VyaXR5IGNo
ZWNrIGFscmVhZHkKKyAgICAgICAgcmV0dXJuIHByaXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24o
KTsKKyAgICB9CisgICAgVGVzdEFjdGl2ZURPTU9iamVjdCogaW1wID0gVjhUZXN0QWN0aXZlRE9N
T2JqZWN0Ojp0b05hdGl2ZShob2xkZXIpOworICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmNh
bkFjY2Vzc0ZyYW1lKFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgZmFsc2Up
KSB7CisgICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
c2hhcmVkVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5l
dyh2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RBY3RpdmVET01PYmplY3RJbnRlcm5hbDo6
cG9zdE1lc3NhZ2VDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIHY4OjpTaWduYXR1
cmU6Ok5ldyhWOFRlc3RBY3RpdmVET01PYmplY3Q6OkdldFJhd1RlbXBsYXRlKCkpKSk7CisgICAg
ICAgIHJldHVybiBzaGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKKyAgICB9CisgICAgcmV0
dXJuIHByaXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
VGVzdEFjdGl2ZURPTU9iamVjdEludGVybmFsCisKK3N0YXRpYyBjb25zdCBCYXRjaGVkQXR0cmli
dXRlIFRlc3RBY3RpdmVET01PYmplY3RBdHRyc1tdID0geworICAgIC8vIEF0dHJpYnV0ZSAnZXhj
aXRpbmdBdHRyJyAoVHlwZTogJ3JlYWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAg
eyJleGNpdGluZ0F0dHIiLCBUZXN0QWN0aXZlRE9NT2JqZWN0SW50ZXJuYWw6OmV4Y2l0aW5nQXR0
ckF0dHJHZXR0ZXIsIDAsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0Nv
bnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2
ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorfTsKKworc3RhdGljIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RBY3RpdmVET01PYmplY3RU
ZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYykKK3sKKyAg
ICBkZXNjLT5SZWFkT25seVByb3RvdHlwZSgpOworCisgICAgdjg6OkxvY2FsPHY4OjpTaWduYXR1
cmU+IGRlZmF1bHRTaWduYXR1cmU7CisgICAgZGVmYXVsdFNpZ25hdHVyZSA9IGNvbmZpZ3VyZVRl
bXBsYXRlKGRlc2MsICJUZXN0QWN0aXZlRE9NT2JqZWN0Iiwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+KCksIFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6aW50ZXJuYWxGaWVsZENv
dW50LAorICAgICAgICBUZXN0QWN0aXZlRE9NT2JqZWN0QXR0cnMsIFdURl9BUlJBWV9MRU5HVEgo
VGVzdEFjdGl2ZURPTU9iamVjdEF0dHJzKSwKKyAgICAgICAgMCwgMCk7CisgICAgVU5VU0VEX1BB
UkFNKGRlZmF1bHRTaWduYXR1cmUpOyAvLyBJbiBzb21lIGNhc2VzLCBpdCB3aWxsIG5vdCBiZSB1
c2VkLgorICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlID0gZGVzYy0+
SW5zdGFuY2VUZW1wbGF0ZSgpOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IHBy
b3RvID0gZGVzYy0+UHJvdG90eXBlVGVtcGxhdGUoKTsKKyAgICBVTlVTRURfUEFSQU0oaW5zdGFu
Y2UpOyAvLyBJbiBzb21lIGNhc2VzLCBpdCB3aWxsIG5vdCBiZSB1c2VkLgorICAgIFVOVVNFRF9Q
QVJBTShwcm90byk7IC8vIEluIHNvbWUgY2FzZXMsIGl0IHdpbGwgbm90IGJlIHVzZWQuCisgICAg
aW5zdGFuY2UtPlNldEFjY2Vzc0NoZWNrQ2FsbGJhY2tzKFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6
bmFtZWRTZWN1cml0eUNoZWNrLCBWOFRlc3RBY3RpdmVET01PYmplY3Q6OmluZGV4ZWRTZWN1cml0
eUNoZWNrLCB2ODo6RXh0ZXJuYWw6OldyYXAoJlY4VGVzdEFjdGl2ZURPTU9iamVjdDo6aW5mbykp
OworCisgICAgLy8gQ3VzdG9tIFNpZ25hdHVyZSAnZXhjaXRpbmdGdW5jdGlvbicKKyAgICBjb25z
dCBpbnQgZXhjaXRpbmdGdW5jdGlvbkFyZ2MgPSAxOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IGV4Y2l0aW5nRnVuY3Rpb25Bcmd2W2V4Y2l0aW5nRnVuY3Rpb25BcmdjXSA9
IHsgVjhOb2RlOjpHZXRSYXdUZW1wbGF0ZSgpIH07CisgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0
dXJlPiBleGNpdGluZ0Z1bmN0aW9uU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2Ms
IGV4Y2l0aW5nRnVuY3Rpb25BcmdjLCBleGNpdGluZ0Z1bmN0aW9uQXJndik7CisgICAgcHJvdG8t
PlNldCh2ODo6U3RyaW5nOjpOZXcoImV4Y2l0aW5nRnVuY3Rpb24iKSwgdjg6OkZ1bmN0aW9uVGVt
cGxhdGU6Ok5ldyhUZXN0QWN0aXZlRE9NT2JqZWN0SW50ZXJuYWw6OmV4Y2l0aW5nRnVuY3Rpb25D
YWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIGV4Y2l0aW5nRnVuY3Rpb25TaWduYXR1
cmUpKTsKKworICAgIC8vIEZ1bmN0aW9uICdwb3N0TWVzc2FnZScgKEV4dEF0dHI6ICdEb05vdENo
ZWNrRG9tYWluU2VjdXJpdHknKQorICAgIHByb3RvLT5TZXRBY2Nlc3Nvcih2ODo6U3RyaW5nOjpO
ZXcoInBvc3RNZXNzYWdlIiksIFRlc3RBY3RpdmVET01PYmplY3RJbnRlcm5hbDo6cG9zdE1lc3Nh
Z2VBdHRyR2V0dGVyLCAwLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OkFMTF9DQU5fUkVB
RCwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6RG9udERlbGV0ZSB8IHY4
OjpSZWFkT25seSkpOworCisgICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCisgICAgZGVz
Yy0+U2V0KGdldFRvU3RyaW5nTmFtZSgpLCBnZXRUb1N0cmluZ1RlbXBsYXRlKCkpOworICAgIHJl
dHVybiBkZXNjOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhU
ZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRSYXdUZW1wbGF0ZSgpCit7CisgICAgVjhCaW5kaW5nUGVy
SXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwor
ICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0
ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKKyAgICBpZiAocmVzdWx0ICE9
IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCisgICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwor
ICAgIGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuYWRkKCZpbmZvLCB0ZW1wbCk7CisgICAgcmV0dXJu
IHRlbXBsOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0
QWN0aXZlRE9NT2JqZWN0OjpHZXRUZW1wbGF0ZSgpCit7CisgICAgVjhCaW5kaW5nUGVySXNvbGF0
ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOworICAgIFY4
QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0
YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKKyAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRl
bXBsYXRlTWFwKCkuZW5kKCkpCisgICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKworICAg
IHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQorICAgICAgICBDb25maWd1cmVWOFRlc3RBY3RpdmVET01P
YmplY3RUZW1wbGF0ZShHZXRSYXdUZW1wbGF0ZSgpKTsKKyAgICBkYXRhLT50ZW1wbGF0ZU1hcCgp
LmFkZCgmaW5mbywgdGVtcGwpOworICAgIHJldHVybiB0ZW1wbDsKK30KKworYm9vbCBWOFRlc3RB
Y3RpdmVET01PYmplY3Q6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gR2V0UmF3VGVtcGxhdGUoKS0+SGFzSW5zdGFuY2UodmFsdWUpOworfQor
CisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp3cmFwU2xv
dyhUZXN0QWN0aXZlRE9NT2JqZWN0KiBpbXBsKQoreworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcHBlcjsKKyAgICBWOFByb3h5KiBwcm94eSA9IDA7CisgICAgaWYgKGltcGwtPmZyYW1l
KCkpIHsKKyAgICAgICAgcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShpbXBsLT5mcmFtZSgpKTsK
KyAgICAgICAgaWYgKHByb3h5KQorICAgICAgICAgICAgcHJveHktPndpbmRvd1NoZWxsKCktPmlu
aXRDb250ZXh0SWZOZWVkZWQoKTsKKyAgICB9CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjb250ZXh0OworICAgIGlmIChwcm94eSkKKyAgICAgICAgY29udGV4dCA9IHByb3h5LT5jb250
ZXh0KCk7CisKKyAgICAvLyBFbnRlciB0aGUgbm9kZSdzIGNvbnRleHQgYW5kIGNyZWF0ZSB0aGUg
d3JhcHBlciBpbiB0aGF0IGNvbnRleHQuCisgICAgaWYgKCFjb250ZXh0LklzRW1wdHkoKSkKKyAg
ICAgICAgY29udGV4dC0+RW50ZXIoKTsKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0
YW50aWF0ZVY4T2JqZWN0KHByb3h5LCAmaW5mbywgaW1wbCk7CisgICAgLy8gRXhpdCB0aGUgbm9k
ZSdzIGNvbnRleHQgaWYgaXQgd2FzIGVudGVyZWQuCisgICAgaWYgKCFjb250ZXh0LklzRW1wdHko
KSkKKyAgICAgICAgY29udGV4dC0+RXhpdCgpOworICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgICBpbXBsLT5yZWYoKTsKKyAgICB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD46Ok5ldyh3cmFwcGVyKTsKKworICAgIGlmICghaGFzRGVwZW5kZW50TGlmZXRpbWUpCisg
ICAgICAgIHdyYXBwZXJIYW5kbGUuTWFya0luZGVwZW5kZW50KCk7CisgICAgZ2V0RE9NT2JqZWN0
TWFwKCkuc2V0KGltcGwsIHdyYXBwZXJIYW5kbGUpOworICAgIHJldHVybiB3cmFwcGVyOworfQor
Cit2b2lkIFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6ZGVyZWZPYmplY3Qodm9pZCogb2JqZWN0KQor
eworICAgIHN0YXRpY19jYXN0PFRlc3RBY3RpdmVET01PYmplY3QqPihvYmplY3QpLT5kZXJlZigp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURP
TU9iamVjdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDgxIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2lmbmRlZiBWOFRlc3RBY3RpdmVET01PYmpl
Y3RfaAorI2RlZmluZSBWOFRlc3RBY3RpdmVET01PYmplY3RfaAorCisjaW5jbHVkZSAiVGVzdEFj
dGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIldy
YXBwZXJUeXBlSW5mby5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgVjhUZXN0QWN0aXZlRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNEZXBlbmRlbnRMaWZldGltZSA9IGZhbHNlOworICAgIHN0YXRpYyBib29s
IEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisgICAgc3RhdGljIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0ZSgpOworICAgIHN0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKKyAg
ICBzdGF0aWMgVGVzdEFjdGl2ZURPTU9iamVjdCogdG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUZXN0
QWN0aXZlRE9NT2JqZWN0Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhE
T01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKKyAgICB9CisgICAgaW5saW5lIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEFjdGl2ZURPTU9iamVjdCopOworICAgIHN0YXRpYyB2
b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKKyAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87
CisgICAgc3RhdGljIGNvbnN0IGludCBpbnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFw
cGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsKKyAgICBzdGF0aWMgYm9vbCBuYW1lZFNlY3VyaXR5
Q2hlY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+IGhvc3QsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGtl
eSwgdjg6OkFjY2Vzc1R5cGUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGRhdGEpOworICAgIHN0YXRp
YyBib29sIGluZGV4ZWRTZWN1cml0eUNoZWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBob3N0LCB1
aW50MzJfdCBpbmRleCwgdjg6OkFjY2Vzc1R5cGUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGRhdGEp
OworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGV4aXN0aW5nV3JhcHBlcihUZXN0
QWN0aXZlRE9NT2JqZWN0Kik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcFNsb3coVGVzdEFjdGl2ZURPTU9iamVjdCopOworfTsKKworQUxXQVlTX0lO
TElORSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6ZXhpc3Rp
bmdXcmFwcGVyKFRlc3RBY3RpdmVET01PYmplY3QqIGltcGwpCit7CisgICAgcmV0dXJuIGdldERP
TU9iamVjdE1hcCgpLmdldChpbXBsKTsKK30KKwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRl
c3RBY3RpdmVET01PYmplY3Q6OndyYXAoVGVzdEFjdGl2ZURPTU9iamVjdCogaW1wbCkKK3sKKyAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZXhpc3RpbmdXcmFwcGVyKGlt
cGwpOworICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IHdyYXBwZXI7CisgICAgcmV0dXJuIFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6d3JhcFNsb3coaW1w
bCk7Cit9CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0QWN0aXZlRE9N
T2JqZWN0KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxs
KCk7CisgICAgcmV0dXJuIFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6d3JhcChpbXBsKTsKK30KK2lu
bGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0QWN0aXZlRE9N
T2JqZWN0ID4gaW1wbCkKK3sKKyAgICByZXR1cm4gdG9WOChpbXBsLmdldCgpKTsKK30KKworfQor
CisjZW5kaWYgLy8gVjhUZXN0QWN0aXZlRE9NT2JqZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEwNDQ5MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGF0dHIyQXR0ckdlCiBzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBUZXN0RXZlbnRDb25z
dHJ1Y3RvckF0dHJzW10gPSB7CiAgICAgLy8gQXR0cmlidXRlICdhdHRyMScgKFR5cGU6ICdyZWFk
b25seSBhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQogICAgIHsiYXR0cjEiLCBUZXN0RXZlbnRDb25z
dHJ1Y3RvckludGVybmFsOjphdHRyMUF0dHJHZXR0ZXIsIDAsIDAgLyogbm8gZGF0YSAqLywgc3Rh
dGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6
OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAg
IC8vIEF0dHJpYnV0ZSAnYXR0cjInIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRy
OiAnSW5pdGlhbGl6ZWRBdENvbnN0cnVjdG9yJykKKyAgICAvLyBBdHRyaWJ1dGUgJ2F0dHIyJyAo
VHlwZTogJ3JlYWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJ0luaXRpYWxpemVkQnlDb25zdHJ1
Y3RvcicpCiAgICAgeyJhdHRyMiIsIFRlc3RFdmVudENvbnN0cnVjdG9ySW50ZXJuYWw6OmF0dHIy
QXR0ckdldHRlciwgMCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29u
dHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4
OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCiB9OwogCkBAIC05MSw2ICs5MSw3IEBAIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RFdmVudENvbnN0cnUKIAogYm9vbCBmaWxsVGVzdEV2
ZW50Q29uc3RydWN0b3JJbml0KFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdCYgZXZlbnRJbml0LCBj
b25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zKQogeworICAgIG9wdGlvbnMuZ2V0KCJhdHRyMiIs
IGV2ZW50SW5pdC5hdHRyMik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTk4IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAg
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlY4VGVzdEV2ZW50VGFyZ2V0LmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgorI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgorI2luY2x1ZGUgIlY4QmluZGlu
Z1N0YXRlLmgiCisjaW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiVjhET01XcmFw
cGVyLmgiCisjaW5jbHVkZSAiVjhFdmVudC5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0
LmgiCisjaW5jbHVkZSAiVjhOb2RlLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dyYXBwZXJUeXBl
SW5mbyBWOFRlc3RFdmVudFRhcmdldDo6aW5mbyA9IHsgVjhUZXN0RXZlbnRUYXJnZXQ6OkdldFRl
bXBsYXRlLCBWOFRlc3RFdmVudFRhcmdldDo6ZGVyZWZPYmplY3QsIDAsIDAgfTsKKworbmFtZXNw
YWNlIFRlc3RFdmVudFRhcmdldEludGVybmFsIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZv
aWQgVjhfVVNFKFQpIHsgfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGl0ZW1DYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRl
c3RFdmVudFRhcmdldC5pdGVtIik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQorICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpUeXBl
RXJyb3IpOworICAgIFRlc3RFdmVudFRhcmdldCogaW1wID0gVjhUZXN0RXZlbnRUYXJnZXQ6OnRv
TmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHsK
KyAgICBFWENFUFRJT05fQkxPQ0soaW50LCBpbmRleCwgdG9VSW50MzIoTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoYXJncywgMCwgTWlzc2luZ0lzVW5kZWZpbmVkKSkpOworICAgIGlmIChVTkxJS0VM
WShpbmRleCA8IDApKSB7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CisgICAgICAgIGdv
dG8gZmFpbDsKKyAgICB9CisgICAgcmV0dXJuIHRvVjgoaW1wLT5pdGVtKGluZGV4KSk7CisgICAg
fQorICAgIGZhaWw6CisgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKKyAgICByZXR1
cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gYWRkRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
Cit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdEV2ZW50VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIo
KSIpOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6
Z2V0RXZlbnRMaXN0ZW5lcihhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUpOwor
ICAgIGlmIChsaXN0ZW5lcikgeworICAgICAgICBWOFRlc3RFdmVudFRhcmdldDo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSktPmFkZEV2ZW50TGlzdGVuZXIodjhWYWx1ZVRvQXRvbWljV2ViQ29yZVN0
cmluZyhhcmdzWzBdKSwgbGlzdGVuZXIsIGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpKTsKKyAgICAg
ICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOFRlc3RF
dmVudFRhcmdldDo6ZXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgpOworICAgIH0KKyAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlbW92
ZUV2ZW50TGlzdGVuZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAg
IElOQ19TVEFUUygiRE9NLlRlc3RFdmVudFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCkiKTsK
KyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2
ZW50TGlzdGVuZXIoYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9ubHkpOworICAgIGlmIChs
aXN0ZW5lcikgeworICAgICAgICBWOFRlc3RFdmVudFRhcmdldDo6dG9OYXRpdmUoYXJncy5Ib2xk
ZXIoKSktPnJlbW92ZUV2ZW50TGlzdGVuZXIodjhWYWx1ZVRvQXRvbWljV2ViQ29yZVN0cmluZyhh
cmdzWzBdKSwgbGlzdGVuZXIuZ2V0KCksIGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpKTsKKyAgICAg
ICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOFRlc3RF
dmVudFRhcmdldDo6ZXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgpOworICAgIH0KKyAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRpc3Bh
dGNoRXZlbnRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19T
VEFUUygiRE9NLlRlc3RFdmVudFRhcmdldC5kaXNwYXRjaEV2ZW50Iik7CisgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1
bWVudHMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworICAgIFRlc3RFdmVudFRhcmdldCogaW1wID0g
VjhUZXN0RXZlbnRUYXJnZXQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIHsKKyAgICBFWENFUFRJT05fQkxPQ0soRXZlbnQqLCBldnQsIFY4
RXZlbnQ6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIE1pc3Np
bmdJc1VuZGVmaW5lZCkpID8gVjhFdmVudDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBNaXNzaW5nSXNVbmRlZmlu
ZWQpKSkgOiAwKTsKKyAgICBib29sIHJlc3VsdCA9IGltcC0+ZGlzcGF0Y2hFdmVudChldnQsIGVj
KTsKKyAgICBpZiAoVU5MSUtFTFkoZWMpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgcmV0dXJu
IHY4Qm9vbGVhbihyZXN1bHQpOworICAgIH0KKyAgICBmYWlsOgorICAgIFY4UHJveHk6OnNldERP
TUV4Y2VwdGlvbihlYyk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0RXZlbnRUYXJnZXRJbnRlcm5hbAorCitzdGF0aWMgY29uc3Qg
QmF0Y2hlZENhbGxiYWNrIFRlc3RFdmVudFRhcmdldENhbGxiYWNrc1tdID0geworICAgIHsiaXRl
bSIsIFRlc3RFdmVudFRhcmdldEludGVybmFsOjppdGVtQ2FsbGJhY2t9LAorICAgIHsiYWRkRXZl
bnRMaXN0ZW5lciIsIFRlc3RFdmVudFRhcmdldEludGVybmFsOjphZGRFdmVudExpc3RlbmVyQ2Fs
bGJhY2t9LAorICAgIHsicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIFRlc3RFdmVudFRhcmdldEludGVy
bmFsOjpyZW1vdmVFdmVudExpc3RlbmVyQ2FsbGJhY2t9LAorfTsKKworc3RhdGljIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RFdmVudFRhcmdldFRl
bXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQoreworICAg
IGRlc2MtPlJlYWRPbmx5UHJvdG90eXBlKCk7CisKKyAgICB2ODo6TG9jYWw8djg6OlNpZ25hdHVy
ZT4gZGVmYXVsdFNpZ25hdHVyZTsKKyAgICBkZWZhdWx0U2lnbmF0dXJlID0gY29uZmlndXJlVGVt
cGxhdGUoZGVzYywgIlRlc3RFdmVudFRhcmdldCIsIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPigpLCBWOFRlc3RFdmVudFRhcmdldDo6aW50ZXJuYWxGaWVsZENvdW50LAorICAg
ICAgICAwLCAwLAorICAgICAgICBUZXN0RXZlbnRUYXJnZXRDYWxsYmFja3MsIFdURl9BUlJBWV9M
RU5HVEgoVGVzdEV2ZW50VGFyZ2V0Q2FsbGJhY2tzKSk7CisgICAgVU5VU0VEX1BBUkFNKGRlZmF1
bHRTaWduYXR1cmUpOyAvLyBJbiBzb21lIGNhc2VzLCBpdCB3aWxsIG5vdCBiZSB1c2VkLgorICAg
IHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlID0gZGVzYy0+SW5zdGFuY2VU
ZW1wbGF0ZSgpOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IHByb3RvID0gZGVz
Yy0+UHJvdG90eXBlVGVtcGxhdGUoKTsKKyAgICBVTlVTRURfUEFSQU0oaW5zdGFuY2UpOyAvLyBJ
biBzb21lIGNhc2VzLCBpdCB3aWxsIG5vdCBiZSB1c2VkLgorICAgIFVOVVNFRF9QQVJBTShwcm90
byk7IC8vIEluIHNvbWUgY2FzZXMsIGl0IHdpbGwgbm90IGJlIHVzZWQuCisgICAgCisgICAgc2V0
Q29sbGVjdGlvbkluZGV4ZWRHZXR0ZXI8VGVzdEV2ZW50VGFyZ2V0LCBOb2RlPihkZXNjKTsKKyAg
ICBkZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldE5hbWVkUHJvcGVydHlIYW5kbGVyKFY4VGVz
dEV2ZW50VGFyZ2V0OjpuYW1lZFByb3BlcnR5R2V0dGVyLCAwLCAwLCAwLCAwKTsKKyAgICBkZXNj
LT5JbnN0YW5jZVRlbXBsYXRlKCktPk1hcmtBc1VuZGV0ZWN0YWJsZSgpOworCisgICAgLy8gQ3Vz
dG9tIFNpZ25hdHVyZSAnZGlzcGF0Y2hFdmVudCcKKyAgICBjb25zdCBpbnQgZGlzcGF0Y2hFdmVu
dEFyZ2MgPSAxOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRpc3BhdGNo
RXZlbnRBcmd2W2Rpc3BhdGNoRXZlbnRBcmdjXSA9IHsgVjhFdmVudDo6R2V0UmF3VGVtcGxhdGUo
KSB9OworICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gZGlzcGF0Y2hFdmVudFNpZ25hdHVy
ZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBkaXNwYXRjaEV2ZW50QXJnYywgZGlzcGF0Y2hF
dmVudEFyZ3YpOworICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJkaXNwYXRjaEV2ZW50
IiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdEV2ZW50VGFyZ2V0SW50ZXJuYWw6OmRp
c3BhdGNoRXZlbnRDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIGRpc3BhdGNoRXZl
bnRTaWduYXR1cmUpKTsKKworICAgIC8vIEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0ZQorICAgIGRl
c2MtPlNldChnZXRUb1N0cmluZ05hbWUoKSwgZ2V0VG9TdHJpbmdUZW1wbGF0ZSgpKTsKKyAgICBy
ZXR1cm4gZGVzYzsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4
VGVzdEV2ZW50VGFyZ2V0OjpHZXRSYXdUZW1wbGF0ZSgpCit7CisgICAgVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOworICAg
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKKyAgICBpZiAocmVzdWx0ICE9IGRh
dGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCisgICAgICAgIHJldHVybiByZXN1bHQtPnNlY29u
ZDsKKworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOworICAg
IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuYWRkKCZpbmZvLCB0ZW1wbCk7CisgICAgcmV0dXJuIHRl
bXBsOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXZl
bnRUYXJnZXQ6OkdldFRlbXBsYXRlKCkKK3sKKyAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSog
ZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CisgICAgVjhCaW5kaW5n
UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1w
bGF0ZU1hcCgpLmZpbmQoJmluZm8pOworICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVN
YXAoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworCisgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiB0ZW1wbCA9CisgICAgICAgIENvbmZpZ3VyZVY4VGVzdEV2ZW50VGFyZ2V0VGVtcGxh
dGUoR2V0UmF3VGVtcGxhdGUoKSk7CisgICAgZGF0YS0+dGVtcGxhdGVNYXAoKS5hZGQoJmluZm8s
IHRlbXBsKTsKKyAgICByZXR1cm4gdGVtcGw7Cit9CisKK2Jvb2wgVjhUZXN0RXZlbnRUYXJnZXQ6
Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
R2V0UmF3VGVtcGxhdGUoKS0+SGFzSW5zdGFuY2UodmFsdWUpOworfQorCisKK3Y4OjpIYW5kbGU8
djg6Ok9iamVjdD4gVjhUZXN0RXZlbnRUYXJnZXQ6OndyYXBTbG93KFRlc3RFdmVudFRhcmdldCog
aW1wbCkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7CisgICAgVjhQcm94
eSogcHJveHkgPSAwOworICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhP
YmplY3QocHJveHksICZpbmZvLCBpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiB3cmFwcGVyOworCisgICAgaW1wbC0+cmVmKCk7CisgICAgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRsZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+OjpOZXcod3JhcHBlcik7CisKKyAgICBpZiAoIWhhc0RlcGVuZGVudExpZmV0aW1lKQorICAg
ICAgICB3cmFwcGVySGFuZGxlLk1hcmtJbmRlcGVuZGVudCgpOworICAgIGdldERPTU9iamVjdE1h
cCgpLnNldChpbXBsLCB3cmFwcGVySGFuZGxlKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwor
dm9pZCBWOFRlc3RFdmVudFRhcmdldDo6ZGVyZWZPYmplY3Qodm9pZCogb2JqZWN0KQoreworICAg
IHN0YXRpY19jYXN0PFRlc3RFdmVudFRhcmdldCo+KG9iamVjdCktPmRlcmVmKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2
ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisqLworCisjaWZuZGVmIFY4VGVzdEV2ZW50VGFyZ2V0X2gKKyNkZWZpbmUgVjhUZXN0RXZlbnRU
YXJnZXRfaAorCisjaW5jbHVkZSAiVGVzdEV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiVjhET01X
cmFwcGVyLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCisjaW5jbHVkZSA8djguaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWOFRlc3RFdmVudFRhcmdldCB7Citw
dWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzRGVwZW5kZW50TGlmZXRpbWUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwor
ICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVt
cGxhdGUoKTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IEdldFRlbXBsYXRlKCk7CisgICAgc3RhdGljIFRlc3RFdmVudFRhcmdldCogdG9OYXRpdmUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxUZXN0RXZlbnRUYXJnZXQqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJu
YWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOworICAgIH0KKyAgICBpbmxpbmUgc3Rh
dGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0RXZlbnRUYXJnZXQqKTsKKyAgICBz
dGF0aWMgdm9pZCBkZXJlZk9iamVjdCh2b2lkKik7CisgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5m
byBpbmZvOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW5kZXhlZFByb3BlcnR5
R2V0dGVyKHVpbnQzMl90LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJik7CisgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYpOworICAgIHN0YXRpYyBjb25zdCBpbnQgZXZl
bnRMaXN0ZW5lckNhY2hlSW5kZXggPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50
ICsgMDsKKyAgICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVs
dFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGV4aXN0aW5nV3JhcHBlcihUZXN0RXZlbnRUYXJnZXQqKTsKKworcHJpdmF0ZToK
KyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhUZXN0RXZlbnRUYXJn
ZXQqKTsKK307CisKK0FMV0FZU19JTkxJTkUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RF
dmVudFRhcmdldDo6ZXhpc3RpbmdXcmFwcGVyKFRlc3RFdmVudFRhcmdldCogaW1wbCkKK3sKKyAg
ICByZXR1cm4gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOworfQorCit2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IFY4VGVzdEV2ZW50VGFyZ2V0Ojp3cmFwKFRlc3RFdmVudFRhcmdldCogaW1wbCkK
K3sKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZXhpc3RpbmdXcmFw
cGVyKGltcGwpOworICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIFY4VGVzdEV2ZW50VGFyZ2V0Ojp3cmFwU2xvdyhp
bXBsKTsKK30KKworaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RFdmVudFRh
cmdldCogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgp
OworICAgIHJldHVybiBWOFRlc3RFdmVudFRhcmdldDo6d3JhcChpbXBsKTsKK30KK2lubGluZSB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0RXZlbnRUYXJnZXQgPiBp
bXBsKQoreworICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCkpOworfQorCit9CisKKyNlbmRpZiAv
LyBWOFRlc3RFdmVudFRhcmdldF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5oCShyZXZpc2lvbiAx
MDQ0OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
SW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKICAgICBzdGF0aWMgQWN0aXZlRE9NT2JqZWN0
KiB0b0FjdGl2ZURPTU9iamVjdCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYpOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbmFtZWRQcm9wZXJ0eVNl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4sIHY4OjpMb2NhbDx2ODo6VmFsdWU+LCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJik7CiAgICAgc3RhdGljIGNvbnN0IGludCBpbnRlcm5hbEZpZWxkQ291
bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsKICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBleGlzdGluZ1dyYXBwZXIoVGVzdEludGVyZmFjZSopOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2Jq
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0T2JqLmNwcAkocmV2aXNpb24gMTA0NDkyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDggQEAKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJPcHRpb25zT2JqZWN0
LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNWR1By
b3BlcnR5VGVhck9mZi5oIgorI2luY2x1ZGUgIlNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZi5oIgog
I2luY2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5o
IgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIKQEAgLTM1LDEwICszNywxOSBA
QAogI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ1N0YXRl
LmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVjhEb2N1bWVudC5oIgog
I2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2lu
Y2x1ZGUgIlY4U1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJWOFNWR1BvaW50LmgiCiAjaW5jbHVk
ZSAiVjhUZXN0Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJWOGEuaCIKICNpbmNsdWRlICJWOGFueS5o
IgorI2luY2x1ZGUgIlY4Yi5oIgorI2luY2x1ZGUgIlY4Ym9vbC5oIgorI2luY2x1ZGUgIlY4Yy5o
IgorI2luY2x1ZGUgIlY4ZC5oIgorI2luY2x1ZGUgIlY4ZS5oIgogI2luY2x1ZGUgIlY4aW50Lmgi
CiAjaW5jbHVkZSAiVjhsb2cuaCIKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CkBAIC02NzQsNiAr
Njg1LDY0IEBAIHN0YXRpYyB2b2lkIGRvdWJsZUFycmF5QXR0clNldHRlcih2ODo6TG8KICAgICBy
ZXR1cm47CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udGVudERvY3VtZW50
QXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNvbnRlbnREb2N1bWVu
dC5fZ2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKKyAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjphbGxvd0FjY2Vzc1RvTm9kZShW
OEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmNvbnRlbnREb2N1bWVudCgpKSkKKyAgICByZXR1
cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisKKyAgICByZXR1cm4gdG9WOChpbXAtPmNvbnRl
bnREb2N1bWVudCgpKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtdXRhYmxl
UG9pbnRBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoubXV0YWJsZVBv
aW50Ll9nZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8u
SG9sZGVyKCkpOworICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKFNWR1N0YXRpY1Byb3BlcnR5
VGVhck9mZjxUZXN0T2JqLCBGbG9hdFBvaW50Pjo6Y3JlYXRlKGltcCwgaW1wLT5tdXRhYmxlUG9p
bnQoKSwgJlRlc3RPYmo6OnVwZGF0ZU11dGFibGVQb2ludCkpKTsKK30KKworc3RhdGljIHZvaWQg
bXV0YWJsZVBvaW50QXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5tdXRhYmxlUG9pbnQuX3NldCIpOworICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgUmVmUHRy
PFNWR1Byb3BlcnR5VGVhck9mZjxGbG9hdFBvaW50PiA+IHYgPSBWOFNWR1BvaW50OjpIYXNJbnN0
YW5jZSh2YWx1ZSkgPyBWOFNWR1BvaW50Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KHZhbHVlKSkgOiAwOworICAgIGltcC0+c2V0TXV0YWJsZVBvaW50KFdURjo6Z2V0UHRy
KHYpKTsKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW1t
dXRhYmxlUG9pbnRBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouaW1t
dXRhYmxlUG9pbnQuX2dldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoU1ZHUHJvcGVy
dHlUZWFyT2ZmPEZsb2F0UG9pbnQ+OjpjcmVhdGUoaW1wLT5pbW11dGFibGVQb2ludCgpKSkpOwor
fQorCitzdGF0aWMgdm9pZCBpbW11dGFibGVQb2ludEF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouaW1tdXRhYmxlUG9p
bnQuX3NldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CisgICAgUmVmUHRyPFNWR1Byb3BlcnR5VGVhck9mZjxGbG9hdFBvaW50PiA+IHYg
PSBWOFNWR1BvaW50OjpIYXNJbnN0YW5jZSh2YWx1ZSkgPyBWOFNWR1BvaW50Ojp0b05hdGl2ZSh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSkgOiAwOworICAgIGltcC0+c2V0SW1t
dXRhYmxlUG9pbnQoV1RGOjpnZXRQdHIodikpOworICAgIHJldHVybjsKK30KKworc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpY3RGbG9hdEF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NU
QVRTKCJET00uVGVzdE9iai5zdHJpY3RGbG9hdC5fZ2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0g
VjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjg6Ok51bWJl
cjo6TmV3KGltcC0+c3RyaWN0RmxvYXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmljdEZsb2F0
QXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRT
KCJET00uVGVzdE9iai5zdHJpY3RGbG9hdC5fc2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICBmbG9hdCB2ID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHZhbHVlLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICBpbXAtPnNldFN0cmljdEZsb2F0
KHYpOworICAgIHJldHVybjsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkZXNj
cmlwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5kZXNjcmlw
dGlvbi5fZ2V0Iik7CkBAIC0xMjc4LDYgKzEzNDcsMTIyIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gZW5hYmxlZEF0UnUKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7
CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0U1ZHRG9jdW1lbnRDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RP
YmouZ2V0U1ZHRG9jdW1lbnQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0
aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHsKKyAg
ICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjphbGxvd0FjY2Vzc1RvTm9kZShWOEJpbmRpbmdTdGF0
ZTo6T25seSgpLCBpbXAtPmdldFNWR0RvY3VtZW50KGVjKSkpCisgICAgICAgIHJldHVybiB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICBSZWZQdHI8U1ZHRG9jdW1lbnQ+IHJlc3VsdCA9IGlt
cC0+Z2V0U1ZHRG9jdW1lbnQoZWMpOworICAgIGlmIChVTkxJS0VMWShlYykpCisgICAgICAgIGdv
dG8gZmFpbDsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpKTsKKyAgICB9CisgICAg
ZmFpbDoKKyAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgIHJldHVybiB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
b252ZXJ0MUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NU
QVRTKCJET00uVGVzdE9iai5jb252ZXJ0MSIpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkK
KyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94
eTo6VHlwZUVycm9yKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOworICAgIEVYQ0VQVElPTl9CTE9DSyhhKiwgLCBWOGE6Okhhc0luc3RhbmNl
KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIE1pc3NpbmdJc1VuZGVmaW5lZCkpID8g
VjhhOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGFyZ3MsIDAsIE1pc3NpbmdJc1VuZGVmaW5lZCkpKSA6IDApOworICAgIGltcC0+
Y29udmVydDEoKTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9CisKK3N0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydDJDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouY29udmVydDIiKTsK
KyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJO
b3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBFWENFUFRJT05f
QkxPQ0soYiosICwgVjhiOjpIYXNJbnN0YW5jZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdz
LCAwLCBNaXNzaW5nSXNVbmRlZmluZWQpKSA/IFY4Yjo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBNaXNzaW5nSXNV
bmRlZmluZWQpKSkgOiAwKTsKKyAgICBpbXAtPmNvbnZlcnQyKCk7CisgICAgcmV0dXJuIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNv
bnZlcnQzQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RB
VFMoIkRPTS5UZXN0T2JqLmNvbnZlcnQzIik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5
OjpUeXBlRXJyb3IpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJn
cy5Ib2xkZXIoKSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKGMqLCAsIFY4Yzo6SGFzSW5zdGFuY2Uo
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgTWlzc2luZ0lzVW5kZWZpbmVkKSkgPyBW
OGM6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoYXJncywgMCwgTWlzc2luZ0lzVW5kZWZpbmVkKSkpIDogMCk7CisgICAgaW1wLT5j
b252ZXJ0MygpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0NENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5jb252ZXJ0NCIpOwor
ICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5v
dCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIEVYQ0VQVElPTl9C
TE9DSyhkKiwgLCBWOGQ6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3Ms
IDAsIE1pc3NpbmdJc1VuZGVmaW5lZCkpID8gVjhkOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIE1pc3NpbmdJc1Vu
ZGVmaW5lZCkpKSA6IDApOworICAgIGltcC0+Y29udmVydDQoKTsKKyAgICByZXR1cm4gdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KCk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29u
dmVydDVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFU
UygiRE9NLlRlc3RPYmouY29udmVydDUiKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6
OlR5cGVFcnJvcik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKKyAgICBFWENFUFRJT05fQkxPQ0soZSosICwgVjhlOjpIYXNJbnN0YW5jZShN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBNaXNzaW5nSXNVbmRlZmluZWQpKSA/IFY4
ZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BB
UkFNRVRFUihhcmdzLCAwLCBNaXNzaW5nSXNVbmRlZmluZWQpKSkgOiAwKTsKKyAgICBpbXAtPmNv
bnZlcnQ1KCk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCitzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG11dGFibGVQb2ludEZ1bmN0aW9uQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm11
dGFibGVQb2ludEZ1bmN0aW9uIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cihTVkdQcm9w
ZXJ0eVRlYXJPZmY8RmxvYXRQb2ludD46OmNyZWF0ZShpbXAtPm11dGFibGVQb2ludEZ1bmN0aW9u
KCkpKSk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW1tdXRhYmxlUG9pbnRG
dW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NU
QVRTKCJET00uVGVzdE9iai5pbW11dGFibGVQb2ludEZ1bmN0aW9uIik7CisgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdG9W
OChXVEY6OmdldFB0cihTVkdQcm9wZXJ0eVRlYXJPZmY8RmxvYXRQb2ludD46OmNyZWF0ZShpbXAt
PmltbXV0YWJsZVBvaW50RnVuY3Rpb24oKSkpKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBvcmFuZ2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAg
IElOQ19TVEFUUygiRE9NLlRlc3RPYmoub3JhbmdlIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBpbXAtPmJhbmFuYSgpOworICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBzdHJpY3RGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zdHJpY3RGdW5jdGlvbiIpOworICAg
IGlmIChhcmdzLkxlbmd0aCgpIDwgMykKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBl
bm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIHsKKyAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NL
KFY4UGFyYW1ldGVyPD4sIHN0ciwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgTWlz
c2luZ0lzVW5kZWZpbmVkKSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKGZsb2F0LCBhLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgTWlzc2luZ0lzVW5k
ZWZpbmVkKS0+TnVtYmVyVmFsdWUoKSkpOworICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGIsIFY4
aW50OjpIYXNJbnN0YW5jZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBNaXNzaW5n
SXNVbmRlZmluZWQpKSA/IFY4aW50Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDIsIE1pc3NpbmdJc1VuZGVmaW5lZCkp
KSA6IDApOworICAgIFJlZlB0cjxib29sPiByZXN1bHQgPSBpbXAtPnN0cmljdEZ1bmN0aW9uKHN0
ciwgYSwgYiwgZWMpOworICAgIGlmIChVTkxJS0VMWShlYykpCisgICAgICAgIGdvdG8gZmFpbDsK
KyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpKTsKKyAgICB9CisgICAgZmFpbDoKKyAg
ICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdE9iakludGVybmFsCiAKIHN0YXRp
YyBjb25zdCBCYXRjaGVkQXR0cmlidXRlIFRlc3RPYmpBdHRyc1tdID0gewpAQCAtMTM3MSw2ICsx
NTU2LDE0IEBAIHN0YXRpYyBjb25zdCBCYXRjaGVkQXR0cmlidXRlIFRlc3RPYmpBdHQKICAgICB7
ImZsb2F0QXJyYXkiLCBUZXN0T2JqSW50ZXJuYWw6OmZsb2F0QXJyYXlBdHRyR2V0dGVyLCBUZXN0
T2JqSW50ZXJuYWw6OmZsb2F0QXJyYXlBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRp
Y19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQ
cm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKICAgICAv
LyBBdHRyaWJ1dGUgJ2RvdWJsZUFycmF5JyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycp
CiAgICAgeyJkb3VibGVBcnJheSIsIFRlc3RPYmpJbnRlcm5hbDo6ZG91YmxlQXJyYXlBdHRyR2V0
dGVyLCBUZXN0T2JqSW50ZXJuYWw6OmRvdWJsZUFycmF5QXR0clNldHRlciwgMCAvKiBubyBkYXRh
ICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNf
Y2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAq
L30sCisgICAgLy8gQXR0cmlidXRlICdjb250ZW50RG9jdW1lbnQnIChUeXBlOiAncmVhZG9ubHkg
YXR0cmlidXRlJyBFeHRBdHRyOiAnQ2hlY2tGcmFtZVNlY3VyaXR5JykKKyAgICB7ImNvbnRlbnRE
b2N1bWVudCIsIFRlc3RPYmpJbnRlcm5hbDo6Y29udGVudERvY3VtZW50QXR0ckdldHRlciwgMCwg
MCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFV
TFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBv
biBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRlICdtdXRhYmxlUG9pbnQnIChUeXBlOiAn
YXR0cmlidXRlJyBFeHRBdHRyOiAnJykKKyAgICB7Im11dGFibGVQb2ludCIsIFRlc3RPYmpJbnRl
cm5hbDo6bXV0YWJsZVBvaW50QXR0ckdldHRlciwgVGVzdE9iakludGVybmFsOjptdXRhYmxlUG9p
bnRBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250
cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6
Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKKyAgICAvLyBBdHRyaWJ1dGUgJ2ltbXV0YWJs
ZVBvaW50JyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ0ltbXV0YWJsZScpCisgICAgeyJp
bW11dGFibGVQb2ludCIsIFRlc3RPYmpJbnRlcm5hbDo6aW1tdXRhYmxlUG9pbnRBdHRyR2V0dGVy
LCBUZXN0T2JqSW50ZXJuYWw6OmltbXV0YWJsZVBvaW50QXR0clNldHRlciwgMCAvKiBubyBkYXRh
ICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNf
Y2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAq
L30sCisgICAgLy8gQXR0cmlidXRlICdzdHJpY3RGbG9hdCcgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4
dEF0dHI6ICdTdHJpY3RUeXBlQ2hlY2tpbmcnKQorICAgIHsic3RyaWN0RmxvYXQiLCBUZXN0T2Jq
SW50ZXJuYWw6OnN0cmljdEZsb2F0QXR0ckdldHRlciwgVGVzdE9iakludGVybmFsOjpzdHJpY3RG
bG9hdEF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0Nv
bnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2
ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAogICAgIC8vIEF0dHJpYnV0ZSAnZGVzY3Jp
cHRpb24nIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKICAgICB7ImRl
c2NyaXB0aW9uIiwgVGVzdE9iakludGVybmFsOjpkZXNjcmlwdGlvbkF0dHJHZXR0ZXIsIDAsIDAg
Lyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxU
KSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24g
aW5zdGFuY2UgKi99LAogICAgIC8vIEF0dHJpYnV0ZSAnaWQnIChUeXBlOiAnYXR0cmlidXRlJyBF
eHRBdHRyOiAnJykKQEAgLTE0MTIsNiArMTYwNSwxMSBAQCBzdGF0aWMgY29uc3QgQmF0Y2hlZENh
bGxiYWNrIFRlc3RPYmpDYWxsCiAgICAgeyJjb25kaXRpb25hbE1ldGhvZDMiLCBUZXN0T2JqSW50
ZXJuYWw6OmNvbmRpdGlvbmFsTWV0aG9kM0NhbGxiYWNrfSwKICNlbmRpZgogICAgIHsib3Zlcmxv
YWRlZE1ldGhvZCIsIFRlc3RPYmpJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZENhbGxiYWNrfSwK
KyAgICB7ImdldFNWR0RvY3VtZW50IiwgVGVzdE9iakludGVybmFsOjpnZXRTVkdEb2N1bWVudENh
bGxiYWNrfSwKKyAgICB7Im11dGFibGVQb2ludEZ1bmN0aW9uIiwgVGVzdE9iakludGVybmFsOjpt
dXRhYmxlUG9pbnRGdW5jdGlvbkNhbGxiYWNrfSwKKyAgICB7ImltbXV0YWJsZVBvaW50RnVuY3Rp
b24iLCBUZXN0T2JqSW50ZXJuYWw6OmltbXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsYmFja30sCisg
ICAgeyJvcmFuZ2UiLCBUZXN0T2JqSW50ZXJuYWw6Om9yYW5nZUNhbGxiYWNrfSwKKyAgICB7InN0
cmljdEZ1bmN0aW9uIiwgVGVzdE9iakludGVybmFsOjpzdHJpY3RGdW5jdGlvbkNhbGxiYWNrfSwK
IH07CiAKIHN0YXRpYyBjb25zdCBCYXRjaGVkQ29uc3RhbnQgVGVzdE9iakNvbnN0c1tdID0gewpA
QCAtMTUzNCw2ICsxNzMyLDM2IEBAIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGEKICAgICAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoImVuYWJsZWRBdFJ1bnRp
bWVNZXRob2QxIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9iakludGVybmFsOjpl
bmFibGVkQXRSdW50aW1lTWV0aG9kMUNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwg
ZGVmYXVsdFNpZ25hdHVyZSkpOwogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpmZWF0
dXJlTmFtZUVuYWJsZWQoKSkKICAgICAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoImVu
YWJsZWRBdFJ1bnRpbWVNZXRob2QyIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9i
akludGVybmFsOjplbmFibGVkQXRSdW50aW1lTWV0aG9kMkNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKSwgZGVmYXVsdFNpZ25hdHVyZSkpOworCisgICAgLy8gQ3VzdG9tIFNpZ25hdHVy
ZSAnY29udmVydDEnCisgICAgY29uc3QgaW50IGNvbnZlcnQxQXJnYyA9IDE7CisgICAgdjg6Okhh
bmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29udmVydDFBcmd2W2NvbnZlcnQxQXJnY10gPSB7
IFY4YTo6R2V0UmF3VGVtcGxhdGUoKSB9OworICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4g
Y29udmVydDFTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgY29udmVydDFBcmdj
LCBjb252ZXJ0MUFyZ3YpOworICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjb252ZXJ0
MSIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6Y29udmVydDFD
YWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIGNvbnZlcnQxU2lnbmF0dXJlKSk7CisK
KyAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdjb252ZXJ0MicKKyAgICBjb25zdCBpbnQgY29udmVy
dDJBcmdjID0gMTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBjb252ZXJ0
MkFyZ3ZbY29udmVydDJBcmdjXSA9IHsgVjhiOjpHZXRSYXdUZW1wbGF0ZSgpIH07CisgICAgdjg6
OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBjb252ZXJ0MlNpZ25hdHVyZSA9IHY4OjpTaWduYXR1cmU6
Ok5ldyhkZXNjLCBjb252ZXJ0MkFyZ2MsIGNvbnZlcnQyQXJndik7CisgICAgcHJvdG8tPlNldCh2
ODo6U3RyaW5nOjpOZXcoImNvbnZlcnQyIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVz
dE9iakludGVybmFsOjpjb252ZXJ0MkNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwg
Y29udmVydDJTaWduYXR1cmUpKTsKKworICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ2NvbnZlcnQz
JworICAgIGNvbnN0IGludCBjb252ZXJ0M0FyZ2MgPSAxOworICAgIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IGNvbnZlcnQzQXJndltjb252ZXJ0M0FyZ2NdID0geyBWOGM6OkdldFJh
d1RlbXBsYXRlKCkgfTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IGNvbnZlcnQzU2ln
bmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIGNvbnZlcnQzQXJnYywgY29udmVydDNB
cmd2KTsKKyAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiY29udmVydDMiKSwgdjg6OkZ1
bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqSW50ZXJuYWw6OmNvbnZlcnQzQ2FsbGJhY2ssIHY4
OjpIYW5kbGU8djg6OlZhbHVlPigpLCBjb252ZXJ0M1NpZ25hdHVyZSkpOworCisgICAgLy8gQ3Vz
dG9tIFNpZ25hdHVyZSAnY29udmVydDQnCisgICAgY29uc3QgaW50IGNvbnZlcnQ0QXJnYyA9IDE7
CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29udmVydDRBcmd2W2NvbnZl
cnQ0QXJnY10gPSB7IFY4ZDo6R2V0UmF3VGVtcGxhdGUoKSB9OworICAgIHY4OjpIYW5kbGU8djg6
OlNpZ25hdHVyZT4gY29udmVydDRTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywg
Y29udmVydDRBcmdjLCBjb252ZXJ0NEFyZ3YpOworICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6
TmV3KCJjb252ZXJ0NCIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5h
bDo6Y29udmVydDRDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIGNvbnZlcnQ0U2ln
bmF0dXJlKSk7CisKKyAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdjb252ZXJ0NScKKyAgICBjb25z
dCBpbnQgY29udmVydDVBcmdjID0gMTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBjb252ZXJ0NUFyZ3ZbY29udmVydDVBcmdjXSA9IHsgVjhlOjpHZXRSYXdUZW1wbGF0ZSgp
IH07CisgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBjb252ZXJ0NVNpZ25hdHVyZSA9IHY4
OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBjb252ZXJ0NUFyZ2MsIGNvbnZlcnQ1QXJndik7CisgICAg
cHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoImNvbnZlcnQ1IiksIHY4OjpGdW5jdGlvblRlbXBs
YXRlOjpOZXcoVGVzdE9iakludGVybmFsOjpjb252ZXJ0NUNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKSwgY29udmVydDVTaWduYXR1cmUpKTsKICAgICBiYXRjaENvbmZpZ3VyZUNvbnN0
YW50cyhkZXNjLCBwcm90bywgVGVzdE9iakNvbnN0cywgV1RGX0FSUkFZX0xFTkdUSChUZXN0T2Jq
Q29uc3RzKSk7CiAKICAgICAvLyBDdXN0b20gdG9TdHJpbmcgdGVtcGxhdGUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVycmlkaW5nTmFt
ZUdldHRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkg
VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4VGVzdE92ZXJyaWRpbmdO
YW1lR2V0dGVyLmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUg
IlY4QmluZGluZ01hY3Jvcy5oIgorI2luY2x1ZGUgIlY4QmluZGluZ1N0YXRlLmgiCisjaW5jbHVk
ZSAiVjhET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKKyNpbmNs
dWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworV3JhcHBlclR5cGVJbmZvIFY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
OjppbmZvID0geyBWOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6R2V0VGVtcGxhdGUsIFY4VGVz
dE92ZXJyaWRpbmdOYW1lR2V0dGVyOjpkZXJlZk9iamVjdCwgMCwgMCB9OworCituYW1lc3BhY2Ug
VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVySW50ZXJuYWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gdm9pZCBWOF9VU0UoVCkgeyB9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYW5v
dGhlckZ1bmN0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJ
TkNfU1RBVFMoIkRPTS5UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuYW5vdGhlckZ1bmN0aW9uIik7
CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigi
Tm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworICAgIFRlc3RPdmVy
cmlkaW5nTmFtZUdldHRlciogaW1wID0gVjhUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OnRvTmF0
aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05f
QkxPQ0soVjhQYXJhbWV0ZXI8Piwgc3RyLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAw
LCBNaXNzaW5nSXNVbmRlZmluZWQpKTsKKyAgICBpbXAtPmFub3RoZXJGdW5jdGlvbihzdHIpOwor
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVySW50ZXJuYWwKKworc3RhdGljIGNvbnN0IEJhdGNoZWRD
YWxsYmFjayBUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJDYWxsYmFja3NbXSA9IHsKKyAgICB7ImFu
b3RoZXJGdW5jdGlvbiIsIFRlc3RPdmVycmlkaW5nTmFtZUdldHRlckludGVybmFsOjphbm90aGVy
RnVuY3Rpb25DYWxsYmFja30sCit9OworCitzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyVGVtcGxhdGUo
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MpCit7CisgICAgZGVzYy0+
UmVhZE9ubHlQcm90b3R5cGUoKTsKKworICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBkZWZh
dWx0U2lnbmF0dXJlOworICAgIGRlZmF1bHRTaWduYXR1cmUgPSBjb25maWd1cmVUZW1wbGF0ZShk
ZXNjLCAiVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyIiwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+KCksIFY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjppbnRlcm5hbEZpZWxk
Q291bnQsCisgICAgICAgIDAsIDAsCisgICAgICAgIFRlc3RPdmVycmlkaW5nTmFtZUdldHRlckNh
bGxiYWNrcywgV1RGX0FSUkFZX0xFTkdUSChUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJDYWxsYmFj
a3MpKTsKKyAgICBVTlVTRURfUEFSQU0oZGVmYXVsdFNpZ25hdHVyZSk7IC8vIEluIHNvbWUgY2Fz
ZXMsIGl0IHdpbGwgbm90IGJlIHVzZWQuCisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0
ZT4gaW5zdGFuY2UgPSBkZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCk7CisgICAgdjg6OkxvY2FsPHY4
OjpPYmplY3RUZW1wbGF0ZT4gcHJvdG8gPSBkZXNjLT5Qcm90b3R5cGVUZW1wbGF0ZSgpOworICAg
IFVOVVNFRF9QQVJBTShpbnN0YW5jZSk7IC8vIEluIHNvbWUgY2FzZXMsIGl0IHdpbGwgbm90IGJl
IHVzZWQuCisgICAgVU5VU0VEX1BBUkFNKHByb3RvKTsgLy8gSW4gc29tZSBjYXNlcywgaXQgd2ls
bCBub3QgYmUgdXNlZC4KKyAgICAKKyAgICBkZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldE5h
bWVkUHJvcGVydHlIYW5kbGVyKFY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjpuYW1lZFByb3Bl
cnR5R2V0dGVyLCAwLCAwLCAwLCAwKTsKKworICAgIC8vIEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0
ZQorICAgIGRlc2MtPlNldChnZXRUb1N0cmluZ05hbWUoKSwgZ2V0VG9TdHJpbmdUZW1wbGF0ZSgp
KTsKKyAgICByZXR1cm4gZGVzYzsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IFY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjpHZXRSYXdUZW1wbGF0ZSgpCit7Cisg
ICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0
YTo6Y3VycmVudCgpOworICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6
aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKKyAg
ICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCisgICAgICAgIHJl
dHVybiByZXN1bHQtPnNlY29uZDsKKworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
KyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVS
YXdUZW1wbGF0ZSgpOworICAgIGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuYWRkKCZpbmZvLCB0ZW1w
bCk7CisgICAgcmV0dXJuIHRlbXBsOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gVjhUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OkdldFRlbXBsYXRlKCkKK3sKKyAg
ICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRh
OjpjdXJyZW50KCk7CisgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjpp
dGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOworICAgIGlm
IChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+c2Vjb25kOworCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CisgICAgICAgIENvbmZp
Z3VyZVY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyVGVtcGxhdGUoR2V0UmF3VGVtcGxhdGUoKSk7
CisgICAgZGF0YS0+dGVtcGxhdGVNYXAoKS5hZGQoJmluZm8sIHRlbXBsKTsKKyAgICByZXR1cm4g
dGVtcGw7Cit9CisKK2Jvb2wgVjhUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6Okhhc0luc3RhbmNl
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gR2V0UmF3VGVtcGxh
dGUoKS0+SGFzSW5zdGFuY2UodmFsdWUpOworfQorCisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4g
VjhUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OndyYXBTbG93KFRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlciogaW1wbCkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7CisgICAg
VjhQcm94eSogcHJveHkgPSAwOworICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRp
YXRlVjhPYmplY3QocHJveHksICZpbmZvLCBpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworCisgICAgaW1wbC0+cmVmKCk7CisgICAgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRsZSA9IHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+OjpOZXcod3JhcHBlcik7CisKKyAgICBpZiAoIWhhc0RlcGVuZGVudExpZmV0aW1l
KQorICAgICAgICB3cmFwcGVySGFuZGxlLk1hcmtJbmRlcGVuZGVudCgpOworICAgIGdldERPTU9i
amVjdE1hcCgpLnNldChpbXBsLCB3cmFwcGVySGFuZGxlKTsKKyAgICByZXR1cm4gd3JhcHBlcjsK
K30KKwordm9pZCBWOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6ZGVyZWZPYmplY3Qodm9pZCog
b2JqZWN0KQoreworICAgIHN0YXRpY19jYXN0PFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcio+KG9i
amVjdCktPmRlcmVmKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLwor
CisjaWZuZGVmIFY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyX2gKKyNkZWZpbmUgVjhUZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXJfaAorCisjaW5jbHVkZSAiVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
LmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZv
LmgiCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBW
OFRlc3RPdmVycmlkaW5nTmFtZUdldHRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzRGVwZW5kZW50TGlmZXRpbWUgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBIYXNJbnN0
YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxhdGUoKTsKKyAgICBzdGF0aWMgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKCk7CisgICAgc3RhdGlj
IFRlc3RPdmVycmlkaW5nTmFtZUdldHRlciogdG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXIqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2
OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOworICAgIH0KKyAgICBpbmxpbmUgc3RhdGljIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqKTsKKyAgICBz
dGF0aWMgdm9pZCBkZXJlZk9iamVjdCh2b2lkKik7CisgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5m
byBpbmZvOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbmFtZWRQcm9wZXJ0eUdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4sIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mKTsKKyAg
ICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQgKyAwOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGV4aXN0aW5nV3JhcHBlcihUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqKTsKKworcHJpdmF0ZToK
KyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhUZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXIqKTsKK307CisKK0FMV0FZU19JTkxJTkUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBWOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6ZXhpc3RpbmdXcmFwcGVyKFRlc3RPdmVycmlk
aW5nTmFtZUdldHRlciogaW1wbCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0
KGltcGwpOworfQorCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyOjp3cmFwKFRlc3RPdmVycmlkaW5nTmFtZUdldHRlciogaW1wbCkKK3sKKyAgICAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZXhpc3RpbmdXcmFwcGVyKGltcGwpOwor
ICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBw
ZXI7CisgICAgcmV0dXJuIFY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjp3cmFwU2xvdyhpbXBs
KTsKK30KKworaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RPdmVycmlkaW5n
TmFtZUdldHRlciogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6
TnVsbCgpOworICAgIHJldHVybiBWOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6d3JhcChpbXBs
KTsKK30KK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0
T3ZlcnJpZGluZ05hbWVHZXR0ZXIgPiBpbXBsKQoreworICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0
KCkpOworfQorCit9CisKKyNlbmRpZiAvLyBWOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcl9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>