<?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>41238</bug_id>
          
          <creation_ts>2010-06-25 17:21:21 -0700</creation_ts>
          <short_desc>RegExp performance slow on Dromaeo benchmark</short_desc>
          <delta_ts>2010-06-29 15:01:44 -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>Mac</rep_platform>
          <op_sys>OS X 10.6</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="Michael Saboff">msaboff</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>243269</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-06-25 17:21:21 -0700</bug_when>
    <thetext>Other javascript engines appear to cache prior results of regular expression operations.

Suggest adding some sort of caching mechanism to regular expression processing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243503</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-27 14:40:28 -0700</bug_when>
    <thetext>See also: bug 37908, bug 38828 (I don&apos;t know to what degree they are related, if any).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243928</commentid>
    <comment_count>2</comment_count>
      <attachid>59949</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-06-28 15:04:31 -0700</bug_when>
    <thetext>Created attachment 59949
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243936</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-28 15:09:00 -0700</bug_when>
    <thetext>Attachment 59949 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/UString.h:163:  One space before end of line comments  [whitespace/comments] [5]
JavaScriptCore/ChangeLog:7:  Line contains tab character.  [whitespace/tab] [5]
JavaScriptCore/runtime/RegExp.cpp:129:  One line control clauses should not use braces.  [whitespace/braces] [4]
JavaScriptCore/runtime/RegExp.cpp:131:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 4 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243943</commentid>
    <comment_count>4</comment_count>
      <attachid>59949</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-28 15:20:38 -0700</bug_when>
    <thetext>Comment on attachment 59949
The patch

This looks great!

&gt; +    , m_lastMatchStr(UString::null())

This shouldn&apos;t be needed. A UString will start out null.

