<?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>21336</bug_id>
          
          <creation_ts>2008-10-03 10:47:17 -0700</creation_ts>
          <short_desc>ImageDiff tool improvements</short_desc>
          <delta_ts>2008-10-03 17:21:30 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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="Pierre-Olivier Latour">pol</reporter>
          <assigned_to name="Pierre-Olivier Latour">pol</assigned_to>
          <cc>aroben</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>93909</commentid>
    <comment_count>0</comment_count>
    <who name="Pierre-Olivier Latour">pol</who>
    <bug_when>2008-10-03 10:47:17 -0700</bug_when>
    <thetext>There are a couple of improvements that we would like to make to the ImageDiff tool:
- render images to RGBA8 bitmaps independently of platform endianness
- create image difference bitmap in reference image colorspace instead of device colorspace (which depends on the main display profile), so that no color matching happens</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93910</commentid>
    <comment_count>1</comment_count>
      <attachid>24056</attachid>
    <who name="Pierre-Olivier Latour">pol</who>
    <bug_when>2008-10-03 10:53:37 -0700</bug_when>
    <thetext>Created attachment 24056
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93912</commentid>
    <comment_count>2</comment_count>
      <attachid>24057</attachid>
    <who name="Pierre-Olivier Latour">pol</who>
    <bug_when>2008-10-03 10:58:39 -0700</bug_when>
    <thetext>Created attachment 24057
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93964</commentid>
    <comment_count>3</comment_count>
      <attachid>24056</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-03 13:25:41 -0700</bug_when>
    <thetext>Comment on attachment 24056
Patch

Clearing the review flag on this, assuming that the second version obsoletes the first one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93965</commentid>
    <comment_count>4</comment_count>
      <attachid>24057</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-03 13:34:30 -0700</bug_when>
    <thetext>Comment on attachment 24057
Patch v2

The ChangeLog isn&apos;t good. It only lists a bug number and doesn&apos;t mention what the change is. Also, it has &quot;set EMAIL_ADDRESS environment variable&quot; in it, rather than your email address.

+ /**
+  * Generates an RGBA8 bitmap in the reference image colorspace containing the differences between the 2 images
+  */

We would use &quot;//&quot; comments for this, not /* ones, and we don&apos;t do the &quot;/**&quot; thing ever.

-    RetainPtr&lt;CGContextRef&gt; context(AdoptCF, CGBitmapContextCreate(CFDataGetMutableBytePtr(data), CGImageGetWidth(testBitmap), CGImageGetHeight(testBitmap),
-        CGImageGetBitsPerComponent(testBitmap), CGImageGetBytesPerRow(testBitmap), colorSpace.get(), kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst));

+    CGContextRef context = CGBitmapContextCreate(CFDataGetMutableBytePtr(data), CGImageGetWidth(referenceImage), CGImageGetHeight(referenceImage), 8, rowBytes, CGImageGetColorSpace(referenceImage), kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

It&apos;s not a good idea to change the use of RetainPtr here. It makes the patch bigger than it needs to be, for no real benefit.

But also, WebKit project coding style guide is to put the result of a &quot;create&quot; function directly into a RetainPtr rather than waiting -- this minimizes the chance of programming mistakes leading to memory leaks.

+    if (context == 0)
+        return 0;

WebKit project coding style is to say &quot;if (!context)&quot; in a case like this.

-
-    // NOTE: This may not be safe when switching between ENDIAN types
+    

Removing the comment is fine. But you should just change the whitespace back.

-    float totalPixels = static_cast&lt;float&gt;(pixelsHigh * pixelsWide);
-    return (differences * 100.f) / totalPixels;
+    return static_cast&lt;float&gt;(differences) / static_cast&lt;float&gt;(pixelsHigh * pixelsWide) * 100.f;

Why this change?

I don&apos;t understand when the diffBitmap can be 0. Would that be due to a colorspace problem perhaps? Is the output from the tool clear enough?

Overall, these changes look fine, assuming that the existing test results still work as-is. If they don&apos;t, then the patch should include both the changes to ImageDiff *and* the other changes needed to keep tests passing, not just the ImageDiff part.

review- because of the ChangeLog issues at least. Please consider my other comments as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93966</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-03 13:35:31 -0700</bug_when>
    <thetext>I forgot to say: Seems like a great thing to do! I hope our pixel tests can become a more reliable tool for regression testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93988</commentid>
    <comment_count>6</comment_count>
    <who name="Pierre-Olivier Latour">pol</who>
    <bug_when>2008-10-03 14:44:13 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 24057 [edit])
&gt; The ChangeLog isn&apos;t good. It only lists a bug number and doesn&apos;t mention what
&gt; the change is. Also, it has &quot;set EMAIL_ADDRESS environment variable&quot; in it,
&gt; rather than your email address.

Which env var am I supposed to set? The instructions on http://webkit.org/coding/contributing.html do not mention anything.

&gt; + /**
&gt; +  * Generates an RGBA8 bitmap in the reference image colorspace containing the
&gt; differences between the 2 images
&gt; +  */
&gt; 
&gt; We would use &quot;//&quot; comments for this, not /* ones, and we don&apos;t do the &quot;/**&quot;
&gt; thing ever.

I was just following the comment pattern of the already existing function below. I&apos;ll fix both.

&gt; -    RetainPtr&lt;CGContextRef&gt; context(AdoptCF,
&gt; CGBitmapContextCreate(CFDataGetMutableBytePtr(data),
&gt; CGImageGetWidth(testBitmap), CGImageGetHeight(testBitmap),
&gt; -        CGImageGetBitsPerComponent(testBitmap),
&gt; CGImageGetBytesPerRow(testBitmap), colorSpace.get(), kCGBitmapByteOrder32Little
&gt; | kCGImageAlphaPremultipliedFirst));
&gt; 
&gt; +    CGContextRef context =
&gt; CGBitmapContextCreate(CFDataGetMutableBytePtr(data),
&gt; CGImageGetWidth(referenceImage), CGImageGetHeight(referenceImage), 8, rowBytes,
&gt; CGImageGetColorSpace(referenceImage), kCGImageAlphaPremultipliedLast |
&gt; kCGBitmapByteOrder32Big);
&gt; 
&gt; It&apos;s not a good idea to change the use of RetainPtr here. It makes the patch
&gt; bigger than it needs to be, for no real benefit.
&gt; 
&gt; But also, WebKit project coding style guide is to put the result of a &quot;create&quot;
&gt; function directly into a RetainPtr rather than waiting -- this minimizes the
&gt; chance of programming mistakes leading to memory leaks.

Fixed

&gt; +    if (context == 0)
&gt; +        return 0;
&gt; 
&gt; WebKit project coding style is to say &quot;if (!context)&quot; in a case like this.

Fixed

&gt; -
&gt; -    // NOTE: This may not be safe when switching between ENDIAN types
&gt; +    
&gt; 
&gt; Removing the comment is fine. But you should just change the whitespace back.

Fixed

&gt; -    float totalPixels = static_cast&lt;float&gt;(pixelsHigh * pixelsWide);
&gt; -    return (differences * 100.f) / totalPixels;
&gt; +    return static_cast&lt;float&gt;(differences) / static_cast&lt;float&gt;(pixelsHigh *
&gt; pixelsWide) * 100.f;
&gt; 
&gt; Why this change?

Since &quot;(pixelsWide*pixelsHigh)&quot; which is size_t is explicitly typecasted to float, I also added the explicit typecast for &quot;difference&quot; which is unsigned. It doesn&apos;t really matter since the compiler will see &quot;100.f&quot; and should promote everything to float anyway. That was a minor cosmetic thing with no real reason, so I reverted the change.

&gt; I don&apos;t understand when the diffBitmap can be 0. Would that be due to a
&gt; colorspace problem perhaps? Is the output from the tool clear enough?

I think it&apos;s better to be very conservative when it comes to pixel comparison i.e. make sure you compare 2 images in the same &quot;referential&quot; i.e. colorspace, dimensions, etc... and reject completely otherwise (in this case, return 0). You don&apos;t want the test to pass because CG has done some black magic behind you to fix things. For instance, say images are later generated with the wrong colorspace; in the previous code, CG would have colormatch to correct anyway and there was a chance the test would have passed (especially if -threshold wasn&apos;t 0).

In theory it&apos;s never supposed to happen since everything is supposed to remain consistent (all pixel tests done in Generic RGB, etc...). Because of this, I didn&apos;t add a bunch of printf() to stderr.

&gt; Overall, these changes look fine, assuming that the existing test results still
&gt; work as-is. If they don&apos;t, then the patch should include both the changes to
&gt; ImageDiff *and* the other changes needed to keep tests passing, not just the
&gt; ImageDiff part.

This change is only affecting the ImageDiff tool and not the test results per-se (DRT is not affected), only their interpretation (i.e. the diff image you can see in Safari), which should be more accurate after this change. I&apos;m not sure what you mean? Are you talking about the other bug we opened (#21322)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93989</commentid>
    <comment_count>7</comment_count>
      <attachid>24070</attachid>
    <who name="Pierre-Olivier Latour">pol</who>
    <bug_when>2008-10-03 14:44:35 -0700</bug_when>
    <thetext>Created attachment 24070
patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93991</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-03 14:49:03 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Also, it has &quot;set EMAIL_ADDRESS environment variable&quot; in it,
&gt; &gt; rather than your email address.
&gt; 
&gt; Which env var am I supposed to set?

EMAIL_ADDRESS

Or you can edit it by hand. Either way is fine.

&gt; The instructions on
&gt; http://webkit.org/coding/contributing.html do not mention anything.

We should fix that. A patch would be welcome :-)

&gt; In theory it&apos;s never supposed to happen since everything is supposed to remain
&gt; consistent (all pixel tests done in Generic RGB, etc...). Because of this, I
&gt; didn&apos;t add a bunch of printf() to stderr.

I don&apos;t understand the logic here. If it happens, we need to know, right? So don&apos;t we need at least some printf?

&gt; This change is only affecting the ImageDiff tool and not the test results
&gt; per-se (DRT is not affected), only their interpretation (i.e. the diff image
&gt; you can see in Safari), which should be more accurate after this change.

OK, good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93992</commentid>
    <comment_count>9</comment_count>
      <attachid>24070</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-03 14:49:34 -0700</bug_when>
    <thetext>Comment on attachment 24070
