<?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>172619</bug_id>
          
          <creation_ts>2017-05-25 16:09:06 -0700</creation_ts>
          <short_desc>[WebIDL] Another bindings cleanup pass, this time focusing on attributes</short_desc>
          <delta_ts>2017-05-30 20:21:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1312939</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-25 16:09:06 -0700</bug_when>
    <thetext>[WebIDL] Another bindings cleanup pass, this time focusing on attributes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312943</commentid>
    <comment_count>1</comment_count>
      <attachid>311308</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-25 16:19:58 -0700</bug_when>
    <thetext>Created attachment 311308
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1313245</commentid>
    <comment_count>2</comment_count>
      <attachid>311308</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-26 14:23:17 -0700</bug_when>
    <thetext>Comment on attachment 311308
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1313251</commentid>
    <comment_count>3</comment_count>
      <attachid>311308</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-26 14:33:21 -0700</bug_when>
    <thetext>Comment on attachment 311308
Patch

Clearing flags on attachment: 311308

Committed r217507: &lt;http://trac.webkit.org/changeset/217507&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1313252</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-26 14:33:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314028</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-05-30 20:21:53 -0700</bug_when>
    <thetext>&lt;rdar://problem/32479729&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311308</attachid>
            <date>2017-05-25 16:19:58 -0700</date>
            <delta_ts>2017-05-26 14:33:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172619-20170525161957.patch</filename>
            <type>text/plain</type>
            <size>573463</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE3LTA1LTI1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYklETF0gQW5vdGhlciBiaW5kaW5n
