<?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>215117</bug_id>
          
          <creation_ts>2020-08-03 20:28:16 -0700</creation_ts>
          <short_desc>[LFC][IFC] Move inline alignment code to LineBox</short_desc>
          <delta_ts>2020-08-28 06:37:08 -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>
          
          <blocked>215752</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</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>1677554</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-08-03 20:28:16 -0700</bug_when>
    <thetext>where it belongs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677555</commentid>
    <comment_count>1</comment_count>
      <attachid>405901</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-03 20:35:52 -0700</bug_when>
    <thetext>Created attachment 405901
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679299</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-10 20:29:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/66814842&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683578</commentid>
    <comment_count>3</comment_count>
      <attachid>407449</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-27 21:19:09 -0700</bug_when>
    <thetext>Created attachment 407449
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683610</commentid>
    <comment_count>4</comment_count>
      <attachid>407460</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-28 04:30:08 -0700</bug_when>
    <thetext>Created attachment 407460
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683614</commentid>
    <comment_count>5</comment_count>
      <attachid>407462</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-28 05:14:30 -0700</bug_when>
    <thetext>Created attachment 407462
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683624</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-28 06:37:07 -0700</bug_when>
    <thetext>Committed r266276: &lt;https://trac.webkit.org/changeset/266276&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407462.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405901</attachid>
            <date>2020-08-03 20:35:52 -0700</date>
            <delta_ts>2020-08-27 21:19:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215117-20200803203551.patch</filename>
            <type>text/plain</type>
            <size>54258</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyNDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWIwNzE2OTgwOWFmN2Ji
MzBlNTExNzgxOTU1ZGIyNzZlZWI0NWMyYi4uMDYwOThlZThiYjZiYzk3ZGRhZmJhODQ2YmNmOGNi
MWE3OGYxMzFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDIwLTA4LTAzICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGlu
bGluZSBhbGlnbm1lbnQgY29kZSB0byBMaW5lQm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUxMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBMaW5lQm94IGlzIHJlc3BvbnNpYmxlIGZvciBhbGlnbmlu
ZyB0aGUgcnVucyBib3RoIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseS4KKworICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpsaW5lTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpIYW5naW5nQ29udGVudDo6d2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpIYW5naW5nQ29udGVudDo6aXNDb25kaXRpb25hbCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50OjpzZXRJc0Nv
bmRpdGlvbmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2luZ0Nv
bnRlbnQ6OmV4cGFuZCk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpIYW5naW5nQ29udGVudDo6cmVzZXQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmlubGluZVJlY3RMaXN0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGln
bmVyOjpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6bGF5b3V0U3RhdGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OkxpbmVDb250
ZW50QWxpZ25lcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250
ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9udGFsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFsaWduVmVydGljYWxseSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6YWRqdXN0QmFz
ZWxpbmVBbmRMaW5lSGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUNvbnRlbnRBbGlnbmVyOjpjb2xsZWN0SGFuZ2luZ0NvbnRlbnQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5o
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjppbmxpbmVSZWN0TGlzdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmxvZ2ljYWxCb3R0b20gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpsb2dpY2FsUmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnNjcm9sbGFibGVPdmVyZmxv
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmZvcm1hdHRpbmdD
b250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bGF5b3V0
U3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpzZXRMb2dp
Y2FsSGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6
c2V0TG9naWNhbFdpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJveDo6bW92ZUhvcml6b250YWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OmV4cGFuZEhvcml6b250YWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnNocmlua0hvcml6b250YWxseSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmV4cGFuZFZlcnRpY2FsbHkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpzaHJpbmtWZXJ0aWNhbGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6aXNDb25zaWRlcmVk
RW1wdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94
OjpzZXRJc0NvbnNpZGVyZWRFbXB0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OnNldElzQ29uc2lkZXJlZE5vbkVtcHR5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6TGluZUJveCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnJlc2V0QWxpZ25tZW50QmFzZWxpbmUpOiBEZWxldGVk
LgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsaW5lTG9naWNhbFdpZHRo
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmF2YWlsYWJs
ZVdpZHRoIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5
b3V0Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250
ZXh0OjpjbG9zZSk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91
dENvbnRleHQuaDoKKwogMjAyMC0wOC0wMSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtMRkNdW0lGQ10gTGluZUJ1aWxkZXI6UnVuIHNob3VsZCBub3QgaGF2ZSB2
ZXJ0aWNhbCBnZW9tZXRyeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA5MmU2YzUyZGY2MmY5ZjRmOTk2Zjdm
MTJiNjA3MzRiZDQxMTUyNzY0Li44MGNkOTRiN2QzMGRkNzEzNzExYzg3Yzk5YTY2Y2MyZDhlNGE4
MjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTQ3Niw2ICsxNDc2LDcgQEAgbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAogbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lSXRlbS5jcHAKK2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCb3guY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAK
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAogbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmIzZmM2NWE5MmY0YTQ3Y2Iw
OTViMzhmNzFhZDAwYzk2YjUwOWFkMy4uYmUxMTMyMTg2NWYzMzFhZmUxM2QzNGExZTI2YWU2NmRi
YzFiMWZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtOTQzMCw2ICs5NDMwLDcgQEAKIAkJNkY1QjdFQUEyMzAwQTc5RTAwNjdE
OUMzIC8qIFRhYmxlR3JpZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZUdyaWQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjYzODNGNDI0MjdBRjQ5MDBEQUJBNTMgLyog
TGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZGNjYzOEQ0MjQ5RTI2OEIwMDE5MjVGQyAvKiBUYWJsZVdyYXBwZXJCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhYmxlV3Jh
cHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk2RjY5QTc5OTI0RDZGQUI4MDBFNkI4NUQgLyogSW5saW5lTGluZUJveC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVMaW5lQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkY3MzkxOEMyMTA2Q0VERDAwNkFGMjYyIC8qIExheW91dFVuaXRzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExheW91dFVuaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZGNzc4Njg1MjM0OTFBQzYwMDREOTYzNiAvKiBEaXNwbGF5UGFpbnRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEaXNwbGF5UGFpbnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZGNzc4Njg3MjM0OTFBRDcwMDREOTYzNiAvKiBEaXNwbGF5UGFpbnRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5UGFpbnRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTcxMjIsNiArMTcxMjMsNyBAQAogCQkJCTExNUNGQTdDMjA4QjhF
MTAwMDFFNjk5MSAvKiBJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCAqLywKIAkJCQk2RjdCOENFQzIz
NjI2RTY2MDBDOUZGMTUgLyogSW5saW5lSXRlbS5jcHAgKi8sCiAJCQkJNkZFN0NGQTAyMTc3RUVG
MTAwNUIxNTczIC8qIElubGluZUl0ZW0uaCAqLywKKwkJCQk2RjY5QTc5OTI0RDZGQUI4MDBFNkI4
NUQgLyogSW5saW5lTGluZUJveC5jcHAgKi8sCiAJCQkJNkZCMjQwMDMyM0RGRjEyNzAwNzk2NDU4
IC8qIElubGluZUxpbmVCb3guaCAqLywKIAkJCQk2RkUxOTgxMzIxNzgzOTdCMDA0NDZGMDggLyog
SW5saW5lTGluZUJyZWFrZXIuY3BwICovLAogCQkJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAv
KiBJbmxpbmVMaW5lQnJlYWtlci5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
Y3BwCmluZGV4IDAwZjdkNzQwYWRlNmFlNDJjNzA2NTFlYzY3MzQxMWY1NTAyMjMzYWIuLjAxYjg4
ZDNlZGRhMmQwOTYzMjg2ZTlkYzY1ZDlmNjU1ODNiZGE5ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJGbG9hdGluZ0Nv
bnRleHQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIklubGluZUZvcm1h
dHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIklubGluZUxpbmVCb3guaCIKICNpbmNsdWRlICJJbmxp
bmVUZXh0SXRlbS5oIgogI2luY2x1ZGUgIkludmFsaWRhdGlvblN0YXRlLmgiCiAjaW5jbHVkZSAi
TGF5b3V0Qm94LmgiCkBAIC03NiwzMDQgKzc3LDYgQEAgc3RhdGljIGlubGluZSBjb25zdCBCb3gq
IG5leHRJbmxpbmVMZXZlbEJveFRvTGF5b3V0KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdHJ1Y3QgSGFuZ2luZ0NvbnRlbnQgewotcHVibGlj
OgotICAgIHZvaWQgcmVzZXQoKTsKLQotICAgIElubGluZUxheW91dFVuaXQgd2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgYm9vbCBpc0NvbmRpdGlvbmFsKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0NvbmRpdGlvbmFsOyB9Ci0KLSAgICB2b2lkIHNldElzQ29uZGl0aW9uYWwoKSB7
IG1faXNDb25kaXRpb25hbCA9IHRydWU7IH0KLSAgICB2b2lkIGV4cGFuZChJbmxpbmVMYXlvdXRV
bml0IHdpZHRoKSB7IG1fd2lkdGggKz0gd2lkdGg7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIG1f
aXNDb25kaXRpb25hbCB7IGZhbHNlIH07Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBtX3dpZHRoIHsg
MCB9OwotfTsKLQotdm9pZCBIYW5naW5nQ29udGVudDo6cmVzZXQoKQotewotICAgIG1faXNDb25k
aXRpb25hbCA9IGZhbHNlOwotICAgIG1fd2lkdGggPSAgMDsKLX0KLQotY2xhc3MgTGluZUNvbnRl
bnRBbGlnbmVyIHsKLXB1YmxpYzoKLSAgICBMaW5lQ29udGVudEFsaWduZXIoY29uc3QgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQmLCBMaW5lQm94JiwgY29uc3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3Qm
LCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKLQotICAgIGVudW0gY2xhc3MgSXNM
YXN0TGluZVdpdGhJbmxpbmVDb250ZW50IHsgTm8sIFllcyB9OwotICAgIHZvaWQgYWxpZ25Ib3Jp
em9udGFsbHkoVGV4dEFsaWduTW9kZSwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKLSAg
ICB2b2lkIGFsaWduVmVydGljYWxseSgpOwotICAgIHZvaWQgYWRqdXN0QmFzZWxpbmVBbmRMaW5l
SGVpZ2h0KCk7Ci0KLSAgICB1c2luZyBJbmxpbmVSdW5SZWN0TGlzdCA9IFZlY3RvcjxEaXNwbGF5
OjpJbmxpbmVSZWN0LCAxMD47Ci0gICAgY29uc3QgSW5saW5lUnVuUmVjdExpc3QmIGlubGluZVJl
Y3RMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9ydW5SZWN0TGlzdDsgfQotCi1wcml2YXRlOgotICAg
IEhhbmdpbmdDb250ZW50IGNvbGxlY3RIYW5naW5nQ29udGVudChJc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQpIGNvbnN0OwotCi0gICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZv
cm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDsgfQotICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1h
dHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsgfQotCi0gICAgY29uc3QgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7Ci0gICAgTGluZUJveCYgbV9s
aW5lQm94OwotICAgIGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7Ci0gICAgSW5s
aW5lUnVuUmVjdExpc3QgbV9ydW5SZWN0TGlzdDsKLSAgICBJbmxpbmVMYXlvdXRVbml0IG1fYXZh
aWxhYmxlV2lkdGg7Ci19OwotCi1MaW5lQ29udGVudEFsaWduZXI6OkxpbmVDb250ZW50QWxpZ25l
cihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQs
IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJbmxp
bmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQotICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKLSAgICAsIG1fbGluZUJveChsaW5lQm94KQot
ICAgICwgbV9ydW5zKHJ1bnMpCi0gICAgLCBtX2F2YWlsYWJsZVdpZHRoKGF2YWlsYWJsZVdpZHRo
KQotewotICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7Ci0gICAgICAgIGF1dG8gcnVuSGVp
Z2h0ID0gWyZdKCkgLT4gSW5saW5lTGF5b3V0VW5pdCB7Ci0gICAgICAgICAgICBhdXRvJiBmb250
TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7Ci0gICAgICAgICAgICBpZiAocnVu
LmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
b250TWV0cmljcy5oZWlnaHQoKTsKLQotICAgICAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0
YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZv
bnRNZXRyaWNzLmhlaWdodCgpOwotCi0gICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4u
bGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGlubGluZUZvcm1h
dHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBpZiAo
bGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9u
ZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkuY29udGVudEJveEhlaWdo
dCgpOwotCi0gICAgICAgICAgICAvLyBOb24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxp
bmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBtaXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94
IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVpZ2h0IGhlcmUuCi0gICAgICAgICAgICByZXR1
cm4gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci0gICAgICAgIH07Ci0gICAgICAgIG1f
cnVuUmVjdExpc3QuYXBwZW5kKHsgMCwgcnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lk
dGgoKSwgcnVuSGVpZ2h0KCkgfSk7Ci0gICAgfQotfQotCi12b2lkIExpbmVDb250ZW50QWxpZ25l
cjo6YWxpZ25Ib3Jpem9udGFsbHkoVGV4dEFsaWduTW9kZSBob3Jpem9udGFsQWxpZ25tZW50LCBJ
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZSkKLXsKLSAgICBhdXRvIGhhbmdp
bmdDb250ZW50ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KGlzTGFzdExpbmUpOwotICAgIGF1dG8g
YXZhaWxhYmxlV2lkdGggPSBtX2F2YWlsYWJsZVdpZHRoICsgaGFuZ2luZ0NvbnRlbnQud2lkdGgo
KTsKLSAgICBpZiAobV9ydW5zLmlzRW1wdHkoKSB8fCBhdmFpbGFibGVXaWR0aCA8PSAwKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoaG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25N
b2RlOjpKdXN0aWZ5KSB7Ci0gICAgICAgIGF1dG8gYWNjdW11bGF0ZWRFeHBhbnNpb24gPSBJbmxp
bmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8
IG1fcnVucy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIG1fcnVuUmVjdExpc3RbaW5k
ZXhdLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOwotICAgICAgICAgICAg
YWNjdW11bGF0ZWRFeHBhbnNpb24gKz0gbV9ydW5zW2luZGV4XS5leHBhbnNpb24oKS5ob3Jpem9u
dGFsRXhwYW5zaW9uOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBh
dXRvIGFkanVzdG1lbnRGb3JBbGlnbm1lbnQgPSBbJl0gKGF1dG8gYXZhaWxhYmxlV2lkdGgpIC0+
IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsKLSAgICAgICAgc3dpdGNoIChob3Jpem9udGFs
QWxpZ25tZW50KSB7Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICAgICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OlN0YXJ0OgotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpSaWdodDoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoK
LSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgICAgICByZXR1cm4gc3Rk
OjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGgsIDApOwotICAgICAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJL
aXRDZW50ZXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4o
YXZhaWxhYmxlV2lkdGggLyAyLCAwKTsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0
aWZ5OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICB9OwotCi0gICAgaWYgKGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRG
b3JBbGlnbm1lbnQoYXZhaWxhYmxlV2lkdGgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcnVuUmVj
dCA6IG1fcnVuUmVjdExpc3QpCi0gICAgICAgICAgICBydW5SZWN0Lm1vdmVIb3Jpem9udGFsbHko
KmFkanVzdG1lbnQpOwotICAgIH0KLX0KLQotdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFsaWdu
VmVydGljYWxseSgpCi17Ci0gICAgYXV0byBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0ID0gbV9saW5l
Qm94LmxvZ2ljYWxSZWN0KCk7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1f
cnVucy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byYgcnVuID0gbV9ydW5zW2luZGV4
XTsKLSAgICAgICAgYXV0byYgcnVuUmVjdCA9IG1fcnVuUmVjdExpc3RbaW5kZXhdOwotICAgICAg
ICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgYXV0byYg
bGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ24g
PSBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7Ci0gICAgICAgIGF1dG8gYXNjZW50
ID0gbGF5b3V0Qm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKLQotICAgICAgICBz
d2l0Y2ggKHZlcnRpY2FsQWxpZ24pIHsKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNl
bGluZToKLSAgICAgICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSB8fCBydW4uaXNUZXh0KCkp
Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGlu
ZSgpIC0gYXNjZW50OwotICAgICAgICAgICAgZWxzZSBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQo
KSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgICAgIGxvZ2ljYWxU
b3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAtIGFzY2VudCAtIGJveEdlb21ldHJ5
LmJvcmRlclRvcCgpIC0gYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0
Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAg
ICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxp
bmVGb3JtYXR0aW5nU3RhdGUoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKLSAg
ICAgICAgICAgICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVyYXRlIGF0IGxlYXN0IG9uZSBsaW5l
IC1ldmVuIGlmIGl0IGlzIGVtcHR5LgotICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQmxvY2tC
YXNlbGluZSA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5SW5saW5lQ29udGVudCgpLT5saW5lQm94
ZXMubGFzdCgpLmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGlubGluZS1ibG9j
aydzIGJhc2VsaW5lIG9mZnNldCBpcyByZWxhdGl2ZSB0byBpdHMgY29udGVudCBib3guIExldCdz
IGNvbnZlcnQgaXQgcmVsYXRpdmUgdG8gdGhlIG1hcmdpbiBib3guCi0gICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgIF9fX19fX19fX19fX19fXyA8LSBtYXJnaW4gYm94Ci0gICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgfAotICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgIF9fX19fX19f
X19fXyAgPC0gYm9yZGVyIGJveAotICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfAotICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfCAgX19fX19fX19fICA8LSBjb250ZW50IGJveAot
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfCB8ICAgXgotICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgIHwgfCB8ICAgfCAgPC0gYmFzZWxpbmUgb2Zmc2V0Ci0gICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgfCB8IHwgICB8Ci0gICAgICAgICAgICAgICAgLy8gICAgIHRleHQgfCB8IHwg
ICB2IHRleHQKLSAgICAgICAgICAgICAgICAvLyAgICAgLS0tLS18LXwtfC0tLS0tLS0tLS0gPC0g
YmFzZWxpbmUKLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIGF1dG8mIGJveEdl
b21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwot
ICAgICAgICAgICAgICAgIGF1dG8gYmFzZWxpbmVGcm9tTWFyZ2luQm94ID0gYm94R2VvbWV0cnku
bWFyZ2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBh
ZGRpbmdUb3AoKS52YWx1ZU9yKDApICsgaW5saW5lQmxvY2tCYXNlbGluZTsKLSAgICAgICAgICAg
ICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgLSBiYXNlbGlu
ZUZyb21NYXJnaW5Cb3g7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGF1
dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlv
dXRCb3gpOwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50
QmFzZWxpbmUoKSAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnku
dmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwX2x1KSArIHJ1blJlY3QuaGVpZ2h0KCkgKyBib3hH
ZW9tZXRyeS5tYXJnaW5BZnRlcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKLSAgICAgICAgICAgIGxvZ2ljYWxU
b3AgPSAwX2x1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6Qm90dG9tOgotICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5sb2dpY2FsQm90
dG9tKCkgLSBydW5SZWN0LmhlaWdodCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcnVuUmVjdC5zZXRUb3AobG9naWNhbFRv
cCk7Ci0gICAgICAgIC8vIEFkanVzdCBzY3JvbGxhYmxlIG92ZXJmbG93IGlmIHRoZSBydW4gb3Zl
cmZsb3dzIHRoZSBsaW5lLgotICAgICAgICBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0LmV4cGFuZFZl
cnRpY2FsbHlUb0NvbnRhaW4ocnVuUmVjdCk7Ci0gICAgICAgIC8vIENvbnZlcnQgcnVucyBmcm9t
IHJlbGF0aXZlIHRvIHRoZSBsaW5lIHRvcC9sZWZ0IHRvIHRoZSBmb3JtYXR0aW5nIHJvb3QncyBi
b3JkZXIgYm94IHRvcC9sZWZ0LgotICAgICAgICBydW5SZWN0Lm1vdmVWZXJ0aWNhbGx5KG1fbGlu
ZUJveC5sb2dpY2FsVG9wKCkpOwotICAgICAgICBydW5SZWN0Lm1vdmVIb3Jpem9udGFsbHkobV9s
aW5lQm94LmxvZ2ljYWxMZWZ0KCkpOwotICAgIH0KLSAgICBtX2xpbmVCb3guc2V0U2Nyb2xsYWJs
ZU92ZXJmbG93KHNjcm9sbGFibGVPdmVyZmxvd1JlY3QpOwotfQotCi12b2lkIExpbmVDb250ZW50
QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkKLXsKLSAgICB1bnNpZ25lZCBp
bmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwgPSAwOwotICAgIGF1dG8gaGFzU2VlbkRpcmVjdFRl
eHRPckxpbmVCcmVhayA9IGZhbHNlOwotICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7Ci0g
ICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKLSAgICAgICAgYXV0byYg
c3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBy
dW4uaXNMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgLy8gRm9yIHRleHQgY29udGVudCB3ZSBz
ZXQgdGhlIGJhc2VsaW5lIGVpdGhlciB0aHJvdWdoIHRoZSBpbml0aWFsIHN0cnV0IChzZXQgYnkg
dGhlIGZvcm1hdHRpbmcgY29udGV4dCByb290KSBvcgotICAgICAgICAgICAgLy8gdGhyb3VnaCB0
aGUgaW5saW5lIGNvbnRhaW5lciAoc3RhcnQpLiBOb3JtYWxseSB0aGUgdGV4dCBjb250ZW50IGl0
c2VsZiBkb2VzIG5vdCBzdHJldGNoIHRoZSBsaW5lLgotICAgICAgICAgICAgaWYgKGlubGluZUNv
bnRhaW5lck5lc3RpbmdMZXZlbCkgewotICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkg
YWRqdXN0ZWQgdGhlIGxpbmUgaGVpZ2h0L2Jhc2VsaW5lIHRocm91Z2ggdGhlIHBhcmVudCBpbmxp
bmUgY29udGFpbmVyLiAKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gZS5nIGRpdj5maXJzdCB0ZXh0PC9kaXY+IG9yIDxkaXY+PHNwYW4+bmVzdGVk
PHNwYW4+Zmlyc3QgZGlyZWN0IHRleHQ8L2Rpdj4uCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFr
ID0gdHJ1ZTsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBpbiBxdWlya3MgbW9kZSB3aGVyZSB0aGUg
Zm9udC1tZXRyaWNzIG1pZ2h0IGNoYW5nZSB0aGUgbGluZSBsaW5lIGhlaWdodC9iYXNlbGluZSBh
bmQgdGhpcyBpcyB0aGUgZmlyc3QgdGV4dCBjb250ZW50IG9uIHRoZSBsaW5lCi0gICAgICAgICAg
ICAvLyBvdXRzaWRlIG9mIGFuIGlubGluZSBjb250YWluZXIuCi0gICAgICAgICAgICBhdXRvIGhh
bGZMZWFkaW5nID0gTGluZUJveDo6aGFsZkxlYWRpbmdNZXRyaWNzKHN0eWxlLmZvbnRNZXRyaWNz
KCksIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgIG1fbGluZUJveC5z
ZXRBc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuYXNjZW50KTsKLSAgICAgICAgICAgIG1fbGlu
ZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmRlc2NlbnQpOwotICAgICAgICAg
ICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuaGVpZ2h0
KCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocnVu
LmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgKytpbmxpbmVDb250YWluZXJOZXN0
aW5nTGV2ZWw7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBzdHJldGNoIHRoZSBs
aW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KLSAgICAgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMs
IHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVpZ2h0
LgotICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygpOwot
ICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpC
YXNlbGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBMaW5lQm94Ojpo
YWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgp
KTsKLSAgICAgICAgICAgICAgICAvLyBCb3RoIGhhbGZsZWFkaW5nIGFzY2VudCBhbmQgZGVzY2Vu
dCBjb3VsZCBiZSBuZWdhdGl2ZSAodGFsbCBmb250IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1
ZSkKLSAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuZGVzY2VudCA+IDApCi0gICAgICAg
ICAgICAgICAgICAgIG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmRl
c2NlbnQpOwotICAgICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5hc2NlbnQgPiAwKQotICAg
ICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5n
LmFzY2VudCk7Ci0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIobV9saW5lQm94LmFzY2VudEFuZERlc2NlbnQoKS5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihmb250TWV0cmljcy5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChydW4uaXNDb250YWluZXJFbmQoKSkgewotICAgICAgICAgICAg
Ly8gVGhlIGxpbmUncyBiYXNlbGluZSBhbmQgaGVpZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGFkanVz
dGVkIGF0IENvbnRhaW5lclN0YXJ0LgotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNvbnRhaW5l
ck5lc3RpbmdMZXZlbCk7Ci0gICAgICAgICAgICAtLWlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZl
bDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJ1bi5p
c0JveCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2lu
Qm94SGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAoc3R5bGUudmVydGljYWxBbGlnbigpKSB7Ci0gICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OkJhc2VsaW5lOiB7Ci0gICAgICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0lu
bGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJbmxpbmUtYmxvY2tzIHdpdGggaW5s
aW5lIGNvbnRlbnQgYWx3YXlzIGhhdmUgYmFzZWxpbmVzLgotICAgICAgICAgICAgICAgICAgICBh
dXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9y
bWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBp
ZiBpdCBpcyBlbXB0eS4KLSAgICAgICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmVCb3ggPSBm
b3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKTsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBiZWZvcmVIZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJn
aW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGlu
Z1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBbGln
bm1lbnRCYXNlbGluZUlmR3JlYXRlcihiZWZvcmVIZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGlu
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAvLyBOb24gaW5saW5lLWJsb2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxp
bmUgKGluY2x1ZGluZyB0aGVpciBib3R0b20gbWFyZ2luKS4KLSAgICAgICAgICAgICAgICAgICAg
bV9saW5lQm94LnNldEFzY2VudElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAg
ICAgICAgICAgICAvLyBJZ25vcmUgbmVnYXRpdmUgZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNj
ZW50IGlzIGEgdGhpbmcpLgotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNh
bEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRV
bml0PigwLCBtX2xpbmVCb3guYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKLSAgICAgICAgICAgICAgICAvLyBUb3AgYWxp
Z24gY29udGVudCBuZXZlciBjaGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhl
IGJvdHRvbSBvZiB0aGUgbGluZSBmdXJ0aGVyIGRvd24uCi0gICAgICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7
Ci0gICAgICAgICAgICAgICAgLy8gQm90dG9tIGFsaWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMg
dGhlIGJhc2VsaW5lIGZ1cnRoZXIgZG93biBmcm9tIHRoZSBsaW5lIHRvcC4KLSAgICAgICAgICAg
ICAgICBhdXRvIGxpbmVMb2dpY2FsSGVpZ2h0ID0gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsK
LSAgICAgICAgICAgICAgICBpZiAobWFyZ2luQm94SGVpZ2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0
ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFs
aWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpICsg
KG1hcmdpbkJveEhlaWdodCAtIGxpbmVMb2dpY2FsSGVpZ2h0KSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUhhbmdpbmdDb250ZW50IExpbmVDb250ZW50QWxpZ25l
cjo6Y29sbGVjdEhhbmdpbmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xh
c3RMaW5lV2l0aElubGluZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgYXV0byBoYW5naW5nQ29udGVu
dCA9IEhhbmdpbmdDb250ZW50IHsgfTsKLSAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50ID09IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQotICAgICAgICBoYW5naW5n
Q29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1h
a2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKLSAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0
YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBoYW5naW5nQ29udGVu
dC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJlc2VydmVkIG9yIGh1bmcgd2hp
dGVzcGFjZS4KLSAgICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNw
YWNlOjpQcmVXcmFwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIFRoaXMgaXMgZWl0
aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFpbGluZyB3aGl0ZXNwYWNl
LgotICAgICAgICBoYW5naW5nQ29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdp
ZHRoKCkpOwotICAgIH0KLSAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7Ci19Ci0KIHZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3Rh
dGUmIGludmFsaWRhdGlvblN0YXRlLCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQm
IGNvbnN0cmFpbnRzKQogewogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExh
eW91dCwgc3RyZWFtIDw8ICJbU3RhcnRdIC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgLT4g
Zm9ybWF0dGluZyByb290KCIgPDwgJnJvb3QoKSA8PCAiKSIpOwpAQCAtNDUwLDQ4ICsxNTMsMjMg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYg
aW5saW5lSXRlbXMsIExpbmVMYXlvdXRDb24KICAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxp
bmVMYXlvdXRDb250ZXh0LmxheW91dElubGluZUNvbnRlbnQobGluZSwgbmVlZHNMYXlvdXRSYW5n
ZSwgcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKIAogICAgICAgICBhdXRvIGxpbmVDb250
ZW50UmFuZ2UgPSBsaW5lQ29udGVudC5pbmxpbmVJdGVtUmFuZ2U7Ci0gICAgICAgIGF1dG8gbGlu
ZUJveCA9IExpbmVCb3ggeyBEaXNwbGF5OjpJbmxpbmVSZWN0IHsgbGluZUNvbnN0cmFpbnRzLmxv
Z2ljYWxUb3BMZWZ0LCAwX2x1LCBsaW5lQ29uc3RyYWludHMubGluZUhlaWdodCB9LCBMaW5lQm94
OjpoYWxmTGVhZGluZ01ldHJpY3Mocm9vdCgpLnN0eWxlKCkuZm9udE1ldHJpY3MoKSwgbGluZUNv
bnN0cmFpbnRzLmxpbmVIZWlnaHQpIH07Ci0KLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgdGVt
cG9yYXJ5IGFuZCB3aWxsIGV2ZW50dWFsbHkgZ2V0IG1lcmdlZCB0byBMaW5lQm94LgotICAgICAg
ICBhdXRvIGNvbnRlbnRBbGlnbmVyID0gTGluZUNvbnRlbnRBbGlnbmVyIHsgKnRoaXMsIGxpbmVC
b3gsIGxpbmUucnVucygpLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgfTsKLSAgICAgICAgYXV0byBh
bGlnbkxpbmVDb250ZW50ID0gWyZdIHsKLSAgICAgICAgICAgIGNvbnRlbnRBbGlnbmVyLmFkanVz
dEJhc2VsaW5lQW5kTGluZUhlaWdodCgpOwotICAgICAgICAgICAgaWYgKGxpbmUuaXNWaXN1YWxs
eUVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBsaW5lQm94LnJlc2V0QWxpZ25tZW50QmFzZWxp
bmUoKTsKLSAgICAgICAgICAgICAgICBsaW5lQm94LnNldExvZ2ljYWxIZWlnaHQoeyB9KTsKKyAg
ICAgICAgYXV0byBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPSBbJl0geworICAgICAgICAg
ICAgaWYgKGxpbmVDb250ZW50LnBhcnRpYWxDb250ZW50KQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGlmIChsaW5lQ29udGVudFJhbmdlLmVuZCA9PSBuZWVkc0xh
eW91dFJhbmdlLmVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IC8vIE9taXQgZmxvYXRzIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGxpbmUgd2l0aCBpbmxp
bmUgY29udGVudC4KKyAgICAgICAgICAgIGZvciAoYXV0byBpID0gbGluZUNvbnRlbnRSYW5nZS5l
bmQ7IGktLTspIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlubGluZUl0ZW1zW2ldLmlzRmxvYXQo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZUNvbnRlbnRSYW5nZS5lbmQg
LSAxOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGVudEFsaWduZXIuYWxpZ25WZXJ0
aWNhbGx5KCk7Ci0KLSAgICAgICAgICAgIGF1dG8gaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
ID0gWyZdIHsKLSAgICAgICAgICAgICAgICBpZiAobGluZUNvbnRlbnRSYW5nZS5lbmQgPT0gbmVl
ZHNMYXlvdXRSYW5nZS5lbmQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQ29udGVu
dEFsaWduZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzOwotICAgICAgICAgICAg
ICAgIGlmIChsaW5lQ29udGVudC5wYXJ0aWFsQ29udGVudCkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpO
bzsKLSAgICAgICAgICAgICAgICAvLyBPbWl0IGZsb2F0cyB0byBzZWUgaWYgdGhpcyBpcyB0aGUg
bGFzdCBsaW5lIHdpdGggaW5saW5lIGNvbnRlbnQuCi0gICAgICAgICAgICAgICAgZm9yIChhdXRv
IGkgPSBsaW5lQ29udGVudFJhbmdlLmVuZDsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlubGluZUl0ZW1zW2ldLmlzRmxvYXQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBpID09IGxpbmVDb250ZW50UmFuZ2UuZW5kIC0gMSA/IExpbmVDb250ZW50QWxpZ25lcjo6
SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMgOiBMaW5lQ29udGVudEFsaWduZXI6Oklz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbm9uLWZsb2F0IGl0ZW0u
Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpO
bzsKLSAgICAgICAgICAgIH0oKTsKLQotICAgICAgICAgICAgYXV0byBjb21wdXRlZEhvcml6b250
YWxBbGlnbm1lbnQgPSBbJl0gewotICAgICAgICAgICAgICAgIGlmIChyb290KCkuc3R5bGUoKS50
ZXh0QWxpZ24oKSAhPSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcm9vdCgpLnN0eWxlKCkudGV4dEFsaWduKCk7Ci0gICAgICAgICAgICAgICAgLy8g
VGV4dCBpcyBqdXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRo
ZSB0ZXh0LWp1c3RpZnkgcHJvcGVydHksCi0gICAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8g
ZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgYnkg
dGV4dC1hbGlnbi1sYXN0LAotICAgICAgICAgICAgICAgIC8vIHRoZSBsYXN0IGxpbmUgYmVmb3Jl
IGEgZm9yY2VkIGJyZWFrIG9yIHRoZSBlbmQgb2YgdGhlIGJsb2NrIGlzIHN0YXJ0LWFsaWduZWQu
Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmUucnVucygpLmxhc3QoKS5pc0xpbmVCcmVhaygpIHx8
IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA9PSBMaW5lQ29udGVudEFsaWduZXI6OklzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
VGV4dEFsaWduTW9kZTo6U3RhcnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHRBbGlnbk1v
ZGU6Okp1c3RpZnk7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgY29udGVudEFsaWduZXIu
YWxpZ25Ib3Jpem9udGFsbHkoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50KCksIGlzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCk7CisgICAgICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQg
bGVhc3Qgb25lIG5vbi1mbG9hdCBpdGVtLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH07Ci0KLSAgICAgICAgYWxp
Z25MaW5lQ29udGVudCgpOwotICAgICAgICBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGxpbmUsIGNv
bnRlbnRBbGlnbmVyLmlubGluZVJlY3RMaXN0KCksIGxpbmVCb3gsIGxpbmVDb250ZW50LCBjb25z
dHJhaW50cy5ob3Jpem9udGFsKTsKKyAgICAgICAgYXV0byBsaW5lUmVjdCA9IERpc3BsYXk6Oklu
bGluZVJlY3QgeyBsaW5lQ29uc3RyYWludHMubG9naWNhbFRvcExlZnQsIGxpbmUubGluZUxvZ2lj
YWxXaWR0aCgpLCBsaW5lQ29uc3RyYWludHMubGluZUhlaWdodH07CisgICAgICAgIGF1dG8gbGlu
ZUJveCA9IExpbmVCb3ggeyAqdGhpcywgbGluZVJlY3QsIGxpbmVDb250ZW50LnJ1bnMsIGxpbmUu
aXNWaXN1YWxseUVtcHR5KCkgPyBMaW5lQm94OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpZZXMgOiBM
aW5lQm94OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpObywgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50KCkgPyBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExpbmVC
b3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm8gfTsKKyAgICAgICAgc2V0RGlzcGxh
eUJveGVzRm9yTGluZShsaW5lQ29udGVudCwgbGluZUJveCwgY29uc3RyYWludHMuaG9yaXpvbnRh
bCk7CiAKICAgICAgICAgaWYgKCFsaW5lQ29udGVudFJhbmdlLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgQVNTRVJUKG5lZWRzTGF5b3V0UmFuZ2Uuc3RhcnQgPCBsaW5lQ29udGVudFJhbmdlLmVu
ZCk7CkBAIC01MTUsNyArMTkzLDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGlu
ZUxheW91dChJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMsIExpbmVMYXlvdXRDb24KICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIC8vIEZsb2F0cyBwcmV2ZW50ZWQgdXMg
cGxhY2luZyBhbnkgY29udGVudCBvbiB0aGUgbGluZS4KLSAgICAgICAgQVNTRVJUKGxpbmUucnVu
cygpLmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChsaW5lQ29udGVudC5ydW5zLmlzRW1wdHko
KSk7CiAgICAgICAgIEFTU0VSVChsaW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCkpOwogICAgICAgICAv
LyBNb3ZlIHRoZSBuZXh0IGxpbmUgYmVsb3cgdGhlIGludHJ1c2l2ZSBmbG9hdC4KICAgICAgICAg
YXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyByb290KCksICp0aGlzLCBm
b3JtYXR0aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCkgfTsKQEAgLTgwMywxMCArNDgxLDkgQEAg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVDb25zdHJhaW50cyBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6Y29uc3RyYWludHNGb3IKICAgICByZXR1cm4gTGluZUNvbnN0cmFpbnRzIHsgeyBs
aW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2FsVG9wIH0sIGxpbmVMb2dpY2FsUmlnaHQgLSBsaW5l
TG9naWNhbExlZnQsIGluaXRpYWxMaW5lSGVpZ2h0LCBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQg
fTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9y
TGluZShjb25zdCBMaW5lQnVpbGRlciYgbGluZSwgY29uc3QgTGluZUNvbnRlbnRBbGlnbmVyOjpJ
bmxpbmVSdW5SZWN0TGlzdCYgcnVuUmVjdExpc3QsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNv
bnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQordm9pZCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lTGF5b3V0
Q29udGV4dDo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBjb25zdCBMaW5lQm94JiBsaW5lQm94
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKIHsK
ICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKLQog
ICAgIGlmICghbGluZUNvbnRlbnQuZmxvYXRzLmlzRW1wdHkoKSkgewogICAgICAgICBhdXRvIGZs
b2F0aW5nQ29udGV4dCA9IEZsb2F0aW5nQ29udGV4dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRp
bmdTdGF0ZS5mbG9hdGluZ1N0YXRlKCkgfTsKICAgICAgICAgLy8gTW92ZSBmbG9hdHMgdG8gdGhl
aXIgZmluYWwgcG9zaXRpb24uCkBAIC04MzIsNyArNTA5LDggQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlciYgbGlu
ZSwgY28KICAgICBhdXRvIGxpbmVJbmRleCA9IGlubGluZUNvbnRlbnQubGluZUJveGVzLnNpemUo
KTsKICAgICBhdXRvIGxpbmVJbmtPdmVyZmxvdyA9IGxpbmVCb3guc2Nyb2xsYWJsZU92ZXJmbG93
KCk7CiAgICAgLy8gQ29tcHV0ZSBib3ggZmluYWwgZ2VvbWV0cnkuCi0gICAgYXV0byYgbGluZVJ1
bnMgPSBsaW5lLnJ1bnMoKTsKKyAgICBhdXRvJiBydW5SZWN0TGlzdCA9IGxpbmVCb3guaW5saW5l
UmVjdExpc3QoKTsKKyAgICBhdXRvJiBsaW5lUnVucyA9IGxpbmVDb250ZW50LnJ1bnM7CiAgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVSdW5zLnNpemUoKTsgKytpbmRleCkg
ewogICAgICAgICBhdXRvJiBsaW5lUnVuID0gbGluZVJ1bnMuYXQoaW5kZXgpOwogICAgICAgICBh
dXRvIGxvZ2ljYWxSZWN0ID0gcnVuUmVjdExpc3RbaW5kZXhdOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0LmgKaW5kZXggOWQ0N2I1ODQyYTcyZGNmMjBhMDc2MDI4NDA1MTA1MjdiMWI0ODI4
ZC4uMzNlYzg4ZjY2Yjg4MTBlMDExMjUwOGM5MTAxMWY3MTUzMzhiNTBlYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBMYXlvdXQg
ewogCiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nU3RhdGU7CiBjbGFzcyBJbnZhbGlkYXRpb25TdGF0
ZTsKK2NsYXNzIExpbmVCb3g7CiAKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbGF5b3V0
IGxvZ2ljIGZvciBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0cy4KIC8vIGh0dHBzOi8vd3d3Lncz
Lm9yZy9UUi9DU1MyMi92aXN1cmVuLmh0bWwjaW5saW5lLWZvcm1hdHRpbmcKQEAgLTkzLDcgKzk0
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgeyBm
YWxzZSB9OwogICAgIH07CiAgICAgTGluZUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzRm9yTGluZShj
b25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2Fs
VG9wKTsKLSAgICB2b2lkIHNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXIm
LCBjb25zdCBWZWN0b3I8RGlzcGxheTo6SW5saW5lUmVjdCwgMTA+JiwgY29uc3QgTGluZUJveCYs
IGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCYsIGNvbnN0IEhvcml6b250YWxD
b25zdHJhaW50cyYpOworICAgIHZvaWQgc2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5l
TGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQmLCBjb25zdCBMaW5lQm94JiwgY29uc3QgSG9yaXpv
bnRhbENvbnN0cmFpbnRzJik7CiAgICAgdm9pZCBpbnZhbGlkYXRlRm9ybWF0dGluZ1N0YXRlKGNv
bnN0IEludmFsaWRhdGlvblN0YXRlJik7CiAKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nU3Rh
dGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1h
dHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQm94LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTIxNmY3ZGE3NjkxMGI4ODI4MjU0OWMyYzY3MWMyNGFk
NzMwNDdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKQEAgLTAsMCArMSwzNDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJveC5oIgorCisjaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K25hbWVzcGFjZSBMYXlvdXQgeworCitzdHJ1Y3QgSGFuZ2luZ0NvbnRlbnQgeworcHVibGljOgor
ICAgIHZvaWQgcmVzZXQoKTsKKworICAgIElubGluZUxheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3dpZHRoOyB9CisgICAgYm9vbCBpc0NvbmRpdGlvbmFsKCkgY29uc3QgeyByZXR1
cm4gbV9pc0NvbmRpdGlvbmFsOyB9CisKKyAgICB2b2lkIHNldElzQ29uZGl0aW9uYWwoKSB7IG1f
aXNDb25kaXRpb25hbCA9IHRydWU7IH0KKyAgICB2b2lkIGV4cGFuZChJbmxpbmVMYXlvdXRVbml0
IHdpZHRoKSB7IG1fd2lkdGggKz0gd2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1faXND
b25kaXRpb25hbCB7IGZhbHNlIH07CisgICAgSW5saW5lTGF5b3V0VW5pdCBtX3dpZHRoIHsgMCB9
OworfTsKKwordm9pZCBIYW5naW5nQ29udGVudDo6cmVzZXQoKQoreworICAgIG1faXNDb25kaXRp
b25hbCA9IGZhbHNlOworICAgIG1fd2lkdGggPSAgMDsKK30KKworTGluZUJveDo6TGluZUJveChj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIGNv
bnN0IERpc3BsYXk6OklubGluZVJlY3QmIGxpbmVSZWN0LCBjb25zdCBMaW5lQnVpbGRlcjo6UnVu
TGlzdCYgcnVucywgSXNMaW5lVmlzdWFsbHlFbXB0eSBpc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xh
c3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQorICAg
IDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKKyAg
ICAsIG1fcnVucyhydW5zKQorICAgICwgbV9yZWN0KGxpbmVSZWN0KQoreworI2lmIEFTU0VSVF9F
TkFCTEVECisgICAgbV9oYXNWYWxpZEFsaWdubWVudEJhc2VsaW5lID0gdHJ1ZTsKKyNlbmRpZgor
ICAgIGF1dG8mIHJvb3RTdHlsZSA9IGlubGluZUZvcm1hdHRpbmdDb250ZXh0LnJvb3QoKS5zdHls
ZSgpOworICAgIGF1dG8gaGFsZkxlYWRpbmdNZXRyaWNzID0gdGhpcy0+aGFsZkxlYWRpbmdNZXRy
aWNzKHJvb3RTdHlsZS5mb250TWV0cmljcygpLCBsaW5lUmVjdC5oZWlnaHQoKSk7CisKKyAgICBt
X2FsaWdubWVudEJhc2VsaW5lID0gaGFsZkxlYWRpbmdNZXRyaWNzLmFzY2VudDsKKyAgICBtX3Jv
b3RJbmxpbmVCb3ggPSBJbmxpbmVCb3ggeyBoYWxmTGVhZGluZ01ldHJpY3MgfTsKKworICAgIGF1
dG8gY29udGVudExvZ2ljYWxXaWR0aCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgIGZvciAo
YXV0byYgcnVuIDogbV9ydW5zKSB7CisgICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gWyZdKCkgLT4g
SW5saW5lTGF5b3V0VW5pdCB7CisgICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5z
dHlsZSgpLmZvbnRNZXRyaWNzKCk7CisgICAgICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1
bi5pc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWln
aHQoKTsKKworICAgICAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlz
Q29udGFpbmVyRW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdo
dCgpOworCisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7Cisg
ICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGlubGluZUZvcm1hdHRpbmdDb250ZXh0Lmdl
b21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVw
bGFjZWRCb3goKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpOworCisgICAgICAg
ICAgICAvLyBOb24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBs
b29rcyBhIGJpdCBtaXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQg
dGhlIGNvbnRlbnQgaGVpZ2h0IGhlcmUuCisgICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnku
bWFyZ2luQm94SGVpZ2h0KCk7CisgICAgICAgIH07CisgICAgICAgIG1fcnVuUmVjdExpc3QuYXBw
ZW5kKHsgMCwgcnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgoKSwgcnVuSGVpZ2h0
KCkgfSk7CisgICAgICAgIGNvbnRlbnRMb2dpY2FsV2lkdGggKz0gcnVuLmxvZ2ljYWxXaWR0aCgp
OworICAgIH0KKyAgICBhbGlnblZlcnRpY2FsbHkoKTsKKyAgICBhbGlnbkhvcml6b250YWxseShs
aW5lUmVjdC53aWR0aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCwgaXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50KTsKKworICAgIGlmIChpc0xpbmVWaXN1YWxseUVtcHR5ID09IElzTGluZVZpc3Vh
bGx5RW1wdHk6OlllcykgeworICAgICAgICBtX3JlY3Quc2V0SGVpZ2h0KHsgfSk7CisgICAgICAg
IG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNjZW50ID0geyB9OworICAgIH0KK30KKwordm9p
ZCBMaW5lQm94OjphbGlnbkhvcml6b250YWxseShJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdp
ZHRoLCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZSkKK3sKKyAgICBhdXRv
IGhhbmdpbmdDb250ZW50ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KGlzTGFzdExpbmUpOworICAg
IGF2YWlsYWJsZVdpZHRoICs9IGhhbmdpbmdDb250ZW50LndpZHRoKCk7CisgICAgaWYgKG1fcnVu
cy5pc0VtcHR5KCkgfHwgYXZhaWxhYmxlV2lkdGggPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byBjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPSBbJl0geworICAgICAgICBhdXRv
JiByb290U3R5bGUgPSBmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKS5zdHlsZSgpOworICAgICAg
ICBpZiAocm9vdFN0eWxlLnRleHRBbGlnbigpICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCisg
ICAgICAgICAgICByZXR1cm4gcm9vdFN0eWxlLnRleHRBbGlnbigpOworICAgICAgICAvLyBUZXh0
IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkgdGhlIHRl
eHQtanVzdGlmeSBwcm9wZXJ0eSwKKyAgICAgICAgLy8gaW4gb3JkZXIgdG8gZXhhY3RseSBmaWxs
IHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgdGV4dC1hbGlnbi1s
YXN0LAorICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhayBvciB0
aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFydC1hbGlnbmVkLgorICAgICAgICBpZiAobV9ydW5z
Lmxhc3QoKS5pc0xpbmVCcmVhaygpIHx8IGlzTGFzdExpbmUgPT0gSXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50OjpZZXMpCisgICAgICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6U3RhcnQ7
CisgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OworICAgIH0oKTsKKworICAg
IGlmIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlm
eSkgeworICAgICAgICBhdXRvIGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gSW5saW5lTGF5b3V0VW5p
dCB7IH07CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX3J1bnMuc2l6
ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBtX3J1blJlY3RMaXN0W2luZGV4XS5tb3ZlSG9y
aXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVk
RXhwYW5zaW9uICs9IG1fcnVuc1tpbmRleF0uZXhwYW5zaW9uKCkuaG9yaXpvbnRhbEV4cGFuc2lv
bjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBhZGp1c3Rt
ZW50Rm9yQWxpZ25tZW50ID0gWyZdIChhdXRvIGF2YWlsYWJsZVdpZHRoKSAtPiBPcHRpb25hbDxJ
bmxpbmVMYXlvdXRVbml0PiB7CisgICAgICAgIHN3aXRjaCAoY29tcHV0ZWRIb3Jpem9udGFsQWxp
Z25tZW50KSB7CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKKyAgICAgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OlN0YXJ0OgorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25N
b2RlOjpSaWdodDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKKyAg
ICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAgICAgICByZXR1cm4gc3RkOjpt
YXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGgsIDApOworICAgICAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OkNlbnRlcjoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRD
ZW50ZXI6CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZh
aWxhYmxlV2lkdGggLyAyLCAwKTsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9OworCisgICAgaWYgKGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JB
bGlnbm1lbnQoYXZhaWxhYmxlV2lkdGgpKSB7CisgICAgICAgIGZvciAoYXV0byYgcnVuUmVjdCA6
IG1fcnVuUmVjdExpc3QpCisgICAgICAgICAgICBydW5SZWN0Lm1vdmVIb3Jpem9udGFsbHkoKmFk
anVzdG1lbnQpOworICAgIH0KK30KKwordm9pZCBMaW5lQm94OjphbGlnblZlcnRpY2FsbHkoKQor
eworICAgIGFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpOworICAgIGF1dG8gc2Nyb2xsYWJs
ZU92ZXJmbG93UmVjdCA9IGxvZ2ljYWxSZWN0KCk7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAw
OyBpbmRleCA8IG1fcnVucy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byYgcnVuID0g
bV9ydW5zW2luZGV4XTsKKyAgICAgICAgYXV0byYgcnVuUmVjdCA9IG1fcnVuUmVjdExpc3RbaW5k
ZXhdOworICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAg
ICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOworICAgICAgICBhdXRvIHZl
cnRpY2FsQWxpZ24gPSBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CisgICAgICAg
IGF1dG8gYXNjZW50ID0gbGF5b3V0Qm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsK
KworICAgICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ24pIHsKKyAgICAgICAgY2FzZSBWZXJ0aWNh
bEFsaWduOjpCYXNlbGluZToKKyAgICAgICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSB8fCBy
dW4uaXNUZXh0KCkpCisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGFsaWdubWVudEJhc2Vs
aW5lKCkgLSBhc2NlbnQ7CisgICAgICAgICAgICBlbHNlIGlmIChydW4uaXNDb250YWluZXJTdGFy
dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29u
dGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICAgICAgbG9naWNh
bFRvcCA9IGFsaWdubWVudEJhc2VsaW5lKCkgLSBhc2NlbnQgLSBib3hHZW9tZXRyeS5ib3JkZXJU
b3AoKSAtIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOworICAgICAgICAgICAg
fSBlbHNlIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3Rh
Ymxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0
dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7CisgICAgICAgICAg
ICAgICAgLy8gU3BlYyBtYWtlcyB1cyBnZW5lcmF0ZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBp
ZiBpdCBpcyBlbXB0eS4KKyAgICAgICAgICAgICAgICBhdXRvIGlubGluZUJsb2NrQmFzZWxpbmUg
PSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3Qo
KS5iYXNlbGluZSgpOworICAgICAgICAgICAgICAgIC8vIFRoZSBpbmxpbmUtYmxvY2sncyBiYXNl
bGluZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gaXRzIGNvbnRlbnQgYm94LiBMZXQncyBjb252ZXJ0
IGl0IHJlbGF0aXZlIHRvIHRoZSBtYXJnaW4gYm94LgorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICBfX19fX19fX19fX19fX18gPC0gbWFyZ2luIGJveAorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgIHwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8ICBfX19fX19fX19fX18gIDwt
IGJvcmRlciBib3gKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8IHwKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICB8IHwgIF9fX19fX19fXyAgPC0gY29udGVudCBib3gKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICB8IHwgfCAgIF4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICB8IHwgfCAgIHwgIDwtIGJhc2VsaW5lIG9mZnNldAorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgIHwgfCB8ICAgfAorICAgICAgICAgICAgICAgIC8vICAgICB0ZXh0IHwgfCB8ICAgdiB0ZXh0
CisgICAgICAgICAgICAgICAgLy8gICAgIC0tLS0tfC18LXwtLS0tLS0tLS0tIDwtIGJhc2VsaW5l
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9
IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGJhc2VsaW5lRnJvbU1hcmdpbkJveCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJl
Zm9yZSgpICsgYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9w
KCkudmFsdWVPcigwKSArIGlubGluZUJsb2NrQmFzZWxpbmU7CisgICAgICAgICAgICAgICAgbG9n
aWNhbFRvcCA9IGFsaWdubWVudEJhc2VsaW5lKCkgLSBiYXNlbGluZUZyb21NYXJnaW5Cb3g7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0g
Zm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAg
ICAgICAgIGxvZ2ljYWxUb3AgPSBhbGlnbm1lbnRCYXNlbGluZSgpIC0gKGJveEdlb21ldHJ5LnZl
cnRpY2FsQm9yZGVyKCkgKyBib3hHZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBf
bHUpICsgcnVuUmVjdC5oZWlnaHQoKSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6VG9wOgorICAgICAgICAgICAgbG9naWNhbFRvcCA9IDBfbHU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206CisgICAgICAgICAgICBsb2dp
Y2FsVG9wID0gbG9naWNhbEJvdHRvbSgpIC0gcnVuUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1F
TlRFRF9ZRVQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJ1blJl
Y3Quc2V0VG9wKGxvZ2ljYWxUb3ApOworICAgICAgICAvLyBBZGp1c3Qgc2Nyb2xsYWJsZSBvdmVy
ZmxvdyBpZiB0aGUgcnVuIG92ZXJmbG93cyB0aGUgbGluZS4KKyAgICAgICAgc2Nyb2xsYWJsZU92
ZXJmbG93UmVjdC5leHBhbmRWZXJ0aWNhbGx5VG9Db250YWluKHJ1blJlY3QpOworICAgICAgICAv
LyBDb252ZXJ0IHJ1bnMgZnJvbSByZWxhdGl2ZSB0byB0aGUgbGluZSB0b3AvbGVmdCB0byB0aGUg
Zm9ybWF0dGluZyByb290J3MgYm9yZGVyIGJveCB0b3AvbGVmdC4KKyAgICAgICAgcnVuUmVjdC5t
b3ZlVmVydGljYWxseSh0aGlzLT5sb2dpY2FsVG9wKCkpOworICAgICAgICBydW5SZWN0Lm1vdmVI
b3Jpem9udGFsbHkobG9naWNhbExlZnQoKSk7CisgICAgfQorICAgIHNldFNjcm9sbGFibGVPdmVy
ZmxvdyhzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0KTsKK30KKwordm9pZCBMaW5lQm94OjphZGp1c3RC
YXNlbGluZUFuZExpbmVIZWlnaHQoKQoreworICAgIHVuc2lnbmVkIGlubGluZUNvbnRhaW5lck5l
c3RpbmdMZXZlbCA9IDA7CisgICAgYXV0byBoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrID0g
ZmFsc2U7CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICAgICAgYXV0byYgbGF5
b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOworICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJv
eC5zdHlsZSgpOworICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygp
KSB7CisgICAgICAgICAgICAvLyBGb3IgdGV4dCBjb250ZW50IHdlIHNldCB0aGUgYmFzZWxpbmUg
ZWl0aGVyIHRocm91Z2ggdGhlIGluaXRpYWwgc3RydXQgKHNldCBieSB0aGUgZm9ybWF0dGluZyBj
b250ZXh0IHJvb3QpIG9yCisgICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSBpbmxpbmUgY29udGFp
bmVyIChzdGFydCkuIE5vcm1hbGx5IHRoZSB0ZXh0IGNvbnRlbnQgaXRzZWxmIGRvZXMgbm90IHN0
cmV0Y2ggdGhlIGxpbmUuCisgICAgICAgICAgICBpZiAoaW5saW5lQ29udGFpbmVyTmVzdGluZ0xl
dmVsKSB7CisgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBhZGp1c3RlZCB0aGUgbGlu
ZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUgcGFyZW50IGlubGluZSBjb250YWluZXIuIAor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWspIHsKKyAgICAgICAgICAgICAgICAvLyBlLmcg
ZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3IgPGRpdj48c3Bhbj5uZXN0ZWQ8c3Bhbj5maXJzdCBkaXJl
Y3QgdGV4dDwvZGl2Pi4KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSB0cnVlOworICAgICAg
ICAgICAgLy8gV2UgYXJlIGluIHF1aXJrcyBtb2RlIHdoZXJlIHRoZSBmb250LW1ldHJpY3MgbWln
aHQgY2hhbmdlIHRoZSBsaW5lIGxpbmUgaGVpZ2h0L2Jhc2VsaW5lIGFuZCB0aGlzIGlzIHRoZSBm
aXJzdCB0ZXh0IGNvbnRlbnQgb24gdGhlIGxpbmUKKyAgICAgICAgICAgIC8vIG91dHNpZGUgb2Yg
YW4gaW5saW5lIGNvbnRhaW5lci4KKyAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBMaW5l
Qm94OjpoYWxmTGVhZGluZ01ldHJpY3Moc3R5bGUuZm9udE1ldHJpY3MoKSwgc3R5bGUuY29tcHV0
ZWRMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc2V0QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFk
aW5nLmFzY2VudCk7CisgICAgICAgICAgICBzZXREZXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5n
LmRlc2NlbnQpOworICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihoYWxmTGVh
ZGluZy5oZWlnaHQoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpKSB7CisgICAgICAgICAgICArK2lubGluZUNv
bnRhaW5lck5lc3RpbmdMZXZlbDsKKyAgICAgICAgICAgIC8vIElubGluZSBjb250YWluZXJzIHN0
cmV0Y2ggdGhlIGxpbmUgYnkgdGhlaXIgZm9udCBzaXplLgorICAgICAgICAgICAgLy8gVmVydGlj
YWwgbWFyZ2lucywgcGFkZGluZ3MgYW5kIGJvcmRlcnMgZG9uJ3QgY29udHJpYnV0ZSB0byB0aGUg
bGluZSBoZWlnaHQuCisgICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IHN0eWxlLmZvbnRN
ZXRyaWNzKCk7CisgICAgICAgICAgICBpZiAoc3R5bGUudmVydGljYWxBbGlnbigpID09IFZlcnRp
Y2FsQWxpZ246OkJhc2VsaW5lKSB7CisgICAgICAgICAgICAgICAgYXV0byBoYWxmTGVhZGluZyA9
IExpbmVCb3g6OmhhbGZMZWFkaW5nTWV0cmljcyhmb250TWV0cmljcywgc3R5bGUuY29tcHV0ZWRM
aW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIC8vIEJvdGggaGFsZmxlYWRpbmcgYXNjZW50
IGFuZCBkZXNjZW50IGNvdWxkIGJlIG5lZ2F0aXZlICh0YWxsIGZvbnQgdnMuIHNtYWxsIGxpbmUt
aGVpZ2h0IHZhbHVlKQorICAgICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5kZXNjZW50ID4g
MCkKKyAgICAgICAgICAgICAgICAgICAgc2V0RGVzY2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5k
ZXNjZW50KTsKKyAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuYXNjZW50ID4gMCkKKyAg
ICAgICAgICAgICAgICAgICAgc2V0QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmFzY2VudCk7
CisgICAgICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihhc2NlbnRBbmREZXNj
ZW50KCkuaGVpZ2h0KCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2V0
TG9naWNhbEhlaWdodElmR3JlYXRlcihmb250TWV0cmljcy5oZWlnaHQoKSk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydW4uaXNDb250YWluZXJFbmQo
KSkgeworICAgICAgICAgICAgLy8gVGhlIGxpbmUncyBiYXNlbGluZSBhbmQgaGVpZ2h0IGhhdmUg
YWxyZWFkeSBiZWVuIGFkanVzdGVkIGF0IENvbnRhaW5lclN0YXJ0LgorICAgICAgICAgICAgQVNT
RVJUKGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCk7CisgICAgICAgICAgICAtLWlubGluZUNv
bnRhaW5lck5lc3RpbmdMZXZlbDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHJ1bi5pc0JveCgpKSB7CisgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAg
ICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0
KCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoc3R5bGUudmVydGljYWxBbGlnbigpKSB7CisgICAg
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOiB7CisgICAgICAgICAgICAgICAg
aWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVz
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJbmxp
bmUtYmxvY2tzIHdpdGggaW5saW5lIGNvbnRlbnQgYWx3YXlzIGhhdmUgYmFzZWxpbmVzLgorICAg
ICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVz
dGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5
b3V0Qm94KSk7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFz
dCBvbmUgbGluZSAtZXZlbiBpZiBpdCBpcyBlbXB0eS4KKyAgICAgICAgICAgICAgICAgICAgYXV0
byYgbGFzdExpbmVCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+
bGluZUJveGVzLmxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBiZWZvcmVIZWlnaHQg
PSBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsg
Ym94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CisgICAgICAgICAgICAgICAgICAg
IHNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKGJlZm9yZUhlaWdodCArIGxhc3RMaW5lQm94
LmJhc2VsaW5lKCkpOworICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVh
dGVyKG1hcmdpbkJveEhlaWdodCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTm9uIGlubGluZS1ibG9jayBib3hlcyBzaXQgb24gdGhlIGJhc2VsaW5l
IChpbmNsdWRpbmcgdGhlaXIgYm90dG9tIG1hcmdpbikuCisgICAgICAgICAgICAgICAgICAgIHNl
dEFzY2VudElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAv
LyBJZ25vcmUgbmVnYXRpdmUgZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNjZW50IGlzIGEgdGhp
bmcpLgorICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdp
bkJveEhlaWdodCArIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KDAsIGFzY2VudEFuZERlc2Nl
bnQoKS5kZXNjZW50KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6Cisg
ICAgICAgICAgICAgICAgLy8gVG9wIGFsaWduIGNvbnRlbnQgbmV2ZXIgY2hhbmdlcyB0aGUgYmFz
ZWxpbmUsIGl0IG9ubHkgcHVzaGVzIHRoZSBib3R0b20gb2YgdGhlIGxpbmUgZnVydGhlciBkb3du
LgorICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVp
Z2h0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxB
bGlnbjo6Qm90dG9tOiB7CisgICAgICAgICAgICAgICAgLy8gQm90dG9tIGFsaWduZWQsIHRhbGwg
Y29udGVudCBwdXNoZXMgdGhlIGJhc2VsaW5lIGZ1cnRoZXIgZG93biBmcm9tIHRoZSBsaW5lIHRv
cC4KKyAgICAgICAgICAgICAgICBhdXRvIGxpbmVMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdo
dCgpOworICAgICAgICAgICAgICAgIGlmIChtYXJnaW5Cb3hIZWlnaHQgPiBsaW5lTG9naWNhbEhl
aWdodCkgeworICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1h
cmdpbkJveEhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIHNldEFsaWdubWVudEJhc2VsaW5l
SWZHcmVhdGVyKGFsaWdubWVudEJhc2VsaW5lKCkgKyAobWFyZ2luQm94SGVpZ2h0IC0gbGluZUxv
Z2ljYWxIZWlnaHQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
SGFuZ2luZ0NvbnRlbnQgTGluZUJveDo6Y29sbGVjdEhhbmdpbmdDb250ZW50KElzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpIGNvbnN0Cit7Cisg
ICAgYXV0byBoYW5naW5nQ29udGVudCA9IEhhbmdpbmdDb250ZW50IHsgfTsKKyAgICBpZiAoaXNM
YXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID09IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6
WWVzKQorICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7CisgICAgZm9y
IChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKKyAgICAgICAg
aWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7CisgICAg
ICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRlc3Bh
Y2UoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEg
cHJlc2VydmVkIG9yIGh1bmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaWYgKHJ1bi5zdHlsZSgpLndo
aXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIC8vIFRoaXMgaXMgZWl0aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkgaGFuZ2lu
ZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBoYW5naW5nQ29udGVudC5leHBhbmQocnVu
LnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gaGFuZ2luZ0Nv
bnRlbnQ7Cit9CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKaW5kZXggZmVjNDlmMmMyYTA2
MWM5ZDk1NzlkMGMwZDVmZDE2MTc5OWE1MjFmOC4uMGQ5ZjhjNzY3ZDZhZTU4NTAxYTIzNzQ5NDcy
ZjQ0MzYyNjEzZGQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaApAQCAtMjksMTAgKzI5LDE0IEBACiAKICNpbmNs
dWRlICJEaXNwbGF5Qm94LmgiCiAjaW5jbHVkZSAiRGlzcGxheUlubGluZVJlY3QuaCIKKyNpbmNs
dWRlICJJbmxpbmVMaW5lQnVpbGRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgTGF5b3V0IHsKIAorY2xhc3MgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CitzdHJ1Y3QgSGFu
Z2luZ0NvbnRlbnQ7CisKIHN0cnVjdCBBc2NlbnRBbmREZXNjZW50IHsKICAgICBJbmxpbmVMYXlv
dXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGFzY2VudCArIGRlc2NlbnQ7IH0KIApAQCAt
NTAsMjAgKzU0LDI1IEBAIHB1YmxpYzoKICAgICAgICAgQXNjZW50QW5kRGVzY2VudCBhc2NlbnRB
bmREZXNjZW50OwogICAgIH07CiAKLSAgICBMaW5lQm94KGNvbnN0IERpc3BsYXk6OklubGluZVJl
Y3QmLCBjb25zdCBBc2NlbnRBbmREZXNjZW50Jik7Ci0gICAgTGluZUJveCgpID0gZGVmYXVsdDsK
KyAgICBlbnVtIGNsYXNzIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCB7IE5vLCBZZXMgfTsK
KyAgICBlbnVtIGNsYXNzIElzTGluZVZpc3VhbGx5RW1wdHkgeyBObywgWWVzIH07CisgICAgTGlu
ZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IERpc3BsYXk6OklubGlu
ZVJlY3QmLCBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElzTGluZVZpc3VhbGx5RW1wdHks
IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CiAKLSAgICBjb25zdCBEaXNwbGF5OjpJbmxp
bmVSZWN0JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotICAgIGNvbnN0
IERpc3BsYXk6OklubGluZVJlY3QmIHNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsYWJsZU92ZXJmbG93OyB9CisgICAgdXNpbmcgSW5saW5lUnVuUmVjdExpc3QgPSBW
ZWN0b3I8RGlzcGxheTo6SW5saW5lUmVjdCwgMTA+OworICAgIGNvbnN0IElubGluZVJ1blJlY3RM
aXN0JiBpbmxpbmVSZWN0TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuUmVjdExpc3Q7IH0KIAog
ICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX3JlY3Qu
bGVmdCgpOyB9CiAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3QucmlnaHQoKTsgfQogICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdC50b3AoKTsgfQogICAgIElubGluZUxheW91dFVuaXQgbG9n
aWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5ib3R0b20oKTsgfQotCiAgICAgSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3JlY3Qud2lkdGgo
KTsgfQogICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdC5oZWlnaHQoKTsgfQogCisgICAgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgbG9n
aWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5OjpJ
bmxpbmVSZWN0JiBzY3JvbGxhYmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFi
bGVPdmVyZmxvdzsgfQorCisgICAgc3RhdGljIEFzY2VudEFuZERlc2NlbnQgaGFsZkxlYWRpbmdN
ZXRyaWNzKGNvbnN0IEZvbnRNZXRyaWNzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhl
aWdodCk7CisKICAgICAvLyBBbGlnbWVudCBiYXNlbGluZSBmcm9tIGxpbmUgbG9naWNhbCB0b3Au
CiAgICAgLy8KICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tICAgIGxpbmUgbG9naWNhbCB0b3Ag
ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKHRvcCBhbGlnbikKQEAgLTgwLDYyICs4OSwzOSBAQCBw
dWJsaWM6CiAgICAgLy8gICB2CiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLSAgICBsaW5lIGxv
Z2ljYWwgYm90dG9tICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgSW5saW5lTGF5b3V0VW5pdCBh
bGlnbm1lbnRCYXNlbGluZSgpIGNvbnN0OworCitwcml2YXRlOgogICAgIGNvbnN0IEFzY2VudEFu
ZERlc2NlbnQmIGFzY2VudEFuZERlc2NlbnQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVC
b3guYXNjZW50QW5kRGVzY2VudDsgfQogCiAgICAgdm9pZCBzZXRBbGlnbm1lbnRCYXNlbGluZUlm
R3JlYXRlcihJbmxpbmVMYXlvdXRVbml0KTsKICAgICB2b2lkIHNldEFzY2VudElmR3JlYXRlcihJ
bmxpbmVMYXlvdXRVbml0KTsKICAgICB2b2lkIHNldERlc2NlbnRJZkdyZWF0ZXIoSW5saW5lTGF5
b3V0VW5pdCk7Ci0KLSAgICB2b2lkIHJlc2V0QWxpZ25tZW50QmFzZWxpbmUoKTsKLQotICAgIHZv
aWQgc2V0TG9naWNhbEhlaWdodChJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpIHsgbV9y
ZWN0LnNldEhlaWdodChsb2dpY2FsSGVpZ2h0KTsgfQotCiAgICAgdm9pZCBzZXRMb2dpY2FsSGVp
Z2h0SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQpOwotICAgIHZvaWQgc2V0TG9naWNhbFdpZHRo
KElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKSB7IG1fcmVjdC5zZXRXaWR0aChsb2dpY2Fs
V2lkdGgpOyB9CiAKICAgICB2b2lkIHNldFNjcm9sbGFibGVPdmVyZmxvdyhjb25zdCBEaXNwbGF5
OjpJbmxpbmVSZWN0JiByZWN0KSB7IG1fc2Nyb2xsYWJsZU92ZXJmbG93ID0gcmVjdDsgfQogCi0g
ICAgdm9pZCBtb3ZlSG9yaXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgZGVsdGEpIHsgbV9yZWN0
Lm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOyB9Ci0KLSAgICB2b2lkIGV4cGFuZEhvcml6b250YWxs
eShJbmxpbmVMYXlvdXRVbml0IGRlbHRhKSB7IG1fcmVjdC5leHBhbmRIb3Jpem9udGFsbHkoZGVs
dGEpOyB9Ci0gICAgdm9pZCBzaHJpbmtIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCBkZWx0
YSkgeyBleHBhbmRIb3Jpem9udGFsbHkoLWRlbHRhKTsgfQorICAgIHZvaWQgYWxpZ25Ib3Jpem9u
dGFsbHkoSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgSXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50KTsKKyAgICB2b2lkIGFsaWduVmVydGljYWxseSgpOworICAgIHZvaWQgYWRqdXN0
QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7CiAKLSAgICB2b2lkIGV4cGFuZFZlcnRpY2FsbHkoSW5s
aW5lTGF5b3V0VW5pdCBkZWx0YSkgeyBtX3JlY3QuZXhwYW5kVmVydGljYWxseShkZWx0YSk7IH0K
LSAgICB2b2lkIHNocmlua1ZlcnRpY2FsbHkoSW5saW5lTGF5b3V0VW5pdCBkZWx0YSkgeyBleHBh
bmRWZXJ0aWNhbGx5KC1kZWx0YSk7IH0KKyAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFuZ2lu
Z0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KSBjb25zdDsKIAotICAgIC8vIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMi92aXN1cmVuLmh0bWwjaW5saW5lLWZvcm1hdHRpbmcK
LSAgICAvLyBMaW5lIGJveGVzIHRoYXQgY29udGFpbiBubyB0ZXh0LCBubyBwcmVzZXJ2ZWQgd2hp
dGUgc3BhY2UsIG5vIGlubGluZSBlbGVtZW50cyB3aXRoIG5vbi16ZXJvIG1hcmdpbnMsIHBhZGRp
bmcsIG9yIGJvcmRlcnMsCi0gICAgLy8gYW5kIG5vIG90aGVyIGluLWZsb3cgY29udGVudCAoc3Vj
aCBhcyBpbWFnZXMsIGlubGluZSBibG9ja3Mgb3IgaW5saW5lIHRhYmxlcyksIGFuZCBkbyBub3Qg
ZW5kIHdpdGggYSBwcmVzZXJ2ZWQgbmV3bGluZQotICAgIC8vIG11c3QgYmUgdHJlYXRlZCBhcyB6
ZXJvLWhlaWdodCBsaW5lIGJveGVzIGZvciB0aGUgcHVycG9zZXMgb2YgZGV0ZXJtaW5pbmcgdGhl
IHBvc2l0aW9ucyBvZiBhbnkgZWxlbWVudHMgaW5zaWRlIG9mIHRoZW0sCi0gICAgLy8gYW5kIG11
c3QgYmUgdHJlYXRlZCBhcyBub3QgZXhpc3RpbmcgZm9yIGFueSBvdGhlciBwdXJwb3NlLgotICAg
IC8vIE5vdGUgdGhhdCBpdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHZpc3VhbGx5IG5vbi1l
bXB0eSBsaW5lLiA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAwcHgiPnRoaXMgaXMgc3RpbGwgY29u
c2lkZXJlZCBub24tZW1wdHk8L3NwYW4+Ci0gICAgYm9vbCBpc0NvbnNpZGVyZWRFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNDb25zaWRlcmVkRW1wdHk7IH0KLSAgICB2b2lkIHNldElzQ29uc2lk
ZXJlZEVtcHR5KCkgeyBtX2lzQ29uc2lkZXJlZEVtcHR5ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0
SXNDb25zaWRlcmVkTm9uRW1wdHkoKSB7IG1faXNDb25zaWRlcmVkRW1wdHkgPSBmYWxzZTsgfQot
Ci0gICAgc3RhdGljIEFzY2VudEFuZERlc2NlbnQgaGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZv
bnRNZXRyaWNzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCk7CisgICAgY29u
c3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQorICAgIExheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUo
KTsgfQogCiBwcml2YXRlOgogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBtX2hhc1ZhbGlk
QWxpZ25tZW50QmFzZWxpbmUgeyBmYWxzZSB9OwogI2VuZGlmCisgICAgY29uc3QgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CisgICAgY29uc3QgTGlu
ZUJ1aWxkZXI6OlJ1bkxpc3QmIG1fcnVuczsKICAgICBEaXNwbGF5OjpJbmxpbmVSZWN0IG1fcmVj
dDsKICAgICBEaXNwbGF5OjpJbmxpbmVSZWN0IG1fc2Nyb2xsYWJsZU92ZXJmbG93OwogICAgIElu
bGluZUxheW91dFVuaXQgbV9hbGlnbm1lbnRCYXNlbGluZSB7IDAgfTsKLSAgICBib29sIG1faXND
b25zaWRlcmVkRW1wdHkgeyB0cnVlIH07CiAgICAgSW5saW5lQm94IG1fcm9vdElubGluZUJveDsK
KyAgICBJbmxpbmVSdW5SZWN0TGlzdCBtX3J1blJlY3RMaXN0OwogfTsKIAotaW5saW5lIExpbmVC
b3g6OkxpbmVCb3goY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgcmVjdCwgY29uc3QgQXNjZW50
QW5kRGVzY2VudCYgYXNjZW50QW5kRGVzY2VudCkKLSAgICA6IG1fcmVjdChyZWN0KQotICAgICwg
bV9hbGlnbm1lbnRCYXNlbGluZShhc2NlbnRBbmREZXNjZW50LmFzY2VudCkKLSAgICAsIG1fcm9v
dElubGluZUJveChhc2NlbnRBbmREZXNjZW50KQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
bV9oYXNWYWxpZEFsaWdubWVudEJhc2VsaW5lID0gdHJ1ZTsKLSNlbmRpZgotfQotCiBpbmxpbmUg
TGluZUJveDo6SW5saW5lQm94OjpJbmxpbmVCb3goY29uc3QgQXNjZW50QW5kRGVzY2VudCYgYXNj
ZW50QW5kRGVzY2VudCkKICAgICA6IGFzY2VudEFuZERlc2NlbnQoYXNjZW50QW5kRGVzY2VudCkK
IHsKQEAgLTE3NywxNiArMTYzLDYgQEAgaW5saW5lIElubGluZUxheW91dFVuaXQgTGluZUJveDo6
YWxpZ25tZW50QmFzZWxpbmUoKSBjb25zdAogICAgIHJldHVybiBtX2FsaWdubWVudEJhc2VsaW5l
OwogfQogCi1pbmxpbmUgdm9pZCBMaW5lQm94OjpyZXNldEFsaWdubWVudEJhc2VsaW5lKCkKLXsK
LSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1faGFzVmFsaWRBbGlnbm1lbnRCYXNlbGluZSA9IHRy
dWU7Ci0jZW5kaWYKLSAgICBtX2FsaWdubWVudEJhc2VsaW5lID0gMF9sdTsKLSAgICBtX3Jvb3RJ
bmxpbmVCb3guYXNjZW50QW5kRGVzY2VudC5kZXNjZW50ID0geyB9OwotICAgIG1fcm9vdElubGlu
ZUJveC5hc2NlbnRBbmREZXNjZW50LmFzY2VudCA9IHsgfTsKLX0KLQogaW5saW5lIEFzY2VudEFu
ZERlc2NlbnQgTGluZUJveDo6aGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRNZXRyaWNzJiBm
b250TWV0cmljcywgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCkKIHsKICAgICBh
dXRvIGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKaW5k
ZXggYTU2NzI2YTgyZDRiNzVhOGY5YzZjYzIyYjQ0NGE2OTFjZjlhMzQ3Yy4uMjVkZTA5N2VjY2M3
OGU4NmQ3MjgyYzBhNDY0ZTUzYmM4OGU2MDM5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCkBAIC0y
OSw3ICsyOSw2IEBACiAKICNpbmNsdWRlICJEaXNwbGF5UnVuLmgiCiAjaW5jbHVkZSAiSW5saW5l
SXRlbS5oIgotI2luY2x1ZGUgIklubGluZUxpbmVCb3guaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0
SXRlbS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Niw4ICs1NSw5IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNWaXN1YWxseUVtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9pc1Zpc3VhbGx5
RW1wdHk7IH0KIAotICAgIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX2xpbmVMb2dpY2FsV2lkdGggLSBjb250ZW50TG9naWNhbFdpZHRoKCk7IH0KKyAg
ICBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xp
bmVMb2dpY2FsV2lkdGg7IH0KICAgICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMb2dpY2FsV2lkdGg7IH0KKyAgICBJbmxpbmVM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbGluZUxvZ2ljYWxXaWR0
aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCgpOyB9CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IHRy
aW1tYWJsZVRyYWlsaW5nV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3RyaW1tYWJsZVRyYWlsaW5n
Q29udGVudC53aWR0aCgpOyB9CiAgICAgYm9vbCBpc1RyYWlsaW5nUnVuRnVsbHlUcmltbWFibGUo
KSBjb25zdCB7IHJldHVybiBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5pc1RyYWlsaW5nUnVu
RnVsbHlUcmltbWFibGUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCmluZGV4IGQ4MGYzMGMy
MWM2ODAyOGIzM2EzYTQ3OTRhOThhOWQ3OGUwYTRkODIuLmYwOTQ1ZWE5M2NiZjI4NTkwNTI5ZjE5
YzhjYTJiNTE5ZmExMDg1OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVk
ZSAiRGlzcGxheUJveC5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCiAj
aW5jbHVkZSAiTGF5b3V0Qm94LmgiCiAjaW5jbHVkZSAiVGV4dFV0aWwuaCIKQEAgLTMzNSw3ICsz
MzYsNyBAQCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6
OmNsb3NlKExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdAogICAgIGxpbmUuY2xvc2UoKTsKICAgICAv
LyBBZGp1c3QgaHlwaGVuYXRlZCBsaW5lIGNvdW50LgogICAgIG1fc3VjY2Vzc2l2ZUh5cGhlbmF0
ZWRMaW5lQ291bnQgPSBwYXJ0aWFsQ29udGVudCAmJiBwYXJ0aWFsQ29udGVudC0+dHJhaWxpbmdD
b250ZW50SGFzSHlwaGVuID8gbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCArIDEgOiAw
OwotICAgIHJldHVybiBMaW5lQ29udGVudCB7IHBhcnRpYWxDb250ZW50LCBsaW5lUmFuZ2UsIFdU
Rk1vdmUobV9mbG9hdHMpIH07CisgICAgcmV0dXJuIExpbmVDb250ZW50IHsgcGFydGlhbENvbnRl
bnQsIGxpbmVSYW5nZSwgV1RGTW92ZShtX2Zsb2F0cyksIGxpbmUucnVucygpIH07CiB9CiAKIHZv
aWQgTGluZUxheW91dENvbnRleHQ6Om5leHRDb250ZW50Rm9yTGluZShMaW5lQ2FuZGlkYXRlJiBs
aW5lQ2FuZGlkYXRlLCB1bnNpZ25lZCBjdXJyZW50SW5saW5lSXRlbUluZGV4LCBjb25zdCBJbmxp
bmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCBPcHRpb25hbDx1bnNpZ25lZD4gcGFydGlhbExlYWRp
bmdDb250ZW50TGVuZ3RoLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZUxpbmVXaWR0aCwgSW5s
aW5lTGF5b3V0VW5pdCBjdXJyZW50TG9naWNhbFJpZ2h0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmgKaW5k
ZXggMmQyZmU1ZDIzNDA2YTgzM2M4MjU3ZDk4NTJhMmM4M2Y1MjJlZmE2NS4uNDBhMzYzYTIzMzg1
ZjVmY2Q4NzM2ZjQyYjVlOWYxZDNmZWEzMTk3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oCkBAIC01
OCw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgfTsKICAgICAgICAgdXNpbmcgRmxvYXRMaXN0
ID0gVmVjdG9yPEZsb2F0PjsKICAgICAgICAgRmxvYXRMaXN0IGZsb2F0czsKKyAgICAgICAgY29u
c3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnM7CiAgICAgfTsKICAgICBMaW5lQ29udGVudCBs
YXlvdXRJbmxpbmVDb250ZW50KExpbmVCdWlsZGVyJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiwg
T3B0aW9uYWw8dW5zaWduZWQ+IHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407449</attachid>
            <date>2020-08-27 21:19:09 -0700</date>
            <delta_ts>2020-08-28 04:30:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215117-20200827211908.patch</filename>
            <type>text/plain</type>
            <size>54943</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjY2M2YxN2YzNTNmYTdj
OTM5ZjBhOWNmMzllNjQxMDYxMGEyZjI1Yi4uYzEyNzE4MmM1Njg4Y2E2NGZlNTNmMmVlMTY4YjVi
YWQ0ODkwMzM2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYwIEBACiAyMDIwLTA4LTI3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGlu
bGluZSBhbGlnbm1lbnQgY29kZSB0byBMaW5lQm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUxMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBMaW5lQm94IGlzIHJlc3BvbnNpYmxlIGZvciBhbGlnbmlu
ZyB0aGUgcnVucyBib3RoIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseSAoTGluZUNvbnRlbnRB
bGlnbmVyIC0+IExpbmVCb3gpLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJv
eGVzRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50Ojp3
aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkhhbmdpbmdD
b250ZW50Ojppc0NvbmRpdGlvbmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SGFuZ2luZ0NvbnRlbnQ6OnNldElzQ29uZGl0aW9uYWwpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpIYW5naW5nQ29udGVudDo6ZXhwYW5kKTogRGVsZXRlZC4K
KyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkhhbmdpbmdD
b250ZW50OjpyZXNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVD
b250ZW50QWxpZ25lcjo6aW5saW5lUmVjdExpc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmZvcm1hdHRpbmdDb250ZXh0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGln
bmVyOjpsYXlvdXRTdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRBbGlnbmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6b250
YWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxp
Z25lcjo6YWxpZ25WZXJ0aWNhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmNvbGxl
Y3RIYW5naW5nQ29udGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OmlubGluZVJlY3RMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJveDo6bG9naWNhbEJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCb3g6OmxvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJveDo6c2Nyb2xsYWJsZU92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJveDo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpsYXlvdXRTdGF0ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnNldExvZ2ljYWxIZWlnaHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpzZXRMb2dpY2FsV2lkdGgpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojptb3ZlSG9yaXpvbnRhbGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6ZXhwYW5kSG9yaXpv
bnRhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2hy
aW5rSG9yaXpvbnRhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJveDo6ZXhwYW5kVmVydGljYWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OnNocmlua1ZlcnRpY2FsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQm94Ojppc0NvbnNpZGVyZWRFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnNldElzQ29uc2lkZXJlZEVtcHR5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0SXNDb25zaWRl
cmVkTm9uRW1wdHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94
OjpMaW5lQm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6
cmVzZXRBbGlnbm1lbnRCYXNlbGluZSk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OmxpbmVMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YXZhaWxhYmxlV2lkdGggY29uc3QpOgorICAgICAgICAq
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dENvbnRleHQ6OmNsb3NlKToKKyAgICAgICAgKiBs
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oOgorCisyMDIwLTA4LTI2
ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKICAgICAgICAgW0xGQ11bSUZDXSBM
aW5lQnVpbGRlcjpSdW4gc2hvdWxkIG5vdCBoYXZlIHZlcnRpY2FsIGdlb21ldHJ5CiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwNjgKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCAxZmY3ZTFkMjgxMmU4ZTk5NWEzMjQ5OTcxNmM1Yjc5YmU5YTBmMjJhLi5hNzlk
ZWNkMGI4NDE5ZDZhYmY3NzE3ZmZhNTZjZjA1ZGVlZDRkY2IxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAt
MTQzNiw2ICsxNDM2LDcgQEAgbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0UXVpcmtzLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5jcHAK
K2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwCiBsYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4
dEl0ZW0uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggMDFmOTJhZDliZmEwOGZmNmI4MWFiNDlkMWE1Mjc2ZmIwNmY2ODcxMS4u
NTg4Yzc2MWRiMTczZGFhYWI0NDVkNGQ5YzU5ZmVkZWRhOTYxZTcyOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTU2MCw2ICs5
NTYwLDcgQEAKIAkJNkY1QjdFQUEyMzAwQTc5RTAwNjdEOUMzIC8qIFRhYmxlR3JpZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUYWJsZUdyaWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2RjYzODNGNDI0MjdBRjQ5MDBEQUJBNTMgLyogTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdC
bG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRJbml0aWFsQ29u
dGFpbmluZ0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGNjYzOEQ0MjQ5
RTI2OEIwMDE5MjVGQyAvKiBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRl
eHRRdWlya3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjY5QTc5OTI0RDZG
QUI4MDBFNkI4NUQgLyogSW5saW5lTGluZUJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxp
bmVMaW5lQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3MzkxOEMyMTA2
Q0VERDAwNkFGMjYyIC8qIExheW91dFVuaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFVuaXRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGNzc4Njg1MjM0OTFBQzYwMDREOTYz
NiAvKiBEaXNwbGF5UGFpbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5UGFpbnRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGNzc4Njg3MjM0OTFBRDcwMDRE
OTYzNiAvKiBEaXNwbGF5UGFpbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaXNwbGF5UGFpbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc0MjAs
NiArMTc0MjEsNyBAQAogCQkJCTExNUNGQTdDMjA4QjhFMTAwMDFFNjk5MSAvKiBJbmxpbmVGb3Jt
YXR0aW5nU3RhdGUuaCAqLywKIAkJCQk2RjdCOENFQzIzNjI2RTY2MDBDOUZGMTUgLyogSW5saW5l
SXRlbS5jcHAgKi8sCiAJCQkJNkZFN0NGQTAyMTc3RUVGMTAwNUIxNTczIC8qIElubGluZUl0ZW0u
aCAqLywKKwkJCQk2RjY5QTc5OTI0RDZGQUI4MDBFNkI4NUQgLyogSW5saW5lTGluZUJveC5jcHAg
Ki8sCiAJCQkJNkZCMjQwMDMyM0RGRjEyNzAwNzk2NDU4IC8qIElubGluZUxpbmVCb3guaCAqLywK
IAkJCQk2RkUxOTgxMzIxNzgzOTdCMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuY3BwICov
LAogCQkJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJlYWtlci5oICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDE0MWE5NDUzMWExMDhi
YTk0MmM0ZjIxM2U0ZDExMTI3Y2QwN2Y3YTcuLjc1MmY3MGY2NzRmNDlhYzljOTFiNTM2ZGE1Mjlh
MDFkMjliODI3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUg
IklubGluZUxpbmVCb3guaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0SXRlbS5oIgogI2luY2x1ZGUg
IkludmFsaWRhdGlvblN0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCkBAIC03NiwzMDEg
Kzc3LDYgQEAgc3RhdGljIGlubGluZSBjb25zdCBCb3gqIG5leHRJbmxpbmVMZXZlbEJveFRvTGF5
b3V0KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1zdHJ1Y3QgSGFuZ2luZ0NvbnRlbnQgewotcHVibGljOgotICAgIHZvaWQgcmVzZXQoKTsKLQot
ICAgIElubGluZUxheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0g
ICAgYm9vbCBpc0NvbmRpdGlvbmFsKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbmRpdGlvbmFsOyB9
Ci0KLSAgICB2b2lkIHNldElzQ29uZGl0aW9uYWwoKSB7IG1faXNDb25kaXRpb25hbCA9IHRydWU7
IH0KLSAgICB2b2lkIGV4cGFuZChJbmxpbmVMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGggKz0g
d2lkdGg7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIG1faXNDb25kaXRpb25hbCB7IGZhbHNlIH07
Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBtX3dpZHRoIHsgMCB9OwotfTsKLQotdm9pZCBIYW5naW5n
Q29udGVudDo6cmVzZXQoKQotewotICAgIG1faXNDb25kaXRpb25hbCA9IGZhbHNlOwotICAgIG1f
d2lkdGggPSAgMDsKLX0KLQotY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyIHsKLXB1YmxpYzoKLSAg
ICBMaW5lQ29udGVudEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBMaW5l
Qm94JiwgY29uc3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmLCBJbmxpbmVMYXlvdXRVbml0IGF2YWls
YWJsZVdpZHRoKTsKLQotICAgIGVudW0gY2xhc3MgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
IHsgTm8sIFllcyB9OwotICAgIHZvaWQgYWxpZ25Ib3Jpem9udGFsbHkoVGV4dEFsaWduTW9kZSwg
SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKLSAgICB2b2lkIGFsaWduVmVydGljYWxseSgp
OwotICAgIHZvaWQgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7Ci0KLSAgICB1c2luZyBJ
bmxpbmVSdW5SZWN0TGlzdCA9IFZlY3RvcjxEaXNwbGF5OjpJbmxpbmVSZWN0LCAxMD47Ci0gICAg
Y29uc3QgSW5saW5lUnVuUmVjdExpc3QmIGlubGluZVJlY3RMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9ydW5SZWN0TGlzdDsgfQotCi1wcml2YXRlOgotICAgIEhhbmdpbmdDb250ZW50IGNvbGxlY3RI
YW5naW5nQ29udGVudChJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpIGNvbnN0OwotCi0gICAg
Y29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQotICAgIExheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3Rh
dGUoKTsgfQotCi0gICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIG1faW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ7Ci0gICAgTGluZUJveCYgbV9saW5lQm94OwotICAgIGNvbnN0IExpbmVC
dWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7Ci0gICAgSW5saW5lUnVuUmVjdExpc3QgbV9ydW5SZWN0
TGlzdDsKLSAgICBJbmxpbmVMYXlvdXRVbml0IG1fYXZhaWxhYmxlV2lkdGg7Ci19OwotCi1MaW5l
Q29udGVudEFsaWduZXI6OkxpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0
IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdp
ZHRoKQotICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCkKLSAgICAsIG1fbGluZUJveChsaW5lQm94KQotICAgICwgbV9ydW5zKHJ1bnMpCi0gICAg
LCBtX2F2YWlsYWJsZVdpZHRoKGF2YWlsYWJsZVdpZHRoKQotewotICAgIGZvciAoYXV0byYgcnVu
IDogbV9ydW5zKSB7Ci0gICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gWyZdKCkgLT4gSW5saW5lTGF5
b3V0VW5pdCB7Ci0gICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZv
bnRNZXRyaWNzKCk7Ci0gICAgICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVC
cmVhaygpKQotICAgICAgICAgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKLQot
ICAgICAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVy
RW5kKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwotCi0g
ICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgICAgICAg
ICBhdXRvJiBib3hHZW9tZXRyeSA9IGlubGluZUZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9y
Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3go
KSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYm94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpOwotCi0gICAgICAgICAgICAvLyBO
b24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJp
dCBtaXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRl
bnQgaGVpZ2h0IGhlcmUuCi0gICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94
SGVpZ2h0KCk7Ci0gICAgICAgIH07Ci0gICAgICAgIG1fcnVuUmVjdExpc3QuYXBwZW5kKHsgMCwg
cnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgoKSwgcnVuSGVpZ2h0KCkgfSk7Ci0g
ICAgfQotfQotCi12b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9udGFsbHkoVGV4
dEFsaWduTW9kZSBob3Jpem9udGFsQWxpZ25tZW50LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRl
bnQgaXNMYXN0TGluZSkKLXsKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gY29sbGVjdEhhbmdp
bmdDb250ZW50KGlzTGFzdExpbmUpOwotICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBtX2F2YWls
YWJsZVdpZHRoICsgaGFuZ2luZ0NvbnRlbnQud2lkdGgoKTsKLSAgICBpZiAobV9ydW5zLmlzRW1w
dHkoKSB8fCBhdmFpbGFibGVXaWR0aCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
aG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KSB7Ci0gICAgICAg
IGF1dG8gYWNjdW11bGF0ZWRFeHBhbnNpb24gPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fcnVucy5zaXplKCk7ICsraW5kZXgp
IHsKLSAgICAgICAgICAgIG1fcnVuUmVjdExpc3RbaW5kZXhdLm1vdmVIb3Jpem9udGFsbHkoYWNj
dW11bGF0ZWRFeHBhbnNpb24pOwotCi0gICAgICAgICAgICBhdXRvIGhvcml6b250YWxFeHBhbnNp
b24gPSBtX3J1bnNbaW5kZXhdLmV4cGFuc2lvbigpLmhvcml6b250YWxFeHBhbnNpb247Ci0gICAg
ICAgICAgICBtX3J1blJlY3RMaXN0W2luZGV4XS5leHBhbmRIb3Jpem9udGFsbHkoaG9yaXpvbnRh
bEV4cGFuc2lvbik7Ci0gICAgICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBob3Jpem9u
dGFsRXhwYW5zaW9uOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBh
dXRvIGFkanVzdG1lbnRGb3JBbGlnbm1lbnQgPSBbJl0gKGF1dG8gYXZhaWxhYmxlV2lkdGgpIC0+
IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsKLSAgICAgICAgc3dpdGNoIChob3Jpem9udGFs
QWxpZ25tZW50KSB7Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICAgICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OlN0YXJ0OgotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpSaWdodDoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoK
LSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgICAgICByZXR1cm4gc3Rk
OjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGgsIDApOwotICAgICAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJL
aXRDZW50ZXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4o
YXZhaWxhYmxlV2lkdGggLyAyLCAwKTsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0
aWZ5OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICB9OwotCi0gICAgaWYgKGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRG
b3JBbGlnbm1lbnQoYXZhaWxhYmxlV2lkdGgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBsaW5lIGJv
eCBzaG91bGQgbm90IG5lZWQgdG8gYmUgbW92ZWQsIG9ubHkgdGhlIHJ1bnMuCi0gICAgICAgIG1f
bGluZUJveC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICAgICAgZm9yIChhdXRv
JiBydW5SZWN0IDogbV9ydW5SZWN0TGlzdCkKLSAgICAgICAgICAgIHJ1blJlY3QubW92ZUhvcml6
b250YWxseSgqYWRqdXN0bWVudCk7Ci0gICAgfQotfQotCi12b2lkIExpbmVDb250ZW50QWxpZ25l
cjo6YWxpZ25WZXJ0aWNhbGx5KCkKLXsKLSAgICBhdXRvIHNjcm9sbGFibGVPdmVyZmxvd1JlY3Qg
PSBtX2xpbmVCb3gubG9naWNhbFJlY3QoKTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgbV9ydW5zLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvJiBydW4gPSBtX3J1
bnNbaW5kZXhdOwotICAgICAgICBhdXRvJiBydW5SZWN0ID0gbV9ydW5SZWN0TGlzdFtpbmRleF07
Ci0gICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAg
ICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgICAgIGF1dG8gdmVydGlj
YWxBbGlnbiA9IGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsKLSAgICAgICAgYXV0
byBhc2NlbnQgPSBsYXlvdXRCb3guc3R5bGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpOwotCi0g
ICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbikgewotICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246OkJhc2VsaW5lOgotICAgICAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpIHx8IHJ1bi5p
c1RleHQoKSkKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVu
dEJhc2VsaW5lKCkgLSBhc2NlbnQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChydW4uaXNDb250YWlu
ZXJTdGFydCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0
aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAg
bG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50IC0gYm94
R2VvbWV0cnkuYm9yZGVyVG9wKCkgLSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigw
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSAm
JiBsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxp
c2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCkpOwotICAgICAgICAgICAgICAgIC8vIFNwZWMgbWFrZXMgdXMgZ2VuZXJhdGUgYXQgbGVhc3Qg
b25lIGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHkuCi0gICAgICAgICAgICAgICAgYXV0byBpbmxp
bmVCbG9ja0Jhc2VsaW5lID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCkt
PmxpbmVCb3hlcy5sYXN0KCkuYmFzZWxpbmUoKTsKLSAgICAgICAgICAgICAgICAvLyBUaGUgaW5s
aW5lLWJsb2NrJ3MgYmFzZWxpbmUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIGl0cyBjb250ZW50IGJv
eC4gTGV0J3MgY29udmVydCBpdCByZWxhdGl2ZSB0byB0aGUgbWFyZ2luIGJveC4KLSAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgX19fX19fX19fX19fX19fIDwtIG1hcmdpbiBib3gKLSAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCAg
X19fX19fX19fX19fICA8LSBib3JkZXIgYm94Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAg
fCB8Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8ICBfX19fX19fX18gIDwtIGNvbnRl
bnQgYm94Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8IHwgICBeCi0gICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgfCB8IHwgICB8ICA8LSBiYXNlbGluZSBvZmZzZXQKLSAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICB8IHwgfCAgIHwKLSAgICAgICAgICAgICAgICAvLyAgICAgdGV4
dCB8IHwgfCAgIHYgdGV4dAotICAgICAgICAgICAgICAgIC8vICAgICAtLS0tLXwtfC18LS0tLS0t
LS0tLSA8LSBiYXNlbGluZQotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgYXV0
byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91
dEJveCk7Ci0gICAgICAgICAgICAgICAgYXV0byBiYXNlbGluZUZyb21NYXJnaW5Cb3ggPSBib3hH
ZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2Vv
bWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2VsaW5lOwotICAg
ICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAt
IGJhc2VsaW5lRnJvbU1hcmdpbkJveDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9y
Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5h
bGlnbm1lbnRCYXNlbGluZSgpIC0gKGJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib3hH
ZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUpICsgcnVuUmVjdC5oZWlnaHQo
KSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgotICAgICAgICAgICAg
bG9naWNhbFRvcCA9IDBfbHU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWZXJ0
aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94Lmxv
Z2ljYWxCb3R0b20oKSAtIHJ1blJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBydW5SZWN0LnNldFRvcChs
b2dpY2FsVG9wKTsKLSAgICAgICAgLy8gQWRqdXN0IHNjcm9sbGFibGUgb3ZlcmZsb3cgaWYgdGhl
IHJ1biBvdmVyZmxvd3MgdGhlIGxpbmUuCi0gICAgICAgIHNjcm9sbGFibGVPdmVyZmxvd1JlY3Qu
ZXhwYW5kVmVydGljYWxseVRvQ29udGFpbihydW5SZWN0KTsKLSAgICAgICAgLy8gQ29udmVydCBy
dW5zIGZyb20gcmVsYXRpdmUgdG8gdGhlIGxpbmUgdG9wL2xlZnQgdG8gdGhlIGZvcm1hdHRpbmcg
cm9vdCdzIGJvcmRlciBib3ggdG9wL2xlZnQuCi0gICAgICAgIHJ1blJlY3QubW92ZVZlcnRpY2Fs
bHkobV9saW5lQm94LmxvZ2ljYWxUb3AoKSk7Ci0gICAgICAgIHJ1blJlY3QubW92ZUhvcml6b250
YWxseShtX2xpbmVCb3gubG9naWNhbExlZnQoKSk7Ci0gICAgfQotICAgIG1fbGluZUJveC5zZXRT
Y3JvbGxhYmxlT3ZlcmZsb3coc2Nyb2xsYWJsZU92ZXJmbG93UmVjdCk7Ci19Ci0KLXZvaWQgTGlu
ZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKQotewotICAgIHVu
c2lnbmVkIGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgYXV0byBoYXNTZWVu
RGlyZWN0VGV4dE9yTGluZUJyZWFrID0gZmFsc2U7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1
bnMpIHsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgICAg
ICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgICAgICBpZiAocnVuLmlzVGV4
dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBpZiAoaW5saW5lQ29udGFp
bmVyTmVzdGluZ0xldmVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBhZGp1
c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUgcGFyZW50IGlubGluZSBj
b250YWluZXIuIAotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWspIHsKLSAgICAgICAgICAg
ICAgICAvLyBlLmcgZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3IgPGRpdj48c3Bhbj5uZXN0ZWQ8c3Bh
bj5maXJzdCBkaXJlY3QgdGV4dDwvZGl2Pi4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSB0
cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocnVu
LmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgKytpbmxpbmVDb250YWluZXJOZXN0
aW5nTGV2ZWw7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBzdHJldGNoIHRoZSBs
aW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KLSAgICAgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMs
IHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVpZ2h0
LgotICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygpOwot
ICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpC
YXNlbGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBMaW5lQm94Ojpo
YWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgp
KTsKLSAgICAgICAgICAgICAgICAvLyBCb3RoIGhhbGZsZWFkaW5nIGFzY2VudCBhbmQgZGVzY2Vu
dCBjb3VsZCBiZSBuZWdhdGl2ZSAodGFsbCBmb250IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1
ZSkKLSAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuZGVzY2VudCA+IDApCi0gICAgICAg
ICAgICAgICAgICAgIG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmRl
c2NlbnQpOwotICAgICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5hc2NlbnQgPiAwKQotICAg
ICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5n
LmFzY2VudCk7Ci0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIobV9saW5lQm94LmFzY2VudEFuZERlc2NlbnQoKS5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihmb250TWV0cmljcy5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChydW4uaXNDb250YWluZXJFbmQoKSkgewotICAgICAgICAgICAg
Ly8gVGhlIGxpbmUncyBiYXNlbGluZSBhbmQgaGVpZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGFkanVz
dGVkIGF0IENvbnRhaW5lclN0YXJ0LgotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNvbnRhaW5l
ck5lc3RpbmdMZXZlbCk7Ci0gICAgICAgICAgICAtLWlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZl
bDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJ1bi5p
c0JveCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2lu
Qm94SGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAoc3R5bGUudmVydGljYWxBbGlnbigpKSB7Ci0gICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OkJhc2VsaW5lOiB7Ci0gICAgICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0lu
bGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJbmxpbmUtYmxvY2tzIHdpdGggaW5s
aW5lIGNvbnRlbnQgYWx3YXlzIGhhdmUgYmFzZWxpbmVzLgotICAgICAgICAgICAgICAgICAgICBh
dXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9y
bWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBp
ZiBpdCBpcyBlbXB0eS4KLSAgICAgICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmVCb3ggPSBm
b3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKTsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBiZWZvcmVIZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJn
aW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGlu
Z1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBbGln
bm1lbnRCYXNlbGluZUlmR3JlYXRlcihiZWZvcmVIZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGlu
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAvLyBOb24gaW5saW5lLWJsb2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxp
bmUgKGluY2x1ZGluZyB0aGVpciBib3R0b20gbWFyZ2luKS4KLSAgICAgICAgICAgICAgICAgICAg
bV9saW5lQm94LnNldEFzY2VudElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAg
ICAgICAgICAgICAvLyBJZ25vcmUgbmVnYXRpdmUgZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNj
ZW50IGlzIGEgdGhpbmcpLgotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNh
bEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRV
bml0PigwLCBtX2xpbmVCb3guYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKLSAgICAgICAgICAgICAgICAvLyBUb3AgYWxp
Z24gY29udGVudCBuZXZlciBjaGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhl
IGJvdHRvbSBvZiB0aGUgbGluZSBmdXJ0aGVyIGRvd24uCi0gICAgICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7
Ci0gICAgICAgICAgICAgICAgLy8gQm90dG9tIGFsaWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMg
dGhlIGJhc2VsaW5lIGZ1cnRoZXIgZG93biBmcm9tIHRoZSBsaW5lIHRvcC4KLSAgICAgICAgICAg
ICAgICBhdXRvIGxpbmVMb2dpY2FsSGVpZ2h0ID0gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsK
LSAgICAgICAgICAgICAgICBpZiAobWFyZ2luQm94SGVpZ2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0
ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFs
aWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpICsg
KG1hcmdpbkJveEhlaWdodCAtIGxpbmVMb2dpY2FsSGVpZ2h0KSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUhhbmdpbmdDb250ZW50IExpbmVDb250ZW50QWxpZ25l
cjo6Y29sbGVjdEhhbmdpbmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xh
c3RMaW5lV2l0aElubGluZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgYXV0byBoYW5naW5nQ29udGVu
dCA9IEhhbmdpbmdDb250ZW50IHsgfTsKLSAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50ID09IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQotICAgICAgICBoYW5naW5n
Q29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1h
a2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKLSAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0
YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBoYW5naW5nQ29udGVu
dC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJlc2VydmVkIG9yIGh1bmcgd2hp
dGVzcGFjZS4KLSAgICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNw
YWNlOjpQcmVXcmFwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIFRoaXMgaXMgZWl0
aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFpbGluZyB3aGl0ZXNwYWNl
LgotICAgICAgICBoYW5naW5nQ29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdp
ZHRoKCkpOwotICAgIH0KLSAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7Ci19Ci0KIHZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3Rh
dGUmIGludmFsaWRhdGlvblN0YXRlLCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQm
IGNvbnN0cmFpbnRzKQogewogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExh
eW91dCwgc3RyZWFtIDw8ICJbU3RhcnRdIC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgLT4g
Zm9ybWF0dGluZyByb290KCIgPDwgJnJvb3QoKSA8PCAiKSIpOwpAQCAtNDQ2LDU0ICsxNTIsMjQg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYg
aW5saW5lSXRlbXMsIExpbmVMYXlvdXRDb24KICAgICAgICAgYXV0byBwYXJ0aWFsTGVhZGluZ0Nv
bnRlbnRMZW5ndGggPSBwcmV2aW91c0xpbmUgPyBwcmV2aW91c0xpbmUtPm92ZXJmbG93Q29udGVu
dExlbmd0aCA6IFdURjo6bnVsbG9wdDsKICAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVM
YXlvdXRDb250ZXh0LmxheW91dElubGluZUNvbnRlbnQobGluZSwgbmVlZHNMYXlvdXRSYW5nZSwg
cGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKICAgICAgICAgYXV0byBsaW5lQ29udGVudFJh
bmdlID0gbGluZUNvbnRlbnQuaW5saW5lSXRlbVJhbmdlOwotCi0gICAgICAgIC8vIEZJWE1FOiBU
aGlzIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBldmVudHVhbGx5IGdldCBtZXJnZWQgdG8gTGluZUJv
eC4KICAgICAgICAgYXV0byBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPSBbJl0gewotICAg
ICAgICAgICAgaWYgKGxpbmVDb250ZW50UmFuZ2UuZW5kID09IG5lZWRzTGF5b3V0UmFuZ2UuZW5k
KQotICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQ29udGVudEFsaWduZXI6OklzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudDo6WWVzOwogICAgICAgICAgICAgaWYgKGxpbmVDb250ZW50LnBhcnRp
YWxDb250ZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQ29udGVudEFsaWduZXI6Oklz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaWYgKGxpbmVDb250ZW50UmFuZ2UuZW5kID09IG5lZWRzTGF5b3V0
UmFuZ2UuZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgLy8g
T21pdCBmbG9hdHMgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIGxhc3QgbGluZSB3aXRoIGlubGluZSBj
b250ZW50LgogICAgICAgICAgICAgZm9yIChhdXRvIGkgPSBuZWVkc0xheW91dFJhbmdlLmVuZDsg
aS0tOykgewogICAgICAgICAgICAgICAgIGlmICghaW5saW5lSXRlbXNbaV0uaXNGbG9hdCgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSA9PSBsaW5lQ29udGVudFJhbmdlLmVuZCAtIDEg
PyBMaW5lQ29udGVudEFsaWduZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzIDog
TGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaSA9PSBsaW5lQ29udGVudFJhbmdlLmVuZCAtIDE7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25l
IG5vbi1mbG9hdCBpdGVtLgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQ6Ok5vOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9KCk7Ci0gICAg
ICAgIGxpbmUuY2xvc2UoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID09IExpbmVDb250ZW50
QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpOwotCi0gICAgICAgIGF1
dG8gbGluZUJveCA9IExpbmVCb3ggeyBEaXNwbGF5OjpJbmxpbmVSZWN0IHsgbGluZUNvbnN0cmFp
bnRzLmxvZ2ljYWxUb3BMZWZ0LCBsaW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgbGluZUNvbnN0
cmFpbnRzLmxpbmVIZWlnaHQgfSwgTGluZUJveDo6aGFsZkxlYWRpbmdNZXRyaWNzKHJvb3QoKS5z
dHlsZSgpLmZvbnRNZXRyaWNzKCksIGxpbmVDb25zdHJhaW50cy5saW5lSGVpZ2h0KSB9OwotICAg
ICAgICBhdXRvIGNvbnRlbnRBbGlnbmVyID0gTGluZUNvbnRlbnRBbGlnbmVyIHsgKnRoaXMsIGxp
bmVCb3gsIGxpbmUucnVucygpLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgfTsKLSAgICAgICAgYXV0
byBhbGlnbkxpbmVDb250ZW50ID0gWyZdIHsKLSAgICAgICAgICAgIGNvbnRlbnRBbGlnbmVyLmFk
anVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpOwotICAgICAgICAgICAgaWYgKGxpbmUuaXNWaXN1
YWxseUVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBsaW5lQm94LnJlc2V0QWxpZ25tZW50QmFz
ZWxpbmUoKTsKLSAgICAgICAgICAgICAgICBsaW5lQm94LnNldExvZ2ljYWxIZWlnaHQoeyB9KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFJlbW92ZSBkZXNjZW50IHdoZW4gYWxsIGNv
bnRlbnQgaXMgYmFzZWxpbmUgYWxpZ25lZCBidXQgbm9uZSBvZiB0aGVtIGhhdmUgZGVzY2VudC4K
LSAgICAgICAgICAgIGlmIChxdWlya3MoKS5saW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhsaW5l
LnJ1bnMoKSkpIHsKLSAgICAgICAgICAgICAgICBsaW5lQm94LnNocmlua1ZlcnRpY2FsbHkobGlu
ZUJveC5hc2NlbnRBbmREZXNjZW50KCkuZGVzY2VudCk7Ci0gICAgICAgICAgICAgICAgbGluZUJv
eC5yZXNldERlc2NlbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRlbnRBbGln
bmVyLmFsaWduVmVydGljYWxseSgpOwotCi0gICAgICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpv
bnRhbEFsaWdubWVudCA9IFsmXSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJvb3QoKS5zdHlsZSgp
LnRleHRBbGlnbigpICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKTsKLSAgICAgICAgICAgICAgICAv
LyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkg
dGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICAvLyBpbiBvcmRlciB0
byBleGFjdGx5IGZpbGwgdGhlIGxpbmUgYm94LiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBi
eSB0ZXh0LWFsaWduLWxhc3QsCi0gICAgICAgICAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZv
cmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25l
ZC4KLSAgICAgICAgICAgICAgICBpZiAobGluZS5ydW5zKCkubGFzdCgpLmlzTGluZUJyZWFrKCkg
fHwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID09IExpbmVDb250ZW50QWxpZ25lcjo6SXNM
YXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBUZXh0QWxpZ25Nb2RlOjpTdGFydDsKLSAgICAgICAgICAgICAgICByZXR1cm4gVGV4dEFsaWdu
TW9kZTo6SnVzdGlmeTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBjb250ZW50QWxpZ25l
ci5hbGlnbkhvcml6b250YWxseShjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQoKSwgaXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50KTsKLSAgICAgICAgfTsKLQotICAgICAgICBhbGlnbkxpbmVD
b250ZW50KCk7Ci0gICAgICAgIHNldERpc3BsYXlCb3hlc0ZvckxpbmUobGluZSwgY29udGVudEFs
aWduZXIuaW5saW5lUmVjdExpc3QoKSwgbGluZUJveCwgbGluZUNvbnRlbnQsIGNvbnN0cmFpbnRz
Lmhvcml6b250YWwpOworICAgICAgICBsaW5lLmNsb3NlKGlzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudCk7CisgICAgICAgIGF1dG8gbGluZVJlY3QgPSBEaXNwbGF5OjpJbmxpbmVSZWN0IHsgbGlu
ZUNvbnN0cmFpbnRzLmxvZ2ljYWxUb3BMZWZ0LCBsaW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSwg
bGluZUNvbnN0cmFpbnRzLmxpbmVIZWlnaHR9OworICAgICAgICBhdXRvIGxpbmVCb3ggPSBMaW5l
Qm94IHsgKnRoaXMsIGxpbmVSZWN0LCBsaW5lQ29udGVudC5ydW5zLCBsaW5lLmlzVmlzdWFsbHlF
bXB0eSgpID8gTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6WWVzIDogTGluZUJveDo6SXNM
aW5lVmlzdWFsbHlFbXB0eTo6Tm8sIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA/IExpbmVC
b3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzIDogTGluZUJveDo6SXNMYXN0TGlu
ZVdpdGhJbmxpbmVDb250ZW50OjpObyB9OworICAgICAgICBzZXREaXNwbGF5Qm94ZXNGb3JMaW5l
KGxpbmVDb250ZW50LCBsaW5lQm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKIAogICAgICAg
ICBpZiAoIWxpbmVDb250ZW50UmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQo
bmVlZHNMYXlvdXRSYW5nZS5zdGFydCA8IGxpbmVDb250ZW50UmFuZ2UuZW5kKTsKQEAgLTUxNyw3
ICsxOTMsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KElubGlu
ZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUxheW91dENvbgogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KICAgICAgICAgLy8gRmxvYXRzIHByZXZlbnRlZCB1cyBwbGFjaW5nIGFueSBj
b250ZW50IG9uIHRoZSBsaW5lLgotICAgICAgICBBU1NFUlQobGluZS5ydW5zKCkuaXNFbXB0eSgp
KTsKKyAgICAgICAgQVNTRVJUKGxpbmVDb250ZW50LnJ1bnMuaXNFbXB0eSgpKTsKICAgICAgICAg
QVNTRVJUKGxpbmUuaGFzSW50cnVzaXZlRmxvYXQoKSk7CiAgICAgICAgIC8vIE1vdmUgdGhlIG5l
eHQgbGluZSBiZWxvdyB0aGUgaW50cnVzaXZlIGZsb2F0LgogICAgICAgICBhdXRvIGZsb2F0aW5n
Q29udGV4dCA9IEZsb2F0aW5nQ29udGV4dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRpbmdTdGF0
ZSgpLmZsb2F0aW5nU3RhdGUoKSB9OwpAQCAtODA3LDEwICs0ODMsOSBAQCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6TGluZUNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb25z
dHJhaW50c0ZvcgogICAgIHJldHVybiBMaW5lQ29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVm
dCwgbGluZUxvZ2ljYWxUb3AgfSwgbGluZUxvZ2ljYWxSaWdodCAtIGxpbmVMb2dpY2FsTGVmdCwg
aW5pdGlhbExpbmVIZWlnaHQsIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB9OwogfQogCi12b2lk
IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExp
bmVCdWlsZGVyJiBsaW5lLCBjb25zdCBMaW5lQ29udGVudEFsaWduZXI6OklubGluZVJ1blJlY3RM
aXN0JiBydW5SZWN0TGlzdCwgY29uc3QgTGluZUJveCYgbGluZUJveCwgY29uc3QgTGluZUxheW91
dENvbnRleHQ6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaW5l
Q29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewogICAgIGF1dG8mIGZv
cm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwotCiAgICAgaWYgKCFsaW5l
Q29udGVudC5mbG9hdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0
ID0gRmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAqdGhpcywgZm9ybWF0dGluZ1N0YXRlLmZsb2F0
aW5nU3RhdGUoKSB9OwogICAgICAgICAvLyBNb3ZlIGZsb2F0cyB0byB0aGVpciBmaW5hbCBwb3Np
dGlvbi4KQEAgLTgzNiw3ICs1MTEsOCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpz
ZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyJiBsaW5lLCBjbwogICAgIGF1
dG8gbGluZUluZGV4ID0gaW5saW5lQ29udGVudC5saW5lQm94ZXMuc2l6ZSgpOwogICAgIGF1dG8g
bGluZUlua092ZXJmbG93ID0gbGluZUJveC5zY3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICAvLyBD
b21wdXRlIGJveCBmaW5hbCBnZW9tZXRyeS4KLSAgICBhdXRvJiBsaW5lUnVucyA9IGxpbmUucnVu
cygpOworICAgIGF1dG8mIHJ1blJlY3RMaXN0ID0gbGluZUJveC5pbmxpbmVSZWN0TGlzdCgpOwor
ICAgIGF1dG8mIGxpbmVSdW5zID0gbGluZUNvbnRlbnQucnVuczsKICAgICBmb3IgKHNpemVfdCBp
bmRleCA9IDA7IGluZGV4IDwgbGluZVJ1bnMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGF1
dG8mIGxpbmVSdW4gPSBsaW5lUnVucy5hdChpbmRleCk7CiAgICAgICAgIGF1dG8gbG9naWNhbFJl
Y3QgPSBydW5SZWN0TGlzdFtpbmRleF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaApp
bmRleCAzMzk1NDQwOTI5NmI5YTBhYWU4NjhhNWM5NGNjMmQwNWJmN2E2NmYzLi40YTJjMTM3YWRj
ZGVlNzRlOGY0NDM3NjMwZDkwNmVmMzM0NmRmMTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdD
b250ZXh0LmgKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIElu
bGluZUZvcm1hdHRpbmdTdGF0ZTsKIGNsYXNzIEludmFsaWRhdGlvblN0YXRlOworY2xhc3MgTGlu
ZUJveDsKIAogLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBsYXlvdXQgbG9naWMgZm9yIGlu
bGluZSBmb3JtYXR0aW5nIGNvbnRleHRzLgogLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIy
L3Zpc3VyZW4uaHRtbCNpbmxpbmUtZm9ybWF0dGluZwpAQCAtOTQsNyArOTUsNyBAQCBwcml2YXRl
OgogICAgICAgICBib29sIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB7IGZhbHNlIH07CiAgICAg
fTsKICAgICBMaW5lQ29uc3RyYWludHMgY29uc3RyYWludHNGb3JMaW5lKGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApOwotICAgIHZv
aWQgc2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlciYsIGNvbnN0IFZlY3Rv
cjxEaXNwbGF5OjpJbmxpbmVSZWN0LCAxMD4mLCBjb25zdCBMaW5lQm94JiwgY29uc3QgTGluZUxh
eW91dENvbnRleHQ6OkxpbmVDb250ZW50JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7
CisgICAgdm9pZCBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXRDb250ZXh0
OjpMaW5lQ29udGVudCYsIGNvbnN0IExpbmVCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmKTsKICAgICB2b2lkIGludmFsaWRhdGVGb3JtYXR0aW5nU3RhdGUoY29uc3QgSW52YWxpZGF0
aW9uU3RhdGUmKTsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGlu
Z1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihG
b3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dFF1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggYmE3NTVkOTMxMWExM2U1MmNiYTI3
ZDRiNzhiODMxM2MyYzBjZmRkOS4uMGQzZTAzNjJmMDY5MDI4NmQ0YjZkNTA2NGI3ODk4OGUzMGZk
NGE5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcApA
QCAtMjQsNyArMjQsOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
aXNwbGF5Qm94LmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJJbmxpbmVMaW5lQm94LmgiCiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQm94LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDkzNWFmZmE2ZGJhYzQ2YzI5N2Q3
YzE3N2VhYTc0N2MwOTNhNDcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKQEAgLTAsMCArMSwzNDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJv
eC5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitzdHJ1Y3QgSGFuZ2luZ0NvbnRlbnQg
eworcHVibGljOgorICAgIHZvaWQgcmVzZXQoKTsKKworICAgIElubGluZUxheW91dFVuaXQgd2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgYm9vbCBpc0NvbmRpdGlvbmFsKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0NvbmRpdGlvbmFsOyB9CisKKyAgICB2b2lkIHNldElzQ29uZGl0
aW9uYWwoKSB7IG1faXNDb25kaXRpb25hbCA9IHRydWU7IH0KKyAgICB2b2lkIGV4cGFuZChJbmxp
bmVMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGggKz0gd2lkdGg7IH0KKworcHJpdmF0ZToKKyAg
ICBib29sIG1faXNDb25kaXRpb25hbCB7IGZhbHNlIH07CisgICAgSW5saW5lTGF5b3V0VW5pdCBt
X3dpZHRoIHsgMCB9OworfTsKKwordm9pZCBIYW5naW5nQ29udGVudDo6cmVzZXQoKQoreworICAg
IG1faXNDb25kaXRpb25hbCA9IGZhbHNlOworICAgIG1fd2lkdGggPSAgMDsKK30KKworTGluZUJv
eDo6TGluZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQsIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIGxpbmVSZWN0LCBjb25zdCBMaW5l
QnVpbGRlcjo6UnVuTGlzdCYgcnVucywgSXNMaW5lVmlzdWFsbHlFbXB0eSBpc0xpbmVWaXN1YWxs
eUVtcHR5LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KQorICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCkKKyAgICAsIG1fcnVucyhydW5zKQorICAgICwgbV9yZWN0KGxpbmVSZWN0KQorewor
I2lmIEFTU0VSVF9FTkFCTEVECisgICAgbV9oYXNWYWxpZEFsaWdubWVudEJhc2VsaW5lID0gdHJ1
ZTsKKyNlbmRpZgorICAgIGF1dG8mIHJvb3RTdHlsZSA9IGlubGluZUZvcm1hdHRpbmdDb250ZXh0
LnJvb3QoKS5zdHlsZSgpOworICAgIGF1dG8gaGFsZkxlYWRpbmdNZXRyaWNzID0gdGhpcy0+aGFs
ZkxlYWRpbmdNZXRyaWNzKHJvb3RTdHlsZS5mb250TWV0cmljcygpLCBsaW5lUmVjdC5oZWlnaHQo
KSk7CisKKyAgICBtX2FsaWdubWVudEJhc2VsaW5lID0gaGFsZkxlYWRpbmdNZXRyaWNzLmFzY2Vu
dDsKKyAgICBtX3Jvb3RJbmxpbmVCb3ggPSBJbmxpbmVCb3ggeyBoYWxmTGVhZGluZ01ldHJpY3Mg
fTsKKworICAgIGF1dG8gY29udGVudExvZ2ljYWxXaWR0aCA9IElubGluZUxheW91dFVuaXQgeyB9
OworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CisgICAgICAgIGF1dG8gcnVuSGVpZ2h0
ID0gWyZdKCkgLT4gSW5saW5lTGF5b3V0VW5pdCB7CisgICAgICAgICAgICBhdXRvJiBmb250TWV0
cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7CisgICAgICAgICAgICBpZiAocnVuLmlz
VGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgICAgIHJldHVybiBmb250
TWV0cmljcy5oZWlnaHQoKTsKKworICAgICAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0
KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRN
ZXRyaWNzLmhlaWdodCgpOworCisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5
b3V0Qm94KCk7CisgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGlubGluZUZvcm1hdHRp
bmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICBpZiAobGF5
b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgp
OworCisgICAgICAgICAgICAvLyBOb24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUt
YmxvY2spLiBJdCBsb29rcyBhIGJpdCBtaXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlz
IGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVpZ2h0IGhlcmUuCisgICAgICAgICAgICByZXR1cm4g
Ym94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7CisgICAgICAgIH07CisgICAgICAgIG1fcnVu
UmVjdExpc3QuYXBwZW5kKHsgMCwgcnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgo
KSwgcnVuSGVpZ2h0KCkgfSk7CisgICAgICAgIGNvbnRlbnRMb2dpY2FsV2lkdGggKz0gcnVuLmxv
Z2ljYWxXaWR0aCgpOworICAgIH0KKyAgICBhbGlnblZlcnRpY2FsbHkoKTsKKyAgICBhbGlnbkhv
cml6b250YWxseShsaW5lUmVjdC53aWR0aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCwgaXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKworICAgIGlmIChpc0xpbmVWaXN1YWxseUVtcHR5ID09
IElzTGluZVZpc3VhbGx5RW1wdHk6OlllcykgeworICAgICAgICBtX3JlY3Quc2V0SGVpZ2h0KHsg
fSk7CisgICAgICAgIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNjZW50ID0geyB9OworICAg
IH0KKyAgICAvLyA/PworICAgIC8vIFJlbW92ZSBkZXNjZW50IHdoZW4gYWxsIGNvbnRlbnQgaXMg
YmFzZWxpbmUgYWxpZ25lZCBidXQgbm9uZSBvZiB0aGVtIGhhdmUgZGVzY2VudC4KKyAgICAvLyBp
ZiAocXVpcmtzKCkubGluZURlc2NlbnROZWVkc0NvbGxhcHNpbmcobGluZS5ydW5zKCkpKSB7Cisg
ICAgLy8gICAgIGxpbmVCb3guc2hyaW5rVmVydGljYWxseShsaW5lQm94LmFzY2VudEFuZERlc2Nl
bnQoKS5kZXNjZW50KTsKKyAgICAvLyAgICAgbGluZUJveC5yZXNldERlc2NlbnQoKTsKKyAgICAv
LyB9Cit9CisKK3ZvaWQgTGluZUJveDo6YWxpZ25Ib3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5p
dCBhdmFpbGFibGVXaWR0aCwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmUp
Cit7CisgICAgYXV0byBoYW5naW5nQ29udGVudCA9IGNvbGxlY3RIYW5naW5nQ29udGVudChpc0xh
c3RMaW5lKTsKKyAgICBhdmFpbGFibGVXaWR0aCArPSBoYW5naW5nQ29udGVudC53aWR0aCgpOwor
ICAgIGlmIChtX3J1bnMuaXNFbXB0eSgpIHx8IGF2YWlsYWJsZVdpZHRoIDw9IDApCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50ID0gWyZdIHsK
KyAgICAgICAgYXV0byYgcm9vdFN0eWxlID0gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCkuc3R5
bGUoKTsKKyAgICAgICAgaWYgKHJvb3RTdHlsZS50ZXh0QWxpZ24oKSAhPSBUZXh0QWxpZ25Nb2Rl
OjpKdXN0aWZ5KQorICAgICAgICAgICAgcmV0dXJuIHJvb3RTdHlsZS50ZXh0QWxpZ24oKTsKKyAg
ICAgICAgLy8gVGV4dCBpcyBqdXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lm
aWVkIGJ5IHRoZSB0ZXh0LWp1c3RpZnkgcHJvcGVydHksCisgICAgICAgIC8vIGluIG9yZGVyIHRv
IGV4YWN0bHkgZmlsbCB0aGUgbGluZSBib3guIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5
IHRleHQtYWxpZ24tbGFzdCwKKyAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3Jj
ZWQgYnJlYWsgb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4KKyAgICAg
ICAgaWYgKG1fcnVucy5sYXN0KCkuaXNMaW5lQnJlYWsoKSB8fCBpc0xhc3RMaW5lID09IElzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQorICAgICAgICAgICAgcmV0dXJuIFRleHRBbGln
bk1vZGU6OlN0YXJ0OworICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsKKyAg
ICB9KCk7CisKKyAgICBpZiAoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50ID09IFRleHRBbGln
bk1vZGU6Okp1c3RpZnkpIHsKKyAgICAgICAgYXV0byBhY2N1bXVsYXRlZEV4cGFuc2lvbiA9IElu
bGluZUxheW91dFVuaXQgeyB9OworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4
IDwgbV9ydW5zLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgbV9ydW5SZWN0TGlzdFtp
bmRleF0ubW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lvbik7CisKKyAgICAgICAg
ICAgIGF1dG8gaG9yaXpvbnRhbEV4cGFuc2lvbiA9IG1fcnVuc1tpbmRleF0uZXhwYW5zaW9uKCku
aG9yaXpvbnRhbEV4cGFuc2lvbjsKKyAgICAgICAgICAgIG1fcnVuUmVjdExpc3RbaW5kZXhdLmV4
cGFuZEhvcml6b250YWxseShob3Jpem9udGFsRXhwYW5zaW9uKTsKKyAgICAgICAgICAgIGFjY3Vt
dWxhdGVkRXhwYW5zaW9uICs9IGhvcml6b250YWxFeHBhbnNpb247CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gYWRqdXN0bWVudEZvckFsaWdubWVudCA9IFsm
XSAoYXV0byBhdmFpbGFibGVXaWR0aCkgLT4gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gewor
ICAgICAgICBzd2l0Y2ggKGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCkgeworICAgICAgICBj
YXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2Vi
S2l0TGVmdDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CisgICAgICAg
IGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6CisgICAgICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6RW5kOgorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+
KGF2YWlsYWJsZVdpZHRoLCAwKTsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6
CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgorICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoIC8gMiwgMCk7
CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfTsKKworICAg
IGlmIChhdXRvIGFkanVzdG1lbnQgPSBhZGp1c3RtZW50Rm9yQWxpZ25tZW50KGF2YWlsYWJsZVdp
ZHRoKSkgeworICAgICAgICAvLyBGSVhNRTogbGluZSBib3ggc2hvdWxkIG5vdCBuZWVkIHRvIGJl
IG1vdmVkLCBvbmx5IHRoZSBydW5zLgorICAgICAgICBtX3JlY3QubW92ZUhvcml6b250YWxseSgq
YWRqdXN0bWVudCk7CisgICAgICAgIGZvciAoYXV0byYgcnVuUmVjdCA6IG1fcnVuUmVjdExpc3Qp
CisgICAgICAgICAgICBydW5SZWN0Lm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQpOworICAg
IH0KK30KKwordm9pZCBMaW5lQm94OjphbGlnblZlcnRpY2FsbHkoKQoreworICAgIGFkanVzdEJh
c2VsaW5lQW5kTGluZUhlaWdodCgpOworICAgIGF1dG8gc2Nyb2xsYWJsZU92ZXJmbG93UmVjdCA9
IGxvZ2ljYWxSZWN0KCk7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fcnVu
cy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byYgcnVuID0gbV9ydW5zW2luZGV4XTsK
KyAgICAgICAgYXV0byYgcnVuUmVjdCA9IG1fcnVuUmVjdExpc3RbaW5kZXhdOworICAgICAgICBh
dXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgYXV0byYgbGF5
b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOworICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ24gPSBs
YXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CisgICAgICAgIGF1dG8gYXNjZW50ID0g
bGF5b3V0Qm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKKworICAgICAgICBzd2l0
Y2ggKHZlcnRpY2FsQWxpZ24pIHsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGlu
ZToKKyAgICAgICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSB8fCBydW4uaXNUZXh0KCkpCisg
ICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGFsaWdubWVudEJhc2VsaW5lKCkgLSBhc2NlbnQ7
CisgICAgICAgICAgICBlbHNlIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5
Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGFsaWdubWVu
dEJhc2VsaW5lKCkgLSBhc2NlbnQgLSBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSAtIGJveEdlb21l
dHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOworICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlv
dXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZv
cm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3Rh
dGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25j
YXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7CisgICAgICAgICAgICAgICAgLy8gU3BlYyBt
YWtlcyB1cyBnZW5lcmF0ZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBpZiBpdCBpcyBlbXB0eS4K
KyAgICAgICAgICAgICAgICBhdXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBmb3JtYXR0aW5nU3Rh
dGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKS5iYXNlbGluZSgpOwor
ICAgICAgICAgICAgICAgIC8vIFRoZSBpbmxpbmUtYmxvY2sncyBiYXNlbGluZSBvZmZzZXQgaXMg
cmVsYXRpdmUgdG8gaXRzIGNvbnRlbnQgYm94LiBMZXQncyBjb252ZXJ0IGl0IHJlbGF0aXZlIHRv
IHRoZSBtYXJnaW4gYm94LgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBfX19fX19fX19f
X19fX18gPC0gbWFyZ2luIGJveAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICB8ICBfX19fX19fX19fX18gIDwtIGJvcmRlciBib3gKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICB8IHwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICB8IHwgIF9fX19fX19fXyAgPC0gY29udGVudCBib3gKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICB8IHwgfCAgIF4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8IHwgfCAgIHwgIDwt
IGJhc2VsaW5lIG9mZnNldAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfCB8ICAgfAor
ICAgICAgICAgICAgICAgIC8vICAgICB0ZXh0IHwgfCB8ICAgdiB0ZXh0CisgICAgICAgICAgICAg
ICAgLy8gICAgIC0tLS0tfC18LXwtLS0tLS0tLS0tIDwtIGJhc2VsaW5lCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgICAgICBhdXRvIGJh
c2VsaW5lRnJvbU1hcmdpbkJveCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgYm94R2Vv
bWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSAr
IGlubGluZUJsb2NrQmFzZWxpbmU7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGFsaWdu
bWVudEJhc2VsaW5lKCkgLSBiYXNlbGluZUZyb21NYXJnaW5Cb3g7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxU
b3AgPSBhbGlnbm1lbnRCYXNlbGluZSgpIC0gKGJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkg
KyBib3hHZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUpICsgcnVuUmVjdC5o
ZWlnaHQoKSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgorICAgICAg
ICAgICAgbG9naWNhbFRvcCA9IDBfbHU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206CisgICAgICAgICAgICBsb2dpY2FsVG9wID0gbG9naWNh
bEJvdHRvbSgpIC0gcnVuUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJ1blJlY3Quc2V0VG9wKGxvZ2lj
YWxUb3ApOworICAgICAgICAvLyBBZGp1c3Qgc2Nyb2xsYWJsZSBvdmVyZmxvdyBpZiB0aGUgcnVu
IG92ZXJmbG93cyB0aGUgbGluZS4KKyAgICAgICAgc2Nyb2xsYWJsZU92ZXJmbG93UmVjdC5leHBh
bmRWZXJ0aWNhbGx5VG9Db250YWluKHJ1blJlY3QpOworICAgICAgICAvLyBDb252ZXJ0IHJ1bnMg
ZnJvbSByZWxhdGl2ZSB0byB0aGUgbGluZSB0b3AvbGVmdCB0byB0aGUgZm9ybWF0dGluZyByb290
J3MgYm9yZGVyIGJveCB0b3AvbGVmdC4KKyAgICAgICAgcnVuUmVjdC5tb3ZlVmVydGljYWxseSh0
aGlzLT5sb2dpY2FsVG9wKCkpOworICAgICAgICBydW5SZWN0Lm1vdmVIb3Jpem9udGFsbHkobG9n
aWNhbExlZnQoKSk7CisgICAgfQorICAgIHNldFNjcm9sbGFibGVPdmVyZmxvdyhzY3JvbGxhYmxl
T3ZlcmZsb3dSZWN0KTsKK30KKwordm9pZCBMaW5lQm94OjphZGp1c3RCYXNlbGluZUFuZExpbmVI
ZWlnaHQoKQoreworICAgIHVuc2lnbmVkIGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCA9IDA7
CisgICAgYXV0byBoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrID0gZmFsc2U7CisgICAgZm9y
IChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxh
eW91dEJveCgpOworICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAg
ICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7CisgICAgICAgICAg
ICAvLyBGb3IgdGV4dCBjb250ZW50IHdlIHNldCB0aGUgYmFzZWxpbmUgZWl0aGVyIHRocm91Z2gg
dGhlIGluaXRpYWwgc3RydXQgKHNldCBieSB0aGUgZm9ybWF0dGluZyBjb250ZXh0IHJvb3QpIG9y
CisgICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSBpbmxpbmUgY29udGFpbmVyIChzdGFydCkuIE5v
cm1hbGx5IHRoZSB0ZXh0IGNvbnRlbnQgaXRzZWxmIGRvZXMgbm90IHN0cmV0Y2ggdGhlIGxpbmUu
CisgICAgICAgICAgICBpZiAoaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsKSB7CisgICAgICAg
ICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBhZGp1c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxp
bmUgdGhyb3VnaCB0aGUgcGFyZW50IGlubGluZSBjb250YWluZXIuIAorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhhc1NlZW5EaXJlY3RU
ZXh0T3JMaW5lQnJlYWspIHsKKyAgICAgICAgICAgICAgICAvLyBlLmcgZGl2PmZpcnN0IHRleHQ8
L2Rpdj4gb3IgPGRpdj48c3Bhbj5uZXN0ZWQ8c3Bhbj5maXJzdCBkaXJlY3QgdGV4dDwvZGl2Pi4K
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhh
c1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgeworICAg
ICAgICAgICAgKytpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7CisgICAgICAgICAgICAvLyBJ
bmxpbmUgY29udGFpbmVycyBzdHJldGNoIHRoZSBsaW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KKyAg
ICAgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMsIHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0
IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVpZ2h0LgorICAgICAgICAgICAgYXV0byYgZm9udE1l
dHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygpOworICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRp
Y2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZSkgeworICAgICAgICAgICAgICAg
IGF1dG8gaGFsZkxlYWRpbmcgPSBMaW5lQm94OjpoYWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJp
Y3MsIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAvLyBCb3Ro
IGhhbGZsZWFkaW5nIGFzY2VudCBhbmQgZGVzY2VudCBjb3VsZCBiZSBuZWdhdGl2ZSAodGFsbCBm
b250IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBpZiAoaGFs
ZkxlYWRpbmcuZGVzY2VudCA+IDApCisgICAgICAgICAgICAgICAgICAgIHNldERlc2NlbnRJZkdy
ZWF0ZXIoaGFsZkxlYWRpbmcuZGVzY2VudCk7CisgICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFk
aW5nLmFzY2VudCA+IDApCisgICAgICAgICAgICAgICAgICAgIHNldEFzY2VudElmR3JlYXRlciho
YWxmTGVhZGluZy5hc2NlbnQpOworICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIoYXNjZW50QW5kRGVzY2VudCgpLmhlaWdodCgpKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoZm9udE1ldHJpY3MuaGVp
Z2h0KCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
cnVuLmlzQ29udGFpbmVyRW5kKCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBsaW5lJ3MgYmFzZWxp
bmUgYW5kIGhlaWdodCBoYXZlIGFscmVhZHkgYmVlbiBhZGp1c3RlZCBhdCBDb250YWluZXJTdGFy
dC4KKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwpOworICAg
ICAgICAgICAgLS1pbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydW4uaXNCb3goKSkgeworICAgICAgICAg
ICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94
KGxheW91dEJveCk7CisgICAgICAgICAgICBhdXRvIG1hcmdpbkJveEhlaWdodCA9IGJveEdlb21l
dHJ5Lm1hcmdpbkJveEhlaWdodCgpOworCisgICAgICAgICAgICBzd2l0Y2ggKHN0eWxlLnZlcnRp
Y2FsQWxpZ24oKSkgeworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTog
eworICAgICAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxh
eW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gSW5saW5lLWJsb2NrcyB3aXRoIGlubGluZSBjb250ZW50IGFsd2F5cyBo
YXZlIGJhc2VsaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRl
ID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2Fz
dDxDb250YWluZXJCb3g+KGxheW91dEJveCkpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGVy
ZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25lIGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHkuCisgICAg
ICAgICAgICAgICAgICAgIGF1dG8mIGxhc3RMaW5lQm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3Bs
YXlJbmxpbmVDb250ZW50KCktPmxpbmVCb3hlcy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gYmVmb3JlSGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBib3hHZW9t
ZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwor
ICAgICAgICAgICAgICAgICAgICBzZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihiZWZvcmVI
ZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0
TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5vbiBpbmxpbmUtYmxvY2sgYm94ZXMg
c2l0IG9uIHRoZSBiYXNlbGluZSAoaW5jbHVkaW5nIHRoZWlyIGJvdHRvbSBtYXJnaW4pLgorICAg
ICAgICAgICAgICAgICAgICBzZXRBc2NlbnRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIG5lZ2F0aXZlIGRlc2NlbnQgKHllcywgbmVnYXRp
dmUgZGVzY2VudCBpcyBhIHRoaW5nKS4KKyAgICAgICAgICAgICAgICAgICAgc2V0TG9naWNhbEhl
aWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0
PigwLCBhc2NlbnRBbmREZXNjZW50KCkuZGVzY2VudCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVmVy
dGljYWxBbGlnbjo6VG9wOgorICAgICAgICAgICAgICAgIC8vIFRvcCBhbGlnbiBjb250ZW50IG5l
dmVyIGNoYW5nZXMgdGhlIGJhc2VsaW5lLCBpdCBvbmx5IHB1c2hlcyB0aGUgYm90dG9tIG9mIHRo
ZSBsaW5lIGZ1cnRoZXIgZG93bi4KKyAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZH
cmVhdGVyKG1hcmdpbkJveEhlaWdodCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbTogeworICAgICAgICAgICAgICAgIC8vIEJv
dHRvbSBhbGlnbmVkLCB0YWxsIGNvbnRlbnQgcHVzaGVzIHRoZSBiYXNlbGluZSBmdXJ0aGVyIGRv
d24gZnJvbSB0aGUgbGluZSB0b3AuCisgICAgICAgICAgICAgICAgYXV0byBsaW5lTG9naWNhbEhl
aWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBpZiAobWFyZ2luQm94SGVp
Z2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9naWNh
bEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgICAgICAgICBz
ZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihhbGlnbm1lbnRCYXNlbGluZSgpICsgKG1hcmdp
bkJveEhlaWdodCAtIGxpbmVMb2dpY2FsSGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK0hhbmdpbmdDb250ZW50IExpbmVCb3g6OmNvbGxlY3RIYW5naW5n
Q29udGVudChJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KSBjb25zdAoreworICAgIGF1dG8gaGFuZ2luZ0NvbnRlbnQgPSBIYW5naW5nQ29udGVu
dCB7IH07CisgICAgaWYgKGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA9PSBJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQ6OlllcykKKyAgICAgICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25k
aXRpb25hbCgpOworICAgIGZvciAoYXV0byYgcnVuIDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZSht
X3J1bnMpKSB7CisgICAgICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0Nv
bnRhaW5lckVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChydW4uaXNM
aW5lQnJlYWsoKSkgeworICAgICAgICAgICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25h
bCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFydW4u
aGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8g
Q2hlY2sgaWYgd2UgaGF2ZSBhIHByZXNlcnZlZCBvciBodW5nIHdoaXRlc3BhY2UuCisgICAgICAg
IGlmIChydW4uc3R5bGUoKS53aGl0ZVNwYWNlKCkgIT0gV2hpdGVTcGFjZTo6UHJlV3JhcCkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBUaGlzIGlzIGVpdGhlciBhIG5vcm1hbCBvciBj
b25kaXRpb25hbGx5IGhhbmdpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaGFuZ2lu
Z0NvbnRlbnQuZXhwYW5kKHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGhhbmdpbmdDb250ZW50OworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5o
CmluZGV4IDU2MTcwNTBiMmY4YmMwMmY3ODhmZTAxNGUxZDgyOTExY2I5MDJmY2EuLjBkOWY4Yzc2
N2Q2YWU1ODUwMWEyMzc0OTQ3MmY0NDM2MjYxM2RkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKQEAgLTI5LDEw
ICsyOSwxNCBAQAogCiAjaW5jbHVkZSAiRGlzcGxheUJveC5oIgogI2luY2x1ZGUgIkRpc3BsYXlJ
bmxpbmVSZWN0LmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJ1aWxkZXIuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKK2NsYXNzIElubGluZUZvcm1hdHRpbmdD
b250ZXh0Oworc3RydWN0IEhhbmdpbmdDb250ZW50OworCiBzdHJ1Y3QgQXNjZW50QW5kRGVzY2Vu
dCB7CiAgICAgSW5saW5lTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBhc2NlbnQg
KyBkZXNjZW50OyB9CiAKQEAgLTUwLDIwICs1NCwyNSBAQCBwdWJsaWM6CiAgICAgICAgIEFzY2Vu
dEFuZERlc2NlbnQgYXNjZW50QW5kRGVzY2VudDsKICAgICB9OwogCi0gICAgTGluZUJveChjb25z
dCBEaXNwbGF5OjpJbmxpbmVSZWN0JiwgY29uc3QgQXNjZW50QW5kRGVzY2VudCYpOwotICAgIExp
bmVCb3goKSA9IGRlZmF1bHQ7CisgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQgeyBObywgWWVzIH07CisgICAgZW51bSBjbGFzcyBJc0xpbmVWaXN1YWxseUVtcHR5IHsg
Tm8sIFllcyB9OworICAgIExpbmVCb3goY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBj
b25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiwgY29uc3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmLCBJ
c0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwogCi0gICAg
Y29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KLSAgICBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiBzY3JvbGxhYmxlT3ZlcmZs
b3coKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVPdmVyZmxvdzsgfQorICAgIHVzaW5nIElu
bGluZVJ1blJlY3RMaXN0ID0gVmVjdG9yPERpc3BsYXk6OklubGluZVJlY3QsIDEwPjsKKyAgICBj
b25zdCBJbmxpbmVSdW5SZWN0TGlzdCYgaW5saW5lUmVjdExpc3QoKSBjb25zdCB7IHJldHVybiBt
X3J1blJlY3RMaXN0OyB9CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0LmxlZnQoKTsgfQogICAgIElubGluZUxheW91dFVuaXQgbG9naWNh
bFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LnJpZ2h0KCk7IH0KICAgICBJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX3JlY3QudG9wKCk7IH0KICAgICBJ
bmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX3JlY3QuYm90
dG9tKCk7IH0KLQogICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0LndpZHRoKCk7IH0KICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxIZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX3JlY3QuaGVpZ2h0KCk7IH0KIAorICAgIGNvbnN0IERpc3Bs
YXk6OklubGluZVJlY3QmIGxvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Cisg
ICAgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgc2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxhYmxlT3ZlcmZsb3c7IH0KKworICAgIHN0YXRpYyBBc2NlbnRBbmRE
ZXNjZW50IGhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBGb250TWV0cmljcyYsIElubGluZUxheW91
dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQpOworCiAgICAgLy8gQWxpZ21lbnQgYmFzZWxpbmUgZnJv
bSBsaW5lIGxvZ2ljYWwgdG9wLgogICAgIC8vCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLSAg
ICBsaW5lIGxvZ2ljYWwgdG9wICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tICh0b3AgYWxpZ24pCkBA
IC04MCw2MyArODksMzkgQEAgcHVibGljOgogICAgIC8vICAgdgogICAgIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0gICAgbGluZSBsb2dpY2FsIGJvdHRvbSAgLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg
IElubGluZUxheW91dFVuaXQgYWxpZ25tZW50QmFzZWxpbmUoKSBjb25zdDsKKworcHJpdmF0ZToK
ICAgICBjb25zdCBBc2NlbnRBbmREZXNjZW50JiBhc2NlbnRBbmREZXNjZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9yb290SW5saW5lQm94LmFzY2VudEFuZERlc2NlbnQ7IH0KIAogICAgIHZvaWQgc2V0
QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoSW5saW5lTGF5b3V0VW5pdCk7CiAgICAgdm9pZCBz
ZXRBc2NlbnRJZkdyZWF0ZXIoSW5saW5lTGF5b3V0VW5pdCk7CiAgICAgdm9pZCBzZXREZXNjZW50
SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQpOwotCi0gICAgdm9pZCByZXNldEFsaWdubWVudEJh
c2VsaW5lKCk7Ci0gICAgdm9pZCByZXNldERlc2NlbnQoKSB7IG1fcm9vdElubGluZUJveC5hc2Nl
bnRBbmREZXNjZW50LmRlc2NlbnQgPSB7IH07IH0KLQotICAgIHZvaWQgc2V0TG9naWNhbEhlaWdo
dChJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpIHsgbV9yZWN0LnNldEhlaWdodChsb2dp
Y2FsSGVpZ2h0KTsgfQotCiAgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKElubGlu
ZUxheW91dFVuaXQpOwotICAgIHZvaWQgc2V0TG9naWNhbFdpZHRoKElubGluZUxheW91dFVuaXQg
bG9naWNhbFdpZHRoKSB7IG1fcmVjdC5zZXRXaWR0aChsb2dpY2FsV2lkdGgpOyB9CiAKICAgICB2
b2lkIHNldFNjcm9sbGFibGVPdmVyZmxvdyhjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiByZWN0
KSB7IG1fc2Nyb2xsYWJsZU92ZXJmbG93ID0gcmVjdDsgfQogCi0gICAgdm9pZCBtb3ZlSG9yaXpv
bnRhbGx5KElubGluZUxheW91dFVuaXQgZGVsdGEpIHsgbV9yZWN0Lm1vdmVIb3Jpem9udGFsbHko
ZGVsdGEpOyB9Ci0KLSAgICB2b2lkIGV4cGFuZEhvcml6b250YWxseShJbmxpbmVMYXlvdXRVbml0
IGRlbHRhKSB7IG1fcmVjdC5leHBhbmRIb3Jpem9udGFsbHkoZGVsdGEpOyB9Ci0gICAgdm9pZCBz
aHJpbmtIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCBkZWx0YSkgeyBleHBhbmRIb3Jpem9u
dGFsbHkoLWRlbHRhKTsgfQorICAgIHZvaWQgYWxpZ25Ib3Jpem9udGFsbHkoSW5saW5lTGF5b3V0
VW5pdCBhdmFpbGFibGVXaWR0aCwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAgICB2
b2lkIGFsaWduVmVydGljYWxseSgpOworICAgIHZvaWQgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVp
Z2h0KCk7CiAKLSAgICB2b2lkIGV4cGFuZFZlcnRpY2FsbHkoSW5saW5lTGF5b3V0VW5pdCBkZWx0
YSkgeyBtX3JlY3QuZXhwYW5kVmVydGljYWxseShkZWx0YSk7IH0KLSAgICB2b2lkIHNocmlua1Zl
cnRpY2FsbHkoSW5saW5lTGF5b3V0VW5pdCBkZWx0YSkgeyBleHBhbmRWZXJ0aWNhbGx5KC1kZWx0
YSk7IH0KKyAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoSXNMYXN0TGlu
ZVdpdGhJbmxpbmVDb250ZW50KSBjb25zdDsKIAotICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9DU1MyMi92aXN1cmVuLmh0bWwjaW5saW5lLWZvcm1hdHRpbmcKLSAgICAvLyBMaW5lIGJveGVz
IHRoYXQgY29udGFpbiBubyB0ZXh0LCBubyBwcmVzZXJ2ZWQgd2hpdGUgc3BhY2UsIG5vIGlubGlu
ZSBlbGVtZW50cyB3aXRoIG5vbi16ZXJvIG1hcmdpbnMsIHBhZGRpbmcsIG9yIGJvcmRlcnMsCi0g
ICAgLy8gYW5kIG5vIG90aGVyIGluLWZsb3cgY29udGVudCAoc3VjaCBhcyBpbWFnZXMsIGlubGlu
ZSBibG9ja3Mgb3IgaW5saW5lIHRhYmxlcyksIGFuZCBkbyBub3QgZW5kIHdpdGggYSBwcmVzZXJ2
ZWQgbmV3bGluZQotICAgIC8vIG11c3QgYmUgdHJlYXRlZCBhcyB6ZXJvLWhlaWdodCBsaW5lIGJv
eGVzIGZvciB0aGUgcHVycG9zZXMgb2YgZGV0ZXJtaW5pbmcgdGhlIHBvc2l0aW9ucyBvZiBhbnkg
ZWxlbWVudHMgaW5zaWRlIG9mIHRoZW0sCi0gICAgLy8gYW5kIG11c3QgYmUgdHJlYXRlZCBhcyBu
b3QgZXhpc3RpbmcgZm9yIGFueSBvdGhlciBwdXJwb3NlLgotICAgIC8vIE5vdGUgdGhhdCBpdCBk
b2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHZpc3VhbGx5IG5vbi1lbXB0eSBsaW5lLiA8c3BhbiBz
dHlsZT0iZm9udC1zaXplOiAwcHgiPnRoaXMgaXMgc3RpbGwgY29uc2lkZXJlZCBub24tZW1wdHk8
L3NwYW4+Ci0gICAgYm9vbCBpc0NvbnNpZGVyZWRFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faXND
b25zaWRlcmVkRW1wdHk7IH0KLSAgICB2b2lkIHNldElzQ29uc2lkZXJlZEVtcHR5KCkgeyBtX2lz
Q29uc2lkZXJlZEVtcHR5ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0SXNDb25zaWRlcmVkTm9uRW1w
dHkoKSB7IG1faXNDb25zaWRlcmVkRW1wdHkgPSBmYWxzZTsgfQotCi0gICAgc3RhdGljIEFzY2Vu
dEFuZERlc2NlbnQgaGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRNZXRyaWNzJiwgSW5saW5l
TGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCk7CisgICAgY29uc3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDsgfQorICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsgfQogCiBwcml2YXRlOgog
I2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBtX2hhc1ZhbGlkQWxpZ25tZW50QmFzZWxpbmUg
eyBmYWxzZSB9OwogI2VuZGlmCisgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIG1f
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CisgICAgY29uc3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3Qm
IG1fcnVuczsKICAgICBEaXNwbGF5OjpJbmxpbmVSZWN0IG1fcmVjdDsKICAgICBEaXNwbGF5OjpJ
bmxpbmVSZWN0IG1fc2Nyb2xsYWJsZU92ZXJmbG93OwogICAgIElubGluZUxheW91dFVuaXQgbV9h
bGlnbm1lbnRCYXNlbGluZSB7IDAgfTsKLSAgICBib29sIG1faXNDb25zaWRlcmVkRW1wdHkgeyB0
cnVlIH07CiAgICAgSW5saW5lQm94IG1fcm9vdElubGluZUJveDsKKyAgICBJbmxpbmVSdW5SZWN0
TGlzdCBtX3J1blJlY3RMaXN0OwogfTsKIAotaW5saW5lIExpbmVCb3g6OkxpbmVCb3goY29uc3Qg
RGlzcGxheTo6SW5saW5lUmVjdCYgcmVjdCwgY29uc3QgQXNjZW50QW5kRGVzY2VudCYgYXNjZW50
QW5kRGVzY2VudCkKLSAgICA6IG1fcmVjdChyZWN0KQotICAgICwgbV9hbGlnbm1lbnRCYXNlbGlu
ZShhc2NlbnRBbmREZXNjZW50LmFzY2VudCkKLSAgICAsIG1fcm9vdElubGluZUJveChhc2NlbnRB
bmREZXNjZW50KQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9oYXNWYWxpZEFsaWdubWVu
dEJhc2VsaW5lID0gdHJ1ZTsKLSNlbmRpZgotfQotCiBpbmxpbmUgTGluZUJveDo6SW5saW5lQm94
OjpJbmxpbmVCb3goY29uc3QgQXNjZW50QW5kRGVzY2VudCYgYXNjZW50QW5kRGVzY2VudCkKICAg
ICA6IGFzY2VudEFuZERlc2NlbnQoYXNjZW50QW5kRGVzY2VudCkKIHsKQEAgLTE3OCwxNiArMTYz
LDYgQEAgaW5saW5lIElubGluZUxheW91dFVuaXQgTGluZUJveDo6YWxpZ25tZW50QmFzZWxpbmUo
KSBjb25zdAogICAgIHJldHVybiBtX2FsaWdubWVudEJhc2VsaW5lOwogfQogCi1pbmxpbmUgdm9p
ZCBMaW5lQm94OjpyZXNldEFsaWdubWVudEJhc2VsaW5lKCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxF
RAotICAgIG1faGFzVmFsaWRBbGlnbm1lbnRCYXNlbGluZSA9IHRydWU7Ci0jZW5kaWYKLSAgICBt
X2FsaWdubWVudEJhc2VsaW5lID0gMF9sdTsKLSAgICBtX3Jvb3RJbmxpbmVCb3guYXNjZW50QW5k
RGVzY2VudC5kZXNjZW50ID0geyB9OwotICAgIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNj
ZW50LmFzY2VudCA9IHsgfTsKLX0KLQogaW5saW5lIEFzY2VudEFuZERlc2NlbnQgTGluZUJveDo6
aGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcywgSW5saW5l
TGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCkKIHsKICAgICBhdXRvIGFzY2VudCA9IGZvbnRN
ZXRyaWNzLmFzY2VudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKaW5kZXggMjcwMzQ4NjZlZDk3NzU4
OWFjYTg0YzkxYWU5OTJhMzYyZWRlMTNiNi4uNmYxNThiYTMxYjFhMDFjMDk1NWZjZDNhYWI5YWM0
NzZhZmRlNTQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCkBAIC0yOSw3ICsyOSw2IEBACiAKICNp
bmNsdWRlICJEaXNwbGF5UnVuLmgiCiAjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgotI2luY2x1ZGUg
IklubGluZUxpbmVCb3guaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0SXRlbS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zNyw3ICszNiw2IEBAIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFz
cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKIGNsYXNzIElubGluZVNvZnRMaW5lQnJlYWtJdGVt
OwotY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyOwogCiBjbGFzcyBMaW5lQnVpbGRlciB7CiBwdWJs
aWM6CkBAIC01Niw4ICs1NCw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWaXN1YWxseUVtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9pc1Zpc3VhbGx5RW1wdHk7IH0KIAotICAgIElubGluZUxheW91
dFVuaXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVMb2dpY2FsV2lkdGgg
LSBjb250ZW50TG9naWNhbFdpZHRoKCk7IH0KKyAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dp
Y2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVMb2dpY2FsV2lkdGg7IH0KICAgICBJbmxp
bmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRMb2dpY2FsV2lkdGg7IH0KKyAgICBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbGluZUxvZ2ljYWxXaWR0aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCgp
OyB9CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IHRyaW1tYWJsZVRyYWlsaW5nV2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC53aWR0aCgpOyB9CiAgICAgYm9v
bCBpc1RyYWlsaW5nUnVuRnVsbHlUcmltbWFibGUoKSBjb25zdCB7IHJldHVybiBtX3RyaW1tYWJs
ZVRyYWlsaW5nQ29udGVudC5pc1RyYWlsaW5nUnVuRnVsbHlUcmltbWFibGUoKTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxh
eW91dENvbnRleHQuY3BwCmluZGV4IDdmZGFjNDVjMTRlZGM5ZDkxNDY2ODY0YzkyYmQwZWZmNTE5
MmI1NWQuLjFhZmZhNTZiMDY0MmM2ZDIzM2RjMTc2NTgyOWYyMzExZDc4NGJmODQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5l
TGF5b3V0Q29udGV4dC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiRGlzcGxheUJveC5oIgogI2luY2x1ZGUg
IklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCiAjaW5j
bHVkZSAiVGV4dFV0aWwuaCIKQEAgLTMzNCw3ICszMzUsNyBAQCBMaW5lTGF5b3V0Q29udGV4dDo6
TGluZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmNsb3NlKGNvbnN0IExpbmVCdWlsZGVyJiBs
aW5lLAogICAgIEFTU0VSVChsaW5lUmFuZ2UuZW5kIDw9IGxheW91dFJhbmdlLmVuZCk7CiAgICAg
Ly8gQWRqdXN0IGh5cGhlbmF0ZWQgbGluZSBjb3VudC4KICAgICBtX3N1Y2Nlc3NpdmVIeXBoZW5h
dGVkTGluZUNvdW50ID0gcGFydGlhbENvbnRlbnQgJiYgcGFydGlhbENvbnRlbnQtPnRyYWlsaW5n
Q29udGVudEhhc0h5cGhlbiA/IG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRMaW5lQ291bnQgKyAxIDog
MDsKLSAgICByZXR1cm4gTGluZUNvbnRlbnQgeyBwYXJ0aWFsQ29udGVudCwgbGluZVJhbmdlLCBX
VEZNb3ZlKG1fZmxvYXRzKSB9OworICAgIHJldHVybiBMaW5lQ29udGVudCB7IHBhcnRpYWxDb250
ZW50LCBsaW5lUmFuZ2UsIFdURk1vdmUobV9mbG9hdHMpLCBsaW5lLnJ1bnMoKSB9OwogfQogCiB2
b2lkIExpbmVMYXlvdXRDb250ZXh0OjpuZXh0Q29udGVudEZvckxpbmUoTGluZUNhbmRpZGF0ZSYg
bGluZUNhbmRpZGF0ZSwgdW5zaWduZWQgY3VycmVudElubGluZUl0ZW1JbmRleCwgY29uc3QgSW5s
aW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgT3B0aW9uYWw8dW5zaWduZWQ+IHBhcnRpYWxMZWFk
aW5nQ29udGVudExlbmd0aCwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMaW5lV2lkdGgsIElu
bGluZUxheW91dFVuaXQgY3VycmVudExvZ2ljYWxSaWdodCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oCmlu
ZGV4IGExOTc5ODk2YjFlMWI0MDgxNjQ4YmRkZTcxNDBkY2JjNzIwOTk4ZTIuLjYwM2YzNDZkYzEw
YTkyNzEwNDBiMGM0ZTJkNzA4ZmIyNjk3NTk5MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaApAQCAt
NTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIH07CiAgICAgICAgIHVzaW5nIEZsb2F0TGlz
dCA9IFZlY3RvcjxGbG9hdD47CiAgICAgICAgIEZsb2F0TGlzdCBmbG9hdHM7CisgICAgICAgIGNv
bnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBydW5zOwogICAgIH07CiAgICAgTGluZUNvbnRlbnQg
bGF5b3V0SW5saW5lQ29udGVudChMaW5lQnVpbGRlciYsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYs
IE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407460</attachid>
            <date>2020-08-28 04:30:08 -0700</date>
            <delta_ts>2020-08-28 05:14:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215117-20200828043007.patch</filename>
            <type>text/plain</type>
            <size>54959</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjY2M2YxN2YzNTNmYTdj
OTM5ZjBhOWNmMzllNjQxMDYxMGEyZjI1Yi4uYzEyNzE4MmM1Njg4Y2E2NGZlNTNmMmVlMTY4YjVi
YWQ0ODkwMzM2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYwIEBACiAyMDIwLTA4LTI3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGlu
bGluZSBhbGlnbm1lbnQgY29kZSB0byBMaW5lQm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUxMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBMaW5lQm94IGlzIHJlc3BvbnNpYmxlIGZvciBhbGlnbmlu
ZyB0aGUgcnVucyBib3RoIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseSAoTGluZUNvbnRlbnRB
bGlnbmVyIC0+IExpbmVCb3gpLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJv
eGVzRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50Ojp3
aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkhhbmdpbmdD
b250ZW50Ojppc0NvbmRpdGlvbmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SGFuZ2luZ0NvbnRlbnQ6OnNldElzQ29uZGl0aW9uYWwpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpIYW5naW5nQ29udGVudDo6ZXhwYW5kKTogRGVsZXRlZC4K
KyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkhhbmdpbmdD
b250ZW50OjpyZXNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVD
b250ZW50QWxpZ25lcjo6aW5saW5lUmVjdExpc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmZvcm1hdHRpbmdDb250ZXh0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGln
bmVyOjpsYXlvdXRTdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRBbGlnbmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6b250
YWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxp
Z25lcjo6YWxpZ25WZXJ0aWNhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmNvbGxl
Y3RIYW5naW5nQ29udGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OmlubGluZVJlY3RMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJveDo6bG9naWNhbEJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCb3g6OmxvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJveDo6c2Nyb2xsYWJsZU92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJveDo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpsYXlvdXRTdGF0ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnNldExvZ2ljYWxIZWlnaHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpzZXRMb2dpY2FsV2lkdGgpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojptb3ZlSG9yaXpvbnRhbGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6ZXhwYW5kSG9yaXpv
bnRhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2hy
aW5rSG9yaXpvbnRhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJveDo6ZXhwYW5kVmVydGljYWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OnNocmlua1ZlcnRpY2FsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQm94Ojppc0NvbnNpZGVyZWRFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnNldElzQ29uc2lkZXJlZEVtcHR5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0SXNDb25zaWRl
cmVkTm9uRW1wdHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94
OjpMaW5lQm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6
cmVzZXRBbGlnbm1lbnRCYXNlbGluZSk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OmxpbmVMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YXZhaWxhYmxlV2lkdGggY29uc3QpOgorICAgICAgICAq
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dENvbnRleHQ6OmNsb3NlKToKKyAgICAgICAgKiBs
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oOgorCisyMDIwLTA4LTI2
ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKICAgICAgICAgW0xGQ11bSUZDXSBM
aW5lQnVpbGRlcjpSdW4gc2hvdWxkIG5vdCBoYXZlIHZlcnRpY2FsIGdlb21ldHJ5CiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwNjgKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCAxZmY3ZTFkMjgxMmU4ZTk5NWEzMjQ5OTcxNmM1Yjc5YmU5YTBmMjJhLi5hNzlk
ZWNkMGI4NDE5ZDZhYmY3NzE3ZmZhNTZjZjA1ZGVlZDRkY2IxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAt
MTQzNiw2ICsxNDM2LDcgQEAgbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0UXVpcmtzLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5jcHAK
K2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwCiBsYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4
dEl0ZW0uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggMDFmOTJhZDliZmEwOGZmNmI4MWFiNDlkMWE1Mjc2ZmIwNmY2ODcxMS4u
NTg4Yzc2MWRiMTczZGFhYWI0NDVkNGQ5YzU5ZmVkZWRhOTYxZTcyOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTU2MCw2ICs5
NTYwLDcgQEAKIAkJNkY1QjdFQUEyMzAwQTc5RTAwNjdEOUMzIC8qIFRhYmxlR3JpZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUYWJsZUdyaWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2RjYzODNGNDI0MjdBRjQ5MDBEQUJBNTMgLyogTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdC
bG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRJbml0aWFsQ29u
dGFpbmluZ0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGNjYzOEQ0MjQ5
RTI2OEIwMDE5MjVGQyAvKiBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRl
eHRRdWlya3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjY5QTc5OTI0RDZG
QUI4MDBFNkI4NUQgLyogSW5saW5lTGluZUJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxp
bmVMaW5lQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3MzkxOEMyMTA2
Q0VERDAwNkFGMjYyIC8qIExheW91dFVuaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFVuaXRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGNzc4Njg1MjM0OTFBQzYwMDREOTYz
NiAvKiBEaXNwbGF5UGFpbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5UGFpbnRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGNzc4Njg3MjM0OTFBRDcwMDRE
OTYzNiAvKiBEaXNwbGF5UGFpbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaXNwbGF5UGFpbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc0MjAs
NiArMTc0MjEsNyBAQAogCQkJCTExNUNGQTdDMjA4QjhFMTAwMDFFNjk5MSAvKiBJbmxpbmVGb3Jt
YXR0aW5nU3RhdGUuaCAqLywKIAkJCQk2RjdCOENFQzIzNjI2RTY2MDBDOUZGMTUgLyogSW5saW5l
SXRlbS5jcHAgKi8sCiAJCQkJNkZFN0NGQTAyMTc3RUVGMTAwNUIxNTczIC8qIElubGluZUl0ZW0u
aCAqLywKKwkJCQk2RjY5QTc5OTI0RDZGQUI4MDBFNkI4NUQgLyogSW5saW5lTGluZUJveC5jcHAg
Ki8sCiAJCQkJNkZCMjQwMDMyM0RGRjEyNzAwNzk2NDU4IC8qIElubGluZUxpbmVCb3guaCAqLywK
IAkJCQk2RkUxOTgxMzIxNzgzOTdCMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuY3BwICov
LAogCQkJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJlYWtlci5oICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDE0MWE5NDUzMWExMDhi
YTk0MmM0ZjIxM2U0ZDExMTI3Y2QwN2Y3YTcuLjJiOWJiNjEyN2FhNDZmZDFmYmNmN2Y5YmI4NTky
NjY0MzM5YjI4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUg
IklubGluZUxpbmVCb3guaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0SXRlbS5oIgogI2luY2x1ZGUg
IkludmFsaWRhdGlvblN0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCkBAIC03NiwzMDEg
Kzc3LDYgQEAgc3RhdGljIGlubGluZSBjb25zdCBCb3gqIG5leHRJbmxpbmVMZXZlbEJveFRvTGF5
b3V0KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1zdHJ1Y3QgSGFuZ2luZ0NvbnRlbnQgewotcHVibGljOgotICAgIHZvaWQgcmVzZXQoKTsKLQot
ICAgIElubGluZUxheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0g
ICAgYm9vbCBpc0NvbmRpdGlvbmFsKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbmRpdGlvbmFsOyB9
Ci0KLSAgICB2b2lkIHNldElzQ29uZGl0aW9uYWwoKSB7IG1faXNDb25kaXRpb25hbCA9IHRydWU7
IH0KLSAgICB2b2lkIGV4cGFuZChJbmxpbmVMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGggKz0g
d2lkdGg7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIG1faXNDb25kaXRpb25hbCB7IGZhbHNlIH07
Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBtX3dpZHRoIHsgMCB9OwotfTsKLQotdm9pZCBIYW5naW5n
Q29udGVudDo6cmVzZXQoKQotewotICAgIG1faXNDb25kaXRpb25hbCA9IGZhbHNlOwotICAgIG1f
d2lkdGggPSAgMDsKLX0KLQotY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyIHsKLXB1YmxpYzoKLSAg
ICBMaW5lQ29udGVudEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBMaW5l
Qm94JiwgY29uc3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmLCBJbmxpbmVMYXlvdXRVbml0IGF2YWls
YWJsZVdpZHRoKTsKLQotICAgIGVudW0gY2xhc3MgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
IHsgTm8sIFllcyB9OwotICAgIHZvaWQgYWxpZ25Ib3Jpem9udGFsbHkoVGV4dEFsaWduTW9kZSwg
SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKLSAgICB2b2lkIGFsaWduVmVydGljYWxseSgp
OwotICAgIHZvaWQgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7Ci0KLSAgICB1c2luZyBJ
bmxpbmVSdW5SZWN0TGlzdCA9IFZlY3RvcjxEaXNwbGF5OjpJbmxpbmVSZWN0LCAxMD47Ci0gICAg
Y29uc3QgSW5saW5lUnVuUmVjdExpc3QmIGlubGluZVJlY3RMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9ydW5SZWN0TGlzdDsgfQotCi1wcml2YXRlOgotICAgIEhhbmdpbmdDb250ZW50IGNvbGxlY3RI
YW5naW5nQ29udGVudChJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpIGNvbnN0OwotCi0gICAg
Y29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQotICAgIExheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3Rh
dGUoKTsgfQotCi0gICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIG1faW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ7Ci0gICAgTGluZUJveCYgbV9saW5lQm94OwotICAgIGNvbnN0IExpbmVC
dWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7Ci0gICAgSW5saW5lUnVuUmVjdExpc3QgbV9ydW5SZWN0
TGlzdDsKLSAgICBJbmxpbmVMYXlvdXRVbml0IG1fYXZhaWxhYmxlV2lkdGg7Ci19OwotCi1MaW5l
Q29udGVudEFsaWduZXI6OkxpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0
IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdp
ZHRoKQotICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCkKLSAgICAsIG1fbGluZUJveChsaW5lQm94KQotICAgICwgbV9ydW5zKHJ1bnMpCi0gICAg
LCBtX2F2YWlsYWJsZVdpZHRoKGF2YWlsYWJsZVdpZHRoKQotewotICAgIGZvciAoYXV0byYgcnVu
IDogbV9ydW5zKSB7Ci0gICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gWyZdKCkgLT4gSW5saW5lTGF5
b3V0VW5pdCB7Ci0gICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZv
bnRNZXRyaWNzKCk7Ci0gICAgICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVC
cmVhaygpKQotICAgICAgICAgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKLQot
ICAgICAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVy
RW5kKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwotCi0g
ICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgICAgICAg
ICBhdXRvJiBib3hHZW9tZXRyeSA9IGlubGluZUZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9y
Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3go
KSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYm94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpOwotCi0gICAgICAgICAgICAvLyBO
b24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJp
dCBtaXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRl
bnQgaGVpZ2h0IGhlcmUuCi0gICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94
SGVpZ2h0KCk7Ci0gICAgICAgIH07Ci0gICAgICAgIG1fcnVuUmVjdExpc3QuYXBwZW5kKHsgMCwg
cnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgoKSwgcnVuSGVpZ2h0KCkgfSk7Ci0g
ICAgfQotfQotCi12b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9udGFsbHkoVGV4
dEFsaWduTW9kZSBob3Jpem9udGFsQWxpZ25tZW50LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRl
bnQgaXNMYXN0TGluZSkKLXsKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gY29sbGVjdEhhbmdp
bmdDb250ZW50KGlzTGFzdExpbmUpOwotICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBtX2F2YWls
YWJsZVdpZHRoICsgaGFuZ2luZ0NvbnRlbnQud2lkdGgoKTsKLSAgICBpZiAobV9ydW5zLmlzRW1w
dHkoKSB8fCBhdmFpbGFibGVXaWR0aCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
aG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KSB7Ci0gICAgICAg
IGF1dG8gYWNjdW11bGF0ZWRFeHBhbnNpb24gPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fcnVucy5zaXplKCk7ICsraW5kZXgp
IHsKLSAgICAgICAgICAgIG1fcnVuUmVjdExpc3RbaW5kZXhdLm1vdmVIb3Jpem9udGFsbHkoYWNj
dW11bGF0ZWRFeHBhbnNpb24pOwotCi0gICAgICAgICAgICBhdXRvIGhvcml6b250YWxFeHBhbnNp
b24gPSBtX3J1bnNbaW5kZXhdLmV4cGFuc2lvbigpLmhvcml6b250YWxFeHBhbnNpb247Ci0gICAg
ICAgICAgICBtX3J1blJlY3RMaXN0W2luZGV4XS5leHBhbmRIb3Jpem9udGFsbHkoaG9yaXpvbnRh
bEV4cGFuc2lvbik7Ci0gICAgICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBob3Jpem9u
dGFsRXhwYW5zaW9uOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBh
dXRvIGFkanVzdG1lbnRGb3JBbGlnbm1lbnQgPSBbJl0gKGF1dG8gYXZhaWxhYmxlV2lkdGgpIC0+
IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsKLSAgICAgICAgc3dpdGNoIChob3Jpem9udGFs
QWxpZ25tZW50KSB7Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICAgICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OlN0YXJ0OgotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpSaWdodDoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoK
LSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgICAgICByZXR1cm4gc3Rk
OjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGgsIDApOwotICAgICAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJL
aXRDZW50ZXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4o
YXZhaWxhYmxlV2lkdGggLyAyLCAwKTsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0
aWZ5OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICB9OwotCi0gICAgaWYgKGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRG
b3JBbGlnbm1lbnQoYXZhaWxhYmxlV2lkdGgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBsaW5lIGJv
eCBzaG91bGQgbm90IG5lZWQgdG8gYmUgbW92ZWQsIG9ubHkgdGhlIHJ1bnMuCi0gICAgICAgIG1f
bGluZUJveC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICAgICAgZm9yIChhdXRv
JiBydW5SZWN0IDogbV9ydW5SZWN0TGlzdCkKLSAgICAgICAgICAgIHJ1blJlY3QubW92ZUhvcml6
b250YWxseSgqYWRqdXN0bWVudCk7Ci0gICAgfQotfQotCi12b2lkIExpbmVDb250ZW50QWxpZ25l
cjo6YWxpZ25WZXJ0aWNhbGx5KCkKLXsKLSAgICBhdXRvIHNjcm9sbGFibGVPdmVyZmxvd1JlY3Qg
PSBtX2xpbmVCb3gubG9naWNhbFJlY3QoKTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgbV9ydW5zLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvJiBydW4gPSBtX3J1
bnNbaW5kZXhdOwotICAgICAgICBhdXRvJiBydW5SZWN0ID0gbV9ydW5SZWN0TGlzdFtpbmRleF07
Ci0gICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAg
ICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgICAgIGF1dG8gdmVydGlj
YWxBbGlnbiA9IGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsKLSAgICAgICAgYXV0
byBhc2NlbnQgPSBsYXlvdXRCb3guc3R5bGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpOwotCi0g
ICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbikgewotICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246OkJhc2VsaW5lOgotICAgICAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpIHx8IHJ1bi5p
c1RleHQoKSkKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVu
dEJhc2VsaW5lKCkgLSBhc2NlbnQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChydW4uaXNDb250YWlu
ZXJTdGFydCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0
aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAg
bG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50IC0gYm94
R2VvbWV0cnkuYm9yZGVyVG9wKCkgLSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigw
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSAm
JiBsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxp
c2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCkpOwotICAgICAgICAgICAgICAgIC8vIFNwZWMgbWFrZXMgdXMgZ2VuZXJhdGUgYXQgbGVhc3Qg
b25lIGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHkuCi0gICAgICAgICAgICAgICAgYXV0byBpbmxp
bmVCbG9ja0Jhc2VsaW5lID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCkt
PmxpbmVCb3hlcy5sYXN0KCkuYmFzZWxpbmUoKTsKLSAgICAgICAgICAgICAgICAvLyBUaGUgaW5s
aW5lLWJsb2NrJ3MgYmFzZWxpbmUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIGl0cyBjb250ZW50IGJv
eC4gTGV0J3MgY29udmVydCBpdCByZWxhdGl2ZSB0byB0aGUgbWFyZ2luIGJveC4KLSAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgX19fX19fX19fX19fX19fIDwtIG1hcmdpbiBib3gKLSAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCAg
X19fX19fX19fX19fICA8LSBib3JkZXIgYm94Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAg
fCB8Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8ICBfX19fX19fX18gIDwtIGNvbnRl
bnQgYm94Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8IHwgICBeCi0gICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgfCB8IHwgICB8ICA8LSBiYXNlbGluZSBvZmZzZXQKLSAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICB8IHwgfCAgIHwKLSAgICAgICAgICAgICAgICAvLyAgICAgdGV4
dCB8IHwgfCAgIHYgdGV4dAotICAgICAgICAgICAgICAgIC8vICAgICAtLS0tLXwtfC18LS0tLS0t
LS0tLSA8LSBiYXNlbGluZQotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgYXV0
byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91
dEJveCk7Ci0gICAgICAgICAgICAgICAgYXV0byBiYXNlbGluZUZyb21NYXJnaW5Cb3ggPSBib3hH
ZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2Vv
bWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2VsaW5lOwotICAg
ICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAt
IGJhc2VsaW5lRnJvbU1hcmdpbkJveDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9y
Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5h
bGlnbm1lbnRCYXNlbGluZSgpIC0gKGJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib3hH
ZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUpICsgcnVuUmVjdC5oZWlnaHQo
KSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgotICAgICAgICAgICAg
bG9naWNhbFRvcCA9IDBfbHU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWZXJ0
aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94Lmxv
Z2ljYWxCb3R0b20oKSAtIHJ1blJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBydW5SZWN0LnNldFRvcChs
b2dpY2FsVG9wKTsKLSAgICAgICAgLy8gQWRqdXN0IHNjcm9sbGFibGUgb3ZlcmZsb3cgaWYgdGhl
IHJ1biBvdmVyZmxvd3MgdGhlIGxpbmUuCi0gICAgICAgIHNjcm9sbGFibGVPdmVyZmxvd1JlY3Qu
ZXhwYW5kVmVydGljYWxseVRvQ29udGFpbihydW5SZWN0KTsKLSAgICAgICAgLy8gQ29udmVydCBy
dW5zIGZyb20gcmVsYXRpdmUgdG8gdGhlIGxpbmUgdG9wL2xlZnQgdG8gdGhlIGZvcm1hdHRpbmcg
cm9vdCdzIGJvcmRlciBib3ggdG9wL2xlZnQuCi0gICAgICAgIHJ1blJlY3QubW92ZVZlcnRpY2Fs
bHkobV9saW5lQm94LmxvZ2ljYWxUb3AoKSk7Ci0gICAgICAgIHJ1blJlY3QubW92ZUhvcml6b250
YWxseShtX2xpbmVCb3gubG9naWNhbExlZnQoKSk7Ci0gICAgfQotICAgIG1fbGluZUJveC5zZXRT
Y3JvbGxhYmxlT3ZlcmZsb3coc2Nyb2xsYWJsZU92ZXJmbG93UmVjdCk7Ci19Ci0KLXZvaWQgTGlu
ZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKQotewotICAgIHVu
c2lnbmVkIGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgYXV0byBoYXNTZWVu
RGlyZWN0VGV4dE9yTGluZUJyZWFrID0gZmFsc2U7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1
bnMpIHsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgICAg
ICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgICAgICBpZiAocnVuLmlzVGV4
dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBpZiAoaW5saW5lQ29udGFp
bmVyTmVzdGluZ0xldmVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBhZGp1
c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUgcGFyZW50IGlubGluZSBj
b250YWluZXIuIAotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWspIHsKLSAgICAgICAgICAg
ICAgICAvLyBlLmcgZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3IgPGRpdj48c3Bhbj5uZXN0ZWQ8c3Bh
bj5maXJzdCBkaXJlY3QgdGV4dDwvZGl2Pi4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSB0
cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocnVu
LmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgKytpbmxpbmVDb250YWluZXJOZXN0
aW5nTGV2ZWw7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBzdHJldGNoIHRoZSBs
aW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KLSAgICAgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMs
IHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVpZ2h0
LgotICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygpOwot
ICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpC
YXNlbGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBMaW5lQm94Ojpo
YWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgp
KTsKLSAgICAgICAgICAgICAgICAvLyBCb3RoIGhhbGZsZWFkaW5nIGFzY2VudCBhbmQgZGVzY2Vu
dCBjb3VsZCBiZSBuZWdhdGl2ZSAodGFsbCBmb250IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1
ZSkKLSAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuZGVzY2VudCA+IDApCi0gICAgICAg
ICAgICAgICAgICAgIG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmRl
c2NlbnQpOwotICAgICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5hc2NlbnQgPiAwKQotICAg
ICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5n
LmFzY2VudCk7Ci0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIobV9saW5lQm94LmFzY2VudEFuZERlc2NlbnQoKS5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihmb250TWV0cmljcy5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChydW4uaXNDb250YWluZXJFbmQoKSkgewotICAgICAgICAgICAg
Ly8gVGhlIGxpbmUncyBiYXNlbGluZSBhbmQgaGVpZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGFkanVz
dGVkIGF0IENvbnRhaW5lclN0YXJ0LgotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNvbnRhaW5l
ck5lc3RpbmdMZXZlbCk7Ci0gICAgICAgICAgICAtLWlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZl
bDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJ1bi5p
c0JveCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2lu
Qm94SGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAoc3R5bGUudmVydGljYWxBbGlnbigpKSB7Ci0gICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OkJhc2VsaW5lOiB7Ci0gICAgICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0lu
bGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJbmxpbmUtYmxvY2tzIHdpdGggaW5s
aW5lIGNvbnRlbnQgYWx3YXlzIGhhdmUgYmFzZWxpbmVzLgotICAgICAgICAgICAgICAgICAgICBh
dXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9y
bWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBp
ZiBpdCBpcyBlbXB0eS4KLSAgICAgICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmVCb3ggPSBm
b3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKTsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBiZWZvcmVIZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJn
aW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGlu
Z1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBbGln
bm1lbnRCYXNlbGluZUlmR3JlYXRlcihiZWZvcmVIZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGlu
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAvLyBOb24gaW5saW5lLWJsb2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxp
bmUgKGluY2x1ZGluZyB0aGVpciBib3R0b20gbWFyZ2luKS4KLSAgICAgICAgICAgICAgICAgICAg
bV9saW5lQm94LnNldEFzY2VudElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAg
ICAgICAgICAgICAvLyBJZ25vcmUgbmVnYXRpdmUgZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNj
ZW50IGlzIGEgdGhpbmcpLgotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNh
bEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRV
bml0PigwLCBtX2xpbmVCb3guYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKLSAgICAgICAgICAgICAgICAvLyBUb3AgYWxp
Z24gY29udGVudCBuZXZlciBjaGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhl
IGJvdHRvbSBvZiB0aGUgbGluZSBmdXJ0aGVyIGRvd24uCi0gICAgICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7
Ci0gICAgICAgICAgICAgICAgLy8gQm90dG9tIGFsaWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMg
dGhlIGJhc2VsaW5lIGZ1cnRoZXIgZG93biBmcm9tIHRoZSBsaW5lIHRvcC4KLSAgICAgICAgICAg
ICAgICBhdXRvIGxpbmVMb2dpY2FsSGVpZ2h0ID0gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsK
LSAgICAgICAgICAgICAgICBpZiAobWFyZ2luQm94SGVpZ2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0
ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFs
aWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpICsg
KG1hcmdpbkJveEhlaWdodCAtIGxpbmVMb2dpY2FsSGVpZ2h0KSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUhhbmdpbmdDb250ZW50IExpbmVDb250ZW50QWxpZ25l
cjo6Y29sbGVjdEhhbmdpbmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xh
c3RMaW5lV2l0aElubGluZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgYXV0byBoYW5naW5nQ29udGVu
dCA9IEhhbmdpbmdDb250ZW50IHsgfTsKLSAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50ID09IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQotICAgICAgICBoYW5naW5n
Q29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1h
a2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKLSAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0
YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBoYW5naW5nQ29udGVu
dC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJlc2VydmVkIG9yIGh1bmcgd2hp
dGVzcGFjZS4KLSAgICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNw
YWNlOjpQcmVXcmFwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIFRoaXMgaXMgZWl0
aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFpbGluZyB3aGl0ZXNwYWNl
LgotICAgICAgICBoYW5naW5nQ29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdp
ZHRoKCkpOwotICAgIH0KLSAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7Ci19Ci0KIHZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3Rh
dGUmIGludmFsaWRhdGlvblN0YXRlLCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQm
IGNvbnN0cmFpbnRzKQogewogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExh
eW91dCwgc3RyZWFtIDw8ICJbU3RhcnRdIC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgLT4g
Zm9ybWF0dGluZyByb290KCIgPDwgJnJvb3QoKSA8PCAiKSIpOwpAQCAtNDQ2LDU0ICsxNTIsMjQg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYg
aW5saW5lSXRlbXMsIExpbmVMYXlvdXRDb24KICAgICAgICAgYXV0byBwYXJ0aWFsTGVhZGluZ0Nv
bnRlbnRMZW5ndGggPSBwcmV2aW91c0xpbmUgPyBwcmV2aW91c0xpbmUtPm92ZXJmbG93Q29udGVu
dExlbmd0aCA6IFdURjo6bnVsbG9wdDsKICAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVM
YXlvdXRDb250ZXh0LmxheW91dElubGluZUNvbnRlbnQobGluZSwgbmVlZHNMYXlvdXRSYW5nZSwg
cGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKICAgICAgICAgYXV0byBsaW5lQ29udGVudFJh
bmdlID0gbGluZUNvbnRlbnQuaW5saW5lSXRlbVJhbmdlOwotCi0gICAgICAgIC8vIEZJWE1FOiBU
aGlzIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBldmVudHVhbGx5IGdldCBtZXJnZWQgdG8gTGluZUJv
eC4KICAgICAgICAgYXV0byBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPSBbJl0gewotICAg
ICAgICAgICAgaWYgKGxpbmVDb250ZW50UmFuZ2UuZW5kID09IG5lZWRzTGF5b3V0UmFuZ2UuZW5k
KQotICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQ29udGVudEFsaWduZXI6OklzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudDo6WWVzOwogICAgICAgICAgICAgaWYgKGxpbmVDb250ZW50LnBhcnRp
YWxDb250ZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQ29udGVudEFsaWduZXI6Oklz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaWYgKGxpbmVDb250ZW50UmFuZ2UuZW5kID09IG5lZWRzTGF5b3V0
UmFuZ2UuZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgLy8g
T21pdCBmbG9hdHMgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIGxhc3QgbGluZSB3aXRoIGlubGluZSBj
b250ZW50LgogICAgICAgICAgICAgZm9yIChhdXRvIGkgPSBuZWVkc0xheW91dFJhbmdlLmVuZDsg
aS0tOykgewogICAgICAgICAgICAgICAgIGlmICghaW5saW5lSXRlbXNbaV0uaXNGbG9hdCgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSA9PSBsaW5lQ29udGVudFJhbmdlLmVuZCAtIDEg
PyBMaW5lQ29udGVudEFsaWduZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzIDog
TGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaSA9PSBsaW5lQ29udGVudFJhbmdlLmVuZCAtIDE7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25l
IG5vbi1mbG9hdCBpdGVtLgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQ6Ok5vOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9KCk7Ci0gICAg
ICAgIGxpbmUuY2xvc2UoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID09IExpbmVDb250ZW50
QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpOwotCi0gICAgICAgIGF1
dG8gbGluZUJveCA9IExpbmVCb3ggeyBEaXNwbGF5OjpJbmxpbmVSZWN0IHsgbGluZUNvbnN0cmFp
bnRzLmxvZ2ljYWxUb3BMZWZ0LCBsaW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgbGluZUNvbnN0
cmFpbnRzLmxpbmVIZWlnaHQgfSwgTGluZUJveDo6aGFsZkxlYWRpbmdNZXRyaWNzKHJvb3QoKS5z
dHlsZSgpLmZvbnRNZXRyaWNzKCksIGxpbmVDb25zdHJhaW50cy5saW5lSGVpZ2h0KSB9OwotICAg
ICAgICBhdXRvIGNvbnRlbnRBbGlnbmVyID0gTGluZUNvbnRlbnRBbGlnbmVyIHsgKnRoaXMsIGxp
bmVCb3gsIGxpbmUucnVucygpLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgfTsKLSAgICAgICAgYXV0
byBhbGlnbkxpbmVDb250ZW50ID0gWyZdIHsKLSAgICAgICAgICAgIGNvbnRlbnRBbGlnbmVyLmFk
anVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpOwotICAgICAgICAgICAgaWYgKGxpbmUuaXNWaXN1
YWxseUVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBsaW5lQm94LnJlc2V0QWxpZ25tZW50QmFz
ZWxpbmUoKTsKLSAgICAgICAgICAgICAgICBsaW5lQm94LnNldExvZ2ljYWxIZWlnaHQoeyB9KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFJlbW92ZSBkZXNjZW50IHdoZW4gYWxsIGNv
bnRlbnQgaXMgYmFzZWxpbmUgYWxpZ25lZCBidXQgbm9uZSBvZiB0aGVtIGhhdmUgZGVzY2VudC4K
LSAgICAgICAgICAgIGlmIChxdWlya3MoKS5saW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhsaW5l
LnJ1bnMoKSkpIHsKLSAgICAgICAgICAgICAgICBsaW5lQm94LnNocmlua1ZlcnRpY2FsbHkobGlu
ZUJveC5hc2NlbnRBbmREZXNjZW50KCkuZGVzY2VudCk7Ci0gICAgICAgICAgICAgICAgbGluZUJv
eC5yZXNldERlc2NlbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRlbnRBbGln
bmVyLmFsaWduVmVydGljYWxseSgpOwotCi0gICAgICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpv
bnRhbEFsaWdubWVudCA9IFsmXSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJvb3QoKS5zdHlsZSgp
LnRleHRBbGlnbigpICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKTsKLSAgICAgICAgICAgICAgICAv
LyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkg
dGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICAvLyBpbiBvcmRlciB0
byBleGFjdGx5IGZpbGwgdGhlIGxpbmUgYm94LiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBi
eSB0ZXh0LWFsaWduLWxhc3QsCi0gICAgICAgICAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZv
cmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25l
ZC4KLSAgICAgICAgICAgICAgICBpZiAobGluZS5ydW5zKCkubGFzdCgpLmlzTGluZUJyZWFrKCkg
fHwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID09IExpbmVDb250ZW50QWxpZ25lcjo6SXNM
YXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBUZXh0QWxpZ25Nb2RlOjpTdGFydDsKLSAgICAgICAgICAgICAgICByZXR1cm4gVGV4dEFsaWdu
TW9kZTo6SnVzdGlmeTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBjb250ZW50QWxpZ25l
ci5hbGlnbkhvcml6b250YWxseShjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQoKSwgaXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50KTsKLSAgICAgICAgfTsKLQotICAgICAgICBhbGlnbkxpbmVD
b250ZW50KCk7Ci0gICAgICAgIHNldERpc3BsYXlCb3hlc0ZvckxpbmUobGluZSwgY29udGVudEFs
aWduZXIuaW5saW5lUmVjdExpc3QoKSwgbGluZUJveCwgbGluZUNvbnRlbnQsIGNvbnN0cmFpbnRz
Lmhvcml6b250YWwpOworICAgICAgICBsaW5lLmNsb3NlKGlzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudCk7CisgICAgICAgIGF1dG8gbGluZVJlY3QgPSBEaXNwbGF5OjpJbmxpbmVSZWN0IHsgbGlu
ZUNvbnN0cmFpbnRzLmxvZ2ljYWxUb3BMZWZ0LCBsaW5lLmxpbmVMb2dpY2FsV2lkdGgoKSwgbGlu
ZUNvbnN0cmFpbnRzLmxpbmVIZWlnaHR9OworICAgICAgICBhdXRvIGxpbmVCb3ggPSBMaW5lQm94
IHsgKnRoaXMsIGxpbmVSZWN0LCBsaW5lQ29udGVudC5ydW5zLCBsaW5lLmlzVmlzdWFsbHlFbXB0
eSgpID8gTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6WWVzIDogTGluZUJveDo6SXNMaW5l
VmlzdWFsbHlFbXB0eTo6Tm8sIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA/IExpbmVCb3g6
OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzIDogTGluZUJveDo6SXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50OjpObyB9OworICAgICAgICBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGxp
bmVDb250ZW50LCBsaW5lQm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKIAogICAgICAgICBp
ZiAoIWxpbmVDb250ZW50UmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobmVl
ZHNMYXlvdXRSYW5nZS5zdGFydCA8IGxpbmVDb250ZW50UmFuZ2UuZW5kKTsKQEAgLTUxNyw3ICsx
OTMsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KElubGluZUl0
ZW1zJiBpbmxpbmVJdGVtcywgTGluZUxheW91dENvbgogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KICAgICAgICAgLy8gRmxvYXRzIHByZXZlbnRlZCB1cyBwbGFjaW5nIGFueSBjb250
ZW50IG9uIHRoZSBsaW5lLgotICAgICAgICBBU1NFUlQobGluZS5ydW5zKCkuaXNFbXB0eSgpKTsK
KyAgICAgICAgQVNTRVJUKGxpbmVDb250ZW50LnJ1bnMuaXNFbXB0eSgpKTsKICAgICAgICAgQVNT
RVJUKGxpbmUuaGFzSW50cnVzaXZlRmxvYXQoKSk7CiAgICAgICAgIC8vIE1vdmUgdGhlIG5leHQg
bGluZSBiZWxvdyB0aGUgaW50cnVzaXZlIGZsb2F0LgogICAgICAgICBhdXRvIGZsb2F0aW5nQ29u
dGV4dCA9IEZsb2F0aW5nQ29udGV4dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgp
LmZsb2F0aW5nU3RhdGUoKSB9OwpAQCAtODA3LDEwICs0ODMsOSBAQCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6TGluZUNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb25zdHJh
aW50c0ZvcgogICAgIHJldHVybiBMaW5lQ29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVmdCwg
bGluZUxvZ2ljYWxUb3AgfSwgbGluZUxvZ2ljYWxSaWdodCAtIGxpbmVMb2dpY2FsTGVmdCwgaW5p
dGlhbExpbmVIZWlnaHQsIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB9OwogfQogCi12b2lkIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVC
dWlsZGVyJiBsaW5lLCBjb25zdCBMaW5lQ29udGVudEFsaWduZXI6OklubGluZVJ1blJlY3RMaXN0
JiBydW5SZWN0TGlzdCwgY29uc3QgTGluZUJveCYgbGluZUJveCwgY29uc3QgTGluZUxheW91dENv
bnRleHQ6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29u
dGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewogICAgIGF1dG8mIGZvcm1h
dHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwotCiAgICAgaWYgKCFsaW5lQ29u
dGVudC5mbG9hdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0g
RmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAqdGhpcywgZm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5n
U3RhdGUoKSB9OwogICAgICAgICAvLyBNb3ZlIGZsb2F0cyB0byB0aGVpciBmaW5hbCBwb3NpdGlv
bi4KQEAgLTgzNiw3ICs1MTEsOCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRE
aXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyJiBsaW5lLCBjbwogICAgIGF1dG8g
bGluZUluZGV4ID0gaW5saW5lQ29udGVudC5saW5lQm94ZXMuc2l6ZSgpOwogICAgIGF1dG8gbGlu
ZUlua092ZXJmbG93ID0gbGluZUJveC5zY3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICAvLyBDb21w
dXRlIGJveCBmaW5hbCBnZW9tZXRyeS4KLSAgICBhdXRvJiBsaW5lUnVucyA9IGxpbmUucnVucygp
OworICAgIGF1dG8mIHJ1blJlY3RMaXN0ID0gbGluZUJveC5pbmxpbmVSZWN0TGlzdCgpOworICAg
IGF1dG8mIGxpbmVSdW5zID0gbGluZUNvbnRlbnQucnVuczsKICAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgbGluZVJ1bnMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGF1dG8m
IGxpbmVSdW4gPSBsaW5lUnVucy5hdChpbmRleCk7CiAgICAgICAgIGF1dG8gbG9naWNhbFJlY3Qg
PSBydW5SZWN0TGlzdFtpbmRleF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRl
eCAzMzk1NDQwOTI5NmI5YTBhYWU4NjhhNWM5NGNjMmQwNWJmN2E2NmYzLi40YTJjMTM3YWRjZGVl
NzRlOGY0NDM3NjMwZDkwNmVmMzM0NmRmMTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmgKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIElubGlu
ZUZvcm1hdHRpbmdTdGF0ZTsKIGNsYXNzIEludmFsaWRhdGlvblN0YXRlOworY2xhc3MgTGluZUJv
eDsKIAogLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBsYXlvdXQgbG9naWMgZm9yIGlubGlu
ZSBmb3JtYXR0aW5nIGNvbnRleHRzLgogLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIyL3Zp
c3VyZW4uaHRtbCNpbmxpbmUtZm9ybWF0dGluZwpAQCAtOTQsNyArOTUsNyBAQCBwcml2YXRlOgog
ICAgICAgICBib29sIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB7IGZhbHNlIH07CiAgICAgfTsK
ICAgICBMaW5lQ29uc3RyYWludHMgY29uc3RyYWludHNGb3JMaW5lKGNvbnN0IEhvcml6b250YWxD
b25zdHJhaW50cyYsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApOwotICAgIHZvaWQg
c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlciYsIGNvbnN0IFZlY3RvcjxE
aXNwbGF5OjpJbmxpbmVSZWN0LCAxMD4mLCBjb25zdCBMaW5lQm94JiwgY29uc3QgTGluZUxheW91
dENvbnRleHQ6OkxpbmVDb250ZW50JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7Cisg
ICAgdm9pZCBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpM
aW5lQ29udGVudCYsIGNvbnN0IExpbmVCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
KTsKICAgICB2b2lkIGludmFsaWRhdGVGb3JtYXR0aW5nU3RhdGUoY29uc3QgSW52YWxpZGF0aW9u
U3RhdGUmKTsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0
YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihGb3Jt
YXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1
aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggYmE3NTVkOTMxMWExM2U1MmNiYTI3ZDRi
NzhiODMxM2MyYzBjZmRkOS4uMGQzZTAzNjJmMDY5MDI4NmQ0YjZkNTA2NGI3ODk4OGUzMGZkNGE5
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcApAQCAt
MjQsNyArMjQsOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNw
bGF5Qm94LmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJJbmxpbmVMaW5lQm94LmgiCiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQm94LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOGFhM2RkMDBhN2E1ZWE2NDk1OWZhOTNm
OTczNzkxZmJhYjM2ZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKQEAgLTAsMCArMSwzNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJveC5o
IgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitzdHJ1Y3QgSGFuZ2luZ0NvbnRlbnQgewor
cHVibGljOgorICAgIHZvaWQgcmVzZXQoKTsKKworICAgIElubGluZUxheW91dFVuaXQgd2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgYm9vbCBpc0NvbmRpdGlvbmFsKCkgY29u
c3QgeyByZXR1cm4gbV9pc0NvbmRpdGlvbmFsOyB9CisKKyAgICB2b2lkIHNldElzQ29uZGl0aW9u
YWwoKSB7IG1faXNDb25kaXRpb25hbCA9IHRydWU7IH0KKyAgICB2b2lkIGV4cGFuZChJbmxpbmVM
YXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGggKz0gd2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBi
b29sIG1faXNDb25kaXRpb25hbCB7IGZhbHNlIH07CisgICAgSW5saW5lTGF5b3V0VW5pdCBtX3dp
ZHRoIHsgMCB9OworfTsKKwordm9pZCBIYW5naW5nQ29udGVudDo6cmVzZXQoKQoreworICAgIG1f
aXNDb25kaXRpb25hbCA9IGZhbHNlOworICAgIG1fd2lkdGggPSAgMDsKK30KKworTGluZUJveDo6
TGluZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQsIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIGxpbmVSZWN0LCBjb25zdCBMaW5lQnVp
bGRlcjo6UnVuTGlzdCYgcnVucywgSXNMaW5lVmlzdWFsbHlFbXB0eSBpc0xpbmVWaXN1YWxseUVt
cHR5LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50KQorICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCkKKyAgICAsIG1fcnVucyhydW5zKQorICAgICwgbV9yZWN0KGxpbmVSZWN0KQorICAgICwg
bV9zY3JvbGxhYmxlT3ZlcmZsb3cobGluZVJlY3QpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICBtX2hhc1ZhbGlkQWxpZ25tZW50QmFzZWxpbmUgPSB0cnVlOworI2VuZGlmCisgICAgYXV0byYg
cm9vdFN0eWxlID0gaW5saW5lRm9ybWF0dGluZ0NvbnRleHQucm9vdCgpLnN0eWxlKCk7CisgICAg
YXV0byBoYWxmTGVhZGluZ01ldHJpY3MgPSB0aGlzLT5oYWxmTGVhZGluZ01ldHJpY3Mocm9vdFN0
eWxlLmZvbnRNZXRyaWNzKCksIGxpbmVSZWN0LmhlaWdodCgpKTsKKworICAgIG1fYWxpZ25tZW50
QmFzZWxpbmUgPSBoYWxmTGVhZGluZ01ldHJpY3MuYXNjZW50OworICAgIG1fcm9vdElubGluZUJv
eCA9IElubGluZUJveCB7IGhhbGZMZWFkaW5nTWV0cmljcyB9OworCisgICAgYXV0byBjb250ZW50
TG9naWNhbFdpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgZm9yIChhdXRvJiBydW4g
OiBtX3J1bnMpIHsKKyAgICAgICAgYXV0byBydW5IZWlnaHQgPSBbJl0oKSAtPiBJbmxpbmVMYXlv
dXRVbml0IHsKKyAgICAgICAgICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcnVuLnN0eWxlKCkuZm9u
dE1ldHJpY3MoKTsKKyAgICAgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJy
ZWFrKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOworCisg
ICAgICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJF
bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7CisKKyAg
ICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKKyAgICAgICAgICAg
IGF1dG8mIGJveEdlb21ldHJ5ID0gaW5saW5lRm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgp
IHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBib3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7CisKKyAgICAgICAgICAgIC8vIE5v
bi1yZXBsYWNlZCBpbmxpbmUgYm94IChlLmcuIGlubGluZS1ibG9jaykuIEl0IGxvb2tzIGEgYml0
IG1pc2xlYWRpbmcgYnV0IHRoZWlyIG1hcmdpbiBib3ggaXMgY29uc2lkZXJlZCB0aGUgY29udGVu
dCBoZWlnaHQgaGVyZS4KKyAgICAgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5Cb3hI
ZWlnaHQoKTsKKyAgICAgICAgfTsKKyAgICAgICAgbV9ydW5SZWN0TGlzdC5hcHBlbmQoeyAwLCBy
dW4ubG9naWNhbExlZnQoKSwgcnVuLmxvZ2ljYWxXaWR0aCgpLCBydW5IZWlnaHQoKSB9KTsKKyAg
ICAgICAgY29udGVudExvZ2ljYWxXaWR0aCArPSBydW4ubG9naWNhbFdpZHRoKCk7CisgICAgfQor
ICAgIG1fc2Nyb2xsYWJsZU92ZXJmbG93LnNldFdpZHRoKHN0ZDo6bWF4KGxpbmVSZWN0LndpZHRo
KCksIGNvbnRlbnRMb2dpY2FsV2lkdGgpKTsKKyAgICBhbGlnblZlcnRpY2FsbHkoKTsKKyAgICBh
bGlnbkhvcml6b250YWxseShsaW5lUmVjdC53aWR0aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCwg
aXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKworICAgIGlmIChpc0xpbmVWaXN1YWxseUVt
cHR5ID09IElzTGluZVZpc3VhbGx5RW1wdHk6OlllcykgeworICAgICAgICBtX3JlY3Quc2V0SGVp
Z2h0KHsgfSk7CisgICAgICAgIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNjZW50ID0geyB9
OworICAgIH0KKyAgICAvLyA/PworICAgIC8vIFJlbW92ZSBkZXNjZW50IHdoZW4gYWxsIGNvbnRl
bnQgaXMgYmFzZWxpbmUgYWxpZ25lZCBidXQgbm9uZSBvZiB0aGVtIGhhdmUgZGVzY2VudC4KKyAg
ICAvLyBpZiAocXVpcmtzKCkubGluZURlc2NlbnROZWVkc0NvbGxhcHNpbmcobGluZS5ydW5zKCkp
KSB7CisgICAgLy8gICAgIGxpbmVCb3guc2hyaW5rVmVydGljYWxseShsaW5lQm94LmFzY2VudEFu
ZERlc2NlbnQoKS5kZXNjZW50KTsKKyAgICAvLyAgICAgbGluZUJveC5yZXNldERlc2NlbnQoKTsK
KyAgICAvLyB9Cit9CisKK3ZvaWQgTGluZUJveDo6YWxpZ25Ib3Jpem9udGFsbHkoSW5saW5lTGF5
b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFz
dExpbmUpCit7CisgICAgYXV0byBoYW5naW5nQ29udGVudCA9IGNvbGxlY3RIYW5naW5nQ29udGVu
dChpc0xhc3RMaW5lKTsKKyAgICBhdmFpbGFibGVXaWR0aCArPSBoYW5naW5nQ29udGVudC53aWR0
aCgpOworICAgIGlmIChtX3J1bnMuaXNFbXB0eSgpIHx8IGF2YWlsYWJsZVdpZHRoIDw9IDApCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50ID0g
WyZdIHsKKyAgICAgICAgYXV0byYgcm9vdFN0eWxlID0gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290
KCkuc3R5bGUoKTsKKyAgICAgICAgaWYgKHJvb3RTdHlsZS50ZXh0QWxpZ24oKSAhPSBUZXh0QWxp
Z25Nb2RlOjpKdXN0aWZ5KQorICAgICAgICAgICAgcmV0dXJuIHJvb3RTdHlsZS50ZXh0QWxpZ24o
KTsKKyAgICAgICAgLy8gVGV4dCBpcyBqdXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qg
c3BlY2lmaWVkIGJ5IHRoZSB0ZXh0LWp1c3RpZnkgcHJvcGVydHksCisgICAgICAgIC8vIGluIG9y
ZGVyIHRvIGV4YWN0bHkgZmlsbCB0aGUgbGluZSBib3guIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lm
aWVkIGJ5IHRleHQtYWxpZ24tbGFzdCwKKyAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZvcmUg
YSBmb3JjZWQgYnJlYWsgb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4K
KyAgICAgICAgaWYgKG1fcnVucy5sYXN0KCkuaXNMaW5lQnJlYWsoKSB8fCBpc0xhc3RMaW5lID09
IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQorICAgICAgICAgICAgcmV0dXJuIFRl
eHRBbGlnbk1vZGU6OlN0YXJ0OworICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6SnVzdGlm
eTsKKyAgICB9KCk7CisKKyAgICBpZiAoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50ID09IFRl
eHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsKKyAgICAgICAgYXV0byBhY2N1bXVsYXRlZEV4cGFuc2lv
biA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgbV9ydW5zLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgbV9ydW5SZWN0
TGlzdFtpbmRleF0ubW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lvbik7CisKKyAg
ICAgICAgICAgIGF1dG8gaG9yaXpvbnRhbEV4cGFuc2lvbiA9IG1fcnVuc1tpbmRleF0uZXhwYW5z
aW9uKCkuaG9yaXpvbnRhbEV4cGFuc2lvbjsKKyAgICAgICAgICAgIG1fcnVuUmVjdExpc3RbaW5k
ZXhdLmV4cGFuZEhvcml6b250YWxseShob3Jpem9udGFsRXhwYW5zaW9uKTsKKyAgICAgICAgICAg
IGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGhvcml6b250YWxFeHBhbnNpb247CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gYWRqdXN0bWVudEZvckFsaWdubWVu
dCA9IFsmXSAoYXV0byBhdmFpbGFibGVXaWR0aCkgLT4gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5p
dD4geworICAgICAgICBzd2l0Y2ggKGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCkgeworICAg
ICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6V2ViS2l0TGVmdDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6Cisg
ICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6CisgICAgICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6RW5kOgorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91
dFVuaXQ+KGF2YWlsYWJsZVdpZHRoLCAwKTsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpD
ZW50ZXI6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgorICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoIC8g
MiwgMCk7CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfTsK
KworICAgIGlmIChhdXRvIGFkanVzdG1lbnQgPSBhZGp1c3RtZW50Rm9yQWxpZ25tZW50KGF2YWls
YWJsZVdpZHRoKSkgeworICAgICAgICAvLyBGSVhNRTogbGluZSBib3ggc2hvdWxkIG5vdCBuZWVk
IHRvIGJlIG1vdmVkLCBvbmx5IHRoZSBydW5zLgorICAgICAgICBtX3JlY3QubW92ZUhvcml6b250
YWxseSgqYWRqdXN0bWVudCk7CisgICAgICAgIGZvciAoYXV0byYgcnVuUmVjdCA6IG1fcnVuUmVj
dExpc3QpCisgICAgICAgICAgICBydW5SZWN0Lm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQp
OworICAgIH0KK30KKwordm9pZCBMaW5lQm94OjphbGlnblZlcnRpY2FsbHkoKQoreworICAgIGFk
anVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpOworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBtX3J1bnMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8mIHJ1biA9IG1f
cnVuc1tpbmRleF07CisgICAgICAgIGF1dG8mIHJ1blJlY3QgPSBtX3J1blJlY3RMaXN0W2luZGV4
XTsKKyAgICAgICAgYXV0byBsb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAg
ICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKKyAgICAgICAgYXV0byB2ZXJ0
aWNhbEFsaWduID0gbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpOworICAgICAgICBh
dXRvIGFzY2VudCA9IGxheW91dEJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CisK
KyAgICAgICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWduKSB7CisgICAgICAgIGNhc2UgVmVydGljYWxB
bGlnbjo6QmFzZWxpbmU6CisgICAgICAgICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkgfHwgcnVu
LmlzVGV4dCgpKQorICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBhbGlnbm1lbnRCYXNlbGlu
ZSgpIC0gYXNjZW50OworICAgICAgICAgICAgZWxzZSBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxU
b3AgPSBhbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50IC0gYm94R2VvbWV0cnkuYm9yZGVyVG9w
KCkgLSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSAmJiBsYXlvdXRCb3guZXN0YWJs
aXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYg
Zm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRp
bmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpOworICAgICAgICAgICAg
ICAgIC8vIFNwZWMgbWFrZXMgdXMgZ2VuZXJhdGUgYXQgbGVhc3Qgb25lIGxpbmUgLWV2ZW4gaWYg
aXQgaXMgZW1wdHkuCisgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVCbG9ja0Jhc2VsaW5lID0g
Zm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCktPmxpbmVCb3hlcy5sYXN0KCku
YmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICAvLyBUaGUgaW5saW5lLWJsb2NrJ3MgYmFzZWxp
bmUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIGl0cyBjb250ZW50IGJveC4gTGV0J3MgY29udmVydCBp
dCByZWxhdGl2ZSB0byB0aGUgbWFyZ2luIGJveC4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgX19fX19fX19fX19fX19fIDwtIG1hcmdpbiBib3gKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCAgX19fX19fX19fX19fICA8LSBi
b3JkZXIgYm94CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgfCB8ICBfX19fX19fX18gIDwtIGNvbnRlbnQgYm94CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgfCB8IHwgICBeCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
fCB8IHwgICB8ICA8LSBiYXNlbGluZSBvZmZzZXQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICB8IHwgfCAgIHwKKyAgICAgICAgICAgICAgICAvLyAgICAgdGV4dCB8IHwgfCAgIHYgdGV4dAor
ICAgICAgICAgICAgICAgIC8vICAgICAtLS0tLXwtfC18LS0tLS0tLS0tLSA8LSBiYXNlbGluZQor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBm
b3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAg
ICAgICAgYXV0byBiYXNlbGluZUZyb21NYXJnaW5Cb3ggPSBib3hHZW9tZXRyeS5tYXJnaW5CZWZv
cmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgp
LnZhbHVlT3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2VsaW5lOworICAgICAgICAgICAgICAgIGxvZ2lj
YWxUb3AgPSBhbGlnbm1lbnRCYXNlbGluZSgpIC0gYmFzZWxpbmVGcm9tTWFyZ2luQm94OworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZv
cm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAg
ICAgICBsb2dpY2FsVG9wID0gYWxpZ25tZW50QmFzZWxpbmUoKSAtIChib3hHZW9tZXRyeS52ZXJ0
aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwX2x1
KSArIHJ1blJlY3QuaGVpZ2h0KCkgKyBib3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
OlRvcDoKKyAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSAwX2x1OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOgorICAgICAgICAgICAgbG9naWNh
bFRvcCA9IGxvZ2ljYWxCb3R0b20oKSAtIHJ1blJlY3QuaGVpZ2h0KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5U
RURfWUVUKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBydW5SZWN0
LnNldFRvcChsb2dpY2FsVG9wKTsKKyAgICAgICAgLy8gQWRqdXN0IHNjcm9sbGFibGUgb3ZlcmZs
b3cgaWYgdGhlIHJ1biBvdmVyZmxvd3MgdGhlIGxpbmUuCisgICAgICAgIG1fc2Nyb2xsYWJsZU92
ZXJmbG93LmV4cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4ocnVuUmVjdCk7CisgICAgICAgIC8vIENv
bnZlcnQgcnVucyBmcm9tIHJlbGF0aXZlIHRvIHRoZSBsaW5lIHRvcC9sZWZ0IHRvIHRoZSBmb3Jt
YXR0aW5nIHJvb3QncyBib3JkZXIgYm94IHRvcC9sZWZ0LgorICAgICAgICBydW5SZWN0Lm1vdmVW
ZXJ0aWNhbGx5KHRoaXMtPmxvZ2ljYWxUb3AoKSk7CisgICAgICAgIHJ1blJlY3QubW92ZUhvcml6
b250YWxseShsb2dpY2FsTGVmdCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTGluZUJveDo6YWRqdXN0
QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkKK3sKKyAgICB1bnNpZ25lZCBpbmxpbmVDb250YWluZXJO
ZXN0aW5nTGV2ZWwgPSAwOworICAgIGF1dG8gaGFzU2VlbkRpcmVjdFRleHRPckxpbmVCcmVhayA9
IGZhbHNlOworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CisgICAgICAgIGF1dG8mIGxh
eW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKKyAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRC
b3guc3R5bGUoKTsKKyAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWso
KSkgeworICAgICAgICAgICAgLy8gRm9yIHRleHQgY29udGVudCB3ZSBzZXQgdGhlIGJhc2VsaW5l
IGVpdGhlciB0aHJvdWdoIHRoZSBpbml0aWFsIHN0cnV0IChzZXQgYnkgdGhlIGZvcm1hdHRpbmcg
Y29udGV4dCByb290KSBvcgorICAgICAgICAgICAgLy8gdGhyb3VnaCB0aGUgaW5saW5lIGNvbnRh
aW5lciAoc3RhcnQpLiBOb3JtYWxseSB0aGUgdGV4dCBjb250ZW50IGl0c2VsZiBkb2VzIG5vdCBz
dHJldGNoIHRoZSBsaW5lLgorICAgICAgICAgICAgaWYgKGlubGluZUNvbnRhaW5lck5lc3RpbmdM
ZXZlbCkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYWRqdXN0ZWQgdGhlIGxp
bmUgaGVpZ2h0L2Jhc2VsaW5lIHRocm91Z2ggdGhlIHBhcmVudCBpbmxpbmUgY29udGFpbmVyLiAK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrKSB7CisgICAgICAgICAgICAgICAgLy8gZS5n
IGRpdj5maXJzdCB0ZXh0PC9kaXY+IG9yIDxkaXY+PHNwYW4+bmVzdGVkPHNwYW4+Zmlyc3QgZGly
ZWN0IHRleHQ8L2Rpdj4uCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5l
clN0YXJ0KCkpIHsKKyAgICAgICAgICAgICsraW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsOwor
ICAgICAgICAgICAgLy8gSW5saW5lIGNvbnRhaW5lcnMgc3RyZXRjaCB0aGUgbGluZSBieSB0aGVp
ciBmb250IHNpemUuCisgICAgICAgICAgICAvLyBWZXJ0aWNhbCBtYXJnaW5zLCBwYWRkaW5ncyBh
bmQgYm9yZGVycyBkb24ndCBjb250cmlidXRlIHRvIHRoZSBsaW5lIGhlaWdodC4KKyAgICAgICAg
ICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gc3R5bGUuZm9udE1ldHJpY3MoKTsKKyAgICAgICAgICAg
IGlmIChzdHlsZS52ZXJ0aWNhbEFsaWduKCkgPT0gVmVydGljYWxBbGlnbjo6QmFzZWxpbmUpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGhhbGZMZWFkaW5nID0gTGluZUJveDo6aGFsZkxlYWRpbmdN
ZXRyaWNzKGZvbnRNZXRyaWNzLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7CisgICAgICAg
ICAgICAgICAgLy8gQm90aCBoYWxmbGVhZGluZyBhc2NlbnQgYW5kIGRlc2NlbnQgY291bGQgYmUg
bmVnYXRpdmUgKHRhbGwgZm9udCB2cy4gc21hbGwgbGluZS1oZWlnaHQgdmFsdWUpCisgICAgICAg
ICAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmRlc2NlbnQgPiAwKQorICAgICAgICAgICAgICAgICAg
ICBzZXREZXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmRlc2NlbnQpOworICAgICAgICAgICAg
ICAgIGlmIChoYWxmTGVhZGluZy5hc2NlbnQgPiAwKQorICAgICAgICAgICAgICAgICAgICBzZXRB
c2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuYXNjZW50KTsKKyAgICAgICAgICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0SWZHcmVhdGVyKGFzY2VudEFuZERlc2NlbnQoKS5oZWlnaHQoKSk7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVy
KGZvbnRNZXRyaWNzLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAgICAvLyBU
aGUgbGluZSdzIGJhc2VsaW5lIGFuZCBoZWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQg
YXQgQ29udGFpbmVyU3RhcnQuCisgICAgICAgICAgICBBU1NFUlQoaW5saW5lQ29udGFpbmVyTmVz
dGluZ0xldmVsKTsKKyAgICAgICAgICAgIC0taW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnVuLmlzQm94
KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgYXV0byBtYXJnaW5Cb3hI
ZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKKworICAgICAgICAgICAgc3dp
dGNoIChzdHlsZS52ZXJ0aWNhbEFsaWduKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxB
bGlnbjo6QmFzZWxpbmU6IHsKKyAgICAgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5saW5l
QmxvY2tCb3goKSAmJiBsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElubGluZS1ibG9ja3Mgd2l0aCBpbmxpbmUg
Y29udGVudCBhbHdheXMgaGF2ZSBiYXNlbGluZXMuCisgICAgICAgICAgICAgICAgICAgIGF1dG8m
IGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0
aW5nU3RhdGUoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0
IGlzIGVtcHR5LgorICAgICAgICAgICAgICAgICAgICBhdXRvJiBsYXN0TGluZUJveCA9IGZvcm1h
dHRpbmdTdGF0ZS5kaXNwbGF5SW5saW5lQ29udGVudCgpLT5saW5lQm94ZXMubGFzdCgpOworICAg
ICAgICAgICAgICAgICAgICBhdXRvIGJlZm9yZUhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJl
Zm9yZSgpICsgYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9w
KCkudmFsdWVPcigwKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0QWxpZ25tZW50QmFzZWxpbmVJ
ZkdyZWF0ZXIoYmVmb3JlSGVpZ2h0ICsgbGFzdExpbmVCb3guYmFzZWxpbmUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBOb24gaW5s
aW5lLWJsb2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxpbmUgKGluY2x1ZGluZyB0aGVpciBib3R0
b20gbWFyZ2luKS4KKyAgICAgICAgICAgICAgICAgICAgc2V0QXNjZW50SWZHcmVhdGVyKG1hcmdp
bkJveEhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBuZWdhdGl2ZSBkZXNj
ZW50ICh5ZXMsIG5lZ2F0aXZlIGRlc2NlbnQgaXMgYSB0aGluZykuCisgICAgICAgICAgICAgICAg
ICAgIHNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0ICsgc3RkOjptYXg8
SW5saW5lTGF5b3V0VW5pdD4oMCwgYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKKyAgICAgICAgICAgICAgICAvLyBUb3Ag
YWxpZ24gY29udGVudCBuZXZlciBjaGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMg
dGhlIGJvdHRvbSBvZiB0aGUgbGluZSBmdXJ0aGVyIGRvd24uCisgICAgICAgICAgICAgICAgc2V0
TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206IHsKKyAgICAg
ICAgICAgICAgICAvLyBCb3R0b20gYWxpZ25lZCwgdGFsbCBjb250ZW50IHB1c2hlcyB0aGUgYmFz
ZWxpbmUgZnVydGhlciBkb3duIGZyb20gdGhlIGxpbmUgdG9wLgorICAgICAgICAgICAgICAgIGF1
dG8gbGluZUxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICAgICAg
aWYgKG1hcmdpbkJveEhlaWdodCA+IGxpbmVMb2dpY2FsSGVpZ2h0KSB7CisgICAgICAgICAgICAg
ICAgICAgIHNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKKyAgICAg
ICAgICAgICAgICAgICAgc2V0QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoYWxpZ25tZW50QmFz
ZWxpbmUoKSArIChtYXJnaW5Cb3hIZWlnaHQgLSBsaW5lTG9naWNhbEhlaWdodCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9Z
RVQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorfQorCitIYW5naW5nQ29udGVudCBMaW5lQm94
Ojpjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3QKK3sKKyAgICBhdXRvIGhhbmdpbmdDb250ZW50
ID0gSGFuZ2luZ0NvbnRlbnQgeyB9OworICAgIGlmIChpc0xhc3RMaW5lV2l0aElubGluZUNvbnRl
bnQgPT0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCisgICAgICAgIGhhbmdpbmdD
b250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6bWFr
ZVJldmVyc2VkUmFuZ2UobV9ydW5zKSkgeworICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3Rh
cnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIGhhbmdpbmdDb250ZW50
LnNldElzQ29uZGl0aW9uYWwoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisg
ICAgICAgIGlmICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQgb3IgaHVuZyB3aGl0
ZXNwYWNlLgorICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3Bh
Y2U6OlByZVdyYXApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gVGhpcyBpcyBlaXRo
ZXIgYSBub3JtYWwgb3IgY29uZGl0aW9uYWxseSBoYW5naW5nIHRyYWlsaW5nIHdoaXRlc3BhY2Uu
CisgICAgICAgIGhhbmdpbmdDb250ZW50LmV4cGFuZChydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lk
dGgoKSk7CisgICAgfQorICAgIHJldHVybiBoYW5naW5nQ29udGVudDsKK30KKworfQorfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCb3guaAppbmRleCA1NjE3MDUwYjJmOGJjMDJmNzg4ZmUwMTRlMWQ4MjkxMWNi
OTAyZmNhLi4wZDlmOGM3NjdkNmFlNTg1MDFhMjM3NDk0NzJmNDQzNjI2MTNkZDY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJveC5oCkBAIC0yOSwxMCArMjksMTQgQEAKIAogI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKICNp
bmNsdWRlICJEaXNwbGF5SW5saW5lUmVjdC5oIgorI2luY2x1ZGUgIklubGluZUxpbmVCdWlsZGVy
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCitjbGFzcyBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKK3N0cnVjdCBIYW5naW5nQ29udGVudDsKKwogc3RydWN0
IEFzY2VudEFuZERlc2NlbnQgewogICAgIElubGluZUxheW91dFVuaXQgaGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gYXNjZW50ICsgZGVzY2VudDsgfQogCkBAIC01MCwyMCArNTQsMjUgQEAgcHVibGlj
OgogICAgICAgICBBc2NlbnRBbmREZXNjZW50IGFzY2VudEFuZERlc2NlbnQ7CiAgICAgfTsKIAot
ICAgIExpbmVCb3goY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYsIGNvbnN0IEFzY2VudEFuZERl
c2NlbnQmKTsKLSAgICBMaW5lQm94KCkgPSBkZWZhdWx0OworICAgIGVudW0gY2xhc3MgSXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50IHsgTm8sIFllcyB9OworICAgIGVudW0gY2xhc3MgSXNMaW5l
VmlzdWFsbHlFbXB0eSB7IE5vLCBZZXMgfTsKKyAgICBMaW5lQm94KGNvbnN0IElubGluZUZvcm1h
dHRpbmdDb250ZXh0JiwgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYsIGNvbnN0IExpbmVCdWls
ZGVyOjpSdW5MaXN0JiwgSXNMaW5lVmlzdWFsbHlFbXB0eSwgSXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KTsKIAotICAgIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIGxvZ2ljYWxSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYg
c2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlT3ZlcmZsb3c7
IH0KKyAgICB1c2luZyBJbmxpbmVSdW5SZWN0TGlzdCA9IFZlY3RvcjxEaXNwbGF5OjpJbmxpbmVS
ZWN0LCAxMD47CisgICAgY29uc3QgSW5saW5lUnVuUmVjdExpc3QmIGlubGluZVJlY3RMaXN0KCkg
Y29uc3QgeyByZXR1cm4gbV9ydW5SZWN0TGlzdDsgfQogCiAgICAgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5sZWZ0KCk7IH0KICAgICBJbmxpbmVM
YXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9
CiAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9yZWN0
LnRvcCgpOyB9CiAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0LmJvdHRvbSgpOyB9Ci0KICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC53aWR0aCgpOyB9CiAgICAgSW5saW5lTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmhlaWdodCgpOyB9CiAK
KyAgICBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQorICAgIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIHNjcm9sbGFibGVP
dmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZU92ZXJmbG93OyB9CisKKyAgICBz
dGF0aWMgQXNjZW50QW5kRGVzY2VudCBoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJp
Y3MmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KTsKKwogICAgIC8vIEFsaWdt
ZW50IGJhc2VsaW5lIGZyb20gbGluZSBsb2dpY2FsIHRvcC4KICAgICAvLwogICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0gICAgbGluZSBsb2dpY2FsIHRvcCAgICAgLS0tLS0tLS0tLS0tLS0tLS0t
LSAodG9wIGFsaWduKQpAQCAtODAsNjMgKzg5LDM5IEBAIHB1YmxpYzoKICAgICAvLyAgIHYKICAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tICAgIGxpbmUgbG9naWNhbCBib3R0b20gIC0tLS0tLS0t
LS0tLS0tLS0tLS0KICAgICBJbmxpbmVMYXlvdXRVbml0IGFsaWdubWVudEJhc2VsaW5lKCkgY29u
c3Q7CisKK3ByaXZhdGU6CiAgICAgY29uc3QgQXNjZW50QW5kRGVzY2VudCYgYXNjZW50QW5kRGVz
Y2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNjZW50OyB9
CiAKICAgICB2b2lkIHNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKElubGluZUxheW91dFVu
aXQpOwogICAgIHZvaWQgc2V0QXNjZW50SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQpOwogICAg
IHZvaWQgc2V0RGVzY2VudElmR3JlYXRlcihJbmxpbmVMYXlvdXRVbml0KTsKLQotICAgIHZvaWQg
cmVzZXRBbGlnbm1lbnRCYXNlbGluZSgpOwotICAgIHZvaWQgcmVzZXREZXNjZW50KCkgeyBtX3Jv
b3RJbmxpbmVCb3guYXNjZW50QW5kRGVzY2VudC5kZXNjZW50ID0geyB9OyB9Ci0KLSAgICB2b2lk
IHNldExvZ2ljYWxIZWlnaHQoSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KSB7IG1fcmVj
dC5zZXRIZWlnaHQobG9naWNhbEhlaWdodCk7IH0KLQogICAgIHZvaWQgc2V0TG9naWNhbEhlaWdo
dElmR3JlYXRlcihJbmxpbmVMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldExvZ2ljYWxXaWR0aChJ
bmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkgeyBtX3JlY3Quc2V0V2lkdGgobG9naWNhbFdp
ZHRoKTsgfQogCiAgICAgdm9pZCBzZXRTY3JvbGxhYmxlT3ZlcmZsb3coY29uc3QgRGlzcGxheTo6
SW5saW5lUmVjdCYgcmVjdCkgeyBtX3Njcm9sbGFibGVPdmVyZmxvdyA9IHJlY3Q7IH0KIAotICAg
IHZvaWQgbW92ZUhvcml6b250YWxseShJbmxpbmVMYXlvdXRVbml0IGRlbHRhKSB7IG1fcmVjdC5t
b3ZlSG9yaXpvbnRhbGx5KGRlbHRhKTsgfQotCi0gICAgdm9pZCBleHBhbmRIb3Jpem9udGFsbHko
SW5saW5lTGF5b3V0VW5pdCBkZWx0YSkgeyBtX3JlY3QuZXhwYW5kSG9yaXpvbnRhbGx5KGRlbHRh
KTsgfQotICAgIHZvaWQgc2hyaW5rSG9yaXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgZGVsdGEp
IHsgZXhwYW5kSG9yaXpvbnRhbGx5KC1kZWx0YSk7IH0KKyAgICB2b2lkIGFsaWduSG9yaXpvbnRh
bGx5KElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIElzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudCk7CisgICAgdm9pZCBhbGlnblZlcnRpY2FsbHkoKTsKKyAgICB2b2lkIGFkanVzdEJh
c2VsaW5lQW5kTGluZUhlaWdodCgpOwogCi0gICAgdm9pZCBleHBhbmRWZXJ0aWNhbGx5KElubGlu
ZUxheW91dFVuaXQgZGVsdGEpIHsgbV9yZWN0LmV4cGFuZFZlcnRpY2FsbHkoZGVsdGEpOyB9Ci0g
ICAgdm9pZCBzaHJpbmtWZXJ0aWNhbGx5KElubGluZUxheW91dFVuaXQgZGVsdGEpIHsgZXhwYW5k
VmVydGljYWxseSgtZGVsdGEpOyB9CisgICAgSGFuZ2luZ0NvbnRlbnQgY29sbGVjdEhhbmdpbmdD
b250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3Q7CiAKLSAgICAvLyBodHRw
czovL3d3dy53My5vcmcvVFIvQ1NTMjIvdmlzdXJlbi5odG1sI2lubGluZS1mb3JtYXR0aW5nCi0g
ICAgLy8gTGluZSBib3hlcyB0aGF0IGNvbnRhaW4gbm8gdGV4dCwgbm8gcHJlc2VydmVkIHdoaXRl
IHNwYWNlLCBubyBpbmxpbmUgZWxlbWVudHMgd2l0aCBub24temVybyBtYXJnaW5zLCBwYWRkaW5n
LCBvciBib3JkZXJzLAotICAgIC8vIGFuZCBubyBvdGhlciBpbi1mbG93IGNvbnRlbnQgKHN1Y2gg
YXMgaW1hZ2VzLCBpbmxpbmUgYmxvY2tzIG9yIGlubGluZSB0YWJsZXMpLCBhbmQgZG8gbm90IGVu
ZCB3aXRoIGEgcHJlc2VydmVkIG5ld2xpbmUKLSAgICAvLyBtdXN0IGJlIHRyZWF0ZWQgYXMgemVy
by1oZWlnaHQgbGluZSBib3hlcyBmb3IgdGhlIHB1cnBvc2VzIG9mIGRldGVybWluaW5nIHRoZSBw
b3NpdGlvbnMgb2YgYW55IGVsZW1lbnRzIGluc2lkZSBvZiB0aGVtLAotICAgIC8vIGFuZCBtdXN0
IGJlIHRyZWF0ZWQgYXMgbm90IGV4aXN0aW5nIGZvciBhbnkgb3RoZXIgcHVycG9zZS4KLSAgICAv
LyBOb3RlIHRoYXQgaXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB2aXN1YWxseSBub24tZW1w
dHkgbGluZS4gPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMHB4Ij50aGlzIGlzIHN0aWxsIGNvbnNp
ZGVyZWQgbm9uLWVtcHR5PC9zcGFuPgotICAgIGJvb2wgaXNDb25zaWRlcmVkRW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX2lzQ29uc2lkZXJlZEVtcHR5OyB9Ci0gICAgdm9pZCBzZXRJc0NvbnNpZGVy
ZWRFbXB0eSgpIHsgbV9pc0NvbnNpZGVyZWRFbXB0eSA9IHRydWU7IH0KLSAgICB2b2lkIHNldElz
Q29uc2lkZXJlZE5vbkVtcHR5KCkgeyBtX2lzQ29uc2lkZXJlZEVtcHR5ID0gZmFsc2U7IH0KLQot
ICAgIHN0YXRpYyBBc2NlbnRBbmREZXNjZW50IGhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBGb250
TWV0cmljcyYsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQpOworICAgIGNvbnN0
IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KKyAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRlKCk7
IH0KIAogcHJpdmF0ZToKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGJvb2wgbV9oYXNWYWxpZEFs
aWdubWVudEJhc2VsaW5lIHsgZmFsc2UgfTsKICNlbmRpZgorICAgIGNvbnN0IElubGluZUZvcm1h
dHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworICAgIGNvbnN0IExpbmVC
dWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7CiAgICAgRGlzcGxheTo6SW5saW5lUmVjdCBtX3JlY3Q7
CiAgICAgRGlzcGxheTo6SW5saW5lUmVjdCBtX3Njcm9sbGFibGVPdmVyZmxvdzsKICAgICBJbmxp
bmVMYXlvdXRVbml0IG1fYWxpZ25tZW50QmFzZWxpbmUgeyAwIH07Ci0gICAgYm9vbCBtX2lzQ29u
c2lkZXJlZEVtcHR5IHsgdHJ1ZSB9OwogICAgIElubGluZUJveCBtX3Jvb3RJbmxpbmVCb3g7Cisg
ICAgSW5saW5lUnVuUmVjdExpc3QgbV9ydW5SZWN0TGlzdDsKIH07CiAKLWlubGluZSBMaW5lQm94
OjpMaW5lQm94KGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIHJlY3QsIGNvbnN0IEFzY2VudEFu
ZERlc2NlbnQmIGFzY2VudEFuZERlc2NlbnQpCi0gICAgOiBtX3JlY3QocmVjdCkKLSAgICAsIG1f
YWxpZ25tZW50QmFzZWxpbmUoYXNjZW50QW5kRGVzY2VudC5hc2NlbnQpCi0gICAgLCBtX3Jvb3RJ
bmxpbmVCb3goYXNjZW50QW5kRGVzY2VudCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1f
aGFzVmFsaWRBbGlnbm1lbnRCYXNlbGluZSA9IHRydWU7Ci0jZW5kaWYKLX0KLQogaW5saW5lIExp
bmVCb3g6OklubGluZUJveDo6SW5saW5lQm94KGNvbnN0IEFzY2VudEFuZERlc2NlbnQmIGFzY2Vu
dEFuZERlc2NlbnQpCiAgICAgOiBhc2NlbnRBbmREZXNjZW50KGFzY2VudEFuZERlc2NlbnQpCiB7
CkBAIC0xNzgsMTYgKzE2Myw2IEBAIGlubGluZSBJbmxpbmVMYXlvdXRVbml0IExpbmVCb3g6OmFs
aWdubWVudEJhc2VsaW5lKCkgY29uc3QKICAgICByZXR1cm4gbV9hbGlnbm1lbnRCYXNlbGluZTsK
IH0KIAotaW5saW5lIHZvaWQgTGluZUJveDo6cmVzZXRBbGlnbm1lbnRCYXNlbGluZSgpCi17Ci0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2hhc1ZhbGlkQWxpZ25tZW50QmFzZWxpbmUgPSB0cnVl
OwotI2VuZGlmCi0gICAgbV9hbGlnbm1lbnRCYXNlbGluZSA9IDBfbHU7Ci0gICAgbV9yb290SW5s
aW5lQm94LmFzY2VudEFuZERlc2NlbnQuZGVzY2VudCA9IHsgfTsKLSAgICBtX3Jvb3RJbmxpbmVC
b3guYXNjZW50QW5kRGVzY2VudC5hc2NlbnQgPSB7IH07Ci19Ci0KIGlubGluZSBBc2NlbnRBbmRE
ZXNjZW50IExpbmVCb3g6OmhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBGb250TWV0cmljcyYgZm9u
dE1ldHJpY3MsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQpCiB7CiAgICAgYXV0
byBhc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCmluZGV4
IDI3MDM0ODY2ZWQ5Nzc1ODlhY2E4NGM5MWFlOTkyYTM2MmVkZTEzYjYuLjZmMTU4YmEzMWIxYTAx
YzA5NTVmY2QzYWFiOWFjNDc2YWZkZTU0ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaApAQCAtMjks
NyArMjksNiBAQAogCiAjaW5jbHVkZSAiRGlzcGxheVJ1bi5oIgogI2luY2x1ZGUgIklubGluZUl0
ZW0uaCIKLSNpbmNsdWRlICJJbmxpbmVMaW5lQm94LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEl0
ZW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsNyArMzYsNiBAQCBuYW1lc3BhY2Ug
TGF5b3V0IHsKIAogY2xhc3MgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CiBjbGFzcyBJbmxpbmVT
b2Z0TGluZUJyZWFrSXRlbTsKLWNsYXNzIExpbmVDb250ZW50QWxpZ25lcjsKIAogY2xhc3MgTGlu
ZUJ1aWxkZXIgewogcHVibGljOgpAQCAtNTYsOCArNTQsOSBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzVmlzdWFsbHlFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWaXN1YWxseUVtcHR5OyB9CiAK
LSAgICBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9s
aW5lTG9naWNhbFdpZHRoIC0gY29udGVudExvZ2ljYWxXaWR0aCgpOyB9CisgICAgSW5saW5lTGF5
b3V0VW5pdCBsaW5lTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTG9naWNhbFdp
ZHRoOyB9CiAgICAgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZW50TG9naWNhbFdpZHRoOyB9CisgICAgSW5saW5lTGF5b3V0VW5pdCBh
dmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGxpbmVMb2dpY2FsV2lkdGgoKSAtIGNvbnRl
bnRMb2dpY2FsV2lkdGgoKTsgfQogCiAgICAgSW5saW5lTGF5b3V0VW5pdCB0cmltbWFibGVUcmFp
bGluZ1dpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQud2lk
dGgoKTsgfQogICAgIGJvb2wgaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQuaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1h
YmxlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcAppbmRleCA3ZmRhYzQ1YzE0ZWRjOWQ5MTQ2
Njg2NGM5MmJkMGVmZjUxOTJiNTVkLi4xYWZmYTU2YjA2NDJjNmQyMzNkYzE3NjU4MjlmMjMxMWQ3
ODRiZjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9MaW5lTGF5b3V0Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkRpc3BsYXlC
b3guaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkxh
eW91dEJveC5oIgogI2luY2x1ZGUgIlRleHRVdGlsLmgiCkBAIC0zMzQsNyArMzM1LDcgQEAgTGlu
ZUxheW91dENvbnRleHQ6OkxpbmVDb250ZW50IExpbmVMYXlvdXRDb250ZXh0OjpjbG9zZShjb25z
dCBMaW5lQnVpbGRlciYgbGluZSwKICAgICBBU1NFUlQobGluZVJhbmdlLmVuZCA8PSBsYXlvdXRS
YW5nZS5lbmQpOwogICAgIC8vIEFkanVzdCBoeXBoZW5hdGVkIGxpbmUgY291bnQuCiAgICAgbV9z
dWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA9IHBhcnRpYWxDb250ZW50ICYmIHBhcnRpYWxD
b250ZW50LT50cmFpbGluZ0NvbnRlbnRIYXNIeXBoZW4gPyBtX3N1Y2Nlc3NpdmVIeXBoZW5hdGVk
TGluZUNvdW50ICsgMSA6IDA7Ci0gICAgcmV0dXJuIExpbmVDb250ZW50IHsgcGFydGlhbENvbnRl
bnQsIGxpbmVSYW5nZSwgV1RGTW92ZShtX2Zsb2F0cykgfTsKKyAgICByZXR1cm4gTGluZUNvbnRl
bnQgeyBwYXJ0aWFsQ29udGVudCwgbGluZVJhbmdlLCBXVEZNb3ZlKG1fZmxvYXRzKSwgbGluZS5y
dW5zKCkgfTsKIH0KIAogdm9pZCBMaW5lTGF5b3V0Q29udGV4dDo6bmV4dENvbnRlbnRGb3JMaW5l
KExpbmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUsIHVuc2lnbmVkIGN1cnJlbnRJbmxpbmVJdGVt
SW5kZXgsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIE9wdGlvbmFsPHVuc2ln
bmVkPiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgsIElubGluZUxheW91dFVuaXQgYXZhaWxh
YmxlTGluZVdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGN1cnJlbnRMb2dpY2FsUmlnaHQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxh
eW91dENvbnRleHQuaAppbmRleCBhMTk3OTg5NmIxZTFiNDA4MTY0OGJkZGU3MTQwZGNiYzcyMDk5
OGUyLi42MDNmMzQ2ZGMxMGE5MjcxMDQwYjBjNGUyZDcwOGZiMjY5NzU5OTM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlv
dXRDb250ZXh0LmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAgICAgICB9OwogICAgICAg
ICB1c2luZyBGbG9hdExpc3QgPSBWZWN0b3I8RmxvYXQ+OwogICAgICAgICBGbG9hdExpc3QgZmxv
YXRzOworICAgICAgICBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgcnVuczsKICAgICB9Owog
ICAgIExpbmVDb250ZW50IGxheW91dElubGluZUNvbnRlbnQoTGluZUJ1aWxkZXImLCBjb25zdCBJ
bmxpbmVJdGVtUmFuZ2UmLCBPcHRpb25hbDx1bnNpZ25lZD4gcGFydGlhbExlYWRpbmdDb250ZW50
TGVuZ3RoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407462</attachid>
            <date>2020-08-28 05:14:30 -0700</date>
            <delta_ts>2020-08-28 06:37:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215117-20200828051429.patch</filename>
            <type>text/plain</type>
            <size>55072</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NhZDQzM2I1ODhmNGIz
ZDA0Y2YyZGI5Yzg3NzhjMDZiZTk2NDBmNi4uNzI2OTRlZDM3YWMzZDViY2Y4NTgwNjc3YjdiN2Fh
MjI2M2JhOTM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDIwLTA4LTI4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGlu
bGluZSBhbGlnbm1lbnQgY29kZSB0byBMaW5lQm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUxMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBMaW5lQm94IGlzIHJlc3BvbnNpYmxlIGZvciBhbGlnbmlu
ZyB0aGUgcnVucyBib3RoIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseSAoTGluZUNvbnRlbnRB
bGlnbmVyIC0+IExpbmVCb3gpLgorICAgICAgICAoTm90ZSB0aGF0IExpbmVCb3g6Om1fcnVuUmVj
dExpc3QgaXMgdHJhbnNpdGlvbmFsIGFuZCB3aWxsIGV2ZW50dWFsbHkgYmUgY29udmVydGVkIHRv
IGlubGluZSBib3hlcy4pCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNG
b3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2luZ0NvbnRlbnQ6OndpZHRo
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2luZ0NvbnRl
bnQ6OmlzQ29uZGl0aW9uYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpIYW5naW5nQ29udGVudDo6c2V0SXNDb25kaXRpb25hbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50OjpleHBhbmQpOiBEZWxldGVkLgorICAg
ICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2luZ0NvbnRl
bnQ6OnJlc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRl
bnRBbGlnbmVyOjppbmxpbmVSZWN0TGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6
OmxheW91dFN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUNvbnRlbnRBbGlnbmVyOjpMaW5lQ29udGVudEFsaWduZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVy
OjphbGlnblZlcnRpY2FsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6Y29sbGVjdEhh
bmdpbmdDb250ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJveDo6aW5saW5lUmVjdExpc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQm94Ojpsb2dpY2FsQm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJveDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQm94OjpzY3JvbGxhYmxlT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQm94Ojpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmxheW91dFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJveDo6c2V0TG9naWNhbEhlaWdodCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnNldExvZ2ljYWxXaWR0aCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6Om1vdmVIb3Jpem9udGFsbHkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpleHBhbmRIb3Jpem9udGFs
bHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpzaHJpbmtI
b3Jpem9udGFsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94
OjpleHBhbmRWZXJ0aWNhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJveDo6c2hyaW5rVmVydGljYWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCb3g6OmlzQ29uc2lkZXJlZEVtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0SXNDb25zaWRlcmVkRW1wdHkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpzZXRJc0NvbnNpZGVyZWRO
b25FbXB0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6Okxp
bmVCb3gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpyZXNl
dEFsaWdubWVudEJhc2VsaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6bGluZUxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCdWlsZGVyOjphdmFpbGFibGVXaWR0aCBjb25zdCk6CisgICAgICAgICogbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UpOgorICAgICAgICAqIGxheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0Lmg6CisKIDIwMjAtMDgtMjggIENo
cmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIEFkZCBXZWJHTCgyKSBjb250
ZXh0IHN1cHBvcnQgdG8gT2Zmc2NyZWVuQ2FudmFzCkBAIC00NCw3ICsxMDAsNyBAQAogICAgICAg
ICAqIHdvcmtlcnMvc2VydmljZS9jb250ZXh0L1NlcnZpY2VXb3JrZXJUaHJlYWQuY3BwOgogICAg
ICAgICAoV2ViQ29yZTo6U2VydmljZVdvcmtlclRocmVhZDo6U2VydmljZVdvcmtlclRocmVhZCk6
CiAKLTIwMjAtMDgtMjcgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKzIwMjAtMDgt
MjggIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNd
IExpbmVCdWlsZGVyOlJ1biBzaG91bGQgbm90IGhhdmUgdmVydGljYWwgZ2VvbWV0cnkKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTA2OApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCAxZmY3ZTFkMjgxMmU4ZTk5NWEzMjQ5OTcxNmM1Yjc5YmU5YTBmMjJhLi5hNzlk
ZWNkMGI4NDE5ZDZhYmY3NzE3ZmZhNTZjZjA1ZGVlZDRkY2IxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAt
MTQzNiw2ICsxNDM2LDcgQEAgbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0UXVpcmtzLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5jcHAK
K2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwCiBsYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4
dEl0ZW0uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggMDFmOTJhZDliZmEwOGZmNmI4MWFiNDlkMWE1Mjc2ZmIwNmY2ODcxMS4u
NTg4Yzc2MWRiMTczZGFhYWI0NDVkNGQ5YzU5ZmVkZWRhOTYxZTcyOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTU2MCw2ICs5
NTYwLDcgQEAKIAkJNkY1QjdFQUEyMzAwQTc5RTAwNjdEOUMzIC8qIFRhYmxlR3JpZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUYWJsZUdyaWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2RjYzODNGNDI0MjdBRjQ5MDBEQUJBNTMgLyogTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdC
bG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRJbml0aWFsQ29u
dGFpbmluZ0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGNjYzOEQ0MjQ5
RTI2OEIwMDE5MjVGQyAvKiBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRl
eHRRdWlya3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjY5QTc5OTI0RDZG
QUI4MDBFNkI4NUQgLyogSW5saW5lTGluZUJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxp
bmVMaW5lQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3MzkxOEMyMTA2
Q0VERDAwNkFGMjYyIC8qIExheW91dFVuaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFVuaXRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGNzc4Njg1MjM0OTFBQzYwMDREOTYz
NiAvKiBEaXNwbGF5UGFpbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5UGFpbnRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGNzc4Njg3MjM0OTFBRDcwMDRE
OTYzNiAvKiBEaXNwbGF5UGFpbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaXNwbGF5UGFpbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc0MjAs
NiArMTc0MjEsNyBAQAogCQkJCTExNUNGQTdDMjA4QjhFMTAwMDFFNjk5MSAvKiBJbmxpbmVGb3Jt
YXR0aW5nU3RhdGUuaCAqLywKIAkJCQk2RjdCOENFQzIzNjI2RTY2MDBDOUZGMTUgLyogSW5saW5l
SXRlbS5jcHAgKi8sCiAJCQkJNkZFN0NGQTAyMTc3RUVGMTAwNUIxNTczIC8qIElubGluZUl0ZW0u
aCAqLywKKwkJCQk2RjY5QTc5OTI0RDZGQUI4MDBFNkI4NUQgLyogSW5saW5lTGluZUJveC5jcHAg
Ki8sCiAJCQkJNkZCMjQwMDMyM0RGRjEyNzAwNzk2NDU4IC8qIElubGluZUxpbmVCb3guaCAqLywK
IAkJCQk2RkUxOTgxMzIxNzgzOTdCMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuY3BwICov
LAogCQkJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJlYWtlci5oICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDE0MWE5NDUzMWExMDhi
YTk0MmM0ZjIxM2U0ZDExMTI3Y2QwN2Y3YTcuLjJiOWJiNjEyN2FhNDZmZDFmYmNmN2Y5YmI4NTky
NjY0MzM5YjI4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUg
IklubGluZUxpbmVCb3guaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0SXRlbS5oIgogI2luY2x1ZGUg
IkludmFsaWRhdGlvblN0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCkBAIC03NiwzMDEg
Kzc3LDYgQEAgc3RhdGljIGlubGluZSBjb25zdCBCb3gqIG5leHRJbmxpbmVMZXZlbEJveFRvTGF5
b3V0KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1zdHJ1Y3QgSGFuZ2luZ0NvbnRlbnQgewotcHVibGljOgotICAgIHZvaWQgcmVzZXQoKTsKLQot
ICAgIElubGluZUxheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0g
ICAgYm9vbCBpc0NvbmRpdGlvbmFsKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbmRpdGlvbmFsOyB9
Ci0KLSAgICB2b2lkIHNldElzQ29uZGl0aW9uYWwoKSB7IG1faXNDb25kaXRpb25hbCA9IHRydWU7
IH0KLSAgICB2b2lkIGV4cGFuZChJbmxpbmVMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGggKz0g
d2lkdGg7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIG1faXNDb25kaXRpb25hbCB7IGZhbHNlIH07
Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBtX3dpZHRoIHsgMCB9OwotfTsKLQotdm9pZCBIYW5naW5n
Q29udGVudDo6cmVzZXQoKQotewotICAgIG1faXNDb25kaXRpb25hbCA9IGZhbHNlOwotICAgIG1f
d2lkdGggPSAgMDsKLX0KLQotY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyIHsKLXB1YmxpYzoKLSAg
ICBMaW5lQ29udGVudEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBMaW5l
Qm94JiwgY29uc3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmLCBJbmxpbmVMYXlvdXRVbml0IGF2YWls
YWJsZVdpZHRoKTsKLQotICAgIGVudW0gY2xhc3MgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
IHsgTm8sIFllcyB9OwotICAgIHZvaWQgYWxpZ25Ib3Jpem9udGFsbHkoVGV4dEFsaWduTW9kZSwg
SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKLSAgICB2b2lkIGFsaWduVmVydGljYWxseSgp
OwotICAgIHZvaWQgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7Ci0KLSAgICB1c2luZyBJ
bmxpbmVSdW5SZWN0TGlzdCA9IFZlY3RvcjxEaXNwbGF5OjpJbmxpbmVSZWN0LCAxMD47Ci0gICAg
Y29uc3QgSW5saW5lUnVuUmVjdExpc3QmIGlubGluZVJlY3RMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9ydW5SZWN0TGlzdDsgfQotCi1wcml2YXRlOgotICAgIEhhbmdpbmdDb250ZW50IGNvbGxlY3RI
YW5naW5nQ29udGVudChJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpIGNvbnN0OwotCi0gICAg
Y29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQotICAgIExheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3Rh
dGUoKTsgfQotCi0gICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIG1faW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ7Ci0gICAgTGluZUJveCYgbV9saW5lQm94OwotICAgIGNvbnN0IExpbmVC
dWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7Ci0gICAgSW5saW5lUnVuUmVjdExpc3QgbV9ydW5SZWN0
TGlzdDsKLSAgICBJbmxpbmVMYXlvdXRVbml0IG1fYXZhaWxhYmxlV2lkdGg7Ci19OwotCi1MaW5l
Q29udGVudEFsaWduZXI6OkxpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0
IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdp
ZHRoKQotICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCkKLSAgICAsIG1fbGluZUJveChsaW5lQm94KQotICAgICwgbV9ydW5zKHJ1bnMpCi0gICAg
LCBtX2F2YWlsYWJsZVdpZHRoKGF2YWlsYWJsZVdpZHRoKQotewotICAgIGZvciAoYXV0byYgcnVu
IDogbV9ydW5zKSB7Ci0gICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gWyZdKCkgLT4gSW5saW5lTGF5
b3V0VW5pdCB7Ci0gICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZv
bnRNZXRyaWNzKCk7Ci0gICAgICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVC
cmVhaygpKQotICAgICAgICAgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKLQot
ICAgICAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVy
RW5kKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwotCi0g
ICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgICAgICAg
ICBhdXRvJiBib3hHZW9tZXRyeSA9IGlubGluZUZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9y
Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3go
KSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYm94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpOwotCi0gICAgICAgICAgICAvLyBO
b24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJp
dCBtaXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRl
bnQgaGVpZ2h0IGhlcmUuCi0gICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94
SGVpZ2h0KCk7Ci0gICAgICAgIH07Ci0gICAgICAgIG1fcnVuUmVjdExpc3QuYXBwZW5kKHsgMCwg
cnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgoKSwgcnVuSGVpZ2h0KCkgfSk7Ci0g
ICAgfQotfQotCi12b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9udGFsbHkoVGV4
dEFsaWduTW9kZSBob3Jpem9udGFsQWxpZ25tZW50LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRl
bnQgaXNMYXN0TGluZSkKLXsKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gY29sbGVjdEhhbmdp
bmdDb250ZW50KGlzTGFzdExpbmUpOwotICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBtX2F2YWls
YWJsZVdpZHRoICsgaGFuZ2luZ0NvbnRlbnQud2lkdGgoKTsKLSAgICBpZiAobV9ydW5zLmlzRW1w
dHkoKSB8fCBhdmFpbGFibGVXaWR0aCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
aG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KSB7Ci0gICAgICAg
IGF1dG8gYWNjdW11bGF0ZWRFeHBhbnNpb24gPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fcnVucy5zaXplKCk7ICsraW5kZXgp
IHsKLSAgICAgICAgICAgIG1fcnVuUmVjdExpc3RbaW5kZXhdLm1vdmVIb3Jpem9udGFsbHkoYWNj
dW11bGF0ZWRFeHBhbnNpb24pOwotCi0gICAgICAgICAgICBhdXRvIGhvcml6b250YWxFeHBhbnNp
b24gPSBtX3J1bnNbaW5kZXhdLmV4cGFuc2lvbigpLmhvcml6b250YWxFeHBhbnNpb247Ci0gICAg
ICAgICAgICBtX3J1blJlY3RMaXN0W2luZGV4XS5leHBhbmRIb3Jpem9udGFsbHkoaG9yaXpvbnRh
bEV4cGFuc2lvbik7Ci0gICAgICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBob3Jpem9u
dGFsRXhwYW5zaW9uOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBh
dXRvIGFkanVzdG1lbnRGb3JBbGlnbm1lbnQgPSBbJl0gKGF1dG8gYXZhaWxhYmxlV2lkdGgpIC0+
IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsKLSAgICAgICAgc3dpdGNoIChob3Jpem9udGFs
QWxpZ25tZW50KSB7Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICAgICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OlN0YXJ0OgotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpSaWdodDoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoK
LSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgICAgICByZXR1cm4gc3Rk
OjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGgsIDApOwotICAgICAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJL
aXRDZW50ZXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4o
YXZhaWxhYmxlV2lkdGggLyAyLCAwKTsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0
aWZ5OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICB9OwotCi0gICAgaWYgKGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRG
b3JBbGlnbm1lbnQoYXZhaWxhYmxlV2lkdGgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBsaW5lIGJv
eCBzaG91bGQgbm90IG5lZWQgdG8gYmUgbW92ZWQsIG9ubHkgdGhlIHJ1bnMuCi0gICAgICAgIG1f
bGluZUJveC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICAgICAgZm9yIChhdXRv
JiBydW5SZWN0IDogbV9ydW5SZWN0TGlzdCkKLSAgICAgICAgICAgIHJ1blJlY3QubW92ZUhvcml6
b250YWxseSgqYWRqdXN0bWVudCk7Ci0gICAgfQotfQotCi12b2lkIExpbmVDb250ZW50QWxpZ25l
cjo6YWxpZ25WZXJ0aWNhbGx5KCkKLXsKLSAgICBhdXRvIHNjcm9sbGFibGVPdmVyZmxvd1JlY3Qg
PSBtX2xpbmVCb3gubG9naWNhbFJlY3QoKTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgbV9ydW5zLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvJiBydW4gPSBtX3J1
bnNbaW5kZXhdOwotICAgICAgICBhdXRvJiBydW5SZWN0ID0gbV9ydW5SZWN0TGlzdFtpbmRleF07
Ci0gICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAg
ICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgICAgIGF1dG8gdmVydGlj
YWxBbGlnbiA9IGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsKLSAgICAgICAgYXV0
byBhc2NlbnQgPSBsYXlvdXRCb3guc3R5bGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpOwotCi0g
ICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbikgewotICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246OkJhc2VsaW5lOgotICAgICAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpIHx8IHJ1bi5p
c1RleHQoKSkKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVu
dEJhc2VsaW5lKCkgLSBhc2NlbnQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChydW4uaXNDb250YWlu
ZXJTdGFydCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0
aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAg
bG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50IC0gYm94
R2VvbWV0cnkuYm9yZGVyVG9wKCkgLSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigw
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSAm
JiBsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxp
c2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCkpOwotICAgICAgICAgICAgICAgIC8vIFNwZWMgbWFrZXMgdXMgZ2VuZXJhdGUgYXQgbGVhc3Qg
b25lIGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHkuCi0gICAgICAgICAgICAgICAgYXV0byBpbmxp
bmVCbG9ja0Jhc2VsaW5lID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCkt
PmxpbmVCb3hlcy5sYXN0KCkuYmFzZWxpbmUoKTsKLSAgICAgICAgICAgICAgICAvLyBUaGUgaW5s
aW5lLWJsb2NrJ3MgYmFzZWxpbmUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIGl0cyBjb250ZW50IGJv
eC4gTGV0J3MgY29udmVydCBpdCByZWxhdGl2ZSB0byB0aGUgbWFyZ2luIGJveC4KLSAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgX19fX19fX19fX19fX19fIDwtIG1hcmdpbiBib3gKLSAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCAg
X19fX19fX19fX19fICA8LSBib3JkZXIgYm94Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAg
fCB8Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8ICBfX19fX19fX18gIDwtIGNvbnRl
bnQgYm94Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8IHwgICBeCi0gICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgfCB8IHwgICB8ICA8LSBiYXNlbGluZSBvZmZzZXQKLSAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICB8IHwgfCAgIHwKLSAgICAgICAgICAgICAgICAvLyAgICAgdGV4
dCB8IHwgfCAgIHYgdGV4dAotICAgICAgICAgICAgICAgIC8vICAgICAtLS0tLXwtfC18LS0tLS0t
LS0tLSA8LSBiYXNlbGluZQotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgYXV0
byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91
dEJveCk7Ci0gICAgICAgICAgICAgICAgYXV0byBiYXNlbGluZUZyb21NYXJnaW5Cb3ggPSBib3hH
ZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2Vv
bWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2VsaW5lOwotICAg
ICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAt
IGJhc2VsaW5lRnJvbU1hcmdpbkJveDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9y
Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5h
bGlnbm1lbnRCYXNlbGluZSgpIC0gKGJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib3hH
ZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUpICsgcnVuUmVjdC5oZWlnaHQo
KSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgotICAgICAgICAgICAg
bG9naWNhbFRvcCA9IDBfbHU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWZXJ0
aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94Lmxv
Z2ljYWxCb3R0b20oKSAtIHJ1blJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBydW5SZWN0LnNldFRvcChs
b2dpY2FsVG9wKTsKLSAgICAgICAgLy8gQWRqdXN0IHNjcm9sbGFibGUgb3ZlcmZsb3cgaWYgdGhl
IHJ1biBvdmVyZmxvd3MgdGhlIGxpbmUuCi0gICAgICAgIHNjcm9sbGFibGVPdmVyZmxvd1JlY3Qu
ZXhwYW5kVmVydGljYWxseVRvQ29udGFpbihydW5SZWN0KTsKLSAgICAgICAgLy8gQ29udmVydCBy
dW5zIGZyb20gcmVsYXRpdmUgdG8gdGhlIGxpbmUgdG9wL2xlZnQgdG8gdGhlIGZvcm1hdHRpbmcg
cm9vdCdzIGJvcmRlciBib3ggdG9wL2xlZnQuCi0gICAgICAgIHJ1blJlY3QubW92ZVZlcnRpY2Fs
bHkobV9saW5lQm94LmxvZ2ljYWxUb3AoKSk7Ci0gICAgICAgIHJ1blJlY3QubW92ZUhvcml6b250
YWxseShtX2xpbmVCb3gubG9naWNhbExlZnQoKSk7Ci0gICAgfQotICAgIG1fbGluZUJveC5zZXRT
Y3JvbGxhYmxlT3ZlcmZsb3coc2Nyb2xsYWJsZU92ZXJmbG93UmVjdCk7Ci19Ci0KLXZvaWQgTGlu
ZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKQotewotICAgIHVu
c2lnbmVkIGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgYXV0byBoYXNTZWVu
RGlyZWN0VGV4dE9yTGluZUJyZWFrID0gZmFsc2U7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1
bnMpIHsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgICAg
ICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgICAgICBpZiAocnVuLmlzVGV4
dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBpZiAoaW5saW5lQ29udGFp
bmVyTmVzdGluZ0xldmVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBhZGp1
c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUgcGFyZW50IGlubGluZSBj
b250YWluZXIuIAotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWspIHsKLSAgICAgICAgICAg
ICAgICAvLyBlLmcgZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3IgPGRpdj48c3Bhbj5uZXN0ZWQ8c3Bh
bj5maXJzdCBkaXJlY3QgdGV4dDwvZGl2Pi4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSB0
cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocnVu
LmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgKytpbmxpbmVDb250YWluZXJOZXN0
aW5nTGV2ZWw7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBzdHJldGNoIHRoZSBs
aW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KLSAgICAgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMs
IHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVpZ2h0
LgotICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygpOwot
ICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpC
YXNlbGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBMaW5lQm94Ojpo
YWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgp
KTsKLSAgICAgICAgICAgICAgICAvLyBCb3RoIGhhbGZsZWFkaW5nIGFzY2VudCBhbmQgZGVzY2Vu
dCBjb3VsZCBiZSBuZWdhdGl2ZSAodGFsbCBmb250IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1
ZSkKLSAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuZGVzY2VudCA+IDApCi0gICAgICAg
ICAgICAgICAgICAgIG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmRl
c2NlbnQpOwotICAgICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5hc2NlbnQgPiAwKQotICAg
ICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5n
LmFzY2VudCk7Ci0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIobV9saW5lQm94LmFzY2VudEFuZERlc2NlbnQoKS5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihmb250TWV0cmljcy5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChydW4uaXNDb250YWluZXJFbmQoKSkgewotICAgICAgICAgICAg
Ly8gVGhlIGxpbmUncyBiYXNlbGluZSBhbmQgaGVpZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGFkanVz
dGVkIGF0IENvbnRhaW5lclN0YXJ0LgotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNvbnRhaW5l
ck5lc3RpbmdMZXZlbCk7Ci0gICAgICAgICAgICAtLWlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZl
bDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJ1bi5p
c0JveCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2lu
Qm94SGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAoc3R5bGUudmVydGljYWxBbGlnbigpKSB7Ci0gICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OkJhc2VsaW5lOiB7Ci0gICAgICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0lu
bGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJbmxpbmUtYmxvY2tzIHdpdGggaW5s
aW5lIGNvbnRlbnQgYWx3YXlzIGhhdmUgYmFzZWxpbmVzLgotICAgICAgICAgICAgICAgICAgICBh
dXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9y
bWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBp
ZiBpdCBpcyBlbXB0eS4KLSAgICAgICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmVCb3ggPSBm
b3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKTsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBiZWZvcmVIZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJn
aW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGlu
Z1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBbGln
bm1lbnRCYXNlbGluZUlmR3JlYXRlcihiZWZvcmVIZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGlu
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAvLyBOb24gaW5saW5lLWJsb2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxp
bmUgKGluY2x1ZGluZyB0aGVpciBib3R0b20gbWFyZ2luKS4KLSAgICAgICAgICAgICAgICAgICAg
bV9saW5lQm94LnNldEFzY2VudElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAg
ICAgICAgICAgICAvLyBJZ25vcmUgbmVnYXRpdmUgZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNj
ZW50IGlzIGEgdGhpbmcpLgotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNh
bEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRV
bml0PigwLCBtX2xpbmVCb3guYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKLSAgICAgICAgICAgICAgICAvLyBUb3AgYWxp
Z24gY29udGVudCBuZXZlciBjaGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhl
IGJvdHRvbSBvZiB0aGUgbGluZSBmdXJ0aGVyIGRvd24uCi0gICAgICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7
Ci0gICAgICAgICAgICAgICAgLy8gQm90dG9tIGFsaWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMg
dGhlIGJhc2VsaW5lIGZ1cnRoZXIgZG93biBmcm9tIHRoZSBsaW5lIHRvcC4KLSAgICAgICAgICAg
ICAgICBhdXRvIGxpbmVMb2dpY2FsSGVpZ2h0ID0gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsK
LSAgICAgICAgICAgICAgICBpZiAobWFyZ2luQm94SGVpZ2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0
ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFs
aWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpICsg
KG1hcmdpbkJveEhlaWdodCAtIGxpbmVMb2dpY2FsSGVpZ2h0KSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUhhbmdpbmdDb250ZW50IExpbmVDb250ZW50QWxpZ25l
cjo6Y29sbGVjdEhhbmdpbmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xh
c3RMaW5lV2l0aElubGluZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgYXV0byBoYW5naW5nQ29udGVu
dCA9IEhhbmdpbmdDb250ZW50IHsgfTsKLSAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50ID09IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQotICAgICAgICBoYW5naW5n
Q29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1h
a2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKLSAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0
YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBoYW5naW5nQ29udGVu
dC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJlc2VydmVkIG9yIGh1bmcgd2hp
dGVzcGFjZS4KLSAgICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNw
YWNlOjpQcmVXcmFwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIFRoaXMgaXMgZWl0
aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFpbGluZyB3aGl0ZXNwYWNl
LgotICAgICAgICBoYW5naW5nQ29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdp
ZHRoKCkpOwotICAgIH0KLSAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7Ci19Ci0KIHZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3Rh
dGUmIGludmFsaWRhdGlvblN0YXRlLCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQm
IGNvbnN0cmFpbnRzKQogewogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExh
eW91dCwgc3RyZWFtIDw8ICJbU3RhcnRdIC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgLT4g
Zm9ybWF0dGluZyByb290KCIgPDwgJnJvb3QoKSA8PCAiKSIpOwpAQCAtNDQ2LDU0ICsxNTIsMjQg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYg
aW5saW5lSXRlbXMsIExpbmVMYXlvdXRDb24KICAgICAgICAgYXV0byBwYXJ0aWFsTGVhZGluZ0Nv
bnRlbnRMZW5ndGggPSBwcmV2aW91c0xpbmUgPyBwcmV2aW91c0xpbmUtPm92ZXJmbG93Q29udGVu
dExlbmd0aCA6IFdURjo6bnVsbG9wdDsKICAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVM
YXlvdXRDb250ZXh0LmxheW91dElubGluZUNvbnRlbnQobGluZSwgbmVlZHNMYXlvdXRSYW5nZSwg
cGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKICAgICAgICAgYXV0byBsaW5lQ29udGVudFJh
bmdlID0gbGluZUNvbnRlbnQuaW5saW5lSXRlbVJhbmdlOwotCi0gICAgICAgIC8vIEZJWE1FOiBU
aGlzIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBldmVudHVhbGx5IGdldCBtZXJnZWQgdG8gTGluZUJv
eC4KICAgICAgICAgYXV0byBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPSBbJl0gewotICAg
ICAgICAgICAgaWYgKGxpbmVDb250ZW50UmFuZ2UuZW5kID09IG5lZWRzTGF5b3V0UmFuZ2UuZW5k
KQotICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQ29udGVudEFsaWduZXI6OklzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudDo6WWVzOwogICAgICAgICAgICAgaWYgKGxpbmVDb250ZW50LnBhcnRp
YWxDb250ZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQ29udGVudEFsaWduZXI6Oklz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaWYgKGxpbmVDb250ZW50UmFuZ2UuZW5kID09IG5lZWRzTGF5b3V0
UmFuZ2UuZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgLy8g
T21pdCBmbG9hdHMgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIGxhc3QgbGluZSB3aXRoIGlubGluZSBj
b250ZW50LgogICAgICAgICAgICAgZm9yIChhdXRvIGkgPSBuZWVkc0xheW91dFJhbmdlLmVuZDsg
aS0tOykgewogICAgICAgICAgICAgICAgIGlmICghaW5saW5lSXRlbXNbaV0uaXNGbG9hdCgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSA9PSBsaW5lQ29udGVudFJhbmdlLmVuZCAtIDEg
PyBMaW5lQ29udGVudEFsaWduZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzIDog
TGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaSA9PSBsaW5lQ29udGVudFJhbmdlLmVuZCAtIDE7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25l
IG5vbi1mbG9hdCBpdGVtLgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQ6Ok5vOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9KCk7Ci0gICAg
ICAgIGxpbmUuY2xvc2UoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID09IExpbmVDb250ZW50
QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpOwotCi0gICAgICAgIGF1
dG8gbGluZUJveCA9IExpbmVCb3ggeyBEaXNwbGF5OjpJbmxpbmVSZWN0IHsgbGluZUNvbnN0cmFp
bnRzLmxvZ2ljYWxUb3BMZWZ0LCBsaW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgbGluZUNvbnN0
cmFpbnRzLmxpbmVIZWlnaHQgfSwgTGluZUJveDo6aGFsZkxlYWRpbmdNZXRyaWNzKHJvb3QoKS5z
dHlsZSgpLmZvbnRNZXRyaWNzKCksIGxpbmVDb25zdHJhaW50cy5saW5lSGVpZ2h0KSB9OwotICAg
ICAgICBhdXRvIGNvbnRlbnRBbGlnbmVyID0gTGluZUNvbnRlbnRBbGlnbmVyIHsgKnRoaXMsIGxp
bmVCb3gsIGxpbmUucnVucygpLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgfTsKLSAgICAgICAgYXV0
byBhbGlnbkxpbmVDb250ZW50ID0gWyZdIHsKLSAgICAgICAgICAgIGNvbnRlbnRBbGlnbmVyLmFk
anVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpOwotICAgICAgICAgICAgaWYgKGxpbmUuaXNWaXN1
YWxseUVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBsaW5lQm94LnJlc2V0QWxpZ25tZW50QmFz
ZWxpbmUoKTsKLSAgICAgICAgICAgICAgICBsaW5lQm94LnNldExvZ2ljYWxIZWlnaHQoeyB9KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFJlbW92ZSBkZXNjZW50IHdoZW4gYWxsIGNv
bnRlbnQgaXMgYmFzZWxpbmUgYWxpZ25lZCBidXQgbm9uZSBvZiB0aGVtIGhhdmUgZGVzY2VudC4K
LSAgICAgICAgICAgIGlmIChxdWlya3MoKS5saW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhsaW5l
LnJ1bnMoKSkpIHsKLSAgICAgICAgICAgICAgICBsaW5lQm94LnNocmlua1ZlcnRpY2FsbHkobGlu
ZUJveC5hc2NlbnRBbmREZXNjZW50KCkuZGVzY2VudCk7Ci0gICAgICAgICAgICAgICAgbGluZUJv
eC5yZXNldERlc2NlbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRlbnRBbGln
bmVyLmFsaWduVmVydGljYWxseSgpOwotCi0gICAgICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpv
bnRhbEFsaWdubWVudCA9IFsmXSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJvb3QoKS5zdHlsZSgp
LnRleHRBbGlnbigpICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKTsKLSAgICAgICAgICAgICAgICAv
LyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkg
dGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICAvLyBpbiBvcmRlciB0
byBleGFjdGx5IGZpbGwgdGhlIGxpbmUgYm94LiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBi
eSB0ZXh0LWFsaWduLWxhc3QsCi0gICAgICAgICAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZv
cmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25l
ZC4KLSAgICAgICAgICAgICAgICBpZiAobGluZS5ydW5zKCkubGFzdCgpLmlzTGluZUJyZWFrKCkg
fHwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID09IExpbmVDb250ZW50QWxpZ25lcjo6SXNM
YXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBUZXh0QWxpZ25Nb2RlOjpTdGFydDsKLSAgICAgICAgICAgICAgICByZXR1cm4gVGV4dEFsaWdu
TW9kZTo6SnVzdGlmeTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBjb250ZW50QWxpZ25l
ci5hbGlnbkhvcml6b250YWxseShjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQoKSwgaXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50KTsKLSAgICAgICAgfTsKLQotICAgICAgICBhbGlnbkxpbmVD
b250ZW50KCk7Ci0gICAgICAgIHNldERpc3BsYXlCb3hlc0ZvckxpbmUobGluZSwgY29udGVudEFs
aWduZXIuaW5saW5lUmVjdExpc3QoKSwgbGluZUJveCwgbGluZUNvbnRlbnQsIGNvbnN0cmFpbnRz
Lmhvcml6b250YWwpOworICAgICAgICBsaW5lLmNsb3NlKGlzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudCk7CisgICAgICAgIGF1dG8gbGluZVJlY3QgPSBEaXNwbGF5OjpJbmxpbmVSZWN0IHsgbGlu
ZUNvbnN0cmFpbnRzLmxvZ2ljYWxUb3BMZWZ0LCBsaW5lLmxpbmVMb2dpY2FsV2lkdGgoKSwgbGlu
ZUNvbnN0cmFpbnRzLmxpbmVIZWlnaHR9OworICAgICAgICBhdXRvIGxpbmVCb3ggPSBMaW5lQm94
IHsgKnRoaXMsIGxpbmVSZWN0LCBsaW5lQ29udGVudC5ydW5zLCBsaW5lLmlzVmlzdWFsbHlFbXB0
eSgpID8gTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6WWVzIDogTGluZUJveDo6SXNMaW5l
VmlzdWFsbHlFbXB0eTo6Tm8sIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA/IExpbmVCb3g6
OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzIDogTGluZUJveDo6SXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50OjpObyB9OworICAgICAgICBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGxp
bmVDb250ZW50LCBsaW5lQm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKIAogICAgICAgICBp
ZiAoIWxpbmVDb250ZW50UmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobmVl
ZHNMYXlvdXRSYW5nZS5zdGFydCA8IGxpbmVDb250ZW50UmFuZ2UuZW5kKTsKQEAgLTUxNyw3ICsx
OTMsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KElubGluZUl0
ZW1zJiBpbmxpbmVJdGVtcywgTGluZUxheW91dENvbgogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KICAgICAgICAgLy8gRmxvYXRzIHByZXZlbnRlZCB1cyBwbGFjaW5nIGFueSBjb250
ZW50IG9uIHRoZSBsaW5lLgotICAgICAgICBBU1NFUlQobGluZS5ydW5zKCkuaXNFbXB0eSgpKTsK
KyAgICAgICAgQVNTRVJUKGxpbmVDb250ZW50LnJ1bnMuaXNFbXB0eSgpKTsKICAgICAgICAgQVNT
RVJUKGxpbmUuaGFzSW50cnVzaXZlRmxvYXQoKSk7CiAgICAgICAgIC8vIE1vdmUgdGhlIG5leHQg
bGluZSBiZWxvdyB0aGUgaW50cnVzaXZlIGZsb2F0LgogICAgICAgICBhdXRvIGZsb2F0aW5nQ29u
dGV4dCA9IEZsb2F0aW5nQ29udGV4dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgp
LmZsb2F0aW5nU3RhdGUoKSB9OwpAQCAtODA3LDEwICs0ODMsOSBAQCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6TGluZUNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb25zdHJh
aW50c0ZvcgogICAgIHJldHVybiBMaW5lQ29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVmdCwg
bGluZUxvZ2ljYWxUb3AgfSwgbGluZUxvZ2ljYWxSaWdodCAtIGxpbmVMb2dpY2FsTGVmdCwgaW5p
dGlhbExpbmVIZWlnaHQsIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB9OwogfQogCi12b2lkIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVC
dWlsZGVyJiBsaW5lLCBjb25zdCBMaW5lQ29udGVudEFsaWduZXI6OklubGluZVJ1blJlY3RMaXN0
JiBydW5SZWN0TGlzdCwgY29uc3QgTGluZUJveCYgbGluZUJveCwgY29uc3QgTGluZUxheW91dENv
bnRleHQ6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29u
dGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewogICAgIGF1dG8mIGZvcm1h
dHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwotCiAgICAgaWYgKCFsaW5lQ29u
dGVudC5mbG9hdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0g
RmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAqdGhpcywgZm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5n
U3RhdGUoKSB9OwogICAgICAgICAvLyBNb3ZlIGZsb2F0cyB0byB0aGVpciBmaW5hbCBwb3NpdGlv
bi4KQEAgLTgzNiw3ICs1MTEsOCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRE
aXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyJiBsaW5lLCBjbwogICAgIGF1dG8g
bGluZUluZGV4ID0gaW5saW5lQ29udGVudC5saW5lQm94ZXMuc2l6ZSgpOwogICAgIGF1dG8gbGlu
ZUlua092ZXJmbG93ID0gbGluZUJveC5zY3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICAvLyBDb21w
dXRlIGJveCBmaW5hbCBnZW9tZXRyeS4KLSAgICBhdXRvJiBsaW5lUnVucyA9IGxpbmUucnVucygp
OworICAgIGF1dG8mIHJ1blJlY3RMaXN0ID0gbGluZUJveC5pbmxpbmVSZWN0TGlzdCgpOworICAg
IGF1dG8mIGxpbmVSdW5zID0gbGluZUNvbnRlbnQucnVuczsKICAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgbGluZVJ1bnMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGF1dG8m
IGxpbmVSdW4gPSBsaW5lUnVucy5hdChpbmRleCk7CiAgICAgICAgIGF1dG8gbG9naWNhbFJlY3Qg
PSBydW5SZWN0TGlzdFtpbmRleF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRl
eCAzMzk1NDQwOTI5NmI5YTBhYWU4NjhhNWM5NGNjMmQwNWJmN2E2NmYzLi40YTJjMTM3YWRjZGVl
NzRlOGY0NDM3NjMwZDkwNmVmMzM0NmRmMTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmgKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIElubGlu
ZUZvcm1hdHRpbmdTdGF0ZTsKIGNsYXNzIEludmFsaWRhdGlvblN0YXRlOworY2xhc3MgTGluZUJv
eDsKIAogLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBsYXlvdXQgbG9naWMgZm9yIGlubGlu
ZSBmb3JtYXR0aW5nIGNvbnRleHRzLgogLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIyL3Zp
c3VyZW4uaHRtbCNpbmxpbmUtZm9ybWF0dGluZwpAQCAtOTQsNyArOTUsNyBAQCBwcml2YXRlOgog
ICAgICAgICBib29sIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB7IGZhbHNlIH07CiAgICAgfTsK
ICAgICBMaW5lQ29uc3RyYWludHMgY29uc3RyYWludHNGb3JMaW5lKGNvbnN0IEhvcml6b250YWxD
b25zdHJhaW50cyYsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApOwotICAgIHZvaWQg
c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlciYsIGNvbnN0IFZlY3RvcjxE
aXNwbGF5OjpJbmxpbmVSZWN0LCAxMD4mLCBjb25zdCBMaW5lQm94JiwgY29uc3QgTGluZUxheW91
dENvbnRleHQ6OkxpbmVDb250ZW50JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7Cisg
ICAgdm9pZCBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpM
aW5lQ29udGVudCYsIGNvbnN0IExpbmVCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
KTsKICAgICB2b2lkIGludmFsaWRhdGVGb3JtYXR0aW5nU3RhdGUoY29uc3QgSW52YWxpZGF0aW9u
U3RhdGUmKTsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0
YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihGb3Jt
YXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1
aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggYmE3NTVkOTMxMWExM2U1MmNiYTI3ZDRi
NzhiODMxM2MyYzBjZmRkOS4uMGQzZTAzNjJmMDY5MDI4NmQ0YjZkNTA2NGI3ODk4OGUzMGZkNGE5
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcApAQCAt
MjQsNyArMjQsOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNw
bGF5Qm94LmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJJbmxpbmVMaW5lQm94LmgiCiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQm94LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjE1ZjVhY2ZhYmIzYWFkMGEzZGQ0MDk1
ODAyODZjOTVlZDZkMjBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKQEAgLTAsMCArMSwzMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJveC5o
IgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitzdHJ1Y3QgSGFuZ2luZ0NvbnRlbnQgewor
cHVibGljOgorICAgIHZvaWQgcmVzZXQoKTsKKworICAgIElubGluZUxheW91dFVuaXQgd2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgYm9vbCBpc0NvbmRpdGlvbmFsKCkgY29u
c3QgeyByZXR1cm4gbV9pc0NvbmRpdGlvbmFsOyB9CisKKyAgICB2b2lkIHNldElzQ29uZGl0aW9u
YWwoKSB7IG1faXNDb25kaXRpb25hbCA9IHRydWU7IH0KKyAgICB2b2lkIGV4cGFuZChJbmxpbmVM
YXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGggKz0gd2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBi
b29sIG1faXNDb25kaXRpb25hbCB7IGZhbHNlIH07CisgICAgSW5saW5lTGF5b3V0VW5pdCBtX3dp
ZHRoIHsgMCB9OworfTsKKwordm9pZCBIYW5naW5nQ29udGVudDo6cmVzZXQoKQoreworICAgIG1f
aXNDb25kaXRpb25hbCA9IGZhbHNlOworICAgIG1fd2lkdGggPSAgMDsKK30KKworTGluZUJveDo6
TGluZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQsIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIGxpbmVSZWN0LCBjb25zdCBMaW5lQnVp
bGRlcjo6UnVuTGlzdCYgcnVucywgSXNMaW5lVmlzdWFsbHlFbXB0eSBpc0xpbmVWaXN1YWxseUVt
cHR5LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50KQorICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCkKKyAgICAsIG1fcnVucyhydW5zKQorICAgICwgbV9yZWN0KGxpbmVSZWN0KQorICAgICwg
bV9zY3JvbGxhYmxlT3ZlcmZsb3cobGluZVJlY3QpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICBtX2hhc1ZhbGlkQWxpZ25tZW50QmFzZWxpbmUgPSB0cnVlOworI2VuZGlmCisgICAgYXV0byYg
cm9vdFN0eWxlID0gaW5saW5lRm9ybWF0dGluZ0NvbnRleHQucm9vdCgpLnN0eWxlKCk7CisgICAg
YXV0byBoYWxmTGVhZGluZ01ldHJpY3MgPSB0aGlzLT5oYWxmTGVhZGluZ01ldHJpY3Mocm9vdFN0
eWxlLmZvbnRNZXRyaWNzKCksIGxpbmVSZWN0LmhlaWdodCgpKTsKKworICAgIG1fYWxpZ25tZW50
QmFzZWxpbmUgPSBoYWxmTGVhZGluZ01ldHJpY3MuYXNjZW50OworICAgIG1fcm9vdElubGluZUJv
eCA9IElubGluZUJveCB7IGhhbGZMZWFkaW5nTWV0cmljcyB9OworCisgICAgYXV0byBjb250ZW50
TG9naWNhbFdpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgZm9yIChhdXRvJiBydW4g
OiBtX3J1bnMpIHsKKyAgICAgICAgYXV0byBydW5IZWlnaHQgPSBbJl0oKSAtPiBJbmxpbmVMYXlv
dXRVbml0IHsKKyAgICAgICAgICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcnVuLnN0eWxlKCkuZm9u
dE1ldHJpY3MoKTsKKyAgICAgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJy
ZWFrKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOworCisg
ICAgICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJF
bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7CisKKyAg
ICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKKyAgICAgICAgICAg
IGF1dG8mIGJveEdlb21ldHJ5ID0gaW5saW5lRm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgp
IHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBib3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7CisKKyAgICAgICAgICAgIC8vIE5v
bi1yZXBsYWNlZCBpbmxpbmUgYm94IChlLmcuIGlubGluZS1ibG9jaykuIEl0IGxvb2tzIGEgYml0
IG1pc2xlYWRpbmcgYnV0IHRoZWlyIG1hcmdpbiBib3ggaXMgY29uc2lkZXJlZCB0aGUgY29udGVu
dCBoZWlnaHQgaGVyZS4KKyAgICAgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5Cb3hI
ZWlnaHQoKTsKKyAgICAgICAgfTsKKyAgICAgICAgbV9ydW5SZWN0TGlzdC5hcHBlbmQoeyAwLCBy
dW4ubG9naWNhbExlZnQoKSwgcnVuLmxvZ2ljYWxXaWR0aCgpLCBydW5IZWlnaHQoKSB9KTsKKyAg
ICAgICAgY29udGVudExvZ2ljYWxXaWR0aCArPSBydW4ubG9naWNhbFdpZHRoKCk7CisgICAgfQor
ICAgIG1fc2Nyb2xsYWJsZU92ZXJmbG93LnNldFdpZHRoKHN0ZDo6bWF4KGxpbmVSZWN0LndpZHRo
KCksIGNvbnRlbnRMb2dpY2FsV2lkdGgpKTsKKyAgICBhbGlnblZlcnRpY2FsbHkoKTsKKyAgICBh
bGlnbkhvcml6b250YWxseShsaW5lUmVjdC53aWR0aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCwg
aXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKworICAgIGlmIChpc0xpbmVWaXN1YWxseUVt
cHR5ID09IElzTGluZVZpc3VhbGx5RW1wdHk6OlllcykgeworICAgICAgICBtX3JlY3Quc2V0SGVp
Z2h0KHsgfSk7CisgICAgICAgIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNjZW50ID0geyB9
OworICAgIH0KK30KKwordm9pZCBMaW5lQm94OjphbGlnbkhvcml6b250YWxseShJbmxpbmVMYXlv
dXRVbml0IGF2YWlsYWJsZVdpZHRoLCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0
TGluZSkKK3sKKyAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gY29sbGVjdEhhbmdpbmdDb250ZW50
KGlzTGFzdExpbmUpOworICAgIGF2YWlsYWJsZVdpZHRoICs9IGhhbmdpbmdDb250ZW50LndpZHRo
KCk7CisgICAgaWYgKG1fcnVucy5pc0VtcHR5KCkgfHwgYXZhaWxhYmxlV2lkdGggPD0gMCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPSBb
Jl0geworICAgICAgICBhdXRvJiByb290U3R5bGUgPSBmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3Qo
KS5zdHlsZSgpOworICAgICAgICBpZiAocm9vdFN0eWxlLnRleHRBbGlnbigpICE9IFRleHRBbGln
bk1vZGU6Okp1c3RpZnkpCisgICAgICAgICAgICByZXR1cm4gcm9vdFN0eWxlLnRleHRBbGlnbigp
OworICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBz
cGVjaWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKKyAgICAgICAgLy8gaW4gb3Jk
ZXIgdG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZp
ZWQgYnkgdGV4dC1hbGlnbi1sYXN0LAorICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGJlZm9yZSBh
IGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFydC1hbGlnbmVkLgor
ICAgICAgICBpZiAobV9ydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpIHx8IGlzTGFzdExpbmUgPT0g
SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCisgICAgICAgICAgICByZXR1cm4gVGV4
dEFsaWduTW9kZTo6U3RhcnQ7CisgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5
OworICAgIH0oKTsKKworICAgIGlmIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4
dEFsaWduTW9kZTo6SnVzdGlmeSkgeworICAgICAgICBhdXRvIGFjY3VtdWxhdGVkRXhwYW5zaW9u
ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBtX3J1bnMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBtX3J1blJlY3RM
aXN0W2luZGV4XS5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKKworICAg
ICAgICAgICAgYXV0byBob3Jpem9udGFsRXhwYW5zaW9uID0gbV9ydW5zW2luZGV4XS5leHBhbnNp
b24oKS5ob3Jpem9udGFsRXhwYW5zaW9uOworICAgICAgICAgICAgbV9ydW5SZWN0TGlzdFtpbmRl
eF0uZXhwYW5kSG9yaXpvbnRhbGx5KGhvcml6b250YWxFeHBhbnNpb24pOworICAgICAgICAgICAg
YWNjdW11bGF0ZWRFeHBhbnNpb24gKz0gaG9yaXpvbnRhbEV4cGFuc2lvbjsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBhZGp1c3RtZW50Rm9yQWxpZ25tZW50
ID0gWyZdIChhdXRvIGF2YWlsYWJsZVdpZHRoKSAtPiBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0
PiB7CisgICAgICAgIHN3aXRjaCAoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50KSB7CisgICAg
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpXZWJLaXRMZWZ0OgorICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgorICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAg
ICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKKyAgICAgICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0
VW5pdD4oYXZhaWxhYmxlV2lkdGgsIDApOworICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNl
bnRlcjoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6CisgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGggLyAy
LCAwKTsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9Owor
CisgICAgaWYgKGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JBbGlnbm1lbnQoYXZhaWxh
YmxlV2lkdGgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBsaW5lIGJveCBzaG91bGQgbm90IG5lZWQg
dG8gYmUgbW92ZWQsIG9ubHkgdGhlIHJ1bnMuCisgICAgICAgIG1fcmVjdC5tb3ZlSG9yaXpvbnRh
bGx5KCphZGp1c3RtZW50KTsKKyAgICAgICAgZm9yIChhdXRvJiBydW5SZWN0IDogbV9ydW5SZWN0
TGlzdCkKKyAgICAgICAgICAgIHJ1blJlY3QubW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7
CisgICAgfQorfQorCit2b2lkIExpbmVCb3g6OmFsaWduVmVydGljYWxseSgpCit7CisgICAgYWRq
dXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IG1fcnVucy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byYgcnVuID0gbV9y
dW5zW2luZGV4XTsKKyAgICAgICAgYXV0byYgcnVuUmVjdCA9IG1fcnVuUmVjdExpc3RbaW5kZXhd
OworICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAg
ICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOworICAgICAgICBhdXRvIHZlcnRp
Y2FsQWxpZ24gPSBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CisgICAgICAgIGF1
dG8gYXNjZW50ID0gbGF5b3V0Qm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKKwor
ICAgICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ24pIHsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFs
aWduOjpCYXNlbGluZToKKyAgICAgICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSB8fCBydW4u
aXNUZXh0KCkpCisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGFsaWdubWVudEJhc2VsaW5l
KCkgLSBhc2NlbnQ7CisgICAgICAgICAgICBlbHNlIGlmIChydW4uaXNDb250YWluZXJTdGFydCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4
dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICAgICAgbG9naWNhbFRv
cCA9IGFsaWdubWVudEJhc2VsaW5lKCkgLSBhc2NlbnQgLSBib3hHZW9tZXRyeS5ib3JkZXJUb3Ao
KSAtIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOworICAgICAgICAgICAgfSBl
bHNlIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxp
c2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBm
b3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGlu
Z1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7CisgICAgICAgICAgICAg
ICAgLy8gU3BlYyBtYWtlcyB1cyBnZW5lcmF0ZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBpZiBp
dCBpcyBlbXB0eS4KKyAgICAgICAgICAgICAgICBhdXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBm
b3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKS5i
YXNlbGluZSgpOworICAgICAgICAgICAgICAgIC8vIFRoZSBpbmxpbmUtYmxvY2sncyBiYXNlbGlu
ZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gaXRzIGNvbnRlbnQgYm94LiBMZXQncyBjb252ZXJ0IGl0
IHJlbGF0aXZlIHRvIHRoZSBtYXJnaW4gYm94LgorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICBfX19fX19fX19fX19fX18gPC0gbWFyZ2luIGJveAorICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgIHwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8ICBfX19fX19fX19fX18gIDwtIGJv
cmRlciBib3gKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8IHwKKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICB8IHwgIF9fX19fX19fXyAgPC0gY29udGVudCBib3gKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICB8IHwgfCAgIF4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8
IHwgfCAgIHwgIDwtIGJhc2VsaW5lIG9mZnNldAorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
IHwgfCB8ICAgfAorICAgICAgICAgICAgICAgIC8vICAgICB0ZXh0IHwgfCB8ICAgdiB0ZXh0Cisg
ICAgICAgICAgICAgICAgLy8gICAgIC0tLS0tfC18LXwtLS0tLS0tLS0tIDwtIGJhc2VsaW5lCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZv
cm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGJhc2VsaW5lRnJvbU1hcmdpbkJveCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9y
ZSgpICsgYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCku
dmFsdWVPcigwKSArIGlubGluZUJsb2NrQmFzZWxpbmU7CisgICAgICAgICAgICAgICAgbG9naWNh
bFRvcCA9IGFsaWdubWVudEJhc2VsaW5lKCkgLSBiYXNlbGluZUZyb21NYXJnaW5Cb3g7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAg
ICAgIGxvZ2ljYWxUb3AgPSBhbGlnbm1lbnRCYXNlbGluZSgpIC0gKGJveEdlb21ldHJ5LnZlcnRp
Y2FsQm9yZGVyKCkgKyBib3hHZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUp
ICsgcnVuUmVjdC5oZWlnaHQoKSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6
VG9wOgorICAgICAgICAgICAgbG9naWNhbFRvcCA9IDBfbHU7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206CisgICAgICAgICAgICBsb2dpY2Fs
VG9wID0gbG9naWNhbEJvdHRvbSgpIC0gcnVuUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRF
RF9ZRVQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJ1blJlY3Qu
c2V0VG9wKGxvZ2ljYWxUb3ApOworICAgICAgICAvLyBBZGp1c3Qgc2Nyb2xsYWJsZSBvdmVyZmxv
dyBpZiB0aGUgcnVuIG92ZXJmbG93cyB0aGUgbGluZS4KKyAgICAgICAgbV9zY3JvbGxhYmxlT3Zl
cmZsb3cuZXhwYW5kVmVydGljYWxseVRvQ29udGFpbihydW5SZWN0KTsKKyAgICAgICAgLy8gQ29u
dmVydCBydW5zIGZyb20gcmVsYXRpdmUgdG8gdGhlIGxpbmUgdG9wL2xlZnQgdG8gdGhlIGZvcm1h
dHRpbmcgcm9vdCdzIGJvcmRlciBib3ggdG9wL2xlZnQuCisgICAgICAgIHJ1blJlY3QubW92ZVZl
cnRpY2FsbHkodGhpcy0+bG9naWNhbFRvcCgpKTsKKyAgICAgICAgcnVuUmVjdC5tb3ZlSG9yaXpv
bnRhbGx5KGxvZ2ljYWxMZWZ0KCkpOworICAgIH0KK30KKwordm9pZCBMaW5lQm94OjphZGp1c3RC
YXNlbGluZUFuZExpbmVIZWlnaHQoKQoreworICAgIHVuc2lnbmVkIGlubGluZUNvbnRhaW5lck5l
c3RpbmdMZXZlbCA9IDA7CisgICAgYXV0byBoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrID0g
ZmFsc2U7CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICAgICAgYXV0byYgbGF5
b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOworICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJv
eC5zdHlsZSgpOworICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygp
KSB7CisgICAgICAgICAgICAvLyBGb3IgdGV4dCBjb250ZW50IHdlIHNldCB0aGUgYmFzZWxpbmUg
ZWl0aGVyIHRocm91Z2ggdGhlIGluaXRpYWwgc3RydXQgKHNldCBieSB0aGUgZm9ybWF0dGluZyBj
b250ZXh0IHJvb3QpIG9yCisgICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSBpbmxpbmUgY29udGFp
bmVyIChzdGFydCkuIE5vcm1hbGx5IHRoZSB0ZXh0IGNvbnRlbnQgaXRzZWxmIGRvZXMgbm90IHN0
cmV0Y2ggdGhlIGxpbmUuCisgICAgICAgICAgICBpZiAoaW5saW5lQ29udGFpbmVyTmVzdGluZ0xl
dmVsKSB7CisgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBhZGp1c3RlZCB0aGUgbGlu
ZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUgcGFyZW50IGlubGluZSBjb250YWluZXIuIAor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWspIHsKKyAgICAgICAgICAgICAgICAvLyBlLmcg
ZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3IgPGRpdj48c3Bhbj5uZXN0ZWQ8c3Bhbj5maXJzdCBkaXJl
Y3QgdGV4dDwvZGl2Pi4KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSB0cnVlOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVy
U3RhcnQoKSkgeworICAgICAgICAgICAgKytpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7Cisg
ICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBzdHJldGNoIHRoZSBsaW5lIGJ5IHRoZWly
IGZvbnQgc2l6ZS4KKyAgICAgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMsIHBhZGRpbmdzIGFu
ZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVpZ2h0LgorICAgICAgICAg
ICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygpOworICAgICAgICAgICAg
aWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZSkgewor
ICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBMaW5lQm94OjpoYWxmTGVhZGluZ01l
dHJpY3MoZm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKKyAgICAgICAg
ICAgICAgICAvLyBCb3RoIGhhbGZsZWFkaW5nIGFzY2VudCBhbmQgZGVzY2VudCBjb3VsZCBiZSBu
ZWdhdGl2ZSAodGFsbCBmb250IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1ZSkKKyAgICAgICAg
ICAgICAgICBpZiAoaGFsZkxlYWRpbmcuZGVzY2VudCA+IDApCisgICAgICAgICAgICAgICAgICAg
IHNldERlc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuZGVzY2VudCk7CisgICAgICAgICAgICAg
ICAgaWYgKGhhbGZMZWFkaW5nLmFzY2VudCA+IDApCisgICAgICAgICAgICAgICAgICAgIHNldEFz
Y2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5hc2NlbnQpOworICAgICAgICAgICAgICAgIHNldExv
Z2ljYWxIZWlnaHRJZkdyZWF0ZXIoYXNjZW50QW5kRGVzY2VudCgpLmhlaWdodCgpKTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIo
Zm9udE1ldHJpY3MuaGVpZ2h0KCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyRW5kKCkpIHsKKyAgICAgICAgICAgIC8vIFRo
ZSBsaW5lJ3MgYmFzZWxpbmUgYW5kIGhlaWdodCBoYXZlIGFscmVhZHkgYmVlbiBhZGp1c3RlZCBh
dCBDb250YWluZXJTdGFydC4KKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDb250YWluZXJOZXN0
aW5nTGV2ZWwpOworICAgICAgICAgICAgLS1pbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydW4uaXNCb3go
KSkgeworICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgp
Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICBhdXRvIG1hcmdpbkJveEhl
aWdodCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOworCisgICAgICAgICAgICBzd2l0
Y2ggKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSkgeworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFs
aWduOjpCYXNlbGluZTogeworICAgICAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbmxpbmVC
bG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSW5saW5lLWJsb2NrcyB3aXRoIGlubGluZSBj
b250ZW50IGFsd2F5cyBoYXZlIGJhc2VsaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgYXV0byYg
Zm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRp
bmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpOworICAgICAgICAgICAg
ICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25lIGxpbmUgLWV2ZW4gaWYgaXQg
aXMgZW1wdHkuCisgICAgICAgICAgICAgICAgICAgIGF1dG8mIGxhc3RMaW5lQm94ID0gZm9ybWF0
dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCktPmxpbmVCb3hlcy5sYXN0KCk7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gYmVmb3JlSGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQmVm
b3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3Ao
KS52YWx1ZU9yKDApOworICAgICAgICAgICAgICAgICAgICBzZXRBbGlnbm1lbnRCYXNlbGluZUlm
R3JlYXRlcihiZWZvcmVIZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGluZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5vbiBpbmxp
bmUtYmxvY2sgYm94ZXMgc2l0IG9uIHRoZSBiYXNlbGluZSAoaW5jbHVkaW5nIHRoZWlyIGJvdHRv
bSBtYXJnaW4pLgorICAgICAgICAgICAgICAgICAgICBzZXRBc2NlbnRJZkdyZWF0ZXIobWFyZ2lu
Qm94SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIG5lZ2F0aXZlIGRlc2Nl
bnQgKHllcywgbmVnYXRpdmUgZGVzY2VudCBpcyBhIHRoaW5nKS4KKyAgICAgICAgICAgICAgICAg
ICAgc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQgKyBzdGQ6Om1heDxJ
bmxpbmVMYXlvdXRVbml0PigwLCBhc2NlbnRBbmREZXNjZW50KCkuZGVzY2VudCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgorICAgICAgICAgICAgICAgIC8vIFRvcCBh
bGlnbiBjb250ZW50IG5ldmVyIGNoYW5nZXMgdGhlIGJhc2VsaW5lLCBpdCBvbmx5IHB1c2hlcyB0
aGUgYm90dG9tIG9mIHRoZSBsaW5lIGZ1cnRoZXIgZG93bi4KKyAgICAgICAgICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbTogeworICAgICAg
ICAgICAgICAgIC8vIEJvdHRvbSBhbGlnbmVkLCB0YWxsIGNvbnRlbnQgcHVzaGVzIHRoZSBiYXNl
bGluZSBmdXJ0aGVyIGRvd24gZnJvbSB0aGUgbGluZSB0b3AuCisgICAgICAgICAgICAgICAgYXV0
byBsaW5lTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAobWFyZ2luQm94SGVpZ2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAg
ICAgICAgICAgICAgICBzZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihhbGlnbm1lbnRCYXNl
bGluZSgpICsgKG1hcmdpbkJveEhlaWdodCAtIGxpbmVMb2dpY2FsSGVpZ2h0KSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lF
VCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0hhbmdpbmdDb250ZW50IExpbmVCb3g6
OmNvbGxlY3RIYW5naW5nQ29udGVudChJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50KSBjb25zdAoreworICAgIGF1dG8gaGFuZ2luZ0NvbnRlbnQg
PSBIYW5naW5nQ29udGVudCB7IH07CisgICAgaWYgKGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCA9PSBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcykKKyAgICAgICAgaGFuZ2luZ0Nv
bnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOworICAgIGZvciAoYXV0byYgcnVuIDogV1RGOjptYWtl
UmV2ZXJzZWRSYW5nZShtX3J1bnMpKSB7CisgICAgICAgIGlmIChydW4uaXNDb250YWluZXJTdGFy
dCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAgaGFuZ2luZ0NvbnRlbnQu
c2V0SXNDb25kaXRpb25hbCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFydW4uaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHByZXNlcnZlZCBvciBodW5nIHdoaXRl
c3BhY2UuCisgICAgICAgIGlmIChydW4uc3R5bGUoKS53aGl0ZVNwYWNlKCkgIT0gV2hpdGVTcGFj
ZTo6UHJlV3JhcCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBUaGlzIGlzIGVpdGhl
ciBhIG5vcm1hbCBvciBjb25kaXRpb25hbGx5IGhhbmdpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4K
KyAgICAgICAgaGFuZ2luZ0NvbnRlbnQuZXhwYW5kKHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0
aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIGhhbmdpbmdDb250ZW50OworfQorCit9Cit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJveC5oCmluZGV4IDU2MTcwNTBiMmY4YmMwMmY3ODhmZTAxNGUxZDgyOTExY2I5
MDJmY2EuLjBkOWY4Yzc2N2Q2YWU1ODUwMWEyMzc0OTQ3MmY0NDM2MjYxM2RkNjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3gu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
Qm94LmgKQEAgLTI5LDEwICsyOSwxNCBAQAogCiAjaW5jbHVkZSAiRGlzcGxheUJveC5oIgogI2lu
Y2x1ZGUgIkRpc3BsYXlJbmxpbmVSZWN0LmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJ1aWxkZXIu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKK2NsYXNzIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0Oworc3RydWN0IEhhbmdpbmdDb250ZW50OworCiBzdHJ1Y3Qg
QXNjZW50QW5kRGVzY2VudCB7CiAgICAgSW5saW5lTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7
IHJldHVybiBhc2NlbnQgKyBkZXNjZW50OyB9CiAKQEAgLTUwLDIwICs1NCwyNSBAQCBwdWJsaWM6
CiAgICAgICAgIEFzY2VudEFuZERlc2NlbnQgYXNjZW50QW5kRGVzY2VudDsKICAgICB9OwogCi0g
ICAgTGluZUJveChjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiwgY29uc3QgQXNjZW50QW5kRGVz
Y2VudCYpOwotICAgIExpbmVCb3goKSA9IGRlZmF1bHQ7CisgICAgZW51bSBjbGFzcyBJc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQgeyBObywgWWVzIH07CisgICAgZW51bSBjbGFzcyBJc0xpbmVW
aXN1YWxseUVtcHR5IHsgTm8sIFllcyB9OworICAgIExpbmVCb3goY29uc3QgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQmLCBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiwgY29uc3QgTGluZUJ1aWxk
ZXI6OlJ1bkxpc3QmLCBJc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQpOwogCi0gICAgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgbG9naWNhbFJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiBz
Y3JvbGxhYmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVPdmVyZmxvdzsg
fQorICAgIHVzaW5nIElubGluZVJ1blJlY3RMaXN0ID0gVmVjdG9yPERpc3BsYXk6OklubGluZVJl
Y3QsIDEwPjsKKyAgICBjb25zdCBJbmxpbmVSdW5SZWN0TGlzdCYgaW5saW5lUmVjdExpc3QoKSBj
b25zdCB7IHJldHVybiBtX3J1blJlY3RMaXN0OyB9CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmxlZnQoKTsgfQogICAgIElubGluZUxh
eW91dFVuaXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LnJpZ2h0KCk7IH0K
ICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX3JlY3Qu
dG9wKCk7IH0KICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJl
dHVybiBtX3JlY3QuYm90dG9tKCk7IH0KLQogICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LndpZHRoKCk7IH0KICAgICBJbmxpbmVMYXlvdXRV
bml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JlY3QuaGVpZ2h0KCk7IH0KIAor
ICAgIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIGxvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0OyB9CisgICAgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgc2Nyb2xsYWJsZU92
ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlT3ZlcmZsb3c7IH0KKworICAgIHN0
YXRpYyBBc2NlbnRBbmREZXNjZW50IGhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBGb250TWV0cmlj
cyYsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQpOworCiAgICAgLy8gQWxpZ21l
bnQgYmFzZWxpbmUgZnJvbSBsaW5lIGxvZ2ljYWwgdG9wLgogICAgIC8vCiAgICAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLSAgICBsaW5lIGxvZ2ljYWwgdG9wICAgICAtLS0tLS0tLS0tLS0tLS0tLS0t
ICh0b3AgYWxpZ24pCkBAIC04MCw2MyArODksMzkgQEAgcHVibGljOgogICAgIC8vICAgdgogICAg
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0gICAgbGluZSBsb2dpY2FsIGJvdHRvbSAgLS0tLS0tLS0t
LS0tLS0tLS0tLQogICAgIElubGluZUxheW91dFVuaXQgYWxpZ25tZW50QmFzZWxpbmUoKSBjb25z
dDsKKworcHJpdmF0ZToKICAgICBjb25zdCBBc2NlbnRBbmREZXNjZW50JiBhc2NlbnRBbmREZXNj
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LmFzY2VudEFuZERlc2NlbnQ7IH0K
IAogICAgIHZvaWQgc2V0QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoSW5saW5lTGF5b3V0VW5p
dCk7CiAgICAgdm9pZCBzZXRBc2NlbnRJZkdyZWF0ZXIoSW5saW5lTGF5b3V0VW5pdCk7CiAgICAg
dm9pZCBzZXREZXNjZW50SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQpOwotCi0gICAgdm9pZCBy
ZXNldEFsaWdubWVudEJhc2VsaW5lKCk7Ci0gICAgdm9pZCByZXNldERlc2NlbnQoKSB7IG1fcm9v
dElubGluZUJveC5hc2NlbnRBbmREZXNjZW50LmRlc2NlbnQgPSB7IH07IH0KLQotICAgIHZvaWQg
c2V0TG9naWNhbEhlaWdodChJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpIHsgbV9yZWN0
LnNldEhlaWdodChsb2dpY2FsSGVpZ2h0KTsgfQotCiAgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0
SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQpOwotICAgIHZvaWQgc2V0TG9naWNhbFdpZHRoKElu
bGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKSB7IG1fcmVjdC5zZXRXaWR0aChsb2dpY2FsV2lk
dGgpOyB9CiAKICAgICB2b2lkIHNldFNjcm9sbGFibGVPdmVyZmxvdyhjb25zdCBEaXNwbGF5OjpJ
bmxpbmVSZWN0JiByZWN0KSB7IG1fc2Nyb2xsYWJsZU92ZXJmbG93ID0gcmVjdDsgfQogCi0gICAg
dm9pZCBtb3ZlSG9yaXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgZGVsdGEpIHsgbV9yZWN0Lm1v
dmVIb3Jpem9udGFsbHkoZGVsdGEpOyB9Ci0KLSAgICB2b2lkIGV4cGFuZEhvcml6b250YWxseShJ
bmxpbmVMYXlvdXRVbml0IGRlbHRhKSB7IG1fcmVjdC5leHBhbmRIb3Jpem9udGFsbHkoZGVsdGEp
OyB9Ci0gICAgdm9pZCBzaHJpbmtIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCBkZWx0YSkg
eyBleHBhbmRIb3Jpem9udGFsbHkoLWRlbHRhKTsgfQorICAgIHZvaWQgYWxpZ25Ib3Jpem9udGFs
bHkoSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgSXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KTsKKyAgICB2b2lkIGFsaWduVmVydGljYWxseSgpOworICAgIHZvaWQgYWRqdXN0QmFz
ZWxpbmVBbmRMaW5lSGVpZ2h0KCk7CiAKLSAgICB2b2lkIGV4cGFuZFZlcnRpY2FsbHkoSW5saW5l
TGF5b3V0VW5pdCBkZWx0YSkgeyBtX3JlY3QuZXhwYW5kVmVydGljYWxseShkZWx0YSk7IH0KLSAg
ICB2b2lkIHNocmlua1ZlcnRpY2FsbHkoSW5saW5lTGF5b3V0VW5pdCBkZWx0YSkgeyBleHBhbmRW
ZXJ0aWNhbGx5KC1kZWx0YSk7IH0KKyAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFuZ2luZ0Nv
bnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KSBjb25zdDsKIAotICAgIC8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9DU1MyMi92aXN1cmVuLmh0bWwjaW5saW5lLWZvcm1hdHRpbmcKLSAg
ICAvLyBMaW5lIGJveGVzIHRoYXQgY29udGFpbiBubyB0ZXh0LCBubyBwcmVzZXJ2ZWQgd2hpdGUg
c3BhY2UsIG5vIGlubGluZSBlbGVtZW50cyB3aXRoIG5vbi16ZXJvIG1hcmdpbnMsIHBhZGRpbmcs
IG9yIGJvcmRlcnMsCi0gICAgLy8gYW5kIG5vIG90aGVyIGluLWZsb3cgY29udGVudCAoc3VjaCBh
cyBpbWFnZXMsIGlubGluZSBibG9ja3Mgb3IgaW5saW5lIHRhYmxlcyksIGFuZCBkbyBub3QgZW5k
IHdpdGggYSBwcmVzZXJ2ZWQgbmV3bGluZQotICAgIC8vIG11c3QgYmUgdHJlYXRlZCBhcyB6ZXJv
LWhlaWdodCBsaW5lIGJveGVzIGZvciB0aGUgcHVycG9zZXMgb2YgZGV0ZXJtaW5pbmcgdGhlIHBv
c2l0aW9ucyBvZiBhbnkgZWxlbWVudHMgaW5zaWRlIG9mIHRoZW0sCi0gICAgLy8gYW5kIG11c3Qg
YmUgdHJlYXRlZCBhcyBub3QgZXhpc3RpbmcgZm9yIGFueSBvdGhlciBwdXJwb3NlLgotICAgIC8v
IE5vdGUgdGhhdCBpdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHZpc3VhbGx5IG5vbi1lbXB0
eSBsaW5lLiA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAwcHgiPnRoaXMgaXMgc3RpbGwgY29uc2lk
ZXJlZCBub24tZW1wdHk8L3NwYW4+Ci0gICAgYm9vbCBpc0NvbnNpZGVyZWRFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1faXNDb25zaWRlcmVkRW1wdHk7IH0KLSAgICB2b2lkIHNldElzQ29uc2lkZXJl
ZEVtcHR5KCkgeyBtX2lzQ29uc2lkZXJlZEVtcHR5ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0SXND
b25zaWRlcmVkTm9uRW1wdHkoKSB7IG1faXNDb25zaWRlcmVkRW1wdHkgPSBmYWxzZTsgfQotCi0g
ICAgc3RhdGljIEFzY2VudEFuZERlc2NlbnQgaGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRN
ZXRyaWNzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCk7CisgICAgY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQorICAgIExheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsg
fQogCiBwcml2YXRlOgogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBtX2hhc1ZhbGlkQWxp
Z25tZW50QmFzZWxpbmUgeyBmYWxzZSB9OwogI2VuZGlmCisgICAgY29uc3QgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CisgICAgY29uc3QgTGluZUJ1
aWxkZXI6OlJ1bkxpc3QmIG1fcnVuczsKICAgICBEaXNwbGF5OjpJbmxpbmVSZWN0IG1fcmVjdDsK
ICAgICBEaXNwbGF5OjpJbmxpbmVSZWN0IG1fc2Nyb2xsYWJsZU92ZXJmbG93OwogICAgIElubGlu
ZUxheW91dFVuaXQgbV9hbGlnbm1lbnRCYXNlbGluZSB7IDAgfTsKLSAgICBib29sIG1faXNDb25z
aWRlcmVkRW1wdHkgeyB0cnVlIH07CiAgICAgSW5saW5lQm94IG1fcm9vdElubGluZUJveDsKKyAg
ICBJbmxpbmVSdW5SZWN0TGlzdCBtX3J1blJlY3RMaXN0OwogfTsKIAotaW5saW5lIExpbmVCb3g6
OkxpbmVCb3goY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgcmVjdCwgY29uc3QgQXNjZW50QW5k
RGVzY2VudCYgYXNjZW50QW5kRGVzY2VudCkKLSAgICA6IG1fcmVjdChyZWN0KQotICAgICwgbV9h
bGlnbm1lbnRCYXNlbGluZShhc2NlbnRBbmREZXNjZW50LmFzY2VudCkKLSAgICAsIG1fcm9vdElu
bGluZUJveChhc2NlbnRBbmREZXNjZW50KQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9o
YXNWYWxpZEFsaWdubWVudEJhc2VsaW5lID0gdHJ1ZTsKLSNlbmRpZgotfQotCiBpbmxpbmUgTGlu
ZUJveDo6SW5saW5lQm94OjpJbmxpbmVCb3goY29uc3QgQXNjZW50QW5kRGVzY2VudCYgYXNjZW50
QW5kRGVzY2VudCkKICAgICA6IGFzY2VudEFuZERlc2NlbnQoYXNjZW50QW5kRGVzY2VudCkKIHsK
QEAgLTE3OCwxNiArMTYzLDYgQEAgaW5saW5lIElubGluZUxheW91dFVuaXQgTGluZUJveDo6YWxp
Z25tZW50QmFzZWxpbmUoKSBjb25zdAogICAgIHJldHVybiBtX2FsaWdubWVudEJhc2VsaW5lOwog
fQogCi1pbmxpbmUgdm9pZCBMaW5lQm94OjpyZXNldEFsaWdubWVudEJhc2VsaW5lKCkKLXsKLSNp
ZiBBU1NFUlRfRU5BQkxFRAotICAgIG1faGFzVmFsaWRBbGlnbm1lbnRCYXNlbGluZSA9IHRydWU7
Ci0jZW5kaWYKLSAgICBtX2FsaWdubWVudEJhc2VsaW5lID0gMF9sdTsKLSAgICBtX3Jvb3RJbmxp
bmVCb3guYXNjZW50QW5kRGVzY2VudC5kZXNjZW50ID0geyB9OwotICAgIG1fcm9vdElubGluZUJv
eC5hc2NlbnRBbmREZXNjZW50LmFzY2VudCA9IHsgfTsKLX0KLQogaW5saW5lIEFzY2VudEFuZERl
c2NlbnQgTGluZUJveDo6aGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRNZXRyaWNzJiBmb250
TWV0cmljcywgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCkKIHsKICAgICBhdXRv
IGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKaW5kZXgg
MjcwMzQ4NjZlZDk3NzU4OWFjYTg0YzkxYWU5OTJhMzYyZWRlMTNiNi4uNmYxNThiYTMxYjFhMDFj
MDk1NWZjZDNhYWI5YWM0NzZhZmRlNTQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCkBAIC0yOSw3
ICsyOSw2IEBACiAKICNpbmNsdWRlICJEaXNwbGF5UnVuLmgiCiAjaW5jbHVkZSAiSW5saW5lSXRl
bS5oIgotI2luY2x1ZGUgIklubGluZUxpbmVCb3guaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0SXRl
bS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNyw3ICszNiw2IEBAIG5hbWVzcGFjZSBM
YXlvdXQgewogCiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKIGNsYXNzIElubGluZVNv
ZnRMaW5lQnJlYWtJdGVtOwotY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyOwogCiBjbGFzcyBMaW5l
QnVpbGRlciB7CiBwdWJsaWM6CkBAIC01Niw4ICs1NCw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNWaXN1YWxseUVtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9pc1Zpc3VhbGx5RW1wdHk7IH0KIAot
ICAgIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xp
bmVMb2dpY2FsV2lkdGggLSBjb250ZW50TG9naWNhbFdpZHRoKCk7IH0KKyAgICBJbmxpbmVMYXlv
dXRVbml0IGxpbmVMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVMb2dpY2FsV2lk
dGg7IH0KICAgICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnRMb2dpY2FsV2lkdGg7IH0KKyAgICBJbmxpbmVMYXlvdXRVbml0IGF2
YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbGluZUxvZ2ljYWxXaWR0aCgpIC0gY29udGVu
dExvZ2ljYWxXaWR0aCgpOyB9CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IHRyaW1tYWJsZVRyYWls
aW5nV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC53aWR0
aCgpOyB9CiAgICAgYm9vbCBpc1RyYWlsaW5nUnVuRnVsbHlUcmltbWFibGUoKSBjb25zdCB7IHJl
dHVybiBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5pc1RyYWlsaW5nUnVuRnVsbHlUcmltbWFi
bGUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvTGluZUxheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCmluZGV4IDdmZGFjNDVjMTRlZGM5ZDkxNDY2
ODY0YzkyYmQwZWZmNTE5MmI1NWQuLjFhZmZhNTZiMDY0MmM2ZDIzM2RjMTc2NTgyOWYyMzExZDc4
NGJmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0xpbmVMYXlvdXRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lm
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiRGlzcGxheUJv
eC5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5
b3V0Qm94LmgiCiAjaW5jbHVkZSAiVGV4dFV0aWwuaCIKQEAgLTMzNCw3ICszMzUsNyBAQCBMaW5l
TGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmNsb3NlKGNvbnN0
IExpbmVCdWlsZGVyJiBsaW5lLAogICAgIEFTU0VSVChsaW5lUmFuZ2UuZW5kIDw9IGxheW91dFJh
bmdlLmVuZCk7CiAgICAgLy8gQWRqdXN0IGh5cGhlbmF0ZWQgbGluZSBjb3VudC4KICAgICBtX3N1
Y2Nlc3NpdmVIeXBoZW5hdGVkTGluZUNvdW50ID0gcGFydGlhbENvbnRlbnQgJiYgcGFydGlhbENv
bnRlbnQtPnRyYWlsaW5nQ29udGVudEhhc0h5cGhlbiA/IG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRM
aW5lQ291bnQgKyAxIDogMDsKLSAgICByZXR1cm4gTGluZUNvbnRlbnQgeyBwYXJ0aWFsQ29udGVu
dCwgbGluZVJhbmdlLCBXVEZNb3ZlKG1fZmxvYXRzKSB9OworICAgIHJldHVybiBMaW5lQ29udGVu
dCB7IHBhcnRpYWxDb250ZW50LCBsaW5lUmFuZ2UsIFdURk1vdmUobV9mbG9hdHMpLCBsaW5lLnJ1
bnMoKSB9OwogfQogCiB2b2lkIExpbmVMYXlvdXRDb250ZXh0OjpuZXh0Q29udGVudEZvckxpbmUo
TGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSwgdW5zaWduZWQgY3VycmVudElubGluZUl0ZW1J
bmRleCwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgT3B0aW9uYWw8dW5zaWdu
ZWQ+IHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFi
bGVMaW5lV2lkdGgsIElubGluZUxheW91dFVuaXQgY3VycmVudExvZ2ljYWxSaWdodCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRD
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5
b3V0Q29udGV4dC5oCmluZGV4IGExOTc5ODk2YjFlMWI0MDgxNjQ4YmRkZTcxNDBkY2JjNzIwOTk4
ZTIuLjYwM2YzNDZkYzEwYTkyNzEwNDBiMGM0ZTJkNzA4ZmIyNjk3NTk5MzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91
dENvbnRleHQuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIH07CiAgICAgICAg
IHVzaW5nIEZsb2F0TGlzdCA9IFZlY3RvcjxGbG9hdD47CiAgICAgICAgIEZsb2F0TGlzdCBmbG9h
dHM7CisgICAgICAgIGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBydW5zOwogICAgIH07CiAg
ICAgTGluZUNvbnRlbnQgbGF5b3V0SW5saW5lQ29udGVudChMaW5lQnVpbGRlciYsIGNvbnN0IElu
bGluZUl0ZW1SYW5nZSYsIE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRM
ZW5ndGgpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>