<?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>62889</bug_id>
          
          <creation_ts>2011-06-17 11:04:22 -0700</creation_ts>
          <short_desc>Add Font interface to support Skia on Mac Chrome port</short_desc>
          <delta_ts>2011-06-20 11:56:02 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Cary Clark">caryclark</reporter>
          <assigned_to name="Cary Clark">caryclark</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>reed</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>422745</commentid>
    <comment_count>0</comment_count>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-17 11:04:22 -0700</bug_when>
    <thetext>Add Font interface to support Skia on Mac Chrome port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422766</commentid>
    <comment_count>1</comment_count>
      <attachid>97624</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-17 11:16:29 -0700</bug_when>
    <thetext>Created attachment 97624
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422775</commentid>
    <comment_count>2</comment_count>
      <attachid>97624</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-17 11:21:22 -0700</bug_when>
    <thetext>Comment on attachment 97624
Patch

Attachment 97624 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8880645</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422823</commentid>
    <comment_count>3</comment_count>
      <attachid>97634</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-17 12:20:07 -0700</bug_when>
    <thetext>Created attachment 97634
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422826</commentid>
    <comment_count>4</comment_count>
      <attachid>97636</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-17 12:26:05 -0700</bug_when>
    <thetext>Created attachment 97636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422835</commentid>
    <comment_count>5</comment_count>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-17 12:52:44 -0700</bug_when>
    <thetext>Eric, feel free to punt back if this isn&apos;t something you&apos;re comfortable reviewing -- I&apos;m having trouble finding an appropriate reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422896</commentid>
    <comment_count>6</comment_count>
      <attachid>97636</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-17 14:47:30 -0700</bug_when>
    <thetext>Comment on attachment 97636
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=97636&amp;action=review

&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:51
&gt; +#include &quot;ComplexTextController.h&quot;
&gt; +#include &quot;FloatRect.h&quot;
&gt; +#include &quot;GlyphBuffer.h&quot;
&gt; +#include &quot;GraphicsContext.h&quot;
&gt; +#include &quot;NotImplemented.h&quot;
&gt; +#include &quot;PlatformContextSkia.h&quot;
&gt; +#include &quot;SimpleFontData.h&quot;
&gt; +
&gt; +#include &quot;SkCanvas.h&quot;
&gt; +#include &quot;SkFontHost.h&quot;
&gt; +#include &quot;SkPaint.h&quot;
&gt; +#include &quot;SkTemplates.h&quot;
&gt; +#include &quot;SkTypeface.h&quot;
&gt; +#include &quot;SkTypeface_mac.h&quot;
&gt; +#include &quot;SkUtils.h&quot;
&gt; +
&gt; +#include &quot;skia/ext/platform_canvas.h&quot;
&gt; +#include &lt;wtf/unicode/Unicode.h&gt;

Are all these really needed?  I didn&apos;t notice any notImplemented() calls at least.

&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:63
&gt; +bool Font::canReturnFallbackFontsForComplexText()
&gt; +{
&gt; +    return false;
&gt; +}
&gt; +
&gt; +bool Font::canExpandAroundIdeographsInComplexText()
&gt; +{
&gt; +    return false;
&gt; +}

Why?  Both of these might deserve comments.

&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:85
&gt; +    const float ts = platformData.m_size &gt;= 0 ? platformData.m_size : 12;

ts?  I assume you mean textSize?  or fontSize?

&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:90
&gt; +    SkTypeface* typeface = SkCreateTypefaceFromCTFont(platformData.ctFont());

Don&apos;t we have a smartpointer to use here?  Like RetainPtr with Skia specializations?

&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:102
&gt; +    SkASSERT(sizeof(GlyphBufferGlyph) == sizeof(uint16_t)); // compile-time assert

I think WebKit has a COMPILE_ASSERT or similar, which could avoid the need for your comment. :)

&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:130
&gt; +    for (int i = 0; i &lt; numGlyphs; i++) {
&gt; +        SkScalar myWidth = SkFloatToScalar(adv[i].width);
&gt; +        pos[i].set(x, y);
&gt; +        if (isVertical) {
&gt; +            vPosBegin[i].set(x + myWidth, y);
&gt; +            vPosEnd[i].set(x + myWidth, y - myWidth);
&gt; +        }
&gt; +        x += myWidth;
&gt; +        y += SkFloatToScalar(adv[i].height);
&gt; +    }

I would have probably made this a helper to better scope its inputs/outputs.  Also may better prepare you for later special-casing the default advances case you mentioned in the fixme.

&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:144
&gt; +    // We draw text up to two times (once for fill, once for stroke).
&gt; +    if (textMode &amp; TextModeFill) {
&gt; +        SkPaint paint;
&gt; +        gc-&gt;platformContext()-&gt;setupPaintForFilling(&amp;paint);
&gt; +        setupPaint(&amp;paint, font, this);
&gt; +        adjustTextRenderMode(&amp;paint, gc-&gt;platformContext());
&gt; +        paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
&gt; +        paint.setColor(gc-&gt;fillColor().rgb());

So much code we could share between fill and stroke! no?

&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:155
&gt; +        if (isVertical) {
&gt; +            SkPath path;
&gt; +            for (int i = 0; i &lt; numGlyphs; ++i) {
&gt; +                path.reset();
&gt; +                path.moveTo(vPosBegin[i]);
&gt; +                path.lineTo(vPosEnd[i]);
&gt; +                canvas-&gt;drawTextOnPath(glyphs + i, 2, path, 0, paint);
&gt; +            }
&gt; +        } else
&gt; +            canvas-&gt;drawPosText(glyphs, numGlyphs &lt;&lt; 1, pos, paint);

This is repeated exactly twice, no?

&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:172
&gt; +            SkSafeUnref(paint.setLooper(0));

Huh?  I assume we&apos;re trying to release the looper here?  If so, why doesn&apos;t SkPaint hold it in some sort of smart pointer/hold the reference itself?

&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:181
&gt; +                canvas-&gt;drawTextOnPath(glyphs + i, 2, path, 0, paint);

What does the magic 2 and 0 do?

&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:184
&gt; +            canvas-&gt;drawPosText(glyphs, numGlyphs &lt;&lt; 1, pos, paint);

Why are we multiplying by 2 here?  And if so, why use &lt;&lt; 1 to do it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423664</commentid>
    <comment_count>7</comment_count>
      <attachid>97636</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-20 07:38:13 -0700</bug_when>
    <thetext>Comment on attachment 97636
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=97636&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:51
&gt;&gt; +#include &lt;wtf/unicode/Unicode.h&gt;
&gt; 
&gt; Are all these really needed?  I didn&apos;t notice any notImplemented() calls at least.

Removed a bunch. Hopefully the set is minimal now.

&gt;&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:63
&gt;&gt; +}
&gt; 
&gt; Why?  Both of these might deserve comments.

The Windows and Linux ports do not support either, but on the other hand, they don&apos;t get their font data from CoreText. I don&apos;t know if it is correct to support these or not -- I assume it was safer not to. I have added comments and bugs to track this. (Is it correct to note the bug number in the comment?)

&gt;&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:85
&gt;&gt; +    const float ts = platformData.m_size &gt;= 0 ? platformData.m_size : 12;
&gt; 
&gt; ts?  I assume you mean textSize?  or fontSize?

Done.

&gt;&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:90
&gt;&gt; +    SkTypeface* typeface = SkCreateTypefaceFromCTFont(platformData.ctFont());
&gt; 
&gt; Don&apos;t we have a smartpointer to use here?  Like RetainPtr with Skia specializations?

Done.

&gt;&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:102
&gt;&gt; +    SkASSERT(sizeof(GlyphBufferGlyph) == sizeof(uint16_t)); // compile-time assert
&gt; 
&gt; I think WebKit has a COMPILE_ASSERT or similar, which could avoid the need for your comment. :)

Done.

&gt;&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:130
&gt;&gt; +    }
&gt; 
&gt; I would have probably made this a helper to better scope its inputs/outputs.  Also may better prepare you for later special-casing the default advances case you mentioned in the fixme.

Eric, I&apos;m uncomfortable rewriting the logic of this code. As uploaded here, it is the same as FontLinux.cpp. Since all of the Skia support has not yet been submitted, rewrites to improve the readability may introduce subtle bugs that will be difficult to find.

I am happy to make minor edits that I can ensure are correct, and have done so with all of your comments except this one and the two that follow. reed@google.com is working on fixing some unrelated bugs in FontLinux.cpp, and is happy to fix the code there to address your concerns (I copied him on this review).

I&apos;ll file a bug to track that these changes need to be made to both FontSkia.cpp and FontLinux.cpp, as well as add a TODO comment.

&gt;&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:144
&gt;&gt; +        paint.setColor(gc-&gt;fillColor().rgb());
&gt; 
&gt; So much code we could share between fill and stroke! no?

See comment above.

&gt;&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:155
&gt;&gt; +            canvas-&gt;drawPosText(glyphs, numGlyphs &lt;&lt; 1, pos, paint);
&gt; 
&gt; This is repeated exactly twice, no?

See comment above.

&gt;&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:172
&gt;&gt; +            SkSafeUnref(paint.setLooper(0));
&gt; 
&gt; Huh?  I assume we&apos;re trying to release the looper here?  If so, why doesn&apos;t SkPaint hold it in some sort of smart pointer/hold the reference itself?

The code was incorrect (if harmless). (Fixed.)

&gt;&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:181
&gt;&gt; +                canvas-&gt;drawTextOnPath(glyphs + i, 2, path, 0, paint);
&gt; 
&gt; What does the magic 2 and 0 do?

Replaced the 2 with sizeof(uint16_t). The 0 is a pointer to the optional matrix. What&apos;s the best convention to express this? Would you prefer something like:

static const int noOptionalMatrix = 0;

&gt;&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:184
&gt;&gt; +            canvas-&gt;drawPosText(glyphs, numGlyphs &lt;&lt; 1, pos, paint);
&gt; 
&gt; Why are we multiplying by 2 here?  And if so, why use &lt;&lt; 1 to do it?

