<?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>35899</bug_id>
          
          <creation_ts>2010-03-08 18:57:39 -0800</creation_ts>
          <short_desc>Switching malloc implementations requires a world rebuild</short_desc>
          <delta_ts>2010-03-10 15:12:10 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>197418</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-03-08 18:57:39 -0800</bug_when>
    <thetext>...due to recent ValueCheck integration of pointer checking.

Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197419</commentid>
    <comment_count>1</comment_count>
      <attachid>50268</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-03-08 18:59:20 -0800</bug_when>
    <thetext>Created attachment 50268
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197420</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-08 19:03:08 -0800</bug_when>
    <thetext>Attachment 50268 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/wtf/FastMalloc.cpp:378:  More than one command on the same line in if  [whitespace/parens] [4]
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>197422</commentid>
    <comment_count>3</comment_count>
      <attachid>50268</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-03-08 19:13:30 -0800</bug_when>
    <thetext>Comment on attachment 50268
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197431</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-08 19:57:45 -0800</bug_when>
    <thetext>+void fastCheckConsistency(const void* p)

I&apos;d give this function a name related to what it does. Something like pointerIsAllocated, perhaps?

Also, the prefix &quot;fast&quot; makes it look like it works with fastMalloc, while it&apos;s the opposite that is true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197443</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-03-08 21:01:40 -0800</bug_when>
    <thetext>&gt; +void fastCheckConsistency(const void* p)
&gt; 
&gt; I&apos;d give this function a name related to what it does. Something like
&gt; pointerIsAllocated, perhaps?

Right now, the function does the consistency checking, assertions included.

Are you suggesting moving the assertions to the caller?

&gt; Also, the prefix &quot;fast&quot; makes it look like it works with fastMalloc, while it&apos;s
&gt; the opposite that is true.

It is the fastMalloc library that does the consistency checking. Whether fastMalloc happens to be using the system malloc or tcmalloc is its own implementation detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197474</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-08 23:31:25 -0800</bug_when>
    <thetext>&gt; Are you suggesting moving the assertions to the caller?

Perhaps. Or maybe the function could be called somehow else - &quot;consistency&quot; doesn&apos;t mean much for a void*.

&gt; It is the fastMalloc library that does the consistency checking.

I didn&apos;t know there was such a thing as &quot;fastMalloc library&quot; encompassing all WebKit allocator behaviors. I always thought of it as a particular allocator, and I&apos;m sure some others would be confused, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197663</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-03-09 10:37:00 -0800</bug_when>
    <thetext>&gt; &gt; Are you suggesting moving the assertions to the caller?
&gt; 
&gt; Perhaps. Or maybe the function could be called somehow else - &quot;consistency&quot;
&gt; doesn&apos;t mean much for a void*.

OK. Can you suggest something specific?

&gt; &gt; It is the fastMalloc library that does the consistency checking.
&gt; 
&gt; I didn&apos;t know there was such a thing as &quot;fastMalloc library&quot; encompassing all
&gt; WebKit allocator behaviors. I always thought of it as a particular allocator,
&gt; and I&apos;m sure some others would be confused, too.

I didn&apos;t mean to say that FastMalloc services all WebKit allocations. Indeed, it doesn&apos;t. And, therefore, if you use ValueCheck&lt;void*&gt; with a pointer allocated by an allocator that behaves differently than calling fastMalloc/fastFree would, you&apos;ll get undefined behavior. But that was true before this patch, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197664</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-03-09 10:37:32 -0800</bug_when>
    <thetext>I&apos;m going to close this bug so it doesn&apos;t show up in the commit queue, but we can continue discussing what to do next with it.

http://trac.webkit.org/changeset/55706</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197698</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-09 11:35:49 -0800</bug_when>
    <thetext>As mentioned above, &quot;isPointerAllocated&quot; or &quot;allocationSize&quot; would be a great thing for a FastMalloc.h to expose. We might even be able implement it for fastMalloc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197878</commentid>
    <comment_count>10</comment_count>
      <attachid>50369</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-03-09 21:29:08 -0800</bug_when>
    <thetext>Created attachment 50369
patch

Here&apos;s an attempt at fixing Alexey&apos;s last review comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197879</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-03-09 21:29:55 -0800</bug_when>
    <thetext>Reopening for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197929</commentid>
    <comment_count>12</comment_count>
      <attachid>50369</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-10 01:17:48 -0800</bug_when>
    <thetext>Comment on attachment 50369
patch

It seems that tcmalloc version of fastMallocSize could still use some work. To match OS-provided ones, it should return 0 for pointers to unallocated memory, but there are at least two cases when it doesn&apos;t:

1) It will crash if span is null.
2) It disregards low bits of a pointer, so it can mistakenly return a non-zero result.

r=me though, this is already a good improvement. Please add a FIXME if you decide to land as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198177</commentid>
    <comment_count>13</comment_count>
      <attachid>50369</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-10 09:42:57 -0800</bug_when>
    <thetext>Comment on attachment 50369
patch

&gt; +    const PageID p = reinterpret_cast&lt;uintptr_t&gt;(ptr) &gt;&gt; kPageShift;

Should not use const. Should be named &quot;p&quot;, not &quot;page&quot;. Should check that the low bits are all zero, as Alexey suggested, and return 0 if they are not.

&gt; +    size_t cl = pageheap-&gt;GetSizeClassIfCached(p);
&gt; +    if (cl)
&gt; +        return ByteSizeForClass(cl);

Should be named &quot;sizeClass&quot;, not &quot;cl&quot;. Should be defined inside the if statement.

