<?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>205613</bug_id>
          
          <creation_ts>2019-12-27 20:21:00 -0800</creation_ts>
          <short_desc>[LFC][IFC] Keep the LineBreaker object around until after the line is closed.</short_desc>
          <delta_ts>2019-12-28 08:08:07 -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>commit-queue</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>1601658</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-12-27 20:21:00 -0800</bug_when>
    <thetext>This is in preparation for being able to point to an earlier wrapping opportunity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601659</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-27 20:21:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/58222870&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601660</commentid>
    <comment_count>2</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-12-27 20:41:11 -0800</bug_when>
    <thetext>        In order to be able to point back to an earlier line wrap opportunity on the line e.g.
        &lt;div style=&quot;white-space: pre&quot;&gt;&lt;span style=&quot;white-space: normal&quot;&gt;earlier_wrap opportunities&lt;/span&gt; &lt;span&gt;can&apos;t_wrap_this content&lt;/span&gt;&lt;/div&gt;
        the LineBreaker class needs more context.
        Currently (taking the example above), if the available space runs out somewhere around the second &lt;span&gt; we would just simply
        overflow the line since the overflowing content has a style saying &quot;do not wrap&quot;.
        However the line has multiple earlier wrap opportunities inside the first &lt;span&gt;.
        Since we construct a LineBreaker object for each continuous run 

        1. [container start][earlier_wrap]
        2. [ ]
        3. [opportunities][container end]
        4. [ ]
        5. [container start][can&apos;t_wrap_this]
        6. [ ]
        7. [content][container end]

        the LineBreaker does not have enough context to point back to the last line wrap opportunity (after run #3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601661</commentid>
    <comment_count>3</comment_count>
      <attachid>386463</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-12-27 20:53:00 -0800</bug_when>
    <thetext>Created attachment 386463
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601683</commentid>
    <comment_count>4</comment_count>
      <attachid>386463</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-28 08:08:05 -0800</bug_when>
    <thetext>Comment on attachment 386463
Patch

Clearing flags on attachment: 386463

Committed r253924: &lt;https://trac.webkit.org/changeset/253924&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601684</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-28 08:08:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386463</attachid>
            <date>2019-12-27 20:53:00 -0800</date>
            <delta_ts>2019-12-28 08:08:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205613-20191227205259.patch</filename>
            <type>text/plain</type>
            <size>25079</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzOTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzE2OTUyYTAxNDQxZmVi
Y2ZhNzIzMDg5MmQ4Mzc3Zjc4OTlkMWE5ZS4uODY0ZDkwMThhMzM4MjRmMDJlMjU1MTU0ZmIyNTg2
MDE4OWM3NDY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE5LTEyLTI3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBLZWVwIHRo
ZSBMaW5lQnJlYWtlciBvYmplY3QgYXJvdW5kIHVudGlsIGFmdGVyIHRoZSBsaW5lIGlzIGNsb3Nl
ZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTYx
MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTgyMjI4NzA+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwb2lu
dCBiYWNrIHRvIGFuIGVhcmxpZXIgbGluZSB3cmFwIG9wcG9ydHVuaXR5IG9uIHRoZSBsaW5lIGUu
Zy4KKyAgICAgICAgPGRpdiBzdHlsZT0id2hpdGUtc3BhY2U6IHByZSI+PHNwYW4gc3R5bGU9Indo
aXRlLXNwYWNlOiBub3JtYWwiPmVhcmxpZXJfd3JhcCBvcHBvcnR1bml0aWVzPC9zcGFuPiA8c3Bh
bj5jYW4ndF93cmFwX3RoaXMgY29udGVudDwvc3Bhbj48L2Rpdj4KKyAgICAgICAgdGhlIExpbmVC
cmVha2VyIGNsYXNzIG5lZWRzIG1vcmUgY29udGV4dC4KKyAgICAgICAgQ3VycmVudGx5ICh0YWtp
bmcgdGhlIGV4YW1wbGUgYWJvdmUpLCBpZiB0aGUgYXZhaWxhYmxlIHNwYWNlIHJ1bnMgb3V0IHNv
bWV3aGVyZSBhcm91bmQgdGhlIHNlY29uZCA8c3Bhbj4gd2Ugd291bGQganVzdCBzaW1wbHkKKyAg
ICAgICAgb3ZlcmZsb3cgdGhlIGxpbmUgc2luY2UgdGhlIG92ZXJmbG93aW5nIGNvbnRlbnQgaGFz
IGEgc3R5bGUgc2F5aW5nICJkbyBub3Qgd3JhcCIuCisgICAgICAgIEhvd2V2ZXIgdGhlIGxpbmUg
aGFzIG11bHRpcGxlIGVhcmxpZXIgd3JhcCBvcHBvcnR1bml0aWVzIGluc2lkZSB0aGUgZmlyc3Qg
PHNwYW4+LgorICAgICAgICBTaW5jZSB3ZSBjb25zdHJ1Y3QgYSBMaW5lQnJlYWtlciBvYmplY3Qg
Zm9yIGVhY2ggY29udGludW91cyBydW4gCisKKyAgICAgICAgMS4gW2NvbnRhaW5lciBzdGFydF1b
ZWFybGllcl93cmFwXQorICAgICAgICAyLiBbIF0KKyAgICAgICAgMy4gW29wcG9ydHVuaXRpZXNd
W2NvbnRhaW5lciBlbmRdCisgICAgICAgIDQuIFsgXQorICAgICAgICA1LiBbY29udGFpbmVyIHN0
YXJ0XVtjYW4ndF93cmFwX3RoaXNdCisgICAgICAgIDYuIFsgXQorICAgICAgICA3LiBbY29udGVu
dF1bY29udGFpbmVyIGVuZF0KKworICAgICAgICB0aGUgTGluZUJyZWFrZXIgZG9lcyBub3QgaGF2
ZSBlbm91Z2ggY29udGV4dCB0byBwb2ludCBiYWNrIHRvIHRoZSBsYXN0IGxpbmUgd3JhcCBvcHBv
cnR1bml0eSAoYWZ0ZXIgcnVuICMzKS4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGluIHByZXBh
cmF0aW9uIGZvciBzdXBwb3J0aW5nIHN1Y2ggY29udGVudC4gCisgICAgICAgIDEuIFJlbmFtZSBj
b3VwbGUgb2YgZnVuY3Rpb25zIGFuZCBzdHJ1Y3RzCisgICAgICAgIDIuIE1vdmUgdGhlIExpbmVC
cmVha2VyIGNvbnN0cnVjdGlvbiB0byBMaW5lTGF5b3V0Q29udGV4dDo6bGF5b3V0TGluZSBzbyB0
aGF0IHdlIGNhbiBrZWVwIGl0IGFyb3VuZCBmb3IgbXVsdGlwbGUgc2V0IG9mIHJ1bnMuCisKKyAg
ICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzQ29udGVudFdyYXBwaW5nQWxsb3dlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzQ29udGVudFNwbGl0QWxsb3dlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjppc1RleHRDb250ZW50V3JhcHBpbmdBbGxvd2Vk
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OnNob3VsZEtl
ZXBFbmRPZkxpbmVXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJyZWFrZXI6OnNob3VsZFdyYXBJbmxpbmVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6aXNUZXh0Q29udGVudFdyYXBwaW5nQWxsb3dlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OnNob3VsZEtlZXBFbmRPZkxpbmVXaGl0ZXNwYWNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OmJyZWFraW5nQ29udGV4
dEZvcklubGluZUNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCcmVha2VyOjpzZXRIeXBoZW5hdGlvbkRpc2FibGVkKToKKyAgICAgICAgKiBsYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OmlzTGluZUNvbnNpZGVyZWRFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVMYXlvdXRDb250ZXh0OjpsYXlvdXRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUxheW91dENvbnRleHQ6OmNoZWNrRm9yTGluZVdyYXBBbmRDb21taXQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6Y29tbWl0Q29udGVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0OjpwbGFjZUlubGluZUNv
bnRlbnRPbkN1cnJlbnRMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oOgorCiAyMDE5LTEyLTI3ICBBbnR0aSBLb2l2aXN0
byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gRW5zdXJl
IGxheW91dCBib3hlcyBoYXZlIGV4cGVjdGVkIGRpc3BsYXkgdHlwZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVh
a2VyLmNwcAppbmRleCBjMjkxZDg4MmNlYzYxZWRlMmQyNDAyMTBmMjk3YTc5ODhhYWI4NDcwLi5h
ZTUxZTA3MmY2MTM1NmMwYmI0Zjg0NTFlZWQ2YTFhZTQzYzhhN2NhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJy
ZWFrZXIuY3BwCkBAIC0zNywzMSArMzcsMjAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBMYXlvdXQgewogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNUZXh0Q29udGVudFdyYXBwaW5n
QWxsb3dlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNX
cmFwcGluZ0FsbG93ZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIC8vIERvIG5v
dCB0cnkgdG8gcHVzaCBvdmVyZmxvd24gJ3ByZScgYW5kICduby13cmFwJyBjb250ZW50IHRvIG5l
eHQgbGluZS4KICAgICByZXR1cm4gc3R5bGUud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6OlBy
ZSAmJiBzdHlsZS53aGl0ZVNwYWNlKCkgIT0gV2hpdGVTcGFjZTo6Tm9XcmFwOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgaXNUZXh0Q29udGVudFdyYXBwaW5nQWxsb3dlZChjb25zdCBMaW5lQnJl
YWtlcjo6Q29udGlub3VzQ29udGVudCYgY2FuZGlkYXRlUnVucykKK2Jvb2wgTGluZUJyZWFrZXI6
OmlzQ29udGVudFdyYXBwaW5nQWxsb3dlZChjb25zdCBDb250aW5vdXNDb250ZW50JiBjYW5kaWRh
dGVSdW5zKSBjb25zdAogewogICAgIC8vIFVzZSB0aGUgbGFzdCBpbmxpbmUgaXRlbSB3aXRoIGNv
bnRlbnQgKHdoZXJlIHdlIHdvdWxkIGJlIHdyYXBwaW5nKSB0byBkZWNpZGUgaWYgY29udGVudCB3
cmFwcGluZyBpcyBhbGxvd2VkLgogICAgIGF1dG8gcnVuSW5kZXggPSBjYW5kaWRhdGVSdW5zLmxh
c3RDb250ZW50UnVuSW5kZXgoKS52YWx1ZU9yKGNhbmRpZGF0ZVJ1bnMuc2l6ZSgpIC0gMSk7Ci0g
ICAgcmV0dXJuIGlzVGV4dENvbnRlbnRXcmFwcGluZ0FsbG93ZWQoY2FuZGlkYXRlUnVucy5ydW5z
KClbcnVuSW5kZXhdLmlubGluZUl0ZW0uc3R5bGUoKSk7CisgICAgcmV0dXJuIGlzV3JhcHBpbmdB
bGxvd2VkKGNhbmRpZGF0ZVJ1bnMucnVucygpW3J1bkluZGV4XS5pbmxpbmVJdGVtLnN0eWxlKCkp
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNDb250ZW50U3BsaXRBbGxvd2VkKGNvbnN0IExp
bmVCcmVha2VyOjpSdW4mIHJ1bikKLXsKLSAgICBBU1NFUlQocnVuLmlubGluZUl0ZW0uaXNUZXh0
KCkgfHwgcnVuLmlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pbmxpbmVJdGVt
LmlzQ29udGFpbmVyRW5kKCkpOwotICAgIGlmICghcnVuLmlubGluZUl0ZW0uaXNUZXh0KCkpIHsK
LSAgICAgICAgLy8gQ2FuJ3Qgc3BsaXQgaG9yaXpvbnRhbCBzcGFjaW5nIC0+IGUuZy4gPHNwYW4g
c3R5bGU9InBhZGRpbmctcmlnaHQ6IDEwMHB4OyI+dGV4dGNvbnRlbnQ8L3NwYW4+LCBpZiB0aGUg
W2NvbnRhaW5lciBlbmRdIGlzIHRoZSBvdmVyZmxvd24gaW5saW5lIGl0ZW0KLSAgICAgICAgLy8g
d2UgbmVlZCB0byBjaGVjayBpZiB0aGVyZSdzIGFub3RoZXIgaW5saW5lIGl0ZW0gYmV5b25kIHRo
ZSBbY29udGFpbmVyIGVuZF0gdG8gc3BsaXQuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGlzVGV4dENvbnRlbnRXcmFwcGluZ0FsbG93ZWQocnVuLmlubGluZUl0ZW0u
c3R5bGUoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRLZWVwRW5kT2ZMaW5lV2hp
dGVzcGFjZShjb25zdCBMaW5lQnJlYWtlcjo6Q29udGlub3VzQ29udGVudCYgY2FuZGlkYXRlUnVu
cykKK2Jvb2wgTGluZUJyZWFrZXI6OnNob3VsZEtlZXBFbmRPZkxpbmVXaGl0ZXNwYWNlKGNvbnN0
IENvbnRpbm91c0NvbnRlbnQmIGNhbmRpZGF0ZVJ1bnMpIGNvbnN0CiB7CiAgICAgLy8gR3JhYiB0
aGUgc3R5bGUgYW5kIGNoZWNrIGZvciB3aGl0ZS1zcGFjZSBwcm9wZXJ0eSB0byBkZWNpZGVkIHdo
ZXRoZXIgd2Ugc2hvdWxkIGxldCB0aGlzIHdoaXRlc3BhY2UgY29udGVudCBvdmVyZmxvdyB0aGUg
Y3VycmVudCBsaW5lLgogICAgIC8vIE5vdGUgdGhhdCB0aGUgImtlZXAiIGluIHRoZSBjb250ZXh0
IG1lYW5zIHdlIGxldCB0aGUgd2hpdGVzcGFjZSBjb250ZW50IHNpdCBvbiB0aGUgY3VycmVudCBs
aW5lLgpAQCAtNzEsNjIgKzYwLDYzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRLZWVwRW5k
T2ZMaW5lV2hpdGVzcGFjZShjb25zdCBMaW5lQnJlYWtlcjo6Q29udGlub3VzQ29uCiAgICAgcmV0
dXJuIHdoaXRlc3BhY2UgPT0gV2hpdGVTcGFjZTo6Tm9ybWFsIHx8IHdoaXRlc3BhY2UgPT0gV2hp
dGVTcGFjZTo6Tm9XcmFwIHx8IHdoaXRlc3BhY2UgPT0gV2hpdGVTcGFjZTo6UHJlV3JhcCB8fCB3
aGl0ZXNwYWNlID09IFdoaXRlU3BhY2U6OlByZUxpbmU7CiB9CiAKLUxpbmVCcmVha2VyOjpCcmVh
a2luZ0NvbnRleHQgTGluZUJyZWFrZXI6OmJyZWFraW5nQ29udGV4dEZvcklubGluZUNvbnRlbnQo
Y29uc3QgQ29udGlub3VzQ29udGVudCYgY2FuZGlkYXRlUnVucywgY29uc3QgTGluZVN0YXR1cyYg
bGluZVN0YXR1cykKK0xpbmVCcmVha2VyOjpSZXN1bHQgTGluZUJyZWFrZXI6OnNob3VsZFdyYXBJ
bmxpbmVDb250ZW50KGNvbnN0IFJ1bkxpc3QmIGNhbmRpZGF0ZVJ1bnMsIGNvbnN0IExpbmVTdGF0
dXMmIGxpbmVTdGF0dXMpCiB7Ci0gICAgQVNTRVJUKCFjYW5kaWRhdGVSdW5zLmlzRW1wdHkoKSk7
Ci0gICAgaWYgKGNhbmRpZGF0ZVJ1bnMud2lkdGgoKSA8PSBsaW5lU3RhdHVzLmF2YWlsYWJsZVdp
ZHRoKQotICAgICAgICByZXR1cm4geyBCcmVha2luZ0NvbnRleHQ6OkNvbnRlbnRXcmFwcGluZ1J1
bGU6OktlZXAsIElzRW5kT2ZMaW5lOjpObywgeyB9IH07Ci0gICAgaWYgKGNhbmRpZGF0ZVJ1bnMu
aGFzVHJhaWxpbmdDb2xsYXBzaWJsZUNvbnRlbnQoKSkgewotICAgICAgICBBU1NFUlQoY2FuZGlk
YXRlUnVucy5oYXNUZXh0Q29udGVudE9ubHkoKSk7Ci0gICAgICAgIGF1dG8gSXNFbmRPZkxpbmUg
PSBpc1RleHRDb250ZW50V3JhcHBpbmdBbGxvd2VkKGNhbmRpZGF0ZVJ1bnMpID8gSXNFbmRPZkxp
bmU6OlllcyA6IElzRW5kT2ZMaW5lOjpObzsKKyAgICBhdXRvIGNhbmRpZGF0ZUNvbnRlbnQgPSBD
b250aW5vdXNDb250ZW50IHsgY2FuZGlkYXRlUnVucyB9OworICAgIEFTU0VSVCghY2FuZGlkYXRl
Q29udGVudC5pc0VtcHR5KCkpOworICAgIGlmIChjYW5kaWRhdGVDb250ZW50LndpZHRoKCkgPD0g
bGluZVN0YXR1cy5hdmFpbGFibGVXaWR0aCkKKyAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rp
b246OktlZXAsIElzRW5kT2ZMaW5lOjpObywgeyB9IH07CisgICAgaWYgKGNhbmRpZGF0ZUNvbnRl
bnQuaGFzVHJhaWxpbmdDb2xsYXBzaWJsZUNvbnRlbnQoKSkgeworICAgICAgICBBU1NFUlQoY2Fu
ZGlkYXRlQ29udGVudC5oYXNUZXh0Q29udGVudE9ubHkoKSk7CisgICAgICAgIGF1dG8gSXNFbmRP
ZkxpbmUgPSBpc0NvbnRlbnRXcmFwcGluZ0FsbG93ZWQoY2FuZGlkYXRlQ29udGVudCkgPyBJc0Vu
ZE9mTGluZTo6WWVzIDogSXNFbmRPZkxpbmU6Ok5vOwogICAgICAgICAvLyBGaXJzdCBjaGVjayBp
ZiB0aGUgY29udGVudCBmaXRzIHdpdGhvdXQgdGhlIHRyYWlsaW5nIGNvbGxhcHNpYmxlIHBhcnQu
Ci0gICAgICAgIGlmIChjYW5kaWRhdGVSdW5zLm5vbkNvbGxhcHNpYmxlV2lkdGgoKSA8PSBsaW5l
U3RhdHVzLmF2YWlsYWJsZVdpZHRoKQotICAgICAgICAgICAgcmV0dXJuIHsgQnJlYWtpbmdDb250
ZXh0OjpDb250ZW50V3JhcHBpbmdSdWxlOjpLZWVwLCBJc0VuZE9mTGluZSwgeyB9IH07CisgICAg
ICAgIGlmIChjYW5kaWRhdGVDb250ZW50Lm5vbkNvbGxhcHNpYmxlV2lkdGgoKSA8PSBsaW5lU3Rh
dHVzLmF2YWlsYWJsZVdpZHRoKQorICAgICAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246
OktlZXAsIElzRW5kT2ZMaW5lLCB7IH0gfTsKICAgICAgICAgLy8gTm93IGNoZWNrIGlmIHdlIGNh
biB0cmltIHRoZSBsaW5lIHRvby4KLSAgICAgICAgaWYgKGxpbmVTdGF0dXMubGluZUhhc0Z1bGx5
Q29sbGFwc2libGVUcmFpbGluZ1J1biAmJiBjYW5kaWRhdGVSdW5zLmlzVHJhaWxpbmdDb250ZW50
RnVsbHlDb2xsYXBzaWJsZSgpKSB7CisgICAgICAgIGlmIChsaW5lU3RhdHVzLmxpbmVIYXNGdWxs
eUNvbGxhcHNpYmxlVHJhaWxpbmdSdW4gJiYgY2FuZGlkYXRlQ29udGVudC5pc1RyYWlsaW5nQ29u
dGVudEZ1bGx5Q29sbGFwc2libGUoKSkgewogICAgICAgICAgICAgLy8gSWYgdGhpcyBuZXcgY29u
dGVudCBpcyBmdWxseSBjb2xsYXBzaWJsZSwgaXQgc2hvdWQgc3VyZWx5IGZpdC4KLSAgICAgICAg
ICAgIHJldHVybiB7IEJyZWFraW5nQ29udGV4dDo6Q29udGVudFdyYXBwaW5nUnVsZTo6S2VlcCwg
SXNFbmRPZkxpbmUsIHsgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246
OktlZXAsIElzRW5kT2ZMaW5lLCB7IH0gfTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobGlu
ZVN0YXR1cy5jb2xsYXBzaWJsZVdpZHRoICYmIGNhbmRpZGF0ZVJ1bnMuaGFzTm9uQ29udGVudFJ1
bnNPbmx5KCkpIHsKKyAgICB9IGVsc2UgaWYgKGxpbmVTdGF0dXMuY29sbGFwc2libGVXaWR0aCAm
JiBjYW5kaWRhdGVDb250ZW50Lmhhc05vbkNvbnRlbnRSdW5zT25seSgpKSB7CiAgICAgICAgIC8v
IExldCdzIHNlZSBpZiB0aGUgbm9uLWNvbnRlbnQgcnVucyBmaXQgd2hlbiB0aGUgbGluZSBoYXMg
dHJhaWxpbmcgY29sbGFwc2libGUgY29udGVudC4KICAgICAgICAgLy8gInRleHQgY29udGVudCA8
c3BhbiBzdHlsZT0icGFkZGluZzogMXB4Ij48L3NwYW4+IiA8LSB0aGUgPHNwYW4+PC9zcGFuPiBy
dW5zIGNvdWxkIGZpdCBhZnRlciBjb2xsYXBzaW5nIHRoZSB0cmFpbGluZyB3aGl0ZXNwYWNlLgot
ICAgICAgICBpZiAoY2FuZGlkYXRlUnVucy53aWR0aCgpIDw9IGxpbmVTdGF0dXMuYXZhaWxhYmxl
V2lkdGggKyBsaW5lU3RhdHVzLmNvbGxhcHNpYmxlV2lkdGgpCi0gICAgICAgICAgICByZXR1cm4g
eyBCcmVha2luZ0NvbnRleHQ6OkNvbnRlbnRXcmFwcGluZ1J1bGU6OktlZXAsIElzRW5kT2ZMaW5l
OjpObywgeyB9IH07CisgICAgICAgIGlmIChjYW5kaWRhdGVDb250ZW50LndpZHRoKCkgPD0gbGlu
ZVN0YXR1cy5hdmFpbGFibGVXaWR0aCArIGxpbmVTdGF0dXMuY29sbGFwc2libGVXaWR0aCkKKyAg
ICAgICAgICAgIHJldHVybiB7IFJlc3VsdDo6QWN0aW9uOjpLZWVwLCBJc0VuZE9mTGluZTo6Tm8s
IHsgfSB9OwogICAgIH0KLSAgICBpZiAoY2FuZGlkYXRlUnVucy5pc1Zpc3VhbGx5RW1wdHlXaGl0
ZXNwYWNlQ29udGVudE9ubHkoKSAmJiBzaG91bGRLZWVwRW5kT2ZMaW5lV2hpdGVzcGFjZShjYW5k
aWRhdGVSdW5zKSkgeworICAgIGlmIChjYW5kaWRhdGVDb250ZW50LmlzVmlzdWFsbHlFbXB0eVdo
aXRlc3BhY2VDb250ZW50T25seSgpICYmIHNob3VsZEtlZXBFbmRPZkxpbmVXaGl0ZXNwYWNlKGNh
bmRpZGF0ZUNvbnRlbnQpKSB7CiAgICAgICAgIC8vIFRoaXMgb3ZlcmZsb3dpbmcgY29udGVudCBh
cHBhcmVudGx5IGZhbGxzIGludG8gdGhlIHJlbW92ZS9oYW5nIGVuZC1vZi1saW5lLXNwYWNlcyBj
YXRlcmdvcnkuCiAgICAgICAgIC8vIHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRleHQt
My8jd2hpdGUtc3BhY2UtcHJvcGVydHkgbWF0cml4Ci0gICAgICAgIHJldHVybiB7IEJyZWFraW5n
Q29udGV4dDo6Q29udGVudFdyYXBwaW5nUnVsZTo6S2VlcCwgSXNFbmRPZkxpbmU6Ok5vLCB7IH0g
fTsKKyAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246OktlZXAsIElzRW5kT2ZMaW5lOjpO
bywgeyB9IH07CiAgICAgfQogCi0gICAgaWYgKGNhbmRpZGF0ZVJ1bnMuaGFzVGV4dENvbnRlbnRP
bmx5KCkpIHsKLSAgICAgICAgYXV0byYgcnVucyA9IGNhbmRpZGF0ZVJ1bnMucnVucygpOworICAg
IGlmIChjYW5kaWRhdGVDb250ZW50Lmhhc1RleHRDb250ZW50T25seSgpKSB7CisgICAgICAgIGF1
dG8mIHJ1bnMgPSBjYW5kaWRhdGVDb250ZW50LnJ1bnMoKTsKICAgICAgICAgaWYgKGF1dG8gd3Jh
cHBlZFRleHRDb250ZW50ID0gd3JhcFRleHRDb250ZW50KHJ1bnMsIGxpbmVTdGF0dXMpKSB7CiAg
ICAgICAgICAgICBpZiAoIXdyYXBwZWRUZXh0Q29udGVudC0+dHJhaWxpbmdSdW5JbmRleCAmJiB3
cmFwcGVkVGV4dENvbnRlbnQtPmNvbnRlbnRPdmVyZmxvd3MpIHsKICAgICAgICAgICAgICAgICAv
LyBXZSB0cmllZCB0byBzcGxpdCB0aGUgY29udGVudCBidXQgdGhlIGF2YWlsYWJsZSBzcGFjZSBj
YW4ndCBldmVuIGFjY29tbW9kYXRlIHRoZSBmaXJzdCBjaGFyYWN0ZXIuCiAgICAgICAgICAgICAg
ICAgLy8gMS4gUHVzaCB0aGUgY29udGVudCBvdmVyIHRvIHRoZSBuZXh0IGxpbmUgd2hlbiB3ZSd2
ZSBnb3QgY29udGVudCBvbiB0aGUgbGluZSBhbHJlYWR5LgogICAgICAgICAgICAgICAgIC8vIDIu
IEtlZXAgdGhlIGZpcnN0IGNoYXJhY3RlciBvbiB0aGUgZW1wdHkgbGluZSAob3Iga2VlcCB0aGUg
d2hvbGUgcnVuIGlmIGl0IGhhcyBvbmx5IG9uZSBjaGFyYWN0ZXIpLgogICAgICAgICAgICAgICAg
IGlmICghbGluZVN0YXR1cy5saW5lSXNFbXB0eSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHsgQnJlYWtpbmdDb250ZXh0OjpDb250ZW50V3JhcHBpbmdSdWxlOjpQdXNoLCBJc0VuZE9mTGlu
ZTo6WWVzLCB7IH0gfTsKLSAgICAgICAgICAgICAgICBhdXRvIGZpcnN0VGV4dFJ1bkluZGV4ID0g
KmNhbmRpZGF0ZVJ1bnMuZmlyc3RUZXh0UnVuSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246OlB1c2gsIElzRW5kT2ZMaW5lOjpZZXMsIHsgfSB9Owor
ICAgICAgICAgICAgICAgIGF1dG8gZmlyc3RUZXh0UnVuSW5kZXggPSAqY2FuZGlkYXRlQ29udGVu
dC5maXJzdFRleHRSdW5JbmRleCgpOwogICAgICAgICAgICAgICAgIGF1dG8mIGlubGluZVRleHRJ
dGVtID0gZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KHJ1bnNbZmlyc3RUZXh0UnVuSW5kZXhdLmlu
bGluZUl0ZW0pOwogICAgICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVUZXh0SXRlbS5sZW5ndGgo
KSk7CiAgICAgICAgICAgICAgICAgaWYgKGlubGluZVRleHRJdGVtLmxlbmd0aCgpID09IDEpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7IEJyZWFraW5nQ29udGV4dDo6Q29udGVudFdyYXBw
aW5nUnVsZTo6S2VlcCwgSXNFbmRPZkxpbmU6OlllcywgeyB9IH07CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB7IFJlc3VsdDo6QWN0aW9uOjpLZWVwLCBJc0VuZE9mTGluZTo6WWVzLCB7IH0g
fTsKICAgICAgICAgICAgICAgICBhdXRvIGZpcnN0Q2hhcmFjdGVyV2lkdGggPSBUZXh0VXRpbDo6
d2lkdGgoaW5saW5lVGV4dEl0ZW0sIGlubGluZVRleHRJdGVtLnN0YXJ0KCksIGlubGluZVRleHRJ
dGVtLnN0YXJ0KCkgKyAxKTsKICAgICAgICAgICAgICAgICBhdXRvIGZpcnN0Q2hhcmFjdGVyUnVu
ID0gUGFydGlhbFJ1biB7IDEsIGZpcnN0Q2hhcmFjdGVyV2lkdGgsIGZhbHNlIH07Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHsgQnJlYWtpbmdDb250ZXh0OjpDb250ZW50V3JhcHBpbmdSdWxlOjpT
cGxpdCwgSXNFbmRPZkxpbmU6OlllcywgQnJlYWtpbmdDb250ZXh0OjpQYXJ0aWFsVHJhaWxpbmdD
b250ZW50IHsgZmlyc3RUZXh0UnVuSW5kZXgsIGZpcnN0Q2hhcmFjdGVyUnVuIH0gfTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geyBSZXN1bHQ6OkFjdGlvbjo6U3BsaXQsIElzRW5kT2ZMaW5lOjpZ
ZXMsIFJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCB7IGZpcnN0VGV4dFJ1bkluZGV4LCBm
aXJzdENoYXJhY3RlclJ1biB9IH07CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvIHNw
bGl0Q29udGVudCA9IEJyZWFraW5nQ29udGV4dDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCB7IHdy
YXBwZWRUZXh0Q29udGVudC0+dHJhaWxpbmdSdW5JbmRleCwgd3JhcHBlZFRleHRDb250ZW50LT5w
YXJ0aWFsVHJhaWxpbmdSdW4gfTsKLSAgICAgICAgICAgIHJldHVybiB7IEJyZWFraW5nQ29udGV4
dDo6Q29udGVudFdyYXBwaW5nUnVsZTo6U3BsaXQsIElzRW5kT2ZMaW5lOjpZZXMsIHNwbGl0Q29u
dGVudCB9OworICAgICAgICAgICAgYXV0byBzcGxpdENvbnRlbnQgPSBSZXN1bHQ6OlBhcnRpYWxU
cmFpbGluZ0NvbnRlbnQgeyB3cmFwcGVkVGV4dENvbnRlbnQtPnRyYWlsaW5nUnVuSW5kZXgsIHdy
YXBwZWRUZXh0Q29udGVudC0+cGFydGlhbFRyYWlsaW5nUnVuIH07CisgICAgICAgICAgICByZXR1
cm4geyBSZXN1bHQ6OkFjdGlvbjo6U3BsaXQsIElzRW5kT2ZMaW5lOjpZZXMsIHNwbGl0Q29udGVu
dCB9OwogICAgICAgICB9CiAgICAgfQogICAgIC8vIElmIHdlIGFyZSBub3QgYWxsb3dlZCB0byBi
cmVhayB0aGlzIGNvbnRlbnQsIHdlIHN0aWxsIG5lZWQgdG8gZGVjaWRlIHdoZXRoZXIga2VlcCBp
dCBvciBwdXNoIGl0IHRvIHRoZSBuZXh0IGxpbmUuCi0gICAgYXV0byBpc1dyYXBwaW5nQWxsb3dl
ZCA9IGlzVGV4dENvbnRlbnRXcmFwcGluZ0FsbG93ZWQoY2FuZGlkYXRlUnVucyk7CisgICAgYXV0
byBpc1dyYXBwaW5nQWxsb3dlZCA9IGlzQ29udGVudFdyYXBwaW5nQWxsb3dlZChjYW5kaWRhdGVD
b250ZW50KTsKICAgICBhdXRvIGNvbnRlbnRPdmVyZmxvd3MgPSBsaW5lU3RhdHVzLmxpbmVJc0Vt
cHR5IHx8ICFpc1dyYXBwaW5nQWxsb3dlZDsKICAgICBpZiAoIWNvbnRlbnRPdmVyZmxvd3MpCi0g
ICAgICAgIHJldHVybiB7IEJyZWFraW5nQ29udGV4dDo6Q29udGVudFdyYXBwaW5nUnVsZTo6UHVz
aCwgSXNFbmRPZkxpbmU6OlllcywgeyB9IH07Ci0gICAgcmV0dXJuIHsgQnJlYWtpbmdDb250ZXh0
OjpDb250ZW50V3JhcHBpbmdSdWxlOjpLZWVwLCBpc1dyYXBwaW5nQWxsb3dlZCA/IElzRW5kT2ZM
aW5lOjpZZXMgOiBJc0VuZE9mTGluZTo6Tm8sIHsgfSB9OworICAgICAgICByZXR1cm4geyBSZXN1
bHQ6OkFjdGlvbjo6UHVzaCwgSXNFbmRPZkxpbmU6OlllcywgeyB9IH07CisgICAgcmV0dXJuIHsg
UmVzdWx0OjpBY3Rpb246OktlZXAsIGlzV3JhcHBpbmdBbGxvd2VkID8gSXNFbmRPZkxpbmU6Olll
cyA6IElzRW5kT2ZMaW5lOjpObywgeyB9IH07CiB9CiAKIGJvb2wgTGluZUJyZWFrZXI6OnNob3Vs
ZFdyYXBGbG9hdEJveChJbmxpbmVMYXlvdXRVbml0IGZsb2F0TG9naWNhbFdpZHRoLCBJbmxpbmVM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBib29sIGxpbmVJc0VtcHR5KQpAQCAtMTM2LDYgKzEy
NiwxNiBAQCBib29sIExpbmVCcmVha2VyOjpzaG91bGRXcmFwRmxvYXRCb3goSW5saW5lTGF5b3V0
VW5pdCBmbG9hdExvZ2ljYWxXaWR0aCwgSW5saW5lTAogCiBPcHRpb25hbDxMaW5lQnJlYWtlcjo6
V3JhcHBlZFRleHRDb250ZW50PiBMaW5lQnJlYWtlcjo6d3JhcFRleHRDb250ZW50KGNvbnN0IFJ1
bkxpc3QmIHJ1bnMsIGNvbnN0IExpbmVTdGF0dXMmIGxpbmVTdGF0dXMpIGNvbnN0CiB7CisgICAg
YXV0byBpc0NvbnRlbnRTcGxpdEFsbG93ZWQgPSBbXSAoYXV0byYgcnVuKSB7CisgICAgICAgIEFT
U0VSVChydW4uaW5saW5lSXRlbS5pc1RleHQoKSB8fCBydW4uaW5saW5lSXRlbS5pc0NvbnRhaW5l
clN0YXJ0KCkgfHwgcnVuLmlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSk7CisgICAgICAgIGlm
ICghcnVuLmlubGluZUl0ZW0uaXNUZXh0KCkpIHsKKyAgICAgICAgICAgIC8vIENhbid0IHNwbGl0
IGhvcml6b250YWwgc3BhY2luZyAtPiBlLmcuIDxzcGFuIHN0eWxlPSJwYWRkaW5nLXJpZ2h0OiAx
MDBweDsiPnRleHRjb250ZW50PC9zcGFuPiwgaWYgdGhlIFtjb250YWluZXIgZW5kXSBpcyB0aGUg
b3ZlcmZsb3duIGlubGluZSBpdGVtCisgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGNoZWNrIGlm
IHRoZXJlJ3MgYW5vdGhlciBpbmxpbmUgaXRlbSBiZXlvbmQgdGhlIFtjb250YWluZXIgZW5kXSB0
byBzcGxpdC4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gaXNXcmFwcGluZ0FsbG93ZWQocnVuLmlubGluZUl0ZW0uc3R5bGUoKSk7CisgICAgfTsK
KwogICAgIC8vIENoZWNrIHdoZXJlIHRoZSBvdmVyZmxvdyBvY2N1cnMgYW5kIHVzZSB0aGUgY29y
cmVzcG9uZGluZyBzdHlsZSB0byBmaWd1cmUgb3V0IHRoZSBicmVha2luZyBiZWhhdmlvdXIuCiAg
ICAgLy8gPHNwYW4gc3R5bGU9IndvcmQtYnJlYWs6IG5vcm1hbCI+Zmlyc3Q8L3NwYW4+PHNwYW4g
c3R5bGU9IndvcmQtYnJlYWs6IGJyZWFrLWFsbCI+c2Vjb25kPC9zcGFuPjxzcGFuIHN0eWxlPSJ3
b3JkLWJyZWFrOiBub3JtYWwiPnRoaXJkPC9zcGFuPgogICAgIElubGluZUxheW91dFVuaXQgYWNj
dW11bGF0ZWRSdW5XaWR0aCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaAppbmRleCAwZWU1ZTBmZTFh
ODc5YTcwOGVjYWM4ODllYmFkNDJmZTIxYWNjMzZiLi42YjU3ZmQyZjkxNzBkOGQyMjcwYjk0MGQy
NzNjNDFlMWMzMjZiODdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgKQEAgLTQzLDE0ICs0MywxNCBA
QCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbmVlZHNIeXBoZW4geyBmYWxzZSB9OwogICAgIH07CiAg
ICAgZW51bSBjbGFzcyBJc0VuZE9mTGluZSB7IE5vLCBZZXMgfTsKLSAgICBzdHJ1Y3QgQnJlYWtp
bmdDb250ZXh0IHsKLSAgICAgICAgZW51bSBjbGFzcyBDb250ZW50V3JhcHBpbmdSdWxlIHsKKyAg
ICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICAgICAgZW51bSBjbGFzcyBBY3Rpb24gewogICAgICAgICAg
ICAgS2VlcCwgLy8gS2VlcCBjb250ZW50IG9uIHRoZSBjdXJyZW50IGxpbmUuCiAgICAgICAgICAg
ICBTcGxpdCwgLy8gUGFydGlhbCBjb250ZW50IGlzIG9uIHRoZSBjdXJyZW50IGxpbmUuCiAgICAg
ICAgICAgICBQdXNoIC8vIENvbnRlbnQgaXMgcHVzaGVkIHRvIHRoZSBuZXh0IGxpbmUuCiAgICAg
ICAgIH07Ci0gICAgICAgIENvbnRlbnRXcmFwcGluZ1J1bGUgY29udGVudFdyYXBwaW5nUnVsZTsK
LSAgICAgICAgSXNFbmRPZkxpbmUgaXNFbmRPZkxpbmUgeyBJc0VuZE9mTGluZTo6Tm8gfTsgCisg
ICAgICAgIEFjdGlvbiBhY3Rpb247CisgICAgICAgIElzRW5kT2ZMaW5lIGlzRW5kT2ZMaW5lIHsg
SXNFbmRPZkxpbmU6Ok5vIH07CiAgICAgICAgIHN0cnVjdCBQYXJ0aWFsVHJhaWxpbmdDb250ZW50
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHRyYWlsaW5nUnVuSW5kZXggeyAwIH07CiAgICAgICAg
ICAgICBPcHRpb25hbDxQYXJ0aWFsUnVuPiBwYXJ0aWFsUnVuOyAvLyBudWxsb3B0IHBhcnRpYWwg
cnVuIG1lYW5zIHRoZSB0cmFpbGluZyBydW4gaXMgYSBjb21wbGV0ZSBydW4uCkBAIC02OSw2ICs2
OSwxOCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUnVuTGlzdCA9IFZlY3RvcjxSdW4sIDMwPjsKICAg
ICBzdGF0aWMgc2l6ZV90IG5leHRXcmFwT3Bwb3J0dW5pdHkoY29uc3QgSW5saW5lSXRlbXMmLCB1
bnNpZ25lZCBzdGFydEluZGV4KTsKIAorICAgIHN0cnVjdCBMaW5lU3RhdHVzIHsKKyAgICAgICAg
SW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCB7IDAgfTsKKyAgICAgICAgSW5saW5lTGF5
b3V0VW5pdCBjb2xsYXBzaWJsZVdpZHRoIHsgMCB9OworICAgICAgICBib29sIGxpbmVIYXNGdWxs
eUNvbGxhcHNpYmxlVHJhaWxpbmdSdW4geyBmYWxzZSB9OworICAgICAgICBib29sIGxpbmVJc0Vt
cHR5IHsgdHJ1ZSB9OworICAgIH07CisgICAgUmVzdWx0IHNob3VsZFdyYXBJbmxpbmVDb250ZW50
KGNvbnN0IFJ1bkxpc3QmIGNhbmRpZGF0ZVJ1bnMsIGNvbnN0IExpbmVTdGF0dXMmKTsKKyAgICBi
b29sIHNob3VsZFdyYXBGbG9hdEJveChJbmxpbmVMYXlvdXRVbml0IGZsb2F0TG9naWNhbFdpZHRo
LCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBib29sIGxpbmVJc0VtcHR5KTsKKwor
ICAgIHZvaWQgc2V0SHlwaGVuYXRpb25EaXNhYmxlZCgpIHsgbl9oeXBoZW5hdGlvbklzRGlzYWJs
ZWQgPSB0cnVlOyB9CisKK3ByaXZhdGU6CiAgICAgLy8gVGhpcyBzdHJ1Y3QgcmVwcmVzZW50cyB0
aGUgYW1vdW50IG9mIGNvbnRlbnQgY29tbWl0dGVkIHRvIGxpbmUgYnJlYWtpbmcgYXQgYSB0aW1l
IGUuZy4KICAgICAvLyB0ZXh0IGNvbnRlbnQgPHNwYW4+c3BhbjE8L3NwYW4+YmV0d2VlbjxzcGFu
PnNwYW4yPC9zcGFuPgogICAgIC8vIFt0ZXh0XVsgXVtjb250ZW50XVsgXVtjb250YWluZXIgc3Rh
cnRdW3NwYW4xXVtjb250YWluZXIgZW5kXVtiZXR3ZWVuXVtjb250YWluZXIgc3RhcnRdW3NwYW4y
XVtjb250YWluZXIgZW5kXQpAQCAtMTA4LDE4ICsxMjAsNiBAQCBwdWJsaWM6CiAgICAgICAgIElu
bGluZUxheW91dFVuaXQgbV93aWR0aCB7IDAgfTsKICAgICB9OwogCi0gICAgc3RydWN0IExpbmVT
dGF0dXMgewotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoIHsgMCB9Owot
ICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGNvbGxhcHNpYmxlV2lkdGggeyAwIH07Ci0gICAgICAg
IGJvb2wgbGluZUhhc0Z1bGx5Q29sbGFwc2libGVUcmFpbGluZ1J1biB7IGZhbHNlIH07Ci0gICAg
ICAgIGJvb2wgbGluZUlzRW1wdHkgeyB0cnVlIH07Ci0gICAgfTsKLSAgICBCcmVha2luZ0NvbnRl
eHQgYnJlYWtpbmdDb250ZXh0Rm9ySW5saW5lQ29udGVudChjb25zdCBDb250aW5vdXNDb250ZW50
JiBjYW5kaWRhdGVSdW5zLCBjb25zdCBMaW5lU3RhdHVzJik7Ci0gICAgYm9vbCBzaG91bGRXcmFw
RmxvYXRCb3goSW5saW5lTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0
VW5pdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBsaW5lSXNFbXB0eSk7Ci0KLSAgICB2b2lkIHNldEh5
cGhlbmF0aW9uRGlzYWJsZWQoKSB7IG5faHlwaGVuYXRpb25Jc0Rpc2FibGVkID0gdHJ1ZTsgfQot
Ci1wcml2YXRlOgogICAgIHN0cnVjdCBXcmFwcGVkVGV4dENvbnRlbnQgewogICAgICAgICB1bnNp
Z25lZCB0cmFpbGluZ1J1bkluZGV4IHsgMCB9OwogICAgICAgICBib29sIGNvbnRlbnRPdmVyZmxv
d3MgeyBmYWxzZSB9OwpAQCAtMTM0LDYgKzEzNCw4IEBAIHByaXZhdGU6CiAgICAgICAgIE9ubHlI
eXBoZW5hdGlvbkFsbG93ZWQKICAgICB9OwogICAgIFdvcmRCcmVha1J1bGUgd29yZEJyZWFrQmVo
YXZpb3IoY29uc3QgUmVuZGVyU3R5bGUmLCBib29sIGxpbmVJc0VtcHR5KSBjb25zdDsKKyAgICBi
b29sIHNob3VsZEtlZXBFbmRPZkxpbmVXaGl0ZXNwYWNlKGNvbnN0IENvbnRpbm91c0NvbnRlbnQm
KSBjb25zdDsKKyAgICBib29sIGlzQ29udGVudFdyYXBwaW5nQWxsb3dlZChjb25zdCBDb250aW5v
dXNDb250ZW50JikgY29uc3Q7CiAKICAgICBib29sIG5faHlwaGVuYXRpb25Jc0Rpc2FibGVkIHsg
ZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAKaW5kZXggMDEyNjY0YzBlY2UzOGI5
YTMwYmEwYWNlMzYyYWIzOGEwOGRmYTI4ZS4uZmJmMDIzNDVjMDNlNDAyZTAzMjlkYzFlMGRjMzUx
ZWQ1ZDIzZWFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcApAQCAtOTYsNiArOTYsMTEgQEAg
c3RhdGljIElubGluZUxheW91dFVuaXQgaW5saW5lSXRlbVdpZHRoKGNvbnN0IEZvcm1hdHRpbmdD
b250ZXh0JiBmb3JtYXR0aW5nQ29udGUKICAgICByZXR1cm4gYm94R2VvbWV0cnkud2lkdGgoKTsK
IH0KIAorc3RhdGljIGlubGluZSBib29sIGlzTGluZUNvbnNpZGVyZWRFbXB0eShjb25zdCBMaW5l
QnVpbGRlciYgbGluZSkKK3sKKyAgICByZXR1cm4gbGluZS5pc1Zpc3VhbGx5RW1wdHkoKSAmJiAh
bGluZS5oYXNJbnRydXNpdmVGbG9hdCgpOworfQorCiBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUxh
eW91dENvbnRleHQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRp
bmdDb250ZXh0LCBjb25zdCBDb250YWluZXImIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgY29uc3Qg
SW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKQogICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4
dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKICAgICAsIG1fZm9ybWF0dGluZ0NvbnRleHRSb290
KGZvcm1hdHRpbmdDb250ZXh0Um9vdCkKQEAgLTExMSw2ICsxMTYsNyBAQCBMaW5lTGF5b3V0Q29u
dGV4dDo6TGluZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmxheW91dExpbmUoTGluZUJ1aWxk
ZXImIGxpbmUsCiAgICAgICAgIG1fcGFydGlhbExlYWRpbmdUZXh0SXRlbSA9IHsgfTsKICAgICB9
OwogICAgIHJlc2V0KCk7CisgICAgYXV0byBsaW5lQnJlYWtlciA9IExpbmVCcmVha2VyIHsgfTsK
ICAgICBhdXRvIGN1cnJlbnRJdGVtSW5kZXggPSBsZWFkaW5nSW5saW5lSXRlbUluZGV4OwogICAg
IHVuc2lnbmVkIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCA9IDA7CiAgICAgd2hpbGUgKGN1cnJl
bnRJdGVtSW5kZXggPCBtX2lubGluZUl0ZW1zLnNpemUoKSkgewpAQCAtMTM0LDcgKzE0MCw3IEBA
IExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6bGF5b3V0
TGluZShMaW5lQnVpbGRlciYgbGluZSwKICAgICAgICAgfQogICAgICAgICBpZiAoIWNhbmRpZGF0
ZUNvbnRlbnQucnVucygpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gTm93IGNoZWNrIGlm
IHdlIGNhbiBwdXQgdGhpcyBjb250ZW50IG9uIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgICAgICAg
ICBhdXRvIGNvbW1pdHRlZENvbnRlbnQgPSBwbGFjZUlubGluZUNvbnRlbnRPbkN1cnJlbnRMaW5l
KGxpbmUsIGNhbmRpZGF0ZUNvbnRlbnQucnVucygpKTsKKyAgICAgICAgICAgIGF1dG8gY29tbWl0
dGVkQ29udGVudCA9IGNoZWNrRm9yTGluZVdyYXBBbmRDb21taXQobGluZUJyZWFrZXIsIGxpbmUs
IGNhbmRpZGF0ZUNvbnRlbnQucnVucygpKTsKICAgICAgICAgICAgIGNvbW1pdHRlZElubGluZUl0
ZW1Db3VudCArPSBjb21taXR0ZWRDb250ZW50LmNvdW50OwogICAgICAgICAgICAgaWYgKGNvbW1p
dHRlZENvbnRlbnQuaXNFbmRPZkxpbmUgPT0gTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpZZXMp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBwbGFjZSBhbnkgbW9yZSBpdGVtcyBvbiB0
aGUgY3VycmVudCBsaW5lLgpAQCAtMjQ1LDcgKzI1MSw3IEBAIExpbmVMYXlvdXRDb250ZXh0OjpD
b21taXR0ZWRDb250ZW50IExpbmVMYXlvdXRDb250ZXh0OjphZGRGbG9hdEl0ZW1zKExpbmVCdWls
ZGVyCiAgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpObywgY29tbWl0dGVk
RmxvYXRJdGVtQ291bnQsIHsgfSB9OwogfQogCi1MaW5lTGF5b3V0Q29udGV4dDo6Q29tbWl0dGVk
Q29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6cGxhY2VJbmxpbmVDb250ZW50T25DdXJyZW50TGlu
ZShMaW5lQnVpbGRlciYgbGluZSwgY29uc3QgTGluZUJyZWFrZXI6OlJ1bkxpc3QmIHJ1bnMpCitM
aW5lTGF5b3V0Q29udGV4dDo6Q29tbWl0dGVkQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6Y2hl
Y2tGb3JMaW5lV3JhcEFuZENvbW1pdChMaW5lQnJlYWtlciYgbGluZUJyZWFrZXIsIExpbmVCdWls
ZGVyJiBsaW5lLCBjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgY2FuZGlkYXRlUnVucykKIHsK
ICAgICBhdXRvIHNob3VsZERpc2FibGVIeXBoZW5hdGlvbiA9IFsmXSB7CiAgICAgICAgIGF1dG8m
IHN0eWxlID0gcm9vdCgpLnN0eWxlKCk7CkBAIC0yNTMsNDYgKzI1OSw0MiBAQCBMaW5lTGF5b3V0
Q29udGV4dDo6Q29tbWl0dGVkQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6cGxhY2VJbmxpbmVD
b250ZW50T25DdXJyZQogICAgICAgICByZXR1cm4gbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVD
b3VudCA+PSBsaW1pdExpbmVzOwogICAgIH07CiAgICAgLy8gQ2hlY2sgaWYgdGhpcyBuZXcgY29u
dGVudCBmaXRzLgotICAgIGF1dG8gbGluZUlzQ29uc2lkZXJlZEVtcHR5ID0gbGluZS5pc1Zpc3Vh
bGx5RW1wdHkoKSAmJiAhbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpOwotICAgIGF1dG8gbGluZVN0
YXR1cyA9IExpbmVCcmVha2VyOjpMaW5lU3RhdHVzIHsgbGluZS5hdmFpbGFibGVXaWR0aCgpLCBs
aW5lLnRyYWlsaW5nQ29sbGFwc2libGVXaWR0aCgpLCBsaW5lLmlzVHJhaWxpbmdSdW5GdWxseUNv
bGxhcHNpYmxlKCksIGxpbmVJc0NvbnNpZGVyZWRFbXB0eSB9OwotICAgIGF1dG8gbGluZUJyZWFr
ZXIgPSBMaW5lQnJlYWtlciB7IH07CisgICAgYXV0byBsaW5lU3RhdHVzID0gTGluZUJyZWFrZXI6
OkxpbmVTdGF0dXMgeyBsaW5lLmF2YWlsYWJsZVdpZHRoKCksIGxpbmUudHJhaWxpbmdDb2xsYXBz
aWJsZVdpZHRoKCksIGxpbmUuaXNUcmFpbGluZ1J1bkZ1bGx5Q29sbGFwc2libGUoKSwgaXNMaW5l
Q29uc2lkZXJlZEVtcHR5KGxpbmUpIH07CiAKICAgICBpZiAoc2hvdWxkRGlzYWJsZUh5cGhlbmF0
aW9uKCkpCiAgICAgICAgIGxpbmVCcmVha2VyLnNldEh5cGhlbmF0aW9uRGlzYWJsZWQoKTsKIAot
ICAgIGF1dG8gYnJlYWtpbmdDb250ZXh0ID0gbGluZUJyZWFrZXIuYnJlYWtpbmdDb250ZXh0Rm9y
SW5saW5lQ29udGVudChMaW5lQnJlYWtlcjo6Q29udGlub3VzQ29udGVudCB7IHJ1bnMgfSwgbGlu
ZVN0YXR1cyk7Ci0gICAgaWYgKGJyZWFraW5nQ29udGV4dC5jb250ZW50V3JhcHBpbmdSdWxlID09
IExpbmVCcmVha2VyOjpCcmVha2luZ0NvbnRleHQ6OkNvbnRlbnRXcmFwcGluZ1J1bGU6OktlZXAp
IHsKKyAgICBhdXRvIHJlc3VsdCA9IGxpbmVCcmVha2VyLnNob3VsZFdyYXBJbmxpbmVDb250ZW50
KGNhbmRpZGF0ZVJ1bnMsIGxpbmVTdGF0dXMpOworICAgIGlmIChyZXN1bHQuYWN0aW9uID09IExp
bmVCcmVha2VyOjpSZXN1bHQ6OkFjdGlvbjo6S2VlcCkgewogICAgICAgICAvLyBUaGlzIGNvbnRp
bnVvdXMgY29udGVudCBjYW4gYmUgZnVsbHkgcGxhY2VkIG9uIHRoZSBjdXJyZW50IGxpbmUuCi0g
ICAgICAgIGNvbW1pdENvbnRlbnQobGluZSwgcnVucywgeyB9KTsKLSAgICAgICAgcmV0dXJuIHsg
YnJlYWtpbmdDb250ZXh0LmlzRW5kT2ZMaW5lLCBydW5zLnNpemUoKSwgeyB9IH07CisgICAgICAg
IGNvbW1pdENvbnRlbnQobGluZSwgY2FuZGlkYXRlUnVucywgeyB9KTsKKyAgICAgICAgcmV0dXJu
IHsgcmVzdWx0LmlzRW5kT2ZMaW5lLCBjYW5kaWRhdGVSdW5zLnNpemUoKSwgeyB9IH07CiAgICAg
fQotCi0gICAgaWYgKGJyZWFraW5nQ29udGV4dC5jb250ZW50V3JhcHBpbmdSdWxlID09IExpbmVC
cmVha2VyOjpCcmVha2luZ0NvbnRleHQ6OkNvbnRlbnRXcmFwcGluZ1J1bGU6OlB1c2gpIHsKKyAg
ICBpZiAocmVzdWx0LmFjdGlvbiA9PSBMaW5lQnJlYWtlcjo6UmVzdWx0OjpBY3Rpb246OlB1c2gp
IHsKICAgICAgICAgLy8gVGhpcyBjb250aW51b3VzIGNvbnRlbnQgY2FuJ3QgYmUgcGxhY2VkIG9u
IHRoZSBjdXJyZW50IGxpbmUuIE5vdGhpbmcgdG8gY29tbWl0IGF0IHRoaXMgdGltZS4KLSAgICAg
ICAgcmV0dXJuIHsgYnJlYWtpbmdDb250ZXh0LmlzRW5kT2ZMaW5lLCAwLCB7IH0gfTsKKyAgICAg
ICAgcmV0dXJuIHsgcmVzdWx0LmlzRW5kT2ZMaW5lLCAwLCB7IH0gfTsKICAgICB9Ci0KLSAgICBp
ZiAoYnJlYWtpbmdDb250ZXh0LmNvbnRlbnRXcmFwcGluZ1J1bGUgPT0gTGluZUJyZWFrZXI6OkJy
ZWFraW5nQ29udGV4dDo6Q29udGVudFdyYXBwaW5nUnVsZTo6U3BsaXQpIHsKKyAgICBpZiAocmVz
dWx0LmFjdGlvbiA9PSBMaW5lQnJlYWtlcjo6UmVzdWx0OjpBY3Rpb246OlNwbGl0KSB7CiAgICAg
ICAgIC8vIENvbW1pdCB0aGUgY29tYmluYXRpb24gb2YgZnVsbCBhbmQgcGFydGlhbCBjb250ZW50
IG9uIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgICAgIEFTU0VSVChicmVha2luZ0NvbnRleHQucGFy
dGlhbFRyYWlsaW5nQ29udGVudCk7Ci0gICAgICAgIGNvbW1pdENvbnRlbnQobGluZSwgcnVucywg
YnJlYWtpbmdDb250ZXh0LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQpOworICAgICAgICBBU1NFUlQo
cmVzdWx0LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQpOworICAgICAgICBjb21taXRDb250ZW50KGxp
bmUsIGNhbmRpZGF0ZVJ1bnMsIHJlc3VsdC5wYXJ0aWFsVHJhaWxpbmdDb250ZW50KTsKICAgICAg
ICAgLy8gV2hlbiBzcGxpdHRpbmcgbXVsdGlwbGUgcnVucyA8c3BhbiBzdHlsZT0id29yZC1icmVh
azogYnJlYWstYWxsIj50ZXh0PC9zcGFuPjxzcGFuPmNvbnRlbnQ8L3NwYW4+LCB3ZSBtaWdodCBl
bmQgdXAgc3BsaXR0aW5nIHRoZW0gYXQgcnVuIGJvdW5kYXJ5LgogICAgICAgICAvLyBJdCBzaW1w
bHkgbWVhbnMgd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYSBwYXJ0aWFsIHJ1bi4gUGFydGlhbCBjb250
ZW50IHllcywgYnV0IG5vdCBwYXJ0aWFsIHJ1bi4KLSAgICAgICAgYXV0byB0cmFpbGluZ1J1bklu
ZGV4ID0gYnJlYWtpbmdDb250ZXh0LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQtPnRyYWlsaW5nUnVu
SW5kZXg7CisgICAgICAgIGF1dG8gdHJhaWxpbmdSdW5JbmRleCA9IHJlc3VsdC5wYXJ0aWFsVHJh
aWxpbmdDb250ZW50LT50cmFpbGluZ1J1bkluZGV4OwogICAgICAgICBhdXRvIGNvbW1pdHRlZElu
bGluZUl0ZW1Db3VudCA9IHRyYWlsaW5nUnVuSW5kZXggKyAxOwotICAgICAgICBpZiAoIWJyZWFr
aW5nQ29udGV4dC5wYXJ0aWFsVHJhaWxpbmdDb250ZW50LT5wYXJ0aWFsUnVuKQotICAgICAgICAg
ICAgcmV0dXJuIHsgYnJlYWtpbmdDb250ZXh0LmlzRW5kT2ZMaW5lLCBjb21taXR0ZWRJbmxpbmVJ
dGVtQ291bnQsIHsgfSB9OworICAgICAgICBpZiAoIXJlc3VsdC5wYXJ0aWFsVHJhaWxpbmdDb250
ZW50LT5wYXJ0aWFsUnVuKQorICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0LmlzRW5kT2ZMaW5l
LCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIHsgfSB9OwogCi0gICAgICAgIGF1dG8gcGFydGlh
bFJ1biA9ICpicmVha2luZ0NvbnRleHQucGFydGlhbFRyYWlsaW5nQ29udGVudC0+cGFydGlhbFJ1
bjsKLSAgICAgICAgYXV0byYgdHJhaWxpbmdJbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGlu
ZVRleHRJdGVtPihydW5zW3RyYWlsaW5nUnVuSW5kZXhdLmlubGluZUl0ZW0pOworICAgICAgICBh
dXRvIHBhcnRpYWxSdW4gPSAqcmVzdWx0LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQtPnBhcnRpYWxS
dW47CisgICAgICAgIGF1dG8mIHRyYWlsaW5nSW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxp
bmVUZXh0SXRlbT4oY2FuZGlkYXRlUnVuc1t0cmFpbGluZ1J1bkluZGV4XS5pbmxpbmVJdGVtKTsK
ICAgICAgICAgYXV0byBvdmVyZmxvd0xlbmd0aCA9IHRyYWlsaW5nSW5saW5lVGV4dEl0ZW0ubGVu
Z3RoKCkgLSBwYXJ0aWFsUnVuLmxlbmd0aDsKLSAgICAgICAgcmV0dXJuIHsgYnJlYWtpbmdDb250
ZXh0LmlzRW5kT2ZMaW5lLCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIExpbmVDb250ZW50OjpQ
YXJ0aWFsQ29udGVudCB7IHBhcnRpYWxSdW4ubmVlZHNIeXBoZW4sIG92ZXJmbG93TGVuZ3RoIH0g
fTsKKyAgICAgICAgcmV0dXJuIHsgcmVzdWx0LmlzRW5kT2ZMaW5lLCBjb21taXR0ZWRJbmxpbmVJ
dGVtQ291bnQsIExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVudCB7IHBhcnRpYWxSdW4ubmVlZHNI
eXBoZW4sIG92ZXJmbG93TGVuZ3RoIH0gfTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpObywgMCwgeyB9IH07
CiB9CiAKLXZvaWQgTGluZUxheW91dENvbnRleHQ6OmNvbW1pdENvbnRlbnQoTGluZUJ1aWxkZXIm
IGxpbmUsIGNvbnN0IExpbmVCcmVha2VyOjpSdW5MaXN0JiBydW5zLCBPcHRpb25hbDxMaW5lQnJl
YWtlcjo6QnJlYWtpbmdDb250ZXh0OjpQYXJ0aWFsVHJhaWxpbmdDb250ZW50PiBwYXJ0aWFsVHJh
aWxpbmdDb250ZW50KQordm9pZCBMaW5lTGF5b3V0Q29udGV4dDo6Y29tbWl0Q29udGVudChMaW5l
QnVpbGRlciYgbGluZSwgY29uc3QgTGluZUJyZWFrZXI6OlJ1bkxpc3QmIHJ1bnMsIE9wdGlvbmFs
PExpbmVCcmVha2VyOjpSZXN1bHQ6OlBhcnRpYWxUcmFpbGluZ0NvbnRlbnQ+IHBhcnRpYWxUcmFp
bGluZ0NvbnRlbnQpCiB7CiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHJ1bnMu
c2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGF1dG8mIHJ1biA9IHJ1bnNbaW5kZXhdOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91
dENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVM
YXlvdXRDb250ZXh0LmgKaW5kZXggMzg2Y2E0OTQyNzNmOGNhYTQ4MjJhODExZWUwMTMyNjY5N2Zm
ODNmNy4uM2FkZjNlMmVkZjE1M2I5YTM4MGYwMmZmZmI0MTJiYzk0ODMxMjI5MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5
b3V0Q29udGV4dC5oCkBAIC02MSw4ICs2MSw4IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBMaW5l
Q2FuZGlkYXRlQ29udGVudCBuZXh0Q29udGVudEZvckxpbmUodW5zaWduZWQgaW5saW5lSXRlbUlu
ZGV4LCBPcHRpb25hbDx1bnNpZ25lZD4gb3ZlcmZsb3dMZW5ndGgsIElubGluZUxheW91dFVuaXQg
Y3VycmVudExvZ2ljYWxSaWdodCk7CiAgICAgQ29tbWl0dGVkQ29udGVudCBhZGRGbG9hdEl0ZW1z
KExpbmVCdWlsZGVyJiwgY29uc3QgRmxvYXRMaXN0Jik7Ci0gICAgQ29tbWl0dGVkQ29udGVudCBw
bGFjZUlubGluZUNvbnRlbnRPbkN1cnJlbnRMaW5lKExpbmVCdWlsZGVyJiwgY29uc3QgTGluZUJy
ZWFrZXI6OlJ1bkxpc3QmKTsKLSAgICB2b2lkIGNvbW1pdENvbnRlbnQoTGluZUJ1aWxkZXImLCBj
b25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYsIE9wdGlvbmFsPExpbmVCcmVha2VyOjpCcmVha2lu
Z0NvbnRleHQ6OlBhcnRpYWxUcmFpbGluZ0NvbnRlbnQ+KTsKKyAgICBDb21taXR0ZWRDb250ZW50
IGNoZWNrRm9yTGluZVdyYXBBbmRDb21taXQoTGluZUJyZWFrZXImLCBMaW5lQnVpbGRlciYsIGNv
bnN0IExpbmVCcmVha2VyOjpSdW5MaXN0Jik7CisgICAgdm9pZCBjb21taXRDb250ZW50KExpbmVC
dWlsZGVyJiwgY29uc3QgTGluZUJyZWFrZXI6OlJ1bkxpc3QmLCBPcHRpb25hbDxMaW5lQnJlYWtl
cjo6UmVzdWx0OjpQYXJ0aWFsVHJhaWxpbmdDb250ZW50Pik7CiAgICAgTGluZUNvbnRlbnQgY2xv
c2UoTGluZUJ1aWxkZXImLCB1bnNpZ25lZCBsZWFkaW5nSW5saW5lSXRlbUluZGV4LCB1bnNpZ25l
ZCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIE9wdGlvbmFsPExpbmVDb250ZW50OjpQYXJ0aWFs
Q29udGVudD4pOwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRp
bmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>