<?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>15698</bug_id>
          
          <creation_ts>2007-10-25 19:07:24 -0700</creation_ts>
          <short_desc>Optimize toPrimitive / toNumber conversions for 0.5% gain on SunSpider</short_desc>
          <delta_ts>2007-10-25 21:48:00 -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>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>59482</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-25 19:07:24 -0700</bug_when>
    <thetext>Optimize toPrimitive / toNumber conversions for 0.5% gain on SunSpider</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59483</commentid>
    <comment_count>1</comment_count>
      <attachid>16871</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-25 19:07:57 -0700</bug_when>
    <thetext>Created attachment 16871
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59485</commentid>
    <comment_count>2</comment_count>
      <attachid>16871</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-25 19:25:22 -0700</bug_when>
    <thetext>Comment on attachment 16871
patch

There must be some script for generating JavaScriptCore.exp, since I see you reordering the symbol I put in the wrong place (maybe you just used sort..)

I don&apos;t know why GetterSetterImp&apos;s ASSERT on primative calls, but I haven&apos;t looked at the code, looks like the other primative calls do too.

wasNotString1 would make more sense to me as v1IsNumber or something, or n1isValid, or something non-negative.

JSObject::getPrimativeNumber seems overly complicated.  I guess defaultValues for primitives can change?  (I can just go look at the code...)

Hum... isn&apos;t this wrong?

