<?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>132658</bug_id>
          
          <creation_ts>2014-05-07 12:31:58 -0700</creation_ts>
          <short_desc>Array.prototype.find and findIndex should skip holes</short_desc>
          <delta_ts>2015-05-24 12:45:52 -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>JavaScriptCore</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>145361</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Antoine Quint">graouts</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ggaren</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1007399</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-05-07 12:31:58 -0700</bug_when>
    <thetext>From: &lt;https://webkit.org/b/130966&gt; Implement Array.prototype.find()

&gt; Source/JavaScriptCore/builtins/Array.prototype.js:210
&gt; +    for (var i = 0; i &lt; length; i++) {
&gt; +        if (callback.@call(thisArg, array[i], i, array))
&gt; +            return array[i];
&gt; +    }

Should we only call the callback if &quot;i in array&quot; for sparse arrays?
&lt;http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.find&gt;

Seems to indicate it only proceeds to calling the callback if the &quot;i&quot; was present:

. Repeat, while k &lt; len
. Let Pk be ToString(k).
. Let kPresent be HasProperty(O, Pk).
. ReturnIfAbrupt(kPresent).
. If kPresent is true, then
.   . Let kValue be Get(O, Pk).
.   . ReturnIfAbrupt(kValue).
.   . Let testResult be the result of calling the [[Call]] internal method of predicate with T as thisArgument and a List containing kValue, k, and O as argumentsList.


Test:

&lt;script&gt;
function passUndefined(element, index, array) {
    return typeof element === &quot;undefined&quot;;
}

arrayWithHoles = [];
arrayWithHoles[10] = 0;
arrayWithHoles[20] = null;
arrayWithHoles[30] = false;
arrayWithHoles[40] = &quot;&quot;;
arrayWithHoles.findIndex(passUndefined); // -1
arrayWithHoles[50] = undefined;
arrayWithHoles.findIndex(passUndefined); // 50
&lt;/script&gt;

Expected: -1, 50.
Saw: 0, 0

Firefox Nightly gives the expected values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010524</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-05-20 09:51:48 -0700</bug_when>
    <thetext>Is it a problem to expose Array.prototype.find() with this bug? I winder if it should be disabled until this is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010528</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-20 09:54:24 -0700</bug_when>
    <thetext>Yes, let&apos;s disable it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010544</commentid>
    <comment_count>3</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2014-05-20 10:16:46 -0700</bug_when>
    <thetext>I&apos;ll look into this tomorrow!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010545</commentid>
    <comment_count>4</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-05-20 10:19:36 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; From: &lt;https://webkit.org/b/130966&gt; Implement Array.prototype.find()
&gt; 
&gt; &gt; Source/JavaScriptCore/builtins/Array.prototype.js:210
&gt; &gt; +    for (var i = 0; i &lt; length; i++) {
&gt; &gt; +        if (callback.@call(thisArg, array[i], i, array))
&gt; &gt; +            return array[i];
&gt; &gt; +    }
&gt; 
&gt; Should we only call the callback if &quot;i in array&quot; for sparse arrays?
&gt; &lt;http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.find&gt;

I really think all that is needed is:

    if (!(i in array))
       continue;

I just haven&apos;t had the time to try it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010553</commentid>
    <comment_count>5</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-05-20 10:29:34 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #0)