&gt; +    , m_lastMatchStart(-1)
&gt;  {
&gt; +    m_lastOVector.resize(0);

This shouldn&apos;t be needed. The vector should start out empty.

&gt; +    , m_lastMatchStr(UString::null())

This shouldn&apos;t be needed. A UString will start out null.

&gt; +    , m_lastMatchStart(-1)
&gt;  {
&gt; +    m_lastOVector.resize(0);

This shouldn&apos;t be needed. The vector should start out empty.

&gt; +        m_lastMatchStr = UString::null();

I think this should just be:

    m_lastMatchStr = UString();

You should check which is more efficient, but I think my form is.

&gt; +        m_lastOVector.resize(0);

It&apos;s more efficient to call shrink(0) than resize(0).

&gt; +    // Check to see if this match call is the same as the last match invocation

We normally use sentence style for comments, with a period.

&gt; +    if ((startOffset == m_lastMatchStart) &amp;&amp; (s.rep() == m_lastMatchStr.rep())) {

We normally

&gt; +        if (ovector) {
&gt; +            (Vector&lt;int, 32&gt;&amp;)*ovector = (Vector&lt;int, 32&gt;&amp;)m_lastOVector;
&gt; +        }

I don&apos;t understand why you need these typecasts. They should not be needed.

Also, we don&apos;t use braces around single line if statement bodies. It should be:

    if (ovector)
        *ovector = m_lastOVector;

&gt; +        if (m_lastOVector.isEmpty())
&gt; +            return -1;
&gt; +        else
&gt; +            return m_lastOVector.at(0);

We normally don&apos;t do else after return, so the else should be removed.

&gt; +        if (ovector)
&gt; +            (Vector&lt;int, 32&gt;&amp;)m_lastOVector = (Vector&lt;int, 32&gt;&amp;)*ovector;
&gt; +        else
&gt; +            (Vector&lt;int, 32&gt;&amp;)m_lastOVector = (Vector&lt;int, 32&gt;&amp;)nonReturnedOvector;

Same comments about typecasts.

&gt;          unsigned m_numSubpatterns;
&gt; +        UString m_lastMatchStr;

We normally try to avoid abbreviations. So I suggest you either call this m_lastMatchString or m_lastMatch and leave out the &quot;str&quot;.

&gt;      ALWAYS_INLINE bool operator==(const UString&amp; s1, const UString&amp; s2)
&gt;      {
&gt;          unsigned size = s1.size();
&gt; +        
&gt; +        if (size != s2.size())      // Sizes not the same, we&apos;re done.
&gt; +            return false;
&gt; +            
&gt; +        if (s1.data() == s2.data()) // Quick check of data pointers being the same.
&gt; +            return true;

Another way to do this optimization is to check if s1.rep() is == s2.rep(). That would be more efficient than the repeated calls to data() this function has. And I think it should be relatively rare to have the two data pointers to match if they are not the exact same rep. You could put the rep check before the size check, in fact.

review- because I think you should do at least one of the things I suggested above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243968</commentid>
    <comment_count>5</comment_count>
      <attachid>59949</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-06-28 16:04:59 -0700</bug_when>
    <thetext>Comment on attachment 59949
The patch

Hey Michael,

As discussed:

* There is a tab in the changelog,
* Please remove the initialization of m_lastMatchStr &amp; the call to resize on m_lastOVector from the RegExp constructor.
* Please remove redundant braces &amp; else in the code checking the cache.
* Re the UString change, instrumenting &amp; checking if a comparison of the rep()s rather than a compare of data() sounded like a good plan.

As discussed, this code can be made much cleaner by both removing the output param &amp; never resizing the array to zero – but I agree with you that this would be better done as a separate patch.

Also, one other thing I missed,

&gt; Are all the (Vector&lt;int, 32&gt;&amp;) casts necessary? - could you check if these are still needed? – if the coding style requires a static_cast&lt;&gt; here instead of a C-style case (which could silently be doing nasties like casting away constness).

Oh, a second last thought! - I&apos;m tempted to suggest ASSERTs in the switch statements, where you have removed the checks of size – these may just make it more obvious to someone else coming to the code why the lack of check is safe.  What do you think?

r-ing this for now, please attach a new patch with the fixes above.
cheers, G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244036</commentid>
    <comment_count>6</comment_count>
      <attachid>59974</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-06-28 18:54:37 -0700</bug_when>
    <thetext>Created attachment 59974
Updated patch.

Patch with updates in response to review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244377</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 10:47:45 -0700</bug_when>
    <thetext>Attachment 59974 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/UString.h:166:  One space before end of line comments  [whitespace/comments] [5]
JavaScriptCore/runtime/UString.h:175:  One space before end of line comments  [whitespace/comments] [5]
JavaScriptCore/runtime/UString.h:178:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/runtime/UString.h:197:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 4 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244379</commentid>
    <comment_count>8</comment_count>
      <attachid>59974</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-29 10:51:32 -0700</bug_when>
    <thetext>Comment on attachment 59974
Updated patch.

Looks great.

&gt; +        Refactored Vector&lt;&gt;::operator=() method into a separate copy() method 
&gt; +        that it calls.  The copy() method is explicitly used for deep copying.

I don&apos;t understand this change. Why can&apos;t we use the assignment operator directly?

One small problem I see with adding a copy function is that in WebKit functions with copy in their name are typically functions that return a copy of an object or some sort of new object. So using the name copy for a function with no return value that copies data into an object is a bit non-standard and thus possibly confusing.

&gt; +    m_lastMatchString = UString::null();
&gt; +    m_lastMatchStart = -1;
&gt; +    m_lastOVector.resize(0);

This site needs the UString() and shrink(0) changes we made earlier in the same file.

&gt;      template&lt;typename T, size_t inlineCapacity&gt;
&gt;      Vector&lt;T, inlineCapacity&gt;&amp; Vector&lt;T, inlineCapacity&gt;::operator=(const Vector&lt;T, inlineCapacity&gt;&amp; other)
&gt;      {
&gt; +        if (&amp;other != this)
&gt; +            copy(other);
&gt; +        
&gt; +        return *this;
&gt; +    }

I think this should be marked inline. We don&apos;t want to add another level of function call here.

&gt; +    template&lt;typename T, size_t inlineCapacity&gt; template&lt;size_t otherCapacity&gt;
&gt; +    void Vector&lt;T, inlineCapacity&gt;::copy(const Vector&lt;T, otherCapacity&gt;&amp; other)
&gt; +    {
&gt;          if (&amp;other == this)
&gt; -            return *this;
&gt; +            return;

Both the copy function and the assignment operator are doing this check. That seems like overkill to me unless there&apos;s a reason I&apos;m missing this needs to be done.

review- because I don&apos;t want to add this copy function unless there&apos;s a good reason to do so, and the patch doesn&apos;t give a reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244398</commentid>
    <comment_count>9</comment_count>
      <attachid>60039</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-06-29 11:32:06 -0700</bug_when>
    <thetext>Created attachment 60039
Latest revised patch

Eliminated Vector.h changes.  Cleaned up two review bot issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244401</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 11:33:50 -0700</bug_when>
    <thetext>Attachment 60039 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/UString.h:178:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/runtime/UString.h:197:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244406</commentid>
    <comment_count>11</comment_count>
      <attachid>60039</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-29 11:40:53 -0700</bug_when>
    <thetext>Comment on attachment 60039
Latest revised patch

ChangeLog was mismerged here. This removed some change log entries. Because of that, I set commit-queue- on this patch.

&gt; +        if (size1 == 0)
&gt; +            return true;

One strange thing about WebKit style is that we write such this as:

    if (!size1)
        return true;

And the style bot is telling you about that.

&gt; -            return s2.size() == size &amp;&amp; memcmp(s1.data(), s2.data(), size * sizeof(UChar)) == 0;
&gt; +            return memcmp(d1, d2, size1 * sizeof(UChar)) == 0;

The style bot has the same complaint on the existing code on this line (not something you added). I personally think memcmp is an exception. I find it easier to read calls to memcmp and strcmp if there is an &quot;== 0&quot; to mean &quot;==&quot; or &quot;!= 0&quot; to mean &quot;!=&quot; or even &quot;&lt; 0&quot; to mean &quot;&lt;&quot;.

r=me as is if we fix the change log before committing, but you could consider using !size1 to make the style bot happy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244487</commentid>
    <comment_count>12</comment_count>
      <attachid>60054</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-06-29 14:27:49 -0700</bug_when>
    <thetext>Created attachment 60054
Patch with updated ChangeLog and minor fix.

ChangeLog and style bot fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244490</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 14:33:46 -0700</bug_when>
    <thetext>Attachment 60054 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/UString.h:197:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244510</commentid>
    <comment_count>14</comment_count>
      <attachid>60054</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-29 15:01:39 -0700</bug_when>
    <thetext>Comment on attachment 60054
Patch with updated ChangeLog and minor fix.

Clearing flags on attachment: 60054

Committed r62148: &lt;http://trac.webkit.org/changeset/62148&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244511</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-29 15:01:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59949</attachid>
            <date>2010-06-28 15:04:31 -0700</date>
            <delta_ts>2010-06-28 18:54:37 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>recache.patch</filename>
            <type>text/plain</type>
            <size>5103</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMDM4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDYtMjggIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQnVnIDQxMjM4IC0gUmVnRXhwIHBlcmZvcm1hbmNlIHNsb3cg
b24gRHJvbWFlbyBiZW5jaG1hcmsKKworCU90aGVyIGphdmFzY3JpcHQgZW5naW5lcyBhcHBlYXIg
dG8gY2FjaGUgcHJpb3IgcmVzdWx0cyBvZiByZWd1bGFyIAorICAgICAgICBleHByZXNzaW9uIG9w
ZXJhdGlvbnMuCisKKyAgICAgICAgU3VnZ2VzdCBhZGRpbmcgc29tZSBzb3J0IG9mIGNhY2hpbmcg
bWVjaGFuaXNtIHRvIHJlZ3VsYXIgZXhwcmVzc2lvbiAKKyAgICAgICAgcHJvY2Vzc2luZy4KKwor
ICAgICAgICBBZGRlZCBhIHNpbmdsZSBlbnRyeSBjYWNoZSBvZiBtYXRjaCgpIHJlc3VsdHMgdG8g
UmVnRXhwIGNsYXNzLgorCisgICAgICAgIEFsc28gYWRkZWQgcGVyZm9ybWFuY2UgaW1wcm92ZW1l
bnRpcyB0byBVU3RyaW5nID09IG9wZXJhdG9yLgorICAgICAgICBGaXJzdCBjb25zb2xpZGF0ZWQg
YWxsIHNpemUgZXF1YWxpdHkgY2hlY2tzIHRvIGEgc2luZ2xlIGNoZWNrIGF0IHRoZSB0b3AKKyAg
ICAgICAgYW5kIHNlY29uZCBhIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGF0YSBwb2ludGVycyBhcmUg
ZXF1YWwuCisKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z0V4cDo6UmVnRXhwKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjptYXRjaCk6CisgICAgICAgICog
cnVudGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAgICAgICAg
KEpTQzo6b3BlcmF0b3I9PSk6CisKIDIwMTAtMDYtMjggIFpvbHRhbiBIZXJjemVnICA8emhlcmN6
ZWdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHJldmlzaW9uIDYxNDQzKQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSwxMCBA
QCBpbmxpbmUgUmVnRXhwOjpSZWdFeHAoSlNHbG9iYWxEYXRhKiBnbG9iCiAgICAgLCBtX2ZsYWdC
aXRzKDApCiAgICAgLCBtX2NvbnN0cnVjdGlvbkVycm9yKDApCiAgICAgLCBtX251bVN1YnBhdHRl
cm5zKDApCisgICAgLCBtX2xhc3RNYXRjaFN0cihVU3RyaW5nOjpudWxsKCkpCisgICAgLCBtX2xh
c3RNYXRjaFN0YXJ0KC0xKQogeworICAgIG1fbGFzdE9WZWN0b3IucmVzaXplKDApOwogICAgIGNv
bXBpbGUoZ2xvYmFsRGF0YSk7CiB9CiAKQEAgLTYwLDcgKzYzLDEwIEBAIGlubGluZSBSZWdFeHA6
OlJlZ0V4cChKU0dsb2JhbERhdGEqIGdsb2IKICAgICAsIG1fZmxhZ0JpdHMoMCkKICAgICAsIG1f
Y29uc3RydWN0aW9uRXJyb3IoMCkKICAgICAsIG1fbnVtU3VicGF0dGVybnMoMCkKKyAgICAsIG1f
bGFzdE1hdGNoU3RyKFVTdHJpbmc6Om51bGwoKSkKKyAgICAsIG1fbGFzdE1hdGNoU3RhcnQoLTEp
CiB7CisgICAgbV9sYXN0T1ZlY3Rvci5yZXNpemUoMCk7CiAgICAgLy8gTk9URTogVGhlIGdsb2Jh
bCBmbGFnIGlzIGhhbmRsZWQgb24gYSBjYXNlLWJ5LWNhc2UgYmFzaXMgYnkgZnVuY3Rpb25zIGxp
a2UKICAgICAvLyBTdHJpbmc6Om1hdGNoIGFuZCBSZWdFeHBPYmplY3Q6Om1hdGNoLgogICAgIGlm
IChmbGFncy5maW5kKCdnJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCkBAIC0xMDksOCArMTE1LDI0
IEBAIGludCBSZWdFeHA6Om1hdGNoKGNvbnN0IFVTdHJpbmcmIHMsIGludCAKICAgICBpZiAob3Zl
Y3RvcikKICAgICAgICAgb3ZlY3Rvci0+cmVzaXplKDApOwogCi0gICAgaWYgKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdGFydE9mZnNldCkgPiBzLnNpemUoKSB8fCBzLmlzTnVsbCgpKQorICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpID4gcy5zaXplKCkgfHwgcy5pc051
bGwoKSkgeworICAgICAgICBtX2xhc3RNYXRjaFN0ciA9IFVTdHJpbmc6Om51bGwoKTsKKyAgICAg
ICAgbV9sYXN0TWF0Y2hTdGFydCA9IC0xOworICAgICAgICBtX2xhc3RPVmVjdG9yLnJlc2l6ZSgw
KTsKICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAKKyAgICAvLyBDaGVjayB0byBzZWUg
aWYgdGhpcyBtYXRjaCBjYWxsIGlzIHRoZSBzYW1lIGFzIHRoZSBsYXN0IG1hdGNoIGludm9jYXRp
b24KKyAgICBpZiAoKHN0YXJ0T2Zmc2V0ID09IG1fbGFzdE1hdGNoU3RhcnQpICYmIChzLnJlcCgp
ID09IG1fbGFzdE1hdGNoU3RyLnJlcCgpKSkgeworICAgICAgICBpZiAob3ZlY3RvcikgeworICAg
ICAgICAgICAgKFZlY3RvcjxpbnQsIDMyPiYpKm92ZWN0b3IgPSAoVmVjdG9yPGludCwgMzI+Jilt
X2xhc3RPVmVjdG9yOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9sYXN0T1Zl
Y3Rvci5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJldHVybiBtX2xhc3RPVmVjdG9yLmF0KDApOworICAgIH0KIAogI2lmIEVOQUJM
RShZQVJSX0pJVCkKICAgICBpZiAoISFtX3JlZ0V4cEpJVENvZGUpIHsKQEAgLTE0Nyw5ICsxNjks
MjIgQEAgaW50IFJlZ0V4cDo6bWF0Y2goY29uc3QgVVN0cmluZyYgcywgaW50IAogICAgICAgICAg
ICAgaWYgKG92ZWN0b3IpCiAgICAgICAgICAgICAgICAgb3ZlY3Rvci0+Y2xlYXIoKTsKICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgbV9sYXN0TWF0Y2hTdHIgPSBzOworICAgICAgICBtX2xh
c3RNYXRjaFN0YXJ0ID0gc3RhcnRPZmZzZXQ7CisKKyAgICAgICAgaWYgKG92ZWN0b3IpCisgICAg
ICAgICAgICAoVmVjdG9yPGludCwgMzI+JiltX2xhc3RPVmVjdG9yID0gKFZlY3RvcjxpbnQsIDMy
PiYpKm92ZWN0b3I7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIChWZWN0b3I8aW50LCAzMj4m
KW1fbGFzdE9WZWN0b3IgPSAoVmVjdG9yPGludCwgMzI+Jilub25SZXR1cm5lZE92ZWN0b3I7CisK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBtX2xhc3RNYXRjaFN0ciA9IFVT
dHJpbmc6Om51bGwoKTsKKyAgICBtX2xhc3RNYXRjaFN0YXJ0ID0gLTE7CisgICAgbV9sYXN0T1Zl
Y3Rvci5yZXNpemUoMCk7CisKICAgICByZXR1cm4gLTE7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHAuaAkocmV2aXNpb24gNjE0NDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBpbnQgbV9mbGFnQml0czsKICAgICAgICAgY29uc3QgY2hhciogbV9jb25zdHJ1Y3Rp
b25FcnJvcjsKICAgICAgICAgdW5zaWduZWQgbV9udW1TdWJwYXR0ZXJuczsKKyAgICAgICAgVVN0
cmluZyBtX2xhc3RNYXRjaFN0cjsKKyAgICAgICAgaW50IG1fbGFzdE1hdGNoU3RhcnQ7CisgICAg
ICAgIFZlY3RvcjxpbnQsIDMyPiBtX2xhc3RPVmVjdG9yOwogCiAjaWYgRU5BQkxFKFlBUlJfSklU
KQogICAgICAgICBZYXJyOjpSZWdleENvZGVCbG9jayBtX3JlZ0V4cEpJVENvZGU7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1VTdHJpbmcuaAkocmV2aXNpb24gNjE0NDMpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1VTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDE0ICsxNTksMjAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgQUxXQVlTX0lOTElORSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VVN0cmluZyYgczEsIGNvbnN0IFVTdHJpbmcmIHMyKQogICAgIHsKICAgICAgICAgdW5zaWduZWQg
c2l6ZSA9IHMxLnNpemUoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaXplICE9IHMyLnNpemUo
KSkgICAgICAvLyBTaXplcyBub3QgdGhlIHNhbWUsIHdlJ3JlIGRvbmUuCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKHMxLmRhdGEoKSA9PSBzMi5k
YXRhKCkpIC8vIFF1aWNrIGNoZWNrIG9mIGRhdGEgcG9pbnRlcnMgYmVpbmcgdGhlIHNhbWUuCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIC8vIERvIHF1aWNrIGNo
ZWNrcyBmb3Igc2l6ZXMgMCwgMSBhbmQgMi4KICAgICAgICAgc3dpdGNoIChzaXplKSB7CiAgICAg
ICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHJldHVybiAhczIuc2l6ZSgpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJldHVybiBzMi5zaXpl
KCkgPT0gMSAmJiBzMS5kYXRhKClbMF0gPT0gczIuZGF0YSgpWzBdOworICAgICAgICAgICAgcmV0
dXJuIHMxLmRhdGEoKVswXSA9PSBzMi5kYXRhKClbMF07CiAgICAgICAgIGNhc2UgMjogewotICAg
ICAgICAgICAgaWYgKHMyLnNpemUoKSAhPSAyKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBkMSA9IHMxLmRhdGEoKTsKICAgICAgICAgICAg
IGNvbnN0IFVDaGFyKiBkMiA9IHMyLmRhdGEoKTsKICAgICAgICAgICAgIHJldHVybiAoZDFbMF0g
PT0gZDJbMF0pICYgKGQxWzFdID09IGQyWzFdKTsK
</data>
<flag name="review"
          id="47127"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59974</attachid>
            <date>2010-06-28 18:54:37 -0700</date>
            <delta_ts>2010-06-29 14:27:49 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>recache.patch</filename>
            <type>text/plain</type>
            <size>8508</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMDUxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTAtMDYtMjggIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQnVnIDQxMjM4IC0gUmVnRXhwIHBlcmZvcm1hbmNlIHNsb3cg
b24gRHJvbWFlbyBiZW5jaG1hcmsKKworICAgICAgICBPdGhlciBqYXZhc2NyaXB0IGVuZ2luZXMg
YXBwZWFyIHRvIGNhY2hlIHByaW9yIHJlc3VsdHMgb2YgcmVndWxhciAKKyAgICAgICAgZXhwcmVz
c2lvbiBvcGVyYXRpb25zLgorCisgICAgICAgIFN1Z2dlc3QgYWRkaW5nIHNvbWUgc29ydCBvZiBj
YWNoaW5nIG1lY2hhbmlzbSB0byByZWd1bGFyIGV4cHJlc3Npb24gCisgICAgICAgIHByb2Nlc3Np
bmcuCisKKyAgICAgICAgQWRkZWQgYSBzaW5nbGUgZW50cnkgY2FjaGUgb2YgbWF0Y2goKSByZXN1
bHRzIHRvIFJlZ0V4cCBjbGFzcy4KKworICAgICAgICBBbHNvIGFkZGVkIHBlcmZvcm1hbmNlIGlt
cHJvdmVtZW50cyB0byBVU3RyaW5nID09IG9wZXJhdG9yLgorICAgICAgICBGaXJzdCBjaGVjayB0
aGUgaW1wbHMgZm9yIGVxdWFsaXR5LiAgVGhlbiBnZXQgdGhlIGxlbmd0aCBvZgorICAgICAgICBl
YWNoIG9mIHRoZSBub24tbnVsbCBpbXBscy4gIE5leHQgY2hlY2sgdGhlIHNpemVzIGZvciBlcXVh
bGl0eS4KKyAgICAgICAgVGhlbiBjaGVjayB0aGUgZGF0YSBmb3IgdGhlIGNhc2Ugb2YgZGlmZmVy
ZW50IGltcGxzIHRoYXQgcG9pbnQgCisgICAgICAgIHRvIHRoZSBzYW1lIGRhdGEgKG1vc3QgbGlr
ZWx5IGR1ZSB0byBzdWJzdHJpbmdzIGZyb20gdGhlIGJlZ2lubmluZyBvZgorICAgICAgICBhbm90
aGVyIHN0cmluZykuICBMYXN0bHkgd2UgY2hlY2sgdGhlIHVuZGVybHlpbmcgZGF0YSBmb3IgZXF1
YWxpdHkuCisKKyAgICAgICAgUmVmYWN0b3JlZCBWZWN0b3I8Pjo6b3BlcmF0b3I9KCkgbWV0aG9k
IGludG8gYSBzZXBhcmF0ZSBjb3B5KCkgbWV0aG9kIAorICAgICAgICB0aGF0IGl0IGNhbGxzLiAg
VGhlIGNvcHkoKSBtZXRob2QgaXMgZXhwbGljaXRseSB1c2VkIGZvciBkZWVwIGNvcHlpbmcuCisK
KyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6UmVn
RXhwKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjptYXRjaCk6CisgICAgICAgICogcnVudGltZS9S
ZWdFeHAuaDoKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6b3Bl
cmF0b3I9PSk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RGOjo6Om9wZXJh
dG9yKToKKyAgICAgICAgKFdURjo6Ojpjb3B5KToKKwogMjAxMC0wNi0yOCAgSm9obiBHcmVnZyAg
PGpvaG5ueWdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHJldmlzaW9uIDYxNDQzKQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1
MSw3IEBAIGlubGluZSBSZWdFeHA6OlJlZ0V4cChKU0dsb2JhbERhdGEqIGdsb2IKICAgICAsIG1f
ZmxhZ0JpdHMoMCkKICAgICAsIG1fY29uc3RydWN0aW9uRXJyb3IoMCkKICAgICAsIG1fbnVtU3Vi
cGF0dGVybnMoMCkKKyAgICAsIG1fbGFzdE1hdGNoU3RhcnQoLTEpCiB7CiAgICAgY29tcGlsZShn
bG9iYWxEYXRhKTsKIH0KQEAgLTYwLDYgKzYxLDcgQEAgaW5saW5lIFJlZ0V4cDo6UmVnRXhwKEpT
R2xvYmFsRGF0YSogZ2xvYgogICAgICwgbV9mbGFnQml0cygwKQogICAgICwgbV9jb25zdHJ1Y3Rp
b25FcnJvcigwKQogICAgICwgbV9udW1TdWJwYXR0ZXJucygwKQorICAgICwgbV9sYXN0TWF0Y2hT
dGFydCgtMSkKIHsKICAgICAvLyBOT1RFOiBUaGUgZ2xvYmFsIGZsYWcgaXMgaGFuZGxlZCBvbiBh
IGNhc2UtYnktY2FzZSBiYXNpcyBieSBmdW5jdGlvbnMgbGlrZQogICAgIC8vIFN0cmluZzo6bWF0
Y2ggYW5kIFJlZ0V4cE9iamVjdDo6bWF0Y2guCkBAIC0xMDksOCArMTExLDI0IEBAIGludCBSZWdF
eHA6Om1hdGNoKGNvbnN0IFVTdHJpbmcmIHMsIGludCAKICAgICBpZiAob3ZlY3RvcikKICAgICAg
ICAgb3ZlY3Rvci0+cmVzaXplKDApOwogCi0gICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGFydE9mZnNldCkgPiBzLnNpemUoKSB8fCBzLmlzTnVsbCgpKQorICAgIGlmIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpID4gcy5zaXplKCkgfHwgcy5pc051bGwoKSkgeworICAg
ICAgICBtX2xhc3RNYXRjaFN0cmluZyA9IFVTdHJpbmcoKTsKKyAgICAgICAgbV9sYXN0TWF0Y2hT
dGFydCA9IC0xOworICAgICAgICBtX2xhc3RPVmVjdG9yLnNocmluaygwKTsKICAgICAgICAgcmV0
dXJuIC0xOworICAgIH0KKyAgICAKKyAgICAvLyBQZXJmb3JtIGNoZWNrIHRvIHNlZSBpZiB0aGlz
IG1hdGNoIGNhbGwgaXMgdGhlIHNhbWUgYXMgdGhlIGxhc3QgbWF0Y2ggaW52b2NhdGlvbgorICAg
IC8vIGFuZCBpZiBpdCBpcyByZXR1cm4gdGhlIHByaW9yIHJlc3VsdC4KKyAgICBpZiAoKHN0YXJ0
T2Zmc2V0ID09IG1fbGFzdE1hdGNoU3RhcnQpICYmIChzLnJlcCgpID09IG1fbGFzdE1hdGNoU3Ry
aW5nLnJlcCgpKSkgeworICAgICAgICBpZiAob3ZlY3RvcikKKyAgICAgICAgICAgIG92ZWN0b3It
PmNvcHkobV9sYXN0T1ZlY3Rvcik7CisgICAgICAgIAorICAgICAgICBpZiAobV9sYXN0T1ZlY3Rv
ci5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgcmV0dXJuIG1f
bGFzdE9WZWN0b3IuYXQoMCk7CisgICAgfQogCiAjaWYgRU5BQkxFKFlBUlJfSklUKQogICAgIGlm
ICghIW1fcmVnRXhwSklUQ29kZSkgewpAQCAtMTQ3LDkgKzE2NSwyMiBAQCBpbnQgUmVnRXhwOjpt
YXRjaChjb25zdCBVU3RyaW5nJiBzLCBpbnQgCiAgICAgICAgICAgICBpZiAob3ZlY3RvcikKICAg
ICAgICAgICAgICAgICBvdmVjdG9yLT5jbGVhcigpOwogICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBtX2xhc3RNYXRjaFN0cmluZyA9IHM7CisgICAgICAgIG1fbGFzdE1hdGNoU3RhcnQgPSBz
dGFydE9mZnNldDsKKworICAgICAgICBpZiAob3ZlY3RvcikKKyAgICAgICAgICAgIG1fbGFzdE9W
ZWN0b3IuY29weSgqb3ZlY3Rvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbGFzdE9W
ZWN0b3IuY29weShub25SZXR1cm5lZE92ZWN0b3IpOworCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCisgICAgbV9sYXN0TWF0Y2hTdHJpbmcgPSBVU3RyaW5nOjpudWxsKCk7CisgICAg
bV9sYXN0TWF0Y2hTdGFydCA9IC0xOworICAgIG1fbGFzdE9WZWN0b3IucmVzaXplKDApOworCiAg
ICAgcmV0dXJuIC0xOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHJldmlzaW9u
IDYxNDQzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkod29ya2luZyBjb3B5
KQpAQCAtNjcsNiArNjcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW50IG1fZmxhZ0Jp
dHM7CiAgICAgICAgIGNvbnN0IGNoYXIqIG1fY29uc3RydWN0aW9uRXJyb3I7CiAgICAgICAgIHVu
c2lnbmVkIG1fbnVtU3VicGF0dGVybnM7CisgICAgICAgIFVTdHJpbmcgbV9sYXN0TWF0Y2hTdHJp
bmc7CisgICAgICAgIGludCBtX2xhc3RNYXRjaFN0YXJ0OworICAgICAgICBWZWN0b3I8aW50LCAz
Mj4gbV9sYXN0T1ZlY3RvcjsKIAogI2lmIEVOQUJMRShZQVJSX0pJVCkKICAgICAgICAgWWFycjo6
UmVnZXhDb2RlQmxvY2sgbV9yZWdFeHBKSVRDb2RlOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9VU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3Ry
aW5nLmgJKHJldmlzaW9uIDYxNDQzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwyMSArMTU4LDQzIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgQUxXQVlTX0lOTElORSBib29sIG9wZXJhdG9yPT0oY29uc3QgVVN0cmluZyYgczEsIGNv
bnN0IFVTdHJpbmcmIHMyKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHMxLnNpemUo
KTsKLSAgICAgICAgc3dpdGNoIChzaXplKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAg
IHJldHVybiAhczIuc2l6ZSgpOworICAgICAgICBVU3RyaW5nOjpSZXAqIHJlcDEgPSBzMS5yZXAo
KTsKKyAgICAgICAgVVN0cmluZzo6UmVwKiByZXAyID0gczIucmVwKCk7CisgICAgICAgIHVuc2ln
bmVkIHNpemUxID0gMDsKKyAgICAgICAgdW5zaWduZWQgc2l6ZTIgPSAwOworCisgICAgICAgIGlm
IChyZXAxID09IHJlcDIpICAgICAgIC8vIElmIHRoZXkncmUgdGhlIHNhbWUgcmVwIHRoZXkncmUg
ZXF1YWwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChy
ZXAxKQorICAgICAgICAgICAgc2l6ZTEgPSByZXAxLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBpZiAocmVwMikKKyAgICAgICAgICAgIHNpemUyID0gcmVwMi0+bGVuZ3RoKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgaWYgKHNpemUxICE9IHNpemUyKSAgICAgLy8gSWYgdGhlIGxl
bmd0aHMgYXJlIG5vdCB0aGUgc2FtZSwgd2UncmUgZG9uZS4KKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaXplMSA9PSAwKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgCisg
ICAgICAgIC8vICAgKGEpIHRoYXQgdGhlIHN0cmluZ3MgYXJlIHRoZSBzYW1lIGxlbmd0aCBhbmQK
KyAgICAgICAgLy8gICAoYikgdGhhdCB0aGV5IGFyZSBncmVhdGVyIHRoYW4gemVybyBsZW5ndGgu
CisgICAgICAgIGNvbnN0IFVDaGFyKiBkMSA9IHJlcDEtPmNoYXJhY3RlcnMoKTsKKyAgICAgICAg
Y29uc3QgVUNoYXIqIGQyID0gcmVwMi0+Y2hhcmFjdGVycygpOworICAgICAgICAKKyAgICAgICAg
aWYgKGQxID09IGQyKSAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGRhdGEgcG9pbnRlcnMgYXJlIHRo
ZSBzYW1lLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICAvLyBE
byBxdWljayBjaGVja3MgZm9yIHNpemVzIDEgYW5kIDIuCisgICAgICAgIHN3aXRjaCAoc2l6ZTEp
IHsKICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgcmV0dXJuIHMyLnNpemUoKSA9PSAxICYm
IHMxLmRhdGEoKVswXSA9PSBzMi5kYXRhKClbMF07Ci0gICAgICAgIGNhc2UgMjogewotICAgICAg
ICAgICAgaWYgKHMyLnNpemUoKSAhPSAyKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBkMSA9IHMxLmRhdGEoKTsKLSAgICAgICAgICAgIGNv
bnN0IFVDaGFyKiBkMiA9IHMyLmRhdGEoKTsKKyAgICAgICAgICAgIHJldHVybiBkMVswXSA9PSBk
MlswXTsKKyAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgcmV0dXJuIChkMVswXSA9PSBkMlsw
XSkgJiAoZDFbMV0gPT0gZDJbMV0pOwotICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gczIuc2l6ZSgpID09IHNpemUgJiYgbWVtY21wKHMxLmRhdGEoKSwgczIu
ZGF0YSgpLCBzaXplICogc2l6ZW9mKFVDaGFyKSkgPT0gMDsKKyAgICAgICAgICAgIHJldHVybiBt
ZW1jbXAoZDEsIGQyLCBzaXplMSAqIHNpemVvZihVQ2hhcikpID09IDA7CiAgICAgICAgIH0KICAg
ICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDYxNDQzKQorKysgSmF2YVNjcmlw
dENvcmUvd3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjQsNiArNTI0LDggQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgICAgIHRlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5PiAKICAg
ICAgICAgVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHk+Jik7
CiAKKyAgICAgICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHk+IHZvaWQgY29weShjb25z
dCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eT4mKTsKKyAgICAgICAgCiAgICAgICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgICAgIHNpemVfdCBjYXBhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmNhcGFjaXR5KCk7IH0KICAgICAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQpAQCAtNjc0LDggKzY3NiwxNyBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CiAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5Pjo6b3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIG90aGVyKQog
ICAgIHsKKyAgICAgICAgaWYgKCZvdGhlciAhPSB0aGlzKQorICAgICAgICAgICAgY29weShvdGhl
cik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiB0ZW1wbGF0ZTxzaXplX3Qgb3Ro
ZXJDYXBhY2l0eT4KKyAgICB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OmNvcHkoY29u
c3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHk+JiBvdGhlcikKKyAgICB7CiAgICAgICAgIGlmICgm
b3RoZXIgPT0gdGhpcykKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgICAgIGlmIChzaXplKCkgPiBvdGhlci5zaXplKCkpCiAgICAg
ICAgICAgICBzaHJpbmsob3RoZXIuc2l6ZSgpKTsKQEAgLTY4MywyMiArNjk0LDIwIEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgICAgIHJlc2VydmVDYXBh
Y2l0eShvdGhlci5zaXplKCkpOwogICAgICAgICAgICAgaWYgKCFiZWdpbigpKQotICAgICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCi0vLyBXb3JrcyBhcm91bmQgYW4gYXNzZXJ0IGluIFZTMjAxMC4gU2VlIGh0dHBz
Oi8vY29ubmVjdC5taWNyb3NvZnQuY29tL1Zpc3VhbFN0dWRpby9mZWVkYmFjay9kZXRhaWxzLzU1
ODA0NC9zdGQtY29weS1zaG91bGQtbm90LWNoZWNrLWRlc3Qtd2hlbi1maXJzdC1sYXN0CisgICAg
ICAgIC8vIFdvcmtzIGFyb3VuZCBhbiBhc3NlcnQgaW4gVlMyMDEwLiBTZWUgaHR0cHM6Ly9jb25u
ZWN0Lm1pY3Jvc29mdC5jb20vVmlzdWFsU3R1ZGlvL2ZlZWRiYWNrL2RldGFpbHMvNTU4MDQ0L3N0
ZC1jb3B5LXNob3VsZC1ub3QtY2hlY2stZGVzdC13aGVuLWZpcnN0LWxhc3QKICNpZiBDT01QSUxF
UihNU1ZDKSAmJiBkZWZpbmVkKF9JVEVSQVRPUl9ERUJVR19MRVZFTCkgJiYgX0lURVJBVE9SX0RF
QlVHX0xFVkVMCiAgICAgICAgIGlmICghYmVnaW4oKSkKLSAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgotCisgICAgICAgIAogICAgICAgICBzdGQ6
OmNvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuYmVnaW4oKSArIHNpemUoKSwgYmVnaW4oKSk7CiAg
ICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpICsg
c2l6ZSgpLCBvdGhlci5lbmQoKSwgZW5kKCkpOwogICAgICAgICBtX3NpemUgPSBvdGhlci5zaXpl
KCk7Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KLQorICAgIAogICAgIGlubGluZSBi
b29sIHR5cGVsZXNzUG9pbnRlcnNBcmVFcXVhbChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBi
KSB7IHJldHVybiBhID09IGI7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4K
</data>
<flag name="review"
          id="47282"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60039</attachid>
            <date>2010-06-29 11:32:06 -0700</date>
            <delta_ts>2010-06-29 14:27:49 -0700</delta_ts>
            <desc>Latest revised patch</desc>
            <filename>recache.patch</filename>
            <type>text/plain</type>
            <size>7486</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMTM2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICsxLDMwIEBACi0yMDEwLTA2LTI5ICBNYXJ0aW4g
Um9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKzIwMTAtMDYtMjkgIE1pY2hhZWwgU2Fi
b2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKLSAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6
LgotCi0gICAgICAgIFtHVEtdIENsZWFuIHVwIHRoZSBzb3VyY2UgbGlzdHMgaW4gdGhlIEdOVU1h
a2VmaWxlLmFtIGZpbGVzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MTIyOQotCi0gICAgICAgIENsZWFuIHVwIHRoZSBHTlVNYWtlZmlsZS5hbSBhIGxp
dHRsZSBiaXQuIEFscGhhYmV0aXplIGFuZCBjb25nbG9tZXJhdGUKLSAgICAgICAgdGhlIHNvdXJj
ZSBsaXN0cy4KLQotICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgotCi0yMDEwLTA2LTI5ICBDYWlv
IE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCi0KLSAg
ICAgICAgW1F0XSBGaXggUXRTY3JpcHQgYnVpbGQgYWZ0ZXIgUVNjcmlwdFZhbHVlUHJpdmF0ZSBj
dG9yIGNoYW5nZXMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQxMzA3Ci0KLSAgICAgICAgKiBxdC9hcGkvcXNjcmlwdHZhbHVlX3AuaDoKLSAgICAgICAg
KFFTY3JpcHRWYWx1ZVByaXZhdGU6OnByb3RvdHlwZSk6Ci0gICAgICAgICogcXQvYmVuY2htYXJr
cy9xc2NyaXB0ZW5naW5lL3FzY3JpcHRlbmdpbmUucHJvOgotCi0yMDEwLTA2LTI4ICBDYWlvIE1h
cmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+Cisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCi0gICAgICAgIFJldmlld2VkIGJ5
IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgotCi0gICAgICAgIFtRdF0gUVNjcmlwdEVuZ2lu
ZSBBUEkgc2hvdWxkIGNvbnRhaW4gYSBuZXdBcnJheSBmdW5jdGlvbgotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkxMTUKKyAgICAgICAgQnVnIDQxMjM4
IC0gUmVnRXhwIHBlcmZvcm1hbmNlIHNsb3cgb24gRHJvbWFlbyBiZW5jaG1hcmsKIAotICAgICAg
ICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcDoKLSAgICAgICAgKFFTY3JpcHRFbmdpbmU6Om5l
d0FycmF5KToKLSAgICAgICAgKiBxdC9hcGkvcXNjcmlwdGVuZ2luZS5oOgotICAgICAgICAqIHF0
L2FwaS9xc2NyaXB0ZW5naW5lX3AuY3BwOgotICAgICAgICAoUVNjcmlwdEVuZ2luZVByaXZhdGU6
Om5ld0FycmF5KToKLSAgICAgICAgKiBxdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmg6Ci0gICAgICAg
ICogcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHA6Ci0gICAgICAg
ICh0c3RfUVNjcmlwdEVuZ2luZTo6bmV3QXJyYXkpOgorICAgICAgICBPdGhlciBqYXZhc2NyaXB0
IGVuZ2luZXMgYXBwZWFyIHRvIGNhY2hlIHByaW9yIHJlc3VsdHMgb2YgcmVndWxhciAKKyAgICAg
ICAgZXhwcmVzc2lvbiBvcGVyYXRpb25zLgogCi0yMDEwLTA2LTI4ICBYYW4gTG9wZXogIDx4bG9w
ZXpAaWdhbGlhLmNvbT4KKyAgICAgICAgU3VnZ2VzdCBhZGRpbmcgc29tZSBzb3J0IG9mIGNhY2hp
bmcgbWVjaGFuaXNtIHRvIHJlZ3VsYXIgZXhwcmVzc2lvbiAKKyAgICAgICAgcHJvY2Vzc2luZy4K
IAotICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCisgICAgICAgIEFkZGVkIGEg
c2luZ2xlIGVudHJ5IGNhY2hlIG9mIG1hdGNoKCkgcmVzdWx0cyB0byBSZWdFeHAgY2xhc3MuCiAK
LSAgICAgICAgSW5zdGFsbCBqc2MgYXMganNjLVggd2hlcmUgWCBpcyB0aGUgbWFqb3IgQVBJIHZl
cnNpb24gdG8gYWxsb3cKLSAgICAgICAgcGFyYWxsZWwgaW5zdGFsbGF0aW9uIG9mIGJvdGggR1RL
KyAyLnggYW5kIDMueCB2ZXJzaW9ucy4KKyAgICAgICAgQWxzbyBhZGRlZCBwZXJmb3JtYW5jZSBp
bXByb3ZlbWVudHMgdG8gVVN0cmluZyA9PSBvcGVyYXRvci4KKyAgICAgICAgRmlyc3QgY2hlY2sg
dGhlIGltcGxzIGZvciBlcXVhbGl0eS4gIFRoZW4gZ2V0IHRoZSBsZW5ndGggb2YKKyAgICAgICAg
ZWFjaCBvZiB0aGUgbm9uLW51bGwgaW1wbHMuICBOZXh0IGNoZWNrIHRoZSBzaXplcyBmb3IgZXF1
YWxpdHkuCisgICAgICAgIFRoZW4gY2hlY2sgdGhlIGRhdGEgZm9yIHRoZSBjYXNlIG9mIGRpZmZl
cmVudCBpbXBscyB0aGF0IHBvaW50IAorICAgICAgICB0byB0aGUgc2FtZSBkYXRhIChtb3N0IGxp
a2VseSBkdWUgdG8gc3Vic3RyaW5ncyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKKyAgICAgICAgYW5v
dGhlciBzdHJpbmcpLiAgTGFzdGx5IHdlIGNoZWNrIHRoZSB1bmRlcmx5aW5nIGRhdGEgZm9yIGVx
dWFsaXR5LgogCi0gICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogcnVudGltZS9S
ZWdFeHAuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHA6OlJlZ0V4cCk6CisgICAgICAgIChKU0M6
OlJlZ0V4cDo6bWF0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmg6CisgICAgICAgICog
cnVudGltZS9VU3RyaW5nLmg6CisgICAgICAgIChKU0M6Om9wZXJhdG9yPT0pOgogCiAyMDEwLTA2
LTI4ICBKb2huIEdyZWdnICA8am9obm55Z0Bnb29nbGUuY29tPgogCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHAuY3BwCShyZXZpc2lvbiA2MTQ0MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBpbmxpbmUgUmVn
RXhwOjpSZWdFeHAoSlNHbG9iYWxEYXRhKiBnbG9iCiAgICAgLCBtX2ZsYWdCaXRzKDApCiAgICAg
LCBtX2NvbnN0cnVjdGlvbkVycm9yKDApCiAgICAgLCBtX251bVN1YnBhdHRlcm5zKDApCisgICAg
LCBtX2xhc3RNYXRjaFN0YXJ0KC0xKQogewogICAgIGNvbXBpbGUoZ2xvYmFsRGF0YSk7CiB9CkBA
IC02MCw2ICs2MSw3IEBAIGlubGluZSBSZWdFeHA6OlJlZ0V4cChKU0dsb2JhbERhdGEqIGdsb2IK
ICAgICAsIG1fZmxhZ0JpdHMoMCkKICAgICAsIG1fY29uc3RydWN0aW9uRXJyb3IoMCkKICAgICAs
IG1fbnVtU3VicGF0dGVybnMoMCkKKyAgICAsIG1fbGFzdE1hdGNoU3RhcnQoLTEpCiB7CiAgICAg
Ly8gTk9URTogVGhlIGdsb2JhbCBmbGFnIGlzIGhhbmRsZWQgb24gYSBjYXNlLWJ5LWNhc2UgYmFz
aXMgYnkgZnVuY3Rpb25zIGxpa2UKICAgICAvLyBTdHJpbmc6Om1hdGNoIGFuZCBSZWdFeHBPYmpl
Y3Q6Om1hdGNoLgpAQCAtMTA5LDggKzExMSwyNCBAQCBpbnQgUmVnRXhwOjptYXRjaChjb25zdCBV
U3RyaW5nJiBzLCBpbnQgCiAgICAgaWYgKG92ZWN0b3IpCiAgICAgICAgIG92ZWN0b3ItPnJlc2l6
ZSgwKTsKIAotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpID4gcy5z
aXplKCkgfHwgcy5pc051bGwoKSkKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0
T2Zmc2V0KSA+IHMuc2l6ZSgpIHx8IHMuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9sYXN0TWF0Y2hT
dHJpbmcgPSBVU3RyaW5nKCk7CisgICAgICAgIG1fbGFzdE1hdGNoU3RhcnQgPSAtMTsKKyAgICAg
ICAgbV9sYXN0T1ZlY3Rvci5zaHJpbmsoMCk7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cisg
ICAgCisgICAgLy8gUGVyZm9ybSBjaGVjayB0byBzZWUgaWYgdGhpcyBtYXRjaCBjYWxsIGlzIHRo
ZSBzYW1lIGFzIHRoZSBsYXN0IG1hdGNoIGludm9jYXRpb24KKyAgICAvLyBhbmQgaWYgaXQgaXMg
cmV0dXJuIHRoZSBwcmlvciByZXN1bHQuCisgICAgaWYgKChzdGFydE9mZnNldCA9PSBtX2xhc3RN
YXRjaFN0YXJ0KSAmJiAocy5yZXAoKSA9PSBtX2xhc3RNYXRjaFN0cmluZy5yZXAoKSkpIHsKKyAg
ICAgICAgaWYgKG92ZWN0b3IpCisgICAgICAgICAgICAqb3ZlY3RvciA9IG1fbGFzdE9WZWN0b3I7
CisgICAgICAgIAorICAgICAgICBpZiAobV9sYXN0T1ZlY3Rvci5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgcmV0dXJuIG1fbGFzdE9WZWN0b3IuYXQoMCk7Cisg
ICAgfQogCiAjaWYgRU5BQkxFKFlBUlJfSklUKQogICAgIGlmICghIW1fcmVnRXhwSklUQ29kZSkg
ewpAQCAtMTQ3LDkgKzE2NSwyMiBAQCBpbnQgUmVnRXhwOjptYXRjaChjb25zdCBVU3RyaW5nJiBz
LCBpbnQgCiAgICAgICAgICAgICBpZiAob3ZlY3RvcikKICAgICAgICAgICAgICAgICBvdmVjdG9y
LT5jbGVhcigpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2xhc3RNYXRjaFN0cmlu
ZyA9IHM7CisgICAgICAgIG1fbGFzdE1hdGNoU3RhcnQgPSBzdGFydE9mZnNldDsKKworICAgICAg
ICBpZiAob3ZlY3RvcikKKyAgICAgICAgICAgIG1fbGFzdE9WZWN0b3IgPSAqb3ZlY3RvcjsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9sYXN0T1ZlY3RvciA9IG5vblJldHVybmVkT3ZlY3Rv
cjsKKwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIG1fbGFzdE1hdGNoU3Ry
aW5nID0gVVN0cmluZygpOworICAgIG1fbGFzdE1hdGNoU3RhcnQgPSAtMTsKKyAgICBtX2xhc3RP
VmVjdG9yLnNocmluaygwKTsKKwogICAgIHJldHVybiAtMTsKIH0KIApJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cC5oCShyZXZpc2lvbiA2MTQ0MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGludCBtX2ZsYWdCaXRzOwogICAgICAgICBjb25zdCBjaGFyKiBtX2NvbnN0cnVj
dGlvbkVycm9yOwogICAgICAgICB1bnNpZ25lZCBtX251bVN1YnBhdHRlcm5zOworICAgICAgICBV
U3RyaW5nIG1fbGFzdE1hdGNoU3RyaW5nOworICAgICAgICBpbnQgbV9sYXN0TWF0Y2hTdGFydDsK
KyAgICAgICAgVmVjdG9yPGludCwgMzI+IG1fbGFzdE9WZWN0b3I7CiAKICNpZiBFTkFCTEUoWUFS
Ul9KSVQpCiAgICAgICAgIFlhcnI6OlJlZ2V4Q29kZUJsb2NrIG1fcmVnRXhwSklUQ29kZTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCShyZXZpc2lvbiA2MTQ0MykKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMjEgKzE1OCw0
MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFVTdHJpbmcmIHMxLCBjb25zdCBVU3RyaW5nJiBzMikKICAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIHNpemUgPSBzMS5zaXplKCk7Ci0gICAgICAgIHN3aXRjaCAoc2l6ZSkgewotICAgICAg
ICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4gIXMyLnNpemUoKTsKKyAgICAgICAgVVN0cmlu
Zzo6UmVwKiByZXAxID0gczEucmVwKCk7CisgICAgICAgIFVTdHJpbmc6OlJlcCogcmVwMiA9IHMy
LnJlcCgpOworICAgICAgICB1bnNpZ25lZCBzaXplMSA9IDA7CisgICAgICAgIHVuc2lnbmVkIHNp
emUyID0gMDsKKworICAgICAgICBpZiAocmVwMSA9PSByZXAyKSAvLyBJZiB0aGV5J3JlIHRoZSBz
YW1lIHJlcCwgdGhleSdyZSBlcXVhbC4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAKKyAgICAgICAgaWYgKHJlcDEpCisgICAgICAgICAgICBzaXplMSA9IHJlcDEtPmxlbmd0aCgp
OworICAgICAgICAgICAgCisgICAgICAgIGlmIChyZXAyKQorICAgICAgICAgICAgc2l6ZTIgPSBy
ZXAyLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAoc2l6ZTEgIT0gc2l6ZTIp
IC8vIElmIHRoZSBsZW5ndGhzIGFyZSBub3QgdGhlIHNhbWUsIHdlJ3JlIGRvbmUuCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc2l6ZTEgPT0gMCkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2lu
dCB3ZSBrbm93IAorICAgICAgICAvLyAgIChhKSB0aGF0IHRoZSBzdHJpbmdzIGFyZSB0aGUgc2Ft
ZSBsZW5ndGggYW5kCisgICAgICAgIC8vICAgKGIpIHRoYXQgdGhleSBhcmUgZ3JlYXRlciB0aGFu
IHplcm8gbGVuZ3RoLgorICAgICAgICBjb25zdCBVQ2hhciogZDEgPSByZXAxLT5jaGFyYWN0ZXJz
KCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBkMiA9IHJlcDItPmNoYXJhY3RlcnMoKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChkMSA9PSBkMikgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBkYXRhIHBv
aW50ZXJzIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAK
KyAgICAgICAgLy8gRG8gcXVpY2sgY2hlY2tzIGZvciBzaXplcyAxIGFuZCAyLgorICAgICAgICBz
d2l0Y2ggKHNpemUxKSB7CiAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJldHVybiBzMi5z
aXplKCkgPT0gMSAmJiBzMS5kYXRhKClbMF0gPT0gczIuZGF0YSgpWzBdOwotICAgICAgICBjYXNl
IDI6IHsKLSAgICAgICAgICAgIGlmIChzMi5zaXplKCkgIT0gMikKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogZDEgPSBzMS5kYXRhKCk7Ci0g
ICAgICAgICAgICBjb25zdCBVQ2hhciogZDIgPSBzMi5kYXRhKCk7CisgICAgICAgICAgICByZXR1
cm4gZDFbMF0gPT0gZDJbMF07CisgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgIHJldHVybiAo
ZDFbMF0gPT0gZDJbMF0pICYgKGQxWzFdID09IGQyWzFdKTsKLSAgICAgICAgfQogICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIHMyLnNpemUoKSA9PSBzaXplICYmIG1lbWNtcChz
MS5kYXRhKCksIHMyLmRhdGEoKSwgc2l6ZSAqIHNpemVvZihVQ2hhcikpID09IDA7CisgICAgICAg
ICAgICByZXR1cm4gbWVtY21wKGQxLCBkMiwgc2l6ZTEgKiBzaXplb2YoVUNoYXIpKSA9PSAwOwog
ICAgICAgICB9CiAgICAgfQogCg==
</data>
<flag name="review"
          id="47286"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="47287"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60054</attachid>
            <date>2010-06-29 14:27:49 -0700</date>
            <delta_ts>2010-06-29 15:01:39 -0700</delta_ts>
            <desc>Patch with updated ChangeLog and minor fix.</desc>
            <filename>recache.patch</filename>
            <type>text/plain</type>
            <size>5958</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMTQ2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTAtMDYtMjkgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQnVnIDQxMjM4IC0gUmVnRXhwIHBlcmZvcm1hbmNlIHNsb3cg
b24gRHJvbWFlbyBiZW5jaG1hcmsKKworICAgICAgICBPdGhlciBqYXZhc2NyaXB0IGVuZ2luZXMg
YXBwZWFyIHRvIGNhY2hlIHByaW9yIHJlc3VsdHMgb2YgcmVndWxhciAKKyAgICAgICAgZXhwcmVz
c2lvbiBvcGVyYXRpb25zLgorCisgICAgICAgIFN1Z2dlc3QgYWRkaW5nIHNvbWUgc29ydCBvZiBj
YWNoaW5nIG1lY2hhbmlzbSB0byByZWd1bGFyIGV4cHJlc3Npb24gCisgICAgICAgIHByb2Nlc3Np
bmcuCisKKyAgICAgICAgQWRkZWQgYSBzaW5nbGUgZW50cnkgY2FjaGUgb2YgbWF0Y2goKSByZXN1
bHRzIHRvIFJlZ0V4cCBjbGFzcy4KKworICAgICAgICBBbHNvIGFkZGVkIHBlcmZvcm1hbmNlIGlt
cHJvdmVtZW50cyB0byBVU3RyaW5nID09IG9wZXJhdG9yLgorICAgICAgICBGaXJzdCBjaGVjayB0
aGUgaW1wbHMgZm9yIGVxdWFsaXR5LiAgVGhlbiBnZXQgdGhlIGxlbmd0aCBvZgorICAgICAgICBl
YWNoIG9mIHRoZSBub24tbnVsbCBpbXBscy4gIE5leHQgY2hlY2sgdGhlIHNpemVzIGZvciBlcXVh
bGl0eS4KKyAgICAgICAgVGhlbiBjaGVjayB0aGUgZGF0YSBmb3IgdGhlIGNhc2Ugb2YgZGlmZmVy
ZW50IGltcGxzIHRoYXQgcG9pbnQgCisgICAgICAgIHRvIHRoZSBzYW1lIGRhdGEgKG1vc3QgbGlr
ZWx5IGR1ZSB0byBzdWJzdHJpbmdzIGZyb20gdGhlIGJlZ2lubmluZyBvZgorICAgICAgICBhbm90
aGVyIHN0cmluZykuICBMYXN0bHkgd2UgY2hlY2sgdGhlIHVuZGVybHlpbmcgZGF0YSBmb3IgZXF1
YWxpdHkuCisKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z0V4cDo6UmVnRXhwKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjptYXRjaCk6CisgICAgICAgICog
cnVudGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAgICAgICAg
KEpTQzo6b3BlcmF0b3I9PSk6CisKIDIwMTAtMDYtMjkgIE5hdGhhbiBMYXdyZW5jZSAgPG5sYXdy
ZW5jZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCShyZXZpc2lvbiA2MTQ0MykKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEs
NyBAQCBpbmxpbmUgUmVnRXhwOjpSZWdFeHAoSlNHbG9iYWxEYXRhKiBnbG9iCiAgICAgLCBtX2Zs
YWdCaXRzKDApCiAgICAgLCBtX2NvbnN0cnVjdGlvbkVycm9yKDApCiAgICAgLCBtX251bVN1YnBh
dHRlcm5zKDApCisgICAgLCBtX2xhc3RNYXRjaFN0YXJ0KC0xKQogewogICAgIGNvbXBpbGUoZ2xv
YmFsRGF0YSk7CiB9CkBAIC02MCw2ICs2MSw3IEBAIGlubGluZSBSZWdFeHA6OlJlZ0V4cChKU0ds
b2JhbERhdGEqIGdsb2IKICAgICAsIG1fZmxhZ0JpdHMoMCkKICAgICAsIG1fY29uc3RydWN0aW9u
RXJyb3IoMCkKICAgICAsIG1fbnVtU3VicGF0dGVybnMoMCkKKyAgICAsIG1fbGFzdE1hdGNoU3Rh
cnQoLTEpCiB7CiAgICAgLy8gTk9URTogVGhlIGdsb2JhbCBmbGFnIGlzIGhhbmRsZWQgb24gYSBj
YXNlLWJ5LWNhc2UgYmFzaXMgYnkgZnVuY3Rpb25zIGxpa2UKICAgICAvLyBTdHJpbmc6Om1hdGNo
IGFuZCBSZWdFeHBPYmplY3Q6Om1hdGNoLgpAQCAtMTA5LDggKzExMSwyNCBAQCBpbnQgUmVnRXhw
OjptYXRjaChjb25zdCBVU3RyaW5nJiBzLCBpbnQgCiAgICAgaWYgKG92ZWN0b3IpCiAgICAgICAg
IG92ZWN0b3ItPnJlc2l6ZSgwKTsKIAotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
cnRPZmZzZXQpID4gcy5zaXplKCkgfHwgcy5pc051bGwoKSkKKyAgICBpZiAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSA+IHMuc2l6ZSgpIHx8IHMuaXNOdWxsKCkpIHsKKyAgICAg
ICAgbV9sYXN0TWF0Y2hTdHJpbmcgPSBVU3RyaW5nKCk7CisgICAgICAgIG1fbGFzdE1hdGNoU3Rh
cnQgPSAtMTsKKyAgICAgICAgbV9sYXN0T1ZlY3Rvci5zaHJpbmsoMCk7CiAgICAgICAgIHJldHVy
biAtMTsKKyAgICB9CisgICAgCisgICAgLy8gUGVyZm9ybSBjaGVjayB0byBzZWUgaWYgdGhpcyBt
YXRjaCBjYWxsIGlzIHRoZSBzYW1lIGFzIHRoZSBsYXN0IG1hdGNoIGludm9jYXRpb24KKyAgICAv
LyBhbmQgaWYgaXQgaXMgcmV0dXJuIHRoZSBwcmlvciByZXN1bHQuCisgICAgaWYgKChzdGFydE9m
ZnNldCA9PSBtX2xhc3RNYXRjaFN0YXJ0KSAmJiAocy5yZXAoKSA9PSBtX2xhc3RNYXRjaFN0cmlu
Zy5yZXAoKSkpIHsKKyAgICAgICAgaWYgKG92ZWN0b3IpCisgICAgICAgICAgICAqb3ZlY3RvciA9
IG1fbGFzdE9WZWN0b3I7CisgICAgICAgIAorICAgICAgICBpZiAobV9sYXN0T1ZlY3Rvci5pc0Vt
cHR5KCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgcmV0dXJuIG1fbGFzdE9W
ZWN0b3IuYXQoMCk7CisgICAgfQogCiAjaWYgRU5BQkxFKFlBUlJfSklUKQogICAgIGlmICghIW1f
cmVnRXhwSklUQ29kZSkgewpAQCAtMTQ3LDkgKzE2NSwyMiBAQCBpbnQgUmVnRXhwOjptYXRjaChj
b25zdCBVU3RyaW5nJiBzLCBpbnQgCiAgICAgICAgICAgICBpZiAob3ZlY3RvcikKICAgICAgICAg
ICAgICAgICBvdmVjdG9yLT5jbGVhcigpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBt
X2xhc3RNYXRjaFN0cmluZyA9IHM7CisgICAgICAgIG1fbGFzdE1hdGNoU3RhcnQgPSBzdGFydE9m
ZnNldDsKKworICAgICAgICBpZiAob3ZlY3RvcikKKyAgICAgICAgICAgIG1fbGFzdE9WZWN0b3Ig
PSAqb3ZlY3RvcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9sYXN0T1ZlY3RvciA9IG5v
blJldHVybmVkT3ZlY3RvcjsKKwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAg
IG1fbGFzdE1hdGNoU3RyaW5nID0gVVN0cmluZygpOworICAgIG1fbGFzdE1hdGNoU3RhcnQgPSAt
MTsKKyAgICBtX2xhc3RPVmVjdG9yLnNocmluaygwKTsKKwogICAgIHJldHVybiAtMTsKIH0KIApJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCShyZXZpc2lvbiA2MTQ0MykKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBtX2ZsYWdCaXRzOwogICAgICAgICBjb25zdCBj
aGFyKiBtX2NvbnN0cnVjdGlvbkVycm9yOwogICAgICAgICB1bnNpZ25lZCBtX251bVN1YnBhdHRl
cm5zOworICAgICAgICBVU3RyaW5nIG1fbGFzdE1hdGNoU3RyaW5nOworICAgICAgICBpbnQgbV9s
YXN0TWF0Y2hTdGFydDsKKyAgICAgICAgVmVjdG9yPGludCwgMzI+IG1fbGFzdE9WZWN0b3I7CiAK
ICNpZiBFTkFCTEUoWUFSUl9KSVQpCiAgICAgICAgIFlhcnI6OlJlZ2V4Q29kZUJsb2NrIG1fcmVn
RXhwSklUQ29kZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCShyZXZpc2lvbiA2MTQ0
MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTgsMjEgKzE1OCw0MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFVTdHJpbmcmIHMxLCBjb25zdCBVU3RyaW5nJiBzMikKICAg
ICB7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBzMS5zaXplKCk7Ci0gICAgICAgIHN3aXRjaCAo
c2l6ZSkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4gIXMyLnNpemUoKTsK
KyAgICAgICAgVVN0cmluZzo6UmVwKiByZXAxID0gczEucmVwKCk7CisgICAgICAgIFVTdHJpbmc6
OlJlcCogcmVwMiA9IHMyLnJlcCgpOworICAgICAgICB1bnNpZ25lZCBzaXplMSA9IDA7CisgICAg
ICAgIHVuc2lnbmVkIHNpemUyID0gMDsKKworICAgICAgICBpZiAocmVwMSA9PSByZXAyKSAvLyBJ
ZiB0aGV5J3JlIHRoZSBzYW1lIHJlcCwgdGhleSdyZSBlcXVhbC4KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKHJlcDEpCisgICAgICAgICAgICBzaXplMSA9
IHJlcDEtPmxlbmd0aCgpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChyZXAyKQorICAgICAg
ICAgICAgc2l6ZTIgPSByZXAyLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAo
c2l6ZTEgIT0gc2l6ZTIpIC8vIElmIHRoZSBsZW5ndGhzIGFyZSBub3QgdGhlIHNhbWUsIHdlJ3Jl
IGRvbmUuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAo
IXNpemUxKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICAvLyBB
dCB0aGlzIHBvaW50IHdlIGtub3cgCisgICAgICAgIC8vICAgKGEpIHRoYXQgdGhlIHN0cmluZ3Mg
YXJlIHRoZSBzYW1lIGxlbmd0aCBhbmQKKyAgICAgICAgLy8gICAoYikgdGhhdCB0aGV5IGFyZSBn
cmVhdGVyIHRoYW4gemVybyBsZW5ndGguCisgICAgICAgIGNvbnN0IFVDaGFyKiBkMSA9IHJlcDEt
PmNoYXJhY3RlcnMoKTsKKyAgICAgICAgY29uc3QgVUNoYXIqIGQyID0gcmVwMi0+Y2hhcmFjdGVy
cygpOworICAgICAgICAKKyAgICAgICAgaWYgKGQxID09IGQyKSAvLyBDaGVjayB0byBzZWUgaWYg
dGhlIGRhdGEgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIAorICAgICAgICAvLyBEbyBxdWljayBjaGVja3MgZm9yIHNpemVzIDEgYW5kIDIu
CisgICAgICAgIHN3aXRjaCAoc2l6ZTEpIHsKICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAg
cmV0dXJuIHMyLnNpemUoKSA9PSAxICYmIHMxLmRhdGEoKVswXSA9PSBzMi5kYXRhKClbMF07Ci0g
ICAgICAgIGNhc2UgMjogewotICAgICAgICAgICAgaWYgKHMyLnNpemUoKSAhPSAyKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBkMSA9IHMx
LmRhdGEoKTsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBkMiA9IHMyLmRhdGEoKTsKKyAgICAg
ICAgICAgIHJldHVybiBkMVswXSA9PSBkMlswXTsKKyAgICAgICAgY2FzZSAyOgogICAgICAgICAg
ICAgcmV0dXJuIChkMVswXSA9PSBkMlswXSkgJiAoZDFbMV0gPT0gZDJbMV0pOwotICAgICAgICB9
CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gczIuc2l6ZSgpID09IHNpemUg
JiYgbWVtY21wKHMxLmRhdGEoKSwgczIuZGF0YSgpLCBzaXplICogc2l6ZW9mKFVDaGFyKSkgPT0g
MDsKKyAgICAgICAgICAgIHJldHVybiBtZW1jbXAoZDEsIGQyLCBzaXplMSAqIHNpemVvZihVQ2hh
cikpID09IDA7CiAgICAgICAgIH0KICAgICB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>