&gt; +    Span* span = pageheap-&gt;GetDescriptor(p);
&gt; +    ASSERT(span);

Should return 0 if span is 0 rather than asserting, as Alexey suggested. Unless the GetDescriptor function is guaranteed to never return 0, in which case it is appropriate to assert.

&gt; +    cl = span-&gt;sizeclass;
&gt; +    if (cl) {

Should be named &quot;sizeClass&quot;, not &quot;cl&quot;. Should be defined inside the if statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198200</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-10 10:33:29 -0800</bug_when>
    <thetext>&gt; Should check that the low bits are all zero, as Alexey suggested, and return 0 if they are not.

Is this a correct thing to do? I was somewhat vague in my comment, but I think we&apos;d be returning 0 for all blocks in a page but the first one if we simply checked the bits for being zero.

Right now, the function is guaranteed to return a correct result for allocated pointers, and has undefined behavior otherwise - which is not exactly what malloc_size does, but not too bad either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198234</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-10 11:09:08 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Is this a correct thing to do? I was somewhat vague in my comment, but I think
&gt; we&apos;d be returning 0 for all blocks in a page but the first one if we simply
&gt; checked the bits for being zero.

Oh, OK. Seems like the correct check should not be too difficult. I didn&apos;t read the rest of the FastMalloc code to figure out what it would be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198281</commentid>
    <comment_count>16</comment_count>
      <attachid>50429</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-03-10 13:00:10 -0800</bug_when>
    <thetext>Created attachment 50429
patch

Turned out not to be too hard to add the improvements Alexey mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198282</commentid>
    <comment_count>17</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-03-10 13:01:37 -0800</bug_when>
    <thetext>&gt; Should not use const. Should be named &quot;p&quot;, not &quot;page&quot;.
&gt; Should be named &quot;sizeClass&quot;, not &quot;cl&quot;.

I made the &apos;if&apos; changes Darin mentioned, but I&apos;d like to keep these names, if that&apos;s OK. I agree that they&apos;re not optimal, and not in the WebKit coding style, but they match the naming conventions of the rest of the file, which makes text search a lot easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198285</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-10 13:05:42 -0800</bug_when>
    <thetext>Attachment 50429 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/wtf/FastMalloc.cpp:4140:  tc_length is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/wtf/FastMalloc.cpp:4158:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/wtf/FastMalloc.cpp:4158:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 3 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>198363</commentid>
    <comment_count>19</comment_count>
      <attachid>50429</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-03-10 15:07:33 -0800</bug_when>
    <thetext>Comment on attachment 50429
patch

&gt; +    for (void* free = span-&gt;objects; free != NULL; free = *((void**) free))
&gt; +        if (ptr == free)
&gt; +            return 0;

Braces please.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198364</commentid>
    <comment_count>20</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-03-10 15:12:10 -0800</bug_when>
    <thetext>Committed revision 55811.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50268</attachid>
            <date>2010-03-08 18:59:20 -0800</date>
            <delta_ts>2010-03-08 19:13:30 -0800</delta_ts>
            <desc>patch</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>2981</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1NzAzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDMtMDggIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTd2l0Y2hpbmcgbWFsbG9jIGltcGxlbWVudGF0aW9ucyByZXF1
aXJlcyBhIHdvcmxkIHJlYnVpbGQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM1ODk5CisKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5jcHA6CisgICAg
ICAgIChXVEY6OmZhc3RDaGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NT
dGF0czo6ZmFzdENoZWNrQ29uc2lzdGVuY3kpOgorICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jLmg6
CisgICAgICAgICogd3RmL1ZhbHVlQ2hlY2suaDoKKyAgICAgICAgKFdURjo6KTogTW92ZWQgcG9p
bnRlciBjaGVja2luZyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGluIEZhc3RNYWxsb2MuY3BwLAor
ICAgICAgICBzbyB5b3UgY2FuIHN3aXRjaCBtYWxsb2MgaW1wbGVtZW50YXRpb25zIHdpdGhvdXQg
cmVidWlsZGluZyB0aGUgd29ybGQuCisKIDIwMTAtMDMtMDcgIE9saXZlciBIdW50ICA8b2xpdmVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS93dGYvRmFzdE1hbGxvYy5jcHAJKHJldmlzaW9uIDU1NTU0KQorKysgSmF2YVNjcmlwdENv
cmUvd3RmL0Zhc3RNYWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzMsNiArMzY5LDE3IEBA
IEZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWMKICAgICByZXR1cm4gc3Rh
dGlzdGljczsKIH0KIAordm9pZCBmYXN0Q2hlY2tDb25zaXN0ZW5jeShjb25zdCB2b2lkKiBwKQor
eworI2lmIChkZWZpbmVkKFVTRV9TWVNURU1fTUFMTE9DKSAmJiBVU0VfU1lTVEVNX01BTExPQykg
fHwgIWRlZmluZWQoTkRFQlVHKQorI2lmIE9TKERBUldJTikKKyAgICAgICAgQVNTRVJUKG1hbGxv
Y19zaXplKHApKTsKKyNlbGlmIENPTVBJTEVSKE1TVkMpCisgICAgICAgIEFTU0VSVChfbXNpemUo
Y29uc3RfY2FzdDxQKj4ocCkpKTsKKyNlbmRpZgorI2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNl
IFdURgogCiAjaWYgT1MoREFSV0lOKQpAQCAtNDQ0OSw2ICs0NDU2LDEwIEBAIEZhc3RNYWxsb2NT
dGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWMKICAgICByZXR1cm4gc3RhdGlzdGljczsKIH0K
IAordm9pZCBmYXN0Q2hlY2tDb25zaXN0ZW5jeShjb25zdCB2b2lkKikKK3sKK30KKwogfSAvLyBu
YW1lc3BhY2UgV1RGCiAjZW5kaWYKIApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxs
b2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5oCShyZXZp
c2lvbiA1NTU1NCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdm9pZCogZmFzdENh
bGxvYyhzaXplX3QgbnVtRWxlbWVudHMsIHNpemVfdCBlbGVtZW50U2l6ZSk7CiAgICAgdm9pZCog
ZmFzdFJlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgICAgY2hhciogZmFzdFN0ckR1cChjb25zdCBj
aGFyKik7CisgICAgdm9pZCBmYXN0Q2hlY2tDb25zaXN0ZW5jeShjb25zdCB2b2lkKik7CiAKICAg
ICBzdHJ1Y3QgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgewogICAgICAgICBUcnlNYWxsb2NSZXR1cm5W
YWx1ZSh2b2lkKiBkYXRhKQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1ZhbHVlQ2hlY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvVmFsdWVDaGVjay5oCShyZXZpc2lvbiA1
NTU1NCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9WYWx1ZUNoZWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDEyICsyNiw3IEBACiAjaWZuZGVmIFZhbHVlQ2hlY2tfaAogI2RlZmluZSBWYWx1ZUNo
ZWNrX2gKIAotLy8gRm9yIG1hbGxvY19zaXplIGFuZCBfbXNpemUuCi0jaWYgT1MoREFSV0lOKQot
I2luY2x1ZGUgPG1hbGxvYy9tYWxsb2MuaD4KLSNlbGlmIENPTVBJTEVSKE1TVkMpCi0jaW5jbHVk
ZSA8bWFsbG9jLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBuYW1l
c3BhY2UgV1RGIHsKIApAQCAtNDcsMTMgKzQyLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3Ry
dWN0IFZhbHVlQ2hlY2s8UAogICAgIHsKICAgICAgICAgaWYgKCFwKQogICAgICAgICAgICAgcmV0
dXJuOwotI2lmIChkZWZpbmVkKFVTRV9TWVNURU1fTUFMTE9DKSAmJiBVU0VfU1lTVEVNX01BTExP
QykgfHwgIWRlZmluZWQoTkRFQlVHKQotI2lmIE9TKERBUldJTikKLSAgICAgICAgQVNTRVJUKG1h
bGxvY19zaXplKHApKTsKLSNlbGlmIENPTVBJTEVSKE1TVkMpCi0gICAgICAgIEFTU0VSVChfbXNp
emUoY29uc3RfY2FzdDxQKj4ocCkpKTsKLSNlbmRpZgotI2VuZGlmCisgICAgICAgIGZhc3RDaGVj
a0NvbnNpc3RlbmN5KHApOwogICAgICAgICBWYWx1ZUNoZWNrPFA+OjpjaGVja0NvbnNpc3RlbmN5
KCpwKTsKICAgICB9CiB9Owo=
</data>
<flag name="review"
          id="33363"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50369</attachid>
            <date>2010-03-09 21:29:08 -0800</date>
            <delta_ts>2010-03-10 13:00:10 -0800</delta_ts>
            <desc>patch</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>4597</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1NzYxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDMtMDkgIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmVkIGZhc3RDaGVja0NvbnNpc3RlbmN5IHRvIG1h
dGNoIHNvbWUgcmV2aWV3IGNvbW1lbnRzOgorICAgICAgICAgICAgLSByZW5hbWVkIGZhc3RDaGVj
a0NvbnNpc3RlbmN5IHRvIGZhc3RNYWxsb2NTaXplLCBhbmQgY2hhbmdlZCBWYWx1ZUNoZWNrCisg
ICAgICAgICAgICAgIHRvIEFTU0VSVCB0aGF0IGEgcG9pbnRlcidzIGZhc3RNYWxsb2NTaXplIGlz
IG5vdCAwLgorICAgICAgICAgICAgLSBpbXBsZW1lbnRlZCBhIHZlcnNpb24gb2YgZmFzdE1hbGxv
Y1NpemUgZm9yIHRjbWFsbG9jLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAg
ICAgICAqIHd0Zi9GYXN0TWFsbG9jLmNwcDoKKyAgICAgICAgKFdURjo6ZmFzdE1hbGxvY1NpemUp
OiBSZW5hbWVkLiBGaXhlZCBpbmRlbnRhdGlvbi4KKworICAgICAgICAoV1RGOjpUQ01hbGxvY19Q
YWdlSGVhcDo6c2NhdmVuZ2UpOiBSZW1vdmVkIGFuIGluY29ycmVjdCBBU1NFUlQgdGhhdAorICAg
ICAgICBnb3QgaW4gdGhlIHdheSBvZiB0ZXN0aW5nIHRoZSB0Y21hbGxvYyBpbXBsZW1lbnRhdGlv
bi4gKE1vcmUgaW5mb3JtYXRpb24KKyAgICAgICAgb24gd2h5IHRoaXMgQVNTRVJUIGlzIGluY29y
cmVjdCBpcyBpbiA8cmRhcjovL3Byb2JsZW0vNzE2NTkxNz4uKQorCisgICAgICAgIChXVEY6OlRD
TWFsbG9jU3RhdHM6OmZhc3RNYWxsb2NTaXplKTogSW1wbGVtZW50ZWQgZm9yIHRjbWFsbG9jLgor
CisgICAgICAgICogd3RmL0Zhc3RNYWxsb2MuaDogVXBkYXRlZCBmb3IgcmVuYW1lLgorCisgICAg
ICAgICogd3RmL1ZhbHVlQ2hlY2suaDoKKyAgICAgICAgKFdURjo6KTogTW92ZWQgdGhlIEFTU0VS
VCB0aGF0IHVzZWQgdG8gYmUgaW4gZmFzdENoZWNrQ29uc2lzdGVuY3kgaGVyZS4KKwogMjAxMC0w
My0wOSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChyZXZlcnRpbmcgcjU0NTEwKS4KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDU1NzA2KQorKysgSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsNiArMzE2LDcgQEAgX19aTjNX
VEYxMnJhbmRvbU51bWJlckV2CiBfX1pOM1dURjEzY3VycmVudFRocmVhZEV2CiBfX1pOM1dURjEz
dHJ5RmFzdENhbGxvY0VtbQogX19aTjNXVEYxM3RyeUZhc3RNYWxsb2NFbQorX19aTjNXVEYxNGZh
c3RNYWxsb2NTaXplRVBLdgogX19aTjNXVEYxNVRocmVhZENvbmRpdGlvbjR3YWl0RVJOU181TXV0
ZXhFCiBfX1pOM1dURjE1VGhyZWFkQ29uZGl0aW9uNnNpZ25hbEV2CiBfX1pOM1dURjE1VGhyZWFk
Q29uZGl0aW9uOWJyb2FkY2FzdEV2CkBAIC0zMjcsNyArMzI4LDYgQEAgX19aTjNXVEYxNmZhc3Ra
ZXJvZWRNYWxsb2NFbQogX19aTjNXVEYxOGRhdGVUb0RheXNGcm9tMTk3MEVpaWkKIF9fWk4zV1RG
MThtb250aEZyb21EYXlJblllYXJFaWIKIF9fWk4zV1RGMTlpbml0aWFsaXplVGhyZWFkaW5nRXYK
LV9fWk4zV1RGMjBmYXN0Q2hlY2tDb25zaXN0ZW5jeUVQS3YKIF9fWk4zV1RGMjBmYXN0TWFsbG9j
U3RhdGlzdGljc0V2CiBfX1pOM1dURjIxUmVmQ291bnRlZExlYWtDb3VudGVyMTZzdXBwcmVzc01l
c3NhZ2VzRVBLYwogX19aTjNXVEYyMVJlZkNvdW50ZWRMZWFrQ291bnRlcjI0Y2FuY2VsTWVzc2Fn
ZVN1cHByZXNzaW9uRVBLYwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmNwcAkocmV2aXNp
b24gNTU3NTApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3OSwxNCArMzc5LDE0IEBAIEZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxs
b2NTdGF0aXN0aWMKICAgICByZXR1cm4gc3RhdGlzdGljczsKIH0KIAotdm9pZCBmYXN0Q2hlY2tD
b25zaXN0ZW5jeShjb25zdCB2b2lkKiBwKQorc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZv
aWQqIHApCiB7Ci0jaWYgKGRlZmluZWQoVVNFX1NZU1RFTV9NQUxMT0MpICYmIFVTRV9TWVNURU1f
TUFMTE9DKSB8fCAhZGVmaW5lZChOREVCVUcpCiAjaWYgT1MoREFSV0lOKQotICAgICAgICBBU1NF
UlQobWFsbG9jX3NpemUocCkpOworICAgIHJldHVybiBtYWxsb2Nfc2l6ZShwKTsKICNlbGlmIENP
TVBJTEVSKE1TVkMpCi0gICAgICAgIEFTU0VSVChfbXNpemUoY29uc3RfY2FzdDx2b2lkKj4ocCkp
KTsKLSNlbmRpZgorICAgIHJldHVybiBfbXNpemUoY29uc3RfY2FzdDx2b2lkKj4ocCkpOworI2Vs
c2UKKyAgICByZXR1cm4gMTsKICNlbmRpZgogfQogCkBAIC0xNTQ4LDcgKzE1NDgsNiBAQCB2b2lk
IFRDTWFsbG9jX1BhZ2VIZWFwOjpzY2F2ZW5nZSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBB
U1NFUlQoIXNob3VsZENvbnRpbnVlU2NhdmVuZ2luZygpKTsKICAgICBwYWdlc19jb21taXR0ZWRf
c2luY2VfbGFzdF9zY2F2ZW5nZV8gPSAwOwogfQogCkBAIC00NDY3LDggKzQ0NjYsMjIgQEAgRmFz
dE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRpc3RpYwogICAgIHJldHVybiBzdGF0aXN0
aWNzOwogfQogCi12b2lkIGZhc3RDaGVja0NvbnNpc3RlbmN5KGNvbnN0IHZvaWQqKQorc2l6ZV90
IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqIHB0cikKIHsKKyAgICBjb25zdCBQYWdlSUQgcCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpID4+IGtQYWdlU2hpZnQ7CisgICAgc2l6
ZV90IGNsID0gcGFnZWhlYXAtPkdldFNpemVDbGFzc0lmQ2FjaGVkKHApOworICAgIGlmIChjbCkK
KyAgICAgICAgcmV0dXJuIEJ5dGVTaXplRm9yQ2xhc3MoY2wpOworCisgICAgU3Bhbiogc3BhbiA9
IHBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yKHApOworICAgIEFTU0VSVChzcGFuKTsKKyAgICBjbCA9
IHNwYW4tPnNpemVjbGFzczsKKyAgICBpZiAoY2wpIHsKKyAgICAgICAgcGFnZWhlYXAtPkNhY2hl
U2l6ZUNsYXNzKHAsIGNsKTsKKyAgICAgICAgcmV0dXJuIEJ5dGVTaXplRm9yQ2xhc3MoY2wpOwor
ICAgIH0KKworICAgIHJldHVybiBzcGFuLT5sZW5ndGggPDwga1BhZ2VTaGlmdDsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV1RGCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmgJKHJldmlzaW9uIDU1
NzUwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB2b2lkKiBmYXN0Q2FsbG9jKHNp
emVfdCBudW1FbGVtZW50cywgc2l6ZV90IGVsZW1lbnRTaXplKTsKICAgICB2b2lkKiBmYXN0UmVh
bGxvYyh2b2lkKiwgc2l6ZV90KTsKICAgICBjaGFyKiBmYXN0U3RyRHVwKGNvbnN0IGNoYXIqKTsK
LSAgICB2b2lkIGZhc3RDaGVja0NvbnNpc3RlbmN5KGNvbnN0IHZvaWQqKTsKKyAgICBzaXplX3Qg
ZmFzdE1hbGxvY1NpemUoY29uc3Qgdm9pZCopOwogCiAgICAgc3RydWN0IFRyeU1hbGxvY1JldHVy
blZhbHVlIHsKICAgICAgICAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUodm9pZCogZGF0YSkKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3d0Zi9WYWx1ZUNoZWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvd3RmL1ZhbHVlQ2hlY2suaAkocmV2aXNpb24gNTU3MDYpCisrKyBKYXZhU2NyaXB0Q29y
ZS93dGYvVmFsdWVDaGVjay5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBWYWx1ZUNoZWNrPFAKICAgICB7CiAgICAgICAgIGlmICgh
cCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZmFzdENoZWNrQ29uc2lzdGVuY3kocCk7
CisgICAgICAgIEFTU0VSVChmYXN0TWFsbG9jU2l6ZShwKSk7CiAgICAgICAgIFZhbHVlQ2hlY2s8
UD46OmNoZWNrQ29uc2lzdGVuY3koKnApOwogICAgIH0KIH07Cg==
</data>
<flag name="review"
          id="33502"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50429</attachid>
            <date>2010-03-10 13:00:10 -0800</date>
            <delta_ts>2010-03-10 15:07:33 -0800</delta_ts>
            <desc>patch</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>8048</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1NzYxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTAtMDMtMDkgIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmVkIGZhc3RDaGVja0NvbnNpc3RlbmN5IHRvIG1h
dGNoIHNvbWUgcmV2aWV3IGNvbW1lbnRzOgorICAgICAgICAgICAgLSByZW5hbWVkIGZhc3RDaGVj
a0NvbnNpc3RlbmN5IHRvIGZhc3RNYWxsb2NTaXplLCBhbmQgY2hhbmdlZCBWYWx1ZUNoZWNrCisg
ICAgICAgICAgICAgIHRvIEFTU0VSVCB0aGF0IGEgcG9pbnRlcidzIGZhc3RNYWxsb2NTaXplIGlz
IG5vdCAwLgorICAgICAgICAgICAgLSBpbXBsZW1lbnRlZCBhIHZlcnNpb24gb2YgZmFzdE1hbGxv
Y1NpemUgZm9yIHRjbWFsbG9jLgorICAgICAgICAgICAgCisgICAgICAgIEFsc28gbW92ZWQgc29t
ZSBwcmUtZXhpc3RpbmcgY29kZSBhcm91bmQgdG8gYXZvaWQgYSBwcm9ibGVtIHJlbGF0ZWQgdG8K
KyAgICAgICAgbWlzbWF0Y2hlZCAjZGVmaW5lLyN1bmRlZiBvZiBtYWxsb2MvZnJlZSBpbiB0aGlz
IHNvdXJjZSBmaWxlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAq
IHd0Zi9GYXN0TWFsbG9jLmNwcDoKKyAgICAgICAgKFdURjo6ZmFzdE1hbGxvY1NpemUpOiBSZW5h
bWVkLiBGaXhlZCBpbmRlbnRhdGlvbi4KKworICAgICAgICAoV1RGOjpUQ01hbGxvY19QYWdlSGVh
cDo6c2NhdmVuZ2UpOiBSZW1vdmVkIGFuIGluY29ycmVjdCBBU1NFUlQgdGhhdAorICAgICAgICBn
b3QgaW4gdGhlIHdheSBvZiB0ZXN0aW5nIHRoZSB0Y21hbGxvYyBpbXBsZW1lbnRhdGlvbi4gKE1v
cmUgaW5mb3JtYXRpb24KKyAgICAgICAgb24gd2h5IHRoaXMgQVNTRVJUIGlzIGluY29ycmVjdCBp
cyBpbiA8cmRhcjovL3Byb2JsZW0vNzE2NTkxNz4uKQorCisgICAgICAgIChXVEY6OlRDTWFsbG9j
U3RhdHM6OmZhc3RNYWxsb2NTaXplKTogSW1wbGVtZW50ZWQgZm9yIHRjbWFsbG9jLgorCisgICAg
ICAgICogd3RmL0Zhc3RNYWxsb2MuaDogVXBkYXRlZCBmb3IgcmVuYW1lLgorCisgICAgICAgICog
d3RmL1ZhbHVlQ2hlY2suaDoKKyAgICAgICAgKFdURjo6KTogTW92ZWQgdGhlIEFTU0VSVCB0aGF0
IHVzZWQgdG8gYmUgaW4gZmFzdENoZWNrQ29uc2lzdGVuY3kgaGVyZS4KKwogMjAxMC0wMy0wOSAg
R2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChyZXZlcnRpbmcgcjU0NTEwKS4KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAJKHJldmlzaW9uIDU1NzA2KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsNiArMzE2LDcgQEAgX19aTjNXVEYxMnJh
bmRvbU51bWJlckV2CiBfX1pOM1dURjEzY3VycmVudFRocmVhZEV2CiBfX1pOM1dURjEzdHJ5RmFz
dENhbGxvY0VtbQogX19aTjNXVEYxM3RyeUZhc3RNYWxsb2NFbQorX19aTjNXVEYxNGZhc3RNYWxs
b2NTaXplRVBLdgogX19aTjNXVEYxNVRocmVhZENvbmRpdGlvbjR3YWl0RVJOU181TXV0ZXhFCiBf
X1pOM1dURjE1VGhyZWFkQ29uZGl0aW9uNnNpZ25hbEV2CiBfX1pOM1dURjE1VGhyZWFkQ29uZGl0
aW9uOWJyb2FkY2FzdEV2CkBAIC0zMjcsNyArMzI4LDYgQEAgX19aTjNXVEYxNmZhc3RaZXJvZWRN
YWxsb2NFbQogX19aTjNXVEYxOGRhdGVUb0RheXNGcm9tMTk3MEVpaWkKIF9fWk4zV1RGMThtb250
aEZyb21EYXlJblllYXJFaWIKIF9fWk4zV1RGMTlpbml0aWFsaXplVGhyZWFkaW5nRXYKLV9fWk4z
V1RGMjBmYXN0Q2hlY2tDb25zaXN0ZW5jeUVQS3YKIF9fWk4zV1RGMjBmYXN0TWFsbG9jU3RhdGlz
dGljc0V2CiBfX1pOM1dURjIxUmVmQ291bnRlZExlYWtDb3VudGVyMTZzdXBwcmVzc01lc3NhZ2Vz
RVBLYwogX19aTjNXVEYyMVJlZkNvdW50ZWRMZWFrQ291bnRlcjI0Y2FuY2VsTWVzc2FnZVN1cHBy
ZXNzaW9uRVBLYwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmNwcAkocmV2aXNpb24gNTU3
NTApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3OSwxNCArMzc5LDE0IEBAIEZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0
aXN0aWMKICAgICByZXR1cm4gc3RhdGlzdGljczsKIH0KIAotdm9pZCBmYXN0Q2hlY2tDb25zaXN0
ZW5jeShjb25zdCB2b2lkKiBwKQorc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqIHAp
CiB7Ci0jaWYgKGRlZmluZWQoVVNFX1NZU1RFTV9NQUxMT0MpICYmIFVTRV9TWVNURU1fTUFMTE9D
KSB8fCAhZGVmaW5lZChOREVCVUcpCiAjaWYgT1MoREFSV0lOKQotICAgICAgICBBU1NFUlQobWFs
bG9jX3NpemUocCkpOworICAgIHJldHVybiBtYWxsb2Nfc2l6ZShwKTsKICNlbGlmIENPTVBJTEVS
KE1TVkMpCi0gICAgICAgIEFTU0VSVChfbXNpemUoY29uc3RfY2FzdDx2b2lkKj4ocCkpKTsKLSNl
bmRpZgorICAgIHJldHVybiBfbXNpemUoY29uc3RfY2FzdDx2b2lkKj4ocCkpOworI2Vsc2UKKyAg
ICByZXR1cm4gMTsKICNlbmRpZgogfQogCkBAIC00ODEsNyArNDgxLDcgQEAgbmFtZXNwYWNlIFdU
RiB7CiAjZGVmaW5lIENIRUNLX0NPTkRJVElPTiBBU1NFUlQKIAogI2lmIE9TKERBUldJTikKLWNs
YXNzIFNwYW47CitzdHJ1Y3QgU3BhbjsKIGNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQ
YWRkZWQ7CiBjbGFzcyBUQ01hbGxvY19QYWdlSGVhcDsKIGNsYXNzIFRDTWFsbG9jX1RocmVhZENh
Y2hlOwpAQCAtMTU0OCw3ICsxNTQ4LDYgQEAgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2NhdmVu
Z2UoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKCFzaG91bGRDb250aW51ZVNjYXZl
bmdpbmcoKSk7CiAgICAgcGFnZXNfY29tbWl0dGVkX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfID0gMDsK
IH0KIApAQCAtNDExMiw3ICs0MTExLDYxIEBAIHZvaWQgKigqX19tZW1hbGlnbl9ob29rKShzaXpl
X3QsIHNpemVfdCwKIAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFdURl9DSEFOR0VTKSAmJiBPUyhE
QVJXSU4pCisjaWZkZWYgV1RGX0NIQU5HRVMKK3ZvaWQgcmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVt
b3J5KCkKK3sKKyAgICAvLyBGbHVzaCBmcmVlIHBhZ2VzIGluIHRoZSBjdXJyZW50IHRocmVhZCBj
YWNoZSBiYWNrIHRvIHRoZSBwYWdlIGhlYXAuCisgICAgLy8gTG93IHdhdGVybWFyayBtZWNoYW5p
c20gaW4gU2NhdmVuZ2UoKSBwcmV2ZW50cyBmdWxsIHJldHVybiBvbiB0aGUgZmlyc3QgcGFzcy4K
KyAgICAvLyBUaGUgc2Vjb25kIHBhc3MgZmx1c2hlcyBldmVyeXRoaW5nLgorICAgIGlmIChUQ01h
bGxvY19UaHJlYWRDYWNoZSogdGhyZWFkQ2FjaGUgPSBUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0
Q2FjaGVJZlByZXNlbnQoKSkgeworICAgICAgICB0aHJlYWRDYWNoZS0+U2NhdmVuZ2UoKTsKKyAg
ICAgICAgdGhyZWFkQ2FjaGUtPlNjYXZlbmdlKCk7CisgICAgfQorCisgICAgU3BpbkxvY2tIb2xk
ZXIgaCgmcGFnZWhlYXBfbG9jayk7CisgICAgcGFnZWhlYXAtPlJlbGVhc2VGcmVlUGFnZXMoKTsK
K30KKyAgICAKK0Zhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzKCkKK3sK
KyAgICBGYXN0TWFsbG9jU3RhdGlzdGljcyBzdGF0aXN0aWNzOworCisgICAgU3BpbkxvY2tIb2xk
ZXIgbG9ja0hvbGRlcigmcGFnZWhlYXBfbG9jayk7CisgICAgc3RhdGlzdGljcy5yZXNlcnZlZFZN
Qnl0ZXMgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHBhZ2VoZWFwLT5TeXN0ZW1CeXRlcygpKTsKKyAg
ICBzdGF0aXN0aWNzLmNvbW1pdHRlZFZNQnl0ZXMgPSBzdGF0aXN0aWNzLnJlc2VydmVkVk1CeXRl
cyAtIHBhZ2VoZWFwLT5SZXR1cm5lZEJ5dGVzKCk7CisKKyAgICBzdGF0aXN0aWNzLmZyZWVMaXN0
Qnl0ZXMgPSAwOworICAgIGZvciAodW5zaWduZWQgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyAr
K2NsKSB7CisgICAgICAgIGNvbnN0IGludCBsZW5ndGggPSBjZW50cmFsX2NhY2hlW2NsXS5sZW5n
dGgoKTsKKyAgICAgICAgY29uc3QgaW50IHRjX2xlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLnRj
X2xlbmd0aCgpOworCisgICAgICAgIHN0YXRpc3RpY3MuZnJlZUxpc3RCeXRlcyArPSBCeXRlU2l6
ZUZvckNsYXNzKGNsKSAqIChsZW5ndGggKyB0Y19sZW5ndGgpOworICAgIH0KKyAgICBmb3IgKFRD
TWFsbG9jX1RocmVhZENhY2hlKiB0aHJlYWRDYWNoZSA9IHRocmVhZF9oZWFwczsgdGhyZWFkQ2Fj
aGUgOyB0aHJlYWRDYWNoZSA9IHRocmVhZENhY2hlLT5uZXh0XykKKyAgICAgICAgc3RhdGlzdGlj
cy5mcmVlTGlzdEJ5dGVzICs9IHRocmVhZENhY2hlLT5TaXplKCk7CisKKyAgICByZXR1cm4gc3Rh
dGlzdGljczsKK30KKworc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqIHB0cikKK3sK
KyAgICBjb25zdCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpID4+
IGtQYWdlU2hpZnQ7CisgICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yRW5z
dXJlU2FmZShwKTsKKworICAgIGlmICghc3BhbiB8fCBzcGFuLT5mcmVlKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGZvciAodm9pZCogZnJlZSA9IHNwYW4tPm9iamVjdHM7IGZyZWUgIT0gTlVM
TDsgZnJlZSA9ICooKHZvaWQqKikgZnJlZSkpCisgICAgICAgIGlmIChwdHIgPT0gZnJlZSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHNpemVfdCBjbCA9IHNwYW4tPnNpemVjbGFz
cykKKyAgICAgICAgcmV0dXJuIEJ5dGVTaXplRm9yQ2xhc3MoY2wpOworCisgICAgcmV0dXJuIHNw
YW4tPmxlbmd0aCA8PCBrUGFnZVNoaWZ0OworfQorCisjaWYgT1MoREFSV0lOKQogCiBjbGFzcyBG
cmVlT2JqZWN0RmluZGVyIHsKICAgICBjb25zdCBSZW1vdGVNZW1vcnlSZWFkZXImIG1fcmVhZGVy
OwpAQCAtNDQyOSw0OSArNDQ4Miw5IEBAIHZvaWQgRmFzdE1hbGxvY1pvbmU6OmluaXQoKQogICAg
IHN0YXRpYyBGYXN0TWFsbG9jWm9uZSB6b25lKHBhZ2VoZWFwLCAmdGhyZWFkX2hlYXBzLCBzdGF0
aWNfY2FzdDxUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkKj4oY2VudHJhbF9jYWNoZSks
ICZzcGFuX2FsbG9jYXRvciwgJnRocmVhZGhlYXBfYWxsb2NhdG9yKTsKIH0KIAotI2VuZGlmCi0K
LSNpZmRlZiBXVEZfQ0hBTkdFUwotdm9pZCByZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkoKQot
ewotICAgIC8vIEZsdXNoIGZyZWUgcGFnZXMgaW4gdGhlIGN1cnJlbnQgdGhyZWFkIGNhY2hlIGJh
Y2sgdG8gdGhlIHBhZ2UgaGVhcC4KLSAgICAvLyBMb3cgd2F0ZXJtYXJrIG1lY2hhbmlzbSBpbiBT
Y2F2ZW5nZSgpIHByZXZlbnRzIGZ1bGwgcmV0dXJuIG9uIHRoZSBmaXJzdCBwYXNzLgotICAgIC8v
IFRoZSBzZWNvbmQgcGFzcyBmbHVzaGVzIGV2ZXJ5dGhpbmcuCi0gICAgaWYgKFRDTWFsbG9jX1Ro
cmVhZENhY2hlKiB0aHJlYWRDYWNoZSA9IFRDTWFsbG9jX1RocmVhZENhY2hlOjpHZXRDYWNoZUlm
UHJlc2VudCgpKSB7Ci0gICAgICAgIHRocmVhZENhY2hlLT5TY2F2ZW5nZSgpOwotICAgICAgICB0
aHJlYWRDYWNoZS0+U2NhdmVuZ2UoKTsKLSAgICB9Ci0KLSAgICBTcGluTG9ja0hvbGRlciBoKCZw
YWdlaGVhcF9sb2NrKTsKLSAgICBwYWdlaGVhcC0+UmVsZWFzZUZyZWVQYWdlcygpOwotfQotICAg
IAotRmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRpc3RpY3MoKQotewotICAgIEZh
c3RNYWxsb2NTdGF0aXN0aWNzIHN0YXRpc3RpY3M7Ci0KLSAgICBTcGluTG9ja0hvbGRlciBsb2Nr
SG9sZGVyKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBzdGF0aXN0aWNzLnJlc2VydmVkVk1CeXRlcyA9
IHN0YXRpY19jYXN0PHNpemVfdD4ocGFnZWhlYXAtPlN5c3RlbUJ5dGVzKCkpOwotICAgIHN0YXRp
c3RpY3MuY29tbWl0dGVkVk1CeXRlcyA9IHN0YXRpc3RpY3MucmVzZXJ2ZWRWTUJ5dGVzIC0gcGFn
ZWhlYXAtPlJldHVybmVkQnl0ZXMoKTsKLQotICAgIHN0YXRpc3RpY3MuZnJlZUxpc3RCeXRlcyA9
IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsK
LSAgICAgICAgY29uc3QgaW50IGxlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLmxlbmd0aCgpOwot
ICAgICAgICBjb25zdCBpbnQgdGNfbGVuZ3RoID0gY2VudHJhbF9jYWNoZVtjbF0udGNfbGVuZ3Ro
KCk7Ci0KLSAgICAgICAgc3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVzICs9IEJ5dGVTaXplRm9yQ2xh
c3MoY2wpICogKGxlbmd0aCArIHRjX2xlbmd0aCk7Ci0gICAgfQotICAgIGZvciAoVENNYWxsb2Nf
VGhyZWFkQ2FjaGUqIHRocmVhZENhY2hlID0gdGhyZWFkX2hlYXBzOyB0aHJlYWRDYWNoZSA7IHRo
cmVhZENhY2hlID0gdGhyZWFkQ2FjaGUtPm5leHRfKQotICAgICAgICBzdGF0aXN0aWNzLmZyZWVM
aXN0Qnl0ZXMgKz0gdGhyZWFkQ2FjaGUtPlNpemUoKTsKLQotICAgIHJldHVybiBzdGF0aXN0aWNz
OwotfQotCi12b2lkIGZhc3RDaGVja0NvbnNpc3RlbmN5KGNvbnN0IHZvaWQqKQotewotfQorI2Vu
ZGlmIC8vIE9TKERBUldJTikKIAogfSAvLyBuYW1lc3BhY2UgV1RGCi0jZW5kaWYKKyNlbmRpZiAv
LyBXVEZfQ0hBTkdFUwogCiAjZW5kaWYgLy8gRk9SQ0VfU1lTVEVNX01BTExPQwpJbmRleDogSmF2
YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiA1NTc1MCkKKysrIEphdmFTY3JpcHRDb3JlL3d0
Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgdm9pZCogZmFzdENhbGxvYyhzaXplX3QgbnVtRWxlbWVudHMsIHNpemVfdCBl
bGVtZW50U2l6ZSk7CiAgICAgdm9pZCogZmFzdFJlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgICAg
Y2hhciogZmFzdFN0ckR1cChjb25zdCBjaGFyKik7Ci0gICAgdm9pZCBmYXN0Q2hlY2tDb25zaXN0
ZW5jeShjb25zdCB2b2lkKik7CisgICAgc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQq
KTsKIAogICAgIHN0cnVjdCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB7CiAgICAgICAgIFRyeU1hbGxv
Y1JldHVyblZhbHVlKHZvaWQqIGRhdGEpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvVmFsdWVD
aGVjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9WYWx1ZUNoZWNrLmgJKHJl
dmlzaW9uIDU1NzA2KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1ZhbHVlQ2hlY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgVmFs
dWVDaGVjazxQCiAgICAgewogICAgICAgICBpZiAoIXApCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGZhc3RDaGVja0NvbnNpc3RlbmN5KHApOworICAgICAgICBBU1NFUlQoZmFzdE1hbGxv
Y1NpemUocCkpOwogICAgICAgICBWYWx1ZUNoZWNrPFA+OjpjaGVja0NvbnNpc3RlbmN5KCpwKTsK
ICAgICB9CiB9Owo=
</data>
<flag name="review"
          id="33572"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>