<?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>167655</bug_id>
          
          <creation_ts>2017-01-31 11:26:15 -0800</creation_ts>
          <short_desc>Simple line layout: Collect fragments in LineState only when needed for post-processing.</short_desc>
          <delta_ts>2017-01-31 16:02:56 -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>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</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>1271803</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2017-01-31 11:26:15 -0800</bug_when>
    <thetext>Like text-align: justify.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271804</commentid>
    <comment_count>1</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2017-01-31 11:27:08 -0800</bug_when>
    <thetext>This is over 5% progression (measured locally) on PerformanceTests/Layout/simple-line-layout-non-repeating-text.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271805</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-01-31 11:27:39 -0800</bug_when>
    <thetext>&lt;rdar://problem/30290592&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271816</commentid>
    <comment_count>3</comment_count>
      <attachid>300243</attachid>
    <who name="alan">zalan</who>
    <bug_when>2017-01-31 11:51:09 -0800</bug_when>
    <thetext>Created attachment 300243
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271820</commentid>
    <comment_count>4</comment_count>
      <attachid>300243</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-01-31 11:58:42 -0800</bug_when>
    <thetext>Comment on attachment 300243
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=300243&amp;action=review

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:409
&gt; +    void setNeedsAllFragments(bool needsAllFragments) { m_needsAllFragments = needsAllFragments; }

This might be better without the argument as you never want to go to &apos;false&apos; direction.

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:555
&gt; +    bool m_needsAllFragments { false };
&gt;      Vector&lt;TextFragmentIterator::TextFragment, 30&gt; m_fragments;

Another option might be to combine these as

std::optional&lt;Vector&lt;TextFragmentIterator::TextFragment, 30&gt;&gt; m_allFragments

setNeedsAllFragments() would create the vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271861</commentid>
    <comment_count>5</comment_count>
      <attachid>300253</attachid>
    <who name="alan">zalan</who>
    <bug_when>2017-01-31 13:23:10 -0800</bug_when>
    <thetext>Created attachment 300253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271967</commentid>
    <comment_count>6</comment_count>
      <attachid>300253</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-31 16:02:50 -0800</bug_when>
    <thetext>Comment on attachment 300253
Patch

Clearing flags on attachment: 300253

Committed r211456: &lt;http://trac.webkit.org/changeset/211456&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271968</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-31 16:02:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300243</attachid>
            <date>2017-01-31 11:51:09 -0800</date>
            <delta_ts>2017-01-31 13:23:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167655-20170131114858.patch</filename>
            <type>text/plain</type>
            <size>18446</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExMzk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDVjY2RiNmFkMWUzNjg1
