<?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>22840</bug_id>
          
          <creation_ts>2008-12-12 23:03:45 -0800</creation_ts>
          <short_desc>REGRESSION (r38349): Gmail doesn&apos;t load with profiling enabled</short_desc>
          <delta_ts>2010-02-08 00:36:50 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.gmail.com/</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="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>rik</cc>
    
    <cc>shafi.ahmad</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>102424</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-12 23:03:45 -0800</bug_when>
    <thetext>With profiling enabled, Gmail fails to load with a JS exception.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102518</commentid>
    <comment_count>1</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-14 18:10:53 -0800</bug_when>
    <thetext>This was working in r37698, but starts crashing in r37764. By r38654, it is failing with an exception.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102548</commentid>
    <comment_count>2</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-15 00:36:10 -0800</bug_when>
    <thetext>This happens even with the bytecode interpreter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103519</commentid>
    <comment_count>3</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-27 00:14:00 -0800</bug_when>
    <thetext>Oliver and I found the problem while debugging a visual difference in one of his crazy JS raytracers with profiling enabled:

http://nerget.com/rayjs/rayjs.html

The culprit is this code in BytecodeGenerator::emitCall():

    if (m_shouldEmitProfileHooks) {
        // If codegen decided to recycle func as this call&apos;s destination register,
        // we need to undo that optimization here so that func will still be around
        // for the sake of op_profile_did_call.
        if (dst == func) {
            RefPtr&lt;RegisterID&gt; protect = thisRegister;
            RefPtr&lt;RegisterID&gt; movedThisRegister = emitMove(newTemporary(), thisRegister);
            RefPtr&lt;RegisterID&gt; movedFunc = emitMove(thisRegister, func);
            
            thisRegister = movedThisRegister.release().releaseRef();
            func = movedFunc.release().releaseRef();
        }
    }

I am not quite sure why this goes wrong yet, but changing all of the callers of emitCall so that dst is always distinct from func fixes both bugs.

It seems to me that the only sane way to fix this is to ensure that dsti is distinct from func when profiling is enabled. One could also make the Node::emitCode() member function emit the profiler hook.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103521</commentid>
    <comment_count>4</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-27 00:34:06 -0800</bug_when>
    <thetext>The problematic code was introduced in r38349:

http://trac.webkit.org/changeset/38349

Geoff, do you have a suggestion about how to fix this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103524</commentid>
    <comment_count>5</comment_count>
      <attachid>26264</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-27 04:00:01 -0800</bug_when>
    <thetext>Created attachment 26264
Patch in progress

Here is a fix. The problem is that the original patch was &apos;leaking&apos; temporary registers, breaking things that rely on the fact that they can get sequential ranges of temporaries. Here is a simple example:

function g(a, b) {
    return [a.toString(), b];
}

In addition to this fix, I will add assertions that assert the sequentiality of sequential ranges of temporaries, and make tests for all node types that call emitCall() or emitConstruct().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103526</commentid>
    <comment_count>6</comment_count>
      <attachid>26265</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-27 04:22:07 -0800</bug_when>
    <thetext>Created attachment 26265
Patch in progress

Here is a patch with more assertions. Tests are coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103565</commentid>
    <comment_count>7</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-12-27 18:39:37 -0800</bug_when>
    <thetext>&lt;rdar://problem/6468077&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103567</commentid>
    <comment_count>8</comment_count>
      <attachid>26273</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-28 00:44:05 -0800</bug_when>
    <thetext>Created attachment 26273
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103568</commentid>
    <comment_count>9</comment_count>
      <attachid>26273</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-12-28 00:46:38 -0800</bug_when>
    <thetext>Comment on attachment 26273
Proposed patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103569</commentid>
    <comment_count>10</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-28 00:52:29 -0800</bug_when>
    <thetext>Landed in r39488.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188573</commentid>
    <comment_count>11</comment_count>
    <who name="Shafi">shafi.ahmad</who>
    <bug_when>2010-02-07 23:15:49 -0800</bug_when>
    <thetext>I am getting run time crash with RVCT compiler v3.1 but if the below 2 functions are compiled with RVCT compiler v2.2 it runs fine.

Functions:
----------
JSC::BytecodeGenerator::emitCall
JSC::BytecodeGenerator::emitConstruct

It looks me the run time stack gets corrupted. 
With both the RVCT compiler v2.2 and v3.1 I am getting ASSERTS 
=&gt; ASSERT(argv[argv.size() - 1]-&gt;index() == argv[argv.size() - 2]-&gt;index() + 1);
in aforesaid functions. 
Please let me know the followings 
1. &quot;op_construct/op_call requires the arguments to be a sequential range of registers&quot; Is it specific to particular compilers or platform dependent(like gcc compiler or window platform)?. On window-x86 ia not getting this assert.  
2. Is there any corner case or some particular scenario(s) where the requirements stated above may fails?