Change to * sizeof(uint16_t). (Done.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423672</commentid>
    <comment_count>8</comment_count>
      <attachid>97801</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-20 08:10:32 -0700</bug_when>
    <thetext>Created attachment 97801
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423782</commentid>
    <comment_count>9</comment_count>
      <attachid>97801</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-20 11:13:24 -0700</bug_when>
    <thetext>Comment on attachment 97801
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=97801&amp;action=review

OK.

&gt; Source/WebCore/platform/graphics/skia/FontSkia.cpp:88
&gt; +    SkTypeface* typeface = SkCreateTypefaceFromCTFont(platformData.ctFont());
&gt; +    SkAutoUnref autoUnref(typeface);

I take it skia smart pointers don&apos;t work like webkit (or boost) ones with a .get() method?  If so, then there is no need to have a separate raw pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423824</commentid>
    <comment_count>10</comment_count>
      <attachid>97801</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-20 11:55:58 -0700</bug_when>
    <thetext>Comment on attachment 97801
Patch

Clearing flags on attachment: 97801

Committed r89266: &lt;http://trac.webkit.org/changeset/89266&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423825</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-20 11:56:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97624</attachid>
            <date>2011-06-17 11:16:29 -0700</date>
            <delta_ts>2011-06-17 12:20:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62889-20110617141628.patch</filename>
            <type>text/plain</type>
            <size>10778</size>
            <attacher name="Cary Clark">caryclark</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5MTQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDYtMTcgIENhcnkgQ2xh
cmsgIDxjYXJ5Y2xhcmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgRm9udCBpbnRlcmZhY2UgdG8gc3VwcG9ydCBTa2lhIG9u
IE1hYyBDaHJvbWUgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjI4ODkKKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgY29tYmluYXRpb24g
KHVzaW5nIFNraWEgYXMgdGhlCisgICAgICAgIFdlYkNvcmUgcmVuZGVyZXIgb24gQ2hyb21lIGZv
ciBNYWMpIGlzIG5vdCB5ZXQKKyAgICAgICAgZW5hYmxlZCwgc28gYWRkaW5nIHRoaXMgZmlsZSBo
YXMgbm8gZnVuY3Rpb25hbAorICAgICAgICBjaGFuZ2UuIFRoZSBjb3JyZXNwb25kaW5nIGNoYW5n
ZXMgdG8gdGhlIGd5cCBmaWxlcworICAgICAgICBleGNsdWRlIEZvbnRTa2lhIGZvciBhbGwgY3Vy
cmVudCBidWlsZHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAg
ICAgRXhjbHVkZSBGb250U2tpYSBmb3IgYWxsIG5vbi1tYWMgYnVpbGRzLiBBbiBleGlzdGluZwor
ICAgICAgICBydWxlIGV4Y2x1ZGVzICpTa2lhIGZvciBtYWMgYnVpbGRzLgorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICBBZGQgRm9udFNraWEgdG8gdGhlIGxpc3Qgb2YgZmlsZXMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxl
eFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBo
c0luQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6aXNDYW52YXNNdWx0aUxheWVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0VGV4dFJlbmRlck1vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0dXBQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToK
KyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBzaW1pbGFyIHRvIHRoZWlyIGNvdW50ZXJwYXJ0
cyBpbgorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwLgor
ICAgICAgICBUaGUgZGlmZmVyZW5jZXMgYXJlOiAKKyAgICAgICAgVGhlIHNldHVwUGFpbnQgdXNl
cyBDVEZvbnQgaW5zdGVhZCBvZiBGcmVlVHlwZS4KKyAgICAgICAgVGhlIHdpZHRoL2hlaWdodCBm
b250IG1ldHJpY3MgaGF2ZSBkaWZmZXJlbnQgYWNjZXNzb3JzLgorICAgICAgICBIYXJmYnV6eiBp
cyBub3QgbmVlZGVkIGluIHRoZSBNYWMgcG9ydC4gCisKIDIwMTEtMDYtMTcgIEFubmllIFN1bGxp
dmFuICA8c3VsbGl2YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1
a2UgTml3YS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDg5MTM1KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00NDE4LDYgKzQ0MTgsNyBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRSZWN0U2tpYS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zv
bnRTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBh
Z2VUcmVlTm9kZVNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0dyYWRpZW50U2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gODkxMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTUxMSw3ICsxNTExLDEzIEBACiAg
ICAgICAgICAgXSwKICAgICAgICAgfV0sCiAgICAgICAgIFsnT1MhPSJtYWMiJywgewotICAgICAg
ICAgICdzb3VyY2VzLyc6IFtbJ2V4Y2x1ZGUnLCAnTWFjXFwuKGNwcHxtbT8pJCddXQorICAgICAg
ICAgICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgIFsnZXhjbHVkZScsICdNYWNcXC4oY3BwfG1t
PykkJ10sCisKKyAgICAgICAgICAgICMgTGludXggdXNlcyBGb250TGludXg7IFdpbmRvd3MgdXNl
cyBGb250V2luLiBBZGRpdGlvbmFsbHksIEZvbnRTa2lhCisgICAgICAgICAgICAjIGlzIGV4Y2x1
ZGVkIGJ5IGEgcnVsZSBhYm92ZSBpZiBXZWJLaXQgdXNlcyBDRyBpbnN0ZWFkIG9mIFNraWEuCisg
ICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250U2tpYVxc
LmNwcCQnXSwKKyAgICAgICAgICBdLAogICAgICAgICB9XSwKICAgICAgICAgWydPUyE9IndpbiIn
LCB7CiAgICAgICAgICAgJ3NvdXJjZXMvJzogWwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9Gb250U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250U2tpYS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Rm9udC5oIgorCisjaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaW5jbHVk
ZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa0ZvbnRIb3N0LmgiCisjaW5jbHVkZSAiU2tQYWlu
dC5oIgorI2luY2x1ZGUgIlNrVGVtcGxhdGVzLmgiCisjaW5jbHVkZSAiU2tUeXBlZmFjZS5oIgor
I2luY2x1ZGUgIlNrVHlwZWZhY2VfbWFjLmgiCisjaW5jbHVkZSAiU2tVdGlscy5oIgorCisjaW5j
bHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUv
VW5pY29kZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRm9udDo6Y2FuUmV0dXJu
RmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXNDYW52YXNNdWx0aUxheWVyZWQo
U2tDYW52YXMqIGNhbnZhcykKK3sKKyAgICBTa0NhbnZhczo6TGF5ZXJJdGVyIGxheWVySXRlcmF0
b3IoY2FudmFzLCBmYWxzZSk7CisgICAgbGF5ZXJJdGVyYXRvci5uZXh0KCk7CisgICAgcmV0dXJu
ICFsYXllckl0ZXJhdG9yLmRvbmUoKTsKK30KKworc3RhdGljIHZvaWQgYWRqdXN0VGV4dFJlbmRl
ck1vZGUoU2tQYWludCogcGFpbnQsIFBsYXRmb3JtQ29udGV4dFNraWEqIHNraWFDb250ZXh0KQor
eworICAgIC8vIE91ciBsYXllcnMgb25seSBoYXZlIGEgc2luZ2xlIGFscGhhIGNoYW5uZWwuIFRo
aXMgbWVhbnMgdGhhdCBzdWJwaXhlbAorICAgIC8vIHJlbmRlcmVkIHRleHQgY2Fubm90IGJlIGNv
bXBvc2l0aWVkIGNvcnJlY3RseSB3aGVuIHRoZSBsYXllciBpcworICAgIC8vIGNvbGxhcHNlZC4g
VGhlcmVmb3JlLCBzdWJwaXhlbCB0ZXh0IGlzIGRpc2FibGVkIHdoZW4gd2UgYXJlIGRyYXdpbmcK
KyAgICAvLyBvbnRvIGEgbGF5ZXIgb3Igd2hlbiB0aGUgY29tcG9zaXRvciBpcyBiZWluZyB1c2Vk
LgorICAgIGlmIChpc0NhbnZhc011bHRpTGF5ZXJlZChza2lhQ29udGV4dC0+Y2FudmFzKCkpIHx8
IHNraWFDb250ZXh0LT5pc0RyYXdpbmdUb0ltYWdlQnVmZmVyKCkpCisgICAgICAgIHBhaW50LT5z
ZXRMQ0RSZW5kZXJUZXh0KGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBQYWludChTa1Bh
aW50KiBwYWludCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBGb250KiBm
b250KQoreworICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKTsKKyAgICBjb25zdCBmbG9hdCB0cyA9IHBsYXRmb3JtRGF0YS5t
X3NpemUgPj0gMCA/IHBsYXRmb3JtRGF0YS5tX3NpemUgOiAxMjsKKworICAgIHBhaW50LT5zZXRB
bnRpQWxpYXModHJ1ZSk7CisgICAgcGFpbnQtPnNldEVtYmVkZGVkQml0bWFwVGV4dChmYWxzZSk7
CisgICAgcGFpbnQtPnNldFRleHRTaXplKFNrRmxvYXRUb1NjYWxhcih0cykpOworICAgIFNrVHlw
ZWZhY2UqIHR5cGVmYWNlID0gU2tDcmVhdGVUeXBlZmFjZUZyb21DVEZvbnQocGxhdGZvcm1EYXRh
LmN0Rm9udCgpKTsKKyAgICBwYWludC0+c2V0VHlwZWZhY2UodHlwZWZhY2UpOworICAgIHR5cGVm
YWNlLT51bnJlZigpOworICAgIHBhaW50LT5zZXRGYWtlQm9sZFRleHQocGxhdGZvcm1EYXRhLm1f
c3ludGhldGljQm9sZCk7CisgICAgcGFpbnQtPnNldFRleHRTa2V3WChwbGF0Zm9ybURhdGEubV9z
eW50aGV0aWNPYmxpcXVlID8gLVNLX1NjYWxhcjEgLyA0IDogMCk7CisgICAgcGFpbnQtPnNldEF1
dG9oaW50ZWQoZmFsc2UpOyAvLyBmcmVldHlwZSBzcGVjaWZpYworICAgIHBhaW50LT5zZXRMQ0RS
ZW5kZXJUZXh0KHRydWUpOyAvLyBmb250LT5mb250RGVzY3JpcHRpb24oKS5mb250U21vb3RoaW5n
KCkgPT0gU3VicGl4ZWxBbnRpYWxpYXNlZCk7Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0dseXBocyhH
cmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKKyAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsICBpbnQgZnJvbSwg
aW50IG51bUdseXBocywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkgY29uc3QgeworICAgIFNrQVNTRVJUKHNpemVvZihHbHlwaEJ1ZmZlckdseXBoKSA9PSBz
aXplb2YodWludDE2X3QpKTsgLy8gY29tcGlsZS10aW1lIGFzc2VydAorCisgICAgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOworICAgIFNr
U2NhbGFyIHggPSBTa0Zsb2F0VG9TY2FsYXIocG9pbnQueCgpKTsKKyAgICBTa1NjYWxhciB5ID0g
U2tGbG9hdFRvU2NhbGFyKHBvaW50LnkoKSk7CisKKyAgICAvLyBGSVhNRTogdGV4dCByZW5kZXJp
bmcgc3BlZWQ6CisgICAgLy8gQW5kcm9pZCBoYXMgY29kZSBpbiB0aGVpciBXZWJDb3JlIGZvcmsg
dG8gc3BlY2lhbCBjYXNlIHdoZW4gdGhlCisgICAgLy8gR2x5cGhCdWZmZXIgaGFzIG5vIGFkdmFu
Y2VzIG90aGVyIHRoYW4gdGhlIGRlZmF1bHRzLiBJbiB0aGF0IGNhc2UgdGhlCisgICAgLy8gdGV4
dCBkcmF3aW5nIGNhbiBwcm9jZWVkIGZhc3Rlci4gSG93ZXZlciwgaXQncyB1bmNsZWFyIHdoZW4g
dGhvc2UKKyAgICAvLyBwYXRjaGVzIG1heSBiZSB1cHN0cmVhbWVkIHRvIFdlYktpdCBzbyB3ZSBh
bHdheXMgdXNlIHRoZSBzbG93ZXIgcGF0aAorICAgIC8vIGhlcmUuCisgICAgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiBhZHYgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKTsKKyAgICBTa0F1
dG9TVE1hbGxvYzwzMiwgU2tQb2ludD4gc3RvcmFnZShudW1HbHlwaHMpLCBzdG9yYWdlMihudW1H
bHlwaHMpLCBzdG9yYWdlMyhudW1HbHlwaHMpOworICAgIFNrUG9pbnQqIHBvcyA9IHN0b3JhZ2Uu
Z2V0KCk7CisgICAgU2tQb2ludCogdlBvc0JlZ2luID0gc3RvcmFnZTIuZ2V0KCk7CisgICAgU2tQ
b2ludCogdlBvc0VuZCA9IHN0b3JhZ2UzLmdldCgpOworCisgICAgYm9vbCBpc1ZlcnRpY2FsID0g
Zm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbDsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bUdseXBoczsgaSsrKSB7CisgICAgICAgIFNrU2NhbGFyIG15V2lk
dGggPSBTa0Zsb2F0VG9TY2FsYXIoYWR2W2ldLndpZHRoKTsKKyAgICAgICAgcG9zW2ldLnNldCh4
LCB5KTsKKyAgICAgICAgaWYgKGlzVmVydGljYWwpIHsKKyAgICAgICAgICAgIHZQb3NCZWdpbltp
XS5zZXQoeCArIG15V2lkdGgsIHkpOworICAgICAgICAgICAgdlBvc0VuZFtpXS5zZXQoeCArIG15
V2lkdGgsIHkgLSBteVdpZHRoKTsKKyAgICAgICAgfQorICAgICAgICB4ICs9IG15V2lkdGg7Cisg
ICAgICAgIHkgKz0gU2tGbG9hdFRvU2NhbGFyKGFkdltpXS5oZWlnaHQpOworICAgIH0KKworICAg
IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOworCisgICAg
U2tDYW52YXMqIGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CisgICAg
VGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dE1vZGUgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmdl
dFRleHREcmF3aW5nTW9kZSgpOworCisgICAgLy8gV2UgZHJhdyB0ZXh0IHVwIHRvIHR3byB0aW1l
cyAob25jZSBmb3IgZmlsbCwgb25jZSBmb3Igc3Ryb2tlKS4KKyAgICBpZiAodGV4dE1vZGUgJiBU
ZXh0TW9kZUZpbGwpIHsKKyAgICAgICAgU2tQYWludCBwYWludDsKKyAgICAgICAgZ2MtPnBsYXRm
b3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOworICAgICAgICBzZXR1
cFBhaW50KCZwYWludCwgZm9udCwgdGhpcyk7CisgICAgICAgIGFkanVzdFRleHRSZW5kZXJNb2Rl
KCZwYWludCwgZ2MtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICAgICAgcGFpbnQuc2V0VGV4dEVu
Y29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisgICAgICAgIHBhaW50LnNl
dENvbG9yKGdjLT5maWxsQ29sb3IoKS5yZ2IoKSk7CisKKyAgICAgICAgaWYgKGlzVmVydGljYWwp
IHsKKyAgICAgICAgICAgIFNrUGF0aCBwYXRoOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgICAgIHBhdGgucmVzZXQoKTsKKyAg
ICAgICAgICAgICAgICBwYXRoLm1vdmVUbyh2UG9zQmVnaW5baV0pOworICAgICAgICAgICAgICAg
IHBhdGgubGluZVRvKHZQb3NFbmRbaV0pOworICAgICAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Rl
eHRPblBhdGgoZ2x5cGhzICsgaSwgMiwgcGF0aCwgMCwgcGFpbnQpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBu
dW1HbHlwaHMgPDwgMSwgcG9zLCBwYWludCk7CisgICAgfQorCisgICAgaWYgKCh0ZXh0TW9kZSAm
IFRleHRNb2RlU3Ryb2tlKQorICAgICAgICAmJiBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmdldFN0
cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UKKyAgICAgICAgJiYgZ2MtPnBsYXRmb3JtQ29udGV4dCgp
LT5nZXRTdHJva2VUaGlja25lc3MoKSA+IDApIHsKKworICAgICAgICBTa1BhaW50IHBhaW50Owor
ICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFp
bnQsIDAsIDApOworICAgICAgICBzZXR1cFBhaW50KCZwYWludCwgZm9udCwgdGhpcyk7CisgICAg
ICAgIGFkanVzdFRleHRSZW5kZXJNb2RlKCZwYWludCwgZ2MtPnBsYXRmb3JtQ29udGV4dCgpKTsK
KyAgICAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNv
ZGluZyk7CisgICAgICAgIHBhaW50LnNldENvbG9yKGdjLT5zdHJva2VDb2xvcigpLnJnYigpKTsK
KworICAgICAgICBpZiAodGV4dE1vZGUgJiBUZXh0TW9kZUZpbGwpIHsKKyAgICAgICAgICAgIC8v
IElmIHdlIGFsc28gZmlsbGVkLCB3ZSBkb24ndCB3YW50IHRvIGRyYXcgc2hhZG93cyB0d2ljZS4K
KyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGluIEZvbnRDaHJvbWl1bVdpbi5jcHA6OnBhaW50
U2tpYVRleHQoKSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICAgICAgU2tTYWZlVW5yZWYocGFp
bnQuc2V0TG9vcGVyKDApKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7
CisgICAgICAgICAgICBTa1BhdGggcGF0aDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbnVtR2x5cGhzOyArK2kpIHsKKyAgICAgICAgICAgICAgICBwYXRoLnJlc2V0KCk7CisgICAg
ICAgICAgICAgICAgcGF0aC5tb3ZlVG8odlBvc0JlZ2luW2ldKTsKKyAgICAgICAgICAgICAgICBw
YXRoLmxpbmVUbyh2UG9zRW5kW2ldKTsKKyAgICAgICAgICAgICAgICBjYW52YXMtPmRyYXdUZXh0
T25QYXRoKGdseXBocyArIGksIDIsIHBhdGgsIDAsIHBhaW50KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0KGdseXBocywgbnVt
R2x5cGhzIDw8IDEsIHBvcywgcGFpbnQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97634</attachid>
            <date>2011-06-17 12:20:07 -0700</date>
            <delta_ts>2011-06-17 12:25:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62889-20110617152005.patch</filename>
            <type>text/plain</type>
            <size>10764</size>
            <attacher name="Cary Clark">caryclark</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5MTQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDYtMTcgIENhcnkgQ2xh
cmsgIDxjYXJ5Y2xhcmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgRm9udCBpbnRlcmZhY2UgdG8gc3VwcG9ydCBTa2lhIG9u
IE1hYyBDaHJvbWUgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjI4ODkKKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgY29tYmluYXRpb24g
KHVzaW5nIFNraWEgYXMgdGhlCisgICAgICAgIFdlYkNvcmUgcmVuZGVyZXIgb24gQ2hyb21lIGZv
ciBNYWMpIGlzIG5vdCB5ZXQKKyAgICAgICAgZW5hYmxlZCwgc28gYWRkaW5nIHRoaXMgZmlsZSBo
YXMgbm8gZnVuY3Rpb25hbAorICAgICAgICBjaGFuZ2UuIFRoZSBjb3JyZXNwb25kaW5nIGNoYW5n
ZXMgdG8gdGhlIGd5cCBmaWxlcworICAgICAgICBleGNsdWRlIEZvbnRTa2lhIGZvciBhbGwgY3Vy
cmVudCBidWlsZHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAg
ICAgRXhjbHVkZSBGb250U2tpYSBmb3IgYWxsIG5vbi1tYWMgYnVpbGRzLiBBbiBleGlzdGluZwor
ICAgICAgICBydWxlIGV4Y2x1ZGVzICpTa2lhIGZvciBtYWMgYnVpbGRzLgorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICBBZGQgRm9udFNraWEgdG8gdGhlIGxpc3Qgb2YgZmlsZXMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxl
eFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBo
c0luQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6aXNDYW52YXNNdWx0aUxheWVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0VGV4dFJlbmRlck1vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0dXBQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToK
KyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBzaW1pbGFyIHRvIHRoZWlyIGNvdW50ZXJwYXJ0
cyBpbgorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwLgor
ICAgICAgICBUaGUgZGlmZmVyZW5jZXMgYXJlOiAKKyAgICAgICAgVGhlIHNldHVwUGFpbnQgdXNl
cyBDVEZvbnQgaW5zdGVhZCBvZiBGcmVlVHlwZS4KKyAgICAgICAgVGhlIHdpZHRoL2hlaWdodCBm
b250IG1ldHJpY3MgaGF2ZSBkaWZmZXJlbnQgYWNjZXNzb3JzLgorICAgICAgICBIYXJmYnV6eiBp
cyBub3QgbmVlZGVkIGluIHRoZSBNYWMgcG9ydC4gCisKIDIwMTEtMDYtMTcgIEFubmllIFN1bGxp
dmFuICA8c3VsbGl2YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1
a2UgTml3YS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDg5MTM1KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00NDE4LDYgKzQ0MTgsNyBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRSZWN0U2tpYS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zv
bnRTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBh
Z2VUcmVlTm9kZVNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0dyYWRpZW50U2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gODkxMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTQzMCw2ICsxNDMwLDEwIEBACiAg
ICAgICAgICAgICAjIEZJWE1FOiBXZSB3aWxsIGV2ZW50dWFsbHkgY29tcGlsZSB0aGlzIHRvbywg
YnV0IGZvciBub3cgaXQncwogICAgICAgICAgICAgIyBvbmx5IHVzZWQgb24gbWFjLgogICAgICAg
ICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGFcXC5j
cHAkJ10KKworICAgICAgICAgICAgIyBMaW51eCB1c2VzIEZvbnRMaW51eDsgV2luZG93cyB1c2Vz
IEZvbnRXaW4uIEFkZGl0aW9uYWxseSwgRm9udFNraWEKKyAgICAgICAgICAgICMgaXMgZXhjbHVk
ZWQgYnkgYSBydWxlIGFib3ZlIGlmIFdlYktpdCB1c2VzIENHIGluc3RlYWQgb2YgU2tpYS4KKyAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhXFwu
Y3BwJCddLAogICAgICAgICAgIF0sCiAgICAgICAgIH1dLAogICAgICAgICBbJ3Rvb2xraXRfdXNl
c19ndGsgPT0gMCcsIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvRm9udFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvRm9udFNraWEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250U2tpYS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2lu
Y2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lh
LmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2luY2x1ZGUgIlNrQ2FudmFzLmgi
CisjaW5jbHVkZSAiU2tGb250SG9zdC5oIgorI2luY2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNsdWRl
ICJTa1RlbXBsYXRlcy5oIgorI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKKyNpbmNsdWRlICJTa1R5
cGVmYWNlX21hYy5oIgorI2luY2x1ZGUgIlNrVXRpbHMuaCIKKworI2luY2x1ZGUgInNraWEvZXh0
L3BsYXRmb3JtX2NhbnZhcy5oIgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNG
b3JDb21wbGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZvbnQ6OmNh
bkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3N0YXRpYyBib29sIGlzQ2FudmFzTXVsdGlMYXllcmVkKFNrQ2FudmFzKiBjYW52
YXMpCit7CisgICAgU2tDYW52YXM6OkxheWVySXRlciBsYXllckl0ZXJhdG9yKGNhbnZhcywgZmFs
c2UpOworICAgIGxheWVySXRlcmF0b3IubmV4dCgpOworICAgIHJldHVybiAhbGF5ZXJJdGVyYXRv
ci5kb25lKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkanVzdFRleHRSZW5kZXJNb2RlKFNrUGFpbnQq
IHBhaW50LCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBza2lhQ29udGV4dCkKK3sKKyAgICAvLyBPdXIg
bGF5ZXJzIG9ubHkgaGF2ZSBhIHNpbmdsZSBhbHBoYSBjaGFubmVsLiBUaGlzIG1lYW5zIHRoYXQg
c3VicGl4ZWwKKyAgICAvLyByZW5kZXJlZCB0ZXh0IGNhbm5vdCBiZSBjb21wb3NpdGllZCBjb3Jy
ZWN0bHkgd2hlbiB0aGUgbGF5ZXIgaXMKKyAgICAvLyBjb2xsYXBzZWQuIFRoZXJlZm9yZSwgc3Vi
cGl4ZWwgdGV4dCBpcyBkaXNhYmxlZCB3aGVuIHdlIGFyZSBkcmF3aW5nCisgICAgLy8gb250byBh
IGxheWVyIG9yIHdoZW4gdGhlIGNvbXBvc2l0b3IgaXMgYmVpbmcgdXNlZC4KKyAgICBpZiAoaXND
YW52YXNNdWx0aUxheWVyZWQoc2tpYUNvbnRleHQtPmNhbnZhcygpKSB8fCBza2lhQ29udGV4dC0+
aXNEcmF3aW5nVG9JbWFnZUJ1ZmZlcigpKQorICAgICAgICBwYWludC0+c2V0TENEUmVuZGVyVGV4
dChmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwUGFpbnQoU2tQYWludCogcGFpbnQsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgRm9udCogZm9udCkKK3sKKyAgICBj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250RGF0YS0+cGxhdGZvcm1E
YXRhKCk7CisgICAgY29uc3QgZmxvYXQgdHMgPSBwbGF0Zm9ybURhdGEubV9zaXplID49IDAgPyBw
bGF0Zm9ybURhdGEubV9zaXplIDogMTI7CisKKyAgICBwYWludC0+c2V0QW50aUFsaWFzKHRydWUp
OworICAgIHBhaW50LT5zZXRFbWJlZGRlZEJpdG1hcFRleHQoZmFsc2UpOworICAgIHBhaW50LT5z
ZXRUZXh0U2l6ZShTa0Zsb2F0VG9TY2FsYXIodHMpKTsKKyAgICBTa1R5cGVmYWNlKiB0eXBlZmFj
ZSA9IFNrQ3JlYXRlVHlwZWZhY2VGcm9tQ1RGb250KHBsYXRmb3JtRGF0YS5jdEZvbnQoKSk7Cisg
ICAgcGFpbnQtPnNldFR5cGVmYWNlKHR5cGVmYWNlKTsKKyAgICB0eXBlZmFjZS0+dW5yZWYoKTsK
KyAgICBwYWludC0+c2V0RmFrZUJvbGRUZXh0KHBsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQp
OworICAgIHBhaW50LT5zZXRUZXh0U2tld1gocGxhdGZvcm1EYXRhLm1fc3ludGhldGljT2JsaXF1
ZSA/IC1TS19TY2FsYXIxIC8gNCA6IDApOworICAgIHBhaW50LT5zZXRBdXRvaGludGVkKGZhbHNl
KTsgLy8gZnJlZXR5cGUgc3BlY2lmaWMKKyAgICBwYWludC0+c2V0TENEUmVuZGVyVGV4dCh0cnVl
KTsgLy8gZm9udC0+Zm9udERlc2NyaXB0aW9uKCkuZm9udFNtb290aGluZygpID09IFN1YnBpeGVs
QW50aWFsaWFzZWQpOworfQorCit2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBnYywgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCAgaW50IGZyb20sIGludCBudW1HbHlwaHMs
CisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsK
KyAgICBTa0FTU0VSVChzaXplb2YoR2x5cGhCdWZmZXJHbHlwaCkgPT0gc2l6ZW9mKHVpbnQxNl90
KSk7IC8vIGNvbXBpbGUtdGltZSBhc3NlcnQKKworICAgIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocyA9IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKTsKKyAgICBTa1NjYWxhciB4ID0gU2tG
bG9hdFRvU2NhbGFyKHBvaW50LngoKSk7CisgICAgU2tTY2FsYXIgeSA9IFNrRmxvYXRUb1NjYWxh
cihwb2ludC55KCkpOworCisgICAgLy8gRklYTUU6IHRleHQgcmVuZGVyaW5nIHNwZWVkOgorICAg
IC8vIEFuZHJvaWQgaGFzIGNvZGUgaW4gdGhlaXIgV2ViQ29yZSBmb3JrIHRvIHNwZWNpYWwgY2Fz
ZSB3aGVuIHRoZQorICAgIC8vIEdseXBoQnVmZmVyIGhhcyBubyBhZHZhbmNlcyBvdGhlciB0aGFu
IHRoZSBkZWZhdWx0cy4gSW4gdGhhdCBjYXNlIHRoZQorICAgIC8vIHRleHQgZHJhd2luZyBjYW4g
cHJvY2VlZCBmYXN0ZXIuIEhvd2V2ZXIsIGl0J3MgdW5jbGVhciB3aGVuIHRob3NlCisgICAgLy8g
cGF0Y2hlcyBtYXkgYmUgdXBzdHJlYW1lZCB0byBXZWJLaXQgc28gd2UgYWx3YXlzIHVzZSB0aGUg
c2xvd2VyIHBhdGgKKyAgICAvLyBoZXJlLgorICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2ID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSk7CisgICAgU2tBdXRvU1RNYWxsb2M8MzIs
IFNrUG9pbnQ+IHN0b3JhZ2UobnVtR2x5cGhzKSwgc3RvcmFnZTIobnVtR2x5cGhzKSwgc3RvcmFn
ZTMobnVtR2x5cGhzKTsKKyAgICBTa1BvaW50KiBwb3MgPSBzdG9yYWdlLmdldCgpOworICAgIFNr
UG9pbnQqIHZQb3NCZWdpbiA9IHN0b3JhZ2UyLmdldCgpOworICAgIFNrUG9pbnQqIHZQb3NFbmQg
PSBzdG9yYWdlMy5nZXQoKTsKKworICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGZvbnQtPnBsYXRmb3Jt
RGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWw7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1HbHlwaHM7IGkrKykgeworICAgICAgICBTa1NjYWxhciBteVdpZHRoID0gU2tGbG9hdFRv
U2NhbGFyKGFkdltpXS53aWR0aCk7CisgICAgICAgIHBvc1tpXS5zZXQoeCwgeSk7CisgICAgICAg
IGlmIChpc1ZlcnRpY2FsKSB7CisgICAgICAgICAgICB2UG9zQmVnaW5baV0uc2V0KHggKyBteVdp
ZHRoLCB5KTsKKyAgICAgICAgICAgIHZQb3NFbmRbaV0uc2V0KHggKyBteVdpZHRoLCB5IC0gbXlX
aWR0aCk7CisgICAgICAgIH0KKyAgICAgICAgeCArPSBteVdpZHRoOworICAgICAgICB5ICs9IFNr
RmxvYXRUb1NjYWxhcihhZHZbaV0uaGVpZ2h0KTsKKyAgICB9CisKKyAgICBnYy0+cGxhdGZvcm1D
b250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKworICAgIFNrQ2FudmFzKiBjYW52
YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOworICAgIFRleHREcmF3aW5nTW9k
ZUZsYWdzIHRleHRNb2RlID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRUZXh0RHJhd2luZ01v
ZGUoKTsKKworICAgIC8vIFdlIGRyYXcgdGV4dCB1cCB0byB0d28gdGltZXMgKG9uY2UgZm9yIGZp
bGwsIG9uY2UgZm9yIHN0cm9rZSkuCisgICAgaWYgKHRleHRNb2RlICYgVGV4dE1vZGVGaWxsKSB7
CisgICAgICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+
c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKKyAgICAgICAgc2V0dXBQYWludCgmcGFpbnQs
IGZvbnQsIHRoaXMpOworICAgICAgICBhZGp1c3RUZXh0UmVuZGVyTW9kZSgmcGFpbnQsIGdjLT5w
bGF0Zm9ybUNvbnRleHQoKSk7CisgICAgICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50
OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOworICAgICAgICBwYWludC5zZXRDb2xvcihnYy0+Zmls
bENvbG9yKCkucmdiKCkpOworCisgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7CisgICAgICAgICAg
ICBTa1BhdGggcGF0aDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5cGhz
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBwYXRoLnJlc2V0KCk7CisgICAgICAgICAgICAgICAg
cGF0aC5tb3ZlVG8odlBvc0JlZ2luW2ldKTsKKyAgICAgICAgICAgICAgICBwYXRoLmxpbmVUbyh2
UG9zRW5kW2ldKTsKKyAgICAgICAgICAgICAgICBjYW52YXMtPmRyYXdUZXh0T25QYXRoKGdseXBo
cyArIGksIDIsIHBhdGgsIDAsIHBhaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzIDw8IDEs
IHBvcywgcGFpbnQpOworICAgIH0KKworICAgIGlmICgodGV4dE1vZGUgJiBUZXh0TW9kZVN0cm9r
ZSkKKyAgICAgICAgJiYgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VTdHlsZSgpICE9
IE5vU3Ryb2tlCisgICAgICAgICYmIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0U3Ryb2tlVGhp
Y2tuZXNzKCkgPiAwKSB7CisKKyAgICAgICAgU2tQYWludCBwYWludDsKKyAgICAgICAgZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCAwKTsKKyAg
ICAgICAgc2V0dXBQYWludCgmcGFpbnQsIGZvbnQsIHRoaXMpOworICAgICAgICBhZGp1c3RUZXh0
UmVuZGVyTW9kZSgmcGFpbnQsIGdjLT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgICAgIHBhaW50
LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOworICAgICAg
ICBwYWludC5zZXRDb2xvcihnYy0+c3Ryb2tlQ29sb3IoKS5yZ2IoKSk7CisKKyAgICAgICAgaWYg
KHRleHRNb2RlICYgVGV4dE1vZGVGaWxsKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBhbHNvIGZp
bGxlZCwgd2UgZG9uJ3Qgd2FudCB0byBkcmF3IHNoYWRvd3MgdHdpY2UuCisgICAgICAgICAgICAv
LyBTZWUgY29tbWVudCBpbiBGb250Q2hyb21pdW1XaW4uY3BwOjpwYWludFNraWFUZXh0KCkgZm9y
IG1vcmUgZGV0YWlscy4KKyAgICAgICAgICAgIFNrU2FmZVVucmVmKHBhaW50LnNldExvb3Blcigw
KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNWZXJ0aWNhbCkgeworICAgICAgICAgICAg
U2tQYXRoIHBhdGg7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsg
KytpKSB7CisgICAgICAgICAgICAgICAgcGF0aC5yZXNldCgpOworICAgICAgICAgICAgICAgIHBh
dGgubW92ZVRvKHZQb3NCZWdpbltpXSk7CisgICAgICAgICAgICAgICAgcGF0aC5saW5lVG8odlBv
c0VuZFtpXSk7CisgICAgICAgICAgICAgICAgY2FudmFzLT5kcmF3VGV4dE9uUGF0aChnbHlwaHMg
KyBpLCAyLCBwYXRoLCAwLCBwYWludCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChnbHlwaHMsIG51bUdseXBocyA8PCAxLCBw
b3MsIHBhaW50KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97636</attachid>
            <date>2011-06-17 12:26:05 -0700</date>
            <delta_ts>2011-06-20 08:10:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62889-20110617152603.patch</filename>
            <type>text/plain</type>
            <size>10860</size>
            <attacher name="Cary Clark">caryclark</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5MTQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDYtMTcgIENhcnkgQ2xh
cmsgIDxjYXJ5Y2xhcmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgRm9udCBpbnRlcmZhY2UgdG8gc3VwcG9ydCBTa2lhIG9u
IE1hYyBDaHJvbWUgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjI4ODkKKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgY29tYmluYXRpb24g
KHVzaW5nIFNraWEgYXMgdGhlCisgICAgICAgIFdlYkNvcmUgcmVuZGVyZXIgb24gQ2hyb21lIGZv
ciBNYWMpIGlzIG5vdCB5ZXQKKyAgICAgICAgZW5hYmxlZCwgc28gYWRkaW5nIHRoaXMgZmlsZSBo
YXMgbm8gZnVuY3Rpb25hbAorICAgICAgICBjaGFuZ2UuIFRoZSBjb3JyZXNwb25kaW5nIGNoYW5n
ZXMgdG8gdGhlIGd5cCBmaWxlcworICAgICAgICBleGNsdWRlIEZvbnRTa2lhIGZvciBhbGwgY3Vy
cmVudCBidWlsZHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAg
ICAgRXhjbHVkZSBGb250U2tpYSBmb3IgYWxsIG5vbi1tYWMgYnVpbGRzLiBBbiBleGlzdGluZwor
ICAgICAgICBydWxlIGV4Y2x1ZGVzICpTa2lhIGZvciBtYWMgYnVpbGRzLgorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICBBZGQgRm9udFNraWEgdG8gdGhlIGxpc3Qgb2YgZmlsZXMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxl
eFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBo
c0luQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6aXNDYW52YXNNdWx0aUxheWVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0VGV4dFJlbmRlck1vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0dXBQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToK
KyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBzaW1pbGFyIHRvIHRoZWlyIGNvdW50ZXJwYXJ0
cyBpbgorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwLgor
ICAgICAgICBUaGUgZGlmZmVyZW5jZXMgYXJlOiAKKyAgICAgICAgVGhlIHNldHVwUGFpbnQgdXNl
cyBDVEZvbnQgaW5zdGVhZCBvZiBGcmVlVHlwZS4KKyAgICAgICAgVGhlIHdpZHRoL2hlaWdodCBm
b250IG1ldHJpY3MgaGF2ZSBkaWZmZXJlbnQgYWNjZXNzb3JzLgorICAgICAgICBIYXJmYnV6eiBp
cyBub3QgbmVlZGVkIGluIHRoZSBNYWMgcG9ydC4gCisKIDIwMTEtMDYtMTcgIEFubmllIFN1bGxp
dmFuICA8c3VsbGl2YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1
a2UgTml3YS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDg5MTM1KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00NDE4LDYgKzQ0MTgsNyBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRSZWN0U2tpYS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zv
bnRTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBh
Z2VUcmVlTm9kZVNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0dyYWRpZW50U2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gODkxMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTQyOSw3ICsxNDI5LDExIEBACiAg
ICAgICAgICAgJ3NvdXJjZXMvJzogWwogICAgICAgICAgICAgIyBGSVhNRTogV2Ugd2lsbCBldmVu
dHVhbGx5IGNvbXBpbGUgdGhpcyB0b28sIGJ1dCBmb3Igbm93IGl0J3MKICAgICAgICAgICAgICMg
b25seSB1c2VkIG9uIG1hYy4KLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhXFwuY3BwJCddCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAn
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YVxcLmNwcCQnXSwKKworICAgICAgICAg
ICAgIyBMaW51eCB1c2VzIEZvbnRMaW51eDsgV2luZG93cyB1c2VzIEZvbnRXaW4uIEFkZGl0aW9u
YWxseSwgRm9udFNraWEKKyAgICAgICAgICAgICMgaXMgZXhjbHVkZWQgYnkgYSBydWxlIGFib3Zl
IGlmIFdlYktpdCB1c2VzIENHIGluc3RlYWQgb2YgU2tpYS4KKyAgICAgICAgICAgIFsnZXhjbHVk
ZScsICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhXFwuY3BwJCddLAogICAgICAgICAg
IF0sCiAgICAgICAgIH1dLAogICAgICAgICBbJ3Rvb2xraXRfdXNlc19ndGsgPT0gMCcsIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNraWEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNr
aWEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9Gb250U2tpYS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkNvbXBsZXhUZXh0
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiU2lt
cGxlRm9udERhdGEuaCIKKworI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiU2tGb250
SG9zdC5oIgorI2luY2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNsdWRlICJTa1RlbXBsYXRlcy5oIgor
I2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKKyNpbmNsdWRlICJTa1R5cGVmYWNlX21hYy5oIgorI2lu
Y2x1ZGUgIlNrVXRpbHMuaCIKKworI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5o
IgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9n
cmFwaHNJbkNvbXBsZXhUZXh0KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBi
b29sIGlzQ2FudmFzTXVsdGlMYXllcmVkKFNrQ2FudmFzKiBjYW52YXMpCit7CisgICAgU2tDYW52
YXM6OkxheWVySXRlciBsYXllckl0ZXJhdG9yKGNhbnZhcywgZmFsc2UpOworICAgIGxheWVySXRl
cmF0b3IubmV4dCgpOworICAgIHJldHVybiAhbGF5ZXJJdGVyYXRvci5kb25lKCk7Cit9CisKK3N0
YXRpYyB2b2lkIGFkanVzdFRleHRSZW5kZXJNb2RlKFNrUGFpbnQqIHBhaW50LCBQbGF0Zm9ybUNv
bnRleHRTa2lhKiBza2lhQ29udGV4dCkKK3sKKyAgICAvLyBPdXIgbGF5ZXJzIG9ubHkgaGF2ZSBh
IHNpbmdsZSBhbHBoYSBjaGFubmVsLiBUaGlzIG1lYW5zIHRoYXQgc3VicGl4ZWwKKyAgICAvLyBy
ZW5kZXJlZCB0ZXh0IGNhbm5vdCBiZSBjb21wb3NpdGllZCBjb3JyZWN0bHkgd2hlbiB0aGUgbGF5
ZXIgaXMKKyAgICAvLyBjb2xsYXBzZWQuIFRoZXJlZm9yZSwgc3VicGl4ZWwgdGV4dCBpcyBkaXNh
YmxlZCB3aGVuIHdlIGFyZSBkcmF3aW5nCisgICAgLy8gb250byBhIGxheWVyIG9yIHdoZW4gdGhl
IGNvbXBvc2l0b3IgaXMgYmVpbmcgdXNlZC4KKyAgICBpZiAoaXNDYW52YXNNdWx0aUxheWVyZWQo
c2tpYUNvbnRleHQtPmNhbnZhcygpKSB8fCBza2lhQ29udGV4dC0+aXNEcmF3aW5nVG9JbWFnZUJ1
ZmZlcigpKQorICAgICAgICBwYWludC0+c2V0TENEUmVuZGVyVGV4dChmYWxzZSk7Cit9CisKK3N0
YXRpYyB2b2lkIHNldHVwUGFpbnQoU2tQYWludCogcGFpbnQsIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSwgY29uc3QgRm9udCogZm9udCkKK3sKKyAgICBjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBwbGF0Zm9ybURhdGEgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCk7CisgICAgY29uc3Qg
ZmxvYXQgdHMgPSBwbGF0Zm9ybURhdGEubV9zaXplID49IDAgPyBwbGF0Zm9ybURhdGEubV9zaXpl
IDogMTI7CisKKyAgICBwYWludC0+c2V0QW50aUFsaWFzKHRydWUpOworICAgIHBhaW50LT5zZXRF
bWJlZGRlZEJpdG1hcFRleHQoZmFsc2UpOworICAgIHBhaW50LT5zZXRUZXh0U2l6ZShTa0Zsb2F0
VG9TY2FsYXIodHMpKTsKKyAgICBTa1R5cGVmYWNlKiB0eXBlZmFjZSA9IFNrQ3JlYXRlVHlwZWZh
Y2VGcm9tQ1RGb250KHBsYXRmb3JtRGF0YS5jdEZvbnQoKSk7CisgICAgcGFpbnQtPnNldFR5cGVm
YWNlKHR5cGVmYWNlKTsKKyAgICB0eXBlZmFjZS0+dW5yZWYoKTsKKyAgICBwYWludC0+c2V0RmFr
ZUJvbGRUZXh0KHBsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQpOworICAgIHBhaW50LT5zZXRU
ZXh0U2tld1gocGxhdGZvcm1EYXRhLm1fc3ludGhldGljT2JsaXF1ZSA/IC1TS19TY2FsYXIxIC8g
NCA6IDApOworICAgIHBhaW50LT5zZXRBdXRvaGludGVkKGZhbHNlKTsgLy8gZnJlZXR5cGUgc3Bl
Y2lmaWMKKyAgICBwYWludC0+c2V0TENEUmVuZGVyVGV4dCh0cnVlKTsgLy8gZm9udC0+Zm9udERl
c2NyaXB0aW9uKCkuZm9udFNtb290aGluZygpID09IFN1YnBpeGVsQW50aWFsaWFzZWQpOworfQor
Cit2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCisgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsKKyAgICBTa0FTU0VSVChzaXpl
b2YoR2x5cGhCdWZmZXJHbHlwaCkgPT0gc2l6ZW9mKHVpbnQxNl90KSk7IC8vIGNvbXBpbGUtdGlt
ZSBhc3NlcnQKKworICAgIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IGdseXBoQnVm
ZmVyLmdseXBocyhmcm9tKTsKKyAgICBTa1NjYWxhciB4ID0gU2tGbG9hdFRvU2NhbGFyKHBvaW50
LngoKSk7CisgICAgU2tTY2FsYXIgeSA9IFNrRmxvYXRUb1NjYWxhcihwb2ludC55KCkpOworCisg
ICAgLy8gRklYTUU6IHRleHQgcmVuZGVyaW5nIHNwZWVkOgorICAgIC8vIEFuZHJvaWQgaGFzIGNv
ZGUgaW4gdGhlaXIgV2ViQ29yZSBmb3JrIHRvIHNwZWNpYWwgY2FzZSB3aGVuIHRoZQorICAgIC8v
IEdseXBoQnVmZmVyIGhhcyBubyBhZHZhbmNlcyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0cy4gSW4g
dGhhdCBjYXNlIHRoZQorICAgIC8vIHRleHQgZHJhd2luZyBjYW4gcHJvY2VlZCBmYXN0ZXIuIEhv
d2V2ZXIsIGl0J3MgdW5jbGVhciB3aGVuIHRob3NlCisgICAgLy8gcGF0Y2hlcyBtYXkgYmUgdXBz
dHJlYW1lZCB0byBXZWJLaXQgc28gd2UgYWx3YXlzIHVzZSB0aGUgc2xvd2VyIHBhdGgKKyAgICAv
LyBoZXJlLgorICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2ID0gZ2x5cGhCdWZmZXIu
YWR2YW5jZXMoZnJvbSk7CisgICAgU2tBdXRvU1RNYWxsb2M8MzIsIFNrUG9pbnQ+IHN0b3JhZ2Uo
bnVtR2x5cGhzKSwgc3RvcmFnZTIobnVtR2x5cGhzKSwgc3RvcmFnZTMobnVtR2x5cGhzKTsKKyAg
ICBTa1BvaW50KiBwb3MgPSBzdG9yYWdlLmdldCgpOworICAgIFNrUG9pbnQqIHZQb3NCZWdpbiA9
IHN0b3JhZ2UyLmdldCgpOworICAgIFNrUG9pbnQqIHZQb3NFbmQgPSBzdG9yYWdlMy5nZXQoKTsK
KworICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9u
KCkgPT0gVmVydGljYWw7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykg
eworICAgICAgICBTa1NjYWxhciBteVdpZHRoID0gU2tGbG9hdFRvU2NhbGFyKGFkdltpXS53aWR0
aCk7CisgICAgICAgIHBvc1tpXS5zZXQoeCwgeSk7CisgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7
CisgICAgICAgICAgICB2UG9zQmVnaW5baV0uc2V0KHggKyBteVdpZHRoLCB5KTsKKyAgICAgICAg
ICAgIHZQb3NFbmRbaV0uc2V0KHggKyBteVdpZHRoLCB5IC0gbXlXaWR0aCk7CisgICAgICAgIH0K
KyAgICAgICAgeCArPSBteVdpZHRoOworICAgICAgICB5ICs9IFNrRmxvYXRUb1NjYWxhcihhZHZb
aV0uaGVpZ2h0KTsKKyAgICB9CisKKyAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVG
b3JTb2Z0d2FyZURyYXcoKTsKKworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpOworICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRNb2RlID0g
Z2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRUZXh0RHJhd2luZ01vZGUoKTsKKworICAgIC8vIFdl
IGRyYXcgdGV4dCB1cCB0byB0d28gdGltZXMgKG9uY2UgZm9yIGZpbGwsIG9uY2UgZm9yIHN0cm9r
ZSkuCisgICAgaWYgKHRleHRNb2RlICYgVGV4dE1vZGVGaWxsKSB7CisgICAgICAgIFNrUGFpbnQg
cGFpbnQ7CisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxp
bmcoJnBhaW50KTsKKyAgICAgICAgc2V0dXBQYWludCgmcGFpbnQsIGZvbnQsIHRoaXMpOworICAg
ICAgICBhZGp1c3RUZXh0UmVuZGVyTW9kZSgmcGFpbnQsIGdjLT5wbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5j
b2RpbmcpOworICAgICAgICBwYWludC5zZXRDb2xvcihnYy0+ZmlsbENvbG9yKCkucmdiKCkpOwor
CisgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7CisgICAgICAgICAgICBTa1BhdGggcGF0aDsKKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBwYXRoLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgcGF0aC5tb3ZlVG8odlBvc0Jl
Z2luW2ldKTsKKyAgICAgICAgICAgICAgICBwYXRoLmxpbmVUbyh2UG9zRW5kW2ldKTsKKyAgICAg
ICAgICAgICAgICBjYW52YXMtPmRyYXdUZXh0T25QYXRoKGdseXBocyArIGksIDIsIHBhdGgsIDAs
IHBhaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjYW52
YXMtPmRyYXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzIDw8IDEsIHBvcywgcGFpbnQpOworICAg
IH0KKworICAgIGlmICgodGV4dE1vZGUgJiBUZXh0TW9kZVN0cm9rZSkKKyAgICAgICAgJiYgZ2Mt
PnBsYXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlCisgICAgICAg
ICYmIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0U3Ryb2tlVGhpY2tuZXNzKCkgPiAwKSB7CisK
KyAgICAgICAgU2tQYWludCBwYWludDsKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5z
ZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCAwKTsKKyAgICAgICAgc2V0dXBQYWludCgm
cGFpbnQsIGZvbnQsIHRoaXMpOworICAgICAgICBhZGp1c3RUZXh0UmVuZGVyTW9kZSgmcGFpbnQs
IGdjLT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhT
a1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOworICAgICAgICBwYWludC5zZXRDb2xvcihn
Yy0+c3Ryb2tlQ29sb3IoKS5yZ2IoKSk7CisKKyAgICAgICAgaWYgKHRleHRNb2RlICYgVGV4dE1v
ZGVGaWxsKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBhbHNvIGZpbGxlZCwgd2UgZG9uJ3Qgd2Fu
dCB0byBkcmF3IHNoYWRvd3MgdHdpY2UuCisgICAgICAgICAgICAvLyBTZWUgY29tbWVudCBpbiBG
b250Q2hyb21pdW1XaW4uY3BwOjpwYWludFNraWFUZXh0KCkgZm9yIG1vcmUgZGV0YWlscy4KKyAg
ICAgICAgICAgIFNrU2FmZVVucmVmKHBhaW50LnNldExvb3BlcigwKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXNWZXJ0aWNhbCkgeworICAgICAgICAgICAgU2tQYXRoIHBhdGg7CisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7CisgICAgICAgICAg
ICAgICAgcGF0aC5yZXNldCgpOworICAgICAgICAgICAgICAgIHBhdGgubW92ZVRvKHZQb3NCZWdp
bltpXSk7CisgICAgICAgICAgICAgICAgcGF0aC5saW5lVG8odlBvc0VuZFtpXSk7CisgICAgICAg
ICAgICAgICAgY2FudmFzLT5kcmF3VGV4dE9uUGF0aChnbHlwaHMgKyBpLCAyLCBwYXRoLCAwLCBw
YWludCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2FudmFz
LT5kcmF3UG9zVGV4dChnbHlwaHMsIG51bUdseXBocyA8PCAxLCBwb3MsIHBhaW50KTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97801</attachid>
            <date>2011-06-20 08:10:32 -0700</date>
            <delta_ts>2011-06-20 11:55:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62889-20110620111030.patch</filename>
            <type>text/plain</type>
            <size>11381</size>
            <attacher name="Cary Clark">caryclark</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5MTQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDYtMTcgIENhcnkgQ2xh
cmsgIDxjYXJ5Y2xhcmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgRm9udCBpbnRlcmZhY2UgdG8gc3VwcG9ydCBTa2lhIG9u
IE1hYyBDaHJvbWUgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjI4ODkKKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgY29tYmluYXRpb24g
KHVzaW5nIFNraWEgYXMgdGhlCisgICAgICAgIFdlYkNvcmUgcmVuZGVyZXIgb24gQ2hyb21lIGZv
ciBNYWMpIGlzIG5vdCB5ZXQKKyAgICAgICAgZW5hYmxlZCwgc28gYWRkaW5nIHRoaXMgZmlsZSBo
YXMgbm8gZnVuY3Rpb25hbAorICAgICAgICBjaGFuZ2UuIFRoZSBjb3JyZXNwb25kaW5nIGNoYW5n
ZXMgdG8gdGhlIGd5cCBmaWxlcworICAgICAgICBleGNsdWRlIEZvbnRTa2lhIGZvciBhbGwgY3Vy
cmVudCBidWlsZHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAg
ICAgRXhjbHVkZSBGb250U2tpYSBmb3IgYWxsIG5vbi1tYWMgYnVpbGRzLiBBbiBleGlzdGluZwor
ICAgICAgICBydWxlIGV4Y2x1ZGVzICpTa2lhIGZvciBtYWMgYnVpbGRzLgorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICBBZGQgRm9udFNraWEgdG8gdGhlIGxpc3Qgb2YgZmlsZXMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxl
eFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBo
c0luQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6aXNDYW52YXNNdWx0aUxheWVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0VGV4dFJlbmRlck1vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0dXBQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToK
KyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBzaW1pbGFyIHRvIHRoZWlyIGNvdW50ZXJwYXJ0
cyBpbgorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwLgor
ICAgICAgICBUaGUgZGlmZmVyZW5jZXMgYXJlOiAKKyAgICAgICAgVGhlIHNldHVwUGFpbnQgdXNl
cyBDVEZvbnQgaW5zdGVhZCBvZiBGcmVlVHlwZS4KKyAgICAgICAgVGhlIHdpZHRoL2hlaWdodCBm
b250IG1ldHJpY3MgaGF2ZSBkaWZmZXJlbnQgYWNjZXNzb3JzLgorICAgICAgICBIYXJmYnV6eiBp
cyBub3QgbmVlZGVkIGluIHRoZSBNYWMgcG9ydC4gCisKIDIwMTEtMDYtMTcgIEFubmllIFN1bGxp
dmFuICA8c3VsbGl2YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1
a2UgTml3YS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDg5MTM1KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00NDE4LDYgKzQ0MTgsNyBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRSZWN0U2tpYS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zv
bnRTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBh
Z2VUcmVlTm9kZVNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0dyYWRpZW50U2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gODkxMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTQyOSw3ICsxNDI5LDExIEBACiAg
ICAgICAgICAgJ3NvdXJjZXMvJzogWwogICAgICAgICAgICAgIyBGSVhNRTogV2Ugd2lsbCBldmVu
dHVhbGx5IGNvbXBpbGUgdGhpcyB0b28sIGJ1dCBmb3Igbm93IGl0J3MKICAgICAgICAgICAgICMg
b25seSB1c2VkIG9uIG1hYy4KLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhXFwuY3BwJCddCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAn
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YVxcLmNwcCQnXSwKKworICAgICAgICAg
ICAgIyBMaW51eCB1c2VzIEZvbnRMaW51eDsgV2luZG93cyB1c2VzIEZvbnRXaW4uIEFkZGl0aW9u
YWxseSwgRm9udFNraWEKKyAgICAgICAgICAgICMgaXMgZXhjbHVkZWQgYnkgYSBydWxlIGFib3Zl
IGlmIFdlYktpdCB1c2VzIENHIGluc3RlYWQgb2YgU2tpYS4KKyAgICAgICAgICAgIFsnZXhjbHVk
ZScsICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhXFwuY3BwJCddLAogICAgICAgICAg
IF0sCiAgICAgICAgIH1dLAogICAgICAgICBbJ3Rvb2xraXRfdXNlc19ndGsgPT0gMCcsIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNraWEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNr
aWEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9Gb250U2tpYS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkdseXBoQnVmZmVy
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRlICJTa0Nh
bnZhcy5oIgorI2luY2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCisj
aW5jbHVkZSAiU2tUeXBlZmFjZV9tYWMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBG
SVhNRTogRGV0ZXJtaW5lIGlmIHRoZSBNYWMgcG9ydCBvZiBDaHJvbWl1bSB1c2luZyBTa2lhIGNh
biByZXR1cm4gZmFsbGJhY2sKKy8vIGZvbnRzIGZvciBjb21wbGV4IHRleHQuIChUaGUgV2luZG93
cyBhbmQgTGludXggcG9ydHMgZm9yIENocm9taXVtIGRvIG5vdC4pCisvLyBUaGlzIGlzc3VlIGlz
IHRyYWNrZWQgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTg2
Citib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBGSVhNRTogRGV0ZXJtaW5lIGlmIHRoZSBNYWMgcG9y
dCBvZiBDaHJvbWl1bSB1c2luZyBTa2lhIGNhbiBleHBhbmQgYXJvdW5kCisvLyBpZGVvZ3JhcGhz
IGluIGNvbXBsZXggdGV4dC4gKFRoZSBXaW5kb3dzIGFuZCBMaW51eCBwb3J0cyBmb3IgQ2hyb21p
dW0gY2FuJ3QuKQorLy8gVGhpcyBpc3N1ZSBpcyB0cmFja2VkIGluIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjk4NworYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0
aWMgYm9vbCBpc0NhbnZhc011bHRpTGF5ZXJlZChTa0NhbnZhcyogY2FudmFzKQoreworICAgIFNr
Q2FudmFzOjpMYXllckl0ZXIgbGF5ZXJJdGVyYXRvcihjYW52YXMsIGZhbHNlKTsKKyAgICBsYXll
ckl0ZXJhdG9yLm5leHQoKTsKKyAgICByZXR1cm4gIWxheWVySXRlcmF0b3IuZG9uZSgpOworfQor
CitzdGF0aWMgdm9pZCBhZGp1c3RUZXh0UmVuZGVyTW9kZShTa1BhaW50KiBwYWludCwgUGxhdGZv
cm1Db250ZXh0U2tpYSogc2tpYUNvbnRleHQpCit7CisgICAgLy8gT3VyIGxheWVycyBvbmx5IGhh
dmUgYSBzaW5nbGUgYWxwaGEgY2hhbm5lbC4gVGhpcyBtZWFucyB0aGF0IHN1YnBpeGVsCisgICAg
Ly8gcmVuZGVyZWQgdGV4dCBjYW5ub3QgYmUgY29tcG9zaXRpZWQgY29ycmVjdGx5IHdoZW4gdGhl
IGxheWVyIGlzCisgICAgLy8gY29sbGFwc2VkLiBUaGVyZWZvcmUsIHN1YnBpeGVsIHRleHQgaXMg
ZGlzYWJsZWQgd2hlbiB3ZSBhcmUgZHJhd2luZworICAgIC8vIG9udG8gYSBsYXllciBvciB3aGVu
IHRoZSBjb21wb3NpdG9yIGlzIGJlaW5nIHVzZWQuCisgICAgaWYgKGlzQ2FudmFzTXVsdGlMYXll
cmVkKHNraWFDb250ZXh0LT5jYW52YXMoKSkgfHwgc2tpYUNvbnRleHQtPmlzRHJhd2luZ1RvSW1h
Z2VCdWZmZXIoKSkKKyAgICAgICAgcGFpbnQtPnNldExDRFJlbmRlclRleHQoZmFsc2UpOworfQor
CitzdGF0aWMgdm9pZCBzZXR1cFBhaW50KFNrUGFpbnQqIHBhaW50LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udERhdGEsIGNvbnN0IEZvbnQqIGZvbnQpCit7CisgICAgY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpOworICAgIGNv
bnN0IGZsb2F0IHRleHRTaXplID0gcGxhdGZvcm1EYXRhLm1fc2l6ZSA+PSAwID8gcGxhdGZvcm1E
YXRhLm1fc2l6ZSA6IDEyOworCisgICAgcGFpbnQtPnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICBw
YWludC0+c2V0RW1iZWRkZWRCaXRtYXBUZXh0KGZhbHNlKTsKKyAgICBwYWludC0+c2V0VGV4dFNp
emUoU2tGbG9hdFRvU2NhbGFyKHRleHRTaXplKSk7CisgICAgU2tUeXBlZmFjZSogdHlwZWZhY2Ug
PSBTa0NyZWF0ZVR5cGVmYWNlRnJvbUNURm9udChwbGF0Zm9ybURhdGEuY3RGb250KCkpOworICAg
IFNrQXV0b1VucmVmIGF1dG9VbnJlZih0eXBlZmFjZSk7CisgICAgcGFpbnQtPnNldFR5cGVmYWNl
KHR5cGVmYWNlKTsKKyAgICBwYWludC0+c2V0RmFrZUJvbGRUZXh0KHBsYXRmb3JtRGF0YS5tX3N5
bnRoZXRpY0JvbGQpOworICAgIHBhaW50LT5zZXRUZXh0U2tld1gocGxhdGZvcm1EYXRhLm1fc3lu
dGhldGljT2JsaXF1ZSA/IC1TS19TY2FsYXIxIC8gNCA6IDApOworICAgIHBhaW50LT5zZXRBdXRv
aGludGVkKGZhbHNlKTsgLy8gZnJlZXR5cGUgc3BlY2lmaWMKKyAgICBwYWludC0+c2V0TENEUmVu
ZGVyVGV4dCh0cnVlKTsgLy8gZm9udC0+Zm9udERlc2NyaXB0aW9uKCkuZm9udFNtb290aGluZygp
ID09IFN1YnBpeGVsQW50aWFsaWFzZWQpOworfQorCisvLyBUT0RPOiBUaGlzIG5lZWRzIHRvIGJl
IHNwbGl0IGludG8gaGVscGVyIGZ1bmN0aW9ucyB0byBiZXR0ZXIgc2NvcGUgdGhlCisvLyBpbnB1
dHMvb3V0cHV0cywgYW5kIHJlZHVjZSBkdXBsaWNhdGUgY29kZS4KKy8vIFRoaXMgaXNzdWUgaXMg
dHJhY2tlZCBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI5ODkK
K3ZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIsICBpbnQgZnJvbSwgaW50IG51bUdseXBocywKKyAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QgeworICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihHbHlwaEJ1ZmZlckdseXBoKSA9PSBzaXplb2YodWludDE2X3QpLCBHbHlwaEJ1ZmZl
ckdseXBoU2l6ZV9lcXVhbHNfdWludDE2X3QpOworCisgICAgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOworICAgIFNrU2NhbGFyIHggPSBT
a0Zsb2F0VG9TY2FsYXIocG9pbnQueCgpKTsKKyAgICBTa1NjYWxhciB5ID0gU2tGbG9hdFRvU2Nh
bGFyKHBvaW50LnkoKSk7CisKKyAgICAvLyBGSVhNRTogdGV4dCByZW5kZXJpbmcgc3BlZWQ6Cisg
ICAgLy8gQW5kcm9pZCBoYXMgY29kZSBpbiB0aGVpciBXZWJDb3JlIGZvcmsgdG8gc3BlY2lhbCBj
YXNlIHdoZW4gdGhlCisgICAgLy8gR2x5cGhCdWZmZXIgaGFzIG5vIGFkdmFuY2VzIG90aGVyIHRo
YW4gdGhlIGRlZmF1bHRzLiBJbiB0aGF0IGNhc2UgdGhlCisgICAgLy8gdGV4dCBkcmF3aW5nIGNh
biBwcm9jZWVkIGZhc3Rlci4gSG93ZXZlciwgaXQncyB1bmNsZWFyIHdoZW4gdGhvc2UKKyAgICAv
LyBwYXRjaGVzIG1heSBiZSB1cHN0cmVhbWVkIHRvIFdlYktpdCBzbyB3ZSBhbHdheXMgdXNlIHRo
ZSBzbG93ZXIgcGF0aAorICAgIC8vIGhlcmUuCisgICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHYgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKTsKKyAgICBTa0F1dG9TVE1hbGxvYzwz
MiwgU2tQb2ludD4gc3RvcmFnZShudW1HbHlwaHMpLCBzdG9yYWdlMihudW1HbHlwaHMpLCBzdG9y
YWdlMyhudW1HbHlwaHMpOworICAgIFNrUG9pbnQqIHBvcyA9IHN0b3JhZ2UuZ2V0KCk7CisgICAg
U2tQb2ludCogdlBvc0JlZ2luID0gc3RvcmFnZTIuZ2V0KCk7CisgICAgU2tQb2ludCogdlBvc0Vu
ZCA9IHN0b3JhZ2UzLmdldCgpOworCisgICAgYm9vbCBpc1ZlcnRpY2FsID0gZm9udC0+cGxhdGZv
cm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbDsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bUdseXBoczsgaSsrKSB7CisgICAgICAgIFNrU2NhbGFyIG15V2lkdGggPSBTa0Zsb2F0
VG9TY2FsYXIoYWR2W2ldLndpZHRoKTsKKyAgICAgICAgcG9zW2ldLnNldCh4LCB5KTsKKyAgICAg
ICAgaWYgKGlzVmVydGljYWwpIHsKKyAgICAgICAgICAgIHZQb3NCZWdpbltpXS5zZXQoeCArIG15
V2lkdGgsIHkpOworICAgICAgICAgICAgdlBvc0VuZFtpXS5zZXQoeCArIG15V2lkdGgsIHkgLSBt
eVdpZHRoKTsKKyAgICAgICAgfQorICAgICAgICB4ICs9IG15V2lkdGg7CisgICAgICAgIHkgKz0g
U2tGbG9hdFRvU2NhbGFyKGFkdltpXS5oZWlnaHQpOworICAgIH0KKworICAgIGdjLT5wbGF0Zm9y
bUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOworCisgICAgU2tDYW52YXMqIGNh
bnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CisgICAgVGV4dERyYXdpbmdN
b2RlRmxhZ3MgdGV4dE1vZGUgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmdldFRleHREcmF3aW5n
TW9kZSgpOworCisgICAgLy8gV2UgZHJhdyB0ZXh0IHVwIHRvIHR3byB0aW1lcyAob25jZSBmb3Ig
ZmlsbCwgb25jZSBmb3Igc3Ryb2tlKS4KKyAgICBpZiAodGV4dE1vZGUgJiBUZXh0TW9kZUZpbGwp
IHsKKyAgICAgICAgU2tQYWludCBwYWludDsKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgp
LT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOworICAgICAgICBzZXR1cFBhaW50KCZwYWlu
dCwgZm9udCwgdGhpcyk7CisgICAgICAgIGFkanVzdFRleHRSZW5kZXJNb2RlKCZwYWludCwgZ2Mt
PnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFp
bnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisgICAgICAgIHBhaW50LnNldENvbG9yKGdjLT5m
aWxsQ29sb3IoKS5yZ2IoKSk7CisKKyAgICAgICAgaWYgKGlzVmVydGljYWwpIHsKKyAgICAgICAg
ICAgIFNrUGF0aCBwYXRoOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlw
aHM7ICsraSkgeworICAgICAgICAgICAgICAgIHBhdGgucmVzZXQoKTsKKyAgICAgICAgICAgICAg
ICBwYXRoLm1vdmVUbyh2UG9zQmVnaW5baV0pOworICAgICAgICAgICAgICAgIHBhdGgubGluZVRv
KHZQb3NFbmRbaV0pOworICAgICAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1RleHRPblBhdGgoZ2x5
cGhzICsgaSwgc2l6ZW9mKHVpbnQxNl90KSwgcGF0aCwgMCwgcGFpbnQpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoZ2x5cGhz
LCBudW1HbHlwaHMgKiBzaXplb2YodWludDE2X3QpLCBwb3MsIHBhaW50KTsKKyAgICB9CisKKyAg
ICBpZiAoKHRleHRNb2RlICYgVGV4dE1vZGVTdHJva2UpCisgICAgICAgICYmIGdjLT5wbGF0Zm9y
bUNvbnRleHQoKS0+Z2V0U3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZQorICAgICAgICAmJiBnYy0+
cGxhdGZvcm1Db250ZXh0KCktPmdldFN0cm9rZVRoaWNrbmVzcygpID4gMCkgeworCisgICAgICAg
IFNrUGFpbnQgcGFpbnQ7CisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWlu
dEZvclN0cm9raW5nKCZwYWludCwgMCwgMCk7CisgICAgICAgIHNldHVwUGFpbnQoJnBhaW50LCBm
b250LCB0aGlzKTsKKyAgICAgICAgYWRqdXN0VGV4dFJlbmRlck1vZGUoJnBhaW50LCBnYy0+cGxh
dGZvcm1Db250ZXh0KCkpOworICAgICAgICBwYWludC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6
a0dseXBoSURfVGV4dEVuY29kaW5nKTsKKyAgICAgICAgcGFpbnQuc2V0Q29sb3IoZ2MtPnN0cm9r
ZUNvbG9yKCkucmdiKCkpOworCisgICAgICAgIGlmICh0ZXh0TW9kZSAmIFRleHRNb2RlRmlsbCkg
eworICAgICAgICAgICAgLy8gSWYgd2UgYWxzbyBmaWxsZWQsIHdlIGRvbid0IHdhbnQgdG8gZHJh
dyBzaGFkb3dzIHR3aWNlLgorICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gRm9udENocm9t
aXVtV2luLmNwcDo6cGFpbnRTa2lhVGV4dCgpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgICAg
ICBwYWludC5zZXRMb29wZXIoMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNWZXJ0aWNh
bCkgeworICAgICAgICAgICAgU2tQYXRoIHBhdGg7CisgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG51bUdseXBoczsgKytpKSB7CisgICAgICAgICAgICAgICAgcGF0aC5yZXNldCgpOwor
ICAgICAgICAgICAgICAgIHBhdGgubW92ZVRvKHZQb3NCZWdpbltpXSk7CisgICAgICAgICAgICAg
ICAgcGF0aC5saW5lVG8odlBvc0VuZFtpXSk7CisgICAgICAgICAgICAgICAgY2FudmFzLT5kcmF3
VGV4dE9uUGF0aChnbHlwaHMgKyBpLCBzaXplb2YodWludDE2X3QpLCBwYXRoLCAwLCBwYWludCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2FudmFzLT5kcmF3
UG9zVGV4dChnbHlwaHMsIG51bUdseXBocyAqIHNpemVvZih1aW50MTZfdCksIHBvcywgcGFpbnQp
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>