<?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>47980</bug_id>
          
          <creation_ts>2010-10-20 05:53:24 -0700</creation_ts>
          <short_desc>Add the feature &quot;Add as search engine...&quot; in a search text field context menu for chromium</short_desc>
          <delta_ts>2011-06-03 10:39:31 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>philippe.beauchamp</reporter>
          <assigned_to>philippe.beauchamp</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>philippe.beauchamp</cc>
    
    <cc>pkasting</cc>
    
    <cc>sky</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>296746</commentid>
    <comment_count>0</comment_count>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-10-20 05:53:24 -0700</bug_when>
    <thetext>Link to chromium review:
http://codereview.chromium.org/335023/show</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296748</commentid>
    <comment_count>1</comment_count>
      <attachid>71278</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-10-20 05:56:15 -0700</bug_when>
    <thetext>Created attachment 71278
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296836</commentid>
    <comment_count>2</comment_count>
      <attachid>71278</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-10-20 09:32:06 -0700</bug_when>
    <thetext>Comment on attachment 71278
Proposed patch

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

&gt; WebKit/chromium/ChangeLog:64
&gt; +&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r69954

You have a merge conflict marker here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296837</commentid>
    <comment_count>3</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-10-20 09:32:52 -0700</bug_when>
    <thetext>Also, why did you mark yourself r-?  Is this patch not yet what you want?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296919</commentid>
    <comment_count>4</comment_count>
    <who name="Scott Violet">sky</who>
    <bug_when>2010-10-20 12:16:11 -0700</bug_when>
    <thetext>I think you should split HasSuitableTextElement into at least two functions:

. FindSuitableTextElement: used if no element provided to the constructor.
. Another function that builds the encodedString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298715</commentid>
    <comment_count>5</comment_count>
      <attachid>71712</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-10-24 20:48:08 -0700</bug_when>
    <thetext>Created attachment 71712
Proposed Patch V2 - Split of HasSuitableTextElement in two parts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298719</commentid>
    <comment_count>6</comment_count>
      <attachid>71714</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-10-24 21:08:35 -0700</bug_when>
    <thetext>Created attachment 71714
Proposed Patch V2 - Split of HasSuitableTextElement in two parts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298721</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-24 21:12:38 -0700</bug_when>
    <thetext>Attachment 71714 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/ContextMenuClientImpl.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebSearchableFormData.cpp:233:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298980</commentid>
    <comment_count>8</comment_count>
      <attachid>71714</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2010-10-25 11:21:13 -0700</bug_when>
    <thetext>Comment on attachment 71714
Proposed Patch V2 - Split of HasSuitableTextElement in two parts

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

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:147
&gt; +WebCore::HTMLInputElement* HasSuitableTextElement(const HTMLFormElement* form, TextEncoding* encoding)

Rename to FindSuitableTextElement.

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:187
&gt; +bool BuildSearchString(const HTMLFormElement* form, Vector&lt;char&gt;* encodedString, TextEncoding* encoding, const WebCore::HTMLInputElement* textElement)

This seems to always return true, so convert to void.

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:196
&gt; +        if (!formElement-&gt;appendFormData(dataList, false))

You also do this in BuildSearchString. It should probably only be here.

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:235
&gt; +            return;

Spacing looks off here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299018</commentid>
    <comment_count>9</comment_count>
      <attachid>71714</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-10-25 12:14:17 -0700</bug_when>
    <thetext>Comment on attachment 71714
Proposed Patch V2 - Split of HasSuitableTextElement in two parts

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

&gt;&gt; WebKit/chromium/src/WebSearchableFormData.cpp:196
&gt;&gt; +        if (!formElement-&gt;appendFormData(dataList, false))
&gt; 
&gt; You also do this in BuildSearchString. It should probably only be here.

Agree.  This is what I did at first but there is something strange with the &quot;if (input-&gt;isTextField() &amp;&amp; !items.isEmpty()&quot;  the input-&gt;isTextField() returns true for a list.  We need to find a better way to determine that this is a list other than generating it.  I&apos;ll try to investigate tonight to find the exact explanation, still not clear for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300493</commentid>
    <comment_count>10</comment_count>
      <attachid>71714</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-27 13:09:19 -0700</bug_when>
    <thetext>Comment on attachment 71714
Proposed Patch V2 - Split of HasSuitableTextElement in two parts

Please address the review comments above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301001</commentid>
    <comment_count>11</comment_count>
      <attachid>72172</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-10-28 05:26:15 -0700</bug_when>
    <thetext>Created attachment 72172
Proposed Patch V3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301003</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-28 05:28:17 -0700</bug_when>
    <thetext>Attachment 72172 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/ContextMenuClientImpl.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebSearchableFormData.cpp:159:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301067</commentid>
    <comment_count>13</comment_count>
      <attachid>72190</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-10-28 07:32:49 -0700</bug_when>
    <thetext>Created attachment 72190
Proposed Patch V3 - removed \r char

Scott, 

What do you think about the formElement-&gt;willValidate() condition instead of generating the list?  Seems to be working fine. Do you see something that can break this?

Philippe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301068</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-28 07:35:51 -0700</bug_when>
    <thetext>Attachment 72190 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/ContextMenuClientImpl.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301539</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-28 19:29:20 -0700</bug_when>
    <thetext>Attachment 72190 did not build on chromium:
Build output: http://queues.webkit.org/results/4851063</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301784</commentid>
    <comment_count>16</comment_count>
      <attachid>72190</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2010-10-29 08:41:55 -0700</bug_when>
    <thetext>Comment on attachment 72190
Proposed Patch V3 - removed \r char

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

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:228
&gt; +        &amp;&amp; !selectedInputElement)

You need another set of parens here.

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:250
&gt; +    }

Verify that if selectedInputElement is supplied that it&apos;s in the form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302507</commentid>
    <comment_count>17</comment_count>
      <attachid>72190</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-31 18:09:56 -0700</bug_when>
    <thetext>Comment on attachment 72190
Proposed Patch V3 - removed \r char

Does not compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302619</commentid>
    <comment_count>18</comment_count>
      <attachid>72498</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-11-01 06:01:14 -0700</bug_when>
    <thetext>Created attachment 72498
Proposed Patch V5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302621</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-01 06:04:15 -0700</bug_when>
    <thetext>Attachment 72498 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/ContextMenuClientImpl.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebSearchableFormData.cpp:211:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302623</commentid>
    <comment_count>20</comment_count>
      <attachid>72499</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-11-01 06:13:00 -0700</bug_when>
    <thetext>Created attachment 72499
Proposed Patch V5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302705</commentid>
    <comment_count>21</comment_count>
      <attachid>72499</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2010-11-01 08:31:23 -0700</bug_when>
    <thetext>Comment on attachment 72499
Proposed Patch V5

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

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:181
&gt; +bool BuildSearchString(const HTMLFormElement* form, Vector&lt;char&gt;* encodedString, TextEncoding* encoding, const WebCore::HTMLInputElement* textElement)

Document method and return value.

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:211
&gt; +                FormDataBuilder::encodeStringAsFormData(*encodedString, j-&gt;data());

Add parens around this.

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:270
&gt; +    if (!validSearchString)

Should this be before 266? Perhaps it should just be:

if (!BuildSear...())
  return;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303319</commentid>
    <comment_count>22</comment_count>
      <attachid>72654</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-11-02 05:41:00 -0700</bug_when>
    <thetext>Created attachment 72654
Proposed Patch V6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303321</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-02 05:43:35 -0700</bug_when>
    <thetext>Attachment 72654 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/ContextMenuClientImpl.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebSearchableFormData.cpp:184:  Line contains invalid UTF-8 (or Unicode replacement character).  [readability/utf8] [5]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303322</commentid>
    <comment_count>24</comment_count>
      <attachid>72499</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-11-02 05:46:32 -0700</bug_when>
    <thetext>Comment on attachment 72499
Proposed Patch V5

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

&gt;&gt; WebKit/chromium/src/WebSearchableFormData.cpp:270
&gt;&gt; +    if (!validSearchString)
&gt; 
&gt; Should this be before 266? Perhaps it should just be:
&gt; 
&gt; if (!BuildSear...())
&gt;   return;

The firstSubmitButton is set true at 261 and is set back to false at 267.  It will be left true if BuildSearchString returns false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303464</commentid>
    <comment_count>25</comment_count>
    <who name="Scott Violet">sky</who>
    <bug_when>2010-11-02 10:44:11 -0700</bug_when>
    <thetext>The changes to WebSearchableFormData LGTM, you&apos;ll need to get someone else to review the changes to ContextMenuClientImpl.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303814</commentid>
    <comment_count>26</comment_count>
      <attachid>72499</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-11-02 17:34:21 -0700</bug_when>
    <thetext>Comment on attachment 72499
Proposed Patch V5

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

&gt;&gt; WebKit/chromium/src/WebSearchableFormData.cpp:270
&gt;&gt; +    if (!validSearchString)
&gt; 
&gt; Should this be before 266? Perhaps it should just be:
&gt; 
&gt; if (!BuildSear...())
&gt;   return;

The firstSubmitButton is set true at 261 and is set back to false at 267.  It will be left true if BuildSearchString returns false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303860</commentid>
    <comment_count>27</comment_count>
      <attachid>72499</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-11-02 19:29:55 -0700</bug_when>
    <thetext>Comment on attachment 72499
Proposed Patch V5

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

&gt;&gt; WebKit/chromium/src/WebSearchableFormData.cpp:270
&gt;&gt; +    if (!validSearchString)
&gt; 
&gt; Should this be before 266? Perhaps it should just be:
&gt; 
&gt; if (!BuildSear...())
&gt;   return;

The firstSubmitButton is set true at 261 and is set back to false at 267.  It will be left true if BuildSearchString returns false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303865</commentid>
    <comment_count>28</comment_count>
    <who name="">philippe.beauchamp</who>
    <bug_when>2010-11-02 19:38:45 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; The changes to WebSearchableFormData LGTM, you&apos;ll need to get someone else to review the changes to ContextMenuClientImpl.cpp.

OK thanks, Peter, are you right person to have a look at it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304080</commentid>
    <comment_count>29</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-11-03 10:06:15 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #25)
&gt; &gt; The changes to WebSearchableFormData LGTM, you&apos;ll need to get someone else to review the changes to ContextMenuClientImpl.cpp.
&gt; 
&gt; OK thanks, Peter, are you right person to have a look at it?

I can&apos;t review this because I don&apos;t know how all the WebKit data structures here fit together.  For example, I can&apos;t tell you whether your method of obtaining the current form is the right one.  I&apos;m not sure who knows this.  Maybe dglazkov knows who&apos;d know.

I can tell you that you can combine some of your nested conditionals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304879</commentid>
    <comment_count>30</comment_count>
      <attachid>72654</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-11-04 14:32:51 -0700</bug_when>
    <thetext>Comment on attachment 72654
Proposed Patch V6

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

&gt; WebKit/chromium/public/WebSearchableFormData.h:48
&gt; +    WEBKIT_API WebSearchableFormData(const WebFormElement&amp;, const WebCore::HTMLInputElement* selectedInputElement = 0);

Please don&apos;t pass WebCore types into WebKit API. That&apos;s what WebInputElement/WebElement wrappers are for.

&gt; WebKit/chromium/src/ContextMenuClientImpl.cpp:253
&gt; +        WebCore::HTMLInputElement* selectedElement = static_cast&lt;WebCore::HTMLInputElement*&gt;(r.innerNonSharedNode());

What if it&apos;s not an HTMLInputElement?

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:147
&gt; +WebCore::HTMLInputElement* FindSuitableTextElement(const HTMLFormElement* form)

Why do we have Capitalized methods in WebKit? That&apos;s not WebKit style http://webkit.org/coding/coding-style.html

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:187
&gt; +bool BuildSearchString(const HTMLFormElement* form, Vector&lt;char&gt;* encodedString, TextEncoding* encoding, const WebCore::HTMLInputElement* textElement)

Ditto.

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:222
&gt; +{
&gt; +    bool isElementFound = false;   
&gt; +
&gt; +    // FIXME: Consider refactoring this code so that we don&apos;t call form-&gt;associatedElements() twice.
&gt; +    for (Vector&lt;HTMLFormControlElement*&gt;::const_iterator i(form-&gt;associatedElements().begin()); i != form-&gt;associatedElements().end(); ++i) {
&gt; +        HTMLFormControlElement* formElement = *i;
&gt; +        if (formElement-&gt;disabled() || formElement-&gt;name().isNull())
&gt; +            continue;
&gt; +
&gt; +        FormDataList dataList(*encoding);
&gt; +        if (!formElement-&gt;appendFormData(dataList, false))
&gt; +            continue;
&gt; +
&gt; +        const Vector&lt;FormDataList::Item&gt;&amp; items = dataList.items();
&gt; +
&gt; +        for (Vector&lt;FormDataList::Item&gt;::const_iterator j(items.begin()); j != items.end(); ++j) {
&gt; +            // Handle ISINDEX / &lt;input name=isindex&gt; specially, but only if it&apos;s
&gt; +            // the first entry.
&gt; +            if (!encodedString-&gt;isEmpty() || j-&gt;data() != &quot;isindex&quot;) {
&gt; +                if (!encodedString-&gt;isEmpty())
&gt; +                    encodedString-&gt;append(&apos;&amp;&apos;);
&gt; +                FormDataBuilder::encodeStringAsFormData(*encodedString, j-&gt;data());
&gt; +                encodedString-&gt;append(&apos;=&apos;);
&gt; +            }
&gt; +            ++j;
&gt; +            if (formElement == textElement) {
&gt; +                encodedString-&gt;append(&quot;{searchTerms}&quot;, 13);
&gt; +                isElementFound = true;
&gt; +            } else {
&gt; +                FormDataBuilder::encodeStringAsFormData(*encodedString, j-&gt;data());
&gt; +            }
&gt; +        }
&gt; +    }
&gt; +    return isElementFound;
&gt; +}

Can this somehow not be a mostly duplication of FormData logic?

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:284
&gt; +    m_encoding = (String) encoding.name();

Whoa. Why are we casting things here like that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390278</commentid>
    <comment_count>31</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-04-21 13:13:52 -0700</bug_when>
    <thetext>Philippe, are you still around?  I&apos;d hate to see this die.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390776</commentid>
    <comment_count>32</comment_count>
    <who name="">philippe.beauchamp</who>
    <bug_when>2011-04-22 08:05:30 -0700</bug_when>
    <thetext>I&apos;m still around. I agree, we should move this forward. I’ll check this during the weekend. 
Philippe

(In reply to comment #31)
&gt; Philippe, are you still around?  I&apos;d hate to see this die.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391808</commentid>
    <comment_count>33</comment_count>
      <attachid>90924</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2011-04-25 10:13:57 -0700</bug_when>
    <thetext>Created attachment 90924
Proposed Patch V7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391811</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-25 10:22:26 -0700</bug_when>
    <thetext>Attachment 90924 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebKit/chromium/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Source/WebKit/chromium/src/WebSearchableFormData.cpp:230:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebKit/chromium/src/WebSearchableFormData.cpp:192:  Line contains invalid UTF-8 (or Unicode replacement character).  [readability/utf8] [5]
Source/WebKit/chromium/public/WebSearchableFormData.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/chromium/public/WebSearchableFormData.h:47:  Missing spaces around =  [whitespace/operators] [4]
Source/WebKit/chromium/src/ContextMenuClientImpl.cpp:46:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 6 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391833</commentid>
    <comment_count>35</comment_count>
      <attachid>90932</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2011-04-25 10:53:05 -0700</bug_when>
    <thetext>Created attachment 90932
Proposed Patch V7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391834</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-25 10:55:42 -0700</bug_when>
    <thetext>Attachment 90932 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebKit/chromium/src/ContextMenuClientImpl.cpp:46:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400459</commentid>
    <comment_count>37</comment_count>
    <who name="">philippe.beauchamp</who>
    <bug_when>2011-05-09 05:40:52 -0700</bug_when>
    <thetext>Hello Dimitri,

Can you have  look at the patch when you have some time? 

I changed the Webcore/Webkit api call and other items.  

I&apos;m not sure about the conversion for the selectedInputElement into WebCore type in WebSearchableFormData, can you comment on this?

thanks,
Philippe  


(In reply to comment #35)
&gt; Created an attachment (id=90932) [details]
&gt; Proposed Patch V7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404517</commentid>
    <comment_count>38</comment_count>
      <attachid>90932</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-05-16 09:07:35 -0700</bug_when>
    <thetext>Comment on attachment 90932
Proposed Patch V7

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

Please address style elf&apos;s feedback.

&gt; Source/WebKit/chromium/src/WebSearchableFormData.cpp:151
&gt; +WebCore::HTMLInputElement* findSuitableSearchInputElement(const HTMLFormElement* form)

Don&apos;t need WebCore namespace qualifier here.

&gt; Source/WebKit/chromium/src/WebSearchableFormData.cpp:165
&gt; +        // Return nothing if an element is not in the default state
&gt; +        // Return nothing if a text area is found.

This comment just repeats what the code does. Don&apos;t need it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404922</commentid>
    <comment_count>39</comment_count>
      <attachid>93734</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2011-05-16 20:26:36 -0700</bug_when>
    <thetext>Created attachment 93734
Proposed Patch V8

Updated Patch. 
-Removed comments
-Removed WebCore namespace qualifier 

Style error is false positive for Alphabetical Sorting problem
***
#include &quot;HitTestResult.h&quot;
#include &quot;HTMLFormElement.h&quot;
           ^
***
in \Tools\Scripts\webkitpy\style\checkers\cpp.py:2703
if previous_header_type == _OTHER_HEADER and previous_line.strip() &gt; line.strip():

should be something like:
if previous_header_type == _OTHER_HEADER and previous_line.strip().lower() &gt; line.strip().lower():

I&apos;ll report to check-webkit-style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404923</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-16 20:28:20 -0700</bug_when>
    <thetext>Attachment 93734 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebKit/chromium/src/ContextMenuClientImpl.cpp:46:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406366</commentid>
    <comment_count>41</comment_count>
      <attachid>94064</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2011-05-19 06:26:48 -0700</bug_when>
    <thetext>Created attachment 94064
Proposed Patch V9

Solved the Alphabetical sorting problem, I didn&apos;t pay attention to the Style Guideline for this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411474</commentid>
    <comment_count>42</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-05-27 09:13:02 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; Created an attachment (id=93734) [details]
&gt; Proposed Patch V8
&gt; 
&gt; Updated Patch. 
&gt; -Removed comments
&gt; -Removed WebCore namespace qualifier 
&gt; 
&gt; Style error is false positive for Alphabetical Sorting problem
&gt; ***
&gt; #include &quot;HitTestResult.h&quot;
&gt; #include &quot;HTMLFormElement.h&quot;
&gt;            ^
&gt; ***
&gt; in \Tools\Scripts\webkitpy\style\checkers\cpp.py:2703
&gt; if previous_header_type == _OTHER_HEADER and previous_line.strip() &gt; line.strip():
&gt; 
&gt; should be something like:
&gt; if previous_header_type == _OTHER_HEADER and previous_line.strip().lower() &gt; line.strip().lower():
&gt; 
&gt; I&apos;ll report to check-webkit-style

It&apos;s intentionally a case-sensitive sort. See http://www.webkit.org/coding/coding-style.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411477</commentid>
    <comment_count>43</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-05-27 09:13:51 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; Created an attachment (id=94064) [details]
&gt; Proposed Patch V9
&gt; 
&gt; Solved the Alphabetical sorting problem, I didn&apos;t pay attention to the Style Guideline for this one.

Ah, I see you got this :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411484</commentid>
    <comment_count>44</comment_count>
      <attachid>94064</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-05-27 09:18:55 -0700</bug_when>
    <thetext>Comment on attachment 94064
Proposed Patch V9

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

&gt; Source/WebKit/chromium/src/ContextMenuClientImpl.cpp:277
&gt; +        WebCore::HTMLFormElement* form = selectedFrame-&gt;selection()-&gt;currentForm();

Still don&apos;t need WebCore namespace here and elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414598</commentid>
    <comment_count>45</comment_count>
      <attachid>95844</attachid>
    <who name="">philippe.beauchamp</who>
    <bug_when>2011-06-02 18:54:58 -0700</bug_when>
    <thetext>Created attachment 95844
Proposed Patch V10 - Removed WebCore namespace tags</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414959</commentid>
    <comment_count>46</comment_count>
      <attachid>95844</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-03 09:41:17 -0700</bug_when>
    <thetext>Comment on attachment 95844
Proposed Patch V10 - Removed WebCore namespace tags 

Rejecting attachment 95844 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-7&apos;, &apos;apply-...&quot; exit_code: 1

Last 500 characters of output:
autoinstalled/mechanize/_urllib2_fork.py&quot;, line 332, in _call_chain
    result = func(*args)
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 1170, in https_open
    return self.do_open(conn_factory, req)
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 1118, in do_open
    raise URLError(err)
urllib2.URLError: &lt;urlopen error [Errno 60] Operation timed out&gt;

Full output: http://queues.webkit.org/results/8763145</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414992</commentid>
    <comment_count>47</comment_count>
      <attachid>95844</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-03 10:39:23 -0700</bug_when>
    <thetext>Comment on attachment 95844
Proposed Patch V10 - Removed WebCore namespace tags 

Clearing flags on attachment: 95844

Committed r88030: &lt;http://trac.webkit.org/changeset/88030&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414993</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-03 10:39:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71278</attachid>
            <date>2010-10-20 05:56:15 -0700</date>
            <delta_ts>2010-10-24 20:48:08 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>kw.txt</filename>
            <type>text/plain</type>
            <size>8954</size>
            <attacher>philippe.beauchamp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjk5NTQpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTAtMTggIFBoaWxp
cHBlIEJlYXVjaGFtcCAgPHBoaWxpcHBlLmJlYXVjaGFtcEBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBmZWF0dXJlICJB
ZGQgYXMgc2VhcmNoIGVuZ2luZS4uLiIgaW4gYSBzZWFyY2ggdGV4dCBmaWVsZCBjb250ZXh0IG1l
bnUuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmg6CisgICAgICAgICog
cHVibGljL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5oOgorICAgICAgICAqIHNyYy9Db250ZXh0TWVu
dUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudEltcGw6
OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKToKKyAgICAgICAgKiBzcmMvV2ViU2VhcmNo
YWJsZUZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okhhc1N1aXRhYmxlVGV4dEVsZW1l
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZWFyY2hhYmxlRm9ybURhdGE6OldlYlNlYXJjaGFi
bGVGb3JtRGF0YSk6CisKIDIwMTAtMTAtMTcgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KQEAgLTQ3
LDYgKzYxLDcgQEAKICAgICAgICAgKFdlYkNvcmU6OldFQlBJbWFnZURlY29kZXI6OnN1cHBvcnRz
QWxwaGEpOgogICAgICAgICAgICAgaGVhZGVyIGZvciB3ZWJwLWRlY29kZXIgc3ViLWNsYXNzCiAK
Kz4+Pj4+Pj4gLnI2OTk1NAogMjAxMC0xMC0xNSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpJbmRleDogV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oCShyZXZpc2lvbiA2OTkyMSkKKysr
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDYgKzY5LDEwIEBAIHN0cnVjdCBXZWJDb250ZXh0TWVudURhdGEgewogICAgIC8v
IFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhlIHBhZ2UgaW4gY29udGV4dC4KICAgICBXZWJVUkwgcGFn
ZVVSTDsKIAorICAgIC8vIFRoZSBhYnNvbHV0ZSBrZXl3b3JkIHNlYXJjaCBVUkwgaW5jbHVkaW5n
IHRoZSAlcyBzZWFyY2ggdGFnIHdoZW4gdGhlCisgICAgLy8gIkFkZCBhcyBzZWFyY2ggZW5naW5l
Li4uIiBvcHRpb24gaXMgY2xpY2tlZCAobGVmdCBlbXB0eSBpZiBub3QgdXNlZCkuCisgICAgV2Vi
VVJMIGtleXdvcmRVUkw7CisKICAgICAvLyBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBzdWJmcmFt
ZSBpbiBjb250ZXh0LgogICAgIFdlYlVSTCBmcmFtZVVSTDsKIApJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5oCShyZXZpc2lvbiA2OTkyMSkK
KysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNs
dWRlICJXZWJVUkwuaCIKIAorbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBIVE1MSW5wdXRFbGVt
ZW50OyB9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViRm9ybUVsZW1lbnQ7CiAKQEAg
LTQzLDcgKzQ1LDcgQEAgY2xhc3MgV2ViU2VhcmNoYWJsZUZvcm1EYXRhIHsKIHB1YmxpYzoKICAg
ICAvLyBJZiB0aGUgcHJvdmlkZWQgZm9ybSBpcyBzdWl0YWJsZSBmb3IgYXV0b21hdGVkIHNlYXJj
aGluZywgaXNWYWxpZCgpCiAgICAgLy8gd2lsbCByZXR1cm4gZmFsc2UuCi0gICAgV0VCS0lUX0FQ
SSBXZWJTZWFyY2hhYmxlRm9ybURhdGEoY29uc3QgV2ViRm9ybUVsZW1lbnQmKTsKKyAgICBXRUJL
SVRfQVBJIFdlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYsIGNvbnN0
IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIHNlbGVjdGVkSW5wdXRFbGVtZW50ID0gMCk7CiAK
ICAgICBib29sIGlzVmFsaWQoKSB7IHJldHVybiBtX3VybC5pc1ZhbGlkKCk7IH0KIApJbmRleDog
V2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcAkocmV2aXNp
b24gNjk5MjEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
KyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTUyLDExICs1NCwxMyBAQAogCiAjaW5jbHVkZSAiV2Vi
Q29udGV4dE1lbnVEYXRhLmgiCiAjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZUltcGwuaCIKKyNpbmNs
dWRlICJXZWJGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1
ZGUgIldlYk1lbnVJdGVtSW5mby5oIgogI2luY2x1ZGUgIldlYlBsdWdpbi5oIgogI2luY2x1ZGUg
IldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIKICNpbmNsdWRlICJXZWJQb2ludC5oIgorI2luY2x1
ZGUgIldlYlNlYXJjaGFibGVGb3JtRGF0YS5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2lu
Y2x1ZGUgIldlYlVSTC5oIgogI2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgiCkBAIC0yNDQsNiAr
MjQ4LDE0IEBAIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51Q2xpZW4KICAgICAg
ICAgICAgIGlmIChtX3dlYlZpZXctPmZvY3VzZWRXZWJDb3JlRnJhbWUoKS0+ZWRpdG9yKCktPnNw
ZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSgpKQogICAgICAgICAgICAgICAgIGRhdGEu
bWlzc3BlbGxlZFdvcmQgPSBzZWxlY3RNaXNzcGVsbGVkV29yZChkZWZhdWx0TWVudSwgc2VsZWN0
ZWRGcmFtZSk7CiAgICAgICAgIH0KKworICAgICAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQq
IGZvcm0gPSBzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS0+Y3VycmVudEZvcm0oKTsKKyAgICAg
ICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogc2VsZWN0ZWRFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCo+KHIuaW5uZXJOb25TaGFyZWROb2RlKCkpOwor
ICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRU
YWcpICYmIGZvcm0tPmNoZWNrVmFsaWRpdHkoKSkgeworICAgICAgICAgICAgV2ViU2VhcmNoYWJs
ZUZvcm1EYXRhIHdzID0gV2ViU2VhcmNoYWJsZUZvcm1EYXRhKFdlYkZvcm1FbGVtZW50KGZvcm0p
LCBzZWxlY3RlZEVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHdzLnVybCgpLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICBkYXRhLmtleXdvcmRVUkwgPSB3cy51cmwoKTsKKyAgICAgICAgfQog
ICAgIH0KIAogI2lmIE9TKERBUldJTikKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Vh
cmNoYWJsZUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNlYXJjaGFibGVGb3JtRGF0YS5jcHAJKHJldmlzaW9uIDY5OTIxKQorKysgV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgs
MTEgKzEzOCwxMiBAQCBib29sIElzSW5EZWZhdWx0U3RhdGUoY29uc3QgSFRNTEZvcm1Db250CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIElmIGZvcm0gaGFzIG9ubHkgb25lIHRleHQgaW5wdXQg
ZWxlbWVudCwgcmV0dXJuIHRydWUuIElmIGEgdmFsaWQgaW5wdXQKLS8vIGVsZW1lbnQgaXMgbm90
IGZvdW5kLCByZXR1cm4gZmFsc2UuIEFkZGl0aW9uYWxseSwgdGhlIGZvcm0gZGF0YSBmb3IgYWxs
Ci0vLyBlbGVtZW50cyBpcyBhZGRlZCB0byBlbmNfc3RyaW5nIGFuZCB0aGUgZW5jb2RpbmcgdXNl
ZCBpcyBzZXQgaW4KLS8vIGVuY29kaW5nX25hbWUuCi1ib29sIEhhc1N1aXRhYmxlVGV4dEVsZW1l
bnQoY29uc3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRTdHJp
bmcsIFN0cmluZyogZW5jb2RpbmdOYW1lKQorLy8gSWYgYSB0ZXh0RWxlbWVudCByZWZlcmVuY2Ug
aXMgcHJvdmlkZWQgYW5kIGZvdW5kIGluIHRoZSBmb3JtLCByZXR1cm4gdHJ1ZS4gSWYgCisvLyB0
aGUgdGV4dEVsZW1lbnQgaXMgbGVmdCBlbXB0eSBhbmQgdGhlIGZvcm0gaGFzIG9ubHkgb25lIHRl
eHQgaW5wdXQgZWxlbWVudCwgCisvLyByZXR1cm4gdHJ1ZS4gSWYgYSB2YWxpZCBpbnB1dCBlbGVt
ZW50IGlzIG5vdCBmb3VuZCwgcmV0dXJuIGZhbHNlLiAgCisvLyBBZGRpdGlvbmFsbHksIHRoZSBm
b3JtIGRhdGEgZm9yIGFsbCBlbGVtZW50cyBpcyBhZGRlZCB0byBlbmNfc3RyaW5nIGFuZCB0aGUg
CisvLyBlbmNvZGluZyB1c2VkIGlzIHNldCBpbiBlbmNvZGluZ19uYW1lLgorYm9vbCBIYXNTdWl0
YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwgVmVjdG9yPGNoYXI+
KiBlbmNvZGVkU3RyaW5nLCBTdHJpbmcqIGVuY29kaW5nTmFtZSwgY29uc3QgV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudCogdGV4dEVsZW1lbnQpCiB7CiAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5n
OwogICAgIEdldEZvcm1FbmNvZGluZyhmb3JtLCAmZW5jb2RpbmcpOwpAQCAtMTUzLDE1ICsxNTQs
MTcgQEAgYm9vbCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGbwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAgICAgKmVuY29kaW5nTmFtZSA9IGVuY29kaW5nLm5hbWUoKTsKKyAg
ICBib29sIGVsZW1lbnRJc0F1dG9kZXRlY3RlZCA9ICF0ZXh0RWxlbWVudDsKKyAgICBib29sIGlz
RWxlbWVudEZvdW5kID0gZmFsc2U7CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiB0ZXh0RWxlbWVu
dCA9IDA7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHJlZmFjdG9yaW5nIHRoaXMgY29kZSBzbyB0
aGF0IHdlIGRvbid0IGNhbGwgZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkgdHdpY2UuCiAgICAg
Zm9yIChWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBpKGZv
cm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLmJlZ2luKCkpOyBpICE9IGZvcm0tPmFzc29jaWF0ZWRF
bGVtZW50cygpLmVuZCgpOyArK2kpIHsKICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCog
Zm9ybUVsZW1lbnQgPSAqaTsKICAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5kaXNhYmxlZCgpIHx8
IGZvcm1FbGVtZW50LT5uYW1lKCkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBpZiAoIUlzSW5EZWZhdWx0U3RhdGUoZm9ybUVsZW1lbnQpIHx8IGZvcm1FbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWFUYWcpKQorICAgICAgICAvLyBBbGxvdyBu
b24gZGVmYXVsdCBmb3JtIHN0YXRlIGFuZCB0ZXh0IGFyZWEgd2hlbiBhbiBpbnB1dCBlbGVtZW50
IGlzIHByb3ZpZGVkLgorICAgICAgICBpZiAoKCFJc0luRGVmYXVsdFN0YXRlKGZvcm1FbGVtZW50
KSB8fCBmb3JtRWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRleHRhcmVhVGFnKSkgJiYg
ZWxlbWVudElzQXV0b2RldGVjdGVkKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAg
Ym9vbCBpc1RleHRFbGVtZW50ID0gZmFsc2U7CkBAIC0xODYsNyArMTg5LDggQEAgYm9vbCBIYXNT
dWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGbwogICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYgaXRlbXMgPSBkYXRhTGlzdC5p
dGVtcygpOwotICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYgIWl0ZW1zLmlzRW1wdHkoKSkgewor
ICAgICAgLy8gQWxsb3cgZm9ybXMgd2l0aCBtdWx0aXBsZSBmaWVsZHMgd2hlbiBhbiBpbnB1dCBl
bGVtZW50IGlzIHByb3ZpZGVkLgorICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYgIWl0ZW1zLmlz
RW1wdHkoKSAmJiBlbGVtZW50SXNBdXRvZGV0ZWN0ZWQpIHsKICAgICAgICAgICBpZiAodGV4dEVs
ZW1lbnQpIHsKICAgICAgICAgICAgICAgLy8gVGhlIGF1dG8tY29tcGxldGUgYmFyIG9ubHkga25v
d3MgaG93IHRvIGZpbGwgaW4gb25lIHZhbHVlLgogICAgICAgICAgICAgICAvLyBUaGlzIGZvcm0g
aGFzIG11bHRpcGxlIGZpZWxkczsgZG9uJ3QgdHJlYXQgaXQgYXMgc2VhcmNoYWJsZS4KQEAgLTIw
NCwzMCArMjA4LDM0IEBAIGJvb2wgSGFzU3VpdGFibGVUZXh0RWxlbWVudChjb25zdCBIVE1MRm8K
ICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCc9Jyk7CiAgICAgICAgICAgfQog
ICAgICAgICAgICsrajsKLSAgICAgICAgICBpZiAoZm9ybUVsZW1lbnQgPT0gdGV4dEVsZW1lbnQp
CisgICAgICAgICAgaWYgKGZvcm1FbGVtZW50ID09IHRleHRFbGVtZW50KSB7CiAgICAgICAgICAg
ICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgie3NlYXJjaFRlcm1zfSIsIDEzKTsKKyAgICAgICAg
ICAgICAgaXNFbGVtZW50Rm91bmQgPSB0cnVlOworICAgICAgICAgIH0KICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgq
ZW5jb2RlZFN0cmluZywgai0+ZGF0YSgpKTsKICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4g
dGV4dEVsZW1lbnQ7CisgICAgcmV0dXJuIGlzRWxlbWVudEZvdW5kOwogfQogCiB9IC8vIG5hbWVz
cGFjZQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJT
ZWFyY2hhYmxlRm9ybURhdGEoY29uc3QgV2ViRm9ybUVsZW1lbnQmIGZvcm0pCitXZWJTZWFyY2hh
YmxlRm9ybURhdGE6OldlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYg
Zm9ybSwgY29uc3QgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogc2VsZWN0ZWRJbnB1dEVsZW1l
bnQpCiB7CiAgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybUVsZW1lbnQgPSBmb3JtLm9w
ZXJhdG9yIFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PigpOwogICAgIGNvbnN0IEZyYW1lKiBm
cmFtZSA9IGZvcm1FbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIE9ubHkgY29uc2lkZXIgZm9ybXMgdGhhdCBHRVQg
ZGF0YSBhbmQgdGhlIGFjdGlvbiB0YXJnZXRzIGFuIGh0dHAgcGFnZS4KLSAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoZm9ybUVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Om1ldGhvZEF0
dHIpLCAicG9zdCIpIHx8ICFJc0hUVFBGb3JtU3VibWl0KGZvcm1FbGVtZW50LmdldCgpKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIC8vIE9ubHkgY29uc2lkZXIgZm9ybXMgdGhhdCBHRVQgZGF0YS4K
KyAgICAvLyBBbGxvdyBIVFRQUyBvbmx5IHdoZW4gYW4gaW5wdXQgZWxlbWVudCBpcyBwcm92aWRl
ZC4gCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZvcm1FbGVtZW50LT5nZXRBdHRyaWJ1dGUo
SFRNTE5hbWVzOjptZXRob2RBdHRyKSwgInBvc3QiKSB8fAorICAgICAgICAoIUlzSFRUUEZvcm1T
dWJtaXQoZm9ybUVsZW1lbnQuZ2V0KCkpICYmICFzZWxlY3RlZElucHV0RWxlbWVudCkpCisgICAg
ICAgICAgICByZXR1cm47CiAKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmaXJzdFN1Ym1p
dEJ1dHRvbiA9IEdldEJ1dHRvblRvQWN0aXZhdGUoZm9ybUVsZW1lbnQuZ2V0KCkpOwogICAgIGlm
IChmaXJzdFN1Ym1pdEJ1dHRvbikgewpAQCAtMjM4LDcgKzI0Niw3IEBAIFdlYlNlYXJjaGFibGVG
b3JtRGF0YTo6V2ViU2VhcmNoYWJsZUZvcm0KICAgICB9CiAgICAgVmVjdG9yPGNoYXI+IGVuY29k
ZWRTdHJpbmc7CiAgICAgU3RyaW5nIGVuY29kaW5nOwotICAgIGJvb2wgaGFzRWxlbWVudCA9IEhh
c1N1aXRhYmxlVGV4dEVsZW1lbnQoZm9ybUVsZW1lbnQuZ2V0KCksICZlbmNvZGVkU3RyaW5nLCAm
ZW5jb2RpbmcpOworICAgIGJvb2wgaGFzRWxlbWVudCA9IEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQo
Zm9ybUVsZW1lbnQuZ2V0KCksICZlbmNvZGVkU3RyaW5nLCAmZW5jb2RpbmcsIHNlbGVjdGVkSW5w
dXRFbGVtZW50KTsKICAgICBpZiAoZmlyc3RTdWJtaXRCdXR0b24pCiAgICAgICAgIGZpcnN0U3Vi
bWl0QnV0dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQoZmFsc2UpOwogICAgIGlmICghaGFzRWxlbWVu
dCkgewo=
</data>
<flag name="review"
          id="61303"
          type_id="1"
          status="-"
          setter="philippe.beauchamp"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71712</attachid>
            <date>2010-10-24 20:48:08 -0700</date>
            <delta_ts>2010-10-24 21:08:35 -0700</delta_ts>
            <desc>Proposed Patch V2 - Split of HasSuitableTextElement in two parts</desc>
            <filename>kw2.txt</filename>
            <type>text/plain</type>
            <size>13038</size>
            <attacher>philippe.beauchamp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjk5NTQpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTAtMTggIFBoaWxp
cHBlIEJlYXVjaGFtcCAgPHBoaWxpcHBlLmJlYXVjaGFtcEBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBmZWF0dXJlICJB
ZGQgYXMgc2VhcmNoIGVuZ2luZS4uLiIgaW4gc2VhcmNoIHRleHQgZmllbGQgY29udGV4dCBtZW51
LgorCisgICAgICAgICogcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oOgorICAgICAgICAqIHB1
YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaDoKKyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpn
ZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6CisgICAgICAgICogc3JjL1dlYlNlYXJjaGFi
bGVGb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXNTdWl0YWJsZVRleHRFbGVtZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxl
Rm9ybURhdGEpOgorCiAyMDEwLTEwLTE3ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgJKHJldmlzaW9uIDY5
OTIxKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNjksNiArNjksMTAgQEAgc3RydWN0IFdlYkNvbnRleHRNZW51RGF0YSB7
CiAgICAgLy8gVGhlIGFic29sdXRlIFVSTCBvZiB0aGUgcGFnZSBpbiBjb250ZXh0LgogICAgIFdl
YlVSTCBwYWdlVVJMOwogCisgICAgLy8gVGhlIGFic29sdXRlIGtleXdvcmQgc2VhcmNoIFVSTCBp
bmNsdWRpbmcgdGhlICVzIHNlYXJjaCB0YWcgd2hlbiB0aGUKKyAgICAvLyAiQWRkIGFzIHNlYXJj
aCBlbmdpbmUuLi4iIG9wdGlvbiBpcyBjbGlja2VkIChsZWZ0IGVtcHR5IGlmIG5vdCB1c2VkKS4K
KyAgICBXZWJVUkwga2V5d29yZFVSTDsKKwogICAgIC8vIFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhl
IHN1YmZyYW1lIGluIGNvbnRleHQuCiAgICAgV2ViVVJMIGZyYW1lVVJMOwogCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgJKHJldmlzaW9u
IDY5OTIxKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIldlYlN0cmluZy5o
IgogI2luY2x1ZGUgIldlYlVSTC5oIgogCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7IH0KKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJGb3JtRWxlbWVu
dDsKIApAQCAtNDMsNyArNDUsNyBAQCBjbGFzcyBXZWJTZWFyY2hhYmxlRm9ybURhdGEgewogcHVi
bGljOgogICAgIC8vIElmIHRoZSBwcm92aWRlZCBmb3JtIGlzIHN1aXRhYmxlIGZvciBhdXRvbWF0
ZWQgc2VhcmNoaW5nLCBpc1ZhbGlkKCkKICAgICAvLyB3aWxsIHJldHVybiBmYWxzZS4KLSAgICBX
RUJLSVRfQVBJIFdlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYpOwor
ICAgIFdFQktJVF9BUEkgV2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50
JiwgY29uc3QgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogc2VsZWN0ZWRJbnB1dEVsZW1lbnQg
PSAwKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuIG1fdXJsLmlzVmFsaWQoKTsgfQog
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3Bw
CShyZXZpc2lvbiA2OTkyMSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGll
bnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtNTIsMTEgKzU0LDEzIEBACiAKICNpbmNs
dWRlICJXZWJDb250ZXh0TWVudURhdGEuaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5o
IgorI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgi
CiAjaW5jbHVkZSAiV2ViTWVudUl0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCiAj
aW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgogI2luY2x1ZGUgIldlYlBvaW50Lmgi
CisjaW5jbHVkZSAiV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5n
LmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKQEAg
LTI0NCw2ICsyNDgsMTQgQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGll
bgogICAgICAgICAgICAgaWYgKG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVGcmFtZSgpLT5lZGl0
b3IoKS0+c3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkpCiAgICAgICAgICAgICAg
ICAgZGF0YS5taXNzcGVsbGVkV29yZCA9IHNlbGVjdE1pc3NwZWxsZWRXb3JkKGRlZmF1bHRNZW51
LCBzZWxlY3RlZEZyYW1lKTsKICAgICAgICAgfQorCisgICAgICAgIFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudCogZm9ybSA9IHNlbGVjdGVkRnJhbWUtPnNlbGVjdGlvbigpLT5jdXJyZW50Rm9ybSgp
OworICAgICAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBzZWxlY3RlZEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kj4oci5pbm5lck5vblNoYXJlZE5v
ZGUoKSk7CisgICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjppbnB1dFRhZykgJiYgZm9ybS0+Y2hlY2tWYWxpZGl0eSgpKSB7CisgICAgICAgICAgICBXZWJT
ZWFyY2hhYmxlRm9ybURhdGEgd3MgPSBXZWJTZWFyY2hhYmxlRm9ybURhdGEoV2ViRm9ybUVsZW1l
bnQoZm9ybSksIHNlbGVjdGVkRWxlbWVudCk7CisgICAgICAgICAgICBpZiAod3MudXJsKCkuaXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgIGRhdGEua2V5d29yZFVSTCA9IHdzLnVybCgpOworICAg
ICAgICB9CiAgICAgfQogCiAjaWYgT1MoREFSV0lOKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAkocmV2aXNpb24gNjk5MjEpCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzOCwyMiArMTM4LDE0IEBAIGJvb2wgSXNJbkRlZmF1bHRTdGF0ZShjb25zdCBIVE1MRm9y
bUNvbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gSWYgZm9ybSBoYXMgb25seSBvbmUgdGV4
dCBpbnB1dCBlbGVtZW50LCByZXR1cm4gdHJ1ZS4gSWYgYSB2YWxpZCBpbnB1dAotLy8gZWxlbWVu
dCBpcyBub3QgZm91bmQsIHJldHVybiBmYWxzZS4gQWRkaXRpb25hbGx5LCB0aGUgZm9ybSBkYXRh
IGZvciBhbGwKLS8vIGVsZW1lbnRzIGlzIGFkZGVkIHRvIGVuY19zdHJpbmcgYW5kIHRoZSBlbmNv
ZGluZyB1c2VkIGlzIHNldCBpbgotLy8gZW5jb2RpbmdfbmFtZS4KLWJvb2wgSGFzU3VpdGFibGVU
ZXh0RWxlbWVudChjb25zdCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIFZlY3RvcjxjaGFyPiogZW5j
b2RlZFN0cmluZywgU3RyaW5nKiBlbmNvZGluZ05hbWUpCisvLyBMb29rIGZvciBhIHN1aXRhYmxl
IHNlYXJjaCB0ZXh0IGZpZWxkIGluIGEgZ2l2ZW4gSFRNTEZvcm1FbGVtZW50IAorLy8gUmV0dXJu
IG5vdGhpbmcgaWYgdGhvc2UgaXRlbXMgYXJlIGZvdW5kOgorLy8gIC0gQSB0ZXh0IGFyZWEgZmll
bGQKKy8vICAtIEEgZmlsZSB1cGxvYWQgZmllbGQgCisvLyAgLSBBIFBhc3N3b3JkIGZpZWxkCisv
LyAgLSBNb3JlIHRoYW4gb25lIHRleHQgZmllbGQKK1dlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQq
IEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQoY29uc3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBUZXh0
RW5jb2RpbmcqIGVuY29kaW5nKQogewotICAgIFRleHRFbmNvZGluZyBlbmNvZGluZzsKLSAgICBH
ZXRGb3JtRW5jb2RpbmcoZm9ybSwgJmVuY29kaW5nKTsKLSAgICBpZiAoIWVuY29kaW5nLmlzVmFs
aWQoKSkgewotICAgICAgICAvLyBOZWVkIGEgdmFsaWQgZW5jb2RpbmcgdG8gZW5jb2RlIHRoZSBm
b3JtIGVsZW1lbnRzLgotICAgICAgICAvLyBJZiB0aGUgZW5jb2RpbmcgaXNuJ3QgZm91bmQgd2Vi
a2l0IGVuZHMgdXAgcmVwbGFjaW5nIHRoZSBwYXJhbXMgd2l0aAotICAgICAgICAvLyBlbXB0eSBz
dHJpbmdzLiBTbywgd2UgZG9uJ3QgdHJ5IHRvIGRvIGFueXRoaW5nIGhlcmUuCi0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICAqZW5jb2RpbmdOYW1lID0gZW5jb2RpbmcubmFtZSgpOwotCiAg
ICAgSFRNTElucHV0RWxlbWVudCogdGV4dEVsZW1lbnQgPSAwOwogICAgIC8vIEZJWE1FOiBDb25z
aWRlciByZWZhY3RvcmluZyB0aGlzIGNvZGUgc28gdGhhdCB3ZSBkb24ndCBjYWxsIGZvcm0tPmFz
c29jaWF0ZWRFbGVtZW50cygpIHR3aWNlLgogICAgIGZvciAoVmVjdG9yPEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgaShmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5i
ZWdpbigpKTsgaSAhPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5lbmQoKTsgKytpKSB7CkBA
IC0xNjEsNzMgKzE1MywxMDggQEAgYm9vbCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhU
TUxGbwogICAgICAgICBpZiAoZm9ybUVsZW1lbnQtPmRpc2FibGVkKCkgfHwgZm9ybUVsZW1lbnQt
Pm5hbWUoKS5pc051bGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIC8vIFJl
dHVybiBub3RoaW5nIGlmIGFuIGVsZW1lbnQgaXMgbm90IGluIHRoZSBkZWZhdWx0IHN0YXRlIChp
ZTogbGlzdCBib3gsIHJhZGlvIGJ1dHRvbiwgZXRjLikKKyAgICAgICAgLy8gUmV0dXJuIG5vdGhp
bmcgaWYgYSB0ZXh0IGFyZWEgaXMgcHJlc2VudC4KICAgICAgICAgaWYgKCFJc0luRGVmYXVsdFN0
YXRlKGZvcm1FbGVtZW50KSB8fCBmb3JtRWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRl
eHRhcmVhVGFnKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIGJvb2wgaXNUZXh0
RWxlbWVudCA9IGZhbHNlOworICAgICAgICBGb3JtRGF0YUxpc3QgZGF0YUxpc3QoKmVuY29kaW5n
KTsKKyAgICAgICAgaWYgKCFmb3JtRWxlbWVudC0+YXBwZW5kRm9ybURhdGEoZGF0YUxpc3QsIGZh
bHNlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IFZlY3RvcjxGb3Jt
RGF0YUxpc3Q6Okl0ZW0+JiBpdGVtcyA9IGRhdGFMaXN0Lml0ZW1zKCk7CisKICAgICAgICAgaWYg
KGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CiAgICAgICAg
ICAgICBjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IEhU
TUxJbnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQtPmlz
RmlsZVVwbG9hZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG9vIGJpZywgZG9uJ3QgdHJ5IHRv
IGluZGV4IHRoaXMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmIChpbnB1dC0+aXNQYXNzd29yZEZpZWxkKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBEb24ndCBzdG9yZSBwYXNzd29yZHMhIFRoaXMgaXMgbW9zdCBsaWtlbHkgYW4gaHR0
cHMgYW55d2F5LgorICAgICAgICAgICAgLy8gSWdub3JlIHRoZSBmb3JtIGlmIGEgZmlsZSB1cGxv
YWQgZmllbGQgb3IgYSBwYXNzd29yZCBmaWVsZCBhcmUgcHJlc2VudC4KKyAgICAgICAgICAgIGlm
IChpbnB1dC0+aXNGaWxlVXBsb2FkKCkgfHwgaW5wdXQtPmlzUGFzc3dvcmRGaWVsZCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
aW5wdXQtPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgICAgICAgICAgaXNUZXh0RWxlbWVudCA9IHRy
dWU7Ci0gICAgICB9Ci0KLSAgICAgIEZvcm1EYXRhTGlzdCBkYXRhTGlzdChlbmNvZGluZyk7Ci0g
ICAgICBpZiAoIWZvcm1FbGVtZW50LT5hcHBlbmRGb3JtRGF0YShkYXRhTGlzdCwgZmFsc2UpKQot
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJ
dGVtPiYgaXRlbXMgPSBkYXRhTGlzdC5pdGVtcygpOwotICAgICAgaWYgKGlzVGV4dEVsZW1lbnQg
JiYgIWl0ZW1zLmlzRW1wdHkoKSkgewotICAgICAgICAgIGlmICh0ZXh0RWxlbWVudCkgewotICAg
ICAgICAgICAgICAvLyBUaGUgYXV0by1jb21wbGV0ZSBiYXIgb25seSBrbm93cyBob3cgdG8gZmls
bCBpbiBvbmUgdmFsdWUuCi0gICAgICAgICAgICAgIC8vIFRoaXMgZm9ybSBoYXMgbXVsdGlwbGUg
ZmllbGRzOyBkb24ndCB0cmVhdCBpdCBhcyBzZWFyY2hhYmxlLgotICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudCo+KGZvcm1FbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIGZvciAo
VmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT46OmNvbnN0X2l0ZXJhdG9yIGooaXRlbXMuYmVnaW4o
KSk7IGogIT0gaXRlbXMuZW5kKCk7ICsraikgewotICAgICAgICAgIC8vIEhhbmRsZSBJU0lOREVY
IC8gPGlucHV0IG5hbWU9aXNpbmRleD4gc3BlY2lhbGx5LCBidXQgb25seSBpZiBpdCdzCi0gICAg
ICAgICAgLy8gdGhlIGZpcnN0IGVudHJ5LgotICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+
aXNFbXB0eSgpIHx8IGotPmRhdGEoKSAhPSAiaXNpbmRleCIpIHsKLSAgICAgICAgICAgICAgaWYg
KCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICBlbmNvZGVkU3Ry
aW5nLT5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVT
dHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOwotICAgICAgICAgICAg
ICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJz0nKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgKytq
OwotICAgICAgICAgIGlmIChmb3JtRWxlbWVudCA9PSB0ZXh0RWxlbWVudCkKLSAgICAgICAgICAg
ICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCJ7c2VhcmNoVGVybXN9IiwgMTMpOwotICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1E
YXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOwotICAgICAgfQorICAgICAgICAgICAgaWYg
KGlucHV0LT5pc1RleHRGaWVsZCgpICYmICFpdGVtcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAodGV4dEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGF1dG8t
Y29tcGxldGUgYmFyIG9ubHkga25vd3MgaG93IHRvIGZpbGwgaW4gb25lIHZhbHVlLgorICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGZvcm0gaGFzIG11bHRpcGxlIGZpZWxkczsgZG9uJ3QgdHJl
YXQgaXQgYXMgc2VhcmNoYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KGZvcm1FbGVtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgIH0KIAogICAgIHJldHVybiB0ZXh0RWxlbWVudDsKIH0KIAorYm9vbCBCdWlsZFNlYXJj
aFN0cmluZyhjb25zdCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIFZlY3RvcjxjaGFyPiogZW5jb2Rl
ZFN0cmluZywgVGV4dEVuY29kaW5nKiBlbmNvZGluZywgY29uc3QgV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudCogdGV4dEVsZW1lbnQpCit7CisJLy8gRklYTUU6IENvbnNpZGVyIHJlZmFjdG9yaW5n
IHRoaXMgY29kZSBzbyB0aGF0IHdlIGRvbid0IGNhbGwgZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRz
KCkgdHdpY2UuCisgICAgZm9yIChWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+Ojpjb25z
dF9pdGVyYXRvciBpKGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLmJlZ2luKCkpOyBpICE9IGZv
cm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLmVuZCgpOyArK2kpIHsKKyAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQgPSAqaTsKKyAgICAgICAgaWYgKGZvcm1FbGVtZW50
LT5kaXNhYmxlZCgpIHx8IGZvcm1FbGVtZW50LT5uYW1lKCkuaXNOdWxsKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBGb3JtRGF0YUxpc3QgZGF0YUxpc3QoKmVuY29kaW5nKTsK
KyAgICAgICAgaWYgKCFmb3JtRWxlbWVudC0+YXBwZW5kRm9ybURhdGEoZGF0YUxpc3QsIGZhbHNl
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0
YUxpc3Q6Okl0ZW0+JiBpdGVtcyA9IGRhdGFMaXN0Lml0ZW1zKCk7CisKKyAgICAgICAgZm9yIChW
ZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPjo6Y29uc3RfaXRlcmF0b3IgaihpdGVtcy5iZWdpbigp
KTsgaiAhPSBpdGVtcy5lbmQoKTsgKytqKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgSVNJTkRF
WCAvIDxpbnB1dCBuYW1lPWlzaW5kZXg+IHNwZWNpYWxseSwgYnV0IG9ubHkgaWYgaXQncworICAg
ICAgICAgICAgLy8gdGhlIGZpcnN0IGVudHJ5LgorICAgICAgICAgICAgaWYgKCFlbmNvZGVkU3Ry
aW5nLT5pc0VtcHR5KCkgfHwgai0+ZGF0YSgpICE9ICJpc2luZGV4IikgeworICAgICAgICAgICAg
ICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBl
bmNvZGVkU3RyaW5nLT5hcHBlbmQoJyYnKTsKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxk
ZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCc9Jyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICArK2o7CisgICAgICAgICAgICBpZiAoZm9ybUVsZW1lbnQgPT0gdGV4dEVs
ZW1lbnQpCisgICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCJ7c2VhcmNoVGVy
bXN9IiwgMTMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEZvcm1EYXRhQnVp
bGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywgai0+ZGF0YSgpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYlNlYXJjaGFibGVGb3JtRGF0YTo6V2ViU2VhcmNo
YWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50JiBmb3JtKQorV2ViU2VhcmNoYWJsZUZv
cm1EYXRhOjpXZWJTZWFyY2hhYmxlRm9ybURhdGEoY29uc3QgV2ViRm9ybUVsZW1lbnQmIGZvcm0s
IGNvbnN0IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIHNlbGVjdGVkSW5wdXRFbGVtZW50KQog
ewogICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm1FbGVtZW50ID0gZm9ybS5vcGVyYXRv
ciBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4oKTsKICAgICBjb25zdCBGcmFtZSogZnJhbWUg
PSBmb3JtRWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAg
ICAgICByZXR1cm47CiAKLSAgICAvLyBPbmx5IGNvbnNpZGVyIGZvcm1zIHRoYXQgR0VUIGRhdGEg
YW5kIHRoZSBhY3Rpb24gdGFyZ2V0cyBhbiBodHRwIHBhZ2UuCi0gICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGZvcm1FbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjptZXRob2RBdHRyKSwg
InBvc3QiKSB8fCAhSXNIVFRQRm9ybVN1Ym1pdChmb3JtRWxlbWVudC5nZXQoKSkpCisgICAgLy8g
T25seSBjb25zaWRlciBmb3JtcyB0aGF0IEdFVCBkYXRhLgorICAgIC8vIEFsbG93IEhUVFBTIG9u
bHkgd2hlbiBhbiBpbnB1dCBlbGVtZW50IGlzIHByb3ZpZGVkLiAKKyAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoZm9ybUVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Om1ldGhvZEF0dHIp
LCAicG9zdCIpIHx8CisgICAgICAgICghSXNIVFRQRm9ybVN1Ym1pdChmb3JtRWxlbWVudC5nZXQo
KSkgJiYgIXNlbGVjdGVkSW5wdXRFbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
IFZlY3RvcjxjaGFyPiBlbmNvZGVkU3RyaW5nOworICAgIFRleHRFbmNvZGluZyBlbmNvZGluZzsK
KworICAgIEdldEZvcm1FbmNvZGluZyhmb3JtRWxlbWVudC5nZXQoKSwgJmVuY29kaW5nKTsKKyAg
ICBpZiAoIWVuY29kaW5nLmlzVmFsaWQoKSkgeworICAgICAgICAvLyBOZWVkIGEgdmFsaWQgZW5j
b2RpbmcgdG8gZW5jb2RlIHRoZSBmb3JtIGVsZW1lbnRzLgorICAgICAgICAvLyBJZiB0aGUgZW5j
b2RpbmcgaXNuJ3QgZm91bmQgd2Via2l0IGVuZHMgdXAgcmVwbGFjaW5nIHRoZSBwYXJhbXMgd2l0
aAorICAgICAgICAvLyBlbXB0eSBzdHJpbmdzLiBTbywgd2UgZG9uJ3QgdHJ5IHRvIGRvIGFueXRo
aW5nIGhlcmUuCiAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBMb29rIGZvciBhIHN1
aXRhYmxlIHNlYXJjaCB0ZXh0IGZpZWxkIGluIHRoZSBmb3JtIHdoZW4gYSAKKyAgICAvLyBzZWxl
Y3RlZElucHV0RWxlbWVudCBpcyBub3QgcHJvdmlkZWQuCisgICAgaWYgKCFzZWxlY3RlZElucHV0
RWxlbWVudCkgeworICAgICAgICBzZWxlY3RlZElucHV0RWxlbWVudCA9IEhhc1N1aXRhYmxlVGV4
dEVsZW1lbnQoZm9ybUVsZW1lbnQuZ2V0KCksICZlbmNvZGluZyk7CisKKyAgICAgICAgLy8gUmV0
dXJuIGlmIG5vIHN1aXRhYmxlIHRleHQgZWxlbWVudCBoYXMgYmVlbiBmb3VuZC4KKyAgICAgICAg
aWYgKCFzZWxlY3RlZElucHV0RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiAK
ICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmaXJzdFN1Ym1pdEJ1dHRvbiA9IEdldEJ1dHRv
blRvQWN0aXZhdGUoZm9ybUVsZW1lbnQuZ2V0KCkpOwogICAgIGlmIChmaXJzdFN1Ym1pdEJ1dHRv
bikgewpAQCAtMjM2LDIyICsyNjMsMjEgQEAgV2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFy
Y2hhYmxlRm9ybQogICAgICAgICAvLyBuYW1lIG9mIHRoZSBzdWJtaXQgYnV0dG9uLgogICAgICAg
ICBmaXJzdFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVkU3VibWl0KHRydWUpOwogICAgIH0KLSAg
ICBWZWN0b3I8Y2hhcj4gZW5jb2RlZFN0cmluZzsKLSAgICBTdHJpbmcgZW5jb2Rpbmc7Ci0gICAg
Ym9vbCBoYXNFbGVtZW50ID0gSGFzU3VpdGFibGVUZXh0RWxlbWVudChmb3JtRWxlbWVudC5nZXQo
KSwgJmVuY29kZWRTdHJpbmcsICZlbmNvZGluZyk7Ci0gICAgaWYgKGZpcnN0U3VibWl0QnV0dG9u
KQorCisJYm9vbCB2YWxpZFNlYXJjaFN0cmluZyA9IEJ1aWxkU2VhcmNoU3RyaW5nKGZvcm1FbGVt
ZW50LmdldCgpLCAmZW5jb2RlZFN0cmluZywgJmVuY29kaW5nLCBzZWxlY3RlZElucHV0RWxlbWVu
dCk7CisJCisJaWYgKGZpcnN0U3VibWl0QnV0dG9uKQogICAgICAgICBmaXJzdFN1Ym1pdEJ1dHRv
bi0+c2V0QWN0aXZhdGVkU3VibWl0KGZhbHNlKTsKLSAgICBpZiAoIWhhc0VsZW1lbnQpIHsKLSAg
ICAgICAgLy8gTm90IGEgc2VhcmNoYWJsZSBmb3JtLgorCQorICAgIGlmICghdmFsaWRTZWFyY2hT
dHJpbmcpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBTdHJpbmcgYWN0aW9uKGZvcm1F
bGVtZW50LT5hY3Rpb24oKSk7CiAgICAgS1VSTCB1cmwoZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0
ZVVSTChhY3Rpb24uaXNOdWxsKCkgPyAiIiA6IGFjdGlvbikpOwogICAgIFJlZlB0cjxGb3JtRGF0
YT4gZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlKGVuY29kZWRTdHJpbmcpOwogICAgIHVybC5z
ZXRRdWVyeShmb3JtRGF0YS0+ZmxhdHRlblRvU3RyaW5nKCkpOwogICAgIG1fdXJsID0gdXJsOwot
ICAgIG1fZW5jb2RpbmcgPSBlbmNvZGluZzsKKyAgICBtX2VuY29kaW5nID0gKFN0cmluZykgZW5j
b2RpbmcubmFtZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71714</attachid>
            <date>2010-10-24 21:08:35 -0700</date>
            <delta_ts>2010-10-28 05:26:15 -0700</delta_ts>
            <desc>Proposed Patch V2 - Split of HasSuitableTextElement in two parts</desc>
            <filename>kw3.txt</filename>
            <type>text/plain</type>
            <size>13016</size>
            <attacher>philippe.beauchamp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjk5NTQpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTAtMTggIFBoaWxp
cHBlIEJlYXVjaGFtcCAgPHBoaWxpcHBlLmJlYXVjaGFtcEBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBmZWF0dXJlICJB
ZGQgYXMgc2VhcmNoIGVuZ2luZS4uLiIgaW4gc2VhcmNoIHRleHQgZmllbGQgY29udGV4dCBtZW51
LgorCisgICAgICAgICogcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oOgorICAgICAgICAqIHB1
YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaDoKKyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpn
ZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6CisgICAgICAgICogc3JjL1dlYlNlYXJjaGFi
bGVGb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXNTdWl0YWJsZVRleHRFbGVtZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxl
Rm9ybURhdGEpOgorCiAyMDEwLTEwLTE3ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgJKHJldmlzaW9uIDY5
OTIxKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNjksNiArNjksMTAgQEAgc3RydWN0IFdlYkNvbnRleHRNZW51RGF0YSB7
CiAgICAgLy8gVGhlIGFic29sdXRlIFVSTCBvZiB0aGUgcGFnZSBpbiBjb250ZXh0LgogICAgIFdl
YlVSTCBwYWdlVVJMOwogCisgICAgLy8gVGhlIGFic29sdXRlIGtleXdvcmQgc2VhcmNoIFVSTCBp
bmNsdWRpbmcgdGhlICVzIHNlYXJjaCB0YWcgd2hlbiB0aGUKKyAgICAvLyAiQWRkIGFzIHNlYXJj
aCBlbmdpbmUuLi4iIG9wdGlvbiBpcyBjbGlja2VkIChsZWZ0IGVtcHR5IGlmIG5vdCB1c2VkKS4K
KyAgICBXZWJVUkwga2V5d29yZFVSTDsKKwogICAgIC8vIFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhl
IHN1YmZyYW1lIGluIGNvbnRleHQuCiAgICAgV2ViVVJMIGZyYW1lVVJMOwogCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgJKHJldmlzaW9u
IDY5OTIxKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIldlYlN0cmluZy5o
IgogI2luY2x1ZGUgIldlYlVSTC5oIgogCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7IH0KKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJGb3JtRWxlbWVu
dDsKIApAQCAtNDMsNyArNDUsNyBAQCBjbGFzcyBXZWJTZWFyY2hhYmxlRm9ybURhdGEgewogcHVi
bGljOgogICAgIC8vIElmIHRoZSBwcm92aWRlZCBmb3JtIGlzIHN1aXRhYmxlIGZvciBhdXRvbWF0
ZWQgc2VhcmNoaW5nLCBpc1ZhbGlkKCkKICAgICAvLyB3aWxsIHJldHVybiBmYWxzZS4KLSAgICBX
RUJLSVRfQVBJIFdlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYpOwor
ICAgIFdFQktJVF9BUEkgV2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50
JiwgY29uc3QgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogc2VsZWN0ZWRJbnB1dEVsZW1lbnQg
PSAwKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuIG1fdXJsLmlzVmFsaWQoKTsgfQog
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3Bw
CShyZXZpc2lvbiA2OTkyMSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGll
bnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtNTIsMTEgKzU0LDEzIEBACiAKICNpbmNs
dWRlICJXZWJDb250ZXh0TWVudURhdGEuaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5o
IgorI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgi
CiAjaW5jbHVkZSAiV2ViTWVudUl0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCiAj
aW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgogI2luY2x1ZGUgIldlYlBvaW50Lmgi
CisjaW5jbHVkZSAiV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5n
LmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKQEAg
LTI0NCw2ICsyNDgsMTQgQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGll
bgogICAgICAgICAgICAgaWYgKG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVGcmFtZSgpLT5lZGl0
b3IoKS0+c3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkpCiAgICAgICAgICAgICAg
ICAgZGF0YS5taXNzcGVsbGVkV29yZCA9IHNlbGVjdE1pc3NwZWxsZWRXb3JkKGRlZmF1bHRNZW51
LCBzZWxlY3RlZEZyYW1lKTsKICAgICAgICAgfQorCisgICAgICAgIFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudCogZm9ybSA9IHNlbGVjdGVkRnJhbWUtPnNlbGVjdGlvbigpLT5jdXJyZW50Rm9ybSgp
OworICAgICAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBzZWxlY3RlZEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kj4oci5pbm5lck5vblNoYXJlZE5v
ZGUoKSk7CisgICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjppbnB1dFRhZykgJiYgZm9ybS0+Y2hlY2tWYWxpZGl0eSgpKSB7CisgICAgICAgICAgICBXZWJT
ZWFyY2hhYmxlRm9ybURhdGEgd3MgPSBXZWJTZWFyY2hhYmxlRm9ybURhdGEoV2ViRm9ybUVsZW1l
bnQoZm9ybSksIHNlbGVjdGVkRWxlbWVudCk7CisgICAgICAgICAgICBpZiAod3MudXJsKCkuaXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgIGRhdGEua2V5d29yZFVSTCA9IHdzLnVybCgpOworICAg
ICAgICB9CiAgICAgfQogCiAjaWYgT1MoREFSV0lOKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAkocmV2aXNpb24gNjk5MjEpCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzOCwyMiArMTM4LDE0IEBAIGJvb2wgSXNJbkRlZmF1bHRTdGF0ZShjb25zdCBIVE1MRm9y
bUNvbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gSWYgZm9ybSBoYXMgb25seSBvbmUgdGV4
dCBpbnB1dCBlbGVtZW50LCByZXR1cm4gdHJ1ZS4gSWYgYSB2YWxpZCBpbnB1dAotLy8gZWxlbWVu
dCBpcyBub3QgZm91bmQsIHJldHVybiBmYWxzZS4gQWRkaXRpb25hbGx5LCB0aGUgZm9ybSBkYXRh
IGZvciBhbGwKLS8vIGVsZW1lbnRzIGlzIGFkZGVkIHRvIGVuY19zdHJpbmcgYW5kIHRoZSBlbmNv
ZGluZyB1c2VkIGlzIHNldCBpbgotLy8gZW5jb2RpbmdfbmFtZS4KLWJvb2wgSGFzU3VpdGFibGVU
ZXh0RWxlbWVudChjb25zdCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIFZlY3RvcjxjaGFyPiogZW5j
b2RlZFN0cmluZywgU3RyaW5nKiBlbmNvZGluZ05hbWUpCisvLyBMb29rIGZvciBhIHN1aXRhYmxl
IHNlYXJjaCB0ZXh0IGZpZWxkIGluIGEgZ2l2ZW4gSFRNTEZvcm1FbGVtZW50IAorLy8gUmV0dXJu
IG5vdGhpbmcgaWYgdGhvc2UgaXRlbXMgYXJlIGZvdW5kOgorLy8gIC0gQSB0ZXh0IGFyZWEgZmll
bGQKKy8vICAtIEEgZmlsZSB1cGxvYWQgZmllbGQgCisvLyAgLSBBIFBhc3N3b3JkIGZpZWxkCisv
LyAgLSBNb3JlIHRoYW4gb25lIHRleHQgZmllbGQKK1dlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQq
IEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQoY29uc3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBUZXh0
RW5jb2RpbmcqIGVuY29kaW5nKQogewotICAgIFRleHRFbmNvZGluZyBlbmNvZGluZzsKLSAgICBH
ZXRGb3JtRW5jb2RpbmcoZm9ybSwgJmVuY29kaW5nKTsKLSAgICBpZiAoIWVuY29kaW5nLmlzVmFs
aWQoKSkgewotICAgICAgICAvLyBOZWVkIGEgdmFsaWQgZW5jb2RpbmcgdG8gZW5jb2RlIHRoZSBm
b3JtIGVsZW1lbnRzLgotICAgICAgICAvLyBJZiB0aGUgZW5jb2RpbmcgaXNuJ3QgZm91bmQgd2Vi
a2l0IGVuZHMgdXAgcmVwbGFjaW5nIHRoZSBwYXJhbXMgd2l0aAotICAgICAgICAvLyBlbXB0eSBz
dHJpbmdzLiBTbywgd2UgZG9uJ3QgdHJ5IHRvIGRvIGFueXRoaW5nIGhlcmUuCi0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICAqZW5jb2RpbmdOYW1lID0gZW5jb2RpbmcubmFtZSgpOwotCiAg
ICAgSFRNTElucHV0RWxlbWVudCogdGV4dEVsZW1lbnQgPSAwOwogICAgIC8vIEZJWE1FOiBDb25z
aWRlciByZWZhY3RvcmluZyB0aGlzIGNvZGUgc28gdGhhdCB3ZSBkb24ndCBjYWxsIGZvcm0tPmFz
c29jaWF0ZWRFbGVtZW50cygpIHR3aWNlLgogICAgIGZvciAoVmVjdG9yPEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgaShmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5i
ZWdpbigpKTsgaSAhPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5lbmQoKTsgKytpKSB7CkBA
IC0xNjEsNzMgKzE1MywxMDcgQEAgYm9vbCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhU
TUxGbwogICAgICAgICBpZiAoZm9ybUVsZW1lbnQtPmRpc2FibGVkKCkgfHwgZm9ybUVsZW1lbnQt
Pm5hbWUoKS5pc051bGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIC8vIFJl
dHVybiBub3RoaW5nIGlmIGFuIGVsZW1lbnQgaXMgbm90IGluIHRoZSBkZWZhdWx0IHN0YXRlIChp
ZTogbGlzdCBib3gsIHJhZGlvIGJ1dHRvbiwgZXRjLikKKyAgICAgICAgLy8gUmV0dXJuIG5vdGhp
bmcgaWYgYSB0ZXh0IGFyZWEgaXMgcHJlc2VudC4KICAgICAgICAgaWYgKCFJc0luRGVmYXVsdFN0
YXRlKGZvcm1FbGVtZW50KSB8fCBmb3JtRWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRl
eHRhcmVhVGFnKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIGJvb2wgaXNUZXh0
RWxlbWVudCA9IGZhbHNlOworICAgICAgICBGb3JtRGF0YUxpc3QgZGF0YUxpc3QoKmVuY29kaW5n
KTsKKyAgICAgICAgaWYgKCFmb3JtRWxlbWVudC0+YXBwZW5kRm9ybURhdGEoZGF0YUxpc3QsIGZh
bHNlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IFZlY3RvcjxGb3Jt
RGF0YUxpc3Q6Okl0ZW0+JiBpdGVtcyA9IGRhdGFMaXN0Lml0ZW1zKCk7CisKICAgICAgICAgaWYg
KGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CiAgICAgICAg
ICAgICBjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IEhU
TUxJbnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQtPmlz
RmlsZVVwbG9hZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG9vIGJpZywgZG9uJ3QgdHJ5IHRv
IGluZGV4IHRoaXMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmIChpbnB1dC0+aXNQYXNzd29yZEZpZWxkKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBEb24ndCBzdG9yZSBwYXNzd29yZHMhIFRoaXMgaXMgbW9zdCBsaWtlbHkgYW4gaHR0
cHMgYW55d2F5LgorICAgICAgICAgICAgLy8gUmV0dXJuIG5vdGhpbmcgaWYgYSBmaWxlIHVwbG9h
ZCBmaWVsZCBvciBhIHBhc3N3b3JkIGZpZWxkIGFyZSBwcmVzZW50LgorICAgICAgICAgICAgaWYg
KGlucHV0LT5pc0ZpbGVVcGxvYWQoKSB8fCBpbnB1dC0+aXNQYXNzd29yZEZpZWxkKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChp
bnB1dC0+aXNUZXh0RmllbGQoKSkKLSAgICAgICAgICAgICAgICBpc1RleHRFbGVtZW50ID0gdHJ1
ZTsKLSAgICAgIH0KLQotICAgICAgRm9ybURhdGFMaXN0IGRhdGFMaXN0KGVuY29kaW5nKTsKLSAg
ICAgIGlmICghZm9ybUVsZW1lbnQtPmFwcGVuZEZvcm1EYXRhKGRhdGFMaXN0LCBmYWxzZSkpCi0g
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0
ZW0+JiBpdGVtcyA9IGRhdGFMaXN0Lml0ZW1zKCk7Ci0gICAgICBpZiAoaXNUZXh0RWxlbWVudCAm
JiAhaXRlbXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgaWYgKHRleHRFbGVtZW50KSB7Ci0gICAg
ICAgICAgICAgIC8vIFRoZSBhdXRvLWNvbXBsZXRlIGJhciBvbmx5IGtub3dzIGhvdyB0byBmaWxs
IGluIG9uZSB2YWx1ZS4KLSAgICAgICAgICAgICAgLy8gVGhpcyBmb3JtIGhhcyBtdWx0aXBsZSBm
aWVsZHM7IGRvbid0IHRyZWF0IGl0IGFzIHNlYXJjaGFibGUuCi0gICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgdGV4dEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Kj4oZm9ybUVsZW1lbnQpOwotICAgICAgfQotICAgICAgZm9yIChW
ZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPjo6Y29uc3RfaXRlcmF0b3IgaihpdGVtcy5iZWdpbigp
KTsgaiAhPSBpdGVtcy5lbmQoKTsgKytqKSB7Ci0gICAgICAgICAgLy8gSGFuZGxlIElTSU5ERVgg
LyA8aW5wdXQgbmFtZT1pc2luZGV4PiBzcGVjaWFsbHksIGJ1dCBvbmx5IGlmIGl0J3MKLSAgICAg
ICAgICAvLyB0aGUgZmlyc3QgZW50cnkuCi0gICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5p
c0VtcHR5KCkgfHwgai0+ZGF0YSgpICE9ICJpc2luZGV4IikgewotICAgICAgICAgICAgICBpZiAo
IWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgIGVuY29kZWRTdHJp
bmctPmFwcGVuZCgnJicpOwotICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0
cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7Ci0gICAgICAgICAgICAg
IGVuY29kZWRTdHJpbmctPmFwcGVuZCgnPScpOwotICAgICAgICAgIH0KLSAgICAgICAgICArK2o7
Ci0gICAgICAgICAgaWYgKGZvcm1FbGVtZW50ID09IHRleHRFbGVtZW50KQotICAgICAgICAgICAg
ICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoIntzZWFyY2hUZXJtc30iLCAxMyk7Ci0gICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURh
dGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7Ci0gICAgICB9CisgICAgICAgICAgICBpZiAo
aW5wdXQtPmlzVGV4dEZpZWxkKCkgJiYgIWl0ZW1zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgIGlmICh0ZXh0RWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYXV0by1j
b21wbGV0ZSBiYXIgb25seSBrbm93cyBob3cgdG8gZmlsbCBpbiBvbmUgdmFsdWUuCisgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgZm9ybSBoYXMgbXVsdGlwbGUgZmllbGRzOyBkb24ndCB0cmVh
dCBpdCBhcyBzZWFyY2hhYmxlLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4oZm9ybUVsZW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9
CiAgICAgfQotCiAgICAgcmV0dXJuIHRleHRFbGVtZW50OwogfQogCitib29sIEJ1aWxkU2VhcmNo
U3RyaW5nKGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwgVmVjdG9yPGNoYXI+KiBlbmNvZGVk
U3RyaW5nLCBUZXh0RW5jb2RpbmcqIGVuY29kaW5nLCBjb25zdCBXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50KiB0ZXh0RWxlbWVudCkKK3sKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgcmVmYWN0b3Jp
bmcgdGhpcyBjb2RlIHNvIHRoYXQgd2UgZG9uJ3QgY2FsbCBmb3JtLT5hc3NvY2lhdGVkRWxlbWVu
dHMoKSB0d2ljZS4KKyAgICBmb3IgKFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj46OmNv
bnN0X2l0ZXJhdG9yIGkoZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuYmVnaW4oKSk7IGkgIT0g
Zm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuZW5kKCk7ICsraSkgeworICAgICAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCA9ICppOworICAgICAgICBpZiAoZm9ybUVsZW1l
bnQtPmRpc2FibGVkKCkgfHwgZm9ybUVsZW1lbnQtPm5hbWUoKS5pc051bGwoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIEZvcm1EYXRhTGlzdCBkYXRhTGlzdCgqZW5jb2Rpbmcp
OworICAgICAgICBpZiAoIWZvcm1FbGVtZW50LT5hcHBlbmRGb3JtRGF0YShkYXRhTGlzdCwgZmFs
c2UpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgVmVjdG9yPEZvcm1E
YXRhTGlzdDo6SXRlbT4mIGl0ZW1zID0gZGF0YUxpc3QuaXRlbXMoKTsKKworICAgICAgICBmb3Ig
KFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+Ojpjb25zdF9pdGVyYXRvciBqKGl0ZW1zLmJlZ2lu
KCkpOyBqICE9IGl0ZW1zLmVuZCgpOyArK2opIHsKKyAgICAgICAgICAgIC8vIEhhbmRsZSBJU0lO
REVYIC8gPGlucHV0IG5hbWU9aXNpbmRleD4gc3BlY2lhbGx5LCBidXQgb25seSBpZiBpdCdzCisg
ICAgICAgICAgICAvLyB0aGUgZmlyc3QgZW50cnkuCisgICAgICAgICAgICBpZiAoIWVuY29kZWRT
dHJpbmctPmlzRW1wdHkoKSB8fCBqLT5kYXRhKCkgIT0gImlzaW5kZXgiKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAg
IGVuY29kZWRTdHJpbmctPmFwcGVuZCgnJicpOworICAgICAgICAgICAgICAgIEZvcm1EYXRhQnVp
bGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywgai0+ZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJz0nKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICsrajsKKyAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudCA9PSB0ZXh0
RWxlbWVudCkKKyAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoIntzZWFyY2hU
ZXJtc30iLCAxMyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgRm9ybURhdGFC
dWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkp
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFj
ZQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFy
Y2hhYmxlRm9ybURhdGEoY29uc3QgV2ViRm9ybUVsZW1lbnQmIGZvcm0pCitXZWJTZWFyY2hhYmxl
Rm9ybURhdGE6OldlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYgZm9y
bSwgY29uc3QgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogc2VsZWN0ZWRJbnB1dEVsZW1lbnQp
CiB7CiAgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybUVsZW1lbnQgPSBmb3JtLm9wZXJh
dG9yIFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PigpOwogICAgIGNvbnN0IEZyYW1lKiBmcmFt
ZSA9IGZvcm1FbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIC8vIE9ubHkgY29uc2lkZXIgZm9ybXMgdGhhdCBHRVQgZGF0
YSBhbmQgdGhlIGFjdGlvbiB0YXJnZXRzIGFuIGh0dHAgcGFnZS4KLSAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoZm9ybUVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Om1ldGhvZEF0dHIp
LCAicG9zdCIpIHx8ICFJc0hUVFBGb3JtU3VibWl0KGZvcm1FbGVtZW50LmdldCgpKSkKKyAgICAv
LyBPbmx5IGNvbnNpZGVyIGZvcm1zIHRoYXQgR0VUIGRhdGEuCisgICAgLy8gQWxsb3cgSFRUUFMg
b25seSB3aGVuIGFuIGlucHV0IGVsZW1lbnQgaXMgcHJvdmlkZWQuIAorICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShmb3JtRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bWV0aG9kQXR0
ciksICJwb3N0IikgfHwKKyAgICAgICAgKCFJc0hUVFBGb3JtU3VibWl0KGZvcm1FbGVtZW50Lmdl
dCgpKSAmJiAhc2VsZWN0ZWRJbnB1dEVsZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgVmVjdG9yPGNoYXI+IGVuY29kZWRTdHJpbmc7CisgICAgVGV4dEVuY29kaW5nIGVuY29kaW5n
OworCisgICAgR2V0Rm9ybUVuY29kaW5nKGZvcm1FbGVtZW50LmdldCgpLCAmZW5jb2RpbmcpOwor
ICAgIGlmICghZW5jb2RpbmcuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIE5lZWQgYSB2YWxpZCBl
bmNvZGluZyB0byBlbmNvZGUgdGhlIGZvcm0gZWxlbWVudHMuCisgICAgICAgIC8vIElmIHRoZSBl
bmNvZGluZyBpc24ndCBmb3VuZCB3ZWJraXQgZW5kcyB1cCByZXBsYWNpbmcgdGhlIHBhcmFtcyB3
aXRoCisgICAgICAgIC8vIGVtcHR5IHN0cmluZ3MuIFNvLCB3ZSBkb24ndCB0cnkgdG8gZG8gYW55
dGhpbmcgaGVyZS4KICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIExvb2sgZm9yIGEg
c3VpdGFibGUgc2VhcmNoIHRleHQgZmllbGQgaW4gdGhlIGZvcm0gd2hlbiBhIAorICAgIC8vIHNl
bGVjdGVkSW5wdXRFbGVtZW50IGlzIG5vdCBwcm92aWRlZC4KKyAgICBpZiAoIXNlbGVjdGVkSW5w
dXRFbGVtZW50KSB7CisgICAgICAgIHNlbGVjdGVkSW5wdXRFbGVtZW50ID0gSGFzU3VpdGFibGVU
ZXh0RWxlbWVudChmb3JtRWxlbWVudC5nZXQoKSwgJmVuY29kaW5nKTsKKworICAgICAgICAvLyBS
ZXR1cm4gaWYgbm8gc3VpdGFibGUgdGV4dCBlbGVtZW50IGhhcyBiZWVuIGZvdW5kLgorICAgICAg
ICBpZiAoIXNlbGVjdGVkSW5wdXRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
IAogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZpcnN0U3VibWl0QnV0dG9uID0gR2V0QnV0
dG9uVG9BY3RpdmF0ZShmb3JtRWxlbWVudC5nZXQoKSk7CiAgICAgaWYgKGZpcnN0U3VibWl0QnV0
dG9uKSB7CkBAIC0yMzYsMjIgKzI2MiwyMSBAQCBXZWJTZWFyY2hhYmxlRm9ybURhdGE6OldlYlNl
YXJjaGFibGVGb3JtCiAgICAgICAgIC8vIG5hbWUgb2YgdGhlIHN1Ym1pdCBidXR0b24uCiAgICAg
ICAgIGZpcnN0U3VibWl0QnV0dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQodHJ1ZSk7CiAgICAgfQot
ICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkU3RyaW5nOwotICAgIFN0cmluZyBlbmNvZGluZzsKLSAg
ICBib29sIGhhc0VsZW1lbnQgPSBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGZvcm1FbGVtZW50Lmdl
dCgpLCAmZW5jb2RlZFN0cmluZywgJmVuY29kaW5nKTsKKworICAgIGJvb2wgdmFsaWRTZWFyY2hT
dHJpbmcgPSBCdWlsZFNlYXJjaFN0cmluZyhmb3JtRWxlbWVudC5nZXQoKSwgJmVuY29kZWRTdHJp
bmcsICZlbmNvZGluZywgc2VsZWN0ZWRJbnB1dEVsZW1lbnQpOworCiAgICAgaWYgKGZpcnN0U3Vi
bWl0QnV0dG9uKQogICAgICAgICBmaXJzdFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVkU3VibWl0
KGZhbHNlKTsKLSAgICBpZiAoIWhhc0VsZW1lbnQpIHsKLSAgICAgICAgLy8gTm90IGEgc2VhcmNo
YWJsZSBmb3JtLgorCisgICAgaWYgKCF2YWxpZFNlYXJjaFN0cmluZykKICAgICAgICAgcmV0dXJu
OwotICAgIH0KIAogICAgIFN0cmluZyBhY3Rpb24oZm9ybUVsZW1lbnQtPmFjdGlvbigpKTsKICAg
ICBLVVJMIHVybChmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKGFjdGlvbi5pc051bGwoKSA/
ICIiIDogYWN0aW9uKSk7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSA9IEZvcm1EYXRh
OjpjcmVhdGUoZW5jb2RlZFN0cmluZyk7CiAgICAgdXJsLnNldFF1ZXJ5KGZvcm1EYXRhLT5mbGF0
dGVuVG9TdHJpbmcoKSk7CiAgICAgbV91cmwgPSB1cmw7Ci0gICAgbV9lbmNvZGluZyA9IGVuY29k
aW5nOworICAgIG1fZW5jb2RpbmcgPSAoU3RyaW5nKSBlbmNvZGluZy5uYW1lKCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="61822"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72172</attachid>
            <date>2010-10-28 05:26:15 -0700</date>
            <delta_ts>2010-10-28 07:32:49 -0700</delta_ts>
            <desc>Proposed Patch V3</desc>
            <filename>kw4.txt</filename>
            <type>text/plain</type>
            <size>12857</size>
            <attacher>philippe.beauchamp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjk5NTQpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTAtMTggIFBoaWxp
cHBlIEJlYXVjaGFtcCAgPHBoaWxpcHBlLmJlYXVjaGFtcEBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBmZWF0dXJlICJB
ZGQgYXMgc2VhcmNoIGVuZ2luZS4uLiIgaW4gc2VhcmNoIHRleHQgZmllbGQgY29udGV4dCBtZW51
LgorCisgICAgICAgICogcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oOgorICAgICAgICAqIHB1
YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaDoKKyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpn
ZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6CisgICAgICAgICogc3JjL1dlYlNlYXJjaGFi
bGVGb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXNTdWl0YWJsZVRleHRFbGVtZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxl
Rm9ybURhdGEpOgorCiAyMDEwLTEwLTE3ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgJKHJldmlzaW9uIDY5
OTIxKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNjksNiArNjksMTAgQEAgc3RydWN0IFdlYkNvbnRleHRNZW51RGF0YSB7
CiAgICAgLy8gVGhlIGFic29sdXRlIFVSTCBvZiB0aGUgcGFnZSBpbiBjb250ZXh0LgogICAgIFdl
YlVSTCBwYWdlVVJMOwogCisgICAgLy8gVGhlIGFic29sdXRlIGtleXdvcmQgc2VhcmNoIFVSTCBp
bmNsdWRpbmcgdGhlICVzIHNlYXJjaCB0YWcgd2hlbiB0aGUKKyAgICAvLyAiQWRkIGFzIHNlYXJj
aCBlbmdpbmUuLi4iIG9wdGlvbiBpcyBjbGlja2VkIChsZWZ0IGVtcHR5IGlmIG5vdCB1c2VkKS4K
KyAgICBXZWJVUkwga2V5d29yZFVSTDsKKwogICAgIC8vIFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhl
IHN1YmZyYW1lIGluIGNvbnRleHQuCiAgICAgV2ViVVJMIGZyYW1lVVJMOwogCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgJKHJldmlzaW9u
IDY5OTIxKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIldlYlN0cmluZy5o
IgogI2luY2x1ZGUgIldlYlVSTC5oIgogCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7IH0KKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJGb3JtRWxlbWVu
dDsKIApAQCAtNDMsNyArNDUsNyBAQCBjbGFzcyBXZWJTZWFyY2hhYmxlRm9ybURhdGEgewogcHVi
bGljOgogICAgIC8vIElmIHRoZSBwcm92aWRlZCBmb3JtIGlzIHN1aXRhYmxlIGZvciBhdXRvbWF0
ZWQgc2VhcmNoaW5nLCBpc1ZhbGlkKCkKICAgICAvLyB3aWxsIHJldHVybiBmYWxzZS4KLSAgICBX
RUJLSVRfQVBJIFdlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYpOwor
ICAgIFdFQktJVF9BUEkgV2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50
JiwgY29uc3QgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogc2VsZWN0ZWRJbnB1dEVsZW1lbnQg
PSAwKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuIG1fdXJsLmlzVmFsaWQoKTsgfQog
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3Bw
CShyZXZpc2lvbiA2OTkyMSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGll
bnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtNTIsMTEgKzU0LDEzIEBACiAKICNpbmNs
dWRlICJXZWJDb250ZXh0TWVudURhdGEuaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5o
IgorI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgi
CiAjaW5jbHVkZSAiV2ViTWVudUl0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCiAj
aW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgogI2luY2x1ZGUgIldlYlBvaW50Lmgi
CisjaW5jbHVkZSAiV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5n
LmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKQEAg
LTI0NCw2ICsyNDgsMTYgQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGll
bgogICAgICAgICAgICAgaWYgKG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVGcmFtZSgpLT5lZGl0
b3IoKS0+c3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkpCiAgICAgICAgICAgICAg
ICAgZGF0YS5taXNzcGVsbGVkV29yZCA9IHNlbGVjdE1pc3NwZWxsZWRXb3JkKGRlZmF1bHRNZW51
LCBzZWxlY3RlZEZyYW1lKTsKICAgICAgICAgfQorCisgICAgICAgIFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudCogZm9ybSA9IHNlbGVjdGVkRnJhbWUtPnNlbGVjdGlvbigpLT5jdXJyZW50Rm9ybSgp
OworICAgICAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBzZWxlY3RlZEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kj4oci5pbm5lck5vblNoYXJlZE5v
ZGUoKSk7CisgICAgICAgIGlmIChmb3JtICYmIHNlbGVjdGVkRWxlbWVudCkgeworICAgICAgICAg
ICAgaWYgKHNlbGVjdGVkRWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSAm
JiBmb3JtLT5jaGVja1ZhbGlkaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBXZWJTZWFyY2hhYmxl
Rm9ybURhdGEgd3MgPSBXZWJTZWFyY2hhYmxlRm9ybURhdGEoV2ViRm9ybUVsZW1lbnQoZm9ybSks
IHNlbGVjdGVkRWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKHdzLnVybCgpLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5rZXl3b3JkVVJMID0gd3MudXJsKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICNpZiBPUyhEQVJXSU4pCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCShyZXZpc2lvbiA2
OTkyMSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM4LDIyICsxMzgsMTQgQEAgYm9vbCBJc0luRGVmYXVsdFN0YXRl
KGNvbnN0IEhUTUxGb3JtQ29udAogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBJZiBmb3JtIGhh
cyBvbmx5IG9uZSB0ZXh0IGlucHV0IGVsZW1lbnQsIHJldHVybiB0cnVlLiBJZiBhIHZhbGlkIGlu
cHV0Ci0vLyBlbGVtZW50IGlzIG5vdCBmb3VuZCwgcmV0dXJuIGZhbHNlLiBBZGRpdGlvbmFsbHks
IHRoZSBmb3JtIGRhdGEgZm9yIGFsbAotLy8gZWxlbWVudHMgaXMgYWRkZWQgdG8gZW5jX3N0cmlu
ZyBhbmQgdGhlIGVuY29kaW5nIHVzZWQgaXMgc2V0IGluCi0vLyBlbmNvZGluZ19uYW1lLgotYm9v
bCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwgVmVj
dG9yPGNoYXI+KiBlbmNvZGVkU3RyaW5nLCBTdHJpbmcqIGVuY29kaW5nTmFtZSkKKy8vIExvb2sg
Zm9yIGEgc3VpdGFibGUgc2VhcmNoIHRleHQgZmllbGQgaW4gYSBnaXZlbiBIVE1MRm9ybUVsZW1l
bnQgCisvLyBSZXR1cm4gbm90aGluZyBpZiBvbmUgb2YgdGhvc2UgaXRlbXMgYXJlIGZvdW5kOgor
Ly8gIC0gQSB0ZXh0IGFyZWEgZmllbGQKKy8vICAtIEEgZmlsZSB1cGxvYWQgZmllbGQgCisvLyAg
LSBBIFBhc3N3b3JkIGZpZWxkCisvLyAgLSBNb3JlIHRoYW4gb25lIHRleHQgZmllbGQKK1dlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQqIEZpbmRTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxG
b3JtRWxlbWVudCogZm9ybSkKIHsKLSAgICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmc7Ci0gICAgR2V0
Rm9ybUVuY29kaW5nKGZvcm0sICZlbmNvZGluZyk7Ci0gICAgaWYgKCFlbmNvZGluZy5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgLy8gTmVlZCBhIHZhbGlkIGVuY29kaW5nIHRvIGVuY29kZSB0aGUgZm9y
bSBlbGVtZW50cy4KLSAgICAgICAgLy8gSWYgdGhlIGVuY29kaW5nIGlzbid0IGZvdW5kIHdlYmtp
dCBlbmRzIHVwIHJlcGxhY2luZyB0aGUgcGFyYW1zIHdpdGgKLSAgICAgICAgLy8gZW1wdHkgc3Ry
aW5ncy4gU28sIHdlIGRvbid0IHRyeSB0byBkbyBhbnl0aGluZyBoZXJlLgotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgKmVuY29kaW5nTmFtZSA9IGVuY29kaW5nLm5hbWUoKTsKLQogICAg
IEhUTUxJbnB1dEVsZW1lbnQqIHRleHRFbGVtZW50ID0gMDsKICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgcmVmYWN0b3JpbmcgdGhpcyBjb2RlIHNvIHRoYXQgd2UgZG9uJ3QgY2FsbCBmb3JtLT5hc3Nv
Y2lhdGVkRWxlbWVudHMoKSB0d2ljZS4KICAgICBmb3IgKFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGkoZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuYmVn
aW4oKSk7IGkgIT0gZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuZW5kKCk7ICsraSkgewpAQCAt
MTYxLDczICsxNTMsMTAxIEBAIGJvb2wgSGFzU3VpdGFibGVUZXh0RWxlbWVudChjb25zdCBIVE1M
Rm8KICAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5kaXNhYmxlZCgpIHx8IGZvcm1FbGVtZW50LT5u
YW1lKCkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAvLyBSZXR1
cm4gbm90aGluZyBpZiBhbiBlbGVtZW50IGlzIG5vdCBpbiB0aGUgZGVmYXVsdCBzdGF0ZQorICAg
ICAgICAvLyBSZXR1cm4gbm90aGluZyBpZiBhIHRleHQgYXJlYSBpcyBwcmVzZW50LgogICAgICAg
ICBpZiAoIUlzSW5EZWZhdWx0U3RhdGUoZm9ybUVsZW1lbnQpIHx8IGZvcm1FbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWFUYWcpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAgICAgYm9vbCBpc1RleHRFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIGlmIChmb3JtRWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICAgICAgcmV0
dXJuIDA7DQorDQorICAgICAgICBpZiAoZm9ybUVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjppbnB1dFRhZykgJiYgZm9ybUVsZW1lbnQtPndpbGxWYWxpZGF0ZSgpKSB7CiAgICAgICAgICAg
ICBjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxJ
bnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQtPmlzRmls
ZVVwbG9hZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG9vIGJpZywgZG9uJ3QgdHJ5IHRvIGlu
ZGV4IHRoaXMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmIChpbnB1dC0+aXNQYXNzd29yZEZpZWxkKCkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBEb24ndCBzdG9yZSBwYXNzd29yZHMhIFRoaXMgaXMgbW9zdCBsaWtlbHkgYW4gaHR0cHMg
YW55d2F5LgorICAgICAgICAgICAgLy8gUmV0dXJuIG5vdGhpbmcgaWYgYSBmaWxlIHVwbG9hZCBm
aWVsZCBvciBhIHBhc3N3b3JkIGZpZWxkIGFyZSBwcmVzZW50LgorICAgICAgICAgICAgaWYgKGlu
cHV0LT5pc0ZpbGVVcGxvYWQoKSB8fCBpbnB1dC0+aXNQYXNzd29yZEZpZWxkKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpbnB1
dC0+aXNUZXh0RmllbGQoKSkKLSAgICAgICAgICAgICAgICBpc1RleHRFbGVtZW50ID0gdHJ1ZTsK
LSAgICAgIH0KLQotICAgICAgRm9ybURhdGFMaXN0IGRhdGFMaXN0KGVuY29kaW5nKTsKLSAgICAg
IGlmICghZm9ybUVsZW1lbnQtPmFwcGVuZEZvcm1EYXRhKGRhdGFMaXN0LCBmYWxzZSkpCi0gICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+
JiBpdGVtcyA9IGRhdGFMaXN0Lml0ZW1zKCk7Ci0gICAgICBpZiAoaXNUZXh0RWxlbWVudCAmJiAh
aXRlbXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgaWYgKHRleHRFbGVtZW50KSB7Ci0gICAgICAg
ICAgICAgIC8vIFRoZSBhdXRvLWNvbXBsZXRlIGJhciBvbmx5IGtub3dzIGhvdyB0byBmaWxsIGlu
IG9uZSB2YWx1ZS4KLSAgICAgICAgICAgICAgLy8gVGhpcyBmb3JtIGhhcyBtdWx0aXBsZSBmaWVs
ZHM7IGRvbid0IHRyZWF0IGl0IGFzIHNlYXJjaGFibGUuCi0gICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgdGV4dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4oZm9ybUVsZW1lbnQpOwotICAgICAgfQotICAgICAgZm9yIChWZWN0
b3I8Rm9ybURhdGFMaXN0OjpJdGVtPjo6Y29uc3RfaXRlcmF0b3IgaihpdGVtcy5iZWdpbigpKTsg
aiAhPSBpdGVtcy5lbmQoKTsgKytqKSB7Ci0gICAgICAgICAgLy8gSGFuZGxlIElTSU5ERVggLyA8
aW5wdXQgbmFtZT1pc2luZGV4PiBzcGVjaWFsbHksIGJ1dCBvbmx5IGlmIGl0J3MKLSAgICAgICAg
ICAvLyB0aGUgZmlyc3QgZW50cnkuCi0gICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0Vt
cHR5KCkgfHwgai0+ZGF0YSgpICE9ICJpc2luZGV4IikgewotICAgICAgICAgICAgICBpZiAoIWVu
Y29kZWRTdHJpbmctPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgIGVuY29kZWRTdHJpbmct
PmFwcGVuZCgnJicpOwotICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmlu
Z0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7Ci0gICAgICAgICAgICAgIGVu
Y29kZWRTdHJpbmctPmFwcGVuZCgnPScpOwotICAgICAgICAgIH0KLSAgICAgICAgICArK2o7Ci0g
ICAgICAgICAgaWYgKGZvcm1FbGVtZW50ID09IHRleHRFbGVtZW50KQotICAgICAgICAgICAgICBl
bmNvZGVkU3RyaW5nLT5hcHBlbmQoIntzZWFyY2hUZXJtc30iLCAxMyk7Ci0gICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEo
KmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7Ci0gICAgICB9CisgICAgICAgICAgICBpZiAoaW5w
dXQtPmlzVGV4dEZpZWxkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGV4dEVsZW1lbnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGF1dG8tY29tcGxldGUgYmFyIG9ubHkga25vd3Mg
aG93IHRvIGZpbGwgaW4gb25lIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZv
cm0gaGFzIG11bHRpcGxlIGZpZWxkczsgZG9uJ3QgdHJlYXQgaXQgYXMgc2VhcmNoYWJsZS4KKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGZvcm1F
bGVtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLQogICAgIHJldHVybiB0
ZXh0RWxlbWVudDsKIH0KIAordm9pZCBCdWlsZFNlYXJjaFN0cmluZyhjb25zdCBIVE1MRm9ybUVs
ZW1lbnQqIGZvcm0sIFZlY3RvcjxjaGFyPiogZW5jb2RlZFN0cmluZywgVGV4dEVuY29kaW5nKiBl
bmNvZGluZywgY29uc3QgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogdGV4dEVsZW1lbnQpCit7
CisgICAgLy8gRklYTUU6IENvbnNpZGVyIHJlZmFjdG9yaW5nIHRoaXMgY29kZSBzbyB0aGF0IHdl
IGRvbid0IGNhbGwgZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkgdHdpY2UuCisgICAgZm9yIChW
ZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBpKGZvcm0tPmFz
c29jaWF0ZWRFbGVtZW50cygpLmJlZ2luKCkpOyBpICE9IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50
cygpLmVuZCgpOyArK2kpIHsKKyAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9ybUVs
ZW1lbnQgPSAqaTsKKyAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5kaXNhYmxlZCgpIHx8IGZvcm1F
bGVtZW50LT5uYW1lKCkuaXNOdWxsKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBGb3JtRGF0YUxpc3QgZGF0YUxpc3QoKmVuY29kaW5nKTsKKyAgICAgICAgaWYgKCFmb3JtRWxl
bWVudC0+YXBwZW5kRm9ybURhdGEoZGF0YUxpc3QsIGZhbHNlKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+JiBpdGVtcyA9
IGRhdGFMaXN0Lml0ZW1zKCk7CisKKyAgICAgICAgZm9yIChWZWN0b3I8Rm9ybURhdGFMaXN0OjpJ
dGVtPjo6Y29uc3RfaXRlcmF0b3IgaihpdGVtcy5iZWdpbigpKTsgaiAhPSBpdGVtcy5lbmQoKTsg
KytqKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgSVNJTkRFWCAvIDxpbnB1dCBuYW1lPWlzaW5k
ZXg+IHNwZWNpYWxseSwgYnV0IG9ubHkgaWYgaXQncworICAgICAgICAgICAgLy8gdGhlIGZpcnN0
IGVudHJ5LgorICAgICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkgfHwgai0+
ZGF0YSgpICE9ICJpc2luZGV4IikgeworICAgICAgICAgICAgICAgIGlmICghZW5jb2RlZFN0cmlu
Zy0+aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQo
JyYnKTsKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9y
bURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7CisgICAgICAgICAgICAgICAgZW5jb2Rl
ZFN0cmluZy0+YXBwZW5kKCc9Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICArK2o7Cisg
ICAgICAgICAgICBpZiAoZm9ybUVsZW1lbnQgPT0gdGV4dEVsZW1lbnQpCisgICAgICAgICAgICAg
ICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCJ7c2VhcmNoVGVybXN9IiwgMTMpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNG
b3JtRGF0YSgqZW5jb2RlZFN0cmluZywgai0+ZGF0YSgpKTsKKyAgICAgICAgfQorICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYlNlYXJjaGFibGVG
b3JtRGF0YTo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50JiBmb3Jt
KQorV2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxlRm9ybURhdGEoY29uc3QgV2Vi
Rm9ybUVsZW1lbnQmIGZvcm0sIGNvbnN0IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIHNlbGVj
dGVkSW5wdXRFbGVtZW50KQogewogICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm1FbGVt
ZW50ID0gZm9ybS5vcGVyYXRvciBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4oKTsKICAgICBj
b25zdCBGcmFtZSogZnJhbWUgPSBmb3JtRWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAg
ICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBPbmx5IGNvbnNpZGVyIGZv
cm1zIHRoYXQgR0VUIGRhdGEgYW5kIHRoZSBhY3Rpb24gdGFyZ2V0cyBhbiBodHRwIHBhZ2UuCi0g
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZvcm1FbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5h
bWVzOjptZXRob2RBdHRyKSwgInBvc3QiKSB8fCAhSXNIVFRQRm9ybVN1Ym1pdChmb3JtRWxlbWVu
dC5nZXQoKSkpCisgICAgLy8gT25seSBjb25zaWRlciBmb3JtcyB0aGF0IEdFVCBkYXRhLgorICAg
IC8vIEFsbG93IEhUVFBTIG9ubHkgd2hlbiBhbiBpbnB1dCBlbGVtZW50IGlzIHByb3ZpZGVkLiAK
KyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybUVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1M
TmFtZXM6Om1ldGhvZEF0dHIpLCAicG9zdCIpIAorICAgICAgICB8fCAhSXNIVFRQRm9ybVN1Ym1p
dChmb3JtRWxlbWVudC5nZXQoKSkgCisgICAgICAgICYmICFzZWxlY3RlZElucHV0RWxlbWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPGNoYXI+IGVuY29kZWRTdHJpbmc7CisgICAg
VGV4dEVuY29kaW5nIGVuY29kaW5nOworCisgICAgR2V0Rm9ybUVuY29kaW5nKGZvcm1FbGVtZW50
LmdldCgpLCAmZW5jb2RpbmcpOworICAgIGlmICghZW5jb2RpbmcuaXNWYWxpZCgpKSB7CisgICAg
ICAgIC8vIE5lZWQgYSB2YWxpZCBlbmNvZGluZyB0byBlbmNvZGUgdGhlIGZvcm0gZWxlbWVudHMu
CisgICAgICAgIC8vIElmIHRoZSBlbmNvZGluZyBpc24ndCBmb3VuZCB3ZWJraXQgZW5kcyB1cCBy
ZXBsYWNpbmcgdGhlIHBhcmFtcyB3aXRoCisgICAgICAgIC8vIGVtcHR5IHN0cmluZ3MuIFNvLCB3
ZSBkb24ndCB0cnkgdG8gZG8gYW55dGhpbmcgaGVyZS4KICAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIExvb2sgZm9yIGEgc3VpdGFibGUgc2VhcmNoIHRleHQgZmllbGQgaW4gdGhlIGZv
cm0gd2hlbiBhIAorICAgIC8vIHNlbGVjdGVkSW5wdXRFbGVtZW50IGlzIG5vdCBwcm92aWRlZC4K
KyAgICBpZiAoIXNlbGVjdGVkSW5wdXRFbGVtZW50KSB7CisgICAgICAgIHNlbGVjdGVkSW5wdXRF
bGVtZW50ID0gRmluZFN1aXRhYmxlVGV4dEVsZW1lbnQoZm9ybUVsZW1lbnQuZ2V0KCkpOworCisg
ICAgICAgIC8vIFJldHVybiBpZiBubyBzdWl0YWJsZSB0ZXh0IGVsZW1lbnQgaGFzIGJlZW4gZm91
bmQuCisgICAgICAgIGlmICghc2VsZWN0ZWRJbnB1dEVsZW1lbnQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQogCiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZmlyc3RTdWJtaXRCdXR0
b24gPSBHZXRCdXR0b25Ub0FjdGl2YXRlKGZvcm1FbGVtZW50LmdldCgpKTsKICAgICBpZiAoZmly
c3RTdWJtaXRCdXR0b24pIHsKQEAgLTIzNiwyMiArMjU2LDE4IEBAIFdlYlNlYXJjaGFibGVGb3Jt
RGF0YTo6V2ViU2VhcmNoYWJsZUZvcm0KICAgICAgICAgLy8gbmFtZSBvZiB0aGUgc3VibWl0IGJ1
dHRvbi4KICAgICAgICAgZmlyc3RTdWJtaXRCdXR0b24tPnNldEFjdGl2YXRlZFN1Ym1pdCh0cnVl
KTsKICAgICB9Ci0gICAgVmVjdG9yPGNoYXI+IGVuY29kZWRTdHJpbmc7Ci0gICAgU3RyaW5nIGVu
Y29kaW5nOwotICAgIGJvb2wgaGFzRWxlbWVudCA9IEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQoZm9y
bUVsZW1lbnQuZ2V0KCksICZlbmNvZGVkU3RyaW5nLCAmZW5jb2RpbmcpOworCisgICAgQnVpbGRT
ZWFyY2hTdHJpbmcoZm9ybUVsZW1lbnQuZ2V0KCksICZlbmNvZGVkU3RyaW5nLCAmZW5jb2Rpbmcs
IHNlbGVjdGVkSW5wdXRFbGVtZW50KTsKKwogICAgIGlmIChmaXJzdFN1Ym1pdEJ1dHRvbikKICAg
ICAgICAgZmlyc3RTdWJtaXRCdXR0b24tPnNldEFjdGl2YXRlZFN1Ym1pdChmYWxzZSk7Ci0gICAg
aWYgKCFoYXNFbGVtZW50KSB7Ci0gICAgICAgIC8vIE5vdCBhIHNlYXJjaGFibGUgZm9ybS4KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIFN0cmluZyBhY3Rpb24oZm9ybUVsZW1lbnQtPmFj
dGlvbigpKTsKICAgICBLVVJMIHVybChmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKGFjdGlv
bi5pc051bGwoKSA/ICIiIDogYWN0aW9uKSk7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0
YSA9IEZvcm1EYXRhOjpjcmVhdGUoZW5jb2RlZFN0cmluZyk7CiAgICAgdXJsLnNldFF1ZXJ5KGZv
cm1EYXRhLT5mbGF0dGVuVG9TdHJpbmcoKSk7CiAgICAgbV91cmwgPSB1cmw7Ci0gICAgbV9lbmNv
ZGluZyA9IGVuY29kaW5nOworICAgIG1fZW5jb2RpbmcgPSAoU3RyaW5nKSBlbmNvZGluZy5uYW1l
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72190</attachid>
            <date>2010-10-28 07:32:49 -0700</date>
            <delta_ts>2010-11-01 06:01:14 -0700</delta_ts>
            <desc>Proposed Patch V3 - removed \r char</desc>
            <filename>kw4.txt</filename>
            <type>text/plain</type>
            <size>12855</size>
            <attacher>philippe.beauchamp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjk5NTQpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTAtMTggIFBoaWxp
cHBlIEJlYXVjaGFtcCAgPHBoaWxpcHBlLmJlYXVjaGFtcEBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBmZWF0dXJlICJB
ZGQgYXMgc2VhcmNoIGVuZ2luZS4uLiIgaW4gc2VhcmNoIHRleHQgZmllbGQgY29udGV4dCBtZW51
LgorCisgICAgICAgICogcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oOgorICAgICAgICAqIHB1
YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaDoKKyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpn
ZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6CisgICAgICAgICogc3JjL1dlYlNlYXJjaGFi
bGVGb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXNTdWl0YWJsZVRleHRFbGVtZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxl
Rm9ybURhdGEpOgorCiAyMDEwLTEwLTE3ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgJKHJldmlzaW9uIDY5
OTIxKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNjksNiArNjksMTAgQEAgc3RydWN0IFdlYkNvbnRleHRNZW51RGF0YSB7
CiAgICAgLy8gVGhlIGFic29sdXRlIFVSTCBvZiB0aGUgcGFnZSBpbiBjb250ZXh0LgogICAgIFdl
YlVSTCBwYWdlVVJMOwogCisgICAgLy8gVGhlIGFic29sdXRlIGtleXdvcmQgc2VhcmNoIFVSTCBp
bmNsdWRpbmcgdGhlICVzIHNlYXJjaCB0YWcgd2hlbiB0aGUKKyAgICAvLyAiQWRkIGFzIHNlYXJj
aCBlbmdpbmUuLi4iIG9wdGlvbiBpcyBjbGlja2VkIChsZWZ0IGVtcHR5IGlmIG5vdCB1c2VkKS4K
KyAgICBXZWJVUkwga2V5d29yZFVSTDsKKwogICAgIC8vIFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhl
IHN1YmZyYW1lIGluIGNvbnRleHQuCiAgICAgV2ViVVJMIGZyYW1lVVJMOwogCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgJKHJldmlzaW9u
IDY5OTIxKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIldlYlN0cmluZy5o
IgogI2luY2x1ZGUgIldlYlVSTC5oIgogCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7IH0KKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJGb3JtRWxlbWVu
dDsKIApAQCAtNDMsNyArNDUsNyBAQCBjbGFzcyBXZWJTZWFyY2hhYmxlRm9ybURhdGEgewogcHVi
bGljOgogICAgIC8vIElmIHRoZSBwcm92aWRlZCBmb3JtIGlzIHN1aXRhYmxlIGZvciBhdXRvbWF0
ZWQgc2VhcmNoaW5nLCBpc1ZhbGlkKCkKICAgICAvLyB3aWxsIHJldHVybiBmYWxzZS4KLSAgICBX
RUJLSVRfQVBJIFdlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYpOwor
ICAgIFdFQktJVF9BUEkgV2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50
JiwgY29uc3QgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogc2VsZWN0ZWRJbnB1dEVsZW1lbnQg
PSAwKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuIG1fdXJsLmlzVmFsaWQoKTsgfQog
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3Bw
CShyZXZpc2lvbiA2OTkyMSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGll
bnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtNTIsMTEgKzU0LDEzIEBACiAKICNpbmNs
dWRlICJXZWJDb250ZXh0TWVudURhdGEuaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5o
IgorI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgi
CiAjaW5jbHVkZSAiV2ViTWVudUl0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCiAj
aW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgogI2luY2x1ZGUgIldlYlBvaW50Lmgi
CisjaW5jbHVkZSAiV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5n
LmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKQEAg
LTI0NCw2ICsyNDgsMTYgQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGll
bgogICAgICAgICAgICAgaWYgKG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVGcmFtZSgpLT5lZGl0
b3IoKS0+c3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkpCiAgICAgICAgICAgICAg
ICAgZGF0YS5taXNzcGVsbGVkV29yZCA9IHNlbGVjdE1pc3NwZWxsZWRXb3JkKGRlZmF1bHRNZW51
LCBzZWxlY3RlZEZyYW1lKTsKICAgICAgICAgfQorCisgICAgICAgIFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudCogZm9ybSA9IHNlbGVjdGVkRnJhbWUtPnNlbGVjdGlvbigpLT5jdXJyZW50Rm9ybSgp
OworICAgICAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBzZWxlY3RlZEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kj4oci5pbm5lck5vblNoYXJlZE5v
ZGUoKSk7CisgICAgICAgIGlmIChmb3JtICYmIHNlbGVjdGVkRWxlbWVudCkgeworICAgICAgICAg
ICAgaWYgKHNlbGVjdGVkRWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSAm
JiBmb3JtLT5jaGVja1ZhbGlkaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBXZWJTZWFyY2hhYmxl
Rm9ybURhdGEgd3MgPSBXZWJTZWFyY2hhYmxlRm9ybURhdGEoV2ViRm9ybUVsZW1lbnQoZm9ybSks
IHNlbGVjdGVkRWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKHdzLnVybCgpLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5rZXl3b3JkVVJMID0gd3MudXJsKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICNpZiBPUyhEQVJXSU4pCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCShyZXZpc2lvbiA2
OTkyMSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM4LDIyICsxMzgsMTQgQEAgYm9vbCBJc0luRGVmYXVsdFN0YXRl
KGNvbnN0IEhUTUxGb3JtQ29udAogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBJZiBmb3JtIGhh
cyBvbmx5IG9uZSB0ZXh0IGlucHV0IGVsZW1lbnQsIHJldHVybiB0cnVlLiBJZiBhIHZhbGlkIGlu
cHV0Ci0vLyBlbGVtZW50IGlzIG5vdCBmb3VuZCwgcmV0dXJuIGZhbHNlLiBBZGRpdGlvbmFsbHks
IHRoZSBmb3JtIGRhdGEgZm9yIGFsbAotLy8gZWxlbWVudHMgaXMgYWRkZWQgdG8gZW5jX3N0cmlu
ZyBhbmQgdGhlIGVuY29kaW5nIHVzZWQgaXMgc2V0IGluCi0vLyBlbmNvZGluZ19uYW1lLgotYm9v
bCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwgVmVj
dG9yPGNoYXI+KiBlbmNvZGVkU3RyaW5nLCBTdHJpbmcqIGVuY29kaW5nTmFtZSkKKy8vIExvb2sg
Zm9yIGEgc3VpdGFibGUgc2VhcmNoIHRleHQgZmllbGQgaW4gYSBnaXZlbiBIVE1MRm9ybUVsZW1l
bnQgCisvLyBSZXR1cm4gbm90aGluZyBpZiBvbmUgb2YgdGhvc2UgaXRlbXMgYXJlIGZvdW5kOgor
Ly8gIC0gQSB0ZXh0IGFyZWEgZmllbGQKKy8vICAtIEEgZmlsZSB1cGxvYWQgZmllbGQgCisvLyAg
LSBBIFBhc3N3b3JkIGZpZWxkCisvLyAgLSBNb3JlIHRoYW4gb25lIHRleHQgZmllbGQKK1dlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQqIEZpbmRTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxG
b3JtRWxlbWVudCogZm9ybSkKIHsKLSAgICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmc7Ci0gICAgR2V0
Rm9ybUVuY29kaW5nKGZvcm0sICZlbmNvZGluZyk7Ci0gICAgaWYgKCFlbmNvZGluZy5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgLy8gTmVlZCBhIHZhbGlkIGVuY29kaW5nIHRvIGVuY29kZSB0aGUgZm9y
bSBlbGVtZW50cy4KLSAgICAgICAgLy8gSWYgdGhlIGVuY29kaW5nIGlzbid0IGZvdW5kIHdlYmtp
dCBlbmRzIHVwIHJlcGxhY2luZyB0aGUgcGFyYW1zIHdpdGgKLSAgICAgICAgLy8gZW1wdHkgc3Ry
aW5ncy4gU28sIHdlIGRvbid0IHRyeSB0byBkbyBhbnl0aGluZyBoZXJlLgotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgKmVuY29kaW5nTmFtZSA9IGVuY29kaW5nLm5hbWUoKTsKLQogICAg
IEhUTUxJbnB1dEVsZW1lbnQqIHRleHRFbGVtZW50ID0gMDsKICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgcmVmYWN0b3JpbmcgdGhpcyBjb2RlIHNvIHRoYXQgd2UgZG9uJ3QgY2FsbCBmb3JtLT5hc3Nv
Y2lhdGVkRWxlbWVudHMoKSB0d2ljZS4KICAgICBmb3IgKFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGkoZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuYmVn
aW4oKSk7IGkgIT0gZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuZW5kKCk7ICsraSkgewpAQCAt
MTYxLDczICsxNTMsMTAxIEBAIGJvb2wgSGFzU3VpdGFibGVUZXh0RWxlbWVudChjb25zdCBIVE1M
Rm8KICAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5kaXNhYmxlZCgpIHx8IGZvcm1FbGVtZW50LT5u
YW1lKCkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAvLyBSZXR1
cm4gbm90aGluZyBpZiBhbiBlbGVtZW50IGlzIG5vdCBpbiB0aGUgZGVmYXVsdCBzdGF0ZQorICAg
ICAgICAvLyBSZXR1cm4gbm90aGluZyBpZiBhIHRleHQgYXJlYSBpcyBwcmVzZW50LgogICAgICAg
ICBpZiAoIUlzSW5EZWZhdWx0U3RhdGUoZm9ybUVsZW1lbnQpIHx8IGZvcm1FbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWFUYWcpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAgICAgYm9vbCBpc1RleHRFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIGlmIChmb3JtRWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICAgICAgcmV0
dXJuIDA7CisKKyAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aW5wdXRUYWcpICYmIGZvcm1FbGVtZW50LT53aWxsVmFsaWRhdGUoKSkgewogICAgICAgICAgICAg
Y29uc3QgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MSW5w
dXRFbGVtZW50Kj4oZm9ybUVsZW1lbnQpOwotICAgICAgICAgICAgaWYgKGlucHV0LT5pc0ZpbGVV
cGxvYWQoKSkgewotICAgICAgICAgICAgICAgIC8vIFRvbyBiaWcsIGRvbid0IHRyeSB0byBpbmRl
eCB0aGlzLgotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoaW5wdXQtPmlzUGFzc3dvcmRGaWVsZCgpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRG9uJ3Qgc3RvcmUgcGFzc3dvcmRzISBUaGlzIGlzIG1vc3QgbGlrZWx5IGFuIGh0dHBzIGFu
eXdheS4KKyAgICAgICAgICAgIC8vIFJldHVybiBub3RoaW5nIGlmIGEgZmlsZSB1cGxvYWQgZmll
bGQgb3IgYSBwYXNzd29yZCBmaWVsZCBhcmUgcHJlc2VudC4KKyAgICAgICAgICAgIGlmIChpbnB1
dC0+aXNGaWxlVXBsb2FkKCkgfHwgaW5wdXQtPmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoaW5wdXQt
PmlzVGV4dEZpZWxkKCkpCi0gICAgICAgICAgICAgICAgaXNUZXh0RWxlbWVudCA9IHRydWU7Ci0g
ICAgICB9Ci0KLSAgICAgIEZvcm1EYXRhTGlzdCBkYXRhTGlzdChlbmNvZGluZyk7Ci0gICAgICBp
ZiAoIWZvcm1FbGVtZW50LT5hcHBlbmRGb3JtRGF0YShkYXRhTGlzdCwgZmFsc2UpKQotICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYg
aXRlbXMgPSBkYXRhTGlzdC5pdGVtcygpOwotICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYgIWl0
ZW1zLmlzRW1wdHkoKSkgewotICAgICAgICAgIGlmICh0ZXh0RWxlbWVudCkgewotICAgICAgICAg
ICAgICAvLyBUaGUgYXV0by1jb21wbGV0ZSBiYXIgb25seSBrbm93cyBob3cgdG8gZmlsbCBpbiBv
bmUgdmFsdWUuCi0gICAgICAgICAgICAgIC8vIFRoaXMgZm9ybSBoYXMgbXVsdGlwbGUgZmllbGRz
OyBkb24ndCB0cmVhdCBpdCBhcyBzZWFyY2hhYmxlLgotICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KGZvcm1FbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIGZvciAoVmVjdG9y
PEZvcm1EYXRhTGlzdDo6SXRlbT46OmNvbnN0X2l0ZXJhdG9yIGooaXRlbXMuYmVnaW4oKSk7IGog
IT0gaXRlbXMuZW5kKCk7ICsraikgewotICAgICAgICAgIC8vIEhhbmRsZSBJU0lOREVYIC8gPGlu
cHV0IG5hbWU9aXNpbmRleD4gc3BlY2lhbGx5LCBidXQgb25seSBpZiBpdCdzCi0gICAgICAgICAg
Ly8gdGhlIGZpcnN0IGVudHJ5LgotICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0
eSgpIHx8IGotPmRhdGEoKSAhPSAiaXNpbmRleCIpIHsKLSAgICAgICAgICAgICAgaWYgKCFlbmNv
ZGVkU3RyaW5nLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5h
cHBlbmQoJyYnKTsKLSAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdB
c0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOwotICAgICAgICAgICAgICBlbmNv
ZGVkU3RyaW5nLT5hcHBlbmQoJz0nKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgKytqOwotICAg
ICAgICAgIGlmIChmb3JtRWxlbWVudCA9PSB0ZXh0RWxlbWVudCkKLSAgICAgICAgICAgICAgZW5j
b2RlZFN0cmluZy0+YXBwZW5kKCJ7c2VhcmNoVGVybXN9IiwgMTMpOwotICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCpl
bmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOwotICAgICAgfQorICAgICAgICAgICAgaWYgKGlucHV0
LT5pc1RleHRGaWVsZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRleHRFbGVtZW50KSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBhdXRvLWNvbXBsZXRlIGJhciBvbmx5IGtub3dzIGhv
dyB0byBmaWxsIGluIG9uZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmb3Jt
IGhhcyBtdWx0aXBsZSBmaWVsZHM7IGRvbid0IHRyZWF0IGl0IGFzIHNlYXJjaGFibGUuCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB0ZXh0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxl
bWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0KICAgICByZXR1cm4gdGV4
dEVsZW1lbnQ7CiB9CiAKK3ZvaWQgQnVpbGRTZWFyY2hTdHJpbmcoY29uc3QgSFRNTEZvcm1FbGVt
ZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRTdHJpbmcsIFRleHRFbmNvZGluZyogZW5j
b2RpbmcsIGNvbnN0IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIHRleHRFbGVtZW50KQorewor
ICAgIC8vIEZJWE1FOiBDb25zaWRlciByZWZhY3RvcmluZyB0aGlzIGNvZGUgc28gdGhhdCB3ZSBk
b24ndCBjYWxsIGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpIHR3aWNlLgorICAgIGZvciAoVmVj
dG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgaShmb3JtLT5hc3Nv
Y2lhdGVkRWxlbWVudHMoKS5iZWdpbigpKTsgaSAhPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMo
KS5lbmQoKTsgKytpKSB7CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1FbGVt
ZW50ID0gKmk7CisgICAgICAgIGlmIChmb3JtRWxlbWVudC0+ZGlzYWJsZWQoKSB8fCBmb3JtRWxl
bWVudC0+bmFtZSgpLmlzTnVsbCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Rm9ybURhdGFMaXN0IGRhdGFMaXN0KCplbmNvZGluZyk7CisgICAgICAgIGlmICghZm9ybUVsZW1l
bnQtPmFwcGVuZEZvcm1EYXRhKGRhdGFMaXN0LCBmYWxzZSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYgaXRlbXMgPSBk
YXRhTGlzdC5pdGVtcygpOworCisgICAgICAgIGZvciAoVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRl
bT46OmNvbnN0X2l0ZXJhdG9yIGooaXRlbXMuYmVnaW4oKSk7IGogIT0gaXRlbXMuZW5kKCk7ICsr
aikgeworICAgICAgICAgICAgLy8gSGFuZGxlIElTSU5ERVggLyA8aW5wdXQgbmFtZT1pc2luZGV4
PiBzcGVjaWFsbHksIGJ1dCBvbmx5IGlmIGl0J3MKKyAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBl
bnRyeS4KKyAgICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgpIHx8IGotPmRh
dGEoKSAhPSAiaXNpbmRleCIpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmct
PmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCcm
Jyk7CisgICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1E
YXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOworICAgICAgICAgICAgICAgIGVuY29kZWRT
dHJpbmctPmFwcGVuZCgnPScpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytqOworICAg
ICAgICAgICAgaWYgKGZvcm1FbGVtZW50ID09IHRleHRFbGVtZW50KQorICAgICAgICAgICAgICAg
IGVuY29kZWRTdHJpbmctPmFwcGVuZCgie3NlYXJjaFRlcm1zfSIsIDEzKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9y
bURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
IH0gLy8gbmFtZXNwYWNlCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJTZWFyY2hhYmxlRm9y
bURhdGE6OldlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYgZm9ybSkK
K1dlYlNlYXJjaGFibGVGb3JtRGF0YTo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZv
cm1FbGVtZW50JiBmb3JtLCBjb25zdCBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBzZWxlY3Rl
ZElucHV0RWxlbWVudCkKIHsKICAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBmb3JtRWxlbWVu
dCA9IGZvcm0ub3BlcmF0b3IgUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+KCk7CiAgICAgY29u
c3QgRnJhbWUqIGZyYW1lID0gZm9ybUVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAg
aWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gT25seSBjb25zaWRlciBmb3Jt
cyB0aGF0IEdFVCBkYXRhIGFuZCB0aGUgYWN0aW9uIHRhcmdldHMgYW4gaHR0cCBwYWdlLgotICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShmb3JtRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1l
czo6bWV0aG9kQXR0ciksICJwb3N0IikgfHwgIUlzSFRUUEZvcm1TdWJtaXQoZm9ybUVsZW1lbnQu
Z2V0KCkpKQorICAgIC8vIE9ubHkgY29uc2lkZXIgZm9ybXMgdGhhdCBHRVQgZGF0YS4KKyAgICAv
LyBBbGxvdyBIVFRQUyBvbmx5IHdoZW4gYW4gaW5wdXQgZWxlbWVudCBpcyBwcm92aWRlZC4gCisg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZvcm1FbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5h
bWVzOjptZXRob2RBdHRyKSwgInBvc3QiKSAKKyAgICAgICAgfHwgIUlzSFRUUEZvcm1TdWJtaXQo
Zm9ybUVsZW1lbnQuZ2V0KCkpIAorICAgICAgICAmJiAhc2VsZWN0ZWRJbnB1dEVsZW1lbnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkU3RyaW5nOworICAgIFRl
eHRFbmNvZGluZyBlbmNvZGluZzsKKworICAgIEdldEZvcm1FbmNvZGluZyhmb3JtRWxlbWVudC5n
ZXQoKSwgJmVuY29kaW5nKTsKKyAgICBpZiAoIWVuY29kaW5nLmlzVmFsaWQoKSkgeworICAgICAg
ICAvLyBOZWVkIGEgdmFsaWQgZW5jb2RpbmcgdG8gZW5jb2RlIHRoZSBmb3JtIGVsZW1lbnRzLgor
ICAgICAgICAvLyBJZiB0aGUgZW5jb2RpbmcgaXNuJ3QgZm91bmQgd2Via2l0IGVuZHMgdXAgcmVw
bGFjaW5nIHRoZSBwYXJhbXMgd2l0aAorICAgICAgICAvLyBlbXB0eSBzdHJpbmdzLiBTbywgd2Ug
ZG9uJ3QgdHJ5IHRvIGRvIGFueXRoaW5nIGhlcmUuCiAgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBMb29rIGZvciBhIHN1aXRhYmxlIHNlYXJjaCB0ZXh0IGZpZWxkIGluIHRoZSBmb3Jt
IHdoZW4gYSAKKyAgICAvLyBzZWxlY3RlZElucHV0RWxlbWVudCBpcyBub3QgcHJvdmlkZWQuCisg
ICAgaWYgKCFzZWxlY3RlZElucHV0RWxlbWVudCkgeworICAgICAgICBzZWxlY3RlZElucHV0RWxl
bWVudCA9IEZpbmRTdWl0YWJsZVRleHRFbGVtZW50KGZvcm1FbGVtZW50LmdldCgpKTsKKworICAg
ICAgICAvLyBSZXR1cm4gaWYgbm8gc3VpdGFibGUgdGV4dCBlbGVtZW50IGhhcyBiZWVuIGZvdW5k
LgorICAgICAgICBpZiAoIXNlbGVjdGVkSW5wdXRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KIAogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZpcnN0U3VibWl0QnV0dG9u
ID0gR2V0QnV0dG9uVG9BY3RpdmF0ZShmb3JtRWxlbWVudC5nZXQoKSk7CiAgICAgaWYgKGZpcnN0
U3VibWl0QnV0dG9uKSB7CkBAIC0yMzYsMjIgKzI1NiwxOCBAQCBXZWJTZWFyY2hhYmxlRm9ybURh
dGE6OldlYlNlYXJjaGFibGVGb3JtCiAgICAgICAgIC8vIG5hbWUgb2YgdGhlIHN1Ym1pdCBidXR0
b24uCiAgICAgICAgIGZpcnN0U3VibWl0QnV0dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQodHJ1ZSk7
CiAgICAgfQotICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkU3RyaW5nOwotICAgIFN0cmluZyBlbmNv
ZGluZzsKLSAgICBib29sIGhhc0VsZW1lbnQgPSBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGZvcm1F
bGVtZW50LmdldCgpLCAmZW5jb2RlZFN0cmluZywgJmVuY29kaW5nKTsKKworICAgIEJ1aWxkU2Vh
cmNoU3RyaW5nKGZvcm1FbGVtZW50LmdldCgpLCAmZW5jb2RlZFN0cmluZywgJmVuY29kaW5nLCBz
ZWxlY3RlZElucHV0RWxlbWVudCk7CisKICAgICBpZiAoZmlyc3RTdWJtaXRCdXR0b24pCiAgICAg
ICAgIGZpcnN0U3VibWl0QnV0dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQoZmFsc2UpOwotICAgIGlm
ICghaGFzRWxlbWVudCkgewotICAgICAgICAvLyBOb3QgYSBzZWFyY2hhYmxlIGZvcm0uCi0gICAg
ICAgIHJldHVybjsKLSAgICB9CiAKICAgICBTdHJpbmcgYWN0aW9uKGZvcm1FbGVtZW50LT5hY3Rp
b24oKSk7CiAgICAgS1VSTCB1cmwoZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChhY3Rpb24u
aXNOdWxsKCkgPyAiIiA6IGFjdGlvbikpOwogICAgIFJlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEg
PSBGb3JtRGF0YTo6Y3JlYXRlKGVuY29kZWRTdHJpbmcpOwogICAgIHVybC5zZXRRdWVyeShmb3Jt
RGF0YS0+ZmxhdHRlblRvU3RyaW5nKCkpOwogICAgIG1fdXJsID0gdXJsOwotICAgIG1fZW5jb2Rp
bmcgPSBlbmNvZGluZzsKKyAgICBtX2VuY29kaW5nID0gKFN0cmluZykgZW5jb2RpbmcubmFtZSgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="62395"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72498</attachid>
            <date>2010-11-01 06:01:14 -0700</date>
            <delta_ts>2010-11-01 06:13:00 -0700</delta_ts>
            <desc>Proposed Patch V5</desc>
            <filename>kw5.txt</filename>
            <type>text/plain</type>
            <size>13057</size>
            <attacher>philippe.beauchamp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjk5NTQpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTAtMjggIFBoaWxp
cHBlIEJlYXVjaGFtcCAgPHBoaWxpcHBlLmJlYXVjaGFtcEBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBmZWF0dXJlICJB
ZGQgYXMgc2VhcmNoIGVuZ2luZS4uLiIgaW4gc2VhcmNoIHRleHQgZmllbGQgY29udGV4dCBtZW51
LgorCisgICAgICAgICogcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oOgorICAgICAgICAqIHB1
YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaDoKKyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpn
ZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6CisgICAgICAgICogc3JjL1dlYlNlYXJjaGFi
bGVGb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXNTdWl0YWJsZVRleHRFbGVtZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxl
Rm9ybURhdGEpOgorCiAyMDEwLTEwLTE3ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgJKHJldmlzaW9uIDY5
OTIxKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNjksNiArNjksMTAgQEAgc3RydWN0IFdlYkNvbnRleHRNZW51RGF0YSB7
CiAgICAgLy8gVGhlIGFic29sdXRlIFVSTCBvZiB0aGUgcGFnZSBpbiBjb250ZXh0LgogICAgIFdl
YlVSTCBwYWdlVVJMOwogCisgICAgLy8gVGhlIGFic29sdXRlIGtleXdvcmQgc2VhcmNoIFVSTCBp
bmNsdWRpbmcgdGhlICVzIHNlYXJjaCB0YWcgd2hlbiB0aGUKKyAgICAvLyAiQWRkIGFzIHNlYXJj
aCBlbmdpbmUuLi4iIG9wdGlvbiBpcyBjbGlja2VkIChsZWZ0IGVtcHR5IGlmIG5vdCB1c2VkKS4K
KyAgICBXZWJVUkwga2V5d29yZFVSTDsKKwogICAgIC8vIFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhl
IHN1YmZyYW1lIGluIGNvbnRleHQuCiAgICAgV2ViVVJMIGZyYW1lVVJMOwogCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgJKHJldmlzaW9u
IDY5OTIxKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIldlYlN0cmluZy5o
IgogI2luY2x1ZGUgIldlYlVSTC5oIgogCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7IH0KKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJGb3JtRWxlbWVu
dDsKIApAQCAtNDMsNyArNDUsNyBAQCBjbGFzcyBXZWJTZWFyY2hhYmxlRm9ybURhdGEgewogcHVi
bGljOgogICAgIC8vIElmIHRoZSBwcm92aWRlZCBmb3JtIGlzIHN1aXRhYmxlIGZvciBhdXRvbWF0
ZWQgc2VhcmNoaW5nLCBpc1ZhbGlkKCkKICAgICAvLyB3aWxsIHJldHVybiBmYWxzZS4KLSAgICBX
RUJLSVRfQVBJIFdlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYpOwor
ICAgIFdFQktJVF9BUEkgV2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50
JiwgY29uc3QgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogc2VsZWN0ZWRJbnB1dEVsZW1lbnQg
PSAwKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuIG1fdXJsLmlzVmFsaWQoKTsgfQog
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3Bw
CShyZXZpc2lvbiA2OTkyMSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGll
bnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtNTIsMTEgKzU0LDEzIEBACiAKICNpbmNs
dWRlICJXZWJDb250ZXh0TWVudURhdGEuaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5o
IgorI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgi
CiAjaW5jbHVkZSAiV2ViTWVudUl0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCiAj
aW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgogI2luY2x1ZGUgIldlYlBvaW50Lmgi
CisjaW5jbHVkZSAiV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5n
LmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKQEAg
LTI0NCw2ICsyNDgsMTYgQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGll
bgogICAgICAgICAgICAgaWYgKG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVGcmFtZSgpLT5lZGl0
b3IoKS0+c3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkpCiAgICAgICAgICAgICAg
ICAgZGF0YS5taXNzcGVsbGVkV29yZCA9IHNlbGVjdE1pc3NwZWxsZWRXb3JkKGRlZmF1bHRNZW51
LCBzZWxlY3RlZEZyYW1lKTsKICAgICAgICAgfQorCisgICAgICAgIFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudCogZm9ybSA9IHNlbGVjdGVkRnJhbWUtPnNlbGVjdGlvbigpLT5jdXJyZW50Rm9ybSgp
OworICAgICAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBzZWxlY3RlZEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kj4oci5pbm5lck5vblNoYXJlZE5v
ZGUoKSk7CisgICAgICAgIGlmIChmb3JtICYmIHNlbGVjdGVkRWxlbWVudCkgeworICAgICAgICAg
ICAgaWYgKHNlbGVjdGVkRWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSAm
JiBmb3JtLT5jaGVja1ZhbGlkaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBXZWJTZWFyY2hhYmxl
Rm9ybURhdGEgd3MgPSBXZWJTZWFyY2hhYmxlRm9ybURhdGEoV2ViRm9ybUVsZW1lbnQoZm9ybSks
IHNlbGVjdGVkRWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKHdzLnVybCgpLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5rZXl3b3JkVVJMID0gd3MudXJsKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICNpZiBPUyhEQVJXSU4pCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCShyZXZpc2lvbiA2
OTkyMSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM4LDIyICsxMzgsMTQgQEAgYm9vbCBJc0luRGVmYXVsdFN0YXRl
KGNvbnN0IEhUTUxGb3JtQ29udAogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBJZiBmb3JtIGhh
cyBvbmx5IG9uZSB0ZXh0IGlucHV0IGVsZW1lbnQsIHJldHVybiB0cnVlLiBJZiBhIHZhbGlkIGlu
cHV0Ci0vLyBlbGVtZW50IGlzIG5vdCBmb3VuZCwgcmV0dXJuIGZhbHNlLiBBZGRpdGlvbmFsbHks
IHRoZSBmb3JtIGRhdGEgZm9yIGFsbAotLy8gZWxlbWVudHMgaXMgYWRkZWQgdG8gZW5jX3N0cmlu
ZyBhbmQgdGhlIGVuY29kaW5nIHVzZWQgaXMgc2V0IGluCi0vLyBlbmNvZGluZ19uYW1lLgotYm9v
bCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwgVmVj
dG9yPGNoYXI+KiBlbmNvZGVkU3RyaW5nLCBTdHJpbmcqIGVuY29kaW5nTmFtZSkKKy8vIExvb2sg
Zm9yIGEgc3VpdGFibGUgc2VhcmNoIHRleHQgZmllbGQgaW4gYSBnaXZlbiBIVE1MRm9ybUVsZW1l
bnQgCisvLyBSZXR1cm4gbm90aGluZyBpZiBvbmUgb2YgdGhvc2UgaXRlbXMgYXJlIGZvdW5kOgor
Ly8gIC0gQSB0ZXh0IGFyZWEgZmllbGQKKy8vICAtIEEgZmlsZSB1cGxvYWQgZmllbGQgCisvLyAg
LSBBIFBhc3N3b3JkIGZpZWxkCisvLyAgLSBNb3JlIHRoYW4gb25lIHRleHQgZmllbGQKK1dlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQqIEZpbmRTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxG
b3JtRWxlbWVudCogZm9ybSkKIHsKLSAgICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmc7Ci0gICAgR2V0
Rm9ybUVuY29kaW5nKGZvcm0sICZlbmNvZGluZyk7Ci0gICAgaWYgKCFlbmNvZGluZy5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgLy8gTmVlZCBhIHZhbGlkIGVuY29kaW5nIHRvIGVuY29kZSB0aGUgZm9y
bSBlbGVtZW50cy4KLSAgICAgICAgLy8gSWYgdGhlIGVuY29kaW5nIGlzbid0IGZvdW5kIHdlYmtp
dCBlbmRzIHVwIHJlcGxhY2luZyB0aGUgcGFyYW1zIHdpdGgKLSAgICAgICAgLy8gZW1wdHkgc3Ry
aW5ncy4gU28sIHdlIGRvbid0IHRyeSB0byBkbyBhbnl0aGluZyBoZXJlLgotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgKmVuY29kaW5nTmFtZSA9IGVuY29kaW5nLm5hbWUoKTsKLQogICAg
IEhUTUxJbnB1dEVsZW1lbnQqIHRleHRFbGVtZW50ID0gMDsKICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgcmVmYWN0b3JpbmcgdGhpcyBjb2RlIHNvIHRoYXQgd2UgZG9uJ3QgY2FsbCBmb3JtLT5hc3Nv
Y2lhdGVkRWxlbWVudHMoKSB0d2ljZS4KICAgICBmb3IgKFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGkoZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuYmVn
aW4oKSk7IGkgIT0gZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuZW5kKCk7ICsraSkgewpAQCAt
MTYxLDczICsxNTMsMTA1IEBAIGJvb2wgSGFzU3VpdGFibGVUZXh0RWxlbWVudChjb25zdCBIVE1M
Rm8KICAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5kaXNhYmxlZCgpIHx8IGZvcm1FbGVtZW50LT5u
YW1lKCkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAvLyBSZXR1
cm4gbm90aGluZyBpZiBhbiBlbGVtZW50IGlzIG5vdCBpbiB0aGUgZGVmYXVsdCBzdGF0ZQorICAg
ICAgICAvLyBSZXR1cm4gbm90aGluZyBpZiBhIHRleHQgYXJlYSBpcyBwcmVzZW50LgogICAgICAg
ICBpZiAoIUlzSW5EZWZhdWx0U3RhdGUoZm9ybUVsZW1lbnQpIHx8IGZvcm1FbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWFUYWcpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICAgICAgYm9vbCBpc1RleHRFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIGlmIChmb3JtRWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICAgICAgaWYg
KGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpICYmIGZvcm1FbGVt
ZW50LT53aWxsVmFsaWRhdGUoKSkgewogICAgICAgICAgICAgY29uc3QgSFRNTElucHV0RWxlbWVu
dCogaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MSW5wdXRFbGVtZW50Kj4oZm9ybUVsZW1l
bnQpOwotICAgICAgICAgICAgaWYgKGlucHV0LT5pc0ZpbGVVcGxvYWQoKSkgewotICAgICAgICAg
ICAgICAgIC8vIFRvbyBiaWcsIGRvbid0IHRyeSB0byBpbmRleCB0aGlzLgotICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoaW5wdXQtPmlz
UGFzc3dvcmRGaWVsZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc3RvcmUgcGFzc3dv
cmRzISBUaGlzIGlzIG1vc3QgbGlrZWx5IGFuIGh0dHBzIGFueXdheS4KKyAgICAgICAgICAgIC8v
IFJldHVybiBub3RoaW5nIGlmIGEgZmlsZSB1cGxvYWQgZmllbGQgb3IgYSBwYXNzd29yZCBmaWVs
ZCBhcmUgcHJlc2VudC4KKyAgICAgICAgICAgIGlmIChpbnB1dC0+aXNGaWxlVXBsb2FkKCkgfHwg
aW5wdXQtPmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpCi0gICAg
ICAgICAgICAgICAgaXNUZXh0RWxlbWVudCA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIEZvcm1E
YXRhTGlzdCBkYXRhTGlzdChlbmNvZGluZyk7Ci0gICAgICBpZiAoIWZvcm1FbGVtZW50LT5hcHBl
bmRGb3JtRGF0YShkYXRhTGlzdCwgZmFsc2UpKQotICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYgaXRlbXMgPSBkYXRhTGlzdC5pdGVt
cygpOwotICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYgIWl0ZW1zLmlzRW1wdHkoKSkgewotICAg
ICAgICAgIGlmICh0ZXh0RWxlbWVudCkgewotICAgICAgICAgICAgICAvLyBUaGUgYXV0by1jb21w
bGV0ZSBiYXIgb25seSBrbm93cyBob3cgdG8gZmlsbCBpbiBvbmUgdmFsdWUuCi0gICAgICAgICAg
ICAgIC8vIFRoaXMgZm9ybSBoYXMgbXVsdGlwbGUgZmllbGRzOyBkb24ndCB0cmVhdCBpdCBhcyBz
ZWFyY2hhYmxlLgotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAg
ICAgICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGZvcm1F
bGVtZW50KTsKLSAgICAgIH0KLSAgICAgIGZvciAoVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT46
OmNvbnN0X2l0ZXJhdG9yIGooaXRlbXMuYmVnaW4oKSk7IGogIT0gaXRlbXMuZW5kKCk7ICsraikg
ewotICAgICAgICAgIC8vIEhhbmRsZSBJU0lOREVYIC8gPGlucHV0IG5hbWU9aXNpbmRleD4gc3Bl
Y2lhbGx5LCBidXQgb25seSBpZiBpdCdzCi0gICAgICAgICAgLy8gdGhlIGZpcnN0IGVudHJ5Lgot
ICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgpIHx8IGotPmRhdGEoKSAhPSAi
aXNpbmRleCIpIHsKLSAgICAgICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJyYnKTsKLSAgICAgICAg
ICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3Ry
aW5nLCBqLT5kYXRhKCkpOwotICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJz0n
KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgKytqOwotICAgICAgICAgIGlmIChmb3JtRWxlbWVu
dCA9PSB0ZXh0RWxlbWVudCkKLSAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCJ7
c2VhcmNoVGVybXN9IiwgMTMpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgRm9ybURh
dGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRh
KCkpOwotICAgICAgfQorICAgICAgICAgICAgaWYgKGlucHV0LT5pc1RleHRGaWVsZCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHRleHRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFRoZSBhdXRvLWNvbXBsZXRlIGJhciBvbmx5IGtub3dzIGhvdyB0byBmaWxsIGluIG9uZSB2YWx1
ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmb3JtIGhhcyBtdWx0aXBsZSBmaWVsZHM7
IGRvbid0IHRyZWF0IGl0IGFzIHNlYXJjaGFibGUuCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXh0RWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KICAgICB9Ci0KICAgICByZXR1cm4gdGV4dEVsZW1lbnQ7CiB9CiAKK2Jvb2wg
QnVpbGRTZWFyY2hTdHJpbmcoY29uc3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hh
cj4qIGVuY29kZWRTdHJpbmcsIFRleHRFbmNvZGluZyogZW5jb2RpbmcsIGNvbnN0IFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQqIHRleHRFbGVtZW50KQoreworICAgIGJvb2wgaXNFbGVtZW50Rm91
bmQgPSBmYWxzZTsgICAKKworICAgIC8vIEZJWE1FOiBDb25zaWRlciByZWZhY3RvcmluZyB0aGlz
IGNvZGUgc28gdGhhdCB3ZSBkb24ndCBjYWxsIGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpIHR3
aWNlLgorICAgIGZvciAoVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPjo6Y29uc3RfaXRl
cmF0b3IgaShmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5iZWdpbigpKTsgaSAhPSBmb3JtLT5h
c3NvY2lhdGVkRWxlbWVudHMoKS5lbmQoKTsgKytpKSB7CisgICAgICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gKmk7CisgICAgICAgIGlmIChmb3JtRWxlbWVudC0+ZGlz
YWJsZWQoKSB8fCBmb3JtRWxlbWVudC0+bmFtZSgpLmlzTnVsbCgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgRm9ybURhdGFMaXN0IGRhdGFMaXN0KCplbmNvZGluZyk7CisgICAg
ICAgIGlmICghZm9ybUVsZW1lbnQtPmFwcGVuZEZvcm1EYXRhKGRhdGFMaXN0LCBmYWxzZSkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0
OjpJdGVtPiYgaXRlbXMgPSBkYXRhTGlzdC5pdGVtcygpOworCisgICAgICAgIGZvciAoVmVjdG9y
PEZvcm1EYXRhTGlzdDo6SXRlbT46OmNvbnN0X2l0ZXJhdG9yIGooaXRlbXMuYmVnaW4oKSk7IGog
IT0gaXRlbXMuZW5kKCk7ICsraikgeworICAgICAgICAgICAgLy8gSGFuZGxlIElTSU5ERVggLyA8
aW5wdXQgbmFtZT1pc2luZGV4PiBzcGVjaWFsbHksIGJ1dCBvbmx5IGlmIGl0J3MKKyAgICAgICAg
ICAgIC8vIHRoZSBmaXJzdCBlbnRyeS4KKyAgICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+
aXNFbXB0eSgpIHx8IGotPmRhdGEoKSAhPSAiaXNpbmRleCIpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgZW5jb2Rl
ZFN0cmluZy0+YXBwZW5kKCcmJyk7CisgICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjpl
bmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOworICAgICAg
ICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgnPScpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgKytqOworICAgICAgICAgICAgaWYgKGZvcm1FbGVtZW50ID09IHRleHRFbGVtZW50
KSB7CisgICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCJ7c2VhcmNoVGVybXN9
IiwgMTMpOworICAgICAgICAgICAgICAgIGlzRWxlbWVudEZvdW5kID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6
OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGlzRWxlbWVudEZvdW5kOworfQorCiB9IC8vIG5hbWVz
cGFjZQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJT
ZWFyY2hhYmxlRm9ybURhdGEoY29uc3QgV2ViRm9ybUVsZW1lbnQmIGZvcm0pCitXZWJTZWFyY2hh
YmxlRm9ybURhdGE6OldlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYg
Zm9ybSwgY29uc3QgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogc2VsZWN0ZWRJbnB1dEVsZW1l
bnQpCiB7CiAgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybUVsZW1lbnQgPSBmb3JtLm9w
ZXJhdG9yIFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PigpOwogICAgIGNvbnN0IEZyYW1lKiBm
cmFtZSA9IGZvcm1FbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIE9ubHkgY29uc2lkZXIgZm9ybXMgdGhhdCBHRVQg
ZGF0YSBhbmQgdGhlIGFjdGlvbiB0YXJnZXRzIGFuIGh0dHAgcGFnZS4KLSAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoZm9ybUVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Om1ldGhvZEF0
dHIpLCAicG9zdCIpIHx8ICFJc0hUVFBGb3JtU3VibWl0KGZvcm1FbGVtZW50LmdldCgpKSkKKyAg
ICAvLyBPbmx5IGNvbnNpZGVyIGZvcm1zIHRoYXQgR0VUIGRhdGEuCisgICAgLy8gQWxsb3cgSFRU
UFMgb25seSB3aGVuIGFuIGlucHV0IGVsZW1lbnQgaXMgcHJvdmlkZWQuIAorICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShmb3JtRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bWV0aG9k
QXR0ciksICJwb3N0IikgCisgICAgICAgIHx8ICghSXNIVFRQRm9ybVN1Ym1pdChmb3JtRWxlbWVu
dC5nZXQoKSkgJiYgIXNlbGVjdGVkSW5wdXRFbGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVmVjdG9yPGNoYXI+IGVuY29kZWRTdHJpbmc7CisgICAgVGV4dEVuY29kaW5nIGVuY29kaW5n
OworCisgICAgR2V0Rm9ybUVuY29kaW5nKGZvcm1FbGVtZW50LmdldCgpLCAmZW5jb2RpbmcpOwor
ICAgIGlmICghZW5jb2RpbmcuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIE5lZWQgYSB2YWxpZCBl
bmNvZGluZyB0byBlbmNvZGUgdGhlIGZvcm0gZWxlbWVudHMuCisgICAgICAgIC8vIElmIHRoZSBl
bmNvZGluZyBpc24ndCBmb3VuZCB3ZWJraXQgZW5kcyB1cCByZXBsYWNpbmcgdGhlIHBhcmFtcyB3
aXRoCisgICAgICAgIC8vIGVtcHR5IHN0cmluZ3MuIFNvLCB3ZSBkb24ndCB0cnkgdG8gZG8gYW55
dGhpbmcgaGVyZS4KICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIExvb2sgZm9yIGEg
c3VpdGFibGUgc2VhcmNoIHRleHQgZmllbGQgaW4gdGhlIGZvcm0gd2hlbiBhIAorICAgIC8vIHNl
bGVjdGVkSW5wdXRFbGVtZW50IGlzIG5vdCBwcm92aWRlZC4KKyAgICBpZiAoIXNlbGVjdGVkSW5w
dXRFbGVtZW50KSB7CisgICAgICAgIHNlbGVjdGVkSW5wdXRFbGVtZW50ID0gRmluZFN1aXRhYmxl
VGV4dEVsZW1lbnQoZm9ybUVsZW1lbnQuZ2V0KCkpOworCisgICAgICAgIC8vIFJldHVybiBpZiBu
byBzdWl0YWJsZSB0ZXh0IGVsZW1lbnQgaGFzIGJlZW4gZm91bmQuCisgICAgICAgIGlmICghc2Vs
ZWN0ZWRJbnB1dEVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgSFRN
TEZvcm1Db250cm9sRWxlbWVudCogZmlyc3RTdWJtaXRCdXR0b24gPSBHZXRCdXR0b25Ub0FjdGl2
YXRlKGZvcm1FbGVtZW50LmdldCgpKTsKICAgICBpZiAoZmlyc3RTdWJtaXRCdXR0b24pIHsKQEAg
LTIzNiwyMiArMjYwLDIyIEBAIFdlYlNlYXJjaGFibGVGb3JtRGF0YTo6V2ViU2VhcmNoYWJsZUZv
cm0KICAgICAgICAgLy8gbmFtZSBvZiB0aGUgc3VibWl0IGJ1dHRvbi4KICAgICAgICAgZmlyc3RT
dWJtaXRCdXR0b24tPnNldEFjdGl2YXRlZFN1Ym1pdCh0cnVlKTsKICAgICB9Ci0gICAgVmVjdG9y
PGNoYXI+IGVuY29kZWRTdHJpbmc7Ci0gICAgU3RyaW5nIGVuY29kaW5nOwotICAgIGJvb2wgaGFz
RWxlbWVudCA9IEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQoZm9ybUVsZW1lbnQuZ2V0KCksICZlbmNv
ZGVkU3RyaW5nLCAmZW5jb2RpbmcpOworCisgICAgYm9vbCB2YWxpZFNlYXJjaFN0cmluZyA9IEJ1
aWxkU2VhcmNoU3RyaW5nKGZvcm1FbGVtZW50LmdldCgpLCAmZW5jb2RlZFN0cmluZywgJmVuY29k
aW5nLCBzZWxlY3RlZElucHV0RWxlbWVudCk7CisKICAgICBpZiAoZmlyc3RTdWJtaXRCdXR0b24p
CiAgICAgICAgIGZpcnN0U3VibWl0QnV0dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQoZmFsc2UpOwot
ICAgIGlmICghaGFzRWxlbWVudCkgewotICAgICAgICAvLyBOb3QgYSBzZWFyY2hhYmxlIGZvcm0u
CisKKyAgICAvLyBSZXR1cm4gaWYgdGhlIHNlYXJjaCBzdHJpbmcgaXMgbm90IHZhbGlkLiAKKyAg
ICBpZiAoIXZhbGlkU2VhcmNoU3RyaW5nKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAg
U3RyaW5nIGFjdGlvbihmb3JtRWxlbWVudC0+YWN0aW9uKCkpOwogICAgIEtVUkwgdXJsKGZyYW1l
LT5sb2FkZXIoKS0+Y29tcGxldGVVUkwoYWN0aW9uLmlzTnVsbCgpID8gIiIgOiBhY3Rpb24pKTsK
ICAgICBSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhID0gRm9ybURhdGE6OmNyZWF0ZShlbmNvZGVk
U3RyaW5nKTsKICAgICB1cmwuc2V0UXVlcnkoZm9ybURhdGEtPmZsYXR0ZW5Ub1N0cmluZygpKTsK
ICAgICBtX3VybCA9IHVybDsKLSAgICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7CisgICAgbV9lbmNv
ZGluZyA9IChTdHJpbmcpIGVuY29kaW5nLm5hbWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72499</attachid>
            <date>2010-11-01 06:13:00 -0700</date>
            <delta_ts>2010-11-02 19:29:55 -0700</delta_ts>
            <desc>Proposed Patch V5</desc>
            <filename>kw5.txt</filename>
            <type>text/plain</type>
            <size>13044</size>
            <attacher>philippe.beauchamp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjk5NTQpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTAtMjggIFBoaWxp
cHBlIEJlYXVjaGFtcCAgPHBoaWxpcHBlLmJlYXVjaGFtcEBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBmZWF0dXJlICJB
ZGQgYXMgc2VhcmNoIGVuZ2luZS4uLiIgaW4gc2VhcmNoIHRleHQgZmllbGQgY29udGV4dCBtZW51
LgorCisgICAgICAgICogcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oOgorICAgICAgICAqIHB1
YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaDoKKyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpn
ZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6CisgICAgICAgICogc3JjL1dlYlNlYXJjaGFi
bGVGb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXNTdWl0YWJsZVRleHRFbGVtZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxl
Rm9ybURhdGEpOgorCiAyMDEwLTEwLTE3ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgJKHJldmlzaW9uIDY5
OTIxKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNjksNiArNjksMTAgQEAgc3RydWN0IFdlYkNvbnRleHRNZW51RGF0YSB7
CiAgICAgLy8gVGhlIGFic29sdXRlIFVSTCBvZiB0aGUgcGFnZSBpbiBjb250ZXh0LgogICAgIFdl
YlVSTCBwYWdlVVJMOwogCisgICAgLy8gVGhlIGFic29sdXRlIGtleXdvcmQgc2VhcmNoIFVSTCBp
bmNsdWRpbmcgdGhlICVzIHNlYXJjaCB0YWcgd2hlbiB0aGUKKyAgICAvLyAiQWRkIGFzIHNlYXJj
aCBlbmdpbmUuLi4iIG9wdGlvbiBpcyBjbGlja2VkIChsZWZ0IGVtcHR5IGlmIG5vdCB1c2VkKS4K
KyAgICBXZWJVUkwga2V5d29yZFVSTDsKKwogICAgIC8vIFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhl
IHN1YmZyYW1lIGluIGNvbnRleHQuCiAgICAgV2ViVVJMIGZyYW1lVVJMOwogCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgJKHJldmlzaW9u
IDY5OTIxKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIldlYlN0cmluZy5o
IgogI2luY2x1ZGUgIldlYlVSTC5oIgogCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7IH0KKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJGb3JtRWxlbWVu
dDsKIApAQCAtNDMsNyArNDUsNyBAQCBjbGFzcyBXZWJTZWFyY2hhYmxlRm9ybURhdGEgewogcHVi
bGljOgogICAgIC8vIElmIHRoZSBwcm92aWRlZCBmb3JtIGlzIHN1aXRhYmxlIGZvciBhdXRvbWF0
ZWQgc2VhcmNoaW5nLCBpc1ZhbGlkKCkKICAgICAvLyB3aWxsIHJldHVybiBmYWxzZS4KLSAgICBX
RUJLSVRfQVBJIFdlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYpOwor
ICAgIFdFQktJVF9BUEkgV2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50
JiwgY29uc3QgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogc2VsZWN0ZWRJbnB1dEVsZW1lbnQg
PSAwKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuIG1fdXJsLmlzVmFsaWQoKTsgfQog
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3Bw
CShyZXZpc2lvbiA2OTkyMSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGll
bnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtNTIsMTEgKzU0LDEzIEBACiAKICNpbmNs
dWRlICJXZWJDb250ZXh0TWVudURhdGEuaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5o
IgorI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgi
CiAjaW5jbHVkZSAiV2ViTWVudUl0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCiAj
aW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgogI2luY2x1ZGUgIldlYlBvaW50Lmgi
CisjaW5jbHVkZSAiV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5n
LmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKQEAg
LTI0NCw2ICsyNDgsMTYgQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGll
bgogICAgICAgICAgICAgaWYgKG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVGcmFtZSgpLT5lZGl0
b3IoKS0+c3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkpCiAgICAgICAgICAgICAg
ICAgZGF0YS5taXNzcGVsbGVkV29yZCA9IHNlbGVjdE1pc3NwZWxsZWRXb3JkKGRlZmF1bHRNZW51
LCBzZWxlY3RlZEZyYW1lKTsKICAgICAgICAgfQorCisgICAgICAgIFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudCogZm9ybSA9IHNlbGVjdGVkRnJhbWUtPnNlbGVjdGlvbigpLT5jdXJyZW50Rm9ybSgp
OworICAgICAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBzZWxlY3RlZEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kj4oci5pbm5lck5vblNoYXJlZE5v
ZGUoKSk7CisgICAgICAgIGlmIChmb3JtICYmIHNlbGVjdGVkRWxlbWVudCkgeworICAgICAgICAg
ICAgaWYgKHNlbGVjdGVkRWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSAm
JiBmb3JtLT5jaGVja1ZhbGlkaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBXZWJTZWFyY2hhYmxl
Rm9ybURhdGEgd3MgPSBXZWJTZWFyY2hhYmxlRm9ybURhdGEoV2ViRm9ybUVsZW1lbnQoZm9ybSks
IHNlbGVjdGVkRWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKHdzLnVybCgpLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5rZXl3b3JkVVJMID0gd3MudXJsKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICNpZiBPUyhEQVJXSU4pCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCShyZXZpc2lvbiA2
OTkyMSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM4LDIyICsxMzgsMTQgQEAgYm9vbCBJc0luRGVmYXVsdFN0YXRl
KGNvbnN0IEhUTUxGb3JtQ29udAogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBJZiBmb3JtIGhh
cyBvbmx5IG9uZSB0ZXh0IGlucHV0IGVsZW1lbnQsIHJldHVybiB0cnVlLiBJZiBhIHZhbGlkIGlu
cHV0Ci0vLyBlbGVtZW50IGlzIG5vdCBmb3VuZCwgcmV0dXJuIGZhbHNlLiBBZGRpdGlvbmFsbHks
IHRoZSBmb3JtIGRhdGEgZm9yIGFsbAotLy8gZWxlbWVudHMgaXMgYWRkZWQgdG8gZW5jX3N0cmlu
ZyBhbmQgdGhlIGVuY29kaW5nIHVzZWQgaXMgc2V0IGluCi0vLyBlbmNvZGluZ19uYW1lLgotYm9v
bCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwgVmVj
dG9yPGNoYXI+KiBlbmNvZGVkU3RyaW5nLCBTdHJpbmcqIGVuY29kaW5nTmFtZSkKKy8vIExvb2sg
Zm9yIGEgc3VpdGFibGUgc2VhcmNoIHRleHQgZmllbGQgaW4gYSBnaXZlbiBIVE1MRm9ybUVsZW1l
bnQgCisvLyBSZXR1cm4gbm90aGluZyBpZiBvbmUgb2YgdGhvc2UgaXRlbXMgYXJlIGZvdW5kOgor
Ly8gIC0gQSB0ZXh0IGFyZWEgZmllbGQKKy8vICAtIEEgZmlsZSB1cGxvYWQgZmllbGQgCisvLyAg
LSBBIFBhc3N3b3JkIGZpZWxkCisvLyAgLSBNb3JlIHRoYW4gb25lIHRleHQgZmllbGQKK1dlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQqIEZpbmRTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxG
b3JtRWxlbWVudCogZm9ybSkKIHsKLSAgICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmc7Ci0gICAgR2V0
Rm9ybUVuY29kaW5nKGZvcm0sICZlbmNvZGluZyk7Ci0gICAgaWYgKCFlbmNvZGluZy5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgLy8gTmVlZCBhIHZhbGlkIGVuY29kaW5nIHRvIGVuY29kZSB0aGUgZm9y
bSBlbGVtZW50cy4KLSAgICAgICAgLy8gSWYgdGhlIGVuY29kaW5nIGlzbid0IGZvdW5kIHdlYmtp
dCBlbmRzIHVwIHJlcGxhY2luZyB0aGUgcGFyYW1zIHdpdGgKLSAgICAgICAgLy8gZW1wdHkgc3Ry
aW5ncy4gU28sIHdlIGRvbid0IHRyeSB0byBkbyBhbnl0aGluZyBoZXJlLgotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgKmVuY29kaW5nTmFtZSA9IGVuY29kaW5nLm5hbWUoKTsKLQogICAg
IEhUTUxJbnB1dEVsZW1lbnQqIHRleHRFbGVtZW50ID0gMDsKICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgcmVmYWN0b3JpbmcgdGhpcyBjb2RlIHNvIHRoYXQgd2UgZG9uJ3QgY2FsbCBmb3JtLT5hc3Nv
Y2lhdGVkRWxlbWVudHMoKSB0d2ljZS4KICAgICBmb3IgKFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGkoZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuYmVn
aW4oKSk7IGkgIT0gZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuZW5kKCk7ICsraSkgewpAQCAt
MTYxLDczICsxNTMsMTA1IEBAIGJvb2wgSGFzU3VpdGFibGVUZXh0RWxlbWVudChjb25zdCBIVE1M
Rm8KICAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5kaXNhYmxlZCgpIHx8IGZvcm1FbGVtZW50LT5u
YW1lKCkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAvLyBSZXR1
cm4gbm90aGluZyBpZiBhbiBlbGVtZW50IGlzIG5vdCBpbiB0aGUgZGVmYXVsdCBzdGF0ZQorICAg
ICAgICAvLyBSZXR1cm4gbm90aGluZyBpZiBhIHRleHQgYXJlYSBpcyBwcmVzZW50LgogICAgICAg
ICBpZiAoIUlzSW5EZWZhdWx0U3RhdGUoZm9ybUVsZW1lbnQpIHx8IGZvcm1FbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWFUYWcpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICAgICAgYm9vbCBpc1RleHRFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIGlmIChmb3JtRWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICAgICAgaWYg
KGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpICYmIGZvcm1FbGVt
ZW50LT53aWxsVmFsaWRhdGUoKSkgewogICAgICAgICAgICAgY29uc3QgSFRNTElucHV0RWxlbWVu
dCogaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MSW5wdXRFbGVtZW50Kj4oZm9ybUVsZW1l
bnQpOwotICAgICAgICAgICAgaWYgKGlucHV0LT5pc0ZpbGVVcGxvYWQoKSkgewotICAgICAgICAg
ICAgICAgIC8vIFRvbyBiaWcsIGRvbid0IHRyeSB0byBpbmRleCB0aGlzLgotICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoaW5wdXQtPmlz
UGFzc3dvcmRGaWVsZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc3RvcmUgcGFzc3dv
cmRzISBUaGlzIGlzIG1vc3QgbGlrZWx5IGFuIGh0dHBzIGFueXdheS4KKyAgICAgICAgICAgIC8v
IFJldHVybiBub3RoaW5nIGlmIGEgZmlsZSB1cGxvYWQgZmllbGQgb3IgYSBwYXNzd29yZCBmaWVs
ZCBhcmUgcHJlc2VudC4KKyAgICAgICAgICAgIGlmIChpbnB1dC0+aXNGaWxlVXBsb2FkKCkgfHwg
aW5wdXQtPmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpCi0gICAg
ICAgICAgICAgICAgaXNUZXh0RWxlbWVudCA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIEZvcm1E
YXRhTGlzdCBkYXRhTGlzdChlbmNvZGluZyk7Ci0gICAgICBpZiAoIWZvcm1FbGVtZW50LT5hcHBl
bmRGb3JtRGF0YShkYXRhTGlzdCwgZmFsc2UpKQotICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYgaXRlbXMgPSBkYXRhTGlzdC5pdGVt
cygpOwotICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYgIWl0ZW1zLmlzRW1wdHkoKSkgewotICAg
ICAgICAgIGlmICh0ZXh0RWxlbWVudCkgewotICAgICAgICAgICAgICAvLyBUaGUgYXV0by1jb21w
bGV0ZSBiYXIgb25seSBrbm93cyBob3cgdG8gZmlsbCBpbiBvbmUgdmFsdWUuCi0gICAgICAgICAg
ICAgIC8vIFRoaXMgZm9ybSBoYXMgbXVsdGlwbGUgZmllbGRzOyBkb24ndCB0cmVhdCBpdCBhcyBz
ZWFyY2hhYmxlLgotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAg
ICAgICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGZvcm1F
bGVtZW50KTsKLSAgICAgIH0KLSAgICAgIGZvciAoVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT46
OmNvbnN0X2l0ZXJhdG9yIGooaXRlbXMuYmVnaW4oKSk7IGogIT0gaXRlbXMuZW5kKCk7ICsraikg
ewotICAgICAgICAgIC8vIEhhbmRsZSBJU0lOREVYIC8gPGlucHV0IG5hbWU9aXNpbmRleD4gc3Bl
Y2lhbGx5LCBidXQgb25seSBpZiBpdCdzCi0gICAgICAgICAgLy8gdGhlIGZpcnN0IGVudHJ5Lgot
ICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgpIHx8IGotPmRhdGEoKSAhPSAi
aXNpbmRleCIpIHsKLSAgICAgICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJyYnKTsKLSAgICAgICAg
ICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3Ry
aW5nLCBqLT5kYXRhKCkpOwotICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJz0n
KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgKytqOwotICAgICAgICAgIGlmIChmb3JtRWxlbWVu
dCA9PSB0ZXh0RWxlbWVudCkKLSAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCJ7
c2VhcmNoVGVybXN9IiwgMTMpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgRm9ybURh
dGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRh
KCkpOwotICAgICAgfQorICAgICAgICAgICAgaWYgKGlucHV0LT5pc1RleHRGaWVsZCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHRleHRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFRoZSBhdXRvLWNvbXBsZXRlIGJhciBvbmx5IGtub3dzIGhvdyB0byBmaWxsIGluIG9uZSB2YWx1
ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmb3JtIGhhcyBtdWx0aXBsZSBmaWVsZHM7
IGRvbid0IHRyZWF0IGl0IGFzIHNlYXJjaGFibGUuCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXh0RWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KICAgICB9Ci0KICAgICByZXR1cm4gdGV4dEVsZW1lbnQ7CiB9CiAKK2Jvb2wg
QnVpbGRTZWFyY2hTdHJpbmcoY29uc3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hh
cj4qIGVuY29kZWRTdHJpbmcsIFRleHRFbmNvZGluZyogZW5jb2RpbmcsIGNvbnN0IFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQqIHRleHRFbGVtZW50KQoreworICAgIGJvb2wgaXNFbGVtZW50Rm91
bmQgPSBmYWxzZTsgICAKKworICAgIC8vIEZJWE1FOiBDb25zaWRlciByZWZhY3RvcmluZyB0aGlz
IGNvZGUgc28gdGhhdCB3ZSBkb24ndCBjYWxsIGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpIHR3
aWNlLgorICAgIGZvciAoVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPjo6Y29uc3RfaXRl
cmF0b3IgaShmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5iZWdpbigpKTsgaSAhPSBmb3JtLT5h
c3NvY2lhdGVkRWxlbWVudHMoKS5lbmQoKTsgKytpKSB7CisgICAgICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gKmk7CisgICAgICAgIGlmIChmb3JtRWxlbWVudC0+ZGlz
YWJsZWQoKSB8fCBmb3JtRWxlbWVudC0+bmFtZSgpLmlzTnVsbCgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgRm9ybURhdGFMaXN0IGRhdGFMaXN0KCplbmNvZGluZyk7CisgICAg
ICAgIGlmICghZm9ybUVsZW1lbnQtPmFwcGVuZEZvcm1EYXRhKGRhdGFMaXN0LCBmYWxzZSkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0
OjpJdGVtPiYgaXRlbXMgPSBkYXRhTGlzdC5pdGVtcygpOworCisgICAgICAgIGZvciAoVmVjdG9y
PEZvcm1EYXRhTGlzdDo6SXRlbT46OmNvbnN0X2l0ZXJhdG9yIGooaXRlbXMuYmVnaW4oKSk7IGog
IT0gaXRlbXMuZW5kKCk7ICsraikgeworICAgICAgICAgICAgLy8gSGFuZGxlIElTSU5ERVggLyA8
aW5wdXQgbmFtZT1pc2luZGV4PiBzcGVjaWFsbHksIGJ1dCBvbmx5IGlmIGl0J3MKKyAgICAgICAg
ICAgIC8vIHRoZSBmaXJzdCBlbnRyeS4KKyAgICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+
aXNFbXB0eSgpIHx8IGotPmRhdGEoKSAhPSAiaXNpbmRleCIpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgZW5jb2Rl
ZFN0cmluZy0+YXBwZW5kKCcmJyk7CisgICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjpl
bmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOworICAgICAg
ICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgnPScpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgKytqOworICAgICAgICAgICAgaWYgKGZvcm1FbGVtZW50ID09IHRleHRFbGVtZW50
KSB7CisgICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCJ7c2VhcmNoVGVybXN9
IiwgMTMpOworICAgICAgICAgICAgICAgIGlzRWxlbWVudEZvdW5kID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5n
QXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywgai0+ZGF0YSgpKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gaXNFbGVtZW50Rm91bmQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1XZWJTZWFyY2hhYmxlRm9ybURhdGE6OldlYlNlYXJjaGFibGVGb3Jt
RGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYgZm9ybSkKK1dlYlNlYXJjaGFibGVGb3JtRGF0YTo6
V2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50JiBmb3JtLCBjb25zdCBX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBzZWxlY3RlZElucHV0RWxlbWVudCkKIHsKICAgICBS
ZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBmb3JtRWxlbWVudCA9IGZvcm0ub3BlcmF0b3IgUGFzc1Jl
ZlB0cjxIVE1MRm9ybUVsZW1lbnQ+KCk7CiAgICAgY29uc3QgRnJhbWUqIGZyYW1lID0gZm9ybUVs
ZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgLy8gT25seSBjb25zaWRlciBmb3JtcyB0aGF0IEdFVCBkYXRhIGFuZCB0aGUg
YWN0aW9uIHRhcmdldHMgYW4gaHR0cCBwYWdlLgotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShm
b3JtRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bWV0aG9kQXR0ciksICJwb3N0Iikg
fHwgIUlzSFRUUEZvcm1TdWJtaXQoZm9ybUVsZW1lbnQuZ2V0KCkpKQorICAgIC8vIE9ubHkgY29u
c2lkZXIgZm9ybXMgdGhhdCBHRVQgZGF0YS4KKyAgICAvLyBBbGxvdyBIVFRQUyBvbmx5IHdoZW4g
YW4gaW5wdXQgZWxlbWVudCBpcyBwcm92aWRlZC4gCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGZvcm1FbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjptZXRob2RBdHRyKSwgInBvc3Qi
KSAKKyAgICAgICAgfHwgKCFJc0hUVFBGb3JtU3VibWl0KGZvcm1FbGVtZW50LmdldCgpKSAmJiAh
c2VsZWN0ZWRJbnB1dEVsZW1lbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8Y2hh
cj4gZW5jb2RlZFN0cmluZzsKKyAgICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmc7CisKKyAgICBHZXRG
b3JtRW5jb2RpbmcoZm9ybUVsZW1lbnQuZ2V0KCksICZlbmNvZGluZyk7CisgICAgaWYgKCFlbmNv
ZGluZy5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gTmVlZCBhIHZhbGlkIGVuY29kaW5nIHRvIGVu
Y29kZSB0aGUgZm9ybSBlbGVtZW50cy4KKyAgICAgICAgLy8gSWYgdGhlIGVuY29kaW5nIGlzbid0
IGZvdW5kIHdlYmtpdCBlbmRzIHVwIHJlcGxhY2luZyB0aGUgcGFyYW1zIHdpdGgKKyAgICAgICAg
Ly8gZW1wdHkgc3RyaW5ncy4gU28sIHdlIGRvbid0IHRyeSB0byBkbyBhbnl0aGluZyBoZXJlLgog
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gTG9vayBmb3IgYSBzdWl0YWJsZSBzZWFy
Y2ggdGV4dCBmaWVsZCBpbiB0aGUgZm9ybSB3aGVuIGEgCisgICAgLy8gc2VsZWN0ZWRJbnB1dEVs
ZW1lbnQgaXMgbm90IHByb3ZpZGVkLgorICAgIGlmICghc2VsZWN0ZWRJbnB1dEVsZW1lbnQpIHsK
KyAgICAgICAgc2VsZWN0ZWRJbnB1dEVsZW1lbnQgPSBGaW5kU3VpdGFibGVUZXh0RWxlbWVudChm
b3JtRWxlbWVudC5nZXQoKSk7CisKKyAgICAgICAgLy8gUmV0dXJuIGlmIG5vIHN1aXRhYmxlIHRl
eHQgZWxlbWVudCBoYXMgYmVlbiBmb3VuZC4KKyAgICAgICAgaWYgKCFzZWxlY3RlZElucHV0RWxl
bWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KiBmaXJzdFN1Ym1pdEJ1dHRvbiA9IEdldEJ1dHRvblRvQWN0aXZhdGUoZm9ybUVsZW1l
bnQuZ2V0KCkpOwogICAgIGlmIChmaXJzdFN1Ym1pdEJ1dHRvbikgewpAQCAtMjM2LDIyICsyNjAs
MjIgQEAgV2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxlRm9ybQogICAgICAgICAv
LyBuYW1lIG9mIHRoZSBzdWJtaXQgYnV0dG9uLgogICAgICAgICBmaXJzdFN1Ym1pdEJ1dHRvbi0+
c2V0QWN0aXZhdGVkU3VibWl0KHRydWUpOwogICAgIH0KLSAgICBWZWN0b3I8Y2hhcj4gZW5jb2Rl
ZFN0cmluZzsKLSAgICBTdHJpbmcgZW5jb2Rpbmc7Ci0gICAgYm9vbCBoYXNFbGVtZW50ID0gSGFz
U3VpdGFibGVUZXh0RWxlbWVudChmb3JtRWxlbWVudC5nZXQoKSwgJmVuY29kZWRTdHJpbmcsICZl
bmNvZGluZyk7CisKKyAgICBib29sIHZhbGlkU2VhcmNoU3RyaW5nID0gQnVpbGRTZWFyY2hTdHJp
bmcoZm9ybUVsZW1lbnQuZ2V0KCksICZlbmNvZGVkU3RyaW5nLCAmZW5jb2RpbmcsIHNlbGVjdGVk
SW5wdXRFbGVtZW50KTsKKwogICAgIGlmIChmaXJzdFN1Ym1pdEJ1dHRvbikKICAgICAgICAgZmly
c3RTdWJtaXRCdXR0b24tPnNldEFjdGl2YXRlZFN1Ym1pdChmYWxzZSk7Ci0gICAgaWYgKCFoYXNF
bGVtZW50KSB7Ci0gICAgICAgIC8vIE5vdCBhIHNlYXJjaGFibGUgZm9ybS4KKworICAgIC8vIFJl
dHVybiBpZiB0aGUgc2VhcmNoIHN0cmluZyBpcyBub3QgdmFsaWQuIAorICAgIGlmICghdmFsaWRT
ZWFyY2hTdHJpbmcpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBTdHJpbmcgYWN0aW9u
KGZvcm1FbGVtZW50LT5hY3Rpb24oKSk7CiAgICAgS1VSTCB1cmwoZnJhbWUtPmxvYWRlcigpLT5j
b21wbGV0ZVVSTChhY3Rpb24uaXNOdWxsKCkgPyAiIiA6IGFjdGlvbikpOwogICAgIFJlZlB0cjxG
b3JtRGF0YT4gZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlKGVuY29kZWRTdHJpbmcpOwogICAg
IHVybC5zZXRRdWVyeShmb3JtRGF0YS0+ZmxhdHRlblRvU3RyaW5nKCkpOwogICAgIG1fdXJsID0g
dXJsOwotICAgIG1fZW5jb2RpbmcgPSBlbmNvZGluZzsKKyAgICBtX2VuY29kaW5nID0gKFN0cmlu
ZykgZW5jb2RpbmcubmFtZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72654</attachid>
            <date>2010-11-02 05:41:00 -0700</date>
            <delta_ts>2011-04-25 10:13:57 -0700</delta_ts>
            <desc>Proposed Patch V6</desc>
            <filename>kw6.txt</filename>
            <type>text/plain</type>
            <size>13373</size>
            <attacher>philippe.beauchamp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzEwOTQpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTEtMDIgIFBoaWxp
cHBlIEJlYXVjaGFtcCAgPHBoaWxpcHBlLmJlYXVjaGFtcEBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBmZWF0dXJlICJB
ZGQgYXMgc2VhcmNoIGVuZ2luZS4uLiIgaW4gc2VhcmNoIHRleHQgZmllbGQgY29udGV4dCBtZW51
LgorCisgICAgICAgICogcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oOgorICAgICAgICAqIHB1
YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaDoKKyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpn
ZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6CisgICAgICAgICogc3JjL1dlYlNlYXJjaGFi
bGVGb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXNTdWl0YWJsZVRleHRFbGVtZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxl
Rm9ybURhdGEpOgorCiAyMDEwLTExLTAxICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgJKHJldmlzaW9uIDcxMDk0KQorKysgV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtNjksNiArNjksMTAgQEAgc3RydWN0IFdlYkNvbnRleHRNZW51RGF0YSB7CiAgICAgLy8gVGhl
IGFic29sdXRlIFVSTCBvZiB0aGUgcGFnZSBpbiBjb250ZXh0LgogICAgIFdlYlVSTCBwYWdlVVJM
OwogCisgICAgLy8gVGhlIGFic29sdXRlIGtleXdvcmQgc2VhcmNoIFVSTCBpbmNsdWRpbmcgdGhl
ICVzIHNlYXJjaCB0YWcgd2hlbiB0aGUKKyAgICAvLyAiQWRkIGFzIHNlYXJjaCBlbmdpbmUuLi4i
IG9wdGlvbiBpcyBjbGlja2VkIChsZWZ0IGVtcHR5IGlmIG5vdCB1c2VkKS4KKyAgICBXZWJVUkwg
a2V5d29yZFVSTDsKKwogICAgIC8vIFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhlIHN1YmZyYW1lIGlu
IGNvbnRleHQuCiAgICAgV2ViVVJMIGZyYW1lVVJMOwogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgJKHJldmlzaW9uIDcxMDk0KQorKysg
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUg
IldlYlVSTC5oIgogCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7
IH0KKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJGb3JtRWxlbWVudDsKIApAQCAtNDMs
NyArNDUsNyBAQCBjbGFzcyBXZWJTZWFyY2hhYmxlRm9ybURhdGEgewogcHVibGljOgogICAgIC8v
IElmIHRoZSBwcm92aWRlZCBmb3JtIGlzIHN1aXRhYmxlIGZvciBhdXRvbWF0ZWQgc2VhcmNoaW5n
LCBpc1ZhbGlkKCkKICAgICAvLyB3aWxsIHJldHVybiBmYWxzZS4KLSAgICBXRUJLSVRfQVBJIFdl
YlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYpOworICAgIFdFQktJVF9B
UEkgV2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50JiwgY29uc3QgV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudCogc2VsZWN0ZWRJbnB1dEVsZW1lbnQgPSAwKTsKIAogICAg
IGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuIG1fdXJsLmlzVmFsaWQoKTsgfQogCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCShyZXZpc2lvbiA3
MTA5NCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgpAQCAtNTIsMTEgKzU0LDEzIEBACiAKICNpbmNsdWRlICJXZWJDb250
ZXh0TWVudURhdGEuaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5oIgorI2luY2x1ZGUg
IldlYkZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5jbHVkZSAi
V2ViTWVudUl0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCiAjaW5jbHVkZSAiV2Vi
UGx1Z2luQ29udGFpbmVySW1wbC5oIgogI2luY2x1ZGUgIldlYlBvaW50LmgiCisjaW5jbHVkZSAi
V2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKQEAgLTI0NCw2ICsyNDgs
MTYgQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGllbgogICAgICAgICAg
ICAgaWYgKG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVGcmFtZSgpLT5lZGl0b3IoKS0+aXNTcGVs
bENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSkKICAgICAgICAgICAgICAgICBkYXRhLm1p
c3NwZWxsZWRXb3JkID0gc2VsZWN0TWlzc3BlbGxlZFdvcmQoZGVmYXVsdE1lbnUsIHNlbGVjdGVk
RnJhbWUpOwogICAgICAgICB9CisKKyAgICAgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBm
b3JtID0gc2VsZWN0ZWRGcmFtZS0+c2VsZWN0aW9uKCktPmN1cnJlbnRGb3JtKCk7CisgICAgICAg
IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIHNlbGVjdGVkRWxlbWVudCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqPihyLmlubmVyTm9uU2hhcmVkTm9kZSgpKTsKKyAg
ICAgICAgaWYgKGZvcm0gJiYgc2VsZWN0ZWRFbGVtZW50KSB7CisgICAgICAgICAgICBpZiAoc2Vs
ZWN0ZWRFbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpICYmIGZvcm0tPmNo
ZWNrVmFsaWRpdHkoKSkgeworICAgICAgICAgICAgICAgIFdlYlNlYXJjaGFibGVGb3JtRGF0YSB3
cyA9IFdlYlNlYXJjaGFibGVGb3JtRGF0YShXZWJGb3JtRWxlbWVudChmb3JtKSwgc2VsZWN0ZWRF
bGVtZW50KTsKKyAgICAgICAgICAgICAgICBpZiAod3MudXJsKCkuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgICAgICAgICBkYXRhLmtleXdvcmRVUkwgPSB3cy51cmwoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogICAgIH0KIAogI2lmIE9TKERBUldJTikKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAJKHJldmlzaW9uIDcxMDk0KQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzgsMjIgKzEzOCwxNCBAQCBib29sIElzSW5EZWZhdWx0U3RhdGUoY29uc3QgSFRN
TEZvcm1Db250CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIElmIGZvcm0gaGFzIG9ubHkgb25l
IHRleHQgaW5wdXQgZWxlbWVudCwgcmV0dXJuIHRydWUuIElmIGEgdmFsaWQgaW5wdXQKLS8vIGVs
ZW1lbnQgaXMgbm90IGZvdW5kLCByZXR1cm4gZmFsc2UuIEFkZGl0aW9uYWxseSwgdGhlIGZvcm0g
ZGF0YSBmb3IgYWxsCi0vLyBlbGVtZW50cyBpcyBhZGRlZCB0byBlbmNfc3RyaW5nIGFuZCB0aGUg
ZW5jb2RpbmcgdXNlZCBpcyBzZXQgaW4KLS8vIGVuY29kaW5nX25hbWUuCi1ib29sIEhhc1N1aXRh
YmxlVGV4dEVsZW1lbnQoY29uc3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4q
IGVuY29kZWRTdHJpbmcsIFN0cmluZyogZW5jb2RpbmdOYW1lKQorLy8gTG9vayBmb3IgYSBzdWl0
YWJsZSBzZWFyY2ggdGV4dCBmaWVsZCBpbiBhIGdpdmVuIEhUTUxGb3JtRWxlbWVudCAKKy8vIFJl
dHVybiBub3RoaW5nIGlmIG9uZSBvZiB0aG9zZSBpdGVtcyBhcmUgZm91bmQ6CisvLyAgLSBBIHRl
eHQgYXJlYSBmaWVsZAorLy8gIC0gQSBmaWxlIHVwbG9hZCBmaWVsZCAKKy8vICAtIEEgUGFzc3dv
cmQgZmllbGQKKy8vICAtIE1vcmUgdGhhbiBvbmUgdGV4dCBmaWVsZAorV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudCogRmluZFN1aXRhYmxlVGV4dEVsZW1lbnQoY29uc3QgSFRNTEZvcm1FbGVtZW50
KiBmb3JtKQogewotICAgIFRleHRFbmNvZGluZyBlbmNvZGluZzsKLSAgICBHZXRGb3JtRW5jb2Rp
bmcoZm9ybSwgJmVuY29kaW5nKTsKLSAgICBpZiAoIWVuY29kaW5nLmlzVmFsaWQoKSkgewotICAg
ICAgICAvLyBOZWVkIGEgdmFsaWQgZW5jb2RpbmcgdG8gZW5jb2RlIHRoZSBmb3JtIGVsZW1lbnRz
LgotICAgICAgICAvLyBJZiB0aGUgZW5jb2RpbmcgaXNuJ3QgZm91bmQgd2Via2l0IGVuZHMgdXAg
cmVwbGFjaW5nIHRoZSBwYXJhbXMgd2l0aAotICAgICAgICAvLyBlbXB0eSBzdHJpbmdzLiBTbywg
d2UgZG9uJ3QgdHJ5IHRvIGRvIGFueXRoaW5nIGhlcmUuCi0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICAqZW5jb2RpbmdOYW1lID0gZW5jb2RpbmcubmFtZSgpOwotCiAgICAgSFRNTElucHV0
RWxlbWVudCogdGV4dEVsZW1lbnQgPSAwOwogICAgIC8vIEZJWE1FOiBDb25zaWRlciByZWZhY3Rv
cmluZyB0aGlzIGNvZGUgc28gdGhhdCB3ZSBkb24ndCBjYWxsIGZvcm0tPmFzc29jaWF0ZWRFbGVt
ZW50cygpIHR3aWNlLgogICAgIGZvciAoVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPjo6
Y29uc3RfaXRlcmF0b3IgaShmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5iZWdpbigpKTsgaSAh
PSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5lbmQoKTsgKytpKSB7CkBAIC0xNjEsNzMgKzE1
MywxMTEgQEAgYm9vbCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGbwogICAgICAg
ICBpZiAoZm9ybUVsZW1lbnQtPmRpc2FibGVkKCkgfHwgZm9ybUVsZW1lbnQtPm5hbWUoKS5pc051
bGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIC8vIFJldHVybiBub3RoaW5n
IGlmIGFuIGVsZW1lbnQgaXMgbm90IGluIHRoZSBkZWZhdWx0IHN0YXRlCisgICAgICAgIC8vIFJl
dHVybiBub3RoaW5nIGlmIGEgdGV4dCBhcmVhIGlzIHByZXNlbnQuCiAgICAgICAgIGlmICghSXNJ
bkRlZmF1bHRTdGF0ZShmb3JtRWxlbWVudCkgfHwgZm9ybUVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0ZXh0YXJlYVRhZykpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBi
b29sIGlzVGV4dEVsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CisgICAgICAgICAgICBpZiAoZm9ybUVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykgJiYgZm9ybUVsZW1lbnQtPndpbGxW
YWxpZGF0ZSgpKSB7CiAgICAgICAgICAgICBjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9
IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCk7Ci0gICAg
ICAgICAgICBpZiAoaW5wdXQtPmlzRmlsZVVwbG9hZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VG9vIGJpZywgZG9uJ3QgdHJ5IHRvIGluZGV4IHRoaXMuCi0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpbnB1dC0+aXNQYXNzd29yZEZp
ZWxkKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBzdG9yZSBwYXNzd29yZHMhIFRoaXMg
aXMgbW9zdCBsaWtlbHkgYW4gaHR0cHMgYW55d2F5LgorICAgICAgICAgICAgLy8gUmV0dXJuIG5v
dGhpbmcgaWYgYSBmaWxlIHVwbG9hZCBmaWVsZCBvciBhIHBhc3N3b3JkIGZpZWxkIGFyZSBwcmVz
ZW50LgorICAgICAgICAgICAgaWYgKGlucHV0LT5pc0ZpbGVVcGxvYWQoKSB8fCBpbnB1dC0+aXNQ
YXNzd29yZEZpZWxkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmIChpbnB1dC0+aXNUZXh0RmllbGQoKSkKLSAgICAgICAgICAgICAg
ICBpc1RleHRFbGVtZW50ID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgRm9ybURhdGFMaXN0IGRh
dGFMaXN0KGVuY29kaW5nKTsKLSAgICAgIGlmICghZm9ybUVsZW1lbnQtPmFwcGVuZEZvcm1EYXRh
KGRhdGFMaXN0LCBmYWxzZSkpCi0gICAgICAgICAgY29udGludWU7Ci0KLSAgICAgIGNvbnN0IFZl
Y3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+JiBpdGVtcyA9IGRhdGFMaXN0Lml0ZW1zKCk7Ci0gICAg
ICBpZiAoaXNUZXh0RWxlbWVudCAmJiAhaXRlbXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgaWYg
KHRleHRFbGVtZW50KSB7Ci0gICAgICAgICAgICAgIC8vIFRoZSBhdXRvLWNvbXBsZXRlIGJhciBv
bmx5IGtub3dzIGhvdyB0byBmaWxsIGluIG9uZSB2YWx1ZS4KLSAgICAgICAgICAgICAgLy8gVGhp
cyBmb3JtIGhhcyBtdWx0aXBsZSBmaWVsZHM7IGRvbid0IHRyZWF0IGl0IGFzIHNlYXJjaGFibGUu
Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgdGV4
dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZm9ybUVsZW1lbnQpOwot
ICAgICAgfQotICAgICAgZm9yIChWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPjo6Y29uc3RfaXRl
cmF0b3IgaihpdGVtcy5iZWdpbigpKTsgaiAhPSBpdGVtcy5lbmQoKTsgKytqKSB7Ci0gICAgICAg
ICAgLy8gSGFuZGxlIElTSU5ERVggLyA8aW5wdXQgbmFtZT1pc2luZGV4PiBzcGVjaWFsbHksIGJ1
dCBvbmx5IGlmIGl0J3MKLSAgICAgICAgICAvLyB0aGUgZmlyc3QgZW50cnkuCi0gICAgICAgICAg
aWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkgfHwgai0+ZGF0YSgpICE9ICJpc2luZGV4Iikg
ewotICAgICAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgnJicpOwotICAgICAgICAgICAgICBGb3Jt
RGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRh
dGEoKSk7Ci0gICAgICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgnPScpOwotICAgICAg
ICAgIH0KLSAgICAgICAgICArK2o7Ci0gICAgICAgICAgaWYgKGZvcm1FbGVtZW50ID09IHRleHRF
bGVtZW50KQotICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoIntzZWFyY2hUZXJt
c30iLCAxMyk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6
OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7Ci0gICAg
ICB9CisgICAgICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAodGV4dEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGF1dG8t
Y29tcGxldGUgYmFyIG9ubHkga25vd3MgaG93IHRvIGZpbGwgaW4gb25lIHZhbHVlLgorICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGZvcm0gaGFzIG11bHRpcGxlIGZpZWxkczsgZG9uJ3QgdHJl
YXQgaXQgYXMgc2VhcmNoYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KGZvcm1FbGVtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgIH0KLQogICAgIHJldHVybiB0ZXh0RWxlbWVudDsKIH0KIAorLy8gQnVpbGQgYSBzZWFy
Y2ggc3RyaW5nIGJhc2VkIG9uIGEgZ2l2ZW4gSFRNTEZvcm1FbGVtZW50IGFuZCBIVE1MSW5wdXRF
bGVtZW50CisvLyAKKy8vIFNlYXJjaCBzdHJpbmcgb3V0cHV0IGV4YW1wbGUgZnJvbSB3d3cuZ29v
Z2xlLmNvbToKKy8vICJobD1lbiZzb3VyY2U9aHAmYml3PTEwODUmYmloPTg1NCZxPXtzZWFyY2hU
ZXJtc30mYnRuRz1Hb29nbGUrU2VhcmNoJmFxPWYmYXFpPSZhcWw9Jm9xPSZnc19yZmFpPf8iCisv
LyAKKy8vIFJldHVybiBmYWxzZSBpZiB0aGUgcHJvdmlkZWQgSFRNTElucHV0RWxlbWVudCBpcyBu
b3QgZm91bmQgaW4gdGhlIGZvcm0KK2Jvb2wgQnVpbGRTZWFyY2hTdHJpbmcoY29uc3QgSFRNTEZv
cm1FbGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRTdHJpbmcsIFRleHRFbmNvZGlu
ZyogZW5jb2RpbmcsIGNvbnN0IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIHRleHRFbGVtZW50
KQoreworICAgIGJvb2wgaXNFbGVtZW50Rm91bmQgPSBmYWxzZTsgICAKKworICAgIC8vIEZJWE1F
OiBDb25zaWRlciByZWZhY3RvcmluZyB0aGlzIGNvZGUgc28gdGhhdCB3ZSBkb24ndCBjYWxsIGZv
cm0tPmFzc29jaWF0ZWRFbGVtZW50cygpIHR3aWNlLgorICAgIGZvciAoVmVjdG9yPEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgaShmb3JtLT5hc3NvY2lhdGVkRWxlbWVu
dHMoKS5iZWdpbigpKTsgaSAhPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5lbmQoKTsgKytp
KSB7CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gKmk7Cisg
ICAgICAgIGlmIChmb3JtRWxlbWVudC0+ZGlzYWJsZWQoKSB8fCBmb3JtRWxlbWVudC0+bmFtZSgp
LmlzTnVsbCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgRm9ybURhdGFMaXN0
IGRhdGFMaXN0KCplbmNvZGluZyk7CisgICAgICAgIGlmICghZm9ybUVsZW1lbnQtPmFwcGVuZEZv
cm1EYXRhKGRhdGFMaXN0LCBmYWxzZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYgaXRlbXMgPSBkYXRhTGlzdC5pdGVt
cygpOworCisgICAgICAgIGZvciAoVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT46OmNvbnN0X2l0
ZXJhdG9yIGooaXRlbXMuYmVnaW4oKSk7IGogIT0gaXRlbXMuZW5kKCk7ICsraikgeworICAgICAg
ICAgICAgLy8gSGFuZGxlIElTSU5ERVggLyA8aW5wdXQgbmFtZT1pc2luZGV4PiBzcGVjaWFsbHks
IGJ1dCBvbmx5IGlmIGl0J3MKKyAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBlbnRyeS4KKyAgICAg
ICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgpIHx8IGotPmRhdGEoKSAhPSAiaXNp
bmRleCIpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCcmJyk7CisgICAgICAg
ICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVk
U3RyaW5nLCBqLT5kYXRhKCkpOworICAgICAgICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVu
ZCgnPScpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytqOworICAgICAgICAgICAgaWYg
KGZvcm1FbGVtZW50ID09IHRleHRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgZW5jb2RlZFN0
cmluZy0+YXBwZW5kKCJ7c2VhcmNoVGVybXN9IiwgMTMpOworICAgICAgICAgICAgICAgIGlzRWxl
bWVudEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Rm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBq
LT5kYXRhKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBp
c0VsZW1lbnRGb3VuZDsKK30KKwogfSAvLyBuYW1lc3BhY2UKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLVdlYlNlYXJjaGFibGVGb3JtRGF0YTo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdl
YkZvcm1FbGVtZW50JiBmb3JtKQorV2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxl
Rm9ybURhdGEoY29uc3QgV2ViRm9ybUVsZW1lbnQmIGZvcm0sIGNvbnN0IFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQqIHNlbGVjdGVkSW5wdXRFbGVtZW50KQogewogICAgIFJlZlB0cjxIVE1MRm9y
bUVsZW1lbnQ+IGZvcm1FbGVtZW50ID0gZm9ybS5vcGVyYXRvciBQYXNzUmVmUHRyPEhUTUxGb3Jt
RWxlbWVudD4oKTsKICAgICBjb25zdCBGcmFtZSogZnJhbWUgPSBmb3JtRWxlbWVudC0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBPbmx5IGNvbnNpZGVyIGZvcm1zIHRoYXQgR0VUIGRhdGEgYW5kIHRoZSBhY3Rpb24gdGFyZ2V0
cyBhbiBodHRwIHBhZ2UuCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZvcm1FbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjptZXRob2RBdHRyKSwgInBvc3QiKSB8fCAhSXNIVFRQRm9y
bVN1Ym1pdChmb3JtRWxlbWVudC5nZXQoKSkpCisgICAgLy8gT25seSBjb25zaWRlciBmb3JtcyB0
aGF0IEdFVCBkYXRhLgorICAgIC8vIEFsbG93IEhUVFBTIG9ubHkgd2hlbiBhbiBpbnB1dCBlbGVt
ZW50IGlzIHByb3ZpZGVkLiAKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybUVsZW1lbnQt
PmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Om1ldGhvZEF0dHIpLCAicG9zdCIpIAorICAgICAgICB8
fCAoIUlzSFRUUEZvcm1TdWJtaXQoZm9ybUVsZW1lbnQuZ2V0KCkpICYmICFzZWxlY3RlZElucHV0
RWxlbWVudCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkU3Ry
aW5nOworICAgIFRleHRFbmNvZGluZyBlbmNvZGluZzsKKworICAgIEdldEZvcm1FbmNvZGluZyhm
b3JtRWxlbWVudC5nZXQoKSwgJmVuY29kaW5nKTsKKyAgICBpZiAoIWVuY29kaW5nLmlzVmFsaWQo
KSkgeworICAgICAgICAvLyBOZWVkIGEgdmFsaWQgZW5jb2RpbmcgdG8gZW5jb2RlIHRoZSBmb3Jt
IGVsZW1lbnRzLgorICAgICAgICAvLyBJZiB0aGUgZW5jb2RpbmcgaXNuJ3QgZm91bmQgd2Via2l0
IGVuZHMgdXAgcmVwbGFjaW5nIHRoZSBwYXJhbXMgd2l0aAorICAgICAgICAvLyBlbXB0eSBzdHJp
bmdzLiBTbywgd2UgZG9uJ3QgdHJ5IHRvIGRvIGFueXRoaW5nIGhlcmUuCiAgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBMb29rIGZvciBhIHN1aXRhYmxlIHNlYXJjaCB0ZXh0IGZpZWxk
IGluIHRoZSBmb3JtIHdoZW4gYSAKKyAgICAvLyBzZWxlY3RlZElucHV0RWxlbWVudCBpcyBub3Qg
cHJvdmlkZWQuCisgICAgaWYgKCFzZWxlY3RlZElucHV0RWxlbWVudCkgeworICAgICAgICBzZWxl
Y3RlZElucHV0RWxlbWVudCA9IEZpbmRTdWl0YWJsZVRleHRFbGVtZW50KGZvcm1FbGVtZW50Lmdl
dCgpKTsKKworICAgICAgICAvLyBSZXR1cm4gaWYgbm8gc3VpdGFibGUgdGV4dCBlbGVtZW50IGhh
cyBiZWVuIGZvdW5kLgorICAgICAgICBpZiAoIXNlbGVjdGVkSW5wdXRFbGVtZW50KQorICAgICAg
ICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZpcnN0
U3VibWl0QnV0dG9uID0gR2V0QnV0dG9uVG9BY3RpdmF0ZShmb3JtRWxlbWVudC5nZXQoKSk7CiAg
ICAgaWYgKGZpcnN0U3VibWl0QnV0dG9uKSB7CkBAIC0yMzYsMjIgKzI2NiwyMiBAQCBXZWJTZWFy
Y2hhYmxlRm9ybURhdGE6OldlYlNlYXJjaGFibGVGb3JtCiAgICAgICAgIC8vIG5hbWUgb2YgdGhl
IHN1Ym1pdCBidXR0b24uCiAgICAgICAgIGZpcnN0U3VibWl0QnV0dG9uLT5zZXRBY3RpdmF0ZWRT
dWJtaXQodHJ1ZSk7CiAgICAgfQotICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkU3RyaW5nOwotICAg
IFN0cmluZyBlbmNvZGluZzsKLSAgICBib29sIGhhc0VsZW1lbnQgPSBIYXNTdWl0YWJsZVRleHRF
bGVtZW50KGZvcm1FbGVtZW50LmdldCgpLCAmZW5jb2RlZFN0cmluZywgJmVuY29kaW5nKTsKKwor
ICAgIGJvb2wgdmFsaWRTZWFyY2hTdHJpbmcgPSBCdWlsZFNlYXJjaFN0cmluZyhmb3JtRWxlbWVu
dC5nZXQoKSwgJmVuY29kZWRTdHJpbmcsICZlbmNvZGluZywgc2VsZWN0ZWRJbnB1dEVsZW1lbnQp
OworCiAgICAgaWYgKGZpcnN0U3VibWl0QnV0dG9uKQogICAgICAgICBmaXJzdFN1Ym1pdEJ1dHRv
bi0+c2V0QWN0aXZhdGVkU3VibWl0KGZhbHNlKTsKLSAgICBpZiAoIWhhc0VsZW1lbnQpIHsKLSAg
ICAgICAgLy8gTm90IGEgc2VhcmNoYWJsZSBmb3JtLgorCisgICAgLy8gUmV0dXJuIGlmIHRoZSBz
ZWFyY2ggc3RyaW5nIGlzIG5vdCB2YWxpZC4gCisgICAgaWYgKCF2YWxpZFNlYXJjaFN0cmluZykK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIFN0cmluZyBhY3Rpb24oZm9ybUVsZW1lbnQt
PmFjdGlvbigpKTsKICAgICBLVVJMIHVybChmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKGFj
dGlvbi5pc051bGwoKSA/ICIiIDogYWN0aW9uKSk7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiBmb3Jt
RGF0YSA9IEZvcm1EYXRhOjpjcmVhdGUoZW5jb2RlZFN0cmluZyk7CiAgICAgdXJsLnNldFF1ZXJ5
KGZvcm1EYXRhLT5mbGF0dGVuVG9TdHJpbmcoKSk7CiAgICAgbV91cmwgPSB1cmw7Ci0gICAgbV9l
bmNvZGluZyA9IGVuY29kaW5nOworICAgIG1fZW5jb2RpbmcgPSAoU3RyaW5nKSBlbmNvZGluZy5u
YW1lKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="62936"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90924</attachid>
            <date>2011-04-25 10:13:57 -0700</date>
            <delta_ts>2011-04-25 10:53:05 -0700</delta_ts>
            <desc>Proposed Patch V7</desc>
            <filename>kw7.txt</filename>
            <type>text/plain</type>
            <size>13947</size>
            <attacher>philippe.beauchamp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4NDc4MCkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTEtMDQtMjUgIFBoaWxpcHBlIEJlYXVjaGFtcCAgPHBoaWxpcHBlLmJlYXVjaGFtcEBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHRoZSBmZWF0dXJlICJBZGQgYXMgc2VhcmNoIGVuZ2luZS4uLiIgaW4gc2VhcmNoIHRl
eHQgZmllbGQgY29udGV4dCBtZW51LgorCisgICAgICAgICogcHVibGljL1dlYkNvbnRleHRNZW51
RGF0YS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaDoKKyAgICAg
ICAgKiBzcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29u
dGV4dE1lbnVDbGllbnRJbXBsOjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6CisgICAg
ICAgICogc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHA6CisgICAgICAgIChmaW5kU3VpdGFi
bGVTZWFyY2hJbnB1dEVsZW1lbnQpOgorICAgICAgICAoYnVpbGRTZWFyY2hTdHJpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTZWFyY2hhYmxlRm9ybURhdGE6OldlYlNlYXJjaGFibGVGb3JtRGF0
YSk6CisKIDIwMTEtMDQtMjIgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgJKHJldmlz
aW9uIDg0Njg1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGV4dE1l
bnVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDEwIEBAIHN0cnVjdCBXZWJDb250
ZXh0TWVudURhdGEgewogICAgIC8vIFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhlIHBhZ2UgaW4gY29u
dGV4dC4KICAgICBXZWJVUkwgcGFnZVVSTDsKIAorICAgIC8vIFRoZSBhYnNvbHV0ZSBrZXl3b3Jk
IHNlYXJjaCBVUkwgaW5jbHVkaW5nIHRoZSAlcyBzZWFyY2ggdGFnIHdoZW4gdGhlCisgICAgLy8g
IkFkZCBhcyBzZWFyY2ggZW5naW5lLi4uIiBvcHRpb24gaXMgY2xpY2tlZCAobGVmdCBlbXB0eSBp
ZiBub3QgdXNlZCkuCisgICAgV2ViVVJMIGtleXdvcmRVUkw7CisKICAgICAvLyBUaGUgYWJzb2x1
dGUgVVJMIG9mIHRoZSBzdWJmcmFtZSBpbiBjb250ZXh0LgogICAgIFdlYlVSTCBmcmFtZVVSTDsK
IApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2VhcmNoYWJsZUZvcm1E
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2Vh
cmNoYWJsZUZvcm1EYXRhLmgJKHJldmlzaW9uIDg0Njg1KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldlYlVSTC5o
IgorI2luY2x1ZGUgIldlYklucHV0RWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNs
YXNzIFdlYkZvcm1FbGVtZW50OwpAQCAtNDMsNyArNDQsNyBAQCBjbGFzcyBXZWJTZWFyY2hhYmxl
Rm9ybURhdGEgewogcHVibGljOgogICAgIC8vIElmIHRoZSBwcm92aWRlZCBmb3JtIGlzIHN1aXRh
YmxlIGZvciBhdXRvbWF0ZWQgc2VhcmNoaW5nLCBpc1ZhbGlkKCkKICAgICAvLyB3aWxsIHJldHVy
biBmYWxzZS4KLSAgICBXRUJLSVRfQVBJIFdlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJG
b3JtRWxlbWVudCYpOworICAgIFdFQktJVF9BUEkgV2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0
IFdlYkZvcm1FbGVtZW50JiwgY29uc3QgV2ViSW5wdXRFbGVtZW50JiBzZWxlY3RlZElucHV0RWxl
bWVudD1XZWJJbnB1dEVsZW1lbnQoKSk7CiAKICAgICBib29sIGlzVmFsaWQoKSB7IHJldHVybiBt
X3VybC5pc1ZhbGlkKCk7IH0KIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ29u
dGV4dE1lbnVDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCShyZXZpc2lvbiA4NDY4NSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRl
ICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCIKQEAgLTU2LDExICs1OCwxMyBAQAogCiAjaW5j
bHVkZSAiV2ViQ29udGV4dE1lbnVEYXRhLmgiCiAjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZUltcGwu
aCIKKyNpbmNsdWRlICJXZWJGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5o
IgogI2luY2x1ZGUgIldlYk1lbnVJdGVtSW5mby5oIgogI2luY2x1ZGUgIldlYlBsdWdpbi5oIgog
I2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIKICNpbmNsdWRlICJXZWJQb2ludC5o
IgorI2luY2x1ZGUgIldlYlNlYXJjaGFibGVGb3JtRGF0YS5oIgogI2luY2x1ZGUgIldlYlNwZWxs
Q2hlY2tDbGllbnQuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJVUkwu
aCIKQEAgLTI2OSw2ICsyNzMsMTUgQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1l
bnVDbGllbgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAg
ICAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBzZWxlY3RlZEZyYW1lLT5zZWxl
Y3Rpb24oKS0+Y3VycmVudEZvcm0oKTsKKyAgICAgICAgaWYgKGZvcm0gJiYgZm9ybS0+Y2hlY2tW
YWxpZGl0eSgpICYmIHIuaW5uZXJOb25TaGFyZWROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjppbnB1dFRhZykpIHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIHNl
bGVjdGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqPihy
LmlubmVyTm9uU2hhcmVkTm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQp
IHsKKyAgICAgICAgICAgICAgICBXZWJTZWFyY2hhYmxlRm9ybURhdGEgd3MgPSBXZWJTZWFyY2hh
YmxlRm9ybURhdGEoV2ViRm9ybUVsZW1lbnQoZm9ybSksIFdlYklucHV0RWxlbWVudChzZWxlY3Rl
ZEVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICBpZiAod3MudXJsKCkuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgICAgICAgICBkYXRhLmtleXdvcmRVUkwgPSB3cy51cmwoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQogICAgIH0KIAogI2lmIE9TKERBUldJTikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAkocmV2
aXNpb24gODQ2ODUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxl
Rm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAi
SFRNTFNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRl
ICJXZWJGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIldlYklucHV0RWxlbWVudC5oIgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC0xNDEs
OTkgKzE0MiwxMzYgQEAgYm9vbCBJc0luRGVmYXVsdFN0YXRlKGNvbnN0IEhUTUxGb3JtQ29udAog
ICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBJZiBmb3JtIGhhcyBvbmx5IG9uZSB0ZXh0IGlucHV0
IGVsZW1lbnQsIHJldHVybiB0cnVlLiBJZiBhIHZhbGlkIGlucHV0Ci0vLyBlbGVtZW50IGlzIG5v
dCBmb3VuZCwgcmV0dXJuIGZhbHNlLiBBZGRpdGlvbmFsbHksIHRoZSBmb3JtIGRhdGEgZm9yIGFs
bAotLy8gZWxlbWVudHMgaXMgYWRkZWQgdG8gZW5jX3N0cmluZyBhbmQgdGhlIGVuY29kaW5nIHVz
ZWQgaXMgc2V0IGluCi0vLyBlbmNvZGluZ19uYW1lLgotYm9vbCBIYXNTdWl0YWJsZVRleHRFbGVt
ZW50KGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwgVmVjdG9yPGNoYXI+KiBlbmNvZGVkU3Ry
aW5nLCBTdHJpbmcqIGVuY29kaW5nTmFtZSkKKy8vIExvb2sgZm9yIGEgc3VpdGFibGUgc2VhcmNo
IHRleHQgZmllbGQgaW4gYSBnaXZlbiBIVE1MRm9ybUVsZW1lbnQgCisvLyBSZXR1cm4gbm90aGlu
ZyBpZiBvbmUgb2YgdGhvc2UgaXRlbXMgYXJlIGZvdW5kOgorLy8gIC0gQSB0ZXh0IGFyZWEgZmll
bGQKKy8vICAtIEEgZmlsZSB1cGxvYWQgZmllbGQgCisvLyAgLSBBIFBhc3N3b3JkIGZpZWxkCisv
LyAgLSBNb3JlIHRoYW4gb25lIHRleHQgZmllbGQKK1dlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQq
IGZpbmRTdWl0YWJsZVNlYXJjaElucHV0RWxlbWVudChjb25zdCBIVE1MRm9ybUVsZW1lbnQqIGZv
cm0pCiB7Ci0gICAgVGV4dEVuY29kaW5nIGVuY29kaW5nOwotICAgIEdldEZvcm1FbmNvZGluZyhm
b3JtLCAmZW5jb2RpbmcpOwotICAgIGlmICghZW5jb2RpbmcuaXNWYWxpZCgpKSB7Ci0gICAgICAg
IC8vIE5lZWQgYSB2YWxpZCBlbmNvZGluZyB0byBlbmNvZGUgdGhlIGZvcm0gZWxlbWVudHMuCi0g
ICAgICAgIC8vIElmIHRoZSBlbmNvZGluZyBpc24ndCBmb3VuZCB3ZWJraXQgZW5kcyB1cCByZXBs
YWNpbmcgdGhlIHBhcmFtcyB3aXRoCi0gICAgICAgIC8vIGVtcHR5IHN0cmluZ3MuIFNvLCB3ZSBk
b24ndCB0cnkgdG8gZG8gYW55dGhpbmcgaGVyZS4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgICplbmNvZGluZ05hbWUgPSBlbmNvZGluZy5uYW1lKCk7Ci0KICAgICBIVE1MSW5wdXRFbGVt
ZW50KiB0ZXh0RWxlbWVudCA9IDA7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHJlZmFjdG9yaW5n
IHRoaXMgY29kZSBzbyB0aGF0IHdlIGRvbid0IGNhbGwgZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRz
KCkgdHdpY2UuCiAgICAgZm9yIChWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj46OmNvbnN0
X2l0ZXJhdG9yIGkoZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuYmVnaW4oKSk7IGkgIT0gZm9y
bS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuZW5kKCk7ICsraSkgewogICAgICAgICBpZiAoISgqaSkt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQqPigqaSk7CisKICAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5kaXNh
YmxlZCgpIHx8IGZvcm1FbGVtZW50LT5uYW1lKCkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAorICAgICAgICAvLyBSZXR1cm4gbm90aGluZyBpZiBhbiBlbGVtZW50IGlzIG5vdCBp
biB0aGUgZGVmYXVsdCBzdGF0ZQorICAgICAgICAvLyBSZXR1cm4gbm90aGluZyBpZiBhIHRleHQg
YXJlYSBpcyBmb3VuZC4KICAgICAgICAgaWYgKCFJc0luRGVmYXVsdFN0YXRlKGZvcm1FbGVtZW50
KSB8fCBmb3JtRWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRleHRhcmVhVGFnKSkKICAg
ICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIGJvb2wgaXNUZXh0RWxlbWVudCA9IGZhbHNl
OwotICAgICAgICBpZiAoZm9ybUVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRh
ZykpIHsKKyAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5w
dXRUYWcpICYmIGZvcm1FbGVtZW50LT53aWxsVmFsaWRhdGUoKSkgewogICAgICAgICAgICAgY29u
c3QgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MSW5wdXRF
bGVtZW50Kj4oZm9ybUVsZW1lbnQpOwotICAgICAgICAgICAgaWYgKGlucHV0LT5pc0ZpbGVVcGxv
YWQoKSkgewotICAgICAgICAgICAgICAgIC8vIFRvbyBiaWcsIGRvbid0IHRyeSB0byBpbmRleCB0
aGlzLgotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAoaW5wdXQtPmlzUGFzc3dvcmRGaWVsZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
RG9uJ3Qgc3RvcmUgcGFzc3dvcmRzISBUaGlzIGlzIG1vc3QgbGlrZWx5IGFuIGh0dHBzIGFueXdh
eS4KKyAgICAgICAgICAgIC8vIFJldHVybiBub3RoaW5nIGlmIGEgZmlsZSB1cGxvYWQgZmllbGQg
b3IgYSBwYXNzd29yZCBmaWVsZCBhcmUgZm91bmQuCisgICAgICAgICAgICBpZiAoaW5wdXQtPmlz
RmlsZVVwbG9hZCgpIHx8IGlucHV0LT5pc1Bhc3N3b3JkRmllbGQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKworICAgICAgICAgICAgaWYgKGlucHV0LT5pc1RleHRGaWVsZCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHRleHRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFRoZSBhdXRvLWNvbXBsZXRlIGJhciBvbmx5IGtub3dzIGhvdyB0byBmaWxsIGluIG9uZSB2YWx1
ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmb3JtIGhhcyBtdWx0aXBsZSBmaWVsZHM7
IGRvbid0IHRyZWF0IGl0IGFzIHNlYXJjaGFibGUuCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXh0RWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCk7CiAgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRleHRFbGVtZW50OworfQogCi0gICAgICAg
ICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgICAgICAgICAgaXNUZXh0RWxl
bWVudCA9IHRydWU7Ci0gICAgICB9CisvLyBCdWlsZCBhIHNlYXJjaCBzdHJpbmcgYmFzZWQgb24g
YSBnaXZlbiBIVE1MRm9ybUVsZW1lbnQgYW5kIEhUTUxJbnB1dEVsZW1lbnQKKy8vIAorLy8gU2Vh
cmNoIHN0cmluZyBvdXRwdXQgZXhhbXBsZSBmcm9tIHd3dy5nb29nbGUuY29tOgorLy8gImhsPWVu
JnNvdXJjZT1ocCZiaXc9MTA4NSZiaWg9ODU0JnE9e3NlYXJjaFRlcm1zfSZidG5HPUdvb2dsZStT
ZWFyY2gmYXE9ZiZhcWk9JmFxbD0mb3E9JmdzX3JmYWk9/yIKKy8vIAorLy8gUmV0dXJuIGZhbHNl
IGlmIHRoZSBwcm92aWRlZCBIVE1MSW5wdXRFbGVtZW50IGlzIG5vdCBmb3VuZCBpbiB0aGUgZm9y
bQorYm9vbCBidWlsZFNlYXJjaFN0cmluZyhjb25zdCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIFZl
Y3RvcjxjaGFyPiogZW5jb2RlZFN0cmluZywgVGV4dEVuY29kaW5nKiBlbmNvZGluZywgY29uc3Qg
SFRNTElucHV0RWxlbWVudCogdGV4dEVsZW1lbnQpCit7CisgICAgYm9vbCBpc0VsZW1lbnRGb3Vu
ZCA9IGZhbHNlOyAgIAogCi0gICAgICBGb3JtRGF0YUxpc3QgZGF0YUxpc3QoZW5jb2RpbmcpOwot
ICAgICAgaWYgKCFmb3JtRWxlbWVudC0+YXBwZW5kRm9ybURhdGEoZGF0YUxpc3QsIGZhbHNlKSkK
LSAgICAgICAgICBjb250aW51ZTsKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgcmVmYWN0b3Jpbmcg
dGhpcyBjb2RlIHNvIHRoYXQgd2UgZG9uJ3QgY2FsbCBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMo
KSB0d2ljZS4KKyAgICBmb3IgKFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPjo6Y29uc3Rf
aXRlcmF0b3IgaShmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5iZWdpbigpKTsgaSAhPSBmb3Jt
LT5hc3NvY2lhdGVkRWxlbWVudHMoKS5lbmQoKTsgKytpKSB7CisgICAgICAgIGlmICghKCppKS0+
aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICBj
b25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYgaXRlbXMgPSBkYXRhTGlzdC5pdGVtcygp
OwotICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYgIWl0ZW1zLmlzRW1wdHkoKSkgewotICAgICAg
ICAgIGlmICh0ZXh0RWxlbWVudCkgewotICAgICAgICAgICAgICAvLyBUaGUgYXV0by1jb21wbGV0
ZSBiYXIgb25seSBrbm93cyBob3cgdG8gZmlsbCBpbiBvbmUgdmFsdWUuCi0gICAgICAgICAgICAg
IC8vIFRoaXMgZm9ybSBoYXMgbXVsdGlwbGUgZmllbGRzOyBkb24ndCB0cmVhdCBpdCBhcyBzZWFy
Y2hhYmxlLgotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGZvcm1FbGVt
ZW50KTsKLSAgICAgIH0KLSAgICAgIGZvciAoVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT46OmNv
bnN0X2l0ZXJhdG9yIGooaXRlbXMuYmVnaW4oKSk7IGogIT0gaXRlbXMuZW5kKCk7ICsraikgewot
ICAgICAgICAgIC8vIEhhbmRsZSBJU0lOREVYIC8gPGlucHV0IG5hbWU9aXNpbmRleD4gc3BlY2lh
bGx5LCBidXQgb25seSBpZiBpdCdzCi0gICAgICAgICAgLy8gdGhlIGZpcnN0IGVudHJ5LgotICAg
ICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgpIHx8IGotPmRhdGEoKSAhPSAiaXNp
bmRleCIpIHsKLSAgICAgICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAg
ICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5n
LCBqLT5kYXRhKCkpOwotICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJz0nKTsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgKytqOwotICAgICAgICAgIGlmIChmb3JtRWxlbWVudCA9
PSB0ZXh0RWxlbWVudCkKLSAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCJ7c2Vh
cmNoVGVybXN9IiwgMTMpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgRm9ybURhdGFC
dWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkp
OwotICAgICAgfQotICAgIH0KKyAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9ybUVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oKmkpOwogCi0gICAg
cmV0dXJuIHRleHRFbGVtZW50OwotfQorICAgICAgICBpZiAoZm9ybUVsZW1lbnQtPmRpc2FibGVk
KCkgfHwgZm9ybUVsZW1lbnQtPm5hbWUoKS5pc051bGwoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OwogCisgICAgICAgIEZvcm1EYXRhTGlzdCBkYXRhTGlzdCgqZW5jb2RpbmcpOworICAgICAgICBp
ZiAoIWZvcm1FbGVtZW50LT5hcHBlbmRGb3JtRGF0YShkYXRhTGlzdCwgZmFsc2UpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRl
bT4mIGl0ZW1zID0gZGF0YUxpc3QuaXRlbXMoKTsKKworICAgICAgICBmb3IgKFZlY3RvcjxGb3Jt
RGF0YUxpc3Q6Okl0ZW0+Ojpjb25zdF9pdGVyYXRvciBqKGl0ZW1zLmJlZ2luKCkpOyBqICE9IGl0
ZW1zLmVuZCgpOyArK2opIHsKKyAgICAgICAgICAgIC8vIEhhbmRsZSBJU0lOREVYIC8gPGlucHV0
IG5hbWU9aXNpbmRleD4gc3BlY2lhbGx5LCBidXQgb25seSBpZiBpdCdzCisgICAgICAgICAgICAv
LyB0aGUgZmlyc3QgZW50cnkuCisgICAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1w
dHkoKSB8fCBqLT5kYXRhKCkgIT0gImlzaW5kZXgiKSB7CisgICAgICAgICAgICAgICAgaWYgKCFl
bmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGVuY29kZWRTdHJp
bmctPmFwcGVuZCgnJicpOworICAgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2Rl
U3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywgai0+ZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJz0nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICsrajsKKyAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudCA9PSB0ZXh0RWxlbWVudCkgewor
ICAgICAgICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgie3NlYXJjaFRlcm1zfSIsIDEz
KTsKKyAgICAgICAgICAgICAgICBpc0VsZW1lbnRGb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNG
b3JtRGF0YSgqZW5jb2RlZFN0cmluZywgai0+ZGF0YSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gaXNFbGVtZW50Rm91bmQ7Cit9CiB9IC8vIG5hbWVzcGFj
ZQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViU2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFy
Y2hhYmxlRm9ybURhdGEoY29uc3QgV2ViRm9ybUVsZW1lbnQmIGZvcm0pCitXZWJTZWFyY2hhYmxl
Rm9ybURhdGE6OldlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYgZm9y
bSwgY29uc3QgV2ViSW5wdXRFbGVtZW50JiBzZWxlY3RlZElucHV0RWxlbWVudCkKIHsKICAgICBS
ZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBmb3JtRWxlbWVudCA9IGZvcm0ub3BlcmF0b3IgUGFzc1Jl
ZlB0cjxIVE1MRm9ybUVsZW1lbnQ+KCk7CiAgICAgY29uc3QgRnJhbWUqIGZyYW1lID0gZm9ybUVs
ZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgLy8gT25seSBjb25zaWRlciBmb3JtcyB0aGF0IEdFVCBkYXRhIGFuZCB0aGUg
YWN0aW9uIHRhcmdldHMgYW4gaHR0cCBwYWdlLgotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShm
b3JtRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bWV0aG9kQXR0ciksICJwb3N0Iikg
fHwgIUlzSFRUUEZvcm1TdWJtaXQoZm9ybUVsZW1lbnQuZ2V0KCkpKQorICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0RWxlbWVudCA9IHNlbGVjdGVkSW5wdXRFbGVtZW50Lm9wZXJhdG9yIFBhc3NS
ZWZQdHI8SFRNTElucHV0RWxlbWVudD4oKS5nZXQoKTsKKworICAgIC8vIE9ubHkgY29uc2lkZXIg
Zm9ybXMgdGhhdCBHRVQgZGF0YS4KKyAgICAvLyBBbGxvdyBIVFRQUyBvbmx5IHdoZW4gYW4gaW5w
dXQgZWxlbWVudCBpcyBwcm92aWRlZC4gCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZvcm1F
bGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjptZXRob2RBdHRyKSwgInBvc3QiKSAKKyAg
ICAgICAgfHwgKCFJc0hUVFBGb3JtU3VibWl0KGZvcm1FbGVtZW50LmdldCgpKSAmJiAhaW5wdXRF
bGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgVmVjdG9yPGNoYXI+IGVuY29kZWRTdHJp
bmc7CisgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nOworCisgICAgR2V0Rm9ybUVuY29kaW5nKGZv
cm1FbGVtZW50LmdldCgpLCAmZW5jb2RpbmcpOworICAgIGlmICghZW5jb2RpbmcuaXNWYWxpZCgp
KSB7CisgICAgICAgIC8vIE5lZWQgYSB2YWxpZCBlbmNvZGluZyB0byBlbmNvZGUgdGhlIGZvcm0g
ZWxlbWVudHMuCisgICAgICAgIC8vIElmIHRoZSBlbmNvZGluZyBpc24ndCBmb3VuZCB3ZWJraXQg
ZW5kcyB1cCByZXBsYWNpbmcgdGhlIHBhcmFtcyB3aXRoCisgICAgICAgIC8vIGVtcHR5IHN0cmlu
Z3MuIFNvLCB3ZSBkb24ndCB0cnkgdG8gZG8gYW55dGhpbmcgaGVyZS4KKyAgICAgICAgcmV0dXJu
OworICAgIH0gCisKKyAgICAvLyBMb29rIGZvciBhIHN1aXRhYmxlIHNlYXJjaCB0ZXh0IGZpZWxk
IGluIHRoZSBmb3JtIHdoZW4gYSAKKyAgICAvLyBzZWxlY3RlZElucHV0RWxlbWVudCBpcyBub3Qg
cHJvdmlkZWQuCisgICAgaWYgKCFpbnB1dEVsZW1lbnQpIHsKKyAgICAgICAgaW5wdXRFbGVtZW50
ID0gZmluZFN1aXRhYmxlU2VhcmNoSW5wdXRFbGVtZW50KGZvcm1FbGVtZW50LmdldCgpKTsKKwor
ICAgICAgICAvLyBSZXR1cm4gaWYgbm8gc3VpdGFibGUgdGV4dCBlbGVtZW50IGhhcyBiZWVuIGZv
dW5kLgorICAgICAgICBpZiAoIWlucHV0RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmaXJzdFN1Ym1pdEJ1dHRvbiA9IEdl
dEJ1dHRvblRvQWN0aXZhdGUoZm9ybUVsZW1lbnQuZ2V0KCkpOwogICAgIGlmIChmaXJzdFN1Ym1p
dEJ1dHRvbikgewogICAgICAgICAvLyBUaGUgZm9ybSBkb2VzIG5vdCBoYXZlIGFuIGFjdGl2ZSBz
dWJtaXQgYnV0dG9uLCBtYWtlIHRoZSBmaXJzdCBidXR0b24KQEAgLTI0MSwyMiArMjc5LDIyIEBA
IFdlYlNlYXJjaGFibGVGb3JtRGF0YTo6V2ViU2VhcmNoYWJsZUZvcm0KICAgICAgICAgLy8gbmFt
ZSBvZiB0aGUgc3VibWl0IGJ1dHRvbi4KICAgICAgICAgZmlyc3RTdWJtaXRCdXR0b24tPnNldEFj
dGl2YXRlZFN1Ym1pdCh0cnVlKTsKICAgICB9Ci0gICAgVmVjdG9yPGNoYXI+IGVuY29kZWRTdHJp
bmc7Ci0gICAgU3RyaW5nIGVuY29kaW5nOwotICAgIGJvb2wgaGFzRWxlbWVudCA9IEhhc1N1aXRh
YmxlVGV4dEVsZW1lbnQoZm9ybUVsZW1lbnQuZ2V0KCksICZlbmNvZGVkU3RyaW5nLCAmZW5jb2Rp
bmcpOworCisgICAgYm9vbCBpc1ZhbGlkU2VhcmNoU3RyaW5nID0gYnVpbGRTZWFyY2hTdHJpbmco
Zm9ybUVsZW1lbnQuZ2V0KCksICZlbmNvZGVkU3RyaW5nLCAmZW5jb2RpbmcsIGlucHV0RWxlbWVu
dCk7CisKICAgICBpZiAoZmlyc3RTdWJtaXRCdXR0b24pCiAgICAgICAgIGZpcnN0U3VibWl0QnV0
dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQoZmFsc2UpOwotICAgIGlmICghaGFzRWxlbWVudCkgewot
ICAgICAgICAvLyBOb3QgYSBzZWFyY2hhYmxlIGZvcm0uCisKKyAgICAvLyBSZXR1cm4gaWYgdGhl
IHNlYXJjaCBzdHJpbmcgaXMgbm90IHZhbGlkLiAKKyAgICBpZiAoIWlzVmFsaWRTZWFyY2hTdHJp
bmcpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBTdHJpbmcgYWN0aW9uKGZvcm1FbGVt
ZW50LT5hY3Rpb24oKSk7CiAgICAgS1VSTCB1cmwoZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVS
TChhY3Rpb24uaXNOdWxsKCkgPyAiIiA6IGFjdGlvbikpOwogICAgIFJlZlB0cjxGb3JtRGF0YT4g
Zm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlKGVuY29kZWRTdHJpbmcpOwogICAgIHVybC5zZXRR
dWVyeShmb3JtRGF0YS0+ZmxhdHRlblRvU3RyaW5nKCkpOwogICAgIG1fdXJsID0gdXJsOwotICAg
IG1fZW5jb2RpbmcgPSBlbmNvZGluZzsKKyAgICBtX2VuY29kaW5nID0gU3RyaW5nKGVuY29kaW5n
Lm5hbWUoKSk7IAogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90932</attachid>
            <date>2011-04-25 10:53:05 -0700</date>
            <delta_ts>2011-05-16 20:26:36 -0700</delta_ts>
            <desc>Proposed Patch V7</desc>
            <filename>kw7-2.txt</filename>
            <type>text/plain</type>
            <size>14014</size>
            <attacher>philippe.beauchamp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4NDc4NCkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTEtMDQtMjUgIFBoaWxpcHBlIEJlYXVjaGFtcCAgPHBoaWxpcHBlLmJlYXVjaGFtcEBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHRoZSBmZWF0dXJlICJBZGQgYXMgc2VhcmNoIGVuZ2luZS4uLiIgaW4gYSBzZWFyY2gg
dGV4dCBmaWVsZCBjb250ZXh0IG1lbnUgZm9yIGNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk4MAorCisgICAgICAgICogcHVibGljL1dl
YkNvbnRleHRNZW51RGF0YS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURh
dGEuaDoKKyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJ
dGVtcyk6CisgICAgICAgICogc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHA6CisgICAgICAg
IChmaW5kU3VpdGFibGVTZWFyY2hJbnB1dEVsZW1lbnQpOgorICAgICAgICAoYnVpbGRTZWFyY2hT
dHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZWFyY2hhYmxlRm9ybURhdGE6OldlYlNlYXJj
aGFibGVGb3JtRGF0YSk6CisKIDIwMTEtMDQtMjIgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGV4dE1lbnVE
YXRhLmgJKHJldmlzaW9uIDg0Njg1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViQ29udGV4dE1lbnVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDEwIEBAIHN0
cnVjdCBXZWJDb250ZXh0TWVudURhdGEgewogICAgIC8vIFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhl
IHBhZ2UgaW4gY29udGV4dC4KICAgICBXZWJVUkwgcGFnZVVSTDsKIAorICAgIC8vIFRoZSBhYnNv
bHV0ZSBrZXl3b3JkIHNlYXJjaCBVUkwgaW5jbHVkaW5nIHRoZSAlcyBzZWFyY2ggdGFnIHdoZW4g
dGhlCisgICAgLy8gIkFkZCBhcyBzZWFyY2ggZW5naW5lLi4uIiBvcHRpb24gaXMgY2xpY2tlZCAo
bGVmdCBlbXB0eSBpZiBub3QgdXNlZCkuCisgICAgV2ViVVJMIGtleXdvcmRVUkw7CisKICAgICAv
LyBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBzdWJmcmFtZSBpbiBjb250ZXh0LgogICAgIFdlYlVS
TCBmcmFtZVVSTDsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2Vh
cmNoYWJsZUZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgJKHJldmlzaW9uIDg0Njg1KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZm5kZWYgV2ViU2VhcmNoYWJsZUZvcm1EYXRhX2gK
ICNkZWZpbmUgV2ViU2VhcmNoYWJsZUZvcm1EYXRhX2gKIAorI2luY2x1ZGUgIldlYklucHV0RWxl
bWVudC5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldlYlVSTC5oIgogCkBA
IC00Myw3ICs0NCw3IEBAIGNsYXNzIFdlYlNlYXJjaGFibGVGb3JtRGF0YSB7CiBwdWJsaWM6CiAg
ICAgLy8gSWYgdGhlIHByb3ZpZGVkIGZvcm0gaXMgc3VpdGFibGUgZm9yIGF1dG9tYXRlZCBzZWFy
Y2hpbmcsIGlzVmFsaWQoKQogICAgIC8vIHdpbGwgcmV0dXJuIGZhbHNlLgotICAgIFdFQktJVF9B
UEkgV2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50Jik7CisgICAgV0VC
S0lUX0FQSSBXZWJTZWFyY2hhYmxlRm9ybURhdGEoY29uc3QgV2ViRm9ybUVsZW1lbnQmLCBjb25z
dCBXZWJJbnB1dEVsZW1lbnQmIHNlbGVjdGVkSW5wdXRFbGVtZW50ID0gV2ViSW5wdXRFbGVtZW50
KCkpOwogCiAgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gbV91cmwuaXNWYWxpZCgpOyB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmNwcAkocmV2aXNpb24gODQ2ODUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0
Myw4IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50LmgiCkBAIC01NiwxMSArNTgsMTMgQEAKIAogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51
RGF0YS5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2VJbXBsLmgiCisjaW5jbHVkZSAiV2ViRm9y
bUVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKICNpbmNsdWRlICJXZWJNZW51
SXRlbUluZm8uaCIKICNpbmNsdWRlICJXZWJQbHVnaW4uaCIKICNpbmNsdWRlICJXZWJQbHVnaW5D
b250YWluZXJJbXBsLmgiCiAjaW5jbHVkZSAiV2ViUG9pbnQuaCIKKyNpbmNsdWRlICJXZWJTZWFy
Y2hhYmxlRm9ybURhdGEuaCIKICNpbmNsdWRlICJXZWJTcGVsbENoZWNrQ2xpZW50LmgiCiAjaW5j
bHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCkBAIC0yNjksNiArMjczLDE1
IEBAIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51Q2xpZW4KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50KiBmb3JtID0gc2VsZWN0ZWRGcmFtZS0+c2VsZWN0aW9uKCktPmN1cnJlbnRGb3Jt
KCk7CisgICAgICAgIGlmIChmb3JtICYmIGZvcm0tPmNoZWNrVmFsaWRpdHkoKSAmJiByLmlubmVy
Tm9uU2hhcmVkTm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CisgICAg
ICAgICAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBzZWxlY3RlZEVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kj4oci5pbm5lck5vblNoYXJlZE5vZGUo
KSk7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAg
V2ViU2VhcmNoYWJsZUZvcm1EYXRhIHdzID0gV2ViU2VhcmNoYWJsZUZvcm1EYXRhKFdlYkZvcm1F
bGVtZW50KGZvcm0pLCBXZWJJbnB1dEVsZW1lbnQoc2VsZWN0ZWRFbGVtZW50KSk7CisgICAgICAg
ICAgICAgICAgaWYgKHdzLnVybCgpLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0
YS5rZXl3b3JkVVJMID0gd3MudXJsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9
CiAKICNpZiBPUyhEQVJXSU4pCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZWFyY2hhYmxlRm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAJKHJldmlzaW9uIDg0Njg1KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiV2ViRm9ybUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJXZWJJbnB1dEVsZW1lbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtMTQxLDk5ICsxNDIsMTM1IEBAIGJvb2wg
SXNJbkRlZmF1bHRTdGF0ZShjb25zdCBIVE1MRm9ybUNvbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotLy8gSWYgZm9ybSBoYXMgb25seSBvbmUgdGV4dCBpbnB1dCBlbGVtZW50LCByZXR1cm4gdHJ1
ZS4gSWYgYSB2YWxpZCBpbnB1dAotLy8gZWxlbWVudCBpcyBub3QgZm91bmQsIHJldHVybiBmYWxz
ZS4gQWRkaXRpb25hbGx5LCB0aGUgZm9ybSBkYXRhIGZvciBhbGwKLS8vIGVsZW1lbnRzIGlzIGFk
ZGVkIHRvIGVuY19zdHJpbmcgYW5kIHRoZSBlbmNvZGluZyB1c2VkIGlzIHNldCBpbgotLy8gZW5j
b2RpbmdfbmFtZS4KLWJvb2wgSGFzU3VpdGFibGVUZXh0RWxlbWVudChjb25zdCBIVE1MRm9ybUVs
ZW1lbnQqIGZvcm0sIFZlY3RvcjxjaGFyPiogZW5jb2RlZFN0cmluZywgU3RyaW5nKiBlbmNvZGlu
Z05hbWUpCisvLyBMb29rIGZvciBhIHN1aXRhYmxlIHNlYXJjaCB0ZXh0IGZpZWxkIGluIGEgZ2l2
ZW4gSFRNTEZvcm1FbGVtZW50IAorLy8gUmV0dXJuIG5vdGhpbmcgaWYgb25lIG9mIHRob3NlIGl0
ZW1zIGFyZSBmb3VuZDoKKy8vICAtIEEgdGV4dCBhcmVhIGZpZWxkCisvLyAgLSBBIGZpbGUgdXBs
b2FkIGZpZWxkIAorLy8gIC0gQSBQYXNzd29yZCBmaWVsZAorLy8gIC0gTW9yZSB0aGFuIG9uZSB0
ZXh0IGZpZWxkCitXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBmaW5kU3VpdGFibGVTZWFyY2hJ
bnB1dEVsZW1lbnQoY29uc3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQogewotICAgIFRleHRFbmNv
ZGluZyBlbmNvZGluZzsKLSAgICBHZXRGb3JtRW5jb2RpbmcoZm9ybSwgJmVuY29kaW5nKTsKLSAg
ICBpZiAoIWVuY29kaW5nLmlzVmFsaWQoKSkgewotICAgICAgICAvLyBOZWVkIGEgdmFsaWQgZW5j
b2RpbmcgdG8gZW5jb2RlIHRoZSBmb3JtIGVsZW1lbnRzLgotICAgICAgICAvLyBJZiB0aGUgZW5j
b2RpbmcgaXNuJ3QgZm91bmQgd2Via2l0IGVuZHMgdXAgcmVwbGFjaW5nIHRoZSBwYXJhbXMgd2l0
aAotICAgICAgICAvLyBlbXB0eSBzdHJpbmdzLiBTbywgd2UgZG9uJ3QgdHJ5IHRvIGRvIGFueXRo
aW5nIGhlcmUuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAqZW5jb2RpbmdOYW1lID0g
ZW5jb2RpbmcubmFtZSgpOwotCiAgICAgSFRNTElucHV0RWxlbWVudCogdGV4dEVsZW1lbnQgPSAw
OwogICAgIC8vIEZJWE1FOiBDb25zaWRlciByZWZhY3RvcmluZyB0aGlzIGNvZGUgc28gdGhhdCB3
ZSBkb24ndCBjYWxsIGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpIHR3aWNlLgogICAgIGZvciAo
VmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBpKGZvcm0tPmFz
c29jaWF0ZWRFbGVtZW50cygpLmJlZ2luKCkpOyBpICE9IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50
cygpLmVuZCgpOyArK2kpIHsKICAgICAgICAgaWYgKCEoKmkpLT5pc0Zvcm1Db250cm9sRWxlbWVu
dCgpKQogICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxl
bWVudCogZm9ybUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4o
KmkpOworCiAgICAgICAgIGlmIChmb3JtRWxlbWVudC0+ZGlzYWJsZWQoKSB8fCBmb3JtRWxlbWVu
dC0+bmFtZSgpLmlzTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgLy8g
UmV0dXJuIG5vdGhpbmcgaWYgYW4gZWxlbWVudCBpcyBub3QgaW4gdGhlIGRlZmF1bHQgc3RhdGUK
KyAgICAgICAgLy8gUmV0dXJuIG5vdGhpbmcgaWYgYSB0ZXh0IGFyZWEgaXMgZm91bmQuCiAgICAg
ICAgIGlmICghSXNJbkRlZmF1bHRTdGF0ZShmb3JtRWxlbWVudCkgfHwgZm9ybUVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0ZXh0YXJlYVRhZykpCiAgICAgICAgICAgICByZXR1cm4gMDsK
IAotICAgICAgICBib29sIGlzVGV4dEVsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGZvcm1F
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CisgICAgICAgIGlmIChm
b3JtRWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSAmJiBmb3JtRWxlbWVu
dC0+d2lsbFZhbGlkYXRlKCkpIHsKICAgICAgICAgICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTElucHV0RWxlbWVudCo+KGZvcm1FbGVtZW50
KTsKLSAgICAgICAgICAgIGlmIChpbnB1dC0+aXNGaWxlVXBsb2FkKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBUb28gYmlnLCBkb24ndCB0cnkgdG8gaW5kZXggdGhpcy4KLSAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGlucHV0LT5pc1Bh
c3N3b3JkRmllbGQoKSkgewotICAgICAgICAgICAgICAgIC8vIERvbid0IHN0b3JlIHBhc3N3b3Jk
cyEgVGhpcyBpcyBtb3N0IGxpa2VseSBhbiBodHRwcyBhbnl3YXkuCisgICAgICAgICAgICAvLyBS
ZXR1cm4gbm90aGluZyBpZiBhIGZpbGUgdXBsb2FkIGZpZWxkIG9yIGEgcGFzc3dvcmQgZmllbGQg
YXJlIGZvdW5kLgorICAgICAgICAgICAgaWYgKGlucHV0LT5pc0ZpbGVVcGxvYWQoKSB8fCBpbnB1
dC0+aXNQYXNzd29yZEZpZWxkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAg
ICAgICAgIGlmIChpbnB1dC0+aXNUZXh0RmllbGQoKSkgeworICAgICAgICAgICAgICAgIGlmICh0
ZXh0RWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYXV0by1jb21wbGV0ZSBi
YXIgb25seSBrbm93cyBob3cgdG8gZmlsbCBpbiBvbmUgdmFsdWUuCisgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgZm9ybSBoYXMgbXVsdGlwbGUgZmllbGRzOyBkb24ndCB0cmVhdCBpdCBhcyBz
ZWFyY2hhYmxlLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdGV4dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50Kj4oZm9ybUVsZW1lbnQpOwogICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiB0ZXh0RWxlbWVudDsKK30KIAotICAgICAgICAgICAgaWYgKGlucHV0LT5pc1Rl
eHRGaWVsZCgpKQotICAgICAgICAgICAgICAgIGlzVGV4dEVsZW1lbnQgPSB0cnVlOwotICAgICAg
fQorLy8gQnVpbGQgYSBzZWFyY2ggc3RyaW5nIGJhc2VkIG9uIGEgZ2l2ZW4gSFRNTEZvcm1FbGVt
ZW50IGFuZCBIVE1MSW5wdXRFbGVtZW50CisvLyAKKy8vIFNlYXJjaCBzdHJpbmcgb3V0cHV0IGV4
YW1wbGUgZnJvbSB3d3cuZ29vZ2xlLmNvbToKKy8vICJobD1lbiZzb3VyY2U9aHAmYml3PTEwODUm
YmloPTg1NCZxPXtzZWFyY2hUZXJtc30mYnRuRz1Hb29nbGUrU2VhcmNoJmFxPWYmYXFpPSZhcWw9
Jm9xPSIKKy8vIAorLy8gUmV0dXJuIGZhbHNlIGlmIHRoZSBwcm92aWRlZCBIVE1MSW5wdXRFbGVt
ZW50IGlzIG5vdCBmb3VuZCBpbiB0aGUgZm9ybQorYm9vbCBidWlsZFNlYXJjaFN0cmluZyhjb25z
dCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIFZlY3RvcjxjaGFyPiogZW5jb2RlZFN0cmluZywgVGV4
dEVuY29kaW5nKiBlbmNvZGluZywgY29uc3QgSFRNTElucHV0RWxlbWVudCogdGV4dEVsZW1lbnQp
Cit7CisgICAgYm9vbCBpc0VsZW1lbnRGb3VuZCA9IGZhbHNlOyAgIAogCi0gICAgICBGb3JtRGF0
YUxpc3QgZGF0YUxpc3QoZW5jb2RpbmcpOwotICAgICAgaWYgKCFmb3JtRWxlbWVudC0+YXBwZW5k
Rm9ybURhdGEoZGF0YUxpc3QsIGZhbHNlKSkKLSAgICAgICAgICBjb250aW51ZTsKKyAgICAvLyBG
SVhNRTogQ29uc2lkZXIgcmVmYWN0b3JpbmcgdGhpcyBjb2RlIHNvIHRoYXQgd2UgZG9uJ3QgY2Fs
bCBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKSB0d2ljZS4KKyAgICBmb3IgKFZlY3RvcjxGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgaShmb3JtLT5hc3NvY2lhdGVkRWxl
bWVudHMoKS5iZWdpbigpKTsgaSAhPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5lbmQoKTsg
KytpKSB7CisgICAgICAgIGlmICghKCppKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVt
PiYgaXRlbXMgPSBkYXRhTGlzdC5pdGVtcygpOwotICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYg
IWl0ZW1zLmlzRW1wdHkoKSkgewotICAgICAgICAgIGlmICh0ZXh0RWxlbWVudCkgewotICAgICAg
ICAgICAgICAvLyBUaGUgYXV0by1jb21wbGV0ZSBiYXIgb25seSBrbm93cyBob3cgdG8gZmlsbCBp
biBvbmUgdmFsdWUuCi0gICAgICAgICAgICAgIC8vIFRoaXMgZm9ybSBoYXMgbXVsdGlwbGUgZmll
bGRzOyBkb24ndCB0cmVhdCBpdCBhcyBzZWFyY2hhYmxlLgotICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KGZvcm1FbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIGZvciAoVmVj
dG9yPEZvcm1EYXRhTGlzdDo6SXRlbT46OmNvbnN0X2l0ZXJhdG9yIGooaXRlbXMuYmVnaW4oKSk7
IGogIT0gaXRlbXMuZW5kKCk7ICsraikgewotICAgICAgICAgIC8vIEhhbmRsZSBJU0lOREVYIC8g
PGlucHV0IG5hbWU9aXNpbmRleD4gc3BlY2lhbGx5LCBidXQgb25seSBpZiBpdCdzCi0gICAgICAg
ICAgLy8gdGhlIGZpcnN0IGVudHJ5LgotICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNF
bXB0eSgpIHx8IGotPmRhdGEoKSAhPSAiaXNpbmRleCIpIHsKLSAgICAgICAgICAgICAgaWYgKCFl
bmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5n
LT5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJp
bmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOwotICAgICAgICAgICAgICBl
bmNvZGVkU3RyaW5nLT5hcHBlbmQoJz0nKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgKytqOwot
ICAgICAgICAgIGlmIChmb3JtRWxlbWVudCA9PSB0ZXh0RWxlbWVudCkKLSAgICAgICAgICAgICAg
ZW5jb2RlZFN0cmluZy0+YXBwZW5kKCJ7c2VhcmNoVGVybXN9IiwgMTMpOwotICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRh
KCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOwotICAgICAgfQotICAgIH0KKyAgICAgICAgSFRN
TEZvcm1Db250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4oKmkpOwogCi0gICAgcmV0dXJuIHRleHRFbGVtZW50OwotfQorICAgICAg
ICBpZiAoZm9ybUVsZW1lbnQtPmRpc2FibGVkKCkgfHwgZm9ybUVsZW1lbnQtPm5hbWUoKS5pc051
bGwoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEZvcm1EYXRhTGlzdCBkYXRh
TGlzdCgqZW5jb2RpbmcpOworICAgICAgICBpZiAoIWZvcm1FbGVtZW50LT5hcHBlbmRGb3JtRGF0
YShkYXRhTGlzdCwgZmFsc2UpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29u
c3QgVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT4mIGl0ZW1zID0gZGF0YUxpc3QuaXRlbXMoKTsK
IAorICAgICAgICBmb3IgKFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+Ojpjb25zdF9pdGVyYXRv
ciBqKGl0ZW1zLmJlZ2luKCkpOyBqICE9IGl0ZW1zLmVuZCgpOyArK2opIHsKKyAgICAgICAgICAg
IC8vIEhhbmRsZSBJU0lOREVYIC8gPGlucHV0IG5hbWU9aXNpbmRleD4gc3BlY2lhbGx5LCBidXQg
b25seSBpZiBpdCdzCisgICAgICAgICAgICAvLyB0aGUgZmlyc3QgZW50cnkuCisgICAgICAgICAg
ICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSB8fCBqLT5kYXRhKCkgIT0gImlzaW5kZXgi
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgnJicpOworICAgICAgICAgICAg
ICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmlu
Zywgai0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJz0n
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrajsKKyAgICAgICAgICAgIGlmIChmb3Jt
RWxlbWVudCA9PSB0ZXh0RWxlbWVudCkgeworICAgICAgICAgICAgICAgIGVuY29kZWRTdHJpbmct
PmFwcGVuZCgie3NlYXJjaFRlcm1zfSIsIDEzKTsKKyAgICAgICAgICAgICAgICBpc0VsZW1lbnRG
b3VuZCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBGb3JtRGF0
YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEo
KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGlzRWxlbWVudEZvdW5kOworfQogfSAv
LyBuYW1lc3BhY2UKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYlNlYXJjaGFibGVGb3JtRGF0
YTo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50JiBmb3JtKQorV2Vi
U2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxlRm9ybURhdGEoY29uc3QgV2ViRm9ybUVs
ZW1lbnQmIGZvcm0sIGNvbnN0IFdlYklucHV0RWxlbWVudCYgc2VsZWN0ZWRJbnB1dEVsZW1lbnQp
CiB7CiAgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybUVsZW1lbnQgPSBmb3JtLm9wZXJh
dG9yIFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PigpOwogICAgIGNvbnN0IEZyYW1lKiBmcmFt
ZSA9IGZvcm1FbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIC8vIE9ubHkgY29uc2lkZXIgZm9ybXMgdGhhdCBHRVQgZGF0
YSBhbmQgdGhlIGFjdGlvbiB0YXJnZXRzIGFuIGh0dHAgcGFnZS4KLSAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoZm9ybUVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Om1ldGhvZEF0dHIp
LCAicG9zdCIpIHx8ICFJc0hUVFBGb3JtU3VibWl0KGZvcm1FbGVtZW50LmdldCgpKSkKKyAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBzZWxlY3RlZElucHV0RWxlbWVudC5vcGVy
YXRvciBQYXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+KCkuZ2V0KCk7CisKKyAgICAvLyBPbmx5
IGNvbnNpZGVyIGZvcm1zIHRoYXQgR0VUIGRhdGEuCisgICAgLy8gQWxsb3cgSFRUUFMgb25seSB3
aGVuIGFuIGlucHV0IGVsZW1lbnQgaXMgcHJvdmlkZWQuIAorICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShmb3JtRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bWV0aG9kQXR0ciksICJw
b3N0IikgCisgICAgICAgIHx8ICghSXNIVFRQRm9ybVN1Ym1pdChmb3JtRWxlbWVudC5nZXQoKSkg
JiYgIWlucHV0RWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFZlY3RvcjxjaGFyPiBl
bmNvZGVkU3RyaW5nOworICAgIFRleHRFbmNvZGluZyBlbmNvZGluZzsKKworICAgIEdldEZvcm1F
bmNvZGluZyhmb3JtRWxlbWVudC5nZXQoKSwgJmVuY29kaW5nKTsKKyAgICBpZiAoIWVuY29kaW5n
LmlzVmFsaWQoKSkgeworICAgICAgICAvLyBOZWVkIGEgdmFsaWQgZW5jb2RpbmcgdG8gZW5jb2Rl
IHRoZSBmb3JtIGVsZW1lbnRzLgorICAgICAgICAvLyBJZiB0aGUgZW5jb2RpbmcgaXNuJ3QgZm91
bmQgd2Via2l0IGVuZHMgdXAgcmVwbGFjaW5nIHRoZSBwYXJhbXMgd2l0aAorICAgICAgICAvLyBl
bXB0eSBzdHJpbmdzLiBTbywgd2UgZG9uJ3QgdHJ5IHRvIGRvIGFueXRoaW5nIGhlcmUuCisgICAg
ICAgIHJldHVybjsKKyAgICB9IAorCisgICAgLy8gTG9vayBmb3IgYSBzdWl0YWJsZSBzZWFyY2gg
dGV4dCBmaWVsZCBpbiB0aGUgZm9ybSB3aGVuIGEgCisgICAgLy8gc2VsZWN0ZWRJbnB1dEVsZW1l
bnQgaXMgbm90IHByb3ZpZGVkLgorICAgIGlmICghaW5wdXRFbGVtZW50KSB7CisgICAgICAgIGlu
cHV0RWxlbWVudCA9IGZpbmRTdWl0YWJsZVNlYXJjaElucHV0RWxlbWVudChmb3JtRWxlbWVudC5n
ZXQoKSk7CisKKyAgICAgICAgLy8gUmV0dXJuIGlmIG5vIHN1aXRhYmxlIHRleHQgZWxlbWVudCBo
YXMgYmVlbiBmb3VuZC4KKyAgICAgICAgaWYgKCFpbnB1dEVsZW1lbnQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZmlyc3RTdWJtaXRC
dXR0b24gPSBHZXRCdXR0b25Ub0FjdGl2YXRlKGZvcm1FbGVtZW50LmdldCgpKTsKICAgICBpZiAo
Zmlyc3RTdWJtaXRCdXR0b24pIHsKICAgICAgICAgLy8gVGhlIGZvcm0gZG9lcyBub3QgaGF2ZSBh
biBhY3RpdmUgc3VibWl0IGJ1dHRvbiwgbWFrZSB0aGUgZmlyc3QgYnV0dG9uCkBAIC0yNDEsMjIg
KzI3OCwyMiBAQCBXZWJTZWFyY2hhYmxlRm9ybURhdGE6OldlYlNlYXJjaGFibGVGb3JtCiAgICAg
ICAgIC8vIG5hbWUgb2YgdGhlIHN1Ym1pdCBidXR0b24uCiAgICAgICAgIGZpcnN0U3VibWl0QnV0
dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQodHJ1ZSk7CiAgICAgfQotICAgIFZlY3RvcjxjaGFyPiBl
bmNvZGVkU3RyaW5nOwotICAgIFN0cmluZyBlbmNvZGluZzsKLSAgICBib29sIGhhc0VsZW1lbnQg
PSBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGZvcm1FbGVtZW50LmdldCgpLCAmZW5jb2RlZFN0cmlu
ZywgJmVuY29kaW5nKTsKKworICAgIGJvb2wgaXNWYWxpZFNlYXJjaFN0cmluZyA9IGJ1aWxkU2Vh
cmNoU3RyaW5nKGZvcm1FbGVtZW50LmdldCgpLCAmZW5jb2RlZFN0cmluZywgJmVuY29kaW5nLCBp
bnB1dEVsZW1lbnQpOworCiAgICAgaWYgKGZpcnN0U3VibWl0QnV0dG9uKQogICAgICAgICBmaXJz
dFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVkU3VibWl0KGZhbHNlKTsKLSAgICBpZiAoIWhhc0Vs
ZW1lbnQpIHsKLSAgICAgICAgLy8gTm90IGEgc2VhcmNoYWJsZSBmb3JtLgorCisgICAgLy8gUmV0
dXJuIGlmIHRoZSBzZWFyY2ggc3RyaW5nIGlzIG5vdCB2YWxpZC4gCisgICAgaWYgKCFpc1ZhbGlk
U2VhcmNoU3RyaW5nKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgU3RyaW5nIGFjdGlv
bihmb3JtRWxlbWVudC0+YWN0aW9uKCkpOwogICAgIEtVUkwgdXJsKGZyYW1lLT5sb2FkZXIoKS0+
Y29tcGxldGVVUkwoYWN0aW9uLmlzTnVsbCgpID8gIiIgOiBhY3Rpb24pKTsKICAgICBSZWZQdHI8
Rm9ybURhdGE+IGZvcm1EYXRhID0gRm9ybURhdGE6OmNyZWF0ZShlbmNvZGVkU3RyaW5nKTsKICAg
ICB1cmwuc2V0UXVlcnkoZm9ybURhdGEtPmZsYXR0ZW5Ub1N0cmluZygpKTsKICAgICBtX3VybCA9
IHVybDsKLSAgICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7CisgICAgbV9lbmNvZGluZyA9IFN0cmlu
ZyhlbmNvZGluZy5uYW1lKCkpOyAKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="83698"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93734</attachid>
            <date>2011-05-16 20:26:36 -0700</date>
            <delta_ts>2011-05-19 06:27:21 -0700</delta_ts>
            <desc>Proposed Patch V8</desc>
            <filename>kw8.txt</filename>
            <type>text/plain</type>
            <size>13883</size>
            <attacher>philippe.beauchamp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4NjY1MikKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTEtMDUtMTYgIFBoaWxpcHBlIEJlYXVjaGFtcCAgPHBoaWxpcHBlLmJlYXVjaGFtcEBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHRoZSBmZWF0dXJlICJBZGQgYXMgc2VhcmNoIGVuZ2luZS4uLiIgaW4gYSBzZWFyY2gg
dGV4dCBmaWVsZCBjb250ZXh0IG1lbnUgZm9yIGNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk4MAorCisgICAgICAgICogcHVibGljL1dl
YkNvbnRleHRNZW51RGF0YS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURh
dGEuaDoKKyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJ
dGVtcyk6CisgICAgICAgICogc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHA6CisgICAgICAg
IChmaW5kU3VpdGFibGVTZWFyY2hJbnB1dEVsZW1lbnQpOgorICAgICAgICAoYnVpbGRTZWFyY2hT
dHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZWFyY2hhYmxlRm9ybURhdGE6OldlYlNlYXJj
aGFibGVGb3JtRGF0YSk6CisKIDIwMTEtMDUtMTYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURh
dGEuaAkocmV2aXNpb24gODY1MjApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJDb250ZXh0TWVudURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTAgQEAgc3Ry
dWN0IFdlYkNvbnRleHRNZW51RGF0YSB7CiAgICAgLy8gVGhlIGFic29sdXRlIFVSTCBvZiB0aGUg
cGFnZSBpbiBjb250ZXh0LgogICAgIFdlYlVSTCBwYWdlVVJMOwogCisgICAgLy8gVGhlIGFic29s
dXRlIGtleXdvcmQgc2VhcmNoIFVSTCBpbmNsdWRpbmcgdGhlICVzIHNlYXJjaCB0YWcgd2hlbiB0
aGUKKyAgICAvLyAiQWRkIGFzIHNlYXJjaCBlbmdpbmUuLi4iIG9wdGlvbiBpcyBjbGlja2VkIChs
ZWZ0IGVtcHR5IGlmIG5vdCB1c2VkKS4KKyAgICBXZWJVUkwga2V5d29yZFVSTDsKKwogICAgIC8v
IFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhlIHN1YmZyYW1lIGluIGNvbnRleHQuCiAgICAgV2ViVVJM
IGZyYW1lVVJMOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWFy
Y2hhYmxlRm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaAkocmV2aXNpb24gODY1MjApCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBXZWJTZWFyY2hhYmxlRm9ybURhdGFfaAog
I2RlZmluZSBXZWJTZWFyY2hhYmxlRm9ybURhdGFfaAogCisjaW5jbHVkZSAiV2ViSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAKQEAg
LTQzLDcgKzQ0LDcgQEAgY2xhc3MgV2ViU2VhcmNoYWJsZUZvcm1EYXRhIHsKIHB1YmxpYzoKICAg
ICAvLyBJZiB0aGUgcHJvdmlkZWQgZm9ybSBpcyBzdWl0YWJsZSBmb3IgYXV0b21hdGVkIHNlYXJj
aGluZywgaXNWYWxpZCgpCiAgICAgLy8gd2lsbCByZXR1cm4gZmFsc2UuCi0gICAgV0VCS0lUX0FQ
SSBXZWJTZWFyY2hhYmxlRm9ybURhdGEoY29uc3QgV2ViRm9ybUVsZW1lbnQmKTsKKyAgICBXRUJL
SVRfQVBJIFdlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYsIGNvbnN0
IFdlYklucHV0RWxlbWVudCYgc2VsZWN0ZWRJbnB1dEVsZW1lbnQgPSBXZWJJbnB1dEVsZW1lbnQo
KSk7CiAKICAgICBib29sIGlzVmFsaWQoKSB7IHJldHVybiBtX3VybC5pc1ZhbGlkKCk7IH0KIApJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNs
aWVudEltcGwuY3BwCShyZXZpc2lvbiA4NjUyMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQz
LDggQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgog
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuaCIKQEAgLTU2LDExICs1OCwxMyBAQAogCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVE
YXRhLmgiCiAjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZUltcGwuaCIKKyNpbmNsdWRlICJXZWJGb3Jt
RWxlbWVudC5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYk1lbnVJ
dGVtSW5mby5oIgogI2luY2x1ZGUgIldlYlBsdWdpbi5oIgogI2luY2x1ZGUgIldlYlBsdWdpbkNv
bnRhaW5lckltcGwuaCIKICNpbmNsdWRlICJXZWJQb2ludC5oIgorI2luY2x1ZGUgIldlYlNlYXJj
aGFibGVGb3JtRGF0YS5oIgogI2luY2x1ZGUgIldlYlNwZWxsQ2hlY2tDbGllbnQuaCIKICNpbmNs
dWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIKQEAgLTI2OSw2ICsyNzMsMTUg
QEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGllbgogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBXZWJDb3JlOjpIVE1MRm9y
bUVsZW1lbnQqIGZvcm0gPSBzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS0+Y3VycmVudEZvcm0o
KTsKKyAgICAgICAgaWYgKGZvcm0gJiYgZm9ybS0+Y2hlY2tWYWxpZGl0eSgpICYmIHIuaW5uZXJO
b25TaGFyZWROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsKKyAgICAg
ICAgICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIHNlbGVjdGVkRWxlbWVudCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqPihyLmlubmVyTm9uU2hhcmVkTm9kZSgp
KTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBX
ZWJTZWFyY2hhYmxlRm9ybURhdGEgd3MgPSBXZWJTZWFyY2hhYmxlRm9ybURhdGEoV2ViRm9ybUVs
ZW1lbnQoZm9ybSksIFdlYklucHV0RWxlbWVudChzZWxlY3RlZEVsZW1lbnQpKTsKKyAgICAgICAg
ICAgICAgICBpZiAod3MudXJsKCkuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBkYXRh
LmtleXdvcmRVUkwgPSB3cy51cmwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0K
IAogI2lmIE9TKERBUldJTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNl
YXJjaGFibGVGb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAkocmV2aXNpb24gODY1MjApCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJXZWJGb3JtRWxlbWVudC5oIgor
I2luY2x1ZGUgIldlYklucHV0RWxlbWVudC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC0xNDEsOTkgKzE0MiwxMzMgQEAgYm9vbCBJ
c0luRGVmYXVsdFN0YXRlKGNvbnN0IEhUTUxGb3JtQ29udAogICAgIHJldHVybiB0cnVlOwogfQog
Ci0vLyBJZiBmb3JtIGhhcyBvbmx5IG9uZSB0ZXh0IGlucHV0IGVsZW1lbnQsIHJldHVybiB0cnVl
LiBJZiBhIHZhbGlkIGlucHV0Ci0vLyBlbGVtZW50IGlzIG5vdCBmb3VuZCwgcmV0dXJuIGZhbHNl
LiBBZGRpdGlvbmFsbHksIHRoZSBmb3JtIGRhdGEgZm9yIGFsbAotLy8gZWxlbWVudHMgaXMgYWRk
ZWQgdG8gZW5jX3N0cmluZyBhbmQgdGhlIGVuY29kaW5nIHVzZWQgaXMgc2V0IGluCi0vLyBlbmNv
ZGluZ19uYW1lLgotYm9vbCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGb3JtRWxl
bWVudCogZm9ybSwgVmVjdG9yPGNoYXI+KiBlbmNvZGVkU3RyaW5nLCBTdHJpbmcqIGVuY29kaW5n
TmFtZSkKKy8vIExvb2sgZm9yIGEgc3VpdGFibGUgc2VhcmNoIHRleHQgZmllbGQgaW4gYSBnaXZl
biBIVE1MRm9ybUVsZW1lbnQgCisvLyBSZXR1cm4gbm90aGluZyBpZiBvbmUgb2YgdGhvc2UgaXRl
bXMgYXJlIGZvdW5kOgorLy8gIC0gQSB0ZXh0IGFyZWEgZmllbGQKKy8vICAtIEEgZmlsZSB1cGxv
YWQgZmllbGQgCisvLyAgLSBBIFBhc3N3b3JkIGZpZWxkCisvLyAgLSBNb3JlIHRoYW4gb25lIHRl
eHQgZmllbGQKK0hUTUxJbnB1dEVsZW1lbnQqIGZpbmRTdWl0YWJsZVNlYXJjaElucHV0RWxlbWVu
dChjb25zdCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiB7Ci0gICAgVGV4dEVuY29kaW5nIGVuY29k
aW5nOwotICAgIEdldEZvcm1FbmNvZGluZyhmb3JtLCAmZW5jb2RpbmcpOwotICAgIGlmICghZW5j
b2RpbmcuaXNWYWxpZCgpKSB7Ci0gICAgICAgIC8vIE5lZWQgYSB2YWxpZCBlbmNvZGluZyB0byBl
bmNvZGUgdGhlIGZvcm0gZWxlbWVudHMuCi0gICAgICAgIC8vIElmIHRoZSBlbmNvZGluZyBpc24n
dCBmb3VuZCB3ZWJraXQgZW5kcyB1cCByZXBsYWNpbmcgdGhlIHBhcmFtcyB3aXRoCi0gICAgICAg
IC8vIGVtcHR5IHN0cmluZ3MuIFNvLCB3ZSBkb24ndCB0cnkgdG8gZG8gYW55dGhpbmcgaGVyZS4K
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgICplbmNvZGluZ05hbWUgPSBlbmNvZGluZy5u
YW1lKCk7Ci0KICAgICBIVE1MSW5wdXRFbGVtZW50KiB0ZXh0RWxlbWVudCA9IDA7CiAgICAgLy8g
RklYTUU6IENvbnNpZGVyIHJlZmFjdG9yaW5nIHRoaXMgY29kZSBzbyB0aGF0IHdlIGRvbid0IGNh
bGwgZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkgdHdpY2UuCiAgICAgZm9yIChWZWN0b3I8Rm9y
bUFzc29jaWF0ZWRFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGkoZm9ybS0+YXNzb2NpYXRlZEVs
ZW1lbnRzKCkuYmVnaW4oKSk7IGkgIT0gZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuZW5kKCk7
ICsraSkgewogICAgICAgICBpZiAoISgqaSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKKwogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3Jt
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPigqaSk7CisKICAg
ICAgICAgaWYgKGZvcm1FbGVtZW50LT5kaXNhYmxlZCgpIHx8IGZvcm1FbGVtZW50LT5uYW1lKCku
aXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAoIUlzSW5EZWZh
dWx0U3RhdGUoZm9ybUVsZW1lbnQpIHx8IGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGV4dGFyZWFUYWcpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgYm9vbCBp
c1RleHRFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIGlmIChmb3JtRWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICBpZiAoZm9ybUVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykgJiYgZm9ybUVsZW1lbnQtPndpbGxWYWxpZGF0ZSgp
KSB7CiAgICAgICAgICAgICBjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCk7Ci0gICAgICAgICAgICBp
ZiAoaW5wdXQtPmlzRmlsZVVwbG9hZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG9vIGJpZywg
ZG9uJ3QgdHJ5IHRvIGluZGV4IHRoaXMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpbnB1dC0+aXNQYXNzd29yZEZpZWxkKCkpIHsK
LSAgICAgICAgICAgICAgICAvLyBEb24ndCBzdG9yZSBwYXNzd29yZHMhIFRoaXMgaXMgbW9zdCBs
aWtlbHkgYW4gaHR0cHMgYW55d2F5LgorICAgICAgICAgICAgLy8gUmV0dXJuIG5vdGhpbmcgaWYg
YSBmaWxlIHVwbG9hZCBmaWVsZCBvciBhIHBhc3N3b3JkIGZpZWxkIGFyZSBmb3VuZC4KKyAgICAg
ICAgICAgIGlmIChpbnB1dC0+aXNGaWxlVXBsb2FkKCkgfHwgaW5wdXQtPmlzUGFzc3dvcmRGaWVs
ZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBpZiAoaW5wdXQt
PmlzVGV4dEZpZWxkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGV4dEVsZW1lbnQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGhlIGF1dG8tY29tcGxldGUgYmFyIG9ubHkga25vd3MgaG93
IHRvIGZpbGwgaW4gb25lIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZvcm0g
aGFzIG11bHRpcGxlIGZpZWxkczsgZG9uJ3QgdHJlYXQgaXQgYXMgc2VhcmNoYWJsZS4KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGZvcm1FbGVt
ZW50KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdGV4dEVs
ZW1lbnQ7Cit9CiAKLSAgICAgICAgICAgIGlmIChpbnB1dC0+aXNUZXh0RmllbGQoKSkKLSAgICAg
ICAgICAgICAgICBpc1RleHRFbGVtZW50ID0gdHJ1ZTsKLSAgICAgIH0KKy8vIEJ1aWxkIGEgc2Vh
cmNoIHN0cmluZyBiYXNlZCBvbiBhIGdpdmVuIEhUTUxGb3JtRWxlbWVudCBhbmQgSFRNTElucHV0
RWxlbWVudAorLy8gCisvLyBTZWFyY2ggc3RyaW5nIG91dHB1dCBleGFtcGxlIGZyb20gd3d3Lmdv
b2dsZS5jb206CisvLyAiaGw9ZW4mc291cmNlPWhwJmJpdz0xMDg1JmJpaD04NTQmcT17c2VhcmNo
VGVybXN9JmJ0bkc9R29vZ2xlK1NlYXJjaCZhcT1mJmFxaT0mYXFsPSZvcT0iCisvLyAKKy8vIFJl
dHVybiBmYWxzZSBpZiB0aGUgcHJvdmlkZWQgSFRNTElucHV0RWxlbWVudCBpcyBub3QgZm91bmQg
aW4gdGhlIGZvcm0KK2Jvb2wgYnVpbGRTZWFyY2hTdHJpbmcoY29uc3QgSFRNTEZvcm1FbGVtZW50
KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRTdHJpbmcsIFRleHRFbmNvZGluZyogZW5jb2Rp
bmcsIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIHRleHRFbGVtZW50KQoreworICAgIGJvb2wgaXNF
bGVtZW50Rm91bmQgPSBmYWxzZTsgICAKIAotICAgICAgRm9ybURhdGFMaXN0IGRhdGFMaXN0KGVu
Y29kaW5nKTsKLSAgICAgIGlmICghZm9ybUVsZW1lbnQtPmFwcGVuZEZvcm1EYXRhKGRhdGFMaXN0
LCBmYWxzZSkpCi0gICAgICAgICAgY29udGludWU7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIHJl
ZmFjdG9yaW5nIHRoaXMgY29kZSBzbyB0aGF0IHdlIGRvbid0IGNhbGwgZm9ybS0+YXNzb2NpYXRl
ZEVsZW1lbnRzKCkgdHdpY2UuCisgICAgZm9yIChWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50
Kj46OmNvbnN0X2l0ZXJhdG9yIGkoZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuYmVnaW4oKSk7
IGkgIT0gZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuZW5kKCk7ICsraSkgeworICAgICAgICBp
ZiAoISgqaSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT4mIGl0ZW1zID0gZGF0YUxp
c3QuaXRlbXMoKTsKLSAgICAgIGlmIChpc1RleHRFbGVtZW50ICYmICFpdGVtcy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICBpZiAodGV4dEVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgLy8gVGhlIGF1
dG8tY29tcGxldGUgYmFyIG9ubHkga25vd3MgaG93IHRvIGZpbGwgaW4gb25lIHZhbHVlLgotICAg
ICAgICAgICAgICAvLyBUaGlzIGZvcm0gaGFzIG11bHRpcGxlIGZpZWxkczsgZG9uJ3QgdHJlYXQg
aXQgYXMgc2VhcmNoYWJsZS4KLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
IH0KLSAgICAgICAgICB0ZXh0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
Pihmb3JtRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKFZlY3RvcjxGb3JtRGF0YUxpc3Q6
Okl0ZW0+Ojpjb25zdF9pdGVyYXRvciBqKGl0ZW1zLmJlZ2luKCkpOyBqICE9IGl0ZW1zLmVuZCgp
OyArK2opIHsKLSAgICAgICAgICAvLyBIYW5kbGUgSVNJTkRFWCAvIDxpbnB1dCBuYW1lPWlzaW5k
ZXg+IHNwZWNpYWxseSwgYnV0IG9ubHkgaWYgaXQncwotICAgICAgICAgIC8vIHRoZSBmaXJzdCBl
bnRyeS4KLSAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSB8fCBqLT5kYXRh
KCkgIT0gImlzaW5kZXgiKSB7Ci0gICAgICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCcmJyk7Ci0g
ICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5j
b2RlZFN0cmluZywgai0+ZGF0YSgpKTsKLSAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBw
ZW5kKCc9Jyk7Ci0gICAgICAgICAgfQotICAgICAgICAgICsrajsKLSAgICAgICAgICBpZiAoZm9y
bUVsZW1lbnQgPT0gdGV4dEVsZW1lbnQpCi0gICAgICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFw
cGVuZCgie3NlYXJjaFRlcm1zfSIsIDEzKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
IEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywg
ai0+ZGF0YSgpKTsKLSAgICAgIH0KLSAgICB9CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQqIGZvcm1FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KCpp
KTsKIAotICAgIHJldHVybiB0ZXh0RWxlbWVudDsKLX0KKyAgICAgICAgaWYgKGZvcm1FbGVtZW50
LT5kaXNhYmxlZCgpIHx8IGZvcm1FbGVtZW50LT5uYW1lKCkuaXNOdWxsKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBGb3JtRGF0YUxpc3QgZGF0YUxpc3QoKmVuY29kaW5nKTsK
KyAgICAgICAgaWYgKCFmb3JtRWxlbWVudC0+YXBwZW5kRm9ybURhdGEoZGF0YUxpc3QsIGZhbHNl
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0
YUxpc3Q6Okl0ZW0+JiBpdGVtcyA9IGRhdGFMaXN0Lml0ZW1zKCk7CiAKKyAgICAgICAgZm9yIChW
ZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPjo6Y29uc3RfaXRlcmF0b3IgaihpdGVtcy5iZWdpbigp
KTsgaiAhPSBpdGVtcy5lbmQoKTsgKytqKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgSVNJTkRF
WCAvIDxpbnB1dCBuYW1lPWlzaW5kZXg+IHNwZWNpYWxseSwgYnV0IG9ubHkgaWYgaXQncworICAg
ICAgICAgICAgLy8gdGhlIGZpcnN0IGVudHJ5LgorICAgICAgICAgICAgaWYgKCFlbmNvZGVkU3Ry
aW5nLT5pc0VtcHR5KCkgfHwgai0+ZGF0YSgpICE9ICJpc2luZGV4IikgeworICAgICAgICAgICAg
ICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBl
bmNvZGVkU3RyaW5nLT5hcHBlbmQoJyYnKTsKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxk
ZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCc9Jyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICArK2o7CisgICAgICAgICAgICBpZiAoZm9ybUVsZW1lbnQgPT0gdGV4dEVs
ZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoIntzZWFyY2hU
ZXJtc30iLCAxMyk7CisgICAgICAgICAgICAgICAgaXNFbGVtZW50Rm91bmQgPSB0cnVlOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVT
dHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBpc0VsZW1lbnRGb3VuZDsKK30KIH0gLy8gbmFtZXNwYWNlCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1XZWJTZWFyY2hhYmxlRm9ybURhdGE6OldlYlNlYXJjaGFibGVG
b3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYgZm9ybSkKK1dlYlNlYXJjaGFibGVGb3JtRGF0
YTo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50JiBmb3JtLCBjb25z
dCBXZWJJbnB1dEVsZW1lbnQmIHNlbGVjdGVkSW5wdXRFbGVtZW50KQogewogICAgIFJlZlB0cjxI
VE1MRm9ybUVsZW1lbnQ+IGZvcm1FbGVtZW50ID0gZm9ybS5vcGVyYXRvciBQYXNzUmVmUHRyPEhU
TUxGb3JtRWxlbWVudD4oKTsKICAgICBjb25zdCBGcmFtZSogZnJhbWUgPSBmb3JtRWxlbWVudC0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAK
LSAgICAvLyBPbmx5IGNvbnNpZGVyIGZvcm1zIHRoYXQgR0VUIGRhdGEgYW5kIHRoZSBhY3Rpb24g
dGFyZ2V0cyBhbiBodHRwIHBhZ2UuCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZvcm1FbGVt
ZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjptZXRob2RBdHRyKSwgInBvc3QiKSB8fCAhSXNI
VFRQRm9ybVN1Ym1pdChmb3JtRWxlbWVudC5nZXQoKSkpCisgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50ID0gc2VsZWN0ZWRJbnB1dEVsZW1lbnQub3BlcmF0b3IgUGFzc1JlZlB0cjxI
VE1MSW5wdXRFbGVtZW50PigpLmdldCgpOworCisgICAgLy8gT25seSBjb25zaWRlciBmb3JtcyB0
aGF0IEdFVCBkYXRhLgorICAgIC8vIEFsbG93IEhUVFBTIG9ubHkgd2hlbiBhbiBpbnB1dCBlbGVt
ZW50IGlzIHByb3ZpZGVkLiAKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybUVsZW1lbnQt
PmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Om1ldGhvZEF0dHIpLCAicG9zdCIpIAorICAgICAgICB8
fCAoIUlzSFRUUEZvcm1TdWJtaXQoZm9ybUVsZW1lbnQuZ2V0KCkpICYmICFpbnB1dEVsZW1lbnQp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZFN0cmluZzsKKyAg
ICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmc7CisKKyAgICBHZXRGb3JtRW5jb2RpbmcoZm9ybUVsZW1l
bnQuZ2V0KCksICZlbmNvZGluZyk7CisgICAgaWYgKCFlbmNvZGluZy5pc1ZhbGlkKCkpIHsKKyAg
ICAgICAgLy8gTmVlZCBhIHZhbGlkIGVuY29kaW5nIHRvIGVuY29kZSB0aGUgZm9ybSBlbGVtZW50
cy4KKyAgICAgICAgLy8gSWYgdGhlIGVuY29kaW5nIGlzbid0IGZvdW5kIHdlYmtpdCBlbmRzIHVw
IHJlcGxhY2luZyB0aGUgcGFyYW1zIHdpdGgKKyAgICAgICAgLy8gZW1wdHkgc3RyaW5ncy4gU28s
IHdlIGRvbid0IHRyeSB0byBkbyBhbnl0aGluZyBoZXJlLgorICAgICAgICByZXR1cm47CisgICAg
fSAKKworICAgIC8vIExvb2sgZm9yIGEgc3VpdGFibGUgc2VhcmNoIHRleHQgZmllbGQgaW4gdGhl
IGZvcm0gd2hlbiBhIAorICAgIC8vIHNlbGVjdGVkSW5wdXRFbGVtZW50IGlzIG5vdCBwcm92aWRl
ZC4KKyAgICBpZiAoIWlucHV0RWxlbWVudCkgeworICAgICAgICBpbnB1dEVsZW1lbnQgPSBmaW5k
U3VpdGFibGVTZWFyY2hJbnB1dEVsZW1lbnQoZm9ybUVsZW1lbnQuZ2V0KCkpOworCisgICAgICAg
IC8vIFJldHVybiBpZiBubyBzdWl0YWJsZSB0ZXh0IGVsZW1lbnQgaGFzIGJlZW4gZm91bmQuCisg
ICAgICAgIGlmICghaW5wdXRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKwog
ICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZpcnN0U3VibWl0QnV0dG9uID0gR2V0QnV0dG9u
VG9BY3RpdmF0ZShmb3JtRWxlbWVudC5nZXQoKSk7CiAgICAgaWYgKGZpcnN0U3VibWl0QnV0dG9u
KSB7CiAgICAgICAgIC8vIFRoZSBmb3JtIGRvZXMgbm90IGhhdmUgYW4gYWN0aXZlIHN1Ym1pdCBi
dXR0b24sIG1ha2UgdGhlIGZpcnN0IGJ1dHRvbgpAQCAtMjQxLDIyICsyNzYsMjIgQEAgV2ViU2Vh
cmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxlRm9ybQogICAgICAgICAvLyBuYW1lIG9mIHRo
ZSBzdWJtaXQgYnV0dG9uLgogICAgICAgICBmaXJzdFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVk
U3VibWl0KHRydWUpOwogICAgIH0KLSAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZFN0cmluZzsKLSAg
ICBTdHJpbmcgZW5jb2Rpbmc7Ci0gICAgYm9vbCBoYXNFbGVtZW50ID0gSGFzU3VpdGFibGVUZXh0
RWxlbWVudChmb3JtRWxlbWVudC5nZXQoKSwgJmVuY29kZWRTdHJpbmcsICZlbmNvZGluZyk7CisK
KyAgICBib29sIGlzVmFsaWRTZWFyY2hTdHJpbmcgPSBidWlsZFNlYXJjaFN0cmluZyhmb3JtRWxl
bWVudC5nZXQoKSwgJmVuY29kZWRTdHJpbmcsICZlbmNvZGluZywgaW5wdXRFbGVtZW50KTsKKwog
ICAgIGlmIChmaXJzdFN1Ym1pdEJ1dHRvbikKICAgICAgICAgZmlyc3RTdWJtaXRCdXR0b24tPnNl
dEFjdGl2YXRlZFN1Ym1pdChmYWxzZSk7Ci0gICAgaWYgKCFoYXNFbGVtZW50KSB7Ci0gICAgICAg
IC8vIE5vdCBhIHNlYXJjaGFibGUgZm9ybS4KKworICAgIC8vIFJldHVybiBpZiB0aGUgc2VhcmNo
IHN0cmluZyBpcyBub3QgdmFsaWQuIAorICAgIGlmICghaXNWYWxpZFNlYXJjaFN0cmluZykKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIFN0cmluZyBhY3Rpb24oZm9ybUVsZW1lbnQtPmFj
dGlvbigpKTsKICAgICBLVVJMIHVybChmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKGFjdGlv
bi5pc051bGwoKSA/ICIiIDogYWN0aW9uKSk7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0
YSA9IEZvcm1EYXRhOjpjcmVhdGUoZW5jb2RlZFN0cmluZyk7CiAgICAgdXJsLnNldFF1ZXJ5KGZv
cm1EYXRhLT5mbGF0dGVuVG9TdHJpbmcoKSk7CiAgICAgbV91cmwgPSB1cmw7Ci0gICAgbV9lbmNv
ZGluZyA9IGVuY29kaW5nOworICAgIG1fZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcubmFtZSgp
KTsgCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94064</attachid>
            <date>2011-05-19 06:26:48 -0700</date>
            <delta_ts>2011-06-02 18:54:58 -0700</delta_ts>
            <desc>Proposed Patch V9</desc>
            <filename>kw9.txt</filename>
            <type>text/plain</type>
            <size>14057</size>
            <attacher>philippe.beauchamp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4NjY1MikKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTEtMDUtMTYgIFBoaWxpcHBlIEJlYXVjaGFtcCAgPHBoaWxpcHBlLmJlYXVjaGFtcEBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHRoZSBmZWF0dXJlICJBZGQgYXMgc2VhcmNoIGVuZ2luZS4uLiIgaW4gYSBzZWFyY2gg
dGV4dCBmaWVsZCBjb250ZXh0IG1lbnUgZm9yIGNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk4MAorCisgICAgICAgICogcHVibGljL1dl
YkNvbnRleHRNZW51RGF0YS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURh
dGEuaDoKKyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJ
dGVtcyk6CisgICAgICAgICogc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHA6CisgICAgICAg
IChmaW5kU3VpdGFibGVTZWFyY2hJbnB1dEVsZW1lbnQpOgorICAgICAgICAoYnVpbGRTZWFyY2hT
dHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZWFyY2hhYmxlRm9ybURhdGE6OldlYlNlYXJj
aGFibGVGb3JtRGF0YSk6CisKIDIwMTEtMDUtMTYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURh
dGEuaAkocmV2aXNpb24gODY1MjApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJDb250ZXh0TWVudURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTAgQEAgc3Ry
dWN0IFdlYkNvbnRleHRNZW51RGF0YSB7CiAgICAgLy8gVGhlIGFic29sdXRlIFVSTCBvZiB0aGUg
cGFnZSBpbiBjb250ZXh0LgogICAgIFdlYlVSTCBwYWdlVVJMOwogCisgICAgLy8gVGhlIGFic29s
dXRlIGtleXdvcmQgc2VhcmNoIFVSTCBpbmNsdWRpbmcgdGhlICVzIHNlYXJjaCB0YWcgd2hlbiB0
aGUKKyAgICAvLyAiQWRkIGFzIHNlYXJjaCBlbmdpbmUuLi4iIG9wdGlvbiBpcyBjbGlja2VkIChs
ZWZ0IGVtcHR5IGlmIG5vdCB1c2VkKS4KKyAgICBXZWJVUkwga2V5d29yZFVSTDsKKwogICAgIC8v
IFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhlIHN1YmZyYW1lIGluIGNvbnRleHQuCiAgICAgV2ViVVJM
IGZyYW1lVVJMOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWFy
Y2hhYmxlRm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaAkocmV2aXNpb24gODY1MjApCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBXZWJTZWFyY2hhYmxlRm9ybURhdGFfaAog
I2RlZmluZSBXZWJTZWFyY2hhYmxlRm9ybURhdGFfaAogCisjaW5jbHVkZSAiV2ViSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAKQEAg
LTQzLDcgKzQ0LDcgQEAgY2xhc3MgV2ViU2VhcmNoYWJsZUZvcm1EYXRhIHsKIHB1YmxpYzoKICAg
ICAvLyBJZiB0aGUgcHJvdmlkZWQgZm9ybSBpcyBzdWl0YWJsZSBmb3IgYXV0b21hdGVkIHNlYXJj
aGluZywgaXNWYWxpZCgpCiAgICAgLy8gd2lsbCByZXR1cm4gZmFsc2UuCi0gICAgV0VCS0lUX0FQ
SSBXZWJTZWFyY2hhYmxlRm9ybURhdGEoY29uc3QgV2ViRm9ybUVsZW1lbnQmKTsKKyAgICBXRUJL
SVRfQVBJIFdlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYsIGNvbnN0
IFdlYklucHV0RWxlbWVudCYgc2VsZWN0ZWRJbnB1dEVsZW1lbnQgPSBXZWJJbnB1dEVsZW1lbnQo
KSk7CiAKICAgICBib29sIGlzVmFsaWQoKSB7IHJldHVybiBtX3VybC5pc1ZhbGlkKCk7IH0KIApJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNs
aWVudEltcGwuY3BwCShyZXZpc2lvbiA4NjUyMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDExICs0
MSwxNCBAQAogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKLSNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmgiCisKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWVkaWFFcnJvci5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKQEAgLTU2LDExICs1OSwxMyBAQAogCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1l
bnVEYXRhLmgiCiAjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZUltcGwuaCIKKyNpbmNsdWRlICJXZWJG
b3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYk1l
bnVJdGVtSW5mby5oIgogI2luY2x1ZGUgIldlYlBsdWdpbi5oIgogI2luY2x1ZGUgIldlYlBsdWdp
bkNvbnRhaW5lckltcGwuaCIKICNpbmNsdWRlICJXZWJQb2ludC5oIgorI2luY2x1ZGUgIldlYlNl
YXJjaGFibGVGb3JtRGF0YS5oIgogI2luY2x1ZGUgIldlYlNwZWxsQ2hlY2tDbGllbnQuaCIKICNp
bmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIKQEAgLTI2OSw2ICsyNzQs
MTUgQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGllbgogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBXZWJDb3JlOjpIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0gPSBzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS0+Y3VycmVudEZv
cm0oKTsKKyAgICAgICAgaWYgKGZvcm0gJiYgZm9ybS0+Y2hlY2tWYWxpZGl0eSgpICYmIHIuaW5u
ZXJOb25TaGFyZWROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsKKyAg
ICAgICAgICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIHNlbGVjdGVkRWxlbWVudCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqPihyLmlubmVyTm9uU2hhcmVkTm9k
ZSgpKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAg
ICBXZWJTZWFyY2hhYmxlRm9ybURhdGEgd3MgPSBXZWJTZWFyY2hhYmxlRm9ybURhdGEoV2ViRm9y
bUVsZW1lbnQoZm9ybSksIFdlYklucHV0RWxlbWVudChzZWxlY3RlZEVsZW1lbnQpKTsKKyAgICAg
ICAgICAgICAgICBpZiAod3MudXJsKCkuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBk
YXRhLmtleXdvcmRVUkwgPSB3cy51cmwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAg
IH0KIAogI2lmIE9TKERBUldJTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAkocmV2aXNpb24gODY1MjApCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQu
aCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJXZWJGb3JtRWxlbWVudC5o
IgorI2luY2x1ZGUgIldlYklucHV0RWxlbWVudC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC0xNDEsOTkgKzE0MiwxMzMgQEAgYm9v
bCBJc0luRGVmYXVsdFN0YXRlKGNvbnN0IEhUTUxGb3JtQ29udAogICAgIHJldHVybiB0cnVlOwog
fQogCi0vLyBJZiBmb3JtIGhhcyBvbmx5IG9uZSB0ZXh0IGlucHV0IGVsZW1lbnQsIHJldHVybiB0
cnVlLiBJZiBhIHZhbGlkIGlucHV0Ci0vLyBlbGVtZW50IGlzIG5vdCBmb3VuZCwgcmV0dXJuIGZh
bHNlLiBBZGRpdGlvbmFsbHksIHRoZSBmb3JtIGRhdGEgZm9yIGFsbAotLy8gZWxlbWVudHMgaXMg
YWRkZWQgdG8gZW5jX3N0cmluZyBhbmQgdGhlIGVuY29kaW5nIHVzZWQgaXMgc2V0IGluCi0vLyBl
bmNvZGluZ19uYW1lLgotYm9vbCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGb3Jt
RWxlbWVudCogZm9ybSwgVmVjdG9yPGNoYXI+KiBlbmNvZGVkU3RyaW5nLCBTdHJpbmcqIGVuY29k
aW5nTmFtZSkKKy8vIExvb2sgZm9yIGEgc3VpdGFibGUgc2VhcmNoIHRleHQgZmllbGQgaW4gYSBn
aXZlbiBIVE1MRm9ybUVsZW1lbnQgCisvLyBSZXR1cm4gbm90aGluZyBpZiBvbmUgb2YgdGhvc2Ug
aXRlbXMgYXJlIGZvdW5kOgorLy8gIC0gQSB0ZXh0IGFyZWEgZmllbGQKKy8vICAtIEEgZmlsZSB1
cGxvYWQgZmllbGQgCisvLyAgLSBBIFBhc3N3b3JkIGZpZWxkCisvLyAgLSBNb3JlIHRoYW4gb25l
IHRleHQgZmllbGQKK0hUTUxJbnB1dEVsZW1lbnQqIGZpbmRTdWl0YWJsZVNlYXJjaElucHV0RWxl
bWVudChjb25zdCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiB7Ci0gICAgVGV4dEVuY29kaW5nIGVu
Y29kaW5nOwotICAgIEdldEZvcm1FbmNvZGluZyhmb3JtLCAmZW5jb2RpbmcpOwotICAgIGlmICgh
ZW5jb2RpbmcuaXNWYWxpZCgpKSB7Ci0gICAgICAgIC8vIE5lZWQgYSB2YWxpZCBlbmNvZGluZyB0
byBlbmNvZGUgdGhlIGZvcm0gZWxlbWVudHMuCi0gICAgICAgIC8vIElmIHRoZSBlbmNvZGluZyBp
c24ndCBmb3VuZCB3ZWJraXQgZW5kcyB1cCByZXBsYWNpbmcgdGhlIHBhcmFtcyB3aXRoCi0gICAg
ICAgIC8vIGVtcHR5IHN0cmluZ3MuIFNvLCB3ZSBkb24ndCB0cnkgdG8gZG8gYW55dGhpbmcgaGVy
ZS4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgICplbmNvZGluZ05hbWUgPSBlbmNvZGlu
Zy5uYW1lKCk7Ci0KICAgICBIVE1MSW5wdXRFbGVtZW50KiB0ZXh0RWxlbWVudCA9IDA7CiAgICAg
Ly8gRklYTUU6IENvbnNpZGVyIHJlZmFjdG9yaW5nIHRoaXMgY29kZSBzbyB0aGF0IHdlIGRvbid0
IGNhbGwgZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkgdHdpY2UuCiAgICAgZm9yIChWZWN0b3I8
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGkoZm9ybS0+YXNzb2NpYXRl
ZEVsZW1lbnRzKCkuYmVnaW4oKSk7IGkgIT0gZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuZW5k
KCk7ICsraSkgewogICAgICAgICBpZiAoISgqaSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBm
b3JtRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPigqaSk7CisK
ICAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5kaXNhYmxlZCgpIHx8IGZvcm1FbGVtZW50LT5uYW1l
KCkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAoIUlzSW5E
ZWZhdWx0U3RhdGUoZm9ybUVsZW1lbnQpIHx8IGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dGV4dGFyZWFUYWcpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgYm9v
bCBpc1RleHRFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIGlmIChmb3JtRWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICBpZiAoZm9ybUVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykgJiYgZm9ybUVsZW1lbnQtPndpbGxWYWxpZGF0
ZSgpKSB7CiAgICAgICAgICAgICBjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCk7Ci0gICAgICAgICAg
ICBpZiAoaW5wdXQtPmlzRmlsZVVwbG9hZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG9vIGJp
ZywgZG9uJ3QgdHJ5IHRvIGluZGV4IHRoaXMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpbnB1dC0+aXNQYXNzd29yZEZpZWxkKCkp
IHsKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBzdG9yZSBwYXNzd29yZHMhIFRoaXMgaXMgbW9z
dCBsaWtlbHkgYW4gaHR0cHMgYW55d2F5LgorICAgICAgICAgICAgLy8gUmV0dXJuIG5vdGhpbmcg
aWYgYSBmaWxlIHVwbG9hZCBmaWVsZCBvciBhIHBhc3N3b3JkIGZpZWxkIGFyZSBmb3VuZC4KKyAg
ICAgICAgICAgIGlmIChpbnB1dC0+aXNGaWxlVXBsb2FkKCkgfHwgaW5wdXQtPmlzUGFzc3dvcmRG
aWVsZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBpZiAoaW5w
dXQtPmlzVGV4dEZpZWxkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGV4dEVsZW1lbnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGF1dG8tY29tcGxldGUgYmFyIG9ubHkga25vd3Mg
aG93IHRvIGZpbGwgaW4gb25lIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZv
cm0gaGFzIG11bHRpcGxlIGZpZWxkczsgZG9uJ3QgdHJlYXQgaXQgYXMgc2VhcmNoYWJsZS4KKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGZvcm1F
bGVtZW50KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdGV4
dEVsZW1lbnQ7Cit9CiAKLSAgICAgICAgICAgIGlmIChpbnB1dC0+aXNUZXh0RmllbGQoKSkKLSAg
ICAgICAgICAgICAgICBpc1RleHRFbGVtZW50ID0gdHJ1ZTsKLSAgICAgIH0KKy8vIEJ1aWxkIGEg
c2VhcmNoIHN0cmluZyBiYXNlZCBvbiBhIGdpdmVuIEhUTUxGb3JtRWxlbWVudCBhbmQgSFRNTElu
cHV0RWxlbWVudAorLy8gCisvLyBTZWFyY2ggc3RyaW5nIG91dHB1dCBleGFtcGxlIGZyb20gd3d3
Lmdvb2dsZS5jb206CisvLyAiaGw9ZW4mc291cmNlPWhwJmJpdz0xMDg1JmJpaD04NTQmcT17c2Vh
cmNoVGVybXN9JmJ0bkc9R29vZ2xlK1NlYXJjaCZhcT1mJmFxaT0mYXFsPSZvcT0iCisvLyAKKy8v
IFJldHVybiBmYWxzZSBpZiB0aGUgcHJvdmlkZWQgSFRNTElucHV0RWxlbWVudCBpcyBub3QgZm91
bmQgaW4gdGhlIGZvcm0KK2Jvb2wgYnVpbGRTZWFyY2hTdHJpbmcoY29uc3QgSFRNTEZvcm1FbGVt
ZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRTdHJpbmcsIFRleHRFbmNvZGluZyogZW5j
b2RpbmcsIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIHRleHRFbGVtZW50KQoreworICAgIGJvb2wg
aXNFbGVtZW50Rm91bmQgPSBmYWxzZTsgICAKIAotICAgICAgRm9ybURhdGFMaXN0IGRhdGFMaXN0
KGVuY29kaW5nKTsKLSAgICAgIGlmICghZm9ybUVsZW1lbnQtPmFwcGVuZEZvcm1EYXRhKGRhdGFM
aXN0LCBmYWxzZSkpCi0gICAgICAgICAgY29udGludWU7CisgICAgLy8gRklYTUU6IENvbnNpZGVy
IHJlZmFjdG9yaW5nIHRoaXMgY29kZSBzbyB0aGF0IHdlIGRvbid0IGNhbGwgZm9ybS0+YXNzb2Np
YXRlZEVsZW1lbnRzKCkgdHdpY2UuCisgICAgZm9yIChWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGkoZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuYmVnaW4o
KSk7IGkgIT0gZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuZW5kKCk7ICsraSkgeworICAgICAg
ICBpZiAoISgqaSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT4mIGl0ZW1zID0gZGF0
YUxpc3QuaXRlbXMoKTsKLSAgICAgIGlmIChpc1RleHRFbGVtZW50ICYmICFpdGVtcy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICBpZiAodGV4dEVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgLy8gVGhl
IGF1dG8tY29tcGxldGUgYmFyIG9ubHkga25vd3MgaG93IHRvIGZpbGwgaW4gb25lIHZhbHVlLgot
ICAgICAgICAgICAgICAvLyBUaGlzIGZvcm0gaGFzIG11bHRpcGxlIGZpZWxkczsgZG9uJ3QgdHJl
YXQgaXQgYXMgc2VhcmNoYWJsZS4KLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgIH0KLSAgICAgICAgICB0ZXh0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnQqPihmb3JtRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKFZlY3RvcjxGb3JtRGF0YUxp
c3Q6Okl0ZW0+Ojpjb25zdF9pdGVyYXRvciBqKGl0ZW1zLmJlZ2luKCkpOyBqICE9IGl0ZW1zLmVu
ZCgpOyArK2opIHsKLSAgICAgICAgICAvLyBIYW5kbGUgSVNJTkRFWCAvIDxpbnB1dCBuYW1lPWlz
aW5kZXg+IHNwZWNpYWxseSwgYnV0IG9ubHkgaWYgaXQncwotICAgICAgICAgIC8vIHRoZSBmaXJz
dCBlbnRyeS4KLSAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSB8fCBqLT5k
YXRhKCkgIT0gImlzaW5kZXgiKSB7Ci0gICAgICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+
aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCcmJyk7
Ci0gICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgq
ZW5jb2RlZFN0cmluZywgai0+ZGF0YSgpKTsKLSAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+
YXBwZW5kKCc9Jyk7Ci0gICAgICAgICAgfQotICAgICAgICAgICsrajsKLSAgICAgICAgICBpZiAo
Zm9ybUVsZW1lbnQgPT0gdGV4dEVsZW1lbnQpCi0gICAgICAgICAgICAgIGVuY29kZWRTdHJpbmct
PmFwcGVuZCgie3NlYXJjaFRlcm1zfSIsIDEzKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmlu
Zywgai0+ZGF0YSgpKTsKLSAgICAgIH0KLSAgICB9CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIGZvcm1FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+
KCppKTsKIAotICAgIHJldHVybiB0ZXh0RWxlbWVudDsKLX0KKyAgICAgICAgaWYgKGZvcm1FbGVt
ZW50LT5kaXNhYmxlZCgpIHx8IGZvcm1FbGVtZW50LT5uYW1lKCkuaXNOdWxsKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBGb3JtRGF0YUxpc3QgZGF0YUxpc3QoKmVuY29kaW5n
KTsKKyAgICAgICAgaWYgKCFmb3JtRWxlbWVudC0+YXBwZW5kRm9ybURhdGEoZGF0YUxpc3QsIGZh
bHNlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IFZlY3RvcjxGb3Jt
RGF0YUxpc3Q6Okl0ZW0+JiBpdGVtcyA9IGRhdGFMaXN0Lml0ZW1zKCk7CiAKKyAgICAgICAgZm9y
IChWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPjo6Y29uc3RfaXRlcmF0b3IgaihpdGVtcy5iZWdp
bigpKTsgaiAhPSBpdGVtcy5lbmQoKTsgKytqKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgSVNJ
TkRFWCAvIDxpbnB1dCBuYW1lPWlzaW5kZXg+IHNwZWNpYWxseSwgYnV0IG9ubHkgaWYgaXQncwor
ICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGVudHJ5LgorICAgICAgICAgICAgaWYgKCFlbmNvZGVk
U3RyaW5nLT5pc0VtcHR5KCkgfHwgai0+ZGF0YSgpICE9ICJpc2luZGV4IikgeworICAgICAgICAg
ICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAg
ICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJyYnKTsKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1
aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7
CisgICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCc9Jyk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICArK2o7CisgICAgICAgICAgICBpZiAoZm9ybUVsZW1lbnQgPT0gdGV4
dEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoIntzZWFy
Y2hUZXJtc30iLCAxMyk7CisgICAgICAgICAgICAgICAgaXNFbGVtZW50Rm91bmQgPSB0cnVlOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNv
ZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBpc0VsZW1lbnRGb3VuZDsKK30KIH0gLy8gbmFtZXNwYWNlCiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJTZWFyY2hhYmxlRm9ybURhdGE6OldlYlNlYXJjaGFi
bGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYgZm9ybSkKK1dlYlNlYXJjaGFibGVGb3Jt
RGF0YTo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50JiBmb3JtLCBj
b25zdCBXZWJJbnB1dEVsZW1lbnQmIHNlbGVjdGVkSW5wdXRFbGVtZW50KQogewogICAgIFJlZlB0
cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm1FbGVtZW50ID0gZm9ybS5vcGVyYXRvciBQYXNzUmVmUHRy
PEhUTUxGb3JtRWxlbWVudD4oKTsKICAgICBjb25zdCBGcmFtZSogZnJhbWUgPSBmb3JtRWxlbWVu
dC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47
CiAKLSAgICAvLyBPbmx5IGNvbnNpZGVyIGZvcm1zIHRoYXQgR0VUIGRhdGEgYW5kIHRoZSBhY3Rp
b24gdGFyZ2V0cyBhbiBodHRwIHBhZ2UuCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZvcm1F
bGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjptZXRob2RBdHRyKSwgInBvc3QiKSB8fCAh
SXNIVFRQRm9ybVN1Ym1pdChmb3JtRWxlbWVudC5nZXQoKSkpCisgICAgSFRNTElucHV0RWxlbWVu
dCogaW5wdXRFbGVtZW50ID0gc2VsZWN0ZWRJbnB1dEVsZW1lbnQub3BlcmF0b3IgUGFzc1JlZlB0
cjxIVE1MSW5wdXRFbGVtZW50PigpLmdldCgpOworCisgICAgLy8gT25seSBjb25zaWRlciBmb3Jt
cyB0aGF0IEdFVCBkYXRhLgorICAgIC8vIEFsbG93IEhUVFBTIG9ubHkgd2hlbiBhbiBpbnB1dCBl
bGVtZW50IGlzIHByb3ZpZGVkLiAKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybUVsZW1l
bnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Om1ldGhvZEF0dHIpLCAicG9zdCIpIAorICAgICAg
ICB8fCAoIUlzSFRUUEZvcm1TdWJtaXQoZm9ybUVsZW1lbnQuZ2V0KCkpICYmICFpbnB1dEVsZW1l
bnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZFN0cmluZzsK
KyAgICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmc7CisKKyAgICBHZXRGb3JtRW5jb2RpbmcoZm9ybUVs
ZW1lbnQuZ2V0KCksICZlbmNvZGluZyk7CisgICAgaWYgKCFlbmNvZGluZy5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgLy8gTmVlZCBhIHZhbGlkIGVuY29kaW5nIHRvIGVuY29kZSB0aGUgZm9ybSBlbGVt
ZW50cy4KKyAgICAgICAgLy8gSWYgdGhlIGVuY29kaW5nIGlzbid0IGZvdW5kIHdlYmtpdCBlbmRz
IHVwIHJlcGxhY2luZyB0aGUgcGFyYW1zIHdpdGgKKyAgICAgICAgLy8gZW1wdHkgc3RyaW5ncy4g
U28sIHdlIGRvbid0IHRyeSB0byBkbyBhbnl0aGluZyBoZXJlLgorICAgICAgICByZXR1cm47Cisg
ICAgfSAKKworICAgIC8vIExvb2sgZm9yIGEgc3VpdGFibGUgc2VhcmNoIHRleHQgZmllbGQgaW4g
dGhlIGZvcm0gd2hlbiBhIAorICAgIC8vIHNlbGVjdGVkSW5wdXRFbGVtZW50IGlzIG5vdCBwcm92
aWRlZC4KKyAgICBpZiAoIWlucHV0RWxlbWVudCkgeworICAgICAgICBpbnB1dEVsZW1lbnQgPSBm
aW5kU3VpdGFibGVTZWFyY2hJbnB1dEVsZW1lbnQoZm9ybUVsZW1lbnQuZ2V0KCkpOworCisgICAg
ICAgIC8vIFJldHVybiBpZiBubyBzdWl0YWJsZSB0ZXh0IGVsZW1lbnQgaGFzIGJlZW4gZm91bmQu
CisgICAgICAgIGlmICghaW5wdXRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZpcnN0U3VibWl0QnV0dG9uID0gR2V0QnV0
dG9uVG9BY3RpdmF0ZShmb3JtRWxlbWVudC5nZXQoKSk7CiAgICAgaWYgKGZpcnN0U3VibWl0QnV0
dG9uKSB7CiAgICAgICAgIC8vIFRoZSBmb3JtIGRvZXMgbm90IGhhdmUgYW4gYWN0aXZlIHN1Ym1p
dCBidXR0b24sIG1ha2UgdGhlIGZpcnN0IGJ1dHRvbgpAQCAtMjQxLDIyICsyNzYsMjIgQEAgV2Vi
U2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxlRm9ybQogICAgICAgICAvLyBuYW1lIG9m
IHRoZSBzdWJtaXQgYnV0dG9uLgogICAgICAgICBmaXJzdFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZh
dGVkU3VibWl0KHRydWUpOwogICAgIH0KLSAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZFN0cmluZzsK
LSAgICBTdHJpbmcgZW5jb2Rpbmc7Ci0gICAgYm9vbCBoYXNFbGVtZW50ID0gSGFzU3VpdGFibGVU
ZXh0RWxlbWVudChmb3JtRWxlbWVudC5nZXQoKSwgJmVuY29kZWRTdHJpbmcsICZlbmNvZGluZyk7
CisKKyAgICBib29sIGlzVmFsaWRTZWFyY2hTdHJpbmcgPSBidWlsZFNlYXJjaFN0cmluZyhmb3Jt
RWxlbWVudC5nZXQoKSwgJmVuY29kZWRTdHJpbmcsICZlbmNvZGluZywgaW5wdXRFbGVtZW50KTsK
KwogICAgIGlmIChmaXJzdFN1Ym1pdEJ1dHRvbikKICAgICAgICAgZmlyc3RTdWJtaXRCdXR0b24t
PnNldEFjdGl2YXRlZFN1Ym1pdChmYWxzZSk7Ci0gICAgaWYgKCFoYXNFbGVtZW50KSB7Ci0gICAg
ICAgIC8vIE5vdCBhIHNlYXJjaGFibGUgZm9ybS4KKworICAgIC8vIFJldHVybiBpZiB0aGUgc2Vh
cmNoIHN0cmluZyBpcyBub3QgdmFsaWQuIAorICAgIGlmICghaXNWYWxpZFNlYXJjaFN0cmluZykK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIFN0cmluZyBhY3Rpb24oZm9ybUVsZW1lbnQt
PmFjdGlvbigpKTsKICAgICBLVVJMIHVybChmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKGFj
dGlvbi5pc051bGwoKSA/ICIiIDogYWN0aW9uKSk7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiBmb3Jt
RGF0YSA9IEZvcm1EYXRhOjpjcmVhdGUoZW5jb2RlZFN0cmluZyk7CiAgICAgdXJsLnNldFF1ZXJ5
KGZvcm1EYXRhLT5mbGF0dGVuVG9TdHJpbmcoKSk7CiAgICAgbV91cmwgPSB1cmw7Ci0gICAgbV9l
bmNvZGluZyA9IGVuY29kaW5nOworICAgIG1fZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcubmFt
ZSgpKTsgCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="87319"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95844</attachid>
            <date>2011-06-02 18:54:58 -0700</date>
            <delta_ts>2011-06-03 10:39:23 -0700</delta_ts>
            <desc>Proposed Patch V10 - Removed WebCore namespace tags </desc>
            <filename>kw10.txt</filename>
            <type>text/plain</type>
            <size>13943</size>
            <attacher>philippe.beauchamp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4Nzk4MSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTEtMDYtMDIgIFBoaWxpcHBlIEJlYXVjaGFtcCAgPHBoaWxpcHBlLmJlYXVjaGFtcEBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHRoZSBmZWF0dXJlICJBZGQgYXMgc2VhcmNoIGVuZ2luZS4uLiIgaW4gYSBzZWFyY2gg
dGV4dCBmaWVsZCBjb250ZXh0IG1lbnUgZm9yIGNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzk4MAorCisgICAgICAgICogcHVibGljL1dl
YkNvbnRleHRNZW51RGF0YS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURh
dGEuaDoKKyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJ
dGVtcyk6CisgICAgICAgICogc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlNlYXJjaGFibGVGb3JtRGF0YTo6V2ViU2VhcmNoYWJsZUZvcm1EYXRhKToK
KwogMjAxMS0wNi0wMiAgQWFyb24gQ29sd2VsbCAgPGFjb2x3ZWxsQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oCShyZXZpc2lvbiA4Nzkz
NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3NywxMCBAQCBzdHJ1Y3QgV2ViQ29udGV4dE1lbnVE
YXRhIHsKICAgICAvLyBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBwYWdlIGluIGNvbnRleHQuCiAg
ICAgV2ViVVJMIHBhZ2VVUkw7CiAKKyAgICAvLyBUaGUgYWJzb2x1dGUga2V5d29yZCBzZWFyY2gg
VVJMIGluY2x1ZGluZyB0aGUgJXMgc2VhcmNoIHRhZyB3aGVuIHRoZQorICAgIC8vICJBZGQgYXMg
c2VhcmNoIGVuZ2luZS4uLiIgb3B0aW9uIGlzIGNsaWNrZWQgKGxlZnQgZW1wdHkgaWYgbm90IHVz
ZWQpLgorICAgIFdlYlVSTCBrZXl3b3JkVVJMOworCiAgICAgLy8gVGhlIGFic29sdXRlIFVSTCBv
ZiB0aGUgc3ViZnJhbWUgaW4gY29udGV4dC4KICAgICBXZWJVUkwgZnJhbWVVUkw7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNlYXJjaGFibGVG
b3JtRGF0YS5oCShyZXZpc2lvbiA4NzkzNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAjaWZuZGVmIFdlYlNlYXJjaGFibGVGb3JtRGF0YV9oCiAjZGVmaW5lIFdlYlNlYXJjaGFi
bGVGb3JtRGF0YV9oCiAKKyNpbmNsdWRlICJXZWJJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJX
ZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIKIApAQCAtNDMsNyArNDQsNyBAQCBjbGFz
cyBXZWJTZWFyY2hhYmxlRm9ybURhdGEgewogcHVibGljOgogICAgIC8vIElmIHRoZSBwcm92aWRl
ZCBmb3JtIGlzIHN1aXRhYmxlIGZvciBhdXRvbWF0ZWQgc2VhcmNoaW5nLCBpc1ZhbGlkKCkKICAg
ICAvLyB3aWxsIHJldHVybiBmYWxzZS4KLSAgICBXRUJLSVRfQVBJIFdlYlNlYXJjaGFibGVGb3Jt
RGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYpOworICAgIFdFQktJVF9BUEkgV2ViU2VhcmNoYWJs
ZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50JiwgY29uc3QgV2ViSW5wdXRFbGVtZW50JiBz
ZWxlY3RlZElucHV0RWxlbWVudCA9IFdlYklucHV0RWxlbWVudCgpKTsKIAogICAgIGJvb2wgaXNW
YWxpZCgpIHsgcmV0dXJuIG1fdXJsLmlzVmFsaWQoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAJKHJldmlz
aW9uIDg3OTM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGll
bnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDE0IEBACiAjaW5jbHVkZSAi
RXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKLSNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCIKKworI2luY2x1ZGUg
Ikhpc3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIktV
UkwuaCIKICNpbmNsdWRlICJNZWRpYUVycm9yLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtNTYs
MTEgKzU5LDEzIEBACiAKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudURhdGEuaCIKICNpbmNsdWRl
ICJXZWJEYXRhU291cmNlSW1wbC5oIgorI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50LmgiCiAjaW5j
bHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViTWVudUl0ZW1JbmZvLmgiCiAjaW5j
bHVkZSAiV2ViUGx1Z2luLmgiCiAjaW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgog
I2luY2x1ZGUgIldlYlBvaW50LmgiCisjaW5jbHVkZSAiV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmgi
CiAjaW5jbHVkZSAiV2ViU3BlbGxDaGVja0NsaWVudC5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5o
IgogI2luY2x1ZGUgIldlYlVSTC5oIgpAQCAtMjY5LDYgKzI3NCwxNSBAQCBQbGF0Zm9ybU1lbnVE
ZXNjcmlwdGlvbiBDb250ZXh0TWVudUNsaWVuCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICB9CisgICAgICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IHNlbGVjdGVk
RnJhbWUtPnNlbGVjdGlvbigpLT5jdXJyZW50Rm9ybSgpOworICAgICAgICBpZiAoZm9ybSAmJiBm
b3JtLT5jaGVja1ZhbGlkaXR5KCkgJiYgci5pbm5lck5vblNoYXJlZE5vZGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCog
c2VsZWN0ZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHIuaW5uZXJO
b25TaGFyZWROb2RlKCkpOworICAgICAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCkgeworICAg
ICAgICAgICAgICAgIFdlYlNlYXJjaGFibGVGb3JtRGF0YSB3cyA9IFdlYlNlYXJjaGFibGVGb3Jt
RGF0YShXZWJGb3JtRWxlbWVudChmb3JtKSwgV2ViSW5wdXRFbGVtZW50KHNlbGVjdGVkRWxlbWVu
dCkpOworICAgICAgICAgICAgICAgIGlmICh3cy51cmwoKS5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICAgICAgICAgIGRhdGEua2V5d29yZFVSTCA9IHdzLnVybCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CiAgICAgfQogCiAjaWYgT1MoREFSV0lOKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCShyZXZpc2lvbiA4
NzkzNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJIVE1MU2Vs
ZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgIldlYkZv
cm1FbGVtZW50LmgiCisjaW5jbHVkZSAiV2ViSW5wdXRFbGVtZW50LmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTE0MSw5OSArMTQy
LDEzMyBAQCBib29sIElzSW5EZWZhdWx0U3RhdGUoY29uc3QgSFRNTEZvcm1Db250CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLS8vIElmIGZvcm0gaGFzIG9ubHkgb25lIHRleHQgaW5wdXQgZWxlbWVu
dCwgcmV0dXJuIHRydWUuIElmIGEgdmFsaWQgaW5wdXQKLS8vIGVsZW1lbnQgaXMgbm90IGZvdW5k
LCByZXR1cm4gZmFsc2UuIEFkZGl0aW9uYWxseSwgdGhlIGZvcm0gZGF0YSBmb3IgYWxsCi0vLyBl
bGVtZW50cyBpcyBhZGRlZCB0byBlbmNfc3RyaW5nIGFuZCB0aGUgZW5jb2RpbmcgdXNlZCBpcyBz
ZXQgaW4KLS8vIGVuY29kaW5nX25hbWUuCi1ib29sIEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQoY29u
c3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRTdHJpbmcsIFN0
cmluZyogZW5jb2RpbmdOYW1lKQorLy8gTG9vayBmb3IgYSBzdWl0YWJsZSBzZWFyY2ggdGV4dCBm
aWVsZCBpbiBhIGdpdmVuIEhUTUxGb3JtRWxlbWVudCAKKy8vIFJldHVybiBub3RoaW5nIGlmIG9u
ZSBvZiB0aG9zZSBpdGVtcyBhcmUgZm91bmQ6CisvLyAgLSBBIHRleHQgYXJlYSBmaWVsZAorLy8g
IC0gQSBmaWxlIHVwbG9hZCBmaWVsZCAKKy8vICAtIEEgUGFzc3dvcmQgZmllbGQKKy8vICAtIE1v
cmUgdGhhbiBvbmUgdGV4dCBmaWVsZAorSFRNTElucHV0RWxlbWVudCogZmluZFN1aXRhYmxlU2Vh
cmNoSW5wdXRFbGVtZW50KGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSkKIHsKLSAgICBUZXh0
RW5jb2RpbmcgZW5jb2Rpbmc7Ci0gICAgR2V0Rm9ybUVuY29kaW5nKGZvcm0sICZlbmNvZGluZyk7
Ci0gICAgaWYgKCFlbmNvZGluZy5pc1ZhbGlkKCkpIHsKLSAgICAgICAgLy8gTmVlZCBhIHZhbGlk
IGVuY29kaW5nIHRvIGVuY29kZSB0aGUgZm9ybSBlbGVtZW50cy4KLSAgICAgICAgLy8gSWYgdGhl
IGVuY29kaW5nIGlzbid0IGZvdW5kIHdlYmtpdCBlbmRzIHVwIHJlcGxhY2luZyB0aGUgcGFyYW1z
IHdpdGgKLSAgICAgICAgLy8gZW1wdHkgc3RyaW5ncy4gU28sIHdlIGRvbid0IHRyeSB0byBkbyBh
bnl0aGluZyBoZXJlLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgKmVuY29kaW5nTmFt
ZSA9IGVuY29kaW5nLm5hbWUoKTsKLQogICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRleHRFbGVtZW50
ID0gMDsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgcmVmYWN0b3JpbmcgdGhpcyBjb2RlIHNvIHRo
YXQgd2UgZG9uJ3QgY2FsbCBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKSB0d2ljZS4KICAgICBm
b3IgKFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgaShmb3Jt
LT5hc3NvY2lhdGVkRWxlbWVudHMoKS5iZWdpbigpKTsgaSAhPSBmb3JtLT5hc3NvY2lhdGVkRWxl
bWVudHMoKS5lbmQoKTsgKytpKSB7CiAgICAgICAgIGlmICghKCppKS0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+KCppKTsKKwogICAgICAgICBpZiAoZm9ybUVsZW1lbnQtPmRpc2FibGVkKCkgfHwgZm9ybUVs
ZW1lbnQtPm5hbWUoKS5pc051bGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IGlmICghSXNJbkRlZmF1bHRTdGF0ZShmb3JtRWxlbWVudCkgfHwgZm9ybUVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0ZXh0YXJlYVRhZykpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAot
ICAgICAgICBib29sIGlzVGV4dEVsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGZvcm1FbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CisgICAgICAgIGlmIChmb3Jt
RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSAmJiBmb3JtRWxlbWVudC0+
d2lsbFZhbGlkYXRlKCkpIHsKICAgICAgICAgICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTElucHV0RWxlbWVudCo+KGZvcm1FbGVtZW50KTsK
LSAgICAgICAgICAgIGlmIChpbnB1dC0+aXNGaWxlVXBsb2FkKCkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBUb28gYmlnLCBkb24ndCB0cnkgdG8gaW5kZXggdGhpcy4KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGlucHV0LT5pc1Bhc3N3
b3JkRmllbGQoKSkgewotICAgICAgICAgICAgICAgIC8vIERvbid0IHN0b3JlIHBhc3N3b3JkcyEg
VGhpcyBpcyBtb3N0IGxpa2VseSBhbiBodHRwcyBhbnl3YXkuCisgICAgICAgICAgICAvLyBSZXR1
cm4gbm90aGluZyBpZiBhIGZpbGUgdXBsb2FkIGZpZWxkIG9yIGEgcGFzc3dvcmQgZmllbGQgYXJl
IGZvdW5kLgorICAgICAgICAgICAgaWYgKGlucHV0LT5pc0ZpbGVVcGxvYWQoKSB8fCBpbnB1dC0+
aXNQYXNzd29yZEZpZWxkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAg
ICAgIGlmIChpbnB1dC0+aXNUZXh0RmllbGQoKSkgeworICAgICAgICAgICAgICAgIGlmICh0ZXh0
RWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYXV0by1jb21wbGV0ZSBiYXIg
b25seSBrbm93cyBob3cgdG8gZmlsbCBpbiBvbmUgdmFsdWUuCisgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgZm9ybSBoYXMgbXVsdGlwbGUgZmllbGRzOyBkb24ndCB0cmVhdCBpdCBhcyBzZWFy
Y2hhYmxlLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdGV4dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Kj4oZm9ybUVsZW1lbnQpOwogICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiB0ZXh0RWxlbWVudDsKK30KIAotICAgICAgICAgICAgaWYgKGlucHV0LT5pc1RleHRG
aWVsZCgpKQotICAgICAgICAgICAgICAgIGlzVGV4dEVsZW1lbnQgPSB0cnVlOwotICAgICAgfQor
Ly8gQnVpbGQgYSBzZWFyY2ggc3RyaW5nIGJhc2VkIG9uIGEgZ2l2ZW4gSFRNTEZvcm1FbGVtZW50
IGFuZCBIVE1MSW5wdXRFbGVtZW50CisvLyAKKy8vIFNlYXJjaCBzdHJpbmcgb3V0cHV0IGV4YW1w
bGUgZnJvbSB3d3cuZ29vZ2xlLmNvbToKKy8vICJobD1lbiZzb3VyY2U9aHAmYml3PTEwODUmYmlo
PTg1NCZxPXtzZWFyY2hUZXJtc30mYnRuRz1Hb29nbGUrU2VhcmNoJmFxPWYmYXFpPSZhcWw9Jm9x
PSIKKy8vIAorLy8gUmV0dXJuIGZhbHNlIGlmIHRoZSBwcm92aWRlZCBIVE1MSW5wdXRFbGVtZW50
IGlzIG5vdCBmb3VuZCBpbiB0aGUgZm9ybQorYm9vbCBidWlsZFNlYXJjaFN0cmluZyhjb25zdCBI
VE1MRm9ybUVsZW1lbnQqIGZvcm0sIFZlY3RvcjxjaGFyPiogZW5jb2RlZFN0cmluZywgVGV4dEVu
Y29kaW5nKiBlbmNvZGluZywgY29uc3QgSFRNTElucHV0RWxlbWVudCogdGV4dEVsZW1lbnQpCit7
CisgICAgYm9vbCBpc0VsZW1lbnRGb3VuZCA9IGZhbHNlOyAgIAogCi0gICAgICBGb3JtRGF0YUxp
c3QgZGF0YUxpc3QoZW5jb2RpbmcpOwotICAgICAgaWYgKCFmb3JtRWxlbWVudC0+YXBwZW5kRm9y
bURhdGEoZGF0YUxpc3QsIGZhbHNlKSkKLSAgICAgICAgICBjb250aW51ZTsKKyAgICAvLyBGSVhN
RTogQ29uc2lkZXIgcmVmYWN0b3JpbmcgdGhpcyBjb2RlIHNvIHRoYXQgd2UgZG9uJ3QgY2FsbCBm
b3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKSB0d2ljZS4KKyAgICBmb3IgKFZlY3RvcjxGb3JtQXNz
b2NpYXRlZEVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgaShmb3JtLT5hc3NvY2lhdGVkRWxlbWVu
dHMoKS5iZWdpbigpKTsgaSAhPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5lbmQoKTsgKytp
KSB7CisgICAgICAgIGlmICghKCppKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYg
aXRlbXMgPSBkYXRhTGlzdC5pdGVtcygpOwotICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYgIWl0
ZW1zLmlzRW1wdHkoKSkgewotICAgICAgICAgIGlmICh0ZXh0RWxlbWVudCkgewotICAgICAgICAg
ICAgICAvLyBUaGUgYXV0by1jb21wbGV0ZSBiYXIgb25seSBrbm93cyBob3cgdG8gZmlsbCBpbiBv
bmUgdmFsdWUuCi0gICAgICAgICAgICAgIC8vIFRoaXMgZm9ybSBoYXMgbXVsdGlwbGUgZmllbGRz
OyBkb24ndCB0cmVhdCBpdCBhcyBzZWFyY2hhYmxlLgotICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KGZvcm1FbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIGZvciAoVmVjdG9y
PEZvcm1EYXRhTGlzdDo6SXRlbT46OmNvbnN0X2l0ZXJhdG9yIGooaXRlbXMuYmVnaW4oKSk7IGog
IT0gaXRlbXMuZW5kKCk7ICsraikgewotICAgICAgICAgIC8vIEhhbmRsZSBJU0lOREVYIC8gPGlu
cHV0IG5hbWU9aXNpbmRleD4gc3BlY2lhbGx5LCBidXQgb25seSBpZiBpdCdzCi0gICAgICAgICAg
Ly8gdGhlIGZpcnN0IGVudHJ5LgotICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0
eSgpIHx8IGotPmRhdGEoKSAhPSAiaXNpbmRleCIpIHsKLSAgICAgICAgICAgICAgaWYgKCFlbmNv
ZGVkU3RyaW5nLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5h
cHBlbmQoJyYnKTsKLSAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdB
c0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOwotICAgICAgICAgICAgICBlbmNv
ZGVkU3RyaW5nLT5hcHBlbmQoJz0nKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgKytqOwotICAg
ICAgICAgIGlmIChmb3JtRWxlbWVudCA9PSB0ZXh0RWxlbWVudCkKLSAgICAgICAgICAgICAgZW5j
b2RlZFN0cmluZy0+YXBwZW5kKCJ7c2VhcmNoVGVybXN9IiwgMTMpOwotICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCpl
bmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOwotICAgICAgfQotICAgIH0KKyAgICAgICAgSFRNTEZv
cm1Db250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Kj4oKmkpOwogCi0gICAgcmV0dXJuIHRleHRFbGVtZW50OwotfQorICAgICAgICBp
ZiAoZm9ybUVsZW1lbnQtPmRpc2FibGVkKCkgfHwgZm9ybUVsZW1lbnQtPm5hbWUoKS5pc051bGwo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEZvcm1EYXRhTGlzdCBkYXRhTGlz
dCgqZW5jb2RpbmcpOworICAgICAgICBpZiAoIWZvcm1FbGVtZW50LT5hcHBlbmRGb3JtRGF0YShk
YXRhTGlzdCwgZmFsc2UpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3Qg
VmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT4mIGl0ZW1zID0gZGF0YUxpc3QuaXRlbXMoKTsKIAor
ICAgICAgICBmb3IgKFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+Ojpjb25zdF9pdGVyYXRvciBq
KGl0ZW1zLmJlZ2luKCkpOyBqICE9IGl0ZW1zLmVuZCgpOyArK2opIHsKKyAgICAgICAgICAgIC8v
IEhhbmRsZSBJU0lOREVYIC8gPGlucHV0IG5hbWU9aXNpbmRleD4gc3BlY2lhbGx5LCBidXQgb25s
eSBpZiBpdCdzCisgICAgICAgICAgICAvLyB0aGUgZmlyc3QgZW50cnkuCisgICAgICAgICAgICBp
ZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSB8fCBqLT5kYXRhKCkgIT0gImlzaW5kZXgiKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgnJicpOworICAgICAgICAgICAgICAg
IEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywg
ai0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJz0nKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrajsKKyAgICAgICAgICAgIGlmIChmb3JtRWxl
bWVudCA9PSB0ZXh0RWxlbWVudCkgeworICAgICAgICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFw
cGVuZCgie3NlYXJjaFRlcm1zfSIsIDEzKTsKKyAgICAgICAgICAgICAgICBpc0VsZW1lbnRGb3Vu
ZCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1
aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGlzRWxlbWVudEZvdW5kOworfQogfSAvLyBu
YW1lc3BhY2UKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYlNlYXJjaGFibGVGb3JtRGF0YTo6
V2ViU2VhcmNoYWJsZUZvcm1EYXRhKGNvbnN0IFdlYkZvcm1FbGVtZW50JiBmb3JtKQorV2ViU2Vh
cmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxlRm9ybURhdGEoY29uc3QgV2ViRm9ybUVsZW1l
bnQmIGZvcm0sIGNvbnN0IFdlYklucHV0RWxlbWVudCYgc2VsZWN0ZWRJbnB1dEVsZW1lbnQpCiB7
CiAgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybUVsZW1lbnQgPSBmb3JtLm9wZXJhdG9y
IFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PigpOwogICAgIGNvbnN0IEZyYW1lKiBmcmFtZSA9
IGZvcm1FbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIC8vIE9ubHkgY29uc2lkZXIgZm9ybXMgdGhhdCBHRVQgZGF0YSBh
bmQgdGhlIGFjdGlvbiB0YXJnZXRzIGFuIGh0dHAgcGFnZS4KLSAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UoZm9ybUVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Om1ldGhvZEF0dHIpLCAi
cG9zdCIpIHx8ICFJc0hUVFBGb3JtU3VibWl0KGZvcm1FbGVtZW50LmdldCgpKSkKKyAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBzZWxlY3RlZElucHV0RWxlbWVudC5vcGVyYXRv
ciBQYXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+KCkuZ2V0KCk7CisKKyAgICAvLyBPbmx5IGNv
bnNpZGVyIGZvcm1zIHRoYXQgR0VUIGRhdGEuCisgICAgLy8gQWxsb3cgSFRUUFMgb25seSB3aGVu
IGFuIGlucHV0IGVsZW1lbnQgaXMgcHJvdmlkZWQuIAorICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShmb3JtRWxlbWVudC0+Z2V0QXR0cmlidXRlKG1ldGhvZEF0dHIpLCAicG9zdCIpIAorICAgICAg
ICB8fCAoIUlzSFRUUEZvcm1TdWJtaXQoZm9ybUVsZW1lbnQuZ2V0KCkpICYmICFpbnB1dEVsZW1l
bnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZFN0cmluZzsK
KyAgICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmc7CisKKyAgICBHZXRGb3JtRW5jb2RpbmcoZm9ybUVs
ZW1lbnQuZ2V0KCksICZlbmNvZGluZyk7CisgICAgaWYgKCFlbmNvZGluZy5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgLy8gTmVlZCBhIHZhbGlkIGVuY29kaW5nIHRvIGVuY29kZSB0aGUgZm9ybSBlbGVt
ZW50cy4KKyAgICAgICAgLy8gSWYgdGhlIGVuY29kaW5nIGlzbid0IGZvdW5kIHdlYmtpdCBlbmRz
IHVwIHJlcGxhY2luZyB0aGUgcGFyYW1zIHdpdGgKKyAgICAgICAgLy8gZW1wdHkgc3RyaW5ncy4g
U28sIHdlIGRvbid0IHRyeSB0byBkbyBhbnl0aGluZyBoZXJlLgorICAgICAgICByZXR1cm47Cisg
ICAgfSAKKworICAgIC8vIExvb2sgZm9yIGEgc3VpdGFibGUgc2VhcmNoIHRleHQgZmllbGQgaW4g
dGhlIGZvcm0gd2hlbiBhIAorICAgIC8vIHNlbGVjdGVkSW5wdXRFbGVtZW50IGlzIG5vdCBwcm92
aWRlZC4KKyAgICBpZiAoIWlucHV0RWxlbWVudCkgeworICAgICAgICBpbnB1dEVsZW1lbnQgPSBm
aW5kU3VpdGFibGVTZWFyY2hJbnB1dEVsZW1lbnQoZm9ybUVsZW1lbnQuZ2V0KCkpOworCisgICAg
ICAgIC8vIFJldHVybiBpZiBubyBzdWl0YWJsZSB0ZXh0IGVsZW1lbnQgaGFzIGJlZW4gZm91bmQu
CisgICAgICAgIGlmICghaW5wdXRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZpcnN0U3VibWl0QnV0dG9uID0gR2V0QnV0
dG9uVG9BY3RpdmF0ZShmb3JtRWxlbWVudC5nZXQoKSk7CiAgICAgaWYgKGZpcnN0U3VibWl0QnV0
dG9uKSB7CiAgICAgICAgIC8vIFRoZSBmb3JtIGRvZXMgbm90IGhhdmUgYW4gYWN0aXZlIHN1Ym1p
dCBidXR0b24sIG1ha2UgdGhlIGZpcnN0IGJ1dHRvbgpAQCAtMjQxLDIyICsyNzYsMjIgQEAgV2Vi
U2VhcmNoYWJsZUZvcm1EYXRhOjpXZWJTZWFyY2hhYmxlRm9ybQogICAgICAgICAvLyBuYW1lIG9m
IHRoZSBzdWJtaXQgYnV0dG9uLgogICAgICAgICBmaXJzdFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZh
dGVkU3VibWl0KHRydWUpOwogICAgIH0KLSAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZFN0cmluZzsK
LSAgICBTdHJpbmcgZW5jb2Rpbmc7Ci0gICAgYm9vbCBoYXNFbGVtZW50ID0gSGFzU3VpdGFibGVU
ZXh0RWxlbWVudChmb3JtRWxlbWVudC5nZXQoKSwgJmVuY29kZWRTdHJpbmcsICZlbmNvZGluZyk7
CisKKyAgICBib29sIGlzVmFsaWRTZWFyY2hTdHJpbmcgPSBidWlsZFNlYXJjaFN0cmluZyhmb3Jt
RWxlbWVudC5nZXQoKSwgJmVuY29kZWRTdHJpbmcsICZlbmNvZGluZywgaW5wdXRFbGVtZW50KTsK
KwogICAgIGlmIChmaXJzdFN1Ym1pdEJ1dHRvbikKICAgICAgICAgZmlyc3RTdWJtaXRCdXR0b24t
PnNldEFjdGl2YXRlZFN1Ym1pdChmYWxzZSk7Ci0gICAgaWYgKCFoYXNFbGVtZW50KSB7Ci0gICAg
ICAgIC8vIE5vdCBhIHNlYXJjaGFibGUgZm9ybS4KKworICAgIC8vIFJldHVybiBpZiB0aGUgc2Vh
cmNoIHN0cmluZyBpcyBub3QgdmFsaWQuIAorICAgIGlmICghaXNWYWxpZFNlYXJjaFN0cmluZykK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIFN0cmluZyBhY3Rpb24oZm9ybUVsZW1lbnQt
PmFjdGlvbigpKTsKICAgICBLVVJMIHVybChmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKGFj
dGlvbi5pc051bGwoKSA/ICIiIDogYWN0aW9uKSk7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiBmb3Jt
RGF0YSA9IEZvcm1EYXRhOjpjcmVhdGUoZW5jb2RlZFN0cmluZyk7CiAgICAgdXJsLnNldFF1ZXJ5
KGZvcm1EYXRhLT5mbGF0dGVuVG9TdHJpbmcoKSk7CiAgICAgbV91cmwgPSB1cmw7Ci0gICAgbV9l
bmNvZGluZyA9IGVuY29kaW5nOworICAgIG1fZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcubmFt
ZSgpKTsgCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>