Please note that the profiling is not enabled, the command line used for compilation is armcpp --cpp --thumb --bss_threshold=0 --debug -c --cpu=Cortex-A8 --fpu=VFPv3 --fpmode=fast -O1 BytecodeGenerator.cpp 

Thanks in advance.

Regards,
Shafi</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188574</commentid>
    <comment_count>12</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-07 23:18:28 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; I am getting run time crash with RVCT compiler v3.1 but if the below 2
&gt; functions are compiled with RVCT compiler v2.2 it runs fine.
what does this have to do with this bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188579</commentid>
    <comment_count>13</comment_count>
    <who name="Shafi">shafi.ahmad</who>
    <bug_when>2010-02-07 23:42:08 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; I am getting run time crash with RVCT compiler v3.1 but if the below 2
&gt; &gt; functions are compiled with RVCT compiler v2.2 it runs fine.
&gt; what does this have to do with this bug?

Hi Oliver,
Thanks! for your quick response.

I am just curious to know why I am getting this assert
ASSERT(argv[argv.size() - 1]-&gt;index() == argv[argv.size() - 2]-&gt;index() +
1);

Regards,
Shafi</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188580</commentid>
    <comment_count>14</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-07 23:49:14 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; I am getting run time crash with RVCT compiler v3.1 but if the below 2
&gt; &gt; &gt; functions are compiled with RVCT compiler v2.2 it runs fine.
&gt; &gt; what does this have to do with this bug?
&gt; 
&gt; Hi Oliver,
&gt; Thanks! for your quick response.
&gt; 
&gt; I am just curious to know why I am getting this assert
&gt; ASSERT(argv[argv.size() - 1]-&gt;index() == argv[argv.size() - 2]-&gt;index() +
&gt; 1);
&gt; 
&gt; Regards,
&gt; Shafi

This bug is about loading gmail under the profiler -- what does a RVCT failure have to do with it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188584</commentid>
    <comment_count>15</comment_count>
    <who name="Shafi">shafi.ahmad</who>
    <bug_when>2010-02-08 00:36:50 -0800</bug_when>
    <thetext>
&gt; This bug is about loading gmail under the profiler -- what does a RVCT failure
&gt; have to do with it?


http://src.chromium.org/viewvc/chrome/trunk/deps/third_party/WebKit/JavaScriptCore/ChangeLog?view=markup&amp;pathrev=8041

2008-12-28  Cameron Zwarich  &lt;cwzwarich@uwaterloo.ca&gt;

        Reviewed by Oliver Hunt.

        Bug 22840: REGRESSION (r38349): Gmail doesn&apos;t load with profiling enabled
        &lt;https://bugs.webkit.org/show_bug.cgi?id=22840&gt;
        &lt;rdar://problem/6468077&gt;

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitNewArray): Add an assertion that the range
        of registers passed to op_new_array is sequential.
        (JSC::BytecodeGenerator::emitCall): Correct the relocation of registers
        when emitting profiler hooks so that registers aren&apos;t leaked. Also, add
        an assertion that the &apos;this&apos; register is always ref&apos;d (because it is),
        remove the needless protection of the &apos;this&apos; register when relocating,
        and add an assertion that the range of registers passed to op_call for
        function call arguments is sequential.
        (JSC::BytecodeGenerator::emitConstruct): Correct the relocation of
        registers when emitting profiler hooks so that registers aren&apos;t leaked.
        Also, add an assertion that the range of registers passed to op_construct
        for function call arguments is sequential.

In the above comment you have posted comments to add an assertion that the range of registers passed to op_call/op_construct for function call arguments is sequential. 
So, I want to know what are the scenarios where this assert will come.

Thanks and regards,
Shafi</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26264</attachid>
            <date>2008-12-27 04:00:01 -0800</date>
            <delta_ts>2008-12-27 04:22:07 -0800</delta_ts>
            <desc>Patch in progress</desc>
            <filename>profiler.diff</filename>
            <type>text/plain</type>
            <size>1353</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMzk0ODUpCisrKyBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjM3
LDYgKzEyMzcsNyBAQAogICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX2NhbGxfZXZhbCk7CiAgICAgQVNTRVJUKGZ1bmMtPnJlZkNvdW50KCkpOwogCisgICAg
UmVnaXN0ZXJJRCogb3JpZ2luYWxGdW5jID0gZnVuYzsKICAgICBpZiAobV9zaG91bGRFbWl0UHJv
ZmlsZUhvb2tzKSB7CiAgICAgICAgIC8vIElmIGNvZGVnZW4gZGVjaWRlZCB0byByZWN5Y2xlIGZ1
bmMgYXMgdGhpcyBjYWxsJ3MgZGVzdGluYXRpb24gcmVnaXN0ZXIsCiAgICAgICAgIC8vIHdlIG5l
ZWQgdG8gdW5kbyB0aGF0IG9wdGltaXphdGlvbiBoZXJlIHNvIHRoYXQgZnVuYyB3aWxsIHN0aWxs
IGJlIGFyb3VuZApAQCAtMTI5MCw3ICsxMjkxLDcgQEAKICAgICAgICAgZW1pdE9wY29kZShvcF9w
cm9maWxlX2RpZF9jYWxsKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmlu
ZGV4KCkpOwogCi0gICAgICAgIGlmIChkc3QgPT0gZnVuYykgeworICAgICAgICBpZiAoZHN0ID09
IG9yaWdpbmFsRnVuYykgewogICAgICAgICAgICAgdGhpc1JlZ2lzdGVyLT5kZXJlZigpOwogICAg
ICAgICAgICAgZnVuYy0+ZGVyZWYoKTsKICAgICAgICAgfQpAQCAtMTMyMSw2ICsxMzIyLDcgQEAK
IHsKICAgICBBU1NFUlQoZnVuYy0+cmVmQ291bnQoKSk7CiAKKyAgICBSZWdpc3RlcklEKiBvcmln
aW5hbEZ1bmMgPSBmdW5jOwogICAgIGlmIChtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MpIHsKICAg
ICAgICAgLy8gSWYgY29kZWdlbiBkZWNpZGVkIHRvIHJlY3ljbGUgZnVuYyBhcyB0aGlzIGNhbGwn
cyBkZXN0aW5hdGlvbiByZWdpc3RlciwKICAgICAgICAgLy8gd2UgbmVlZCB0byB1bmRvIHRoYXQg
b3B0aW1pemF0aW9uIGhlcmUgc28gdGhhdCBmdW5jIHdpbGwgc3RpbGwgYmUgYXJvdW5kCkBAIC0x
Mzc4LDcgKzEzODAsNyBAQAogICAgICAgICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfZGlkX2NhbGwp
OwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7CiAgICAgICAg
IAotICAgICAgICBpZiAoZHN0ID09IGZ1bmMpCisgICAgICAgIGlmIChkc3QgPT0gb3JpZ2luYWxG
dW5jKQogICAgICAgICAgICAgZnVuYy0+ZGVyZWYoKTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26265</attachid>
            <date>2008-12-27 04:22:07 -0800</date>
            <delta_ts>2008-12-28 00:44:05 -0800</delta_ts>
            <desc>Patch in progress</desc>
            <filename>profiler.diff</filename>
            <type>text/plain</type>
            <size>2387</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMzk0ODUpCisrKyBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg4