cyBjbGVhbnVwIHBhc3MsIHRoaXMgdGltZSBmb2N1c2luZyBvbiBhdHRyaWJ1dGVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI2MTkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIE1vdmVkIGF0dHJpYnV0
ZSBnZXR0ZXIgLyBzZXR0ZXIgZ2VuZXJhdGlvbiBpbnRvIHRoZWlyIG93biBzdWJyb3V0aW5lcy4K
KyAgICAgICAgLSBBcyB3YXMgZG9uZSBmb3Igb3BlcmF0aW9ucywgbW92ZWQgdHJhbXBvbGluZSBm
dW5jdGlvbnMgZm9yIGF0dHJpYnV0ZXMKKyAgICAgICAgICBiZWxvdyB0aGVpciBpbXBsZW1lbnRh
dGlvbiBmdW5jdGlvbnMgdG8gYXZvaWQgdW5zZWVtbHkgZm9yd2FyZCBkZWNsYXJhdGlvbi4KKyAg
ICAgICAgLSBDaGFuZ2VkIHRvIHBsYWNlIHRoZSBnZXR0ZXIgYW5kIHNldHRlciBmb3IgYW4gYXR0
cmlidXRlIG5leHQgdG8gZWFjaCBvdGhlciwKKyAgICAgICAgICByYXRoZXIgdGhhbiBoYXZpbmcg
YWxsIHRoZSBnZXR0ZXJzIGFuZCB0aGVuIGFsbCB0aGUgc2V0dGVycy4KKyAgICAgICAgLSBNb3Zl
ZCBKU0Zvbzo6Z2V0Q29uc3RydWN0b3IgYW5kIEpTRm9vOjpnZXROYW1lZENvbnN0cnVjdG9yIHVw
IHRvIGJlIHdpdGggb3RoZXIKKyAgICAgICAgICBtZW1iZXIgZnVuY3Rpb25zLgorICAgICAgICAt
IEZpeCBhbiBpc3N1ZSB3aGVyZSB3ZSB3ZXJlIGdlbmVyYXRpbmcgYSBzZXRKU0Zvb0NvbnN0cnVj
dG9yIGZ1bmN0aW9uIGFuZCBub3QKKyAgICAgICAgICBpbnN0YWxsaW5nIGl0IGFueXdoZXJlLiBO
b3cgd2UgYWx3YXlzIGdlbmVyYXRlIGVpdGhlciBib3RoIHRoZSBnZXR0ZXIgYW5kIHNldHRlcgor
ICAgICAgICAgIG9yIG5laXRoZXIgZm9yIHRoZSBjb25zdHJ1Y3RvciBwcm9wZXJ0eS4gQWxzbyBt
b3ZlZCB0aGVpciBkZWZpbml0aW9uIHRvIGp1c3QgYWJvdmUKKyAgICAgICAgICBhbGwgdGhlIGF0
dHJpYnV0ZXMsIHJhdGhlciB0aGFuIHRoZSBvZGQgcGxhY2VtZW50cyBvZiBiZXR3ZWVuIHRoZSBn
ZXR0ZXJzIGFuZAorICAgICAgICAgIHNldHRlcnMgd2hpY2ggaXMgd2hlcmUgdGhleSBoYWQgYmVl
bi4KKyAgICAgICAgLSBNYWRlIEluc3RhbmNlTmVlZHNWaXNpdENoaWxkcmVuIGEgY29tcGxldGUg
YW5zd2VyLCByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHNvbWUKKyAgICAgICAgICBsb29wIG9mIHRo
ZSBhdHRyaWJ1dGVzIHRvIHVwZGF0ZSBuZWVkc1Zpc2l0Q2hpbGRyZW4gYml0LgorICAgICAgICAt
IE1vdmUgdXNlIG9mIHBhc3NpbmcgY29uZGl0aW9uYWxzIHdoZW4gYWRkaW5nIGhlYWRlcnMuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAg
KEluc3RhbmNlTmVlZHNWaXNpdENoaWxkcmVuKToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToK
KyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVBdHRy
aWJ1dGVHZXR0ZXJEZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQXR0cmlidXRlU2V0dGVy
RGVmaW5pdGlvbik6CisgICAgICAgIChOZWVkc0NvbnN0cnVjdG9yUHJvcGVydHkpOgorCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHA6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHA6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtlLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5j
cHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9N
SklULmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHA6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9u
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXQuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorICAg
ICAgICBVcGRhdGUgdGVzdCByZXN1bHRzLgorCiAyMDE3LTA1LTI1ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihyMjE1Njg2KTogVmlkZW9zIHNv
bWV0aW1lcyBkbyBub3QgbG9hZCBpbiBpQm9va3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMTc0NTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
d29ya2luZyBjb3B5KQpAQCAtMTE3OCwxMSArMTE3OCwxNyBAQCBzdWIgSW5zdGFuY2VPdmVycmlk
ZXNQdXREZWNsYXJhdGlvbgogc3ViIEluc3RhbmNlTmVlZHNWaXNpdENoaWxkcmVuCiB7CiAgICAg
bXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIHJldHVybiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn0KLSAgICAgICAgfHwgJGNvZGVHZW5lcmF0
b3ItPkluaGVyaXRzSW50ZXJmYWNlKCRpbnRlcmZhY2UsICJFdmVudFRhcmdldCIpCi0gICAgICAg
IHx8ICRpbnRlcmZhY2UtPnR5cGUtPm5hbWUgZXEgIkV2ZW50VGFyZ2V0IgotICAgICAgICB8fCAk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntSZXBvcnRFeHRyYU1lbW9yeUNvc3R9Ci0g
ICAgICAgIHx8IElzSlNCdWlsdGluQ29uc3RydWN0b3IoJGludGVyZmFjZSkKKyAgICAKKyAgICBm
b3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAg
ICAgcmV0dXJuIDEgaWYgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FjaGVkQXR0
cmlidXRlfTsKKyAgICB9CisKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntKU0N1c3RvbU1hcmtGdW5jdGlvbn07CisgICAgcmV0dXJuIDEgaWYgJGNvZGVH
ZW5lcmF0b3ItPkluaGVyaXRzSW50ZXJmYWNlKCRpbnRlcmZhY2UsICJFdmVudFRhcmdldCIpOwor
ICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2UtPnR5cGUtPm5hbWUgZXEgIkV2ZW50VGFyZ2V0IjsK
KyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntSZXBvcnRF
eHRyYU1lbW9yeUNvc3R9OworICAgIHJldHVybiAxIGlmIElzSlNCdWlsdGluQ29uc3RydWN0b3Io
JGludGVyZmFjZSk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHN1YiBJbnN0YW5jZU5lZWRzRXN0aW1h
dGVkU2l6ZQpAQCAtMTk3Nyw4ICsxOTgzLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAj
IEF0dHJpYnV0ZSBhbmQgZnVuY3Rpb24gZW51bXMKICAgICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAw
KSB7Ci0gICAgICAgIGZvcmVhY2ggKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKLSAgICAg
ICAgICAgIG15ICRhdHRyaWJ1dGUgPSAkXzsKKyAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRl
IChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CiAgICAgICAgICAgICAkbnVtQ3VzdG9tQXR0
cmlidXRlcysrIGlmIEhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0
ZXMpOwogICAgICAgICAgICAgJG51bUN1c3RvbUF0dHJpYnV0ZXMrKyBpZiBIYXNDdXN0b21TZXR0
ZXIoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKTsKICAgICAgICAgICAgIGlmICgkYXR0
cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWNoZWRBdHRyaWJ1dGV9KSB7CkBAIC0xOTg2
LDcgKzE5OTEsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9u
YWxTdHJpbmc7CiAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBtdXRh
YmxlIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV8iIC4gJGF0dHJpYnV0ZS0+bmFt
ZSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICAkbnVtQ2FjaGVkQXR0cmlidXRlcysrOwotICAg
ICAgICAgICAgICAgICRuZWVkc1Zpc2l0Q2hpbGRyZW4gPSAxOwogICAgICAgICAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICRoYXNET01KSVRBdHRyaWJ1dGVzID0gMSBpZiAkYXR0
cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRE9NSklUIn07CkBAIC0zMDY5LDE2ICszMDcz
LDE2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgIyAtIEFkZCBkZWZhdWx0IGhl
YWRlciB0ZW1wbGF0ZQogICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uQ29udGVudEhlYWRlcigkaW50ZXJmYWNlKSk7CiAKLSAgICAkaW1wbEluY2x1ZGVz
eyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKLSAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUV4Y2VwdGlv
bkhhbmRsaW5nLmgifSA9IDE7Ci0gICAgJGltcGxJbmNsdWRlc3siSlNET01XcmFwcGVyQ2FjaGUu
aCJ9ID0gMTsKLSAgICAkaW1wbEluY2x1ZGVzeyI8d3RmL0dldFB0ci5oPiJ9ID0gMTsKLSAgICAk
aW1wbEluY2x1ZGVzeyI8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPiJ9ID0gMSBpZiAkaW5k
ZXhlZEdldHRlck9wZXJhdGlvbjsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01CaW5kaW5n
LmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIik7
CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NV3JhcHBlckNhY2hlLmgiKTsKKyAgICBBZGRU
b0ltcGxJbmNsdWRlcygiPHd0Zi9HZXRQdHIuaD4iKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygi
PHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4iKSBpZiAkaW5kZXhlZEdldHRlck9wZXJhdGlv
bjsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01NYXBMaWtlLmgiKSBpZiAkaW50ZXJmYWNl
LT5tYXBMaWtlOworICAgIEFkZEpTQnVpbHRpbkluY2x1ZGVzSWZOZWVkZWQoJGludGVyZmFjZSk7
CiAKICAgICBteSAkaW1wbFR5cGUgPSBHZXRJbXBsQ2xhc3NOYW1lKCRpbnRlcmZhY2UpOwogCi0g
ICAgQWRkSlNCdWlsdGluSW5jbHVkZXNJZk5lZWRlZCgkaW50ZXJmYWNlKTsKLQogICAgIEBpbXBs
Q29udGVudCA9ICgpOwogCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbnVzaW5nIG5hbWVzcGFj
ZSBKU0M7XG5cbiIpOwpAQCAtMzE0Myw2ICszMTQ3LDE0IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgaWYgKCRudW1BdHRyaWJ1dGVzID4gMCB8fCBOZWVkc0NvbnN0cnVjdG9yUHJv
cGVydHkoJGludGVyZmFjZSkpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIvLyBBdHRy
aWJ1dGVzXG5cbiIpOwogCisgICAgICAgIGlmIChOZWVkc0NvbnN0cnVjdG9yUHJvcGVydHkoJGlu
dGVyZmFjZSkpIHsKKyAgICAgICAgICAgIG15ICRjb25zdHJ1Y3RvckdldHRlciA9ICJqcyIgLiAk
aW50ZXJmYWNlTmFtZSAuICJDb25zdHJ1Y3RvciI7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIkpTQzo6RW5jb2RlZEpTVmFsdWUgJHtjb25zdHJ1Y3RvckdldHRlcn0oSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7XG4iKTsKKwor
ICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9yU2V0dGVyID0gInNldEpTIiAuICRpbnRlcmZhY2VO
YW1lIC4gIkNvbnN0cnVjdG9yIjsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9v
bCAke2NvbnN0cnVjdG9yU2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpO1xuIik7CisgICAgICAgIH0KKwogICAgICAgICBmb3Jl
YWNoIG15ICRhdHRyaWJ1dGUgKEBhdHRyaWJ1dGVzKSB7CiAgICAgICAgICAgICBuZXh0IGlmICRh
dHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ZvcndhcmREZWNsYXJlSW5IZWFkZXJ9Owog
ICAgICAgICAgICAgbmV4dCBpZiBJc0pTQnVpbHRpbigkaW50ZXJmYWNlLCAkYXR0cmlidXRlKTsK
QEAgLTMxNTgsMTQgKzMxNzAsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRjb25kaXRpb25hbFN0cmlu
ZzsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChOZWVkc0NvbnN0cnVjdG9yUHJvcGVydHkoJGlu
dGVyZmFjZSkpIHsKLSAgICAgICAgICAgIG15ICRnZXR0ZXIgPSAianMiIC4gJGludGVyZmFjZU5h
bWUgLiAiQ29uc3RydWN0b3IiOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6
OkVuY29kZWRKU1ZhbHVlICR7Z2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTtcbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbXkg
JGNvbnN0cnVjdG9yRnVuY3Rpb25OYW1lID0gInNldEpTIiAuICRpbnRlcmZhY2VOYW1lIC4gIkNv
bnN0cnVjdG9yIjsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7Y29uc3RydWN0
b3JGdW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7XG4iKTsKLQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxu
Iik7CiAgICAgfQogCkBAIC0zNTA5LDYgKzM1MTMsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQogCisgICAg
IyBGaW5pc2ggQ3JlYXRpb24KICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIp
IHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbClcbiIpOwogICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwpAQCAtMzUyOCw3ICszNTMzLDEwIEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZiwgZ2xvYmFsT2JqZWN0KCktPm9iamVj
dFByb3RvVmFsdWVPZkZ1bmN0aW9uKCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVt
KTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnRvUHJpbWl0aXZlU3ltYm9sLCBqc1VuZGVmaW5lZCgpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7XG4iKTsKICAgICB9Ci0gICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgc3luY2hyb25pemVCYWNraW5nTWFwKCpnbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpLCAqZ2xvYmFsT2JqZWN0KCksICp0aGlzKTtcbiIpIGlmICRpbnRlcmZhY2UtPm1hcExp
a2U7CisKKyAgICBpZiAoJGludGVyZmFjZS0+bWFwTGlrZSkgeworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBzeW5jaHJvbml6ZUJhY2tpbmdNYXAoKmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCksICpnbG9iYWxPYmplY3QoKSwgKnRoaXMpO1xuIik7CisgICAgfQogCiAgICAgIyBT
dXBwb3J0IGZvciBSdW50aW1lRW5hYmxlZCBhdHRyaWJ1dGVzIG9uIGluc3RhbmNlcy4KICAgICBm
b3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKQEAgLTM2
MDgsNiArMzYxNiwyMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQogCisgICAgaWYgKCEkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntOb0ludGVyZmFjZU9iamVjdH0pIHsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJKU1ZhbHVlICR7Y2xhc3NOYW1lfTo6Z2V0Q29uc3RydWN0b3IoVk0mIHZt
LCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiBnZXRET01Db25zdHJ1Y3Rvcjwke2NsYXNzTmFtZX1Db25zdHJ1Y3Rvcj4odm0sICpqc0Nh
c3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTtcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+e05hbWVkQ29uc3RydWN0b3J9KSB7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUgJHtjbGFzc05hbWV9OjpnZXROYW1lZENvbnN0cnVj
dG9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIpOworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rvcjwke2NsYXNzTmFtZX1OYW1lZENvbnN0
cnVjdG9yPih2bSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAgIH0K
KyAgICB9CisKICAgICBpZiAoISRoYXNQYXJlbnQpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbClcbiIpOwog
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwpAQCAtMzYyOSw3ICszNjUxLDYgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2Ny
aXB0b3J9KSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVHZXRPd25Q
cm9wZXJ0eVNsb3RCb2R5QnlJbmRleCgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkaW5kZXhlZEdl
dHRlck9wZXJhdGlvbiwgJG5hbWVkR2V0dGVyT3BlcmF0aW9uKSk7CiAgICAgICAgIH0KLQogICAg
IH0KIAogCkBAIC0zNjg0LDQwMCArMzcwNSw1NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQogCi0gICAgJG51
bUF0dHJpYnV0ZXMgPSAkbnVtQXR0cmlidXRlcyArIDEgaWYgTmVlZHNDb25zdHJ1Y3RvclByb3Bl
cnR5KCRpbnRlcmZhY2UpOwotICAgIGlmICgkbnVtQXR0cmlidXRlcyA+IDApIHsKLSAgICAgICAg
Zm9yZWFjaCBteSAkYXR0cmlidXRlIChAYXR0cmlidXRlcykgewotICAgICAgICAgICAgbmV4dCBp
ZiBJc0pTQnVpbHRpbigkaW50ZXJmYWNlLCAkYXR0cmlidXRlKTsKLQotICAgICAgICAgICAgbXkg
JG5hbWUgPSAkYXR0cmlidXRlLT5uYW1lOwotICAgICAgICAgICAgbXkgJHR5cGUgPSAkYXR0cmli
dXRlLT50eXBlOwotICAgICAgICAgICAgbXkgJGdldEZ1bmN0aW9uTmFtZSA9IEdldEF0dHJpYnV0
ZUdldHRlck5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGF0dHJpYnV0ZSk7Ci0gICAgICAg
ICAgICBteSAkaW1wbEdldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2Zp
cnN0KCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxlbWVudGVkQXN9IHx8ICRu
YW1lKTsKLQotICAgICAgICAgICAgbXkgJGNvbmRpdGlvbmFsID0gJGF0dHJpYnV0ZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Q29uZGl0aW9uYWx9OwotICAgICAgICAgICAgaWYgKCRjb25kaXRpb25h
bCkgewotICAgICAgICAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJh
dG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nRnJvbUF0dHJpYnV0ZVZhbHVlKCRjb25kaXRp
b25hbCk7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjaWYgJHtjb25kaXRp
b25hbFN0cmluZ31cbiIpOzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCEkYXR0
cmlidXRlLT5pc1N0YXRpYyB8fCAkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclR5cGUoJHR5
cGUpKSB7Ci0gICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NQXR0cmlidXRl
LmgiLCAkY29uZGl0aW9uYWwpOwotCi0gICAgICAgICAgICAgICAgbXkgJHRlbXBsYXRlUGFyYW1l
dGVycyA9ICIke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIiOwotICAgICAgICAgICAgICAgIGlmICgk
YXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntMZW5pZW50VGhpc30pIHsKLSAgICAgICAg
ICAgICAgICAgICAgJHRlbXBsYXRlUGFyYW1ldGVycyAuPSAiLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6UmV0dXJuRWFybHkiOwotICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJh
dG9yLT5Jc1Byb21pc2VUeXBlKCRhdHRyaWJ1dGUtPnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICR0ZW1wbGF0ZVBhcmFtZXRlcnMgLj0gIiwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJl
amVjdFByb21pc2UiOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdl
dHRlcihFeGVjU3RhdGUmLCAke2NsYXNzTmFtZX0mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTtc
blxuIik7Ci0KLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1Zh
bHVlICR7Z2V0RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTwke2NsYXNzTmFtZX0+OjpnZXQ8JHt0ZW1wbGF0ZVBhcmFtZXRl
cnN9Pigqc3RhdGUsIHRoaXNWYWx1ZSwgXCIkbmFtZVwiKTtcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKLQotICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAic3RhdGljIGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCAke2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTtcbiIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNWYWx1ZSAke2dldEZ1bmN0aW9u
TmFtZX1HZXR0ZXIoRXhlY1N0YXRlJik7XG5cbiIpOwotCi0gICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSAke2dldEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOwotICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgQVNTRVJUKHN0YXRlKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoJHtnZXRGdW5jdGlvbk5h
bWV9R2V0dGVyKCpzdGF0ZSkpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9XG5cbiIpOwotCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0
aWMgaW5saW5lIEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTtcbiIpOwotCi0gICAgICAgICAgICAjIEdsb2JhbCBjb25zdHJ1Y3RvcnMgY2Fu
IGJlIGRpc2FibGVkIGF0IHJ1bnRpbWUuCi0gICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PklzQ29uc3RydWN0b3JUeXBlKCR0eXBlKSkgewotICAgICAgICAgICAgICAgIGlmICgkYXR0cmli
dXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntFbmFibGVkQnlTZXR0aW5nfSkgewotICAgICAgICAg
ICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRnJhbWUuaCIsICRjb25kaXRpb25hbCk7Ci0g
ICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTZXR0aW5ncy5oIiwgJGNvbmRp
dGlvbmFsKTsKLSAgICAgICAgICAgICAgICAgICAgbXkgJGVuYWJsZUZ1bmN0aW9uID0gVG9NZXRo
b2ROYW1lKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0VuYWJsZWRCeVNldHRpbmd9
KSAuICJFbmFibGVkIjsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0LndyYXBwZWQoKS5mcmFtZSgpKSlcbiIpOwotICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgU2V0dGluZ3MmIHNldHRpbmdzID0gdGhpc09iamVjdC53cmFwcGVkKCkuZnJhbWUoKS0+c2V0
dGluZ3MoKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoIXNldHRpbmdzLiRlbmFibGVGdW5jdGlvbigpKVxuIik7Ci0gICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTtcbiIp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgJG5lZWRz
VmlzaXRDaGlsZHJlbiA9IDEgaWYgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2Fj
aGVkQXR0cmlidXRlfTsKLQotICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0NoZWNrU2VjdXJpdHl9ICYmCi0gICAgICAgICAgICAgICAgISRhdHRyaWJ1dGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hlY2tTZWN1cml0eX0gJiYKLSAgICAgICAgICAg
ICAgICAhJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RG9Ob3RDaGVja1NlY3VyaXR5
T25HZXR0ZXJ9KSB7Ci0gICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NQmlu
ZGluZ1NlY3VyaXR5LmgiLCAkY29uZGl0aW9uYWwpOwotICAgICAgICAgICAgICAgIGlmICgkaW50
ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdygmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5RXJy
b3IpKVxuIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93
QWNjZXNzVG9GcmFtZSgmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLmZyYW1lKCksIFRocm93
U2VjdXJpdHlFcnJvcikpXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChIYXNDdXN0b21HZXR0ZXIoJGF0dHJpYnV0
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiB0aGlzT2JqZWN0LiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKHN0YXRl
KTtcbiIpOwotICAgICAgICAgICAgfSBlbHNpZiAoJHR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxl
ciIpIHsKLSAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJFdmVudE5hbWVzLmgifSA9IDE7
Ci0gICAgICAgICAgICAgICAgbXkgJGdldHRlciA9ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e1dpbmRvd0V2ZW50SGFuZGxlcn0gPyAid2luZG93RXZlbnRIYW5kbGVyQXR0cmlidXRl
IgotICAgICAgICAgICAgICAgICAgICA6ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0RvY3VtZW50RXZlbnRIYW5kbGVyfSA/ICJkb2N1bWVudEV2ZW50SGFuZGxlckF0dHJpYnV0ZSIK
LSAgICAgICAgICAgICAgICAgICAgOiAiZXZlbnRIYW5kbGVyQXR0cmlidXRlIjsKLSAgICAgICAg
ICAgICAgICBteSAkZXZlbnROYW1lID0gRXZlbnRIYW5kbGVyQXR0cmlidXRlRXZlbnROYW1lKCRh
dHRyaWJ1dGUpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biAkZ2V0dGVyKHRoaXNPYmplY3Qud3JhcHBlZCgpLCAkZXZlbnROYW1lLCB3b3JsZEZvckRPTU9i
amVjdCgmdGhpc09iamVjdCkpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2lmICgkY29kZUdlbmVy
YXRvci0+SXNDb25zdHJ1Y3RvclR5cGUoJGF0dHJpYnV0ZS0+dHlwZSkpIHsKLSAgICAgICAgICAg
ICAgICBteSAkY29uc3RydWN0b3JUeXBlID0gJGF0dHJpYnV0ZS0+dHlwZS0+bmFtZTsKLSAgICAg
ICAgICAgICAgICAkY29uc3RydWN0b3JUeXBlID1+IHMvQ29uc3RydWN0b3IkLy87Ci0gICAgICAg
ICAgICAgICAgIyBXaGVuIENvbnN0cnVjdG9yIGF0dHJpYnV0ZSBpcyB1c2VkIGJ5IERPTVdpbmRv
dy5pZGwsIGl0J3MgY29ycmVjdCB0byBwYXNzIHRoaXNPYmplY3QgYXMgdGhlIGdsb2JhbCBvYmpl
Y3QKLSAgICAgICAgICAgICAgICAjIFdoZW4gSlNET01XcmFwcGVycyBoYXZlIGEgYmFjay1wb2lu
dGVyIHRvIHRoZSBnbG9iYWxPYmplY3Qgd2UgY2FuIHBhc3MgdGhpc09iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCkKLSAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIp
IHsKLSAgICAgICAgICAgICAgICAgICAgbXkgJG5hbWVkID0gKCRjb25zdHJ1Y3RvclR5cGUgPX4g
L05hbWVkJC8pID8gIk5hbWVkIiA6ICIiOwotICAgICAgICAgICAgICAgICAgICAkY29uc3RydWN0
b3JUeXBlID1+IHMvTmFtZWQkLy87Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiBKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0JHtuYW1lZH1D
b25zdHJ1Y3RvcihzdGF0ZS52bSgpLCAmdGhpc09iamVjdCk7XG4iKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMiIC4g
JGNvbnN0cnVjdG9yVHlwZSAuICIuaCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKUyIgLiAkY29uc3RydWN0b3JUeXBl
IC4gIjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7XG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWNoZWRBdHRy
aWJ1dGV9KSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
IChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC5tXyIgLiAkYXR0cmlidXRlLT5uYW1l
IC4gIi5nZXQoKSlcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuIik7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgbXkgQGNhbGxXaXRoQXJncyA9IEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1Jl
ZmVyZW5jZXMoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbFdpdGh9LCBcQGlt
cGxDb250ZW50LCAianNVbmRlZmluZWQoKSIpOwotCi0gICAgICAgICAgICAgICAgbXkgKCRmdW5j
dGlvbk5hbWUsIEBhcmd1bWVudHMpID0gJGNvZGVHZW5lcmF0b3ItPkdldHRlckV4cHJlc3Npb24o
XCVpbXBsSW5jbHVkZXMsICRpbnRlcmZhY2VOYW1lLCAkYXR0cmlidXRlKTsKLSAgICAgICAgICAg
ICAgICBteSAkaW1wbGVtZW50ZWRCeSA9ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0ltcGxlbWVudGVkQnl9OwotICAgICAgICAgICAgICAgIGlmICgkaW1wbGVtZW50ZWRCeSkgewot
ICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIke2ltcGxlbWVudGVkQnl9LmgifSA9
IDE7Ci0gICAgICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiV2ViQ29yZTo6JHtpbXBs
ZW1lbnRlZEJ5fTo6JHtmdW5jdGlvbk5hbWV9IjsKLSAgICAgICAgICAgICAgICAgICAgdW5zaGlm
dChAYXJndW1lbnRzLCAiaW1wbCIpIGlmICEkYXR0cmlidXRlLT5pc1N0YXRpYzsKLSAgICAgICAg
ICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5pc1N0YXRpYykgewotICAgICAgICAgICAgICAg
ICAgICAkZnVuY3Rpb25OYW1lID0gIiR7aW50ZXJmYWNlTmFtZX06OiR7ZnVuY3Rpb25OYW1lfSI7
Ci0gICAgICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+aXNNYXBMaWtlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG15ICR1Y1Byb3BlcnR5TmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS191
Y2ZpcnN0KCRmdW5jdGlvbk5hbWUpOwotICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb25OYW1l
ID0gImZvcndhcmQiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGZ1bmN0aW9uTmFtZSkg
LiAiVG9NYXBMaWtlIjsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAic3Rh
dGUiKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAidGhpc09iamVjdCIp
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICRmdW5jdGlv
bk5hbWUgPSAiaW1wbC4ke2Z1bmN0aW9uTmFtZX0iOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywgQGNhbGxXaXRoQXJncyk7Ci0gICAgICAg
ICAgICAgICAgbXkgJGpzVHlwZSA9IE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUmVmZXJlbmNlcygkYXR0
cmlidXRlLCAkaW50ZXJmYWNlLCAiJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1
bWVudHMpIC4gIikiLCAiKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkiKTsKLSAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7XG4iKSB1bmxlc3MgJGF0dHJpYnV0ZS0+aXNTdGF0aWMgb3IgJGF0dHJpYnV0ZS0+aXNN
YXBMaWtlOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUg
cmVzdWx0ID0gJGpzVHlwZTtcbiIpOwotCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgdGhpc09iamVjdC5tXyIgLiAkYXR0cmlidXRlLT5uYW1lIC4gIi5zZXQoc3RhdGUu
dm0oKSwgJnRoaXNPYmplY3QsIHJlc3VsdCk7XG4iKSBpZiAkYXR0cmlidXRlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntDYWNoZWRBdHRyaWJ1dGV9OwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotCi0gICAgICAgICAgICBpZiAoJGF0
dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRPTUpJVCJ9KSB7Ci0gICAgICAgICAgICAg
ICAgYXNzZXJ0KCJPbmx5IERPTUpJVD1HZXR0ZXIgaXMgc3VwcG9ydGVkIGZvciBhdHRyaWJ1dGVz
IikgdW5sZXNzICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRhdHRy
aWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RPTUpJVH0sICJHZXR0ZXIiKTsKLQotICAgICAg
ICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8d3RmL05ldmVyRGVzdHJveWVkLmg+IiwgJGNv
bmRpdGlvbmFsKTsKLSAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSklUSURM
VHlwZUZpbHRlci5oIiwgJGNvbmRpdGlvbmFsKTsKLQotICAgICAgICAgICAgICAgIG15ICRnZW5l
cmF0b3JOYW1lID0gJGludGVyZmFjZS0+dHlwZS0+bmFtZSAuICRjb2RlR2VuZXJhdG9yLT5XS191
Y2ZpcnN0KCRhdHRyaWJ1dGUtPm5hbWUpOwotICAgICAgICAgICAgICAgIG15ICRkb21KSVRDbGFz
c05hbWUgPSAkZ2VuZXJhdG9yTmFtZSAuICJET01KSVQiOwotICAgICAgICAgICAgICAgIG15ICRn
ZXR0ZXIgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRnZW5lcmF0b3JOYW1l
LCAkYXR0cmlidXRlKTsKLSAgICAgICAgICAgICAgICBteSAkc2V0dGVyID0gSXNSZWFkb25seSgk
YXR0cmlidXRlKSA/ICJudWxscHRyIiA6IEdldEF0dHJpYnV0ZVNldHRlck5hbWUoJGludGVyZmFj
ZSwgJGdlbmVyYXRvck5hbWUsICRhdHRyaWJ1dGUpOwotICAgICAgICAgICAgICAgIG15ICRyZXN1
bHRUeXBlID0gR2V0UmVzdWx0VHlwZUZpbHRlcigkaW50ZXJmYWNlLCAkYXR0cmlidXRlLT50eXBl
KTsKLQotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtkb21KSVRDbGFzc05h
bWV9Ojoke2RvbUpJVENsYXNzTmFtZX0oKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgOiBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKCRnZXR0ZXIsICRzZXR0
ZXIsICR7Y2xhc3NOYW1lfTo6aW5mbygpLCAkcmVzdWx0VHlwZSlcbiIpOwotICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ9XG5cbiIpOwotCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTZXR0ZXJGb3IiIC4gJGdl
bmVyYXRvck5hbWUgLiAiKClcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPCR7ZG9tSklUQ2xhc3NOYW1lfT4gY29tcGlsZXI7XG4iKTsKLSAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJmNvbXBpbGVyLmdldCgp
O1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuXG4i
KSBpZiAkY29uZGl0aW9uYWw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoTmVlZHNDb25zdHJ1
Y3RvclByb3BlcnR5KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgICAgICBteSAkY29uc3RydWN0b3JG
dW5jdGlvbk5hbWUgPSAianMiIC4gJGludGVyZmFjZU5hbWUgLiAiQ29uc3RydWN0b3IiOworICAg
IGlmIChOZWVkc0NvbnN0cnVjdG9yUHJvcGVydHkoJGludGVyZmFjZSkpIHsKKyAgICAgICAgbXkg
JGNvbnN0cnVjdG9yR2V0dGVyID0gImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVjdG9y
IjsKIAotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSAke2Nv
bnN0cnVjdG9yRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTtcbiIpOwotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9UHJvdG90eXBlKiBkb21PYmpl
Y3QgPSBqc0R5bmFtaWNEb3duY2FzdDwke2NsYXNzTmFtZX1Qcm90b3R5cGUqPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpXG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1
ZSAke2NvbnN0cnVjdG9yR2V0dGVyfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDwke2NsYXNzTmFt
ZX1Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSlcbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpO1xuIik7CiAKLSAgICAgICAgICAgIGlmICghJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Tm9JbnRlcmZhY2VPYmplY3R9KSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgk
e2NsYXNzTmFtZX06OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2Jh
bE9iamVjdCgpKSk7XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvciA9ICR7Y2xhc3NOYW1l
fUNvbnN0cnVjdG9yOjpjcmVhdGUoc3RhdGUtPnZtKCksICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUoc3RhdGUtPnZtKCksICpkb21PYmplY3QtPmdsb2JhbE9iamVjdCgp
LCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSksICpqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKLSAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAvLyBTaGFkb3dpbmcgY29uc3Ry
dWN0b3IgcHJvcGVydHkgdG8gZW5zdXJlIHJldXNpbmcgdGhlIHNhbWUgY29uc3RydWN0b3Igb2Jq
ZWN0XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBkb21PYmpl
Y3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgY29uc3RydWN0b3IsIERvbnRFbnVtIHwgUmVhZE9ubHkpO1xuIik7Ci0gICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25z
dHJ1Y3Rvcik7XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKKyAgICAgICAgaWYgKCEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntOb0ludGVyZmFjZU9iamVjdH0pIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoJHtjbGFzc05hbWV9OjpnZXRDb25zdHJ1Y3Rv
cihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpO1xuIik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIGNv
bnN0cnVjdG9yID0gJHtjbGFzc05hbWV9Q29uc3RydWN0b3I6OmNyZWF0ZShzdGF0ZS0+dm0oKSwg
JHtjbGFzc05hbWV9Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShzdGF0ZS0+dm0oKSwgKnBy
b3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCktPm9iamVj
dFByb3RvdHlwZSgpKSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCkpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
Ly8gU2hhZG93aW5nIGNvbnN0cnVjdG9yIHByb3BlcnR5IHRvIGVuc3VyZSByZXVzaW5nIHRoZSBz
YW1lIGNvbnN0cnVjdG9yIG9iamVjdFxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5
TmFtZXMoKS5jb25zdHJ1Y3RvciwgY29uc3RydWN0b3IsIERvbnRFbnVtIHwgUmVhZE9ubHkpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNvbnN0cnVjdG9yKTtcbiIpOwogICAgICAgICB9CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAifVxuXG4iKTsKIAotICAgICAgICBteSAkY29uc3RydWN0b3JGdW5jdGlvbk5hbWUg
PSAic2V0SlMiIC4gJGludGVyZmFjZU5hbWUgLiAiQ29uc3RydWN0b3IiOworICAgICAgICBteSAk
Y29uc3RydWN0b3JTZXR0ZXIgPSAic2V0SlMiIC4gJGludGVyZmFjZU5hbWUgLiAiQ29uc3RydWN0
b3IiOwogCi0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke2NvbnN0cnVjdG9yRnVu
Y3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSlcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgImJvb2wgJHtjb25zdHJ1Y3RvclNldHRlcn0oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpXG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7XG4iKTsK
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICR7Y2xhc3NOYW1lfVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8
JHtjbGFzc05hbWV9UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTtc
biIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWRvbU9i
amVjdCkpIHtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDwke2NsYXNzTmFtZX1Qcm90b3R5cGUqPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkge1xuIik7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTtc
biIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xu
Iik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwotCiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
XG4iKTsKLQotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZG9tT2JqZWN0
LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIHZhbHVlKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4g
cHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTtcbiIpOwogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7Ci0gICAgfQotCi0gICAgZm9yZWFjaCBteSAk
YXR0cmlidXRlIChAYXR0cmlidXRlcykgewotICAgICAgICBpZiAoIUlzUmVhZG9ubHkoJGF0dHJp
YnV0ZSkpIHsKLSAgICAgICAgICAgIG5leHQgaWYgSXNKU0J1aWx0aW4oJGludGVyZmFjZSwgJGF0
dHJpYnV0ZSk7Ci0KLSAgICAgICAgICAgIG15ICRuYW1lID0gJGF0dHJpYnV0ZS0+bmFtZTsKLSAg
ICAgICAgICAgIG15ICR0eXBlID0gJGF0dHJpYnV0ZS0+dHlwZTsKLSAgICAgICAgICAgIG15ICRw
dXRGdW5jdGlvbk5hbWUgPSBHZXRBdHRyaWJ1dGVTZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRjbGFz
c05hbWUsICRhdHRyaWJ1dGUpOwotICAgICAgICAgICAgbXkgJGltcGxTZXR0ZXJGdW5jdGlvbk5h
bWUgPSAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkbmFtZSk7Ci0KLSAgICAgICAgICAgIG15
ICRhdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNv
bmRpdGlvbmFsU3RyaW5nKCRhdHRyaWJ1dGUpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIjaWYgJHthdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRhdHRyaWJ1dGVD
b25kaXRpb25hbFN0cmluZzsKLQotICAgICAgICAgICAgaWYgKCEkYXR0cmlidXRlLT5pc1N0YXRp
YykgewotICAgICAgICAgICAgICAgIG15ICRzZXR0ZXJGdW5jdGlvbiA9ICIke3B1dEZ1bmN0aW9u
TmFtZX1GdW5jdGlvbiI7Ci0gICAgICAgICAgICAgICAgbXkgJHRlbXBsYXRlUGFyYW1ldGVycyA9
ICRzZXR0ZXJGdW5jdGlvbjsKLSAgICAgICAgICAgICAgICAkdGVtcGxhdGVQYXJhbWV0ZXJzIC49
ICIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZXR1cm5FYXJseSIgaWYgJGF0dHJpYnV0ZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TGVuaWVudFRoaXN9OwotCi0gICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIGJvb2wgJHtzZXR0ZXJGdW5jdGlvbn0oRXhl
Y1N0YXRlJiwgJHtjbGFzc05hbWV9JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpO1xuXG4iKTsKLQot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke3B1dEZ1bmN0aW9uTmFt
ZX0oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8JHtjbGFzc05hbWV9Pjo6c2V0PCR7dGVtcGxhdGVQYXJhbWV0ZXJzfT4o
KnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgXCIkbmFtZVwiKTtcbiIpOwotICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKLQotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBib29sICR7c2V0dGVyRnVuY3Rpb259
KEV4ZWNTdGF0ZSYgc3RhdGUsICR7Y2xhc3NOYW1lfSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSlcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtwdXRG
dW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGVQb2ludGVyLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBBU1NFUlQoc3RhdGVQb2ludGVyKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGF1dG8mIHN0YXRlID0gKnN0YXRlUG9pbnRlcjtcbiIpOwotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7XG4iKTsK
LSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NFUmVhY3Rpb25zfSkg
ewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEN1c3RvbUVsZW1lbnRS
ZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrO1xuIik7Ci0gICAgICAgICAg
ICAgICAgJGltcGxJbmNsdWRlc3siQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCJ9ID0gMTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0NoZWNrU2VjdXJpdHl9ICYmICEkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntEb05vdENoZWNrU2VjdXJpdHl9ICYmICEkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntEb05vdENoZWNrU2VjdXJpdHlPblNldHRlcn0pIHsKLSAgICAgICAgICAgICAgICBBZGRU
b0ltcGxJbmNsdWRlcygiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIpOwotICAgICAgICAgICAgICAg
IGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewotICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxs
b3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBUaHJvd1Nl
Y3VyaXR5RXJyb3IpKVxuIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLmZyYW1l
KCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwot
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoSGFzQ3VzdG9tU2V0dGVyKCRhdHRyaWJ1
dGUtPmV4dGVuZGVkQXR0cmlidXRlcykpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICB0aGlzT2JqZWN0LnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKHN0YXRlLCB2
YWx1ZSk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gdHJ1ZTtcbiIpOwotICAgICAgICAgICAgfSBlbHNpZiAoJHR5cGUtPm5hbWUgZXEgIkV2ZW50
SGFuZGxlciIpIHsKLSAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0V2ZW50TGlzdGVu
ZXIuaCJ9ID0gMTsKLSAgICAgICAgICAgICAgICBteSAkZXZlbnROYW1lID0gRXZlbnRIYW5kbGVy
QXR0cmlidXRlRXZlbnROYW1lKCRhdHRyaWJ1dGUpOwotICAgICAgICAgICAgICAgICMgRklYTUU6
IEZpbmQgYSB3YXkgdG8gZG8gdGhpcyBzcGVjaWFsIGNhc2Ugd2l0aG91dCBoYXJkY29kaW5nIHRo
ZSBjbGFzcyBhbmQgYXR0cmlidXRlIG5hbWVzIGhlcmUuCi0gICAgICAgICAgICAgICAgaWYgKCgo
JGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIG9yICgkaW50ZXJmYWNlTmFtZSBlcSAiV29y
a2VyR2xvYmFsU2NvcGUiKSkgYW5kICRuYW1lIGVxICJvbmVycm9yIikgewotICAgICAgICAgICAg
ICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0Vycm9ySGFuZGxlci5oIn0gPSAxOwotICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0aGlzT2JqZWN0LndyYXBwZWQoKS5z
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKCRldmVudE5hbWUsIGNyZWF0ZUpTRXJyb3JIYW5kbGVy
KCZzdGF0ZSwgdmFsdWUsICZ0aGlzT2JqZWN0KSwgd29ybGRGb3JET01PYmplY3QoJnRoaXNPYmpl
Y3QpKTtcbiIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICRpbXBsSW5jbHVkZXN7IkpTRXZlbnRMaXN0ZW5lci5oIn0gPSAxOwotICAgICAgICAgICAgICAg
ICAgICBteSAkc2V0dGVyID0gJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57V2luZG93
RXZlbnRIYW5kbGVyfSA/ICJzZXRXaW5kb3dFdmVudEhhbmRsZXJBdHRyaWJ1dGUiCi0gICAgICAg
ICAgICAgICAgICAgICAgICA6ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvY3Vt
ZW50RXZlbnRIYW5kbGVyfSA/ICJzZXREb2N1bWVudEV2ZW50SGFuZGxlckF0dHJpYnV0ZSIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIDogInNldEV2ZW50SGFuZGxlckF0dHJpYnV0ZSI7Ci0gICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzZXR0ZXIoc3RhdGUsIHRo
aXNPYmplY3QsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCAkZXZlbnROYW1lLCB2YWx1ZSk7XG4iKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuIHRydWU7XG4iKTsKLSAgICAgICAgICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9y
LT5Jc0NvbnN0cnVjdG9yVHlwZSgkdHlwZSkpIHsKLSAgICAgICAgICAgICAgICBteSAkY29uc3Ry
dWN0b3JUeXBlID0gJHR5cGUtPm5hbWU7Ci0gICAgICAgICAgICAgICAgJGNvbnN0cnVjdG9yVHlw
ZSA9fiBzL0NvbnN0cnVjdG9yJC8vOwotICAgICAgICAgICAgICAgICMgJGNvbnN0cnVjdG9yVHlw
ZSB+PSAvQ29uc3RydWN0b3IkLyBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBOYW1lZENvbnN0cnVjdG9y
LgotICAgICAgICAgICAgICAgICMgV2UgZG8gbm90IGdlbmVyYXRlIHRoZSBoZWFkZXIgZmlsZSBm
b3IgTmFtZWRDb25zdHJ1Y3RvciBvZiBjbGFzcyBYWFhYLAotICAgICAgICAgICAgICAgICMgc2lu
Y2Ugd2UgZ2VuZXJhdGUgdGhlIE5hbWVkQ29uc3RydWN0b3IgZGVjbGFyYXRpb24gaW50byB0aGUg
aGVhZGVyIGZpbGUgb2YgY2xhc3MgWFhYWC4KLSAgICAgICAgICAgICAgICBpZiAoJGNvbnN0cnVj
dG9yVHlwZSBuZSAiYW55IiBhbmQgJGNvbnN0cnVjdG9yVHlwZSAhfiAvTmFtZWQkLykgewotICAg
ICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMiIC4gJGNvbnN0cnVjdG9yVHlw
ZSAuICIuaCIsICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NvbmRpdGlvbmFsfSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLlxuIik7Ci0gICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBcIiRuYW1lXCIpLCB2
YWx1ZSk7XG4iKTsKLSAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e1JlcGxhY2VhYmxlfSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIHByb3BlcnR5LlxuIik7Ci0gICAgICAg
ICAgICAgICAgaWYgKEF0dHJpYnV0ZVNob3VsZEJlT25JbnN0YW5jZSgkaW50ZXJmYWNlLCAkYXR0
cmlidXRlKSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXR1cm4gcmVwbGFjZVN0YXRpY1Byb3BlcnR5U2xvdChzdGF0ZS52bSgpLCAmdGhpc09iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIFwiJG5hbWVcIiksIHZhbHVlKTtcbiIpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgXCIkbmFtZVwiKSwgdmFsdWUpO1xuIik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo
ISRhdHRyaWJ1dGUtPmlzU3RhdGljKSB7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRwdXRGb3J3
YXJkcyA9ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1dEZvcndhcmRzfTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCRwdXRGb3J3YXJkcykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgbXkgJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNm
aXJzdCgkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJbXBsZW1lbnRlZEFzfSB8fCAk
bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBteSAkZm9yd2FyZGVkQXR0cmlidXRlID0g
JGNvZGVHZW5lcmF0b3ItPkdldEF0dHJpYnV0ZUZyb21JbnRlcmZhY2UoJGludGVyZmFjZSwgJHR5
cGUtPm5hbWUsICRwdXRGb3J3YXJkcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk
Zm9yd2FyZGVkQXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDRVJlYWN0aW9uc30pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBDdXN0
b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjaztcbiIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgkdHlwZS0+aXNOdWxsYWJsZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwiIC4gJHR5cGUt
Pm5hbWUgLiAiPiBmb3J3YXJkZWRJbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCkuJHtpbXBsR2V0
dGVyRnVuY3Rpb25OYW1lfSgpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFmb3J3YXJkZWRJbXBsKVxuIik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBmYWxz
ZTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGF1dG8mIGltcGwgPSAqZm9yd2FyZGVkSW1wbDtcbiIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEF0dHJpYnV0ZSBp
cyBub3QgbnVsbGFibGUsIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBleHBlY3RlZCB0byByZXR1cm4g
YSByZWZlcmVuY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgUmVmPCIgLiAkdHlwZS0+bmFtZSAuICI+IGZvcndhcmRlZEltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKS4ke2ltcGxHZXR0ZXJGdW5jdGlvbk5hbWV9KCk7XG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0g
Zm9yd2FyZGVkSW1wbC5nZXQoKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgJGF0dHJpYnV0ZSA9ICRmb3J3YXJkZWRBdHRyaWJ1dGU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICRhdHRyaWJ1dGUtPnR5cGU7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7XG4iKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICgkY29kZUdlbmVyYXRvci0+SXNFbnVtVHlwZSgkdHlwZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgIyBBcyBwZXIgc2VjdGlvbiAzLjUuNiBvZiBodHRwczovL2hleWNhbS5naXRodWIuaW8v
d2ViaWRsLyNkZm4tYXR0cmlidXRlLXNldHRlciwgZW51bWVyYXRpb25zIGRvIG5vdCB1c2UKLSAg
ICAgICAgICAgICAgICAgICAgIyB0aGUgc3RhbmRhcmQgY29udmVyc2lvbiwgYnV0IHJhdGhlciBz
aWxlbnRseSBmYWlsIG9uIGludmFsaWQgZW51bWVyYXRpb24gdmFsdWVzLgotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIG9wdGlvbmFsTmF0aXZlVmFsdWUg
PSBwYXJzZUVudW1lcmF0aW9uPCIgLiBHZXRFbnVtZXJhdGlvbkNsYXNzTmFtZSgkdHlwZSwgJGlu
dGVyZmFjZSkgLiAiPihzdGF0ZSwgdmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
IChVTkxJS0VMWSghb3B0aW9uYWxOYXRpdmVWYWx1ZSkpXG4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwotICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
b3B0aW9uYWxOYXRpdmVWYWx1ZS52YWx1ZSgpO1xuIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgbXkgJGdsb2JhbE9iamVjdFJlZmVyZW5jZSA9ICRhdHRy
aWJ1dGUtPmlzU3RhdGljID8gIipqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKSIgOiAiKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkiOwotICAg
ICAgICAgICAgICAgICAgICBteSAkZXhjZXB0aW9uVGhyb3dlciA9IEdldEF0dHJpYnV0ZUV4Y2Vw
dGlvblRocm93ZXIoJGludGVyZmFjZSwgJGF0dHJpYnV0ZSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgbXkgJG5hdGl2ZVZhbHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRpbnRlcmZhY2UsICRhdHRyaWJ1
dGUsICJ2YWx1ZSIsICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NvbmRpdGlvbmFs
fSwgIiZzdGF0ZSIsICJzdGF0ZSIsICJ0aGlzT2JqZWN0IiwgJGdsb2JhbE9iamVjdFJlZmVyZW5j
ZSwgJGV4Y2VwdGlvblRocm93ZXIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvIG5hdGl2ZVZhbHVlID0gJG5hdGl2ZVZhbHVlO1xuIik7Ci0gICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpO1xuIik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgbXkgKCRmdW5jdGlvbk5hbWUsIEBhcmd1bWVudHMpID0gJGNvZGVHZW5lcmF0b3ItPlNl
dHRlckV4cHJlc3Npb24oXCVpbXBsSW5jbHVkZXMsICRpbnRlcmZhY2VOYW1lLCAkYXR0cmlidXRl
KTsKLQotICAgICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgUGFzc0FyZ3VtZW50RXhwcmVz
c2lvbigibmF0aXZlVmFsdWUiLCAkYXR0cmlidXRlKSk7Ci0KLSAgICAgICAgICAgICAgICBteSAk
aW1wbGVtZW50ZWRCeSA9ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxlbWVu
dGVkQnl9OwotICAgICAgICAgICAgICAgIGlmICgkaW1wbGVtZW50ZWRCeSkgewotICAgICAgICAg
ICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJHtpbXBsZW1lbnRlZEJ5fS5oIiwgJGF0dHJp
YnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29uZGl0aW9uYWx9KTsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCAiaW1wbCIpIGlmICEkYXR0cmlidXRlLT5pc1N0YXRp
YzsKLSAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJXZWJDb3JlOjoke2ltcGxl
bWVudGVkQnl9Ojoke2Z1bmN0aW9uTmFtZX0iOwotICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRh
dHRyaWJ1dGUtPmlzU3RhdGljKSB7Ci0gICAgICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUg
PSAiJHtpbnRlcmZhY2VOYW1lfTo6JHtmdW5jdGlvbk5hbWV9IjsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb25OYW1lID0gImltcGwuJHtmdW5j
dGlvbk5hbWV9IjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB1bnNoaWZ0
KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0ZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57U2V0dGVyQ2FsbFdpdGh9LCBcQGltcGxDb250ZW50LCAiZmFs
c2UiKSk7Ci0gICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBHZW5lcmF0ZUNhbGxX
aXRoVXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhbGxX
aXRofSwgXEBpbXBsQ29udGVudCwgImZhbHNlIikpOwotCi0gICAgICAgICAgICAgICAgbXkgJGZ1
bmN0aW9uU3RyaW5nID0gIiRmdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykg
LiAiKSI7Ci0gICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nID0gInByb3BhZ2F0ZUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgJGZ1bmN0aW9uU3RyaW5nKSIgaWYgJGF0dHJpYnV0ZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57U2V0dGVyTWF5VGhyb3dFeGNlcHRpb259OwotCi0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGZ1bmN0aW9uU3RyaW5nO1xuIik7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHRydWU7XG4iKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIp
OwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRhdHRyaWJ1
dGVDb25kaXRpb25hbFN0cmluZzsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4i
KTsKLSAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Tm9JbnRlcmZhY2VPYmplY3R9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiSlNWYWx1ZSAke2NsYXNzTmFtZX06OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbntcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8JHtjbGFzc05hbWV9Q29uc3RydWN0
b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7
XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotICAgICAgICBpZiAo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TmFtZWRDb25zdHJ1Y3Rvcn0pIHsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSAke2NsYXNzTmFtZX06OmdldE5h
bWVkQ29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxue1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8JHtjbGFzc05hbWV9TmFtZWRDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ9XG5cbiIpOwotICAgICAgICB9CisgICAgZm9yZWFjaCBteSAkYXR0cmlidXRl
IChAYXR0cmlidXRlcykgeworICAgICAgICBHZW5lcmF0ZUF0dHJpYnV0ZUdldHRlckRlZmluaXRp
b24oJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGF0dHJpYnV0ZSk7CisgICAgICAgIEdlbmVyYXRl
QXR0cmlidXRlU2V0dGVyRGVmaW5pdGlvbigkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmli
dXRlKTsKICAgICB9CiAKLSAgICAjIE9wZXJhdGlvbnMKLSAgICBpZiAoJG51bU9wZXJhdGlvbnMg
PiAwKSB7Ci0gICAgICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAoQG9wZXJhdGlvbnMpIHsKLSAg
ICAgICAgICAgIEdlbmVyYXRlT3BlcmF0aW9uRGVmaW5pdGlvbigkaW50ZXJmYWNlLCAkY2xhc3NO
YW1lLCAkb3BlcmF0aW9uKTsKLSAgICAgICAgfQorICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAo
QG9wZXJhdGlvbnMpIHsKKyAgICAgICAgR2VuZXJhdGVPcGVyYXRpb25EZWZpbml0aW9uKCRpbnRl
cmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pOwogICAgIH0KIAogICAgIEdlbmVyYXRlTGVn
YWN5Q2FsbGVyRGVmaW5pdGlvbnMoJGludGVyZmFjZSwgJGNsYXNzTmFtZSk7Ci0KICAgICBHZW5l
cmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbigkaW50ZXJmYWNlKSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJs
ZTsKICAgICBHZW5lcmF0ZVNlcmlhbGl6ZXJEZWZpbml0aW9uKCRpbnRlcmZhY2UsICRjbGFzc05h
bWUpIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKIAotICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJKU0RPTU1hcExpa2UuaCIpIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7Ci0KICAgICBpZiAoJG5l
ZWRzVmlzaXRDaGlsZHJlbikgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtj
bGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKQEAgLTQwOTQsOCAr
Mzc3Miw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKCRudW1DYWNoZWRBdHRyaWJ1dGVzID4gMCkgewotICAgICAgICAg
ICAgZm9yZWFjaCAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewotICAgICAgICAgICAgICAg
IG15ICRhdHRyaWJ1dGUgPSAkXzsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAo
QHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewogICAgICAgICAgICAgICAgIGlmICgkYXR0cmli
dXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWNoZWRBdHRyaWJ1dGV9KSB7CiAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fIiAuICRhdHRyaWJ1dGUtPm5hbWUgLiAiKTtcbiIpOwogICAgICAgICAgICAgICAgIH0K
QEAgLTQzMDMsNiArMzk4MCwzMzYgQEAgRU5ECiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiNl
bmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwog
fQogCitzdWIgR2VuZXJhdGVBdHRyaWJ1dGVHZXR0ZXJEZWZpbml0aW9uCit7CisgICAgbXkgKCRp
bnRlcmZhY2UsICRjbGFzc05hbWUsICRhdHRyaWJ1dGUpID0gQF87CisKKyAgICByZXR1cm4gaWYg
SXNKU0J1aWx0aW4oJGludGVyZmFjZSwgJGF0dHJpYnV0ZSk7CisKKyAgICBteSAkbmFtZSA9ICRh
dHRyaWJ1dGUtPm5hbWU7CisgICAgbXkgJHR5cGUgPSAkYXR0cmlidXRlLT50eXBlOworICAgIG15
ICRnZXRGdW5jdGlvbk5hbWUgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRj
bGFzc05hbWUsICRhdHRyaWJ1dGUpOworICAgIG15ICRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lID0g
JGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57SW1wbGVtZW50ZWRBc30gfHwgJG5hbWUpOworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGlu
dGVyZmFjZS0+dHlwZS0+bmFtZTsKKworICAgIG15ICRjb25kaXRpb25hbCA9ICRhdHRyaWJ1dGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0NvbmRpdGlvbmFsfTsKKyAgICBpZiAoJGNvbmRpdGlvbmFs
KSB7CisgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5l
cmF0ZUNvbmRpdGlvbmFsU3RyaW5nRnJvbUF0dHJpYnV0ZVZhbHVlKCRjb25kaXRpb25hbCk7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKTs7
CisgICAgfQorCisgICAgaWYgKCEkYXR0cmlidXRlLT5pc1N0YXRpYyB8fCAkY29kZUdlbmVyYXRv
ci0+SXNDb25zdHJ1Y3RvclR5cGUoJHR5cGUpKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAic3RhdGljIGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCAke2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpO1xuIik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEpTVmFs
dWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpXG4iKTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICB9CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOworCisgICAgIyBHbG9iYWwgY29uc3Ry
dWN0b3JzIGNhbiBiZSBkaXNhYmxlZCBhdCBydW50aW1lLgorICAgIGlmICgkY29kZUdlbmVyYXRv
ci0+SXNDb25zdHJ1Y3RvclR5cGUoJHR5cGUpKSB7CisgICAgICAgIGlmICgkYXR0cmlidXRlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntFbmFibGVkQnlTZXR0aW5nfSkgeworICAgICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIkZyYW1lLmgiLCAkY29uZGl0aW9uYWwpOworICAgICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIlNldHRpbmdzLmgiLCAkY29uZGl0aW9uYWwpOworCisgICAgICAgICAg
ICBteSAkZW5hYmxlRnVuY3Rpb24gPSBUb01ldGhvZE5hbWUoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57RW5hYmxlZEJ5U2V0dGluZ30pIC4gIkVuYWJsZWQiOworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0LndyYXBwZWQo
KS5mcmFtZSgpKSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5mcmFtZSgp
LT5zZXR0aW5ncygpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoIXNldHRpbmdzLiRlbmFibGVGdW5jdGlvbigpKVxuIik7CisgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDaGVj
a1NlY3VyaXR5fSAmJgorICAgICAgICAhJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
RG9Ob3RDaGVja1NlY3VyaXR5fSAmJgorICAgICAgICAhJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57RG9Ob3RDaGVja1NlY3VyaXR5T25HZXR0ZXJ9KSB7CisgICAgICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJKU0RPTUJpbmRpbmdTZWN1cml0eS5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAg
ICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nl
c3NUb0RPTVdpbmRvdygmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5
RXJyb3IpKVxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1l
KCZzdGF0ZSwgdGhpc09iamVjdC53cmFwcGVkKCkuZnJhbWUoKSwgVGhyb3dTZWN1cml0eUVycm9y
KSlcbiIpOworICAgICAgICB9CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTtcbiIpOworICAgIH0KKworICAgIGlmIChIYXNDdXN0b21HZXR0
ZXIoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgeworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gdGhpc09iamVjdC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZShz
dGF0ZSk7XG4iKTsKKyAgICB9IGVsc2lmICgkdHlwZS0+bmFtZSBlcSAiRXZlbnRIYW5kbGVyIikg
eworICAgICAgICAkaW1wbEluY2x1ZGVzeyJFdmVudE5hbWVzLmgifSA9IDE7CisgICAgICAgIG15
ICRnZXR0ZXIgPSAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntXaW5kb3dFdmVudEhh
bmRsZXJ9ID8gIndpbmRvd0V2ZW50SGFuZGxlckF0dHJpYnV0ZSIKKyAgICAgICAgICAgIDogJGF0
dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RG9jdW1lbnRFdmVudEhhbmRsZXJ9ID8gImRv
Y3VtZW50RXZlbnRIYW5kbGVyQXR0cmlidXRlIgorICAgICAgICAgICAgOiAiZXZlbnRIYW5kbGVy
QXR0cmlidXRlIjsKKyAgICAgICAgbXkgJGV2ZW50TmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0
ZUV2ZW50TmFtZSgkYXR0cmlidXRlKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuICRnZXR0ZXIodGhpc09iamVjdC53cmFwcGVkKCksICRldmVudE5hbWUsIHdvcmxkRm9y
RE9NT2JqZWN0KCZ0aGlzT2JqZWN0KSk7XG4iKTsKKyAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRv
ci0+SXNDb25zdHJ1Y3RvclR5cGUoJGF0dHJpYnV0ZS0+dHlwZSkpIHsKKyAgICAgICAgbXkgJGNv
bnN0cnVjdG9yVHlwZSA9ICRhdHRyaWJ1dGUtPnR5cGUtPm5hbWU7CisgICAgICAgICRjb25zdHJ1
Y3RvclR5cGUgPX4gcy9Db25zdHJ1Y3RvciQvLzsKKyAgICAgICAgIyBXaGVuIENvbnN0cnVjdG9y
IGF0dHJpYnV0ZSBpcyB1c2VkIGJ5IERPTVdpbmRvdy5pZGwsIGl0J3MgY29ycmVjdCB0byBwYXNz
IHRoaXNPYmplY3QgYXMgdGhlIGdsb2JhbCBvYmplY3QKKyAgICAgICAgIyBXaGVuIEpTRE9NV3Jh
cHBlcnMgaGF2ZSBhIGJhY2stcG9pbnRlciB0byB0aGUgZ2xvYmFsT2JqZWN0IHdlIGNhbiBwYXNz
IHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpCisgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBl
cSAiRE9NV2luZG93IikgeworICAgICAgICAgICAgbXkgJG5hbWVkID0gKCRjb25zdHJ1Y3RvclR5
cGUgPX4gL05hbWVkJC8pID8gIk5hbWVkIiA6ICIiOworICAgICAgICAgICAgJGNvbnN0cnVjdG9y
VHlwZSA9fiBzL05hbWVkJC8vOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIEpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiOjpnZXQke25hbWVkfUNvbnN0cnVjdG9y
KHN0YXRlLnZtKCksICZ0aGlzT2JqZWN0KTtcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiLmgiLCAk
Y29uZGl0aW9uYWwpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJu
IEpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTtcbiIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhY2hlZEF0dHJp
YnV0ZX0pIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChKU1ZhbHVl
IGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC5tXyIgLiAkYXR0cmlidXRlLT5uYW1lIC4gIi5nZXQo
KSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBj
YWNoZWRWYWx1ZTtcbiIpOworICAgICAgICB9CisKKyAgICAgICAgbXkgQGNhbGxXaXRoQXJncyA9
IEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Q2FsbFdpdGh9LCBcQGltcGxDb250ZW50LCAianNVbmRlZmluZWQoKSIpOworCisg
ICAgICAgIG15ICgkZnVuY3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5H
ZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlTmFtZSwgJGF0dHJpYnV0
ZSk7CisgICAgICAgIG15ICRpbXBsZW1lbnRlZEJ5ID0gJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57SW1wbGVtZW50ZWRCeX07CisgICAgICAgIGlmICgkaW1wbGVtZW50ZWRCeSkgewor
ICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siJHtpbXBsZW1lbnRlZEJ5fS5oIn0gPSAxOworICAg
ICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJXZWJDb3JlOjoke2ltcGxlbWVudGVkQnl9Ojoke2Z1
bmN0aW9uTmFtZX0iOworICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCAiaW1wbCIpIGlm
ICEkYXR0cmlidXRlLT5pc1N0YXRpYzsKKyAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+aXNT
dGF0aWMpIHsKKyAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiJHtpbnRlcmZhY2VOYW1lfTo6
JHtmdW5jdGlvbk5hbWV9IjsKKyAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+aXNNYXBMaWtl
KSB7CisgICAgICAgICAgICBteSAkdWNQcm9wZXJ0eU5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tf
dWNmaXJzdCgkZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiZm9y
d2FyZCIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkZnVuY3Rpb25OYW1lKSAuICJUb01h
cExpa2UiOworICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAic3RhdGUiKTsKKyAgICAgICAg
ICAgIHB1c2goQGFyZ3VtZW50cywgInRoaXNPYmplY3QiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiaW1wbC4ke2Z1bmN0aW9uTmFtZX0iOworICAgICAg
ICB9CisKKyAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBAY2FsbFdpdGhBcmdzKTsKKyAgICAg
ICAgbXkgJGpzVHlwZSA9IE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUmVmZXJlbmNlcygkYXR0cmlidXRl
LCAkaW50ZXJmYWNlLCAiJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMp
IC4gIikiLCAiKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkiKTsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpO1xuIikgdW5s
ZXNzICRhdHRyaWJ1dGUtPmlzU3RhdGljIG9yICRhdHRyaWJ1dGUtPmlzTWFwTGlrZTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAkanNUeXBlO1xuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3QubV8iIC4gJGF0dHJp
YnV0ZS0+bmFtZSAuICIuc2V0KHN0YXRlLnZtKCksICZ0aGlzT2JqZWN0LCByZXN1bHQpO1xuIikg
aWYgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FjaGVkQXR0cmlidXRlfTsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHJlc3VsdDtcbiIpOworICAgIH0K
KyAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICBpZiAoISRhdHRyaWJ1dGUt
PmlzU3RhdGljIHx8ICRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVHlwZSgkdHlwZSkpIHsK
KyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NQXR0cmlidXRlLmgiLCAkY29uZGl0aW9u
YWwpOworCisgICAgICAgIG15IEB0ZW1wbGF0ZVBhcmFtZXRlcnMgPSAoKTsKKyAgICAgICAgcHVz
aChAdGVtcGxhdGVQYXJhbWV0ZXJzLCAiJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyIik7CisgICAg
ICAgIGlmICgkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntMZW5pZW50VGhpc30pIHsK
KyAgICAgICAgICAgIHB1c2goQHRlbXBsYXRlUGFyYW1ldGVycywgIkNhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpSZXR1cm5FYXJseSIpCisgICAgICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5J
c1Byb21pc2VUeXBlKCRhdHRyaWJ1dGUtPnR5cGUpKSB7CisgICAgICAgICAgICBwdXNoKEB0ZW1w
bGF0ZVBhcmFtZXRlcnMsICJDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmVqZWN0UHJvbWlzZSIp
CisgICAgICAgIH0KKworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVl
ICR7Z2V0RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSURMQXR0cmlidXRl
PCR7Y2xhc3NOYW1lfT46OmdldDwiIC4gam9pbigiLCAiLCBAdGVtcGxhdGVQYXJhbWV0ZXJzKSAu
ICI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBcIiRuYW1lXCIpO1xuIik7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIkVuY29kZWRKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKVxuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKCpzdGF0ZSkpO1xuIik7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAgICB9CisKKyAgICBpZiAoJGF0
dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRPTUpJVCJ9KSB7CisgICAgICAgIGFzc2Vy
dCgiT25seSBET01KSVQ9R2V0dGVyIGlzIHN1cHBvcnRlZCBmb3IgYXR0cmlidXRlcyIpIHVubGVz
cyAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkYXR0cmlidXRlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntET01KSVR9LCAiR2V0dGVyIik7CisKKyAgICAgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIjx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4iLCAkY29uZGl0aW9uYWwpOworICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSklUSURMVHlwZUZpbHRlci5oIiwgJGNvbmRpdGlv
bmFsKTsKKworICAgICAgICBteSAkZ2VuZXJhdG9yTmFtZSA9ICRpbnRlcmZhY2UtPnR5cGUtPm5h
bWUgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5uYW1lKTsKKyAgICAg
ICAgbXkgJGRvbUpJVENsYXNzTmFtZSA9ICRnZW5lcmF0b3JOYW1lIC4gIkRPTUpJVCI7CisgICAg
ICAgIG15ICRnZXR0ZXIgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRnZW5l
cmF0b3JOYW1lLCAkYXR0cmlidXRlKTsKKyAgICAgICAgbXkgJHNldHRlciA9IElzUmVhZG9ubHko
JGF0dHJpYnV0ZSkgPyAibnVsbHB0ciIgOiBHZXRBdHRyaWJ1dGVTZXR0ZXJOYW1lKCRpbnRlcmZh
Y2UsICRnZW5lcmF0b3JOYW1lLCAkYXR0cmlidXRlKTsKKyAgICAgICAgbXkgJHJlc3VsdFR5cGUg
PSBHZXRSZXN1bHRUeXBlRmlsdGVyKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUtPnR5cGUpOworCisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtkb21KSVRDbGFzc05hbWV9Ojoke2RvbUpJVENs
YXNzTmFtZX0oKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogSlNDOjpE
T01KSVQ6OkdldHRlclNldHRlcigkZ2V0dGVyLCAkc2V0dGVyLCAke2NsYXNzTmFtZX06OmluZm8o
KSwgJHJlc3VsdFR5cGUpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworCisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiSlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyU2V0dGVy
Rm9yIiAuICRnZW5lcmF0b3JOYW1lIC4gIigpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPCR7ZG9tSklUQ2xhc3NOYW1lfT4gY29tcGlsZXI7XG4iKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICZjb21waWxlci5nZXQoKTtcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgfQorCisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIjZW5kaWZcblxuIikgaWYgJGNvbmRpdGlvbmFsOworfQorCitzdWIgR2VuZXJhdGVB
dHRyaWJ1dGVTZXR0ZXJEZWZpbml0aW9uCit7CisgICAgbXkgKCRpbnRlcmZhY2UsICRjbGFzc05h
bWUsICRhdHRyaWJ1dGUpID0gQF87CisKKyAgICByZXR1cm4gaWYgSXNSZWFkb25seSgkYXR0cmli
dXRlKTsKKyAgICByZXR1cm4gaWYgSXNKU0J1aWx0aW4oJGludGVyZmFjZSwgJGF0dHJpYnV0ZSk7
CisKKyAgICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7CisgICAgbXkgJHR5cGUgPSAkYXR0
cmlidXRlLT50eXBlOworICAgIG15ICRhdHRyaWJ1dGVTZXR0ZXJOYW1lID0gR2V0QXR0cmlidXRl
U2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKTsKKyAgICBteSAk
aW1wbFNldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRuYW1l
KTsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPnR5cGUtPm5hbWU7CisKKyAg
ICBteSAkY29uZGl0aW9uYWwgPSAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25k
aXRpb25hbH07CisgICAgaWYgKCRjb25kaXRpb25hbCkgeworICAgICAgICBteSAkY29uZGl0aW9u
YWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZ0Zyb21B
dHRyaWJ1dGVWYWx1ZSgkY29uZGl0aW9uYWwpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIik7OworICAgIH0KKworICAgIGlmICghJGF0dHJp
YnV0ZS0+aXNTdGF0aWMpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5s
aW5lIGJvb2wgJHthdHRyaWJ1dGVTZXR0ZXJOYW1lfVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCAk
e2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHthdHRyaWJ1
dGVTZXR0ZXJOYW1lfShFeGVjU3RhdGUqIHN0YXRlUG9pbnRlciwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSlcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlQoc3RhdGVQ
b2ludGVyKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBzdGF0
ZSA9ICpzdGF0ZVBvaW50ZXI7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBhdXRvIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7XG4iKTsKKyAgICB9
CisKKyAgICBpZiAoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q0VSZWFjdGlvbnN9
KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlv
blN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrO1xuIik7CisgICAgICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oIiwgJGNvbmRpdGlvbmFsKTsK
KyAgICB9CisKKyAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2hlY2tT
ZWN1cml0eX0gJiYgISRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hlY2tT
ZWN1cml0eX0gJiYgISRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hlY2tT
ZWN1cml0eU9uU2V0dGVyfSkgeworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01CaW5k
aW5nU2VjdXJpdHkuaCIsICRjb25kaXRpb25hbCk7CisgICAgICAgIGlmICgkaW50ZXJmYWNlTmFt
ZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRl
LCB0aGlzT2JqZWN0LndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsIHRoaXNPYmplY3Qu
d3JhcHBlZCgpLmZyYW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKKyAgICAgICAgfQor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7Cisg
ICAgfQorCisgICAgaWYgKEhhc0N1c3RvbVNldHRlcigkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJp
YnV0ZXMpKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3Quc2V0
JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoc3RhdGUsIHZhbHVlKTtcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgIH0gZWxzaWYgKCR0eXBl
LT5uYW1lIGVxICJFdmVudEhhbmRsZXIiKSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJK
U0V2ZW50TGlzdGVuZXIuaCIsICRjb25kaXRpb25hbCk7CisgICAgICAgIG15ICRldmVudE5hbWUg
PSBFdmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudE5hbWUoJGF0dHJpYnV0ZSk7CisgICAgICAgICMg
RklYTUU6IEZpbmQgYSB3YXkgdG8gZG8gdGhpcyBzcGVjaWFsIGNhc2Ugd2l0aG91dCBoYXJkY29k
aW5nIHRoZSBjbGFzcyBhbmQgYXR0cmlidXRlIG5hbWVzIGhlcmUuCisgICAgICAgIGlmICgoKCRp
bnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSBvciAoJGludGVyZmFjZU5hbWUgZXEgIldvcmtl
ckdsb2JhbFNjb3BlIikpIGFuZCAkbmFtZSBlcSAib25lcnJvciIpIHsKKyAgICAgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJKU0Vycm9ySGFuZGxlci5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3Qud3JhcHBlZCgpLnNldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoJGV2ZW50TmFtZSwgY3JlYXRlSlNFcnJvckhhbmRsZXIoJnN0
YXRlLCB2YWx1ZSwgJnRoaXNPYmplY3QpLCB3b3JsZEZvckRPTU9iamVjdCgmdGhpc09iamVjdCkp
O1xuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
SlNFdmVudExpc3RlbmVyLmgiLCAkY29uZGl0aW9uYWwpOworICAgICAgICAgICAgbXkgJHNldHRl
ciA9ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1dpbmRvd0V2ZW50SGFuZGxlcn0g
PyAic2V0V2luZG93RXZlbnRIYW5kbGVyQXR0cmlidXRlIgorICAgICAgICAgICAgICAgIDogJGF0
dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RG9jdW1lbnRFdmVudEhhbmRsZXJ9ID8gInNl
dERvY3VtZW50RXZlbnRIYW5kbGVyQXR0cmlidXRlIgorICAgICAgICAgICAgICAgIDogInNldEV2
ZW50SGFuZGxlckF0dHJpYnV0ZSI7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAkc2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LndyYXBwZWQoKSwgJGV2ZW50
TmFtZSwgdmFsdWUpO1xuIik7CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIHRydWU7XG4iKTsKKyAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXND
b25zdHJ1Y3RvclR5cGUoJHR5cGUpKSB7CisgICAgICAgIG15ICRjb25zdHJ1Y3RvclR5cGUgPSAk
dHlwZS0+bmFtZTsKKyAgICAgICAgJGNvbnN0cnVjdG9yVHlwZSA9fiBzL0NvbnN0cnVjdG9yJC8v
OworICAgICAgICAjICRjb25zdHJ1Y3RvclR5cGUgfj0gL0NvbnN0cnVjdG9yJC8gaW5kaWNhdGVz
IHRoYXQgaXQgaXMgTmFtZWRDb25zdHJ1Y3Rvci4KKyAgICAgICAgIyBXZSBkbyBub3QgZ2VuZXJh
dGUgdGhlIGhlYWRlciBmaWxlIGZvciBOYW1lZENvbnN0cnVjdG9yIG9mIGNsYXNzIFhYWFgsCisg
ICAgICAgICMgc2luY2Ugd2UgZ2VuZXJhdGUgdGhlIE5hbWVkQ29uc3RydWN0b3IgZGVjbGFyYXRp
b24gaW50byB0aGUgaGVhZGVyIGZpbGUgb2YgY2xhc3MgWFhYWC4KKyAgICAgICAgaWYgKCRjb25z
dHJ1Y3RvclR5cGUgbmUgImFueSIgYW5kICRjb25zdHJ1Y3RvclR5cGUgIX4gL05hbWVkJC8pIHsK
KyAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4g
Ii5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci5cbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3Rh
dGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIFwiJG5hbWVcIiksIHZhbHVl
KTtcbiIpOworICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1Jl
cGxhY2VhYmxlfSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBwcm9wZXJ0eS5cbiIpOworICAgICAgICBpZiAoQXR0cmlidXRlU2hvdWxk
QmVPbkluc3RhbmNlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUpKSB7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gcmVwbGFjZVN0YXRpY1Byb3BlcnR5U2xvdChzdGF0
ZS52bSgpLCAmdGhpc09iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIFwiJG5h
bWVcIiksIHZhbHVlKTtcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBcIiRuYW1lXCIpLCB2YWx1ZSk7XG4iKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghJGF0dHJpYnV0ZS0+aXNTdGF0
aWMpIHsKKyAgICAgICAgICAgIG15ICRwdXRGb3J3YXJkcyA9ICRhdHRyaWJ1dGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+e1B1dEZvcndhcmRzfTsKKyAgICAgICAgICAgIGlmICgkcHV0Rm9yd2FyZHMp
IHsKKyAgICAgICAgICAgICAgICBteSAkaW1wbEdldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2RlR2Vu
ZXJhdG9yLT5XS19sY2ZpcnN0KCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxl
bWVudGVkQXN9IHx8ICRuYW1lKTsKKyAgICAgICAgICAgICAgICBteSAkZm9yd2FyZGVkQXR0cmli
dXRlID0gJGNvZGVHZW5lcmF0b3ItPkdldEF0dHJpYnV0ZUZyb21JbnRlcmZhY2UoJGludGVyZmFj
ZSwgJHR5cGUtPm5hbWUsICRwdXRGb3J3YXJkcyk7CisKKyAgICAgICAgICAgICAgICBpZiAoJGZv
cndhcmRlZEF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q0VSZWFjdGlvbnN9KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEN1c3RvbUVsZW1lbnRS
ZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrO1xuIik7CisgICAgICAgICAg
ICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5o
IiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoJHR5cGUtPmlzTnVsbGFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgUmVmUHRyPCIgLiAkdHlwZS0+bmFtZSAuICI+IGZvcndhcmRlZEltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKS4ke2ltcGxHZXR0ZXJGdW5jdGlvbk5hbWV9KCk7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFmb3J3YXJkZWRJ
bXBsKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICByZXR1cm4gZmFsc2U7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgYXV0byYgaW1wbCA9ICpmb3J3YXJkZWRJbXBsO1xuIik7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgIyBBdHRyaWJ1dGUgaXMgbm90IG51bGxh
YmxlLCB0aGUgaW1wbGVtZW50YXRpb24gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGEgcmVmZXJlbmNl
LgorICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWY8IiAuICR0
eXBlLT5uYW1lIC4gIj4gZm9yd2FyZGVkSW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLiR7aW1w
bEdldHRlckZ1bmN0aW9uTmFtZX0oKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gZm9yd2FyZGVkSW1wbC5nZXQoKTtcbiIpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAkYXR0cmlidXRlID0gJGZvcndhcmRl
ZEF0dHJpYnV0ZTsKKyAgICAgICAgICAgICAgICAkdHlwZSA9ICRhdHRyaWJ1dGUtPnR5cGU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTtcbiIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0VudW1UeXBlKCR0
eXBlKSkgeworICAgICAgICAgICAgIyBBcyBwZXIgc2VjdGlvbiAzLjUuNiBvZiBodHRwczovL2hl
eWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tYXR0cmlidXRlLXNldHRlciwgZW51bWVyYXRpb25z
IGRvIG5vdCB1c2UKKyAgICAgICAgICAgICMgdGhlIHN0YW5kYXJkIGNvbnZlcnNpb24sIGJ1dCBy
YXRoZXIgc2lsZW50bHkgZmFpbCBvbiBpbnZhbGlkIGVudW1lcmF0aW9uIHZhbHVlcy4KKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gb3B0aW9uYWxOYXRpdmVWYWx1ZSA9
IHBhcnNlRW51bWVyYXRpb248IiAuIEdldEVudW1lcmF0aW9uQ2xhc3NOYW1lKCR0eXBlLCAkaW50
ZXJmYWNlKSAuICI+KHN0YXRlLCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIW9wdGlv
bmFsTmF0aXZlVmFsdWUpKVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBhdXRvIG5hdGl2ZVZhbHVlID0gb3B0aW9uYWxOYXRpdmVWYWx1ZS52YWx1ZSgpO1xuIik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBteSAkZ2xvYmFsT2JqZWN0UmVmZXJlbmNl
ID0gJGF0dHJpYnV0ZS0+aXNTdGF0aWMgPyAiKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpIiA6ICIqdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSI7CisgICAgICAgICAgICBteSAkZXhjZXB0aW9uVGhyb3dlciA9IEdldEF0dHJpYnV0ZUV4Y2Vw
dGlvblRocm93ZXIoJGludGVyZmFjZSwgJGF0dHJpYnV0ZSk7CisKKyAgICAgICAgICAgIG15ICRu
YXRpdmVWYWx1ZSA9IEpTVmFsdWVUb05hdGl2ZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlLCAidmFs
dWUiLCAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRpb25hbH0sICImc3Rh
dGUiLCAic3RhdGUiLCAidGhpc09iamVjdCIsICRnbG9iYWxPYmplY3RSZWZlcmVuY2UsICRleGNl
cHRpb25UaHJvd2VyKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSAkbmF0aXZlVmFsdWU7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpO1xuIik7
CisgICAgICAgIH0KKworICAgICAgICBteSAoJGZ1bmN0aW9uTmFtZSwgQGFyZ3VtZW50cykgPSAk
Y29kZUdlbmVyYXRvci0+U2V0dGVyRXhwcmVzc2lvbihcJWltcGxJbmNsdWRlcywgJGludGVyZmFj
ZU5hbWUsICRhdHRyaWJ1dGUpOworCisgICAgICAgIHB1c2goQGFyZ3VtZW50cywgUGFzc0FyZ3Vt
ZW50RXhwcmVzc2lvbigibmF0aXZlVmFsdWUiLCAkYXR0cmlidXRlKSk7CisKKyAgICAgICAgbXkg
JGltcGxlbWVudGVkQnkgPSAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJbXBsZW1l
bnRlZEJ5fTsKKyAgICAgICAgaWYgKCRpbXBsZW1lbnRlZEJ5KSB7CisgICAgICAgICAgICBBZGRU
b0ltcGxJbmNsdWRlcygiJHtpbXBsZW1lbnRlZEJ5fS5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAg
ICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywgImltcGwiKSBpZiAhJGF0dHJpYnV0ZS0+aXNTdGF0
aWM7CisgICAgICAgICAgICAkZnVuY3Rpb25OYW1lID0gIldlYkNvcmU6OiR7aW1wbGVtZW50ZWRC
eX06OiR7ZnVuY3Rpb25OYW1lfSI7CisgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPmlzU3Rh
dGljKSB7CisgICAgICAgICAgICAkZnVuY3Rpb25OYW1lID0gIiR7aW50ZXJmYWNlTmFtZX06OiR7
ZnVuY3Rpb25OYW1lfSI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkZnVuY3Rpb25O
YW1lID0gImltcGwuJHtmdW5jdGlvbk5hbWV9IjsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2hp
ZnQoQGFyZ3VtZW50cywgR2VuZXJhdGVDYWxsV2l0aFVzaW5nUmVmZXJlbmNlcygkYXR0cmlidXRl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntTZXR0ZXJDYWxsV2l0aH0sIFxAaW1wbENvbnRlbnQsICJm
YWxzZSIpKTsKKyAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBHZW5lcmF0ZUNhbGxXaXRoVXNp
bmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhbGxXaXRofSwg
XEBpbXBsQ29udGVudCwgImZhbHNlIikpOworCisgICAgICAgIG15ICRmdW5jdGlvblN0cmluZyA9
ICIkZnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikiOworICAgICAg
ICAkZnVuY3Rpb25TdHJpbmcgPSAicHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3Bl
LCAkZnVuY3Rpb25TdHJpbmcpIiBpZiAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntT
ZXR0ZXJNYXlUaHJvd0V4Y2VwdGlvbn07CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgJGZ1bmN0aW9uU3RyaW5nO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiB0cnVlO1xuIik7CisgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4i
KTsKKworICAgIGlmICghJGF0dHJpYnV0ZS0+aXNTdGF0aWMpIHsKKyAgICAgICAgbXkgQHRlbXBs
YXRlUGFyYW1ldGVycyA9ICgpOworICAgICAgICBwdXNoKEB0ZW1wbGF0ZVBhcmFtZXRlcnMsICIk
e2F0dHJpYnV0ZVNldHRlck5hbWV9U2V0dGVyIik7CisgICAgICAgIHB1c2goQHRlbXBsYXRlUGFy
YW1ldGVycywgIkNhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZXR1cm5FYXJseSIpIGlmICRhdHRy
aWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0xlbmllbnRUaGlzfTsKKworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgImJvb2wgJHthdHRyaWJ1dGVTZXR0ZXJOYW1lfShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSlcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSURMQXR0cmlidXRlPCR7Y2xhc3NOYW1lfT46OnNl
dDwiIC4gam9pbigiLCAiLCBAdGVtcGxhdGVQYXJhbWV0ZXJzKSAuICI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsIFwiJG5hbWVcIik7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ9XG5cbiIpOworICAgIH0KKworICAgIHB1c2goQGltcGxDb250ZW50LCAiI2VuZGlm
XG5cbiIpIGlmICRjb25kaXRpb25hbDsKK30KKwogc3ViIEdlbmVyYXRlT3BlcmF0aW9uRGVmaW5p
dGlvbgogewogICAgIG15ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uKSA9IEBf
OwpAQCAtNjM3MCw2ICs2Mzc3LDkgQEAgc3ViIEhhc0N1c3RvbU1ldGhvZAogc3ViIE5lZWRzQ29u
c3RydWN0b3JQcm9wZXJ0eQogewogICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKKyAgICAKKyAg
ICAjIEZJWE1FOiBUaGlzIGNvbmRpdGlvbiBtYWtlcyBsaXR0bGUgc2Vuc2UuIEl0IHNob3VsZCBu
b3QgYmUgcG9zc2libGUgdG8gaGF2ZSBhIGNvbnN0cnVjdG9yIGF0IGFsbCBpZiB5b3UgaGF2ZQor
ICAgICMgbm8gaW50ZXJmYWNlIG9iamVjdC4gVGhpcyBzZWVtcyB0byBiZSBvbmx5IHVzZWQgYnkg
dGhlIFJlYWRhYmxlU3RyZWFtcyBjb2RlIGFuZCBNZWRpYURldmljZUluZm8uCiAgICAgcmV0dXJu
ICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb0ludGVyZmFjZU9iamVjdH0gfHwg
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tQ29uc3RydWN0b3J9OwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNJbnRlcmZh
Y2VOYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNJbnRlcmZhY2VOYW1lLmNwcAkocmV2aXNpb24gMjE3NDU2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsMTEgQEAgSlNPYmplY3QqIEpTSW50ZXJmYWNlTmFt
ZTo6cHJvdG90eXBlKFZNJgogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNJbnRlcmZhY2VO
YW1lPih2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAorSlNWYWx1ZSBKU0ludGVyZmFjZU5hbWU6Omdl
dENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNJbnRlcmZhY2VOYW1lQ29uc3RydWN0
b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7
Cit9CisKIHZvaWQgSlNJbnRlcmZhY2VOYW1lOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQog
ewogICAgIEpTSW50ZXJmYWNlTmFtZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTSW50ZXJm
YWNlTmFtZSo+KGNlbGwpOwpAQCAtMTI4LDI5ICsxMzMsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNJ
bnRlcmZhY2VOYW1lQ29uc3RydWN0bwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTSW50ZXJm
YWNlTmFtZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNJbnRlcmZh
Y2VOYW1lUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBp
ZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNJbnRlcmZhY2VOYW1lUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTSW50ZXJmYWNlTmFtZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRv
bU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
SW50ZXJmYWNlTmFtZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCkpKTsKIH0KIAogYm9vbCBzZXRKU0ludGVyZmFjZU5hbWVDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNJbnRlcmZhY2VOYW1lUHJvdG90
eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0ludGVyZmFjZU5hbWVQcm90b3R5
cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSgh
ZG9tT2JqZWN0KSkgeworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpT
SW50ZXJmYWNlTmFtZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIGRvbU9iamVj
dC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yLCB2YWx1ZSk7Ci19Ci0KLUpTVmFsdWUgSlNJbnRlcmZhY2VOYW1lOjpnZXRDb25zdHJ1Y3Rv
cihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0
dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTSW50ZXJmYWNlTmFtZUNvbnN0cnVjdG9yPih2bSwgKmpz
Q2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworICAgIHJldHVy
biBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMo
KS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiB2b2lk
IEpTSW50ZXJmYWNlTmFtZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTTWFwTGlrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAJKHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU01hcExpa2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw5ICs1Miw5IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c01hcEwKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVNp
emUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRK
U01hcExpa2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VTaXpl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwogCiBjbGFzcyBKU01hcExpa2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IHsKIHB1YmxpYzoKQEAgLTE0OSw2ICsxNDksMTEgQEAgSlNPYmplY3QqIEpTTWFwTGlrZTo6
cHJvdG90eXBlKFZNJiB2bSwgSgogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNNYXBMaWtl
Pih2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAorSlNWYWx1ZSBKU01hcExpa2U6OmdldENvbnN0cnVj
dG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBy
ZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNNYXBMaWtlQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0
PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKIHZvaWQgSlNN
YXBMaWtlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTTWFwTGlrZSogdGhp
c09iamVjdCA9IHN0YXRpY19jYXN0PEpTTWFwTGlrZSo+KGNlbGwpOwpAQCAtMTY1LDQ4ICsxNzAs
NDAgQEAgdGVtcGxhdGU8PiBpbmxpbmUgSlNNYXBMaWtlKiBJRExPcGVyYXRpbwogICAgIHJldHVy
biBqc0R5bmFtaWNEb3duY2FzdDxKU01hcExpa2UqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFs
dWUoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc01hcExpa2VTaXplR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTTWFwTGlrZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVk
SlNWYWx1ZSBqc01hcExpa2VTaXplKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNNYXBM
aWtlPjo6Z2V0PGpzTWFwTGlrZVNpemVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic2l6ZSIp
OwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNNYXBMaWtlU2l6ZUdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU01hcExpa2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEFueT4oZm9yd2FyZFNpemVUb01hcExp
a2Uoc3RhdGUsIHRoaXNPYmplY3QpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBFbmNvZGVk
SlNWYWx1ZSBqc01hcExpa2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBK
U01hcExpa2VQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTTWFwTGlr
ZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVO
TElLRUxZKCFkb21PYmplY3QpKQorICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTTWFwTGlrZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U01hcExpa2U6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU01hcExpa2U6OmdldENvbnN0
cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKIGJv
b2wgc2V0SlNNYXBMaWtlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIEpTTWFwTGlrZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8
SlNNYXBMaWtlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU01hcExpa2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewogICAgICAgICB0aHJv
d1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVy
biBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMo
KS5jb25zdHJ1Y3RvciwgdmFsdWUpOworICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChz
dGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1KU1ZhbHVlIEpTTWFwTGlrZTo6Z2V0Q29uc3Ry
dWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzTWFwTGlrZVNpemVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNN
YXBMaWtlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIHJldHVy
biBnZXRET01Db25zdHJ1Y3RvcjxKU01hcExpa2VDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29u
c3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMQW55Pihmb3J3YXJkU2l6ZVRvTWFwTGlrZShzdGF0ZSwgdGhpc09iamVjdCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVNpemUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU01hcExpa2U+OjpnZXQ8anNNYXBMaWtlU2l6
ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJzaXplIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkdldENhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU01hcExpa2U+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1h
cExpa2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAJKHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDkgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzUmVhZAogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNSZWFkT25seU1hcExpa2VTaXplKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5TWFw
TGlrZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1JlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlU2l6ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIAogY2xhc3MgSlNS
ZWFkT25seU1hcExpa2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsK
IHB1YmxpYzoKQEAgLTE0Myw2ICsxNDMsMTEgQEAgSlNPYmplY3QqIEpTUmVhZE9ubHlNYXBMaWtl
Ojpwcm90b3R5cGUoVgogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNSZWFkT25seU1hcExp
a2U+KHZtLCBnbG9iYWxPYmplY3QpOwogfQogCitKU1ZhbHVlIEpTUmVhZE9ubHlNYXBMaWtlOjpn
ZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTUmVhZE9ubHlNYXBMaWtlQ29uc3Ry
dWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KSk7Cit9CisKIHZvaWQgSlNSZWFkT25seU1hcExpa2U6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNl
bGwpCiB7CiAgICAgSlNSZWFkT25seU1hcExpa2UqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxK
U1JlYWRPbmx5TWFwTGlrZSo+KGNlbGwpOwpAQCAtMTU5LDQ4ICsxNjQsNDAgQEAgdGVtcGxhdGU8
PiBpbmxpbmUgSlNSZWFkT25seU1hcExpa2UqIElETAogICAgIHJldHVybiBqc0R5bmFtaWNEb3du
Y2FzdDxKU1JlYWRPbmx5TWFwTGlrZSo+KHN0YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlU2l6ZUdldHRlcihF
eGVjU3RhdGUmLCBKU1JlYWRPbmx5TWFwTGlrZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwot
Ci1FbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVNpemUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1JlYWRPbmx5TWFwTGlrZT46OmdldDxqc1JlYWRPbmx5TWFwTGlrZVNpemVH
ZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic2l6ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNSZWFkT25seU1hcExpa2VTaXplR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTUmVh
ZE9ubHlNYXBMaWtlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQotewotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExBbnk+KGZvcndhcmRTaXplVG9NYXBMaWtlKHN0YXRl
LCB0aGlzT2JqZWN0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogRW5jb2RlZEpTVmFsdWUg
anNSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBK
U1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8
SlNSZWFkT25seU1hcExpa2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwotICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKKyAgICBhdXRvKiBwcm90b3R5cGUg
PSBqc0R5bmFtaWNEb3duY2FzdDxKU1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZSo+KHZtLCBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1JlYWRPbmx5TWFwTGlrZTo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTUmVhZE9ubHlNYXBMaWtlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0o
KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCiBib29sIHNldEpTUmVhZE9ubHlN
YXBMaWtlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpT
UmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CisgICAgYXV0byogcHJvdG90eXBl
ID0ganNEeW5hbWljRG93bmNhc3Q8SlNSZWFkT25seU1hcExpa2VQcm90b3R5cGUqPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkg
ewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3RvcgotICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUt
PnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOworICAgIHJldHVybiBwcm90b3R5
cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1KU1ZhbHVlIEpTUmVh
ZE9ubHlNYXBMaWtlOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNSZWFkT25seU1hcExpa2VT
aXplR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTUmVhZE9ubHlNYXBMaWtlJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU1JlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUds
b2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExBbnk+KGZvcndhcmRTaXplVG9NYXBMaWtlKHN0YXRlLCB0aGlzT2JqZWN0KSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworRW5jb2RlZEpTVmFsdWUganNSZWFkT25seU1hcExpa2VTaXplKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
eworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNSZWFkT25seU1hcExpa2U+OjpnZXQ8anNSZWFk
T25seU1hcExpa2VTaXplR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInNpemUiKTsKIH0KIAog
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90
eXBlRnVuY3Rpb25HZXRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExP
cGVyYXRpb248SlNSZWFkT25seU1hcExpa2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9N
T2JqZWN0LmNwcAkocmV2aXNpb24gMjE3NDU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDkgKzQ1LDkgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dAogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9N
T2JqZWN0RXhjaXRpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01P
YmplY3RDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwogCiBjbGFzcyBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE0Niw2ICsxNDYsMTEgQEAgSlNPYmpl
Y3QqIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6cHJvdG90eQogICAgIHJldHVybiBnZXRET01Qcm90
b3R5cGU8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pih2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAorSlNW
YWx1ZSBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3Qg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3Ry
dWN0b3I8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0
IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKIHZvaWQgSlNUZXN0QWN0
aXZlRE9NT2JqZWN0OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdEFj
dGl2ZURPTU9iamVjdCogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEFjdGl2ZURPTU9i
amVjdCo+KGNlbGwpOwpAQCAtMTYyLDUxICsxNjcsNDMgQEAgdGVtcGxhdGU8PiBpbmxpbmUgSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0KgogICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RB
Y3RpdmVET01PYmplY3QqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0JiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46Omdl
dDxqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCAiZXhjaXRpbmdBdHRyIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RB
Y3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
QWN0aXZlRE9NT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQotewot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwot
ICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoJnN0YXRl
LCB0aGlzT2JqZWN0LndyYXBwZWQoKS5mcmFtZSgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKQotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGltcGwuZXhjaXRp
bmdBdHRyKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpT
VGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNh
c3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCisgICAgYXV0byogcHJv
dG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBl
Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXBy
b3RvdHlwZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6
Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0Q29u
c3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAog
Ym9vbCBzZXRKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBkb21P
YmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUq
Pih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghZG9t
T2JqZWN0KSkgeworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CiAgICAgICAgIHRocm93Vk1UeXBl
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIGRvbU9i
amVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0
cnVjdG9yLCB2YWx1ZSk7CisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52
bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSk7CiB9CiAKLUpTVmFsdWUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpnZXRD
b25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8
SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLmZy
YW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5leGNpdGluZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pjo6
Z2V0PGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlz
VmFsdWUsICJleGNpdGluZ0F0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uRXhjaXRpbmdGdW5j
dGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3RBY3RpdmVET01PYmplY3Q+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAJKHJl
dmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE0ICs0NSwxNCBA
QCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiAKIC8vIEF0dHJpYnV0
ZXMKIAorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRK
U1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
CiBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9u
cyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0
cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29s
IHNldEpTVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0Q0VSZWFj
dGlvbnNQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoK
QEAgLTEzOSw2ICsxMzksMTEgQEAgSlNPYmplY3QqIEpTVGVzdENFUmVhY3Rpb25zOjpwcm90b3R5
cGUoVgogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0Q0VSZWFjdGlvbnM+KHZtLCBn
bG9iYWxPYmplY3QpOwogfQogCitKU1ZhbHVlIEpTVGVzdENFUmVhY3Rpb25zOjpnZXRDb25zdHJ1
Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3I+KHZt
LCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisK
IHZvaWQgSlNUZXN0Q0VSZWFjdGlvbnM6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgSlNUZXN0Q0VSZWFjdGlvbnMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RDRVJl
YWN0aW9ucyo+KGNlbGwpOwpAQCAtMTU1LDExICsxNjAsMjcgQEAgdGVtcGxhdGU8PiBpbmxpbmUg
SlNUZXN0Q0VSZWFjdGlvbnMqIElETAogICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rl
c3RDRVJlYWN0aW9ucyo+KHN0YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rp
b25zR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdENFUmVhY3Rpb25zJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
eworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVGVzdENFUmVhY3Rpb25zOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJv
dG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJl
YWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlv
bnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdENFUmVhY3Rpb25zPjo6Z2V0PGpzVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENF
UmVhY3Rpb25zR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHJpYnV0ZVdpdGhDRVJlYWN0
aW9ucyIpOworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICBy
ZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5h
bWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAog
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVh
Y3Rpb25zR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENFUmVhY3Rpb25zJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMTcxLDcwICsxOTIsNDMgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1
dGVXaXRoQ0VSZWFjdGlvbnNHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0Q0VSZWFjdGlvbnMmLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlv
bnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9ucz46OmdldDxqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RB
dHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVj
dEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0Q0VSZWFjdGlvbnM+OjpnZXQ8anNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFj
dGlvbnNHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cmlidXRlV2l0aENFUmVhY3Rpb25z
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RB
dHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VS
ZWFjdGlvbnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRS
ZWFjdGlvblN0YWNrOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJp
YnV0ZXdpdGhjZXJlYWN0aW9uc0F0dHIpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNldEF0dHJp
YnV0ZVdpdGhDRVJlYWN0aW9ucyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdENFUmVhY3Rpb25zJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0
aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0Q0VSZWFjdGlvbnM+OjpnZXQ8anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJp
YnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdpZmllckF0dHJpYnV0ZSIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q0VSZWFjdGlvbnM+OjpzZXQ8c2V0SlNUZXN0
Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNTZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFj
dGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdENFUmVhY3Rpb25zJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPj4o
c3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmli
dXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBp
bXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0YXR0cmlidXRld2l0aGNlcmVhY3Rpb25zQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0g
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0Q0VSZWFjdGlvbnNQcm90b3R5cGUqIGRvbU9iamVj
dCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlKj4odm0sIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdENFUmVhY3Rpb25zOjpnZXRDb25zdHJ1Y3Rv
cihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1ib29sIHNl
dEpTVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwotICAgIEpTVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFt
aWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7Ci0gICAgICAg
IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAg
cmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlO
YW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdENFUmVhY3Rpb25zJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNl
dEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENF
UmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q0VSZWFjdGlvbnM+
OjpzZXQ8c2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNGdW5jdGlv
bj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJpYnV0ZVdpdGhDRVJlYWN0
aW9ucyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q0VSZWFjdGlvbnM+OjpnZXQ8
anNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMiKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENF
UmVhY3Rpb25zRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVh
Y3Rpb25zU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENFUmVhY3Rpb25zJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtMjQyLDM5
ICsyMzYsMzAgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQQogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRoQ0VS
ZWFjdGlvbnMoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIGltcGwuc2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RhdHRyaWJ1dGV3
aXRoY2VyZWFjdGlvbnNBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zUmVmbGVj
dEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdENFUmVh
Y3Rpb25zJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCiBib29sIHNldEpTVGVzdENFUmVhY3Rp
b25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdENFUmVhY3Rpb25zPjo6c2V0PHNldEpTVGVzdENF
UmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0Z1bmN0aW9uPigqc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9u
cyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q0VSZWFjdGlvbnM+OjpzZXQ8c2V0
SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zU2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJl
YWN0aW9ucyIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNS
ZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllckF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9u
cyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBDdXN0b21FbGVt
ZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc0F0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNl
PFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXJBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RDRVJlYWN0aW9ucyYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dENFUmVhY3Rpb25zPjo6c2V0PHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1
dGVGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ2lmaWVy
QXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9ucz46
OmdldDxqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlR2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgInN0cmluZ2lmaWVyQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKQEAgLTI4NywxMCArMjcyLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdENFUmVhY3Rpb25zUwogICAgIHJldHVybiB0cnVlOwogfQogCi0KLUpTVmFsdWUgSlNU
ZXN0Q0VSZWFjdGlvbnM6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8
SlNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dENFUmVhY3Rpb25zPjo6c2V0PHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1
dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdpZmllckF0
dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
Q0VSZWFjdGlvbnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDRVJlYWN0aW9uc0NhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RDRVJlYWN0
aW9ucz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5j
cHAJKHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsMTAgKzQzLDEwIEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3QKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXJWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
clZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXJWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAK
IGNsYXNzIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGUgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEzMSw2ICsxMzEsMTEgQEAgSlNPYmpl
Y3QqIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OgogICAgIHJldHVybiBnZXRET01Qcm90
b3R5cGU8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4odm0sIGdsb2JhbE9iamVjdCk7CiB9
CiAKK0pTVmFsdWUgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6Z2V0Q29uc3RydWN0b3Io
Vk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVy
biBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0
b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7
Cit9CisKIHZvaWQgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6ZGVzdHJveShKU0M6OkpT
Q2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcio+KGNlbGwpOwpA
QCAtMTQ3LDU0ICsxNTIsNDQgQEAgdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0Q0VSZWFjdGlvbnNT
dHJpbgogICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyKj4oc3RhdGUudm0oKSwgc3RhdGUudGhpc1ZhbHVlKCkpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXImLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
cj46OmdldDxqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVHZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAidmFsdWUiKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQotewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC52YWx1ZSgpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8
SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQorICAgIGF1dG8q
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChV
TkxJS0VMWSghcHJvdG90eXBlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+
Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdENFUmVh
Y3Rpb25zU3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUt
Pmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNE
b3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlKj4odm0sIEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsK
KyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gZG9tT2JqZWN0
LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIHZhbHVlKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCks
IHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXImLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLnZhbHVlKCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllclZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllclZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj46OnNldDxzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyVmFsdWVGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInZhbHVl
Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
Pjo6Z2V0PGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZUdldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsICJ2YWx1ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllciYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyVmFsdWVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllciYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKQEAgLTIwNiwxMCArMjAxLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdENFUmVhY3Rpb25zUwogICAgIHJldHVybiB0cnVlOwogfQogCi0KLUpTVmFsdWUgSlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVj
dG9yPEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8
Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+OjpzZXQ8c2V0SlNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAidmFsdWUiKTsKIH0KIAogc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXI+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxNzQ1NikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsMTEgQEAg
SlNPYmplY3QqIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cgogICAgIHJldHVybiBnZXRE
T01Qcm90b3R5cGU8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KHZtLCBnbG9i
YWxPYmplY3QpOwogfQogCitKU1ZhbHVlIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKIHZvaWQgSlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3I6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KGNlbGwpOwpAQCAtMTM0LDI5
ICsxMzksMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQwogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQorICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5M
SUtFTFkoIXByb3RvdHlwZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgp
LCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7Ci0gICAgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5
cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
LSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBq
c0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3Rv
dHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZ
KCFwcm90b3R5cGUpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRl
LT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7Ci19Ci0K
LUpTVmFsdWUgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmdldENvbnN0cnVj
dG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QpKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCks
IHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpKTsKIH0KIAogdm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNv
bnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JX
aXRoTm9JbnRlcmZhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyMTc0NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRo
Tm9JbnRlcmZhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTIgKzEzNCwxMiBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RQ
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEN1c3RvbUNvbnN0
cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCisgICAgYXV0byog
cHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRo
Tm9JbnRlcmZhY2VPYmplY3RQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgY29uc3RydWN0b3Ig
PSBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9y
OjpjcmVhdGUoc3RhdGUtPnZtKCksIEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJm
YWNlT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShzdGF0ZS0+dm0oKSwgKmRvbU9i
amVjdC0+Z2xvYmFsT2JqZWN0KCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPm9iamVjdFBy
b3RvdHlwZSgpKSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGRvbU9iamVjdC0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gSlNUZXN0Q3VzdG9tQ29uc3Ry
dWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHN0YXRlLT52bSgp
LCBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUoc3RhdGUtPnZtKCksICpwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgp
LCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSksICpqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgLy8g
U2hhZG93aW5nIGNvbnN0cnVjdG9yIHByb3BlcnR5IHRvIGVuc3VyZSByZXVzaW5nIHRoZSBzYW1l
IGNvbnN0cnVjdG9yIG9iamVjdAotICAgIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgp
LCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvciwgRG9udEVu
dW0gfCBSZWFkT25seSk7CisgICAgcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0
YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCBEb250RW51bSB8
IFJlYWRPbmx5KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdG9yKTsKIH0K
IApAQCAtMTQ3LDE0ICsxNDcsMTMgQEAgYm9vbCBzZXRKU1Rlc3RDdXN0b21Db25zdHJ1Y3Rvcldp
dGhOb0ludAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhO
b0ludGVyZmFjZU9iamVjdFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8
SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RQcm90b3R5cGUqPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghZG9tT2Jq
ZWN0KSkgeworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEN1
c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJvdG90eXBlKj4odm0sIEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsK
ICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IKLSAgICByZXR1cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5w
cm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTsKKyAgICByZXR1cm4gcHJvdG90eXBl
LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogYm9vbCBKU1Rlc3RDdXN0
b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdE93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIu
Y3BwCShyZXZpc2lvbiAyMTc0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjYsNiArMTI2LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6cHJvdG8K
ICAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyPih2bSwg
Z2xvYmFsT2JqZWN0KTsKIH0KIAorSlNWYWx1ZSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0
Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
eworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNv
bnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCkpOworfQorCiB2b2lkIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpkZXN0cm95KEpTQzo6
SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiB0aGlzT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihjZWxsKTsKQEAgLTE3Niwy
OSArMTgxLDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ28KIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSog
ZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90
b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VM
WSghZG9tT2JqZWN0KSkKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwg
cHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCiBib29sIHNldEpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAg
IEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNE
b3duY2FzdDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CisgICAg
YXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChV
TkxJS0VMWSghcHJvdG90eXBlKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVj
dChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUp
OwotfQotCi1KU1ZhbHVlIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRDb25zdHJ1Y3RvcihW
TSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJu
IGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I+KHZt
LCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CisgICAg
cmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlO
YW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDdXN0b21OYW1lZEdldHRl
clByb3RvdHlwZUZ1bmN0aW9uQW5vdGhlckZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyPjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdERPTUpJVC5jcHAJKHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OCw2ICs1OCw4IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiB1bnNhZmUK
IAogLy8gQXR0cmlidXRlcwogCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVENvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RET01KSVRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RET01KSVRBbnlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
T01KSVRCb29sZWFuQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZUF0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CkBAIC05Myw4ICs5NSw2IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURG9t
U3RyaW4KIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ051bGxhYmxl
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVROb2RlTnVsbGFibGVBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNU
ZXN0RE9NSklUQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogc3RhdGljIGNvbnN0IEpTQzo6RE9NSklUOjpTaWdu
YXR1cmUgRE9NSklUU2lnbmF0dXJlRm9yVGVzdERPTUpJVEdldEF0dHJpYnV0ZSgodWludHB0cl90
KXVuc2FmZUpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlLCBKU1Rlc3RE
T01KSVQ6OmluZm8oKSwgSlNDOjpET01KSVQ6OkVmZmVjdDo6Zm9yUmVhZChET01KSVQ6OkFic3Ry
YWN0SGVhcFJlcG9zaXRvcnk6OkRPTSksIERPTUpJVDo6SURMUmVzdWx0VHlwZUZpbHRlcjxJRExO
dWxsYWJsZTxJRExET01TdHJpbmc+Pjo6dmFsdWUsIERPTUpJVDo6SURMQXJndW1lbnRUeXBlRmls
dGVyPElETERPTVN0cmluZz46OnZhbHVlKTsKIApAQCAtMjI2LDYgKzIyNiwxMSBAQCBKU09iamVj
dCogSlNUZXN0RE9NSklUOjpwcm90b3R5cGUoVk0mIHZtCiAgICAgcmV0dXJuIGdldERPTVByb3Rv
dHlwZTxKU1Rlc3RET01KSVQ+KHZtLCBnbG9iYWxPYmplY3QpOwogfQogCitKU1ZhbHVlIEpTVGVz
dERPTUpJVDo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RET01KSVRD
b25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxP
YmplY3QpKTsKK30KKwogdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RE9NSklUKiBJRExBdHRyaWJ1
dGU8SlNUZXN0RE9NSklUPjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUpCiB7CiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdERPTUpJVCo+
KHN0YXRlLnZtKCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKQEAgLTIzNiwxMSArMjQx
LDI3IEBAIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdERPTUpJVCogSURMT3BlcmEKICAgICByZXR1
cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RE9NSklUKj4oc3RhdGUudm0oKSwgc3RhdGUudGhp
c1ZhbHVlKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQW55QXR0
ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdERP
TUpJVFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYg
KFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RET01K
SVQ6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgp
KSk7Cit9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEFueUF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpT
VGVzdERPTUpJVENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVEFueUF0dHJHZXR0ZXI+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCAiYW55QXR0ciIpOworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8q
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdERPTUpJVFByb3RvdHlwZSo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5
cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBz
dGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRBbnlBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKQEAgLTI1Miw2ICsyNzMsMTEgQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdERPTUpJVEFueUF0dAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVEFueUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUQW55QXR0ckdldHRlcj4oKnN0YXRlLCB0aGlz
VmFsdWUsICJhbnlBdHRyIik7Cit9CisKIFRlc3RET01KSVRBbnlBdHRyRE9NSklUOjpUZXN0RE9N
SklUQW55QXR0ckRPTUpJVCgpCiAgICAgOiBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKGpzVGVz
dERPTUpJVEFueUF0dHIsIG51bGxwdHIsIEpTVGVzdERPTUpJVDo6aW5mbygpLCBET01KSVQ6OklE
TFJlc3VsdFR5cGVGaWx0ZXI8SURMQW55Pjo6dmFsdWUpCiB7CkBAIC0yNjMsMTMgKzI4OSw2IEBA
IEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKICAgICByZXR1cm4gJmNv
bXBpbGVyLmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQm9v
bGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJvb2xlYW5BdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVEJv
b2xlYW5BdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImJvb2xlYW5BdHRyIik7Ci19Ci0K
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCb29sZWFuQXR0ckdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtMjc5LDYgKzI5OCwx
MSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQm9vbGVhCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAorRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUQm9vbGVhbkF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklU
Qm9vbGVhbkF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiYm9vbGVhbkF0dHIiKTsKK30K
KwogVGVzdERPTUpJVEJvb2xlYW5BdHRyRE9NSklUOjpUZXN0RE9NSklUQm9vbGVhbkF0dHJET01K
SVQoKQogICAgIDogSlNDOjpET01KSVQ6OkdldHRlclNldHRlcihqc1Rlc3RET01KSVRCb29sZWFu
QXR0ciwgbnVsbHB0ciwgSlNUZXN0RE9NSklUOjppbmZvKCksIERPTUpJVDo6SURMUmVzdWx0VHlw
ZUZpbHRlcjxJRExCb29sZWFuPjo6dmFsdWUpCiB7CkBAIC0yOTAsMTMgKzMxNCw2IEBAIEpTQzo6
RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKICAgICByZXR1cm4gJmNvbXBpbGVy
LmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZUF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVEJ5dGVBdHRyR2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImJ5dGVBdHRyIik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RET01KSVRCeXRlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RE
T01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwpAQCAtMzA2LDYgKzMyMywxMSBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RE9NSklUQnl0ZUF0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRW5jb2Rl
ZEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUQnl0ZUF0dHJHZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAiYnl0ZUF0dHIiKTsKK30KKwogVGVzdERPTUpJVEJ5dGVBdHRyRE9NSklUOjpU
ZXN0RE9NSklUQnl0ZUF0dHJET01KSVQoKQogICAgIDogSlNDOjpET01KSVQ6OkdldHRlclNldHRl
cihqc1Rlc3RET01KSVRCeXRlQXR0ciwgbnVsbHB0ciwgSlNUZXN0RE9NSklUOjppbmZvKCksIERP
TUpJVDo6SURMUmVzdWx0VHlwZUZpbHRlcjxJRExCeXRlPjo6dmFsdWUpCiB7CkBAIC0zMTcsMTMg
KzMzOSw2IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKICAgICBy
ZXR1cm4gJmNvbXBpbGVyLmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
RE9NSklUT2N0ZXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRPY3RldEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Ci17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9N
SklUT2N0ZXRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm9jdGV0QXR0ciIpOwotfQot
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUT2N0ZXRBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC0zMzMsNiArMzQ4LDEx
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRPY3RldEEKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRPY3RldEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUT2N0
ZXRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm9jdGV0QXR0ciIpOworfQorCiBUZXN0
RE9NSklUT2N0ZXRBdHRyRE9NSklUOjpUZXN0RE9NSklUT2N0ZXRBdHRyRE9NSklUKCkKICAgICA6
IEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIoanNUZXN0RE9NSklUT2N0ZXRBdHRyLCBudWxscHRy
LCBKU1Rlc3RET01KSVQ6OmluZm8oKSwgRE9NSklUOjpJRExSZXN1bHRUeXBlRmlsdGVyPElETE9j
dGV0Pjo6dmFsdWUpCiB7CkBAIC0zNDQsMTMgKzM2NCw2IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJT
ZXR0ZXIqIGRvbUpJVEdldHRlclMKICAgICByZXR1cm4gJmNvbXBpbGVyLmdldCgpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RET01KSVRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUU2hvcnRBdHRyR2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgInNob3J0QXR0ciIpOwotfQotCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
RE9NSklUU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CkBAIC0zNjAsNiArMzczLDExIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RET01KSVRTaG9ydEEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RET01KSVRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RE
T01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUU2hvcnRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgInNob3J0QXR0ciIpOworfQorCiBUZXN0RE9NSklUU2hvcnRBdHRyRE9NSklUOjpUZXN0RE9N
SklUU2hvcnRBdHRyRE9NSklUKCkKICAgICA6IEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIoanNU
ZXN0RE9NSklUU2hvcnRBdHRyLCBudWxscHRyLCBKU1Rlc3RET01KSVQ6OmluZm8oKSwgRE9NSklU
OjpJRExSZXN1bHRUeXBlRmlsdGVyPElETFNob3J0Pjo6dmFsdWUpCiB7CkBAIC0zNzEsMTMgKzM4
OSw2IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKICAgICByZXR1
cm4gJmNvbXBpbGVyLmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9N
SklUVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2ln
bmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6
Z2V0PGpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgInVuc2lnbmVkU2hvcnRBdHRyIik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RET01KSVRVbnNpZ25lZFNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RE
T01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwpAQCAtMzg3LDYgKzM5OCwxMSBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RE9NSklUVW5zaWduCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRW5jb2Rl
ZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVW5zaWduZWRTaG9ydEF0
dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidW5zaWduZWRTaG9ydEF0dHIiKTsKK30KKwog
VGVzdERPTUpJVFVuc2lnbmVkU2hvcnRBdHRyRE9NSklUOjpUZXN0RE9NSklUVW5zaWduZWRTaG9y
dEF0dHJET01KSVQoKQogICAgIDogSlNDOjpET01KSVQ6OkdldHRlclNldHRlcihqc1Rlc3RET01K
SVRVbnNpZ25lZFNob3J0QXR0ciwgbnVsbHB0ciwgSlNUZXN0RE9NSklUOjppbmZvKCksIERPTUpJ
VDo6SURMUmVzdWx0VHlwZUZpbHRlcjxJRExVbnNpZ25lZFNob3J0Pjo6dmFsdWUpCiB7CkBAIC0z
OTgsMTMgKzQxNCw2IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMK
ICAgICByZXR1cm4gJmNvbXBpbGVyLmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RE9NSklUTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVz
dERPTUpJVExvbmdBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImxvbmdBdHRyIik7Ci19
Ci0KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25nQXR0ckdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNDE0LDYgKzQyMywx
MSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0F0CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAorRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0F0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUTG9u
Z0F0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibG9uZ0F0dHIiKTsKK30KKwogVGVzdERP
TUpJVExvbmdBdHRyRE9NSklUOjpUZXN0RE9NSklUTG9uZ0F0dHJET01KSVQoKQogICAgIDogSlND
OjpET01KSVQ6OkdldHRlclNldHRlcihqc1Rlc3RET01KSVRMb25nQXR0ciwgbnVsbHB0ciwgSlNU
ZXN0RE9NSklUOjppbmZvKCksIERPTUpJVDo6SURMUmVzdWx0VHlwZUZpbHRlcjxJRExMb25nPjo6
dmFsdWUpCiB7CkBAIC00MjUsMTMgKzQzOSw2IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIq
IGRvbUpJVEdldHRlclMKICAgICByZXR1cm4gJmNvbXBpbGVyLmdldCgpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nQXR0ckdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpT
VmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdBdHRyR2V0
dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ0F0dHIiKTsKLX0KLQogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTQ0MSw2ICs0NDgsMTEg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbgogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9N
SklUVW5zaWduZWRMb25nQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1bnNpZ25lZExv
bmdBdHRyIik7Cit9CisKIFRlc3RET01KSVRVbnNpZ25lZExvbmdBdHRyRE9NSklUOjpUZXN0RE9N
SklUVW5zaWduZWRMb25nQXR0ckRPTUpJVCgpCiAgICAgOiBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0
dGVyKGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0F0dHIsIG51bGxwdHIsIEpTVGVzdERPTUpJVDo6
aW5mbygpLCBET01KSVQ6OklETFJlc3VsdFR5cGVGaWx0ZXI8SURMVW5zaWduZWRMb25nPjo6dmFs
dWUpCiB7CkBAIC00NTIsMTMgKzQ2NCw2IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRv
bUpJVEdldHRlclMKICAgICByZXR1cm4gJmNvbXBpbGVyLmdldCgpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RET01KSVRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUTG9uZ0xvbmdBdHRyR2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgImxvbmdMb25nQXR0ciIpOwotfQotCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RE9NSklUTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJ
VCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CkBAIC00NjgsNiArNDczLDExIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RET01KSVRMb25nTG8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RET01KSVRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUTG9uZ0xvbmdBdHRyR2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgImxvbmdMb25nQXR0ciIpOworfQorCiBUZXN0RE9NSklUTG9uZ0xvbmdB
dHRyRE9NSklUOjpUZXN0RE9NSklUTG9uZ0xvbmdBdHRyRE9NSklUKCkKICAgICA6IEpTQzo6RE9N
SklUOjpHZXR0ZXJTZXR0ZXIoanNUZXN0RE9NSklUTG9uZ0xvbmdBdHRyLCBudWxscHRyLCBKU1Rl
c3RET01KSVQ6OmluZm8oKSwgRE9NSklUOjpJRExSZXN1bHRUeXBlRmlsdGVyPElETExvbmdMb25n
Pjo6dmFsdWUpCiB7CkBAIC00NzksMTMgKzQ4OSw2IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0
ZXIqIGRvbUpJVEdldHRlclMKICAgICByZXR1cm4gJmNvbXBpbGVyLmdldCgpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVFVuc2lnbmVk
TG9uZ0xvbmdBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ0xvbmdB
dHRyIik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExv
bmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwpAQCAtNDk1LDYgKzQ5OCwxMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9N
SklUVW5zaWduCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRW5jb2RlZEpTVmFsdWUganNUZXN0
RE9NSklUVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKK30KKwogVGVzdERP
TUpJVFVuc2lnbmVkTG9uZ0xvbmdBdHRyRE9NSklUOjpUZXN0RE9NSklUVW5zaWduZWRMb25nTG9u
Z0F0dHJET01KSVQoKQogICAgIDogSlNDOjpET01KSVQ6OkdldHRlclNldHRlcihqc1Rlc3RET01K
SVRVbnNpZ25lZExvbmdMb25nQXR0ciwgbnVsbHB0ciwgSlNUZXN0RE9NSklUOjppbmZvKCksIERP
TUpJVDo6SURMUmVzdWx0VHlwZUZpbHRlcjxJRExVbnNpZ25lZExvbmdMb25nPjo6dmFsdWUpCiB7
CkBAIC01MDYsMTMgKzUxNCw2IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdl
dHRlclMKICAgICByZXR1cm4gJmNvbXBpbGVyLmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RE9NSklURmxvYXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJ
VCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01K
SVRGbG9hdEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+Ojpn
ZXQ8anNUZXN0RE9NSklURmxvYXRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImZsb2F0
QXR0ciIpOwotfQotCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURmxvYXRBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01
MjIsNiArNTIzLDExIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRGbG9hdEEK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRGbG9h
dEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNU
ZXN0RE9NSklURmxvYXRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImZsb2F0QXR0ciIp
OworfQorCiBUZXN0RE9NSklURmxvYXRBdHRyRE9NSklUOjpUZXN0RE9NSklURmxvYXRBdHRyRE9N
SklUKCkKICAgICA6IEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIoanNUZXN0RE9NSklURmxvYXRB
dHRyLCBudWxscHRyLCBKU1Rlc3RET01KSVQ6OmluZm8oKSwgRE9NSklUOjpJRExSZXN1bHRUeXBl
RmlsdGVyPElETEZsb2F0Pjo6dmFsdWUpCiB7CkBAIC01MzMsMTMgKzUzOSw2IEBAIEpTQzo6RE9N
SklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKICAgICByZXR1cm4gJmNvbXBpbGVyLmdl
dCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVk
RmxvYXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9h
dEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNU
ZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
InVucmVzdHJpY3RlZEZsb2F0QXR0ciIpOwotfQotCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01NDksNiArNTQ4LDExIEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9hdEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVW5yZXN0
cmljdGVkRmxvYXRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVucmVzdHJpY3RlZEZs
b2F0QXR0ciIpOworfQorCiBUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXRBdHRyRE9NSklUOjpU
ZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXRBdHRyRE9NSklUKCkKICAgICA6IEpTQzo6RE9NSklU
OjpHZXR0ZXJTZXR0ZXIoanNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXRBdHRyLCBudWxscHRy
LCBKU1Rlc3RET01KSVQ6OmluZm8oKSwgRE9NSklUOjpJRExSZXN1bHRUeXBlRmlsdGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0Pjo6dmFsdWUpCiB7CkBAIC01NjAsMTMgKzU2NCw2IEBAIEpTQzo6RE9N
SklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKICAgICByZXR1cm4gJmNvbXBpbGVyLmdl
dCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURG91YmxlQXR0ckdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
LQotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURG91YmxlQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVREb3VibGVBdHRyR2V0
dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImRvdWJsZUF0dHIiKTsKLX0KLQogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdERPTUpJVERvdWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU3Niw2ICs1NzMsMTEgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVERvdWJsZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVERvdWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklURG91YmxlQXR0ckdldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsICJkb3VibGVBdHRyIik7Cit9CisKIFRlc3RET01KSVREb3Vi
bGVBdHRyRE9NSklUOjpUZXN0RE9NSklURG91YmxlQXR0ckRPTUpJVCgpCiAgICAgOiBKU0M6OkRP
TUpJVDo6R2V0dGVyU2V0dGVyKGpzVGVzdERPTUpJVERvdWJsZUF0dHIsIG51bGxwdHIsIEpTVGVz
dERPTUpJVDo6aW5mbygpLCBET01KSVQ6OklETFJlc3VsdFR5cGVGaWx0ZXI8SURMRG91YmxlPjo6
dmFsdWUpCiB7CkBAIC01ODcsMTMgKzU4OSw2IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIq
IGRvbUpJVEdldHRlclMKICAgICByZXR1cm4gJmNvbXBpbGVyLmdldCgpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlQXR0ckdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5j
b2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRVbnJlc3Ry
aWN0ZWREb3VibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVucmVzdHJpY3RlZERv
dWJsZUF0dHIiKTsKLX0KLQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVz
dHJpY3RlZERvdWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKQEAgLTYwMyw2ICs1OTgsMTEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdERPTUpJVFVucmVzdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91Ymxl
QXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1bnJlc3RyaWN0ZWREb3VibGVBdHRyIik7
Cit9CisKIFRlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVBdHRyRE9NSklUOjpUZXN0RE9NSklU
VW5yZXN0cmljdGVkRG91YmxlQXR0ckRPTUpJVCgpCiAgICAgOiBKU0M6OkRPTUpJVDo6R2V0dGVy
U2V0dGVyKGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZUF0dHIsIG51bGxwdHIsIEpTVGVz
dERPTUpJVDo6aW5mbygpLCBET01KSVQ6OklETFJlc3VsdFR5cGVGaWx0ZXI8SURMVW5yZXN0cmlj
dGVkRG91YmxlPjo6dmFsdWUpCiB7CkBAIC02MTQsMTMgKzYxNCw2IEBAIEpTQzo6RE9NSklUOjpH
ZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKICAgICByZXR1cm4gJmNvbXBpbGVyLmdldCgpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURG9tU3RyaW5nQXR0ckdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQot
RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURG9tU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVREb21TdHJpbmdBdHRy
R2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImRvbVN0cmluZ0F0dHIiKTsKLX0KLQogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVERvbVN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTYzMCw2ICs2MjMsMTEgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVERvbVN0cgogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVERvbVN0cmluZ0F0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklURG9t
U3RyaW5nQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJkb21TdHJpbmdBdHRyIik7Cit9
CisKIFRlc3RET01KSVREb21TdHJpbmdBdHRyRE9NSklUOjpUZXN0RE9NSklURG9tU3RyaW5nQXR0
ckRPTUpJVCgpCiAgICAgOiBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKGpzVGVzdERPTUpJVERv
bVN0cmluZ0F0dHIsIG51bGxwdHIsIEpTVGVzdERPTUpJVDo6aW5mbygpLCBET01KSVQ6OklETFJl
c3VsdFR5cGVGaWx0ZXI8SURMRE9NU3RyaW5nPjo6dmFsdWUpCiB7CkBAIC02NDEsMTMgKzYzOSw2
IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKICAgICByZXR1cm4g
JmNvbXBpbGVyLmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
Qnl0ZVN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVz
dERPTUpJVEJ5dGVTdHJpbmdBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImJ5dGVTdHJp
bmdBdHRyIik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlU3Ry
aW5nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwpAQCAtNjU3LDYgKzY0OCwxMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
Qnl0ZVN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRW5jb2RlZEpTVmFsdWUganNUZXN0RE9N
SklUQnl0ZVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01K
SVQ+OjpnZXQ8anNUZXN0RE9NSklUQnl0ZVN0cmluZ0F0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCAiYnl0ZVN0cmluZ0F0dHIiKTsKK30KKwogVGVzdERPTUpJVEJ5dGVTdHJpbmdBdHRyRE9N
SklUOjpUZXN0RE9NSklUQnl0ZVN0cmluZ0F0dHJET01KSVQoKQogICAgIDogSlNDOjpET01KSVQ6
OkdldHRlclNldHRlcihqc1Rlc3RET01KSVRCeXRlU3RyaW5nQXR0ciwgbnVsbHB0ciwgSlNUZXN0
RE9NSklUOjppbmZvKCksIERPTUpJVDo6SURMUmVzdWx0VHlwZUZpbHRlcjxJRExCeXRlU3RyaW5n
Pjo6dmFsdWUpCiB7CkBAIC02NjgsMTMgKzY2NCw2IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0
ZXIqIGRvbUpJVEdldHRlclMKICAgICByZXR1cm4gJmNvbXBpbGVyLmdldCgpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVXN2U3RyaW5nQXR0ckdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpT
VmFsdWUganNUZXN0RE9NSklUVXN2U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRyR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgInVzdlN0cmluZ0F0dHIiKTsKLX0KLQogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERPTUpJVFVzdlN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTY4NCw2ICs2NzMsMTEgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVzdlN0cgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVzdlN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVXN2U3RyaW5nQXR0
ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1c3ZTdHJpbmdBdHRyIik7Cit9CisKIFRlc3RE
T01KSVRVc3ZTdHJpbmdBdHRyRE9NSklUOjpUZXN0RE9NSklUVXN2U3RyaW5nQXR0ckRPTUpJVCgp
CiAgICAgOiBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKGpzVGVzdERPTUpJVFVzdlN0cmluZ0F0
dHIsIG51bGxwdHIsIEpTVGVzdERPTUpJVDo6aW5mbygpLCBET01KSVQ6OklETFJlc3VsdFR5cGVG
aWx0ZXI8SURMVVNWU3RyaW5nPjo6dmFsdWUpCiB7CkBAIC02OTUsMTMgKzY4OSw2IEBAIEpTQzo6
RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKICAgICByZXR1cm4gJmNvbXBpbGVy
LmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTm9kZUF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVE5vZGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVE5vZGVBdHRyR2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgIm5vZGVBdHRyIik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RET01KSVROb2RlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RE
T01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzExLDYgKzY5OCwxMSBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RE9NSklUTm9kZUF0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRW5jb2Rl
ZEpTVmFsdWUganNUZXN0RE9NSklUTm9kZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUTm9kZUF0dHJHZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAibm9kZUF0dHIiKTsKK30KKwogVGVzdERPTUpJVE5vZGVBdHRyRE9NSklUOjpU
ZXN0RE9NSklUTm9kZUF0dHJET01KSVQoKQogICAgIDogSlNDOjpET01KSVQ6OkdldHRlclNldHRl
cihqc1Rlc3RET01KSVROb2RlQXR0ciwgbnVsbHB0ciwgSlNUZXN0RE9NSklUOjppbmZvKCksIERP
TUpJVDo6SURMUmVzdWx0VHlwZUZpbHRlcjxJRExJbnRlcmZhY2U8Tm9kZT4+Ojp2YWx1ZSkKIHsK
QEAgLTcyMiwxMyArNzE0LDYgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0
dGVyUwogICAgIHJldHVybiAmY29tcGlsZXIuZ2V0KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RET01KSVRCb29sZWFuTnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RET01KSVRCb29sZWFuTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVEJvb2xlYW5OdWxsYWJsZUF0dHJHZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiYm9vbGVhbk51bGxhYmxlQXR0ciIpOwotfQotCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQm9vbGVhbk51bGxhYmxlQXR0ckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzM4LDYgKzcy
MywxMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQm9vbGVhCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAorRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUQm9vbGVhbk51bGxh
YmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxq
c1Rlc3RET01KSVRCb29sZWFuTnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
ImJvb2xlYW5OdWxsYWJsZUF0dHIiKTsKK30KKwogVGVzdERPTUpJVEJvb2xlYW5OdWxsYWJsZUF0
dHJET01KSVQ6OlRlc3RET01KSVRCb29sZWFuTnVsbGFibGVBdHRyRE9NSklUKCkKICAgICA6IEpT
Qzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIoanNUZXN0RE9NSklUQm9vbGVhbk51bGxhYmxlQXR0ciwg
bnVsbHB0ciwgSlNUZXN0RE9NSklUOjppbmZvKCksIERPTUpJVDo6SURMUmVzdWx0VHlwZUZpbHRl
cjxJRExOdWxsYWJsZTxJRExCb29sZWFuPj46OnZhbHVlKQogewpAQCAtNzQ5LDEzICs3MzksNiBA
QCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAgICAgcmV0dXJuICZj
b21waWxlci5nZXQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5
dGVOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVOdWxsYWJs
ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNU
ZXN0RE9NSklUQnl0ZU51bGxhYmxlQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJieXRl
TnVsbGFibGVBdHRyIik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRC
eXRlTnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CkBAIC03NjUsNiArNzQ4LDExIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RET01KSVRCeXRlTnUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RET01KSVRCeXRlTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVEJ5dGVOdWxsYWJsZUF0dHJHZXR0ZXI+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCAiYnl0ZU51bGxhYmxlQXR0ciIpOworfQorCiBUZXN0RE9NSklUQnl0
ZU51bGxhYmxlQXR0ckRPTUpJVDo6VGVzdERPTUpJVEJ5dGVOdWxsYWJsZUF0dHJET01KSVQoKQog
ICAgIDogSlNDOjpET01KSVQ6OkdldHRlclNldHRlcihqc1Rlc3RET01KSVRCeXRlTnVsbGFibGVB
dHRyLCBudWxscHRyLCBKU1Rlc3RET01KSVQ6OmluZm8oKSwgRE9NSklUOjpJRExSZXN1bHRUeXBl
RmlsdGVyPElETE51bGxhYmxlPElETEJ5dGU+Pjo6dmFsdWUpCiB7CkBAIC03NzYsMTMgKzc2NCw2
IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKICAgICByZXR1cm4g
JmNvbXBpbGVyLmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
T2N0ZXROdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0TnVs
bGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0
PGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
Im9jdGV0TnVsbGFibGVBdHRyIik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RE
T01KSVRPY3RldE51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RET01K
SVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwpAQCAtNzkyLDYgKzc3MywxMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUT2N0ZXROCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRW5jb2RlZEpT
VmFsdWUganNUZXN0RE9NSklUT2N0ZXROdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUT2N0ZXROdWxsYWJsZUF0dHJH
ZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAib2N0ZXROdWxsYWJsZUF0dHIiKTsKK30KKwogVGVz
dERPTUpJVE9jdGV0TnVsbGFibGVBdHRyRE9NSklUOjpUZXN0RE9NSklUT2N0ZXROdWxsYWJsZUF0
dHJET01KSVQoKQogICAgIDogSlNDOjpET01KSVQ6OkdldHRlclNldHRlcihqc1Rlc3RET01KSVRP
Y3RldE51bGxhYmxlQXR0ciwgbnVsbHB0ciwgSlNUZXN0RE9NSklUOjppbmZvKCksIERPTUpJVDo6
SURMUmVzdWx0VHlwZUZpbHRlcjxJRExOdWxsYWJsZTxJRExPY3RldD4+Ojp2YWx1ZSkKIHsKQEAg
LTgwMywxMyArNzg5LDYgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVy
UwogICAgIHJldHVybiAmY29tcGlsZXIuZ2V0KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RET01KSVRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RE
T01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0
RE9NSklUU2hvcnROdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUU2hvcnROdWxsYWJsZUF0dHJHZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCAic2hvcnROdWxsYWJsZUF0dHIiKTsKLX0KLQogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERPTUpJVFNob3J0TnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC04MTksNiArNzk4LDExIEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydE4KICAgICByZXR1cm4gcmVzdWx0Owog
fQogCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydE51bGxhYmxlQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRTaG9y
dE51bGxhYmxlQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJzaG9ydE51bGxhYmxlQXR0
ciIpOworfQorCiBUZXN0RE9NSklUU2hvcnROdWxsYWJsZUF0dHJET01KSVQ6OlRlc3RET01KSVRT
aG9ydE51bGxhYmxlQXR0ckRPTUpJVCgpCiAgICAgOiBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVy
KGpzVGVzdERPTUpJVFNob3J0TnVsbGFibGVBdHRyLCBudWxscHRyLCBKU1Rlc3RET01KSVQ6Omlu
Zm8oKSwgRE9NSklUOjpJRExSZXN1bHRUeXBlRmlsdGVyPElETE51bGxhYmxlPElETFNob3J0Pj46
OnZhbHVlKQogewpAQCAtODMwLDEzICs4MTQsNiBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVy
KiBkb21KSVRHZXR0ZXJTCiAgICAgcmV0dXJuICZjb21waWxlci5nZXQoKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnROdWxsYWJsZUF0dHJHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0K
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnROdWxsYWJsZUF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklU
VW5zaWduZWRTaG9ydE51bGxhYmxlQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1bnNp
Z25lZFNob3J0TnVsbGFibGVBdHRyIik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RET01KSVRVbnNpZ25lZFNob3J0TnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC04NDYsNiArODIzLDExIEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ24KICAgICByZXR1cm4gcmVzdWx0OwogfQog
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0TnVsbGFibGVBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
eworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJ
VFVuc2lnbmVkU2hvcnROdWxsYWJsZUF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidW5z
aWduZWRTaG9ydE51bGxhYmxlQXR0ciIpOworfQorCiBUZXN0RE9NSklUVW5zaWduZWRTaG9ydE51
bGxhYmxlQXR0ckRPTUpJVDo6VGVzdERPTUpJVFVuc2lnbmVkU2hvcnROdWxsYWJsZUF0dHJET01K
SVQoKQogICAgIDogSlNDOjpET01KSVQ6OkdldHRlclNldHRlcihqc1Rlc3RET01KSVRVbnNpZ25l
ZFNob3J0TnVsbGFibGVBdHRyLCBudWxscHRyLCBKU1Rlc3RET01KSVQ6OmluZm8oKSwgRE9NSklU
OjpJRExSZXN1bHRUeXBlRmlsdGVyPElETE51bGxhYmxlPElETFVuc2lnbmVkU2hvcnQ+Pjo6dmFs
dWUpCiB7CkBAIC04NTcsMTMgKzgzOSw2IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRv
bUpJVEdldHRlclMKICAgICByZXR1cm4gJmNvbXBpbGVyLmdldCgpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ051bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFs
dWUganNUZXN0RE9NSklUTG9uZ051bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRMb25nTnVsbGFibGVBdHRyR2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImxvbmdOdWxsYWJsZUF0dHIiKTsKLX0KLQogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTg3Myw2ICs4NDgsMTEgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdOdQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdOdWxsYWJsZUF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklU
TG9uZ051bGxhYmxlQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJsb25nTnVsbGFibGVB
dHRyIik7Cit9CisKIFRlc3RET01KSVRMb25nTnVsbGFibGVBdHRyRE9NSklUOjpUZXN0RE9NSklU
TG9uZ051bGxhYmxlQXR0ckRPTUpJVCgpCiAgICAgOiBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVy
KGpzVGVzdERPTUpJVExvbmdOdWxsYWJsZUF0dHIsIG51bGxwdHIsIEpTVGVzdERPTUpJVDo6aW5m
bygpLCBET01KSVQ6OklETFJlc3VsdFR5cGVGaWx0ZXI8SURMTnVsbGFibGU8SURMTG9uZz4+Ojp2
YWx1ZSkKIHsKQEAgLTg4NCwxMyArODY0LDYgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciog
ZG9tSklUR2V0dGVyUwogICAgIHJldHVybiAmY29tcGlsZXIuZ2V0KCk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdOdWxsYWJsZUF0dHJHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ051bGxhYmxlQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRVbnNp
Z25lZExvbmdOdWxsYWJsZUF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidW5zaWduZWRM
b25nTnVsbGFibGVBdHRyIik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01K
SVRVbnNpZ25lZExvbmdOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTkwMCw2ICs4NzMsMTEgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ051bGxhYmxlQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRVbnNpZ25l
ZExvbmdOdWxsYWJsZUF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidW5zaWduZWRMb25n
TnVsbGFibGVBdHRyIik7Cit9CisKIFRlc3RET01KSVRVbnNpZ25lZExvbmdOdWxsYWJsZUF0dHJE
T01KSVQ6OlRlc3RET01KSVRVbnNpZ25lZExvbmdOdWxsYWJsZUF0dHJET01KSVQoKQogICAgIDog
SlNDOjpET01KSVQ6OkdldHRlclNldHRlcihqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdOdWxsYWJs
ZUF0dHIsIG51bGxwdHIsIEpTVGVzdERPTUpJVDo6aW5mbygpLCBET01KSVQ6OklETFJlc3VsdFR5
cGVGaWx0ZXI8SURMTnVsbGFibGU8SURMVW5zaWduZWRMb25nPj46OnZhbHVlKQogewpAQCAtOTEx
LDEzICs4ODksNiBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAg
ICAgcmV0dXJuICZjb21waWxlci5nZXQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdERPTUpJVExvbmdMb25nTnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERP
TUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
T01KSVRMb25nTG9uZ051bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRMb25nTG9uZ051bGxhYmxlQXR0ckdldHRlcj4o
KnN0YXRlLCB0aGlzVmFsdWUsICJsb25nTG9uZ051bGxhYmxlQXR0ciIpOwotfQotCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdOdWxsYWJsZUF0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTkyNyw2ICs4OTgs
MTEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdMbwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdMb25nTnVsbGFi
bGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpz
VGVzdERPTUpJVExvbmdMb25nTnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
ImxvbmdMb25nTnVsbGFibGVBdHRyIik7Cit9CisKIFRlc3RET01KSVRMb25nTG9uZ051bGxhYmxl
QXR0ckRPTUpJVDo6VGVzdERPTUpJVExvbmdMb25nTnVsbGFibGVBdHRyRE9NSklUKCkKICAgICA6
IEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIoanNUZXN0RE9NSklUTG9uZ0xvbmdOdWxsYWJsZUF0
dHIsIG51bGxwdHIsIEpTVGVzdERPTUpJVDo6aW5mbygpLCBET01KSVQ6OklETFJlc3VsdFR5cGVG
aWx0ZXI8SURMTnVsbGFibGU8SURMTG9uZ0xvbmc+Pjo6dmFsdWUpCiB7CkBAIC05MzgsMTMgKzkx
NCw2IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKICAgICByZXR1
cm4gJmNvbXBpbGVyLmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9N
SklUVW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RE
T01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0
RE9NSklUVW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nTnVs
bGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ0xvbmdOdWxs
YWJsZUF0dHIiKTsKLX0KLQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2ln
bmVkTG9uZ0xvbmdOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9N
SklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKQEAgLTk1NCw2ICs5MjMsMTEgQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdERPTUpJVFVuc2lnbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdOdWxsYWJsZUF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVW5zaWdu
ZWRMb25nTG9uZ051bGxhYmxlQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1bnNpZ25l
ZExvbmdMb25nTnVsbGFibGVBdHRyIik7Cit9CisKIFRlc3RET01KSVRVbnNpZ25lZExvbmdMb25n
TnVsbGFibGVBdHRyRE9NSklUOjpUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0
ckRPTUpJVCgpCiAgICAgOiBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKGpzVGVzdERPTUpJVFVu
c2lnbmVkTG9uZ0xvbmdOdWxsYWJsZUF0dHIsIG51bGxwdHIsIEpTVGVzdERPTUpJVDo6aW5mbygp
LCBET01KSVQ6OklETFJlc3VsdFR5cGVGaWx0ZXI8SURMTnVsbGFibGU8SURMVW5zaWduZWRMb25n
TG9uZz4+Ojp2YWx1ZSkKIHsKQEAgLTk2NSwxMyArOTM5LDYgQEAgSlNDOjpET01KSVQ6OkdldHRl
clNldHRlciogZG9tSklUR2V0dGVyUwogICAgIHJldHVybiAmY29tcGlsZXIuZ2V0KCk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRGbG9hdE51bGxhYmxlQXR0ckdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQot
RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURmxvYXROdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklURmxvYXROdWxs
YWJsZUF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiZmxvYXROdWxsYWJsZUF0dHIiKTsK
LX0KLQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0TnVsbGFibGVBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC05
ODEsNiArOTQ4LDExIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRGbG9hdE4K
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRGbG9h
dE51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46
OmdldDxqc1Rlc3RET01KSVRGbG9hdE51bGxhYmxlQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFs
dWUsICJmbG9hdE51bGxhYmxlQXR0ciIpOworfQorCiBUZXN0RE9NSklURmxvYXROdWxsYWJsZUF0
dHJET01KSVQ6OlRlc3RET01KSVRGbG9hdE51bGxhYmxlQXR0ckRPTUpJVCgpCiAgICAgOiBKU0M6
OkRPTUpJVDo6R2V0dGVyU2V0dGVyKGpzVGVzdERPTUpJVEZsb2F0TnVsbGFibGVBdHRyLCBudWxs
cHRyLCBKU1Rlc3RET01KSVQ6OmluZm8oKSwgRE9NSklUOjpJRExSZXN1bHRUeXBlRmlsdGVyPElE
TE51bGxhYmxlPElETEZsb2F0Pj46OnZhbHVlKQogewpAQCAtOTkyLDEzICs5NjQsNiBAQCBKU0M6
OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAgICAgcmV0dXJuICZjb21waWxl
ci5nZXQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJp
Y3RlZEZsb2F0TnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJl
c3RyaWN0ZWRGbG9hdE51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9hdE51bGxhYmxlQXR0
ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1bnJlc3RyaWN0ZWRGbG9hdE51bGxhYmxlQXR0
ciIpOwotfQotCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVk
RmxvYXROdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKQEAgLTEwMDgsNiArOTczLDExIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RET01KSVRVbnJlc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9hdE51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRVbnJlc3RyaWN0
ZWRGbG9hdE51bGxhYmxlQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1bnJlc3RyaWN0
ZWRGbG9hdE51bGxhYmxlQXR0ciIpOworfQorCiBUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXRO
dWxsYWJsZUF0dHJET01KSVQ6OlRlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9hdE51bGxhYmxlQXR0
ckRPTUpJVCgpCiAgICAgOiBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKGpzVGVzdERPTUpJVFVu
cmVzdHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyLCBudWxscHRyLCBKU1Rlc3RET01KSVQ6OmluZm8o
KSwgRE9NSklUOjpJRExSZXN1bHRUeXBlRmlsdGVyPElETE51bGxhYmxlPElETFVucmVzdHJpY3Rl
ZEZsb2F0Pj46OnZhbHVlKQogewpAQCAtMTAxOSwxMyArOTg5LDYgQEAgSlNDOjpET01KSVQ6Okdl
dHRlclNldHRlciogZG9tSklUR2V0dGVyUwogICAgIHJldHVybiAmY29tcGlsZXIuZ2V0KCk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVREb3VibGVOdWxsYWJsZUF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVERvdWJsZU51bGxhYmxlQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVREb3Vi
bGVOdWxsYWJsZUF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiZG91YmxlTnVsbGFibGVB
dHRyIik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVREb3VibGVOdWxs
YWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKQEAgLTEwMzUsNiArOTk4LDExIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01K
SVREb3VibGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
T01KSVREb3VibGVOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklURG91YmxlTnVsbGFibGVBdHRyR2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgImRvdWJsZU51bGxhYmxlQXR0ciIpOworfQorCiBUZXN0RE9NSklURG91
YmxlTnVsbGFibGVBdHRyRE9NSklUOjpUZXN0RE9NSklURG91YmxlTnVsbGFibGVBdHRyRE9NSklU
KCkKICAgICA6IEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIoanNUZXN0RE9NSklURG91YmxlTnVs
bGFibGVBdHRyLCBudWxscHRyLCBKU1Rlc3RET01KSVQ6OmluZm8oKSwgRE9NSklUOjpJRExSZXN1
bHRUeXBlRmlsdGVyPElETE51bGxhYmxlPElETERvdWJsZT4+Ojp2YWx1ZSkKIHsKQEAgLTEwNDYs
MTMgKzEwMTQsNiBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAg
ICAgcmV0dXJuICZjb21waWxlci5nZXQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZU51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFs
dWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVFVucmVzdHJp
Y3RlZERvdWJsZU51bGxhYmxlQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1bnJlc3Ry
aWN0ZWREb3VibGVOdWxsYWJsZUF0dHIiKTsKLX0KLQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZU51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtMTA2Miw2ICsxMDIzLDExIEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3QKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVO
dWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+Ojpn
ZXQ8anNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyR2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgInVucmVzdHJpY3RlZERvdWJsZU51bGxhYmxlQXR0ciIpOworfQorCiBU
ZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyRE9NSklUOjpUZXN0RE9NSklU
VW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyRE9NSklUKCkKICAgICA6IEpTQzo6RE9NSklU
OjpHZXR0ZXJTZXR0ZXIoanNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRy
LCBudWxscHRyLCBKU1Rlc3RET01KSVQ6OmluZm8oKSwgRE9NSklUOjpJRExSZXN1bHRUeXBlRmls
dGVyPElETE51bGxhYmxlPElETFVucmVzdHJpY3RlZERvdWJsZT4+Ojp2YWx1ZSkKIHsKQEAgLTEw
NzMsMTMgKzEwMzksNiBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJT
CiAgICAgcmV0dXJuICZjb21waWxlci5nZXQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdERPTUpJVERvbVN0cmluZ051bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNU
ZXN0RE9NSklURG9tU3RyaW5nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVERvbVN0cmluZ051bGxhYmxlQXR0ckdl
dHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJkb21TdHJpbmdOdWxsYWJsZUF0dHIiKTsKLX0KLQog
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVERvbVN0cmluZ051bGxhYmxlQXR0ckdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtMTA4
OSw2ICsxMDQ4LDExIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVREb21TdHIK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVREb21T
dHJpbmdOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01K
SVQ+OjpnZXQ8anNUZXN0RE9NSklURG9tU3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgImRvbVN0cmluZ051bGxhYmxlQXR0ciIpOworfQorCiBUZXN0RE9NSklURG9t
U3RyaW5nTnVsbGFibGVBdHRyRE9NSklUOjpUZXN0RE9NSklURG9tU3RyaW5nTnVsbGFibGVBdHRy
RE9NSklUKCkKICAgICA6IEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIoanNUZXN0RE9NSklURG9t
U3RyaW5nTnVsbGFibGVBdHRyLCBudWxscHRyLCBKU1Rlc3RET01KSVQ6OmluZm8oKSwgRE9NSklU
OjpJRExSZXN1bHRUeXBlRmlsdGVyPElETE51bGxhYmxlPElETERPTVN0cmluZz4+Ojp2YWx1ZSkK
IHsKQEAgLTExMDAsMTMgKzEwNjQsNiBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21K
SVRHZXR0ZXJTCiAgICAgcmV0dXJuICZjb21waWxlci5nZXQoKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUQnl0ZVN0cmluZ051
bGxhYmxlQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJieXRlU3RyaW5nTnVsbGFibGVB
dHRyIik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlU3RyaW5n
TnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CkBAIC0xMTE2LDYgKzEwNzMsMTEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dERPTUpJVEJ5dGVTdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVEJ5dGVTdHJpbmdOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUQnl0ZVN0cmluZ051bGxhYmxlQXR0
ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJieXRlU3RyaW5nTnVsbGFibGVBdHRyIik7Cit9
CisKIFRlc3RET01KSVRCeXRlU3RyaW5nTnVsbGFibGVBdHRyRE9NSklUOjpUZXN0RE9NSklUQnl0
ZVN0cmluZ051bGxhYmxlQXR0ckRPTUpJVCgpCiAgICAgOiBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0
dGVyKGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdOdWxsYWJsZUF0dHIsIG51bGxwdHIsIEpTVGVzdERP
TUpJVDo6aW5mbygpLCBET01KSVQ6OklETFJlc3VsdFR5cGVGaWx0ZXI8SURMTnVsbGFibGU8SURM
Qnl0ZVN0cmluZz4+Ojp2YWx1ZSkKIHsKQEAgLTExMjcsMTMgKzEwODksNiBAQCBKU0M6OkRPTUpJ
VDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAgICAgcmV0dXJuICZjb21waWxlci5nZXQo
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVzdlN0cmluZ051bGxh
YmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVz
dERPTUpJVFVzdlN0cmluZ051bGxhYmxlQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1
c3ZTdHJpbmdOdWxsYWJsZUF0dHIiKTsKLX0KLQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dERPTUpJVFVzdlN0cmluZ051bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtMTE0Myw2ICsxMDk4LDExIEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdOdWxsYWJsZUF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVXN2U3Ry
aW5nTnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVzdlN0cmluZ051bGxh
YmxlQXR0ciIpOworfQorCiBUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyRE9NSklUOjpU
ZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyRE9NSklUKCkKICAgICA6IEpTQzo6RE9NSklU
OjpHZXR0ZXJTZXR0ZXIoanNUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyLCBudWxscHRy
LCBKU1Rlc3RET01KSVQ6OmluZm8oKSwgRE9NSklUOjpJRExSZXN1bHRUeXBlRmlsdGVyPElETE51
bGxhYmxlPElETFVTVlN0cmluZz4+Ojp2YWx1ZSkKIHsKQEAgLTExNTQsMTMgKzExMTQsNiBAQCBK
U0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAgICAgcmV0dXJuICZjb21w
aWxlci5nZXQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVE5vZGVO
dWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVE5vZGVOdWxsYWJsZUF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0
RE9NSklUTm9kZU51bGxhYmxlQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJub2RlTnVs
bGFibGVBdHRyIik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVROb2Rl
TnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CkBAIC0xMTcwLDYgKzExMjMsMTEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dERPTUpJVE5vZGVOdQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVE5vZGVOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0ckdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJub2RlTnVsbGFibGVBdHRyIik7Cit9CisKIFRlc3RET01KSVROb2Rl
TnVsbGFibGVBdHRyRE9NSklUOjpUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0ckRPTUpJVCgpCiAg
ICAgOiBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKGpzVGVzdERPTUpJVE5vZGVOdWxsYWJsZUF0
dHIsIG51bGxwdHIsIEpTVGVzdERPTUpJVDo6aW5mbygpLCBET01KSVQ6OklETFJlc3VsdFR5cGVG
aWx0ZXI8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPE5vZGU+Pj46OnZhbHVlKQogewpAQCAtMTE4
MSwzNSArMTEzOSw2IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMK
ICAgICByZXR1cm4gJmNvbXBpbGVyLmdldCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
T01KSVRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RET01KSVRQ
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdERPTUpJVFByb3Rv
dHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KCFkb21PYmplY3QpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RET01KSVQ6OmdldENv
bnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0K
LWJvb2wgc2V0SlNUZXN0RE9NSklUQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwotICAgIEpTVGVzdERPTUpJVFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNUZXN0RE9NSklUUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKLSAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4g
ZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIHZhbHVlKTsKLX0KLQotSlNWYWx1ZSBKU1Rlc3RET01KSVQ6OmdldENvbnN0
cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAg
ICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0RE9NSklUQ29uc3RydWN0b3I+KHZtLCAq
anNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Ci19Ci0KIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5j
dGlvbkdldEF0dHJpYnV0ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElE
TE9wZXJhdGlvbjxKU1Rlc3RET01KSVQ+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxNzQ1NikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsMTMgKzgzLDEzIEBAIHRlbXBsYXRl
PD4gVGVzdEV2ZW50Q29uc3RydWN0b3I6OkluaXQgY28KIAogLy8gQXR0cmlidXRlcwogCitKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogI2lmIEVOQUJMRShTUEVDSUFMX0VWRU5UKQogSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjMoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiAjZW5kaWYKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0
RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgpAQCAtMTk1LDE2ICsxOTUsMzcgQEAgSlNPYmplY3QqIEpTVGVzdEV2ZW50Q29u
c3RydWN0b3I6OnByb3RvdAogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvcj4odm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKK0pTVmFsdWUgSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3IqIElETEF0dHJpYnV0ZTxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPjo6Y2FzdChF
eGVjU3RhdGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCiB7CiAgICAgcmV0dXJu
IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihzdGF0ZS52bSgpLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvciYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworRW5jb2RlZEpTVmFsdWUganNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0
b3JQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChV
TkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFs
T2JqZWN0KCkpKTsKK30KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0
dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorYm9vbCBzZXRKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RFdmVudENvbnN0cnVjdG9y
Pjo6Z2V0PGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMUdldHRlcj4oKnN0YXRlLCB0aGlzVmFs
dWUsICJhdHRyMSIpOworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpz
RHluYW1pY0Rvd25jYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUqPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkg
eworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUt
PnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0
dHIxR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3ImIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0yMTYsMTEgKzIzNyw5IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnUKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3ImLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj46OmdldDxqc1Rlc3RFdmVudENv
bnN0cnVjdG9yQXR0cjJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cjIiKTsKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+OjpnZXQ8anNUZXN0RXZl
bnRDb25zdHJ1Y3RvckF0dHIxR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHIxIik7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjJHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTIzMiwxNCArMjUxLDEyIEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0j
aWYgRU5BQkxFKFNQRUNJQUxfRVZFTlQpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZl
bnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEV2ZW50Q29uc3RydWN0
b3ImLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0RXZl
bnRDb25zdHJ1Y3RvckF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cj46OmdldDxqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjNHZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCAiYXR0cjMiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3I+OjpnZXQ8anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgImF0dHIyIik7CiB9CiAKKyNpZiBFTkFCTEUoU1BFQ0lBTF9FVkVOVCkKIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjNHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC0yNDks
MzYgKzI2NiwxMiBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2VuZGlmCi0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2
ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
LSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2Fz
dDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52
bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0RXZl
bnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKLSAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4g
ZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIHZhbHVlKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEV2ZW50
Q29uc3RydWN0b3I+OjpnZXQ8anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgImF0dHIzIik7CiB9CiAKLUpTVmFsdWUgSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RFdmVudENvbnN0
cnVjdG9yQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4o
Z2xvYmFsT2JqZWN0KSk7Ci19CisjZW5kaWYKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklU
WSkKICNpZiBQTEFURk9STShXSU4pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHJl
dmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsMTEg
QEAgSlNPYmplY3QqIEpTVGVzdEV2ZW50VGFyZ2V0Ojpwcm90b3R5cGUoVgogICAgIHJldHVybiBn
ZXRET01Qcm90b3R5cGU8SlNUZXN0RXZlbnRUYXJnZXQ+KHZtLCBnbG9iYWxPYmplY3QpOwogfQog
CitKU1ZhbHVlIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0
cnVjdG9yPEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKIGJvb2wgSlNUZXN0RXZlbnRU
YXJnZXQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0
YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KG9iamVjdCk7
CkBAIC0xODMsMjkgKzE4OCwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudFRhcmdldENv
bnN0cnVjCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5
cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90
eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFko
IWRvbU9iamVjdCkpCisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNU
ZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0RXZlbnRUYXJnZXQ6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3Qt
Pmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RFdmVu
dFRhcmdldDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlw
ZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5
cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSgh
ZG9tT2JqZWN0KSkgeworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpT
VGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVF
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gZG9tT2Jq
ZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3Ry
dWN0b3IsIHZhbHVlKTsKLX0KLQotSlNWYWx1ZSBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0Q29uc3Ry
dWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yPih2
bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworICAg
IHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5
TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQog
CiBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRUYXJnZXRQcm90
b3R5cGVGdW5jdGlvbkl0ZW1DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0RXZlbnRUYXJnZXQ+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNw
cAkocmV2aXNpb24gMjE3NDU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RXhj
ZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWUoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiAKIGNsYXNzIEpTVGVz
dEV4Y2VwdGlvblByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVi
bGljOgpAQCAtMTM1LDYgKzEzNSwxMSBAQCBKU09iamVjdCogSlNUZXN0RXhjZXB0aW9uOjpwcm90
b3R5cGUoVk0mCiAgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFeGNlcHRpb24+KHZt
LCBnbG9iYWxPYmplY3QpOwogfQogCitKU1ZhbHVlIEpTVGVzdEV4Y2VwdGlvbjo6Z2V0Q29uc3Ry
dWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcj4odm0s
ICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwog
dm9pZCBKU1Rlc3RFeGNlcHRpb246OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAg
SlNUZXN0RXhjZXB0aW9uKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0RXhjZXB0aW9u
Kj4oY2VsbCk7CkBAIC0xNDYsNDkgKzE1MSw0MSBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RF
eGNlcHRpb24qIElETEF0CiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEV4Y2Vw
dGlvbio+KHN0YXRlLnZtKCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWVHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0RXhjZXB0aW9uJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RFeGNlcHRpb24+OjpnZXQ8anNUZXN0RXhjZXB0aW9uTmFtZUdldHRlcj4oKnN0YXRlLCB0aGlz
VmFsdWUsICJuYW1lIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFeGNlcHRp
b25OYW1lR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEV4Y2VwdGlvbiYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKLXsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3Rh
dGUsIGltcGwubmFtZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBK
U1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpT
VGVzdEV4Y2VwdGlvblByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQorICAgIGF1dG8qIHByb3RvdHlwZSA9IGpz
RHluYW1pY0Rvd25jYXN0PEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Rlc3RFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKHN0YXRlLT52
bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1Rlc3RFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5
cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0RXhjZXB0aW9uQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdEV4Y2VwdGlv
blByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RXhjZXB0aW9u
UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5M
SUtFTFkoIWRvbU9iamVjdCkpIHsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3du
Y2FzdDxKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewogICAgICAgICB0aHJvd1ZN
VHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBk
b21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5j
b25zdHJ1Y3RvciwgdmFsdWUpOworICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0
ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1KU1ZhbHVlIEpTVGVzdEV4Y2VwdGlvbjo6Z2V0Q29u
c3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWVHZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0RXhjZXB0aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewotICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RFeGNlcHRpb25Db25zdHJ1
Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3Qp
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwubmFtZSgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1lKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RXhjZXB0aW9uPjo6Z2V0PGpzVGVzdEV4Y2Vw
dGlvbk5hbWVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibmFtZSIpOwogfQogCiBib29sIEpT
VGVzdEV4Y2VwdGlvbk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAkocmV2aXNpb24gMjE3
NDU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDExIEBA
IEpTT2JqZWN0KiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpwcm8KICAgICByZXR1cm4gZ2V0
RE9NUHJvdG90eXBlPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+KHZtLCBnbG9iYWxPYmplY3Qp
OwogfQogCitKU1ZhbHVlIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OmdldENvbnN0cnVjdG9y
KFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1
cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9y
Pih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwor
fQorCiB2b2lkIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OmRlc3Ryb3koSlNDOjpKU0NlbGwq
IGNlbGwpCiB7CiAgICAgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogdGhpc09iamVjdCA9IHN0
YXRpY19jYXN0PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqPihjZWxsKTsKQEAgLTEyOCwyOSAr
MTMzLDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKiBk
b21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJv
dG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtF
TFkoIWRvbU9iamVjdCkpCisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUt
PnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwotICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqIGRvbU9iamVjdCA9
IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghZG9tT2Jq
ZWN0KSkgeworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewogICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBkb21P
YmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25z
dHJ1Y3RvciwgdmFsdWUpOwotfQotCi1KU1ZhbHVlIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6
OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZUNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCkpOworICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0o
KSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSkpOwogfQogCiBib29sIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAyMTc0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNiArNTcsOCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiAK
IC8vIEF0dHJpYnV0ZXMKIAorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAt
NjksOCArNzEsNiBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhCiBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRy
aWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKICNlbmRpZgotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogdXNp
bmcgSlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OwogCkBAIC0xODIsNiArMTgyLDExIEBAIHZv
aWQgSlNUZXN0R2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbigKICNlbmRpZgogfQogCitKU1Zh
bHVlIEpTVGVzdEdsb2JhbE9iamVjdDo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwogdm9pZCBKU1Rlc3RHbG9iYWxPYmpl
Y3Q6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0R2xvYmFsT2JqZWN0
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0Kj4oY2VsbCk7CkBA
IC0xOTgsMTEgKzIwMywyNyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RHbG9iYWxPYmplY3Qq
IElECiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KHN0
YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RHbG9iYWxPYmplY3RQ
cm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJ
S0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0R2xvYmFsT2Jq
ZWN0OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3Qo
KSkpOworfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxq
c1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgInJlZ3VsYXJBdHRyaWJ1dGUiKTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUqPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90
eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwg
c3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
UmVndWxhckF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0yMTQsMTMxICsyMzUs
NzYgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQ
dWJsaWNBbmRQcml2YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEdsb2JhbE9i
amVjdCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQ
cml2YXRlQXR0cmlidXRlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInB1YmxpY0FuZFByaXZh
dGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVj
dD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlR2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgInJlZ3VsYXJBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJl
Z3VsYXJBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwot
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRlQXR0cmli
dXRlKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJF
KQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZh
dGVDb25kaXRpb25hbEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9i
amVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUiKTsKLX0KLQot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVD
b25kaXRpb25hbEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCi17CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExET01TdHJpbmc+KHN0YXRlLCBpbXBsLnB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJp
YnV0ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNldFJlZ3VsYXJBdHRyaWJ1dGUoV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOworICAgIHJldHVybiB0cnVlOwogfQogCi0jZW5kaWYKLQotI2lmIEVO
QUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RHbG9i
YWxPYmplY3QmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK2Jvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmpl
Y3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImVu
YWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRl
U2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVndWxhckF0dHJpYnV0
ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBs
LmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETERPTVN0cmluZz4oc3RhdGUsIGltcGwucHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSgpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jZW5kaWYKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0
R2xvYmFsT2JqZWN0UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rl
c3RHbG9iYWxPYmplY3RQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwotICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0R2xvYmFsT2JqZWN0OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdENvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RHbG9iYWxP
YmplY3RQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEdsb2Jh
bE9iamVjdFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAg
aWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0
RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2
YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1
bGFyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0R2xvYmFsT2JqZWN0JiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRy
aWJ1dGVGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZ3VsYXJB
dHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgInB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVGdW5j
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZVNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKLSAgICBpbXBsLnNldFJlZ3VsYXJBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OworICAgIGltcGwuc2V0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RHbG9iYWxPYmplY3QmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNl
dDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlRnVuY3Rpb24+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQXR0cmli
dXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8
c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZVNldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUi
KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0Fu
ZFByaXZhdGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CisjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIHJldHVybiB0cnVlOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLnB1YmxpY0FuZFByaXZhdGVDb25k
aXRpb25hbEF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0KLSNpZiBFTkFC
TEUoVEVTVF9GRUFUVVJFKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYs
IEpTVGVzdEdsb2JhbE9iamVjdCYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQ
cml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJp
dmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUiKTsKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxP
YmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAicHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRl
Q29uZGl0aW9uYWxBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCisjZW5kaWYKKworI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmli
dXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTM0OSwxNyAr
MzE1LDMyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3QKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2
YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0
UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAicHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRl
Iik7Cit9CisKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlRnVu
Y3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0R2xvYmFsT2JqZWN0JiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1
bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9N
U3RyaW5nPihzdGF0ZSwgaW1wbC5lbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVu
dGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1
bnRpbWVBdHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiZW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKKyNlbmRpZgorCisjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTM3MCwxMyArMzUx
LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3QKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotI2VuZGlmCi0KLUpTVmFsdWUgSlNUZXN0R2xvYmFsT2JqZWN0OjpnZXRD
b25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiti
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEdsb2JhbE9i
amVjdENvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCkpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0
Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlIik7CiB9CiAKKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYXRpb25DYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0R2xv
YmFsT2JqZWN0Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50
ZXJmYWNlLmNwcAkocmV2aXNpb24gMjE3NDU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4
LDYgKzc4LDggQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdAogCiAv
LyBBdHRyaWJ1dGVzCiAKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Citib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAjaWYgRU5BQkxF
KENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCiBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
ICNlbmRpZgpAQCAtMTIyLDggKzEyNCw2IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxl
bWVudGFsU3RyMygKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsTm9kZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogI2Vu
ZGlmCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RJbnRlcmZh
Y2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAg
LTM5Niw2ICszOTYsMTEgQEAgSlNPYmplY3QqIEpTVGVzdEludGVyZmFjZTo6cHJvdG90eXBlKFZN
JgogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0SW50ZXJmYWNlPih2bSwgZ2xvYmFs
T2JqZWN0KTsKIH0KIAorSlNWYWx1ZSBKU1Rlc3RJbnRlcmZhY2U6OmdldENvbnN0cnVjdG9yKFZN
JiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4g
Z2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0
PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKIHZvaWQgSlNU
ZXN0SW50ZXJmYWNlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdElu
dGVyZmFjZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEludGVyZmFjZSo+KGNlbGwp
OwpAQCAtNDM0LDE1ICs0MzksMzAgQEAgdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0SW50ZXJmYWNl
KiBJRExPcAogICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihz
dGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CiB9CiAKLSNpZiBFTkFCTEUoQ29uZGl0aW9u
MjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoRXhl
Y1N0YXRlJik7CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2Fz
dDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNUZXN0SW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBl
LT5nbG9iYWxPYmplY3QoKSkpOworfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgQVNTRVJUKHN0YXRlKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0
YXRpY1JlYWRPbmx5QXR0ckdldHRlcigqc3RhdGUpKTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBh
dXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5
cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSgh
cHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+
dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSkpOwogfQogCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTQ1MCwxNyArNDcwLDE0IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb24KICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi0jZW5kaWYKLQotI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlv
bjIzKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1w
bGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlJik7Ci0KLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIEFTU0VSVChz
dGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKCpzdGF0ZSkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVh
ZE9ubHlBdHRyR2V0dGVyKCpzdGF0ZSkpOwogfQogCisjZW5kaWYKKworI2lmIEVOQUJMRShDb25k
aXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNDY4LDE2ICs0ODUs
MjkgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbgogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
SW1wbGVtZW50c1N0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoKnN0YXRlKSk7Cit9CisKICNl
bmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjFHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0K
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorYm9vbCBzZXRK
U1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4ZWNTdGF0ZSog
c3RhdGVQb2ludGVyLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6Z2V0PGpzVGVz
dEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxl
bWVudHNTdHIxIik7CisgICAgQVNTRVJUKHN0YXRlUG9pbnRlcik7CisgICAgYXV0byYgc3RhdGUg
PSAqc3RhdGVQb2ludGVyOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBUZXN0SW50ZXJmYWNlOjpzZXRJbXBsZW1l
bnRzU3RhdGljQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKKyNlbmRpZgorCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjFH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAg
LTQ4NywxNiArNTE3LDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJ
bXAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jZW5kaWYKLQotI2lmIEVOQUJMRShDb25kaXRp
b24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFj
ZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxl
bWVudHNTdHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6
Z2V0PGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgImltcGxlbWVudHNTdHIyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRl
cmZhY2U+OjpnZXQ8anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjFHZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAiaW1wbGVtZW50c1N0cjEiKTsKIH0KIAorI2VuZGlmCisKKyNpZiBFTkFCTEUo
Q29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTA2LDE4MCArNTM0LDEzMSBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRp
b24yMykKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
M0dldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+OjpnZXQ8anNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50c1N0cjNHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiaW1wbGVtZW50
c1N0cjMiKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxl
bWVudHNTdHIzR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LmltcGxlbWVudHNT
dHIzKHN0YXRlKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFjZT46Omdl
dDxqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
ICJpbXBsZW1lbnRzU3RyMiIpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24y
MikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUltcGxlbWVudHNOb2RlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJ
bXBsZW1lbnRzU3RyMlNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+OjpnZXQ8anNUZXN0SW50ZXJmYWNl
SW1wbGVtZW50c05vZGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiaW1wbGVtZW50c05vZGUi
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIGltcGwuc2V0SW1wbGVtZW50
c1N0cjIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxOb2RlPj4oc3RhdGUsICp0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLmltcGxlbWVudHNOb2RlKCkpOwotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+OjpzZXQ8c2V0
SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJpbXBsZW1lbnRzU3RyMiIpOwogfQogCiAjZW5kaWYKIAotI2lmIEVOQUJM
RShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSYpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQorI2lmIEVOQUJMRShDb25kaXRpb24yMikg
fHwgRU5BQkxFKENvbmRpdGlvbjIzKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUltcGxlbWVudHNTdHIzR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFj
ZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBBU1NFUlQoc3Rh
dGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoKnN0YXRlKSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgcmV0
dXJuIHRoaXNPYmplY3QuaW1wbGVtZW50c1N0cjMoc3RhdGUpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFk
T25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6
OnN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cigpKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6Z2V0PGpzVGVzdEludGVy
ZmFjZUltcGxlbWVudHNTdHIzR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxlbWVudHNT
dHIzIik7CiB9CiAKICNlbmRpZgogCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYpOwotCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKKyNpZiBFTkFC
TEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyM1NldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgQVNTRVJUKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0ckdl
dHRlcigqc3RhdGUpKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICB0aGlzT2JqZWN0LnNldEltcGxlbWVudHNTdHIzKHN0YXRlLCB2
YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSkKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6
c3VwcGxlbWVudGFsU3RhdGljQXR0cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6c2V0PHNldEpTVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIzU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW1w
bGVtZW50c1N0cjMiKTsKIH0KIAogI2VuZGlmCiAKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8
IEVOQUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VTdXBwbGVtZW50YWxTdHIxR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VT
dXBwbGVtZW50YWxTdHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJm
YWNlPjo6Z2V0PGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjFHZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAic3VwcGxlbWVudGFsU3RyMSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMUdldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCisj
aWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBs
ZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMShpbXBsKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETEludGVyZmFjZTxOb2RlPj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
LCBpbXBsLmltcGxlbWVudHNOb2RlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNlbmRp
ZgotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQot
RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6Z2V0PGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRh
bFN0cjJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic3VwcGxlbWVudGFsU3RyMiIpOworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6Z2V0PGpzVGVzdEludGVyZmFj
ZUltcGxlbWVudHNOb2RlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxlbWVudHNOb2Rl
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKKyNlbmRpZgorCisjaWYgRU5BQkxFKENvbmRpdGlv
bjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlSW1wbGVtZW50c05vZGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50
ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmlu
Zz4oc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjIoaW1w
bCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMSW50ZXJmYWNlPE5vZGU+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNOb2RlIiwgIk5vZGUiKTsgfSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5z
ZXRJbXBsZW1lbnRzTm9kZSgqbmF0aXZlVmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6c2V0PHNldEpTVGVzdElu
dGVyZmFjZUltcGxlbWVudHNOb2RlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiaW1wbGVtZW50c05vZGUiKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVy
ZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZh
Y2U+OjpnZXQ8anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsICJzdXBwbGVtZW50YWxTdHIzIik7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oV2ViQ29yZTo6VGVzdFN1cHBsZW1l
bnRhbDo6c3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyKCkpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIzR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIHRoaXNPYmpl
Y3Quc3VwcGxlbWVudGFsU3RyMyhzdGF0ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0ckdl
dHRlcigqc3RhdGUpKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8
IEVOQUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VTdXBwbGVtZW50YWxOb2RlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VT
dXBwbGVtZW50YWxOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJm
YWNlPjo6Z2V0PGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAic3VwcGxlbWVudGFsTm9kZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUdldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50
YWxTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRl
cmZhY2U8Tm9kZT4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgV2ViQ29yZTo6
VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZShpbXBsKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50
YWw6OnN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
I2VuZGlmCi0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBkb21PYmplY3Qg
PSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKLSAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0SW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRy
R2V0dGVyKCpzdGF0ZSkpOwogfQogCi1ib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEludGVyZmFjZVByb3Rv
dHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KCFkb21PYmplY3QpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRl
LT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7Ci19Cisj
ZW5kaWYKIAotI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQot
Ym9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4
ZWNTdGF0ZSogc3RhdGVQb2ludGVyLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQorI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEy
KQorYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0
dHIoRXhlY1N0YXRlKiBzdGF0ZVBvaW50ZXIsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgQVNTRVJUKHN0YXRlUG9pbnRlcik7CiAgICAgYXV0byYg
c3RhdGUgPSAqc3RhdGVQb2ludGVyOwpAQCAtNjg3LDExNyArNjY2LDgyIEBAIGJvb2wgc2V0SlNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW0KICAgICBhdXRvIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwotICAgIFRlc3RJbnRlcmZhY2U6OnNldEltcGxlbWVudHNTdGF0aWNBdHRy
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpz
ZXRTdXBwbGVtZW50YWxTdGF0aWNBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogI2VuZGlmCiAKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJM
RShDb25kaXRpb24yMykKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzU3RyMkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRp
b24xMikKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxT
dHIxR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dEludGVyZmFjZT46OnNldDxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkZ1bmN0aW9u
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW1wbGVtZW50c1N0cjIiKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1
cHBsZW1lbnRhbFN0cjEoaW1wbCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1
cHBsZW1lbnRhbFN0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZh
bHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBp
bXBsLnNldEltcGxlbWVudHNTdHIyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFjZT46OmdldDxqc1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInN1
cHBsZW1lbnRhbFN0cjEiKTsKIH0KIAogI2VuZGlmCiAKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMjIp
IHx8IEVOQUJMRShDb25kaXRpb24yMykKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzU3RyM0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYs
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1l
bnRzU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJM
RShDb25kaXRpb24xMikKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBw
bGVtZW50YWxTdHIyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEludGVyZmFjZT46OnNldDxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
M0Z1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW1wbGVtZW50c1N0
cjMiKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVt
ZW50YWw6OnN1cHBsZW1lbnRhbFN0cjIoaW1wbCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyM0Z1bmN0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgdGhpc09iamVjdC5zZXRJbXBsZW1lbnRz
U3RyMyhzdGF0ZSwgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6Z2V0PGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic3VwcGxlbWVudGFsU3RyMiIpOwogfQogCiAj
ZW5kaWYKIAotI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQot
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwot
Ci1ib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQot
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6c2V0PHNldEpTVGVz
dEludGVyZmFjZUltcGxlbWVudHNOb2RlRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJpbXBsZW1lbnRzTm9kZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCisjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIp
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMlNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETElu
dGVyZmFjZTxOb2RlPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzTm9kZSIsICJOb2RlIik7IH0pOworICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNl
dEltcGxlbWVudHNOb2RlKCpuYXRpdmVWYWx1ZSk7CisgICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1l
bnRhbDo6c2V0U3VwcGxlbWVudGFsU3RyMihpbXBsLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1ib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
U3VwcGxlbWVudGFsU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlUG9pbnRlciwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBBU1NFUlQoc3RhdGVQ
b2ludGVyKTsKLSAgICBhdXRvJiBzdGF0ZSA9ICpzdGF0ZVBvaW50ZXI7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBhdXRvIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwg
dmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAg
IFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6c2V0PHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRh
bFN0cjJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdXBwbGVtZW50
YWxTdHIyIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3Vw
cGxlbWVudGFsU3RyMkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxT
dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFj
ZVN1cHBsZW1lbnRhbFN0cjNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNl
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6c2V0PHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1l
bnRhbFN0cjJGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN1cHBs
ZW1lbnRhbFN0cjIiKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5zdXBwbGVtZW50YWxTdHIzKHN0
YXRlKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1l
bnRhbFN0cjJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7Ci0gICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxl
bWVudGFsU3RyMihpbXBsLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+OjpnZXQ8anNUZXN0SW50
ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJzdXBwbGVt
ZW50YWxTdHIzIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsU3RyM0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
SW50ZXJmYWNlPjo6c2V0PHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNGdW5jdGlv
bj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN1cHBsZW1lbnRhbFN0cjMiKTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjNGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM1NldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CkBAIC04MDUsMTcgKzc0OSwzMiBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgc2V0
SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFjZT46OnNldDxzZXRKU1Rlc3RJbnRlcmZh
Y2VTdXBwbGVtZW50YWxTdHIzU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAic3VwcGxlbWVudGFsU3RyMyIpOworfQorCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRp
b24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRl
cmZhY2UmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZShpbXBsKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KIAotYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3Vw
cGxlbWVudGFsTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFj
ZT46OnNldDxzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlRnVuY3Rpb24+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdXBwbGVtZW50YWxOb2RlIik7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+OjpnZXQ8anNUZXN0SW50ZXJmYWNlU3Vw
cGxlbWVudGFsTm9kZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJzdXBwbGVtZW50YWxOb2Rl
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxOb2RlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTgyNiwxMyArNzg1LDEzIEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotI2Vu
ZGlmCi0KLUpTVmFsdWUgSlNUZXN0SW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNv
bnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCitib29sIHNldEpTVGVzdEludGVyZmFj
ZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0SW50ZXJmYWNlPjo6c2V0PHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5v
ZGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdXBwbGVtZW50YWxO
b2RlIik7CiB9CiAKKyNlbmRpZgorCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMUNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RJbnRlcmZhY2U+OjpDbGFz
c1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJm
YWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5j
cHAJKHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBBdHRyaWJ1dGVz
CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVS
ZWFkb25seShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2Nv
cmVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZVJlYWRvbmx5KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogCiBjbGFzcyBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGlj
OgpAQCAtMTIyLDYgKzEyMiwxMSBAQCBKU09iamVjdCogSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1Vu
ZGVyc2NvCiAgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZT4odm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKK0pTVmFsdWUgSlNUZXN0SW50ZXJm
YWNlTGVhZGluZ1VuZGVyc2NvcmU6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8
SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8
Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwogdm9pZCBKU1Rl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkK
IHsKICAgICBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSogdGhpc09iamVjdCA9IHN0
YXRpY19jYXN0PEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKj4oY2VsbCk7CkBAIC0x
MzMsNDkgKzEzOCw0MSBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
CiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRl
cnNjb3JlKj4oc3RhdGUudm0oKSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVSZWFk
b25seUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSYs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZVJlYWRvbmx5KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+OjpnZXQ8anNUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmVSZWFkb25seUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZWFkb25s
eSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1Vu
ZGVyc2NvcmVSZWFkb25seUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKLXsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
LSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwucmVhZG9ubHkoKSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1Vu
ZGVyc2NvcmVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RJbnRl
cmZhY2VMZWFkaW5nVW5kZXJzY29yZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUqPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkK
KyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUt
PnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpnZXRDb25zdHJ1Y3Rvcihz
dGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCiBib29sIHNldEpT
VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUHJv
dG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CisgICAgYXV0byogcHJvdG90eXBlID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5
cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSgh
cHJvdG90eXBlKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+
dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOworICAgIHJl
dHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFt
ZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1K
U1ZhbHVlIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpnZXRDb25zdHJ1Y3RvcihW
TSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVSZWFkb25seUdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICByZXR1cm4gZ2V0RE9NQ29uc3Ry
dWN0b3I8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3Rvcj4odm0sICpq
c0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETERPTVN0cmluZz4oc3RhdGUsIGltcGwucmVhZG9ubHkoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVS
ZWFkb25seShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlPjo6Z2V0PGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUmVhZG9u
bHlHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAicmVhZG9ubHkiKTsKIH0KIAogYm9vbCBKU1Rl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEl0ZXJhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCShyZXZpc2lvbiAyMTc0NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RJ
dGVyYWJsZTo6cHJvdG90eXBlKFZNJiAKICAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVz
dEl0ZXJhYmxlPih2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAorSlNWYWx1ZSBKU1Rlc3RJdGVyYWJs
ZTo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RJdGVyYWJsZUNvbnN0
cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCkpOworfQorCiB2b2lkIEpTVGVzdEl0ZXJhYmxlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxs
KQogewogICAgIEpTVGVzdEl0ZXJhYmxlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0
SXRlcmFibGUqPihjZWxsKTsKQEAgLTE0OSwyOSArMTU0LDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEl0ZXJhYmxlQ29uc3RydWN0b3IKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RJ
dGVyYWJsZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SXRl
cmFibGVQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlm
IChVTkxJS0VMWSghZG9tT2JqZWN0KSkKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNE
b3duY2FzdDxKU1Rlc3RJdGVyYWJsZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1Rlc3RJdGVyYWJsZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9i
amVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVz
dEl0ZXJhYmxlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxP
YmplY3QoKSkpOwogfQogCiBib29sIHNldEpTVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdEl0ZXJhYmxlUHJvdG90eXBlKiBk
b21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJdGVyYWJsZVByb3RvdHlwZSo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmpl
Y3QpKSB7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SXRl
cmFibGVQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlm
IChVTkxJS0VMWSghcHJvdG90eXBlKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBkb21PYmplY3QtPnB1dERp
cmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFs
dWUpOwotfQotCi1KU1ZhbHVlIEpTVGVzdEl0ZXJhYmxlOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0s
IGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERP
TUNvbnN0cnVjdG9yPEpTVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0
IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CisgICAgcmV0dXJuIHByb3RvdHlw
ZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0cnVjdCBUZXN0SXRl
cmFibGVJdGVyYXRvclRyYWl0cyB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDExICs0MiwxMSBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0CiAKIC8vIEF0dHJpYnV0ZXMKIAorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20oSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29s
IHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogY2xh
c3MgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEzNyw2ICsxMzcsMTEgQEAgSlNPYmplY3QqIEpT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpwcgogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+KHZtLCBnbG9iYWxPYmplY3QpOwogfQogCitKU1Zh
bHVlIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNv
bnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I+KHZtLCAqanND
YXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKIHZvaWQg
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7
CiAgICAgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KGNlbGwpOwpAQCAtMTUzLDExICsxNTgsMjcg
QEAgdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0SlNCdWlsdGluQ29uc3RydQogICAgIHJldHVybiBq
c0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KHN0YXRlLnZtKCks
IHN0YXRlLnRoaXNWYWx1ZSgpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworRW5j
b2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorYm9vbCBz
ZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+Ojpn
ZXQ8anNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgInRlc3RBdHRyaWJ1dGVDdXN0b20iKTsKKyAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3RvclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlw
ZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b21HZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3ImIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0xNjcsMTEgKzE4OCw5IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db24KICAgICByZXR1cm4gdGhpc09iamVjdC50
ZXN0QXR0cmlidXRlQ3VzdG9tKHN0YXRlKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJp
YnV0ZVJXQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JU
ZXN0QXR0cmlidXRlQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3I+OjpnZXQ8anNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0
cmlidXRlUldDdXN0b21HZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidGVzdEF0dHJpYnV0ZVJX
Q3VzdG9tIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3Rvcj46OmdldDxqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b21H
ZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidGVzdEF0dHJpYnV0ZUN1c3RvbSIpOwogfQogCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmli
dXRlUldDdXN0b21HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3ImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0xODEsMzggKzIw
MCwxMiBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uCiAgICAgcmV0
dXJuIHRoaXNPYmplY3QudGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKHN0YXRlKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSogZG9t
T2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90
b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VM
WSghZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9i
amVjdCgpKSk7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKLSAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4g
ZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3ImLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0K
LWJvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20o
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
clRlc3RBdHRyaWJ1dGVSV0N1c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6c2V0PHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
VGVzdEF0dHJpYnV0ZVJXQ3VzdG9tRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJ0ZXN0QXR0cmlidXRlUldDdXN0b20iKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6Z2V0PGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInRlc3RB
dHRyaWJ1dGVSV0N1c3RvbSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21GdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbVNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTIyMCwxMCArMjEzLDkgQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbgogICAgIHJldHVybiB0cnVl
OwogfQogCi0KLUpTVmFsdWUgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmdldENvbnN0cnVj
dG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK2Jvb2wgc2V0
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20oRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KSk7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3Rvcj46OnNldDxzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRy
aWJ1dGVSV0N1c3RvbVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRl
c3RBdHRyaWJ1dGVSV0N1c3RvbSIpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGVGdW5jdGlvblRlc3RDdXN0
b21GdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJh
dGlvbjxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNywxMSBAQCBKU09iamVjdCog
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6CiAgICAgcmV0dXJuIGdldERPTVByb3RvdHlw
ZTxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPih2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAor
SlNWYWx1ZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpnZXRDb25zdHJ1Y3RvcihWTSYg
dm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdl
dERPTUNvbnN0cnVjdG9yPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcj4o
dm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30K
Kwogdm9pZCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpkZXN0cm95KEpTQzo6SlNDZWxs
KiBjZWxsKQogewogICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKj4oY2VsbCk7CkBAIC0x
NDIsMjkgKzE0NywyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclBy
b3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQorICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHlu
YW1pY0Rvd25jYXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqPih2bSwg
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBl
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6
Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6
OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7
CiB9CiAKIGJvb2wgc2V0SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKKyAgICBhdXRvKiBwcm90b3R5
cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90
eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFko
IXByb3RvdHlwZSkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUt
PnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTsKLX0KLQot
SlNWYWx1ZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpnZXRDb25zdHJ1Y3RvcihWTSYg
dm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdl
dERPTUNvbnN0cnVjdG9yPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcj4o
dm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKKyAg
ICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0K
IAogc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPjo6
Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjE3NDU2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDE2IEBAIEpTT2Jq
ZWN0KiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpwcm90b3QKICAgICByZXR1cm4gZ2V0RE9NUHJv
dG90eXBlPEpTVGVzdE5hbWVkQ29uc3RydWN0b3I+KHZtLCBnbG9iYWxPYmplY3QpOwogfQogCitK
U1ZhbHVlIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29u
c3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxj
b25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCitKU1ZhbHVlIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldE5hbWVkQ29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwogdm9pZCBKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3IqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
Kj4oY2VsbCk7CkBAIC0xNjYsMzQgKzE3NiwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1l
ZENvbnN0cnVjdG9yQ29uCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQorICAgIGF1dG8qIHByb3RvdHlwZSA9IGpz
RHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUqPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9y
KHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKIGJvb2wgc2V0
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKLSAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3Qg
PSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKj4odm0s
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVj
dCkpIHsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gZG9tT2JqZWN0
LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIHZhbHVlKTsKLX0KLQotSlNWYWx1ZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRDb25z
dHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0g
ICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1
Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3Qp
KTsKLX0KLQotSlNWYWx1ZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXROYW1lZENvbnN0cnVj
dG9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4g
Z2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I+
KHZtLCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CisgICAgcmV0
dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1l
cygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIGJv
b2wgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkocmV2aXNpb24gMjE3NDU2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MiwxMCArNTIsMTAgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdAogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9k
ZU5hbWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdE5vZGVOYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROb2RlTmFt
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwogCiBjbGFzcyBKU1Rlc3ROb2RlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xNzYsNiArMTc2LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RO
b2RlOjpwcm90b3R5cGUoVk0mIHZtLCAKICAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVz
dE5vZGU+KHZtLCBnbG9iYWxPYmplY3QpOwogfQogCitKU1ZhbHVlIEpTVGVzdE5vZGU6OmdldENv
bnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sK
KyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0Tm9kZUNvbnN0cnVjdG9yPih2bSwg
KmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCiB0
ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3ROb2RlKiBJRExBdHRyaWJ1dGU8SlNUZXN0Tm9kZT46OmNh
c3QoRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQogewogICAgIHJl
dHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROb2RlKj4oc3RhdGUudm0oKSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwpAQCAtMTg2LDU0ICsxOTEsNDQgQEAgdGVtcGxhdGU8PiBpbmxp
bmUgSlNUZXN0Tm9kZSogSURMT3BlcmF0aQogICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3ROb2RlKj4oc3RhdGUudm0oKSwgc3RhdGUudGhpc1ZhbHVlKCkpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0Tm9kZU5hbWVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0Tm9k
ZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2Rl
TmFtZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE5vZGU+OjpnZXQ8anNUZXN0
Tm9kZU5hbWVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibmFtZSIpOwotfQotCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0Tm9kZU5hbWVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0Tm9kZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKLXsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETERPTVN0cmluZz4oc3RhdGUsIGltcGwubmFtZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgSlNUZXN0Tm9kZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0Tm9kZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQorICAgIGF1dG8qIHByb3RvdHlwZSA9
IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5vZGVQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNUZXN0Tm9kZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRv
bU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdE5vZGU6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9i
amVjdCgpKSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3ROb2RlUHJvdG90eXBlKiBkb21PYmplY3Qg
PSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROb2RlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKKyAgICBh
dXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROb2RlUHJvdG90eXBlKj4o
dm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3Rv
dHlwZSkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IKLSAgICByZXR1cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCks
IHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTsKKyAgICByZXR1cm4g
cHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE5vZGVOYW1lRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0
Tm9kZSYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3ROb2RlTmFtZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3ROb2RlJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0
ZSwgaW1wbC5uYW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLWJvb2wgc2V0SlNUZXN0
Tm9kZU5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE5vZGU+OjpzZXQ8c2V0SlNUZXN0Tm9k
ZU5hbWVGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm5hbWUiKTsK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE5vZGU+OjpnZXQ8anNUZXN0Tm9kZU5hbWVH
ZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibmFtZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0Tm9kZU5hbWVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3ROb2Rl
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE5vZGVOYW1lU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE5vZGUmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CkBAIC0yNDQsMTAgKzIzOSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3ROb2RlTmFtZUZ1bmMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCi1KU1ZhbHVlIEpTVGVzdE5v
ZGU6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKK2Jvb2wgc2V0SlNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0
dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8
Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdE5vZGU+OjpzZXQ8c2V0SlNUZXN0Tm9kZU5hbWVTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJuYW1lIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0V29ya2Vy
UHJvbWlzZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlv
blJldHVybmluZ1Byb21pc2U8SlNUZXN0Tm9kZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMs
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTYzLDYgKzExNjMsOCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0CiAKIC8vIEF0dHJpYnV0ZXMKIAorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWFkT25seVRlc3RPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAtMTM2MSw4ICsxMzYzLDYgQEAgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkcwogYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051
bGxhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ2lm
aWVyQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0T2JqUHJvdG90eXBlIDogcHVibGljIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xOTI2LDYgKzE5MjYsMTEgQEAgSlNP
YmplY3QqIEpTVGVzdE9iajo6cHJvdG90eXBlKFZNJiB2bSwgSgogICAgIHJldHVybiBnZXRET01Q
cm90b3R5cGU8SlNUZXN0T2JqPih2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAorSlNWYWx1ZSBKU1Rl
c3RPYmo6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0T2JqQ29uc3Ry
dWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KSk7Cit9CisKIHZvaWQgSlNUZXN0T2JqOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewog
ICAgIEpTVGVzdE9iaiogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGNlbGwp
OwpAQCAtMTk3NywxMSArMTk4MiwyNyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RPYmoqIElE
TE9wZXJhdGlvCiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE9iaio+KHN0YXRl
LnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialJlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNE
b3duY2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNUZXN0T2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9i
YWxPYmplY3QoKSkpOworfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpSZWFkT25seUxv
bmdBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlYWRPbmx5TG9uZ0F0dHIiKTsKKyAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3RPYmpQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAg
IGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1
dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0xOTkzLDExICsy
MDE0LDkgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25s
eVN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRy
R2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlYWRPbmx5U3RyaW5nQXR0ciIpOworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0
dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAicmVhZE9ubHlMb25nQXR0ciIpOwogfQogCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKQEAgLTIwMDksMTEgKzIwMjgsOSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqUmVhZE9ubHlTCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlYWRPbmx5VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0
cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNU
ZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZWFk
T25seVRlc3RPYmpBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpn
ZXQ8anNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
InJlYWRPbmx5U3RyaW5nQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0yMDI1LDEyICsyMDQyLDkg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5VAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0
YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJik7Ci0KLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUmVhZE9ubHlUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdB
dHRyR2V0dGVyKCpzdGF0ZSkpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
Z2V0PGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCAicmVhZE9ubHlUZXN0T2JqQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUpCkBAIC0yMDQwLDEyICsyMDU0LDkgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRl
Jik7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgQVNTRVJU
KHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbnN0cnVjdG9y
U3RhdGljU3RyaW5nQXR0ckdldHRlcigqc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0ckdldHRlcigqc3Rh
dGUpKTsKIH0KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3Rh
dGljU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlKQpAQCAtMjA1NSwxMSArMjA2Niwy
MSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9y
VGVzdFN1Yk9iakdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5n
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQorewor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJp
bmdBdHRyR2V0dGVyKCpzdGF0ZSkpOworfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25z
dHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3Ry
aW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlUG9pbnRlciwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9i
aj46OmdldDxqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXI+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCAiVGVzdFN1Yk9iaiIpOworICAgIEFTU0VSVChzdGF0ZVBvaW50ZXIpOworICAgIGF1
dG8mIHN0YXRlID0gKnN0YXRlUG9pbnRlcjsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IGF1dG8gdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgVGVzdE9iajo6c2V0U3Rh
dGljU3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmpH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQpAQCAtMjA2OSwxMSArMjA5MCw5IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpDb25zdHJ1Y3QKICAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1
Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3Ry
dWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5n
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJP
YmooRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
VGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcj4oKnN0YXRlLCB0aGlz
VmFsdWUsICJUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZyIpOworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsICJUZXN0U3ViT2JqIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKQEAgLTIwODgsMTEgKzIxMDcsMjIgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialRlc3RTdWJPYgogICAgIHJldHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVj
dG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpU
ZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0
aW5nQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFN1Yk9iakVuYWJs
ZWRCeVNldHRpbmciKTsKK30KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdD
b25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqRW51bUF0dHJHZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCAiZW51bUF0dHIiKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGlu
ZyIpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNl
dHRpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGlu
Z0NvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVz
dFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKTsKIH0KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakVudW1BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTIxMDQsMjk1OSArMjEzNCwyMzk5IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0ckcKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQnl0ZUF0dHJHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW51
bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0
T2JqQnl0ZUF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiYnl0ZUF0dHIiKTsKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpFbnVtQXR0ckdldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsICJlbnVtQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQnl0ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakVudW1BdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExCeXRlPihpbXBsLmJ5dGVB
dHRyKCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byBvcHRpb25hbE5hdGl2ZVZhbHVl
ID0gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIHZhbHVlKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpZiAoVU5MSUtF
TFkoIW9wdGlvbmFsTmF0aXZlVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IG9wdGlvbmFsTmF0aXZlVmFsdWUudmFsdWUoKTsKKyAgICBpbXBsLnNl
dEVudW1BdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0ckdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RP
YmpPY3RldEF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAib2N0ZXRBdHRyIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqRW51bUF0dHJT
ZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbnVtQXR0ciIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0ckdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExPY3RldD4oaW1wbC5vY3RldEF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETEJ5dGU+KGltcGwuYnl0ZUF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0ckdldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0ZUF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
U2hvcnRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInNob3J0QXR0ciIpOworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakJ5dGVBdHRyR2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImJ5dGVBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakJ5dGVBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExTaG9ydD4oaW1wbC5zaG9y
dEF0dHIoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExCeXRlPihzdGF0ZSwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOworICAgIGltcGwuc2V0Qnl0ZUF0dHIoV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOworICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQ2xhbXBlZFNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQ2xhbXBlZFNob3J0
QXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJjbGFtcGVkU2hvcnRBdHRyIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQnl0ZUF0dHJT
ZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJieXRlQXR0ciIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTPElETENsYW1wQWRhcHRvcjxJRExTaG9ydD4+KGltcGwuY2xhbXBl
ZFNob3J0QXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMT2N0ZXQ+KGltcGwu
b2N0ZXRBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9jdGV0
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RP
YmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiZW5mb3Jj
ZVJhbmdlU2hvcnRBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpn
ZXQ8anNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm9jdGV0QXR0
ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW5mb3JjZVJhbmdlU2hv
cnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPY3Rl
dEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMU2hvcnQ+Pihp
bXBsLmVuZm9yY2VSYW5nZVNob3J0QXR0cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE9jdGV0PihzdGF0ZSwgdmFsdWUpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIGltcGwuc2V0T2N0ZXRB
dHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK2Jvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
Z2V0PGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
InVuc2lnbmVkU2hvcnRBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpzZXQ8c2V0SlNUZXN0T2JqT2N0ZXRBdHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAib2N0ZXRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpVbnNpZ25lZFNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVuc2ln
bmVkU2hvcnQ+KGltcGwudW5zaWduZWRTaG9ydEF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETFNob3J0PihpbXBsLnNob3J0QXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakxv
bmdBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImxvbmdBdHRyIik7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqU2hvcnRBdHRyR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgInNob3J0QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialNob3J0QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5sb25nQXR0
cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETFNob3J0PihzdGF0ZSwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOworICAgIGltcGwuc2V0U2hvcnRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akxvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorYm9v
bCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTG9uZ0xvbmdBdHRyR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgImxvbmdMb25nQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialNob3J0QXR0clNldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNob3J0QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETExvbmdMb25nPihpbXBsLmxvbmdMb25nQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlM8SURMQ2xhbXBBZGFwdG9yPElETFNob3J0Pj4oaW1wbC5jbGFtcGVkU2hvcnRB
dHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5z
aWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2hvcnRB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9i
alVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVk
TG9uZ0xvbmdBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8
anNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJjbGFt
cGVkU2hvcnRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVbnNp
Z25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQ2xhbXBlZFNob3J0QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVW5zaWduZWRMb25nTG9u
Zz4oaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExTaG9ydD4+KHN0
YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CisgICAgaW1wbC5zZXRDbGFtcGVkU2hvcnRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmlu
Z0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVz
dE9iakNsYW1wZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqU3RyaW5nQXR0ckdldHRlcj4oKnN0YXRl
LCB0aGlzVmFsdWUsICJzdHJpbmdBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0clNldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNsYW1wZWRTaG9ydEF0dHIiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLnN0cmluZ0F0dHIoKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMU2hv
cnQ+PihpbXBsLmVuZm9yY2VSYW5nZVNob3J0QXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0ckdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akVuZm9yY2VSYW5nZVNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dE9iaj46OmdldDxqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgInVzdnN0cmluZ0F0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OmdldDxqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCAiZW5mb3JjZVJhbmdlU2hvcnRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVT
VlN0cmluZz4oc3RhdGUsIGltcGwudXN2c3RyaW5nQXR0cigpKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8
SURMU2hvcnQ+PihzdGF0ZSwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOworICAgIGltcGwuc2V0RW5mb3JjZVJhbmdlU2hvcnRBdHRyKFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2Jq
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK2Jvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9i
alRlc3RPYmpBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInRlc3RPYmpBdHRyIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqRW5mb3Jj
ZVJhbmdlU2hvcnRBdHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
ZW5mb3JjZVJhbmdlU2hvcnRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50
ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwu
dGVzdE9iakF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVuc2lnbmVkU2hv
cnQ+KGltcGwudW5zaWduZWRTaG9ydEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdE9iaj46OmdldDxqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgInRlc3ROdWxsYWJsZU9iakF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0ckdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJ1bnNpZ25lZFNob3J0QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KHN0YXRlLCAqdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSwgaW1wbC50ZXN0TnVsbGFibGVPYmpBdHRyKCkpOwotICAgIHJldHVy
biByZXN1bHQ7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5zaWduZWRTaG9y
dD4oc3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKKyAgICBpbXBsLnNldFVuc2lnbmVkU2hvcnRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akxlbmllbnRUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RP
YmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpM
ZW5pZW50VGVzdE9iakF0dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZXR1cm5F
YXJseT4oKnN0YXRlLCB0aGlzVmFsdWUsICJsZW5pZW50VGVzdE9iakF0dHIiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0
QXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVuc2lnbmVkU2hv
cnRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVz
dE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxv
bmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4o
c3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLmxlbmllbnRUZXN0T2JqQXR0
cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5sb25nQXR0cigp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqVW5mb3JnZWFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidW5mb3JnZWFibGVBdHRyIik7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAibG9uZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqTG9uZ0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGlt
cGwudW5mb3JnZWFibGVBdHRyKCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNldExvbmdBdHRyKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K2Jvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5n
TnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dE9iaj46OnNldDxzZXRKU1Rlc3RPYmpMb25nQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgImxvbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERPTVN0cmluZz4+
KHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nTG9uZz4oaW1wbC5sb25nTG9uZ0F0dHIoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZ0dldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1c3ZzdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
Z2V0PGpzVGVzdE9iakxvbmdMb25nQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJsb25n
TG9uZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmlu
Z0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFRyZWF0
TnVsbEFzRW1wdHlBZGFwdG9yPElETFVTVlN0cmluZz4+KHN0YXRlLCBpbXBsLnVzdnN0cmluZ0F0
dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZ0xvbmc+KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRM
b25nTG9uZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46Omdl
dDxqc1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiYnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3Ry
aW5nIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0
T2JqTG9uZ0xvbmdBdHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
bG9uZ0xvbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpCeXRl
U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETEJ5dGVTdHJpbmc+
PihzdGF0ZSwgaW1wbC5ieXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGltcGwudW5z
aWduZWRMb25nTG9uZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyR2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgInN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXI+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0clNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlM8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMTG9uZz4+KHN0YXRlLCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdMb25nUmVjb3JkQXR0cigpKTsKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2ln
bmVkTG9uZ0xvbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRVbnNpZ25lZExvbmdMb25nQXR0cihXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ckdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdE9ialVuc2lnbmVk
TG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgInVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9u
Z0F0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1bnNpZ25lZExv
bmdMb25nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3Ry
aW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMUmVjb3JkPElE
TFVTVlN0cmluZywgSURMTG9uZz4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwg
aW1wbC51c3ZzdHJpbmdMb25nUmVjb3JkQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25n
UmVjb3JkQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRB
dHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqU3RyaW5n
QXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdBdHRyIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMUmVjb3JkPElETEJ5dGVTdHJpbmcsIElETExvbmc+PihzdGF0ZSwgKnRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwudXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoKSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01T
dHJpbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CisgICAgaW1wbC5zZXRTdHJpbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0
cmluZ09ialJlY29yZEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ09ialJlY29y
ZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqU3RyaW5nT2Jq
UmVjb3JkQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdPYmpSZWNvcmRBdHRy
Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2Jq
U3RyaW5nQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmlu
Z0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ09ialJl
Y29yZEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVz
dnN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMUmVjb3JkPElETERPTVN0
cmluZywgSURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCBpbXBsLnN0cmluZ09ialJlY29yZEF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETFVTVlN0cmluZz4oc3RhdGUsIGltcGwudXN2c3RyaW5nQXR0cigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5n
TnVsbGFibGVPYmpSZWNvcmRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdOdWxs
YWJsZU9ialJlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialN0
cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJzdHJp
bmdOdWxsYWJsZU9ialJlY29yZEF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dE9iaj46OmdldDxqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgInVzdnN0cmluZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMUmVjb3Jk
PElETERPTVN0cmluZywgSURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4+KHN0YXRl
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdOdWxsYWJsZU9ialJlY29y
ZEF0dHIoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExVU1ZTdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRVc3ZzdHJpbmdBdHRyKFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iakRpY3Rpb25hcnlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEaWN0
aW9uYXJ5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK2Jvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpE
aWN0aW9uYXJ5QXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJkaWN0aW9uYXJ5QXR0ciIp
OworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialVz
dnN0cmluZ0F0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1c3Zz
dHJpbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpEaWN0aW9u
YXJ5QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVz
dE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRGljdGlvbmFyeTxUZXN0T2Jq
OjpEaWN0aW9uYXJ5Pj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLmRp
Y3Rpb25hcnlBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC50ZXN0T2Jq
QXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVEaWN0aW9uYXJ5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9i
ak51bGxhYmxlRGljdGlvbmFyeUF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFi
bGVEaWN0aW9uYXJ5QXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
Z2V0PGpzVGVzdE9ialRlc3RPYmpBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInRlc3RP
YmpBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURp
Y3Rpb25hcnlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpUZXN0T2JqQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMRGljdGlvbmFyeTxU
ZXN0T2JqOjpEaWN0aW9uYXJ5Pj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwg
aW1wbC5udWxsYWJsZURpY3Rpb25hcnlBdHRyKCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwg
dmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkg
eyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgInRl
c3RPYmpBdHRyIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRUZXN0T2JqQXR0cigqbmF0aXZlVmFsdWUpOwor
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW5u
b3RhdGVkVHlwZUluVW5pb25BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBbm5vdGF0ZWRU
eXBlSW5VbmlvbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9i
akFubm90YXRlZFR5cGVJblVuaW9uQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJhbm5v
dGF0ZWRUeXBlSW5VbmlvbkF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9i
aj46OnNldDxzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgInRlc3RPYmpBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURM
TG9uZz4+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwuYW5ub3RhdGVk
VHlwZUluVW5pb25BdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExOdWxsYWJs
ZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCksIGltcGwudGVzdE51bGxhYmxlT2JqQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW5ub3RhdGVkVHlwZUluU2VxdWVuY2VB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakFubm90YXRlZFR5cGVJ
blNlcXVlbmNlQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJhbm5vdGF0ZWRUeXBlSW5T
ZXF1ZW5jZUF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxq
c1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInRl
c3ROdWxsYWJsZU9iakF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0clNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURM
U2VxdWVuY2U8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4oc3RhdGUsICp0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpLCBpbXBsLmFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0cigpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxl
PElETEludGVyZmFjZTxUZXN0T2JqPj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAidGVzdE51bGxhYmxlT2JqQXR0ciIsICJUZXN0
T2JqIik7IH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwor
ICAgIGltcGwuc2V0VGVzdE51bGxhYmxlT2JqQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbXBs
ZW1lbnRhdGlvbkVudW1BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlv
bkVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVz
dE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiaW1w
bGVtZW50YXRpb25FbnVtQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2Jq
Pjo6c2V0PHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0ZXN0TnVsbGFibGVPYmpBdHRyIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRW51bWVyYXRpb248QWx0ZXJuYXRlRW51bU5h
bWU+PihzdGF0ZSwgaW1wbC5pbXBsZW1lbnRhdGlvbkVudW1BdHRyKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRlLCAqdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSwgaW1wbC5sZW5pZW50VGVzdE9iakF0dHIoKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHJHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpMZW5pZW50VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RP
Ymo+OjpnZXQ8anNUZXN0T2JqWE1MT2JqQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJY
TUxPYmpBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNU
ZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
UmV0dXJuRWFybHk+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibGVuaWVudFRlc3RPYmpBdHRyIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oc3RhdGUsICp0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpLCBpbXBsLnhtbE9iakF0dHIoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRl
LCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAi
bGVuaWVudFRlc3RPYmpBdHRyIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRMZW5pZW50VGVzdE9iakF0dHIo
Km5hdGl2ZVZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iakNyZWF0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorYm9v
bCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQ3JlYXRlR2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImNyZWF0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0clNldHRlciwgQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJldHVybkVhcmx5Pigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAibGVuaWVudFRlc3RPYmpBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExC
b29sZWFuPihpbXBsLmlzQ3JlYXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExE
T01TdHJpbmc+KHN0YXRlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cigpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5n
QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidW5mb3JnZWFibGVBdHRyIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRl
LCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJpbmc+PihzdGF0ZSwgaW1wbC5zdHJp
bmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0
ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
LQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialJlZmxl
Y3RlZFVTVlN0cmluZ0F0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkVVNW
U3RyaW5nQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpz
VGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVVNWU3RyaW5nPihzdGF0
ZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6cmVmbGVjdGVkdXN2c3RyaW5nYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElE
TERPTVN0cmluZz4+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK2Jvb2wgc2V0SlNUZXN0
T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVmbGVj
dGVkSW50ZWdyYWxBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEludGVn
cmFsQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpT
VGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nU2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZElu
dGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
VXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMTG9uZz4oaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0b3I8SURMVVNWU3RyaW5nPj4oc3RhdGUsIGlt
cGwudXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVu
c2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNp
Z25lZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqVXN2c3RyaW5n
QXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAi
dXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVW5zaWduZWRMb25nPihz
dGQ6Om1heCgwLCBpbXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyKSkpOwotICAgIHJldHVybiByZXN1bHQ7
CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0
b3I8SURMVVNWU3RyaW5nPj4oc3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNldFVzdnN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwot
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK2Jvb2wgc2V0
SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0
T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVj
dGVkQm9vbGVhbkF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNl
dDxzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVzdnN0cmluZ0F0dHJUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEJvb2xlYW4+KGltcGwuaGFzQXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRy
QXR0cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExUcmVhdE51bGxBc0VtcHR5QWRh
cHRvcjxJRExCeXRlU3RyaW5nPj4oc3RhdGUsIGltcGwuYnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0ZVN0cmlu
Z0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJHZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkVVJMQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZ0dldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJieXRlU3RyaW5nQXR0clRyZWF0
aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialJlZmxlY3RlZFVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0cikpOwotICAgIHJldHVybiByZXN1bHQ7
CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0
b3I8SURMQnl0ZVN0cmluZz4+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRCeXRlU3RyaW5nQXR0clRyZWF0aW5n
TnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0
ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
LQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK2Jvb2wgc2V0
SlNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVz
dE9ialJlZmxlY3RlZFVTVlVSTEF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVj
dGVkVVNWVVJMQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0
PHNldEpTVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImJ5dGVTdHJpbmdBdHRyVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkVVNWVVJMQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMVVNWU3RyaW5nPihzdGF0ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWR1c3Z1cmxhdHRyQXR0cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExMb25nPj4oc3RhdGUsICp0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmluZ0xvbmdSZWNvcmRBdHRyKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRT
dHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVmbGVjdGVkU3RyaW5n
QXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqU3RyaW5nTG9u
Z1JlY29yZEF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nTG9uZ1JlY29yZEF0
dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmlu
Z0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmlu
Z0xvbmdSZWNvcmRBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBs
LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0
b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExET01TdHJpbmcsIElETExvbmc+Pihz
dGF0ZSwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OworICAgIGltcGwuc2V0U3RyaW5nTG9uZ1JlY29yZEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OworICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdE9ialN0cmluZ0xvbmdSZWNv
cmRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVj
b3JkQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0xv
bmdSZWNvcmRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETExvbmc+KGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0cikpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUzxJRExSZWNvcmQ8SURMVVNWU3RyaW5nLCBJRExMb25nPj4oc3RhdGUsICp0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLnVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25n
UmVjb3JkQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxq
c1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFs
dWUsICJyZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyR2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9u
Z1JlY29yZEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEJvb2xlYW4+KGltcGwuaGFzQXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRC
b29sZWFuQXR0ckF0dHIpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExVU1ZTdHJpbmcsIElETExvbmc+PihzdGF0ZSwgdmFs
dWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIGlt
cGwuc2V0VXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAg
IHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tVVJMQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
VVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK2Jvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNU
ZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJy
ZWZsZWN0ZWRDdXN0b21VUkxBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RP
Ymo+OjpzZXQ8c2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1c3ZzdHJpbmdMb25nUmVjb3JkQXR0ciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0
ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5n
TG9uZ1JlY29yZEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihz
dGF0ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250
ZW50VVJMQXR0ckF0dHIpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMUmVjb3JkPElE
TEJ5dGVTdHJpbmcsIElETExvbmc+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCks
IGltcGwudXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW5h
YmxlZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmlu
Z0xvbmdSZWNvcmRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
Z2V0PGpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyR2V0
dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdM
b25nUmVjb3JkQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5l
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlKCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3JkPElETEJ5dGVTdHJpbmcsIElETExvbmc+
PihzdGF0ZSwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOworICAgIGltcGwuc2V0VXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOworICAgIHJldHVybiB0cnVlOwogfQogCi0jZW5kaWYKLQotI2lmIEVOQUJMRShURVNU
X0ZFQVRVUkUpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW5hYmxlZEJ5U2V0dGlu
Z0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW5hYmxlZEJ5U2V0dGluZ0F0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK2Jvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0
T2JqRW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJl
bmFibGVkQnlTZXR0aW5nQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXI+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1c3ZzdHJpbmdMb25nUmVjb3JkQXR0ciIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW5hYmxlZEJ5U2V0dGluZ0F0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3Ry
aW5nT2JqUmVjb3JkQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+
KHN0YXRlLCBpbXBsLmVuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETFJlY29yZDxJRExET01TdHJpbmcsIElETEludGVyZmFjZTxUZXN0T2Jq
Pj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdPYmpSZWNv
cmRBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNlbmRpZgotCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nT2JqUmVj
b3JkQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rl
c3RPYmpUeXBlZEFycmF5QXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ0eXBlZEFycmF5
QXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9i
alN0cmluZ09ialJlY29yZEF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nT2Jq
UmVjb3JkQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVHlwZWRB
cnJheUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0
cmluZ09ialJlY29yZEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxGbG9hdDMyQXJy
YXk+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwudHlwZWRBcnJheUF0
dHIoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExJbnRlcmZhY2U8VGVzdE9iaj4+PihzdGF0ZSwg
dmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAg
IGltcGwuc2V0U3RyaW5nT2JqUmVjb3JkQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1
dGVXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVX
aXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
Z2V0PGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAiYXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbiIpOworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialN0cmluZ09ialJlY29yZEF0
dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdPYmpSZWNv
cmRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVX
aXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMTG9uZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aEdldHRl
ckV4Y2VwdGlvbigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMUmVjb3JkPElETERP
TVN0cmluZywgSURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4+KHN0YXRlLCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpT
dHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbkdldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsICJhdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqU3RyaW5nTnVs
bGFibGVPYmpSZWNvcmRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ051bGxh
YmxlT2JqUmVjb3JkQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
QXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyU2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExMb25nPihpbXBsLmF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExSZWNvcmQ8
SURMRE9NU3RyaW5nLCBJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pj4oc3RhdGUs
IHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAg
ICBpbXBsLnNldFN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdE9ialN0cmluZ051
bGxhYmxlT2JqUmVjb3JkQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbkdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbiIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVz
dE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgInN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25H
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakRpY3Rpb25hcnlB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIHRocm93
U2NvcGUsIGltcGwuc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTPElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+KHN0YXRl
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5kaWN0aW9uYXJ5QXR0cigpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRGljdGlv
bmFyeUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNU
ZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpEaWN0aW9uYXJ5QXR0ckdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJkaWN0aW9uYXJ5QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakRpY3Rpb25hcnlBdHRyU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uKCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pj4oc3RhdGUsIHZhbHVlKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNl
dERpY3Rpb25hcnlBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdE9iakRpY3Rpb25hcnlB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2Jq
Pjo6Z2V0PGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiY3Vz
dG9tQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpT
VGVzdE9iakRpY3Rpb25hcnlBdHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiZGljdGlvbmFyeUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakN1c3RvbUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiB0
aGlzT2JqZWN0LmN1c3RvbUF0dHIoc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMRGlj
dGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgaW1wbC5udWxsYWJsZURpY3Rpb25hcnlBdHRyKCkpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbmZvb0dldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURp
Y3Rpb25hcnlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0
PGpzVGVzdE9iak9uZm9vR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm9uZm9vIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVEaWN0
aW9uYXJ5QXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZURpY3Rpb25hcnlB
dHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbmZvb0dldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5
QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIGV2ZW50SGFu
ZGxlckF0dHJpYnV0ZSh0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50
LCB3b3JsZEZvckRPTU9iamVjdCgmdGhpc09iamVjdCkpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMRGljdGlvbmFyeTxUZXN0T2Jq
OjpEaWN0aW9uYXJ5Pj4+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXROdWxsYWJsZURpY3Rpb25hcnlBdHRyKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpP
bndlYmtpdGZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK2Jvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxq
c1Rlc3RPYmpPbndlYmtpdGZvb0dldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJvbndlYmtpdGZv
byIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9i
ak51bGxhYmxlRGljdGlvbmFyeUF0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJudWxsYWJsZURpY3Rpb25hcnlBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvb0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5pb25BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
LSAgICByZXR1cm4gZXZlbnRIYW5kbGVyQXR0cmlidXRlKHRoaXNPYmplY3Qud3JhcHBlZCgpLCBl
dmVudE5hbWVzKCkuZm9vRXZlbnQsIHdvcmxkRm9yRE9NT2JqZWN0KCZ0aGlzT2JqZWN0KSk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUzxJRExVbmlvbjxJRExET01TdHJpbmcsIElETENsYW1wQWRhcHRvcjxJRExMb25nPj4+
KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5hbm5vdGF0ZWRUeXBlSW5V
bmlvbkF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
QW5ub3RhdGVkVHlwZUluVW5pb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5Vbmlv
bkF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiYW5ub3RhdGVkVHlwZUluVW5pb25BdHRy
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakFu
bm90YXRlZFR5cGVJblVuaW9uQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC53aXRo
U2NyaXB0U3RhdGVBdHRyaWJ1dGUoc3RhdGUpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuaW9uPElETERPTVN0cmluZywgSURMQ2xhbXBB
ZGFwdG9yPElETExvbmc+Pj4oc3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNldEFubm90YXRlZFR5cGVJblVuaW9uQXR0
cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJp
YnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdp
dGhBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdE9iakFubm90YXRlZFR5cGVJblVuaW9uQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46Omdl
dDxqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUdldHRlcj4o
KnN0YXRlLCB0aGlzVmFsdWUsICJ3aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0
ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9i
akFubm90YXRlZFR5cGVJblVuaW9uQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgImFubm90YXRlZFR5cGVJblVuaW9uQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakFubm90YXRlZFR5
cGVJblNlcXVlbmNlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBs
LndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKHN0YXRlKSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTPElETFNlcXVlbmNlPElETENsYW1wQWRhcHRvcjxJRExMb25nPj4+
KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5hbm5vdGF0ZWRUeXBlSW5T
ZXF1ZW5jZUF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ3
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0
ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZUF0dHIi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZUF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwotICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
Ci0gICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNl
PFRlc3RPYmo+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKmNvbnRleHQpKTsKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETENsYW1w
QWRhcHRvcjxJRExMb25nPj4+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRBbm5vdGF0ZWRUeXBlSW5TZXF1ZW5j
ZUF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2Vz
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwot
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Citib29sIHNldEpTVGVzdE9iakFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RP
YmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQW5ub3RhdGVkVHlwZUluU2VxdWVuY2VB
dHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYW5ub3RhdGVkVHlw
ZUluU2VxdWVuY2VBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpX
aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xv
YmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwud2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzKHN0YXRlKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEVudW1lcmF0aW9uPEFs
dGVybmF0ZUVudW1OYW1lPj4oc3RhdGUsIGltcGwuaW1wbGVtZW50YXRpb25FbnVtQXR0cigpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0dldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ3aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyIpOworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJH
ZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiaW1wbGVtZW50YXRpb25FbnVtQXR0ciIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwotICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0
ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAg
aWYgKFVOTElLRUxZKCFjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RP
Ymo+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoKmNvbnRleHQpKTsKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8gb3B0aW9uYWxOYXRpdmVWYWx1ZSA9IHBhcnNlRW51
bWVyYXRpb248QWx0ZXJuYXRlRW51bU5hbWU+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaWYgKFVOTElLRUxZKCFvcHRpb25h
bE5hdGl2ZVZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBvcHRpb25hbE5hdGl2ZVZhbHVlLnZhbHVlKCk7CisgICAgaW1wbC5zZXRJbXBsZW1lbnRh
dGlvbkVudW1BdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpT
VGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFs
dWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqSW1w
bGVtZW50YXRpb25FbnVtQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgImltcGxlbWVudGF0aW9uRW51bUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0
dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7Ci0gICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRlLCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlQXR0cmlidXRlKHN0YXRlLCAqY29udGV4dCkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgaW1wbC54bWxPYmpBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
IndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMi
KTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpYTUxP
YmpBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIlhNTE9iakF0dHIiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialhNTE9iakF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwotICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYg
KFVOTElLRUxZKCFjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+
PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwud2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhzdGF0
ZSwgKmNvbnRleHQpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJYTUxPYmpBdHRyIiwgIlRlc3RP
YmoiKTsgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Cisg
ICAgaW1wbC5zZXRYTUxPYmpBdHRyKCpuYXRpdmVWYWx1ZSk7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVHZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyU2V0dGVyPigqc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAiWE1MT2JqQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdp
dGhTcGFjZXNBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNyZWF0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4o
c3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKHN0YXRlLCAqY29udGV4
dCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExCb29sZWFuPihpbXBsLmlzQ3JlYXRl
KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3Rh
Y2tBdHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEFyZ3VtZW50
c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9iakNyZWF0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJjcmVh
dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1
bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakNyZWF0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RP
Ymo+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEFy
Z3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyMUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFu
PihzdGF0ZSwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOworICAgIGltcGwuc2V0Q3JlYXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K2Jvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFHZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiY29uZGl0aW9uYWxBdHRyMSIpOworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakNyZWF0ZVNldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNyZWF0ZSIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmNvbmRpdGlvbmFsQXR0cjEoKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwuYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmlu
Z2F0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyMkdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0
dHIyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
UmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRT
dHJpbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRp
b25hbEF0dHIyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRTdHJpbmdBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmNvbmRpdGlv
bmFsQXR0cjIoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIs
IFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5n
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9i
aj46OmdldDxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgImNvbmRpdGlvbmFsQXR0cjMiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9i
aj46OnNldDxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyU2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmNvbmRpdGlvbmFsQXR0cjMo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVTVlN0cmluZz4oc3RhdGUsIGltcGwu
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxl
Y3RlZHVzdnN0cmluZ2F0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2VuZGlm
Ci0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxl
Y3RlZFVTVlN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpnZXQ8anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjQiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFVTVlN0cmluZ0F0dHIiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3Ry
aW5nQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVz
dE9iamVjdEE6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCkpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
VVNWU3RyaW5nPihzdGF0ZSwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOworICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnN0cmluZ2F0dHJBdHRyLCBXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLSNlbmRpZgotCi0jaWYgRU5B
QkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1
Y3RvckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHI1Iik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqUmVmbGVjdGVk
VVNWU3RyaW5nQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJl
ZmxlY3RlZFVTVlN0cmluZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKLSAgICByZXR1cm4gSlNUZXN0T2JqZWN0Qjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwg
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmdldElu
dGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRy
QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHI2Iik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEludGVncmFsQXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRl
Z3JhbEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rl
c3RPYmplY3RDOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TExvbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CisgICAgaW1wbC5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpDYWNoZWRBdHRyaWJ1dGUxR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRy
aWJ1dGUxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0
T2JqQ2FjaGVkQXR0cmlidXRlMUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJjYWNoZWRBdHRy
aWJ1dGUxIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNU
ZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAicmVmbGVjdGVkSW50ZWdyYWxBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7Ci0gICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0Lm1f
Y2FjaGVkQXR0cmlidXRlMS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMQW55PihpbXBsLmNhY2hlZEF0dHJpYnV0ZTEoKSk7Ci0gICAgdGhpc09iamVjdC5t
X2NhY2hlZEF0dHJpYnV0ZTEuc2V0KHN0YXRlLnZtKCksICZ0aGlzT2JqZWN0LCByZXN1bHQpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExVbnNpZ25lZExvbmc+KHN0ZDo6bWF4KDAsIGlt
cGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNp
Z25lZGludGVncmFsYXR0ckF0dHIpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTJHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdE9iaj46OmdldDxqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyR2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgImNhY2hlZEF0dHJpYnV0ZTIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdE9iaj46OmdldDxqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckdldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWdu
ZWRJbnRlZ3JhbEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGlmIChK
U1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC5tX2NhY2hlZEF0dHJpYnV0ZTIuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExBbnk+KGltcGwuY2FjaGVkQXR0cmlidXRlMigpKTsKLSAgICB0aGlz
T2JqZWN0Lm1fY2FjaGVkQXR0cmlidXRlMi5zZXQoc3RhdGUudm0oKSwgJnRoaXNPYmplY3QsIHJl
c3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExVbnNpZ25lZExvbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRVbnNpZ25lZEludGVncmFsQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRy
LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakFueUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRl
Z3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpnZXQ8anNUZXN0T2JqQW55QXR0cmlidXRlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgImFueUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
c2V0PHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyU2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0
dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9v
bGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQW55PihpbXBsLmFueUF0dHJp
YnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQm9vbGVhbj4oaW1wbC5oYXNB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGVkYm9vbGVhbmF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iak9iamVjdEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqT2JqZWN0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
Qm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8
anNUZXN0T2JqT2JqZWN0QXR0cmlidXRlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm9iamVj
dEF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpz
VGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInJl
ZmxlY3RlZEJvb2xlYW5BdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpPYmplY3RBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExPYmplY3Q+KGlt
cGwub2JqZWN0QXR0cmlidXRlKCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNldEJvb2xlYW5BdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakNvbnRlbnREb2N1bWVudEdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29udGVudERvY3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46Omdl
dDxqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnRHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiY29u
dGVudERvY3VtZW50Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8
c2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRCb29sZWFuQXR0ciIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxEb2N1bWVudD4+KHN0YXRlLCAqdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSwgQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0
ZSwgaW1wbC5jb250ZW50RG9jdW1lbnQoKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludEdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
VVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rl
c3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibXV0YWJsZVBvaW50
Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVm
bGVjdGVkVVJMQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRVUkxBdHRy
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0
dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+KHN0YXRlLCAqdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5tdXRhYmxlUG9pbnQoKSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRl
LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Cisg
ICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVy
cnlHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqU3RyYXdiZXJyeUdldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsICJzdHJhd2JlcnJ5Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RP
Ymo+OjpzZXQ8c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0clNldHRlcj4oKnN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZFVSTEF0dHIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnlHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5ibHVlYmVycnkoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETFVTVlN0cmluZz4oc3RhdGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2dXJsYXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb25HZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dE9iaj46OmdldDxqc1Rlc3RPYmpEZXNjcmlwdGlvbkdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
ICJkZXNjcmlwdGlvbiIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0
PGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAi
cmVmbGVjdGVkVVNWVVJMQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqRGVzY3JpcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZFVTVlVSTEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGltcGwuZGVz
Y3JpcHRpb24oKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExVU1ZTdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2dXJsYXR0ckF0dHIs
IFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iaklkR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJZChFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK2Jv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpJZEdldHRlcj4o
KnN0YXRlLCB0aGlzVmFsdWUsICJpZCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6c2V0PHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJTZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRVU1ZVUkxBdHRyIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJZEdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmlkKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSGFz
aEdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
LQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSGFzaChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RP
Ymo+OjpnZXQ8anNUZXN0T2JqSGFzaEdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJoYXNoIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVmbGVj
dGVkU3RyaW5nQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRTdHJpbmdB
dHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRy
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmhhc2goKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CisgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVw
bGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpn
ZXQ8anNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCAicmVwbGFjZWFibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dE9iaj46OnNldDxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyU2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVHZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUlu
dGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLnJlcGxh
Y2VhYmxlQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihp
bXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dEludGVncmFsQXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0
dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxlRG91YmxlQXR0cmlidXRlIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVmbGVjdGVkQ3Vz
dG9tSW50ZWdyYWxBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEN1c3Rv
bUludGVncmFsQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0clNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURM
TnVsbGFibGU8SURMVW5yZXN0cmljdGVkRG91YmxlPj4oaW1wbC5udWxsYWJsZURvdWJsZUF0dHJp
YnV0ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxh
YmxlTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdy
YWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsICJudWxsYWJsZUxvbmdBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0
dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRDdXN0
b21JbnRlZ3JhbEF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlTG9uZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMTnVsbGFibGU8SURMTG9uZz4+KGltcGwubnVsbGFibGVMb25nQXR0cmlidXRlKCkp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExCb29sZWFuPihpbXBsLmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50
Qm9vbGVhbkF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0
dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSIpOworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialJlZmxlY3RlZEN1
c3RvbUJvb2xlYW5BdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEN1c3Rv
bUJvb2xlYW5BdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZUJvb2xlYW5BdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExO
dWxsYWJsZTxJRExCb29sZWFuPj4oaW1wbC5udWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUoKSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExCb29s
ZWFuPihzdGF0ZSwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOworICAgIGltcGwuc2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxh
YmxlU3RyaW5nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpn
ZXQ8anNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCAibnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0clNl
dHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJs
ZVN0cmluZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExOdWxsYWJsZTxJRExET01TdHJpbmc+PihzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmluZ0F0dHJp
YnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwg
aW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJM
QXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0
ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0
ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialJl
ZmxlY3RlZEN1c3RvbVVSTEF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVk
Q3VzdG9tVVJMQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElE
TE51bGxhYmxlPElETExvbmc+PihpbXBsLm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKCkp
OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOworICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciwgV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOworICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK2Jvb2wgc2V0SlNU
ZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxlU3RyaW5n
U2V0dGFibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OnNldDxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyU2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCisjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KHN0YXRlLCBpbXBsLm51
bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJs
ZUF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZVVTVlN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpn
ZXQ8anNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlz
VmFsdWUsICJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKKyNlbmRpZgorCisjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExOdWxsYWJsZTxJRExVU1ZTdHJpbmc+PihzdGF0ZSwgaW1wbC5udWxsYWJsZVVTVlN0
cmluZ1NldHRhYmxlQXR0cmlidXRlKCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIGltcGwuc2V0RW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJp
bmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCeXRl
U3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1
dGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVB
dHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRK
U1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRy
aWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorI2VuZGlmCisKKyNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakVuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMQnl0ZVN0cmluZz4+KHN0
YXRlLCBpbXBsLm51bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKCkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmVuYWJsZWRCeVNl
dHRpbmdBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmFi
bGVkQnlTZXR0aW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVHZXR0ZXI+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCAibnVsbGFibGVTdHJpbmdWYWx1ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakVuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGVHZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiZW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCisjZW5kaWYKKworI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZVNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTnVsbGFibGU8SURMTG9uZz4+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLm51bGxhYmxl
U3RyaW5nVmFsdWUoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRFbmFibGVkQnlTZXR0aW5n
QXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQnlTZXR0aW5nQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJh
dHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRK
U1Rlc3RPYmpFbmFibGVkQnlTZXR0aW5nQXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiZW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKKyNlbmRp
ZgorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHJHZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5hdHRyaWJ1dGUo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxGbG9hdDMyQXJyYXk+
PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwudHlwZWRBcnJheUF0dHIo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
Z2V0PGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgImF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqVHlwZWRBcnJheUF0dHJHZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidHlwZWRBcnJheUF0dHIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0clNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMRW51bWVyYXRpb248VGVzdE9iajo6T3B0aW9uYWw+PihzdGF0ZSwg
aW1wbC5hdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxGbG9hdDMyQXJy
YXk+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0
T2JqZWN0IiwgInR5cGVkQXJyYXlBdHRyIiwgIkZsb2F0MzJBcnJheSIpOyB9KTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNldFR5cGVkQXJy
YXlBdHRyKG5hdGl2ZVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIHJldHVybiB0cnVlOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0K
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorYm9vbCBzZXRK
U1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdl
dHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpOworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialR5cGVkQXJyYXlB
dHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidHlwZWRBcnJheUF0
dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0
cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRy
aWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETElu
dGVyZmFjZTxUZXN0Tm9kZT4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1w
bC5wdXRGb3J3YXJkc0F0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURM
TG9uZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlv
bigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdl
dHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJwdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQXR0cmli
dXRlV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJhdHRyaWJ1
dGVXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oc3RhdGUsICp0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLnB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1
dGUoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOworICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbihX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdE9iakF0dHJpYnV0
ZVdpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5naWZpZXJBdHRyaWJ1dGUiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRo
R2V0dGVyRXhjZXB0aW9uU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
YXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVVNWU3RyaW5nPihzdGF0ZSwgaW1wbC5zdHJpbmdpZmll
ckF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5h
dHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIEpTVGVzdE9ialByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8
SlNUZXN0T2JqUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVz
dE9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0
KCkpKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdE9ialByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5h
bWljRG93bmNhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKLSAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4g
ZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIHZhbHVlKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OmdldDxqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgImF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAotYm9vbCBz
ZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZVBv
aW50ZXIsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvblNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgQVNTRVJUKHN0YXRlUG9pbnRlcik7
Ci0gICAgYXV0byYgc3RhdGUgPSAqc3RhdGVQb2ludGVyOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgYXV0byB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0
YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
Ci0gICAgVGVzdE9iajo6c2V0U3RhdGljU3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CisgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLnNldEF0dHJp
YnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdFN1Yk9i
akVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpUZXN0U3ViT2Jq
RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rl
c3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialRlc3RTdWJP
YmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIik7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNl
dHRlckV4Y2VwdGlvblNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0
dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3Ry
aW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIlRlc3RTdWJP
YmpFbmFibGVkQnlTZXR0aW5nIiksIHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpFbnVt
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2Jq
Pjo6c2V0PHNldEpTVGVzdE9iakVudW1BdHRyRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJlbnVtQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRy
V2l0aEdldHRlckV4Y2VwdGlvblNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gb3B0aW9uYWxOYXRp
dmVWYWx1ZSA9IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCB2YWx1
ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAg
IGlmIChVTkxJS0VMWSghb3B0aW9uYWxOYXRpdmVWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gb3B0aW9uYWxOYXRpdmVWYWx1ZS52YWx1ZSgpOwot
ICAgIGltcGwuc2V0RW51bUF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIGltcGwuc2V0
U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpCeXRl
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQnl0
ZUF0dHJGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImJ5dGVBdHRy
Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2Jq
U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25TZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETEJ5dGU+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRCeXRlQXR0cihXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRp
b24oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqT2N0ZXRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9iak9jdGV0QXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVz
dE9iak9jdGV0QXR0ckZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
b2N0ZXRBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNU
ZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iak9jdGV0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvblNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TE9jdGV0PihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldE9jdGV0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CisgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLnNldFN0
cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialNob3J0
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNl
dEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialNo
b3J0QXR0ckZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic2hvcnRB
dHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0
T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25TZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTaG9ydD4oc3RhdGUsIHZhbHVlKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNl
dFNob3J0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5jdXN0b21BdHRyKHN0
YXRlKTsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyRnVuY3Rp
b24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjbGFtcGVkU2hvcnRBdHRyIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQ3VzdG9t
QXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJjdXN0b21BdHRyIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakN1c3RvbUF0
dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExDbGFt
cEFkYXB0b3I8SURMU2hvcnQ+PihzdGF0ZSwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwuc2V0Q2xhbXBlZFNob3J0QXR0cihXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgdGhpc09iamVjdC5zZXRDdXN0b21BdHRyKHN0YXRlLCB2
YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFu
Z2VTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpz
ZXQ8c2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyRnVuY3Rpb24+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbmZvcmNlUmFuZ2VTaG9ydEF0dHIiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpDdXN0b21BdHRyU2V0
dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY3VzdG9tQXR0ciIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyRnVu
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iak9uZm9vR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRW5mb3JjZVJhbmdl
QWRhcHRvcjxJRExTaG9ydD4+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRFbmZvcmNlUmFuZ2VTaG9ydEF0dHIo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIHJldHVybiB0cnVlOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgcmV0dXJuIGV2ZW50SGFuZGxlckF0dHJpYnV0ZSh0aGlzT2JqZWN0Lndy
YXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB3b3JsZEZvckRPTU9iamVjdCgmdGhpc09i
amVjdCkpOwogfQogCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNo
b3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9uZm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyRnVuY3Rp
b24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1bnNpZ25lZFNob3J0QXR0ciIp
OworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iak9uZm9v
R2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm9uZm9vIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPbmZvb1NldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVkU2hvcnQ+KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
Ci0gICAgaW1wbC5zZXRVbnNpZ25lZFNob3J0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Cisg
ICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKHN0YXRlLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0
LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK2Jvb2wgc2V0SlNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqT25mb29TZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJvbmZvbyIpOworfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqT253ZWJraXRmb29HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIHJldHVybiBldmVudEhh
bmRsZXJBdHRyaWJ1dGUodGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVu
dCwgd29ybGRGb3JET01PYmplY3QoJnRoaXNPYmplY3QpKTsKK30KIAotYm9vbCBzZXRKU1Rlc3RP
YmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9ud2Vi
a2l0Zm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpT
VGVzdE9iakxvbmdBdHRyRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJsb25nQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpz
VGVzdE9iak9ud2Via2l0Zm9vR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm9ud2Via2l0Zm9v
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0ckZ1bmN0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpP
bndlYmtpdGZvb1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CisgICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKHN0YXRlLCB0aGlzT2JqZWN0LCB0aGlzT2Jq
ZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB2YWx1ZSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
LQotYm9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNl
dEpTVGVzdE9iak9ud2Via2l0Zm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakxvbmdMb25nQXR0ckZ1bmN0aW9u
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibG9uZ0xvbmdBdHRyIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqT253ZWJraXRm
b29TZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJvbndlYmtpdGZvbyIp
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
aldpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZ0xvbmc+KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRM
b25nTG9uZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIHJldHVybiB0cnVlOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLndpdGhTY3JpcHRTdGF0ZUF0dHJp
YnV0ZShzdGF0ZSkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLQotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9ialVu
c2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyRnVuY3Rpb24+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIp
OworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialdpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ3aXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVu
c2lnbmVkTG9uZ0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xv
bmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9u
Zz4oc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKLSAgICBpbXBsLnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKKyAgICBpbXBsLnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShzdGF0ZSwgV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OnNldDxzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlU2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRl
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
aldpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
Ci0gICAgaW1wbC5zZXRTdHJpbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC53aXRoQ2Fs
bFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShzdGF0ZSkpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJG
dW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0K
LWJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialVz
dnN0cmluZ0F0dHJGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVz
dnN0cmluZ0F0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxq
c1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJ3aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIp
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0ckZ1bmN0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVTVlN0cmluZz4oc3RhdGUsIHZhbHVl
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwu
c2V0VXN2c3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgaW1wbC5zZXRXaXRo
Q2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShzdGF0ZSwgYWN0aXZlRE9NV2luZG93
KCZzdGF0ZSksIGZpcnN0RE9NV2luZG93KCZzdGF0ZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
VGVzdE9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
c2V0PHNldEpTVGVzdE9ialRlc3RPYmpBdHRyRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJ0ZXN0T2JqQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0
cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aENhbGxX
aXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialRlc3RPYmpBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKFVOTElL
RUxZKCFjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ0ZXN0T2JqQXR0ciIsICJUZXN0T2JqIik7
IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGlt
cGwuc2V0VGVzdE9iakF0dHIoKm5hdGl2ZVZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgKnRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGUoKmNvbnRleHQpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9i
alRlc3ROdWxsYWJsZU9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpB
dHRyRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0ZXN0TnVsbGFi
bGVPYmpBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsKIH0KIAot
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJGdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9i
aj4+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0
T2JqZWN0IiwgInRlc3ROdWxsYWJsZU9iakF0dHIiLCAiVGVzdE9iaiIpOyB9KTsKKyAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRlLCB2YWx1
ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRo
cm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldFRlc3ROdWxs
YWJsZU9iakF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGUoKmNvbnRleHQsICpuYXRpdmVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckZ1
bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQot
Ym9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29s
IHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpT
VGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckZ1bmN0aW9uLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6UmV0dXJuRWFybHk+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJsZW5pZW50
VGVzdE9iakF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxz
ZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVNldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50
VGVzdE9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRl
cmZhY2U8VGVzdE9iaj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSwgIlRlc3RPYmplY3QiLCAibGVuaWVudFRlc3RPYmpBdHRyIiwgIlRlc3RPYmoiKTsgfSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5z
ZXRMZW5pZW50VGVzdE9iakF0dHIoKm5hdGl2ZVZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgKnRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwud2l0aFNjcmlwdFN0YXRl
QXR0cmlidXRlUmFpc2VzKHN0YXRlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmdGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7Ci0KLWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpzZXQ8c2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5j
dGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0dHJUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpnZXQ8anNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1w
dHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzU2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVHJlYXROdWxsQXNFbXB0eUFk
YXB0b3I8SURMRE9NU3RyaW5nPj4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRl
VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGVSYWlzZXMoc3RhdGUsICpuYXRpdmVWYWx1ZSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqVXN2c3RyaW5n
QXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgInVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqV2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0dl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVj
dCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmIChVTkxJS0VMWSghY29udGV4
dCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExUcmVh
dE51bGxBc0VtcHR5QWRhcHRvcjxJRExVU1ZTdHJpbmc+PihzdGF0ZSwgdmFsdWUpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwuc2V0VXN2c3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwot
ICAgIHJldHVybiB0cnVlOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcygqY29udGV4dCkp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rl
c3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0
dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNl
dDxzZXRKU1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5j
dGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImJ5dGVTdHJpbmdBdHRyVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFp
c2VzR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlUmFpc2VzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpC
eXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExCeXRlU3Ry
aW5nPj4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRl
LCBzY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1
dGVSYWlzZXMiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldEJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZVJhaXNlcygqY29udGV4dCwgKm5hdGl2ZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29y
ZEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7Ci0KLWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRl
UmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6c2V0PHNldEpTVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyRnVuY3Rpb24+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdMb25nUmVjb3JkQXR0ciIpOworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlz
ZXMiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0xvbmdSZWNv
cmRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9i
YWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoVU5MSUtFTFko
IWNvbnRleHQpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMUmVjb3JkPElETERPTVN0cmluZywgSURMTG9uZz4+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRTdHJpbmdM
b25nUmVjb3JkQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oc3RhdGUsICp0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoc3RhdGUsICpjb250ZXh0KSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9u
Z1JlY29yZEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyRnVu
Y3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1c3ZzdHJpbmdMb25nUmVj
b3JkQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
VXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExVU1ZTdHJpbmcsIElETExvbmc+PihzdGF0ZSwgdmFs
dWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2Jq
Pj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9i
amVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRl
IiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7Ci0gICAgaW1wbC5zZXRVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRl
KHN0YXRlLCAqY29udGV4dCwgKm5hdGl2ZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJG
dW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0K
LWJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJGdW5jdGlv
bj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVzdnN0cmluZ0xvbmdSZWNvcmRB
dHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVNldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3JkPElETEJ5dGVTdHJp
bmcsIElETExvbmc+PihzdGF0ZSwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwuc2V0VXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIHJldHVybiB0cnVlOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKHN0YXRlLCAqY29udGV4dCkpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ09ialJl
Y29yZEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0ckZ1bmN0aW9u
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nT2JqUmVjb3JkQXR0ciIp
OworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5nT2JqUmVjb3JkQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMSW50ZXJmYWNlPFRl
c3RPYmo+Pj4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwuc2V0U3RyaW5nT2JqUmVj
b3JkQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKHN0YXRlLCAqY29udGV4dCwgKm5hdGl2ZVZhbHVl
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9ialN0cmluZ051
bGxhYmxlT2JqUmVjb3JkQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxz
ZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHJGdW5jdGlvbj4oKnN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0ciIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNTZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHJGdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQp
KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3Jk
PElETERPTVN0cmluZywgSURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4+KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0g
ICAgaW1wbC5zZXRTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwotICAgIHJldHVybiB0cnVlOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRl
cmZhY2U8VGVzdE9iaj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC53
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0
ZShzdGF0ZSwgKmNvbnRleHQpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpEaWN0aW9uYXJ5QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpE
aWN0aW9uYXJ5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9i
akRpY3Rpb25hcnlBdHRyRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJkaWN0aW9uYXJ5QXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
Z2V0PGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRo
U3BhY2VzQXR0cmlidXRlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpEaWN0aW9uYXJ5QXR0ckZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZVNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERpY3Rpb25hcnk8
VGVzdE9iajo6RGljdGlvbmFyeT4+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0
ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlIiwgIlRlc3RPYmoiKTsg
fSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1w
bC5zZXREaWN0aW9uYXJ5QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNvbnRl
eHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShzdGF0ZSwgKmNvbnRl
eHQsICpuYXRpdmVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLQotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHJGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0
T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RP
Ymo+OjpzZXQ8c2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0ckZ1bmN0aW9uPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVsbGFibGVEaWN0aW9uYXJ5QXR0ciIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlU2V0
dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHJGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMRGlj
dGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pj4+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXROdWxsYWJsZURp
Y3Rpb25hcnlBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgKnRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxT
dGFja0F0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHJGdW5jdGlvbihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNU
ZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5pb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpB
bm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHJGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgImFubm90YXRlZFR5cGVJblVuaW9uQXR0ciIpOworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxs
U3RhY2tBdHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEFyZ3Vt
ZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5pb25BdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVu
dHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExVbmlvbjxJRExET01TdHJpbmcsIElETENsYW1wQWRhcHRvcjxJRExM
b25nPj4+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
SW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tB
dHRyaWJ1dGUiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldEFubm90YXRlZFR5cGVJblVuaW9uQXR0cihXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2Fs
bFN0YWNrQXR0cmlidXRlKCpuYXRpdmVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLQot
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
LQotYm9vbCBzZXRKU1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZUF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCitib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyRnVuY3Rp
b24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhbm5vdGF0ZWRUeXBlSW5TZXF1
ZW5jZUF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRK
U1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlU2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFja0F0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
QW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorI2lmIEVOQUJMRShDb25kaXRpb24xKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjFHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETENsYW1wQWRhcHRvcjxJRExMb25nPj4+
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7Ci0gICAgaW1wbC5zZXRBbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZUF0dHIoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwotICAgIHJldHVybiB0cnVlOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExMb25nPihpbXBsLmNvbmRpdGlvbmFsQXR0cjEoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
LQotYm9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlv
bkVudW1BdHRyRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbXBs
ZW1lbnRhdGlvbkVudW1BdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpnZXQ8anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
ICJjb25kaXRpb25hbEF0dHIxIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
I2VuZGlmCisKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBvcHRpb25h
bE5hdGl2ZVZhbHVlID0gcGFyc2VFbnVtZXJhdGlvbjxBbHRlcm5hdGVFbnVtTmFtZT4oc3RhdGUs
IHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAg
IGlmIChVTkxJS0VMWSghb3B0aW9uYWxOYXRpdmVWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gb3B0aW9uYWxOYXRpdmVWYWx1ZS52YWx1ZSgpOwot
ICAgIGltcGwuc2V0SW1wbGVtZW50YXRpb25FbnVtQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CisgICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIxKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqWE1M
T2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9v
bCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialhNTE9iakF0dHJG
dW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlhNTE9iakF0dHIiKTsK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIxU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29u
ZGl0aW9uYWxBdHRyMSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqWE1M
T2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKLXsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMSW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIlhNTE9iakF0dHIiLCAiVGVzdE9iaiIpOyB9KTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNl
dFhNTE9iakF0dHIoKm5hdGl2ZVZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9iakNyZWF0
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OnNldDxzZXRKU1Rlc3RPYmpDcmVhdGVGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgImNyZWF0ZSIpOwotfQorI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpDcmVhdGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCisjaWYgRU5BQkxF
KENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExCb29sZWFuPihzdGF0ZSwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwuc2V0Q3JlYXRlKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2Jq
Pjo6c2V0PHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJGdW5jdGlvbj4oKnN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKLX0KLQotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCi17CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3Rh
dGUsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
LSAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmlu
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RP
Ymo+OjpzZXQ8c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckZ1bmN0aW9uPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkVVNWU3RyaW5nQXR0ciIpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmNvbmRpdGlvbmFsQXR0cjIo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExVU1ZTdHJpbmc+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2c3RyaW5nYXR0ckF0dHIs
IFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyR2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjIiKTsKIH0KIAorI2VuZGlmCiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJGdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialJlZmxl
Y3RlZEludGVncmFsQXR0ckZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAicmVmbGVjdGVkSW50ZWdyYWxBdHRyIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQorc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwuc2V0
SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0
dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQot
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxB
dHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OwotCi1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNl
dEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyRnVuY3Rpb24+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIp
OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJ
bnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETFVuc2lnbmVkTG9uZz4oc3RhdGUsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldFVuc2lnbmVkSW50ZWdyYWxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0
dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICBpbXBsLnNldENvbmRpdGlvbmFsQXR0cjIo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckZ1bmN0aW9uKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFu
QXR0ckZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVk
Qm9vbGVhbkF0dHIiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZEJvb2xlYW5BdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorYm9vbCBzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExCb29sZWFuPihzdGF0ZSwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwuc2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
c2V0PHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHIyIik7CiB9CiAKKyNlbmRpZgogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckZ1bmN0aW9uKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJGdW5j
dGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZFVSTEF0dHIi
KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJG
dW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8
IEVOQUJMRShDb25kaXRpb24yKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7Ci0gICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkVVNWVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
c2V0PHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJGdW5jdGlvbj4oKnN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZFVTVlVSTEF0dHIiKTsKLX0KLQotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJGdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCi17CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVTVlN0cmluZz4oc3RhdGUs
IHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAg
ICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0ZWR1c3Z1cmxhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8
c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmNvbmRpdGlvbmFsQXR0cjMoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0
cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7Ci0gICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RP
Ymo+OjpnZXQ8anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dldHRlcj4oKnN0YXRlLCB0aGlzVmFs
dWUsICJjb25kaXRpb25hbEF0dHIzIik7CiB9CiAKKyNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRD
dXN0b21JbnRlZ3JhbEF0dHJGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgInJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ciIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzU2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3Rh
dGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
LSAgICBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9t
Q29udGVudEludGVncmFsQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICBpbXBs
LnNldENvbmRpdGlvbmFsQXR0cjMoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21Cb29sZWFuQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckZ1bmN0aW9uPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiKTsKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEF0dHIzU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0
aW9uYWxBdHRyMyIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tQm9vbGVhbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCisjZW5k
aWYKKworI2lmIEVOQUJMRShDb25kaXRpb24xKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETEJvb2xlYW4+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0ciwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwotICAgIHJldHVybiB0cnVlOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgcmV0dXJuIEpTVGVzdE9iamVjdEE6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1
c3RvbVVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckZ1bmN0aW9uPigq
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIp
OworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjRDb25zdHJ1Y3RvckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJjb25kaXRp
b25hbEF0dHI0Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRDdXN0b21VUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorI2VuZGlmCisK
KyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVS
TEF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
Y29uZGl0aW9uYWxBdHRyNCIpLCB2YWx1ZSk7CiB9CiAKLQotI2lmIEVOQUJMRShURVNUX0ZFQVRV
UkUpCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJp
YnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8
c2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9uPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPihzdGF0ZSwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwotICAgIGltcGwuc2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9y
U2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxBdHRy
NCIpOwogfQogCiAjZW5kaWYKIAotI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZUZ1bmN0aW9uKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRK
U1Rlc3RPYmpFbmFibGVkQnlTZXR0aW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorI2lmIEVO
QUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakVu
YWJsZWRCeVNldHRpbmdBdHRyaWJ1dGVGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgImVuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUiKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICByZXR1cm4gSlNUZXN0
T2JqZWN0Qjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQnlTZXR0
aW5nQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRFbmFibGVkQnlTZXR0aW5nQXR0cmlidXRl
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3Ry
dWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNSIpOwogfQog
CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRy
RnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwot
Ci1ib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialR5cGVkQXJy
YXlBdHRyRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0eXBlZEFy
cmF5QXR0ciIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJh
eUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCisjaWYgRU5BQkxFKENvbmRpdGlv
bjEpICYmIEVOQUJMRShDb25kaXRpb24yKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxGbG9hdDMyQXJyYXk+PihzdGF0ZSwgdmFs
dWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0
aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgInR5cGVk
QXJyYXlBdHRyIiwgIkZsb2F0MzJBcnJheSIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldFR5cGVkQXJyYXlBdHRyKG5hdGl2ZVZh
bHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29s
IHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Ci17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2Jq
QXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbiIpOworICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNvbmRp
dGlvbmFsQXR0cjUiKSwgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwuc2V0QXR0
cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNSIpOwogfQogCisjZW5kaWYKIAotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25G
dW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0K
LWJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rl
c3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uIik7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0
aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorI2lmIEVOQUJMRShDb25kaXRpb24x
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpD
b25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwotICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwg
aW1wbC5zZXRBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUp
KSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICByZXR1
cm4gSlNUZXN0T2JqZWN0Qzo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSk7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0
cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbiIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2Jq
Pjo6Z2V0PGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcj4oKnN0YXRl
LCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHI2Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKKyNlbmRpZgorCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjZDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJjb25kaXRpb25hbEF0dHI2IiksIHZhbHVlKTsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNl
dEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
LSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2
Q29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjb25k
aXRpb25hbEF0dHI2Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
KyNlbmRpZgorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRl
MUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBpZiAoSlNW
YWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QubV9jYWNoZWRBdHRyaWJ1dGUxLmdldCgpKQor
ICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
c3RhdGUsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKLSAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuc2V0U3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQW55PihpbXBsLmNhY2hl
ZEF0dHJpYnV0ZTEoKSk7CisgICAgdGhpc09iamVjdC5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KHN0
YXRlLnZtKCksICZ0aGlzT2JqZWN0LCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHJGdW5jdGlvbihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNU
ZXN0T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akNhY2hlZEF0dHJpYnV0ZTEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpzZXQ8c2V0SlNUZXN0T2JqQ3VzdG9tQXR0ckZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiY3VzdG9tQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXI+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCAiY2FjaGVkQXR0cmlidXRlMSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqQ3VzdG9tQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICB0aGlzT2JqZWN0LnNldEN1c3RvbUF0dHIoc3RhdGUsIHZhbHVlKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT25mb29GdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJv
b2wgc2V0SlNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqT25mb29GdW5jdGlvbj4oKnN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm9uZm9vIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpPbmZvb0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKLXsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUoc3RhdGUsIHRoaXNPYmplY3QsIHRoaXNPYmpl
Y3Qud3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQsIHZhbHVlKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QubV9jYWNoZWRB
dHRyaWJ1dGUyLmdldCgpKQorICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExBbnk+KGltcGwuY2FjaGVkQXR0cmlidXRlMigpKTsKKyAgICB0aGlzT2JqZWN0Lm1fY2FjaGVk
QXR0cmlidXRlMi5zZXQoc3RhdGUudm0oKSwgJnRoaXNPYmplY3QsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT253ZWJr
aXRmb29GdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7Ci0KLWJvb2wgc2V0SlNUZXN0T2JqT253ZWJraXRmb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iak9ud2Via2l0Zm9vRnVuY3Rpb24+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJvbndlYmtpdGZvbyIpOworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0
ZTJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiY2FjaGVkQXR0cmlidXRlMiIpOwogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT253ZWJraXRmb29GdW5jdGlvbihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmli
dXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUoc3RhdGUs
IHRoaXNPYmplY3QsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQs
IHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9ialdpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGVGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRT
dGF0ZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQotewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwuc2V0V2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlKHN0YXRlLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEFueT4oaW1wbC5hbnlBdHRyaWJ1dGUoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0T2Jq
V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVy
Q2FsbFdpdGhBdHRyaWJ1dGVGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlIik7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQW55QXR0cmlidXRlR2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImFueUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVG
dW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQW55QXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExBbnk+KHN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxs
V2l0aEF0dHJpYnV0ZShzdGF0ZSwgYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGZpcnN0RE9NV2lu
ZG93KCZzdGF0ZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICBpbXBsLnNldEFueUF0dHJp
YnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLQotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOwotCi1ib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0
SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVGdW5jdGlvbj4oKnN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0
SlNUZXN0T2JqQW55QXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiYW55QXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPYmplY3RBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZSIsICJUZXN0T2JqIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwotICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7Ci0gICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKmNvbnRl
eHQsICpuYXRpdmVWYWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETE9iamVjdD4oaW1wbC5vYmplY3RBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJp
YnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9iamVj
dEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxz
ZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbj4oKnN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNl
cyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iak9i
amVjdEF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJvYmplY3RBdHRyaWJ1dGUi
KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRlLCB2
YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAid2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMT2JqZWN0PihzdGF0ZSwgdmFsdWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwuc2V0V2l0aFNjcmlw
dFN0YXRlQXR0cmlidXRlUmFpc2VzKHN0YXRlLCAqbmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0
T2JqZWN0QXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVz
dE9iak9iamVjdEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMiKTsKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpPYmplY3RBdHRy
aWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJvYmplY3RBdHRy
aWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnRlbnREb2N1bWVudEdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
SW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlUmFpc2VzIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7Ci0gICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcygq
Y29udGV4dCwgKm5hdGl2ZVZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPERvY3VtZW50Pj4oc3RhdGUsICp0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpLCBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKHN0YXRl
LCBpbXBsLmNvbnRlbnREb2N1bWVudCgpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RP
YmpDb250ZW50RG9jdW1lbnRHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiY29udGVudERvY3Vt
ZW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludEdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMSW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVBdHRyaWJ1dGUiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwotICAgIGlmIChVTkxJS0VMWSghY29udGV4dCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpbXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVBdHRyaWJ1dGUoc3RhdGUsICpjb250ZXh0LCAqbmF0aXZlVmFsdWUpOwotICAgIHJl
dHVybiB0cnVlOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8U1ZHUG9p
bnQ+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwubXV0YWJsZVBvaW50
KCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXNGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7Ci0KLWJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iak11dGFibGVQb2ludChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9i
aj46OnNldDxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
TXV0YWJsZVBvaW50R2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm11dGFibGVQb2ludCIpOwog
fQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnRTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
IlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlcyIsICJUZXN0T2JqIik7IH0pOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETEludGVyZmFjZTxTVkdQb2ludD4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAibXV0YWJsZVBvaW50IiwgIlNWR1Bv
aW50Iik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwot
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKFVO
TElLRUxZKCFjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0V2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhzdGF0
ZSwgKmNvbnRleHQsICpuYXRpdmVWYWx1ZSk7CisgICAgaW1wbC5zZXRNdXRhYmxlUG9pbnQoKm5h
dGl2ZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhT
cGFjZXNBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29s
IHNldEpTVGVzdE9iak11dGFibGVQb2ludChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUZ1bmN0aW9uPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnRTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJtdXRhYmxlUG9pbnQiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnlHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFj
ZTxUZXN0T2JqPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
LCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
V2l0aFNwYWNlc0F0dHJpYnV0ZSIsICJUZXN0T2JqIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoc3RhdGUsICpjb250ZXh0LCAqbmF0aXZlVmFsdWUp
OwotICAgIHJldHVybiB0cnVlOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihp
bXBsLmJsdWViZXJyeSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmli
dXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OwotCi1ib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9i
aldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVGdW5jdGlvbj4oKnN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3Rh
Y2tBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxq
c1Rlc3RPYmpTdHJhd2JlcnJ5R2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmF3YmVycnki
KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVu
dHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeVNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oc3Rh
dGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVjdCIs
ICJ3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlIiwgIlRlc3RPYmoiKTsg
fSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBs
LnNldFdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoKm5hdGl2ZVZhbHVl
KTsKKyAgICBpbXBsLnNldEJsdWViZXJyeShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLQotI2lmIEVOQUJMRShDb25kaXRpb24xKQotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNl
dDxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHIxIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqU3RyYXdiZXJyeVNldHRlcj4oKnN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmF3YmVycnkiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFGdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb25H
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIxKFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURM
TG9uZz4oaW1wbC5kZXNjcmlwdGlvbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jZW5k
aWYKLQotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyRnVuY3Rpb24oRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpEZXNjcmlwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OnNldDxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHIyIik7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqRGVzY3JpcHRpb25HZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCAiZGVzY3JpcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSWRHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1w
bC5zZXRDb25kaXRpb25hbEF0dHIyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5pZCgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi0jZW5kaWYKLQotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIzRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJZChFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzRnVuY3Rp
b24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHIzIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqSWRHZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiaWQiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSWRTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwuc2V0Q29uZGl0
aW9uYWxBdHRyMyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgaW1wbC5zZXRJZChXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLSNlbmRpZgotCi0jaWYgRU5B
QkxFKENvbmRpdGlvbjEpCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyNENvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqSWQoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHI0Iik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqSWRTZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJpZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakhhc2hHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgImNvbmRpdGlvbmFsQXR0cjQiKSwgdmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmhhc2goKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYg
RU5BQkxFKENvbmRpdGlvbjIpCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyNUNvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2go
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHI1Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqSGFzaEdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
ICJoYXNoIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25h
bEF0dHI1Q29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgImNvbmRpdGlvbmFsQXR0cjUiKSwgdmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLnJlcGxhY2VhYmxlQXR0cmlidXRlKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYs
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI2Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpS
ZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9i
aj46OnNldDxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JGdW5jdGlvbj4o
KnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjYiKTsKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpSZXBsYWNlYWJs
ZUF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZXBsYWNlYWJsZUF0dHJpYnV0
ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
NkNvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4K
LSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJjb25kaXRpb25hbEF0dHI2IiksIHZhbHVlKTsKKyAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBwcm9wZXJ0eS4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXRE
aXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXBsYWNl
YWJsZUF0dHJpYnV0ZSIpLCB2YWx1ZSk7CiB9CiAKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9iakFueUF0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpz
ZXQ8c2V0SlNUZXN0T2JqQW55QXR0cmlidXRlRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJhbnlBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZVNldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlcGxhY2VhYmxlQXR0cmlidXRlIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGVGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEFueT4oc3RhdGUsIHZhbHVlKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldEFueUF0dHJpYnV0
ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETFVucmVzdHJpY3RlZERvdWJsZT4+KGltcGwubnVs
bGFibGVEb3VibGVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVz
dE9iak9iamVjdEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iak9iamVjdEF0dHJpYnV0ZUZ1bmN0aW9uPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAib2JqZWN0QXR0cmlidXRlIik7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVEb3VibGVB
dHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVEb3VibGVBdHRyaWJ1
dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9iamVjdEF0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE9iamVjdD4oc3RhdGUsIHZhbHVlKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNl
dE9iamVjdEF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETExvbmc+PihpbXBsLm51
bGxhYmxlTG9uZ0F0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0T2Jq
TXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2Jq
Pjo6c2V0PHNldEpTVGVzdE9iak11dGFibGVQb2ludEZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAibXV0YWJsZVBvaW50Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxlTG9uZ0F0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVh
bkF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFNWR1BvaW50Pj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1
dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJtdXRhYmxlUG9pbnQiLCAi
U1ZHUG9pbnQiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7Ci0gICAgaW1wbC5zZXRNdXRhYmxlUG9pbnQoKm5hdGl2ZVZhbHVlKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMQm9vbGVhbj4+
KGltcGwubnVsbGFibGVCb29sZWFuQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmF3YmVycnlGdW5jdGlvbihF
eGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0
SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5RnVuY3Rpb24+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJhd2JlcnJ5Iik7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRl
R2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSIpOwog
fQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeUZ1bmN0aW9uKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZVN0cmluZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldEJsdWViZXJyeShX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KHN0YXRlLCBpbXBsLm51bGxhYmxl
U3RyaW5nQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLQotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iaklkRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqSWRG
dW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImlkIik7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVTdHJpbmdB
dHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVTdHJpbmdBdHRyaWJ1
dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iaklkRnVuY3Rpb24oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxh
YmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwuc2V0SWQoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIHJldHVybiB0cnVlOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUzxJRExOdWxsYWJsZTxJRExMb25nPj4oaW1wbC5udWxsYWJsZUxvbmdTZXR0YWJsZUF0
dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpSZXBs
YWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
ak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlRnVuY3Rp
b24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZXBsYWNlYWJsZUF0dHJpYnV0
ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iak51
bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm51
bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJs
ZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gcHJvcGVydHkuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVwbGFjZWFibGVB
dHRyaWJ1dGUiKSwgdmFsdWUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExMb25nPj4o
c3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKKyAgICBpbXBsLnNldE51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KIGJvb2wgc2V0SlNUZXN0
T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqTnVsbGFibGVM
b25nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgIm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVB
dHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxsYWJs
ZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdT
ZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMTG9uZz4+KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRO
dWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETERP
TVN0cmluZz4+KHN0YXRlLCBpbXBsLm51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RPYmpOdWxs
YWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJudWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZVN0cmluZ1NldHRhYmxl
QXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJs
ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRy
aWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTA2NywxNSArNDUzNywy
NiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKK2Jvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9i
aj46OnNldDxzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlU2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVsbGFibGVTdHJpbmdTZXR0YWJs
ZUF0dHJpYnV0ZSIpOworfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFi
bGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETE51bGxhYmxlPElETFVTVlN0cmluZz4+KHN0YXRlLCBpbXBsLm51bGxhYmxlVVNW
U3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAotYm9v
bCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJs
ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxz
ZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxsYWJsZVVTVlN0cmluZ1NldHRhYmxl
QXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNU
ZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsICJudWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0
cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTA4NiwxNSArNDU2NywyNiBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jv
b2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRK
U1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlU2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZSIpOworfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCeXRl
U3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTnVsbGFibGU8SURMQnl0ZVN0cmluZz4+KHN0YXRlLCBpbXBsLm51bGxhYmxlQnl0ZVN0
cmluZ1NldHRhYmxlQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLWJvb2wg
c2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJs
ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxz
ZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPigq
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVsbGFibGVCeXRlU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxq
c1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcj4oKnN0YXRl
LCB0aGlzVmFsdWUsICJudWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTEwNSwxNSArNDU5NywyNiBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK2Jvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpz
ZXQ8c2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxsYWJsZUJ5dGVTdHJpbmdTZXR0
YWJsZUF0dHJpYnV0ZSIpOworfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVs
bGFibGVTdHJpbmdWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0
cmluZ1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETExvbmc+
PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5udWxsYWJsZVN0cmluZ1ZhbHVlKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CiAKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFs
dWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0
T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAibnVsbGFibGVTdHJpbmdWYWx1ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVHZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVTdHJpbmdWYWx1ZSIpOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1ZhbHVlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTUxMjQsMTUgKzQ2Mjcs
NDAgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlUwogICAgIHJldHVy
biB0cnVlOwogfQogCitib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0
SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgIm51bGxhYmxlU3RyaW5nVmFsdWUiKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExE
T01TdHJpbmc+KHN0YXRlLCBpbXBsLmF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQXR0cmlidXRlR2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgImF0dHJpYnV0ZSIpOworfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVGdW5jdGlvbihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
eworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlM8SURMRW51bWVyYXRpb248VGVzdE9iajo6T3B0aW9uYWw+PihzdGF0ZSwgaW1w
bC5hdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQogCi1ib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVk
RW51bVR5cGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0
SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVGdW5jdGlvbj4oKnN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQXR0cmli
dXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cmli
dXRlV2l0aFJlc2VydmVkRW51bVR5cGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhS
ZXNlcnZlZEVudW1UeXBlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTUxNDYs
MTUgKzQ2NzQsMjYgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZQog
ICAgIHJldHVybiB0cnVlOwogfQogCitib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNl
cnZlZEVudW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBl
U2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aFJl
c2VydmVkRW51bVR5cGUiKTsKK30KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialB1
dEZvcndhcmRzQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndh
cmRzQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0
Tm9kZT4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5wdXRGb3J3YXJk
c0F0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCi1ib29sIHNldEpTVGVzdE9i
alB1dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVGdW5jdGlvbj4o
KnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInB1dEZvcndhcmRzQXR0cmlidXRlIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUHV0Rm9y
d2FyZHNBdHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAicHV0Rm9yd2FyZHNBdHRy
aWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRz
QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKQEAgLTUxNjYsMTUgKzQ3MDUsMjYgQEAgc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialB1dEZvcndhcgogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIHNldEpTVGVz
dE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmli
dXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicHV0Rm9yd2FyZHNB
dHRyaWJ1dGUiKTsKK30KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialB1dEZvcndh
cmRzTnVsbGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1Zh
bHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9y
d2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExOdWxs
YWJsZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCBpbXBsLnB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KIAotYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNO
dWxsYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OnNldDxzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlRnVuY3Rpb24+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJwdXRGb3J3YXJkc051bGxhYmxlQXR0cmli
dXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
UHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJw
dXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRz
TnVsbGFibGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTE4
OCwxNSArNDczOCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2Fy
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxs
YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRl
U2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicHV0Rm9yd2FyZHNOdWxs
YWJsZUF0dHJpYnV0ZSIpOworfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3Ry
aW5naWZpZXJBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZp
ZXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVVNWU3RyaW5nPihzdGF0
ZSwgaW1wbC5zdHJpbmdpZmllckF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQog
Ci1ib29sIHNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqU3RyaW5naWZpZXJB
dHRyaWJ1dGVGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmlu
Z2lmaWVyQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpn
ZXQ8anNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCAic3RyaW5naWZpZXJBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlU2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTUyMDcsMTAgKzQ3NjgsOSBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5naWZpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLQotSlNWYWx1ZSBKU1Rlc3RPYmo6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5naWZpZXJB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9y
PEpTVGVzdE9iakNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVj
dCo+KGdsb2JhbE9iamVjdCkpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
c2V0PHNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5naWZpZXJBdHRyaWJ1dGUiKTsKIH0KIAogI2lmIEVO
QUJMRShURVNUX0ZFQVRVUkUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAyMTc0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxMSw2ICsyMTEsMTEgQEAgSlNPYmplY3QqIEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM6OgogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycz4odm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKK0pTVmFsdWUgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNv
bnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKIHZvaWQgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAg
ICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyo+KGNlbGwpOwpAQCAtMjIxLDI5ICsyMjYsMjMg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdAogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqIGRvbU9i
amVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90
b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VM
WSghZG9tT2JqZWN0KSkKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmdldENvbnN0cnVjdG9y
KHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpnZXRDb25zdHJ1Y3Rv
cihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCiBib29sIHNl
dEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlw
ZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYg
KFVOTElLRUxZKCFkb21PYmplY3QpKSB7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSo+KHZtLCBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7
CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yCi0gICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+
cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7Ci19Ci0KLUpTVmFsdWUgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNv
bnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CisgICAgcmV0dXJuIHByb3Rv
dHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0
cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIGJvb2wgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcAkocmV2aXNpb24gMjE3NDU2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNXaXRoU2VxdWVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNiArMTY4LDExIEBAIEpT
T2JqZWN0KiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2kKICAgICByZXR1cm4gZ2V0RE9N
UHJvdG90eXBlPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+KHZtLCBn
bG9iYWxPYmplY3QpOwogfQogCitKU1ZhbHVlIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNX
aXRoU2VxdWVuY2U6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxj
b25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCiB2b2lkIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmRlc3Ryb3koSlNDOjpKU0NlbGwq
IGNlbGwpCiB7CiAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2UqPihjZWxsKTsKQEAgLTE3OCwyOSArMTgzLDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3QKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJvdG90eXBlKiBkb21PYmplY3QgPSBq
c0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNl
UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5M
SUtFTFkoIWRvbU9iamVjdCkpCisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNh
c3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByb3RvdHlwZSo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5
cGUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHBy
b3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQ
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgeworICAgIGF1dG8qIHBy
b3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNX
aXRoU2VxdWVuY2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwor
ICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBkb21PYmplY3Qt
PnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rv
ciwgdmFsdWUpOwotfQotCi1KU1ZhbHVlIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2U6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25z
dCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworICAgIHJldHVybiBwcm90b3R5
cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCiBib29sIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAJ
KHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYg
KzEyNywxMSBAQCBKU09iamVjdCogSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6cHJvdG90CiAgICAg
cmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zPih2bSwgZ2xvYmFs
T2JqZWN0KTsKIH0KIAorSlNWYWx1ZSBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1
Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rv
cj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsK
K30KKwogdm9pZCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBj
ZWxsKQogewogICAgIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnMqIHRoaXNPYmplY3QgPSBzdGF0aWNf
Y2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zKj4oY2VsbCk7CkBAIC0xODIsMjkgKzE4NywyMyBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSogZG9tT2JqZWN0ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSo+KHZtLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3Qp
KQorICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE92ZXJyaWRl
QnVpbHRpbnNQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAg
IGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
T3ZlcnJpZGVCdWlsdGluczo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+
Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE92ZXJy
aWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2Jh
bE9iamVjdCgpKSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RPdmVycmlkZUJ1
aWx0aW5zUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RPdmVy
cmlkZUJ1aWx0aW5zUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
LSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBq
c0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKj4odm0sIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkp
IHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IKLSAgICByZXR1cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRl
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTsKLX0KLQotSlNWYWx1ZSBKU1Rl
c3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpT
VGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXRE
aXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVk
SXRlbUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3RPdmVycmlkZUJ1aWx0aW5zPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudC5jcHAJKHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NiwxMCArODYsMTAgQEAgdGVtcGxhdGU8PiBUZXN0UHJvbWlzZVJl
amVjdGlvbkV2ZW50OjpJbgogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50UHJvbWlzZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50UmVhc29uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0UHJv
bWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50UHJvbWlzZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50UmVhc29uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogCiBjbGFzcyBKU1Rlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnRQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1
YmxpYzoKQEAgLTE5MSwxNiArMTkxLDM3IEBAIEpTT2JqZWN0KiBKU1Rlc3RQcm9taXNlUmVqZWN0
aW9uRXZlbnQ6OnAKICAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudD4odm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKK0pTVmFsdWUgSlNUZXN0UHJvbWlz
ZVJlamVjdGlvbkV2ZW50OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVz
dFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RP
TUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCiB0ZW1wbGF0ZTw+IGlubGluZSBK
U1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQqIElETEF0dHJpYnV0ZTxKU1Rlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnQ+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSkKIHsKICAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0UHJvbWlzZVJlamVj
dGlvbkV2ZW50Kj4oc3RhdGUudm0oKSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50UHJvbWlz
ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQmLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFByb21pc2VSZWplY3Rpb25F
dmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFByb3RvdHlw
ZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFw
cm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RQcm9taXNlUmVqZWN0aW9u
RXZlbnQ6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVj
dCgpKSk7Cit9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFBy
b21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitib29sIHNldEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0UHJvbWlzZVJl
amVjdGlvbkV2ZW50Pjo6Z2V0PGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFByb21pc2VHZXR0
ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlPigqc3RhdGUsIHRoaXNW
YWx1ZSwgInByb21pc2UiKTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUg
PSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRQcm90b3R5cGUq
Pih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJv
dG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0o
KSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0UHJvbWlzZVJl
amVjdGlvbkV2ZW50UHJvbWlzZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0y
MTIsMTEgKzIzMyw5IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RQcm9taXNlUmVqZWMK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0UHJv
bWlzZVJlamVjdGlvbkV2ZW50UmVhc29uR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRSZWFzb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RQcm9taXNlUmVqZWN0aW9uRXZlbnRQcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Pjo6Z2V0PGpzVGVzdFByb21pc2VSZWplY3Rp
b25FdmVudFJlYXNvbkdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZWFzb24iKTsKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudD46OmdldDxqc1Rl
c3RQcm9taXNlUmVqZWN0aW9uRXZlbnRQcm9taXNlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6UmVqZWN0UHJvbWlzZT4oKnN0YXRlLCB0aGlzVmFsdWUsICJwcm9taXNlIik7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRSZWFzb25H
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50JiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMjI4LDMzICsyNDcsOSBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0UHJvbWlzZVJlamVjCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnRQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwot
ICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9t
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1ib29sIHNldEpTVGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAg
ICBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHlu
YW1pY0Rvd25jYXN0PEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFByb3RvdHlwZSo+KHZtLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3Qp
KSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yCi0gICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0
ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7Ci19Ci0KLUpTVmFsdWUgSlNU
ZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnRSZWFzb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpT
VGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Pjo6Z2V0PGpzVGVzdFByb21pc2VSZWplY3Rp
b25FdmVudFJlYXNvbkdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZWFzb24iKTsKIH0KIAog
I2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbi5jcHAJKHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNiArNDMsOCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiAK
IC8vIEF0dHJpYnV0ZXMKIAorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9u
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CiBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKQEAgLTU1LDggKzU3LDYgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uRgogYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CiBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0U2Vy
aWFsaXphdGlvblByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVi
bGljOgpAQCAtMTQ2LDYgKzE0NiwxMSBAQCBKU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbjo6
cHJvdG90eXBlCiAgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJpYWxpemF0aW9u
Pih2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAorSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uOjpn
ZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6YXRpb25Db25z
dHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmpl
Y3QpKTsKK30KKwogdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uOjpkZXN0cm95KEpTQzo6SlNDZWxs
KiBjZWxsKQogewogICAgIEpTVGVzdFNlcmlhbGl6YXRpb24qIHRoaXNPYmplY3QgPSBzdGF0aWNf
Y2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uKj4oY2VsbCk7CkBAIC0xNjIsMTEgKzE2NywyNyBAQCB0
ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemF0aW9uKiBJCiAgICAgcmV0dXJuIGpzRHlu
YW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb24qPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlz
VmFsdWUoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9u
Rmlyc3RTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlv
biYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3Rv
dHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUqPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90
eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbjo6Z2V0Q29u
c3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVz
dFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFs
dWUsICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpOworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8q
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5
cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSgh
cHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+
dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0x
NzgsMTk0ICsxOTksMTMyIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
U2VyaWFsaXphdGlvbiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlv
blNlY29uZExvbmdBdHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic2Vjb25kTG9u
Z0F0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlv
bj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVHZXR0ZXI+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNl
cmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLnNlY29uZExvbmdBdHRyaWJ1dGUoKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdFNlcmlhbGl6YXRpb24mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Ci17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpz
VGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgInRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUiKTsKLX0KLQotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxl
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCi17CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZh
Y2U8VGVzdEV4Y2VwdGlvbj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1w
bC50aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKCkpOwotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIGltcGwu
c2V0Rmlyc3RTdHJpbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RT
ZXJpYWxpemF0aW9uJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiti
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+Ojpn
ZXQ8anNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUdl
dHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1
dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8
c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlU2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0
ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXph
dGlvbiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPihpbXBsLmZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMTG9uZz4oaW1wbC5zZWNvbmRMb25nQXR0cmlidXRlKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlm
dGhMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25TZWNvbmRMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRl
R2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpOworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxp
emF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJzZWNv
bmRMb25nQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmZpZnRoTG9uZ0F0dHJpYnV0
ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRTZWNvbmRMb25nQXR0cmlidXRlKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0U2VyaWFsaXphdGlvbiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8
anNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29u
ZExvbmdBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJz
ZWNvbmRMb25nQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxp
emFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlv
biYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERv
dWJsZT4oaW1wbC5zaXh0aFR5cGVkZWZBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETEludGVyZmFjZTxUZXN0RXhjZXB0aW9uPj4oc3RhdGUsICp0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpLCBpbXBsLnRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Q
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6YXRp
b25Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChV
TkxJS0VMWSghZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFs
aXphdGlvbjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90
b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Q
cm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJ
S0VMWSghZG9tT2JqZWN0KSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChz
dGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOwot
fQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5n
QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbiYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJp
bmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZp
cnN0U3RyaW5nQXR0cmlidXRlRnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6
YWJsZUF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ0aGlyZFVuc2VyaWFsaXph
YmxlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGly
ZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNl
cmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdEV4Y2VwdGlvbj4+
KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RTZXJp
YWxpemF0aW9uIiwgInRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdEV4Y2VwdGlv
biIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAg
ICBpbXBsLnNldEZpcnN0U3RyaW5nQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAg
ICBpbXBsLnNldFRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoKm5hdGl2ZVZhbHVlKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJp
YWxpemF0aW9uJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwotCi1ib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8
c2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVGdW5jdGlvbj4oKnN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKTsKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2Vy
aWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0
dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJs
ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRTZWNvbmRMb25n
QXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPihpbXBsLmZvdXJ0aFVu
cmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6
YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJk
VW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldDxzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0
ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxq
c1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIp
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5z
ZXJpYWxpemFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJp
YWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2Vy
aWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RFeGNlcHRpb24+PihzdGF0
ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0U2VyaWFsaXph
dGlvbiIsICJ0aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlIiwgIlRlc3RFeGNlcHRpb24iKTsg
fSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRG91Ymxl
PihzdGF0ZSwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwotICAgIGltcGwuc2V0VGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgqbmF0aXZlVmFs
dWUpOworICAgIGltcGwuc2V0Rm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7Ci0KIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJp
Y3RlZERvdWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVz
dFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVTZXR0ZXI+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVB
dHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRp
b25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2Vy
aWFsaXphdGlvbiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWREb3VibGU+
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7Ci0gICAgaW1wbC5zZXRGb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwotICAgIHJldHVybiB0cnVlOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExMb25nPihpbXBsLmZpZnRoTG9uZ0F0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlm
dGhMb25nQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbiYs
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlm
dGhMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNUZXN0U2Vy
aWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9u
Z0F0dHJpYnV0ZUZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmlm
dGhMb25nQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxp
emF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVHZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiZmlmdGhMb25nQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC0zNzYsMTUgKzMzNSwyNiBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jv
b2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8
c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZVNldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpOworfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNpeHRo
VHlwZWRlZkF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0
aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURM
RG91YmxlPihpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhU
eXBlZGVmQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFs
aXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRl
RnVuY3Rpb24+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzaXh0aFR5cGVkZWZB
dHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+
OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZUdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVGdW5j
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTM5NSwxMCArMzY1LDkgQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpbwogICAgIHJldHVybiB0cnVlOwogfQog
Ci0KLUpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBj
b25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVy
biBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3I+KHZtLCAq
anNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlh
bGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKTsKIH0KIAogSlNDOjpKU09iamVj
dCogSlNUZXN0U2VyaWFsaXphdGlvbjo6c2VyaWFsaXplKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dFNlcmlhbGl6YXRpb24qIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAJKHJldmlzaW9uIDIx
NzQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSwxMCBA
QCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiAKIC8vIEF0dHJpYnV0
ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVy
aXRMb25nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVy
aXRMb25nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGlj
OgpAQCAtMTI4LDYgKzEyOCwxMSBAQCBKU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQ6OnByCiAgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdD4odm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKK0pTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwogdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXQqIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dD46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQogewog
ICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCo+
KHN0YXRlLnZtKCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKQEAgLTEzOCw1NCArMTQz
LDQ0IEBAIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb25JbmgKICAgICByZXR1
cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqPihzdGF0ZS52
bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdD46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmli
dXRlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImluaGVyaXRMb25nQXR0cmlidXRlIik7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVy
aXRMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQotewotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTG9uZz4oaW1wbC5pbmhlcml0TG9uZ0F0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQorICAgIGF1dG8qIHByb3RvdHlwZSA9IGpz
RHluYW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlKj4odm0s
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlw
ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Ojpn
ZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6Omdl
dENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9
CiAKIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQ
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZSo+KHZtLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUp
KSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yCi0gICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0
ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7CisgICAgcmV0dXJuIHByb3Rv
dHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0
cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRl
RnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGltcGwuaW5oZXJpdExvbmdBdHRyaWJ1dGUoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KIAotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEluaGVyaXRMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pjo6c2V0PHNldEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVGdW5jdGlvbj4oKnN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImluaGVyaXRMb25nQXR0cmlidXRlIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD46OmdldDxqc1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgImluaGVyaXRMb25nQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlRnVu
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0
ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTE5
NiwxMCArMTkxLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpbwog
ICAgIHJldHVybiB0cnVlOwogfQogCi0KLUpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQ6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNE
T01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIpOwogfQogCiBKU0M6OkpTT2JqZWN0KiBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c2VyaWFsaXplKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsLmNwcAkocmV2aXNpb24gMjE3NDU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MSwxMiArNDEsMTIgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdAogCiAvLyBBdHRyaWJ1dGVzCiAKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJv
b2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZv
byhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
RmluYWxMb25nQXR0cmlidXRlQmFyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IHsKIHB1YmxpYzoKQEAgLTEzMSw2ICsxMzEsMTEgQEAgSlNPYmplY3QqIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYQogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbD4odm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKK0pTVmFsdWUg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBj
b25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01D
b25zdHJ1Y3RvcjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3I+KHZt
LCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisK
IHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqIElETEF0
dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Y2FzdChFeGVjU3RhdGUm
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCiB7CiAgICAgcmV0dXJuIGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihzdGF0ZS52bSgpLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CkBAIC0xNDEsNzAgKzE0Niw0NCBAQCB0ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oCiAgICAgcmV0dXJuIGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihzdGF0ZS52bSgpLCBzdGF0
ZS50aGlzVmFsdWUoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFs
TG9uZ0F0dHJpYnV0ZUZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb0dldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJmaW5hbExv
bmdBdHRyaWJ1dGVGb28iKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29HZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKLXsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGltcGwuZmluYWxMb25n
QXR0cmlidXRlRm9vKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRl
QmFyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpnZXQ8anNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhckdldHRlcj4oKnN0YXRl
LCB0aGlzVmFsdWUsICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIiKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1
dGVCYXJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKLXsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElE
TExvbmc+KGltcGwuZmluYWxMb25nQXR0cmlidXRlQmFyKCkpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCisgICAgYXV0byogcHJv
dG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVO
TElLRUxZKCFwcm90b3R5cGUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3Rv
dHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwot
ICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUqIGRvbU9iamVjdCA9
IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5
cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSgh
ZG9tT2JqZWN0KSkgeworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewogICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAg
IHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5
TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOworICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERp
cmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb0Z1bmN0
aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb0dldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5maW5hbExvbmdBdHRyaWJ1
dGVGb28oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAotYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0
dHJpYnV0ZUZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWw+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZp
bmFsTG9uZ0F0dHJpYnV0ZUZvb0Z1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiZmluYWxMb25nQXR0cmlidXRlRm9vIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29HZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCAiZmluYWxMb25nQXR0cmlidXRlRm9vIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0
cmlidXRlRm9vU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CkBAIC0yMTUsMTUgKzE5NCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
U2VyaWFsaXphdGlvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWw+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJp
YnV0ZUZvb1NldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpbmFsTG9u
Z0F0dHJpYnV0ZUZvbyIpOworfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhckZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bEZpbmFsTG9uZ0F0dHJpYnV0ZUJhckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5maW5hbExvbmdBdHRyaWJ1dGVCYXIoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KIAotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWw+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJp
YnV0ZUJhckZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmluYWxM
b25nQXR0cmlidXRlQmFyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxG
aW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiZmluYWxMb25n
QXR0cmlidXRlQmFyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyRnVuY3Rpb24oRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyU2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC0y
MzQsMTAgKzIyNCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW8K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCi1KU1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWw6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFs
TG9uZ0F0dHJpYnV0ZUJhcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yPih2bSwg
KmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OnNldDxz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyU2V0
dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRl
QmFyIik7CiB9CiAKIEpTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWw6OnNlcmlhbGl6ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJ
KHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw2ICs0OSw4IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3QKIAogLy8gQXR0cmlidXRlcwogCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKQEAgLTU2LDggKzU4LDYgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVk
U2NyaQogYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRW
YWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQb3J0cyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNl
dEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNs
YXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTQ3LDYgKzE0NywxMSBAQCBK
U09iamVjdCogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50CiAgICAgcmV0dXJuIGdldERP
TVByb3RvdHlwZTxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+KHZtLCBnbG9i
YWxPYmplY3QpOwogfQogCitKU1ZhbHVlIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZTo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwogdm9pZCBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB0aGlzT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oY2VsbCk7CkBAIC0x
NjMsMTEgKzE2OCwyNyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
CiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSo+KHN0YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVl
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOworRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNl
dEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlPjo6Z2V0PGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZVZhbHVlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInZhbHVlIik7CisgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1
cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZh
bHVlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTE3OSwxMSAr
MjAwLDI1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2MKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZh
bHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlPjo6Z2V0PGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZh
bHVlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInZhbHVlIik7Cit9CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
VmFsdWVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlPjo6Z2V0PGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJl
YWRvbmx5VmFsdWVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAicmVhZG9ubHlWYWx1ZSIpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPj4oc3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKKyAgICBpbXBsLnNldFZhbHVlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OnNldDxzZXRKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgInZhbHVlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTE5NSwxMSArMjMwLDkgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTYwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDYWNoZWRWYWx1ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlPjo6Z2V0PGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hl
ZFZhbHVlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImNhY2hlZFZhbHVlIik7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+Ojpn
ZXQ8anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZUdldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZWFkb25seVZhbHVlIik7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1
ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0yMTQsMTEgKzI0
NywyNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworRW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U+OjpnZXQ8anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVk
VmFsdWVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiY2FjaGVkVmFsdWUiKTsKK30KIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHMoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q2FjaGVkVmFsdWVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlPjo6Z2V0PGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVBvcnRzR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInBvcnRzIik7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PihzdGF0
ZSwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwor
ICAgIGltcGwuc2V0Q2FjaGVkVmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNhY2hlZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6c2V0PHNldEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlU2V0dGVyPigqc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAiY2FjaGVkVmFsdWUiKTsKIH0KIAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTIzMCwxMSArMjc3LDkgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTYwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRS
ZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUG9ydHMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpnZXQ8anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJj
YWNoZWRSZWFkb25seVZhbHVlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpnZXQ8anNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUG9ydHNHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAicG9ydHMiKTsKIH0K
IAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQpAQCAtMjQ5LDcxICsyOTQsOSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
U2VyaWFsaXplZFNjCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90
eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwotICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1ib29sIHNldEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQotewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7Ci0gICAgICAgIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJu
IGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygp
LmNvbnN0cnVjdG9yLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYsIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VWYWx1ZUZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAidmFsdWUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQotewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTZXJpYWxpemVk
U2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4oc3RhdGUsIHZhbHVlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldFZhbHVl
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVk
VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+
OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVG
dW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNhY2hlZFZhbHVlIik7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDYWNoZWRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRDYWNoZWRWYWx1
ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotSlNWYWx1
ZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmdldENvbnN0cnVjdG9yKFZN
JiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCkpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6Z2V0PGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCAiY2FjaGVkUmVhZG9ubHlWYWx1ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVu
Y3Rpb25GdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpDbGFzc1BhcmFt
ZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RUeXBlZGVmcy5jcHAJKHJldmlzaW9uIDIxNzQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDYgKzY0LDggQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdAog
CiAvLyBBdHRyaWJ1dGVzCiAKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRK
U1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzU2VyaWFsaXplZFNjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAtODEsOCArODMsNiBAQCBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nCiBib29sIHNldEpTVGVzdFR5
cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0
SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RUeXBl
ZGVmc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlIDogcHVi
bGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0yMjksNiArMjI5LDExIEBA
IEpTT2JqZWN0KiBKU1Rlc3RUeXBlZGVmczo6cHJvdG90eXBlKFZNJiAKICAgICByZXR1cm4gZ2V0
RE9NUHJvdG90eXBlPEpTVGVzdFR5cGVkZWZzPih2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAorSlNW
YWx1ZSBKU1Rlc3RUeXBlZGVmczo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxK
U1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCiB2b2lkIEpTVGVzdFR5cGVkZWZzOjpkZXN0cm95
KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihjZWxsKTsKQEAgLTI0NSwxMSArMjUwLDI3IEBA
IHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFR5cGVkZWZzKiBJRExPcGUKICAgICByZXR1cm4ganNE
eW5hbWljRG93bmNhc3Q8SlNUZXN0VHlwZWRlZnMqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFs
dWUoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVk
TG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVGVzdFR5cGVkZWZzOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90
eXBlLT5nbG9iYWxPYmplY3QoKSkpOworfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRl
ZnM+OjpnZXQ8anNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcj4oKnN0YXRl
LCB0aGlzVmFsdWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOworICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFR5cGVkZWZzUHJv
dG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtF
TFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3Rh
dGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
VHlwZWRlZnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0yNjEsMjc4
ICsyODIsMjA0IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2kKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRl
ZnNTZXJpYWxpemVkU2NyaXB0VmFsdWVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMm
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKLQotRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRl
ZnNTZXJpYWxpemVkU2NyaXB0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vu
c2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlw
ZWRlZnM+OjpnZXQ8anNUZXN0VHlwZWRlZnNTZXJpYWxpemVkU2NyaXB0VmFsdWVHZXR0ZXI+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCAic2VyaWFsaXplZFNjcmlwdFZhbHVlIik7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46OmdldDxqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9u
Z0xvbmdBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ0xvbmdBdHRy
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC5zZXJp
YWxpemVkU2NyaXB0VmFsdWUoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpnZXQ8anNUZXN0VHlwZWRlZnND
b25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFN1Yk9i
aiIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rv
clRlc3RTdWJPYmpHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCi17CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdFN1Yk9i
ajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgaW1wbC5zZXRVbnNp
Z25lZExvbmdMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhD
bGFtcEdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFt
cChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK2Jvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFR5cGVkZWZzPjo6Z2V0PGpz
VGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
ImF0dHJpYnV0ZVdpdGhDbGFtcCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlw
ZWRlZnM+OjpzZXQ8c2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0clNldHRlcj4o
KnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhD
bGFtcEdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RU
eXBlZGVmcyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZExvbmdMb25nPj4oaW1wbC5hdHRyaWJ1dGVXaXRo
Q2xhbXAoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCksIGltcGwuc2VyaWFsaXplZFNjcmlwdFZhbHVlKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhD
bGFtcEluVHlwZWRlZkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJpYnV0
ZVdpdGhDbGFtcEluVHlwZWRlZihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU2VyaWFs
aXplZFNjcmlwdFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRl
ZnM+OjpnZXQ8anNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWZHZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46OmdldDxqc1Rlc3RUeXBlZGVmc1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJzZXJpYWxpemVk
U2NyaXB0VmFsdWUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZz
QXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzU2VyaWFsaXplZFNjcmlwdFZhbHVlU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETENsYW1wQWRhcHRvcjxJRExMb25nPj4oaW1wbC5hdHRyaWJ1dGVXaXRo
Q2xhbXBJblR5cGVkZWYoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPj4oc3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKKyAgICBpbXBsLnNldFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdFR5cGVkZWZzJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitib29sIHNldEpTVGVzdFR5
cGVkZWZzU2VyaWFsaXplZFNjcmlwdFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpnZXQ8anNUZXN0VHlwZWRlZnNBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbkdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJhdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbiIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+Ojpz
ZXQ8c2V0SlNUZXN0VHlwZWRlZnNTZXJpYWxpemVkU2NyaXB0VmFsdWVTZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRl
ZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlw
ZWRlZnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExMb25nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbigp
KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0
cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46OmdldDxqc1Rlc3RUeXBl
ZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImF0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RU
eXBlZGVmcz46OmdldDxqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcj4o
KnN0YXRlLCB0aGlzVmFsdWUsICJUZXN0U3ViT2JqIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENs
YW1wR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5hdHRyV2l0
aFNldHRlckV4Y2VwdGlvbigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQ2xhbXBB
ZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+PihpbXBsLmF0dHJpYnV0ZVdpdGhDbGFtcCgpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlw
ZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwotCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXAoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46OmdldDxqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVm
cz46OmdldDxqc1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcEdldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsICJhdHRyaWJ1dGVXaXRoQ2xhbXAiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVX
aXRoQ2xhbXBTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgdGhyb3dT
Y29wZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbigpKTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJ
RExVbnNpZ25lZExvbmdMb25nPj4oc3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhDbGFtcChX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpnZXQ8
anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcj4oKnN0YXRl
LCB0aGlzVmFsdWUsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOworICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpzZXQ8c2V0SlNUZXN0VHlwZWRlZnNBdHRy
aWJ1dGVXaXRoQ2xhbXBTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJh
dHRyaWJ1dGVXaXRoQ2xhbXAiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5
cGVkZWZHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRl
LCBpbXBsLnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+KGltcGwuYXR0cmlidXRlV2l0aENs
YW1wSW5UeXBlZGVmKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNU
ZXN0VHlwZWRlZnNQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dFR5cGVkZWZzUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVz
dFR5cGVkZWZzOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSkpOwotfQotCi1ib29sIHNldEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKiBk
b21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFkb21PYmpl
Y3QpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yCi0gICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBz
dGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJv
b2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVm
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpzZXQ8c2V0SlNU
ZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9uPigqc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdFR5cGVkZWZzPjo6Z2V0PGpzVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0
aENsYW1wSW5UeXBlZGVmR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHJpYnV0ZVdpdGhD
bGFtcEluVHlwZWRlZiIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5
cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1w
SW5UeXBlZGVmU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExVbnNpZ25lZExvbmdMb25nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExMb25nPj4oc3RhdGUsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNl
dFVuc2lnbmVkTG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICBpbXBsLnNl
dEF0dHJpYnV0ZVdpdGhDbGFtcEluVHlwZWRlZihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZz
U2VyaWFsaXplZFNjcmlwdFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMm
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTZXJpYWxp
emVkU2NyaXB0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0
cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpzZXQ8c2V0SlNUZXN0VHlwZWRlZnNTZXJpYWxp
emVkU2NyaXB0VmFsdWVGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
InNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
VHlwZWRlZnM+OjpzZXQ8c2V0SlNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVk
ZWZTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyaWJ1dGVXaXRo
Q2xhbXBJblR5cGVkZWYiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVk
ZWZzU2VyaWFsaXplZFNjcmlwdFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPj4oc3RhdGUsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKLSAgICBpbXBsLnNldFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElE
TExvbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKCkp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0VHlw
ZWRlZnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNB
dHRyaWJ1dGVXaXRoQ2xhbXAoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RU
eXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0VHlwZWRlZnM+OjpzZXQ8c2V0SlNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xh
bXBGdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJpYnV0ZVdp
dGhDbGFtcCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpnZXQ8
anNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcj4oKnN0YXRlLCB0aGlz
VmFsdWUsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBGdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVk
ZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExDbGFtcEFkYXB0b3I8SURMVW5zaWduZWRMb25nTG9uZz4+KHN0
YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3Rh
dGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
LSAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhDbGFtcChXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Cisg
ICAgaW1wbC5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5
cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNU
ZXN0VHlwZWRlZnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Ci0KLWJvb2wgc2V0SlNUZXN0VHlw
ZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWYoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNl
dEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46OnNldDxzZXRKU1Rlc3RU
eXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcEluVHlwZWRlZkZ1bmN0aW9uPigqc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46OnNldDxzZXRKU1Rlc3RUeXBlZGVm
c0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmRnVuY3Rpb24o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExDbGFtcEFkYXB0b3I8SURM
TG9uZz4+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWYoV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwotICAgIHJldHVybiB0cnVlOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExMb25nPihpbXBsLmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0
cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYs
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNUZXN0VHlw
ZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdFR5cGVkZWZzPjo6c2V0PHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNl
cHRpb25GdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVm
cz46OmdldDxqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvblNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldEF0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICBwcm9wYWdh
dGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuc2V0QXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOwotCiBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46
OnNldDxzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIp
OworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpzZXQ8c2V0SlNUZXN0
VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvblNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihz
dGF0ZSwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwotICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5zZXRBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOwotICAgIHJldHVybiB0
cnVlOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCB0aHJv
d1Njb3BlLCBpbXBsLnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKCkpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzU3Ry
aW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBl
ZGVmcyYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKLQotYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0
cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFR5cGVkZWZzPjo6c2V0PHNldEpTVGVzdFR5cGVkZWZz
U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46OmdldDxqc1Rlc3RUeXBlZGVmc1N0cmlu
Z0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmlu
Z0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvblNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKQEAgLTU0MywxNSArNDkwLDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RUeXBlZGVmc1N0cmkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpzZXQ8c2V0SlNUZXN0VHlw
ZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvblNldHRlcj4oKnN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7Cit9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBl
ZGVmcyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElE
TERPTVN0cmluZz4oc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAotYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdFR5cGVkZWZzPjo6c2V0PHNldEpTVGVzdFR5cGVkZWZzU3RyaW5n
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46OmdldDxqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvblNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RU
eXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKQEAgLTU2MiwxMCArNTIwLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5
cGVkZWZzU3RyaQogICAgIHJldHVybiB0cnVlOwogfQogCi0KLUpTVmFsdWUgSlNUZXN0VHlwZWRl
ZnM6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKK2Jvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QpKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFR5cGVkZWZz
Pjo6c2V0PHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25TZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbiIpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0VHlwZWRlZnM+OjpDbGFzc1BhcmFtZXRl
ciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>