ZmQwYTQ3OWE0YWU4MzdiY2FhY2U0Yjc3OC4uMDk1OTcwYmY0OTg2YjczYzE3ODBkMmM1NzY5NWNk
ZjUxMmMxMmUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE3LTAxLTMxICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBDb2xsZWN0IGZyYWdtZW50cyBpbiBMaW5lU3RhdGUgb25seSB3aGVuIG5lZWRlZCBmb3IgcG9z
dC1wcm9jZXNzaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY3NjU1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDI5MDU5Mj4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZnJhZ21lbnRzIHdl
IG5lZWQgdG8ga2VlcCBhcm91bmQgZm9yIGJhc2ljIGxpbmUgYnJlYWtpbmcgYXJlIHRoZSBsYXN0
IGFuZCBsYXN0IG5vbi13aGl0ZXNwYWNlIGZyYWdtZW50cy4KKyAgICAgICAgSG93ZXZlciBpbiBj
ZXJ0YWluIGNhc2VzIHN1Y2ggYXMgdGV4dC1hbGlnbjoganVzdGlmeSwgd2UgaGF2ZSB0byB0cmF2
ZXJzZSB0aGUgZW50aXJlIGxpbmUKKyAgICAgICAgYXQgcG9zdC1wcm9jZXNzaW5nIHdoaWNoIHJl
cXVpcmVzIGFsbCB0aGUgZnJhZ21lbnRzIG9uIHRoZSBjdXJyZW50IGxpbmUuCisgICAgICAgIFRo
aXMgcGF0Y2ggc3BlZWRzIHVwIHRoZSBiYXNpYyBsaW5lIGhhbmRsaW5nIGJ5IHVzaW5nIG1fZnJh
Z21lbnQgbGlzdCBvbmx5IGZvciB0aGUgc3BlY2lhbCBjYXNlcy4KKyAgICAgICAgSXQgaW1wcm92
ZXMgUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvc2ltcGxlLWxpbmUtbGF5b3V0LW5vbi1yZXBlYXRp
bmctdGV4dC5odG1sIGJ5IH43JSAobG9jYWwgbWVhc3VyZW1lbnQpCisgICAgICAgIG1lZGlhbjog
MTE0LjI1IHJ1bnMvcyAtPiBtZWRpYW46IDEyMi4xNiBydW5zCisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6c2V0
TmVlZHNBbGxGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6
TGluZVN0YXRlOjpoYXNUcmFpbGluZ1doaXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlTGluZUxheW91dDo6TGluZVN0YXRlOjpsYXN0RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0YXRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6aXNFbXB0
eSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmVuZFBv
c2l0aW9uRm9yQ29sbGFwc2VkRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGlu
ZUxheW91dDo6TGluZVN0YXRlOjphcHBlbmRGcmFnbWVudEFuZENyZWF0ZVJ1bklmTmVlZGVkKTog
VHJhY2sgdW5jb21wbGV0ZWQgd2lkdGguCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5
b3V0OjpMaW5lU3RhdGU6OnJldmVydFRvTGFzdENvbXBsZXRlRnJhZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0YXRlOjpyZW1vdmVUcmFpbGluZ1doaXRl
c3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6cmVtb3ZlVHJhaWxp
bmdXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnVwZGF0
ZUxpbmVDb25zdHJhaW5zKTogU2V0IHRoZSBzbG93IHBhdGggZm9yIHRleHQtYWxpZ246IGp1c3Rp
ZnkuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjcmVhdGVMaW5lUnVucyk6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjbG9zZUxpbmVFbmRpbmdBbmRB
ZGp1c3RSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNyZWF0ZVRl
eHRSdW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVu
dEl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50Ojppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6Omxl
bmd0aCk6CisKIDIwMTctMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBEcm9wIGxlZ2FjeSBBdHRyaWJ1dGVzLmlzSWQgYXR0cmlidXRlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKaW5kZXggYTkzZDgzNWJlMzgy
Zjk2MDQ4YzZjOTg1MjUwNDIwNjE5ZmFjNmQwZi4uN2ZiYTQzNmUwOGZkZDE1YWU1ZjBhMGNmZThh
M2Q5MzIwODI4ODY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0LmNwcApAQCAtNDA2LDIzICs0MDYsMjAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q29s
bGFwZWRXaGl0ZXNwYWNlV2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9jb2xsYXBzZWRXaGl0ZXNwYWNl
V2lkdGggPSB3aWR0aDsgfQogICAgIHZvaWQgc2V0TG9naWNhbExlZnRPZmZzZXQoZmxvYXQgb2Zm
c2V0KSB7IG1fbG9naWNhbExlZnRPZmZzZXQgPSBvZmZzZXQ7IH0KICAgICB2b2lkIHNldE92ZXJm
bG93ZWRGcmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBm
cmFnbWVudCkgeyBtX292ZXJmbG93ZWRGcmFnbWVudCA9IGZyYWdtZW50OyB9CisgICAgdm9pZCBz
ZXROZWVkc0FsbEZyYWdtZW50cyhib29sIG5lZWRzQWxsRnJhZ21lbnRzKSB7IG1fbmVlZHNBbGxG
cmFnbWVudHMgPSBuZWVkc0FsbEZyYWdtZW50czsgfQogCiAgICAgZmxvYXQgYXZhaWxhYmxlV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2F2YWlsYWJsZVdpZHRoOyB9CiAgICAgZmxvYXQgbG9naWNh
bExlZnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxMZWZ0T2Zmc2V0OyB9CiAgICAg
Y29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgb3ZlcmZsb3dlZEZyYWdt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvd2VkRnJhZ21lbnQ7IH0KLSAgICBib29sIGhh
c1RyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNl
TGVuZ3RoOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZy
YWdtZW50PiBsYXN0RnJhZ21lbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1fZnJhZ21l
bnRzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2ZyYWdtZW50cy5sYXN0KCk7Ci0gICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQorICAgIGJvb2wgaGFzVHJhaWxpbmdXaGl0
ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2U7IH0KKyAgICBUZXh0RnJhZ21l
bnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGxhc3RGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGFzdEZyYWdtZW50OyB9CiAgICAgYm9vbCBpc1doaXRlc3BhY2VPbmx5KCkgY29uc3QgeyByZXR1
cm4gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCAmJiBtX3J1bnNXaWR0aCA9PSBtX3RyYWlsaW5n
V2hpdGVzcGFjZVdpZHRoOyB9CiAgICAgYm9vbCBmaXRzKGZsb2F0IGV4dHJhKSBjb25zdCB7IHJl
dHVybiBtX2F2YWlsYWJsZVdpZHRoID49IG1fcnVuc1dpZHRoICsgZXh0cmE7IH0KICAgICBib29s
IGZpcnN0Q2hhcmFjdGVyRml0cygpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGFyYWN0ZXJGaXRz
OyB9CiAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3J1bnNXaWR0aDsgfQogICAg
IHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCh1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKICAgICB7CisgICAgICAgIEFTU0VSVChtX25l
ZWRzQWxsRnJhZ21lbnRzKTsKICAgICAgICAgLy8gbGluZWJyZWFrIHJ1bnMgYXJlIHNwZWNpYWwu
CiAgICAgICAgIGlmIChmcm9tID09IHRvKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKDAsIGZhbHNlKTsKQEAgLTQ0NSwzNiArNDQyLDQ0IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAoIW1fZnJhZ21lbnRzLnNpemUoKSkK
KyAgICAgICAgaWYgKCFtX2xhc3RGcmFnbWVudC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgaWYgKCFtX2xhc3RDb21wbGV0ZUZyYWdtZW50LmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fZnJhZ21lbnRzLmxh
c3QoKS5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCk7CisgICAgICAgIHJldHVybiBtX2xhc3RGcmFn
bWVudC5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCk7CisgICAgfQorCisgICAgc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCBlbmRQb3NpdGlvbkZvckNvbGxhcHNlZEZyYWdtZW50KGNvbnN0IFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZyYWdtZW50LmlzQ29sbGFwc2VkKCkgPyBmcmFnbWVudC5zdGFydCgpICsgMSA6IGZyYWdt
ZW50LmVuZCgpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5J
Zk5lZWRlZChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVu
dCwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMpCiAgICAgewogICAgICAgICAvLyBBZGp1c3QgZW5k
IHBvc2l0aW9uIHdoaWxlIGNvbGxhcHNpbmcuCi0gICAgICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9u
ID0gZnJhZ21lbnQuaXNDb2xsYXBzZWQoKSA/IGZyYWdtZW50LnN0YXJ0KCkgKyAxIDogZnJhZ21l
bnQuZW5kKCk7CisgICAgICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gZW5kUG9zaXRpb25Gb3JD
b2xsYXBzZWRGcmFnbWVudChmcmFnbWVudCk7CiAgICAgICAgIC8vIE5ldyBsaW5lIG5lZWRzIG5l
dyBydW4uCi0gICAgICAgIGlmICghbV9ydW5zV2lkdGgpCisgICAgICAgIGlmICghbV9ydW5zV2lk
dGgpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV91bmNvbXBsZXRlZFdpZHRoKTsKICAgICAgICAg
ICAgIHJ1bnMuYXBwZW5kKFJ1bihmcmFnbWVudC5zdGFydCgpLCBlbmRQb3NpdGlvbiwgbV9ydW5z
V2lkdGgsIG1fcnVuc1dpZHRoICsgZnJhZ21lbnQud2lkdGgoKSwgZmFsc2UsIGZyYWdtZW50Lmhh
c0h5cGhlbigpKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byYgbGFzdEZyYWdt
ZW50ID0gbV9mcmFnbWVudHMubGFzdCgpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gQWR2YW5jZSBsYXN0IGNvbXBsZXRlZCBmcmFnbWVudCB3aGVuIHRoZSBwcmV2aW91cyBmcmFn
bWVudCBpcyBhbGwgc2V0IChpbmNsdWRpbmcgbXVsdGlwbGUgcGFydHMgYWNyb3NzIHJlbmRlcmVy
cykKLSAgICAgICAgICAgIGlmICgobGFzdEZyYWdtZW50LnR5cGUoKSAhPSBmcmFnbWVudC50eXBl
KCkpIHx8ICFsYXN0RnJhZ21lbnQub3ZlcmxhcHNUb05leHRSZW5kZXJlcigpKQotICAgICAgICAg
ICAgICAgIG1fbGFzdENvbXBsZXRlRnJhZ21lbnQgPSBsYXN0RnJhZ21lbnQ7CisgICAgICAgICAg
ICBpZiAoKG1fbGFzdEZyYWdtZW50LnR5cGUoKSAhPSBmcmFnbWVudC50eXBlKCkpIHx8ICFtX2xh
c3RGcmFnbWVudC5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICBt
X2xhc3RDb21wbGV0ZUZyYWdtZW50ID0gbV9sYXN0RnJhZ21lbnQ7CisgICAgICAgICAgICAgICAg
bV91bmNvbXBsZXRlZFdpZHRoID0gZnJhZ21lbnQud2lkdGgoKTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIG1fdW5jb21wbGV0ZWRXaWR0aCArPSBmcmFnbWVudC53aWR0aCgp
OwogICAgICAgICAgICAgLy8gQ29sbGFwc2UgbmVpZ2hib3VyaW5nIHdoaXRlc3BhY2UsIGlmIHRo
ZXkgYXJlIGFjcm9zcyBtdWx0aXBsZSByZW5kZXJlcnMgYW5kIGFyZSBub3QgY29sbGFwc2VkIHll
dC4KLSAgICAgICAgICAgIGlmIChsYXN0RnJhZ21lbnQuaXNDb2xsYXBzaWJsZSgpICYmIGZyYWdt
ZW50LmlzQ29sbGFwc2libGUoKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChsYXN0RnJhZ21l
bnQuaXNMYXN0SW5SZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWxhc3RGcmFnbWVu
dC5pc0NvbGxhcHNlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIExpbmUgd2lkdGggbmVl
ZHMgdG8gYmUgcmVzZXQgc28gdGhhdCBub3cgaXQgdGFrZXMgY29sbGFwc2luZyBpbnRvIGNvbnNp
ZGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIG1fcnVuc1dpZHRoIC09IChsYXN0RnJhZ21l
bnQud2lkdGgoKSAtIG1fY29sbGFwc2VkV2hpdGVzcGFjZVdpZHRoKTsKKyAgICAgICAgICAgIGlm
IChtX2xhc3RGcmFnbWVudC5pc0NvbGxhcHNpYmxlKCkgJiYgZnJhZ21lbnQuaXNDb2xsYXBzaWJs
ZSgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fbGFzdEZyYWdtZW50LmlzTGFzdEluUmVu
ZGVyZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFtX2xhc3RGcmFnbWVudC5pc0NvbGxhcHNl
ZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIExpbmUgd2lkdGggbmVlZHMgdG8gYmUgYWRq
dXN0ZWQgc28gdGhhdCBub3cgaXQgdGFrZXMgY29sbGFwc2luZyBpbnRvIGNvbnNpZGVyYXRpb24u
CisgICAgICAgICAgICAgICAgICAgIG1fcnVuc1dpZHRoIC09IChtX2xhc3RGcmFnbWVudC53aWR0
aCgpIC0gbV9jb2xsYXBzZWRXaGl0ZXNwYWNlV2lkdGgpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGlzIGNvbGxhcHNlZCBjb21wbGV0ZWx5LiBO
byBydW4gaXMgbmVlZGVkLgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChsYXN0RnJhZ21lbnQuaXNMYXN0SW5SZW5kZXJlcigpIHx8IGxhc3RG
cmFnbWVudC5pc0NvbGxhcHNlZCgpKQorICAgICAgICAgICAgaWYgKG1fbGFzdEZyYWdtZW50Lmlz
TGFzdEluUmVuZGVyZXIoKSB8fCBtX2xhc3RGcmFnbWVudC5pc0NvbGxhcHNlZCgpKQogICAgICAg
ICAgICAgICAgIHJ1bnMuYXBwZW5kKFJ1bihmcmFnbWVudC5zdGFydCgpLCBlbmRQb3NpdGlvbiwg
bV9ydW5zV2lkdGgsIG1fcnVuc1dpZHRoICsgZnJhZ21lbnQud2lkdGgoKSwgZmFsc2UsIGZyYWdt
ZW50Lmhhc0h5cGhlbigpKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBS
dW4mIGxhc3RSdW4gPSBydW5zLmxhc3QoKTsKQEAgLTQ4NCwxNSArNDg5LDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBsYXN0UnVuLmhhc0h5cGhlbiA9IGZyYWdtZW50Lmhhc0h5cGhlbigp
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG1fZnJhZ21lbnRzLmFwcGVuZChm
cmFnbWVudCk7CiAgICAgICAgIG1fcnVuc1dpZHRoICs9IGZyYWdtZW50LndpZHRoKCk7CisgICAg
ICAgIG1fbGFzdEZyYWdtZW50ID0gZnJhZ21lbnQ7CisgICAgICAgIGlmIChtX25lZWRzQWxsRnJh
Z21lbnRzKQorICAgICAgICAgICAgbV9mcmFnbWVudHMuYXBwZW5kKGZyYWdtZW50KTsKIAotICAg
ICAgICBpZiAoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQ6OldoaXRlc3BhY2UpIHsKLSAgICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVu
Z3RoICs9IGVuZFBvc2l0aW9uIC0gZnJhZ21lbnQuc3RhcnQoKTsKKyAgICAgICAgaWYgKGZyYWdt
ZW50LnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNw
YWNlKQogICAgICAgICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCArPSBmcmFnbWVudC53
aWR0aCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV90cmFpbGluZ1doaXRlc3Bh
Y2VMZW5ndGggPSAwOworICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fdHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGggPSAwOworICAgICAgICAgICAgbV9sYXN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50
ID0gZnJhZ21lbnQ7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1fZmlyc3RDaGFyYWN0ZXJG
aXRzKQpAQCAtNTAxLDQ2ICs1MDcsMjggQEAgcHVibGljOgogCiAgICAgVGV4dEZyYWdtZW50SXRl
cmF0b3I6OlRleHRGcmFnbWVudCByZXZlcnRUb0xhc3RDb21wbGV0ZUZyYWdtZW50KExheW91dDo6
UnVuVmVjdG9yJiBydW5zKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZnJhZ21lbnRzLnNpemUo
KSk7Ci0gICAgICAgIHVuc2lnbmVkIHJldmVydExlbmd0aCA9IDA7Ci0gICAgICAgIGZsb2F0IHJl
dmVydFdpZHRoID0gMDsKLSAgICAgICAgd2hpbGUgKG1fZnJhZ21lbnRzLnNpemUoKSkgewotICAg
ICAgICAgICAgY29uc3QgYXV0byYgY3VycmVudCA9IG1fZnJhZ21lbnRzLmxhc3QoKTsKLSAgICAg
ICAgICAgIGlmIChjdXJyZW50ID09IG1fbGFzdENvbXBsZXRlRnJhZ21lbnQpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICByZXZlcnRMZW5ndGggKz0gY3VycmVudC5lbmQoKSAt
IGN1cnJlbnQuc3RhcnQoKTsKLSAgICAgICAgICAgIHJldmVydFdpZHRoICs9IGN1cnJlbnQud2lk
dGgoKTsKLSAgICAgICAgICAgIG1fZnJhZ21lbnRzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgaWYg
KCFtX3VuY29tcGxldGVkV2lkdGgpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2xhc3RGcmFnbWVu
dCA9PSBtX2xhc3RDb21wbGV0ZUZyYWdtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBtX2xhc3RG
cmFnbWVudDsKICAgICAgICAgfQotICAgICAgICBtX3J1bnNXaWR0aCAtPSByZXZlcnRXaWR0aDsK
LSAgICAgICAgaWYgKHJldmVydExlbmd0aCkKLSAgICAgICAgICAgIHJldmVydFJ1bnMocnVucywg
cmV2ZXJ0TGVuZ3RoLCByZXZlcnRXaWR0aCk7CisgICAgICAgIEFTU0VSVChtX2xhc3RGcmFnbWVu
dC5pc1ZhbGlkKCkpOworICAgICAgICBtX3J1bnNXaWR0aCAtPSBtX3VuY29tcGxldGVkV2lkdGg7
CisgICAgICAgIHJldmVydFJ1bnMocnVucywgZW5kUG9zaXRpb25Gb3JDb2xsYXBzZWRGcmFnbWVu
dChtX2xhc3RGcmFnbWVudCkgLSBlbmRQb3NpdGlvbkZvckNvbGxhcHNlZEZyYWdtZW50KG1fbGFz
dENvbXBsZXRlRnJhZ21lbnQpLCBtX3VuY29tcGxldGVkV2lkdGgpOworICAgICAgICBtX3VuY29t
cGxldGVkV2lkdGggPSAwOworICAgICAgICBBU1NFUlQobV9sYXN0Q29tcGxldGVGcmFnbWVudC5p
c1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gbV9sYXN0Q29tcGxldGVGcmFnbWVudDsKICAgICB9
CiAKICAgICB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShMYXlvdXQ6OlJ1blZlY3RvciYg
cnVucykKICAgICB7Ci0gICAgICAgIGlmICghbV90cmFpbGluZ1doaXRlc3BhY2VMZW5ndGgpCisg
ICAgICAgIGlmIChtX2xhc3RGcmFnbWVudC50eXBlKCkgIT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6
OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
cmV2ZXJ0UnVucyhydW5zLCBtX3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCwgbV90cmFpbGluZ1do
aXRlc3BhY2VXaWR0aCk7CisgICAgICAgIEFTU0VSVChtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRo
KTsKKyAgICAgICAgQVNTRVJUKG1fbGFzdEZyYWdtZW50LmVuZCgpICE9IG1fbGFzdE5vbldoaXRl
c3BhY2VGcmFnbWVudC5lbmQoKSk7CisgICAgICAgIHVuc2lnbmVkIHRyYWlsaW5nV2hpdGVzcGFj
ZUxlbmd0aCA9IGVuZFBvc2l0aW9uRm9yQ29sbGFwc2VkRnJhZ21lbnQobV9sYXN0RnJhZ21lbnQp
IC0gbV9sYXN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50LmVuZCgpOworICAgICAgICByZXZlcnRSdW5z
KHJ1bnMsIHRyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCwgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0
aCk7CiAgICAgICAgIG1fcnVuc1dpZHRoIC09IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7Ci0g
ICAgICAgIEFTU0VSVChtX2ZyYWdtZW50cy5sYXN0KCkudHlwZSgpID09IFRleHRGcmFnbWVudEl0
ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpOwotICAgICAgICB3aGlsZSAobV9mcmFn
bWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBjdXJyZW50ID0gbV9mcmFn
bWVudHMubGFzdCgpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnQudHlwZSgpICE9IFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICAgICAgbV90cmFpbGluZ1doaXRl
c3BhY2VMZW5ndGggLT0gKGN1cnJlbnQuaXNDb2xsYXBzZWQoKSA/IDEgOiBjdXJyZW50LmVuZCgp
IC0gY3VycmVudC5zdGFydCgpKTsKLSAgICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lk
dGggLT0gY3VycmVudC53aWR0aCgpOwotI2VuZGlmCi0gICAgICAgICAgICBtX2ZyYWdtZW50cy5y
ZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIEFT
U0VSVCghbV90cmFpbGluZ1doaXRlc3BhY2VMZW5ndGgpOwotICAgICAgICBBU1NFUlQoIW1fdHJh
aWxpbmdXaGl0ZXNwYWNlV2lkdGgpOwotI2VuZGlmCi0gICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNw
YWNlTGVuZ3RoID0gMDsKLSAgICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCA9IDA7Cisg
ICAgICAgIG1fbGFzdEZyYWdtZW50ID0gbV9sYXN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50OwogICAg
IH0KIAogcHJpdmF0ZToKQEAgLTU1MiwxNiArNTQwLDE4IEBAIHByaXZhdGU6CiAKICAgICBmbG9h
dCBtX2F2YWlsYWJsZVdpZHRoIHsgMCB9OwogICAgIGZsb2F0IG1fbG9naWNhbExlZnRPZmZzZXQg
eyAwIH07Ci0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBtX292ZXJmbG93
ZWRGcmFnbWVudDsKICAgICBmbG9hdCBtX3J1bnNXaWR0aCB7IDAgfTsKKyAgICBUZXh0RnJhZ21l
bnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IG1fb3ZlcmZsb3dlZEZyYWdtZW50OworICAgIFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgbV9sYXN0RnJhZ21lbnQ7CisgICAgVGV4dEZy
YWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBtX2xhc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQ7
CiAgICAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBtX2xhc3RDb21wbGV0ZUZy
YWdtZW50OworICAgIGZsb2F0IG1fdW5jb21wbGV0ZWRXaWR0aCB7IDAgfTsKICAgICBmbG9hdCBt
X3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9OyAvLyBVc2UgdGhpcyB0byByZW1vdmUgdHJh
aWxpbmcgd2hpdGVzcGFjZSB3aXRob3V0IHJlLW1lc3VyaW5nIHRoZSB0ZXh0LgotICAgIHVuc2ln
bmVkIG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoIHsgMCB9OwogICAgIGZsb2F0IG1fY29sbGFw
c2VkV2hpdGVzcGFjZVdpZHRoIHsgMCB9OwogICAgIC8vIEhhdmluZyBvbmUgY2hhcmFjdGVyIG9u
IHRoZSBsaW5lIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gaXQgYWN0dWFsbHkgZml0cy4KICAg
ICAvLyBGaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpcnN0IGZyYWdtZW50IG1pZ2h0IGJlIGZvcmNl
ZCBvbiB0byB0aGUgY3VycmVudCBsaW5lIGV2ZW4gaWYgaXQgZG9lcyBub3QgZml0LgogICAgIGJv
b2wgbV9maXJzdENoYXJhY3RlckZpdHMgeyBmYWxzZSB9OwotICAgIC8vIEZJWE1FOiBXZSBkb24n
dCBhY3R1YWxseSBuZWVkIHRoaXMgZm9yIGFsbCB0aGUgc2ltcGxlIGNhc2VzLiBUcnkgdG8gcmVt
b3ZlL21ha2UgaXQgb3B0aW9uYWwuCisgICAgYm9vbCBtX25lZWRzQWxsRnJhZ21lbnRzIHsgZmFs
c2UgfTsKICAgICBWZWN0b3I8VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCwgMzA+
IG1fZnJhZ21lbnRzOwogfTsKIApAQCAtNTk4LDIwICs1ODgsMTggQEAgc3RhdGljIHZvaWQgcmVt
b3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKExpbmVTdGF0ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZl
Y3RvciYgcnUKIHsKICAgICBpZiAoIWxpbmVTdGF0ZS5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkK
ICAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUmVtb3ZlIGNvbGxhcHNlZCB3aGl0ZXNwYWNlLCBv
ciBub24tY29sbGFwc2VkIHByZS13cmFwIHdoaXRlc3BhY2UsIHVubGVzcyBpdCdzIHRoZSBvbmx5
IGNvbnRlbnQgb24gdGhlIGxpbmUgLXNvIHJlbW92aW5nIHRoZSB3aGl0ZXNhcGNlIHdvdWxkIHBy
b2R1Y2UgYW4gZW1wdHkgbGluZS4KKyAgICAvLyBSZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2Us
IG9yIG5vbi1jb2xsYXBzZWQgcHJlLXdyYXAgd2hpdGVzcGFjZSwgdW5sZXNzIGl0J3MgdGhlIG9u
bHkgY29udGVudCBvbiB0aGUgbGluZSAtc28gcmVtb3ZpbmcgdGhlIHdoaXRlc2FwY2UKKyAgICAv
LyB3b3VsZCBwcm9kdWNlIGFuIGVtcHR5IGxpbmUuCiAgICAgY29uc3QgYXV0byYgc3R5bGUgPSB0
ZXh0RnJhZ21lbnRJdGVyYXRvci5zdHlsZSgpOwogICAgIGJvb2wgY29sbGFwc2VXaGl0ZXNwYWNl
ID0gc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlIHwgcHJlV3JhcChzdHlsZSk7CiAgICAgaWYgKCFj
b2xsYXBzZVdoaXRlc3BhY2UpCiAgICAgICAgIHJldHVybjsKLQogICAgIGlmIChwcmVXcmFwKHN0
eWxlKSAmJiBsaW5lU3RhdGUuaXNXaGl0ZXNwYWNlT25seSgpKQogICAgICAgICByZXR1cm47Ci0K
ICAgICBsaW5lU3RhdGUucmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKHJ1bnMpOwogfQogCi1zdGF0
aWMgdm9pZCB1cGRhdGVMaW5lQ29uc3RyYWlucyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cs
IExpbmVTdGF0ZSYgbGluZSwgYm9vbCBpc0ZpcnN0TGluZSkKK3N0YXRpYyB2b2lkIHVwZGF0ZUxp
bmVDb25zdHJhaW5zKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgTGluZVN0YXRlJiBsaW5l
LCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6U3R5bGUmIHN0eWxlLCBib29sIGlzRmlyc3RM
aW5lKQogewogICAgIGJvb2wgc2hvdWxkQXBwbHlUZXh0SW5kZW50ID0gIWZsb3cuaXNBbm9ueW1v
dXMoKSB8fCBmbG93LnBhcmVudCgpLT5maXJzdENoaWxkKCkgPT0gJmZsb3c7CiAgICAgTGF5b3V0
VW5pdCBoZWlnaHQgPSBmbG93LmxvZ2ljYWxIZWlnaHQoKTsKQEAgLTYyMCw2ICs2MDgsNyBAQCBz
dGF0aWMgdm9pZCB1cGRhdGVMaW5lQ29uc3RyYWlucyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZs
b3csIExpbmVTdGF0ZSYgbGluZSwgYgogICAgIGxpbmUuc2V0TG9naWNhbExlZnRPZmZzZXQoZmxv
dy5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoaGVpZ2h0LCBEb05vdEluZGVudFRleHQsIGxvZ2lj
YWxIZWlnaHQpICsKICAgICAgICAgKHNob3VsZEFwcGx5VGV4dEluZGVudCAmJiBpc0ZpcnN0TGlu
ZSA/IGZsb3cudGV4dEluZGVudE9mZnNldCgpIDogTGF5b3V0VW5pdCgwKSkpOwogICAgIGxpbmUu
c2V0QXZhaWxhYmxlV2lkdGgoc3RkOjptYXg8ZmxvYXQ+KDAsIGxvZ2ljYWxSaWdodE9mZnNldCAt
IGxpbmUubG9naWNhbExlZnRPZmZzZXQoKSkpOworICAgIGxpbmUuc2V0TmVlZHNBbGxGcmFnbWVu
dHMoc3R5bGUudGV4dEFsaWduID09IEpVU1RJRlkpOwogfQogCiBzdGF0aWMgc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gaHlwaGVuUG9zaXRpb25Gb3JGcmFnbWVudCh1bnNpZ25lZCBzcGxpdFBvc2l0
aW9uLCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudFRvU3BsaXQs
CkBAIC03OTIsMTEgKzc4MSwxMCBAQCBzdGF0aWMgYm9vbCBjcmVhdGVMaW5lUnVucyhMaW5lU3Rh
dGUmIGxpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lLCBMYXlvdQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gTm9uLWJyZWFrYWJs
ZSBub24td2hpdGVzcGFjZSBmcmFnbWVudCB3aGVuIHRoZXJlJ3MgYWxyZWFkeSBjb250ZW50IG9u
IHRoZSBsaW5lLiBQdXNoIGl0IHRvIHRoZSBuZXh0IGxpbmUuCi0gICAgICAgICAgICBBU1NFUlQo
bGluZS5sYXN0RnJhZ21lbnQoKSk7Ci0gICAgICAgICAgICBpZiAobGluZS5sYXN0RnJhZ21lbnQo
KS52YWx1ZSgpLm92ZXJsYXBzVG9OZXh0UmVuZGVyZXIoKSkgeworICAgICAgICAgICAgQVNTRVJU
KGxpbmUubGFzdEZyYWdtZW50KCkuaXNWYWxpZCgpKTsKKyAgICAgICAgICAgIGlmIChsaW5lLmxh
c3RGcmFnbWVudCgpLm92ZXJsYXBzVG9OZXh0UmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAg
IC8vIENoZWNrIGlmIHRoaXMgZnJhZ21lbnQgaXMgYSBjb250aW51YXRpb24gb2YgYSBwcmV2aW91
cyBzZWdtZW50LiBJbiBzdWNoIGNhc2VzLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGVtIGFsbC4KLSAg
ICAgICAgICAgICAgICBjb25zdCBhdXRvJiBsYXN0Q29tcGxldGVGcmFnbWVudCA9IGxpbmUucmV2
ZXJ0VG9MYXN0Q29tcGxldGVGcmFnbWVudChydW5zKTsKLSAgICAgICAgICAgICAgICB0ZXh0RnJh
Z21lbnRJdGVyYXRvci5yZXZlcnRUb0VuZE9mRnJhZ21lbnQobGFzdENvbXBsZXRlRnJhZ21lbnQp
OworICAgICAgICAgICAgICAgIHRleHRGcmFnbWVudEl0ZXJhdG9yLnJldmVydFRvRW5kT2ZGcmFn
bWVudChsaW5lLnJldmVydFRvTGFzdENvbXBsZXRlRnJhZ21lbnQocnVucykpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGluZS5zZXRPdmVyZmxv
d2VkRnJhZ21lbnQoZnJhZ21lbnQpOwpAQCAtODc0LDcgKzg2Miw3IEBAIHN0YXRpYyB2b2lkIGNs
b3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6OlJ1blZl
Y3RvciYgcnVuCiAgICAgY29uc3QgYXV0byYgc3R5bGUgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5z
dHlsZSgpOwogICAgIGF1dG8gZmlyc3RSdW5JbmRleCA9IGxhc3RSdW5JbmRleE9mUHJldmlvdXNM
aW5lID8gbGFzdFJ1bkluZGV4T2ZQcmV2aW91c0xpbmUudmFsdWUoKSArIDEgOiAwOwogICAgIGF1
dG8gbGluZUxvZ2ljYWxMZWZ0ID0gbGluZS5sb2dpY2FsTGVmdE9mZnNldCgpOwotICAgIGF1dG8g
dGV4dEFsaWduID0gdGV4dEFsaWduRm9yTGluZShzdHlsZSwgbGFzdExpbmVJbkZsb3cgfHwgKGxp
bmUubGFzdEZyYWdtZW50KCkgJiYgbGluZS5sYXN0RnJhZ21lbnQoKS52YWx1ZSgpLnR5cGUoKSA9
PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpIYXJkTGluZUJyZWFrKSk7Cisg
ICAgYXV0byB0ZXh0QWxpZ24gPSB0ZXh0QWxpZ25Gb3JMaW5lKHN0eWxlLCBsYXN0TGluZUluRmxv
dyB8fCAobGluZS5sYXN0RnJhZ21lbnQoKS5pc1ZhbGlkKCkgJiYgbGluZS5sYXN0RnJhZ21lbnQo
KS50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6SGFyZExpbmVC
cmVhaykpOwogICAgIGlmICh0ZXh0QWxpZ24gPT0gSlVTVElGWSkKICAgICAgICAganVzdGlmeVJ1
bnMobGluZSwgcnVucywgZmlyc3RSdW5JbmRleCk7CiAgICAgZWxzZQpAQCAtODk5LDcgKzg4Nyw3
IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZVRleHRSdW5zKExheW91dDo6UnVuVmVjdG9yJiBydW5zLCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3csIHVuc2lnCiAgICAgICAgIGZsb3cuc2V0TG9naWNhbEhlaWdo
dChsaW5lSGVpZ2h0ICogbGluZUNvdW50ICsgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSk7CiAgICAg
ICAgIExpbmVTdGF0ZSBwcmV2aW91c0xpbmUgPSBsaW5lOwogICAgICAgICBsaW5lID0gTGluZVN0
YXRlKCk7Ci0gICAgICAgIHVwZGF0ZUxpbmVDb25zdHJhaW5zKGZsb3csIGxpbmUsICFsaW5lQ291
bnQpOworICAgICAgICB1cGRhdGVMaW5lQ29uc3RyYWlucyhmbG93LCBsaW5lLCB0ZXh0RnJhZ21l
bnRJdGVyYXRvci5zdHlsZSgpLCAhbGluZUNvdW50KTsKICAgICAgICAgaXNFbmRPZkNvbnRlbnQg
PSBjcmVhdGVMaW5lUnVucyhsaW5lLCBwcmV2aW91c0xpbmUsIHJ1bnMsIHRleHRGcmFnbWVudEl0
ZXJhdG9yKTsKICAgICAgICAgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhsaW5lLCBydW5z
LCBsYXN0UnVuSW5kZXhPZlByZXZpb3VzTGluZSwgbGluZUNvdW50LCB0ZXh0RnJhZ21lbnRJdGVy
YXRvciwgaXNFbmRPZkNvbnRlbnQpOwogICAgICAgICBpZiAocnVucy5zaXplKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVu
dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRl
eHRGcmFnbWVudEl0ZXJhdG9yLmgKaW5kZXggN2E0MWVlZTQ3ZWI5YWU3YjJjNTE0ZDkyNzFkNzFi
ZTUwMGY2OWE0OC4uMDUzM2EzMjhiNjE2NDFhYWVmMjcxMWY4YmFhNDhiMDc1MTA2M2ZkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJh
Z21lbnRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAg
ICAgVGV4dEZyYWdtZW50SXRlcmF0b3IoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7CiAgICAgY2xh
c3MgVGV4dEZyYWdtZW50IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gVHlwZSB7IENvbnRl
bnRFbmQsIFNvZnRMaW5lQnJlYWssIEhhcmRMaW5lQnJlYWssIFdoaXRlc3BhY2UsIE5vbldoaXRl
c3BhY2UgfTsKKyAgICAgICAgZW51bSBUeXBlIHsgSW52YWxpZCwgQ29udGVudEVuZCwgU29mdExp
bmVCcmVhaywgSGFyZExpbmVCcmVhaywgV2hpdGVzcGFjZSwgTm9uV2hpdGVzcGFjZSB9OwogICAg
ICAgICBUZXh0RnJhZ21lbnQoKSA9IGRlZmF1bHQ7CiAgICAgICAgIFRleHRGcmFnbWVudCh1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9hdCB3aWR0aCwgVHlwZSB0eXBlLCBib29sIGlz
TGFzdEluUmVuZGVyZXIgPSBmYWxzZSwgYm9vbCBvdmVybGFwc1RvTmV4dFJlbmRlcmVyID0gZmFs
c2UsIGJvb2wgaXNDb2xsYXBzZWQgPSBmYWxzZSwgYm9vbCBpc0NvbGxhcHNpYmxlID0gZmFsc2Up
CiAgICAgICAgICAgICA6IG1fc3RhcnQoc3RhcnQpCkBAIC01NSw4ICs1NSwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydDsgfQogICAgICAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJl
dHVybiBtX2VuZDsgfQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IEFTU0VSVCht
X2VuZCA+PSBtX3N0YXJ0KTsgcmV0dXJuIG1fZW5kIC0gbV9zdGFydDsgfQogICAgICAgICBmbG9h
dCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KICAgICAgICAgVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgICAgIGJvb2wgb3ZlcmxhcHNUb05leHRSZW5k
ZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmxhcHNUb05leHRSZW5kZXJlcjsgfQpAQCAtODcs
NyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIG1fc3RhcnQgeyAwIH07CiAgICAg
ICAgIHVuc2lnbmVkIG1fZW5kIHsgMCB9OwogICAgICAgICBmbG9hdCBtX3dpZHRoIHsgMCB9Owot
ICAgICAgICBUeXBlIG1fdHlwZSB7IE5vbldoaXRlc3BhY2UgfTsKKyAgICAgICAgVHlwZSBtX3R5
cGUgeyBJbnZhbGlkIH07CiAgICAgICAgIGJvb2wgbV9pc0xhc3RJblJlbmRlcmVyIHsgZmFsc2Ug
fTsKICAgICAgICAgYm9vbCBtX292ZXJsYXBzVG9OZXh0UmVuZGVyZXIgeyBmYWxzZSB9OwogICAg
ICAgICBib29sIG1faXNDb2xsYXBzZWQgeyBmYWxzZSB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300253</attachid>
            <date>2017-01-31 13:23:10 -0800</date>
            <delta_ts>2017-01-31 16:02:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167655-20170131132059.patch</filename>
            <type>text/plain</type>
            <size>18954</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExMzk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDVjY2RiNmFkMWUzNjg1