LDYgKzExODgsNyBAQAogICAgICAgICBpZiAobi0+ZWxpc2lvbigpKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGFyZ3YuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKKyAgICAgICAgQVNTRVJU
KGFyZ3Yuc2l6ZSgpID09IDEgfHwgYXJndlthcmd2LnNpemUoKSAtIDFdLT5pbmRleCgpID09IGFy
Z3ZbYXJndi5zaXplKCkgLSAyXS0+aW5kZXgoKSArIDEpOwogICAgICAgICBlbWl0Tm9kZShhcmd2
Lmxhc3QoKS5nZXQoKSwgbi0+dmFsdWUoKSk7CiAgICAgfQogICAgIGVtaXRPcGNvZGUob3BfbmV3
X2FycmF5KTsKQEAgLTEyMzYsNyArMTIzNyw5IEBACiB7CiAgICAgQVNTRVJUKG9wY29kZUlEID09
IG9wX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKTsKICAgICBBU1NFUlQoZnVuYy0+
cmVmQ291bnQoKSk7CisgICAgQVNTRVJUKHRoaXNSZWdpc3Rlci0+cmVmQ291bnQoKSk7CiAKKyAg
ICBSZWdpc3RlcklEKiBvcmlnaW5hbEZ1bmMgPSBmdW5jOwogICAgIGlmIChtX3Nob3VsZEVtaXRQ
cm9maWxlSG9va3MpIHsKICAgICAgICAgLy8gSWYgY29kZWdlbiBkZWNpZGVkIHRvIHJlY3ljbGUg
ZnVuYyBhcyB0aGlzIGNhbGwncyBkZXN0aW5hdGlvbiByZWdpc3RlciwKICAgICAgICAgLy8gd2Ug
bmVlZCB0byB1bmRvIHRoYXQgb3B0aW1pemF0aW9uIGhlcmUgc28gdGhhdCBmdW5jIHdpbGwgc3Rp
bGwgYmUgYXJvdW5kCkBAIC0xMjU2LDYgKzEyNTksNyBAQAogICAgIGFyZ3YuYXBwZW5kKHRoaXNS
ZWdpc3Rlcik7CiAgICAgZm9yIChBcmd1bWVudExpc3ROb2RlKiBuID0gYXJndW1lbnRzTm9kZS0+
bV9saXN0Tm9kZS5nZXQoKTsgbjsgbiA9IG4tPm1fbmV4dC5nZXQoKSkgewogICAgICAgICBhcmd2
LmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7CisgICAgICAgIEFTU0VSVChhcmd2W2FyZ3Yuc2l6ZSgp
IC0gMV0tPmluZGV4KCkgPT0gYXJndlthcmd2LnNpemUoKSAtIDJdLT5pbmRleCgpICsgMSk7CiAg
ICAgICAgIGVtaXROb2RlKGFyZ3YubGFzdCgpLmdldCgpLCBuKTsKICAgICB9CiAKQEAgLTEyOTAs
NyArMTI5NCw3IEBACiAgICAgICAgIGVtaXRPcGNvZGUob3BfcHJvZmlsZV9kaWRfY2FsbCk7CiAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsKIAotICAgICAgICBp
ZiAoZHN0ID09IGZ1bmMpIHsKKyAgICAgICAgaWYgKGRzdCA9PSBvcmlnaW5hbEZ1bmMpIHsKICAg
ICAgICAgICAgIHRoaXNSZWdpc3Rlci0+ZGVyZWYoKTsKICAgICAgICAgICAgIGZ1bmMtPmRlcmVm
KCk7CiAgICAgICAgIH0KQEAgLTEzMjEsNiArMTMyNSw3IEBACiB7CiAgICAgQVNTRVJUKGZ1bmMt
PnJlZkNvdW50KCkpOwogCisgICAgUmVnaXN0ZXJJRCogb3JpZ2luYWxGdW5jID0gZnVuYzsKICAg
ICBpZiAobV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKSB7CiAgICAgICAgIC8vIElmIGNvZGVnZW4g
ZGVjaWRlZCB0byByZWN5Y2xlIGZ1bmMgYXMgdGhpcyBjYWxsJ3MgZGVzdGluYXRpb24gcmVnaXN0
ZXIsCiAgICAgICAgIC8vIHdlIG5lZWQgdG8gdW5kbyB0aGF0IG9wdGltaXphdGlvbiBoZXJlIHNv
IHRoYXQgZnVuYyB3aWxsIHN0aWxsIGJlIGFyb3VuZApAQCAtMTMzOCw2ICsxMzQzLDcgQEAKICAg
ICBhcmd2LmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0aGlz
IgogICAgIGZvciAoQXJndW1lbnRMaXN0Tm9kZSogbiA9IGFyZ3VtZW50c05vZGUgPyBhcmd1bWVu
dHNOb2RlLT5tX2xpc3ROb2RlLmdldCgpIDogMDsgbjsgbiA9IG4tPm1fbmV4dC5nZXQoKSkgewog
ICAgICAgICBhcmd2LmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7CisgICAgICAgIEFTU0VSVChhcmd2
W2FyZ3Yuc2l6ZSgpIC0gMV0tPmluZGV4KCkgPT0gYXJndlthcmd2LnNpemUoKSAtIDJdLT5pbmRl
eCgpICsgMSk7CiAgICAgICAgIGVtaXROb2RlKGFyZ3YubGFzdCgpLmdldCgpLCBuKTsKICAgICB9
CiAKQEAgLTEzNzgsNyArMTM4NCw3IEBACiAgICAgICAgIGVtaXRPcGNvZGUob3BfcHJvZmlsZV9k
aWRfY2FsbCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChkc3QgPT0gZnVuYykKKyAgICAgICAgaWYgKGRzdCA9PSBv
cmlnaW5hbEZ1bmMpCiAgICAgICAgICAgICBmdW5jLT5kZXJlZigpOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26273</attachid>
            <date>2008-12-28 00:44:05 -0800</date>
            <delta_ts>2008-12-28 00:46:38 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>profiler.diff</filename>
            <type>text/plain</type>
            <size>8866</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5NDg3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMDgtMTItMjggIENhbWVyb24g
WndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDIyODQwOiBSRUdSRVNTSU9OIChyMzgzNDkp
OiBHbWFpbCBkb2Vzbid0IGxvYWQgd2l0aCBwcm9maWxpbmcgZW5hYmxlZAorICAgICAgICA8aHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODQwPgorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNjQ2ODA3Nz4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3QXJy
YXkpOiBBZGQgYW4gYXNzZXJ0aW9uIHRoYXQgdGhlIHJhbmdlCisgICAgICAgIG9mIHJlZ2lzdGVy
cyBwYXNzZWQgdG8gb3BfbmV3X2FycmF5IGlzIHNlcXVlbnRpYWwuCisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCk6IENvcnJlY3QgdGhlIHJlbG9jYXRpb24gb2YgcmVn
aXN0ZXJzCisgICAgICAgIHdoZW4gZW1pdHRpbmcgcHJvZmlsZXIgaG9va3Mgc28gdGhhdCByZWdp
c3RlcnMgYXJlbid0IGxlYWtlZC4gQWxzbywgYWRkCisgICAgICAgIGFuIGFzc2VydGlvbiB0aGF0
IHRoZSAndGhpcycgcmVnaXN0ZXIgaXMgYWx3YXlzIHJlZidkIChiZWNhdXNlIGl0IGlzKSwKKyAg
ICAgICAgcmVtb3ZlIHRoZSBuZWVkbGVzcyBwcm90ZWN0aW9uIG9mIHRoZSAndGhpcycgcmVnaXN0
ZXIgd2hlbiByZWxvY2F0aW5nLAorICAgICAgICBhbmQgYWRkIGFuIGFzc2VydGlvbiB0aGF0IHRo
ZSByYW5nZSBvZiByZWdpc3RlcnMgcGFzc2VkIHRvIG9wX2NhbGwgZm9yCisgICAgICAgIGZ1bmN0
aW9uIGNhbGwgYXJndW1lbnRzIGlzIHNlcXVlbnRpYWwuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q29uc3RydWN0KTogQ29ycmVjdCB0aGUgcmVsb2NhdGlvbiBvZgorICAg
ICAgICByZWdpc3RlcnMgd2hlbiBlbWl0dGluZyBwcm9maWxlciBob29rcyBzbyB0aGF0IHJlZ2lz
dGVycyBhcmVuJ3QgbGVha2VkLgorICAgICAgICBBbHNvLCBhZGQgYW4gYXNzZXJ0aW9uIHRoYXQg
dGhlIHJhbmdlIG9mIHJlZ2lzdGVycyBwYXNzZWQgdG8gb3BfY29uc3RydWN0CisgICAgICAgIGZv
ciBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cyBpcyBzZXF1ZW50aWFsLgorCiAyMDA4LTEyLTI2ICBN
YXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5
IFByb3NrdXJ5YWtvdi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMzk0ODcpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTg4LDYgKzExODgsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Fy
CiAgICAgICAgIGlmIChuLT5lbGlzaW9uKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
YXJndi5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOworICAgICAgICAvLyBvcF9uZXdfYXJyYXkgcmVx
dWlyZXMgdGhlIGluaXRpYWwgdmFsdWVzIHRvIGJlIGEgc2VxdWVudGlhbCByYW5nZSBvZiByZWdp
c3RlcnMKKyAgICAgICAgQVNTRVJUKGFyZ3Yuc2l6ZSgpID09IDEgfHwgYXJndlthcmd2LnNpemUo
KSAtIDFdLT5pbmRleCgpID09IGFyZ3ZbYXJndi5zaXplKCkgLSAyXS0+aW5kZXgoKSArIDEpOwog
ICAgICAgICBlbWl0Tm9kZShhcmd2Lmxhc3QoKS5nZXQoKSwgbi0+dmFsdWUoKSk7CiAgICAgfQog
ICAgIGVtaXRPcGNvZGUob3BfbmV3X2FycmF5KTsKQEAgLTEyMzYsMTMgKzEyMzgsMTQgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKAogewogICAgIEFTU0VSVChvcGNv
ZGVJRCA9PSBvcF9jYWxsIHx8IG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCk7CiAgICAgQVNTRVJU
KGZ1bmMtPnJlZkNvdW50KCkpOworICAgIEFTU0VSVCh0aGlzUmVnaXN0ZXItPnJlZkNvdW50KCkp
OwogCisgICAgUmVnaXN0ZXJJRCogb3JpZ2luYWxGdW5jID0gZnVuYzsKICAgICBpZiAobV9zaG91
bGRFbWl0UHJvZmlsZUhvb2tzKSB7CiAgICAgICAgIC8vIElmIGNvZGVnZW4gZGVjaWRlZCB0byBy
ZWN5Y2xlIGZ1bmMgYXMgdGhpcyBjYWxsJ3MgZGVzdGluYXRpb24gcmVnaXN0ZXIsCiAgICAgICAg
IC8vIHdlIG5lZWQgdG8gdW5kbyB0aGF0IG9wdGltaXphdGlvbiBoZXJlIHNvIHRoYXQgZnVuYyB3
aWxsIHN0aWxsIGJlIGFyb3VuZAogICAgICAgICAvLyBmb3IgdGhlIHNha2Ugb2Ygb3BfcHJvZmls
ZV9kaWRfY2FsbC4KICAgICAgICAgaWYgKGRzdCA9PSBmdW5jKSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcHJvdGVjdCA9IHRoaXNSZWdpc3RlcjsKICAgICAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBtb3ZlZFRoaXNSZWdpc3RlciA9IGVtaXRNb3ZlKG5ld1RlbXBvcmFyeSgp
LCB0aGlzUmVnaXN0ZXIpOwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1vdmVkRnVu
YyA9IGVtaXRNb3ZlKHRoaXNSZWdpc3RlciwgZnVuYyk7CiAgICAgICAgICAgICAKQEAgLTEyNTYs
NiArMTI1OSw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCgKICAg
ICBhcmd2LmFwcGVuZCh0aGlzUmVnaXN0ZXIpOwogICAgIGZvciAoQXJndW1lbnRMaXN0Tm9kZSog
biA9IGFyZ3VtZW50c05vZGUtPm1fbGlzdE5vZGUuZ2V0KCk7IG47IG4gPSBuLT5tX25leHQuZ2V0
KCkpIHsKICAgICAgICAgYXJndi5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOworICAgICAgICAvLyBv
cF9jYWxsIHJlcXVpcmVzIHRoZSBhcmd1bWVudHMgdG8gYmUgYSBzZXF1ZW50aWFsIHJhbmdlIG9m
IHJlZ2lzdGVycworICAgICAgICBBU1NFUlQoYXJndlthcmd2LnNpemUoKSAtIDFdLT5pbmRleCgp
ID09IGFyZ3ZbYXJndi5zaXplKCkgLSAyXS0+aW5kZXgoKSArIDEpOwogICAgICAgICBlbWl0Tm9k
ZShhcmd2Lmxhc3QoKS5nZXQoKSwgbik7CiAgICAgfQogCkBAIC0xMjkwLDcgKzEyOTUsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoCiAgICAgICAgIGVtaXRPcGNv
ZGUob3BfcHJvZmlsZV9kaWRfY2FsbCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChm
dW5jLT5pbmRleCgpKTsKIAotICAgICAgICBpZiAoZHN0ID09IGZ1bmMpIHsKKyAgICAgICAgaWYg
KGRzdCA9PSBvcmlnaW5hbEZ1bmMpIHsKICAgICAgICAgICAgIHRoaXNSZWdpc3Rlci0+ZGVyZWYo
KTsKICAgICAgICAgICAgIGZ1bmMtPmRlcmVmKCk7CiAgICAgICAgIH0KQEAgLTEzMjEsNiArMTMy
Niw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3QKIHsKICAgICBB
U1NFUlQoZnVuYy0+cmVmQ291bnQoKSk7CiAKKyAgICBSZWdpc3RlcklEKiBvcmlnaW5hbEZ1bmMg
PSBmdW5jOwogICAgIGlmIChtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MpIHsKICAgICAgICAgLy8g
SWYgY29kZWdlbiBkZWNpZGVkIHRvIHJlY3ljbGUgZnVuYyBhcyB0aGlzIGNhbGwncyBkZXN0aW5h
dGlvbiByZWdpc3RlciwKICAgICAgICAgLy8gd2UgbmVlZCB0byB1bmRvIHRoYXQgb3B0aW1pemF0
aW9uIGhlcmUgc28gdGhhdCBmdW5jIHdpbGwgc3RpbGwgYmUgYXJvdW5kCkBAIC0xMzM4LDYgKzEz
NDQsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiAgICAgYXJn
di5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKICAg
ICBmb3IgKEFyZ3VtZW50TGlzdE5vZGUqIG4gPSBhcmd1bWVudHNOb2RlID8gYXJndW1lbnRzTm9k
ZS0+bV9saXN0Tm9kZS5nZXQoKSA6IDA7IG47IG4gPSBuLT5tX25leHQuZ2V0KCkpIHsKICAgICAg
ICAgYXJndi5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOworICAgICAgICAvLyBvcF9jb25zdHJ1Y3Qg
cmVxdWlyZXMgdGhlIGFyZ3VtZW50cyB0byBiZSBhIHNlcXVlbnRpYWwgcmFuZ2Ugb2YgcmVnaXN0
ZXJzCisgICAgICAgIEFTU0VSVChhcmd2W2FyZ3Yuc2l6ZSgpIC0gMV0tPmluZGV4KCkgPT0gYXJn
dlthcmd2LnNpemUoKSAtIDJdLT5pbmRleCgpICsgMSk7CiAgICAgICAgIGVtaXROb2RlKGFyZ3Yu
bGFzdCgpLmdldCgpLCBuKTsKICAgICB9CiAKQEAgLTEzNzgsNyArMTM4Niw3IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3QKICAgICAgICAgZW1pdE9wY29kZShvcF9w
cm9maWxlX2RpZF9jYWxsKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmlu
ZGV4KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGRzdCA9PSBmdW5jKQorICAgICAgICBpZiAo
ZHN0ID09IG9yaWdpbmFsRnVuYykKICAgICAgICAgICAgIGZ1bmMtPmRlcmVmKCk7CiAgICAgfQog
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAzOTQ4NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDA4LTEyLTI4ICBDYW1lcm9uIFp3YXJpY2gg
IDx6d2FyaWNoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgdGVzdHMgZm9yIGJ1ZyAyMjg0MDogUkVHUkVTU0lPTiAocjM4MzQ5
KTogR21haWwgZG9lc24ndCBsb2FkIHdpdGggcHJvZmlsaW5nIGVuYWJsZWQKKyAgICAgICAgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg0MD4KKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY0NjgwNzc+CisKKyAgICAgICAgKiBmYXN0L3Byb2ZpbGVyL2NhbGwtcmVn
aXN0ZXItbGVhay1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvcHJvZmlsZXIv
Y2FsbC1yZWdpc3Rlci1sZWFrLmh0bWw6IEFkZGVkLgorCiAyMDA4LTEyLTI3ICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBTdWdnZXN0ZWQgYnkgRGF2ZSBM
ZXZpbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXIvY2FsbC1yZWdpc3Rlci1sZWFr
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyL2Nh
bGwtcmVnaXN0ZXItbGVhay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3Byb2ZpbGVyL2NhbGwtcmVnaXN0ZXItbGVhay1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTcgQEAKK1RoaXMgcGFnZSB0ZXN0cyB0aGF0IHRoZSBnZW5lcmF0aW9u
IG9mIGJ5dGVjb2RlIGFsbG9jYXRlcyByZWdpc3RlcnMgY29ycmVjdGx5IHdoZW4gcHJvZmlsaW5n
IGlzIGVuYWJsZWQuIFRvIHJ1biB0aGUgdGVzdCBtYW51YWxseSwgZW5hYmxlIHByb2ZpbGluZyBp
biB0aGUgd2ViIGluc3BlY3RvciBhbmQgcmVsb2FkIHRoaXMgcGFnZS4KKworUEFTUzogbG9jYWxD
YWxsVGVzdCgxLCAyKSBzaG91bGQgYmUgMiBhbmQgaXMuCisKK1BBU1M6IGdsb2JhbENhbGxUZXN0
KDEsIDIpIHNob3VsZCBiZSAyIGFuZCBpcy4KKworUEFTUzogc2NvcGVkQ2FsbFRlc3QoMSwgMikg
c2hvdWxkIGJlIDIgYW5kIGlzLgorCitQQVNTOiByZXNvbHZlQ2FsbFRlc3QoMSwgMikgc2hvdWxk
IGJlIDIgYW5kIGlzLgorCitQQVNTOiBicmFja2V0Q2FsbFRlc3QoMSwgMikgc2hvdWxkIGJlIDIg
YW5kIGlzLgorCitQQVNTOiBkb3RDYWxsVGVzdCgxLCAyKSBzaG91bGQgYmUgMiBhbmQgaXMuCisK
K1BBU1M6IG5ld1Rlc3QoMSwgMikgc2hvdWxkIGJlIDIgYW5kIGlzLgorCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvcHJvZmlsZXIvY2FsbC1yZWdpc3Rlci1sZWFrLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci9jYWxsLXJlZ2lzdGVyLWxlYWsuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXIvY2FsbC1yZWdpc3Rlci1sZWFr
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA1IEBACis8Ym9keT4KKzxoZWFkPgorPHNj
cmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0SmF2
YVNjcmlwdFByb2ZpbGluZ0VuYWJsZWQodHJ1ZSk7Cit9CisKK2Z1bmN0aW9uIGxvZyhzKQorewor
ICAgIGlmICh0aGlzLmRvY3VtZW50KQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y29uc29sZSIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMgKyAiXG4iKSk7
CisgICAgZWxzZQorICAgICAgICBwcmludChzICsgIlxuIik7Cit9CisKK2Z1bmN0aW9uIHNob3Vs
ZEJlKGEsIGFEZXNjcmlwdGlvbiwgYikKK3sKKyAgICBpZiAoYSA9PT0gYikKKyAgICAgICAgbG9n
KCJQQVNTOiAiICsgYURlc2NyaXB0aW9uICsgIiBzaG91bGQgYmUgIiArIGIgKyAiIGFuZCBpcy5c
biIpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCJGQUlMOiAiICsgYURlc2NyaXB0aW9uICsgIiBz
aG91bGQgYmUgIiArIGIgKyAiIGJ1dCBpbnN0ZWFkIGlzICIgKyBhICsgIi5cbiIpOworfQorCitm
dW5jdGlvbiBsb2NhbENhbGxUZXN0KGEsIGIpCit7CisgICAgZnVuY3Rpb24gbG9jYWxDYWxsKG8p
CisgICAgeworICAgICAgICByZXR1cm4gby50b1N0cmluZygpOworICAgIH0KKyAgICByZXR1cm4g
W2xvY2FsQ2FsbChhKSwgYl1bMV07Cit9CisKK2Z1bmN0aW9uIGdsb2JhbENhbGwobykKK3sKKyAg
ICByZXR1cm4gby50b1N0cmluZygpOworfQorCitmdW5jdGlvbiBnbG9iYWxDYWxsVGVzdChhLCBi
KQoreworICAgIHJldHVybiBbZ2xvYmFsQ2FsbChhKSwgYl1bMV07Cit9CisKK2Z1bmN0aW9uIHNj
b3BlZENhbGxUZXN0KGEsIGIpCit7CisgICAgZnVuY3Rpb24gc2NvcGVkQ2FsbChvKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG8udG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBbc2NvcGVkQ2FsbChhKSwgYl1bMV07CisgICAgfQorCisg
ICAgcmV0dXJuIGYoKTsKK30KKworZnVuY3Rpb24gcmVzb2x2ZUNhbGxUZXN0KGEsIGIpCit7Cisg
ICAgbyA9IHsgcmVzb2x2ZWRDYWxsOiBmdW5jdGlvbihvKSB7IHJldHVybiBvLnRvU3RyaW5nKCk7
IH19OworICAgIHdpdGggKG8pIHsKKyAgICAgICAgcmV0dXJuIFtyZXNvbHZlZENhbGwobyksIGJd
WzFdOworICAgIH0KK30KKworZnVuY3Rpb24gYnJhY2tldENhbGxUZXN0KGEsIGIpCit7CisgICAg
cmV0dXJuIFthWyJ0b1N0cmluZyJdKCksIGJdWzFdOworfQorCitmdW5jdGlvbiBkb3RDYWxsVGVz
dChhLCBiKQoreworICAgIHJldHVybiBbYS50b1N0cmluZygpLCBiXVsxXTsKK30KKworZnVuY3Rp
b24gdGVzdENvbnN0cnVjdG9yKG8pCit7CisgICAgcmV0dXJuIG8udG9TdHJpbmcoKTsKK30KKwor
ZnVuY3Rpb24gbmV3VGVzdChhLCBiKQoreworICAgIHJldHVybiBbbmV3IHRlc3RDb25zdHJ1Y3Rv
cihhKSwgYl1bMV07Cit9CisKK2Z1bmN0aW9uIHN0YXJ0VGVzdCgpCit7CisgICAgc2hvdWxkQmUo
bG9jYWxDYWxsVGVzdCgxLCAyKSwgImxvY2FsQ2FsbFRlc3QoMSwgMikiLCAyKTsKKyAgICBzaG91
bGRCZShnbG9iYWxDYWxsVGVzdCgxLCAyKSwgImdsb2JhbENhbGxUZXN0KDEsIDIpIiwgMik7Cisg
ICAgc2hvdWxkQmUoc2NvcGVkQ2FsbFRlc3QoMSwgMiksICJzY29wZWRDYWxsVGVzdCgxLCAyKSIs
IDIpOworICAgIHNob3VsZEJlKHJlc29sdmVDYWxsVGVzdCgxLCAyKSwgInJlc29sdmVDYWxsVGVz
dCgxLCAyKSIsIDIpOworICAgIHNob3VsZEJlKGJyYWNrZXRDYWxsVGVzdCgxLCAyKSwgImJyYWNr
ZXRDYWxsVGVzdCgxLCAyKSIsIDIpOworICAgIHNob3VsZEJlKGRvdENhbGxUZXN0KDEsIDIpLCAi
ZG90Q2FsbFRlc3QoMSwgMikiLCAyKTsKKyAgICBzaG91bGRCZShuZXdUZXN0KDEsIDIpLCAibmV3
VGVzdCgxLCAyKSIsIDIpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InN0
YXJ0VGVzdCgpIj4KKzxwPgorVGhpcyBwYWdlIHRlc3RzIHRoYXQgdGhlIGdlbmVyYXRpb24gb2Yg
Ynl0ZWNvZGUgYWxsb2NhdGVzIHJlZ2lzdGVycyBjb3JyZWN0bHkgd2hlbiBwcm9maWxpbmcgaXMg
ZW5hYmxlZC4gVG8gcnVuIHRoZSB0ZXN0IG1hbnVhbGx5LCBlbmFibGUgcHJvZmlsaW5nIGluIHRo
ZSB3ZWIgaW5zcGVjdG9yIGFuZCByZWxvYWQgdGhpcyBwYWdlLgorPC9wPgorPHByZSBpZD0iY29u
c29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="12433"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>