patch v3

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93995</commentid>
    <comment_count>10</comment_count>
    <who name="Pierre-Olivier Latour">pol</who>
    <bug_when>2008-10-03 15:08:49 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; In theory it&apos;s never supposed to happen since everything is supposed to remain
&gt; &gt; consistent (all pixel tests done in Generic RGB, etc...). Because of this, I
&gt; &gt; didn&apos;t add a bunch of printf() to stderr.
&gt; 
&gt; I don&apos;t understand the logic here. If it happens, we need to know, right? So
&gt; don&apos;t we need at least some printf?

Let me rephrase: if it happens, you will know as you will have a 100% failure. You will need to look at the images in Preview to realize dimensions or colorspace don&apos;t match. But I added some printf anyway :)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93996</commentid>
    <comment_count>11</comment_count>
      <attachid>24071</attachid>
    <who name="Pierre-Olivier Latour">pol</who>
    <bug_when>2008-10-03 15:09:12 -0700</bug_when>
    <thetext>Created attachment 24071
Patch v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94005</commentid>
    <comment_count>12</comment_count>
      <attachid>24071</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-03 15:36:44 -0700</bug_when>
    <thetext>Comment on attachment 24071
Patch v4

I&apos;m not certain the stderr output is a good idea -- it depends on what happens when run-webkit-tests sees this -- but it probably is an improvement.

r=me again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94006</commentid>
    <comment_count>13</comment_count>
    <who name="Pierre-Olivier Latour">pol</who>
    <bug_when>2008-10-03 15:58:08 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I&apos;m not certain the stderr output is a good idea -- it depends on what happens
&gt; when run-webkit-tests sees this -- but it probably is an improvement.

If I understand things right (but I&apos;m no perl expert), run-webkit-tests monitors stdout from the tool, not stderr, so this wouldn&apos;t break the script.

Note that DRT uses the same approach: results through stdout and error messages through stderr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94022</commentid>
    <comment_count>14</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-03 17:21:30 -0700</bug_when>
    <thetext>	M	WebKitTools/DumpRenderTree/cg/ImageDiffCG.cpp
	M	WebKitTools/ChangeLog
r37270 = 6bab0914f54d8a30e0282dfad15414184b0f081a (trunk)
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24056</attachid>
            <date>2008-10-03 10:53:37 -0700</date>
            <delta_ts>2008-10-03 13:25:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>7441</size>
            <attacher name="Pierre-Olivier Latour">pol</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDM3MjQyKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDgtMTAtMDMgIFBpZXJyZS1PbGl2aWVyIExh