ZmQwYTQ3OWE0YWU4MzdiY2FhY2U0Yjc3OC4uNzA4Yzg0Zjg0NzI5NGQ4MmIxYTQzNzQ5Njg0NjZi
MDI1N2ZhOTY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE3LTAxLTMxICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBDb2xsZWN0IGZyYWdtZW50cyBpbiBMaW5lU3RhdGUgb25seSB3aGVuIG5lZWRlZCBmb3IgcG9z
dC1wcm9jZXNzaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY3NjU1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDI5MDU5Mj4KKworICAgICAg
ICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBUaGUgZnJhZ21lbnRzIHdl
IG5lZWQgdG8ga2VlcCBhcm91bmQgZm9yIGJhc2ljIGxpbmUgYnJlYWtpbmcgYXJlIHRoZSBsYXN0
IGFuZCBsYXN0IG5vbi13aGl0ZXNwYWNlIGZyYWdtZW50cy4KKyAgICAgICAgSG93ZXZlciBpbiBj
ZXJ0YWluIGNhc2VzIHN1Y2ggYXMgdGV4dC1hbGlnbjoganVzdGlmeSwgd2UgaGF2ZSB0byB0cmF2
ZXJzZSB0aGUgZW50aXJlIGxpbmUKKyAgICAgICAgYXQgcG9zdC1wcm9jZXNzaW5nIHdoaWNoIHJl
cXVpcmVzIGFsbCB0aGUgZnJhZ21lbnRzIG9uIHRoZSBjdXJyZW50IGxpbmUuCisgICAgICAgIFRo
aXMgcGF0Y2ggc3BlZWRzIHVwIHRoZSBiYXNpYyBsaW5lIGhhbmRsaW5nIGJ5IHVzaW5nIG1fZnJh
Z21lbnQgbGlzdCBvbmx5IGZvciB0aGUgc3BlY2lhbCBjYXNlcy4KKyAgICAgICAgSXQgaW1wcm92
ZXMgUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvc2ltcGxlLWxpbmUtbGF5b3V0LW5vbi1yZXBlYXRp
bmctdGV4dC5odG1sIGJ5IH43JSAobG9jYWwgbWVhc3VyZW1lbnQpCisgICAgICAgIG1lZGlhbjog
MTE0LjI1IHJ1bnMvcyAtPiBtZWRpYW46IDEyMi4xNiBydW5zCisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6c2V0
TmVlZHNBbGxGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6
TGluZVN0YXRlOjpoYXNUcmFpbGluZ1doaXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlTGluZUxheW91dDo6TGluZVN0YXRlOjpsYXN0RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0YXRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6aXNFbXB0
eSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmVuZFBv
c2l0aW9uRm9yQ29sbGFwc2VkRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGlu
ZUxheW91dDo6TGluZVN0YXRlOjphcHBlbmRGcmFnbWVudEFuZENyZWF0ZVJ1bklmTmVlZGVkKTog
VHJhY2sgdW5jb21wbGV0ZWQgd2lkdGguCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5
b3V0OjpMaW5lU3RhdGU6OnJldmVydFRvTGFzdENvbXBsZXRlRnJhZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0YXRlOjpyZW1vdmVUcmFpbGluZ1doaXRl
c3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6cmVtb3ZlVHJhaWxp
bmdXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnVwZGF0
ZUxpbmVDb25zdHJhaW5zKTogU2V0IHRoZSBzbG93IHBhdGggZm9yIHRleHQtYWxpZ246IGp1c3Rp
ZnkuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjcmVhdGVMaW5lUnVucyk6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjbG9zZUxpbmVFbmRpbmdBbmRB
ZGp1c3RSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNyZWF0ZVRl
eHRSdW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVu
dEl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50Ojppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6Omxl
bmd0aCk6CisKIDIwMTctMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBEcm9wIGxlZ2FjeSBBdHRyaWJ1dGVzLmlzSWQgYXR0cmlidXRlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKaW5kZXggYTkzZDgzNWJlMzgy
Zjk2MDQ4YzZjOTg1MjUwNDIwNjE5ZmFjNmQwZi4uOTlmMTI3MTgzMzM2NDk3NWVhYzUzMjNiOTcz
ZDc2Y2M5ZWVlYTI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0LmNwcApAQCAtNDA2LDI5ICs0MDYsMzAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q29s
bGFwZWRXaGl0ZXNwYWNlV2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9jb2xsYXBzZWRXaGl0ZXNwYWNl
V2lkdGggPSB3aWR0aDsgfQogICAgIHZvaWQgc2V0TG9naWNhbExlZnRPZmZzZXQoZmxvYXQgb2Zm
c2V0KSB7IG1fbG9naWNhbExlZnRPZmZzZXQgPSBvZmZzZXQ7IH0KICAgICB2b2lkIHNldE92ZXJm
bG93ZWRGcmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBm
cmFnbWVudCkgeyBtX292ZXJmbG93ZWRGcmFnbWVudCA9IGZyYWdtZW50OyB9CisgICAgdm9pZCBz
ZXROZWVkc0FsbEZyYWdtZW50cygpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fZnJhZ21lbnRz
KTsKKyAgICAgICAgbV9mcmFnbWVudHMuZW1wbGFjZSgpOworICAgIH0KIAogICAgIGZsb2F0IGF2
YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9hdmFpbGFibGVXaWR0aDsgfQogICAgIGZs
b2F0IGxvZ2ljYWxMZWZ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsTGVmdE9mZnNl
dDsgfQogICAgIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIG92ZXJm
bG93ZWRGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3dlZEZyYWdtZW50OyB9Ci0g
ICAgYm9vbCBoYXNUcmFpbGluZ1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5n
V2hpdGVzcGFjZUxlbmd0aDsgfQotICAgIHN0ZDo6b3B0aW9uYWw8VGV4dEZyYWdtZW50SXRlcmF0
b3I6OlRleHRGcmFnbWVudD4gbGFzdEZyYWdtZW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
IChtX2ZyYWdtZW50cy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9mcmFnbWVudHMubGFz
dCgpOwotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KKyAgICBib29sIGhhc1Ry
YWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEZyYWdtZW50LnR5cGUoKSA9
PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlOyB9CisgICAg
VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBsYXN0RnJhZ21lbnQoKSBjb25zdCB7
IHJldHVybiBtX2xhc3RGcmFnbWVudDsgfQogICAgIGJvb2wgaXNXaGl0ZXNwYWNlT25seSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggJiYgbV9ydW5zV2lkdGggPT0g
bV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsgfQogICAgIGJvb2wgZml0cyhmbG9hdCBleHRyYSkg
Y29uc3QgeyByZXR1cm4gbV9hdmFpbGFibGVXaWR0aCA+PSBtX3J1bnNXaWR0aCArIGV4dHJhOyB9
CiAgICAgYm9vbCBmaXJzdENoYXJhY3RlckZpdHMoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hh
cmFjdGVyRml0czsgfQogICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9ydW5zV2lk
dGg7IH0KICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiAgICAgeworICAgICAgICBB
U1NFUlQobV9mcmFnbWVudHMpOwogICAgICAgICAvLyBsaW5lYnJlYWsgcnVucyBhcmUgc3BlY2lh
bC4KICAgICAgICAgaWYgKGZyb20gPT0gdG8pCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIoMCwgZmFsc2UpOwogICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50ID0gMDsKICAgICAgICAgYXV0byBwcmV2aW91c0ZyYWdtZW50VHlwZSA9IFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQ7Ci0gICAgICAgIGZvciAoY29uc3Qg
YXV0byYgZnJhZ21lbnQgOiBtX2ZyYWdtZW50cykgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IGZyYWdtZW50IDogKm1fZnJhZ21lbnRzKSB7CiAgICAgICAgICAgICBpZiAoZnJhZ21lbnQuZW5k
KCkgPD0gZnJvbSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGF1dG8g
Y3VycmVudEZyYWdtZW50VHlwZSA9IGZyYWdtZW50LnR5cGUoKTsKQEAgLTQ0NSwzNiArNDQ2LDQ0
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CiAgICAgewotICAgICAgICBp
ZiAoIW1fZnJhZ21lbnRzLnNpemUoKSkKKyAgICAgICAgaWYgKCFtX2xhc3RGcmFnbWVudC5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKCFtX2xhc3RDb21w
bGV0ZUZyYWdtZW50LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuIG1fZnJhZ21lbnRzLmxhc3QoKS5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCk7Cisg
ICAgICAgIHJldHVybiBtX2xhc3RGcmFnbWVudC5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCk7Cisg
ICAgfQorCisgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBlbmRQb3NpdGlvbkZvckNvbGxhcHNl
ZEZyYWdtZW50KGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdt
ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmlzQ29sbGFwc2VkKCkgPyBmcmFn
bWVudC5zdGFydCgpICsgMSA6IGZyYWdtZW50LmVuZCgpOwogICAgIH0KIAogICAgIHZvaWQgYXBw
ZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRv
cjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMpCiAgICAg
ewogICAgICAgICAvLyBBZGp1c3QgZW5kIHBvc2l0aW9uIHdoaWxlIGNvbGxhcHNpbmcuCi0gICAg
ICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gZnJhZ21lbnQuaXNDb2xsYXBzZWQoKSA/IGZyYWdt
ZW50LnN0YXJ0KCkgKyAxIDogZnJhZ21lbnQuZW5kKCk7CisgICAgICAgIHVuc2lnbmVkIGVuZFBv
c2l0aW9uID0gZW5kUG9zaXRpb25Gb3JDb2xsYXBzZWRGcmFnbWVudChmcmFnbWVudCk7CiAgICAg
ICAgIC8vIE5ldyBsaW5lIG5lZWRzIG5ldyBydW4uCi0gICAgICAgIGlmICghbV9ydW5zV2lkdGgp
CisgICAgICAgIGlmICghbV9ydW5zV2lkdGgpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV91bmNv
bXBsZXRlZFdpZHRoKTsKICAgICAgICAgICAgIHJ1bnMuYXBwZW5kKFJ1bihmcmFnbWVudC5zdGFy
dCgpLCBlbmRQb3NpdGlvbiwgbV9ydW5zV2lkdGgsIG1fcnVuc1dpZHRoICsgZnJhZ21lbnQud2lk
dGgoKSwgZmFsc2UsIGZyYWdtZW50Lmhhc0h5cGhlbigpKSk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgYXV0byYgbGFzdEZyYWdtZW50ID0gbV9mcmFnbWVudHMubGFzdCgpOworICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gQWR2YW5jZSBsYXN0IGNvbXBsZXRlZCBmcmFnbWVu
dCB3aGVuIHRoZSBwcmV2aW91cyBmcmFnbWVudCBpcyBhbGwgc2V0IChpbmNsdWRpbmcgbXVsdGlw
bGUgcGFydHMgYWNyb3NzIHJlbmRlcmVycykKLSAgICAgICAgICAgIGlmICgobGFzdEZyYWdtZW50
LnR5cGUoKSAhPSBmcmFnbWVudC50eXBlKCkpIHx8ICFsYXN0RnJhZ21lbnQub3ZlcmxhcHNUb05l
eHRSZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIG1fbGFzdENvbXBsZXRlRnJhZ21lbnQgPSBs
YXN0RnJhZ21lbnQ7CisgICAgICAgICAgICBpZiAoKG1fbGFzdEZyYWdtZW50LnR5cGUoKSAhPSBm
cmFnbWVudC50eXBlKCkpIHx8ICFtX2xhc3RGcmFnbWVudC5vdmVybGFwc1RvTmV4dFJlbmRlcmVy
KCkpIHsKKyAgICAgICAgICAgICAgICBtX2xhc3RDb21wbGV0ZUZyYWdtZW50ID0gbV9sYXN0RnJh
Z21lbnQ7CisgICAgICAgICAgICAgICAgbV91bmNvbXBsZXRlZFdpZHRoID0gZnJhZ21lbnQud2lk
dGgoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1fdW5jb21wbGV0ZWRX
aWR0aCArPSBmcmFnbWVudC53aWR0aCgpOwogICAgICAgICAgICAgLy8gQ29sbGFwc2UgbmVpZ2hi
b3VyaW5nIHdoaXRlc3BhY2UsIGlmIHRoZXkgYXJlIGFjcm9zcyBtdWx0aXBsZSByZW5kZXJlcnMg
YW5kIGFyZSBub3QgY29sbGFwc2VkIHlldC4KLSAgICAgICAgICAgIGlmIChsYXN0RnJhZ21lbnQu
aXNDb2xsYXBzaWJsZSgpICYmIGZyYWdtZW50LmlzQ29sbGFwc2libGUoKSkgewotICAgICAgICAg
ICAgICAgIEFTU0VSVChsYXN0RnJhZ21lbnQuaXNMYXN0SW5SZW5kZXJlcigpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIWxhc3RGcmFnbWVudC5pc0NvbGxhcHNlZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIExpbmUgd2lkdGggbmVlZHMgdG8gYmUgcmVzZXQgc28gdGhhdCBub3cgaXQgdGFr
ZXMgY29sbGFwc2luZyBpbnRvIGNvbnNpZGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIG1f
cnVuc1dpZHRoIC09IChsYXN0RnJhZ21lbnQud2lkdGgoKSAtIG1fY29sbGFwc2VkV2hpdGVzcGFj
ZVdpZHRoKTsKKyAgICAgICAgICAgIGlmIChtX2xhc3RGcmFnbWVudC5pc0NvbGxhcHNpYmxlKCkg
JiYgZnJhZ21lbnQuaXNDb2xsYXBzaWJsZSgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1f
bGFzdEZyYWdtZW50LmlzTGFzdEluUmVuZGVyZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFt
X2xhc3RGcmFnbWVudC5pc0NvbGxhcHNlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIExp
bmUgd2lkdGggbmVlZHMgdG8gYmUgYWRqdXN0ZWQgc28gdGhhdCBub3cgaXQgdGFrZXMgY29sbGFw
c2luZyBpbnRvIGNvbnNpZGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIG1fcnVuc1dpZHRo
IC09IChtX2xhc3RGcmFnbWVudC53aWR0aCgpIC0gbV9jb2xsYXBzZWRXaGl0ZXNwYWNlV2lkdGgp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGlz
IGNvbGxhcHNlZCBjb21wbGV0ZWx5LiBObyBydW4gaXMgbmVlZGVkLgogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChsYXN0RnJhZ21lbnQuaXNM
YXN0SW5SZW5kZXJlcigpIHx8IGxhc3RGcmFnbWVudC5pc0NvbGxhcHNlZCgpKQorICAgICAgICAg
ICAgaWYgKG1fbGFzdEZyYWdtZW50LmlzTGFzdEluUmVuZGVyZXIoKSB8fCBtX2xhc3RGcmFnbWVu
dC5pc0NvbGxhcHNlZCgpKQogICAgICAgICAgICAgICAgIHJ1bnMuYXBwZW5kKFJ1bihmcmFnbWVu
dC5zdGFydCgpLCBlbmRQb3NpdGlvbiwgbV9ydW5zV2lkdGgsIG1fcnVuc1dpZHRoICsgZnJhZ21l
bnQud2lkdGgoKSwgZmFsc2UsIGZyYWdtZW50Lmhhc0h5cGhlbigpKSk7CiAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICBSdW4mIGxhc3RSdW4gPSBydW5zLmxhc3QoKTsKQEAgLTQ4
NCwxNSArNDkzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBsYXN0UnVuLmhhc0h5cGhl
biA9IGZyYWdtZW50Lmhhc0h5cGhlbigpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICAgIG1fZnJhZ21lbnRzLmFwcGVuZChmcmFnbWVudCk7CiAgICAgICAgIG1fcnVuc1dpZHRoICs9
IGZyYWdtZW50LndpZHRoKCk7CisgICAgICAgIG1fbGFzdEZyYWdtZW50ID0gZnJhZ21lbnQ7Cisg
ICAgICAgIGlmIChtX2ZyYWdtZW50cykKKyAgICAgICAgICAgICgqbV9mcmFnbWVudHMpLmFwcGVu
ZChmcmFnbWVudCk7CiAKLSAgICAgICAgaWYgKGZyYWdtZW50LnR5cGUoKSA9PSBUZXh0RnJhZ21l
bnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKSB7Ci0gICAgICAgICAgICBtX3Ry
YWlsaW5nV2hpdGVzcGFjZUxlbmd0aCArPSBlbmRQb3NpdGlvbiAtIGZyYWdtZW50LnN0YXJ0KCk7
CisgICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRl
eHRGcmFnbWVudDo6V2hpdGVzcGFjZSkKICAgICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNl
V2lkdGggKz0gZnJhZ21lbnQud2lkdGgoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoID0gMDsKKyAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoID0gMDsKKyAgICAgICAgICAgIG1fbGFzdE5v
bldoaXRlc3BhY2VGcmFnbWVudCA9IGZyYWdtZW50OwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFtX2ZpcnN0Q2hhcmFjdGVyRml0cykKQEAgLTUwMSw0NiArNTExLDI4IEBAIHB1YmxpYzoKIAog
ICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgcmV2ZXJ0VG9MYXN0Q29tcGxl
dGVGcmFnbWVudChMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykKICAgICB7Ci0gICAgICAgIEFTU0VS
VChtX2ZyYWdtZW50cy5zaXplKCkpOwotICAgICAgICB1bnNpZ25lZCByZXZlcnRMZW5ndGggPSAw
OwotICAgICAgICBmbG9hdCByZXZlcnRXaWR0aCA9IDA7Ci0gICAgICAgIHdoaWxlIChtX2ZyYWdt
ZW50cy5zaXplKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIGN1cnJlbnQgPSBtX2ZyYWdt
ZW50cy5sYXN0KCk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudCA9PSBtX2xhc3RDb21wbGV0ZUZy
YWdtZW50KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcmV2ZXJ0TGVuZ3Ro
ICs9IGN1cnJlbnQuZW5kKCkgLSBjdXJyZW50LnN0YXJ0KCk7Ci0gICAgICAgICAgICByZXZlcnRX
aWR0aCArPSBjdXJyZW50LndpZHRoKCk7Ci0gICAgICAgICAgICBtX2ZyYWdtZW50cy5yZW1vdmVM
YXN0KCk7CisgICAgICAgIGlmICghbV91bmNvbXBsZXRlZFdpZHRoKSB7CisgICAgICAgICAgICBB
U1NFUlQobV9sYXN0RnJhZ21lbnQgPT0gbV9sYXN0Q29tcGxldGVGcmFnbWVudCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9sYXN0RnJhZ21lbnQ7CiAgICAgICAgIH0KLSAgICAgICAgbV9ydW5zV2lk
dGggLT0gcmV2ZXJ0V2lkdGg7Ci0gICAgICAgIGlmIChyZXZlcnRMZW5ndGgpCi0gICAgICAgICAg
ICByZXZlcnRSdW5zKHJ1bnMsIHJldmVydExlbmd0aCwgcmV2ZXJ0V2lkdGgpOworICAgICAgICBB
U1NFUlQobV9sYXN0RnJhZ21lbnQuaXNWYWxpZCgpKTsKKyAgICAgICAgbV9ydW5zV2lkdGggLT0g
bV91bmNvbXBsZXRlZFdpZHRoOworICAgICAgICByZXZlcnRSdW5zKHJ1bnMsIGVuZFBvc2l0aW9u
Rm9yQ29sbGFwc2VkRnJhZ21lbnQobV9sYXN0RnJhZ21lbnQpIC0gZW5kUG9zaXRpb25Gb3JDb2xs
YXBzZWRGcmFnbWVudChtX2xhc3RDb21wbGV0ZUZyYWdtZW50KSwgbV91bmNvbXBsZXRlZFdpZHRo
KTsKKyAgICAgICAgbV91bmNvbXBsZXRlZFdpZHRoID0gMDsKKyAgICAgICAgQVNTRVJUKG1fbGFz
dENvbXBsZXRlRnJhZ21lbnQuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIG1fbGFzdENvbXBs
ZXRlRnJhZ21lbnQ7CiAgICAgfQogCiAgICAgdm9pZCByZW1vdmVUcmFpbGluZ1doaXRlc3BhY2Uo
TGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMpCiAgICAgewotICAgICAgICBpZiAoIW1fdHJhaWxpbmdX
aGl0ZXNwYWNlTGVuZ3RoKQorICAgICAgICBpZiAobV9sYXN0RnJhZ21lbnQudHlwZSgpICE9IFRl
eHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHJldmVydFJ1bnMocnVucywgbV90cmFpbGluZ1doaXRlc3BhY2VM
ZW5ndGgsIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgpOworICAgICAgICBBU1NFUlQobV90cmFp
bGluZ1doaXRlc3BhY2VXaWR0aCk7CisgICAgICAgIEFTU0VSVChtX2xhc3RGcmFnbWVudC5lbmQo
KSAhPSBtX2xhc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQuZW5kKCkpOworICAgICAgICB1bnNpZ25l
ZCB0cmFpbGluZ1doaXRlc3BhY2VMZW5ndGggPSBlbmRQb3NpdGlvbkZvckNvbGxhcHNlZEZyYWdt
ZW50KG1fbGFzdEZyYWdtZW50KSAtIG1fbGFzdE5vbldoaXRlc3BhY2VGcmFnbWVudC5lbmQoKTsK
KyAgICAgICAgcmV2ZXJ0UnVucyhydW5zLCB0cmFpbGluZ1doaXRlc3BhY2VMZW5ndGgsIG1fdHJh
aWxpbmdXaGl0ZXNwYWNlV2lkdGgpOwogICAgICAgICBtX3J1bnNXaWR0aCAtPSBtX3RyYWlsaW5n
V2hpdGVzcGFjZVdpZHRoOwotICAgICAgICBBU1NFUlQobV9mcmFnbWVudHMubGFzdCgpLnR5cGUo
KSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKTsKLSAg
ICAgICAgd2hpbGUgKG1fZnJhZ21lbnRzLnNpemUoKSkgewotICAgICAgICAgICAgY29uc3QgYXV0
byYgY3VycmVudCA9IG1fZnJhZ21lbnRzLmxhc3QoKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50
LnR5cGUoKSAhPSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNl
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAg
ICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoIC09IChjdXJyZW50LmlzQ29sbGFwc2VkKCkg
PyAxIDogY3VycmVudC5lbmQoKSAtIGN1cnJlbnQuc3RhcnQoKSk7Ci0gICAgICAgICAgICBtX3Ry
YWlsaW5nV2hpdGVzcGFjZVdpZHRoIC09IGN1cnJlbnQud2lkdGgoKTsKLSNlbmRpZgotICAgICAg
ICAgICAgbV9mcmFnbWVudHMucmVtb3ZlTGFzdCgpOwotICAgICAgICB9Ci0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgICAgICBBU1NFUlQoIW1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoKTsKLSAg
ICAgICAgQVNTRVJUKCFtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKTsKLSNlbmRpZgotICAgICAg
ICBtX3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCA9IDA7Ci0gICAgICAgIG1fdHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGggPSAwOworICAgICAgICBtX2xhc3RGcmFnbWVudCA9IG1fbGFzdE5vbldoaXRl
c3BhY2VGcmFnbWVudDsKICAgICB9CiAKIHByaXZhdGU6CkBAIC01NTIsMTcgKzU0NCwxOCBAQCBw
cml2YXRlOgogCiAgICAgZmxvYXQgbV9hdmFpbGFibGVXaWR0aCB7IDAgfTsKICAgICBmbG9hdCBt
X2xvZ2ljYWxMZWZ0T2Zmc2V0IHsgMCB9OwotICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0
RnJhZ21lbnQgbV9vdmVyZmxvd2VkRnJhZ21lbnQ7CiAgICAgZmxvYXQgbV9ydW5zV2lkdGggeyAw
IH07CisgICAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBtX292ZXJmbG93ZWRG
cmFnbWVudDsKKyAgICBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IG1fbGFzdEZy
YWdtZW50OworICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgbV9sYXN0Tm9u
V2hpdGVzcGFjZUZyYWdtZW50OwogICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQgbV9sYXN0Q29tcGxldGVGcmFnbWVudDsKKyAgICBmbG9hdCBtX3VuY29tcGxldGVkV2lkdGgg
eyAwIH07CiAgICAgZmxvYXQgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCB7IDAgfTsgLy8gVXNl
IHRoaXMgdG8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2l0aG91dCByZS1tZXN1cmluZyB0
aGUgdGV4dC4KLSAgICB1bnNpZ25lZCBtX3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCB7IDAgfTsK
ICAgICBmbG9hdCBtX2NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aCB7IDAgfTsKICAgICAvLyBIYXZp
bmcgb25lIGNoYXJhY3RlciBvbiB0aGUgbGluZSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGl0
IGFjdHVhbGx5IGZpdHMuCiAgICAgLy8gRmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaXJzdCBmcmFn
bWVudCBtaWdodCBiZSBmb3JjZWQgb24gdG8gdGhlIGN1cnJlbnQgbGluZSBldmVuIGlmIGl0IGRv
ZXMgbm90IGZpdC4KICAgICBib29sIG1fZmlyc3RDaGFyYWN0ZXJGaXRzIHsgZmFsc2UgfTsKLSAg
ICAvLyBGSVhNRTogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGlzIGZvciBhbGwgdGhlIHNpbXBs
ZSBjYXNlcy4gVHJ5IHRvIHJlbW92ZS9tYWtlIGl0IG9wdGlvbmFsLgotICAgIFZlY3RvcjxUZXh0
RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50LCAzMD4gbV9mcmFnbWVudHM7CisgICAgc3Rk
OjpvcHRpb25hbDxWZWN0b3I8VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCwgMzA+
PiBtX2ZyYWdtZW50czsKIH07CiAKIGNsYXNzIEZyYWdtZW50Rm9yd2FyZEl0ZXJhdG9yIDogcHVi
bGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgdW5zaWduZWQ+IHsK
QEAgLTU5OCwyMCArNTkxLDE4IEBAIHN0YXRpYyB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFj
ZShMaW5lU3RhdGUmIGxpbmVTdGF0ZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1CiB7CiAgICAgaWYg
KCFsaW5lU3RhdGUuaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkpCiAgICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFJlbW92ZSBjb2xsYXBzZWQgd2hpdGVzcGFjZSwgb3Igbm9uLWNvbGxhcHNlZCBwcmUt
d3JhcCB3aGl0ZXNwYWNlLCB1bmxlc3MgaXQncyB0aGUgb25seSBjb250ZW50IG9uIHRoZSBsaW5l
IC1zbyByZW1vdmluZyB0aGUgd2hpdGVzYXBjZSB3b3VsZCBwcm9kdWNlIGFuIGVtcHR5IGxpbmUu
CisgICAgLy8gUmVtb3ZlIGNvbGxhcHNlZCB3aGl0ZXNwYWNlLCBvciBub24tY29sbGFwc2VkIHBy
ZS13cmFwIHdoaXRlc3BhY2UsIHVubGVzcyBpdCdzIHRoZSBvbmx5IGNvbnRlbnQgb24gdGhlIGxp
bmUgLXNvIHJlbW92aW5nIHRoZSB3aGl0ZXNhcGNlCisgICAgLy8gd291bGQgcHJvZHVjZSBhbiBl
bXB0eSBsaW5lLgogICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iu
c3R5bGUoKTsKICAgICBib29sIGNvbGxhcHNlV2hpdGVzcGFjZSA9IHN0eWxlLmNvbGxhcHNlV2hp
dGVzcGFjZSB8IHByZVdyYXAoc3R5bGUpOwogICAgIGlmICghY29sbGFwc2VXaGl0ZXNwYWNlKQog
ICAgICAgICByZXR1cm47Ci0KICAgICBpZiAocHJlV3JhcChzdHlsZSkgJiYgbGluZVN0YXRlLmlz
V2hpdGVzcGFjZU9ubHkoKSkKICAgICAgICAgcmV0dXJuOwotCiAgICAgbGluZVN0YXRlLnJlbW92
ZVRyYWlsaW5nV2hpdGVzcGFjZShydW5zKTsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlTGluZUNv
bnN0cmFpbnMoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBMaW5lU3RhdGUmIGxpbmUsIGJv
b2wgaXNGaXJzdExpbmUpCitzdGF0aWMgdm9pZCB1cGRhdGVMaW5lQ29uc3RyYWlucyhjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3csIExpbmVTdGF0ZSYgbGluZSwgY29uc3QgVGV4dEZyYWdtZW50
SXRlcmF0b3I6OlN0eWxlJiBzdHlsZSwgYm9vbCBpc0ZpcnN0TGluZSkKIHsKICAgICBib29sIHNo
b3VsZEFwcGx5VGV4dEluZGVudCA9ICFmbG93LmlzQW5vbnltb3VzKCkgfHwgZmxvdy5wYXJlbnQo
KS0+Zmlyc3RDaGlsZCgpID09ICZmbG93OwogICAgIExheW91dFVuaXQgaGVpZ2h0ID0gZmxvdy5s
b2dpY2FsSGVpZ2h0KCk7CkBAIC02MjAsNiArNjExLDggQEAgc3RhdGljIHZvaWQgdXBkYXRlTGlu
ZUNvbnN0cmFpbnMoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBMaW5lU3RhdGUmIGxpbmUs
IGIKICAgICBsaW5lLnNldExvZ2ljYWxMZWZ0T2Zmc2V0KGZsb3cubG9naWNhbExlZnRPZmZzZXRG
b3JMaW5lKGhlaWdodCwgRG9Ob3RJbmRlbnRUZXh0LCBsb2dpY2FsSGVpZ2h0KSArCiAgICAgICAg
IChzaG91bGRBcHBseVRleHRJbmRlbnQgJiYgaXNGaXJzdExpbmUgPyBmbG93LnRleHRJbmRlbnRP
ZmZzZXQoKSA6IExheW91dFVuaXQoMCkpKTsKICAgICBsaW5lLnNldEF2YWlsYWJsZVdpZHRoKHN0
ZDo6bWF4PGZsb2F0PigwLCBsb2dpY2FsUmlnaHRPZmZzZXQgLSBsaW5lLmxvZ2ljYWxMZWZ0T2Zm
c2V0KCkpKTsKKyAgICBpZiAoc3R5bGUudGV4dEFsaWduID09IEpVU1RJRlkpCisgICAgICAgIGxp
bmUuc2V0TmVlZHNBbGxGcmFnbWVudHMoKTsKIH0KIAogc3RhdGljIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IGh5cGhlblBvc2l0aW9uRm9yRnJhZ21lbnQodW5zaWduZWQgc3BsaXRQb3NpdGlvbiwg
VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnRUb1NwbGl0LApAQCAt
NzkyLDExICs3ODUsMTAgQEAgc3RhdGljIGJvb2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBs
aW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3UKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIE5vbi1icmVha2FibGUgbm9u
LXdoaXRlc3BhY2UgZnJhZ21lbnQgd2hlbiB0aGVyZSdzIGFscmVhZHkgY29udGVudCBvbiB0aGUg
bGluZS4gUHVzaCBpdCB0byB0aGUgbmV4dCBsaW5lLgotICAgICAgICAgICAgQVNTRVJUKGxpbmUu
bGFzdEZyYWdtZW50KCkpOwotICAgICAgICAgICAgaWYgKGxpbmUubGFzdEZyYWdtZW50KCkudmFs
dWUoKS5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChsaW5l
Lmxhc3RGcmFnbWVudCgpLmlzVmFsaWQoKSk7CisgICAgICAgICAgICBpZiAobGluZS5sYXN0RnJh
Z21lbnQoKS5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgICAgICAvLyBD
aGVjayBpZiB0aGlzIGZyYWdtZW50IGlzIGEgY29udGludWF0aW9uIG9mIGEgcHJldmlvdXMgc2Vn
bWVudC4gSW4gc3VjaCBjYXNlcywgd2UgbmVlZCB0byByZW1vdmUgdGhlbSBhbGwuCi0gICAgICAg
ICAgICAgICAgY29uc3QgYXV0byYgbGFzdENvbXBsZXRlRnJhZ21lbnQgPSBsaW5lLnJldmVydFRv
TGFzdENvbXBsZXRlRnJhZ21lbnQocnVucyk7Ci0gICAgICAgICAgICAgICAgdGV4dEZyYWdtZW50
SXRlcmF0b3IucmV2ZXJ0VG9FbmRPZkZyYWdtZW50KGxhc3RDb21wbGV0ZUZyYWdtZW50KTsKKyAg
ICAgICAgICAgICAgICB0ZXh0RnJhZ21lbnRJdGVyYXRvci5yZXZlcnRUb0VuZE9mRnJhZ21lbnQo
bGluZS5yZXZlcnRUb0xhc3RDb21wbGV0ZUZyYWdtZW50KHJ1bnMpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZy
YWdtZW50KGZyYWdtZW50KTsKQEAgLTg3NCw3ICs4NjYsNyBAQCBzdGF0aWMgdm9pZCBjbG9zZUxp
bmVFbmRpbmdBbmRBZGp1c3RSdW5zKExpbmVTdGF0ZSYgbGluZSwgTGF5b3V0OjpSdW5WZWN0b3Im
IHJ1bgogICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUo
KTsKICAgICBhdXRvIGZpcnN0UnVuSW5kZXggPSBsYXN0UnVuSW5kZXhPZlByZXZpb3VzTGluZSA/
IGxhc3RSdW5JbmRleE9mUHJldmlvdXNMaW5lLnZhbHVlKCkgKyAxIDogMDsKICAgICBhdXRvIGxp
bmVMb2dpY2FsTGVmdCA9IGxpbmUubG9naWNhbExlZnRPZmZzZXQoKTsKLSAgICBhdXRvIHRleHRB
bGlnbiA9IHRleHRBbGlnbkZvckxpbmUoc3R5bGUsIGxhc3RMaW5lSW5GbG93IHx8IChsaW5lLmxh
c3RGcmFnbWVudCgpICYmIGxpbmUubGFzdEZyYWdtZW50KCkudmFsdWUoKS50eXBlKCkgPT0gVGV4
dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6SGFyZExpbmVCcmVhaykpOworICAgIGF1
dG8gdGV4dEFsaWduID0gdGV4dEFsaWduRm9yTGluZShzdHlsZSwgbGFzdExpbmVJbkZsb3cgfHwg
KGxpbmUubGFzdEZyYWdtZW50KCkuaXNWYWxpZCgpICYmIGxpbmUubGFzdEZyYWdtZW50KCkudHlw
ZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkhhcmRMaW5lQnJlYWsp
KTsKICAgICBpZiAodGV4dEFsaWduID09IEpVU1RJRlkpCiAgICAgICAgIGp1c3RpZnlSdW5zKGxp
bmUsIHJ1bnMsIGZpcnN0UnVuSW5kZXgpOwogICAgIGVsc2UKQEAgLTg5OSw3ICs4OTEsNyBAQCBz
dGF0aWMgdm9pZCBjcmVhdGVUZXh0UnVucyhMYXlvdXQ6OlJ1blZlY3RvciYgcnVucywgUmVuZGVy
QmxvY2tGbG93JiBmbG93LCB1bnNpZwogICAgICAgICBmbG93LnNldExvZ2ljYWxIZWlnaHQobGlu
ZUhlaWdodCAqIGxpbmVDb3VudCArIGJvcmRlckFuZFBhZGRpbmdCZWZvcmUpOwogICAgICAgICBM
aW5lU3RhdGUgcHJldmlvdXNMaW5lID0gbGluZTsKICAgICAgICAgbGluZSA9IExpbmVTdGF0ZSgp
OwotICAgICAgICB1cGRhdGVMaW5lQ29uc3RyYWlucyhmbG93LCBsaW5lLCAhbGluZUNvdW50KTsK
KyAgICAgICAgdXBkYXRlTGluZUNvbnN0cmFpbnMoZmxvdywgbGluZSwgdGV4dEZyYWdtZW50SXRl
cmF0b3Iuc3R5bGUoKSwgIWxpbmVDb3VudCk7CiAgICAgICAgIGlzRW5kT2ZDb250ZW50ID0gY3Jl
YXRlTGluZVJ1bnMobGluZSwgcHJldmlvdXNMaW5lLCBydW5zLCB0ZXh0RnJhZ21lbnRJdGVyYXRv
cik7CiAgICAgICAgIGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMobGluZSwgcnVucywgbGFz
dFJ1bkluZGV4T2ZQcmV2aW91c0xpbmUsIGxpbmVDb3VudCwgdGV4dEZyYWdtZW50SXRlcmF0b3Is
IGlzRW5kT2ZDb250ZW50KTsKICAgICAgICAgaWYgKHJ1bnMuc2l6ZSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVy
YXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJh
Z21lbnRJdGVyYXRvci5oCmluZGV4IDdhNDFlZWU0N2ViOWFlN2IyYzUxNGQ5MjcxZDcxYmU1MDBm
NjlhNDguLjA1MzNhMzI4YjYxNjQxYWFlZjI3MTFmOGJhYTQ4YjA3NTEwNjNmZDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50
SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dFRleHRGcmFnbWVudEl0ZXJhdG9yLmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIFRl
eHRGcmFnbWVudEl0ZXJhdG9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwogICAgIGNsYXNzIFRl
eHRGcmFnbWVudCB7CiAgICAgcHVibGljOgotICAgICAgICBlbnVtIFR5cGUgeyBDb250ZW50RW5k
LCBTb2Z0TGluZUJyZWFrLCBIYXJkTGluZUJyZWFrLCBXaGl0ZXNwYWNlLCBOb25XaGl0ZXNwYWNl
IH07CisgICAgICAgIGVudW0gVHlwZSB7IEludmFsaWQsIENvbnRlbnRFbmQsIFNvZnRMaW5lQnJl
YWssIEhhcmRMaW5lQnJlYWssIFdoaXRlc3BhY2UsIE5vbldoaXRlc3BhY2UgfTsKICAgICAgICAg
VGV4dEZyYWdtZW50KCkgPSBkZWZhdWx0OwogICAgICAgICBUZXh0RnJhZ21lbnQodW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgd2lkdGgsIFR5cGUgdHlwZSwgYm9vbCBpc0xhc3RJ
blJlbmRlcmVyID0gZmFsc2UsIGJvb2wgb3ZlcmxhcHNUb05leHRSZW5kZXJlciA9IGZhbHNlLCBi
b29sIGlzQ29sbGFwc2VkID0gZmFsc2UsIGJvb2wgaXNDb2xsYXBzaWJsZSA9IGZhbHNlKQogICAg
ICAgICAgICAgOiBtX3N0YXJ0KHN0YXJ0KQpAQCAtNTUsOCArNTUsMTAgQEAgcHVibGljOgogICAg
ICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBtX3R5cGUgIT0gSW52YWxpZDsgfQogICAgICAgICB1bnNpZ25lZCBzdGFydCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnQ7IH0KICAgICAgICAgdW5zaWduZWQgZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9lbmQ7IH0KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBBU1NFUlQobV9lbmQg
Pj0gbV9zdGFydCk7IHJldHVybiBtX2VuZCAtIG1fc3RhcnQ7IH0KICAgICAgICAgZmxvYXQgd2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CiAgICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgICAgICBib29sIG92ZXJsYXBzVG9OZXh0UmVuZGVyZXIo
KSBjb25zdCB7IHJldHVybiBtX292ZXJsYXBzVG9OZXh0UmVuZGVyZXI7IH0KQEAgLTg3LDcgKzg5
LDcgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0IHsgMCB9OwogICAgICAgICB1
bnNpZ25lZCBtX2VuZCB7IDAgfTsKICAgICAgICAgZmxvYXQgbV93aWR0aCB7IDAgfTsKLSAgICAg
ICAgVHlwZSBtX3R5cGUgeyBOb25XaGl0ZXNwYWNlIH07CisgICAgICAgIFR5cGUgbV90eXBlIHsg
SW52YWxpZCB9OwogICAgICAgICBib29sIG1faXNMYXN0SW5SZW5kZXJlciB7IGZhbHNlIH07CiAg
ICAgICAgIGJvb2wgbV9vdmVybGFwc1RvTmV4dFJlbmRlcmVyIHsgZmFsc2UgfTsKICAgICAgICAg
Ym9vbCBtX2lzQ29sbGFwc2VkIHsgZmFsc2UgfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>