<?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>225223</bug_id>
          
          <creation_ts>2021-04-29 19:17:55 -0700</creation_ts>
          <short_desc>Optimize SortedArrayMap by using linear search for small arrays</short_desc>
          <delta_ts>2021-04-30 09:03:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1755617</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-29 19:17:55 -0700</bug_when>
    <thetext>Optimize SortedArrayMap by using linear search for small arrays</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755618</commentid>
    <comment_count>1</comment_count>
      <attachid>427396</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-29 19:21:09 -0700</bug_when>
    <thetext>Created attachment 427396
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755625</commentid>
    <comment_count>2</comment_count>
      <attachid>427396</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-29 22:02:01 -0700</bug_when>
    <thetext>Comment on attachment 427396
Patch

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

r=me

&gt; Source/WTF/wtf/SortedArrayMap.h:145
&gt; +    if (std::size(m_array) &lt; binarySearchThreshold) {

How about making it `if constexpr` to ensure that this dispatching is done at compile time.

&gt; Source/WTF/wtf/SortedArrayMap.h:177
&gt; +    if (std::size(m_array) &lt; binarySearchThreshold)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755695</commentid>
    <comment_count>3</comment_count>
      <attachid>427396</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-30 08:57:57 -0700</bug_when>
    <thetext>Comment on attachment 427396
Patch

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

&gt;&gt; Source/WTF/wtf/SortedArrayMap.h:145
&gt;&gt; +    if (std::size(m_array) &lt; binarySearchThreshold) {
&gt; 
&gt; How about making it `if constexpr` to ensure that this dispatching is done at compile time.

Tried if constexpr first. The compiler gave an error saying that I could not use &quot;this&quot; in it, so I would have had to find some way to get the size from the type rather than from m_array. Decided to leave it non-constexpr; still gets constant-folded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755699</commentid>
    <comment_count>4</comment_count>
      <attachid>427396</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-30 08:58:49 -0700</bug_when>
    <thetext>Comment on attachment 427396
Patch

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

&gt;&gt;&gt; Source/WTF/wtf/SortedArrayMap.h:145
&gt;&gt;&gt; +    if (std::size(m_array) &lt; binarySearchThreshold) {
&gt;&gt; 
&gt;&gt; How about making it `if constexpr` to ensure that this dispatching is done at compile time.
&gt; 
&gt; Tried if constexpr first. The compiler gave an error saying that I could not use &quot;this&quot; in it, so I would have had to find some way to get the size from the type rather than from m_array. Decided to leave it non-constexpr; still gets constant-folded.

If you help me find a clean simple way for me to move to if constexpr without making the code ugly, would be happy to come back and do that later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755701</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-30 09:02:59 -0700</bug_when>
    <thetext>Committed r276840 (237191@main): &lt;https://commits.webkit.org/237191@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 427396.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755702</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-30 09:03:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/77385092&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427396</attachid>
            <date>2021-04-29 19:21:09 -0700</date>
            <delta_ts>2021-04-30 09:03:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225223-20210429192109.patch</filename>
            <type>text/plain</type>
            <size>9058</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDIxMWE5NzdkZWQ2NjM3YzBkM2UxMmI1
NDUwYTBkNTNjNTMxMjUzYTguLjNjM2Y1MzA0ZjdjNzNlYmMxNDExOTk5ZTU5ZTM3OWI5OWE1MmNl
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDQtMjkgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIE9wdGltaXplIFNvcnRlZEFycmF5TWFwIGJ5IHVzaW5nIGxp
bmVhciBzZWFyY2ggZm9yIHNtYWxsIGFycmF5cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MjIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvU29ydGVkQXJyYXlNYXAuaDogQWRkZWQgYSBiYXNl
IGNsYXNzIFNvcnRlZEFycmF5QmFzZSB0aGF0IGNvbnRhaW5zIGEgY29uc3RhbnQKKyAgICAgICAg
Zm9yIHRoZSBjdXRvZmYgYmV0d2VlbiBsaW5lYXIgYW5kIGJpbmFyeSBzZWFyY2guIEJhc2VkIG9u
IGEgcXVpY2sgZW1waXJpY2FsIHRlc3QsCisgICAgICAgIGl0IHNlZW1zIGZhc3RlciB0byBkbyBs
aW5lYXIgc2VhcmNoIGZvciBhcnJheXMgdGhhdCBoYXZlIGxlc3MgdGhlbiAyMCBlbGVtZW50cy4K
KyAgICAgICAgV2hpbGUgZG9pbmcgdGhpcyBhbHNvIHN3aXRjaGVkIGZyb20gdHJ5QmluYXJ5U2Vh
cmNoIHRvIHN0ZDo6ZmluZC9maW5kX2lmL2xvd2VyX2JvdW5kCisgICAgICAgIGJlY2F1c2UgdGhl
IHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb24gdGVtcGxhdGVzIHNob3VsZCBiZSBleGNlbGxlbnQg
Zm9yIHRoaXMgcHVycG9zZSwKKyAgICAgICAgYW5kIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIHVzZSBv
dXIgb3duLiBBbHNvIGZpbGxlZCBvdXQgdGhlIG9wZXJhdGlvbnMgZm9yIHRoZQorICAgICAgICBD
b21wYXJhYmxlQVNDSUlMaXRlcmFsIGZhbWlseSBzbyB0aGF0IHRoZSAiPCIgb3BlcmF0b3Igd29y
a3MgaW4gZWl0aGVyIGRpcmVjdGlvbiwKKyAgICAgICAgc2luY2UgdGhhdCdzIG5lZWRlZCBmb3Ig
Y29tcGF0aWJpbGl0eSB3aXRoIHN0YW5kYXJkIGxpYnJhcnkgYWxnb3JpdGhtcy4KKwogMjAyMS0w
NC0yOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRXh0ZW5kIFNv
cnRlZEFycmF5TWFwIGZ1cnRoZXIgdG8gd29yayBvbiBjYXNlLWZvbGRlZCBzdHJpbmdzLCB1c2Ug
aW4gTUlNRVR5cGVSZWdpc3RyeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU29ydGVkQXJy
YXlNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL1NvcnRlZEFycmF5TWFwLmgKaW5kZXggZjdmZTJhYzU0
YzE5MTdiN2UwODk3YjcwNWNkM2UwOWM5MTliNDI2OC4uYmM5ZTRjZWQ2ZWM3Y2QxODY3Y2MxOWFh
OTQ1NjE0MDBlZTk1ZGY3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU29ydGVkQXJyYXlN
YXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Tb3J0ZWRBcnJheU1hcC5oCkBAIC0zNSw3ICszNSwx
NyBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIFRoZSBhcnJheSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVj
dG9yIGhhcyBzdGQ6OnBhaXIgZWxlbWVudHM6IGtleXMgZmlyc3QgYW5kIHZhbHVlcyBzZWNvbmQu
CiAvLyBUaGUgYXJyYXkgYW5kIHRoZSBTb3J0ZWRBcnJheU1hcCBzaG91bGQgdHlwaWNhbGx5IGJv
dGggYmUgZ2xvYmFsIGNvbnN0YW50IGV4cHJlc3Npb25zLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBB
cnJheVR5cGU+IGNsYXNzIFNvcnRlZEFycmF5TWFwIHsKK2NsYXNzIFNvcnRlZEFycmF5QmFzZSB7
Citwcm90ZWN0ZWQ6CisgICAgLy8gU29tZSBpbmZvcm1hbCBlbXBpcmljYWwgdGVzdHMgaW5kaWNh
dGUgdGhhdCBhcnJheXMgc2hvcnRlciB0aGFuIHRoaXMgYXJlIGZhc3RlciB0bworICAgIC8vIHNl
YXJjaCB3aXRoIGxpbmVhciBzZWFyY2ggdGhhbiB3aXRoIGJpbmFyeSBzZWFyY2guIEV2ZW4gaWYg
d2UgZG9uJ3QgZ2V0IHRoaXMgdGhyZXNob2xkCisgICAgLy8gZXhhY3RseSByaWdodCwgaXQncyBo
ZWxwZnVsIGZvciBib3RoIHBlcmZvcm1hbmNlIGFuZCBjb2RlIHNpemUgdG8gdXNlIGxpbmVhciBz
ZWFyY2ggYXQKKyAgICAvLyBsZWFzdCBmb3IgdmVyeSBzbWFsbCBhcnJheXMsIGFuZCBpbXBvcnRh
bnQgZm9yIHBlcmZvcm1hbmNlIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHVzZQorICAgIC8vIGJpbmFy
eSBzZWFyY2ggZm9yIG11Y2ggbGFyZ2VyIG9uZXMuCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgYmluYXJ5U2VhcmNoVGhyZXNob2xkID0gMjA7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
cnJheVR5cGU+IGNsYXNzIFNvcnRlZEFycmF5TWFwIDogcHVibGljIFNvcnRlZEFycmF5QmFzZSB7
CiBwdWJsaWM6CiAgICAgdXNpbmcgRWxlbWVudFR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9l
eHRlbnRfdDxBcnJheVR5cGU+OwogICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIEVsZW1l
bnRUeXBlOjpzZWNvbmRfdHlwZTsKQEAgLTUyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBjb25z
dCBBcnJheVR5cGUmIG1fYXJyYXk7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheVR5cGU+
IGNsYXNzIFNvcnRlZEFycmF5U2V0IHsKK3RlbXBsYXRlPHR5cGVuYW1lIEFycmF5VHlwZT4gY2xh
c3MgU29ydGVkQXJyYXlTZXQgOiBwdWJsaWMgU29ydGVkQXJyYXlCYXNlIHsKIHB1YmxpYzoKICAg
ICBjb25zdGV4cHIgU29ydGVkQXJyYXlTZXQoY29uc3QgQXJyYXlUeXBlJik7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJndW1lbnQ+IGJvb2wgY29udGFpbnMoY29uc3QgS2V5QXJndW1lbnQm
KSBjb25zdDsKQEAgLTg4LDYgKzk4LDkgQEAgYm9vbCBvcGVyYXRvcj09KENvbXBhcmFibGVTdHJp
bmdWaWV3LCBDb21wYXJhYmxlTGV0dGVyc0xpdGVyYWwpOwogYm9vbCBvcGVyYXRvcjwoQ29tcGFy
YWJsZVN0cmluZ1ZpZXcsIENvbXBhcmFibGVBU0NJSUxpdGVyYWwpOwogYm9vbCBvcGVyYXRvcjwo
Q29tcGFyYWJsZVN0cmluZ1ZpZXcsIENvbXBhcmFibGVDYXNlRm9sZGluZ0FTQ0lJTGl0ZXJhbCk7
CiBib29sIG9wZXJhdG9yPChDb21wYXJhYmxlU3RyaW5nVmlldywgQ29tcGFyYWJsZUxldHRlcnNM
aXRlcmFsKTsKK2Jvb2wgb3BlcmF0b3I8KENvbXBhcmFibGVBU0NJSUxpdGVyYWwsIENvbXBhcmFi
bGVTdHJpbmdWaWV3KTsKK2Jvb2wgb3BlcmF0b3I8KENvbXBhcmFibGVDYXNlRm9sZGluZ0FTQ0lJ
TGl0ZXJhbCwgQ29tcGFyYWJsZVN0cmluZ1ZpZXcpOworYm9vbCBvcGVyYXRvcjwoQ29tcGFyYWJs
ZUxldHRlcnNMaXRlcmFsLCBDb21wYXJhYmxlU3RyaW5nVmlldyk7CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE90aGVyVHlwZT4gYm9vbCBvcGVyYXRvcj09KE90aGVyVHlwZSwgQ29tcGFyYWJsZVN0cmlu
Z1ZpZXcpOwogdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlPiBib29sIG9wZXJhdG9yIT0oQ29t
cGFyYWJsZVN0cmluZ1ZpZXcsIE90aGVyVHlwZSk7CkBAIC0xMjgsMTIgKzE0MSwyMSBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBBcnJheVR5cGU+IHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZ3VtZW50PiBp
bmxpbmUgYXV0byBTb3J0ZWRBcgogICAgIGF1dG8gcGFyc2VkS2V5ID0gRWxlbWVudFR5cGU6OmZp
cnN0X3R5cGU6OnBhcnNlKGtleSk7CiAgICAgaWYgKCFwYXJzZWRLZXkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZW5oYW5jZSB0cnlCaW5hcnlTZWFy
Y2ggc28gaXQgY2FuIGRlZHVjZSBFbGVtZW50VHlwZS4KLSAgICAvLyBGSVhNRTogSWYgdGhlIGFy
cmF5J3Mgc2l6ZSBpcyBzbWFsbCBlbm91Z2gsIHNob3VsZCBkbyBsaW5lYXIgc2VhcmNoIHNpbmNl
IGl0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gYmluYXJ5IHNlYXJjaC4KLSAgICBhdXRvIGVsZW1l
bnQgPSB0cnlCaW5hcnlTZWFyY2g8RWxlbWVudFR5cGU+KG1fYXJyYXksIHN0ZDo6c2l6ZShtX2Fy
cmF5KSwgKnBhcnNlZEtleSwgW10gKGF1dG8qIGVsZW1lbnQpIHsKLSAgICAgICAgcmV0dXJuIGVs
ZW1lbnQtPmZpcnN0OwotICAgIH0pOwotICAgIHJldHVybiBlbGVtZW50ID8gJmVsZW1lbnQtPnNl
Y29uZCA6IG51bGxwdHI7CisgICAgZGVjbHR5cGUoc3RkOjpiZWdpbihtX2FycmF5KSkgaXRlcmF0
b3I7CisgICAgaWYgKHN0ZDo6c2l6ZShtX2FycmF5KSA8IGJpbmFyeVNlYXJjaFRocmVzaG9sZCkg
eworICAgICAgICBpdGVyYXRvciA9IHN0ZDo6ZmluZF9pZihzdGQ6OmJlZ2luKG1fYXJyYXkpLCBz
dGQ6OmVuZChtX2FycmF5KSwgWyZwYXJzZWRLZXldIChhdXRvJiBwYWlyKSB7CisgICAgICAgICAg
ICByZXR1cm4gcGFpci5maXJzdCA9PSAqcGFyc2VkS2V5OworICAgICAgICB9KTsKKyAgICAgICAg
aWYgKGl0ZXJhdG9yID09IHN0ZDo6ZW5kKG1fYXJyYXkpKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaXRlcmF0b3IgPSBzdGQ6Omxvd2VyX2JvdW5k
KHN0ZDo6YmVnaW4obV9hcnJheSksIHN0ZDo6ZW5kKG1fYXJyYXkpLCAqcGFyc2VkS2V5LCBbXSAo
YXV0byYgcGFpciwgYXV0byYgdmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiBwYWlyLmZpcnN0
IDwgdmFsdWU7CisgICAgICAgIH0pOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gc3RkOjplbmQo
bV9hcnJheSkgfHwgIShpdGVyYXRvci0+Zmlyc3QgPT0gKnBhcnNlZEtleSkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuICZpdGVyYXRvci0+c2Vjb25kOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheVR5cGU+IHRlbXBsYXRlPHR5cGVuYW1lIEtleUFy
Z3VtZW50PiBpbmxpbmUgYXV0byBTb3J0ZWRBcnJheU1hcDxBcnJheVR5cGU+OjpnZXQoY29uc3Qg
S2V5QXJndW1lbnQmIGtleSwgY29uc3QgVmFsdWVUeXBlJiBkZWZhdWx0VmFsdWUpIGNvbnN0IC0+
IFZhbHVlVHlwZQpAQCAtMTUyLDExICsxNzQsMTAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlU
eXBlPiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmd1bWVudD4gaW5saW5lIGJvb2wgU29ydGVkQXIK
IHsKICAgICB1c2luZyBFbGVtZW50VHlwZSA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2V4dGVudF90
PEFycmF5VHlwZT47CiAgICAgYXV0byBwYXJzZWRLZXkgPSBFbGVtZW50VHlwZTo6cGFyc2Uoa2V5
KTsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGVuaGFuY2UgdHJ5QmluYXJ5U2VhcmNoIHNvIGl0
IGNhbiBkZWR1Y2UgRWxlbWVudFR5cGUuCi0gICAgLy8gRklYTUU6IElmIHRoZSBhcnJheSdzIHNp
emUgaXMgc21hbGwgZW5vdWdoLCBzaG91bGQgZG8gbGluZWFyIHNlYXJjaCBzaW5jZSBpdCBpcyBt
b3JlIGVmZmljaWVudCB0aGFuIGJpbmFyeSBzZWFyY2guCi0gICAgcmV0dXJuIHBhcnNlZEtleSAm
JiB0cnlCaW5hcnlTZWFyY2g8RWxlbWVudFR5cGU+KG1fYXJyYXksIHN0ZDo6c2l6ZShtX2FycmF5
KSwgKnBhcnNlZEtleSwgW10gKGF1dG8qIGVsZW1lbnQpIHsKLSAgICAgICAgcmV0dXJuICplbGVt
ZW50OwotICAgIH0pOworICAgIGlmIChzdGQ6OnNpemUobV9hcnJheSkgPCBiaW5hcnlTZWFyY2hU
aHJlc2hvbGQpCisgICAgICAgIHJldHVybiBzdGQ6OmZpbmQoc3RkOjpiZWdpbihtX2FycmF5KSwg
c3RkOjplbmQobV9hcnJheSksICpwYXJzZWRLZXkpICE9IHN0ZDo6ZW5kKG1fYXJyYXkpOworICAg
IGF1dG8gaXRlcmF0b3IgPSBzdGQ6Omxvd2VyX2JvdW5kKHN0ZDo6YmVnaW4obV9hcnJheSksIHN0
ZDo6ZW5kKG1fYXJyYXkpLCAqcGFyc2VkS2V5KTsKKyAgICByZXR1cm4gaXRlcmF0b3IgIT0gc3Rk
OjplbmQobV9hcnJheSkgJiYgKml0ZXJhdG9yID09ICpwYXJzZWRLZXk7CiB9CiAKIGNvbnN0ZXhw
ciBpbnQgc3RyY21wQ29uc3RFeHByKGNvbnN0IGNoYXIqIGEsIGNvbnN0IGNoYXIqIGIpCkBAIC0x
NzMsOCArMTk0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5lIGJv
b2wgbGVzc1RoYW5BU0NJSUNhc2VGb2xkaW5nKGNvbnN0IENoYXIKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKCFsaXRlcmFsV2l0aE5vVXBw
ZXJjYXNlW2ldKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvIGNoYXJh
Y3RlciA9IHRvQVNDSUlMb3dlcihjaGFyYWN0ZXJzW2ldKTsKLSAgICAgICAgaWYgKGNoYXJhY3Rl
ciAhPSBsaXRlcmFsV2l0aE5vVXBwZXJjYXNlW2ldKQorICAgICAgICBpZiAoYXV0byBjaGFyYWN0
ZXIgPSB0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyc1tpXSk7IGNoYXJhY3RlciAhPSBsaXRlcmFsV2l0
aE5vVXBwZXJjYXNlW2ldKQogICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlciA8IGxpdGVyYWxX
aXRoTm9VcHBlcmNhc2VbaV07CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTg3LDYgKzIw
NywyNCBAQCBpbmxpbmUgYm9vbCBsZXNzVGhhbkFTQ0lJQ2FzZUZvbGRpbmcoU3RyaW5nVmlldyBz
dHJpbmcsIGNvbnN0IGNoYXIqIGxpdGVyYWxXaXRoTgogICAgIHJldHVybiBsZXNzVGhhbkFTQ0lJ
Q2FzZUZvbGRpbmcoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCksIGxpdGVy
YWxXaXRoTm9VcHBlcmNhc2UpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBpbmxpbmUgYm9vbCBsZXNzVGhhbkFTQ0lJQ2FzZUZvbGRpbmcoY29uc3QgY2hhciogbGl0ZXJh
bFdpdGhOb1VwcGVyY2FzZSwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
eworICAgICAgICBpZiAoIWxpdGVyYWxXaXRoTm9VcHBlcmNhc2VbaV0pCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGF1dG8gY2hhcmFjdGVyID0gdG9BU0NJSUxvd2VyKGNo
YXJhY3RlcnNbaV0pOyBjaGFyYWN0ZXIgIT0gbGl0ZXJhbFdpdGhOb1VwcGVyY2FzZVtpXSkKKyAg
ICAgICAgICAgIHJldHVybiBsaXRlcmFsV2l0aE5vVXBwZXJjYXNlW2ldIDwgY2hhcmFjdGVyOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIGxlc3NUaGFuQVNDSUlD
YXNlRm9sZGluZyhjb25zdCBjaGFyKiBsaXRlcmFsV2l0aE5vVXBwZXJjYXNlLCBTdHJpbmdWaWV3
IHN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gbGVz
c1RoYW5BU0NJSUNhc2VGb2xkaW5nKGxpdGVyYWxXaXRoTm9VcHBlcmNhc2UsIHN0cmluZy5jaGFy
YWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIHJldHVybiBsZXNzVGhhbkFTQ0lJQ2Fz
ZUZvbGRpbmcobGl0ZXJhbFdpdGhOb1VwcGVyY2FzZSwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBz
dHJpbmcubGVuZ3RoKCkpOworfQorCiB0ZW1wbGF0ZTxBU0NJSVN1YnNldCBzdWJzZXQ+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPT0oQ29tcGFyYWJsZUFTQ0lJU3Vic2V0TGl0ZXJhbDxzdWJzZXQ+
IGEsIENvbXBhcmFibGVBU0NJSVN1YnNldExpdGVyYWw8c3Vic2V0PiBiKQogewogICAgIHJldHVy
biAhc3RyY21wQ29uc3RFeHByKGEubGl0ZXJhbC5jaGFyYWN0ZXJzKCksIGIubGl0ZXJhbC5jaGFy
YWN0ZXJzKCkpOwpAQCAtMjA3LDYgKzI0NSwxMSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoQ29t
cGFyYWJsZVN0cmluZ1ZpZXcgYSwgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCBiKQogICAgIHJldHVy
biBjb2RlUG9pbnRDb21wYXJlKGEuc3RyaW5nLCBiLmxpdGVyYWwuY2hhcmFjdGVycygpKSA8IDA7
CiB9CiAKK2lubGluZSBib29sIG9wZXJhdG9yPChDb21wYXJhYmxlQVNDSUlMaXRlcmFsIGEsIENv
bXBhcmFibGVTdHJpbmdWaWV3IGIpCit7CisgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoYS5s
aXRlcmFsLmNoYXJhY3RlcnMoKSwgYi5zdHJpbmcpIDwgMDsKK30KKwogaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShDb21wYXJhYmxlU3RyaW5nVmlldyBhLCBDb21wYXJhYmxlTGV0dGVyc0xpdGVyYWwg
YikKIHsKICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb25XaXRo
b3V0TGVuZ3RoKGEuc3RyaW5nLCBiLmxpdGVyYWwpOwpAQCAtMjE3LDYgKzI2MCwxMSBAQCBpbmxp
bmUgYm9vbCBvcGVyYXRvcjwoQ29tcGFyYWJsZVN0cmluZ1ZpZXcgYSwgQ29tcGFyYWJsZUxldHRl
cnNMaXRlcmFsIGIpCiAgICAgcmV0dXJuIGxlc3NUaGFuQVNDSUlDYXNlRm9sZGluZyhhLnN0cmlu
ZywgYi5saXRlcmFsKTsKIH0KIAoraW5saW5lIGJvb2wgb3BlcmF0b3I8KENvbXBhcmFibGVMZXR0
ZXJzTGl0ZXJhbCBhLCBDb21wYXJhYmxlU3RyaW5nVmlldyBiKQoreworICAgIHJldHVybiBsZXNz
VGhhbkFTQ0lJQ2FzZUZvbGRpbmcoYS5saXRlcmFsLCBiLnN0cmluZyk7Cit9CisKIGlubGluZSBi
b29sIG9wZXJhdG9yPT0oQ29tcGFyYWJsZVN0cmluZ1ZpZXcgYSwgQ29tcGFyYWJsZUNhc2VGb2xk
aW5nQVNDSUlMaXRlcmFsIGIpCiB7CiAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
YS5zdHJpbmcsIGIubGl0ZXJhbCk7CkBAIC0yMjcsNiArMjc1LDExIEBAIGlubGluZSBib29sIG9w
ZXJhdG9yPChDb21wYXJhYmxlU3RyaW5nVmlldyBhLCBDb21wYXJhYmxlQ2FzZUZvbGRpbmdBU0NJ
SUxpdGVyYWwKICAgICByZXR1cm4gbGVzc1RoYW5BU0NJSUNhc2VGb2xkaW5nKGEuc3RyaW5nLCBi
LmxpdGVyYWwpOwogfQogCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoQ29tcGFyYWJsZUNhc2VGb2xk
aW5nQVNDSUlMaXRlcmFsIGEsIENvbXBhcmFibGVTdHJpbmdWaWV3IGIpCit7CisgICAgcmV0dXJu
IGxlc3NUaGFuQVNDSUlDYXNlRm9sZGluZyhhLmxpdGVyYWwsIGIuc3RyaW5nKTsKK30KKwogdGVt
cGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KE90aGVyVHlw
ZSBhLCBDb21wYXJhYmxlU3RyaW5nVmlldyBiKQogewogICAgIHJldHVybiBiID09IGE7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>