dG91ciAgPHBvbEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MzM2CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jZy9JbWFnZURpZmZDRy5jcHA6CisgICAg
ICAgIChjcmVhdGVEaWZmZXJlbmNlQml0bWFwKToKKyAgICAgICAgKGNvbXB1dGVQZXJjZW50YWdl
RGlmZmVyZW50KToKKyAgICAgICAgKGNvbXBhcmVJbWFnZXMpOgorCiAyMDA4LTA5LTMwICBNYXJr
IFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5z
dGVpbi4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL0ltYWdlRGlmZkNHLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jZy9JbWFnZURpZmZD
Ry5jcHAJKHJldmlzaW9uIDM3MjQyKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2cv
SW1hZ2VEaWZmQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwyNCArNzIsMzYgQEAgc3RhdGlj
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVJbWFnZQogICAgIHJldHVybiBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4oQWRvcHRDRiwgQ0dJbWFnZUNyZWF0ZVdpdGhQTkdEYXRhUHJvdmlkZXIoZGF0
YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwog
fQogCi1zdGF0aWMgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gZ2V0RGlmZmVyZW5jZUJpdG1hcChD
R0ltYWdlUmVmIHRlc3RCaXRtYXAsIENHSW1hZ2VSZWYgcmVmZXJlbmNlQml0bWFwKQorLyoqCisg
KiBHZW5lcmF0ZXMgYW4gUkdCQTggYml0bWFwIGluIHRoZSByZWZlcmVuY2UgaW1hZ2UgY29sb3Jz
cGFjZSBjb250YWluaW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSAyIGltYWdlcworICov
CitzdGF0aWMgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY3JlYXRlRGlmZmVyZW5jZUJpdG1hcChD
R0ltYWdlUmVmIHRlc3RJbWFnZSwgQ0dJbWFnZVJlZiByZWZlcmVuY2VJbWFnZSkKIHsKICAgICAv
LyB3ZSBtdXN0IGhhdmUgYm90aCBpbWFnZXMgdG8gdGFrZSBkaWZmCi0gICAgaWYgKCF0ZXN0Qml0
bWFwIHx8ICFyZWZlcmVuY2VCaXRtYXApCisgICAgaWYgKCF0ZXN0SW1hZ2UgfHwgIXJlZmVyZW5j
ZUltYWdlKQogICAgICAgICByZXR1cm4gMDsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VS
ZWY+IGNvbG9yU3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwor
ICAgIAorICAgIC8vIHdlIG11c3QgaGF2ZSBib3RoIGltYWdlcyBiZSB0aGUgc2FtZSBkaW1lbnNp
b25zCisgICAgaWYgKChDR0ltYWdlR2V0V2lkdGgodGVzdEltYWdlKSAhPSBDR0ltYWdlR2V0V2lk
dGgocmVmZXJlbmNlSW1hZ2UpKSB8fCAoQ0dJbWFnZUdldEhlaWdodCh0ZXN0SW1hZ2UpICE9IENH
SW1hZ2VHZXRIZWlnaHQocmVmZXJlbmNlSW1hZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CisgICAgLy8gd2UgbXVzdCBoYXZlIGJvdGggaW1hZ2VzIGluIHRoZSBzYW1lIGNvbG9yc3BhY2UK
KyAgICBpZiAoIUNGRXF1YWwoQ0dJbWFnZUdldENvbG9yU3BhY2UodGVzdEltYWdlKSwgQ0dJbWFn
ZUdldENvbG9yU3BhY2UocmVmZXJlbmNlSW1hZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CiAgICAgc3RhdGljIENGTXV0YWJsZURhdGFSZWYgZGF0YSA9IENGRGF0YUNyZWF0ZU11dGFibGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgMCk7Ci0gICAgQ0ZEYXRhU2V0TGVuZ3RoKGRhdGEsIENHSW1h
Z2VHZXRIZWlnaHQodGVzdEJpdG1hcCkgKiBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3codGVzdEJpdG1h
cCkpOwotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHQoQWRvcHRDRiwgQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKENGRGF0YUdldE11dGFibGVCeXRlUHRyKGRhdGEpLCBDR0ltYWdlR2V0
V2lkdGgodGVzdEJpdG1hcCksIENHSW1hZ2VHZXRIZWlnaHQodGVzdEJpdG1hcCksCi0gICAgICAg
IENHSW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KHRlc3RCaXRtYXApLCBDR0ltYWdlR2V0Qnl0ZXNQ
ZXJSb3codGVzdEJpdG1hcCksIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0JpdG1hcEJ5dGVPcmRlcjMy
TGl0dGxlIHwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkpOwotCi0gICAgQ0dDb250
ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZU5vcm1hbCk7Ci0gICAg
Q0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgc3RhdGlj
X2Nhc3Q8Q0dGbG9hdD4oQ0dJbWFnZUdldFdpZHRoKHRlc3RCaXRtYXApKSwgc3RhdGljX2Nhc3Q8
Q0dGbG9hdD4oQ0dJbWFnZUdldEhlaWdodCh0ZXN0Qml0bWFwKSkpLCB0ZXN0Qml0bWFwKTsKLSAg
ICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlRGlmZmVy
ZW5jZSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2Uo
MCwgMCwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oQ0dJbWFnZUdldFdpZHRoKHJlZmVyZW5jZUJpdG1h
cCkpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihDR0ltYWdlR2V0SGVpZ2h0KHJlZmVyZW5jZUJpdG1h
cCkpKSwgcmVmZXJlbmNlQml0bWFwKTsKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSAoNCAqIENHSW1h
Z2VHZXRXaWR0aChyZWZlcmVuY2VJbWFnZSkgKyA2MykgJiB+NjM7IC8vIFVzZSBhIG11bHRpcGxl
IG9mIDY0IGJ5dGVzIHRvIGltcHJvdmUgQ0cgcGVyZm9ybWFuY2UKKyAgICBDRkRhdGFTZXRMZW5n
dGgoZGF0YSwgQ0dJbWFnZUdldEhlaWdodChyZWZlcmVuY2VJbWFnZSkgKiByb3dCeXRlcyk7Cisg
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUoQ0ZEYXRhR2V0
TXV0YWJsZUJ5dGVQdHIoZGF0YSksIENHSW1hZ2VHZXRXaWR0aChyZWZlcmVuY2VJbWFnZSksIENH
SW1hZ2VHZXRIZWlnaHQocmVmZXJlbmNlSW1hZ2UpLCA4LCByb3dCeXRlcywgQ0dJbWFnZUdldENv
bG9yU3BhY2UocmVmZXJlbmNlSW1hZ2UpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Qg
fCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyk7CisgICAgaWYoY29udGV4dCA9PSAwKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICAKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dCwga0NH
QmxlbmRNb2RlTm9ybWFsKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0
TWFrZSgwLCAwLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihDR0ltYWdlR2V0V2lkdGgodGVzdEltYWdl
KSksIHN0YXRpY19jYXN0PENHRmxvYXQ+KENHSW1hZ2VHZXRIZWlnaHQodGVzdEltYWdlKSkpLCB0
ZXN0SW1hZ2UpOworICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LCBrQ0dCbGVuZE1v
ZGVEaWZmZXJlbmNlKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0TWFr
ZSgwLCAwLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihDR0ltYWdlR2V0V2lkdGgocmVmZXJlbmNlSW1h
Z2UpKSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oQ0dJbWFnZUdldEhlaWdodChyZWZlcmVuY2VJbWFn
ZSkpKSwgcmVmZXJlbmNlSW1hZ2UpOwogCi0gICAgcmV0dXJuIGNvbnRleHQ7CisgICAgcmV0dXJu
IFJldGFpblB0cjxDR0NvbnRleHRSZWY+KEFkb3B0Q0YsIGNvbnRleHQpOwogfQogCiAvKioKQEAg
LTk4LDcgKzExMCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBnZXREaWZmZXIK
ICAqLwogc3RhdGljIGZsb2F0IGNvbXB1dGVQZXJjZW50YWdlRGlmZmVyZW50KENHQ29udGV4dFJl
ZiBkaWZmQml0bWFwLCB1bnNpZ25lZCB0aHJlc2hvbGQpCiB7Ci0gICAgLy8gaWYgZGlmZkJpYXRt
YXAgaXMgbmlsLCB0aGVuIHRoZXJlIHdhcyBhbiBlcnJvciwgYW5kIGl0IGRpZG4ndCBtYXRjaC4K
KyAgICAvLyBpZiBkaWZmQml0bWFwIGlzIG5pbCwgdGhlbiB0aGVyZSB3YXMgYW4gZXJyb3IsIGFu
ZCBpdCBkaWRuJ3QgbWF0Y2guCiAgICAgaWYgKCFkaWZmQml0bWFwKQogICAgICAgICByZXR1cm4g
MTAwLjBmOwogCkBAIC0xMDcsOCArMTE5LDcgQEAgc3RhdGljIGZsb2F0IGNvbXB1dGVQZXJjZW50
YWdlRGlmZmVyZW50KAogICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENHQml0bWFwQ29udGV4dEdl
dEJ5dGVzUGVyUm93KGRpZmZCaXRtYXApOwogICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVsUm93RGF0
YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihDR0JpdG1hcENvbnRleHRHZXREYXRhKGRp
ZmZCaXRtYXApKTsKICAgICB1bnNpZ25lZCBkaWZmZXJlbmNlcyA9IDA7Ci0KLSAgICAvLyBOT1RF
OiBUaGlzIG1heSBub3QgYmUgc2FmZSB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIEVORElBTiB0eXBl
cworICAgIAogICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGlnaDsgcm93
KyspIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBjb2wgPSAwOyBjb2wgPCAocGl4ZWxzV2lkZSAq
IDQpOyBjb2wgKz0gNCkgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcmVkID0gcGl4ZWxS
b3dEYXRhICsgY29sOwpAQCAtMTI2LDE0ICsxMzcsMTMgQEAgc3RhdGljIGZsb2F0IGNvbXB1dGVQ
ZXJjZW50YWdlRGlmZmVyZW50KAogICAgICAgICBwaXhlbFJvd0RhdGEgKz0gYnl0ZXNQZXJSb3c7
CiAgICAgfQogCi0gICAgZmxvYXQgdG90YWxQaXhlbHMgPSBzdGF0aWNfY2FzdDxmbG9hdD4ocGl4
ZWxzSGlnaCAqIHBpeGVsc1dpZGUpOwotICAgIHJldHVybiAoZGlmZmVyZW5jZXMgKiAxMDAuZikg
LyB0b3RhbFBpeGVsczsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRpZmZlcmVuY2Vz
KSAvIHN0YXRpY19jYXN0PGZsb2F0PihwaXhlbHNIaWdoICogcGl4ZWxzV2lkZSkgKiAxMDAuZjsK
IH0KIAotc3RhdGljIHZvaWQgY29tcGFyZUltYWdlcyhDR0ltYWdlUmVmIGFjdHVhbEJpdG1hcCwg
Q0dJbWFnZVJlZiBiYXNlbGluZUJpdG1hcCwgdW5zaWduZWQgdGhyZXNob2xkKQorc3RhdGljIHZv
aWQgY29tcGFyZUltYWdlcyhDR0ltYWdlUmVmIHRlc3RJbWFnZSwgQ0dJbWFnZVJlZiByZWZlcmVu
Y2VJbWFnZSwgdW5zaWduZWQgdGhyZXNob2xkKQogewogICAgIC8vIHByZXBhcmUgdGhlIGRpZmZl
cmVuY2UgYmxlbmQgdG8gY2hlY2sgZm9yIHBpeGVsIHZhcmlhdGlvbnMKLSAgICBSZXRhaW5QdHI8
Q0dDb250ZXh0UmVmPiBkaWZmQml0bWFwID0gZ2V0RGlmZmVyZW5jZUJpdG1hcChhY3R1YWxCaXRt
YXAsIGJhc2VsaW5lQml0bWFwKTsKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBkaWZmQml0
bWFwID0gY3JlYXRlRGlmZmVyZW5jZUJpdG1hcCh0ZXN0SW1hZ2UsIHJlZmVyZW5jZUltYWdlKTsK
IAogICAgIGZsb2F0IHBlcmNlbnRhZ2UgPSBjb21wdXRlUGVyY2VudGFnZURpZmZlcmVudChkaWZm
Qml0bWFwLmdldCgpLCB0aHJlc2hvbGQpOwogCkBAIC0xNDIsMTMgKzE1MiwxNiBAQCBzdGF0aWMg
dm9pZCBjb21wYXJlSW1hZ2VzKENHSW1hZ2VSZWYgYWN0CiAgICAgLy8gc2VuZCBtZXNzYWdlIHRv
IGxldCB0aGVtIGtub3cgaWYgYW4gaW1hZ2Ugd2FzIHdyb25nCiAgICAgaWYgKHBlcmNlbnRhZ2Ug
PiAwLjBmKSB7CiAgICAgICAgIC8vIHNpbmNlIHRoZSBkaWZmIG1pZ2h0IGFjdHVhbGx5IHNob3cg
c29tZXRoaW5nLCBzZW5kIGl0IHRvIHN0ZG91dAotICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2UoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoZGlmZkJpdG1hcC5n
ZXQoKSkpOwotICAgICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gaW1hZ2VEYXRhKEFk
b3B0Q0YsIENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotICAgICAgICBSZXRhaW5QdHI8Q0dJ
bWFnZURlc3RpbmF0aW9uUmVmPiBpbWFnZURlc3QoQWRvcHRDRiwgQ0dJbWFnZURlc3RpbmF0aW9u
Q3JlYXRlV2l0aERhdGEoaW1hZ2VEYXRhLmdldCgpLCBrVVRUeXBlUE5HLCAxLCAwKSk7Ci0gICAg
ICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGltYWdlRGVzdC5nZXQoKSwgaW1hZ2UuZ2V0
KCksIDApOwotICAgICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShpbWFnZURlc3QuZ2V0
KCkpOwotICAgICAgICBwcmludGYoIkNvbnRlbnQtTGVuZ3RoOiAlbHVcbiIsIENGRGF0YUdldExl
bmd0aChpbWFnZURhdGEuZ2V0KCkpKTsKLSAgICAgICAgZndyaXRlKENGRGF0YUdldEJ5dGVQdHIo
aW1hZ2VEYXRhLmdldCgpKSwgMSwgQ0ZEYXRhR2V0TGVuZ3RoKGltYWdlRGF0YS5nZXQoKSksIHN0
ZG91dCk7CisgICAgICAgIGlmKGRpZmZCaXRtYXApIHsKKyAgICAgICAgICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZShBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShkaWZm
Qml0bWFwLmdldCgpKSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4g
aW1hZ2VEYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOworICAgICAgICAg
ICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gaW1hZ2VEZXN0KEFkb3B0Q0YsIENH
SW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGltYWdlRGF0YS5nZXQoKSwga1VUVHlwZVBO
RywgMSwgMCkpOworICAgICAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoaW1hZ2VE
ZXN0LmdldCgpLCBpbWFnZS5nZXQoKSwgMCk7CisgICAgICAgICAgICBDR0ltYWdlRGVzdGluYXRp
b25GaW5hbGl6ZShpbWFnZURlc3QuZ2V0KCkpOworICAgICAgICAgICAgcHJpbnRmKCJDb250ZW50
LUxlbmd0aDogJWx1XG4iLCBDRkRhdGFHZXRMZW5ndGgoaW1hZ2VEYXRhLmdldCgpKSk7CisgICAg
ICAgICAgICBmd3JpdGUoQ0ZEYXRhR2V0Qnl0ZVB0cihpbWFnZURhdGEuZ2V0KCkpLCAxLCBDRkRh
dGFHZXRMZW5ndGgoaW1hZ2VEYXRhLmdldCgpKSwgc3Rkb3V0KTsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgZnByaW50ZihzdGRvdXQsICJkaWZmOiAlMDEuMmYlJSBmYWlsZWRcbiIsIHBl
cmNlbnRhZ2UpOwogICAgIH0gZWxzZQogICAgICAgICBmcHJpbnRmKHN0ZG91dCwgImRpZmY6ICUw
MS4yZiUlIHBhc3NlZFxuIiwgcGVyY2VudGFnZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24057</attachid>
            <date>2008-10-03 10:58:39 -0700</date>
            <delta_ts>2008-10-03 14:44:35 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch-2.txt</filename>
            <type>text/plain</type>
            <size>7468</size>
            <attacher name="Pierre-Olivier Latour">pol</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDM3MjQyKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDgtMTAtMDMgIFBpZXJyZS1PbGl2aWVyIExh
