<?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>60637</bug_id>
          
          <creation_ts>2011-05-11 10:15:26 -0700</creation_ts>
          <short_desc>We should have a Content-Type parser</short_desc>
          <delta_ts>2011-05-11 19:41:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          
          <blocked>7168</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jay Civelli">jcivelli</reporter>
          <assigned_to name="Jay Civelli">jcivelli</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>402070</commentid>
    <comment_count>0</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-11 10:15:26 -0700</bug_when>
    <thetext>We should have a Content-Type parser that can parse the MIME type and all specified parameters.
This is needed for MHTML reading support.
The code in HTTPParsers only parse the MIME type and charset parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402093</commentid>
    <comment_count>1</comment_count>
      <attachid>93146</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-11 10:33:07 -0700</bug_when>
    <thetext>Created attachment 93146
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402104</commentid>
    <comment_count>2</comment_count>
      <attachid>93146</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-11 10:47:03 -0700</bug_when>
    <thetext>Comment on attachment 93146
Patch

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

Didn’t have chance for a whole review, but did have a couple comments.

&gt; Source/JavaScriptCore/wtf/ASCIICType.h:70
&gt; +    inline bool isASCIIControl(char c) { return c &lt;= &apos; &apos;; }

All functions in this file should be overridden for all the same types, not just for char.

This new function will return true for 0x80-0xFF on platforms where char is signed, so it’s incorrect and false for platforms where char is unsigned, so either way it’s incorrect.

I’m not sure that “control character” is a clearly-enough-defined concept that this helper belongs in this file; I’m especially unsure that space should be considered a control character.

&gt; Source/WebCore/platform/network/ContentTypeParser.cpp:41
&gt; +static void skipWhiteSpaces(const String&amp; input, size_t&amp; startIndex)

This skips spaces only. The term “white spaces” is usually reserved for places where there are things other than a space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402124</commentid>
    <comment_count>3</comment_count>
      <attachid>93151</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-11 11:30:36 -0700</bug_when>
    <thetext>Created attachment 93151
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402125</commentid>
    <comment_count>4</comment_count>
      <attachid>93146</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-11 11:31:27 -0700</bug_when>
    <thetext>Comment on attachment 93146
Patch

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

&gt;&gt; Source/JavaScriptCore/wtf/ASCIICType.h:70
&gt;&gt; +    inline bool isASCIIControl(char c) { return c &lt;= &apos; &apos;; }
&gt; 
&gt; All functions in this file should be overridden for all the same types, not just for char.
&gt; 
&gt; This new function will return true for 0x80-0xFF on platforms where char is signed, so it’s incorrect and false for platforms where char is unsigned, so either way it’s incorrect.
&gt; 
&gt; I’m not sure that “control character” is a clearly-enough-defined concept that this helper belongs in this file; I’m especially unsure that space should be considered a control character.

