<?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>50182</bug_id>
          
          <creation_ts>2010-11-29 14:07:59 -0800</creation_ts>
          <short_desc>Introduce the notion of a &quot;display-isolated&quot; URL scheme for use by Chrome-internal URLs</short_desc>
          <delta_ts>2011-01-11 14:53:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>fishd</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>314628</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-29 14:07:59 -0800</bug_when>
    <thetext>Introduce the notion of a &quot;display-isolated&quot; URL scheme for use by Chrome-internal URLs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314639</commentid>
    <comment_count>1</comment_count>
      <attachid>75059</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-29 14:18:29 -0800</bug_when>
    <thetext>Created attachment 75059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314642</commentid>
    <comment_count>2</comment_count>
      <attachid>75060</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-29 14:20:21 -0800</bug_when>
    <thetext>Created attachment 75060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314643</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-29 14:20:48 -0800</bug_when>
    <thetext>More context here:
http://groups.google.com/a/chromium.org/group/chromium-dev/browse_thread/thread/863700bf99b3f3ed#</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314646</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-29 14:23:33 -0800</bug_when>
    <thetext>See also http://codereview.chromium.org/5268006, which is the Chrome side of the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314650</commentid>
    <comment_count>5</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-11-29 14:27:38 -0800</bug_when>
    <thetext>Attachment 75059 did not build on qt:
Build output: http://queues.webkit.org/results/6384096</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314654</commentid>
    <comment_count>6</comment_count>
      <attachid>75060</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-29 14:32:36 -0800</bug_when>
    <thetext>Comment on attachment 75060
Patch

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

I have enough questions about this that I’m going to say review- for now, but it may just be my misunderstanding rather than defects in the patch.

&gt; WebCore/page/SecurityOrigin.cpp:-313
&gt; -    if (!SchemeRegistry::shouldTreatURLAsLocal(url.string()))
&gt; -        return true;

Since you’re changing this policy, how do we maintain compatibility with existing Mac OS X applications using the public API, +[WebKit registerURLSchemeAsLocal:], and expecting this behavior?

&gt; WebCore/platform/SchemeRegistry.cpp:-95
&gt; -    if (scheme == &quot;file&quot;)
&gt; -        return;
&gt; -#if PLATFORM(MAC)
&gt; -    if (scheme == &quot;applewebdata&quot;)
&gt; -        return;
&gt; -#endif

Why did you remove this?

&gt; WebCore/platform/SchemeRegistry.cpp:-134
&gt; -    // This avoids an allocation of another String and the HashSet contains()
&gt; -    // call for the file: and http: schemes.
&gt; -    if (scheme.length() == 4) {
&gt; -        const UChar* s = scheme.characters();
&gt; -        if (s[0] == &apos;h&apos; &amp;&amp; s[1] == &apos;t&apos; &amp;&amp; s[2] == &apos;t&apos; &amp;&amp; s[3] == &apos;p&apos;)
&gt; -            return false;
&gt; -        if (s[0] == &apos;f&apos; &amp;&amp; s[1] == &apos;i&apos; &amp;&amp; s[2] == &apos;l&apos; &amp;&amp; s[3] == &apos;e&apos;)
&gt; -            return true;
&gt; -    }

What’s the rationale for removing this fast path?

&gt; WebCore/platform/SchemeRegistry.cpp:116
&gt; -    if (scheme.isEmpty())
&gt; -        return false;
&gt; -
&gt; -    return WebCore::localURLSchemes().contains(scheme);
&gt; +    return localURLSchemes().contains(scheme);

Why isn’t the isEmpty change needed any more? Does function still work for both null strings and empty strings? If not, did you audit the callers or do something else?

&gt; WebKit/chromium/public/WebSecurityPolicy.h:53
&gt; +    // Registers a URL scheme to be treated as display-isolated.  This means

Double space after period here. Are you a conscientious objector?

&gt; WebKit/chromium/public/WebSecurityPolicy.h:54
&gt; +    // that pages cannot dispaly these URLs unless they from the same scheme.

Typo: “dispaly”
Typo: “they from”</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314656</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-29 14:33:11 -0800</bug_when>
    <thetext>Is there a way to isolate the addition of the new “display-isolated” feature from the refactoring and change in the behavior of existing features?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314659</commentid>
    <comment_count>8</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-11-29 14:36:39 -0800</bug_when>
    <thetext>Attachment 75060 did not build on qt:
Build output: http://queues.webkit.org/results/6459006</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314672</commentid>
    <comment_count>9</comment_count>
      <attachid>75060</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-29 14:59:26 -0800</bug_when>
    <thetext>Comment on attachment 75060
Patch

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

&gt;&gt; WebCore/page/SecurityOrigin.cpp:-313
&gt;&gt; -    if (!SchemeRegistry::shouldTreatURLAsLocal(url.string()))
&gt;&gt; -        return true;
&gt; 
&gt; Since you’re changing this policy, how do we maintain compatibility with existing Mac OS X applications using the public API, +[WebKit registerURLSchemeAsLocal:], and expecting this behavior?

This shouldn&apos;t affect +[WebKit registerURLSchemeAsLocal:].  The diff is just confusing.  Notice that this branch now occurs on line 320.  The only difference is that we&apos;re using the protocol from the parsed URL instead of having shouldTreatURLAsLocal &quot;reparse&quot; the URL.

&gt;&gt; WebCore/platform/SchemeRegistry.cpp:-95
&gt;&gt; -void SchemeRegistry::removeURLSchemeRegisteredAsLocal(const String&amp; scheme)
&gt;&gt; -{
&gt;&gt; -    if (scheme == &quot;file&quot;)
&gt;&gt; -        return;
&gt;&gt; -#if PLATFORM(MAC)
&gt;&gt; -    if (scheme == &quot;applewebdata&quot;)
&gt;&gt; -        return;
&gt;&gt; -#endif
&gt; 
&gt; Why did you remove this?

Because I couldn&apos;t find any callers, but it looks like I didn&apos;t search widely enough as Qt seems to use it.  :)

&gt;&gt; WebCore/platform/SchemeRegistry.cpp:-134
&gt;&gt; -    // This avoids an allocation of another String and the HashSet contains()
&gt;&gt; -    // call for the file: and http: schemes.
&gt;&gt; -    if (scheme.length() == 4) {
&gt;&gt; -        const UChar* s = scheme.characters();
&gt;&gt; -        if (s[0] == &apos;h&apos; &amp;&amp; s[1] == &apos;t&apos; &amp;&amp; s[2] == &apos;t&apos; &amp;&amp; s[3] == &apos;p&apos;)
&gt;&gt; -            return false;
&gt;&gt; -        if (s[0] == &apos;f&apos; &amp;&amp; s[1] == &apos;i&apos; &amp;&amp; s[2] == &apos;l&apos; &amp;&amp; s[3] == &apos;e&apos;)
&gt;&gt; -            return true;
&gt;&gt; -    }
&gt; 
&gt; What’s the rationale for removing this fast path?

It looks a lot like premature optimization.  Do you know of any benchmark that&apos;s affected by this change?  If so, we should add &quot;https&quot; to the list least secure pages be disadvantaged.

&gt;&gt; WebCore/platform/SchemeRegistry.cpp:116
&gt;&gt; +    return localURLSchemes().contains(scheme);
&gt; 
&gt; Why isn’t the isEmpty change needed any more? Does function still work for both null strings and empty strings? If not, did you audit the callers or do something else?

None of the other similar functions have a special-case for the empty scheme.  To get different behavior, someone would have to call this function with an empty string (which doesn&apos;t make sense because URL can&apos;t have an empty scheme) and someone would have to register the empty string as a local URL (which also doesn&apos;t make sense for the same reason).

In any case, I can restore this function to its previous form and post these changes separately.

&gt;&gt; WebKit/chromium/public/WebSecurityPolicy.h:53
&gt;&gt; +    // Registers a URL scheme to be treated as display-isolated.  This means
&gt; 
&gt; Double space after period here. Are you a conscientious objector?