dG91ciAgPHNldCBFTUFJTF9BRERSRVNTIGVudmlyb25tZW50IHZhcmlhYmxlPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMzNgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2cvSW1hZ2VEaWZmQ0cuY3BwOgorICAgICAgICAoY3JlYXRlRGlmZmVyZW5jZUJpdG1hcCk6Cisg
ICAgICAgIChjb21wdXRlUGVyY2VudGFnZURpZmZlcmVudCk6CisgICAgICAgIChjb21wYXJlSW1h
Z2VzKToKKwogMjAwOC0wOS0zMCAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9jZy9JbWFnZURpZmZDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvY2cvSW1hZ2VEaWZmQ0cuY3BwCShyZXZpc2lvbiAzNzI0MikKKysrIFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL0ltYWdlRGlmZkNHLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzIsMjQgKzcyLDM2IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlSW1h
Z2UKICAgICByZXR1cm4gUmV0YWluUHRyPENHSW1hZ2VSZWY+KEFkb3B0Q0YsIENHSW1hZ2VDcmVh
dGVXaXRoUE5HRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1Jl
bmRlcmluZ0ludGVudERlZmF1bHQpKTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDR0NvbnRleHRS
ZWY+IGdldERpZmZlcmVuY2VCaXRtYXAoQ0dJbWFnZVJlZiB0ZXN0Qml0bWFwLCBDR0ltYWdlUmVm
IHJlZmVyZW5jZUJpdG1hcCkKKy8qKgorICogR2VuZXJhdGVzIGFuIFJHQkE4IGJpdG1hcCBpbiB0
aGUgcmVmZXJlbmNlIGltYWdlIGNvbG9yc3BhY2UgY29udGFpbmluZyB0aGUgZGlmZmVyZW5jZXMg
YmV0d2VlbiB0aGUgMiBpbWFnZXMKKyAqLworc3RhdGljIFJldGFpblB0cjxDR0NvbnRleHRSZWY+
IGNyZWF0ZURpZmZlcmVuY2VCaXRtYXAoQ0dJbWFnZVJlZiB0ZXN0SW1hZ2UsIENHSW1hZ2VSZWYg
cmVmZXJlbmNlSW1hZ2UpCiB7CiAgICAgLy8gd2UgbXVzdCBoYXZlIGJvdGggaW1hZ2VzIHRvIHRh
a2UgZGlmZgotICAgIGlmICghdGVzdEJpdG1hcCB8fCAhcmVmZXJlbmNlQml0bWFwKQorICAgIGlm
ICghdGVzdEltYWdlIHx8ICFyZWZlcmVuY2VJbWFnZSkKICAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlKEFkb3B0Q0YsIENHQ29sb3JT
cGFjZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICAKKyAgICAvLyB3ZSBtdXN0IGhhdmUgYm90aCBp
bWFnZXMgYmUgdGhlIHNhbWUgZGltZW5zaW9ucworICAgIGlmICgoQ0dJbWFnZUdldFdpZHRoKHRl
c3RJbWFnZSkgIT0gQ0dJbWFnZUdldFdpZHRoKHJlZmVyZW5jZUltYWdlKSkgfHwgKENHSW1hZ2VH
ZXRIZWlnaHQodGVzdEltYWdlKSAhPSBDR0ltYWdlR2V0SGVpZ2h0KHJlZmVyZW5jZUltYWdlKSkp
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIC8vIHdlIG11c3QgaGF2ZSBib3RoIGltYWdl
cyBpbiB0aGUgc2FtZSBjb2xvcnNwYWNlCisgICAgaWYgKCFDRkVxdWFsKENHSW1hZ2VHZXRDb2xv
clNwYWNlKHRlc3RJbWFnZSksIENHSW1hZ2VHZXRDb2xvclNwYWNlKHJlZmVyZW5jZUltYWdlKSkp
CisgICAgICAgIHJldHVybiAwOworICAgIAogICAgIHN0YXRpYyBDRk11dGFibGVEYXRhUmVmIGRh
dGEgPSBDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApOwotICAgIENG
RGF0YVNldExlbmd0aChkYXRhLCBDR0ltYWdlR2V0SGVpZ2h0KHRlc3RCaXRtYXApICogQ0dJbWFn
ZUdldEJ5dGVzUGVyUm93KHRlc3RCaXRtYXApKTsKLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVm
PiBjb250ZXh0KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShDRkRhdGFHZXRNdXRhYmxl
Qnl0ZVB0cihkYXRhKSwgQ0dJbWFnZUdldFdpZHRoKHRlc3RCaXRtYXApLCBDR0ltYWdlR2V0SGVp
Z2h0KHRlc3RCaXRtYXApLAotICAgICAgICBDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudCh0ZXN0
Qml0bWFwKSwgQ0dJbWFnZUdldEJ5dGVzUGVyUm93KHRlc3RCaXRtYXApLCBjb2xvclNwYWNlLmdl
dCgpLCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkRmlyc3QpKTsKLQotICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBr
Q0dCbGVuZE1vZGVOb3JtYWwpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgp
LCBDR1JlY3RNYWtlKDAsIDAsIHN0YXRpY19jYXN0PENHRmxvYXQ+KENHSW1hZ2VHZXRXaWR0aCh0
ZXN0Qml0bWFwKSksIHN0YXRpY19jYXN0PENHRmxvYXQ+KENHSW1hZ2VHZXRIZWlnaHQodGVzdEJp
dG1hcCkpKSwgdGVzdEJpdG1hcCk7Ci0gICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQu
Z2V0KCksIGtDR0JsZW5kTW9kZURpZmZlcmVuY2UpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHN0YXRpY19jYXN0PENHRmxvYXQ+KENHSW1h
Z2VHZXRXaWR0aChyZWZlcmVuY2VCaXRtYXApKSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oQ0dJbWFn
ZUdldEhlaWdodChyZWZlcmVuY2VCaXRtYXApKSksIHJlZmVyZW5jZUJpdG1hcCk7CisgICAgc2l6
ZV90IHJvd0J5dGVzID0gKDQgKiBDR0ltYWdlR2V0V2lkdGgocmVmZXJlbmNlSW1hZ2UpICsgNjMp
ICYgfjYzOyAvLyBVc2UgYSBtdWx0aXBsZSBvZiA2NCBieXRlcyB0byBpbXByb3ZlIENHIHBlcmZv
cm1hbmNlCisgICAgQ0ZEYXRhU2V0TGVuZ3RoKGRhdGEsIENHSW1hZ2VHZXRIZWlnaHQocmVmZXJl
bmNlSW1hZ2UpICogcm93Qnl0ZXMpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKENGRGF0YUdldE11dGFibGVCeXRlUHRyKGRhdGEpLCBDR0ltYWdlR2V0
V2lkdGgocmVmZXJlbmNlSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KHJlZmVyZW5jZUltYWdlKSwg
OCwgcm93Qnl0ZXMsIENHSW1hZ2VHZXRDb2xvclNwYWNlKHJlZmVyZW5jZUltYWdlKSwga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpOworICAg
IGlmIChjb250ZXh0ID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIENHQ29udGV4
dFNldEJsZW5kTW9kZShjb250ZXh0LCBrQ0dCbGVuZE1vZGVOb3JtYWwpOworICAgIENHQ29udGV4
dERyYXdJbWFnZShjb250ZXh0LCBDR1JlY3RNYWtlKDAsIDAsIHN0YXRpY19jYXN0PENHRmxvYXQ+
KENHSW1hZ2VHZXRXaWR0aCh0ZXN0SW1hZ2UpKSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oQ0dJbWFn
ZUdldEhlaWdodCh0ZXN0SW1hZ2UpKSksIHRlc3RJbWFnZSk7CisgICAgQ0dDb250ZXh0U2V0Qmxl
bmRNb2RlKGNvbnRleHQsIGtDR0JsZW5kTW9kZURpZmZlcmVuY2UpOworICAgIENHQ29udGV4dERy
YXdJbWFnZShjb250ZXh0LCBDR1JlY3RNYWtlKDAsIDAsIHN0YXRpY19jYXN0PENHRmxvYXQ+KENH
SW1hZ2VHZXRXaWR0aChyZWZlcmVuY2VJbWFnZSkpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihDR0lt
YWdlR2V0SGVpZ2h0KHJlZmVyZW5jZUltYWdlKSkpLCByZWZlcmVuY2VJbWFnZSk7CiAKLSAgICBy
ZXR1cm4gY29udGV4dDsKKyAgICByZXR1cm4gUmV0YWluUHRyPENHQ29udGV4dFJlZj4oQWRvcHRD
RiwgY29udGV4dCk7CiB9CiAKIC8qKgpAQCAtOTgsNyArMTEwLDcgQEAgc3RhdGljIFJldGFpblB0
cjxDR0NvbnRleHRSZWY+IGdldERpZmZlcgogICovCiBzdGF0aWMgZmxvYXQgY29tcHV0ZVBlcmNl
bnRhZ2VEaWZmZXJlbnQoQ0dDb250ZXh0UmVmIGRpZmZCaXRtYXAsIHVuc2lnbmVkIHRocmVzaG9s
ZCkKIHsKLSAgICAvLyBpZiBkaWZmQmlhdG1hcCBpcyBuaWwsIHRoZW4gdGhlcmUgd2FzIGFuIGVy
cm9yLCBhbmQgaXQgZGlkbid0IG1hdGNoLgorICAgIC8vIGlmIGRpZmZCaXRtYXAgaXMgbmlsLCB0
aGVuIHRoZXJlIHdhcyBhbiBlcnJvciwgYW5kIGl0IGRpZG4ndCBtYXRjaC4KICAgICBpZiAoIWRp
ZmZCaXRtYXApCiAgICAgICAgIHJldHVybiAxMDAuMGY7CiAKQEAgLTEwNyw4ICsxMTksNyBAQCBz
dGF0aWMgZmxvYXQgY29tcHV0ZVBlcmNlbnRhZ2VEaWZmZXJlbnQoCiAgICAgc2l6ZV90IGJ5dGVz
UGVyUm93ID0gQ0dCaXRtYXBDb250ZXh0R2V0Qnl0ZXNQZXJSb3coZGlmZkJpdG1hcCk7CiAgICAg
dW5zaWduZWQgY2hhciogcGl4ZWxSb3dEYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KENHQml0bWFwQ29udGV4dEdldERhdGEoZGlmZkJpdG1hcCkpOwogICAgIHVuc2lnbmVkIGRpZmZl
cmVuY2VzID0gMDsKLQotICAgIC8vIE5PVEU6IFRoaXMgbWF5IG5vdCBiZSBzYWZlIHdoZW4gc3dp
dGNoaW5nIGJldHdlZW4gRU5ESUFOIHR5cGVzCisgICAgCiAgICAgZm9yICh1bnNpZ25lZCByb3cg
PSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3crKykgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGNv
bCA9IDA7IGNvbCA8IChwaXhlbHNXaWRlICogNCk7IGNvbCArPSA0KSB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyKiByZWQgPSBwaXhlbFJvd0RhdGEgKyBjb2w7CkBAIC0xMjYsMTQgKzEzNywx
MyBAQCBzdGF0aWMgZmxvYXQgY29tcHV0ZVBlcmNlbnRhZ2VEaWZmZXJlbnQoCiAgICAgICAgIHBp
eGVsUm93RGF0YSArPSBieXRlc1BlclJvdzsKICAgICB9CiAKLSAgICBmbG9hdCB0b3RhbFBpeGVs
cyA9IHN0YXRpY19jYXN0PGZsb2F0PihwaXhlbHNIaWdoICogcGl4ZWxzV2lkZSk7Ci0gICAgcmV0
dXJuIChkaWZmZXJlbmNlcyAqIDEwMC5mKSAvIHRvdGFsUGl4ZWxzOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4oZGlmZmVyZW5jZXMpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBpeGVsc0hp
Z2ggKiBwaXhlbHNXaWRlKSAqIDEwMC5mOwogfQogCi1zdGF0aWMgdm9pZCBjb21wYXJlSW1hZ2Vz
KENHSW1hZ2VSZWYgYWN0dWFsQml0bWFwLCBDR0ltYWdlUmVmIGJhc2VsaW5lQml0bWFwLCB1bnNp
Z25lZCB0aHJlc2hvbGQpCitzdGF0aWMgdm9pZCBjb21wYXJlSW1hZ2VzKENHSW1hZ2VSZWYgdGVz
dEltYWdlLCBDR0ltYWdlUmVmIHJlZmVyZW5jZUltYWdlLCB1bnNpZ25lZCB0aHJlc2hvbGQpCiB7
CiAgICAgLy8gcHJlcGFyZSB0aGUgZGlmZmVyZW5jZSBibGVuZCB0byBjaGVjayBmb3IgcGl4ZWwg
dmFyaWF0aW9ucwotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGRpZmZCaXRtYXAgPSBnZXRE
aWZmZXJlbmNlQml0bWFwKGFjdHVhbEJpdG1hcCwgYmFzZWxpbmVCaXRtYXApOworICAgIFJldGFp
blB0cjxDR0NvbnRleHRSZWY+IGRpZmZCaXRtYXAgPSBjcmVhdGVEaWZmZXJlbmNlQml0bWFwKHRl
c3RJbWFnZSwgcmVmZXJlbmNlSW1hZ2UpOwogCiAgICAgZmxvYXQgcGVyY2VudGFnZSA9IGNvbXB1
dGVQZXJjZW50YWdlRGlmZmVyZW50KGRpZmZCaXRtYXAuZ2V0KCksIHRocmVzaG9sZCk7CiAKQEAg
LTE0MiwxMyArMTUyLDE2IEBAIHN0YXRpYyB2b2lkIGNvbXBhcmVJbWFnZXMoQ0dJbWFnZVJlZiBh
Y3QKICAgICAvLyBzZW5kIG1lc3NhZ2UgdG8gbGV0IHRoZW0ga25vdyBpZiBhbiBpbWFnZSB3YXMg
d3JvbmcKICAgICBpZiAocGVyY2VudGFnZSA+IDAuMGYpIHsKICAgICAgICAgLy8gc2luY2UgdGhl
IGRpZmYgbWlnaHQgYWN0dWFsbHkgc2hvdyBzb21ldGhpbmcsIHNlbmQgaXQgdG8gc3Rkb3V0Ci0g
ICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZShBZG9wdENGLCBDR0JpdG1hcENvbnRl
eHRDcmVhdGVJbWFnZShkaWZmQml0bWFwLmdldCgpKSk7Ci0gICAgICAgIFJldGFpblB0cjxDRk11
dGFibGVEYXRhUmVmPiBpbWFnZURhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAw
KSk7Ci0gICAgICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGltYWdlRGVzdChB
ZG9wdENGLCBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShpbWFnZURhdGEuZ2V0KCks
IGtVVFR5cGVQTkcsIDEsIDApKTsKLSAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2Uo
aW1hZ2VEZXN0LmdldCgpLCBpbWFnZS5nZXQoKSwgMCk7Ci0gICAgICAgIENHSW1hZ2VEZXN0aW5h
dGlvbkZpbmFsaXplKGltYWdlRGVzdC5nZXQoKSk7Ci0gICAgICAgIHByaW50ZigiQ29udGVudC1M
ZW5ndGg6ICVsdVxuIiwgQ0ZEYXRhR2V0TGVuZ3RoKGltYWdlRGF0YS5nZXQoKSkpOwotICAgICAg
ICBmd3JpdGUoQ0ZEYXRhR2V0Qnl0ZVB0cihpbWFnZURhdGEuZ2V0KCkpLCAxLCBDRkRhdGFHZXRM
ZW5ndGgoaW1hZ2VEYXRhLmdldCgpKSwgc3Rkb3V0KTsKKyAgICAgICAgaWYgKGRpZmZCaXRtYXAp
IHsKKyAgICAgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZShBZG9wdENGLCBDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShkaWZmQml0bWFwLmdldCgpKSk7CisgICAgICAgICAgICBS
ZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gaW1hZ2VEYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0
ZU11dGFibGUoMCwgMCkpOworICAgICAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlv
blJlZj4gaW1hZ2VEZXN0KEFkb3B0Q0YsIENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRh
KGltYWdlRGF0YS5nZXQoKSwga1VUVHlwZVBORywgMSwgMCkpOworICAgICAgICAgICAgQ0dJbWFn
ZURlc3RpbmF0aW9uQWRkSW1hZ2UoaW1hZ2VEZXN0LmdldCgpLCBpbWFnZS5nZXQoKSwgMCk7Cisg
ICAgICAgICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShpbWFnZURlc3QuZ2V0KCkpOwor
ICAgICAgICAgICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJWx1XG4iLCBDRkRhdGFHZXRMZW5n
dGgoaW1hZ2VEYXRhLmdldCgpKSk7CisgICAgICAgICAgICBmd3JpdGUoQ0ZEYXRhR2V0Qnl0ZVB0
cihpbWFnZURhdGEuZ2V0KCkpLCAxLCBDRkRhdGFHZXRMZW5ndGgoaW1hZ2VEYXRhLmdldCgpKSwg
c3Rkb3V0KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgZnByaW50ZihzdGRvdXQsICJk
aWZmOiAlMDEuMmYlJSBmYWlsZWRcbiIsIHBlcmNlbnRhZ2UpOwogICAgIH0gZWxzZQogICAgICAg
ICBmcHJpbnRmKHN0ZG91dCwgImRpZmY6ICUwMS4yZiUlIHBhc3NlZFxuIiwgcGVyY2VudGFnZSk7
Cg==
</data>
<flag name="review"
          id="10895"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24070</attachid>
            <date>2008-10-03 14:44:35 -0700</date>
            <delta_ts>2008-10-03 15:09:12 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>patch-3.txt</filename>
            <type>text/plain</type>
            <size>7406</size>
            <attacher name="Pierre-Olivier Latour">pol</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDM3MjQyKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDgtMTAtMDMgIFBpZXJyZS1PbGl2aWVyIExh