You are right, space is not a control character (but DEL is that I had forgotten). I fixed that and tried to fix the signed/unsigned problems.
I thought ASCII control characters were common enough (see http://en.wikipedia.org/wiki/Ascii#ASCII_control_characters) that the function could be helpful to others.
Let me know if you feel strongly about it, in which case I&apos;ll move this function it to ContentTypeParser.cpp.

&gt;&gt; Source/WebCore/platform/network/ContentTypeParser.cpp:41
&gt;&gt; +static void skipWhiteSpaces(const String&amp; input, size_t&amp; startIndex)
&gt; 
&gt; This skips spaces only. The term “white spaces” is usually reserved for places where there are things other than a space.

Good point, changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402134</commentid>
    <comment_count>5</comment_count>
      <attachid>93151</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-11 11:50:15 -0700</bug_when>
    <thetext>Comment on attachment 93151
Patch

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

I would have written this slightly differently, but this looks fine.  The approach you&apos;ve used makes it slightly difficult to verify that you&apos;re always bounds checking correctly.  It would also be nice to put the grammar from the RFC into a comment in the code for documentation.

&gt; Source/WebCore/platform/network/ContentTypeParser.cpp:95
&gt; +    , m_inputIndex(0)

That&apos;s the point of this member?

&gt; Source/WebCore/platform/network/ContentTypeParser.cpp:123
&gt; +    size_t index = strlen(contentTypeParameterName);

It feels like contentTypeParameterName should be a DECLARE_STATIC_LOCAL(String, contentTypeParameterName, (&quot;Content-Type&quot;)) in this function.  Then you could just use contentTypeParameterName.length().

&gt; Source/WebCore/platform/network/ContentTypeParser.cpp:146
&gt; +        // Should we tolerate spaces here?

What does the RFC say?

&gt; Source/WebCore/platform/network/ContentTypeParser.cpp:170
&gt; +        m_parameters.add(key, value);

What happens if there are more than one parameter with the same name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402136</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-11 11:52:17 -0700</bug_when>
    <thetext>If you&apos;re interested, here&apos;s a parser I wrote recently that uses a slightly different style:

http://trac.webkit.org/browser/trunk/Source/WebCore/page/ContentSecurityPolicy.cpp

That parser is somewhat different that this one because it uses a segment-and-parse strategy to get the particular error handling we&apos;re supposed to use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402140</commentid>
    <comment_count>7</comment_count>
      <attachid>93151</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-11 11:54:25 -0700</bug_when>
    <thetext>Comment on attachment 93151
Patch

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

I&apos;m going to mark this R+, but other folks should feel free to comment as well.  Please address the (minor) feedback above before landing.  I presume this is going to be tested in subsequent MHTML patchs.

&gt; Source/JavaScriptCore/wtf/ASCIICType.h:76
&gt; +    inline bool isASCIIControl(char c) { return (c &gt;= 0 &amp;&amp; c &lt; &apos; &apos;) || c == 0x7F; }
&gt; +    inline bool isASCIIControl(unsigned short c) { return c &lt; &apos; &apos; || c == 0x7F; }
&gt; +#if !COMPILER(MSVC) || defined(_NATIVE_WCHAR_T_DEFINED)
&gt; +    inline bool isASCIIControl(wchar_t c) { return (c &gt;= 0 &amp;&amp; c &lt; &apos; &apos;) || c == 0x7F; }
&gt; +#endif
&gt; +    inline bool isASCIIControl(int c) { return (c &gt;= 0 &amp;&amp; c &lt; &apos; &apos;) || c == 0x7F; }
&gt; +    inline bool isASCIIControl(unsigned c) { return c &lt; &apos; &apos; || c == 0x7F; }

This feels like a lot of copy/paste, but I guess that&apos;s how this file rolls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402145</commentid>
    <comment_count>8</comment_count>
      <attachid>93151</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-11 12:03:48 -0700</bug_when>
    <thetext>Comment on attachment 93151
Patch

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

&gt;&gt; Source/JavaScriptCore/wtf/ASCIICType.h:76
&gt;&gt; +    inline bool isASCIIControl(unsigned c) { return c &lt; &apos; &apos; || c == 0x7F; }
&gt; 
&gt; This feels like a lot of copy/paste, but I guess that&apos;s how this file rolls.

The one call site using this function isn’t getting a lot of benefit from it, because it has a lot of other special cases. I don’t think adding this is a good idea.

Also, this implementation assumes that char is signed. On platforms where char is unsigned we might get a warning, and a warning that may be treated as an error, that &gt;= 0 is always true.

&gt; Source/WebCore/platform/network/ContentTypeParser.cpp:49
&gt; +    return !isASCIIControl(c) &amp;&amp; c != &apos; &apos; &amp;&amp; c != &apos;&quot;&apos; &amp;&amp; c != &apos;(&apos; &amp;&amp; c != &apos;)&apos; &amp;&amp; c != &apos;,&apos; &amp;&amp; c != &apos;/&apos; &amp;&amp; (c &lt; &apos;:&apos; || c &gt; &apos;@&apos;) &amp;&amp; (c &lt; &apos;[&apos; || c &gt; &apos;]&apos;);

With so many specific rules here already, I think that the isASCIIControl logic should be just inlined here.

What does this function do for 0x80-0xFF. I can’t tell!

I suggest not abbreviated character as Char in this function.

&gt; Source/WebCore/platform/network/ContentTypeParser.h:42
&gt; +// FIXME: add support for comments.
&gt; +class ContentTypeParser {
&gt; +public:

Is this class used at all yet? Where are the test cases?

I don’t understand why m_inputIndex is a data member. It seem to be used only during the parsing process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402201</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-11 13:20:30 -0700</bug_when>
    <thetext>&gt; Is this class used at all yet? Where are the test cases?

I asked Jay to split this part of the patch out from Bug 7168.  The test cases are in that bug (and I&apos;m going to ask him to add more when that patch is ready for review).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402262</commentid>
    <comment_count>10</comment_count>
      <attachid>93151</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-11 14:09:50 -0700</bug_when>
    <thetext>Comment on attachment 93151
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/wtf/ASCIICType.h:76
&gt;&gt;&gt; +    inline bool isASCIIControl(unsigned c) { return c &lt; &apos; &apos; || c == 0x7F; }
&gt;&gt; 
&gt;&gt; This feels like a lot of copy/paste, but I guess that&apos;s how this file rolls.
&gt; 
&gt; The one call site using this function isn’t getting a lot of benefit from it, because it has a lot of other special cases. I don’t think adding this is a good idea.
&gt; 
&gt; Also, this implementation assumes that char is signed. On platforms where char is unsigned we might get a warning, and a warning that may be treated as an error, that &gt;= 0 is always true.

OK, I removed it and added it to the caller.

&gt;&gt; Source/WebCore/platform/network/ContentTypeParser.cpp:49
&gt;&gt; +    return !isASCIIControl(c) &amp;&amp; c != &apos; &apos; &amp;&amp; c != &apos;&quot;&apos; &amp;&amp; c != &apos;(&apos; &amp;&amp; c != &apos;)&apos; &amp;&amp; c != &apos;,&apos; &amp;&amp; c != &apos;/&apos; &amp;&amp; (c &lt; &apos;:&apos; || c &gt; &apos;@&apos;) &amp;&amp; (c &lt; &apos;[&apos; || c &gt; &apos;]&apos;);
&gt; 
&gt; With so many specific rules here already, I think that the isASCIIControl logic should be just inlined here.
&gt; 
&gt; What does this function do for 0x80-0xFF. I can’t tell!
&gt; 
&gt; I suggest not abbreviated character as Char in this function.

Inlined isASCIIControl, now checking the token is ASCII, renamed without abbreviation.

&gt;&gt; Source/WebCore/platform/network/ContentTypeParser.cpp:95
&gt;&gt; +    , m_inputIndex(0)
&gt; 
&gt; That&apos;s the point of this member?

Ah! Unused, removed.

&gt;&gt; Source/WebCore/platform/network/ContentTypeParser.cpp:123
&gt;&gt; +    size_t index = strlen(contentTypeParameterName);
&gt; 
&gt; It feels like contentTypeParameterName should be a DECLARE_STATIC_LOCAL(String, contentTypeParameterName, (&quot;Content-Type&quot;)) in this function.  Then you could just use contentTypeParameterName.length().

Cool, I did not know about that macro. Now using it.

&gt;&gt; Source/WebCore/platform/network/ContentTypeParser.cpp:146
&gt;&gt; +        // Should we tolerate spaces here?
&gt; 
&gt; What does the RFC say?

It says there should be no space. I was wondering wether we should be lenient or not.

&gt;&gt; Source/WebCore/platform/network/ContentTypeParser.cpp:170
&gt;&gt; +        m_parameters.add(key, value);
&gt; 
&gt; What happens if there are more than one parameter with the same name?

Changed the code to keep the last one, and added a comment in the header to document that behavior.

&gt;&gt; Source/WebCore/platform/network/ContentTypeParser.h:42
&gt;&gt; +public:
&gt; 
&gt; Is this class used at all yet? Where are the test cases?
&gt; 
&gt; I don’t understand why m_inputIndex is a data member. It seem to be used only during the parsing process.

m_inputIndex was unused and has been removed.
This is going to be used by https://bugs.webkit.org/show_bug.cgi?id=7168 where we need to parse multipart Content-Type, such as:
Content-Type: multipart/related; boundary=&quot;boundary-example&quot;; type=&quot;text/html&quot;

Also I have a bunch of unit-tests for this code that will make it to TestWebKitAPI at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402264</commentid>
    <comment_count>11</comment_count>
      <attachid>93182</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-11 14:10:16 -0700</bug_when>
    <thetext>Created attachment 93182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402298</commentid>
    <comment_count>12</comment_count>
      <attachid>93182</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-11 14:40:38 -0700</bug_when>
    <thetext>Comment on attachment 93182
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402452</commentid>
    <comment_count>13</comment_count>
      <attachid>93182</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-11 17:17:36 -0700</bug_when>
    <thetext>Comment on attachment 93182
Patch

Clearing flags on attachment: 93182

Committed r86289: &lt;http://trac.webkit.org/changeset/86289&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402453</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-11 17:17:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402459</commentid>
    <comment_count>15</comment_count>
      <attachid>93218</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-11 17:25:28 -0700</bug_when>
    <thetext>Created attachment 93218
ContentTypeParser unit-tests

These are unit-tests used when writing ContentTypeParser.
They&apos;ll be integrated to TestWebKitAPI once dslomov is done with transtionning it to GTest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402561</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-11 19:41:44 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/86289 might have broken GTK Linux 32-bit Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93146</attachid>
            <date>2011-05-11 10:33:07 -0700</date>
            <delta_ts>2011-05-11 14:10:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60637-20110511103306.patch</filename>
            <type>text/plain</type>
            <size>12353</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYxODAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDEw
NzAzMjIzZDc4MjMwMDE3MWY5NWMxNWRjMDhjZDU4NDI5ZDU0Y2QuLjA1NjAxYTM1NTFkNmNhNzk4
YjdlM2IwNGViMjBjODYyOTY1Mzg5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDExLTA1LTEwICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRp
bmcgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gZGV0ZWN0IGFuIEFTQ0lJIGNoYXJhY3RlciBpcyBh
IGNvbnRyb2xsIGNoYXJhY3Rlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYwNjM3CisKKyAgICAgICAgKiB3dGYvQVNDSUlDVHlwZS5oOgorICAgICAg
ICAoV1RGOjppc0FTQ0lJQ29udHJvbCk6CisKIDIwMTEtMDUtMDkgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BU0NJSUNUeXBlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUuaAppbmRleCA4M2YyNzRiN2IxYzFjYmJlNTc0Y2Fm
YTIxN2EzYjRkZDM5N2RhYWRjLi42NmNhYTNmYjNmYTFjNmQ3NDc2YjM5YmVmZTEyNzk0NTgwMGFi
MTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUuaApAQCAtNjcsNiArNjcs
OCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJQWxwaGFudW1lcmlj
KGludCBjKSB7IHJldHVybiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8ICgoYyB8IDB4MjApID49
ICdhJyAmJiAoYyB8IDB4MjApIDw9ICd6Jyk7IH0KICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJQWxw
aGFudW1lcmljKHVuc2lnbmVkIGMpIHsgcmV0dXJuIChjID49ICcwJyAmJiBjIDw9ICc5JykgfHwg
KChjIHwgMHgyMCkgPj0gJ2EnICYmIChjIHwgMHgyMCkgPD0gJ3onKTsgfQogCisgICAgaW5saW5l
IGJvb2wgaXNBU0NJSUNvbnRyb2woY2hhciBjKSB7IHJldHVybiBjIDw9ICcgJzsgfQorCiAgICAg
aW5saW5lIGJvb2wgaXNBU0NJSURpZ2l0KGNoYXIgYykgeyByZXR1cm4gKGMgPj0gJzAnKSAmIChj
IDw9ICc5Jyk7IH0KICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJRGlnaXQodW5zaWduZWQgc2hvcnQg
YykgeyByZXR1cm4gKGMgPj0gJzAnKSAmIChjIDw9ICc5Jyk7IH0KICNpZiAhQ09NUElMRVIoTVNW
QykgfHwgZGVmaW5lZChfTkFUSVZFX1dDSEFSX1RfREVGSU5FRCkKQEAgLTE2OSw2ICsxNzEsNyBA
QCBuYW1lc3BhY2UgV1RGIHsKIHVzaW5nIFdURjo6aXNBU0NJSTsKIHVzaW5nIFdURjo6aXNBU0NJ
SUFscGhhOwogdXNpbmcgV1RGOjppc0FTQ0lJQWxwaGFudW1lcmljOwordXNpbmcgV1RGOjppc0FT
Q0lJQ29udHJvbDsKIHVzaW5nIFdURjo6aXNBU0NJSURpZ2l0OwogdXNpbmcgV1RGOjppc0FTQ0lJ
SGV4RGlnaXQ7CiB1c2luZyBXVEY6OmlzQVNDSUlMb3dlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2YzlhNzgy
MThmNjBjZjcwZjg3MWU5Yzk0NTQ4Njc0ZTE1NzhjZjVmLi5kMDEyNWY0ZjMxOTIzMTg0NDcyMDQ2
YzY5NGI2ZGY5NjRjZWIxOTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDUt
MTAgIEpheSBDaXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBhIENvbnRlbnQtVHlwZSBw
YXJzZXIuIFRoaXMgaXMgbmVlZGVkIGZvciBNSFRNTCBzdXBwb3J0LgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA2MzcKKworICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6ZGlzYWJsZUV2YWwpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvQ29udGVudFR5cGVQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL0NvbnRlbnRUeXBlUGFyc2VyLmg6IEFkZGVkLgorCiAyMDExLTA1LTEwICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGljZSBM
aXUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNWY5ZjE5YjA3MGI3ZGI1NzE1OTA1ZjM1MTlmNTdkYjE2
MjI4MGVlYi4uYmRhYWMzZDY3MjQwYTYwNThmOWI3ZjBmODk4ZTE1NWJkODAwNzBhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtNDY5OSw2ICs0Njk5LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25l
dHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdv
cmsvQmxvYlN0b3JhZ2VEYXRhLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQ29u
dGVudFR5cGVQYXJzZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL0NvbnRl
bnRUeXBlUGFyc2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlh
bC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2Uu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL0ROUy5oJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ29udGVudFR5cGVQYXJzZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Db250ZW50VHlwZVBhcnNlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODkyZmYxZmM5NzU3YmQ4ODBhYTk3NGVkZjQzYmQ4ZTUwMzAwZWI3NQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ29udGVudFR5cGVQ
YXJzZXIuY3BwCkBAIC0wLDAgKzEsMTc4IEBACisgLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJDb250ZW50VHlwZVBhcnNlci5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgY29udGVudFR5cGVQYXJhbWV0ZXJOYW1lID0g
IkNvbnRlbnQtVHlwZSI7CisKK3N0YXRpYyB2b2lkIHNraXBXaGl0ZVNwYWNlcyhjb25zdCBTdHJp
bmcmIGlucHV0LCBzaXplX3QmIHN0YXJ0SW5kZXgpCit7CisgICAgd2hpbGUgKHN0YXJ0SW5kZXgg
PCBpbnB1dC5sZW5ndGgoKSAmJiBpbnB1dFtzdGFydEluZGV4XSA9PSAnICcpCisgICAgICAgICsr
c3RhcnRJbmRleDsKK30KKworc3RhdGljIGJvb2wgaXNUb2tlbkNoYXIoY2hhciBjKQoreworICAg
IHJldHVybiAhaXNBU0NJSUNvbnRyb2woYykgJiYgYyAhPSAnICcgJiYgYyAhPSAnIicgJiYgYyAh
PSAnKCcgJiYgYyAhPSAnKScgJiYgYyAhPSAnLCcgJiYgYyAhPSAnLycgJiYgKGMgPCAnOicgfHwg
YyA+ICdAJykgJiYgKGMgPCAnWycgfHwgYyA+ICddJyk7Cit9CisKK3N0YXRpYyBTdHJpbmcgcGFy
c2VUb2tlbihjb25zdCBTdHJpbmcmIGlucHV0LCBzaXplX3QmIHN0YXJ0SW5kZXgpCit7CisgICAg
aWYgKHN0YXJ0SW5kZXggPj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICB3aGlsZSAoc3RhcnRJ
bmRleCA8IGlucHV0Lmxlbmd0aCgpKSB7CisgICAgICAgIGNoYXIgY3VycmVudENoYXJhY3RlciA9
IGlucHV0W3N0YXJ0SW5kZXhdOworICAgICAgICBpZiAoIWlzVG9rZW5DaGFyKGN1cnJlbnRDaGFy
YWN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoY3VycmVudENoYXJhY3Rlcik7CisgICAgICAgICsr
c3RhcnRJbmRleDsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsK
K30KKworc3RhdGljIFN0cmluZyBwYXJzZVF1b3RlZFN0cmluZyhjb25zdCBTdHJpbmcmIGlucHV0
LCBzaXplX3QmIHN0YXJ0SW5kZXgpCit7CisgICAgaWYgKHN0YXJ0SW5kZXggPj0gaW5wdXQubGVu
Z3RoKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmIChpbnB1dFtzdGFydElu
ZGV4KytdICE9ICciJyB8fCBzdGFydEluZGV4ID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAg
Ym9vbCBsYXN0Q2hhcmFjdGVyV2FzQmFja3NsYXNoID0gZmFsc2U7CisgICAgY2hhciBjdXJyZW50
Q2hhcmFjdGVyOworICAgIHdoaWxlICgoY3VycmVudENoYXJhY3RlciA9IGlucHV0W3N0YXJ0SW5k
ZXgrK10pICE9ICciJyB8fCBsYXN0Q2hhcmFjdGVyV2FzQmFja3NsYXNoKSB7CisgICAgICAgIGlm
IChzdGFydEluZGV4ID49IGlucHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlciA9PSAnXFwnICYmICFsYXN0Q2hhcmFj
dGVyV2FzQmFja3NsYXNoKSB7CisgICAgICAgICAgICBsYXN0Q2hhcmFjdGVyV2FzQmFja3NsYXNo
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChs
YXN0Q2hhcmFjdGVyV2FzQmFja3NsYXNoKQorICAgICAgICAgICAgbGFzdENoYXJhY3Rlcldhc0Jh
Y2tzbGFzaCA9IGZhbHNlOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjdXJyZW50Q2hh
cmFjdGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30K
KworQ29udGVudFR5cGVQYXJzZXI6OkNvbnRlbnRUeXBlUGFyc2VyKGNvbnN0IFN0cmluZyYgY29u
dGVudFR5cGUpCisgICAgOiBtX2NvbnRlbnRUeXBlKGNvbnRlbnRUeXBlLnN0cmlwV2hpdGVTcGFj
ZSgpKQorICAgICwgbV9pbnB1dEluZGV4KDApCit7CisgICAgcGFyc2UoKTsKK30KKworU3RyaW5n
IENvbnRlbnRUeXBlUGFyc2VyOjpjaGFyc2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFyYW1l
dGVyVmFsdWVGb3JOYW1lKCJjaGFyc2V0Iik7Cit9CisKK1N0cmluZyBDb250ZW50VHlwZVBhcnNl
cjo6cGFyYW1ldGVyVmFsdWVGb3JOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldChuYW1lKTsKK30KKworc2l6ZV90IENvbnRlbnRUeXBl
UGFyc2VyOjpwYXJhbWV0ZXJDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFyYW1ldGVy
cy5zaXplKCk7Cit9CisKKy8vIFNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMDQ1
I3NlY3Rpb24tNS4xIGZvciBDb250ZW50LVR5cGUgc3ludGF4Lgordm9pZCBDb250ZW50VHlwZVBh
cnNlcjo6cGFyc2UoKQoreworICAgIGlmICghbV9jb250ZW50VHlwZS5zdGFydHNXaXRoKGNvbnRl
bnRUeXBlUGFyYW1ldGVyTmFtZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIENvbnRl
bnQtVHlwZSBzdHJpbmcgJyVzJyIsIG1fY29udGVudFR5cGUuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIHNpemVfdCBjb250ZW50VHlwZUxlbmd0aCA9IG1fY29u
dGVudFR5cGUubGVuZ3RoKCk7CisgICAgc2l6ZV90IGluZGV4ID0gc3RybGVuKGNvbnRlbnRUeXBl
UGFyYW1ldGVyTmFtZSk7CisgICAgc2tpcFdoaXRlU3BhY2VzKG1fY29udGVudFR5cGUsIGluZGV4
KTsKKyAgICBpZiAoaW5kZXggPj0gY29udGVudFR5cGVMZW5ndGggfHwgbV9jb250ZW50VHlwZVtp
bmRleF0gIT0gJzonIHx8ICsraW5kZXggPj0gY29udGVudFR5cGVMZW5ndGgpICB7CisgICAgICAg
IExPR19FUlJPUigiSW52YWxpZCBDb250ZW50LVR5cGUgc3RyaW5nICclcyciLCBtX2NvbnRlbnRU
eXBlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRo
ZXJlIHNob3VsZCBub3QgYmUgYW55IHF1b3RlZCBzdHJpbmdzIHVudGlsIHdlIHJlYWNoIHRoZSBw
YXJhbWV0ZXJzLgorICAgIHNpemVfdCBzZW1pQ29sb25JbmRleCA9IG1fY29udGVudFR5cGUuZmlu
ZCgnOycsIGluZGV4KTsKKyAgICBpZiAoc2VtaUNvbG9uSW5kZXggPT0gbm90Rm91bmQpIHsKKyAg
ICAgICAgbV9taW1lVHlwZSA9IG1fY29udGVudFR5cGUuc3Vic3RyaW5nKGluZGV4KS5zdHJpcFdo
aXRlU3BhY2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fbWltZVR5cGUgPSBt
X2NvbnRlbnRUeXBlLnN1YnN0cmluZyhpbmRleCwgc2VtaUNvbG9uSW5kZXggLSBpbmRleCkuc3Ry
aXBXaGl0ZVNwYWNlKCk7CisgICAgaW5kZXggPSBzZW1pQ29sb25JbmRleCArIDE7CisgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgc2tpcFdoaXRlU3BhY2VzKG1fY29udGVudFR5cGUsIGluZGV4
KTsKKyAgICAgICAgU3RyaW5nIGtleSA9IHBhcnNlVG9rZW4obV9jb250ZW50VHlwZSwgaW5kZXgp
OworICAgICAgICBpZiAoa2V5LmlzRW1wdHkoKSB8fCBpbmRleCA+PSBjb250ZW50VHlwZUxlbmd0
aCkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIENvbnRlbnQtVHlwZSBwYXJhbWV0
ZXIgbmFtZS4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBT
aG91bGQgd2UgdG9sZXJhdGUgc3BhY2VzIGhlcmU/CisgICAgICAgIGlmIChtX2NvbnRlbnRUeXBl
W2luZGV4KytdICE9ICc9JyB8fCBpbmRleCA+PSBjb250ZW50VHlwZUxlbmd0aCkgeworICAgICAg
ICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIENvbnRlbnQtVHlwZSBtYWxmb3JtZWQgcGFyYW1ldGVy
LiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2hvdWxk
IHdlIHRvbGVyYXRlIHNwYWNlcyBoZXJlPworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAg
IGlmIChtX2NvbnRlbnRUeXBlW2luZGV4XSA9PSAnIicpCisgICAgICAgICAgICB2YWx1ZSA9IHBh
cnNlUXVvdGVkU3RyaW5nKG1fY29udGVudFR5cGUsIGluZGV4KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdmFsdWUgPSBwYXJzZVRva2VuKG1fY29udGVudFR5cGUsIGluZGV4KTsKKworICAg
ICAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiSW52YWxp
ZCBDb250ZW50LVR5cGUsIGludmFsaWQgcGFyYW1ldGVyIHZhbHVlLiIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2hvdWxkIHdlIHRvbGVyYXRlIHNwYWNl
cyBoZXJlPworICAgICAgICBpZiAoaW5kZXggPCBjb250ZW50VHlwZUxlbmd0aCAmJiBtX2NvbnRl
bnRUeXBlW2luZGV4KytdICE9ICc7JykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlk
IENvbnRlbnQtVHlwZSwgaW52YWxpZCBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiBrZXkvdmFsdWUg
cGFyYW1ldGVyLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
bV9wYXJhbWV0ZXJzLmFkZChrZXksIHZhbHVlKTsKKworICAgICAgICBpZiAoaW5kZXggPj0gY29u
dGVudFR5cGVMZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCit9CisgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NvbnRlbnRUeXBlUGFy
c2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NvbnRlbnRUeXBlUGFyc2Vy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmNlYjM3N2JmZjljY2JhOWU4ZGViODk2MGIzODFiNzFkOTI0ZDYyNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ29udGVu
dFR5cGVQYXJzZXIuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb250ZW50VHlwZVBhcnNlcl9o
CisjZGVmaW5lIENvbnRlbnRUeXBlUGFyc2VyX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiBhZGQgc3VwcG9y
dCBmb3IgY29tbWVudHMuCitjbGFzcyBDb250ZW50VHlwZVBhcnNlciB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgQ29udGVudFR5cGVQYXJzZXIoY29uc3QgU3RyaW5nJik7CisKKyAgICBTdHJpbmcg
bWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX21pbWVUeXBlOyB9CisgICAgU3RyaW5nIGNoYXJz
ZXQoKSBjb25zdDsKKworICAgIFN0cmluZyBwYXJhbWV0ZXJWYWx1ZUZvck5hbWUoY29uc3QgU3Ry
aW5nJikgY29uc3Q7CisgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgdm9pZCBwYXJzZSgpOworCisgICAgU3RyaW5nIG1fY29udGVudFR5cGU7CisgICAg
c2l6ZV90IG1faW5wdXRJbmRleDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gS2V5VmFsdWVQYWlyczsKKyAgICBLZXlWYWx1ZVBhaXJzIG1fcGFyYW1ldGVyczsKKyAgICBT
dHJpbmcgbV9taW1lVHlwZTsKK307CisKK30KKworI2VuZGlmCisKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93151</attachid>
            <date>2011-05-11 11:30:36 -0700</date>
            <delta_ts>2011-05-11 14:10:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60637-20110511113035.patch</filename>
            <type>text/plain</type>
            <size>12763</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYxODAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDEw
NzAzMjIzZDc4MjMwMDE3MWY5NWMxNWRjMDhjZDU4NDI5ZDU0Y2QuLmEzZDRkYjA2NDBlODE3YjJm
MjU1MWE1MDlmZTU3ZDQ3ZTU4ZDRmYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDExLTA1LTEwICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRp
bmcgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gZGV0ZWN0IGlmIGFuIEFTQ0lJIGNoYXJhY3RlciBp
cyBhIGNvbnRyb2xsIGNoYXJhY3Rlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYwNjM3CisKKyAgICAgICAgKiB3dGYvQVNDSUlDVHlwZS5oOgorICAg
ICAgICAoV1RGOjppc0FTQ0lJQ29udHJvbCk6CisKIDIwMTEtMDUtMDkgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BU0NJSUNUeXBlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUuaAppbmRleCA4M2YyNzRiN2IxYzFjYmJlNTc0
Y2FmYTIxN2EzYjRkZDM5N2RhYWRjLi41M2EwNTQ5N2YwODY5MmQxYjJlOGQwN2QwODQ4MWZiODc5
OTU1ZjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUuaApAQCAtNjcsNiAr
NjcsMTQgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIGJvb2wgaXNBU0NJSUFscGhhbnVt
ZXJpYyhpbnQgYykgeyByZXR1cm4gKGMgPj0gJzAnICYmIGMgPD0gJzknKSB8fCAoKGMgfCAweDIw
KSA+PSAnYScgJiYgKGMgfCAweDIwKSA8PSAneicpOyB9CiAgICAgaW5saW5lIGJvb2wgaXNBU0NJ
SUFscGhhbnVtZXJpYyh1bnNpZ25lZCBjKSB7IHJldHVybiAoYyA+PSAnMCcgJiYgYyA8PSAnOScp
IHx8ICgoYyB8IDB4MjApID49ICdhJyAmJiAoYyB8IDB4MjApIDw9ICd6Jyk7IH0KIAorICAgIGlu
bGluZSBib29sIGlzQVNDSUlDb250cm9sKGNoYXIgYykgeyByZXR1cm4gKGMgPj0gMCAmJiBjIDwg
JyAnKSB8fCBjID09IDB4N0Y7IH0KKyAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJQ29udHJvbCh1bnNp
Z25lZCBzaG9ydCBjKSB7IHJldHVybiBjIDwgJyAnIHx8IGMgPT0gMHg3RjsgfQorI2lmICFDT01Q
SUxFUihNU1ZDKSB8fCBkZWZpbmVkKF9OQVRJVkVfV0NIQVJfVF9ERUZJTkVEKQorICAgIGlubGlu
ZSBib29sIGlzQVNDSUlDb250cm9sKHdjaGFyX3QgYykgeyByZXR1cm4gKGMgPj0gMCAmJiBjIDwg
JyAnKSB8fCBjID09IDB4N0Y7IH0KKyNlbmRpZgorICAgIGlubGluZSBib29sIGlzQVNDSUlDb250
cm9sKGludCBjKSB7IHJldHVybiAoYyA+PSAwICYmIGMgPCAnICcpIHx8IGMgPT0gMHg3RjsgfQor
ICAgIGlubGluZSBib29sIGlzQVNDSUlDb250cm9sKHVuc2lnbmVkIGMpIHsgcmV0dXJuIGMgPCAn
ICcgfHwgYyA9PSAweDdGOyB9CisKICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJRGlnaXQoY2hhciBj
KSB7IHJldHVybiAoYyA+PSAnMCcpICYgKGMgPD0gJzknKTsgfQogICAgIGlubGluZSBib29sIGlz
QVNDSUlEaWdpdCh1bnNpZ25lZCBzaG9ydCBjKSB7IHJldHVybiAoYyA+PSAnMCcpICYgKGMgPD0g
JzknKTsgfQogI2lmICFDT01QSUxFUihNU1ZDKSB8fCBkZWZpbmVkKF9OQVRJVkVfV0NIQVJfVF9E
RUZJTkVEKQpAQCAtMTY5LDYgKzE3Nyw3IEBAIG5hbWVzcGFjZSBXVEYgewogdXNpbmcgV1RGOjpp
c0FTQ0lJOwogdXNpbmcgV1RGOjppc0FTQ0lJQWxwaGE7CiB1c2luZyBXVEY6OmlzQVNDSUlBbHBo
YW51bWVyaWM7Cit1c2luZyBXVEY6OmlzQVNDSUlDb250cm9sOwogdXNpbmcgV1RGOjppc0FTQ0lJ
RGlnaXQ7CiB1c2luZyBXVEY6OmlzQVNDSUlIZXhEaWdpdDsKIHVzaW5nIFdURjo6aXNBU0NJSUxv
d2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDZjOWE3ODIxOGY2MGNmNzBmODcxZTljOTQ1NDg2NzRlMTU3OGNm
NWYuLmQwMTI1ZjRmMzE5MjMxODQ0NzIwNDZjNjk0YjZkZjk2NGNlYjE5MjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAxMS0wNS0xMCAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkaW5nIGEgQ29udGVudC1UeXBlIHBhcnNlci4gVGhpcyBpcyBuZWVkZWQgZm9yIE1IVE1M
IHN1cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MDYzNworCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpkaXNhYmxlRXZh
bCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Db250ZW50VHlwZVBhcnNlci5jcHA6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ29udGVudFR5cGVQYXJzZXIuaDogQWRk
ZWQuCisKIDIwMTEtMDUtMTAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFsaWNlIExpdS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1ZjlmMTli
MDcwYjdkYjU3MTU5MDVmMzUxOWY1N2RiMTYyMjgwZWViLi5iZGFhYzNkNjcyNDBhNjA1OGY5Yjdm
MGY4OThlMTU1YmQ4MDA3MGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00Njk5LDYgKzQ2OTksOCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9CbG9iU3RvcmFnZURhdGEuaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vbmV0d29yay9Db250ZW50VHlwZVBhcnNlci5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL25ldHdvcmsvQ29udGVudFR5cGVQYXJzZXIuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
bmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25l
dHdvcmsvRE5TLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9Db250ZW50VHlwZVBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0NvbnRlbnRUeXBlUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGRkZjBmZjRhNmQ2NWRmYWE3NTU4
YWY5OGZjYWIxYjBjYzBlZjMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Db250ZW50VHlwZVBhcnNlci5jcHAKQEAgLTAsMCArMSwxNzggQEAKKyAv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbnRlbnRUeXBlUGFyc2VyLmgiCisKKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBj
b250ZW50VHlwZVBhcmFtZXRlck5hbWUgPSAiQ29udGVudC1UeXBlIjsKKworc3RhdGljIHZvaWQg
c2tpcFNwYWNlcyhjb25zdCBTdHJpbmcmIGlucHV0LCBzaXplX3QmIHN0YXJ0SW5kZXgpCit7Cisg
ICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBpbnB1dC5sZW5ndGgoKSAmJiBpbnB1dFtzdGFydEluZGV4
XSA9PSAnICcpCisgICAgICAgICsrc3RhcnRJbmRleDsKK30KKworc3RhdGljIGJvb2wgaXNUb2tl
bkNoYXIoY2hhciBjKQoreworICAgIHJldHVybiAhaXNBU0NJSUNvbnRyb2woYykgJiYgYyAhPSAn
ICcgJiYgYyAhPSAnIicgJiYgYyAhPSAnKCcgJiYgYyAhPSAnKScgJiYgYyAhPSAnLCcgJiYgYyAh
PSAnLycgJiYgKGMgPCAnOicgfHwgYyA+ICdAJykgJiYgKGMgPCAnWycgfHwgYyA+ICddJyk7Cit9
CisKK3N0YXRpYyBTdHJpbmcgcGFyc2VUb2tlbihjb25zdCBTdHJpbmcmIGlucHV0LCBzaXplX3Qm
IHN0YXJ0SW5kZXgpCit7CisgICAgaWYgKHN0YXJ0SW5kZXggPj0gaW5wdXQubGVuZ3RoKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKKyAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGlucHV0Lmxlbmd0aCgpKSB7CisgICAgICAgIGNo
YXIgY3VycmVudENoYXJhY3RlciA9IGlucHV0W3N0YXJ0SW5kZXhdOworICAgICAgICBpZiAoIWlz
VG9rZW5DaGFyKGN1cnJlbnRDaGFyYWN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoY3VycmVudENo
YXJhY3Rlcik7CisgICAgICAgICsrc3RhcnRJbmRleDsKKyAgICB9CisgICAgcmV0dXJuIHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworc3RhdGljIFN0cmluZyBwYXJzZVF1b3RlZFN0cmlu
Zyhjb25zdCBTdHJpbmcmIGlucHV0LCBzaXplX3QmIHN0YXJ0SW5kZXgpCit7CisgICAgaWYgKHN0
YXJ0SW5kZXggPj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIGlmIChpbnB1dFtzdGFydEluZGV4KytdICE9ICciJyB8fCBzdGFydEluZGV4ID49IGlucHV0
Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CisgICAgYm9vbCBsYXN0Q2hhcmFjdGVyV2FzQmFja3NsYXNoID0gZmFs
c2U7CisgICAgY2hhciBjdXJyZW50Q2hhcmFjdGVyOworICAgIHdoaWxlICgoY3VycmVudENoYXJh
Y3RlciA9IGlucHV0W3N0YXJ0SW5kZXgrK10pICE9ICciJyB8fCBsYXN0Q2hhcmFjdGVyV2FzQmFj
a3NsYXNoKSB7CisgICAgICAgIGlmIChzdGFydEluZGV4ID49IGlucHV0Lmxlbmd0aCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlciA9
PSAnXFwnICYmICFsYXN0Q2hhcmFjdGVyV2FzQmFja3NsYXNoKSB7CisgICAgICAgICAgICBsYXN0
Q2hhcmFjdGVyV2FzQmFja3NsYXNoID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIGlmIChsYXN0Q2hhcmFjdGVyV2FzQmFja3NsYXNoKQorICAgICAgICAg
ICAgbGFzdENoYXJhY3Rlcldhc0JhY2tzbGFzaCA9IGZhbHNlOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsKK30KKworQ29udGVudFR5cGVQYXJzZXI6OkNvbnRlbnRUeXBlUGFy
c2VyKGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCisgICAgOiBtX2NvbnRlbnRUeXBlKGNvbnRl
bnRUeXBlLnN0cmlwV2hpdGVTcGFjZSgpKQorICAgICwgbV9pbnB1dEluZGV4KDApCit7CisgICAg
cGFyc2UoKTsKK30KKworU3RyaW5nIENvbnRlbnRUeXBlUGFyc2VyOjpjaGFyc2V0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gcGFyYW1ldGVyVmFsdWVGb3JOYW1lKCJjaGFyc2V0Iik7Cit9CisKK1N0
cmluZyBDb250ZW50VHlwZVBhcnNlcjo6cGFyYW1ldGVyVmFsdWVGb3JOYW1lKGNvbnN0IFN0cmlu
ZyYgbmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldChuYW1lKTsKK30K
Kworc2l6ZV90IENvbnRlbnRUeXBlUGFyc2VyOjpwYXJhbWV0ZXJDb3VudCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGFyYW1ldGVycy5zaXplKCk7Cit9CisKKy8vIFNlZSBodHRwOi8vdG9vbHMu
aWV0Zi5vcmcvaHRtbC9yZmMyMDQ1I3NlY3Rpb24tNS4xIGZvciBDb250ZW50LVR5cGUgc3ludGF4
Lgordm9pZCBDb250ZW50VHlwZVBhcnNlcjo6cGFyc2UoKQoreworICAgIGlmICghbV9jb250ZW50
VHlwZS5zdGFydHNXaXRoKGNvbnRlbnRUeXBlUGFyYW1ldGVyTmFtZSkpIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJJbnZhbGlkIENvbnRlbnQtVHlwZSBzdHJpbmcgJyVzJyIsIG1fY29udGVudFR5cGUu
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNpemVfdCBjb250
ZW50VHlwZUxlbmd0aCA9IG1fY29udGVudFR5cGUubGVuZ3RoKCk7CisgICAgc2l6ZV90IGluZGV4
ID0gc3RybGVuKGNvbnRlbnRUeXBlUGFyYW1ldGVyTmFtZSk7CisgICAgc2tpcFNwYWNlcyhtX2Nv
bnRlbnRUeXBlLCBpbmRleCk7CisgICAgaWYgKGluZGV4ID49IGNvbnRlbnRUeXBlTGVuZ3RoIHx8
IG1fY29udGVudFR5cGVbaW5kZXhdICE9ICc6JyB8fCArK2luZGV4ID49IGNvbnRlbnRUeXBlTGVu
Z3RoKSAgeworICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgQ29udGVudC1UeXBlIHN0cmluZyAn
JXMnIiwgbV9jb250ZW50VHlwZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBUaGVyZSBzaG91bGQgbm90IGJlIGFueSBxdW90ZWQgc3RyaW5ncyB1bnRp
bCB3ZSByZWFjaCB0aGUgcGFyYW1ldGVycy4KKyAgICBzaXplX3Qgc2VtaUNvbG9uSW5kZXggPSBt
X2NvbnRlbnRUeXBlLmZpbmQoJzsnLCBpbmRleCk7CisgICAgaWYgKHNlbWlDb2xvbkluZGV4ID09
IG5vdEZvdW5kKSB7CisgICAgICAgIG1fbWltZVR5cGUgPSBtX2NvbnRlbnRUeXBlLnN1YnN0cmlu
ZyhpbmRleCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX21pbWVUeXBlID0gbV9jb250ZW50VHlwZS5zdWJzdHJpbmcoaW5kZXgsIHNlbWlDb2xvbklu
ZGV4IC0gaW5kZXgpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIGluZGV4ID0gc2VtaUNvbG9uSW5k
ZXggKyAxOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHNraXBTcGFjZXMobV9jb250ZW50
VHlwZSwgaW5kZXgpOworICAgICAgICBTdHJpbmcga2V5ID0gcGFyc2VUb2tlbihtX2NvbnRlbnRU
eXBlLCBpbmRleCk7CisgICAgICAgIGlmIChrZXkuaXNFbXB0eSgpIHx8IGluZGV4ID49IGNvbnRl
bnRUeXBlTGVuZ3RoKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgQ29udGVudC1U
eXBlIHBhcmFtZXRlciBuYW1lLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIC8vIFNob3VsZCB3ZSB0b2xlcmF0ZSBzcGFjZXMgaGVyZT8KKyAgICAgICAgaWYgKG1f
Y29udGVudFR5cGVbaW5kZXgrK10gIT0gJz0nIHx8IGluZGV4ID49IGNvbnRlbnRUeXBlTGVuZ3Ro
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgQ29udGVudC1UeXBlIG1hbGZvcm1l
ZCBwYXJhbWV0ZXIuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBTaG91bGQgd2UgdG9sZXJhdGUgc3BhY2VzIGhlcmU/CisgICAgICAgIFN0cmluZyB2YWx1
ZTsKKyAgICAgICAgaWYgKG1fY29udGVudFR5cGVbaW5kZXhdID09ICciJykKKyAgICAgICAgICAg
IHZhbHVlID0gcGFyc2VRdW90ZWRTdHJpbmcobV9jb250ZW50VHlwZSwgaW5kZXgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlVG9rZW4obV9jb250ZW50VHlwZSwgaW5k
ZXgpOworCisgICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJJbnZhbGlkIENvbnRlbnQtVHlwZSwgaW52YWxpZCBwYXJhbWV0ZXIgdmFsdWUuIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBTaG91bGQgd2UgdG9s
ZXJhdGUgc3BhY2VzIGhlcmU/CisgICAgICAgIGlmIChpbmRleCA8IGNvbnRlbnRUeXBlTGVuZ3Ro
ICYmIG1fY29udGVudFR5cGVbaW5kZXgrK10gIT0gJzsnKSB7CisgICAgICAgICAgICBMT0dfRVJS
T1IoIkludmFsaWQgQ29udGVudC1UeXBlLCBpbnZhbGlkIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9m
IGtleS92YWx1ZSBwYXJhbWV0ZXIuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBtX3BhcmFtZXRlcnMuYWRkKGtleSwgdmFsdWUpOworCisgICAgICAgIGlmIChp
bmRleCA+PSBjb250ZW50VHlwZUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK30KKyAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ29u
dGVudFR5cGVQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ29udGVu
dFR5cGVQYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iY2ViMzc3YmZmOWNjYmE5ZThkZWI4OTYwYjM4MWI3
MWQ5MjRkNjI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Db250ZW50VHlwZVBhcnNlci5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbnRlbnRU
eXBlUGFyc2VyX2gKKyNkZWZpbmUgQ29udGVudFR5cGVQYXJzZXJfaAorCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6
IGFkZCBzdXBwb3J0IGZvciBjb21tZW50cy4KK2NsYXNzIENvbnRlbnRUeXBlUGFyc2VyIHsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBDb250ZW50VHlwZVBhcnNlcihjb25zdCBTdHJpbmcmKTsKKwor
ICAgIFN0cmluZyBtaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVR5cGU7IH0KKyAgICBT
dHJpbmcgY2hhcnNldCgpIGNvbnN0OworCisgICAgU3RyaW5nIHBhcmFtZXRlclZhbHVlRm9yTmFt
ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHBhcnNlKCk7CisKKyAgICBTdHJpbmcgbV9jb250ZW50
VHlwZTsKKyAgICBzaXplX3QgbV9pbnB1dEluZGV4OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBLZXlWYWx1ZVBhaXJzOworICAgIEtleVZhbHVlUGFpcnMgbV9wYXJhbWV0
ZXJzOworICAgIFN0cmluZyBtX21pbWVUeXBlOworfTsKKworfQorCisjZW5kaWYKKworCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93182</attachid>
            <date>2011-05-11 14:10:16 -0700</date>
            <delta_ts>2011-05-11 17:17:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60637-20110511141015.patch</filename>
            <type>text/plain</type>
            <size>12144</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYyNTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MmVkYmU3MDAxOGI0YjYw
NjAwZmI1YzYxYjRiMDMzNzc2M2Y1Y2ZjLi4zNTM3N2JmY2M0Y2RhNzRhYzZhZmExMjg3NDk3MjQx
OGQ5NWI0Yjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDUtMTAgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBhIENvbnRlbnQtVHlwZSBwYXJzZXIuIFRo
aXMgaXMgbmVlZGVkIGZvciBNSFRNTCBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA2MzcKKworICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6ZGlzYWJsZUV2YWwpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ29u
dGVudFR5cGVQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Nv
bnRlbnRUeXBlUGFyc2VyLmg6IEFkZGVkLgorCiAyMDExLTA1LTExICBKZXNzaWUgQmVybGluICA8
amJlcmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgRmFsa2VuYnVy
Zy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxZjQzNDM5MWE5YTYwNTkxNDlkMDc5OWUyZDNiMmUxZjMz
OTVmMmI1Li4yMjFhM2QxYjA0OWQ1NmMwODc5YTUzMjM5MTA1MDczMmM5MmIzNDMyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC00NzAxLDYgKzQ3MDEsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL25l
dHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0
d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29y
ay9CbG9iU3RvcmFnZURhdGEuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9Db250
ZW50VHlwZVBhcnNlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQ29udGVu
dFR5cGVQYXJzZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFs
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvRE5TLmgnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Db250ZW50VHlwZVBhcnNlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NvbnRlbnRUeXBlUGFyc2VyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42NDc4ZDliYTdiMDBkNDQzNDU1ZWExYmYxM2VlYTM3ZGI4YTViZDM2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Db250ZW50VHlwZVBh
cnNlci5jcHAKQEAgLTAsMCArMSwyMjEgQEAKKyAvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNvbnRlbnRUeXBlUGFyc2VyLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyB2b2lkIHNraXBTcGFjZXMoY29uc3QgU3RyaW5nJiBpbnB1dCwgc2l6ZV90JiBz
dGFydEluZGV4KQoreworICAgIHdoaWxlIChzdGFydEluZGV4IDwgaW5wdXQubGVuZ3RoKCkgJiYg
aW5wdXRbc3RhcnRJbmRleF0gPT0gJyAnKQorICAgICAgICArK3N0YXJ0SW5kZXg7Cit9CisKK3N0
YXRpYyBib29sIGlzVG9rZW5DaGFyYWN0ZXIoY2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJ
KGMpICYmIGMgPiAnICcgJiYgYyAhPSAnIicgJiYgYyAhPSAnKCcgJiYgYyAhPSAnKScgJiYgYyAh
PSAnLCcgJiYgYyAhPSAnLycgJiYgKGMgPCAnOicgfHwgYyA+ICdAJykgJiYgKGMgPCAnWycgfHwg
YyA+ICddJyk7Cit9CisKK3N0YXRpYyBTdHJpbmcgcGFyc2VUb2tlbihjb25zdCBTdHJpbmcmIGlu
cHV0LCBzaXplX3QmIHN0YXJ0SW5kZXgpCit7CisgICAgaWYgKHN0YXJ0SW5kZXggPj0gaW5wdXQu
bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKKyAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGlucHV0Lmxlbmd0aCgpKSB7
CisgICAgICAgIGNoYXIgY3VycmVudENoYXJhY3RlciA9IGlucHV0W3N0YXJ0SW5kZXhdOworICAg
ICAgICBpZiAoIWlzVG9rZW5DaGFyYWN0ZXIoY3VycmVudENoYXJhY3RlcikpCisgICAgICAgICAg
ICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgKytzdGFydEluZGV4OworICAgIH0K
KyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitzdGF0aWMgU3RyaW5n
IHBhcnNlUXVvdGVkU3RyaW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIHNpemVfdCYgc3RhcnRJbmRl
eCkKK3sKKyAgICBpZiAoc3RhcnRJbmRleCA+PSBpbnB1dC5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgaWYgKGlucHV0W3N0YXJ0SW5kZXgrK10gIT0gJyInIHx8IHN0
YXJ0SW5kZXggPj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBib29sIGxhc3RDaGFyYWN0ZXJX
YXNCYWNrc2xhc2ggPSBmYWxzZTsKKyAgICBjaGFyIGN1cnJlbnRDaGFyYWN0ZXI7CisgICAgd2hp
bGUgKChjdXJyZW50Q2hhcmFjdGVyID0gaW5wdXRbc3RhcnRJbmRleCsrXSkgIT0gJyInIHx8IGxh
c3RDaGFyYWN0ZXJXYXNCYWNrc2xhc2gpIHsKKyAgICAgICAgaWYgKHN0YXJ0SW5kZXggPj0gaW5w
dXQubGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIGlmIChj
dXJyZW50Q2hhcmFjdGVyID09ICdcXCcgJiYgIWxhc3RDaGFyYWN0ZXJXYXNCYWNrc2xhc2gpIHsK
KyAgICAgICAgICAgIGxhc3RDaGFyYWN0ZXJXYXNCYWNrc2xhc2ggPSB0cnVlOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxhc3RDaGFyYWN0ZXJXYXNCYWNr
c2xhc2gpCisgICAgICAgICAgICBsYXN0Q2hhcmFjdGVyV2FzQmFja3NsYXNoID0gZmFsc2U7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGN1cnJlbnRDaGFyYWN0ZXIpOworICAgIH0KKyAg
ICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitDb250ZW50VHlwZVBhcnNl
cjo6Q29udGVudFR5cGVQYXJzZXIoY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKKyAgICA6IG1f
Y29udGVudFR5cGUoY29udGVudFR5cGUuc3RyaXBXaGl0ZVNwYWNlKCkpCit7CisgICAgcGFyc2Uo
KTsKK30KKworU3RyaW5nIENvbnRlbnRUeXBlUGFyc2VyOjpjaGFyc2V0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gcGFyYW1ldGVyVmFsdWVGb3JOYW1lKCJjaGFyc2V0Iik7Cit9CisKK1N0cmluZyBD
b250ZW50VHlwZVBhcnNlcjo6cGFyYW1ldGVyVmFsdWVGb3JOYW1lKGNvbnN0IFN0cmluZyYgbmFt
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldChuYW1lKTsKK30KKworc2l6
ZV90IENvbnRlbnRUeXBlUGFyc2VyOjpwYXJhbWV0ZXJDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcGFyYW1ldGVycy5zaXplKCk7Cit9CisKKy8vIEZyb20gaHR0cDovL3Rvb2xzLmlldGYu
b3JnL2h0bWwvcmZjMjA0NSNzZWN0aW9uLTUuMToKKy8vCisvLyBjb250ZW50IDo9ICJDb250ZW50
LVR5cGUiICI6IiB0eXBlICIvIiBzdWJ0eXBlCisvLyAgICAgICAgICAgICooIjsiIHBhcmFtZXRl
cikKKy8vICAgICAgICAgICAgOyBNYXRjaGluZyBvZiBtZWRpYSB0eXBlIGFuZCBzdWJ0eXBlCisv
LyAgICAgICAgICAgIDsgaXMgQUxXQVlTIGNhc2UtaW5zZW5zaXRpdmUuCisvLworLy8gdHlwZSA6
PSBkaXNjcmV0ZS10eXBlIC8gY29tcG9zaXRlLXR5cGUKKy8vCisvLyBkaXNjcmV0ZS10eXBlIDo9
ICJ0ZXh0IiAvICJpbWFnZSIgLyAiYXVkaW8iIC8gInZpZGVvIiAvCisvLyAgICAgICAgICAgICAg
ICAgICJhcHBsaWNhdGlvbiIgLyBleHRlbnNpb24tdG9rZW4KKy8vCisvLyBjb21wb3NpdGUtdHlw
ZSA6PSAibWVzc2FnZSIgLyAibXVsdGlwYXJ0IiAvIGV4dGVuc2lvbi10b2tlbgorLy8KKy8vIGV4
dGVuc2lvbi10b2tlbiA6PSBpZXRmLXRva2VuIC8geC10b2tlbgorLy8KKy8vIGlldGYtdG9rZW4g
Oj0gPEFuIGV4dGVuc2lvbiB0b2tlbiBkZWZpbmVkIGJ5IGEKKy8vICAgICAgICAgICAgICAgIHN0
YW5kYXJkcy10cmFjayBSRkMgYW5kIHJlZ2lzdGVyZWQKKy8vICAgICAgICAgICAgICAgIHdpdGgg
SUFOQS4+CisvLworLy8geC10b2tlbiA6PSA8VGhlIHR3byBjaGFyYWN0ZXJzICJYLSIgb3IgIngt
IiBmb2xsb3dlZCwgd2l0aAorLy8gICAgICAgICAgICAgbm8gaW50ZXJ2ZW5pbmcgd2hpdGUgc3Bh
Y2UsIGJ5IGFueSB0b2tlbj4KKy8vCisvLyBzdWJ0eXBlIDo9IGV4dGVuc2lvbi10b2tlbiAvIGlh
bmEtdG9rZW4KKy8vCisvLyBpYW5hLXRva2VuIDo9IDxBIHB1YmxpY2x5LWRlZmluZWQgZXh0ZW5z
aW9uIHRva2VuLiBUb2tlbnMKKy8vICAgICAgICAgICAgICAgIG9mIHRoaXMgZm9ybSBtdXN0IGJl
IHJlZ2lzdGVyZWQgd2l0aCBJQU5BCisvLyAgICAgICAgICAgICAgICBhcyBzcGVjaWZpZWQgaW4g
UkZDIDIwNDguPgorLy8KKy8vIHBhcmFtZXRlciA6PSBhdHRyaWJ1dGUgIj0iIHZhbHVlCisvLwor
Ly8gYXR0cmlidXRlIDo9IHRva2VuCisvLyAgICAgICAgICAgICAgOyBNYXRjaGluZyBvZiBhdHRy
aWJ1dGVzCisvLyAgICAgICAgICAgICAgOyBpcyBBTFdBWVMgY2FzZS1pbnNlbnNpdGl2ZS4KKy8v
CisvLyB2YWx1ZSA6PSB0b2tlbiAvIHF1b3RlZC1zdHJpbmcKKy8vCisvLyB0b2tlbiA6PSAxKjxh
bnkgKFVTLUFTQ0lJKSBDSEFSIGV4Y2VwdCBTUEFDRSwgQ1RMcywKKy8vICAgICAgICAgICAgIG9y
IHRzcGVjaWFscz4KKy8vCisvLyB0c3BlY2lhbHMgOj0gICIoIiAvICIpIiAvICI8IiAvICI+IiAv
ICJAIiAvCisvLyAgICAgICAgICAgICAgICIsIiAvICI7IiAvICI6IiAvICJcIiAvIDwiPgorLy8g
ICAgICAgICAgICAgICAiLyIgLyAiWyIgLyAiXSIgLyAiPyIgLyAiPSIKKy8vICAgICAgICAgICAg
ICAgOyBNdXN0IGJlIGluIHF1b3RlZC1zdHJpbmcsCisvLyAgICAgICAgICAgICAgIDsgdG8gdXNl
IHdpdGhpbiBwYXJhbWV0ZXIgdmFsdWVzCisKK3ZvaWQgQ29udGVudFR5cGVQYXJzZXI6OnBhcnNl
KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgY29udGVudFR5cGVQ
YXJhbWV0ZXJOYW1lLCAoIkNvbnRlbnQtVHlwZSIpKTsKKworICAgIGlmICghbV9jb250ZW50VHlw
ZS5zdGFydHNXaXRoKGNvbnRlbnRUeXBlUGFyYW1ldGVyTmFtZSkpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJJbnZhbGlkIENvbnRlbnQtVHlwZSBzdHJpbmcgJyVzJyIsIG1fY29udGVudFR5cGUuYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNpemVfdCBjb250ZW50
VHlwZUxlbmd0aCA9IG1fY29udGVudFR5cGUubGVuZ3RoKCk7CisgICAgc2l6ZV90IGluZGV4ID0g
Y29udGVudFR5cGVQYXJhbWV0ZXJOYW1lLmxlbmd0aCgpOworICAgIHNraXBTcGFjZXMobV9jb250
ZW50VHlwZSwgaW5kZXgpOworICAgIGlmIChpbmRleCA+PSBjb250ZW50VHlwZUxlbmd0aCB8fCBt
X2NvbnRlbnRUeXBlW2luZGV4XSAhPSAnOicgfHwgKytpbmRleCA+PSBjb250ZW50VHlwZUxlbmd0
aCkgIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIENvbnRlbnQtVHlwZSBzdHJpbmcgJyVz
JyIsIG1fY29udGVudFR5cGUuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gVGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgcXVvdGVkIHN0cmluZ3MgdW50aWwg
d2UgcmVhY2ggdGhlIHBhcmFtZXRlcnMuCisgICAgc2l6ZV90IHNlbWlDb2xvbkluZGV4ID0gbV9j
b250ZW50VHlwZS5maW5kKCc7JywgaW5kZXgpOworICAgIGlmIChzZW1pQ29sb25JbmRleCA9PSBu
b3RGb3VuZCkgeworICAgICAgICBtX21pbWVUeXBlID0gbV9jb250ZW50VHlwZS5zdWJzdHJpbmco
aW5kZXgpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9taW1lVHlwZSA9IG1fY29udGVudFR5cGUuc3Vic3RyaW5nKGluZGV4LCBzZW1pQ29sb25JbmRl
eCAtIGluZGV4KS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICBpbmRleCA9IHNlbWlDb2xvbkluZGV4
ICsgMTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBza2lwU3BhY2VzKG1fY29udGVudFR5
cGUsIGluZGV4KTsKKyAgICAgICAgU3RyaW5nIGtleSA9IHBhcnNlVG9rZW4obV9jb250ZW50VHlw
ZSwgaW5kZXgpOworICAgICAgICBpZiAoa2V5LmlzRW1wdHkoKSB8fCBpbmRleCA+PSBjb250ZW50
VHlwZUxlbmd0aCkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIENvbnRlbnQtVHlw
ZSBwYXJhbWV0ZXIgbmFtZS4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAvLyBTaG91bGQgd2UgdG9sZXJhdGUgc3BhY2VzIGhlcmU/CisgICAgICAgIGlmIChtX2Nv
bnRlbnRUeXBlW2luZGV4KytdICE9ICc9JyB8fCBpbmRleCA+PSBjb250ZW50VHlwZUxlbmd0aCkg
eworICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIENvbnRlbnQtVHlwZSBtYWxmb3JtZWQg
cGFyYW1ldGVyLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gU2hvdWxkIHdlIHRvbGVyYXRlIHNwYWNlcyBoZXJlPworICAgICAgICBTdHJpbmcgdmFsdWU7
CisgICAgICAgIGlmIChtX2NvbnRlbnRUeXBlW2luZGV4XSA9PSAnIicpCisgICAgICAgICAgICB2
YWx1ZSA9IHBhcnNlUXVvdGVkU3RyaW5nKG1fY29udGVudFR5cGUsIGluZGV4KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVRva2VuKG1fY29udGVudFR5cGUsIGluZGV4
KTsKKworICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIExPR19FUlJP
UigiSW52YWxpZCBDb250ZW50LVR5cGUsIGludmFsaWQgcGFyYW1ldGVyIHZhbHVlLiIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2hvdWxkIHdlIHRvbGVy
YXRlIHNwYWNlcyBoZXJlPworICAgICAgICBpZiAoaW5kZXggPCBjb250ZW50VHlwZUxlbmd0aCAm
JiBtX2NvbnRlbnRUeXBlW2luZGV4KytdICE9ICc7JykgeworICAgICAgICAgICAgTE9HX0VSUk9S
KCJJbnZhbGlkIENvbnRlbnQtVHlwZSwgaW52YWxpZCBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiBr
ZXkvdmFsdWUgcGFyYW1ldGVyLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgbV9wYXJhbWV0ZXJzLnNldChrZXksIHZhbHVlKTsKKworICAgICAgICBpZiAoaW5k
ZXggPj0gY29udGVudFR5cGVMZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NvbnRlbnRU
eXBlUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NvbnRlbnRUeXBl
UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDY1N2IwMTMzZGRmYjYwZDc3NWI5NmRjMDMyNWI0Yzc1ZWIy
ZmU3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q29udGVudFR5cGVQYXJzZXIuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb250ZW50VHlwZVBh
cnNlcl9oCisjZGVmaW5lIENvbnRlbnRUeXBlUGFyc2VyX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiBhZGQg
c3VwcG9ydCBmb3IgY29tbWVudHMuCitjbGFzcyBDb250ZW50VHlwZVBhcnNlciB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgQ29udGVudFR5cGVQYXJzZXIoY29uc3QgU3RyaW5nJik7CisKKyAgICBT
dHJpbmcgbWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX21pbWVUeXBlOyB9CisgICAgU3RyaW5n
IGNoYXJzZXQoKSBjb25zdDsKKworICAgIC8vIE5vdGUgdGhhdCBpbiB0aGUgY2FzZSBvZiBtdWx0
aXBsZSB2YWx1ZXMgZm9yIHRoZSBzYW1lIG5hbWUsIHRoZSBsYXN0IHZhbHVlIGlzIHJldHVybmVk
LgorICAgIFN0cmluZyBwYXJhbWV0ZXJWYWx1ZUZvck5hbWUoY29uc3QgU3RyaW5nJikgY29uc3Q7
CisgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBwYXJzZSgpOworCisgICAgU3RyaW5nIG1fY29udGVudFR5cGU7CisKKyAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IEtleVZhbHVlUGFpcnM7CisgICAgS2V5VmFsdWVQYWlycyBt
X3BhcmFtZXRlcnM7CisgICAgU3RyaW5nIG1fbWltZVR5cGU7Cit9OworCit9CisKKyNlbmRpZgor
CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>93218</attachid>
            <date>2011-05-11 17:25:28 -0700</date>
            <delta_ts>2011-05-11 17:25:28 -0700</delta_ts>
            <desc>ContentTypeParser unit-tests</desc>
            <filename>content_type_parser_unittests</filename>
            <type>application/octet-stream</type>
            <size>5261</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">CnN0YXRpYyB2b2lkIGNyYXNoKCkKewogICAgaW50KiBwdHIgPSAwOwogICAgKnB0ciA9IDA7Cn0K
CnN0YXRpYyB2b2lkIHRlc3RDb250ZW50VHlwZVBhcnNlcigpCnsKICAgIGNvbnN0IGNoYXIqIGNv
bnN0IGlucHV0c1tdID0gewogICAgICAgICIiLAogICAgICAgICJIZWxsbyIsCiAgICAgICAgIkNv
bnRlbnQtVHlwZSIsCiAgICAgICAgImNvbnRlbnQtdHlwZSIsCiAgICAgICAgIkNvbnRlbnQtVHlw
ZSAgICIsCiAgICAgICAgIkNvbnRlbnQtVHlwZWJsYWJsYWgiLAogICAgICAgICJDb250ZW50LVR5
cGUgOiB0ZXh0L3BsYWluIiwKICAgICAgICAiQ29udGVudC1UeXBlOnRleHQvcGxhaW4iLAogICAg
ICAgICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW4gIiwKICAgICAgICAiQ29udGVudC1UeXBlOiB0
ZXh0L3BsYWluOyIsCiAgICAgICAgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgICIsIC8vIDEw
CgogICAgICAgICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IHBhcmFtIiwKICAgICAgICAiQ29u
dGVudC1UeXBlOiB0ZXh0L3BsYWluOyBwYXJhbSAgIiwKICAgICAgICAiQ29udGVudC1UeXBlOiB0
ZXh0L3BsYWluOyBwYXJhbT0iLAogICAgICAgICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IHBh
cmFtPSAgIiwKICAgICAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBwYXJdW2FtPSAgIiwK
ICAgICAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBwYXJhbSonIT0gICIsCiAgICAgICAg
IkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgcGFyIGFtIiwKICAgICAgICAiQ29udGVudC1UeXBl
OiB0ZXh0L3BsYWluOyBwYXJhbTE9b25lIiwKICAgICAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3Bs
YWluOyBwYXJhbTE9b25lOyIsCiAgICAgICAgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgcGFy
YW0xPVwiIiwgLy8gMjAKCiAgICAgICAgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgcGFyYW0x
PVwiXCI7IiwKICAgICAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBwYXJhbTE9dW5xdW90
ZWQgc3BhY2UgaXMgYmFkO3BhcmFtMj0yIiwKICAgICAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3Bs
YWluOyBwYXJhbTE9XCJcdCFAIyQlIHdlaXJkIGNoYXJzIVxcXCJcXFxcXCIiLAogICAgICAgICJD
b250ZW50LVR5cGU6IHRleHQvcGxhaW47IHBhcmFtMT1cIm8gbiBlXCI7cGFyYW0yPTI7cGFyYW0z
PVwidGhyZWVcIiIsCiAgICAgICAgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgcGFyYW0xPVwi
XFxvXFxuXFxlXCIiLAogICAgICAgICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IHBhcmFtMT1v
bmU7cGFyYW0xPXR3bztwYXJhbTE9dGhyZWUiLAogICAgfTsKICAgIGNvbnN0IHNpemVfdCBpbnB1
dHNMZW5ndGggPSBzaXplb2YoaW5wdXRzKSAvIHNpemVvZihjaGFyKik7CgogICAgY29uc3QgY2hh
ciogY29uc3QgZXhwZWN0ZWRNSU1FVHlwZXNbXSA9IHsKICAgICAgICAiIiwKICAgICAgICAiIiwK
ICAgICAgICAiIiwKICAgICAgICAiIiwKICAgICAgICAiIiwKICAgICAgICAiIiwKICAgICAgICAi
dGV4dC9wbGFpbiIsCiAgICAgICAgInRleHQvcGxhaW4iLAogICAgICAgICJ0ZXh0L3BsYWluIiwK
ICAgICAgICAidGV4dC9wbGFpbiIsCiAgICAgICAgInRleHQvcGxhaW4iLAoKICAgICAgICAidGV4
dC9wbGFpbiIsCiAgICAgICAgInRleHQvcGxhaW4iLAogICAgICAgICJ0ZXh0L3BsYWluIiwKICAg
ICAgICAidGV4dC9wbGFpbiIsCiAgICAgICAgInRleHQvcGxhaW4iLAogICAgICAgICJ0ZXh0L3Bs
YWluIiwKICAgICAgICAidGV4dC9wbGFpbiIsCiAgICAgICAgInRleHQvcGxhaW4iLAogICAgICAg
ICJ0ZXh0L3BsYWluIiwKICAgICAgICAidGV4dC9wbGFpbiIsCiAgICAgICAgInRleHQvcGxhaW4i
LAogICAgICAgICJ0ZXh0L3BsYWluIiwKICAgICAgICAidGV4dC9wbGFpbiIsCiAgICAgICAgInRl
eHQvcGxhaW4iLAogICAgICAgICJ0ZXh0L3BsYWluIiwKICAgICAgICAidGV4dC9wbGFpbiIsCiAg
ICB9OwogICAgY29uc3Qgc2l6ZV90IGV4cGVjdGVkTUlNRVR5cGVzTGVuZ3RoID0gc2l6ZW9mKGV4
cGVjdGVkTUlNRVR5cGVzKSAvIHNpemVvZihjaGFyKik7CgogICAgY29uc3QgY2hhciogY29uc3Qg
ZXhwZWN0ZWRQYXJhbXNbXVszXSA9IHsKICAgICAgICB7ICJudWxsIiwgIm51bGwiLCAibnVsbCIg
fSwKICAgICAgICB7ICJudWxsIiwgIm51bGwiLCAibnVsbCIgfSwKICAgICAgICB7ICJudWxsIiwg
Im51bGwiLCAibnVsbCIgfSwKICAgICAgICB7ICJudWxsIiwgIm51bGwiLCAibnVsbCIgfSwKICAg
ICAgICB7ICJudWxsIiwgIm51bGwiLCAibnVsbCIgfSwKICAgICAgICB7ICJudWxsIiwgIm51bGwi
LCAibnVsbCIgfSwKICAgICAgICB7ICJudWxsIiwgIm51bGwiLCAibnVsbCIgfSwKICAgICAgICB7
ICJudWxsIiwgIm51bGwiLCAibnVsbCIgfSwKICAgICAgICB7ICJudWxsIiwgIm51bGwiLCAibnVs
bCIgfSwKICAgICAgICB7ICJudWxsIiwgIm51bGwiLCAibnVsbCIgfSwKICAgICAgICB7ICJudWxs
IiwgIm51bGwiLCAibnVsbCIgfSwgLy8gMTAKCiAgICAgICAgeyAibnVsbCIsICJudWxsIiwgIm51
bGwiIH0sCiAgICAgICAgeyAibnVsbCIsICJudWxsIiwgIm51bGwiIH0sCiAgICAgICAgeyAibnVs
bCIsICJudWxsIiwgIm51bGwiIH0sCiAgICAgICAgeyAibnVsbCIsICJudWxsIiwgIm51bGwiIH0s
CiAgICAgICAgeyAibnVsbCIsICJudWxsIiwgIm51bGwiIH0sCiAgICAgICAgeyAibnVsbCIsICJu
dWxsIiwgIm51bGwiIH0sCiAgICAgICAgeyAibnVsbCIsICJudWxsIiwgIm51bGwiIH0sCiAgICAg
ICAgeyAib25lIiwgIm51bGwiLCAibnVsbCIgfSwKICAgICAgICB7ICJvbmUiLCAibnVsbCIsICJu
dWxsIiB9LAogICAgICAgIHsgIm51bGwiLCAibnVsbCIsICJudWxsIiB9LCAvLyAyMAogICAgICAg
IHsgIiIsICJudWxsIiwgIm51bGwiIH0sCiAgICAgICAgeyAibnVsbCIsICJudWxsIiwgIm51bGwi
IH0sCiAgICAgICAgeyAiXHQhQCMkJSB3ZWlyZCBjaGFycyFcIlxcIiwgIm51bGwiLCAibnVsbCIg
fSwKICAgICAgICB7ICJvIG4gZSIsICIyIiwgInRocmVlIiB9LAogICAgICAgIHsgIm9uZSIsICJu
dWxsIiwgIm51bGwiIH0sCiAgICAgICAgeyAidGhyZWUiLCAibnVsbCIsICJudWxsIiB9LAogICAg
fTsKICAgIGNvbnN0IHNpemVfdCBleHBlY3RlZFBhcmFtc0xlbmd0aCA9IHNpemVvZihleHBlY3Rl
ZFBhcmFtcykgLyAoMyAqIHNpemVvZihjaGFyKikpOwoKICAgIGNvbnN0IHNpemVfdCBleHBlY3Rl
ZFBhcmFtZXRlckNvdW50c1tdID0gewogICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsCiAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMSwgMywg
MSwgMQogICAgfTsKICAgIGNvbnN0IHNpemVfdCBleHBlY3RlZFBhcmFtZXRlckNvdW50c0xlbmd0
aCA9IHNpemVvZihleHBlY3RlZFBhcmFtZXRlckNvdW50cykgLyBzaXplb2Yoc2l6ZV90KTsKCiAg
ICBpZiAoaW5wdXRzTGVuZ3RoICE9IGV4cGVjdGVkTUlNRVR5cGVzTGVuZ3RoIHx8IGV4cGVjdGVk
TUlNRVR5cGVzTGVuZ3RoICE9IGV4cGVjdGVkUGFyYW1zTGVuZ3RoIHx8IGV4cGVjdGVkUGFyYW1z
TGVuZ3RoICE9IGV4cGVjdGVkUGFyYW1ldGVyQ291bnRzTGVuZ3RoKQogICAgICAgIGNyYXNoKCk7
CgogICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dHNMZW5ndGg7ICsraSkgewogICAgICAg
IENvbnRlbnRUeXBlUGFyc2VyIHBhcnNlcihpbnB1dHNbaV0pOwogICAgICAgIGlmICghc3RybGVu
KGV4cGVjdGVkTUlNRVR5cGVzW2ldKSkgewogICAgICAgICAgICBpZiAoIShwYXJzZXIubWltZVR5
cGUoKS5pc051bGwoKSkpCiAgICAgICAgICAgICAgICBjcmFzaCgpOwogICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICB9CgogICAgICAgIGlmIChwYXJzZXIubWltZVR5cGUoKSAhPSBleHBlY3Rl
ZE1JTUVUeXBlc1tpXSkgewogICAgICAgICAgICBMT0dfRVJST1IoIkJhZCBNSU1FIHR5cGU6IGV4
cGVjdGVkICclcycgZ290ICclcyciLCBleHBlY3RlZE1JTUVUeXBlc1tpXSwgcGFyc2VyLm1pbWVU
eXBlKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICAgICBjcmFzaCgpOwogICAgICAgIH0KCiAg
ICAgICAgaWYgKGV4cGVjdGVkUGFyYW1ldGVyQ291bnRzW2ldICE9IHBhcnNlci5wYXJhbWV0ZXJD
b3VudCgpKQogICAgICAgICAgICBjcmFzaCgpOwoKICAgICAgICBTdHJpbmcgdmFsdWUgPSBwYXJz
ZXIucGFyYW1ldGVyVmFsdWVGb3JOYW1lKCJwYXJhbTEiKTsKICAgICAgICBpZiAoKHZhbHVlLmlz
TnVsbCgpICYmIHN0cmNtcChleHBlY3RlZFBhcmFtc1tpXVswXSwgIm51bGwiKSkgfHwgKCF2YWx1
ZS5pc051bGwoKSAmJiB2YWx1ZSAhPSBleHBlY3RlZFBhcmFtc1tpXVswXSkpIHsKICAgICAgICAg
ICAgTE9HX0VSUk9SKCJCYWQgcGFyYW0xLCBleHBlY3RlZCAnJXMnIGdvdCAnJXMnIiwgZXhwZWN0
ZWRQYXJhbXNbaV1bMF0sIHZhbHVlLmlzTnVsbCgpID8gIm51bGwgc3RyaW5nIiA6IHZhbHVlLmFz
Y2lpKCkuZGF0YSgpKTsKICAgICAgICAgICAgY3Jhc2goKTsKICAgICAgICB9CgogICAgICAgIHZh
bHVlID0gcGFyc2VyLnBhcmFtZXRlclZhbHVlRm9yTmFtZSgicGFyYW0yIik7CiAgICAgICAgaWYg
KCh2YWx1ZS5pc051bGwoKSAmJiBzdHJjbXAoZXhwZWN0ZWRQYXJhbXNbaV1bMV0sICJudWxsIikp
IHx8ICghdmFsdWUuaXNOdWxsKCkgJiYgdmFsdWUgIT0gZXhwZWN0ZWRQYXJhbXNbaV1bMV0pKSB7
CiAgICAgICAgICAgIExPR19FUlJPUigiQmFkIHBhcmFtMiwgZXhwZWN0ZWQgJyVzJyBnb3QgJyVz
JyIsIGV4cGVjdGVkUGFyYW1zW2ldWzFdLCB2YWx1ZS5pc051bGwoKSA/ICJudWxsIHN0cmluZyIg
OiB2YWx1ZS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgICAgIGNyYXNoKCk7CiAgICAgICAgfQoK
ICAgICAgICB2YWx1ZSA9IHBhcnNlci5wYXJhbWV0ZXJWYWx1ZUZvck5hbWUoInBhcmFtMyIpOwog
ICAgICAgIGlmICgodmFsdWUuaXNOdWxsKCkgJiYgc3RyY21wKGV4cGVjdGVkUGFyYW1zW2ldWzJd
LCAibnVsbCIpKSB8fCAoIXZhbHVlLmlzTnVsbCgpICYmIHZhbHVlICE9IGV4cGVjdGVkUGFyYW1z
W2ldWzJdKSkgewogICAgICAgICAgICBMT0dfRVJST1IoIkJhZCBwYXJhbTMsIGV4cGVjdGVkICcl
cycgZ290ICclcyciLCBleHBlY3RlZFBhcmFtc1tpXVsyXSwgdmFsdWUuaXNOdWxsKCkgPyAibnVs
bCBzdHJpbmciIDogdmFsdWUuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICAgICBjcmFzaCgpOwog
ICAgICAgIH0KICAgIH0KfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>