I don&apos;t mean to be a conscientious objector.  I do a lot of writing and almost all of it is in &quot;two space&quot; style.  :(

&gt;&gt; WebKit/chromium/public/WebSecurityPolicy.h:54
&gt;&gt; +    // that pages cannot dispaly these URLs unless they from the same scheme.
&gt; 
&gt; Typo: “dispaly”
&gt; Typo: “they from”

Thanks.  Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314681</commentid>
    <comment_count>10</comment_count>
      <attachid>75070</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-29 15:11:31 -0800</bug_when>
    <thetext>Created attachment 75070
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314698</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-29 15:50:58 -0800</bug_when>
    <thetext>(In reply to comment #9)
t&gt; &gt;&gt; WebCore/platform/SchemeRegistry.cpp:-134
&gt; &gt;&gt; -    // This avoids an allocation of another String and the HashSet contains()
&gt; &gt;&gt; -    // call for the file: and http: schemes.
&gt; &gt;&gt; -    if (scheme.length() == 4) {
&gt; &gt;&gt; -        const UChar* s = scheme.characters();
&gt; &gt;&gt; -        if (s[0] == &apos;h&apos; &amp;&amp; s[1] == &apos;t&apos; &amp;&amp; s[2] == &apos;t&apos; &amp;&amp; s[3] == &apos;p&apos;)
&gt; &gt;&gt; -            return false;
&gt; &gt;&gt; -        if (s[0] == &apos;f&apos; &amp;&amp; s[1] == &apos;i&apos; &amp;&amp; s[2] == &apos;l&apos; &amp;&amp; s[3] == &apos;e&apos;)
&gt; &gt;&gt; -            return true;
&gt; &gt;&gt; -    }
&gt; &gt; 
&gt; &gt; What’s the rationale for removing this fast path?
&gt; 
&gt; It looks a lot like premature optimization. Do you know of any benchmark that&apos;s affected by this change? If so, we should add &quot;https&quot; to the list least secure pages be disadvantaged.

WIth code that is 4 years old (added in http://trac.webkit.org/changeset/19952 in early 2007) I think the burden of proof may go in the other direction. I understand your desire to remove an unhelpful “optimization” and if we can quickly convince ourselves it’s not needed then it does seem good to get rid of it. To maximize our chances of noticing if it causes a problem, it would be best to remove it in a separate patch.

It does seem that the code path is much changed since that original change set. The original fast path was more valuable and avoided more work. The fast path was copied when the “scheme” version was done in http://trac.webkit.org/changeset/28343 nine months later.

&gt; &gt;&gt; WebCore/platform/SchemeRegistry.cpp:116
&gt; &gt;&gt; +    return localURLSchemes().contains(scheme);
&gt; &gt; 
&gt; &gt; Why isn’t the isEmpty change needed any more? Does function still work for both null strings and empty strings? If not, did you audit the callers or do something else?
&gt; 
&gt; None of the other similar functions have a special-case for the empty scheme. To get different behavior, someone would have to call this function with an empty string (which doesn&apos;t make sense because URL can&apos;t have an empty scheme) and someone would have to register the empty string as a local URL (which also doesn&apos;t make sense for the same reason).
&gt; 
&gt; In any case, I can restore this function to its previous form and post these changes separately.

The difference from other functions made me want to research who added the isEmpty and why. It looks like it was included when shouldTreatSchemeAsLocal was added back in r28343.

I think doing it separately would ease my concern a bit; maybe I would not have even squawked if you included a rationale in the change log.

The register functions can definitely be called with the null string and empty string as part of the Mac OS X WebKit API, so those functions need some kind of guard at either the WebKit or WebCore level, or we can just live with crashing if someone passes a nonsensical scheme string.

&gt; I do a lot of writing and almost all of it is in &quot;two space&quot; style.  :(

Same here, but the other way around. But less of my writing ends up published, more’s the pity :-(

Since I was wrong about registerURLSchemeAsLocal, I would like to change my review- to a review+, but I think you have to make changes to compile on Qt anyway, so I’ll leave it for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314713</commentid>
    <comment_count>12</comment_count>
      <attachid>75070</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-29 16:17:07 -0800</bug_when>
    <thetext>Comment on attachment 75070
Patch

Thanks for the review.  I&apos;ll most a separate patch with the controversial parts in a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314844</commentid>
    <comment_count>13</comment_count>
      <attachid>75070</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-29 20:48:53 -0800</bug_when>
    <thetext>Comment on attachment 75070
Patch

Clearing flags on attachment: 75070

Committed r72876: &lt;http://trac.webkit.org/changeset/72876&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314845</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-29 20:48:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332025</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-10 16:04:41 -0800</bug_when>
    <thetext>This was reverted in http://trac.webkit.org/changeset/73002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332063</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-10 17:02:17 -0800</bug_when>
    <thetext>Committed r75455: &lt;http://trac.webkit.org/changeset/75455&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332064</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-10 17:03:23 -0800</bug_when>
    <thetext>Fixed is a bit of a misnomer.  I just landed the routine parts of the old patch.  Looking at the non-routine parts now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332108</commentid>
    <comment_count>18</comment_count>
      <attachid>78487</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-10 18:31:53 -0800</bug_when>
    <thetext>Created attachment 78487
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332183</commentid>
    <comment_count>19</comment_count>
      <attachid>78487</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-11 00:51:40 -0800</bug_when>
    <thetext>Comment on attachment 78487
Patch

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

In general this looks fine.  How do we test this?

&gt; Source/WebCore/page/SecurityOrigin.cpp:306
&gt; +    RefPtr&lt;SecurityOrigin&gt; targetOrigin = SecurityOrigin::create(url);
&gt; +    return isAccessWhiteListed(targetOrigin.get());

Really?  A malloc is required to check a whitelist?

&gt; Source/WebCore/page/SecurityOrigin.cpp:315
&gt; -    if (url.protocolIs(BlobURL::blobProtocol()))
&gt; +    if (protocol == BlobURL::blobProtocol())

How does .protocolIs differ from == ?  I&apos;m reminded of QualifiedName == vs. .matches()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332188</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-11 01:02:39 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 78487 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78487&amp;action=review
&gt; 
&gt; In general this looks fine.  How do we test this?

That&apos;s a good question.  This stuff is really better tested with unit tests.  We could expose APIs in layoutTestController for manipulating these registries, but we wouldn&apos;t be able to test different URL schemes without also somehow registering URL scheme handlers...  We certainly have tests for the basic http/file URL interactions.

&gt; &gt; Source/WebCore/page/SecurityOrigin.cpp:306
&gt; &gt; +    RefPtr&lt;SecurityOrigin&gt; targetOrigin = SecurityOrigin::create(url);
&gt; &gt; +    return isAccessWhiteListed(targetOrigin.get());
&gt; 
&gt; Really?  A malloc is required to check a whitelist?

The problem is that the canonicalization logic is baked into the SecurityOrigin constructor.  We should pull it out into its own function so it can be called without instantiating a SecurityOrigin object.

&gt; &gt; Source/WebCore/page/SecurityOrigin.cpp:315
&gt; &gt; -    if (url.protocolIs(BlobURL::blobProtocol()))
&gt; &gt; +    if (protocol == BlobURL::blobProtocol())
&gt; 
&gt; How does .protocolIs differ from == ?  I&apos;m reminded of QualifiedName == vs. .matches()

I can leave this as is.  protocolIs just saves a string allocation and understands how to do case folding.  In this case, we&apos;ve already allocated the string and canonicalized it, so using == is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332193</commentid>
    <comment_count>21</comment_count>
      <attachid>78487</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-11 01:26:52 -0800</bug_when>
    <thetext>Comment on attachment 78487
Patch

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332674</commentid>
    <comment_count>22</comment_count>
      <attachid>78487</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-11 14:43:31 -0800</bug_when>
    <thetext>Comment on attachment 78487
Patch

I&apos;m going to watch the bloat-http perf bot once this lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332694</commentid>
    <comment_count>23</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-11 14:53:54 -0800</bug_when>
    <thetext>Committed r75557: &lt;http://trac.webkit.org/changeset/75557&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75059</attachid>
            <date>2010-11-29 14:18:29 -0800</date>
            <delta_ts>2010-11-29 14:20:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50182-20101129141828.patch</filename>
            <type>text/plain</type>
            <size>11151</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjgzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMTEtMjkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRy
b2R1Y2UgdGhlIG5vdGlvbiBvZiBhICJkaXNwbGF5LWlzb2xhdGVkIiBVUkwgc2NoZW1lIGZvciB1
c2UgYnkgQ2hyb21lLWludGVybmFsIFVSTHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUwMTgyCisKKyAgICAgICAgQSBkaXNwbGF5LWlzb2xhdGVkIFVS
TCBjYW4gb25seSBiZSBkaXNwbGF5ZWQgKGUuZy4sIHB1dCBpbiBhbiBpZnJhbWUsCisgICAgICAg
IGh5cGVybGlua2VkIHRvKSBieSBkb2N1bWVudHMgZnJvbSB0aGF0IHNjaGVtZS4gIEluIGEgc2Vu
c2UsIHRoaXMgaXMgYQorICAgICAgICBnZW5lcmFsaXphdGlvbiBvZiBzb21lIG9mIHRoZSBwcm90
ZWN0aW9ucyB3ZSBnaXZlIGZpbGUgVVJMcywgYnV0CisgICAgICAgIGluc3RlYWQgb2YgbHVtcGlu
ZyB0aGVtIGFsbCB0b2dldGhlciBpbnRvIG9uZSAibG9jYWwiIGJ1Y2tldCwgdGhpcworICAgICAg
ICBwYXRjaCBjcmVhdGVzIGEgc2VwYXJhdGUgYnVja2V0IGZvciBlYWNoIHNjaGVtZS4KKworICAg
ICAgICBGb3IgYSB3aGlsZSwgSSB0cmllZCB1c2luZyBhIHNlcGFyYXRlIGJ1Y2tldCBmb3IgZWFj
aCBvcmlnaW4uICBUaGF0CisgICAgICAgIHdvdWxkIGhhdmUgcGxheWVkIG5pY2VseSB3aXRoIHdo
YXQgQmxvYiBVUkxzIGFyZSB0cnlpbmcgdG8gZG8sIGJ1dCBzb21lCisgICAgICAgICJjaHJvbWUi
IFVSTCBwYWdlcyByZWx5IG9uIGJlaW5nIGFibGUgdG8gZGlzcGxheSBvdGhlciBjaHJvbWUgVVJM
CisgICAgICAgIHBhZ2VzLCBldmVuIGluIGRpZmZlcmVudCBvcmlnaW5zLiAgRm9yIGV4YW1wbGUs
IHRoZSBOZXcgVGFiIFBhZ2Ugc2hvd3MKKyAgICAgICAgdGh1bWJuYWlscyBmcm9tIHRoZSAidGh1
bWJuYWlsIiBob3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzIGEgYnVuY2gg
b2YgdW51c2VkIGNvZGUuICBJJ3ZlIGFsc28gcHJvcGFnYXRlZAorICAgICAgICB0aGUgImRlcHJl
Y2F0ZWQiIHN0YXR1cyBvZiBkZXByZWNhdGVkQ2FuRGlzcGxheSB0bworICAgICAgICBkZXByZWNh
dGVkU2hvdWxkVHJlYXRVUkxBc0xvY2FsIGJlY2F1c2UgdGhhdCBtZXRob2QgaGFzIG5vIG90aGVy
CisgICAgICAgIGNhbGxlcnMgYW5kIGlzIHJlYWxseSBhc2tpbmcgZm9yIHVwcGVyY2FzZS9sb3dl
cmNhc2UgYnVncy4gIEkgZHJlYW0gb2YKKyAgICAgICAgc29tZWRheSByZW1vdmluZyB0aGVzZSBm
dW5jdGlvbnMuCisKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjYW5EaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luOjpkZXByZWNhdGVkQ2FuRGlzcGxheSk6CisgICAgICAgICogcGxhdGZv
cm0vU2NoZW1lUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGxheUlzb2xhdGVk
VVJMU2NoZW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJV
UkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVtZVJlZ2lzdHJ5OjpkZXBy
ZWNhdGVkU2hvdWxkVHJlYXRVUkxBc0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVtZVJl
Z2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNEaXNw
bGF5SXNvbGF0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5Lmg6CisKIDIw
MTAtMTEtMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFuZHJlYXMgS2xpbmcuCkluZGV4OiBXZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHJldmlz
aW9uIDcyNzUxKQorKysgV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjk4LDIyICsyOTgsMjYgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6aXNBY2Nlc3NX
aGl0ZUxpc3RlZAogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9Ci0gIAorCiBib29sIFNlY3Vy
aXR5T3JpZ2luOjpjYW5EaXNwbGF5KGNvbnN0IEtVUkwmIHVybCkgY29uc3QKIHsKKyAgICBSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IHRhcmdldE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUo
dXJsKTsKKyAgICBpZiAoaXNBY2Nlc3NXaGl0ZUxpc3RlZCh0YXJnZXRPcmlnaW4uZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJl
YXRVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZCh0YXJnZXRPcmlnaW4tPnByb3RvY29sKCkpKQor
ICAgICAgICByZXR1cm4gdGFyZ2V0T3JpZ2luLT5wcm90b2NvbCgpID09IG1fcHJvdG9jb2w7CisK
ICNpZiBFTkFCTEUoQkxPQikKLSAgICBpZiAodXJsLnByb3RvY29sSXMoQmxvYlVSTDo6YmxvYlBy
b3RvY29sKCkpKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZ2VuZXJhbGl6ZSB0aGlzIGNoZWNr
LgorICAgIGlmICh0YXJnZXRPcmlnaW4tPnByb3RvY29sKCkgPT0gQmxvYlVSTDo6YmxvYlByb3Rv
Y29sKCkpCiAgICAgICAgIHJldHVybiBjYW5SZXF1ZXN0KHVybCk7CiAjZW5kaWYKIAogICAgIGlm
ICghcmVzdHJpY3RBY2Nlc3NUb0xvY2FsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
aWYgKCFTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxBc0xvY2FsKHVybC5zdHJpbmcoKSkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiB0YXJn
ZXRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVybCk7Ci0gICAgaWYgKGlzQWNjZXNz
V2hpdGVMaXN0ZWQodGFyZ2V0T3JpZ2luLmdldCgpKSkKKyAgICBpZiAoIVNjaGVtZVJlZ2lzdHJ5
OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwodGFyZ2V0T3JpZ2luLT5wcm90b2NvbCgpKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gY2FuTG9hZExvY2FsUmVzb3VyY2Vz
KCk7CkBAIC0zMjQsMTAgKzMyOCwxMiBAQCBib29sIFNlY3VyaXR5T3JpZ2luOjpkZXByZWNhdGVk
Q2FuRGlzcGxhCiAgICAgaWYgKCFyZXN0cmljdEFjY2Vzc1RvTG9jYWwoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBpZiAoIVNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTEFzTG9j
YWwodXJsLnN0cmluZygpKSkKKyAgICAvLyBGSVhNRTogSSBzdXNwZWN0IHRoZXNlIGNoZWNrcyBh
cmUgaW5jb3JyZWN0IGJlY2F1c2UgcmVmZXJyZXIgYW5kIHVybAorICAgIC8vICAgICAgICBoYXZl
IG5vdCBuZWNlc3NhcmlseSBiZWVuIGNhbm9uaWNhbGl6ZWQuCisgICAgaWYgKCFTY2hlbWVSZWdp
c3RyeTo6ZGVwcmVjYXRlZFNob3VsZFRyZWF0VVJMQXNMb2NhbCh1cmwuc3RyaW5nKCkpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJl
YXRVUkxBc0xvY2FsKHJlZmVycmVyKTsKKyAgICByZXR1cm4gU2NoZW1lUmVnaXN0cnk6OmRlcHJl
Y2F0ZWRTaG91bGRUcmVhdFVSTEFzTG9jYWwocmVmZXJyZXIpOwogfQogCiB2b2lkIFNlY3VyaXR5
T3JpZ2luOjpncmFudExvYWRMb2NhbFJlc291cmNlcygpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1NjaGVtZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1NjaGVt
ZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gNzI3NTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1NjaGVt
ZVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCiAKKyNpbmNsdWRlICJCbG9i
VVJMLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIFVSTFNjaGVtZXNNYXAmIGxv
Y2FsVVJMU2NoZW1lcygpCkBAIC00NSw2ICs0NywxMiBAQCBzdGF0aWMgVVJMU2NoZW1lc01hcCYg
bG9jYWxVUkxTY2hlbWVzKCkKICAgICByZXR1cm4gbG9jYWxTY2hlbWVzOwogfQogCitzdGF0aWMg
VVJMU2NoZW1lc01hcCYgZGlzcGxheUlzb2xhdGVkVVJMU2NoZW1lcygpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChVUkxTY2hlbWVzTWFwLCBkaXNwbGF5SXNvbGF0ZWRTY2hlbWVzLCAoKSk7
CisgICAgcmV0dXJuIGRpc3BsYXlJc29sYXRlZFNjaGVtZXM7Cit9CisKIHN0YXRpYyBVUkxTY2hl
bWVzTWFwJiBzZWN1cmVTY2hlbWVzKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFVSTFNj
aGVtZXNNYXAsIHNlY3VyZVNjaGVtZXMsICgpKTsKQEAgLTgyLDI2ICs5MCwxMCBAQCBzdGF0aWMg
VVJMU2NoZW1lc01hcCYgZW1wdHlEb2N1bWVudFNjaGVtCiAKIHZvaWQgU2NoZW1lUmVnaXN0cnk6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHNjaGVtZSkKIHsKLSAgICBX
ZWJDb3JlOjpsb2NhbFVSTFNjaGVtZXMoKS5hZGQoc2NoZW1lKTsKKyAgICBsb2NhbFVSTFNjaGVt
ZXMoKS5hZGQoc2NoZW1lKTsKIH0KIAotdm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVtb3ZlVVJMU2No
ZW1lUmVnaXN0ZXJlZEFzTG9jYWwoY29uc3QgU3RyaW5nJiBzY2hlbWUpCi17Ci0gICAgaWYgKHNj
aGVtZSA9PSAiZmlsZSIpCi0gICAgICAgIHJldHVybjsKLSNpZiBQTEFURk9STShNQUMpCi0gICAg
aWYgKHNjaGVtZSA9PSAiYXBwbGV3ZWJkYXRhIikKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0g
ICAgV2ViQ29yZTo6bG9jYWxVUkxTY2hlbWVzKCkucmVtb3ZlKHNjaGVtZSk7Ci19Ci0KLWNvbnN0
IFVSTFNjaGVtZXNNYXAmIFNjaGVtZVJlZ2lzdHJ5Ojpsb2NhbFVSTFNjaGVtZXMoKQotewotICAg
IHJldHVybiBXZWJDb3JlOjpsb2NhbFVSTFNjaGVtZXMoKTsKLX0KLQotYm9vbCBTY2hlbWVSZWdp
c3RyeTo6c2hvdWxkVHJlYXRVUkxBc0xvY2FsKGNvbnN0IFN0cmluZyYgdXJsKQorYm9vbCBTY2hl
bWVSZWdpc3RyeTo6ZGVwcmVjYXRlZFNob3VsZFRyZWF0VVJMQXNMb2NhbChjb25zdCBTdHJpbmcm
IHVybCkKIHsKICAgICAvLyBUaGlzIGF2b2lkcyBhbiBhbGxvY2F0aW9uIG9mIGFub3RoZXIgU3Ry
aW5nIGFuZCB0aGUgSGFzaFNldCBjb250YWlucygpCiAgICAgLy8gY2FsbCBmb3IgdGhlIGZpbGU6
IGFuZCBodHRwOiBzY2hlbWVzLgpAQCAtMTE4LDI1ICsxMTAsMTIgQEAgYm9vbCBTY2hlbWVSZWdp
c3RyeTo6c2hvdWxkVHJlYXRVUkxBc0xvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBT
dHJpbmcgc2NoZW1lID0gdXJsLmxlZnQobG9jKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6bG9jYWxV
UkxTY2hlbWVzKCkuY29udGFpbnMoc2NoZW1lKTsKKyAgICByZXR1cm4gbG9jYWxVUkxTY2hlbWVz
KCkuY29udGFpbnMoc2NoZW1lKTsKIH0KIAogYm9vbCBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJl
YXRVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogewotICAgIC8vIFRoaXMg
YXZvaWRzIGFuIGFsbG9jYXRpb24gb2YgYW5vdGhlciBTdHJpbmcgYW5kIHRoZSBIYXNoU2V0IGNv
bnRhaW5zKCkKLSAgICAvLyBjYWxsIGZvciB0aGUgZmlsZTogYW5kIGh0dHA6IHNjaGVtZXMuCi0g
ICAgaWYgKHNjaGVtZS5sZW5ndGgoKSA9PSA0KSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBzID0g
c2NoZW1lLmNoYXJhY3RlcnMoKTsKLSAgICAgICAgaWYgKHNbMF0gPT0gJ2gnICYmIHNbMV0gPT0g
J3QnICYmIHNbMl0gPT0gJ3QnICYmIHNbM10gPT0gJ3AnKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoc1swXSA9PSAnZicgJiYgc1sxXSA9PSAnaScgJiYgc1syXSA9PSAn
bCcgJiYgc1szXSA9PSAnZScpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBpZiAoc2NoZW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0
dXJuIFdlYkNvcmU6OmxvY2FsVVJMU2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7CisgICAgcmV0
dXJuIGxvY2FsVVJMU2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7CiB9CiAKIHZvaWQgU2NoZW1l
UmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHNjaGVt
ZSkKQEAgLTE0OSw2ICsxMjgsMTYgQEAgYm9vbCBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRV
UkxTY2hlbQogICAgIHJldHVybiBzY2hlbWVzV2l0aFVuaXF1ZU9yaWdpbnMoKS5jb250YWlucyhz
Y2hlbWUpOwogfQogCit2b2lkIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzRGlz
cGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgc2NoZW1lKQoreworICAgIGRpc3BsYXlJc29sYXRl
ZFVSTFNjaGVtZXMoKS5hZGQoc2NoZW1lKTsKK30KKworYm9vbCBTY2hlbWVSZWdpc3RyeTo6c2hv
dWxkVHJlYXRVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHNjaGVtZSkK
K3sKKyAgICByZXR1cm4gZGlzcGxheUlzb2xhdGVkVVJMU2NoZW1lcygpLmNvbnRhaW5zKHNjaGVt
ZSk7Cit9CisKIHZvaWQgU2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUo
Y29uc3QgU3RyaW5nJiBzY2hlbWUpCiB7CiAgICAgc2VjdXJlU2NoZW1lcygpLmFkZChzY2hlbWUp
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaAkocmV2aXNpb24gNzI3NTEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEy
ICszNywxMCBAQCB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+CiBjbGFz
cyBTY2hlbWVSZWdpc3RyeSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVUkxT
Y2hlbWVBc0xvY2FsKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyB2b2lkIHJlbW92ZVVSTFNj
aGVtZVJlZ2lzdGVyZWRBc0xvY2FsKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBjb25zdCBV
UkxTY2hlbWVzTWFwJiBsb2NhbFVSTFNjaGVtZXMoKTsKLQotICAgIHN0YXRpYyBib29sIHNob3Vs
ZFRyZWF0VVJMQXNMb2NhbChjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRU
cmVhdFVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJik7CiAKKyAgICBzdGF0aWMgYm9vbCBk
ZXByZWNhdGVkU2hvdWxkVHJlYXRVUkxBc0xvY2FsKGNvbnN0IFN0cmluZyYpOworCiAgICAgLy8g
U2VjdXJlIHNjaGVtZXMgZG8gbm90IHRyaWdnZXIgbWl4ZWQgY29udGVudCB3YXJuaW5ncy4gRm9y
IGV4YW1wbGUsCiAgICAgLy8gaHR0cHMgYW5kIGRhdGEgYXJlIHNlY3VyZSBzY2hlbWVzIGJlY2F1
c2UgdGhleSBjYW5ub3QgYmUgY29ycnVwdGVkIGJ5CiAgICAgLy8gYWN0aXZlIG5ldHdvcmsgYXR0
YWNrZXJzLgpAQCAtNTEsNyArNDksMTIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgcmVn
aXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBib29s
IHNob3VsZFRyZWF0VVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmKTsKLSAgICAKKwor
ICAgIC8vIERpc3BsYXktaXNvbGF0ZWQgc2NoZW1lcyBjYW4gb25seSBiZSBkaXNwbGF5ZWQgKGlu
IHRoZSBzZW5zZSBvZgorICAgIC8vIFNlY3VyaXR5T3JpZ2luOjpjYW5EaXNwbGF5KSBieSBkb2N1
bWVudHMgZnJvbSB0aGUgc2FtZSBzY2hlbWUuCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVUkxT
Y2hlbWVBc0Rpc3BsYXlJc29sYXRlZChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBz
aG91bGRUcmVhdFVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYpOworCiAg
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0VtcHR5RG9jdW1lbnQoY29uc3QgU3Ry
aW5nJik7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkTG9hZFVSTFNjaGVtZUFzRW1wdHlEb2N1bWVu
dChjb25zdCBTdHJpbmcmKTsKIH07CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyODMxKQor
KysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5
IEBACisyMDEwLTExLTI5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIHRoZSBu
b3Rpb24gb2YgYSAiZGlzcGxheS1pc29sYXRlZCIgVVJMIHNjaGVtZSBmb3IgdXNlIGJ5IENocm9t
ZS1pbnRlcm5hbCBVUkxzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDE4MgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIENocm9taXVtIEFQSSBm
b3IgcmVnaXN0ZXJpbmcgc2NoZW1lcyBhcworICAgICAgICBkaXNwbGF5LWlzb2xhdGVkLiAgSW4g
YSBzdWJzZXF1ZW50IHBhdGNoLCBJJ2xsIGNoYW5nZSB0aGUgImNocm9tZSIKKyAgICAgICAgc2No
ZW1lIGluIENocm9tZSB0byBiZSBkaXNwbGF5IGlzb2xhdGVkIGluc3RlYWQgb2YgbG9jYWwuICBU
aGF0IHdpbGwKKyAgICAgICAgcHJldmVudCBmaWxlIFVSTHMgZnJvbSBsaW5raW5nIHRvIGNocm9t
ZSBVUkxzLgorCisgICAgICAgICogcHVibGljL1dlYlNlY3VyaXR5UG9saWN5Lmg6CisgICAgICAg
ICogc3JjL1dlYlNlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2VjdXJp
dHlQb2xpY3k6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQpOgorCiAyMDEwLTEx
LTI5ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmVtb3ZlIEJ1aWxkIGRpcmVjdG9yeSB0aGF0IHdhcyBlcnJvbmVvdXNseSBhZGRlZCBpbiByNzIx
MDMuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNlY3VyaXR5UG9saWN5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWN1cml0eVBvbGljeS5oCShy
ZXZpc2lvbiA3Mjc1MSkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2VjdXJpdHlQb2xp
Y3kuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMTIgQEAgcHVibGljOgogICAgIC8vIGFu
eSBvdGhlciBVUkwgc2NoZW1lLgogICAgIFdFQktJVF9BUEkgc3RhdGljIHZvaWQgcmVnaXN0ZXJV
UkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFdlYlN0cmluZyYpOwogCisgICAgLy8gUmVnaXN0ZXJz
IGEgVVJMIHNjaGVtZSB0byBiZSB0cmVhdGVkIGFzIGRpc3BsYXktaXNvbGF0ZWQuICBUaGlzIG1l
YW5zCisgICAgLy8gdGhhdCBwYWdlcyBjYW5ub3QgZGlzcGFseSB0aGVzZSBVUkxzIHVubGVzcyB0
aGV5IGZyb20gdGhlIHNhbWUgc2NoZW1lLgorICAgIC8vIEZvciBleGFtcGxlLCBwYWdlcyBpbiBv
dGhlciBvcmlnaW4gY2Fubm90IGNyZWF0ZSBpZnJhbWVzIG9yIGh5cGVybGlua3MKKyAgICAvLyB0
byBVUkxzIHdpdGggdGhlIHNjaGVtZS4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIHJlZ2lz
dGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3QgV2ViU3RyaW5nJik7CisKICAgICAv
LyBSZWdpc3RlcnMgYSBVUkwgc2NoZW1lIHRvIG5vdCBnZW5lcmF0ZSBtaXhlZCBjb250ZW50IHdh
cm5pbmdzIHdoZW4KICAgICAvLyBpbmNsdWRlZCBieSBhbiBIVFRQUyBwYWdlLgogICAgIFdFQktJ
VF9BUEkgc3RhdGljIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShjb25zdCBXZWJTdHJp
bmcmKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VjdXJpdHlQb2xpY3kuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VjdXJpdHlQb2xpY3kuY3BwCShy
ZXZpc2lvbiA3Mjc1MSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VjdXJpdHlQb2xpY3ku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxMSBAQCB2b2lkIFdlYlNlY3VyaXR5UG9s
aWN5OjpyZWdpc3RlclVSTFNjaGVtCiAgICAgU2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2No
ZW1lQXNOb0FjY2VzcyhzY2hlbWUpOwogfQogCit2b2lkIFdlYlNlY3VyaXR5UG9saWN5OjpyZWdp
c3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFdlYlN0cmluZyYgc2NoZW1lKQor
eworICAgIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVk
KHNjaGVtZSk7Cit9CisKIHZvaWQgV2ViU2VjdXJpdHlQb2xpY3k6OnJlZ2lzdGVyVVJMU2NoZW1l
QXNTZWN1cmUoY29uc3QgV2ViU3RyaW5nJiBzY2hlbWUpCiB7CiAgICAgU2NoZW1lUmVnaXN0cnk6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoc2NoZW1lKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75060</attachid>
            <date>2010-11-29 14:20:21 -0800</date>
            <delta_ts>2010-11-29 15:11:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50182-20101129142020.patch</filename>
            <type>text/plain</type>
            <size>10993</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjgzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMTEtMjkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRy
b2R1Y2UgdGhlIG5vdGlvbiBvZiBhICJkaXNwbGF5LWlzb2xhdGVkIiBVUkwgc2NoZW1lIGZvciB1
c2UgYnkgQ2hyb21lLWludGVybmFsIFVSTHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUwMTgyCisKKyAgICAgICAgQSBkaXNwbGF5LWlzb2xhdGVkIFVS
TCBjYW4gb25seSBiZSBkaXNwbGF5ZWQgKGUuZy4sIHB1dCBpbiBhbiBpZnJhbWUsCisgICAgICAg
IGh5cGVybGlua2VkIHRvKSBieSBkb2N1bWVudHMgZnJvbSB0aGF0IHNjaGVtZS4gIEluIGEgc2Vu
c2UsIHRoaXMgaXMgYQorICAgICAgICBnZW5lcmFsaXphdGlvbiBvZiBzb21lIG9mIHRoZSBwcm90
ZWN0aW9ucyB3ZSBnaXZlIGZpbGUgVVJMcywgYnV0CisgICAgICAgIGluc3RlYWQgb2YgbHVtcGlu
ZyB0aGVtIGFsbCB0b2dldGhlciBpbnRvIG9uZSAibG9jYWwiIGJ1Y2tldCwgdGhpcworICAgICAg
ICBwYXRjaCBjcmVhdGVzIGEgc2VwYXJhdGUgYnVja2V0IGZvciBlYWNoIHNjaGVtZS4KKworICAg
ICAgICBGb3IgYSB3aGlsZSwgSSB0cmllZCB1c2luZyBhIHNlcGFyYXRlIGJ1Y2tldCBmb3IgZWFj
aCBvcmlnaW4uICBUaGF0CisgICAgICAgIHdvdWxkIGhhdmUgcGxheWVkIG5pY2VseSB3aXRoIHdo
YXQgQmxvYiBVUkxzIGFyZSB0cnlpbmcgdG8gZG8sIGJ1dCBzb21lCisgICAgICAgICJjaHJvbWUi
IFVSTCBwYWdlcyByZWx5IG9uIGJlaW5nIGFibGUgdG8gZGlzcGxheSBvdGhlciBjaHJvbWUgVVJM
CisgICAgICAgIHBhZ2VzLCBldmVuIGluIGRpZmZlcmVudCBvcmlnaW5zLiAgRm9yIGV4YW1wbGUs
IHRoZSBOZXcgVGFiIFBhZ2Ugc2hvd3MKKyAgICAgICAgdGh1bWJuYWlscyBmcm9tIHRoZSAidGh1
bWJuYWlsIiBob3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzIGEgYnVuY2gg
b2YgdW51c2VkIGNvZGUuICBJJ3ZlIGFsc28gcHJvcGFnYXRlZAorICAgICAgICB0aGUgImRlcHJl
Y2F0ZWQiIHN0YXR1cyBvZiBkZXByZWNhdGVkQ2FuRGlzcGxheSB0bworICAgICAgICBkZXByZWNh
dGVkU2hvdWxkVHJlYXRVUkxBc0xvY2FsIGJlY2F1c2UgdGhhdCBtZXRob2QgaGFzIG5vIG90aGVy
CisgICAgICAgIGNhbGxlcnMgYW5kIGlzIHJlYWxseSBhc2tpbmcgZm9yIHVwcGVyY2FzZS9sb3dl
cmNhc2UgYnVncy4gIEkgZHJlYW0gb2YKKyAgICAgICAgc29tZWRheSByZW1vdmluZyB0aGVzZSBm
dW5jdGlvbnMuCisKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjYW5EaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luOjpkZXByZWNhdGVkQ2FuRGlzcGxheSk6CisgICAgICAgICogcGxhdGZv
cm0vU2NoZW1lUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGxheUlzb2xhdGVk
VVJMU2NoZW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJV
UkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVtZVJlZ2lzdHJ5OjpkZXBy
ZWNhdGVkU2hvdWxkVHJlYXRVUkxBc0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVtZVJl
Z2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNEaXNw
bGF5SXNvbGF0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5Lmg6CisKIDIw
MTAtMTEtMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFuZHJlYXMgS2xpbmcuCkluZGV4OiBXZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHJldmlz
aW9uIDcyNzUxKQorKysgV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjk4LDIyICsyOTgsMjYgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6aXNBY2Nlc3NX
aGl0ZUxpc3RlZAogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9Ci0gIAorCiBib29sIFNlY3Vy
aXR5T3JpZ2luOjpjYW5EaXNwbGF5KGNvbnN0IEtVUkwmIHVybCkgY29uc3QKIHsKKyAgICBSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IHRhcmdldE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUo
dXJsKTsKKyAgICBpZiAoaXNBY2Nlc3NXaGl0ZUxpc3RlZCh0YXJnZXRPcmlnaW4uZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJl
YXRVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZCh0YXJnZXRPcmlnaW4tPnByb3RvY29sKCkpKQor
ICAgICAgICByZXR1cm4gdGFyZ2V0T3JpZ2luLT5wcm90b2NvbCgpID09IG1fcHJvdG9jb2w7CisK
ICNpZiBFTkFCTEUoQkxPQikKLSAgICBpZiAodXJsLnByb3RvY29sSXMoQmxvYlVSTDo6YmxvYlBy
b3RvY29sKCkpKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZ2VuZXJhbGl6ZSB0aGlzIGNoZWNr
LgorICAgIGlmICh0YXJnZXRPcmlnaW4tPnByb3RvY29sKCkgPT0gQmxvYlVSTDo6YmxvYlByb3Rv
Y29sKCkpCiAgICAgICAgIHJldHVybiBjYW5SZXF1ZXN0KHVybCk7CiAjZW5kaWYKIAogICAgIGlm
ICghcmVzdHJpY3RBY2Nlc3NUb0xvY2FsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
aWYgKCFTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxBc0xvY2FsKHVybC5zdHJpbmcoKSkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiB0YXJn
ZXRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVybCk7Ci0gICAgaWYgKGlzQWNjZXNz
V2hpdGVMaXN0ZWQodGFyZ2V0T3JpZ2luLmdldCgpKSkKKyAgICBpZiAoIVNjaGVtZVJlZ2lzdHJ5
OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwodGFyZ2V0T3JpZ2luLT5wcm90b2NvbCgpKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gY2FuTG9hZExvY2FsUmVzb3VyY2Vz
KCk7CkBAIC0zMjQsMTAgKzMyOCwxMiBAQCBib29sIFNlY3VyaXR5T3JpZ2luOjpkZXByZWNhdGVk
Q2FuRGlzcGxhCiAgICAgaWYgKCFyZXN0cmljdEFjY2Vzc1RvTG9jYWwoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBpZiAoIVNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTEFzTG9j
YWwodXJsLnN0cmluZygpKSkKKyAgICAvLyBGSVhNRTogSSBzdXNwZWN0IHRoZXNlIGNoZWNrcyBh
cmUgaW5jb3JyZWN0IGJlY2F1c2UgcmVmZXJyZXIgYW5kIHVybAorICAgIC8vICAgICAgICBoYXZl
IG5vdCBuZWNlc3NhcmlseSBiZWVuIGNhbm9uaWNhbGl6ZWQuCisgICAgaWYgKCFTY2hlbWVSZWdp
c3RyeTo6ZGVwcmVjYXRlZFNob3VsZFRyZWF0VVJMQXNMb2NhbCh1cmwuc3RyaW5nKCkpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJl
YXRVUkxBc0xvY2FsKHJlZmVycmVyKTsKKyAgICByZXR1cm4gU2NoZW1lUmVnaXN0cnk6OmRlcHJl
Y2F0ZWRTaG91bGRUcmVhdFVSTEFzTG9jYWwocmVmZXJyZXIpOwogfQogCiB2b2lkIFNlY3VyaXR5
T3JpZ2luOjpncmFudExvYWRMb2NhbFJlc291cmNlcygpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1NjaGVtZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1NjaGVt
ZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gNzI3NTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1NjaGVt
ZVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTIgQEAgc3RhdGljIFVS
TFNjaGVtZXNNYXAmIGxvY2FsVVJMU2NoZW1lcygpCiAgICAgcmV0dXJuIGxvY2FsU2NoZW1lczsK
IH0KIAorc3RhdGljIFVSTFNjaGVtZXNNYXAmIGRpc3BsYXlJc29sYXRlZFVSTFNjaGVtZXMoKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVVJMU2NoZW1lc01hcCwgZGlzcGxheUlzb2xhdGVk
U2NoZW1lcywgKCkpOworICAgIHJldHVybiBkaXNwbGF5SXNvbGF0ZWRTY2hlbWVzOworfQorCiBz
dGF0aWMgVVJMU2NoZW1lc01hcCYgc2VjdXJlU2NoZW1lcygpCiB7CiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChVUkxTY2hlbWVzTWFwLCBzZWN1cmVTY2hlbWVzLCAoKSk7CkBAIC04MiwyNiArODgs
MTAgQEAgc3RhdGljIFVSTFNjaGVtZXNNYXAmIGVtcHR5RG9jdW1lbnRTY2hlbQogCiB2b2lkIFNj
aGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiBzY2hl
bWUpCiB7Ci0gICAgV2ViQ29yZTo6bG9jYWxVUkxTY2hlbWVzKCkuYWRkKHNjaGVtZSk7Ci19Ci0K
LXZvaWQgU2NoZW1lUmVnaXN0cnk6OnJlbW92ZVVSTFNjaGVtZVJlZ2lzdGVyZWRBc0xvY2FsKGNv
bnN0IFN0cmluZyYgc2NoZW1lKQotewotICAgIGlmIChzY2hlbWUgPT0gImZpbGUiKQotICAgICAg
ICByZXR1cm47Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChzY2hlbWUgPT0gImFwcGxld2Vi
ZGF0YSIpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIFdlYkNvcmU6OmxvY2FsVVJMU2No
ZW1lcygpLnJlbW92ZShzY2hlbWUpOworICAgIGxvY2FsVVJMU2NoZW1lcygpLmFkZChzY2hlbWUp
OwogfQogCi1jb25zdCBVUkxTY2hlbWVzTWFwJiBTY2hlbWVSZWdpc3RyeTo6bG9jYWxVUkxTY2hl
bWVzKCkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6bG9jYWxVUkxTY2hlbWVzKCk7Ci19Ci0KLWJv
b2wgU2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMQXNMb2NhbChjb25zdCBTdHJpbmcmIHVy
bCkKK2Jvb2wgU2NoZW1lUmVnaXN0cnk6OmRlcHJlY2F0ZWRTaG91bGRUcmVhdFVSTEFzTG9jYWwo
Y29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgLy8gVGhpcyBhdm9pZHMgYW4gYWxsb2NhdGlvbiBv
ZiBhbm90aGVyIFN0cmluZyBhbmQgdGhlIEhhc2hTZXQgY29udGFpbnMoKQogICAgIC8vIGNhbGwg
Zm9yIHRoZSBmaWxlOiBhbmQgaHR0cDogc2NoZW1lcy4KQEAgLTExOCwyNSArMTA4LDEyIEBAIGJv
b2wgU2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMQXNMb2MKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgU3RyaW5nIHNjaGVtZSA9IHVybC5sZWZ0KGxvYyk7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OmxvY2FsVVJMU2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7CisgICAgcmV0dXJuIGxv
Y2FsVVJMU2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7CiB9CiAKIGJvb2wgU2NoZW1lUmVnaXN0
cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHNjaGVtZSkKIHsK
LSAgICAvLyBUaGlzIGF2b2lkcyBhbiBhbGxvY2F0aW9uIG9mIGFub3RoZXIgU3RyaW5nIGFuZCB0
aGUgSGFzaFNldCBjb250YWlucygpCi0gICAgLy8gY2FsbCBmb3IgdGhlIGZpbGU6IGFuZCBodHRw
OiBzY2hlbWVzLgotICAgIGlmIChzY2hlbWUubGVuZ3RoKCkgPT0gNCkgewotICAgICAgICBjb25z
dCBVQ2hhciogcyA9IHNjaGVtZS5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGlmIChzWzBdID09ICdo
JyAmJiBzWzFdID09ICd0JyAmJiBzWzJdID09ICd0JyAmJiBzWzNdID09ICdwJykKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHNbMF0gPT0gJ2YnICYmIHNbMV0gPT0gJ2kn
ICYmIHNbMl0gPT0gJ2wnICYmIHNbM10gPT0gJ2UnKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKHNjaGVtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBXZWJDb3JlOjpsb2NhbFVSTFNjaGVtZXMoKS5jb250YWlucyhzY2hl
bWUpOworICAgIHJldHVybiBsb2NhbFVSTFNjaGVtZXMoKS5jb250YWlucyhzY2hlbWUpOwogfQog
CiB2b2lkIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MoY29uc3Qg
U3RyaW5nJiBzY2hlbWUpCkBAIC0xNDksNiArMTI2LDE2IEBAIGJvb2wgU2NoZW1lUmVnaXN0cnk6
OnNob3VsZFRyZWF0VVJMU2NoZW0KICAgICByZXR1cm4gc2NoZW1lc1dpdGhVbmlxdWVPcmlnaW5z
KCkuY29udGFpbnMoc2NoZW1lKTsKIH0KIAordm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJV
UkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHNjaGVtZSkKK3sKKyAgICBk
aXNwbGF5SXNvbGF0ZWRVUkxTY2hlbWVzKCkuYWRkKHNjaGVtZSk7Cit9CisKK2Jvb2wgU2NoZW1l
UmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3QgU3Ry
aW5nJiBzY2hlbWUpCit7CisgICAgcmV0dXJuIGRpc3BsYXlJc29sYXRlZFVSTFNjaGVtZXMoKS5j
b250YWlucyhzY2hlbWUpOworfQorCiB2b2lkIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNj
aGVtZUFzU2VjdXJlKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogewogICAgIHNlY3VyZVNjaGVtZXMo
KS5hZGQoc2NoZW1lKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmgJKHJldmlzaW9u
IDcyNzUxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNywxMiArMzcsMTAgQEAgdHlwZWRlZiBIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRp
bmdIYXNoPgogY2xhc3MgU2NoZW1lUmVnaXN0cnkgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IHJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9p
ZCByZW1vdmVVUkxTY2hlbWVSZWdpc3RlcmVkQXNMb2NhbChjb25zdCBTdHJpbmcmKTsKLSAgICBz
dGF0aWMgY29uc3QgVVJMU2NoZW1lc01hcCYgbG9jYWxVUkxTY2hlbWVzKCk7Ci0KLSAgICBzdGF0
aWMgYm9vbCBzaG91bGRUcmVhdFVSTEFzTG9jYWwoY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGlj
IGJvb2wgc2hvdWxkVHJlYXRVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0cmluZyYpOwogCisgICAg
c3RhdGljIGJvb2wgZGVwcmVjYXRlZFNob3VsZFRyZWF0VVJMQXNMb2NhbChjb25zdCBTdHJpbmcm
KTsKKwogICAgIC8vIFNlY3VyZSBzY2hlbWVzIGRvIG5vdCB0cmlnZ2VyIG1peGVkIGNvbnRlbnQg
d2FybmluZ3MuIEZvciBleGFtcGxlLAogICAgIC8vIGh0dHBzIGFuZCBkYXRhIGFyZSBzZWN1cmUg
c2NoZW1lcyBiZWNhdXNlIHRoZXkgY2Fubm90IGJlIGNvcnJ1cHRlZCBieQogICAgIC8vIGFjdGl2
ZSBuZXR3b3JrIGF0dGFja2Vycy4KQEAgLTUxLDcgKzQ5LDEyIEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmKTsKICAg
ICBzdGF0aWMgYm9vbCBzaG91bGRUcmVhdFVSTFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5n
Jik7Ci0gICAgCisKKyAgICAvLyBEaXNwbGF5LWlzb2xhdGVkIHNjaGVtZXMgY2FuIG9ubHkgYmUg
ZGlzcGxheWVkIChpbiB0aGUgc2Vuc2Ugb2YKKyAgICAvLyBTZWN1cml0eU9yaWdpbjo6Y2FuRGlz
cGxheSkgYnkgZG9jdW1lbnRzIGZyb20gdGhlIHNhbWUgc2NoZW1lLgorICAgIHN0YXRpYyB2b2lk
IHJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3QgU3RyaW5nJik7CisgICAg
c3RhdGljIGJvb2wgc2hvdWxkVHJlYXRVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZChjb25zdCBT
dHJpbmcmKTsKKwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNFbXB0eURvY3Vt
ZW50KGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBib29sIHNob3VsZExvYWRVUkxTY2hlbWVB
c0VtcHR5RG9jdW1lbnQoY29uc3QgU3RyaW5nJik7CiB9OwpJbmRleDogV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZp
c2lvbiA3MjgzMSkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOSBAQAorMjAxMC0xMS0yOSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
dHJvZHVjZSB0aGUgbm90aW9uIG9mIGEgImRpc3BsYXktaXNvbGF0ZWQiIFVSTCBzY2hlbWUgZm9y
IHVzZSBieSBDaHJvbWUtaW50ZXJuYWwgVVJMcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAxODIKKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBD
aHJvbWl1bSBBUEkgZm9yIHJlZ2lzdGVyaW5nIHNjaGVtZXMgYXMKKyAgICAgICAgZGlzcGxheS1p
c29sYXRlZC4gIEluIGEgc3Vic2VxdWVudCBwYXRjaCwgSSdsbCBjaGFuZ2UgdGhlICJjaHJvbWUi
CisgICAgICAgIHNjaGVtZSBpbiBDaHJvbWUgdG8gYmUgZGlzcGxheSBpc29sYXRlZCBpbnN0ZWFk
IG9mIGxvY2FsLiAgVGhhdCB3aWxsCisgICAgICAgIHByZXZlbnQgZmlsZSBVUkxzIGZyb20gbGlu
a2luZyB0byBjaHJvbWUgVVJMcy4KKworICAgICAgICAqIHB1YmxpYy9XZWJTZWN1cml0eVBvbGlj
eS5oOgorICAgICAgICAqIHNyYy9XZWJTZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlNlY3VyaXR5UG9saWN5OjpyZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVk
KToKKwogMjAxMC0xMS0yOSAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJlbW92ZSBCdWlsZCBkaXJlY3RvcnkgdGhhdCB3YXMgZXJyb25lb3VzbHkg
YWRkZWQgaW4gcjcyMTAzLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWN1cml0
eVBvbGljeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2VjdXJp
dHlQb2xpY3kuaAkocmV2aXNpb24gNzI3NTEpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlNlY3VyaXR5UG9saWN5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDEyIEBAIHB1Ymxp
YzoKICAgICAvLyBhbnkgb3RoZXIgVVJMIHNjaGVtZS4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBXZWJTdHJpbmcmKTsKIAorICAg
IC8vIFJlZ2lzdGVycyBhIFVSTCBzY2hlbWUgdG8gYmUgdHJlYXRlZCBhcyBkaXNwbGF5LWlzb2xh
dGVkLiAgVGhpcyBtZWFucworICAgIC8vIHRoYXQgcGFnZXMgY2Fubm90IGRpc3BhbHkgdGhlc2Ug
VVJMcyB1bmxlc3MgdGhleSBmcm9tIHRoZSBzYW1lIHNjaGVtZS4KKyAgICAvLyBGb3IgZXhhbXBs
ZSwgcGFnZXMgaW4gb3RoZXIgb3JpZ2luIGNhbm5vdCBjcmVhdGUgaWZyYW1lcyBvciBoeXBlcmxp
bmtzCisgICAgLy8gdG8gVVJMcyB3aXRoIHRoZSBzY2hlbWUuCisgICAgV0VCS0lUX0FQSSBzdGF0
aWMgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFdlYlN0cmlu
ZyYpOworCiAgICAgLy8gUmVnaXN0ZXJzIGEgVVJMIHNjaGVtZSB0byBub3QgZ2VuZXJhdGUgbWl4
ZWQgY29udGVudCB3YXJuaW5ncyB3aGVuCiAgICAgLy8gaW5jbHVkZWQgYnkgYW4gSFRUUFMgcGFn
ZS4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUo
Y29uc3QgV2ViU3RyaW5nJik7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlY3VyaXR5
UG9saWN5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlY3VyaXR5
UG9saWN5LmNwcAkocmV2aXNpb24gNzI3NTEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNl
Y3VyaXR5UG9saWN5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTEgQEAgdm9pZCBX
ZWJTZWN1cml0eVBvbGljeTo6cmVnaXN0ZXJVUkxTY2hlbQogICAgIFNjaGVtZVJlZ2lzdHJ5Ojpy
ZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3Moc2NoZW1lKTsKIH0KIAordm9pZCBXZWJTZWN1cml0
eVBvbGljeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZChjb25zdCBXZWJTdHJp
bmcmIHNjaGVtZSkKK3sKKyAgICBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rp
c3BsYXlJc29sYXRlZChzY2hlbWUpOworfQorCiB2b2lkIFdlYlNlY3VyaXR5UG9saWN5OjpyZWdp
c3RlclVSTFNjaGVtZUFzU2VjdXJlKGNvbnN0IFdlYlN0cmluZyYgc2NoZW1lKQogewogICAgIFNj
aGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHNjaGVtZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75070</attachid>
            <date>2010-11-29 15:11:31 -0800</date>
            <delta_ts>2011-01-10 18:31:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50182-20101129151129.patch</filename>
            <type>text/plain</type>
            <size>12494</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjgzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMTEtMjkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRy
b2R1Y2UgdGhlIG5vdGlvbiBvZiBhICJkaXNwbGF5LWlzb2xhdGVkIiBVUkwgc2NoZW1lIGZvciB1
c2UgYnkgQ2hyb21lLWludGVybmFsIFVSTHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUwMTgyCisKKyAgICAgICAgQSBkaXNwbGF5LWlzb2xhdGVkIFVS
TCBjYW4gb25seSBiZSBkaXNwbGF5ZWQgKGUuZy4sIHB1dCBpbiBhbiBpZnJhbWUsCisgICAgICAg
IGh5cGVybGlua2VkIHRvKSBieSBkb2N1bWVudHMgZnJvbSB0aGF0IHNjaGVtZS4gIEluIGEgc2Vu
c2UsIHRoaXMgaXMgYQorICAgICAgICBnZW5lcmFsaXphdGlvbiBvZiBzb21lIG9mIHRoZSBwcm90
ZWN0aW9ucyB3ZSBnaXZlIGZpbGUgVVJMcywgYnV0CisgICAgICAgIGluc3RlYWQgb2YgbHVtcGlu
ZyB0aGVtIGFsbCB0b2dldGhlciBpbnRvIG9uZSAibG9jYWwiIGJ1Y2tldCwgdGhpcworICAgICAg
ICBwYXRjaCBjcmVhdGVzIGEgc2VwYXJhdGUgYnVja2V0IGZvciBlYWNoIHNjaGVtZS4KKworICAg
ICAgICBGb3IgYSB3aGlsZSwgSSB0cmllZCB1c2luZyBhIHNlcGFyYXRlIGJ1Y2tldCBmb3IgZWFj
aCBvcmlnaW4uICBUaGF0CisgICAgICAgIHdvdWxkIGhhdmUgcGxheWVkIG5pY2VseSB3aXRoIHdo
YXQgQmxvYiBVUkxzIGFyZSB0cnlpbmcgdG8gZG8sIGJ1dCBzb21lCisgICAgICAgICJjaHJvbWUi
IFVSTCBwYWdlcyByZWx5IG9uIGJlaW5nIGFibGUgdG8gZGlzcGxheSBvdGhlciBjaHJvbWUgVVJM
CisgICAgICAgIHBhZ2VzLCBldmVuIGluIGRpZmZlcmVudCBvcmlnaW5zLiAgRm9yIGV4YW1wbGUs
IHRoZSBOZXcgVGFiIFBhZ2Ugc2hvd3MKKyAgICAgICAgdGh1bWJuYWlscyBmcm9tIHRoZSAidGh1
bWJuYWlsIiBob3N0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzIGEgYnVuY2gg
b2YgdW51c2VkIGNvZGUuICBJJ3ZlIGFsc28gcHJvcGFnYXRlZAorICAgICAgICB0aGUgImRlcHJl
Y2F0ZWQiIHN0YXR1cyBvZiBkZXByZWNhdGVkQ2FuRGlzcGxheSB0bworICAgICAgICBkZXByZWNh
dGVkU2hvdWxkVHJlYXRVUkxBc0xvY2FsIGJlY2F1c2UgdGhhdCBtZXRob2QgaGFzIG5vIG90aGVy
CisgICAgICAgIGNhbGxlcnMgYW5kIGlzIHJlYWxseSBhc2tpbmcgZm9yIHVwcGVyY2FzZS9sb3dl
cmNhc2UgYnVncy4gIEkgZHJlYW0gb2YKKyAgICAgICAgc29tZWRheSByZW1vdmluZyB0aGVzZSBm
dW5jdGlvbnMuCisKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjYW5EaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luOjpkZXByZWNhdGVkQ2FuRGlzcGxheSk6CisgICAgICAgICogcGxhdGZv
cm0vU2NoZW1lUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGxheUlzb2xhdGVk
VVJMU2NoZW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJV
UkxTY2hlbWVBc0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVtZVJlZ2lzdHJ5OjpkZXBy
ZWNhdGVkU2hvdWxkVHJlYXRVUkxBc0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVtZVJl
Z2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNEaXNw
bGF5SXNvbGF0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5Lmg6CisKIDIw
MTAtMTEtMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFuZHJlYXMgS2xpbmcuCkluZGV4OiBXZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHJldmlz
aW9uIDcyNzUxKQorKysgV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjk4LDIyICsyOTgsMjYgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6aXNBY2Nlc3NX
aGl0ZUxpc3RlZAogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9Ci0gIAorCiBib29sIFNlY3Vy
aXR5T3JpZ2luOjpjYW5EaXNwbGF5KGNvbnN0IEtVUkwmIHVybCkgY29uc3QKIHsKKyAgICBSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IHRhcmdldE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUo
dXJsKTsKKyAgICBpZiAoaXNBY2Nlc3NXaGl0ZUxpc3RlZCh0YXJnZXRPcmlnaW4uZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJl
YXRVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZCh0YXJnZXRPcmlnaW4tPnByb3RvY29sKCkpKQor
ICAgICAgICByZXR1cm4gdGFyZ2V0T3JpZ2luLT5wcm90b2NvbCgpID09IG1fcHJvdG9jb2w7CisK
ICNpZiBFTkFCTEUoQkxPQikKLSAgICBpZiAodXJsLnByb3RvY29sSXMoQmxvYlVSTDo6YmxvYlBy
b3RvY29sKCkpKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZ2VuZXJhbGl6ZSB0aGlzIGNoZWNr
LgorICAgIGlmICh0YXJnZXRPcmlnaW4tPnByb3RvY29sKCkgPT0gQmxvYlVSTDo6YmxvYlByb3Rv
Y29sKCkpCiAgICAgICAgIHJldHVybiBjYW5SZXF1ZXN0KHVybCk7CiAjZW5kaWYKIAogICAgIGlm
ICghcmVzdHJpY3RBY2Nlc3NUb0xvY2FsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
aWYgKCFTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxBc0xvY2FsKHVybC5zdHJpbmcoKSkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiB0YXJn
ZXRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVybCk7Ci0gICAgaWYgKGlzQWNjZXNz
V2hpdGVMaXN0ZWQodGFyZ2V0T3JpZ2luLmdldCgpKSkKKyAgICBpZiAoIVNjaGVtZVJlZ2lzdHJ5
OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwodGFyZ2V0T3JpZ2luLT5wcm90b2NvbCgpKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gY2FuTG9hZExvY2FsUmVzb3VyY2Vz
KCk7CkBAIC0zMjQsMTAgKzMyOCwxMiBAQCBib29sIFNlY3VyaXR5T3JpZ2luOjpkZXByZWNhdGVk
Q2FuRGlzcGxhCiAgICAgaWYgKCFyZXN0cmljdEFjY2Vzc1RvTG9jYWwoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBpZiAoIVNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTEFzTG9j
YWwodXJsLnN0cmluZygpKSkKKyAgICAvLyBGSVhNRTogSSBzdXNwZWN0IHRoZXNlIGNoZWNrcyBh
cmUgaW5jb3JyZWN0IGJlY2F1c2UgcmVmZXJyZXIgYW5kIHVybAorICAgIC8vICAgICAgICBoYXZl
IG5vdCBuZWNlc3NhcmlseSBiZWVuIGNhbm9uaWNhbGl6ZWQuCisgICAgaWYgKCFTY2hlbWVSZWdp
c3RyeTo6ZGVwcmVjYXRlZFNob3VsZFRyZWF0VVJMQXNMb2NhbCh1cmwuc3RyaW5nKCkpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJl
YXRVUkxBc0xvY2FsKHJlZmVycmVyKTsKKyAgICByZXR1cm4gU2NoZW1lUmVnaXN0cnk6OmRlcHJl
Y2F0ZWRTaG91bGRUcmVhdFVSTEFzTG9jYWwocmVmZXJyZXIpOwogfQogCiB2b2lkIFNlY3VyaXR5
T3JpZ2luOjpncmFudExvYWRMb2NhbFJlc291cmNlcygpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1NjaGVtZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1NjaGVt
ZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gNzI3NTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1NjaGVt
ZVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTIgQEAgc3RhdGljIFVS
TFNjaGVtZXNNYXAmIGxvY2FsVVJMU2NoZW1lcygpCiAgICAgcmV0dXJuIGxvY2FsU2NoZW1lczsK
IH0KIAorc3RhdGljIFVSTFNjaGVtZXNNYXAmIGRpc3BsYXlJc29sYXRlZFVSTFNjaGVtZXMoKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVVJMU2NoZW1lc01hcCwgZGlzcGxheUlzb2xhdGVk
U2NoZW1lcywgKCkpOworICAgIHJldHVybiBkaXNwbGF5SXNvbGF0ZWRTY2hlbWVzOworfQorCiBz
dGF0aWMgVVJMU2NoZW1lc01hcCYgc2VjdXJlU2NoZW1lcygpCiB7CiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChVUkxTY2hlbWVzTWFwLCBzZWN1cmVTY2hlbWVzLCAoKSk7CkBAIC04Miw3ICs4OCw3
IEBAIHN0YXRpYyBVUkxTY2hlbWVzTWFwJiBlbXB0eURvY3VtZW50U2NoZW0KIAogdm9pZCBTY2hl
bWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0cmluZyYgc2NoZW1l
KQogewotICAgIFdlYkNvcmU6OmxvY2FsVVJMU2NoZW1lcygpLmFkZChzY2hlbWUpOworICAgIGxv
Y2FsVVJMU2NoZW1lcygpLmFkZChzY2hlbWUpOwogfQogCiB2b2lkIFNjaGVtZVJlZ2lzdHJ5Ojpy
ZW1vdmVVUkxTY2hlbWVSZWdpc3RlcmVkQXNMb2NhbChjb25zdCBTdHJpbmcmIHNjaGVtZSkKQEAg
LTkzLDE1ICs5OSwxNSBAQCB2b2lkIFNjaGVtZVJlZ2lzdHJ5OjpyZW1vdmVVUkxTY2hlbWVSZWdp
CiAgICAgaWYgKHNjaGVtZSA9PSAiYXBwbGV3ZWJkYXRhIikKICAgICAgICAgcmV0dXJuOwogI2Vu
ZGlmCi0gICAgV2ViQ29yZTo6bG9jYWxVUkxTY2hlbWVzKCkucmVtb3ZlKHNjaGVtZSk7CisgICAg
bG9jYWxVUkxTY2hlbWVzKCkucmVtb3ZlKHNjaGVtZSk7CiB9CiAKLWNvbnN0IFVSTFNjaGVtZXNN
YXAmIFNjaGVtZVJlZ2lzdHJ5Ojpsb2NhbFVSTFNjaGVtZXMoKQorY29uc3QgVVJMU2NoZW1lc01h
cCYgU2NoZW1lUmVnaXN0cnk6OmxvY2FsU2NoZW1lcygpCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6
OmxvY2FsVVJMU2NoZW1lcygpOworICAgIHJldHVybiBsb2NhbFVSTFNjaGVtZXMoKTsKIH0KIAot
Ym9vbCBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxBc0xvY2FsKGNvbnN0IFN0cmluZyYg
dXJsKQorYm9vbCBTY2hlbWVSZWdpc3RyeTo6ZGVwcmVjYXRlZFNob3VsZFRyZWF0VVJMQXNMb2Nh
bChjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICAvLyBUaGlzIGF2b2lkcyBhbiBhbGxvY2F0aW9u
IG9mIGFub3RoZXIgU3RyaW5nIGFuZCB0aGUgSGFzaFNldCBjb250YWlucygpCiAgICAgLy8gY2Fs
bCBmb3IgdGhlIGZpbGU6IGFuZCBodHRwOiBzY2hlbWVzLgpAQCAtMTE4LDcgKzEyNCw3IEBAIGJv
b2wgU2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMQXNMb2MKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgU3RyaW5nIHNjaGVtZSA9IHVybC5sZWZ0KGxvYyk7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OmxvY2FsVVJMU2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7CisgICAgcmV0dXJuIGxv
Y2FsVVJMU2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7CiB9CiAKIGJvb2wgU2NoZW1lUmVnaXN0
cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHNjaGVtZSkKQEAg
LTEzNiw3ICsxNDIsNyBAQCBib29sIFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVt
CiAgICAgaWYgKHNjaGVtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHJldHVybiBXZWJDb3JlOjpsb2NhbFVSTFNjaGVtZXMoKS5jb250YWlucyhzY2hlbWUpOworICAg
IHJldHVybiBsb2NhbFVSTFNjaGVtZXMoKS5jb250YWlucyhzY2hlbWUpOwogfQogCiB2b2lkIFNj
aGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiBz
Y2hlbWUpCkBAIC0xNDksNiArMTU1LDE2IEBAIGJvb2wgU2NoZW1lUmVnaXN0cnk6OnNob3VsZFRy
ZWF0VVJMU2NoZW0KICAgICByZXR1cm4gc2NoZW1lc1dpdGhVbmlxdWVPcmlnaW5zKCkuY29udGFp
bnMoc2NoZW1lKTsKIH0KIAordm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVB
c0Rpc3BsYXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHNjaGVtZSkKK3sKKyAgICBkaXNwbGF5SXNv
bGF0ZWRVUkxTY2hlbWVzKCkuYWRkKHNjaGVtZSk7Cit9CisKK2Jvb2wgU2NoZW1lUmVnaXN0cnk6
OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3QgU3RyaW5nJiBzY2hl
bWUpCit7CisgICAgcmV0dXJuIGRpc3BsYXlJc29sYXRlZFVSTFNjaGVtZXMoKS5jb250YWlucyhz
Y2hlbWUpOworfQorCiB2b2lkIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzU2Vj
dXJlKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogewogICAgIHNlY3VyZVNjaGVtZXMoKS5hZGQoc2No
ZW1lKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmgJKHJldmlzaW9uIDcyNzUxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCwxMCArMzgsMTAgQEAgY2xhc3MgU2NoZW1lUmVnaXN0cnkgewogcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0
aWMgdm9pZCByZW1vdmVVUkxTY2hlbWVSZWdpc3RlcmVkQXNMb2NhbChjb25zdCBTdHJpbmcmKTsK
LSAgICBzdGF0aWMgY29uc3QgVVJMU2NoZW1lc01hcCYgbG9jYWxVUkxTY2hlbWVzKCk7CisgICAg
c3RhdGljIGNvbnN0IFVSTFNjaGVtZXNNYXAmIGxvY2FsU2NoZW1lcygpOwogCi0gICAgc3RhdGlj
IGJvb2wgc2hvdWxkVHJlYXRVUkxBc0xvY2FsKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBi
b29sIHNob3VsZFRyZWF0VVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0
aWMgYm9vbCBkZXByZWNhdGVkU2hvdWxkVHJlYXRVUkxBc0xvY2FsKGNvbnN0IFN0cmluZyYpOwog
CiAgICAgLy8gU2VjdXJlIHNjaGVtZXMgZG8gbm90IHRyaWdnZXIgbWl4ZWQgY29udGVudCB3YXJu
aW5ncy4gRm9yIGV4YW1wbGUsCiAgICAgLy8gaHR0cHMgYW5kIGRhdGEgYXJlIHNlY3VyZSBzY2hl
bWVzIGJlY2F1c2UgdGhleSBjYW5ub3QgYmUgY29ycnVwdGVkIGJ5CkBAIC01MSw3ICs1MSwxMiBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3Mo
Y29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkVHJlYXRVUkxTY2hlbWVBc05v
QWNjZXNzKGNvbnN0IFN0cmluZyYpOwotICAgIAorCisgICAgLy8gRGlzcGxheS1pc29sYXRlZCBz
Y2hlbWVzIGNhbiBvbmx5IGJlIGRpc3BsYXllZCAoaW4gdGhlIHNlbnNlIG9mCisgICAgLy8gU2Vj
dXJpdHlPcmlnaW46OmNhbkRpc3BsYXkpIGJ5IGRvY3VtZW50cyBmcm9tIHRoZSBzYW1lIHNjaGVt
ZS4KKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNv
bnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIHNob3VsZFRyZWF0VVJMU2NoZW1lQXNEaXNw
bGF5SXNvbGF0ZWQoY29uc3QgU3RyaW5nJik7CisKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlclVS
TFNjaGVtZUFzRW1wdHlEb2N1bWVudChjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgYm9vbCBz
aG91bGRMb2FkVVJMU2NoZW1lQXNFbXB0eURvY3VtZW50KGNvbnN0IFN0cmluZyYpOwogfTsKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzI4MzEpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMTEtMjkgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgdGhlIG5vdGlvbiBvZiBhICJkaXNwbGF5LWlzb2xh
dGVkIiBVUkwgc2NoZW1lIGZvciB1c2UgYnkgQ2hyb21lLWludGVybmFsIFVSTHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMTgyCisKKyAgICAgICAg
VGhpcyBwYXRjaCBhZGRzIGEgQ2hyb21pdW0gQVBJIGZvciByZWdpc3RlcmluZyBzY2hlbWVzIGFz
CisgICAgICAgIGRpc3BsYXktaXNvbGF0ZWQuICBJbiBhIHN1YnNlcXVlbnQgcGF0Y2gsIEknbGwg
Y2hhbmdlIHRoZSAiY2hyb21lIgorICAgICAgICBzY2hlbWUgaW4gQ2hyb21lIHRvIGJlIGRpc3Bs
YXkgaXNvbGF0ZWQgaW5zdGVhZCBvZiBsb2NhbC4gIFRoYXQgd2lsbAorICAgICAgICBwcmV2ZW50
IGZpbGUgVVJMcyBmcm9tIGxpbmtpbmcgdG8gY2hyb21lIFVSTHMuCisKKyAgICAgICAgKiBwdWJs
aWMvV2ViU2VjdXJpdHlQb2xpY3kuaDoKKyAgICAgICAgKiBzcmMvV2ViU2VjdXJpdHlQb2xpY3ku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTZWN1cml0eVBvbGljeTo6cmVnaXN0ZXJVUkxTY2hl
bWVBc0Rpc3BsYXlJc29sYXRlZCk6CisKIDIwMTAtMTEtMjkgIERpbWl0cmkgR2xhemtvdiAgPGRn
bGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUgQnVpbGQgZGlyZWN0b3J5IHRo
YXQgd2FzIGVycm9uZW91c2x5IGFkZGVkIGluIHI3MjEwMy4KSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViU2VjdXJpdHlQb2xpY3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlNlY3VyaXR5UG9saWN5LmgJKHJldmlzaW9uIDcyNzUxKQorKysgV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJTZWN1cml0eVBvbGljeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSwxNSArNDEsMjEgQEAgY2xhc3MgV2ViVVJMOwogY2xhc3MgV2ViU2VjdXJpdHlQb2xpY3kgewog
cHVibGljOgogICAgIC8vIFJlZ2lzdGVycyBhIFVSTCBzY2hlbWUgdG8gYmUgdHJlYXRlZCBhcyBh
IGxvY2FsIHNjaGVtZSAoaS5lLiwgd2l0aCB0aGUKLSAgICAvLyBzYW1lIHNlY3VyaXR5IHJ1bGVz
IGFzIHRob3NlIGFwcGxpZWQgdG8gImZpbGUiIFVSTHMpLiAgVGhpcyBtZWFucyB0aGF0CisgICAg
Ly8gc2FtZSBzZWN1cml0eSBydWxlcyBhcyB0aG9zZSBhcHBsaWVkIHRvICJmaWxlIiBVUkxzKS4g
VGhpcyBtZWFucyB0aGF0CiAgICAgLy8gbm9ybWFsIHBhZ2VzIGNhbm5vdCBsaW5rIHRvIG9yIGFj
Y2VzcyBVUkxzIG9mIHRoaXMgc2NoZW1lLgogICAgIFdFQktJVF9BUEkgc3RhdGljIHZvaWQgcmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFdlYlN0cmluZyYpOwogCi0gICAgLy8gUmVnaXN0
ZXJzIGEgVVJMIHNjaGVtZSB0byBiZSB0cmVhdGVkIGFzIGEgbm9BY2Nlc3Mgc2NoZW1lLiAgVGhp
cyBtZWFucworICAgIC8vIFJlZ2lzdGVycyBhIFVSTCBzY2hlbWUgdG8gYmUgdHJlYXRlZCBhcyBh
IG5vQWNjZXNzIHNjaGVtZS4gVGhpcyBtZWFucwogICAgIC8vIHRoYXQgcGFnZXMgbG9hZGVkIHdp
dGggdGhpcyBVUkwgc2NoZW1lIGNhbm5vdCBhY2Nlc3MgcGFnZXMgbG9hZGVkIHdpdGgKICAgICAv
LyBhbnkgb3RoZXIgVVJMIHNjaGVtZS4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIHJlZ2lz
dGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBXZWJTdHJpbmcmKTsKIAorICAgIC8vIFJlZ2lz
dGVycyBhIFVSTCBzY2hlbWUgdG8gYmUgdHJlYXRlZCBhcyBkaXNwbGF5LWlzb2xhdGVkLiBUaGlz
IG1lYW5zCisgICAgLy8gdGhhdCBwYWdlcyBjYW5ub3QgZGlzcGxheSB0aGVzZSBVUkxzIHVubGVz
cyB0aGV5IGFyZSBmcm9tIHRoZSBzYW1lCisgICAgLy8gc2NoZW1lLiBGb3IgZXhhbXBsZSwgcGFn
ZXMgaW4gb3RoZXIgb3JpZ2luIGNhbm5vdCBjcmVhdGUgaWZyYW1lcyBvcgorICAgIC8vIGh5cGVy
bGlua3MgdG8gVVJMcyB3aXRoIHRoZSBzY2hlbWUuCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgdm9p
ZCByZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFdlYlN0cmluZyYpOwor
CiAgICAgLy8gUmVnaXN0ZXJzIGEgVVJMIHNjaGVtZSB0byBub3QgZ2VuZXJhdGUgbWl4ZWQgY29u
dGVudCB3YXJuaW5ncyB3aGVuCiAgICAgLy8gaW5jbHVkZWQgYnkgYW4gSFRUUFMgcGFnZS4KICAg
ICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoY29uc3Qg
V2ViU3RyaW5nJik7CkBAIC02Miw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgV2Vi
VVJMJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFdlYlN0cmluZyYgZGVzdGluYXRpb25Qcm90b2NvbCwK
ICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0
aW5hdGlvblN1YmRvbWFpbnMpOwogICAgIFdFQktJVF9BUEkgc3RhdGljIHZvaWQgcmVzZXRPcmln
aW5BY2Nlc3NXaGl0ZWxpc3RzKCk7Ci0gICAgCisKICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhl
IHVybCBzaG91bGQgYmUgYWxsb3dlZCB0byBzZWUgdGhlIHJlZmVycmVyCiAgICAgLy8gYmFzZWQg
b24gdGhlaXIgcmVzcGVjdGl2ZSBwcm90b2NvbHMuCiAgICAgV0VCS0lUX0FQSSBzdGF0aWMgYm9v
bCBzaG91bGRIaWRlUmVmZXJyZXIoY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlN0cmluZyYg
cmVmZXJyZXIpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWN1cml0eVBvbGljeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWN1cml0eVBvbGljeS5j
cHAJKHJldmlzaW9uIDcyNzUxKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWN1cml0eVBv
bGljeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDExIEBAIHZvaWQgV2ViU2VjdXJp
dHlQb2xpY3k6OnJlZ2lzdGVyVVJMU2NoZW0KICAgICBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJV
UkxTY2hlbWVBc05vQWNjZXNzKHNjaGVtZSk7CiB9CiAKK3ZvaWQgV2ViU2VjdXJpdHlQb2xpY3k6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3QgV2ViU3RyaW5nJiBzY2hl
bWUpCit7CisgICAgU2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNv
bGF0ZWQoc2NoZW1lKTsKK30KKwogdm9pZCBXZWJTZWN1cml0eVBvbGljeTo6cmVnaXN0ZXJVUkxT
Y2hlbWVBc1NlY3VyZShjb25zdCBXZWJTdHJpbmcmIHNjaGVtZSkKIHsKICAgICBTY2hlbWVSZWdp
c3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShzY2hlbWUpOwpJbmRleDogV2ViS2l0L3F0
L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkv
cXdlYnNlY3VyaXR5b3JpZ2luLmNwcAkocmV2aXNpb24gNzI3NTEpCisrKyBXZWJLaXQvcXQvQXBp
L3F3ZWJzZWN1cml0eW9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3ICsyNTIsNyBA
QCB2b2lkIFFXZWJTZWN1cml0eU9yaWdpbjo6cmVtb3ZlTG9jYWxTY2hlCiBRU3RyaW5nTGlzdCBR
V2ViU2VjdXJpdHlPcmlnaW46OmxvY2FsU2NoZW1lcygpCiB7CiAgICAgUVN0cmluZ0xpc3QgbGlz
dDsKLSAgICBjb25zdCBVUkxTY2hlbWVzTWFwJiBtYXAgPSBTY2hlbWVSZWdpc3RyeTo6bG9jYWxV
UkxTY2hlbWVzKCk7CisgICAgY29uc3QgVVJMU2NoZW1lc01hcCYgbWFwID0gU2NoZW1lUmVnaXN0
cnk6OmxvY2FsU2NoZW1lcygpOwogICAgIFVSTFNjaGVtZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC5lbmQoKTsKICAgICBmb3IgKFVSTFNjaGVtZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGkg
PSBtYXAuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewogICAgICAgICBjb25zdCBRU3RyaW5nIHNj
aGVtZSA9ICppOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78487</attachid>
            <date>2011-01-10 18:31:53 -0800</date>
            <delta_ts>2011-01-11 14:43:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50182-20110110183151.patch</filename>
            <type>text/plain</type>
            <size>5310</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NDYxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDEtMTAgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgdGhlIG5vdGlvbiBvZiBhICJkaXNwbGF5LWlzb2xh
dGVkIiBVUkwgc2NoZW1lIGZvciB1c2UgYnkKKyAgICAgICAgQ2hyb21lLWludGVybmFsIFVSTHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMTgyCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhY3R1YWxseSBtYWtlcyB0aGUgZGlzcGxheS1pc29sYXRlZCBz
Y2hlbWVzIGRpc3BsYXkKKyAgICAgICAgaXNvbGF0ZWQuICBUaGUgYmVoYXZpb3Igc2hvdWxkIGJl
IHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBpdGVyYXRpb24gb2YKKyAgICAgICAgdGhpcyBwYXRj
aCwgYnV0IHJlLW9yZ2FuaXplZCBhIGJpdCBiZWNhdXNlIHJlYWRpbmcgdGhlIGFjY2VzcyB3aGl0
ZQorICAgICAgICBsaXN0IGlzIGV4cGVuc2l2ZS4KKworICAgICAgICAqIHBhZ2UvU2VjdXJpdHlP
cmlnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmlzQWNjZXNzVG9V
UkxXaGl0ZUxpc3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y2FuRGlz
cGxheSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5oOgorICAgICAgICAqIHBsYXRm
b3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY2hlbWVSZWdpc3Ry
eS5oOgorCiAyMDExLTAxLTEwICBKb2UgTWFzb24gIDxqbWFzb25AcmltLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9TZWN1cml0eU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9TZWN1cml0eU9yaWdpbi5jcHAJKHJldmlzaW9uIDc1NDU1KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OSwyOCArMjk5LDMw
IEBAIGJvb2wgU2VjdXJpdHlPcmlnaW46OmlzQWNjZXNzV2hpdGVMaXN0ZWQKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQotICAKKworYm9vbCBTZWN1cml0eU9yaWdpbjo6aXNBY2Nlc3NUb1VS
TFdoaXRlTGlzdGVkKGNvbnN0IEtVUkwmIHVybCkgY29uc3QKK3sKKyAgICBSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IHRhcmdldE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKTsKKyAg
ICByZXR1cm4gaXNBY2Nlc3NXaGl0ZUxpc3RlZCh0YXJnZXRPcmlnaW4uZ2V0KCkpOworfQorCiBi
b29sIFNlY3VyaXR5T3JpZ2luOjpjYW5EaXNwbGF5KGNvbnN0IEtVUkwmIHVybCkgY29uc3QKIHsK
KyAgICBTdHJpbmcgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2woKS5sb3dlcigpOworCiAjaWYgRU5B
QkxFKEJMT0IpCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBnZW5lcmFsaXplIHRoaXMgY2hlY2su
Ci0gICAgaWYgKHVybC5wcm90b2NvbElzKEJsb2JVUkw6OmJsb2JQcm90b2NvbCgpKSkKKyAgICBp
ZiAocHJvdG9jb2wgPT0gQmxvYlVSTDo6YmxvYlByb3RvY29sKCkpCiAgICAgICAgIHJldHVybiBj
YW5SZXF1ZXN0KHVybCk7CiAjZW5kaWYKIAotICAgIGlmICghcmVzdHJpY3RBY2Nlc3NUb0xvY2Fs
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRklYTUU6IEkgc3VzcGVjdCB0aGlz
IGNoZWNrIGlzIGluY29ycmVjdCBiZWNhdXNlIHVybCBoYXMgbm90IG5lY2Vzc2FyaWx5Ci0gICAg
Ly8gICAgICAgIGJlZW4gY2Fub25pY2FsaXplZC4KLSAgICBpZiAoIVNjaGVtZVJlZ2lzdHJ5Ojpk
ZXByZWNhdGVkU2hvdWxkVHJlYXRVUkxBc0xvY2FsKHVybC5zdHJpbmcoKSkpCi0gICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxTY2hlbWVB
c0Rpc3BsYXlJc29sYXRlZChwcm90b2NvbCkpCisgICAgICAgIHJldHVybiBtX3Byb3RvY29sID09
IHByb3RvY29sIHx8IGlzQWNjZXNzVG9VUkxXaGl0ZUxpc3RlZCh1cmwpOwogCi0gICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiB0YXJnZXRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVy
bCk7Ci0gICAgaWYgKGlzQWNjZXNzV2hpdGVMaXN0ZWQodGFyZ2V0T3JpZ2luLmdldCgpKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHJlc3RyaWN0QWNjZXNzVG9Mb2NhbCgpICYmIFNj
aGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwocHJvdG9jb2wpKQorICAg
ICAgICByZXR1cm4gY2FuTG9hZExvY2FsUmVzb3VyY2VzKCkgfHwgaXNBY2Nlc3NUb1VSTFdoaXRl
TGlzdGVkKHVybCk7CiAKLSAgICByZXR1cm4gY2FuTG9hZExvY2FsUmVzb3VyY2VzKCk7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgU2VjdXJpdHlPcmlnaW46OmdyYW50TG9hZExvY2FsUmVz
b3VyY2VzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJKHJldmlzaW9u
IDc1NDQ1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTMsOSArMTkzLDExIEBAIHByaXZhdGU6CiAgICAgU2VjdXJpdHlPcmlnaW4o
Y29uc3QgS1VSTCYsIFNhbmRib3hGbGFncyk7CiAgICAgZXhwbGljaXQgU2VjdXJpdHlPcmlnaW4o
Y29uc3QgU2VjdXJpdHlPcmlnaW4qKTsKIAotICAgIGJvb2wgcGFzc2VzRmlsZUNoZWNrKGNvbnN0
IFNlY3VyaXR5T3JpZ2luKiBvdGhlcikgY29uc3Q7CisgICAgLy8gRklYTUU6IFJlbmFtZSB0aGlz
IGZ1bmN0aW9uIHRvIHNvbWV0aGluZyBtb3JlIHNlbWFudGljLgorICAgIGJvb2wgcGFzc2VzRmls
ZUNoZWNrKGNvbnN0IFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7CiAKLSAgICBib29sIGlzQWNjZXNz
V2hpdGVMaXN0ZWQoY29uc3QgU2VjdXJpdHlPcmlnaW4qIHRhcmdldE9yaWdpbikgY29uc3Q7Cisg
ICAgYm9vbCBpc0FjY2Vzc1doaXRlTGlzdGVkKGNvbnN0IFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7
CisgICAgYm9vbCBpc0FjY2Vzc1RvVVJMV2hpdGVMaXN0ZWQoY29uc3QgS1VSTCYpIGNvbnN0Owog
CiAgICAgU2FuZGJveEZsYWdzIG1fc2FuZGJveEZsYWdzOwogICAgIFN0cmluZyBtX3Byb3RvY29s
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcAkocmV2
aXNpb24gNzU0NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNywyNiArMTA3LDYgQEAgY29uc3QgVVJMU2NoZW1lc01h
cCYgU2NoZW1lUmVnaXN0cnk6OmxvYwogICAgIHJldHVybiBsb2NhbFVSTFNjaGVtZXMoKTsKIH0K
IAotYm9vbCBTY2hlbWVSZWdpc3RyeTo6ZGVwcmVjYXRlZFNob3VsZFRyZWF0VVJMQXNMb2NhbChj
b25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICAvLyBUaGlzIGF2b2lkcyBhbiBhbGxvY2F0aW9uIG9m
IGFub3RoZXIgU3RyaW5nIGFuZCB0aGUgSGFzaFNldCBjb250YWlucygpCi0gICAgLy8gY2FsbCBm
b3IgdGhlIGZpbGU6IGFuZCBodHRwOiBzY2hlbWVzLgotICAgIGlmICh1cmwubGVuZ3RoKCkgPj0g
NSkgewotICAgICAgICBjb25zdCBVQ2hhciogcyA9IHVybC5jaGFyYWN0ZXJzKCk7Ci0gICAgICAg
IGlmIChzWzBdID09ICdoJyAmJiBzWzFdID09ICd0JyAmJiBzWzJdID09ICd0JyAmJiBzWzNdID09
ICdwJyAmJiBzWzRdID09ICc6JykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKHNbMF0gPT0gJ2YnICYmIHNbMV0gPT0gJ2knICYmIHNbMl0gPT0gJ2wnICYmIHNbM10gPT0g
J2UnICYmIHNbNF0gPT0gJzonKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgc2l6ZV90IGxvYyA9IHVybC5maW5kKCc6Jyk7Ci0gICAgaWYgKGxvYyA9PSBub3RGb3VuZCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nIHNjaGVtZSA9IHVybC5sZWZ0KGxv
Yyk7Ci0gICAgcmV0dXJuIGxvY2FsVVJMU2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7Ci19Ci0K
IGJvb2wgU2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNMb2NhbChjb25zdCBT
dHJpbmcmIHNjaGVtZSkKIHsKICAgICAvLyBUaGlzIGF2b2lkcyBhbiBhbGxvY2F0aW9uIG9mIGFu
b3RoZXIgU3RyaW5nIGFuZCB0aGUgSGFzaFNldCBjb250YWlucygpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmgJKHJldmlzaW9uIDc1NDU1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NyArNDEsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFVSTFNjaGVtZXNNYXAmIGxvY2Fs
U2NoZW1lcygpOwogCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkVHJlYXRVUkxTY2hlbWVBc0xvY2Fs
KGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBib29sIGRlcHJlY2F0ZWRTaG91bGRUcmVhdFVS
TEFzTG9jYWwoY29uc3QgU3RyaW5nJik7CiAKICAgICAvLyBTZWN1cmUgc2NoZW1lcyBkbyBub3Qg
dHJpZ2dlciBtaXhlZCBjb250ZW50IHdhcm5pbmdzLiBGb3IgZXhhbXBsZSwKICAgICAvLyBodHRw
cyBhbmQgZGF0YSBhcmUgc2VjdXJlIHNjaGVtZXMgYmVjYXVzZSB0aGV5IGNhbm5vdCBiZSBjb3Jy
dXB0ZWQgYnkK
</data>
<flag name="review"
          id="69806"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="69944"
          type_id="3"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>