<?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>230455</bug_id>
          
          <creation_ts>2021-09-19 00:24:43 -0700</creation_ts>
          <short_desc>[LFC][Integration] Paint LFC text runs with TextBoxPainter</short_desc>
          <delta_ts>2021-09-19 07:28:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Antti Koivisto">koivisto</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</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>1794851</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-19 00:24:43 -0700</bug_when>
    <thetext>Full text painting support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794852</commentid>
    <comment_count>1</comment_count>
      <attachid>438583</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-19 00:51:22 -0700</bug_when>
    <thetext>Created attachment 438583
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794853</commentid>
    <comment_count>2</comment_count>
      <attachid>438584</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-19 01:26:22 -0700</bug_when>
    <thetext>Created attachment 438584
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794854</commentid>
    <comment_count>3</comment_count>
      <attachid>438585</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-19 02:48:20 -0700</bug_when>
    <thetext>Created attachment 438585
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794857</commentid>
    <comment_count>4</comment_count>
      <attachid>438588</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-19 03:39:43 -0700</bug_when>
    <thetext>Created attachment 438588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794872</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-19 07:27:58 -0700</bug_when>
    <thetext>Committed r282735 (241872@main): &lt;https://commits.webkit.org/241872@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 438588.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794873</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-19 07:28:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/83284050&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794874</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-19 07:28:21 -0700</bug_when>
    <thetext>Tools/Scripts/svn-apply failed to apply attachment 438588 to trunk.
Please resolve the conflicts and upload a new patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438583</attachid>
            <date>2021-09-19 00:51:22 -0700</date>
            <delta_ts>2021-09-19 01:26:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230455-20210919105120.patch</filename>
            <type>text/plain</type>
            <size>50010</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyNzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGM4MGU5ZGIzMDE4N2Zj
NDAwMjlhYWM3ZmU0NTg1MGVkOTQ0OTgyNS4uNTA0MWY5MDIzNjI5MDMwYThiZTM0MGFkOWUyYjMw
OTJjMjliNTQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIxLTA5LTE5ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlv
bl0gUGFpbnQgTEZDIHRleHQgcnVucyB3aXRoIFRleHRCb3hQYWludGVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA0NTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgZ2l2ZSBMRkMgcGF0
aCBhbGwgdGhlIHNhbWUgcGFpbnRpbmcgZmVhdHVyZXMgKGluY2x1ZGluZyBzZWxlY3Rpb25zLCBt
YXJrZXJzIGV0YykgdGhhdAorICAgICAgICB0aGUgbGVnYWN5IHBhdGggaGFzLiBUaGlzIHBhdGNo
IGRvZXMgbm90IGVuYWJsZSBhbnkgbmV3IGZlYXR1cmVzIHlldC4KKworICAgICAgICAqIGxheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OnBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpwYWludFRleHRSdW5Vc2lu
Z1BoeXNpY2FsQ29vcmRpbmF0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
TGVnYWN5SW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVU
ZXh0Qm94Ojp0ZXh0T3JpZ2luRnJvbUJveFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6ZGVidWdUZXh0U2hhZG93IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIpOgorCisgICAgICAgIFRleHRCb3hQYWludGVyIG5v
dyB1c2VzIHRoZSBpbmxpbmUgaXRlcmF0b3IgaW5zdGVhZCBvZiBkaXJlY3RseSBhY2Nlc3Npbmcg
TGVnYWN5SW5saW5lVGV4dEJveC4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjcmVhdGVNYXJrZWRU
ZXh0RnJvbVNlbGVjdGlvbkluQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVy
OjpwYWludEJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBh
aW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQ
YWludGVyOjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRC
b3hQYWludGVyOjpwYWludERlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBh
aW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OnRl
eHRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21w
b3NpdGlvblVuZGVybGluZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFp
bnRQbGF0Zm9ybURvY3VtZW50TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFp
bnRlcjo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjb21wdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmZvbnRDYXNjYWRlRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVy
OjpjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94UGFpbnRlcjo6Y29tcHV0ZUhhdmVTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveFBhaW50ZXI6OmNvbWJpbmVkVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Qm94UGFpbnRlcjo6Zm9udENhc2NhZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEJveFBhaW50ZXI6OnRleHRPcmlnaW5Gcm9tUGFpbnRSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpkZWJ1Z1RleHRTaGFkb3cgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlTWFya2VkVGV4dEZyb21TZWxlY3Rpb25JbkJveCk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmg6CisKIDIwMjEtMDktMTcgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBzY3Jv
bGxiYXItcmVsYXRlZCBjb2RlIG91dCBvZiBTY3JvbGxBbmltYXRvciBhbmQgaW50byBTY3JvbGxi
YXJzQ29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAppbmRleCBkMjJm
NzA3NTY3ZWE1YmI1MWMzMDM5MGIyNzVhMGQ1MmM5NGZkZmI0Li40MWQ2ZTVmYWRkYzVjMWU2MmM1
MzI1YTFiNzhhOGNjYmQ3MTM5OGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNw
cApAQCAtNTMsOCArNTMsOCBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJUZXh0Qm94UGFpbnRlci5oIgogI2luY2x1ZGUgIlRleHREZWNvcmF0aW9uUGFpbnRlci5oIgot
I2luY2x1ZGUgIlRleHRQYWludGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFj
ZSBMYXlvdXRJbnRlZ3JhdGlvbiB7CkBAIC01MDEsOSArNTAxLDE1IEBAIHZvaWQgTGluZUxheW91
dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCkKICAgICBmb3IgKGF1dG8mIHJ1biA6IG1faW5saW5lQ29udGVudC0+cnVuc0ZvclJlY3Qo
cGFpbnRSZWN0KSkgewogICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94KCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJ1bi50ZXh0KCkpCi0gICAgICAgICAgICBwYWludFRl
eHRSdW5Vc2luZ1BoeXNpY2FsQ29vcmRpbmF0ZXMocGFpbnRJbmZvLCBwYWludE9mZnNldCwgbV9p
bmxpbmVDb250ZW50LT5saW5lRm9yUnVuKHJ1biksIHJ1bik7Ci0gICAgICAgIGVsc2UgaWYgKGF1
dG8mIHJlbmRlcmVyID0gbV9ib3hUcmVlLnJlbmRlcmVyRm9yTGF5b3V0Qm94KHJ1bi5sYXlvdXRC
b3goKSk7IGlzPFJlbmRlckJveD4ocmVuZGVyZXIpICYmIHJlbmRlcmVyLmlzUmVwbGFjZWQoKSkg
eworICAgICAgICBpZiAocnVuLnRleHQoKSkgeworICAgICAgICAgICAgaWYgKHJ1bi5zdHlsZSgp
LnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBUZXh0Qm94UGFpbnRlciBwYWludGVyKCptX2lubGluZUNv
bnRlbnQsIHJ1biwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisgICAgICAgICAgICBwYWludGVy
LnBhaW50KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
YXV0byYgcmVuZGVyZXIgPSBtX2JveFRyZWUucmVuZGVyZXJGb3JMYXlvdXRCb3gocnVuLmxheW91
dEJveCgpKTsgaXM8UmVuZGVyQm94PihyZW5kZXJlcikgJiYgcmVuZGVyZXIuaXNSZXBsYWNlZCgp
KSB7CiAgICAgICAgICAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJl
bmRlcmVyKTsKICAgICAgICAgICAgIGlmICghcmVuZGVyQm94Lmhhc1NlbGZQYWludGluZ0xheWVy
KCkgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChyZW5kZXJCb3gpKQogICAgICAg
ICAgICAgICAgIHJlbmRlckJveC5wYWludEFzSW5saW5lQmxvY2socGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7CkBAIC01NzAsODUgKzU3Niw2IEBAIHZvaWQgTGluZUxheW91dDo6cmVsZWFzZUNhY2hl
cygpCiAgICAgICAgIG1faW5saW5lQ29udGVudC0+cmVsZWFzZUNhY2hlcygpOwogfQogCi12b2lk
IExpbmVMYXlvdXQ6OnBhaW50VGV4dFJ1blVzaW5nUGh5c2ljYWxDb29yZGluYXRlcyhQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMaW5l
JiBsaW5lLCBjb25zdCBMYXlvdXQ6OlJ1biYgcnVuKQotewotICAgIGF1dG8mIHN0eWxlID0gcnVu
LnN0eWxlKCk7Ci0gICAgaWYgKHJ1bi5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5
OjpWaXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiB0ZXh0Q29udGVudCA9ICpy
dW4udGV4dCgpOwotICAgIGlmICghdGV4dENvbnRlbnQubGVuZ3RoKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0Um9vdCA9IGZsb3coKTsKLSAgICBhdXRv
IGJsb2NrSXNIb3Jpem9udGFsV3JpdGluZyA9IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5zdHlsZSgp
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Ci0gICAgYXV0byBwaHlzaWNhbFBhaW50T2Zmc2V0
ID0gcGFpbnRPZmZzZXQ7Ci0gICAgaWYgKCFibG9ja0lzSG9yaXpvbnRhbFdyaXRpbmcpIHsKLSAg
ICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2h5IHRoaXMgdHJhbnNsYXRlIGlzIHJlcXVpcmVk
LgotICAgICAgICBwaHlzaWNhbFBhaW50T2Zmc2V0Lm1vdmUoeyAwLCAtcnVuLmxvZ2ljYWxSZWN0
KCkuaGVpZ2h0KCkgfSk7Ci0gICAgfQotCi0gICAgYXV0byBwaHlzaWNhbFJlY3QgPSBbJl0oY29u
c3QgYXV0byYgcmVjdCkgLT4gRmxvYXRSZWN0IHsKLSAgICAgICAgaWYgKCFzdHlsZS5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlY3Q7Ci0gICAgICAg
IGlmICghYmxvY2tJc0hvcml6b250YWxXcml0aW5nKQotICAgICAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdCB7IGZvcm1hdHRpbmdDb250ZXh0Um9vdC53aWR0aCgpIC0gcmVjdC5ib3R0b20oKSwgcmVj
dC5sZWZ0KCkgLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgfTsKLSAgICAgICAgQVNTRVJU
X05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0gICAgfTsKLQot
ICAgIGF1dG8gdmlzdWFsT3ZlcmZsb3dSZWN0ID0gcGh5c2ljYWxSZWN0KHJ1bi5pbmtPdmVyZmxv
dygpKTsKLQotICAgIGF1dG8gZGFtYWdlZFJlY3QgPSBwYWludEluZm8ucmVjdDsKLSAgICBkYW1h
Z2VkUmVjdC5tb3ZlQnkoLXBoeXNpY2FsUGFpbnRPZmZzZXQpOwotICAgIGlmIChkYW1hZ2VkUmVj
dC55KCkgPiB2aXN1YWxPdmVyZmxvd1JlY3QubWF4WSgpIHx8IGRhbWFnZWRSZWN0Lm1heFkoKSA8
IHZpc3VhbE92ZXJmbG93UmVjdC55KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwYWlu
dEluZm8uZXZlbnRSZWdpb25Db250ZXh0KSB7Ci0gICAgICAgIGlmIChzdHlsZS5wb2ludGVyRXZl
bnRzKCkgIT0gUG9pbnRlckV2ZW50czo6Tm9uZSkgewotICAgICAgICAgICAgdmlzdWFsT3ZlcmZs
b3dSZWN0Lm1vdmVCeShwaHlzaWNhbFBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAgIHBhaW50SW5m
by5ldmVudFJlZ2lvbkNvbnRleHQtPnVuaXRlKGVuY2xvc2luZ0ludFJlY3QodmlzdWFsT3ZlcmZs
b3dSZWN0KSwgc3R5bGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBhdXRvJiBwYWludENvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGF1dG8gZXhw
YW5zaW9uID0gcnVuLmV4cGFuc2lvbigpOwotICAgIC8vIFRleHRSdW4gZXhwZWN0cyB0aGUgeFBv
cyB0byBiZSBhZGp1c3RlZCB3aXRoIHRoZSBhbGlnbWVudCBvZmZzZXQgKGUuZy4gd2hlbiB0aGUg
bGluZSBpcyBjZW50ZXIgYWxpZ25lZAotICAgIC8vIGFuZCB0aGUgcnVuIHN0YXJ0cyBhdCAxMDBw
eCwgZHVlIHRvIHRoZSBob3Jpem9udGFsIGFsaWdtZW50LCB0aGUgeHBvcyBpcyBzdXBwb3NlZCB0
byBiZSBhdCAwcHgpLgotICAgIGF1dG8mIGZvbnRDYXNjYWRlID0gc3R5bGUuZm9udENhc2NhZGUo
KTsKLSAgICBhdXRvIHhQb3MgPSBydW4ubG9naWNhbFJlY3QoKS5sZWZ0KCkgLSAobGluZS5saW5l
Qm94TGVmdCgpICsgbGluZS5jb250ZW50TGVmdCgpKTsKLSAgICBhdXRvIHRleHRSdW4gPSBXZWJD
b3JlOjpUZXh0UnVuIHsgdGV4dENvbnRlbnQucmVuZGVyZWRDb250ZW50KCksIHhQb3MsIGV4cGFu
c2lvbi5ob3Jpem9udGFsRXhwYW5zaW9uLCBleHBhbnNpb24uYmVoYXZpb3IgfTsKLSAgICB0ZXh0
UnVuLnNldFRhYlNpemUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50YWJTaXpl
KCkpOwotCi0gICAgYXV0byB0ZXh0UGFpbnRlciA9IFRleHRQYWludGVyIHsgcGFpbnRDb250ZXh0
IH07Ci0gICAgdGV4dFBhaW50ZXIuc2V0Rm9udChmb250Q2FzY2FkZSk7Ci0gICAgdGV4dFBhaW50
ZXIuc2V0U3R5bGUoY29tcHV0ZVRleHRQYWludFN0eWxlKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5m
cmFtZSgpLCBzdHlsZSwgcGFpbnRJbmZvKSk7Ci0gICAgdGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNw
bGF5TGlzdElmTmVlZGVkKHJ1biwgcGFpbnRJbmZvLCBmb250Q2FzY2FkZSwgcGFpbnRDb250ZXh0
LCB0ZXh0UnVuKTsKLQotICAgIC8vIFBhaW50aW5nIHVzZXMgb25seSBwaHlzaWNhbCBjb29yZGlu
YXRlcy4KLSAgICB7Ci0gICAgICAgIGF1dG8gcnVuUmVjdCA9IHBoeXNpY2FsUmVjdChydW4ubG9n
aWNhbFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gYm94UmVjdCA9IEZsb2F0UmVjdCB7IEZsb2F0UG9p
bnQgeyBwaHlzaWNhbFBhaW50T2Zmc2V0LngoKSArIHJ1blJlY3QueCgpLCBwaHlzaWNhbFBhaW50
T2Zmc2V0LnkoKSArIHJ1blJlY3QueSgpIH0sIHJ1blJlY3Quc2l6ZSgpIH07Ci0gICAgICAgIGF1
dG8gdGV4dE9yaWdpbiA9IEZsb2F0UG9pbnQgeyBib3hSZWN0LngoKSwgcm91bmRUb0RldmljZVBp
eGVsKGJveFJlY3QueSgpICsgZm9udENhc2NhZGUuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSwgZm9y
bWF0dGluZ0NvbnRleHRSb290LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkgfTsKLQot
ICAgICAgICBhdXRvIHNob3VsZFJvdGF0ZSA9ICFibG9ja0lzSG9yaXpvbnRhbFdyaXRpbmc7Ci0g
ICAgICAgIGlmIChzaG91bGRSb3RhdGUpCi0gICAgICAgICAgICBwYWludENvbnRleHQuY29uY2F0
Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENsb2Nrd2lzZSkpOwotICAgICAgICB0ZXh0UGFpbnRlci5w
YWludCh0ZXh0UnVuLCBydW5SZWN0LCB0ZXh0T3JpZ2luKTsKLQotICAgICAgICBpZiAoIXN0eWxl
LnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhdXRv
JiB0ZXh0UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJUZXh0PihtX2JveFRyZWUucmVuZGVyZXJG
b3JMYXlvdXRCb3gocnVuLmxheW91dEJveCgpKSk7Ci0gICAgICAgICAgICBhdXRvIGRlY29yYXRp
b25QYWludGVyID0gVGV4dERlY29yYXRpb25QYWludGVyIHsgcGFpbnRDb250ZXh0LCBzdHlsZS50
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLCB0ZXh0UmVuZGVyZXIsIGZhbHNlLCBmb250Q2FzY2Fk
ZSB9OwotICAgICAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFJ1bkl0ZXJhdG9yKHRl
eHRSdW5Gb3IoKm1faW5saW5lQ29udGVudCwgcnVuKSk7Ci0gICAgICAgICAgICBkZWNvcmF0aW9u
UGFpbnRlci5zZXRXaWR0aChydW5SZWN0LndpZHRoKCkpOwotICAgICAgICAgICAgZGVjb3JhdGlv
blBhaW50ZXIucGFpbnRUZXh0RGVjb3JhdGlvbih0ZXh0UnVuLCB0ZXh0T3JpZ2luLCBydW5SZWN0
LmxvY2F0aW9uKCkgKyBwaHlzaWNhbFBhaW50T2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoc2hvdWxkUm90YXRlKQotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5jb25jYXRD
VE0ocm90YXRpb24oYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwotICAgIH0KLX0KLQogTGF5
b3V0OjpJbmxpbmVEYW1hZ2UmIExpbmVMYXlvdXQ6OmVuc3VyZUxpbmVEYW1hZ2UoKQogewogICAg
IGlmICghbV9saW5lRGFtYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oCmluZGV4IDVl
ODk3NDM2ZTAyNmMwNTFiN2M2ZjhmMjg3ZGM2Yzk5ZjFmZjI1YTYuLjU3NTE2YTA3Mjg2MTZkYzQy
ZGQwMDNhM2FkYmU1OWU5YzA5ZTA1MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgK
QEAgLTEyMyw4ICsxMjMsNiBAQCBwcml2YXRlOgogICAgIElubGluZUNvbnRlbnQmIGVuc3VyZUlu
bGluZUNvbnRlbnQoKTsKICAgICB2b2lkIHVwZGF0ZUxheW91dEJveERpbWVuc2lvbnMoY29uc3Qg
UmVuZGVyQm94Jik7CiAKLSAgICB2b2lkIHBhaW50VGV4dFJ1blVzaW5nUGh5c2ljYWxDb29yZGlu
YXRlcyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExp
bmUmLCBjb25zdCBMYXlvdXQ6OlJ1biYpOwotCiAgICAgTGF5b3V0OjpJbmxpbmVEYW1hZ2UmIGVu
c3VyZUxpbmVEYW1hZ2UoKTsKIAogICAgIGNvbnN0IExheW91dDo6Q29udGFpbmVyQm94JiByb290
TGF5b3V0Qm94KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGVnYWN5SW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5
SW5saW5lRmxvd0JveC5jcHAKaW5kZXggZWJmMjYwN2I3YWY5YjNlNDY3MTViNmVmYmEwYmVkMTEy
OTI3ODc5My4uMDI3M2VlZWY1M2IxNzNiZjBmNzA4YTk0ZGJkYzk4MzBkZmE1MjMyNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcApAQCAt
MjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkxheW91
dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMZWdhY3lFbGxpcHNpc0JveC5o
IgogI2luY2x1ZGUgIkxlZ2FjeUlubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJMZWdhY3lSb290
SW5saW5lQm94LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5
SW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5l
VGV4dEJveC5jcHAKaW5kZXggMWZkMWIzZmYwY2U2OTVmY2NiZGQ5ZjBhOTljNWQyM2NjMTNjM2Ew
Ny4uYTcyMzRiZTRlYmFlYWE1MDkyOWJmZjAyYjBkY2MxZTRlYTU1MWYxMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcApAQCAtNDMzLDIw
ICs0MzMsNiBAQCBib29sIExlZ2FjeUlubGluZVRleHRCb3g6Omhhc01hcmtlcnMoKSBjb25zdAog
ICAgIHJldHVybiBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKHJlbmRlcmVy
KCksIHNlbGVjdGFibGVSYW5nZSgpLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9u
KS5zaXplKCk7CiB9CiAKLUZsb2F0UG9pbnQgTGVnYWN5SW5saW5lVGV4dEJveDo6dGV4dE9yaWdp
bkZyb21Cb3hSZWN0KGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCkgY29uc3QKLXsKLSAgICBGbG9h
dFBvaW50IHRleHRPcmlnaW4geyBib3hSZWN0LngoKSwgYm94UmVjdC55KCkgKyBsaW5lRm9udCgp
LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgfTsKLSAgICBpZiAoYXV0byogY29tYmluZWRUZXh0ID0g
dGhpcy0+Y29tYmluZWRUZXh0KCkpIHsKLSAgICAgICAgaWYgKGF1dG8gbmV3T3JpZ2luID0gY29t
YmluZWRUZXh0LT5jb21wdXRlVGV4dE9yaWdpbihib3hSZWN0KSkKLSAgICAgICAgICAgIHRleHRP
cmlnaW4gPSBuZXdPcmlnaW4udmFsdWUoKTsKLSAgICB9Ci0gICAgaWYgKGlzSG9yaXpvbnRhbCgp
KQotICAgICAgICB0ZXh0T3JpZ2luLnNldFkocm91bmRUb0RldmljZVBpeGVsKExheW91dFVuaXQg
eyB0ZXh0T3JpZ2luLnkoKSB9LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSkpOwotICAgIGVsc2UKLSAgICAgICAgdGV4dE9yaWdpbi5zZXRYKHJvdW5kVG9EZXZpY2VQ
aXhlbChMYXlvdXRVbml0IHsgdGV4dE9yaWdpbi54KCkgfSwgcmVuZGVyZXIoKS5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCkpKTsKLSAgICByZXR1cm4gdGV4dE9yaWdpbjsKLX0KLQogaW50
IExlZ2FjeUlubGluZVRleHRCb3g6OmNhcmV0TWluT2Zmc2V0KCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9zdGFydDsKQEAgLTU0MCwxNSArNTI2LDYgQEAgY29uc3QgUmVuZGVyQ29tYmluZVRleHQq
IExlZ2FjeUlubGluZVRleHRCb3g6OmNvbWJpbmVkVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIGxp
bmVTdHlsZSgpLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRl
cmVyKCkpICYmIGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKS5pc0NvbWJp
bmVkKCkgPyAmZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKCkpIDogbnVsbHB0
cjsKIH0KIAotY29uc3QgU2hhZG93RGF0YSogTGVnYWN5SW5saW5lVGV4dEJveDo6ZGVidWdUZXh0
U2hhZG93KCkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5sZWdhY3lM
aW5lTGF5b3V0VmlzdWFsQ292ZXJhZ2VFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlYnVnVGV4dFNoYWRv
dyhJbnRQb2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBTUkdC
QTx1aW50OF90PiB7IDE1MCwgMCwgMCwgMTkwIH0pOwotICAgIHJldHVybiAmZGVidWdUZXh0U2hh
ZG93LmdldCgpOwotfQotCiBFeHBhbnNpb25CZWhhdmlvciBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpl
eHBhbnNpb25CZWhhdmlvcigpIGNvbnN0CiB7CiAgICAgRXhwYW5zaW9uQmVoYXZpb3IgbGVmdEJl
aGF2aW9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGlu
ZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94
LmgKaW5kZXggNGM2YTIyODVhZjJhZDc1MDIxNGE4NzY0NWRkMWRjZTQwNjExMTVkYy4uZmIyMjJm
ZDRlZmFmNTNiNjg1MGU2OTQ2MzA3NDI4MGQyMmZjYjk2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oCkBAIC0xNTcsMTMgKzE1Nyw5IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvckxl
Z2FjeVBhdGg7CiAgICAgZnJpZW5kIGNsYXNzIFRleHRCb3hQYWludGVyOwogCi0gICAgRmxvYXRQ
b2ludCB0ZXh0T3JpZ2luRnJvbUJveFJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0KICAg
ICBjb25zdCBSZW5kZXJDb21iaW5lVGV4dCogY29tYmluZWRUZXh0KCkgY29uc3Q7CiAgICAgY29u
c3QgRm9udENhc2NhZGUmIGxpbmVGb250KCkgY29uc3Q7CiAKLSAgICBjb25zdCBTaGFkb3dEYXRh
KiBkZWJ1Z1RleHRTaGFkb3coKSBjb25zdDsKLQogICAgIFN0cmluZyB0ZXh0KGJvb2wgaWdub3Jl
Q29tYmluZWRUZXh0ID0gZmFsc2UsIGJvb2wgaWdub3JlSHlwaGVuID0gZmFsc2UpIGNvbnN0OyAv
LyBUaGUgZWZmZWN0aXZlIHRleHQgZm9yIHRoZSBydW4uCiAgICAgVGV4dFJ1biBjcmVhdGVUZXh0
UnVuKGJvb2wgaWdub3JlQ29tYmluZWRUZXh0ID0gZmFsc2UsIGJvb2wgaWdub3JlSHlwaGVuID0g
ZmFsc2UpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dEJveFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVy
LmNwcAppbmRleCAwZDIxZTcxNzM1NTA1M2YxMWMzZDJhZDQxYzU0MTA1ODgwNWRkNTkwLi4xMTlk
NjU3OGViOTAxMzgyM2FmN2YwODc5OTU0MDEwYjNhODBhYzU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAKQEAgLTI5LDEwICsyOSwxNCBAQAogI2luY2x1
ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkV2ZW50UmVnaW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIK
KyNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGVn
YWN5SW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJl
bmRlckJsb2NrLmgiCisjaW5jbHVkZSAiUmVuZGVyQ29tYmluZVRleHQuaCIKICNpbmNsdWRlICJS
ZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiU2hhZG93RGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlZE1h
cmtlZFRleHQuaCIKICNpbmNsdWRlICJUZXh0UGFpbnRTdHlsZS5oIgogI2luY2x1ZGUgIlRleHRQ
YWludGVyLmgiCkBAIC00MCwxMyArNDQsMjkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVGV4
dEJveFBhaW50ZXI6OlRleHRCb3hQYWludGVyKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmIHRl
eHRCb3gsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQpCisgICAgOiBUZXh0Qm94UGFpbnRlcihMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bkZvcigm
dGV4dEJveCksIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpCit7CisgICAgbV9lbXBoYXNpc01hcmtF
eGlzdHNBbmRJc0Fib3ZlID0gdGV4dEJveC5lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKG1f
c3R5bGUpOworfQorCitUZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIoY29uc3QgTGF5b3V0
SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQsIGNvbnN0IExheW91dDo6
UnVuJiBydW4sIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQpCisgICAgOiBUZXh0Qm94UGFpbnRlcihMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bkZv
cihpbmxpbmVDb250ZW50LCBydW4pLCBwYWludEluZm8sIHBhaW50T2Zmc2V0KQoreworfQorCitU
ZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlRl
eHRSdW5JdGVyYXRvciYgdGV4dEJveCwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW50JiBwYWludE9mZnNldCkKICAgICA6IG1fdGV4dEJveCh0ZXh0Qm94KQotICAgICwgbV9y
ZW5kZXJlcih0ZXh0Qm94LnJlbmRlcmVyKCkpCisgICAgLCBtX3JlbmRlcmVyKHRleHRCb3gtPnJl
bmRlcmVyKCkpCiAgICAgLCBtX2RvY3VtZW50KG1fcmVuZGVyZXIuZG9jdW1lbnQoKSkKKyAgICAs
IG1fc3R5bGUodGV4dEJveC0+c3R5bGUoKSkKKyAgICAsIG1fcGFpbnRUZXh0UnVuKHRleHRCb3gt
PmNyZWF0ZVRleHRSdW4oKSkKICAgICAsIG1fcGFpbnRJbmZvKHBhaW50SW5mbykKLSAgICAsIG1f
cGFpbnRSZWN0KGNvbXB1dGVQYWludFJlY3QodGV4dEJveCwgcGFpbnRPZmZzZXQpKQorICAgICwg
bV9zZWxlY3RhYmxlUmFuZ2UodGV4dEJveC0+c2VsZWN0YWJsZVJhbmdlKCkpCisgICAgLCBtX3Bh
aW50UmVjdChjb21wdXRlUGFpbnRSZWN0KHBhaW50T2Zmc2V0KSkKKyAgICAsIG1faXNGaXJzdExp
bmUodGV4dEJveC0+bGluZSgpLT5pc0ZpcnN0KCkpCisgICAgLCBtX2lzSG9yaXpvbnRhbCh0ZXh0
Qm94LT5pc0hvcml6b250YWwoKSkKICAgICAsIG1faXNQcmludGluZyhtX2RvY3VtZW50LnByaW50
aW5nKCkpCi0gICAgLCBtX2hhdmVTZWxlY3Rpb24oIW1faXNQcmludGluZyAmJiBtX3BhaW50SW5m
by5waGFzZSAhPSBQYWludFBoYXNlOjpUZXh0Q2xpcCAmJiBtX3RleHRCb3guc2VsZWN0aW9uU3Rh
dGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKQorICAgICwgbV9oYXZl
U2VsZWN0aW9uKGNvbXB1dGVIYXZlU2VsZWN0aW9uKCkpCiAgICAgLCBtX2NvbnRhaW5zQ29tcG9z
aXRpb24obV9yZW5kZXJlci50ZXh0Tm9kZSgpICYmIG1fcmVuZGVyZXIuZnJhbWUoKS5lZGl0b3Io
KS5jb21wb3NpdGlvbk5vZGUoKSA9PSBtX3JlbmRlcmVyLnRleHROb2RlKCkpCiAgICAgLCBtX3Vz
ZUN1c3RvbVVuZGVybGluZXMobV9jb250YWluc0NvbXBvc2l0aW9uICYmIG1fcmVuZGVyZXIuZnJh
bWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblVzZXNDdXN0b21VbmRlcmxpbmVzKCkpCiB7CkBAIC02
NCwxMSArODQsMTEgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnQoKQogCiAgICAgaWYgKG1f
cGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkV2ZW50UmVnaW9uKSB7CiAgICAgICAgIGlm
IChtX3JlbmRlcmVyLnBhcmVudCgpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCkpCi0gICAgICAgICAg
ICBtX3BhaW50SW5mby5ldmVudFJlZ2lvbkNvbnRleHQtPnVuaXRlKGVuY2xvc2luZ0ludFJlY3Qo
bV9wYWludFJlY3QpLCBtX3JlbmRlcmVyLnN0eWxlKCkpOworICAgICAgICAgICAgbV9wYWludElu
Zm8uZXZlbnRSZWdpb25Db250ZXh0LT51bml0ZShlbmNsb3NpbmdJbnRSZWN0KG1fcGFpbnRSZWN0
KSwgbV9zdHlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBib29sIHNob3VsZFJv
dGF0ZSA9ICFtX3RleHRCb3guaXNIb3Jpem9udGFsKCkgJiYgIW1fdGV4dEJveC5jb21iaW5lZFRl
eHQoKTsKKyAgICBib29sIHNob3VsZFJvdGF0ZSA9ICFtX2lzSG9yaXpvbnRhbCAmJiAhY29tYmlu
ZWRUZXh0KCk7CiAgICAgaWYgKHNob3VsZFJvdGF0ZSkKICAgICAgICAgbV9wYWludEluZm8uY29u
dGV4dCgpLmNvbmNhdENUTShyb3RhdGlvbihtX3BhaW50UmVjdCwgQ2xvY2t3aXNlKSk7CiAKQEAg
LTkyLDkgKzExMiw5IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50KCkKICAgICAgICAgbV9w
YWludEluZm8uY29udGV4dCgpLmNvbmNhdENUTShyb3RhdGlvbihtX3BhaW50UmVjdCwgQ291bnRl
cmNsb2Nrd2lzZSkpOwogfQogCi1zdGF0aWMgTWFya2VkVGV4dCBjcmVhdGVNYXJrZWRUZXh0RnJv
bVNlbGVjdGlvbkluQm94KGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmIGJveCkKK01hcmtlZFRl
eHQgVGV4dEJveFBhaW50ZXI6OmNyZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3goKQog
ewotICAgIGF1dG8gW3NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmRdID0gYm94LnNlbGVjdGlv
blN0YXJ0RW5kKCk7CisgICAgYXV0byBbc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZF0gPSBt
X3JlbmRlcmVyLnZpZXcoKS5zZWxlY3Rpb24oKS5yYW5nZUZvclRleHRCb3gobV9yZW5kZXJlciwg
bV9zZWxlY3RhYmxlUmFuZ2UpOwogICAgIGlmIChzZWxlY3Rpb25TdGFydCA8IHNlbGVjdGlvbkVu
ZCkKICAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgTWFya2Vk
VGV4dDo6U2VsZWN0aW9uIH07CiAgICAgcmV0dXJuIHsgfTsKQEAgLTEwNSwyMCArMTI1LDE4IEBA
IHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZCgpCiAgICAgaWYgKG1fY29udGFp
bnNDb21wb3NpdGlvbiAmJiAhbV91c2VDdXN0b21VbmRlcmxpbmVzKQogICAgICAgICBwYWludENv
bXBvc2l0aW9uQmFja2dyb3VuZCgpOwogCi0gICAgYXV0byBzZWxlY3RhYmxlUmFuZ2UgPSBtX3Rl
eHRCb3guc2VsZWN0YWJsZVJhbmdlKCk7Ci0KICAgICBWZWN0b3I8TWFya2VkVGV4dD4gbWFya2Vk
VGV4dHM7Ci0gICAgbWFya2VkVGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtlZFRleHQ6OmNvbGxlY3RG
b3JEb2N1bWVudE1hcmtlcnMobV9yZW5kZXJlciwgc2VsZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0
OjpQYWludFBoYXNlOjpCYWNrZ3JvdW5kKSk7Ci0gICAgbWFya2VkVGV4dHMuYXBwZW5kVmVjdG9y
KE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JIaWdobGlnaHRzKG1fcmVuZGVyZXIsIHNlbGVjdGFibGVS
YW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6QmFja2dyb3VuZCkpOworICAgIG1hcmtlZFRl
eHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKG1f
cmVuZGVyZXIsIG1fc2VsZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpCYWNr
Z3JvdW5kKSk7CisgICAgbWFya2VkVGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtlZFRleHQ6OmNvbGxl
Y3RGb3JIaWdobGlnaHRzKG1fcmVuZGVyZXIsIG1fc2VsZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0
OjpQYWludFBoYXNlOjpCYWNrZ3JvdW5kKSk7CiAKICNpZiBFTkFCTEUoVEVYVF9TRUxFQ1RJT04p
CiAgICAgaWYgKG1faGF2ZVNlbGVjdGlvbiAmJiAhbV91c2VDdXN0b21VbmRlcmxpbmVzICYmICFt
X3BhaW50SW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxlZCgpKSB7Ci0gICAgICAgIGF1dG8g
c2VsZWN0aW9uTWFya2VkVGV4dCA9IGNyZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3go
bV90ZXh0Qm94KTsKKyAgICAgICAgYXV0byBzZWxlY3Rpb25NYXJrZWRUZXh0ID0gY3JlYXRlTWFy
a2VkVGV4dEZyb21TZWxlY3Rpb25JbkJveCgpOwogICAgICAgICBpZiAoIXNlbGVjdGlvbk1hcmtl
ZFRleHQuaXNFbXB0eSgpKQogICAgICAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kKFdURk1vdmUo
c2VsZWN0aW9uTWFya2VkVGV4dCkpOwogICAgIH0KICNlbmRpZgotICAgIGF1dG8gc3R5bGVkTWFy
a2VkVGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0OjpzdWJkaXZpZGVBbmRSZXNvbHZlKG1hcmtlZFRl
eHRzLCBtX3JlbmRlcmVyLCBtX3RleHRCb3guaXNGaXJzdExpbmUoKSwgbV9wYWludEluZm8pOwor
ICAgIGF1dG8gc3R5bGVkTWFya2VkVGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0OjpzdWJkaXZpZGVB
bmRSZXNvbHZlKG1hcmtlZFRleHRzLCBtX3JlbmRlcmVyLCBtX2lzRmlyc3RMaW5lLCBtX3BhaW50
SW5mbyk7CiAKICAgICAvLyBDb2FsZXNjZSBzdHlsZXMgb2YgYWRqYWNlbnQgbWFya2VkIHRleHRz
IHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgZHJhd2luZyBjb21tYW5kcy4KICAgICBhdXRvIGNv
YWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6Y29hbGVzY2VBZGph
Y2VudFdpdGhFcXVhbEJhY2tncm91bmQoc3R5bGVkTWFya2VkVGV4dHMpOwpAQCAtMTMyLDE4ICsx
NTAsMTYgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kQW5kRGVjb3JhdGlv
bnMoKQogICAgIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25Gb3JlZ3JvdW5kID0gbV9oYXZlU2Vs
ZWN0aW9uICYmICFtX3VzZUN1c3RvbVVuZGVybGluZXM7CiAgICAgVmVjdG9yPE1hcmtlZFRleHQ+
IG1hcmtlZFRleHRzOwogICAgIGlmIChtX3BhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpT
ZWxlY3Rpb24pIHsKLSAgICAgICAgYXV0byBzZWxlY3RhYmxlUmFuZ2UgPSBtX3RleHRCb3guc2Vs
ZWN0YWJsZVJhbmdlKCk7Ci0KICAgICAgICAgLy8gVGhlIG1hcmtlZCB0ZXh0cyBmb3IgdGhlIGdh
cHMgYmV0d2VlbiBkb2N1bWVudCBtYXJrZXJzIGFuZCBzZWxlY3Rpb24gYXJlIGltcGxpY2l0bHkg
Y3JlYXRlZCBieSBzdWJkaXZpZGluZyB0aGUgZW50aXJlIGxpbmUuCi0gICAgICAgIG1hcmtlZFRl
eHRzLmFwcGVuZCh7IHNlbGVjdGFibGVSYW5nZS5jbGFtcChtX3RleHRCb3guc3RhcnQoKSksIHNl
bGVjdGFibGVSYW5nZS5jbGFtcChtX3RleHRCb3guZW5kKCkpLCBNYXJrZWRUZXh0OjpVbm1hcmtl
ZCB9KTsKKyAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kKHsgbV9zZWxlY3RhYmxlUmFuZ2UuY2xh
bXAobV90ZXh0Qm94LT5zdGFydCgpKSwgbV9zZWxlY3RhYmxlUmFuZ2UuY2xhbXAobV90ZXh0Qm94
LT5lbmQoKSksIE1hcmtlZFRleHQ6OlVubWFya2VkIH0pOwogCiAgICAgICAgIGlmICghbV9pc1By
aW50aW5nKSB7Ci0gICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmRWZWN0b3IoTWFya2VkVGV4
dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2VycyhtX3JlbmRlcmVyLCBzZWxlY3RhYmxlUmFuZ2Us
IE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91bmQpKTsKLSAgICAgICAgICAgIG1hcmtl
ZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0cyhtX3Jl
bmRlcmVyLCBzZWxlY3RhYmxlUmFuZ2UsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91
bmQpKTsKKyAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpj
b2xsZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKG1fcmVuZGVyZXIsIG1fc2VsZWN0YWJsZVJhbmdlLCBN
YXJrZWRUZXh0OjpQYWludFBoYXNlOjpGb3JlZ3JvdW5kKSk7CisgICAgICAgICAgICBtYXJrZWRU
ZXh0cy5hcHBlbmRWZWN0b3IoTWFya2VkVGV4dDo6Y29sbGVjdEZvckhpZ2hsaWdodHMobV9yZW5k
ZXJlciwgbV9zZWxlY3RhYmxlUmFuZ2UsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91
bmQpKTsKIAogICAgICAgICAgICAgYm9vbCBzaG91bGRQYWludERyYWdnZWRDb250ZW50ID0gISht
X3BhaW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkV4Y2x1ZGVT
ZWxlY3Rpb24pKTsKICAgICAgICAgICAgIGlmIChzaG91bGRQYWludERyYWdnZWRDb250ZW50KSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBtYXJrZWRUZXh0c0ZvckRyYWdnZWRDb250ZW50ID0gTWFy
a2VkVGV4dDo6Y29sbGVjdEZvckRyYWdnZWRDb250ZW50KG1fcmVuZGVyZXIsIHNlbGVjdGFibGVS
YW5nZSk7CisgICAgICAgICAgICAgICAgYXV0byBtYXJrZWRUZXh0c0ZvckRyYWdnZWRDb250ZW50
ID0gTWFya2VkVGV4dDo6Y29sbGVjdEZvckRyYWdnZWRDb250ZW50KG1fcmVuZGVyZXIsIG1fc2Vs
ZWN0YWJsZVJhbmdlKTsKICAgICAgICAgICAgICAgICBpZiAoIW1hcmtlZFRleHRzRm9yRHJhZ2dl
ZENvbnRlbnQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNob3VsZFBhaW50U2Vs
ZWN0aW9uRm9yZWdyb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBtYXJrZWRUZXh0
cy5hcHBlbmRWZWN0b3IobWFya2VkVGV4dHNGb3JEcmFnZ2VkQ29udGVudCk7CkBAIC0xNTQsMTIg
KzE3MCwxMiBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRBbmREZWNvcmF0
aW9ucygpCiAgICAgLy8gVGhlIHNlbGVjdGlvbiBtYXJrZWQgdGV4dCBhY3RzIGFzIGEgcGxhY2Vo
b2xkZXIgd2hlbiBjb21wdXRpbmcgdGhlIG1hcmtlZCB0ZXh0cyBmb3IgdGhlIGdhcHMuLi4KICAg
ICBpZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb25Gb3JlZ3JvdW5kKSB7CiAgICAgICAgIEFTU0VSVCgh
bV9pc1ByaW50aW5nKTsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25NYXJrZWRUZXh0ID0gY3JlYXRl
TWFya2VkVGV4dEZyb21TZWxlY3Rpb25JbkJveChtX3RleHRCb3gpOworICAgICAgICBhdXRvIHNl
bGVjdGlvbk1hcmtlZFRleHQgPSBjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KCk7
CiAgICAgICAgIGlmICghc2VsZWN0aW9uTWFya2VkVGV4dC5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBtYXJrZWRUZXh0cy5hcHBlbmQoV1RGTW92ZShzZWxlY3Rpb25NYXJrZWRUZXh0KSk7CiAgICAg
fQogCi0gICAgYXV0byBzdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxlZE1hcmtlZFRleHQ6OnN1YmRp
dmlkZUFuZFJlc29sdmUobWFya2VkVGV4dHMsIG1fcmVuZGVyZXIsIG1fdGV4dEJveC5pc0ZpcnN0
TGluZSgpLCBtX3BhaW50SW5mbyk7CisgICAgYXV0byBzdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxl
ZE1hcmtlZFRleHQ6OnN1YmRpdmlkZUFuZFJlc29sdmUobWFya2VkVGV4dHMsIG1fcmVuZGVyZXIs
IG1faXNGaXJzdExpbmUsIG1fcGFpbnRJbmZvKTsKIAogICAgIC8vIC4uLiBub3cgcmVtb3ZlIHRo
ZSBzZWxlY3Rpb24gbWFya2VkIHRleHQgaWYgd2UgYXJlIGV4Y2x1ZGluZyBzZWxlY3Rpb24uCiAg
ICAgaWYgKCFtX2lzUHJpbnRpbmcgJiYgbV9wYWludEluZm8ucGFpbnRCZWhhdmlvci5jb250YWlu
cyhQYWludEJlaGF2aW9yOjpFeGNsdWRlU2VsZWN0aW9uKSkgewpAQCAtMTc0LDI4ICsxOTAsMjgg
QEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kQW5kRGVjb3JhdGlvbnMoKQog
ICAgIGZvciAoYXV0byYgbWFya2VkVGV4dCA6IGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzKQog
ICAgICAgICBwYWludEZvcmVncm91bmQobWFya2VkVGV4dCk7CiAKLSAgICBhdXRvIHRleHREZWNv
cmF0aW9ucyA9IG1fdGV4dEJveC5saW5lU3R5bGUoKS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgp
OwotICAgIGJvb2wgaGlnaGxpZ2h0RGVjb3JhdGlvbnMgPSAhTWFya2VkVGV4dDo6Y29sbGVjdEZv
ckhpZ2hsaWdodHMobV9yZW5kZXJlciwgbV90ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpLCBNYXJr
ZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uKS5pc0VtcHR5KCk7CisgICAgYXV0byB0ZXh0
RGVjb3JhdGlvbnMgPSBtX3N0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CisgICAgYm9v
bCBoaWdobGlnaHREZWNvcmF0aW9ucyA9ICFNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0
cyhtX3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6
RGVjb3JhdGlvbikuaXNFbXB0eSgpOwogICAgIGJvb2wgbGluZURlY29yYXRpb25zID0gIXRleHRE
ZWNvcmF0aW9ucy5pc0VtcHR5KCk7CiAgICAgaWYgKChsaW5lRGVjb3JhdGlvbnMgfHwgaGlnaGxp
Z2h0RGVjb3JhdGlvbnMpICYmIG1fcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGVj
dGlvbikgewotICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBtX3RleHRCb3guY3JlYXRlVGV4dFJ1
bigpOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX3RleHRCb3gudHJ1bmNhdGlvbigpLnZh
bHVlX29yKHRleHRSdW4ubGVuZ3RoKCkpOworICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBtX3Rl
eHRCb3gtPmNyZWF0ZVRleHRSdW4oKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9zZWxl
Y3RhYmxlUmFuZ2UudHJ1bmNhdGlvbi52YWx1ZV9vcih0ZXh0UnVuLmxlbmd0aCgpKTsKICAgICAg
ICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQgPSAwOwogICAgICAgICB1bnNpZ25lZCBzZWxlY3Rp
b25FbmQgPSAwOwogICAgICAgICBpZiAobV9oYXZlU2VsZWN0aW9uKQotICAgICAgICAgICAgc3Rk
Ojp0aWUoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkgPSBtX3RleHRCb3guc2VsZWN0aW9u
U3RhcnRFbmQoKTsKKyAgICAgICAgICAgIHN0ZDo6dGllKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rp
b25FbmQpID0gbV9yZW5kZXJlci52aWV3KCkuc2VsZWN0aW9uKCkucmFuZ2VGb3JUZXh0Qm94KG1f
cmVuZGVyZXIsIG1fc2VsZWN0YWJsZVJhbmdlKTsKIAogICAgICAgICBGbG9hdFJlY3QgdGV4dERl
Y29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdDsKICAgICAgICAgaWYgKChtX3BhaW50SW5mby5w
YWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkV4Y2x1ZGVTZWxlY3Rpb24pKSAm
JiBzZWxlY3Rpb25TdGFydCA8IHNlbGVjdGlvbkVuZCAmJiBzZWxlY3Rpb25FbmQgPD0gbGVuZ3Ro
KSB7CiAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0ID0gbV9w
YWludFJlY3Q7CiAgICAgICAgICAgICBmbG9hdCBsb2dpY2FsV2lkdGhCZWZvcmVSYW5nZTsKICAg
ICAgICAgICAgIGZsb2F0IGxvZ2ljYWxXaWR0aEFmdGVyUmFuZ2U7Ci0gICAgICAgICAgICBmbG9h
dCBsb2dpY2FsU2VsZWN0aW9uV2lkdGggPSBtX3RleHRCb3gubGluZUZvbnQoKS53aWR0aE9mVGV4
dFJhbmdlKHRleHRSdW4sIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQsIG51bGxwdHIsICZs
b2dpY2FsV2lkdGhCZWZvcmVSYW5nZSwgJmxvZ2ljYWxXaWR0aEFmdGVyUmFuZ2UpOworICAgICAg
ICAgICAgZmxvYXQgbG9naWNhbFNlbGVjdGlvbldpZHRoID0gZm9udENhc2NhZGUoKS53aWR0aE9m
VGV4dFJhbmdlKG1fcGFpbnRUZXh0UnVuLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCBu
dWxscHRyLCAmbG9naWNhbFdpZHRoQmVmb3JlUmFuZ2UsICZsb2dpY2FsV2lkdGhBZnRlclJhbmdl
KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGhhbmRsZSB2ZXJ0aWNhbCBi
b3R0b20gdG8gdG9wIHRleHQ/Ci0gICAgICAgICAgICBpZiAoIW1fdGV4dEJveC5pc0hvcml6b250
YWwoKSkgeworICAgICAgICAgICAgaWYgKCFtX2lzSG9yaXpvbnRhbCkgewogICAgICAgICAgICAg
ICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3QubW92ZSgwLCBsb2dpY2FsV2lk
dGhCZWZvcmVSYW5nZSk7CiAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25D
bGlwT3V0UmVjdC5zZXRIZWlnaHQobG9naWNhbFNlbGVjdGlvbldpZHRoKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAobV90ZXh0Qm94LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCkg
eworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3RleHRCb3gtPmRpcmVjdGlvbigpID09IFRleHRE
aXJlY3Rpb246OlJUTCkgewogICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9u
Q2xpcE91dFJlY3QubW92ZShsb2dpY2FsV2lkdGhBZnRlclJhbmdlLCAwKTsKICAgICAgICAgICAg
ICAgICB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0LnNldFdpZHRoKGxvZ2ljYWxT
ZWxlY3Rpb25XaWR0aCk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjE0LDI5ICsyMzAsMjcg
QEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kQW5kRGVjb3JhdGlvbnMoKQog
CiB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgpCiB7Ci0g
ICAgYXV0byBzZWxlY3RhYmxlUmFuZ2UgPSBtX3RleHRCb3guc2VsZWN0YWJsZVJhbmdlKCk7Ci0K
ICAgICBhdXRvJiBlZGl0b3IgPSBtX3JlbmRlcmVyLmZyYW1lKCkuZWRpdG9yKCk7CiAKICAgICBp
ZiAoIWVkaXRvci5jb21wb3NpdGlvblVzZXNDdXN0b21IaWdobGlnaHRzKCkpIHsKLSAgICAgICAg
YXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFibGVSYW5nZS5jbGFtcChl
ZGl0b3IuY29tcG9zaXRpb25TdGFydCgpLCBlZGl0b3IuY29tcG9zaXRpb25FbmQoKSk7CisgICAg
ICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBtX3NlbGVjdGFibGVSYW5nZS5j
bGFtcChlZGl0b3IuY29tcG9zaXRpb25TdGFydCgpLCBlZGl0b3IuY29tcG9zaXRpb25FbmQoKSk7
CiAKICAgICAgICAgcGFpbnRCYWNrZ3JvdW5kKGNsYW1wZWRTdGFydCwgY2xhbXBlZEVuZCwgQ29t
cG9zaXRpb25IaWdobGlnaHQ6OmRlZmF1bHRDb21wb3NpdGlvbkZpbGxDb2xvcik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IGVkaXRvci5jdXN0
b21Db21wb3NpdGlvbkhpZ2hsaWdodHMoKSkgewotICAgICAgICBpZiAoaGlnaGxpZ2h0LmVuZE9m
ZnNldCA8PSBtX3RleHRCb3guc3RhcnQoKSkKKyAgICAgICAgaWYgKGhpZ2hsaWdodC5lbmRPZmZz
ZXQgPD0gbV90ZXh0Qm94LT5zdGFydCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgaWYgKGhpZ2hsaWdodC5zdGFydE9mZnNldCA+PSBtX3RleHRCb3guZW5kKCkpCisgICAgICAg
IGlmIChoaWdobGlnaHQuc3RhcnRPZmZzZXQgPj0gbV90ZXh0Qm94LT5lbmQoKSkKICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBz
ZWxlY3RhYmxlUmFuZ2UuY2xhbXAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0LCBoaWdobGlnaHQuZW5k
T2Zmc2V0KTsKKyAgICAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IG1fc2Vs
ZWN0YWJsZVJhbmdlLmNsYW1wKGhpZ2hsaWdodC5zdGFydE9mZnNldCwgaGlnaGxpZ2h0LmVuZE9m
ZnNldCk7CiAKICAgICAgICAgcGFpbnRCYWNrZ3JvdW5kKGNsYW1wZWRTdGFydCwgY2xhbXBlZEVu
ZCwgaGlnaGxpZ2h0LmNvbG9yLCBCYWNrZ3JvdW5kU3R5bGU6OlJvdW5kZWQpOwogCi0gICAgICAg
IGlmIChoaWdobGlnaHQuZW5kT2Zmc2V0ID4gbV90ZXh0Qm94LmVuZCgpKQorICAgICAgICBpZiAo
aGlnaGxpZ2h0LmVuZE9mZnNldCA+IG1fdGV4dEJveC0+ZW5kKCkpCiAgICAgICAgICAgICBicmVh
azsKICAgICB9CiB9CkBAIC0yNTcsMjIgKzI3MSwyMSBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpw
YWludEJhY2tncm91bmQodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwg
YwogCiAgICAgLy8gTm90ZSB0aGF0IGlmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgd2UgbGV0IHRo
ZSB0aGluZyBiZWluZyBwYWludGVkIGluIHRoZSB0cnVuY2F0aW9uCiAgICAgLy8gZHJhdyBpdHMg
b3duIGhpZ2hsaWdodC4KLSAgICBUZXh0UnVuIHRleHRSdW4gPSBtX3RleHRCb3guY3JlYXRlVGV4
dFJ1bigpOwogCi0gICAgY29uc3QgTGVnYWN5Um9vdElubGluZUJveCYgcm9vdEJveCA9IG1fdGV4
dEJveC5yb290KCk7Ci0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20gPSByb290Qm94LnNl
bGVjdGlvbkJvdHRvbSgpOwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wID0gcm9vdEJveC5z
ZWxlY3Rpb25Ub3BBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCk7CisgICAgY29uc3QgYXV0byBs
aW5lID0gbV90ZXh0Qm94LT5saW5lKCk7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20g
PSBsaW5lLT5zZWxlY3Rpb25Cb3R0b20oKTsKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCA9
IGxpbmUtPnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKTsKIAogICAgIC8v
IFVzZSBzYW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2VsZWN0aW9uLCBzbyB0
aGF0IHdoZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBzdWJyYW5nZSBhcmUgb24KICAgICAvLyB0
aGUgc2FtZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3RpY2tpbmcgb3V0LgotICAgIExheW91
dFVuaXQgZGVsdGFZIHsgbV9yZW5kZXJlci5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01v
ZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSAtIG1fdGV4dEJveC5sb2dpY2FsQm90dG9tKCkgOiBtX3Rl
eHRCb3gubG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wIH07CisgICAgTGF5b3V0VW5pdCBkZWx0
YVkgeyBtX3N0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRv
bSAtIG1fdGV4dEJveC0+bG9naWNhbEJvdHRvbSgpIDogbV90ZXh0Qm94LT5sb2dpY2FsVG9wKCkg
LSBzZWxlY3Rpb25Ub3AgfTsKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCA9IHN0ZDo6
bWF4PExheW91dFVuaXQ+KDAsIHNlbGVjdGlvbkJvdHRvbSAtIHNlbGVjdGlvblRvcCk7CiAKLSAg
ICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgeyBMYXlvdXRVbml0KG1fcGFpbnRSZWN0LngoKSks
IExheW91dFVuaXQobV9wYWludFJlY3QueSgpIC0gZGVsdGFZKSwgTGF5b3V0VW5pdChtX3RleHRC
b3gubG9naWNhbFdpZHRoKCkpLCBzZWxlY3Rpb25IZWlnaHQgfTsKLSAgICBtX3RleHRCb3gubGlu
ZUZvbnQoKS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0
LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3Qg
eyBMYXlvdXRVbml0KG1fcGFpbnRSZWN0LngoKSksIExheW91dFVuaXQobV9wYWludFJlY3QueSgp
IC0gZGVsdGFZKSwgTGF5b3V0VW5pdChtX3RleHRCb3gtPmxvZ2ljYWxXaWR0aCgpKSwgc2VsZWN0
aW9uSGVpZ2h0IH07CisgICAgZm9udENhc2NhZGUoKS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4
dChtX3BhaW50VGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7
CiAKICAgICAvLyBGSVhNRTogU3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0LiBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+LgotICAgIGF1dG8g
YmFja2dyb3VuZFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rp
b24oc2VsZWN0aW9uUmVjdCwgbV9kb2N1bWVudC5kZXZpY2VTY2FsZUZhY3RvcigpLCB0ZXh0UnVu
Lmx0cigpKTsKKyAgICBhdXRvIGJhY2tncm91bmRSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVs
c1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIG1fZG9jdW1lbnQuZGV2aWNlU2Nh
bGVGYWN0b3IoKSwgbV9wYWludFRleHRSdW4ubHRyKCkpOwogICAgIGlmIChiYWNrZ3JvdW5kU3R5
bGUgPT0gQmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKSB7CiAgICAgICAgIGJhY2tncm91bmRSZWN0
LmV4cGFuZCgtMSwgLTEpOwogICAgICAgICBiYWNrZ3JvdW5kUmVjdC5tb3ZlKDAuNSwgMC41KTsK
QEAgLTI4OSwzMCArMzAyLDMwIEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3Vu
ZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogICAgICAgICByZXR1cm47CiAK
ICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7Ci0g
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBtX3RleHRCb3gubGluZUZvbnQoKTsKLSAgICBj
b25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gbV90ZXh0Qm94LmxpbmVTdHlsZSgpOworICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gZm9udENhc2NhZGUoKTsKIAogICAgIGZsb2F0IGVt
cGhhc2lzTWFya09mZnNldCA9IDA7Ci0gICAgc3RkOjpvcHRpb25hbDxib29sPiBtYXJrRXhpc3Rz
QW5kSXNBYm92ZSA9IG1fdGV4dEJveC5lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGxpbmVT
dHlsZSk7Ci0gICAgY29uc3QgQXRvbVN0cmluZyYgZW1waGFzaXNNYXJrID0gbWFya0V4aXN0c0Fu
ZElzQWJvdmUgPyBsaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpIDogbnVsbEF0b20o
KTsKKyAgICBjb25zdCBBdG9tU3RyaW5nJiBlbXBoYXNpc01hcmsgPSBtX2VtcGhhc2lzTWFya0V4
aXN0c0FuZElzQWJvdmUgPyBtX3N0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSA6IG51bGxB
dG9tKCk7CiAgICAgaWYgKCFlbXBoYXNpc01hcmsuaXNFbXB0eSgpKQotICAgICAgICBlbXBoYXNp
c01hcmtPZmZzZXQgPSAqbWFya0V4aXN0c0FuZElzQWJvdmUgPyAtZm9udC5mb250TWV0cmljcygp
LmFzY2VudCgpIC0gZm9udC5lbXBoYXNpc01hcmtEZXNjZW50KGVtcGhhc2lzTWFyaykgOiBmb250
LmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICsgZm9udC5lbXBoYXNpc01hcmtBc2NlbnQoZW1waGFz
aXNNYXJrKTsKKyAgICAgICAgZW1waGFzaXNNYXJrT2Zmc2V0ID0gKm1fZW1waGFzaXNNYXJrRXhp
c3RzQW5kSXNBYm92ZSA/IC1mb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBmb250LmVtcGhh
c2lzTWFya0Rlc2NlbnQoZW1waGFzaXNNYXJrKSA6IGZvbnQuZm9udE1ldHJpY3MoKS5kZXNjZW50
KCkgKyBmb250LmVtcGhhc2lzTWFya0FzY2VudChlbXBoYXNpc01hcmspOwogCiAgICAgVGV4dFBh
aW50ZXIgdGV4dFBhaW50ZXIgeyBjb250ZXh0IH07CiAgICAgdGV4dFBhaW50ZXIuc2V0Rm9udChm
b250KTsKICAgICB0ZXh0UGFpbnRlci5zZXRTdHlsZShtYXJrZWRUZXh0LnN0eWxlLnRleHRTdHls
ZXMpOwotICAgIHRleHRQYWludGVyLnNldElzSG9yaXpvbnRhbChtX3RleHRCb3guaXNIb3Jpem9u
dGFsKCkpOworICAgIHRleHRQYWludGVyLnNldElzSG9yaXpvbnRhbChtX2lzSG9yaXpvbnRhbCk7
CiAgICAgaWYgKG1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdykgewogICAgICAgICB0ZXh0UGFp
bnRlci5zZXRTaGFkb3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52YWx1ZSgpKTsKLSAg
ICAgICAgaWYgKGxpbmVTdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCi0gICAgICAgICAgICB0
ZXh0UGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRlcigmbGluZVN0eWxlLmFwcGxlQ29sb3JGaWx0
ZXIoKSk7CisgICAgICAgIGlmIChtX3N0eWxlLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkKKyAgICAg
ICAgICAgIHRleHRQYWludGVyLnNldFNoYWRvd0NvbG9yRmlsdGVyKCZtX3N0eWxlLmFwcGxlQ29s
b3JGaWx0ZXIoKSk7CiAgICAgfQotICAgIHRleHRQYWludGVyLnNldEVtcGhhc2lzTWFyayhlbXBo
YXNpc01hcmssIGVtcGhhc2lzTWFya09mZnNldCwgbV90ZXh0Qm94LmNvbWJpbmVkVGV4dCgpKTsK
LSAgICBpZiAoYXV0byogZGVidWdTaGFkb3cgPSBtX3RleHRCb3guZGVidWdUZXh0U2hhZG93KCkp
CisgICAgdGV4dFBhaW50ZXIuc2V0RW1waGFzaXNNYXJrKGVtcGhhc2lzTWFyaywgZW1waGFzaXNN
YXJrT2Zmc2V0LCBjb21iaW5lZFRleHQoKSk7CisgICAgaWYgKGF1dG8qIGRlYnVnU2hhZG93ID0g
ZGVidWdUZXh0U2hhZG93KCkpCiAgICAgICAgIHRleHRQYWludGVyLnNldFNoYWRvdyhkZWJ1Z1No
YWRvdyk7CiAKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBtX3RleHRCb3guY3JlYXRlVGV4dFJ1bigp
OwotICAgIHRleHRQYWludGVyLnNldEdseXBoRGlzcGxheUxpc3RJZk5lZWRlZChtX3RleHRCb3gs
IG1fcGFpbnRJbmZvLCBmb250LCBjb250ZXh0LCB0ZXh0UnVuKTsKKyAgICBpZiAoYXV0byogbGVn
YWN5SW5saW5lQm94ID0gbV90ZXh0Qm94LT5sZWdhY3lJbmxpbmVCb3goKSkKKyAgICAgICAgdGV4
dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVkKGxlZ2FjeUlubGluZUJveCwgbV9w
YWludEluZm8sIGZvbnQsIGNvbnRleHQsIG1fcGFpbnRUZXh0UnVuKTsKKyAgICBlbHNlCisgICAg
ICAgIHRleHRQYWludGVyLnNldEdseXBoRGlzcGxheUxpc3RJZk5lZWRlZChtX3RleHRCb3gtPmlu
bGluZUJveCgpLCBtX3BhaW50SW5mbywgZm9udCwgY29udGV4dCwgbV9wYWludFRleHRSdW4pOwog
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyIHsgY29udGV4dCwgZmFs
c2UgfTsKICAgICBpZiAobWFya2VkVGV4dC50eXBlID09IE1hcmtlZFRleHQ6OkRyYWdnZWRDb250
ZW50KSB7CkBAIC0zMjAsNyArMzMzLDcgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3Jl
Z3JvdW5kKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCiAgICAgICAgIGNvbnRl
eHQuc2V0QWxwaGEobWFya2VkVGV4dC5zdHlsZS5hbHBoYSk7CiAgICAgfQogICAgIC8vIFRleHRQ
YWludGVyIHdhbnRzIHRoZSBib3ggcmVjdGFuZ2xlIGFuZCB0ZXh0IG9yaWdpbiBvZiB0aGUgZW50
aXJlIGxpbmUgYm94LgotICAgIHRleHRQYWludGVyLnBhaW50UmFuZ2UodGV4dFJ1biwgbV9wYWlu
dFJlY3QsIG1fdGV4dEJveC50ZXh0T3JpZ2luRnJvbUJveFJlY3QobV9wYWludFJlY3QpLCBtYXJr
ZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7CisgICAgdGV4dFBhaW50
ZXIucGFpbnRSYW5nZShtX3BhaW50VGV4dFJ1biwgbV9wYWludFJlY3QsIHRleHRPcmlnaW5Gcm9t
UGFpbnRSZWN0KG1fcGFpbnRSZWN0KSwgbWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4
dC5lbmRPZmZzZXQpOwogfQogCiB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludERlY29yYXRpb24o
Y29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCwgY29uc3QgRmxvYXRSZWN0JiBjbGlw
T3V0UmVjdCkKQEAgLTMzMiwzOCArMzQ1LDM2IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50
RGVjb3JhdGlvbihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0LCBjb25zdCBGCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1fcGFpbnRJ
bmZvLmNvbnRleHQoKTsKLSAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IG1fdGV4dEJveC5s
aW5lRm9udCgpOwotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSBtX3RleHRCb3gu
bGluZVN0eWxlKCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBmb250Q2FzY2FkZSgp
OwogCiAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIG1hcmtlZFRleHQuc3R5bGUu
dGV4dFN0eWxlcyk7CiAKLSAgICBib29sIGlzQ29tYmluZWRUZXh0ID0gbV90ZXh0Qm94LmNvbWJp
bmVkVGV4dCgpOworICAgIGJvb2wgaXNDb21iaW5lZFRleHQgPSBjb21iaW5lZFRleHQoKTsKICAg
ICBpZiAoaXNDb21iaW5lZFRleHQpCiAgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9u
KG1fcGFpbnRSZWN0LCBDbG9ja3dpc2UpKTsKIAogICAgIC8vIE5vdGUgdGhhdCBpZiB0aGUgdGV4
dCBpcyB0cnVuY2F0ZWQsIHdlIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1
bmNhdGlvbgogICAgIC8vIGRyYXcgaXRzIG93biBkZWNvcmF0aW9uLgotICAgIFRleHRSdW4gdGV4
dFJ1biA9IG1fdGV4dEJveC5jcmVhdGVUZXh0UnVuKCk7CiAKICAgICAvLyBBdm9pZCBtZWFzdXJp
bmcgdGhlIHRleHQgd2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVkIGFzIGFuIG9w
dGltaXphdGlvbi4KICAgICBGbG9hdFJlY3Qgc25hcHBlZFNlbGVjdGlvblJlY3QgPSBtX3BhaW50
UmVjdDsKLSAgICBpZiAoc3RhcnRPZmZzZXQgfHwgZW5kT2Zmc2V0ICE9IHRleHRSdW4ubGVuZ3Ro
KCkpIHsKKyAgICBpZiAoc3RhcnRPZmZzZXQgfHwgZW5kT2Zmc2V0ICE9IG1fcGFpbnRUZXh0UnVu
Lmxlbmd0aCgpKSB7CiAgICAgICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IHsgbV9wYWlu
dFJlY3QueCgpLCBtX3BhaW50UmVjdC55KCksIG1fcGFpbnRSZWN0LndpZHRoKCksIG1fcGFpbnRS
ZWN0LmhlaWdodCgpIH07Ci0gICAgICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQo
dGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgICAg
IHNuYXBwZWRTZWxlY3Rpb25SZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5n
RGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIG1fZG9jdW1lbnQuZGV2aWNlU2NhbGVGYWN0b3IoKSwg
dGV4dFJ1bi5sdHIoKSk7CisgICAgICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQo
bV9wYWludFRleHRSdW4sIHNlbGVjdGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwor
ICAgICAgICBzbmFwcGVkU2VsZWN0aW9uUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRo
V3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCBtX2RvY3VtZW50LmRldmljZVNjYWxlRmFj
dG9yKCksIG1fcGFpbnRUZXh0UnVuLmx0cigpKTsKICAgICB9CiAKICAgICAvLyAyLiBQYWludAot
ICAgIGF1dG8gdGV4dERlY29yYXRpb25zID0gbGluZVN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZm
ZWN0KCk7CisgICAgYXV0byB0ZXh0RGVjb3JhdGlvbnMgPSBtX3N0eWxlLnRleHREZWNvcmF0aW9u
c0luRWZmZWN0KCk7CiAgICAgdGV4dERlY29yYXRpb25zLmFkZChUZXh0RGVjb3JhdGlvblBhaW50
ZXI6OnRleHREZWNvcmF0aW9uc0luRWZmZWN0Rm9yU3R5bGUobWFya2VkVGV4dC5zdHlsZS50ZXh0
RGVjb3JhdGlvblN0eWxlcykpOwotICAgIFRleHREZWNvcmF0aW9uUGFpbnRlciBkZWNvcmF0aW9u
UGFpbnRlciB7IGNvbnRleHQsIHRleHREZWNvcmF0aW9ucywgbV9yZW5kZXJlciwgbV90ZXh0Qm94
LmlzRmlyc3RMaW5lKCksIGZvbnQsIG1hcmtlZFRleHQuc3R5bGUudGV4dERlY29yYXRpb25TdHls
ZXMgfTsKLSAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRUZXh0UnVuSXRlcmF0b3IoTGF5b3V0SW50
ZWdyYXRpb246OnRleHRSdW5Gb3IoJm1fdGV4dEJveCkpOworICAgIFRleHREZWNvcmF0aW9uUGFp
bnRlciBkZWNvcmF0aW9uUGFpbnRlciB7IGNvbnRleHQsIHRleHREZWNvcmF0aW9ucywgbV9yZW5k
ZXJlciwgbV9pc0ZpcnN0TGluZSwgZm9udCwgbWFya2VkVGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlv
blN0eWxlcyB9OworICAgIGRlY29yYXRpb25QYWludGVyLnNldFRleHRSdW5JdGVyYXRvcihtX3Rl
eHRCb3gpOwogICAgIGRlY29yYXRpb25QYWludGVyLnNldFdpZHRoKHNuYXBwZWRTZWxlY3Rpb25S
ZWN0LndpZHRoKCkpOwotICAgIGRlY29yYXRpb25QYWludGVyLnNldElzSG9yaXpvbnRhbChtX3Rl
eHRCb3guaXNIb3Jpem9udGFsKCkpOworICAgIGRlY29yYXRpb25QYWludGVyLnNldElzSG9yaXpv
bnRhbChtX2lzSG9yaXpvbnRhbCk7CiAgICAgaWYgKG1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRv
dykgewogICAgICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRUZXh0U2hhZG93KCZtYXJrZWRUZXh0
LnN0eWxlLnRleHRTaGFkb3cudmFsdWUoKSk7Ci0gICAgICAgIGlmIChsaW5lU3R5bGUuaGFzQXBw
bGVDb2xvckZpbHRlcigpKQotICAgICAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0U2hhZG93
Q29sb3JGaWx0ZXIoJmxpbmVTdHlsZS5hcHBsZUNvbG9yRmlsdGVyKCkpOworICAgICAgICBpZiAo
bV9zdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCisgICAgICAgICAgICBkZWNvcmF0aW9uUGFp
bnRlci5zZXRTaGFkb3dDb2xvckZpbHRlcigmbV9zdHlsZS5hcHBsZUNvbG9yRmlsdGVyKCkpOwog
ICAgIH0KIAogICAgIHsKQEAgLTM3Niw3ICszODcsNyBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpw
YWludERlY29yYXRpb24oY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCwgY29uc3Qg
RgogICAgICAgICAgICAgaWYgKCFjbGlwT3V0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAg
ICAgY29udGV4dC5jbGlwT3V0KGNsaXBPdXRSZWN0KTsKICAgICAgICAgfQotICAgICAgICBkZWNv
cmF0aW9uUGFpbnRlci5wYWludFRleHREZWNvcmF0aW9uKHRleHRSdW4uc3ViUnVuKHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCksIG1fdGV4dEJveC50ZXh0T3JpZ2luRnJvbUJv
eFJlY3Qoc25hcHBlZFNlbGVjdGlvblJlY3QpLCBzbmFwcGVkU2VsZWN0aW9uUmVjdC5sb2NhdGlv
bigpKTsKKyAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIucGFpbnRUZXh0RGVjb3JhdGlvbihtX3Bh
aW50VGV4dFJ1bi5zdWJSdW4oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KSwg
dGV4dE9yaWdpbkZyb21QYWludFJlY3Qoc25hcHBlZFNlbGVjdGlvblJlY3QpLCBzbmFwcGVkU2Vs
ZWN0aW9uUmVjdC5sb2NhdGlvbigpKTsKICAgICB9CiAKICAgICBpZiAoaXNDb21iaW5lZFRleHQp
CkBAIC0zODYsMjAgKzM5NywyMCBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludERlY29yYXRp
b24oY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCwgY29uc3QgRgogdm9pZCBUZXh0
Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMoKQogewogICAgIGZvciAoYXV0
byYgdW5kZXJsaW5lIDogbV9yZW5kZXJlci5mcmFtZSgpLmVkaXRvcigpLmN1c3RvbUNvbXBvc2l0
aW9uVW5kZXJsaW5lcygpKSB7Ci0gICAgICAgIGlmICh1bmRlcmxpbmUuZW5kT2Zmc2V0IDw9IG1f
dGV4dEJveC5zdGFydCgpKSB7CisgICAgICAgIGlmICh1bmRlcmxpbmUuZW5kT2Zmc2V0IDw9IG1f
dGV4dEJveC0+c3RhcnQoKSkgewogICAgICAgICAgICAgLy8gVW5kZXJsaW5lIGlzIGNvbXBsZXRl
bHkgYmVmb3JlIHRoaXMgcnVuLiBUaGlzIG1pZ2h0IGJlIGFuIHVuZGVybGluZSB0aGF0IHNpdHMK
ICAgICAgICAgICAgIC8vIGJlZm9yZSB0aGUgZmlyc3QgcnVuIHdlIGRyYXcsIG9yIHVuZGVybGlu
ZXMgdGhhdCB3ZXJlIHdpdGhpbiBydW5zIHdlIHNraXBwZWQKICAgICAgICAgICAgIC8vIGR1ZSB0
byB0cnVuY2F0aW9uLgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAodW5kZXJsaW5lLnN0YXJ0T2Zmc2V0ID49IG1fdGV4dEJveC5lbmQoKSkKKyAgICAgICAg
aWYgKHVuZGVybGluZS5zdGFydE9mZnNldCA+PSBtX3RleHRCb3gtPmVuZCgpKQogICAgICAgICAg
ICAgYnJlYWs7IC8vIFVuZGVybGluZSBpcyBjb21wbGV0ZWx5IGFmdGVyIHRoaXMgcnVuLCBiYWls
LiBBIGxhdGVyIHJ1biB3aWxsIHBhaW50IGl0LgogCiAgICAgICAgIC8vIFVuZGVybGluZSBpbnRl
cnNlY3RzIHRoaXMgcnVuLiBQYWludCBpdC4KICAgICAgICAgcGFpbnRDb21wb3NpdGlvblVuZGVy
bGluZSh1bmRlcmxpbmUpOwogCi0gICAgICAgIGlmICh1bmRlcmxpbmUuZW5kT2Zmc2V0ID4gbV90
ZXh0Qm94LmVuZCgpKQorICAgICAgICBpZiAodW5kZXJsaW5lLmVuZE9mZnNldCA+IG1fdGV4dEJv
eC0+ZW5kKCkpCiAgICAgICAgICAgICBicmVhazsgLy8gVW5kZXJsaW5lIGFsc28gcnVucyBpbnRv
IHRoZSBuZXh0IHJ1bi4gQmFpbCBub3csIG5vIG1vcmUgbWFya2VyIGFkdmFuY2VtZW50LgogICAg
IH0KIH0KQEAgLTQxMSwzNyArNDIyLDQ2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtaXJyb3JSVExT
ZWdtZW50KGZsb2F0IGxvZ2ljYWxXaWR0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sCiAgICAg
c3RhcnQgPSBsb2dpY2FsV2lkdGggLSB3aWR0aCAtIHN0YXJ0OwogfQogCitzdGF0aWMgZmxvYXQg
dGV4dFBvc2l0aW9uKGNvbnN0IExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3ImIHRl
eHRCb3gpCit7CisgICAgLy8gV2hlbiBjb21wdXRpbmcgdGhlIHdpZHRoIG9mIGEgdGV4dCBydW4s
IFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZSgpIGRv
ZXNuJ3QgaW5jbHVkZSB0aGUgYWN0dWFsIG9mZnNldAorICAgIC8vIGZyb20gdGhlIGNvbnRhaW5p
bmcgYmxvY2sgZWRnZSBpbiBpdHMgbWVhc3VyZW1lbnQuIHRleHRQb3NpdGlvbigpIHNob3VsZCBi
ZSBjb25zaXN0ZW50IHNvIHRoZSB0ZXh0IGFyZSByZW5kZXJlZCBpbiB0aGUgc2FtZSB3aWR0aC4K
KyAgICBpZiAoIXRleHRCb3gtPmxvZ2ljYWxMZWZ0KCkpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiB0ZXh0Qm94LT5sb2dpY2FsTGVmdCgpIC0gdGV4dEJveC0+bGluZSgpLT5jb250ZW50
TG9naWNhbExlZnQoKTsKK30KKwogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlv
blVuZGVybGluZShjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQogewogICAg
IGZsb2F0IHN0YXJ0ID0gMDsgLy8gc3RhcnQgb2YgbGluZSB0byBkcmF3LCByZWxhdGl2ZSB0byB0
eAotICAgIGZsb2F0IHdpZHRoID0gbV90ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpOyAvLyBob3cgbXVj
aCBsaW5lIHRvIGRyYXcKKyAgICBmbG9hdCB3aWR0aCA9IG1fdGV4dEJveC0+bG9naWNhbFdpZHRo
KCk7IC8vIGhvdyBtdWNoIGxpbmUgdG8gZHJhdwogICAgIGJvb2wgdXNlV2hvbGVXaWR0aCA9IHRy
dWU7Ci0gICAgdW5zaWduZWQgcGFpbnRTdGFydCA9IG1fdGV4dEJveC5zdGFydCgpOwotICAgIHVu
c2lnbmVkIHBhaW50RW5kID0gbV90ZXh0Qm94LmVuZCgpOworICAgIHVuc2lnbmVkIHBhaW50U3Rh
cnQgPSBtX3RleHRCb3gtPnN0YXJ0KCk7CisgICAgdW5zaWduZWQgcGFpbnRFbmQgPSBtX3RleHRC
b3gtPmVuZCgpOwogICAgIGlmIChwYWludFN0YXJ0IDw9IHVuZGVybGluZS5zdGFydE9mZnNldCkg
ewogICAgICAgICBwYWludFN0YXJ0ID0gdW5kZXJsaW5lLnN0YXJ0T2Zmc2V0OwogICAgICAgICB1
c2VXaG9sZVdpZHRoID0gZmFsc2U7Ci0gICAgICAgIHN0YXJ0ID0gbV9yZW5kZXJlci53aWR0aCht
X3RleHRCb3guc3RhcnQoKSwgcGFpbnRTdGFydCAtIG1fdGV4dEJveC5zdGFydCgpLCBtX3RleHRC
b3gudGV4dFBvcygpLCBtX3RleHRCb3guaXNGaXJzdExpbmUoKSk7CisgICAgICAgIHN0YXJ0ID0g
bV9yZW5kZXJlci53aWR0aChtX3RleHRCb3gtPnN0YXJ0KCksIHBhaW50U3RhcnQgLSBtX3RleHRC
b3gtPnN0YXJ0KCksIHRleHRQb3NpdGlvbihtX3RleHRCb3gpLCBtX2lzRmlyc3RMaW5lKTsKICAg
ICB9CiAgICAgaWYgKHBhaW50RW5kICE9IHVuZGVybGluZS5lbmRPZmZzZXQpIHsKICAgICAgICAg
cGFpbnRFbmQgPSBzdGQ6Om1pbihwYWludEVuZCwgKHVuc2lnbmVkKXVuZGVybGluZS5lbmRPZmZz
ZXQpOwogICAgICAgICB1c2VXaG9sZVdpZHRoID0gZmFsc2U7CiAgICAgfQotICAgIGlmIChtX3Rl
eHRCb3gudHJ1bmNhdGlvbigpKSB7Ci0gICAgICAgIHBhaW50RW5kID0gc3RkOjptaW4ocGFpbnRF
bmQsIG1fdGV4dEJveC5zdGFydCgpICsgKm1fdGV4dEJveC50cnVuY2F0aW9uKCkpOworICAgIGlm
IChtX3NlbGVjdGFibGVSYW5nZS50cnVuY2F0aW9uKSB7CisgICAgICAgIHBhaW50RW5kID0gc3Rk
OjptaW4ocGFpbnRFbmQsIG1fdGV4dEJveC0+c3RhcnQoKSArICptX3NlbGVjdGFibGVSYW5nZS50
cnVuY2F0aW9uKTsKICAgICAgICAgdXNlV2hvbGVXaWR0aCA9IGZhbHNlOwogICAgIH0KICAgICBp
ZiAoIXVzZVdob2xlV2lkdGgpIHsKLSAgICAgICAgd2lkdGggPSBtX3JlbmRlcmVyLndpZHRoKHBh
aW50U3RhcnQsIHBhaW50RW5kIC0gcGFpbnRTdGFydCwgbV90ZXh0Qm94LnRleHRQb3MoKSArIHN0
YXJ0LCBtX3RleHRCb3guaXNGaXJzdExpbmUoKSk7Ci0gICAgICAgIG1pcnJvclJUTFNlZ21lbnQo
bV90ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpLCBtX3RleHRCb3guZGlyZWN0aW9uKCksIHN0YXJ0LCB3
aWR0aCk7CisgICAgICAgIHdpZHRoID0gbV9yZW5kZXJlci53aWR0aChwYWludFN0YXJ0LCBwYWlu
dEVuZCAtIHBhaW50U3RhcnQsIHRleHRQb3NpdGlvbihtX3RleHRCb3gpICsgc3RhcnQsIG1faXNG
aXJzdExpbmUpOworICAgICAgICBtaXJyb3JSVExTZWdtZW50KG1fdGV4dEJveC0+bG9naWNhbFdp
ZHRoKCksIG1fdGV4dEJveC0+ZGlyZWN0aW9uKCksIHN0YXJ0LCB3aWR0aCk7CiAgICAgfQogCiAg
ICAgLy8gVGhpY2sgbWFya2VkIHRleHQgdW5kZXJsaW5lcyBhcmUgMnB4IHRoaWNrIGFzIGxvbmcg
YXMgdGhlcmUgaXMgcm9vbSBmb3IgdGhlIDJweCBsaW5lIHVuZGVyIHRoZSBiYXNlbGluZS4KICAg
ICAvLyBBbGwgb3RoZXIgbWFya2VkIHRleHQgdW5kZXJsaW5lcyBhcmUgMXB4IHRoaWNrLgogICAg
IC8vIElmIHRoZXJlJ3Mgbm90IGVub3VnaCBzcGFjZSB0aGUgdW5kZXJsaW5lIHdpbGwgdG91Y2gg
b3Igb3ZlcmxhcCBjaGFyYWN0ZXJzLgogICAgIGludCBsaW5lVGhpY2tuZXNzID0gMTsKLSAgICBp
bnQgYmFzZWxpbmUgPSBtX3RleHRCb3gubGluZVN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQo
KTsKLSAgICBpZiAodW5kZXJsaW5lLnRoaWNrICYmIG1fdGV4dEJveC5sb2dpY2FsSGVpZ2h0KCkg
LSBiYXNlbGluZSA+PSAyKQorICAgIGludCBiYXNlbGluZSA9IG1fc3R5bGUuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKTsKKyAgICBpZiAodW5kZXJsaW5lLnRoaWNrICYmIG1fdGV4dEJveC0+bG9naWNh
bEhlaWdodCgpIC0gYmFzZWxpbmUgPj0gMikKICAgICAgICAgbGluZVRoaWNrbmVzcyA9IDI7CiAK
ICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgc29tZSBzcGFjZSBiZXR3ZWVuIHVuZGVybGluZXMgb2Yg
c3Vic2VxdWVudCBjbGF1c2VzLCBiZWNhdXNlIHNvbWUgaW5wdXQgbWV0aG9kcyBkbyBub3QgdXNl
IGRpZmZlcmVudCB1bmRlcmxpbmUgc3R5bGVzIGZvciB0aG9zZS4KQEAgLTQ1NSwxMiArNDc1LDEy
IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoY29uc3Qg
Q29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVyCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
ID0gbV9wYWludEluZm8uY29udGV4dCgpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IodW5k
ZXJsaW5lQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGxpbmVUaGlja25l
c3MpOwotICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UmVjdChtX3BhaW50UmVjdC54
KCkgKyBzdGFydCwgbV9wYWludFJlY3QueSgpICsgbV90ZXh0Qm94LmxvZ2ljYWxIZWlnaHQoKSAt
IGxpbmVUaGlja25lc3MsIHdpZHRoLCBsaW5lVGhpY2tuZXNzKSwgbV9kb2N1bWVudC5wcmludGlu
ZygpKTsKKyAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9hdFJlY3QobV9wYWludFJlY3Qu
eCgpICsgc3RhcnQsIG1fcGFpbnRSZWN0LnkoKSArIG1fdGV4dEJveC0+bG9naWNhbEhlaWdodCgp
IC0gbGluZVRoaWNrbmVzcywgd2lkdGgsIGxpbmVUaGlja25lc3MpLCBtX2RvY3VtZW50LnByaW50
aW5nKCkpOwogfQogCiB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRN
YXJrZXJzKCkKIHsKLSAgICBhdXRvIG1hcmtlZFRleHRzID0gTWFya2VkVGV4dDo6Y29sbGVjdEZv
ckRvY3VtZW50TWFya2VycyhtX3JlbmRlcmVyLCBtX3RleHRCb3guc2VsZWN0YWJsZVJhbmdlKCks
IE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29yYXRpb24pOworICAgIGF1dG8gbWFya2VkVGV4
dHMgPSBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKG1fcmVuZGVyZXIsIG1f
c2VsZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uKTsKICAg
ICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBNYXJrZWRUZXh0OjpzdWJkaXZpZGUobWFya2VkVGV4
dHMsIE1hcmtlZFRleHQ6Ok92ZXJsYXBTdHJhdGVneTo6RnJvbnRtb3N0KSkKICAgICAgICAgcGFp
bnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKG1hcmtlZFRleHQpOwogfQpAQCAtNDcxLDcgKzQ5MSw3
IEBAIEZsb2F0UmVjdCBUZXh0Qm94UGFpbnRlcjo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50
TWFya2VyQm91bmRzKGNvbnN0IExlZ2FjeUluCiAgICAgRmxvYXRSZWN0IHJlc3VsdDsKICAgICBh
dXRvIG1hcmtlZFRleHRzID0gTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2Vycyh0
ZXh0Qm94LnJlbmRlcmVyKCksIHRleHRCb3guc2VsZWN0YWJsZVJhbmdlKCksIE1hcmtlZFRleHQ6
OlBhaW50UGhhc2U6OkRlY29yYXRpb24pOwogICAgIGZvciAoYXV0byYgbWFya2VkVGV4dCA6IE1h
cmtlZFRleHQ6OnN1YmRpdmlkZShtYXJrZWRUZXh0cywgTWFya2VkVGV4dDo6T3ZlcmxhcFN0cmF0
ZWd5OjpGcm9udG1vc3QpKQotICAgICAgICByZXN1bHQgPSB1bmlvblJlY3QocmVzdWx0LCBjYWxj
dWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyh0ZXh0Qm94LCBtYXJrZWRUZXh0KSk7CisgICAgICAg
IHJlc3VsdCA9IHVuaW9uUmVjdChyZXN1bHQsIGNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRz
KExheW91dEludGVncmF0aW9uOjp0ZXh0UnVuRm9yKCZ0ZXh0Qm94KSwgbWFya2VkVGV4dCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUwOSwxMyArNTI5LDEyIEBAIHZvaWQgVGV4dEJv
eFBhaW50ZXI6OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcihjb25zdCBNYXJrZWRUZXh0JiBt
YXJrZWRUZXh0KQogICAgIG1fcGFpbnRJbmZvLmNvbnRleHQoKS5kcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGJvdW5kcywgbGluZVN0eWxlRm9yTWFya2VkVGV4dFR5cGUoKSk7CiB9CiAKLUZsb2F0
UmVjdCBUZXh0Qm94UGFpbnRlcjo6Y29tcHV0ZVBhaW50UmVjdChjb25zdCBMZWdhY3lJbmxpbmVU
ZXh0Qm94JiB0ZXh0Qm94LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCitGbG9hdFJl
Y3QgVGV4dEJveFBhaW50ZXI6OmNvbXB1dGVQYWludFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0KQogewogICAgIEZsb2F0UG9pbnQgbG9jYWxQYWludE9mZnNldChwYWludE9mZnNl
dCk7CiAKLSAgICBpZiAodGV4dEJveC50cnVuY2F0aW9uKCkpIHsKLSAgICAgICAgYXV0byYgcmVu
ZGVyZXIgPSB0ZXh0Qm94LnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmIChyZW5kZXJlci5jb250YWlu
aW5nQmxvY2soKS0+c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgIT0gdGV4dEJveC5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKKyAgICBpZiAobV9zZWxlY3RhYmxlUmFuZ2UudHJ1
bmNhdGlvbikgeworICAgICAgICBpZiAobV9yZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5
bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgIT0gbV90ZXh0Qm94LT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpIHsKICAgICAgICAgICAgIC8vIE1ha2UgdGhlIHZpc2libGUgZnJhZ21lbnQg
b2YgdGV4dCBodWcgdGhlIGVkZ2UgY2xvc2VzdCB0byB0aGUgcmVzdCBvZiB0aGUgcnVuIGJ5IG1v
dmluZyB0aGUgb3JpZ2luCiAgICAgICAgICAgICAvLyBhdCB3aGljaCB3ZSBzdGFydCBkcmF3aW5n
IHRleHQuCiAgICAgICAgICAgICAvLyBlLmcuIEluIHRoZSBjYXNlIG9mIExUUiB0ZXh0IHRydW5j
YXRlZCBpbiBhbiBSVEwgQ29udGV4dCwgdGhlIGNvcnJlY3QgYmVoYXZpb3IgaXM6CkBAIC01MjQs
MzcgKzU0Myw5OSBAQCBGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNvbXB1dGVQYWludFJlY3Qo
Y29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgYwogICAgICAgICAgICAgLy8gZmFy
dGhlciB0byB0aGUgcmlnaHQuCiAgICAgICAgICAgICAvLyBOT1RFOiBXZWJLaXQncyBiZWhhdmlv
ciBkaWZmZXJzIGZyb20gdGhhdCBvZiBJRSB3aGljaCBhcHBlYXJzIHRvIGp1c3Qgb3ZlcmxheSB0
aGUgZWxsaXBzaXMgb24gdG9wIG9mIHRoZQogICAgICAgICAgICAgLy8gdHJ1bmNhdGVkIHN0cmlu
ZyBpLmUuICB8SGVsbG98Q0JBfCAtPiB8Li4ubG98Q0JBfAotICAgICAgICAgICAgTGF5b3V0VW5p
dCB3aWR0aE9mVmlzaWJsZVRleHQgeyByZW5kZXJlci53aWR0aCh0ZXh0Qm94LnN0YXJ0KCksICp0
ZXh0Qm94LnRydW5jYXRpb24oKSwgdGV4dEJveC50ZXh0UG9zKCksIHRleHRCb3guaXNGaXJzdExp
bmUoKSkgfTsKLSAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGhPZkhpZGRlblRleHQgeyB0ZXh0
Qm94LmxvZ2ljYWxXaWR0aCgpIC0gd2lkdGhPZlZpc2libGVUZXh0IH07Ci0gICAgICAgICAgICBM
YXlvdXRTaXplIHRydW5jYXRpb25PZmZzZXQodGV4dEJveC5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyB3aWR0aE9mSGlkZGVuVGV4dCA6IC13aWR0aE9mSGlkZGVuVGV4dCwgMF9sdSk7Ci0gICAg
ICAgICAgICBsb2NhbFBhaW50T2Zmc2V0Lm1vdmUodGV4dEJveC5pc0hvcml6b250YWwoKSA/IHRy
dW5jYXRpb25PZmZzZXQgOiB0cnVuY2F0aW9uT2Zmc2V0LnRyYW5zcG9zZWRTaXplKCkpOworICAg
ICAgICAgICAgTGF5b3V0VW5pdCB3aWR0aE9mVmlzaWJsZVRleHQgeyBtX3JlbmRlcmVyLndpZHRo
KG1fdGV4dEJveC0+c3RhcnQoKSwgKm1fc2VsZWN0YWJsZVJhbmdlLnRydW5jYXRpb24sIHRleHRQ
b3NpdGlvbihtX3RleHRCb3gpLCBtX2lzRmlyc3RMaW5lKSB9OworICAgICAgICAgICAgTGF5b3V0
VW5pdCB3aWR0aE9mSGlkZGVuVGV4dCB7IG1fdGV4dEJveC0+bG9naWNhbFdpZHRoKCkgLSB3aWR0
aE9mVmlzaWJsZVRleHQgfTsKKyAgICAgICAgICAgIExheW91dFNpemUgdHJ1bmNhdGlvbk9mZnNl
dChtX3RleHRCb3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHdpZHRoT2ZIaWRkZW5UZXh0
IDogLXdpZHRoT2ZIaWRkZW5UZXh0LCAwX2x1KTsKKyAgICAgICAgICAgIGxvY2FsUGFpbnRPZmZz
ZXQubW92ZShtX2lzSG9yaXpvbnRhbCA/IHRydW5jYXRpb25PZmZzZXQgOiB0cnVuY2F0aW9uT2Zm
c2V0LnRyYW5zcG9zZWRTaXplKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbG9jYWxQYWlu
dE9mZnNldC5tb3ZlKDAsIHRleHRCb3gubGluZVN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IDAgOiAtdGV4dEJveC5sb2dpY2FsSGVpZ2h0KCkpOworICAgIGxvY2FsUGFpbnRPZmZz
ZXQubW92ZSgwLCBtX3N0eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyAwIDogLW1fdGV4
dEJveC0+bG9naWNhbEhlaWdodCgpKTsKIAotICAgIEZsb2F0UG9pbnQgYm94T3JpZ2luID0gdGV4
dEJveC5sb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7CisgICAgYXV0byBsb2NhdGlvbkluY2x1
ZGluZ0ZsaXBwaW5nID0gWyZdKCkgLT4gRmxvYXRQb2ludCB7CisgICAgICAgIGF1dG8gcmVjdCA9
IG1fdGV4dEJveC0+cmVjdCgpOworICAgICAgICBpZiAoIW1fc3R5bGUuaXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWN0LmxvY2F0aW9uKCk7CisgICAg
ICAgIGF1dG8mIGJsb2NrID0gbV90ZXh0Qm94LT5saW5lKCktPmNvbnRhaW5pbmdCbG9jaygpOwor
ICAgICAgICBpZiAoYmxvY2suc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHsgcmVjdC54KCksIGJsb2NrLmhlaWdodCgpIC0gcmVjdC5oZWlnaHQo
KSAtIHJlY3QueSgpIH07CisgICAgICAgIHJldHVybiB7IGJsb2NrLndpZHRoKCkgLSByZWN0Lndp
ZHRoKCkgLSByZWN0LngoKSwgcmVjdC55KCkgfTsKKyAgICB9OworCisgICAgRmxvYXRQb2ludCBi
b3hPcmlnaW4gPSBsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7CiAgICAgYm94T3JpZ2luLm1v
dmVCeShsb2NhbFBhaW50T2Zmc2V0KTsKLSAgICByZXR1cm4geyBib3hPcmlnaW4sIEZsb2F0U2l6
ZSh0ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpLCB0ZXh0Qm94LmxvZ2ljYWxIZWlnaHQoKSkgfTsKKyAg
ICByZXR1cm4geyBib3hPcmlnaW4sIEZsb2F0U2l6ZShtX3RleHRCb3gtPmxvZ2ljYWxXaWR0aCgp
LCBtX3RleHRCb3gtPmxvZ2ljYWxIZWlnaHQoKSkgfTsKIH0KIAotRmxvYXRSZWN0IFRleHRCb3hQ
YWludGVyOjpjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBMZWdhY3lJbmxpbmVU
ZXh0Qm94JiB0ZXh0Qm94LCBjb25zdCBNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQorc3RhdGljIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZUZvcihjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyU3R5bGUmIHRleHRCb3hTdHlsZSkKIHsKLSAgICBhdXRvJiBmb250ID0g
dGV4dEJveC5saW5lRm9udCgpOworICAgIGlmIChpczxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVy
ZXIpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVy
KS50ZXh0Q29tYmluZUZvbnQoKTsKKworICAgIHJldHVybiB0ZXh0Qm94U3R5bGUuZm9udENhc2Nh
ZGUoKTsKK30KKworRmxvYXRSZWN0IFRleHRCb3hQYWludGVyOjpjYWxjdWxhdGVEb2N1bWVudE1h
cmtlckJvdW5kcyhjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yJiB0ZXh0
Qm94LCBjb25zdCBNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQoreworICAgIGF1dG8mIGZvbnQgPSBm
b250Q2FzY2FkZUZvcih0ZXh0Qm94LT5yZW5kZXJlcigpLCB0ZXh0Qm94LT5zdHlsZSgpKTsKICAg
ICBhdXRvIGFzY2VudCA9IGZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKICAgICBhdXRvIGZv
bnRTaXplID0gc3RkOjptaW4oc3RkOjptYXgoZm9udC5zaXplKCksIDEwLjBmKSwgNDAuMGYpOwog
ICAgIGF1dG8geSA9IGFzY2VudCArIDAuMTEwMzUgKiBmb250U2l6ZTsKICAgICBhdXRvIGhlaWdo
dCA9IDAuMTMyNDcgKiBmb250U2l6ZTsKIAogICAgIC8vIEF2b2lkIG1lYXN1cmluZyB0aGUgdGV4
dCB3aGVuIHRoZSBlbnRpcmUgbGluZSBib3ggaXMgc2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0aW9u
LgotICAgIGlmIChtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0IHx8IG1hcmtlZFRleHQuZW5kT2Zmc2V0
ICE9IHRleHRCb3guc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAodGV4dEJveC5lbmQoKSkpIHsKLSAg
ICAgICAgVGV4dFJ1biBydW4gPSB0ZXh0Qm94LmNyZWF0ZVRleHRSdW4oKTsKKyAgICBpZiAobWFy
a2VkVGV4dC5zdGFydE9mZnNldCB8fCBtYXJrZWRUZXh0LmVuZE9mZnNldCAhPSB0ZXh0Qm94LT5z
ZWxlY3RhYmxlUmFuZ2UoKS5jbGFtcCh0ZXh0Qm94LT5lbmQoKSkpIHsKKyAgICAgICAgVGV4dFJ1
biBydW4gPSB0ZXh0Qm94LT5jcmVhdGVUZXh0UnVuKCk7CiAgICAgICAgIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdCA9IExheW91dFJlY3QoMCwgeSwgMCwgaGVpZ2h0KTsKLSAgICAgICAgdGV4dEJv
eC5saW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgc2VsZWN0aW9uUmVj
dCwgbWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQpOworICAgICAg
ICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgbWFy
a2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQpOwogICAgICAgICByZXR1
cm4gc2VsZWN0aW9uUmVjdDsKICAgICB9CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KDAsIHksIHRl
eHRCb3gubG9naWNhbFdpZHRoKCksIGhlaWdodCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgwLCB5
LCB0ZXh0Qm94LT5sb2dpY2FsV2lkdGgoKSwgaGVpZ2h0KTsKIH0KIAorYm9vbCBUZXh0Qm94UGFp
bnRlcjo6Y29tcHV0ZUhhdmVTZWxlY3Rpb24oKSBjb25zdAoreworICAgIGlmIChtX2lzUHJpbnRp
bmcgfHwgbV9wYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6VGV4dENsaXApCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX3JlbmRlcmVyLnZpZXcoKS5zZWxlY3Rpb24o
KS5oaWdobGlnaHRTdGF0ZUZvclRleHRCb3gobV9yZW5kZXJlciwgbV9zZWxlY3RhYmxlUmFuZ2Up
ICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmU7Cit9CisKK2NvbnN0IFJlbmRl
ckNvbWJpbmVUZXh0KiBUZXh0Qm94UGFpbnRlcjo6Y29tYmluZWRUZXh0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaXM8UmVuZGVyQ29tYmluZVRleHQ+KG1fcmVuZGVyZXIpID8gJmRvd25jYXN0PFJl
bmRlckNvbWJpbmVUZXh0PihtX3JlbmRlcmVyKSA6IG51bGxwdHI7Cit9CisKK2NvbnN0IEZvbnRD
YXNjYWRlJiBUZXh0Qm94UGFpbnRlcjo6Zm9udENhc2NhZGUoKSBjb25zdAoreworICAgIHJldHVy
biBmb250Q2FzY2FkZUZvcihtX3JlbmRlcmVyLCBtX3N0eWxlKTsKK30KKworRmxvYXRQb2ludCBU
ZXh0Qm94UGFpbnRlcjo6dGV4dE9yaWdpbkZyb21QYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiBw
YWludFJlY3QpIGNvbnN0Cit7CisgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luIHsgcGFpbnRSZWN0
LngoKSwgcGFpbnRSZWN0LnkoKSArIGZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQo
KSB9OworICAgIGlmIChhdXRvKiBjb21iaW5lZFRleHQgPSB0aGlzLT5jb21iaW5lZFRleHQoKSkg
eworICAgICAgICBpZiAoYXV0byBuZXdPcmlnaW4gPSBjb21iaW5lZFRleHQtPmNvbXB1dGVUZXh0
T3JpZ2luKHBhaW50UmVjdCkpCisgICAgICAgICAgICB0ZXh0T3JpZ2luID0gbmV3T3JpZ2luLnZh
bHVlKCk7CisgICAgfQorICAgIGlmIChtX2lzSG9yaXpvbnRhbCkKKyAgICAgICAgdGV4dE9yaWdp
bi5zZXRZKHJvdW5kVG9EZXZpY2VQaXhlbChMYXlvdXRVbml0IHsgdGV4dE9yaWdpbi55KCkgfSwg
bV9yZW5kZXJlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICBlbHNlCisg
ICAgICAgIHRleHRPcmlnaW4uc2V0WChyb3VuZFRvRGV2aWNlUGl4ZWwoTGF5b3V0VW5pdCB7IHRl
eHRPcmlnaW4ueCgpIH0sIG1fcmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rvcigp
KSk7CisgICAgcmV0dXJuIHRleHRPcmlnaW47Cit9CisKK2NvbnN0IFNoYWRvd0RhdGEqIFRleHRC
b3hQYWludGVyOjpkZWJ1Z1RleHRTaGFkb3coKSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJl
ci5zZXR0aW5ncygpLmxlZ2FjeUxpbmVMYXlvdXRWaXN1YWxDb3ZlcmFnZUVuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFtX3RleHRCb3gtPmxlZ2FjeUlubGluZUJv
eCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTaGFkb3dEYXRhPiBkZWJ1Z1RleHRTaGFkb3coSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hh
ZG93U3R5bGU6Ok5vcm1hbCwgdHJ1ZSwgU1JHQkE8dWludDhfdD4geyAxNTAsIDAsIDAsIDE5MCB9
KTsKKyAgICByZXR1cm4gJmRlYnVnVGV4dFNoYWRvdy5nZXQoKTsKK30KKworCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oCmluZGV4IDE2YzljZTIzNjA5ZDIwNjJk
MWYxY2NmMzVjMDk2NTNjZGQ0NmRiYmUuLmMyMGMyZGM3NjEyMmQyMzA1YTYzMTZiMmM3NTUyMGU2
OGQzMzJlZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFp
bnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oCkBA
IC0yNSwxMyArMjUsMjAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgorI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlRleHRCb3hTZWxlY3RhYmxlUmFuZ2UuaCIKKyNpbmNs
dWRlICJUZXh0UnVuLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7CiBj
bGFzcyBEb2N1bWVudDsKIGNsYXNzIExlZ2FjeUlubGluZVRleHRCb3g7CitjbGFzcyBSZW5kZXJD
b21iaW5lVGV4dDsKK2NsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyVGV4dDsKK2NsYXNz
IFNoYWRvd0RhdGE7CiBzdHJ1Y3QgQ29tcG9zaXRpb25VbmRlcmxpbmU7CiBzdHJ1Y3QgTWFya2Vk
VGV4dDsKIHN0cnVjdCBQYWludEluZm87CkBAIC00MCw2ICs0Nyw3IEBAIHN0cnVjdCBTdHlsZWRN
YXJrZWRUZXh0OwogY2xhc3MgVGV4dEJveFBhaW50ZXIgewogcHVibGljOgogICAgIFRleHRCb3hQ
YWludGVyKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmLCBQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQpOworICAgIFRleHRCb3hQYWludGVyKGNvbnN0IExheW91dElu
dGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiwgY29uc3QgTGF5b3V0OjpSdW4mLCBQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwogICAgIH5UZXh0Qm94UGFpbnRlcigp
OwogCiAgICAgdm9pZCBwYWludCgpOwpAQCAtNDcsNiArNTUsOCBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIEZsb2F0UmVjdCBjYWxjdWxhdGVVbmlvbk9mQWxsRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29u
c3QgTGVnYWN5SW5saW5lVGV4dEJveCYpOwogCiBwcml2YXRlOgorICAgIFRleHRCb3hQYWludGVy
KGNvbnN0IExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3ImLCBQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOworCiAgICAgdm9pZCBwYWludEJhY2tncm91
bmQoKTsKICAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKCk7CiAgICAgdm9p
ZCBwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgpOwpAQCAtNjEsMTggKzcxLDMyIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKGNvbnN0IENvbXBvc2l0aW9u
VW5kZXJsaW5lJik7CiAgICAgdm9pZCBwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoY29uc3Qg
TWFya2VkVGV4dCYpOwogCi0gICAgc3RhdGljIEZsb2F0UmVjdCBjb21wdXRlUGFpbnRSZWN0KGNv
bnN0IExlZ2FjeUlubGluZVRleHRCb3gmLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
OwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29u
c3QgTGVnYWN5SW5saW5lVGV4dEJveCYsIGNvbnN0IE1hcmtlZFRleHQmKTsKKyAgICBzdGF0aWMg
RmxvYXRSZWN0IGNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExheW91dEludGVn
cmF0aW9uOjpUZXh0UnVuSXRlcmF0b3ImLCBjb25zdCBNYXJrZWRUZXh0Jik7CisKKyAgICBGbG9h
dFJlY3QgY29tcHV0ZVBhaW50UmVjdChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwor
ICAgIGJvb2wgY29tcHV0ZUhhdmVTZWxlY3Rpb24oKSBjb25zdDsKKyAgICBNYXJrZWRUZXh0IGNy
ZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3goKTsKKyAgICBjb25zdCBSZW5kZXJDb21i
aW5lVGV4dCogY29tYmluZWRUZXh0KCkgY29uc3Q7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZv
bnRDYXNjYWRlKCkgY29uc3Q7CisgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luRnJvbVBhaW50UmVj
dChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKworICAgIGNvbnN0IFNoYWRvd0RhdGEqIGRlYnVn
VGV4dFNoYWRvdygpIGNvbnN0OwogCi0gICAgY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYgbV90
ZXh0Qm94OworICAgIGNvbnN0IExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3IgbV90
ZXh0Qm94OwogICAgIGNvbnN0IFJlbmRlclRleHQmIG1fcmVuZGVyZXI7CiAgICAgY29uc3QgRG9j
dW1lbnQmIG1fZG9jdW1lbnQ7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fc3R5bGU7CisgICAg
Y29uc3QgVGV4dFJ1biBtX3BhaW50VGV4dFJ1bjsKICAgICBQYWludEluZm8mIG1fcGFpbnRJbmZv
OworICAgIGNvbnN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UgbV9zZWxlY3RhYmxlUmFuZ2U7CiAg
ICAgY29uc3QgRmxvYXRSZWN0IG1fcGFpbnRSZWN0OworICAgIGNvbnN0IGJvb2wgbV9pc0ZpcnN0
TGluZTsKKyAgICBjb25zdCBib29sIG1faXNIb3Jpem9udGFsOwogICAgIGNvbnN0IGJvb2wgbV9p
c1ByaW50aW5nOwogICAgIGNvbnN0IGJvb2wgbV9oYXZlU2VsZWN0aW9uOwogICAgIGNvbnN0IGJv
b2wgbV9jb250YWluc0NvbXBvc2l0aW9uOwogICAgIGNvbnN0IGJvb2wgbV91c2VDdXN0b21VbmRl
cmxpbmVzOworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbV9lbXBoYXNpc01hcmtFeGlzdHNBbmRJ
c0Fib3ZlIHsgfTsKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438584</attachid>
            <date>2021-09-19 01:26:22 -0700</date>
            <delta_ts>2021-09-19 02:48:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230455-20210919112619.patch</filename>
            <type>text/plain</type>
            <size>49270</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyNzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGM4MGU5ZGIzMDE4N2Zj
NDAwMjlhYWM3ZmU0NTg1MGVkOTQ0OTgyNS4uYWVmNDIzZTg0MjM2Nzg3NzhkNmE1MjlkYmFmMzFh
OTIyNTI0MjhiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDIxLTA5LTE5ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlv
bl0gUGFpbnQgTEZDIHRleHQgcnVucyB3aXRoIFRleHRCb3hQYWludGVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA0NTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgZ2l2ZSBMRkMgcGF0
aCBhbGwgdGhlIHNhbWUgcGFpbnRpbmcgZmVhdHVyZXMgKGluY2x1ZGluZyBzZWxlY3Rpb25zLCBt
YXJrZXJzIGV0YykgdGhhdAorICAgICAgICB0aGUgbGVnYWN5IHBhdGggaGFzLiBUaGlzIHBhdGNo
IGRvZXMgbm90IGVuYWJsZSBhbnkgbmV3IGZlYXR1cmVzIHlldC4KKworICAgICAgICAqIGxheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OnBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpwYWludFRleHRSdW5Vc2lu
Z1BoeXNpY2FsQ29vcmRpbmF0ZXMpOgorCisgICAgICAgIFVzZSBUZXh0Qm94UGFpbnRlci4KKwor
ICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94Ojp0ZXh0T3JpZ2luRnJvbUJveFJlY3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6ZGVi
dWdUZXh0U2hhZG93IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5
SW5saW5lVGV4dEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIpOgorCisg
ICAgICAgIFRleHRCb3hQYWludGVyIG5vdyB1c2VzIHRoZSBpbmxpbmUgaXRlcmF0b3IgaW5zdGVh
ZCBvZiBkaXJlY3RseSBhY2Nlc3NpbmcgTGVnYWN5SW5saW5lVGV4dEJveC4KKworICAgICAgICAo
V2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRC
b3hQYWludGVyOjpjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uQmFja2dyb3Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludERlY29yYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2Vycyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50
TWFya2VyQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjb21wdXRl
UGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRDYXNjYWRlRm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6Y29tcHV0ZUhhdmVTZWxlY3Rpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OmNvbWJpbmVkVGV4dCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6Zm9udENhc2NhZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnRleHRPcmlnaW5Gcm9tUGFp
bnRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpkZWJ1Z1Rl
eHRTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFya2VkVGV4dEZyb21T
ZWxlY3Rpb25JbkJveCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWlu
dGVyLmg6CisKIDIwMjEtMDktMTcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgTW92ZSBzY3JvbGxiYXItcmVsYXRlZCBjb2RlIG91dCBvZiBTY3JvbGxB
bmltYXRvciBhbmQgaW50byBTY3JvbGxiYXJzQ29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25M
aW5lTGF5b3V0LmNwcAppbmRleCBkMjJmNzA3NTY3ZWE1YmI1MWMzMDM5MGIyNzVhMGQ1MmM5NGZk
ZmI0Li4wNjIyYmZiOTUxY2JjNDFiYjZkOWZlMDg5NDY4ZjM3MTFjZTU2ZWRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5l
TGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcApAQCAtNTMsOCArNTMsOCBAQAogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJUZXh0Qm94UGFpbnRlci5oIgogI2luY2x1ZGUgIlRl
eHREZWNvcmF0aW9uUGFpbnRlci5oIgotI2luY2x1ZGUgIlRleHRQYWludGVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7CkBAIC01MDEsOSAr
NTAxLDExIEBAIHZvaWQgTGluZUxheW91dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICBmb3IgKGF1dG8mIHJ1biA6IG1faW5s
aW5lQ29udGVudC0+cnVuc0ZvclJlY3QocGFpbnRSZWN0KSkgewogICAgICAgICBpZiAocnVuLmlz
SW5saW5lQm94KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJ1bi50ZXh0
KCkpCi0gICAgICAgICAgICBwYWludFRleHRSdW5Vc2luZ1BoeXNpY2FsQ29vcmRpbmF0ZXMocGFp
bnRJbmZvLCBwYWludE9mZnNldCwgbV9pbmxpbmVDb250ZW50LT5saW5lRm9yUnVuKHJ1biksIHJ1
bik7Ci0gICAgICAgIGVsc2UgaWYgKGF1dG8mIHJlbmRlcmVyID0gbV9ib3hUcmVlLnJlbmRlcmVy
Rm9yTGF5b3V0Qm94KHJ1bi5sYXlvdXRCb3goKSk7IGlzPFJlbmRlckJveD4ocmVuZGVyZXIpICYm
IHJlbmRlcmVyLmlzUmVwbGFjZWQoKSkgeworICAgICAgICBpZiAocnVuLnRleHQoKSkgeworICAg
ICAgICAgICAgcGFpbnRUZXh0UnVuVXNpbmdQaHlzaWNhbENvb3JkaW5hdGVzKHBhaW50SW5mbywg
cGFpbnRPZmZzZXQsIHJ1bik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoYXV0byYgcmVuZGVyZXIgPSBtX2JveFRyZWUucmVuZGVyZXJGb3JMYXlvdXRCb3go
cnVuLmxheW91dEJveCgpKTsgaXM8UmVuZGVyQm94PihyZW5kZXJlcikgJiYgcmVuZGVyZXIuaXNS
ZXBsYWNlZCgpKSB7CiAgICAgICAgICAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKTsKICAgICAgICAgICAgIGlmICghcmVuZGVyQm94Lmhhc1NlbGZQYWlu
dGluZ0xheWVyKCkgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChyZW5kZXJCb3gp
KQogICAgICAgICAgICAgICAgIHJlbmRlckJveC5wYWludEFzSW5saW5lQmxvY2socGFpbnRJbmZv
LCBwYWludE9mZnNldCk7CkBAIC01NzAsNyArNTcyLDcgQEAgdm9pZCBMaW5lTGF5b3V0OjpyZWxl
YXNlQ2FjaGVzKCkKICAgICAgICAgbV9pbmxpbmVDb250ZW50LT5yZWxlYXNlQ2FjaGVzKCk7CiB9
CiAKLXZvaWQgTGluZUxheW91dDo6cGFpbnRUZXh0UnVuVXNpbmdQaHlzaWNhbENvb3JkaW5hdGVz
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNv
bnN0IExpbmUmIGxpbmUsIGNvbnN0IExheW91dDo6UnVuJiBydW4pCit2b2lkIExpbmVMYXlvdXQ6
OnBhaW50VGV4dFJ1blVzaW5nUGh5c2ljYWxDb29yZGluYXRlcyhQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXQ6OlJ1biYgcnVu
KQogewogICAgIGF1dG8mIHN0eWxlID0gcnVuLnN0eWxlKCk7CiAgICAgaWYgKHJ1bi5zdHlsZSgp
LnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlKQpAQCAtNjA0LDQ5ICs2MDYsOCBA
QCB2b2lkIExpbmVMYXlvdXQ6OnBhaW50VGV4dFJ1blVzaW5nUGh5c2ljYWxDb29yZGluYXRlcyhQ
YWludEluZm8mIHBhaW50SW5mbywgY29ucwogICAgIGlmIChkYW1hZ2VkUmVjdC55KCkgPiB2aXN1
YWxPdmVyZmxvd1JlY3QubWF4WSgpIHx8IGRhbWFnZWRSZWN0Lm1heFkoKSA8IHZpc3VhbE92ZXJm
bG93UmVjdC55KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwYWludEluZm8uZXZlbnRS
ZWdpb25Db250ZXh0KSB7Ci0gICAgICAgIGlmIChzdHlsZS5wb2ludGVyRXZlbnRzKCkgIT0gUG9p
bnRlckV2ZW50czo6Tm9uZSkgewotICAgICAgICAgICAgdmlzdWFsT3ZlcmZsb3dSZWN0Lm1vdmVC
eShwaHlzaWNhbFBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAgIHBhaW50SW5mby5ldmVudFJlZ2lv
bkNvbnRleHQtPnVuaXRlKGVuY2xvc2luZ0ludFJlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KSwgc3R5
bGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiBwYWlu
dENvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGF1dG8gZXhwYW5zaW9uID0gcnVu
LmV4cGFuc2lvbigpOwotICAgIC8vIFRleHRSdW4gZXhwZWN0cyB0aGUgeFBvcyB0byBiZSBhZGp1
c3RlZCB3aXRoIHRoZSBhbGlnbWVudCBvZmZzZXQgKGUuZy4gd2hlbiB0aGUgbGluZSBpcyBjZW50
ZXIgYWxpZ25lZAotICAgIC8vIGFuZCB0aGUgcnVuIHN0YXJ0cyBhdCAxMDBweCwgZHVlIHRvIHRo
ZSBob3Jpem9udGFsIGFsaWdtZW50LCB0aGUgeHBvcyBpcyBzdXBwb3NlZCB0byBiZSBhdCAwcHgp
LgotICAgIGF1dG8mIGZvbnRDYXNjYWRlID0gc3R5bGUuZm9udENhc2NhZGUoKTsKLSAgICBhdXRv
IHhQb3MgPSBydW4ubG9naWNhbFJlY3QoKS5sZWZ0KCkgLSAobGluZS5saW5lQm94TGVmdCgpICsg
bGluZS5jb250ZW50TGVmdCgpKTsKLSAgICBhdXRvIHRleHRSdW4gPSBXZWJDb3JlOjpUZXh0UnVu
IHsgdGV4dENvbnRlbnQucmVuZGVyZWRDb250ZW50KCksIHhQb3MsIGV4cGFuc2lvbi5ob3Jpem9u
dGFsRXhwYW5zaW9uLCBleHBhbnNpb24uYmVoYXZpb3IgfTsKLSAgICB0ZXh0UnVuLnNldFRhYlNp
emUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50YWJTaXplKCkpOwotCi0gICAg
YXV0byB0ZXh0UGFpbnRlciA9IFRleHRQYWludGVyIHsgcGFpbnRDb250ZXh0IH07Ci0gICAgdGV4
dFBhaW50ZXIuc2V0Rm9udChmb250Q2FzY2FkZSk7Ci0gICAgdGV4dFBhaW50ZXIuc2V0U3R5bGUo
Y29tcHV0ZVRleHRQYWludFN0eWxlKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5mcmFtZSgpLCBzdHls
ZSwgcGFpbnRJbmZvKSk7Ci0gICAgdGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVl
ZGVkKHJ1biwgcGFpbnRJbmZvLCBmb250Q2FzY2FkZSwgcGFpbnRDb250ZXh0LCB0ZXh0UnVuKTsK
LQotICAgIC8vIFBhaW50aW5nIHVzZXMgb25seSBwaHlzaWNhbCBjb29yZGluYXRlcy4KLSAgICB7
Ci0gICAgICAgIGF1dG8gcnVuUmVjdCA9IHBoeXNpY2FsUmVjdChydW4ubG9naWNhbFJlY3QoKSk7
Ci0gICAgICAgIGF1dG8gYm94UmVjdCA9IEZsb2F0UmVjdCB7IEZsb2F0UG9pbnQgeyBwaHlzaWNh
bFBhaW50T2Zmc2V0LngoKSArIHJ1blJlY3QueCgpLCBwaHlzaWNhbFBhaW50T2Zmc2V0LnkoKSAr
IHJ1blJlY3QueSgpIH0sIHJ1blJlY3Quc2l6ZSgpIH07Ci0gICAgICAgIGF1dG8gdGV4dE9yaWdp
biA9IEZsb2F0UG9pbnQgeyBib3hSZWN0LngoKSwgcm91bmRUb0RldmljZVBpeGVsKGJveFJlY3Qu
eSgpICsgZm9udENhc2NhZGUuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSwgZm9ybWF0dGluZ0NvbnRl
eHRSb290LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkgfTsKLQotICAgICAgICBhdXRv
IHNob3VsZFJvdGF0ZSA9ICFibG9ja0lzSG9yaXpvbnRhbFdyaXRpbmc7Ci0gICAgICAgIGlmIChz
aG91bGRSb3RhdGUpCi0gICAgICAgICAgICBwYWludENvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9u
KGJveFJlY3QsIENsb2Nrd2lzZSkpOwotICAgICAgICB0ZXh0UGFpbnRlci5wYWludCh0ZXh0UnVu
LCBydW5SZWN0LCB0ZXh0T3JpZ2luKTsKLQotICAgICAgICBpZiAoIXN0eWxlLnRleHREZWNvcmF0
aW9uc0luRWZmZWN0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhdXRvJiB0ZXh0UmVuZGVy
ZXIgPSBkb3duY2FzdDxSZW5kZXJUZXh0PihtX2JveFRyZWUucmVuZGVyZXJGb3JMYXlvdXRCb3go
cnVuLmxheW91dEJveCgpKSk7Ci0gICAgICAgICAgICBhdXRvIGRlY29yYXRpb25QYWludGVyID0g
VGV4dERlY29yYXRpb25QYWludGVyIHsgcGFpbnRDb250ZXh0LCBzdHlsZS50ZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCgpLCB0ZXh0UmVuZGVyZXIsIGZhbHNlLCBmb250Q2FzY2FkZSB9OwotICAgICAg
ICAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFJ1bkl0ZXJhdG9yKHRleHRSdW5Gb3IoKm1f
aW5saW5lQ29udGVudCwgcnVuKSk7Ci0gICAgICAgICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRX
aWR0aChydW5SZWN0LndpZHRoKCkpOwotICAgICAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIucGFp
bnRUZXh0RGVjb3JhdGlvbih0ZXh0UnVuLCB0ZXh0T3JpZ2luLCBydW5SZWN0LmxvY2F0aW9uKCkg
KyBwaHlzaWNhbFBhaW50T2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2hvdWxkUm90
YXRlKQotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5jb25jYXRDVE0ocm90YXRpb24o
Ym94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwotICAgIH0KKyAgICBUZXh0Qm94UGFpbnRlciBw
YWludGVyKCptX2lubGluZUNvbnRlbnQsIHJ1biwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7Cisg
ICAgcGFpbnRlci5wYWludCgpOwogfQogCiBMYXlvdXQ6OklubGluZURhbWFnZSYgTGluZUxheW91
dDo6ZW5zdXJlTGluZURhbWFnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKaW5kZXgg
NWU4OTc0MzZlMDI2YzA1MWI3YzZmOGYyODdkYzZjOTlmMWZmMjVhNi4uZTY1NjU1NWYxNjcyMzQx
ODFmNGI4NThjZWY3MDhiNWZiMWY0MTZjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQu
aApAQCAtMTIzLDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgSW5saW5lQ29udGVudCYgZW5zdXJl
SW5saW5lQ29udGVudCgpOwogICAgIHZvaWQgdXBkYXRlTGF5b3V0Qm94RGltZW5zaW9ucyhjb25z
dCBSZW5kZXJCb3gmKTsKIAotICAgIHZvaWQgcGFpbnRUZXh0UnVuVXNpbmdQaHlzaWNhbENvb3Jk
aW5hdGVzKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3Qg
TGluZSYsIGNvbnN0IExheW91dDo6UnVuJik7CisgICAgdm9pZCBwYWludFRleHRSdW5Vc2luZ1Bo
eXNpY2FsQ29vcmRpbmF0ZXMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LCBjb25zdCBMYXlvdXQ6OlJ1biYpOwogCiAgICAgTGF5b3V0OjpJbmxpbmVEYW1hZ2UmIGVu
c3VyZUxpbmVEYW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xlZ2FjeUlubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2Fj
eUlubGluZUZsb3dCb3guY3BwCmluZGV4IGViZjI2MDdiN2FmOWIzZTQ2NzE1YjZlZmJhMGJlZDEx
MjkyNzg3OTMuLjAyNzNlZWVmNTNiMTczYmYwZjcwOGE5NGRiZGM5ODMwZGZhNTIzMjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHAKQEAg
LTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJMYXlv
dXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGVnYWN5RWxsaXBzaXNCb3gu
aCIKICNpbmNsdWRlICJMZWdhY3lJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTGVnYWN5Um9v
dElubGluZUJveC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2Fj
eUlubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGlu
ZVRleHRCb3guY3BwCmluZGV4IDFmZDFiM2ZmMGNlNjk1ZmNjYmRkOWYwYTk5YzVkMjNjYzEzYzNh
MDcuLmE3MjM0YmU0ZWJhZWFhNTA5MjliZmYwMmIwZGNjMWU0ZWE1NTFmMTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKQEAgLTQzMywy
MCArNDMzLDYgQEAgYm9vbCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpoYXNNYXJrZXJzKCkgY29uc3QK
ICAgICByZXR1cm4gTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2VycyhyZW5kZXJl
cigpLCBzZWxlY3RhYmxlUmFuZ2UoKSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6RGVjb3JhdGlv
bikuc2l6ZSgpOwogfQogCi1GbG9hdFBvaW50IExlZ2FjeUlubGluZVRleHRCb3g6OnRleHRPcmln
aW5Gcm9tQm94UmVjdChjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpIGNvbnN0Ci17Ci0gICAgRmxv
YXRQb2ludCB0ZXh0T3JpZ2luIHsgYm94UmVjdC54KCksIGJveFJlY3QueSgpICsgbGluZUZvbnQo
KS5mb250TWV0cmljcygpLmFzY2VudCgpIH07Ci0gICAgaWYgKGF1dG8qIGNvbWJpbmVkVGV4dCA9
IHRoaXMtPmNvbWJpbmVkVGV4dCgpKSB7Ci0gICAgICAgIGlmIChhdXRvIG5ld09yaWdpbiA9IGNv
bWJpbmVkVGV4dC0+Y29tcHV0ZVRleHRPcmlnaW4oYm94UmVjdCkpCi0gICAgICAgICAgICB0ZXh0
T3JpZ2luID0gbmV3T3JpZ2luLnZhbHVlKCk7Ci0gICAgfQotICAgIGlmIChpc0hvcml6b250YWwo
KSkKLSAgICAgICAgdGV4dE9yaWdpbi5zZXRZKHJvdW5kVG9EZXZpY2VQaXhlbChMYXlvdXRVbml0
IHsgdGV4dE9yaWdpbi55KCkgfSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIHRleHRPcmlnaW4uc2V0WChyb3VuZFRvRGV2aWNl
UGl4ZWwoTGF5b3V0VW5pdCB7IHRleHRPcmlnaW4ueCgpIH0sIHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7Ci0gICAgcmV0dXJuIHRleHRPcmlnaW47Ci19Ci0KIGlu
dCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpjYXJldE1pbk9mZnNldCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fc3RhcnQ7CkBAIC01NDAsMTUgKzUyNiw2IEBAIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0
KiBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpjb21iaW5lZFRleHQoKSBjb25zdAogICAgIHJldHVybiBs
aW5lU3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0PihyZW5k
ZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkuaXNDb21i
aW5lZCgpID8gJmRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKSA6IG51bGxw
dHI7CiB9CiAKLWNvbnN0IFNoYWRvd0RhdGEqIExlZ2FjeUlubGluZVRleHRCb3g6OmRlYnVnVGV4
dFNoYWRvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdzKCkubGVnYWN5
TGluZUxheW91dFZpc3VhbENvdmVyYWdlRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWJ1Z1RleHRTaGFk
b3coSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwgdHJ1ZSwgU1JH
QkE8dWludDhfdD4geyAxNTAsIDAsIDAsIDE5MCB9KTsKLSAgICByZXR1cm4gJmRlYnVnVGV4dFNo
YWRvdy5nZXQoKTsKLX0KLQogRXhwYW5zaW9uQmVoYXZpb3IgTGVnYWN5SW5saW5lVGV4dEJveDo6
ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAogewogICAgIEV4cGFuc2lvbkJlaGF2aW9yIGxlZnRC
ZWhhdmlvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxp
bmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJv
eC5oCmluZGV4IDRjNmEyMjg1YWYyYWQ3NTAyMTRhODc2NDVkZDFkY2U0MDYxMTE1ZGMuLmZiMjIy
ZmQ0ZWZhZjUzYjY4NTBlNjk0NjMwNzQyODBkMjJmY2I5NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaApAQCAtMTU3LDEzICsxNTcsOSBAQCBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3JM
ZWdhY3lQYXRoOwogICAgIGZyaWVuZCBjbGFzcyBUZXh0Qm94UGFpbnRlcjsKIAotICAgIEZsb2F0
UG9pbnQgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwotCiAg
ICAgY29uc3QgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCgpIGNvbnN0OwogICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBsaW5lRm9udCgpIGNvbnN0OwogCi0gICAgY29uc3QgU2hhZG93RGF0
YSogZGVidWdUZXh0U2hhZG93KCkgY29uc3Q7Ci0KICAgICBTdHJpbmcgdGV4dChib29sIGlnbm9y
ZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhlbiA9IGZhbHNlKSBjb25zdDsg
Ly8gVGhlIGVmZmVjdGl2ZSB0ZXh0IGZvciB0aGUgcnVuLgogICAgIFRleHRSdW4gY3JlYXRlVGV4
dFJ1bihib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhlbiA9
IGZhbHNlKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRCb3hQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRl
ci5jcHAKaW5kZXggMGQyMWU3MTczNTUwNTNmMTFjM2QyYWQ0MWM1NDEwNTg4MDVkZDU5MC4uMTE5
ZDY1NzhlYjkwMTM4MjNhZjdmMDg3OTk1NDAxMGIzYTgwYWM1NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCkBAIC0yOSwxMCArMjksMTQgQEAKICNpbmNs
dWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFdmVudFJlZ2lvbi5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgi
CisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgogI2luY2x1ZGUgIkxl
Z2FjeUlubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJS
ZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlckNvbWJpbmVUZXh0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlNoYWRvd0RhdGEuaCIKICNpbmNsdWRlICJTdHlsZWRN
YXJrZWRUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKICNpbmNsdWRlICJUZXh0
UGFpbnRlci5oIgpAQCAtNDAsMTMgKzQ0LDI5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRl
eHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0
ZXh0Qm94LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0KQorICAgIDogVGV4dEJveFBhaW50ZXIoTGF5b3V0SW50ZWdyYXRpb246OnRleHRSdW5Gb3Io
JnRleHRCb3gpLCBwYWludEluZm8sIHBhaW50T2Zmc2V0KQoreworICAgIG1fZW1waGFzaXNNYXJr
RXhpc3RzQW5kSXNBYm92ZSA9IHRleHRCb3guZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZSht
X3N0eWxlKTsKK30KKworVGV4dEJveFBhaW50ZXI6OlRleHRCb3hQYWludGVyKGNvbnN0IExheW91
dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50LCBjb25zdCBMYXlvdXQ6
OlJ1biYgcnVuLCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0KQorICAgIDogVGV4dEJveFBhaW50ZXIoTGF5b3V0SW50ZWdyYXRpb246OnRleHRSdW5G
b3IoaW5saW5lQ29udGVudCwgcnVuKSwgcGFpbnRJbmZvLCBwYWludE9mZnNldCkKK3sKK30KKwor
VGV4dEJveFBhaW50ZXI6OlRleHRCb3hQYWludGVyKGNvbnN0IExheW91dEludGVncmF0aW9uOjpU
ZXh0UnVuSXRlcmF0b3ImIHRleHRCb3gsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgOiBtX3RleHRCb3godGV4dEJveCkKLSAgICAsIG1f
cmVuZGVyZXIodGV4dEJveC5yZW5kZXJlcigpKQorICAgICwgbV9yZW5kZXJlcih0ZXh0Qm94LT5y
ZW5kZXJlcigpKQogICAgICwgbV9kb2N1bWVudChtX3JlbmRlcmVyLmRvY3VtZW50KCkpCisgICAg
LCBtX3N0eWxlKHRleHRCb3gtPnN0eWxlKCkpCisgICAgLCBtX3BhaW50VGV4dFJ1bih0ZXh0Qm94
LT5jcmVhdGVUZXh0UnVuKCkpCiAgICAgLCBtX3BhaW50SW5mbyhwYWludEluZm8pCi0gICAgLCBt
X3BhaW50UmVjdChjb21wdXRlUGFpbnRSZWN0KHRleHRCb3gsIHBhaW50T2Zmc2V0KSkKKyAgICAs
IG1fc2VsZWN0YWJsZVJhbmdlKHRleHRCb3gtPnNlbGVjdGFibGVSYW5nZSgpKQorICAgICwgbV9w
YWludFJlY3QoY29tcHV0ZVBhaW50UmVjdChwYWludE9mZnNldCkpCisgICAgLCBtX2lzRmlyc3RM
aW5lKHRleHRCb3gtPmxpbmUoKS0+aXNGaXJzdCgpKQorICAgICwgbV9pc0hvcml6b250YWwodGV4
dEJveC0+aXNIb3Jpem9udGFsKCkpCiAgICAgLCBtX2lzUHJpbnRpbmcobV9kb2N1bWVudC5wcmlu
dGluZygpKQotICAgICwgbV9oYXZlU2VsZWN0aW9uKCFtX2lzUHJpbnRpbmcgJiYgbV9wYWludElu
Zm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6VGV4dENsaXAgJiYgbV90ZXh0Qm94LnNlbGVjdGlvblN0
YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZSkKKyAgICAsIG1faGF2
ZVNlbGVjdGlvbihjb21wdXRlSGF2ZVNlbGVjdGlvbigpKQogICAgICwgbV9jb250YWluc0NvbXBv
c2l0aW9uKG1fcmVuZGVyZXIudGV4dE5vZGUoKSAmJiBtX3JlbmRlcmVyLmZyYW1lKCkuZWRpdG9y
KCkuY29tcG9zaXRpb25Ob2RlKCkgPT0gbV9yZW5kZXJlci50ZXh0Tm9kZSgpKQogICAgICwgbV91
c2VDdXN0b21VbmRlcmxpbmVzKG1fY29udGFpbnNDb21wb3NpdGlvbiAmJiBtX3JlbmRlcmVyLmZy
YW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25Vc2VzQ3VzdG9tVW5kZXJsaW5lcygpKQogewpAQCAt
NjQsMTEgKzg0LDExIEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50KCkKIAogICAgIGlmICht
X3BhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpFdmVudFJlZ2lvbikgewogICAgICAgICBp
ZiAobV9yZW5kZXJlci5wYXJlbnQoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpKQotICAgICAgICAg
ICAgbV9wYWludEluZm8uZXZlbnRSZWdpb25Db250ZXh0LT51bml0ZShlbmNsb3NpbmdJbnRSZWN0
KG1fcGFpbnRSZWN0KSwgbV9yZW5kZXJlci5zdHlsZSgpKTsKKyAgICAgICAgICAgIG1fcGFpbnRJ
bmZvLmV2ZW50UmVnaW9uQ29udGV4dC0+dW5pdGUoZW5jbG9zaW5nSW50UmVjdChtX3BhaW50UmVj
dCksIG1fc3R5bGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCBzaG91bGRS
b3RhdGUgPSAhbV90ZXh0Qm94LmlzSG9yaXpvbnRhbCgpICYmICFtX3RleHRCb3guY29tYmluZWRU
ZXh0KCk7CisgICAgYm9vbCBzaG91bGRSb3RhdGUgPSAhbV9pc0hvcml6b250YWwgJiYgIWNvbWJp
bmVkVGV4dCgpOwogICAgIGlmIChzaG91bGRSb3RhdGUpCiAgICAgICAgIG1fcGFpbnRJbmZvLmNv
bnRleHQoKS5jb25jYXRDVE0ocm90YXRpb24obV9wYWludFJlY3QsIENsb2Nrd2lzZSkpOwogCkBA
IC05Miw5ICsxMTIsOSBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludCgpCiAgICAgICAgIG1f
cGFpbnRJbmZvLmNvbnRleHQoKS5jb25jYXRDVE0ocm90YXRpb24obV9wYWludFJlY3QsIENvdW50
ZXJjbG9ja3dpc2UpKTsKIH0KIAotc3RhdGljIE1hcmtlZFRleHQgY3JlYXRlTWFya2VkVGV4dEZy
b21TZWxlY3Rpb25JbkJveChjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiBib3gpCitNYXJrZWRU
ZXh0IFRleHRCb3hQYWludGVyOjpjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KCkK
IHsKLSAgICBhdXRvIFtzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kXSA9IGJveC5zZWxlY3Rp
b25TdGFydEVuZCgpOworICAgIGF1dG8gW3NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmRdID0g
bV9yZW5kZXJlci52aWV3KCkuc2VsZWN0aW9uKCkucmFuZ2VGb3JUZXh0Qm94KG1fcmVuZGVyZXIs
IG1fc2VsZWN0YWJsZVJhbmdlKTsKICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPCBzZWxlY3Rpb25F
bmQpCiAgICAgICAgIHJldHVybiB7IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQsIE1hcmtl
ZFRleHQ6OlNlbGVjdGlvbiB9OwogICAgIHJldHVybiB7IH07CkBAIC0xMDUsMjAgKzEyNSwxOCBA
QCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQoKQogICAgIGlmIChtX2NvbnRh
aW5zQ29tcG9zaXRpb24gJiYgIW1fdXNlQ3VzdG9tVW5kZXJsaW5lcykKICAgICAgICAgcGFpbnRD
b21wb3NpdGlvbkJhY2tncm91bmQoKTsKIAotICAgIGF1dG8gc2VsZWN0YWJsZVJhbmdlID0gbV90
ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpOwotCiAgICAgVmVjdG9yPE1hcmtlZFRleHQ+IG1hcmtl
ZFRleHRzOwotICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpjb2xsZWN0
Rm9yRG9jdW1lbnRNYXJrZXJzKG1fcmVuZGVyZXIsIHNlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4
dDo6UGFpbnRQaGFzZTo6QmFja2dyb3VuZCkpOwotICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3Rv
cihNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0cyhtX3JlbmRlcmVyLCBzZWxlY3RhYmxl
UmFuZ2UsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkJhY2tncm91bmQpKTsKKyAgICBtYXJrZWRU
ZXh0cy5hcHBlbmRWZWN0b3IoTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2Vycyht
X3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6QmFj
a2dyb3VuZCkpOworICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpjb2xs
ZWN0Rm9ySGlnaGxpZ2h0cyhtX3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4
dDo6UGFpbnRQaGFzZTo6QmFja2dyb3VuZCkpOwogCiAjaWYgRU5BQkxFKFRFWFRfU0VMRUNUSU9O
KQogICAgIGlmIChtX2hhdmVTZWxlY3Rpb24gJiYgIW1fdXNlQ3VzdG9tVW5kZXJsaW5lcyAmJiAh
bV9wYWludEluZm8uY29udGV4dCgpLnBhaW50aW5nRGlzYWJsZWQoKSkgewotICAgICAgICBhdXRv
IHNlbGVjdGlvbk1hcmtlZFRleHQgPSBjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94
KG1fdGV4dEJveCk7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uTWFya2VkVGV4dCA9IGNyZWF0ZU1h
cmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3goKTsKICAgICAgICAgaWYgKCFzZWxlY3Rpb25NYXJr
ZWRUZXh0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZChXVEZNb3Zl
KHNlbGVjdGlvbk1hcmtlZFRleHQpKTsKICAgICB9CiAjZW5kaWYKLSAgICBhdXRvIHN0eWxlZE1h
cmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6c3ViZGl2aWRlQW5kUmVzb2x2ZShtYXJrZWRU
ZXh0cywgbV9yZW5kZXJlciwgbV90ZXh0Qm94LmlzRmlyc3RMaW5lKCksIG1fcGFpbnRJbmZvKTsK
KyAgICBhdXRvIHN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6c3ViZGl2aWRl
QW5kUmVzb2x2ZShtYXJrZWRUZXh0cywgbV9yZW5kZXJlciwgbV9pc0ZpcnN0TGluZSwgbV9wYWlu
dEluZm8pOwogCiAgICAgLy8gQ29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtlZCB0ZXh0
cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCiAgICAgYXV0byBj
b2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxlZE1hcmtlZFRleHQ6OmNvYWxlc2NlQWRq
YWNlbnRXaXRoRXF1YWxCYWNrZ3JvdW5kKHN0eWxlZE1hcmtlZFRleHRzKTsKQEAgLTEzMiwxOCAr
MTUwLDE2IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRp
b25zKCkKICAgICBib29sIHNob3VsZFBhaW50U2VsZWN0aW9uRm9yZWdyb3VuZCA9IG1faGF2ZVNl
bGVjdGlvbiAmJiAhbV91c2VDdXN0b21VbmRlcmxpbmVzOwogICAgIFZlY3RvcjxNYXJrZWRUZXh0
PiBtYXJrZWRUZXh0czsKICAgICBpZiAobV9wYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6
U2VsZWN0aW9uKSB7Ci0gICAgICAgIGF1dG8gc2VsZWN0YWJsZVJhbmdlID0gbV90ZXh0Qm94LnNl
bGVjdGFibGVSYW5nZSgpOwotCiAgICAgICAgIC8vIFRoZSBtYXJrZWQgdGV4dHMgZm9yIHRoZSBn
YXBzIGJldHdlZW4gZG9jdW1lbnQgbWFya2VycyBhbmQgc2VsZWN0aW9uIGFyZSBpbXBsaWNpdGx5
IGNyZWF0ZWQgYnkgc3ViZGl2aWRpbmcgdGhlIGVudGlyZSBsaW5lLgotICAgICAgICBtYXJrZWRU
ZXh0cy5hcHBlbmQoeyBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAobV90ZXh0Qm94LnN0YXJ0KCkpLCBz
ZWxlY3RhYmxlUmFuZ2UuY2xhbXAobV90ZXh0Qm94LmVuZCgpKSwgTWFya2VkVGV4dDo6VW5tYXJr
ZWQgfSk7CisgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZCh7IG1fc2VsZWN0YWJsZVJhbmdlLmNs
YW1wKG1fdGV4dEJveC0+c3RhcnQoKSksIG1fc2VsZWN0YWJsZVJhbmdlLmNsYW1wKG1fdGV4dEJv
eC0+ZW5kKCkpLCBNYXJrZWRUZXh0OjpVbm1hcmtlZCB9KTsKIAogICAgICAgICBpZiAoIW1faXNQ
cmludGluZykgewotICAgICAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtlZFRl
eHQ6OmNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMobV9yZW5kZXJlciwgc2VsZWN0YWJsZVJhbmdl
LCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpGb3JlZ3JvdW5kKSk7Ci0gICAgICAgICAgICBtYXJr
ZWRUZXh0cy5hcHBlbmRWZWN0b3IoTWFya2VkVGV4dDo6Y29sbGVjdEZvckhpZ2hsaWdodHMobV9y
ZW5kZXJlciwgc2VsZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpGb3JlZ3Jv
dW5kKSk7CisgICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmRWZWN0b3IoTWFya2VkVGV4dDo6
Y29sbGVjdEZvckRvY3VtZW50TWFya2VycyhtX3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSwg
TWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCkpOworICAgICAgICAgICAgbWFya2Vk
VGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JIaWdobGlnaHRzKG1fcmVu
ZGVyZXIsIG1fc2VsZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpGb3JlZ3Jv
dW5kKSk7CiAKICAgICAgICAgICAgIGJvb2wgc2hvdWxkUGFpbnREcmFnZ2VkQ29udGVudCA9ICEo
bV9wYWludEluZm8ucGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpFeGNsdWRl
U2VsZWN0aW9uKSk7CiAgICAgICAgICAgICBpZiAoc2hvdWxkUGFpbnREcmFnZ2VkQ29udGVudCkg
ewotICAgICAgICAgICAgICAgIGF1dG8gbWFya2VkVGV4dHNGb3JEcmFnZ2VkQ29udGVudCA9IE1h
cmtlZFRleHQ6OmNvbGxlY3RGb3JEcmFnZ2VkQ29udGVudChtX3JlbmRlcmVyLCBzZWxlY3RhYmxl
UmFuZ2UpOworICAgICAgICAgICAgICAgIGF1dG8gbWFya2VkVGV4dHNGb3JEcmFnZ2VkQ29udGVu
dCA9IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JEcmFnZ2VkQ29udGVudChtX3JlbmRlcmVyLCBtX3Nl
bGVjdGFibGVSYW5nZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFtYXJrZWRUZXh0c0ZvckRyYWdn
ZWRDb250ZW50LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBzaG91bGRQYWludFNl
bGVjdGlvbkZvcmVncm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgbWFya2VkVGV4
dHMuYXBwZW5kVmVjdG9yKG1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQpOwpAQCAtMTU0LDEy
ICsxNzAsMTIgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kQW5kRGVjb3Jh
dGlvbnMoKQogICAgIC8vIFRoZSBzZWxlY3Rpb24gbWFya2VkIHRleHQgYWN0cyBhcyBhIHBsYWNl
aG9sZGVyIHdoZW4gY29tcHV0aW5nIHRoZSBtYXJrZWQgdGV4dHMgZm9yIHRoZSBnYXBzLi4uCiAg
ICAgaWYgKHNob3VsZFBhaW50U2VsZWN0aW9uRm9yZWdyb3VuZCkgewogICAgICAgICBBU1NFUlQo
IW1faXNQcmludGluZyk7Ci0gICAgICAgIGF1dG8gc2VsZWN0aW9uTWFya2VkVGV4dCA9IGNyZWF0
ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3gobV90ZXh0Qm94KTsKKyAgICAgICAgYXV0byBz
ZWxlY3Rpb25NYXJrZWRUZXh0ID0gY3JlYXRlTWFya2VkVGV4dEZyb21TZWxlY3Rpb25JbkJveCgp
OwogICAgICAgICBpZiAoIXNlbGVjdGlvbk1hcmtlZFRleHQuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgbWFya2VkVGV4dHMuYXBwZW5kKFdURk1vdmUoc2VsZWN0aW9uTWFya2VkVGV4dCkpOwogICAg
IH0KIAotICAgIGF1dG8gc3R5bGVkTWFya2VkVGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0OjpzdWJk
aXZpZGVBbmRSZXNvbHZlKG1hcmtlZFRleHRzLCBtX3JlbmRlcmVyLCBtX3RleHRCb3guaXNGaXJz
dExpbmUoKSwgbV9wYWludEluZm8pOworICAgIGF1dG8gc3R5bGVkTWFya2VkVGV4dHMgPSBTdHls
ZWRNYXJrZWRUZXh0OjpzdWJkaXZpZGVBbmRSZXNvbHZlKG1hcmtlZFRleHRzLCBtX3JlbmRlcmVy
LCBtX2lzRmlyc3RMaW5lLCBtX3BhaW50SW5mbyk7CiAKICAgICAvLyAuLi4gbm93IHJlbW92ZSB0
aGUgc2VsZWN0aW9uIG1hcmtlZCB0ZXh0IGlmIHdlIGFyZSBleGNsdWRpbmcgc2VsZWN0aW9uLgog
ICAgIGlmICghbV9pc1ByaW50aW5nICYmIG1fcGFpbnRJbmZvLnBhaW50QmVoYXZpb3IuY29udGFp
bnMoUGFpbnRCZWhhdmlvcjo6RXhjbHVkZVNlbGVjdGlvbikpIHsKQEAgLTE3NCwyOCArMTkwLDI4
IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKCkK
ICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cykK
ICAgICAgICAgcGFpbnRGb3JlZ3JvdW5kKG1hcmtlZFRleHQpOwogCi0gICAgYXV0byB0ZXh0RGVj
b3JhdGlvbnMgPSBtX3RleHRCb3gubGluZVN0eWxlKCkudGV4dERlY29yYXRpb25zSW5FZmZlY3Qo
KTsKLSAgICBib29sIGhpZ2hsaWdodERlY29yYXRpb25zID0gIU1hcmtlZFRleHQ6OmNvbGxlY3RG
b3JIaWdobGlnaHRzKG1fcmVuZGVyZXIsIG1fdGV4dEJveC5zZWxlY3RhYmxlUmFuZ2UoKSwgTWFy
a2VkVGV4dDo6UGFpbnRQaGFzZTo6RGVjb3JhdGlvbikuaXNFbXB0eSgpOworICAgIGF1dG8gdGV4
dERlY29yYXRpb25zID0gbV9zdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOworICAgIGJv
b2wgaGlnaGxpZ2h0RGVjb3JhdGlvbnMgPSAhTWFya2VkVGV4dDo6Y29sbGVjdEZvckhpZ2hsaWdo
dHMobV9yZW5kZXJlciwgbV9zZWxlY3RhYmxlUmFuZ2UsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6
OkRlY29yYXRpb24pLmlzRW1wdHkoKTsKICAgICBib29sIGxpbmVEZWNvcmF0aW9ucyA9ICF0ZXh0
RGVjb3JhdGlvbnMuaXNFbXB0eSgpOwogICAgIGlmICgobGluZURlY29yYXRpb25zIHx8IGhpZ2hs
aWdodERlY29yYXRpb25zKSAmJiBtX3BhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpTZWxl
Y3Rpb24pIHsKLSAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0gbV90ZXh0Qm94LmNyZWF0ZVRleHRS
dW4oKTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV90ZXh0Qm94LnRydW5jYXRpb24oKS52
YWx1ZV9vcih0ZXh0UnVuLmxlbmd0aCgpKTsKKyAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0gbV90
ZXh0Qm94LT5jcmVhdGVUZXh0UnVuKCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fc2Vs
ZWN0YWJsZVJhbmdlLnRydW5jYXRpb24udmFsdWVfb3IodGV4dFJ1bi5sZW5ndGgoKSk7CiAgICAg
ICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0ID0gMDsKICAgICAgICAgdW5zaWduZWQgc2VsZWN0
aW9uRW5kID0gMDsKICAgICAgICAgaWYgKG1faGF2ZVNlbGVjdGlvbikKLSAgICAgICAgICAgIHN0
ZDo6dGllKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpID0gbV90ZXh0Qm94LnNlbGVjdGlv
blN0YXJ0RW5kKCk7CisgICAgICAgICAgICBzdGQ6OnRpZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0
aW9uRW5kKSA9IG1fcmVuZGVyZXIudmlldygpLnNlbGVjdGlvbigpLnJhbmdlRm9yVGV4dEJveCht
X3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSk7CiAKICAgICAgICAgRmxvYXRSZWN0IHRleHRE
ZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3Q7CiAgICAgICAgIGlmICgobV9wYWludEluZm8u
cGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpFeGNsdWRlU2VsZWN0aW9uKSkg
JiYgc2VsZWN0aW9uU3RhcnQgPCBzZWxlY3Rpb25FbmQgJiYgc2VsZWN0aW9uRW5kIDw9IGxlbmd0
aCkgewogICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdCA9IG1f
cGFpbnRSZWN0OwogICAgICAgICAgICAgZmxvYXQgbG9naWNhbFdpZHRoQmVmb3JlUmFuZ2U7CiAg
ICAgICAgICAgICBmbG9hdCBsb2dpY2FsV2lkdGhBZnRlclJhbmdlOwotICAgICAgICAgICAgZmxv
YXQgbG9naWNhbFNlbGVjdGlvbldpZHRoID0gbV90ZXh0Qm94LmxpbmVGb250KCkud2lkdGhPZlRl
eHRSYW5nZSh0ZXh0UnVuLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCBudWxscHRyLCAm
bG9naWNhbFdpZHRoQmVmb3JlUmFuZ2UsICZsb2dpY2FsV2lkdGhBZnRlclJhbmdlKTsKKyAgICAg
ICAgICAgIGZsb2F0IGxvZ2ljYWxTZWxlY3Rpb25XaWR0aCA9IGZvbnRDYXNjYWRlKCkud2lkdGhP
ZlRleHRSYW5nZShtX3BhaW50VGV4dFJ1biwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwg
bnVsbHB0ciwgJmxvZ2ljYWxXaWR0aEJlZm9yZVJhbmdlLCAmbG9naWNhbFdpZHRoQWZ0ZXJSYW5n
ZSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBoYW5kbGUgdmVydGljYWwg
Ym90dG9tIHRvIHRvcCB0ZXh0PwotICAgICAgICAgICAgaWYgKCFtX3RleHRCb3guaXNIb3Jpem9u
dGFsKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9pc0hvcml6b250YWwpIHsKICAgICAgICAgICAg
ICAgICB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0Lm1vdmUoMCwgbG9naWNhbFdp
ZHRoQmVmb3JlUmFuZ2UpOwogICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9u
Q2xpcE91dFJlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxTZWxlY3Rpb25XaWR0aCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fdGV4dEJveC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwp
IHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV90ZXh0Qm94LT5kaXJlY3Rpb24oKSA9PSBUZXh0
RGlyZWN0aW9uOjpSVEwpIHsKICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblNlbGVjdGlv
bkNsaXBPdXRSZWN0Lm1vdmUobG9naWNhbFdpZHRoQWZ0ZXJSYW5nZSwgMCk7CiAgICAgICAgICAg
ICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5zZXRXaWR0aChsb2dpY2Fs
U2VsZWN0aW9uV2lkdGgpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTIxNCwyOSArMjMwLDI3
IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKCkK
IAogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoKQogewot
ICAgIGF1dG8gc2VsZWN0YWJsZVJhbmdlID0gbV90ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpOwot
CiAgICAgYXV0byYgZWRpdG9yID0gbV9yZW5kZXJlci5mcmFtZSgpLmVkaXRvcigpOwogCiAgICAg
aWYgKCFlZGl0b3IuY29tcG9zaXRpb25Vc2VzQ3VzdG9tSGlnaGxpZ2h0cygpKSB7Ci0gICAgICAg
IGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAo
ZWRpdG9yLmNvbXBvc2l0aW9uU3RhcnQoKSwgZWRpdG9yLmNvbXBvc2l0aW9uRW5kKCkpOworICAg
ICAgICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmRdID0gbV9zZWxlY3RhYmxlUmFuZ2Uu
Y2xhbXAoZWRpdG9yLmNvbXBvc2l0aW9uU3RhcnQoKSwgZWRpdG9yLmNvbXBvc2l0aW9uRW5kKCkp
OwogCiAgICAgICAgIHBhaW50QmFja2dyb3VuZChjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmQsIENv
bXBvc2l0aW9uSGlnaGxpZ2h0OjpkZWZhdWx0Q29tcG9zaXRpb25GaWxsQ29sb3IpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBlZGl0b3IuY3Vz
dG9tQ29tcG9zaXRpb25IaWdobGlnaHRzKCkpIHsKLSAgICAgICAgaWYgKGhpZ2hsaWdodC5lbmRP
ZmZzZXQgPD0gbV90ZXh0Qm94LnN0YXJ0KCkpCisgICAgICAgIGlmIChoaWdobGlnaHQuZW5kT2Zm
c2V0IDw9IG1fdGV4dEJveC0+c3RhcnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIGlmIChoaWdobGlnaHQuc3RhcnRPZmZzZXQgPj0gbV90ZXh0Qm94LmVuZCgpKQorICAgICAg
ICBpZiAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0ID49IG1fdGV4dEJveC0+ZW5kKCkpCiAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmRdID0g
c2VsZWN0YWJsZVJhbmdlLmNsYW1wKGhpZ2hsaWdodC5zdGFydE9mZnNldCwgaGlnaGxpZ2h0LmVu
ZE9mZnNldCk7CisgICAgICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBtX3Nl
bGVjdGFibGVSYW5nZS5jbGFtcChoaWdobGlnaHQuc3RhcnRPZmZzZXQsIGhpZ2hsaWdodC5lbmRP
ZmZzZXQpOwogCiAgICAgICAgIHBhaW50QmFja2dyb3VuZChjbGFtcGVkU3RhcnQsIGNsYW1wZWRF
bmQsIGhpZ2hsaWdodC5jb2xvciwgQmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKTsKIAotICAgICAg
ICBpZiAoaGlnaGxpZ2h0LmVuZE9mZnNldCA+IG1fdGV4dEJveC5lbmQoKSkKKyAgICAgICAgaWYg
KGhpZ2hsaWdodC5lbmRPZmZzZXQgPiBtX3RleHRCb3gtPmVuZCgpKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgfQogfQpAQCAtMjU3LDIyICsyNzEsMjEgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6
cGFpbnRCYWNrZ3JvdW5kKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQs
IGMKIAogICAgIC8vIE5vdGUgdGhhdCBpZiB0aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIHdlIGxldCB0
aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNhdGlvbgogICAgIC8vIGRyYXcgaXRz
IG93biBoaWdobGlnaHQuCi0gICAgVGV4dFJ1biB0ZXh0UnVuID0gbV90ZXh0Qm94LmNyZWF0ZVRl
eHRSdW4oKTsKIAotICAgIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBtX3Rl
eHRCb3gucm9vdCgpOwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tID0gcm9vdEJveC5z
ZWxlY3Rpb25Cb3R0b20oKTsKLSAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCA9IHJvb3RCb3gu
c2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpOworICAgIGNvbnN0IGF1dG8g
bGluZSA9IG1fdGV4dEJveC0+bGluZSgpOworICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9t
ID0gbGluZS0+c2VsZWN0aW9uQm90dG9tKCk7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3Ag
PSBsaW5lLT5zZWxlY3Rpb25Ub3BBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCk7CiAKICAgICAv
LyBVc2Ugc2FtZSB5IHBvc2l0aW9uaW5nIGFuZCBoZWlnaHQgYXMgZm9yIHNlbGVjdGlvbiwgc28g
dGhhdCB3aGVuIHRoZSBzZWxlY3Rpb24gYW5kIHRoaXMgc3VicmFuZ2UgYXJlIG9uCiAgICAgLy8g
dGhlIHNhbWUgd29yZCB0aGVyZSBhcmUgbm8gcGllY2VzIHN0aWNraW5nIG91dC4KLSAgICBMYXlv
dXRVbml0IGRlbHRhWSB7IG1fcmVuZGVyZXIuc3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdN
b2RlKCkgPyBzZWxlY3Rpb25Cb3R0b20gLSBtX3RleHRCb3gubG9naWNhbEJvdHRvbSgpIDogbV90
ZXh0Qm94LmxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRvcCB9OworICAgIExheW91dFVuaXQgZGVs
dGFZIHsgbV9zdHlsZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25Cb3R0
b20gLSBtX3RleHRCb3gtPmxvZ2ljYWxCb3R0b20oKSA6IG1fdGV4dEJveC0+bG9naWNhbFRvcCgp
IC0gc2VsZWN0aW9uVG9wIH07CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQgPSBzdGQ6
Om1heDxMYXlvdXRVbml0PigwLCBzZWxlY3Rpb25Cb3R0b20gLSBzZWxlY3Rpb25Ub3ApOwogCi0g
ICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0IHsgTGF5b3V0VW5pdChtX3BhaW50UmVjdC54KCkp
LCBMYXlvdXRVbml0KG1fcGFpbnRSZWN0LnkoKSAtIGRlbHRhWSksIExheW91dFVuaXQobV90ZXh0
Qm94LmxvZ2ljYWxXaWR0aCgpKSwgc2VsZWN0aW9uSGVpZ2h0IH07Ci0gICAgbV90ZXh0Qm94Lmxp
bmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVj
dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0
IHsgTGF5b3V0VW5pdChtX3BhaW50UmVjdC54KCkpLCBMYXlvdXRVbml0KG1fcGFpbnRSZWN0Lnko
KSAtIGRlbHRhWSksIExheW91dFVuaXQobV90ZXh0Qm94LT5sb2dpY2FsV2lkdGgoKSksIHNlbGVj
dGlvbkhlaWdodCB9OworICAgIGZvbnRDYXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRl
eHQobV9wYWludFRleHRSdW4sIHNlbGVjdGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQp
OwogCiAgICAgLy8gRklYTUU6IFN1cHBvcnQgcGFpbnRpbmcgY29tYmluZWQgdGV4dC4gU2VlIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwOTkzPi4KLSAgICBhdXRv
IGJhY2tncm91bmRSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0
aW9uKHNlbGVjdGlvblJlY3QsIG1fZG9jdW1lbnQuZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1
bi5sdHIoKSk7CisgICAgYXV0byBiYWNrZ3JvdW5kUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhl
bHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCBtX2RvY3VtZW50LmRldmljZVNj
YWxlRmFjdG9yKCksIG1fcGFpbnRUZXh0UnVuLmx0cigpKTsKICAgICBpZiAoYmFja2dyb3VuZFN0
eWxlID09IEJhY2tncm91bmRTdHlsZTo6Um91bmRlZCkgewogICAgICAgICBiYWNrZ3JvdW5kUmVj
dC5leHBhbmQoLTEsIC0xKTsKICAgICAgICAgYmFja2dyb3VuZFJlY3QubW92ZSgwLjUsIDAuNSk7
CkBAIC0yODksMzAgKzMwMiwzMCBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91
bmQoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gbV9wYWludEluZm8uY29udGV4dCgpOwot
ICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbV90ZXh0Qm94LmxpbmVGb250KCk7Ci0gICAg
Y29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IG1fdGV4dEJveC5saW5lU3R5bGUoKTsKKyAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGZvbnRDYXNjYWRlKCk7CiAKICAgICBmbG9hdCBl
bXBoYXNpc01hcmtPZmZzZXQgPSAwOwotICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbWFya0V4aXN0
c0FuZElzQWJvdmUgPSBtX3RleHRCb3guZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShsaW5l
U3R5bGUpOwotICAgIGNvbnN0IEF0b21TdHJpbmcmIGVtcGhhc2lzTWFyayA9IG1hcmtFeGlzdHNB
bmRJc0Fib3ZlID8gbGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSA6IG51bGxBdG9t
KCk7CisgICAgY29uc3QgQXRvbVN0cmluZyYgZW1waGFzaXNNYXJrID0gbV9lbXBoYXNpc01hcmtF
eGlzdHNBbmRJc0Fib3ZlID8gbV9zdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkgOiBudWxs
QXRvbSgpOwogICAgIGlmICghZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkKLSAgICAgICAgZW1waGFz
aXNNYXJrT2Zmc2V0ID0gKm1hcmtFeGlzdHNBbmRJc0Fib3ZlID8gLWZvbnQuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSAtIGZvbnQuZW1waGFzaXNNYXJrRGVzY2VudChlbXBoYXNpc01hcmspIDogZm9u
dC5mb250TWV0cmljcygpLmRlc2NlbnQoKSArIGZvbnQuZW1waGFzaXNNYXJrQXNjZW50KGVtcGhh
c2lzTWFyayk7CisgICAgICAgIGVtcGhhc2lzTWFya09mZnNldCA9ICptX2VtcGhhc2lzTWFya0V4
aXN0c0FuZElzQWJvdmUgPyAtZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpIC0gZm9udC5lbXBo
YXNpc01hcmtEZXNjZW50KGVtcGhhc2lzTWFyaykgOiBmb250LmZvbnRNZXRyaWNzKCkuZGVzY2Vu
dCgpICsgZm9udC5lbXBoYXNpc01hcmtBc2NlbnQoZW1waGFzaXNNYXJrKTsKIAogICAgIFRleHRQ
YWludGVyIHRleHRQYWludGVyIHsgY29udGV4dCB9OwogICAgIHRleHRQYWludGVyLnNldEZvbnQo
Zm9udCk7CiAgICAgdGV4dFBhaW50ZXIuc2V0U3R5bGUobWFya2VkVGV4dC5zdHlsZS50ZXh0U3R5
bGVzKTsKLSAgICB0ZXh0UGFpbnRlci5zZXRJc0hvcml6b250YWwobV90ZXh0Qm94LmlzSG9yaXpv
bnRhbCgpKTsKKyAgICB0ZXh0UGFpbnRlci5zZXRJc0hvcml6b250YWwobV9pc0hvcml6b250YWwp
OwogICAgIGlmIChtYXJrZWRUZXh0LnN0eWxlLnRleHRTaGFkb3cpIHsKICAgICAgICAgdGV4dFBh
aW50ZXIuc2V0U2hhZG93KCZtYXJrZWRUZXh0LnN0eWxlLnRleHRTaGFkb3cudmFsdWUoKSk7Ci0g
ICAgICAgIGlmIChsaW5lU3R5bGUuaGFzQXBwbGVDb2xvckZpbHRlcigpKQotICAgICAgICAgICAg
dGV4dFBhaW50ZXIuc2V0U2hhZG93Q29sb3JGaWx0ZXIoJmxpbmVTdHlsZS5hcHBsZUNvbG9yRmls
dGVyKCkpOworICAgICAgICBpZiAobV9zdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCisgICAg
ICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRlcigmbV9zdHlsZS5hcHBsZUNv
bG9yRmlsdGVyKCkpOwogICAgIH0KLSAgICB0ZXh0UGFpbnRlci5zZXRFbXBoYXNpc01hcmsoZW1w
aGFzaXNNYXJrLCBlbXBoYXNpc01hcmtPZmZzZXQsIG1fdGV4dEJveC5jb21iaW5lZFRleHQoKSk7
Ci0gICAgaWYgKGF1dG8qIGRlYnVnU2hhZG93ID0gbV90ZXh0Qm94LmRlYnVnVGV4dFNoYWRvdygp
KQorICAgIHRleHRQYWludGVyLnNldEVtcGhhc2lzTWFyayhlbXBoYXNpc01hcmssIGVtcGhhc2lz
TWFya09mZnNldCwgY29tYmluZWRUZXh0KCkpOworICAgIGlmIChhdXRvKiBkZWJ1Z1NoYWRvdyA9
IGRlYnVnVGV4dFNoYWRvdygpKQogICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFkb3coZGVidWdT
aGFkb3cpOwogCi0gICAgVGV4dFJ1biB0ZXh0UnVuID0gbV90ZXh0Qm94LmNyZWF0ZVRleHRSdW4o
KTsKLSAgICB0ZXh0UGFpbnRlci5zZXRHbHlwaERpc3BsYXlMaXN0SWZOZWVkZWQobV90ZXh0Qm94
LCBtX3BhaW50SW5mbywgZm9udCwgY29udGV4dCwgdGV4dFJ1bik7CisgICAgaWYgKGF1dG8qIGxl
Z2FjeUlubGluZUJveCA9IG1fdGV4dEJveC0+bGVnYWN5SW5saW5lQm94KCkpCisgICAgICAgIHRl
eHRQYWludGVyLnNldEdseXBoRGlzcGxheUxpc3RJZk5lZWRlZChsZWdhY3lJbmxpbmVCb3gsIG1f
cGFpbnRJbmZvLCBmb250LCBjb250ZXh0LCBtX3BhaW50VGV4dFJ1bik7CisgICAgZWxzZQorICAg
ICAgICB0ZXh0UGFpbnRlci5zZXRHbHlwaERpc3BsYXlMaXN0SWZOZWVkZWQobV90ZXh0Qm94LT5p
bmxpbmVCb3goKSwgbV9wYWludEluZm8sIGZvbnQsIGNvbnRleHQsIG1fcGFpbnRUZXh0UnVuKTsK
IAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQsIGZh
bHNlIH07CiAgICAgaWYgKG1hcmtlZFRleHQudHlwZSA9PSBNYXJrZWRUZXh0OjpEcmFnZ2VkQ29u
dGVudCkgewpAQCAtMzIwLDcgKzMzMyw3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9y
ZWdyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogICAgICAgICBjb250
ZXh0LnNldEFscGhhKG1hcmtlZFRleHQuc3R5bGUuYWxwaGEpOwogICAgIH0KICAgICAvLyBUZXh0
UGFpbnRlciB3YW50cyB0aGUgYm94IHJlY3RhbmdsZSBhbmQgdGV4dCBvcmlnaW4gb2YgdGhlIGVu
dGlyZSBsaW5lIGJveC4KLSAgICB0ZXh0UGFpbnRlci5wYWludFJhbmdlKHRleHRSdW4sIG1fcGFp
bnRSZWN0LCBtX3RleHRCb3gudGV4dE9yaWdpbkZyb21Cb3hSZWN0KG1fcGFpbnRSZWN0KSwgbWFy
a2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQpOworICAgIHRleHRQYWlu
dGVyLnBhaW50UmFuZ2UobV9wYWludFRleHRSdW4sIG1fcGFpbnRSZWN0LCB0ZXh0T3JpZ2luRnJv
bVBhaW50UmVjdChtX3BhaW50UmVjdCksIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRl
eHQuZW5kT2Zmc2V0KTsKIH0KIAogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnREZWNvcmF0aW9u
KGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IEZsb2F0UmVjdCYgY2xp
cE91dFJlY3QpCkBAIC0zMzIsMzggKzM0NSwzNiBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWlu
dERlY29yYXRpb24oY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCwgY29uc3QgRgog
ICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBtX3BhaW50
SW5mby5jb250ZXh0KCk7Ci0gICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBtX3RleHRCb3gu
bGluZUZvbnQoKTsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gbV90ZXh0Qm94
LmxpbmVTdHlsZSgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gZm9udENhc2NhZGUo
KTsKIAogICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCBtYXJrZWRUZXh0LnN0eWxl
LnRleHRTdHlsZXMpOwogCi0gICAgYm9vbCBpc0NvbWJpbmVkVGV4dCA9IG1fdGV4dEJveC5jb21i
aW5lZFRleHQoKTsKKyAgICBib29sIGlzQ29tYmluZWRUZXh0ID0gY29tYmluZWRUZXh0KCk7CiAg
ICAgaWYgKGlzQ29tYmluZWRUZXh0KQogICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlv
bihtX3BhaW50UmVjdCwgQ2xvY2t3aXNlKSk7CiAKICAgICAvLyBOb3RlIHRoYXQgaWYgdGhlIHRl
eHQgaXMgdHJ1bmNhdGVkLCB3ZSBsZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50ZWQgaW4gdGhlIHRy
dW5jYXRpb24KICAgICAvLyBkcmF3IGl0cyBvd24gZGVjb3JhdGlvbi4KLSAgICBUZXh0UnVuIHRl
eHRSdW4gPSBtX3RleHRCb3guY3JlYXRlVGV4dFJ1bigpOwogCiAgICAgLy8gQXZvaWQgbWVhc3Vy
aW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBhcyBhbiBv
cHRpbWl6YXRpb24uCiAgICAgRmxvYXRSZWN0IHNuYXBwZWRTZWxlY3Rpb25SZWN0ID0gbV9wYWlu
dFJlY3Q7Ci0gICAgaWYgKHN0YXJ0T2Zmc2V0IHx8IGVuZE9mZnNldCAhPSB0ZXh0UnVuLmxlbmd0
aCgpKSB7CisgICAgaWYgKHN0YXJ0T2Zmc2V0IHx8IGVuZE9mZnNldCAhPSBtX3BhaW50VGV4dFJ1
bi5sZW5ndGgoKSkgewogICAgICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSB7IG1fcGFp
bnRSZWN0LngoKSwgbV9wYWludFJlY3QueSgpLCBtX3BhaW50UmVjdC53aWR0aCgpLCBtX3BhaW50
UmVjdC5oZWlnaHQoKSB9OwotICAgICAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0
KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotICAgICAg
ICBzbmFwcGVkU2VsZWN0aW9uUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGlu
Z0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCBtX2RvY3VtZW50LmRldmljZVNjYWxlRmFjdG9yKCks
IHRleHRSdW4ubHRyKCkpOworICAgICAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0
KG1fcGFpbnRUZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsK
KyAgICAgICAgc25hcHBlZFNlbGVjdGlvblJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0
aFdyaXRpbmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgbV9kb2N1bWVudC5kZXZpY2VTY2FsZUZh
Y3RvcigpLCBtX3BhaW50VGV4dFJ1bi5sdHIoKSk7CiAgICAgfQogCiAgICAgLy8gMi4gUGFpbnQK
LSAgICBhdXRvIHRleHREZWNvcmF0aW9ucyA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdCgpOworICAgIGF1dG8gdGV4dERlY29yYXRpb25zID0gbV9zdHlsZS50ZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCgpOwogICAgIHRleHREZWNvcmF0aW9ucy5hZGQoVGV4dERlY29yYXRpb25QYWlu
dGVyOjp0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdEZvclN0eWxlKG1hcmtlZFRleHQuc3R5bGUudGV4
dERlY29yYXRpb25TdHlsZXMpKTsKLSAgICBUZXh0RGVjb3JhdGlvblBhaW50ZXIgZGVjb3JhdGlv
blBhaW50ZXIgeyBjb250ZXh0LCB0ZXh0RGVjb3JhdGlvbnMsIG1fcmVuZGVyZXIsIG1fdGV4dEJv
eC5pc0ZpcnN0TGluZSgpLCBmb250LCBtYXJrZWRUZXh0LnN0eWxlLnRleHREZWNvcmF0aW9uU3R5
bGVzIH07Ci0gICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFJ1bkl0ZXJhdG9yKExheW91dElu
dGVncmF0aW9uOjp0ZXh0UnVuRm9yKCZtX3RleHRCb3gpKTsKKyAgICBUZXh0RGVjb3JhdGlvblBh
aW50ZXIgZGVjb3JhdGlvblBhaW50ZXIgeyBjb250ZXh0LCB0ZXh0RGVjb3JhdGlvbnMsIG1fcmVu
ZGVyZXIsIG1faXNGaXJzdExpbmUsIGZvbnQsIG1hcmtlZFRleHQuc3R5bGUudGV4dERlY29yYXRp
b25TdHlsZXMgfTsKKyAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRUZXh0UnVuSXRlcmF0b3IobV90
ZXh0Qm94KTsKICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRXaWR0aChzbmFwcGVkU2VsZWN0aW9u
UmVjdC53aWR0aCgpKTsKLSAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRJc0hvcml6b250YWwobV90
ZXh0Qm94LmlzSG9yaXpvbnRhbCgpKTsKKyAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRJc0hvcml6
b250YWwobV9pc0hvcml6b250YWwpOwogICAgIGlmIChtYXJrZWRUZXh0LnN0eWxlLnRleHRTaGFk
b3cpIHsKICAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFNoYWRvdygmbWFya2VkVGV4
dC5zdHlsZS50ZXh0U2hhZG93LnZhbHVlKCkpOwotICAgICAgICBpZiAobGluZVN0eWxlLmhhc0Fw
cGxlQ29sb3JGaWx0ZXIoKSkKLSAgICAgICAgICAgIGRlY29yYXRpb25QYWludGVyLnNldFNoYWRv
d0NvbG9yRmlsdGVyKCZsaW5lU3R5bGUuYXBwbGVDb2xvckZpbHRlcigpKTsKKyAgICAgICAgaWYg
KG1fc3R5bGUuaGFzQXBwbGVDb2xvckZpbHRlcigpKQorICAgICAgICAgICAgZGVjb3JhdGlvblBh
aW50ZXIuc2V0U2hhZG93Q29sb3JGaWx0ZXIoJm1fc3R5bGUuYXBwbGVDb2xvckZpbHRlcigpKTsK
ICAgICB9CiAKICAgICB7CkBAIC0zNzYsNyArMzg3LDcgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6
cGFpbnREZWNvcmF0aW9uKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0
IEYKICAgICAgICAgICAgIGlmICghY2xpcE91dFJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgIGNvbnRleHQuY2xpcE91dChjbGlwT3V0UmVjdCk7CiAgICAgICAgIH0KLSAgICAgICAgZGVj
b3JhdGlvblBhaW50ZXIucGFpbnRUZXh0RGVjb3JhdGlvbih0ZXh0UnVuLnN1YlJ1bihzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpLCBtX3RleHRCb3gudGV4dE9yaWdpbkZyb21C
b3hSZWN0KHNuYXBwZWRTZWxlY3Rpb25SZWN0KSwgc25hcHBlZFNlbGVjdGlvblJlY3QubG9jYXRp
b24oKSk7CisgICAgICAgIGRlY29yYXRpb25QYWludGVyLnBhaW50VGV4dERlY29yYXRpb24obV9w
YWludFRleHRSdW4uc3ViUnVuKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCks
IHRleHRPcmlnaW5Gcm9tUGFpbnRSZWN0KHNuYXBwZWRTZWxlY3Rpb25SZWN0KSwgc25hcHBlZFNl
bGVjdGlvblJlY3QubG9jYXRpb24oKSk7CiAgICAgfQogCiAgICAgaWYgKGlzQ29tYmluZWRUZXh0
KQpAQCAtMzg2LDIwICszOTcsMjAgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnREZWNvcmF0
aW9uKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IEYKIHZvaWQgVGV4
dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKCkKIHsKICAgICBmb3IgKGF1
dG8mIHVuZGVybGluZSA6IG1fcmVuZGVyZXIuZnJhbWUoKS5lZGl0b3IoKS5jdXN0b21Db21wb3Np
dGlvblVuZGVybGluZXMoKSkgewotICAgICAgICBpZiAodW5kZXJsaW5lLmVuZE9mZnNldCA8PSBt
X3RleHRCb3guc3RhcnQoKSkgeworICAgICAgICBpZiAodW5kZXJsaW5lLmVuZE9mZnNldCA8PSBt
X3RleHRCb3gtPnN0YXJ0KCkpIHsKICAgICAgICAgICAgIC8vIFVuZGVybGluZSBpcyBjb21wbGV0
ZWx5IGJlZm9yZSB0aGlzIHJ1bi4gVGhpcyBtaWdodCBiZSBhbiB1bmRlcmxpbmUgdGhhdCBzaXRz
CiAgICAgICAgICAgICAvLyBiZWZvcmUgdGhlIGZpcnN0IHJ1biB3ZSBkcmF3LCBvciB1bmRlcmxp
bmVzIHRoYXQgd2VyZSB3aXRoaW4gcnVucyB3ZSBza2lwcGVkCiAgICAgICAgICAgICAvLyBkdWUg
dG8gdHJ1bmNhdGlvbi4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKHVuZGVybGluZS5zdGFydE9mZnNldCA+PSBtX3RleHRCb3guZW5kKCkpCisgICAgICAg
IGlmICh1bmRlcmxpbmUuc3RhcnRPZmZzZXQgPj0gbV90ZXh0Qm94LT5lbmQoKSkKICAgICAgICAg
ICAgIGJyZWFrOyAvLyBVbmRlcmxpbmUgaXMgY29tcGxldGVseSBhZnRlciB0aGlzIHJ1biwgYmFp
bC4gQSBsYXRlciBydW4gd2lsbCBwYWludCBpdC4KIAogICAgICAgICAvLyBVbmRlcmxpbmUgaW50
ZXJzZWN0cyB0aGlzIHJ1bi4gUGFpbnQgaXQuCiAgICAgICAgIHBhaW50Q29tcG9zaXRpb25VbmRl
cmxpbmUodW5kZXJsaW5lKTsKIAotICAgICAgICBpZiAodW5kZXJsaW5lLmVuZE9mZnNldCA+IG1f
dGV4dEJveC5lbmQoKSkKKyAgICAgICAgaWYgKHVuZGVybGluZS5lbmRPZmZzZXQgPiBtX3RleHRC
b3gtPmVuZCgpKQogICAgICAgICAgICAgYnJlYWs7IC8vIFVuZGVybGluZSBhbHNvIHJ1bnMgaW50
byB0aGUgbmV4dCBydW4uIEJhaWwgbm93LCBubyBtb3JlIG1hcmtlciBhZHZhbmNlbWVudC4KICAg
ICB9CiB9CkBAIC00MTEsMzcgKzQyMiw0NiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWlycm9yUlRM
U2VnbWVudChmbG9hdCBsb2dpY2FsV2lkdGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLAogICAg
IHN0YXJ0ID0gbG9naWNhbFdpZHRoIC0gd2lkdGggLSBzdGFydDsKIH0KIAorc3RhdGljIGZsb2F0
IHRleHRQb3NpdGlvbihjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yJiB0
ZXh0Qm94KQoreworICAgIC8vIFdoZW4gY29tcHV0aW5nIHRoZSB3aWR0aCBvZiBhIHRleHQgcnVu
LCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvckxpbmUoKSBk
b2Vzbid0IGluY2x1ZGUgdGhlIGFjdHVhbCBvZmZzZXQKKyAgICAvLyBmcm9tIHRoZSBjb250YWlu
aW5nIGJsb2NrIGVkZ2UgaW4gaXRzIG1lYXN1cmVtZW50LiB0ZXh0UG9zaXRpb24oKSBzaG91bGQg
YmUgY29uc2lzdGVudCBzbyB0aGUgdGV4dCBhcmUgcmVuZGVyZWQgaW4gdGhlIHNhbWUgd2lkdGgu
CisgICAgaWYgKCF0ZXh0Qm94LT5sb2dpY2FsTGVmdCgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gdGV4dEJveC0+bG9naWNhbExlZnQoKSAtIHRleHRCb3gtPmxpbmUoKS0+Y29udGVu
dExvZ2ljYWxMZWZ0KCk7Cit9CisKIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRp
b25VbmRlcmxpbmUoY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVybGluZSkKIHsKICAg
ICBmbG9hdCBzdGFydCA9IDA7IC8vIHN0YXJ0IG9mIGxpbmUgdG8gZHJhdywgcmVsYXRpdmUgdG8g
dHgKLSAgICBmbG9hdCB3aWR0aCA9IG1fdGV4dEJveC5sb2dpY2FsV2lkdGgoKTsgLy8gaG93IG11
Y2ggbGluZSB0byBkcmF3CisgICAgZmxvYXQgd2lkdGggPSBtX3RleHRCb3gtPmxvZ2ljYWxXaWR0
aCgpOyAvLyBob3cgbXVjaCBsaW5lIHRvIGRyYXcKICAgICBib29sIHVzZVdob2xlV2lkdGggPSB0
cnVlOwotICAgIHVuc2lnbmVkIHBhaW50U3RhcnQgPSBtX3RleHRCb3guc3RhcnQoKTsKLSAgICB1
bnNpZ25lZCBwYWludEVuZCA9IG1fdGV4dEJveC5lbmQoKTsKKyAgICB1bnNpZ25lZCBwYWludFN0
YXJ0ID0gbV90ZXh0Qm94LT5zdGFydCgpOworICAgIHVuc2lnbmVkIHBhaW50RW5kID0gbV90ZXh0
Qm94LT5lbmQoKTsKICAgICBpZiAocGFpbnRTdGFydCA8PSB1bmRlcmxpbmUuc3RhcnRPZmZzZXQp
IHsKICAgICAgICAgcGFpbnRTdGFydCA9IHVuZGVybGluZS5zdGFydE9mZnNldDsKICAgICAgICAg
dXNlV2hvbGVXaWR0aCA9IGZhbHNlOwotICAgICAgICBzdGFydCA9IG1fcmVuZGVyZXIud2lkdGgo
bV90ZXh0Qm94LnN0YXJ0KCksIHBhaW50U3RhcnQgLSBtX3RleHRCb3guc3RhcnQoKSwgbV90ZXh0
Qm94LnRleHRQb3MoKSwgbV90ZXh0Qm94LmlzRmlyc3RMaW5lKCkpOworICAgICAgICBzdGFydCA9
IG1fcmVuZGVyZXIud2lkdGgobV90ZXh0Qm94LT5zdGFydCgpLCBwYWludFN0YXJ0IC0gbV90ZXh0
Qm94LT5zdGFydCgpLCB0ZXh0UG9zaXRpb24obV90ZXh0Qm94KSwgbV9pc0ZpcnN0TGluZSk7CiAg
ICAgfQogICAgIGlmIChwYWludEVuZCAhPSB1bmRlcmxpbmUuZW5kT2Zmc2V0KSB7CiAgICAgICAg
IHBhaW50RW5kID0gc3RkOjptaW4ocGFpbnRFbmQsICh1bnNpZ25lZCl1bmRlcmxpbmUuZW5kT2Zm
c2V0KTsKICAgICAgICAgdXNlV2hvbGVXaWR0aCA9IGZhbHNlOwogICAgIH0KLSAgICBpZiAobV90
ZXh0Qm94LnRydW5jYXRpb24oKSkgewotICAgICAgICBwYWludEVuZCA9IHN0ZDo6bWluKHBhaW50
RW5kLCBtX3RleHRCb3guc3RhcnQoKSArICptX3RleHRCb3gudHJ1bmNhdGlvbigpKTsKKyAgICBp
ZiAobV9zZWxlY3RhYmxlUmFuZ2UudHJ1bmNhdGlvbikgeworICAgICAgICBwYWludEVuZCA9IHN0
ZDo6bWluKHBhaW50RW5kLCBtX3RleHRCb3gtPnN0YXJ0KCkgKyAqbV9zZWxlY3RhYmxlUmFuZ2Uu
dHJ1bmNhdGlvbik7CiAgICAgICAgIHVzZVdob2xlV2lkdGggPSBmYWxzZTsKICAgICB9CiAgICAg
aWYgKCF1c2VXaG9sZVdpZHRoKSB7Ci0gICAgICAgIHdpZHRoID0gbV9yZW5kZXJlci53aWR0aChw
YWludFN0YXJ0LCBwYWludEVuZCAtIHBhaW50U3RhcnQsIG1fdGV4dEJveC50ZXh0UG9zKCkgKyBz
dGFydCwgbV90ZXh0Qm94LmlzRmlyc3RMaW5lKCkpOwotICAgICAgICBtaXJyb3JSVExTZWdtZW50
KG1fdGV4dEJveC5sb2dpY2FsV2lkdGgoKSwgbV90ZXh0Qm94LmRpcmVjdGlvbigpLCBzdGFydCwg
d2lkdGgpOworICAgICAgICB3aWR0aCA9IG1fcmVuZGVyZXIud2lkdGgocGFpbnRTdGFydCwgcGFp
bnRFbmQgLSBwYWludFN0YXJ0LCB0ZXh0UG9zaXRpb24obV90ZXh0Qm94KSArIHN0YXJ0LCBtX2lz
Rmlyc3RMaW5lKTsKKyAgICAgICAgbWlycm9yUlRMU2VnbWVudChtX3RleHRCb3gtPmxvZ2ljYWxX
aWR0aCgpLCBtX3RleHRCb3gtPmRpcmVjdGlvbigpLCBzdGFydCwgd2lkdGgpOwogICAgIH0KIAog
ICAgIC8vIFRoaWNrIG1hcmtlZCB0ZXh0IHVuZGVybGluZXMgYXJlIDJweCB0aGljayBhcyBsb25n
IGFzIHRoZXJlIGlzIHJvb20gZm9yIHRoZSAycHggbGluZSB1bmRlciB0aGUgYmFzZWxpbmUuCiAg
ICAgLy8gQWxsIG90aGVyIG1hcmtlZCB0ZXh0IHVuZGVybGluZXMgYXJlIDFweCB0aGljay4KICAg
ICAvLyBJZiB0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2UgdGhlIHVuZGVybGluZSB3aWxsIHRvdWNo
IG9yIG92ZXJsYXAgY2hhcmFjdGVycy4KICAgICBpbnQgbGluZVRoaWNrbmVzcyA9IDE7Ci0gICAg
aW50IGJhc2VsaW5lID0gbV90ZXh0Qm94LmxpbmVTdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50
KCk7Ci0gICAgaWYgKHVuZGVybGluZS50aGljayAmJiBtX3RleHRCb3gubG9naWNhbEhlaWdodCgp
IC0gYmFzZWxpbmUgPj0gMikKKyAgICBpbnQgYmFzZWxpbmUgPSBtX3N0eWxlLmZvbnRNZXRyaWNz
KCkuYXNjZW50KCk7CisgICAgaWYgKHVuZGVybGluZS50aGljayAmJiBtX3RleHRCb3gtPmxvZ2lj
YWxIZWlnaHQoKSAtIGJhc2VsaW5lID49IDIpCiAgICAgICAgIGxpbmVUaGlja25lc3MgPSAyOwog
CiAgICAgLy8gV2UgbmVlZCB0byBoYXZlIHNvbWUgc3BhY2UgYmV0d2VlbiB1bmRlcmxpbmVzIG9m
IHN1YnNlcXVlbnQgY2xhdXNlcywgYmVjYXVzZSBzb21lIGlucHV0IG1ldGhvZHMgZG8gbm90IHVz
ZSBkaWZmZXJlbnQgdW5kZXJsaW5lIHN0eWxlcyBmb3IgdGhvc2UuCkBAIC00NTUsMTIgKzQ3NSwx
MiBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKGNvbnN0
IENvbXBvc2l0aW9uVW5kZXJsaW5lJiB1bmRlcgogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCA9IG1fcGFpbnRJbmZvLmNvbnRleHQoKTsKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHVu
ZGVybGluZUNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhsaW5lVGhpY2tu
ZXNzKTsKLSAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9hdFJlY3QobV9wYWludFJlY3Qu
eCgpICsgc3RhcnQsIG1fcGFpbnRSZWN0LnkoKSArIG1fdGV4dEJveC5sb2dpY2FsSGVpZ2h0KCkg
LSBsaW5lVGhpY2tuZXNzLCB3aWR0aCwgbGluZVRoaWNrbmVzcyksIG1fZG9jdW1lbnQucHJpbnRp
bmcoKSk7CisgICAgY29udGV4dC5kcmF3TGluZUZvclRleHQoRmxvYXRSZWN0KG1fcGFpbnRSZWN0
LngoKSArIHN0YXJ0LCBtX3BhaW50UmVjdC55KCkgKyBtX3RleHRCb3gtPmxvZ2ljYWxIZWlnaHQo
KSAtIGxpbmVUaGlja25lc3MsIHdpZHRoLCBsaW5lVGhpY2tuZXNzKSwgbV9kb2N1bWVudC5wcmlu
dGluZygpKTsKIH0KIAogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50
TWFya2VycygpCiB7Ci0gICAgYXV0byBtYXJrZWRUZXh0cyA9IE1hcmtlZFRleHQ6OmNvbGxlY3RG
b3JEb2N1bWVudE1hcmtlcnMobV9yZW5kZXJlciwgbV90ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgp
LCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uKTsKKyAgICBhdXRvIG1hcmtlZFRl
eHRzID0gTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2VycyhtX3JlbmRlcmVyLCBt
X3NlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6RGVjb3JhdGlvbik7CiAg
ICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogTWFya2VkVGV4dDo6c3ViZGl2aWRlKG1hcmtlZFRl
eHRzLCBNYXJrZWRUZXh0OjpPdmVybGFwU3RyYXRlZ3k6OkZyb250bW9zdCkpCiAgICAgICAgIHBh
aW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcihtYXJrZWRUZXh0KTsKIH0KQEAgLTQ3MSw3ICs0OTEs
NyBAQCBGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZVVuaW9uT2ZBbGxEb2N1bWVu
dE1hcmtlckJvdW5kcyhjb25zdCBMZWdhY3lJbgogICAgIEZsb2F0UmVjdCByZXN1bHQ7CiAgICAg
YXV0byBtYXJrZWRUZXh0cyA9IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMo
dGV4dEJveC5yZW5kZXJlcigpLCB0ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpLCBNYXJrZWRUZXh0
OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uKTsKICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBN
YXJrZWRUZXh0OjpzdWJkaXZpZGUobWFya2VkVGV4dHMsIE1hcmtlZFRleHQ6Ok92ZXJsYXBTdHJh
dGVneTo6RnJvbnRtb3N0KSkKLSAgICAgICAgcmVzdWx0ID0gdW5pb25SZWN0KHJlc3VsdCwgY2Fs
Y3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHModGV4dEJveCwgbWFya2VkVGV4dCkpOworICAgICAg
ICByZXN1bHQgPSB1bmlvblJlY3QocmVzdWx0LCBjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5k
cyhMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bkZvcigmdGV4dEJveCksIG1hcmtlZFRleHQpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01MDksMTMgKzUyOSwxMiBAQCB2b2lkIFRleHRC
b3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoY29uc3QgTWFya2VkVGV4dCYg
bWFya2VkVGV4dCkKICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihib3VuZHMsIGxpbmVTdHlsZUZvck1hcmtlZFRleHRUeXBlKCkpOwogfQogCi1GbG9h
dFJlY3QgVGV4dEJveFBhaW50ZXI6OmNvbXB1dGVQYWludFJlY3QoY29uc3QgTGVnYWN5SW5saW5l
VGV4dEJveCYgdGV4dEJveCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQorRmxvYXRS
ZWN0IFRleHRCb3hQYWludGVyOjpjb21wdXRlUGFpbnRSZWN0KGNvbnN0IExheW91dFBvaW50JiBw
YWludE9mZnNldCkKIHsKICAgICBGbG9hdFBvaW50IGxvY2FsUGFpbnRPZmZzZXQocGFpbnRPZmZz
ZXQpOwogCi0gICAgaWYgKHRleHRCb3gudHJ1bmNhdGlvbigpKSB7Ci0gICAgICAgIGF1dG8mIHJl
bmRlcmVyID0gdGV4dEJveC5yZW5kZXJlcigpOwotICAgICAgICBpZiAocmVuZGVyZXIuY29udGFp
bmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICE9IHRleHRCb3gu
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CisgICAgaWYgKG1fc2VsZWN0YWJsZVJhbmdlLnRy
dW5jYXRpb24pIHsKKyAgICAgICAgaWYgKG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0
eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICE9IG1fdGV4dEJveC0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKSB7CiAgICAgICAgICAgICAvLyBNYWtlIHRoZSB2aXNpYmxlIGZyYWdtZW50
IG9mIHRleHQgaHVnIHRoZSBlZGdlIGNsb3Nlc3QgdG8gdGhlIHJlc3Qgb2YgdGhlIHJ1biBieSBt
b3ZpbmcgdGhlIG9yaWdpbgogICAgICAgICAgICAgLy8gYXQgd2hpY2ggd2Ugc3RhcnQgZHJhd2lu
ZyB0ZXh0LgogICAgICAgICAgICAgLy8gZS5nLiBJbiB0aGUgY2FzZSBvZiBMVFIgdGV4dCB0cnVu
Y2F0ZWQgaW4gYW4gUlRMIENvbnRleHQsIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGlzOgpAQCAtNTI0
LDM3ICs1NDMsOTkgQEAgRmxvYXRSZWN0IFRleHRCb3hQYWludGVyOjpjb21wdXRlUGFpbnRSZWN0
KGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmIHRleHRCb3gsIGMKICAgICAgICAgICAgIC8vIGZh
cnRoZXIgdG8gdGhlIHJpZ2h0LgogICAgICAgICAgICAgLy8gTk9URTogV2ViS2l0J3MgYmVoYXZp
b3IgZGlmZmVycyBmcm9tIHRoYXQgb2YgSUUgd2hpY2ggYXBwZWFycyB0byBqdXN0IG92ZXJsYXkg
dGhlIGVsbGlwc2lzIG9uIHRvcCBvZiB0aGUKICAgICAgICAgICAgIC8vIHRydW5jYXRlZCBzdHJp
bmcgaS5lLiAgfEhlbGxvfENCQXwgLT4gfC4uLmxvfENCQXwKLSAgICAgICAgICAgIExheW91dFVu
aXQgd2lkdGhPZlZpc2libGVUZXh0IHsgcmVuZGVyZXIud2lkdGgodGV4dEJveC5zdGFydCgpLCAq
dGV4dEJveC50cnVuY2F0aW9uKCksIHRleHRCb3gudGV4dFBvcygpLCB0ZXh0Qm94LmlzRmlyc3RM
aW5lKCkpIH07Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHdpZHRoT2ZIaWRkZW5UZXh0IHsgdGV4
dEJveC5sb2dpY2FsV2lkdGgoKSAtIHdpZHRoT2ZWaXNpYmxlVGV4dCB9OwotICAgICAgICAgICAg
TGF5b3V0U2l6ZSB0cnVuY2F0aW9uT2Zmc2V0KHRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gd2lkdGhPZkhpZGRlblRleHQgOiAtd2lkdGhPZkhpZGRlblRleHQsIDBfbHUpOwotICAg
ICAgICAgICAgbG9jYWxQYWludE9mZnNldC5tb3ZlKHRleHRCb3guaXNIb3Jpem9udGFsKCkgPyB0
cnVuY2F0aW9uT2Zmc2V0IDogdHJ1bmNhdGlvbk9mZnNldC50cmFuc3Bvc2VkU2l6ZSgpKTsKKyAg
ICAgICAgICAgIExheW91dFVuaXQgd2lkdGhPZlZpc2libGVUZXh0IHsgbV9yZW5kZXJlci53aWR0
aChtX3RleHRCb3gtPnN0YXJ0KCksICptX3NlbGVjdGFibGVSYW5nZS50cnVuY2F0aW9uLCB0ZXh0
UG9zaXRpb24obV90ZXh0Qm94KSwgbV9pc0ZpcnN0TGluZSkgfTsKKyAgICAgICAgICAgIExheW91
dFVuaXQgd2lkdGhPZkhpZGRlblRleHQgeyBtX3RleHRCb3gtPmxvZ2ljYWxXaWR0aCgpIC0gd2lk
dGhPZlZpc2libGVUZXh0IH07CisgICAgICAgICAgICBMYXlvdXRTaXplIHRydW5jYXRpb25PZmZz
ZXQobV90ZXh0Qm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyB3aWR0aE9mSGlkZGVuVGV4
dCA6IC13aWR0aE9mSGlkZGVuVGV4dCwgMF9sdSk7CisgICAgICAgICAgICBsb2NhbFBhaW50T2Zm
c2V0Lm1vdmUobV9pc0hvcml6b250YWwgPyB0cnVuY2F0aW9uT2Zmc2V0IDogdHJ1bmNhdGlvbk9m
ZnNldC50cmFuc3Bvc2VkU2l6ZSgpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGxvY2FsUGFp
bnRPZmZzZXQubW92ZSgwLCB0ZXh0Qm94LmxpbmVTdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyAwIDogLXRleHRCb3gubG9naWNhbEhlaWdodCgpKTsKKyAgICBsb2NhbFBhaW50T2Zm
c2V0Lm1vdmUoMCwgbV9zdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gMCA6IC1tX3Rl
eHRCb3gtPmxvZ2ljYWxIZWlnaHQoKSk7CiAKLSAgICBGbG9hdFBvaW50IGJveE9yaWdpbiA9IHRl
eHRCb3gubG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygpOworICAgIGF1dG8gbG9jYXRpb25JbmNs
dWRpbmdGbGlwcGluZyA9IFsmXSgpIC0+IEZsb2F0UG9pbnQgeworICAgICAgICBhdXRvIHJlY3Qg
PSBtX3RleHRCb3gtPnJlY3QoKTsKKyAgICAgICAgaWYgKCFtX3N0eWxlLmlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVjdC5sb2NhdGlvbigpOworICAg
ICAgICBhdXRvJiBibG9jayA9IG1fdGV4dEJveC0+bGluZSgpLT5jb250YWluaW5nQmxvY2soKTsK
KyAgICAgICAgaWYgKGJsb2NrLnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiB7IHJlY3QueCgpLCBibG9jay5oZWlnaHQoKSAtIHJlY3QuaGVpZ2h0
KCkgLSByZWN0LnkoKSB9OworICAgICAgICByZXR1cm4geyBibG9jay53aWR0aCgpIC0gcmVjdC53
aWR0aCgpIC0gcmVjdC54KCksIHJlY3QueSgpIH07CisgICAgfTsKKworICAgIEZsb2F0UG9pbnQg
Ym94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygpOwogICAgIGJveE9yaWdpbi5t
b3ZlQnkobG9jYWxQYWludE9mZnNldCk7Ci0gICAgcmV0dXJuIHsgYm94T3JpZ2luLCBGbG9hdFNp
emUodGV4dEJveC5sb2dpY2FsV2lkdGgoKSwgdGV4dEJveC5sb2dpY2FsSGVpZ2h0KCkpIH07Cisg
ICAgcmV0dXJuIHsgYm94T3JpZ2luLCBGbG9hdFNpemUobV90ZXh0Qm94LT5sb2dpY2FsV2lkdGgo
KSwgbV90ZXh0Qm94LT5sb2dpY2FsSGVpZ2h0KCkpIH07CiB9CiAKLUZsb2F0UmVjdCBUZXh0Qm94
UGFpbnRlcjo6Y2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgTGVnYWN5SW5saW5l
VGV4dEJveCYgdGV4dEJveCwgY29uc3QgTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKK3N0YXRpYyBj
b25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGVGb3IoY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlclN0eWxlJiB0ZXh0Qm94U3R5bGUpCiB7Ci0gICAgYXV0byYgZm9udCA9
IHRleHRCb3gubGluZUZvbnQoKTsKKyAgICBpZiAoaXM8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRl
cmVyKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJl
cikudGV4dENvbWJpbmVGb250KCk7CisKKyAgICByZXR1cm4gdGV4dEJveFN0eWxlLmZvbnRDYXNj
YWRlKCk7Cit9CisKK0Zsb2F0UmVjdCBUZXh0Qm94UGFpbnRlcjo6Y2FsY3VsYXRlRG9jdW1lbnRN
YXJrZXJCb3VuZHMoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciYgdGV4
dEJveCwgY29uc3QgTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKK3sKKyAgICBhdXRvJiBmb250ID0g
Zm9udENhc2NhZGVGb3IodGV4dEJveC0+cmVuZGVyZXIoKSwgdGV4dEJveC0+c3R5bGUoKSk7CiAg
ICAgYXV0byBhc2NlbnQgPSBmb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CiAgICAgYXV0byBm
b250U2l6ZSA9IHN0ZDo6bWluKHN0ZDo6bWF4KGZvbnQuc2l6ZSgpLCAxMC4wZiksIDQwLjBmKTsK
ICAgICBhdXRvIHkgPSBhc2NlbnQgKyAwLjExMDM1ICogZm9udFNpemU7CiAgICAgYXV0byBoZWln
aHQgPSAwLjEzMjQ3ICogZm9udFNpemU7CiAKICAgICAvLyBBdm9pZCBtZWFzdXJpbmcgdGhlIHRl
eHQgd2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVkIGFzIGFuIG9wdGltaXphdGlv
bi4KLSAgICBpZiAobWFya2VkVGV4dC5zdGFydE9mZnNldCB8fCBtYXJrZWRUZXh0LmVuZE9mZnNl
dCAhPSB0ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKHRleHRCb3guZW5kKCkpKSB7Ci0g
ICAgICAgIFRleHRSdW4gcnVuID0gdGV4dEJveC5jcmVhdGVUZXh0UnVuKCk7CisgICAgaWYgKG1h
cmtlZFRleHQuc3RhcnRPZmZzZXQgfHwgbWFya2VkVGV4dC5lbmRPZmZzZXQgIT0gdGV4dEJveC0+
c2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAodGV4dEJveC0+ZW5kKCkpKSB7CisgICAgICAgIFRleHRS
dW4gcnVuID0gdGV4dEJveC0+Y3JlYXRlVGV4dFJ1bigpOwogICAgICAgICBMYXlvdXRSZWN0IHNl
bGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KDAsIHksIDAsIGhlaWdodCk7Ci0gICAgICAgIHRleHRC
b3gubGluZUZvbnQoKS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHNlbGVjdGlvblJl
Y3QsIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKKyAgICAg
ICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHNlbGVjdGlvblJlY3QsIG1h
cmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKICAgICAgICAgcmV0
dXJuIHNlbGVjdGlvblJlY3Q7CiAgICAgfQogCi0gICAgcmV0dXJuIEZsb2F0UmVjdCgwLCB5LCB0
ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpLCBoZWlnaHQpOworICAgIHJldHVybiBGbG9hdFJlY3QoMCwg
eSwgdGV4dEJveC0+bG9naWNhbFdpZHRoKCksIGhlaWdodCk7CiB9CiAKK2Jvb2wgVGV4dEJveFBh
aW50ZXI6OmNvbXB1dGVIYXZlU2VsZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9pc1ByaW50
aW5nIHx8IG1fcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OlRleHRDbGlwKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9yZW5kZXJlci52aWV3KCkuc2VsZWN0aW9u
KCkuaGlnaGxpZ2h0U3RhdGVGb3JUZXh0Qm94KG1fcmVuZGVyZXIsIG1fc2VsZWN0YWJsZVJhbmdl
KSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lOworfQorCitjb25zdCBSZW5k
ZXJDb21iaW5lVGV4dCogVGV4dEJveFBhaW50ZXI6OmNvbWJpbmVkVGV4dCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGlzPFJlbmRlckNvbWJpbmVUZXh0PihtX3JlbmRlcmVyKSA/ICZkb3duY2FzdDxS
ZW5kZXJDb21iaW5lVGV4dD4obV9yZW5kZXJlcikgOiBudWxscHRyOworfQorCitjb25zdCBGb250
Q2FzY2FkZSYgVGV4dEJveFBhaW50ZXI6OmZvbnRDYXNjYWRlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZm9udENhc2NhZGVGb3IobV9yZW5kZXJlciwgbV9zdHlsZSk7Cit9CisKK0Zsb2F0UG9pbnQg
VGV4dEJveFBhaW50ZXI6OnRleHRPcmlnaW5Gcm9tUGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cGFpbnRSZWN0KSBjb25zdAoreworICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbiB7IHBhaW50UmVj
dC54KCksIHBhaW50UmVjdC55KCkgKyBmb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkgfTsKKyAgICBpZiAoYXV0byogY29tYmluZWRUZXh0ID0gdGhpcy0+Y29tYmluZWRUZXh0KCkp
IHsKKyAgICAgICAgaWYgKGF1dG8gbmV3T3JpZ2luID0gY29tYmluZWRUZXh0LT5jb21wdXRlVGV4
dE9yaWdpbihwYWludFJlY3QpKQorICAgICAgICAgICAgdGV4dE9yaWdpbiA9IG5ld09yaWdpbi52
YWx1ZSgpOworICAgIH0KKyAgICBpZiAobV9pc0hvcml6b250YWwpCisgICAgICAgIHRleHRPcmln
aW4uc2V0WShyb3VuZFRvRGV2aWNlUGl4ZWwoTGF5b3V0VW5pdCB7IHRleHRPcmlnaW4ueSgpIH0s
IG1fcmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgZWxzZQor
ICAgICAgICB0ZXh0T3JpZ2luLnNldFgocm91bmRUb0RldmljZVBpeGVsKExheW91dFVuaXQgeyB0
ZXh0T3JpZ2luLngoKSB9LCBtX3JlbmRlcmVyLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSkpOworICAgIHJldHVybiB0ZXh0T3JpZ2luOworfQorCitjb25zdCBTaGFkb3dEYXRhKiBUZXh0
Qm94UGFpbnRlcjo6ZGVidWdUZXh0U2hhZG93KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcmVuZGVy
ZXIuc2V0dGluZ3MoKS5sZWdhY3lMaW5lTGF5b3V0VmlzdWFsQ292ZXJhZ2VFbmFibGVkKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghbV90ZXh0Qm94LT5sZWdhY3lJbmxpbmVC
b3goKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8U2hhZG93RGF0YT4gZGVidWdUZXh0U2hhZG93KEludFBvaW50KDAsIDApLCAxMCwgMjAsIFNo
YWRvd1N0eWxlOjpOb3JtYWwsIHRydWUsIFNSR0JBPHVpbnQ4X3Q+IHsgMTUwLCAwLCAwLCAxOTAg
fSk7CisgICAgcmV0dXJuICZkZWJ1Z1RleHRTaGFkb3cuZ2V0KCk7Cit9CisKKwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuaAppbmRleCAxNmM5Y2UyMzYwOWQyMDYy
ZDFmMWNjZjM1YzA5NjUzY2RkNDZkYmJlLi5jMjBjMmRjNzYxMjJkMjMwNWE2MzE2YjJjNzU1MjBl
NjhkMzMyZWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBh
aW50ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuaApA
QCAtMjUsMTMgKzI1LDIwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJUZXh0Qm94U2VsZWN0YWJsZVJhbmdlLmgiCisjaW5j
bHVkZSAiVGV4dFJ1bi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbG9yOwog
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBMZWdhY3lJbmxpbmVUZXh0Qm94OworY2xhc3MgUmVuZGVy
Q29tYmluZVRleHQ7CitjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFJlbmRlclRleHQ7CitjbGFz
cyBTaGFkb3dEYXRhOwogc3RydWN0IENvbXBvc2l0aW9uVW5kZXJsaW5lOwogc3RydWN0IE1hcmtl
ZFRleHQ7CiBzdHJ1Y3QgUGFpbnRJbmZvOwpAQCAtNDAsNiArNDcsNyBAQCBzdHJ1Y3QgU3R5bGVk
TWFya2VkVGV4dDsKIGNsYXNzIFRleHRCb3hQYWludGVyIHsKIHB1YmxpYzoKICAgICBUZXh0Qm94
UGFpbnRlcihjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKKyAgICBUZXh0Qm94UGFpbnRlcihjb25zdCBMYXlvdXRJ
bnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudCYsIGNvbnN0IExheW91dDo6UnVuJiwgUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKICAgICB+VGV4dEJveFBhaW50ZXIo
KTsKIAogICAgIHZvaWQgcGFpbnQoKTsKQEAgLTQ3LDYgKzU1LDggQEAgcHVibGljOgogICAgIHN0
YXRpYyBGbG9hdFJlY3QgY2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKGNv
bnN0IExlZ2FjeUlubGluZVRleHRCb3gmKTsKIAogcHJpdmF0ZToKKyAgICBUZXh0Qm94UGFpbnRl
cihjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yJiwgUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKKwogICAgIHZvaWQgcGFpbnRCYWNrZ3Jv
dW5kKCk7CiAgICAgdm9pZCBwYWludEZvcmVncm91bmRBbmREZWNvcmF0aW9ucygpOwogICAgIHZv
aWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoKTsKQEAgLTYxLDE4ICs3MSwzMiBAQCBwcml2
YXRlOgogICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvblVuZGVybGluZShjb25zdCBDb21wb3NpdGlv
blVuZGVybGluZSYpOwogICAgIHZvaWQgcGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKGNvbnN0
IE1hcmtlZFRleHQmKTsKIAotICAgIHN0YXRpYyBGbG9hdFJlY3QgY29tcHV0ZVBhaW50UmVjdChj
b25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KTsKLSAgICBzdGF0aWMgRmxvYXRSZWN0IGNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNv
bnN0IExlZ2FjeUlubGluZVRleHRCb3gmLCBjb25zdCBNYXJrZWRUZXh0Jik7CisgICAgc3RhdGlj
IEZsb2F0UmVjdCBjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBMYXlvdXRJbnRl
Z3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yJiwgY29uc3QgTWFya2VkVGV4dCYpOworCisgICAgRmxv
YXRSZWN0IGNvbXB1dGVQYWludFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsK
KyAgICBib29sIGNvbXB1dGVIYXZlU2VsZWN0aW9uKCkgY29uc3Q7CisgICAgTWFya2VkVGV4dCBj
cmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KCk7CisgICAgY29uc3QgUmVuZGVyQ29t
YmluZVRleHQqIGNvbWJpbmVkVGV4dCgpIGNvbnN0OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250Q2FzY2FkZSgpIGNvbnN0OworICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbkZyb21QYWludFJl
Y3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisKKyAgICBjb25zdCBTaGFkb3dEYXRhKiBkZWJ1
Z1RleHRTaGFkb3coKSBjb25zdDsKIAotICAgIGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmIG1f
dGV4dEJveDsKKyAgICBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yIG1f
dGV4dEJveDsKICAgICBjb25zdCBSZW5kZXJUZXh0JiBtX3JlbmRlcmVyOwogICAgIGNvbnN0IERv
Y3VtZW50JiBtX2RvY3VtZW50OworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX3N0eWxlOworICAg
IGNvbnN0IFRleHRSdW4gbV9wYWludFRleHRSdW47CiAgICAgUGFpbnRJbmZvJiBtX3BhaW50SW5m
bzsKKyAgICBjb25zdCBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlIG1fc2VsZWN0YWJsZVJhbmdlOwog
ICAgIGNvbnN0IEZsb2F0UmVjdCBtX3BhaW50UmVjdDsKKyAgICBjb25zdCBib29sIG1faXNGaXJz
dExpbmU7CisgICAgY29uc3QgYm9vbCBtX2lzSG9yaXpvbnRhbDsKICAgICBjb25zdCBib29sIG1f
aXNQcmludGluZzsKICAgICBjb25zdCBib29sIG1faGF2ZVNlbGVjdGlvbjsKICAgICBjb25zdCBi
b29sIG1fY29udGFpbnNDb21wb3NpdGlvbjsKICAgICBjb25zdCBib29sIG1fdXNlQ3VzdG9tVW5k
ZXJsaW5lczsKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IG1fZW1waGFzaXNNYXJrRXhpc3RzQW5k
SXNBYm92ZSB7IH07CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438585</attachid>
            <date>2021-09-19 02:48:20 -0700</date>
            <delta_ts>2021-09-19 03:39:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230455-20210919124818.patch</filename>
            <type>text/plain</type>
            <size>49305</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyNzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGM4MGU5ZGIzMDE4N2Zj
NDAwMjlhYWM3ZmU0NTg1MGVkOTQ0OTgyNS4uYWVmNDIzZTg0MjM2Nzg3NzhkNmE1MjlkYmFmMzFh
OTIyNTI0MjhiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDIxLTA5LTE5ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlv
bl0gUGFpbnQgTEZDIHRleHQgcnVucyB3aXRoIFRleHRCb3hQYWludGVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA0NTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgZ2l2ZSBMRkMgcGF0
aCBhbGwgdGhlIHNhbWUgcGFpbnRpbmcgZmVhdHVyZXMgKGluY2x1ZGluZyBzZWxlY3Rpb25zLCBt
YXJrZXJzIGV0YykgdGhhdAorICAgICAgICB0aGUgbGVnYWN5IHBhdGggaGFzLiBUaGlzIHBhdGNo
IGRvZXMgbm90IGVuYWJsZSBhbnkgbmV3IGZlYXR1cmVzIHlldC4KKworICAgICAgICAqIGxheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OnBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpwYWludFRleHRSdW5Vc2lu
Z1BoeXNpY2FsQ29vcmRpbmF0ZXMpOgorCisgICAgICAgIFVzZSBUZXh0Qm94UGFpbnRlci4KKwor
ICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94Ojp0ZXh0T3JpZ2luRnJvbUJveFJlY3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6ZGVi
dWdUZXh0U2hhZG93IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5
SW5saW5lVGV4dEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIpOgorCisg
ICAgICAgIFRleHRCb3hQYWludGVyIG5vdyB1c2VzIHRoZSBpbmxpbmUgaXRlcmF0b3IgaW5zdGVh
ZCBvZiBkaXJlY3RseSBhY2Nlc3NpbmcgTGVnYWN5SW5saW5lVGV4dEJveC4KKworICAgICAgICAo
V2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRC
b3hQYWludGVyOjpjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uQmFja2dyb3Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludERlY29yYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2Vycyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50
TWFya2VyQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjb21wdXRl
UGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRDYXNjYWRlRm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6Y29tcHV0ZUhhdmVTZWxlY3Rpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OmNvbWJpbmVkVGV4dCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6Zm9udENhc2NhZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnRleHRPcmlnaW5Gcm9tUGFp
bnRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpkZWJ1Z1Rl
eHRTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFya2VkVGV4dEZyb21T
ZWxlY3Rpb25JbkJveCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWlu
dGVyLmg6CisKIDIwMjEtMDktMTcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgTW92ZSBzY3JvbGxiYXItcmVsYXRlZCBjb2RlIG91dCBvZiBTY3JvbGxB
bmltYXRvciBhbmQgaW50byBTY3JvbGxiYXJzQ29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25M
aW5lTGF5b3V0LmNwcAppbmRleCBkMjJmNzA3NTY3ZWE1YmI1MWMzMDM5MGIyNzVhMGQ1MmM5NGZk
ZmI0Li4wNjIyYmZiOTUxY2JjNDFiYjZkOWZlMDg5NDY4ZjM3MTFjZTU2ZWRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5l
TGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcApAQCAtNTMsOCArNTMsOCBAQAogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJUZXh0Qm94UGFpbnRlci5oIgogI2luY2x1ZGUgIlRl
eHREZWNvcmF0aW9uUGFpbnRlci5oIgotI2luY2x1ZGUgIlRleHRQYWludGVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7CkBAIC01MDEsOSAr
NTAxLDExIEBAIHZvaWQgTGluZUxheW91dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICBmb3IgKGF1dG8mIHJ1biA6IG1faW5s
aW5lQ29udGVudC0+cnVuc0ZvclJlY3QocGFpbnRSZWN0KSkgewogICAgICAgICBpZiAocnVuLmlz
SW5saW5lQm94KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJ1bi50ZXh0
KCkpCi0gICAgICAgICAgICBwYWludFRleHRSdW5Vc2luZ1BoeXNpY2FsQ29vcmRpbmF0ZXMocGFp
bnRJbmZvLCBwYWludE9mZnNldCwgbV9pbmxpbmVDb250ZW50LT5saW5lRm9yUnVuKHJ1biksIHJ1
bik7Ci0gICAgICAgIGVsc2UgaWYgKGF1dG8mIHJlbmRlcmVyID0gbV9ib3hUcmVlLnJlbmRlcmVy
Rm9yTGF5b3V0Qm94KHJ1bi5sYXlvdXRCb3goKSk7IGlzPFJlbmRlckJveD4ocmVuZGVyZXIpICYm
IHJlbmRlcmVyLmlzUmVwbGFjZWQoKSkgeworICAgICAgICBpZiAocnVuLnRleHQoKSkgeworICAg
ICAgICAgICAgcGFpbnRUZXh0UnVuVXNpbmdQaHlzaWNhbENvb3JkaW5hdGVzKHBhaW50SW5mbywg
cGFpbnRPZmZzZXQsIHJ1bik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoYXV0byYgcmVuZGVyZXIgPSBtX2JveFRyZWUucmVuZGVyZXJGb3JMYXlvdXRCb3go
cnVuLmxheW91dEJveCgpKTsgaXM8UmVuZGVyQm94PihyZW5kZXJlcikgJiYgcmVuZGVyZXIuaXNS
ZXBsYWNlZCgpKSB7CiAgICAgICAgICAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKTsKICAgICAgICAgICAgIGlmICghcmVuZGVyQm94Lmhhc1NlbGZQYWlu
dGluZ0xheWVyKCkgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChyZW5kZXJCb3gp
KQogICAgICAgICAgICAgICAgIHJlbmRlckJveC5wYWludEFzSW5saW5lQmxvY2socGFpbnRJbmZv
LCBwYWludE9mZnNldCk7CkBAIC01NzAsNyArNTcyLDcgQEAgdm9pZCBMaW5lTGF5b3V0OjpyZWxl
YXNlQ2FjaGVzKCkKICAgICAgICAgbV9pbmxpbmVDb250ZW50LT5yZWxlYXNlQ2FjaGVzKCk7CiB9
CiAKLXZvaWQgTGluZUxheW91dDo6cGFpbnRUZXh0UnVuVXNpbmdQaHlzaWNhbENvb3JkaW5hdGVz
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNv
bnN0IExpbmUmIGxpbmUsIGNvbnN0IExheW91dDo6UnVuJiBydW4pCit2b2lkIExpbmVMYXlvdXQ6
OnBhaW50VGV4dFJ1blVzaW5nUGh5c2ljYWxDb29yZGluYXRlcyhQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXQ6OlJ1biYgcnVu
KQogewogICAgIGF1dG8mIHN0eWxlID0gcnVuLnN0eWxlKCk7CiAgICAgaWYgKHJ1bi5zdHlsZSgp
LnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlKQpAQCAtNjA0LDQ5ICs2MDYsOCBA
QCB2b2lkIExpbmVMYXlvdXQ6OnBhaW50VGV4dFJ1blVzaW5nUGh5c2ljYWxDb29yZGluYXRlcyhQ
YWludEluZm8mIHBhaW50SW5mbywgY29ucwogICAgIGlmIChkYW1hZ2VkUmVjdC55KCkgPiB2aXN1
YWxPdmVyZmxvd1JlY3QubWF4WSgpIHx8IGRhbWFnZWRSZWN0Lm1heFkoKSA8IHZpc3VhbE92ZXJm
bG93UmVjdC55KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwYWludEluZm8uZXZlbnRS
ZWdpb25Db250ZXh0KSB7Ci0gICAgICAgIGlmIChzdHlsZS5wb2ludGVyRXZlbnRzKCkgIT0gUG9p
bnRlckV2ZW50czo6Tm9uZSkgewotICAgICAgICAgICAgdmlzdWFsT3ZlcmZsb3dSZWN0Lm1vdmVC
eShwaHlzaWNhbFBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAgIHBhaW50SW5mby5ldmVudFJlZ2lv
bkNvbnRleHQtPnVuaXRlKGVuY2xvc2luZ0ludFJlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KSwgc3R5
bGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiBwYWlu
dENvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGF1dG8gZXhwYW5zaW9uID0gcnVu
LmV4cGFuc2lvbigpOwotICAgIC8vIFRleHRSdW4gZXhwZWN0cyB0aGUgeFBvcyB0byBiZSBhZGp1
c3RlZCB3aXRoIHRoZSBhbGlnbWVudCBvZmZzZXQgKGUuZy4gd2hlbiB0aGUgbGluZSBpcyBjZW50
ZXIgYWxpZ25lZAotICAgIC8vIGFuZCB0aGUgcnVuIHN0YXJ0cyBhdCAxMDBweCwgZHVlIHRvIHRo
ZSBob3Jpem9udGFsIGFsaWdtZW50LCB0aGUgeHBvcyBpcyBzdXBwb3NlZCB0byBiZSBhdCAwcHgp
LgotICAgIGF1dG8mIGZvbnRDYXNjYWRlID0gc3R5bGUuZm9udENhc2NhZGUoKTsKLSAgICBhdXRv
IHhQb3MgPSBydW4ubG9naWNhbFJlY3QoKS5sZWZ0KCkgLSAobGluZS5saW5lQm94TGVmdCgpICsg
bGluZS5jb250ZW50TGVmdCgpKTsKLSAgICBhdXRvIHRleHRSdW4gPSBXZWJDb3JlOjpUZXh0UnVu
IHsgdGV4dENvbnRlbnQucmVuZGVyZWRDb250ZW50KCksIHhQb3MsIGV4cGFuc2lvbi5ob3Jpem9u
dGFsRXhwYW5zaW9uLCBleHBhbnNpb24uYmVoYXZpb3IgfTsKLSAgICB0ZXh0UnVuLnNldFRhYlNp
emUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50YWJTaXplKCkpOwotCi0gICAg
YXV0byB0ZXh0UGFpbnRlciA9IFRleHRQYWludGVyIHsgcGFpbnRDb250ZXh0IH07Ci0gICAgdGV4
dFBhaW50ZXIuc2V0Rm9udChmb250Q2FzY2FkZSk7Ci0gICAgdGV4dFBhaW50ZXIuc2V0U3R5bGUo
Y29tcHV0ZVRleHRQYWludFN0eWxlKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5mcmFtZSgpLCBzdHls
ZSwgcGFpbnRJbmZvKSk7Ci0gICAgdGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVl
ZGVkKHJ1biwgcGFpbnRJbmZvLCBmb250Q2FzY2FkZSwgcGFpbnRDb250ZXh0LCB0ZXh0UnVuKTsK
LQotICAgIC8vIFBhaW50aW5nIHVzZXMgb25seSBwaHlzaWNhbCBjb29yZGluYXRlcy4KLSAgICB7
Ci0gICAgICAgIGF1dG8gcnVuUmVjdCA9IHBoeXNpY2FsUmVjdChydW4ubG9naWNhbFJlY3QoKSk7
Ci0gICAgICAgIGF1dG8gYm94UmVjdCA9IEZsb2F0UmVjdCB7IEZsb2F0UG9pbnQgeyBwaHlzaWNh
bFBhaW50T2Zmc2V0LngoKSArIHJ1blJlY3QueCgpLCBwaHlzaWNhbFBhaW50T2Zmc2V0LnkoKSAr
IHJ1blJlY3QueSgpIH0sIHJ1blJlY3Quc2l6ZSgpIH07Ci0gICAgICAgIGF1dG8gdGV4dE9yaWdp
biA9IEZsb2F0UG9pbnQgeyBib3hSZWN0LngoKSwgcm91bmRUb0RldmljZVBpeGVsKGJveFJlY3Qu
eSgpICsgZm9udENhc2NhZGUuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSwgZm9ybWF0dGluZ0NvbnRl
eHRSb290LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkgfTsKLQotICAgICAgICBhdXRv
IHNob3VsZFJvdGF0ZSA9ICFibG9ja0lzSG9yaXpvbnRhbFdyaXRpbmc7Ci0gICAgICAgIGlmIChz
aG91bGRSb3RhdGUpCi0gICAgICAgICAgICBwYWludENvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9u
KGJveFJlY3QsIENsb2Nrd2lzZSkpOwotICAgICAgICB0ZXh0UGFpbnRlci5wYWludCh0ZXh0UnVu
LCBydW5SZWN0LCB0ZXh0T3JpZ2luKTsKLQotICAgICAgICBpZiAoIXN0eWxlLnRleHREZWNvcmF0
aW9uc0luRWZmZWN0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhdXRvJiB0ZXh0UmVuZGVy
ZXIgPSBkb3duY2FzdDxSZW5kZXJUZXh0PihtX2JveFRyZWUucmVuZGVyZXJGb3JMYXlvdXRCb3go
cnVuLmxheW91dEJveCgpKSk7Ci0gICAgICAgICAgICBhdXRvIGRlY29yYXRpb25QYWludGVyID0g
VGV4dERlY29yYXRpb25QYWludGVyIHsgcGFpbnRDb250ZXh0LCBzdHlsZS50ZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCgpLCB0ZXh0UmVuZGVyZXIsIGZhbHNlLCBmb250Q2FzY2FkZSB9OwotICAgICAg
ICAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFJ1bkl0ZXJhdG9yKHRleHRSdW5Gb3IoKm1f
aW5saW5lQ29udGVudCwgcnVuKSk7Ci0gICAgICAgICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRX
aWR0aChydW5SZWN0LndpZHRoKCkpOwotICAgICAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIucGFp
bnRUZXh0RGVjb3JhdGlvbih0ZXh0UnVuLCB0ZXh0T3JpZ2luLCBydW5SZWN0LmxvY2F0aW9uKCkg
KyBwaHlzaWNhbFBhaW50T2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2hvdWxkUm90
YXRlKQotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5jb25jYXRDVE0ocm90YXRpb24o
Ym94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwotICAgIH0KKyAgICBUZXh0Qm94UGFpbnRlciBw
YWludGVyKCptX2lubGluZUNvbnRlbnQsIHJ1biwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7Cisg
ICAgcGFpbnRlci5wYWludCgpOwogfQogCiBMYXlvdXQ6OklubGluZURhbWFnZSYgTGluZUxheW91
dDo6ZW5zdXJlTGluZURhbWFnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKaW5kZXgg
NWU4OTc0MzZlMDI2YzA1MWI3YzZmOGYyODdkYzZjOTlmMWZmMjVhNi4uZTY1NjU1NWYxNjcyMzQx
ODFmNGI4NThjZWY3MDhiNWZiMWY0MTZjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQu
aApAQCAtMTIzLDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgSW5saW5lQ29udGVudCYgZW5zdXJl
SW5saW5lQ29udGVudCgpOwogICAgIHZvaWQgdXBkYXRlTGF5b3V0Qm94RGltZW5zaW9ucyhjb25z
dCBSZW5kZXJCb3gmKTsKIAotICAgIHZvaWQgcGFpbnRUZXh0UnVuVXNpbmdQaHlzaWNhbENvb3Jk
aW5hdGVzKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3Qg
TGluZSYsIGNvbnN0IExheW91dDo6UnVuJik7CisgICAgdm9pZCBwYWludFRleHRSdW5Vc2luZ1Bo
eXNpY2FsQ29vcmRpbmF0ZXMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LCBjb25zdCBMYXlvdXQ6OlJ1biYpOwogCiAgICAgTGF5b3V0OjpJbmxpbmVEYW1hZ2UmIGVu
c3VyZUxpbmVEYW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xlZ2FjeUlubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2Fj
eUlubGluZUZsb3dCb3guY3BwCmluZGV4IGViZjI2MDdiN2FmOWIzZTQ2NzE1YjZlZmJhMGJlZDEx
MjkyNzg3OTMuLjAyNzNlZWVmNTNiMTczYmYwZjcwOGE5NGRiZGM5ODMwZGZhNTIzMjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHAKQEAg
LTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJMYXlv
dXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGVnYWN5RWxsaXBzaXNCb3gu
aCIKICNpbmNsdWRlICJMZWdhY3lJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTGVnYWN5Um9v
dElubGluZUJveC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2Fj
eUlubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGlu
ZVRleHRCb3guY3BwCmluZGV4IDFmZDFiM2ZmMGNlNjk1ZmNjYmRkOWYwYTk5YzVkMjNjYzEzYzNh
MDcuLmE3MjM0YmU0ZWJhZWFhNTA5MjliZmYwMmIwZGNjMWU0ZWE1NTFmMTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKQEAgLTQzMywy
MCArNDMzLDYgQEAgYm9vbCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpoYXNNYXJrZXJzKCkgY29uc3QK
ICAgICByZXR1cm4gTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2VycyhyZW5kZXJl
cigpLCBzZWxlY3RhYmxlUmFuZ2UoKSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6RGVjb3JhdGlv
bikuc2l6ZSgpOwogfQogCi1GbG9hdFBvaW50IExlZ2FjeUlubGluZVRleHRCb3g6OnRleHRPcmln
aW5Gcm9tQm94UmVjdChjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpIGNvbnN0Ci17Ci0gICAgRmxv
YXRQb2ludCB0ZXh0T3JpZ2luIHsgYm94UmVjdC54KCksIGJveFJlY3QueSgpICsgbGluZUZvbnQo
KS5mb250TWV0cmljcygpLmFzY2VudCgpIH07Ci0gICAgaWYgKGF1dG8qIGNvbWJpbmVkVGV4dCA9
IHRoaXMtPmNvbWJpbmVkVGV4dCgpKSB7Ci0gICAgICAgIGlmIChhdXRvIG5ld09yaWdpbiA9IGNv
bWJpbmVkVGV4dC0+Y29tcHV0ZVRleHRPcmlnaW4oYm94UmVjdCkpCi0gICAgICAgICAgICB0ZXh0
T3JpZ2luID0gbmV3T3JpZ2luLnZhbHVlKCk7Ci0gICAgfQotICAgIGlmIChpc0hvcml6b250YWwo
KSkKLSAgICAgICAgdGV4dE9yaWdpbi5zZXRZKHJvdW5kVG9EZXZpY2VQaXhlbChMYXlvdXRVbml0
IHsgdGV4dE9yaWdpbi55KCkgfSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIHRleHRPcmlnaW4uc2V0WChyb3VuZFRvRGV2aWNl
UGl4ZWwoTGF5b3V0VW5pdCB7IHRleHRPcmlnaW4ueCgpIH0sIHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7Ci0gICAgcmV0dXJuIHRleHRPcmlnaW47Ci19Ci0KIGlu
dCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpjYXJldE1pbk9mZnNldCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fc3RhcnQ7CkBAIC01NDAsMTUgKzUyNiw2IEBAIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0
KiBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpjb21iaW5lZFRleHQoKSBjb25zdAogICAgIHJldHVybiBs
aW5lU3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0PihyZW5k
ZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkuaXNDb21i
aW5lZCgpID8gJmRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKSA6IG51bGxw
dHI7CiB9CiAKLWNvbnN0IFNoYWRvd0RhdGEqIExlZ2FjeUlubGluZVRleHRCb3g6OmRlYnVnVGV4
dFNoYWRvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdzKCkubGVnYWN5
TGluZUxheW91dFZpc3VhbENvdmVyYWdlRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWJ1Z1RleHRTaGFk
b3coSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwgdHJ1ZSwgU1JH
QkE8dWludDhfdD4geyAxNTAsIDAsIDAsIDE5MCB9KTsKLSAgICByZXR1cm4gJmRlYnVnVGV4dFNo
YWRvdy5nZXQoKTsKLX0KLQogRXhwYW5zaW9uQmVoYXZpb3IgTGVnYWN5SW5saW5lVGV4dEJveDo6
ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAogewogICAgIEV4cGFuc2lvbkJlaGF2aW9yIGxlZnRC
ZWhhdmlvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxp
bmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJv
eC5oCmluZGV4IDRjNmEyMjg1YWYyYWQ3NTAyMTRhODc2NDVkZDFkY2U0MDYxMTE1ZGMuLmZiMjIy
ZmQ0ZWZhZjUzYjY4NTBlNjk0NjMwNzQyODBkMjJmY2I5NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaApAQCAtMTU3LDEzICsxNTcsOSBAQCBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3JM
ZWdhY3lQYXRoOwogICAgIGZyaWVuZCBjbGFzcyBUZXh0Qm94UGFpbnRlcjsKIAotICAgIEZsb2F0
UG9pbnQgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwotCiAg
ICAgY29uc3QgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCgpIGNvbnN0OwogICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBsaW5lRm9udCgpIGNvbnN0OwogCi0gICAgY29uc3QgU2hhZG93RGF0
YSogZGVidWdUZXh0U2hhZG93KCkgY29uc3Q7Ci0KICAgICBTdHJpbmcgdGV4dChib29sIGlnbm9y
ZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhlbiA9IGZhbHNlKSBjb25zdDsg
Ly8gVGhlIGVmZmVjdGl2ZSB0ZXh0IGZvciB0aGUgcnVuLgogICAgIFRleHRSdW4gY3JlYXRlVGV4
dFJ1bihib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhlbiA9
IGZhbHNlKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRCb3hQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRl
ci5jcHAKaW5kZXggMGQyMWU3MTczNTUwNTNmMTFjM2QyYWQ0MWM1NDEwNTg4MDVkZDU5MC4uYjQ1
NTUyYWE3Mzk0ODQ4MTEwNzBmZGVmYjcwZDIxMjgxMDk3NDAzZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCkBAIC0yOSwxMCArMjksMTQgQEAKICNpbmNs
dWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFdmVudFJlZ2lvbi5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgi
CisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgogI2luY2x1ZGUgIkxl
Z2FjeUlubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJS
ZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlckNvbWJpbmVUZXh0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlNoYWRvd0RhdGEuaCIKICNpbmNsdWRlICJTdHlsZWRN
YXJrZWRUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKICNpbmNsdWRlICJUZXh0
UGFpbnRlci5oIgpAQCAtNDAsMTMgKzQ0LDI4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRl
eHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0
ZXh0Qm94LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0KQotICAgIDogbV90ZXh0Qm94KHRleHRCb3gpCi0gICAgLCBtX3JlbmRlcmVyKHRleHRCb3gu
cmVuZGVyZXIoKSkKKyAgICA6IFRleHRCb3hQYWludGVyKExheW91dEludGVncmF0aW9uOjp0ZXh0
UnVuRm9yKCZ0ZXh0Qm94KSwgcGFpbnRJbmZvLCBwYWludE9mZnNldCkKK3sKKyAgICBtX2VtcGhh
c2lzTWFya0V4aXN0c0FuZElzQWJvdmUgPSB0ZXh0Qm94LmVtcGhhc2lzTWFya0V4aXN0c0FuZElz
QWJvdmUobV9zdHlsZSk7Cit9CisKK1RleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihjb25z
dCBMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3Qg
TGF5b3V0OjpSdW4mIHJ1biwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCkKKyAgICA6IFRleHRCb3hQYWludGVyKExheW91dEludGVncmF0aW9uOjp0
ZXh0UnVuRm9yKGlubGluZUNvbnRlbnQsIHJ1biksIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpCit7
Cit9CisKK1RleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihMYXlvdXRJbnRlZ3JhdGlvbjo6
VGV4dFJ1bkl0ZXJhdG9yJiYgdGV4dEJveCwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKKyAgICA6IG1fdGV4dEJveChXVEZNb3ZlKHRleHRCb3gp
KQorICAgICwgbV9yZW5kZXJlcihtX3RleHRCb3gtPnJlbmRlcmVyKCkpCiAgICAgLCBtX2RvY3Vt
ZW50KG1fcmVuZGVyZXIuZG9jdW1lbnQoKSkKKyAgICAsIG1fc3R5bGUobV90ZXh0Qm94LT5zdHls
ZSgpKQorICAgICwgbV9wYWludFRleHRSdW4obV90ZXh0Qm94LT5jcmVhdGVUZXh0UnVuKCkpCiAg
ICAgLCBtX3BhaW50SW5mbyhwYWludEluZm8pCi0gICAgLCBtX3BhaW50UmVjdChjb21wdXRlUGFp
bnRSZWN0KHRleHRCb3gsIHBhaW50T2Zmc2V0KSkKKyAgICAsIG1fc2VsZWN0YWJsZVJhbmdlKG1f
dGV4dEJveC0+c2VsZWN0YWJsZVJhbmdlKCkpCisgICAgLCBtX3BhaW50UmVjdChjb21wdXRlUGFp
bnRSZWN0KHBhaW50T2Zmc2V0KSkKKyAgICAsIG1faXNGaXJzdExpbmUobV90ZXh0Qm94LT5saW5l
KCktPmlzRmlyc3QoKSkKICAgICAsIG1faXNQcmludGluZyhtX2RvY3VtZW50LnByaW50aW5nKCkp
Ci0gICAgLCBtX2hhdmVTZWxlY3Rpb24oIW1faXNQcmludGluZyAmJiBtX3BhaW50SW5mby5waGFz
ZSAhPSBQYWludFBoYXNlOjpUZXh0Q2xpcCAmJiBtX3RleHRCb3guc2VsZWN0aW9uU3RhdGUoKSAh
PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKQorICAgICwgbV9oYXZlU2VsZWN0
aW9uKGNvbXB1dGVIYXZlU2VsZWN0aW9uKCkpCiAgICAgLCBtX2NvbnRhaW5zQ29tcG9zaXRpb24o
bV9yZW5kZXJlci50ZXh0Tm9kZSgpICYmIG1fcmVuZGVyZXIuZnJhbWUoKS5lZGl0b3IoKS5jb21w
b3NpdGlvbk5vZGUoKSA9PSBtX3JlbmRlcmVyLnRleHROb2RlKCkpCiAgICAgLCBtX3VzZUN1c3Rv
bVVuZGVybGluZXMobV9jb250YWluc0NvbXBvc2l0aW9uICYmIG1fcmVuZGVyZXIuZnJhbWUoKS5l
ZGl0b3IoKS5jb21wb3NpdGlvblVzZXNDdXN0b21VbmRlcmxpbmVzKCkpCiB7CkBAIC02NCwxMSAr
ODMsMTEgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnQoKQogCiAgICAgaWYgKG1fcGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkV2ZW50UmVnaW9uKSB7CiAgICAgICAgIGlmIChtX3Jl
bmRlcmVyLnBhcmVudCgpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCkpCi0gICAgICAgICAgICBtX3Bh
aW50SW5mby5ldmVudFJlZ2lvbkNvbnRleHQtPnVuaXRlKGVuY2xvc2luZ0ludFJlY3QobV9wYWlu
dFJlY3QpLCBtX3JlbmRlcmVyLnN0eWxlKCkpOworICAgICAgICAgICAgbV9wYWludEluZm8uZXZl
bnRSZWdpb25Db250ZXh0LT51bml0ZShlbmNsb3NpbmdJbnRSZWN0KG1fcGFpbnRSZWN0KSwgbV9z
dHlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBib29sIHNob3VsZFJvdGF0ZSA9
ICFtX3RleHRCb3guaXNIb3Jpem9udGFsKCkgJiYgIW1fdGV4dEJveC5jb21iaW5lZFRleHQoKTsK
KyAgICBib29sIHNob3VsZFJvdGF0ZSA9ICF0ZXh0Qm94KCkuaXNIb3Jpem9udGFsKCkgJiYgIWNv
bWJpbmVkVGV4dCgpOwogICAgIGlmIChzaG91bGRSb3RhdGUpCiAgICAgICAgIG1fcGFpbnRJbmZv
LmNvbnRleHQoKS5jb25jYXRDVE0ocm90YXRpb24obV9wYWludFJlY3QsIENsb2Nrd2lzZSkpOwog
CkBAIC05Miw5ICsxMTEsOSBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludCgpCiAgICAgICAg
IG1fcGFpbnRJbmZvLmNvbnRleHQoKS5jb25jYXRDVE0ocm90YXRpb24obV9wYWludFJlY3QsIENv
dW50ZXJjbG9ja3dpc2UpKTsKIH0KIAotc3RhdGljIE1hcmtlZFRleHQgY3JlYXRlTWFya2VkVGV4
dEZyb21TZWxlY3Rpb25JbkJveChjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiBib3gpCitNYXJr
ZWRUZXh0IFRleHRCb3hQYWludGVyOjpjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94
KCkKIHsKLSAgICBhdXRvIFtzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kXSA9IGJveC5zZWxl
Y3Rpb25TdGFydEVuZCgpOworICAgIGF1dG8gW3NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmRd
ID0gbV9yZW5kZXJlci52aWV3KCkuc2VsZWN0aW9uKCkucmFuZ2VGb3JUZXh0Qm94KG1fcmVuZGVy
ZXIsIG1fc2VsZWN0YWJsZVJhbmdlKTsKICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPCBzZWxlY3Rp
b25FbmQpCiAgICAgICAgIHJldHVybiB7IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQsIE1h
cmtlZFRleHQ6OlNlbGVjdGlvbiB9OwogICAgIHJldHVybiB7IH07CkBAIC0xMDUsMjAgKzEyNCwx
OCBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQoKQogICAgIGlmIChtX2Nv
bnRhaW5zQ29tcG9zaXRpb24gJiYgIW1fdXNlQ3VzdG9tVW5kZXJsaW5lcykKICAgICAgICAgcGFp
bnRDb21wb3NpdGlvbkJhY2tncm91bmQoKTsKIAotICAgIGF1dG8gc2VsZWN0YWJsZVJhbmdlID0g
bV90ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpOwotCiAgICAgVmVjdG9yPE1hcmtlZFRleHQ+IG1h
cmtlZFRleHRzOwotICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpjb2xs
ZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKG1fcmVuZGVyZXIsIHNlbGVjdGFibGVSYW5nZSwgTWFya2Vk
VGV4dDo6UGFpbnRQaGFzZTo6QmFja2dyb3VuZCkpOwotICAgIG1hcmtlZFRleHRzLmFwcGVuZFZl
Y3RvcihNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0cyhtX3JlbmRlcmVyLCBzZWxlY3Rh
YmxlUmFuZ2UsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkJhY2tncm91bmQpKTsKKyAgICBtYXJr
ZWRUZXh0cy5hcHBlbmRWZWN0b3IoTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2Vy
cyhtX3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6
QmFja2dyb3VuZCkpOworICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpj
b2xsZWN0Rm9ySGlnaGxpZ2h0cyhtX3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSwgTWFya2Vk
VGV4dDo6UGFpbnRQaGFzZTo6QmFja2dyb3VuZCkpOwogCiAjaWYgRU5BQkxFKFRFWFRfU0VMRUNU
SU9OKQogICAgIGlmIChtX2hhdmVTZWxlY3Rpb24gJiYgIW1fdXNlQ3VzdG9tVW5kZXJsaW5lcyAm
JiAhbV9wYWludEluZm8uY29udGV4dCgpLnBhaW50aW5nRGlzYWJsZWQoKSkgewotICAgICAgICBh
dXRvIHNlbGVjdGlvbk1hcmtlZFRleHQgPSBjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbklu
Qm94KG1fdGV4dEJveCk7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uTWFya2VkVGV4dCA9IGNyZWF0
ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3goKTsKICAgICAgICAgaWYgKCFzZWxlY3Rpb25N
YXJrZWRUZXh0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZChXVEZN
b3ZlKHNlbGVjdGlvbk1hcmtlZFRleHQpKTsKICAgICB9CiAjZW5kaWYKLSAgICBhdXRvIHN0eWxl
ZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6c3ViZGl2aWRlQW5kUmVzb2x2ZShtYXJr
ZWRUZXh0cywgbV9yZW5kZXJlciwgbV90ZXh0Qm94LmlzRmlyc3RMaW5lKCksIG1fcGFpbnRJbmZv
KTsKKyAgICBhdXRvIHN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6c3ViZGl2
aWRlQW5kUmVzb2x2ZShtYXJrZWRUZXh0cywgbV9yZW5kZXJlciwgbV9pc0ZpcnN0TGluZSwgbV9w
YWludEluZm8pOwogCiAgICAgLy8gQ29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtlZCB0
ZXh0cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCiAgICAgYXV0
byBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxlZE1hcmtlZFRleHQ6OmNvYWxlc2Nl
QWRqYWNlbnRXaXRoRXF1YWxCYWNrZ3JvdW5kKHN0eWxlZE1hcmtlZFRleHRzKTsKQEAgLTEzMiwx
OCArMTQ5LDE2IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29y
YXRpb25zKCkKICAgICBib29sIHNob3VsZFBhaW50U2VsZWN0aW9uRm9yZWdyb3VuZCA9IG1faGF2
ZVNlbGVjdGlvbiAmJiAhbV91c2VDdXN0b21VbmRlcmxpbmVzOwogICAgIFZlY3RvcjxNYXJrZWRU
ZXh0PiBtYXJrZWRUZXh0czsKICAgICBpZiAobV9wYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZTo6U2VsZWN0aW9uKSB7Ci0gICAgICAgIGF1dG8gc2VsZWN0YWJsZVJhbmdlID0gbV90ZXh0Qm94
LnNlbGVjdGFibGVSYW5nZSgpOwotCiAgICAgICAgIC8vIFRoZSBtYXJrZWQgdGV4dHMgZm9yIHRo
ZSBnYXBzIGJldHdlZW4gZG9jdW1lbnQgbWFya2VycyBhbmQgc2VsZWN0aW9uIGFyZSBpbXBsaWNp
dGx5IGNyZWF0ZWQgYnkgc3ViZGl2aWRpbmcgdGhlIGVudGlyZSBsaW5lLgotICAgICAgICBtYXJr
ZWRUZXh0cy5hcHBlbmQoeyBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAobV90ZXh0Qm94LnN0YXJ0KCkp
LCBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAobV90ZXh0Qm94LmVuZCgpKSwgTWFya2VkVGV4dDo6VW5t
YXJrZWQgfSk7CisgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZCh7IG1fc2VsZWN0YWJsZVJhbmdl
LmNsYW1wKHRleHRCb3goKS5zdGFydCgpKSwgbV9zZWxlY3RhYmxlUmFuZ2UuY2xhbXAodGV4dEJv
eCgpLmVuZCgpKSwgTWFya2VkVGV4dDo6VW5tYXJrZWQgfSk7CiAKICAgICAgICAgaWYgKCFtX2lz
UHJpbnRpbmcpIHsKLSAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRU
ZXh0Ojpjb2xsZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKG1fcmVuZGVyZXIsIHNlbGVjdGFibGVSYW5n
ZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCkpOwotICAgICAgICAgICAgbWFy
a2VkVGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JIaWdobGlnaHRzKG1f
cmVuZGVyZXIsIHNlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6Rm9yZWdy
b3VuZCkpOworICAgICAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtlZFRleHQ6
OmNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMobV9yZW5kZXJlciwgbV9zZWxlY3RhYmxlUmFuZ2Us
IE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91bmQpKTsKKyAgICAgICAgICAgIG1hcmtl
ZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0cyhtX3Jl
bmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6Rm9yZWdy
b3VuZCkpOwogCiAgICAgICAgICAgICBib29sIHNob3VsZFBhaW50RHJhZ2dlZENvbnRlbnQgPSAh
KG1fcGFpbnRJbmZvLnBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6RXhjbHVk
ZVNlbGVjdGlvbikpOwogICAgICAgICAgICAgaWYgKHNob3VsZFBhaW50RHJhZ2dlZENvbnRlbnQp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIG1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQgPSBN
YXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRHJhZ2dlZENvbnRlbnQobV9yZW5kZXJlciwgc2VsZWN0YWJs
ZVJhbmdlKTsKKyAgICAgICAgICAgICAgICBhdXRvIG1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRl
bnQgPSBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRHJhZ2dlZENvbnRlbnQobV9yZW5kZXJlciwgbV9z
ZWxlY3RhYmxlUmFuZ2UpOwogICAgICAgICAgICAgICAgIGlmICghbWFya2VkVGV4dHNGb3JEcmFn
Z2VkQ29udGVudC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgc2hvdWxkUGFpbnRT
ZWxlY3Rpb25Gb3JlZ3JvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIG1hcmtlZFRl
eHRzLmFwcGVuZFZlY3RvcihtYXJrZWRUZXh0c0ZvckRyYWdnZWRDb250ZW50KTsKQEAgLTE1NCwx
MiArMTY5LDEyIEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29y
YXRpb25zKCkKICAgICAvLyBUaGUgc2VsZWN0aW9uIG1hcmtlZCB0ZXh0IGFjdHMgYXMgYSBwbGFj
ZWhvbGRlciB3aGVuIGNvbXB1dGluZyB0aGUgbWFya2VkIHRleHRzIGZvciB0aGUgZ2Fwcy4uLgog
ICAgIGlmIChzaG91bGRQYWludFNlbGVjdGlvbkZvcmVncm91bmQpIHsKICAgICAgICAgQVNTRVJU
KCFtX2lzUHJpbnRpbmcpOwotICAgICAgICBhdXRvIHNlbGVjdGlvbk1hcmtlZFRleHQgPSBjcmVh
dGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KG1fdGV4dEJveCk7CisgICAgICAgIGF1dG8g
c2VsZWN0aW9uTWFya2VkVGV4dCA9IGNyZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3go
KTsKICAgICAgICAgaWYgKCFzZWxlY3Rpb25NYXJrZWRUZXh0LmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIG1hcmtlZFRleHRzLmFwcGVuZChXVEZNb3ZlKHNlbGVjdGlvbk1hcmtlZFRleHQpKTsKICAg
ICB9CiAKLSAgICBhdXRvIHN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6c3Vi
ZGl2aWRlQW5kUmVzb2x2ZShtYXJrZWRUZXh0cywgbV9yZW5kZXJlciwgbV90ZXh0Qm94LmlzRmly
c3RMaW5lKCksIG1fcGFpbnRJbmZvKTsKKyAgICBhdXRvIHN0eWxlZE1hcmtlZFRleHRzID0gU3R5
bGVkTWFya2VkVGV4dDo6c3ViZGl2aWRlQW5kUmVzb2x2ZShtYXJrZWRUZXh0cywgbV9yZW5kZXJl
ciwgbV9pc0ZpcnN0TGluZSwgbV9wYWludEluZm8pOwogCiAgICAgLy8gLi4uIG5vdyByZW1vdmUg
dGhlIHNlbGVjdGlvbiBtYXJrZWQgdGV4dCBpZiB3ZSBhcmUgZXhjbHVkaW5nIHNlbGVjdGlvbi4K
ICAgICBpZiAoIW1faXNQcmludGluZyAmJiBtX3BhaW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRh
aW5zKFBhaW50QmVoYXZpb3I6OkV4Y2x1ZGVTZWxlY3Rpb24pKSB7CkBAIC0xNzQsMjggKzE4OSwy
OCBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRBbmREZWNvcmF0aW9ucygp
CiAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMp
CiAgICAgICAgIHBhaW50Rm9yZWdyb3VuZChtYXJrZWRUZXh0KTsKIAotICAgIGF1dG8gdGV4dERl
Y29yYXRpb25zID0gbV90ZXh0Qm94LmxpbmVTdHlsZSgpLnRleHREZWNvcmF0aW9uc0luRWZmZWN0
KCk7Ci0gICAgYm9vbCBoaWdobGlnaHREZWNvcmF0aW9ucyA9ICFNYXJrZWRUZXh0Ojpjb2xsZWN0
Rm9ySGlnaGxpZ2h0cyhtX3JlbmRlcmVyLCBtX3RleHRCb3guc2VsZWN0YWJsZVJhbmdlKCksIE1h
cmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29yYXRpb24pLmlzRW1wdHkoKTsKKyAgICBhdXRvIHRl
eHREZWNvcmF0aW9ucyA9IG1fc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsKKyAgICBi
b29sIGhpZ2hsaWdodERlY29yYXRpb25zID0gIU1hcmtlZFRleHQ6OmNvbGxlY3RGb3JIaWdobGln
aHRzKG1fcmVuZGVyZXIsIG1fc2VsZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0OjpQYWludFBoYXNl
OjpEZWNvcmF0aW9uKS5pc0VtcHR5KCk7CiAgICAgYm9vbCBsaW5lRGVjb3JhdGlvbnMgPSAhdGV4
dERlY29yYXRpb25zLmlzRW1wdHkoKTsKICAgICBpZiAoKGxpbmVEZWNvcmF0aW9ucyB8fCBoaWdo
bGlnaHREZWNvcmF0aW9ucykgJiYgbV9wYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2Vs
ZWN0aW9uKSB7Ci0gICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IG1fdGV4dEJveC5jcmVhdGVUZXh0
UnVuKCk7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fdGV4dEJveC50cnVuY2F0aW9uKCku
dmFsdWVfb3IodGV4dFJ1bi5sZW5ndGgoKSk7CisgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IHRl
eHRCb3goKS5jcmVhdGVUZXh0UnVuKCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fc2Vs
ZWN0YWJsZVJhbmdlLnRydW5jYXRpb24udmFsdWVfb3IodGV4dFJ1bi5sZW5ndGgoKSk7CiAgICAg
ICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0ID0gMDsKICAgICAgICAgdW5zaWduZWQgc2VsZWN0
aW9uRW5kID0gMDsKICAgICAgICAgaWYgKG1faGF2ZVNlbGVjdGlvbikKLSAgICAgICAgICAgIHN0
ZDo6dGllKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpID0gbV90ZXh0Qm94LnNlbGVjdGlv
blN0YXJ0RW5kKCk7CisgICAgICAgICAgICBzdGQ6OnRpZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0
aW9uRW5kKSA9IG1fcmVuZGVyZXIudmlldygpLnNlbGVjdGlvbigpLnJhbmdlRm9yVGV4dEJveCht
X3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSk7CiAKICAgICAgICAgRmxvYXRSZWN0IHRleHRE
ZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3Q7CiAgICAgICAgIGlmICgobV9wYWludEluZm8u
cGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpFeGNsdWRlU2VsZWN0aW9uKSkg
JiYgc2VsZWN0aW9uU3RhcnQgPCBzZWxlY3Rpb25FbmQgJiYgc2VsZWN0aW9uRW5kIDw9IGxlbmd0
aCkgewogICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdCA9IG1f
cGFpbnRSZWN0OwogICAgICAgICAgICAgZmxvYXQgbG9naWNhbFdpZHRoQmVmb3JlUmFuZ2U7CiAg
ICAgICAgICAgICBmbG9hdCBsb2dpY2FsV2lkdGhBZnRlclJhbmdlOwotICAgICAgICAgICAgZmxv
YXQgbG9naWNhbFNlbGVjdGlvbldpZHRoID0gbV90ZXh0Qm94LmxpbmVGb250KCkud2lkdGhPZlRl
eHRSYW5nZSh0ZXh0UnVuLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCBudWxscHRyLCAm
bG9naWNhbFdpZHRoQmVmb3JlUmFuZ2UsICZsb2dpY2FsV2lkdGhBZnRlclJhbmdlKTsKKyAgICAg
ICAgICAgIGZsb2F0IGxvZ2ljYWxTZWxlY3Rpb25XaWR0aCA9IGZvbnRDYXNjYWRlKCkud2lkdGhP
ZlRleHRSYW5nZShtX3BhaW50VGV4dFJ1biwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwg
bnVsbHB0ciwgJmxvZ2ljYWxXaWR0aEJlZm9yZVJhbmdlLCAmbG9naWNhbFdpZHRoQWZ0ZXJSYW5n
ZSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBoYW5kbGUgdmVydGljYWwg
Ym90dG9tIHRvIHRvcCB0ZXh0PwotICAgICAgICAgICAgaWYgKCFtX3RleHRCb3guaXNIb3Jpem9u
dGFsKCkpIHsKKyAgICAgICAgICAgIGlmICghdGV4dEJveCgpLmlzSG9yaXpvbnRhbCgpKSB7CiAg
ICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5tb3ZlKDAs
IGxvZ2ljYWxXaWR0aEJlZm9yZVJhbmdlKTsKICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlv
blNlbGVjdGlvbkNsaXBPdXRSZWN0LnNldEhlaWdodChsb2dpY2FsU2VsZWN0aW9uV2lkdGgpOwot
ICAgICAgICAgICAgfSBlbHNlIGlmIChtX3RleHRCb3guZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVj
dGlvbjo6UlRMKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRleHRCb3goKS5kaXJlY3Rpb24o
KSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpIHsKICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlv
blNlbGVjdGlvbkNsaXBPdXRSZWN0Lm1vdmUobG9naWNhbFdpZHRoQWZ0ZXJSYW5nZSwgMCk7CiAg
ICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5zZXRXaWR0
aChsb2dpY2FsU2VsZWN0aW9uV2lkdGgpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTIxNCwy
OSArMjI5LDI3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29y
YXRpb25zKCkKIAogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91
bmQoKQogewotICAgIGF1dG8gc2VsZWN0YWJsZVJhbmdlID0gbV90ZXh0Qm94LnNlbGVjdGFibGVS
YW5nZSgpOwotCiAgICAgYXV0byYgZWRpdG9yID0gbV9yZW5kZXJlci5mcmFtZSgpLmVkaXRvcigp
OwogCiAgICAgaWYgKCFlZGl0b3IuY29tcG9zaXRpb25Vc2VzQ3VzdG9tSGlnaGxpZ2h0cygpKSB7
Ci0gICAgICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFu
Z2UuY2xhbXAoZWRpdG9yLmNvbXBvc2l0aW9uU3RhcnQoKSwgZWRpdG9yLmNvbXBvc2l0aW9uRW5k
KCkpOworICAgICAgICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmRdID0gbV9zZWxlY3Rh
YmxlUmFuZ2UuY2xhbXAoZWRpdG9yLmNvbXBvc2l0aW9uU3RhcnQoKSwgZWRpdG9yLmNvbXBvc2l0
aW9uRW5kKCkpOwogCiAgICAgICAgIHBhaW50QmFja2dyb3VuZChjbGFtcGVkU3RhcnQsIGNsYW1w
ZWRFbmQsIENvbXBvc2l0aW9uSGlnaGxpZ2h0OjpkZWZhdWx0Q29tcG9zaXRpb25GaWxsQ29sb3Ip
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBl
ZGl0b3IuY3VzdG9tQ29tcG9zaXRpb25IaWdobGlnaHRzKCkpIHsKLSAgICAgICAgaWYgKGhpZ2hs
aWdodC5lbmRPZmZzZXQgPD0gbV90ZXh0Qm94LnN0YXJ0KCkpCisgICAgICAgIGlmIChoaWdobGln
aHQuZW5kT2Zmc2V0IDw9IHRleHRCb3goKS5zdGFydCgpKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgaWYgKGhpZ2hsaWdodC5zdGFydE9mZnNldCA+PSBtX3RleHRCb3guZW5kKCkp
CisgICAgICAgIGlmIChoaWdobGlnaHQuc3RhcnRPZmZzZXQgPj0gdGV4dEJveCgpLmVuZCgpKQog
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVk
RW5kXSA9IHNlbGVjdGFibGVSYW5nZS5jbGFtcChoaWdobGlnaHQuc3RhcnRPZmZzZXQsIGhpZ2hs
aWdodC5lbmRPZmZzZXQpOworICAgICAgICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmRd
ID0gbV9zZWxlY3RhYmxlUmFuZ2UuY2xhbXAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0LCBoaWdobGln
aHQuZW5kT2Zmc2V0KTsKIAogICAgICAgICBwYWludEJhY2tncm91bmQoY2xhbXBlZFN0YXJ0LCBj
bGFtcGVkRW5kLCBoaWdobGlnaHQuY29sb3IsIEJhY2tncm91bmRTdHlsZTo6Um91bmRlZCk7CiAK
LSAgICAgICAgaWYgKGhpZ2hsaWdodC5lbmRPZmZzZXQgPiBtX3RleHRCb3guZW5kKCkpCisgICAg
ICAgIGlmIChoaWdobGlnaHQuZW5kT2Zmc2V0ID4gdGV4dEJveCgpLmVuZCgpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQogfQpAQCAtMjU3LDIyICsyNzAsMjEgQEAgdm9pZCBUZXh0Qm94UGFp
bnRlcjo6cGFpbnRCYWNrZ3JvdW5kKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIGMKIAogICAgIC8vIE5vdGUgdGhhdCBpZiB0aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIHdl
IGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNhdGlvbgogICAgIC8vIGRy
YXcgaXRzIG93biBoaWdobGlnaHQuCi0gICAgVGV4dFJ1biB0ZXh0UnVuID0gbV90ZXh0Qm94LmNy
ZWF0ZVRleHRSdW4oKTsKIAotICAgIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gmIHJvb3RCb3gg
PSBtX3RleHRCb3gucm9vdCgpOwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tID0gcm9v
dEJveC5zZWxlY3Rpb25Cb3R0b20oKTsKLSAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCA9IHJv
b3RCb3guc2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpOworICAgIGNvbnN0
IGF1dG8gbGluZSA9IHRleHRCb3goKS5saW5lKCk7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25C
b3R0b20gPSBsaW5lLT5zZWxlY3Rpb25Cb3R0b20oKTsKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlv
blRvcCA9IGxpbmUtPnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKTsKIAog
ICAgIC8vIFVzZSBzYW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2VsZWN0aW9u
LCBzbyB0aGF0IHdoZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBzdWJyYW5nZSBhcmUgb24KICAg
ICAvLyB0aGUgc2FtZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3RpY2tpbmcgb3V0LgotICAg
IExheW91dFVuaXQgZGVsdGFZIHsgbV9yZW5kZXJlci5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3Jp
dGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSAtIG1fdGV4dEJveC5sb2dpY2FsQm90dG9tKCkg
OiBtX3RleHRCb3gubG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wIH07CisgICAgTGF5b3V0VW5p
dCBkZWx0YVkgeyBtX3N0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlv
bkJvdHRvbSAtIHRleHRCb3goKS5sb2dpY2FsQm90dG9tKCkgOiB0ZXh0Qm94KCkubG9naWNhbFRv
cCgpIC0gc2VsZWN0aW9uVG9wIH07CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQgPSBz
dGQ6Om1heDxMYXlvdXRVbml0PigwLCBzZWxlY3Rpb25Cb3R0b20gLSBzZWxlY3Rpb25Ub3ApOwog
Ci0gICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0IHsgTGF5b3V0VW5pdChtX3BhaW50UmVjdC54
KCkpLCBMYXlvdXRVbml0KG1fcGFpbnRSZWN0LnkoKSAtIGRlbHRhWSksIExheW91dFVuaXQobV90
ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpKSwgc2VsZWN0aW9uSGVpZ2h0IH07Ci0gICAgbV90ZXh0Qm94
LmxpbmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9u
UmVjdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25S
ZWN0IHsgTGF5b3V0VW5pdChtX3BhaW50UmVjdC54KCkpLCBMYXlvdXRVbml0KG1fcGFpbnRSZWN0
LnkoKSAtIGRlbHRhWSksIExheW91dFVuaXQodGV4dEJveCgpLmxvZ2ljYWxXaWR0aCgpKSwgc2Vs
ZWN0aW9uSGVpZ2h0IH07CisgICAgZm9udENhc2NhZGUoKS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
VGV4dChtX3BhaW50VGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCk7CiAKICAgICAvLyBGSVhNRTogU3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0LiBTZWUg
PGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+LgotICAgIGF1
dG8gYmFja2dyb3VuZFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJl
Y3Rpb24oc2VsZWN0aW9uUmVjdCwgbV9kb2N1bWVudC5kZXZpY2VTY2FsZUZhY3RvcigpLCB0ZXh0
UnVuLmx0cigpKTsKKyAgICBhdXRvIGJhY2tncm91bmRSZWN0ID0gc25hcFJlY3RUb0RldmljZVBp
eGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIG1fZG9jdW1lbnQuZGV2aWNl
U2NhbGVGYWN0b3IoKSwgbV9wYWludFRleHRSdW4ubHRyKCkpOwogICAgIGlmIChiYWNrZ3JvdW5k
U3R5bGUgPT0gQmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKSB7CiAgICAgICAgIGJhY2tncm91bmRS
ZWN0LmV4cGFuZCgtMSwgLTEpOwogICAgICAgICBiYWNrZ3JvdW5kUmVjdC5tb3ZlKDAuNSwgMC41
KTsKQEAgLTI4OSwzMCArMzAxLDMwIEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdy
b3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogICAgICAgICByZXR1cm47
CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7
Ci0gICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBtX3RleHRCb3gubGluZUZvbnQoKTsKLSAg
ICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gbV90ZXh0Qm94LmxpbmVTdHlsZSgpOwor
ICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gZm9udENhc2NhZGUoKTsKIAogICAgIGZsb2F0
IGVtcGhhc2lzTWFya09mZnNldCA9IDA7Ci0gICAgc3RkOjpvcHRpb25hbDxib29sPiBtYXJrRXhp
c3RzQW5kSXNBYm92ZSA9IG1fdGV4dEJveC5lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGxp
bmVTdHlsZSk7Ci0gICAgY29uc3QgQXRvbVN0cmluZyYgZW1waGFzaXNNYXJrID0gbWFya0V4aXN0
c0FuZElzQWJvdmUgPyBsaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpIDogbnVsbEF0
b20oKTsKKyAgICBjb25zdCBBdG9tU3RyaW5nJiBlbXBoYXNpc01hcmsgPSBtX2VtcGhhc2lzTWFy
a0V4aXN0c0FuZElzQWJvdmUgPyBtX3N0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSA6IG51
bGxBdG9tKCk7CiAgICAgaWYgKCFlbXBoYXNpc01hcmsuaXNFbXB0eSgpKQotICAgICAgICBlbXBo
YXNpc01hcmtPZmZzZXQgPSAqbWFya0V4aXN0c0FuZElzQWJvdmUgPyAtZm9udC5mb250TWV0cmlj
cygpLmFzY2VudCgpIC0gZm9udC5lbXBoYXNpc01hcmtEZXNjZW50KGVtcGhhc2lzTWFyaykgOiBm
b250LmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICsgZm9udC5lbXBoYXNpc01hcmtBc2NlbnQoZW1w
aGFzaXNNYXJrKTsKKyAgICAgICAgZW1waGFzaXNNYXJrT2Zmc2V0ID0gKm1fZW1waGFzaXNNYXJr
RXhpc3RzQW5kSXNBYm92ZSA/IC1mb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBmb250LmVt
cGhhc2lzTWFya0Rlc2NlbnQoZW1waGFzaXNNYXJrKSA6IGZvbnQuZm9udE1ldHJpY3MoKS5kZXNj
ZW50KCkgKyBmb250LmVtcGhhc2lzTWFya0FzY2VudChlbXBoYXNpc01hcmspOwogCiAgICAgVGV4
dFBhaW50ZXIgdGV4dFBhaW50ZXIgeyBjb250ZXh0IH07CiAgICAgdGV4dFBhaW50ZXIuc2V0Rm9u
dChmb250KTsKICAgICB0ZXh0UGFpbnRlci5zZXRTdHlsZShtYXJrZWRUZXh0LnN0eWxlLnRleHRT
dHlsZXMpOwotICAgIHRleHRQYWludGVyLnNldElzSG9yaXpvbnRhbChtX3RleHRCb3guaXNIb3Jp
em9udGFsKCkpOworICAgIHRleHRQYWludGVyLnNldElzSG9yaXpvbnRhbCh0ZXh0Qm94KCkuaXNI
b3Jpem9udGFsKCkpOwogICAgIGlmIChtYXJrZWRUZXh0LnN0eWxlLnRleHRTaGFkb3cpIHsKICAg
ICAgICAgdGV4dFBhaW50ZXIuc2V0U2hhZG93KCZtYXJrZWRUZXh0LnN0eWxlLnRleHRTaGFkb3cu
dmFsdWUoKSk7Ci0gICAgICAgIGlmIChsaW5lU3R5bGUuaGFzQXBwbGVDb2xvckZpbHRlcigpKQot
ICAgICAgICAgICAgdGV4dFBhaW50ZXIuc2V0U2hhZG93Q29sb3JGaWx0ZXIoJmxpbmVTdHlsZS5h
cHBsZUNvbG9yRmlsdGVyKCkpOworICAgICAgICBpZiAobV9zdHlsZS5oYXNBcHBsZUNvbG9yRmls
dGVyKCkpCisgICAgICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRlcigmbV9z
dHlsZS5hcHBsZUNvbG9yRmlsdGVyKCkpOwogICAgIH0KLSAgICB0ZXh0UGFpbnRlci5zZXRFbXBo
YXNpc01hcmsoZW1waGFzaXNNYXJrLCBlbXBoYXNpc01hcmtPZmZzZXQsIG1fdGV4dEJveC5jb21i
aW5lZFRleHQoKSk7Ci0gICAgaWYgKGF1dG8qIGRlYnVnU2hhZG93ID0gbV90ZXh0Qm94LmRlYnVn
VGV4dFNoYWRvdygpKQorICAgIHRleHRQYWludGVyLnNldEVtcGhhc2lzTWFyayhlbXBoYXNpc01h
cmssIGVtcGhhc2lzTWFya09mZnNldCwgY29tYmluZWRUZXh0KCkpOworICAgIGlmIChhdXRvKiBk
ZWJ1Z1NoYWRvdyA9IGRlYnVnVGV4dFNoYWRvdygpKQogICAgICAgICB0ZXh0UGFpbnRlci5zZXRT
aGFkb3coZGVidWdTaGFkb3cpOwogCi0gICAgVGV4dFJ1biB0ZXh0UnVuID0gbV90ZXh0Qm94LmNy
ZWF0ZVRleHRSdW4oKTsKLSAgICB0ZXh0UGFpbnRlci5zZXRHbHlwaERpc3BsYXlMaXN0SWZOZWVk
ZWQobV90ZXh0Qm94LCBtX3BhaW50SW5mbywgZm9udCwgY29udGV4dCwgdGV4dFJ1bik7CisgICAg
aWYgKGF1dG8qIGxlZ2FjeUlubGluZUJveCA9IHRleHRCb3goKS5sZWdhY3lJbmxpbmVCb3goKSkK
KyAgICAgICAgdGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVkKCpsZWdhY3lJ
bmxpbmVCb3gsIG1fcGFpbnRJbmZvLCBmb250LCBjb250ZXh0LCBtX3BhaW50VGV4dFJ1bik7Cisg
ICAgZWxzZQorICAgICAgICB0ZXh0UGFpbnRlci5zZXRHbHlwaERpc3BsYXlMaXN0SWZOZWVkZWQo
KnRleHRCb3goKS5pbmxpbmVCb3goKSwgbV9wYWludEluZm8sIGZvbnQsIGNvbnRleHQsIG1fcGFp
bnRUZXh0UnVuKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlciB7
IGNvbnRleHQsIGZhbHNlIH07CiAgICAgaWYgKG1hcmtlZFRleHQudHlwZSA9PSBNYXJrZWRUZXh0
OjpEcmFnZ2VkQ29udGVudCkgewpAQCAtMzIwLDcgKzMzMiw3IEBAIHZvaWQgVGV4dEJveFBhaW50
ZXI6OnBhaW50Rm9yZWdyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQog
ICAgICAgICBjb250ZXh0LnNldEFscGhhKG1hcmtlZFRleHQuc3R5bGUuYWxwaGEpOwogICAgIH0K
ICAgICAvLyBUZXh0UGFpbnRlciB3YW50cyB0aGUgYm94IHJlY3RhbmdsZSBhbmQgdGV4dCBvcmln
aW4gb2YgdGhlIGVudGlyZSBsaW5lIGJveC4KLSAgICB0ZXh0UGFpbnRlci5wYWludFJhbmdlKHRl
eHRSdW4sIG1fcGFpbnRSZWN0LCBtX3RleHRCb3gudGV4dE9yaWdpbkZyb21Cb3hSZWN0KG1fcGFp
bnRSZWN0KSwgbWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQpOwor
ICAgIHRleHRQYWludGVyLnBhaW50UmFuZ2UobV9wYWludFRleHRSdW4sIG1fcGFpbnRSZWN0LCB0
ZXh0T3JpZ2luRnJvbVBhaW50UmVjdChtX3BhaW50UmVjdCksIG1hcmtlZFRleHQuc3RhcnRPZmZz
ZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKIH0KIAogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFp
bnREZWNvcmF0aW9uKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgY2xpcE91dFJlY3QpCkBAIC0zMzIsMzggKzM0NCwzNiBAQCB2b2lkIFRleHRCb3hQ
YWludGVyOjpwYWludERlY29yYXRpb24oY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4
dCwgY29uc3QgRgogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQg
PSBtX3RleHRCb3gubGluZUZvbnQoKTsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxl
ID0gbV90ZXh0Qm94LmxpbmVTdHlsZSgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0g
Zm9udENhc2NhZGUoKTsKIAogICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCBtYXJr
ZWRUZXh0LnN0eWxlLnRleHRTdHlsZXMpOwogCi0gICAgYm9vbCBpc0NvbWJpbmVkVGV4dCA9IG1f
dGV4dEJveC5jb21iaW5lZFRleHQoKTsKKyAgICBib29sIGlzQ29tYmluZWRUZXh0ID0gY29tYmlu
ZWRUZXh0KCk7CiAgICAgaWYgKGlzQ29tYmluZWRUZXh0KQogICAgICAgICBjb250ZXh0LmNvbmNh
dENUTShyb3RhdGlvbihtX3BhaW50UmVjdCwgQ2xvY2t3aXNlKSk7CiAKICAgICAvLyBOb3RlIHRo
YXQgaWYgdGhlIHRleHQgaXMgdHJ1bmNhdGVkLCB3ZSBsZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50
ZWQgaW4gdGhlIHRydW5jYXRpb24KICAgICAvLyBkcmF3IGl0cyBvd24gZGVjb3JhdGlvbi4KLSAg
ICBUZXh0UnVuIHRleHRSdW4gPSBtX3RleHRCb3guY3JlYXRlVGV4dFJ1bigpOwogCiAgICAgLy8g
QXZvaWQgbWVhc3VyaW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxl
Y3RlZCBhcyBhbiBvcHRpbWl6YXRpb24uCiAgICAgRmxvYXRSZWN0IHNuYXBwZWRTZWxlY3Rpb25S
ZWN0ID0gbV9wYWludFJlY3Q7Ci0gICAgaWYgKHN0YXJ0T2Zmc2V0IHx8IGVuZE9mZnNldCAhPSB0
ZXh0UnVuLmxlbmd0aCgpKSB7CisgICAgaWYgKHN0YXJ0T2Zmc2V0IHx8IGVuZE9mZnNldCAhPSBt
X3BhaW50VGV4dFJ1bi5sZW5ndGgoKSkgewogICAgICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJl
Y3QgPSB7IG1fcGFpbnRSZWN0LngoKSwgbV9wYWludFJlY3QueSgpLCBtX3BhaW50UmVjdC53aWR0
aCgpLCBtX3BhaW50UmVjdC5oZWlnaHQoKSB9OwotICAgICAgICBmb250LmFkanVzdFNlbGVjdGlv
blJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQpOwotICAgICAgICBzbmFwcGVkU2VsZWN0aW9uUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhl
bHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCBtX2RvY3VtZW50LmRldmljZVNj
YWxlRmFjdG9yKCksIHRleHRSdW4ubHRyKCkpOworICAgICAgICBmb250LmFkanVzdFNlbGVjdGlv
blJlY3RGb3JUZXh0KG1fcGFpbnRUZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0KTsKKyAgICAgICAgc25hcHBlZFNlbGVjdGlvblJlY3QgPSBzbmFwUmVjdFRvRGV2
aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgbV9kb2N1bWVudC5k
ZXZpY2VTY2FsZUZhY3RvcigpLCBtX3BhaW50VGV4dFJ1bi5sdHIoKSk7CiAgICAgfQogCiAgICAg
Ly8gMi4gUGFpbnQKLSAgICBhdXRvIHRleHREZWNvcmF0aW9ucyA9IGxpbmVTdHlsZS50ZXh0RGVj
b3JhdGlvbnNJbkVmZmVjdCgpOworICAgIGF1dG8gdGV4dERlY29yYXRpb25zID0gbV9zdHlsZS50
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgIHRleHREZWNvcmF0aW9ucy5hZGQoVGV4dERl
Y29yYXRpb25QYWludGVyOjp0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdEZvclN0eWxlKG1hcmtlZFRl
eHQuc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMpKTsKLSAgICBUZXh0RGVjb3JhdGlvblBhaW50
ZXIgZGVjb3JhdGlvblBhaW50ZXIgeyBjb250ZXh0LCB0ZXh0RGVjb3JhdGlvbnMsIG1fcmVuZGVy
ZXIsIG1fdGV4dEJveC5pc0ZpcnN0TGluZSgpLCBmb250LCBtYXJrZWRUZXh0LnN0eWxlLnRleHRE
ZWNvcmF0aW9uU3R5bGVzIH07Ci0gICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFJ1bkl0ZXJh
dG9yKExheW91dEludGVncmF0aW9uOjp0ZXh0UnVuRm9yKCZtX3RleHRCb3gpKTsKKyAgICBUZXh0
RGVjb3JhdGlvblBhaW50ZXIgZGVjb3JhdGlvblBhaW50ZXIgeyBjb250ZXh0LCB0ZXh0RGVjb3Jh
dGlvbnMsIG1fcmVuZGVyZXIsIG1faXNGaXJzdExpbmUsIGZvbnQsIG1hcmtlZFRleHQuc3R5bGUu
dGV4dERlY29yYXRpb25TdHlsZXMgfTsKKyAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRUZXh0UnVu
SXRlcmF0b3IobV90ZXh0Qm94KTsKICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRXaWR0aChzbmFw
cGVkU2VsZWN0aW9uUmVjdC53aWR0aCgpKTsKLSAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRJc0hv
cml6b250YWwobV90ZXh0Qm94LmlzSG9yaXpvbnRhbCgpKTsKKyAgICBkZWNvcmF0aW9uUGFpbnRl
ci5zZXRJc0hvcml6b250YWwodGV4dEJveCgpLmlzSG9yaXpvbnRhbCgpKTsKICAgICBpZiAobWFy
a2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93KSB7CiAgICAgICAgIGRlY29yYXRpb25QYWludGVyLnNl
dFRleHRTaGFkb3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52YWx1ZSgpKTsKLSAgICAg
ICAgaWYgKGxpbmVTdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCi0gICAgICAgICAgICBkZWNv
cmF0aW9uUGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRlcigmbGluZVN0eWxlLmFwcGxlQ29sb3JG
aWx0ZXIoKSk7CisgICAgICAgIGlmIChtX3N0eWxlLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkKKyAg
ICAgICAgICAgIGRlY29yYXRpb25QYWludGVyLnNldFNoYWRvd0NvbG9yRmlsdGVyKCZtX3N0eWxl
LmFwcGxlQ29sb3JGaWx0ZXIoKSk7CiAgICAgfQogCiAgICAgewpAQCAtMzc2LDcgKzM4Niw3IEBA
IHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50RGVjb3JhdGlvbihjb25zdCBTdHlsZWRNYXJrZWRU
ZXh0JiBtYXJrZWRUZXh0LCBjb25zdCBGCiAgICAgICAgICAgICBpZiAoIWNsaXBPdXRSZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250ZXh0LmNsaXBPdXQoY2xpcE91dFJlY3QpOwog
ICAgICAgICB9Ci0gICAgICAgIGRlY29yYXRpb25QYWludGVyLnBhaW50VGV4dERlY29yYXRpb24o
dGV4dFJ1bi5zdWJSdW4oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KSwgbV90
ZXh0Qm94LnRleHRPcmlnaW5Gcm9tQm94UmVjdChzbmFwcGVkU2VsZWN0aW9uUmVjdCksIHNuYXBw
ZWRTZWxlY3Rpb25SZWN0LmxvY2F0aW9uKCkpOworICAgICAgICBkZWNvcmF0aW9uUGFpbnRlci5w
YWludFRleHREZWNvcmF0aW9uKG1fcGFpbnRUZXh0UnVuLnN1YlJ1bihzdGFydE9mZnNldCwgZW5k
T2Zmc2V0IC0gc3RhcnRPZmZzZXQpLCB0ZXh0T3JpZ2luRnJvbVBhaW50UmVjdChzbmFwcGVkU2Vs
ZWN0aW9uUmVjdCksIHNuYXBwZWRTZWxlY3Rpb25SZWN0LmxvY2F0aW9uKCkpOwogICAgIH0KIAog
ICAgIGlmIChpc0NvbWJpbmVkVGV4dCkKQEAgLTM4NiwyMCArMzk2LDIwIEBAIHZvaWQgVGV4dEJv
eFBhaW50ZXI6OnBhaW50RGVjb3JhdGlvbihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRU
ZXh0LCBjb25zdCBGCiB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uVW5kZXJs
aW5lcygpCiB7CiAgICAgZm9yIChhdXRvJiB1bmRlcmxpbmUgOiBtX3JlbmRlcmVyLmZyYW1lKCku
ZWRpdG9yKCkuY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzKCkpIHsKLSAgICAgICAgaWYgKHVu
ZGVybGluZS5lbmRPZmZzZXQgPD0gbV90ZXh0Qm94LnN0YXJ0KCkpIHsKKyAgICAgICAgaWYgKHVu
ZGVybGluZS5lbmRPZmZzZXQgPD0gdGV4dEJveCgpLnN0YXJ0KCkpIHsKICAgICAgICAgICAgIC8v
IFVuZGVybGluZSBpcyBjb21wbGV0ZWx5IGJlZm9yZSB0aGlzIHJ1bi4gVGhpcyBtaWdodCBiZSBh
biB1bmRlcmxpbmUgdGhhdCBzaXRzCiAgICAgICAgICAgICAvLyBiZWZvcmUgdGhlIGZpcnN0IHJ1
biB3ZSBkcmF3LCBvciB1bmRlcmxpbmVzIHRoYXQgd2VyZSB3aXRoaW4gcnVucyB3ZSBza2lwcGVk
CiAgICAgICAgICAgICAvLyBkdWUgdG8gdHJ1bmNhdGlvbi4KICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHVuZGVybGluZS5zdGFydE9mZnNldCA+PSBtX3Rl
eHRCb3guZW5kKCkpCisgICAgICAgIGlmICh1bmRlcmxpbmUuc3RhcnRPZmZzZXQgPj0gdGV4dEJv
eCgpLmVuZCgpKQogICAgICAgICAgICAgYnJlYWs7IC8vIFVuZGVybGluZSBpcyBjb21wbGV0ZWx5
IGFmdGVyIHRoaXMgcnVuLCBiYWlsLiBBIGxhdGVyIHJ1biB3aWxsIHBhaW50IGl0LgogCiAgICAg
ICAgIC8vIFVuZGVybGluZSBpbnRlcnNlY3RzIHRoaXMgcnVuLiBQYWludCBpdC4KICAgICAgICAg
cGFpbnRDb21wb3NpdGlvblVuZGVybGluZSh1bmRlcmxpbmUpOwogCi0gICAgICAgIGlmICh1bmRl
cmxpbmUuZW5kT2Zmc2V0ID4gbV90ZXh0Qm94LmVuZCgpKQorICAgICAgICBpZiAodW5kZXJsaW5l
LmVuZE9mZnNldCA+IHRleHRCb3goKS5lbmQoKSkKICAgICAgICAgICAgIGJyZWFrOyAvLyBVbmRl
cmxpbmUgYWxzbyBydW5zIGludG8gdGhlIG5leHQgcnVuLiBCYWlsIG5vdywgbm8gbW9yZSBtYXJr
ZXIgYWR2YW5jZW1lbnQuCiAgICAgfQogfQpAQCAtNDExLDM3ICs0MjEsNDYgQEAgc3RhdGljIGlu
bGluZSB2b2lkIG1pcnJvclJUTFNlZ21lbnQoZmxvYXQgbG9naWNhbFdpZHRoLCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiwKICAgICBzdGFydCA9IGxvZ2ljYWxXaWR0aCAtIHdpZHRoIC0gc3RhcnQ7
CiB9CiAKK3N0YXRpYyBmbG9hdCB0ZXh0UG9zaXRpb24oY29uc3QgTGF5b3V0SW50ZWdyYXRpb246
OlRleHRSdW5JdGVyYXRvciYgdGV4dEJveCkKK3sKKyAgICAvLyBXaGVuIGNvbXB1dGluZyB0aGUg
d2lkdGggb2YgYSB0ZXh0IHJ1biwgUmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Q
b3NpdGlvbnNGb3JMaW5lKCkgZG9lc24ndCBpbmNsdWRlIHRoZSBhY3R1YWwgb2Zmc2V0CisgICAg
Ly8gZnJvbSB0aGUgY29udGFpbmluZyBibG9jayBlZGdlIGluIGl0cyBtZWFzdXJlbWVudC4gdGV4
dFBvc2l0aW9uKCkgc2hvdWxkIGJlIGNvbnNpc3RlbnQgc28gdGhlIHRleHQgYXJlIHJlbmRlcmVk
IGluIHRoZSBzYW1lIHdpZHRoLgorICAgIGlmICghdGV4dEJveC0+bG9naWNhbExlZnQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRleHRCb3gtPmxvZ2ljYWxMZWZ0KCkgLSB0ZXh0
Qm94LT5saW5lKCktPmNvbnRlbnRMb2dpY2FsTGVmdCgpOworfQorCiB2b2lkIFRleHRCb3hQYWlu
dGVyOjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKGNvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5l
JiB1bmRlcmxpbmUpCiB7CiAgICAgZmxvYXQgc3RhcnQgPSAwOyAvLyBzdGFydCBvZiBsaW5lIHRv
IGRyYXcsIHJlbGF0aXZlIHRvIHR4Ci0gICAgZmxvYXQgd2lkdGggPSBtX3RleHRCb3gubG9naWNh
bFdpZHRoKCk7IC8vIGhvdyBtdWNoIGxpbmUgdG8gZHJhdworICAgIGZsb2F0IHdpZHRoID0gdGV4
dEJveCgpLmxvZ2ljYWxXaWR0aCgpOyAvLyBob3cgbXVjaCBsaW5lIHRvIGRyYXcKICAgICBib29s
IHVzZVdob2xlV2lkdGggPSB0cnVlOwotICAgIHVuc2lnbmVkIHBhaW50U3RhcnQgPSBtX3RleHRC
b3guc3RhcnQoKTsKLSAgICB1bnNpZ25lZCBwYWludEVuZCA9IG1fdGV4dEJveC5lbmQoKTsKKyAg
ICB1bnNpZ25lZCBwYWludFN0YXJ0ID0gdGV4dEJveCgpLnN0YXJ0KCk7CisgICAgdW5zaWduZWQg
cGFpbnRFbmQgPSB0ZXh0Qm94KCkuZW5kKCk7CiAgICAgaWYgKHBhaW50U3RhcnQgPD0gdW5kZXJs
aW5lLnN0YXJ0T2Zmc2V0KSB7CiAgICAgICAgIHBhaW50U3RhcnQgPSB1bmRlcmxpbmUuc3RhcnRP
ZmZzZXQ7CiAgICAgICAgIHVzZVdob2xlV2lkdGggPSBmYWxzZTsKLSAgICAgICAgc3RhcnQgPSBt
X3JlbmRlcmVyLndpZHRoKG1fdGV4dEJveC5zdGFydCgpLCBwYWludFN0YXJ0IC0gbV90ZXh0Qm94
LnN0YXJ0KCksIG1fdGV4dEJveC50ZXh0UG9zKCksIG1fdGV4dEJveC5pc0ZpcnN0TGluZSgpKTsK
KyAgICAgICAgc3RhcnQgPSBtX3JlbmRlcmVyLndpZHRoKHRleHRCb3goKS5zdGFydCgpLCBwYWlu
dFN0YXJ0IC0gdGV4dEJveCgpLnN0YXJ0KCksIHRleHRQb3NpdGlvbihtX3RleHRCb3gpLCBtX2lz
Rmlyc3RMaW5lKTsKICAgICB9CiAgICAgaWYgKHBhaW50RW5kICE9IHVuZGVybGluZS5lbmRPZmZz
ZXQpIHsKICAgICAgICAgcGFpbnRFbmQgPSBzdGQ6Om1pbihwYWludEVuZCwgKHVuc2lnbmVkKXVu
ZGVybGluZS5lbmRPZmZzZXQpOwogICAgICAgICB1c2VXaG9sZVdpZHRoID0gZmFsc2U7CiAgICAg
fQotICAgIGlmIChtX3RleHRCb3gudHJ1bmNhdGlvbigpKSB7Ci0gICAgICAgIHBhaW50RW5kID0g
c3RkOjptaW4ocGFpbnRFbmQsIG1fdGV4dEJveC5zdGFydCgpICsgKm1fdGV4dEJveC50cnVuY2F0
aW9uKCkpOworICAgIGlmIChtX3NlbGVjdGFibGVSYW5nZS50cnVuY2F0aW9uKSB7CisgICAgICAg
IHBhaW50RW5kID0gc3RkOjptaW4ocGFpbnRFbmQsIHRleHRCb3goKS5zdGFydCgpICsgKm1fc2Vs
ZWN0YWJsZVJhbmdlLnRydW5jYXRpb24pOwogICAgICAgICB1c2VXaG9sZVdpZHRoID0gZmFsc2U7
CiAgICAgfQogICAgIGlmICghdXNlV2hvbGVXaWR0aCkgewotICAgICAgICB3aWR0aCA9IG1fcmVu
ZGVyZXIud2lkdGgocGFpbnRTdGFydCwgcGFpbnRFbmQgLSBwYWludFN0YXJ0LCBtX3RleHRCb3gu
dGV4dFBvcygpICsgc3RhcnQsIG1fdGV4dEJveC5pc0ZpcnN0TGluZSgpKTsKLSAgICAgICAgbWly
cm9yUlRMU2VnbWVudChtX3RleHRCb3gubG9naWNhbFdpZHRoKCksIG1fdGV4dEJveC5kaXJlY3Rp
b24oKSwgc3RhcnQsIHdpZHRoKTsKKyAgICAgICAgd2lkdGggPSBtX3JlbmRlcmVyLndpZHRoKHBh
aW50U3RhcnQsIHBhaW50RW5kIC0gcGFpbnRTdGFydCwgdGV4dFBvc2l0aW9uKG1fdGV4dEJveCkg
KyBzdGFydCwgbV9pc0ZpcnN0TGluZSk7CisgICAgICAgIG1pcnJvclJUTFNlZ21lbnQodGV4dEJv
eCgpLmxvZ2ljYWxXaWR0aCgpLCB0ZXh0Qm94KCkuZGlyZWN0aW9uKCksIHN0YXJ0LCB3aWR0aCk7
CiAgICAgfQogCiAgICAgLy8gVGhpY2sgbWFya2VkIHRleHQgdW5kZXJsaW5lcyBhcmUgMnB4IHRo
aWNrIGFzIGxvbmcgYXMgdGhlcmUgaXMgcm9vbSBmb3IgdGhlIDJweCBsaW5lIHVuZGVyIHRoZSBi
YXNlbGluZS4KICAgICAvLyBBbGwgb3RoZXIgbWFya2VkIHRleHQgdW5kZXJsaW5lcyBhcmUgMXB4
IHRoaWNrLgogICAgIC8vIElmIHRoZXJlJ3Mgbm90IGVub3VnaCBzcGFjZSB0aGUgdW5kZXJsaW5l
IHdpbGwgdG91Y2ggb3Igb3ZlcmxhcCBjaGFyYWN0ZXJzLgogICAgIGludCBsaW5lVGhpY2tuZXNz
ID0gMTsKLSAgICBpbnQgYmFzZWxpbmUgPSBtX3RleHRCb3gubGluZVN0eWxlKCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKTsKLSAgICBpZiAodW5kZXJsaW5lLnRoaWNrICYmIG1fdGV4dEJveC5sb2dp
Y2FsSGVpZ2h0KCkgLSBiYXNlbGluZSA+PSAyKQorICAgIGludCBiYXNlbGluZSA9IG1fc3R5bGUu
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKKyAgICBpZiAodW5kZXJsaW5lLnRoaWNrICYmIHRleHRC
b3goKS5sb2dpY2FsSGVpZ2h0KCkgLSBiYXNlbGluZSA+PSAyKQogICAgICAgICBsaW5lVGhpY2tu
ZXNzID0gMjsKIAogICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBzb21lIHNwYWNlIGJldHdlZW4gdW5k
ZXJsaW5lcyBvZiBzdWJzZXF1ZW50IGNsYXVzZXMsIGJlY2F1c2Ugc29tZSBpbnB1dCBtZXRob2Rz
IGRvIG5vdCB1c2UgZGlmZmVyZW50IHVuZGVybGluZSBzdHlsZXMgZm9yIHRob3NlLgpAQCAtNDU1
LDEyICs0NzQsMTIgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVy
bGluZShjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYgdW5kZXIKICAgICBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7CiAgICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcih1bmRlcmxpbmVDb2xvcik7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mo
bGluZVRoaWNrbmVzcyk7Ci0gICAgY29udGV4dC5kcmF3TGluZUZvclRleHQoRmxvYXRSZWN0KG1f
cGFpbnRSZWN0LngoKSArIHN0YXJ0LCBtX3BhaW50UmVjdC55KCkgKyBtX3RleHRCb3gubG9naWNh
bEhlaWdodCgpIC0gbGluZVRoaWNrbmVzcywgd2lkdGgsIGxpbmVUaGlja25lc3MpLCBtX2RvY3Vt
ZW50LnByaW50aW5nKCkpOworICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UmVjdCht
X3BhaW50UmVjdC54KCkgKyBzdGFydCwgbV9wYWludFJlY3QueSgpICsgdGV4dEJveCgpLmxvZ2lj
YWxIZWlnaHQoKSAtIGxpbmVUaGlja25lc3MsIHdpZHRoLCBsaW5lVGhpY2tuZXNzKSwgbV9kb2N1
bWVudC5wcmludGluZygpKTsKIH0KIAogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9y
bURvY3VtZW50TWFya2VycygpCiB7Ci0gICAgYXV0byBtYXJrZWRUZXh0cyA9IE1hcmtlZFRleHQ6
OmNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMobV9yZW5kZXJlciwgbV90ZXh0Qm94LnNlbGVjdGFi
bGVSYW5nZSgpLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uKTsKKyAgICBhdXRv
IG1hcmtlZFRleHRzID0gTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2VycyhtX3Jl
bmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6RGVjb3Jh
dGlvbik7CiAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogTWFya2VkVGV4dDo6c3ViZGl2aWRl
KG1hcmtlZFRleHRzLCBNYXJrZWRUZXh0OjpPdmVybGFwU3RyYXRlZ3k6OkZyb250bW9zdCkpCiAg
ICAgICAgIHBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcihtYXJrZWRUZXh0KTsKIH0KQEAgLTQ3
MSw3ICs0OTAsNyBAQCBGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZVVuaW9uT2ZB
bGxEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBMZWdhY3lJbgogICAgIEZsb2F0UmVjdCByZXN1
bHQ7CiAgICAgYXV0byBtYXJrZWRUZXh0cyA9IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JEb2N1bWVu
dE1hcmtlcnModGV4dEJveC5yZW5kZXJlcigpLCB0ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpLCBN
YXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uKTsKICAgICBmb3IgKGF1dG8mIG1hcmtl
ZFRleHQgOiBNYXJrZWRUZXh0OjpzdWJkaXZpZGUobWFya2VkVGV4dHMsIE1hcmtlZFRleHQ6Ok92
ZXJsYXBTdHJhdGVneTo6RnJvbnRtb3N0KSkKLSAgICAgICAgcmVzdWx0ID0gdW5pb25SZWN0KHJl
c3VsdCwgY2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHModGV4dEJveCwgbWFya2VkVGV4dCkp
OworICAgICAgICByZXN1bHQgPSB1bmlvblJlY3QocmVzdWx0LCBjYWxjdWxhdGVEb2N1bWVudE1h
cmtlckJvdW5kcyhMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bkZvcigmdGV4dEJveCksIG1hcmtl
ZFRleHQpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01MDksMTMgKzUyOCwxMiBAQCB2
b2lkIFRleHRCb3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoY29uc3QgTWFy
a2VkVGV4dCYgbWFya2VkVGV4dCkKICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihib3VuZHMsIGxpbmVTdHlsZUZvck1hcmtlZFRleHRUeXBlKCkpOwog
fQogCi1GbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNvbXB1dGVQYWludFJlY3QoY29uc3QgTGVn
YWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KQorRmxvYXRSZWN0IFRleHRCb3hQYWludGVyOjpjb21wdXRlUGFpbnRSZWN0KGNvbnN0IExheW91
dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBGbG9hdFBvaW50IGxvY2FsUGFpbnRPZmZzZXQo
cGFpbnRPZmZzZXQpOwogCi0gICAgaWYgKHRleHRCb3gudHJ1bmNhdGlvbigpKSB7Ci0gICAgICAg
IGF1dG8mIHJlbmRlcmVyID0gdGV4dEJveC5yZW5kZXJlcigpOwotICAgICAgICBpZiAocmVuZGVy
ZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICE9
IHRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CisgICAgaWYgKG1fc2VsZWN0YWJs
ZVJhbmdlLnRydW5jYXRpb24pIHsKKyAgICAgICAgaWYgKG1fcmVuZGVyZXIuY29udGFpbmluZ0Js
b2NrKCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICE9IHRleHRCb3goKS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgICAgIC8vIE1ha2UgdGhlIHZpc2libGUg
ZnJhZ21lbnQgb2YgdGV4dCBodWcgdGhlIGVkZ2UgY2xvc2VzdCB0byB0aGUgcmVzdCBvZiB0aGUg
cnVuIGJ5IG1vdmluZyB0aGUgb3JpZ2luCiAgICAgICAgICAgICAvLyBhdCB3aGljaCB3ZSBzdGFy
dCBkcmF3aW5nIHRleHQuCiAgICAgICAgICAgICAvLyBlLmcuIEluIHRoZSBjYXNlIG9mIExUUiB0
ZXh0IHRydW5jYXRlZCBpbiBhbiBSVEwgQ29udGV4dCwgdGhlIGNvcnJlY3QgYmVoYXZpb3IgaXM6
CkBAIC01MjQsMzcgKzU0Miw5OSBAQCBGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNvbXB1dGVQ
YWludFJlY3QoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgYwogICAgICAgICAg
ICAgLy8gZmFydGhlciB0byB0aGUgcmlnaHQuCiAgICAgICAgICAgICAvLyBOT1RFOiBXZWJLaXQn
cyBiZWhhdmlvciBkaWZmZXJzIGZyb20gdGhhdCBvZiBJRSB3aGljaCBhcHBlYXJzIHRvIGp1c3Qg
b3ZlcmxheSB0aGUgZWxsaXBzaXMgb24gdG9wIG9mIHRoZQogICAgICAgICAgICAgLy8gdHJ1bmNh
dGVkIHN0cmluZyBpLmUuICB8SGVsbG98Q0JBfCAtPiB8Li4ubG98Q0JBfAotICAgICAgICAgICAg
TGF5b3V0VW5pdCB3aWR0aE9mVmlzaWJsZVRleHQgeyByZW5kZXJlci53aWR0aCh0ZXh0Qm94LnN0
YXJ0KCksICp0ZXh0Qm94LnRydW5jYXRpb24oKSwgdGV4dEJveC50ZXh0UG9zKCksIHRleHRCb3gu
aXNGaXJzdExpbmUoKSkgfTsKLSAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGhPZkhpZGRlblRl
eHQgeyB0ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpIC0gd2lkdGhPZlZpc2libGVUZXh0IH07Ci0gICAg
ICAgICAgICBMYXlvdXRTaXplIHRydW5jYXRpb25PZmZzZXQodGV4dEJveC5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyB3aWR0aE9mSGlkZGVuVGV4dCA6IC13aWR0aE9mSGlkZGVuVGV4dCwgMF9s
dSk7Ci0gICAgICAgICAgICBsb2NhbFBhaW50T2Zmc2V0Lm1vdmUodGV4dEJveC5pc0hvcml6b250
YWwoKSA/IHRydW5jYXRpb25PZmZzZXQgOiB0cnVuY2F0aW9uT2Zmc2V0LnRyYW5zcG9zZWRTaXpl
KCkpOworICAgICAgICAgICAgTGF5b3V0VW5pdCB3aWR0aE9mVmlzaWJsZVRleHQgeyBtX3JlbmRl
cmVyLndpZHRoKHRleHRCb3goKS5zdGFydCgpLCAqbV9zZWxlY3RhYmxlUmFuZ2UudHJ1bmNhdGlv
biwgdGV4dFBvc2l0aW9uKG1fdGV4dEJveCksIG1faXNGaXJzdExpbmUpIH07CisgICAgICAgICAg
ICBMYXlvdXRVbml0IHdpZHRoT2ZIaWRkZW5UZXh0IHsgdGV4dEJveCgpLmxvZ2ljYWxXaWR0aCgp
IC0gd2lkdGhPZlZpc2libGVUZXh0IH07CisgICAgICAgICAgICBMYXlvdXRTaXplIHRydW5jYXRp
b25PZmZzZXQodGV4dEJveCgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHdpZHRoT2ZIaWRk
ZW5UZXh0IDogLXdpZHRoT2ZIaWRkZW5UZXh0LCAwX2x1KTsKKyAgICAgICAgICAgIGxvY2FsUGFp
bnRPZmZzZXQubW92ZSh0ZXh0Qm94KCkuaXNIb3Jpem9udGFsKCkgPyB0cnVuY2F0aW9uT2Zmc2V0
IDogdHJ1bmNhdGlvbk9mZnNldC50cmFuc3Bvc2VkU2l6ZSgpKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIGxvY2FsUGFpbnRPZmZzZXQubW92ZSgwLCB0ZXh0Qm94LmxpbmVTdHlsZSgpLmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyAwIDogLXRleHRCb3gubG9naWNhbEhlaWdodCgpKTsKKyAg
ICBsb2NhbFBhaW50T2Zmc2V0Lm1vdmUoMCwgbV9zdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gMCA6IC10ZXh0Qm94KCkubG9naWNhbEhlaWdodCgpKTsKIAotICAgIEZsb2F0UG9pbnQg
Ym94T3JpZ2luID0gdGV4dEJveC5sb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7CisgICAgYXV0
byBsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nID0gWyZdKCkgLT4gRmxvYXRQb2ludCB7CisgICAg
ICAgIGF1dG8gcmVjdCA9IHRleHRCb3goKS5yZWN0KCk7CisgICAgICAgIGlmICghbV9zdHlsZS5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlY3QubG9j
YXRpb24oKTsKKyAgICAgICAgYXV0byYgYmxvY2sgPSB0ZXh0Qm94KCkubGluZSgpLT5jb250YWlu
aW5nQmxvY2soKTsKKyAgICAgICAgaWYgKGJsb2NrLnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiB7IHJlY3QueCgpLCBibG9jay5oZWlnaHQoKSAt
IHJlY3QuaGVpZ2h0KCkgLSByZWN0LnkoKSB9OworICAgICAgICByZXR1cm4geyBibG9jay53aWR0
aCgpIC0gcmVjdC53aWR0aCgpIC0gcmVjdC54KCksIHJlY3QueSgpIH07CisgICAgfTsKKworICAg
IEZsb2F0UG9pbnQgYm94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygpOwogICAg
IGJveE9yaWdpbi5tb3ZlQnkobG9jYWxQYWludE9mZnNldCk7Ci0gICAgcmV0dXJuIHsgYm94T3Jp
Z2luLCBGbG9hdFNpemUodGV4dEJveC5sb2dpY2FsV2lkdGgoKSwgdGV4dEJveC5sb2dpY2FsSGVp
Z2h0KCkpIH07CisgICAgcmV0dXJuIHsgYm94T3JpZ2luLCBGbG9hdFNpemUodGV4dEJveCgpLmxv
Z2ljYWxXaWR0aCgpLCB0ZXh0Qm94KCkubG9naWNhbEhlaWdodCgpKSB9OwogfQogCi1GbG9hdFJl
Y3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExl
Z2FjeUlubGluZVRleHRCb3gmIHRleHRCb3gsIGNvbnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQp
CitzdGF0aWMgY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlRm9yKGNvbnN0IFJlbmRlclRl
eHQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgdGV4dEJveFN0eWxlKQogewotICAgIGF1
dG8mIGZvbnQgPSB0ZXh0Qm94LmxpbmVGb250KCk7CisgICAgaWYgKGlzPFJlbmRlckNvbWJpbmVU
ZXh0PihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4
dD4ocmVuZGVyZXIpLnRleHRDb21iaW5lRm9udCgpOworCisgICAgcmV0dXJuIHRleHRCb3hTdHls
ZS5mb250Q2FzY2FkZSgpOworfQorCitGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0
ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRl
cmF0b3ImIHRleHRCb3gsIGNvbnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCit7CisgICAgYXV0
byYgZm9udCA9IGZvbnRDYXNjYWRlRm9yKHRleHRCb3gtPnJlbmRlcmVyKCksIHRleHRCb3gtPnN0
eWxlKCkpOwogICAgIGF1dG8gYXNjZW50ID0gZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpOwog
ICAgIGF1dG8gZm9udFNpemUgPSBzdGQ6Om1pbihzdGQ6Om1heChmb250LnNpemUoKSwgMTAuMGYp
LCA0MC4wZik7CiAgICAgYXV0byB5ID0gYXNjZW50ICsgMC4xMTAzNSAqIGZvbnRTaXplOwogICAg
IGF1dG8gaGVpZ2h0ID0gMC4xMzI0NyAqIGZvbnRTaXplOwogCiAgICAgLy8gQXZvaWQgbWVhc3Vy
aW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBhcyBhbiBv
cHRpbWl6YXRpb24uCi0gICAgaWYgKG1hcmtlZFRleHQuc3RhcnRPZmZzZXQgfHwgbWFya2VkVGV4
dC5lbmRPZmZzZXQgIT0gdGV4dEJveC5zZWxlY3RhYmxlUmFuZ2UoKS5jbGFtcCh0ZXh0Qm94LmVu
ZCgpKSkgewotICAgICAgICBUZXh0UnVuIHJ1biA9IHRleHRCb3guY3JlYXRlVGV4dFJ1bigpOwor
ICAgIGlmIChtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0IHx8IG1hcmtlZFRleHQuZW5kT2Zmc2V0ICE9
IHRleHRCb3gtPnNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKHRleHRCb3gtPmVuZCgpKSkgeworICAg
ICAgICBUZXh0UnVuIHJ1biA9IHRleHRCb3gtPmNyZWF0ZVRleHRSdW4oKTsKICAgICAgICAgTGF5
b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdCgwLCB5LCAwLCBoZWlnaHQpOwotICAg
ICAgICB0ZXh0Qm94LmxpbmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBz
ZWxlY3Rpb25SZWN0LCBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNl
dCk7CisgICAgICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBzZWxlY3Rp
b25SZWN0LCBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7CiAg
ICAgICAgIHJldHVybiBzZWxlY3Rpb25SZWN0OwogICAgIH0KIAotICAgIHJldHVybiBGbG9hdFJl
Y3QoMCwgeSwgdGV4dEJveC5sb2dpY2FsV2lkdGgoKSwgaGVpZ2h0KTsKKyAgICByZXR1cm4gRmxv
YXRSZWN0KDAsIHksIHRleHRCb3gtPmxvZ2ljYWxXaWR0aCgpLCBoZWlnaHQpOwogfQogCitib29s
IFRleHRCb3hQYWludGVyOjpjb21wdXRlSGF2ZVNlbGVjdGlvbigpIGNvbnN0Cit7CisgICAgaWYg
KG1faXNQcmludGluZyB8fCBtX3BhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpUZXh0Q2xp
cCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fcmVuZGVyZXIudmlldygp
LnNlbGVjdGlvbigpLmhpZ2hsaWdodFN0YXRlRm9yVGV4dEJveChtX3JlbmRlcmVyLCBtX3NlbGVj
dGFibGVSYW5nZSkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZTsKK30KKwor
Y29uc3QgUmVuZGVyQ29tYmluZVRleHQqIFRleHRCb3hQYWludGVyOjpjb21iaW5lZFRleHQoKSBj
b25zdAoreworICAgIHJldHVybiBpczxSZW5kZXJDb21iaW5lVGV4dD4obV9yZW5kZXJlcikgPyAm
ZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KG1fcmVuZGVyZXIpIDogbnVsbHB0cjsKK30KKwor
Y29uc3QgRm9udENhc2NhZGUmIFRleHRCb3hQYWludGVyOjpmb250Q2FzY2FkZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZvbnRDYXNjYWRlRm9yKG1fcmVuZGVyZXIsIG1fc3R5bGUpOworfQorCitG
bG9hdFBvaW50IFRleHRCb3hQYWludGVyOjp0ZXh0T3JpZ2luRnJvbVBhaW50UmVjdChjb25zdCBG
bG9hdFJlY3QmIHBhaW50UmVjdCkgY29uc3QKK3sKKyAgICBGbG9hdFBvaW50IHRleHRPcmlnaW4g
eyBwYWludFJlY3QueCgpLCBwYWludFJlY3QueSgpICsgZm9udENhc2NhZGUoKS5mb250TWV0cmlj
cygpLmFzY2VudCgpIH07CisgICAgaWYgKGF1dG8qIGNvbWJpbmVkVGV4dCA9IHRoaXMtPmNvbWJp
bmVkVGV4dCgpKSB7CisgICAgICAgIGlmIChhdXRvIG5ld09yaWdpbiA9IGNvbWJpbmVkVGV4dC0+
Y29tcHV0ZVRleHRPcmlnaW4ocGFpbnRSZWN0KSkKKyAgICAgICAgICAgIHRleHRPcmlnaW4gPSBu
ZXdPcmlnaW4udmFsdWUoKTsKKyAgICB9CisgICAgaWYgKHRleHRCb3goKS5pc0hvcml6b250YWwo
KSkKKyAgICAgICAgdGV4dE9yaWdpbi5zZXRZKHJvdW5kVG9EZXZpY2VQaXhlbChMYXlvdXRVbml0
IHsgdGV4dE9yaWdpbi55KCkgfSwgbV9yZW5kZXJlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCkpKTsKKyAgICBlbHNlCisgICAgICAgIHRleHRPcmlnaW4uc2V0WChyb3VuZFRvRGV2aWNl
UGl4ZWwoTGF5b3V0VW5pdCB7IHRleHRPcmlnaW4ueCgpIH0sIG1fcmVuZGVyZXIuZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgcmV0dXJuIHRleHRPcmlnaW47Cit9CisKK2Nv
bnN0IFNoYWRvd0RhdGEqIFRleHRCb3hQYWludGVyOjpkZWJ1Z1RleHRTaGFkb3coKSBjb25zdAor
eworICAgIGlmICghbV9yZW5kZXJlci5zZXR0aW5ncygpLmxlZ2FjeUxpbmVMYXlvdXRWaXN1YWxD
b3ZlcmFnZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCF0ZXh0
Qm94KCkubGVnYWN5SW5saW5lQm94KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlYnVnVGV4dFNoYWRvdyhJbnRQb2lu
dCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBTUkdCQTx1aW50OF90
PiB7IDE1MCwgMCwgMCwgMTkwIH0pOworICAgIHJldHVybiAmZGVidWdUZXh0U2hhZG93LmdldCgp
OworfQorCisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94
UGFpbnRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmgKaW5k
ZXggMTZjOWNlMjM2MDlkMjA2MmQxZjFjY2YzNWMwOTY1M2NkZDQ2ZGJiZS4uN2VhM2IxZTZkMjA4
N2E5YmRkM2FhMWY0N2UxYmFkMDUyNjJhMGM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRCb3hQYWludGVyLmgKQEAgLTI1LDEzICsyNSwyMCBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJh
dG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiVGV4dEJveFNlbGVj
dGFibGVSYW5nZS5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBDb2xvcjsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgTGVnYWN5SW5saW5lVGV4
dEJveDsKK2NsYXNzIFJlbmRlckNvbWJpbmVUZXh0OworY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFz
cyBSZW5kZXJUZXh0OworY2xhc3MgU2hhZG93RGF0YTsKIHN0cnVjdCBDb21wb3NpdGlvblVuZGVy
bGluZTsKIHN0cnVjdCBNYXJrZWRUZXh0Owogc3RydWN0IFBhaW50SW5mbzsKQEAgLTQwLDYgKzQ3
LDcgQEAgc3RydWN0IFN0eWxlZE1hcmtlZFRleHQ7CiBjbGFzcyBUZXh0Qm94UGFpbnRlciB7CiBw
dWJsaWM6CiAgICAgVGV4dEJveFBhaW50ZXIoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYsIFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCk7CisgICAgVGV4dEJveFBh
aW50ZXIoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQmLCBjb25zdCBMYXlv
dXQ6OlJ1biYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCk7CiAg
ICAgflRleHRCb3hQYWludGVyKCk7CiAKICAgICB2b2lkIHBhaW50KCk7CkBAIC00Nyw2ICs1NSwx
MCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEZsb2F0UmVjdCBjYWxjdWxhdGVVbmlvbk9mQWxsRG9j
dW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYpOwogCiBwcml2YXRl
OgorICAgIFRleHRCb3hQYWludGVyKExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3Im
JiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKKworICAgIGF1
dG8mIHRleHRCb3goKSBjb25zdCB7IHJldHVybiAqbV90ZXh0Qm94OyB9CisKICAgICB2b2lkIHBh
aW50QmFja2dyb3VuZCgpOwogICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5kQW5kRGVjb3JhdGlvbnMo
KTsKICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKCk7CkBAIC02MSwxOCArNzMs
MzEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoY29uc3Qg
Q29tcG9zaXRpb25VbmRlcmxpbmUmKTsKICAgICB2b2lkIHBhaW50UGxhdGZvcm1Eb2N1bWVudE1h
cmtlcihjb25zdCBNYXJrZWRUZXh0Jik7CiAKLSAgICBzdGF0aWMgRmxvYXRSZWN0IGNvbXB1dGVQ
YWludFJlY3QoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYsIGNvbnN0IExheW91dFBvaW50JiBw
YWludE9mZnNldCk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjYWxjdWxhdGVEb2N1bWVudE1hcmtl
ckJvdW5kcyhjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiwgY29uc3QgTWFya2VkVGV4dCYpOwor
ICAgIHN0YXRpYyBGbG9hdFJlY3QgY2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3Qg
TGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciYsIGNvbnN0IE1hcmtlZFRleHQmKTsK
KworICAgIEZsb2F0UmVjdCBjb21wdXRlUGFpbnRSZWN0KGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCk7CisgICAgYm9vbCBjb21wdXRlSGF2ZVNlbGVjdGlvbigpIGNvbnN0OworICAgIE1h
cmtlZFRleHQgY3JlYXRlTWFya2VkVGV4dEZyb21TZWxlY3Rpb25JbkJveCgpOworICAgIGNvbnN0
IFJlbmRlckNvbWJpbmVUZXh0KiBjb21iaW5lZFRleHQoKSBjb25zdDsKKyAgICBjb25zdCBGb250
Q2FzY2FkZSYgZm9udENhc2NhZGUoKSBjb25zdDsKKyAgICBGbG9hdFBvaW50IHRleHRPcmlnaW5G
cm9tUGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworCisgICAgY29uc3QgU2hhZG93
RGF0YSogZGVidWdUZXh0U2hhZG93KCkgY29uc3Q7CiAKLSAgICBjb25zdCBMZWdhY3lJbmxpbmVU
ZXh0Qm94JiBtX3RleHRCb3g7CisgICAgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5J
dGVyYXRvciBtX3RleHRCb3g7CiAgICAgY29uc3QgUmVuZGVyVGV4dCYgbV9yZW5kZXJlcjsKICAg
ICBjb25zdCBEb2N1bWVudCYgbV9kb2N1bWVudDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbV9z
dHlsZTsKKyAgICBjb25zdCBUZXh0UnVuIG1fcGFpbnRUZXh0UnVuOwogICAgIFBhaW50SW5mbyYg
bV9wYWludEluZm87CisgICAgY29uc3QgVGV4dEJveFNlbGVjdGFibGVSYW5nZSBtX3NlbGVjdGFi
bGVSYW5nZTsKICAgICBjb25zdCBGbG9hdFJlY3QgbV9wYWludFJlY3Q7CisgICAgY29uc3QgYm9v
bCBtX2lzRmlyc3RMaW5lOwogICAgIGNvbnN0IGJvb2wgbV9pc1ByaW50aW5nOwogICAgIGNvbnN0
IGJvb2wgbV9oYXZlU2VsZWN0aW9uOwogICAgIGNvbnN0IGJvb2wgbV9jb250YWluc0NvbXBvc2l0
aW9uOwogICAgIGNvbnN0IGJvb2wgbV91c2VDdXN0b21VbmRlcmxpbmVzOworICAgIHN0ZDo6b3B0
aW9uYWw8Ym9vbD4gbV9lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlIHsgfTsKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438588</attachid>
            <date>2021-09-19 03:39:43 -0700</date>
            <delta_ts>2021-09-19 07:28:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230455-20210919133941.patch</filename>
            <type>text/plain</type>
            <size>48741</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyNzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGM4MGU5ZGIzMDE4N2Zj
NDAwMjlhYWM3ZmU0NTg1MGVkOTQ0OTgyNS4uYWVmNDIzZTg0MjM2Nzg3NzhkNmE1MjlkYmFmMzFh
OTIyNTI0MjhiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDIxLTA5LTE5ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlv
bl0gUGFpbnQgTEZDIHRleHQgcnVucyB3aXRoIFRleHRCb3hQYWludGVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA0NTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgZ2l2ZSBMRkMgcGF0
aCBhbGwgdGhlIHNhbWUgcGFpbnRpbmcgZmVhdHVyZXMgKGluY2x1ZGluZyBzZWxlY3Rpb25zLCBt
YXJrZXJzIGV0YykgdGhhdAorICAgICAgICB0aGUgbGVnYWN5IHBhdGggaGFzLiBUaGlzIHBhdGNo
IGRvZXMgbm90IGVuYWJsZSBhbnkgbmV3IGZlYXR1cmVzIHlldC4KKworICAgICAgICAqIGxheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OnBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpwYWludFRleHRSdW5Vc2lu
Z1BoeXNpY2FsQ29vcmRpbmF0ZXMpOgorCisgICAgICAgIFVzZSBUZXh0Qm94UGFpbnRlci4KKwor
ICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94Ojp0ZXh0T3JpZ2luRnJvbUJveFJlY3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6ZGVi
dWdUZXh0U2hhZG93IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5
SW5saW5lVGV4dEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIpOgorCisg
ICAgICAgIFRleHRCb3hQYWludGVyIG5vdyB1c2VzIHRoZSBpbmxpbmUgaXRlcmF0b3IgaW5zdGVh
ZCBvZiBkaXJlY3RseSBhY2Nlc3NpbmcgTGVnYWN5SW5saW5lVGV4dEJveC4KKworICAgICAgICAo
V2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRC
b3hQYWludGVyOjpjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uQmFja2dyb3Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludERlY29yYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2Vycyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50
TWFya2VyQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjb21wdXRl
UGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRDYXNjYWRlRm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6Y29tcHV0ZUhhdmVTZWxlY3Rpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OmNvbWJpbmVkVGV4dCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6Zm9udENhc2NhZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnRleHRPcmlnaW5Gcm9tUGFp
bnRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpkZWJ1Z1Rl
eHRTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFya2VkVGV4dEZyb21T
ZWxlY3Rpb25JbkJveCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWlu
dGVyLmg6CisKIDIwMjEtMDktMTcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgTW92ZSBzY3JvbGxiYXItcmVsYXRlZCBjb2RlIG91dCBvZiBTY3JvbGxB
bmltYXRvciBhbmQgaW50byBTY3JvbGxiYXJzQ29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25M
aW5lTGF5b3V0LmNwcAppbmRleCBkMjJmNzA3NTY3ZWE1YmI1MWMzMDM5MGIyNzVhMGQ1MmM5NGZk
ZmI0Li4wNjIyYmZiOTUxY2JjNDFiYjZkOWZlMDg5NDY4ZjM3MTFjZTU2ZWRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5l
TGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcApAQCAtNTMsOCArNTMsOCBAQAogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJUZXh0Qm94UGFpbnRlci5oIgogI2luY2x1ZGUgIlRl
eHREZWNvcmF0aW9uUGFpbnRlci5oIgotI2luY2x1ZGUgIlRleHRQYWludGVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7CkBAIC01MDEsOSAr
NTAxLDExIEBAIHZvaWQgTGluZUxheW91dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICBmb3IgKGF1dG8mIHJ1biA6IG1faW5s
aW5lQ29udGVudC0+cnVuc0ZvclJlY3QocGFpbnRSZWN0KSkgewogICAgICAgICBpZiAocnVuLmlz
SW5saW5lQm94KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJ1bi50ZXh0
KCkpCi0gICAgICAgICAgICBwYWludFRleHRSdW5Vc2luZ1BoeXNpY2FsQ29vcmRpbmF0ZXMocGFp
bnRJbmZvLCBwYWludE9mZnNldCwgbV9pbmxpbmVDb250ZW50LT5saW5lRm9yUnVuKHJ1biksIHJ1
bik7Ci0gICAgICAgIGVsc2UgaWYgKGF1dG8mIHJlbmRlcmVyID0gbV9ib3hUcmVlLnJlbmRlcmVy
Rm9yTGF5b3V0Qm94KHJ1bi5sYXlvdXRCb3goKSk7IGlzPFJlbmRlckJveD4ocmVuZGVyZXIpICYm
IHJlbmRlcmVyLmlzUmVwbGFjZWQoKSkgeworICAgICAgICBpZiAocnVuLnRleHQoKSkgeworICAg
ICAgICAgICAgcGFpbnRUZXh0UnVuVXNpbmdQaHlzaWNhbENvb3JkaW5hdGVzKHBhaW50SW5mbywg
cGFpbnRPZmZzZXQsIHJ1bik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoYXV0byYgcmVuZGVyZXIgPSBtX2JveFRyZWUucmVuZGVyZXJGb3JMYXlvdXRCb3go
cnVuLmxheW91dEJveCgpKTsgaXM8UmVuZGVyQm94PihyZW5kZXJlcikgJiYgcmVuZGVyZXIuaXNS
ZXBsYWNlZCgpKSB7CiAgICAgICAgICAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKTsKICAgICAgICAgICAgIGlmICghcmVuZGVyQm94Lmhhc1NlbGZQYWlu
dGluZ0xheWVyKCkgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChyZW5kZXJCb3gp
KQogICAgICAgICAgICAgICAgIHJlbmRlckJveC5wYWludEFzSW5saW5lQmxvY2socGFpbnRJbmZv
LCBwYWludE9mZnNldCk7CkBAIC01NzAsNyArNTcyLDcgQEAgdm9pZCBMaW5lTGF5b3V0OjpyZWxl
YXNlQ2FjaGVzKCkKICAgICAgICAgbV9pbmxpbmVDb250ZW50LT5yZWxlYXNlQ2FjaGVzKCk7CiB9
CiAKLXZvaWQgTGluZUxheW91dDo6cGFpbnRUZXh0UnVuVXNpbmdQaHlzaWNhbENvb3JkaW5hdGVz
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNv
bnN0IExpbmUmIGxpbmUsIGNvbnN0IExheW91dDo6UnVuJiBydW4pCit2b2lkIExpbmVMYXlvdXQ6
OnBhaW50VGV4dFJ1blVzaW5nUGh5c2ljYWxDb29yZGluYXRlcyhQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXQ6OlJ1biYgcnVu
KQogewogICAgIGF1dG8mIHN0eWxlID0gcnVuLnN0eWxlKCk7CiAgICAgaWYgKHJ1bi5zdHlsZSgp
LnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlKQpAQCAtNjA0LDQ5ICs2MDYsOCBA
QCB2b2lkIExpbmVMYXlvdXQ6OnBhaW50VGV4dFJ1blVzaW5nUGh5c2ljYWxDb29yZGluYXRlcyhQ
YWludEluZm8mIHBhaW50SW5mbywgY29ucwogICAgIGlmIChkYW1hZ2VkUmVjdC55KCkgPiB2aXN1
YWxPdmVyZmxvd1JlY3QubWF4WSgpIHx8IGRhbWFnZWRSZWN0Lm1heFkoKSA8IHZpc3VhbE92ZXJm
bG93UmVjdC55KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwYWludEluZm8uZXZlbnRS
ZWdpb25Db250ZXh0KSB7Ci0gICAgICAgIGlmIChzdHlsZS5wb2ludGVyRXZlbnRzKCkgIT0gUG9p
bnRlckV2ZW50czo6Tm9uZSkgewotICAgICAgICAgICAgdmlzdWFsT3ZlcmZsb3dSZWN0Lm1vdmVC
eShwaHlzaWNhbFBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAgIHBhaW50SW5mby5ldmVudFJlZ2lv
bkNvbnRleHQtPnVuaXRlKGVuY2xvc2luZ0ludFJlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KSwgc3R5
bGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiBwYWlu
dENvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGF1dG8gZXhwYW5zaW9uID0gcnVu
LmV4cGFuc2lvbigpOwotICAgIC8vIFRleHRSdW4gZXhwZWN0cyB0aGUgeFBvcyB0byBiZSBhZGp1
c3RlZCB3aXRoIHRoZSBhbGlnbWVudCBvZmZzZXQgKGUuZy4gd2hlbiB0aGUgbGluZSBpcyBjZW50
ZXIgYWxpZ25lZAotICAgIC8vIGFuZCB0aGUgcnVuIHN0YXJ0cyBhdCAxMDBweCwgZHVlIHRvIHRo
ZSBob3Jpem9udGFsIGFsaWdtZW50LCB0aGUgeHBvcyBpcyBzdXBwb3NlZCB0byBiZSBhdCAwcHgp
LgotICAgIGF1dG8mIGZvbnRDYXNjYWRlID0gc3R5bGUuZm9udENhc2NhZGUoKTsKLSAgICBhdXRv
IHhQb3MgPSBydW4ubG9naWNhbFJlY3QoKS5sZWZ0KCkgLSAobGluZS5saW5lQm94TGVmdCgpICsg
bGluZS5jb250ZW50TGVmdCgpKTsKLSAgICBhdXRvIHRleHRSdW4gPSBXZWJDb3JlOjpUZXh0UnVu
IHsgdGV4dENvbnRlbnQucmVuZGVyZWRDb250ZW50KCksIHhQb3MsIGV4cGFuc2lvbi5ob3Jpem9u
dGFsRXhwYW5zaW9uLCBleHBhbnNpb24uYmVoYXZpb3IgfTsKLSAgICB0ZXh0UnVuLnNldFRhYlNp
emUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50YWJTaXplKCkpOwotCi0gICAg
YXV0byB0ZXh0UGFpbnRlciA9IFRleHRQYWludGVyIHsgcGFpbnRDb250ZXh0IH07Ci0gICAgdGV4
dFBhaW50ZXIuc2V0Rm9udChmb250Q2FzY2FkZSk7Ci0gICAgdGV4dFBhaW50ZXIuc2V0U3R5bGUo
Y29tcHV0ZVRleHRQYWludFN0eWxlKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5mcmFtZSgpLCBzdHls
ZSwgcGFpbnRJbmZvKSk7Ci0gICAgdGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVl
ZGVkKHJ1biwgcGFpbnRJbmZvLCBmb250Q2FzY2FkZSwgcGFpbnRDb250ZXh0LCB0ZXh0UnVuKTsK
LQotICAgIC8vIFBhaW50aW5nIHVzZXMgb25seSBwaHlzaWNhbCBjb29yZGluYXRlcy4KLSAgICB7
Ci0gICAgICAgIGF1dG8gcnVuUmVjdCA9IHBoeXNpY2FsUmVjdChydW4ubG9naWNhbFJlY3QoKSk7
Ci0gICAgICAgIGF1dG8gYm94UmVjdCA9IEZsb2F0UmVjdCB7IEZsb2F0UG9pbnQgeyBwaHlzaWNh
bFBhaW50T2Zmc2V0LngoKSArIHJ1blJlY3QueCgpLCBwaHlzaWNhbFBhaW50T2Zmc2V0LnkoKSAr
IHJ1blJlY3QueSgpIH0sIHJ1blJlY3Quc2l6ZSgpIH07Ci0gICAgICAgIGF1dG8gdGV4dE9yaWdp
biA9IEZsb2F0UG9pbnQgeyBib3hSZWN0LngoKSwgcm91bmRUb0RldmljZVBpeGVsKGJveFJlY3Qu
eSgpICsgZm9udENhc2NhZGUuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSwgZm9ybWF0dGluZ0NvbnRl
eHRSb290LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkgfTsKLQotICAgICAgICBhdXRv
IHNob3VsZFJvdGF0ZSA9ICFibG9ja0lzSG9yaXpvbnRhbFdyaXRpbmc7Ci0gICAgICAgIGlmIChz
aG91bGRSb3RhdGUpCi0gICAgICAgICAgICBwYWludENvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9u
KGJveFJlY3QsIENsb2Nrd2lzZSkpOwotICAgICAgICB0ZXh0UGFpbnRlci5wYWludCh0ZXh0UnVu
LCBydW5SZWN0LCB0ZXh0T3JpZ2luKTsKLQotICAgICAgICBpZiAoIXN0eWxlLnRleHREZWNvcmF0
aW9uc0luRWZmZWN0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhdXRvJiB0ZXh0UmVuZGVy
ZXIgPSBkb3duY2FzdDxSZW5kZXJUZXh0PihtX2JveFRyZWUucmVuZGVyZXJGb3JMYXlvdXRCb3go
cnVuLmxheW91dEJveCgpKSk7Ci0gICAgICAgICAgICBhdXRvIGRlY29yYXRpb25QYWludGVyID0g
VGV4dERlY29yYXRpb25QYWludGVyIHsgcGFpbnRDb250ZXh0LCBzdHlsZS50ZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCgpLCB0ZXh0UmVuZGVyZXIsIGZhbHNlLCBmb250Q2FzY2FkZSB9OwotICAgICAg
ICAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFJ1bkl0ZXJhdG9yKHRleHRSdW5Gb3IoKm1f
aW5saW5lQ29udGVudCwgcnVuKSk7Ci0gICAgICAgICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRX
aWR0aChydW5SZWN0LndpZHRoKCkpOwotICAgICAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIucGFp
bnRUZXh0RGVjb3JhdGlvbih0ZXh0UnVuLCB0ZXh0T3JpZ2luLCBydW5SZWN0LmxvY2F0aW9uKCkg
KyBwaHlzaWNhbFBhaW50T2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2hvdWxkUm90
YXRlKQotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5jb25jYXRDVE0ocm90YXRpb24o
Ym94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwotICAgIH0KKyAgICBUZXh0Qm94UGFpbnRlciBw
YWludGVyKCptX2lubGluZUNvbnRlbnQsIHJ1biwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7Cisg
ICAgcGFpbnRlci5wYWludCgpOwogfQogCiBMYXlvdXQ6OklubGluZURhbWFnZSYgTGluZUxheW91
dDo6ZW5zdXJlTGluZURhbWFnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKaW5kZXgg
NWU4OTc0MzZlMDI2YzA1MWI3YzZmOGYyODdkYzZjOTlmMWZmMjVhNi4uZTY1NjU1NWYxNjcyMzQx
ODFmNGI4NThjZWY3MDhiNWZiMWY0MTZjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQu
aApAQCAtMTIzLDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgSW5saW5lQ29udGVudCYgZW5zdXJl
SW5saW5lQ29udGVudCgpOwogICAgIHZvaWQgdXBkYXRlTGF5b3V0Qm94RGltZW5zaW9ucyhjb25z
dCBSZW5kZXJCb3gmKTsKIAotICAgIHZvaWQgcGFpbnRUZXh0UnVuVXNpbmdQaHlzaWNhbENvb3Jk
aW5hdGVzKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3Qg
TGluZSYsIGNvbnN0IExheW91dDo6UnVuJik7CisgICAgdm9pZCBwYWludFRleHRSdW5Vc2luZ1Bo
eXNpY2FsQ29vcmRpbmF0ZXMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LCBjb25zdCBMYXlvdXQ6OlJ1biYpOwogCiAgICAgTGF5b3V0OjpJbmxpbmVEYW1hZ2UmIGVu
c3VyZUxpbmVEYW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xlZ2FjeUlubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2Fj
eUlubGluZVRleHRCb3guY3BwCmluZGV4IDFmZDFiM2ZmMGNlNjk1ZmNjYmRkOWYwYTk5YzVkMjNj
YzEzYzNhMDcuLmE3MjM0YmU0ZWJhZWFhNTA5MjliZmYwMmIwZGNjMWU0ZWE1NTFmMTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKQEAg
LTQzMywyMCArNDMzLDYgQEAgYm9vbCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpoYXNNYXJrZXJzKCkg
Y29uc3QKICAgICByZXR1cm4gTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2Vycyhy
ZW5kZXJlcigpLCBzZWxlY3RhYmxlUmFuZ2UoKSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6RGVj
b3JhdGlvbikuc2l6ZSgpOwogfQogCi1GbG9hdFBvaW50IExlZ2FjeUlubGluZVRleHRCb3g6OnRl
eHRPcmlnaW5Gcm9tQm94UmVjdChjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpIGNvbnN0Ci17Ci0g
ICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luIHsgYm94UmVjdC54KCksIGJveFJlY3QueSgpICsgbGlu
ZUZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIH07Ci0gICAgaWYgKGF1dG8qIGNvbWJpbmVk
VGV4dCA9IHRoaXMtPmNvbWJpbmVkVGV4dCgpKSB7Ci0gICAgICAgIGlmIChhdXRvIG5ld09yaWdp
biA9IGNvbWJpbmVkVGV4dC0+Y29tcHV0ZVRleHRPcmlnaW4oYm94UmVjdCkpCi0gICAgICAgICAg
ICB0ZXh0T3JpZ2luID0gbmV3T3JpZ2luLnZhbHVlKCk7Ci0gICAgfQotICAgIGlmIChpc0hvcml6
b250YWwoKSkKLSAgICAgICAgdGV4dE9yaWdpbi5zZXRZKHJvdW5kVG9EZXZpY2VQaXhlbChMYXlv
dXRVbml0IHsgdGV4dE9yaWdpbi55KCkgfSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIHRleHRPcmlnaW4uc2V0WChyb3VuZFRv
RGV2aWNlUGl4ZWwoTGF5b3V0VW5pdCB7IHRleHRPcmlnaW4ueCgpIH0sIHJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7Ci0gICAgcmV0dXJuIHRleHRPcmlnaW47Ci19
Ci0KIGludCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpjYXJldE1pbk9mZnNldCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fc3RhcnQ7CkBAIC01NDAsMTUgKzUyNiw2IEBAIGNvbnN0IFJlbmRlckNvbWJp
bmVUZXh0KiBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpjb21iaW5lZFRleHQoKSBjb25zdAogICAgIHJl
dHVybiBsaW5lU3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0
PihyZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSku
aXNDb21iaW5lZCgpID8gJmRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKSA6
IG51bGxwdHI7CiB9CiAKLWNvbnN0IFNoYWRvd0RhdGEqIExlZ2FjeUlubGluZVRleHRCb3g6OmRl
YnVnVGV4dFNoYWRvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdzKCku
bGVnYWN5TGluZUxheW91dFZpc3VhbENvdmVyYWdlRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWJ1Z1Rl
eHRTaGFkb3coSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwgdHJ1
ZSwgU1JHQkE8dWludDhfdD4geyAxNTAsIDAsIDAsIDE5MCB9KTsKLSAgICByZXR1cm4gJmRlYnVn
VGV4dFNoYWRvdy5nZXQoKTsKLX0KLQogRXhwYW5zaW9uQmVoYXZpb3IgTGVnYWN5SW5saW5lVGV4
dEJveDo6ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAogewogICAgIEV4cGFuc2lvbkJlaGF2aW9y
IGxlZnRCZWhhdmlvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdh
Y3lJbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5l
VGV4dEJveC5oCmluZGV4IDRjNmEyMjg1YWYyYWQ3NTAyMTRhODc2NDVkZDFkY2U0MDYxMTE1ZGMu
LmZiMjIyZmQ0ZWZhZjUzYjY4NTBlNjk0NjMwNzQyODBkMjJmY2I5NjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaApAQCAtMTU3LDEzICsxNTcs
OSBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRl
cmF0b3JMZWdhY3lQYXRoOwogICAgIGZyaWVuZCBjbGFzcyBUZXh0Qm94UGFpbnRlcjsKIAotICAg
IEZsb2F0UG9pbnQgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0
OwotCiAgICAgY29uc3QgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCgpIGNvbnN0Owog
ICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBsaW5lRm9udCgpIGNvbnN0OwogCi0gICAgY29uc3QgU2hh
ZG93RGF0YSogZGVidWdUZXh0U2hhZG93KCkgY29uc3Q7Ci0KICAgICBTdHJpbmcgdGV4dChib29s
IGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhlbiA9IGZhbHNlKSBj
b25zdDsgLy8gVGhlIGVmZmVjdGl2ZSB0ZXh0IGZvciB0aGUgcnVuLgogICAgIFRleHRSdW4gY3Jl
YXRlVGV4dFJ1bihib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5
cGhlbiA9IGZhbHNlKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRCb3hQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94
UGFpbnRlci5jcHAKaW5kZXggMGQyMWU3MTczNTUwNTNmMTFjM2QyYWQ0MWM1NDEwNTg4MDVkZDU5
MC4uYjQ1NTUyYWE3Mzk0ODQ4MTEwNzBmZGVmYjcwZDIxMjgxMDk3NDAzZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCkBAIC0yOSwxMCArMjksMTQgQEAK
ICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFdmVudFJlZ2lvbi5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJh
dG9yLmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgogI2luY2x1
ZGUgIkxlZ2FjeUlubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNs
dWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlckNvbWJpbmVUZXh0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlNoYWRvd0RhdGEuaCIKICNpbmNsdWRlICJT
dHlsZWRNYXJrZWRUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKICNpbmNsdWRl
ICJUZXh0UGFpbnRlci5oIgpAQCAtNDAsMTMgKzQ0LDI4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFRleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihjb25zdCBMZWdhY3lJbmxpbmVUZXh0
Qm94JiB0ZXh0Qm94LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0KQotICAgIDogbV90ZXh0Qm94KHRleHRCb3gpCi0gICAgLCBtX3JlbmRlcmVyKHRl
eHRCb3gucmVuZGVyZXIoKSkKKyAgICA6IFRleHRCb3hQYWludGVyKExheW91dEludGVncmF0aW9u
Ojp0ZXh0UnVuRm9yKCZ0ZXh0Qm94KSwgcGFpbnRJbmZvLCBwYWludE9mZnNldCkKK3sKKyAgICBt
X2VtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUgPSB0ZXh0Qm94LmVtcGhhc2lzTWFya0V4aXN0
c0FuZElzQWJvdmUobV9zdHlsZSk7Cit9CisKK1RleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRl
cihjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwg
Y29uc3QgTGF5b3V0OjpSdW4mIHJ1biwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW50JiBwYWludE9mZnNldCkKKyAgICA6IFRleHRCb3hQYWludGVyKExheW91dEludGVncmF0
aW9uOjp0ZXh0UnVuRm9yKGlubGluZUNvbnRlbnQsIHJ1biksIHBhaW50SW5mbywgcGFpbnRPZmZz
ZXQpCit7Cit9CisKK1RleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihMYXlvdXRJbnRlZ3Jh
dGlvbjo6VGV4dFJ1bkl0ZXJhdG9yJiYgdGV4dEJveCwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKKyAgICA6IG1fdGV4dEJveChXVEZNb3ZlKHRl
eHRCb3gpKQorICAgICwgbV9yZW5kZXJlcihtX3RleHRCb3gtPnJlbmRlcmVyKCkpCiAgICAgLCBt
X2RvY3VtZW50KG1fcmVuZGVyZXIuZG9jdW1lbnQoKSkKKyAgICAsIG1fc3R5bGUobV90ZXh0Qm94
LT5zdHlsZSgpKQorICAgICwgbV9wYWludFRleHRSdW4obV90ZXh0Qm94LT5jcmVhdGVUZXh0UnVu
KCkpCiAgICAgLCBtX3BhaW50SW5mbyhwYWludEluZm8pCi0gICAgLCBtX3BhaW50UmVjdChjb21w
dXRlUGFpbnRSZWN0KHRleHRCb3gsIHBhaW50T2Zmc2V0KSkKKyAgICAsIG1fc2VsZWN0YWJsZVJh
bmdlKG1fdGV4dEJveC0+c2VsZWN0YWJsZVJhbmdlKCkpCisgICAgLCBtX3BhaW50UmVjdChjb21w
dXRlUGFpbnRSZWN0KHBhaW50T2Zmc2V0KSkKKyAgICAsIG1faXNGaXJzdExpbmUobV90ZXh0Qm94
LT5saW5lKCktPmlzRmlyc3QoKSkKICAgICAsIG1faXNQcmludGluZyhtX2RvY3VtZW50LnByaW50
aW5nKCkpCi0gICAgLCBtX2hhdmVTZWxlY3Rpb24oIW1faXNQcmludGluZyAmJiBtX3BhaW50SW5m
by5waGFzZSAhPSBQYWludFBoYXNlOjpUZXh0Q2xpcCAmJiBtX3RleHRCb3guc2VsZWN0aW9uU3Rh
dGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKQorICAgICwgbV9oYXZl
U2VsZWN0aW9uKGNvbXB1dGVIYXZlU2VsZWN0aW9uKCkpCiAgICAgLCBtX2NvbnRhaW5zQ29tcG9z
aXRpb24obV9yZW5kZXJlci50ZXh0Tm9kZSgpICYmIG1fcmVuZGVyZXIuZnJhbWUoKS5lZGl0b3Io
KS5jb21wb3NpdGlvbk5vZGUoKSA9PSBtX3JlbmRlcmVyLnRleHROb2RlKCkpCiAgICAgLCBtX3Vz
ZUN1c3RvbVVuZGVybGluZXMobV9jb250YWluc0NvbXBvc2l0aW9uICYmIG1fcmVuZGVyZXIuZnJh
bWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblVzZXNDdXN0b21VbmRlcmxpbmVzKCkpCiB7CkBAIC02
NCwxMSArODMsMTEgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnQoKQogCiAgICAgaWYgKG1f
cGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkV2ZW50UmVnaW9uKSB7CiAgICAgICAgIGlm
IChtX3JlbmRlcmVyLnBhcmVudCgpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCkpCi0gICAgICAgICAg
ICBtX3BhaW50SW5mby5ldmVudFJlZ2lvbkNvbnRleHQtPnVuaXRlKGVuY2xvc2luZ0ludFJlY3Qo
bV9wYWludFJlY3QpLCBtX3JlbmRlcmVyLnN0eWxlKCkpOworICAgICAgICAgICAgbV9wYWludElu
Zm8uZXZlbnRSZWdpb25Db250ZXh0LT51bml0ZShlbmNsb3NpbmdJbnRSZWN0KG1fcGFpbnRSZWN0
KSwgbV9zdHlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBib29sIHNob3VsZFJv
dGF0ZSA9ICFtX3RleHRCb3guaXNIb3Jpem9udGFsKCkgJiYgIW1fdGV4dEJveC5jb21iaW5lZFRl
eHQoKTsKKyAgICBib29sIHNob3VsZFJvdGF0ZSA9ICF0ZXh0Qm94KCkuaXNIb3Jpem9udGFsKCkg
JiYgIWNvbWJpbmVkVGV4dCgpOwogICAgIGlmIChzaG91bGRSb3RhdGUpCiAgICAgICAgIG1fcGFp
bnRJbmZvLmNvbnRleHQoKS5jb25jYXRDVE0ocm90YXRpb24obV9wYWludFJlY3QsIENsb2Nrd2lz
ZSkpOwogCkBAIC05Miw5ICsxMTEsOSBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludCgpCiAg
ICAgICAgIG1fcGFpbnRJbmZvLmNvbnRleHQoKS5jb25jYXRDVE0ocm90YXRpb24obV9wYWludFJl
Y3QsIENvdW50ZXJjbG9ja3dpc2UpKTsKIH0KIAotc3RhdGljIE1hcmtlZFRleHQgY3JlYXRlTWFy
a2VkVGV4dEZyb21TZWxlY3Rpb25JbkJveChjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiBib3gp
CitNYXJrZWRUZXh0IFRleHRCb3hQYWludGVyOjpjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlv
bkluQm94KCkKIHsKLSAgICBhdXRvIFtzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kXSA9IGJv
eC5zZWxlY3Rpb25TdGFydEVuZCgpOworICAgIGF1dG8gW3NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rp
b25FbmRdID0gbV9yZW5kZXJlci52aWV3KCkuc2VsZWN0aW9uKCkucmFuZ2VGb3JUZXh0Qm94KG1f
cmVuZGVyZXIsIG1fc2VsZWN0YWJsZVJhbmdlKTsKICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPCBz
ZWxlY3Rpb25FbmQpCiAgICAgICAgIHJldHVybiB7IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25F
bmQsIE1hcmtlZFRleHQ6OlNlbGVjdGlvbiB9OwogICAgIHJldHVybiB7IH07CkBAIC0xMDUsMjAg
KzEyNCwxOCBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQoKQogICAgIGlm
IChtX2NvbnRhaW5zQ29tcG9zaXRpb24gJiYgIW1fdXNlQ3VzdG9tVW5kZXJsaW5lcykKICAgICAg
ICAgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoKTsKIAotICAgIGF1dG8gc2VsZWN0YWJsZVJh
bmdlID0gbV90ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpOwotCiAgICAgVmVjdG9yPE1hcmtlZFRl
eHQ+IG1hcmtlZFRleHRzOwotICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0
Ojpjb2xsZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKG1fcmVuZGVyZXIsIHNlbGVjdGFibGVSYW5nZSwg
TWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6QmFja2dyb3VuZCkpOwotICAgIG1hcmtlZFRleHRzLmFw
cGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0cyhtX3JlbmRlcmVyLCBz
ZWxlY3RhYmxlUmFuZ2UsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkJhY2tncm91bmQpKTsKKyAg
ICBtYXJrZWRUZXh0cy5hcHBlbmRWZWN0b3IoTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50
TWFya2VycyhtX3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQ
aGFzZTo6QmFja2dyb3VuZCkpOworICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRU
ZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0cyhtX3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSwg
TWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6QmFja2dyb3VuZCkpOwogCiAjaWYgRU5BQkxFKFRFWFRf
U0VMRUNUSU9OKQogICAgIGlmIChtX2hhdmVTZWxlY3Rpb24gJiYgIW1fdXNlQ3VzdG9tVW5kZXJs
aW5lcyAmJiAhbV9wYWludEluZm8uY29udGV4dCgpLnBhaW50aW5nRGlzYWJsZWQoKSkgewotICAg
ICAgICBhdXRvIHNlbGVjdGlvbk1hcmtlZFRleHQgPSBjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVj
dGlvbkluQm94KG1fdGV4dEJveCk7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uTWFya2VkVGV4dCA9
IGNyZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3goKTsKICAgICAgICAgaWYgKCFzZWxl
Y3Rpb25NYXJrZWRUZXh0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVu
ZChXVEZNb3ZlKHNlbGVjdGlvbk1hcmtlZFRleHQpKTsKICAgICB9CiAjZW5kaWYKLSAgICBhdXRv
IHN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6c3ViZGl2aWRlQW5kUmVzb2x2
ZShtYXJrZWRUZXh0cywgbV9yZW5kZXJlciwgbV90ZXh0Qm94LmlzRmlyc3RMaW5lKCksIG1fcGFp
bnRJbmZvKTsKKyAgICBhdXRvIHN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6
c3ViZGl2aWRlQW5kUmVzb2x2ZShtYXJrZWRUZXh0cywgbV9yZW5kZXJlciwgbV9pc0ZpcnN0TGlu
ZSwgbV9wYWludEluZm8pOwogCiAgICAgLy8gQ29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1h
cmtlZCB0ZXh0cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCiAg
ICAgYXV0byBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxlZE1hcmtlZFRleHQ6OmNv
YWxlc2NlQWRqYWNlbnRXaXRoRXF1YWxCYWNrZ3JvdW5kKHN0eWxlZE1hcmtlZFRleHRzKTsKQEAg
LTEzMiwxOCArMTQ5LDE2IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFu
ZERlY29yYXRpb25zKCkKICAgICBib29sIHNob3VsZFBhaW50U2VsZWN0aW9uRm9yZWdyb3VuZCA9
IG1faGF2ZVNlbGVjdGlvbiAmJiAhbV91c2VDdXN0b21VbmRlcmxpbmVzOwogICAgIFZlY3RvcjxN
YXJrZWRUZXh0PiBtYXJrZWRUZXh0czsKICAgICBpZiAobV9wYWludEluZm8ucGhhc2UgIT0gUGFp
bnRQaGFzZTo6U2VsZWN0aW9uKSB7Ci0gICAgICAgIGF1dG8gc2VsZWN0YWJsZVJhbmdlID0gbV90
ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpOwotCiAgICAgICAgIC8vIFRoZSBtYXJrZWQgdGV4dHMg
Zm9yIHRoZSBnYXBzIGJldHdlZW4gZG9jdW1lbnQgbWFya2VycyBhbmQgc2VsZWN0aW9uIGFyZSBp
bXBsaWNpdGx5IGNyZWF0ZWQgYnkgc3ViZGl2aWRpbmcgdGhlIGVudGlyZSBsaW5lLgotICAgICAg
ICBtYXJrZWRUZXh0cy5hcHBlbmQoeyBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAobV90ZXh0Qm94LnN0
YXJ0KCkpLCBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAobV90ZXh0Qm94LmVuZCgpKSwgTWFya2VkVGV4
dDo6VW5tYXJrZWQgfSk7CisgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZCh7IG1fc2VsZWN0YWJs
ZVJhbmdlLmNsYW1wKHRleHRCb3goKS5zdGFydCgpKSwgbV9zZWxlY3RhYmxlUmFuZ2UuY2xhbXAo
dGV4dEJveCgpLmVuZCgpKSwgTWFya2VkVGV4dDo6VW5tYXJrZWQgfSk7CiAKICAgICAgICAgaWYg
KCFtX2lzUHJpbnRpbmcpIHsKLSAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihN
YXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKG1fcmVuZGVyZXIsIHNlbGVjdGFi
bGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCkpOwotICAgICAgICAg
ICAgbWFya2VkVGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JIaWdobGln
aHRzKG1fcmVuZGVyZXIsIHNlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6
Rm9yZWdyb3VuZCkpOworICAgICAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtl
ZFRleHQ6OmNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMobV9yZW5kZXJlciwgbV9zZWxlY3RhYmxl
UmFuZ2UsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91bmQpKTsKKyAgICAgICAgICAg
IG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0
cyhtX3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6
Rm9yZWdyb3VuZCkpOwogCiAgICAgICAgICAgICBib29sIHNob3VsZFBhaW50RHJhZ2dlZENvbnRl
bnQgPSAhKG1fcGFpbnRJbmZvLnBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6
RXhjbHVkZVNlbGVjdGlvbikpOwogICAgICAgICAgICAgaWYgKHNob3VsZFBhaW50RHJhZ2dlZENv
bnRlbnQpIHsKLSAgICAgICAgICAgICAgICBhdXRvIG1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRl
bnQgPSBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRHJhZ2dlZENvbnRlbnQobV9yZW5kZXJlciwgc2Vs
ZWN0YWJsZVJhbmdlKTsKKyAgICAgICAgICAgICAgICBhdXRvIG1hcmtlZFRleHRzRm9yRHJhZ2dl
ZENvbnRlbnQgPSBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRHJhZ2dlZENvbnRlbnQobV9yZW5kZXJl
ciwgbV9zZWxlY3RhYmxlUmFuZ2UpOwogICAgICAgICAgICAgICAgIGlmICghbWFya2VkVGV4dHNG
b3JEcmFnZ2VkQ29udGVudC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgc2hvdWxk
UGFpbnRTZWxlY3Rpb25Gb3JlZ3JvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIG1h
cmtlZFRleHRzLmFwcGVuZFZlY3RvcihtYXJrZWRUZXh0c0ZvckRyYWdnZWRDb250ZW50KTsKQEAg
LTE1NCwxMiArMTY5LDEyIEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFu
ZERlY29yYXRpb25zKCkKICAgICAvLyBUaGUgc2VsZWN0aW9uIG1hcmtlZCB0ZXh0IGFjdHMgYXMg
YSBwbGFjZWhvbGRlciB3aGVuIGNvbXB1dGluZyB0aGUgbWFya2VkIHRleHRzIGZvciB0aGUgZ2Fw
cy4uLgogICAgIGlmIChzaG91bGRQYWludFNlbGVjdGlvbkZvcmVncm91bmQpIHsKICAgICAgICAg
QVNTRVJUKCFtX2lzUHJpbnRpbmcpOwotICAgICAgICBhdXRvIHNlbGVjdGlvbk1hcmtlZFRleHQg
PSBjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KG1fdGV4dEJveCk7CisgICAgICAg
IGF1dG8gc2VsZWN0aW9uTWFya2VkVGV4dCA9IGNyZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9u
SW5Cb3goKTsKICAgICAgICAgaWYgKCFzZWxlY3Rpb25NYXJrZWRUZXh0LmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZChXVEZNb3ZlKHNlbGVjdGlvbk1hcmtlZFRleHQp
KTsKICAgICB9CiAKLSAgICBhdXRvIHN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4
dDo6c3ViZGl2aWRlQW5kUmVzb2x2ZShtYXJrZWRUZXh0cywgbV9yZW5kZXJlciwgbV90ZXh0Qm94
LmlzRmlyc3RMaW5lKCksIG1fcGFpbnRJbmZvKTsKKyAgICBhdXRvIHN0eWxlZE1hcmtlZFRleHRz
ID0gU3R5bGVkTWFya2VkVGV4dDo6c3ViZGl2aWRlQW5kUmVzb2x2ZShtYXJrZWRUZXh0cywgbV9y
ZW5kZXJlciwgbV9pc0ZpcnN0TGluZSwgbV9wYWludEluZm8pOwogCiAgICAgLy8gLi4uIG5vdyBy
ZW1vdmUgdGhlIHNlbGVjdGlvbiBtYXJrZWQgdGV4dCBpZiB3ZSBhcmUgZXhjbHVkaW5nIHNlbGVj
dGlvbi4KICAgICBpZiAoIW1faXNQcmludGluZyAmJiBtX3BhaW50SW5mby5wYWludEJlaGF2aW9y
LmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkV4Y2x1ZGVTZWxlY3Rpb24pKSB7CkBAIC0xNzQsMjgg
KzE4OSwyOCBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRBbmREZWNvcmF0
aW9ucygpCiAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogY29hbGVzY2VkU3R5bGVkTWFya2Vk
VGV4dHMpCiAgICAgICAgIHBhaW50Rm9yZWdyb3VuZChtYXJrZWRUZXh0KTsKIAotICAgIGF1dG8g
dGV4dERlY29yYXRpb25zID0gbV90ZXh0Qm94LmxpbmVTdHlsZSgpLnRleHREZWNvcmF0aW9uc0lu
RWZmZWN0KCk7Ci0gICAgYm9vbCBoaWdobGlnaHREZWNvcmF0aW9ucyA9ICFNYXJrZWRUZXh0Ojpj
b2xsZWN0Rm9ySGlnaGxpZ2h0cyhtX3JlbmRlcmVyLCBtX3RleHRCb3guc2VsZWN0YWJsZVJhbmdl
KCksIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29yYXRpb24pLmlzRW1wdHkoKTsKKyAgICBh
dXRvIHRleHREZWNvcmF0aW9ucyA9IG1fc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsK
KyAgICBib29sIGhpZ2hsaWdodERlY29yYXRpb25zID0gIU1hcmtlZFRleHQ6OmNvbGxlY3RGb3JI
aWdobGlnaHRzKG1fcmVuZGVyZXIsIG1fc2VsZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0OjpQYWlu
dFBoYXNlOjpEZWNvcmF0aW9uKS5pc0VtcHR5KCk7CiAgICAgYm9vbCBsaW5lRGVjb3JhdGlvbnMg
PSAhdGV4dERlY29yYXRpb25zLmlzRW1wdHkoKTsKICAgICBpZiAoKGxpbmVEZWNvcmF0aW9ucyB8
fCBoaWdobGlnaHREZWNvcmF0aW9ucykgJiYgbV9wYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZTo6U2VsZWN0aW9uKSB7Ci0gICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IG1fdGV4dEJveC5jcmVh
dGVUZXh0UnVuKCk7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fdGV4dEJveC50cnVuY2F0
aW9uKCkudmFsdWVfb3IodGV4dFJ1bi5sZW5ndGgoKSk7CisgICAgICAgIFRleHRSdW4gdGV4dFJ1
biA9IHRleHRCb3goKS5jcmVhdGVUZXh0UnVuKCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IG1fc2VsZWN0YWJsZVJhbmdlLnRydW5jYXRpb24udmFsdWVfb3IodGV4dFJ1bi5sZW5ndGgoKSk7
CiAgICAgICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0ID0gMDsKICAgICAgICAgdW5zaWduZWQg
c2VsZWN0aW9uRW5kID0gMDsKICAgICAgICAgaWYgKG1faGF2ZVNlbGVjdGlvbikKLSAgICAgICAg
ICAgIHN0ZDo6dGllKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpID0gbV90ZXh0Qm94LnNl
bGVjdGlvblN0YXJ0RW5kKCk7CisgICAgICAgICAgICBzdGQ6OnRpZShzZWxlY3Rpb25TdGFydCwg
c2VsZWN0aW9uRW5kKSA9IG1fcmVuZGVyZXIudmlldygpLnNlbGVjdGlvbigpLnJhbmdlRm9yVGV4
dEJveChtX3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSk7CiAKICAgICAgICAgRmxvYXRSZWN0
IHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3Q7CiAgICAgICAgIGlmICgobV9wYWlu
dEluZm8ucGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpFeGNsdWRlU2VsZWN0
aW9uKSkgJiYgc2VsZWN0aW9uU3RhcnQgPCBzZWxlY3Rpb25FbmQgJiYgc2VsZWN0aW9uRW5kIDw9
IGxlbmd0aCkgewogICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVj
dCA9IG1fcGFpbnRSZWN0OwogICAgICAgICAgICAgZmxvYXQgbG9naWNhbFdpZHRoQmVmb3JlUmFu
Z2U7CiAgICAgICAgICAgICBmbG9hdCBsb2dpY2FsV2lkdGhBZnRlclJhbmdlOwotICAgICAgICAg
ICAgZmxvYXQgbG9naWNhbFNlbGVjdGlvbldpZHRoID0gbV90ZXh0Qm94LmxpbmVGb250KCkud2lk
dGhPZlRleHRSYW5nZSh0ZXh0UnVuLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCBudWxs
cHRyLCAmbG9naWNhbFdpZHRoQmVmb3JlUmFuZ2UsICZsb2dpY2FsV2lkdGhBZnRlclJhbmdlKTsK
KyAgICAgICAgICAgIGZsb2F0IGxvZ2ljYWxTZWxlY3Rpb25XaWR0aCA9IGZvbnRDYXNjYWRlKCku
d2lkdGhPZlRleHRSYW5nZShtX3BhaW50VGV4dFJ1biwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlv
bkVuZCwgbnVsbHB0ciwgJmxvZ2ljYWxXaWR0aEJlZm9yZVJhbmdlLCAmbG9naWNhbFdpZHRoQWZ0
ZXJSYW5nZSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBoYW5kbGUgdmVy
dGljYWwgYm90dG9tIHRvIHRvcCB0ZXh0PwotICAgICAgICAgICAgaWYgKCFtX3RleHRCb3guaXNI
b3Jpem9udGFsKCkpIHsKKyAgICAgICAgICAgIGlmICghdGV4dEJveCgpLmlzSG9yaXpvbnRhbCgp
KSB7CiAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5t
b3ZlKDAsIGxvZ2ljYWxXaWR0aEJlZm9yZVJhbmdlKTsKICAgICAgICAgICAgICAgICB0ZXh0RGVj
b3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0LnNldEhlaWdodChsb2dpY2FsU2VsZWN0aW9uV2lk
dGgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3RleHRCb3guZGlyZWN0aW9uKCkgPT0gVGV4
dERpcmVjdGlvbjo6UlRMKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRleHRCb3goKS5kaXJl
Y3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpIHsKICAgICAgICAgICAgICAgICB0ZXh0RGVj
b3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0Lm1vdmUobG9naWNhbFdpZHRoQWZ0ZXJSYW5nZSwg
MCk7CiAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5z
ZXRXaWR0aChsb2dpY2FsU2VsZWN0aW9uV2lkdGgpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAg
LTIxNCwyOSArMjI5LDI3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFu
ZERlY29yYXRpb25zKCkKIAogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvbkJh
Y2tncm91bmQoKQogewotICAgIGF1dG8gc2VsZWN0YWJsZVJhbmdlID0gbV90ZXh0Qm94LnNlbGVj
dGFibGVSYW5nZSgpOwotCiAgICAgYXV0byYgZWRpdG9yID0gbV9yZW5kZXJlci5mcmFtZSgpLmVk
aXRvcigpOwogCiAgICAgaWYgKCFlZGl0b3IuY29tcG9zaXRpb25Vc2VzQ3VzdG9tSGlnaGxpZ2h0
cygpKSB7Ci0gICAgICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBzZWxlY3Rh
YmxlUmFuZ2UuY2xhbXAoZWRpdG9yLmNvbXBvc2l0aW9uU3RhcnQoKSwgZWRpdG9yLmNvbXBvc2l0
aW9uRW5kKCkpOworICAgICAgICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmRdID0gbV9z
ZWxlY3RhYmxlUmFuZ2UuY2xhbXAoZWRpdG9yLmNvbXBvc2l0aW9uU3RhcnQoKSwgZWRpdG9yLmNv
bXBvc2l0aW9uRW5kKCkpOwogCiAgICAgICAgIHBhaW50QmFja2dyb3VuZChjbGFtcGVkU3RhcnQs
IGNsYW1wZWRFbmQsIENvbXBvc2l0aW9uSGlnaGxpZ2h0OjpkZWZhdWx0Q29tcG9zaXRpb25GaWxs
Q29sb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBoaWdobGln
aHQgOiBlZGl0b3IuY3VzdG9tQ29tcG9zaXRpb25IaWdobGlnaHRzKCkpIHsKLSAgICAgICAgaWYg
KGhpZ2hsaWdodC5lbmRPZmZzZXQgPD0gbV90ZXh0Qm94LnN0YXJ0KCkpCisgICAgICAgIGlmICho
aWdobGlnaHQuZW5kT2Zmc2V0IDw9IHRleHRCb3goKS5zdGFydCgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgaWYgKGhpZ2hsaWdodC5zdGFydE9mZnNldCA+PSBtX3RleHRCb3gu
ZW5kKCkpCisgICAgICAgIGlmIChoaWdobGlnaHQuc3RhcnRPZmZzZXQgPj0gdGV4dEJveCgpLmVu
ZCgpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBj
bGFtcGVkRW5kXSA9IHNlbGVjdGFibGVSYW5nZS5jbGFtcChoaWdobGlnaHQuc3RhcnRPZmZzZXQs
IGhpZ2hsaWdodC5lbmRPZmZzZXQpOworICAgICAgICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1w
ZWRFbmRdID0gbV9zZWxlY3RhYmxlUmFuZ2UuY2xhbXAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0LCBo
aWdobGlnaHQuZW5kT2Zmc2V0KTsKIAogICAgICAgICBwYWludEJhY2tncm91bmQoY2xhbXBlZFN0
YXJ0LCBjbGFtcGVkRW5kLCBoaWdobGlnaHQuY29sb3IsIEJhY2tncm91bmRTdHlsZTo6Um91bmRl
ZCk7CiAKLSAgICAgICAgaWYgKGhpZ2hsaWdodC5lbmRPZmZzZXQgPiBtX3RleHRCb3guZW5kKCkp
CisgICAgICAgIGlmIChoaWdobGlnaHQuZW5kT2Zmc2V0ID4gdGV4dEJveCgpLmVuZCgpKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtMjU3LDIyICsyNzAsMjEgQEAgdm9pZCBUZXh0
Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBlbmRPZmZzZXQsIGMKIAogICAgIC8vIE5vdGUgdGhhdCBpZiB0aGUgdGV4dCBpcyB0cnVuY2F0
ZWQsIHdlIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNhdGlvbgogICAg
IC8vIGRyYXcgaXRzIG93biBoaWdobGlnaHQuCi0gICAgVGV4dFJ1biB0ZXh0UnVuID0gbV90ZXh0
Qm94LmNyZWF0ZVRleHRSdW4oKTsKIAotICAgIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gmIHJv
b3RCb3ggPSBtX3RleHRCb3gucm9vdCgpOwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9t
ID0gcm9vdEJveC5zZWxlY3Rpb25Cb3R0b20oKTsKLSAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRv
cCA9IHJvb3RCb3guc2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpOworICAg
IGNvbnN0IGF1dG8gbGluZSA9IHRleHRCb3goKS5saW5lKCk7CisgICAgTGF5b3V0VW5pdCBzZWxl
Y3Rpb25Cb3R0b20gPSBsaW5lLT5zZWxlY3Rpb25Cb3R0b20oKTsKKyAgICBMYXlvdXRVbml0IHNl
bGVjdGlvblRvcCA9IGxpbmUtPnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2so
KTsKIAogICAgIC8vIFVzZSBzYW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2Vs
ZWN0aW9uLCBzbyB0aGF0IHdoZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBzdWJyYW5nZSBhcmUg
b24KICAgICAvLyB0aGUgc2FtZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3RpY2tpbmcgb3V0
LgotICAgIExheW91dFVuaXQgZGVsdGFZIHsgbV9yZW5kZXJlci5zdHlsZSgpLmlzRmxpcHBlZExp
bmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSAtIG1fdGV4dEJveC5sb2dpY2FsQm90
dG9tKCkgOiBtX3RleHRCb3gubG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wIH07CisgICAgTGF5
b3V0VW5pdCBkZWx0YVkgeyBtX3N0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNl
bGVjdGlvbkJvdHRvbSAtIHRleHRCb3goKS5sb2dpY2FsQm90dG9tKCkgOiB0ZXh0Qm94KCkubG9n
aWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wIH07CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWln
aHQgPSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBzZWxlY3Rpb25Cb3R0b20gLSBzZWxlY3Rpb25U
b3ApOwogCi0gICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0IHsgTGF5b3V0VW5pdChtX3BhaW50
UmVjdC54KCkpLCBMYXlvdXRVbml0KG1fcGFpbnRSZWN0LnkoKSAtIGRlbHRhWSksIExheW91dFVu
aXQobV90ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpKSwgc2VsZWN0aW9uSGVpZ2h0IH07Ci0gICAgbV90
ZXh0Qm94LmxpbmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2Vs
ZWN0aW9uUmVjdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgTGF5b3V0UmVjdCBzZWxl
Y3Rpb25SZWN0IHsgTGF5b3V0VW5pdChtX3BhaW50UmVjdC54KCkpLCBMYXlvdXRVbml0KG1fcGFp
bnRSZWN0LnkoKSAtIGRlbHRhWSksIExheW91dFVuaXQodGV4dEJveCgpLmxvZ2ljYWxXaWR0aCgp
KSwgc2VsZWN0aW9uSGVpZ2h0IH07CisgICAgZm9udENhc2NhZGUoKS5hZGp1c3RTZWxlY3Rpb25S
ZWN0Rm9yVGV4dChtX3BhaW50VGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCk7CiAKICAgICAvLyBGSVhNRTogU3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0
LiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+Lgot
ICAgIGF1dG8gYmFja2dyb3VuZFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRp
bmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgbV9kb2N1bWVudC5kZXZpY2VTY2FsZUZhY3Rvcigp
LCB0ZXh0UnVuLmx0cigpKTsKKyAgICBhdXRvIGJhY2tncm91bmRSZWN0ID0gc25hcFJlY3RUb0Rl
dmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIG1fZG9jdW1lbnQu
ZGV2aWNlU2NhbGVGYWN0b3IoKSwgbV9wYWludFRleHRSdW4ubHRyKCkpOwogICAgIGlmIChiYWNr
Z3JvdW5kU3R5bGUgPT0gQmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKSB7CiAgICAgICAgIGJhY2tn
cm91bmRSZWN0LmV4cGFuZCgtMSwgLTEpOwogICAgICAgICBiYWNrZ3JvdW5kUmVjdC5tb3ZlKDAu
NSwgMC41KTsKQEAgLTI4OSwzMCArMzAxLDMwIEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50
Rm9yZWdyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogICAgICAgICBy
ZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250
ZXh0KCk7Ci0gICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBtX3RleHRCb3gubGluZUZvbnQo
KTsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gbV90ZXh0Qm94LmxpbmVTdHls
ZSgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gZm9udENhc2NhZGUoKTsKIAogICAg
IGZsb2F0IGVtcGhhc2lzTWFya09mZnNldCA9IDA7Ci0gICAgc3RkOjpvcHRpb25hbDxib29sPiBt
YXJrRXhpc3RzQW5kSXNBYm92ZSA9IG1fdGV4dEJveC5lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fi
b3ZlKGxpbmVTdHlsZSk7Ci0gICAgY29uc3QgQXRvbVN0cmluZyYgZW1waGFzaXNNYXJrID0gbWFy
a0V4aXN0c0FuZElzQWJvdmUgPyBsaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpIDog
bnVsbEF0b20oKTsKKyAgICBjb25zdCBBdG9tU3RyaW5nJiBlbXBoYXNpc01hcmsgPSBtX2VtcGhh
c2lzTWFya0V4aXN0c0FuZElzQWJvdmUgPyBtX3N0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmco
KSA6IG51bGxBdG9tKCk7CiAgICAgaWYgKCFlbXBoYXNpc01hcmsuaXNFbXB0eSgpKQotICAgICAg
ICBlbXBoYXNpc01hcmtPZmZzZXQgPSAqbWFya0V4aXN0c0FuZElzQWJvdmUgPyAtZm9udC5mb250
TWV0cmljcygpLmFzY2VudCgpIC0gZm9udC5lbXBoYXNpc01hcmtEZXNjZW50KGVtcGhhc2lzTWFy
aykgOiBmb250LmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICsgZm9udC5lbXBoYXNpc01hcmtBc2Nl
bnQoZW1waGFzaXNNYXJrKTsKKyAgICAgICAgZW1waGFzaXNNYXJrT2Zmc2V0ID0gKm1fZW1waGFz
aXNNYXJrRXhpc3RzQW5kSXNBYm92ZSA/IC1mb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBm
b250LmVtcGhhc2lzTWFya0Rlc2NlbnQoZW1waGFzaXNNYXJrKSA6IGZvbnQuZm9udE1ldHJpY3Mo
KS5kZXNjZW50KCkgKyBmb250LmVtcGhhc2lzTWFya0FzY2VudChlbXBoYXNpc01hcmspOwogCiAg
ICAgVGV4dFBhaW50ZXIgdGV4dFBhaW50ZXIgeyBjb250ZXh0IH07CiAgICAgdGV4dFBhaW50ZXIu
c2V0Rm9udChmb250KTsKICAgICB0ZXh0UGFpbnRlci5zZXRTdHlsZShtYXJrZWRUZXh0LnN0eWxl
LnRleHRTdHlsZXMpOwotICAgIHRleHRQYWludGVyLnNldElzSG9yaXpvbnRhbChtX3RleHRCb3gu
aXNIb3Jpem9udGFsKCkpOworICAgIHRleHRQYWludGVyLnNldElzSG9yaXpvbnRhbCh0ZXh0Qm94
KCkuaXNIb3Jpem9udGFsKCkpOwogICAgIGlmIChtYXJrZWRUZXh0LnN0eWxlLnRleHRTaGFkb3cp
IHsKICAgICAgICAgdGV4dFBhaW50ZXIuc2V0U2hhZG93KCZtYXJrZWRUZXh0LnN0eWxlLnRleHRT
aGFkb3cudmFsdWUoKSk7Ci0gICAgICAgIGlmIChsaW5lU3R5bGUuaGFzQXBwbGVDb2xvckZpbHRl
cigpKQotICAgICAgICAgICAgdGV4dFBhaW50ZXIuc2V0U2hhZG93Q29sb3JGaWx0ZXIoJmxpbmVT
dHlsZS5hcHBsZUNvbG9yRmlsdGVyKCkpOworICAgICAgICBpZiAobV9zdHlsZS5oYXNBcHBsZUNv
bG9yRmlsdGVyKCkpCisgICAgICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRl
cigmbV9zdHlsZS5hcHBsZUNvbG9yRmlsdGVyKCkpOwogICAgIH0KLSAgICB0ZXh0UGFpbnRlci5z
ZXRFbXBoYXNpc01hcmsoZW1waGFzaXNNYXJrLCBlbXBoYXNpc01hcmtPZmZzZXQsIG1fdGV4dEJv
eC5jb21iaW5lZFRleHQoKSk7Ci0gICAgaWYgKGF1dG8qIGRlYnVnU2hhZG93ID0gbV90ZXh0Qm94
LmRlYnVnVGV4dFNoYWRvdygpKQorICAgIHRleHRQYWludGVyLnNldEVtcGhhc2lzTWFyayhlbXBo
YXNpc01hcmssIGVtcGhhc2lzTWFya09mZnNldCwgY29tYmluZWRUZXh0KCkpOworICAgIGlmIChh
dXRvKiBkZWJ1Z1NoYWRvdyA9IGRlYnVnVGV4dFNoYWRvdygpKQogICAgICAgICB0ZXh0UGFpbnRl
ci5zZXRTaGFkb3coZGVidWdTaGFkb3cpOwogCi0gICAgVGV4dFJ1biB0ZXh0UnVuID0gbV90ZXh0
Qm94LmNyZWF0ZVRleHRSdW4oKTsKLSAgICB0ZXh0UGFpbnRlci5zZXRHbHlwaERpc3BsYXlMaXN0
SWZOZWVkZWQobV90ZXh0Qm94LCBtX3BhaW50SW5mbywgZm9udCwgY29udGV4dCwgdGV4dFJ1bik7
CisgICAgaWYgKGF1dG8qIGxlZ2FjeUlubGluZUJveCA9IHRleHRCb3goKS5sZWdhY3lJbmxpbmVC
b3goKSkKKyAgICAgICAgdGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVkKCps
ZWdhY3lJbmxpbmVCb3gsIG1fcGFpbnRJbmZvLCBmb250LCBjb250ZXh0LCBtX3BhaW50VGV4dFJ1
bik7CisgICAgZWxzZQorICAgICAgICB0ZXh0UGFpbnRlci5zZXRHbHlwaERpc3BsYXlMaXN0SWZO
ZWVkZWQoKnRleHRCb3goKS5pbmxpbmVCb3goKSwgbV9wYWludEluZm8sIGZvbnQsIGNvbnRleHQs
IG1fcGFpbnRUZXh0UnVuKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlciB7IGNvbnRleHQsIGZhbHNlIH07CiAgICAgaWYgKG1hcmtlZFRleHQudHlwZSA9PSBNYXJr
ZWRUZXh0OjpEcmFnZ2VkQ29udGVudCkgewpAQCAtMzIwLDcgKzMzMiw3IEBAIHZvaWQgVGV4dEJv
eFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRU
ZXh0KQogICAgICAgICBjb250ZXh0LnNldEFscGhhKG1hcmtlZFRleHQuc3R5bGUuYWxwaGEpOwog
ICAgIH0KICAgICAvLyBUZXh0UGFpbnRlciB3YW50cyB0aGUgYm94IHJlY3RhbmdsZSBhbmQgdGV4
dCBvcmlnaW4gb2YgdGhlIGVudGlyZSBsaW5lIGJveC4KLSAgICB0ZXh0UGFpbnRlci5wYWludFJh
bmdlKHRleHRSdW4sIG1fcGFpbnRSZWN0LCBtX3RleHRCb3gudGV4dE9yaWdpbkZyb21Cb3hSZWN0
KG1fcGFpbnRSZWN0KSwgbWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZz
ZXQpOworICAgIHRleHRQYWludGVyLnBhaW50UmFuZ2UobV9wYWludFRleHRSdW4sIG1fcGFpbnRS
ZWN0LCB0ZXh0T3JpZ2luRnJvbVBhaW50UmVjdChtX3BhaW50UmVjdCksIG1hcmtlZFRleHQuc3Rh
cnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKIH0KIAogdm9pZCBUZXh0Qm94UGFpbnRl
cjo6cGFpbnREZWNvcmF0aW9uKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgY2xpcE91dFJlY3QpCkBAIC0zMzIsMzggKzM0NCwzNiBAQCB2b2lkIFRl
eHRCb3hQYWludGVyOjpwYWludERlY29yYXRpb24oY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFy
a2VkVGV4dCwgY29uc3QgRgogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQgPSBtX3RleHRCb3gubGluZUZvbnQoKTsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGlu
ZVN0eWxlID0gbV90ZXh0Qm94LmxpbmVTdHlsZSgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250ID0gZm9udENhc2NhZGUoKTsKIAogICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0
LCBtYXJrZWRUZXh0LnN0eWxlLnRleHRTdHlsZXMpOwogCi0gICAgYm9vbCBpc0NvbWJpbmVkVGV4
dCA9IG1fdGV4dEJveC5jb21iaW5lZFRleHQoKTsKKyAgICBib29sIGlzQ29tYmluZWRUZXh0ID0g
Y29tYmluZWRUZXh0KCk7CiAgICAgaWYgKGlzQ29tYmluZWRUZXh0KQogICAgICAgICBjb250ZXh0
LmNvbmNhdENUTShyb3RhdGlvbihtX3BhaW50UmVjdCwgQ2xvY2t3aXNlKSk7CiAKICAgICAvLyBO
b3RlIHRoYXQgaWYgdGhlIHRleHQgaXMgdHJ1bmNhdGVkLCB3ZSBsZXQgdGhlIHRoaW5nIGJlaW5n
IHBhaW50ZWQgaW4gdGhlIHRydW5jYXRpb24KICAgICAvLyBkcmF3IGl0cyBvd24gZGVjb3JhdGlv
bi4KLSAgICBUZXh0UnVuIHRleHRSdW4gPSBtX3RleHRCb3guY3JlYXRlVGV4dFJ1bigpOwogCiAg
ICAgLy8gQXZvaWQgbWVhc3VyaW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBp
cyBzZWxlY3RlZCBhcyBhbiBvcHRpbWl6YXRpb24uCiAgICAgRmxvYXRSZWN0IHNuYXBwZWRTZWxl
Y3Rpb25SZWN0ID0gbV9wYWludFJlY3Q7Ci0gICAgaWYgKHN0YXJ0T2Zmc2V0IHx8IGVuZE9mZnNl
dCAhPSB0ZXh0UnVuLmxlbmd0aCgpKSB7CisgICAgaWYgKHN0YXJ0T2Zmc2V0IHx8IGVuZE9mZnNl
dCAhPSBtX3BhaW50VGV4dFJ1bi5sZW5ndGgoKSkgewogICAgICAgICBMYXlvdXRSZWN0IHNlbGVj
dGlvblJlY3QgPSB7IG1fcGFpbnRSZWN0LngoKSwgbV9wYWludFJlY3QueSgpLCBtX3BhaW50UmVj
dC53aWR0aCgpLCBtX3BhaW50UmVjdC5oZWlnaHQoKSB9OwotICAgICAgICBmb250LmFkanVzdFNl
bGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBl
bmRPZmZzZXQpOwotICAgICAgICBzbmFwcGVkU2VsZWN0aW9uUmVjdCA9IHNuYXBSZWN0VG9EZXZp
Y2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCBtX2RvY3VtZW50LmRl
dmljZVNjYWxlRmFjdG9yKCksIHRleHRSdW4ubHRyKCkpOworICAgICAgICBmb250LmFkanVzdFNl
bGVjdGlvblJlY3RGb3JUZXh0KG1fcGFpbnRUZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0KTsKKyAgICAgICAgc25hcHBlZFNlbGVjdGlvblJlY3QgPSBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgbV9kb2N1
bWVudC5kZXZpY2VTY2FsZUZhY3RvcigpLCBtX3BhaW50VGV4dFJ1bi5sdHIoKSk7CiAgICAgfQog
CiAgICAgLy8gMi4gUGFpbnQKLSAgICBhdXRvIHRleHREZWNvcmF0aW9ucyA9IGxpbmVTdHlsZS50
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOworICAgIGF1dG8gdGV4dERlY29yYXRpb25zID0gbV9z
dHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgIHRleHREZWNvcmF0aW9ucy5hZGQo
VGV4dERlY29yYXRpb25QYWludGVyOjp0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdEZvclN0eWxlKG1h
cmtlZFRleHQuc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMpKTsKLSAgICBUZXh0RGVjb3JhdGlv
blBhaW50ZXIgZGVjb3JhdGlvblBhaW50ZXIgeyBjb250ZXh0LCB0ZXh0RGVjb3JhdGlvbnMsIG1f
cmVuZGVyZXIsIG1fdGV4dEJveC5pc0ZpcnN0TGluZSgpLCBmb250LCBtYXJrZWRUZXh0LnN0eWxl
LnRleHREZWNvcmF0aW9uU3R5bGVzIH07Ci0gICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFJ1
bkl0ZXJhdG9yKExheW91dEludGVncmF0aW9uOjp0ZXh0UnVuRm9yKCZtX3RleHRCb3gpKTsKKyAg
ICBUZXh0RGVjb3JhdGlvblBhaW50ZXIgZGVjb3JhdGlvblBhaW50ZXIgeyBjb250ZXh0LCB0ZXh0
RGVjb3JhdGlvbnMsIG1fcmVuZGVyZXIsIG1faXNGaXJzdExpbmUsIGZvbnQsIG1hcmtlZFRleHQu
c3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMgfTsKKyAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRU
ZXh0UnVuSXRlcmF0b3IobV90ZXh0Qm94KTsKICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRXaWR0
aChzbmFwcGVkU2VsZWN0aW9uUmVjdC53aWR0aCgpKTsKLSAgICBkZWNvcmF0aW9uUGFpbnRlci5z
ZXRJc0hvcml6b250YWwobV90ZXh0Qm94LmlzSG9yaXpvbnRhbCgpKTsKKyAgICBkZWNvcmF0aW9u
UGFpbnRlci5zZXRJc0hvcml6b250YWwodGV4dEJveCgpLmlzSG9yaXpvbnRhbCgpKTsKICAgICBp
ZiAobWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93KSB7CiAgICAgICAgIGRlY29yYXRpb25QYWlu
dGVyLnNldFRleHRTaGFkb3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52YWx1ZSgpKTsK
LSAgICAgICAgaWYgKGxpbmVTdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCi0gICAgICAgICAg
ICBkZWNvcmF0aW9uUGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRlcigmbGluZVN0eWxlLmFwcGxl
Q29sb3JGaWx0ZXIoKSk7CisgICAgICAgIGlmIChtX3N0eWxlLmhhc0FwcGxlQ29sb3JGaWx0ZXIo
KSkKKyAgICAgICAgICAgIGRlY29yYXRpb25QYWludGVyLnNldFNoYWRvd0NvbG9yRmlsdGVyKCZt
X3N0eWxlLmFwcGxlQ29sb3JGaWx0ZXIoKSk7CiAgICAgfQogCiAgICAgewpAQCAtMzc2LDcgKzM4
Niw3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50RGVjb3JhdGlvbihjb25zdCBTdHlsZWRN
YXJrZWRUZXh0JiBtYXJrZWRUZXh0LCBjb25zdCBGCiAgICAgICAgICAgICBpZiAoIWNsaXBPdXRS
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250ZXh0LmNsaXBPdXQoY2xpcE91dFJl
Y3QpOwogICAgICAgICB9Ci0gICAgICAgIGRlY29yYXRpb25QYWludGVyLnBhaW50VGV4dERlY29y
YXRpb24odGV4dFJ1bi5zdWJSdW4oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0
KSwgbV90ZXh0Qm94LnRleHRPcmlnaW5Gcm9tQm94UmVjdChzbmFwcGVkU2VsZWN0aW9uUmVjdCks
IHNuYXBwZWRTZWxlY3Rpb25SZWN0LmxvY2F0aW9uKCkpOworICAgICAgICBkZWNvcmF0aW9uUGFp
bnRlci5wYWludFRleHREZWNvcmF0aW9uKG1fcGFpbnRUZXh0UnVuLnN1YlJ1bihzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpLCB0ZXh0T3JpZ2luRnJvbVBhaW50UmVjdChzbmFw
cGVkU2VsZWN0aW9uUmVjdCksIHNuYXBwZWRTZWxlY3Rpb25SZWN0LmxvY2F0aW9uKCkpOwogICAg
IH0KIAogICAgIGlmIChpc0NvbWJpbmVkVGV4dCkKQEAgLTM4NiwyMCArMzk2LDIwIEBAIHZvaWQg
VGV4dEJveFBhaW50ZXI6OnBhaW50RGVjb3JhdGlvbihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBt
YXJrZWRUZXh0LCBjb25zdCBGCiB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9u
VW5kZXJsaW5lcygpCiB7CiAgICAgZm9yIChhdXRvJiB1bmRlcmxpbmUgOiBtX3JlbmRlcmVyLmZy
YW1lKCkuZWRpdG9yKCkuY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzKCkpIHsKLSAgICAgICAg
aWYgKHVuZGVybGluZS5lbmRPZmZzZXQgPD0gbV90ZXh0Qm94LnN0YXJ0KCkpIHsKKyAgICAgICAg
aWYgKHVuZGVybGluZS5lbmRPZmZzZXQgPD0gdGV4dEJveCgpLnN0YXJ0KCkpIHsKICAgICAgICAg
ICAgIC8vIFVuZGVybGluZSBpcyBjb21wbGV0ZWx5IGJlZm9yZSB0aGlzIHJ1bi4gVGhpcyBtaWdo
dCBiZSBhbiB1bmRlcmxpbmUgdGhhdCBzaXRzCiAgICAgICAgICAgICAvLyBiZWZvcmUgdGhlIGZp
cnN0IHJ1biB3ZSBkcmF3LCBvciB1bmRlcmxpbmVzIHRoYXQgd2VyZSB3aXRoaW4gcnVucyB3ZSBz
a2lwcGVkCiAgICAgICAgICAgICAvLyBkdWUgdG8gdHJ1bmNhdGlvbi4KICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHVuZGVybGluZS5zdGFydE9mZnNldCA+
PSBtX3RleHRCb3guZW5kKCkpCisgICAgICAgIGlmICh1bmRlcmxpbmUuc3RhcnRPZmZzZXQgPj0g
dGV4dEJveCgpLmVuZCgpKQogICAgICAgICAgICAgYnJlYWs7IC8vIFVuZGVybGluZSBpcyBjb21w
bGV0ZWx5IGFmdGVyIHRoaXMgcnVuLCBiYWlsLiBBIGxhdGVyIHJ1biB3aWxsIHBhaW50IGl0Lgog
CiAgICAgICAgIC8vIFVuZGVybGluZSBpbnRlcnNlY3RzIHRoaXMgcnVuLiBQYWludCBpdC4KICAg
ICAgICAgcGFpbnRDb21wb3NpdGlvblVuZGVybGluZSh1bmRlcmxpbmUpOwogCi0gICAgICAgIGlm
ICh1bmRlcmxpbmUuZW5kT2Zmc2V0ID4gbV90ZXh0Qm94LmVuZCgpKQorICAgICAgICBpZiAodW5k
ZXJsaW5lLmVuZE9mZnNldCA+IHRleHRCb3goKS5lbmQoKSkKICAgICAgICAgICAgIGJyZWFrOyAv
LyBVbmRlcmxpbmUgYWxzbyBydW5zIGludG8gdGhlIG5leHQgcnVuLiBCYWlsIG5vdywgbm8gbW9y
ZSBtYXJrZXIgYWR2YW5jZW1lbnQuCiAgICAgfQogfQpAQCAtNDExLDM3ICs0MjEsNDYgQEAgc3Rh
dGljIGlubGluZSB2b2lkIG1pcnJvclJUTFNlZ21lbnQoZmxvYXQgbG9naWNhbFdpZHRoLCBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiwKICAgICBzdGFydCA9IGxvZ2ljYWxXaWR0aCAtIHdpZHRoIC0g
c3RhcnQ7CiB9CiAKK3N0YXRpYyBmbG9hdCB0ZXh0UG9zaXRpb24oY29uc3QgTGF5b3V0SW50ZWdy
YXRpb246OlRleHRSdW5JdGVyYXRvciYgdGV4dEJveCkKK3sKKyAgICAvLyBXaGVuIGNvbXB1dGlu
ZyB0aGUgd2lkdGggb2YgYSB0ZXh0IHJ1biwgUmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJl
Y3Rpb25Qb3NpdGlvbnNGb3JMaW5lKCkgZG9lc24ndCBpbmNsdWRlIHRoZSBhY3R1YWwgb2Zmc2V0
CisgICAgLy8gZnJvbSB0aGUgY29udGFpbmluZyBibG9jayBlZGdlIGluIGl0cyBtZWFzdXJlbWVu
dC4gdGV4dFBvc2l0aW9uKCkgc2hvdWxkIGJlIGNvbnNpc3RlbnQgc28gdGhlIHRleHQgYXJlIHJl
bmRlcmVkIGluIHRoZSBzYW1lIHdpZHRoLgorICAgIGlmICghdGV4dEJveC0+bG9naWNhbExlZnQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRleHRCb3gtPmxvZ2ljYWxMZWZ0KCkg
LSB0ZXh0Qm94LT5saW5lKCktPmNvbnRlbnRMb2dpY2FsTGVmdCgpOworfQorCiB2b2lkIFRleHRC
b3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKGNvbnN0IENvbXBvc2l0aW9uVW5k
ZXJsaW5lJiB1bmRlcmxpbmUpCiB7CiAgICAgZmxvYXQgc3RhcnQgPSAwOyAvLyBzdGFydCBvZiBs
aW5lIHRvIGRyYXcsIHJlbGF0aXZlIHRvIHR4Ci0gICAgZmxvYXQgd2lkdGggPSBtX3RleHRCb3gu
bG9naWNhbFdpZHRoKCk7IC8vIGhvdyBtdWNoIGxpbmUgdG8gZHJhdworICAgIGZsb2F0IHdpZHRo
ID0gdGV4dEJveCgpLmxvZ2ljYWxXaWR0aCgpOyAvLyBob3cgbXVjaCBsaW5lIHRvIGRyYXcKICAg
ICBib29sIHVzZVdob2xlV2lkdGggPSB0cnVlOwotICAgIHVuc2lnbmVkIHBhaW50U3RhcnQgPSBt
X3RleHRCb3guc3RhcnQoKTsKLSAgICB1bnNpZ25lZCBwYWludEVuZCA9IG1fdGV4dEJveC5lbmQo
KTsKKyAgICB1bnNpZ25lZCBwYWludFN0YXJ0ID0gdGV4dEJveCgpLnN0YXJ0KCk7CisgICAgdW5z
aWduZWQgcGFpbnRFbmQgPSB0ZXh0Qm94KCkuZW5kKCk7CiAgICAgaWYgKHBhaW50U3RhcnQgPD0g
dW5kZXJsaW5lLnN0YXJ0T2Zmc2V0KSB7CiAgICAgICAgIHBhaW50U3RhcnQgPSB1bmRlcmxpbmUu
c3RhcnRPZmZzZXQ7CiAgICAgICAgIHVzZVdob2xlV2lkdGggPSBmYWxzZTsKLSAgICAgICAgc3Rh
cnQgPSBtX3JlbmRlcmVyLndpZHRoKG1fdGV4dEJveC5zdGFydCgpLCBwYWludFN0YXJ0IC0gbV90
ZXh0Qm94LnN0YXJ0KCksIG1fdGV4dEJveC50ZXh0UG9zKCksIG1fdGV4dEJveC5pc0ZpcnN0TGlu
ZSgpKTsKKyAgICAgICAgc3RhcnQgPSBtX3JlbmRlcmVyLndpZHRoKHRleHRCb3goKS5zdGFydCgp
LCBwYWludFN0YXJ0IC0gdGV4dEJveCgpLnN0YXJ0KCksIHRleHRQb3NpdGlvbihtX3RleHRCb3gp
LCBtX2lzRmlyc3RMaW5lKTsKICAgICB9CiAgICAgaWYgKHBhaW50RW5kICE9IHVuZGVybGluZS5l
bmRPZmZzZXQpIHsKICAgICAgICAgcGFpbnRFbmQgPSBzdGQ6Om1pbihwYWludEVuZCwgKHVuc2ln
bmVkKXVuZGVybGluZS5lbmRPZmZzZXQpOwogICAgICAgICB1c2VXaG9sZVdpZHRoID0gZmFsc2U7
CiAgICAgfQotICAgIGlmIChtX3RleHRCb3gudHJ1bmNhdGlvbigpKSB7Ci0gICAgICAgIHBhaW50
RW5kID0gc3RkOjptaW4ocGFpbnRFbmQsIG1fdGV4dEJveC5zdGFydCgpICsgKm1fdGV4dEJveC50
cnVuY2F0aW9uKCkpOworICAgIGlmIChtX3NlbGVjdGFibGVSYW5nZS50cnVuY2F0aW9uKSB7Cisg
ICAgICAgIHBhaW50RW5kID0gc3RkOjptaW4ocGFpbnRFbmQsIHRleHRCb3goKS5zdGFydCgpICsg
Km1fc2VsZWN0YWJsZVJhbmdlLnRydW5jYXRpb24pOwogICAgICAgICB1c2VXaG9sZVdpZHRoID0g
ZmFsc2U7CiAgICAgfQogICAgIGlmICghdXNlV2hvbGVXaWR0aCkgewotICAgICAgICB3aWR0aCA9
IG1fcmVuZGVyZXIud2lkdGgocGFpbnRTdGFydCwgcGFpbnRFbmQgLSBwYWludFN0YXJ0LCBtX3Rl
eHRCb3gudGV4dFBvcygpICsgc3RhcnQsIG1fdGV4dEJveC5pc0ZpcnN0TGluZSgpKTsKLSAgICAg
ICAgbWlycm9yUlRMU2VnbWVudChtX3RleHRCb3gubG9naWNhbFdpZHRoKCksIG1fdGV4dEJveC5k
aXJlY3Rpb24oKSwgc3RhcnQsIHdpZHRoKTsKKyAgICAgICAgd2lkdGggPSBtX3JlbmRlcmVyLndp
ZHRoKHBhaW50U3RhcnQsIHBhaW50RW5kIC0gcGFpbnRTdGFydCwgdGV4dFBvc2l0aW9uKG1fdGV4
dEJveCkgKyBzdGFydCwgbV9pc0ZpcnN0TGluZSk7CisgICAgICAgIG1pcnJvclJUTFNlZ21lbnQo
dGV4dEJveCgpLmxvZ2ljYWxXaWR0aCgpLCB0ZXh0Qm94KCkuZGlyZWN0aW9uKCksIHN0YXJ0LCB3
aWR0aCk7CiAgICAgfQogCiAgICAgLy8gVGhpY2sgbWFya2VkIHRleHQgdW5kZXJsaW5lcyBhcmUg
MnB4IHRoaWNrIGFzIGxvbmcgYXMgdGhlcmUgaXMgcm9vbSBmb3IgdGhlIDJweCBsaW5lIHVuZGVy
IHRoZSBiYXNlbGluZS4KICAgICAvLyBBbGwgb3RoZXIgbWFya2VkIHRleHQgdW5kZXJsaW5lcyBh
cmUgMXB4IHRoaWNrLgogICAgIC8vIElmIHRoZXJlJ3Mgbm90IGVub3VnaCBzcGFjZSB0aGUgdW5k
ZXJsaW5lIHdpbGwgdG91Y2ggb3Igb3ZlcmxhcCBjaGFyYWN0ZXJzLgogICAgIGludCBsaW5lVGhp
Y2tuZXNzID0gMTsKLSAgICBpbnQgYmFzZWxpbmUgPSBtX3RleHRCb3gubGluZVN0eWxlKCkuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKTsKLSAgICBpZiAodW5kZXJsaW5lLnRoaWNrICYmIG1fdGV4dEJv
eC5sb2dpY2FsSGVpZ2h0KCkgLSBiYXNlbGluZSA+PSAyKQorICAgIGludCBiYXNlbGluZSA9IG1f
c3R5bGUuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKKyAgICBpZiAodW5kZXJsaW5lLnRoaWNrICYm
IHRleHRCb3goKS5sb2dpY2FsSGVpZ2h0KCkgLSBiYXNlbGluZSA+PSAyKQogICAgICAgICBsaW5l
VGhpY2tuZXNzID0gMjsKIAogICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBzb21lIHNwYWNlIGJldHdl
ZW4gdW5kZXJsaW5lcyBvZiBzdWJzZXF1ZW50IGNsYXVzZXMsIGJlY2F1c2Ugc29tZSBpbnB1dCBt
ZXRob2RzIGRvIG5vdCB1c2UgZGlmZmVyZW50IHVuZGVybGluZSBzdHlsZXMgZm9yIHRob3NlLgpA
QCAtNDU1LDEyICs0NzQsMTIgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlv
blVuZGVybGluZShjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYgdW5kZXIKICAgICBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7CiAgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcih1bmRlcmxpbmVDb2xvcik7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlj
a25lc3MobGluZVRoaWNrbmVzcyk7Ci0gICAgY29udGV4dC5kcmF3TGluZUZvclRleHQoRmxvYXRS
ZWN0KG1fcGFpbnRSZWN0LngoKSArIHN0YXJ0LCBtX3BhaW50UmVjdC55KCkgKyBtX3RleHRCb3gu
bG9naWNhbEhlaWdodCgpIC0gbGluZVRoaWNrbmVzcywgd2lkdGgsIGxpbmVUaGlja25lc3MpLCBt
X2RvY3VtZW50LnByaW50aW5nKCkpOworICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0
UmVjdChtX3BhaW50UmVjdC54KCkgKyBzdGFydCwgbV9wYWludFJlY3QueSgpICsgdGV4dEJveCgp
LmxvZ2ljYWxIZWlnaHQoKSAtIGxpbmVUaGlja25lc3MsIHdpZHRoLCBsaW5lVGhpY2tuZXNzKSwg
bV9kb2N1bWVudC5wcmludGluZygpKTsKIH0KIAogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRQ
bGF0Zm9ybURvY3VtZW50TWFya2VycygpCiB7Ci0gICAgYXV0byBtYXJrZWRUZXh0cyA9IE1hcmtl
ZFRleHQ6OmNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMobV9yZW5kZXJlciwgbV90ZXh0Qm94LnNl
bGVjdGFibGVSYW5nZSgpLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uKTsKKyAg
ICBhdXRvIG1hcmtlZFRleHRzID0gTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2Vy
cyhtX3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6
RGVjb3JhdGlvbik7CiAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogTWFya2VkVGV4dDo6c3Vi
ZGl2aWRlKG1hcmtlZFRleHRzLCBNYXJrZWRUZXh0OjpPdmVybGFwU3RyYXRlZ3k6OkZyb250bW9z
dCkpCiAgICAgICAgIHBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcihtYXJrZWRUZXh0KTsKIH0K
QEAgLTQ3MSw3ICs0OTAsNyBAQCBGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZVVu
aW9uT2ZBbGxEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBMZWdhY3lJbgogICAgIEZsb2F0UmVj
dCByZXN1bHQ7CiAgICAgYXV0byBtYXJrZWRUZXh0cyA9IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JE
b2N1bWVudE1hcmtlcnModGV4dEJveC5yZW5kZXJlcigpLCB0ZXh0Qm94LnNlbGVjdGFibGVSYW5n
ZSgpLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uKTsKICAgICBmb3IgKGF1dG8m
IG1hcmtlZFRleHQgOiBNYXJrZWRUZXh0OjpzdWJkaXZpZGUobWFya2VkVGV4dHMsIE1hcmtlZFRl
eHQ6Ok92ZXJsYXBTdHJhdGVneTo6RnJvbnRtb3N0KSkKLSAgICAgICAgcmVzdWx0ID0gdW5pb25S
ZWN0KHJlc3VsdCwgY2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHModGV4dEJveCwgbWFya2Vk
VGV4dCkpOworICAgICAgICByZXN1bHQgPSB1bmlvblJlY3QocmVzdWx0LCBjYWxjdWxhdGVEb2N1
bWVudE1hcmtlckJvdW5kcyhMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bkZvcigmdGV4dEJveCks
IG1hcmtlZFRleHQpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01MDksMTMgKzUyOCwx
MiBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoY29u
c3QgTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihib3VuZHMsIGxpbmVTdHlsZUZvck1hcmtlZFRleHRUeXBl
KCkpOwogfQogCi1GbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNvbXB1dGVQYWludFJlY3QoY29u
c3QgTGVnYWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0KQorRmxvYXRSZWN0IFRleHRCb3hQYWludGVyOjpjb21wdXRlUGFpbnRSZWN0KGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBGbG9hdFBvaW50IGxvY2FsUGFpbnRP
ZmZzZXQocGFpbnRPZmZzZXQpOwogCi0gICAgaWYgKHRleHRCb3gudHJ1bmNhdGlvbigpKSB7Ci0g
ICAgICAgIGF1dG8mIHJlbmRlcmVyID0gdGV4dEJveC5yZW5kZXJlcigpOwotICAgICAgICBpZiAo
cmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpICE9IHRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CisgICAgaWYgKG1fc2Vs
ZWN0YWJsZVJhbmdlLnRydW5jYXRpb24pIHsKKyAgICAgICAgaWYgKG1fcmVuZGVyZXIuY29udGFp
bmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICE9IHRleHRCb3go
KS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgICAgIC8vIE1ha2UgdGhlIHZp
c2libGUgZnJhZ21lbnQgb2YgdGV4dCBodWcgdGhlIGVkZ2UgY2xvc2VzdCB0byB0aGUgcmVzdCBv
ZiB0aGUgcnVuIGJ5IG1vdmluZyB0aGUgb3JpZ2luCiAgICAgICAgICAgICAvLyBhdCB3aGljaCB3
ZSBzdGFydCBkcmF3aW5nIHRleHQuCiAgICAgICAgICAgICAvLyBlLmcuIEluIHRoZSBjYXNlIG9m
IExUUiB0ZXh0IHRydW5jYXRlZCBpbiBhbiBSVEwgQ29udGV4dCwgdGhlIGNvcnJlY3QgYmVoYXZp
b3IgaXM6CkBAIC01MjQsMzcgKzU0Miw5OSBAQCBGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNv
bXB1dGVQYWludFJlY3QoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgYwogICAg
ICAgICAgICAgLy8gZmFydGhlciB0byB0aGUgcmlnaHQuCiAgICAgICAgICAgICAvLyBOT1RFOiBX
ZWJLaXQncyBiZWhhdmlvciBkaWZmZXJzIGZyb20gdGhhdCBvZiBJRSB3aGljaCBhcHBlYXJzIHRv
IGp1c3Qgb3ZlcmxheSB0aGUgZWxsaXBzaXMgb24gdG9wIG9mIHRoZQogICAgICAgICAgICAgLy8g
dHJ1bmNhdGVkIHN0cmluZyBpLmUuICB8SGVsbG98Q0JBfCAtPiB8Li4ubG98Q0JBfAotICAgICAg
ICAgICAgTGF5b3V0VW5pdCB3aWR0aE9mVmlzaWJsZVRleHQgeyByZW5kZXJlci53aWR0aCh0ZXh0
Qm94LnN0YXJ0KCksICp0ZXh0Qm94LnRydW5jYXRpb24oKSwgdGV4dEJveC50ZXh0UG9zKCksIHRl
eHRCb3guaXNGaXJzdExpbmUoKSkgfTsKLSAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGhPZkhp
ZGRlblRleHQgeyB0ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpIC0gd2lkdGhPZlZpc2libGVUZXh0IH07
Ci0gICAgICAgICAgICBMYXlvdXRTaXplIHRydW5jYXRpb25PZmZzZXQodGV4dEJveC5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyB3aWR0aE9mSGlkZGVuVGV4dCA6IC13aWR0aE9mSGlkZGVuVGV4
dCwgMF9sdSk7Ci0gICAgICAgICAgICBsb2NhbFBhaW50T2Zmc2V0Lm1vdmUodGV4dEJveC5pc0hv
cml6b250YWwoKSA/IHRydW5jYXRpb25PZmZzZXQgOiB0cnVuY2F0aW9uT2Zmc2V0LnRyYW5zcG9z
ZWRTaXplKCkpOworICAgICAgICAgICAgTGF5b3V0VW5pdCB3aWR0aE9mVmlzaWJsZVRleHQgeyBt
X3JlbmRlcmVyLndpZHRoKHRleHRCb3goKS5zdGFydCgpLCAqbV9zZWxlY3RhYmxlUmFuZ2UudHJ1
bmNhdGlvbiwgdGV4dFBvc2l0aW9uKG1fdGV4dEJveCksIG1faXNGaXJzdExpbmUpIH07CisgICAg
ICAgICAgICBMYXlvdXRVbml0IHdpZHRoT2ZIaWRkZW5UZXh0IHsgdGV4dEJveCgpLmxvZ2ljYWxX
aWR0aCgpIC0gd2lkdGhPZlZpc2libGVUZXh0IH07CisgICAgICAgICAgICBMYXlvdXRTaXplIHRy
dW5jYXRpb25PZmZzZXQodGV4dEJveCgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHdpZHRo
T2ZIaWRkZW5UZXh0IDogLXdpZHRoT2ZIaWRkZW5UZXh0LCAwX2x1KTsKKyAgICAgICAgICAgIGxv
Y2FsUGFpbnRPZmZzZXQubW92ZSh0ZXh0Qm94KCkuaXNIb3Jpem9udGFsKCkgPyB0cnVuY2F0aW9u
T2Zmc2V0IDogdHJ1bmNhdGlvbk9mZnNldC50cmFuc3Bvc2VkU2l6ZSgpKTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGxvY2FsUGFpbnRPZmZzZXQubW92ZSgwLCB0ZXh0Qm94LmxpbmVTdHlsZSgp
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyAwIDogLXRleHRCb3gubG9naWNhbEhlaWdodCgp
KTsKKyAgICBsb2NhbFBhaW50T2Zmc2V0Lm1vdmUoMCwgbV9zdHlsZS5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gMCA6IC10ZXh0Qm94KCkubG9naWNhbEhlaWdodCgpKTsKIAotICAgIEZsb2F0
UG9pbnQgYm94T3JpZ2luID0gdGV4dEJveC5sb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7Cisg
ICAgYXV0byBsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nID0gWyZdKCkgLT4gRmxvYXRQb2ludCB7
CisgICAgICAgIGF1dG8gcmVjdCA9IHRleHRCb3goKS5yZWN0KCk7CisgICAgICAgIGlmICghbV9z
dHlsZS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
Y3QubG9jYXRpb24oKTsKKyAgICAgICAgYXV0byYgYmxvY2sgPSB0ZXh0Qm94KCkubGluZSgpLT5j
b250YWluaW5nQmxvY2soKTsKKyAgICAgICAgaWYgKGJsb2NrLnN0eWxlKCkuaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiB7IHJlY3QueCgpLCBibG9jay5oZWln
aHQoKSAtIHJlY3QuaGVpZ2h0KCkgLSByZWN0LnkoKSB9OworICAgICAgICByZXR1cm4geyBibG9j
ay53aWR0aCgpIC0gcmVjdC53aWR0aCgpIC0gcmVjdC54KCksIHJlY3QueSgpIH07CisgICAgfTsK
KworICAgIEZsb2F0UG9pbnQgYm94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygp
OwogICAgIGJveE9yaWdpbi5tb3ZlQnkobG9jYWxQYWludE9mZnNldCk7Ci0gICAgcmV0dXJuIHsg
Ym94T3JpZ2luLCBGbG9hdFNpemUodGV4dEJveC5sb2dpY2FsV2lkdGgoKSwgdGV4dEJveC5sb2dp
Y2FsSGVpZ2h0KCkpIH07CisgICAgcmV0dXJuIHsgYm94T3JpZ2luLCBGbG9hdFNpemUodGV4dEJv
eCgpLmxvZ2ljYWxXaWR0aCgpLCB0ZXh0Qm94KCkubG9naWNhbEhlaWdodCgpKSB9OwogfQogCi1G
bG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNv
bnN0IExlZ2FjeUlubGluZVRleHRCb3gmIHRleHRCb3gsIGNvbnN0IE1hcmtlZFRleHQmIG1hcmtl
ZFRleHQpCitzdGF0aWMgY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlRm9yKGNvbnN0IFJl
bmRlclRleHQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgdGV4dEJveFN0eWxlKQogewot
ICAgIGF1dG8mIGZvbnQgPSB0ZXh0Qm94LmxpbmVGb250KCk7CisgICAgaWYgKGlzPFJlbmRlckNv
bWJpbmVUZXh0PihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJDb21i
aW5lVGV4dD4ocmVuZGVyZXIpLnRleHRDb21iaW5lRm9udCgpOworCisgICAgcmV0dXJuIHRleHRC
b3hTdHlsZS5mb250Q2FzY2FkZSgpOworfQorCitGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNh
bGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExheW91dEludGVncmF0aW9uOjpUZXh0
UnVuSXRlcmF0b3ImIHRleHRCb3gsIGNvbnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCit7Cisg
ICAgYXV0byYgZm9udCA9IGZvbnRDYXNjYWRlRm9yKHRleHRCb3gtPnJlbmRlcmVyKCksIHRleHRC
b3gtPnN0eWxlKCkpOwogICAgIGF1dG8gYXNjZW50ID0gZm9udC5mb250TWV0cmljcygpLmFzY2Vu
dCgpOwogICAgIGF1dG8gZm9udFNpemUgPSBzdGQ6Om1pbihzdGQ6Om1heChmb250LnNpemUoKSwg
MTAuMGYpLCA0MC4wZik7CiAgICAgYXV0byB5ID0gYXNjZW50ICsgMC4xMTAzNSAqIGZvbnRTaXpl
OwogICAgIGF1dG8gaGVpZ2h0ID0gMC4xMzI0NyAqIGZvbnRTaXplOwogCiAgICAgLy8gQXZvaWQg
bWVhc3VyaW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBh
cyBhbiBvcHRpbWl6YXRpb24uCi0gICAgaWYgKG1hcmtlZFRleHQuc3RhcnRPZmZzZXQgfHwgbWFy
a2VkVGV4dC5lbmRPZmZzZXQgIT0gdGV4dEJveC5zZWxlY3RhYmxlUmFuZ2UoKS5jbGFtcCh0ZXh0
Qm94LmVuZCgpKSkgewotICAgICAgICBUZXh0UnVuIHJ1biA9IHRleHRCb3guY3JlYXRlVGV4dFJ1
bigpOworICAgIGlmIChtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0IHx8IG1hcmtlZFRleHQuZW5kT2Zm
c2V0ICE9IHRleHRCb3gtPnNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKHRleHRCb3gtPmVuZCgpKSkg
eworICAgICAgICBUZXh0UnVuIHJ1biA9IHRleHRCb3gtPmNyZWF0ZVRleHRSdW4oKTsKICAgICAg
ICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdCgwLCB5LCAwLCBoZWlnaHQp
OwotICAgICAgICB0ZXh0Qm94LmxpbmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQo
cnVuLCBzZWxlY3Rpb25SZWN0LCBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVu
ZE9mZnNldCk7CisgICAgICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBz
ZWxlY3Rpb25SZWN0LCBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNl
dCk7CiAgICAgICAgIHJldHVybiBzZWxlY3Rpb25SZWN0OwogICAgIH0KIAotICAgIHJldHVybiBG
bG9hdFJlY3QoMCwgeSwgdGV4dEJveC5sb2dpY2FsV2lkdGgoKSwgaGVpZ2h0KTsKKyAgICByZXR1
cm4gRmxvYXRSZWN0KDAsIHksIHRleHRCb3gtPmxvZ2ljYWxXaWR0aCgpLCBoZWlnaHQpOwogfQog
Citib29sIFRleHRCb3hQYWludGVyOjpjb21wdXRlSGF2ZVNlbGVjdGlvbigpIGNvbnN0Cit7Cisg
ICAgaWYgKG1faXNQcmludGluZyB8fCBtX3BhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpU
ZXh0Q2xpcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fcmVuZGVyZXIu
dmlldygpLnNlbGVjdGlvbigpLmhpZ2hsaWdodFN0YXRlRm9yVGV4dEJveChtX3JlbmRlcmVyLCBt
X3NlbGVjdGFibGVSYW5nZSkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZTsK
K30KKworY29uc3QgUmVuZGVyQ29tYmluZVRleHQqIFRleHRCb3hQYWludGVyOjpjb21iaW5lZFRl
eHQoKSBjb25zdAoreworICAgIHJldHVybiBpczxSZW5kZXJDb21iaW5lVGV4dD4obV9yZW5kZXJl
cikgPyAmZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KG1fcmVuZGVyZXIpIDogbnVsbHB0cjsK
K30KKworY29uc3QgRm9udENhc2NhZGUmIFRleHRCb3hQYWludGVyOjpmb250Q2FzY2FkZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGZvbnRDYXNjYWRlRm9yKG1fcmVuZGVyZXIsIG1fc3R5bGUpOwor
fQorCitGbG9hdFBvaW50IFRleHRCb3hQYWludGVyOjp0ZXh0T3JpZ2luRnJvbVBhaW50UmVjdChj
b25zdCBGbG9hdFJlY3QmIHBhaW50UmVjdCkgY29uc3QKK3sKKyAgICBGbG9hdFBvaW50IHRleHRP
cmlnaW4geyBwYWludFJlY3QueCgpLCBwYWludFJlY3QueSgpICsgZm9udENhc2NhZGUoKS5mb250
TWV0cmljcygpLmFzY2VudCgpIH07CisgICAgaWYgKGF1dG8qIGNvbWJpbmVkVGV4dCA9IHRoaXMt
PmNvbWJpbmVkVGV4dCgpKSB7CisgICAgICAgIGlmIChhdXRvIG5ld09yaWdpbiA9IGNvbWJpbmVk
VGV4dC0+Y29tcHV0ZVRleHRPcmlnaW4ocGFpbnRSZWN0KSkKKyAgICAgICAgICAgIHRleHRPcmln
aW4gPSBuZXdPcmlnaW4udmFsdWUoKTsKKyAgICB9CisgICAgaWYgKHRleHRCb3goKS5pc0hvcml6
b250YWwoKSkKKyAgICAgICAgdGV4dE9yaWdpbi5zZXRZKHJvdW5kVG9EZXZpY2VQaXhlbChMYXlv
dXRVbml0IHsgdGV4dE9yaWdpbi55KCkgfSwgbV9yZW5kZXJlci5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCkpKTsKKyAgICBlbHNlCisgICAgICAgIHRleHRPcmlnaW4uc2V0WChyb3VuZFRv
RGV2aWNlUGl4ZWwoTGF5b3V0VW5pdCB7IHRleHRPcmlnaW4ueCgpIH0sIG1fcmVuZGVyZXIuZG9j
dW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgcmV0dXJuIHRleHRPcmlnaW47Cit9
CisKK2NvbnN0IFNoYWRvd0RhdGEqIFRleHRCb3hQYWludGVyOjpkZWJ1Z1RleHRTaGFkb3coKSBj
b25zdAoreworICAgIGlmICghbV9yZW5kZXJlci5zZXR0aW5ncygpLmxlZ2FjeUxpbmVMYXlvdXRW
aXN1YWxDb3ZlcmFnZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KCF0ZXh0Qm94KCkubGVnYWN5SW5saW5lQm94KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlYnVnVGV4dFNoYWRvdyhJ
bnRQb2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBTUkdCQTx1
aW50OF90PiB7IDE1MCwgMCwgMCwgMTkwIH0pOworICAgIHJldHVybiAmZGVidWdUZXh0U2hhZG93
LmdldCgpOworfQorCisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0Qm94UGFpbnRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVy
LmgKaW5kZXggMTZjOWNlMjM2MDlkMjA2MmQxZjFjY2YzNWMwOTY1M2NkZDQ2ZGJiZS4uN2VhM2Ix
ZTZkMjA4N2E5YmRkM2FhMWY0N2UxYmFkMDUyNjJhMGM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRCb3hQYWludGVyLmgKQEAgLTI1LDEzICsyNSwyMCBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1
bkl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiVGV4dEJv
eFNlbGVjdGFibGVSYW5nZS5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDb2xvcjsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgTGVnYWN5SW5s
aW5lVGV4dEJveDsKK2NsYXNzIFJlbmRlckNvbWJpbmVUZXh0OworY2xhc3MgUmVuZGVyU3R5bGU7
CiBjbGFzcyBSZW5kZXJUZXh0OworY2xhc3MgU2hhZG93RGF0YTsKIHN0cnVjdCBDb21wb3NpdGlv
blVuZGVybGluZTsKIHN0cnVjdCBNYXJrZWRUZXh0Owogc3RydWN0IFBhaW50SW5mbzsKQEAgLTQw
LDYgKzQ3LDcgQEAgc3RydWN0IFN0eWxlZE1hcmtlZFRleHQ7CiBjbGFzcyBUZXh0Qm94UGFpbnRl
ciB7CiBwdWJsaWM6CiAgICAgVGV4dEJveFBhaW50ZXIoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJv
eCYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCk7CisgICAgVGV4
dEJveFBhaW50ZXIoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQmLCBjb25z
dCBMYXlvdXQ6OlJ1biYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCk7CiAgICAgflRleHRCb3hQYWludGVyKCk7CiAKICAgICB2b2lkIHBhaW50KCk7CkBAIC00Nyw2
ICs1NSwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEZsb2F0UmVjdCBjYWxjdWxhdGVVbmlvbk9m
QWxsRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYpOwogCiBw
cml2YXRlOgorICAgIFRleHRCb3hQYWludGVyKExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRl
cmF0b3ImJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKKwor
ICAgIGF1dG8mIHRleHRCb3goKSBjb25zdCB7IHJldHVybiAqbV90ZXh0Qm94OyB9CisKICAgICB2
b2lkIHBhaW50QmFja2dyb3VuZCgpOwogICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5kQW5kRGVjb3Jh
dGlvbnMoKTsKICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKCk7CkBAIC02MSwx
OCArNzMsMzEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUo
Y29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKTsKICAgICB2b2lkIHBhaW50UGxhdGZvcm1Eb2N1
bWVudE1hcmtlcihjb25zdCBNYXJrZWRUZXh0Jik7CiAKLSAgICBzdGF0aWMgRmxvYXRSZWN0IGNv
bXB1dGVQYWludFJlY3QoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYsIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjYWxjdWxhdGVEb2N1bWVu
dE1hcmtlckJvdW5kcyhjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiwgY29uc3QgTWFya2VkVGV4
dCYpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMo
Y29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciYsIGNvbnN0IE1hcmtlZFRl
eHQmKTsKKworICAgIEZsb2F0UmVjdCBjb21wdXRlUGFpbnRSZWN0KGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCk7CisgICAgYm9vbCBjb21wdXRlSGF2ZVNlbGVjdGlvbigpIGNvbnN0Owor
ICAgIE1hcmtlZFRleHQgY3JlYXRlTWFya2VkVGV4dEZyb21TZWxlY3Rpb25JbkJveCgpOworICAg
IGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0KiBjb21iaW5lZFRleHQoKSBjb25zdDsKKyAgICBjb25z
dCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUoKSBjb25zdDsKKyAgICBGbG9hdFBvaW50IHRleHRP
cmlnaW5Gcm9tUGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworCisgICAgY29uc3Qg
U2hhZG93RGF0YSogZGVidWdUZXh0U2hhZG93KCkgY29uc3Q7CiAKLSAgICBjb25zdCBMZWdhY3lJ
bmxpbmVUZXh0Qm94JiBtX3RleHRCb3g7CisgICAgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlRl
eHRSdW5JdGVyYXRvciBtX3RleHRCb3g7CiAgICAgY29uc3QgUmVuZGVyVGV4dCYgbV9yZW5kZXJl
cjsKICAgICBjb25zdCBEb2N1bWVudCYgbV9kb2N1bWVudDsKKyAgICBjb25zdCBSZW5kZXJTdHls
ZSYgbV9zdHlsZTsKKyAgICBjb25zdCBUZXh0UnVuIG1fcGFpbnRUZXh0UnVuOwogICAgIFBhaW50
SW5mbyYgbV9wYWludEluZm87CisgICAgY29uc3QgVGV4dEJveFNlbGVjdGFibGVSYW5nZSBtX3Nl
bGVjdGFibGVSYW5nZTsKICAgICBjb25zdCBGbG9hdFJlY3QgbV9wYWludFJlY3Q7CisgICAgY29u
c3QgYm9vbCBtX2lzRmlyc3RMaW5lOwogICAgIGNvbnN0IGJvb2wgbV9pc1ByaW50aW5nOwogICAg
IGNvbnN0IGJvb2wgbV9oYXZlU2VsZWN0aW9uOwogICAgIGNvbnN0IGJvb2wgbV9jb250YWluc0Nv
bXBvc2l0aW9uOwogICAgIGNvbnN0IGJvb2wgbV91c2VDdXN0b21VbmRlcmxpbmVzOworICAgIHN0
ZDo6b3B0aW9uYWw8Ym9vbD4gbV9lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlIHsgfTsKIH07
CiAKIH0K
</data>
<flag name="commit-queue"
          id="462029"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>