dG91ciAgPHBvbEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVuZGVyIGltYWdlcyB0byBSR0JBOCBiaXRtYXBzIGluZGVwZW5kZW50
bHkgb2YgcGxhdGZvcm0gZW5kaWFubmVzcy4KKworICAgICAgICBDcmVhdGUgaW1hZ2UgZGlmZmVy
ZW5jZSBiaXRtYXAgaW4gcmVmZXJlbmNlIGltYWdlIGNvbG9yc3BhY2UgaW5zdGVhZCBvZiBkZXZp
Y2UgY29sb3JzcGFjZQorICAgICAgICAod2hpY2ggZGVwZW5kcyBvbiB0aGUgbWFpbiBkaXNwbGF5
IHByb2ZpbGUpLCBzbyB0aGF0IG5vIGNvbG9yIG1hdGNoaW5nIGhhcHBlbnMuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzM2CisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9jZy9JbWFnZURpZmZDRy5jcHA6CisgICAgICAgIChjcmVhdGVEaWZm
ZXJlbmNlQml0bWFwKToKKyAgICAgICAgKGNvbXB1dGVQZXJjZW50YWdlRGlmZmVyZW50KToKKyAg
ICAgICAgKGNvbXBhcmVJbWFnZXMpOgorCiAyMDA4LTA5LTMwICBNYXJrIFJvd2UgIDxtcm93ZUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL0ltYWdlRGlmZkNHLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jZy9JbWFnZURpZmZDRy5jcHAJKHJldmlzaW9u
IDM3MjQyKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvSW1hZ2VEaWZmQ0cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MiwzMyArNzIsMzggQEAgc3RhdGljIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBjcmVhdGVJbWFnZQogICAgIHJldHVybiBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4oQWRv
cHRDRiwgQ0dJbWFnZUNyZWF0ZVdpdGhQTkdEYXRhUHJvdmlkZXIoZGF0YVByb3ZpZGVyLmdldCgp
LCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwogfQogCi1zdGF0aWMgUmV0
YWluUHRyPENHQ29udGV4dFJlZj4gZ2V0RGlmZmVyZW5jZUJpdG1hcChDR0ltYWdlUmVmIHRlc3RC
aXRtYXAsIENHSW1hZ2VSZWYgcmVmZXJlbmNlQml0bWFwKQorLy8gR2VuZXJhdGVzIGFuIFJHQkE4
IGJpdG1hcCBpbiB0aGUgcmVmZXJlbmNlIGltYWdlIGNvbG9yc3BhY2UgY29udGFpbmluZyB0aGUg
ZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgMiBpbWFnZXMKK3N0YXRpYyBSZXRhaW5QdHI8Q0dDb250
ZXh0UmVmPiBjcmVhdGVEaWZmZXJlbmNlQml0bWFwKENHSW1hZ2VSZWYgdGVzdEltYWdlLCBDR0lt
YWdlUmVmIHJlZmVyZW5jZUltYWdlKQogewogICAgIC8vIHdlIG11c3QgaGF2ZSBib3RoIGltYWdl
cyB0byB0YWtlIGRpZmYKLSAgICBpZiAoIXRlc3RCaXRtYXAgfHwgIXJlZmVyZW5jZUJpdG1hcCkK
KyAgICBpZiAoIXRlc3RJbWFnZSB8fCAhcmVmZXJlbmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiAw
OwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBD
R0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisgICAgCisgICAgLy8gd2UgbXVzdCBoYXZl
IGJvdGggaW1hZ2VzIGJlIHRoZSBzYW1lIGRpbWVuc2lvbnMKKyAgICBpZiAoKENHSW1hZ2VHZXRX
aWR0aCh0ZXN0SW1hZ2UpICE9IENHSW1hZ2VHZXRXaWR0aChyZWZlcmVuY2VJbWFnZSkpIHx8IChD
R0ltYWdlR2V0SGVpZ2h0KHRlc3RJbWFnZSkgIT0gQ0dJbWFnZUdldEhlaWdodChyZWZlcmVuY2VJ
bWFnZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICAvLyB3ZSBtdXN0IGhhdmUgYm90
aCBpbWFnZXMgaW4gdGhlIHNhbWUgY29sb3JzcGFjZQorICAgIGlmICghQ0ZFcXVhbChDR0ltYWdl
R2V0Q29sb3JTcGFjZSh0ZXN0SW1hZ2UpLCBDR0ltYWdlR2V0Q29sb3JTcGFjZShyZWZlcmVuY2VJ
bWFnZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKICAgICBzdGF0aWMgQ0ZNdXRhYmxlRGF0
YVJlZiBkYXRhID0gQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKTsK
LSAgICBDRkRhdGFTZXRMZW5ndGgoZGF0YSwgQ0dJbWFnZUdldEhlaWdodCh0ZXN0Qml0bWFwKSAq
IENHSW1hZ2VHZXRCeXRlc1BlclJvdyh0ZXN0Qml0bWFwKSk7Ci0gICAgUmV0YWluUHRyPENHQ29u
dGV4dFJlZj4gY29udGV4dChBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUoQ0ZEYXRhR2V0
TXV0YWJsZUJ5dGVQdHIoZGF0YSksIENHSW1hZ2VHZXRXaWR0aCh0ZXN0Qml0bWFwKSwgQ0dJbWFn
ZUdldEhlaWdodCh0ZXN0Qml0bWFwKSwKLSAgICAgICAgQ0dJbWFnZUdldEJpdHNQZXJDb21wb25l
bnQodGVzdEJpdG1hcCksIENHSW1hZ2VHZXRCeXRlc1BlclJvdyh0ZXN0Qml0bWFwKSwgY29sb3JT
cGFjZS5nZXQoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZEZpcnN0KSk7CisgICAgc2l6ZV90IHJvd0J5dGVzID0gKDQgKiBDR0ltYWdlR2V0
V2lkdGgocmVmZXJlbmNlSW1hZ2UpICsgNjMpICYgfjYzOyAvLyBVc2UgYSBtdWx0aXBsZSBvZiA2
NCBieXRlcyB0byBpbXByb3ZlIENHIHBlcmZvcm1hbmNlCisgICAgQ0ZEYXRhU2V0TGVuZ3RoKGRh
dGEsIENHSW1hZ2VHZXRIZWlnaHQocmVmZXJlbmNlSW1hZ2UpICogcm93Qnl0ZXMpOworICAgIFJl
dGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHQoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKENGRGF0YUdldE11dGFibGVCeXRlUHRyKGRhdGEpLCBDR0ltYWdlR2V0V2lkdGgocmVmZXJl
bmNlSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KHJlZmVyZW5jZUltYWdlKSwgOCwgcm93Qnl0ZXMs
IENHSW1hZ2VHZXRDb2xvclNwYWNlKHJlZmVyZW5jZUltYWdlKSwga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKIAogICAgIENHQ29udGV4
dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVOb3JtYWwpOwotICAgIENH
Q29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHN0YXRpY19j
YXN0PENHRmxvYXQ+KENHSW1hZ2VHZXRXaWR0aCh0ZXN0Qml0bWFwKSksIHN0YXRpY19jYXN0PENH
RmxvYXQ+KENHSW1hZ2VHZXRIZWlnaHQodGVzdEJpdG1hcCkpKSwgdGVzdEJpdG1hcCk7CisgICAg
Q0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgc3RhdGlj
X2Nhc3Q8Q0dGbG9hdD4oQ0dJbWFnZUdldFdpZHRoKHRlc3RJbWFnZSkpLCBzdGF0aWNfY2FzdDxD
R0Zsb2F0PihDR0ltYWdlR2V0SGVpZ2h0KHRlc3RJbWFnZSkpKSwgdGVzdEltYWdlKTsKICAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlRGlmZmVyZW5j
ZSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwg
MCwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oQ0dJbWFnZUdldFdpZHRoKHJlZmVyZW5jZUJpdG1hcCkp
LCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihDR0ltYWdlR2V0SGVpZ2h0KHJlZmVyZW5jZUJpdG1hcCkp
KSwgcmVmZXJlbmNlQml0bWFwKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQo
KSwgQ0dSZWN0TWFrZSgwLCAwLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihDR0ltYWdlR2V0V2lkdGgo
cmVmZXJlbmNlSW1hZ2UpKSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oQ0dJbWFnZUdldEhlaWdodChy
ZWZlcmVuY2VJbWFnZSkpKSwgcmVmZXJlbmNlSW1hZ2UpOwogCiAgICAgcmV0dXJuIGNvbnRleHQ7
CiB9CiAKLS8qKgotICogQ291bnRzIHRoZSBudW1iZXIgb2Ygbm9uLWJsYWNrIHBpeGVscywgYW5k
IHJldHVybnMgdGhlIHBlcmNlbnRhZ2UKLSAqIG9mIG5vbi1ibGFjayBwaXhlbHMgdG8gdG90YWwg
cGl4ZWxzIGluIHRoZSBpbWFnZS4KLSAqLworLy8gQ291bnRzIHRoZSBudW1iZXIgb2Ygbm9uLWJs
YWNrIHBpeGVscywgYW5kIHJldHVybnMgdGhlIHBlcmNlbnRhZ2Ugb2Ygbm9uLWJsYWNrIHBpeGVs
cyB0byB0b3RhbCBwaXhlbHMgaW4gdGhlIGltYWdlLgogc3RhdGljIGZsb2F0IGNvbXB1dGVQZXJj
ZW50YWdlRGlmZmVyZW50KENHQ29udGV4dFJlZiBkaWZmQml0bWFwLCB1bnNpZ25lZCB0aHJlc2hv
bGQpCiB7Ci0gICAgLy8gaWYgZGlmZkJpYXRtYXAgaXMgbmlsLCB0aGVuIHRoZXJlIHdhcyBhbiBl
cnJvciwgYW5kIGl0IGRpZG4ndCBtYXRjaC4KKyAgICAvLyBpZiBkaWZmQml0bWFwIGlzIG5pbCwg
dGhlbiB0aGVyZSB3YXMgYW4gZXJyb3IsIGFuZCBpdCBkaWRuJ3QgbWF0Y2guCiAgICAgaWYgKCFk
aWZmQml0bWFwKQogICAgICAgICByZXR1cm4gMTAwLjBmOwogCkBAIC0xMDgsNyArMTEzLDYgQEAg
c3RhdGljIGZsb2F0IGNvbXB1dGVQZXJjZW50YWdlRGlmZmVyZW50KAogICAgIHVuc2lnbmVkIGNo
YXIqIHBpeGVsUm93RGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihDR0JpdG1hcENv
bnRleHRHZXREYXRhKGRpZmZCaXRtYXApKTsKICAgICB1bnNpZ25lZCBkaWZmZXJlbmNlcyA9IDA7
CiAKLSAgICAvLyBOT1RFOiBUaGlzIG1heSBub3QgYmUgc2FmZSB3aGVuIHN3aXRjaGluZyBiZXR3
ZWVuIEVORElBTiB0eXBlcwogICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxz
SGlnaDsgcm93KyspIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBjb2wgPSAwOyBjb2wgPCAocGl4
ZWxzV2lkZSAqIDQpOyBjb2wgKz0gNCkgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcmVk
ID0gcGl4ZWxSb3dEYXRhICsgY29sOwpAQCAtMTMwLDEwICsxMzQsMTAgQEAgc3RhdGljIGZsb2F0
IGNvbXB1dGVQZXJjZW50YWdlRGlmZmVyZW50KAogICAgIHJldHVybiAoZGlmZmVyZW5jZXMgKiAx
MDAuZikgLyB0b3RhbFBpeGVsczsKIH0KIAotc3RhdGljIHZvaWQgY29tcGFyZUltYWdlcyhDR0lt
YWdlUmVmIGFjdHVhbEJpdG1hcCwgQ0dJbWFnZVJlZiBiYXNlbGluZUJpdG1hcCwgdW5zaWduZWQg
dGhyZXNob2xkKQorc3RhdGljIHZvaWQgY29tcGFyZUltYWdlcyhDR0ltYWdlUmVmIHRlc3RJbWFn
ZSwgQ0dJbWFnZVJlZiByZWZlcmVuY2VJbWFnZSwgdW5zaWduZWQgdGhyZXNob2xkKQogewogICAg
IC8vIHByZXBhcmUgdGhlIGRpZmZlcmVuY2UgYmxlbmQgdG8gY2hlY2sgZm9yIHBpeGVsIHZhcmlh
dGlvbnMKLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBkaWZmQml0bWFwID0gZ2V0RGlmZmVy
ZW5jZUJpdG1hcChhY3R1YWxCaXRtYXAsIGJhc2VsaW5lQml0bWFwKTsKKyAgICBSZXRhaW5QdHI8
Q0dDb250ZXh0UmVmPiBkaWZmQml0bWFwID0gY3JlYXRlRGlmZmVyZW5jZUJpdG1hcCh0ZXN0SW1h
Z2UsIHJlZmVyZW5jZUltYWdlKTsKIAogICAgIGZsb2F0IHBlcmNlbnRhZ2UgPSBjb21wdXRlUGVy
Y2VudGFnZURpZmZlcmVudChkaWZmQml0bWFwLmdldCgpLCB0aHJlc2hvbGQpOwogCkBAIC0xNDIs
MTMgKzE0NiwxNiBAQCBzdGF0aWMgdm9pZCBjb21wYXJlSW1hZ2VzKENHSW1hZ2VSZWYgYWN0CiAg
ICAgLy8gc2VuZCBtZXNzYWdlIHRvIGxldCB0aGVtIGtub3cgaWYgYW4gaW1hZ2Ugd2FzIHdyb25n
CiAgICAgaWYgKHBlcmNlbnRhZ2UgPiAwLjBmKSB7CiAgICAgICAgIC8vIHNpbmNlIHRoZSBkaWZm
IG1pZ2h0IGFjdHVhbGx5IHNob3cgc29tZXRoaW5nLCBzZW5kIGl0IHRvIHN0ZG91dAotICAgICAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlSW1hZ2UoZGlmZkJpdG1hcC5nZXQoKSkpOwotICAgICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxl
RGF0YVJlZj4gaW1hZ2VEYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwot
ICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBpbWFnZURlc3QoQWRvcHRD
RiwgQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoaW1hZ2VEYXRhLmdldCgpLCBrVVRU
eXBlUE5HLCAxLCAwKSk7Ci0gICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGltYWdl
RGVzdC5nZXQoKSwgaW1hZ2UuZ2V0KCksIDApOwotICAgICAgICBDR0ltYWdlRGVzdGluYXRpb25G
aW5hbGl6ZShpbWFnZURlc3QuZ2V0KCkpOwotICAgICAgICBwcmludGYoIkNvbnRlbnQtTGVuZ3Ro
OiAlbHVcbiIsIENGRGF0YUdldExlbmd0aChpbWFnZURhdGEuZ2V0KCkpKTsKLSAgICAgICAgZndy
aXRlKENGRGF0YUdldEJ5dGVQdHIoaW1hZ2VEYXRhLmdldCgpKSwgMSwgQ0ZEYXRhR2V0TGVuZ3Ro
KGltYWdlRGF0YS5nZXQoKSksIHN0ZG91dCk7CisgICAgICAgIGlmIChkaWZmQml0bWFwKSB7Cisg
ICAgICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoQWRvcHRDRiwgQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoZGlmZkJpdG1hcC5nZXQoKSkpOworICAgICAgICAgICAgUmV0YWlu
UHRyPENGTXV0YWJsZURhdGFSZWY+IGltYWdlRGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGVNdXRh
YmxlKDAsIDApKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+
IGltYWdlRGVzdChBZG9wdENGLCBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShpbWFn
ZURhdGEuZ2V0KCksIGtVVFR5cGVQTkcsIDEsIDApKTsKKyAgICAgICAgICAgIENHSW1hZ2VEZXN0
aW5hdGlvbkFkZEltYWdlKGltYWdlRGVzdC5nZXQoKSwgaW1hZ2UuZ2V0KCksIDApOworICAgICAg
ICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoaW1hZ2VEZXN0LmdldCgpKTsKKyAgICAg
ICAgICAgIHByaW50ZigiQ29udGVudC1MZW5ndGg6ICVsdVxuIiwgQ0ZEYXRhR2V0TGVuZ3RoKGlt
YWdlRGF0YS5nZXQoKSkpOworICAgICAgICAgICAgZndyaXRlKENGRGF0YUdldEJ5dGVQdHIoaW1h
Z2VEYXRhLmdldCgpKSwgMSwgQ0ZEYXRhR2V0TGVuZ3RoKGltYWdlRGF0YS5nZXQoKSksIHN0ZG91
dCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiZGlmZjog
JTAxLjJmJSUgZmFpbGVkXG4iLCBwZXJjZW50YWdlKTsKICAgICB9IGVsc2UKICAgICAgICAgZnBy
aW50ZihzdGRvdXQsICJkaWZmOiAlMDEuMmYlJSBwYXNzZWRcbiIsIHBlcmNlbnRhZ2UpOwo=
</data>
<flag name="review"
          id="10905"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24071</attachid>
            <date>2008-10-03 15:09:12 -0700</date>
            <delta_ts>2008-10-03 15:36:44 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>patch-4.txt</filename>
            <type>text/plain</type>
            <size>7641</size>
            <attacher name="Pierre-Olivier Latour">pol</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDM3MjQyKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDgtMTAtMDMgIFBpZXJyZS1PbGl2aWVyIExh