+    if (JSImmediate::isImmediate(this)) {
+        number = JSImmediate::toDouble(this);


it should be isNumber(this) no?  Otherwise you&apos;ll call toDouble on jsUndefined(), no?

Assuming you&apos;ve run-javascriptcore-tests and fast/js (and you answer my unsigned query), this is fine.  I can mark it r+ when you reappear on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59486</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-25 19:25:50 -0700</bug_when>
    <thetext>jsUndefined() query, rather.  Gosh I&apos;m tired.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59490</commentid>
    <comment_count>4</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-25 20:33:04 -0700</bug_when>
    <thetext>getPrimitiveNumber() never fails. It *always* converts to number. The boolean return does not indicate whether it succeeded. It only indicates that this value did *not* have a preference for turning into a string instead of a number when converting toPrimitive() with a number hint. (I realize that&apos;s a little fruity, but that is pretty much the rule that less and lessEq require.)

To address specific points:

(In reply to comment #2)
&gt; (From update of attachment 16871 [edit])
&gt; There must be some script for generating JavaScriptCore.exp, since I see you
&gt; reordering the symbol I put in the wrong place (maybe you just used sort..)

I used M-x sort-lines in emacs.
 
&gt; I don&apos;t know why GetterSetterImp&apos;s ASSERT on primative calls, but I haven&apos;t
&gt; looked at the code, looks like the other primative calls do too.

GetterSetterImp only exists to have a garbage-collectable thing to put in the property map. It is never exposed to JavaScript, so the toPrimitive and related conversions can never actually be called in practice.

&gt; wasNotString1 would make more sense to me as v1IsNumber or something, or
&gt; n1isValid, or something non-negative.

The problem here is that the meaning is weird. All it says is that the value that was converted *didn&apos;t* prefer string. Maybe v1PrefersNumber?

&gt; JSObject::getPrimativeNumber seems overly complicated.  I guess defaultValues
&gt; for primitives can change?  (I can just go look at the code...)

It&apos;s just doing the combination of what JSObject::toPrimitive() and toNumber() on the result would do (plus checking whether a string was preferred).
 
&gt; Hum... isn&apos;t this wrong?
&gt; 
&gt; +    if (JSImmediate::isImmediate(this)) {
&gt; +        number = JSImmediate::toDouble(this);
&gt; 
&gt; 
&gt; it should be isNumber(this) no?  Otherwise you&apos;ll call toDouble on
&gt; jsUndefined(), no?

No, that&apos;s correct. All immediates prefer numeric conversion over string, and toDouble gives the right numeric equivalent.

&gt; Assuming you&apos;ve run-javascriptcore-tests and fast/js (and you answer my
&gt; unsigned query), this is fine.  I can mark it r+ when you reappear on IRC.

I did run JavaScriptCore tests. About to run layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59491</commentid>
    <comment_count>5</comment_count>
      <attachid>16871</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-10-25 21:03:30 -0700</bug_when>
    <thetext>Comment on attachment 16871
patch

r=me assuming all the layout tests pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59493</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-10-25 21:48:00 -0700</bug_when>
    <thetext>This was landed in r27086.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16871</attachid>
            <date>2007-10-25 19:07:57 -0700</date>
            <delta_ts>2007-10-25 21:03:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>faster-less.patch.txt</filename>
            <type>text/plain</type>
            <size>11696</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI3MDc4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDctMTAt
MjUgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGZvbGQgdG9nZXRoZXIgdG9QcmltaXRp
dmUoKSBhbmQgdG9OdW1iZXIoKSBjb252ZXJzaW9ucyBmb3IgMC41JSBnYWluIG9uIFN1blNwaWRl
cgorCisgICAgICAgICoga2pzL25vZGVzLmNwcDoKKyAgICAgICAgKEtKUzo6U3ViTm9kZTo6ZXZh
bHVhdGUpOiBTdWJ0cmFjdCBkaXJlY3RseSwgc2luY2UgdG9QcmltaXRpdmUoKSBpcyBub3QKKyAg
ICAgICAgYWRkaW5nIGFueSB2YWx1ZSBvdmVyIHRvTnVtYmVyKCkgaGVyZS4KKyAgICAgICAgKEtK
Uzo6dmFsdWVGb3JSZWFkTW9kaWZ5QXNzaWdubWVudCk6IERpdHRvLgorICAgICAgICAoS0pTOjps
ZXNzVGhhbik6IFVzZSBuZXcgZ2V0UHJpbWl0aXZlTnVtYmVyKCkgbWV0aG9kIHRvIGF2b2lkIHNv
bWUgdmlydHVhbCBjYWxscworICAgICAgICBhbmQgYnJhbmNoZXMuCisgICAgICAgIChLSlM6Omxl
c3NUaGFuRXEpOiBEaXR0by4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6IEV4cG9ydCBu
ZXcgZnVuY3Rpb25zIGFzIG5lZWRlZC4KKyAgICAgICAgKiBranMvdmFsdWUuaDoKKyAgICAgICAg
KEtKUzo6SlNWYWx1ZTo6dG9QcmltaXRpdmUpOiBGaXhlZCBmb3JtYXR0aW5nLgorICAgICAgICAo
S0pTOjpKU1ZhbHVlOjpnZXRQcmltaXRpdmVOdW1iZXIpOiBOZXcgbWV0aG9kIC0gdGhpcyBzaW11
bHRhbmVvdXNseSBjb252ZXJ0cworICAgICAgICB0byBudW1iZXIgYW5kIHRlbGxzIHlvdSB3aGV0
aGVyIGEgdG9QcmltaXRpdmUoKSBjb252ZXJzaW9uIHdpdGggYSBOdW1iZXIgaGludAorICAgICAg
ICB3b3VsZCBoYXZlIGdpdmVuIGEgc3RyaW5nLgorICAgICAgICAqIGtqcy9pbnRlcm5hbC5jcHA6
CisgICAgICAgIChLSlM6OlN0cmluZ0ltcDo6Z2V0UHJpbWl0aXZlTnVtYmVyKTogSW1wbGVtZW50
ZWQuIAorICAgICAgICAoS0pTOjpOdW1iZXJJbXA6OmdldFByaW1pdGl2ZU51bWJlcik6IGRpdHRv
CisgICAgICAgIChLSlM6OkdldHRlclNldHRlckltcDo6Z2V0UHJpbWl0aXZlTnVtYmVyKTogZGl0
dG8KKyAgICAgICAgKEtKUzo6U3RyaW5nSW1wOjp0b1ByaW1pdGl2ZSk6IEZpeGVkIGZvcm1hdHRp
bmcuCisgICAgICAgIChLSlM6Ok51bWJlckltcDo6dG9QcmltaXRpdmUpOiBkaXR0bworICAgICAg
ICAoS0pTOjpHZXR0ZXJTZXR0ZXJJbXA6OnRvUHJpbWl0aXZlKTogZGl0dG8KKyAgICAgICAgKiBr
anMvaW50ZXJuYWwuaDoKKyAgICAgICAgKiBranMvb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6
SlNPYmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcik6IEltcGxlbWVudGVkLgorICAgICAgICAqIGtq
cy9vYmplY3QuaDoKKwogMjAwNy0xMC0yNSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogSmF2YVNjcmlw
dENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gMjcw
NzgpCisrKyBKYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw4ICsxMjMs
OCBAQCBfX1pOM0tKUzExSW50ZXJwcmV0ZXI2c19ob29rRQogX19aTjNLSlMxMUludGVycHJldGVy
OGV2YWx1YXRlRVJLTlNfN1VTdHJpbmdFaVBLTlNfNVVDaGFyRWlQTlNfN0pTVmFsdWVFCiBfX1pO
M0tKUzExSW50ZXJwcmV0ZXI4ZXZhbHVhdGVFUktOU183VVN0cmluZ0VpUzNfUE5TXzdKU1ZhbHVl
RQogX19aTjNLSlMxMUludGVycHJldGVyQzFFUE5TXzE0SlNHbG9iYWxPYmplY3RFCi1fX1pOM0tK
UzExSW50ZXJwcmV0ZXJDMkVQTlNfMTRKU0dsb2JhbE9iamVjdEUKIF9fWk4zS0pTMTFJbnRlcnBy
ZXRlckMxRXYKK19fWk4zS0pTMTFJbnRlcnByZXRlckMyRVBOU18xNEpTR2xvYmFsT2JqZWN0RQog
X19aTjNLSlMxMUludGVycHJldGVyRDFFdgogX19aTjNLSlMxMUludGVycHJldGVyRDJFdgogX19a
TjNLSlMxMUpTSW1tZWRpYXRlNHR5cGVFUEtOU183SlNWYWx1ZUUKQEAgLTI2NCw2ICsyNjQsNyBA
QCBfX1pOSzNLSlM4QmluZGluZ3M4SW5zdGFuY2UxMHJvb3RPYmplY3RFCiBfX1pOSzNLSlM4SlNP
YmplY3QxMWhhc1Byb3BlcnR5RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQogX19a
TkszS0pTOEpTT2JqZWN0MTJkZWZhdWx0VmFsdWVFUE5TXzlFeGVjU3RhdGVFTlNfNkpTVHlwZUUK
IF9fWk5LM0tKUzhKU09iamVjdDE0aW1wbGVtZW50c0NhbGxFdgorX19aTkszS0pTOEpTT2JqZWN0
MThnZXRQcmltaXRpdmVOdW1iZXJFUE5TXzlFeGVjU3RhdGVFUmQKIF9fWk5LM0tKUzhKU09iamVj
dDE5aW1wbGVtZW50c0NvbnN0cnVjdEV2CiBfX1pOSzNLSlM4SlNPYmplY3QyMWltcGxlbWVudHNI
YXNJbnN0YW5jZUV2CiBfX1pOSzNLSlM4SlNPYmplY3QzZ2V0RVBOU185RXhlY1N0YXRlRVJLTlNf
MTBJZGVudGlmaWVyRQpJbmRleDoga2pzL2ludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMv
aW50ZXJuYWwuY3BwCShyZXZpc2lvbiAyNzA3OCkKKysrIGtqcy9pbnRlcm5hbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDkgKzU1LDE1IEBAIG5hbWVzcGFjZSBLSlMgewogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RyaW5nSW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1KU1ZhbHVlICpTdHJpbmdJbXA6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0
ZSAqLCBKU1R5cGUpIGNvbnN0CitKU1ZhbHVlKiBTdHJpbmdJbXA6OnRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSosIEpTVHlwZSkgY29uc3QKIHsKLSAgcmV0dXJuIGNvbnN0X2Nhc3Q8U3RyaW5nSW1wICo+
KHRoaXMpOworICByZXR1cm4gY29uc3RfY2FzdDxTdHJpbmdJbXAqPih0aGlzKTsKK30KKworYm9v
bCBTdHJpbmdJbXA6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJl
cikgY29uc3QKK3sKKyAgICBudW1iZXIgPSB2YWwudG9Eb3VibGUoKTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIGJvb2wgU3RyaW5nSW1wOjp0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0CkBA
IC04Miw5ICs4OCwxNSBAQCBKU09iamVjdCogU3RyaW5nSW1wOjp0b09iamVjdChFeGVjU3RhdGUg
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJJbXAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUpTVmFsdWUgKk51bWJlckltcDo6dG9Qcmlt
aXRpdmUoRXhlY1N0YXRlICosIEpTVHlwZSkgY29uc3QKK0pTVmFsdWUqIE51bWJlckltcDo6dG9Q
cmltaXRpdmUoRXhlY1N0YXRlKiwgSlNUeXBlKSBjb25zdAogewotICByZXR1cm4gY29uc3RfY2Fz
dDxOdW1iZXJJbXAgKj4odGhpcyk7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8TnVtYmVySW1wKj4o
dGhpcyk7Cit9CisKK2Jvb2wgTnVtYmVySW1wOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRl
KiwgZG91YmxlJiBudW1iZXIpIGNvbnN0Cit7CisgICAgbnVtYmVyID0gdmFsOworICAgIHJldHVy
biB0cnVlOwogfQogCiBib29sIE51bWJlckltcDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25z
dApAQCAtMTQ0LDEyICsxNTYsMTkgQEAgdm9pZCBHZXR0ZXJTZXR0ZXJJbXA6Om1hcmsoKQogICAg
ICAgICBzZXR0ZXItPm1hcmsoKTsKIH0KIAotSlNWYWx1ZSAqR2V0dGVyU2V0dGVySW1wOjp0b1By
aW1pdGl2ZShFeGVjU3RhdGUqLCBKU1R5cGUpIGNvbnN0CitKU1ZhbHVlKiBHZXR0ZXJTZXR0ZXJJ
bXA6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIEpTVHlwZSkgY29uc3QKIHsKICAgICBBU1NFUlQo
ZmFsc2UpOwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAorYm9vbCBHZXR0ZXJTZXR0ZXJJbXA6
OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlcikgY29uc3QKK3sK
KyAgICBBU1NFUlQoZmFsc2UpOworICAgIG51bWJlciA9IDA7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIGJvb2wgR2V0dGVyU2V0dGVySW1wOjp0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3QKIHsK
ICAgICBBU1NFUlQoZmFsc2UpOwpJbmRleDoga2pzL2ludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2pzL2ludGVybmFsLmgJKHJldmlzaW9uIDI3MDc4KQorKysga2pzL2ludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDcgKzUzLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICBKU1R5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZ1R5cGU7IH0KIAotICAgIEpTVmFsdWUgKnRvUHJp
bWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgSlNUeXBlIHByZWZlcnJlZCA9IFVuc3BlY2lmaWVkVHlw
ZSkgY29uc3Q7CisgICAgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgSlNUeXBlIHBy
ZWZlcnJlZCA9IFVuc3BlY2lmaWVkVHlwZSkgY29uc3Q7CisgICAgYm9vbCBnZXRQcmltaXRpdmVO
dW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIpIGNvbnN0OwogICAgIGJvb2wgdG9Cb29s
ZWFuKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0
ZSAqZXhlYykgY29uc3Q7CiAgICAgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNv
bnN0OwpAQCAtNzEsNyArNzIsOCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgIEpTVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gTnVtYmVyVHlwZTsgfQogCi0gICAgSlNWYWx1ZSAqdG9QcmltaXRp
dmUoRXhlY1N0YXRlICpleGVjLCBKU1R5cGUgcHJlZmVycmVkID0gVW5zcGVjaWZpZWRUeXBlKSBj
b25zdDsKKyAgICBKU1ZhbHVlKiB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBKU1R5cGUgcHJlZmVy
cmVkID0gVW5zcGVjaWZpZWRUeXBlKSBjb25zdDsKKyAgICBib29sIGdldFByaW1pdGl2ZU51bWJl
cihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlcikgY29uc3Q7CiAgICAgYm9vbCB0b0Jvb2xlYW4o
RXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlICpl
eGVjKSBjb25zdDsKICAgICBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7
CkluZGV4OiBranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5jcHAJKHJldmlz
aW9uIDI3MDc4KQorKysga2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0MCwxNCAr
MTI0MCw2IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSAqYWRkKEV4ZWNTdGF0ZSAqZXgKICAgICBy
ZXR1cm4ganNOdW1iZXIocDEtPnRvTnVtYmVyKGV4ZWMpICsgcDItPnRvTnVtYmVyKGV4ZWMpKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlICpzdWIoRXhlY1N0YXRlICpleGVjLCBKU1ZhbHVl
ICp2MSwgSlNWYWx1ZSAqdjIpCi17Ci0gICAgSlNWYWx1ZSAqcDEgPSB2MS0+dG9QcmltaXRpdmUo
ZXhlYywgTnVtYmVyVHlwZSk7Ci0gICAgSlNWYWx1ZSAqcDIgPSB2Mi0+dG9QcmltaXRpdmUoZXhl
YywgTnVtYmVyVHlwZSk7Ci0KLSAgICByZXR1cm4ganNOdW1iZXIocDEtPnRvTnVtYmVyKGV4ZWMp
IC0gcDItPnRvTnVtYmVyKGV4ZWMpKTsKLX0KLQogLy8gRUNNQSAxMS42LjEKIEpTVmFsdWUgKkFk
ZE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKQEAgLTEyNzAsNyArMTI2Miw3IEBA
IEpTVmFsdWUgKlN1Yk5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXgKICAgICBKU1ZhbHVlICp2
MiA9IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQog
ICAgICAgICAKLSAgICByZXR1cm4gc3ViKGV4ZWMsIHYxLCB2Mik7CisgICAgcmV0dXJuIGpzTnVt
YmVyKHYxLT50b051bWJlcihleGVjKSAtIHYyLT50b051bWJlcihleGVjKSk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTaGlmdCBOb2RlcyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzMTgsMjQgKzEzMTAsMjggQEAgSlNWYWx1ZSAqVW5z
aWduZWRSaWdodFNoaWZ0Tm9kZTo6ZXZhbHVhdAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUqIGxl
c3NUaGFuKEV4ZWNTdGF0ZSAqZXhlYywgSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKSAKIHsKLSAg
SlNWYWx1ZSAqcDEgPSB2MS0+dG9QcmltaXRpdmUoZXhlYywgTnVtYmVyVHlwZSk7Ci0gIEpTVmFs
dWUgKnAyID0gdjItPnRvUHJpbWl0aXZlKGV4ZWMsIE51bWJlclR5cGUpOwotICAgIAotICBpZiAo
cDEtPmlzU3RyaW5nKCkgJiYgcDItPmlzU3RyaW5nKCkpCi0gICAgcmV0dXJuIGpzQm9vbGVhbihw
MS0+dG9TdHJpbmcoZXhlYykgPCBwMi0+dG9TdHJpbmcoZXhlYykpOworICAgIGRvdWJsZSBuMTsK
KyAgICBkb3VibGUgbjI7CisgICAgYm9vbCB3YXNOb3RTdHJpbmcxID0gdjEtPmdldFByaW1pdGl2
ZU51bWJlcihleGVjLCBuMSk7CisgICAgYm9vbCB3YXNOb3RTdHJpbmcyID0gdjItPmdldFByaW1p
dGl2ZU51bWJlcihleGVjLCBuMik7CiAgICAgCi0gIHJldHVybiBqc0Jvb2xlYW4ocDEtPnRvTnVt
YmVyKGV4ZWMpIDwgcDItPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICBpZiAod2FzTm90U3RyaW5nMSB8
IHdhc05vdFN0cmluZzIpCisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4objEgPCBuMik7CisKKyAg
ICByZXR1cm4ganNCb29sZWFuKHYxLT50b1N0cmluZyhleGVjKSA8IHYyLT50b1N0cmluZyhleGVj
KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSogbGVzc1RoYW5FcShFeGVjU3RhdGUgKmV4
ZWMsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikgCiB7Ci0gIEpTVmFsdWUgKnAxID0gdjEtPnRv
UHJpbWl0aXZlKGV4ZWMsIE51bWJlclR5cGUpOwotICBKU1ZhbHVlICpwMiA9IHYyLT50b1ByaW1p
dGl2ZShleGVjLCBOdW1iZXJUeXBlKTsKKyAgICBkb3VibGUgbjE7CisgICAgZG91YmxlIG4yOwor
ICAgIGJvb2wgd2FzTm90U3RyaW5nMSA9IHYxLT5nZXRQcmltaXRpdmVOdW1iZXIoZXhlYywgbjEp
OworICAgIGJvb2wgd2FzTm90U3RyaW5nMiA9IHYyLT5nZXRQcmltaXRpdmVOdW1iZXIoZXhlYywg
bjIpOwogICAgIAotICBpZiAocDEtPmlzU3RyaW5nKCkgJiYgcDItPmlzU3RyaW5nKCkpCi0gICAg
cmV0dXJuIGpzQm9vbGVhbighKHAyLT50b1N0cmluZyhleGVjKSA8IHAxLT50b1N0cmluZyhleGVj
KSkpOworICAgIGlmICh3YXNOb3RTdHJpbmcxIHwgd2FzTm90U3RyaW5nMikKKyAgICAgICAgcmV0
dXJuIGpzQm9vbGVhbihuMSA8PSBuMik7CiAKLSAgcmV0dXJuIGpzQm9vbGVhbihwMS0+dG9OdW1i
ZXIoZXhlYykgPD0gcDItPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKCEo
djItPnRvU3RyaW5nKGV4ZWMpIDwgdjEtPnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKIC8vIEVDTUEg
MTEuOC4xCkBAIC0xNTY0LDcgKzE1NjAsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVl
ICp2YWx1ZUZvclJlCiAgICAgdiA9IGFkZChleGVjLCB2MSwgdjIpOwogICAgIGJyZWFrOwogICBj
YXNlIE9wTWludXNFcToKLSAgICB2ID0gc3ViKGV4ZWMsIHYxLCB2Mik7CisgICAgdiA9IGpzTnVt
YmVyKHYxLT50b051bWJlcihleGVjKSAtIHYyLT50b051bWJlcihleGVjKSk7CiAgICAgYnJlYWs7
CiAgIGNhc2UgT3BMU2hpZnQ6CiAgICAgaTEgPSB2MS0+dG9JbnQzMihleGVjKTsKSW5kZXg6IGtq
cy9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9vYmplY3QuY3BwCShyZXZpc2lvbiAyNzA3
OCkKKysrIGtqcy9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNiArMzU0LDEzIEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgKnRyeUdldEFuZEMKICAgcmV0dXJuIE5VTEw7
CiB9CiAKK2Jvb2wgSlNPYmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMs
IGRvdWJsZSYgbnVtYmVyKSBjb25zdAoreworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGRlZmF1bHRW
YWx1ZShleGVjLCBOdW1iZXJUeXBlKTsKKyAgICBudW1iZXIgPSByZXN1bHQtPnRvTnVtYmVyKGV4
ZWMpOworICAgIHJldHVybiAhcmVzdWx0LT5pc1N0cmluZygpOworfQorCiAvLyBFQ01BIDguNi4y
LjYKIEpTVmFsdWUqIEpTT2JqZWN0OjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1R5
cGUgaGludCkgY29uc3QKIHsKSW5kZXg6IGtqcy9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMv
b2JqZWN0LmgJKHJldmlzaW9uIDI3MDc4KQorKysga2pzL29iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw3ICs4Myw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgCiAgICAgR2V0dGVyU2V0
dGVySW1wKCkgOiBnZXR0ZXIoMCksIHNldHRlcigwKSB7IH0KICAgICAgIAotICAgIHZpcnR1YWwg
SlNWYWx1ZSAqdG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBKU1R5cGUgcHJlZmVycmVkID0g
VW5zcGVjaWZpZWRUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIHRvUHJpbWl0aXZl
KEV4ZWNTdGF0ZSosIEpTVHlwZSBwcmVmZXJyZWQgPSBVbnNwZWNpZmllZFR5cGUpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBu
dW1iZXIpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVj
KSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUgKmV4ZWMpIGNv
bnN0OwogICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0
OwpAQCAtNDE2LDcgKzQxNyw4IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgdmlydHVhbCB2b2lk
IGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKIAotICAg
IHZpcnR1YWwgSlNWYWx1ZSAqdG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBKU1R5cGUgcHJl
ZmVycmVkVHlwZSA9IFVuc3BlY2lmaWVkVHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVl
KiB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBKU1R5cGUgcHJlZmVycmVkVHlwZSA9IFVuc3BlY2lm
aWVkVHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVj
U3RhdGUqLCBkb3VibGUmIG51bWJlcikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHRvQm9vbGVh
bihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4
ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNT
dGF0ZSAqZXhlYykgY29uc3Q7CkluZGV4OiBranMvdmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMv
dmFsdWUuaAkocmV2aXNpb24gMjcwNzgpCisrKyBranMvdmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtODEsNyArODEsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBnZXRUcnVuY2F0ZWRVSW50MzIodWlu
dDMyX3QmKSBjb25zdDsKIAogICAgIC8vIEJhc2ljIGNvbnZlcnNpb25zLgotICAgIEpTVmFsdWUg
KnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgSlNUeXBlIHByZWZlcnJlZFR5cGUgPSBVbnNw
ZWNpZmllZFR5cGUpIGNvbnN0OworICAgIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNUeXBlIHByZWZlcnJlZFR5cGUgPSBVbnNwZWNpZmllZFR5cGUpIGNvbnN0OworICAg
IGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlJiBudW1iZXIp
IGNvbnN0OworCiAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAg
ICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBVU3RyaW5nIHRv
U3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CkBAIC0xNDcsNiArMTQ5LDcgQEAgcHVibGlj
OgogCiAgICAgLy8gQmFzaWMgY29udmVyc2lvbnMuCiAgICAgdmlydHVhbCBKU1ZhbHVlICp0b1By
aW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIEpTVHlwZSBwcmVmZXJyZWRUeXBlID0gVW5zcGVjaWZp
ZWRUeXBlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihF
eGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSYgbnVtYmVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIHRvQm9vbGVhbihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGRv
dWJsZSB0b051bWJlcihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFVT
dHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdCA9IDA7CkBAIC0zNjUsOSArMzY4
LDE4IEBAIGlubGluZSBKU1R5cGUgSlNWYWx1ZTo6dHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIEpT
SW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh0aGlzKSA/IEpTSW1tZWRpYXRlOjp0eXBlKHRoaXMpIDog
YXNDZWxsKCktPnR5cGUoKTsKIH0KIAotaW5saW5lIEpTVmFsdWUgKkpTVmFsdWU6OnRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSAqZXhlYywgSlNUeXBlIHByZWZlcnJlZFR5cGUpIGNvbnN0CitpbmxpbmUg
SlNWYWx1ZSogSlNWYWx1ZTo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1R5cGUgcHJl
ZmVycmVkVHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRl
KHRoaXMpID8gY29uc3RfY2FzdDxKU1ZhbHVlKj4odGhpcykgOiBhc0NlbGwoKS0+dG9QcmltaXRp
dmUoZXhlYywgcHJlZmVycmVkVHlwZSk7Cit9CisKK2lubGluZSBib29sIEpTVmFsdWU6OmdldFBy
aW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSYgbnVtYmVyKSBjb25zdAogewot
ICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhpcykgPyBjb25zdF9jYXN0PEpT
VmFsdWUgKj4odGhpcykgOiBhc0NlbGwoKS0+dG9QcmltaXRpdmUoZXhlYywgcHJlZmVycmVkVHlw
ZSk7CisgICAgaWYgKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh0aGlzKSkgeworICAgICAgICBu
dW1iZXIgPSBKU0ltbWVkaWF0ZTo6dG9Eb3VibGUodGhpcyk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gYXNDZWxsKCktPmdldFByaW1pdGl2ZU51bWJlcihleGVjLCBu
dW1iZXIpOwogfQogCiBpbmxpbmUgYm9vbCBKU1ZhbHVlOjp0b0Jvb2xlYW4oRXhlY1N0YXRlICpl
eGVjKSBjb25zdAo=
</data>
<flag name="review"
          id="7145"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>