&gt; &gt; From: &lt;https://webkit.org/b/130966&gt; Implement Array.prototype.find()
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/builtins/Array.prototype.js:210
&gt; &gt; &gt; +    for (var i = 0; i &lt; length; i++) {
&gt; &gt; &gt; +        if (callback.@call(thisArg, array[i], i, array))
&gt; &gt; &gt; +            return array[i];
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; Should we only call the callback if &quot;i in array&quot; for sparse arrays?
&gt; &gt; &lt;http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.find&gt;
&gt; 
&gt; I really think all that is needed is:
&gt; 
&gt;     if (!(i in array))
&gt;        continue;
&gt; 
&gt; I just haven&apos;t had the time to try it.

That&apos;s all the needed -- the code should essentially match all the other array methods</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010560</commentid>
    <comment_count>6</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2014-05-20 10:39:20 -0700</bug_when>
    <thetext>That, and a test, I&apos;ll have a patch out within 24 hours.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010562</commentid>
    <comment_count>7</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2014-05-20 10:46:05 -0700</bug_when>
    <thetext>For .find(), I was thinking of adding a test where we count the number of callbacks to check that we indeed only call the callback where there are entries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010568</commentid>
    <comment_count>8</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-05-20 11:05:33 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; For .find(), I was thinking of adding a test where we count the number of callbacks to check that we indeed only call the callback where there are entries.

Look at the tests for other array prototype functions - you want to check the number and order of callbacks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010711</commentid>
    <comment_count>9</comment_count>
      <attachid>231819</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2014-05-21 00:57:56 -0700</bug_when>
    <thetext>Created attachment 231819
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010765</commentid>
    <comment_count>10</comment_count>
      <attachid>231819</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-21 08:23:44 -0700</bug_when>
    <thetext>Comment on attachment 231819
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010777</commentid>
    <comment_count>11</comment_count>
      <attachid>231819</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-21 09:15:25 -0700</bug_when>
    <thetext>Comment on attachment 231819
Patch

Clearing flags on attachment: 231819

Committed r169162: &lt;http://trac.webkit.org/changeset/169162&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010778</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-21 09:15:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231819</attachid>
            <date>2014-05-21 00:57:56 -0700</date>
            <delta_ts>2014-05-21 09:15:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132658-20140521095731.patch</filename>
            <type>text/plain</type>
            <size>10480</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MTc5M2JkZmY1ZTM4ZGQxOWQzMWE0OThmNzlmZmMyMDQyYWI0MTMzLi40OTk5NTUzODMzYWRhMDMw
OWM1MGI1M2MxZDg3YTFmMTM3YTc1ODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxNC0wNS0yMSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBBcnJheS5wcm90b3R5cGUuZmluZCBhbmQgZmluZEluZGV4IHNob3VsZCBz
a2lwIGhvbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzI2NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTa2lwIGhvbGVzIGluIHRoZSBhcnJheSB3aGVuIGl0ZXJhdGluZyBzdWNoIHRoYXQgY2FsbGJh
Y2sgaXNuJ3QgY2FsbGVkLgorCisgICAgICAgICogYnVpbHRpbnMvQXJyYXkucHJvdG90eXBlLmpz
OgorICAgICAgICAoZmluZCk6CisgICAgICAgIChmaW5kSW5kZXgpOgorCiAyMDE0LTA1LTIwICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIHByZWRpY3Rpb24g
cHJvcGFnYXRpb24gc2hvdWxkIGFncmVlIHdpdGggZml4dXAgcGhhc2Ugb3ZlciB0aGUgcmV0dXJu
IHR5cGUgb2YgR2V0QnlWYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9BcnJheS5wcm90b3R5cGUuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QXJyYXkucHJvdG90eXBlLmpzCmluZGV4IGVjMTA1ZTY5MjI0ZjhlYWZjMjM4NWMzMjg3YTcyZGJi
NGI2NTMwMWEuLjg1NjZhMThkOTk4N2U0YjAzNjMwOGM4ZWE2ODA3YjFlZTczN2IyOWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJheS5wcm90b3R5cGUuanMK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5LnByb3RvdHlwZS5qcwpA
QCAtMjA1LDYgKzIwNSw4IEBAIGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8p
IHsKICAgICAKICAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1l
bnRzWzFdIDogdW5kZWZpbmVkOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgaWYgKCEoaSBpbiBhcnJheSkpCisgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgaWYgKGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIGFycmF5W2ldLCBpLCBhcnJheSkpCiAg
ICAgICAgICAgICByZXR1cm4gYXJyYXlbaV07CiAgICAgfQpAQCAtMjI3LDYgKzIyOSw4IEBAIGZ1
bmN0aW9uIGZpbmRJbmRleChjYWxsYmFjayAvKiwgdGhpc0FyZyAqLykgewogICAgIAogICAgIHZh
ciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmlu
ZWQ7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAo
IShpIGluIGFycmF5KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoY2FsbGJh
Y2suQGNhbGwodGhpc0FyZywgYXJyYXlbaV0sIGksIGFycmF5KSkKICAgICAgICAgICAgIHJldHVy
biBpOwogICAgIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCAxYjgwYmIxZWFmYmY0ZjIyZDgzZGY0MWZlMTc0Y2M4OGU2NDc4
NjNhLi45YmMxYzQ4NDhmOGFjYjBmYmFmMGFmZmUyYmVmNTNhYmEwMTk1NGRmIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTQtMDUtMjEgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgQXJyYXkucHJvdG90eXBlLmZpbmQgYW5kIGZpbmRJbmRleCBzaG91bGQg
c2tpcCBob2xlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMyNjU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBqcy9hcnJheS1maW5kLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBqcy9hcnJheS1maW5k
SW5kZXgtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9hcnJheS1maW5k
LmpzOgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9hcnJheS1maW5kSW5kZXguanM6CisKIDIw
MTQtMDUtMjAgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIEVs
ZW1lbnQgd2l0aGluIGZsYXR0ZW5lZCBmcmFtZSBtYXkgdXBkYXRlIGl0cyBzY3JvbGwgc3RhdGUg
ZHVyaW5nIHRoZSBsYXlvdXQgcGhhc2Ugb2YgdGhlIHdyb25nIFJlbmRlclZpZXcKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2pzL2FycmF5LWZpbmQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
anMvYXJyYXktZmluZC1leHBlY3RlZC50eHQKaW5kZXggM2RmODZlYzc1ZDI5ZWJmYWNjZWNlNjE2
NDI2MjVhNGE4NDgxMjg1My4uZGVhYTA0YWRjMjIzODUyODgxNjQ3N2I0NWM0OGEzMTQ1YjQ1ZDJi
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMvYXJyYXktZmluZC1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvanMvYXJyYXktZmluZC1leHBlY3RlZC50eHQKQEAgLTQwLDYgKzQwLDEy
IEBAIFBBU1MgW10uZmluZChbXSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJyYXkucHJv
dG90eXBlLmZpbmQgY2FsbGJhY2sgbXVzdCBiCiBQQVNTIFtdLmZpbmQoe30pIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IEFycmF5LnByb3RvdHlwZS5maW5kIGNhbGxiYWNrIG11c3QgYmUgYSBm
dW5jdGlvbi4KIFBBU1MgW10uZmluZChudWxsKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBB
cnJheS5wcm90b3R5cGUuZmluZCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uCiBQQVNTIFtd
LmZpbmQodW5kZWZpbmVkKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcnJheS5wcm90b3R5
cGUuZmluZCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uCitmaW5kIGNhbGxiYWNrIGNhbGxl
ZCB3aXRoIGluZGV4IDEwCitmaW5kIGNhbGxiYWNrIGNhbGxlZCB3aXRoIGluZGV4IDIwCitmaW5k
IGNhbGxiYWNrIGNhbGxlZCB3aXRoIGluZGV4IDMwCitmaW5kIGNhbGxiYWNrIGNhbGxlZCB3aXRo
IGluZGV4IDQwCitmaW5kIGNhbGxiYWNrIGNhbGxlZCB3aXRoIGluZGV4IDUwCitQQVNTIG51bWJl
ck9mQ2FsbGJhY2tzSW5GaW5kSW5BcnJheVdpdGhIb2xlcygpIGlzIDUKIFBBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvanMvYXJyYXktZmluZEluZGV4LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2FycmF5
LWZpbmRJbmRleC1leHBlY3RlZC50eHQKaW5kZXggODhlYWU1NjJmZTNjMmNlYmMxMzUxNWEyOTIz
YTllYTkyY2Y0YzIyOC4uNjNmODhmYjdlNmJkNzFhZTFjMjI5MDdlOGZiYzQxZjhkMmRhNzY3NiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMvYXJyYXktZmluZEluZGV4LWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9qcy9hcnJheS1maW5kSW5kZXgtZXhwZWN0ZWQudHh0CkBAIC0xMywx
MiArMTMsMTMgQEAgUEFTUyBbdW5kZWZpbmVkLCAwLCBmYWxzZSwgJyddLmZpbmRJbmRleChwYXNz
TnVsbCkgaXMgLTEKIFBBU1MgW3VuZGVmaW5lZCwgMCwgbnVsbCwgJyddLmZpbmRJbmRleChwYXNz
RmFsc2UpIGlzIC0xCiBQQVNTIFt1bmRlZmluZWQsIDAsIG51bGwsIGZhbHNlXS5maW5kSW5kZXgo
cGFzc0VtcHR5U3RyaW5nKSBpcyAtMQogUEFTUyBbdW5kZWZpbmVkLCBudWxsLCBmYWxzZSwgJydd
LmZpbmRJbmRleChwYXNzWmVybykgaXMgLTEKLVBBU1MgKG5ldyBBcnJheSgyMCkpLmZpbmRJbmRl
eChwYXNzVW5kZWZpbmVkKSBpcyAwCi1QQVNTIGFycmF5V2l0aEhvbGVzLmZpbmRJbmRleChwYXNz
VW5kZWZpbmVkKSBpcyAwCitQQVNTIChuZXcgQXJyYXkoMjApKS5maW5kSW5kZXgocGFzc1VuZGVm
aW5lZCkgaXMgLTEKK1BBU1MgYXJyYXlXaXRoSG9sZXMuZmluZEluZGV4KHBhc3NVbmRlZmluZWQp
IGlzIC0xCiBQQVNTIGFycmF5V2l0aEhvbGVzLmZpbmRJbmRleChwYXNzWmVybykgaXMgMTAKIFBB
U1MgYXJyYXlXaXRoSG9sZXMuZmluZEluZGV4KHBhc3NOdWxsKSBpcyAyMAogUEFTUyBhcnJheVdp
dGhIb2xlcy5maW5kSW5kZXgocGFzc0ZhbHNlKSBpcyAzMAogUEFTUyBhcnJheVdpdGhIb2xlcy5m
aW5kSW5kZXgocGFzc0VtcHR5U3RyaW5nKSBpcyA0MAorUEFTUyBhcnJheVdpdGhIb2xlcy5maW5k
SW5kZXgocGFzc1VuZGVmaW5lZCkgaXMgNTAKIFBBU1MgdG9PYmplY3QoW3VuZGVmaW5lZCwgMCwg
bnVsbCwgZmFsc2UsICcnXSkuZmluZEluZGV4KHBhc3NVbmRlZmluZWQpIGlzIDAKIFBBU1MgdG9P
YmplY3QoW3VuZGVmaW5lZCwgMCwgbnVsbCwgZmFsc2UsICcnXSkuZmluZEluZGV4KHBhc3NaZXJv
KSBpcyAxCiBQQVNTIHRvT2JqZWN0KFt1bmRlZmluZWQsIDAsIG51bGwsIGZhbHNlLCAnJ10pLmZp
bmRJbmRleChwYXNzTnVsbCkgaXMgMgpAQCAtMjksNyArMzAsNyBAQCBQQVNTIHRvT2JqZWN0KFt1
bmRlZmluZWQsIDAsIGZhbHNlLCAnJ10pLmZpbmRJbmRleChwYXNzTnVsbCkgaXMgLTEKIFBBU1Mg
dG9PYmplY3QoW3VuZGVmaW5lZCwgMCwgbnVsbCwgJyddKS5maW5kSW5kZXgocGFzc0ZhbHNlKSBp
cyAtMQogUEFTUyB0b09iamVjdChbdW5kZWZpbmVkLCAwLCBudWxsLCBmYWxzZV0pLmZpbmRJbmRl
eChwYXNzRW1wdHlTdHJpbmcpIGlzIC0xCiBQQVNTIHRvT2JqZWN0KFt1bmRlZmluZWQsIG51bGws
IGZhbHNlLCAnJ10pLmZpbmRJbmRleChwYXNzWmVybykgaXMgLTEKLVBBU1MgdG9PYmplY3QobmV3
IEFycmF5KDIwKSkuZmluZEluZGV4KHBhc3NVbmRlZmluZWQpIGlzIDAKK1BBU1MgdG9PYmplY3Qo
bmV3IEFycmF5KDIwKSkuZmluZEluZGV4KHBhc3NVbmRlZmluZWQpIGlzIC0xCiBQQVNTIFswLDEs
MiwzLDQsNSw2LDcsOCw5XS5maW5kSW5kZXgoZmluZEl0ZW1BZGRlZER1cmluZ1NlYXJjaCkgaXMg
LTEKIFBBU1MgWzAsMSwyLDMsNCw1LDYsNyw4LDldLmZpbmRJbmRleChmaW5kSXRlbVJlbW92ZWRE
dXJpbmdTZWFyY2gpIGlzIC0xCiBQQVNTIEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXguY2FsbCh1
bmRlZmluZWQsIGZ1bmN0aW9uKCkge30pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFycmF5
LnByb3RvdHlwZS5maW5kSW5kZXggcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIHVuZGVmaW5l
ZC4KQEAgLTQwLDYgKzQxLDEyIEBAIFBBU1MgW10uZmluZEluZGV4KFtdKSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4IGNhbGxiCiBQQVNTIFtdLmZp
bmRJbmRleCh7fSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJyYXkucHJvdG90eXBlLmZp
bmRJbmRleCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uCiBQQVNTIFtdLmZpbmRJbmRleChu
dWxsKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4
IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbi4KIFBBU1MgW10uZmluZEluZGV4KHVuZGVmaW5l
ZCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCBj
YWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uCitmaW5kIGNhbGxiYWNrIGNhbGxlZCB3aXRoIGlu
ZGV4IDEwCitmaW5kIGNhbGxiYWNrIGNhbGxlZCB3aXRoIGluZGV4IDIwCitmaW5kIGNhbGxiYWNr
IGNhbGxlZCB3aXRoIGluZGV4IDMwCitmaW5kIGNhbGxiYWNrIGNhbGxlZCB3aXRoIGluZGV4IDQw
CitmaW5kIGNhbGxiYWNrIGNhbGxlZCB3aXRoIGluZGV4IDUwCitQQVNTIG51bWJlck9mQ2FsbGJh
Y2tzSW5GaW5kSW5kZXhJbkFycmF5V2l0aEhvbGVzKCkgaXMgNQogUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9q
cy9zY3JpcHQtdGVzdHMvYXJyYXktZmluZC5qcyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0
cy9hcnJheS1maW5kLmpzCmluZGV4IGEwYzQ3ODAzYzBjZmEwZDY5NjI1MjE0NjNkOTM3NGFkMzgw
Mjg0NTEuLjlhMGVkZTBiZjRlMTkxNmY0ZmE1Mzg3NTEzOTU4ODk4MTJlZGI2OTggMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9hcnJheS1maW5kLmpzCisrKyBiL0xheW91
dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9hcnJheS1maW5kLmpzCkBAIC00NCw2ICs0NCwxNSBAQCBh
cnJheVdpdGhIb2xlc1sxMF0gPSAwOwogYXJyYXlXaXRoSG9sZXNbMjBdID0gbnVsbDsKIGFycmF5
V2l0aEhvbGVzWzMwXSA9IGZhbHNlOwogYXJyYXlXaXRoSG9sZXNbNDBdID0gIiI7CithcnJheVdp
dGhIb2xlc1s1MF0gPSB1bmRlZmluZWQ7CitmdW5jdGlvbiBudW1iZXJPZkNhbGxiYWNrc0luRmlu
ZEluQXJyYXlXaXRoSG9sZXMoKSB7CisgICAgdmFyIGNvdW50ID0gMDsKKyAgICBhcnJheVdpdGhI
b2xlcy5maW5kKGZ1bmN0aW9uKGVsZW1lbnQsIGluZGV4LCBhcnJheSkgeworICAgICAgICBkZWJ1
ZygiZmluZCBjYWxsYmFjayBjYWxsZWQgd2l0aCBpbmRleCAiICsgaW5kZXgpOworICAgICAgICBj
b3VudCsrOworICAgIH0pOworICAgIHJldHVybiBjb3VudDsKK30KIAogc2hvdWxkQmUoIlt1bmRl
ZmluZWQsIDAsIG51bGwsIGZhbHNlLCAnJ10uZmluZChwYXNzVW5kZWZpbmVkKSIsICJ1bmRlZmlu
ZWQiKTsKIHNob3VsZEJlKCJbdW5kZWZpbmVkLCAwLCBudWxsLCBmYWxzZSwgJyddLmZpbmQocGFz
c1plcm8pIiwgIjAiKTsKQEAgLTkwLDMgKzk5LDYgQEAgc2hvdWxkVGhyb3coIltdLmZpbmQoW10p
IiwgIidUeXBlRXJyb3I6IEFycmF5LnByb3RvdHlwZS5maW5kIGNhbGxiYWNrIG11c3QgYmUgYQog
c2hvdWxkVGhyb3coIltdLmZpbmQoe30pIiwgIidUeXBlRXJyb3I6IEFycmF5LnByb3RvdHlwZS5m
aW5kIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiciKTsKIHNob3VsZFRocm93KCJbXS5maW5k
KG51bGwpIiwgIidUeXBlRXJyb3I6IEFycmF5LnByb3RvdHlwZS5maW5kIGNhbGxiYWNrIG11c3Qg
YmUgYSBmdW5jdGlvbiciKTsKIHNob3VsZFRocm93KCJbXS5maW5kKHVuZGVmaW5lZCkiLCAiJ1R5
cGVFcnJvcjogQXJyYXkucHJvdG90eXBlLmZpbmQgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9u
JyIpOworCisvLyBDYWxsYmFja3MgaW4gdGhlIGV4cGVjdGVkIG9yZGVyIGFuZCBza2lwcGluZyBo
b2xlcy4KK3Nob3VsZEJlKCJudW1iZXJPZkNhbGxiYWNrc0luRmluZEluQXJyYXlXaXRoSG9sZXMo
KSIsICI1Iik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvYXJyYXkt
ZmluZEluZGV4LmpzIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2FycmF5LWZpbmRJbmRl
eC5qcwppbmRleCBiMThmYmVmNzlkZjUxMGUzODQ5YWIzZjlkYzZlYzk4YTIwODVkZmY2Li4xNTZj
Nzc2ZGU3YjhhZjVkNjE2NzM2MmIzZTViN2FlNjdjODI3ZWFlIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9qcy9zY3JpcHQtdGVzdHMvYXJyYXktZmluZEluZGV4LmpzCisrKyBiL0xheW91dFRlc3Rz
L2pzL3NjcmlwdC10ZXN0cy9hcnJheS1maW5kSW5kZXguanMKQEAgLTQ0LDYgKzQ0LDE0IEBAIGFy
cmF5V2l0aEhvbGVzWzEwXSA9IDA7CiBhcnJheVdpdGhIb2xlc1syMF0gPSBudWxsOwogYXJyYXlX
aXRoSG9sZXNbMzBdID0gZmFsc2U7CiBhcnJheVdpdGhIb2xlc1s0MF0gPSAiIjsKK2Z1bmN0aW9u
IG51bWJlck9mQ2FsbGJhY2tzSW5GaW5kSW5kZXhJbkFycmF5V2l0aEhvbGVzKCkgeworICAgIHZh
ciBjb3VudCA9IDA7CisgICAgYXJyYXlXaXRoSG9sZXMuZmluZChmdW5jdGlvbihlbGVtZW50LCBp
bmRleCwgYXJyYXkpIHsKKyAgICAgICAgZGVidWcoImZpbmQgY2FsbGJhY2sgY2FsbGVkIHdpdGgg
aW5kZXggIiArIGluZGV4KTsKKyAgICAgICAgY291bnQrKzsKKyAgICB9KTsKKyAgICByZXR1cm4g
Y291bnQ7Cit9CiAKIHNob3VsZEJlKCJbdW5kZWZpbmVkLCAwLCBudWxsLCBmYWxzZSwgJyddLmZp
bmRJbmRleChwYXNzVW5kZWZpbmVkKSIsICIwIik7CiBzaG91bGRCZSgiW3VuZGVmaW5lZCwgMCwg
bnVsbCwgZmFsc2UsICcnXS5maW5kSW5kZXgocGFzc1plcm8pIiwgIjEiKTsKQEAgLTU1LDE0ICs2
MywxNiBAQCBzaG91bGRCZSgiW3VuZGVmaW5lZCwgMCwgZmFsc2UsICcnXS5maW5kSW5kZXgocGFz
c051bGwpIiwgIi0xIik7CiBzaG91bGRCZSgiW3VuZGVmaW5lZCwgMCwgbnVsbCwgJyddLmZpbmRJ
bmRleChwYXNzRmFsc2UpIiwgIi0xIik7CiBzaG91bGRCZSgiW3VuZGVmaW5lZCwgMCwgbnVsbCwg
ZmFsc2VdLmZpbmRJbmRleChwYXNzRW1wdHlTdHJpbmcpIiwgIi0xIik7CiBzaG91bGRCZSgiW3Vu
ZGVmaW5lZCwgbnVsbCwgZmFsc2UsICcnXS5maW5kSW5kZXgocGFzc1plcm8pIiwgIi0xIik7Ci1z
aG91bGRCZSgiKG5ldyBBcnJheSgyMCkpLmZpbmRJbmRleChwYXNzVW5kZWZpbmVkKSIsICIwIik7
CitzaG91bGRCZSgiKG5ldyBBcnJheSgyMCkpLmZpbmRJbmRleChwYXNzVW5kZWZpbmVkKSIsICIt
MSIpOwogCiAvLyBBcnJheSB3aXRoIGhvbGVzLgotc2hvdWxkQmUoImFycmF5V2l0aEhvbGVzLmZp
bmRJbmRleChwYXNzVW5kZWZpbmVkKSIsICIwIik7CitzaG91bGRCZSgiYXJyYXlXaXRoSG9sZXMu
ZmluZEluZGV4KHBhc3NVbmRlZmluZWQpIiwgIi0xIik7CiBzaG91bGRCZSgiYXJyYXlXaXRoSG9s
ZXMuZmluZEluZGV4KHBhc3NaZXJvKSIsICIxMCIpOwogc2hvdWxkQmUoImFycmF5V2l0aEhvbGVz
LmZpbmRJbmRleChwYXNzTnVsbCkiLCAiMjAiKTsKIHNob3VsZEJlKCJhcnJheVdpdGhIb2xlcy5m
aW5kSW5kZXgocGFzc0ZhbHNlKSIsICIzMCIpOwogc2hvdWxkQmUoImFycmF5V2l0aEhvbGVzLmZp
bmRJbmRleChwYXNzRW1wdHlTdHJpbmcpIiwgIjQwIik7CithcnJheVdpdGhIb2xlc1s1MF0gPSB1
bmRlZmluZWQ7CitzaG91bGRCZSgiYXJyYXlXaXRoSG9sZXMuZmluZEluZGV4KHBhc3NVbmRlZmlu
ZWQpIiwgIjUwIik7CiAKIC8vIEdlbmVyaWMgT2JqZWN0CiBzaG91bGRCZSgidG9PYmplY3QoW3Vu
ZGVmaW5lZCwgMCwgbnVsbCwgZmFsc2UsICcnXSkuZmluZEluZGV4KHBhc3NVbmRlZmluZWQpIiwg
IjAiKTsKQEAgLTc1LDcgKzg1LDcgQEAgc2hvdWxkQmUoInRvT2JqZWN0KFt1bmRlZmluZWQsIDAs
IGZhbHNlLCAnJ10pLmZpbmRJbmRleChwYXNzTnVsbCkiLCAiLTEiKTsKIHNob3VsZEJlKCJ0b09i
amVjdChbdW5kZWZpbmVkLCAwLCBudWxsLCAnJ10pLmZpbmRJbmRleChwYXNzRmFsc2UpIiwgIi0x
Iik7CiBzaG91bGRCZSgidG9PYmplY3QoW3VuZGVmaW5lZCwgMCwgbnVsbCwgZmFsc2VdKS5maW5k
SW5kZXgocGFzc0VtcHR5U3RyaW5nKSIsICItMSIpOwogc2hvdWxkQmUoInRvT2JqZWN0KFt1bmRl
ZmluZWQsIG51bGwsIGZhbHNlLCAnJ10pLmZpbmRJbmRleChwYXNzWmVybykiLCAiLTEiKTsKLXNo
b3VsZEJlKCJ0b09iamVjdChuZXcgQXJyYXkoMjApKS5maW5kSW5kZXgocGFzc1VuZGVmaW5lZCki
LCAiMCIpOworc2hvdWxkQmUoInRvT2JqZWN0KG5ldyBBcnJheSgyMCkpLmZpbmRJbmRleChwYXNz
VW5kZWZpbmVkKSIsICItMSIpOwogCiAvLyBNb2RpZmljYXRpb24gZHVyaW5nIHNlYXJjaAogc2hv
dWxkQmUoIlswLDEsMiwzLDQsNSw2LDcsOCw5XS5maW5kSW5kZXgoZmluZEl0ZW1BZGRlZER1cmlu
Z1NlYXJjaCkiLCAiLTEiKTsKQEAgLTkwLDMgKzEwMCw2IEBAIHNob3VsZFRocm93KCJbXS5maW5k
SW5kZXgoW10pIiwgIidUeXBlRXJyb3I6IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXggY2FsbGJh
Y2sKIHNob3VsZFRocm93KCJbXS5maW5kSW5kZXgoe30pIiwgIidUeXBlRXJyb3I6IEFycmF5LnBy
b3RvdHlwZS5maW5kSW5kZXggY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uJyIpOwogc2hvdWxk
VGhyb3coIltdLmZpbmRJbmRleChudWxsKSIsICInVHlwZUVycm9yOiBBcnJheS5wcm90b3R5cGUu
ZmluZEluZGV4IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiciKTsKIHNob3VsZFRocm93KCJb
XS5maW5kSW5kZXgodW5kZWZpbmVkKSIsICInVHlwZUVycm9yOiBBcnJheS5wcm90b3R5cGUuZmlu
ZEluZGV4IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiciKTsKKworLy8gQ2FsbGJhY2tzIGlu
IHRoZSBleHBlY3RlZCBvcmRlciBhbmQgc2tpcHBpbmcgaG9sZXMuCitzaG91bGRCZSgibnVtYmVy
T2ZDYWxsYmFja3NJbkZpbmRJbmRleEluQXJyYXlXaXRoSG9sZXMoKSIsICI1Iik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>