<?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>218684</bug_id>
          
          <creation_ts>2020-11-07 09:51:58 -0800</creation_ts>
          <short_desc>[LFC][Integration] Introduce InlineContentBuilder</short_desc>
          <delta_ts>2020-11-07 11:36:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="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>1705537</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-11-07 09:51:58 -0800</bug_when>
    <thetext>This is where we construct the display runs and lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705539</commentid>
    <comment_count>1</comment_count>
      <attachid>413527</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-11-07 10:13:32 -0800</bug_when>
    <thetext>Created attachment 413527
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705548</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-07 11:35:11 -0800</bug_when>
    <thetext>Committed r269562: &lt;https://trac.webkit.org/changeset/269562&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 413527.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705549</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-07 11:36:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/71151872&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413527</attachid>
            <date>2020-11-07 10:13:32 -0800</date>
            <delta_ts>2020-11-07 11:35:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218684-20201107101331.patch</filename>
            <type>text/plain</type>
            <size>35418</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NDMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTMwZDRkYmVjZmVmNWY0
MzQ1NTVlZjkzNjYyZGIxYmZhM2Y5NjA5Zi4uMzY1ZWNjYmI0N2JjOTAyMTFmNDQ1OTNkZmY1Mzgw
OTdkNDFiMzRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIwLTExLTA3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSW50ZWdyYXRpb25d
IEludHJvZHVjZSBJbmxpbmVDb250ZW50QnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgZGlzcGxheSBydW4gYW5kIGxpbmUgY29u
c3RydWN0aW9uIHRvIHRoaXMgbmV3IGNsYXNzLiBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvcgor
ICAgICAgICBleHBhbmRpbmcgdGhlIGNvbnN0cnVjdGlvbiBjb3ZlcmFnZSB0byBzdXBwb3J0IGZl
YXR1cmVzIGxpa2UgYmlkaXJlY3Rpb25hbCBjb250ZW50IGhhbmRsaW5nLgorCisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUNvbnRlbnRCcmVha2Vy
LmNwcDoKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Jbmxp
bmVDb250ZW50QnVpbGRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50
ZWdyYXRpb246OmxpbmVPdmVyZmxvd1dpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dElu
dGVncmF0aW9uOjpJbmxpbmVDb250ZW50QnVpbGRlcjo6SW5saW5lQ29udGVudEJ1aWxkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnRCdWlsZGVy
OjpidWlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6SW5s
aW5lQ29udGVudEJ1aWxkZXI6OmNvbXB1dGVMaW5lTGV2ZWxWaXN1YWxBZGp1c3RtZW50c0ZvclJ1
bnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OklubGluZUNv
bnRlbnRCdWlsZGVyOjpjb25zdHJ1Y3REaXNwbGF5TGluZVJ1bnMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnRCdWlsZGVyOjpjb25zdHJ1
Y3REaXNwbGF5TGluZXMgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlv
dXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAqIGxh
eW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNvbnN0cnVjdENvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmxpbmVPdmVyZmxvd1dp
ZHRoKTogRGVsZXRlZC4KKwogMjAyMC0xMS0wNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVzZSBzdGQ6OmV4Y2hhbmdlIGluc3RlYWQgb2Yg
V1RGTW92ZSB0byBhdm9pZCB1c2luZyBtZW1iZXJzIGFmdGVyIG1vdmluZyB0aGVtIGluIE5hdmln
YXRpb25TY2hlZHVsZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGE0ZTczMTdiMzMwOTYwMmRmYTli
NTU3MGQzNTZjOGJiYjMzYjg0NDMuLmJlMjlhYjMzOWM2YjRiN2QxZDZiYjMyN2M5N2Y4YzAzODZm
NTI3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xNDk1LDYgKzE0OTUsNyBAQCBsYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL3Rl
eHQvVGV4dFV0aWwuY3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hU
cmVlLmNwcAogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3Bw
CitsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRl
ci5jcHAKIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQu
Y3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3Bw
CiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDg2ZjE4NTk5YmY2MzAyYzQyYWEzZGFjNzRkNWE0NDJhZDk1YmNjOWYuLmIyZmYzOTliN2ZmNGY2
YjEwZWMyNDFhNzYxNTM2OGNlMTU2YTIzMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwNTQsNiArMjA1NCw3IEBACiAJCTZG
MjZCQjZDMjMzNDNFNkYwMDJGMkJFQSAvKiBMYXlvdXRDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjI2QkI2QjIzMzQzRTVCMDAyRjJCRUEg
LyogTGF5b3V0Q29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTZGMjZFQjQ4MjM0MDA0QTUwMDY5MDZFMiAvKiBJbmxpbmVMaW5lQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYyNkVC
NDYyMzQwMDRBNTAwNjkwNkUyIC8qIElubGluZUxpbmVCdWlsZGVyLmggKi87IH07CiAJCTZGMzYw
RTUwMjM5OTk0MjEwMDE1MTJBNyAvKiBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYzNjBFNEUyMzk5OTQyMDAw
MTUxMkE3IC8qIElubGluZVNvZnRMaW5lQnJlYWtJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkYzRkJBOTgyNTU2RTMxMzAwMzUzMEZEIC8q
IExheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGM0ZCQTk3MjU1NkUzMTIwMDM1MzBGRCAv
KiBMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY0MERBODIyNTEzMDMzQTAwRUMw
NEI3IC8qIElubGluZVJlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZGNDBEQTgxMjUxMzAzM0EwMEVDMDRCNyAvKiBJbmxpbmVSZWN0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY2MzgzRjYyNDI3
QUY0QTAwREFCQTUzIC8qIExheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGNjM4M0Y0MjQyN0FGNDkwMERB
QkE1MyAvKiBMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY3Q0EzQzYyMDhDMjk1NzAwMkYyOUFC
IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RjdDQTNDNDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTYzNSw2ICs5NjM2
LDggQEAKIAkJNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8qIElubGluZUxpbmVCdWlsZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUxpbmVCdWlsZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMzVFRkFGMjE4N0NCRDUwMDQ0RTBGNCAvKiBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjM2MEU0RTIzOTk5NDIwMDAxNTEyQTcgLyogSW5s
aW5lU29mdExpbmVCcmVha0l0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5saW5lU29mdExpbmVCcmVha0l0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NkYzRkJBOTYyNTU2RTMwODAwMzUzMEZEIC8qIExheW91dEludGVncmF0aW9uSW5saW5lQ29udGVu
dEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVD
b250ZW50QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGM0ZCQTk3
MjU1NkUzMTIwMDM1MzBGRCAvKiBMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEludGVncmF0aW9uSW5s
aW5lQ29udGVudEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY0MERB
ODEyNTEzMDMzQTAwRUMwNEI3IC8qIElubGluZVJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5saW5lUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
RjRBNUJENTIyRjlGMTZCMDBBODBGMjUgLyogTGF5b3V0UGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjVC
N0VBQTIzMDBBNzlFMDA2N0Q5QzMgLyogVGFibGVHcmlkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRhYmxlR3JpZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODgwOCw2ICsy
ODgxMSw4IEBACiAJCQkJRTQwM0I3QTEyNTFCMTE5MzAwMTlFODAwIC8qIExheW91dEludGVncmF0
aW9uQ292ZXJhZ2UuaCAqLywKIAkJCQlFNEZCNEIzNTIzOUJFQjEwMDAzQzMzNkEgLyogTGF5b3V0
SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmNwcCAqLywKIAkJCQlFNDUxQzYzMzIzOTQwNThFMDA5
OTMxOTAgLyogTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmggKi8sCisJCQkJNkYzRkJB
OTYyNTU2RTMwODAwMzUzMEZEIC8qIExheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxk
ZXIuY3BwICovLAorCQkJCTZGM0ZCQTk3MjU1NkUzMTIwMDM1MzBGRCAvKiBMYXlvdXRJbnRlZ3Jh
dGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmggKi8sCiAJCQkJNkZCNDdFNjEyMjc3NDI1QTAwQzdC
Q0IwIC8qIExheW91dEludGVncmF0aW9uTGluZS5oICovLAogCQkJCUU0RDMzRjQyMjUyQzUwQTgw
MDgzN0QwNSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5jcHAgKi8sCiAJCQkJRTRE
MzNGM0YyNTJDNEI4MjAwODM3RDA1IC8qIExheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgg
Ki8sCkBAIC0zMzE1OCw2ICszMzE2Myw3IEBACiAJCQkJRTQxODAyNTUyM0Q0NTQ5QjAwRkZCMDcx
IC8qIExheW91dEludGVncmF0aW9uQm94VHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQwM0I3
QTIyNTFCMTE5MzAwMTlFODAwIC8qIExheW91dEludGVncmF0aW9uQ292ZXJhZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0NTFDNjM0MjM5NDA1OEYwMDk5MzE5MCAvKiBMYXlvdXRJbnRlZ3JhdGlv
bklubGluZUNvbnRlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGM0ZCQTk4MjU1NkUzMTMwMDM1
MzBGRCAvKiBMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk2RkI0N0U2MzIyNzc0MjVBMDBDN0JDQjAgLyogTGF5b3V0SW50ZWdyYXRpb25M
aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEQzM0Y0MTI1MkM0QjgzMDA4MzdEMDUgLyogTGF5
b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0RDMzRjQ0
MjUyQzUwRTIwMDgzN0QwNSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBh
dGguaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29u
dGVudEJ1aWxkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ZWZlNDRlZWQyYThjNzEwMGVmMGFmZTdkYmNl
YmQ2NWU3MDI3ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5jcHAKQEAgLTAs
MCArMSwyMjMgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uSW5saW5l
Q29udGVudEJ1aWxkZXIuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQorCisjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbmxp
bmVGb3JtYXR0aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkxheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudC5oIgorI2luY2x1ZGUgIkxheW91
dEludGVncmF0aW9uUnVuLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRCb3guaCIKKyNpbmNs
dWRlICJMYXlvdXRTdGF0ZS5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgorI2luY2x1
ZGUgIlN0cmluZ1RydW5jYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
TGF5b3V0SW50ZWdyYXRpb24geworCitzdHJ1Y3QgTGluZUxldmVsVmlzdWFsQWRqdXN0bWVudHNG
b3JSdW5zIHsKKyAgICBib29sIG5lZWRzSW50ZWdyYWxQb3NpdGlvbiB7IGZhbHNlIH07CisgICAg
Ly8gSXQncyBvbmx5ICd0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcycgZm9yIG5vdy4KKyAgICBib29s
IG5lZWRzVHJhaWxpbmdDb250ZW50UmVwbGFjZW1lbnQgeyBmYWxzZSB9OworfTsKKworaW5saW5l
IHN0YXRpYyBmbG9hdCBsaW5lT3ZlcmZsb3dXaWR0aChjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZs
b3csIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBs
aW5lQm94TG9naWNhbFdpZHRoKQoreworICAgIC8vIEZJWE1FOiBJdCdzIHRoZSBjb3B5IG9mIHRo
ZSBsZXRzLWFkanVzdC1vdmVyZmxvdy1mb3ItdGhlLWNhcmV0IGJlaGF2aW9yIGZyb20gQ29tcGxl
eExpbmVMYXlvdXQ6OmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuLgorICAgIGF1dG8gZW5k
UGFkZGluZyA9IGZsb3cuaGFzT3ZlcmZsb3dDbGlwKCkgPyBmbG93LnBhZGRpbmdFbmQoKSA6IDBf
bHU7CisgICAgaWYgKCFlbmRQYWRkaW5nKQorICAgICAgICBlbmRQYWRkaW5nID0gZmxvdy5lbmRQ
YWRkaW5nV2lkdGhGb3JDYXJldCgpOworICAgIGlmIChmbG93Lmhhc092ZXJmbG93Q2xpcCgpICYm
ICFlbmRQYWRkaW5nICYmIGZsb3cuZWxlbWVudCgpICYmIGZsb3cuZWxlbWVudCgpLT5pc1Jvb3RF
ZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgZW5kUGFkZGluZyA9IDE7CisgICAgbGluZUJveExv
Z2ljYWxXaWR0aCArPSBlbmRQYWRkaW5nOworICAgIHJldHVybiBzdGQ6Om1heChsaW5lTG9naWNh
bFdpZHRoLCBsaW5lQm94TG9naWNhbFdpZHRoKTsKK30KKworSW5saW5lQ29udGVudEJ1aWxkZXI6
OklubGluZUNvbnRlbnRCdWlsZGVyKGNvbnN0IExheW91dDo6TGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlLCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrRmxvdykKKyAgICA6IG1fbGF5b3V0U3Rh
dGUobGF5b3V0U3RhdGUpCisgICAgLCBtX2Jsb2NrRmxvdyhibG9ja0Zsb3cpCit7Cit9CisKK3Zv
aWQgSW5saW5lQ29udGVudEJ1aWxkZXI6OmJ1aWxkKElubGluZUNvbnRlbnQmIGlubGluZUNvbnRl
bnQsIGNvbnN0IExheW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlJiBpbmxpbmVGb3JtYXR0aW5n
U3RhdGUpIGNvbnN0Cit7CisgICAgYXV0byBsaW5lTGV2ZWxWaXN1YWxBZGp1c3RtZW50c0ZvclJ1
bnMgPSBjb21wdXRlTGluZUxldmVsVmlzdWFsQWRqdXN0bWVudHNGb3JSdW5zKGlubGluZUZvcm1h
dHRpbmdTdGF0ZSk7CisgICAgY29uc3RydWN0RGlzcGxheUxpbmVSdW5zKGlubGluZUNvbnRlbnQs
IGlubGluZUZvcm1hdHRpbmdTdGF0ZSwgbGluZUxldmVsVmlzdWFsQWRqdXN0bWVudHNGb3JSdW5z
KTsKKyAgICBjb25zdHJ1Y3REaXNwbGF5TGluZXMoaW5saW5lQ29udGVudCwgaW5saW5lRm9ybWF0
dGluZ1N0YXRlLCBsaW5lTGV2ZWxWaXN1YWxBZGp1c3RtZW50c0ZvclJ1bnMpOworfQorCitJbmxp
bmVDb250ZW50QnVpbGRlcjo6TGluZUxldmVsVmlzdWFsQWRqdXN0bWVudHNGb3JSdW5zTGlzdCBJ
bmxpbmVDb250ZW50QnVpbGRlcjo6Y29tcHV0ZUxpbmVMZXZlbFZpc3VhbEFkanVzdG1lbnRzRm9y
UnVucyhjb25zdCBMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZSYgaW5saW5lRm9ybWF0dGlu
Z1N0YXRlKSBjb25zdAoreworICAgIGF1dG8mIGxpbmVzID0gaW5saW5lRm9ybWF0dGluZ1N0YXRl
LmxpbmVzKCk7CisgICAgYXV0byYgcm9vdFN0eWxlID0gbV9sYXlvdXRTdGF0ZS5yb290KCkuc3R5
bGUoKTsKKyAgICBhdXRvIHNob3VsZENoZWNrSG9yaXpvbnRhbE92ZXJmbG93Rm9yQ29udGVudFJl
cGxhY2VtZW50ID0gcm9vdFN0eWxlLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpIaWRkZW4gJiYg
cm9vdFN0eWxlLnRleHRPdmVyZmxvdygpICE9IFRleHRPdmVyZmxvdzo6Q2xpcDsKKworICAgIExp
bmVMZXZlbFZpc3VhbEFkanVzdG1lbnRzRm9yUnVuc0xpc3QgbGluZUxldmVsVmlzdWFsQWRqdXN0
bWVudHNGb3JSdW5zKGxpbmVzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgbGluZUluZGV4ID0g
MDsgbGluZUluZGV4IDwgbGluZXMuc2l6ZSgpOyArK2xpbmVJbmRleCkgeworICAgICAgICBhdXRv
IGxpbmVOZWVkc0xlZ2FjeUludGVncmFsVmVydGljYWxQb3NpdGlvbiA9IFsmXSB7CisgICAgICAg
ICAgICAvLyBJbmxpbmVUcmVlIHJvdW5kcyB5IHBvc2l0aW9uIHRvIGludGVncmFsIHZhbHVlIGZv
ciBjZXJ0YWluIGNvbnRlbnQgKHNlZSBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5CbG9ja0Rp
cmVjdGlvbikuCisgICAgICAgICAgICBhdXRvIGlubGluZUxldmVsQm94TGlzdCA9IGlubGluZUZv
cm1hdHRpbmdTdGF0ZS5saW5lQm94ZXMoKVtsaW5lSW5kZXhdLmlubGluZUxldmVsQm94TGlzdCgp
OworICAgICAgICAgICAgaWYgKGlubGluZUxldmVsQm94TGlzdC5zaXplKCkgPT0gMSkgeworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGV4dCBjb250ZW50IG9ubHkgd2l0aCByb290IGlubGlu
ZSBib3guCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBUZXh0ICsgPGJyPiAob3IganVzdCA8YnI+IG9yIHRleHQ8c3Bhbj48L3NwYW4+
PGJyPikgYmVoYXZlcyBsaWtlIHRleHQuCisgICAgICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxl
dmVsQm94IDogaW5saW5lTGV2ZWxCb3hMaXN0KSB7CisgICAgICAgICAgICAgICAgaWYgKGlubGlu
ZUxldmVsQm94LT5pc0F0b21pY0lubGluZUxldmVsQm94KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gQ29udGVudCBsaWtlIHRleHQ8aW1nPiBwcmV2ZW50cyBsZWdhY3kgc25hcHBpbmcuCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKyAgICAgICAg
bGluZUxldmVsVmlzdWFsQWRqdXN0bWVudHNGb3JSdW5zW2xpbmVJbmRleF0ubmVlZHNJbnRlZ3Jh
bFBvc2l0aW9uID0gbGluZU5lZWRzTGVnYWN5SW50ZWdyYWxWZXJ0aWNhbFBvc2l0aW9uKCk7Cisg
ICAgICAgIGlmIChzaG91bGRDaGVja0hvcml6b250YWxPdmVyZmxvd0ZvckNvbnRlbnRSZXBsYWNl
bWVudCkgeworICAgICAgICAgICAgYXV0byYgbGluZSA9IGxpbmVzW2xpbmVJbmRleF07CisgICAg
ICAgICAgICBhdXRvIG92ZXJmbG93V2lkdGggPSBsaW5lT3ZlcmZsb3dXaWR0aChtX2Jsb2NrRmxv
dywgbGluZS5sb2dpY2FsV2lkdGgoKSwgbGluZS5saW5lQm94TG9naWNhbFJlY3QoKS53aWR0aCgp
KTsKKyAgICAgICAgICAgIGxpbmVMZXZlbFZpc3VhbEFkanVzdG1lbnRzRm9yUnVuc1tsaW5lSW5k
ZXhdLm5lZWRzVHJhaWxpbmdDb250ZW50UmVwbGFjZW1lbnQgPSBvdmVyZmxvd1dpZHRoID4gbGlu
ZS5sb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbGluZUxldmVs
VmlzdWFsQWRqdXN0bWVudHNGb3JSdW5zOworfQorCit2b2lkIElubGluZUNvbnRlbnRCdWlsZGVy
Ojpjb25zdHJ1Y3REaXNwbGF5TGluZVJ1bnMoSW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwg
Y29uc3QgTGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGlubGluZUZvcm1hdHRpbmdTdGF0
ZSwgY29uc3QgTGluZUxldmVsVmlzdWFsQWRqdXN0bWVudHNGb3JSdW5zTGlzdCYgbGluZUxldmVs
VmlzdWFsQWRqdXN0bWVudHNGb3JSdW5zKSBjb25zdAoreworICAgIGF1dG8mIGxpbmVzID0gaW5s
aW5lRm9ybWF0dGluZ1N0YXRlLmxpbmVzKCk7CisgICAgYXV0byBpbml0aWFsQ29udGFpbmdCbG9j
a1NpemUgPSBtX2xheW91dFN0YXRlLnZpZXdwb3J0U2l6ZSgpOworICAgIFZlY3Rvcjxib29sPiBo
YXNBZGp1c3RlZFRyYWlsaW5nTGluZUxpc3QobGluZXMuc2l6ZSgpLCBmYWxzZSk7CisgICAgZm9y
IChhdXRvJiBsaW5lUnVuIDogaW5saW5lRm9ybWF0dGluZ1N0YXRlLmxpbmVSdW5zKCkpIHsKKyAg
ICAgICAgYXV0byYgbGF5b3V0Qm94ID0gbGluZVJ1bi5sYXlvdXRCb3goKTsKKyAgICAgICAgYXV0
byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICAgICAgYXV0byBjb21wdXRlZElua092
ZXJmbG93ID0gWyZdIChhdXRvIHJ1blJlY3QpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3Igbm9uLXRleHQgaW5rIG92ZXJmbG93LgorICAgICAgICAgICAgaWYgKCFsaW5l
UnVuLnRleHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcnVuUmVjdDsKKyAgICAgICAgICAg
IGF1dG8gaW5rT3ZlcmZsb3cgPSBydW5SZWN0OworICAgICAgICAgICAgYXV0byBzdHJva2VPdmVy
ZmxvdyA9IHN0ZDo6Y2VpbChzdHlsZS5jb21wdXRlZFN0cm9rZVdpZHRoKGNlaWxlZEludFNpemUo
aW5pdGlhbENvbnRhaW5nQmxvY2tTaXplKSkpOworICAgICAgICAgICAgaW5rT3ZlcmZsb3cuaW5m
bGF0ZShzdHJva2VPdmVyZmxvdyk7CisKKyAgICAgICAgICAgIGF1dG8gbGV0dGVyU3BhY2luZyA9
IHN0eWxlLmZvbnRDYXNjYWRlKCkubGV0dGVyU3BhY2luZygpOworICAgICAgICAgICAgaWYgKGxl
dHRlclNwYWNpbmcgPCAwKSB7CisgICAgICAgICAgICAgICAgLy8gTGFzdCBsZXR0ZXIncyBuZWdh
dGl2ZSBzcGFjaW5nIHNocmlua3MgbG9naWNhbCByZWN0LiBQdXNoIGl0IHRvIGluayBvdmVyZmxv
dy4KKyAgICAgICAgICAgICAgICBpbmtPdmVyZmxvdy5leHBhbmQoLWxldHRlclNwYWNpbmcsIHsg
fSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gaW5rT3ZlcmZsb3c7CisgICAg
ICAgIH07CisgICAgICAgIGF1dG8gcnVuUmVjdCA9IEZsb2F0UmVjdCB7IGxpbmVSdW4ubG9naWNh
bFJlY3QoKSB9OworICAgICAgICAvLyBJbmxpbmUgYm94ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBs
aW5lIGJveCB3aGlsZSBmaW5hbCBSdW5zIG5lZWQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHBhcmVu
dCBCb3gKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZG4ndCB3ZSBqdXN0IGxlYXZlIHRoZW0gYmUg
cmVsYXRpdmUgdG8gdGhlIGxpbmUgYm94PworICAgICAgICBhdXRvIGxpbmVJbmRleCA9IGxpbmVS
dW4ubGluZUluZGV4KCk7CisgICAgICAgIGF1dG8mIGxpbmUgPSBsaW5lc1tsaW5lSW5kZXhdOwor
ICAgICAgICBhdXRvIGxpbmVCb3hMb2dpY2FsUmVjdCA9IGxpbmUubGluZUJveExvZ2ljYWxSZWN0
KCk7CisgICAgICAgIHJ1blJlY3QubW92ZUJ5KHsgbGluZUJveExvZ2ljYWxSZWN0LmxlZnQoKSwg
bGluZUJveExvZ2ljYWxSZWN0LnRvcCgpIH0pOworICAgICAgICBpZiAobGluZUxldmVsVmlzdWFs
QWRqdXN0bWVudHNGb3JSdW5zW2xpbmVJbmRleF0ubmVlZHNJbnRlZ3JhbFBvc2l0aW9uKQorICAg
ICAgICAgICAgcnVuUmVjdC5zZXRZKHJvdW5kVG9JbnQocnVuUmVjdC55KCkpKTsKKworICAgICAg
ICBXVEY6Ok9wdGlvbmFsPFJ1bjo6VGV4dENvbnRlbnQ+IHRleHRDb250ZW50OworICAgICAgICBp
ZiAoYXV0byB0ZXh0ID0gbGluZVJ1bi50ZXh0KCkpIHsKKyAgICAgICAgICAgIGF1dG8gYWRqdXN0
ZWRDb250ZW50VG9SZW5kZXJlciA9IFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBvcmlnaW5h
bENvbnRlbnQgPSB0ZXh0LT5jb250ZW50KCkuc3Vic3RyaW5nKHRleHQtPnN0YXJ0KCksIHRleHQt
Pmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBpZiAodGV4dC0+bmVlZHNIeXBoZW4oKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcob3JpZ2luYWxDb250ZW50LCBzdHls
ZS5oeXBoZW5TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVMZXZlbFZpc3VhbEFk
anVzdG1lbnRzRm9yUnVuc1tsaW5lSW5kZXhdLm5lZWRzVHJhaWxpbmdDb250ZW50UmVwbGFjZW1l
bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5IGl0J3MgZWxsaXBzaXMgcmVw
bGFjZW1lbnQgb25seSwgYnV0IGFkZGluZyBzdXBwb3J0IGZvciAidGV4dC1vdmVyZmxvdzogc3Ry
aW5nIiBzaG91bGQgYmUgcmVsYXRpdmVseSBzaW1wbGUuCisgICAgICAgICAgICAgICAgICAgIGlm
IChoYXNBZGp1c3RlZFRyYWlsaW5nTGluZUxpc3RbbGluZUluZGV4XSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBsaW5lIGFscmVhZHkgaGFzIGFkanVzdGVkIHRyYWlsaW5nLiBB
bnkgcnVucyBhZnRlciB0aGUgZWxsaXBzaXMgc2hvdWxkIHJlbmRlciBibGFuay4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGF1dG8gcnVuTG9naWNhbFJlY3QgPSBsaW5lUnVuLmxv
Z2ljYWxSZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gbGluZUxvZ2ljYWxSaWdodCA9
IGxpbmUubG9naWNhbFJpZ2h0KCk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZWxsaXBzaXNX
aWR0aCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkud2lkdGgoV2ViQ29yZTo6VGV4dFJ1biB7ICZob3Jp
em9udGFsRWxsaXBzaXMgfSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChydW5Mb2dpY2FsUmVj
dC5yaWdodCgpICsgZWxsaXBzaXNXaWR0aCA+IGxpbmVMb2dpY2FsUmlnaHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoZSBuZXh0IHJ1biB3aXRoIGVsbGlwc2lzIHdvdWxkIHN1cmVs
eSBvdmVyZmxvdy4gU28gbGV0J3MganVzdCBhZGQgaXQgdG8gdGhpcyBydW4gZXZlbiBpZgorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaXQgbWFrZXMgdGhlIHJ1biB3aWRlciB0aGFuIGl0IG9y
aWdpbmFsbHkgd2FzLgorICAgICAgICAgICAgICAgICAgICAgICAgaGFzQWRqdXN0ZWRUcmFpbGlu
Z0xpbmVMaXN0W2xpbmVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZmxv
YXQgcmVzdWx0V2lkdGggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBtYXhXaWR0
aCA9IGxpbmUubG9naWNhbFdpZHRoKCkgLSBydW5Mb2dpY2FsUmVjdC5sZWZ0KCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKG9y
aWdpbmFsQ29udGVudCwgbWF4V2lkdGgsIHN0eWxlLmZvbnRDYXNjYWRlKCksIHJlc3VsdFdpZHRo
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAg
dGV4dENvbnRlbnQgPSBSdW46OlRleHRDb250ZW50IHsgdGV4dC0+c3RhcnQoKSwgdGV4dC0+bGVu
Z3RoKCksIHRleHQtPmNvbnRlbnQoKSwgYWRqdXN0ZWRDb250ZW50VG9SZW5kZXJlcigpLCB0ZXh0
LT5uZWVkc0h5cGhlbigpIH07CisgICAgICAgIH0KKyAgICAgICAgYXV0byBleHBhbnNpb24gPSBS
dW46OkV4cGFuc2lvbiB7IGxpbmVSdW4uZXhwYW5zaW9uKCkuYmVoYXZpb3IsIGxpbmVSdW4uZXhw
YW5zaW9uKCkuaG9yaXpvbnRhbEV4cGFuc2lvbiB9OworICAgICAgICBhdXRvIGRpc3BsYXlSdW4g
PSBSdW4geyBsaW5lSW5kZXgsIGxheW91dEJveCwgcnVuUmVjdCwgY29tcHV0ZWRJbmtPdmVyZmxv
dyhydW5SZWN0KSwgZXhwYW5zaW9uLCB0ZXh0Q29udGVudCB9OworICAgICAgICBpbmxpbmVDb250
ZW50LnJ1bnMuYXBwZW5kKGRpc3BsYXlSdW4pOworICAgIH0KK30KKwordm9pZCBJbmxpbmVDb250
ZW50QnVpbGRlcjo6Y29uc3RydWN0RGlzcGxheUxpbmVzKElubGluZUNvbnRlbnQmIGlubGluZUNv
bnRlbnQsIGNvbnN0IExheW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlJiBpbmxpbmVGb3JtYXR0
aW5nU3RhdGUsIGNvbnN0IExpbmVMZXZlbFZpc3VhbEFkanVzdG1lbnRzRm9yUnVuc0xpc3QmIGxp
bmVMZXZlbFZpc3VhbEFkanVzdG1lbnRzRm9yUnVucykgY29uc3QKK3sKKyAgICBhdXRvJiBsaW5l
cyA9IGlubGluZUZvcm1hdHRpbmdTdGF0ZS5saW5lcygpOworICAgIGF1dG8mIGxpbmVCb3hlcyA9
IGlubGluZUZvcm1hdHRpbmdTdGF0ZS5saW5lQm94ZXMoKTsKKyAgICBhdXRvJiBydW5zID0gaW5s
aW5lQ29udGVudC5ydW5zOworICAgIHNpemVfdCBydW5JbmRleCA9IDA7CisgICAgZm9yIChzaXpl
X3QgbGluZUluZGV4ID0gMDsgbGluZUluZGV4IDwgbGluZXMuc2l6ZSgpOyArK2xpbmVJbmRleCkg
eworICAgICAgICBhdXRvJiBsaW5lID0gbGluZXNbbGluZUluZGV4XTsKKyAgICAgICAgYXV0byBs
aW5lQm94TG9naWNhbFJlY3QgPSBsaW5lLmxpbmVCb3hMb2dpY2FsUmVjdCgpOworICAgICAgICAv
LyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGUgbG9naWNhbCB0byBwaHlzaWNhbCB0cmFuc2xhdGUg
c2hvdWxkIGhhcHBlbi4KKyAgICAgICAgYXV0byBsaW5lQm94TG9naWNhbEJvdHRvbSA9IChsaW5l
Qm94TG9naWNhbFJlY3QudG9wKCkgLSBsaW5lLmxvZ2ljYWxUb3AoKSkgKyBsaW5lQm94TG9naWNh
bFJlY3QuaGVpZ2h0KCk7CisgICAgICAgIGF1dG8gb3ZlcmZsb3dIZWlnaHQgPSBzdGQ6Om1heChs
aW5lLmxvZ2ljYWxIZWlnaHQoKSwgbGluZUJveExvZ2ljYWxCb3R0b20pOworICAgICAgICBhdXRv
IHNjcm9sbGFibGVPdmVyZmxvd1JlY3QgPSBGbG9hdFJlY3QgeyBsaW5lLmxvZ2ljYWxMZWZ0KCks
IGxpbmUubG9naWNhbFRvcCgpLCBsaW5lT3ZlcmZsb3dXaWR0aChtX2Jsb2NrRmxvdywgbGluZS5s
b2dpY2FsV2lkdGgoKSwgbGluZUJveExvZ2ljYWxSZWN0LndpZHRoKCkpLCBvdmVyZmxvd0hlaWdo
dCB9OworCisgICAgICAgIGF1dG8gZmlyc3RSdW5JbmRleCA9IHJ1bkluZGV4OworICAgICAgICBh
dXRvIGxpbmVJbmtPdmVyZmxvd1JlY3QgPSBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0OworICAgICAg
ICB3aGlsZSAocnVuSW5kZXggPCBydW5zLnNpemUoKSAmJiBydW5zW3J1bkluZGV4XS5saW5lSW5k
ZXgoKSA9PSBsaW5lSW5kZXgpCisgICAgICAgICAgICBsaW5lSW5rT3ZlcmZsb3dSZWN0LnVuaXRl
KHJ1bnNbcnVuSW5kZXgrK10uaW5rT3ZlcmZsb3coKSk7CisgICAgICAgIGF1dG8gcnVuQ291bnQg
PSBydW5JbmRleCAtIGZpcnN0UnVuSW5kZXg7CisgICAgICAgIGF1dG8gbGluZVJlY3QgPSBGbG9h
dFJlY3QgeyBsaW5lLmxvZ2ljYWxSZWN0KCkgfTsKKyAgICAgICAgLy8gUGFpbnRpbmcgY29kZSAo
c3BlY2lmaWNhbGx5IFRleHRSdW4ncyB4UG9zKSBuZWVkcyB0aGUgbGluZSBib3ggb2Zmc2V0IHRv
IGJlIGFibGUgdG8gY29tcHV0ZSB0YWIgcG9zaXRpb25zLgorICAgICAgICBsaW5lUmVjdC5zZXRY
KGxpbmVCb3hMb2dpY2FsUmVjdC5sZWZ0KCkpOworICAgICAgICBhdXRvIGVuY2xvc2luZ0xpbmVS
ZWN0ID0gWyZdIHsKKyAgICAgICAgICAgIC8vIExldCdzICh2ZXJ0aWNhbGx5KWVuY2xvc2UgYWxs
IHRoZSBpbmxpbmUgbGV2ZWwgYm94ZXMuCisgICAgICAgICAgICAvLyBUaGlzIG1vc3RseSBtYXRj
aGVzICdsaW5lUmVjdCcsIHVubGVzcyBsaW5lLWhlaWdodCB0cmlnZ2VycyBsaW5lIGJveCBvdmVy
ZmxvdyAobm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggaW5rIG9yIHNjcm9sbCBvdmVyZmxvdykuCisg
ICAgICAgICAgICBhdXRvIGVuY2xvc2luZ1JlY3QgPSBsaW5lUmVjdDsKKyAgICAgICAgICAgIGF1
dG8mIGxpbmVCb3ggPSBsaW5lQm94ZXNbbGluZUluZGV4XTsKKyAgICAgICAgICAgIGZvciAoYXV0
byYgaW5saW5lTGV2ZWxCb3ggOiBsaW5lQm94LmlubGluZUxldmVsQm94TGlzdCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byBpbmxpbmVMZXZlbEJveExvZ2ljYWxSZWN0ID0gbGluZUJveC5sb2dp
Y2FsUmVjdEZvcklubGluZUxldmVsQm94KGlubGluZUxldmVsQm94LT5sYXlvdXRCb3goKSk7Cisg
ICAgICAgICAgICAgICAgLy8gaW5saW5lTGV2ZWxCb3hMb2dpY2FsUmVjdCBpcyByZWxhdGl2ZSB0
byB0aGUgbGluZS4KKyAgICAgICAgICAgICAgICBpbmxpbmVMZXZlbEJveExvZ2ljYWxSZWN0Lm1v
dmVCeShsaW5lUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgICAgICBlbmNsb3NpbmdSZWN0
LnNldFkoc3RkOjptaW4oZW5jbG9zaW5nUmVjdC55KCksIGlubGluZUxldmVsQm94TG9naWNhbFJl
Y3QudG9wKCkpKTsKKyAgICAgICAgICAgICAgICBlbmNsb3NpbmdSZWN0LnNoaWZ0TWF4WUVkZ2VU
byhzdGQ6Om1heChlbmNsb3NpbmdSZWN0Lm1heFkoKSwgaW5saW5lTGV2ZWxCb3hMb2dpY2FsUmVj
dC5ib3R0b20oKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGVuY2xvc2lu
Z1JlY3Q7CisgICAgICAgIH0oKTsKKyAgICAgICAgaWYgKGxpbmVMZXZlbFZpc3VhbEFkanVzdG1l
bnRzRm9yUnVuc1tsaW5lSW5kZXhdLm5lZWRzSW50ZWdyYWxQb3NpdGlvbikgeworICAgICAgICAg
ICAgbGluZVJlY3Quc2V0WShyb3VuZFRvSW50KGxpbmVSZWN0LnkoKSkpOworICAgICAgICAgICAg
ZW5jbG9zaW5nTGluZVJlY3Quc2V0WShyb3VuZFRvSW50KGVuY2xvc2luZ0xpbmVSZWN0LnkoKSkp
OworICAgICAgICB9CisgICAgICAgIGlubGluZUNvbnRlbnQubGluZXMuYXBwZW5kKHsgZmlyc3RS
dW5JbmRleCwgcnVuQ291bnQsIGxpbmVSZWN0LCBlbmNsb3NpbmdMaW5lUmVjdCwgc2Nyb2xsYWJs
ZU92ZXJmbG93UmVjdCwgbGluZUlua092ZXJmbG93UmVjdCwgbGluZS5iYXNlbGluZSgpLCBsaW5l
Lmhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoKSB9KTsKKyAgICB9Cit9CisKK30KK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kMTMxODBhYmMzOGJmOTBhN2Y5YzAxNjI0OWEzOTliMTFjNDdlOTJjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVn
cmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CisKK25hbWVz
cGFjZSBMYXlvdXQgeworY2xhc3MgSW5saW5lRm9ybWF0dGluZ1N0YXRlOworY2xhc3MgTGF5b3V0
U3RhdGU7Cit9CisKK25hbWVzcGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7CisKK3N0cnVjdCBJbmxp
bmVDb250ZW50Oworc3RydWN0IExpbmVMZXZlbFZpc3VhbEFkanVzdG1lbnRzRm9yUnVuczsKKwor
Y2xhc3MgSW5saW5lQ29udGVudEJ1aWxkZXIgeworcHVibGljOgorICAgIElubGluZUNvbnRlbnRC
dWlsZGVyKGNvbnN0IExheW91dDo6TGF5b3V0U3RhdGUmLCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cm
KTsKKworICAgIHZvaWQgYnVpbGQoSW5saW5lQ29udGVudCYsIGNvbnN0IExheW91dDo6SW5saW5l
Rm9ybWF0dGluZ1N0YXRlJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdXNpbmcgTGluZUxldmVs
VmlzdWFsQWRqdXN0bWVudHNGb3JSdW5zTGlzdCA9IFZlY3RvcjxMaW5lTGV2ZWxWaXN1YWxBZGp1
c3RtZW50c0ZvclJ1bnM+OworCisgICAgTGluZUxldmVsVmlzdWFsQWRqdXN0bWVudHNGb3JSdW5z
TGlzdCBjb21wdXRlTGluZUxldmVsVmlzdWFsQWRqdXN0bWVudHNGb3JSdW5zKGNvbnN0IExheW91
dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlJikgY29uc3Q7CisgICAgdm9pZCBjb25zdHJ1Y3REaXNw
bGF5TGluZVJ1bnMoSW5saW5lQ29udGVudCYsIGNvbnN0IExheW91dDo6SW5saW5lRm9ybWF0dGlu
Z1N0YXRlJiwgY29uc3QgTGluZUxldmVsVmlzdWFsQWRqdXN0bWVudHNGb3JSdW5zTGlzdCYpIGNv
bnN0OworICAgIHZvaWQgY29uc3RydWN0RGlzcGxheUxpbmVzKElubGluZUNvbnRlbnQmLCBjb25z
dCBMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZSYsIGNvbnN0IExpbmVMZXZlbFZpc3VhbEFk
anVzdG1lbnRzRm9yUnVuc0xpc3QmKSBjb25zdDsKKworICAgIGNvbnN0IExheW91dDo6TGF5b3V0
U3RhdGUmIG1fbGF5b3V0U3RhdGU7CisgICAgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBtX2Jsb2Nr
RmxvdzsKK307CisKK30KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNw
cAppbmRleCBmZTIxYjQ5ZjRjMzM4NDE4ZmI3YTU1ZWI4NDI4NjNkOTVhYmZiY2FmLi43ZDU5ZDQ2
ODA4YTg3ZTA4Y2RkMjIxNWFkYmIyNTQ2NWNiNTVmNjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25M
aW5lTGF5b3V0LmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkludmFsaWRhdGlvblN0
YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRJ
bnRlZ3JhdGlvbkNvdmVyYWdlLmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVD
b250ZW50QnVpbGRlci5oIgogI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5o
IgogI2luY2x1ZGUgIkxheW91dFJlcGxhY2VkQm94LmgiCiAjaW5jbHVkZSAiTGF5b3V0VHJlZUJ1
aWxkZXIuaCIKQEAgLTUwLDcgKzUxLDYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0j
aW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dERlY29yYXRpb25QYWlu
dGVyLmgiCiAjaW5jbHVkZSAiVGV4dFBhaW50ZXIuaCIKIApAQCAtMTQwLDE3OSArMTQwLDI2IEBA
IHZvaWQgTGluZUxheW91dDo6bGF5b3V0KCkKICAgICBjb25zdHJ1Y3RDb250ZW50KCk7CiB9CiAK
LWlubGluZSBzdGF0aWMgZmxvYXQgbGluZU92ZXJmbG93V2lkdGgoY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBmbG93LCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsV2lkdGgsIElubGluZUxheW91
dFVuaXQgbGluZUJveExvZ2ljYWxXaWR0aCkKLXsKLSAgICAvLyBGSVhNRTogSXQncyB0aGUgY29w
eSBvZiB0aGUgbGV0cy1hZGp1c3Qtb3ZlcmZsb3ctZm9yLXRoZS1jYXJldCBiZWhhdmlvciBmcm9t
IENvbXBsZXhMaW5lTGF5b3V0OjphZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbi4KLSAgICBh
dXRvIGVuZFBhZGRpbmcgPSBmbG93Lmhhc092ZXJmbG93Q2xpcCgpID8gZmxvdy5wYWRkaW5nRW5k
KCkgOiAwX2x1OwotICAgIGlmICghZW5kUGFkZGluZykKLSAgICAgICAgZW5kUGFkZGluZyA9IGZs
b3cuZW5kUGFkZGluZ1dpZHRoRm9yQ2FyZXQoKTsKLSAgICBpZiAoZmxvdy5oYXNPdmVyZmxvd0Ns
aXAoKSAmJiAhZW5kUGFkZGluZyAmJiBmbG93LmVsZW1lbnQoKSAmJiBmbG93LmVsZW1lbnQoKS0+
aXNSb290RWRpdGFibGVFbGVtZW50KCkpCi0gICAgICAgIGVuZFBhZGRpbmcgPSAxOwotICAgIGxp
bmVCb3hMb2dpY2FsV2lkdGggKz0gZW5kUGFkZGluZzsKLSAgICByZXR1cm4gc3RkOjptYXgobGlu
ZUxvZ2ljYWxXaWR0aCwgbGluZUJveExvZ2ljYWxXaWR0aCk7Ci19Ci0KIHZvaWQgTGluZUxheW91
dDo6Y29uc3RydWN0Q29udGVudCgpCiB7Ci0gICAgYXV0byYgZGlzcGxheUlubGluZUNvbnRlbnQg
PSBlbnN1cmVJbmxpbmVDb250ZW50KCk7Ci0gICAgYXV0byYgbGluZXMgPSBtX2lubGluZUZvcm1h
dHRpbmdTdGF0ZS5saW5lcygpOwotCi0gICAgc3RydWN0IExpbmVMZXZlbFZpc3VhbEFkanVzdG1l
bnRzRm9yUnVucyB7Ci0gICAgICAgIGJvb2wgbmVlZHNJbnRlZ3JhbFBvc2l0aW9uIHsgZmFsc2Ug
fTsKLSAgICAgICAgLy8gSXQncyBvbmx5ICd0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcycgZm9yIG5v
dy4KLSAgICAgICAgYm9vbCBuZWVkc1RyYWlsaW5nQ29udGVudFJlcGxhY2VtZW50IHsgZmFsc2Ug
fTsKLSAgICB9OwotICAgIFZlY3RvcjxMaW5lTGV2ZWxWaXN1YWxBZGp1c3RtZW50c0ZvclJ1bnM+
IGxpbmVMZXZlbFZpc3VhbEFkanVzdG1lbnRzRm9yUnVucyhsaW5lcy5zaXplKCkpOwotCi0gICAg
YXV0byBjb21wdXRlTGluZUxldmVsVmlzdWFsQWRqdXN0bWVudHNGb3JSdW5zID0gWyZdIHsKLSAg
ICAgICAgYXV0byYgcm9vdFN0eWxlID0gcm9vdExheW91dEJveCgpLnN0eWxlKCk7Ci0gICAgICAg
IGF1dG8gc2hvdWxkQ2hlY2tIb3Jpem9udGFsT3ZlcmZsb3dGb3JDb250ZW50UmVwbGFjZW1lbnQg
PSByb290U3R5bGUub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkhpZGRlbiAmJiByb290U3R5bGUu
dGV4dE92ZXJmbG93KCkgIT0gVGV4dE92ZXJmbG93OjpDbGlwOwotCi0gICAgICAgIGZvciAoc2l6
ZV90IGxpbmVJbmRleCA9IDA7IGxpbmVJbmRleCA8IGxpbmVzLnNpemUoKTsgKytsaW5lSW5kZXgp
IHsKLSAgICAgICAgICAgIGF1dG8gbGluZU5lZWRzTGVnYWN5SW50ZWdyYWxWZXJ0aWNhbFBvc2l0
aW9uID0gWyZdIHsKLSAgICAgICAgICAgICAgICAvLyBJbmxpbmVUcmVlIHJvdW5kcyB5IHBvc2l0
aW9uIHRvIGludGVncmFsIHZhbHVlIGZvciBjZXJ0YWluIGNvbnRlbnQgKHNlZSBJbmxpbmVGbG93
Qm94OjpwbGFjZUJveGVzSW5CbG9ja0RpcmVjdGlvbikuCi0gICAgICAgICAgICAgICAgYXV0byBp
bmxpbmVMZXZlbEJveExpc3QgPSBtX2lubGluZUZvcm1hdHRpbmdTdGF0ZS5saW5lQm94ZXMoKVts
aW5lSW5kZXhdLmlubGluZUxldmVsQm94TGlzdCgpOwotICAgICAgICAgICAgICAgIGlmIChpbmxp
bmVMZXZlbEJveExpc3Quc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyB0ZXh0IGNvbnRlbnQgb25seSB3aXRoIHJvb3QgaW5saW5lIGJveC4KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IC8vIFRleHQgKyA8YnI+IChvciBqdXN0IDxicj4gb3IgdGV4dDxzcGFuPjwvc3Bhbj48YnI+KSBi
ZWhhdmVzIGxpa2UgdGV4dC4KLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxldmVs
Qm94IDogaW5saW5lTGV2ZWxCb3hMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmxp
bmVMZXZlbEJveC0+aXNBdG9taWNJbmxpbmVMZXZlbEJveCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBDb250ZW50IGxpa2UgdGV4dDxpbWc+IHByZXZlbnRzIGxlZ2FjeSBzbmFwcGlu
Zy4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBsaW5lTGV2ZWxWaXN1YWxBZGp1c3RtZW50c0Zv
clJ1bnNbbGluZUluZGV4XS5uZWVkc0ludGVncmFsUG9zaXRpb24gPSBsaW5lTmVlZHNMZWdhY3lJ
bnRlZ3JhbFZlcnRpY2FsUG9zaXRpb24oKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRDaGVja0hv
cml6b250YWxPdmVyZmxvd0ZvckNvbnRlbnRSZXBsYWNlbWVudCkgewotICAgICAgICAgICAgICAg
IGF1dG8mIGxpbmUgPSBsaW5lc1tsaW5lSW5kZXhdOwotICAgICAgICAgICAgICAgIGF1dG8gb3Zl
cmZsb3dXaWR0aCA9IGxpbmVPdmVyZmxvd1dpZHRoKGZsb3coKSwgbGluZS5sb2dpY2FsV2lkdGgo
KSwgbGluZS5saW5lQm94TG9naWNhbFJlY3QoKS53aWR0aCgpKTsKLSAgICAgICAgICAgICAgICBs
aW5lTGV2ZWxWaXN1YWxBZGp1c3RtZW50c0ZvclJ1bnNbbGluZUluZGV4XS5uZWVkc1RyYWlsaW5n
Q29udGVudFJlcGxhY2VtZW50ID0gb3ZlcmZsb3dXaWR0aCA+IGxpbmUubG9naWNhbFdpZHRoKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotICAgIGNvbXB1dGVMaW5lTGV2ZWxW
aXN1YWxBZGp1c3RtZW50c0ZvclJ1bnMoKTsKLQotICAgIGF1dG8gY29uc3RydWN0RGlzcGxheUxp
bmVSdW5zID0gWyZdIHsKLSAgICAgICAgYXV0byBpbml0aWFsQ29udGFpbmdCbG9ja1NpemUgPSBt
X2xheW91dFN0YXRlLnZpZXdwb3J0U2l6ZSgpOwotICAgICAgICBWZWN0b3I8Ym9vbD4gaGFzQWRq
dXN0ZWRUcmFpbGluZ0xpbmVMaXN0KGxpbmVzLnNpemUoKSwgZmFsc2UpOwotICAgICAgICBmb3Ig
KGF1dG8mIGxpbmVSdW4gOiBtX2lubGluZUZvcm1hdHRpbmdTdGF0ZS5saW5lUnVucygpKSB7Ci0g
ICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJveCgpOwotICAgICAg
ICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICAgICAgICAgIGF1dG8g
Y29tcHV0ZWRJbmtPdmVyZmxvdyA9IFsmXSAoYXV0byBydW5SZWN0KSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub24tdGV4dCBpbmsgb3ZlcmZsb3cuCi0gICAg
ICAgICAgICAgICAgaWYgKCFsaW5lUnVuLnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJ1blJlY3Q7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmtPdmVyZmxvdyA9IHJ1blJlY3Q7
Ci0gICAgICAgICAgICAgICAgYXV0byBzdHJva2VPdmVyZmxvdyA9IHN0ZDo6Y2VpbChzdHlsZS5j
b21wdXRlZFN0cm9rZVdpZHRoKGNlaWxlZEludFNpemUoaW5pdGlhbENvbnRhaW5nQmxvY2tTaXpl
KSkpOwotICAgICAgICAgICAgICAgIGlua092ZXJmbG93LmluZmxhdGUoc3Ryb2tlT3ZlcmZsb3cp
OwotCi0gICAgICAgICAgICAgICAgYXV0byBsZXR0ZXJTcGFjaW5nID0gc3R5bGUuZm9udENhc2Nh
ZGUoKS5sZXR0ZXJTcGFjaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxldHRlclNwYWNpbmcg
PCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIExhc3QgbGV0dGVyJ3MgbmVnYXRpdmUgc3Bh
Y2luZyBzaHJpbmtzIGxvZ2ljYWwgcmVjdC4gUHVzaCBpdCB0byBpbmsgb3ZlcmZsb3cuCi0gICAg
ICAgICAgICAgICAgICAgIGlua092ZXJmbG93LmV4cGFuZCgtbGV0dGVyU3BhY2luZywgeyB9KTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlua092ZXJmbG93Owot
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGF1dG8gcnVuUmVjdCA9IEZsb2F0UmVjdCB7IGxp
bmVSdW4ubG9naWNhbFJlY3QoKSB9OwotICAgICAgICAgICAgLy8gSW5saW5lIGJveGVzIGFyZSBy
ZWxhdGl2ZSB0byB0aGUgbGluZSBib3ggd2hpbGUgZmluYWwgUnVucyBuZWVkIHRvIGJlIHJlbGF0
aXZlIHRvIHRoZSBwYXJlbnQgQm94Ci0gICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkbid0IHdl
IGp1c3QgbGVhdmUgdGhlbSBiZSByZWxhdGl2ZSB0byB0aGUgbGluZSBib3g/Ci0gICAgICAgICAg
ICBhdXRvIGxpbmVJbmRleCA9IGxpbmVSdW4ubGluZUluZGV4KCk7Ci0gICAgICAgICAgICBhdXRv
JiBsaW5lID0gbGluZXNbbGluZUluZGV4XTsKLSAgICAgICAgICAgIGF1dG8gbGluZUJveExvZ2lj
YWxSZWN0ID0gbGluZS5saW5lQm94TG9naWNhbFJlY3QoKTsKLSAgICAgICAgICAgIHJ1blJlY3Qu
bW92ZUJ5KHsgbGluZUJveExvZ2ljYWxSZWN0LmxlZnQoKSwgbGluZUJveExvZ2ljYWxSZWN0LnRv
cCgpIH0pOwotICAgICAgICAgICAgaWYgKGxpbmVMZXZlbFZpc3VhbEFkanVzdG1lbnRzRm9yUnVu
c1tsaW5lSW5kZXhdLm5lZWRzSW50ZWdyYWxQb3NpdGlvbikKLSAgICAgICAgICAgICAgICBydW5S
ZWN0LnNldFkocm91bmRUb0ludChydW5SZWN0LnkoKSkpOwotCi0gICAgICAgICAgICBXVEY6Ok9w
dGlvbmFsPFJ1bjo6VGV4dENvbnRlbnQ+IHRleHRDb250ZW50OwotICAgICAgICAgICAgaWYgKGF1
dG8gdGV4dCA9IGxpbmVSdW4udGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBhZGp1c3Rl
ZENvbnRlbnRUb1JlbmRlcmVyID0gWyZdIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBvcmln
aW5hbENvbnRlbnQgPSB0ZXh0LT5jb250ZW50KCkuc3Vic3RyaW5nKHRleHQtPnN0YXJ0KCksIHRl
eHQtPmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQtPm5lZWRzSHlwaGVu
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhvcmlnaW5hbENv
bnRlbnQsIHN0eWxlLmh5cGhlblN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxp
bmVMZXZlbFZpc3VhbEFkanVzdG1lbnRzRm9yUnVuc1tsaW5lSW5kZXhdLm5lZWRzVHJhaWxpbmdD
b250ZW50UmVwbGFjZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRs
eSBpdCdzIGVsbGlwc2lzIHJlcGxhY2VtZW50IG9ubHksIGJ1dCBhZGRpbmcgc3VwcG9ydCBmb3Ig
InRleHQtb3ZlcmZsb3c6IHN0cmluZyIgc2hvdWxkIGJlIHJlbGF0aXZlbHkgc2ltcGxlLgotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0FkanVzdGVkVHJhaWxpbmdMaW5lTGlzdFtsaW5l
SW5kZXhdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBsaW5lIGFscmVh
ZHkgaGFzIGFkanVzdGVkIHRyYWlsaW5nLiBBbnkgcnVucyBhZnRlciB0aGUgZWxsaXBzaXMgc2hv
dWxkIHJlbmRlciBibGFuay4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gcnVuTG9naWNhbFJlY3QgPSBsaW5lUnVuLmxvZ2ljYWxSZWN0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvIGxpbmVMb2dpY2FsUmlnaHQgPSBsaW5lLmxvZ2ljYWxS
aWdodCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBlbGxpcHNpc1dpZHRoID0gc3R5
bGUuZm9udENhc2NhZGUoKS53aWR0aChXZWJDb3JlOjpUZXh0UnVuIHsgJmhvcml6b250YWxFbGxp
cHNpcyB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5Mb2dpY2FsUmVjdC5yaWdo
dCgpICsgZWxsaXBzaXNXaWR0aCA+IGxpbmVMb2dpY2FsUmlnaHQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBydW4gd2l0aCBlbGxpcHNpcyB3b3VsZCBzdXJlbHkg
b3ZlcmZsb3cuIFNvIGxldCdzIGp1c3QgYWRkIGl0IHRvIHRoaXMgcnVuIGV2ZW4gaWYKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBtYWtlcyB0aGUgcnVuIHdpZGVyIHRoYW4gaXQg
b3JpZ2luYWxseSB3YXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQWRqdXN0ZWRU
cmFpbGluZ0xpbmVMaXN0W2xpbmVJbmRleF0gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IHJlc3VsdFdpZHRoID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIG1heFdpZHRoID0gbGluZS5sb2dpY2FsV2lkdGgoKSAtIHJ1bkxvZ2ljYWxSZWN0Lmxl
ZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9y
OjpyaWdodFRydW5jYXRlKG9yaWdpbmFsQ29udGVudCwgbWF4V2lkdGgsIHN0eWxlLmZvbnRDYXNj
YWRlKCksIHJlc3VsdFdpZHRoLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB0ZXh0Q29udGVudCA9IFJ1bjo6
VGV4dENvbnRlbnQgeyB0ZXh0LT5zdGFydCgpLCB0ZXh0LT5sZW5ndGgoKSwgdGV4dC0+Y29udGVu
dCgpLCBhZGp1c3RlZENvbnRlbnRUb1JlbmRlcmVyKCksIHRleHQtPm5lZWRzSHlwaGVuKCkgfTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gZXhwYW5zaW9uID0gUnVuOjpFeHBhbnNp
b24geyBsaW5lUnVuLmV4cGFuc2lvbigpLmJlaGF2aW9yLCBsaW5lUnVuLmV4cGFuc2lvbigpLmhv
cml6b250YWxFeHBhbnNpb24gfTsKLSAgICAgICAgICAgIGF1dG8gZGlzcGxheVJ1biA9IFJ1biB7
IGxpbmVJbmRleCwgbGF5b3V0Qm94LCBydW5SZWN0LCBjb21wdXRlZElua092ZXJmbG93KHJ1blJl
Y3QpLCBleHBhbnNpb24sIHRleHRDb250ZW50IH07Ci0gICAgICAgICAgICBkaXNwbGF5SW5saW5l
Q29udGVudC5ydW5zLmFwcGVuZChkaXNwbGF5UnVuKTsKLQotICAgICAgICAgICAgaWYgKGxheW91
dEJveC5pc1JlcGxhY2VkQm94KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiByZW5kZXJlciA9
IGRvd25jYXN0PFJlbmRlckJveD4obV9ib3hUcmVlLnJlbmRlcmVyRm9yTGF5b3V0Qm94KGxheW91
dEJveCkpOwotICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gbV9sYXlvdXRTdGF0
ZS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgICAgIGF1dG8gYm9yZGVy
Qm94TG9jYXRpb24gPSBGbG9hdFBvaW50IHsgcnVuUmVjdC54KCkgKyBzdGQ6Om1heChib3hHZW9t
ZXRyeS5tYXJnaW5TdGFydCgpLCAwX2x1KSwgcnVuUmVjdC55KCkgKyBib3hHZW9tZXRyeS5tYXJn
aW5CZWZvcmUoKSB9OwotICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldExvY2F0aW9uKGZsb29y
ZWRMYXlvdXRQb2ludChib3JkZXJCb3hMb2NhdGlvbikpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfTsKLSAgICBjb25zdHJ1Y3REaXNwbGF5TGluZVJ1bnMoKTsKLQotICAgIGF1dG8g
Y29uc3RydWN0RGlzcGxheUxpbmVzID0gWyZdIHsKLSAgICAgICAgYXV0byYgbGluZUJveGVzID0g
bV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUubGluZUJveGVzKCk7Ci0gICAgICAgIGF1dG8mIHJ1bnMg
PSBkaXNwbGF5SW5saW5lQ29udGVudC5ydW5zOwotICAgICAgICBzaXplX3QgcnVuSW5kZXggPSAw
OwotICAgICAgICBmb3IgKHNpemVfdCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXggPCBsaW5lcy5z
aXplKCk7ICsrbGluZUluZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBsaW5lID0gbGluZXNbbGlu
ZUluZGV4XTsKLSAgICAgICAgICAgIGF1dG8gbGluZUJveExvZ2ljYWxSZWN0ID0gbGluZS5saW5l
Qm94TG9naWNhbFJlY3QoKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdoZXJlIHRo
ZSBsb2dpY2FsIHRvIHBoeXNpY2FsIHRyYW5zbGF0ZSBzaG91bGQgaGFwcGVuLgotICAgICAgICAg
ICAgYXV0byBsaW5lQm94TG9naWNhbEJvdHRvbSA9IChsaW5lQm94TG9naWNhbFJlY3QudG9wKCkg
LSBsaW5lLmxvZ2ljYWxUb3AoKSkgKyBsaW5lQm94TG9naWNhbFJlY3QuaGVpZ2h0KCk7Ci0gICAg
ICAgICAgICBhdXRvIG92ZXJmbG93SGVpZ2h0ID0gc3RkOjptYXgobGluZS5sb2dpY2FsSGVpZ2h0
KCksIGxpbmVCb3hMb2dpY2FsQm90dG9tKTsKLSAgICAgICAgICAgIGF1dG8gc2Nyb2xsYWJsZU92
ZXJmbG93UmVjdCA9IEZsb2F0UmVjdCB7IGxpbmUubG9naWNhbExlZnQoKSwgbGluZS5sb2dpY2Fs
VG9wKCksIGxpbmVPdmVyZmxvd1dpZHRoKGZsb3coKSwgbGluZS5sb2dpY2FsV2lkdGgoKSwgbGlu
ZUJveExvZ2ljYWxSZWN0LndpZHRoKCkpLCBvdmVyZmxvd0hlaWdodCB9OwotCi0gICAgICAgICAg
ICBhdXRvIGZpcnN0UnVuSW5kZXggPSBydW5JbmRleDsKLSAgICAgICAgICAgIGF1dG8gbGluZUlu
a092ZXJmbG93UmVjdCA9IHNjcm9sbGFibGVPdmVyZmxvd1JlY3Q7Ci0gICAgICAgICAgICB3aGls
ZSAocnVuSW5kZXggPCBydW5zLnNpemUoKSAmJiBydW5zW3J1bkluZGV4XS5saW5lSW5kZXgoKSA9
PSBsaW5lSW5kZXgpCi0gICAgICAgICAgICAgICAgbGluZUlua092ZXJmbG93UmVjdC51bml0ZShy
dW5zW3J1bkluZGV4KytdLmlua092ZXJmbG93KCkpOwotICAgICAgICAgICAgYXV0byBydW5Db3Vu
dCA9IHJ1bkluZGV4IC0gZmlyc3RSdW5JbmRleDsKLSAgICAgICAgICAgIGF1dG8gbGluZVJlY3Qg
PSBGbG9hdFJlY3QgeyBsaW5lLmxvZ2ljYWxSZWN0KCkgfTsKLSAgICAgICAgICAgIC8vIFBhaW50
aW5nIGNvZGUgKHNwZWNpZmljYWxseSBUZXh0UnVuJ3MgeFBvcykgbmVlZHMgdGhlIGxpbmUgYm94
IG9mZnNldCB0byBiZSBhYmxlIHRvIGNvbXB1dGUgdGFiIHBvc2l0aW9ucy4KLSAgICAgICAgICAg
IGxpbmVSZWN0LnNldFgobGluZUJveExvZ2ljYWxSZWN0LmxlZnQoKSk7Ci0gICAgICAgICAgICBh
dXRvIGVuY2xvc2luZ0xpbmVSZWN0ID0gWyZdIHsKLSAgICAgICAgICAgICAgICAvLyBMZXQncyAo
dmVydGljYWxseSllbmNsb3NlIGFsbCB0aGUgaW5saW5lIGxldmVsIGJveGVzLgotICAgICAgICAg
ICAgICAgIC8vIFRoaXMgbW9zdGx5IG1hdGNoZXMgJ2xpbmVSZWN0JywgdW5sZXNzIGxpbmUtaGVp
Z2h0IHRyaWdnZXJzIGxpbmUgYm94IG92ZXJmbG93IChub3QgdG8gYmUgY29uZnVzZWQgd2l0aCBp
bmsgb3Igc2Nyb2xsIG92ZXJmbG93KS4KLSAgICAgICAgICAgICAgICBhdXRvIGVuY2xvc2luZ1Jl
Y3QgPSBsaW5lUmVjdDsKLSAgICAgICAgICAgICAgICBhdXRvJiBsaW5lQm94ID0gbGluZUJveGVz
W2xpbmVJbmRleF07Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVMZXZlbEJveCA6
IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hMaXN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byBpbmxpbmVMZXZlbEJveExvZ2ljYWxSZWN0ID0gbGluZUJveC5sb2dpY2FsUmVjdEZvcklubGlu
ZUxldmVsQm94KGlubGluZUxldmVsQm94LT5sYXlvdXRCb3goKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIGlubGluZUxldmVsQm94TG9naWNhbFJlY3QgaXMgcmVsYXRpdmUgdG8gdGhlIGxpbmUu
Ci0gICAgICAgICAgICAgICAgICAgIGlubGluZUxldmVsQm94TG9naWNhbFJlY3QubW92ZUJ5KGxp
bmVSZWN0LmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgICAgICAgICBlbmNsb3NpbmdSZWN0LnNl
dFkoc3RkOjptaW4oZW5jbG9zaW5nUmVjdC55KCksIGlubGluZUxldmVsQm94TG9naWNhbFJlY3Qu
dG9wKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgZW5jbG9zaW5nUmVjdC5zaGlmdE1heFlFZGdl
VG8oc3RkOjptYXgoZW5jbG9zaW5nUmVjdC5tYXhZKCksIGlubGluZUxldmVsQm94TG9naWNhbFJl
Y3QuYm90dG9tKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVuY2xvc2luZ1JlY3Q7Ci0gICAgICAgICAgICB9KCk7Ci0gICAgICAgICAgICBpZiAobGluZUxl
dmVsVmlzdWFsQWRqdXN0bWVudHNGb3JSdW5zW2xpbmVJbmRleF0ubmVlZHNJbnRlZ3JhbFBvc2l0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgbGluZVJlY3Quc2V0WShyb3VuZFRvSW50KGxpbmVSZWN0
LnkoKSkpOwotICAgICAgICAgICAgICAgIGVuY2xvc2luZ0xpbmVSZWN0LnNldFkocm91bmRUb0lu
dChlbmNsb3NpbmdMaW5lUmVjdC55KCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRp
c3BsYXlJbmxpbmVDb250ZW50LmxpbmVzLmFwcGVuZCh7IGZpcnN0UnVuSW5kZXgsIHJ1bkNvdW50
LCBsaW5lUmVjdCwgZW5jbG9zaW5nTGluZVJlY3QsIHNjcm9sbGFibGVPdmVyZmxvd1JlY3QsIGxp
bmVJbmtPdmVyZmxvd1JlY3QsIGxpbmUuYmFzZWxpbmUoKSwgbGluZS5ob3Jpem9udGFsQWxpZ25t
ZW50T2Zmc2V0KCkgfSk7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIGNvbnN0cnVjdERpc3BsYXlM
aW5lcygpOworICAgIGF1dG8gaW5saW5lQ29udGVudEJ1aWxkZXIgPSBJbmxpbmVDb250ZW50QnVp
bGRlciB7IG1fbGF5b3V0U3RhdGUsIGZsb3coKSB9OworICAgIGlubGluZUNvbnRlbnRCdWlsZGVy
LmJ1aWxkKGVuc3VyZUlubGluZUNvbnRlbnQoKSwgbV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUpOwor
ICAgIEFTU0VSVChtX2lubGluZUNvbnRlbnQpOworCisgICAgZm9yIChhdXRvJiBydW4gOiBtX2lu
bGluZUNvbnRlbnQtPnJ1bnMpIHsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91
dEJveCgpOworICAgICAgICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBhdXRvJiBydW5SZWN0ID0gcnVuLnJlY3QoKTsKKyAg
ICAgICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KG1fYm94VHJlZS5yZW5k
ZXJlckZvckxheW91dEJveChsYXlvdXRCb3gpKTsKKyAgICAgICAgYXV0byYgYm94R2VvbWV0cnkg
PSBtX2xheW91dFN0YXRlLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgIGF1dG8g
Ym9yZGVyQm94TG9jYXRpb24gPSBGbG9hdFBvaW50IHsgcnVuUmVjdC54KCkgKyBzdGQ6Om1heChi
b3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpLCAwX2x1KSwgcnVuUmVjdC55KCkgKyBib3hHZW9tZXRy
eS5tYXJnaW5CZWZvcmUoKSB9OworICAgICAgICByZW5kZXJlci5zZXRMb2NhdGlvbihmbG9vcmVk
TGF5b3V0UG9pbnQoYm9yZGVyQm94TG9jYXRpb24pKTsKKyAgICB9CiAKLSAgICBkaXNwbGF5SW5s
aW5lQ29udGVudC5jbGVhckdhcEFmdGVyTGFzdExpbmUgPSBtX2lubGluZUZvcm1hdHRpbmdTdGF0
ZS5jbGVhckdhcEFmdGVyTGFzdExpbmUoKTsKLSAgICBkaXNwbGF5SW5saW5lQ29udGVudC5zaHJp
bmtUb0ZpdCgpOworICAgIG1faW5saW5lQ29udGVudC0+Y2xlYXJHYXBBZnRlckxhc3RMaW5lID0g
bV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUuY2xlYXJHYXBBZnRlckxhc3RMaW5lKCk7CisgICAgbV9p
bmxpbmVDb250ZW50LT5zaHJpbmtUb0ZpdCgpOwogICAgIG1faW5saW5lRm9ybWF0dGluZ1N0YXRl
LnNocmlua1RvRml0KCk7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>