<?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>180918</bug_id>
          
          <creation_ts>2017-12-17 11:50:50 -0800</creation_ts>
          <short_desc>Move render tree updating related files under rendering/updating/</short_desc>
          <delta_ts>2017-12-17 13:12:36 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1382623</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-12-17 11:50:50 -0800</bug_when>
    <thetext>Put them into one place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382626</commentid>
    <comment_count>1</comment_count>
      <attachid>329616</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-12-17 11:57:28 -0800</bug_when>
    <thetext>Created attachment 329616
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382640</commentid>
    <comment_count>2</comment_count>
      <attachid>329616</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-17 13:11:31 -0800</bug_when>
    <thetext>Comment on attachment 329616
patch

Clearing flags on attachment: 329616

Committed r226013: &lt;https://trac.webkit.org/changeset/226013&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382641</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-17 13:11:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382643</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-17 13:12:36 -0800</bug_when>
    <thetext>&lt;rdar://problem/36096522&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329616</attachid>
            <date>2017-12-17 11:57:28 -0800</date>
            <delta_ts>2017-12-17 13:11:31 -0800</delta_ts>
            <desc>patch</desc>
            <filename>render-updating-dir.patch</filename>
            <type>text/plain</type>
            <size>205445</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNjAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEyLTE3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHJlbmRlciB0cmVlIHVw
ZGF0aW5nIHJlbGF0ZWQgZmlsZXMgdW5kZXIgcmVuZGVyaW5nL3VwZGF0aW5nLworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwOTE4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmc6IEFkZGVkLgorICAgICAgICAqIHJlbmRl
cmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAuCisgICAgICAgICogcmVuZGVy
aW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQnVpbGRlci5oLgorICAgICAgICAqIHJlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlUG9zaXRpb24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uY3BwLgorICAgICAgICAqIHJlbmRlcmluZy91cGRh
dGluZy9SZW5kZXJUcmVlUG9zaXRpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3R5
bGUvUmVuZGVyVHJlZVBvc2l0aW9uLmguCisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1Jl
bmRlclRyZWVVcGRhdGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVu
ZGVyVHJlZVVwZGF0ZXIuY3BwLgorICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJU
cmVlVXBkYXRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVl
VXBkYXRlci5oLgorICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRl
ckZpcnN0TGV0dGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVy
VHJlZVVwZGF0ZXJGaXJzdExldHRlci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5n
L1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oLgorICAgICAgICAqIHJlbmRl
cmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENv
bnRlbnQuY3BwLgorICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRl
ckdlbmVyYXRlZENvbnRlbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVu
ZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmguCisgICAgICAgICogcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmguCisgICAg
ICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlck11bHRp
Q29sdW1uLmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0
ZXJNdWx0aUNvbHVtbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJU
cmVlVXBkYXRlck11bHRpQ29sdW1uLmguCisgICAgICAgICogc3R5bGUvUmVuZGVyVHJlZVBvc2l0
aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdHlsZS9SZW5kZXJUcmVlVXBkYXRlci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdHlsZS9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzdHlsZS9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmg6IFJlbW92ZWQuCisgICAg
ICAgICogc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdHlsZS9SZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdHlsZS9SZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmg6IFJl
bW92ZWQuCisgICAgICAgICogc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5o
OiBSZW1vdmVkLgorCiAyMDE3LTEyLTE3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgogCiAgICAgICAgIFtKU0NdW1dlYkNvcmVdW0NTU0pJVF0gUmVtb3ZlIFZNIHJlZmVy
ZW5jZSBpbiBDU1NKSVQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjYwMDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIy
LDYgKzEyMiw3IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJD
T1JFX0RJUn0vcmVuZGVyaW5nL3NoYXBlcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5n
L3N0eWxlIgogICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvc3ZnIgorICAgICIke1dFQkNP
UkVfRElSfS9yZW5kZXJpbmcvdXBkYXRpbmciCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3JlcGxheSIK
ICAgICAiJHtXRUJDT1JFX0RJUn0vc3RvcmFnZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vc3R5bGUi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI2MDA5KQorKysgU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4NDQsNyArMTg0NCw2IEBAIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCiByZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5j
cHAKIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcAotcmVuZGVyaW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcAogcmVuZGVyaW5nL1JlbmRlclZU
VEN1ZS5jcHAKIHJlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKIHJlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcApAQCAtMTk4MCw2ICsxOTc5LDE0IEBAIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3Mu
Y3BwCiByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKIHJlbmRlcmluZy9z
dmcvU1ZHVGV4dFF1ZXJ5LmNwcAogCityZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXIuY3BwCityZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVBvc2l0aW9uLmNwcAorcmVuZGVy
aW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcAorcmVuZGVyaW5nL3VwZGF0aW5nL1Jl
bmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCityZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVy
VHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcAorcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwCityZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVw
ZGF0ZXJNdWx0aUNvbHVtbi5jcHAKKwogcmVwbGF5L1VzZXJJbnB1dEJyaWRnZS5jcHAKIAogc3Rv
cmFnZS9TdG9yYWdlLmNwcApAQCAtMTk5MiwxMiArMTk5OSw2IEBAIHN0eWxlL0F0dHJpYnV0ZUNo
YW5nZUludmFsaWRhdGlvbi5jcHAKIHN0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAog
c3R5bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCiBzdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUu
Y3BwCi1zdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uY3BwCi1zdHlsZS9SZW5kZXJUcmVlVXBkYXRl
ci5jcHAKLXN0eWxlL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCi1zdHlsZS9SZW5k
ZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuY3BwCi1zdHlsZS9SZW5kZXJUcmVlVXBkYXRl
ckxpc3RJdGVtLmNwcAotc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5jcHAKIHN0
eWxlL1N0eWxlQ2hhbmdlLmNwcAogc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAKIHN0
eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjYwMDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTE2ODMsNyArMTY4Myw2IEBACiAJCTU4MDM3MTY0MUE2NkYxRDMwMEJBRjUxOSAvKiBM
YXllckZyYWdtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1ODAzNzE2MzFBNjZGMUQzMDBCQUY1MTkgLyogTGF5ZXJGcmFnbWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU4MjRBQkEzMUFFODEx
MTYwMDkwNzRCNyAvKiBSdWJ5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTgyNEFCQTExQUU4MTExNjAwOTA3NEI3IC8qIFJ1YnlFbGVtZW50
LmggKi87IH07CiAJCTU4MjRBQkE3MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4dEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4MjRBQkE1
MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4dEVsZW1lbnQuaCAqLzsgfTsKLQkJNTgyNEFCQUIx
QUU4NDlDODAwOTA3NEI3IC8qIFJlbmRlclRyZWVQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgyNEFCQTkxQUU4NDlDODAwOTA3NEI3IC8q
IFJlbmRlclRyZWVQb3NpdGlvbi5oICovOyB9OwogCQk1ODJDQjA1MzFBNzhBMTRCMDBBRkZDQzQg
LyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODJDQjA1MjFBNzhBMTRCMDBBRkZDQzQg
LyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmggKi87IH07CiAJCTU4MkRF
MzI1MUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4MkRFMzIzMUMzMEM4NTQwMEJF
MDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCAqLzsgfTsKIAkJNTg1RDZFMDQxQTFBNzky
RTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4NUQ2RTAyMUExQTc5MkUwMEZBNEYx
MiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggKi87IH07CkBAIC00NTYzLDcgKzQ1
NjIsNiBAQAogCQlFNDRCNEJCNDE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDRCNEJCMjE0
MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmggKi87IH07CiAJCUU0NEZBMTg1MUJD
QTZCNUEwMDkxQjZFRiAvKiBDb21wb3NlZFRyZWVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0RkExODQxQkNBNkI1QTAwOTFCNkVGIC8q
IENvbXBvc2VkVHJlZUl0ZXJhdG9yLmggKi87IH07CiAJCUU0NTMyMkFDMTQwQ0UyNjcwMDVBMEY5
MiAvKiBTZWxlY3RvclF1ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDUzMjJBQTE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5oICov
OyB9OwotCQlFNDYxODAyOTFDOEEwNkNEMDAyNkMwMkMgLyogUmVuZGVyVHJlZVVwZGF0ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjE4MDI4MUM4
QTA2Q0QwMDI2QzAyQyAvKiBSZW5kZXJUcmVlVXBkYXRlci5oICovOyB9OwogCQlFNDYxODAyRDFD
OEREMjkwMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjE4MDJDMUM4REQyOTAwMDI2QzAyQyAvKiBTdHls
ZVJlbGF0aW9ucy5oICovOyB9OwogCQlFNDYxRDY1RjFCQjBDODBEMDBDQjU2NDUgLyogU3R5bGVT
Y29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2
MUQ2NUUxQkIwQzgwRDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDYyQTRBMTExM0U3MUJFMDA0QTQyMjAg
LyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ1NzUsMTIgKzQ1
NzMsMTYgQEAKIAkJRTQ3NzhCODAxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0Nzc4QjdFMTE1
QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmggKi87IH07CiAJCUU0N0EzQUM2MUM1RUFD
OUQwMENDQkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QTNBQzQxQzVFQUM3OTAwQ0NCRkE3IC8qIFN0
eWxlU2hhcmluZ1Jlc29sdmVyLmggKi87IH07CiAJCUU0N0I0QkU4MEU3MTI0MTYwMDAzODg1NCAv
KiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ3QjRCRTYwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNl
SGFuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRTQ3QzM5MkQxRkU2RTBGMzAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyQTFGRTZFMERF
MDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXIuaCAqLzsgfTsKKwkJRTQ3QzM5MkUxRkU2RTBG
NzAwQkJCQzZCIC8qIFJlbmRlclRyZWVQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QzM5MjQxRkU2RTBEQjAwQkJCQzZCIC8qIFJlbmRl
clRyZWVQb3NpdGlvbi5oICovOyB9OworCQlFNDdDMzkyRjFGRTZFMEY5MDBCQkJDNkIgLyogUmVu
ZGVyVHJlZVVwZGF0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0N0MzOTJDMUZFNkUwREYwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlci5oICov
OyB9OworCQlFNDdDMzkzMDFGRTZFMEZEMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJGaXJz
dExldHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ3QzM5MjYxRkU2RTBEQzAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIu
aCAqLzsgfTsKKwkJRTQ3QzM5MzExRkU2RTEwMjAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVy
R2VuZXJhdGVkQ29udGVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ3QzM5MjUxRkU2RTBEQjAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyR2Vu
ZXJhdGVkQ29udGVudC5oICovOyB9OworCQlFNDdDMzkzMjFGRTZFMTA1MDBCQkJDNkIgLyogUmVu
ZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ3QzM5MjgxRkU2RTBERDAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRh
dGVyTGlzdEl0ZW0uaCAqLzsgfTsKKwkJRTQ3QzM5MzMxRkU2RTEwODAwQkJCQzZCIC8qIFJlbmRl
clRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0N0MzOTI3MUZFNkUwREMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBk
YXRlck11bHRpQ29sdW1uLmggKi87IH07CiAJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBF
eHRlbnNpb25TdHlsZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ3RTI3NjQxNjAzNkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hl
ZXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RTQ4MTM3QjkxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFsaWRpdHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODEzN0I4MURCM0I1MjYwMDVDNTlC
RiAvKiBTdHlsZVZhbGlkaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlv
dXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0
NEExMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTQ4RTMzMkMxRjQ3MDM3QzAwQkFC
MEVGIC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODI4NDA5MUY0NDU5NTYwMDg2M0FDMyAvKiBS
ZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmggKi87IH07Ci0JCUU0OEUzMzJFMUY0NzAzODAw
MEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDhFMzMyODFGNDZDOTdGMDBCQUIwRUYgLyog
UmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oICovOyB9OwotCQlFNDhFMzMzMjFGNDc0MzczMDBC
QUIwRUYgLyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDhFMzMzMDFGNDc0MzY3MDBCQUIw
RUYgLyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggKi87IH07CiAJCUU0OTE2
RkY3MTk1REY2QTAwMDVBQjM0OSAvKiBMYXllckZsdXNoVGhyb3R0bGVTdGF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5MTZGRjYxOTVERjZBMDAw
NUFCMzQ5IC8qIExheWVyRmx1c2hUaHJvdHRsZVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5NDZFQUYxNTZFNjRERDAwRDMyOTdGIC8q
IFN0eWxlUnVsZUltcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ5NDZFQUQxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OUJEOUZB
MTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NWYWx1ZVBvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OUJEOUY5MTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NW
YWx1ZVBvb2wuaCAqLzsgfTsKQEAgLTQ2MTUsNyArNDYxNyw2IEBACiAJCUU0RTlCMTE5MTgxMDkx
NkYwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTlCMTE4MTgxMDkxNkYwMDNBQ0NERiAv
KiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCAqLzsgfTsKIAkJRTRFOUIxMUQxODE0NTY5QzAw
M0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTlCMTFDMTgxNDU2OUMwMDNBQ0NERiAvKiBT
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi87IH07CiAJCUU0RjlFRUYzMTU2REEwMDcwMEQy
M0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNoZWV0
Q29udGVudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlFNEZDMDA5QjFGRTAwQjkwMDA2QTA3M0UgLyogUmVuZGVyVHJlZUJ1aWxkZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RkMwMDlBMUZFMDBC
OEYwMDZBMDczRSAvKiBSZW5kZXJUcmVlQnVpbGRlci5oICovOyB9OwogCQlFNUJBN0Q2MzE1MTQz
N0NBMDBGRTFFM0YgLyogTGVuZ3RoRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNUJBN0Q2MjE1MTQzN0NBMDBGRTFFM0YgLyogTGVuZ3Ro
RnVuY3Rpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRUJGNTEyMUMxNjk2NDk2QzAwNTZCRDI1IC8qIEpTVHlwZUNvbnZlcnNpb25zLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCRjUxMjFBMTY5
NjQ5NkMwMDU2QkQyNSAvKiBKU1R5cGVDb252ZXJzaW9ucy5jcHAgKi87IH07CiAJCUVCRjUxMjFE
MTY5NjQ5NkMwMDU2QkQyNSAvKiBKU1R5cGVDb252ZXJzaW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUJGNTEyMUIxNjk2NDk2QzAwNTZCRDI1IC8q
IEpTVHlwZUNvbnZlcnNpb25zLmggKi87IH07CkBAIC04MjM5LDggKzgyNDAsNiBAQAogCQk1ODI0
QUJBMTFBRTgxMTE2MDA5MDc0QjcgLyogUnVieUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUnVieUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTgyNEFCQTQxQUU4MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdWJ5VGV4dEVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1ODI0QUJBNTFBRTgxMzg0MDA5MDc0QjcgLyogUnVi
eVRleHRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1YnlUZXh0
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1ODI0QUJBODFBRTg0OUM4
MDA5MDc0QjcgLyogUmVuZGVyVHJlZVBvc2l0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlclRyZWVQb3NpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTU4MjRBQkE5MUFFODQ5QzgwMDkwNzRCNyAvKiBSZW5kZXJUcmVlUG9zaXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZVBvc2l0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4MkNCMDUyMUE3OEExNEIwMEFGRkND
NCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4MkNCMDU0MUE3OEEyQjIwMEFGRkND
NCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0
ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTgyREUzMjIxQzMwQzg1
NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFpbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTM4MzQsOCArMTM4MzMsNiBAQAogCQlFNDE5MDQxRTFDQzY0
ODZCMDBDMzVGNUQgLyogRm9udFNlbGVjdG9yQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvbnRTZWxlY3RvckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDFFQTAzODExOTgzNkRCMDA3MTBCQzUgLyogQ1NTUHJvcGVydHlOYW1lcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQcm9wZXJ0eU5hbWVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQxRUEwMzkxMTk4Mzc0OTAwNzEwQkM1
IC8qIENTU1ZhbHVlS2V5d29yZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ1NTVmFsdWVLZXl3b3Jkcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUU0MUZBOUI3MUY1NzU4RkQwMDMzODU4QSAvKiBSZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDFGQTlCQTFGNTc1OTBBMDAzMzg1OEEg
LyogUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJU
cmVlVXBkYXRlck11bHRpQ29sdW1uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
MjRBMzlEMTMzMERGMDEwMENGNkRDOSAvKiBMZWdhY3lUaWxlR3JpZFRpbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5VGlsZUdyaWRUaWxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0MjRBMzlGMTMzMERGMUUwMENGNkRDOSAvKiBMZWdhY3lUaWxl
R3JpZFRpbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMZWdh
Y3lUaWxlR3JpZFRpbGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MjVBNDk5
MTgyOTJCODQwMDIwQ0ZDRiAvKiBDb2xsZWN0aW9uSW5kZXhDYWNoZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb2xsZWN0aW9uSW5kZXhDYWNoZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTM4ODcsOCArMTM4ODQsNiBAQAogCQlFNDUzOTAzNDBFQUZENjM3
MDAzNjk1QzggLyogU2Nyb2xsVmlld0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFNjcm9sbFZpZXdJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXaWRnZXRJT1MubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0NTM5MEFEMEVBRkY0QjUwMDM2OTVDOCAvKiBTeXN0ZW1NZW1vcnlJ
T1MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lzdGVtTWVtb3J5
SU9TLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ2MTgwMjgxQzhBMDZDRDAw
MjZDMDJDIC8qIFJlbmRlclRyZWVVcGRhdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUU0NjE4MDJBMUM4QTA2RDkwMDI2QzAyQyAvKiBSZW5kZXJUcmVlVXBkYXRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NjE4MDJDMUM4REQyOTAwMDI2QzAyQyAvKiBT
dHlsZVJlbGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJl
bGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYxODAyRTFDOERENEQy
MDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3R5bGVSZWxhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNDYxRDY1QzFCQjBDN0YwMDBDQjU2NDUgLyogU3R5bGVTY29wZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEzOTA1LDE3ICsxMzkwMCwyNSBAQAogCQlFNDdBOTdDRjE2MzA1
OUZDMDA1RENEOTkgLyogU3R5bGVJbnZhbGlkYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHlsZUludmFsaWRhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0N0I0QkU2MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdCNEJFNzBFNzEyNDE2MDAwMzg4NTQgLyog
Q2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFNDdDMzkxRjFGRTZFMEQ4MDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDdDMzkyMDFGRTZFMEQ5MDBCQkJDNkIg
LyogUmVuZGVyVHJlZUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVuZGVyVHJlZUJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNDdDMzkyMTFGRTZFMERBMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlVXBk
YXRlckZpcnN0TGV0dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3QzM5
MjIxRkU2RTBEQTAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRl
ckdlbmVyYXRlZENvbnRlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDdD
MzkyMzFGRTZFMERBMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRlck11
bHRpQ29sdW1uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3QzM5MjQxRkU2
RTBEQjAwQkJCQzZCIC8qIFJlbmRlclRyZWVQb3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlUG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTQ3QzM5MjUxRkU2RTBEQjAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyR2Vu
ZXJhdGVkQ29udGVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJU
cmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTQ3QzM5MjYxRkU2RTBEQzAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXJG
aXJzdExldHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDdDMzkyNzFGRTZF
MERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0N0MzOTI4MUZFNkUwREQwMEJCQkM2QiAvKiBS
ZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTQ3QzM5MjkxRkU2RTBERTAwQkJCQzZCIC8qIFJlbmRlclRyZWVQb3NpdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlUG9zaXRpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDdDMzkyQTFGRTZFMERFMDBCQkJD
NkIgLyogUmVuZGVyVHJlZUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyVHJlZUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3
QzM5MkIxRkU2RTBERjAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXJMaXN0
SXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0N0MzOTJDMUZFNkUwREYw
MEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uU3R5bGVTaGVldHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIEV4
dGVuc2lvblN0eWxlU2hlZXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ4MTM3QjgxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFsaWRpdHkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVWYWxpZGl0eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlFNDgyODQwNjFGNDQ1OTRCMDA4NjNBQzMgLyogUmVuZGVyVHJlZVVwZGF0
ZXJGaXJzdExldHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRlckZp
cnN0TGV0dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ4Mjg0MDkxRjQ0
NTk1NjAwODYzQUMzIC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4OTQ0QTExODBCNTdEODAwRjE2
NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2ltcGxlTGluZUxheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDhF
MzMyODFGNDZDOTdGMDBCQUIwRUYgLyogUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0OEUzMzJBMUY0NkM5ODAwMEJBQjBFRiAv
KiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlFNDhFMzMyRjFGNDc0MzY1MDBCQUIwRUYgLyogUmVuZGVyVHJlZVVw
ZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUU0OEUzMzMwMUY0NzQzNjcwMEJBQjBFRiAvKiBSZW5kZXJUcmVl
VXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0OTE2RkY2MTk1REY2QTAwMDVBQjM0OSAvKiBMYXllckZsdXNoVGhyb3R0
bGVTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXllckZsdXNoVGhy
b3R0bGVTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDk0NkVBQzE1NkU2
NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN0eWxlUnVsZUltcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0OTQ2RUFEMTU2RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSdWxlSW1wb3J0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzk5NCw4ICsxMzk5Nyw2IEBACiAJCUU0RTlCMTFD
MTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRGOUVFRjAxNTZEODRDNDAwRDIzRTdFIC8qIFN0
eWxlU2hlZXRDb250ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdHlsZVNoZWV0Q29udGVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NEY5RUVGMTE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlU2hlZXRDb250ZW50cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlFNEZDMDA5NzFGRTAwQjgzMDA2QTA3M0UgLyogUmVuZGVyVHJl
ZUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
VHJlZUJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNEZDMDA5QTFG
RTAwQjhGMDA2QTA3M0UgLyogUmVuZGVyVHJlZUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTUxQTgxREUxNzI5OEQ3NzAwQkZDQTYxIC8qIEpTUGVyZm9ybWFuY2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQZXJmb3JtYW5jZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU1MjZBRjNFMTcyN0Y4RjIwMEU0MTc4MSAvKiBQ
ZXJmb3JtYW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQZXJm
b3JtYW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU1NUY0OTc5MTUxQjg4
ODAwMEJCNjdEQiAvKiBMZW5ndGhGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTGVuZ3RoRnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTI0NDc3LDE4ICsyNDQ3OCw2IEBACiAJCQkJRTRBODE0REYxQzczMzhFQjAwQkY4
NUFDIC8qIElkQ2hhbmdlSW52YWxpZGF0aW9uLmggKi8sCiAJCQkJMUMwMTA2RkUxOTI1OTRERjAw
OEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5jcHAgKi8sCiAJCQkJMUMwMTA2RkYxOTI1OTRE
RjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5oICovLAotCQkJCTU4MjRBQkE4MUFFODQ5
QzgwMDkwNzRCNyAvKiBSZW5kZXJUcmVlUG9zaXRpb24uY3BwICovLAotCQkJCTU4MjRBQkE5MUFF
ODQ5QzgwMDkwNzRCNyAvKiBSZW5kZXJUcmVlUG9zaXRpb24uaCAqLywKLQkJCQlFNDYxODAyQTFD
OEEwNkQ5MDAyNkMwMkMgLyogUmVuZGVyVHJlZVVwZGF0ZXIuY3BwICovLAotCQkJCUU0NjE4MDI4
MUM4QTA2Q0QwMDI2QzAyQyAvKiBSZW5kZXJUcmVlVXBkYXRlci5oICovLAotCQkJCUU0ODI4NDA2
MUY0NDU5NEIwMDg2M0FDMyAvKiBSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcCAqLywK
LQkJCQlFNDgyODQwOTFGNDQ1OTU2MDA4NjNBQzMgLyogUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExl
dHRlci5oICovLAotCQkJCUU0OEUzMzJGMUY0NzQzNjUwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBk
YXRlckdlbmVyYXRlZENvbnRlbnQuY3BwICovLAotCQkJCUU0OEUzMzMwMUY0NzQzNjcwMEJBQjBF
RiAvKiBSZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaCAqLywKLQkJCQlFNDhFMzMy
QTFGNDZDOTgwMDBCQUIwRUYgLyogUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5jcHAgKi8sCi0J
CQkJRTQ4RTMzMjgxRjQ2Qzk3RjAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0u
aCAqLywKLQkJCQlFNDFGQTlCNzFGNTc1OEZEMDAzMzg1OEEgLyogUmVuZGVyVHJlZVVwZGF0ZXJN
dWx0aUNvbHVtbi5jcHAgKi8sCi0JCQkJRTQxRkE5QkExRjU3NTkwQTAwMzM4NThBIC8qIFJlbmRl
clRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uaCAqLywKIAkJCQlFNDAxRTBBNTFDM0MwQ0Y3MDBGMzRE
MTAgLyogU3R5bGVDaGFuZ2UuY3BwICovLAogCQkJCUU0MDFFMEEzMUMzQzBCODMwMEYzNEQxMCAv
KiBTdHlsZUNoYW5nZS5oICovLAogCQkJCUU0RDU4RUI2MTdCNEVEODkwMENCRENBOCAvKiBTdHls
ZUZvbnRTaXplRnVuY3Rpb25zLmNwcCAqLywKQEAgLTI0NTE1LDYgKzI0NTA0LDI3IEBACiAJCQlw
YXRoID0gc3R5bGU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlFNDdDMzkx
RTFGRTZFMDhDMDBCQkJDNkIgLyogdXBkYXRpbmcgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUU0N0MzOTIwMUZFNkUwRDkwMEJCQkM2QiAvKiBSZW5kZXJU
cmVlQnVpbGRlci5jcHAgKi8sCisJCQkJRTQ3QzM5MkExRkU2RTBERTAwQkJCQzZCIC8qIFJlbmRl
clRyZWVCdWlsZGVyLmggKi8sCisJCQkJRTQ3QzM5MjkxRkU2RTBERTAwQkJCQzZCIC8qIFJlbmRl
clRyZWVQb3NpdGlvbi5jcHAgKi8sCisJCQkJRTQ3QzM5MjQxRkU2RTBEQjAwQkJCQzZCIC8qIFJl
bmRlclRyZWVQb3NpdGlvbi5oICovLAorCQkJCUU0N0MzOTFGMUZFNkUwRDgwMEJCQkM2QiAvKiBS
ZW5kZXJUcmVlVXBkYXRlci5jcHAgKi8sCisJCQkJRTQ3QzM5MkMxRkU2RTBERjAwQkJCQzZCIC8q
IFJlbmRlclRyZWVVcGRhdGVyLmggKi8sCisJCQkJRTQ3QzM5MjExRkU2RTBEQTAwQkJCQzZCIC8q
IFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwICovLAorCQkJCUU0N0MzOTI2MUZFNkUw
REMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmggKi8sCisJCQkJRTQ3
QzM5MjIxRkU2RTBEQTAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVu
dC5jcHAgKi8sCisJCQkJRTQ3QzM5MjUxRkU2RTBEQjAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRh
dGVyR2VuZXJhdGVkQ29udGVudC5oICovLAorCQkJCUU0N0MzOTJCMUZFNkUwREYwMEJCQkM2QiAv
KiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcCAqLywKKwkJCQlFNDdDMzkyODFGRTZFMERE
MDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oICovLAorCQkJCUU0N0MzOTIz
MUZFNkUwREEwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmNwcCAqLywK
KwkJCQlFNDdDMzkyNzFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNv
bHVtbi5oICovLAorCQkJKTsKKwkJCXBhdGggPSB1cGRhdGluZzsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCUVENTAxREM5MEIyNDlGMzkwMEFFMThEOSAvKiBtYWMgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjQ4NjQsNiArMjQ4NzQs
NyBAQAogCQkJCUZEMDhBODc5MTc1RDM5MjYwMDJDRDM2MCAvKiBzaGFwZXMgKi8sCiAJCQkJQkM4
QzhGQUEwRERDRDJGMjAwQjU5MkY0IC8qIHN0eWxlICovLAogCQkJCTA4OEMyRjc0MTIzOTAwODAw
MDNENjVDRSAvKiBzdmcgKi8sCisJCQkJRTQ3QzM5MUUxRkU2RTA4QzAwQkJCQzZCIC8qIHVwZGF0
aW5nICovLAogCQkJCUE4Q0ZGMDRCMEExNTRGMDkwMDBBNDIzNCAvKiBBdXRvVGFibGVMYXlvdXQu
Y3BwICovLAogCQkJCUE4Q0ZGMDQ5MEExNTRGMDkwMDBBNDIzNCAvKiBBdXRvVGFibGVMYXlvdXQu
aCAqLywKIAkJCQlCQ0U3ODk4QTExMjBFODAyMDA2MEVDRTUgLyogQmlkaVJ1bi5jcHAgKi8sCkBA
IC0yNTA5OSw4ICsyNTExMCw2IEBACiAJCQkJQkNFQTQ4NDkwOTdEOTMwMjAwOTRDOUU0IC8qIFJl
bmRlclRoZW1lTWFjLm1tICovLAogCQkJCTkzOTU1QTQyMDNENzI5MzIwMDg2MzVDRSAvKiBSZW5k
ZXJUcmVlQXNUZXh0LmNwcCAqLywKIAkJCQk5Mzk1NUE0MTAzRDcyOTMyMDA4NjM1Q0UgLyogUmVu
ZGVyVHJlZUFzVGV4dC5oICovLAotCQkJCUU0RkMwMDk3MUZFMDBCODMwMDZBMDczRSAvKiBSZW5k
ZXJUcmVlQnVpbGRlci5jcHAgKi8sCi0JCQkJRTRGQzAwOUExRkUwMEI4RjAwNkEwNzNFIC8qIFJl
bmRlclRyZWVCdWlsZGVyLmggKi8sCiAJCQkJRTRCNDFFMzMwQ0JGQjYwOTAwQUYyRUNFIC8qIFJl
bmRlclZpZGVvLmNwcCAqLywKIAkJCQlFNEI0MUUzNDBDQkZCNjA5MDBBRjJFQ0UgLyogUmVuZGVy
VmlkZW8uaCAqLywKIAkJCQlCQ0VBNDgyODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVmlldy5j
cHAgKi8sCkBAIC0yNjM2Miw2ICsyNjM3MSw3IEBACiAJCQkJMDc5RDA4NkIxNjJGMjFGOTAwREI4
NjU4IC8qIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwN0I3MTE2RDFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDdCNzExNkYxRDg5OUU2MzAwOUYwRkZCIC8qIENhcHR1cmVEZXZpY2VNYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDdDMzkyRDFGRTZFMEYzMDBCQkJDNkIgLyogUmVuZGVy
VHJlZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQzczNDE1MTk3Nzg5NkQwMDQ2QkZD
NSAvKiBDQVJpbmdCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTBCNjlFMDk5REYwMjcw
MDkwRDc4MSAvKiBDREFUQVNlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjRCNzE2MUUw
MEI3RTUwMEUyMzVBMiAvKiBDRE0uaCBpbiBIZWFkZXJzICovLApAQCAtMjY0NjYsNiArMjY0NzYs
NyBAQAogCQkJCTk3NDZBRjIxMTRGNERERTYwMDNFN0E3MSAvKiBDb29yZGluYXRlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJM0Y4MDIwMzUxRTlFNDdCRjAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1
cmVEZXZpY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTNGODAyMDM3MUU5RTQ3QzUwMERFQzYxRCAv
KiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ3
QzM5MkUxRkU2RTBGNzAwQkJCQzZCIC8qIFJlbmRlclRyZWVQb3NpdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDdBRkY0MjIxRUZCMTQ0OTAwQjU0NUIzIC8qIENvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2VJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEN0QzMzQ4MUM3QTE2QkYwMDA0MTI5MyAvKiBD
b3JlVmlkZW9Tb2Z0TGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYyRjEyOUUxOEMxNTc2RjAw
NUM1NEFGIC8qIENvdW50ZWRVc2VyQWN0aXZpdHkuaCBpbiBIZWFkZXJzICovLApAQCAtMjY4Mjcs
NiArMjY4MzgsNyBAQAogCQkJCUE3Q0ZCM0QyMEI3RUQxMEEwMDcwQzMyRCAvKiBEcmFnSW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjVFNEQ5MUU1Njc3QTkwMDRBMUYwMSAvKiBEcmFnSXRl
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODFGNjVGRjYxMzc4OEZBQTAwRkY2RjJEIC8qIERyYWdT
dGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ3QzM5MzIxRkU2RTEwNTAwQkJCQzZCIC8qIFJl
bmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQkE2NkYxMTc0
MkJEODYwMEMyMDI1MSAvKiBEeW5hbWljTGlua2VySW50ZXJwb3NpbmcuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZENkVEMkM4MTM2QjhFNjYwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUZENTM3MzU3MTM3QjY1M0IwMDAwOERDRSAvKiBEeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWwuaCBpbiBIZWFkZXJzICovLApAQCAtMjcyMjMsNiArMjcyMzUsNyBAQAog
CQkJCTk3N0IzODc4MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MVG9rZW5pemVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwNzA3NTY4QzE0MjI2MkQ2MDA0MTQxNjEgLyogSFRNTFRyYWNrRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM3MjYxMjI4NzIxNzAwQjgxRkY4IC8qIEhUTUxUcmVl
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ3QzM5MzAxRkU2RTBGRDAwQkJCQzZCIC8q
IFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3
OUYyMEExOTE2REYwMEE4RUY1RiAvKiBIVE1MVUxpc3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBRDQ5OTE0MzE4RjA4MTUxMDBCRjAwOTIgLyogSFRNTFVua25vd25FbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDQ2MTNBQjBDRDYzMzEwMDBGQURBNzUgLyogSFRNTFZpZGVvRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODUwOCw2ICsyODUyMSw3IEBACiAJCQkJMUE1NjlE
MEIwRDdFMkI4MjAwN0MzOTgzIC8qIE5QX2pzb2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTkyN0ZEMjE0MTZBMTVCMDAzQTgzQzggLyogbnBhcGkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
MjE5QjNCMERDQTg3QUIwMDQwRTNBMCAvKiBucGZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRTQ3QzM5MkYxRkU2RTBGOTAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQTkyN0ZEMzE0MTZBMTVCMDAzQTgzQzggLyogbnBydW50aW1lLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTU2OUQwRjBEN0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX2lt
cGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDEwMEQ3RTJCODIwMDdDMzk4MyAvKiBucHJ1
bnRpbWVfaW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMjg2NjEsNiArMjg2NzUsNyBAQAog
CQkJCTA3MEUwOTE5MTg3NUVFRkMwMDNBMUQzQyAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDdGOTQ0MTYxODY0RDA0NjAwNUQzMUNCIC8qIFBsYXRmb3JtTWVk
aWFTZXNzaW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFCRjcwMTAwRkU4NkY2MTAw
NUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlFNDdDMzkzMzFGRTZFMTA4MDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVt
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3NjkwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRm
b3JtTW91c2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU5ODkwNTgxNEU5QzI5OTAwRThE
MThCIC8qIFBsYXRmb3JtUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQzAxRDcw
QzI3NEVCNDAwOUY0RUM5IC8qIFBsYXRmb3JtU2NyZWVuLmggaW4gSGVhZGVycyAqLywKQEAgLTI4
NzQ0LDcgKzI4NzU5LDYgQEAKIAkJCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFi
bGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNkU2
RkU5MUJCRDEyRTUwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MTI5QzlBOTFGNTlDNTZCMDA5RDc0MDMgLyogUmVhZGFibGVTdHJlYW1EZWZh
dWx0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTRGQzAwOUIxRkUwMEI5MDAwNkEw
NzNFIC8qIFJlbmRlclRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFODFC
QkQxMkRGMDAwQTNGNjQgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDEyOUM5QUYxRjU5Q0Y1QjAwOUQ3NDAzIC8qIFJlYWRhYmxlU3RyZWFt
U2luay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEyOUM5QUIxRjU5QzU3MzAwOUQ3NDAzIC8qIFJl
YWRhYmxlU3RyZWFtU291cmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTI4OTA5LDExICsyODkyMyw2
IEBACiAJCQkJRkVEMTNENTIwQ0VBOTQ5NzAwRDg5NDY2IC8qIFJlbmRlclRoZW1lSU9TLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0VBNDg4NzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVN
YWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OThDMDgyNDVFNTkwMDFFOUFCQyAvKiBSZW5k
ZXJUcmVlQXNUZXh0LmggaW4gSGVhZGVycyAqLywKLQkJCQk1ODI0QUJBQjFBRTg0OUM4MDA5MDc0
QjcgLyogUmVuZGVyVHJlZVBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDYxODAyOTFD
OEEwNkNEMDAyNkMwMkMgLyogUmVuZGVyVHJlZVVwZGF0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUU0OEUzMzJDMUY0NzAzN0MwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVy
LmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDhFMzMzMjFGNDc0MzczMDBCQUIwRUYgLyogUmVuZGVy
VHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDhFMzMy
RTFGNDcwMzgwMDBCQUIwRUYgLyogUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ0NjE0NTIwQ0Q2OEEzNTAwRkFEQTc1IC8qIFJlbmRlclZpZGVvLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0VBNDg2ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVmlldy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkUyMDUwN0UxOEE0NThDMjAwODA2NDdFIC8qIFJlbmRlclZU
VEN1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTE5Niw2ICsyOTIwNSw3IEBACiAJCQkJOTdCQzZB
M0MxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTEVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTIy
NDY0QTBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTdFNDc0RTFGMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUU0N0MzOTMxMUZFNkUxMDIwMEJCQkM2QiAvKiBSZW5kZXJUcmVl
VXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNDc0RTFFMTI0
OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUI1QTY4NDIyMEZGQUJFOTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTJCREI0QjFDNDU2RkZBMDA2NDk0REYgLyogU1FMaXRlSURC
QmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcAkocmV2aXNpb24gMjI2MDA5KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyLmgiCi0KLSNpbmNsdWRlICJSZW5kZXJFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVyUnVieS5oIgotI2luY2x1ZGUgIlJlbmRlclJ1YnlCYXNlLmgiCi0j
aW5jbHVkZSAiUmVuZGVyUnVieVJ1bi5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNs
dWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRl
clRyZWVCdWlsZGVyKiBSZW5kZXJUcmVlQnVpbGRlcjo6c19jdXJyZW50OwotCi1SZW5kZXJUcmVl
QnVpbGRlcjo6UmVuZGVyVHJlZUJ1aWxkZXIoUmVuZGVyVmlldyYgdmlldykKLSAgICA6IG1fdmll
dyh2aWV3KQotewotICAgIFJFTEVBU0VfQVNTRVJUKCFzX2N1cnJlbnQgfHwgJm1fdmlldyAhPSAm
c19jdXJyZW50LT5tX3ZpZXcpOwotICAgIG1fcHJldmlvdXMgPSBzX2N1cnJlbnQ7Ci0gICAgc19j
dXJyZW50ID0gdGhpczsKLX0KLQotUmVuZGVyVHJlZUJ1aWxkZXI6On5SZW5kZXJUcmVlQnVpbGRl
cigpCi17Ci0gICAgc19jdXJyZW50ID0gbV9wcmV2aW91czsKLX0KLQotdm9pZCBSZW5kZXJUcmVl
QnVpbGRlcjo6aW5zZXJ0Q2hpbGQoUmVuZGVyRWxlbWVudCYgcGFyZW50LCBSZW5kZXJQdHI8UmVu
ZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKLXsKLSAgICBBU1NF
UlQoJnBhcmVudC52aWV3KCkgPT0gJm1fdmlldyk7Ci0KLSAgICBpZiAoaXM8UmVuZGVyVGV4dD4o
YmVmb3JlQ2hpbGQpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3cmFwcGVySW5saW5lID0gZG93bmNh
c3Q8UmVuZGVyVGV4dD4oKmJlZm9yZUNoaWxkKS5pbmxpbmVXcmFwcGVyRm9yRGlzcGxheUNvbnRl
bnRzKCkpCi0gICAgICAgICAgICBiZWZvcmVDaGlsZCA9IHdyYXBwZXJJbmxpbmU7Ci0gICAgfQot
Ci0gICAgaWYgKGlzPFJlbmRlclJ1YnlSdW4+KHBhcmVudCkpIHsKLSAgICAgICAgcnVieVJ1bklu
c2VydENoaWxkKGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+KHBhcmVudCksIFdURk1vdmUoY2hpbGQp
LCBiZWZvcmVDaGlsZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwYXJlbnQuYWRk
Q2hpbGQoKnRoaXMsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyVHJlZUJ1aWxkZXI6Omluc2VydENoaWxkKFJlbmRlclRyZWVQb3NpdGlvbiYgcG9zaXRpb24s
IFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkKQotewotICAgIGluc2VydENoaWxkKHBvc2l0
aW9uLnBhcmVudCgpLCBXVEZNb3ZlKGNoaWxkKSwgcG9zaXRpb24ubmV4dFNpYmxpbmcoKSk7Ci19
Ci0KLXZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OnJ1YnlSdW5JbnNlcnRDaGlsZChSZW5kZXJSdWJ5
UnVuJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3Qq
IGJlZm9yZUNoaWxkKQotewotICAgIGlmIChjaGlsZC0+aXNSdWJ5VGV4dCgpKSB7Ci0gICAgICAg
IGlmICghYmVmb3JlQ2hpbGQpIHsKLSAgICAgICAgICAgIC8vIFJlbmRlclJ1YnkgaGFzIGFscmVh
ZHkgYXNjZXJ0YWluZWQgdGhhdCB3ZSBjYW4gYWRkIHRoZSBjaGlsZCBoZXJlLgotICAgICAgICAg
ICAgQVNTRVJUKCFwYXJlbnQuaGFzUnVieVRleHQoKSk7Ci0gICAgICAgICAgICAvLyBwcmVwZW5k
IHJ1YnkgdGV4dHMgYXMgZmlyc3QgY2hpbGQKLSAgICAgICAgICAgIHBhcmVudC5hZGRDaGlsZCgq
dGhpcywgV1RGTW92ZShjaGlsZCksIHBhcmVudC5maXJzdENoaWxkKCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChiZWZvcmVDaGlsZC0+aXNSdWJ5VGV4dCgp
KSB7Ci0gICAgICAgICAgICAvLyBOZXcgdGV4dCBpcyBpbnNlcnRlZCBqdXN0IGJlZm9yZSBhbm90
aGVyLgotICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHRoZSBuZXcgdGV4dCB0YWtlcyB0aGUg
cGxhY2Ugb2YgdGhlIG9sZCBvbmUsIGFuZAotICAgICAgICAgICAgLy8gdGhlIG9sZCB0ZXh0IGdv
ZXMgaW50byBhIG5ldyBydW4gdGhhdCBpcyBpbnNlcnRlZCBhcyBuZXh0IHNpYmxpbmcuCi0gICAg
ICAgICAgICBBU1NFUlQoYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09ICZwYXJlbnQpOwotICAgICAg
ICAgICAgUmVuZGVyRWxlbWVudCogcnVieSA9IHBhcmVudC5wYXJlbnQoKTsKLSAgICAgICAgICAg
IEFTU0VSVChpc1J1YnkocnVieSkpOwotICAgICAgICAgICAgYXV0byBuZXdSdW4gPSBSZW5kZXJS
dWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5UnVuKHJ1YnkpOwotICAgICAgICAgICAgaW5zZXJ0Q2hp
bGQoKnJ1YnksIFdURk1vdmUobmV3UnVuKSwgcGFyZW50Lm5leHRTaWJsaW5nKCkpOwotICAgICAg
ICAgICAgLy8gQWRkIHRoZSBuZXcgcnVieSB0ZXh0IGFuZCBtb3ZlIHRoZSBvbGQgb25lIHRvIHRo
ZSBuZXcgcnVuCi0gICAgICAgICAgICAvLyBOb3RlOiBEb2luZyBpdCBpbiB0aGlzIG9yZGVyIGFu
ZCBub3QgdXNpbmcgUmVuZGVyUnVieVJ1bidzIG1ldGhvZHMsCi0gICAgICAgICAgICAvLyBpbiBv
cmRlciB0byBhdm9pZCBhdXRvbWF0aWMgcmVtb3ZhbCBvZiB0aGUgcnVieSBydW4gaW4gY2FzZSB0
aGVyZSBpcyBubwotICAgICAgICAgICAgLy8gb3RoZXIgY2hpbGQgYmVzaWRlcyB0aGUgb2xkIHJ1
YnkgdGV4dC4KLSAgICAgICAgICAgIHBhcmVudC5hZGRDaGlsZCgqdGhpcywgV1RGTW92ZShjaGls
ZCksIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgICAgIGF1dG8gdGFrZW5CZWZvcmVDaGlsZCA9IHBh
cmVudC5SZW5kZXJCbG9ja0Zsb3c6OnRha2VDaGlsZCgqYmVmb3JlQ2hpbGQpOwotICAgICAgICAg
ICAgaW5zZXJ0Q2hpbGQoKm5ld1J1biwgV1RGTW92ZSh0YWtlbkJlZm9yZUNoaWxkKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBhcmVudC5oYXNSdWJ5QmFz
ZSgpKSB7Ci0gICAgICAgICAgICAvLyBJbnNlcnRpb24gYmVmb3JlIGEgcnVieSBiYXNlIG9iamVj
dC4KLSAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBuZWVkIGluc2VydCBhIG5ldyBydW4g
YmVmb3JlIHRoZSBjdXJyZW50IG9uZSBhbmQgc3BsaXQgdGhlIGJhc2UuCi0gICAgICAgICAgICBS
ZW5kZXJFbGVtZW50KiBydWJ5ID0gcGFyZW50LnBhcmVudCgpOwotICAgICAgICAgICAgYXV0byBu
ZXdSdW4gPSBSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5UnVuKHJ1YnkpOwotICAgICAg
ICAgICAgYXV0byYgcnVuID0gKm5ld1J1bjsKLSAgICAgICAgICAgIGluc2VydENoaWxkKCpydWJ5
LCBXVEZNb3ZlKG5ld1J1biksICZwYXJlbnQpOwotICAgICAgICAgICAgaW5zZXJ0Q2hpbGQocnVu
LCBXVEZNb3ZlKGNoaWxkKSk7Ci0gICAgICAgICAgICBwYXJlbnQucnVieUJhc2VTYWZlKCktPm1v
dmVDaGlsZHJlbihydW4ucnVieUJhc2VTYWZlKCksIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIGNoaWxkIGlzIG5vdCBhIHRleHQgLT4gaW5z
ZXJ0IGl0IGludG8gdGhlIGJhc2UKLSAgICAvLyAoYXBwZW5kIGl0IGluc3RlYWQgaWYgYmVmb3Jl
Q2hpbGQgaXMgdGhlIHJ1YnkgdGV4dCkKLSAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hp
bGQtPmlzUnVieVRleHQoKSkKLSAgICAgICAgYmVmb3JlQ2hpbGQgPSBudWxscHRyOwotICAgIGlu
c2VydENoaWxkKCpwYXJlbnQucnVieUJhc2VTYWZlKCksIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVD
aGlsZCk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQnVpbGRlci5oCShyZXZpc2lvbiAyMjYwMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUJ1aWxkZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlclRyZWVQb3NpdGlvbi5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlclJ1YnlSdW47Ci1jbGFzcyBS
ZW5kZXJUcmVlVXBkYXRlcjsKLQotY2xhc3MgUmVuZGVyVHJlZUJ1aWxkZXIgewotcHVibGljOgot
ICAgIFJlbmRlclRyZWVCdWlsZGVyKFJlbmRlclZpZXcmKTsKLSAgICB+UmVuZGVyVHJlZUJ1aWxk
ZXIoKTsKLQotICAgIHZvaWQgaW5zZXJ0Q2hpbGQoUmVuZGVyRWxlbWVudCYgcGFyZW50LCBSZW5k
ZXJQdHI8UmVuZGVyT2JqZWN0PiwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIp
OwotICAgIHZvaWQgaW5zZXJ0Q2hpbGQoUmVuZGVyVHJlZVBvc2l0aW9uJiwgUmVuZGVyUHRyPFJl
bmRlck9iamVjdD4pOwotCi0gICAgLy8gVGhpcyBhdm9pZHMgaGF2aW5nIHRvIGNvbnZlcnQgYWxs
IHNpdGVzIHRoYXQgbmVlZCBSZW5kZXJUcmVlQnVpbGRlciBpbiBvbmUgZ28uCi0gICAgLy8gRklY
TUU6IFJlbW92ZS4KLSAgICBzdGF0aWMgUmVuZGVyVHJlZUJ1aWxkZXIqIGN1cnJlbnQoKSB7IHJl
dHVybiBzX2N1cnJlbnQ7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIHJ1YnlSdW5JbnNlcnRDaGls
ZChSZW5kZXJSdWJ5UnVuJiwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQpOwotCi0gICAgUmVuZGVyVmlldyYgbV92aWV3OwotCi0gICAgUmVu
ZGVyVHJlZUJ1aWxkZXIqIG1fcHJldmlvdXMgeyBudWxscHRyIH07Ci0gICAgc3RhdGljIFJlbmRl
clRyZWVCdWlsZGVyKiBzX2N1cnJlbnQ7Ci19OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAJKHJl
dmlzaW9uIDIyNjAwOSkJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVC
dWlsZGVyLmNwcDoyMjYwMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVCdWls
ZGVyLmgiCisKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyUnVi
eS5oIgorI2luY2x1ZGUgIlJlbmRlclJ1YnlCYXNlLmgiCisjaW5jbHVkZSAiUmVuZGVyUnVieVJ1
bi5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclRyZWVCdWlsZGVyKiBSZW5kZXJU
cmVlQnVpbGRlcjo6c19jdXJyZW50OworCitSZW5kZXJUcmVlQnVpbGRlcjo6UmVuZGVyVHJlZUJ1
aWxkZXIoUmVuZGVyVmlldyYgdmlldykKKyAgICA6IG1fdmlldyh2aWV3KQoreworICAgIFJFTEVB
U0VfQVNTRVJUKCFzX2N1cnJlbnQgfHwgJm1fdmlldyAhPSAmc19jdXJyZW50LT5tX3ZpZXcpOwor
ICAgIG1fcHJldmlvdXMgPSBzX2N1cnJlbnQ7CisgICAgc19jdXJyZW50ID0gdGhpczsKK30KKwor
UmVuZGVyVHJlZUJ1aWxkZXI6On5SZW5kZXJUcmVlQnVpbGRlcigpCit7CisgICAgc19jdXJyZW50
ID0gbV9wcmV2aW91czsKK30KKwordm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGQo
UmVuZGVyRWxlbWVudCYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBBU1NFUlQoJnBhcmVudC52aWV3KCkgPT0g
Jm1fdmlldyk7CisKKyAgICBpZiAoaXM8UmVuZGVyVGV4dD4oYmVmb3JlQ2hpbGQpKSB7CisgICAg
ICAgIGlmIChhdXRvKiB3cmFwcGVySW5saW5lID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmJlZm9y
ZUNoaWxkKS5pbmxpbmVXcmFwcGVyRm9yRGlzcGxheUNvbnRlbnRzKCkpCisgICAgICAgICAgICBi
ZWZvcmVDaGlsZCA9IHdyYXBwZXJJbmxpbmU7CisgICAgfQorCisgICAgaWYgKGlzPFJlbmRlclJ1
YnlSdW4+KHBhcmVudCkpIHsKKyAgICAgICAgcnVieVJ1bkluc2VydENoaWxkKGRvd25jYXN0PFJl
bmRlclJ1YnlSdW4+KHBhcmVudCksIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwYXJlbnQuYWRkQ2hpbGQoKnRoaXMsIFdURk1vdmUo
Y2hpbGQpLCBiZWZvcmVDaGlsZCk7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6Omluc2Vy
dENoaWxkKFJlbmRlclRyZWVQb3NpdGlvbiYgcG9zaXRpb24sIFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IGNoaWxkKQoreworICAgIGluc2VydENoaWxkKHBvc2l0aW9uLnBhcmVudCgpLCBXVEZNb3Zl
KGNoaWxkKSwgcG9zaXRpb24ubmV4dFNpYmxpbmcoKSk7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZUJ1
aWxkZXI6OnJ1YnlSdW5JbnNlcnRDaGlsZChSZW5kZXJSdWJ5UnVuJiBwYXJlbnQsIFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAg
IGlmIChjaGlsZC0+aXNSdWJ5VGV4dCgpKSB7CisgICAgICAgIGlmICghYmVmb3JlQ2hpbGQpIHsK
KyAgICAgICAgICAgIC8vIFJlbmRlclJ1YnkgaGFzIGFscmVhZHkgYXNjZXJ0YWluZWQgdGhhdCB3
ZSBjYW4gYWRkIHRoZSBjaGlsZCBoZXJlLgorICAgICAgICAgICAgQVNTRVJUKCFwYXJlbnQuaGFz
UnVieVRleHQoKSk7CisgICAgICAgICAgICAvLyBwcmVwZW5kIHJ1YnkgdGV4dHMgYXMgZmlyc3Qg
Y2hpbGQKKyAgICAgICAgICAgIHBhcmVudC5hZGRDaGlsZCgqdGhpcywgV1RGTW92ZShjaGlsZCks
IHBhcmVudC5maXJzdENoaWxkKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChiZWZvcmVDaGlsZC0+aXNSdWJ5VGV4dCgpKSB7CisgICAgICAgICAgICAvLyBO
ZXcgdGV4dCBpcyBpbnNlcnRlZCBqdXN0IGJlZm9yZSBhbm90aGVyLgorICAgICAgICAgICAgLy8g
SW4gdGhpcyBjYXNlIHRoZSBuZXcgdGV4dCB0YWtlcyB0aGUgcGxhY2Ugb2YgdGhlIG9sZCBvbmUs
IGFuZAorICAgICAgICAgICAgLy8gdGhlIG9sZCB0ZXh0IGdvZXMgaW50byBhIG5ldyBydW4gdGhh
dCBpcyBpbnNlcnRlZCBhcyBuZXh0IHNpYmxpbmcuCisgICAgICAgICAgICBBU1NFUlQoYmVmb3Jl
Q2hpbGQtPnBhcmVudCgpID09ICZwYXJlbnQpOworICAgICAgICAgICAgUmVuZGVyRWxlbWVudCog
cnVieSA9IHBhcmVudC5wYXJlbnQoKTsKKyAgICAgICAgICAgIEFTU0VSVChpc1J1YnkocnVieSkp
OworICAgICAgICAgICAgYXV0byBuZXdSdW4gPSBSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVS
dWJ5UnVuKHJ1YnkpOworICAgICAgICAgICAgaW5zZXJ0Q2hpbGQoKnJ1YnksIFdURk1vdmUobmV3
UnVuKSwgcGFyZW50Lm5leHRTaWJsaW5nKCkpOworICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcg
cnVieSB0ZXh0IGFuZCBtb3ZlIHRoZSBvbGQgb25lIHRvIHRoZSBuZXcgcnVuCisgICAgICAgICAg
ICAvLyBOb3RlOiBEb2luZyBpdCBpbiB0aGlzIG9yZGVyIGFuZCBub3QgdXNpbmcgUmVuZGVyUnVi
eVJ1bidzIG1ldGhvZHMsCisgICAgICAgICAgICAvLyBpbiBvcmRlciB0byBhdm9pZCBhdXRvbWF0
aWMgcmVtb3ZhbCBvZiB0aGUgcnVieSBydW4gaW4gY2FzZSB0aGVyZSBpcyBubworICAgICAgICAg
ICAgLy8gb3RoZXIgY2hpbGQgYmVzaWRlcyB0aGUgb2xkIHJ1YnkgdGV4dC4KKyAgICAgICAgICAg
IHBhcmVudC5hZGRDaGlsZCgqdGhpcywgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKKyAg
ICAgICAgICAgIGF1dG8gdGFrZW5CZWZvcmVDaGlsZCA9IHBhcmVudC5SZW5kZXJCbG9ja0Zsb3c6
OnRha2VDaGlsZCgqYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgaW5zZXJ0Q2hpbGQoKm5ld1J1
biwgV1RGTW92ZSh0YWtlbkJlZm9yZUNoaWxkKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHBhcmVudC5oYXNSdWJ5QmFzZSgpKSB7CisgICAgICAgICAgICAv
LyBJbnNlcnRpb24gYmVmb3JlIGEgcnVieSBiYXNlIG9iamVjdC4KKyAgICAgICAgICAgIC8vIElu
IHRoaXMgY2FzZSB3ZSBuZWVkIGluc2VydCBhIG5ldyBydW4gYmVmb3JlIHRoZSBjdXJyZW50IG9u
ZSBhbmQgc3BsaXQgdGhlIGJhc2UuCisgICAgICAgICAgICBSZW5kZXJFbGVtZW50KiBydWJ5ID0g
cGFyZW50LnBhcmVudCgpOworICAgICAgICAgICAgYXV0byBuZXdSdW4gPSBSZW5kZXJSdWJ5UnVu
OjpzdGF0aWNDcmVhdGVSdWJ5UnVuKHJ1YnkpOworICAgICAgICAgICAgYXV0byYgcnVuID0gKm5l
d1J1bjsKKyAgICAgICAgICAgIGluc2VydENoaWxkKCpydWJ5LCBXVEZNb3ZlKG5ld1J1biksICZw
YXJlbnQpOworICAgICAgICAgICAgaW5zZXJ0Q2hpbGQocnVuLCBXVEZNb3ZlKGNoaWxkKSk7Cisg
ICAgICAgICAgICBwYXJlbnQucnVieUJhc2VTYWZlKCktPm1vdmVDaGlsZHJlbihydW4ucnVieUJh
c2VTYWZlKCksIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAg
fQorICAgIC8vIGNoaWxkIGlzIG5vdCBhIHRleHQgLT4gaW5zZXJ0IGl0IGludG8gdGhlIGJhc2UK
KyAgICAvLyAoYXBwZW5kIGl0IGluc3RlYWQgaWYgYmVmb3JlQ2hpbGQgaXMgdGhlIHJ1YnkgdGV4
dCkKKyAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPmlzUnVieVRleHQoKSkKKyAg
ICAgICAgYmVmb3JlQ2hpbGQgPSBudWxscHRyOworICAgIGluc2VydENoaWxkKCpwYXJlbnQucnVi
eUJhc2VTYWZlKCksIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVl
QnVpbGRlci5oCShyZXZpc2lvbiAyMjYwMDkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQnVpbGRlci5oOjIyNjAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlclRyZWVQ
b3NpdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclJ1YnlSdW47
CitjbGFzcyBSZW5kZXJUcmVlVXBkYXRlcjsKKworY2xhc3MgUmVuZGVyVHJlZUJ1aWxkZXIgewor
cHVibGljOgorICAgIFJlbmRlclRyZWVCdWlsZGVyKFJlbmRlclZpZXcmKTsKKyAgICB+UmVuZGVy
VHJlZUJ1aWxkZXIoKTsKKworICAgIHZvaWQgaW5zZXJ0Q2hpbGQoUmVuZGVyRWxlbWVudCYgcGFy
ZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9
IG51bGxwdHIpOworICAgIHZvaWQgaW5zZXJ0Q2hpbGQoUmVuZGVyVHJlZVBvc2l0aW9uJiwgUmVu
ZGVyUHRyPFJlbmRlck9iamVjdD4pOworCisgICAgLy8gVGhpcyBhdm9pZHMgaGF2aW5nIHRvIGNv
bnZlcnQgYWxsIHNpdGVzIHRoYXQgbmVlZCBSZW5kZXJUcmVlQnVpbGRlciBpbiBvbmUgZ28uCisg
ICAgLy8gRklYTUU6IFJlbW92ZS4KKyAgICBzdGF0aWMgUmVuZGVyVHJlZUJ1aWxkZXIqIGN1cnJl
bnQoKSB7IHJldHVybiBzX2N1cnJlbnQ7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHJ1YnlSdW5J
bnNlcnRDaGlsZChSZW5kZXJSdWJ5UnVuJiwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOworCisgICAgUmVuZGVyVmlldyYgbV92aWV3Owor
CisgICAgUmVuZGVyVHJlZUJ1aWxkZXIqIG1fcHJldmlvdXMgeyBudWxscHRyIH07CisgICAgc3Rh
dGljIFJlbmRlclRyZWVCdWlsZGVyKiBzX2N1cnJlbnQ7Cit9OworCit9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVBvc2l0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVBvc2l0
aW9uLmNwcAkocmV2aXNpb24gMjI2MDA5KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5k
ZXJUcmVlUG9zaXRpb24uY3BwOjIyNjAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRl
clRyZWVQb3NpdGlvbi5oIgorCisjaW5jbHVkZSAiQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCIKKyNp
bmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgUmVuZGVyVHJlZVBvc2l0aW9uOjpjb21wdXRlTmV4dFNpYmxp
bmcoY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQoIW5vZGUucmVuZGVyZXIoKSk7Cisg
ICAgaWYgKG1faGFzVmFsaWROZXh0U2libGluZykgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgb05TcXVhcmVkQXZvaWRhbmNlTGltaXQgPSAyMDsKKyAgICAg
ICAgYm9vbCBza2lwQXNzZXJ0ID0gbV9wYXJlbnQuaXNSZW5kZXJWaWV3KCkgfHwgKyttX2Fzc2Vy
dGlvbkxpbWl0Q291bnRlciA+IG9OU3F1YXJlZEF2b2lkYW5jZUxpbWl0OworICAgICAgICBBU1NF
UlQoc2tpcEFzc2VydCB8fCBuZXh0U2libGluZ1JlbmRlcmVyKG5vZGUpID09IG1fbmV4dFNpYmxp
bmcpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9uZXh0U2libGluZyA9
IG5leHRTaWJsaW5nUmVuZGVyZXIobm9kZSk7CisgICAgbV9oYXNWYWxpZE5leHRTaWJsaW5nID0g
dHJ1ZTsKK30KKwordm9pZCBSZW5kZXJUcmVlUG9zaXRpb246OmludmFsaWRhdGVOZXh0U2libGlu
Zyhjb25zdCBSZW5kZXJPYmplY3QmIHNpYmxpbmdSZW5kZXJlcikKK3sKKyAgICBpZiAoIW1faGFz
VmFsaWROZXh0U2libGluZykKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX25leHRTaWJsaW5n
ID09ICZzaWJsaW5nUmVuZGVyZXIpCisgICAgICAgIG1faGFzVmFsaWROZXh0U2libGluZyA9IGZh
bHNlOworfQorCitSZW5kZXJPYmplY3QqIFJlbmRlclRyZWVQb3NpdGlvbjo6bmV4dFNpYmxpbmdS
ZW5kZXJlcihjb25zdCBOb2RlJiBub2RlKSBjb25zdAoreworICAgIEFTU0VSVCghbm9kZS5yZW5k
ZXJlcigpKTsKKworICAgIGF1dG8qIHBhcmVudEVsZW1lbnQgPSBtX3BhcmVudC5lbGVtZW50KCk7
CisgICAgaWYgKCFwYXJlbnRFbGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAv
LyBGSVhNRTogUGx1Z2luZ1JlcGxhY2VtZW50IHNoYWRvdyB0cmVlcyBhcmUgdmVyeSB3cm9uZy4K
KyAgICBpZiAocGFyZW50RWxlbWVudCA9PSAmbm9kZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBWZWN0b3I8RWxlbWVudCosIDMwPiBlbGVtZW50U3RhY2s7CisKKyAgICAvLyBJbiB0
aGUgY29tbW9uIGNhc2UgYW5jZXN0b3IgPT0gcGFyZW50RWxlbWVudCBpbW1lZGlhdGVseSBhbmQg
dGhpcyBqdXN0IHB1c2hlcyBwYXJlbnRFbGVtZW50IGludG8gc3RhY2suCisgICAgYXV0byogYW5j
ZXN0b3IgPSBpczxQc2V1ZG9FbGVtZW50Pihub2RlKSA/IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+
KG5vZGUpLmhvc3RFbGVtZW50KCkgOiBub2RlLnBhcmVudEVsZW1lbnRJbkNvbXBvc2VkVHJlZSgp
OworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGVsZW1lbnRTdGFjay5hcHBlbmQoYW5jZXN0
b3IpOworICAgICAgICBpZiAoYW5jZXN0b3IgPT0gcGFyZW50RWxlbWVudCkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRFbGVtZW50SW5Db21w
b3NlZFRyZWUoKTsKKyAgICAgICAgQVNTRVJUKGFuY2VzdG9yKTsKKyAgICB9CisgICAgZWxlbWVu
dFN0YWNrLnJldmVyc2UoKTsKKworICAgIGF1dG8gY29tcG9zZWREZXNjZW5kYW50cyA9IGNvbXBv
c2VkVHJlZURlc2NlbmRhbnRzKCpwYXJlbnRFbGVtZW50KTsKKworICAgIGF1dG8gaW5pdGlhbGl6
ZUl0ZXJhdG9yQ29uc2lkZXJpbmdQc2V1ZG9FbGVtZW50cyA9IFsmXSB7CisgICAgICAgIGlmIChp
czxQc2V1ZG9FbGVtZW50Pihub2RlKSkgeworICAgICAgICAgICAgYXV0byogaG9zdCA9IGRvd25j
YXN0PFBzZXVkb0VsZW1lbnQ+KG5vZGUpLmhvc3RFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAo
bm9kZS5pc0JlZm9yZVBzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGlmIChob3N0
ICE9IHBhcmVudEVsZW1lbnQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wb3NlZERl
c2NlbmRhbnRzLmF0KCpob3N0KS50cmF2ZXJzZU5leHQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY29tcG9zZWREZXNjZW5kYW50cy5iZWdpbigpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgQVNTRVJUKG5vZGUuaXNBZnRlclBzZXVkb0VsZW1lbnQoKSk7CisgICAgICAgICAgICBlbGVt
ZW50U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgaWYgKGhvc3QgIT0gcGFyZW50RWxl
bWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9zZWREZXNjZW5kYW50cy5hdCgqaG9z
dCkudHJhdmVyc2VOZXh0U2tpcHBpbmdDaGlsZHJlbigpOworICAgICAgICAgICAgcmV0dXJuIGNv
bXBvc2VkRGVzY2VuZGFudHMuZW5kKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbXBv
c2VkRGVzY2VuZGFudHMuYXQobm9kZSkudHJhdmVyc2VOZXh0U2tpcHBpbmdDaGlsZHJlbigpOwor
ICAgIH07CisKKyAgICBhdXRvIHB1c2hDaGVja2luZ0ZvckFmdGVyUHNldWRvRWxlbWVudFJlbmRl
cmVyID0gWyZdIChFbGVtZW50JiBlbGVtZW50KSAtPiBSZW5kZXJFbGVtZW50KiB7CisgICAgICAg
IEFTU0VSVCghZWxlbWVudC5pc1BzZXVkb0VsZW1lbnQoKSk7CisgICAgICAgIGlmIChhdXRvKiBi
ZWZvcmUgPSBlbGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYg
KGF1dG8qIHJlbmRlcmVyID0gYmVmb3JlLT5yZW5kZXJlcigpKQorICAgICAgICAgICAgICAgIHJl
dHVybiByZW5kZXJlcjsKKyAgICAgICAgfQorICAgICAgICBlbGVtZW50U3RhY2suYXBwZW5kKCZl
bGVtZW50KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfTsKKworICAgIGF1dG8gcG9w
Q2hlY2tpbmdGb3JBZnRlclBzZXVkb0VsZW1lbnRSZW5kZXJlcnMgPSBbJl0gKHVuc2lnbmVkIGl0
ZXJhdG9yRGVwdGhUb01hdGNoKSAtPiBSZW5kZXJFbGVtZW50KiB7CisgICAgICAgIHdoaWxlIChl
bGVtZW50U3RhY2suc2l6ZSgpID4gaXRlcmF0b3JEZXB0aFRvTWF0Y2gpIHsKKyAgICAgICAgICAg
IGF1dG8mIGVsZW1lbnQgPSAqZWxlbWVudFN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgICAgICBp
ZiAoYXV0byogYWZ0ZXIgPSBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gYWZ0ZXItPnJlbmRlcmVyKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZW5kZXJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9OworCisgICAgYXV0byBpdCA9IGluaXRpYWxp
emVJdGVyYXRvckNvbnNpZGVyaW5nUHNldWRvRWxlbWVudHMoKTsKKyAgICBhdXRvIGVuZCA9IGNv
bXBvc2VkRGVzY2VuZGFudHMuZW5kKCk7CisKKyAgICB3aGlsZSAoaXQgIT0gZW5kKSB7CisgICAg
ICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHBvcENoZWNraW5nRm9yQWZ0ZXJQc2V1ZG9FbGVtZW50
UmVuZGVyZXJzKGl0LmRlcHRoKCkpKQorICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyOworCisg
ICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGl0LT5yZW5kZXJlcigpKQorICAgICAgICAgICAg
cmV0dXJuIHJlbmRlcmVyOworCisgICAgICAgIGlmIChpczxFbGVtZW50PigqaXQpKSB7CisgICAg
ICAgICAgICBhdXRvJiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKml0KTsKKyAgICAgICAg
ICAgIGlmIChlbGVtZW50Lmhhc0Rpc3BsYXlDb250ZW50cygpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGF1dG8qIHJlbmRlcmVyID0gcHVzaENoZWNraW5nRm9yQWZ0ZXJQc2V1ZG9FbGVtZW50UmVu
ZGVyZXIoZWxlbWVudCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJlcjsKKyAg
ICAgICAgICAgICAgICBpdC50cmF2ZXJzZU5leHQoKTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGl0LnRyYXZlcnNlTmV4dFNr
aXBwaW5nQ2hpbGRyZW4oKTsKKyAgICB9CisKKyAgICByZXR1cm4gcG9wQ2hlY2tpbmdGb3JBZnRl
clBzZXVkb0VsZW1lbnRSZW5kZXJlcnMoMCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlUG9zaXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVBvc2l0aW9uLmgJKHJl
dmlzaW9uIDIyNjAwOSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVBvc2l0
aW9uLmg6MjI2MDA5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVQb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJSZW5kZXJGcmFnbWVudGVkRmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVy
VHJlZVBvc2l0aW9uIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJUcmVlUG9zaXRpb24o
UmVuZGVyRWxlbWVudCYgcGFyZW50KQorICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICB7
CisgICAgfQorICAgIFJlbmRlclRyZWVQb3NpdGlvbihSZW5kZXJFbGVtZW50JiBwYXJlbnQsIFJl
bmRlck9iamVjdCogbmV4dFNpYmxpbmcpCisgICAgICAgIDogbV9wYXJlbnQocGFyZW50KQorICAg
ICAgICAsIG1fbmV4dFNpYmxpbmcobmV4dFNpYmxpbmcpCisgICAgICAgICwgbV9oYXNWYWxpZE5l
eHRTaWJsaW5nKHRydWUpCisgICAgeworICAgIH0KKworICAgIFJlbmRlckVsZW1lbnQmIHBhcmVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CisgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2li
bGluZygpIGNvbnN0IHsgQVNTRVJUKG1faGFzVmFsaWROZXh0U2libGluZyk7IHJldHVybiBtX25l
eHRTaWJsaW5nOyB9CisKKyAgICB2b2lkIGNvbXB1dGVOZXh0U2libGluZyhjb25zdCBOb2RlJik7
CisgICAgdm9pZCBtb3ZlVG9MYXN0Q2hpbGQoKTsKKyAgICB2b2lkIGludmFsaWRhdGVOZXh0U2li
bGluZygpIHsgbV9oYXNWYWxpZE5leHRTaWJsaW5nID0gZmFsc2U7IH0KKyAgICB2b2lkIGludmFs
aWRhdGVOZXh0U2libGluZyhjb25zdCBSZW5kZXJPYmplY3QmKTsKKworICAgIFJlbmRlck9iamVj
dCogbmV4dFNpYmxpbmdSZW5kZXJlcihjb25zdCBOb2RlJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgUmVuZGVyRWxlbWVudCYgbV9wYXJlbnQ7CisgICAgUmVuZGVyT2JqZWN0KiBtX25leHRTaWJs
aW5nIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV9oYXNWYWxpZE5leHRTaWJsaW5nIHsgZmFsc2Ug
fTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWduZWQgbV9hc3NlcnRpb25MaW1pdENv
dW50ZXIgeyAwIH07CisjZW5kaWYKK307CisKK2lubGluZSB2b2lkIFJlbmRlclRyZWVQb3NpdGlv
bjo6bW92ZVRvTGFzdENoaWxkKCkKK3sKKyAgICBtX25leHRTaWJsaW5nID0gbnVsbHB0cjsKKyAg
ICBtX2hhc1ZhbGlkTmV4dFNpYmxpbmcgPSB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVw
ZGF0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGlu
Zy9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHJldmlzaW9uIDIyNjAwOSkJKGZyb20gU291cmNlL1dl
YkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwOjIyNjAwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgorCisjaW5jbHVkZSAiQVhPYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJD
b21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiQ29tcG9zZWRUcmVlSXRl
cmF0b3IuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTm9kZVJl
bmRlclN0eWxlLmgiCisjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRl
ckRlc2NlbmRhbnRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKKyNp
bmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJU
cmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRl
ckxpc3RJdGVtLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5oIgor
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHlsZVRyZWVSZXNvbHZlci5o
IgorI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisj
aW5jbHVkZSAiV0tDb250ZW50T2JzZXJ2YXRpb24uaCIKKyNpbmNsdWRlICJXS0NvbnRlbnRPYnNl
cnZhdGlvbkludGVybmFsLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYg
UExBVEZPUk0oSU9TKQorY2xhc3MgQ2hlY2tGb3JWaXNpYmlsaXR5Q2hhbmdlIHsKK3B1YmxpYzoK
KyAgICBDaGVja0ZvclZpc2liaWxpdHlDaGFuZ2UoY29uc3QgRWxlbWVudCYpOworICAgIH5DaGVj
a0ZvclZpc2liaWxpdHlDaGFuZ2UoKTsKKworcHJpdmF0ZToKKyAgICBjb25zdCBFbGVtZW50JiBt
X2VsZW1lbnQ7CisgICAgRURpc3BsYXkgbV9wcmV2aW91c0Rpc3BsYXk7CisgICAgRVZpc2liaWxp
dHkgbV9wcmV2aW91c1Zpc2liaWxpdHk7CisgICAgRVZpc2liaWxpdHkgbV9wcmV2aW91c0ltcGxp
Y2l0VmlzaWJpbGl0eTsKK307CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCitSZW5kZXJUcmVl
VXBkYXRlcjo6UGFyZW50OjpQYXJlbnQoQ29udGFpbmVyTm9kZSYgcm9vdCkKKyAgICA6IGVsZW1l
bnQoaXM8RG9jdW1lbnQ+KHJvb3QpID8gbnVsbHB0ciA6IGRvd25jYXN0PEVsZW1lbnQ+KCZyb290
KSkKKyAgICAsIHJlbmRlclRyZWVQb3NpdGlvbihSZW5kZXJUcmVlUG9zaXRpb24oKnJvb3QucmVu
ZGVyZXIoKSkpCit7Cit9CisKK1JlbmRlclRyZWVVcGRhdGVyOjpQYXJlbnQ6OlBhcmVudChFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBTdHlsZTo6RWxlbWVudFVwZGF0ZXMqIHVwZGF0ZXMpCisgICAg
OiBlbGVtZW50KCZlbGVtZW50KQorICAgICwgdXBkYXRlcyh1cGRhdGVzKQorICAgICwgcmVuZGVy
VHJlZVBvc2l0aW9uKGVsZW1lbnQucmVuZGVyZXIoKSA/IHN0ZDo6bWFrZV9vcHRpb25hbChSZW5k
ZXJUcmVlUG9zaXRpb24oKmVsZW1lbnQucmVuZGVyZXIoKSkpIDogc3RkOjpudWxsb3B0KQorewor
fQorCitSZW5kZXJUcmVlVXBkYXRlcjo6UmVuZGVyVHJlZVVwZGF0ZXIoRG9jdW1lbnQmIGRvY3Vt
ZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fZ2VuZXJhdGVkQ29udGVu
dChzdGQ6Om1ha2VfdW5pcXVlPEdlbmVyYXRlZENvbnRlbnQ+KCp0aGlzKSkKKyAgICAsIG1fYnVp
bGRlcihyZW5kZXJWaWV3KCkpCit7Cit9CisKK1JlbmRlclRyZWVVcGRhdGVyOjp+UmVuZGVyVHJl
ZVVwZGF0ZXIoKSA9IGRlZmF1bHQ7CisKK3N0YXRpYyBDb250YWluZXJOb2RlKiBmaW5kUmVuZGVy
aW5nUm9vdChDb250YWluZXJOb2RlJiBub2RlKQoreworICAgIGlmIChub2RlLnJlbmRlcmVyKCkp
CisgICAgICAgIHJldHVybiAmbm9kZTsKKyAgICBmb3IgKGF1dG8mIGFuY2VzdG9yIDogY29tcG9z
ZWRUcmVlQW5jZXN0b3JzKG5vZGUpKSB7CisgICAgICAgIGlmIChhbmNlc3Rvci5yZW5kZXJlcigp
KQorICAgICAgICAgICAgcmV0dXJuICZhbmNlc3RvcjsKKyAgICAgICAgaWYgKCFhbmNlc3Rvci5o
YXNEaXNwbGF5Q29udGVudHMoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICByZXR1cm4gJm5vZGUuZG9jdW1lbnQoKTsKK30KKworc3RhdGljIExpc3RIYXNoU2V0PENv
bnRhaW5lck5vZGUqPiBmaW5kUmVuZGVyaW5nUm9vdHMoY29uc3QgU3R5bGU6OlVwZGF0ZSYgdXBk
YXRlKQoreworICAgIExpc3RIYXNoU2V0PENvbnRhaW5lck5vZGUqPiByZW5kZXJpbmdSb290czsK
KyAgICBmb3IgKGF1dG8qIHJvb3QgOiB1cGRhdGUucm9vdHMoKSkgeworICAgICAgICBhdXRvKiBy
ZW5kZXJpbmdSb290ID0gZmluZFJlbmRlcmluZ1Jvb3QoKnJvb3QpOworICAgICAgICBpZiAoIXJl
bmRlcmluZ1Jvb3QpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcmVuZGVyaW5nUm9v
dHMuYWRkKHJlbmRlcmluZ1Jvb3QpOworICAgIH0KKyAgICByZXR1cm4gcmVuZGVyaW5nUm9vdHM7
Cit9CisKK3ZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OmNvbW1pdChzdGQ6OnVuaXF1ZV9wdHI8Y29u
c3QgU3R5bGU6OlVwZGF0ZT4gc3R5bGVVcGRhdGUpCit7CisgICAgQVNTRVJUKCZtX2RvY3VtZW50
ID09ICZzdHlsZVVwZGF0ZS0+ZG9jdW1lbnQoKSk7CisKKyAgICBpZiAoIW1fZG9jdW1lbnQuc2hv
dWxkQ3JlYXRlUmVuZGVyZXJzKCkgfHwgIW1fZG9jdW1lbnQucmVuZGVyVmlldygpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgVHJhY2VTY29wZSBzY29wZShSZW5kZXJUcmVlQnVpbGRTdGFy
dCwgUmVuZGVyVHJlZUJ1aWxkRW5kKTsKKworICAgIFN0eWxlOjpQb3N0UmVzb2x1dGlvbkNhbGxi
YWNrRGlzYWJsZXIgY2FsbGJhY2tEaXNhYmxlcihtX2RvY3VtZW50KTsKKworICAgIG1fc3R5bGVV
cGRhdGUgPSBXVEZNb3ZlKHN0eWxlVXBkYXRlKTsKKworICAgIGZvciAoYXV0byogcm9vdCA6IGZp
bmRSZW5kZXJpbmdSb290cygqbV9zdHlsZVVwZGF0ZSkpCisgICAgICAgIHVwZGF0ZVJlbmRlclRy
ZWUoKnJvb3QpOworCisgICAgZ2VuZXJhdGVkQ29udGVudCgpLnVwZGF0ZVJlbWFpbmluZ1F1b3Rl
cygpOworCisgICAgTXVsdGlDb2x1bW46OnVwZGF0ZShyZW5kZXJWaWV3KCkpOworCisgICAgbV9z
dHlsZVVwZGF0ZSA9IG51bGxwdHI7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZENyZWF0ZVJlbmRl
cmVyKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlckVsZW1lbnQmIHBhcmVudFJl
bmRlcmVyKQoreworICAgIGlmICghcGFyZW50UmVuZGVyZXIuY2FuSGF2ZUNoaWxkcmVuKCkgJiYg
IShlbGVtZW50LmlzUHNldWRvRWxlbWVudCgpICYmIHBhcmVudFJlbmRlcmVyLmNhbkhhdmVHZW5l
cmF0ZWRDaGlsZHJlbigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChwYXJlbnRS
ZW5kZXJlci5lbGVtZW50KCkgJiYgIXBhcmVudFJlbmRlcmVyLmVsZW1lbnQoKS0+Y2hpbGRTaG91
bGRDcmVhdGVSZW5kZXJlcihlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp1cGRhdGVSZW5kZXJUcmVl
KENvbnRhaW5lck5vZGUmIHJvb3QpCit7CisgICAgQVNTRVJUKHJvb3QucmVuZGVyZXIoKSk7Cisg
ICAgQVNTRVJUKG1fcGFyZW50U3RhY2suaXNFbXB0eSgpKTsKKworICAgIG1fcGFyZW50U3RhY2su
YXBwZW5kKFBhcmVudChyb290KSk7CisKKyAgICBhdXRvIGRlc2NlbmRhbnRzID0gY29tcG9zZWRU
cmVlRGVzY2VuZGFudHMocm9vdCk7CisgICAgYXV0byBpdCA9IGRlc2NlbmRhbnRzLmJlZ2luKCk7
CisgICAgYXV0byBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsKKworICAgIC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MTcyCisgICAgaXQuZHJvcEFz
c2VydGlvbnMoKTsKKworICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKKyAgICAgICAgcG9wUGFyZW50
c1RvRGVwdGgoaXQuZGVwdGgoKSk7CisKKyAgICAgICAgYXV0byYgbm9kZSA9ICppdDsKKworICAg
ICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBub2RlLnJlbmRlcmVyKCkpCisgICAgICAgICAgICBy
ZW5kZXJUcmVlUG9zaXRpb24oKS5pbnZhbGlkYXRlTmV4dFNpYmxpbmcoKnJlbmRlcmVyKTsKKyAg
ICAgICAgZWxzZSBpZiAoaXM8RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4obm9k
ZSkuaGFzRGlzcGxheUNvbnRlbnRzKCkpCisgICAgICAgICAgICByZW5kZXJUcmVlUG9zaXRpb24o
KS5pbnZhbGlkYXRlTmV4dFNpYmxpbmcoKTsKKworICAgICAgICBpZiAoaXM8VGV4dD4obm9kZSkp
IHsKKyAgICAgICAgICAgIGF1dG8mIHRleHQgPSBkb3duY2FzdDxUZXh0Pihub2RlKTsKKyAgICAg
ICAgICAgIGF1dG8qIHRleHRVcGRhdGUgPSBtX3N0eWxlVXBkYXRlLT50ZXh0VXBkYXRlKHRleHQp
OworICAgICAgICAgICAgYm9vbCBkaWRDcmVhdGVQYXJlbnQgPSBwYXJlbnQoKS51cGRhdGVzICYm
IHBhcmVudCgpLnVwZGF0ZXMtPnVwZGF0ZS5jaGFuZ2UgPT0gU3R5bGU6OkRldGFjaDsKKyAgICAg
ICAgICAgIGJvb2wgbWF5TmVlZFVwZGF0ZVdoaXRlc3BhY2VPbmx5UmVuZGVyZXIgPSByZW5kZXJp
bmdQYXJlbnQoKS5kaWRDcmVhdGVPckRlc3Ryb3lDaGlsZFJlbmRlcmVyICYmIHRleHQuZGF0YSgp
LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNIVE1MU3BhY2U+KCk7CisgICAgICAgICAgICBpZiAo
ZGlkQ3JlYXRlUGFyZW50IHx8IHRleHRVcGRhdGUgfHwgbWF5TmVlZFVwZGF0ZVdoaXRlc3BhY2VP
bmx5UmVuZGVyZXIpCisgICAgICAgICAgICAgICAgdXBkYXRlVGV4dFJlbmRlcmVyKHRleHQsIHRl
eHRVcGRhdGUpOworCisgICAgICAgICAgICBzdG9yZVByZXZpb3VzUmVuZGVyZXIodGV4dCk7Cisg
ICAgICAgICAgICBpdC50cmF2ZXJzZU5leHRTa2lwcGluZ0NoaWxkcmVuKCk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2Fz
dDxFbGVtZW50Pihub2RlKTsKKworICAgICAgICBhdXRvKiBlbGVtZW50VXBkYXRlcyA9IG1fc3R5
bGVVcGRhdGUtPmVsZW1lbnRVcGRhdGVzKGVsZW1lbnQpOworCisgICAgICAgIC8vIFdlIGhvcCB0
aHJvdWdoIGRpc3BsYXk6IGNvbnRlbnRzIGVsZW1lbnRzIGluIGZpbmRSZW5kZXJpbmdSb290LCBz
bworICAgICAgICAvLyB0aGVyZSBtYXkgYmUgb3RoZXIgdXBkYXRlcyBkb3duIHRoZSB0cmVlLgor
ICAgICAgICBpZiAoIWVsZW1lbnRVcGRhdGVzICYmICFlbGVtZW50Lmhhc0Rpc3BsYXlDb250ZW50
cygpKSB7CisgICAgICAgICAgICBzdG9yZVByZXZpb3VzUmVuZGVyZXIoZWxlbWVudCk7CisgICAg
ICAgICAgICBpdC50cmF2ZXJzZU5leHRTa2lwcGluZ0NoaWxkcmVuKCk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbGVtZW50VXBkYXRlcykKKyAgICAg
ICAgICAgIHVwZGF0ZUVsZW1lbnRSZW5kZXJlcihlbGVtZW50LCBlbGVtZW50VXBkYXRlcy0+dXBk
YXRlKTsKKworICAgICAgICBzdG9yZVByZXZpb3VzUmVuZGVyZXIoZWxlbWVudCk7CisKKyAgICAg
ICAgYm9vbCBtYXlIYXZlUmVuZGVyZWREZXNjZW5kYW50cyA9IGVsZW1lbnQucmVuZGVyZXIoKSB8
fCAoZWxlbWVudC5oYXNEaXNwbGF5Q29udGVudHMoKSAmJiBzaG91bGRDcmVhdGVSZW5kZXJlcihl
bGVtZW50LCByZW5kZXJUcmVlUG9zaXRpb24oKS5wYXJlbnQoKSkpOworICAgICAgICBpZiAoIW1h
eUhhdmVSZW5kZXJlZERlc2NlbmRhbnRzKSB7CisgICAgICAgICAgICBpdC50cmF2ZXJzZU5leHRT
a2lwcGluZ0NoaWxkcmVuKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHB1c2hQYXJlbnQoZWxlbWVudCwgZWxlbWVudFVwZGF0ZXMpOworCisgICAgICAgIGl0
LnRyYXZlcnNlTmV4dCgpOworICAgIH0KKworICAgIHBvcFBhcmVudHNUb0RlcHRoKDApOworfQor
CithdXRvIFJlbmRlclRyZWVVcGRhdGVyOjpyZW5kZXJpbmdQYXJlbnQoKSAtPiBQYXJlbnQmCit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9wYXJlbnRTdGFjay5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgaWYgKG1fcGFyZW50U3RhY2tbaV0ucmVuZGVyVHJlZVBvc2l0aW9uKQorICAgICAgICAg
ICAgcmV0dXJuIG1fcGFyZW50U3RhY2tbaV07CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBtX3BhcmVudFN0YWNrLmxhc3QoKTsKK30KKworUmVuZGVyVHJlZVBv
c2l0aW9uJiBSZW5kZXJUcmVlVXBkYXRlcjo6cmVuZGVyVHJlZVBvc2l0aW9uKCkKK3sKKyAgICBy
ZXR1cm4gKnJlbmRlcmluZ1BhcmVudCgpLnJlbmRlclRyZWVQb3NpdGlvbjsKK30KKwordm9pZCBS
ZW5kZXJUcmVlVXBkYXRlcjo6cHVzaFBhcmVudChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHls
ZTo6RWxlbWVudFVwZGF0ZXMqIHVwZGF0ZXMpCit7CisgICAgbV9wYXJlbnRTdGFjay5hcHBlbmQo
UGFyZW50KGVsZW1lbnQsIHVwZGF0ZXMpKTsKKworICAgIHVwZGF0ZUJlZm9yZURlc2NlbmRhbnRz
KGVsZW1lbnQsIHVwZGF0ZXMpOworfQorCit2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpwb3BQYXJl
bnQoKQoreworICAgIGF1dG8mIHBhcmVudCA9IG1fcGFyZW50U3RhY2subGFzdCgpOworICAgIGlm
IChwYXJlbnQuZWxlbWVudCkKKyAgICAgICAgdXBkYXRlQWZ0ZXJEZXNjZW5kYW50cygqcGFyZW50
LmVsZW1lbnQsIHBhcmVudC51cGRhdGVzKTsKKworICAgIG1fcGFyZW50U3RhY2sucmVtb3ZlTGFz
dCgpOworfQorCit2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpwb3BQYXJlbnRzVG9EZXB0aCh1bnNp
Z25lZCBkZXB0aCkKK3sKKyAgICBBU1NFUlQobV9wYXJlbnRTdGFjay5zaXplKCkgPj0gZGVwdGgp
OworCisgICAgd2hpbGUgKG1fcGFyZW50U3RhY2suc2l6ZSgpID4gZGVwdGgpCisgICAgICAgIHBv
cFBhcmVudCgpOworfQorCit2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp1cGRhdGVCZWZvcmVEZXNj
ZW5kYW50cyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHlsZTo6RWxlbWVudFVwZGF0ZXMqIHVw
ZGF0ZXMpCit7CisgICAgaWYgKHVwZGF0ZXMpCisgICAgICAgIGdlbmVyYXRlZENvbnRlbnQoKS51
cGRhdGVQc2V1ZG9FbGVtZW50KGVsZW1lbnQsIHVwZGF0ZXMtPmJlZm9yZVBzZXVkb0VsZW1lbnRV
cGRhdGUsIEJFRk9SRSk7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnVwZGF0ZUFmdGVy
RGVzY2VuZGFudHMoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3R5bGU6OkVsZW1lbnRVcGRhdGVz
KiB1cGRhdGVzKQoreworICAgIGlmICh1cGRhdGVzKQorICAgICAgICBnZW5lcmF0ZWRDb250ZW50
KCkudXBkYXRlUHNldWRvRWxlbWVudChlbGVtZW50LCB1cGRhdGVzLT5hZnRlclBzZXVkb0VsZW1l
bnRVcGRhdGUsIEFGVEVSKTsKKworICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJl
cigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZXNl
IGZ1bmN0aW9ucyBkbyByZW5kZXIgdHJlZSBtdXRhdGlvbnMgdGhhdCByZXF1aXJlIGRlc2NlbmRh
bnQgcmVuZGVyZXJzLgorICAgIGlmIChpczxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKSkKKyAgICAg
ICAgRmlyc3RMZXR0ZXI6OnVwZGF0ZShkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKSk7
CisgICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPigqcmVuZGVyZXIpKQorICAgICAgICBMaXN0SXRl
bTo6dXBkYXRlTWFya2VyKG1fYnVpbGRlciwgZG93bmNhc3Q8UmVuZGVyTGlzdEl0ZW0+KCpyZW5k
ZXJlcikpOworICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikpCisgICAgICAg
IE11bHRpQ29sdW1uOjp1cGRhdGUoZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIp
KTsKKworICAgIGlmIChlbGVtZW50Lmhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpICYm
IHVwZGF0ZXMgJiYgdXBkYXRlcy0+dXBkYXRlLmNoYW5nZSA9PSBTdHlsZTo6RGV0YWNoKQorICAg
ICAgICBlbGVtZW50LmRpZEF0dGFjaFJlbmRlcmVycygpOworfQorCitzdGF0aWMgYm9vbCBwc2V1
ZG9TdHlsZUNhY2hlSXNJbnZhbGlkKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBSZW5kZXJTdHls
ZSogbmV3U3R5bGUpCit7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOworCisgICAgY29uc3QgUHNldWRvU3R5bGVDYWNoZSogcHNldWRvU3R5
bGVDYWNoZSA9IGN1cnJlbnRTdHlsZS5jYWNoZWRQc2V1ZG9TdHlsZXMoKTsKKyAgICBpZiAoIXBz
ZXVkb1N0eWxlQ2FjaGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoYXV0byYg
Y2FjaGUgOiAqcHNldWRvU3R5bGVDYWNoZSkgeworICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9
IGNhY2hlLT5zdHlsZVR5cGUoKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiBuZXdQc2V1ZG9TdHlsZSA9IHJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFBzZXVk
b1N0eWxlUmVxdWVzdChwc2V1ZG9JZCksIG5ld1N0eWxlLCBuZXdTdHlsZSk7CisgICAgICAgIGlm
ICghbmV3UHNldWRvU3R5bGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYg
KCpuZXdQc2V1ZG9TdHlsZSAhPSAqY2FjaGUpIHsKKyAgICAgICAgICAgIG5ld1N0eWxlLT5hZGRD
YWNoZWRQc2V1ZG9TdHlsZShXVEZNb3ZlKG5ld1BzZXVkb1N0eWxlKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnVwZGF0ZUVsZW1lbnRSZW5kZXJlcihFbGVtZW50JiBlbGVt
ZW50LCBjb25zdCBTdHlsZTo6RWxlbWVudFVwZGF0ZSYgdXBkYXRlKQoreworI2lmIFBMQVRGT1JN
KElPUykKKyAgICBDaGVja0ZvclZpc2liaWxpdHlDaGFuZ2UgY2hlY2tGb3JWaXNpYmlsaXR5Q2hh
bmdlKGVsZW1lbnQpOworI2VuZGlmCisKKyAgICBib29sIHNob3VsZFRlYXJEb3duUmVuZGVyZXJz
ID0gdXBkYXRlLmNoYW5nZSA9PSBTdHlsZTo6RGV0YWNoICYmIChlbGVtZW50LnJlbmRlcmVyKCkg
fHwgZWxlbWVudC5oYXNEaXNwbGF5Q29udGVudHMoKSk7CisgICAgaWYgKHNob3VsZFRlYXJEb3du
UmVuZGVyZXJzKSB7CisgICAgICAgIGlmICghZWxlbWVudC5yZW5kZXJlcigpKSB7CisgICAgICAg
ICAgICAvLyBXZSBtYXkgYmUgdGVhcmluZyBkb3duIGEgZGVzY2VuZGFudCByZW5kZXJlciBjYWNo
ZWQgaW4gcmVuZGVyVHJlZVBvc2l0aW9uLgorICAgICAgICAgICAgcmVuZGVyVHJlZVBvc2l0aW9u
KCkuaW52YWxpZGF0ZU5leHRTaWJsaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBkaXNw
bGF5Om5vbmUgY2FuY2VscyBhbmltYXRpb25zLgorICAgICAgICBhdXRvIHRlYXJkb3duVHlwZSA9
IHVwZGF0ZS5zdHlsZS0+ZGlzcGxheSgpID09IE5PTkUgPyBUZWFyZG93blR5cGU6OlJlbmRlcmVy
VXBkYXRlQ2FuY2VsaW5nQW5pbWF0aW9ucyA6IFRlYXJkb3duVHlwZTo6UmVuZGVyZXJVcGRhdGU7
CisgICAgICAgIHRlYXJEb3duUmVuZGVyZXJzKGVsZW1lbnQsIHRlYXJkb3duVHlwZSk7CisKKyAg
ICAgICAgcmVuZGVyaW5nUGFyZW50KCkuZGlkQ3JlYXRlT3JEZXN0cm95Q2hpbGRSZW5kZXJlciA9
IHRydWU7CisgICAgfQorCisgICAgYm9vbCBoYXNEaXNwbGF5Q29udGVudHMgPSB1cGRhdGUuc3R5
bGUtPmRpc3BsYXkoKSA9PSBDT05URU5UUzsKKyAgICBpZiAoaGFzRGlzcGxheUNvbnRlbnRzKQor
ICAgICAgICBlbGVtZW50LnN0b3JlRGlzcGxheUNvbnRlbnRzU3R5bGUoUmVuZGVyU3R5bGU6OmNs
b25lUHRyKCp1cGRhdGUuc3R5bGUpKTsKKyAgICBlbHNlCisgICAgICAgIGVsZW1lbnQucmVzZXRD
b21wdXRlZFN0eWxlKCk7CisKKyAgICBib29sIHNob3VsZENyZWF0ZU5ld1JlbmRlcmVyID0gIWVs
ZW1lbnQucmVuZGVyZXIoKSAmJiAhaGFzRGlzcGxheUNvbnRlbnRzOworICAgIGlmIChzaG91bGRD
cmVhdGVOZXdSZW5kZXJlcikgeworICAgICAgICBpZiAoZWxlbWVudC5oYXNDdXN0b21TdHlsZVJl
c29sdmVDYWxsYmFja3MoKSkKKyAgICAgICAgICAgIGVsZW1lbnQud2lsbEF0dGFjaFJlbmRlcmVy
cygpOworICAgICAgICBjcmVhdGVSZW5kZXJlcihlbGVtZW50LCBSZW5kZXJTdHlsZTo6Y2xvbmUo
KnVwZGF0ZS5zdHlsZSkpOworCisgICAgICAgIHJlbmRlcmluZ1BhcmVudCgpLmRpZENyZWF0ZU9y
RGVzdHJveUNoaWxkUmVuZGVyZXIgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFlbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBy
ZW5kZXJlciA9ICplbGVtZW50LnJlbmRlcmVyKCk7CisKKyAgICBpZiAodXBkYXRlLnJlY29tcG9z
aXRlTGF5ZXIpIHsKKyAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNsb25l
KCp1cGRhdGUuc3R5bGUpLCBTdHlsZURpZmZlcmVuY2VSZWNvbXBvc2l0ZUxheWVyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh1cGRhdGUuY2hhbmdlID09IFN0eWxlOjpOb0No
YW5nZSkgeworICAgICAgICBpZiAocHNldWRvU3R5bGVDYWNoZUlzSW52YWxpZCgmcmVuZGVyZXIs
IHVwZGF0ZS5zdHlsZS5nZXQoKSkpIHsKKyAgICAgICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKFJl
bmRlclN0eWxlOjpjbG9uZSgqdXBkYXRlLnN0eWxlKSwgU3R5bGVEaWZmZXJlbmNlRXF1YWwpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICByZW5kZXJlci5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmUoKnVwZGF0ZS5zdHlsZSks
IFN0eWxlRGlmZmVyZW5jZUVxdWFsKTsKK30KKwordm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6Y3Jl
YXRlUmVuZGVyZXIoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKK3sKKyAg
ICBhdXRvIGNvbXB1dGVJbnNlcnRpb25Qb3NpdGlvbiA9IFt0aGlzLCAmZWxlbWVudF0gKCkgewor
ICAgICAgICByZW5kZXJUcmVlUG9zaXRpb24oKS5jb21wdXRlTmV4dFNpYmxpbmcoZWxlbWVudCk7
CisgICAgICAgIHJldHVybiByZW5kZXJUcmVlUG9zaXRpb24oKTsKKyAgICB9OworICAgIAorICAg
IGlmICghc2hvdWxkQ3JlYXRlUmVuZGVyZXIoZWxlbWVudCwgcmVuZGVyVHJlZVBvc2l0aW9uKCku
cGFyZW50KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXJJ
c05lZWRlZChzdHlsZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlclRyZWVQb3NpdGlv
biBpbnNlcnRpb25Qb3NpdGlvbiA9IGNvbXB1dGVJbnNlcnRpb25Qb3NpdGlvbigpOworICAgIGF1
dG8gbmV3UmVuZGVyZXIgPSBlbGVtZW50LmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihXVEZNb3ZlKHN0
eWxlKSwgaW5zZXJ0aW9uUG9zaXRpb24pOworICAgIGlmICghbmV3UmVuZGVyZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghaW5zZXJ0aW9uUG9zaXRpb24ucGFyZW50KCkuaXNDaGlsZEFs
bG93ZWQoKm5ld1JlbmRlcmVyLCBuZXdSZW5kZXJlci0+c3R5bGUoKSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGVsZW1lbnQuc2V0UmVuZGVyZXIobmV3UmVuZGVyZXIuZ2V0KCkpOworCisgICAg
bmV3UmVuZGVyZXItPmluaXRpYWxpemVTdHlsZSgpOworCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQorICAgIGlmIChtX2RvY3VtZW50LndlYmtpdElzRnVsbFNjcmVlbigpICYmIG1fZG9jdW1l
bnQud2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkgPT0gJmVsZW1lbnQpIHsKKyAgICAg
ICAgbmV3UmVuZGVyZXIgPSBSZW5kZXJGdWxsU2NyZWVuOjp3cmFwTmV3UmVuZGVyZXIobV9idWls
ZGVyLCBXVEZNb3ZlKG5ld1JlbmRlcmVyKSwgaW5zZXJ0aW9uUG9zaXRpb24ucGFyZW50KCksIG1f
ZG9jdW1lbnQpOworICAgICAgICBpZiAoIW5ld1JlbmRlcmVyKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorCisgICAgbV9idWlsZGVyLmluc2VydENoaWxkKGluc2VydGlvblBv
c2l0aW9uLCBXVEZNb3ZlKG5ld1JlbmRlcmVyKSk7CisKKyAgICBpZiAoQVhPYmplY3RDYWNoZSog
Y2FjaGUgPSBtX2RvY3VtZW50LmF4T2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgY2FjaGUtPnVwZGF0
ZUNhY2hlQWZ0ZXJOb2RlSXNBdHRhY2hlZCgmZWxlbWVudCk7Cit9CisKK2Jvb2wgUmVuZGVyVHJl
ZVVwZGF0ZXI6OnRleHRSZW5kZXJlcklzTmVlZGVkKGNvbnN0IFRleHQmIHRleHROb2RlKQorewor
ICAgIGF1dG8mIHJlbmRlcmluZ1BhcmVudCA9IHRoaXMtPnJlbmRlcmluZ1BhcmVudCgpOworICAg
IGF1dG8mIHBhcmVudFJlbmRlcmVyID0gcmVuZGVyaW5nUGFyZW50LnJlbmRlclRyZWVQb3NpdGlv
bi0+cGFyZW50KCk7CisgICAgaWYgKCFwYXJlbnRSZW5kZXJlci5jYW5IYXZlQ2hpbGRyZW4oKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChwYXJlbnRSZW5kZXJlci5lbGVtZW50KCkg
JiYgIXBhcmVudFJlbmRlcmVyLmVsZW1lbnQoKS0+Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcih0
ZXh0Tm9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodGV4dE5vZGUuaXNFZGl0
aW5nVGV4dCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIXRleHROb2RlLmxlbmd0
aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF0ZXh0Tm9kZS5kYXRhKCkuaXNB
bGxTcGVjaWFsQ2hhcmFjdGVyczxpc0hUTUxTcGFjZT4oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmluZ1BhcmVudC5wcmV2aW91c0NoaWxkUmVu
ZGVyZXIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBUaGlzIHRleHQgbm9kZSBoYXMg
bm90aGluZyBidXQgd2hpdGUgc3BhY2UuIFdlIG1heSBzdGlsbCBuZWVkIGEgcmVuZGVyZXIgaW4g
c29tZSBjYXNlcy4KKyAgICBpZiAocGFyZW50UmVuZGVyZXIuaXNUYWJsZSgpIHx8IHBhcmVudFJl
bmRlcmVyLmlzVGFibGVSb3coKSB8fCBwYXJlbnRSZW5kZXJlci5pc1RhYmxlU2VjdGlvbigpIHx8
IHBhcmVudFJlbmRlcmVyLmlzUmVuZGVyVGFibGVDb2woKSB8fCBwYXJlbnRSZW5kZXJlci5pc0Zy
YW1lU2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAocGFyZW50UmVuZGVyZXIu
aXNGbGV4aWJsZUJveCgpICYmICFwYXJlbnRSZW5kZXJlci5pc1JlbmRlckJ1dHRvbigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHBhcmVudFJlbmRlcmVyLnN0eWxlKCkucHJlc2Vy
dmVOZXdsaW5lKCkpIC8vIHByZS9wcmUtd3JhcC9wcmUtbGluZSBhbHdheXMgbWFrZSByZW5kZXJl
cnMuCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byogcHJldmlvdXNSZW5kZXJlciA9
IHJlbmRlcmluZ1BhcmVudC5wcmV2aW91c0NoaWxkUmVuZGVyZXI7CisgICAgaWYgKHByZXZpb3Vz
UmVuZGVyZXIgJiYgcHJldmlvdXNSZW5kZXJlci0+aXNCUigpKSAvLyA8c3Bhbj48YnIvPiA8YnIv
Pjwvc3Bhbj4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHBhcmVudFJlbmRlcmVy
LmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgLy8gPHNwYW4+PGRpdi8+IDxkaXYvPjwvc3Bh
bj4KKyAgICAgICAgaWYgKHByZXZpb3VzUmVuZGVyZXIgJiYgIXByZXZpb3VzUmVuZGVyZXItPmlz
SW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKHBhcmVudFJlbmRlcmVyLmlzUmVuZGVyQmxvY2soKSAmJiAhcGFyZW50UmVuZGVyZXIu
Y2hpbGRyZW5JbmxpbmUoKSAmJiAoIXByZXZpb3VzUmVuZGVyZXIgfHwgIXByZXZpb3VzUmVuZGVy
ZXItPmlzSW5saW5lKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiBmaXJzdCA9IHBhcmVudFJlbmRlcmVyLmZpcnN0Q2hpbGQoKTsK
KyAgICAgICAgd2hpbGUgKGZpcnN0ICYmIGZpcnN0LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3Np
dGlvbmVkKCkpCisgICAgICAgICAgICBmaXJzdCA9IGZpcnN0LT5uZXh0U2libGluZygpOworICAg
ICAgICBSZW5kZXJPYmplY3QqIG5leHRSZW5kZXJlciA9IHRleHROb2RlLnJlbmRlcmVyKCkgPyB0
ZXh0Tm9kZS5yZW5kZXJlcigpIDogIHJlbmRlclRyZWVQb3NpdGlvbigpLm5leHRTaWJsaW5nUmVu
ZGVyZXIodGV4dE5vZGUpOworICAgICAgICBpZiAoIWZpcnN0IHx8IG5leHRSZW5kZXJlciA9PSBm
aXJzdCkgeworICAgICAgICAgICAgLy8gV2hpdGVzcGFjZSBhdCB0aGUgc3RhcnQgb2YgYSBibG9j
ayBqdXN0IGdvZXMgYXdheS4gRG9uJ3QgZXZlbiBtYWtlIGEgcmVuZGVyIG9iamVjdCBmb3IgdGhp
cyB0ZXh0LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpjcmVhdGVUZXh0UmVu
ZGVyZXIoVGV4dCYgdGV4dE5vZGUsIGNvbnN0IFN0eWxlOjpUZXh0VXBkYXRlKiB0ZXh0VXBkYXRl
KQoreworICAgIEFTU0VSVCghdGV4dE5vZGUucmVuZGVyZXIoKSk7CisKKyAgICBhdXRvJiByZW5k
ZXJUcmVlUG9zaXRpb24gPSB0aGlzLT5yZW5kZXJUcmVlUG9zaXRpb24oKTsKKyAgICBhdXRvIHRl
eHRSZW5kZXJlciA9IHRleHROb2RlLmNyZWF0ZVRleHRSZW5kZXJlcihyZW5kZXJUcmVlUG9zaXRp
b24ucGFyZW50KCkuc3R5bGUoKSk7CisKKyAgICByZW5kZXJUcmVlUG9zaXRpb24uY29tcHV0ZU5l
eHRTaWJsaW5nKHRleHROb2RlKTsKKworICAgIGlmICghcmVuZGVyVHJlZVBvc2l0aW9uLnBhcmVu
dCgpLmlzQ2hpbGRBbGxvd2VkKCp0ZXh0UmVuZGVyZXIsIHJlbmRlclRyZWVQb3NpdGlvbi5wYXJl
bnQoKS5zdHlsZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4dE5vZGUuc2V0UmVuZGVy
ZXIodGV4dFJlbmRlcmVyLmdldCgpKTsKKworICAgIGlmICh0ZXh0VXBkYXRlICYmIHRleHRVcGRh
dGUtPmluaGVyaXRlZERpc3BsYXlDb250ZW50c1N0eWxlICYmICp0ZXh0VXBkYXRlLT5pbmhlcml0
ZWREaXNwbGF5Q29udGVudHNTdHlsZSkgeworICAgICAgICAvLyBXcmFwIHRleHQgcmVuZGVyZXIg
aW50byBhbm9ueW1vdXMgaW5saW5lIHNvIHdlIGNhbiBnaXZlIGl0IGEgc3R5bGUuCisgICAgICAg
IC8vIFRoaXMgaXMgdG8gc3VwcG9ydCAiPGRpdiBzdHlsZT0nZGlzcGxheTpjb250ZW50cztjb2xv
cjpncmVlbic+dGV4dDwvZGl2PiIgdHlwZSBjYXNlcworICAgICAgICBhdXRvIG5ld0Rpc3BsYXlD
b250ZW50c0Fub255bW91c1dyYXBwZXIgPSBXZWJDb3JlOjpjcmVhdGVSZW5kZXJlcjxSZW5kZXJJ
bmxpbmU+KHRleHROb2RlLmRvY3VtZW50KCksIFJlbmRlclN0eWxlOjpjbG9uZSgqKnRleHRVcGRh
dGUtPmluaGVyaXRlZERpc3BsYXlDb250ZW50c1N0eWxlKSk7CisgICAgICAgIG5ld0Rpc3BsYXlD
b250ZW50c0Fub255bW91c1dyYXBwZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgICAgICBhdXRv
JiBkaXNwbGF5Q29udGVudHNBbm9ueW1vdXNXcmFwcGVyID0gKm5ld0Rpc3BsYXlDb250ZW50c0Fu
b255bW91c1dyYXBwZXI7CisgICAgICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZChyZW5kZXJUcmVl
UG9zaXRpb24sIFdURk1vdmUobmV3RGlzcGxheUNvbnRlbnRzQW5vbnltb3VzV3JhcHBlcikpOwor
CisgICAgICAgIHRleHRSZW5kZXJlci0+c2V0SW5saW5lV3JhcHBlckZvckRpc3BsYXlDb250ZW50
cygmZGlzcGxheUNvbnRlbnRzQW5vbnltb3VzV3JhcHBlcik7CisgICAgICAgIG1fYnVpbGRlci5p
bnNlcnRDaGlsZChkaXNwbGF5Q29udGVudHNBbm9ueW1vdXNXcmFwcGVyLCBXVEZNb3ZlKHRleHRS
ZW5kZXJlcikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9idWlsZGVyLmluc2Vy
dENoaWxkKHJlbmRlclRyZWVQb3NpdGlvbiwgV1RGTW92ZSh0ZXh0UmVuZGVyZXIpKTsKK30KKwor
dm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dXBkYXRlVGV4dFJlbmRlcmVyKFRleHQmIHRleHQsIGNv
bnN0IFN0eWxlOjpUZXh0VXBkYXRlKiB0ZXh0VXBkYXRlKQoreworICAgIGF1dG8qIGV4aXN0aW5n
UmVuZGVyZXIgPSB0ZXh0LnJlbmRlcmVyKCk7CisgICAgYm9vbCBuZWVkc1JlbmRlcmVyID0gdGV4
dFJlbmRlcmVySXNOZWVkZWQodGV4dCk7CisKKyAgICBpZiAoZXhpc3RpbmdSZW5kZXJlciAmJiB0
ZXh0VXBkYXRlICYmIHRleHRVcGRhdGUtPmluaGVyaXRlZERpc3BsYXlDb250ZW50c1N0eWxlKSB7
CisgICAgICAgIGlmIChleGlzdGluZ1JlbmRlcmVyLT5pbmxpbmVXcmFwcGVyRm9yRGlzcGxheUNv
bnRlbnRzKCkgfHwgKnRleHRVcGRhdGUtPmluaGVyaXRlZERpc3BsYXlDb250ZW50c1N0eWxlKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgdXBkYXRlIHdpdGhvdXQgdGVhcmRvd24u
CisgICAgICAgICAgICB0ZWFyRG93blRleHRSZW5kZXJlcih0ZXh0KTsKKyAgICAgICAgICAgIGV4
aXN0aW5nUmVuZGVyZXIgPSBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGV4
aXN0aW5nUmVuZGVyZXIpIHsKKyAgICAgICAgaWYgKG5lZWRzUmVuZGVyZXIpIHsKKyAgICAgICAg
ICAgIGlmICh0ZXh0VXBkYXRlKQorICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVuZGVyZXItPnNl
dFRleHRXaXRoT2Zmc2V0KHRleHQuZGF0YSgpLCB0ZXh0VXBkYXRlLT5vZmZzZXQsIHRleHRVcGRh
dGUtPmxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGVh
ckRvd25UZXh0UmVuZGVyZXIodGV4dCk7CisgICAgICAgIHJlbmRlcmluZ1BhcmVudCgpLmRpZENy
ZWF0ZU9yRGVzdHJveUNoaWxkUmVuZGVyZXIgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmICghbmVlZHNSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOworICAgIGNyZWF0ZVRl
eHRSZW5kZXJlcih0ZXh0LCB0ZXh0VXBkYXRlKTsKKyAgICByZW5kZXJpbmdQYXJlbnQoKS5kaWRD
cmVhdGVPckRlc3Ryb3lDaGlsZFJlbmRlcmVyID0gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJUcmVl
VXBkYXRlcjo6c3RvcmVQcmV2aW91c1JlbmRlcmVyKE5vZGUmIG5vZGUpCit7CisgICAgYXV0byog
cmVuZGVyZXIgPSBub2RlLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuOworICAgIEFTU0VSVChyZW5kZXJpbmdQYXJlbnQoKS5wcmV2aW91c0NoaWxkUmVuZGVy
ZXIgIT0gcmVuZGVyZXIpOworICAgIHJlbmRlcmluZ1BhcmVudCgpLnByZXZpb3VzQ2hpbGRSZW5k
ZXJlciA9IHJlbmRlcmVyOworfQorCit2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJl
bmRlcmVycyhFbGVtZW50JiByb290KQoreworICAgIGF1dG8qIHZpZXcgPSByb290LmRvY3VtZW50
KCkucmVuZGVyVmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIFJl
bmRlclRyZWVCdWlsZGVyIGJ1aWxkZXIoKnZpZXcpOworICAgIHRlYXJEb3duUmVuZGVyZXJzKHJv
b3QsIFRlYXJkb3duVHlwZTo6RnVsbCk7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnRl
YXJEb3duUmVuZGVyZXIoVGV4dCYgdGV4dCkKK3sKKyAgICBhdXRvKiB2aWV3ID0gdGV4dC5kb2N1
bWVudCgpLnJlbmRlclZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKyAg
ICBSZW5kZXJUcmVlQnVpbGRlciBidWlsZGVyKCp2aWV3KTsKKyAgICB0ZWFyRG93blRleHRSZW5k
ZXJlcih0ZXh0KTsKK30KKwordm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRvd25SZW5kZXJl
cnMoRWxlbWVudCYgcm9vdCwgVGVhcmRvd25UeXBlIHRlYXJkb3duVHlwZSkKK3sKKyAgICBXaWRn
ZXRIaWVyYXJjaHlVcGRhdGVzU3VzcGVuc2lvblNjb3BlIHN1c3BlbmRXaWRnZXRIaWVyYXJjaHlV
cGRhdGVzOworCisgICAgVmVjdG9yPEVsZW1lbnQqLCAzMD4gdGVhcmRvd25TdGFjazsKKworICAg
IGF1dG8gcHVzaCA9IFsmXSAoRWxlbWVudCYgZWxlbWVudCkgeworICAgICAgICBpZiAoZWxlbWVu
dC5oYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSkKKyAgICAgICAgICAgIGVsZW1lbnQu
d2lsbERldGFjaFJlbmRlcmVycygpOworICAgICAgICB0ZWFyZG93blN0YWNrLmFwcGVuZCgmZWxl
bWVudCk7CisgICAgfTsKKworICAgIGF1dG8mIGFuaW1hdGlvbkNvbnRyb2xsZXIgPSByb290LmRv
Y3VtZW50KCkuZnJhbWUoKS0+YW5pbWF0aW9uKCk7CisKKyAgICBhdXRvIHBvcCA9IFsmXSAodW5z
aWduZWQgZGVwdGgpIHsKKyAgICAgICAgd2hpbGUgKHRlYXJkb3duU3RhY2suc2l6ZSgpID4gZGVw
dGgpIHsKKyAgICAgICAgICAgIGF1dG8mIGVsZW1lbnQgPSAqdGVhcmRvd25TdGFjay50YWtlTGFz
dCgpOworCisgICAgICAgICAgICBpZiAodGVhcmRvd25UeXBlID09IFRlYXJkb3duVHlwZTo6RnVs
bCB8fCB0ZWFyZG93blR5cGUgPT0gVGVhcmRvd25UeXBlOjpSZW5kZXJlclVwZGF0ZUNhbmNlbGlu
Z0FuaW1hdGlvbnMpCisgICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlci5jYW5jZWxB
bmltYXRpb25zKGVsZW1lbnQpOworCisgICAgICAgICAgICBpZiAodGVhcmRvd25UeXBlID09IFRl
YXJkb3duVHlwZTo6RnVsbCkKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsZWFySG92ZXJBbmRB
Y3RpdmVTdGF0dXNCZWZvcmVEZXRhY2hpbmdSZW5kZXJlcigpOworCisgICAgICAgICAgICBHZW5l
cmF0ZWRDb250ZW50OjpyZW1vdmVCZWZvcmVQc2V1ZG9FbGVtZW50KGVsZW1lbnQpOworICAgICAg
ICAgICAgR2VuZXJhdGVkQ29udGVudDo6cmVtb3ZlQWZ0ZXJQc2V1ZG9FbGVtZW50KGVsZW1lbnQp
OworCisgICAgICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCkp
IHsKKyAgICAgICAgICAgICAgICByZW5kZXJlci0+cmVtb3ZlRnJvbVBhcmVudEFuZERlc3Ryb3lD
bGVhbmluZ1VwQW5vbnltb3VzV3JhcHBlcnMoKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnNl
dFJlbmRlcmVyKG51bGxwdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVsZW1l
bnQuaGFzQ3VzdG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkpCisgICAgICAgICAgICAgICAgZWxl
bWVudC5kaWREZXRhY2hSZW5kZXJlcnMoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBwdXNo
KHJvb3QpOworCisgICAgYXV0byBkZXNjZW5kYW50cyA9IGNvbXBvc2VkVHJlZURlc2NlbmRhbnRz
KHJvb3QpOworICAgIGZvciAoYXV0byBpdCA9IGRlc2NlbmRhbnRzLmJlZ2luKCksIGVuZCA9IGRl
c2NlbmRhbnRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgcG9wKGl0LmRlcHRo
KCkpOworCisgICAgICAgIGlmIChpczxUZXh0PigqaXQpKSB7CisgICAgICAgICAgICB0ZWFyRG93
blRleHRSZW5kZXJlcihkb3duY2FzdDxUZXh0PigqaXQpKTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgcHVzaChkb3duY2FzdDxFbGVtZW50PigqaXQpKTsKKyAg
ICB9CisKKyAgICBwb3AoMCk7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3du
VGV4dFJlbmRlcmVyKFRleHQmIHRleHQpCit7CisgICAgYXV0byogcmVuZGVyZXIgPSB0ZXh0LnJl
bmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOworICAgIHJlbmRl
cmVyLT5yZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveUNsZWFuaW5nVXBBbm9ueW1vdXNXcmFwcGVy
cygpOworICAgIHRleHQuc2V0UmVuZGVyZXIobnVsbHB0cik7Cit9CisKK1JlbmRlclZpZXcmIFJl
bmRlclRyZWVVcGRhdGVyOjpyZW5kZXJWaWV3KCkKK3sKKyAgICByZXR1cm4gKm1fZG9jdW1lbnQu
cmVuZGVyVmlldygpOworfQorCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIEVWaXNpYmlsaXR5
IGVsZW1lbnRJbXBsaWNpdFZpc2liaWxpdHkoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3sKKyAg
ICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVy
KQorICAgICAgICByZXR1cm4gVklTSUJMRTsKKworICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXIt
PnN0eWxlKCk7CisKKyAgICBhdXRvIHdpZHRoID0gc3R5bGUud2lkdGgoKTsKKyAgICBhdXRvIGhl
aWdodCA9IHN0eWxlLmhlaWdodCgpOworICAgIGlmICgod2lkdGguaXNGaXhlZCgpICYmIHdpZHRo
LnZhbHVlKCkgPD0gMCkgfHwgKGhlaWdodC5pc0ZpeGVkKCkgJiYgaGVpZ2h0LnZhbHVlKCkgPD0g
MCkpCisgICAgICAgIHJldHVybiBISURERU47CisKKyAgICBhdXRvIHRvcCA9IHN0eWxlLnRvcCgp
OworICAgIGF1dG8gbGVmdCA9IHN0eWxlLmxlZnQoKTsKKyAgICBpZiAobGVmdC5pc0ZpeGVkKCkg
JiYgd2lkdGguaXNGaXhlZCgpICYmIC1sZWZ0LnZhbHVlKCkgPj0gd2lkdGgudmFsdWUoKSkKKyAg
ICAgICAgcmV0dXJuIEhJRERFTjsKKworICAgIGlmICh0b3AuaXNGaXhlZCgpICYmIGhlaWdodC5p
c0ZpeGVkKCkgJiYgLXRvcC52YWx1ZSgpID49IGhlaWdodC52YWx1ZSgpKQorICAgICAgICByZXR1
cm4gSElEREVOOworICAgIHJldHVybiBWSVNJQkxFOworfQorCitDaGVja0ZvclZpc2liaWxpdHlD
aGFuZ2U6OkNoZWNrRm9yVmlzaWJpbGl0eUNoYW5nZShjb25zdCBFbGVtZW50JiBlbGVtZW50KQor
ICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX3ByZXZpb3VzRGlzcGxheShlbGVtZW50
LnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LnJlbmRlclN0eWxlKCktPmRpc3BsYXkoKSA6IE5PTkUp
CisgICAgLCBtX3ByZXZpb3VzVmlzaWJpbGl0eShlbGVtZW50LnJlbmRlclN0eWxlKCkgPyBlbGVt
ZW50LnJlbmRlclN0eWxlKCktPnZpc2liaWxpdHkoKSA6IEhJRERFTikKKyAgICAsIG1fcHJldmlv
dXNJbXBsaWNpdFZpc2liaWxpdHkoV0tPYnNlcnZpbmdDb250ZW50Q2hhbmdlcygpICYmIFdLT2Jz
ZXJ2ZWRDb250ZW50Q2hhbmdlKCkgIT0gV0tDb250ZW50VmlzaWJpbGl0eUNoYW5nZSA/IGVsZW1l
bnRJbXBsaWNpdFZpc2liaWxpdHkoZWxlbWVudCkgOiBWSVNJQkxFKQoreworfQorCitDaGVja0Zv
clZpc2liaWxpdHlDaGFuZ2U6On5DaGVja0ZvclZpc2liaWxpdHlDaGFuZ2UoKQoreworICAgIGlm
ICghV0tPYnNlcnZpbmdDb250ZW50Q2hhbmdlcygpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KG1fZWxlbWVudC5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgYXV0byogc3R5bGUgPSBtX2VsZW1lbnQucmVuZGVyU3R5bGUoKTsKKyAgICBpZiAoIXN0eWxl
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKChtX3ByZXZpb3VzRGlzcGxheSA9PSBOT05FICYm
IHN0eWxlLT5kaXNwbGF5KCkgIT0gTk9ORSkgfHwgKG1fcHJldmlvdXNWaXNpYmlsaXR5ID09IEhJ
RERFTiAmJiBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IEhJRERFTikKKyAgICAgICAgfHwgKG1fcHJl
dmlvdXNJbXBsaWNpdFZpc2liaWxpdHkgPT0gSElEREVOICYmIGVsZW1lbnRJbXBsaWNpdFZpc2li
aWxpdHkobV9lbGVtZW50KSA9PSBWSVNJQkxFKSkKKyAgICAgICAgV0tTZXRPYnNlcnZlZENvbnRl
bnRDaGFuZ2UoV0tDb250ZW50VmlzaWJpbGl0eUNoYW5nZSk7Cit9CisjZW5kaWYKKworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRy
ZWVVcGRhdGVyLmgJKHJldmlzaW9uIDIyNjAwOSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3R5bGUv
UmVuZGVyVHJlZVVwZGF0ZXIuaDoyMjYwMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
dXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJU
cmVlQnVpbGRlci5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVQb3NpdGlvbi5oIgorI2luY2x1ZGUg
IlN0eWxlQ2hhbmdlLmgiCisjaW5jbHVkZSAiU3R5bGVVcGRhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDb250YWluZXJOb2RlOworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBFbGVtZW50
OworY2xhc3MgTm9kZTsKK2NsYXNzIFJlbmRlclN0eWxlOworY2xhc3MgVGV4dDsKKworY2xhc3Mg
UmVuZGVyVHJlZVVwZGF0ZXIgeworcHVibGljOgorICAgIFJlbmRlclRyZWVVcGRhdGVyKERvY3Vt
ZW50Jik7CisgICAgflJlbmRlclRyZWVVcGRhdGVyKCk7CisKKyAgICB2b2lkIGNvbW1pdChzdGQ6
OnVuaXF1ZV9wdHI8Y29uc3QgU3R5bGU6OlVwZGF0ZT4pOworCisgICAgc3RhdGljIHZvaWQgdGVh
ckRvd25SZW5kZXJlcnMoRWxlbWVudCYpOworICAgIHN0YXRpYyB2b2lkIHRlYXJEb3duUmVuZGVy
ZXIoVGV4dCYpOworCisgICAgY2xhc3MgRmlyc3RMZXR0ZXI7CisgICAgY2xhc3MgTGlzdEl0ZW07
CisKK3ByaXZhdGU6CisgICAgY2xhc3MgR2VuZXJhdGVkQ29udGVudDsKKyAgICBjbGFzcyBNdWx0
aUNvbHVtbjsKKworICAgIHZvaWQgdXBkYXRlUmVuZGVyVHJlZShDb250YWluZXJOb2RlJiByb290
KTsKKyAgICB2b2lkIHVwZGF0ZVRleHRSZW5kZXJlcihUZXh0JiwgY29uc3QgU3R5bGU6OlRleHRV
cGRhdGUqKTsKKyAgICB2b2lkIGNyZWF0ZVRleHRSZW5kZXJlcihUZXh0JiwgY29uc3QgU3R5bGU6
OlRleHRVcGRhdGUqKTsKKyAgICB2b2lkIHVwZGF0ZUVsZW1lbnRSZW5kZXJlcihFbGVtZW50Jiwg
Y29uc3QgU3R5bGU6OkVsZW1lbnRVcGRhdGUmKTsKKyAgICB2b2lkIGNyZWF0ZVJlbmRlcmVyKEVs
ZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKKyAgICB2b2lkIHVwZGF0ZUJlZm9yZURlc2NlbmRhbnRz
KEVsZW1lbnQmLCBjb25zdCBTdHlsZTo6RWxlbWVudFVwZGF0ZXMqKTsKKyAgICB2b2lkIHVwZGF0
ZUFmdGVyRGVzY2VuZGFudHMoRWxlbWVudCYsIGNvbnN0IFN0eWxlOjpFbGVtZW50VXBkYXRlcyop
OworICAgIGJvb2wgdGV4dFJlbmRlcmVySXNOZWVkZWQoY29uc3QgVGV4dCYgdGV4dE5vZGUpOwor
ICAgIHZvaWQgc3RvcmVQcmV2aW91c1JlbmRlcmVyKE5vZGUmKTsKKworICAgIHN0cnVjdCBQYXJl
bnQgeworICAgICAgICBFbGVtZW50KiBlbGVtZW50IHsgbnVsbHB0ciB9OworICAgICAgICBjb25z
dCBTdHlsZTo6RWxlbWVudFVwZGF0ZXMqIHVwZGF0ZXMgeyBudWxscHRyIH07CisgICAgICAgIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyVHJlZVBvc2l0aW9uPiByZW5kZXJUcmVlUG9zaXRpb247CisKKyAg
ICAgICAgYm9vbCBkaWRDcmVhdGVPckRlc3Ryb3lDaGlsZFJlbmRlcmVyIHsgZmFsc2UgfTsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiBwcmV2aW91c0NoaWxkUmVuZGVyZXIgeyBudWxscHRyIH07CisK
KyAgICAgICAgUGFyZW50KENvbnRhaW5lck5vZGUmIHJvb3QpOworICAgICAgICBQYXJlbnQoRWxl
bWVudCYsIGNvbnN0IFN0eWxlOjpFbGVtZW50VXBkYXRlcyopOworICAgIH07CisgICAgUGFyZW50
JiBwYXJlbnQoKSB7IHJldHVybiBtX3BhcmVudFN0YWNrLmxhc3QoKTsgfQorICAgIFBhcmVudCYg
cmVuZGVyaW5nUGFyZW50KCk7CisgICAgUmVuZGVyVHJlZVBvc2l0aW9uJiByZW5kZXJUcmVlUG9z
aXRpb24oKTsKKworICAgIEdlbmVyYXRlZENvbnRlbnQmIGdlbmVyYXRlZENvbnRlbnQoKSB7IHJl
dHVybiAqbV9nZW5lcmF0ZWRDb250ZW50OyB9CisKKyAgICB2b2lkIHB1c2hQYXJlbnQoRWxlbWVu
dCYsIGNvbnN0IFN0eWxlOjpFbGVtZW50VXBkYXRlcyopOworICAgIHZvaWQgcG9wUGFyZW50KCk7
CisgICAgdm9pZCBwb3BQYXJlbnRzVG9EZXB0aCh1bnNpZ25lZCBkZXB0aCk7CisKKyAgICBlbnVt
IGNsYXNzIFRlYXJkb3duVHlwZSB7IEZ1bGwsIFJlbmRlcmVyVXBkYXRlLCBSZW5kZXJlclVwZGF0
ZUNhbmNlbGluZ0FuaW1hdGlvbnMgfTsKKyAgICBzdGF0aWMgdm9pZCB0ZWFyRG93blJlbmRlcmVy
cyhFbGVtZW50JiwgVGVhcmRvd25UeXBlKTsKKyAgICBzdGF0aWMgdm9pZCB0ZWFyRG93blRleHRS
ZW5kZXJlcihUZXh0Jik7CisKKyAgICBSZW5kZXJWaWV3JiByZW5kZXJWaWV3KCk7CisKKyAgICBE
b2N1bWVudCYgbV9kb2N1bWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgU3R5bGU6OlVw
ZGF0ZT4gbV9zdHlsZVVwZGF0ZTsKKworICAgIFZlY3RvcjxQYXJlbnQ+IG1fcGFyZW50U3RhY2s7
CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R2VuZXJhdGVkQ29udGVudD4gbV9nZW5lcmF0ZWRDb250
ZW50OworCisgICAgUmVuZGVyVHJlZUJ1aWxkZXIgbV9idWlsZGVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1Jl
bmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcAko
cmV2aXNpb24gMjI2MDA5KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBk
YXRlckZpcnN0TGV0dGVyLmNwcDoyMjYwMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
dXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNyBEYXZpZCBTbWl0aCAoY2F0Zmlz
aC5tYW5AZ21haWwuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTEsIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oIgorCisjaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJl
bmRlckJ1dHRvbi5oIgorI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJlbmRl
clJ1YnlSdW4uaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRG
cmFnbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIFJlbmRlclN0eWxlIHN0eWxlRm9yRmlyc3RMZXR0ZXIoY29uc3Qg
UmVuZGVyQmxvY2smIGZpcnN0TGV0dGVyQmxvY2ssIGNvbnN0IFJlbmRlck9iamVjdCYgZmlyc3RM
ZXR0ZXJDb250YWluZXIpCit7CisgICAgYXV0byogY29udGFpbmVyRmlyc3RMZXR0ZXJTdHlsZSA9
IGZpcnN0TGV0dGVyQmxvY2suZ2V0Q2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSLCAmZmly
c3RMZXR0ZXJDb250YWluZXIuZmlyc3RMaW5lU3R5bGUoKSk7CisgICAgLy8gRklYTUU6IFRoZXJl
IGFwcGVhcnMgdG8gYmUgc29tZSBwYXRoIHdoZXJlIHdlIGhhdmUgYSBmaXJzdCBsZXR0ZXIgcmVu
ZGVyZXIgd2l0aG91dCBmaXJzdCBsZXR0ZXIgc3R5bGUuCisgICAgQVNTRVJUKGNvbnRhaW5lckZp
cnN0TGV0dGVyU3R5bGUpOworICAgIGF1dG8gZmlyc3RMZXR0ZXJTdHlsZSA9IFJlbmRlclN0eWxl
OjpjbG9uZShjb250YWluZXJGaXJzdExldHRlclN0eWxlID8gKmNvbnRhaW5lckZpcnN0TGV0dGVy
U3R5bGUgOiBmaXJzdExldHRlckNvbnRhaW5lci5maXJzdExpbmVTdHlsZSgpKTsKKworICAgIC8v
IElmIHdlIGhhdmUgYW4gaW5pdGlhbCBsZXR0ZXIgZHJvcCB0aGF0IGlzID49IDEsIHRoZW4gd2Ug
bmVlZCB0byBmb3JjZSBmbG9hdGluZyB0byBiZSBvbi4KKyAgICBpZiAoZmlyc3RMZXR0ZXJTdHls
ZS5pbml0aWFsTGV0dGVyRHJvcCgpID49IDEgJiYgIWZpcnN0TGV0dGVyU3R5bGUuaXNGbG9hdGlu
ZygpKQorICAgICAgICBmaXJzdExldHRlclN0eWxlLnNldEZsb2F0aW5nKGZpcnN0TGV0dGVyU3R5
bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTGVmdEZsb2F0IDogUmlnaHRGbG9hdCk7CisK
KyAgICAvLyBXZSBoYXZlIHRvIGNvbXB1dGUgdGhlIGNvcnJlY3QgZm9udC1zaXplIGZvciB0aGUg
Zmlyc3QtbGV0dGVyIGlmIGl0IGhhcyBhbiBpbml0aWFsIGxldHRlciBoZWlnaHQgc2V0LgorICAg
IGF1dG8qIHBhcmFncmFwaCA9IGZpcnN0TGV0dGVyQ29udGFpbmVyLmlzUmVuZGVyQmxvY2tGbG93
KCkgPyAmZmlyc3RMZXR0ZXJDb250YWluZXIgOiBmaXJzdExldHRlckNvbnRhaW5lci5jb250YWlu
aW5nQmxvY2soKTsKKyAgICBpZiAoZmlyc3RMZXR0ZXJTdHlsZS5pbml0aWFsTGV0dGVySGVpZ2h0
KCkgPj0gMSAmJiBmaXJzdExldHRlclN0eWxlLmZvbnRNZXRyaWNzKCkuaGFzQ2FwSGVpZ2h0KCkg
JiYgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuaGFzQ2FwSGVpZ2h0KCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IEZvciBpZGVvZ3JhcGhpYyBiYXNlbGluZXMsIHdlIHdhbnQgdG8gZ28g
ZnJvbSBsaW5lIGVkZ2UgdG8gbGluZSBlZGdlLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKE4tMSkq
bGluZS1oZWlnaHQgKyB0aGUgZm9udCBoZWlnaHQuCisgICAgICAgIC8vIFdlIGRvbid0IHlldCBz
dXBwb3J0IGlkZW9ncmFwaGljIGJhc2VsaW5lcy4KKyAgICAgICAgLy8gRm9yIGFuIE4tbGluZSBm
aXJzdC1sZXR0ZXIgYW5kIGZvciBhbHBoYWJldGljIGJhc2VsaW5lcywgdGhlIGNhcC1oZWlnaHQg
b2YgdGhlIGZpcnN0IGxldHRlciBuZWVkcyB0byBlcXVhbCAoTi0xKSpsaW5lLWhlaWdodCBvZiBw
YXJhZ3JhcGggbGluZXMgKyBjYXAtaGVpZ2h0IG9mIHRoZSBwYXJhZ3JhcGgKKyAgICAgICAgLy8g
TWF0aGVtYXRpY2FsbHkgd2UgY2FuJ3QgcmVseSBvbiBmb250LXNpemUsIHNpbmNlIGZvbnQoKS5o
ZWlnaHQoKSBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1hdGNoLiBGb3IgcmVsaWFiaWxpdHksIHRoZSBi
ZXN0IGFwcHJvYWNoIGlzIHNpbXBseSB0bworICAgICAgICAvLyBjb21wYXJlIHRoZSBmaW5hbCBt
ZWFzdXJlZCBjYXAtaGVpZ2h0cyBvZiB0aGUgdHdvIGZvbnRzIGluIG9yZGVyIHRvIGdldCB0byB0
aGUgY2xvc2VzdCBwb3NzaWJsZSB2YWx1ZS4KKyAgICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXRM
aW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbkluaXRpYWxMZXR0ZXIpOworICAgICAgICBpbnQg
bGluZUhlaWdodCA9IHBhcmFncmFwaC0+c3R5bGUoKS5jb21wdXRlZExpbmVIZWlnaHQoKTsKKwor
ICAgICAgICAvLyBTZXQgdGhlIGZvbnQgdG8gYmUgb25lIGxpbmUgdG9vIGJpZyBhbmQgdGhlbiBy
YXRjaGV0IGJhY2sgdG8gZ2V0IHRvIGEgcHJlY2lzZSBmaXQuIFdlIGNhbid0IGp1c3Qgc2V0IHRo
ZSBkZXNpcmVkIGZvbnQgc2l6ZSBiYXNlZCBvZmYgZm9udCBoZWlnaHQgbWV0cmljcworICAgICAg
ICAvLyBiZWNhdXNlIG1hbnkgZm9udHMgYmFrZSBhc2NlbnQgaW50byB0aGUgZm9udCBtZXRyaWNz
LiBUaGVyZWZvcmUgd2UgaGF2ZSB0byBsb29rIGF0IGFjdHVhbCBtZWFzdXJlZCBjYXAgaGVpZ2h0
IHZhbHVlcyBpbiBvcmRlciB0byBrbm93IHdoZW4gd2UgaGF2ZSBhIGdvb2QgZml0LgorICAgICAg
ICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IGZpcnN0TGV0dGVyU3R5bGUuZm9udERlc2NyaXB0
aW9uKCk7CisgICAgICAgIGZsb2F0IGNhcFJhdGlvID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250TWV0
cmljcygpLmZsb2F0Q2FwSGVpZ2h0KCkgLyBmaXJzdExldHRlclN0eWxlLmNvbXB1dGVkRm9udFBp
eGVsU2l6ZSgpOworICAgICAgICBmbG9hdCBzdGFydGluZ0ZvbnRTaXplID0gKChmaXJzdExldHRl
clN0eWxlLmluaXRpYWxMZXR0ZXJIZWlnaHQoKSAtIDEpICogbGluZUhlaWdodCArIHBhcmFncmFw
aC0+c3R5bGUoKS5mb250TWV0cmljcygpLmNhcEhlaWdodCgpKSAvIGNhcFJhdGlvOworICAgICAg
ICBuZXdGb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzdGFydGluZ0ZvbnRTaXplKTsK
KyAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzdGFydGluZ0ZvbnRT
aXplKTsKKyAgICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9u
dERlc2NyaXB0aW9uKTsKKyAgICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5mb250Q2FzY2FkZSgpLnVw
ZGF0ZShmaXJzdExldHRlclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCkpOworCisg
ICAgICAgIGludCBkZXNpcmVkQ2FwSGVpZ2h0ID0gKGZpcnN0TGV0dGVyU3R5bGUuaW5pdGlhbExl
dHRlckhlaWdodCgpIC0gMSkgKiBsaW5lSGVpZ2h0ICsgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRN
ZXRyaWNzKCkuY2FwSGVpZ2h0KCk7CisgICAgICAgIGludCBhY3R1YWxDYXBIZWlnaHQgPSBmaXJz
dExldHRlclN0eWxlLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCk7CisgICAgICAgIHdoaWxlIChh
Y3R1YWxDYXBIZWlnaHQgPiBkZXNpcmVkQ2FwSGVpZ2h0KSB7CisgICAgICAgICAgICBhdXRvIG5l
d0ZvbnREZXNjcmlwdGlvbiA9IGZpcnN0TGV0dGVyU3R5bGUuZm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShuZXdGb250RGVz
Y3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpIC0gMSk7CisgICAgICAgICAgICBuZXdGb250RGVzY3Jp
cHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAt
MSk7CisgICAgICAgICAgICBmaXJzdExldHRlclN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihuZXdG
b250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5mb250Q2FzY2Fk
ZSgpLnVwZGF0ZShmaXJzdExldHRlclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCkp
OworICAgICAgICAgICAgYWN0dWFsQ2FwSGVpZ2h0ID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250TWV0
cmljcygpLmNhcEhlaWdodCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRm9yY2UgaW5s
aW5lIGRpc3BsYXkgKGV4Y2VwdCBmb3IgZmxvYXRpbmcgZmlyc3QtbGV0dGVycykuCisgICAgZmly
c3RMZXR0ZXJTdHlsZS5zZXREaXNwbGF5KGZpcnN0TGV0dGVyU3R5bGUuaXNGbG9hdGluZygpID8g
QkxPQ0sgOiBJTkxJTkUpOworICAgIC8vIENTUzIgc2F5cyBmaXJzdC1sZXR0ZXIgY2FuJ3QgYmUg
cG9zaXRpb25lZC4KKyAgICBmaXJzdExldHRlclN0eWxlLnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0
aW9uKTsKKyAgICByZXR1cm4gZmlyc3RMZXR0ZXJTdHlsZTsKK30KKworLy8gQ1NTIDIuMSBodHRw
Oi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zZWxlY3Rvci5odG1sI2ZpcnN0LWxldHRlcgorLy8gIlB1
bmN0dWF0aW9uIChpLmUsIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiBVbmljb2RlIFtVTklDT0RFXSBp
biB0aGUgIm9wZW4iIChQcyksICJjbG9zZSIgKFBlKSwKKy8vICJpbml0aWFsIiAoUGkpLiAiZmlu
YWwiIChQZikgYW5kICJvdGhlciIgKFBvKSBwdW5jdHVhdGlvbiBjbGFzc2VzKSwgdGhhdCBwcmVj
ZWRlcyBvciBmb2xsb3dzIHRoZSBmaXJzdCBsZXR0ZXIgc2hvdWxkIGJlIGluY2x1ZGVkIgorc3Rh
dGljIGlubGluZSBib29sIGlzUHVuY3R1YXRpb25Gb3JGaXJzdExldHRlcihVQ2hhciBjKQorewor
ICAgIHJldHVybiBVX0dFVF9HQ19NQVNLKGMpICYgKFVfR0NfUFNfTUFTSyB8IFVfR0NfUEVfTUFT
SyB8IFVfR0NfUElfTUFTSyB8IFVfR0NfUEZfTUFTSyB8IFVfR0NfUE9fTUFTSyk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRTa2lwRm9yRmlyc3RMZXR0ZXIoVUNoYXIgYykKK3sKKyAg
ICByZXR1cm4gaXNTcGFjZU9yTmV3bGluZShjKSB8fCBjID09IG5vQnJlYWtTcGFjZSB8fCBpc1B1
bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIoYyk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZUZpcnN0
TGV0dGVyU3R5bGUoUmVuZGVyQmxvY2smIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRlck9iamVjdCYg
Y3VycmVudENoaWxkKQoreworICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyID0gY3VycmVu
dENoaWxkLnBhcmVudCgpOworICAgIEFTU0VSVChmaXJzdExldHRlci0+aXNGaXJzdExldHRlcigp
KTsKKworICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQ29udGFpbmVyID0gZmlyc3RMZXR0
ZXItPnBhcmVudCgpOworICAgIGF1dG8gcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVy
KGZpcnN0TGV0dGVyQmxvY2ssICpmaXJzdExldHRlckNvbnRhaW5lcik7CisgICAgQVNTRVJUKGZp
cnN0TGV0dGVyLT5pc0Zsb2F0aW5nKCkgfHwgZmlyc3RMZXR0ZXItPmlzSW5saW5lKCkpOworCisg
ICAgaWYgKFN0eWxlOjpkZXRlcm1pbmVDaGFuZ2UoZmlyc3RMZXR0ZXItPnN0eWxlKCksIHBzZXVk
b1N0eWxlKSA9PSBTdHlsZTo6RGV0YWNoKSB7CisgICAgICAgIC8vIFRoZSBmaXJzdC1sZXR0ZXIg
cmVuZGVyZXIgbmVlZHMgdG8gYmUgcmVwbGFjZWQuIENyZWF0ZSBhIG5ldyByZW5kZXJlciBvZiB0
aGUgcmlnaHQgdHlwZS4KKyAgICAgICAgUmVuZGVyUHRyPFJlbmRlckJveE1vZGVsT2JqZWN0PiBu
ZXdGaXJzdExldHRlcjsKKyAgICAgICAgaWYgKHBzZXVkb1N0eWxlLmRpc3BsYXkoKSA9PSBJTkxJ
TkUpCisgICAgICAgICAgICBuZXdGaXJzdExldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlcklu
bGluZT4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyID0gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVyQmxvY2tGbG93PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUo
cHNldWRvU3R5bGUpKTsKKyAgICAgICAgbmV3Rmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgp
OworICAgICAgICBuZXdGaXJzdExldHRlci0+c2V0SXNGaXJzdExldHRlcigpOworCisgICAgICAg
IC8vIE1vdmUgdGhlIGZpcnN0IGxldHRlciBpbnRvIHRoZSBuZXcgcmVuZGVyZXIuCisgICAgICAg
IHdoaWxlIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RMZXR0ZXItPmZpcnN0Q2hpbGQoKSkg
eworICAgICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpjaGlsZCkpCisgICAgICAgICAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKS5yZW1vdmVBbmREZXN0cm95VGV4dEJveGVz
KCk7CisgICAgICAgICAgICBhdXRvIHRvTW92ZSA9IGZpcnN0TGV0dGVyLT50YWtlQ2hpbGQoKmNo
aWxkKTsKKyAgICAgICAgICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENo
aWxkKCpuZXdGaXJzdExldHRlciwgV1RGTW92ZSh0b01vdmUpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcgPSBmaXJzdExldHRlci0+bmV4dFNpYmxpbmco
KTsKKyAgICAgICAgaWYgKFJlbmRlclRleHRGcmFnbWVudCogcmVtYWluaW5nVGV4dCA9IGRvd25j
YXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqZmlyc3RMZXR0ZXIpLmZpcnN0TGV0dGVyUmVtYWlu
aW5nVGV4dCgpKSB7CisgICAgICAgICAgICBBU1NFUlQocmVtYWluaW5nVGV4dC0+aXNBbm9ueW1v
dXMoKSB8fCByZW1haW5pbmdUZXh0LT50ZXh0Tm9kZSgpLT5yZW5kZXJlcigpID09IHJlbWFpbmlu
Z1RleHQpOworICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgb2xkIHJlbmRlcmVyIHdpdGggdGhl
IG5ldyBvbmUuCisgICAgICAgICAgICByZW1haW5pbmdUZXh0LT5zZXRGaXJzdExldHRlcigqbmV3
Rmlyc3RMZXR0ZXIpOworICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXItPnNldEZpcnN0TGV0dGVy
UmVtYWluaW5nVGV4dCgqcmVtYWluaW5nVGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgZmlyc3RM
ZXR0ZXJDb250YWluZXItPnJlbW92ZUFuZERlc3Ryb3lDaGlsZCgqZmlyc3RMZXR0ZXIpOworICAg
ICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNlcnRDaGlsZCgqZmlyc3RMZXR0
ZXJDb250YWluZXIsIFdURk1vdmUobmV3Rmlyc3RMZXR0ZXIpLCBuZXh0U2libGluZyk7CisgICAg
fSBlbHNlCisgICAgICAgIGZpcnN0TGV0dGVyLT5zZXRTdHlsZShXVEZNb3ZlKHBzZXVkb1N0eWxl
KSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIoUmVuZGVyQmxv
Y2smIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRlclRleHQmIGN1cnJlbnRUZXh0Q2hpbGQpCit7Cisg
ICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXIgPSBjdXJyZW50VGV4dENoaWxk
LnBhcmVudCgpOworICAgIGF1dG8gcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZp
cnN0TGV0dGVyQmxvY2ssICpmaXJzdExldHRlckNvbnRhaW5lcik7CisgICAgUmVuZGVyUHRyPFJl
bmRlckJveE1vZGVsT2JqZWN0PiBuZXdGaXJzdExldHRlcjsKKyAgICBpZiAocHNldWRvU3R5bGUu
ZGlzcGxheSgpID09IElOTElORSkKKyAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVhdGVSZW5k
ZXJlcjxSZW5kZXJJbmxpbmU+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShw
c2V1ZG9TdHlsZSkpOworICAgIGVsc2UKKyAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVhdGVS
ZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RG
TW92ZShwc2V1ZG9TdHlsZSkpOworICAgIG5ld0ZpcnN0TGV0dGVyLT5pbml0aWFsaXplU3R5bGUo
KTsKKyAgICBuZXdGaXJzdExldHRlci0+c2V0SXNGaXJzdExldHRlcigpOworCisgICAgYXV0byYg
Zmlyc3RMZXR0ZXIgPSAqbmV3Rmlyc3RMZXR0ZXI7CisgICAgUmVuZGVyVHJlZUJ1aWxkZXI6OmN1
cnJlbnQoKS0+aW5zZXJ0Q2hpbGQoKmZpcnN0TGV0dGVyQ29udGFpbmVyLCBXVEZNb3ZlKG5ld0Zp
cnN0TGV0dGVyKSwgJmN1cnJlbnRUZXh0Q2hpbGQpOworCisgICAgLy8gVGhlIG9yaWdpbmFsIHN0
cmluZyBpcyBnb2luZyB0byBiZSBlaXRoZXIgYSBnZW5lcmF0ZWQgY29udGVudCBzdHJpbmcgb3Ig
YSBET00gbm9kZSdzCisgICAgLy8gc3RyaW5nLiBXZSB3YW50IHRoZSBvcmlnaW5hbCBzdHJpbmcg
YmVmb3JlIGl0IGdvdCB0cmFuc2Zvcm1lZCBpbiBjYXNlIGZpcnN0LWxldHRlciBoYXMKKyAgICAv
LyBubyB0ZXh0LXRyYW5zZm9ybSBvciBhIGRpZmZlcmVudCB0ZXh0LXRyYW5zZm9ybSBhcHBsaWVk
IHRvIGl0LgorICAgIFN0cmluZyBvbGRUZXh0ID0gY3VycmVudFRleHRDaGlsZC5vcmlnaW5hbFRl
eHQoKTsKKyAgICBBU1NFUlQoIW9sZFRleHQuaXNOdWxsKCkpOworCisgICAgaWYgKCFvbGRUZXh0
LmlzRW1wdHkoKSkgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworCisgICAgICAgIC8v
IEFjY291bnQgZm9yIGxlYWRpbmcgc3BhY2VzIGFuZCBwdW5jdHVhdGlvbi4KKyAgICAgICAgd2hp
bGUgKGxlbmd0aCA8IG9sZFRleHQubGVuZ3RoKCkgJiYgc2hvdWxkU2tpcEZvckZpcnN0TGV0dGVy
KG9sZFRleHRbbGVuZ3RoXSkpCisgICAgICAgICAgICBsZW5ndGgrKzsKKworICAgICAgICAvLyBB
Y2NvdW50IGZvciBmaXJzdCBncmFwaGVtZSBjbHVzdGVyLgorICAgICAgICBsZW5ndGggKz0gbnVt
Q2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyhTdHJpbmdWaWV3KG9sZFRleHQpLnN1YnN0cmlu
ZyhsZW5ndGgpLCAxKTsKKworICAgICAgICAvLyBLZWVwIGxvb2tpbmcgZm9yIHdoaXRlc3BhY2Ug
YW5kIGFsbG93ZWQgcHVuY3R1YXRpb24sIGJ1dCBhdm9pZAorICAgICAgICAvLyBhY2N1bXVsYXRp
bmcganVzdCB3aGl0ZXNwYWNlIGludG8gdGhlIDpmaXJzdC1sZXR0ZXIuCisgICAgICAgIGZvciAo
dW5zaWduZWQgc2Nhbkxlbmd0aCA9IGxlbmd0aDsgc2Nhbkxlbmd0aCA8IG9sZFRleHQubGVuZ3Ro
KCk7ICsrc2Nhbkxlbmd0aCkgeworICAgICAgICAgICAgVUNoYXIgYyA9IG9sZFRleHRbc2Nhbkxl
bmd0aF07CisKKyAgICAgICAgICAgIGlmICghc2hvdWxkU2tpcEZvckZpcnN0TGV0dGVyKGMpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoaXNQdW5jdHVhdGlvbkZv
ckZpcnN0TGV0dGVyKGMpKQorICAgICAgICAgICAgICAgIGxlbmd0aCA9IHNjYW5MZW5ndGggKyAx
OworICAgICAgICB9CisKKyAgICAgICAgYXV0byogdGV4dE5vZGUgPSBjdXJyZW50VGV4dENoaWxk
LnRleHROb2RlKCk7CisgICAgICAgIGF1dG8qIGJlZm9yZUNoaWxkID0gY3VycmVudFRleHRDaGls
ZC5uZXh0U2libGluZygpOworICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQW5k
RGVzdHJveUNoaWxkKGN1cnJlbnRUZXh0Q2hpbGQpOworCisgICAgICAgIC8vIENvbnN0cnVjdCBh
IHRleHQgZnJhZ21lbnQgZm9yIHRoZSB0ZXh0IGFmdGVyIHRoZSBmaXJzdCBsZXR0ZXIuCisgICAg
ICAgIC8vIFRoaXMgdGV4dCBmcmFnbWVudCBtaWdodCBiZSBlbXB0eS4KKyAgICAgICAgUmVuZGVy
UHRyPFJlbmRlclRleHRGcmFnbWVudD4gbmV3UmVtYWluaW5nVGV4dDsKKyAgICAgICAgaWYgKHRl
eHROb2RlKSB7CisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0gY3JlYXRlUmVuZGVyZXI8
UmVuZGVyVGV4dEZyYWdtZW50PigqdGV4dE5vZGUsIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5s
ZW5ndGgoKSAtIGxlbmd0aCk7CisgICAgICAgICAgICB0ZXh0Tm9kZS0+c2V0UmVuZGVyZXIobmV3
UmVtYWluaW5nVGV4dC5nZXQoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbmV3UmVt
YWluaW5nVGV4dCA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRleHRGcmFnbWVudD4oZmlyc3RMZXR0
ZXJCbG9jay5kb2N1bWVudCgpLCBvbGRUZXh0LCBsZW5ndGgsIG9sZFRleHQubGVuZ3RoKCkgLSBs
ZW5ndGgpOworCisgICAgICAgIFJlbmRlclRleHRGcmFnbWVudCYgcmVtYWluaW5nVGV4dCA9ICpu
ZXdSZW1haW5pbmdUZXh0OworICAgICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5p
bnNlcnRDaGlsZCgqZmlyc3RMZXR0ZXJDb250YWluZXIsIFdURk1vdmUobmV3UmVtYWluaW5nVGV4
dCksIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgcmVtYWluaW5nVGV4dC5zZXRGaXJzdExldHRlcihm
aXJzdExldHRlcik7CisgICAgICAgIGZpcnN0TGV0dGVyLnNldEZpcnN0TGV0dGVyUmVtYWluaW5n
VGV4dChyZW1haW5pbmdUZXh0KTsKKworICAgICAgICAvLyBjb25zdHJ1Y3QgdGV4dCBmcmFnbWVu
dCBmb3IgdGhlIGZpcnN0IGxldHRlcgorICAgICAgICBhdXRvIGxldHRlciA9IGNyZWF0ZVJlbmRl
cmVyPFJlbmRlclRleHRGcmFnbWVudD4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBvbGRU
ZXh0LCAwLCBsZW5ndGgpOworCisgICAgICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCkt
Pmluc2VydENoaWxkKGZpcnN0TGV0dGVyLCBXVEZNb3ZlKGxldHRlcikpOworICAgIH0KK30KKwor
c3RhdGljIGJvb2wgc3VwcG9ydHNGaXJzdExldHRlcihSZW5kZXJCbG9jayYgYmxvY2spCit7Cisg
ICAgaWYgKGlzPFJlbmRlckJ1dHRvbj4oYmxvY2spKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4oYmxvY2spKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKGlzPFJlbmRlclNWR1RleHQ+KGJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChpczxSZW5kZXJSdWJ5UnVuPihibG9jaykpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gYmxvY2suY2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCk7Cit9CisKK3Zv
aWQgUmVuZGVyVHJlZVVwZGF0ZXI6OkZpcnN0TGV0dGVyOjp1cGRhdGUoUmVuZGVyQmxvY2smIGJs
b2NrKQoreworICAgIGlmICghYmxvY2suc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRU
RVIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdXBwb3J0c0ZpcnN0TGV0dGVyKGJsb2Nr
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlZmFj
dG9yZWQsIGZpcnN0TGV0dGVyQ29udGFpbmVyIGlzIG5vdCBuZWVkZWQuCisgICAgUmVuZGVyT2Jq
ZWN0KiBmaXJzdExldHRlclJlbmRlcmVyOworICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVy
Q29udGFpbmVyOworICAgIGJsb2NrLmdldEZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyUmVuZGVyZXIs
IGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKKworICAgIGlmICghZmlyc3RMZXR0ZXJSZW5kZXJlcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT3RoZXIgY29udGFpbmVycyBhcmUgaGFuZGxlZCB3
aGVuIHVwZGF0aW5nIHRoZWlyIHJlbmRlcmVycy4KKyAgICBpZiAoJmJsb2NrICE9IGZpcnN0TGV0
dGVyQ29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgY2hpbGQgYWxy
ZWFkeSBoYXMgc3R5bGUsIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLCBzbyB3ZSBq
dXN0IHdhbnQKKyAgICAvLyB0byB1cGRhdGUgaXQuCisgICAgaWYgKGZpcnN0TGV0dGVyUmVuZGVy
ZXItPnBhcmVudCgpLT5zdHlsZSgpLnN0eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUikgeworICAg
ICAgICB1cGRhdGVGaXJzdExldHRlclN0eWxlKGJsb2NrLCAqZmlyc3RMZXR0ZXJSZW5kZXJlcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzPFJlbmRlclRleHQ+KGZpcnN0
TGV0dGVyUmVuZGVyZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBjcmVhdGVGaXJzdExldHRl
clJlbmRlcmVyKGJsb2NrLCBkb3duY2FzdDxSZW5kZXJUZXh0PigqZmlyc3RMZXR0ZXJSZW5kZXJl
cikpOworfQorCit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1Jl
bmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oCShyZXZp
c2lvbiAyMjYwMDkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVy
Rmlyc3RMZXR0ZXIuaDoyMjYwMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlclRy
ZWVVcGRhdGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyQmxvY2s7
CisKK2NsYXNzIFJlbmRlclRyZWVVcGRhdGVyOjpGaXJzdExldHRlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIHZvaWQgdXBkYXRlKFJlbmRlckJsb2NrJik7Cit9OworCit9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcAkocmV2aXNpb24gMjI2MDA5KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRl
bnQuY3BwOjIyNjAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5k
ZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
bmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oIgorCisjaW5jbHVkZSAiQ29udGVudERh
dGEuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJQ
c2V1ZG9FbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyRGVzY2VuZGFudEl0ZXJhdG9yLmgiCisj
aW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisjaW5j
bHVkZSAiUmVuZGVyUXVvdGUuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaCIKKyNpbmNsdWRlICJTdHlsZVRyZWVS
ZXNvbHZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclRyZWVVcGRhdGVyOjpH
ZW5lcmF0ZWRDb250ZW50OjpHZW5lcmF0ZWRDb250ZW50KFJlbmRlclRyZWVVcGRhdGVyJiB1cGRh
dGVyKQorICAgIDogbV91cGRhdGVyKHVwZGF0ZXIpCit7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZVVw
ZGF0ZXI6OkdlbmVyYXRlZENvbnRlbnQ6OnVwZGF0ZVJlbWFpbmluZ1F1b3RlcygpCit7CisgICAg
aWYgKCFtX3VwZGF0ZXIucmVuZGVyVmlldygpLmhhc1F1b3Rlc05lZWRpbmdVcGRhdGUoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIHVwZGF0ZVF1b3Rlc1VwVG8obnVsbHB0cik7CisgICAgbV9wcmV2
aW91c1VwZGF0ZWRRdW90ZSA9IG51bGxwdHI7CisgICAgbV91cGRhdGVyLnJlbmRlclZpZXcoKS5z
ZXRIYXNRdW90ZXNOZWVkaW5nVXBkYXRlKGZhbHNlKTsKK30KKwordm9pZCBSZW5kZXJUcmVlVXBk
YXRlcjo6R2VuZXJhdGVkQ29udGVudDo6dXBkYXRlUXVvdGVzVXBUbyhSZW5kZXJRdW90ZSogbGFz
dFF1b3RlKQoreworICAgIGF1dG8gcXVvdGVSZW5kZXJlcnMgPSBkZXNjZW5kYW50c09mVHlwZTxS
ZW5kZXJRdW90ZT4obV91cGRhdGVyLnJlbmRlclZpZXcoKSk7CisgICAgYXV0byBpdCA9IG1fcHJl
dmlvdXNVcGRhdGVkUXVvdGUgPyArK3F1b3RlUmVuZGVyZXJzLmF0KCptX3ByZXZpb3VzVXBkYXRl
ZFF1b3RlKSA6IHF1b3RlUmVuZGVyZXJzLmJlZ2luKCk7CisgICAgYXV0byBlbmQgPSBxdW90ZVJl
bmRlcmVycy5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGF1
dG8mIHF1b3RlID0gKml0OworICAgICAgICAvLyBRdW90ZSBjaGFyYWN0ZXIgZGVwZW5kcyBvbiBx
dW90ZSBkZXB0aCBzbyB3ZSBjaGFpbiB0aGUgdXBkYXRlcy4KKyAgICAgICAgcXVvdGUudXBkYXRl
UmVuZGVyZXIobV91cGRhdGVyLm1fYnVpbGRlciwgbV9wcmV2aW91c1VwZGF0ZWRRdW90ZSk7Cisg
ICAgICAgIG1fcHJldmlvdXNVcGRhdGVkUXVvdGUgPSAmcXVvdGU7CisgICAgICAgIGlmICgmcXVv
dGUgPT0gbGFzdFF1b3RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQo
IWxhc3RRdW90ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUNvbnRlbnRSZW5kZXJlcnMoUmVu
ZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIsIFJlbmRlckVsZW1lbnQmIHBzZXVkb1JlbmRlcmVyLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgQVNTRVJUKHN0eWxlLmNvbnRlbnREYXRh
KCkpOworCisgICAgZm9yIChjb25zdCBDb250ZW50RGF0YSogY29udGVudCA9IHN0eWxlLmNvbnRl
bnREYXRhKCk7IGNvbnRlbnQ7IGNvbnRlbnQgPSBjb250ZW50LT5uZXh0KCkpIHsKKyAgICAgICAg
YXV0byBjaGlsZCA9IGNvbnRlbnQtPmNyZWF0ZUNvbnRlbnRSZW5kZXJlcihwc2V1ZG9SZW5kZXJl
ci5kb2N1bWVudCgpLCBzdHlsZSk7CisgICAgICAgIGlmIChwc2V1ZG9SZW5kZXJlci5pc0NoaWxk
QWxsb3dlZCgqY2hpbGQsIHN0eWxlKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuaW5zZXJ0Q2hpbGQo
cHNldWRvUmVuZGVyZXIsIFdURk1vdmUoY2hpbGQpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHVwZGF0ZVN0eWxlRm9yQ29udGVudFJlbmRlcmVycyhSZW5kZXJFbGVtZW50JiBwc2V1ZG9SZW5k
ZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIGZvciAoYXV0byYgY29udGVu
dFJlbmRlcmVyIDogZGVzY2VuZGFudHNPZlR5cGU8UmVuZGVyRWxlbWVudD4ocHNldWRvUmVuZGVy
ZXIpKSB7CisgICAgICAgIC8vIFdlIG9ubHkgbWFuYWdlIHRoZSBzdHlsZSBmb3IgdGhlIGdlbmVy
YXRlZCBjb250ZW50IHdoaWNoIG11c3QgYmUgaW1hZ2VzIG9yIHRleHQuCisgICAgICAgIGlmICgh
aXM8UmVuZGVySW1hZ2U+KGNvbnRlbnRSZW5kZXJlcikgJiYgIWlzPFJlbmRlclF1b3RlPihjb250
ZW50UmVuZGVyZXIpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnRlbnRSZW5k
ZXJlci5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlU3R5bGVJbmhlcml0aW5nRnJvbVBzZXVk
b1N0eWxlKHN0eWxlKSk7CisgICAgfQorfQorCit2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpHZW5l
cmF0ZWRDb250ZW50Ojp1cGRhdGVQc2V1ZG9FbGVtZW50KEVsZW1lbnQmIGN1cnJlbnQsIGNvbnN0
IHN0ZDo6b3B0aW9uYWw8U3R5bGU6OkVsZW1lbnRVcGRhdGU+JiB1cGRhdGUsIFBzZXVkb0lkIHBz
ZXVkb0lkKQoreworICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBwc2V1ZG9JZCA9
PSBCRUZPUkUgPyBjdXJyZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKSA6IGN1cnJlbnQuYWZ0ZXJQ
c2V1ZG9FbGVtZW50KCk7CisKKyAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBwc2V1ZG9FbGVtZW50
ID8gcHNldWRvRWxlbWVudC0+cmVuZGVyZXIoKSA6IG51bGxwdHIpCisgICAgICAgIG1fdXBkYXRl
ci5yZW5kZXJUcmVlUG9zaXRpb24oKS5pbnZhbGlkYXRlTmV4dFNpYmxpbmcoKnJlbmRlcmVyKTsK
KworICAgIGlmICghbmVlZHNQc2V1ZG9FbGVtZW50KHVwZGF0ZSkpIHsKKyAgICAgICAgaWYgKHBz
ZXVkb0VsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChwc2V1ZG9JZCA9PSBCRUZPUkUpCisgICAg
ICAgICAgICAgICAgcmVtb3ZlQmVmb3JlUHNldWRvRWxlbWVudChjdXJyZW50KTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZW1vdmVBZnRlclBzZXVkb0VsZW1lbnQoY3VycmVu
dCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxQc2V1
ZG9FbGVtZW50PiBuZXdQc2V1ZG9FbGVtZW50OworICAgIGlmICghcHNldWRvRWxlbWVudCkgewor
ICAgICAgICBuZXdQc2V1ZG9FbGVtZW50ID0gUHNldWRvRWxlbWVudDo6Y3JlYXRlKGN1cnJlbnQs
IHBzZXVkb0lkKTsKKyAgICAgICAgcHNldWRvRWxlbWVudCA9IG5ld1BzZXVkb0VsZW1lbnQuZ2V0
KCk7CisgICAgfQorCisgICAgaWYgKHVwZGF0ZS0+Y2hhbmdlID09IFN0eWxlOjpOb0NoYW5nZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG5ld1BzZXVkb0VsZW1lbnQpIHsKKyAgICAgICAg
aWYgKHBzZXVkb0lkID09IEJFRk9SRSkKKyAgICAgICAgICAgIGN1cnJlbnQuc2V0QmVmb3JlUHNl
dWRvRWxlbWVudChuZXdQc2V1ZG9FbGVtZW50LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBjdXJyZW50LnNldEFmdGVyUHNldWRvRWxlbWVudChuZXdQc2V1ZG9F
bGVtZW50LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKworICAgIGlmICh1cGRhdGUtPnN0eWxl
LT5kaXNwbGF5KCkgPT0gQ09OVEVOVFMpIHsKKyAgICAgICAgLy8gRm9yIGRpc3BsYXk6Y29udGVu
dHMgd2UgY3JlYXRlIGFuIGlubGluZSB3cmFwcGVyIHRoYXQgaW5oZXJpdHMgaXRzCisgICAgICAg
IC8vIHN0eWxlIGZyb20gdGhlIGRpc3BsYXk6Y29udGVudHMgc3R5bGUuCisgICAgICAgIGF1dG8g
Y29udGVudHNTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVQdHIoKTsKKyAgICAgICAgY29udGVu
dHNTdHlsZS0+c2V0U3R5bGVUeXBlKHBzZXVkb0lkKTsKKyAgICAgICAgY29udGVudHNTdHlsZS0+
aW5oZXJpdEZyb20oKnVwZGF0ZS0+c3R5bGUpOworICAgICAgICBjb250ZW50c1N0eWxlLT5jb3B5
Q29udGVudEZyb20oKnVwZGF0ZS0+c3R5bGUpOworCisgICAgICAgIFN0eWxlOjpFbGVtZW50VXBk
YXRlIGNvbnRlbnRzVXBkYXRlIHsgV1RGTW92ZShjb250ZW50c1N0eWxlKSwgdXBkYXRlLT5jaGFu
Z2UsIHVwZGF0ZS0+cmVjb21wb3NpdGVMYXllciB9OworICAgICAgICBtX3VwZGF0ZXIudXBkYXRl
RWxlbWVudFJlbmRlcmVyKCpwc2V1ZG9FbGVtZW50LCBjb250ZW50c1VwZGF0ZSk7CisgICAgICAg
IHBzZXVkb0VsZW1lbnQtPnN0b3JlRGlzcGxheUNvbnRlbnRzU3R5bGUoUmVuZGVyU3R5bGU6OmNs
b25lUHRyKCp1cGRhdGUtPnN0eWxlKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV91cGRhdGVy
LnVwZGF0ZUVsZW1lbnRSZW5kZXJlcigqcHNldWRvRWxlbWVudCwgKnVwZGF0ZSk7CisgICAgICAg
IEFTU0VSVCghcHNldWRvRWxlbWVudC0+aGFzRGlzcGxheUNvbnRlbnRzKCkpOworICAgIH0KKwor
ICAgIGF1dG8qIHBzZXVkb0VsZW1lbnRSZW5kZXJlciA9IHBzZXVkb0VsZW1lbnQtPnJlbmRlcmVy
KCk7CisgICAgaWYgKCFwc2V1ZG9FbGVtZW50UmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICh1cGRhdGUtPmNoYW5nZSA9PSBTdHlsZTo6RGV0YWNoKQorICAgICAgICBjcmVhdGVD
b250ZW50UmVuZGVyZXJzKG1fdXBkYXRlci5tX2J1aWxkZXIsICpwc2V1ZG9FbGVtZW50UmVuZGVy
ZXIsICp1cGRhdGUtPnN0eWxlKTsKKyAgICBlbHNlCisgICAgICAgIHVwZGF0ZVN0eWxlRm9yQ29u
dGVudFJlbmRlcmVycygqcHNldWRvRWxlbWVudFJlbmRlcmVyLCAqdXBkYXRlLT5zdHlsZSk7CisK
KyAgICBpZiAobV91cGRhdGVyLnJlbmRlclZpZXcoKS5oYXNRdW90ZXNOZWVkaW5nVXBkYXRlKCkp
IHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGRlc2NlbmRhbnRzT2ZUeXBlPFJlbmRlclF1
b3RlPigqcHNldWRvRWxlbWVudFJlbmRlcmVyKSkKKyAgICAgICAgICAgIHVwZGF0ZVF1b3Rlc1Vw
VG8oJmNoaWxkKTsKKyAgICB9CisgICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPigqcHNldWRvRWxl
bWVudFJlbmRlcmVyKSkKKyAgICAgICAgTGlzdEl0ZW06OnVwZGF0ZU1hcmtlcihtX3VwZGF0ZXIu
bV9idWlsZGVyLCBkb3duY2FzdDxSZW5kZXJMaXN0SXRlbT4oKnBzZXVkb0VsZW1lbnRSZW5kZXJl
cikpOworfQorCitib29sIFJlbmRlclRyZWVVcGRhdGVyOjpHZW5lcmF0ZWRDb250ZW50OjpuZWVk
c1BzZXVkb0VsZW1lbnQoY29uc3Qgc3RkOjpvcHRpb25hbDxTdHlsZTo6RWxlbWVudFVwZGF0ZT4m
IHVwZGF0ZSkKK3sKKyAgICBpZiAoIXVwZGF0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghbV91cGRhdGVyLnJlbmRlclRyZWVQb3NpdGlvbigpLnBhcmVudCgpLmNhbkhhdmVHZW5l
cmF0ZWRDaGlsZHJlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFwc2V1ZG9F
bGVtZW50UmVuZGVyZXJJc05lZWRlZCh1cGRhdGUtPnN0eWxlLmdldCgpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlclRyZWVVcGRhdGVy
OjpHZW5lcmF0ZWRDb250ZW50OjpyZW1vdmVCZWZvcmVQc2V1ZG9FbGVtZW50KEVsZW1lbnQmIGVs
ZW1lbnQpCit7CisgICAgYXV0byogcHNldWRvRWxlbWVudCA9IGVsZW1lbnQuYmVmb3JlUHNldWRv
RWxlbWVudCgpOworICAgIGlmICghcHNldWRvRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAg
IHRlYXJEb3duUmVuZGVyZXJzKCpwc2V1ZG9FbGVtZW50LCBUZWFyZG93blR5cGU6OkZ1bGwpOwor
ICAgIGVsZW1lbnQuY2xlYXJCZWZvcmVQc2V1ZG9FbGVtZW50KCk7Cit9CisKK3ZvaWQgUmVuZGVy
VHJlZVVwZGF0ZXI6OkdlbmVyYXRlZENvbnRlbnQ6OnJlbW92ZUFmdGVyUHNldWRvRWxlbWVudChF
bGVtZW50JiBlbGVtZW50KQoreworICAgIGF1dG8qIHBzZXVkb0VsZW1lbnQgPSBlbGVtZW50LmFm
dGVyUHNldWRvRWxlbWVudCgpOworICAgIGlmICghcHNldWRvRWxlbWVudCkKKyAgICAgICAgcmV0
dXJuOworICAgIHRlYXJEb3duUmVuZGVyZXJzKCpwc2V1ZG9FbGVtZW50LCBUZWFyZG93blR5cGU6
OkZ1bGwpOworICAgIGVsZW1lbnQuY2xlYXJBZnRlclBzZXVkb0VsZW1lbnQoKTsKK30KKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVy
R2VuZXJhdGVkQ29udGVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaAkocmV2aXNpb24g
MjI2MDA5KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVy
YXRlZENvbnRlbnQuaDoyMjYwMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVu
ZGVyU3R5bGVDb25zdGFudHMuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBSZW5kZXJRdW90ZTsK
KworY2xhc3MgUmVuZGVyVHJlZVVwZGF0ZXI6OkdlbmVyYXRlZENvbnRlbnQgeworcHVibGljOgor
ICAgIEdlbmVyYXRlZENvbnRlbnQoUmVuZGVyVHJlZVVwZGF0ZXImKTsKKworICAgIHZvaWQgdXBk
YXRlUHNldWRvRWxlbWVudChFbGVtZW50JiwgY29uc3Qgc3RkOjpvcHRpb25hbDxTdHlsZTo6RWxl
bWVudFVwZGF0ZT4mLCBQc2V1ZG9JZCk7CisgICAgdm9pZCB1cGRhdGVSZW1haW5pbmdRdW90ZXMo
KTsKKworICAgIHN0YXRpYyB2b2lkIHJlbW92ZUJlZm9yZVBzZXVkb0VsZW1lbnQoRWxlbWVudCYp
OworICAgIHN0YXRpYyB2b2lkIHJlbW92ZUFmdGVyUHNldWRvRWxlbWVudChFbGVtZW50Jik7CisK
K3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVRdW90ZXNVcFRvKFJlbmRlclF1b3RlKik7CisgICAg
CisgICAgYm9vbCBuZWVkc1BzZXVkb0VsZW1lbnQoY29uc3Qgc3RkOjpvcHRpb25hbDxTdHlsZTo6
RWxlbWVudFVwZGF0ZT4mKTsKKworICAgIFJlbmRlclRyZWVVcGRhdGVyJiBtX3VwZGF0ZXI7Cisg
ICAgUmVuZGVyUXVvdGUqIG1fcHJldmlvdXNVcGRhdGVkUXVvdGUgeyBudWxscHRyIH07Cit9Owor
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVw
ZGF0ZXJMaXN0SXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiAyMjYwMDkp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3Bw
OjIyNjAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVl
VXBkYXRlckxpc3RJdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoq
CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqIENv
cHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDEwLCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbmRyZXcgV2VsbGluZ3RvbiAocHJvdG9u
QHdpcmV0YXBwZWQubmV0KQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRl
clRyZWVVcGRhdGVyTGlzdEl0ZW0uaCIKKworI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3Iu
aCIKKyNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyTXVsdGlD
b2x1bW5GbG93LmgiCisjaW5jbHVkZSAiUmVuZGVyUnVieS5oIgorI2luY2x1ZGUgIlJlbmRlclRh
YmxlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJlbmRlckJsb2NrKiBnZXRQ
YXJlbnRPZkZpcnN0TGluZUJveChSZW5kZXJCbG9jayYgY3VycmVudCwgUmVuZGVyT2JqZWN0JiBt
YXJrZXIpCit7CisgICAgYm9vbCBpblF1aXJrc01vZGUgPSBjdXJyZW50LmRvY3VtZW50KCkuaW5R
dWlya3NNb2RlKCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRl
ck9iamVjdD4oY3VycmVudCkpIHsKKyAgICAgICAgaWYgKCZjaGlsZCA9PSAmbWFya2VyKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGNoaWxkLmlzSW5saW5lKCkgJiYgKCFp
czxSZW5kZXJJbmxpbmU+KGNoaWxkKSB8fCBjdXJyZW50LmdlbmVyYXRlc0xpbmVCb3hlc0Zvcklu
bGluZUNoaWxkKCZjaGlsZCkpKQorICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50OworCisgICAg
ICAgIGlmIChjaGlsZC5pc0Zsb2F0aW5nKCkgfHwgY2hpbGQuaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIWlzPFJlbmRlckJsb2Nr
PihjaGlsZCkgfHwgaXM8UmVuZGVyVGFibGU+KGNoaWxkKSB8fCBpczxSZW5kZXJSdWJ5QXNCbG9j
az4oY2hpbGQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzPFJlbmRlckJv
eD4oY2hpbGQpICYmIGRvd25jYXN0PFJlbmRlckJveD4oY2hpbGQpLmlzV3JpdGluZ01vZGVSb290
KCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdEl0ZW0+
KGN1cnJlbnQpICYmIGluUXVpcmtzTW9kZSAmJiBjaGlsZC5ub2RlKCkgJiYgaXNIVE1MTGlzdEVs
ZW1lbnQoKmNoaWxkLm5vZGUoKSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAo
UmVuZGVyQmxvY2sqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oY2hpbGQpLCBtYXJrZXIpKQorICAgICAgICAgICAgcmV0dXJuIGxpbmVCb3g7
CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBSZW5kZXJPYmplY3Qq
IGZpcnN0Tm9uTWFya2VyQ2hpbGQoUmVuZGVyQmxvY2smIHBhcmVudCkKK3sKKyAgICBSZW5kZXJP
YmplY3QqIGNoaWxkID0gcGFyZW50LmZpcnN0Q2hpbGQoKTsKKyAgICB3aGlsZSAoaXM8UmVuZGVy
TGlzdE1hcmtlcj4oY2hpbGQpKQorICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
OworICAgIHJldHVybiBjaGlsZDsKK30KKwordm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0
ZW06OnVwZGF0ZU1hcmtlcihSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyTGlzdEl0
ZW0mIGxpc3RJdGVtUmVuZGVyZXIpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oIWxpc3RJdGVtUmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQo
KS5sYXlvdXRTdGF0ZSgpKTsKKworICAgIGF1dG8mIHN0eWxlID0gbGlzdEl0ZW1SZW5kZXJlci5z
dHlsZSgpOworCisgICAgaWYgKHN0eWxlLmxpc3RTdHlsZVR5cGUoKSA9PSBOb25lTGlzdFN0eWxl
ICYmICghc3R5bGUubGlzdFN0eWxlSW1hZ2UoKSB8fCBzdHlsZS5saXN0U3R5bGVJbWFnZSgpLT5l
cnJvck9jY3VycmVkKCkpKSB7CisgICAgICAgIGlmIChhdXRvKiBtYXJrZXIgPSBsaXN0SXRlbVJl
bmRlcmVyLm1hcmtlclJlbmRlcmVyKCkpCisgICAgICAgICAgICBtYXJrZXItPnJlbW92ZUZyb21Q
YXJlbnRBbmREZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIG5l
d1N0eWxlID0gbGlzdEl0ZW1SZW5kZXJlci5jb21wdXRlTWFya2VyU3R5bGUoKTsKKyAgICBSZW5k
ZXJQdHI8UmVuZGVyTGlzdE1hcmtlcj4gbmV3TWFya2VyUmVuZGVyZXI7CisgICAgYXV0byogbWFy
a2VyUmVuZGVyZXIgPSBsaXN0SXRlbVJlbmRlcmVyLm1hcmtlclJlbmRlcmVyKCk7CisgICAgaWYg
KG1hcmtlclJlbmRlcmVyKQorICAgICAgICBtYXJrZXJSZW5kZXJlci0+c2V0U3R5bGUoV1RGTW92
ZShuZXdTdHlsZSkpOworICAgIGVsc2UgeworICAgICAgICBuZXdNYXJrZXJSZW5kZXJlciA9IFdl
YkNvcmU6OmNyZWF0ZVJlbmRlcmVyPFJlbmRlckxpc3RNYXJrZXI+KGxpc3RJdGVtUmVuZGVyZXIs
IFdURk1vdmUobmV3U3R5bGUpKTsKKyAgICAgICAgbmV3TWFya2VyUmVuZGVyZXItPmluaXRpYWxp
emVTdHlsZSgpOworICAgICAgICBtYXJrZXJSZW5kZXJlciA9IG5ld01hcmtlclJlbmRlcmVyLmdl
dCgpOworICAgICAgICBsaXN0SXRlbVJlbmRlcmVyLnNldE1hcmtlclJlbmRlcmVyKCptYXJrZXJS
ZW5kZXJlcik7CisgICAgfQorCisgICAgUmVuZGVyRWxlbWVudCogY3VycmVudFBhcmVudCA9IG1h
cmtlclJlbmRlcmVyLT5wYXJlbnQoKTsKKyAgICBSZW5kZXJCbG9jayogbmV3UGFyZW50ID0gZ2V0
UGFyZW50T2ZGaXJzdExpbmVCb3gobGlzdEl0ZW1SZW5kZXJlciwgKm1hcmtlclJlbmRlcmVyKTsK
KyAgICBpZiAoIW5ld1BhcmVudCkgeworICAgICAgICAvLyBJZiB0aGUgbWFya2VyIGlzIGN1cnJl
bnRseSBjb250YWluZWQgaW5zaWRlIGFuIGFub255bW91cyBib3gsCisgICAgICAgIC8vIHRoZW4g
d2UgYXJlIHRoZSBvbmx5IGl0ZW0gaW4gdGhhdCBhbm9ueW1vdXMgYm94IChzaW5jZSBubyBsaW5l
IGJveAorICAgICAgICAvLyBwYXJlbnQgd2FzIGZvdW5kKS4gSXQncyBvayB0byBqdXN0IGxlYXZl
IHRoZSBtYXJrZXIgd2hlcmUgaXQgaXMKKyAgICAgICAgLy8gaW4gdGhpcyBjYXNlLgorICAgICAg
ICBpZiAoY3VycmVudFBhcmVudCAmJiBjdXJyZW50UGFyZW50LT5pc0Fub255bW91c0Jsb2NrKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChhdXRvKiBtdWx0aUNvbHVtbkZsb3cg
PSBsaXN0SXRlbVJlbmRlcmVyLm11bHRpQ29sdW1uRmxvdygpKQorICAgICAgICAgICAgbmV3UGFy
ZW50ID0gbXVsdGlDb2x1bW5GbG93OworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdQYXJl
bnQgPSAmbGlzdEl0ZW1SZW5kZXJlcjsKKyAgICB9CisKKyAgICBpZiAobmV3UGFyZW50ICE9IGN1
cnJlbnRQYXJlbnQpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpCisgICAgICAgICAgICBi
dWlsZGVyLmluc2VydENoaWxkKCpuZXdQYXJlbnQsIGN1cnJlbnRQYXJlbnQtPnRha2VDaGlsZCgq
bWFya2VyUmVuZGVyZXIpLCBmaXJzdE5vbk1hcmtlckNoaWxkKCpuZXdQYXJlbnQpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgYnVpbGRlci5pbnNlcnRDaGlsZCgqbmV3UGFyZW50LCBXVEZN
b3ZlKG5ld01hcmtlclJlbmRlcmVyKSwgZmlyc3ROb25NYXJrZXJDaGlsZCgqbmV3UGFyZW50KSk7
CisKKyAgICAgICAgLy8gSWYgY3VycmVudCBwYXJlbnQgaXMgYW4gYW5vbnltb3VzIGJsb2NrIHRo
YXQgaGFzIGxvc3QgYWxsIGl0cyBjaGlsZHJlbiwgZGVzdHJveSBpdC4KKyAgICAgICAgaWYgKGN1
cnJlbnRQYXJlbnQgJiYgY3VycmVudFBhcmVudC0+aXNBbm9ueW1vdXNCbG9jaygpICYmICFjdXJy
ZW50UGFyZW50LT5maXJzdENoaWxkKCkgJiYgIWRvd25jYXN0PFJlbmRlckJsb2NrPigqY3VycmVu
dFBhcmVudCkuY29udGludWF0aW9uKCkpCisgICAgICAgICAgICBjdXJyZW50UGFyZW50LT5yZW1v
dmVGcm9tUGFyZW50QW5kRGVzdHJveSgpOworICAgIH0KK30KKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVl
VXBkYXRlckxpc3RJdGVtLmNwcAkocmV2aXNpb24gMjI2MDA5KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIGZpcnN0Tm9uTWFy
a2VyQ2hpbGQKIAogdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0ZW06OnVwZGF0ZU1hcmtl
cihSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyTGlzdEl0ZW0mIGxpc3RJdGVtUmVu
ZGVyZXIpCiB7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWxpc3RJdGVt
UmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5sYXlvdXRTdGF0ZSgp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFsaXN0SXRl
bVJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkubGF5b3V0U3RhdGUo
KSk7CiAKICAgICBhdXRvJiBzdHlsZSA9IGxpc3RJdGVtUmVuZGVyZXIuc3R5bGUoKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyTGlz
dEl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oCShyZXZpc2lvbiAyMjYwMDkpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaDoyMjYwMDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRl
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJl
ZVVwZGF0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJUcmVlVXBk
YXRlcjo6TGlzdEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHVwZGF0ZU1hcmtlcihS
ZW5kZXJUcmVlQnVpbGRlciYsIFJlbmRlckxpc3RJdGVtJik7Cit9OworCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVt
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1Jl
bmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uY3BwCShyZXZpc2lvbiAyMjYwMDkpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uY3BwOjIyNjAw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRl
ck11bHRpQ29sdW1uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAg
ICAgIChDKSAyMDA3IERhdmlkIFNtaXRoIChjYXRmaXNoLm1hbkBnbWFpbC5jb20pCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAxNSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVl
VXBkYXRlck11bHRpQ29sdW1uLmgiCisKKyNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKKyNp
bmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1
bW5GbG93LmgiCisjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIgorI2luY2x1ZGUgIlJlbmRlclRy
ZWVCdWlsZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBSZW5kZXJUcmVlVXBk
YXRlcjo6TXVsdGlDb2x1bW46OnVwZGF0ZShSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCit7CisgICAg
Ym9vbCBuZWVkc0ZyYWdtZW50ZWRGbG93ID0gZmxvdy5yZXF1aXJlc0NvbHVtbnMoZmxvdy5zdHls
ZSgpLmNvbHVtbkNvdW50KCkpOworICAgIGJvb2wgaGFzRnJhZ21lbnRlZEZsb3cgPSBmbG93Lm11
bHRpQ29sdW1uRmxvdygpOworCisgICAgaWYgKCFoYXNGcmFnbWVudGVkRmxvdyAmJiBuZWVkc0Zy
YWdtZW50ZWRGbG93KSB7CisgICAgICAgIGNyZWF0ZUZyYWdtZW50ZWRGbG93KGZsb3cpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChoYXNGcmFnbWVudGVkRmxvdyAmJiAhbmVlZHNG
cmFnbWVudGVkRmxvdykgeworICAgICAgICBkZXN0cm95RnJhZ21lbnRlZEZsb3coZmxvdyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6Ok11bHRp
Q29sdW1uOjpjcmVhdGVGcmFnbWVudGVkRmxvdyhSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCit7Cisg
ICAgZmxvdy5zZXRDaGlsZHJlbklubGluZShmYWxzZSk7IC8vIERvIHRoaXMgdG8gYXZvaWQgd3Jh
cHBpbmcgaW5saW5lIGNoaWxkcmVuIHRoYXQgYXJlIGp1c3QgZ29pbmcgdG8gbW92ZSBpbnRvIHRo
ZSBmbG93IHRocmVhZC4KKyAgICBmbG93LmRlbGV0ZUxpbmVzKCk7CisgICAgLy8gSWYgdGhpcyBz
b29uLXRvLWJlIG11bHRpY29sdW1uIGZsb3cgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgbXVsdGljb2x1
bW4gY29udGV4dCwgd2UgbmVlZCB0byBtb3ZlIGJhY2sgdGhlIGRlc2NlbmRhbnQgc3Bhbm5lcnMK
KyAgICAvLyB0byB0aGVpciBvcmlnaW5hbCBwb3NpdGlvbiBiZWZvcmUgbW92aW5nIHN1YnRyZWVz
IGFyb3VuZC4KKyAgICBhdXRvKiBlbmNsb3NpbmdmbG93ID0gZmxvdy5lbmNsb3NpbmdGcmFnbWVu
dGVkRmxvdygpOworICAgIGlmIChpczxSZW5kZXJNdWx0aUNvbHVtbkZsb3c+KGVuY2xvc2luZ2Zs
b3cpKSB7CisgICAgICAgIGF1dG8mIHNwYW5uZXJzID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1
bW5GbG93PihlbmNsb3NpbmdmbG93KS0+c3Bhbm5lck1hcCgpOworICAgICAgICBWZWN0b3I8UmVu
ZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqPiBwbGFjZWhvbGRlcnNUb0RlbGV0ZTsK
KyAgICAgICAgZm9yIChhdXRvJiBzcGFubmVyQW5kUGxhY2Vob2xkZXIgOiBzcGFubmVycykgewor
ICAgICAgICAgICAgYXV0byYgcGxhY2Vob2xkZXIgPSAqc3Bhbm5lckFuZFBsYWNlaG9sZGVyLnZh
bHVlOworICAgICAgICAgICAgaWYgKCFwbGFjZWhvbGRlci5pc0Rlc2NlbmRhbnRPZigmZmxvdykp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBwbGFjZWhvbGRlcnNUb0Rl
bGV0ZS5hcHBlbmQoJnBsYWNlaG9sZGVyKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8q
IHBsYWNlaG9sZGVyIDogcGxhY2Vob2xkZXJzVG9EZWxldGUpIHsKKyAgICAgICAgICAgIGF1dG8q
IHNwYW5uZXIgPSBwbGFjZWhvbGRlci0+c3Bhbm5lcigpOworICAgICAgICAgICAgaWYgKCFzcGFu
bmVyKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBNb3ZlIHRoZSBz
cGFubmVyIGJhY2sgdG8gaXRzIG9yaWdpbmFsIHBvc2l0aW9uLgorICAgICAgICAgICAgYXV0byYg
c3Bhbm5lck9yaWdpbmFsUGFyZW50ID0gKnBsYWNlaG9sZGVyLT5wYXJlbnQoKTsKKyAgICAgICAg
ICAgIC8vIERldGFjaGluZyB0aGUgc3Bhbm5lciB0YWtlcyBjYXJlIG9mIHJlbW92aW5nIHRoZSBw
bGFjZWhvbGRlciAoYW5kIG1lcmdlcyB0aGUgUmVuZGVyTXVsdGlDb2x1bW5TZXRzKS4KKyAgICAg
ICAgICAgIGF1dG8gc3Bhbm5lclRvUmVJbnNlcnQgPSBzcGFubmVyLT5wYXJlbnQoKS0+dGFrZUNo
aWxkKCpzcGFubmVyKTsKKyAgICAgICAgICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCkt
Pmluc2VydENoaWxkKHNwYW5uZXJPcmlnaW5hbFBhcmVudCwgV1RGTW92ZShzcGFubmVyVG9SZUlu
c2VydCkpOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBuZXdGcmFnbWVudGVkRmxvdyA9
IFdlYkNvcmU6OmNyZWF0ZVJlbmRlcmVyPFJlbmRlck11bHRpQ29sdW1uRmxvdz4oZmxvdy5kb2N1
bWVudCgpLCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShmbG93
LnN0eWxlKCksIEJMT0NLKSk7CisgICAgbmV3RnJhZ21lbnRlZEZsb3ctPmluaXRpYWxpemVTdHls
ZSgpOworICAgIGF1dG8mIGZyYWdtZW50ZWRGbG93ID0gKm5ld0ZyYWdtZW50ZWRGbG93OworICAg
IGZsb3cuUmVuZGVyQmxvY2s6OmFkZENoaWxkKCpSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgp
LCBXVEZNb3ZlKG5ld0ZyYWdtZW50ZWRGbG93KSk7CisKKyAgICAvLyBSZXBhcmVudCBjaGlsZHJl
biBwcmVjZWRpbmcgdGhlIGZyYWdtZW50ZWQgZmxvdyBpbnRvIHRoZSBmcmFnbWVudGVkIGZsb3cu
CisgICAgZmxvdy5tb3ZlQ2hpbGRyZW5UbygmZnJhZ21lbnRlZEZsb3csIGZsb3cuZmlyc3RDaGls
ZCgpLCAmZnJhZ21lbnRlZEZsb3csIFJlbmRlckJveE1vZGVsT2JqZWN0OjpOb3JtYWxpemVBZnRl
ckluc2VydGlvbjo6WWVzKTsKKyAgICBpZiAoZmxvdy5pc0ZpZWxkc2V0KCkpIHsKKyAgICAgICAg
Ly8gS2VlcCBsZWdlbmRzIG91dCBvZiB0aGUgZmxvdyB0aHJlYWQuCisgICAgICAgIGZvciAoYXV0
byYgYm94IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyQm94PihmcmFnbWVudGVkRmxvdykpIHsKKyAg
ICAgICAgICAgIGlmIChib3guaXNMZWdlbmQoKSkKKyAgICAgICAgICAgICAgICBmcmFnbWVudGVk
Rmxvdy5tb3ZlQ2hpbGRUbygmZmxvdywgJmJveCwgUmVuZGVyQm94TW9kZWxPYmplY3Q6Ok5vcm1h
bGl6ZUFmdGVySW5zZXJ0aW9uOjpZZXMpOworICAgICAgICB9CisgICAgfQorCisgICAgZmxvdy5z
ZXRNdWx0aUNvbHVtbkZsb3coZnJhZ21lbnRlZEZsb3cpOworfQorCit2b2lkIFJlbmRlclRyZWVV
cGRhdGVyOjpNdWx0aUNvbHVtbjo6ZGVzdHJveUZyYWdtZW50ZWRGbG93KFJlbmRlckJsb2NrRmxv
dyYgZmxvdykKK3sKKyAgICBhdXRvJiBtdWx0aUNvbHVtbkZsb3cgPSAqZmxvdy5tdWx0aUNvbHVt
bkZsb3coKTsKKyAgICBtdWx0aUNvbHVtbkZsb3cuZGVsZXRlTGluZXMoKTsKKworICAgIC8vIE1v
dmUgc3Bhbm5lcnMgYmFjayB0byB0aGVpciBvcmlnaW5hbCBET00gcG9zaXRpb24gaW4gdGhlIHRy
ZWUsIGFuZCBkZXN0cm95IHRoZSBwbGFjZWhvbGRlcnMuCisgICAgYXV0byYgc3Bhbm5lcnMgPSBt
dWx0aUNvbHVtbkZsb3cuc3Bhbm5lck1hcCgpOworICAgIFZlY3RvcjxSZW5kZXJNdWx0aUNvbHVt
blNwYW5uZXJQbGFjZWhvbGRlcio+IHBsYWNlaG9sZGVyc1RvRGVsZXRlOworICAgIGZvciAoYXV0
byYgc3Bhbm5lckFuZFBsYWNlaG9sZGVyIDogc3Bhbm5lcnMpCisgICAgICAgIHBsYWNlaG9sZGVy
c1RvRGVsZXRlLmFwcGVuZChzcGFubmVyQW5kUGxhY2Vob2xkZXIudmFsdWUuZ2V0KCkpOworICAg
IFZlY3RvcjxzdGQ6OnBhaXI8UmVuZGVyRWxlbWVudCosIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
Pj4gcGFyZW50QW5kU3Bhbm5lckxpc3Q7CisgICAgZm9yIChhdXRvKiBwbGFjZWhvbGRlciA6IHBs
YWNlaG9sZGVyc1RvRGVsZXRlKSB7CisgICAgICAgIGF1dG8qIHNwYW5uZXJPcmlnaW5hbFBhcmVu
dCA9IHBsYWNlaG9sZGVyLT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHNwYW5uZXJPcmlnaW5hbFBh
cmVudCA9PSAmbXVsdGlDb2x1bW5GbG93KQorICAgICAgICAgICAgc3Bhbm5lck9yaWdpbmFsUGFy
ZW50ID0gJmZsb3c7CisgICAgICAgIC8vIERldGFjaGluZyB0aGUgc3Bhbm5lciB0YWtlcyBjYXJl
IG9mIHJlbW92aW5nIHRoZSBwbGFjZWhvbGRlciAoYW5kIG1lcmdlcyB0aGUgUmVuZGVyTXVsdGlD
b2x1bW5TZXRzKS4KKyAgICAgICAgYXV0byogc3Bhbm5lciA9IHBsYWNlaG9sZGVyLT5zcGFubmVy
KCk7CisgICAgICAgIHBhcmVudEFuZFNwYW5uZXJMaXN0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihz
cGFubmVyT3JpZ2luYWxQYXJlbnQsIHNwYW5uZXItPnBhcmVudCgpLT50YWtlQ2hpbGQoKnNwYW5u
ZXIpKSk7CisgICAgfQorICAgIHdoaWxlIChhdXRvKiBjb2x1bW5TZXQgPSBtdWx0aUNvbHVtbkZs
b3cuZmlyc3RNdWx0aUNvbHVtblNldCgpKQorICAgICAgICBjb2x1bW5TZXQtPnJlbW92ZUZyb21Q
YXJlbnRBbmREZXN0cm95KCk7CisKKyAgICBmbG93LmNsZWFyTXVsdGlDb2x1bW5GbG93KCk7Cisg
ICAgbXVsdGlDb2x1bW5GbG93Lm1vdmVBbGxDaGlsZHJlblRvKCZmbG93LCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6Tm9ybWFsaXplQWZ0ZXJJbnNlcnRpb246Olllcyk7CisgICAgbXVsdGlDb2x1bW5G
bG93LnJlbW92ZUZyb21QYXJlbnRBbmREZXN0cm95KCk7CisgICAgZm9yIChhdXRvJiBwYXJlbnRB
bmRTcGFubmVyIDogcGFyZW50QW5kU3Bhbm5lckxpc3QpCisgICAgICAgIFJlbmRlclRyZWVCdWls
ZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKCpwYXJlbnRBbmRTcGFubmVyLmZpcnN0LCBXVEZN
b3ZlKHBhcmVudEFuZFNwYW5uZXIuc2Vjb25kKSk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVV
cGRhdGVyTXVsdGlDb2x1bW4uaAkocmV2aXNpb24gMjI2MDA5KQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmg6MjI2MDA5KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFJlbmRlckJsb2NrRmxvdzsKKworY2xhc3MgUmVuZGVyVHJlZVVwZGF0ZXI6
Ok11bHRpQ29sdW1uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGUoUmVuZGVyQmxv
Y2tGbG93Jik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgY3JlYXRlRnJhZ21lbnRlZEZs
b3coUmVuZGVyQmxvY2tGbG93Jik7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveUZyYWdtZW50ZWRG
bG93KFJlbmRlckJsb2NrRmxvdyYpOworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5
bGUvUmVuZGVyVHJlZVBvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uY3BwCShyZXZpc2lvbiAyMjYwMDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uY3BwCShub25leGlzdGVudCkKQEAgLTEs
MTUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
UmVuZGVyVHJlZVBvc2l0aW9uLmgiCi0KLSNpbmNsdWRlICJDb21wb3NlZFRyZWVJdGVyYXRvci5o
IgotI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIK
LSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTaGFkb3dSb290LmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBSZW5kZXJUcmVlUG9zaXRpb246OmNvbXB1dGVOZXh0
U2libGluZyhjb25zdCBOb2RlJiBub2RlKQotewotICAgIEFTU0VSVCghbm9kZS5yZW5kZXJlcigp
KTsKLSAgICBpZiAobV9oYXNWYWxpZE5leHRTaWJsaW5nKSB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxF
RAotICAgICAgICBjb25zdCB1bnNpZ25lZCBvTlNxdWFyZWRBdm9pZGFuY2VMaW1pdCA9IDIwOwot
ICAgICAgICBib29sIHNraXBBc3NlcnQgPSBtX3BhcmVudC5pc1JlbmRlclZpZXcoKSB8fCArK21f
YXNzZXJ0aW9uTGltaXRDb3VudGVyID4gb05TcXVhcmVkQXZvaWRhbmNlTGltaXQ7Ci0gICAgICAg
IEFTU0VSVChza2lwQXNzZXJ0IHx8IG5leHRTaWJsaW5nUmVuZGVyZXIobm9kZSkgPT0gbV9uZXh0
U2libGluZyk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX25leHRTaWJs
aW5nID0gbmV4dFNpYmxpbmdSZW5kZXJlcihub2RlKTsKLSAgICBtX2hhc1ZhbGlkTmV4dFNpYmxp
bmcgPSB0cnVlOwotfQotCi12b2lkIFJlbmRlclRyZWVQb3NpdGlvbjo6aW52YWxpZGF0ZU5leHRT
aWJsaW5nKGNvbnN0IFJlbmRlck9iamVjdCYgc2libGluZ1JlbmRlcmVyKQotewotICAgIGlmICgh
bV9oYXNWYWxpZE5leHRTaWJsaW5nKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fbmV4dFNp
YmxpbmcgPT0gJnNpYmxpbmdSZW5kZXJlcikKLSAgICAgICAgbV9oYXNWYWxpZE5leHRTaWJsaW5n
ID0gZmFsc2U7Ci19Ci0KLVJlbmRlck9iamVjdCogUmVuZGVyVHJlZVBvc2l0aW9uOjpuZXh0U2li
bGluZ1JlbmRlcmVyKGNvbnN0IE5vZGUmIG5vZGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFub2Rl
LnJlbmRlcmVyKCkpOwotCi0gICAgYXV0byogcGFyZW50RWxlbWVudCA9IG1fcGFyZW50LmVsZW1l
bnQoKTsKLSAgICBpZiAoIXBhcmVudEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIC8vIEZJWE1FOiBQbHVnaW5nUmVwbGFjZW1lbnQgc2hhZG93IHRyZWVzIGFyZSB2ZXJ5IHdy
b25nLgotICAgIGlmIChwYXJlbnRFbGVtZW50ID09ICZub2RlKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIFZlY3RvcjxFbGVtZW50KiwgMzA+IGVsZW1lbnRTdGFjazsKLQotICAgIC8v
IEluIHRoZSBjb21tb24gY2FzZSBhbmNlc3RvciA9PSBwYXJlbnRFbGVtZW50IGltbWVkaWF0ZWx5
IGFuZCB0aGlzIGp1c3QgcHVzaGVzIHBhcmVudEVsZW1lbnQgaW50byBzdGFjay4KLSAgICBhdXRv
KiBhbmNlc3RvciA9IGlzPFBzZXVkb0VsZW1lbnQ+KG5vZGUpID8gZG93bmNhc3Q8UHNldWRvRWxl
bWVudD4obm9kZSkuaG9zdEVsZW1lbnQoKSA6IG5vZGUucGFyZW50RWxlbWVudEluQ29tcG9zZWRU
cmVlKCk7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgZWxlbWVudFN0YWNrLmFwcGVuZChh
bmNlc3Rvcik7Ci0gICAgICAgIGlmIChhbmNlc3RvciA9PSBwYXJlbnRFbGVtZW50KQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudEVsZW1lbnRJ
bkNvbXBvc2VkVHJlZSgpOwotICAgICAgICBBU1NFUlQoYW5jZXN0b3IpOwotICAgIH0KLSAgICBl
bGVtZW50U3RhY2sucmV2ZXJzZSgpOwotCi0gICAgYXV0byBjb21wb3NlZERlc2NlbmRhbnRzID0g
Y29tcG9zZWRUcmVlRGVzY2VuZGFudHMoKnBhcmVudEVsZW1lbnQpOwotCi0gICAgYXV0byBpbml0
aWFsaXplSXRlcmF0b3JDb25zaWRlcmluZ1BzZXVkb0VsZW1lbnRzID0gWyZdIHsKLSAgICAgICAg
aWYgKGlzPFBzZXVkb0VsZW1lbnQ+KG5vZGUpKSB7Ci0gICAgICAgICAgICBhdXRvKiBob3N0ID0g
ZG93bmNhc3Q8UHNldWRvRWxlbWVudD4obm9kZSkuaG9zdEVsZW1lbnQoKTsKLSAgICAgICAgICAg
IGlmIChub2RlLmlzQmVmb3JlUHNldWRvRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGhvc3QgIT0gcGFyZW50RWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBv
c2VkRGVzY2VuZGFudHMuYXQoKmhvc3QpLnRyYXZlcnNlTmV4dCgpOwotICAgICAgICAgICAgICAg
IHJldHVybiBjb21wb3NlZERlc2NlbmRhbnRzLmJlZ2luKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBBU1NFUlQobm9kZS5pc0FmdGVyUHNldWRvRWxlbWVudCgpKTsKLSAgICAgICAgICAg
IGVsZW1lbnRTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICBpZiAoaG9zdCAhPSBwYXJl
bnRFbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBjb21wb3NlZERlc2NlbmRhbnRzLmF0
KCpob3N0KS50cmF2ZXJzZU5leHRTa2lwcGluZ0NoaWxkcmVuKCk7Ci0gICAgICAgICAgICByZXR1
cm4gY29tcG9zZWREZXNjZW5kYW50cy5lbmQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
Y29tcG9zZWREZXNjZW5kYW50cy5hdChub2RlKS50cmF2ZXJzZU5leHRTa2lwcGluZ0NoaWxkcmVu
KCk7Ci0gICAgfTsKLQotICAgIGF1dG8gcHVzaENoZWNraW5nRm9yQWZ0ZXJQc2V1ZG9FbGVtZW50
UmVuZGVyZXIgPSBbJl0gKEVsZW1lbnQmIGVsZW1lbnQpIC0+IFJlbmRlckVsZW1lbnQqIHsKLSAg
ICAgICAgQVNTRVJUKCFlbGVtZW50LmlzUHNldWRvRWxlbWVudCgpKTsKLSAgICAgICAgaWYgKGF1
dG8qIGJlZm9yZSA9IGVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoYXV0byogcmVuZGVyZXIgPSBiZWZvcmUtPnJlbmRlcmVyKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHJlbmRlcmVyOwotICAgICAgICB9Ci0gICAgICAgIGVsZW1lbnRTdGFjay5hcHBl
bmQoJmVsZW1lbnQpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9OwotCi0gICAgYXV0
byBwb3BDaGVja2luZ0ZvckFmdGVyUHNldWRvRWxlbWVudFJlbmRlcmVycyA9IFsmXSAodW5zaWdu
ZWQgaXRlcmF0b3JEZXB0aFRvTWF0Y2gpIC0+IFJlbmRlckVsZW1lbnQqIHsKLSAgICAgICAgd2hp
bGUgKGVsZW1lbnRTdGFjay5zaXplKCkgPiBpdGVyYXRvckRlcHRoVG9NYXRjaCkgewotICAgICAg
ICAgICAgYXV0byYgZWxlbWVudCA9ICplbGVtZW50U3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAg
ICAgIGlmIChhdXRvKiBhZnRlciA9IGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBhZnRlci0+cmVuZGVyZXIoKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH07Ci0KLSAgICBhdXRvIGl0ID0gaW5p
dGlhbGl6ZUl0ZXJhdG9yQ29uc2lkZXJpbmdQc2V1ZG9FbGVtZW50cygpOwotICAgIGF1dG8gZW5k
ID0gY29tcG9zZWREZXNjZW5kYW50cy5lbmQoKTsKLQotICAgIHdoaWxlIChpdCAhPSBlbmQpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gcG9wQ2hlY2tpbmdGb3JBZnRlclBzZXVkb0Vs
ZW1lbnRSZW5kZXJlcnMoaXQuZGVwdGgoKSkpCi0gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXI7
Ci0KLSAgICAgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gaXQtPnJlbmRlcmVyKCkpCi0gICAgICAg
ICAgICByZXR1cm4gcmVuZGVyZXI7Ci0KLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCppdCkpIHsK
LSAgICAgICAgICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqaXQpOwotICAg
ICAgICAgICAgaWYgKGVsZW1lbnQuaGFzRGlzcGxheUNvbnRlbnRzKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBwdXNoQ2hlY2tpbmdGb3JBZnRlclBzZXVkb0VsZW1l
bnRSZW5kZXJlcihlbGVtZW50KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVy
OwotICAgICAgICAgICAgICAgIGl0LnRyYXZlcnNlTmV4dCgpOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaXQudHJhdmVyc2VO
ZXh0U2tpcHBpbmdDaGlsZHJlbigpOwotICAgIH0KLQotICAgIHJldHVybiBwb3BDaGVja2luZ0Zv
ckFmdGVyUHNldWRvRWxlbWVudFJlbmRlcmVycygwKTsKLX0KLQotfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3R5bGUvUmVuZGVyVHJlZVBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3R5bGUvUmVuZGVyVHJlZVBvc2l0aW9uLmgJKHJldmlzaW9uIDIyNjAwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVQb3NpdGlvbi5oCShub25leGlzdGVudCkKQEAg
LTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiUmVu
ZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBSZW5kZXJUcmVlUG9zaXRpb24gewotcHVibGljOgotICAgIGV4cGxp
Y2l0IFJlbmRlclRyZWVQb3NpdGlvbihSZW5kZXJFbGVtZW50JiBwYXJlbnQpCi0gICAgICAgIDog
bV9wYXJlbnQocGFyZW50KQotICAgIHsKLSAgICB9Ci0gICAgUmVuZGVyVHJlZVBvc2l0aW9uKFJl
bmRlckVsZW1lbnQmIHBhcmVudCwgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZykKLSAgICAgICAg
OiBtX3BhcmVudChwYXJlbnQpCi0gICAgICAgICwgbV9uZXh0U2libGluZyhuZXh0U2libGluZykK
LSAgICAgICAgLCBtX2hhc1ZhbGlkTmV4dFNpYmxpbmcodHJ1ZSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgUmVuZGVyRWxlbWVudCYgcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KLSAg
ICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nKCkgY29uc3QgeyBBU1NFUlQobV9oYXNWYWxpZE5l
eHRTaWJsaW5nKTsgcmV0dXJuIG1fbmV4dFNpYmxpbmc7IH0KLQotICAgIHZvaWQgY29tcHV0ZU5l
eHRTaWJsaW5nKGNvbnN0IE5vZGUmKTsKLSAgICB2b2lkIG1vdmVUb0xhc3RDaGlsZCgpOwotICAg
IHZvaWQgaW52YWxpZGF0ZU5leHRTaWJsaW5nKCkgeyBtX2hhc1ZhbGlkTmV4dFNpYmxpbmcgPSBm
YWxzZTsgfQotICAgIHZvaWQgaW52YWxpZGF0ZU5leHRTaWJsaW5nKGNvbnN0IFJlbmRlck9iamVj
dCYpOwotCi0gICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZ1JlbmRlcmVyKGNvbnN0IE5vZGUm
KSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBSZW5kZXJFbGVtZW50JiBtX3BhcmVudDsKLSAgICBS
ZW5kZXJPYmplY3QqIG1fbmV4dFNpYmxpbmcgeyBudWxscHRyIH07Ci0gICAgYm9vbCBtX2hhc1Zh
bGlkTmV4dFNpYmxpbmcgeyBmYWxzZSB9OwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1bnNp
Z25lZCBtX2Fzc2VydGlvbkxpbWl0Q291bnRlciB7IDAgfTsKLSNlbmRpZgotfTsKLQotaW5saW5l
IHZvaWQgUmVuZGVyVHJlZVBvc2l0aW9uOjptb3ZlVG9MYXN0Q2hpbGQoKQotewotICAgIG1fbmV4
dFNpYmxpbmcgPSBudWxscHRyOwotICAgIG1faGFzVmFsaWROZXh0U2libGluZyA9IHRydWU7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1Jl
bmRlclRyZWVVcGRhdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9S
ZW5kZXJUcmVlVXBkYXRlci5jcHAJKHJldmlzaW9uIDIyNjAwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDY1MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyVHJlZVVwZGF0ZXIuaCIKLQotI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRl
ICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5jZXN0
b3JJdGVyYXRvci5oIgotI2luY2x1ZGUgIkNvbXBvc2VkVHJlZUl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNl
cklkaW9tcy5oIgotI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgotI2luY2x1ZGUgIkluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgotI2lu
Y2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJEZXNjZW5kYW50SXRlcmF0
b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCi0jaW5jbHVkZSAiUmVuZGVySW5s
aW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVl
VXBkYXRlckZpcnN0TGV0dGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0
ZWRDb250ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oIgotI2lu
Y2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uaCIKLSNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCi0jaW5jbHVkZSAiU3R5bGVUcmVlUmVzb2x2ZXIuaCIKLSNpbmNsdWRlIDx3dGYv
U3lzdGVtVHJhY2luZy5oPgotCi0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgIldLQ29udGVu
dE9ic2VydmF0aW9uLmgiCi0jaW5jbHVkZSAiV0tDb250ZW50T2JzZXJ2YXRpb25JbnRlcm5hbC5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFBMQVRGT1JNKElPUykKLWNs
YXNzIENoZWNrRm9yVmlzaWJpbGl0eUNoYW5nZSB7Ci1wdWJsaWM6Ci0gICAgQ2hlY2tGb3JWaXNp
YmlsaXR5Q2hhbmdlKGNvbnN0IEVsZW1lbnQmKTsKLSAgICB+Q2hlY2tGb3JWaXNpYmlsaXR5Q2hh
bmdlKCk7Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgRWxlbWVudCYgbV9lbGVtZW50OwotICAgIEVE
aXNwbGF5IG1fcHJldmlvdXNEaXNwbGF5OwotICAgIEVWaXNpYmlsaXR5IG1fcHJldmlvdXNWaXNp
YmlsaXR5OwotICAgIEVWaXNpYmlsaXR5IG1fcHJldmlvdXNJbXBsaWNpdFZpc2liaWxpdHk7Ci19
OwotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQotUmVuZGVyVHJlZVVwZGF0ZXI6OlBhcmVudDo6
UGFyZW50KENvbnRhaW5lck5vZGUmIHJvb3QpCi0gICAgOiBlbGVtZW50KGlzPERvY3VtZW50Pihy
b290KSA/IG51bGxwdHIgOiBkb3duY2FzdDxFbGVtZW50Pigmcm9vdCkpCi0gICAgLCByZW5kZXJU
cmVlUG9zaXRpb24oUmVuZGVyVHJlZVBvc2l0aW9uKCpyb290LnJlbmRlcmVyKCkpKQotewotfQot
Ci1SZW5kZXJUcmVlVXBkYXRlcjo6UGFyZW50OjpQYXJlbnQoRWxlbWVudCYgZWxlbWVudCwgY29u
c3QgU3R5bGU6OkVsZW1lbnRVcGRhdGVzKiB1cGRhdGVzKQotICAgIDogZWxlbWVudCgmZWxlbWVu
dCkKLSAgICAsIHVwZGF0ZXModXBkYXRlcykKLSAgICAsIHJlbmRlclRyZWVQb3NpdGlvbihlbGVt
ZW50LnJlbmRlcmVyKCkgPyBzdGQ6Om1ha2Vfb3B0aW9uYWwoUmVuZGVyVHJlZVBvc2l0aW9uKCpl
bGVtZW50LnJlbmRlcmVyKCkpKSA6IHN0ZDo6bnVsbG9wdCkKLXsKLX0KLQotUmVuZGVyVHJlZVVw
ZGF0ZXI6OlJlbmRlclRyZWVVcGRhdGVyKERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IG1fZG9j
dW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX2dlbmVyYXRlZENvbnRlbnQoc3RkOjptYWtlX3VuaXF1
ZTxHZW5lcmF0ZWRDb250ZW50PigqdGhpcykpCi0gICAgLCBtX2J1aWxkZXIocmVuZGVyVmlldygp
KQotewotfQotCi1SZW5kZXJUcmVlVXBkYXRlcjo6flJlbmRlclRyZWVVcGRhdGVyKCkgPSBkZWZh
dWx0OwotCi1zdGF0aWMgQ29udGFpbmVyTm9kZSogZmluZFJlbmRlcmluZ1Jvb3QoQ29udGFpbmVy
Tm9kZSYgbm9kZSkKLXsKLSAgICBpZiAobm9kZS5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4g
Jm5vZGU7Ci0gICAgZm9yIChhdXRvJiBhbmNlc3RvciA6IGNvbXBvc2VkVHJlZUFuY2VzdG9ycyhu
b2RlKSkgewotICAgICAgICBpZiAoYW5jZXN0b3IucmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHJl
dHVybiAmYW5jZXN0b3I7Ci0gICAgICAgIGlmICghYW5jZXN0b3IuaGFzRGlzcGxheUNvbnRlbnRz
KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuICZub2Rl
LmRvY3VtZW50KCk7Ci19Ci0KLXN0YXRpYyBMaXN0SGFzaFNldDxDb250YWluZXJOb2RlKj4gZmlu
ZFJlbmRlcmluZ1Jvb3RzKGNvbnN0IFN0eWxlOjpVcGRhdGUmIHVwZGF0ZSkKLXsKLSAgICBMaXN0
SGFzaFNldDxDb250YWluZXJOb2RlKj4gcmVuZGVyaW5nUm9vdHM7Ci0gICAgZm9yIChhdXRvKiBy
b290IDogdXBkYXRlLnJvb3RzKCkpIHsKLSAgICAgICAgYXV0byogcmVuZGVyaW5nUm9vdCA9IGZp
bmRSZW5kZXJpbmdSb290KCpyb290KTsKLSAgICAgICAgaWYgKCFyZW5kZXJpbmdSb290KQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJlbmRlcmluZ1Jvb3RzLmFkZChyZW5kZXJpbmdS
b290KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlbmRlcmluZ1Jvb3RzOwotfQotCi12b2lkIFJlbmRl
clRyZWVVcGRhdGVyOjpjb21taXQoc3RkOjp1bmlxdWVfcHRyPGNvbnN0IFN0eWxlOjpVcGRhdGU+
IHN0eWxlVXBkYXRlKQotewotICAgIEFTU0VSVCgmbV9kb2N1bWVudCA9PSAmc3R5bGVVcGRhdGUt
PmRvY3VtZW50KCkpOwotCi0gICAgaWYgKCFtX2RvY3VtZW50LnNob3VsZENyZWF0ZVJlbmRlcmVy
cygpIHx8ICFtX2RvY3VtZW50LnJlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIFRyYWNlU2NvcGUgc2NvcGUoUmVuZGVyVHJlZUJ1aWxkU3RhcnQsIFJlbmRlclRyZWVCdWls
ZEVuZCk7Ci0KLSAgICBTdHlsZTo6UG9zdFJlc29sdXRpb25DYWxsYmFja0Rpc2FibGVyIGNhbGxi
YWNrRGlzYWJsZXIobV9kb2N1bWVudCk7Ci0KLSAgICBtX3N0eWxlVXBkYXRlID0gV1RGTW92ZShz
dHlsZVVwZGF0ZSk7Ci0KLSAgICBmb3IgKGF1dG8qIHJvb3QgOiBmaW5kUmVuZGVyaW5nUm9vdHMo
Km1fc3R5bGVVcGRhdGUpKQotICAgICAgICB1cGRhdGVSZW5kZXJUcmVlKCpyb290KTsKLQotICAg
IGdlbmVyYXRlZENvbnRlbnQoKS51cGRhdGVSZW1haW5pbmdRdW90ZXMoKTsKLQotICAgIE11bHRp
Q29sdW1uOjp1cGRhdGUocmVuZGVyVmlldygpKTsKLQotICAgIG1fc3R5bGVVcGRhdGUgPSBudWxs
cHRyOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVSZW5kZXJlcihjb25zdCBFbGVtZW50
JiBlbGVtZW50LCBjb25zdCBSZW5kZXJFbGVtZW50JiBwYXJlbnRSZW5kZXJlcikKLXsKLSAgICBp
ZiAoIXBhcmVudFJlbmRlcmVyLmNhbkhhdmVDaGlsZHJlbigpICYmICEoZWxlbWVudC5pc1BzZXVk
b0VsZW1lbnQoKSAmJiBwYXJlbnRSZW5kZXJlci5jYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAocGFyZW50UmVuZGVyZXIuZWxlbWVudCgp
ICYmICFwYXJlbnRSZW5kZXJlci5lbGVtZW50KCktPmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIo
ZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dXBkYXRlUmVuZGVyVHJlZShDb250YWluZXJOb2RlJiBy
b290KQotewotICAgIEFTU0VSVChyb290LnJlbmRlcmVyKCkpOwotICAgIEFTU0VSVChtX3BhcmVu
dFN0YWNrLmlzRW1wdHkoKSk7Ci0KLSAgICBtX3BhcmVudFN0YWNrLmFwcGVuZChQYXJlbnQocm9v
dCkpOwotCi0gICAgYXV0byBkZXNjZW5kYW50cyA9IGNvbXBvc2VkVHJlZURlc2NlbmRhbnRzKHJv
b3QpOwotICAgIGF1dG8gaXQgPSBkZXNjZW5kYW50cy5iZWdpbigpOwotICAgIGF1dG8gZW5kID0g
ZGVzY2VuZGFudHMuZW5kKCk7Ci0KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NjE3MgotICAgIGl0LmRyb3BBc3NlcnRpb25zKCk7Ci0KLSAg
ICB3aGlsZSAoaXQgIT0gZW5kKSB7Ci0gICAgICAgIHBvcFBhcmVudHNUb0RlcHRoKGl0LmRlcHRo
KCkpOwotCi0gICAgICAgIGF1dG8mIG5vZGUgPSAqaXQ7Ci0KLSAgICAgICAgaWYgKGF1dG8qIHJl
bmRlcmVyID0gbm9kZS5yZW5kZXJlcigpKQotICAgICAgICAgICAgcmVuZGVyVHJlZVBvc2l0aW9u
KCkuaW52YWxpZGF0ZU5leHRTaWJsaW5nKCpyZW5kZXJlcik7Ci0gICAgICAgIGVsc2UgaWYgKGlz
PEVsZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLmhhc0Rpc3BsYXlDb250
ZW50cygpKQotICAgICAgICAgICAgcmVuZGVyVHJlZVBvc2l0aW9uKCkuaW52YWxpZGF0ZU5leHRT
aWJsaW5nKCk7Ci0KLSAgICAgICAgaWYgKGlzPFRleHQ+KG5vZGUpKSB7Ci0gICAgICAgICAgICBh
dXRvJiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4obm9kZSk7Ci0gICAgICAgICAgICBhdXRvKiB0ZXh0
VXBkYXRlID0gbV9zdHlsZVVwZGF0ZS0+dGV4dFVwZGF0ZSh0ZXh0KTsKLSAgICAgICAgICAgIGJv
b2wgZGlkQ3JlYXRlUGFyZW50ID0gcGFyZW50KCkudXBkYXRlcyAmJiBwYXJlbnQoKS51cGRhdGVz
LT51cGRhdGUuY2hhbmdlID09IFN0eWxlOjpEZXRhY2g7Ci0gICAgICAgICAgICBib29sIG1heU5l
ZWRVcGRhdGVXaGl0ZXNwYWNlT25seVJlbmRlcmVyID0gcmVuZGVyaW5nUGFyZW50KCkuZGlkQ3Jl
YXRlT3JEZXN0cm95Q2hpbGRSZW5kZXJlciAmJiB0ZXh0LmRhdGEoKS5pc0FsbFNwZWNpYWxDaGFy
YWN0ZXJzPGlzSFRNTFNwYWNlPigpOwotICAgICAgICAgICAgaWYgKGRpZENyZWF0ZVBhcmVudCB8
fCB0ZXh0VXBkYXRlIHx8IG1heU5lZWRVcGRhdGVXaGl0ZXNwYWNlT25seVJlbmRlcmVyKQotICAg
ICAgICAgICAgICAgIHVwZGF0ZVRleHRSZW5kZXJlcih0ZXh0LCB0ZXh0VXBkYXRlKTsKLQotICAg
ICAgICAgICAgc3RvcmVQcmV2aW91c1JlbmRlcmVyKHRleHQpOwotICAgICAgICAgICAgaXQudHJh
dmVyc2VOZXh0U2tpcHBpbmdDaGlsZHJlbigpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBhdXRvJiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7
Ci0KLSAgICAgICAgYXV0byogZWxlbWVudFVwZGF0ZXMgPSBtX3N0eWxlVXBkYXRlLT5lbGVtZW50
VXBkYXRlcyhlbGVtZW50KTsKLQotICAgICAgICAvLyBXZSBob3AgdGhyb3VnaCBkaXNwbGF5OiBj
b250ZW50cyBlbGVtZW50cyBpbiBmaW5kUmVuZGVyaW5nUm9vdCwgc28KLSAgICAgICAgLy8gdGhl
cmUgbWF5IGJlIG90aGVyIHVwZGF0ZXMgZG93biB0aGUgdHJlZS4KLSAgICAgICAgaWYgKCFlbGVt
ZW50VXBkYXRlcyAmJiAhZWxlbWVudC5oYXNEaXNwbGF5Q29udGVudHMoKSkgewotICAgICAgICAg
ICAgc3RvcmVQcmV2aW91c1JlbmRlcmVyKGVsZW1lbnQpOwotICAgICAgICAgICAgaXQudHJhdmVy
c2VOZXh0U2tpcHBpbmdDaGlsZHJlbigpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZWxlbWVudFVwZGF0ZXMpCi0gICAgICAgICAgICB1cGRhdGVFbGVt
ZW50UmVuZGVyZXIoZWxlbWVudCwgZWxlbWVudFVwZGF0ZXMtPnVwZGF0ZSk7Ci0KLSAgICAgICAg
c3RvcmVQcmV2aW91c1JlbmRlcmVyKGVsZW1lbnQpOwotCi0gICAgICAgIGJvb2wgbWF5SGF2ZVJl
bmRlcmVkRGVzY2VuZGFudHMgPSBlbGVtZW50LnJlbmRlcmVyKCkgfHwgKGVsZW1lbnQuaGFzRGlz
cGxheUNvbnRlbnRzKCkgJiYgc2hvdWxkQ3JlYXRlUmVuZGVyZXIoZWxlbWVudCwgcmVuZGVyVHJl
ZVBvc2l0aW9uKCkucGFyZW50KCkpKTsKLSAgICAgICAgaWYgKCFtYXlIYXZlUmVuZGVyZWREZXNj
ZW5kYW50cykgewotICAgICAgICAgICAgaXQudHJhdmVyc2VOZXh0U2tpcHBpbmdDaGlsZHJlbigp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdXNoUGFyZW50
KGVsZW1lbnQsIGVsZW1lbnRVcGRhdGVzKTsKLQotICAgICAgICBpdC50cmF2ZXJzZU5leHQoKTsK
LSAgICB9Ci0KLSAgICBwb3BQYXJlbnRzVG9EZXB0aCgwKTsKLX0KLQotYXV0byBSZW5kZXJUcmVl
VXBkYXRlcjo6cmVuZGVyaW5nUGFyZW50KCkgLT4gUGFyZW50JgotewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fcGFyZW50U3RhY2suc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChtX3BhcmVu
dFN0YWNrW2ldLnJlbmRlclRyZWVQb3NpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBtX3BhcmVu
dFN0YWNrW2ldOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
bV9wYXJlbnRTdGFjay5sYXN0KCk7Ci19Ci0KLVJlbmRlclRyZWVQb3NpdGlvbiYgUmVuZGVyVHJl
ZVVwZGF0ZXI6OnJlbmRlclRyZWVQb3NpdGlvbigpCi17Ci0gICAgcmV0dXJuICpyZW5kZXJpbmdQ
YXJlbnQoKS5yZW5kZXJUcmVlUG9zaXRpb247Ci19Ci0KLXZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6
OnB1c2hQYXJlbnQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3R5bGU6OkVsZW1lbnRVcGRhdGVz
KiB1cGRhdGVzKQotewotICAgIG1fcGFyZW50U3RhY2suYXBwZW5kKFBhcmVudChlbGVtZW50LCB1
cGRhdGVzKSk7Ci0KLSAgICB1cGRhdGVCZWZvcmVEZXNjZW5kYW50cyhlbGVtZW50LCB1cGRhdGVz
KTsKLX0KLQotdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6cG9wUGFyZW50KCkKLXsKLSAgICBhdXRv
JiBwYXJlbnQgPSBtX3BhcmVudFN0YWNrLmxhc3QoKTsKLSAgICBpZiAocGFyZW50LmVsZW1lbnQp
Ci0gICAgICAgIHVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoKnBhcmVudC5lbGVtZW50LCBwYXJlbnQu
dXBkYXRlcyk7Ci0KLSAgICBtX3BhcmVudFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotdm9pZCBS
ZW5kZXJUcmVlVXBkYXRlcjo6cG9wUGFyZW50c1RvRGVwdGgodW5zaWduZWQgZGVwdGgpCi17Ci0g
ICAgQVNTRVJUKG1fcGFyZW50U3RhY2suc2l6ZSgpID49IGRlcHRoKTsKLQotICAgIHdoaWxlICht
X3BhcmVudFN0YWNrLnNpemUoKSA+IGRlcHRoKQotICAgICAgICBwb3BQYXJlbnQoKTsKLX0KLQot
dm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dXBkYXRlQmVmb3JlRGVzY2VuZGFudHMoRWxlbWVudCYg
ZWxlbWVudCwgY29uc3QgU3R5bGU6OkVsZW1lbnRVcGRhdGVzKiB1cGRhdGVzKQotewotICAgIGlm
ICh1cGRhdGVzKQotICAgICAgICBnZW5lcmF0ZWRDb250ZW50KCkudXBkYXRlUHNldWRvRWxlbWVu
dChlbGVtZW50LCB1cGRhdGVzLT5iZWZvcmVQc2V1ZG9FbGVtZW50VXBkYXRlLCBCRUZPUkUpOwot
fQotCi12b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp1cGRhdGVBZnRlckRlc2NlbmRhbnRzKEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IFN0eWxlOjpFbGVtZW50VXBkYXRlcyogdXBkYXRlcykKLXsKLSAg
ICBpZiAodXBkYXRlcykKLSAgICAgICAgZ2VuZXJhdGVkQ29udGVudCgpLnVwZGF0ZVBzZXVkb0Vs
ZW1lbnQoZWxlbWVudCwgdXBkYXRlcy0+YWZ0ZXJQc2V1ZG9FbGVtZW50VXBkYXRlLCBBRlRFUik7
Ci0KLSAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKLSAgICBpZiAoIXJl
bmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgZG8gcmVu
ZGVyIHRyZWUgbXV0YXRpb25zIHRoYXQgcmVxdWlyZSBkZXNjZW5kYW50IHJlbmRlcmVycy4KLSAg
ICBpZiAoaXM8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikpCi0gICAgICAgIEZpcnN0TGV0dGVyOjp1
cGRhdGUoZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikpOwotICAgIGlmIChpczxSZW5k
ZXJMaXN0SXRlbT4oKnJlbmRlcmVyKSkKLSAgICAgICAgTGlzdEl0ZW06OnVwZGF0ZU1hcmtlciht
X2J1aWxkZXIsIGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPigqcmVuZGVyZXIpKTsKLSAgICBpZiAo
aXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpKQotICAgICAgICBNdWx0aUNvbHVtbjo6dXBk
YXRlKGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKSk7Ci0KLSAgICBpZiAoZWxl
bWVudC5oYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSAmJiB1cGRhdGVzICYmIHVwZGF0
ZXMtPnVwZGF0ZS5jaGFuZ2UgPT0gU3R5bGU6OkRldGFjaCkKLSAgICAgICAgZWxlbWVudC5kaWRB
dHRhY2hSZW5kZXJlcnMoKTsKLX0KLQotc3RhdGljIGJvb2wgcHNldWRvU3R5bGVDYWNoZUlzSW52
YWxpZChSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQotewot
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsK
LQotICAgIGNvbnN0IFBzZXVkb1N0eWxlQ2FjaGUqIHBzZXVkb1N0eWxlQ2FjaGUgPSBjdXJyZW50
U3R5bGUuY2FjaGVkUHNldWRvU3R5bGVzKCk7Ci0gICAgaWYgKCFwc2V1ZG9TdHlsZUNhY2hlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIGNhY2hlIDogKnBzZXVkb1N0
eWxlQ2FjaGUpIHsKLSAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBjYWNoZS0+c3R5bGVUeXBl
KCk7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbmV3UHNldWRvU3R5bGUg
PSByZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9TdHlsZVJlcXVlc3QocHNl
dWRvSWQpLCBuZXdTdHlsZSwgbmV3U3R5bGUpOwotICAgICAgICBpZiAoIW5ld1BzZXVkb1N0eWxl
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICgqbmV3UHNldWRvU3R5bGUg
IT0gKmNhY2hlKSB7Ci0gICAgICAgICAgICBuZXdTdHlsZS0+YWRkQ2FjaGVkUHNldWRvU3R5bGUo
V1RGTW92ZShuZXdQc2V1ZG9TdHlsZSkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRyZWVVcGRh
dGVyOjp1cGRhdGVFbGVtZW50UmVuZGVyZXIoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3R5bGU6
OkVsZW1lbnRVcGRhdGUmIHVwZGF0ZSkKLXsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgQ2hlY2tG
b3JWaXNpYmlsaXR5Q2hhbmdlIGNoZWNrRm9yVmlzaWJpbGl0eUNoYW5nZShlbGVtZW50KTsKLSNl
bmRpZgotCi0gICAgYm9vbCBzaG91bGRUZWFyRG93blJlbmRlcmVycyA9IHVwZGF0ZS5jaGFuZ2Ug
PT0gU3R5bGU6OkRldGFjaCAmJiAoZWxlbWVudC5yZW5kZXJlcigpIHx8IGVsZW1lbnQuaGFzRGlz
cGxheUNvbnRlbnRzKCkpOwotICAgIGlmIChzaG91bGRUZWFyRG93blJlbmRlcmVycykgewotICAg
ICAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKSkgewotICAgICAgICAgICAgLy8gV2UgbWF5IGJl
IHRlYXJpbmcgZG93biBhIGRlc2NlbmRhbnQgcmVuZGVyZXIgY2FjaGVkIGluIHJlbmRlclRyZWVQ
b3NpdGlvbi4KLSAgICAgICAgICAgIHJlbmRlclRyZWVQb3NpdGlvbigpLmludmFsaWRhdGVOZXh0
U2libGluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZGlzcGxheTpub25lIGNhbmNlbHMg
YW5pbWF0aW9ucy4KLSAgICAgICAgYXV0byB0ZWFyZG93blR5cGUgPSB1cGRhdGUuc3R5bGUtPmRp
c3BsYXkoKSA9PSBOT05FID8gVGVhcmRvd25UeXBlOjpSZW5kZXJlclVwZGF0ZUNhbmNlbGluZ0Fu
aW1hdGlvbnMgOiBUZWFyZG93blR5cGU6OlJlbmRlcmVyVXBkYXRlOwotICAgICAgICB0ZWFyRG93
blJlbmRlcmVycyhlbGVtZW50LCB0ZWFyZG93blR5cGUpOwotCi0gICAgICAgIHJlbmRlcmluZ1Bh
cmVudCgpLmRpZENyZWF0ZU9yRGVzdHJveUNoaWxkUmVuZGVyZXIgPSB0cnVlOwotICAgIH0KLQot
ICAgIGJvb2wgaGFzRGlzcGxheUNvbnRlbnRzID0gdXBkYXRlLnN0eWxlLT5kaXNwbGF5KCkgPT0g
Q09OVEVOVFM7Ci0gICAgaWYgKGhhc0Rpc3BsYXlDb250ZW50cykKLSAgICAgICAgZWxlbWVudC5z
dG9yZURpc3BsYXlDb250ZW50c1N0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigqdXBkYXRlLnN0
eWxlKSk7Ci0gICAgZWxzZQotICAgICAgICBlbGVtZW50LnJlc2V0Q29tcHV0ZWRTdHlsZSgpOwot
Ci0gICAgYm9vbCBzaG91bGRDcmVhdGVOZXdSZW5kZXJlciA9ICFlbGVtZW50LnJlbmRlcmVyKCkg
JiYgIWhhc0Rpc3BsYXlDb250ZW50czsKLSAgICBpZiAoc2hvdWxkQ3JlYXRlTmV3UmVuZGVyZXIp
IHsKLSAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ3VzdG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkp
Ci0gICAgICAgICAgICBlbGVtZW50LndpbGxBdHRhY2hSZW5kZXJlcnMoKTsKLSAgICAgICAgY3Jl
YXRlUmVuZGVyZXIoZWxlbWVudCwgUmVuZGVyU3R5bGU6OmNsb25lKCp1cGRhdGUuc3R5bGUpKTsK
LQotICAgICAgICByZW5kZXJpbmdQYXJlbnQoKS5kaWRDcmVhdGVPckRlc3Ryb3lDaGlsZFJlbmRl
cmVyID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghZWxlbWVudC5y
ZW5kZXJlcigpKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgcmVuZGVyZXIgPSAqZWxlbWVu
dC5yZW5kZXJlcigpOwotCi0gICAgaWYgKHVwZGF0ZS5yZWNvbXBvc2l0ZUxheWVyKSB7Ci0gICAg
ICAgIHJlbmRlcmVyLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZSgqdXBkYXRlLnN0eWxlKSwg
U3R5bGVEaWZmZXJlbmNlUmVjb21wb3NpdGVMYXllcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAodXBkYXRlLmNoYW5nZSA9PSBTdHlsZTo6Tm9DaGFuZ2UpIHsKLSAgICAgICAg
aWYgKHBzZXVkb1N0eWxlQ2FjaGVJc0ludmFsaWQoJnJlbmRlcmVyLCB1cGRhdGUuc3R5bGUuZ2V0
KCkpKSB7Ci0gICAgICAgICAgICByZW5kZXJlci5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmUo
KnVwZGF0ZS5zdHlsZSksIFN0eWxlRGlmZmVyZW5jZUVxdWFsKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVuZGVyZXIuc2V0
U3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lKCp1cGRhdGUuc3R5bGUpLCBTdHlsZURpZmZlcmVuY2VF
cXVhbCk7Ci19Ci0KLXZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OmNyZWF0ZVJlbmRlcmVyKEVsZW1l
bnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCi17Ci0gICAgYXV0byBjb21wdXRlSW5z
ZXJ0aW9uUG9zaXRpb24gPSBbdGhpcywgJmVsZW1lbnRdICgpIHsKLSAgICAgICAgcmVuZGVyVHJl
ZVBvc2l0aW9uKCkuY29tcHV0ZU5leHRTaWJsaW5nKGVsZW1lbnQpOwotICAgICAgICByZXR1cm4g
cmVuZGVyVHJlZVBvc2l0aW9uKCk7Ci0gICAgfTsKLSAgICAKLSAgICBpZiAoIXNob3VsZENyZWF0
ZVJlbmRlcmVyKGVsZW1lbnQsIHJlbmRlclRyZWVQb3NpdGlvbigpLnBhcmVudCgpKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCFlbGVtZW50LnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJUcmVlUG9zaXRpb24gaW5zZXJ0aW9uUG9zaXRp
b24gPSBjb21wdXRlSW5zZXJ0aW9uUG9zaXRpb24oKTsKLSAgICBhdXRvIG5ld1JlbmRlcmVyID0g
ZWxlbWVudC5jcmVhdGVFbGVtZW50UmVuZGVyZXIoV1RGTW92ZShzdHlsZSksIGluc2VydGlvblBv
c2l0aW9uKTsKLSAgICBpZiAoIW5ld1JlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIWluc2VydGlvblBvc2l0aW9uLnBhcmVudCgpLmlzQ2hpbGRBbGxvd2VkKCpuZXdSZW5kZXJl
ciwgbmV3UmVuZGVyZXItPnN0eWxlKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBlbGVtZW50
LnNldFJlbmRlcmVyKG5ld1JlbmRlcmVyLmdldCgpKTsKLQotICAgIG5ld1JlbmRlcmVyLT5pbml0
aWFsaXplU3R5bGUoKTsKLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAobV9k
b2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4oKSAmJiBtX2RvY3VtZW50LndlYmtpdEN1cnJlbnRG
dWxsU2NyZWVuRWxlbWVudCgpID09ICZlbGVtZW50KSB7Ci0gICAgICAgIG5ld1JlbmRlcmVyID0g
UmVuZGVyRnVsbFNjcmVlbjo6d3JhcE5ld1JlbmRlcmVyKG1fYnVpbGRlciwgV1RGTW92ZShuZXdS
ZW5kZXJlciksIGluc2VydGlvblBvc2l0aW9uLnBhcmVudCgpLCBtX2RvY3VtZW50KTsKLSAgICAg
ICAgaWYgKCFuZXdSZW5kZXJlcikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZChpbnNlcnRpb25Qb3NpdGlvbiwgV1RGTW92ZShu
ZXdSZW5kZXJlcikpOwotCi0gICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1bWVu
dC5heE9iamVjdENhY2hlKCkpCi0gICAgICAgIGNhY2hlLT51cGRhdGVDYWNoZUFmdGVyTm9kZUlz
QXR0YWNoZWQoJmVsZW1lbnQpOwotfQotCi1ib29sIFJlbmRlclRyZWVVcGRhdGVyOjp0ZXh0UmVu
ZGVyZXJJc05lZWRlZChjb25zdCBUZXh0JiB0ZXh0Tm9kZSkKLXsKLSAgICBhdXRvJiByZW5kZXJp
bmdQYXJlbnQgPSB0aGlzLT5yZW5kZXJpbmdQYXJlbnQoKTsKLSAgICBhdXRvJiBwYXJlbnRSZW5k
ZXJlciA9IHJlbmRlcmluZ1BhcmVudC5yZW5kZXJUcmVlUG9zaXRpb24tPnBhcmVudCgpOwotICAg
IGlmICghcGFyZW50UmVuZGVyZXIuY2FuSGF2ZUNoaWxkcmVuKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAocGFyZW50UmVuZGVyZXIuZWxlbWVudCgpICYmICFwYXJlbnRSZW5kZXJl
ci5lbGVtZW50KCktPmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIodGV4dE5vZGUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRleHROb2RlLmlzRWRpdGluZ1RleHQoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCF0ZXh0Tm9kZS5sZW5ndGgoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghdGV4dE5vZGUuZGF0YSgpLmlzQWxsU3BlY2lhbENoYXJhY3Rl
cnM8aXNIVE1MU3BhY2U+KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChpczxSZW5k
ZXJUZXh0PihyZW5kZXJpbmdQYXJlbnQucHJldmlvdXNDaGlsZFJlbmRlcmVyKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgLy8gVGhpcyB0ZXh0IG5vZGUgaGFzIG5vdGhpbmcgYnV0IHdoaXRl
IHNwYWNlLiBXZSBtYXkgc3RpbGwgbmVlZCBhIHJlbmRlcmVyIGluIHNvbWUgY2FzZXMuCi0gICAg
aWYgKHBhcmVudFJlbmRlcmVyLmlzVGFibGUoKSB8fCBwYXJlbnRSZW5kZXJlci5pc1RhYmxlUm93
KCkgfHwgcGFyZW50UmVuZGVyZXIuaXNUYWJsZVNlY3Rpb24oKSB8fCBwYXJlbnRSZW5kZXJlci5p
c1JlbmRlclRhYmxlQ29sKCkgfHwgcGFyZW50UmVuZGVyZXIuaXNGcmFtZVNldCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHBhcmVudFJlbmRlcmVyLmlzRmxleGlibGVCb3goKSAm
JiAhcGFyZW50UmVuZGVyZXIuaXNSZW5kZXJCdXR0b24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChwYXJlbnRSZW5kZXJlci5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpKSAvLyBw
cmUvcHJlLXdyYXAvcHJlLWxpbmUgYWx3YXlzIG1ha2UgcmVuZGVyZXJzLgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGF1dG8qIHByZXZpb3VzUmVuZGVyZXIgPSByZW5kZXJpbmdQYXJlbnQu
cHJldmlvdXNDaGlsZFJlbmRlcmVyOwotICAgIGlmIChwcmV2aW91c1JlbmRlcmVyICYmIHByZXZp
b3VzUmVuZGVyZXItPmlzQlIoKSkgLy8gPHNwYW4+PGJyLz4gPGJyLz48L3NwYW4+Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChwYXJlbnRSZW5kZXJlci5pc1JlbmRlcklubGluZSgp
KSB7Ci0gICAgICAgIC8vIDxzcGFuPjxkaXYvPiA8ZGl2Lz48L3NwYW4+Ci0gICAgICAgIGlmIChw
cmV2aW91c1JlbmRlcmVyICYmICFwcmV2aW91c1JlbmRlcmVyLT5pc0lubGluZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChwYXJlbnRSZW5k
ZXJlci5pc1JlbmRlckJsb2NrKCkgJiYgIXBhcmVudFJlbmRlcmVyLmNoaWxkcmVuSW5saW5lKCkg
JiYgKCFwcmV2aW91c1JlbmRlcmVyIHx8ICFwcmV2aW91c1JlbmRlcmVyLT5pc0lubGluZSgpKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIFJlbmRlck9iamVj
dCogZmlyc3QgPSBwYXJlbnRSZW5kZXJlci5maXJzdENoaWxkKCk7Ci0gICAgICAgIHdoaWxlIChm
aXJzdCAmJiBmaXJzdC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQotICAgICAg
ICAgICAgZmlyc3QgPSBmaXJzdC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiBuZXh0UmVuZGVyZXIgPSB0ZXh0Tm9kZS5yZW5kZXJlcigpID8gdGV4dE5vZGUucmVuZGVyZXIo
KSA6ICByZW5kZXJUcmVlUG9zaXRpb24oKS5uZXh0U2libGluZ1JlbmRlcmVyKHRleHROb2RlKTsK
LSAgICAgICAgaWYgKCFmaXJzdCB8fCBuZXh0UmVuZGVyZXIgPT0gZmlyc3QpIHsKLSAgICAgICAg
ICAgIC8vIFdoaXRlc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIGEgYmxvY2sganVzdCBnb2VzIGF3YXku
IERvbid0IGV2ZW4gbWFrZSBhIHJlbmRlciBvYmplY3QgZm9yIHRoaXMgdGV4dC4KLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6Y3JlYXRlVGV4dFJlbmRlcmVyKFRleHQmIHRleHRO
b2RlLCBjb25zdCBTdHlsZTo6VGV4dFVwZGF0ZSogdGV4dFVwZGF0ZSkKLXsKLSAgICBBU1NFUlQo
IXRleHROb2RlLnJlbmRlcmVyKCkpOwotCi0gICAgYXV0byYgcmVuZGVyVHJlZVBvc2l0aW9uID0g
dGhpcy0+cmVuZGVyVHJlZVBvc2l0aW9uKCk7Ci0gICAgYXV0byB0ZXh0UmVuZGVyZXIgPSB0ZXh0
Tm9kZS5jcmVhdGVUZXh0UmVuZGVyZXIocmVuZGVyVHJlZVBvc2l0aW9uLnBhcmVudCgpLnN0eWxl
KCkpOwotCi0gICAgcmVuZGVyVHJlZVBvc2l0aW9uLmNvbXB1dGVOZXh0U2libGluZyh0ZXh0Tm9k
ZSk7Ci0KLSAgICBpZiAoIXJlbmRlclRyZWVQb3NpdGlvbi5wYXJlbnQoKS5pc0NoaWxkQWxsb3dl
ZCgqdGV4dFJlbmRlcmVyLCByZW5kZXJUcmVlUG9zaXRpb24ucGFyZW50KCkuc3R5bGUoKSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHRleHROb2RlLnNldFJlbmRlcmVyKHRleHRSZW5kZXJlci5n
ZXQoKSk7Ci0KLSAgICBpZiAodGV4dFVwZGF0ZSAmJiB0ZXh0VXBkYXRlLT5pbmhlcml0ZWREaXNw
bGF5Q29udGVudHNTdHlsZSAmJiAqdGV4dFVwZGF0ZS0+aW5oZXJpdGVkRGlzcGxheUNvbnRlbnRz
U3R5bGUpIHsKLSAgICAgICAgLy8gV3JhcCB0ZXh0IHJlbmRlcmVyIGludG8gYW5vbnltb3VzIGlu
bGluZSBzbyB3ZSBjYW4gZ2l2ZSBpdCBhIHN0eWxlLgotICAgICAgICAvLyBUaGlzIGlzIHRvIHN1
cHBvcnQgIjxkaXYgc3R5bGU9J2Rpc3BsYXk6Y29udGVudHM7Y29sb3I6Z3JlZW4nPnRleHQ8L2Rp
dj4iIHR5cGUgY2FzZXMKLSAgICAgICAgYXV0byBuZXdEaXNwbGF5Q29udGVudHNBbm9ueW1vdXNX
cmFwcGVyID0gV2ViQ29yZTo6Y3JlYXRlUmVuZGVyZXI8UmVuZGVySW5saW5lPih0ZXh0Tm9kZS5k
b2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y2xvbmUoKip0ZXh0VXBkYXRlLT5pbmhlcml0ZWREaXNw
bGF5Q29udGVudHNTdHlsZSkpOwotICAgICAgICBuZXdEaXNwbGF5Q29udGVudHNBbm9ueW1vdXNX
cmFwcGVyLT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICAgICAgYXV0byYgZGlzcGxheUNvbnRlbnRz
QW5vbnltb3VzV3JhcHBlciA9ICpuZXdEaXNwbGF5Q29udGVudHNBbm9ueW1vdXNXcmFwcGVyOwot
ICAgICAgICBtX2J1aWxkZXIuaW5zZXJ0Q2hpbGQocmVuZGVyVHJlZVBvc2l0aW9uLCBXVEZNb3Zl
KG5ld0Rpc3BsYXlDb250ZW50c0Fub255bW91c1dyYXBwZXIpKTsKLQotICAgICAgICB0ZXh0UmVu
ZGVyZXItPnNldElubGluZVdyYXBwZXJGb3JEaXNwbGF5Q29udGVudHMoJmRpc3BsYXlDb250ZW50
c0Fub255bW91c1dyYXBwZXIpOwotICAgICAgICBtX2J1aWxkZXIuaW5zZXJ0Q2hpbGQoZGlzcGxh
eUNvbnRlbnRzQW5vbnltb3VzV3JhcHBlciwgV1RGTW92ZSh0ZXh0UmVuZGVyZXIpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZChyZW5kZXJUcmVl
UG9zaXRpb24sIFdURk1vdmUodGV4dFJlbmRlcmVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVHJlZVVw
ZGF0ZXI6OnVwZGF0ZVRleHRSZW5kZXJlcihUZXh0JiB0ZXh0LCBjb25zdCBTdHlsZTo6VGV4dFVw
ZGF0ZSogdGV4dFVwZGF0ZSkKLXsKLSAgICBhdXRvKiBleGlzdGluZ1JlbmRlcmVyID0gdGV4dC5y
ZW5kZXJlcigpOwotICAgIGJvb2wgbmVlZHNSZW5kZXJlciA9IHRleHRSZW5kZXJlcklzTmVlZGVk
KHRleHQpOwotCi0gICAgaWYgKGV4aXN0aW5nUmVuZGVyZXIgJiYgdGV4dFVwZGF0ZSAmJiB0ZXh0
VXBkYXRlLT5pbmhlcml0ZWREaXNwbGF5Q29udGVudHNTdHlsZSkgewotICAgICAgICBpZiAoZXhp
c3RpbmdSZW5kZXJlci0+aW5saW5lV3JhcHBlckZvckRpc3BsYXlDb250ZW50cygpIHx8ICp0ZXh0
VXBkYXRlLT5pbmhlcml0ZWREaXNwbGF5Q29udGVudHNTdHlsZSkgewotICAgICAgICAgICAgLy8g
RklYTUU6IFdlIGNvdWxkIHVwZGF0ZSB3aXRob3V0IHRlYXJkb3duLgotICAgICAgICAgICAgdGVh
ckRvd25UZXh0UmVuZGVyZXIodGV4dCk7Ci0gICAgICAgICAgICBleGlzdGluZ1JlbmRlcmVyID0g
bnVsbHB0cjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChleGlzdGluZ1JlbmRlcmVyKSB7
Ci0gICAgICAgIGlmIChuZWVkc1JlbmRlcmVyKSB7Ci0gICAgICAgICAgICBpZiAodGV4dFVwZGF0
ZSkKLSAgICAgICAgICAgICAgICBleGlzdGluZ1JlbmRlcmVyLT5zZXRUZXh0V2l0aE9mZnNldCh0
ZXh0LmRhdGEoKSwgdGV4dFVwZGF0ZS0+b2Zmc2V0LCB0ZXh0VXBkYXRlLT5sZW5ndGgpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRlYXJEb3duVGV4dFJlbmRlcmVy
KHRleHQpOwotICAgICAgICByZW5kZXJpbmdQYXJlbnQoKS5kaWRDcmVhdGVPckRlc3Ryb3lDaGls
ZFJlbmRlcmVyID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW5lZWRz
UmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjcmVhdGVUZXh0UmVuZGVyZXIodGV4dCwg
dGV4dFVwZGF0ZSk7Ci0gICAgcmVuZGVyaW5nUGFyZW50KCkuZGlkQ3JlYXRlT3JEZXN0cm95Q2hp
bGRSZW5kZXJlciA9IHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnN0b3JlUHJl
dmlvdXNSZW5kZXJlcihOb2RlJiBub2RlKQotewotICAgIGF1dG8qIHJlbmRlcmVyID0gbm9kZS5y
ZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NF
UlQocmVuZGVyaW5nUGFyZW50KCkucHJldmlvdXNDaGlsZFJlbmRlcmVyICE9IHJlbmRlcmVyKTsK
LSAgICByZW5kZXJpbmdQYXJlbnQoKS5wcmV2aW91c0NoaWxkUmVuZGVyZXIgPSByZW5kZXJlcjsK
LX0KLQotdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRvd25SZW5kZXJlcnMoRWxlbWVudCYg
cm9vdCkKLXsKLSAgICBhdXRvKiB2aWV3ID0gcm9vdC5kb2N1bWVudCgpLnJlbmRlclZpZXcoKTsK
LSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJUcmVlQnVpbGRlciBi
dWlsZGVyKCp2aWV3KTsKLSAgICB0ZWFyRG93blJlbmRlcmVycyhyb290LCBUZWFyZG93blR5cGU6
OkZ1bGwpOwotfQotCi12b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJlbmRlcmVyKFRl
eHQmIHRleHQpCi17Ci0gICAgYXV0byogdmlldyA9IHRleHQuZG9jdW1lbnQoKS5yZW5kZXJWaWV3
KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0gICAgUmVuZGVyVHJlZUJ1aWxk
ZXIgYnVpbGRlcigqdmlldyk7Ci0gICAgdGVhckRvd25UZXh0UmVuZGVyZXIodGV4dCk7Ci19Ci0K
LXZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKEVsZW1lbnQmIHJvb3Qs
IFRlYXJkb3duVHlwZSB0ZWFyZG93blR5cGUpCi17Ci0gICAgV2lkZ2V0SGllcmFyY2h5VXBkYXRl
c1N1c3BlbnNpb25TY29wZSBzdXNwZW5kV2lkZ2V0SGllcmFyY2h5VXBkYXRlczsKLQotICAgIFZl
Y3RvcjxFbGVtZW50KiwgMzA+IHRlYXJkb3duU3RhY2s7Ci0KLSAgICBhdXRvIHB1c2ggPSBbJl0g
KEVsZW1lbnQmIGVsZW1lbnQpIHsKLSAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ3VzdG9tU3R5bGVS
ZXNvbHZlQ2FsbGJhY2tzKCkpCi0gICAgICAgICAgICBlbGVtZW50LndpbGxEZXRhY2hSZW5kZXJl
cnMoKTsKLSAgICAgICAgdGVhcmRvd25TdGFjay5hcHBlbmQoJmVsZW1lbnQpOwotICAgIH07Ci0K
LSAgICBhdXRvJiBhbmltYXRpb25Db250cm9sbGVyID0gcm9vdC5kb2N1bWVudCgpLmZyYW1lKCkt
PmFuaW1hdGlvbigpOwotCi0gICAgYXV0byBwb3AgPSBbJl0gKHVuc2lnbmVkIGRlcHRoKSB7Ci0g
ICAgICAgIHdoaWxlICh0ZWFyZG93blN0YWNrLnNpemUoKSA+IGRlcHRoKSB7Ci0gICAgICAgICAg
ICBhdXRvJiBlbGVtZW50ID0gKnRlYXJkb3duU3RhY2sudGFrZUxhc3QoKTsKLQotICAgICAgICAg
ICAgaWYgKHRlYXJkb3duVHlwZSA9PSBUZWFyZG93blR5cGU6OkZ1bGwgfHwgdGVhcmRvd25UeXBl
ID09IFRlYXJkb3duVHlwZTo6UmVuZGVyZXJVcGRhdGVDYW5jZWxpbmdBbmltYXRpb25zKQotICAg
ICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIuY2FuY2VsQW5pbWF0aW9ucyhlbGVtZW50
KTsKLQotICAgICAgICAgICAgaWYgKHRlYXJkb3duVHlwZSA9PSBUZWFyZG93blR5cGU6OkZ1bGwp
Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5jbGVhckhvdmVyQW5kQWN0aXZlU3RhdHVzQmVmb3Jl
RGV0YWNoaW5nUmVuZGVyZXIoKTsKLQotICAgICAgICAgICAgR2VuZXJhdGVkQ29udGVudDo6cmVt
b3ZlQmVmb3JlUHNldWRvRWxlbWVudChlbGVtZW50KTsKLSAgICAgICAgICAgIEdlbmVyYXRlZENv
bnRlbnQ6OnJlbW92ZUFmdGVyUHNldWRvRWxlbWVudChlbGVtZW50KTsKLQotICAgICAgICAgICAg
aWYgKGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAg
ICAgcmVuZGVyZXItPnJlbW92ZUZyb21QYXJlbnRBbmREZXN0cm95Q2xlYW5pbmdVcEFub255bW91
c1dyYXBwZXJzKCk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRSZW5kZXJlcihudWxscHRy
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0N1c3RvbVN0eWxl
UmVzb2x2ZUNhbGxiYWNrcygpKQotICAgICAgICAgICAgICAgIGVsZW1lbnQuZGlkRGV0YWNoUmVu
ZGVyZXJzKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHVzaChyb290KTsKLQotICAgIGF1
dG8gZGVzY2VuZGFudHMgPSBjb21wb3NlZFRyZWVEZXNjZW5kYW50cyhyb290KTsKLSAgICBmb3Ig
KGF1dG8gaXQgPSBkZXNjZW5kYW50cy5iZWdpbigpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHBvcChpdC5kZXB0aCgpKTsKLQotICAgICAgICBp
ZiAoaXM8VGV4dD4oKml0KSkgewotICAgICAgICAgICAgdGVhckRvd25UZXh0UmVuZGVyZXIoZG93
bmNhc3Q8VGV4dD4oKml0KSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHB1c2goZG93bmNhc3Q8RWxlbWVudD4oKml0KSk7Ci0gICAgfQotCi0gICAgcG9wKDAp
OwotfQotCi12b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blRleHRSZW5kZXJlcihUZXh0
JiB0ZXh0KQotewotICAgIGF1dG8qIHJlbmRlcmVyID0gdGV4dC5yZW5kZXJlcigpOwotICAgIGlm
ICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLSAgICByZW5kZXJlci0+cmVtb3ZlRnJvbVBh
cmVudEFuZERlc3Ryb3lDbGVhbmluZ1VwQW5vbnltb3VzV3JhcHBlcnMoKTsKLSAgICB0ZXh0LnNl
dFJlbmRlcmVyKG51bGxwdHIpOwotfQotCi1SZW5kZXJWaWV3JiBSZW5kZXJUcmVlVXBkYXRlcjo6
cmVuZGVyVmlldygpCi17Ci0gICAgcmV0dXJuICptX2RvY3VtZW50LnJlbmRlclZpZXcoKTsKLX0K
LQotI2lmIFBMQVRGT1JNKElPUykKLXN0YXRpYyBFVmlzaWJpbGl0eSBlbGVtZW50SW1wbGljaXRW
aXNpYmlsaXR5KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgYXV0byogcmVuZGVyZXIg
PSBlbGVtZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJu
IFZJU0lCTEU7Ci0KLSAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotCi0gICAg
YXV0byB3aWR0aCA9IHN0eWxlLndpZHRoKCk7Ci0gICAgYXV0byBoZWlnaHQgPSBzdHlsZS5oZWln
aHQoKTsKLSAgICBpZiAoKHdpZHRoLmlzRml4ZWQoKSAmJiB3aWR0aC52YWx1ZSgpIDw9IDApIHx8
IChoZWlnaHQuaXNGaXhlZCgpICYmIGhlaWdodC52YWx1ZSgpIDw9IDApKQotICAgICAgICByZXR1
cm4gSElEREVOOwotCi0gICAgYXV0byB0b3AgPSBzdHlsZS50b3AoKTsKLSAgICBhdXRvIGxlZnQg
PSBzdHlsZS5sZWZ0KCk7Ci0gICAgaWYgKGxlZnQuaXNGaXhlZCgpICYmIHdpZHRoLmlzRml4ZWQo
KSAmJiAtbGVmdC52YWx1ZSgpID49IHdpZHRoLnZhbHVlKCkpCi0gICAgICAgIHJldHVybiBISURE
RU47Ci0KLSAgICBpZiAodG9wLmlzRml4ZWQoKSAmJiBoZWlnaHQuaXNGaXhlZCgpICYmIC10b3Au
dmFsdWUoKSA+PSBoZWlnaHQudmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIEhJRERFTjsKLSAgICBy
ZXR1cm4gVklTSUJMRTsKLX0KLQotQ2hlY2tGb3JWaXNpYmlsaXR5Q2hhbmdlOjpDaGVja0ZvclZp
c2liaWxpdHlDaGFuZ2UoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKLSAgICA6IG1fZWxlbWVudChl
bGVtZW50KQotICAgICwgbV9wcmV2aW91c0Rpc3BsYXkoZWxlbWVudC5yZW5kZXJTdHlsZSgpID8g
ZWxlbWVudC5yZW5kZXJTdHlsZSgpLT5kaXNwbGF5KCkgOiBOT05FKQotICAgICwgbV9wcmV2aW91
c1Zpc2liaWxpdHkoZWxlbWVudC5yZW5kZXJTdHlsZSgpID8gZWxlbWVudC5yZW5kZXJTdHlsZSgp
LT52aXNpYmlsaXR5KCkgOiBISURERU4pCi0gICAgLCBtX3ByZXZpb3VzSW1wbGljaXRWaXNpYmls
aXR5KFdLT2JzZXJ2aW5nQ29udGVudENoYW5nZXMoKSAmJiBXS09ic2VydmVkQ29udGVudENoYW5n
ZSgpICE9IFdLQ29udGVudFZpc2liaWxpdHlDaGFuZ2UgPyBlbGVtZW50SW1wbGljaXRWaXNpYmls
aXR5KGVsZW1lbnQpIDogVklTSUJMRSkKLXsKLX0KLQotQ2hlY2tGb3JWaXNpYmlsaXR5Q2hhbmdl
Ojp+Q2hlY2tGb3JWaXNpYmlsaXR5Q2hhbmdlKCkKLXsKLSAgICBpZiAoIVdLT2JzZXJ2aW5nQ29u
dGVudENoYW5nZXMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX2VsZW1lbnQuaXNJblVz
ZXJBZ2VudFNoYWRvd1RyZWUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8qIHN0eWxlID0g
bV9lbGVtZW50LnJlbmRlclN0eWxlKCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmICgobV9wcmV2aW91c0Rpc3BsYXkgPT0gTk9ORSAmJiBzdHlsZS0+ZGlzcGxheSgp
ICE9IE5PTkUpIHx8IChtX3ByZXZpb3VzVmlzaWJpbGl0eSA9PSBISURERU4gJiYgc3R5bGUtPnZp
c2liaWxpdHkoKSAhPSBISURERU4pCi0gICAgICAgIHx8IChtX3ByZXZpb3VzSW1wbGljaXRWaXNp
YmlsaXR5ID09IEhJRERFTiAmJiBlbGVtZW50SW1wbGljaXRWaXNpYmlsaXR5KG1fZWxlbWVudCkg
PT0gVklTSUJMRSkpCi0gICAgICAgIFdLU2V0T2JzZXJ2ZWRDb250ZW50Q2hhbmdlKFdLQ29udGVu
dFZpc2liaWxpdHlDaGFuZ2UpOwotfQotI2VuZGlmCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuaAkocmV2aXNpb24gMjI2MDA5KQorKysgU291cmNlL1dl
YkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDEwOCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRl
clRyZWVCdWlsZGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZVBvc2l0aW9uLmgiCi0jaW5jbHVk
ZSAiU3R5bGVDaGFuZ2UuaCIKLSNpbmNsdWRlICJTdHlsZVVwZGF0ZS5oIgotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIENvbnRhaW5lck5vZGU7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEVsZW1l
bnQ7Ci1jbGFzcyBOb2RlOwotY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBUZXh0OwotCi1jbGFz
cyBSZW5kZXJUcmVlVXBkYXRlciB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyVHJlZVVwZGF0ZXIoRG9j
dW1lbnQmKTsKLSAgICB+UmVuZGVyVHJlZVVwZGF0ZXIoKTsKLQotICAgIHZvaWQgY29tbWl0KHN0
ZDo6dW5pcXVlX3B0cjxjb25zdCBTdHlsZTo6VXBkYXRlPik7Ci0KLSAgICBzdGF0aWMgdm9pZCB0
ZWFyRG93blJlbmRlcmVycyhFbGVtZW50Jik7Ci0gICAgc3RhdGljIHZvaWQgdGVhckRvd25SZW5k
ZXJlcihUZXh0Jik7Ci0KLSAgICBjbGFzcyBGaXJzdExldHRlcjsKLSAgICBjbGFzcyBMaXN0SXRl
bTsKLQotcHJpdmF0ZToKLSAgICBjbGFzcyBHZW5lcmF0ZWRDb250ZW50OwotICAgIGNsYXNzIE11
bHRpQ29sdW1uOwotCi0gICAgdm9pZCB1cGRhdGVSZW5kZXJUcmVlKENvbnRhaW5lck5vZGUmIHJv
b3QpOwotICAgIHZvaWQgdXBkYXRlVGV4dFJlbmRlcmVyKFRleHQmLCBjb25zdCBTdHlsZTo6VGV4
dFVwZGF0ZSopOwotICAgIHZvaWQgY3JlYXRlVGV4dFJlbmRlcmVyKFRleHQmLCBjb25zdCBTdHls
ZTo6VGV4dFVwZGF0ZSopOwotICAgIHZvaWQgdXBkYXRlRWxlbWVudFJlbmRlcmVyKEVsZW1lbnQm
LCBjb25zdCBTdHlsZTo6RWxlbWVudFVwZGF0ZSYpOwotICAgIHZvaWQgY3JlYXRlUmVuZGVyZXIo
RWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOwotICAgIHZvaWQgdXBkYXRlQmVmb3JlRGVzY2VuZGFu
dHMoRWxlbWVudCYsIGNvbnN0IFN0eWxlOjpFbGVtZW50VXBkYXRlcyopOwotICAgIHZvaWQgdXBk
YXRlQWZ0ZXJEZXNjZW5kYW50cyhFbGVtZW50JiwgY29uc3QgU3R5bGU6OkVsZW1lbnRVcGRhdGVz
Kik7Ci0gICAgYm9vbCB0ZXh0UmVuZGVyZXJJc05lZWRlZChjb25zdCBUZXh0JiB0ZXh0Tm9kZSk7
Ci0gICAgdm9pZCBzdG9yZVByZXZpb3VzUmVuZGVyZXIoTm9kZSYpOwotCi0gICAgc3RydWN0IFBh
cmVudCB7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgeyBudWxscHRyIH07Ci0gICAgICAgIGNv
bnN0IFN0eWxlOjpFbGVtZW50VXBkYXRlcyogdXBkYXRlcyB7IG51bGxwdHIgfTsKLSAgICAgICAg
c3RkOjpvcHRpb25hbDxSZW5kZXJUcmVlUG9zaXRpb24+IHJlbmRlclRyZWVQb3NpdGlvbjsKLQot
ICAgICAgICBib29sIGRpZENyZWF0ZU9yRGVzdHJveUNoaWxkUmVuZGVyZXIgeyBmYWxzZSB9Owot
ICAgICAgICBSZW5kZXJPYmplY3QqIHByZXZpb3VzQ2hpbGRSZW5kZXJlciB7IG51bGxwdHIgfTsK
LQotICAgICAgICBQYXJlbnQoQ29udGFpbmVyTm9kZSYgcm9vdCk7Ci0gICAgICAgIFBhcmVudChF
bGVtZW50JiwgY29uc3QgU3R5bGU6OkVsZW1lbnRVcGRhdGVzKik7Ci0gICAgfTsKLSAgICBQYXJl
bnQmIHBhcmVudCgpIHsgcmV0dXJuIG1fcGFyZW50U3RhY2subGFzdCgpOyB9Ci0gICAgUGFyZW50
JiByZW5kZXJpbmdQYXJlbnQoKTsKLSAgICBSZW5kZXJUcmVlUG9zaXRpb24mIHJlbmRlclRyZWVQ
b3NpdGlvbigpOwotCi0gICAgR2VuZXJhdGVkQ29udGVudCYgZ2VuZXJhdGVkQ29udGVudCgpIHsg
cmV0dXJuICptX2dlbmVyYXRlZENvbnRlbnQ7IH0KLQotICAgIHZvaWQgcHVzaFBhcmVudChFbGVt
ZW50JiwgY29uc3QgU3R5bGU6OkVsZW1lbnRVcGRhdGVzKik7Ci0gICAgdm9pZCBwb3BQYXJlbnQo
KTsKLSAgICB2b2lkIHBvcFBhcmVudHNUb0RlcHRoKHVuc2lnbmVkIGRlcHRoKTsKLQotICAgIGVu
dW0gY2xhc3MgVGVhcmRvd25UeXBlIHsgRnVsbCwgUmVuZGVyZXJVcGRhdGUsIFJlbmRlcmVyVXBk
YXRlQ2FuY2VsaW5nQW5pbWF0aW9ucyB9OwotICAgIHN0YXRpYyB2b2lkIHRlYXJEb3duUmVuZGVy
ZXJzKEVsZW1lbnQmLCBUZWFyZG93blR5cGUpOwotICAgIHN0YXRpYyB2b2lkIHRlYXJEb3duVGV4
dFJlbmRlcmVyKFRleHQmKTsKLQotICAgIFJlbmRlclZpZXcmIHJlbmRlclZpZXcoKTsKLQotICAg
IERvY3VtZW50JiBtX2RvY3VtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBTdHlsZTo6
VXBkYXRlPiBtX3N0eWxlVXBkYXRlOwotCi0gICAgVmVjdG9yPFBhcmVudD4gbV9wYXJlbnRTdGFj
azsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHZW5lcmF0ZWRDb250ZW50PiBtX2dlbmVyYXRlZENv
bnRlbnQ7Ci0KLSAgICBSZW5kZXJUcmVlQnVpbGRlciBtX2J1aWxkZXI7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBk
YXRlckZpcnN0TGV0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9S
ZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcAkocmV2aXNpb24gMjI2MDA5KQorKysgU291
cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5jcHAJKG5vbmV4
aXN0ZW50KQpAQCAtMSwyNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDA3IERhdmlkIFNtaXRo
IChjYXRmaXNoLm1hbkBnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMSwgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmgiCi0K
LSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0jaW5j
bHVkZSAiUmVuZGVyQnV0dG9uLmgiCi0jaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyUnVieVJ1bi5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyVGV4dEZyYWdtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXIuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgUmVuZGVyU3R5bGUgc3R5bGVGb3JGaXJzdExldHRl
cihjb25zdCBSZW5kZXJCbG9jayYgZmlyc3RMZXR0ZXJCbG9jaywgY29uc3QgUmVuZGVyT2JqZWN0
JiBmaXJzdExldHRlckNvbnRhaW5lcikKLXsKLSAgICBhdXRvKiBjb250YWluZXJGaXJzdExldHRl
clN0eWxlID0gZmlyc3RMZXR0ZXJCbG9jay5nZXRDYWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MRVRU
RVIsICZmaXJzdExldHRlckNvbnRhaW5lci5maXJzdExpbmVTdHlsZSgpKTsKLSAgICAvLyBGSVhN
RTogVGhlcmUgYXBwZWFycyB0byBiZSBzb21lIHBhdGggd2hlcmUgd2UgaGF2ZSBhIGZpcnN0IGxl
dHRlciByZW5kZXJlciB3aXRob3V0IGZpcnN0IGxldHRlciBzdHlsZS4KLSAgICBBU1NFUlQoY29u
dGFpbmVyRmlyc3RMZXR0ZXJTdHlsZSk7Ci0gICAgYXV0byBmaXJzdExldHRlclN0eWxlID0gUmVu
ZGVyU3R5bGU6OmNsb25lKGNvbnRhaW5lckZpcnN0TGV0dGVyU3R5bGUgPyAqY29udGFpbmVyRmly
c3RMZXR0ZXJTdHlsZSA6IGZpcnN0TGV0dGVyQ29udGFpbmVyLmZpcnN0TGluZVN0eWxlKCkpOwot
Ci0gICAgLy8gSWYgd2UgaGF2ZSBhbiBpbml0aWFsIGxldHRlciBkcm9wIHRoYXQgaXMgPj0gMSwg
dGhlbiB3ZSBuZWVkIHRvIGZvcmNlIGZsb2F0aW5nIHRvIGJlIG9uLgotICAgIGlmIChmaXJzdExl
dHRlclN0eWxlLmluaXRpYWxMZXR0ZXJEcm9wKCkgPj0gMSAmJiAhZmlyc3RMZXR0ZXJTdHlsZS5p
c0Zsb2F0aW5nKCkpCi0gICAgICAgIGZpcnN0TGV0dGVyU3R5bGUuc2V0RmxvYXRpbmcoZmlyc3RM
ZXR0ZXJTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBMZWZ0RmxvYXQgOiBSaWdodEZs
b2F0KTsKLQotICAgIC8vIFdlIGhhdmUgdG8gY29tcHV0ZSB0aGUgY29ycmVjdCBmb250LXNpemUg
Zm9yIHRoZSBmaXJzdC1sZXR0ZXIgaWYgaXQgaGFzIGFuIGluaXRpYWwgbGV0dGVyIGhlaWdodCBz
ZXQuCi0gICAgYXV0byogcGFyYWdyYXBoID0gZmlyc3RMZXR0ZXJDb250YWluZXIuaXNSZW5kZXJC
bG9ja0Zsb3coKSA/ICZmaXJzdExldHRlckNvbnRhaW5lciA6IGZpcnN0TGV0dGVyQ29udGFpbmVy
LmNvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChmaXJzdExldHRlclN0eWxlLmluaXRpYWxMZXR0
ZXJIZWlnaHQoKSA+PSAxICYmIGZpcnN0TGV0dGVyU3R5bGUuZm9udE1ldHJpY3MoKS5oYXNDYXBI
ZWlnaHQoKSAmJiBwYXJhZ3JhcGgtPnN0eWxlKCkuZm9udE1ldHJpY3MoKS5oYXNDYXBIZWlnaHQo
KSkgewotICAgICAgICAvLyBGSVhNRTogRm9yIGlkZW9ncmFwaGljIGJhc2VsaW5lcywgd2Ugd2Fu
dCB0byBnbyBmcm9tIGxpbmUgZWRnZSB0byBsaW5lIGVkZ2UuIFRoaXMgaXMgZXF1aXZhbGVudCB0
byAoTi0xKSpsaW5lLWhlaWdodCArIHRoZSBmb250IGhlaWdodC4KLSAgICAgICAgLy8gV2UgZG9u
J3QgeWV0IHN1cHBvcnQgaWRlb2dyYXBoaWMgYmFzZWxpbmVzLgotICAgICAgICAvLyBGb3IgYW4g
Ti1saW5lIGZpcnN0LWxldHRlciBhbmQgZm9yIGFscGhhYmV0aWMgYmFzZWxpbmVzLCB0aGUgY2Fw
LWhlaWdodCBvZiB0aGUgZmlyc3QgbGV0dGVyIG5lZWRzIHRvIGVxdWFsIChOLTEpKmxpbmUtaGVp
Z2h0IG9mIHBhcmFncmFwaCBsaW5lcyArIGNhcC1oZWlnaHQgb2YgdGhlIHBhcmFncmFwaAotICAg
ICAgICAvLyBNYXRoZW1hdGljYWxseSB3ZSBjYW4ndCByZWx5IG9uIGZvbnQtc2l6ZSwgc2luY2Ug
Zm9udCgpLmhlaWdodCgpIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWF0Y2guIEZvciByZWxpYWJpbGl0
eSwgdGhlIGJlc3QgYXBwcm9hY2ggaXMgc2ltcGx5IHRvCi0gICAgICAgIC8vIGNvbXBhcmUgdGhl
IGZpbmFsIG1lYXN1cmVkIGNhcC1oZWlnaHRzIG9mIHRoZSB0d28gZm9udHMgaW4gb3JkZXIgdG8g
Z2V0IHRvIHRoZSBjbG9zZXN0IHBvc3NpYmxlIHZhbHVlLgotICAgICAgICBmaXJzdExldHRlclN0
eWxlLnNldExpbmVCb3hDb250YWluKExpbmVCb3hDb250YWluSW5pdGlhbExldHRlcik7Ci0gICAg
ICAgIGludCBsaW5lSGVpZ2h0ID0gcGFyYWdyYXBoLT5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdo
dCgpOwotCi0gICAgICAgIC8vIFNldCB0aGUgZm9udCB0byBiZSBvbmUgbGluZSB0b28gYmlnIGFu
ZCB0aGVuIHJhdGNoZXQgYmFjayB0byBnZXQgdG8gYSBwcmVjaXNlIGZpdC4gV2UgY2FuJ3QganVz
dCBzZXQgdGhlIGRlc2lyZWQgZm9udCBzaXplIGJhc2VkIG9mZiBmb250IGhlaWdodCBtZXRyaWNz
Ci0gICAgICAgIC8vIGJlY2F1c2UgbWFueSBmb250cyBiYWtlIGFzY2VudCBpbnRvIHRoZSBmb250
IG1ldHJpY3MuIFRoZXJlZm9yZSB3ZSBoYXZlIHRvIGxvb2sgYXQgYWN0dWFsIG1lYXN1cmVkIGNh
cCBoZWlnaHQgdmFsdWVzIGluIG9yZGVyIHRvIGtub3cgd2hlbiB3ZSBoYXZlIGEgZ29vZCBmaXQu
Ci0gICAgICAgIGF1dG8gbmV3Rm9udERlc2NyaXB0aW9uID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250
RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZmxvYXQgY2FwUmF0aW8gPSBmaXJzdExldHRlclN0eWxl
LmZvbnRNZXRyaWNzKCkuZmxvYXRDYXBIZWlnaHQoKSAvIGZpcnN0TGV0dGVyU3R5bGUuY29tcHV0
ZWRGb250UGl4ZWxTaXplKCk7Ci0gICAgICAgIGZsb2F0IHN0YXJ0aW5nRm9udFNpemUgPSAoKGZp
cnN0TGV0dGVyU3R5bGUuaW5pdGlhbExldHRlckhlaWdodCgpIC0gMSkgKiBsaW5lSGVpZ2h0ICsg
cGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCkpIC8gY2FwUmF0aW87
Ci0gICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0YXJ0aW5nRm9u
dFNpemUpOwotICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0YXJ0
aW5nRm9udFNpemUpOwotICAgICAgICBmaXJzdExldHRlclN0eWxlLnNldEZvbnREZXNjcmlwdGlv
bihuZXdGb250RGVzY3JpcHRpb24pOwotICAgICAgICBmaXJzdExldHRlclN0eWxlLmZvbnRDYXNj
YWRlKCkudXBkYXRlKGZpcnN0TGV0dGVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3Io
KSk7Ci0KLSAgICAgICAgaW50IGRlc2lyZWRDYXBIZWlnaHQgPSAoZmlyc3RMZXR0ZXJTdHlsZS5p
bml0aWFsTGV0dGVySGVpZ2h0KCkgLSAxKSAqIGxpbmVIZWlnaHQgKyBwYXJhZ3JhcGgtPnN0eWxl
KCkuZm9udE1ldHJpY3MoKS5jYXBIZWlnaHQoKTsKLSAgICAgICAgaW50IGFjdHVhbENhcEhlaWdo
dCA9IGZpcnN0TGV0dGVyU3R5bGUuZm9udE1ldHJpY3MoKS5jYXBIZWlnaHQoKTsKLSAgICAgICAg
d2hpbGUgKGFjdHVhbENhcEhlaWdodCA+IGRlc2lyZWRDYXBIZWlnaHQpIHsKLSAgICAgICAgICAg
IGF1dG8gbmV3Rm9udERlc2NyaXB0aW9uID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250RGVzY3JpcHRp
b24oKTsKLSAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKG5l
d0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkgLSAxKTsKLSAgICAgICAgICAgIG5ld0Zv
bnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUobmV3Rm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
U2l6ZSgpIC0xKTsKLSAgICAgICAgICAgIGZpcnN0TGV0dGVyU3R5bGUuc2V0Rm9udERlc2NyaXB0
aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICBmaXJzdExldHRlclN0eWxlLmZv
bnRDYXNjYWRlKCkudXBkYXRlKGZpcnN0TGV0dGVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250U2Vs
ZWN0b3IoKSk7Ci0gICAgICAgICAgICBhY3R1YWxDYXBIZWlnaHQgPSBmaXJzdExldHRlclN0eWxl
LmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBG
b3JjZSBpbmxpbmUgZGlzcGxheSAoZXhjZXB0IGZvciBmbG9hdGluZyBmaXJzdC1sZXR0ZXJzKS4K
LSAgICBmaXJzdExldHRlclN0eWxlLnNldERpc3BsYXkoZmlyc3RMZXR0ZXJTdHlsZS5pc0Zsb2F0
aW5nKCkgPyBCTE9DSyA6IElOTElORSk7Ci0gICAgLy8gQ1NTMiBzYXlzIGZpcnN0LWxldHRlciBj
YW4ndCBiZSBwb3NpdGlvbmVkLgotICAgIGZpcnN0TGV0dGVyU3R5bGUuc2V0UG9zaXRpb24oU3Rh
dGljUG9zaXRpb24pOwotICAgIHJldHVybiBmaXJzdExldHRlclN0eWxlOwotfQotCi0vLyBDU1Mg
Mi4xIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3NlbGVjdG9yLmh0bWwjZmlyc3QtbGV0dGVy
Ci0vLyAiUHVuY3R1YXRpb24gKGkuZSwgY2hhcmFjdGVycyBkZWZpbmVkIGluIFVuaWNvZGUgW1VO
SUNPREVdIGluIHRoZSAib3BlbiIgKFBzKSwgImNsb3NlIiAoUGUpLAotLy8gImluaXRpYWwiIChQ
aSkuICJmaW5hbCIgKFBmKSBhbmQgIm90aGVyIiAoUG8pIHB1bmN0dWF0aW9uIGNsYXNzZXMpLCB0
aGF0IHByZWNlZGVzIG9yIGZvbGxvd3MgdGhlIGZpcnN0IGxldHRlciBzaG91bGQgYmUgaW5jbHVk
ZWQiCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQdW5jdHVhdGlvbkZvckZpcnN0TGV0dGVyKFVDaGFy
IGMpCi17Ci0gICAgcmV0dXJuIFVfR0VUX0dDX01BU0soYykgJiAoVV9HQ19QU19NQVNLIHwgVV9H
Q19QRV9NQVNLIHwgVV9HQ19QSV9NQVNLIHwgVV9HQ19QRl9NQVNLIHwgVV9HQ19QT19NQVNLKTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIHNob3VsZFNraXBGb3JGaXJzdExldHRlcihVQ2hhciBj
KQotewotICAgIHJldHVybiBpc1NwYWNlT3JOZXdsaW5lKGMpIHx8IGMgPT0gbm9CcmVha1NwYWNl
IHx8IGlzUHVuY3R1YXRpb25Gb3JGaXJzdExldHRlcihjKTsKLX0KLQotc3RhdGljIHZvaWQgdXBk
YXRlRmlyc3RMZXR0ZXJTdHlsZShSZW5kZXJCbG9jayYgZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVy
T2JqZWN0JiBjdXJyZW50Q2hpbGQpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXIg
PSBjdXJyZW50Q2hpbGQucGFyZW50KCk7Ci0gICAgQVNTRVJUKGZpcnN0TGV0dGVyLT5pc0ZpcnN0
TGV0dGVyKCkpOwotCi0gICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXIgPSBm
aXJzdExldHRlci0+cGFyZW50KCk7Ci0gICAgYXV0byBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmly
c3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgKmZpcnN0TGV0dGVyQ29udGFpbmVyKTsKLSAgICBB
U1NFUlQoZmlyc3RMZXR0ZXItPmlzRmxvYXRpbmcoKSB8fCBmaXJzdExldHRlci0+aXNJbmxpbmUo
KSk7Ci0KLSAgICBpZiAoU3R5bGU6OmRldGVybWluZUNoYW5nZShmaXJzdExldHRlci0+c3R5bGUo
KSwgcHNldWRvU3R5bGUpID09IFN0eWxlOjpEZXRhY2gpIHsKLSAgICAgICAgLy8gVGhlIGZpcnN0
LWxldHRlciByZW5kZXJlciBuZWVkcyB0byBiZSByZXBsYWNlZC4gQ3JlYXRlIGEgbmV3IHJlbmRl
cmVyIG9mIHRoZSByaWdodCB0eXBlLgotICAgICAgICBSZW5kZXJQdHI8UmVuZGVyQm94TW9kZWxP
YmplY3Q+IG5ld0ZpcnN0TGV0dGVyOwotICAgICAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgp
ID09IElOTElORSkKLSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyID0gY3JlYXRlUmVuZGVyZXI8
UmVuZGVySW5saW5lPihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUocHNldWRv
U3R5bGUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVh
dGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwg
V1RGTW92ZShwc2V1ZG9TdHlsZSkpOwotICAgICAgICBuZXdGaXJzdExldHRlci0+aW5pdGlhbGl6
ZVN0eWxlKCk7Ci0gICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5zZXRJc0ZpcnN0TGV0dGVyKCk7Ci0K
LSAgICAgICAgLy8gTW92ZSB0aGUgZmlyc3QgbGV0dGVyIGludG8gdGhlIG5ldyByZW5kZXJlci4K
LSAgICAgICAgd2hpbGUgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdExldHRlci0+Zmlyc3RD
aGlsZCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4oKmNoaWxkKSkKLSAgICAg
ICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUZXh0PigqY2hpbGQpLnJlbW92ZUFuZERlc3Ryb3lU
ZXh0Qm94ZXMoKTsKLSAgICAgICAgICAgIGF1dG8gdG9Nb3ZlID0gZmlyc3RMZXR0ZXItPnRha2VD
aGlsZCgqY2hpbGQpOwotICAgICAgICAgICAgUmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKS0+
aW5zZXJ0Q2hpbGQoKm5ld0ZpcnN0TGV0dGVyLCBXVEZNb3ZlKHRvTW92ZSkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IGZpcnN0TGV0dGVyLT5uZXh0
U2libGluZygpOwotICAgICAgICBpZiAoUmVuZGVyVGV4dEZyYWdtZW50KiByZW1haW5pbmdUZXh0
ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpmaXJzdExldHRlcikuZmlyc3RMZXR0
ZXJSZW1haW5pbmdUZXh0KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZW1haW5pbmdUZXh0LT5p
c0Fub255bW91cygpIHx8IHJlbWFpbmluZ1RleHQtPnRleHROb2RlKCktPnJlbmRlcmVyKCkgPT0g
cmVtYWluaW5nVGV4dCk7Ci0gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBvbGQgcmVuZGVyZXIg
d2l0aCB0aGUgbmV3IG9uZS4KLSAgICAgICAgICAgIHJlbWFpbmluZ1RleHQtPnNldEZpcnN0TGV0
dGVyKCpuZXdGaXJzdExldHRlcik7Ci0gICAgICAgICAgICBuZXdGaXJzdExldHRlci0+c2V0Rmly
c3RMZXR0ZXJSZW1haW5pbmdUZXh0KCpyZW1haW5pbmdUZXh0KTsKLSAgICAgICAgfQotICAgICAg
ICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKCpmaXJzdExldHRl
cik7Ci0gICAgICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKCpm
aXJzdExldHRlckNvbnRhaW5lciwgV1RGTW92ZShuZXdGaXJzdExldHRlciksIG5leHRTaWJsaW5n
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmlyc3RMZXR0ZXItPnNldFN0eWxlKFdURk1vdmUocHNl
dWRvU3R5bGUpKTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlRmlyc3RMZXR0ZXJSZW5kZXJlcihS
ZW5kZXJCbG9jayYgZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyVGV4dCYgY3VycmVudFRleHRDaGls
ZCkKLXsKLSAgICBSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckNvbnRhaW5lciA9IGN1cnJlbnRU
ZXh0Q2hpbGQucGFyZW50KCk7Ci0gICAgYXV0byBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RM
ZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgKmZpcnN0TGV0dGVyQ29udGFpbmVyKTsKLSAgICBSZW5k
ZXJQdHI8UmVuZGVyQm94TW9kZWxPYmplY3Q+IG5ld0ZpcnN0TGV0dGVyOwotICAgIGlmIChwc2V1
ZG9TdHlsZS5kaXNwbGF5KCkgPT0gSU5MSU5FKQotICAgICAgICBuZXdGaXJzdExldHRlciA9IGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlcklubGluZT4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBX
VEZNb3ZlKHBzZXVkb1N0eWxlKSk7Ci0gICAgZWxzZQotICAgICAgICBuZXdGaXJzdExldHRlciA9
IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVu
dCgpLCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7Ci0gICAgbmV3Rmlyc3RMZXR0ZXItPmluaXRpYWxp
emVTdHlsZSgpOwotICAgIG5ld0ZpcnN0TGV0dGVyLT5zZXRJc0ZpcnN0TGV0dGVyKCk7Ci0KLSAg
ICBhdXRvJiBmaXJzdExldHRlciA9ICpuZXdGaXJzdExldHRlcjsKLSAgICBSZW5kZXJUcmVlQnVp
bGRlcjo6Y3VycmVudCgpLT5pbnNlcnRDaGlsZCgqZmlyc3RMZXR0ZXJDb250YWluZXIsIFdURk1v
dmUobmV3Rmlyc3RMZXR0ZXIpLCAmY3VycmVudFRleHRDaGlsZCk7Ci0KLSAgICAvLyBUaGUgb3Jp
Z2luYWwgc3RyaW5nIGlzIGdvaW5nIHRvIGJlIGVpdGhlciBhIGdlbmVyYXRlZCBjb250ZW50IHN0
cmluZyBvciBhIERPTSBub2RlJ3MKLSAgICAvLyBzdHJpbmcuIFdlIHdhbnQgdGhlIG9yaWdpbmFs
IHN0cmluZyBiZWZvcmUgaXQgZ290IHRyYW5zZm9ybWVkIGluIGNhc2UgZmlyc3QtbGV0dGVyIGhh
cwotICAgIC8vIG5vIHRleHQtdHJhbnNmb3JtIG9yIGEgZGlmZmVyZW50IHRleHQtdHJhbnNmb3Jt
IGFwcGxpZWQgdG8gaXQuCi0gICAgU3RyaW5nIG9sZFRleHQgPSBjdXJyZW50VGV4dENoaWxkLm9y
aWdpbmFsVGV4dCgpOwotICAgIEFTU0VSVCghb2xkVGV4dC5pc051bGwoKSk7Ci0KLSAgICBpZiAo
IW9sZFRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7Ci0KLSAg
ICAgICAgLy8gQWNjb3VudCBmb3IgbGVhZGluZyBzcGFjZXMgYW5kIHB1bmN0dWF0aW9uLgotICAg
ICAgICB3aGlsZSAobGVuZ3RoIDwgb2xkVGV4dC5sZW5ndGgoKSAmJiBzaG91bGRTa2lwRm9yRmly
c3RMZXR0ZXIob2xkVGV4dFtsZW5ndGhdKSkKLSAgICAgICAgICAgIGxlbmd0aCsrOwotCi0gICAg
ICAgIC8vIEFjY291bnQgZm9yIGZpcnN0IGdyYXBoZW1lIGNsdXN0ZXIuCi0gICAgICAgIGxlbmd0
aCArPSBudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKFN0cmluZ1ZpZXcob2xkVGV4dCku
c3Vic3RyaW5nKGxlbmd0aCksIDEpOwotCi0gICAgICAgIC8vIEtlZXAgbG9va2luZyBmb3Igd2hp
dGVzcGFjZSBhbmQgYWxsb3dlZCBwdW5jdHVhdGlvbiwgYnV0IGF2b2lkCi0gICAgICAgIC8vIGFj
Y3VtdWxhdGluZyBqdXN0IHdoaXRlc3BhY2UgaW50byB0aGUgOmZpcnN0LWxldHRlci4KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBzY2FuTGVuZ3RoID0gbGVuZ3RoOyBzY2FuTGVuZ3RoIDwgb2xkVGV4
dC5sZW5ndGgoKTsgKytzY2FuTGVuZ3RoKSB7Ci0gICAgICAgICAgICBVQ2hhciBjID0gb2xkVGV4
dFtzY2FuTGVuZ3RoXTsKLQotICAgICAgICAgICAgaWYgKCFzaG91bGRTa2lwRm9yRmlyc3RMZXR0
ZXIoYykpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmIChpc1B1bmN0
dWF0aW9uRm9yRmlyc3RMZXR0ZXIoYykpCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0gc2Nhbkxl
bmd0aCArIDE7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvKiB0ZXh0Tm9kZSA9IGN1cnJlbnRU
ZXh0Q2hpbGQudGV4dE5vZGUoKTsKLSAgICAgICAgYXV0byogYmVmb3JlQ2hpbGQgPSBjdXJyZW50
VGV4dENoaWxkLm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5y
ZW1vdmVBbmREZXN0cm95Q2hpbGQoY3VycmVudFRleHRDaGlsZCk7Ci0KLSAgICAgICAgLy8gQ29u
c3RydWN0IGEgdGV4dCBmcmFnbWVudCBmb3IgdGhlIHRleHQgYWZ0ZXIgdGhlIGZpcnN0IGxldHRl
ci4KLSAgICAgICAgLy8gVGhpcyB0ZXh0IGZyYWdtZW50IG1pZ2h0IGJlIGVtcHR5LgotICAgICAg
ICBSZW5kZXJQdHI8UmVuZGVyVGV4dEZyYWdtZW50PiBuZXdSZW1haW5pbmdUZXh0OwotICAgICAg
ICBpZiAodGV4dE5vZGUpIHsKLSAgICAgICAgICAgIG5ld1JlbWFpbmluZ1RleHQgPSBjcmVhdGVS
ZW5kZXJlcjxSZW5kZXJUZXh0RnJhZ21lbnQ+KCp0ZXh0Tm9kZSwgb2xkVGV4dCwgbGVuZ3RoLCBv
bGRUZXh0Lmxlbmd0aCgpIC0gbGVuZ3RoKTsKLSAgICAgICAgICAgIHRleHROb2RlLT5zZXRSZW5k
ZXJlcihuZXdSZW1haW5pbmdUZXh0LmdldCgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBuZXdSZW1haW5pbmdUZXh0ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50Pihm
aXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5n
dGgoKSAtIGxlbmd0aCk7Ci0KLSAgICAgICAgUmVuZGVyVGV4dEZyYWdtZW50JiByZW1haW5pbmdU
ZXh0ID0gKm5ld1JlbWFpbmluZ1RleHQ7Ci0gICAgICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJy
ZW50KCktPmluc2VydENoaWxkKCpmaXJzdExldHRlckNvbnRhaW5lciwgV1RGTW92ZShuZXdSZW1h
aW5pbmdUZXh0KSwgYmVmb3JlQ2hpbGQpOwotICAgICAgICByZW1haW5pbmdUZXh0LnNldEZpcnN0
TGV0dGVyKGZpcnN0TGV0dGVyKTsKLSAgICAgICAgZmlyc3RMZXR0ZXIuc2V0Rmlyc3RMZXR0ZXJS
ZW1haW5pbmdUZXh0KHJlbWFpbmluZ1RleHQpOwotCi0gICAgICAgIC8vIGNvbnN0cnVjdCB0ZXh0
IGZyYWdtZW50IGZvciB0aGUgZmlyc3QgbGV0dGVyCi0gICAgICAgIGF1dG8gbGV0dGVyID0gY3Jl
YXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50
KCksIG9sZFRleHQsIDAsIGxlbmd0aCk7Ci0KLSAgICAgICAgUmVuZGVyVHJlZUJ1aWxkZXI6OmN1
cnJlbnQoKS0+aW5zZXJ0Q2hpbGQoZmlyc3RMZXR0ZXIsIFdURk1vdmUobGV0dGVyKSk7Ci0gICAg
fQotfQotCi1zdGF0aWMgYm9vbCBzdXBwb3J0c0ZpcnN0TGV0dGVyKFJlbmRlckJsb2NrJiBibG9j
aykKLXsKLSAgICBpZiAoaXM8UmVuZGVyQnV0dG9uPihibG9jaykpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGlmICghaXM8UmVuZGVyQmxvY2tGbG93PihibG9jaykpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoaXM8UmVuZGVyU1ZHVGV4dD4oYmxvY2spKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKGlzPFJlbmRlclJ1YnlSdW4+KGJsb2NrKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBibG9jay5jYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKTsK
LX0KLQotdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6Rmlyc3RMZXR0ZXI6OnVwZGF0ZShSZW5kZXJC
bG9jayYgYmxvY2spCi17Ci0gICAgaWYgKCFibG9jay5zdHlsZSgpLmhhc1BzZXVkb1N0eWxlKEZJ
UlNUX0xFVFRFUikpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXN1cHBvcnRzRmlyc3RMZXR0
ZXIoYmxvY2spKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgcmVmYWN0b3JlZCwgZmlyc3RMZXR0ZXJDb250YWluZXIgaXMgbm90IG5lZWRlZC4KLSAgICBS
ZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyUmVuZGVyZXI7Ci0gICAgUmVuZGVyRWxlbWVudCogZmly
c3RMZXR0ZXJDb250YWluZXI7Ci0gICAgYmxvY2suZ2V0Rmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJS
ZW5kZXJlciwgZmlyc3RMZXR0ZXJDb250YWluZXIpOwotCi0gICAgaWYgKCFmaXJzdExldHRlclJl
bmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBPdGhlciBjb250YWluZXJzIGFyZSBo
YW5kbGVkIHdoZW4gdXBkYXRpbmcgdGhlaXIgcmVuZGVyZXJzLgotICAgIGlmICgmYmxvY2sgIT0g
Zmlyc3RMZXR0ZXJDb250YWluZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBj
aGlsZCBhbHJlYWR5IGhhcyBzdHlsZSwgdGhlbiBpdCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQs
IHNvIHdlIGp1c3Qgd2FudAotICAgIC8vIHRvIHVwZGF0ZSBpdC4KLSAgICBpZiAoZmlyc3RMZXR0
ZXJSZW5kZXJlci0+cGFyZW50KCktPnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVS
KSB7Ci0gICAgICAgIHVwZGF0ZUZpcnN0TGV0dGVyU3R5bGUoYmxvY2ssICpmaXJzdExldHRlclJl
bmRlcmVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaXM8UmVuZGVyVGV4
dD4oZmlyc3RMZXR0ZXJSZW5kZXJlcikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNyZWF0ZUZp
cnN0TGV0dGVyUmVuZGVyZXIoYmxvY2ssIGRvd25jYXN0PFJlbmRlclRleHQ+KCpmaXJzdExldHRl
clJlbmRlcmVyKSk7Ci19Ci0KLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJU
cmVlVXBkYXRlckZpcnN0TGV0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oCShyZXZpc2lvbiAyMjYwMDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmgJKG5vbmV4
aXN0ZW50KQpAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIFJlbmRlckJsb2NrOwotCi1jbGFzcyBSZW5kZXJUcmVlVXBkYXRlcjo6Rmlyc3RMZXR0ZXIg
ewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZShSZW5kZXJCbG9jayYpOwotfTsKLQot
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRD
b250ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVl
VXBkYXRlckdlbmVyYXRlZENvbnRlbnQuY3BwCShyZXZpc2lvbiAyMjYwMDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuY3BwCShub25l
eGlzdGVudCkKQEAgLTEsMTg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmgiCi0KLSNp
bmNsdWRlICJDb250ZW50RGF0YS5oIgotI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oIgotI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJEZXNjZW5k
YW50SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVu
ZGVySW1hZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJRdW90ZS5oIgotI2luY2x1ZGUgIlJlbmRlclRy
ZWVVcGRhdGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oIgotI2lu
Y2x1ZGUgIlN0eWxlVHJlZVJlc29sdmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVu
ZGVyVHJlZVVwZGF0ZXI6OkdlbmVyYXRlZENvbnRlbnQ6OkdlbmVyYXRlZENvbnRlbnQoUmVuZGVy
VHJlZVVwZGF0ZXImIHVwZGF0ZXIpCi0gICAgOiBtX3VwZGF0ZXIodXBkYXRlcikKLXsKLX0KLQot
dm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6R2VuZXJhdGVkQ29udGVudDo6dXBkYXRlUmVtYWluaW5n
UXVvdGVzKCkKLXsKLSAgICBpZiAoIW1fdXBkYXRlci5yZW5kZXJWaWV3KCkuaGFzUXVvdGVzTmVl
ZGluZ1VwZGF0ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgdXBkYXRlUXVvdGVzVXBUbyhudWxs
cHRyKTsKLSAgICBtX3ByZXZpb3VzVXBkYXRlZFF1b3RlID0gbnVsbHB0cjsKLSAgICBtX3VwZGF0
ZXIucmVuZGVyVmlldygpLnNldEhhc1F1b3Rlc05lZWRpbmdVcGRhdGUoZmFsc2UpOwotfQotCi12
b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpHZW5lcmF0ZWRDb250ZW50Ojp1cGRhdGVRdW90ZXNVcFRv
KFJlbmRlclF1b3RlKiBsYXN0UXVvdGUpCi17Ci0gICAgYXV0byBxdW90ZVJlbmRlcmVycyA9IGRl
c2NlbmRhbnRzT2ZUeXBlPFJlbmRlclF1b3RlPihtX3VwZGF0ZXIucmVuZGVyVmlldygpKTsKLSAg
ICBhdXRvIGl0ID0gbV9wcmV2aW91c1VwZGF0ZWRRdW90ZSA/ICsrcXVvdGVSZW5kZXJlcnMuYXQo
Km1fcHJldmlvdXNVcGRhdGVkUXVvdGUpIDogcXVvdGVSZW5kZXJlcnMuYmVnaW4oKTsKLSAgICBh
dXRvIGVuZCA9IHF1b3RlUmVuZGVyZXJzLmVuZCgpOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgYXV0byYgcXVvdGUgPSAqaXQ7Ci0gICAgICAgIC8vIFF1b3RlIGNoYXJh
Y3RlciBkZXBlbmRzIG9uIHF1b3RlIGRlcHRoIHNvIHdlIGNoYWluIHRoZSB1cGRhdGVzLgotICAg
ICAgICBxdW90ZS51cGRhdGVSZW5kZXJlcihtX3VwZGF0ZXIubV9idWlsZGVyLCBtX3ByZXZpb3Vz
VXBkYXRlZFF1b3RlKTsKLSAgICAgICAgbV9wcmV2aW91c1VwZGF0ZWRRdW90ZSA9ICZxdW90ZTsK
LSAgICAgICAgaWYgKCZxdW90ZSA9PSBsYXN0UXVvdGUpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIEFTU0VSVCghbGFzdFF1b3RlKTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlQ29u
dGVudFJlbmRlcmVycyhSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyRWxlbWVudCYg
cHNldWRvUmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICBBU1NFUlQo
c3R5bGUuY29udGVudERhdGEoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IENvbnRlbnREYXRhKiBjb250
ZW50ID0gc3R5bGUuY29udGVudERhdGEoKTsgY29udGVudDsgY29udGVudCA9IGNvbnRlbnQtPm5l
eHQoKSkgewotICAgICAgICBhdXRvIGNoaWxkID0gY29udGVudC0+Y3JlYXRlQ29udGVudFJlbmRl
cmVyKHBzZXVkb1JlbmRlcmVyLmRvY3VtZW50KCksIHN0eWxlKTsKLSAgICAgICAgaWYgKHBzZXVk
b1JlbmRlcmVyLmlzQ2hpbGRBbGxvd2VkKCpjaGlsZCwgc3R5bGUpKQotICAgICAgICAgICAgYnVp
bGRlci5pbnNlcnRDaGlsZChwc2V1ZG9SZW5kZXJlciwgV1RGTW92ZShjaGlsZCkpOwotICAgIH0K
LX0KLQotc3RhdGljIHZvaWQgdXBkYXRlU3R5bGVGb3JDb250ZW50UmVuZGVyZXJzKFJlbmRlckVs
ZW1lbnQmIHBzZXVkb1JlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAg
Zm9yIChhdXRvJiBjb250ZW50UmVuZGVyZXIgOiBkZXNjZW5kYW50c09mVHlwZTxSZW5kZXJFbGVt
ZW50Pihwc2V1ZG9SZW5kZXJlcikpIHsKLSAgICAgICAgLy8gV2Ugb25seSBtYW5hZ2UgdGhlIHN0
eWxlIGZvciB0aGUgZ2VuZXJhdGVkIGNvbnRlbnQgd2hpY2ggbXVzdCBiZSBpbWFnZXMgb3IgdGV4
dC4KLSAgICAgICAgaWYgKCFpczxSZW5kZXJJbWFnZT4oY29udGVudFJlbmRlcmVyKSAmJiAhaXM8
UmVuZGVyUXVvdGU+KGNvbnRlbnRSZW5kZXJlcikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgY29udGVudFJlbmRlcmVyLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGVTdHlsZUlu
aGVyaXRpbmdGcm9tUHNldWRvU3R5bGUoc3R5bGUpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVy
VHJlZVVwZGF0ZXI6OkdlbmVyYXRlZENvbnRlbnQ6OnVwZGF0ZVBzZXVkb0VsZW1lbnQoRWxlbWVu
dCYgY3VycmVudCwgY29uc3Qgc3RkOjpvcHRpb25hbDxTdHlsZTo6RWxlbWVudFVwZGF0ZT4mIHVw
ZGF0ZSwgUHNldWRvSWQgcHNldWRvSWQpCi17Ci0gICAgUHNldWRvRWxlbWVudCogcHNldWRvRWxl
bWVudCA9IHBzZXVkb0lkID09IEJFRk9SRSA/IGN1cnJlbnQuYmVmb3JlUHNldWRvRWxlbWVudCgp
IDogY3VycmVudC5hZnRlclBzZXVkb0VsZW1lbnQoKTsKLQotICAgIGlmIChhdXRvKiByZW5kZXJl
ciA9IHBzZXVkb0VsZW1lbnQgPyBwc2V1ZG9FbGVtZW50LT5yZW5kZXJlcigpIDogbnVsbHB0cikK
LSAgICAgICAgbV91cGRhdGVyLnJlbmRlclRyZWVQb3NpdGlvbigpLmludmFsaWRhdGVOZXh0U2li
bGluZygqcmVuZGVyZXIpOwotCi0gICAgaWYgKCFuZWVkc1BzZXVkb0VsZW1lbnQodXBkYXRlKSkg
ewotICAgICAgICBpZiAocHNldWRvRWxlbWVudCkgewotICAgICAgICAgICAgaWYgKHBzZXVkb0lk
ID09IEJFRk9SRSkKLSAgICAgICAgICAgICAgICByZW1vdmVCZWZvcmVQc2V1ZG9FbGVtZW50KGN1
cnJlbnQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlbW92ZUFmdGVyUHNl
dWRvRWxlbWVudChjdXJyZW50KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgUmVmUHRyPFBzZXVkb0VsZW1lbnQ+IG5ld1BzZXVkb0VsZW1lbnQ7Ci0gICAgaWYgKCFw
c2V1ZG9FbGVtZW50KSB7Ci0gICAgICAgIG5ld1BzZXVkb0VsZW1lbnQgPSBQc2V1ZG9FbGVtZW50
OjpjcmVhdGUoY3VycmVudCwgcHNldWRvSWQpOwotICAgICAgICBwc2V1ZG9FbGVtZW50ID0gbmV3
UHNldWRvRWxlbWVudC5nZXQoKTsKLSAgICB9Ci0KLSAgICBpZiAodXBkYXRlLT5jaGFuZ2UgPT0g
U3R5bGU6Ok5vQ2hhbmdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobmV3UHNldWRvRWxl
bWVudCkgewotICAgICAgICBpZiAocHNldWRvSWQgPT0gQkVGT1JFKQotICAgICAgICAgICAgY3Vy
cmVudC5zZXRCZWZvcmVQc2V1ZG9FbGVtZW50KG5ld1BzZXVkb0VsZW1lbnQucmVsZWFzZU5vbk51
bGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnQuc2V0QWZ0ZXJQc2V1ZG9F
bGVtZW50KG5ld1BzZXVkb0VsZW1lbnQucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0gICAg
aWYgKHVwZGF0ZS0+c3R5bGUtPmRpc3BsYXkoKSA9PSBDT05URU5UUykgewotICAgICAgICAvLyBG
b3IgZGlzcGxheTpjb250ZW50cyB3ZSBjcmVhdGUgYW4gaW5saW5lIHdyYXBwZXIgdGhhdCBpbmhl
cml0cyBpdHMKLSAgICAgICAgLy8gc3R5bGUgZnJvbSB0aGUgZGlzcGxheTpjb250ZW50cyBzdHls
ZS4KLSAgICAgICAgYXV0byBjb250ZW50c1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZVB0cigp
OwotICAgICAgICBjb250ZW50c1N0eWxlLT5zZXRTdHlsZVR5cGUocHNldWRvSWQpOwotICAgICAg
ICBjb250ZW50c1N0eWxlLT5pbmhlcml0RnJvbSgqdXBkYXRlLT5zdHlsZSk7Ci0gICAgICAgIGNv
bnRlbnRzU3R5bGUtPmNvcHlDb250ZW50RnJvbSgqdXBkYXRlLT5zdHlsZSk7Ci0KLSAgICAgICAg
U3R5bGU6OkVsZW1lbnRVcGRhdGUgY29udGVudHNVcGRhdGUgeyBXVEZNb3ZlKGNvbnRlbnRzU3R5
bGUpLCB1cGRhdGUtPmNoYW5nZSwgdXBkYXRlLT5yZWNvbXBvc2l0ZUxheWVyIH07Ci0gICAgICAg
IG1fdXBkYXRlci51cGRhdGVFbGVtZW50UmVuZGVyZXIoKnBzZXVkb0VsZW1lbnQsIGNvbnRlbnRz
VXBkYXRlKTsKLSAgICAgICAgcHNldWRvRWxlbWVudC0+c3RvcmVEaXNwbGF5Q29udGVudHNTdHls
ZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKnVwZGF0ZS0+c3R5bGUpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBtX3VwZGF0ZXIudXBkYXRlRWxlbWVudFJlbmRlcmVyKCpwc2V1ZG9FbGVtZW50LCAq
dXBkYXRlKTsKLSAgICAgICAgQVNTRVJUKCFwc2V1ZG9FbGVtZW50LT5oYXNEaXNwbGF5Q29udGVu
dHMoKSk7Ci0gICAgfQotCi0gICAgYXV0byogcHNldWRvRWxlbWVudFJlbmRlcmVyID0gcHNldWRv
RWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXBzZXVkb0VsZW1lbnRSZW5kZXJlcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHVwZGF0ZS0+Y2hhbmdlID09IFN0eWxlOjpEZXRhY2gp
Ci0gICAgICAgIGNyZWF0ZUNvbnRlbnRSZW5kZXJlcnMobV91cGRhdGVyLm1fYnVpbGRlciwgKnBz
ZXVkb0VsZW1lbnRSZW5kZXJlciwgKnVwZGF0ZS0+c3R5bGUpOwotICAgIGVsc2UKLSAgICAgICAg
dXBkYXRlU3R5bGVGb3JDb250ZW50UmVuZGVyZXJzKCpwc2V1ZG9FbGVtZW50UmVuZGVyZXIsICp1
cGRhdGUtPnN0eWxlKTsKLQotICAgIGlmIChtX3VwZGF0ZXIucmVuZGVyVmlldygpLmhhc1F1b3Rl
c05lZWRpbmdVcGRhdGUoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogZGVzY2VuZGFu
dHNPZlR5cGU8UmVuZGVyUXVvdGU+KCpwc2V1ZG9FbGVtZW50UmVuZGVyZXIpKQotICAgICAgICAg
ICAgdXBkYXRlUXVvdGVzVXBUbygmY2hpbGQpOwotICAgIH0KLSAgICBpZiAoaXM8UmVuZGVyTGlz
dEl0ZW0+KCpwc2V1ZG9FbGVtZW50UmVuZGVyZXIpKQotICAgICAgICBMaXN0SXRlbTo6dXBkYXRl
TWFya2VyKG1fdXBkYXRlci5tX2J1aWxkZXIsIGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPigqcHNl
dWRvRWxlbWVudFJlbmRlcmVyKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVHJlZVVwZGF0ZXI6OkdlbmVy
YXRlZENvbnRlbnQ6Om5lZWRzUHNldWRvRWxlbWVudChjb25zdCBzdGQ6Om9wdGlvbmFsPFN0eWxl
OjpFbGVtZW50VXBkYXRlPiYgdXBkYXRlKQotewotICAgIGlmICghdXBkYXRlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX3VwZGF0ZXIucmVuZGVyVHJlZVBvc2l0aW9uKCkucGFy
ZW50KCkuY2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIXBzZXVkb0VsZW1lbnRSZW5kZXJlcklzTmVlZGVkKHVwZGF0ZS0+c3R5bGUuZ2V0
KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
UmVuZGVyVHJlZVVwZGF0ZXI6OkdlbmVyYXRlZENvbnRlbnQ6OnJlbW92ZUJlZm9yZVBzZXVkb0Vs
ZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBhdXRvKiBwc2V1ZG9FbGVtZW50ID0gZWxl
bWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCFwc2V1ZG9FbGVtZW50KQotICAg
ICAgICByZXR1cm47Ci0gICAgdGVhckRvd25SZW5kZXJlcnMoKnBzZXVkb0VsZW1lbnQsIFRlYXJk
b3duVHlwZTo6RnVsbCk7Ci0gICAgZWxlbWVudC5jbGVhckJlZm9yZVBzZXVkb0VsZW1lbnQoKTsK
LX0KLQotdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6R2VuZXJhdGVkQ29udGVudDo6cmVtb3ZlQWZ0
ZXJQc2V1ZG9FbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgYXV0byogcHNldWRvRWxl
bWVudCA9IGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCFwc2V1ZG9FbGVt
ZW50KQotICAgICAgICByZXR1cm47Ci0gICAgdGVhckRvd25SZW5kZXJlcnMoKnBzZXVkb0VsZW1l
bnQsIFRlYXJkb3duVHlwZTo6RnVsbCk7Ci0gICAgZWxlbWVudC5jbGVhckFmdGVyUHNldWRvRWxl
bWVudCgpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBk
YXRlckdlbmVyYXRlZENvbnRlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaAkocmV2aXNpb24gMjI2MDA5KQor
KysgU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50
LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgotI2luY2x1ZGUgIlJlbmRl
clRyZWVVcGRhdGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRWxlbWVudDsK
LWNsYXNzIFJlbmRlclF1b3RlOwotCi1jbGFzcyBSZW5kZXJUcmVlVXBkYXRlcjo6R2VuZXJhdGVk
Q29udGVudCB7Ci1wdWJsaWM6Ci0gICAgR2VuZXJhdGVkQ29udGVudChSZW5kZXJUcmVlVXBkYXRl
ciYpOwotCi0gICAgdm9pZCB1cGRhdGVQc2V1ZG9FbGVtZW50KEVsZW1lbnQmLCBjb25zdCBzdGQ6
Om9wdGlvbmFsPFN0eWxlOjpFbGVtZW50VXBkYXRlPiYsIFBzZXVkb0lkKTsKLSAgICB2b2lkIHVw
ZGF0ZVJlbWFpbmluZ1F1b3RlcygpOwotCi0gICAgc3RhdGljIHZvaWQgcmVtb3ZlQmVmb3JlUHNl
dWRvRWxlbWVudChFbGVtZW50Jik7Ci0gICAgc3RhdGljIHZvaWQgcmVtb3ZlQWZ0ZXJQc2V1ZG9F
bGVtZW50KEVsZW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZVF1b3Rlc1VwVG8o
UmVuZGVyUXVvdGUqKTsKLSAgICAKLSAgICBib29sIG5lZWRzUHNldWRvRWxlbWVudChjb25zdCBz
dGQ6Om9wdGlvbmFsPFN0eWxlOjpFbGVtZW50VXBkYXRlPiYpOwotCi0gICAgUmVuZGVyVHJlZVVw
ZGF0ZXImIG1fdXBkYXRlcjsKLSAgICBSZW5kZXJRdW90ZSogbV9wcmV2aW91c1VwZGF0ZWRRdW90
ZSB7IG51bGxwdHIgfTsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRl
clRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
eWxlL1JlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiAyMjYwMDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcAkobm9uZXhp
c3RlbnQpCkBAIC0xLDEyMyArMCwwIEBACi0vKioKLSAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDYsIDIwMTAs
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFuZHJldyBXZWxsaW5ndG9uIChwcm90b25Ad2lyZXRhcHBlZC5uZXQpCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oIgotCi0j
aW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJr
ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKLSNpbmNsdWRlICJSZW5k
ZXJSdWJ5LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgUmVuZGVyQmxvY2sqIGdldFBhcmVudE9mRmlyc3RMaW5lQm94KFJlbmRlckJs
b2NrJiBjdXJyZW50LCBSZW5kZXJPYmplY3QmIG1hcmtlcikKLXsKLSAgICBib29sIGluUXVpcmtz
TW9kZSA9IGN1cnJlbnQuZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKTsKLSAgICBmb3IgKGF1dG8m
IGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PihjdXJyZW50KSkgewotICAgICAg
ICBpZiAoJmNoaWxkID09ICZtYXJrZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBpZiAoY2hpbGQuaXNJbmxpbmUoKSAmJiAoIWlzPFJlbmRlcklubGluZT4oY2hpbGQpIHx8IGN1
cnJlbnQuZ2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQoJmNoaWxkKSkpCi0gICAgICAg
ICAgICByZXR1cm4gJmN1cnJlbnQ7Ci0KLSAgICAgICAgaWYgKGNoaWxkLmlzRmxvYXRpbmcoKSB8
fCBjaGlsZC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGlmICghaXM8UmVuZGVyQmxvY2s+KGNoaWxkKSB8fCBpczxSZW5kZXJUYWJsZT4o
Y2hpbGQpIHx8IGlzPFJlbmRlclJ1YnlBc0Jsb2NrPihjaGlsZCkpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBpZiAoaXM8UmVuZGVyQm94PihjaGlsZCkgJiYgZG93bmNhc3Q8UmVuZGVy
Qm94PihjaGlsZCkuaXNXcml0aW5nTW9kZVJvb3QoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGlmIChpczxSZW5kZXJMaXN0SXRlbT4oY3VycmVudCkgJiYgaW5RdWlya3NNb2RlICYm
IGNoaWxkLm5vZGUoKSAmJiBpc0hUTUxMaXN0RWxlbWVudCgqY2hpbGQubm9kZSgpKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChSZW5kZXJCbG9jayogbGluZUJveCA9IGdldFBh
cmVudE9mRmlyc3RMaW5lQm94KGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCksIG1hcmtlcikp
Ci0gICAgICAgICAgICByZXR1cm4gbGluZUJveDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotc3RhdGljIFJlbmRlck9iamVjdCogZmlyc3ROb25NYXJrZXJDaGlsZChSZW5kZXJC
bG9jayYgcGFyZW50KQotewotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBwYXJlbnQuZmlyc3RD
aGlsZCgpOwotICAgIHdoaWxlIChpczxSZW5kZXJMaXN0TWFya2VyPihjaGlsZCkpCi0gICAgICAg
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgcmV0dXJuIGNoaWxkOwotfQotCi12
b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpMaXN0SXRlbTo6dXBkYXRlTWFya2VyKFJlbmRlclRyZWVC
dWlsZGVyJiBidWlsZGVyLCBSZW5kZXJMaXN0SXRlbSYgbGlzdEl0ZW1SZW5kZXJlcikKLXsKLSAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbGlzdEl0ZW1SZW5kZXJlci52aWV3
KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmxheW91dFN0YXRlKCkpOwotCi0gICAgYXV0
byYgc3R5bGUgPSBsaXN0SXRlbVJlbmRlcmVyLnN0eWxlKCk7Ci0KLSAgICBpZiAoc3R5bGUubGlz
dFN0eWxlVHlwZSgpID09IE5vbmVMaXN0U3R5bGUgJiYgKCFzdHlsZS5saXN0U3R5bGVJbWFnZSgp
IHx8IHN0eWxlLmxpc3RTdHlsZUltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIG1hcmtlciA9IGxpc3RJdGVtUmVuZGVyZXIubWFya2VyUmVuZGVyZXIoKSkKLSAg
ICAgICAgICAgIG1hcmtlci0+cmVtb3ZlRnJvbVBhcmVudEFuZERlc3Ryb3koKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gbmV3U3R5bGUgPSBsaXN0SXRlbVJlbmRlcmVyLmNv
bXB1dGVNYXJrZXJTdHlsZSgpOwotICAgIFJlbmRlclB0cjxSZW5kZXJMaXN0TWFya2VyPiBuZXdN
YXJrZXJSZW5kZXJlcjsKLSAgICBhdXRvKiBtYXJrZXJSZW5kZXJlciA9IGxpc3RJdGVtUmVuZGVy
ZXIubWFya2VyUmVuZGVyZXIoKTsKLSAgICBpZiAobWFya2VyUmVuZGVyZXIpCi0gICAgICAgIG1h
cmtlclJlbmRlcmVyLT5zZXRTdHlsZShXVEZNb3ZlKG5ld1N0eWxlKSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIG5ld01hcmtlclJlbmRlcmVyID0gV2ViQ29yZTo6Y3JlYXRlUmVuZGVyZXI8UmVuZGVy
TGlzdE1hcmtlcj4obGlzdEl0ZW1SZW5kZXJlciwgV1RGTW92ZShuZXdTdHlsZSkpOwotICAgICAg
ICBuZXdNYXJrZXJSZW5kZXJlci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgICAgIG1hcmtlclJl
bmRlcmVyID0gbmV3TWFya2VyUmVuZGVyZXIuZ2V0KCk7Ci0gICAgICAgIGxpc3RJdGVtUmVuZGVy
ZXIuc2V0TWFya2VyUmVuZGVyZXIoKm1hcmtlclJlbmRlcmVyKTsKLSAgICB9Ci0KLSAgICBSZW5k
ZXJFbGVtZW50KiBjdXJyZW50UGFyZW50ID0gbWFya2VyUmVuZGVyZXItPnBhcmVudCgpOwotICAg
IFJlbmRlckJsb2NrKiBuZXdQYXJlbnQgPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChsaXN0SXRl
bVJlbmRlcmVyLCAqbWFya2VyUmVuZGVyZXIpOwotICAgIGlmICghbmV3UGFyZW50KSB7Ci0gICAg
ICAgIC8vIElmIHRoZSBtYXJrZXIgaXMgY3VycmVudGx5IGNvbnRhaW5lZCBpbnNpZGUgYW4gYW5v
bnltb3VzIGJveCwKLSAgICAgICAgLy8gdGhlbiB3ZSBhcmUgdGhlIG9ubHkgaXRlbSBpbiB0aGF0
IGFub255bW91cyBib3ggKHNpbmNlIG5vIGxpbmUgYm94Ci0gICAgICAgIC8vIHBhcmVudCB3YXMg
Zm91bmQpLiBJdCdzIG9rIHRvIGp1c3QgbGVhdmUgdGhlIG1hcmtlciB3aGVyZSBpdCBpcwotICAg
ICAgICAvLyBpbiB0aGlzIGNhc2UuCi0gICAgICAgIGlmIChjdXJyZW50UGFyZW50ICYmIGN1cnJl
bnRQYXJlbnQtPmlzQW5vbnltb3VzQmxvY2soKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaWYgKGF1dG8qIG11bHRpQ29sdW1uRmxvdyA9IGxpc3RJdGVtUmVuZGVyZXIubXVsdGlDb2x1
bW5GbG93KCkpCi0gICAgICAgICAgICBuZXdQYXJlbnQgPSBtdWx0aUNvbHVtbkZsb3c7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG5ld1BhcmVudCA9ICZsaXN0SXRlbVJlbmRlcmVyOwotICAg
IH0KLQotICAgIGlmIChuZXdQYXJlbnQgIT0gY3VycmVudFBhcmVudCkgewotICAgICAgICBpZiAo
Y3VycmVudFBhcmVudCkKLSAgICAgICAgICAgIGJ1aWxkZXIuaW5zZXJ0Q2hpbGQoKm5ld1BhcmVu
dCwgY3VycmVudFBhcmVudC0+dGFrZUNoaWxkKCptYXJrZXJSZW5kZXJlciksIGZpcnN0Tm9uTWFy
a2VyQ2hpbGQoKm5ld1BhcmVudCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWlsZGVy
Lmluc2VydENoaWxkKCpuZXdQYXJlbnQsIFdURk1vdmUobmV3TWFya2VyUmVuZGVyZXIpLCBmaXJz
dE5vbk1hcmtlckNoaWxkKCpuZXdQYXJlbnQpKTsKLQotICAgICAgICAvLyBJZiBjdXJyZW50IHBh
cmVudCBpcyBhbiBhbm9ueW1vdXMgYmxvY2sgdGhhdCBoYXMgbG9zdCBhbGwgaXRzIGNoaWxkcmVu
LCBkZXN0cm95IGl0LgotICAgICAgICBpZiAoY3VycmVudFBhcmVudCAmJiBjdXJyZW50UGFyZW50
LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgIWN1cnJlbnRQYXJlbnQtPmZpcnN0Q2hpbGQoKSAmJiAh
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50UGFyZW50KS5jb250aW51YXRpb24oKSkKLSAg
ICAgICAgICAgIGN1cnJlbnRQYXJlbnQtPnJlbW92ZUZyb21QYXJlbnRBbmREZXN0cm95KCk7Ci0g
ICAgfQotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRl
ckxpc3RJdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJl
ZVVwZGF0ZXJMaXN0SXRlbS5oCShyZXZpc2lvbiAyMjYwMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9SZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzOCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJSZW5kZXJMaXN0
SXRlbS5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgUmVuZGVyVHJlZVVwZGF0ZXI6Okxpc3RJdGVtIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCB1cGRhdGVNYXJrZXIoUmVuZGVyVHJlZUJ1aWxkZXImLCBSZW5kZXJMaXN0
SXRlbSYpOwotfTsKLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVw
ZGF0ZXJNdWx0aUNvbHVtbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUv
UmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5jcHAJKHJldmlzaW9uIDIyNjAwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uY3BwCShub25l
eGlzdGVudCkKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwNyBEYXZpZCBTbWl0
aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTUsIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5oIgot
Ci0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVy
YXRvci5oIgotI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgotI2luY2x1ZGUgIlJl
bmRlck11bHRpQ29sdW1uU2V0LmgiCi0jaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlci5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6Ok11bHRpQ29sdW1uOjp1cGRh
dGUoUmVuZGVyQmxvY2tGbG93JiBmbG93KQotewotICAgIGJvb2wgbmVlZHNGcmFnbWVudGVkRmxv
dyA9IGZsb3cucmVxdWlyZXNDb2x1bW5zKGZsb3cuc3R5bGUoKS5jb2x1bW5Db3VudCgpKTsKLSAg
ICBib29sIGhhc0ZyYWdtZW50ZWRGbG93ID0gZmxvdy5tdWx0aUNvbHVtbkZsb3coKTsKLQotICAg
IGlmICghaGFzRnJhZ21lbnRlZEZsb3cgJiYgbmVlZHNGcmFnbWVudGVkRmxvdykgewotICAgICAg
ICBjcmVhdGVGcmFnbWVudGVkRmxvdyhmbG93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoaGFzRnJhZ21lbnRlZEZsb3cgJiYgIW5lZWRzRnJhZ21lbnRlZEZsb3cpIHsKLSAgICAg
ICAgZGVzdHJveUZyYWdtZW50ZWRGbG93KGZsb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
fQotCi12b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpNdWx0aUNvbHVtbjo6Y3JlYXRlRnJhZ21lbnRl
ZEZsb3coUmVuZGVyQmxvY2tGbG93JiBmbG93KQotewotICAgIGZsb3cuc2V0Q2hpbGRyZW5Jbmxp
bmUoZmFsc2UpOyAvLyBEbyB0aGlzIHRvIGF2b2lkIHdyYXBwaW5nIGlubGluZSBjaGlsZHJlbiB0
aGF0IGFyZSBqdXN0IGdvaW5nIHRvIG1vdmUgaW50byB0aGUgZmxvdyB0aHJlYWQuCi0gICAgZmxv
dy5kZWxldGVMaW5lcygpOwotICAgIC8vIElmIHRoaXMgc29vbi10by1iZSBtdWx0aWNvbHVtbiBm
bG93IGlzIGFscmVhZHkgcGFydCBvZiBhIG11bHRpY29sdW1uIGNvbnRleHQsIHdlIG5lZWQgdG8g
bW92ZSBiYWNrIHRoZSBkZXNjZW5kYW50IHNwYW5uZXJzCi0gICAgLy8gdG8gdGhlaXIgb3JpZ2lu
YWwgcG9zaXRpb24gYmVmb3JlIG1vdmluZyBzdWJ0cmVlcyBhcm91bmQuCi0gICAgYXV0byogZW5j
bG9zaW5nZmxvdyA9IGZsb3cuZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKTsKLSAgICBpZiAoaXM8
UmVuZGVyTXVsdGlDb2x1bW5GbG93PihlbmNsb3NpbmdmbG93KSkgewotICAgICAgICBhdXRvJiBz
cGFubmVycyA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uRmxvdz4oZW5jbG9zaW5nZmxvdykt
PnNwYW5uZXJNYXAoKTsKLSAgICAgICAgVmVjdG9yPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyKj4gcGxhY2Vob2xkZXJzVG9EZWxldGU7Ci0gICAgICAgIGZvciAoYXV0byYgc3Bh
bm5lckFuZFBsYWNlaG9sZGVyIDogc3Bhbm5lcnMpIHsKLSAgICAgICAgICAgIGF1dG8mIHBsYWNl
aG9sZGVyID0gKnNwYW5uZXJBbmRQbGFjZWhvbGRlci52YWx1ZTsKLSAgICAgICAgICAgIGlmICgh
cGxhY2Vob2xkZXIuaXNEZXNjZW5kYW50T2YoJmZsb3cpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgcGxhY2Vob2xkZXJzVG9EZWxldGUuYXBwZW5kKCZwbGFjZWhvbGRl
cik7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChhdXRvKiBwbGFjZWhvbGRlciA6IHBsYWNlaG9s
ZGVyc1RvRGVsZXRlKSB7Ci0gICAgICAgICAgICBhdXRvKiBzcGFubmVyID0gcGxhY2Vob2xkZXIt
PnNwYW5uZXIoKTsKLSAgICAgICAgICAgIGlmICghc3Bhbm5lcikgewotICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgLy8gTW92ZSB0aGUgc3Bhbm5lciBiYWNrIHRvIGl0cyBvcmln
aW5hbCBwb3NpdGlvbi4KLSAgICAgICAgICAgIGF1dG8mIHNwYW5uZXJPcmlnaW5hbFBhcmVudCA9
ICpwbGFjZWhvbGRlci0+cGFyZW50KCk7Ci0gICAgICAgICAgICAvLyBEZXRhY2hpbmcgdGhlIHNw
YW5uZXIgdGFrZXMgY2FyZSBvZiByZW1vdmluZyB0aGUgcGxhY2Vob2xkZXIgKGFuZCBtZXJnZXMg
dGhlIFJlbmRlck11bHRpQ29sdW1uU2V0cykuCi0gICAgICAgICAgICBhdXRvIHNwYW5uZXJUb1Jl
SW5zZXJ0ID0gc3Bhbm5lci0+cGFyZW50KCktPnRha2VDaGlsZCgqc3Bhbm5lcik7Ci0gICAgICAg
ICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNlcnRDaGlsZChzcGFubmVyT3Jp
Z2luYWxQYXJlbnQsIFdURk1vdmUoc3Bhbm5lclRvUmVJbnNlcnQpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGF1dG8gbmV3RnJhZ21lbnRlZEZsb3cgPSBXZWJDb3JlOjpjcmVhdGVSZW5kZXJl
cjxSZW5kZXJNdWx0aUNvbHVtbkZsb3c+KGZsb3cuZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNy
ZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoZmxvdy5zdHlsZSgpLCBCTE9DSykpOwotICAg
IG5ld0ZyYWdtZW50ZWRGbG93LT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICBhdXRvJiBmcmFnbWVu
dGVkRmxvdyA9ICpuZXdGcmFnbWVudGVkRmxvdzsKLSAgICBmbG93LlJlbmRlckJsb2NrOjphZGRD
aGlsZCgqUmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKSwgV1RGTW92ZShuZXdGcmFnbWVudGVk
RmxvdykpOwotCi0gICAgLy8gUmVwYXJlbnQgY2hpbGRyZW4gcHJlY2VkaW5nIHRoZSBmcmFnbWVu
dGVkIGZsb3cgaW50byB0aGUgZnJhZ21lbnRlZCBmbG93LgotICAgIGZsb3cubW92ZUNoaWxkcmVu
VG8oJmZyYWdtZW50ZWRGbG93LCBmbG93LmZpcnN0Q2hpbGQoKSwgJmZyYWdtZW50ZWRGbG93LCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Tm9ybWFsaXplQWZ0ZXJJbnNlcnRpb246Olllcyk7Ci0gICAg
aWYgKGZsb3cuaXNGaWVsZHNldCgpKSB7Ci0gICAgICAgIC8vIEtlZXAgbGVnZW5kcyBvdXQgb2Yg
dGhlIGZsb3cgdGhyZWFkLgotICAgICAgICBmb3IgKGF1dG8mIGJveCA6IGNoaWxkcmVuT2ZUeXBl
PFJlbmRlckJveD4oZnJhZ21lbnRlZEZsb3cpKSB7Ci0gICAgICAgICAgICBpZiAoYm94LmlzTGVn
ZW5kKCkpCi0gICAgICAgICAgICAgICAgZnJhZ21lbnRlZEZsb3cubW92ZUNoaWxkVG8oJmZsb3cs
ICZib3gsIFJlbmRlckJveE1vZGVsT2JqZWN0OjpOb3JtYWxpemVBZnRlckluc2VydGlvbjo6WWVz
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZsb3cuc2V0TXVsdGlDb2x1bW5GbG93KGZyYWdt
ZW50ZWRGbG93KTsKLX0KLQotdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TXVsdGlDb2x1bW46OmRl
c3Ryb3lGcmFnbWVudGVkRmxvdyhSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgYXV0byYg
bXVsdGlDb2x1bW5GbG93ID0gKmZsb3cubXVsdGlDb2x1bW5GbG93KCk7Ci0gICAgbXVsdGlDb2x1
bW5GbG93LmRlbGV0ZUxpbmVzKCk7Ci0KLSAgICAvLyBNb3ZlIHNwYW5uZXJzIGJhY2sgdG8gdGhl
aXIgb3JpZ2luYWwgRE9NIHBvc2l0aW9uIGluIHRoZSB0cmVlLCBhbmQgZGVzdHJveSB0aGUgcGxh
Y2Vob2xkZXJzLgotICAgIGF1dG8mIHNwYW5uZXJzID0gbXVsdGlDb2x1bW5GbG93LnNwYW5uZXJN
YXAoKTsKLSAgICBWZWN0b3I8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqPiBw
bGFjZWhvbGRlcnNUb0RlbGV0ZTsKLSAgICBmb3IgKGF1dG8mIHNwYW5uZXJBbmRQbGFjZWhvbGRl
ciA6IHNwYW5uZXJzKQotICAgICAgICBwbGFjZWhvbGRlcnNUb0RlbGV0ZS5hcHBlbmQoc3Bhbm5l
ckFuZFBsYWNlaG9sZGVyLnZhbHVlLmdldCgpKTsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFJlbmRl
ckVsZW1lbnQqLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0Pj4+IHBhcmVudEFuZFNwYW5uZXJMaXN0
OwotICAgIGZvciAoYXV0byogcGxhY2Vob2xkZXIgOiBwbGFjZWhvbGRlcnNUb0RlbGV0ZSkgewot
ICAgICAgICBhdXRvKiBzcGFubmVyT3JpZ2luYWxQYXJlbnQgPSBwbGFjZWhvbGRlci0+cGFyZW50
KCk7Ci0gICAgICAgIGlmIChzcGFubmVyT3JpZ2luYWxQYXJlbnQgPT0gJm11bHRpQ29sdW1uRmxv
dykKLSAgICAgICAgICAgIHNwYW5uZXJPcmlnaW5hbFBhcmVudCA9ICZmbG93OwotICAgICAgICAv
LyBEZXRhY2hpbmcgdGhlIHNwYW5uZXIgdGFrZXMgY2FyZSBvZiByZW1vdmluZyB0aGUgcGxhY2Vo
b2xkZXIgKGFuZCBtZXJnZXMgdGhlIFJlbmRlck11bHRpQ29sdW1uU2V0cykuCi0gICAgICAgIGF1
dG8qIHNwYW5uZXIgPSBwbGFjZWhvbGRlci0+c3Bhbm5lcigpOwotICAgICAgICBwYXJlbnRBbmRT
cGFubmVyTGlzdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIoc3Bhbm5lck9yaWdpbmFsUGFyZW50LCBz
cGFubmVyLT5wYXJlbnQoKS0+dGFrZUNoaWxkKCpzcGFubmVyKSkpOwotICAgIH0KLSAgICB3aGls
ZSAoYXV0byogY29sdW1uU2V0ID0gbXVsdGlDb2x1bW5GbG93LmZpcnN0TXVsdGlDb2x1bW5TZXQo
KSkKLSAgICAgICAgY29sdW1uU2V0LT5yZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveSgpOwotCi0g
ICAgZmxvdy5jbGVhck11bHRpQ29sdW1uRmxvdygpOwotICAgIG11bHRpQ29sdW1uRmxvdy5tb3Zl
QWxsQ2hpbGRyZW5UbygmZmxvdywgUmVuZGVyQm94TW9kZWxPYmplY3Q6Ok5vcm1hbGl6ZUFmdGVy
SW5zZXJ0aW9uOjpZZXMpOwotICAgIG11bHRpQ29sdW1uRmxvdy5yZW1vdmVGcm9tUGFyZW50QW5k
RGVzdHJveSgpOwotICAgIGZvciAoYXV0byYgcGFyZW50QW5kU3Bhbm5lciA6IHBhcmVudEFuZFNw
YW5uZXJMaXN0KQotICAgICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNlcnRD
aGlsZCgqcGFyZW50QW5kU3Bhbm5lci5maXJzdCwgV1RGTW92ZShwYXJlbnRBbmRTcGFubmVyLnNl
Y29uZCkpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBk
YXRlck11bHRpQ29sdW1uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVu
ZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5oCShyZXZpc2lvbiAyMjYwMDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmgJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJSZW5kZXJUcmVlVXBkYXRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJl
bmRlckJsb2NrRmxvdzsKLQotY2xhc3MgUmVuZGVyVHJlZVVwZGF0ZXI6Ok11bHRpQ29sdW1uIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGUoUmVuZGVyQmxvY2tGbG93Jik7Ci0KLXBy
aXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgY3JlYXRlRnJhZ21lbnRlZEZsb3coUmVuZGVyQmxvY2tG
bG93Jik7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveUZyYWdtZW50ZWRGbG93KFJlbmRlckJsb2Nr
RmxvdyYpOwotfTsKLQotfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>