<?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>79121</bug_id>
          
          <creation_ts>2012-02-21 09:18:25 -0800</creation_ts>
          <short_desc>Move PropertySetCSSStyleDeclaration to a file of its own</short_desc>
          <delta_ts>2012-02-21 10:39:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>560945</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-21 09:18:25 -0800</bug_when>
    <thetext>From StylePropertySet.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560949</commentid>
    <comment_count>1</comment_count>
      <attachid>127984</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-21 09:22:01 -0800</bug_when>
    <thetext>Created attachment 127984
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560950</commentid>
    <comment_count>2</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-21 09:23:02 -0800</bug_when>
    <thetext>&quot;StylePropertySetCSSStyleDeclaration&quot; would be more consistent but repeating &quot;Style&quot; looks bit silly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560951</commentid>
    <comment_count>3</comment_count>
      <attachid>127984</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-21 09:28:17 -0800</bug_when>
    <thetext>Comment on attachment 127984
patch

Attachment 127984 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11559159</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560952</commentid>
    <comment_count>4</comment_count>
      <attachid>127984</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-21 09:29:28 -0800</bug_when>
    <thetext>Comment on attachment 127984
patch

Attachment 127984 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11520167</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560954</commentid>
    <comment_count>5</comment_count>
      <attachid>127984</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-02-21 09:30:59 -0800</bug_when>
    <thetext>Comment on attachment 127984
patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560955</commentid>
    <comment_count>6</comment_count>
      <attachid>127986</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-21 09:32:21 -0800</bug_when>
    <thetext>Created attachment 127986
now with header included</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560962</commentid>
    <comment_count>7</comment_count>
      <attachid>127986</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-21 09:36:49 -0800</bug_when>
    <thetext>Comment on attachment 127986
now with header included

Attachment 127986 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11562149</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560965</commentid>
    <comment_count>8</comment_count>
      <attachid>127988</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-21 09:39:51 -0800</bug_when>
    <thetext>Created attachment 127988
with gtk build file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560999</commentid>
    <comment_count>9</comment_count>
      <attachid>127988</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-21 10:26:59 -0800</bug_when>
    <thetext>Comment on attachment 127988
with gtk build file

Attachment 127988 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11557154</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561009</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-21 10:38:54 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/108370

(with Chromium build file fix)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127984</attachid>
            <date>2012-02-21 09:22:01 -0800</date>
            <delta_ts>2012-02-21 09:32:21 -0800</delta_ts>
            <desc>patch</desc>
            <filename>propertyset-cssom-file.patch</filename>
            <type>text/plain</type>
            <size>111632</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODM2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAyLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbiB0byBhIGZpbGUgb2YgaXRzIG93bgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzkxMjEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1ha2VzIFN0eWxlUHJvcGVydHlTZXQu
Y3BwIG1vcmUgcmVhZGFibGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNw
cC4KKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6cmVm
KToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGVy
ZWYpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydHlTZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMDItMjAgIERhdmlkIEh5YXR0ICA8aHlh
dHRAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03OTA0NgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEwODM2MykK
KysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00OTAs
NiArNDkwLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9NZWRpYVF1ZXJ5TGlzdC5j
cHAKICAgICBjc3MvTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKICAgICBjc3MvTWVkaWFRdWVy
eU1hdGNoZXIuY3BwCisgICAgY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAK
ICAgICBjc3MvUkdCQ29sb3IuY3BwCiAgICAgY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKICAgICBj
c3MvU2hhZG93VmFsdWUuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEwODM2MykKKysr
IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTQ1Miw2ICs0NTIs
NyBAQCBTT1VSQ0VTICs9IFwKICAgICBjc3MvTWVkaWFRdWVyeUxpc3QuY3BwIFwKICAgICBjc3Mv
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgXAogICAgIGNzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5j
cHAgXAorICAgIGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwIFwKICAgICBj
c3MvUkdCQ29sb3IuY3BwIFwKICAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBcCiAgICAgY3Nz
L1NoYWRvd1ZhbHVlLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMDgzNjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTIwODEs
NiArMjA4MSw4IEBACiAgICAgICAgICAgICAnY3NzL01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCcs
CiAgICAgICAgICAgICAnY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcCcsCiAgICAgICAgICAgICAn
Y3NzL01lZGlhUXVlcnlNYXRjaGVyLmgnLAorICAgICAgICAgICAgJ2Nzcy9Qcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb24uY3BwJworICAgICAgICAgICAgJ2Nzcy9Qcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uaCcKICAgICAgICAgICAgICdjc3MvUkdCQ29sb3IuY3BwJywKICAgICAg
ICAgICAgICdjc3MvUkdCQ29sb3IuaCcsCiAgICAgICAgICAgICAnY3NzL1JlY3QuaCcsCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNp
b24gMTA4MzYzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTM1NDU4LDYgKzM1NDU4LDE0IEBACiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxjc3NcUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xxdWlya3Mu
Y3NzIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwODM2MykKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNTg3NCw2ICs1ODc0LDggQEAKIAkJRTRBRkQwMEUwREFGMzM1NTAwRjVGNTVDIC8qIFNN
SUxUaW1lQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNEFGRDAwODBEQUYzMzU0MDBGNUY1NUMgLyogU01JTFRpbWVDb250YWluZXIuaCAq
LzsgfTsKIAkJRTRBRkQwMEYwREFGMzM1NTAwRjVGNTVDIC8qIFNWR1NNSUxFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUZEMDA5MERB
RjMzNTQwMEY1RjU1QyAvKiBTVkdTTUlMRWxlbWVudC5jcHAgKi87IH07CiAJCUU0QUZEMDEwMERB
RjMzNTUwMEY1RjU1QyAvKiBTVkdTTUlMRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRkQwMEEwREFGMzM1NDAwRjVGNTVDIC8qIFNWR1NN
SUxFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJRTRCQkVEMEUxNEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEJCRUQwQzE0RjQwMjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uLmNwcCAqLzsgfTsKKwkJRTRCQkVEMEYxNEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTRCQkVEMEQxNEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbi5oICovOyB9OwogCQlFNEMxNzg5QTBFRTY5MDM4MDA4MjRENjkgLyogQ1NT
U2VsZWN0b3JMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QzE3ODk1MEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3QuY3BwICov
OyB9OwogCQlFNEMxNzg5QjBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMxNzg5NjBFRTY5
MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggKi87IH07CiAJCUU0QzI3OTU4MENGOTc0
MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMyNzk1NjBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVk
aWEuY3BwICovOyB9OwpAQCAtMTI5MDIsNiArMTI5MDQsOCBAQAogCQlFNEI0MjM4MDBDQkZCNzND
MDBBRjJFQ0UgLyogSlNIVE1MTWVkaWFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTSFRNTE1lZGlhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEI0MjM4NTBDQkZCNzNDMDBBRjJFQ0UgLyogSlNQcm9ncmVzc0V2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJvZ3Jlc3NFdmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QjQyMzg2MENCRkI3M0MwMEFGMkVDRSAvKiBK
U1Byb2dyZXNzRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9n
cmVzc0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QkJFRDBDMTRGNDAy
NUQwMDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRCQkVEMEQxNEY0MDI1RDAw
M0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMTc4OTUwRUU2OTAzODAwODI0RDY5IC8qIENT
U1NlbGVjdG9yTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
U1NTZWxlY3Rvckxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEMxNzg5
NjBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU1NlbGVjdG9yTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNEMyNzk1NjBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWVkaWEuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAyMzcsNiArMjAyNDEsOCBAQAogCQkJCUQzQUExMEYx
MTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hlci5jcHAgKi8sCiAJCQkJRDNBQTEw
RjIxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmggKi8sCiAJCQkJQTgwRTZD
RDEwQTE5ODlDQTAwN0ZCOEM1IC8qIFBhaXIuaCAqLywKKwkJCQlFNEJCRUQwQzE0RjQwMjVEMDAz
RjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCAqLywKKwkJCQlFNEJC
RUQwRDE0RjQwMjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmgg
Ki8sCiAJCQkJOTNDQTRDOUYwOURGOTNGQTAwREY4Njc3IC8qIHF1aXJrcy5jc3MgKi8sCiAJCQkJ
QkM0MzY4RTcwQzIyNkUzMjAwNUVGQjVGIC8qIFJlY3QuaCAqLywKIAkJCQlBODBFNzk5NjBBMTlC
RDIxMDA3RkI4QzUgLyogUmVjdC5pZGwgKi8sCkBAIC0yNDI4OSw2ICsyNDI5NSw3IEBACiAJCQkJ
RTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZENTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRTRCQkVEMEYxNEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNzIzNiw2ICsyNzI0Myw3IEBA
CiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5NzdFMkUwRTEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1Bv
bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTRCQkVEMEUxNEY0MDI1RDAwM0YwQjk4IC8qIFBy
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24uY3BwCShyZXZpc2lvbiAxMDgzNDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVBy
b3BlcnR5U2V0LmNwcDoxMDgzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyODEgQEAK
Ky8qCisgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorCisjaW5jbHVkZSAiQ1NT
SW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TG9uZ2hhbmQuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAi
Q1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJDU1NWYWx1
ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisjaW5jbHVkZSAiQ1NTVmFs
dWVQb29sLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmgiCisjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuaCIKKyNp
bmNsdWRlICJNdXRhdGlvblJlY29yZC5oIgorI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBu
YW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgSGFzaE1hcDxj
b25zdCBTdHlsZVByb3BlcnR5U2V0KiwgT3duUHRyPFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbj4gPiBQcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcDsKK3N0YXRpYyBQcm9wZXJ0eVNldENT
U09NV3JhcHBlck1hcCYgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAsIHByb3BlcnR5U2V0Q1NT
T01XcmFwcGVyTWFwSW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gcHJvcGVydHlTZXRDU1NPTVdy
YXBwZXJNYXBJbnN0YW5jZTsKK30KKworY2xhc3MgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uIDogcHVibGljIENTU1N0eWxlRGVjbGFyYXRpb24geworcHVibGljOgorICAgIFByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0eVNldCkgOiBt
X3Byb3BlcnR5U2V0KHByb3BlcnR5U2V0KSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIFN0eWxlZEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2
b2lkIGNsZWFyUGFyZW50UnVsZSgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJQYXJlbnRFbGVtZW50KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQor
ICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBjb25zdCB7IHJl
dHVybiAwOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHJlZigpIE9WRVJSSURFIHsg
bV9wcm9wZXJ0eVNldC0+cmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoKSBPVkVSUklE
RSB7IG1fcHJvcGVydHlTZXQtPmRlcmVmKCk7IH0KKworICAgIHZpcnR1YWwgQ1NTUnVsZSogcGFy
ZW50UnVsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH07CisgICAgdmlydHVhbCB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5
UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVy
dHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0
IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0
aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmLCBFeGNl
cHRpb25Db2RlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5
SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJikg
T1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0Y2hlcyhjb25z
dCBDU1NQcm9wZXJ0eSopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVl
dCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1ha2VNdXRhYmxlKCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoKSB7IH0gICAgCisKK3Byb3RlY3Rl
ZDoKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBtX3Byb3BlcnR5U2V0OworfTsKKworY2xhc3MgUnVs
ZUNTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uCit7CitwdWJsaWM6CisgICAgUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0
eVNldCogcHJvcGVydHlTZXQsIENTU1J1bGUqIHBhcmVudFJ1bGUpCisgICAgICAgIDogUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKHByb3BlcnR5U2V0KQorICAgICAgICAsIG1fcGFyZW50
UnVsZShwYXJlbnRSdWxlKSAKKyAgICB7CisgICAgfQorCitwcml2YXRlOiAgICAKKyAgICB2aXJ0
dWFsIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFJ1bGU7IH07
CisgICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50UnVsZSgpIHsgbV9wYXJlbnRSdWxlID0gMDsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgdmlydHVhbCBD
U1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCgpIGNvbnN0OworICAgIAorICAgIENTU1J1
bGUqIG1fcGFyZW50UnVsZTsKK307CisKK2NsYXNzIElubGluZUNTU1N0eWxlRGVjbGFyYXRpb24g
OiBwdWJsaWMgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uCit7CitwdWJsaWM6CisgICAg
SW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0eVNldCwg
U3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCkKKyAgICAgICAgOiBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24ocHJvcGVydHlTZXQpCisgICAgICAgICwgbV9wYXJlbnRFbGVtZW50KHBh
cmVudEVsZW1lbnQpIAorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBTdHls
ZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRFbGVtZW50
OyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50RWxlbWVudCgpIHsgbV9wYXJlbnRFbGVt
ZW50ID0gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAg
dmlydHVhbCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCgpIGNvbnN0OworCisgICAg
U3R5bGVkRWxlbWVudCogbV9wYXJlbnRFbGVtZW50OworfTsKKworbmFtZXNwYWNlIHsKKworY2xh
c3MgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUpOworcHVibGljOgorICAgIFN0eWxlQXR0cmli
dXRlTXV0YXRpb25TY29wZShQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIGRlY2wpCisg
ICAgeworICAgICAgICArK3Nfc2NvcGVDb3VudDsKKworICAgICAgICBpZiAoc19zY29wZUNvdW50
ICE9IDEpIHsKKyAgICAgICAgICAgIEFTU0VSVChzX2N1cnJlbnREZWNsID09IGRlY2wpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKCFzX2N1cnJlbnRE
ZWNsKTsKKyAgICAgICAgc19jdXJyZW50RGVjbCA9IGRlY2w7CisKKyNpZiBFTkFCTEUoTVVUQVRJ
T05fT0JTRVJWRVJTKQorICAgICAgICBpZiAoIXNfY3VycmVudERlY2wtPnBhcmVudEVsZW1lbnQo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9tdXRhdGlvblJlY2lwaWVudHMgPSBN
dXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6Y3JlYXRlRm9yQXR0cmlidXRlc011dGF0aW9u
KHNfY3VycmVudERlY2wtPnBhcmVudEVsZW1lbnQoKSwgSFRNTE5hbWVzOjpzdHlsZUF0dHIpOwor
ICAgICAgICBpZiAoIW1fbXV0YXRpb25SZWNpcGllbnRzKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIEF0b21pY1N0cmluZyBvbGRWYWx1ZSA9IG1fbXV0YXRpb25SZWNpcGllbnRzLT5p
c09sZFZhbHVlUmVxdWVzdGVkKCkgPyBzX2N1cnJlbnREZWNsLT5wYXJlbnRFbGVtZW50KCktPmdl
dEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0cikgOiBudWxsQXRvbTsKKyAgICAgICAgbV9t
dXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKHNfY3VycmVudERlY2wt
PnBhcmVudEVsZW1lbnQoKSwgSFRNTE5hbWVzOjpzdHlsZUF0dHIsIG9sZFZhbHVlKTsKKyNlbmRp
ZgorICAgIH0KKworICAgIH5TdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUoKQorICAgIHsKKyAg
ICAgICAgLS1zX3Njb3BlQ291bnQ7CisgICAgICAgIGlmIChzX3Njb3BlQ291bnQpCisgICAgICAg
ICAgICByZXR1cm47CisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgICAgICBp
ZiAobV9tdXRhdGlvbiAmJiBzX3Nob3VsZERlbGl2ZXIpCisgICAgICAgICAgICBtX211dGF0aW9u
UmVjaXBpZW50cy0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKG1fbXV0YXRpb24pOworICAgICAgICBz
X3Nob3VsZERlbGl2ZXIgPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICBpZiAoIXNfc2hvdWxkTm90
aWZ5SW5zcGVjdG9yKSB7CisgICAgICAgICAgICBzX2N1cnJlbnREZWNsID0gMDsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBoYXZlIHRvIGNsZWFyIGludGVy
bmFsIHN0YXRlIGJlZm9yZSBjYWxsaW5nIEluc3BlY3RvcidzIGNvZGUuCisgICAgICAgIFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogbG9jYWxDb3B5U3R5bGVEZWNsID0gc19jdXJyZW50
RGVjbDsKKyAgICAgICAgc19jdXJyZW50RGVjbCA9IDA7CisgICAgICAgIHNfc2hvdWxkTm90aWZ5
SW5zcGVjdG9yID0gZmFsc2U7CisgICAgICAgIGlmIChsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVu
dEVsZW1lbnQoKSAmJiBsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVudEVsZW1lbnQoKS0+ZG9jdW1l
bnQoKSkKKyAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52YWxpZGF0
ZVN0eWxlQXR0cihsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVudEVsZW1lbnQoKS0+ZG9jdW1lbnQo
KSwgbG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCkpOworICAgIH0KKworI2lmIEVO
QUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgdm9pZCBlbnF1ZXVlTXV0YXRpb25SZWNvcmQo
KQorICAgIHsKKyAgICAgICAgc19zaG91bGREZWxpdmVyID0gdHJ1ZTsKKyAgICB9CisjZW5kaWYK
KworICAgIHZvaWQgZGlkSW52YWxpZGF0ZVN0eWxlQXR0cigpCisgICAgeworICAgICAgICBzX3No
b3VsZE5vdGlmeUluc3BlY3RvciA9IHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRp
YyB1bnNpZ25lZCBzX3Njb3BlQ291bnQ7CisgICAgc3RhdGljIFByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbiogc19jdXJyZW50RGVjbDsKKyAgICBzdGF0aWMgYm9vbCBzX3Nob3VsZE5vdGlm
eUluc3BlY3RvcjsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIHN0YXRpYyBi
b29sIHNfc2hvdWxkRGVsaXZlcjsKKworICAgIE93blB0cjxNdXRhdGlvbk9ic2VydmVySW50ZXJl
c3RHcm91cD4gbV9tdXRhdGlvblJlY2lwaWVudHM7CisgICAgUmVmUHRyPE11dGF0aW9uUmVjb3Jk
PiBtX211dGF0aW9uOworI2VuZGlmCit9OworCit1bnNpZ25lZCBTdHlsZUF0dHJpYnV0ZU11dGF0
aW9uU2NvcGU6OnNfc2NvcGVDb3VudCA9IDA7CitQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24qIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19jdXJyZW50RGVjbCA9IDA7Citib29s
IFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19zaG91bGROb3RpZnlJbnNwZWN0b3IgPSBm
YWxzZTsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorYm9vbCBTdHlsZUF0dHJpYnV0
ZU11dGF0aW9uU2NvcGU6OnNfc2hvdWxkRGVsaXZlciA9IGZhbHNlOworI2VuZGlmCisKK30gLy8g
bmFtZXNwYWNlCisKK1N0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoKQorICAgIDog
bV9zdHJpY3RQYXJzaW5nKGZhbHNlKQorICAgICwgbV9oYXNDU1NPTVdyYXBwZXIoZmFsc2UpCit7
Cit9CisKK1N0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoY29uc3QgVmVjdG9yPENT
U1Byb3BlcnR5PiYgcHJvcGVydGllcykKKyAgICA6IG1fcHJvcGVydGllcyhwcm9wZXJ0aWVzKQor
ICAgICwgbV9zdHJpY3RQYXJzaW5nKHRydWUpCisgICAgLCBtX2hhc0NTU09NV3JhcHBlcihmYWxz
ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMuc2hyaW5rVG9GaXQoKTsKK30KKworU3R5bGVQcm9wZXJ0
eVNldDo6U3R5bGVQcm9wZXJ0eVNldChjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QgKiBwcm9wZXJ0
aWVzLCBpbnQgbnVtUHJvcGVydGllcywgYm9vbCB1c2VTdHJpY3RQYXJzaW5nKQorICAgIDogbV9z
dHJpY3RQYXJzaW5nKHVzZVN0cmljdFBhcnNpbmcpCisgICAgLCBtX2hhc0NTU09NV3JhcHBlcihm
YWxzZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1Qcm9w
ZXJ0aWVzKTsKKyAgICBIYXNoTWFwPGludCwgYm9vbD4gY2FuZGlkYXRlczsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworICAgICAgICBjb25zdCBDU1NQcm9w
ZXJ0eSAqcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldOworICAgICAgICBBU1NFUlQocHJvcGVydHkp
OworICAgICAgICBib29sIGltcG9ydGFudCA9IHByb3BlcnR5LT5pc0ltcG9ydGFudCgpOworCisg
ICAgICAgIEhhc2hNYXA8aW50LCBib29sPjo6aXRlcmF0b3IgaXQgPSBjYW5kaWRhdGVzLmZpbmQo
cHJvcGVydHktPmlkKCkpOworICAgICAgICBpZiAoaXQgIT0gY2FuZGlkYXRlcy5lbmQoKSkgewor
ICAgICAgICAgICAgaWYgKCFpbXBvcnRhbnQgJiYgaXQtPnNlY29uZCkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5LT5pZCgpKTsK
KyAgICAgICAgfQorCisgICAgICAgIG1fcHJvcGVydGllcy5hcHBlbmQoKnByb3BlcnR5KTsKKyAg
ICAgICAgY2FuZGlkYXRlcy5zZXQocHJvcGVydHktPmlkKCksIGltcG9ydGFudCk7CisgICAgfQor
fQorCitTdHlsZVByb3BlcnR5U2V0Ojp+U3R5bGVQcm9wZXJ0eVNldCgpCit7CisgICAgQVNTRVJU
KCFtX2hhc0NTU09NV3JhcHBlciB8fCBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmNvbnRh
aW5zKHRoaXMpKTsKKyAgICBpZiAobV9oYXNDU1NPTVdyYXBwZXIpCisgICAgICAgIHByb3BlcnR5
U2V0Q1NTT01XcmFwcGVyTWFwKCkucmVtb3ZlKHRoaXMpOworfQorCit2b2lkIFN0eWxlUHJvcGVy
dHlTZXQ6OmNvcHlQcm9wZXJ0aWVzRnJvbShjb25zdCBTdHlsZVByb3BlcnR5U2V0JiBvdGhlcikK
K3sKKyAgICBtX3Byb3BlcnRpZXMgPSBvdGhlci5tX3Byb3BlcnRpZXM7Cit9CisKK1N0cmluZyBT
dHlsZVByb3BlcnR5U2V0OjpnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAor
eworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3Bl
cnR5SUQpOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7
CisKKyAgICAvLyBTaG9ydGhhbmQgYW5kIDQtdmFsdWVzIHByb3BlcnRpZXMKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SUQpIHsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclNwYWNpbmc6IHsK
KyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckhvcml6b250YWxTcGFjaW5nLCBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2Fs
U3BhY2luZyB9OworICAgICAgICAgICAgcmV0dXJuIGJvcmRlclNwYWNpbmdWYWx1ZShwcm9wZXJ0
aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0
aW9uOiB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0PyBUaGUgY29kZSBp
biBjc3NwYXJzZXIuY3BwIGlzIGNvbmZ1c2luZworICAgICAgICAgICAgY29uc3QgaW50IHByb3Bl
cnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUG9zaXRpb25ZIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0
aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUmVwZWF0OiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1sy
XSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
UmVwZWF0WSB9OworICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShw
cm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZDogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbOV0gPSB7IENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRBdHRhY2htZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xp
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRPcmlnaW4gfTsKKyAgICAgICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5k
VmFsdWUocHJvcGVydGllcyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlcjogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM11bNF0gPSB7eyBDU1NQ
cm9wZXJ0eUJvcmRlclRvcFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5
Qm9yZGVyTGVmdFdpZHRoIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7IENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJC
b3R0b21TdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGUgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENv
bG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9w
ZXJ0eUJvcmRlckJvdHRvbUNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvciB9fTsKKyAgICAgICAgICAgIFN0
cmluZyByZXM7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9M
RU5HVEgocHJvcGVydGllcyk7ICsraSkgeworICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9
IGdldENvbW1vblZhbHVlKHByb3BlcnRpZXNbaV0pOworICAgICAgICAgICAgICAgIGlmICghdmFs
dWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMuaXNOdWxsKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gIiAiOworICAgICAgICAgICAgICAgICAgICBy
ZXMgKz0gdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
VG9wOiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTUHJvcGVy
dHlCb3JkZXJUb3BXaWR0aCwgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yfTsK
KyAgICAgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQ6IHsKKyAgICAgICAgICAg
IGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgs
IENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3J9OworICAgICAgICAgICAg
cmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b206IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBw
cm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCBDU1NQcm9wZXJ0
eUJvcmRlckJvdHRvbVN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3J9OworICAgICAgICAgICAgcmV0dXJuIGdl
dFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0OiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1sz
XSA9IHsgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFN0
eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5
Qm9yZGVyTGVmdENvbG9yfTsKKyAgICAgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZShw
cm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZTog
eworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3BlcnR5T3V0
bGluZVdpZHRoLCBDU1NQcm9wZXJ0eU91dGxpbmVTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvciB9OworICAgICAgICAg
ICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xvcjogeworICAgICAgICAgICAgY29uc3QgaW50
IHByb3BlcnRpZXNbNF0gPSB7IENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IsIENTU1Byb3BlcnR5
Qm9yZGVyUmlnaHRDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xv
ciB9OworICAgICAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMocHJvcGVydGllcyk7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoOiB7CisgICAgICAgICAgICBj
b25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgQ1NT
UHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGgsIENTU1Byb3BlcnR5Qm9yZGVy
TGVmdFdpZHRoIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyhwcm9wZXJ0aWVzKTsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyU3R5bGU6IHsKKyAgICAg
ICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0
eWxlLCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21TdHlsZSwgQ1NTUHJvcGVy
dHlCb3JkZXJMZWZ0U3R5bGUgfTsKKyAgICAgICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKHByb3Bl
cnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4Rmxv
dzogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlX
ZWJraXRGbGV4RGlyZWN0aW9uLCBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhXcmFwIH07CisgICAgICAg
ICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6CisgICAgICAgICAgICByZXR1cm4gZm9udFZhbHVl
KCk7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW46IHsKKyAgICAgICAgICAgIGNvbnN0
IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NQcm9wZXJ0eU1hcmdpblRvcCwgQ1NTUHJvcGVydHlN
YXJnaW5SaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cm9wZXJ0eU1hcmdpbkJvdHRvbSwgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0IH07CisgICAgICAgICAg
ICByZXR1cm4gZ2V0NFZhbHVlcyhwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENTU1Byb3BlcnR5T3ZlcmZsb3c6IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVz
WzJdID0geyBDU1NQcm9wZXJ0eU92ZXJmbG93WCwgQ1NTUHJvcGVydHlPdmVyZmxvd1kgfTsKKyAg
ICAgICAgICAgIHJldHVybiBnZXRDb21tb25WYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZzogeworICAgICAgICAgICAgY29uc3QgaW50
IHByb3BlcnRpZXNbNF0gPSB7IENTU1Byb3BlcnR5UGFkZGluZ1RvcCwgQ1NTUHJvcGVydHlQYWRk
aW5nUmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJv
cGVydHlQYWRkaW5nQm90dG9tLCBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0IH07CisgICAgICAgICAg
ICByZXR1cm4gZ2V0NFZhbHVlcyhwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENTU1Byb3BlcnR5TGlzdFN0eWxlOiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGll
c1szXSA9IHsgQ1NTUHJvcGVydHlMaXN0U3R5bGVUeXBlLCBDU1NQcm9wZXJ0eUxpc3RTdHlsZVBv
c2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3Bl
cnR5TGlzdFN0eWxlSW1hZ2UgfTsKKyAgICAgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1
ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza1Bvc2l0aW9uOiB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0PyBU
aGUgY29kZSBpbiBjc3NwYXJzZXIuY3BwIGlzIGNvbmZ1c2luZworICAgICAgICAgICAgY29uc3Qg
aW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgQ1NT
UHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0TGF5
ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0OiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJv
cGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WCwgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUmVwZWF0WSB9OworICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9ydGhh
bmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFzazogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbXSA9IHsgQ1NT
UHJvcGVydHlXZWJraXRNYXNrSW1hZ2UsIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFz
a0F0dGFjaG1lbnQsIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uLCBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tDbGlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJvcGVydHlXZWJraXRNYXNrT3JpZ2luIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJl
ZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW46IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBw
cm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2Zvcm1PcmlnaW5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWiB9OworICAgICAgICAgICAgcmV0dXJuIGdl
dFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVy
dGllc1s0XSA9IHsgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHksIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uLCBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheSB9OworICAgICAgICAgICAgcmV0dXJuIGdl
dExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOiB7CisgICAgICAgICAgICBjb25zdCBpbnQg
cHJvcGVydGllc1s3XSA9IHsgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lLCBDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sIENT
U1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudCwg
Q1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25GaWxsTW9kZSB9
OworICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVz
KTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcDogeworICAg
ICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3BlcnR5V2Via2l0V3Jh
cEZsb3csIENTU1Byb3BlcnR5V2Via2l0V3JhcE1hcmdpbiwKKyAgICAgICAgICAgICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdFdyYXBQYWRkaW5nIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRo
YW5kVmFsdWUocHJvcGVydGllcyk7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoU1ZHKQorICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5TWFya2VyOiB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eU1hcmtlclN0YXJ0KTsKKyAg
ICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUtPmNzc1Rl
eHQoKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIHJldHVybiBTdHJpbmcoKTsKK30K
KworU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmJvcmRlclNwYWNpbmdWYWx1ZShjb25zdCBpbnQg
cHJvcGVydGllc1syXSkgY29uc3QKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGhvcml6b250YWxW
YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1swXSk7CisgICAgUmVmUHRyPENT
U1ZhbHVlPiB2ZXJ0aWNhbFZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzFd
KTsKKworICAgIGlmICghaG9yaXpvbnRhbFZhbHVlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgQVNTRVJUKHZlcnRpY2FsVmFsdWUpOyAvLyBCeSA8aHR0cDovL3d3dy53My5vcmcvVFIv
Q1NTMjEvdGFibGVzLmh0bWwjc2VwYXJhdGVkLWJvcmRlcnM+LgorCisgICAgU3RyaW5nIGhvcml6
b250YWxWYWx1ZUNTU1RleHQgPSBob3Jpem9udGFsVmFsdWUtPmNzc1RleHQoKTsKKyAgICBTdHJp
bmcgdmVydGljYWxWYWx1ZUNTU1RleHQgPSB2ZXJ0aWNhbFZhbHVlLT5jc3NUZXh0KCk7CisgICAg
aWYgKGhvcml6b250YWxWYWx1ZUNTU1RleHQgPT0gdmVydGljYWxWYWx1ZUNTU1RleHQpCisgICAg
ICAgIHJldHVybiBob3Jpem9udGFsVmFsdWVDU1NUZXh0OworICAgIHJldHVybiBob3Jpem9udGFs
VmFsdWVDU1NUZXh0ICsgJyAnICsgdmVydGljYWxWYWx1ZUNTU1RleHQ7Cit9CisKK2Jvb2wgU3R5
bGVQcm9wZXJ0eVNldDo6YXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KGludCBwcm9w
ZXJ0eUlkLCBTdHJpbmdCdWlsZGVyJiByZXN1bHQpIGNvbnN0Cit7CisgICAgY29uc3QgQ1NTUHJv
cGVydHkqIHByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SWQpOworICAgIGlm
ICghcHJvcGVydHkpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gQWxsIGxvbmdoYW5kcyBtdXN0
IGhhdmUgYXQgbGVhc3QgaW1wbGljaXQgdmFsdWVzIGlmICJmb250IiBpcyBzcGVjaWZpZWQuCisg
ICAgaWYgKHByb3BlcnR5LT5pc0ltcGxpY2l0KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgY2hhciBwcmVmaXggPSAnXDAnOworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250U3R5bGU6CisgICAgICAgIGJyZWFrOyAvLyBObyBwcmVmaXguCisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRW
YXJpYW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2VpZ2h0OgorICAgICAgICBwcmVmaXgg
PSAnICc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0Ogor
ICAgICAgICBwcmVmaXggPSAnLyc7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmIChwcmVmaXggJiYgIXJl
c3VsdC5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdC5hcHBlbmQocHJlZml4KTsKKyAgICByZXN1
bHQuYXBwZW5kKHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCkpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1N0cmluZyBTdHlsZVByb3BlcnR5U2V0Ojpmb250VmFsdWUoKSBjb25zdAorewor
ICAgIGNvbnN0IENTU1Byb3BlcnR5KiBmb250U2l6ZVByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0
aElkKENTU1Byb3BlcnR5Rm9udFNpemUpOworICAgIGlmICghZm9udFNpemVQcm9wZXJ0eSB8fCBm
b250U2l6ZVByb3BlcnR5LT5pc0ltcGxpY2l0KCkpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOworCisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1
ZTsKKyAgICBzdWNjZXNzICY9IGFwcGVuZEZvbnRMb25naGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQ
cm9wZXJ0eUZvbnRTdHlsZSwgcmVzdWx0KTsKKyAgICBzdWNjZXNzICY9IGFwcGVuZEZvbnRMb25n
aGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCByZXN1bHQpOworICAg
IHN1Y2Nlc3MgJj0gYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KENTU1Byb3BlcnR5
Rm9udFdlaWdodCwgcmVzdWx0KTsKKyAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCisgICAgICAg
IHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICByZXN1bHQuYXBwZW5kKGZvbnRTaXplUHJvcGVydHkt
PnZhbHVlKCktPmNzc1RleHQoKSk7CisgICAgc3VjY2VzcyAmPSBhcHBlbmRGb250TG9uZ2hhbmRW
YWx1ZUlmRXhwbGljaXQoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCByZXN1bHQpOworICAgIHN1Y2Nl
c3MgJj0gYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KENTU1Byb3BlcnR5Rm9udEZh
bWlseSwgcmVzdWx0KTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgLy8gQW4gaW52YWxp
ZCAiZm9udCIgdmFsdWUgaGFzIGJlZW4gYnVpbHQgKHNob3VsZCBuZXZlciBoYXBwZW4sIGFzIGF0
IGxlYXN0IGltcGxpY2l0IHZhbHVlcworICAgICAgICAvLyBmb3IgbWFuZGF0b3J5IGxvbmdoYW5k
cyBhcmUgYWx3YXlzIGZvdW5kIGluIHRoZSBzdHlsZSksIHJlcG9ydCBlbXB0eSB2YWx1ZSBpbnN0
ZWFkLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworU3Ry
aW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldDRWYWx1ZXMoY29uc3QgaW50KiBwcm9wZXJ0aWVzKSBj
b25zdAoreworICAgIC8vIEFzc3VtZSB0aGUgcHJvcGVydGllcyBhcmUgaW4gdGhlIHVzdWFsIG9y
ZGVyIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdC4KKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHRvcFZh
bHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzBdKTsKKyAgICBSZWZQdHI8Q1NT
VmFsdWU+IHJpZ2h0VmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbMV0pOwor
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gYm90dG9tVmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHBy
b3BlcnRpZXNbMl0pOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gbGVmdFZhbHVlID0gZ2V0UHJvcGVy
dHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzNdKTsKKworICAgIC8vIEFsbCA0IHByb3BlcnRpZXMgbXVz
dCBiZSBzcGVjaWZpZWQuCisgICAgaWYgKCF0b3BWYWx1ZSB8fCAhcmlnaHRWYWx1ZSB8fCAhYm90
dG9tVmFsdWUgfHwgIWxlZnRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
Ym9vbCBzaG93TGVmdCA9IHJpZ2h0VmFsdWUtPmNzc1RleHQoKSAhPSBsZWZ0VmFsdWUtPmNzc1Rl
eHQoKTsKKyAgICBib29sIHNob3dCb3R0b20gPSAodG9wVmFsdWUtPmNzc1RleHQoKSAhPSBib3R0
b21WYWx1ZS0+Y3NzVGV4dCgpKSB8fCBzaG93TGVmdDsKKyAgICBib29sIHNob3dSaWdodCA9ICh0
b3BWYWx1ZS0+Y3NzVGV4dCgpICE9IHJpZ2h0VmFsdWUtPmNzc1RleHQoKSkgfHwgc2hvd0JvdHRv
bTsKKworICAgIFN0cmluZyByZXMgPSB0b3BWYWx1ZS0+Y3NzVGV4dCgpOworICAgIGlmIChzaG93
UmlnaHQpCisgICAgICAgIHJlcyArPSAiICIgKyByaWdodFZhbHVlLT5jc3NUZXh0KCk7CisgICAg
aWYgKHNob3dCb3R0b20pCisgICAgICAgIHJlcyArPSAiICIgKyBib3R0b21WYWx1ZS0+Y3NzVGV4
dCgpOworICAgIGlmIChzaG93TGVmdCkKKyAgICAgICAgcmVzICs9ICIgIiArIGxlZnRWYWx1ZS0+
Y3NzVGV4dCgpOworCisgICAgcmV0dXJuIHJlczsKK30KKworU3RyaW5nIFN0eWxlUHJvcGVydHlT
ZXQ6OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHNpemVf
dCBzaXplKSBjb25zdAoreworICAgIFN0cmluZyByZXM7CisKKyAgICAvLyBCZWdpbiBieSBjb2xs
ZWN0aW5nIHRoZSBwcm9wZXJ0aWVzIGludG8gYW4gYXJyYXkuCisgICAgVmVjdG9yPCBSZWZQdHI8
Q1NTVmFsdWU+ID4gdmFsdWVzKHNpemUpOworICAgIHNpemVfdCBudW1MYXllcnMgPSAwOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgdmFsdWVzW2ld
ID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKKyAgICAgICAgaWYgKHZhbHVl
c1tpXSkgeworICAgICAgICAgICAgaWYgKHZhbHVlc1tpXS0+aXNWYWx1ZUxpc3QoKSkgeworICAg
ICAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFs
dWVMaXN0Kj4odmFsdWVzW2ldLmdldCgpKTsKKyAgICAgICAgICAgICAgICBudW1MYXllcnMgPSBt
YXgodmFsdWVMaXN0LT5sZW5ndGgoKSwgbnVtTGF5ZXJzKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIG51bUxheWVycyA9IG1heDxzaXplX3Q+KDFVLCBudW1MYXllcnMpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHN0aXRjaCB0aGUgcHJvcGVydGllcyB0b2dl
dGhlci4gIEltcGxpY2l0IGluaXRpYWwgdmFsdWVzIGFyZSBmbGFnZ2VkIGFzIHN1Y2ggYW5kCisg
ICAgLy8gY2FuIHNhZmVseSBiZSBvbWl0dGVkLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtTGF5ZXJzOyBpKyspIHsKKyAgICAgICAgU3RyaW5nIGxheWVyUmVzOworICAgICAgICBib29s
IHVzZVJlcGVhdFhTaG9ydGhhbmQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCB1c2VSZXBlYXRZU2hv
cnRoYW5kID0gZmFsc2U7CisgICAgICAgIGJvb2wgdXNlU2luZ2xlV29yZFNob3J0aGFuZCA9IGZh
bHNlOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZXNbal0p
IHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWVzW2pdLT5pc1ZhbHVlTGlzdCgpKQorICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlc1tq
XS5nZXQoKSktPml0ZW0oaSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gdmFsdWVzW2pdOworCisgICAgICAgICAgICAgICAgICAgIC8vIENvbG9y
IG9ubHkgYmVsb25ncyBpbiB0aGUgbGFzdCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgaWYg
KHByb3BlcnRpZXNbal0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpICE9IG51bUxheWVycyAtIDEpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkg
IT0gMCkgLy8gT3RoZXIgc2luZ2xldG9ucyBvbmx5IGJlbG9uZyBpbiB0aGUgZmlyc3QgbGF5ZXIu
CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJlcG9ydCBiYWNrZ3Jv
dW5kLXJlcGVhdCBhcyBpdCB3YXMgd3JpdHRlbiBpbiB0aGUgQ1NTLiBJZiB0aGUgcHJvcGVydHkg
aXMgaW1wbGljaXQsCisgICAgICAgICAgICAvLyB0aGVuIGl0IHdhcyB3cml0dGVuIHdpdGggb25s
eSBvbmUgdmFsdWUuIEhlcmUgd2UgZmlndXJlIG91dCB3aGljaCB2YWx1ZSB0aGF0IHdhcyBzbyB3
ZSBjYW4KKyAgICAgICAgICAgIC8vIHJlcG9ydCBiYWNrIGNvcnJlY3RseS4KKyAgICAgICAgICAg
IGlmIChwcm9wZXJ0aWVzW2pdID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFggJiYgaXNQ
cm9wZXJ0eUltcGxpY2l0KHByb3BlcnRpZXNbal0pKSB7CisKKyAgICAgICAgICAgICAgICAvLyBC
VUcgNDkwNTU6IG1ha2Ugc3VyZSB0aGUgdmFsdWUgd2FzIG5vdCByZXNldCBpbiB0aGUgbGF5ZXIg
Y2hlY2sganVzdCBhYm92ZS4KKyAgICAgICAgICAgICAgICBpZiAoaiA8IHNpemUgLSAxICYmIHBy
b3BlcnRpZXNbaiArIDFdID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFkgJiYgdmFsdWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB5VmFsdWU7CisgICAgICAg
ICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gbmV4dFZhbHVlID0gdmFsdWVzW2ogKyAxXTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRWYWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHlWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KG5l
eHRWYWx1ZS5nZXQoKSktPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHlWYWx1ZSA9IG5leHRWYWx1ZTsK
KworICAgICAgICAgICAgICAgICAgICBpbnQgeElkID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZS5nZXQoKSktPmdldElkZW50KCk7CisgICAgICAgICAgICAgICAgICAgIGlu
dCB5SWQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHlWYWx1ZS5nZXQoKSktPmdl
dElkZW50KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh4SWQgIT0geUlkKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeElkID09IENTU1ZhbHVlUmVwZWF0ICYmIHlJZCA9PSBDU1NW
YWx1ZU5vUmVwZWF0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwZWF0WFNo
b3J0aGFuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytqOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4SWQgPT0gQ1NTVmFsdWVOb1JlcGVhdCAmJiB5
SWQgPT0gQ1NTVmFsdWVSZXBlYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VS
ZXBlYXRZU2hvcnRoYW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZVNpbmdsZVdvcmRTaG9ydGhhbmQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgKytqOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodmFs
dWUgJiYgIXZhbHVlLT5pc0ltcGxpY2l0SW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWxheWVyUmVzLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICBsYXllclJlcyAr
PSAiICI7CisgICAgICAgICAgICAgICAgaWYgKHVzZVJlcGVhdFhTaG9ydGhhbmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdXNlUmVwZWF0WFNob3J0aGFuZCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICBsYXllclJlcyArPSBnZXRWYWx1ZU5hbWUoQ1NTVmFsdWVSZXBlYXRYKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHVzZVJlcGVhdFlTaG9ydGhhbmQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdXNlUmVwZWF0WVNob3J0aGFuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBsYXllclJlcyArPSBnZXRWYWx1ZU5hbWUoQ1NTVmFsdWVSZXBlYXRZKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHVzZVNpbmdsZVdvcmRTaG9ydGhhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdXNlU2luZ2xlV29yZFNob3J0aGFuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBsYXllclJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOworICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICBsYXllclJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFsYXllclJlcy5pc051bGwoKSkgewor
ICAgICAgICAgICAgaWYgKCFyZXMuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgcmVzICs9ICIs
ICI7CisgICAgICAgICAgICByZXMgKz0gbGF5ZXJSZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzOworfQorCitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0U2hvcnRoYW5k
VmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBzaXplX3Qgc2l6ZSkgY29uc3QKK3sKKyAgICBT
dHJpbmcgcmVzOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgIGlmICghaXNQcm9wZXJ0eUltcGxpY2l0KHByb3BlcnRpZXNbaV0pKSB7CisgICAgICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVz
W2ldKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBwcm92aWRlIGRlZmF1bHQgdmFsdWUgaWYgIXZh
bHVlCisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJlcy5p
c051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzICs9ICIgIjsKKyAgICAgICAgICAgICAg
ICByZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gcmVzOworfQorCisvLyBvbmx5IHJldHVybnMgYSBub24tbnVsbCB2YWx1
ZSBpZiBhbGwgcHJvcGVydGllcyBoYXZlIHRoZSBzYW1lLCBub24tbnVsbCB2YWx1ZQorU3RyaW5n
IFN0eWxlUHJvcGVydHlTZXQ6OmdldENvbW1vblZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywg
c2l6ZV90IHNpemUpIGNvbnN0Cit7CisgICAgU3RyaW5nIHJlczsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0g
Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgU3RyaW5nIHRleHQgPSB2YWx1
ZS0+Y3NzVGV4dCgpOworICAgICAgICBpZiAodGV4dC5pc051bGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICAgICAgaWYgKHJlcy5pc051bGwoKSkKKyAgICAgICAgICAgIHJl
cyA9IHRleHQ7CisgICAgICAgIGVsc2UgaWYgKHJlcyAhPSB0ZXh0KQorICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCitQYXNzUmVmUHRyPENT
U1ZhbHVlPiBTdHlsZVByb3BlcnR5U2V0OjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0
eUlEKSBjb25zdAoreworICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSA9IGZpbmRQcm9w
ZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsKKyAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0eS0+
dmFsdWUoKSA6IDA7Cit9CisKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlU2hvcnRoYW5k
UHJvcGVydHkoaW50IHByb3BlcnR5SUQpCit7CisgICAgQ1NTUHJvcGVydHlMb25naGFuZCBsb25n
aGFuZCA9IGxvbmdoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJRCk7CisgICAgaWYgKCFsb25naGFu
ZC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByZW1vdmVQcm9w
ZXJ0aWVzSW5TZXQobG9uZ2hhbmQucHJvcGVydGllcygpLCBsb25naGFuZC5sZW5ndGgoKSk7Cit9
CisKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IFN0cmluZyogcmV0dXJuVGV4dCkKK3sKKyAgICBpZiAocmVtb3ZlU2hvcnRoYW5kUHJvcGVydHko
cHJvcGVydHlJRCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFJldHVybiBhbiBlcXVpdmFsZW50IHNo
b3J0aGFuZCB3aGVuIHBvc3NpYmxlLgorICAgICAgICBpZiAocmV0dXJuVGV4dCkKKyAgICAgICAg
ICAgICpyZXR1cm5UZXh0ID0gIiI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IENTU1Byb3BlcnR5KiBmb3VuZFByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5
SUQpOworICAgIGlmICghZm91bmRQcm9wZXJ0eSkgeworICAgICAgICBpZiAocmV0dXJuVGV4dCkK
KyAgICAgICAgICAgICpyZXR1cm5UZXh0ID0gIiI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAocmV0dXJuVGV4dCkKKyAgICAgICAgKnJldHVyblRleHQgPSBmb3VuZFBy
b3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCk7CisKKyAgICAvLyBBIG1vcmUgZWZmaWNpZW50IHJl
bW92YWwgc3RyYXRlZ3kgd291bGQgaW52b2x2ZSBtYXJraW5nIGVudHJpZXMgYXMgZW1wdHkKKyAg
ICAvLyBhbmQgc3dlZXBpbmcgdGhlbSB3aGVuIHRoZSB2ZWN0b3IgZ3Jvd3MgdG9vIGJpZy4KKyAg
ICBtX3Byb3BlcnRpZXMucmVtb3ZlKGZvdW5kUHJvcGVydHkgLSBtX3Byb3BlcnRpZXMuZGF0YSgp
KTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojpw
cm9wZXJ0eUlzSW1wb3J0YW50KGludCBwcm9wZXJ0eUlEKSBjb25zdAoreworICAgIGNvbnN0IENT
U1Byb3BlcnR5KiBwcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsKKyAg
ICBpZiAocHJvcGVydHkpCisgICAgICAgIHJldHVybiBwcm9wZXJ0eS0+aXNJbXBvcnRhbnQoKTsK
KworICAgIENTU1Byb3BlcnR5TG9uZ2hhbmQgbG9uZ2hhbmRzID0gbG9uZ2hhbmRGb3JQcm9wZXJ0
eShwcm9wZXJ0eUlEKTsKKyAgICBpZiAoIWxvbmdoYW5kcy5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvbmdoYW5kcy5sZW5n
dGgoKTsgKytpKSB7CisgICAgICAgIGlmICghcHJvcGVydHlJc0ltcG9ydGFudChsb25naGFuZHMu
cHJvcGVydGllcygpW2ldKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2ludCBTdHlsZVByb3BlcnR5U2V0OjpnZXRQcm9wZXJ0eVNob3J0
aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3QKK3sKKyAgICBjb25zdCBDU1NQcm9wZXJ0eSogcHJv
cGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHlJRCk7CisgICAgcmV0dXJuIHByb3Bl
cnR5ID8gcHJvcGVydHktPnNob3J0aGFuZElEKCkgOiAwOworfQorCitib29sIFN0eWxlUHJvcGVy
dHlTZXQ6OmlzUHJvcGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QKK3sKKyAgICBj
b25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHlJ
RCk7CisgICAgcmV0dXJuIHByb3BlcnR5ID8gcHJvcGVydHktPmlzSW1wbGljaXQoKSA6IGZhbHNl
OworfQorCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlE
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVTaGVldCogY29u
dGV4dFN0eWxlU2hlZXQpCit7CisgICAgLy8gU2V0dGluZyB0aGUgdmFsdWUgdG8gYW4gZW1wdHkg
c3RyaW5nIGp1c3QgcmVtb3ZlcyB0aGUgcHJvcGVydHkgaW4gYm90aCBJRSBhbmQgR2Vja28uCisg
ICAgLy8gU2V0dGluZyBpdCB0byBudWxsIHNlZW1zIHRvIHByb2R1Y2UgbGVzcyBjb25zaXN0ZW50
IHJlc3VsdHMsIGJ1dCB3ZSB0cmVhdCBpdCBqdXN0IHRoZSBzYW1lLgorICAgIGlmICh2YWx1ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5n
IHByb3BlcnR5IHZhbHVlLCB0aGlzIG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgZW5kIG9mIHRo
ZSBsaXN0LgorICAgIC8vIEZpcmVmb3ggcHJlc2VydmVzIHRoZSBwb3NpdGlvbiwgYW5kIE1TSUUg
bW92ZXMgdGhlIHByb3BlcnR5IHRvIHRoZSBiZWdpbm5pbmcuCisgICAgcmV0dXJuIENTU1BhcnNl
cjo6cGFyc2VWYWx1ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB1c2VTdHJp
Y3RQYXJzaW5nKCksIGNvbnRleHRTdHlsZVNoZWV0KTsKK30KKwordm9pZCBTdHlsZVByb3BlcnR5
U2V0OjpzZXRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHksIENTU1Byb3BlcnR5
KiBzbG90KQoreworICAgIGlmICghcmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkocHJvcGVydHkuaWQo
KSkpIHsKKyAgICAgICAgQ1NTUHJvcGVydHkqIHRvUmVwbGFjZSA9IHNsb3QgPyBzbG90IDogZmlu
ZFByb3BlcnR5V2l0aElkKHByb3BlcnR5LmlkKCkpOworICAgICAgICBpZiAodG9SZXBsYWNlKSB7
CisgICAgICAgICAgICAqdG9SZXBsYWNlID0gcHJvcGVydHk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wcm9wZXJ0aWVzLmFwcGVuZChwcm9wZXJ0eSk7Cit9
CisKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGlu
dCBpZGVudGlmaWVyLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxl
U2hlZXQpCit7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZTsgICAgCisgICAg
aWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHRTdHlsZVNoZWV0ID8gY29udGV4dFN0eWxl
U2hlZXQtPmZpbmREb2N1bWVudCgpIDogMCkKKyAgICAgICAgdmFsdWUgPSBkb2N1bWVudC0+Y3Nz
VmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZGVudGlmaWVyKTsKKyAgICBlbHNl
CisgICAgICAgIHZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoaWRl
bnRpZmllcik7CisKKyAgICBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1
ZS5yZWxlYXNlKCksIGltcG9ydGFudCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0
eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBkb3VibGUgbnVtYmVy
LCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQsIGJvb2wgaW1wb3J0YW50LCBDU1NT
dHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKK3sKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHZhbHVlOyAgICAKKyAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dFN0
eWxlU2hlZXQgPyBjb250ZXh0U3R5bGVTaGVldC0+ZmluZERvY3VtZW50KCkgOiAwKQorICAgICAg
ICB2YWx1ZSA9IGRvY3VtZW50LT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUobnVtYmVyLCB1
bml0KTsKKyAgICBlbHNlCisgICAgICAgIHZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShudW1iZXIsIHVuaXQpOworICAgIHNldFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3BlcnR5SUQs
IHZhbHVlLCBpbXBvcnRhbnQpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTdHlsZVBy
b3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlv
biwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCit7CisgICAgbV9wcm9wZXJ0aWVz
LmNsZWFyKCk7CisgICAgQ1NTUGFyc2VyIHBhcnNlcih1c2VTdHJpY3RQYXJzaW5nKCkpOworICAg
IHBhcnNlci5wYXJzZURlY2xhcmF0aW9uKHRoaXMsIHN0eWxlRGVjbGFyYXRpb24sIDAsIGNvbnRl
eHRTdHlsZVNoZWV0KTsKK30KKwordm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRQYXJzZWRQcm9w
ZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5KiBjb25zdCogcHJvcGVydGllcywgaW50IG51bVByb3Bl
cnRpZXMpCit7CisgICAgbV9wcm9wZXJ0aWVzLnJlc2VydmVDYXBhY2l0eShudW1Qcm9wZXJ0aWVz
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkKKyAgICAgICAg
YWRkUGFyc2VkUHJvcGVydHkoKnByb3BlcnRpZXNbaV0pOworfQorCit2b2lkIFN0eWxlUHJvcGVy
dHlTZXQ6OmFkZFBhcnNlZFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSkKK3sK
KyAgICAvLyBPbmx5IGFkZCBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBubyAhaW1wb3J0YW50IGNvdW50
ZXJwYXJ0IHByZXNlbnQKKyAgICBpZiAoIXByb3BlcnR5SXNJbXBvcnRhbnQocHJvcGVydHkuaWQo
KSkgfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgeworICAgICAgICByZW1vdmVQcm9wZXJ0eShw
cm9wZXJ0eS5pZCgpKTsKKyAgICAgICAgbV9wcm9wZXJ0aWVzLmFwcGVuZChwcm9wZXJ0eSk7Cisg
ICAgfQorfQorCitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6YXNUZXh0KCkgY29uc3QKK3sKKyAg
ICBTdHJpbmcgcmVzdWx0ID0gIiI7CisKKyAgICBjb25zdCBDU1NQcm9wZXJ0eSogcG9zaXRpb25Y
UHJvcCA9IDA7CisgICAgY29uc3QgQ1NTUHJvcGVydHkqIHBvc2l0aW9uWVByb3AgPSAwOworICAg
IGNvbnN0IENTU1Byb3BlcnR5KiByZXBlYXRYUHJvcCA9IDA7CisgICAgY29uc3QgQ1NTUHJvcGVy
dHkqIHJlcGVhdFlQcm9wID0gMDsKKworICAgIHVuc2lnbmVkIHNpemUgPSBtX3Byb3BlcnRpZXMu
c2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pIHsKKyAgICAg
ICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3AgPSBtX3Byb3BlcnRpZXNbbl07CisgICAgICAgIGlm
IChwcm9wLmlkKCkgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YKQorICAgICAgICAg
ICAgcG9zaXRpb25YUHJvcCA9ICZwcm9wOworICAgICAgICBlbHNlIGlmIChwcm9wLmlkKCkgPT0g
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZKQorICAgICAgICAgICAgcG9zaXRpb25ZUHJv
cCA9ICZwcm9wOworICAgICAgICBlbHNlIGlmIChwcm9wLmlkKCkgPT0gQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kUmVwZWF0WCkKKyAgICAgICAgICAgIHJlcGVhdFhQcm9wID0gJnByb3A7CisgICAgICAg
IGVsc2UgaWYgKHByb3AuaWQoKSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZKQorICAg
ICAgICAgICAgcmVwZWF0WVByb3AgPSAmcHJvcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmVzdWx0ICs9IHByb3AuY3NzVGV4dCgpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGEgbm90LXNvLW5pY2Ugd2F5IHRvIHR1cm4geC95IHBvc2l0aW9ucyBpbnRvIHNpbmdsZSBiYWNr
Z3JvdW5kLXBvc2l0aW9uIGluIG91dHB1dC4KKyAgICAvLyBJdCBpcyByZXF1aXJlZCBiZWNhdXNl
IGJhY2tncm91bmQtcG9zaXRpb24teC95IGFyZSBub24tc3RhbmRhcmQgcHJvcGVydGllcyBhbmQg
V2ViS2l0IGdlbmVyYXRlZCBvdXRwdXQKKyAgICAvLyB3b3VsZCBub3Qgd29yayBpbiBGaXJlZm94
ICg8cmRhcjovL3Byb2JsZW0vNTE0MzE4Mz4pCisgICAgLy8gSXQgd291bGQgYmUgYSBiZXR0ZXIg
c29sdXRpb24gaWYgYmFja2dyb3VuZC1wb3NpdGlvbiB3YXMgQ1NTX1BBSVIuCisgICAgaWYgKHBv
c2l0aW9uWFByb3AgJiYgcG9zaXRpb25ZUHJvcCAmJiBwb3NpdGlvblhQcm9wLT5pc0ltcG9ydGFu
dCgpID09IHBvc2l0aW9uWVByb3AtPmlzSW1wb3J0YW50KCkpIHsKKyAgICAgICAgU3RyaW5nIHBv
c2l0aW9uVmFsdWU7CisgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSB9
OworICAgICAgICBpZiAocG9zaXRpb25YUHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSB8fCBw
b3NpdGlvbllQcm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICAgICAgcG9zaXRp
b25WYWx1ZSA9IGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcG9zaXRpb25WYWx1ZSA9IHBvc2l0aW9uWFByb3AtPnZhbHVlKCkt
PmNzc1RleHQoKSArICIgIiArIHBvc2l0aW9uWVByb3AtPnZhbHVlKCktPmNzc1RleHQoKTsKKyAg
ICAgICAgcmVzdWx0ICs9ICJiYWNrZ3JvdW5kLXBvc2l0aW9uOiAiICsgcG9zaXRpb25WYWx1ZSAr
IChwb3NpdGlvblhQcm9wLT5pc0ltcG9ydGFudCgpID8gIiAhaW1wb3J0YW50IiA6ICIiKSArICI7
ICI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHBvc2l0aW9uWFByb3ApCisgICAgICAgICAg
ICByZXN1bHQgKz0gcG9zaXRpb25YUHJvcC0+Y3NzVGV4dCgpOworICAgICAgICBpZiAocG9zaXRp
b25ZUHJvcCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBwb3NpdGlvbllQcm9wLT5jc3NUZXh0KCk7
CisgICAgfQorCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZG8gdGhlIHNhbWUgZm9yIGJhY2tn
cm91bmQtcmVwZWF0LgorICAgIGlmIChyZXBlYXRYUHJvcCAmJiByZXBlYXRZUHJvcCAmJiByZXBl
YXRYUHJvcC0+aXNJbXBvcnRhbnQoKSA9PSByZXBlYXRZUHJvcC0+aXNJbXBvcnRhbnQoKSkgewor
ICAgICAgICBTdHJpbmcgcmVwZWF0VmFsdWU7CisgICAgICAgIGNvbnN0IGludCByZXBlYXRQcm9w
ZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYLCBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRSZXBlYXRZIH07CisgICAgICAgIGlmIChyZXBlYXRYUHJvcC0+dmFsdWUoKS0+aXNW
YWx1ZUxpc3QoKSB8fCByZXBlYXRZUHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAg
ICAgICAgIHJlcGVhdFZhbHVlID0gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHJlcGVhdFByb3Bl
cnRpZXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBlYXRWYWx1ZSA9IHJlcGVhdFhQ
cm9wLT52YWx1ZSgpLT5jc3NUZXh0KCkgKyAiICIgKyByZXBlYXRZUHJvcC0+dmFsdWUoKS0+Y3Nz
VGV4dCgpOworICAgICAgICByZXN1bHQgKz0gImJhY2tncm91bmQtcmVwZWF0OiAiICsgcmVwZWF0
VmFsdWUgKyAocmVwZWF0WFByb3AtPmlzSW1wb3J0YW50KCkgPyAiICFpbXBvcnRhbnQiIDogIiIp
ICsgIjsgIjsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocmVwZWF0WFByb3ApCisgICAgICAg
ICAgICByZXN1bHQgKz0gcmVwZWF0WFByb3AtPmNzc1RleHQoKTsKKyAgICAgICAgaWYgKHJlcGVh
dFlQcm9wKQorICAgICAgICAgICAgcmVzdWx0ICs9IHJlcGVhdFlQcm9wLT5jc3NUZXh0KCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTdHlsZVByb3BlcnR5U2V0Ojpt
ZXJnZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBvdGhlciwgYm9vbCBhcmdPdmVycmlkZXNPbkNv
bmZsaWN0KQoreworICAgIHVuc2lnbmVkIHNpemUgPSBvdGhlci0+bV9wcm9wZXJ0aWVzLnNpemUo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgKytuKSB7CisgICAgICAgIGNv
bnN0IENTU1Byb3BlcnR5JiB0b01lcmdlID0gb3RoZXItPm1fcHJvcGVydGllc1tuXTsKKyAgICAg
ICAgQ1NTUHJvcGVydHkqIG9sZCA9IGZpbmRQcm9wZXJ0eVdpdGhJZCh0b01lcmdlLmlkKCkpOwor
ICAgICAgICBpZiAob2xkKSB7CisgICAgICAgICAgICBpZiAoIWFyZ092ZXJyaWRlc09uQ29uZmxp
Y3QgJiYgb2xkLT52YWx1ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgc2V0UHJvcGVydHkodG9NZXJnZSwgb2xkKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBtX3Byb3BlcnRpZXMuYXBwZW5kKHRvTWVyZ2UpOworICAgIH0KK30KKwordm9pZCBTdHlsZVBy
b3BlcnR5U2V0OjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJs
cywgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCit7CisgICAgc2l6ZV90IHNpemUg
PSBtX3Byb3BlcnRpZXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQorICAgICAgICBtX3Byb3BlcnRpZXNbaV0udmFsdWUoKS0+YWRkU3VicmVzb3VyY2VTdHls
ZVVSTHModXJscywgY29udGV4dFN0eWxlU2hlZXQpOworfQorCisvLyBUaGlzIGlzIHRoZSBsaXN0
IG9mIHByb3BlcnRpZXMgd2Ugd2FudCB0byBjb3B5IGluIHRoZSBjb3B5QmxvY2tQcm9wZXJ0aWVz
KCkgZnVuY3Rpb24uCisvLyBJdCBpcyB0aGUgbGlzdCBvZiBDU1MgcHJvcGVydGllcyB0aGF0IGFw
cGx5IHNwZWNpYWxseSB0byBibG9jay1sZXZlbCBlbGVtZW50cy4KK3N0YXRpYyBjb25zdCBpbnQg
YmxvY2tQcm9wZXJ0aWVzW10gPSB7CisgICAgQ1NTUHJvcGVydHlPcnBoYW5zLAorICAgIENTU1By
b3BlcnR5T3ZlcmZsb3csIC8vIFRoaXMgY2FuIGJlIGFsc28gYmUgYXBwbGllZCB0byByZXBsYWNl
ZCBlbGVtZW50cworICAgIENTU1Byb3BlcnR5V2Via2l0QXNwZWN0UmF0aW8sCisgICAgQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5Db3VudCwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcCwK
KyAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvciwKKyAgICBDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtblJ1bGVTdHlsZSwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVXaWR0
aCwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrQmVmb3JlLAorICAgIENTU1Byb3Bl
cnR5V2Via2l0Q29sdW1uQnJlYWtBZnRlciwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJy
ZWFrSW5zaWRlLAorICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uV2lkdGgsCisgICAgQ1NTUHJv
cGVydHlQYWdlQnJlYWtBZnRlciwKKyAgICBDU1NQcm9wZXJ0eVBhZ2VCcmVha0JlZm9yZSwKKyAg
ICBDU1NQcm9wZXJ0eVBhZ2VCcmVha0luc2lkZSwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lv
bkJyZWFrQWZ0ZXIsCisgICAgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0JlZm9yZSwKKyAg
ICBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlLAorICAgIENTU1Byb3BlcnR5VGV4
dEFsaWduLAorICAgIENTU1Byb3BlcnR5VGV4dEluZGVudCwKKyAgICBDU1NQcm9wZXJ0eVdpZG93
cworfTsKKworY29uc3QgdW5zaWduZWQgbnVtQmxvY2tQcm9wZXJ0aWVzID0gV1RGX0FSUkFZX0xF
TkdUSChibG9ja1Byb3BlcnRpZXMpOworCitQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFN0
eWxlUHJvcGVydHlTZXQ6OmNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25zdAoreworICAgIHJldHVy
biBjb3B5UHJvcGVydGllc0luU2V0KGJsb2NrUHJvcGVydGllcywgbnVtQmxvY2tQcm9wZXJ0aWVz
KTsKK30KKwordm9pZCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQor
eworICAgIHJlbW92ZVByb3BlcnRpZXNJblNldChibG9ja1Byb3BlcnRpZXMsIG51bUJsb2NrUHJv
cGVydGllcyk7Cit9CisKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVydGllc0lu
U2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKG1fcHJvcGVy
dGllcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGFsd2F5cyB1c2VkIHdpdGggc3RhdGljIHNldHMgYW5kIGluIHRoYXQgY2FzZSBjb25z
dHJ1Y3RpbmcgdGhlIGhhc2ggcmVwZWF0ZWRseSBpcyBwcmV0dHkgcG9pbnRsZXNzLgorICAgIEhh
c2hTZXQ8aW50PiB0b1JlbW92ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCisgICAgICAgIHRvUmVtb3ZlLmFkZChzZXRbaV0pOworCisgICAgVmVjdG9yPENTU1By
b3BlcnR5LCA0PiBuZXdQcm9wZXJ0aWVzOworICAgIG5ld1Byb3BlcnRpZXMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX3Byb3BlcnRpZXMuc2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBt
X3Byb3BlcnRpZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyAr
K24pIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wcm9wZXJ0aWVz
W25dOworICAgICAgICAvLyBOb3QgcXVpdGUgc3VyZSBpZiB0aGUgaXNJbXBvcnRhbnQgdGVzdCBp
cyBuZWVkZWQgYnV0IGl0IG1hdGNoZXMgdGhlIGV4aXN0aW5nIGJlaGF2aW9yLgorICAgICAgICBp
ZiAoIXByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKKyAgICAgICAgICAgIGlmICh0b1JlbW92ZS5j
b250YWlucyhwcm9wZXJ0eS5pZCgpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICBuZXdQcm9wZXJ0aWVzLmFwcGVuZChwcm9wZXJ0eSk7CisgICAgfQorCisg
ICAgYm9vbCBjaGFuZ2VkID0gbmV3UHJvcGVydGllcy5zaXplKCkgIT0gbV9wcm9wZXJ0aWVzLnNp
emUoKTsKKyAgICBtX3Byb3BlcnRpZXMgPSBuZXdQcm9wZXJ0aWVzOworICAgIHJldHVybiBjaGFu
Z2VkOworfQorCitjb25zdCBDU1NQcm9wZXJ0eSogU3R5bGVQcm9wZXJ0eVNldDo6ZmluZFByb3Bl
cnR5V2l0aElkKGludCBwcm9wZXJ0eUlEKSBjb25zdAoreworICAgIGZvciAoaW50IG4gPSBtX3By
b3BlcnRpZXMuc2l6ZSgpIC0gMSA7IG4gPj0gMDsgLS1uKSB7CisgICAgICAgIGlmIChwcm9wZXJ0
eUlEID09IG1fcHJvcGVydGllc1tuXS5tX2lkKQorICAgICAgICAgICAgcmV0dXJuICZtX3Byb3Bl
cnRpZXNbbl07CisgICAgfQorICAgIHJldHVybiAwOworfQorCitDU1NQcm9wZXJ0eSogU3R5bGVQ
cm9wZXJ0eVNldDo6ZmluZFByb3BlcnR5V2l0aElkKGludCBwcm9wZXJ0eUlEKQoreworICAgIGZv
ciAoaW50IG4gPSBtX3Byb3BlcnRpZXMuc2l6ZSgpIC0gMSA7IG4gPj0gMDsgLS1uKSB7CisgICAg
ICAgIGlmIChwcm9wZXJ0eUlEID09IG1fcHJvcGVydGllc1tuXS5tX2lkKQorICAgICAgICAgICAg
cmV0dXJuICZtX3Byb3BlcnRpZXNbbl07CisgICAgfQorICAgIHJldHVybiAwOworfQorICAgIAor
Ym9vbCBTdHlsZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkq
IHByb3BlcnR5KSBjb25zdAoreworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9w
ZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LT5pZCgpKTsKKyAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUt
PmNzc1RleHQoKSA9PSBwcm9wZXJ0eS0+dmFsdWUoKS0+Y3NzVGV4dCgpOworfQorICAgIAordm9p
ZCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhjb25zdCBTdHls
ZVByb3BlcnR5U2V0KiBzdHlsZSkKK3sKKyAgICBWZWN0b3I8aW50PiBwcm9wZXJ0aWVzVG9SZW1v
dmU7CisgICAgc2l6ZV90IHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBw
cm9wZXJ0eSA9IG1fcHJvcGVydGllc1tpXTsKKyAgICAgICAgaWYgKHN0eWxlLT5wcm9wZXJ0eU1h
dGNoZXMoJnByb3BlcnR5KSkKKyAgICAgICAgICAgIHByb3BlcnRpZXNUb1JlbW92ZS5hcHBlbmQo
cHJvcGVydHkuaWQoKSk7CisgICAgfSAgICAKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IG1hc3MgcmVtb3ZhbC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydGllc1Rv
UmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0aWVzVG9S
ZW1vdmVbaV0pOworfQorCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUVxdWl2YWxlbnRQ
cm9wZXJ0aWVzKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAgIFZlY3Rv
cjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92ZTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydGll
cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAg
ICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wcm9wZXJ0aWVzW2ldOworICAgICAg
ICBpZiAoc3R5bGUtPmNzc1Byb3BlcnR5TWF0Y2hlcygmcHJvcGVydHkpKQorICAgICAgICAgICAg
cHJvcGVydGllc1RvUmVtb3ZlLmFwcGVuZChwcm9wZXJ0eS5pZCgpKTsKKyAgICB9ICAgIAorICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgbWFzcyByZW1vdmFsLgorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6ZSgpOyArK2kpCisgICAgICAgIHJl
bW92ZVByb3BlcnR5KHByb3BlcnRpZXNUb1JlbW92ZVtpXSk7Cit9CisKK1Bhc3NSZWZQdHI8U3R5
bGVQcm9wZXJ0eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6Y29weSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KG1fcHJvcGVydGllcykpOworfQorCitQ
YXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFN0eWxlUHJvcGVydHlTZXQ6OmNvcHlQcm9wZXJ0
aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKK3sKKyAgICBW
ZWN0b3I8Q1NTUHJvcGVydHk+IGxpc3Q7CisgICAgbGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHNldFtp
XSk7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKENTU1Byb3Bl
cnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkpOworICAgIH0KKyAgICByZXR1cm4g
U3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGxpc3QpOworfQorCitDU1NTdHlsZURlY2xhcmF0aW9u
KiBTdHlsZVByb3BlcnR5U2V0OjplbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkgY29uc3QKK3sK
KyAgICBpZiAobV9oYXNDU1NPTVdyYXBwZXIpIHsKKyAgICAgICAgQVNTRVJUKCFzdGF0aWNfY2Fz
dDxDU1NTdHlsZURlY2xhcmF0aW9uKj4ocHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQo
dGhpcykpLT5wYXJlbnRSdWxlKCkpOworICAgICAgICBBU1NFUlQoIXByb3BlcnR5U2V0Q1NTT01X
cmFwcGVyTWFwKCkuZ2V0KHRoaXMpLT5wYXJlbnRFbGVtZW50KCkpOworICAgICAgICByZXR1cm4g
cHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyk7CisgICAgfQorICAgIG1faGFz
Q1NTT01XcmFwcGVyID0gdHJ1ZTsKKyAgICBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24q
IGNzc29tV3JhcHBlciA9IG5ldyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24oY29uc3Rf
Y2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4odGhpcykpOworICAgIHByb3BlcnR5U2V0Q1NTT01XcmFw
cGVyTWFwKCkuYWRkKHRoaXMsIGFkb3B0UHRyKGNzc29tV3JhcHBlcikpOworICAgIHJldHVybiBj
c3NvbVdyYXBwZXI7Cit9CisKK0NTU1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlUHJvcGVydHlTZXQ6
OmVuc3VyZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0IENTU1J1bGUqIHBhcmVudFJ1bGUp
IGNvbnN0Cit7CisgICAgaWYgKG1faGFzQ1NTT01XcmFwcGVyKSB7CisgICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxDU1NTdHlsZURlY2xhcmF0aW9uKj4ocHJvcGVydHlTZXRDU1NPTVdyYXBwZXJN
YXAoKS5nZXQodGhpcykpLT5wYXJlbnRSdWxlKCkgPT0gcGFyZW50UnVsZSk7CisgICAgICAgIHJl
dHVybiBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKTsKKyAgICB9CisgICAg
bV9oYXNDU1NPTVdyYXBwZXIgPSB0cnVlOworICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbiogY3Nzb21XcmFwcGVyID0gbmV3IFJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0X2Nh
c3Q8U3R5bGVQcm9wZXJ0eVNldCo+KHRoaXMpLCBjb25zdF9jYXN0PENTU1J1bGUqPihwYXJlbnRS
dWxlKSk7CisgICAgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5hZGQodGhpcywgYWRvcHRQ
dHIoY3Nzb21XcmFwcGVyKSk7CisgICAgcmV0dXJuIGNzc29tV3JhcHBlcjsKK30KKworQ1NTU3R5
bGVEZWNsYXJhdGlvbiogU3R5bGVQcm9wZXJ0eVNldDo6ZW5zdXJlSW5saW5lQ1NTU3R5bGVEZWNs
YXJhdGlvbihjb25zdCBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KSBjb25zdAoreworICAg
IGlmIChtX2hhc0NTU09NV3JhcHBlcikgeworICAgICAgICBBU1NFUlQocHJvcGVydHlTZXRDU1NP
TVdyYXBwZXJNYXAoKS5nZXQodGhpcyktPnBhcmVudEVsZW1lbnQoKSA9PSBwYXJlbnRFbGVtZW50
KTsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMp
OworICAgIH0KKyAgICBtX2hhc0NTU09NV3JhcHBlciA9IHRydWU7CisgICAgUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uKiBjc3NvbVdyYXBwZXIgPSBuZXcgSW5saW5lQ1NTU3R5bGVEZWNs
YXJhdGlvbihjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPih0aGlzKSwgY29uc3RfY2FzdDxT
dHlsZWRFbGVtZW50Kj4ocGFyZW50RWxlbWVudCkpOworICAgIHByb3BlcnR5U2V0Q1NTT01XcmFw
cGVyTWFwKCkuYWRkKHRoaXMsIGFkb3B0UHRyKGNzc29tV3JhcHBlcikpOworICAgIHJldHVybiBj
c3NvbVdyYXBwZXI7Cit9CisKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6Y2xlYXJQYXJlbnRSdWxl
KENTU1J1bGUqIHJ1bGUpCit7CisgICAgaWYgKCFtX2hhc0NTU09NV3JhcHBlcikKKyAgICAgICAg
cmV0dXJuOworICAgIEFTU0VSVF9VTlVTRUQocnVsZSwgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVEZWNs
YXJhdGlvbio+KHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpKS0+cGFyZW50
UnVsZSgpID09IHJ1bGUpOworICAgIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRo
aXMpLT5jbGVhclBhcmVudFJ1bGUoKTsKK30KKwordm9pZCBTdHlsZVByb3BlcnR5U2V0OjpjbGVh
clBhcmVudEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAoIW1faGFz
Q1NTT01XcmFwcGVyKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUX1VOVVNFRChlbGVtZW50
LCBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKS0+cGFyZW50RWxlbWVudCgp
ID09IGVsZW1lbnQpOworICAgIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMp
LT5jbGVhclBhcmVudEVsZW1lbnQoKTsKK30KKwordW5zaWduZWQgUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3Byb3BlcnR5U2V0
LT5wcm9wZXJ0eUNvdW50KCk7Cit9CisKK1N0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246Oml0ZW0odW5zaWduZWQgaSkgY29uc3QKK3sKKyAgICBpZiAoaSA+PSBtX3Byb3BlcnR5
U2V0LT5wcm9wZXJ0eUNvdW50KCkpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gZ2V0
UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KG1fcHJvcGVydHlTZXQtPnBy
b3BlcnR5QXQoaSkuaWQoKSkpOworfQorCitTdHJpbmcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+YXNU
ZXh0KCk7Cit9CisgICAgCit2b2lkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0
Q3NzVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworI2lmIEVO
QUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3Bl
IG11dGF0aW9uU2NvcGUodGhpcyk7CisjZW5kaWYKKyAgICBlYyA9IDA7CisgICAgLy8gRklYTUU6
IERldGVjdCBzeW50YXggZXJyb3JzIGFuZCBzZXQgZWMuCisgICAgbV9wcm9wZXJ0eVNldC0+cGFy
c2VEZWNsYXJhdGlvbih0ZXh0LCBjb250ZXh0U3R5bGVTaGVldCgpKTsKKworICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIG11dGF0
aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7ICAgIAorI2VuZGlmCit9CisKK1Bhc3NS
ZWZQdHI8Q1NTVmFsdWU+IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVy
dHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQgcHJvcGVy
dHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworfQorCitTdHJpbmcgUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQor
eworICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAg
IGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBt
X3Byb3BlcnR5U2V0LT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOworfQorCitTdHJpbmcg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVy
dHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5wcm9wZXJ0eUlzSW1wb3J0YW50
KHByb3BlcnR5SUQpID8gImltcG9ydGFudCIgOiAiIjsKK30KKworU3RyaW5nIFByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpCit7CisgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3Bl
cnR5TmFtZSk7CisgICAgaWYgKCFwcm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgaW50IHNob3J0aGFuZElEID0gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlTaG9ydGhh
bmQocHJvcGVydHlJRCk7CisgICAgaWYgKCFzaG9ydGhhbmRJRCkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVy
dHlJRD4oc2hvcnRoYW5kSUQpKTsKK30KKworYm9vbCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246OmlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sK
KyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBp
ZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9wcm9w
ZXJ0eVNldC0+aXNQcm9wZXJ0eUltcGxpY2l0KHByb3BlcnR5SUQpOworfQorCit2b2lkIFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAg
U3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CisjZW5kaWYK
KyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBp
ZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybjsKKyAgICBib29sIGltcG9ydGFudCA9IHBy
aW9yaXR5LmZpbmQoImltcG9ydGFudCIsIDAsIGZhbHNlKSAhPSBub3RGb3VuZDsKKyAgICBlYyA9
IDA7CisgICAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wZXJ0eVNldC0+c2V0UHJvcGVydHkocHJvcGVy
dHlJRCwgdmFsdWUsIGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hlZXQoKSk7CisgICAgaWYgKGNo
YW5nZWQpIHsKKyAgICAgICAgLy8gQ1NTIERPTSByZXF1aXJlcyByYWlzaW5nIFNZTlRBWF9FUlIg
b2YgcGFyc2luZyBmYWlsZWQsIGJ1dCB0aGlzIGlzIHRvbyBkYW5nZXJvdXMgZm9yIGNvbXBhdGli
aWxpdHksCisgICAgICAgIC8vIHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzI5Nj4uCisgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyNpZiBFTkFCTEUo
TVVUQVRJT05fT0JTRVJWRVJTKQorICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlv
blJlY29yZCgpOworI2VuZGlmCisgICAgfQorfQorCitTdHJpbmcgUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAg
ICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKKyNlbmRp
ZgorICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAg
IGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGVjID0gMDsK
KyAgICBTdHJpbmcgcmVzdWx0OworICAgIGJvb2wgY2hhbmdlcyA9IG1fcHJvcGVydHlTZXQtPnJl
bW92ZVByb3BlcnR5KHByb3BlcnR5SUQsICZyZXN1bHQpOworICAgIGlmIChjaGFuZ2VzKSB7Cisg
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJW
RVJTKQorICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOworI2Vu
ZGlmCisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+
IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVy
bmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3sgCisgICAgcmV0dXJuIG1fcHJvcGVydHlT
ZXQtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7IAorfQorCitTdHJpbmcgUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlEKQoreyAKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJv
cGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsgCit9CisKK3ZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uOjpzZXRQcm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eyAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIFN0eWxlQXR0cmlidXRlTXV0
YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOworI2VuZGlmCisgICAgZWMgPSAwOworICAg
IGJvb2wgY2hhbmdlZCA9IG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZh
bHVlLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KCkpOworICAgIGlmIChjaGFuZ2VkKSB7
CisgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JT
RVJWRVJTKQorICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOwor
I2VuZGlmCisgICAgfQorfQorCitDU1NTdHlsZVNoZWV0KiBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb246OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdAoreyAKKyAgICByZXR1cm4gY29udGV4
dFN0eWxlU2hlZXQoKTsgCit9CisKK1Bhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cm9wZXJ0eVNldC0+Y29weSgpOworfQorCitQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFBy
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6bWFrZU11dGFibGUoKQoreworICAgIHJldHVy
biBtX3Byb3BlcnR5U2V0OworfQorCitib29sIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bjo6Y3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cHJvcGVydHlNYXRjaGVzKHByb3BlcnR5KTsK
K30KKwordm9pZCBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHlsZVJlY2FsYygp
Cit7CisgICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjb250ZXh0U3R5bGVTaGVl
dCgpKSB7CisgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBzdHlsZVNoZWV0LT5maW5k
RG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50LT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChE
ZWZlclJlY2FsY1N0eWxlKTsKKyAgICB9Cit9CisgICAgCitDU1NTdHlsZVNoZWV0KiBSdWxlQ1NT
U3R5bGVEZWNsYXJhdGlvbjo6Y29udGV4dFN0eWxlU2hlZXQoKSBjb25zdAoreworICAgIHJldHVy
biBtX3BhcmVudFJ1bGUgPyBtX3BhcmVudFJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7Cit9
CisKK3ZvaWQgSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHlsZVJlY2FsYygp
Cit7CisgICAgaWYgKCFtX3BhcmVudEVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Bh
cmVudEVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAg
IG1fcGFyZW50RWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCk7CisgICAgU3R5bGVB
dHRyaWJ1dGVNdXRhdGlvblNjb3BlKHRoaXMpLmRpZEludmFsaWRhdGVTdHlsZUF0dHIoKTsKKyAg
ICByZXR1cm47Cit9CisKK0NTU1N0eWxlU2hlZXQqIElubGluZUNTU1N0eWxlRGVjbGFyYXRpb246
OmNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXJlbnRFbGVtZW50
ID8gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSA6IDA7Cit9CisK
K2NsYXNzIFNhbWVTaXplQXNTdHlsZVByb3BlcnR5U2V0IDogcHVibGljIFJlZkNvdW50ZWQ8U2Ft
ZVNpemVBc1N0eWxlUHJvcGVydHlTZXQ+IHsKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHksIDQ+IHBy
b3BlcnRpZXM7CisgICAgdW5zaWduZWQgYml0ZmllbGQ7Cit9OworQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKFN0eWxlUHJvcGVydHlTZXQpID09IHNpemVvZihTYW1lU2l6ZUFzU3R5bGVQcm9wZXJ0eVNl
dCksIHN0eWxlX3Byb3BlcnR5X3NldF9zaG91bGRfc3RheV9zbWFsbCk7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAxMDgzNDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAsMTE0ICsyMCwyMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uLmgiCiAKLSNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlMb25naGFuZC5oIgotI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NSdWxlLmgiCi0jaW5jbHVkZSAiQ1NT
U3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJD
U1NWYWx1ZUxpc3QuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJNdXRh
dGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5oIgogI2luY2x1ZGUgIk11dGF0aW9uUmVjb3JkLmgi
CisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgSGFz
aE1hcDxjb25zdCBTdHlsZVByb3BlcnR5U2V0KiwgT3duUHRyPFByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbj4gPiBQcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcDsKLXN0YXRpYyBQcm9wZXJ0
eVNldENTU09NV3JhcHBlck1hcCYgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKQotewotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoUHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAsIHByb3BlcnR5
U2V0Q1NTT01XcmFwcGVyTWFwSW5zdGFuY2UsICgpKTsKLSAgICByZXR1cm4gcHJvcGVydHlTZXRD
U1NPTVdyYXBwZXJNYXBJbnN0YW5jZTsKLX0KLQotY2xhc3MgUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxlRGVjbGFyYXRpb24gewotcHVibGljOgotICAgIFBy
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0eVNl
dCkgOiBtX3Byb3BlcnR5U2V0KHByb3BlcnR5U2V0KSB7IH0KLSAgICAKLSAgICB2aXJ0dWFsIFN0
eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmly
dHVhbCB2b2lkIGNsZWFyUGFyZW50UnVsZSgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXJlbnRFbGVtZW50KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQotICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBjb25z
dCB7IHJldHVybiAwOyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHJlZigpIE9WRVJS
SURFIHsgbV9wcm9wZXJ0eVNldC0+cmVmKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoKSBP
VkVSUklERSB7IG1fcHJvcGVydHlTZXQtPmRlcmVmKCk7IH0KLQotICAgIHZpcnR1YWwgQ1NTUnVs
ZSogcGFyZW50UnVsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH07Ci0gICAgdmlydHVh
bCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBp
dGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFBy
b3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGNv
bnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUs
IGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwg
RXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBj
b25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcm
LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCkgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5
SUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKENTU1By
b3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25D
b2RlJikgT1ZFUlJJREU7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0Y2hl
cyhjb25zdCBDU1NQcm9wZXJ0eSopIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ1NTU3R5
bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1ha2VNdXRhYmxlKCkgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoKSB7IH0gICAgCi0KLXBy
b3RlY3RlZDoKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBtX3Byb3BlcnR5U2V0OwotfTsKLQotY2xh
c3MgUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uCi17Ci1wdWJsaWM6Ci0gICAgUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24oU3R5bGVQ
cm9wZXJ0eVNldCogcHJvcGVydHlTZXQsIENTU1J1bGUqIHBhcmVudFJ1bGUpCi0gICAgICAgIDog
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKHByb3BlcnR5U2V0KQotICAgICAgICAsIG1f
cGFyZW50UnVsZShwYXJlbnRSdWxlKSAKLSAgICB7Ci0gICAgfQotCi1wcml2YXRlOiAgICAKLSAg
ICB2aXJ0dWFsIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFJ1
bGU7IH07Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50UnVsZSgpIHsgbV9wYXJlbnRSdWxl
ID0gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgdmly
dHVhbCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCgpIGNvbnN0OwotICAgIAotICAg
IENTU1J1bGUqIG1fcGFyZW50UnVsZTsKLX07Ci0KLWNsYXNzIElubGluZUNTU1N0eWxlRGVjbGFy
YXRpb24gOiBwdWJsaWMgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uCi17Ci1wdWJsaWM6
Ci0gICAgSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0
eVNldCwgU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCkKLSAgICAgICAgOiBQcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb24ocHJvcGVydHlTZXQpCi0gICAgICAgICwgbV9wYXJlbnRFbGVt
ZW50KHBhcmVudEVsZW1lbnQpIAotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVh
bCBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRF
bGVtZW50OyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50RWxlbWVudCgpIHsgbV9wYXJl
bnRFbGVtZW50ID0gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCk7
Ci0gICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCgpIGNvbnN0Owot
Ci0gICAgU3R5bGVkRWxlbWVudCogbV9wYXJlbnRFbGVtZW50OwotfTsKLQogbmFtZXNwYWNlIHsK
IAogY2xhc3MgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIHsKQEAgLTIxMiw4NzUgKzExOCwx
NSBAQCBib29sIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19zaG91CiAjZW5kaWYKIAog
fSAvLyBuYW1lc3BhY2UKLQotU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldCgpCi0g
ICAgOiBtX3N0cmljdFBhcnNpbmcoZmFsc2UpCi0gICAgLCBtX2hhc0NTU09NV3JhcHBlcihmYWxz
ZSkKLXsKLX0KLQotU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChjb25zdCBWZWN0
b3I8Q1NTUHJvcGVydHk+JiBwcm9wZXJ0aWVzKQotICAgIDogbV9wcm9wZXJ0aWVzKHByb3BlcnRp
ZXMpCi0gICAgLCBtX3N0cmljdFBhcnNpbmcodHJ1ZSkKLSAgICAsIG1faGFzQ1NTT01XcmFwcGVy
KGZhbHNlKQotewotICAgIG1fcHJvcGVydGllcy5zaHJpbmtUb0ZpdCgpOwotfQotCi1TdHlsZVBy
b3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KGNvbnN0IENTU1Byb3BlcnR5KiBjb25zdCAqIHBy
b3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzLCBib29sIHVzZVN0cmljdFBhcnNpbmcpCi0gICAg
OiBtX3N0cmljdFBhcnNpbmcodXNlU3RyaWN0UGFyc2luZykKLSAgICAsIG1faGFzQ1NTT01XcmFw
cGVyKGZhbHNlKQotewotICAgIG1fcHJvcGVydGllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51
bVByb3BlcnRpZXMpOwotICAgIEhhc2hNYXA8aW50LCBib29sPiBjYW5kaWRhdGVzOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IENT
U1Byb3BlcnR5ICpwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07Ci0gICAgICAgIEFTU0VSVChwcm9w
ZXJ0eSk7Ci0gICAgICAgIGJvb2wgaW1wb3J0YW50ID0gcHJvcGVydHktPmlzSW1wb3J0YW50KCk7
Ci0KLSAgICAgICAgSGFzaE1hcDxpbnQsIGJvb2w+OjppdGVyYXRvciBpdCA9IGNhbmRpZGF0ZXMu
ZmluZChwcm9wZXJ0eS0+aWQoKSk7Ci0gICAgICAgIGlmIChpdCAhPSBjYW5kaWRhdGVzLmVuZCgp
KSB7Ci0gICAgICAgICAgICBpZiAoIWltcG9ydGFudCAmJiBpdC0+c2Vjb25kKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHktPmlk
KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9wcm9wZXJ0aWVzLmFwcGVuZCgqcHJvcGVydHkp
OwotICAgICAgICBjYW5kaWRhdGVzLnNldChwcm9wZXJ0eS0+aWQoKSwgaW1wb3J0YW50KTsKLSAg
ICB9Ci19Ci0KLVN0eWxlUHJvcGVydHlTZXQ6On5TdHlsZVByb3BlcnR5U2V0KCkKLXsKLSAgICBB
U1NFUlQoIW1faGFzQ1NTT01XcmFwcGVyIHx8IHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCku
Y29udGFpbnModGhpcykpOwotICAgIGlmIChtX2hhc0NTU09NV3JhcHBlcikKLSAgICAgICAgcHJv
cGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5yZW1vdmUodGhpcyk7Ci19Ci0KLXZvaWQgU3R5bGVQ
cm9wZXJ0eVNldDo6Y29weVByb3BlcnRpZXNGcm9tKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQmIG90
aGVyKQotewotICAgIG1fcHJvcGVydGllcyA9IG90aGVyLm1fcHJvcGVydGllczsKLX0KLQotU3Ry
aW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNv
bnN0Ci17Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUo
cHJvcGVydHlJRCk7Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICByZXR1cm4gdmFsdWUtPmNzc1Rl
eHQoKTsKLQotICAgIC8vIFNob3J0aGFuZCBhbmQgNC12YWx1ZXMgcHJvcGVydGllcwotICAgIHN3
aXRjaCAocHJvcGVydHlJRCkgewotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyU3BhY2lu
ZzogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVy
dGljYWxTcGFjaW5nIH07Ci0gICAgICAgICAgICByZXR1cm4gYm9yZGVyU3BhY2luZ1ZhbHVlKHBy
b3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
UG9zaXRpb246IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Q/IFRoZSBj
b2RlIGluIGNzc3BhcnNlci5jcHAgaXMgY29uZnVzaW5nCi0gICAgICAgICAgICBjb25zdCBpbnQg
cHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRQb3NpdGlvblkgfTsKLSAgICAgICAgICAgIHJldHVybiBnZXRMYXllcmVk
U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRSZXBlYXQ6IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0
aWVzWzJdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYLCBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRSZXBlYXRZIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZh
bHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s5XSA9IHsgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBl
YXRZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5
QmFja2dyb3VuZEF0dGFjaG1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91
bmRDbGlwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3Bl
cnR5QmFja2dyb3VuZE9yaWdpbiB9OwotICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9y
dGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXVs0XSA9IHt7
IENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21X
aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJv
cGVydHlCb3JkZXJMZWZ0V2lkdGggfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFN0eWxlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJv
cmRlckJvdHRvbVN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZSB9LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeyBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJp
Z2h0Q29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yIH19OwotICAgICAgICAg
ICAgU3RyaW5nIHJlczsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FS
UkFZX0xFTkdUSChwcm9wZXJ0aWVzKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHZh
bHVlID0gZ2V0Q29tbW9uVmFsdWUocHJvcGVydGllc1tpXSk7Ci0gICAgICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXJlcy5pc051bGwo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSAiICI7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlcyArPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJUb3A6IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQ
cm9wZXJ0eUJvcmRlclRvcFdpZHRoLCBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29s
b3J9OwotICAgICAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodDogewotICAgICAg
ICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRX
aWR0aCwgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFN0eWxlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcn07Ci0gICAgICAg
ICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbTogewotICAgICAgICAgICAgY29uc3Qg
aW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGgsIENTU1By
b3BlcnR5Qm9yZGVyQm90dG9tU3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcn07Ci0gICAgICAgICAgICByZXR1
cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnQ6IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0
aWVzWzNdID0geyBDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgQ1NTUHJvcGVydHlCb3JkZXJM
ZWZ0U3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJv
cGVydHlCb3JkZXJMZWZ0Q29sb3J9OwotICAgICAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZh
bHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRs
aW5lOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTUHJvcGVy
dHlPdXRsaW5lV2lkdGgsIENTU1Byb3BlcnR5T3V0bGluZVN0eWxlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5T3V0bGluZUNvbG9yIH07Ci0gICAg
ICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbG9yOiB7Ci0gICAgICAgICAgICBjb25z
dCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciwgQ1NTUHJv
cGVydHlCb3JkZXJSaWdodENvbG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIENTU1Byb3BlcnR5Qm9yZGVyTGVm
dENvbG9yIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyhwcm9wZXJ0aWVzKTsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGg6IHsKLSAgICAgICAg
ICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRo
LCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgQ1NTUHJvcGVydHlC
b3JkZXJMZWZ0V2lkdGggfTsKLSAgICAgICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKHByb3BlcnRp
ZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTdHlsZTogewot
ICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU1Byb3BlcnR5Qm9yZGVy
VG9wU3R5bGUsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlLCBDU1NQ
cm9wZXJ0eUJvcmRlckxlZnRTdHlsZSB9OwotICAgICAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMo
cHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZs
ZXhGbG93OiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1tdID0geyBDU1NQcm9w
ZXJ0eVdlYmtpdEZsZXhEaXJlY3Rpb24sIENTU1Byb3BlcnR5V2Via2l0RmxleFdyYXAgfTsKLSAg
ICAgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udDoKLSAgICAgICAgICAgIHJldHVybiBmb250
VmFsdWUoKTsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbjogewotICAgICAgICAgICAg
Y29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU1Byb3BlcnR5TWFyZ2luVG9wLCBDU1NQcm9w
ZXJ0eU1hcmdpblJpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCBDU1NQcm9wZXJ0eU1hcmdpbkxlZnQgfTsKLSAgICAg
ICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvdzogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3Bl
cnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5T3ZlcmZsb3dYLCBDU1NQcm9wZXJ0eU92ZXJmbG93WSB9
OwotICAgICAgICAgICAgcmV0dXJuIGdldENvbW1vblZhbHVlKHByb3BlcnRpZXMpOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nOiB7Ci0gICAgICAgICAgICBjb25z
dCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTUHJvcGVydHlQYWRkaW5nVG9wLCBDU1NQcm9wZXJ0
eVBhZGRpbmdSaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sIENTU1Byb3BlcnR5UGFkZGluZ0xlZnQgfTsKLSAgICAg
ICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGU6IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBwcm9w
ZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGUsIENTU1Byb3BlcnR5TGlzdFN0
eWxlUG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJvcGVydHlMaXN0U3R5bGVJbWFnZSB9OwotICAgICAgICAgICAgcmV0dXJuIGdldFNob3J0aGFu
ZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUG9zaXRpb246IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNvcnJl
Y3Q/IFRoZSBjb2RlIGluIGNzc3BhcnNlci5jcHAgaXMgY29uZnVzaW5nCi0gICAgICAgICAgICBj
b25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25Y
LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblkgfTsKLSAgICAgICAgICAgIHJldHVybiBn
ZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQ6IHsKLSAgICAgICAgICAgIGNvbnN0IGlu
dCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRYLCBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tSZXBlYXRZIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNo
b3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1tdID0g
eyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQXR0YWNobWVudCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24sIENTU1Byb3Bl
cnR5V2Via2l0TWFza0NsaXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4gfTsKLSAgICAgICAgICAgIHJldHVybiBnZXRM
YXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpbjogewotICAgICAgICAgICAgY29uc3Qg
aW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybU9yaWdpblksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5aIH07Ci0gICAgICAgICAgICByZXR1
cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBw
cm9wZXJ0aWVzWzRdID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rp
b24sIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5IH07Ci0gICAgICAgICAgICByZXR1
cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246IHsKLSAgICAgICAgICAgIGNvbnN0
IGludCBwcm9wZXJ0aWVzWzddID0geyBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWUsIENT
U1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlv
biwgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EZWxheSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNv
dW50LCBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRpcmVjdGlvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkZpbGxN
b2RlIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3Bl
cnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwOiB7
Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTUHJvcGVydHlXZWJr
aXRXcmFwRmxvdywgQ1NTUHJvcGVydHlXZWJraXRXcmFwTWFyZ2luLAotICAgICAgICAgICAgICAg
IENTU1Byb3BlcnR5V2Via2l0V3JhcFBhZGRpbmcgfTsKLSAgICAgICAgICAgIHJldHVybiBnZXRT
aG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotI2lmIEVOQUJMRShTVkcpCi0g
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXI6IHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5TWFya2VyU3RhcnQp
OwotICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS0+
Y3NzVGV4dCgpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZygp
OwotfQotCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Ym9yZGVyU3BhY2luZ1ZhbHVlKGNvbnN0
IGludCBwcm9wZXJ0aWVzWzJdKSBjb25zdAotewotICAgIFJlZlB0cjxDU1NWYWx1ZT4gaG9yaXpv
bnRhbFZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzBdKTsKLSAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZlcnRpY2FsVmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRp
ZXNbMV0pOwotCi0gICAgaWYgKCFob3Jpem9udGFsVmFsdWUpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICBBU1NFUlQodmVydGljYWxWYWx1ZSk7IC8vIEJ5IDxodHRwOi8vd3d3LnczLm9y
Zy9UUi9DU1MyMS90YWJsZXMuaHRtbCNzZXBhcmF0ZWQtYm9yZGVycz4uCi0KLSAgICBTdHJpbmcg
aG9yaXpvbnRhbFZhbHVlQ1NTVGV4dCA9IGhvcml6b250YWxWYWx1ZS0+Y3NzVGV4dCgpOwotICAg
IFN0cmluZyB2ZXJ0aWNhbFZhbHVlQ1NTVGV4dCA9IHZlcnRpY2FsVmFsdWUtPmNzc1RleHQoKTsK
LSAgICBpZiAoaG9yaXpvbnRhbFZhbHVlQ1NTVGV4dCA9PSB2ZXJ0aWNhbFZhbHVlQ1NTVGV4dCkK
LSAgICAgICAgcmV0dXJuIGhvcml6b250YWxWYWx1ZUNTU1RleHQ7Ci0gICAgcmV0dXJuIGhvcml6
b250YWxWYWx1ZUNTU1RleHQgKyAnICcgKyB2ZXJ0aWNhbFZhbHVlQ1NTVGV4dDsKLX0KLQotYm9v
bCBTdHlsZVByb3BlcnR5U2V0OjphcHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlmRXhwbGljaXQoaW50
IHByb3BlcnR5SWQsIFN0cmluZ0J1aWxkZXImIHJlc3VsdCkgY29uc3QKLXsKLSAgICBjb25zdCBD
U1NQcm9wZXJ0eSogcHJvcGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHlJZCk7Ci0g
ICAgaWYgKCFwcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBbGwgbG9uZ2hhbmRz
IG11c3QgaGF2ZSBhdCBsZWFzdCBpbXBsaWNpdCB2YWx1ZXMgaWYgImZvbnQiIGlzIHNwZWNpZmll
ZC4KLSAgICBpZiAocHJvcGVydHktPmlzSW1wbGljaXQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBjaGFyIHByZWZpeCA9ICdcMCc7Ci0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToKLSAgICAgICAgYnJlYWs7IC8vIE5vIHByZWZp
eC4KLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKLSAgICBjYXNlIENTU1Byb3BlcnR5
Rm9udFZhcmlhbnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6Ci0gICAgICAgIHBy
ZWZpeCA9ICcgJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWln
aHQ6Ci0gICAgICAgIHByZWZpeCA9ICcvJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgaWYgKHByZWZpeCAm
JiAhcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChwcmVmaXgpOwotICAg
IHJlc3VsdC5hcHBlbmQocHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKSk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmZvbnRWYWx1ZSgpIGNvbnN0
Ci17Ci0gICAgY29uc3QgQ1NTUHJvcGVydHkqIGZvbnRTaXplUHJvcGVydHkgPSBmaW5kUHJvcGVy
dHlXaXRoSWQoQ1NTUHJvcGVydHlGb250U2l6ZSk7Ci0gICAgaWYgKCFmb250U2l6ZVByb3BlcnR5
IHx8IGZvbnRTaXplUHJvcGVydHktPmlzSW1wbGljaXQoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBib29sIHN1Y2Nlc3Mg
PSB0cnVlOwotICAgIHN1Y2Nlc3MgJj0gYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0
KENTU1Byb3BlcnR5Rm9udFN0eWxlLCByZXN1bHQpOwotICAgIHN1Y2Nlc3MgJj0gYXBwZW5kRm9u
dExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIHJlc3VsdCk7
Ci0gICAgc3VjY2VzcyAmPSBhcHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlmRXhwbGljaXQoQ1NTUHJv
cGVydHlGb250V2VpZ2h0LCByZXN1bHQpOwotICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwotICAgIHJlc3VsdC5hcHBlbmQoZm9udFNpemVQcm9w
ZXJ0eS0+dmFsdWUoKS0+Y3NzVGV4dCgpKTsKLSAgICBzdWNjZXNzICY9IGFwcGVuZEZvbnRMb25n
aGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHJlc3VsdCk7Ci0gICAg
c3VjY2VzcyAmPSBhcHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlmRXhwbGljaXQoQ1NTUHJvcGVydHlG
b250RmFtaWx5LCByZXN1bHQpOwotICAgIGlmICghc3VjY2VzcykgewotICAgICAgICAvLyBBbiBp
bnZhbGlkICJmb250IiB2YWx1ZSBoYXMgYmVlbiBidWlsdCAoc2hvdWxkIG5ldmVyIGhhcHBlbiwg
YXMgYXQgbGVhc3QgaW1wbGljaXQgdmFsdWVzCi0gICAgICAgIC8vIGZvciBtYW5kYXRvcnkgbG9u
Z2hhbmRzIGFyZSBhbHdheXMgZm91bmQgaW4gdGhlIHN0eWxlKSwgcmVwb3J0IGVtcHR5IHZhbHVl
IGluc3RlYWQuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotfQot
Ci1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0NFZhbHVlcyhjb25zdCBpbnQqIHByb3BlcnRp
ZXMpIGNvbnN0Ci17Ci0gICAgLy8gQXNzdW1lIHRoZSBwcm9wZXJ0aWVzIGFyZSBpbiB0aGUgdXN1
YWwgb3JkZXIgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LgotICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dG9wVmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbMF0pOwotICAgIFJlZlB0
cjxDU1NWYWx1ZT4gcmlnaHRWYWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1sx
XSk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBib3R0b21WYWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFs
dWUocHJvcGVydGllc1syXSk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBsZWZ0VmFsdWUgPSBnZXRQ
cm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbM10pOwotCi0gICAgLy8gQWxsIDQgcHJvcGVydGll
cyBtdXN0IGJlIHNwZWNpZmllZC4KLSAgICBpZiAoIXRvcFZhbHVlIHx8ICFyaWdodFZhbHVlIHx8
ICFib3R0b21WYWx1ZSB8fCAhbGVmdFZhbHVlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICBib29sIHNob3dMZWZ0ID0gcmlnaHRWYWx1ZS0+Y3NzVGV4dCgpICE9IGxlZnRWYWx1ZS0+
Y3NzVGV4dCgpOwotICAgIGJvb2wgc2hvd0JvdHRvbSA9ICh0b3BWYWx1ZS0+Y3NzVGV4dCgpICE9
IGJvdHRvbVZhbHVlLT5jc3NUZXh0KCkpIHx8IHNob3dMZWZ0OwotICAgIGJvb2wgc2hvd1JpZ2h0
ID0gKHRvcFZhbHVlLT5jc3NUZXh0KCkgIT0gcmlnaHRWYWx1ZS0+Y3NzVGV4dCgpKSB8fCBzaG93
Qm90dG9tOwotCi0gICAgU3RyaW5nIHJlcyA9IHRvcFZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgaWYg
KHNob3dSaWdodCkKLSAgICAgICAgcmVzICs9ICIgIiArIHJpZ2h0VmFsdWUtPmNzc1RleHQoKTsK
LSAgICBpZiAoc2hvd0JvdHRvbSkKLSAgICAgICAgcmVzICs9ICIgIiArIGJvdHRvbVZhbHVlLT5j
c3NUZXh0KCk7Ci0gICAgaWYgKHNob3dMZWZ0KQotICAgICAgICByZXMgKz0gIiAiICsgbGVmdFZh
bHVlLT5jc3NUZXh0KCk7Ci0KLSAgICByZXR1cm4gcmVzOwotfQotCi1TdHJpbmcgU3R5bGVQcm9w
ZXJ0eVNldDo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywg
c2l6ZV90IHNpemUpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJlczsKLQotICAgIC8vIEJlZ2luIGJ5
IGNvbGxlY3RpbmcgdGhlIHByb3BlcnRpZXMgaW50byBhbiBhcnJheS4KLSAgICBWZWN0b3I8IFJl
ZlB0cjxDU1NWYWx1ZT4gPiB2YWx1ZXMoc2l6ZSk7Ci0gICAgc2l6ZV90IG51bUxheWVycyA9IDA7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICB2YWx1
ZXNbaV0gPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbaV0pOwotICAgICAgICBpZiAo
dmFsdWVzW2ldKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWVzW2ldLT5pc1ZhbHVlTGlzdCgpKSB7
Ci0gICAgICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxD
U1NWYWx1ZUxpc3QqPih2YWx1ZXNbaV0uZ2V0KCkpOwotICAgICAgICAgICAgICAgIG51bUxheWVy
cyA9IG1heCh2YWx1ZUxpc3QtPmxlbmd0aCgpLCBudW1MYXllcnMpOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgbnVtTGF5ZXJzID0gbWF4PHNpemVfdD4oMVUsIG51bUxheWVy
cyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOb3cgc3RpdGNoIHRoZSBwcm9wZXJ0aWVz
IHRvZ2V0aGVyLiAgSW1wbGljaXQgaW5pdGlhbCB2YWx1ZXMgYXJlIGZsYWdnZWQgYXMgc3VjaCBh
bmQKLSAgICAvLyBjYW4gc2FmZWx5IGJlIG9taXR0ZWQuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1MYXllcnM7IGkrKykgewotICAgICAgICBTdHJpbmcgbGF5ZXJSZXM7Ci0gICAgICAg
IGJvb2wgdXNlUmVwZWF0WFNob3J0aGFuZCA9IGZhbHNlOwotICAgICAgICBib29sIHVzZVJlcGVh
dFlTaG9ydGhhbmQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCB1c2VTaW5nbGVXb3JkU2hvcnRoYW5k
ID0gZmFsc2U7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7Ci0g
ICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwotICAgICAgICAgICAgaWYgKHZhbHVl
c1tqXSkgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNbal0tPmlzVmFsdWVMaXN0KCkpCi0g
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFs
dWVzW2pdLmdldCgpKS0+aXRlbShpKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbal07Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
Q29sb3Igb25seSBiZWxvbmdzIGluIHRoZSBsYXN0IGxheWVyLgotICAgICAgICAgICAgICAgICAg
ICBpZiAocHJvcGVydGllc1tqXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gbnVtTGF5ZXJzIC0gMSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaSAhPSAwKSAvLyBPdGhlciBzaW5nbGV0b25zIG9ubHkgYmVsb25nIGluIHRoZSBmaXJzdCBs
YXllci4KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gMDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVwb3J0IGJh
Y2tncm91bmQtcmVwZWF0IGFzIGl0IHdhcyB3cml0dGVuIGluIHRoZSBDU1MuIElmIHRoZSBwcm9w
ZXJ0eSBpcyBpbXBsaWNpdCwKLSAgICAgICAgICAgIC8vIHRoZW4gaXQgd2FzIHdyaXR0ZW4gd2l0
aCBvbmx5IG9uZSB2YWx1ZS4gSGVyZSB3ZSBmaWd1cmUgb3V0IHdoaWNoIHZhbHVlIHRoYXQgd2Fz
IHNvIHdlIGNhbgotICAgICAgICAgICAgLy8gcmVwb3J0IGJhY2sgY29ycmVjdGx5LgotICAgICAg
ICAgICAgaWYgKHByb3BlcnRpZXNbal0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCAm
JiBpc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydGllc1tqXSkpIHsKLQotICAgICAgICAgICAgICAg
IC8vIEJVRyA0OTA1NTogbWFrZSBzdXJlIHRoZSB2YWx1ZSB3YXMgbm90IHJlc2V0IGluIHRoZSBs
YXllciBjaGVjayBqdXN0IGFib3ZlLgotICAgICAgICAgICAgICAgIGlmIChqIDwgc2l6ZSAtIDEg
JiYgcHJvcGVydGllc1tqICsgMV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WSAmJiB2
YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHlWYWx1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBuZXh0VmFsdWUgPSB2YWx1ZXNbaiAr
IDFdOwotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFZhbHVlLT5pc1ZhbHVlTGlzdCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgeVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0
Kj4obmV4dFZhbHVlLmdldCgpKS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgeVZhbHVlID0gbmV4dFZh
bHVlOwotCi0gICAgICAgICAgICAgICAgICAgIGludCB4SWQgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlLmdldCgpKS0+Z2V0SWRlbnQoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IHlJZCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oeVZhbHVlLmdldCgp
KS0+Z2V0SWRlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHhJZCAhPSB5SWQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh4SWQgPT0gQ1NTVmFsdWVSZXBlYXQgJiYgeUlkID09
IENTU1ZhbHVlTm9SZXBlYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VSZXBl
YXRYU2hvcnRoYW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2o7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHhJZCA9PSBDU1NWYWx1ZU5vUmVwZWF0
ICYmIHlJZCA9PSBDU1NWYWx1ZVJlcGVhdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVzZVJlcGVhdFlTaG9ydGhhbmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdXNlU2luZ2xlV29yZFNob3J0aGFu
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK2o7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICh2YWx1ZSAmJiAhdmFsdWUtPmlzSW1wbGljaXRJbml0aWFsVmFsdWUoKSkgewotICAgICAgICAg
ICAgICAgIGlmICghbGF5ZXJSZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIGxheWVy
UmVzICs9ICIgIjsKLSAgICAgICAgICAgICAgICBpZiAodXNlUmVwZWF0WFNob3J0aGFuZCkgewot
ICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRYU2hvcnRoYW5kID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIGxheWVyUmVzICs9IGdldFZhbHVlTmFtZShDU1NWYWx1ZVJlcGVhdFgpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlUmVwZWF0WVNob3J0aGFuZCkgewotICAgICAg
ICAgICAgICAgICAgICB1c2VSZXBlYXRZU2hvcnRoYW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIGxheWVyUmVzICs9IGdldFZhbHVlTmFtZShDU1NWYWx1ZVJlcGVhdFkpOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAodXNlU2luZ2xlV29yZFNob3J0aGFuZCkgewotICAgICAgICAg
ICAgICAgICAgICB1c2VTaW5nbGVXb3JkU2hvcnRoYW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIGxheWVyUmVzICs9IHZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IHZhbHVlLT5jc3NUZXh0KCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWxheWVyUmVzLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICBpZiAoIXJlcy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXMg
Kz0gIiwgIjsKLSAgICAgICAgICAgIHJlcyArPSBsYXllclJlczsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiByZXM7Ci19Ci0KLVN0cmluZyBTdHlsZVByb3BlcnR5U2V0OjpnZXRTaG9y
dGhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHNpemVfdCBzaXplKSBjb25zdAotewot
ICAgIFN0cmluZyByZXM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
LSAgICAgICAgaWYgKCFpc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydGllc1tpXSkpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3Bl
cnRpZXNbaV0pOwotICAgICAgICAgICAgLy8gRklYTUU6IHByb3ZpZGUgZGVmYXVsdCB2YWx1ZSBp
ZiAhdmFsdWUKLSAgICAgICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgICAgIGlmICgh
cmVzLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICByZXMgKz0gIiAiOwotICAgICAgICAg
ICAgICAgIHJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIHJldHVybiByZXM7Ci19Ci0KLS8vIG9ubHkgcmV0dXJucyBhIG5vbi1udWxs
IHZhbHVlIGlmIGFsbCBwcm9wZXJ0aWVzIGhhdmUgdGhlIHNhbWUsIG5vbi1udWxsIHZhbHVlCi1T
dHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0Q29tbW9uVmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0
aWVzLCBzaXplX3Qgc2l6ZSkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFs
dWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbaV0pOwotICAgICAgICBpZiAoIXZh
bHVlKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICBTdHJpbmcgdGV4dCA9
IHZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgICAgIGlmICh0ZXh0LmlzTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICBpZiAocmVzLmlzTnVsbCgpKQotICAgICAgICAg
ICAgcmVzID0gdGV4dDsKLSAgICAgICAgZWxzZSBpZiAocmVzICE9IHRleHQpCi0gICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiByZXM7Ci19Ci0KLVBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IFN0eWxlUHJvcGVydHlTZXQ6OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHBy
b3BlcnR5SUQpIGNvbnN0Ci17Ci0gICAgY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5ID0gZmlu
ZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOwotICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3Bl
cnR5LT52YWx1ZSgpIDogMDsKLX0KLQotYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVTaG9y
dGhhbmRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCkKLXsKLSAgICBDU1NQcm9wZXJ0eUxvbmdoYW5k
IGxvbmdoYW5kID0gbG9uZ2hhbmRGb3JQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKLSAgICBpZiAoIWxv
bmdoYW5kLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHJlbW92
ZVByb3BlcnRpZXNJblNldChsb25naGFuZC5wcm9wZXJ0aWVzKCksIGxvbmdoYW5kLmxlbmd0aCgp
KTsKLX0KLQotYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVy
dHlJRCwgU3RyaW5nKiByZXR1cm5UZXh0KQotewotICAgIGlmIChyZW1vdmVTaG9ydGhhbmRQcm9w
ZXJ0eShwcm9wZXJ0eUlEKSkgewotICAgICAgICAvLyBGSVhNRTogUmV0dXJuIGFuIGVxdWl2YWxl
bnQgc2hvcnRoYW5kIHdoZW4gcG9zc2libGUuCi0gICAgICAgIGlmIChyZXR1cm5UZXh0KQotICAg
ICAgICAgICAgKnJldHVyblRleHQgPSAiIjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgQ1NTUHJvcGVydHkqIGZvdW5kUHJvcGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQocHJv
cGVydHlJRCk7Ci0gICAgaWYgKCFmb3VuZFByb3BlcnR5KSB7Ci0gICAgICAgIGlmIChyZXR1cm5U
ZXh0KQotICAgICAgICAgICAgKnJldHVyblRleHQgPSAiIjsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChyZXR1cm5UZXh0KQotICAgICAgICAqcmV0dXJuVGV4dCA9IGZv
dW5kUHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKTsKLQotICAgIC8vIEEgbW9yZSBlZmZpY2ll
bnQgcmVtb3ZhbCBzdHJhdGVneSB3b3VsZCBpbnZvbHZlIG1hcmtpbmcgZW50cmllcyBhcyBlbXB0
eQotICAgIC8vIGFuZCBzd2VlcGluZyB0aGVtIHdoZW4gdGhlIHZlY3RvciBncm93cyB0b28gYmln
LgotICAgIG1fcHJvcGVydGllcy5yZW1vdmUoZm91bmRQcm9wZXJ0eSAtIG1fcHJvcGVydGllcy5k
YXRhKCkpOwogICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFN0eWxlUHJvcGVydHlT
ZXQ6OnByb3BlcnR5SXNJbXBvcnRhbnQoaW50IHByb3BlcnR5SUQpIGNvbnN0Ci17Ci0gICAgY29u
c3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SUQp
OwotICAgIGlmIChwcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5LT5pc0ltcG9ydGFu
dCgpOwotCi0gICAgQ1NTUHJvcGVydHlMb25naGFuZCBsb25naGFuZHMgPSBsb25naGFuZEZvclBy
b3BlcnR5KHByb3BlcnR5SUQpOwotICAgIGlmICghbG9uZ2hhbmRzLmxlbmd0aCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9uZ2hhbmRz
Lmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFwcm9wZXJ0eUlzSW1wb3J0YW50KGxvbmdo
YW5kcy5wcm9wZXJ0aWVzKClbaV0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFN0eWxlUHJvcGVydHlTZXQ6OmdldFByb3BlcnR5
U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIGNvbnN0IENTU1Byb3BlcnR5
KiBwcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsKLSAgICByZXR1cm4g
cHJvcGVydHkgPyBwcm9wZXJ0eS0+c2hvcnRoYW5kSUQoKSA6IDA7Ci19Ci0KLWJvb2wgU3R5bGVQ
cm9wZXJ0eVNldDo6aXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdAotewot
ICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9w
ZXJ0eUlEKTsKLSAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0eS0+aXNJbXBsaWNpdCgpIDog
ZmFsc2U7Ci19Ci0KLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBDU1NTdHlsZVNoZWV0
KiBjb250ZXh0U3R5bGVTaGVldCkKLXsKLSAgICAvLyBTZXR0aW5nIHRoZSB2YWx1ZSB0byBhbiBl
bXB0eSBzdHJpbmcganVzdCByZW1vdmVzIHRoZSBwcm9wZXJ0eSBpbiBib3RoIElFIGFuZCBHZWNr
by4KLSAgICAvLyBTZXR0aW5nIGl0IHRvIG51bGwgc2VlbXMgdG8gcHJvZHVjZSBsZXNzIGNvbnNp
c3RlbnQgcmVzdWx0cywgYnV0IHdlIHRyZWF0IGl0IGp1c3QgdGhlIHNhbWUuCi0gICAgaWYgKHZh
bHVlLmlzRW1wdHkoKSkgewotICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gV2hlbiByZXBsYWNpbmcgYW4gZXhp
c3RpbmcgcHJvcGVydHkgdmFsdWUsIHRoaXMgbW92ZXMgdGhlIHByb3BlcnR5IHRvIHRoZSBlbmQg
b2YgdGhlIGxpc3QuCi0gICAgLy8gRmlyZWZveCBwcmVzZXJ2ZXMgdGhlIHBvc2l0aW9uLCBhbmQg
TVNJRSBtb3ZlcyB0aGUgcHJvcGVydHkgdG8gdGhlIGJlZ2lubmluZy4KLSAgICByZXR1cm4gQ1NT
UGFyc2VyOjpwYXJzZVZhbHVlKHRoaXMsIHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHVz
ZVN0cmljdFBhcnNpbmcoKSwgY29udGV4dFN0eWxlU2hlZXQpOwotfQotCi12b2lkIFN0eWxlUHJv
cGVydHlTZXQ6OnNldFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSwgQ1NTUHJv
cGVydHkqIHNsb3QpCi17Ci0gICAgaWYgKCFyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShwcm9wZXJ0
eS5pZCgpKSkgewotICAgICAgICBDU1NQcm9wZXJ0eSogdG9SZXBsYWNlID0gc2xvdCA/IHNsb3Qg
OiBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHkuaWQoKSk7Ci0gICAgICAgIGlmICh0b1JlcGxh
Y2UpIHsKLSAgICAgICAgICAgICp0b1JlcGxhY2UgPSBwcm9wZXJ0eTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKHByb3BlcnR5
KTsKLX0KLQotYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCwgaW50IGlkZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0
U3R5bGVTaGVldCkKLXsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlOyAgICAK
LSAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dFN0eWxlU2hlZXQgPyBjb250ZXh0
U3R5bGVTaGVldC0+ZmluZERvY3VtZW50KCkgOiAwKQotICAgICAgICB2YWx1ZSA9IGRvY3VtZW50
LT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpOwotICAg
IGVsc2UKLSAgICAgICAgdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmll
cihpZGVudGlmaWVyKTsKLQotICAgIHNldFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3BlcnR5SUQs
IHZhbHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGRvdWJsZSBu
dW1iZXIsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRhbnQs
IENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQotewotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gdmFsdWU7ICAgIAotICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBjb250
ZXh0U3R5bGVTaGVldCA/IGNvbnRleHRTdHlsZVNoZWV0LT5maW5kRG9jdW1lbnQoKSA6IDApCi0g
ICAgICAgIHZhbHVlID0gZG9jdW1lbnQtPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZShudW1i
ZXIsIHVuaXQpOwotICAgIGVsc2UKLSAgICAgICAgdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKG51bWJlciwgdW5pdCk7Ci0gICAgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVy
dHlJRCwgdmFsdWUsIGltcG9ydGFudCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFN0
eWxlUHJvcGVydHlTZXQ6OnBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xh
cmF0aW9uLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKLXsKLSAgICBtX3Byb3Bl
cnRpZXMuY2xlYXIoKTsKLSAgICBDU1NQYXJzZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7
Ci0gICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRpb24odGhpcywgc3R5bGVEZWNsYXJhdGlvbiwgMCwg
Y29udGV4dFN0eWxlU2hlZXQpOwotfQotCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmFkZFBhcnNl
ZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0KiBwcm9wZXJ0aWVzLCBpbnQgbnVt
UHJvcGVydGllcykKLXsKLSAgICBtX3Byb3BlcnRpZXMucmVzZXJ2ZUNhcGFjaXR5KG51bVByb3Bl
cnRpZXMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKQotICAg
ICAgICBhZGRQYXJzZWRQcm9wZXJ0eSgqcHJvcGVydGllc1tpXSk7Ci19Ci0KLXZvaWQgU3R5bGVQ
cm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5
KQotewotICAgIC8vIE9ubHkgYWRkIHByb3BlcnRpZXMgdGhhdCBoYXZlIG5vICFpbXBvcnRhbnQg
Y291bnRlcnBhcnQgcHJlc2VudAotICAgIGlmICghcHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0
eS5pZCgpKSB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpKSB7Ci0gICAgICAgIHJlbW92ZVByb3Bl
cnR5KHByb3BlcnR5LmlkKCkpOwotICAgICAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKHByb3BlcnR5
KTsKLSAgICB9Ci19Ci0KLVN0cmluZyBTdHlsZVByb3BlcnR5U2V0Ojphc1RleHQoKSBjb25zdAot
ewotICAgIFN0cmluZyByZXN1bHQgPSAiIjsKLQotICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwb3Np
dGlvblhQcm9wID0gMDsKLSAgICBjb25zdCBDU1NQcm9wZXJ0eSogcG9zaXRpb25ZUHJvcCA9IDA7
Ci0gICAgY29uc3QgQ1NTUHJvcGVydHkqIHJlcGVhdFhQcm9wID0gMDsKLSAgICBjb25zdCBDU1NQ
cm9wZXJ0eSogcmVwZWF0WVByb3AgPSAwOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1fcHJvcGVy
dGllcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHNpemU7ICsrbikgewot
ICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcCA9IG1fcHJvcGVydGllc1tuXTsKLSAgICAg
ICAgaWYgKHByb3AuaWQoKSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgpCi0gICAg
ICAgICAgICBwb3NpdGlvblhQcm9wID0gJnByb3A7Ci0gICAgICAgIGVsc2UgaWYgKHByb3AuaWQo
KSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblkpCi0gICAgICAgICAgICBwb3NpdGlv
bllQcm9wID0gJnByb3A7Ci0gICAgICAgIGVsc2UgaWYgKHByb3AuaWQoKSA9PSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRSZXBlYXRYKQotICAgICAgICAgICAgcmVwZWF0WFByb3AgPSAmcHJvcDsKLSAg
ICAgICAgZWxzZSBpZiAocHJvcC5pZCgpID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFkp
Ci0gICAgICAgICAgICByZXBlYXRZUHJvcCA9ICZwcm9wOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByZXN1bHQgKz0gcHJvcC5jc3NUZXh0KCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRo
aXMgaXMgYSBub3Qtc28tbmljZSB3YXkgdG8gdHVybiB4L3kgcG9zaXRpb25zIGludG8gc2luZ2xl
IGJhY2tncm91bmQtcG9zaXRpb24gaW4gb3V0cHV0LgotICAgIC8vIEl0IGlzIHJlcXVpcmVkIGJl
Y2F1c2UgYmFja2dyb3VuZC1wb3NpdGlvbi14L3kgYXJlIG5vbi1zdGFuZGFyZCBwcm9wZXJ0aWVz
IGFuZCBXZWJLaXQgZ2VuZXJhdGVkIG91dHB1dAotICAgIC8vIHdvdWxkIG5vdCB3b3JrIGluIEZp
cmVmb3ggKDxyZGFyOi8vcHJvYmxlbS81MTQzMTgzPikKLSAgICAvLyBJdCB3b3VsZCBiZSBhIGJl
dHRlciBzb2x1dGlvbiBpZiBiYWNrZ3JvdW5kLXBvc2l0aW9uIHdhcyBDU1NfUEFJUi4KLSAgICBp
ZiAocG9zaXRpb25YUHJvcCAmJiBwb3NpdGlvbllQcm9wICYmIHBvc2l0aW9uWFByb3AtPmlzSW1w
b3J0YW50KCkgPT0gcG9zaXRpb25ZUHJvcC0+aXNJbXBvcnRhbnQoKSkgewotICAgICAgICBTdHJp
bmcgcG9zaXRpb25WYWx1ZTsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENT
U1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRp
b25ZIH07Ci0gICAgICAgIGlmIChwb3NpdGlvblhQcm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgp
IHx8IHBvc2l0aW9uWVByb3AtPnZhbHVlKCktPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICBw
b3NpdGlvblZhbHVlID0gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBwb3NpdGlvblZhbHVlID0gcG9zaXRpb25YUHJvcC0+dmFs
dWUoKS0+Y3NzVGV4dCgpICsgIiAiICsgcG9zaXRpb25ZUHJvcC0+dmFsdWUoKS0+Y3NzVGV4dCgp
OwotICAgICAgICByZXN1bHQgKz0gImJhY2tncm91bmQtcG9zaXRpb246ICIgKyBwb3NpdGlvblZh
bHVlICsgKHBvc2l0aW9uWFByb3AtPmlzSW1wb3J0YW50KCkgPyAiICFpbXBvcnRhbnQiIDogIiIp
ICsgIjsgIjsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAocG9zaXRpb25YUHJvcCkKLSAgICAg
ICAgICAgIHJlc3VsdCArPSBwb3NpdGlvblhQcm9wLT5jc3NUZXh0KCk7Ci0gICAgICAgIGlmIChw
b3NpdGlvbllQcm9wKQotICAgICAgICAgICAgcmVzdWx0ICs9IHBvc2l0aW9uWVByb3AtPmNzc1Rl
eHQoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkbyB0aGUgc2FtZSBmb3Ig
YmFja2dyb3VuZC1yZXBlYXQuCi0gICAgaWYgKHJlcGVhdFhQcm9wICYmIHJlcGVhdFlQcm9wICYm
IHJlcGVhdFhQcm9wLT5pc0ltcG9ydGFudCgpID09IHJlcGVhdFlQcm9wLT5pc0ltcG9ydGFudCgp
KSB7Ci0gICAgICAgIFN0cmluZyByZXBlYXRWYWx1ZTsKLSAgICAgICAgY29uc3QgaW50IHJlcGVh
dFByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFgsIENTU1Byb3Bl
cnR5QmFja2dyb3VuZFJlcGVhdFkgfTsKLSAgICAgICAgaWYgKHJlcGVhdFhQcm9wLT52YWx1ZSgp
LT5pc1ZhbHVlTGlzdCgpIHx8IHJlcGVhdFlQcm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKQot
ICAgICAgICAgICAgcmVwZWF0VmFsdWUgPSBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocmVwZWF0
UHJvcGVydGllcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlcGVhdFZhbHVlID0gcmVw
ZWF0WFByb3AtPnZhbHVlKCktPmNzc1RleHQoKSArICIgIiArIHJlcGVhdFlQcm9wLT52YWx1ZSgp
LT5jc3NUZXh0KCk7Ci0gICAgICAgIHJlc3VsdCArPSAiYmFja2dyb3VuZC1yZXBlYXQ6ICIgKyBy
ZXBlYXRWYWx1ZSArIChyZXBlYXRYUHJvcC0+aXNJbXBvcnRhbnQoKSA/ICIgIWltcG9ydGFudCIg
OiAiIikgKyAiOyAiOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyZXBlYXRYUHJvcCkKLSAg
ICAgICAgICAgIHJlc3VsdCArPSByZXBlYXRYUHJvcC0+Y3NzVGV4dCgpOwotICAgICAgICBpZiAo
cmVwZWF0WVByb3ApCi0gICAgICAgICAgICByZXN1bHQgKz0gcmVwZWF0WVByb3AtPmNzc1RleHQo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFN0eWxlUHJvcGVydHlT
ZXQ6Om1lcmdlKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIG90aGVyLCBib29sIGFyZ092ZXJyaWRl
c09uQ29uZmxpY3QpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG90aGVyLT5tX3Byb3BlcnRpZXMu
c2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pIHsKLSAgICAg
ICAgY29uc3QgQ1NTUHJvcGVydHkmIHRvTWVyZ2UgPSBvdGhlci0+bV9wcm9wZXJ0aWVzW25dOwot
ICAgICAgICBDU1NQcm9wZXJ0eSogb2xkID0gZmluZFByb3BlcnR5V2l0aElkKHRvTWVyZ2UuaWQo
KSk7Ci0gICAgICAgIGlmIChvbGQpIHsKLSAgICAgICAgICAgIGlmICghYXJnT3ZlcnJpZGVzT25D
b25mbGljdCAmJiBvbGQtPnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBzZXRQcm9wZXJ0eSh0b01lcmdlLCBvbGQpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG1fcHJvcGVydGllcy5hcHBlbmQodG9NZXJnZSk7Ci0gICAgfQotfQotCi12b2lkIFN0
eWxlUHJvcGVydHlTZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+
JiB1cmxzLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKLXsKLSAgICBzaXplX3Qg
c2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpCi0gICAgICAgIG1fcHJvcGVydGllc1tpXS52YWx1ZSgpLT5hZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyh1cmxzLCBjb250ZXh0U3R5bGVTaGVldCk7Ci19Ci0KLS8vIFRoaXMgaXMgdGhl
IGxpc3Qgb2YgcHJvcGVydGllcyB3ZSB3YW50IHRvIGNvcHkgaW4gdGhlIGNvcHlCbG9ja1Byb3Bl
cnRpZXMoKSBmdW5jdGlvbi4KLS8vIEl0IGlzIHRoZSBsaXN0IG9mIENTUyBwcm9wZXJ0aWVzIHRo
YXQgYXBwbHkgc3BlY2lhbGx5IHRvIGJsb2NrLWxldmVsIGVsZW1lbnRzLgotc3RhdGljIGNvbnN0
IGludCBibG9ja1Byb3BlcnRpZXNbXSA9IHsKLSAgICBDU1NQcm9wZXJ0eU9ycGhhbnMsCi0gICAg
Q1NTUHJvcGVydHlPdmVyZmxvdywgLy8gVGhpcyBjYW4gYmUgYWxzbyBiZSBhcHBsaWVkIHRvIHJl
cGxhY2VkIGVsZW1lbnRzCi0gICAgQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbywKLSAgICBD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtbkNvdW50LAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
R2FwLAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLAotICAgIENTU1Byb3Bl
cnR5V2Via2l0Q29sdW1uUnVsZVN0eWxlLAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVs
ZVdpZHRoLAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtCZWZvcmUsCi0gICAgQ1NT
UHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0FmdGVyLAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uQnJlYWtJbnNpZGUsCi0gICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aCwKLSAgICBD
U1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyLAotICAgIENTU1Byb3BlcnR5UGFnZUJyZWFrQmVmb3Jl
LAotICAgIENTU1Byb3BlcnR5UGFnZUJyZWFrSW5zaWRlLAotICAgIENTU1Byb3BlcnR5V2Via2l0
UmVnaW9uQnJlYWtBZnRlciwKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrQmVmb3Jl
LAotICAgIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtJbnNpZGUsCi0gICAgQ1NTUHJvcGVy
dHlUZXh0QWxpZ24sCi0gICAgQ1NTUHJvcGVydHlUZXh0SW5kZW50LAotICAgIENTU1Byb3BlcnR5
V2lkb3dzCi19OwotCi1jb25zdCB1bnNpZ25lZCBudW1CbG9ja1Byb3BlcnRpZXMgPSBXVEZfQVJS
QVlfTEVOR1RIKGJsb2NrUHJvcGVydGllcyk7Ci0KLVBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNl
dD4gU3R5bGVQcm9wZXJ0eVNldDo6Y29weUJsb2NrUHJvcGVydGllcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGNvcHlQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9wZXJ0aWVzLCBudW1CbG9ja1Byb3Bl
cnRpZXMpOwotfQotCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUJsb2NrUHJvcGVydGll
cygpCi17Ci0gICAgcmVtb3ZlUHJvcGVydGllc0luU2V0KGJsb2NrUHJvcGVydGllcywgbnVtQmxv
Y2tQcm9wZXJ0aWVzKTsKLX0KLQotYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQcm9wZXJ0
aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAobV9w
cm9wZXJ0aWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklY
TUU6IFRoaXMgaXMgYWx3YXlzIHVzZWQgd2l0aCBzdGF0aWMgc2V0cyBhbmQgaW4gdGhhdCBjYXNl
IGNvbnN0cnVjdGluZyB0aGUgaGFzaCByZXBlYXRlZGx5IGlzIHByZXR0eSBwb2ludGxlc3MuCi0g
ICAgSGFzaFNldDxpbnQ+IHRvUmVtb3ZlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkKLSAgICAgICAgdG9SZW1vdmUuYWRkKHNldFtpXSk7Ci0KLSAgICBWZWN0b3I8
Q1NTUHJvcGVydHksIDQ+IG5ld1Byb3BlcnRpZXM7Ci0gICAgbmV3UHJvcGVydGllcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG1fcHJvcGVydGllcy5zaXplKCkpOwotCi0gICAgdW5zaWduZWQgc2l6
ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHNp
emU7ICsrbikgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSBtX3Byb3Bl
cnRpZXNbbl07Ci0gICAgICAgIC8vIE5vdCBxdWl0ZSBzdXJlIGlmIHRoZSBpc0ltcG9ydGFudCB0
ZXN0IGlzIG5lZWRlZCBidXQgaXQgbWF0Y2hlcyB0aGUgZXhpc3RpbmcgYmVoYXZpb3IuCi0gICAg
ICAgIGlmICghcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgewotICAgICAgICAgICAgaWYgKHRvUmVt
b3ZlLmNvbnRhaW5zKHByb3BlcnR5LmlkKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0gICAgICAgIG5ld1Byb3BlcnRpZXMuYXBwZW5kKHByb3BlcnR5KTsKLSAgICB9
Ci0KLSAgICBib29sIGNoYW5nZWQgPSBuZXdQcm9wZXJ0aWVzLnNpemUoKSAhPSBtX3Byb3BlcnRp
ZXMuc2l6ZSgpOwotICAgIG1fcHJvcGVydGllcyA9IG5ld1Byb3BlcnRpZXM7Ci0gICAgcmV0dXJu
IGNoYW5nZWQ7Ci19Ci0KLWNvbnN0IENTU1Byb3BlcnR5KiBTdHlsZVByb3BlcnR5U2V0OjpmaW5k
UHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5SUQpIGNvbnN0Ci17Ci0gICAgZm9yIChpbnQgbiA9
IG1fcHJvcGVydGllcy5zaXplKCkgLSAxIDsgbiA+PSAwOyAtLW4pIHsKLSAgICAgICAgaWYgKHBy
b3BlcnR5SUQgPT0gbV9wcm9wZXJ0aWVzW25dLm1faWQpCi0gICAgICAgICAgICByZXR1cm4gJm1f
cHJvcGVydGllc1tuXTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUNTU1Byb3BlcnR5KiBT
dHlsZVByb3BlcnR5U2V0OjpmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5SUQpCi17Ci0g
ICAgZm9yIChpbnQgbiA9IG1fcHJvcGVydGllcy5zaXplKCkgLSAxIDsgbiA+PSAwOyAtLW4pIHsK
LSAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gbV9wcm9wZXJ0aWVzW25dLm1faWQpCi0gICAgICAg
ICAgICByZXR1cm4gJm1fcHJvcGVydGllc1tuXTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0g
ICAgCi1ib29sIFN0eWxlUHJvcGVydHlTZXQ6OnByb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9w
ZXJ0eSogcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdl
dFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCkpOwotICAgIHJldHVybiB2YWx1ZSAmJiB2
YWx1ZS0+Y3NzVGV4dCgpID09IHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCk7Ci19Ci0gICAg
Ci12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKQotewotICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXNU
b1JlbW92ZTsKLSAgICBzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgQ1NTUHJvcGVy
dHkmIHByb3BlcnR5ID0gbV9wcm9wZXJ0aWVzW2ldOwotICAgICAgICBpZiAoc3R5bGUtPnByb3Bl
cnR5TWF0Y2hlcygmcHJvcGVydHkpKQotICAgICAgICAgICAgcHJvcGVydGllc1RvUmVtb3ZlLmFw
cGVuZChwcm9wZXJ0eS5pZCgpKTsKLSAgICB9ICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCB1c2UgbWFzcyByZW1vdmFsLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0
aWVzVG9SZW1vdmUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnRp
ZXNUb1JlbW92ZVtpXSk7Ci19Ci0KLXZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlRXF1aXZh
bGVudFByb3BlcnRpZXMoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCi17Ci0gICAg
VmVjdG9yPGludD4gcHJvcGVydGllc1RvUmVtb3ZlOwotICAgIHNpemVfdCBzaXplID0gbV9wcm9w
ZXJ0aWVzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSBtX3Byb3BlcnRpZXNbaV07Ci0g
ICAgICAgIGlmIChzdHlsZS0+Y3NzUHJvcGVydHlNYXRjaGVzKCZwcm9wZXJ0eSkpCi0gICAgICAg
ICAgICBwcm9wZXJ0aWVzVG9SZW1vdmUuYXBwZW5kKHByb3BlcnR5LmlkKCkpOwotICAgIH0gICAg
Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBtYXNzIHJlbW92YWwuCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnRpZXNUb1JlbW92ZS5zaXplKCk7ICsraSkKLSAgICAg
ICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydGllc1RvUmVtb3ZlW2ldKTsKLX0KLQotUGFzc1JlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBTdHlsZVByb3BlcnR5U2V0Ojpjb3B5KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQobV9wcm9wZXJ0aWVzKSk7Ci19
Ci0KLVBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6Y29weVBy
b3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAotewot
ICAgIFZlY3RvcjxDU1NQcm9wZXJ0eT4gbGlzdDsKLSAgICBsaXN0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUo
c2V0W2ldKTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQoQ1NT
UHJvcGVydHkoc2V0W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7Ci0gICAgfQotICAgIHJl
dHVybiBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUobGlzdCk7Ci19Ci0KLUNTU1N0eWxlRGVjbGFy
YXRpb24qIFN0eWxlUHJvcGVydHlTZXQ6OmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSBjb25z
dAotewotICAgIGlmIChtX2hhc0NTU09NV3JhcHBlcikgewotICAgICAgICBBU1NFUlQoIXN0YXRp
Y19jYXN0PENTU1N0eWxlRGVjbGFyYXRpb24qPihwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgp
LmdldCh0aGlzKSktPnBhcmVudFJ1bGUoKSk7Ci0gICAgICAgIEFTU0VSVCghcHJvcGVydHlTZXRD
U1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyktPnBhcmVudEVsZW1lbnQoKSk7Ci0gICAgICAgIHJl
dHVybiBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKTsKLSAgICB9Ci0gICAg
bV9oYXNDU1NPTVdyYXBwZXIgPSB0cnVlOwotICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbiogY3Nzb21XcmFwcGVyID0gbmV3IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihj
b25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPih0aGlzKSk7Ci0gICAgcHJvcGVydHlTZXRDU1NP
TVdyYXBwZXJNYXAoKS5hZGQodGhpcywgYWRvcHRQdHIoY3Nzb21XcmFwcGVyKSk7Ci0gICAgcmV0
dXJuIGNzc29tV3JhcHBlcjsKLX0KLQotQ1NTU3R5bGVEZWNsYXJhdGlvbiogU3R5bGVQcm9wZXJ0
eVNldDo6ZW5zdXJlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24oY29uc3QgQ1NTUnVsZSogcGFyZW50
UnVsZSkgY29uc3QKLXsKLSAgICBpZiAobV9oYXNDU1NPTVdyYXBwZXIpIHsKLSAgICAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PENTU1N0eWxlRGVjbGFyYXRpb24qPihwcm9wZXJ0eVNldENTU09NV3Jh
cHBlck1hcCgpLmdldCh0aGlzKSktPnBhcmVudFJ1bGUoKSA9PSBwYXJlbnRSdWxlKTsKLSAgICAg
ICAgcmV0dXJuIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpOwotICAgIH0K
LSAgICBtX2hhc0NTU09NV3JhcHBlciA9IHRydWU7Ci0gICAgUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uKiBjc3NvbVdyYXBwZXIgPSBuZXcgUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24oY29u
c3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4odGhpcyksIGNvbnN0X2Nhc3Q8Q1NTUnVsZSo+KHBh
cmVudFJ1bGUpKTsKLSAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmFkZCh0aGlzLCBh
ZG9wdFB0cihjc3NvbVdyYXBwZXIpKTsKLSAgICByZXR1cm4gY3Nzb21XcmFwcGVyOwotfQotCi1D
U1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZVByb3BlcnR5U2V0OjplbnN1cmVJbmxpbmVDU1NTdHls
ZURlY2xhcmF0aW9uKGNvbnN0IFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpIGNvbnN0Ci17
Ci0gICAgaWYgKG1faGFzQ1NTT01XcmFwcGVyKSB7Ci0gICAgICAgIEFTU0VSVChwcm9wZXJ0eVNl
dENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKS0+cGFyZW50RWxlbWVudCgpID09IHBhcmVudEVs
ZW1lbnQpOwotICAgICAgICByZXR1cm4gcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQo
dGhpcyk7Ci0gICAgfQotICAgIG1faGFzQ1NTT01XcmFwcGVyID0gdHJ1ZTsKLSAgICBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIGNzc29tV3JhcHBlciA9IG5ldyBJbmxpbmVDU1NTdHls
ZURlY2xhcmF0aW9uKGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0eVNldCo+KHRoaXMpLCBjb25zdF9j
YXN0PFN0eWxlZEVsZW1lbnQqPihwYXJlbnRFbGVtZW50KSk7Ci0gICAgcHJvcGVydHlTZXRDU1NP
TVdyYXBwZXJNYXAoKS5hZGQodGhpcywgYWRvcHRQdHIoY3Nzb21XcmFwcGVyKSk7Ci0gICAgcmV0
dXJuIGNzc29tV3JhcHBlcjsKLX0KLQotdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpjbGVhclBhcmVu
dFJ1bGUoQ1NTUnVsZSogcnVsZSkKLXsKLSAgICBpZiAoIW1faGFzQ1NTT01XcmFwcGVyKQotICAg
ICAgICByZXR1cm47Ci0gICAgQVNTRVJUX1VOVVNFRChydWxlLCBzdGF0aWNfY2FzdDxDU1NTdHls
ZURlY2xhcmF0aW9uKj4ocHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcykpLT5w
YXJlbnRSdWxlKCkgPT0gcnVsZSk7Ci0gICAgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5n
ZXQodGhpcyktPmNsZWFyUGFyZW50UnVsZSgpOwordm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb246OnJlZigpCit7IAorICAgIG1fcHJvcGVydHlTZXQtPnJlZigpOwogfQogCi12b2lk
IFN0eWxlUHJvcGVydHlTZXQ6OmNsZWFyUGFyZW50RWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVt
ZW50KQotewotICAgIGlmICghbV9oYXNDU1NPTVdyYXBwZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICBBU1NFUlRfVU5VU0VEKGVsZW1lbnQsIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0
KHRoaXMpLT5wYXJlbnRFbGVtZW50KCkgPT0gZWxlbWVudCk7Ci0gICAgcHJvcGVydHlTZXRDU1NP
TVdyYXBwZXJNYXAoKS5nZXQodGhpcyktPmNsZWFyUGFyZW50RWxlbWVudCgpOwordm9pZCBQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmRlcmVmKCkKK3sgCisgICAgbV9wcm9wZXJ0eVNl
dC0+ZGVyZWYoKTsgCiB9CiAKIHVuc2lnbmVkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bjo6bGVuZ3RoKCkgY29uc3QKQEAgLTEyNzIsMTAgKzMxOCw0IEBAIENTU1N0eWxlU2hlZXQqIElu
bGluZUNTU1N0eWxlRGVjbGFyYXRpb24KICAgICByZXR1cm4gbV9wYXJlbnRFbGVtZW50ID8gbV9w
YXJlbnRFbGVtZW50LT5kb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSA6IDA7CiB9CiAKLWNsYXNz
IFNhbWVTaXplQXNTdHlsZVByb3BlcnR5U2V0IDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVB
c1N0eWxlUHJvcGVydHlTZXQ+IHsKLSAgICBWZWN0b3I8Q1NTUHJvcGVydHksIDQ+IHByb3BlcnRp
ZXM7Ci0gICAgdW5zaWduZWQgYml0ZmllbGQ7Ci19OwotQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFN0
eWxlUHJvcGVydHlTZXQpID09IHNpemVvZihTYW1lU2l6ZUFzU3R5bGVQcm9wZXJ0eVNldCksIHN0
eWxlX3Byb3BlcnR5X3NldF9zaG91bGRfc3RheV9zbWFsbCk7Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAJKHJldmlz
aW9uIDEwODM2MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2
ZXJJbnRlcmVzdEdyb3VwLmgiCi0jaW5jbHVkZSAiTXV0YXRpb25SZWNvcmQuaCIKKyNpbmNsdWRl
ICJQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJTdHlsZWRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTUzLDE2NiArNTEsNiBAQCBzdGF0aWMgUHJvcGVy
dHlTZXRDU1NPTVdyYXBwZXJNYXAmIHByb3BlCiAgICAgcmV0dXJuIHByb3BlcnR5U2V0Q1NTT01X
cmFwcGVyTWFwSW5zdGFuY2U7CiB9CiAKLWNsYXNzIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbiA6IHB1YmxpYyBDU1NTdHlsZURlY2xhcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQpIDog
bV9wcm9wZXJ0eVNldChwcm9wZXJ0eVNldCkgeyB9Ci0gICAgCi0gICAgdmlydHVhbCBTdHlsZWRF
bGVtZW50KiBwYXJlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwg
dm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIGNsZWFyUGFyZW50RWxlbWVudCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
LSAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCByZWYoKSBPVkVSUklERSB7
IG1fcHJvcGVydHlTZXQtPnJlZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcmVmKCkgT1ZFUlJJ
REUgeyBtX3Byb3BlcnR5U2V0LT5kZXJlZigpOyB9Ci0KLSAgICB2aXJ0dWFsIENTU1J1bGUqIHBh
cmVudFJ1bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9OwotICAgIHZpcnR1YWwgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0
eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25z
dCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2Vw
dGlvbkNvZGUmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Qg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwgRXhj
ZXB0aW9uQ29kZSYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0
eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYp
IE9WRVJSSURFOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29u
c3QgQ1NTUHJvcGVydHkqKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIENTU1N0eWxlU2hl
ZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY29weSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtYWtlTXV0YWJsZSgpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCkgeyB9ICAgIAotCi1wcm90ZWN0
ZWQ6Ci0gICAgU3R5bGVQcm9wZXJ0eVNldCogbV9wcm9wZXJ0eVNldDsKLX07Ci0KLWNsYXNzIFJ1
bGVDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbgotewotcHVibGljOgotICAgIFJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVy
dHlTZXQqIHByb3BlcnR5U2V0LCBDU1NSdWxlKiBwYXJlbnRSdWxlKQotICAgICAgICA6IFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihwcm9wZXJ0eVNldCkKLSAgICAgICAgLCBtX3BhcmVu
dFJ1bGUocGFyZW50UnVsZSkgCi0gICAgewotICAgIH0KLQotcHJpdmF0ZTogICAgCi0gICAgdmly
dHVhbCBDU1NSdWxlKiBwYXJlbnRSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRSdWxlOyB9
OwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7IG1fcGFyZW50UnVsZSA9IDA7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIHZpcnR1YWwg
Q1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBjb25zdDsKLSAgICAKLSAgICBDU1NS
dWxlKiBtX3BhcmVudFJ1bGU7Ci19OwotCi1jbGFzcyBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9u
IDogcHVibGljIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbgotewotcHVibGljOgotICAg
IElubGluZUNTU1N0eWxlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQs
IFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpCi0gICAgICAgIDogUHJvcGVydHlTZXRDU1NT
dHlsZURlY2xhcmF0aW9uKHByb3BlcnR5U2V0KQotICAgICAgICAsIG1fcGFyZW50RWxlbWVudChw
YXJlbnRFbGVtZW50KSAKLSAgICB7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgU3R5
bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RWxlbWVu
dDsgfQotICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhcmVudEVsZW1lbnQoKSB7IG1fcGFyZW50RWxl
bWVudCA9IDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAg
IHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBjb25zdDsKLQotICAg
IFN0eWxlZEVsZW1lbnQqIG1fcGFyZW50RWxlbWVudDsKLX07Ci0KLW5hbWVzcGFjZSB7Ci0KLWNs
YXNzIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlKTsKLXB1YmxpYzoKLSAgICBTdHlsZUF0dHJp
YnV0ZU11dGF0aW9uU2NvcGUoUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBkZWNsKQot
ICAgIHsKLSAgICAgICAgKytzX3Njb3BlQ291bnQ7Ci0KLSAgICAgICAgaWYgKHNfc2NvcGVDb3Vu
dCAhPSAxKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc19jdXJyZW50RGVjbCA9PSBkZWNsKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVCghc19jdXJyZW50
RGVjbCk7Ci0gICAgICAgIHNfY3VycmVudERlY2wgPSBkZWNsOwotCi0jaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKLSAgICAgICAgaWYgKCFzX2N1cnJlbnREZWNsLT5wYXJlbnRFbGVtZW50
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fbXV0YXRpb25SZWNpcGllbnRzID0g
TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6OmNyZWF0ZUZvckF0dHJpYnV0ZXNNdXRhdGlv
bihzX2N1cnJlbnREZWNsLT5wYXJlbnRFbGVtZW50KCksIEhUTUxOYW1lczo6c3R5bGVBdHRyKTsK
LSAgICAgICAgaWYgKCFtX211dGF0aW9uUmVjaXBpZW50cykKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBBdG9taWNTdHJpbmcgb2xkVmFsdWUgPSBtX211dGF0aW9uUmVjaXBpZW50cy0+
aXNPbGRWYWx1ZVJlcXVlc3RlZCgpID8gc19jdXJyZW50RGVjbC0+cGFyZW50RWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzdHlsZUF0dHIpIDogbnVsbEF0b207Ci0gICAgICAgIG1f
bXV0YXRpb24gPSBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQXR0cmlidXRlcyhzX2N1cnJlbnREZWNs
LT5wYXJlbnRFbGVtZW50KCksIEhUTUxOYW1lczo6c3R5bGVBdHRyLCBvbGRWYWx1ZSk7Ci0jZW5k
aWYKLSAgICB9Ci0KLSAgICB+U3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlKCkKLSAgICB7Ci0g
ICAgICAgIC0tc19zY29wZUNvdW50OwotICAgICAgICBpZiAoc19zY29wZUNvdW50KQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICAgICAg
aWYgKG1fbXV0YXRpb24gJiYgc19zaG91bGREZWxpdmVyKQotICAgICAgICAgICAgbV9tdXRhdGlv
blJlY2lwaWVudHMtPmVucXVldWVNdXRhdGlvblJlY29yZChtX211dGF0aW9uKTsKLSAgICAgICAg
c19zaG91bGREZWxpdmVyID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFzX3Nob3VsZE5v
dGlmeUluc3BlY3RvcikgewotICAgICAgICAgICAgc19jdXJyZW50RGVjbCA9IDA7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgaGF2ZSB0byBjbGVhciBpbnRl
cm5hbCBzdGF0ZSBiZWZvcmUgY2FsbGluZyBJbnNwZWN0b3IncyBjb2RlLgotICAgICAgICBQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIGxvY2FsQ29weVN0eWxlRGVjbCA9IHNfY3VycmVu
dERlY2w7Ci0gICAgICAgIHNfY3VycmVudERlY2wgPSAwOwotICAgICAgICBzX3Nob3VsZE5vdGlm
eUluc3BlY3RvciA9IGZhbHNlOwotICAgICAgICBpZiAobG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJl
bnRFbGVtZW50KCkgJiYgbG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCktPmRvY3Vt
ZW50KCkpCi0gICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRh
dGVTdHlsZUF0dHIobG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCktPmRvY3VtZW50
KCksIGxvY2FsQ29weVN0eWxlRGVjbC0+cGFyZW50RWxlbWVudCgpKTsKLSAgICB9Ci0KLSNpZiBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIHZvaWQgZW5xdWV1ZU11dGF0aW9uUmVjb3Jk
KCkKLSAgICB7Ci0gICAgICAgIHNfc2hvdWxkRGVsaXZlciA9IHRydWU7Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICB2b2lkIGRpZEludmFsaWRhdGVTdHlsZUF0dHIoKQotICAgIHsKLSAgICAgICAgc19z
aG91bGROb3RpZnlJbnNwZWN0b3IgPSB0cnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGF0
aWMgdW5zaWduZWQgc19zY29wZUNvdW50OwotICAgIHN0YXRpYyBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24qIHNfY3VycmVudERlY2w7Ci0gICAgc3RhdGljIGJvb2wgc19zaG91bGROb3Rp
ZnlJbnNwZWN0b3I7Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBzdGF0aWMg
Ym9vbCBzX3Nob3VsZERlbGl2ZXI7Ci0KLSAgICBPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVy
ZXN0R3JvdXA+IG1fbXV0YXRpb25SZWNpcGllbnRzOwotICAgIFJlZlB0cjxNdXRhdGlvblJlY29y
ZD4gbV9tdXRhdGlvbjsKLSNlbmRpZgotfTsKLQotdW5zaWduZWQgU3R5bGVBdHRyaWJ1dGVNdXRh
dGlvblNjb3BlOjpzX3Njb3BlQ291bnQgPSAwOwotUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uKiBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfY3VycmVudERlY2wgPSAwOwotYm9v
bCBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfc2hvdWxkTm90aWZ5SW5zcGVjdG9yID0g
ZmFsc2U7Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLWJvb2wgU3R5bGVBdHRyaWJ1
dGVNdXRhdGlvblNjb3BlOjpzX3Nob3VsZERlbGl2ZXIgPSBmYWxzZTsKLSNlbmRpZgotCi19IC8v
IG5hbWVzcGFjZQotCiBTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KCkKICAgICA6
IG1fc3RyaWN0UGFyc2luZyhmYWxzZSkKICAgICAsIG1faGFzQ1NTT01XcmFwcGVyKGZhbHNlKQpA
QCAtMTA4MywxOTUgKzkyMSw2IEBAIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6Y2xlYXJQYXJlbnRF
bGVtZW4KICAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKS0+Y2xlYXJQ
YXJlbnRFbGVtZW50KCk7CiB9CiAKLXVuc2lnbmVkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbjo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cHJvcGVy
dHlDb3VudCgpOwotfQotCi1TdHJpbmcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpp
dGVtKHVuc2lnbmVkIGkpIGNvbnN0Ci17Ci0gICAgaWYgKGkgPj0gbV9wcm9wZXJ0eVNldC0+cHJv
cGVydHlDb3VudCgpKQotICAgICAgICByZXR1cm4gIiI7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5
TmFtZShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihtX3Byb3BlcnR5U2V0LT5wcm9wZXJ0eUF0
KGkpLmlkKCkpKTsKLX0KLQotU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6
Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmFzVGV4dCgpOwot
fQotICAgIAotdm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldENzc1RleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSNpZiBFTkFCTEUoTVVU
QVRJT05fT0JTRVJWRVJTKQotICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlv
blNjb3BlKHRoaXMpOwotI2VuZGlmCi0gICAgZWMgPSAwOwotICAgIC8vIEZJWE1FOiBEZXRlY3Qg
c3ludGF4IGVycm9ycyBhbmQgc2V0IGVjLgotICAgIG1fcHJvcGVydHlTZXQtPnBhcnNlRGVjbGFy
YXRpb24odGV4dCwgY29udGV4dFN0eWxlU2hlZXQoKSk7Ci0KLSAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKCk7Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBtdXRhdGlvblNjb3Bl
LmVucXVldWVNdXRhdGlvblJlY29yZCgpOyAgICAKLSNlbmRpZgotfQotCi1QYXNzUmVmUHRyPENT
U1ZhbHVlPiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFs
dWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BlcnR5SUQgPSBj
c3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wZXJ0eUlEKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShwcm9wZXJ0eUlEKTsKLX0KLQotU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKLXsKLSAgICBp
bnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXBy
b3BlcnR5SUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9wcm9wZXJ0
eVNldC0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKLX0KLQotU3RyaW5nIFByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJv
cGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BlcnR5SUQpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0
eUlEKSA/ICJpbXBvcnRhbnQiIDogIiI7Ci19Ci0KLVN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lKQotewotICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUp
OwotICAgIGlmICghcHJvcGVydHlJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlu
dCBzaG9ydGhhbmRJRCA9IG1fcHJvcGVydHlTZXQtPmdldFByb3BlcnR5U2hvcnRoYW5kKHByb3Bl
cnR5SUQpOwotICAgIGlmICghc2hvcnRoYW5kSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHNo
b3J0aGFuZElEKSk7Ci19Ci0KLWJvb2wgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpp
c1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50
IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9w
ZXJ0eUlEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlTZXQt
PmlzUHJvcGVydHlJbXBsaWNpdChwcm9wZXJ0eUlEKTsKLX0KLQotdm9pZCBQcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFN0eWxlQXR0
cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwotI2VuZGlmCi0gICAgaW50
IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9w
ZXJ0eUlEKQotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlvcml0eS5m
aW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7Ci0gICAgZWMgPSAwOwotICAg
IGJvb2wgY2hhbmdlZCA9IG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZh
bHVlLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KCkpOwotICAgIGlmIChjaGFuZ2VkKSB7
Ci0gICAgICAgIC8vIENTUyBET00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIG9mIHBhcnNp
bmcgZmFpbGVkLCBidXQgdGhpcyBpcyB0b28gZGFuZ2Vyb3VzIGZvciBjb21wYXRpYmlsaXR5LAot
ICAgICAgICAvLyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcy
OTY+LgotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0jaWYgRU5BQkxFKE1VVEFUSU9O
X09CU0VSVkVSUykKLSAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQo
KTsKLSNlbmRpZgotICAgIH0KLX0KLQotU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbjo6cmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgU3R5bGVB
dHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7Ci0jZW5kaWYKLSAgICBp
bnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXBy
b3BlcnR5SUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBlYyA9IDA7Ci0gICAgU3Ry
aW5nIHJlc3VsdDsKLSAgICBib29sIGNoYW5nZXMgPSBtX3Byb3BlcnR5U2V0LT5yZW1vdmVQcm9w
ZXJ0eShwcm9wZXJ0eUlELCAmcmVzdWx0KTsKLSAgICBpZiAoY2hhbmdlcykgewotICAgICAgICBz
ZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAg
ICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKLSNlbmRpZgotICAg
IH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQpCi17IAotICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOyAKLX0KLQotU3RyaW5nIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCkKLXsgCi0gICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmdldFByb3BlcnR5VmFs
dWUocHJvcGVydHlJRCk7IAotfQotCi12b2lkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bjo6c2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsgCi0jaWYg
RU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2Nv
cGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLSNlbmRpZgotICAgIGVjID0gMDsKLSAgICBib29sIGNo
YW5nZWQgPSBtX3Byb3BlcnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1w
b3J0YW50LCBjb250ZXh0U3R5bGVTaGVldCgpKTsKLSAgICBpZiAoY2hhbmdlZCkgewotICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykK
LSAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKLSNlbmRpZgot
ICAgIH0KLX0KLQotQ1NTU3R5bGVTaGVldCogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
OjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKLXsgCi0gICAgcmV0dXJuIGNvbnRleHRTdHlsZVNo
ZWV0KCk7IAotfQotCi1QYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbjo6Y29weSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlT
ZXQtPmNvcHkoKTsKLX0KLQotUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBQcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb246Om1ha2VNdXRhYmxlKCkKLXsKLSAgICByZXR1cm4gbV9wcm9w
ZXJ0eVNldDsKLX0KLQotYm9vbCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNzc1By
b3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcHJvcGVydHlTZXQtPnByb3BlcnR5TWF0Y2hlcyhwcm9wZXJ0eSk7Ci19Ci0KLXZv
aWQgUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OnNldE5lZWRzU3R5bGVSZWNhbGMoKQotewotICAg
IGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY29udGV4dFN0eWxlU2hlZXQoKSkgewot
ICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVTaGVldC0+ZmluZERvY3VtZW50
KCkpCi0gICAgICAgICAgICBkb2N1bWVudC0+c3R5bGVTZWxlY3RvckNoYW5nZWQoRGVmZXJSZWNh
bGNTdHlsZSk7Ci0gICAgfQotfQotICAgIAotQ1NTU3R5bGVTaGVldCogUnVsZUNTU1N0eWxlRGVj
bGFyYXRpb246OmNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYXJl
bnRSdWxlID8gbV9wYXJlbnRSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwOwotfQotCi12b2lk
IElubGluZUNTU1N0eWxlRGVjbGFyYXRpb246OnNldE5lZWRzU3R5bGVSZWNhbGMoKQotewotICAg
IGlmICghbV9wYXJlbnRFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgbV9wYXJlbnRFbGVt
ZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKLSAgICBtX3BhcmVu
dEVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwotICAgIFN0eWxlQXR0cmlidXRl
TXV0YXRpb25TY29wZSh0aGlzKS5kaWRJbnZhbGlkYXRlU3R5bGVBdHRyKCk7Ci0gICAgcmV0dXJu
OwotfQotCi1DU1NTdHlsZVNoZWV0KiBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uOjpjb250ZXh0
U3R5bGVTaGVldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFyZW50RWxlbWVudCA/IG1fcGFy
ZW50RWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkgOiAwOwotfQotCiBjbGFzcyBT
YW1lU2l6ZUFzU3R5bGVQcm9wZXJ0eVNldCA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNT
dHlsZVByb3BlcnR5U2V0PiB7CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5LCA0PiBwcm9wZXJ0aWVz
OwogICAgIHVuc2lnbmVkIGJpdGZpZWxkOwo=
</data>
<flag name="review"
          id="130255"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="130256"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127986</attachid>
            <date>2012-02-21 09:32:21 -0800</date>
            <delta_ts>2012-02-21 09:39:51 -0800</delta_ts>
            <desc>now with header included</desc>
            <filename>propertyset-cssom-file-2.patch</filename>
            <type>text/plain</type>
            <size>117853</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODM2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAyLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbiB0byBhIGZpbGUgb2YgaXRzIG93bgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzkxMjEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1ha2VzIFN0eWxlUHJvcGVydHlTZXQu
Y3BwIG1vcmUgcmVhZGFibGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNw
cC4KKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6cmVm
KToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGVy
ZWYpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL1Byb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUHJv
cGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6cGFyZW50
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b246OmNsZWFyUGFyZW50UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb246OmNsZWFyUGFyZW50RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQ
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNvbnRleHRTdHlsZVNoZWV0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHls
ZVJlY2FsYyk6CisgICAgICAgIChSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6UnVsZUNTU1N0eWxlRGVjbGFyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OnBhcmVudFJ1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OmNsZWFyUGFyZW50
UnVsZSk6CisgICAgICAgIChJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUNTU1N0eWxlRGVjbGFyYXRpb246OklubGluZUNTU1N0eWxlRGVjbGFyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cGFyZW50
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uOjpj
bGVhclBhcmVudEVsZW1lbnQpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTAyLTIwICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFw
cGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzkwNDYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDgzNjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDkwLDYgKzQ5
MCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3MvTWVkaWFRdWVyeUxpc3QuY3BwCiAg
ICAgY3NzL01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCiAgICAgY3NzL01lZGlhUXVlcnlNYXRj
aGVyLmNwcAorICAgIGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCiAgICAg
Y3NzL1JHQkNvbG9yLmNwcAogICAgIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwCiAgICAgY3NzL1No
YWRvd1ZhbHVlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMDgzNjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNiArNDUyLDcgQEAg
U09VUkNFUyArPSBcCiAgICAgY3NzL01lZGlhUXVlcnlMaXN0LmNwcCBcCiAgICAgY3NzL01lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuY3BwIFwKICAgICBjc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwIFwK
KyAgICBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBcCiAgICAgY3NzL1JH
QkNvbG9yLmNwcCBcCiAgICAgY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgXAogICAgIGNzcy9TaGFk
b3dWYWx1ZS5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTA4MzYzKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgxLDYgKzIw
ODEsOCBAQAogICAgICAgICAgICAgJ2Nzcy9NZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgnLAogICAg
ICAgICAgICAgJ2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9N
ZWRpYVF1ZXJ5TWF0Y2hlci5oJywKKyAgICAgICAgICAgICdjc3MvUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uLmNwcCcKKyAgICAgICAgICAgICdjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uLmgnCiAgICAgICAgICAgICAnY3NzL1JHQkNvbG9yLmNwcCcsCiAgICAgICAgICAg
ICAnY3NzL1JHQkNvbG9yLmgnLAogICAgICAgICAgICAgJ2Nzcy9SZWN0LmgnLApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEw
ODM2MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zNTQ1OCw2ICszNTQ1OCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cY3NzXFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NccXVpcmtzLmNzcyIK
IAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDgzNjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTU4NzQsNiArNTg3NCw4IEBACiAJCUU0QUZEMDBFMERBRjMzNTUwMEY1RjU1QyAvKiBTTUlMVGlt
ZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTRBRkQwMDgwREFGMzM1NDAwRjVGNTVDIC8qIFNNSUxUaW1lQ29udGFpbmVyLmggKi87IH07
CiAJCUU0QUZEMDBGMERBRjMzNTUwMEY1RjU1QyAvKiBTVkdTTUlMRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFGRDAwOTBEQUYzMzU0
MDBGNUY1NUMgLyogU1ZHU01JTEVsZW1lbnQuY3BwICovOyB9OwogCQlFNEFGRDAxMDBEQUYzMzU1
MDBGNUY1NUMgLyogU1ZHU01JTEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUZEMDBBMERBRjMzNTQwMEY1RjU1QyAvKiBTVkdTTUlMRWxl
bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUU0QkJFRDBFMTRGNDAyNUQwMDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRC
QkVEMEMxNEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5j
cHAgKi87IH07CisJCUU0QkJFRDBGMTRGNDAyNUQwMDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QkJFRDBEMTRGNDAyNUQwMDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb24uaCAqLzsgfTsKIAkJRTRDMTc4OUEwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVj
dG9yTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEMxNzg5NTBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmNwcCAqLzsgfTsK
IAkJRTRDMTc4OUIwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMTc4OTYwRUU2OTAzODAw
ODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5oICovOyB9OwogCQlFNEMyNzk1ODBDRjk3NDE5MDBF
OTdCOTggLyogUmVuZGVyTWVkaWEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTRDMjc5NTYwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNw
cCAqLzsgfTsKQEAgLTEyOTAyLDYgKzEyOTA0LDggQEAKIAkJRTRCNDIzODAwQ0JGQjczQzAwQUYy
RUNFIC8qIEpTSFRNTE1lZGlhRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0hUTUxNZWRpYUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTRCNDIzODUwQ0JGQjczQzAwQUYyRUNFIC8qIEpTUHJvZ3Jlc3NFdmVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Byb2dyZXNzRXZlbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNEI0MjM4NjBDQkZCNzNDMDBBRjJFQ0UgLyogSlNQcm9n
cmVzc0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUHJvZ3Jlc3NF
dmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEJCRUQwQzE0RjQwMjVEMDAz
RjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QkJFRDBEMTRGNDAyNUQwMDNGMEI5
OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QzE3ODk1MEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxl
Y3Rvckxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTU2Vs
ZWN0b3JMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMTc4OTYwRUU2
OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDU1NTZWxlY3Rvckxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTRDMjc5NTYwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1lZGlhLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMjM3LDYgKzIwMjQxLDggQEAKIAkJCQlEM0FBMTBGMTEyM0E5
OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuY3BwICovLAogCQkJCUQzQUExMEYyMTIz
QTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hlci5oICovLAogCQkJCUE4MEU2Q0QxMEEx
OTg5Q0EwMDdGQjhDNSAvKiBQYWlyLmggKi8sCisJCQkJRTRCQkVEMEMxNEY0MDI1RDAwM0YwQjk4
IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8sCisJCQkJRTRCQkVEMEQx
NEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oICovLAog
CQkJCTkzQ0E0QzlGMDlERjkzRkEwMERGODY3NyAvKiBxdWlya3MuY3NzICovLAogCQkJCUJDNDM2
OEU3MEMyMjZFMzIwMDVFRkI1RiAvKiBSZWN0LmggKi8sCiAJCQkJQTgwRTc5OTYwQTE5QkQyMTAw
N0ZCOEM1IC8qIFJlY3QuaWRsICovLApAQCAtMjQyODksNiArMjQyOTUsNyBAQAogCQkJCUUxQkU1
MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3N0UyRTBGMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRDUzNzM1MzEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUU0QkJFRDBGMTRGNDAyNUQwMDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjcyMzYsNiArMjcyNDMsNyBAQAogCQkJ
CUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTc3RTJFMEUxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkQ1MzczNTIxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUU0QkJFRDBFMTRGNDAyNUQwMDNGMEI5OCAvKiBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNw
cAkocmV2aXNpb24gMTA4MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0
eVNldC5jcHA6MTA4MzQ1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjgxIEBACisvKgor
ICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKworI2luY2x1ZGUgIkNTU0ltYWdl
VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eUxv
bmdoYW5kLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1J1
bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3
b3Jkcy5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlUG9v
bC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgor
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oIgorI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmgiCisjaW5jbHVk
ZSAiTXV0YXRpb25SZWNvcmQuaCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVk
ZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8Y29uc3Qg
U3R5bGVQcm9wZXJ0eVNldCosIE93blB0cjxQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24+
ID4gUHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXA7CitzdGF0aWMgUHJvcGVydHlTZXRDU1NPTVdy
YXBwZXJNYXAmIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwLCBwcm9wZXJ0eVNldENTU09NV3Jh
cHBlck1hcEluc3RhbmNlLCAoKSk7CisgICAgcmV0dXJuIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVy
TWFwSW5zdGFuY2U7Cit9CisKK2NsYXNzIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiA6
IHB1YmxpYyBDU1NTdHlsZURlY2xhcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQpIDogbV9wcm9w
ZXJ0eVNldChwcm9wZXJ0eVNldCkgeyB9CisgICAgCisgICAgdmlydHVhbCBTdHlsZWRFbGVtZW50
KiBwYXJlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBj
bGVhclBhcmVudFJ1bGUoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2
b2lkIGNsZWFyUGFyZW50RWxlbWVudCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2
aXJ0dWFsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4g
MDsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCByZWYoKSBPVkVSUklERSB7IG1fcHJv
cGVydHlTZXQtPnJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmKCkgT1ZFUlJJREUgeyBt
X3Byb3BlcnR5U2V0LT5kZXJlZigpOyB9CisKKyAgICB2aXJ0dWFsIENTU1J1bGUqIHBhcmVudFJ1
bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9OworICAgIHZpcnR1YWwgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgcHJv
cGVydHlOYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVByaW9y
aXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0
cmluZyBnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGNv
bnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJp
bmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJp
bmcgcmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9u
Q29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJv
cGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlELCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpIE9WRVJS
SURFOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NT
UHJvcGVydHkqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHBh
cmVudFN0eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
U3R5bGVQcm9wZXJ0eVNldD4gY29weSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtYWtlTXV0YWJsZSgpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCkgeyB9ICAgIAorCitwcm90ZWN0ZWQ6Cisg
ICAgU3R5bGVQcm9wZXJ0eVNldCogbV9wcm9wZXJ0eVNldDsKK307CisKK2NsYXNzIFJ1bGVDU1NT
dHlsZURlY2xhcmF0aW9uIDogcHVibGljIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbgor
eworcHVibGljOgorICAgIFJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQq
IHByb3BlcnR5U2V0LCBDU1NSdWxlKiBwYXJlbnRSdWxlKQorICAgICAgICA6IFByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbihwcm9wZXJ0eVNldCkKKyAgICAgICAgLCBtX3BhcmVudFJ1bGUo
cGFyZW50UnVsZSkgCisgICAgeworICAgIH0KKworcHJpdmF0ZTogICAgCisgICAgdmlydHVhbCBD
U1NSdWxlKiBwYXJlbnRSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRSdWxlOyB9OworICAg
IHZpcnR1YWwgdm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7IG1fcGFyZW50UnVsZSA9IDA7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIHZpcnR1YWwgQ1NTU3R5
bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBjb25zdDsKKyAgICAKKyAgICBDU1NSdWxlKiBt
X3BhcmVudFJ1bGU7Cit9OworCitjbGFzcyBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVi
bGljIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbgoreworcHVibGljOgorICAgIElubGlu
ZUNTU1N0eWxlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQsIFN0eWxl
ZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpCisgICAgICAgIDogUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uKHByb3BlcnR5U2V0KQorICAgICAgICAsIG1fcGFyZW50RWxlbWVudChwYXJlbnRF
bGVtZW50KSAKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgU3R5bGVkRWxl
bWVudCogcGFyZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RWxlbWVudDsgfQor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhcmVudEVsZW1lbnQoKSB7IG1fcGFyZW50RWxlbWVudCA9
IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIHZpcnR1
YWwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBjb25zdDsKKworICAgIFN0eWxl
ZEVsZW1lbnQqIG1fcGFyZW50RWxlbWVudDsKK307CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFN0
eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3R5
bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlKTsKK3B1YmxpYzoKKyAgICBTdHlsZUF0dHJpYnV0ZU11
dGF0aW9uU2NvcGUoUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBkZWNsKQorICAgIHsK
KyAgICAgICAgKytzX3Njb3BlQ291bnQ7CisKKyAgICAgICAgaWYgKHNfc2NvcGVDb3VudCAhPSAx
KSB7CisgICAgICAgICAgICBBU1NFUlQoc19jdXJyZW50RGVjbCA9PSBkZWNsKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCghc19jdXJyZW50RGVjbCk7
CisgICAgICAgIHNfY3VycmVudERlY2wgPSBkZWNsOworCisjaWYgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUykKKyAgICAgICAgaWYgKCFzX2N1cnJlbnREZWNsLT5wYXJlbnRFbGVtZW50KCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fbXV0YXRpb25SZWNpcGllbnRzID0gTXV0YXRp
b25PYnNlcnZlckludGVyZXN0R3JvdXA6OmNyZWF0ZUZvckF0dHJpYnV0ZXNNdXRhdGlvbihzX2N1
cnJlbnREZWNsLT5wYXJlbnRFbGVtZW50KCksIEhUTUxOYW1lczo6c3R5bGVBdHRyKTsKKyAgICAg
ICAgaWYgKCFtX211dGF0aW9uUmVjaXBpZW50cykKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBBdG9taWNTdHJpbmcgb2xkVmFsdWUgPSBtX211dGF0aW9uUmVjaXBpZW50cy0+aXNPbGRW
YWx1ZVJlcXVlc3RlZCgpID8gc19jdXJyZW50RGVjbC0+cGFyZW50RWxlbWVudCgpLT5nZXRBdHRy
aWJ1dGUoSFRNTE5hbWVzOjpzdHlsZUF0dHIpIDogbnVsbEF0b207CisgICAgICAgIG1fbXV0YXRp
b24gPSBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQXR0cmlidXRlcyhzX2N1cnJlbnREZWNsLT5wYXJl
bnRFbGVtZW50KCksIEhUTUxOYW1lczo6c3R5bGVBdHRyLCBvbGRWYWx1ZSk7CisjZW5kaWYKKyAg
ICB9CisKKyAgICB+U3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlKCkKKyAgICB7CisgICAgICAg
IC0tc19zY29wZUNvdW50OworICAgICAgICBpZiAoc19zY29wZUNvdW50KQorICAgICAgICAgICAg
cmV0dXJuOworCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICAgICAgaWYgKG1f
bXV0YXRpb24gJiYgc19zaG91bGREZWxpdmVyKQorICAgICAgICAgICAgbV9tdXRhdGlvblJlY2lw
aWVudHMtPmVucXVldWVNdXRhdGlvblJlY29yZChtX211dGF0aW9uKTsKKyAgICAgICAgc19zaG91
bGREZWxpdmVyID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgaWYgKCFzX3Nob3VsZE5vdGlmeUlu
c3BlY3RvcikgeworICAgICAgICAgICAgc19jdXJyZW50RGVjbCA9IDA7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgaGF2ZSB0byBjbGVhciBpbnRlcm5hbCBz
dGF0ZSBiZWZvcmUgY2FsbGluZyBJbnNwZWN0b3IncyBjb2RlLgorICAgICAgICBQcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb24qIGxvY2FsQ29weVN0eWxlRGVjbCA9IHNfY3VycmVudERlY2w7
CisgICAgICAgIHNfY3VycmVudERlY2wgPSAwOworICAgICAgICBzX3Nob3VsZE5vdGlmeUluc3Bl
Y3RvciA9IGZhbHNlOworICAgICAgICBpZiAobG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVt
ZW50KCkgJiYgbG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCktPmRvY3VtZW50KCkp
CisgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRhdGVTdHls
ZUF0dHIobG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCktPmRvY3VtZW50KCksIGxv
Y2FsQ29weVN0eWxlRGVjbC0+cGFyZW50RWxlbWVudCgpKTsKKyAgICB9CisKKyNpZiBFTkFCTEUo
TVVUQVRJT05fT0JTRVJWRVJTKQorICAgIHZvaWQgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCkKKyAg
ICB7CisgICAgICAgIHNfc2hvdWxkRGVsaXZlciA9IHRydWU7CisgICAgfQorI2VuZGlmCisKKyAg
ICB2b2lkIGRpZEludmFsaWRhdGVTdHlsZUF0dHIoKQorICAgIHsKKyAgICAgICAgc19zaG91bGRO
b3RpZnlJbnNwZWN0b3IgPSB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdW5z
aWduZWQgc19zY29wZUNvdW50OworICAgIHN0YXRpYyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb24qIHNfY3VycmVudERlY2w7CisgICAgc3RhdGljIGJvb2wgc19zaG91bGROb3RpZnlJbnNw
ZWN0b3I7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBzdGF0aWMgYm9vbCBz
X3Nob3VsZERlbGl2ZXI7CisKKyAgICBPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3Jv
dXA+IG1fbXV0YXRpb25SZWNpcGllbnRzOworICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbV9t
dXRhdGlvbjsKKyNlbmRpZgorfTsKKwordW5zaWduZWQgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNj
b3BlOjpzX3Njb3BlQ291bnQgPSAwOworUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBT
dHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfY3VycmVudERlY2wgPSAwOworYm9vbCBTdHls
ZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfc2hvdWxkTm90aWZ5SW5zcGVjdG9yID0gZmFsc2U7
CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKK2Jvb2wgU3R5bGVBdHRyaWJ1dGVNdXRh
dGlvblNjb3BlOjpzX3Nob3VsZERlbGl2ZXIgPSBmYWxzZTsKKyNlbmRpZgorCit9IC8vIG5hbWVz
cGFjZQorCitTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KCkKKyAgICA6IG1fc3Ry
aWN0UGFyc2luZyhmYWxzZSkKKyAgICAsIG1faGFzQ1NTT01XcmFwcGVyKGZhbHNlKQoreworfQor
CitTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KGNvbnN0IFZlY3RvcjxDU1NQcm9w
ZXJ0eT4mIHByb3BlcnRpZXMpCisgICAgOiBtX3Byb3BlcnRpZXMocHJvcGVydGllcykKKyAgICAs
IG1fc3RyaWN0UGFyc2luZyh0cnVlKQorICAgICwgbV9oYXNDU1NPTVdyYXBwZXIoZmFsc2UpCit7
CisgICAgbV9wcm9wZXJ0aWVzLnNocmlua1RvRml0KCk7Cit9CisKK1N0eWxlUHJvcGVydHlTZXQ6
OlN0eWxlUHJvcGVydHlTZXQoY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0ICogcHJvcGVydGllcywg
aW50IG51bVByb3BlcnRpZXMsIGJvb2wgdXNlU3RyaWN0UGFyc2luZykKKyAgICA6IG1fc3RyaWN0
UGFyc2luZyh1c2VTdHJpY3RQYXJzaW5nKQorICAgICwgbV9oYXNDU1NPTVdyYXBwZXIoZmFsc2Up
Cit7CisgICAgbV9wcm9wZXJ0aWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtUHJvcGVydGll
cyk7CisgICAgSGFzaE1hcDxpbnQsIGJvb2w+IGNhbmRpZGF0ZXM7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkg
KnByb3BlcnR5ID0gcHJvcGVydGllc1tpXTsKKyAgICAgICAgQVNTRVJUKHByb3BlcnR5KTsKKyAg
ICAgICAgYm9vbCBpbXBvcnRhbnQgPSBwcm9wZXJ0eS0+aXNJbXBvcnRhbnQoKTsKKworICAgICAg
ICBIYXNoTWFwPGludCwgYm9vbD46Oml0ZXJhdG9yIGl0ID0gY2FuZGlkYXRlcy5maW5kKHByb3Bl
cnR5LT5pZCgpKTsKKyAgICAgICAgaWYgKGl0ICE9IGNhbmRpZGF0ZXMuZW5kKCkpIHsKKyAgICAg
ICAgICAgIGlmICghaW1wb3J0YW50ICYmIGl0LT5zZWNvbmQpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eS0+aWQoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKCpwcm9wZXJ0eSk7CisgICAgICAg
IGNhbmRpZGF0ZXMuc2V0KHByb3BlcnR5LT5pZCgpLCBpbXBvcnRhbnQpOworICAgIH0KK30KKwor
U3R5bGVQcm9wZXJ0eVNldDo6flN0eWxlUHJvcGVydHlTZXQoKQoreworICAgIEFTU0VSVCghbV9o
YXNDU1NPTVdyYXBwZXIgfHwgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5jb250YWlucyh0
aGlzKSk7CisgICAgaWYgKG1faGFzQ1NTT01XcmFwcGVyKQorICAgICAgICBwcm9wZXJ0eVNldENT
U09NV3JhcHBlck1hcCgpLnJlbW92ZSh0aGlzKTsKK30KKwordm9pZCBTdHlsZVByb3BlcnR5U2V0
Ojpjb3B5UHJvcGVydGllc0Zyb20oY29uc3QgU3R5bGVQcm9wZXJ0eVNldCYgb3RoZXIpCit7Cisg
ICAgbV9wcm9wZXJ0aWVzID0gb3RoZXIubV9wcm9wZXJ0aWVzOworfQorCitTdHJpbmcgU3R5bGVQ
cm9wZXJ0eVNldDo6Z2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QKK3sKKyAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlE
KTsKKyAgICBpZiAodmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZS0+Y3NzVGV4dCgpOworCisg
ICAgLy8gU2hvcnRoYW5kIGFuZCA0LXZhbHVlcyBwcm9wZXJ0aWVzCisgICAgc3dpdGNoIChwcm9w
ZXJ0eUlEKSB7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTcGFjaW5nOiB7CisgICAg
ICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRCb3Jk
ZXJIb3Jpem9udGFsU3BhY2luZywgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNp
bmcgfTsKKyAgICAgICAgICAgIHJldHVybiBib3JkZXJTcGFjaW5nVmFsdWUocHJvcGVydGllcyk7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbjog
eworICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgY29ycmVjdD8gVGhlIGNvZGUgaW4gY3Nz
cGFyc2VyLmNwcCBpcyBjb25mdXNpbmcKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVz
WzJdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsIENTU1Byb3BlcnR5QmFja2dy
b3VuZFBvc2l0aW9uWSB9OworICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRW
YWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFj
a2dyb3VuZFJlcGVhdDogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7
IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFgsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVh
dFkgfTsKKyAgICAgICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVy
dGllcyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6IHsK
KyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzldID0geyBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
QXR0YWNobWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kT3JpZ2luIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVl
KHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXI6
IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdWzRdID0ge3sgQ1NTUHJvcGVy
dHlCb3JkZXJUb3BXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRl
ckxlZnRXaWR0aCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9t
U3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
b3BlcnR5Qm9yZGVyTGVmdFN0eWxlIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7IENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b21Db2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IgfX07CisgICAgICAgICAgICBTdHJpbmcg
cmVzOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RI
KHByb3BlcnRpZXMpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRD
b21tb25WYWx1ZShwcm9wZXJ0aWVzW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLmlz
TnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcmVzLmlzTnVsbCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzICs9ICIgIjsKKyAgICAgICAgICAgICAgICAgICAgcmVzICs9
IHZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiByZXM7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcDog
eworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3BlcnR5Qm9y
ZGVyVG9wV2lkdGgsIENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcn07CisgICAg
ICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0OiB7CisgICAgICAgICAgICBjb25z
dCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCBDU1NQ
cm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yfTsKKyAgICAgICAgICAgIHJldHVy
biBnZXRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tOiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVy
dGllc1szXSA9IHsgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgQ1NTUHJvcGVydHlCb3Jk
ZXJCb3R0b21TdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yfTsKKyAgICAgICAgICAgIHJldHVybiBnZXRTaG9y
dGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdDogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7
IENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRl
ckxlZnRDb2xvcn07CisgICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVy
dGllcyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmU6IHsKKyAg
ICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eU91dGxpbmVX
aWR0aCwgQ1NTUHJvcGVydHlPdXRsaW5lU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IgfTsKKyAgICAgICAgICAgIHJl
dHVybiBnZXRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3I6IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9w
ZXJ0aWVzWzRdID0geyBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yLCBDU1NQcm9wZXJ0eUJvcmRl
clJpZ2h0Q29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IgfTsK
KyAgICAgICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKHByb3BlcnRpZXMpOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJXaWR0aDogeworICAgICAgICAgICAgY29uc3Qg
aW50IHByb3BlcnRpZXNbNF0gPSB7IENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsIENTU1Byb3Bl
cnR5Qm9yZGVyUmlnaHRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnRX
aWR0aCB9OworICAgICAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMocHJvcGVydGllcyk7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclN0eWxlOiB7CisgICAgICAgICAg
ICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZSwg
Q1NTUHJvcGVydHlCb3JkZXJSaWdodFN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGUsIENTU1Byb3BlcnR5Qm9y
ZGVyTGVmdFN0eWxlIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyhwcm9wZXJ0aWVz
KTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleEZsb3c6IHsK
KyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5V2Via2l0
RmxleERpcmVjdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRGbGV4V3JhcCB9OworICAgICAgICAgICAg
cmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250OgorICAgICAgICAgICAgcmV0dXJuIGZvbnRWYWx1ZSgpOwor
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luOiB7CisgICAgICAgICAgICBjb25zdCBpbnQg
cHJvcGVydGllc1s0XSA9IHsgQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIENTU1Byb3BlcnR5TWFyZ2lu
UmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVy
dHlNYXJnaW5Cb3R0b20sIENTU1Byb3BlcnR5TWFyZ2luTGVmdCB9OworICAgICAgICAgICAgcmV0
dXJuIGdldDRWYWx1ZXMocHJvcGVydGllcyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eU92ZXJmbG93OiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1syXSA9
IHsgQ1NTUHJvcGVydHlPdmVyZmxvd1gsIENTU1Byb3BlcnR5T3ZlcmZsb3dZIH07CisgICAgICAg
ICAgICByZXR1cm4gZ2V0Q29tbW9uVmFsdWUocHJvcGVydGllcyk7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmc6IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9w
ZXJ0aWVzWzRdID0geyBDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsIENTU1Byb3BlcnR5UGFkZGluZ1Jp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5
UGFkZGluZ0JvdHRvbSwgQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCB9OworICAgICAgICAgICAgcmV0
dXJuIGdldDRWYWx1ZXMocHJvcGVydGllcyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUxpc3RTdHlsZTogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10g
PSB7IENTU1Byb3BlcnR5TGlzdFN0eWxlVHlwZSwgQ1NTUHJvcGVydHlMaXN0U3R5bGVQb3NpdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUxp
c3RTdHlsZUltYWdlIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJv
cGVydGllcyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQ
b3NpdGlvbjogeworICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgY29ycmVjdD8gVGhlIGNv
ZGUgaW4gY3NzcGFyc2VyLmNwcCBpcyBjb25mdXNpbmcKKyAgICAgICAgICAgIGNvbnN0IGludCBw
cm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgsIENTU1Byb3Bl
cnR5V2Via2l0TWFza1Bvc2l0aW9uWSB9OworICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRT
aG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFza1JlcGVhdDogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRp
ZXNbMl0gPSB7IENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFgsIENTU1Byb3BlcnR5V2Via2l0
TWFza1JlcGVhdFkgfTsKKyAgICAgICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFs
dWUocHJvcGVydGllcyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2s6IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10gPSB7IENTU1Byb3Bl
cnR5V2Via2l0TWFza0ltYWdlLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tBdHRh
Y2htZW50LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRN
YXNrQ2xpcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3Bl
cnR5V2Via2l0TWFza09yaWdpbiB9OworICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9y
dGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luOiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVy
dGllc1szXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3Jt
T3JpZ2luWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblogfTsKKyAgICAgICAgICAgIHJldHVybiBnZXRTaG9y
dGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNpdGlvbjogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNb
NF0gPSB7IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5LCBDU1NQcm9wZXJ0eVdl
YmtpdFRyYW5zaXRpb25EdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiwgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXkgfTsKKyAgICAgICAgICAgIHJldHVybiBnZXRMYXll
cmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3Bl
cnRpZXNbN10gPSB7IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZSwgQ1NTUHJvcGVydHlX
ZWJraXRBbmltYXRpb25EdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uLCBDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQsIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRmlsbE1vZGUgfTsKKyAg
ICAgICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXA6IHsKKyAgICAgICAg
ICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBGbG93
LCBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBNYXJnaW4sCisgICAgICAgICAgICAgICAgQ1NTUHJvcGVy
dHlXZWJraXRXcmFwUGFkZGluZyB9OworICAgICAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZh
bHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1hcmtlcjogeworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlNYXJrZXJTdGFydCk7CisgICAgICAg
ICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7
CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0
cmluZyBTdHlsZVByb3BlcnR5U2V0Ojpib3JkZXJTcGFjaW5nVmFsdWUoY29uc3QgaW50IHByb3Bl
cnRpZXNbMl0pIGNvbnN0Cit7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBob3Jpem9udGFsVmFsdWUg
PSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbMF0pOworICAgIFJlZlB0cjxDU1NWYWx1
ZT4gdmVydGljYWxWYWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1sxXSk7CisK
KyAgICBpZiAoIWhvcml6b250YWxWYWx1ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
IEFTU0VSVCh2ZXJ0aWNhbFZhbHVlKTsgLy8gQnkgPGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIx
L3RhYmxlcy5odG1sI3NlcGFyYXRlZC1ib3JkZXJzPi4KKworICAgIFN0cmluZyBob3Jpem9udGFs
VmFsdWVDU1NUZXh0ID0gaG9yaXpvbnRhbFZhbHVlLT5jc3NUZXh0KCk7CisgICAgU3RyaW5nIHZl
cnRpY2FsVmFsdWVDU1NUZXh0ID0gdmVydGljYWxWYWx1ZS0+Y3NzVGV4dCgpOworICAgIGlmICho
b3Jpem9udGFsVmFsdWVDU1NUZXh0ID09IHZlcnRpY2FsVmFsdWVDU1NUZXh0KQorICAgICAgICBy
ZXR1cm4gaG9yaXpvbnRhbFZhbHVlQ1NTVGV4dDsKKyAgICByZXR1cm4gaG9yaXpvbnRhbFZhbHVl
Q1NTVGV4dCArICcgJyArIHZlcnRpY2FsVmFsdWVDU1NUZXh0OworfQorCitib29sIFN0eWxlUHJv
cGVydHlTZXQ6OmFwcGVuZEZvbnRMb25naGFuZFZhbHVlSWZFeHBsaWNpdChpbnQgcHJvcGVydHlJ
ZCwgU3RyaW5nQnVpbGRlciYgcmVzdWx0KSBjb25zdAoreworICAgIGNvbnN0IENTU1Byb3BlcnR5
KiBwcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eUlkKTsKKyAgICBpZiAoIXBy
b3BlcnR5KQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEFsbCBsb25naGFuZHMgbXVzdCBoYXZl
IGF0IGxlYXN0IGltcGxpY2l0IHZhbHVlcyBpZiAiZm9udCIgaXMgc3BlY2lmaWVkLgorICAgIGlm
IChwcm9wZXJ0eS0+aXNJbXBsaWNpdCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNo
YXIgcHJlZml4ID0gJ1wwJzsKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIENT
U1Byb3BlcnR5Rm9udFN0eWxlOgorICAgICAgICBicmVhazsgLy8gTm8gcHJlZml4LgorICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFu
dDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFdlaWdodDoKKyAgICAgICAgcHJlZml4ID0gJyAn
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5TGluZUhlaWdodDoKKyAgICAg
ICAgcHJlZml4ID0gJy8nOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAocHJlZml4ICYmICFyZXN1bHQu
aXNFbXB0eSgpKQorICAgICAgICByZXN1bHQuYXBwZW5kKHByZWZpeCk7CisgICAgcmVzdWx0LmFw
cGVuZChwcm9wZXJ0eS0+dmFsdWUoKS0+Y3NzVGV4dCgpKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Zm9udFZhbHVlKCkgY29uc3QKK3sKKyAgICBj
b25zdCBDU1NQcm9wZXJ0eSogZm9udFNpemVQcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChD
U1NQcm9wZXJ0eUZvbnRTaXplKTsKKyAgICBpZiAoIWZvbnRTaXplUHJvcGVydHkgfHwgZm9udFNp
emVQcm9wZXJ0eS0+aXNJbXBsaWNpdCgpKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
KworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Cisg
ICAgc3VjY2VzcyAmPSBhcHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlmRXhwbGljaXQoQ1NTUHJvcGVy
dHlGb250U3R5bGUsIHJlc3VsdCk7CisgICAgc3VjY2VzcyAmPSBhcHBlbmRGb250TG9uZ2hhbmRW
YWx1ZUlmRXhwbGljaXQoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgcmVzdWx0KTsKKyAgICBzdWNj
ZXNzICY9IGFwcGVuZEZvbnRMb25naGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUZvbnRX
ZWlnaHQsIHJlc3VsdCk7CisgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCcgJyk7CisgICAgcmVzdWx0LmFwcGVuZChmb250U2l6ZVByb3BlcnR5LT52YWx1
ZSgpLT5jc3NUZXh0KCkpOworICAgIHN1Y2Nlc3MgJj0gYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJ
ZkV4cGxpY2l0KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcmVzdWx0KTsKKyAgICBzdWNjZXNzICY9
IGFwcGVuZEZvbnRMb25naGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUZvbnRGYW1pbHks
IHJlc3VsdCk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIC8vIEFuIGludmFsaWQgImZv
bnQiIHZhbHVlIGhhcyBiZWVuIGJ1aWx0IChzaG91bGQgbmV2ZXIgaGFwcGVuLCBhcyBhdCBsZWFz
dCBpbXBsaWNpdCB2YWx1ZXMKKyAgICAgICAgLy8gZm9yIG1hbmRhdG9yeSBsb25naGFuZHMgYXJl
IGFsd2F5cyBmb3VuZCBpbiB0aGUgc3R5bGUpLCByZXBvcnQgZW1wdHkgdmFsdWUgaW5zdGVhZC4K
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBT
dHlsZVByb3BlcnR5U2V0OjpnZXQ0VmFsdWVzKGNvbnN0IGludCogcHJvcGVydGllcykgY29uc3QK
K3sKKyAgICAvLyBBc3N1bWUgdGhlIHByb3BlcnRpZXMgYXJlIGluIHRoZSB1c3VhbCBvcmRlciB0
b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQuCisgICAgUmVmUHRyPENTU1ZhbHVlPiB0b3BWYWx1ZSA9
IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1swXSk7CisgICAgUmVmUHRyPENTU1ZhbHVl
PiByaWdodFZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzFdKTsKKyAgICBS
ZWZQdHI8Q1NTVmFsdWU+IGJvdHRvbVZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0
aWVzWzJdKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGxlZnRWYWx1ZSA9IGdldFByb3BlcnR5Q1NT
VmFsdWUocHJvcGVydGllc1szXSk7CisKKyAgICAvLyBBbGwgNCBwcm9wZXJ0aWVzIG11c3QgYmUg
c3BlY2lmaWVkLgorICAgIGlmICghdG9wVmFsdWUgfHwgIXJpZ2h0VmFsdWUgfHwgIWJvdHRvbVZh
bHVlIHx8ICFsZWZ0VmFsdWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGJvb2wg
c2hvd0xlZnQgPSByaWdodFZhbHVlLT5jc3NUZXh0KCkgIT0gbGVmdFZhbHVlLT5jc3NUZXh0KCk7
CisgICAgYm9vbCBzaG93Qm90dG9tID0gKHRvcFZhbHVlLT5jc3NUZXh0KCkgIT0gYm90dG9tVmFs
dWUtPmNzc1RleHQoKSkgfHwgc2hvd0xlZnQ7CisgICAgYm9vbCBzaG93UmlnaHQgPSAodG9wVmFs
dWUtPmNzc1RleHQoKSAhPSByaWdodFZhbHVlLT5jc3NUZXh0KCkpIHx8IHNob3dCb3R0b207CisK
KyAgICBTdHJpbmcgcmVzID0gdG9wVmFsdWUtPmNzc1RleHQoKTsKKyAgICBpZiAoc2hvd1JpZ2h0
KQorICAgICAgICByZXMgKz0gIiAiICsgcmlnaHRWYWx1ZS0+Y3NzVGV4dCgpOworICAgIGlmIChz
aG93Qm90dG9tKQorICAgICAgICByZXMgKz0gIiAiICsgYm90dG9tVmFsdWUtPmNzc1RleHQoKTsK
KyAgICBpZiAoc2hvd0xlZnQpCisgICAgICAgIHJlcyArPSAiICIgKyBsZWZ0VmFsdWUtPmNzc1Rl
eHQoKTsKKworICAgIHJldHVybiByZXM7Cit9CisKK1N0cmluZyBTdHlsZVByb3BlcnR5U2V0Ojpn
ZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBzaXplX3Qgc2l6
ZSkgY29uc3QKK3sKKyAgICBTdHJpbmcgcmVzOworCisgICAgLy8gQmVnaW4gYnkgY29sbGVjdGlu
ZyB0aGUgcHJvcGVydGllcyBpbnRvIGFuIGFycmF5LgorICAgIFZlY3RvcjwgUmVmUHRyPENTU1Zh
bHVlPiA+IHZhbHVlcyhzaXplKTsKKyAgICBzaXplX3QgbnVtTGF5ZXJzID0gMDsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIHZhbHVlc1tpXSA9IGdl
dFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1tpXSk7CisgICAgICAgIGlmICh2YWx1ZXNbaV0p
IHsKKyAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0tPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAg
ICAgICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlz
dCo+KHZhbHVlc1tpXS5nZXQoKSk7CisgICAgICAgICAgICAgICAgbnVtTGF5ZXJzID0gbWF4KHZh
bHVlTGlzdC0+bGVuZ3RoKCksIG51bUxheWVycyk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBudW1MYXllcnMgPSBtYXg8c2l6ZV90PigxVSwgbnVtTGF5ZXJzKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIE5vdyBzdGl0Y2ggdGhlIHByb3BlcnRpZXMgdG9nZXRoZXIu
ICBJbXBsaWNpdCBpbml0aWFsIHZhbHVlcyBhcmUgZmxhZ2dlZCBhcyBzdWNoIGFuZAorICAgIC8v
IGNhbiBzYWZlbHkgYmUgb21pdHRlZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUxh
eWVyczsgaSsrKSB7CisgICAgICAgIFN0cmluZyBsYXllclJlczsKKyAgICAgICAgYm9vbCB1c2VS
ZXBlYXRYU2hvcnRoYW5kID0gZmFsc2U7CisgICAgICAgIGJvb2wgdXNlUmVwZWF0WVNob3J0aGFu
ZCA9IGZhbHNlOworICAgICAgICBib29sIHVzZVNpbmdsZVdvcmRTaG9ydGhhbmQgPSBmYWxzZTsK
KyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7CisgICAgICAgICAgICBpZiAodmFsdWVzW2pdKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHZhbHVlc1tqXS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZXNbal0uZ2V0
KCkpLT5pdGVtKGkpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IHZhbHVlc1tqXTsKKworICAgICAgICAgICAgICAgICAgICAvLyBDb2xvciBvbmx5
IGJlbG9uZ3MgaW4gdGhlIGxhc3QgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9w
ZXJ0aWVzW2pdID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaSAhPSBudW1MYXllcnMgLSAxKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpICE9IDAp
IC8vIE90aGVyIHNpbmdsZXRvbnMgb25seSBiZWxvbmcgaW4gdGhlIGZpcnN0IGxheWVyLgorICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZXBvcnQgYmFja2dyb3VuZC1y
ZXBlYXQgYXMgaXQgd2FzIHdyaXR0ZW4gaW4gdGhlIENTUy4gSWYgdGhlIHByb3BlcnR5IGlzIGlt
cGxpY2l0LAorICAgICAgICAgICAgLy8gdGhlbiBpdCB3YXMgd3JpdHRlbiB3aXRoIG9ubHkgb25l
IHZhbHVlLiBIZXJlIHdlIGZpZ3VyZSBvdXQgd2hpY2ggdmFsdWUgdGhhdCB3YXMgc28gd2UgY2Fu
CisgICAgICAgICAgICAvLyByZXBvcnQgYmFjayBjb3JyZWN0bHkuCisgICAgICAgICAgICBpZiAo
cHJvcGVydGllc1tqXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYICYmIGlzUHJvcGVy
dHlJbXBsaWNpdChwcm9wZXJ0aWVzW2pdKSkgeworCisgICAgICAgICAgICAgICAgLy8gQlVHIDQ5
MDU1OiBtYWtlIHN1cmUgdGhlIHZhbHVlIHdhcyBub3QgcmVzZXQgaW4gdGhlIGxheWVyIGNoZWNr
IGp1c3QgYWJvdmUuCisgICAgICAgICAgICAgICAgaWYgKGogPCBzaXplIC0gMSAmJiBwcm9wZXJ0
aWVzW2ogKyAxXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZICYmIHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4geVZhbHVlOworICAgICAgICAgICAg
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IG5leHRWYWx1ZSA9IHZhbHVlc1tqICsgMV07CisgICAg
ICAgICAgICAgICAgICAgIGlmIChuZXh0VmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICB5VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihuZXh0VmFs
dWUuZ2V0KCkpLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB5VmFsdWUgPSBuZXh0VmFsdWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgaW50IHhJZCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUuZ2V0KCkpLT5nZXRJZGVudCgpOworICAgICAgICAgICAgICAgICAgICBpbnQgeUlk
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih5VmFsdWUuZ2V0KCkpLT5nZXRJZGVu
dCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoeElkICE9IHlJZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHhJZCA9PSBDU1NWYWx1ZVJlcGVhdCAmJiB5SWQgPT0gQ1NTVmFsdWVO
b1JlcGVhdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJlcGVhdFhTaG9ydGhh
bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrajsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoeElkID09IENTU1ZhbHVlTm9SZXBlYXQgJiYgeUlkID09
IENTU1ZhbHVlUmVwZWF0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwZWF0
WVNob3J0aGFuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB1c2VTaW5nbGVXb3JkU2hvcnRoYW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICsrajsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHZhbHVlICYm
ICF2YWx1ZS0+aXNJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFsYXllclJlcy5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXJSZXMgKz0gIiAi
OworICAgICAgICAgICAgICAgIGlmICh1c2VSZXBlYXRYU2hvcnRoYW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgIHVzZVJlcGVhdFhTaG9ydGhhbmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgbGF5ZXJSZXMgKz0gZ2V0VmFsdWVOYW1lKENTU1ZhbHVlUmVwZWF0WCk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICh1c2VSZXBlYXRZU2hvcnRoYW5kKSB7CisgICAgICAgICAgICAgICAg
ICAgIHVzZVJlcGVhdFlTaG9ydGhhbmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbGF5
ZXJSZXMgKz0gZ2V0VmFsdWVOYW1lKENTU1ZhbHVlUmVwZWF0WSk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICh1c2VTaW5nbGVXb3JkU2hvcnRoYW5kKSB7CisgICAgICAgICAgICAgICAgICAg
IHVzZVNpbmdsZVdvcmRTaG9ydGhhbmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbGF5
ZXJSZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgbGF5ZXJSZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghbGF5ZXJSZXMuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgIGlmICghcmVzLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIHJlcyArPSAiLCAiOwor
ICAgICAgICAgICAgcmVzICs9IGxheWVyUmVzOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHJlczsKK30KKworU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldFNob3J0aGFuZFZhbHVl
KGNvbnN0IGludCogcHJvcGVydGllcywgc2l6ZV90IHNpemUpIGNvbnN0Cit7CisgICAgU3RyaW5n
IHJlczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBp
ZiAoIWlzUHJvcGVydHlJbXBsaWNpdChwcm9wZXJ0aWVzW2ldKSkgeworICAgICAgICAgICAgUmVm
UHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1tpXSk7
CisgICAgICAgICAgICAvLyBGSVhNRTogcHJvdmlkZSBkZWZhdWx0IHZhbHVlIGlmICF2YWx1ZQor
ICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFyZXMuaXNOdWxs
KCkpCisgICAgICAgICAgICAgICAgICAgIHJlcyArPSAiICI7CisgICAgICAgICAgICAgICAgcmVz
ICs9IHZhbHVlLT5jc3NUZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIHJlczsKK30KKworLy8gb25seSByZXR1cm5zIGEgbm9uLW51bGwgdmFsdWUgaWYg
YWxsIHByb3BlcnRpZXMgaGF2ZSB0aGUgc2FtZSwgbm9uLW51bGwgdmFsdWUKK1N0cmluZyBTdHls
ZVByb3BlcnR5U2V0OjpnZXRDb21tb25WYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHNpemVf
dCBzaXplKSBjb25zdAoreworICAgIFN0cmluZyByZXM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFBy
b3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1tpXSk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gdmFsdWUtPmNz
c1RleHQoKTsKKyAgICAgICAgaWYgKHRleHQuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgICAgIGlmIChyZXMuaXNOdWxsKCkpCisgICAgICAgICAgICByZXMgPSB0
ZXh0OworICAgICAgICBlbHNlIGlmIChyZXMgIT0gdGV4dCkKKyAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gU3R5bGVQcm9wZXJ0eVNldDo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkg
Y29uc3QKK3sKKyAgICBjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkgPSBmaW5kUHJvcGVydHlX
aXRoSWQocHJvcGVydHlJRCk7CisgICAgcmV0dXJuIHByb3BlcnR5ID8gcHJvcGVydHktPnZhbHVl
KCkgOiAwOworfQorCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZVNob3J0aGFuZFByb3Bl
cnR5KGludCBwcm9wZXJ0eUlEKQoreworICAgIENTU1Byb3BlcnR5TG9uZ2hhbmQgbG9uZ2hhbmQg
PSBsb25naGFuZEZvclByb3BlcnR5KHByb3BlcnR5SUQpOworICAgIGlmICghbG9uZ2hhbmQubGVu
Z3RoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVtb3ZlUHJvcGVydGll
c0luU2V0KGxvbmdoYW5kLnByb3BlcnRpZXMoKSwgbG9uZ2hhbmQubGVuZ3RoKCkpOworfQorCiti
b29sIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBTdHJp
bmcqIHJldHVyblRleHQpCit7CisgICAgaWYgKHJlbW92ZVNob3J0aGFuZFByb3BlcnR5KHByb3Bl
cnR5SUQpKSB7CisgICAgICAgIC8vIEZJWE1FOiBSZXR1cm4gYW4gZXF1aXZhbGVudCBzaG9ydGhh
bmQgd2hlbiBwb3NzaWJsZS4KKyAgICAgICAgaWYgKHJldHVyblRleHQpCisgICAgICAgICAgICAq
cmV0dXJuVGV4dCA9ICIiOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBDU1NQ
cm9wZXJ0eSogZm91bmRQcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsK
KyAgICBpZiAoIWZvdW5kUHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHJldHVyblRleHQpCisgICAg
ICAgICAgICAqcmV0dXJuVGV4dCA9ICIiOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKHJldHVyblRleHQpCisgICAgICAgICpyZXR1cm5UZXh0ID0gZm91bmRQcm9wZXJ0
eS0+dmFsdWUoKS0+Y3NzVGV4dCgpOworCisgICAgLy8gQSBtb3JlIGVmZmljaWVudCByZW1vdmFs
IHN0cmF0ZWd5IHdvdWxkIGludm9sdmUgbWFya2luZyBlbnRyaWVzIGFzIGVtcHR5CisgICAgLy8g
YW5kIHN3ZWVwaW5nIHRoZW0gd2hlbiB0aGUgdmVjdG9yIGdyb3dzIHRvbyBiaWcuCisgICAgbV9w
cm9wZXJ0aWVzLnJlbW92ZShmb3VuZFByb3BlcnR5IC0gbV9wcm9wZXJ0aWVzLmRhdGEoKSk7Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cHJvcGVy
dHlJc0ltcG9ydGFudChpbnQgcHJvcGVydHlJRCkgY29uc3QKK3sKKyAgICBjb25zdCBDU1NQcm9w
ZXJ0eSogcHJvcGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHlJRCk7CisgICAgaWYg
KHByb3BlcnR5KQorICAgICAgICByZXR1cm4gcHJvcGVydHktPmlzSW1wb3J0YW50KCk7CisKKyAg
ICBDU1NQcm9wZXJ0eUxvbmdoYW5kIGxvbmdoYW5kcyA9IGxvbmdoYW5kRm9yUHJvcGVydHkocHJv
cGVydHlJRCk7CisgICAgaWYgKCFsb25naGFuZHMubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb25naGFuZHMubGVuZ3RoKCk7
ICsraSkgeworICAgICAgICBpZiAoIXByb3BlcnR5SXNJbXBvcnRhbnQobG9uZ2hhbmRzLnByb3Bl
cnRpZXMoKVtpXSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitpbnQgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0UHJvcGVydHlTaG9ydGhhbmQo
aW50IHByb3BlcnR5SUQpIGNvbnN0Cit7CisgICAgY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5
ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOworICAgIHJldHVybiBwcm9wZXJ0eSA/
IHByb3BlcnR5LT5zaG9ydGhhbmRJRCgpIDogMDsKK30KKworYm9vbCBTdHlsZVByb3BlcnR5U2V0
Ojppc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0Cit7CisgICAgY29uc3Qg
Q1NTUHJvcGVydHkqIHByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOwor
ICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LT5pc0ltcGxpY2l0KCkgOiBmYWxzZTsKK30K
KworYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRT
dHlsZVNoZWV0KQoreworICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIHRvIGFuIGVtcHR5IHN0cmlu
ZyBqdXN0IHJlbW92ZXMgdGhlIHByb3BlcnR5IGluIGJvdGggSUUgYW5kIEdlY2tvLgorICAgIC8v
IFNldHRpbmcgaXQgdG8gbnVsbCBzZWVtcyB0byBwcm9kdWNlIGxlc3MgY29uc2lzdGVudCByZXN1
bHRzLCBidXQgd2UgdHJlYXQgaXQganVzdCB0aGUgc2FtZS4KKyAgICBpZiAodmFsdWUuaXNFbXB0
eSgpKSB7CisgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBXaGVuIHJlcGxhY2luZyBhbiBleGlzdGluZyBwcm9w
ZXJ0eSB2YWx1ZSwgdGhpcyBtb3ZlcyB0aGUgcHJvcGVydHkgdG8gdGhlIGVuZCBvZiB0aGUgbGlz
dC4KKyAgICAvLyBGaXJlZm94IHByZXNlcnZlcyB0aGUgcG9zaXRpb24sIGFuZCBNU0lFIG1vdmVz
IHRoZSBwcm9wZXJ0eSB0byB0aGUgYmVnaW5uaW5nLgorICAgIHJldHVybiBDU1NQYXJzZXI6OnBh
cnNlVmFsdWUodGhpcywgcHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgdXNlU3RyaWN0UGFy
c2luZygpLCBjb250ZXh0U3R5bGVTaGVldCk7Cit9CisKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6
c2V0UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eSogc2xv
dCkKK3sKKyAgICBpZiAoIXJlbW92ZVNob3J0aGFuZFByb3BlcnR5KHByb3BlcnR5LmlkKCkpKSB7
CisgICAgICAgIENTU1Byb3BlcnR5KiB0b1JlcGxhY2UgPSBzbG90ID8gc2xvdCA6IGZpbmRQcm9w
ZXJ0eVdpdGhJZChwcm9wZXJ0eS5pZCgpKTsKKyAgICAgICAgaWYgKHRvUmVwbGFjZSkgeworICAg
ICAgICAgICAgKnRvUmVwbGFjZSA9IHByb3BlcnR5OworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIG1fcHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOworfQorCiti
b29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgaWRl
bnRpZmllciwgYm9vbCBpbXBvcnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0
KQoreworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWU7ICAgIAorICAgIGlmIChE
b2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0U3R5bGVTaGVldCA/IGNvbnRleHRTdHlsZVNoZWV0
LT5maW5kRG9jdW1lbnQoKSA6IDApCisgICAgICAgIHZhbHVlID0gZG9jdW1lbnQtPmNzc1ZhbHVl
UG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWRlbnRpZmllcik7CisgICAgZWxzZQorICAg
ICAgICB2YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKGlkZW50aWZp
ZXIpOworCisgICAgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUucmVs
ZWFzZSgpLCBpbXBvcnRhbnQpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdHlsZVBy
b3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgZG91YmxlIG51bWJlciwgQ1NT
UHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB1bml0LCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVT
aGVldCogY29udGV4dFN0eWxlU2hlZXQpCit7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiB2YWx1ZTsgICAgCisgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHRTdHlsZVNo
ZWV0ID8gY29udGV4dFN0eWxlU2hlZXQtPmZpbmREb2N1bWVudCgpIDogMCkKKyAgICAgICAgdmFs
dWUgPSBkb2N1bWVudC0+Y3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKG51bWJlciwgdW5pdCk7
CisgICAgZWxzZQorICAgICAgICB2YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobnVt
YmVyLCB1bml0KTsKKyAgICBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1
ZSwgaW1wb3J0YW50KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU3R5bGVQcm9wZXJ0
eVNldDo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFyYXRpb24sIENT
U1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQoreworICAgIG1fcHJvcGVydGllcy5jbGVh
cigpOworICAgIENTU1BhcnNlciBwYXJzZXIodXNlU3RyaWN0UGFyc2luZygpKTsKKyAgICBwYXJz
ZXIucGFyc2VEZWNsYXJhdGlvbih0aGlzLCBzdHlsZURlY2xhcmF0aW9uLCAwLCBjb250ZXh0U3R5
bGVTaGVldCk7Cit9CisKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydGll
cyhjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QqIHByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVz
KQoreworICAgIG1fcHJvcGVydGllcy5yZXNlcnZlQ2FwYWNpdHkobnVtUHJvcGVydGllcyk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpCisgICAgICAgIGFkZFBh
cnNlZFByb3BlcnR5KCpwcm9wZXJ0aWVzW2ldKTsKK30KKwordm9pZCBTdHlsZVByb3BlcnR5U2V0
OjphZGRQYXJzZWRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkpCit7CisgICAg
Ly8gT25seSBhZGQgcHJvcGVydGllcyB0aGF0IGhhdmUgbm8gIWltcG9ydGFudCBjb3VudGVycGFy
dCBwcmVzZW50CisgICAgaWYgKCFwcm9wZXJ0eUlzSW1wb3J0YW50KHByb3BlcnR5LmlkKCkpIHx8
IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKKyAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVy
dHkuaWQoKSk7CisgICAgICAgIG1fcHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOworICAgIH0K
K30KKworU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmFzVGV4dCgpIGNvbnN0Cit7CisgICAgU3Ry
aW5nIHJlc3VsdCA9ICIiOworCisgICAgY29uc3QgQ1NTUHJvcGVydHkqIHBvc2l0aW9uWFByb3Ag
PSAwOworICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwb3NpdGlvbllQcm9wID0gMDsKKyAgICBjb25z
dCBDU1NQcm9wZXJ0eSogcmVwZWF0WFByb3AgPSAwOworICAgIGNvbnN0IENTU1Byb3BlcnR5KiBy
ZXBlYXRZUHJvcCA9IDA7CisKKyAgICB1bnNpZ25lZCBzaXplID0gbV9wcm9wZXJ0aWVzLnNpemUo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgKytuKSB7CisgICAgICAgIGNv
bnN0IENTU1Byb3BlcnR5JiBwcm9wID0gbV9wcm9wZXJ0aWVzW25dOworICAgICAgICBpZiAocHJv
cC5pZCgpID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCkKKyAgICAgICAgICAgIHBv
c2l0aW9uWFByb3AgPSAmcHJvcDsKKyAgICAgICAgZWxzZSBpZiAocHJvcC5pZCgpID09IENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSkKKyAgICAgICAgICAgIHBvc2l0aW9uWVByb3AgPSAm
cHJvcDsKKyAgICAgICAgZWxzZSBpZiAocHJvcC5pZCgpID09IENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFJlcGVhdFgpCisgICAgICAgICAgICByZXBlYXRYUHJvcCA9ICZwcm9wOworICAgICAgICBlbHNl
IGlmIChwcm9wLmlkKCkgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WSkKKyAgICAgICAg
ICAgIHJlcGVhdFlQcm9wID0gJnByb3A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBwcm9wLmNzc1RleHQoKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIG5v
dC1zby1uaWNlIHdheSB0byB0dXJuIHgveSBwb3NpdGlvbnMgaW50byBzaW5nbGUgYmFja2dyb3Vu
ZC1wb3NpdGlvbiBpbiBvdXRwdXQuCisgICAgLy8gSXQgaXMgcmVxdWlyZWQgYmVjYXVzZSBiYWNr
Z3JvdW5kLXBvc2l0aW9uLXgveSBhcmUgbm9uLXN0YW5kYXJkIHByb3BlcnRpZXMgYW5kIFdlYktp
dCBnZW5lcmF0ZWQgb3V0cHV0CisgICAgLy8gd291bGQgbm90IHdvcmsgaW4gRmlyZWZveCAoPHJk
YXI6Ly9wcm9ibGVtLzUxNDMxODM+KQorICAgIC8vIEl0IHdvdWxkIGJlIGEgYmV0dGVyIHNvbHV0
aW9uIGlmIGJhY2tncm91bmQtcG9zaXRpb24gd2FzIENTU19QQUlSLgorICAgIGlmIChwb3NpdGlv
blhQcm9wICYmIHBvc2l0aW9uWVByb3AgJiYgcG9zaXRpb25YUHJvcC0+aXNJbXBvcnRhbnQoKSA9
PSBwb3NpdGlvbllQcm9wLT5pc0ltcG9ydGFudCgpKSB7CisgICAgICAgIFN0cmluZyBwb3NpdGlv
blZhbHVlOworICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUG9zaXRpb25YLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblkgfTsKKyAg
ICAgICAgaWYgKHBvc2l0aW9uWFByb3AtPnZhbHVlKCktPmlzVmFsdWVMaXN0KCkgfHwgcG9zaXRp
b25ZUHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgIHBvc2l0aW9uVmFs
dWUgPSBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHBvc2l0aW9uVmFsdWUgPSBwb3NpdGlvblhQcm9wLT52YWx1ZSgpLT5jc3NU
ZXh0KCkgKyAiICIgKyBwb3NpdGlvbllQcm9wLT52YWx1ZSgpLT5jc3NUZXh0KCk7CisgICAgICAg
IHJlc3VsdCArPSAiYmFja2dyb3VuZC1wb3NpdGlvbjogIiArIHBvc2l0aW9uVmFsdWUgKyAocG9z
aXRpb25YUHJvcC0+aXNJbXBvcnRhbnQoKSA/ICIgIWltcG9ydGFudCIgOiAiIikgKyAiOyAiOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChwb3NpdGlvblhQcm9wKQorICAgICAgICAgICAgcmVz
dWx0ICs9IHBvc2l0aW9uWFByb3AtPmNzc1RleHQoKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uWVBy
b3ApCisgICAgICAgICAgICByZXN1bHQgKz0gcG9zaXRpb25ZUHJvcC0+Y3NzVGV4dCgpOworICAg
IH0KKworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGRvIHRoZSBzYW1lIGZvciBiYWNrZ3JvdW5k
LXJlcGVhdC4KKyAgICBpZiAocmVwZWF0WFByb3AgJiYgcmVwZWF0WVByb3AgJiYgcmVwZWF0WFBy
b3AtPmlzSW1wb3J0YW50KCkgPT0gcmVwZWF0WVByb3AtPmlzSW1wb3J0YW50KCkpIHsKKyAgICAg
ICAgU3RyaW5nIHJlcGVhdFZhbHVlOworICAgICAgICBjb25zdCBpbnQgcmVwZWF0UHJvcGVydGll
c1syXSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUmVwZWF0WSB9OworICAgICAgICBpZiAocmVwZWF0WFByb3AtPnZhbHVlKCktPmlzVmFsdWVM
aXN0KCkgfHwgcmVwZWF0WVByb3AtPnZhbHVlKCktPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAg
ICByZXBlYXRWYWx1ZSA9IGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShyZXBlYXRQcm9wZXJ0aWVz
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwZWF0VmFsdWUgPSByZXBlYXRYUHJvcC0+
dmFsdWUoKS0+Y3NzVGV4dCgpICsgIiAiICsgcmVwZWF0WVByb3AtPnZhbHVlKCktPmNzc1RleHQo
KTsKKyAgICAgICAgcmVzdWx0ICs9ICJiYWNrZ3JvdW5kLXJlcGVhdDogIiArIHJlcGVhdFZhbHVl
ICsgKHJlcGVhdFhQcm9wLT5pc0ltcG9ydGFudCgpID8gIiAhaW1wb3J0YW50IiA6ICIiKSArICI7
ICI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHJlcGVhdFhQcm9wKQorICAgICAgICAgICAg
cmVzdWx0ICs9IHJlcGVhdFhQcm9wLT5jc3NUZXh0KCk7CisgICAgICAgIGlmIChyZXBlYXRZUHJv
cCkKKyAgICAgICAgICAgIHJlc3VsdCArPSByZXBlYXRZUHJvcC0+Y3NzVGV4dCgpOworICAgIH0K
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6bWVyZ2Uo
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCogb3RoZXIsIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25mbGlj
dCkKK3sKKyAgICB1bnNpZ25lZCBzaXplID0gb3RoZXItPm1fcHJvcGVydGllcy5zaXplKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHNpemU7ICsrbikgeworICAgICAgICBjb25zdCBD
U1NQcm9wZXJ0eSYgdG9NZXJnZSA9IG90aGVyLT5tX3Byb3BlcnRpZXNbbl07CisgICAgICAgIENT
U1Byb3BlcnR5KiBvbGQgPSBmaW5kUHJvcGVydHlXaXRoSWQodG9NZXJnZS5pZCgpKTsKKyAgICAg
ICAgaWYgKG9sZCkgeworICAgICAgICAgICAgaWYgKCFhcmdPdmVycmlkZXNPbkNvbmZsaWN0ICYm
IG9sZC0+dmFsdWUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHNl
dFByb3BlcnR5KHRvTWVyZ2UsIG9sZCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9w
cm9wZXJ0aWVzLmFwcGVuZCh0b01lcmdlKTsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVQcm9wZXJ0
eVNldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIENT
U1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQoreworICAgIHNpemVfdCBzaXplID0gbV9w
cm9wZXJ0aWVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkK
KyAgICAgICAgbV9wcm9wZXJ0aWVzW2ldLnZhbHVlKCktPmFkZFN1YnJlc291cmNlU3R5bGVVUkxz
KHVybHMsIGNvbnRleHRTdHlsZVNoZWV0KTsKK30KKworLy8gVGhpcyBpcyB0aGUgbGlzdCBvZiBw
cm9wZXJ0aWVzIHdlIHdhbnQgdG8gY29weSBpbiB0aGUgY29weUJsb2NrUHJvcGVydGllcygpIGZ1
bmN0aW9uLgorLy8gSXQgaXMgdGhlIGxpc3Qgb2YgQ1NTIHByb3BlcnRpZXMgdGhhdCBhcHBseSBz
cGVjaWFsbHkgdG8gYmxvY2stbGV2ZWwgZWxlbWVudHMuCitzdGF0aWMgY29uc3QgaW50IGJsb2Nr
UHJvcGVydGllc1tdID0geworICAgIENTU1Byb3BlcnR5T3JwaGFucywKKyAgICBDU1NQcm9wZXJ0
eU92ZXJmbG93LCAvLyBUaGlzIGNhbiBiZSBhbHNvIGJlIGFwcGxpZWQgdG8gcmVwbGFjZWQgZWxl
bWVudHMKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLAorICAgIENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uQ291bnQsCisgICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5HYXAsCisgICAg
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3IsCisgICAgQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5SdWxlU3R5bGUsCisgICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlV2lkdGgsCisg
ICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0JlZm9yZSwKKyAgICBDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtbkJyZWFrQWZ0ZXIsCisgICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0lu
c2lkZSwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbldpZHRoLAorICAgIENTU1Byb3BlcnR5
UGFnZUJyZWFrQWZ0ZXIsCisgICAgQ1NTUHJvcGVydHlQYWdlQnJlYWtCZWZvcmUsCisgICAgQ1NT
UHJvcGVydHlQYWdlQnJlYWtJbnNpZGUsCisgICAgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVh
a0FmdGVyLAorICAgIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtCZWZvcmUsCisgICAgQ1NT
UHJvcGVydHlXZWJraXRSZWdpb25CcmVha0luc2lkZSwKKyAgICBDU1NQcm9wZXJ0eVRleHRBbGln
biwKKyAgICBDU1NQcm9wZXJ0eVRleHRJbmRlbnQsCisgICAgQ1NTUHJvcGVydHlXaWRvd3MKK307
CisKK2NvbnN0IHVuc2lnbmVkIG51bUJsb2NrUHJvcGVydGllcyA9IFdURl9BUlJBWV9MRU5HVEgo
YmxvY2tQcm9wZXJ0aWVzKTsKKworUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBTdHlsZVBy
b3BlcnR5U2V0Ojpjb3B5QmxvY2tQcm9wZXJ0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29w
eVByb3BlcnRpZXNJblNldChibG9ja1Byb3BlcnRpZXMsIG51bUJsb2NrUHJvcGVydGllcyk7Cit9
CisKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCkKK3sKKyAg
ICByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9wZXJ0aWVzLCBudW1CbG9ja1Byb3BlcnRp
ZXMpOworfQorCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZVByb3BlcnRpZXNJblNldChj
b25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChtX3Byb3BlcnRpZXMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyBhbHdheXMgdXNlZCB3aXRoIHN0YXRpYyBzZXRzIGFuZCBpbiB0aGF0IGNhc2UgY29uc3RydWN0
aW5nIHRoZSBoYXNoIHJlcGVhdGVkbHkgaXMgcHJldHR5IHBvaW50bGVzcy4KKyAgICBIYXNoU2V0
PGludD4gdG9SZW1vdmU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQorICAgICAgICB0b1JlbW92ZS5hZGQoc2V0W2ldKTsKKworICAgIFZlY3RvcjxDU1NQcm9wZXJ0
eSwgND4gbmV3UHJvcGVydGllczsKKyAgICBuZXdQcm9wZXJ0aWVzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobV9wcm9wZXJ0aWVzLnNpemUoKSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gbV9wcm9w
ZXJ0aWVzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgKytuKSB7
CisgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9IG1fcHJvcGVydGllc1tuXTsK
KyAgICAgICAgLy8gTm90IHF1aXRlIHN1cmUgaWYgdGhlIGlzSW1wb3J0YW50IHRlc3QgaXMgbmVl
ZGVkIGJ1dCBpdCBtYXRjaGVzIHRoZSBleGlzdGluZyBiZWhhdmlvci4KKyAgICAgICAgaWYgKCFw
cm9wZXJ0eS5pc0ltcG9ydGFudCgpKSB7CisgICAgICAgICAgICBpZiAodG9SZW1vdmUuY29udGFp
bnMocHJvcGVydHkuaWQoKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICAgICAgbmV3UHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOworICAgIH0KKworICAgIGJv
b2wgY2hhbmdlZCA9IG5ld1Byb3BlcnRpZXMuc2l6ZSgpICE9IG1fcHJvcGVydGllcy5zaXplKCk7
CisgICAgbV9wcm9wZXJ0aWVzID0gbmV3UHJvcGVydGllczsKKyAgICByZXR1cm4gY2hhbmdlZDsK
K30KKworY29uc3QgQ1NTUHJvcGVydHkqIFN0eWxlUHJvcGVydHlTZXQ6OmZpbmRQcm9wZXJ0eVdp
dGhJZChpbnQgcHJvcGVydHlJRCkgY29uc3QKK3sKKyAgICBmb3IgKGludCBuID0gbV9wcm9wZXJ0
aWVzLnNpemUoKSAtIDEgOyBuID49IDA7IC0tbikgeworICAgICAgICBpZiAocHJvcGVydHlJRCA9
PSBtX3Byb3BlcnRpZXNbbl0ubV9pZCkKKyAgICAgICAgICAgIHJldHVybiAmbV9wcm9wZXJ0aWVz
W25dOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworQ1NTUHJvcGVydHkqIFN0eWxlUHJvcGVy
dHlTZXQ6OmZpbmRQcm9wZXJ0eVdpdGhJZChpbnQgcHJvcGVydHlJRCkKK3sKKyAgICBmb3IgKGlu
dCBuID0gbV9wcm9wZXJ0aWVzLnNpemUoKSAtIDEgOyBuID49IDA7IC0tbikgeworICAgICAgICBp
ZiAocHJvcGVydHlJRCA9PSBtX3Byb3BlcnRpZXNbbl0ubV9pZCkKKyAgICAgICAgICAgIHJldHVy
biAmbV9wcm9wZXJ0aWVzW25dOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKyAgICAKK2Jvb2wg
U3R5bGVQcm9wZXJ0eVNldDo6cHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KiBwcm9w
ZXJ0eSkgY29uc3QKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlD
U1NWYWx1ZShwcm9wZXJ0eS0+aWQoKSk7CisgICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLT5jc3NU
ZXh0KCkgPT0gcHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKTsKK30KKyAgICAKK3ZvaWQgU3R5
bGVQcm9wZXJ0eVNldDo6cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9w
ZXJ0eVNldCogc3R5bGUpCit7CisgICAgVmVjdG9yPGludD4gcHJvcGVydGllc1RvUmVtb3ZlOwor
ICAgIHNpemVfdCBzaXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVy
dHkgPSBtX3Byb3BlcnRpZXNbaV07CisgICAgICAgIGlmIChzdHlsZS0+cHJvcGVydHlNYXRjaGVz
KCZwcm9wZXJ0eSkpCisgICAgICAgICAgICBwcm9wZXJ0aWVzVG9SZW1vdmUuYXBwZW5kKHByb3Bl
cnR5LmlkKCkpOworICAgIH0gICAgCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBtYXNz
IHJlbW92YWwuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnRpZXNUb1JlbW92
ZS5zaXplKCk7ICsraSkKKyAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydGllc1RvUmVtb3Zl
W2ldKTsKK30KKwordm9pZCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVFcXVpdmFsZW50UHJvcGVy
dGllcyhjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sKKyAgICBWZWN0b3I8aW50
PiBwcm9wZXJ0aWVzVG9SZW1vdmU7CisgICAgc2l6ZV90IHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6
ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGNv
bnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9IG1fcHJvcGVydGllc1tpXTsKKyAgICAgICAgaWYg
KHN0eWxlLT5jc3NQcm9wZXJ0eU1hdGNoZXMoJnByb3BlcnR5KSkKKyAgICAgICAgICAgIHByb3Bl
cnRpZXNUb1JlbW92ZS5hcHBlbmQocHJvcGVydHkuaWQoKSk7CisgICAgfSAgICAKKyAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIG1hc3MgcmVtb3ZhbC4KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcHJvcGVydGllc1RvUmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAgICByZW1vdmVQ
cm9wZXJ0eShwcm9wZXJ0aWVzVG9SZW1vdmVbaV0pOworfQorCitQYXNzUmVmUHRyPFN0eWxlUHJv
cGVydHlTZXQ+IFN0eWxlUHJvcGVydHlTZXQ6OmNvcHkoKSBjb25zdAoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldChtX3Byb3BlcnRpZXMpKTsKK30KKworUGFzc1Jl
ZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBTdHlsZVByb3BlcnR5U2V0Ojpjb3B5UHJvcGVydGllc0lu
U2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Cit7CisgICAgVmVjdG9y
PENTU1Byb3BlcnR5PiBsaXN0OworICAgIGxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5n
dGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOwor
ICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShz
ZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsKKyAgICB9CisgICAgcmV0dXJuIFN0eWxl
UHJvcGVydHlTZXQ6OmNyZWF0ZShsaXN0KTsKK30KKworQ1NTU3R5bGVEZWNsYXJhdGlvbiogU3R5
bGVQcm9wZXJ0eVNldDo6ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpIGNvbnN0Cit7CisgICAg
aWYgKG1faGFzQ1NTT01XcmFwcGVyKSB7CisgICAgICAgIEFTU0VSVCghc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVEZWNsYXJhdGlvbio+KHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMp
KS0+cGFyZW50UnVsZSgpKTsKKyAgICAgICAgQVNTRVJUKCFwcm9wZXJ0eVNldENTU09NV3JhcHBl
ck1hcCgpLmdldCh0aGlzKS0+cGFyZW50RWxlbWVudCgpKTsKKyAgICAgICAgcmV0dXJuIHByb3Bl
cnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpOworICAgIH0KKyAgICBtX2hhc0NTU09N
V3JhcHBlciA9IHRydWU7CisgICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3Nv
bVdyYXBwZXIgPSBuZXcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0X2Nhc3Q8
U3R5bGVQcm9wZXJ0eVNldCo+KHRoaXMpKTsKKyAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1h
cCgpLmFkZCh0aGlzLCBhZG9wdFB0cihjc3NvbVdyYXBwZXIpKTsKKyAgICByZXR1cm4gY3Nzb21X
cmFwcGVyOworfQorCitDU1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZVByb3BlcnR5U2V0OjplbnN1
cmVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbihjb25zdCBDU1NSdWxlKiBwYXJlbnRSdWxlKSBjb25z
dAoreworICAgIGlmIChtX2hhc0NTU09NV3JhcHBlcikgeworICAgICAgICBBU1NFUlQoc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVEZWNsYXJhdGlvbio+KHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCku
Z2V0KHRoaXMpKS0+cGFyZW50UnVsZSgpID09IHBhcmVudFJ1bGUpOworICAgICAgICByZXR1cm4g
cHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyk7CisgICAgfQorICAgIG1faGFz
Q1NTT01XcmFwcGVyID0gdHJ1ZTsKKyAgICBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24q
IGNzc29tV3JhcHBlciA9IG5ldyBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbihjb25zdF9jYXN0PFN0
eWxlUHJvcGVydHlTZXQqPih0aGlzKSwgY29uc3RfY2FzdDxDU1NSdWxlKj4ocGFyZW50UnVsZSkp
OworICAgIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuYWRkKHRoaXMsIGFkb3B0UHRyKGNz
c29tV3JhcHBlcikpOworICAgIHJldHVybiBjc3NvbVdyYXBwZXI7Cit9CisKK0NTU1N0eWxlRGVj
bGFyYXRpb24qIFN0eWxlUHJvcGVydHlTZXQ6OmVuc3VyZUlubGluZUNTU1N0eWxlRGVjbGFyYXRp
b24oY29uc3QgU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCkgY29uc3QKK3sKKyAgICBpZiAo
bV9oYXNDU1NPTVdyYXBwZXIpIHsKKyAgICAgICAgQVNTRVJUKHByb3BlcnR5U2V0Q1NTT01XcmFw
cGVyTWFwKCkuZ2V0KHRoaXMpLT5wYXJlbnRFbGVtZW50KCkgPT0gcGFyZW50RWxlbWVudCk7Cisg
ICAgICAgIHJldHVybiBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKTsKKyAg
ICB9CisgICAgbV9oYXNDU1NPTVdyYXBwZXIgPSB0cnVlOworICAgIFByb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbiogY3Nzb21XcmFwcGVyID0gbmV3IElubGluZUNTU1N0eWxlRGVjbGFyYXRp
b24oY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4odGhpcyksIGNvbnN0X2Nhc3Q8U3R5bGVk
RWxlbWVudCo+KHBhcmVudEVsZW1lbnQpKTsKKyAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1h
cCgpLmFkZCh0aGlzLCBhZG9wdFB0cihjc3NvbVdyYXBwZXIpKTsKKyAgICByZXR1cm4gY3Nzb21X
cmFwcGVyOworfQorCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmNsZWFyUGFyZW50UnVsZShDU1NS
dWxlKiBydWxlKQoreworICAgIGlmICghbV9oYXNDU1NPTVdyYXBwZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBBU1NFUlRfVU5VU0VEKHJ1bGUsIHN0YXRpY19jYXN0PENTU1N0eWxlRGVjbGFyYXRp
b24qPihwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKSktPnBhcmVudFJ1bGUo
KSA9PSBydWxlKTsKKyAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKS0+
Y2xlYXJQYXJlbnRSdWxlKCk7Cit9CisKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6Y2xlYXJQYXJl
bnRFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgaWYgKCFtX2hhc0NTU09N
V3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVF9VTlVTRUQoZWxlbWVudCwgcHJv
cGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyktPnBhcmVudEVsZW1lbnQoKSA9PSBl
bGVtZW50KTsKKyAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKS0+Y2xl
YXJQYXJlbnRFbGVtZW50KCk7Cit9CisKK3Vuc2lnbmVkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbjo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cHJv
cGVydHlDb3VudCgpOworfQorCitTdHJpbmcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
OjppdGVtKHVuc2lnbmVkIGkpIGNvbnN0Cit7CisgICAgaWYgKGkgPj0gbV9wcm9wZXJ0eVNldC0+
cHJvcGVydHlDb3VudCgpKQorICAgICAgICByZXR1cm4gIiI7CisgICAgcmV0dXJuIGdldFByb3Bl
cnR5TmFtZShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihtX3Byb3BlcnR5U2V0LT5wcm9wZXJ0
eUF0KGkpLmlkKCkpKTsKK30KKworU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bjo6Y3NzVGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmFzVGV4dCgp
OworfQorICAgIAordm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldENzc1Rl
eHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyNpZiBFTkFCTEUo
TVVUQVRJT05fT0JTRVJWRVJTKQorICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRh
dGlvblNjb3BlKHRoaXMpOworI2VuZGlmCisgICAgZWMgPSAwOworICAgIC8vIEZJWE1FOiBEZXRl
Y3Qgc3ludGF4IGVycm9ycyBhbmQgc2V0IGVjLgorICAgIG1fcHJvcGVydHlTZXQtPnBhcnNlRGVj
bGFyYXRpb24odGV4dCwgY29udGV4dFN0eWxlU2hlZXQoKSk7CisKKyAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKCk7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBtdXRhdGlvblNj
b3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOyAgICAKKyNlbmRpZgorfQorCitQYXNzUmVmUHRy
PENTU1ZhbHVlPiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NT
VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgaW50IHByb3BlcnR5SUQg
PSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9wZXJ0eUlEKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShwcm9wZXJ0eUlEKTsKK30KKworU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKK3sKKyAg
ICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAo
IXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9wcm9w
ZXJ0eVNldC0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKK30KKworU3RyaW5nIFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQo
cHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cHJvcGVydHlJc0ltcG9ydGFudChwcm9w
ZXJ0eUlEKSA/ICJpbXBvcnRhbnQiIDogIiI7Cit9CisKK1N0cmluZyBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lKQoreworICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5h
bWUpOworICAgIGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
IGludCBzaG9ydGhhbmRJRCA9IG1fcHJvcGVydHlTZXQtPmdldFByb3BlcnR5U2hvcnRoYW5kKHBy
b3BlcnR5SUQpOworICAgIGlmICghc2hvcnRoYW5kSUQpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+
KHNob3J0aGFuZElEKSk7Cit9CisKK2Jvb2wgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
Ojppc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAg
aW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFw
cm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fcHJvcGVydHlT
ZXQtPmlzUHJvcGVydHlJbXBsaWNpdChwcm9wZXJ0eUlEKTsKK30KKwordm9pZCBQcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIFN0eWxl
QXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOworI2VuZGlmCisgICAg
aW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFw
cm9wZXJ0eUlEKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlvcml0
eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7CisgICAgZWMgPSAwOwor
ICAgIGJvb2wgY2hhbmdlZCA9IG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQs
IHZhbHVlLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KCkpOworICAgIGlmIChjaGFuZ2Vk
KSB7CisgICAgICAgIC8vIENTUyBET00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIG9mIHBh
cnNpbmcgZmFpbGVkLCBidXQgdGhpcyBpcyB0b28gZGFuZ2Vyb3VzIGZvciBjb21wYXRpYmlsaXR5
LAorICAgICAgICAvLyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcyOTY+LgorICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKKyAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNv
cmQoKTsKKyNlbmRpZgorICAgIH0KK30KKworU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgU3R5
bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CisjZW5kaWYKKyAg
ICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAo
IXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBlYyA9IDA7CisgICAg
U3RyaW5nIHJlc3VsdDsKKyAgICBib29sIGNoYW5nZXMgPSBtX3Byb3BlcnR5U2V0LT5yZW1vdmVQ
cm9wZXJ0eShwcm9wZXJ0eUlELCAmcmVzdWx0KTsKKyAgICBpZiAoY2hhbmdlcykgeworICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykK
KyAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKKyNlbmRpZgor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCit7IAorICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOyAKK30KKworU3RyaW5nIFByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCkKK3sgCisgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmdldFByb3BlcnR5
VmFsdWUocHJvcGVydHlJRCk7IAorfQorCit2b2lkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbjo6c2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sgCisj
aWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9u
U2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKKyNlbmRpZgorICAgIGVjID0gMDsKKyAgICBib29s
IGNoYW5nZWQgPSBtX3Byb3BlcnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwg
aW1wb3J0YW50LCBjb250ZXh0U3R5bGVTaGVldCgpKTsKKyAgICBpZiAoY2hhbmdlZCkgeworICAg
ICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVS
UykKKyAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKKyNlbmRp
ZgorICAgIH0KK30KKworQ1NTU3R5bGVTaGVldCogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uOjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKK3sgCisgICAgcmV0dXJuIGNvbnRleHRTdHls
ZVNoZWV0KCk7IAorfQorCitQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJvcGVy
dHlTZXQtPmNvcHkoKTsKK30KKworUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb246Om1ha2VNdXRhYmxlKCkKK3sKKyAgICByZXR1cm4gbV9w
cm9wZXJ0eVNldDsKK30KKworYm9vbCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNz
c1Byb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPnByb3BlcnR5TWF0Y2hlcyhwcm9wZXJ0eSk7Cit9CisK
K3ZvaWQgUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OnNldE5lZWRzU3R5bGVSZWNhbGMoKQorewor
ICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY29udGV4dFN0eWxlU2hlZXQoKSkg
eworICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVTaGVldC0+ZmluZERvY3Vt
ZW50KCkpCisgICAgICAgICAgICBkb2N1bWVudC0+c3R5bGVTZWxlY3RvckNoYW5nZWQoRGVmZXJS
ZWNhbGNTdHlsZSk7CisgICAgfQorfQorICAgIAorQ1NTU3R5bGVTaGVldCogUnVsZUNTU1N0eWxl
RGVjbGFyYXRpb246OmNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
YXJlbnRSdWxlID8gbV9wYXJlbnRSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwOworfQorCit2
b2lkIElubGluZUNTU1N0eWxlRGVjbGFyYXRpb246OnNldE5lZWRzU3R5bGVSZWNhbGMoKQorewor
ICAgIGlmICghbV9wYXJlbnRFbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgbV9wYXJlbnRF
bGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICBtX3Bh
cmVudEVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOworICAgIFN0eWxlQXR0cmli
dXRlTXV0YXRpb25TY29wZSh0aGlzKS5kaWRJbnZhbGlkYXRlU3R5bGVBdHRyKCk7CisgICAgcmV0
dXJuOworfQorCitDU1NTdHlsZVNoZWV0KiBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uOjpjb250
ZXh0U3R5bGVTaGVldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFyZW50RWxlbWVudCA/IG1f
cGFyZW50RWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkgOiAwOworfQorCitjbGFz
cyBTYW1lU2l6ZUFzU3R5bGVQcm9wZXJ0eVNldCA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXpl
QXNTdHlsZVByb3BlcnR5U2V0PiB7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5LCA0PiBwcm9wZXJ0
aWVzOworICAgIHVuc2lnbmVkIGJpdGZpZWxkOworfTsKK0NPTVBJTEVfQVNTRVJUKHNpemVvZihT
dHlsZVByb3BlcnR5U2V0KSA9PSBzaXplb2YoU2FtZVNpemVBc1N0eWxlUHJvcGVydHlTZXQpLCBz
dHlsZV9wcm9wZXJ0eV9zZXRfc2hvdWxkX3N0YXlfc21hbGwpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTA4MzQwKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwLDExNCArMjAsMjAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbi5oIgogCi0jaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1Bh
cnNlci5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TG9uZ2hhbmQuaCIKLSNpbmNsdWRlICJDU1NQ
cm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxl
U2hlZXQuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiQ1NTVmFs
dWVMaXN0LmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25P
YnNlcnZlckludGVyZXN0R3JvdXAuaCIKICNpbmNsdWRlICJNdXRhdGlvblJlY29yZC5oIgorI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCi0j
aW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIEhhc2hNYXA8
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCosIE93blB0cjxQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb24+ID4gUHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXA7Ci1zdGF0aWMgUHJvcGVydHlTZXRD
U1NPTVdyYXBwZXJNYXAmIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkKLXsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwLCBwcm9wZXJ0eVNldENT
U09NV3JhcHBlck1hcEluc3RhbmNlLCAoKSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5U2V0Q1NTT01X
cmFwcGVyTWFwSW5zdGFuY2U7Ci19Ci0KLWNsYXNzIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbiA6IHB1YmxpYyBDU1NTdHlsZURlY2xhcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQpIDog
bV9wcm9wZXJ0eVNldChwcm9wZXJ0eVNldCkgeyB9Ci0gICAgCi0gICAgdmlydHVhbCBTdHlsZWRF
bGVtZW50KiBwYXJlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwg
dm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIGNsZWFyUGFyZW50RWxlbWVudCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
LSAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCByZWYoKSBPVkVSUklERSB7
IG1fcHJvcGVydHlTZXQtPnJlZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcmVmKCkgT1ZFUlJJ
REUgeyBtX3Byb3BlcnR5U2V0LT5kZXJlZigpOyB9Ci0KLSAgICB2aXJ0dWFsIENTU1J1bGUqIHBh
cmVudFJ1bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9OwotICAgIHZpcnR1YWwgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0
eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25z
dCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2Vw
dGlvbkNvZGUmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Qg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwgRXhj
ZXB0aW9uQ29kZSYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0
eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYp
IE9WRVJSSURFOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29u
c3QgQ1NTUHJvcGVydHkqKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIENTU1N0eWxlU2hl
ZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY29weSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtYWtlTXV0YWJsZSgpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCkgeyB9ICAgIAotCi1wcm90ZWN0
ZWQ6Ci0gICAgU3R5bGVQcm9wZXJ0eVNldCogbV9wcm9wZXJ0eVNldDsKLX07Ci0KLWNsYXNzIFJ1
bGVDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbgotewotcHVibGljOgotICAgIFJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVy
dHlTZXQqIHByb3BlcnR5U2V0LCBDU1NSdWxlKiBwYXJlbnRSdWxlKQotICAgICAgICA6IFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihwcm9wZXJ0eVNldCkKLSAgICAgICAgLCBtX3BhcmVu
dFJ1bGUocGFyZW50UnVsZSkgCi0gICAgewotICAgIH0KLQotcHJpdmF0ZTogICAgCi0gICAgdmly
dHVhbCBDU1NSdWxlKiBwYXJlbnRSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRSdWxlOyB9
OwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7IG1fcGFyZW50UnVsZSA9IDA7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIHZpcnR1YWwg
Q1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBjb25zdDsKLSAgICAKLSAgICBDU1NS
dWxlKiBtX3BhcmVudFJ1bGU7Ci19OwotCi1jbGFzcyBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9u
IDogcHVibGljIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbgotewotcHVibGljOgotICAg
IElubGluZUNTU1N0eWxlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQs
IFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpCi0gICAgICAgIDogUHJvcGVydHlTZXRDU1NT
dHlsZURlY2xhcmF0aW9uKHByb3BlcnR5U2V0KQotICAgICAgICAsIG1fcGFyZW50RWxlbWVudChw
YXJlbnRFbGVtZW50KSAKLSAgICB7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgU3R5
bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RWxlbWVu
dDsgfQotICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhcmVudEVsZW1lbnQoKSB7IG1fcGFyZW50RWxl
bWVudCA9IDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAg
IHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBjb25zdDsKLQotICAg
IFN0eWxlZEVsZW1lbnQqIG1fcGFyZW50RWxlbWVudDsKLX07Ci0KIG5hbWVzcGFjZSB7CiAKIGNs
YXNzIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSB7CkBAIC0yMTIsODc1ICsxMTgsMTUgQEAg
Ym9vbCBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfc2hvdQogI2VuZGlmCiAKIH0gLy8g
bmFtZXNwYWNlCi0KLVN0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoKQotICAgIDog
bV9zdHJpY3RQYXJzaW5nKGZhbHNlKQotICAgICwgbV9oYXNDU1NPTVdyYXBwZXIoZmFsc2UpCi17
Ci19Ci0KLVN0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoY29uc3QgVmVjdG9yPENT
U1Byb3BlcnR5PiYgcHJvcGVydGllcykKLSAgICA6IG1fcHJvcGVydGllcyhwcm9wZXJ0aWVzKQot
ICAgICwgbV9zdHJpY3RQYXJzaW5nKHRydWUpCi0gICAgLCBtX2hhc0NTU09NV3JhcHBlcihmYWxz
ZSkKLXsKLSAgICBtX3Byb3BlcnRpZXMuc2hyaW5rVG9GaXQoKTsKLX0KLQotU3R5bGVQcm9wZXJ0
eVNldDo6U3R5bGVQcm9wZXJ0eVNldChjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QgKiBwcm9wZXJ0
aWVzLCBpbnQgbnVtUHJvcGVydGllcywgYm9vbCB1c2VTdHJpY3RQYXJzaW5nKQotICAgIDogbV9z
dHJpY3RQYXJzaW5nKHVzZVN0cmljdFBhcnNpbmcpCi0gICAgLCBtX2hhc0NTU09NV3JhcHBlcihm
YWxzZSkKLXsKLSAgICBtX3Byb3BlcnRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1Qcm9w
ZXJ0aWVzKTsKLSAgICBIYXNoTWFwPGludCwgYm9vbD4gY2FuZGlkYXRlczsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewotICAgICAgICBjb25zdCBDU1NQcm9w
ZXJ0eSAqcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldOwotICAgICAgICBBU1NFUlQocHJvcGVydHkp
OwotICAgICAgICBib29sIGltcG9ydGFudCA9IHByb3BlcnR5LT5pc0ltcG9ydGFudCgpOwotCi0g
ICAgICAgIEhhc2hNYXA8aW50LCBib29sPjo6aXRlcmF0b3IgaXQgPSBjYW5kaWRhdGVzLmZpbmQo
cHJvcGVydHktPmlkKCkpOwotICAgICAgICBpZiAoaXQgIT0gY2FuZGlkYXRlcy5lbmQoKSkgewot
ICAgICAgICAgICAgaWYgKCFpbXBvcnRhbnQgJiYgaXQtPnNlY29uZCkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5LT5pZCgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1fcHJvcGVydGllcy5hcHBlbmQoKnByb3BlcnR5KTsKLSAg
ICAgICAgY2FuZGlkYXRlcy5zZXQocHJvcGVydHktPmlkKCksIGltcG9ydGFudCk7Ci0gICAgfQot
fQotCi1TdHlsZVByb3BlcnR5U2V0Ojp+U3R5bGVQcm9wZXJ0eVNldCgpCi17Ci0gICAgQVNTRVJU
KCFtX2hhc0NTU09NV3JhcHBlciB8fCBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmNvbnRh
aW5zKHRoaXMpKTsKLSAgICBpZiAobV9oYXNDU1NPTVdyYXBwZXIpCi0gICAgICAgIHByb3BlcnR5
U2V0Q1NTT01XcmFwcGVyTWFwKCkucmVtb3ZlKHRoaXMpOwotfQotCi12b2lkIFN0eWxlUHJvcGVy
dHlTZXQ6OmNvcHlQcm9wZXJ0aWVzRnJvbShjb25zdCBTdHlsZVByb3BlcnR5U2V0JiBvdGhlcikK
LXsKLSAgICBtX3Byb3BlcnRpZXMgPSBvdGhlci5tX3Byb3BlcnRpZXM7Ci19Ci0KLVN0cmluZyBT
dHlsZVByb3BlcnR5U2V0OjpnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAot
ewotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3Bl
cnR5SUQpOwotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7
Ci0KLSAgICAvLyBTaG9ydGhhbmQgYW5kIDQtdmFsdWVzIHByb3BlcnRpZXMKLSAgICBzd2l0Y2gg
KHByb3BlcnR5SUQpIHsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclNwYWNpbmc6IHsK
LSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckhvcml6b250YWxTcGFjaW5nLCBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2Fs
U3BhY2luZyB9OwotICAgICAgICAgICAgcmV0dXJuIGJvcmRlclNwYWNpbmdWYWx1ZShwcm9wZXJ0
aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0
aW9uOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0PyBUaGUgY29kZSBp
biBjc3NwYXJzZXIuY3BwIGlzIGNvbmZ1c2luZwotICAgICAgICAgICAgY29uc3QgaW50IHByb3Bl
cnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUG9zaXRpb25ZIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0
aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUmVwZWF0OiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1sy
XSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
UmVwZWF0WSB9OwotICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShw
cm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZDogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbOV0gPSB7IENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRBdHRhY2htZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xp
cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRPcmlnaW4gfTsKLSAgICAgICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5k
VmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlcjogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM11bNF0gPSB7eyBDU1NQ
cm9wZXJ0eUJvcmRlclRvcFdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5
Qm9yZGVyTGVmdFdpZHRoIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7IENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJC
b3R0b21TdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGUgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENv
bG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9w
ZXJ0eUJvcmRlckJvdHRvbUNvbG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvciB9fTsKLSAgICAgICAgICAgIFN0
cmluZyByZXM7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9M
RU5HVEgocHJvcGVydGllcyk7ICsraSkgewotICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9
IGdldENvbW1vblZhbHVlKHByb3BlcnRpZXNbaV0pOwotICAgICAgICAgICAgICAgIGlmICghdmFs
dWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMuaXNOdWxsKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gIiAiOwotICAgICAgICAgICAgICAgICAgICBy
ZXMgKz0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIHJlczsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
VG9wOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTUHJvcGVy
dHlCb3JkZXJUb3BXaWR0aCwgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yfTsK
LSAgICAgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQ6IHsKLSAgICAgICAgICAg
IGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgs
IENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3J9OwotICAgICAgICAgICAg
cmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b206IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBw
cm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCBDU1NQcm9wZXJ0
eUJvcmRlckJvdHRvbVN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3J9OwotICAgICAgICAgICAgcmV0dXJuIGdl
dFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0OiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1sz
XSA9IHsgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFN0
eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5
Qm9yZGVyTGVmdENvbG9yfTsKLSAgICAgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZShw
cm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZTog
ewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3BlcnR5T3V0
bGluZVdpZHRoLCBDU1NQcm9wZXJ0eU91dGxpbmVTdHlsZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvciB9OwotICAgICAgICAg
ICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xvcjogewotICAgICAgICAgICAgY29uc3QgaW50
IHByb3BlcnRpZXNbNF0gPSB7IENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IsIENTU1Byb3BlcnR5
Qm9yZGVyUmlnaHRDb2xvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xv
ciB9OwotICAgICAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMocHJvcGVydGllcyk7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoOiB7Ci0gICAgICAgICAgICBj
b25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgQ1NT
UHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGgsIENTU1Byb3BlcnR5Qm9yZGVy
TGVmdFdpZHRoIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyhwcm9wZXJ0aWVzKTsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyU3R5bGU6IHsKLSAgICAg
ICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0
eWxlLCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21TdHlsZSwgQ1NTUHJvcGVy
dHlCb3JkZXJMZWZ0U3R5bGUgfTsKLSAgICAgICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKHByb3Bl
cnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4Rmxv
dzogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlX
ZWJraXRGbGV4RGlyZWN0aW9uLCBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhXcmFwIH07Ci0gICAgICAg
ICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6Ci0gICAgICAgICAgICByZXR1cm4gZm9udFZhbHVl
KCk7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW46IHsKLSAgICAgICAgICAgIGNvbnN0
IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NQcm9wZXJ0eU1hcmdpblRvcCwgQ1NTUHJvcGVydHlN
YXJnaW5SaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cm9wZXJ0eU1hcmdpbkJvdHRvbSwgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0IH07Ci0gICAgICAgICAg
ICByZXR1cm4gZ2V0NFZhbHVlcyhwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5T3ZlcmZsb3c6IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVz
WzJdID0geyBDU1NQcm9wZXJ0eU92ZXJmbG93WCwgQ1NTUHJvcGVydHlPdmVyZmxvd1kgfTsKLSAg
ICAgICAgICAgIHJldHVybiBnZXRDb21tb25WYWx1ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZzogewotICAgICAgICAgICAgY29uc3QgaW50
IHByb3BlcnRpZXNbNF0gPSB7IENTU1Byb3BlcnR5UGFkZGluZ1RvcCwgQ1NTUHJvcGVydHlQYWRk
aW5nUmlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJv
cGVydHlQYWRkaW5nQm90dG9tLCBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0IH07Ci0gICAgICAgICAg
ICByZXR1cm4gZ2V0NFZhbHVlcyhwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5TGlzdFN0eWxlOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGll
c1szXSA9IHsgQ1NTUHJvcGVydHlMaXN0U3R5bGVUeXBlLCBDU1NQcm9wZXJ0eUxpc3RTdHlsZVBv
c2l0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3Bl
cnR5TGlzdFN0eWxlSW1hZ2UgfTsKLSAgICAgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1
ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza1Bvc2l0aW9uOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0PyBU
aGUgY29kZSBpbiBjc3NwYXJzZXIuY3BwIGlzIGNvbmZ1c2luZwotICAgICAgICAgICAgY29uc3Qg
aW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgQ1NT
UHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGF5
ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0OiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJv
cGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WCwgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUmVwZWF0WSB9OwotICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9ydGhh
bmRWYWx1ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFzazogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbXSA9IHsgQ1NT
UHJvcGVydHlXZWJraXRNYXNrSW1hZ2UsIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFz
a0F0dGFjaG1lbnQsIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uLCBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tDbGlwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJvcGVydHlXZWJraXRNYXNrT3JpZ2luIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJl
ZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW46IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBw
cm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2Zvcm1PcmlnaW5ZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWiB9OwotICAgICAgICAgICAgcmV0dXJuIGdl
dFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVy
dGllc1s0XSA9IHsgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHksIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uLCBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheSB9OwotICAgICAgICAgICAgcmV0dXJuIGdl
dExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQg
cHJvcGVydGllc1s3XSA9IHsgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lLCBDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sIENT
U1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudCwg
Q1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25GaWxsTW9kZSB9
OwotICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVz
KTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcDogewotICAg
ICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3BlcnR5V2Via2l0V3Jh
cEZsb3csIENTU1Byb3BlcnR5V2Via2l0V3JhcE1hcmdpbiwKLSAgICAgICAgICAgICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdFdyYXBQYWRkaW5nIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRo
YW5kVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSNpZiBFTkFCTEUoU1ZHKQotICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5TWFya2VyOiB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eU1hcmtlclN0YXJ0KTsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUtPmNzc1Rl
eHQoKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQotU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmJvcmRlclNwYWNpbmdWYWx1ZShjb25zdCBpbnQg
cHJvcGVydGllc1syXSkgY29uc3QKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGhvcml6b250YWxW
YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1swXSk7Ci0gICAgUmVmUHRyPENT
U1ZhbHVlPiB2ZXJ0aWNhbFZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzFd
KTsKLQotICAgIGlmICghaG9yaXpvbnRhbFZhbHVlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgQVNTRVJUKHZlcnRpY2FsVmFsdWUpOyAvLyBCeSA8aHR0cDovL3d3dy53My5vcmcvVFIv
Q1NTMjEvdGFibGVzLmh0bWwjc2VwYXJhdGVkLWJvcmRlcnM+LgotCi0gICAgU3RyaW5nIGhvcml6
b250YWxWYWx1ZUNTU1RleHQgPSBob3Jpem9udGFsVmFsdWUtPmNzc1RleHQoKTsKLSAgICBTdHJp
bmcgdmVydGljYWxWYWx1ZUNTU1RleHQgPSB2ZXJ0aWNhbFZhbHVlLT5jc3NUZXh0KCk7Ci0gICAg
aWYgKGhvcml6b250YWxWYWx1ZUNTU1RleHQgPT0gdmVydGljYWxWYWx1ZUNTU1RleHQpCi0gICAg
ICAgIHJldHVybiBob3Jpem9udGFsVmFsdWVDU1NUZXh0OwotICAgIHJldHVybiBob3Jpem9udGFs
VmFsdWVDU1NUZXh0ICsgJyAnICsgdmVydGljYWxWYWx1ZUNTU1RleHQ7Ci19Ci0KLWJvb2wgU3R5
bGVQcm9wZXJ0eVNldDo6YXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KGludCBwcm9w
ZXJ0eUlkLCBTdHJpbmdCdWlsZGVyJiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgY29uc3QgQ1NTUHJv
cGVydHkqIHByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SWQpOwotICAgIGlm
ICghcHJvcGVydHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gQWxsIGxvbmdoYW5kcyBtdXN0
IGhhdmUgYXQgbGVhc3QgaW1wbGljaXQgdmFsdWVzIGlmICJmb250IiBpcyBzcGVjaWZpZWQuCi0g
ICAgaWYgKHByb3BlcnR5LT5pc0ltcGxpY2l0KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgY2hhciBwcmVmaXggPSAnXDAnOwotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250U3R5bGU6Ci0gICAgICAgIGJyZWFrOyAvLyBObyBwcmVmaXguCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRW
YXJpYW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2VpZ2h0OgotICAgICAgICBwcmVmaXgg
PSAnICc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0Ogot
ICAgICAgICBwcmVmaXggPSAnLyc7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGlmIChwcmVmaXggJiYgIXJl
c3VsdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQocHJlZml4KTsKLSAgICByZXN1
bHQuYXBwZW5kKHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCkpOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLVN0cmluZyBTdHlsZVByb3BlcnR5U2V0Ojpmb250VmFsdWUoKSBjb25zdAotewot
ICAgIGNvbnN0IENTU1Byb3BlcnR5KiBmb250U2l6ZVByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0
aElkKENTU1Byb3BlcnR5Rm9udFNpemUpOwotICAgIGlmICghZm9udFNpemVQcm9wZXJ0eSB8fCBm
b250U2l6ZVByb3BlcnR5LT5pc0ltcGxpY2l0KCkpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwotCi0gICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ1
ZTsKLSAgICBzdWNjZXNzICY9IGFwcGVuZEZvbnRMb25naGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQ
cm9wZXJ0eUZvbnRTdHlsZSwgcmVzdWx0KTsKLSAgICBzdWNjZXNzICY9IGFwcGVuZEZvbnRMb25n
aGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCByZXN1bHQpOwotICAg
IHN1Y2Nlc3MgJj0gYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KENTU1Byb3BlcnR5
Rm9udFdlaWdodCwgcmVzdWx0KTsKLSAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAg
IHJlc3VsdC5hcHBlbmQoJyAnKTsKLSAgICByZXN1bHQuYXBwZW5kKGZvbnRTaXplUHJvcGVydHkt
PnZhbHVlKCktPmNzc1RleHQoKSk7Ci0gICAgc3VjY2VzcyAmPSBhcHBlbmRGb250TG9uZ2hhbmRW
YWx1ZUlmRXhwbGljaXQoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCByZXN1bHQpOwotICAgIHN1Y2Nl
c3MgJj0gYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KENTU1Byb3BlcnR5Rm9udEZh
bWlseSwgcmVzdWx0KTsKLSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgLy8gQW4gaW52YWxp
ZCAiZm9udCIgdmFsdWUgaGFzIGJlZW4gYnVpbHQgKHNob3VsZCBuZXZlciBoYXBwZW4sIGFzIGF0
IGxlYXN0IGltcGxpY2l0IHZhbHVlcwotICAgICAgICAvLyBmb3IgbWFuZGF0b3J5IGxvbmdoYW5k
cyBhcmUgYWx3YXlzIGZvdW5kIGluIHRoZSBzdHlsZSksIHJlcG9ydCBlbXB0eSB2YWx1ZSBpbnN0
ZWFkLgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLX0KLQotU3Ry
aW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldDRWYWx1ZXMoY29uc3QgaW50KiBwcm9wZXJ0aWVzKSBj
b25zdAotewotICAgIC8vIEFzc3VtZSB0aGUgcHJvcGVydGllcyBhcmUgaW4gdGhlIHVzdWFsIG9y
ZGVyIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdC4KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHRvcFZh
bHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzBdKTsKLSAgICBSZWZQdHI8Q1NT
VmFsdWU+IHJpZ2h0VmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbMV0pOwot
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gYm90dG9tVmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHBy
b3BlcnRpZXNbMl0pOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gbGVmdFZhbHVlID0gZ2V0UHJvcGVy
dHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzNdKTsKLQotICAgIC8vIEFsbCA0IHByb3BlcnRpZXMgbXVz
dCBiZSBzcGVjaWZpZWQuCi0gICAgaWYgKCF0b3BWYWx1ZSB8fCAhcmlnaHRWYWx1ZSB8fCAhYm90
dG9tVmFsdWUgfHwgIWxlZnRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
Ym9vbCBzaG93TGVmdCA9IHJpZ2h0VmFsdWUtPmNzc1RleHQoKSAhPSBsZWZ0VmFsdWUtPmNzc1Rl
eHQoKTsKLSAgICBib29sIHNob3dCb3R0b20gPSAodG9wVmFsdWUtPmNzc1RleHQoKSAhPSBib3R0
b21WYWx1ZS0+Y3NzVGV4dCgpKSB8fCBzaG93TGVmdDsKLSAgICBib29sIHNob3dSaWdodCA9ICh0
b3BWYWx1ZS0+Y3NzVGV4dCgpICE9IHJpZ2h0VmFsdWUtPmNzc1RleHQoKSkgfHwgc2hvd0JvdHRv
bTsKLQotICAgIFN0cmluZyByZXMgPSB0b3BWYWx1ZS0+Y3NzVGV4dCgpOwotICAgIGlmIChzaG93
UmlnaHQpCi0gICAgICAgIHJlcyArPSAiICIgKyByaWdodFZhbHVlLT5jc3NUZXh0KCk7Ci0gICAg
aWYgKHNob3dCb3R0b20pCi0gICAgICAgIHJlcyArPSAiICIgKyBib3R0b21WYWx1ZS0+Y3NzVGV4
dCgpOwotICAgIGlmIChzaG93TGVmdCkKLSAgICAgICAgcmVzICs9ICIgIiArIGxlZnRWYWx1ZS0+
Y3NzVGV4dCgpOwotCi0gICAgcmV0dXJuIHJlczsKLX0KLQotU3RyaW5nIFN0eWxlUHJvcGVydHlT
ZXQ6OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHNpemVf
dCBzaXplKSBjb25zdAotewotICAgIFN0cmluZyByZXM7Ci0KLSAgICAvLyBCZWdpbiBieSBjb2xs
ZWN0aW5nIHRoZSBwcm9wZXJ0aWVzIGludG8gYW4gYXJyYXkuCi0gICAgVmVjdG9yPCBSZWZQdHI8
Q1NTVmFsdWU+ID4gdmFsdWVzKHNpemUpOwotICAgIHNpemVfdCBudW1MYXllcnMgPSAwOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgdmFsdWVzW2ld
ID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgaWYgKHZhbHVl
c1tpXSkgewotICAgICAgICAgICAgaWYgKHZhbHVlc1tpXS0+aXNWYWx1ZUxpc3QoKSkgewotICAg
ICAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFs
dWVMaXN0Kj4odmFsdWVzW2ldLmdldCgpKTsKLSAgICAgICAgICAgICAgICBudW1MYXllcnMgPSBt
YXgodmFsdWVMaXN0LT5sZW5ndGgoKSwgbnVtTGF5ZXJzKTsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIG51bUxheWVycyA9IG1heDxzaXplX3Q+KDFVLCBudW1MYXllcnMpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm93IHN0aXRjaCB0aGUgcHJvcGVydGllcyB0b2dl
dGhlci4gIEltcGxpY2l0IGluaXRpYWwgdmFsdWVzIGFyZSBmbGFnZ2VkIGFzIHN1Y2ggYW5kCi0g
ICAgLy8gY2FuIHNhZmVseSBiZSBvbWl0dGVkLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtTGF5ZXJzOyBpKyspIHsKLSAgICAgICAgU3RyaW5nIGxheWVyUmVzOwotICAgICAgICBib29s
IHVzZVJlcGVhdFhTaG9ydGhhbmQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCB1c2VSZXBlYXRZU2hv
cnRoYW5kID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgdXNlU2luZ2xlV29yZFNob3J0aGFuZCA9IGZh
bHNlOwotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHNpemU7IGorKykgewotICAgICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKLSAgICAgICAgICAgIGlmICh2YWx1ZXNbal0p
IHsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWVzW2pdLT5pc1ZhbHVlTGlzdCgpKQotICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlc1tq
XS5nZXQoKSktPml0ZW0oaSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gdmFsdWVzW2pdOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIENvbG9y
IG9ubHkgYmVsb25ncyBpbiB0aGUgbGFzdCBsYXllci4KLSAgICAgICAgICAgICAgICAgICAgaWYg
KHByb3BlcnRpZXNbal0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpICE9IG51bUxheWVycyAtIDEpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkg
IT0gMCkgLy8gT3RoZXIgc2luZ2xldG9ucyBvbmx5IGJlbG9uZyBpbiB0aGUgZmlyc3QgbGF5ZXIu
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJlcG9ydCBiYWNrZ3Jv
dW5kLXJlcGVhdCBhcyBpdCB3YXMgd3JpdHRlbiBpbiB0aGUgQ1NTLiBJZiB0aGUgcHJvcGVydHkg
aXMgaW1wbGljaXQsCi0gICAgICAgICAgICAvLyB0aGVuIGl0IHdhcyB3cml0dGVuIHdpdGggb25s
eSBvbmUgdmFsdWUuIEhlcmUgd2UgZmlndXJlIG91dCB3aGljaCB2YWx1ZSB0aGF0IHdhcyBzbyB3
ZSBjYW4KLSAgICAgICAgICAgIC8vIHJlcG9ydCBiYWNrIGNvcnJlY3RseS4KLSAgICAgICAgICAg
IGlmIChwcm9wZXJ0aWVzW2pdID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFggJiYgaXNQ
cm9wZXJ0eUltcGxpY2l0KHByb3BlcnRpZXNbal0pKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBC
VUcgNDkwNTU6IG1ha2Ugc3VyZSB0aGUgdmFsdWUgd2FzIG5vdCByZXNldCBpbiB0aGUgbGF5ZXIg
Y2hlY2sganVzdCBhYm92ZS4KLSAgICAgICAgICAgICAgICBpZiAoaiA8IHNpemUgLSAxICYmIHBy
b3BlcnRpZXNbaiArIDFdID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFkgJiYgdmFsdWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB5VmFsdWU7Ci0gICAgICAg
ICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gbmV4dFZhbHVlID0gdmFsdWVzW2ogKyAxXTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRWYWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHlWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KG5l
eHRWYWx1ZS5nZXQoKSktPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHlWYWx1ZSA9IG5leHRWYWx1ZTsK
LQotICAgICAgICAgICAgICAgICAgICBpbnQgeElkID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZS5nZXQoKSktPmdldElkZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlu
dCB5SWQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHlWYWx1ZS5nZXQoKSktPmdl
dElkZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4SWQgIT0geUlkKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeElkID09IENTU1ZhbHVlUmVwZWF0ICYmIHlJZCA9PSBDU1NW
YWx1ZU5vUmVwZWF0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwZWF0WFNo
b3J0aGFuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKytqOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4SWQgPT0gQ1NTVmFsdWVOb1JlcGVhdCAmJiB5
SWQgPT0gQ1NTVmFsdWVSZXBlYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VS
ZXBlYXRZU2hvcnRoYW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZVNpbmdsZVdvcmRTaG9ydGhhbmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgKytqOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodmFs
dWUgJiYgIXZhbHVlLT5pc0ltcGxpY2l0SW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIWxheWVyUmVzLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBsYXllclJlcyAr
PSAiICI7Ci0gICAgICAgICAgICAgICAgaWYgKHVzZVJlcGVhdFhTaG9ydGhhbmQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdXNlUmVwZWF0WFNob3J0aGFuZCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICBsYXllclJlcyArPSBnZXRWYWx1ZU5hbWUoQ1NTVmFsdWVSZXBlYXRYKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHVzZVJlcGVhdFlTaG9ydGhhbmQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdXNlUmVwZWF0WVNob3J0aGFuZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICBsYXllclJlcyArPSBnZXRWYWx1ZU5hbWUoQ1NTVmFsdWVSZXBlYXRZKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHVzZVNpbmdsZVdvcmRTaG9ydGhhbmQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdXNlU2luZ2xlV29yZFNob3J0aGFuZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICBsYXllclJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICBsYXllclJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFsYXllclJlcy5pc051bGwoKSkgewot
ICAgICAgICAgICAgaWYgKCFyZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmVzICs9ICIs
ICI7Ci0gICAgICAgICAgICByZXMgKz0gbGF5ZXJSZXM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVzOwotfQotCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0U2hvcnRoYW5k
VmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBzaXplX3Qgc2l6ZSkgY29uc3QKLXsKLSAgICBT
dHJpbmcgcmVzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAg
ICAgIGlmICghaXNQcm9wZXJ0eUltcGxpY2l0KHByb3BlcnRpZXNbaV0pKSB7Ci0gICAgICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVz
W2ldKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBwcm92aWRlIGRlZmF1bHQgdmFsdWUgaWYgIXZh
bHVlCi0gICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXJlcy5p
c051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzICs9ICIgIjsKLSAgICAgICAgICAgICAg
ICByZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gcmVzOwotfQotCi0vLyBvbmx5IHJldHVybnMgYSBub24tbnVsbCB2YWx1
ZSBpZiBhbGwgcHJvcGVydGllcyBoYXZlIHRoZSBzYW1lLCBub24tbnVsbCB2YWx1ZQotU3RyaW5n
IFN0eWxlUHJvcGVydHlTZXQ6OmdldENvbW1vblZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywg
c2l6ZV90IHNpemUpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJlczsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0g
Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkK
LSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgU3RyaW5nIHRleHQgPSB2YWx1
ZS0+Y3NzVGV4dCgpOwotICAgICAgICBpZiAodGV4dC5pc051bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLSAgICAgICAgaWYgKHJlcy5pc051bGwoKSkKLSAgICAgICAgICAgIHJl
cyA9IHRleHQ7Ci0gICAgICAgIGVsc2UgaWYgKHJlcyAhPSB0ZXh0KQotICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gcmVzOwotfQotCi1QYXNzUmVmUHRyPENT
U1ZhbHVlPiBTdHlsZVByb3BlcnR5U2V0OjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0
eUlEKSBjb25zdAotewotICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSA9IGZpbmRQcm9w
ZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsKLSAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0eS0+
dmFsdWUoKSA6IDA7Ci19Ci0KLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlU2hvcnRoYW5k
UHJvcGVydHkoaW50IHByb3BlcnR5SUQpCi17Ci0gICAgQ1NTUHJvcGVydHlMb25naGFuZCBsb25n
aGFuZCA9IGxvbmdoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJRCk7Ci0gICAgaWYgKCFsb25naGFu
ZC5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiByZW1vdmVQcm9w
ZXJ0aWVzSW5TZXQobG9uZ2hhbmQucHJvcGVydGllcygpLCBsb25naGFuZC5sZW5ndGgoKSk7Ci19
Ci0KLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IFN0cmluZyogcmV0dXJuVGV4dCkKLXsKLSAgICBpZiAocmVtb3ZlU2hvcnRoYW5kUHJvcGVydHko
cHJvcGVydHlJRCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFJldHVybiBhbiBlcXVpdmFsZW50IHNo
b3J0aGFuZCB3aGVuIHBvc3NpYmxlLgotICAgICAgICBpZiAocmV0dXJuVGV4dCkKLSAgICAgICAg
ICAgICpyZXR1cm5UZXh0ID0gIiI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IENTU1Byb3BlcnR5KiBmb3VuZFByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5
SUQpOwotICAgIGlmICghZm91bmRQcm9wZXJ0eSkgewotICAgICAgICBpZiAocmV0dXJuVGV4dCkK
LSAgICAgICAgICAgICpyZXR1cm5UZXh0ID0gIiI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAocmV0dXJuVGV4dCkKLSAgICAgICAgKnJldHVyblRleHQgPSBmb3VuZFBy
b3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCk7Ci0KLSAgICAvLyBBIG1vcmUgZWZmaWNpZW50IHJl
bW92YWwgc3RyYXRlZ3kgd291bGQgaW52b2x2ZSBtYXJraW5nIGVudHJpZXMgYXMgZW1wdHkKLSAg
ICAvLyBhbmQgc3dlZXBpbmcgdGhlbSB3aGVuIHRoZSB2ZWN0b3IgZ3Jvd3MgdG9vIGJpZy4KLSAg
ICBtX3Byb3BlcnRpZXMucmVtb3ZlKGZvdW5kUHJvcGVydHkgLSBtX3Byb3BlcnRpZXMuZGF0YSgp
KTsKICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojpw
cm9wZXJ0eUlzSW1wb3J0YW50KGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIGNvbnN0IENT
U1Byb3BlcnR5KiBwcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsKLSAg
ICBpZiAocHJvcGVydHkpCi0gICAgICAgIHJldHVybiBwcm9wZXJ0eS0+aXNJbXBvcnRhbnQoKTsK
LQotICAgIENTU1Byb3BlcnR5TG9uZ2hhbmQgbG9uZ2hhbmRzID0gbG9uZ2hhbmRGb3JQcm9wZXJ0
eShwcm9wZXJ0eUlEKTsKLSAgICBpZiAoIWxvbmdoYW5kcy5sZW5ndGgoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvbmdoYW5kcy5sZW5n
dGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICghcHJvcGVydHlJc0ltcG9ydGFudChsb25naGFuZHMu
cHJvcGVydGllcygpW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWludCBTdHlsZVByb3BlcnR5U2V0OjpnZXRQcm9wZXJ0eVNob3J0
aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBjb25zdCBDU1NQcm9wZXJ0eSogcHJv
cGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHlJRCk7Ci0gICAgcmV0dXJuIHByb3Bl
cnR5ID8gcHJvcGVydHktPnNob3J0aGFuZElEKCkgOiAwOwotfQotCi1ib29sIFN0eWxlUHJvcGVy
dHlTZXQ6OmlzUHJvcGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBj
b25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHlJ
RCk7Ci0gICAgcmV0dXJuIHByb3BlcnR5ID8gcHJvcGVydHktPmlzSW1wbGljaXQoKSA6IGZhbHNl
OwotfQotCi1ib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlE
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVTaGVldCogY29u
dGV4dFN0eWxlU2hlZXQpCi17Ci0gICAgLy8gU2V0dGluZyB0aGUgdmFsdWUgdG8gYW4gZW1wdHkg
c3RyaW5nIGp1c3QgcmVtb3ZlcyB0aGUgcHJvcGVydHkgaW4gYm90aCBJRSBhbmQgR2Vja28uCi0g
ICAgLy8gU2V0dGluZyBpdCB0byBudWxsIHNlZW1zIHRvIHByb2R1Y2UgbGVzcyBjb25zaXN0ZW50
IHJlc3VsdHMsIGJ1dCB3ZSB0cmVhdCBpdCBqdXN0IHRoZSBzYW1lLgotICAgIGlmICh2YWx1ZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5n
IHByb3BlcnR5IHZhbHVlLCB0aGlzIG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgZW5kIG9mIHRo
ZSBsaXN0LgotICAgIC8vIEZpcmVmb3ggcHJlc2VydmVzIHRoZSBwb3NpdGlvbiwgYW5kIE1TSUUg
bW92ZXMgdGhlIHByb3BlcnR5IHRvIHRoZSBiZWdpbm5pbmcuCi0gICAgcmV0dXJuIENTU1BhcnNl
cjo6cGFyc2VWYWx1ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB1c2VTdHJp
Y3RQYXJzaW5nKCksIGNvbnRleHRTdHlsZVNoZWV0KTsKLX0KLQotdm9pZCBTdHlsZVByb3BlcnR5
U2V0OjpzZXRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHksIENTU1Byb3BlcnR5
KiBzbG90KQotewotICAgIGlmICghcmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkocHJvcGVydHkuaWQo
KSkpIHsKLSAgICAgICAgQ1NTUHJvcGVydHkqIHRvUmVwbGFjZSA9IHNsb3QgPyBzbG90IDogZmlu
ZFByb3BlcnR5V2l0aElkKHByb3BlcnR5LmlkKCkpOwotICAgICAgICBpZiAodG9SZXBsYWNlKSB7
Ci0gICAgICAgICAgICAqdG9SZXBsYWNlID0gcHJvcGVydHk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9wcm9wZXJ0aWVzLmFwcGVuZChwcm9wZXJ0eSk7Ci19
Ci0KLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGlu
dCBpZGVudGlmaWVyLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxl
U2hlZXQpCi17Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZTsgICAgCi0gICAg
aWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHRTdHlsZVNoZWV0ID8gY29udGV4dFN0eWxl
U2hlZXQtPmZpbmREb2N1bWVudCgpIDogMCkKLSAgICAgICAgdmFsdWUgPSBkb2N1bWVudC0+Y3Nz
VmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZGVudGlmaWVyKTsKLSAgICBlbHNl
Ci0gICAgICAgIHZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoaWRl
bnRpZmllcik7Ci0KLSAgICBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1
ZS5yZWxlYXNlKCksIGltcG9ydGFudCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFN0
eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBkb3VibGUgbnVtYmVy
LCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQsIGJvb2wgaW1wb3J0YW50LCBDU1NT
dHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKLXsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHZhbHVlOyAgICAKLSAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dFN0
eWxlU2hlZXQgPyBjb250ZXh0U3R5bGVTaGVldC0+ZmluZERvY3VtZW50KCkgOiAwKQotICAgICAg
ICB2YWx1ZSA9IGRvY3VtZW50LT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUobnVtYmVyLCB1
bml0KTsKLSAgICBlbHNlCi0gICAgICAgIHZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShudW1iZXIsIHVuaXQpOwotICAgIHNldFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3BlcnR5SUQs
IHZhbHVlLCBpbXBvcnRhbnQpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTdHlsZVBy
b3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlv
biwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCi17Ci0gICAgbV9wcm9wZXJ0aWVz
LmNsZWFyKCk7Ci0gICAgQ1NTUGFyc2VyIHBhcnNlcih1c2VTdHJpY3RQYXJzaW5nKCkpOwotICAg
IHBhcnNlci5wYXJzZURlY2xhcmF0aW9uKHRoaXMsIHN0eWxlRGVjbGFyYXRpb24sIDAsIGNvbnRl
eHRTdHlsZVNoZWV0KTsKLX0KLQotdm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRQYXJzZWRQcm9w
ZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5KiBjb25zdCogcHJvcGVydGllcywgaW50IG51bVByb3Bl
cnRpZXMpCi17Ci0gICAgbV9wcm9wZXJ0aWVzLnJlc2VydmVDYXBhY2l0eShudW1Qcm9wZXJ0aWVz
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkKLSAgICAgICAg
YWRkUGFyc2VkUHJvcGVydHkoKnByb3BlcnRpZXNbaV0pOwotfQotCi12b2lkIFN0eWxlUHJvcGVy
dHlTZXQ6OmFkZFBhcnNlZFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSkKLXsK
LSAgICAvLyBPbmx5IGFkZCBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBubyAhaW1wb3J0YW50IGNvdW50
ZXJwYXJ0IHByZXNlbnQKLSAgICBpZiAoIXByb3BlcnR5SXNJbXBvcnRhbnQocHJvcGVydHkuaWQo
KSkgfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgewotICAgICAgICByZW1vdmVQcm9wZXJ0eShw
cm9wZXJ0eS5pZCgpKTsKLSAgICAgICAgbV9wcm9wZXJ0aWVzLmFwcGVuZChwcm9wZXJ0eSk7Ci0g
ICAgfQotfQotCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6YXNUZXh0KCkgY29uc3QKLXsKLSAg
ICBTdHJpbmcgcmVzdWx0ID0gIiI7Ci0KLSAgICBjb25zdCBDU1NQcm9wZXJ0eSogcG9zaXRpb25Y
UHJvcCA9IDA7Ci0gICAgY29uc3QgQ1NTUHJvcGVydHkqIHBvc2l0aW9uWVByb3AgPSAwOwotICAg
IGNvbnN0IENTU1Byb3BlcnR5KiByZXBlYXRYUHJvcCA9IDA7Ci0gICAgY29uc3QgQ1NTUHJvcGVy
dHkqIHJlcGVhdFlQcm9wID0gMDsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX3Byb3BlcnRpZXMu
c2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pIHsKLSAgICAg
ICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3AgPSBtX3Byb3BlcnRpZXNbbl07Ci0gICAgICAgIGlm
IChwcm9wLmlkKCkgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YKQotICAgICAgICAg
ICAgcG9zaXRpb25YUHJvcCA9ICZwcm9wOwotICAgICAgICBlbHNlIGlmIChwcm9wLmlkKCkgPT0g
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZKQotICAgICAgICAgICAgcG9zaXRpb25ZUHJv
cCA9ICZwcm9wOwotICAgICAgICBlbHNlIGlmIChwcm9wLmlkKCkgPT0gQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kUmVwZWF0WCkKLSAgICAgICAgICAgIHJlcGVhdFhQcm9wID0gJnByb3A7Ci0gICAgICAg
IGVsc2UgaWYgKHByb3AuaWQoKSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZKQotICAg
ICAgICAgICAgcmVwZWF0WVByb3AgPSAmcHJvcDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
cmVzdWx0ICs9IHByb3AuY3NzVGV4dCgpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGEgbm90LXNvLW5pY2Ugd2F5IHRvIHR1cm4geC95IHBvc2l0aW9ucyBpbnRvIHNpbmdsZSBiYWNr
Z3JvdW5kLXBvc2l0aW9uIGluIG91dHB1dC4KLSAgICAvLyBJdCBpcyByZXF1aXJlZCBiZWNhdXNl
IGJhY2tncm91bmQtcG9zaXRpb24teC95IGFyZSBub24tc3RhbmRhcmQgcHJvcGVydGllcyBhbmQg
V2ViS2l0IGdlbmVyYXRlZCBvdXRwdXQKLSAgICAvLyB3b3VsZCBub3Qgd29yayBpbiBGaXJlZm94
ICg8cmRhcjovL3Byb2JsZW0vNTE0MzE4Mz4pCi0gICAgLy8gSXQgd291bGQgYmUgYSBiZXR0ZXIg
c29sdXRpb24gaWYgYmFja2dyb3VuZC1wb3NpdGlvbiB3YXMgQ1NTX1BBSVIuCi0gICAgaWYgKHBv
c2l0aW9uWFByb3AgJiYgcG9zaXRpb25ZUHJvcCAmJiBwb3NpdGlvblhQcm9wLT5pc0ltcG9ydGFu
dCgpID09IHBvc2l0aW9uWVByb3AtPmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAgU3RyaW5nIHBv
c2l0aW9uVmFsdWU7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSB9
OwotICAgICAgICBpZiAocG9zaXRpb25YUHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSB8fCBw
b3NpdGlvbllQcm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICAgICAgcG9zaXRp
b25WYWx1ZSA9IGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcG9zaXRpb25WYWx1ZSA9IHBvc2l0aW9uWFByb3AtPnZhbHVlKCkt
PmNzc1RleHQoKSArICIgIiArIHBvc2l0aW9uWVByb3AtPnZhbHVlKCktPmNzc1RleHQoKTsKLSAg
ICAgICAgcmVzdWx0ICs9ICJiYWNrZ3JvdW5kLXBvc2l0aW9uOiAiICsgcG9zaXRpb25WYWx1ZSAr
IChwb3NpdGlvblhQcm9wLT5pc0ltcG9ydGFudCgpID8gIiAhaW1wb3J0YW50IiA6ICIiKSArICI7
ICI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHBvc2l0aW9uWFByb3ApCi0gICAgICAgICAg
ICByZXN1bHQgKz0gcG9zaXRpb25YUHJvcC0+Y3NzVGV4dCgpOwotICAgICAgICBpZiAocG9zaXRp
b25ZUHJvcCkKLSAgICAgICAgICAgIHJlc3VsdCArPSBwb3NpdGlvbllQcm9wLT5jc3NUZXh0KCk7
Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZG8gdGhlIHNhbWUgZm9yIGJhY2tn
cm91bmQtcmVwZWF0LgotICAgIGlmIChyZXBlYXRYUHJvcCAmJiByZXBlYXRZUHJvcCAmJiByZXBl
YXRYUHJvcC0+aXNJbXBvcnRhbnQoKSA9PSByZXBlYXRZUHJvcC0+aXNJbXBvcnRhbnQoKSkgewot
ICAgICAgICBTdHJpbmcgcmVwZWF0VmFsdWU7Ci0gICAgICAgIGNvbnN0IGludCByZXBlYXRQcm9w
ZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYLCBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRSZXBlYXRZIH07Ci0gICAgICAgIGlmIChyZXBlYXRYUHJvcC0+dmFsdWUoKS0+aXNW
YWx1ZUxpc3QoKSB8fCByZXBlYXRZUHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAg
ICAgICAgIHJlcGVhdFZhbHVlID0gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHJlcGVhdFByb3Bl
cnRpZXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXBlYXRWYWx1ZSA9IHJlcGVhdFhQ
cm9wLT52YWx1ZSgpLT5jc3NUZXh0KCkgKyAiICIgKyByZXBlYXRZUHJvcC0+dmFsdWUoKS0+Y3Nz
VGV4dCgpOwotICAgICAgICByZXN1bHQgKz0gImJhY2tncm91bmQtcmVwZWF0OiAiICsgcmVwZWF0
VmFsdWUgKyAocmVwZWF0WFByb3AtPmlzSW1wb3J0YW50KCkgPyAiICFpbXBvcnRhbnQiIDogIiIp
ICsgIjsgIjsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAocmVwZWF0WFByb3ApCi0gICAgICAg
ICAgICByZXN1bHQgKz0gcmVwZWF0WFByb3AtPmNzc1RleHQoKTsKLSAgICAgICAgaWYgKHJlcGVh
dFlQcm9wKQotICAgICAgICAgICAgcmVzdWx0ICs9IHJlcGVhdFlQcm9wLT5jc3NUZXh0KCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBTdHlsZVByb3BlcnR5U2V0Ojpt
ZXJnZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBvdGhlciwgYm9vbCBhcmdPdmVycmlkZXNPbkNv
bmZsaWN0KQotewotICAgIHVuc2lnbmVkIHNpemUgPSBvdGhlci0+bV9wcm9wZXJ0aWVzLnNpemUo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgKytuKSB7Ci0gICAgICAgIGNv
bnN0IENTU1Byb3BlcnR5JiB0b01lcmdlID0gb3RoZXItPm1fcHJvcGVydGllc1tuXTsKLSAgICAg
ICAgQ1NTUHJvcGVydHkqIG9sZCA9IGZpbmRQcm9wZXJ0eVdpdGhJZCh0b01lcmdlLmlkKCkpOwot
ICAgICAgICBpZiAob2xkKSB7Ci0gICAgICAgICAgICBpZiAoIWFyZ092ZXJyaWRlc09uQ29uZmxp
Y3QgJiYgb2xkLT52YWx1ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgc2V0UHJvcGVydHkodG9NZXJnZSwgb2xkKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtX3Byb3BlcnRpZXMuYXBwZW5kKHRvTWVyZ2UpOwotICAgIH0KLX0KLQotdm9pZCBTdHlsZVBy
b3BlcnR5U2V0OjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJs
cywgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCi17Ci0gICAgc2l6ZV90IHNpemUg
PSBtX3Byb3BlcnRpZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQotICAgICAgICBtX3Byb3BlcnRpZXNbaV0udmFsdWUoKS0+YWRkU3VicmVzb3VyY2VTdHls
ZVVSTHModXJscywgY29udGV4dFN0eWxlU2hlZXQpOwotfQotCi0vLyBUaGlzIGlzIHRoZSBsaXN0
IG9mIHByb3BlcnRpZXMgd2Ugd2FudCB0byBjb3B5IGluIHRoZSBjb3B5QmxvY2tQcm9wZXJ0aWVz
KCkgZnVuY3Rpb24uCi0vLyBJdCBpcyB0aGUgbGlzdCBvZiBDU1MgcHJvcGVydGllcyB0aGF0IGFw
cGx5IHNwZWNpYWxseSB0byBibG9jay1sZXZlbCBlbGVtZW50cy4KLXN0YXRpYyBjb25zdCBpbnQg
YmxvY2tQcm9wZXJ0aWVzW10gPSB7Ci0gICAgQ1NTUHJvcGVydHlPcnBoYW5zLAotICAgIENTU1By
b3BlcnR5T3ZlcmZsb3csIC8vIFRoaXMgY2FuIGJlIGFsc28gYmUgYXBwbGllZCB0byByZXBsYWNl
ZCBlbGVtZW50cwotICAgIENTU1Byb3BlcnR5V2Via2l0QXNwZWN0UmF0aW8sCi0gICAgQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5Db3VudCwKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcCwK
LSAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvciwKLSAgICBDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtblJ1bGVTdHlsZSwKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVXaWR0
aCwKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrQmVmb3JlLAotICAgIENTU1Byb3Bl
cnR5V2Via2l0Q29sdW1uQnJlYWtBZnRlciwKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJy
ZWFrSW5zaWRlLAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uV2lkdGgsCi0gICAgQ1NTUHJv
cGVydHlQYWdlQnJlYWtBZnRlciwKLSAgICBDU1NQcm9wZXJ0eVBhZ2VCcmVha0JlZm9yZSwKLSAg
ICBDU1NQcm9wZXJ0eVBhZ2VCcmVha0luc2lkZSwKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lv
bkJyZWFrQWZ0ZXIsCi0gICAgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0JlZm9yZSwKLSAg
ICBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlLAotICAgIENTU1Byb3BlcnR5VGV4
dEFsaWduLAotICAgIENTU1Byb3BlcnR5VGV4dEluZGVudCwKLSAgICBDU1NQcm9wZXJ0eVdpZG93
cwotfTsKLQotY29uc3QgdW5zaWduZWQgbnVtQmxvY2tQcm9wZXJ0aWVzID0gV1RGX0FSUkFZX0xF
TkdUSChibG9ja1Byb3BlcnRpZXMpOwotCi1QYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFN0
eWxlUHJvcGVydHlTZXQ6OmNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25zdAotewotICAgIHJldHVy
biBjb3B5UHJvcGVydGllc0luU2V0KGJsb2NrUHJvcGVydGllcywgbnVtQmxvY2tQcm9wZXJ0aWVz
KTsKLX0KLQotdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQot
ewotICAgIHJlbW92ZVByb3BlcnRpZXNJblNldChibG9ja1Byb3BlcnRpZXMsIG51bUJsb2NrUHJv
cGVydGllcyk7Ci19Ci0KLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVydGllc0lu
U2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKG1fcHJvcGVy
dGllcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGFsd2F5cyB1c2VkIHdpdGggc3RhdGljIHNldHMgYW5kIGluIHRoYXQgY2FzZSBjb25z
dHJ1Y3RpbmcgdGhlIGhhc2ggcmVwZWF0ZWRseSBpcyBwcmV0dHkgcG9pbnRsZXNzLgotICAgIEhh
c2hTZXQ8aW50PiB0b1JlbW92ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCi0gICAgICAgIHRvUmVtb3ZlLmFkZChzZXRbaV0pOwotCi0gICAgVmVjdG9yPENTU1By
b3BlcnR5LCA0PiBuZXdQcm9wZXJ0aWVzOwotICAgIG5ld1Byb3BlcnRpZXMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX3Byb3BlcnRpZXMuc2l6ZSgpKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBt
X3Byb3BlcnRpZXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyAr
K24pIHsKLSAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wcm9wZXJ0aWVz
W25dOwotICAgICAgICAvLyBOb3QgcXVpdGUgc3VyZSBpZiB0aGUgaXNJbXBvcnRhbnQgdGVzdCBp
cyBuZWVkZWQgYnV0IGl0IG1hdGNoZXMgdGhlIGV4aXN0aW5nIGJlaGF2aW9yLgotICAgICAgICBp
ZiAoIXByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAgICAgIGlmICh0b1JlbW92ZS5j
b250YWlucyhwcm9wZXJ0eS5pZCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotICAgICAgICBuZXdQcm9wZXJ0aWVzLmFwcGVuZChwcm9wZXJ0eSk7Ci0gICAgfQotCi0g
ICAgYm9vbCBjaGFuZ2VkID0gbmV3UHJvcGVydGllcy5zaXplKCkgIT0gbV9wcm9wZXJ0aWVzLnNp
emUoKTsKLSAgICBtX3Byb3BlcnRpZXMgPSBuZXdQcm9wZXJ0aWVzOwotICAgIHJldHVybiBjaGFu
Z2VkOwotfQotCi1jb25zdCBDU1NQcm9wZXJ0eSogU3R5bGVQcm9wZXJ0eVNldDo6ZmluZFByb3Bl
cnR5V2l0aElkKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIGZvciAoaW50IG4gPSBtX3By
b3BlcnRpZXMuc2l6ZSgpIC0gMSA7IG4gPj0gMDsgLS1uKSB7Ci0gICAgICAgIGlmIChwcm9wZXJ0
eUlEID09IG1fcHJvcGVydGllc1tuXS5tX2lkKQotICAgICAgICAgICAgcmV0dXJuICZtX3Byb3Bl
cnRpZXNbbl07Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1DU1NQcm9wZXJ0eSogU3R5bGVQ
cm9wZXJ0eVNldDo6ZmluZFByb3BlcnR5V2l0aElkKGludCBwcm9wZXJ0eUlEKQotewotICAgIGZv
ciAoaW50IG4gPSBtX3Byb3BlcnRpZXMuc2l6ZSgpIC0gMSA7IG4gPj0gMDsgLS1uKSB7Ci0gICAg
ICAgIGlmIChwcm9wZXJ0eUlEID09IG1fcHJvcGVydGllc1tuXS5tX2lkKQotICAgICAgICAgICAg
cmV0dXJuICZtX3Byb3BlcnRpZXNbbl07Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotICAgIAot
Ym9vbCBTdHlsZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkq
IHByb3BlcnR5KSBjb25zdAotewotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9w
ZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LT5pZCgpKTsKLSAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUt
PmNzc1RleHQoKSA9PSBwcm9wZXJ0eS0+dmFsdWUoKS0+Y3NzVGV4dCgpOwotfQotICAgIAotdm9p
ZCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhjb25zdCBTdHls
ZVByb3BlcnR5U2V0KiBzdHlsZSkKLXsKLSAgICBWZWN0b3I8aW50PiBwcm9wZXJ0aWVzVG9SZW1v
dmU7Ci0gICAgc2l6ZV90IHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBw
cm9wZXJ0eSA9IG1fcHJvcGVydGllc1tpXTsKLSAgICAgICAgaWYgKHN0eWxlLT5wcm9wZXJ0eU1h
dGNoZXMoJnByb3BlcnR5KSkKLSAgICAgICAgICAgIHByb3BlcnRpZXNUb1JlbW92ZS5hcHBlbmQo
cHJvcGVydHkuaWQoKSk7Ci0gICAgfSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IG1hc3MgcmVtb3ZhbC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydGllc1Rv
UmVtb3ZlLnNpemUoKTsgKytpKQotICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0aWVzVG9S
ZW1vdmVbaV0pOwotfQotCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUVxdWl2YWxlbnRQ
cm9wZXJ0aWVzKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQotewotICAgIFZlY3Rv
cjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92ZTsKLSAgICBzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydGll
cy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAg
ICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wcm9wZXJ0aWVzW2ldOwotICAgICAg
ICBpZiAoc3R5bGUtPmNzc1Byb3BlcnR5TWF0Y2hlcygmcHJvcGVydHkpKQotICAgICAgICAgICAg
cHJvcGVydGllc1RvUmVtb3ZlLmFwcGVuZChwcm9wZXJ0eS5pZCgpKTsKLSAgICB9ICAgIAotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgbWFzcyByZW1vdmFsLgotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJl
bW92ZVByb3BlcnR5KHByb3BlcnRpZXNUb1JlbW92ZVtpXSk7Ci19Ci0KLVBhc3NSZWZQdHI8U3R5
bGVQcm9wZXJ0eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6Y29weSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KG1fcHJvcGVydGllcykpOwotfQotCi1Q
YXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFN0eWxlUHJvcGVydHlTZXQ6OmNvcHlQcm9wZXJ0
aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKLXsKLSAgICBW
ZWN0b3I8Q1NTUHJvcGVydHk+IGxpc3Q7Ci0gICAgbGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHNldFtp
XSk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKENTU1Byb3Bl
cnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkpOwotICAgIH0KLSAgICByZXR1cm4g
U3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGxpc3QpOwotfQotCi1DU1NTdHlsZURlY2xhcmF0aW9u
KiBTdHlsZVByb3BlcnR5U2V0OjplbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkgY29uc3QKLXsK
LSAgICBpZiAobV9oYXNDU1NPTVdyYXBwZXIpIHsKLSAgICAgICAgQVNTRVJUKCFzdGF0aWNfY2Fz
dDxDU1NTdHlsZURlY2xhcmF0aW9uKj4ocHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQo
dGhpcykpLT5wYXJlbnRSdWxlKCkpOwotICAgICAgICBBU1NFUlQoIXByb3BlcnR5U2V0Q1NTT01X
cmFwcGVyTWFwKCkuZ2V0KHRoaXMpLT5wYXJlbnRFbGVtZW50KCkpOwotICAgICAgICByZXR1cm4g
cHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyk7Ci0gICAgfQotICAgIG1faGFz
Q1NTT01XcmFwcGVyID0gdHJ1ZTsKLSAgICBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24q
IGNzc29tV3JhcHBlciA9IG5ldyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24oY29uc3Rf
Y2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4odGhpcykpOwotICAgIHByb3BlcnR5U2V0Q1NTT01XcmFw
cGVyTWFwKCkuYWRkKHRoaXMsIGFkb3B0UHRyKGNzc29tV3JhcHBlcikpOwotICAgIHJldHVybiBj
c3NvbVdyYXBwZXI7Ci19Ci0KLUNTU1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlUHJvcGVydHlTZXQ6
OmVuc3VyZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0IENTU1J1bGUqIHBhcmVudFJ1bGUp
IGNvbnN0Ci17Ci0gICAgaWYgKG1faGFzQ1NTT01XcmFwcGVyKSB7Ci0gICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxDU1NTdHlsZURlY2xhcmF0aW9uKj4ocHJvcGVydHlTZXRDU1NPTVdyYXBwZXJN
YXAoKS5nZXQodGhpcykpLT5wYXJlbnRSdWxlKCkgPT0gcGFyZW50UnVsZSk7Ci0gICAgICAgIHJl
dHVybiBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKTsKLSAgICB9Ci0gICAg
bV9oYXNDU1NPTVdyYXBwZXIgPSB0cnVlOwotICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbiogY3Nzb21XcmFwcGVyID0gbmV3IFJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0X2Nh
c3Q8U3R5bGVQcm9wZXJ0eVNldCo+KHRoaXMpLCBjb25zdF9jYXN0PENTU1J1bGUqPihwYXJlbnRS
dWxlKSk7Ci0gICAgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5hZGQodGhpcywgYWRvcHRQ
dHIoY3Nzb21XcmFwcGVyKSk7Ci0gICAgcmV0dXJuIGNzc29tV3JhcHBlcjsKLX0KLQotQ1NTU3R5
bGVEZWNsYXJhdGlvbiogU3R5bGVQcm9wZXJ0eVNldDo6ZW5zdXJlSW5saW5lQ1NTU3R5bGVEZWNs
YXJhdGlvbihjb25zdCBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KSBjb25zdAotewotICAg
IGlmIChtX2hhc0NTU09NV3JhcHBlcikgewotICAgICAgICBBU1NFUlQocHJvcGVydHlTZXRDU1NP
TVdyYXBwZXJNYXAoKS5nZXQodGhpcyktPnBhcmVudEVsZW1lbnQoKSA9PSBwYXJlbnRFbGVtZW50
KTsKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMp
OwotICAgIH0KLSAgICBtX2hhc0NTU09NV3JhcHBlciA9IHRydWU7Ci0gICAgUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uKiBjc3NvbVdyYXBwZXIgPSBuZXcgSW5saW5lQ1NTU3R5bGVEZWNs
YXJhdGlvbihjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPih0aGlzKSwgY29uc3RfY2FzdDxT
dHlsZWRFbGVtZW50Kj4ocGFyZW50RWxlbWVudCkpOwotICAgIHByb3BlcnR5U2V0Q1NTT01XcmFw
cGVyTWFwKCkuYWRkKHRoaXMsIGFkb3B0UHRyKGNzc29tV3JhcHBlcikpOwotICAgIHJldHVybiBj
c3NvbVdyYXBwZXI7Ci19Ci0KLXZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6Y2xlYXJQYXJlbnRSdWxl
KENTU1J1bGUqIHJ1bGUpCi17Ci0gICAgaWYgKCFtX2hhc0NTU09NV3JhcHBlcikKLSAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVF9VTlVTRUQocnVsZSwgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVEZWNs
YXJhdGlvbio+KHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpKS0+cGFyZW50
UnVsZSgpID09IHJ1bGUpOwotICAgIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRo
aXMpLT5jbGVhclBhcmVudFJ1bGUoKTsKK3ZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uOjpyZWYoKQoreyAKKyAgICBtX3Byb3BlcnR5U2V0LT5yZWYoKTsKIH0KIAotdm9pZCBTdHls
ZVByb3BlcnR5U2V0OjpjbGVhclBhcmVudEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkK
LXsKLSAgICBpZiAoIW1faGFzQ1NTT01XcmFwcGVyKQotICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUX1VOVVNFRChlbGVtZW50LCBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlz
KS0+cGFyZW50RWxlbWVudCgpID09IGVsZW1lbnQpOwotICAgIHByb3BlcnR5U2V0Q1NTT01XcmFw
cGVyTWFwKCkuZ2V0KHRoaXMpLT5jbGVhclBhcmVudEVsZW1lbnQoKTsKK3ZvaWQgUHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpkZXJlZigpCit7IAorICAgIG1fcHJvcGVydHlTZXQtPmRl
cmVmKCk7IAogfQogCiB1bnNpZ25lZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246Omxl
bmd0aCgpIGNvbnN0CkBAIC0xMjcyLDEwICszMTgsNCBAQCBDU1NTdHlsZVNoZWV0KiBJbmxpbmVD
U1NTdHlsZURlY2xhcmF0aW9uCiAgICAgcmV0dXJuIG1fcGFyZW50RWxlbWVudCA/IG1fcGFyZW50
RWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkgOiAwOwogfQogCi1jbGFzcyBTYW1l
U2l6ZUFzU3R5bGVQcm9wZXJ0eVNldCA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNTdHls
ZVByb3BlcnR5U2V0PiB7Ci0gICAgVmVjdG9yPENTU1Byb3BlcnR5LCA0PiBwcm9wZXJ0aWVzOwot
ICAgIHVuc2lnbmVkIGJpdGZpZWxkOwotfTsKLUNPTVBJTEVfQVNTRVJUKHNpemVvZihTdHlsZVBy
b3BlcnR5U2V0KSA9PSBzaXplb2YoU2FtZVNpemVBc1N0eWxlUHJvcGVydHlTZXQpLCBzdHlsZV9w
cm9wZXJ0eV9zZXRfc2hvdWxkX3N0YXlfc21hbGwpOwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uX2gKKyNkZWZp
bmUgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uX2gKKworI2luY2x1ZGUgIkNTU1N0eWxl
RGVjbGFyYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NSdWxlOwor
Y2xhc3MgQ1NTUHJvcGVydHk7CitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgQ1NTVmFsdWU7
CitjbGFzcyBTdHlsZVByb3BlcnR5U2V0OworY2xhc3MgU3R5bGVkRWxlbWVudDsKKworY2xhc3Mg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxlRGVjbGFyYXRp
b24geworcHVibGljOgorICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVBy
b3BlcnR5U2V0KiBwcm9wZXJ0eVNldCkgOiBtX3Byb3BlcnR5U2V0KHByb3BlcnR5U2V0KSB7IH0K
KyAgICAKKyAgICB2aXJ0dWFsIFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50UnVsZSgpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXJlbnRFbGVtZW50KCkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogY29u
dGV4dFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgCitwcml2YXRlOgorICAg
IHZpcnR1YWwgdm9pZCByZWYoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoKSBP
VkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFsIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiAwOyB9OworICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0
eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9w
ZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5
LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJv
cGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1
ZUludGVybmFsKENTU1Byb3BlcnR5SUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGdl
dFByb3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworICAgIAor
ICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hl
ZXQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4gY29weSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBtYWtlTXV0YWJsZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc1N0eWxlUmVjYWxjKCkgeyB9ICAgIAorICAgIAorcHJvdGVjdGVkOgorICAgIFN0eWxl
UHJvcGVydHlTZXQqIG1fcHJvcGVydHlTZXQ7Cit9OworCitjbGFzcyBSdWxlQ1NTU3R5bGVEZWNs
YXJhdGlvbiA6IHB1YmxpYyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24KK3sKK3B1Ymxp
YzoKKyAgICBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0
eVNldCwgQ1NTUnVsZSogcGFyZW50UnVsZSkKKyAgICAgICAgOiBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24ocHJvcGVydHlTZXQpCisgICAgICAgICwgbV9wYXJlbnRSdWxlKHBhcmVudFJ1
bGUpIAorICAgIHsKKyAgICB9CisgICAgCitwcml2YXRlOiAgICAKKyAgICB2aXJ0dWFsIENTU1J1
bGUqIHBhcmVudFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFJ1bGU7IH07CisgICAgdmly
dHVhbCB2b2lkIGNsZWFyUGFyZW50UnVsZSgpIHsgbV9wYXJlbnRSdWxlID0gMDsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgdmlydHVhbCBDU1NTdHlsZVNo
ZWV0KiBjb250ZXh0U3R5bGVTaGVldCgpIGNvbnN0OworICAgIAorICAgIENTU1J1bGUqIG1fcGFy
ZW50UnVsZTsKK307CisKK2NsYXNzIElubGluZUNTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uCit7CitwdWJsaWM6CisgICAgSW5saW5lQ1NT
U3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0eVNldCwgU3R5bGVkRWxl
bWVudCogcGFyZW50RWxlbWVudCkKKyAgICAgICAgOiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb24ocHJvcGVydHlTZXQpCisgICAgICAgICwgbV9wYXJlbnRFbGVtZW50KHBhcmVudEVsZW1l
bnQpIAorICAgIHsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZpcnR1YWwgU3R5bGVkRWxl
bWVudCogcGFyZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RWxlbWVudDsgfQor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhcmVudEVsZW1lbnQoKSB7IG1fcGFyZW50RWxlbWVudCA9
IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIHZpcnR1
YWwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBjb25zdDsKKyAgICAKKyAgICBT
dHlsZWRFbGVtZW50KiBtX3BhcmVudEVsZW1lbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNw
cAkocmV2aXNpb24gMTA4MzYzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlT
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw3IEBACiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
Ci0jaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiTXV0YXRp
b25PYnNlcnZlckludGVyZXN0R3JvdXAuaCIKLSNpbmNsdWRlICJNdXRhdGlvblJlY29yZC5oIgor
I2luY2x1ZGUgIlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIlN0
eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNTMsMTY2ICs1MSw2IEBAIHN0YXRp
YyBQcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCYgcHJvcGUKICAgICByZXR1cm4gcHJvcGVydHlT
ZXRDU1NPTVdyYXBwZXJNYXBJbnN0YW5jZTsKIH0KIAotY2xhc3MgUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxlRGVjbGFyYXRpb24gewotcHVibGljOgotICAg
IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0
eVNldCkgOiBtX3Byb3BlcnR5U2V0KHByb3BlcnR5U2V0KSB7IH0KLSAgICAKLSAgICB2aXJ0dWFs
IFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGNsZWFyUGFyZW50UnVsZSgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXJlbnRFbGVtZW50KCkgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQotICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBj
b25zdCB7IHJldHVybiAwOyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHJlZigpIE9W
RVJSSURFIHsgbV9wcm9wZXJ0eVNldC0+cmVmKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVyZWYo
KSBPVkVSUklERSB7IG1fcHJvcGVydHlTZXQtPmRlcmVmKCk7IH0KLQotICAgIHZpcnR1YWwgQ1NT
UnVsZSogcGFyZW50UnVsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH07Ci0gICAgdmly
dHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGdl
dFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJv
cGVydHlOYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQo
KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJp
bmcmLCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCkgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3Bl
cnR5SUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKENT
U1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRp
b25Db2RlJikgT1ZFUlJJREU7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0
Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ1NT
U3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1ha2VNdXRhYmxlKCkgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoKSB7IH0gICAgCi0K
LXByb3RlY3RlZDoKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBtX3Byb3BlcnR5U2V0OwotfTsKLQot
Y2xhc3MgUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uCi17Ci1wdWJsaWM6Ci0gICAgUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24oU3R5
bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQsIENTU1J1bGUqIHBhcmVudFJ1bGUpCi0gICAgICAg
IDogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKHByb3BlcnR5U2V0KQotICAgICAgICAs
IG1fcGFyZW50UnVsZShwYXJlbnRSdWxlKSAKLSAgICB7Ci0gICAgfQotCi1wcml2YXRlOiAgICAK
LSAgICB2aXJ0dWFsIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVu
dFJ1bGU7IH07Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50UnVsZSgpIHsgbV9wYXJlbnRS
dWxlID0gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAg
dmlydHVhbCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCgpIGNvbnN0OwotICAgIAot
ICAgIENTU1J1bGUqIG1fcGFyZW50UnVsZTsKLX07Ci0KLWNsYXNzIElubGluZUNTU1N0eWxlRGVj
bGFyYXRpb24gOiBwdWJsaWMgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uCi17Ci1wdWJs
aWM6Ci0gICAgSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBwcm9w
ZXJ0eVNldCwgU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCkKLSAgICAgICAgOiBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24ocHJvcGVydHlTZXQpCi0gICAgICAgICwgbV9wYXJlbnRF
bGVtZW50KHBhcmVudEVsZW1lbnQpIAotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdmly
dHVhbCBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJl
bnRFbGVtZW50OyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50RWxlbWVudCgpIHsgbV9w
YXJlbnRFbGVtZW50ID0gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxj
KCk7Ci0gICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCgpIGNvbnN0
OwotCi0gICAgU3R5bGVkRWxlbWVudCogbV9wYXJlbnRFbGVtZW50OwotfTsKLQotbmFtZXNwYWNl
IHsKLQotY2xhc3MgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIHsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUpOwotcHVibGljOgotICAgIFN0
eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZShQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24q
IGRlY2wpCi0gICAgewotICAgICAgICArK3Nfc2NvcGVDb3VudDsKLQotICAgICAgICBpZiAoc19z
Y29wZUNvdW50ICE9IDEpIHsKLSAgICAgICAgICAgIEFTU0VSVChzX2N1cnJlbnREZWNsID09IGRl
Y2wpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKCFz
X2N1cnJlbnREZWNsKTsKLSAgICAgICAgc19jdXJyZW50RGVjbCA9IGRlY2w7Ci0KLSNpZiBFTkFC
TEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgICAgICBpZiAoIXNfY3VycmVudERlY2wtPnBhcmVu
dEVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9tdXRhdGlvblJlY2lw
aWVudHMgPSBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6Y3JlYXRlRm9yQXR0cmlidXRl
c011dGF0aW9uKHNfY3VycmVudERlY2wtPnBhcmVudEVsZW1lbnQoKSwgSFRNTE5hbWVzOjpzdHls
ZUF0dHIpOwotICAgICAgICBpZiAoIW1fbXV0YXRpb25SZWNpcGllbnRzKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIEF0b21pY1N0cmluZyBvbGRWYWx1ZSA9IG1fbXV0YXRpb25SZWNp
cGllbnRzLT5pc09sZFZhbHVlUmVxdWVzdGVkKCkgPyBzX2N1cnJlbnREZWNsLT5wYXJlbnRFbGVt
ZW50KCktPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0cikgOiBudWxsQXRvbTsKLSAg
ICAgICAgbV9tdXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKHNfY3Vy
cmVudERlY2wtPnBhcmVudEVsZW1lbnQoKSwgSFRNTE5hbWVzOjpzdHlsZUF0dHIsIG9sZFZhbHVl
KTsKLSNlbmRpZgotICAgIH0KLQotICAgIH5TdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUoKQot
ICAgIHsKLSAgICAgICAgLS1zX3Njb3BlQ291bnQ7Ci0gICAgICAgIGlmIChzX3Njb3BlQ291bnQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQot
ICAgICAgICBpZiAobV9tdXRhdGlvbiAmJiBzX3Nob3VsZERlbGl2ZXIpCi0gICAgICAgICAgICBt
X211dGF0aW9uUmVjaXBpZW50cy0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKG1fbXV0YXRpb24pOwot
ICAgICAgICBzX3Nob3VsZERlbGl2ZXIgPSBmYWxzZTsKLSNlbmRpZgotICAgICAgICBpZiAoIXNf
c2hvdWxkTm90aWZ5SW5zcGVjdG9yKSB7Ci0gICAgICAgICAgICBzX2N1cnJlbnREZWNsID0gMDsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBoYXZlIHRvIGNs
ZWFyIGludGVybmFsIHN0YXRlIGJlZm9yZSBjYWxsaW5nIEluc3BlY3RvcidzIGNvZGUuCi0gICAg
ICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogbG9jYWxDb3B5U3R5bGVEZWNsID0g
c19jdXJyZW50RGVjbDsKLSAgICAgICAgc19jdXJyZW50RGVjbCA9IDA7Ci0gICAgICAgIHNfc2hv
dWxkTm90aWZ5SW5zcGVjdG9yID0gZmFsc2U7Ci0gICAgICAgIGlmIChsb2NhbENvcHlTdHlsZURl
Y2wtPnBhcmVudEVsZW1lbnQoKSAmJiBsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVudEVsZW1lbnQo
KS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
SW52YWxpZGF0ZVN0eWxlQXR0cihsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVudEVsZW1lbnQoKS0+
ZG9jdW1lbnQoKSwgbG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCkpOwotICAgIH0K
LQotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgdm9pZCBlbnF1ZXVlTXV0YXRp
b25SZWNvcmQoKQotICAgIHsKLSAgICAgICAgc19zaG91bGREZWxpdmVyID0gdHJ1ZTsKLSAgICB9
Ci0jZW5kaWYKLQotICAgIHZvaWQgZGlkSW52YWxpZGF0ZVN0eWxlQXR0cigpCi0gICAgewotICAg
ICAgICBzX3Nob3VsZE5vdGlmeUluc3BlY3RvciA9IHRydWU7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHN0YXRpYyB1bnNpZ25lZCBzX3Njb3BlQ291bnQ7Ci0gICAgc3RhdGljIFByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc19jdXJyZW50RGVjbDsKLSAgICBzdGF0aWMgYm9vbCBzX3No
b3VsZE5vdGlmeUluc3BlY3RvcjsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAg
IHN0YXRpYyBib29sIHNfc2hvdWxkRGVsaXZlcjsKLQotICAgIE93blB0cjxNdXRhdGlvbk9ic2Vy
dmVySW50ZXJlc3RHcm91cD4gbV9tdXRhdGlvblJlY2lwaWVudHM7Ci0gICAgUmVmUHRyPE11dGF0
aW9uUmVjb3JkPiBtX211dGF0aW9uOwotI2VuZGlmCi19OwotCi11bnNpZ25lZCBTdHlsZUF0dHJp
YnV0ZU11dGF0aW9uU2NvcGU6OnNfc2NvcGVDb3VudCA9IDA7Ci1Qcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24qIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19jdXJyZW50RGVjbCA9
IDA7Ci1ib29sIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19zaG91bGROb3RpZnlJbnNw
ZWN0b3IgPSBmYWxzZTsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotYm9vbCBTdHls
ZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfc2hvdWxkRGVsaXZlciA9IGZhbHNlOwotI2VuZGlm
Ci0KLX0gLy8gbmFtZXNwYWNlCi0KIFN0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQo
KQogICAgIDogbV9zdHJpY3RQYXJzaW5nKGZhbHNlKQogICAgICwgbV9oYXNDU1NPTVdyYXBwZXIo
ZmFsc2UpCkBAIC0xMDgzLDE5NSArOTIxLDYgQEAgdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpjbGVh
clBhcmVudEVsZW1lbgogICAgIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMp
LT5jbGVhclBhcmVudEVsZW1lbnQoKTsKIH0KIAotdW5zaWduZWQgUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uOjpsZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBtX3Byb3BlcnR5U2V0
LT5wcm9wZXJ0eUNvdW50KCk7Ci19Ci0KLVN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246Oml0ZW0odW5zaWduZWQgaSkgY29uc3QKLXsKLSAgICBpZiAoaSA+PSBtX3Byb3BlcnR5
U2V0LT5wcm9wZXJ0eUNvdW50KCkpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gZ2V0
UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KG1fcHJvcGVydHlTZXQtPnBy
b3BlcnR5QXQoaSkuaWQoKSkpOwotfQotCi1TdHJpbmcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+YXNU
ZXh0KCk7Ci19Ci0gICAgCi12b2lkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0
Q3NzVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotI2lmIEVO
QUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3Bl
IG11dGF0aW9uU2NvcGUodGhpcyk7Ci0jZW5kaWYKLSAgICBlYyA9IDA7Ci0gICAgLy8gRklYTUU6
IERldGVjdCBzeW50YXggZXJyb3JzIGFuZCBzZXQgZWMuCi0gICAgbV9wcm9wZXJ0eVNldC0+cGFy
c2VEZWNsYXJhdGlvbih0ZXh0LCBjb250ZXh0U3R5bGVTaGVldCgpKTsKLQotICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIG11dGF0
aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7ICAgIAotI2VuZGlmCi19Ci0KLVBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVy
dHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcGVy
dHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BlcnR5SUQp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwotfQotCi1TdHJpbmcgUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQot
ewotICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAg
IGlmICghcHJvcGVydHlJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBt
X3Byb3BlcnR5U2V0LT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwotfQotCi1TdHJpbmcg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVy
dHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcGVydHlJRCkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5wcm9wZXJ0eUlzSW1wb3J0YW50
KHByb3BlcnR5SUQpID8gImltcG9ydGFudCIgOiAiIjsKLX0KLQotU3RyaW5nIFByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3Bl
cnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wZXJ0eUlEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgaW50IHNob3J0aGFuZElEID0gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlTaG9ydGhh
bmQocHJvcGVydHlJRCk7Ci0gICAgaWYgKCFzaG9ydGhhbmRJRCkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVy
dHlJRD4oc2hvcnRoYW5kSUQpKTsKLX0KLQotYm9vbCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246OmlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsK
LSAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBp
ZiAoIXByb3BlcnR5SUQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9wcm9w
ZXJ0eVNldC0+aXNQcm9wZXJ0eUltcGxpY2l0KHByb3BlcnR5SUQpOwotfQotCi12b2lkIFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAg
U3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7Ci0jZW5kaWYK
LSAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBp
ZiAoIXByb3BlcnR5SUQpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIGltcG9ydGFudCA9IHBy
aW9yaXR5LmZpbmQoImltcG9ydGFudCIsIDAsIGZhbHNlKSAhPSBub3RGb3VuZDsKLSAgICBlYyA9
IDA7Ci0gICAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wZXJ0eVNldC0+c2V0UHJvcGVydHkocHJvcGVy
dHlJRCwgdmFsdWUsIGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hlZXQoKSk7Ci0gICAgaWYgKGNo
YW5nZWQpIHsKLSAgICAgICAgLy8gQ1NTIERPTSByZXF1aXJlcyByYWlzaW5nIFNZTlRBWF9FUlIg
b2YgcGFyc2luZyBmYWlsZWQsIGJ1dCB0aGlzIGlzIHRvbyBkYW5nZXJvdXMgZm9yIGNvbXBhdGli
aWxpdHksCi0gICAgICAgIC8vIHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzI5Nj4uCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSNpZiBFTkFCTEUo
TVVUQVRJT05fT0JTRVJWRVJTKQotICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlv
blJlY29yZCgpOwotI2VuZGlmCi0gICAgfQotfQotCi1TdHJpbmcgUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAg
ICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLSNlbmRp
ZgotICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAg
IGlmICghcHJvcGVydHlJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGVjID0gMDsK
LSAgICBTdHJpbmcgcmVzdWx0OwotICAgIGJvb2wgY2hhbmdlcyA9IG1fcHJvcGVydHlTZXQtPnJl
bW92ZVByb3BlcnR5KHByb3BlcnR5SUQsICZyZXN1bHQpOwotICAgIGlmIChjaGFuZ2VzKSB7Ci0g
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJW
RVJTKQotICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOwotI2Vu
ZGlmCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTVmFsdWU+
IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVy
bmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKLXsgCi0gICAgcmV0dXJuIG1fcHJvcGVydHlT
ZXQtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7IAotfQotCi1TdHJpbmcgUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlEKQoteyAKLSAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJv
cGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsgCi19Ci0KLXZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uOjpzZXRQcm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
eyAKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFN0eWxlQXR0cmlidXRlTXV0
YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwotI2VuZGlmCi0gICAgZWMgPSAwOwotICAg
IGJvb2wgY2hhbmdlZCA9IG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZh
bHVlLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KCkpOwotICAgIGlmIChjaGFuZ2VkKSB7
Ci0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JT
RVJWRVJTKQotICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOwot
I2VuZGlmCi0gICAgfQotfQotCi1DU1NTdHlsZVNoZWV0KiBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb246OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdAoteyAKLSAgICByZXR1cm4gY29udGV4
dFN0eWxlU2hlZXQoKTsgCi19Ci0KLVBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjb3B5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9w
cm9wZXJ0eVNldC0+Y29weSgpOwotfQotCi1QYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFBy
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6bWFrZU11dGFibGUoKQotewotICAgIHJldHVy
biBtX3Byb3BlcnR5U2V0OwotfQotCi1ib29sIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bjo6Y3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cHJvcGVydHlNYXRjaGVzKHByb3BlcnR5KTsK
LX0KLQotdm9pZCBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHlsZVJlY2FsYygp
Ci17Ci0gICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjb250ZXh0U3R5bGVTaGVl
dCgpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBzdHlsZVNoZWV0LT5maW5k
RG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChE
ZWZlclJlY2FsY1N0eWxlKTsKLSAgICB9Ci19Ci0gICAgCi1DU1NTdHlsZVNoZWV0KiBSdWxlQ1NT
U3R5bGVEZWNsYXJhdGlvbjo6Y29udGV4dFN0eWxlU2hlZXQoKSBjb25zdAotewotICAgIHJldHVy
biBtX3BhcmVudFJ1bGUgPyBtX3BhcmVudFJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7Ci19
Ci0KLXZvaWQgSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHlsZVJlY2FsYygp
Ci17Ci0gICAgaWYgKCFtX3BhcmVudEVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Bh
cmVudEVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOwotICAg
IG1fcGFyZW50RWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCk7Ci0gICAgU3R5bGVB
dHRyaWJ1dGVNdXRhdGlvblNjb3BlKHRoaXMpLmRpZEludmFsaWRhdGVTdHlsZUF0dHIoKTsKLSAg
ICByZXR1cm47Ci19Ci0KLUNTU1N0eWxlU2hlZXQqIElubGluZUNTU1N0eWxlRGVjbGFyYXRpb246
OmNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYXJlbnRFbGVtZW50
ID8gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSA6IDA7Ci19Ci0K
IGNsYXNzIFNhbWVTaXplQXNTdHlsZVByb3BlcnR5U2V0IDogcHVibGljIFJlZkNvdW50ZWQ8U2Ft
ZVNpemVBc1N0eWxlUHJvcGVydHlTZXQ+IHsKICAgICBWZWN0b3I8Q1NTUHJvcGVydHksIDQ+IHBy
b3BlcnRpZXM7CiAgICAgdW5zaWduZWQgYml0ZmllbGQ7Cg==
</data>
<flag name="commit-queue"
          id="130259"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127988</attachid>
            <date>2012-02-21 09:39:51 -0800</date>
            <delta_ts>2012-02-21 10:26:59 -0800</delta_ts>
            <desc>with gtk build file</desc>
            <filename>propertyset-cssom-file-3.patch</filename>
            <type>text/plain</type>
            <size>118449</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODM2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAyLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbiB0byBhIGZpbGUgb2YgaXRzIG93bgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzkxMjEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1ha2VzIFN0eWxlUHJvcGVydHlTZXQu
Y3BwIG1vcmUgcmVhZGFibGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNw
cC4KKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6cmVm
KToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGVy
ZWYpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL1Byb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUHJv
cGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6cGFyZW50
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b246OmNsZWFyUGFyZW50UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb246OmNsZWFyUGFyZW50RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQ
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNvbnRleHRTdHlsZVNoZWV0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHls
ZVJlY2FsYyk6CisgICAgICAgIChSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6UnVsZUNTU1N0eWxlRGVjbGFyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OnBhcmVudFJ1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OmNsZWFyUGFyZW50
UnVsZSk6CisgICAgICAgIChJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUNTU1N0eWxlRGVjbGFyYXRpb246OklubGluZUNTU1N0eWxlRGVjbGFyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cGFyZW50
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uOjpj
bGVhclBhcmVudEVsZW1lbnQpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTAyLTIwICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFw
cGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzkwNDYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDgzNjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDkwLDYgKzQ5
MCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3MvTWVkaWFRdWVyeUxpc3QuY3BwCiAg
ICAgY3NzL01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCiAgICAgY3NzL01lZGlhUXVlcnlNYXRj
aGVyLmNwcAorICAgIGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCiAgICAg
Y3NzL1JHQkNvbG9yLmNwcAogICAgIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwCiAgICAgY3NzL1No
YWRvd1ZhbHVlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lv
biAxMDgzNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDExLDYgKzE0MTEsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYVF1ZXJ5TWF0Y2hlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUGFpci5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9jc3MvUmVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUkdCQ29sb3Iu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUkdCQ29sb3IuaCBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJ
KHJldmlzaW9uIDEwODM2MykKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1Miw2ICs0NTIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBjc3MvTWVkaWFRdWVy
eUxpc3QuY3BwIFwKICAgICBjc3MvTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgXAogICAgIGNz
cy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAgXAorICAgIGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb24uY3BwIFwKICAgICBjc3MvUkdCQ29sb3IuY3BwIFwKICAgICBjc3MvU2VsZWN0b3JD
aGVja2VyLmNwcCBcCiAgICAgY3NzL1NoYWRvd1ZhbHVlLmNwcCBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiAxMDgzNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdv
cmtpbmcgY29weSkKQEAgLTIwODEsNiArMjA4MSw4IEBACiAgICAgICAgICAgICAnY3NzL01lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAnY3NzL01lZGlhUXVlcnlNYXRjaGVy
LmNwcCcsCiAgICAgICAgICAgICAnY3NzL01lZGlhUXVlcnlNYXRjaGVyLmgnLAorICAgICAgICAg
ICAgJ2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwJworICAgICAgICAgICAg
J2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaCcKICAgICAgICAgICAgICdjc3Mv
UkdCQ29sb3IuY3BwJywKICAgICAgICAgICAgICdjc3MvUkdCQ29sb3IuaCcsCiAgICAgICAgICAg
ICAnY3NzL1JlY3QuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTA4MzYzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1NDU4LDYgKzM1NDU4
LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGNzc1xQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwIgorCQkJCT4KKwkJCTwvRmls
ZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGNzc1xxdWlya3MuY3NzIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDEwODM2MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTg3NCw2ICs1ODc0LDggQEAKIAkJRTRBRkQwMEUw
REFGMzM1NTAwRjVGNTVDIC8qIFNNSUxUaW1lQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFGRDAwODBEQUYzMzU0MDBGNUY1NUMgLyog
U01JTFRpbWVDb250YWluZXIuaCAqLzsgfTsKIAkJRTRBRkQwMEYwREFGMzM1NTAwRjVGNTVDIC8q
IFNWR1NNSUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0QUZEMDA5MERBRjMzNTQwMEY1RjU1QyAvKiBTVkdTTUlMRWxlbWVudC5jcHAg
Ki87IH07CiAJCUU0QUZEMDEwMERBRjMzNTUwMEY1RjU1QyAvKiBTVkdTTUlMRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRkQwMEEwREFG
MzM1NDAwRjVGNTVDIC8qIFNWR1NNSUxFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTRCQkVEMEUxNEY0MDI1RDAwM0YwQjk4IC8qIFBy
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEJCRUQwQzE0RjQwMjVEMDAzRjBCOTggLyogUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCAqLzsgfTsKKwkJRTRCQkVEMEYxNEY0MDI1RDAw
M0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCQkVEMEQxNEY0MDI1RDAwM0YwQjk4
IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oICovOyB9OwogCQlFNEMxNzg5QTBF
RTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzE3ODk1MEVFNjkwMzgwMDgyNEQ2OSAvKiBD
U1NTZWxlY3Rvckxpc3QuY3BwICovOyB9OwogCQlFNEMxNzg5QjBFRTY5MDM4MDA4MjRENjkgLyog
Q1NTU2VsZWN0b3JMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNEMxNzg5NjBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggKi87
IH07CiAJCUU0QzI3OTU4MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMyNzk1NjBDRjk3NDE5
MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuY3BwICovOyB9OwpAQCAtMTI5MDIsNiArMTI5MDQsOCBA
QAogCQlFNEI0MjM4MDBDQkZCNzNDMDBBRjJFQ0UgLyogSlNIVE1MTWVkaWFFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTE1lZGlhRWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEI0MjM4NTBDQkZCNzNDMDBBRjJFQ0UgLyogSlNQ
cm9ncmVzc0V2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
UHJvZ3Jlc3NFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QjQyMzg2
MENCRkI3M0MwMEFGMkVDRSAvKiBKU1Byb2dyZXNzRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNQcm9ncmVzc0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUU0QkJFRDBDMTRGNDAyNUQwMDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTRCQkVEMEQxNEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMTc4OTUw
RUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDU1NTZWxlY3Rvckxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNEMxNzg5NjBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1NlbGVjdG9yTGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEMyNzk1NjBDRjk3NDE5MDBFOTdCOTggLyog
UmVuZGVyTWVkaWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyTWVkaWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAyMzcsNiArMjAy
NDEsOCBAQAogCQkJCUQzQUExMEYxMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hl
ci5jcHAgKi8sCiAJCQkJRDNBQTEwRjIxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRj
aGVyLmggKi8sCiAJCQkJQTgwRTZDRDEwQTE5ODlDQTAwN0ZCOEM1IC8qIFBhaXIuaCAqLywKKwkJ
CQlFNEJCRUQwQzE0RjQwMjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uLmNwcCAqLywKKwkJCQlFNEJCRUQwRDE0RjQwMjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uLmggKi8sCiAJCQkJOTNDQTRDOUYwOURGOTNGQTAwREY4Njc3IC8q
IHF1aXJrcy5jc3MgKi8sCiAJCQkJQkM0MzY4RTcwQzIyNkUzMjAwNUVGQjVGIC8qIFJlY3QuaCAq
LywKIAkJCQlBODBFNzk5NjBBMTlCRDIxMDA3RkI4QzUgLyogUmVjdC5pZGwgKi8sCkBAIC0yNDI4
OSw2ICsyNDI5NSw3IEBACiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmlj
b2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8q
IFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUZENTM3MzUzMTM3QjY1MTgwMDAwOERD
RSAvKiBaZXJvUG9sZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRCQkVEMEYxNEY0MDI1RDAwM0Yw
Qjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0yNzIzNiw2ICsyNzI0Myw3IEBACiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhT
TFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzdFMkUwRTEyRjBGQzlDMDBD
MTMzNzkgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDUzNzM1MjEzN0I2
NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTRCQkVEMEUx
NEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAxMDgzNDUpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcDoxMDgzNDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyODEgQEAKKy8qCisgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNl
dC5oIgorCisjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5o
IgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TG9uZ2hhbmQuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0
eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQu
aCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0
LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZl
ckludGVyZXN0R3JvdXAuaCIKKyNpbmNsdWRlICJNdXRhdGlvblJlY29yZC5oIgorI2luY2x1ZGUg
IlN0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3R5cGVkZWYgSGFzaE1hcDxjb25zdCBTdHlsZVByb3BlcnR5U2V0KiwgT3duUHRyPFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbj4gPiBQcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcDsK
K3N0YXRpYyBQcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCYgcHJvcGVydHlTZXRDU1NPTVdyYXBw
ZXJNYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUHJvcGVydHlTZXRDU1NPTVdyYXBw
ZXJNYXAsIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwSW5zdGFuY2UsICgpKTsKKyAgICByZXR1
cm4gcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXBJbnN0YW5jZTsKK30KKworY2xhc3MgUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxlRGVjbGFyYXRpb24gewor
cHVibGljOgorICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5
U2V0KiBwcm9wZXJ0eVNldCkgOiBtX3Byb3BlcnR5U2V0KHByb3BlcnR5U2V0KSB7IH0KKyAgICAK
KyAgICB2aXJ0dWFsIFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50UnVsZSgpIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXJlbnRFbGVtZW50KCkgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0
eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiAwOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2
b2lkIHJlZigpIE9WRVJSSURFIHsgbV9wcm9wZXJ0eVNldC0+cmVmKCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGVyZWYoKSBPVkVSUklERSB7IG1fcHJvcGVydHlTZXQtPmRlcmVmKCk7IH0KKworICAg
IHZpcnR1YWwgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7
IH07CisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3Bl
cnR5VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgU3RyaW5nIGdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9w
ZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4
dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVy
dHlJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZUludGVy
bmFsKENTU1Byb3BlcnR5SUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0
eUludGVybmFsKENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0
YW50LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCBib29sIGNz
c1Byb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1ha2VN
dXRhYmxlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMo
KSB7IH0gICAgCisKK3Byb3RlY3RlZDoKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBtX3Byb3BlcnR5
U2V0OworfTsKKworY2xhc3MgUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uCit7CitwdWJsaWM6CisgICAgUnVsZUNTU1N0eWxlRGVj
bGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQsIENTU1J1bGUqIHBhcmVudFJ1
bGUpCisgICAgICAgIDogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKHByb3BlcnR5U2V0
KQorICAgICAgICAsIG1fcGFyZW50UnVsZShwYXJlbnRSdWxlKSAKKyAgICB7CisgICAgfQorCitw
cml2YXRlOiAgICAKKyAgICB2aXJ0dWFsIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmVudFJ1bGU7IH07CisgICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50UnVsZSgp
IHsgbV9wYXJlbnRSdWxlID0gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCgpIGNv
bnN0OworICAgIAorICAgIENTU1J1bGUqIG1fcGFyZW50UnVsZTsKK307CisKK2NsYXNzIElubGlu
ZUNTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uCit7CitwdWJsaWM6CisgICAgSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3Bl
cnR5U2V0KiBwcm9wZXJ0eVNldCwgU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCkKKyAgICAg
ICAgOiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24ocHJvcGVydHlTZXQpCisgICAgICAg
ICwgbV9wYXJlbnRFbGVtZW50KHBhcmVudEVsZW1lbnQpIAorICAgIHsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXJlbnRFbGVtZW50OyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50RWxl
bWVudCgpIHsgbV9wYXJlbnRFbGVtZW50ID0gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c1N0eWxlUmVjYWxjKCk7CisgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVT
aGVldCgpIGNvbnN0OworCisgICAgU3R5bGVkRWxlbWVudCogbV9wYXJlbnRFbGVtZW50OworfTsK
KworbmFtZXNwYWNlIHsKKworY2xhc3MgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUpOworcHVi
bGljOgorICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZShQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24qIGRlY2wpCisgICAgeworICAgICAgICArK3Nfc2NvcGVDb3VudDsKKworICAg
ICAgICBpZiAoc19zY29wZUNvdW50ICE9IDEpIHsKKyAgICAgICAgICAgIEFTU0VSVChzX2N1cnJl
bnREZWNsID09IGRlY2wpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKCFzX2N1cnJlbnREZWNsKTsKKyAgICAgICAgc19jdXJyZW50RGVjbCA9IGRlY2w7
CisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgICAgICBpZiAoIXNfY3VycmVu
dERlY2wtPnBhcmVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9t
dXRhdGlvblJlY2lwaWVudHMgPSBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6Y3JlYXRl
Rm9yQXR0cmlidXRlc011dGF0aW9uKHNfY3VycmVudERlY2wtPnBhcmVudEVsZW1lbnQoKSwgSFRN
TE5hbWVzOjpzdHlsZUF0dHIpOworICAgICAgICBpZiAoIW1fbXV0YXRpb25SZWNpcGllbnRzKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEF0b21pY1N0cmluZyBvbGRWYWx1ZSA9IG1f
bXV0YXRpb25SZWNpcGllbnRzLT5pc09sZFZhbHVlUmVxdWVzdGVkKCkgPyBzX2N1cnJlbnREZWNs
LT5wYXJlbnRFbGVtZW50KCktPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0cikgOiBu
dWxsQXRvbTsKKyAgICAgICAgbV9tdXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRy
aWJ1dGVzKHNfY3VycmVudERlY2wtPnBhcmVudEVsZW1lbnQoKSwgSFRNTE5hbWVzOjpzdHlsZUF0
dHIsIG9sZFZhbHVlKTsKKyNlbmRpZgorICAgIH0KKworICAgIH5TdHlsZUF0dHJpYnV0ZU11dGF0
aW9uU2NvcGUoKQorICAgIHsKKyAgICAgICAgLS1zX3Njb3BlQ291bnQ7CisgICAgICAgIGlmIChz
X3Njb3BlQ291bnQpCisgICAgICAgICAgICByZXR1cm47CisKKyNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQorICAgICAgICBpZiAobV9tdXRhdGlvbiAmJiBzX3Nob3VsZERlbGl2ZXIpCisg
ICAgICAgICAgICBtX211dGF0aW9uUmVjaXBpZW50cy0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKG1f
bXV0YXRpb24pOworICAgICAgICBzX3Nob3VsZERlbGl2ZXIgPSBmYWxzZTsKKyNlbmRpZgorICAg
ICAgICBpZiAoIXNfc2hvdWxkTm90aWZ5SW5zcGVjdG9yKSB7CisgICAgICAgICAgICBzX2N1cnJl
bnREZWNsID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBX
ZSBoYXZlIHRvIGNsZWFyIGludGVybmFsIHN0YXRlIGJlZm9yZSBjYWxsaW5nIEluc3BlY3Rvcidz
IGNvZGUuCisgICAgICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogbG9jYWxDb3B5
U3R5bGVEZWNsID0gc19jdXJyZW50RGVjbDsKKyAgICAgICAgc19jdXJyZW50RGVjbCA9IDA7Cisg
ICAgICAgIHNfc2hvdWxkTm90aWZ5SW5zcGVjdG9yID0gZmFsc2U7CisgICAgICAgIGlmIChsb2Nh
bENvcHlTdHlsZURlY2wtPnBhcmVudEVsZW1lbnQoKSAmJiBsb2NhbENvcHlTdHlsZURlY2wtPnBh
cmVudEVsZW1lbnQoKS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihsb2NhbENvcHlTdHlsZURlY2wtPnBhcmVu
dEVsZW1lbnQoKS0+ZG9jdW1lbnQoKSwgbG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50
KCkpOworICAgIH0KKworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgdm9pZCBl
bnF1ZXVlTXV0YXRpb25SZWNvcmQoKQorICAgIHsKKyAgICAgICAgc19zaG91bGREZWxpdmVyID0g
dHJ1ZTsKKyAgICB9CisjZW5kaWYKKworICAgIHZvaWQgZGlkSW52YWxpZGF0ZVN0eWxlQXR0cigp
CisgICAgeworICAgICAgICBzX3Nob3VsZE5vdGlmeUluc3BlY3RvciA9IHRydWU7CisgICAgfQor
Citwcml2YXRlOgorICAgIHN0YXRpYyB1bnNpZ25lZCBzX3Njb3BlQ291bnQ7CisgICAgc3RhdGlj
IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogc19jdXJyZW50RGVjbDsKKyAgICBzdGF0
aWMgYm9vbCBzX3Nob3VsZE5vdGlmeUluc3BlY3RvcjsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JT
RVJWRVJTKQorICAgIHN0YXRpYyBib29sIHNfc2hvdWxkRGVsaXZlcjsKKworICAgIE93blB0cjxN
dXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4gbV9tdXRhdGlvblJlY2lwaWVudHM7CisgICAg
UmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtX211dGF0aW9uOworI2VuZGlmCit9OworCit1bnNpZ25l
ZCBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfc2NvcGVDb3VudCA9IDA7CitQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19j
dXJyZW50RGVjbCA9IDA7Citib29sIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19zaG91
bGROb3RpZnlJbnNwZWN0b3IgPSBmYWxzZTsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJT
KQorYm9vbCBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfc2hvdWxkRGVsaXZlciA9IGZh
bHNlOworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlCisKK1N0eWxlUHJvcGVydHlTZXQ6OlN0eWxl
UHJvcGVydHlTZXQoKQorICAgIDogbV9zdHJpY3RQYXJzaW5nKGZhbHNlKQorICAgICwgbV9oYXND
U1NPTVdyYXBwZXIoZmFsc2UpCit7Cit9CisKK1N0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVy
dHlTZXQoY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYgcHJvcGVydGllcykKKyAgICA6IG1fcHJv
cGVydGllcyhwcm9wZXJ0aWVzKQorICAgICwgbV9zdHJpY3RQYXJzaW5nKHRydWUpCisgICAgLCBt
X2hhc0NTU09NV3JhcHBlcihmYWxzZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMuc2hyaW5rVG9GaXQo
KTsKK30KKworU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChjb25zdCBDU1NQcm9w
ZXJ0eSogY29uc3QgKiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcywgYm9vbCB1c2VTdHJp
Y3RQYXJzaW5nKQorICAgIDogbV9zdHJpY3RQYXJzaW5nKHVzZVN0cmljdFBhcnNpbmcpCisgICAg
LCBtX2hhc0NTU09NV3JhcHBlcihmYWxzZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShudW1Qcm9wZXJ0aWVzKTsKKyAgICBIYXNoTWFwPGludCwgYm9vbD4gY2Fu
ZGlkYXRlczsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewor
ICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSAqcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldOworICAg
ICAgICBBU1NFUlQocHJvcGVydHkpOworICAgICAgICBib29sIGltcG9ydGFudCA9IHByb3BlcnR5
LT5pc0ltcG9ydGFudCgpOworCisgICAgICAgIEhhc2hNYXA8aW50LCBib29sPjo6aXRlcmF0b3Ig
aXQgPSBjYW5kaWRhdGVzLmZpbmQocHJvcGVydHktPmlkKCkpOworICAgICAgICBpZiAoaXQgIT0g
Y2FuZGlkYXRlcy5lbmQoKSkgeworICAgICAgICAgICAgaWYgKCFpbXBvcnRhbnQgJiYgaXQtPnNl
Y29uZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJlbW92ZVByb3Bl
cnR5KHByb3BlcnR5LT5pZCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fcHJvcGVydGllcy5h
cHBlbmQoKnByb3BlcnR5KTsKKyAgICAgICAgY2FuZGlkYXRlcy5zZXQocHJvcGVydHktPmlkKCks
IGltcG9ydGFudCk7CisgICAgfQorfQorCitTdHlsZVByb3BlcnR5U2V0Ojp+U3R5bGVQcm9wZXJ0
eVNldCgpCit7CisgICAgQVNTRVJUKCFtX2hhc0NTU09NV3JhcHBlciB8fCBwcm9wZXJ0eVNldENT
U09NV3JhcHBlck1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKKyAgICBpZiAobV9oYXNDU1NPTVdyYXBw
ZXIpCisgICAgICAgIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkucmVtb3ZlKHRoaXMpOwor
fQorCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmNvcHlQcm9wZXJ0aWVzRnJvbShjb25zdCBTdHls
ZVByb3BlcnR5U2V0JiBvdGhlcikKK3sKKyAgICBtX3Byb3BlcnRpZXMgPSBvdGhlci5tX3Byb3Bl
cnRpZXM7Cit9CisKK1N0cmluZyBTdHlsZVByb3BlcnR5U2V0OjpnZXRQcm9wZXJ0eVZhbHVlKGlu
dCBwcm9wZXJ0eUlEKSBjb25zdAoreworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQ
cm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgcmV0
dXJuIHZhbHVlLT5jc3NUZXh0KCk7CisKKyAgICAvLyBTaG9ydGhhbmQgYW5kIDQtdmFsdWVzIHBy
b3BlcnRpZXMKKyAgICBzd2l0Y2ggKHByb3BlcnR5SUQpIHsKKyAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlclNwYWNpbmc6IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJd
ID0geyBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLCBDU1NQcm9wZXJ0
eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZyB9OworICAgICAgICAgICAgcmV0dXJuIGJvcmRl
clNwYWNpbmdWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uOiB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhp
cyBjb3JyZWN0PyBUaGUgY29kZSBpbiBjc3NwYXJzZXIuY3BwIGlzIGNvbmZ1c2luZworICAgICAg
ICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5QmFja2dyb3VuZFBv
c2l0aW9uWCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZIH07CisgICAgICAgICAgICBy
ZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0OiB7CisgICAgICAgICAgICBj
b25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwg
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WSB9OworICAgICAgICAgICAgcmV0dXJuIGdldExh
eWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZDogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRp
ZXNbOV0gPSB7IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFJl
cGVhdFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUmVwZWF0WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91
bmRQb3NpdGlvblksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4gfTsKKyAgICAgICAgICAgIHJldHVy
biBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcjogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3Bl
cnRpZXNbM11bNF0gPSB7eyBDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3Bl
cnR5Qm9yZGVyQm90dG9tV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoIH0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7IENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9y
ZGVyUmlnaHRTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21TdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGUgfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ1NTUHJvcGVydHlCb3JkZXJU
b3BDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJvcGVydHlCb3JkZXJSaWdodENvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xv
ciB9fTsKKyAgICAgICAgICAgIFN0cmluZyByZXM7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgocHJvcGVydGllcyk7ICsraSkgeworICAgICAgICAg
ICAgICAgIFN0cmluZyB2YWx1ZSA9IGdldENvbW1vblZhbHVlKHByb3BlcnRpZXNbaV0pOworICAg
ICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFyZXMuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gIiAiOwor
ICAgICAgICAgICAgICAgICAgICByZXMgKz0gdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wOiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVy
dGllc1szXSA9IHsgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgQ1NTUHJvcGVydHlCb3JkZXJU
b3BTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9w
ZXJ0eUJvcmRlclRvcENvbG9yfTsKKyAgICAgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1
ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
UmlnaHQ6IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQcm9w
ZXJ0eUJvcmRlclJpZ2h0V2lkdGgsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0
Q29sb3J9OworICAgICAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMp
OworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b206IHsKKyAg
ICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbVdpZHRoLCBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3J9Owor
ICAgICAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0OiB7CisgICAgICAgICAgICBj
b25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsIENT
U1Byb3BlcnR5Qm9yZGVyTGVmdFN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yfTsKKyAgICAgICAgICAgIHJldHVy
biBnZXRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENTU1Byb3BlcnR5T3V0bGluZTogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNb
M10gPSB7IENTU1Byb3BlcnR5T3V0bGluZVdpZHRoLCBDU1NQcm9wZXJ0eU91dGxpbmVTdHlsZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eU91dGxp
bmVDb2xvciB9OworICAgICAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRp
ZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xvcjogewor
ICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU1Byb3BlcnR5Qm9yZGVy
VG9wQ29sb3IsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCBDU1NQ
cm9wZXJ0eUJvcmRlckxlZnRDb2xvciB9OworICAgICAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMo
cHJvcGVydGllcyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcldp
ZHRoOiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTUHJvcGVy
dHlCb3JkZXJUb3BXaWR0aCwgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lk
dGgsIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0
NFZhbHVlcyhwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyU3R5bGU6IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBD
U1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlLCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJC
b3R0b21TdHlsZSwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGUgfTsKKyAgICAgICAgICAgIHJl
dHVybiBnZXQ0VmFsdWVzKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRGbGV4RmxvdzogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRp
ZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRGbGV4RGlyZWN0aW9uLCBDU1NQcm9wZXJ0eVdlYmtp
dEZsZXhXcmFwIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVy
dGllcyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6CisgICAgICAg
ICAgICByZXR1cm4gZm9udFZhbHVlKCk7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW46
IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NQcm9wZXJ0eU1h
cmdpblRvcCwgQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgQ1NTUHJvcGVydHlNYXJn
aW5MZWZ0IH07CisgICAgICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyhwcm9wZXJ0aWVzKTsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3c6IHsKKyAgICAgICAgICAg
IGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eU92ZXJmbG93WCwgQ1NTUHJv
cGVydHlPdmVyZmxvd1kgfTsKKyAgICAgICAgICAgIHJldHVybiBnZXRDb21tb25WYWx1ZShwcm9w
ZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZzogewor
ICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU1Byb3BlcnR5UGFkZGlu
Z1RvcCwgQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCBDU1NQcm9wZXJ0eVBhZGRp
bmdMZWZ0IH07CisgICAgICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyhwcm9wZXJ0aWVzKTsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlOiB7CisgICAgICAgICAg
ICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTUHJvcGVydHlMaXN0U3R5bGVUeXBlLCBD
U1NQcm9wZXJ0eUxpc3RTdHlsZVBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2UgfTsKKyAgICAgICAgICAgIHJl
dHVybiBnZXRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uOiB7CisgICAgICAgICAgICAvLyBGSVhN
RTogSXMgdGhpcyBjb3JyZWN0PyBUaGUgY29kZSBpbiBjc3NwYXJzZXIuY3BwIGlzIGNvbmZ1c2lu
ZworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5V2Vi
a2l0TWFza1Bvc2l0aW9uWCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZIH07CisgICAg
ICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0OiB7CisgICAg
ICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRNYXNr
UmVwZWF0WCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WSB9OworICAgICAgICAgICAgcmV0
dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazogeworICAgICAgICAgICAgY29uc3QgaW50
IHByb3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2UsIENTU1Byb3BlcnR5
V2Via2l0TWFza1JlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU1Byb3BlcnR5V2Via2l0TWFza0F0dGFjaG1lbnQsIENTU1Byb3BlcnR5V2Via2l0TWFza1Bv
c2l0aW9uLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luIH07CisgICAgICAg
ICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW46IHsKKyAg
ICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zZm9ybU9yaWdpblgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5ZLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWiB9Owor
ICAgICAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOiB7CisgICAgICAg
ICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uUHJvcGVydHksIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNp
dGlvblRpbWluZ0Z1bmN0aW9uLCBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheSB9Owor
ICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOiB7Cisg
ICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s3XSA9IHsgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25OYW1lLCBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0
aW9uVGltaW5nRnVuY3Rpb24sIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmlt
YXRpb25JdGVyYXRpb25Db3VudCwgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJr
aXRBbmltYXRpb25GaWxsTW9kZSB9OworICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9y
dGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0V3JhcDogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7
IENTU1Byb3BlcnR5V2Via2l0V3JhcEZsb3csIENTU1Byb3BlcnR5V2Via2l0V3JhcE1hcmdpbiwK
KyAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBQYWRkaW5nIH07CisgICAgICAg
ICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CisgICAgICAgIH0KKyNp
ZiBFTkFCTEUoU1ZHKQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyOiB7CisgICAgICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eU1hcmtlclN0YXJ0KTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWUtPmNzc1RleHQoKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmJvcmRlclNw
YWNpbmdWYWx1ZShjb25zdCBpbnQgcHJvcGVydGllc1syXSkgY29uc3QKK3sKKyAgICBSZWZQdHI8
Q1NTVmFsdWU+IGhvcml6b250YWxWYWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGll
c1swXSk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2ZXJ0aWNhbFZhbHVlID0gZ2V0UHJvcGVydHlD
U1NWYWx1ZShwcm9wZXJ0aWVzWzFdKTsKKworICAgIGlmICghaG9yaXpvbnRhbFZhbHVlKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgQVNTRVJUKHZlcnRpY2FsVmFsdWUpOyAvLyBCeSA8
aHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvdGFibGVzLmh0bWwjc2VwYXJhdGVkLWJvcmRlcnM+
LgorCisgICAgU3RyaW5nIGhvcml6b250YWxWYWx1ZUNTU1RleHQgPSBob3Jpem9udGFsVmFsdWUt
PmNzc1RleHQoKTsKKyAgICBTdHJpbmcgdmVydGljYWxWYWx1ZUNTU1RleHQgPSB2ZXJ0aWNhbFZh
bHVlLT5jc3NUZXh0KCk7CisgICAgaWYgKGhvcml6b250YWxWYWx1ZUNTU1RleHQgPT0gdmVydGlj
YWxWYWx1ZUNTU1RleHQpCisgICAgICAgIHJldHVybiBob3Jpem9udGFsVmFsdWVDU1NUZXh0Owor
ICAgIHJldHVybiBob3Jpem9udGFsVmFsdWVDU1NUZXh0ICsgJyAnICsgdmVydGljYWxWYWx1ZUNT
U1RleHQ7Cit9CisKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6YXBwZW5kRm9udExvbmdoYW5kVmFs
dWVJZkV4cGxpY2l0KGludCBwcm9wZXJ0eUlkLCBTdHJpbmdCdWlsZGVyJiByZXN1bHQpIGNvbnN0
Cit7CisgICAgY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElk
KHByb3BlcnR5SWQpOworICAgIGlmICghcHJvcGVydHkpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gQWxsIGxvbmdoYW5kcyBtdXN0IGhhdmUgYXQgbGVhc3QgaW1wbGljaXQgdmFsdWVzIGlmICJm
b250IiBpcyBzcGVjaWZpZWQuCisgICAgaWYgKHByb3BlcnR5LT5pc0ltcGxpY2l0KCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgY2hhciBwcmVmaXggPSAnXDAnOworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6CisgICAgICAgIGJy
ZWFrOyAvLyBObyBwcmVmaXguCisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2Vp
Z2h0OgorICAgICAgICBwcmVmaXggPSAnICc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NT
UHJvcGVydHlMaW5lSGVpZ2h0OgorICAgICAgICBwcmVmaXggPSAnLyc7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIGlmIChwcmVmaXggJiYgIXJlc3VsdC5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQocHJlZml4KTsKKyAgICByZXN1bHQuYXBwZW5kKHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0
KCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1N0cmluZyBTdHlsZVByb3BlcnR5U2V0Ojpm
b250VmFsdWUoKSBjb25zdAoreworICAgIGNvbnN0IENTU1Byb3BlcnR5KiBmb250U2l6ZVByb3Bl
cnR5ID0gZmluZFByb3BlcnR5V2l0aElkKENTU1Byb3BlcnR5Rm9udFNpemUpOworICAgIGlmICgh
Zm9udFNpemVQcm9wZXJ0eSB8fCBmb250U2l6ZVByb3BlcnR5LT5pc0ltcGxpY2l0KCkpCisgICAg
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Cisg
ICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBzdWNjZXNzICY9IGFwcGVuZEZvbnRMb25naGFu
ZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgcmVzdWx0KTsKKyAgICBzdWNj
ZXNzICY9IGFwcGVuZEZvbnRMb25naGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUZvbnRW
YXJpYW50LCByZXN1bHQpOworICAgIHN1Y2Nlc3MgJj0gYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJ
ZkV4cGxpY2l0KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcmVzdWx0KTsKKyAgICBpZiAoIXJlc3Vs
dC5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICByZXN1bHQuYXBw
ZW5kKGZvbnRTaXplUHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKSk7CisgICAgc3VjY2VzcyAm
PSBhcHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlmRXhwbGljaXQoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0
LCByZXN1bHQpOworICAgIHN1Y2Nlc3MgJj0gYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxp
Y2l0KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgcmVzdWx0KTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsK
KyAgICAgICAgLy8gQW4gaW52YWxpZCAiZm9udCIgdmFsdWUgaGFzIGJlZW4gYnVpbHQgKHNob3Vs
ZCBuZXZlciBoYXBwZW4sIGFzIGF0IGxlYXN0IGltcGxpY2l0IHZhbHVlcworICAgICAgICAvLyBm
b3IgbWFuZGF0b3J5IGxvbmdoYW5kcyBhcmUgYWx3YXlzIGZvdW5kIGluIHRoZSBzdHlsZSksIHJl
cG9ydCBlbXB0eSB2YWx1ZSBpbnN0ZWFkLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQu
dG9TdHJpbmcoKTsKK30KKworU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldDRWYWx1ZXMoY29u
c3QgaW50KiBwcm9wZXJ0aWVzKSBjb25zdAoreworICAgIC8vIEFzc3VtZSB0aGUgcHJvcGVydGll
cyBhcmUgaW4gdGhlIHVzdWFsIG9yZGVyIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdC4KKyAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHRvcFZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVz
WzBdKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHJpZ2h0VmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1Zh
bHVlKHByb3BlcnRpZXNbMV0pOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gYm90dG9tVmFsdWUgPSBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbMl0pOworICAgIFJlZlB0cjxDU1NWYWx1ZT4g
bGVmdFZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzNdKTsKKworICAgIC8v
IEFsbCA0IHByb3BlcnRpZXMgbXVzdCBiZSBzcGVjaWZpZWQuCisgICAgaWYgKCF0b3BWYWx1ZSB8
fCAhcmlnaHRWYWx1ZSB8fCAhYm90dG9tVmFsdWUgfHwgIWxlZnRWYWx1ZSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgYm9vbCBzaG93TGVmdCA9IHJpZ2h0VmFsdWUtPmNzc1RleHQo
KSAhPSBsZWZ0VmFsdWUtPmNzc1RleHQoKTsKKyAgICBib29sIHNob3dCb3R0b20gPSAodG9wVmFs
dWUtPmNzc1RleHQoKSAhPSBib3R0b21WYWx1ZS0+Y3NzVGV4dCgpKSB8fCBzaG93TGVmdDsKKyAg
ICBib29sIHNob3dSaWdodCA9ICh0b3BWYWx1ZS0+Y3NzVGV4dCgpICE9IHJpZ2h0VmFsdWUtPmNz
c1RleHQoKSkgfHwgc2hvd0JvdHRvbTsKKworICAgIFN0cmluZyByZXMgPSB0b3BWYWx1ZS0+Y3Nz
VGV4dCgpOworICAgIGlmIChzaG93UmlnaHQpCisgICAgICAgIHJlcyArPSAiICIgKyByaWdodFZh
bHVlLT5jc3NUZXh0KCk7CisgICAgaWYgKHNob3dCb3R0b20pCisgICAgICAgIHJlcyArPSAiICIg
KyBib3R0b21WYWx1ZS0+Y3NzVGV4dCgpOworICAgIGlmIChzaG93TGVmdCkKKyAgICAgICAgcmVz
ICs9ICIgIiArIGxlZnRWYWx1ZS0+Y3NzVGV4dCgpOworCisgICAgcmV0dXJuIHJlczsKK30KKwor
U3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBp
bnQqIHByb3BlcnRpZXMsIHNpemVfdCBzaXplKSBjb25zdAoreworICAgIFN0cmluZyByZXM7CisK
KyAgICAvLyBCZWdpbiBieSBjb2xsZWN0aW5nIHRoZSBwcm9wZXJ0aWVzIGludG8gYW4gYXJyYXku
CisgICAgVmVjdG9yPCBSZWZQdHI8Q1NTVmFsdWU+ID4gdmFsdWVzKHNpemUpOworICAgIHNpemVf
dCBudW1MYXllcnMgPSAwOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKKyAgICAgICAgdmFsdWVzW2ldID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ld
KTsKKyAgICAgICAgaWYgKHZhbHVlc1tpXSkgeworICAgICAgICAgICAgaWYgKHZhbHVlc1tpXS0+
aXNWYWx1ZUxpc3QoKSkgeworICAgICAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0
ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWVzW2ldLmdldCgpKTsKKyAgICAgICAg
ICAgICAgICBudW1MYXllcnMgPSBtYXgodmFsdWVMaXN0LT5sZW5ndGgoKSwgbnVtTGF5ZXJzKTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG51bUxheWVycyA9IG1heDxzaXpl
X3Q+KDFVLCBudW1MYXllcnMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHN0aXRj
aCB0aGUgcHJvcGVydGllcyB0b2dldGhlci4gIEltcGxpY2l0IGluaXRpYWwgdmFsdWVzIGFyZSBm
bGFnZ2VkIGFzIHN1Y2ggYW5kCisgICAgLy8gY2FuIHNhZmVseSBiZSBvbWl0dGVkLgorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTGF5ZXJzOyBpKyspIHsKKyAgICAgICAgU3RyaW5nIGxh
eWVyUmVzOworICAgICAgICBib29sIHVzZVJlcGVhdFhTaG9ydGhhbmQgPSBmYWxzZTsKKyAgICAg
ICAgYm9vbCB1c2VSZXBlYXRZU2hvcnRoYW5kID0gZmFsc2U7CisgICAgICAgIGJvb2wgdXNlU2lu
Z2xlV29yZFNob3J0aGFuZCA9IGZhbHNlOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IHNpemU7IGorKykgeworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZXNbal0pIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWVzW2pdLT5p
c1ZhbHVlTGlzdCgpKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ZhbHVlTGlzdCo+KHZhbHVlc1tqXS5nZXQoKSktPml0ZW0oaSk7CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzW2pdOworCisgICAgICAg
ICAgICAgICAgICAgIC8vIENvbG9yIG9ubHkgYmVsb25ncyBpbiB0aGUgbGFzdCBsYXllci4KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbal0gPT0gQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IG51bUxheWVycyAt
IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAwOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGkgIT0gMCkgLy8gT3RoZXIgc2luZ2xldG9ucyBvbmx5IGJlbG9u
ZyBpbiB0aGUgZmlyc3QgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBu
ZWVkIHRvIHJlcG9ydCBiYWNrZ3JvdW5kLXJlcGVhdCBhcyBpdCB3YXMgd3JpdHRlbiBpbiB0aGUg
Q1NTLiBJZiB0aGUgcHJvcGVydHkgaXMgaW1wbGljaXQsCisgICAgICAgICAgICAvLyB0aGVuIGl0
IHdhcyB3cml0dGVuIHdpdGggb25seSBvbmUgdmFsdWUuIEhlcmUgd2UgZmlndXJlIG91dCB3aGlj
aCB2YWx1ZSB0aGF0IHdhcyBzbyB3ZSBjYW4KKyAgICAgICAgICAgIC8vIHJlcG9ydCBiYWNrIGNv
cnJlY3RseS4KKyAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2pdID09IENTU1Byb3BlcnR5QmFj
a2dyb3VuZFJlcGVhdFggJiYgaXNQcm9wZXJ0eUltcGxpY2l0KHByb3BlcnRpZXNbal0pKSB7CisK
KyAgICAgICAgICAgICAgICAvLyBCVUcgNDkwNTU6IG1ha2Ugc3VyZSB0aGUgdmFsdWUgd2FzIG5v
dCByZXNldCBpbiB0aGUgbGF5ZXIgY2hlY2sganVzdCBhYm92ZS4KKyAgICAgICAgICAgICAgICBp
ZiAoaiA8IHNpemUgLSAxICYmIHByb3BlcnRpZXNbaiArIDFdID09IENTU1Byb3BlcnR5QmFja2dy
b3VuZFJlcGVhdFkgJiYgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1Zh
bHVlPiB5VmFsdWU7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gbmV4dFZh
bHVlID0gdmFsdWVzW2ogKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRWYWx1ZS0+
aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHlWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ZhbHVlTGlzdCo+KG5leHRWYWx1ZS5nZXQoKSktPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHlWYWx1ZSA9IG5leHRWYWx1ZTsKKworICAgICAgICAgICAgICAgICAgICBpbnQgeElkID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZS5nZXQoKSktPmdldElkZW50KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGludCB5SWQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHlWYWx1ZS5nZXQoKSktPmdldElkZW50KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh4
SWQgIT0geUlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeElkID09IENTU1ZhbHVl
UmVwZWF0ICYmIHlJZCA9PSBDU1NWYWx1ZU5vUmVwZWF0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXNlUmVwZWF0WFNob3J0aGFuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKytqOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4SWQgPT0g
Q1NTVmFsdWVOb1JlcGVhdCAmJiB5SWQgPT0gQ1NTVmFsdWVSZXBlYXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1c2VSZXBlYXRZU2hvcnRoYW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZVNp
bmdsZVdvcmRTaG9ydGhhbmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgKytqOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlLT5pc0ltcGxpY2l0SW5pdGlhbFZhbHVl
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWxheWVyUmVzLmlzTnVsbCgpKQorICAgICAgICAg
ICAgICAgICAgICBsYXllclJlcyArPSAiICI7CisgICAgICAgICAgICAgICAgaWYgKHVzZVJlcGVh
dFhTaG9ydGhhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlUmVwZWF0WFNob3J0aGFuZCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBsYXllclJlcyArPSBnZXRWYWx1ZU5hbWUoQ1NT
VmFsdWVSZXBlYXRYKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVzZVJlcGVhdFlTaG9y
dGhhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlUmVwZWF0WVNob3J0aGFuZCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBsYXllclJlcyArPSBnZXRWYWx1ZU5hbWUoQ1NTVmFsdWVS
ZXBlYXRZKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVzZVNpbmdsZVdvcmRTaG9ydGhh
bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlU2luZ2xlV29yZFNob3J0aGFuZCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBsYXllclJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBsYXllclJlcyArPSB2YWx1
ZS0+Y3NzVGV4dCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFs
YXllclJlcy5pc051bGwoKSkgeworICAgICAgICAgICAgaWYgKCFyZXMuaXNOdWxsKCkpCisgICAg
ICAgICAgICAgICAgcmVzICs9ICIsICI7CisgICAgICAgICAgICByZXMgKz0gbGF5ZXJSZXM7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzOworfQorCitTdHJpbmcgU3R5bGVQcm9w
ZXJ0eVNldDo6Z2V0U2hvcnRoYW5kVmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBzaXplX3Qg
c2l6ZSkgY29uc3QKK3sKKyAgICBTdHJpbmcgcmVzOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmICghaXNQcm9wZXJ0eUltcGxpY2l0KHByb3BlcnRp
ZXNbaV0pKSB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVy
dHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBwcm92aWRl
IGRlZmF1bHQgdmFsdWUgaWYgIXZhbHVlCisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXJlcy5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzICs9
ICIgIjsKKyAgICAgICAgICAgICAgICByZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCisvLyBvbmx5IHJl
dHVybnMgYSBub24tbnVsbCB2YWx1ZSBpZiBhbGwgcHJvcGVydGllcyBoYXZlIHRoZSBzYW1lLCBu
b24tbnVsbCB2YWx1ZQorU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldENvbW1vblZhbHVlKGNv
bnN0IGludCogcHJvcGVydGllcywgc2l6ZV90IHNpemUpIGNvbnN0Cit7CisgICAgU3RyaW5nIHJl
czsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsK
KyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAg
ICAgU3RyaW5nIHRleHQgPSB2YWx1ZS0+Y3NzVGV4dCgpOworICAgICAgICBpZiAodGV4dC5pc051
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgaWYgKHJlcy5pc051
bGwoKSkKKyAgICAgICAgICAgIHJlcyA9IHRleHQ7CisgICAgICAgIGVsc2UgaWYgKHJlcyAhPSB0
ZXh0KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKyAgICByZXR1cm4gcmVz
OworfQorCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBTdHlsZVByb3BlcnR5U2V0OjpnZXRQcm9wZXJ0
eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAoreworICAgIGNvbnN0IENTU1Byb3BlcnR5
KiBwcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsKKyAgICByZXR1cm4g
cHJvcGVydHkgPyBwcm9wZXJ0eS0+dmFsdWUoKSA6IDA7Cit9CisKK2Jvb2wgU3R5bGVQcm9wZXJ0
eVNldDo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoaW50IHByb3BlcnR5SUQpCit7CisgICAgQ1NT
UHJvcGVydHlMb25naGFuZCBsb25naGFuZCA9IGxvbmdoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJ
RCk7CisgICAgaWYgKCFsb25naGFuZC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiByZW1vdmVQcm9wZXJ0aWVzSW5TZXQobG9uZ2hhbmQucHJvcGVydGllcygpLCBs
b25naGFuZC5sZW5ndGgoKSk7Cit9CisKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJv
cGVydHkoaW50IHByb3BlcnR5SUQsIFN0cmluZyogcmV0dXJuVGV4dCkKK3sKKyAgICBpZiAocmVt
b3ZlU2hvcnRoYW5kUHJvcGVydHkocHJvcGVydHlJRCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFJl
dHVybiBhbiBlcXVpdmFsZW50IHNob3J0aGFuZCB3aGVuIHBvc3NpYmxlLgorICAgICAgICBpZiAo
cmV0dXJuVGV4dCkKKyAgICAgICAgICAgICpyZXR1cm5UZXh0ID0gIiI7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIENTU1Byb3BlcnR5KiBmb3VuZFByb3BlcnR5ID0gZmluZFBy
b3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOworICAgIGlmICghZm91bmRQcm9wZXJ0eSkgeworICAg
ICAgICBpZiAocmV0dXJuVGV4dCkKKyAgICAgICAgICAgICpyZXR1cm5UZXh0ID0gIiI7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocmV0dXJuVGV4dCkKKyAgICAgICAg
KnJldHVyblRleHQgPSBmb3VuZFByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCk7CisKKyAgICAv
LyBBIG1vcmUgZWZmaWNpZW50IHJlbW92YWwgc3RyYXRlZ3kgd291bGQgaW52b2x2ZSBtYXJraW5n
IGVudHJpZXMgYXMgZW1wdHkKKyAgICAvLyBhbmQgc3dlZXBpbmcgdGhlbSB3aGVuIHRoZSB2ZWN0
b3IgZ3Jvd3MgdG9vIGJpZy4KKyAgICBtX3Byb3BlcnRpZXMucmVtb3ZlKGZvdW5kUHJvcGVydHkg
LSBtX3Byb3BlcnRpZXMuZGF0YSgpKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBTdHlsZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eUlzSW1wb3J0YW50KGludCBwcm9wZXJ0eUlEKSBj
b25zdAoreworICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdp
dGhJZChwcm9wZXJ0eUlEKTsKKyAgICBpZiAocHJvcGVydHkpCisgICAgICAgIHJldHVybiBwcm9w
ZXJ0eS0+aXNJbXBvcnRhbnQoKTsKKworICAgIENTU1Byb3BlcnR5TG9uZ2hhbmQgbG9uZ2hhbmRz
ID0gbG9uZ2hhbmRGb3JQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKKyAgICBpZiAoIWxvbmdoYW5kcy5s
ZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxvbmdoYW5kcy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmICghcHJvcGVydHlJ
c0ltcG9ydGFudChsb25naGFuZHMucHJvcGVydGllcygpW2ldKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBTdHlsZVByb3BlcnR5
U2V0OjpnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3QKK3sKKyAgICBj
b25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHlJ
RCk7CisgICAgcmV0dXJuIHByb3BlcnR5ID8gcHJvcGVydHktPnNob3J0aGFuZElEKCkgOiAwOwor
fQorCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OmlzUHJvcGVydHlJbXBsaWNpdChpbnQgcHJvcGVy
dHlJRCkgY29uc3QKK3sKKyAgICBjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkgPSBmaW5kUHJv
cGVydHlXaXRoSWQocHJvcGVydHlJRCk7CisgICAgcmV0dXJuIHByb3BlcnR5ID8gcHJvcGVydHkt
PmlzSW1wbGljaXQoKSA6IGZhbHNlOworfQorCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFBy
b3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFu
dCwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCit7CisgICAgLy8gU2V0dGluZyB0
aGUgdmFsdWUgdG8gYW4gZW1wdHkgc3RyaW5nIGp1c3QgcmVtb3ZlcyB0aGUgcHJvcGVydHkgaW4g
Ym90aCBJRSBhbmQgR2Vja28uCisgICAgLy8gU2V0dGluZyBpdCB0byBudWxsIHNlZW1zIHRvIHBy
b2R1Y2UgbGVzcyBjb25zaXN0ZW50IHJlc3VsdHMsIGJ1dCB3ZSB0cmVhdCBpdCBqdXN0IHRoZSBz
YW1lLgorICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVtb3ZlUHJvcGVydHko
cHJvcGVydHlJRCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFdoZW4g
cmVwbGFjaW5nIGFuIGV4aXN0aW5nIHByb3BlcnR5IHZhbHVlLCB0aGlzIG1vdmVzIHRoZSBwcm9w
ZXJ0eSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgorICAgIC8vIEZpcmVmb3ggcHJlc2VydmVzIHRo
ZSBwb3NpdGlvbiwgYW5kIE1TSUUgbW92ZXMgdGhlIHByb3BlcnR5IHRvIHRoZSBiZWdpbm5pbmcu
CisgICAgcmV0dXJuIENTU1BhcnNlcjo6cGFyc2VWYWx1ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1
ZSwgaW1wb3J0YW50LCB1c2VTdHJpY3RQYXJzaW5nKCksIGNvbnRleHRTdHlsZVNoZWV0KTsKK30K
Kwordm9pZCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYg
cHJvcGVydHksIENTU1Byb3BlcnR5KiBzbG90KQoreworICAgIGlmICghcmVtb3ZlU2hvcnRoYW5k
UHJvcGVydHkocHJvcGVydHkuaWQoKSkpIHsKKyAgICAgICAgQ1NTUHJvcGVydHkqIHRvUmVwbGFj
ZSA9IHNsb3QgPyBzbG90IDogZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5LmlkKCkpOworICAg
ICAgICBpZiAodG9SZXBsYWNlKSB7CisgICAgICAgICAgICAqdG9SZXBsYWNlID0gcHJvcGVydHk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wcm9wZXJ0aWVz
LmFwcGVuZChwcm9wZXJ0eSk7Cit9CisKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVy
dHkoaW50IHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyLCBib29sIGltcG9ydGFudCwgQ1NTU3R5
bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCit7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiB2YWx1ZTsgICAgCisgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHRTdHls
ZVNoZWV0ID8gY29udGV4dFN0eWxlU2hlZXQtPmZpbmREb2N1bWVudCgpIDogMCkKKyAgICAgICAg
dmFsdWUgPSBkb2N1bWVudC0+Y3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShp
ZGVudGlmaWVyKTsKKyAgICBlbHNlCisgICAgICAgIHZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZUlkZW50aWZpZXIoaWRlbnRpZmllcik7CisKKyAgICBzZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCkpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGludCBwcm9w
ZXJ0eUlELCBkb3VibGUgbnVtYmVyLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQs
IGJvb2wgaW1wb3J0YW50LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKK3sKKyAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlOyAgICAKKyAgICBpZiAoRG9jdW1lbnQq
IGRvY3VtZW50ID0gY29udGV4dFN0eWxlU2hlZXQgPyBjb250ZXh0U3R5bGVTaGVldC0+ZmluZERv
Y3VtZW50KCkgOiAwKQorICAgICAgICB2YWx1ZSA9IGRvY3VtZW50LT5jc3NWYWx1ZVBvb2woKS0+
Y3JlYXRlVmFsdWUobnVtYmVyLCB1bml0KTsKKyAgICBlbHNlCisgICAgICAgIHZhbHVlID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShudW1iZXIsIHVuaXQpOworICAgIHNldFByb3BlcnR5KENT
U1Byb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBTdHlsZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0
cmluZyYgc3R5bGVEZWNsYXJhdGlvbiwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQp
Cit7CisgICAgbV9wcm9wZXJ0aWVzLmNsZWFyKCk7CisgICAgQ1NTUGFyc2VyIHBhcnNlcih1c2VT
dHJpY3RQYXJzaW5nKCkpOworICAgIHBhcnNlci5wYXJzZURlY2xhcmF0aW9uKHRoaXMsIHN0eWxl
RGVjbGFyYXRpb24sIDAsIGNvbnRleHRTdHlsZVNoZWV0KTsKK30KKwordm9pZCBTdHlsZVByb3Bl
cnR5U2V0OjphZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5KiBjb25zdCogcHJv
cGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCit7CisgICAgbV9wcm9wZXJ0aWVzLnJlc2VydmVD
YXBhY2l0eShudW1Qcm9wZXJ0aWVzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVByb3Bl
cnRpZXM7ICsraSkKKyAgICAgICAgYWRkUGFyc2VkUHJvcGVydHkoKnByb3BlcnRpZXNbaV0pOwor
fQorCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmFkZFBhcnNlZFByb3BlcnR5KGNvbnN0IENTU1By
b3BlcnR5JiBwcm9wZXJ0eSkKK3sKKyAgICAvLyBPbmx5IGFkZCBwcm9wZXJ0aWVzIHRoYXQgaGF2
ZSBubyAhaW1wb3J0YW50IGNvdW50ZXJwYXJ0IHByZXNlbnQKKyAgICBpZiAoIXByb3BlcnR5SXNJ
bXBvcnRhbnQocHJvcGVydHkuaWQoKSkgfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgeworICAg
ICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eS5pZCgpKTsKKyAgICAgICAgbV9wcm9wZXJ0aWVz
LmFwcGVuZChwcm9wZXJ0eSk7CisgICAgfQorfQorCitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6
YXNUZXh0KCkgY29uc3QKK3sKKyAgICBTdHJpbmcgcmVzdWx0ID0gIiI7CisKKyAgICBjb25zdCBD
U1NQcm9wZXJ0eSogcG9zaXRpb25YUHJvcCA9IDA7CisgICAgY29uc3QgQ1NTUHJvcGVydHkqIHBv
c2l0aW9uWVByb3AgPSAwOworICAgIGNvbnN0IENTU1Byb3BlcnR5KiByZXBlYXRYUHJvcCA9IDA7
CisgICAgY29uc3QgQ1NTUHJvcGVydHkqIHJlcGVhdFlQcm9wID0gMDsKKworICAgIHVuc2lnbmVk
IHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4g
PCBzaXplOyArK24pIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3AgPSBtX3Byb3Bl
cnRpZXNbbl07CisgICAgICAgIGlmIChwcm9wLmlkKCkgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
UG9zaXRpb25YKQorICAgICAgICAgICAgcG9zaXRpb25YUHJvcCA9ICZwcm9wOworICAgICAgICBl
bHNlIGlmIChwcm9wLmlkKCkgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZKQorICAg
ICAgICAgICAgcG9zaXRpb25ZUHJvcCA9ICZwcm9wOworICAgICAgICBlbHNlIGlmIChwcm9wLmlk
KCkgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCkKKyAgICAgICAgICAgIHJlcGVhdFhQ
cm9wID0gJnByb3A7CisgICAgICAgIGVsc2UgaWYgKHByb3AuaWQoKSA9PSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRSZXBlYXRZKQorICAgICAgICAgICAgcmVwZWF0WVByb3AgPSAmcHJvcDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ICs9IHByb3AuY3NzVGV4dCgpOworICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgbm90LXNvLW5pY2Ugd2F5IHRvIHR1cm4geC95IHBvc2l0
aW9ucyBpbnRvIHNpbmdsZSBiYWNrZ3JvdW5kLXBvc2l0aW9uIGluIG91dHB1dC4KKyAgICAvLyBJ
dCBpcyByZXF1aXJlZCBiZWNhdXNlIGJhY2tncm91bmQtcG9zaXRpb24teC95IGFyZSBub24tc3Rh
bmRhcmQgcHJvcGVydGllcyBhbmQgV2ViS2l0IGdlbmVyYXRlZCBvdXRwdXQKKyAgICAvLyB3b3Vs
ZCBub3Qgd29yayBpbiBGaXJlZm94ICg8cmRhcjovL3Byb2JsZW0vNTE0MzE4Mz4pCisgICAgLy8g
SXQgd291bGQgYmUgYSBiZXR0ZXIgc29sdXRpb24gaWYgYmFja2dyb3VuZC1wb3NpdGlvbiB3YXMg
Q1NTX1BBSVIuCisgICAgaWYgKHBvc2l0aW9uWFByb3AgJiYgcG9zaXRpb25ZUHJvcCAmJiBwb3Np
dGlvblhQcm9wLT5pc0ltcG9ydGFudCgpID09IHBvc2l0aW9uWVByb3AtPmlzSW1wb3J0YW50KCkp
IHsKKyAgICAgICAgU3RyaW5nIHBvc2l0aW9uVmFsdWU7CisgICAgICAgIGNvbnN0IGludCBwcm9w
ZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsIENTU1Byb3BlcnR5
QmFja2dyb3VuZFBvc2l0aW9uWSB9OworICAgICAgICBpZiAocG9zaXRpb25YUHJvcC0+dmFsdWUo
KS0+aXNWYWx1ZUxpc3QoKSB8fCBwb3NpdGlvbllQcm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgp
KQorICAgICAgICAgICAgcG9zaXRpb25WYWx1ZSA9IGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShw
cm9wZXJ0aWVzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zaXRpb25WYWx1ZSA9IHBv
c2l0aW9uWFByb3AtPnZhbHVlKCktPmNzc1RleHQoKSArICIgIiArIHBvc2l0aW9uWVByb3AtPnZh
bHVlKCktPmNzc1RleHQoKTsKKyAgICAgICAgcmVzdWx0ICs9ICJiYWNrZ3JvdW5kLXBvc2l0aW9u
OiAiICsgcG9zaXRpb25WYWx1ZSArIChwb3NpdGlvblhQcm9wLT5pc0ltcG9ydGFudCgpID8gIiAh
aW1wb3J0YW50IiA6ICIiKSArICI7ICI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHBvc2l0
aW9uWFByb3ApCisgICAgICAgICAgICByZXN1bHQgKz0gcG9zaXRpb25YUHJvcC0+Y3NzVGV4dCgp
OworICAgICAgICBpZiAocG9zaXRpb25ZUHJvcCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBwb3Np
dGlvbllQcm9wLT5jc3NUZXh0KCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
ZG8gdGhlIHNhbWUgZm9yIGJhY2tncm91bmQtcmVwZWF0LgorICAgIGlmIChyZXBlYXRYUHJvcCAm
JiByZXBlYXRZUHJvcCAmJiByZXBlYXRYUHJvcC0+aXNJbXBvcnRhbnQoKSA9PSByZXBlYXRZUHJv
cC0+aXNJbXBvcnRhbnQoKSkgeworICAgICAgICBTdHJpbmcgcmVwZWF0VmFsdWU7CisgICAgICAg
IGNvbnN0IGludCByZXBlYXRQcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRS
ZXBlYXRYLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZIH07CisgICAgICAgIGlmIChyZXBl
YXRYUHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSB8fCByZXBlYXRZUHJvcC0+dmFsdWUoKS0+
aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgIHJlcGVhdFZhbHVlID0gZ2V0TGF5ZXJlZFNob3J0
aGFuZFZhbHVlKHJlcGVhdFByb3BlcnRpZXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXBlYXRWYWx1ZSA9IHJlcGVhdFhQcm9wLT52YWx1ZSgpLT5jc3NUZXh0KCkgKyAiICIgKyByZXBl
YXRZUHJvcC0+dmFsdWUoKS0+Y3NzVGV4dCgpOworICAgICAgICByZXN1bHQgKz0gImJhY2tncm91
bmQtcmVwZWF0OiAiICsgcmVwZWF0VmFsdWUgKyAocmVwZWF0WFByb3AtPmlzSW1wb3J0YW50KCkg
PyAiICFpbXBvcnRhbnQiIDogIiIpICsgIjsgIjsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
cmVwZWF0WFByb3ApCisgICAgICAgICAgICByZXN1bHQgKz0gcmVwZWF0WFByb3AtPmNzc1RleHQo
KTsKKyAgICAgICAgaWYgKHJlcGVhdFlQcm9wKQorICAgICAgICAgICAgcmVzdWx0ICs9IHJlcGVh
dFlQcm9wLT5jc3NUZXh0KCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBTdHlsZVByb3BlcnR5U2V0OjptZXJnZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBvdGhlciwg
Ym9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0KQoreworICAgIHVuc2lnbmVkIHNpemUgPSBvdGhl
ci0+bV9wcm9wZXJ0aWVzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6
ZTsgKytuKSB7CisgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiB0b01lcmdlID0gb3RoZXItPm1f
cHJvcGVydGllc1tuXTsKKyAgICAgICAgQ1NTUHJvcGVydHkqIG9sZCA9IGZpbmRQcm9wZXJ0eVdp
dGhJZCh0b01lcmdlLmlkKCkpOworICAgICAgICBpZiAob2xkKSB7CisgICAgICAgICAgICBpZiAo
IWFyZ092ZXJyaWRlc09uQ29uZmxpY3QgJiYgb2xkLT52YWx1ZSgpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgc2V0UHJvcGVydHkodG9NZXJnZSwgb2xkKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKHRvTWVyZ2UpOworICAg
IH0KK30KKwordm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhM
aXN0SGFzaFNldDxLVVJMPiYgdXJscywgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQp
Cit7CisgICAgc2l6ZV90IHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBtX3Byb3BlcnRpZXNbaV0udmFsdWUo
KS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgY29udGV4dFN0eWxlU2hlZXQpOworfQor
CisvLyBUaGlzIGlzIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgd2Ugd2FudCB0byBjb3B5IGluIHRo
ZSBjb3B5QmxvY2tQcm9wZXJ0aWVzKCkgZnVuY3Rpb24uCisvLyBJdCBpcyB0aGUgbGlzdCBvZiBD
U1MgcHJvcGVydGllcyB0aGF0IGFwcGx5IHNwZWNpYWxseSB0byBibG9jay1sZXZlbCBlbGVtZW50
cy4KK3N0YXRpYyBjb25zdCBpbnQgYmxvY2tQcm9wZXJ0aWVzW10gPSB7CisgICAgQ1NTUHJvcGVy
dHlPcnBoYW5zLAorICAgIENTU1Byb3BlcnR5T3ZlcmZsb3csIC8vIFRoaXMgY2FuIGJlIGFsc28g
YmUgYXBwbGllZCB0byByZXBsYWNlZCBlbGVtZW50cworICAgIENTU1Byb3BlcnR5V2Via2l0QXNw
ZWN0UmF0aW8sCisgICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5Db3VudCwKKyAgICBDU1NQcm9w
ZXJ0eVdlYmtpdENvbHVtbkdhcCwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xv
ciwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVTdHlsZSwKKyAgICBDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtblJ1bGVXaWR0aCwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFr
QmVmb3JlLAorICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtBZnRlciwKKyAgICBDU1NQ
cm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrSW5zaWRlLAorICAgIENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uV2lkdGgsCisgICAgQ1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlciwKKyAgICBDU1NQcm9wZXJ0
eVBhZ2VCcmVha0JlZm9yZSwKKyAgICBDU1NQcm9wZXJ0eVBhZ2VCcmVha0luc2lkZSwKKyAgICBD
U1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrQWZ0ZXIsCisgICAgQ1NTUHJvcGVydHlXZWJraXRS
ZWdpb25CcmVha0JlZm9yZSwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRl
LAorICAgIENTU1Byb3BlcnR5VGV4dEFsaWduLAorICAgIENTU1Byb3BlcnR5VGV4dEluZGVudCwK
KyAgICBDU1NQcm9wZXJ0eVdpZG93cworfTsKKworY29uc3QgdW5zaWduZWQgbnVtQmxvY2tQcm9w
ZXJ0aWVzID0gV1RGX0FSUkFZX0xFTkdUSChibG9ja1Byb3BlcnRpZXMpOworCitQYXNzUmVmUHRy
PFN0eWxlUHJvcGVydHlTZXQ+IFN0eWxlUHJvcGVydHlTZXQ6OmNvcHlCbG9ja1Byb3BlcnRpZXMo
KSBjb25zdAoreworICAgIHJldHVybiBjb3B5UHJvcGVydGllc0luU2V0KGJsb2NrUHJvcGVydGll
cywgbnVtQmxvY2tQcm9wZXJ0aWVzKTsKK30KKwordm9pZCBTdHlsZVByb3BlcnR5U2V0OjpyZW1v
dmVCbG9ja1Byb3BlcnRpZXMoKQoreworICAgIHJlbW92ZVByb3BlcnRpZXNJblNldChibG9ja1By
b3BlcnRpZXMsIG51bUJsb2NrUHJvcGVydGllcyk7Cit9CisKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNl
dDo6cmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgp
Cit7CisgICAgaWYgKG1fcHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsd2F5cyB1c2VkIHdpdGggc3RhdGljIHNldHMg
YW5kIGluIHRoYXQgY2FzZSBjb25zdHJ1Y3RpbmcgdGhlIGhhc2ggcmVwZWF0ZWRseSBpcyBwcmV0
dHkgcG9pbnRsZXNzLgorICAgIEhhc2hTZXQ8aW50PiB0b1JlbW92ZTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIHRvUmVtb3ZlLmFkZChzZXRbaV0p
OworCisgICAgVmVjdG9yPENTU1Byb3BlcnR5LCA0PiBuZXdQcm9wZXJ0aWVzOworICAgIG5ld1By
b3BlcnRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Byb3BlcnRpZXMuc2l6ZSgpKTsKKwor
ICAgIHVuc2lnbmVkIHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWdu
ZWQgbiA9IDA7IG4gPCBzaXplOyArK24pIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHBy
b3BlcnR5ID0gbV9wcm9wZXJ0aWVzW25dOworICAgICAgICAvLyBOb3QgcXVpdGUgc3VyZSBpZiB0
aGUgaXNJbXBvcnRhbnQgdGVzdCBpcyBuZWVkZWQgYnV0IGl0IG1hdGNoZXMgdGhlIGV4aXN0aW5n
IGJlaGF2aW9yLgorICAgICAgICBpZiAoIXByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKKyAgICAg
ICAgICAgIGlmICh0b1JlbW92ZS5jb250YWlucyhwcm9wZXJ0eS5pZCgpKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBuZXdQcm9wZXJ0aWVzLmFwcGVuZChw
cm9wZXJ0eSk7CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkID0gbmV3UHJvcGVydGllcy5zaXpl
KCkgIT0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKKyAgICBtX3Byb3BlcnRpZXMgPSBuZXdQcm9wZXJ0
aWVzOworICAgIHJldHVybiBjaGFuZ2VkOworfQorCitjb25zdCBDU1NQcm9wZXJ0eSogU3R5bGVQ
cm9wZXJ0eVNldDo6ZmluZFByb3BlcnR5V2l0aElkKGludCBwcm9wZXJ0eUlEKSBjb25zdAorewor
ICAgIGZvciAoaW50IG4gPSBtX3Byb3BlcnRpZXMuc2l6ZSgpIC0gMSA7IG4gPj0gMDsgLS1uKSB7
CisgICAgICAgIGlmIChwcm9wZXJ0eUlEID09IG1fcHJvcGVydGllc1tuXS5tX2lkKQorICAgICAg
ICAgICAgcmV0dXJuICZtX3Byb3BlcnRpZXNbbl07CisgICAgfQorICAgIHJldHVybiAwOworfQor
CitDU1NQcm9wZXJ0eSogU3R5bGVQcm9wZXJ0eVNldDo6ZmluZFByb3BlcnR5V2l0aElkKGludCBw
cm9wZXJ0eUlEKQoreworICAgIGZvciAoaW50IG4gPSBtX3Byb3BlcnRpZXMuc2l6ZSgpIC0gMSA7
IG4gPj0gMDsgLS1uKSB7CisgICAgICAgIGlmIChwcm9wZXJ0eUlEID09IG1fcHJvcGVydGllc1tu
XS5tX2lkKQorICAgICAgICAgICAgcmV0dXJuICZtX3Byb3BlcnRpZXNbbl07CisgICAgfQorICAg
IHJldHVybiAwOworfQorICAgIAorYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojpwcm9wZXJ0eU1hdGNo
ZXMoY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5KSBjb25zdAoreworICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LT5pZCgpKTsKKyAgICBy
ZXR1cm4gdmFsdWUgJiYgdmFsdWUtPmNzc1RleHQoKSA9PSBwcm9wZXJ0eS0+dmFsdWUoKS0+Y3Nz
VGV4dCgpOworfQorICAgIAordm9pZCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVFcXVpdmFsZW50
UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkKK3sKKyAgICBWZWN0b3I8
aW50PiBwcm9wZXJ0aWVzVG9SZW1vdmU7CisgICAgc2l6ZV90IHNpemUgPSBtX3Byb3BlcnRpZXMu
c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAg
IGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9IG1fcHJvcGVydGllc1tpXTsKKyAgICAgICAg
aWYgKHN0eWxlLT5wcm9wZXJ0eU1hdGNoZXMoJnByb3BlcnR5KSkKKyAgICAgICAgICAgIHByb3Bl
cnRpZXNUb1JlbW92ZS5hcHBlbmQocHJvcGVydHkuaWQoKSk7CisgICAgfSAgICAKKyAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIG1hc3MgcmVtb3ZhbC4KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcHJvcGVydGllc1RvUmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAgICByZW1vdmVQ
cm9wZXJ0eShwcm9wZXJ0aWVzVG9SZW1vdmVbaV0pOworfQorCit2b2lkIFN0eWxlUHJvcGVydHlT
ZXQ6OnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlKQoreworICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92ZTsKKyAgICBzaXpl
X3Qgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9w
cm9wZXJ0aWVzW2ldOworICAgICAgICBpZiAoc3R5bGUtPmNzc1Byb3BlcnR5TWF0Y2hlcygmcHJv
cGVydHkpKQorICAgICAgICAgICAgcHJvcGVydGllc1RvUmVtb3ZlLmFwcGVuZChwcm9wZXJ0eS5p
ZCgpKTsKKyAgICB9ICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgbWFzcyByZW1v
dmFsLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6
ZSgpOyArK2kpCisgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnRpZXNUb1JlbW92ZVtpXSk7
Cit9CisKK1Bhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6Y29w
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KG1f
cHJvcGVydGllcykpOworfQorCitQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFN0eWxlUHJv
cGVydHlTZXQ6OmNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxl
bmd0aCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHk+IGxpc3Q7CisgICAgbGlzdC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQ
cm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAg
IGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkp
OworICAgIH0KKyAgICByZXR1cm4gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGxpc3QpOworfQor
CitDU1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZVByb3BlcnR5U2V0OjplbnN1cmVDU1NTdHlsZURl
Y2xhcmF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9oYXNDU1NPTVdyYXBwZXIpIHsKKyAgICAg
ICAgQVNTRVJUKCFzdGF0aWNfY2FzdDxDU1NTdHlsZURlY2xhcmF0aW9uKj4ocHJvcGVydHlTZXRD
U1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcykpLT5wYXJlbnRSdWxlKCkpOworICAgICAgICBBU1NF
UlQoIXByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpLT5wYXJlbnRFbGVtZW50
KCkpOworICAgICAgICByZXR1cm4gcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhp
cyk7CisgICAgfQorICAgIG1faGFzQ1NTT01XcmFwcGVyID0gdHJ1ZTsKKyAgICBQcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb24qIGNzc29tV3JhcHBlciA9IG5ldyBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24oY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4odGhpcykpOworICAg
IHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuYWRkKHRoaXMsIGFkb3B0UHRyKGNzc29tV3Jh
cHBlcikpOworICAgIHJldHVybiBjc3NvbVdyYXBwZXI7Cit9CisKK0NTU1N0eWxlRGVjbGFyYXRp
b24qIFN0eWxlUHJvcGVydHlTZXQ6OmVuc3VyZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0
IENTU1J1bGUqIHBhcmVudFJ1bGUpIGNvbnN0Cit7CisgICAgaWYgKG1faGFzQ1NTT01XcmFwcGVy
KSB7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxDU1NTdHlsZURlY2xhcmF0aW9uKj4ocHJv
cGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcykpLT5wYXJlbnRSdWxlKCkgPT0gcGFy
ZW50UnVsZSk7CisgICAgICAgIHJldHVybiBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdl
dCh0aGlzKTsKKyAgICB9CisgICAgbV9oYXNDU1NPTVdyYXBwZXIgPSB0cnVlOworICAgIFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogY3Nzb21XcmFwcGVyID0gbmV3IFJ1bGVDU1NTdHls
ZURlY2xhcmF0aW9uKGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0eVNldCo+KHRoaXMpLCBjb25zdF9j
YXN0PENTU1J1bGUqPihwYXJlbnRSdWxlKSk7CisgICAgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJN
YXAoKS5hZGQodGhpcywgYWRvcHRQdHIoY3Nzb21XcmFwcGVyKSk7CisgICAgcmV0dXJuIGNzc29t
V3JhcHBlcjsKK30KKworQ1NTU3R5bGVEZWNsYXJhdGlvbiogU3R5bGVQcm9wZXJ0eVNldDo6ZW5z
dXJlSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbihjb25zdCBTdHlsZWRFbGVtZW50KiBwYXJlbnRF
bGVtZW50KSBjb25zdAoreworICAgIGlmIChtX2hhc0NTU09NV3JhcHBlcikgeworICAgICAgICBB
U1NFUlQocHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyktPnBhcmVudEVsZW1l
bnQoKSA9PSBwYXJlbnRFbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5U2V0Q1NTT01X
cmFwcGVyTWFwKCkuZ2V0KHRoaXMpOworICAgIH0KKyAgICBtX2hhc0NTU09NV3JhcHBlciA9IHRy
dWU7CisgICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NvbVdyYXBwZXIgPSBu
ZXcgSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbihjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQq
Pih0aGlzKSwgY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Kj4ocGFyZW50RWxlbWVudCkpOworICAg
IHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwKCkuYWRkKHRoaXMsIGFkb3B0UHRyKGNzc29tV3Jh
cHBlcikpOworICAgIHJldHVybiBjc3NvbVdyYXBwZXI7Cit9CisKK3ZvaWQgU3R5bGVQcm9wZXJ0
eVNldDo6Y2xlYXJQYXJlbnRSdWxlKENTU1J1bGUqIHJ1bGUpCit7CisgICAgaWYgKCFtX2hhc0NT
U09NV3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVF9VTlVTRUQocnVsZSwgc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJhdGlvbio+KHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFw
KCkuZ2V0KHRoaXMpKS0+cGFyZW50UnVsZSgpID09IHJ1bGUpOworICAgIHByb3BlcnR5U2V0Q1NT
T01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpLT5jbGVhclBhcmVudFJ1bGUoKTsKK30KKwordm9pZCBT
dHlsZVByb3BlcnR5U2V0OjpjbGVhclBhcmVudEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVu
dCkKK3sKKyAgICBpZiAoIW1faGFzQ1NTT01XcmFwcGVyKQorICAgICAgICByZXR1cm47CisgICAg
QVNTRVJUX1VOVVNFRChlbGVtZW50LCBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0
aGlzKS0+cGFyZW50RWxlbWVudCgpID09IGVsZW1lbnQpOworICAgIHByb3BlcnR5U2V0Q1NTT01X
cmFwcGVyTWFwKCkuZ2V0KHRoaXMpLT5jbGVhclBhcmVudEVsZW1lbnQoKTsKK30KKwordW5zaWdu
ZWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpsZW5ndGgoKSBjb25zdAoreworICAg
IHJldHVybiBtX3Byb3BlcnR5U2V0LT5wcm9wZXJ0eUNvdW50KCk7Cit9CisKK1N0cmluZyBQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246Oml0ZW0odW5zaWduZWQgaSkgY29uc3QKK3sKKyAg
ICBpZiAoaSA+PSBtX3Byb3BlcnR5U2V0LT5wcm9wZXJ0eUNvdW50KCkpCisgICAgICAgIHJldHVy
biAiIjsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5
SUQ+KG1fcHJvcGVydHlTZXQtPnByb3BlcnR5QXQoaSkuaWQoKSkpOworfQorCitTdHJpbmcgUHJv
cGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcm9wZXJ0eVNldC0+YXNUZXh0KCk7Cit9CisgICAgCit2b2lkIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbjo6c2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgU3R5bGVB
dHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CisjZW5kaWYKKyAgICBl
YyA9IDA7CisgICAgLy8gRklYTUU6IERldGVjdCBzeW50YXggZXJyb3JzIGFuZCBzZXQgZWMuCisg
ICAgbV9wcm9wZXJ0eVNldC0+cGFyc2VEZWNsYXJhdGlvbih0ZXh0LCBjb250ZXh0U3R5bGVTaGVl
dCgpKTsKKworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQorICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7ICAg
IAorI2VuZGlmCit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IFByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSkKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsK
KyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3By
b3BlcnR5U2V0LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworfQorCitTdHJpbmcg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0
cmluZyAmcHJvcGVydHlOYW1lKQoreworICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJ
RChwcm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5nZXRQcm9wZXJ0eVZhbHVlKHByb3Bl
cnR5SUQpOworfQorCitTdHJpbmcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQ
cm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGludCBw
cm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJvcGVy
dHlJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX3Byb3BlcnR5U2V0
LT5wcm9wZXJ0eUlzSW1wb3J0YW50KHByb3BlcnR5SUQpID8gImltcG9ydGFudCIgOiAiIjsKK30K
KworU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9y
dGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgaW50IHByb3BlcnR5SUQg
PSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9wZXJ0eUlEKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaW50IHNob3J0aGFuZElEID0gbV9wcm9wZXJ0eVNl
dC0+Z2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcGVydHlJRCk7CisgICAgaWYgKCFzaG9ydGhhbmRJ
RCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUo
c3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oc2hvcnRoYW5kSUQpKTsKK30KKworYm9vbCBQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQo
cHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+aXNQcm9wZXJ0eUltcGxpY2l0KHByb3BlcnR5
SUQpOworfQorCit2b2lkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVy
dHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0
IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworI2lmIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCisgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9u
U2NvcGUodGhpcyk7CisjZW5kaWYKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQo
cHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybjsKKyAg
ICBib29sIGltcG9ydGFudCA9IHByaW9yaXR5LmZpbmQoImltcG9ydGFudCIsIDAsIGZhbHNlKSAh
PSBub3RGb3VuZDsKKyAgICBlYyA9IDA7CisgICAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wZXJ0eVNl
dC0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgY29udGV4dFN0eWxl
U2hlZXQoKSk7CisgICAgaWYgKGNoYW5nZWQpIHsKKyAgICAgICAgLy8gQ1NTIERPTSByZXF1aXJl
cyByYWlzaW5nIFNZTlRBWF9FUlIgb2YgcGFyc2luZyBmYWlsZWQsIGJ1dCB0aGlzIGlzIHRvbyBk
YW5nZXJvdXMgZm9yIGNvbXBhdGliaWxpdHksCisgICAgICAgIC8vIHNlZSA8aHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5Nj4uCisgICAgICAgIHNldE5lZWRzU3R5bGVS
ZWNhbGMoKTsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgICAgICBtdXRhdGlv
blNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOworI2VuZGlmCisgICAgfQorfQorCitTdHJp
bmcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisjaWYgRU5BQkxFKE1V
VEFUSU9OX09CU0VSVkVSUykKKyAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRp
b25TY29wZSh0aGlzKTsKKyNlbmRpZgorICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJ
RChwcm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworICAgIGVjID0gMDsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGJvb2wgY2hhbmdl
cyA9IG1fcHJvcGVydHlTZXQtPnJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsICZyZXN1bHQpOwor
ICAgIGlmIChjaGFuZ2VzKSB7CisgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyNpZiBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVN
dXRhdGlvblJlY29yZCgpOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0
UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3sgCisg
ICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7
IAorfQorCitTdHJpbmcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0
eVZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreyAKKyAgICByZXR1cm4g
bV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsgCit9CisKK3ZvaWQg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eUludGVybmFsKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreyAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQor
ICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOworI2Vu
ZGlmCisgICAgZWMgPSAwOworICAgIGJvb2wgY2hhbmdlZCA9IG1fcHJvcGVydHlTZXQtPnNldFBy
b3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KCkp
OworICAgIGlmIChjaGFuZ2VkKSB7CisgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyNp
ZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVl
dWVNdXRhdGlvblJlY29yZCgpOworI2VuZGlmCisgICAgfQorfQorCitDU1NTdHlsZVNoZWV0KiBQ
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdAor
eyAKKyAgICByZXR1cm4gY29udGV4dFN0eWxlU2hlZXQoKTsgCit9CisKK1Bhc3NSZWZQdHI8U3R5
bGVQcm9wZXJ0eVNldD4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjb3B5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Y29weSgpOworfQorCitQYXNzUmVmUHRy
PFN0eWxlUHJvcGVydHlTZXQ+IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6bWFrZU11
dGFibGUoKQoreworICAgIHJldHVybiBtX3Byb3BlcnR5U2V0OworfQorCitib29sIFByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3Bl
cnR5KiBwcm9wZXJ0eSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cHJvcGVy
dHlNYXRjaGVzKHByb3BlcnR5KTsKK30KKwordm9pZCBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
c2V0TmVlZHNTdHlsZVJlY2FsYygpCit7CisgICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hl
ZXQgPSBjb250ZXh0U3R5bGVTaGVldCgpKSB7CisgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1l
bnQgPSBzdHlsZVNoZWV0LT5maW5kRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50LT5z
dHlsZVNlbGVjdG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKKyAgICB9Cit9CisgICAgCitD
U1NTdHlsZVNoZWV0KiBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29udGV4dFN0eWxlU2hlZXQo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BhcmVudFJ1bGUgPyBtX3BhcmVudFJ1bGUtPnBhcmVu
dFN0eWxlU2hlZXQoKSA6IDA7Cit9CisKK3ZvaWQgSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
c2V0TmVlZHNTdHlsZVJlY2FsYygpCit7CisgICAgaWYgKCFtX3BhcmVudEVsZW1lbnQpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX3BhcmVudEVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoSW5s
aW5lU3R5bGVDaGFuZ2UpOworICAgIG1fcGFyZW50RWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQXR0
cmlidXRlKCk7CisgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlKHRoaXMpLmRpZEludmFs
aWRhdGVTdHlsZUF0dHIoKTsKKyAgICByZXR1cm47Cit9CisKK0NTU1N0eWxlU2hlZXQqIElubGlu
ZUNTU1N0eWxlRGVjbGFyYXRpb246OmNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wYXJlbnRFbGVtZW50ID8gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpLT5lbGVt
ZW50U2hlZXQoKSA6IDA7Cit9CisKK2NsYXNzIFNhbWVTaXplQXNTdHlsZVByb3BlcnR5U2V0IDog
cHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc1N0eWxlUHJvcGVydHlTZXQ+IHsKKyAgICBWZWN0
b3I8Q1NTUHJvcGVydHksIDQ+IHByb3BlcnRpZXM7CisgICAgdW5zaWduZWQgYml0ZmllbGQ7Cit9
OworQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFN0eWxlUHJvcGVydHlTZXQpID09IHNpemVvZihTYW1l
U2l6ZUFzU3R5bGVQcm9wZXJ0eVNldCksIHN0eWxlX3Byb3BlcnR5X3NldF9zaG91bGRfc3RheV9z
bWFsbCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lv
biAxMDgzNDApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTE0ICsyMCwyMCBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVk
ZSAiUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmgiCiAKLSNpbmNsdWRlICJDU1NJbWFn
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlM
b25naGFuZC5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NS
dWxlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5
d29yZHMuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZVBv
b2wuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5oIgogI2luY2x1
ZGUgIk11dGF0aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgogI2lu
Y2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVy
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXR5cGVkZWYgSGFzaE1hcDxjb25zdCBTdHlsZVByb3BlcnR5U2V0KiwgT3duUHRy
PFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbj4gPiBQcm9wZXJ0eVNldENTU09NV3JhcHBl
ck1hcDsKLXN0YXRpYyBQcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCYgcHJvcGVydHlTZXRDU1NP
TVdyYXBwZXJNYXAoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUHJvcGVydHlTZXRDU1NP
TVdyYXBwZXJNYXAsIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwSW5zdGFuY2UsICgpKTsKLSAg
ICByZXR1cm4gcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXBJbnN0YW5jZTsKLX0KLQotY2xhc3Mg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxlRGVjbGFyYXRp
b24gewotcHVibGljOgotICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVBy
b3BlcnR5U2V0KiBwcm9wZXJ0eVNldCkgOiBtX3Byb3BlcnR5U2V0KHByb3BlcnR5U2V0KSB7IH0K
LSAgICAKLSAgICB2aXJ0dWFsIFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50UnVsZSgpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXJlbnRFbGVtZW50KCkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogY29u
dGV4dFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLXByaXZhdGU6Ci0gICAgdmly
dHVhbCB2b2lkIHJlZigpIE9WRVJSSURFIHsgbV9wcm9wZXJ0eVNldC0+cmVmKCk7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgZGVyZWYoKSBPVkVSUklERSB7IG1fcHJvcGVydHlTZXQtPmRlcmVmKCk7IH0K
LQotICAgIHZpcnR1YWwgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIDA7IH07Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGdl
dFByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5k
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNv
ZGUmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
Q3NzVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NT
UHJvcGVydHlJRCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1
ZUludGVybmFsKENTU1Byb3BlcnR5SUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQ
cm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wg
aW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7Ci0gICAgCi0gICAgdmlydHVhbCBi
b29sIGNzc1Byb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNvbnN0IE9WRVJSSURF
OwotICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IG1ha2VNdXRhYmxlKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzU3R5bGVS
ZWNhbGMoKSB7IH0gICAgCi0KLXByb3RlY3RlZDoKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBtX3By
b3BlcnR5U2V0OwotfTsKLQotY2xhc3MgUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uCi17Ci1wdWJsaWM6Ci0gICAgUnVsZUNTU1N0
eWxlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQsIENTU1J1bGUqIHBh
cmVudFJ1bGUpCi0gICAgICAgIDogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKHByb3Bl
cnR5U2V0KQotICAgICAgICAsIG1fcGFyZW50UnVsZShwYXJlbnRSdWxlKSAKLSAgICB7Ci0gICAg
fQotCi1wcml2YXRlOiAgICAKLSAgICB2aXJ0dWFsIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25z
dCB7IHJldHVybiBtX3BhcmVudFJ1bGU7IH07Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50
UnVsZSgpIHsgbV9wYXJlbnRSdWxlID0gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7Ci0gICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVl
dCgpIGNvbnN0OwotICAgIAotICAgIENTU1J1bGUqIG1fcGFyZW50UnVsZTsKLX07Ci0KLWNsYXNz
IElubGluZUNTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uCi17Ci1wdWJsaWM6Ci0gICAgSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbihTdHls
ZVByb3BlcnR5U2V0KiBwcm9wZXJ0eVNldCwgU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCkK
LSAgICAgICAgOiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24ocHJvcGVydHlTZXQpCi0g
ICAgICAgICwgbV9wYXJlbnRFbGVtZW50KHBhcmVudEVsZW1lbnQpIAotICAgIHsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgdmlydHVhbCBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9wYXJlbnRFbGVtZW50OyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyUGFy
ZW50RWxlbWVudCgpIHsgbV9wYXJlbnRFbGVtZW50ID0gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0
U3R5bGVTaGVldCgpIGNvbnN0OwotCi0gICAgU3R5bGVkRWxlbWVudCogbV9wYXJlbnRFbGVtZW50
OwotfTsKLQogbmFtZXNwYWNlIHsKIAogY2xhc3MgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3Bl
IHsKQEAgLTIxMiw4NzUgKzExOCwxNSBAQCBib29sIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29w
ZTo6c19zaG91CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UKLQotU3R5bGVQcm9wZXJ0eVNldDo6
U3R5bGVQcm9wZXJ0eVNldCgpCi0gICAgOiBtX3N0cmljdFBhcnNpbmcoZmFsc2UpCi0gICAgLCBt
X2hhc0NTU09NV3JhcHBlcihmYWxzZSkKLXsKLX0KLQotU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQ
cm9wZXJ0eVNldChjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+JiBwcm9wZXJ0aWVzKQotICAgIDog
bV9wcm9wZXJ0aWVzKHByb3BlcnRpZXMpCi0gICAgLCBtX3N0cmljdFBhcnNpbmcodHJ1ZSkKLSAg
ICAsIG1faGFzQ1NTT01XcmFwcGVyKGZhbHNlKQotewotICAgIG1fcHJvcGVydGllcy5zaHJpbmtU
b0ZpdCgpOwotfQotCi1TdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KGNvbnN0IENT
U1Byb3BlcnR5KiBjb25zdCAqIHByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzLCBib29sIHVz
ZVN0cmljdFBhcnNpbmcpCi0gICAgOiBtX3N0cmljdFBhcnNpbmcodXNlU3RyaWN0UGFyc2luZykK
LSAgICAsIG1faGFzQ1NTT01XcmFwcGVyKGZhbHNlKQotewotICAgIG1fcHJvcGVydGllcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG51bVByb3BlcnRpZXMpOwotICAgIEhhc2hNYXA8aW50LCBib29s
PiBjYW5kaWRhdGVzOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytp
KSB7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5ICpwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07
Ci0gICAgICAgIEFTU0VSVChwcm9wZXJ0eSk7Ci0gICAgICAgIGJvb2wgaW1wb3J0YW50ID0gcHJv
cGVydHktPmlzSW1wb3J0YW50KCk7Ci0KLSAgICAgICAgSGFzaE1hcDxpbnQsIGJvb2w+OjppdGVy
YXRvciBpdCA9IGNhbmRpZGF0ZXMuZmluZChwcm9wZXJ0eS0+aWQoKSk7Ci0gICAgICAgIGlmIChp
dCAhPSBjYW5kaWRhdGVzLmVuZCgpKSB7Ci0gICAgICAgICAgICBpZiAoIWltcG9ydGFudCAmJiBp
dC0+c2Vjb25kKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVtb3Zl
UHJvcGVydHkocHJvcGVydHktPmlkKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9wcm9wZXJ0
aWVzLmFwcGVuZCgqcHJvcGVydHkpOwotICAgICAgICBjYW5kaWRhdGVzLnNldChwcm9wZXJ0eS0+
aWQoKSwgaW1wb3J0YW50KTsKLSAgICB9Ci19Ci0KLVN0eWxlUHJvcGVydHlTZXQ6On5TdHlsZVBy
b3BlcnR5U2V0KCkKLXsKLSAgICBBU1NFUlQoIW1faGFzQ1NTT01XcmFwcGVyIHx8IHByb3BlcnR5
U2V0Q1NTT01XcmFwcGVyTWFwKCkuY29udGFpbnModGhpcykpOwotICAgIGlmIChtX2hhc0NTU09N
V3JhcHBlcikKLSAgICAgICAgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5yZW1vdmUodGhp
cyk7Ci19Ci0KLXZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6Y29weVByb3BlcnRpZXNGcm9tKGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQmIG90aGVyKQotewotICAgIG1fcHJvcGVydGllcyA9IG90aGVyLm1f
cHJvcGVydGllczsKLX0KLQotU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldFByb3BlcnR5VmFs
dWUoaW50IHByb3BlcnR5SUQpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9
IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7Ci0gICAgaWYgKHZhbHVlKQotICAgICAg
ICByZXR1cm4gdmFsdWUtPmNzc1RleHQoKTsKLQotICAgIC8vIFNob3J0aGFuZCBhbmQgNC12YWx1
ZXMgcHJvcGVydGllcwotICAgIHN3aXRjaCAocHJvcGVydHlJRCkgewotICAgICAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVyU3BhY2luZzogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRp
ZXNbMl0gPSB7IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsIENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nIH07Ci0gICAgICAgICAgICByZXR1cm4g
Ym9yZGVyU3BhY2luZ1ZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb246IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJ
cyB0aGlzIGNvcnJlY3Q/IFRoZSBjb2RlIGluIGNzc3BhcnNlci5jcHAgaXMgY29uZnVzaW5nCi0g
ICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUG9zaXRpb25YLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblkgfTsKLSAgICAgICAg
ICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQ6IHsKLSAgICAgICAg
ICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBl
YXRYLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZIH07Ci0gICAgICAgICAgICByZXR1cm4g
Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJv
cGVydGllc1s5XSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUmVwZWF0WCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25Y
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFj
a2dyb3VuZFBvc2l0aW9uWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbiB9OwotICAgICAgICAgICAg
cmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQg
cHJvcGVydGllc1szXVs0XSA9IHt7IENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmln
aHRXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGggfSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHls
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVy
dHlCb3JkZXJSaWdodFN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZSB9LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDU1NQcm9wZXJ0eUJv
cmRlclRvcENvbG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyTGVm
dENvbG9yIH19OwotICAgICAgICAgICAgU3RyaW5nIHJlczsKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChwcm9wZXJ0aWVzKTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gZ2V0Q29tbW9uVmFsdWUocHJvcGVydGllc1tpXSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoIXJlcy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSAi
ICI7Ci0gICAgICAgICAgICAgICAgICAgIHJlcyArPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3A6IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBw
cm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoLCBDU1NQcm9wZXJ0eUJv
cmRlclRvcFN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3J9OwotICAgICAgICAgICAgcmV0dXJuIGdldFNob3J0aGFu
ZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJSaWdodDogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENT
U1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFN0eWxlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVy
UmlnaHRDb2xvcn07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVy
dGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbTog
ewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3BlcnR5Qm9y
ZGVyQm90dG9tV2lkdGgsIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xv
cn07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnQ6IHsKLSAgICAgICAg
ICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0
aCwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3J9OwotICAgICAgICAgICAg
cmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVy
dGllc1szXSA9IHsgQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGgsIENTU1Byb3BlcnR5T3V0bGluZVN0
eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5
T3V0bGluZUNvbG9yIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJv
cGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbG9y
OiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTUHJvcGVydHlC
b3JkZXJUb3BDb2xvciwgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3Is
IENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0NFZh
bHVlcyhwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyV2lkdGg6IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NQ
cm9wZXJ0eUJvcmRlclRvcFdpZHRoLCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJCb3R0
b21XaWR0aCwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGggfTsKLSAgICAgICAgICAgIHJldHVy
biBnZXQ0VmFsdWVzKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJTdHlsZTogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0g
PSB7IENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGUsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHls
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJv
cmRlckJvdHRvbVN0eWxlLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZSB9OwotICAgICAgICAg
ICAgcmV0dXJuIGdldDRWYWx1ZXMocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhGbG93OiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJv
cGVydGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhEaXJlY3Rpb24sIENTU1Byb3BlcnR5
V2Via2l0RmxleFdyYXAgfTsKLSAgICAgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZShw
cm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udDoKLSAg
ICAgICAgICAgIHJldHVybiBmb250VmFsdWUoKTsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1h
cmdpbjogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU1Byb3Bl
cnR5TWFyZ2luVG9wLCBDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCBDU1NQcm9wZXJ0
eU1hcmdpbkxlZnQgfTsKLSAgICAgICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKHByb3BlcnRpZXMp
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvdzogewotICAgICAg
ICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5T3ZlcmZsb3dYLCBD
U1NQcm9wZXJ0eU92ZXJmbG93WSB9OwotICAgICAgICAgICAgcmV0dXJuIGdldENvbW1vblZhbHVl
KHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5n
OiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTUHJvcGVydHlQ
YWRkaW5nVG9wLCBDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sIENTU1Byb3BlcnR5
UGFkZGluZ0xlZnQgfTsKLSAgICAgICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKHByb3BlcnRpZXMp
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGU6IHsKLSAgICAg
ICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5
cGUsIENTU1Byb3BlcnR5TGlzdFN0eWxlUG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSB9OwotICAgICAgICAg
ICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb246IHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Q/IFRoZSBjb2RlIGluIGNzc3BhcnNlci5jcHAgaXMgY29u
ZnVzaW5nCi0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrUG9zaXRpb25YLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblkgfTsK
LSAgICAgICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQ6IHsK
LSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tSZXBlYXRYLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZIH07Ci0gICAgICAgICAg
ICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrOiB7Ci0gICAgICAgICAgICBjb25z
dCBpbnQgcHJvcGVydGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgQ1NTUHJv
cGVydHlXZWJraXRNYXNrUmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrQXR0YWNobWVudCwgQ1NTUHJvcGVydHlXZWJraXRN
YXNrUG9zaXRpb24sIENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4gfTsKLSAg
ICAgICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpbjog
ewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNmb3JtT3JpZ2luWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5a
IH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246IHsKLSAg
ICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24sIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5
IH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRp
ZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246
IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzddID0geyBDU1NQcm9wZXJ0eVdl
YmtpdEFuaW1hdGlvbk5hbWUsIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25UaW1pbmdGdW5jdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EZWxheSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtp
dEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50LCBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRpcmVj
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0
eVdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJl
ZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRXcmFwOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1sz
XSA9IHsgQ1NTUHJvcGVydHlXZWJraXRXcmFwRmxvdywgQ1NTUHJvcGVydHlXZWJraXRXcmFwTWFy
Z2luLAotICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0V3JhcFBhZGRpbmcgfTsKLSAg
ICAgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAg
fQotI2lmIEVOQUJMRShTVkcpCi0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXI6IHsKLSAg
ICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5TWFya2VyU3RhcnQpOwotICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAg
ICAgICAgIHJldHVybiB2YWx1ZS0+Y3NzVGV4dCgpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Ym9y
ZGVyU3BhY2luZ1ZhbHVlKGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdKSBjb25zdAotewotICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gaG9yaXpvbnRhbFZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9w
ZXJ0aWVzWzBdKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZlcnRpY2FsVmFsdWUgPSBnZXRQcm9w
ZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbMV0pOwotCi0gICAgaWYgKCFob3Jpem9udGFsVmFsdWUp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBBU1NFUlQodmVydGljYWxWYWx1ZSk7IC8v
IEJ5IDxodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS90YWJsZXMuaHRtbCNzZXBhcmF0ZWQtYm9y
ZGVycz4uCi0KLSAgICBTdHJpbmcgaG9yaXpvbnRhbFZhbHVlQ1NTVGV4dCA9IGhvcml6b250YWxW
YWx1ZS0+Y3NzVGV4dCgpOwotICAgIFN0cmluZyB2ZXJ0aWNhbFZhbHVlQ1NTVGV4dCA9IHZlcnRp
Y2FsVmFsdWUtPmNzc1RleHQoKTsKLSAgICBpZiAoaG9yaXpvbnRhbFZhbHVlQ1NTVGV4dCA9PSB2
ZXJ0aWNhbFZhbHVlQ1NTVGV4dCkKLSAgICAgICAgcmV0dXJuIGhvcml6b250YWxWYWx1ZUNTU1Rl
eHQ7Ci0gICAgcmV0dXJuIGhvcml6b250YWxWYWx1ZUNTU1RleHQgKyAnICcgKyB2ZXJ0aWNhbFZh
bHVlQ1NTVGV4dDsKLX0KLQotYm9vbCBTdHlsZVByb3BlcnR5U2V0OjphcHBlbmRGb250TG9uZ2hh
bmRWYWx1ZUlmRXhwbGljaXQoaW50IHByb3BlcnR5SWQsIFN0cmluZ0J1aWxkZXImIHJlc3VsdCkg
Y29uc3QKLXsKLSAgICBjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkgPSBmaW5kUHJvcGVydHlX
aXRoSWQocHJvcGVydHlJZCk7Ci0gICAgaWYgKCFwcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBBbGwgbG9uZ2hhbmRzIG11c3QgaGF2ZSBhdCBsZWFzdCBpbXBsaWNpdCB2YWx1ZXMg
aWYgImZvbnQiIGlzIHNwZWNpZmllZC4KLSAgICBpZiAocHJvcGVydHktPmlzSW1wbGljaXQoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjaGFyIHByZWZpeCA9ICdcMCc7Ci0gICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToKLSAgICAg
ICAgYnJlYWs7IC8vIE5vIHByZWZpeC4KLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToK
LSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZv
bnRXZWlnaHQ6Ci0gICAgICAgIHByZWZpeCA9ICcgJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6Ci0gICAgICAgIHByZWZpeCA9ICcvJzsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
fQotCi0gICAgaWYgKHByZWZpeCAmJiAhcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0
LmFwcGVuZChwcmVmaXgpOwotICAgIHJlc3VsdC5hcHBlbmQocHJvcGVydHktPnZhbHVlKCktPmNz
c1RleHQoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU3RyaW5nIFN0eWxlUHJvcGVydHlT
ZXQ6OmZvbnRWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgY29uc3QgQ1NTUHJvcGVydHkqIGZvbnRTaXpl
UHJvcGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQoQ1NTUHJvcGVydHlGb250U2l6ZSk7Ci0gICAg
aWYgKCFmb250U2l6ZVByb3BlcnR5IHx8IGZvbnRTaXplUHJvcGVydHktPmlzSW1wbGljaXQoKSkK
LSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3Vs
dDsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgIHN1Y2Nlc3MgJj0gYXBwZW5kRm9udExv
bmdoYW5kVmFsdWVJZkV4cGxpY2l0KENTU1Byb3BlcnR5Rm9udFN0eWxlLCByZXN1bHQpOwotICAg
IHN1Y2Nlc3MgJj0gYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KENTU1Byb3BlcnR5
Rm9udFZhcmlhbnQsIHJlc3VsdCk7Ci0gICAgc3VjY2VzcyAmPSBhcHBlbmRGb250TG9uZ2hhbmRW
YWx1ZUlmRXhwbGljaXQoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCByZXN1bHQpOwotICAgIGlmICgh
cmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwotICAgIHJlc3Vs
dC5hcHBlbmQoZm9udFNpemVQcm9wZXJ0eS0+dmFsdWUoKS0+Y3NzVGV4dCgpKTsKLSAgICBzdWNj
ZXNzICY9IGFwcGVuZEZvbnRMb25naGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQsIHJlc3VsdCk7Ci0gICAgc3VjY2VzcyAmPSBhcHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlm
RXhwbGljaXQoQ1NTUHJvcGVydHlGb250RmFtaWx5LCByZXN1bHQpOwotICAgIGlmICghc3VjY2Vz
cykgewotICAgICAgICAvLyBBbiBpbnZhbGlkICJmb250IiB2YWx1ZSBoYXMgYmVlbiBidWlsdCAo
c2hvdWxkIG5ldmVyIGhhcHBlbiwgYXMgYXQgbGVhc3QgaW1wbGljaXQgdmFsdWVzCi0gICAgICAg
IC8vIGZvciBtYW5kYXRvcnkgbG9uZ2hhbmRzIGFyZSBhbHdheXMgZm91bmQgaW4gdGhlIHN0eWxl
KSwgcmVwb3J0IGVtcHR5IHZhbHVlIGluc3RlYWQuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOwotfQotCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0NFZhbHVl
cyhjb25zdCBpbnQqIHByb3BlcnRpZXMpIGNvbnN0Ci17Ci0gICAgLy8gQXNzdW1lIHRoZSBwcm9w
ZXJ0aWVzIGFyZSBpbiB0aGUgdXN1YWwgb3JkZXIgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0Lgot
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdG9wVmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3Bl
cnRpZXNbMF0pOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmlnaHRWYWx1ZSA9IGdldFByb3BlcnR5
Q1NTVmFsdWUocHJvcGVydGllc1sxXSk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBib3R0b21WYWx1
ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1syXSk7Ci0gICAgUmVmUHRyPENTU1Zh
bHVlPiBsZWZ0VmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbM10pOwotCi0g
ICAgLy8gQWxsIDQgcHJvcGVydGllcyBtdXN0IGJlIHNwZWNpZmllZC4KLSAgICBpZiAoIXRvcFZh
bHVlIHx8ICFyaWdodFZhbHVlIHx8ICFib3R0b21WYWx1ZSB8fCAhbGVmdFZhbHVlKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBib29sIHNob3dMZWZ0ID0gcmlnaHRWYWx1ZS0+Y3Nz
VGV4dCgpICE9IGxlZnRWYWx1ZS0+Y3NzVGV4dCgpOwotICAgIGJvb2wgc2hvd0JvdHRvbSA9ICh0
b3BWYWx1ZS0+Y3NzVGV4dCgpICE9IGJvdHRvbVZhbHVlLT5jc3NUZXh0KCkpIHx8IHNob3dMZWZ0
OwotICAgIGJvb2wgc2hvd1JpZ2h0ID0gKHRvcFZhbHVlLT5jc3NUZXh0KCkgIT0gcmlnaHRWYWx1
ZS0+Y3NzVGV4dCgpKSB8fCBzaG93Qm90dG9tOwotCi0gICAgU3RyaW5nIHJlcyA9IHRvcFZhbHVl
LT5jc3NUZXh0KCk7Ci0gICAgaWYgKHNob3dSaWdodCkKLSAgICAgICAgcmVzICs9ICIgIiArIHJp
Z2h0VmFsdWUtPmNzc1RleHQoKTsKLSAgICBpZiAoc2hvd0JvdHRvbSkKLSAgICAgICAgcmVzICs9
ICIgIiArIGJvdHRvbVZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgaWYgKHNob3dMZWZ0KQotICAgICAg
ICByZXMgKz0gIiAiICsgbGVmdFZhbHVlLT5jc3NUZXh0KCk7Ci0KLSAgICByZXR1cm4gcmVzOwot
fQotCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNv
bnN0IGludCogcHJvcGVydGllcywgc2l6ZV90IHNpemUpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJl
czsKLQotICAgIC8vIEJlZ2luIGJ5IGNvbGxlY3RpbmcgdGhlIHByb3BlcnRpZXMgaW50byBhbiBh
cnJheS4KLSAgICBWZWN0b3I8IFJlZlB0cjxDU1NWYWx1ZT4gPiB2YWx1ZXMoc2l6ZSk7Ci0gICAg
c2l6ZV90IG51bUxheWVycyA9IDA7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICB2YWx1ZXNbaV0gPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRp
ZXNbaV0pOwotICAgICAgICBpZiAodmFsdWVzW2ldKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWVz
W2ldLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1
ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZXNbaV0uZ2V0KCkpOwotICAg
ICAgICAgICAgICAgIG51bUxheWVycyA9IG1heCh2YWx1ZUxpc3QtPmxlbmd0aCgpLCBudW1MYXll
cnMpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbnVtTGF5ZXJzID0gbWF4
PHNpemVfdD4oMVUsIG51bUxheWVycyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOb3cg
c3RpdGNoIHRoZSBwcm9wZXJ0aWVzIHRvZ2V0aGVyLiAgSW1wbGljaXQgaW5pdGlhbCB2YWx1ZXMg
YXJlIGZsYWdnZWQgYXMgc3VjaCBhbmQKLSAgICAvLyBjYW4gc2FmZWx5IGJlIG9taXR0ZWQuCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1MYXllcnM7IGkrKykgewotICAgICAgICBTdHJp
bmcgbGF5ZXJSZXM7Ci0gICAgICAgIGJvb2wgdXNlUmVwZWF0WFNob3J0aGFuZCA9IGZhbHNlOwot
ICAgICAgICBib29sIHVzZVJlcGVhdFlTaG9ydGhhbmQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCB1
c2VTaW5nbGVXb3JkU2hvcnRoYW5kID0gZmFsc2U7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAw
OyBqIDwgc2l6ZTsgaisrKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwot
ICAgICAgICAgICAgaWYgKHZhbHVlc1tqXSkgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNb
al0tPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWVzW2pdLmdldCgpKS0+aXRlbShpKTsKLSAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbal07Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gQ29sb3Igb25seSBiZWxvbmdzIGluIHRoZSBsYXN0IGxheWVy
LgotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tqXSA9PSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvcikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gbnVtTGF5
ZXJzIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSAhPSAwKSAvLyBPdGhlciBzaW5nbGV0b25zIG9ubHkg
YmVsb25nIGluIHRoZSBmaXJzdCBsYXllci4KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gcmVwb3J0IGJhY2tncm91bmQtcmVwZWF0IGFzIGl0IHdhcyB3cml0dGVuIGlu
IHRoZSBDU1MuIElmIHRoZSBwcm9wZXJ0eSBpcyBpbXBsaWNpdCwKLSAgICAgICAgICAgIC8vIHRo
ZW4gaXQgd2FzIHdyaXR0ZW4gd2l0aCBvbmx5IG9uZSB2YWx1ZS4gSGVyZSB3ZSBmaWd1cmUgb3V0
IHdoaWNoIHZhbHVlIHRoYXQgd2FzIHNvIHdlIGNhbgotICAgICAgICAgICAgLy8gcmVwb3J0IGJh
Y2sgY29ycmVjdGx5LgotICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbal0gPT0gQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUmVwZWF0WCAmJiBpc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydGllc1tqXSkp
IHsKLQotICAgICAgICAgICAgICAgIC8vIEJVRyA0OTA1NTogbWFrZSBzdXJlIHRoZSB2YWx1ZSB3
YXMgbm90IHJlc2V0IGluIHRoZSBsYXllciBjaGVjayBqdXN0IGFib3ZlLgotICAgICAgICAgICAg
ICAgIGlmIChqIDwgc2l6ZSAtIDEgJiYgcHJvcGVydGllc1tqICsgMV0gPT0gQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUmVwZWF0WSAmJiB2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHlWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBu
ZXh0VmFsdWUgPSB2YWx1ZXNbaiArIDFdOwotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFZh
bHVlLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgeVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4obmV4dFZhbHVlLmdldCgpKS0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayhpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgeVZhbHVlID0gbmV4dFZhbHVlOwotCi0gICAgICAgICAgICAgICAgICAgIGludCB4SWQg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlLmdldCgpKS0+Z2V0SWRlbnQo
KTsKLSAgICAgICAgICAgICAgICAgICAgaW50IHlJZCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4oeVZhbHVlLmdldCgpKS0+Z2V0SWRlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHhJZCAhPSB5SWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4SWQgPT0gQ1NT
VmFsdWVSZXBlYXQgJiYgeUlkID09IENTU1ZhbHVlTm9SZXBlYXQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1c2VSZXBlYXRYU2hvcnRoYW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICArK2o7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHhJ
ZCA9PSBDU1NWYWx1ZU5vUmVwZWF0ICYmIHlJZCA9PSBDU1NWYWx1ZVJlcGVhdCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVzZVJlcGVhdFlTaG9ydGhhbmQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
dXNlU2luZ2xlV29yZFNob3J0aGFuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAr
K2o7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAhdmFsdWUtPmlzSW1wbGljaXRJbml0aWFs
VmFsdWUoKSkgewotICAgICAgICAgICAgICAgIGlmICghbGF5ZXJSZXMuaXNOdWxsKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGxheWVyUmVzICs9ICIgIjsKLSAgICAgICAgICAgICAgICBpZiAodXNl
UmVwZWF0WFNob3J0aGFuZCkgewotICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRYU2hvcnRo
YW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IGdldFZhbHVlTmFt
ZShDU1NWYWx1ZVJlcGVhdFgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlUmVwZWF0
WVNob3J0aGFuZCkgewotICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRZU2hvcnRoYW5kID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IGdldFZhbHVlTmFtZShDU1NW
YWx1ZVJlcGVhdFkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlU2luZ2xlV29yZFNo
b3J0aGFuZCkgewotICAgICAgICAgICAgICAgICAgICB1c2VTaW5nbGVXb3JkU2hvcnRoYW5kID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IHZhbHVlLT5jc3NUZXh0KCk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9
IHZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIWxheWVyUmVzLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIXJlcy5pc051bGwoKSkK
LSAgICAgICAgICAgICAgICByZXMgKz0gIiwgIjsKLSAgICAgICAgICAgIHJlcyArPSBsYXllclJl
czsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXM7Ci19Ci0KLVN0cmluZyBTdHls
ZVByb3BlcnR5U2V0OjpnZXRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHNp
emVfdCBzaXplKSBjb25zdAotewotICAgIFN0cmluZyByZXM7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFpc1Byb3BlcnR5SW1wbGljaXQocHJv
cGVydGllc1tpXSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQ
cm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbaV0pOwotICAgICAgICAgICAgLy8gRklYTUU6IHBy
b3ZpZGUgZGVmYXVsdCB2YWx1ZSBpZiAhdmFsdWUKLSAgICAgICAgICAgIGlmICh2YWx1ZSkgewot
ICAgICAgICAgICAgICAgIGlmICghcmVzLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXMgKz0gIiAiOwotICAgICAgICAgICAgICAgIHJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXM7Ci19Ci0KLS8vIG9u
bHkgcmV0dXJucyBhIG5vbi1udWxsIHZhbHVlIGlmIGFsbCBwcm9wZXJ0aWVzIGhhdmUgdGhlIHNh
bWUsIG5vbi1udWxsIHZhbHVlCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0Q29tbW9uVmFs
dWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBzaXplX3Qgc2l6ZSkgY29uc3QKLXsKLSAgICBTdHJp
bmcgcmVzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNb
aV0pOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgICAgICBTdHJpbmcgdGV4dCA9IHZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgICAgIGlmICh0ZXh0
LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICBpZiAocmVz
LmlzTnVsbCgpKQotICAgICAgICAgICAgcmVzID0gdGV4dDsKLSAgICAgICAgZWxzZSBpZiAocmVz
ICE9IHRleHQpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVy
biByZXM7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUHJvcGVydHlTZXQ6OmdldFBy
b3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0Ci17Ci0gICAgY29uc3QgQ1NTUHJv
cGVydHkqIHByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOwotICAgIHJl
dHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LT52YWx1ZSgpIDogMDsKLX0KLQotYm9vbCBTdHlsZVBy
b3BlcnR5U2V0OjpyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCkKLXsKLSAg
ICBDU1NQcm9wZXJ0eUxvbmdoYW5kIGxvbmdoYW5kID0gbG9uZ2hhbmRGb3JQcm9wZXJ0eShwcm9w
ZXJ0eUlEKTsKLSAgICBpZiAoIWxvbmdoYW5kLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIHJlbW92ZVByb3BlcnRpZXNJblNldChsb25naGFuZC5wcm9wZXJ0aWVz
KCksIGxvbmdoYW5kLmxlbmd0aCgpKTsKLX0KLQotYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpyZW1v
dmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgU3RyaW5nKiByZXR1cm5UZXh0KQotewotICAgIGlm
IChyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShwcm9wZXJ0eUlEKSkgewotICAgICAgICAvLyBGSVhN
RTogUmV0dXJuIGFuIGVxdWl2YWxlbnQgc2hvcnRoYW5kIHdoZW4gcG9zc2libGUuCi0gICAgICAg
IGlmIChyZXR1cm5UZXh0KQotICAgICAgICAgICAgKnJldHVyblRleHQgPSAiIjsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQ1NTUHJvcGVydHkqIGZvdW5kUHJvcGVydHkgPSBm
aW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHlJRCk7Ci0gICAgaWYgKCFmb3VuZFByb3BlcnR5KSB7
Ci0gICAgICAgIGlmIChyZXR1cm5UZXh0KQotICAgICAgICAgICAgKnJldHVyblRleHQgPSAiIjsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChyZXR1cm5UZXh0KQotICAg
ICAgICAqcmV0dXJuVGV4dCA9IGZvdW5kUHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKTsKLQot
ICAgIC8vIEEgbW9yZSBlZmZpY2llbnQgcmVtb3ZhbCBzdHJhdGVneSB3b3VsZCBpbnZvbHZlIG1h
cmtpbmcgZW50cmllcyBhcyBlbXB0eQotICAgIC8vIGFuZCBzd2VlcGluZyB0aGVtIHdoZW4gdGhl
IHZlY3RvciBncm93cyB0b28gYmlnLgotICAgIG1fcHJvcGVydGllcy5yZW1vdmUoZm91bmRQcm9w
ZXJ0eSAtIG1fcHJvcGVydGllcy5kYXRhKCkpOwogICAgIAotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFN0eWxlUHJvcGVydHlTZXQ6OnByb3BlcnR5SXNJbXBvcnRhbnQoaW50IHByb3BlcnR5
SUQpIGNvbnN0Ci17Ci0gICAgY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5ID0gZmluZFByb3Bl
cnR5V2l0aElkKHByb3BlcnR5SUQpOwotICAgIGlmIChwcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJu
IHByb3BlcnR5LT5pc0ltcG9ydGFudCgpOwotCi0gICAgQ1NTUHJvcGVydHlMb25naGFuZCBsb25n
aGFuZHMgPSBsb25naGFuZEZvclByb3BlcnR5KHByb3BlcnR5SUQpOwotICAgIGlmICghbG9uZ2hh
bmRzLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbG9uZ2hhbmRzLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFwcm9w
ZXJ0eUlzSW1wb3J0YW50KGxvbmdoYW5kcy5wcm9wZXJ0aWVzKClbaV0pKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFN0eWxlUHJv
cGVydHlTZXQ6OmdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewot
ICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9w
ZXJ0eUlEKTsKLSAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0eS0+c2hvcnRoYW5kSUQoKSA6
IDA7Ci19Ci0KLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6aXNQcm9wZXJ0eUltcGxpY2l0KGludCBw
cm9wZXJ0eUlEKSBjb25zdAotewotICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSA9IGZp
bmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsKLSAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9w
ZXJ0eS0+aXNJbXBsaWNpdCgpIDogZmFsc2U7Ci19Ci0KLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6
c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKLXsKLSAgICAvLyBTZXR0
aW5nIHRoZSB2YWx1ZSB0byBhbiBlbXB0eSBzdHJpbmcganVzdCByZW1vdmVzIHRoZSBwcm9wZXJ0
eSBpbiBib3RoIElFIGFuZCBHZWNrby4KLSAgICAvLyBTZXR0aW5nIGl0IHRvIG51bGwgc2VlbXMg
dG8gcHJvZHVjZSBsZXNzIGNvbnNpc3RlbnQgcmVzdWx0cywgYnV0IHdlIHRyZWF0IGl0IGp1c3Qg
dGhlIHNhbWUuCi0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICByZW1vdmVQcm9w
ZXJ0eShwcm9wZXJ0eUlEKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8g
V2hlbiByZXBsYWNpbmcgYW4gZXhpc3RpbmcgcHJvcGVydHkgdmFsdWUsIHRoaXMgbW92ZXMgdGhl
IHByb3BlcnR5IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCi0gICAgLy8gRmlyZWZveCBwcmVzZXJ2
ZXMgdGhlIHBvc2l0aW9uLCBhbmQgTVNJRSBtb3ZlcyB0aGUgcHJvcGVydHkgdG8gdGhlIGJlZ2lu
bmluZy4KLSAgICByZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHRoaXMsIHByb3BlcnR5SUQs
IHZhbHVlLCBpbXBvcnRhbnQsIHVzZVN0cmljdFBhcnNpbmcoKSwgY29udGV4dFN0eWxlU2hlZXQp
OwotfQotCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGNvbnN0IENTU1Byb3Bl
cnR5JiBwcm9wZXJ0eSwgQ1NTUHJvcGVydHkqIHNsb3QpCi17Ci0gICAgaWYgKCFyZW1vdmVTaG9y
dGhhbmRQcm9wZXJ0eShwcm9wZXJ0eS5pZCgpKSkgewotICAgICAgICBDU1NQcm9wZXJ0eSogdG9S
ZXBsYWNlID0gc2xvdCA/IHNsb3QgOiBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHkuaWQoKSk7
Ci0gICAgICAgIGlmICh0b1JlcGxhY2UpIHsKLSAgICAgICAgICAgICp0b1JlcGxhY2UgPSBwcm9w
ZXJ0eTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX3Byb3Bl
cnRpZXMuYXBwZW5kKHByb3BlcnR5KTsKLX0KLQotYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQ
cm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IGlkZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50LCBD
U1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKLXsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHZhbHVlOyAgICAKLSAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4
dFN0eWxlU2hlZXQgPyBjb250ZXh0U3R5bGVTaGVldC0+ZmluZERvY3VtZW50KCkgOiAwKQotICAg
ICAgICB2YWx1ZSA9IGRvY3VtZW50LT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZh
bHVlKGlkZW50aWZpZXIpOwotICAgIGVsc2UKLSAgICAgICAgdmFsdWUgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihpZGVudGlmaWVyKTsKLQotICAgIHNldFByb3BlcnR5KENT
U1Byb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50KSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoaW50
IHByb3BlcnR5SUQsIGRvdWJsZSBudW1iZXIsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMg
dW5pdCwgYm9vbCBpbXBvcnRhbnQsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KQot
ewotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWU7ICAgIAotICAgIGlmIChEb2N1
bWVudCogZG9jdW1lbnQgPSBjb250ZXh0U3R5bGVTaGVldCA/IGNvbnRleHRTdHlsZVNoZWV0LT5m
aW5kRG9jdW1lbnQoKSA6IDApCi0gICAgICAgIHZhbHVlID0gZG9jdW1lbnQtPmNzc1ZhbHVlUG9v
bCgpLT5jcmVhdGVWYWx1ZShudW1iZXIsIHVuaXQpOwotICAgIGVsc2UKLSAgICAgICAgdmFsdWUg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG51bWJlciwgdW5pdCk7Ci0gICAgc2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCkpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnBhcnNlRGVjbGFyYXRpb24oY29u
c3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVT
aGVldCkKLXsKLSAgICBtX3Byb3BlcnRpZXMuY2xlYXIoKTsKLSAgICBDU1NQYXJzZXIgcGFyc2Vy
KHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRpb24odGhpcywg
c3R5bGVEZWNsYXJhdGlvbiwgMCwgY29udGV4dFN0eWxlU2hlZXQpOwotfQotCi12b2lkIFN0eWxl
UHJvcGVydHlTZXQ6OmFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0
KiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcykKLXsKLSAgICBtX3Byb3BlcnRpZXMucmVz
ZXJ2ZUNhcGFjaXR5KG51bVByb3BlcnRpZXMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
UHJvcGVydGllczsgKytpKQotICAgICAgICBhZGRQYXJzZWRQcm9wZXJ0eSgqcHJvcGVydGllc1tp
XSk7Ci19Ci0KLXZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydHkoY29uc3Qg
Q1NTUHJvcGVydHkmIHByb3BlcnR5KQotewotICAgIC8vIE9ubHkgYWRkIHByb3BlcnRpZXMgdGhh
dCBoYXZlIG5vICFpbXBvcnRhbnQgY291bnRlcnBhcnQgcHJlc2VudAotICAgIGlmICghcHJvcGVy
dHlJc0ltcG9ydGFudChwcm9wZXJ0eS5pZCgpKSB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpKSB7
Ci0gICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5LmlkKCkpOwotICAgICAgICBtX3Byb3Bl
cnRpZXMuYXBwZW5kKHByb3BlcnR5KTsKLSAgICB9Ci19Ci0KLVN0cmluZyBTdHlsZVByb3BlcnR5
U2V0Ojphc1RleHQoKSBjb25zdAotewotICAgIFN0cmluZyByZXN1bHQgPSAiIjsKLQotICAgIGNv
bnN0IENTU1Byb3BlcnR5KiBwb3NpdGlvblhQcm9wID0gMDsKLSAgICBjb25zdCBDU1NQcm9wZXJ0
eSogcG9zaXRpb25ZUHJvcCA9IDA7Ci0gICAgY29uc3QgQ1NTUHJvcGVydHkqIHJlcGVhdFhQcm9w
ID0gMDsKLSAgICBjb25zdCBDU1NQcm9wZXJ0eSogcmVwZWF0WVByb3AgPSAwOwotCi0gICAgdW5z
aWduZWQgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0g
MDsgbiA8IHNpemU7ICsrbikgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcCA9IG1f
cHJvcGVydGllc1tuXTsKLSAgICAgICAgaWYgKHByb3AuaWQoKSA9PSBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRQb3NpdGlvblgpCi0gICAgICAgICAgICBwb3NpdGlvblhQcm9wID0gJnByb3A7Ci0gICAg
ICAgIGVsc2UgaWYgKHByb3AuaWQoKSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblkp
Ci0gICAgICAgICAgICBwb3NpdGlvbllQcm9wID0gJnByb3A7Ci0gICAgICAgIGVsc2UgaWYgKHBy
b3AuaWQoKSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYKQotICAgICAgICAgICAgcmVw
ZWF0WFByb3AgPSAmcHJvcDsKLSAgICAgICAgZWxzZSBpZiAocHJvcC5pZCgpID09IENTU1Byb3Bl
cnR5QmFja2dyb3VuZFJlcGVhdFkpCi0gICAgICAgICAgICByZXBlYXRZUHJvcCA9ICZwcm9wOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgKz0gcHJvcC5jc3NUZXh0KCk7Ci0gICAg
fQotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSBub3Qtc28tbmljZSB3YXkgdG8gdHVybiB4L3kg
cG9zaXRpb25zIGludG8gc2luZ2xlIGJhY2tncm91bmQtcG9zaXRpb24gaW4gb3V0cHV0LgotICAg
IC8vIEl0IGlzIHJlcXVpcmVkIGJlY2F1c2UgYmFja2dyb3VuZC1wb3NpdGlvbi14L3kgYXJlIG5v
bi1zdGFuZGFyZCBwcm9wZXJ0aWVzIGFuZCBXZWJLaXQgZ2VuZXJhdGVkIG91dHB1dAotICAgIC8v
IHdvdWxkIG5vdCB3b3JrIGluIEZpcmVmb3ggKDxyZGFyOi8vcHJvYmxlbS81MTQzMTgzPikKLSAg
ICAvLyBJdCB3b3VsZCBiZSBhIGJldHRlciBzb2x1dGlvbiBpZiBiYWNrZ3JvdW5kLXBvc2l0aW9u
IHdhcyBDU1NfUEFJUi4KLSAgICBpZiAocG9zaXRpb25YUHJvcCAmJiBwb3NpdGlvbllQcm9wICYm
IHBvc2l0aW9uWFByb3AtPmlzSW1wb3J0YW50KCkgPT0gcG9zaXRpb25ZUHJvcC0+aXNJbXBvcnRh
bnQoKSkgewotICAgICAgICBTdHJpbmcgcG9zaXRpb25WYWx1ZTsKLSAgICAgICAgY29uc3QgaW50
IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZIH07Ci0gICAgICAgIGlmIChwb3NpdGlvblhQcm9wLT52
YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpIHx8IHBvc2l0aW9uWVByb3AtPnZhbHVlKCktPmlzVmFsdWVM
aXN0KCkpCi0gICAgICAgICAgICBwb3NpdGlvblZhbHVlID0gZ2V0TGF5ZXJlZFNob3J0aGFuZFZh
bHVlKHByb3BlcnRpZXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3NpdGlvblZhbHVl
ID0gcG9zaXRpb25YUHJvcC0+dmFsdWUoKS0+Y3NzVGV4dCgpICsgIiAiICsgcG9zaXRpb25ZUHJv
cC0+dmFsdWUoKS0+Y3NzVGV4dCgpOwotICAgICAgICByZXN1bHQgKz0gImJhY2tncm91bmQtcG9z
aXRpb246ICIgKyBwb3NpdGlvblZhbHVlICsgKHBvc2l0aW9uWFByb3AtPmlzSW1wb3J0YW50KCkg
PyAiICFpbXBvcnRhbnQiIDogIiIpICsgIjsgIjsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
cG9zaXRpb25YUHJvcCkKLSAgICAgICAgICAgIHJlc3VsdCArPSBwb3NpdGlvblhQcm9wLT5jc3NU
ZXh0KCk7Ci0gICAgICAgIGlmIChwb3NpdGlvbllQcm9wKQotICAgICAgICAgICAgcmVzdWx0ICs9
IHBvc2l0aW9uWVByb3AtPmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2UgbmVl
ZCB0byBkbyB0aGUgc2FtZSBmb3IgYmFja2dyb3VuZC1yZXBlYXQuCi0gICAgaWYgKHJlcGVhdFhQ
cm9wICYmIHJlcGVhdFlQcm9wICYmIHJlcGVhdFhQcm9wLT5pc0ltcG9ydGFudCgpID09IHJlcGVh
dFlQcm9wLT5pc0ltcG9ydGFudCgpKSB7Ci0gICAgICAgIFN0cmluZyByZXBlYXRWYWx1ZTsKLSAg
ICAgICAgY29uc3QgaW50IHJlcGVhdFByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5QmFja2dy
b3VuZFJlcGVhdFgsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFkgfTsKLSAgICAgICAgaWYg
KHJlcGVhdFhQcm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpIHx8IHJlcGVhdFlQcm9wLT52YWx1
ZSgpLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICAgICAgcmVwZWF0VmFsdWUgPSBnZXRMYXllcmVk
U2hvcnRoYW5kVmFsdWUocmVwZWF0UHJvcGVydGllcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJlcGVhdFZhbHVlID0gcmVwZWF0WFByb3AtPnZhbHVlKCktPmNzc1RleHQoKSArICIgIiAr
IHJlcGVhdFlQcm9wLT52YWx1ZSgpLT5jc3NUZXh0KCk7Ci0gICAgICAgIHJlc3VsdCArPSAiYmFj
a2dyb3VuZC1yZXBlYXQ6ICIgKyByZXBlYXRWYWx1ZSArIChyZXBlYXRYUHJvcC0+aXNJbXBvcnRh
bnQoKSA/ICIgIWltcG9ydGFudCIgOiAiIikgKyAiOyAiOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChyZXBlYXRYUHJvcCkKLSAgICAgICAgICAgIHJlc3VsdCArPSByZXBlYXRYUHJvcC0+Y3Nz
VGV4dCgpOwotICAgICAgICBpZiAocmVwZWF0WVByb3ApCi0gICAgICAgICAgICByZXN1bHQgKz0g
cmVwZWF0WVByb3AtPmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci12b2lkIFN0eWxlUHJvcGVydHlTZXQ6Om1lcmdlKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIG90
aGVyLCBib29sIGFyZ092ZXJyaWRlc09uQ29uZmxpY3QpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9
IG90aGVyLT5tX3Byb3BlcnRpZXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4g
PCBzaXplOyArK24pIHsKLSAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHRvTWVyZ2UgPSBvdGhl
ci0+bV9wcm9wZXJ0aWVzW25dOwotICAgICAgICBDU1NQcm9wZXJ0eSogb2xkID0gZmluZFByb3Bl
cnR5V2l0aElkKHRvTWVyZ2UuaWQoKSk7Ci0gICAgICAgIGlmIChvbGQpIHsKLSAgICAgICAgICAg
IGlmICghYXJnT3ZlcnJpZGVzT25Db25mbGljdCAmJiBvbGQtPnZhbHVlKCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzZXRQcm9wZXJ0eSh0b01lcmdlLCBvbGQpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fcHJvcGVydGllcy5hcHBlbmQodG9NZXJnZSk7
Ci0gICAgfQotfQotCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVT
aGVldCkKLXsKLSAgICBzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1fcHJvcGVydGllc1tpXS52
YWx1ZSgpLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBjb250ZXh0U3R5bGVTaGVldCk7
Ci19Ci0KLS8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB3ZSB3YW50IHRvIGNvcHkg
aW4gdGhlIGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBmdW5jdGlvbi4KLS8vIEl0IGlzIHRoZSBsaXN0
IG9mIENTUyBwcm9wZXJ0aWVzIHRoYXQgYXBwbHkgc3BlY2lhbGx5IHRvIGJsb2NrLWxldmVsIGVs
ZW1lbnRzLgotc3RhdGljIGNvbnN0IGludCBibG9ja1Byb3BlcnRpZXNbXSA9IHsKLSAgICBDU1NQ
cm9wZXJ0eU9ycGhhbnMsCi0gICAgQ1NTUHJvcGVydHlPdmVyZmxvdywgLy8gVGhpcyBjYW4gYmUg
YWxzbyBiZSBhcHBsaWVkIHRvIHJlcGxhY2VkIGVsZW1lbnRzCi0gICAgQ1NTUHJvcGVydHlXZWJr
aXRBc3BlY3RSYXRpbywKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkNvdW50LAotICAgIENT
U1Byb3BlcnR5V2Via2l0Q29sdW1uR2FwLAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVs
ZUNvbG9yLAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVN0eWxlLAotICAgIENTU1By
b3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoLAotICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
QnJlYWtCZWZvcmUsCi0gICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0FmdGVyLAotICAg
IENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtJbnNpZGUsCi0gICAgQ1NTUHJvcGVydHlXZWJr
aXRDb2x1bW5XaWR0aCwKLSAgICBDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyLAotICAgIENTU1By
b3BlcnR5UGFnZUJyZWFrQmVmb3JlLAotICAgIENTU1Byb3BlcnR5UGFnZUJyZWFrSW5zaWRlLAot
ICAgIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtBZnRlciwKLSAgICBDU1NQcm9wZXJ0eVdl
YmtpdFJlZ2lvbkJyZWFrQmVmb3JlLAotICAgIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtJ
bnNpZGUsCi0gICAgQ1NTUHJvcGVydHlUZXh0QWxpZ24sCi0gICAgQ1NTUHJvcGVydHlUZXh0SW5k
ZW50LAotICAgIENTU1Byb3BlcnR5V2lkb3dzCi19OwotCi1jb25zdCB1bnNpZ25lZCBudW1CbG9j
a1Byb3BlcnRpZXMgPSBXVEZfQVJSQVlfTEVOR1RIKGJsb2NrUHJvcGVydGllcyk7Ci0KLVBhc3NS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6Y29weUJsb2NrUHJvcGVy
dGllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9w
ZXJ0aWVzLCBudW1CbG9ja1Byb3BlcnRpZXMpOwotfQotCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6
OnJlbW92ZUJsb2NrUHJvcGVydGllcygpCi17Ci0gICAgcmVtb3ZlUHJvcGVydGllc0luU2V0KGJs
b2NrUHJvcGVydGllcywgbnVtQmxvY2tQcm9wZXJ0aWVzKTsKLX0KLQotYm9vbCBTdHlsZVByb3Bl
cnR5U2V0OjpyZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICBpZiAobV9wcm9wZXJ0aWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYWx3YXlzIHVzZWQgd2l0aCBzdGF0aWMg
c2V0cyBhbmQgaW4gdGhhdCBjYXNlIGNvbnN0cnVjdGluZyB0aGUgaGFzaCByZXBlYXRlZGx5IGlz
IHByZXR0eSBwb2ludGxlc3MuCi0gICAgSGFzaFNldDxpbnQ+IHRvUmVtb3ZlOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgdG9SZW1vdmUuYWRkKHNl
dFtpXSk7Ci0KLSAgICBWZWN0b3I8Q1NTUHJvcGVydHksIDQ+IG5ld1Byb3BlcnRpZXM7Ci0gICAg
bmV3UHJvcGVydGllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcHJvcGVydGllcy5zaXplKCkp
OwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBuID0gMDsgbiA8IHNpemU7ICsrbikgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0
eSYgcHJvcGVydHkgPSBtX3Byb3BlcnRpZXNbbl07Ci0gICAgICAgIC8vIE5vdCBxdWl0ZSBzdXJl
IGlmIHRoZSBpc0ltcG9ydGFudCB0ZXN0IGlzIG5lZWRlZCBidXQgaXQgbWF0Y2hlcyB0aGUgZXhp
c3RpbmcgYmVoYXZpb3IuCi0gICAgICAgIGlmICghcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgewot
ICAgICAgICAgICAgaWYgKHRvUmVtb3ZlLmNvbnRhaW5zKHByb3BlcnR5LmlkKCkpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIG5ld1Byb3BlcnRpZXMuYXBw
ZW5kKHByb3BlcnR5KTsKLSAgICB9Ci0KLSAgICBib29sIGNoYW5nZWQgPSBuZXdQcm9wZXJ0aWVz
LnNpemUoKSAhPSBtX3Byb3BlcnRpZXMuc2l6ZSgpOwotICAgIG1fcHJvcGVydGllcyA9IG5ld1By
b3BlcnRpZXM7Ci0gICAgcmV0dXJuIGNoYW5nZWQ7Ci19Ci0KLWNvbnN0IENTU1Byb3BlcnR5KiBT
dHlsZVByb3BlcnR5U2V0OjpmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5SUQpIGNvbnN0
Ci17Ci0gICAgZm9yIChpbnQgbiA9IG1fcHJvcGVydGllcy5zaXplKCkgLSAxIDsgbiA+PSAwOyAt
LW4pIHsKLSAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gbV9wcm9wZXJ0aWVzW25dLm1faWQpCi0g
ICAgICAgICAgICByZXR1cm4gJm1fcHJvcGVydGllc1tuXTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLUNTU1Byb3BlcnR5KiBTdHlsZVByb3BlcnR5U2V0OjpmaW5kUHJvcGVydHlXaXRoSWQo
aW50IHByb3BlcnR5SUQpCi17Ci0gICAgZm9yIChpbnQgbiA9IG1fcHJvcGVydGllcy5zaXplKCkg
LSAxIDsgbiA+PSAwOyAtLW4pIHsKLSAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gbV9wcm9wZXJ0
aWVzW25dLm1faWQpCi0gICAgICAgICAgICByZXR1cm4gJm1fcHJvcGVydGllc1tuXTsKLSAgICB9
Ci0gICAgcmV0dXJuIDA7Ci19Ci0gICAgCi1ib29sIFN0eWxlUHJvcGVydHlTZXQ6OnByb3BlcnR5
TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCkpOwot
ICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS0+Y3NzVGV4dCgpID09IHByb3BlcnR5LT52YWx1ZSgp
LT5jc3NUZXh0KCk7Ci19Ci0gICAgCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUVxdWl2
YWxlbnRQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKQotewotICAgIFZl
Y3RvcjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92ZTsKLSAgICBzaXplX3Qgc2l6ZSA9IG1fcHJvcGVy
dGllcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wcm9wZXJ0aWVzW2ldOwotICAg
ICAgICBpZiAoc3R5bGUtPnByb3BlcnR5TWF0Y2hlcygmcHJvcGVydHkpKQotICAgICAgICAgICAg
cHJvcGVydGllc1RvUmVtb3ZlLmFwcGVuZChwcm9wZXJ0eS5pZCgpKTsKLSAgICB9ICAgIAotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgbWFzcyByZW1vdmFsLgotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJl
bW92ZVByb3BlcnR5KHByb3BlcnRpZXNUb1JlbW92ZVtpXSk7Ci19Ci0KLXZvaWQgU3R5bGVQcm9w
ZXJ0eVNldDo6cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29uc3QgQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpCi17Ci0gICAgVmVjdG9yPGludD4gcHJvcGVydGllc1RvUmVtb3ZlOwotICAg
IHNpemVfdCBzaXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkg
PSBtX3Byb3BlcnRpZXNbaV07Ci0gICAgICAgIGlmIChzdHlsZS0+Y3NzUHJvcGVydHlNYXRjaGVz
KCZwcm9wZXJ0eSkpCi0gICAgICAgICAgICBwcm9wZXJ0aWVzVG9SZW1vdmUuYXBwZW5kKHByb3Bl
cnR5LmlkKCkpOwotICAgIH0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBtYXNz
IHJlbW92YWwuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnRpZXNUb1JlbW92
ZS5zaXplKCk7ICsraSkKLSAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydGllc1RvUmVtb3Zl
W2ldKTsKLX0KLQotUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBTdHlsZVByb3BlcnR5U2V0
Ojpjb3B5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlT
ZXQobV9wcm9wZXJ0aWVzKSk7Ci19Ci0KLVBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gU3R5
bGVQcm9wZXJ0eVNldDo6Y29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWdu
ZWQgbGVuZ3RoKSBjb25zdAotewotICAgIFZlY3RvcjxDU1NQcm9wZXJ0eT4gbGlzdDsKLSAgICBs
aXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9
IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ldKTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAg
ICAgICAgbGlzdC5hcHBlbmQoQ1NTUHJvcGVydHkoc2V0W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZh
bHNlKSk7Ci0gICAgfQotICAgIHJldHVybiBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUobGlzdCk7
Ci19Ci0KLUNTU1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlUHJvcGVydHlTZXQ6OmVuc3VyZUNTU1N0
eWxlRGVjbGFyYXRpb24oKSBjb25zdAotewotICAgIGlmIChtX2hhc0NTU09NV3JhcHBlcikgewot
ICAgICAgICBBU1NFUlQoIXN0YXRpY19jYXN0PENTU1N0eWxlRGVjbGFyYXRpb24qPihwcm9wZXJ0
eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKSktPnBhcmVudFJ1bGUoKSk7Ci0gICAgICAg
IEFTU0VSVCghcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyktPnBhcmVudEVs
ZW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdl
dCh0aGlzKTsKLSAgICB9Ci0gICAgbV9oYXNDU1NPTVdyYXBwZXIgPSB0cnVlOwotICAgIFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogY3Nzb21XcmFwcGVyID0gbmV3IFByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbihjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPih0aGlzKSk7
Ci0gICAgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5hZGQodGhpcywgYWRvcHRQdHIoY3Nz
b21XcmFwcGVyKSk7Ci0gICAgcmV0dXJuIGNzc29tV3JhcHBlcjsKLX0KLQotQ1NTU3R5bGVEZWNs
YXJhdGlvbiogU3R5bGVQcm9wZXJ0eVNldDo6ZW5zdXJlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24o
Y29uc3QgQ1NTUnVsZSogcGFyZW50UnVsZSkgY29uc3QKLXsKLSAgICBpZiAobV9oYXNDU1NPTVdy
YXBwZXIpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PENTU1N0eWxlRGVjbGFyYXRpb24q
Pihwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKSktPnBhcmVudFJ1bGUoKSA9
PSBwYXJlbnRSdWxlKTsKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFw
KCkuZ2V0KHRoaXMpOwotICAgIH0KLSAgICBtX2hhc0NTU09NV3JhcHBlciA9IHRydWU7Ci0gICAg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NvbVdyYXBwZXIgPSBuZXcgUnVsZUNT
U1N0eWxlRGVjbGFyYXRpb24oY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4odGhpcyksIGNv
bnN0X2Nhc3Q8Q1NTUnVsZSo+KHBhcmVudFJ1bGUpKTsKLSAgICBwcm9wZXJ0eVNldENTU09NV3Jh
cHBlck1hcCgpLmFkZCh0aGlzLCBhZG9wdFB0cihjc3NvbVdyYXBwZXIpKTsKLSAgICByZXR1cm4g
Y3Nzb21XcmFwcGVyOwotfQotCi1DU1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZVByb3BlcnR5U2V0
OjplbnN1cmVJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0IFN0eWxlZEVsZW1lbnQqIHBh
cmVudEVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgaWYgKG1faGFzQ1NTT01XcmFwcGVyKSB7Ci0gICAg
ICAgIEFTU0VSVChwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKS0+cGFyZW50
RWxlbWVudCgpID09IHBhcmVudEVsZW1lbnQpOwotICAgICAgICByZXR1cm4gcHJvcGVydHlTZXRD
U1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyk7Ci0gICAgfQotICAgIG1faGFzQ1NTT01XcmFwcGVy
ID0gdHJ1ZTsKLSAgICBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIGNzc29tV3JhcHBl
ciA9IG5ldyBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0
eVNldCo+KHRoaXMpLCBjb25zdF9jYXN0PFN0eWxlZEVsZW1lbnQqPihwYXJlbnRFbGVtZW50KSk7
Ci0gICAgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5hZGQodGhpcywgYWRvcHRQdHIoY3Nz
b21XcmFwcGVyKSk7Ci0gICAgcmV0dXJuIGNzc29tV3JhcHBlcjsKLX0KLQotdm9pZCBTdHlsZVBy
b3BlcnR5U2V0OjpjbGVhclBhcmVudFJ1bGUoQ1NTUnVsZSogcnVsZSkKLXsKLSAgICBpZiAoIW1f
aGFzQ1NTT01XcmFwcGVyKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUX1VOVVNFRChydWxl
LCBzdGF0aWNfY2FzdDxDU1NTdHlsZURlY2xhcmF0aW9uKj4ocHJvcGVydHlTZXRDU1NPTVdyYXBw
ZXJNYXAoKS5nZXQodGhpcykpLT5wYXJlbnRSdWxlKCkgPT0gcnVsZSk7Ci0gICAgcHJvcGVydHlT
ZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyktPmNsZWFyUGFyZW50UnVsZSgpOwordm9pZCBQ
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnJlZigpCit7IAorICAgIG1fcHJvcGVydHlT
ZXQtPnJlZigpOwogfQogCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmNsZWFyUGFyZW50RWxlbWVu
dChTdHlsZWRFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmICghbV9oYXNDU1NPTVdyYXBwZXIp
Ci0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlRfVU5VU0VEKGVsZW1lbnQsIHByb3BlcnR5U2V0
Q1NTT01XcmFwcGVyTWFwKCkuZ2V0KHRoaXMpLT5wYXJlbnRFbGVtZW50KCkgPT0gZWxlbWVudCk7
Ci0gICAgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyktPmNsZWFyUGFyZW50
RWxlbWVudCgpOwordm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmRlcmVmKCkK
K3sgCisgICAgbV9wcm9wZXJ0eVNldC0+ZGVyZWYoKTsgCiB9CiAKIHVuc2lnbmVkIFByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3RoKCkgY29uc3QKQEAgLTEyNzIsMTAgKzMxOCw0
IEBAIENTU1N0eWxlU2hlZXQqIElubGluZUNTU1N0eWxlRGVjbGFyYXRpb24KICAgICByZXR1cm4g
bV9wYXJlbnRFbGVtZW50ID8gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpLT5lbGVtZW50U2hl
ZXQoKSA6IDA7CiB9CiAKLWNsYXNzIFNhbWVTaXplQXNTdHlsZVByb3BlcnR5U2V0IDogcHVibGlj
IFJlZkNvdW50ZWQ8U2FtZVNpemVBc1N0eWxlUHJvcGVydHlTZXQ+IHsKLSAgICBWZWN0b3I8Q1NT
UHJvcGVydHksIDQ+IHByb3BlcnRpZXM7Ci0gICAgdW5zaWduZWQgYml0ZmllbGQ7Ci19OwotQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFN0eWxlUHJvcGVydHlTZXQpID09IHNpemVvZihTYW1lU2l6ZUFz
U3R5bGVQcm9wZXJ0eVNldCksIHN0eWxlX3Byb3BlcnR5X3NldF9zaG91bGRfc3RheV9zbWFsbCk7
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb25faAorI2RlZmluZSBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b25faAorCisjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENTU1J1bGU7CitjbGFzcyBDU1NQcm9wZXJ0eTsKK2NsYXNzIENTU1N0
eWxlU2hlZXQ7CitjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CitjbGFz
cyBTdHlsZWRFbGVtZW50OworCitjbGFzcyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24g
OiBwdWJsaWMgQ1NTU3R5bGVEZWNsYXJhdGlvbiB7CitwdWJsaWM6CisgICAgUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0KSA6IG1fcHJv
cGVydHlTZXQocHJvcGVydHlTZXQpIHsgfQorICAgIAorICAgIHZpcnR1YWwgU3R5bGVkRWxlbWVu
dCogcGFyZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJQYXJlbnRSdWxlKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwg
dm9pZCBjbGVhclBhcmVudEVsZW1lbnQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAg
dmlydHVhbCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHJlZigpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpIE9WRVJSSURFOworICAgIAorICAgIHZpcnR1YWwgQ1NT
UnVsZSogcGFyZW50UnVsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH07CisgICAgdmly
dHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGdl
dFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJv
cGVydHlOYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJp
bmcmLCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3Bl
cnR5SUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKENT
U1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRp
b25Db2RlJikgT1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0
Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgQ1NT
U3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1ha2VNdXRhYmxlKCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoKSB7IH0gICAgCisg
ICAgCitwcm90ZWN0ZWQ6CisgICAgU3R5bGVQcm9wZXJ0eVNldCogbV9wcm9wZXJ0eVNldDsKK307
CisKK2NsYXNzIFJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbgoreworcHVibGljOgorICAgIFJ1bGVDU1NTdHlsZURlY2xhcmF0aW9u
KFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0LCBDU1NSdWxlKiBwYXJlbnRSdWxlKQorICAg
ICAgICA6IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihwcm9wZXJ0eVNldCkKKyAgICAg
ICAgLCBtX3BhcmVudFJ1bGUocGFyZW50UnVsZSkgCisgICAgeworICAgIH0KKyAgICAKK3ByaXZh
dGU6ICAgIAorICAgIHZpcnR1YWwgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyZW50UnVsZTsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXJlbnRSdWxlKCkgeyBt
X3BhcmVudFJ1bGUgPSAwOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKKyAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3Q7
CisgICAgCisgICAgQ1NTUnVsZSogbV9wYXJlbnRSdWxlOworfTsKKworY2xhc3MgSW5saW5lQ1NT
U3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24K
K3sKK3B1YmxpYzoKKyAgICBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlT
ZXQqIHByb3BlcnR5U2V0LCBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KQorICAgICAgICA6
IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihwcm9wZXJ0eVNldCkKKyAgICAgICAgLCBt
X3BhcmVudEVsZW1lbnQocGFyZW50RWxlbWVudCkgCisgICAgeworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXJlbnRFbGVtZW50OyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyUGFyZW50RWxl
bWVudCgpIHsgbV9wYXJlbnRFbGVtZW50ID0gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c1N0eWxlUmVjYWxjKCk7CisgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVT
aGVldCgpIGNvbnN0OworICAgIAorICAgIFN0eWxlZEVsZW1lbnQqIG1fcGFyZW50RWxlbWVudDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCShyZXZpc2lvbiAxMDgzNjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkg
KzM0LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCIKLSNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5oIgotI2lu
Y2x1ZGUgIk11dGF0aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAiUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIldlYktp
dE11dGF0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CkBAIC01MywxNjYgKzUxLDYgQEAgc3RhdGljIFByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwJiBw
cm9wZQogICAgIHJldHVybiBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcEluc3RhbmNlOwogfQog
Ci1jbGFzcyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
KFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0KSA6IG1fcHJvcGVydHlTZXQocHJvcGVydHlT
ZXQpIHsgfQotICAgIAotICAgIHZpcnR1YWwgU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXJlbnRSdWxlKCkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhcmVudEVs
ZW1lbnQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCBDU1NTdHlsZVNo
ZWV0KiBjb250ZXh0U3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIHZvaWQgcmVmKCkgT1ZFUlJJREUgeyBtX3Byb3BlcnR5U2V0LT5yZWYoKTsg
fQotICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpIE9WRVJSSURFIHsgbV9wcm9wZXJ0eVNldC0+ZGVy
ZWYoKTsgfQotCi0gICAgdmlydHVhbCBDU1NSdWxlKiBwYXJlbnRSdWxlKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gMDsgfTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NW
YWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBT
dHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlT
aG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhj
ZXB0aW9uQ29kZSYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWVJbnRl
cm5hbChDU1NQcm9wZXJ0eUlEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9w
ZXJ0eVZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2
b2lkIHNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKLSAgICAKLSAgICB2
aXJ0dWFsIGJvb2wgY3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KikgY29uc3Qg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IGNvcHkoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3R5bGVQcm9w
ZXJ0eVNldD4gbWFrZU11dGFibGUoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNTdHlsZVJlY2FsYygpIHsgfSAgICAKLQotcHJvdGVjdGVkOgotICAgIFN0eWxlUHJvcGVydHlT
ZXQqIG1fcHJvcGVydHlTZXQ7Ci19OwotCi1jbGFzcyBSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbiA6
IHB1YmxpYyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24KLXsKLXB1YmxpYzoKLSAgICBS
dWxlQ1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0eVNldCwgQ1NT
UnVsZSogcGFyZW50UnVsZSkKLSAgICAgICAgOiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24ocHJvcGVydHlTZXQpCi0gICAgICAgICwgbV9wYXJlbnRSdWxlKHBhcmVudFJ1bGUpIAotICAg
IHsKLSAgICB9Ci0KLXByaXZhdGU6ICAgIAotICAgIHZpcnR1YWwgQ1NTUnVsZSogcGFyZW50UnVs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50UnVsZTsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJQYXJlbnRSdWxlKCkgeyBtX3BhcmVudFJ1bGUgPSAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRT
dHlsZVNoZWV0KCkgY29uc3Q7Ci0gICAgCi0gICAgQ1NTUnVsZSogbV9wYXJlbnRSdWxlOwotfTsK
LQotY2xhc3MgSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBQcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb24KLXsKLXB1YmxpYzoKLSAgICBJbmxpbmVDU1NTdHlsZURlY2xhcmF0
aW9uKFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0LCBTdHlsZWRFbGVtZW50KiBwYXJlbnRF
bGVtZW50KQotICAgICAgICA6IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihwcm9wZXJ0
eVNldCkKLSAgICAgICAgLCBtX3BhcmVudEVsZW1lbnQocGFyZW50RWxlbWVudCkgCi0gICAgewot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudEVsZW1lbnQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJQYXJlbnRFbGVtZW50KCkgeyBtX3BhcmVudEVsZW1lbnQgPSAwOyB9Ci0gICAgdmlydHVh
bCB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQq
IGNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3Q7Ci0KLSAgICBTdHlsZWRFbGVtZW50KiBtX3BhcmVu
dEVsZW1lbnQ7Ci19OwotCi1uYW1lc3BhY2UgewotCi1jbGFzcyBTdHlsZUF0dHJpYnV0ZU11dGF0
aW9uU2NvcGUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0eWxlQXR0cmlidXRlTXV0YXRp
b25TY29wZSk7Ci1wdWJsaWM6Ci0gICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlKFByb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogZGVjbCkKLSAgICB7Ci0gICAgICAgICsrc19zY29w
ZUNvdW50OwotCi0gICAgICAgIGlmIChzX3Njb3BlQ291bnQgIT0gMSkgewotICAgICAgICAgICAg
QVNTRVJUKHNfY3VycmVudERlY2wgPT0gZGVjbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBBU1NFUlQoIXNfY3VycmVudERlY2wpOwotICAgICAgICBzX2N1cnJl
bnREZWNsID0gZGVjbDsKLQotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgICAg
IGlmICghc19jdXJyZW50RGVjbC0+cGFyZW50RWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX211dGF0aW9uUmVjaXBpZW50cyA9IE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVz
dEdyb3VwOjpjcmVhdGVGb3JBdHRyaWJ1dGVzTXV0YXRpb24oc19jdXJyZW50RGVjbC0+cGFyZW50
RWxlbWVudCgpLCBIVE1MTmFtZXM6OnN0eWxlQXR0cik7Ci0gICAgICAgIGlmICghbV9tdXRhdGlv
blJlY2lwaWVudHMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQXRvbWljU3RyaW5n
IG9sZFZhbHVlID0gbV9tdXRhdGlvblJlY2lwaWVudHMtPmlzT2xkVmFsdWVSZXF1ZXN0ZWQoKSA/
IHNfY3VycmVudERlY2wtPnBhcmVudEVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
c3R5bGVBdHRyKSA6IG51bGxBdG9tOwotICAgICAgICBtX211dGF0aW9uID0gTXV0YXRpb25SZWNv
cmQ6OmNyZWF0ZUF0dHJpYnV0ZXMoc19jdXJyZW50RGVjbC0+cGFyZW50RWxlbWVudCgpLCBIVE1M
TmFtZXM6OnN0eWxlQXR0ciwgb2xkVmFsdWUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgflN0eWxl
QXR0cmlidXRlTXV0YXRpb25TY29wZSgpCi0gICAgewotICAgICAgICAtLXNfc2NvcGVDb3VudDsK
LSAgICAgICAgaWYgKHNfc2NvcGVDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotI2lmIEVO
QUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgICAgIGlmIChtX211dGF0aW9uICYmIHNfc2hv
dWxkRGVsaXZlcikKLSAgICAgICAgICAgIG1fbXV0YXRpb25SZWNpcGllbnRzLT5lbnF1ZXVlTXV0
YXRpb25SZWNvcmQobV9tdXRhdGlvbik7Ci0gICAgICAgIHNfc2hvdWxkRGVsaXZlciA9IGZhbHNl
OwotI2VuZGlmCi0gICAgICAgIGlmICghc19zaG91bGROb3RpZnlJbnNwZWN0b3IpIHsKLSAgICAg
ICAgICAgIHNfY3VycmVudERlY2wgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIC8vIFdlIGhhdmUgdG8gY2xlYXIgaW50ZXJuYWwgc3RhdGUgYmVmb3JlIGNhbGxp
bmcgSW5zcGVjdG9yJ3MgY29kZS4KLSAgICAgICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uKiBsb2NhbENvcHlTdHlsZURlY2wgPSBzX2N1cnJlbnREZWNsOwotICAgICAgICBzX2N1cnJl
bnREZWNsID0gMDsKLSAgICAgICAgc19zaG91bGROb3RpZnlJbnNwZWN0b3IgPSBmYWxzZTsKLSAg
ICAgICAgaWYgKGxvY2FsQ29weVN0eWxlRGVjbC0+cGFyZW50RWxlbWVudCgpICYmIGxvY2FsQ29w
eVN0eWxlRGVjbC0+cGFyZW50RWxlbWVudCgpLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKGxvY2FsQ29weVN0
eWxlRGVjbC0+cGFyZW50RWxlbWVudCgpLT5kb2N1bWVudCgpLCBsb2NhbENvcHlTdHlsZURlY2wt
PnBhcmVudEVsZW1lbnQoKSk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVS
UykKLSAgICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZCgpCi0gICAgewotICAgICAgICBzX3No
b3VsZERlbGl2ZXIgPSB0cnVlOwotICAgIH0KLSNlbmRpZgotCi0gICAgdm9pZCBkaWRJbnZhbGlk
YXRlU3R5bGVBdHRyKCkKLSAgICB7Ci0gICAgICAgIHNfc2hvdWxkTm90aWZ5SW5zcGVjdG9yID0g
dHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIHVuc2lnbmVkIHNfc2NvcGVDb3Vu
dDsKLSAgICBzdGF0aWMgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBzX2N1cnJlbnRE
ZWNsOwotICAgIHN0YXRpYyBib29sIHNfc2hvdWxkTm90aWZ5SW5zcGVjdG9yOwotI2lmIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgc3RhdGljIGJvb2wgc19zaG91bGREZWxpdmVyOwot
Ci0gICAgT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiBtX211dGF0aW9uUmVj
aXBpZW50czsKLSAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG1fbXV0YXRpb247Ci0jZW5kaWYK
LX07Ci0KLXVuc2lnbmVkIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19zY29wZUNvdW50
ID0gMDsKLVByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogU3R5bGVBdHRyaWJ1dGVNdXRh
dGlvblNjb3BlOjpzX2N1cnJlbnREZWNsID0gMDsKLWJvb2wgU3R5bGVBdHRyaWJ1dGVNdXRhdGlv
blNjb3BlOjpzX3Nob3VsZE5vdGlmeUluc3BlY3RvciA9IGZhbHNlOwotI2lmIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCi1ib29sIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZTo6c19zaG91
bGREZWxpdmVyID0gZmFsc2U7Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UKLQogU3R5bGVQcm9w
ZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldCgpCiAgICAgOiBtX3N0cmljdFBhcnNpbmcoZmFsc2Up
CiAgICAgLCBtX2hhc0NTU09NV3JhcHBlcihmYWxzZSkKQEAgLTEwODMsMTk1ICs5MjEsNiBAQCB2
b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmNsZWFyUGFyZW50RWxlbWVuCiAgICAgcHJvcGVydHlTZXRD
U1NPTVdyYXBwZXJNYXAoKS5nZXQodGhpcyktPmNsZWFyUGFyZW50RWxlbWVudCgpOwogfQogCi11
bnNpZ25lZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246Omxlbmd0aCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPnByb3BlcnR5Q291bnQoKTsKLX0KLQotU3RyaW5n
IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6aXRlbSh1bnNpZ25lZCBpKSBjb25zdAot
ewotICAgIGlmIChpID49IG1fcHJvcGVydHlTZXQtPnByb3BlcnR5Q291bnQoKSkKLSAgICAgICAg
cmV0dXJuICIiOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc3RhdGljX2Nhc3Q8Q1NTUHJv
cGVydHlJRD4obV9wcm9wZXJ0eVNldC0+cHJvcGVydHlBdChpKS5pZCgpKSk7Ci19Ci0KLVN0cmlu
ZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNzc1RleHQoKSBjb25zdAotewotICAg
IHJldHVybiBtX3Byb3BlcnR5U2V0LT5hc1RleHQoKTsKLX0KLSAgICAKLXZvaWQgUHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBT
dHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLSNlbmRpZgot
ICAgIGVjID0gMDsKLSAgICAvLyBGSVhNRTogRGV0ZWN0IHN5bnRheCBlcnJvcnMgYW5kIHNldCBl
Yy4KLSAgICBtX3Byb3BlcnR5U2V0LT5wYXJzZURlY2xhcmF0aW9uKHRleHQsIGNvbnRleHRTdHls
ZVNoZWV0KCkpOwotCi0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotI2lmIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCi0gICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQo
KTsgICAgCi0jZW5kaWYKLX0KLQotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gUHJvcGVydHlTZXRDU1NT
dHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lKQotewotICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5h
bWUpOwotICAgIGlmICghcHJvcGVydHlJRCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IG1fcHJvcGVydHlTZXQtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7Ci19Ci0KLVN0
cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUoY29u
c3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9w
ZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wZXJ0eUlEKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmdldFByb3BlcnR5VmFsdWUo
cHJvcGVydHlJRCk7Ci19Ci0KLVN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246
OmdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAg
aW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFw
cm9wZXJ0eUlEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIG1fcHJvcGVy
dHlTZXQtPnByb3BlcnR5SXNJbXBvcnRhbnQocHJvcGVydHlJRCkgPyAiaW1wb3J0YW50IiA6ICIi
OwotfQotCi1TdHJpbmcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0
eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcGVy
dHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BlcnR5SUQp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBpbnQgc2hvcnRoYW5kSUQgPSBtX3Byb3Bl
cnR5U2V0LT5nZXRQcm9wZXJ0eVNob3J0aGFuZChwcm9wZXJ0eUlEKTsKLSAgICBpZiAoIXNob3J0
aGFuZElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5
TmFtZShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihzaG9ydGhhbmRJRCkpOwotfQotCi1ib29s
IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVy
dHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcGVydHlJRCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5pc1Byb3BlcnR5SW1wbGljaXQocHJv
cGVydHlJRCk7Ci19Ci0KLXZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQ
cm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
Y29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0jaWYgRU5BQkxF
KE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0
YXRpb25TY29wZSh0aGlzKTsKLSNlbmRpZgotICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVy
dHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcGVydHlJRCkKLSAgICAgICAgcmV0dXJu
OwotICAgIGJvb2wgaW1wb3J0YW50ID0gcHJpb3JpdHkuZmluZCgiaW1wb3J0YW50IiwgMCwgZmFs
c2UpICE9IG5vdEZvdW5kOwotICAgIGVjID0gMDsKLSAgICBib29sIGNoYW5nZWQgPSBtX3Byb3Bl
cnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBjb250ZXh0
U3R5bGVTaGVldCgpKTsKLSAgICBpZiAoY2hhbmdlZCkgewotICAgICAgICAvLyBDU1MgRE9NIHJl
cXVpcmVzIHJhaXNpbmcgU1lOVEFYX0VSUiBvZiBwYXJzaW5nIGZhaWxlZCwgYnV0IHRoaXMgaXMg
dG9vIGRhbmdlcm91cyBmb3IgY29tcGF0aWJpbGl0eSwKLSAgICAgICAgLy8gc2VlIDxodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk2Pi4KLSAgICAgICAgc2V0TmVlZHNT
dHlsZVJlY2FsYygpOwotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgICAgIG11
dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYKLSAgICB9Ci19Ci0K
LVN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNv
bnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSNpZiBFTkFC
TEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBt
dXRhdGlvblNjb3BlKHRoaXMpOwotI2VuZGlmCi0gICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9w
ZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wZXJ0eUlEKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgZWMgPSAwOwotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgYm9vbCBj
aGFuZ2VzID0gbV9wcm9wZXJ0eVNldC0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCwgJnJlc3Vs
dCk7Ci0gICAgaWYgKGNoYW5nZXMpIHsKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwot
I2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgICAgIG11dGF0aW9uU2NvcGUuZW5x
dWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
OjpnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQot
eyAKLSAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0
eUlEKTsgCi19Ci0KLVN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFBy
b3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCi17IAotICAgIHJl
dHVybiBtX3Byb3BlcnR5U2V0LT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOyAKLX0KLQot
dm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJuYWwo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9y
dGFudCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17IAotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZF
UlMpCi0gICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7
Ci0jZW5kaWYKLSAgICBlYyA9IDA7Ci0gICAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wZXJ0eVNldC0+
c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hl
ZXQoKSk7Ci0gICAgaWYgKGNoYW5nZWQpIHsKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygp
OwotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgICAgIG11dGF0aW9uU2NvcGUu
ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYKLSAgICB9Ci19Ci0KLUNTU1N0eWxlU2hl
ZXQqIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6cGFyZW50U3R5bGVTaGVldCgpIGNv
bnN0Ci17IAotICAgIHJldHVybiBjb250ZXh0U3R5bGVTaGVldCgpOyAKLX0KLQotUGFzc1JlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNvcHko
KSBjb25zdAotewotICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5jb3B5KCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpt
YWtlTXV0YWJsZSgpCi17Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlTZXQ7Ci19Ci0KLWJvb2wgUHJv
cGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NT
UHJvcGVydHkqIHByb3BlcnR5KSBjb25zdAotewotICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5w
cm9wZXJ0eU1hdGNoZXMocHJvcGVydHkpOwotfQotCi12b2lkIFJ1bGVDU1NTdHlsZURlY2xhcmF0
aW9uOjpzZXROZWVkc1N0eWxlUmVjYWxjKCkKLXsKLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5
bGVTaGVldCA9IGNvbnRleHRTdHlsZVNoZWV0KCkpIHsKLSAgICAgICAgaWYgKERvY3VtZW50KiBk
b2N1bWVudCA9IHN0eWxlU2hlZXQtPmZpbmREb2N1bWVudCgpKQotICAgICAgICAgICAgZG9jdW1l
bnQtPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOwotICAgIH0KLX0KLSAg
ICAKLUNTU1N0eWxlU2hlZXQqIFJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpjb250ZXh0U3R5bGVT
aGVldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFyZW50UnVsZSA/IG1fcGFyZW50UnVsZS0+
cGFyZW50U3R5bGVTaGVldCgpIDogMDsKLX0KLQotdm9pZCBJbmxpbmVDU1NTdHlsZURlY2xhcmF0
aW9uOjpzZXROZWVkc1N0eWxlUmVjYWxjKCkKLXsKLSAgICBpZiAoIW1fcGFyZW50RWxlbWVudCkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fcGFyZW50RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2Fs
YyhJbmxpbmVTdHlsZUNoYW5nZSk7Ci0gICAgbV9wYXJlbnRFbGVtZW50LT5pbnZhbGlkYXRlU3R5
bGVBdHRyaWJ1dGUoKTsKLSAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUodGhpcykuZGlk
SW52YWxpZGF0ZVN0eWxlQXR0cigpOwotICAgIHJldHVybjsKLX0KLQotQ1NTU3R5bGVTaGVldCog
SW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29udGV4dFN0eWxlU2hlZXQoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3BhcmVudEVsZW1lbnQgPyBtX3BhcmVudEVsZW1lbnQtPmRvY3VtZW50KCkt
PmVsZW1lbnRTaGVldCgpIDogMDsKLX0KLQogY2xhc3MgU2FtZVNpemVBc1N0eWxlUHJvcGVydHlT
ZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxTYW1lU2l6ZUFzU3R5bGVQcm9wZXJ0eVNldD4gewogICAg
IFZlY3RvcjxDU1NQcm9wZXJ0eSwgND4gcHJvcGVydGllczsKICAgICB1bnNpZ25lZCBiaXRmaWVs
ZDsK
</data>
<flag name="commit-queue"
          id="130268"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>