dG91ciAgPHBvbEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVuZGVyIGltYWdlcyB0byBSR0JBOCBiaXRtYXBzIGluZGVwZW5kZW50
bHkgb2YgcGxhdGZvcm0gZW5kaWFubmVzcy4KKworICAgICAgICBDcmVhdGUgaW1hZ2UgZGlmZmVy
ZW5jZSBiaXRtYXAgaW4gcmVmZXJlbmNlIGltYWdlIGNvbG9yc3BhY2UgaW5zdGVhZCBvZiBkZXZp
Y2UgY29sb3JzcGFjZQorICAgICAgICAod2hpY2ggZGVwZW5kcyBvbiB0aGUgbWFpbiBkaXNwbGF5
IHByb2ZpbGUpLCBzbyB0aGF0IG5vIGNvbG9yIG1hdGNoaW5nIGhhcHBlbnMuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzM2CisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9jZy9JbWFnZURpZmZDRy5jcHA6CisgICAgICAgIChjcmVhdGVEaWZm
ZXJlbmNlQml0bWFwKToKKyAgICAgICAgKGNvbXB1dGVQZXJjZW50YWdlRGlmZmVyZW50KToKKyAg
ICAgICAgKGNvbXBhcmVJbWFnZXMpOgorCiAyMDA4LTA5LTMwICBNYXJrIFJvd2UgIDxtcm93ZUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL0ltYWdlRGlmZkNHLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jZy9JbWFnZURpZmZDRy5jcHAJKHJldmlzaW9u
IDM3MjQyKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvSW1hZ2VEaWZmQ0cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MiwzMyArNzIsNDQgQEAgc3RhdGljIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBjcmVhdGVJbWFnZQogICAgIHJldHVybiBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4oQWRv
cHRDRiwgQ0dJbWFnZUNyZWF0ZVdpdGhQTkdEYXRhUHJvdmlkZXIoZGF0YVByb3ZpZGVyLmdldCgp
LCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwogfQogCi1zdGF0aWMgUmV0
YWluUHRyPENHQ29udGV4dFJlZj4gZ2V0RGlmZmVyZW5jZUJpdG1hcChDR0ltYWdlUmVmIHRlc3RC
aXRtYXAsIENHSW1hZ2VSZWYgcmVmZXJlbmNlQml0bWFwKQorLy8gR2VuZXJhdGVzIGFuIFJHQkE4
IGJpdG1hcCBpbiB0aGUgcmVmZXJlbmNlIGltYWdlIGNvbG9yc3BhY2UgY29udGFpbmluZyB0aGUg
ZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgMiBpbWFnZXMKK3N0YXRpYyBSZXRhaW5QdHI8Q0dDb250
ZXh0UmVmPiBjcmVhdGVEaWZmZXJlbmNlQml0bWFwKENHSW1hZ2VSZWYgdGVzdEltYWdlLCBDR0lt
YWdlUmVmIHJlZmVyZW5jZUltYWdlKQogewogICAgIC8vIHdlIG11c3QgaGF2ZSBib3RoIGltYWdl
cyB0byB0YWtlIGRpZmYKLSAgICBpZiAoIXRlc3RCaXRtYXAgfHwgIXJlZmVyZW5jZUJpdG1hcCkK
KyAgICBpZiAoIXRlc3RJbWFnZSB8fCAhcmVmZXJlbmNlSW1hZ2UpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJ0ZXN0IG9yIHJlZmVyZW5jZSBpbWFnZSBpcyBtaXNzaW5nISIpOwogICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyB3ZSBtdXN0IGhhdmUgYm90aCBpbWFnZXMgYmUg
dGhlIHNhbWUgZGltZW5zaW9ucworICAgIGlmICgoQ0dJbWFnZUdldFdpZHRoKHRlc3RJbWFnZSkg
IT0gQ0dJbWFnZUdldFdpZHRoKHJlZmVyZW5jZUltYWdlKSkgfHwgKENHSW1hZ2VHZXRIZWlnaHQo
dGVzdEltYWdlKSAhPSBDR0ltYWdlR2V0SGVpZ2h0KHJlZmVyZW5jZUltYWdlKSkpIHsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJ0ZXN0IGFuZCByZWZlcmVuY2UgaW1hZ2UgZGltZW5zaW9ucyBk
b24ndCBtYXRjaCEiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gd2UgbXVz
dCBoYXZlIGJvdGggaW1hZ2VzIGluIHRoZSBzYW1lIGNvbG9yc3BhY2UKKyAgICBpZiAoIUNGRXF1
YWwoQ0dJbWFnZUdldENvbG9yU3BhY2UodGVzdEltYWdlKSwgQ0dJbWFnZUdldENvbG9yU3BhY2Uo
cmVmZXJlbmNlSW1hZ2UpKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRlc3QgYW5kIHJl
ZmVyZW5jZSBpbWFnZSBjb2xvcnNwYWNlcyBkb24ndCBtYXRjaCEiKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQogCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShB
ZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CiAgICAgc3RhdGljIENGTXV0
YWJsZURhdGFSZWYgZGF0YSA9IENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgMCk7Ci0gICAgQ0ZEYXRhU2V0TGVuZ3RoKGRhdGEsIENHSW1hZ2VHZXRIZWlnaHQodGVzdEJp
dG1hcCkgKiBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3codGVzdEJpdG1hcCkpOwotICAgIFJldGFpblB0
cjxDR0NvbnRleHRSZWY+IGNvbnRleHQoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKENG
RGF0YUdldE11dGFibGVCeXRlUHRyKGRhdGEpLCBDR0ltYWdlR2V0V2lkdGgodGVzdEJpdG1hcCks
IENHSW1hZ2VHZXRIZWlnaHQodGVzdEJpdG1hcCksCi0gICAgICAgIENHSW1hZ2VHZXRCaXRzUGVy
Q29tcG9uZW50KHRlc3RCaXRtYXApLCBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3codGVzdEJpdG1hcCks
IGNvbG9yU3BhY2UuZ2V0KCksIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VB
bHBoYVByZW11bHRpcGxpZWRGaXJzdCkpOworICAgIHNpemVfdCByb3dCeXRlcyA9ICg0ICogQ0dJ
bWFnZUdldFdpZHRoKHJlZmVyZW5jZUltYWdlKSArIDYzKSAmIH42MzsgLy8gVXNlIGEgbXVsdGlw
bGUgb2YgNjQgYnl0ZXMgdG8gaW1wcm92ZSBDRyBwZXJmb3JtYW5jZQorICAgIENGRGF0YVNldExl
bmd0aChkYXRhLCBDR0ltYWdlR2V0SGVpZ2h0KHJlZmVyZW5jZUltYWdlKSAqIHJvd0J5dGVzKTsK
KyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjb250ZXh0KEFkb3B0Q0YsIENHQml0bWFwQ29u
dGV4dENyZWF0ZShDRkRhdGFHZXRNdXRhYmxlQnl0ZVB0cihkYXRhKSwgQ0dJbWFnZUdldFdpZHRo
KHJlZmVyZW5jZUltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChyZWZlcmVuY2VJbWFnZSksIDgsIHJv
d0J5dGVzLCBDR0ltYWdlR2V0Q29sb3JTcGFjZShyZWZlcmVuY2VJbWFnZSksIGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7CiAKICAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlTm9ybWFsKTsK
LSAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBz
dGF0aWNfY2FzdDxDR0Zsb2F0PihDR0ltYWdlR2V0V2lkdGgodGVzdEJpdG1hcCkpLCBzdGF0aWNf
Y2FzdDxDR0Zsb2F0PihDR0ltYWdlR2V0SGVpZ2h0KHRlc3RCaXRtYXApKSksIHRlc3RCaXRtYXAp
OworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAs
IHN0YXRpY19jYXN0PENHRmxvYXQ+KENHSW1hZ2VHZXRXaWR0aCh0ZXN0SW1hZ2UpKSwgc3RhdGlj
X2Nhc3Q8Q0dGbG9hdD4oQ0dJbWFnZUdldEhlaWdodCh0ZXN0SW1hZ2UpKSksIHRlc3RJbWFnZSk7
CiAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZURp
ZmZlcmVuY2UpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RN
YWtlKDAsIDAsIHN0YXRpY19jYXN0PENHRmxvYXQ+KENHSW1hZ2VHZXRXaWR0aChyZWZlcmVuY2VC
aXRtYXApKSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oQ0dJbWFnZUdldEhlaWdodChyZWZlcmVuY2VC
aXRtYXApKSksIHJlZmVyZW5jZUJpdG1hcCk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRl
eHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oQ0dJbWFnZUdl
dFdpZHRoKHJlZmVyZW5jZUltYWdlKSksIHN0YXRpY19jYXN0PENHRmxvYXQ+KENHSW1hZ2VHZXRI
ZWlnaHQocmVmZXJlbmNlSW1hZ2UpKSksIHJlZmVyZW5jZUltYWdlKTsKIAogICAgIHJldHVybiBj
b250ZXh0OwogfQogCi0vKioKLSAqIENvdW50cyB0aGUgbnVtYmVyIG9mIG5vbi1ibGFjayBwaXhl
bHMsIGFuZCByZXR1cm5zIHRoZSBwZXJjZW50YWdlCi0gKiBvZiBub24tYmxhY2sgcGl4ZWxzIHRv
IHRvdGFsIHBpeGVscyBpbiB0aGUgaW1hZ2UuCi0gKi8KKy8vIENvdW50cyB0aGUgbnVtYmVyIG9m
IG5vbi1ibGFjayBwaXhlbHMsIGFuZCByZXR1cm5zIHRoZSBwZXJjZW50YWdlIG9mIG5vbi1ibGFj
ayBwaXhlbHMgdG8gdG90YWwgcGl4ZWxzIGluIHRoZSBpbWFnZS4KIHN0YXRpYyBmbG9hdCBjb21w
dXRlUGVyY2VudGFnZURpZmZlcmVudChDR0NvbnRleHRSZWYgZGlmZkJpdG1hcCwgdW5zaWduZWQg
dGhyZXNob2xkKQogewotICAgIC8vIGlmIGRpZmZCaWF0bWFwIGlzIG5pbCwgdGhlbiB0aGVyZSB3
YXMgYW4gZXJyb3IsIGFuZCBpdCBkaWRuJ3QgbWF0Y2guCisgICAgLy8gaWYgZGlmZkJpdG1hcCBp
cyBuaWwsIHRoZW4gdGhlcmUgd2FzIGFuIGVycm9yLCBhbmQgaXQgZGlkbid0IG1hdGNoLgogICAg
IGlmICghZGlmZkJpdG1hcCkKICAgICAgICAgcmV0dXJuIDEwMC4wZjsKIApAQCAtMTA4LDcgKzEx
OSw2IEBAIHN0YXRpYyBmbG9hdCBjb21wdXRlUGVyY2VudGFnZURpZmZlcmVudCgKICAgICB1bnNp
Z25lZCBjaGFyKiBwaXhlbFJvd0RhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oQ0dC
aXRtYXBDb250ZXh0R2V0RGF0YShkaWZmQml0bWFwKSk7CiAgICAgdW5zaWduZWQgZGlmZmVyZW5j
ZXMgPSAwOwogCi0gICAgLy8gTk9URTogVGhpcyBtYXkgbm90IGJlIHNhZmUgd2hlbiBzd2l0Y2hp
bmcgYmV0d2VlbiBFTkRJQU4gdHlwZXMKICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8
IHBpeGVsc0hpZ2g7IHJvdysrKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgY29sID0gMDsgY29s
IDwgKHBpeGVsc1dpZGUgKiA0KTsgY29sICs9IDQpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIqIHJlZCA9IHBpeGVsUm93RGF0YSArIGNvbDsKQEAgLTEzMCwxMCArMTQwLDEwIEBAIHN0YXRp
YyBmbG9hdCBjb21wdXRlUGVyY2VudGFnZURpZmZlcmVudCgKICAgICByZXR1cm4gKGRpZmZlcmVu
Y2VzICogMTAwLmYpIC8gdG90YWxQaXhlbHM7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbXBhcmVJbWFn
ZXMoQ0dJbWFnZVJlZiBhY3R1YWxCaXRtYXAsIENHSW1hZ2VSZWYgYmFzZWxpbmVCaXRtYXAsIHVu
c2lnbmVkIHRocmVzaG9sZCkKK3N0YXRpYyB2b2lkIGNvbXBhcmVJbWFnZXMoQ0dJbWFnZVJlZiB0
ZXN0SW1hZ2UsIENHSW1hZ2VSZWYgcmVmZXJlbmNlSW1hZ2UsIHVuc2lnbmVkIHRocmVzaG9sZCkK
IHsKICAgICAvLyBwcmVwYXJlIHRoZSBkaWZmZXJlbmNlIGJsZW5kIHRvIGNoZWNrIGZvciBwaXhl
bCB2YXJpYXRpb25zCi0gICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gZGlmZkJpdG1hcCA9IGdl
dERpZmZlcmVuY2VCaXRtYXAoYWN0dWFsQml0bWFwLCBiYXNlbGluZUJpdG1hcCk7CisgICAgUmV0
YWluUHRyPENHQ29udGV4dFJlZj4gZGlmZkJpdG1hcCA9IGNyZWF0ZURpZmZlcmVuY2VCaXRtYXAo
dGVzdEltYWdlLCByZWZlcmVuY2VJbWFnZSk7CiAKICAgICBmbG9hdCBwZXJjZW50YWdlID0gY29t
cHV0ZVBlcmNlbnRhZ2VEaWZmZXJlbnQoZGlmZkJpdG1hcC5nZXQoKSwgdGhyZXNob2xkKTsKIApA
QCAtMTQyLDEzICsxNTIsMTYgQEAgc3RhdGljIHZvaWQgY29tcGFyZUltYWdlcyhDR0ltYWdlUmVm
IGFjdAogICAgIC8vIHNlbmQgbWVzc2FnZSB0byBsZXQgdGhlbSBrbm93IGlmIGFuIGltYWdlIHdh
cyB3cm9uZwogICAgIGlmIChwZXJjZW50YWdlID4gMC4wZikgewogICAgICAgICAvLyBzaW5jZSB0
aGUgZGlmZiBtaWdodCBhY3R1YWxseSBzaG93IHNvbWV0aGluZywgc2VuZCBpdCB0byBzdGRvdXQK
LSAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0Q0YsIENHQml0bWFwQ29u
dGV4dENyZWF0ZUltYWdlKGRpZmZCaXRtYXAuZ2V0KCkpKTsKLSAgICAgICAgUmV0YWluUHRyPENG
TXV0YWJsZURhdGFSZWY+IGltYWdlRGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGVNdXRhYmxlKDAs
IDApKTsKLSAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gaW1hZ2VEZXN0
KEFkb3B0Q0YsIENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGltYWdlRGF0YS5nZXQo
KSwga1VUVHlwZVBORywgMSwgMCkpOwotICAgICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFn
ZShpbWFnZURlc3QuZ2V0KCksIGltYWdlLmdldCgpLCAwKTsKLSAgICAgICAgQ0dJbWFnZURlc3Rp
bmF0aW9uRmluYWxpemUoaW1hZ2VEZXN0LmdldCgpKTsKLSAgICAgICAgcHJpbnRmKCJDb250ZW50
LUxlbmd0aDogJWx1XG4iLCBDRkRhdGFHZXRMZW5ndGgoaW1hZ2VEYXRhLmdldCgpKSk7Ci0gICAg
ICAgIGZ3cml0ZShDRkRhdGFHZXRCeXRlUHRyKGltYWdlRGF0YS5nZXQoKSksIDEsIENGRGF0YUdl
dExlbmd0aChpbWFnZURhdGEuZ2V0KCkpLCBzdGRvdXQpOworICAgICAgICBpZiAoZGlmZkJpdG1h
cCkgeworICAgICAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0Q0YsIENH
Qml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGRpZmZCaXRtYXAuZ2V0KCkpKTsKKyAgICAgICAgICAg
IFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBpbWFnZURhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3Jl
YXRlTXV0YWJsZSgwLCAwKSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0
aW9uUmVmPiBpbWFnZURlc3QoQWRvcHRDRiwgQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERh
dGEoaW1hZ2VEYXRhLmdldCgpLCBrVVRUeXBlUE5HLCAxLCAwKSk7CisgICAgICAgICAgICBDR0lt
YWdlRGVzdGluYXRpb25BZGRJbWFnZShpbWFnZURlc3QuZ2V0KCksIGltYWdlLmdldCgpLCAwKTsK
KyAgICAgICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGltYWdlRGVzdC5nZXQoKSk7
CisgICAgICAgICAgICBwcmludGYoIkNvbnRlbnQtTGVuZ3RoOiAlbHVcbiIsIENGRGF0YUdldExl
bmd0aChpbWFnZURhdGEuZ2V0KCkpKTsKKyAgICAgICAgICAgIGZ3cml0ZShDRkRhdGFHZXRCeXRl
UHRyKGltYWdlRGF0YS5nZXQoKSksIDEsIENGRGF0YUdldExlbmd0aChpbWFnZURhdGEuZ2V0KCkp
LCBzdGRvdXQpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBmcHJpbnRmKHN0ZG91dCwg
ImRpZmY6ICUwMS4yZiUlIGZhaWxlZFxuIiwgcGVyY2VudGFnZSk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIGZwcmludGYoc3Rkb3V0LCAiZGlmZjogJTAxLjJmJSUgcGFzc2VkXG4iLCBwZXJjZW50YWdl
KTsK
</data>
<flag name="review"
          id="10906"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>