<?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>50246</bug_id>
          
          <creation_ts>2010-11-30 10:24:34 -0800</creation_ts>
          <short_desc>[v8] put all the implicitly reachable style elements into single v8 group</short_desc>
          <delta_ts>2010-12-07 22:46:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="anton muhin">antonm</reporter>
          <assigned_to name="anton muhin">antonm</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>japhet</cc>
    
    <cc>levin</cc>
    
    <cc>loislo</cc>
    
    <cc>ojan</cc>
    
    <cc>pfeldman</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>315138</commentid>
    <comment_count>0</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-11-30 10:24:34 -0800</bug_when>
    <thetext>See http://code.google.com/p/chromium/issues/detail?id=64695

the problem is simple and alike to the problem of implicit references between nodes in document tree.  The solution is to group all the style elements which are reachable via DOM API into v8&apos;s object group.

I don&apos;t know details of style elements reachability, so I do the same thing we do for nodes: I group all the style elements which belong to the same tree as determined by the root element of the tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315146</commentid>
    <comment_count>1</comment_count>
      <attachid>75165</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-11-30 10:38:30 -0800</bug_when>
    <thetext>Created attachment 75165
Group all style elements in v8 object group</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315196</commentid>
    <comment_count>2</comment_count>
      <attachid>75174</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-11-30 11:36:41 -0800</bug_when>
    <thetext>Created attachment 75174
[minor] proper diff

Proper diff---the previous one fail to apply</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315199</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-30 11:38:48 -0800</bug_when>
    <thetext>Attachment 75174 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebCore/ChangeLog&apos;, u&apos;WebCore/bindings/v8/V8DOMMap.h&apos;, u&apos;WebCore/bindings/v8/V8GCController.cpp&apos;]&quot; exit_code: 1
WebCore/bindings/v8/V8GCController.cpp:45:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/V8GCController.cpp:50:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/V8GCController.cpp:358:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/bindings/v8/V8GCController.cpp:362:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 3 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>315200</commentid>
    <comment_count>4</comment_count>
      <attachid>75175</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-11-30 11:43:37 -0800</bug_when>
    <thetext>Created attachment 75175
Fixing style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315202</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-30 11:46:15 -0800</bug_when>
    <thetext>Attachment 75175 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebCore/ChangeLog&apos;, u&apos;WebCore/bindings/v8/V8DOMMap.h&apos;, u&apos;WebCore/bindings/v8/V8GCController.cpp&apos;]&quot; exit_code: 1
WebCore/bindings/v8/V8GCController.cpp:49:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 3 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>315216</commentid>
    <comment_count>6</comment_count>
      <attachid>75178</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-11-30 11:57:52 -0800</bug_when>
    <thetext>Created attachment 75178
Next round of style fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315528</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-30 22:14:53 -0800</bug_when>
    <thetext>Does this also fix (or could it be extended slightly to fix)
  http://trac.webkit.org/changeset/72344
and
  http://trac.webkit.org/changeset/72590
?

Also, it seems like this should remove the corresponding lines in test_expectations:
BUG_LOISLO : fast/dom/StyleSheet/gc-rule-children-wrappers.html = TEXT
BUG_LEVIN : fast/dom/StyleSheet/gc-inline-style-cssvalues.html = TEXT
BUG_LEVIN : fast/dom/StyleSheet/gc-styleheet-wrapper.xhtml = TEXT
BUGCR64695 : fast/dom/StyleSheet/gc-parent-rule.html = TEXT
BUGCR64695 : fast/dom/StyleSheet/gc-parent-stylesheet.html = TEXT
BUGCR64695 : fast/dom/StyleSheet/gc-declaration-parent-rule.html = TEXT

Trivial nit: ObjectGrouperVisitor::startMap (endMap) need 4 space indenting.

cc&apos;ed a few folks whom I believe know v8 well enough to review this effectively.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315529</commentid>
    <comment_count>8</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-30 22:16:16 -0800</bug_when>
    <thetext>Added someone else who may find it interesting (since they also added a line in test expectations that could be fixed by this).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315739</commentid>
    <comment_count>9</comment_count>
      <attachid>75291</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-12-01 10:50:09 -0800</bug_when>
    <thetext>Created attachment 75291
Another style nit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315740</commentid>
    <comment_count>10</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-12-01 10:53:34 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Does this also fix (or could it be extended slightly to fix)
&gt;   http://trac.webkit.org/changeset/72344
&gt; and
&gt;   http://trac.webkit.org/changeset/72590
&gt; ?
&gt; 
&gt; Also, it seems like this should remove the corresponding lines in test_expectations:
&gt; BUG_LOISLO : fast/dom/StyleSheet/gc-rule-children-wrappers.html = TEXT
&gt; BUG_LEVIN : fast/dom/StyleSheet/gc-inline-style-cssvalues.html = TEXT
&gt; BUG_LEVIN : fast/dom/StyleSheet/gc-styleheet-wrapper.xhtml = TEXT
&gt; BUGCR64695 : fast/dom/StyleSheet/gc-parent-rule.html = TEXT
&gt; BUGCR64695 : fast/dom/StyleSheet/gc-parent-stylesheet.html = TEXT
&gt; BUGCR64695 : fast/dom/StyleSheet/gc-declaration-parent-rule.html = TEXT

Chances are high.  It&apos;s not quite convenient for me to run X apps (like test_shell) this week as I am traveling.  I can do it myself next week and clean unnecessary suppressions.

I&apos;ll try to fix reminding problems too.


&gt; 
&gt; Trivial nit: ObjectGrouperVisitor::startMap (endMap) need 4 space indenting.

Thanks a lot, fixed.

&gt; 
&gt; cc&apos;ed a few folks whom I believe know v8 well enough to review this effectively.

Ojan is going to run my patch through layout tests and see if it&apos;s good.

BTW, I&apos;d esp. appreciate a look from people who are good in WebKit CSS model---we need to ensure that all implicitly style elements are put into v8&apos;s object group.

Thanks a lot for your help, David.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316357</commentid>
    <comment_count>11</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-12-02 12:47:10 -0800</bug_when>
    <thetext>I did run the test through layout tests. It fixed fast/dom/StyleSheet/gc-parent-rule.html and fast/dom/StyleSheet/gc-parent-stylesheet.html, but not fast/dom/StyleSheet/gc-declaration-parent-rule.html.

I&apos;d prefer someone more familiar with V8 bindings review this though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316456</commentid>
    <comment_count>12</comment_count>
      <attachid>75291</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-02 15:34:06 -0800</bug_when>
    <thetext>Comment on attachment 75291
Another style nit

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

I&apos;m not sure I understand this part of the V8 bindings well enough to give it a thorough review, but I&apos;ll take a stab at it...

&gt; WebCore/bindings/v8/V8GCController.cpp:330
&gt; +        /* FIXME: Re-enabled this code to avoid GCing these wrappers!
&gt; +                      Currently this depends on looking up the wrapper
&gt; +                      during a GC, but we don&apos;t know which isolated world
&gt; +                      we&apos;re in, so it&apos;s unclear which map to look in...

Are this FIXME and commented-out block still valid?  I&apos;m just confused because it appears they didn&apos;t move with the surrounding code.

&gt; WebCore/bindings/v8/V8GCController.cpp:357
&gt; +class ObjectGrouperVisitor : public DOMWrapperMap&lt;void&gt;::Visitor {
&gt; +public:
&gt; +    ObjectGrouperVisitor()
&gt; +    {
&gt; +    }
&gt;  

This name seems too generic for what this class is doing (or am I misunderstanding?).  Perhaps StyleBaseGrouperVisitor?

&gt; WebCore/bindings/v8/V8GCController.cpp:378
&gt; +        // FIXME: extend WrapperTypeInfo with isStyle to simplify the check below.
&gt; +        // FIXME: check if there are other StyleBase wrappers we should care of.
&gt; +        if (!V8CSSStyleSheet::info.equals(typeInfo)
&gt; +            &amp;&amp; !V8CSSCharsetRule::info.equals(typeInfo)
&gt; +            &amp;&amp; !V8CSSFontFaceRule::info.equals(typeInfo)
&gt; +            &amp;&amp; !V8CSSStyleRule::info.equals(typeInfo)
&gt; +            &amp;&amp; !V8CSSImportRule::info.equals(typeInfo)
&gt; +            &amp;&amp; !V8CSSMediaRule::info.equals(typeInfo)) {

A simplification is definitely desirable, though I&apos;m fine if it&apos;s in a separate patch. Unfortunately, StyleBase doesn&apos;t have an idl, so we&apos;d either need to cheat with an idl attribute (or dummy idl, i suppose), or maintain an Evil List in CodeGeneratorV8.pm, a la ActiveDOMObject.

&gt; WebCore/bindings/v8/V8GCController.cpp:423
&gt;      ObjectGrouperVisitor objectGrouperVisitor;
&gt; -    visitDOMNodesInCurrentThread(&amp;objectGrouperVisitor);
&gt; -    objectGrouperVisitor.applyGrouping();
&gt; +    visitDOMObjectsInCurrentThread(&amp;objectGrouperVisitor);

This call to visitDOMObjectsInCurrentThread() looks like it might now be equivalent to the NDEBUG block a few lines above.  Is it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316601</commentid>
    <comment_count>13</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-12-02 18:42:28 -0800</bug_when>
    <thetext>Thanks a lot for comments, Nate!

(In reply to comment #12)
&gt; (From update of attachment 75291 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75291&amp;action=review
&gt; 
&gt; I&apos;m not sure I understand this part of the V8 bindings well enough to give it a thorough review, but I&apos;ll take a stab at it...
&gt; 
&gt; &gt; WebCore/bindings/v8/V8GCController.cpp:330
&gt; &gt; +        /* FIXME: Re-enabled this code to avoid GCing these wrappers!
&gt; &gt; +                      Currently this depends on looking up the wrapper
&gt; &gt; +                      during a GC, but we don&apos;t know which isolated world
&gt; &gt; +                      we&apos;re in, so it&apos;s unclear which map to look in...
&gt; 
&gt; Are this FIXME and commented-out block still valid?  I&apos;m just confused because it appears they didn&apos;t move with the surrounding code.

Kind of.  The additional grouping in the comments should be applied when traversing DOM nodes (I am planning to fix it with the next commit), but it&apos;s not generic and, for example, is not applicable for style traversal (at least I think so).

&gt; &gt; WebCore/bindings/v8/V8GCController.cpp:357
&gt; &gt; +class ObjectGrouperVisitor : public DOMWrapperMap&lt;void&gt;::Visitor {
&gt; &gt; +public:
&gt; &gt; +    ObjectGrouperVisitor()
&gt; &gt; +    {
&gt; &gt; +    }
&gt; &gt;  
&gt; 
&gt; This name seems too generic for what this class is doing (or am I misunderstanding?).  Perhaps StyleBaseGrouperVisitor?

Let me explain the reason I named it this way, and if you disagree, I&apos;ll rename.  I wanted to capture the idea of grouping of the DOM objects (vs. DOM nodes).  Currently it groups only styles, but if there is a need to group some other objects, the code could naturally go in there, hence generic &quot;object&quot; as opposite to &quot;node&quot;.  Maybe something referencing DOMObject would be better.

&gt; &gt; WebCore/bindings/v8/V8GCController.cpp:378
&gt; &gt; +        // FIXME: extend WrapperTypeInfo with isStyle to simplify the check below.
&gt; &gt; +        // FIXME: check if there are other StyleBase wrappers we should care of.
&gt; &gt; +        if (!V8CSSStyleSheet::info.equals(typeInfo)
&gt; &gt; +            &amp;&amp; !V8CSSCharsetRule::info.equals(typeInfo)
&gt; &gt; +            &amp;&amp; !V8CSSFontFaceRule::info.equals(typeInfo)
&gt; &gt; +            &amp;&amp; !V8CSSStyleRule::info.equals(typeInfo)
&gt; &gt; +            &amp;&amp; !V8CSSImportRule::info.equals(typeInfo)
&gt; &gt; +            &amp;&amp; !V8CSSMediaRule::info.equals(typeInfo)) {
&gt; 
&gt; A simplification is definitely desirable, though I&apos;m fine if it&apos;s in a separate patch. Unfortunately, StyleBase doesn&apos;t have an idl, so we&apos;d either need to cheat with an idl attribute (or dummy idl, i suppose), or maintain an Evil List in CodeGeneratorV8.pm, a la ActiveDOMObject.

Thanks, I&apos;d prefer to postpone it then.

&gt; &gt; WebCore/bindings/v8/V8GCController.cpp:423
&gt; &gt;      ObjectGrouperVisitor objectGrouperVisitor;
&gt; &gt; -    visitDOMNodesInCurrentThread(&amp;objectGrouperVisitor);
&gt; &gt; -    objectGrouperVisitor.applyGrouping();
&gt; &gt; +    visitDOMObjectsInCurrentThread(&amp;objectGrouperVisitor);
&gt; 
&gt; This call to visitDOMObjectsInCurrentThread() looks like it might now be equivalent to the NDEBUG block a few lines above.  Is it?

Sorry, I am not sure I understand you: we use different visitors here.  What am I missing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316881</commentid>
    <comment_count>14</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-03 10:35:01 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Thanks a lot for comments, Nate!
&gt; 
&gt; (In reply to comment #12)
&gt; &gt; (From update of attachment 75291 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75291&amp;action=review
&gt; &gt; 
&gt; &gt; I&apos;m not sure I understand this part of the V8 bindings well enough to give it a thorough review, but I&apos;ll take a stab at it...
&gt; &gt; 
&gt; &gt; &gt; WebCore/bindings/v8/V8GCController.cpp:330
&gt; &gt; &gt; +        /* FIXME: Re-enabled this code to avoid GCing these wrappers!
&gt; &gt; &gt; +                      Currently this depends on looking up the wrapper
&gt; &gt; &gt; +                      during a GC, but we don&apos;t know which isolated world
&gt; &gt; &gt; +                      we&apos;re in, so it&apos;s unclear which map to look in...
&gt; &gt; 
&gt; &gt; Are this FIXME and commented-out block still valid?  I&apos;m just confused because it appears they didn&apos;t move with the surrounding code.
&gt; 
&gt; Kind of.  The additional grouping in the comments should be applied when traversing DOM nodes (I am planning to fix it with the next commit), but it&apos;s not generic and, for example, is not applicable for style traversal (at least I think so).

Ok, I just wanted to make sure it hadn&apos;t been forgotten.

&gt; 
&gt; &gt; &gt; WebCore/bindings/v8/V8GCController.cpp:357
&gt; &gt; &gt; +class ObjectGrouperVisitor : public DOMWrapperMap&lt;void&gt;::Visitor {
&gt; &gt; &gt; +public:
&gt; &gt; &gt; +    ObjectGrouperVisitor()
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +    }
&gt; &gt; &gt;  
&gt; &gt; 
&gt; &gt; This name seems too generic for what this class is doing (or am I misunderstanding?).  Perhaps StyleBaseGrouperVisitor?
&gt; 
&gt; Let me explain the reason I named it this way, and if you disagree, I&apos;ll rename.  I wanted to capture the idea of grouping of the DOM objects (vs. DOM nodes).  Currently it groups only styles, but if there is a need to group some other objects, the code could naturally go in there, hence generic &quot;object&quot; as opposite to &quot;node&quot;.  Maybe something referencing DOMObject would be better.

That seems reasonable to me (I was assuming that we wouldn&apos;t be grouping other types of objects in this way, but that&apos;s a silly assumption).  Perhaps DOMObjectGrouperVisitor then?

&gt; 
&gt; &gt; &gt; WebCore/bindings/v8/V8GCController.cpp:378
&gt; &gt; &gt; +        // FIXME: extend WrapperTypeInfo with isStyle to simplify the check below.
&gt; &gt; &gt; +        // FIXME: check if there are other StyleBase wrappers we should care of.
&gt; &gt; &gt; +        if (!V8CSSStyleSheet::info.equals(typeInfo)
&gt; &gt; &gt; +            &amp;&amp; !V8CSSCharsetRule::info.equals(typeInfo)
&gt; &gt; &gt; +            &amp;&amp; !V8CSSFontFaceRule::info.equals(typeInfo)
&gt; &gt; &gt; +            &amp;&amp; !V8CSSStyleRule::info.equals(typeInfo)
&gt; &gt; &gt; +            &amp;&amp; !V8CSSImportRule::info.equals(typeInfo)
&gt; &gt; &gt; +            &amp;&amp; !V8CSSMediaRule::info.equals(typeInfo)) {
&gt; &gt; 
&gt; &gt; A simplification is definitely desirable, though I&apos;m fine if it&apos;s in a separate patch. Unfortunately, StyleBase doesn&apos;t have an idl, so we&apos;d either need to cheat with an idl attribute (or dummy idl, i suppose), or maintain an Evil List in CodeGeneratorV8.pm, a la ActiveDOMObject.
&gt; 
&gt; Thanks, I&apos;d prefer to postpone it then.
&gt; 
&gt; &gt; &gt; WebCore/bindings/v8/V8GCController.cpp:423
&gt; &gt; &gt;      ObjectGrouperVisitor objectGrouperVisitor;
&gt; &gt; &gt; -    visitDOMNodesInCurrentThread(&amp;objectGrouperVisitor);
&gt; &gt; &gt; -    objectGrouperVisitor.applyGrouping();
&gt; &gt; &gt; +    visitDOMObjectsInCurrentThread(&amp;objectGrouperVisitor);
&gt; &gt; 
&gt; &gt; This call to visitDOMObjectsInCurrentThread() looks like it might now be equivalent to the NDEBUG block a few lines above.  Is it?
&gt; 
&gt; Sorry, I am not sure I understand you: we use different visitors here.  What am I missing?

Ah, yes, I misread the code in the NDEBUG block, they are different visitor types. Sorry about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316986</commentid>
    <comment_count>15</comment_count>
      <attachid>75531</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-12-03 13:07:02 -0800</bug_when>
    <thetext>Created attachment 75531
Addressing Nate&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316993</commentid>
    <comment_count>16</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-12-03 13:11:16 -0800</bug_when>
    <thetext>Thanks for another round, Nate.  I&apos;ve ended up renaming to DOMObjectGrouperVisitor (yummy).  May you have another look, please?

(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; Thanks a lot for comments, Nate!
&gt; &gt; 
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; (From update of attachment 75291 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75291&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m not sure I understand this part of the V8 bindings well enough to give it a thorough review, but I&apos;ll take a stab at it...
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; WebCore/bindings/v8/V8GCController.cpp:330
&gt; &gt; &gt; &gt; +        /* FIXME: Re-enabled this code to avoid GCing these wrappers!
&gt; &gt; &gt; &gt; +                      Currently this depends on looking up the wrapper
&gt; &gt; &gt; &gt; +                      during a GC, but we don&apos;t know which isolated world
&gt; &gt; &gt; &gt; +                      we&apos;re in, so it&apos;s unclear which map to look in...
&gt; &gt; &gt; 
&gt; &gt; &gt; Are this FIXME and commented-out block still valid?  I&apos;m just confused because it appears they didn&apos;t move with the surrounding code.
&gt; &gt; 
&gt; &gt; Kind of.  The additional grouping in the comments should be applied when traversing DOM nodes (I am planning to fix it with the next commit), but it&apos;s not generic and, for example, is not applicable for style traversal (at least I think so).
&gt; 
&gt; Ok, I just wanted to make sure it hadn&apos;t been forgotten.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; &gt; WebCore/bindings/v8/V8GCController.cpp:357
&gt; &gt; &gt; &gt; +class ObjectGrouperVisitor : public DOMWrapperMap&lt;void&gt;::Visitor {
&gt; &gt; &gt; &gt; +public:
&gt; &gt; &gt; &gt; +    ObjectGrouperVisitor()
&gt; &gt; &gt; &gt; +    {
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt;  
&gt; &gt; &gt; 
&gt; &gt; &gt; This name seems too generic for what this class is doing (or am I misunderstanding?).  Perhaps StyleBaseGrouperVisitor?
&gt; &gt; 
&gt; &gt; Let me explain the reason I named it this way, and if you disagree, I&apos;ll rename.  I wanted to capture the idea of grouping of the DOM objects (vs. DOM nodes).  Currently it groups only styles, but if there is a need to group some other objects, the code could naturally go in there, hence generic &quot;object&quot; as opposite to &quot;node&quot;.  Maybe something referencing DOMObject would be better.
&gt; 
&gt; That seems reasonable to me (I was assuming that we wouldn&apos;t be grouping other types of objects in this way, but that&apos;s a silly assumption).  Perhaps DOMObjectGrouperVisitor then?
&gt; 
&gt; &gt; 
&gt; &gt; &gt; &gt; WebCore/bindings/v8/V8GCController.cpp:378
&gt; &gt; &gt; &gt; +        // FIXME: extend WrapperTypeInfo with isStyle to simplify the check below.
&gt; &gt; &gt; &gt; +        // FIXME: check if there are other StyleBase wrappers we should care of.
&gt; &gt; &gt; &gt; +        if (!V8CSSStyleSheet::info.equals(typeInfo)
&gt; &gt; &gt; &gt; +            &amp;&amp; !V8CSSCharsetRule::info.equals(typeInfo)
&gt; &gt; &gt; &gt; +            &amp;&amp; !V8CSSFontFaceRule::info.equals(typeInfo)
&gt; &gt; &gt; &gt; +            &amp;&amp; !V8CSSStyleRule::info.equals(typeInfo)
&gt; &gt; &gt; &gt; +            &amp;&amp; !V8CSSImportRule::info.equals(typeInfo)
&gt; &gt; &gt; &gt; +            &amp;&amp; !V8CSSMediaRule::info.equals(typeInfo)) {
&gt; &gt; &gt; 
&gt; &gt; &gt; A simplification is definitely desirable, though I&apos;m fine if it&apos;s in a separate patch. Unfortunately, StyleBase doesn&apos;t have an idl, so we&apos;d either need to cheat with an idl attribute (or dummy idl, i suppose), or maintain an Evil List in CodeGeneratorV8.pm, a la ActiveDOMObject.
&gt; &gt; 
&gt; &gt; Thanks, I&apos;d prefer to postpone it then.
&gt; &gt; 
&gt; &gt; &gt; &gt; WebCore/bindings/v8/V8GCController.cpp:423
&gt; &gt; &gt; &gt;      ObjectGrouperVisitor objectGrouperVisitor;
&gt; &gt; &gt; &gt; -    visitDOMNodesInCurrentThread(&amp;objectGrouperVisitor);
&gt; &gt; &gt; &gt; -    objectGrouperVisitor.applyGrouping();
&gt; &gt; &gt; &gt; +    visitDOMObjectsInCurrentThread(&amp;objectGrouperVisitor);
&gt; &gt; &gt; 
&gt; &gt; &gt; This call to visitDOMObjectsInCurrentThread() looks like it might now be equivalent to the NDEBUG block a few lines above.  Is it?
&gt; &gt; 
&gt; &gt; Sorry, I am not sure I understand you: we use different visitors here.  What am I missing?
&gt; 
&gt; Ah, yes, I misread the code in the NDEBUG block, they are different visitor types. Sorry about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317001</commentid>
    <comment_count>17</comment_count>
      <attachid>75534</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-12-03 13:14:05 -0800</bug_when>
    <thetext>Created attachment 75534
WebKit hacking from Chromium checkout over ssh sucks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317063</commentid>
    <comment_count>18</comment_count>
      <attachid>75534</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-03 14:41:23 -0800</bug_when>
    <thetext>Comment on attachment 75534
WebKit hacking from Chromium checkout over ssh sucks

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

&gt; WebCore/ChangeLog:22
&gt; +        (WebCore::ObjectGrouperVisitor::ObjectGrouperVisitor):
&gt; +        (WebCore::ObjectGrouperVisitor::startMap):
&gt; +        (WebCore::ObjectGrouperVisitor::endMap):
&gt; +        (WebCore::ObjectGrouperVisitor::visitDOMWrapper):

Nit: this didn&apos;t get changed to DOMObjectGrouperVisitor.

&gt; WebCore/bindings/v8/V8GCController.cpp:385
&gt; +        StyleBase* styleBase = static_cast&lt;StyleBase*&gt;(object);
&gt;  
&gt; -            ASSERT(i == nextKeyIndex);
&gt; +        // We put the whole tree of style elements into a single object group.
&gt; +        // To achieve that we group elements by the roots of their trees.
&gt; +        StyleBase* root = styleBase;

I wish there were a way for this code to be clear without needing styleBase as a separate variable (it&apos;s only use is to initialize root), but I don&apos;t immediately see what it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318147</commentid>
    <comment_count>19</comment_count>
      <attachid>75804</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-12-07 05:43:29 -0800</bug_when>
    <thetext>Created attachment 75804
Last minor fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318148</commentid>
    <comment_count>20</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-12-07 05:46:21 -0800</bug_when>
    <thetext>Thanks a lot, Nate.  Fixing and cq+&apos;ing

(In reply to comment #18)
&gt; (From update of attachment 75534 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75534&amp;action=review
&gt; 
&gt; &gt; WebCore/ChangeLog:22
&gt; &gt; +        (WebCore::ObjectGrouperVisitor::ObjectGrouperVisitor):
&gt; &gt; +        (WebCore::ObjectGrouperVisitor::startMap):
&gt; &gt; +        (WebCore::ObjectGrouperVisitor::endMap):
&gt; &gt; +        (WebCore::ObjectGrouperVisitor::visitDOMWrapper):
&gt; 
&gt; Nit: this didn&apos;t get changed to DOMObjectGrouperVisitor.
&gt; 
&gt; &gt; WebCore/bindings/v8/V8GCController.cpp:385
&gt; &gt; +        StyleBase* styleBase = static_cast&lt;StyleBase*&gt;(object);
&gt; &gt;  
&gt; &gt; -            ASSERT(i == nextKeyIndex);
&gt; &gt; +        // We put the whole tree of style elements into a single object group.
&gt; &gt; +        // To achieve that we group elements by the roots of their trees.
&gt; &gt; +        StyleBase* root = styleBase;
&gt; 
&gt; I wish there were a way for this code to be clear without needing styleBase as a separate variable (it&apos;s only use is to initialize root), but I don&apos;t immediately see what it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318149</commentid>
    <comment_count>21</comment_count>
      <attachid>75805</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-12-07 05:49:15 -0800</bug_when>
    <thetext>Created attachment 75805
With proper reviewed by</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318658</commentid>
    <comment_count>22</comment_count>
      <attachid>75805</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-07 22:46:08 -0800</bug_when>
    <thetext>Comment on attachment 75805
With proper reviewed by

Clearing flags on attachment: 75805

Committed r73491: &lt;http://trac.webkit.org/changeset/73491&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318659</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-07 22:46:15 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75165</attachid>
            <date>2010-11-30 10:38:30 -0800</date>
            <delta_ts>2010-11-30 11:36:41 -0800</delta_ts>
            <desc>Group all style elements in v8 object group</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>11063</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDcyOTMx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMTEt
MzAgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQb3J0IGh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvY2hhbmdlc2V0LzcyODE5LyB0byB2OC1iYWNrZWQgcG9ydHMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDI0NgorCisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhET01NYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0V2Vha1JlZmVyZW5j
ZU1hcDo6VmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RXZWFr
UmVmZXJlbmNlTWFwOjpWaXNpdG9yOjplbmRNYXApOgorICAgICAgICAoV2ViQ29yZTo6V2Vha1Jl
ZmVyZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdyb3VwZXJJdGVtOjpHcm91cGVySXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcm91cGVySXRlbTo6Z3JvdXBJZCk6CisgICAgICAgIChXZWJDb3JlOjpt
YWtlVjhPYmplY3RHcm91cHMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9y
OjpOb2RlR3JvdXBlclZpc2l0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNp
dG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNp
dG9yOjphcHBseUdyb3VwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdEdyb3VwZXJWaXNp
dG9yOjpPYmplY3RHcm91cGVyVmlzaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RHcm91
cGVyVmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0R3JvdXBlclZp
c2l0b3I6OmVuZE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RHcm91cGVyVmlzaXRvcjo6
dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4R0NDb250cm9sbGVyOjpnY1By
b2xvZ3VlKToKKwogMjAxMC0xMS0zMCAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQuCkluZGV4OiBiaW5kaW5ncy92OC9WOEdD
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiA3MjgxOSkKKysrIGJpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTIgQEAKICNpbmNsdWRlICJTVkdFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKKyNpbmNsdWRl
ICJWOENTU0NoYXJzZXRSdWxlLmgiCisjaW5jbHVkZSAiVjhDU1NGb250RmFjZVJ1bGUuaCIKKyNp
bmNsdWRlICJWOENTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU01lZGlhUnVsZS5oIgor
I2luY2x1ZGUgIlY4Q1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIlY4Q1NTU3R5bGVSdWxlLmgi
CiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNs
dWRlICJXcmFwcGVyVHlwZUluZm8uaCIKQEAgLTIxMywyMCArMjE5LDE3IEBACiAKIGNsYXNzIEdy
b3VwZXJJdGVtIHsKIHB1YmxpYzoKLSAgICBHcm91cGVySXRlbSh1aW50cHRyX3QgZ3JvdXBJZCwg
Tm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgCisgICAgR3Jv
dXBlckl0ZW0odWludHB0cl90IGdyb3VwSWQsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdy
YXBwZXIpIAogICAgICAgICA6IG1fZ3JvdXBJZChncm91cElkKQotICAgICAgICAsIG1fbm9kZShu
b2RlKQogICAgICAgICAsIG1fd3JhcHBlcih3cmFwcGVyKSAKICAgICAgICAgewogICAgICAgICB9
CiAKICAgICB1aW50cHRyX3QgZ3JvdXBJZCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JvdXBJZDsgfQot
ICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyOyB9CiAK
IHByaXZhdGU6CiAgICAgdWludHB0cl90IG1fZ3JvdXBJZDsKLSAgICBOb2RlKiBtX25vZGU7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV93cmFwcGVyOwogfTsKIApAQCAtMjM3LDE2
ICsyNDAsNTUgQEAKIAogdHlwZWRlZiBWZWN0b3I8R3JvdXBlckl0ZW0+IEdyb3VwZXJMaXN0Owog
Ci1jbGFzcyBPYmplY3RHcm91cGVyVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPE5vZGU+
OjpWaXNpdG9yIHsKK3ZvaWQgbWFrZVY4T2JqZWN0R3JvdXBzKEdyb3VwZXJMaXN0JiBncm91cGVy
KQoreworICAgIC8vIEdyb3VwIGJ5IHNvcnRpbmcgYnkgdGhlIGdyb3VwIGlkLgorICAgIHN0ZDo6
c29ydChncm91cGVyLmJlZ2luKCksIGdyb3VwZXIuZW5kKCkpOworCisgICAgLy8gRklYTUUgU2hv
dWxkIHByb2JhYmx5IHdvcmsgaW4gaXRlcmF0b3JzIGhlcmUsIGJ1dCBpbmRleGVzIHdlcmUgZWFz
aWVyIGZvciBteSBzaW1wbGUgbWluZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyb3Vw
ZXIuc2l6ZSgpOyApIHsKKyAgICAgICAgLy8gU2VlayB0byB0aGUgbmV4dCBrZXkgKG9yIHRoZSBl
bmQgb2YgdGhlIGxpc3QpLgorICAgICAgICBzaXplX3QgbmV4dEtleUluZGV4ID0gZ3JvdXBlci5z
aXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwgZ3JvdXBlci5zaXplKCk7ICsr
aikgeworICAgICAgICAgICAgaWYgKGdyb3VwZXJbaV0uZ3JvdXBJZCgpICE9IGdyb3VwZXJbal0u
Z3JvdXBJZCgpKSB7CisgICAgICAgICAgICAgICAgbmV4dEtleUluZGV4ID0gajsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFTU0VS
VChuZXh0S2V5SW5kZXggPiBpKTsKKworICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYSBn
cm91cCBpZiBpdCBoYXMgbW9yZSB0aGFuIG9uZSBvYmplY3QuIElmIGl0IG9ubHkKKyAgICAgICAg
Ly8gaGFzIG9uZSBvYmplY3QsIGl0IGhhcyBub3RoaW5nIGVsc2UgdGhhdCBuZWVkcyB0byBiZSBr
ZXB0IGFsaXZlLgorICAgICAgICBpZiAobmV4dEtleUluZGV4IC0gaSA8PSAxKSB7CisgICAgICAg
ICAgICBpID0gbmV4dEtleUluZGV4OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGdyb3VwOworICAg
ICAgICBncm91cC5yZXNlcnZlQ2FwYWNpdHkobmV4dEtleUluZGV4IC0gaSk7CisgICAgICAgIGZv
ciAoOyBpIDwgbmV4dEtleUluZGV4OyArK2kpIHsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpWYWx1ZT4gd3JhcHBlciA9IGdyb3VwZXJbaV0ud3JhcHBlcigpOworICAgICAgICAgICAg
aWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBncm91cC5hcHBlbmQod3Jh
cHBlcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3JvdXAuc2l6ZSgpID4gMSkKKyAgICAg
ICAgICAgIHY4OjpWODo6QWRkT2JqZWN0R3JvdXAoJmdyb3VwWzBdLCBncm91cC5zaXplKCkpOwor
CisgICAgICAgIEFTU0VSVChpID09IG5leHRLZXlJbmRleCk7CisgICAgfQorfQorCitjbGFzcyBO
b2RlR3JvdXBlclZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciB7
CiBwdWJsaWM6Ci0gICAgT2JqZWN0R3JvdXBlclZpc2l0b3IoKQorICAgIE5vZGVHcm91cGVyVmlz
aXRvcigpCiAgICAgewogICAgICAgICAvLyBGSVhNRTogZ3JvdXBlcl8ucmVzZXJ2ZUNhcGFjaXR5
KG5vZGVfbWFwLnNpemUoKSk7ICA/CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIo
Tm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKICAgICB7Ci0K
ICAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgaW4gZG9jdW1lbnQsIHB1dCBpdCBpbiB0aGUgb3du
ZXJEb2N1bWVudCdzIG9iamVjdCBncm91cC4KICAgICAgICAgLy8KICAgICAgICAgLy8gSWYgYW4g
aW1hZ2UgZWxlbWVudCB3YXMgY3JlYXRlZCBieSBKYXZhU2NyaXB0ICJuZXcgSW1hZ2UiLApAQCAt
Mjc3LDY1ICszMTksNzggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGdyb3VwSWQgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocm9vdCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9n
cm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCBub2RlLCB3cmFwcGVyKSk7CisgICAg
ICAgIG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJZCwgd3JhcHBlcikpOwogICAg
IH0KIAogICAgIHZvaWQgYXBwbHlHcm91cGluZygpCiAgICAgewotICAgICAgICAvLyBHcm91cCBi
eSBzb3J0aW5nIGJ5IHRoZSBncm91cCBpZC4KLSAgICAgICAgc3RkOjpzb3J0KG1fZ3JvdXBlci5i
ZWdpbigpLCBtX2dyb3VwZXIuZW5kKCkpOworICAgICAgICAvKiBGSVhNRTogUmUtZW5hYmxlZCB0
aGlzIGNvZGUgdG8gYXZvaWQgR0NpbmcgdGhlc2Ugd3JhcHBlcnMhCisgICAgICAgICAgICAgICAg
ICAgICAgQ3VycmVudGx5IHRoaXMgZGVwZW5kcyBvbiBsb29raW5nIHVwIHRoZSB3cmFwcGVyCisg
ICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGEgR0MsIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNo
IGlzb2xhdGVkIHdvcmxkCisgICAgICAgICAgICAgICAgICAgICAgd2UncmUgaW4sIHNvIGl0J3Mg
dW5jbGVhciB3aGljaCBtYXAgdG8gbG9vayBpbi4uLgogCi0gICAgICAgIC8vIEZJWE1FIFNob3Vs
ZCBwcm9iYWJseSB3b3JrIGluIGl0ZXJhdG9ycyBoZXJlLCBidXQgaW5kZXhlcyB3ZXJlIGVhc2ll
ciBmb3IgbXkgc2ltcGxlIG1pbmQuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9n
cm91cGVyLnNpemUoKTsgKSB7Ci0gICAgICAgICAgICAvLyBTZWVrIHRvIHRoZSBuZXh0IGtleSAo
b3IgdGhlIGVuZCBvZiB0aGUgbGlzdCkuCi0gICAgICAgICAgICBzaXplX3QgbmV4dEtleUluZGV4
ID0gbV9ncm91cGVyLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwg
bV9ncm91cGVyLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JvdXBlcltp
XS5ncm91cElkKCkgIT0gbV9ncm91cGVyW2pdLmdyb3VwSWQoKSkgewotICAgICAgICAgICAgICAg
ICAgICBuZXh0S2V5SW5kZXggPSBqOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHN0
eWxlZCBhbmQgdGhlcmUgaXMgYSB3cmFwcGVyIGZvciB0aGUgaW5saW5lCisgICAgICAgIC8vIHN0
eWxlIGRlY2xhcmF0aW9uLCB3ZSBuZWVkIHRvIGtlZXAgdGhhdCBzdHlsZSBkZWNsYXJhdGlvbgor
ICAgICAgICAvLyB3cmFwcGVyIGFsaXZlIGFzIHdlbGwsIHNvIHdlIGFkZCBpdCB0byB0aGUgb2Jq
ZWN0IGdyb3VwLgorICAgICAgICBpZiAobm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpIHsKKyAgICAg
ICAgICBTdHlsZWRFbGVtZW50KiBlbGVtZW50ID0gcmVpbnRlcnByZXRfY2FzdDxTdHlsZWRFbGVt
ZW50Kj4obm9kZSk7CisgICAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVt
ZW50LT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgICBpZiAoc3R5bGUgIT0gTlVMTCkgewor
ICAgICAgICAgICAgd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChzdHlsZSk7CisgICAg
ICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgICBncm91cC5hcHBl
bmQod3JhcHBlcik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICovCisgICAgICAg
IG1ha2VWOE9iamVjdEdyb3VwcyhtX2dyb3VwZXIpOworICAgIH0KIAotICAgICAgICAgICAgQVNT
RVJUKG5leHRLZXlJbmRleCA+IGkpOworcHJpdmF0ZToKKyAgICBHcm91cGVyTGlzdCBtX2dyb3Vw
ZXI7Cit9OwogCi0gICAgICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYSBncm91cCBpZiBp
dCBoYXMgbW9yZSB0aGFuIG9uZSBvYmplY3QuIElmIGl0IG9ubHkKLSAgICAgICAgICAgIC8vIGhh
cyBvbmUgb2JqZWN0LCBpdCBoYXMgbm90aGluZyBlbHNlIHRoYXQgbmVlZHMgdG8gYmUga2VwdCBh
bGl2ZS4KLSAgICAgICAgICAgIGlmIChuZXh0S2V5SW5kZXggLSBpIDw9IDEpIHsKLSAgICAgICAg
ICAgICAgICBpID0gbmV4dEtleUluZGV4OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQorY2xhc3MgT2JqZWN0R3JvdXBlclZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBl
ck1hcDx2b2lkPjo6VmlzaXRvciB7CitwdWJsaWM6CisgICAgT2JqZWN0R3JvdXBlclZpc2l0b3Io
KQorICAgIHsKKyAgICB9CiAKLSAgICAgICAgICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6
VmFsdWU+ID4gZ3JvdXA7Ci0gICAgICAgICAgICBncm91cC5yZXNlcnZlQ2FwYWNpdHkobmV4dEtl
eUluZGV4IC0gaSk7Ci0gICAgICAgICAgICBmb3IgKDsgaSA8IG5leHRLZXlJbmRleDsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyID0gbV9n
cm91cGVyW2ldLndyYXBwZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgICAgICBncm91cC5hcHBlbmQod3JhcHBlcik7Ci0gICAgICAg
ICAgICAgICAgLyogRklYTUU6IFJlLWVuYWJsZWQgdGhpcyBjb2RlIHRvIGF2b2lkIEdDaW5nIHRo
ZXNlIHdyYXBwZXJzIQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHkgdGhp
cyBkZXBlbmRzIG9uIGxvb2tpbmcgdXAgdGhlIHdyYXBwZXIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZHVyaW5nIGEgR0MsIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIGlzb2xhdGVkIHdv
cmxkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlJ3JlIGluLCBzbyBpdCdzIHVuY2xl
YXIgd2hpY2ggbWFwIHRvIGxvb2sgaW4uLi4KKyAgICB2b2lkIHN0YXJ0TWFwKCkgeworICAgICAg
bV9ncm91cGVyLnNocmluaygwKTsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
bm9kZSBpcyBzdHlsZWQgYW5kIHRoZXJlIGlzIGEgd3JhcHBlciBmb3IgdGhlIGlubGluZQotICAg
ICAgICAgICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9uLCB3ZSBuZWVkIHRvIGtlZXAgdGhhdCBz
dHlsZSBkZWNsYXJhdGlvbgotICAgICAgICAgICAgICAgIC8vIHdyYXBwZXIgYWxpdmUgYXMgd2Vs
bCwgc28gd2UgYWRkIGl0IHRvIHRoZSBvYmplY3QgZ3JvdXAuCi0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICBTdHlsZWRFbGVt
ZW50KiBlbGVtZW50ID0gcmVpbnRlcnByZXRfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSk7Ci0g
ICAgICAgICAgICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGVsZW1lbnQtPmlu
bGluZVN0eWxlRGVjbCgpOwotICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICE9IE5VTEwpIHsK
LSAgICAgICAgICAgICAgICAgICAgd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChzdHls
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKHdyYXBwZXIpOwotICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgfQor
ICAgIHZvaWQgZW5kTWFwKCkgeworICAgICAgbWFrZVY4T2JqZWN0R3JvdXBzKG1fZ3JvdXBlcik7
CisgICAgfQogCi0gICAgICAgICAgICBpZiAoZ3JvdXAuc2l6ZSgpID4gMSkKLSAgICAgICAgICAg
ICAgICB2ODo6Vjg6OkFkZE9iamVjdEdyb3VwKCZncm91cFswXSwgZ3JvdXAuc2l6ZSgpKTsKKyAg
ICB2b2lkIHZpc2l0RE9NV3JhcHBlcih2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IHdyYXBwZXIpCisgICAgeworICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZv
ID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKKyAgICAgICAgLy8gRklY
TUU6IGV4dGVuZCBXcmFwcGVyVHlwZUluZm8gd2l0aCBpc1N0eWxlIHRvIHNpbXBsaWZ5IHRoZSBj
aGVjayBiZWxvdy4KKyAgICAgICAgLy8gRklYTUU6IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBT
dHlsZUJhc2Ugd3JhcHBlcnMgd2Ugc2hvdWxkIGNhcmUgb2YuCisgICAgICAgIGlmICghVjhDU1NT
dHlsZVNoZWV0OjppbmZvLmVxdWFscyh0eXBlSW5mbykKKyAgICAgICAgICAgICYmICFWOENTU0No
YXJzZXRSdWxlOjppbmZvLmVxdWFscyh0eXBlSW5mbykKKyAgICAgICAgICAgICYmICFWOENTU0Zv
bnRGYWNlUnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhDU1NT
dHlsZVJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJbmZvKQorICAgICAgICAgICAgJiYgIVY4Q1NTSW1w
b3J0UnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhDU1NNZWRp
YVJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJbmZvKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIFN0eWxlQmFzZSogc3R5bGVCYXNlID0gc3RhdGljX2Nhc3Q8U3R5bGVC
YXNlKj4ob2JqZWN0KTsKIAotICAgICAgICAgICAgQVNTRVJUKGkgPT0gbmV4dEtleUluZGV4KTsK
KyAgICAgICAgLy8gV2UgcHV0IHRoZSB3aG9sZSB0cmVlIG9mIHN0eWxlIGVsZW1lbnRzIGludG8g
YSBzaW5nbGUgb2JqZWN0IGdyb3VwLgorICAgICAgICAvLyBUbyBhY2hpZXZlIHRoYXQgd2UgZ3Jv
dXAgZWxlbWVudHMgYnkgdGhlIHJvb3RzIG9mIHRoZWlyIHRyZWVzLgorICAgICAgICBTdHlsZUJh
c2UqIHJvb3QgPSBzdHlsZUJhc2U7CisgICAgICAgIEFTU0VSVChyb290KTsKKyAgICAgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgICBTdHlsZUJhc2UqIHBhcmVudCA9IHJvb3QtPnBhcmVudCgp
OworICAgICAgICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICByb290ID0gcGFyZW50OwogICAgICAgICB9CisgICAgICAgIC8vIEdyb3VwIGlkIGlzIGFuIGFk
ZHJlc3Mgb2YgdGhlIHJvb3QuCisgICAgICAgIHVpbnRwdHJfdCBncm91cElkID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHJvb3QpOworICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3Vw
ZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zNTgsOSAr
NDEzLDEyIEBACiAgICAgdmlzaXRBY3RpdmVET01PYmplY3RzSW5DdXJyZW50VGhyZWFkKCZwcm9s
b2d1ZVZpc2l0b3IpOwogCiAgICAgLy8gQ3JlYXRlIG9iamVjdCBncm91cHMuCisgICAgTm9kZUdy
b3VwZXJWaXNpdG9yIG5vZGVHcm91cGVyVmlzaXRvcjsKKyAgICB2aXNpdERPTU5vZGVzSW5DdXJy
ZW50VGhyZWFkKCZub2RlR3JvdXBlclZpc2l0b3IpOworICAgIG5vZGVHcm91cGVyVmlzaXRvci5h
cHBseUdyb3VwaW5nKCk7CisKICAgICBPYmplY3RHcm91cGVyVmlzaXRvciBvYmplY3RHcm91cGVy
VmlzaXRvcjsKLSAgICB2aXNpdERPTU5vZGVzSW5DdXJyZW50VGhyZWFkKCZvYmplY3RHcm91cGVy
VmlzaXRvcik7Ci0gICAgb2JqZWN0R3JvdXBlclZpc2l0b3IuYXBwbHlHcm91cGluZygpOworICAg
IHZpc2l0RE9NT2JqZWN0c0luQ3VycmVudFRocmVhZCgmb2JqZWN0R3JvdXBlclZpc2l0b3IpOwog
CiAgICAgLy8gQ2xlYW4gc2luZ2xlIGVsZW1lbnQgY2FjaGUgZm9yIHN0cmluZyBjb252ZXJzaW9u
cy4KICAgICBsYXN0U3RyaW5nSW1wbCA9IDA7CkluZGV4OiBiaW5kaW5ncy92OC9WOERPTU1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgJKHJldmlzaW9uIDcyODE5KQor
KysgYmluZGluZ3MvdjgvVjhET01NYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBA
QAogCiAgICAgICAgIGNsYXNzIFZpc2l0b3IgewogICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnRNYXAoKSB7IH0KKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBl
bmRNYXAoKSB7IH0KICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdERPTVdyYXBwZXIoS2V5
VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IG9iamVjdCkgPSAwOwogICAgICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICB2aXJ0dWFsIH5WaXNpdG9yKCkgeyB9CkBAIC0xMjIs
OSArMTI0LDExIEBACiAKICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0KHR5cGVuYW1lIFBhcmVu
dDo6VmlzaXRvciogdmlzaXRvcikKICAgICAgICAgeworICAgICAgICAgICAgdmlzaXRvci0+c3Rh
cnRNYXAoKTsKICAgICAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8S2V5VHlwZSosIFZhbHVlVHlw
ZSo+OjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXQg
IT0gbV9tYXAuZW5kKCk7ICsraXQpCiAgICAgICAgICAgICAgICAgdmlzaXRvci0+dmlzaXRET01X
cmFwcGVyKGl0LT5maXJzdCwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPihpdC0+c2Vjb25kKSk7
CisgICAgICAgICAgICB2aXNpdG9yLT5lbmRNYXAoKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVj
dGVkOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75174</attachid>
            <date>2010-11-30 11:36:41 -0800</date>
            <delta_ts>2010-11-30 11:43:37 -0800</delta_ts>
            <desc>[minor] proper diff</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>11135</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjkzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMTEtMzAgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
b3J0IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzcyODE5LyB0byB2OC1iYWNrZWQg
cG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MDI0NgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01NYXAuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDo6VmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwOjpWaXNpdG9yOjplbmRNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdyb3VwZXJJ
dGVtOjpHcm91cGVySXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpHcm91cGVySXRlbTo6Z3JvdXBJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVjhPYmplY3RHcm91cHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjpOb2RlR3JvdXBlclZpc2l0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjphcHBseUdyb3VwaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9iamVjdEdyb3VwZXJWaXNpdG9yOjpPYmplY3RHcm91cGVyVmlzaXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpPYmplY3RHcm91cGVyVmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAgICAo
V2ViQ29yZTo6T2JqZWN0R3JvdXBlclZpc2l0b3I6OmVuZE1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpPYmplY3RHcm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKToKKwogMjAxMC0xMS0zMCAgWGlhb21laSBK
aSAgPHhqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQu
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNzI4
MTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNiArNDIsMTIgQEAKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKKyNpbmNsdWRlICJWOENTU0No
YXJzZXRSdWxlLmgiCisjaW5jbHVkZSAiVjhDU1NGb250RmFjZVJ1bGUuaCIKKyNpbmNsdWRlICJW
OENTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU01lZGlhUnVsZS5oIgorI2luY2x1ZGUg
IlY4Q1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIlY4Q1NTU3R5bGVSdWxlLmgiCiAjaW5jbHVk
ZSAiVjhNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJXcmFw
cGVyVHlwZUluZm8uaCIKQEAgLTIxMywyMCArMjE5LDE3IEBACiAKIGNsYXNzIEdyb3VwZXJJdGVt
IHsKIHB1YmxpYzoKLSAgICBHcm91cGVySXRlbSh1aW50cHRyX3QgZ3JvdXBJZCwgTm9kZSogbm9k
ZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgCisgICAgR3JvdXBlckl0ZW0o
dWludHB0cl90IGdyb3VwSWQsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpIAog
ICAgICAgICA6IG1fZ3JvdXBJZChncm91cElkKQotICAgICAgICAsIG1fbm9kZShub2RlKQogICAg
ICAgICAsIG1fd3JhcHBlcih3cmFwcGVyKSAKICAgICAgICAgewogICAgICAgICB9CiAKICAgICB1
aW50cHRyX3QgZ3JvdXBJZCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JvdXBJZDsgfQotICAgIE5vZGUq
IG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0PiB3cmFwcGVyKCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyOyB9CiAKIHByaXZhdGU6
CiAgICAgdWludHB0cl90IG1fZ3JvdXBJZDsKLSAgICBOb2RlKiBtX25vZGU7CiAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4gbV93cmFwcGVyOwogfTsKIApAQCAtMjM3LDE2ICsyNDAsNTUg
QEAKIAogdHlwZWRlZiBWZWN0b3I8R3JvdXBlckl0ZW0+IEdyb3VwZXJMaXN0OwogCi1jbGFzcyBP
YmplY3RHcm91cGVyVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9y
IHsKK3ZvaWQgbWFrZVY4T2JqZWN0R3JvdXBzKEdyb3VwZXJMaXN0JiBncm91cGVyKQoreworICAg
IC8vIEdyb3VwIGJ5IHNvcnRpbmcgYnkgdGhlIGdyb3VwIGlkLgorICAgIHN0ZDo6c29ydChncm91
cGVyLmJlZ2luKCksIGdyb3VwZXIuZW5kKCkpOworCisgICAgLy8gRklYTUUgU2hvdWxkIHByb2Jh
Ymx5IHdvcmsgaW4gaXRlcmF0b3JzIGhlcmUsIGJ1dCBpbmRleGVzIHdlcmUgZWFzaWVyIGZvciBt
eSBzaW1wbGUgbWluZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyb3VwZXIuc2l6ZSgp
OyApIHsKKyAgICAgICAgLy8gU2VlayB0byB0aGUgbmV4dCBrZXkgKG9yIHRoZSBlbmQgb2YgdGhl
IGxpc3QpLgorICAgICAgICBzaXplX3QgbmV4dEtleUluZGV4ID0gZ3JvdXBlci5zaXplKCk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwgZ3JvdXBlci5zaXplKCk7ICsraikgeworICAg
ICAgICAgICAgaWYgKGdyb3VwZXJbaV0uZ3JvdXBJZCgpICE9IGdyb3VwZXJbal0uZ3JvdXBJZCgp
KSB7CisgICAgICAgICAgICAgICAgbmV4dEtleUluZGV4ID0gajsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChuZXh0S2V5
SW5kZXggPiBpKTsKKworICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYSBncm91cCBpZiBp
dCBoYXMgbW9yZSB0aGFuIG9uZSBvYmplY3QuIElmIGl0IG9ubHkKKyAgICAgICAgLy8gaGFzIG9u
ZSBvYmplY3QsIGl0IGhhcyBub3RoaW5nIGVsc2UgdGhhdCBuZWVkcyB0byBiZSBrZXB0IGFsaXZl
LgorICAgICAgICBpZiAobmV4dEtleUluZGV4IC0gaSA8PSAxKSB7CisgICAgICAgICAgICBpID0g
bmV4dEtleUluZGV4OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGdyb3VwOworICAgICAgICBncm91
cC5yZXNlcnZlQ2FwYWNpdHkobmV4dEtleUluZGV4IC0gaSk7CisgICAgICAgIGZvciAoOyBpIDwg
bmV4dEtleUluZGV4OyArK2kpIHsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1
ZT4gd3JhcHBlciA9IGdyb3VwZXJbaV0ud3JhcHBlcigpOworICAgICAgICAgICAgaWYgKCF3cmFw
cGVyLklzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBncm91cC5hcHBlbmQod3JhcHBlcik7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZ3JvdXAuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgIHY4
OjpWODo6QWRkT2JqZWN0R3JvdXAoJmdyb3VwWzBdLCBncm91cC5zaXplKCkpOworCisgICAgICAg
IEFTU0VSVChpID09IG5leHRLZXlJbmRleCk7CisgICAgfQorfQorCitjbGFzcyBOb2RlR3JvdXBl
clZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciB7CiBwdWJsaWM6
Ci0gICAgT2JqZWN0R3JvdXBlclZpc2l0b3IoKQorICAgIE5vZGVHcm91cGVyVmlzaXRvcigpCiAg
ICAgewogICAgICAgICAvLyBGSVhNRTogZ3JvdXBlcl8ucmVzZXJ2ZUNhcGFjaXR5KG5vZGVfbWFw
LnNpemUoKSk7ICA/CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoTm9kZSogbm9k
ZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKICAgICB7Ci0KICAgICAgICAg
Ly8gSWYgdGhlIG5vZGUgaXMgaW4gZG9jdW1lbnQsIHB1dCBpdCBpbiB0aGUgb3duZXJEb2N1bWVu
dCdzIG9iamVjdCBncm91cC4KICAgICAgICAgLy8KICAgICAgICAgLy8gSWYgYW4gaW1hZ2UgZWxl
bWVudCB3YXMgY3JlYXRlZCBieSBKYXZhU2NyaXB0ICJuZXcgSW1hZ2UiLApAQCAtMjc3LDY1ICsz
MTksNzggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGdyb3VwSWQgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4ocm9vdCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9ncm91cGVyLmFw
cGVuZChHcm91cGVySXRlbShncm91cElkLCBub2RlLCB3cmFwcGVyKSk7CisgICAgICAgIG1fZ3Jv
dXBlci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJZCwgd3JhcHBlcikpOwogICAgIH0KIAogICAg
IHZvaWQgYXBwbHlHcm91cGluZygpCiAgICAgewotICAgICAgICAvLyBHcm91cCBieSBzb3J0aW5n
IGJ5IHRoZSBncm91cCBpZC4KLSAgICAgICAgc3RkOjpzb3J0KG1fZ3JvdXBlci5iZWdpbigpLCBt
X2dyb3VwZXIuZW5kKCkpOworICAgICAgICAvKiBGSVhNRTogUmUtZW5hYmxlZCB0aGlzIGNvZGUg
dG8gYXZvaWQgR0NpbmcgdGhlc2Ugd3JhcHBlcnMhCisgICAgICAgICAgICAgICAgICAgICAgQ3Vy
cmVudGx5IHRoaXMgZGVwZW5kcyBvbiBsb29raW5nIHVwIHRoZSB3cmFwcGVyCisgICAgICAgICAg
ICAgICAgICAgICAgZHVyaW5nIGEgR0MsIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIGlzb2xhdGVk
IHdvcmxkCisgICAgICAgICAgICAgICAgICAgICAgd2UncmUgaW4sIHNvIGl0J3MgdW5jbGVhciB3
aGljaCBtYXAgdG8gbG9vayBpbi4uLgogCi0gICAgICAgIC8vIEZJWE1FIFNob3VsZCBwcm9iYWJs
eSB3b3JrIGluIGl0ZXJhdG9ycyBoZXJlLCBidXQgaW5kZXhlcyB3ZXJlIGVhc2llciBmb3IgbXkg
c2ltcGxlIG1pbmQuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncm91cGVyLnNp
emUoKTsgKSB7Ci0gICAgICAgICAgICAvLyBTZWVrIHRvIHRoZSBuZXh0IGtleSAob3IgdGhlIGVu
ZCBvZiB0aGUgbGlzdCkuCi0gICAgICAgICAgICBzaXplX3QgbmV4dEtleUluZGV4ID0gbV9ncm91
cGVyLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwgbV9ncm91cGVy
LnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JvdXBlcltpXS5ncm91cElk
KCkgIT0gbV9ncm91cGVyW2pdLmdyb3VwSWQoKSkgewotICAgICAgICAgICAgICAgICAgICBuZXh0
S2V5SW5kZXggPSBqOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9CisgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHN0eWxlZCBhbmQg
dGhlcmUgaXMgYSB3cmFwcGVyIGZvciB0aGUgaW5saW5lCisgICAgICAgIC8vIHN0eWxlIGRlY2xh
cmF0aW9uLCB3ZSBuZWVkIHRvIGtlZXAgdGhhdCBzdHlsZSBkZWNsYXJhdGlvbgorICAgICAgICAv
LyB3cmFwcGVyIGFsaXZlIGFzIHdlbGwsIHNvIHdlIGFkZCBpdCB0byB0aGUgb2JqZWN0IGdyb3Vw
LgorICAgICAgICBpZiAobm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpIHsKKyAgICAgICAgICBTdHls
ZWRFbGVtZW50KiBlbGVtZW50ID0gcmVpbnRlcnByZXRfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9k
ZSk7CisgICAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5pbmxp
bmVTdHlsZURlY2woKTsKKyAgICAgICAgICBpZiAoc3R5bGUgIT0gTlVMTCkgeworICAgICAgICAg
ICAgd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChzdHlsZSk7CisgICAgICAgICAgICBp
ZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgICBncm91cC5hcHBlbmQod3JhcHBl
cik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICovCisgICAgICAgIG1ha2VWOE9i
amVjdEdyb3VwcyhtX2dyb3VwZXIpOworICAgIH0KIAotICAgICAgICAgICAgQVNTRVJUKG5leHRL
ZXlJbmRleCA+IGkpOworcHJpdmF0ZToKKyAgICBHcm91cGVyTGlzdCBtX2dyb3VwZXI7Cit9Owog
Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYSBncm91cCBpZiBpdCBoYXMgbW9y
ZSB0aGFuIG9uZSBvYmplY3QuIElmIGl0IG9ubHkKLSAgICAgICAgICAgIC8vIGhhcyBvbmUgb2Jq
ZWN0LCBpdCBoYXMgbm90aGluZyBlbHNlIHRoYXQgbmVlZHMgdG8gYmUga2VwdCBhbGl2ZS4KLSAg
ICAgICAgICAgIGlmIChuZXh0S2V5SW5kZXggLSBpIDw9IDEpIHsKLSAgICAgICAgICAgICAgICBp
ID0gbmV4dEtleUluZGV4OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQorY2xhc3MgT2JqZWN0R3JvdXBlclZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDx2b2lk
Pjo6VmlzaXRvciB7CitwdWJsaWM6CisgICAgT2JqZWN0R3JvdXBlclZpc2l0b3IoKQorICAgIHsK
KyAgICB9CiAKLSAgICAgICAgICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4g
Z3JvdXA7Ci0gICAgICAgICAgICBncm91cC5yZXNlcnZlQ2FwYWNpdHkobmV4dEtleUluZGV4IC0g
aSk7Ci0gICAgICAgICAgICBmb3IgKDsgaSA8IG5leHRLZXlJbmRleDsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyID0gbV9ncm91cGVyW2ld
LndyYXBwZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgICAgICBncm91cC5hcHBlbmQod3JhcHBlcik7Ci0gICAgICAgICAgICAgICAg
LyogRklYTUU6IFJlLWVuYWJsZWQgdGhpcyBjb2RlIHRvIGF2b2lkIEdDaW5nIHRoZXNlIHdyYXBw
ZXJzIQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHkgdGhpcyBkZXBlbmRz
IG9uIGxvb2tpbmcgdXAgdGhlIHdyYXBwZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZHVyaW5nIGEgR0MsIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIGlzb2xhdGVkIHdvcmxkCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdlJ3JlIGluLCBzbyBpdCdzIHVuY2xlYXIgd2hpY2gg
bWFwIHRvIGxvb2sgaW4uLi4KKyAgICB2b2lkIHN0YXJ0TWFwKCkgeworICAgICAgbV9ncm91cGVy
LnNocmluaygwKTsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBz
dHlsZWQgYW5kIHRoZXJlIGlzIGEgd3JhcHBlciBmb3IgdGhlIGlubGluZQotICAgICAgICAgICAg
ICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9uLCB3ZSBuZWVkIHRvIGtlZXAgdGhhdCBzdHlsZSBkZWNs
YXJhdGlvbgotICAgICAgICAgICAgICAgIC8vIHdyYXBwZXIgYWxpdmUgYXMgd2VsbCwgc28gd2Ug
YWRkIGl0IHRvIHRoZSBvYmplY3QgZ3JvdXAuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlz
U3R5bGVkRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICBTdHlsZWRFbGVtZW50KiBlbGVt
ZW50ID0gcmVpbnRlcnByZXRfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAg
ICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxl
RGVjbCgpOwotICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICE9IE5VTEwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChzdHlsZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgZ3JvdXAuYXBwZW5kKHdyYXBwZXIpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgfQorICAgIHZvaWQg
ZW5kTWFwKCkgeworICAgICAgbWFrZVY4T2JqZWN0R3JvdXBzKG1fZ3JvdXBlcik7CisgICAgfQog
Ci0gICAgICAgICAgICBpZiAoZ3JvdXAuc2l6ZSgpID4gMSkKLSAgICAgICAgICAgICAgICB2ODo6
Vjg6OkFkZE9iamVjdEdyb3VwKCZncm91cFswXSwgZ3JvdXAuc2l6ZSgpKTsKKyAgICB2b2lkIHZp
c2l0RE9NV3JhcHBlcih2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdy
YXBwZXIpCisgICAgeworICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZvID0gVjhET01X
cmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKKyAgICAgICAgLy8gRklYTUU6IGV4dGVu
ZCBXcmFwcGVyVHlwZUluZm8gd2l0aCBpc1N0eWxlIHRvIHNpbXBsaWZ5IHRoZSBjaGVjayBiZWxv
dy4KKyAgICAgICAgLy8gRklYTUU6IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBTdHlsZUJhc2Ug
d3JhcHBlcnMgd2Ugc2hvdWxkIGNhcmUgb2YuCisgICAgICAgIGlmICghVjhDU1NTdHlsZVNoZWV0
OjppbmZvLmVxdWFscyh0eXBlSW5mbykKKyAgICAgICAgICAgICYmICFWOENTU0NoYXJzZXRSdWxl
OjppbmZvLmVxdWFscyh0eXBlSW5mbykKKyAgICAgICAgICAgICYmICFWOENTU0ZvbnRGYWNlUnVs
ZTo6aW5mby5lcXVhbHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhDU1NTdHlsZVJ1bGU6
OmluZm8uZXF1YWxzKHR5cGVJbmZvKQorICAgICAgICAgICAgJiYgIVY4Q1NTSW1wb3J0UnVsZTo6
aW5mby5lcXVhbHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhDU1NNZWRpYVJ1bGU6Omlu
Zm8uZXF1YWxzKHR5cGVJbmZvKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIFN0eWxlQmFzZSogc3R5bGVCYXNlID0gc3RhdGljX2Nhc3Q8U3R5bGVCYXNlKj4ob2Jq
ZWN0KTsKIAotICAgICAgICAgICAgQVNTRVJUKGkgPT0gbmV4dEtleUluZGV4KTsKKyAgICAgICAg
Ly8gV2UgcHV0IHRoZSB3aG9sZSB0cmVlIG9mIHN0eWxlIGVsZW1lbnRzIGludG8gYSBzaW5nbGUg
b2JqZWN0IGdyb3VwLgorICAgICAgICAvLyBUbyBhY2hpZXZlIHRoYXQgd2UgZ3JvdXAgZWxlbWVu
dHMgYnkgdGhlIHJvb3RzIG9mIHRoZWlyIHRyZWVzLgorICAgICAgICBTdHlsZUJhc2UqIHJvb3Qg
PSBzdHlsZUJhc2U7CisgICAgICAgIEFTU0VSVChyb290KTsKKyAgICAgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgICBTdHlsZUJhc2UqIHBhcmVudCA9IHJvb3QtPnBhcmVudCgpOworICAgICAg
ICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICByb290ID0g
cGFyZW50OwogICAgICAgICB9CisgICAgICAgIC8vIEdyb3VwIGlkIGlzIGFuIGFkZHJlc3Mgb2Yg
dGhlIHJvb3QuCisgICAgICAgIHVpbnRwdHJfdCBncm91cElkID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KHJvb3QpOworICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdy
b3VwSWQsIHdyYXBwZXIpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zNTgsOSArNDEzLDEyIEBA
CiAgICAgdmlzaXRBY3RpdmVET01PYmplY3RzSW5DdXJyZW50VGhyZWFkKCZwcm9sb2d1ZVZpc2l0
b3IpOwogCiAgICAgLy8gQ3JlYXRlIG9iamVjdCBncm91cHMuCisgICAgTm9kZUdyb3VwZXJWaXNp
dG9yIG5vZGVHcm91cGVyVmlzaXRvcjsKKyAgICB2aXNpdERPTU5vZGVzSW5DdXJyZW50VGhyZWFk
KCZub2RlR3JvdXBlclZpc2l0b3IpOworICAgIG5vZGVHcm91cGVyVmlzaXRvci5hcHBseUdyb3Vw
aW5nKCk7CisKICAgICBPYmplY3RHcm91cGVyVmlzaXRvciBvYmplY3RHcm91cGVyVmlzaXRvcjsK
LSAgICB2aXNpdERPTU5vZGVzSW5DdXJyZW50VGhyZWFkKCZvYmplY3RHcm91cGVyVmlzaXRvcik7
Ci0gICAgb2JqZWN0R3JvdXBlclZpc2l0b3IuYXBwbHlHcm91cGluZygpOworICAgIHZpc2l0RE9N
T2JqZWN0c0luQ3VycmVudFRocmVhZCgmb2JqZWN0R3JvdXBlclZpc2l0b3IpOwogCiAgICAgLy8g
Q2xlYW4gc2luZ2xlIGVsZW1lbnQgY2FjaGUgZm9yIHN0cmluZyBjb252ZXJzaW9ucy4KICAgICBs
YXN0U3RyaW5nSW1wbCA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCShyZXZpc2lvbiA3
MjgxOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsNiArNDgsOCBAQAogCiAgICAgICAgIGNsYXNzIFZpc2l0b3IgewogICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRNYXAoKSB7IH0KKyAgICAgICAgICAg
IHZpcnR1YWwgdm9pZCBlbmRNYXAoKSB7IH0KICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNp
dERPTVdyYXBwZXIoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IG9iamVj
dCkgPSAwOwogICAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICB2aXJ0dWFsIH5WaXNpdG9y
KCkgeyB9CkBAIC0xMjIsOSArMTI0LDExIEBACiAKICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0
KHR5cGVuYW1lIFBhcmVudDo6VmlzaXRvciogdmlzaXRvcikKICAgICAgICAgeworICAgICAgICAg
ICAgdmlzaXRvci0+c3RhcnRNYXAoKTsKICAgICAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8S2V5
VHlwZSosIFZhbHVlVHlwZSo+OjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7CiAgICAgICAg
ICAgICBmb3IgKDsgaXQgIT0gbV9tYXAuZW5kKCk7ICsraXQpCiAgICAgICAgICAgICAgICAgdmlz
aXRvci0+dmlzaXRET01XcmFwcGVyKGl0LT5maXJzdCwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBl
PihpdC0+c2Vjb25kKSk7CisgICAgICAgICAgICB2aXNpdG9yLT5lbmRNYXAoKTsKICAgICAgICAg
fQogCiAgICAgcHJvdGVjdGVkOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75175</attachid>
            <date>2010-11-30 11:43:37 -0800</date>
            <delta_ts>2010-11-30 11:57:52 -0800</delta_ts>
            <desc>Fixing style issues</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>11144</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjkzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMTEtMzAgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
b3J0IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzcyODE5LyB0byB2OC1iYWNrZWQg
cG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MDI0NgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01NYXAuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDo6VmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwOjpWaXNpdG9yOjplbmRNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdyb3VwZXJJ
dGVtOjpHcm91cGVySXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpHcm91cGVySXRlbTo6Z3JvdXBJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVjhPYmplY3RHcm91cHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjpOb2RlR3JvdXBlclZpc2l0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjphcHBseUdyb3VwaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9iamVjdEdyb3VwZXJWaXNpdG9yOjpPYmplY3RHcm91cGVyVmlzaXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpPYmplY3RHcm91cGVyVmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAgICAo
V2ViQ29yZTo6T2JqZWN0R3JvdXBlclZpc2l0b3I6OmVuZE1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpPYmplY3RHcm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKToKKwogMjAxMC0xMS0zMCAgWGlhb21laSBK
aSAgPHhqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQu
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNzI4
MTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNiArNDEsMTIgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2lu
Y2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OENTU0NoYXJzZXRSdWxlLmgiCisjaW5jbHVkZSAiVjhDU1NGb250RmFjZVJ1bGUuaCIKKyNpbmNs
dWRlICJWOENTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU01lZGlhUnVsZS5oIgorI2lu
Y2x1ZGUgIlY4Q1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIlY4Q1NTU3R5bGVSdWxlLmgiCiAj
aW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOE1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgpAQCAtMjEzLDIwICsyMTksMTcgQEAKIAogY2xhc3MgR3JvdXBlckl0ZW0g
ewogcHVibGljOgotICAgIEdyb3VwZXJJdGVtKHVpbnRwdHJfdCBncm91cElkLCBOb2RlKiBub2Rl
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKSAKKyAgICBHcm91cGVySXRlbSh1
aW50cHRyX3QgZ3JvdXBJZCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgCiAg
ICAgICAgIDogbV9ncm91cElkKGdyb3VwSWQpCi0gICAgICAgICwgbV9ub2RlKG5vZGUpCiAgICAg
ICAgICwgbV93cmFwcGVyKHdyYXBwZXIpIAogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgIHVp
bnRwdHJfdCBncm91cElkKCkgY29uc3QgeyByZXR1cm4gbV9ncm91cElkOyB9Ci0gICAgTm9kZSog
bm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IHdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXI7IH0KIAogcHJpdmF0ZToK
ICAgICB1aW50cHRyX3QgbV9ncm91cElkOwotICAgIE5vZGUqIG1fbm9kZTsKICAgICB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiBtX3dyYXBwZXI7CiB9OwogCkBAIC0yMzcsMTYgKzI0MCw1NSBA
QAogCiB0eXBlZGVmIFZlY3RvcjxHcm91cGVySXRlbT4gR3JvdXBlckxpc3Q7CiAKLWNsYXNzIE9i
amVjdEdyb3VwZXJWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3Ig
ewordm9pZCBtYWtlVjhPYmplY3RHcm91cHMoR3JvdXBlckxpc3QmIGdyb3VwZXIpCit7CisgICAg
Ly8gR3JvdXAgYnkgc29ydGluZyBieSB0aGUgZ3JvdXAgaWQuCisgICAgc3RkOjpzb3J0KGdyb3Vw
ZXIuYmVnaW4oKSwgZ3JvdXBlci5lbmQoKSk7CisKKyAgICAvLyBGSVhNRSBTaG91bGQgcHJvYmFi
bHkgd29yayBpbiBpdGVyYXRvcnMgaGVyZSwgYnV0IGluZGV4ZXMgd2VyZSBlYXNpZXIgZm9yIG15
IHNpbXBsZSBtaW5kLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JvdXBlci5zaXplKCk7
ICkgeworICAgICAgICAvLyBTZWVrIHRvIHRoZSBuZXh0IGtleSAob3IgdGhlIGVuZCBvZiB0aGUg
bGlzdCkuCisgICAgICAgIHNpemVfdCBuZXh0S2V5SW5kZXggPSBncm91cGVyLnNpemUoKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBncm91cGVyLnNpemUoKTsgKytqKSB7CisgICAg
ICAgICAgICBpZiAoZ3JvdXBlcltpXS5ncm91cElkKCkgIT0gZ3JvdXBlcltqXS5ncm91cElkKCkp
IHsKKyAgICAgICAgICAgICAgICBuZXh0S2V5SW5kZXggPSBqOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG5leHRLZXlJ
bmRleCA+IGkpOworCisgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBhIGdyb3VwIGlmIGl0
IGhhcyBtb3JlIHRoYW4gb25lIG9iamVjdC4gSWYgaXQgb25seQorICAgICAgICAvLyBoYXMgb25l
IG9iamVjdCwgaXQgaGFzIG5vdGhpbmcgZWxzZSB0aGF0IG5lZWRzIHRvIGJlIGtlcHQgYWxpdmUu
CisgICAgICAgIGlmIChuZXh0S2V5SW5kZXggLSBpIDw9IDEpIHsKKyAgICAgICAgICAgIGkgPSBu
ZXh0S2V5SW5kZXg7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gZ3JvdXA7CisgICAgICAgIGdyb3Vw
LnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBpKTsKKyAgICAgICAgZm9yICg7IGkgPCBu
ZXh0S2V5SW5kZXg7ICsraSkgeworICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiB3cmFwcGVyID0gZ3JvdXBlcltpXS53cmFwcGVyKCk7CisgICAgICAgICAgICBpZiAoIXdyYXBw
ZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChncm91cC5zaXplKCkgPiAxKQorICAgICAgICAgICAgdjg6
OlY4OjpBZGRPYmplY3RHcm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7CisKKyAgICAgICAg
QVNTRVJUKGkgPT0gbmV4dEtleUluZGV4KTsKKyAgICB9Cit9CisKK2NsYXNzIE5vZGVHcm91cGVy
VmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yIHsKIHB1YmxpYzoK
LSAgICBPYmplY3RHcm91cGVyVmlzaXRvcigpCisgICAgTm9kZUdyb3VwZXJWaXNpdG9yKCkKICAg
ICB7CiAgICAgICAgIC8vIEZJWE1FOiBncm91cGVyXy5yZXNlcnZlQ2FwYWNpdHkobm9kZV9tYXAu
c2l6ZSgpKTsgID8KICAgICB9CiAKICAgICB2b2lkIHZpc2l0RE9NV3JhcHBlcihOb2RlKiBub2Rl
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAgIHsKLQogICAgICAgICAv
LyBJZiB0aGUgbm9kZSBpcyBpbiBkb2N1bWVudCwgcHV0IGl0IGluIHRoZSBvd25lckRvY3VtZW50
J3Mgb2JqZWN0IGdyb3VwLgogICAgICAgICAvLwogICAgICAgICAvLyBJZiBhbiBpbWFnZSBlbGVt
ZW50IHdhcyBjcmVhdGVkIGJ5IEphdmFTY3JpcHQgIm5ldyBJbWFnZSIsCkBAIC0yNzcsNjUgKzMx
OSw4MCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Pihyb290KTsKICAgICAgICAgfQotICAgICAgICBtX2dyb3VwZXIuYXBw
ZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIG5vZGUsIHdyYXBwZXIpKTsKKyAgICAgICAgbV9ncm91
cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CiAgICAgfQogCiAgICAg
dm9pZCBhcHBseUdyb3VwaW5nKCkKICAgICB7Ci0gICAgICAgIC8vIEdyb3VwIGJ5IHNvcnRpbmcg
YnkgdGhlIGdyb3VwIGlkLgotICAgICAgICBzdGQ6OnNvcnQobV9ncm91cGVyLmJlZ2luKCksIG1f
Z3JvdXBlci5lbmQoKSk7CisgICAgICAgIC8qIEZJWE1FOiBSZS1lbmFibGVkIHRoaXMgY29kZSB0
byBhdm9pZCBHQ2luZyB0aGVzZSB3cmFwcGVycyEKKyAgICAgICAgICAgICAgICAgICAgICBDdXJy
ZW50bHkgdGhpcyBkZXBlbmRzIG9uIGxvb2tpbmcgdXAgdGhlIHdyYXBwZXIKKyAgICAgICAgICAg
ICAgICAgICAgICBkdXJpbmcgYSBHQywgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggaXNvbGF0ZWQg
d29ybGQKKyAgICAgICAgICAgICAgICAgICAgICB3ZSdyZSBpbiwgc28gaXQncyB1bmNsZWFyIHdo
aWNoIG1hcCB0byBsb29rIGluLi4uCiAKLSAgICAgICAgLy8gRklYTUUgU2hvdWxkIHByb2JhYmx5
IHdvcmsgaW4gaXRlcmF0b3JzIGhlcmUsIGJ1dCBpbmRleGVzIHdlcmUgZWFzaWVyIGZvciBteSBz
aW1wbGUgbWluZC4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyb3VwZXIuc2l6
ZSgpOyApIHsKLSAgICAgICAgICAgIC8vIFNlZWsgdG8gdGhlIG5leHQga2V5IChvciB0aGUgZW5k
IG9mIHRoZSBsaXN0KS4KLSAgICAgICAgICAgIHNpemVfdCBuZXh0S2V5SW5kZXggPSBtX2dyb3Vw
ZXIuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBtX2dyb3VwZXIu
c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAobV9ncm91cGVyW2ldLmdyb3VwSWQo
KSAhPSBtX2dyb3VwZXJbal0uZ3JvdXBJZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5leHRL
ZXlJbmRleCA9IGo7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgc3R5bGVkIGFuZCB0
aGVyZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBpbmxpbmUKKyAgICAgICAgLy8gc3R5bGUgZGVjbGFy
YXRpb24sIHdlIG5lZWQgdG8ga2VlcCB0aGF0IHN0eWxlIGRlY2xhcmF0aW9uCisgICAgICAgIC8v
IHdyYXBwZXIgYWxpdmUgYXMgd2VsbCwgc28gd2UgYWRkIGl0IHRvIHRoZSBvYmplY3QgZ3JvdXAu
CisgICAgICAgIGlmIChub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICAgIFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQgPSByZWludGVycHJldF9jYXN0PFN0eWxlZEVsZW1lbnQqPihub2Rl
KTsKKyAgICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGVsZW1lbnQtPmlubGlu
ZVN0eWxlRGVjbCgpOworICAgICAgICAgIGlmIChzdHlsZSAhPSBOVUxMKSB7CisgICAgICAgICAg
ICB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KHN0eWxlKTsKKyAgICAgICAgICAgIGlm
ICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVy
KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKi8KKyAgICAgICAgbWFrZVY4T2Jq
ZWN0R3JvdXBzKG1fZ3JvdXBlcik7CisgICAgfQogCi0gICAgICAgICAgICBBU1NFUlQobmV4dEtl
eUluZGV4ID4gaSk7Citwcml2YXRlOgorICAgIEdyb3VwZXJMaXN0IG1fZ3JvdXBlcjsKK307CiAK
LSAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBhIGdyb3VwIGlmIGl0IGhhcyBtb3Jl
IHRoYW4gb25lIG9iamVjdC4gSWYgaXQgb25seQotICAgICAgICAgICAgLy8gaGFzIG9uZSBvYmpl
Y3QsIGl0IGhhcyBub3RoaW5nIGVsc2UgdGhhdCBuZWVkcyB0byBiZSBrZXB0IGFsaXZlLgotICAg
ICAgICAgICAgaWYgKG5leHRLZXlJbmRleCAtIGkgPD0gMSkgewotICAgICAgICAgICAgICAgIGkg
PSBuZXh0S2V5SW5kZXg7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
CitjbGFzcyBPYmplY3RHcm91cGVyVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPHZvaWQ+
OjpWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBPYmplY3RHcm91cGVyVmlzaXRvcigpCisgICAgewor
ICAgIH0KIAotICAgICAgICAgICAgVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBn
cm91cDsKLSAgICAgICAgICAgIGdyb3VwLnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBp
KTsKLSAgICAgICAgICAgIGZvciAoOyBpIDwgbmV4dEtleUluZGV4OyArK2kpIHsKLSAgICAgICAg
ICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIgPSBtX2dyb3VwZXJbaV0u
d3JhcHBlcigpOwotICAgICAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKLSAgICAgICAgICAgICAgICAv
KiBGSVhNRTogUmUtZW5hYmxlZCB0aGlzIGNvZGUgdG8gYXZvaWQgR0NpbmcgdGhlc2Ugd3JhcHBl
cnMhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSB0aGlzIGRlcGVuZHMg
b24gbG9va2luZyB1cCB0aGUgd3JhcHBlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
dXJpbmcgYSBHQywgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggaXNvbGF0ZWQgd29ybGQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2UncmUgaW4sIHNvIGl0J3MgdW5jbGVhciB3aGljaCBt
YXAgdG8gbG9vayBpbi4uLgorICAgIHZvaWQgc3RhcnRNYXAoKQorICAgIHsKKyAgICAgIG1fZ3Jv
dXBlci5zaHJpbmsoMCk7CisgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5vZGUg
aXMgc3R5bGVkIGFuZCB0aGVyZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBpbmxpbmUKLSAgICAgICAg
ICAgICAgICAvLyBzdHlsZSBkZWNsYXJhdGlvbiwgd2UgbmVlZCB0byBrZWVwIHRoYXQgc3R5bGUg
ZGVjbGFyYXRpb24KLSAgICAgICAgICAgICAgICAvLyB3cmFwcGVyIGFsaXZlIGFzIHdlbGwsIHNv
IHdlIGFkZCBpdCB0byB0aGUgb2JqZWN0IGdyb3VwLgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5pc1N0eWxlZEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgU3R5bGVkRWxlbWVudCog
ZWxlbWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOwotICAgICAg
ICAgICAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5pbmxpbmVT
dHlsZURlY2woKTsKLSAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAhPSBOVUxMKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoc3R5bGUpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIH0KKyAgICB2
b2lkIGVuZE1hcCgpCisgICAgeworICAgICAgbWFrZVY4T2JqZWN0R3JvdXBzKG1fZ3JvdXBlcik7
CisgICAgfQogCi0gICAgICAgICAgICBpZiAoZ3JvdXAuc2l6ZSgpID4gMSkKLSAgICAgICAgICAg
ICAgICB2ODo6Vjg6OkFkZE9iamVjdEdyb3VwKCZncm91cFswXSwgZ3JvdXAuc2l6ZSgpKTsKKyAg
ICB2b2lkIHZpc2l0RE9NV3JhcHBlcih2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IHdyYXBwZXIpCisgICAgeworICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZv
ID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKKyAgICAgICAgLy8gRklY
TUU6IGV4dGVuZCBXcmFwcGVyVHlwZUluZm8gd2l0aCBpc1N0eWxlIHRvIHNpbXBsaWZ5IHRoZSBj
aGVjayBiZWxvdy4KKyAgICAgICAgLy8gRklYTUU6IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBT
dHlsZUJhc2Ugd3JhcHBlcnMgd2Ugc2hvdWxkIGNhcmUgb2YuCisgICAgICAgIGlmICghVjhDU1NT
dHlsZVNoZWV0OjppbmZvLmVxdWFscyh0eXBlSW5mbykKKyAgICAgICAgICAgICYmICFWOENTU0No
YXJzZXRSdWxlOjppbmZvLmVxdWFscyh0eXBlSW5mbykKKyAgICAgICAgICAgICYmICFWOENTU0Zv
bnRGYWNlUnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhDU1NT
dHlsZVJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJbmZvKQorICAgICAgICAgICAgJiYgIVY4Q1NTSW1w
b3J0UnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhDU1NNZWRp
YVJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJbmZvKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIFN0eWxlQmFzZSogc3R5bGVCYXNlID0gc3RhdGljX2Nhc3Q8U3R5bGVC
YXNlKj4ob2JqZWN0KTsKIAotICAgICAgICAgICAgQVNTRVJUKGkgPT0gbmV4dEtleUluZGV4KTsK
KyAgICAgICAgLy8gV2UgcHV0IHRoZSB3aG9sZSB0cmVlIG9mIHN0eWxlIGVsZW1lbnRzIGludG8g
YSBzaW5nbGUgb2JqZWN0IGdyb3VwLgorICAgICAgICAvLyBUbyBhY2hpZXZlIHRoYXQgd2UgZ3Jv
dXAgZWxlbWVudHMgYnkgdGhlIHJvb3RzIG9mIHRoZWlyIHRyZWVzLgorICAgICAgICBTdHlsZUJh
c2UqIHJvb3QgPSBzdHlsZUJhc2U7CisgICAgICAgIEFTU0VSVChyb290KTsKKyAgICAgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgICBTdHlsZUJhc2UqIHBhcmVudCA9IHJvb3QtPnBhcmVudCgp
OworICAgICAgICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICByb290ID0gcGFyZW50OwogICAgICAgICB9CisgICAgICAgIC8vIEdyb3VwIGlkIGlzIGFuIGFk
ZHJlc3Mgb2YgdGhlIHJvb3QuCisgICAgICAgIHVpbnRwdHJfdCBncm91cElkID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHJvb3QpOworICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3Vw
ZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zNTgsOSAr
NDE1LDEyIEBACiAgICAgdmlzaXRBY3RpdmVET01PYmplY3RzSW5DdXJyZW50VGhyZWFkKCZwcm9s
b2d1ZVZpc2l0b3IpOwogCiAgICAgLy8gQ3JlYXRlIG9iamVjdCBncm91cHMuCisgICAgTm9kZUdy
b3VwZXJWaXNpdG9yIG5vZGVHcm91cGVyVmlzaXRvcjsKKyAgICB2aXNpdERPTU5vZGVzSW5DdXJy
ZW50VGhyZWFkKCZub2RlR3JvdXBlclZpc2l0b3IpOworICAgIG5vZGVHcm91cGVyVmlzaXRvci5h
cHBseUdyb3VwaW5nKCk7CisKICAgICBPYmplY3RHcm91cGVyVmlzaXRvciBvYmplY3RHcm91cGVy
VmlzaXRvcjsKLSAgICB2aXNpdERPTU5vZGVzSW5DdXJyZW50VGhyZWFkKCZvYmplY3RHcm91cGVy
VmlzaXRvcik7Ci0gICAgb2JqZWN0R3JvdXBlclZpc2l0b3IuYXBwbHlHcm91cGluZygpOworICAg
IHZpc2l0RE9NT2JqZWN0c0luQ3VycmVudFRocmVhZCgmb2JqZWN0R3JvdXBlclZpc2l0b3IpOwog
CiAgICAgLy8gQ2xlYW4gc2luZ2xlIGVsZW1lbnQgY2FjaGUgZm9yIHN0cmluZyBjb252ZXJzaW9u
cy4KICAgICBsYXN0U3RyaW5nSW1wbCA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCShy
ZXZpc2lvbiA3MjgxOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQAogCiAgICAgICAgIGNsYXNzIFZpc2l0b3IgewogICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRNYXAoKSB7IH0KKyAg
ICAgICAgICAgIHZpcnR1YWwgdm9pZCBlbmRNYXAoKSB7IH0KICAgICAgICAgICAgIHZpcnR1YWwg
dm9pZCB2aXNpdERPTVdyYXBwZXIoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5
cGU+IG9iamVjdCkgPSAwOwogICAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICB2aXJ0dWFs
IH5WaXNpdG9yKCkgeyB9CkBAIC0xMjIsOSArMTI0LDExIEBACiAKICAgICAgICAgdmlydHVhbCB2
b2lkIHZpc2l0KHR5cGVuYW1lIFBhcmVudDo6VmlzaXRvciogdmlzaXRvcikKICAgICAgICAgewor
ICAgICAgICAgICAgdmlzaXRvci0+c3RhcnRNYXAoKTsKICAgICAgICAgICAgIHR5cGVuYW1lIEhh
c2hNYXA8S2V5VHlwZSosIFZhbHVlVHlwZSo+OjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7
CiAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gbV9tYXAuZW5kKCk7ICsraXQpCiAgICAgICAgICAg
ICAgICAgdmlzaXRvci0+dmlzaXRET01XcmFwcGVyKGl0LT5maXJzdCwgdjg6OlBlcnNpc3RlbnQ8
VmFsdWVUeXBlPihpdC0+c2Vjb25kKSk7CisgICAgICAgICAgICB2aXNpdG9yLT5lbmRNYXAoKTsK
ICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75178</attachid>
            <date>2010-11-30 11:57:52 -0800</date>
            <delta_ts>2010-12-01 10:50:09 -0800</delta_ts>
            <desc>Next round of style fixes</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>11144</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjkzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMTEtMzAgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
b3J0IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzcyODE5LyB0byB2OC1iYWNrZWQg
cG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MDI0NgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01NYXAuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDo6VmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwOjpWaXNpdG9yOjplbmRNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdyb3VwZXJJ
dGVtOjpHcm91cGVySXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpHcm91cGVySXRlbTo6Z3JvdXBJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVjhPYmplY3RHcm91cHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjpOb2RlR3JvdXBlclZpc2l0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjphcHBseUdyb3VwaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9iamVjdEdyb3VwZXJWaXNpdG9yOjpPYmplY3RHcm91cGVyVmlzaXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpPYmplY3RHcm91cGVyVmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAgICAo
V2ViQ29yZTo6T2JqZWN0R3JvdXBlclZpc2l0b3I6OmVuZE1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpPYmplY3RHcm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKToKKwogMjAxMC0xMS0zMCAgWGlhb21laSBK
aSAgPHhqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQu
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNzI4
MTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNiArNDEsMTIgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2lu
Y2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OENTU0NoYXJzZXRSdWxlLmgiCisjaW5jbHVkZSAiVjhDU1NGb250RmFjZVJ1bGUuaCIKKyNpbmNs
dWRlICJWOENTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU01lZGlhUnVsZS5oIgorI2lu
Y2x1ZGUgIlY4Q1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiVjhDU1NTdHlsZVNoZWV0LmgiCiAj
aW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOE1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgpAQCAtMjEzLDIwICsyMTksMTcgQEAKIAogY2xhc3MgR3JvdXBlckl0ZW0g
ewogcHVibGljOgotICAgIEdyb3VwZXJJdGVtKHVpbnRwdHJfdCBncm91cElkLCBOb2RlKiBub2Rl
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKSAKKyAgICBHcm91cGVySXRlbSh1
aW50cHRyX3QgZ3JvdXBJZCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgCiAg
ICAgICAgIDogbV9ncm91cElkKGdyb3VwSWQpCi0gICAgICAgICwgbV9ub2RlKG5vZGUpCiAgICAg
ICAgICwgbV93cmFwcGVyKHdyYXBwZXIpIAogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgIHVp
bnRwdHJfdCBncm91cElkKCkgY29uc3QgeyByZXR1cm4gbV9ncm91cElkOyB9Ci0gICAgTm9kZSog
bm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IHdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXI7IH0KIAogcHJpdmF0ZToK
ICAgICB1aW50cHRyX3QgbV9ncm91cElkOwotICAgIE5vZGUqIG1fbm9kZTsKICAgICB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiBtX3dyYXBwZXI7CiB9OwogCkBAIC0yMzcsMTYgKzI0MCw1NSBA
QAogCiB0eXBlZGVmIFZlY3RvcjxHcm91cGVySXRlbT4gR3JvdXBlckxpc3Q7CiAKLWNsYXNzIE9i
amVjdEdyb3VwZXJWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3Ig
ewordm9pZCBtYWtlVjhPYmplY3RHcm91cHMoR3JvdXBlckxpc3QmIGdyb3VwZXIpCit7CisgICAg
Ly8gR3JvdXAgYnkgc29ydGluZyBieSB0aGUgZ3JvdXAgaWQuCisgICAgc3RkOjpzb3J0KGdyb3Vw
ZXIuYmVnaW4oKSwgZ3JvdXBlci5lbmQoKSk7CisKKyAgICAvLyBGSVhNRSBTaG91bGQgcHJvYmFi
bHkgd29yayBpbiBpdGVyYXRvcnMgaGVyZSwgYnV0IGluZGV4ZXMgd2VyZSBlYXNpZXIgZm9yIG15
IHNpbXBsZSBtaW5kLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JvdXBlci5zaXplKCk7
ICkgeworICAgICAgICAvLyBTZWVrIHRvIHRoZSBuZXh0IGtleSAob3IgdGhlIGVuZCBvZiB0aGUg
bGlzdCkuCisgICAgICAgIHNpemVfdCBuZXh0S2V5SW5kZXggPSBncm91cGVyLnNpemUoKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBncm91cGVyLnNpemUoKTsgKytqKSB7CisgICAg
ICAgICAgICBpZiAoZ3JvdXBlcltpXS5ncm91cElkKCkgIT0gZ3JvdXBlcltqXS5ncm91cElkKCkp
IHsKKyAgICAgICAgICAgICAgICBuZXh0S2V5SW5kZXggPSBqOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG5leHRLZXlJ
bmRleCA+IGkpOworCisgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBhIGdyb3VwIGlmIGl0
IGhhcyBtb3JlIHRoYW4gb25lIG9iamVjdC4gSWYgaXQgb25seQorICAgICAgICAvLyBoYXMgb25l
IG9iamVjdCwgaXQgaGFzIG5vdGhpbmcgZWxzZSB0aGF0IG5lZWRzIHRvIGJlIGtlcHQgYWxpdmUu
CisgICAgICAgIGlmIChuZXh0S2V5SW5kZXggLSBpIDw9IDEpIHsKKyAgICAgICAgICAgIGkgPSBu
ZXh0S2V5SW5kZXg7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gZ3JvdXA7CisgICAgICAgIGdyb3Vw
LnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBpKTsKKyAgICAgICAgZm9yICg7IGkgPCBu
ZXh0S2V5SW5kZXg7ICsraSkgeworICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiB3cmFwcGVyID0gZ3JvdXBlcltpXS53cmFwcGVyKCk7CisgICAgICAgICAgICBpZiAoIXdyYXBw
ZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChncm91cC5zaXplKCkgPiAxKQorICAgICAgICAgICAgdjg6
OlY4OjpBZGRPYmplY3RHcm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7CisKKyAgICAgICAg
QVNTRVJUKGkgPT0gbmV4dEtleUluZGV4KTsKKyAgICB9Cit9CisKK2NsYXNzIE5vZGVHcm91cGVy
VmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yIHsKIHB1YmxpYzoK
LSAgICBPYmplY3RHcm91cGVyVmlzaXRvcigpCisgICAgTm9kZUdyb3VwZXJWaXNpdG9yKCkKICAg
ICB7CiAgICAgICAgIC8vIEZJWE1FOiBncm91cGVyXy5yZXNlcnZlQ2FwYWNpdHkobm9kZV9tYXAu
c2l6ZSgpKTsgID8KICAgICB9CiAKICAgICB2b2lkIHZpc2l0RE9NV3JhcHBlcihOb2RlKiBub2Rl
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAgIHsKLQogICAgICAgICAv
LyBJZiB0aGUgbm9kZSBpcyBpbiBkb2N1bWVudCwgcHV0IGl0IGluIHRoZSBvd25lckRvY3VtZW50
J3Mgb2JqZWN0IGdyb3VwLgogICAgICAgICAvLwogICAgICAgICAvLyBJZiBhbiBpbWFnZSBlbGVt
ZW50IHdhcyBjcmVhdGVkIGJ5IEphdmFTY3JpcHQgIm5ldyBJbWFnZSIsCkBAIC0yNzcsNjUgKzMx
OSw4MCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Pihyb290KTsKICAgICAgICAgfQotICAgICAgICBtX2dyb3VwZXIuYXBw
ZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIG5vZGUsIHdyYXBwZXIpKTsKKyAgICAgICAgbV9ncm91
cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CiAgICAgfQogCiAgICAg
dm9pZCBhcHBseUdyb3VwaW5nKCkKICAgICB7Ci0gICAgICAgIC8vIEdyb3VwIGJ5IHNvcnRpbmcg
YnkgdGhlIGdyb3VwIGlkLgotICAgICAgICBzdGQ6OnNvcnQobV9ncm91cGVyLmJlZ2luKCksIG1f
Z3JvdXBlci5lbmQoKSk7CisgICAgICAgIC8qIEZJWE1FOiBSZS1lbmFibGVkIHRoaXMgY29kZSB0
byBhdm9pZCBHQ2luZyB0aGVzZSB3cmFwcGVycyEKKyAgICAgICAgICAgICAgICAgICAgICBDdXJy
ZW50bHkgdGhpcyBkZXBlbmRzIG9uIGxvb2tpbmcgdXAgdGhlIHdyYXBwZXIKKyAgICAgICAgICAg
ICAgICAgICAgICBkdXJpbmcgYSBHQywgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggaXNvbGF0ZWQg
d29ybGQKKyAgICAgICAgICAgICAgICAgICAgICB3ZSdyZSBpbiwgc28gaXQncyB1bmNsZWFyIHdo
aWNoIG1hcCB0byBsb29rIGluLi4uCiAKLSAgICAgICAgLy8gRklYTUUgU2hvdWxkIHByb2JhYmx5
IHdvcmsgaW4gaXRlcmF0b3JzIGhlcmUsIGJ1dCBpbmRleGVzIHdlcmUgZWFzaWVyIGZvciBteSBz
aW1wbGUgbWluZC4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyb3VwZXIuc2l6
ZSgpOyApIHsKLSAgICAgICAgICAgIC8vIFNlZWsgdG8gdGhlIG5leHQga2V5IChvciB0aGUgZW5k
IG9mIHRoZSBsaXN0KS4KLSAgICAgICAgICAgIHNpemVfdCBuZXh0S2V5SW5kZXggPSBtX2dyb3Vw
ZXIuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBtX2dyb3VwZXIu
c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAobV9ncm91cGVyW2ldLmdyb3VwSWQo
KSAhPSBtX2dyb3VwZXJbal0uZ3JvdXBJZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5leHRL
ZXlJbmRleCA9IGo7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgc3R5bGVkIGFuZCB0
aGVyZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBpbmxpbmUKKyAgICAgICAgLy8gc3R5bGUgZGVjbGFy
YXRpb24sIHdlIG5lZWQgdG8ga2VlcCB0aGF0IHN0eWxlIGRlY2xhcmF0aW9uCisgICAgICAgIC8v
IHdyYXBwZXIgYWxpdmUgYXMgd2VsbCwgc28gd2UgYWRkIGl0IHRvIHRoZSBvYmplY3QgZ3JvdXAu
CisgICAgICAgIGlmIChub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICAgIFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQgPSByZWludGVycHJldF9jYXN0PFN0eWxlZEVsZW1lbnQqPihub2Rl
KTsKKyAgICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGVsZW1lbnQtPmlubGlu
ZVN0eWxlRGVjbCgpOworICAgICAgICAgIGlmIChzdHlsZSAhPSBOVUxMKSB7CisgICAgICAgICAg
ICB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KHN0eWxlKTsKKyAgICAgICAgICAgIGlm
ICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVy
KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKi8KKyAgICAgICAgbWFrZVY4T2Jq
ZWN0R3JvdXBzKG1fZ3JvdXBlcik7CisgICAgfQogCi0gICAgICAgICAgICBBU1NFUlQobmV4dEtl
eUluZGV4ID4gaSk7Citwcml2YXRlOgorICAgIEdyb3VwZXJMaXN0IG1fZ3JvdXBlcjsKK307CiAK
LSAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBhIGdyb3VwIGlmIGl0IGhhcyBtb3Jl
IHRoYW4gb25lIG9iamVjdC4gSWYgaXQgb25seQotICAgICAgICAgICAgLy8gaGFzIG9uZSBvYmpl
Y3QsIGl0IGhhcyBub3RoaW5nIGVsc2UgdGhhdCBuZWVkcyB0byBiZSBrZXB0IGFsaXZlLgotICAg
ICAgICAgICAgaWYgKG5leHRLZXlJbmRleCAtIGkgPD0gMSkgewotICAgICAgICAgICAgICAgIGkg
PSBuZXh0S2V5SW5kZXg7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
CitjbGFzcyBPYmplY3RHcm91cGVyVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPHZvaWQ+
OjpWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBPYmplY3RHcm91cGVyVmlzaXRvcigpCisgICAgewor
ICAgIH0KIAotICAgICAgICAgICAgVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBn
cm91cDsKLSAgICAgICAgICAgIGdyb3VwLnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBp
KTsKLSAgICAgICAgICAgIGZvciAoOyBpIDwgbmV4dEtleUluZGV4OyArK2kpIHsKLSAgICAgICAg
ICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIgPSBtX2dyb3VwZXJbaV0u
d3JhcHBlcigpOwotICAgICAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKLSAgICAgICAgICAgICAgICAv
KiBGSVhNRTogUmUtZW5hYmxlZCB0aGlzIGNvZGUgdG8gYXZvaWQgR0NpbmcgdGhlc2Ugd3JhcHBl
cnMhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSB0aGlzIGRlcGVuZHMg
b24gbG9va2luZyB1cCB0aGUgd3JhcHBlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
dXJpbmcgYSBHQywgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggaXNvbGF0ZWQgd29ybGQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2UncmUgaW4sIHNvIGl0J3MgdW5jbGVhciB3aGljaCBt
YXAgdG8gbG9vayBpbi4uLgorICAgIHZvaWQgc3RhcnRNYXAoKQorICAgIHsKKyAgICAgIG1fZ3Jv
dXBlci5zaHJpbmsoMCk7CisgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5vZGUg
aXMgc3R5bGVkIGFuZCB0aGVyZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBpbmxpbmUKLSAgICAgICAg
ICAgICAgICAvLyBzdHlsZSBkZWNsYXJhdGlvbiwgd2UgbmVlZCB0byBrZWVwIHRoYXQgc3R5bGUg
ZGVjbGFyYXRpb24KLSAgICAgICAgICAgICAgICAvLyB3cmFwcGVyIGFsaXZlIGFzIHdlbGwsIHNv
IHdlIGFkZCBpdCB0byB0aGUgb2JqZWN0IGdyb3VwLgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5pc1N0eWxlZEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgU3R5bGVkRWxlbWVudCog
ZWxlbWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOwotICAgICAg
ICAgICAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5pbmxpbmVT
dHlsZURlY2woKTsKLSAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAhPSBOVUxMKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoc3R5bGUpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIH0KKyAgICB2
b2lkIGVuZE1hcCgpCisgICAgeworICAgICAgbWFrZVY4T2JqZWN0R3JvdXBzKG1fZ3JvdXBlcik7
CisgICAgfQogCi0gICAgICAgICAgICBpZiAoZ3JvdXAuc2l6ZSgpID4gMSkKLSAgICAgICAgICAg
ICAgICB2ODo6Vjg6OkFkZE9iamVjdEdyb3VwKCZncm91cFswXSwgZ3JvdXAuc2l6ZSgpKTsKKyAg
ICB2b2lkIHZpc2l0RE9NV3JhcHBlcih2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IHdyYXBwZXIpCisgICAgeworICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZv
ID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKKyAgICAgICAgLy8gRklY
TUU6IGV4dGVuZCBXcmFwcGVyVHlwZUluZm8gd2l0aCBpc1N0eWxlIHRvIHNpbXBsaWZ5IHRoZSBj
aGVjayBiZWxvdy4KKyAgICAgICAgLy8gRklYTUU6IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBT
dHlsZUJhc2Ugd3JhcHBlcnMgd2Ugc2hvdWxkIGNhcmUgb2YuCisgICAgICAgIGlmICghVjhDU1NT
dHlsZVNoZWV0OjppbmZvLmVxdWFscyh0eXBlSW5mbykKKyAgICAgICAgICAgICYmICFWOENTU0No
YXJzZXRSdWxlOjppbmZvLmVxdWFscyh0eXBlSW5mbykKKyAgICAgICAgICAgICYmICFWOENTU0Zv
bnRGYWNlUnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhDU1NT
dHlsZVJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJbmZvKQorICAgICAgICAgICAgJiYgIVY4Q1NTSW1w
b3J0UnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhDU1NNZWRp
YVJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJbmZvKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIFN0eWxlQmFzZSogc3R5bGVCYXNlID0gc3RhdGljX2Nhc3Q8U3R5bGVC
YXNlKj4ob2JqZWN0KTsKIAotICAgICAgICAgICAgQVNTRVJUKGkgPT0gbmV4dEtleUluZGV4KTsK
KyAgICAgICAgLy8gV2UgcHV0IHRoZSB3aG9sZSB0cmVlIG9mIHN0eWxlIGVsZW1lbnRzIGludG8g
YSBzaW5nbGUgb2JqZWN0IGdyb3VwLgorICAgICAgICAvLyBUbyBhY2hpZXZlIHRoYXQgd2UgZ3Jv
dXAgZWxlbWVudHMgYnkgdGhlIHJvb3RzIG9mIHRoZWlyIHRyZWVzLgorICAgICAgICBTdHlsZUJh
c2UqIHJvb3QgPSBzdHlsZUJhc2U7CisgICAgICAgIEFTU0VSVChyb290KTsKKyAgICAgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgICBTdHlsZUJhc2UqIHBhcmVudCA9IHJvb3QtPnBhcmVudCgp
OworICAgICAgICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICByb290ID0gcGFyZW50OwogICAgICAgICB9CisgICAgICAgIC8vIEdyb3VwIGlkIGlzIGFuIGFk
ZHJlc3Mgb2YgdGhlIHJvb3QuCisgICAgICAgIHVpbnRwdHJfdCBncm91cElkID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHJvb3QpOworICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3Vw
ZXJJdGVtKGdyb3VwSWQsIHdyYXBwZXIpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zNTgsOSAr
NDE1LDEyIEBACiAgICAgdmlzaXRBY3RpdmVET01PYmplY3RzSW5DdXJyZW50VGhyZWFkKCZwcm9s
b2d1ZVZpc2l0b3IpOwogCiAgICAgLy8gQ3JlYXRlIG9iamVjdCBncm91cHMuCisgICAgTm9kZUdy
b3VwZXJWaXNpdG9yIG5vZGVHcm91cGVyVmlzaXRvcjsKKyAgICB2aXNpdERPTU5vZGVzSW5DdXJy
ZW50VGhyZWFkKCZub2RlR3JvdXBlclZpc2l0b3IpOworICAgIG5vZGVHcm91cGVyVmlzaXRvci5h
cHBseUdyb3VwaW5nKCk7CisKICAgICBPYmplY3RHcm91cGVyVmlzaXRvciBvYmplY3RHcm91cGVy
VmlzaXRvcjsKLSAgICB2aXNpdERPTU5vZGVzSW5DdXJyZW50VGhyZWFkKCZvYmplY3RHcm91cGVy
VmlzaXRvcik7Ci0gICAgb2JqZWN0R3JvdXBlclZpc2l0b3IuYXBwbHlHcm91cGluZygpOworICAg
IHZpc2l0RE9NT2JqZWN0c0luQ3VycmVudFRocmVhZCgmb2JqZWN0R3JvdXBlclZpc2l0b3IpOwog
CiAgICAgLy8gQ2xlYW4gc2luZ2xlIGVsZW1lbnQgY2FjaGUgZm9yIHN0cmluZyBjb252ZXJzaW9u
cy4KICAgICBsYXN0U3RyaW5nSW1wbCA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCShy
ZXZpc2lvbiA3MjgxOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQAogCiAgICAgICAgIGNsYXNzIFZpc2l0b3IgewogICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRNYXAoKSB7IH0KKyAg
ICAgICAgICAgIHZpcnR1YWwgdm9pZCBlbmRNYXAoKSB7IH0KICAgICAgICAgICAgIHZpcnR1YWwg
dm9pZCB2aXNpdERPTVdyYXBwZXIoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5
cGU+IG9iamVjdCkgPSAwOwogICAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICB2aXJ0dWFs
IH5WaXNpdG9yKCkgeyB9CkBAIC0xMjIsOSArMTI0LDExIEBACiAKICAgICAgICAgdmlydHVhbCB2
b2lkIHZpc2l0KHR5cGVuYW1lIFBhcmVudDo6VmlzaXRvciogdmlzaXRvcikKICAgICAgICAgewor
ICAgICAgICAgICAgdmlzaXRvci0+c3RhcnRNYXAoKTsKICAgICAgICAgICAgIHR5cGVuYW1lIEhh
c2hNYXA8S2V5VHlwZSosIFZhbHVlVHlwZSo+OjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7
CiAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gbV9tYXAuZW5kKCk7ICsraXQpCiAgICAgICAgICAg
ICAgICAgdmlzaXRvci0+dmlzaXRET01XcmFwcGVyKGl0LT5maXJzdCwgdjg6OlBlcnNpc3RlbnQ8
VmFsdWVUeXBlPihpdC0+c2Vjb25kKSk7CisgICAgICAgICAgICB2aXNpdG9yLT5lbmRNYXAoKTsK
ICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75291</attachid>
            <date>2010-12-01 10:50:09 -0800</date>
            <delta_ts>2010-12-03 13:07:02 -0800</delta_ts>
            <desc>Another style nit</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>11148</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjkzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMTEtMzAgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
b3J0IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzcyODE5LyB0byB2OC1iYWNrZWQg
cG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MDI0NgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01NYXAuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDo6VmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwOjpWaXNpdG9yOjplbmRNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdyb3VwZXJJ
dGVtOjpHcm91cGVySXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpHcm91cGVySXRlbTo6Z3JvdXBJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVjhPYmplY3RHcm91cHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjpOb2RlR3JvdXBlclZpc2l0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjphcHBseUdyb3VwaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9iamVjdEdyb3VwZXJWaXNpdG9yOjpPYmplY3RHcm91cGVyVmlzaXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpPYmplY3RHcm91cGVyVmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAgICAo
V2ViQ29yZTo6T2JqZWN0R3JvdXBlclZpc2l0b3I6OmVuZE1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpPYmplY3RHcm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKToKKwogMjAxMC0xMS0zMCAgWGlhb21laSBK
aSAgPHhqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQu
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNzI4
MTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNiArNDEsMTIgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2lu
Y2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OENTU0NoYXJzZXRSdWxlLmgiCisjaW5jbHVkZSAiVjhDU1NGb250RmFjZVJ1bGUuaCIKKyNpbmNs
dWRlICJWOENTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU01lZGlhUnVsZS5oIgorI2lu
Y2x1ZGUgIlY4Q1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiVjhDU1NTdHlsZVNoZWV0LmgiCiAj
aW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOE1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgpAQCAtMjEzLDIwICsyMTksMTcgQEAKIAogY2xhc3MgR3JvdXBlckl0ZW0g
ewogcHVibGljOgotICAgIEdyb3VwZXJJdGVtKHVpbnRwdHJfdCBncm91cElkLCBOb2RlKiBub2Rl
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKSAKKyAgICBHcm91cGVySXRlbSh1
aW50cHRyX3QgZ3JvdXBJZCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgCiAg
ICAgICAgIDogbV9ncm91cElkKGdyb3VwSWQpCi0gICAgICAgICwgbV9ub2RlKG5vZGUpCiAgICAg
ICAgICwgbV93cmFwcGVyKHdyYXBwZXIpIAogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgIHVp
bnRwdHJfdCBncm91cElkKCkgY29uc3QgeyByZXR1cm4gbV9ncm91cElkOyB9Ci0gICAgTm9kZSog
bm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IHdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXI7IH0KIAogcHJpdmF0ZToK
ICAgICB1aW50cHRyX3QgbV9ncm91cElkOwotICAgIE5vZGUqIG1fbm9kZTsKICAgICB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiBtX3dyYXBwZXI7CiB9OwogCkBAIC0yMzcsMTYgKzI0MCw1NSBA
QAogCiB0eXBlZGVmIFZlY3RvcjxHcm91cGVySXRlbT4gR3JvdXBlckxpc3Q7CiAKLWNsYXNzIE9i
amVjdEdyb3VwZXJWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3Ig
ewordm9pZCBtYWtlVjhPYmplY3RHcm91cHMoR3JvdXBlckxpc3QmIGdyb3VwZXIpCit7CisgICAg
Ly8gR3JvdXAgYnkgc29ydGluZyBieSB0aGUgZ3JvdXAgaWQuCisgICAgc3RkOjpzb3J0KGdyb3Vw
ZXIuYmVnaW4oKSwgZ3JvdXBlci5lbmQoKSk7CisKKyAgICAvLyBGSVhNRSBTaG91bGQgcHJvYmFi
bHkgd29yayBpbiBpdGVyYXRvcnMgaGVyZSwgYnV0IGluZGV4ZXMgd2VyZSBlYXNpZXIgZm9yIG15
IHNpbXBsZSBtaW5kLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JvdXBlci5zaXplKCk7
ICkgeworICAgICAgICAvLyBTZWVrIHRvIHRoZSBuZXh0IGtleSAob3IgdGhlIGVuZCBvZiB0aGUg
bGlzdCkuCisgICAgICAgIHNpemVfdCBuZXh0S2V5SW5kZXggPSBncm91cGVyLnNpemUoKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBncm91cGVyLnNpemUoKTsgKytqKSB7CisgICAg
ICAgICAgICBpZiAoZ3JvdXBlcltpXS5ncm91cElkKCkgIT0gZ3JvdXBlcltqXS5ncm91cElkKCkp
IHsKKyAgICAgICAgICAgICAgICBuZXh0S2V5SW5kZXggPSBqOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG5leHRLZXlJ
bmRleCA+IGkpOworCisgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBhIGdyb3VwIGlmIGl0
IGhhcyBtb3JlIHRoYW4gb25lIG9iamVjdC4gSWYgaXQgb25seQorICAgICAgICAvLyBoYXMgb25l
IG9iamVjdCwgaXQgaGFzIG5vdGhpbmcgZWxzZSB0aGF0IG5lZWRzIHRvIGJlIGtlcHQgYWxpdmUu
CisgICAgICAgIGlmIChuZXh0S2V5SW5kZXggLSBpIDw9IDEpIHsKKyAgICAgICAgICAgIGkgPSBu
ZXh0S2V5SW5kZXg7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gZ3JvdXA7CisgICAgICAgIGdyb3Vw
LnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBpKTsKKyAgICAgICAgZm9yICg7IGkgPCBu
ZXh0S2V5SW5kZXg7ICsraSkgeworICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiB3cmFwcGVyID0gZ3JvdXBlcltpXS53cmFwcGVyKCk7CisgICAgICAgICAgICBpZiAoIXdyYXBw
ZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChncm91cC5zaXplKCkgPiAxKQorICAgICAgICAgICAgdjg6
OlY4OjpBZGRPYmplY3RHcm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7CisKKyAgICAgICAg
QVNTRVJUKGkgPT0gbmV4dEtleUluZGV4KTsKKyAgICB9Cit9CisKK2NsYXNzIE5vZGVHcm91cGVy
VmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yIHsKIHB1YmxpYzoK
LSAgICBPYmplY3RHcm91cGVyVmlzaXRvcigpCisgICAgTm9kZUdyb3VwZXJWaXNpdG9yKCkKICAg
ICB7CiAgICAgICAgIC8vIEZJWE1FOiBncm91cGVyXy5yZXNlcnZlQ2FwYWNpdHkobm9kZV9tYXAu
c2l6ZSgpKTsgID8KICAgICB9CiAKICAgICB2b2lkIHZpc2l0RE9NV3JhcHBlcihOb2RlKiBub2Rl
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAgIHsKLQogICAgICAgICAv
LyBJZiB0aGUgbm9kZSBpcyBpbiBkb2N1bWVudCwgcHV0IGl0IGluIHRoZSBvd25lckRvY3VtZW50
J3Mgb2JqZWN0IGdyb3VwLgogICAgICAgICAvLwogICAgICAgICAvLyBJZiBhbiBpbWFnZSBlbGVt
ZW50IHdhcyBjcmVhdGVkIGJ5IEphdmFTY3JpcHQgIm5ldyBJbWFnZSIsCkBAIC0yNzcsNjUgKzMx
OSw4MCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Pihyb290KTsKICAgICAgICAgfQotICAgICAgICBtX2dyb3VwZXIuYXBw
ZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIG5vZGUsIHdyYXBwZXIpKTsKKyAgICAgICAgbV9ncm91
cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CiAgICAgfQogCiAgICAg
dm9pZCBhcHBseUdyb3VwaW5nKCkKICAgICB7Ci0gICAgICAgIC8vIEdyb3VwIGJ5IHNvcnRpbmcg
YnkgdGhlIGdyb3VwIGlkLgotICAgICAgICBzdGQ6OnNvcnQobV9ncm91cGVyLmJlZ2luKCksIG1f
Z3JvdXBlci5lbmQoKSk7CisgICAgICAgIC8qIEZJWE1FOiBSZS1lbmFibGVkIHRoaXMgY29kZSB0
byBhdm9pZCBHQ2luZyB0aGVzZSB3cmFwcGVycyEKKyAgICAgICAgICAgICAgICAgICAgICBDdXJy
ZW50bHkgdGhpcyBkZXBlbmRzIG9uIGxvb2tpbmcgdXAgdGhlIHdyYXBwZXIKKyAgICAgICAgICAg
ICAgICAgICAgICBkdXJpbmcgYSBHQywgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggaXNvbGF0ZWQg
d29ybGQKKyAgICAgICAgICAgICAgICAgICAgICB3ZSdyZSBpbiwgc28gaXQncyB1bmNsZWFyIHdo
aWNoIG1hcCB0byBsb29rIGluLi4uCiAKLSAgICAgICAgLy8gRklYTUUgU2hvdWxkIHByb2JhYmx5
IHdvcmsgaW4gaXRlcmF0b3JzIGhlcmUsIGJ1dCBpbmRleGVzIHdlcmUgZWFzaWVyIGZvciBteSBz
aW1wbGUgbWluZC4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyb3VwZXIuc2l6
ZSgpOyApIHsKLSAgICAgICAgICAgIC8vIFNlZWsgdG8gdGhlIG5leHQga2V5IChvciB0aGUgZW5k
IG9mIHRoZSBsaXN0KS4KLSAgICAgICAgICAgIHNpemVfdCBuZXh0S2V5SW5kZXggPSBtX2dyb3Vw
ZXIuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBtX2dyb3VwZXIu
c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAobV9ncm91cGVyW2ldLmdyb3VwSWQo
KSAhPSBtX2dyb3VwZXJbal0uZ3JvdXBJZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5leHRL
ZXlJbmRleCA9IGo7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgc3R5bGVkIGFuZCB0
aGVyZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBpbmxpbmUKKyAgICAgICAgLy8gc3R5bGUgZGVjbGFy
YXRpb24sIHdlIG5lZWQgdG8ga2VlcCB0aGF0IHN0eWxlIGRlY2xhcmF0aW9uCisgICAgICAgIC8v
IHdyYXBwZXIgYWxpdmUgYXMgd2VsbCwgc28gd2UgYWRkIGl0IHRvIHRoZSBvYmplY3QgZ3JvdXAu
CisgICAgICAgIGlmIChub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICAgIFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQgPSByZWludGVycHJldF9jYXN0PFN0eWxlZEVsZW1lbnQqPihub2Rl
KTsKKyAgICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGVsZW1lbnQtPmlubGlu
ZVN0eWxlRGVjbCgpOworICAgICAgICAgIGlmIChzdHlsZSAhPSBOVUxMKSB7CisgICAgICAgICAg
ICB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KHN0eWxlKTsKKyAgICAgICAgICAgIGlm
ICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVy
KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKi8KKyAgICAgICAgbWFrZVY4T2Jq
ZWN0R3JvdXBzKG1fZ3JvdXBlcik7CisgICAgfQogCi0gICAgICAgICAgICBBU1NFUlQobmV4dEtl
eUluZGV4ID4gaSk7Citwcml2YXRlOgorICAgIEdyb3VwZXJMaXN0IG1fZ3JvdXBlcjsKK307CiAK
LSAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBhIGdyb3VwIGlmIGl0IGhhcyBtb3Jl
IHRoYW4gb25lIG9iamVjdC4gSWYgaXQgb25seQotICAgICAgICAgICAgLy8gaGFzIG9uZSBvYmpl
Y3QsIGl0IGhhcyBub3RoaW5nIGVsc2UgdGhhdCBuZWVkcyB0byBiZSBrZXB0IGFsaXZlLgotICAg
ICAgICAgICAgaWYgKG5leHRLZXlJbmRleCAtIGkgPD0gMSkgewotICAgICAgICAgICAgICAgIGkg
PSBuZXh0S2V5SW5kZXg7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
CitjbGFzcyBPYmplY3RHcm91cGVyVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPHZvaWQ+
OjpWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBPYmplY3RHcm91cGVyVmlzaXRvcigpCisgICAgewor
ICAgIH0KIAotICAgICAgICAgICAgVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBn
cm91cDsKLSAgICAgICAgICAgIGdyb3VwLnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBp
KTsKLSAgICAgICAgICAgIGZvciAoOyBpIDwgbmV4dEtleUluZGV4OyArK2kpIHsKLSAgICAgICAg
ICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIgPSBtX2dyb3VwZXJbaV0u
d3JhcHBlcigpOwotICAgICAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKLSAgICAgICAgICAgICAgICAv
KiBGSVhNRTogUmUtZW5hYmxlZCB0aGlzIGNvZGUgdG8gYXZvaWQgR0NpbmcgdGhlc2Ugd3JhcHBl
cnMhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSB0aGlzIGRlcGVuZHMg
b24gbG9va2luZyB1cCB0aGUgd3JhcHBlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
dXJpbmcgYSBHQywgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggaXNvbGF0ZWQgd29ybGQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2UncmUgaW4sIHNvIGl0J3MgdW5jbGVhciB3aGljaCBt
YXAgdG8gbG9vayBpbi4uLgorICAgIHZvaWQgc3RhcnRNYXAoKQorICAgIHsKKyAgICAgICAgbV9n
cm91cGVyLnNocmluaygwKTsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbm9k
ZSBpcyBzdHlsZWQgYW5kIHRoZXJlIGlzIGEgd3JhcHBlciBmb3IgdGhlIGlubGluZQotICAgICAg
ICAgICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9uLCB3ZSBuZWVkIHRvIGtlZXAgdGhhdCBzdHls
ZSBkZWNsYXJhdGlvbgotICAgICAgICAgICAgICAgIC8vIHdyYXBwZXIgYWxpdmUgYXMgd2VsbCwg
c28gd2UgYWRkIGl0IHRvIHRoZSBvYmplY3QgZ3JvdXAuCi0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmlzU3R5bGVkRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICBTdHlsZWRFbGVtZW50
KiBlbGVtZW50ID0gcmVpbnRlcnByZXRfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSk7Ci0gICAg
ICAgICAgICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGVsZW1lbnQtPmlubGlu
ZVN0eWxlRGVjbCgpOwotICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICE9IE5VTEwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChzdHlsZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKHdyYXBwZXIpOwotICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgfQorICAg
IHZvaWQgZW5kTWFwKCkKKyAgICB7CisgICAgICAgIG1ha2VWOE9iamVjdEdyb3VwcyhtX2dyb3Vw
ZXIpOworICAgIH0KIAotICAgICAgICAgICAgaWYgKGdyb3VwLnNpemUoKSA+IDEpCi0gICAgICAg
ICAgICAgICAgdjg6OlY4OjpBZGRPYmplY3RHcm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7
CisgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIodm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBl
SW5mbyA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7CisgICAgICAgIC8v
IEZJWE1FOiBleHRlbmQgV3JhcHBlclR5cGVJbmZvIHdpdGggaXNTdHlsZSB0byBzaW1wbGlmeSB0
aGUgY2hlY2sgYmVsb3cuCisgICAgICAgIC8vIEZJWE1FOiBjaGVjayBpZiB0aGVyZSBhcmUgb3Ro
ZXIgU3R5bGVCYXNlIHdyYXBwZXJzIHdlIHNob3VsZCBjYXJlIG9mLgorICAgICAgICBpZiAoIVY4
Q1NTU3R5bGVTaGVldDo6aW5mby5lcXVhbHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhD
U1NDaGFyc2V0UnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhD
U1NGb250RmFjZVJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJbmZvKQorICAgICAgICAgICAgJiYgIVY4
Q1NTU3R5bGVSdWxlOjppbmZvLmVxdWFscyh0eXBlSW5mbykKKyAgICAgICAgICAgICYmICFWOENT
U0ltcG9ydFJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJbmZvKQorICAgICAgICAgICAgJiYgIVY4Q1NT
TWVkaWFSdWxlOjppbmZvLmVxdWFscyh0eXBlSW5mbykpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBTdHlsZUJhc2UqIHN0eWxlQmFzZSA9IHN0YXRpY19jYXN0PFN0
eWxlQmFzZSo+KG9iamVjdCk7CiAKLSAgICAgICAgICAgIEFTU0VSVChpID09IG5leHRLZXlJbmRl
eCk7CisgICAgICAgIC8vIFdlIHB1dCB0aGUgd2hvbGUgdHJlZSBvZiBzdHlsZSBlbGVtZW50cyBp
bnRvIGEgc2luZ2xlIG9iamVjdCBncm91cC4KKyAgICAgICAgLy8gVG8gYWNoaWV2ZSB0aGF0IHdl
IGdyb3VwIGVsZW1lbnRzIGJ5IHRoZSByb290cyBvZiB0aGVpciB0cmVlcy4KKyAgICAgICAgU3R5
bGVCYXNlKiByb290ID0gc3R5bGVCYXNlOworICAgICAgICBBU1NFUlQocm9vdCk7CisgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgU3R5bGVCYXNlKiBwYXJlbnQgPSByb290LT5wYXJl
bnQoKTsKKyAgICAgICAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgcm9vdCA9IHBhcmVudDsKICAgICAgICAgfQorICAgICAgICAvLyBHcm91cCBpZCBpcyBh
biBhZGRyZXNzIG9mIHRoZSByb290LgorICAgICAgICB1aW50cHRyX3QgZ3JvdXBJZCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihyb290KTsKKyAgICAgICAgbV9ncm91cGVyLmFwcGVuZChH
cm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzU4
LDkgKzQxNSwxMiBAQAogICAgIHZpc2l0QWN0aXZlRE9NT2JqZWN0c0luQ3VycmVudFRocmVhZCgm
cHJvbG9ndWVWaXNpdG9yKTsKIAogICAgIC8vIENyZWF0ZSBvYmplY3QgZ3JvdXBzLgorICAgIE5v
ZGVHcm91cGVyVmlzaXRvciBub2RlR3JvdXBlclZpc2l0b3I7CisgICAgdmlzaXRET01Ob2Rlc0lu
Q3VycmVudFRocmVhZCgmbm9kZUdyb3VwZXJWaXNpdG9yKTsKKyAgICBub2RlR3JvdXBlclZpc2l0
b3IuYXBwbHlHcm91cGluZygpOworCiAgICAgT2JqZWN0R3JvdXBlclZpc2l0b3Igb2JqZWN0R3Jv
dXBlclZpc2l0b3I7Ci0gICAgdmlzaXRET01Ob2Rlc0luQ3VycmVudFRocmVhZCgmb2JqZWN0R3Jv
dXBlclZpc2l0b3IpOwotICAgIG9iamVjdEdyb3VwZXJWaXNpdG9yLmFwcGx5R3JvdXBpbmcoKTsK
KyAgICB2aXNpdERPTU9iamVjdHNJbkN1cnJlbnRUaHJlYWQoJm9iamVjdEdyb3VwZXJWaXNpdG9y
KTsKIAogICAgIC8vIENsZWFuIHNpbmdsZSBlbGVtZW50IGNhY2hlIGZvciBzdHJpbmcgY29udmVy
c2lvbnMuCiAgICAgbGFzdFN0cmluZ0ltcGwgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAu
aAkocmV2aXNpb24gNzI4MTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDggQEAKIAogICAgICAgICBjbGFzcyBWaXNpdG9yIHsK
ICAgICAgICAgcHVibGljOgorICAgICAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0TWFwKCkgeyB9
CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZW5kTWFwKCkgeyB9CiAgICAgICAgICAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRET01XcmFwcGVyKEtleVR5cGUqIGtleSwgdjg6OlBlcnNpc3RlbnQ8VmFs
dWVUeXBlPiBvYmplY3QpID0gMDsKICAgICAgICAgcHJvdGVjdGVkOgogICAgICAgICAgICAgdmly
dHVhbCB+VmlzaXRvcigpIHsgfQpAQCAtMTIyLDkgKzEyNCwxMSBAQAogCiAgICAgICAgIHZpcnR1
YWwgdm9pZCB2aXNpdCh0eXBlbmFtZSBQYXJlbnQ6OlZpc2l0b3IqIHZpc2l0b3IpCiAgICAgICAg
IHsKKyAgICAgICAgICAgIHZpc2l0b3ItPnN0YXJ0TWFwKCk7CiAgICAgICAgICAgICB0eXBlbmFt
ZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdp
bigpOwogICAgICAgICAgICAgZm9yICg7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KQogICAgICAg
ICAgICAgICAgIHZpc2l0b3ItPnZpc2l0RE9NV3JhcHBlcihpdC0+Zmlyc3QsIHY4OjpQZXJzaXN0
ZW50PFZhbHVlVHlwZT4oaXQtPnNlY29uZCkpOworICAgICAgICAgICAgdmlzaXRvci0+ZW5kTWFw
KCk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75531</attachid>
            <date>2010-12-03 13:07:02 -0800</date>
            <delta_ts>2010-12-03 13:14:05 -0800</delta_ts>
            <desc>Addressing Nate&apos;s comments</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>11405</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzI2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMTEtMzAgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
b3J0IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzcyODE5LyB0byB2OC1iYWNrZWQg
cG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MDI0NgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01NYXAuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDo6VmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwOjpWaXNpdG9yOjplbmRNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdyb3VwZXJJ
dGVtOjpHcm91cGVySXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpHcm91cGVySXRlbTo6Z3JvdXBJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVjhPYmplY3RHcm91cHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjpOb2RlR3JvdXBlclZpc2l0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjphcHBseUdyb3VwaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9iamVjdEdyb3VwZXJWaXNpdG9yOjpPYmplY3RHcm91cGVyVmlzaXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpPYmplY3RHcm91cGVyVmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAgICAo
V2ViQ29yZTo6T2JqZWN0R3JvdXBlclZpc2l0b3I6OmVuZE1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpPYmplY3RHcm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKToKKwogMjAxMC0xMi0wMyAgQW5kcmFzIEJl
Y3NpICA8YWJlY3NpQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxk
IGZpeCBhZnRlciByNzMyNTQuCkBAIC0yNjI3LDYgKzI2NTMsNyBAQAogCiAgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CiAKIDIwMTAtMTEtMzAgIFhpYW9tZWkgSmkgIDx4
amlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDczMjY2KQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDYgKzQxLDEyIEBACiAjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDU1ND
aGFyc2V0UnVsZS5oIgorI2luY2x1ZGUgIlY4Q1NTRm9udEZhY2VSdWxlLmgiCisjaW5jbHVkZSAi
VjhDU1NJbXBvcnRSdWxlLmgiCisjaW5jbHVkZSAiVjhDU1NNZWRpYVJ1bGUuaCIKKyNpbmNsdWRl
ICJWOENTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIlY4Q1NTU3R5bGVTaGVldC5oIgogI2luY2x1
ZGUgIlY4RE9NTWFwLmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlY4
UHJveHkuaCIKQEAgLTIxMywyMCArMjE5LDE3IEBACiAKIGNsYXNzIEdyb3VwZXJJdGVtIHsKIHB1
YmxpYzoKLSAgICBHcm91cGVySXRlbSh1aW50cHRyX3QgZ3JvdXBJZCwgTm9kZSogbm9kZSwgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgCisgICAgR3JvdXBlckl0ZW0odWludHB0
cl90IGdyb3VwSWQsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpIAogICAgICAg
ICA6IG1fZ3JvdXBJZChncm91cElkKQotICAgICAgICAsIG1fbm9kZShub2RlKQogICAgICAgICAs
IG1fd3JhcHBlcih3cmFwcGVyKSAKICAgICAgICAgewogICAgICAgICB9CiAKICAgICB1aW50cHRy
X3QgZ3JvdXBJZCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JvdXBJZDsgfQotICAgIE5vZGUqIG5vZGUo
KSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVyKCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyOyB9CiAKIHByaXZhdGU6CiAgICAg
dWludHB0cl90IG1fZ3JvdXBJZDsKLSAgICBOb2RlKiBtX25vZGU7CiAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD4gbV93cmFwcGVyOwogfTsKIApAQCAtMjM3LDE2ICsyNDAsNTUgQEAKIAog
dHlwZWRlZiBWZWN0b3I8R3JvdXBlckl0ZW0+IEdyb3VwZXJMaXN0OwogCi1jbGFzcyBPYmplY3RH
cm91cGVyVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yIHsKK3Zv
aWQgbWFrZVY4T2JqZWN0R3JvdXBzKEdyb3VwZXJMaXN0JiBncm91cGVyKQoreworICAgIC8vIEdy
b3VwIGJ5IHNvcnRpbmcgYnkgdGhlIGdyb3VwIGlkLgorICAgIHN0ZDo6c29ydChncm91cGVyLmJl
Z2luKCksIGdyb3VwZXIuZW5kKCkpOworCisgICAgLy8gRklYTUUgU2hvdWxkIHByb2JhYmx5IHdv
cmsgaW4gaXRlcmF0b3JzIGhlcmUsIGJ1dCBpbmRleGVzIHdlcmUgZWFzaWVyIGZvciBteSBzaW1w
bGUgbWluZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyb3VwZXIuc2l6ZSgpOyApIHsK
KyAgICAgICAgLy8gU2VlayB0byB0aGUgbmV4dCBrZXkgKG9yIHRoZSBlbmQgb2YgdGhlIGxpc3Qp
LgorICAgICAgICBzaXplX3QgbmV4dEtleUluZGV4ID0gZ3JvdXBlci5zaXplKCk7CisgICAgICAg
IGZvciAoc2l6ZV90IGogPSBpOyBqIDwgZ3JvdXBlci5zaXplKCk7ICsraikgeworICAgICAgICAg
ICAgaWYgKGdyb3VwZXJbaV0uZ3JvdXBJZCgpICE9IGdyb3VwZXJbal0uZ3JvdXBJZCgpKSB7Cisg
ICAgICAgICAgICAgICAgbmV4dEtleUluZGV4ID0gajsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChuZXh0S2V5SW5kZXgg
PiBpKTsKKworICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYSBncm91cCBpZiBpdCBoYXMg
bW9yZSB0aGFuIG9uZSBvYmplY3QuIElmIGl0IG9ubHkKKyAgICAgICAgLy8gaGFzIG9uZSBvYmpl
Y3QsIGl0IGhhcyBub3RoaW5nIGVsc2UgdGhhdCBuZWVkcyB0byBiZSBrZXB0IGFsaXZlLgorICAg
ICAgICBpZiAobmV4dEtleUluZGV4IC0gaSA8PSAxKSB7CisgICAgICAgICAgICBpID0gbmV4dEtl
eUluZGV4OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBWZWN0
b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGdyb3VwOworICAgICAgICBncm91cC5yZXNl
cnZlQ2FwYWNpdHkobmV4dEtleUluZGV4IC0gaSk7CisgICAgICAgIGZvciAoOyBpIDwgbmV4dEtl
eUluZGV4OyArK2kpIHsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gd3Jh
cHBlciA9IGdyb3VwZXJbaV0ud3JhcHBlcigpOworICAgICAgICAgICAgaWYgKCF3cmFwcGVyLklz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICBncm91cC5hcHBlbmQod3JhcHBlcik7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZ3JvdXAuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgIHY4OjpWODo6
QWRkT2JqZWN0R3JvdXAoJmdyb3VwWzBdLCBncm91cC5zaXplKCkpOworCisgICAgICAgIEFTU0VS
VChpID09IG5leHRLZXlJbmRleCk7CisgICAgfQorfQorCitjbGFzcyBOb2RlR3JvdXBlclZpc2l0
b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciB7CiBwdWJsaWM6Ci0gICAg
T2JqZWN0R3JvdXBlclZpc2l0b3IoKQorICAgIE5vZGVHcm91cGVyVmlzaXRvcigpCiAgICAgewog
ICAgICAgICAvLyBGSVhNRTogZ3JvdXBlcl8ucmVzZXJ2ZUNhcGFjaXR5KG5vZGVfbWFwLnNpemUo
KSk7ICA/CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoTm9kZSogbm9kZSwgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKICAgICB7Ci0KICAgICAgICAgLy8gSWYg
dGhlIG5vZGUgaXMgaW4gZG9jdW1lbnQsIHB1dCBpdCBpbiB0aGUgb3duZXJEb2N1bWVudCdzIG9i
amVjdCBncm91cC4KICAgICAgICAgLy8KICAgICAgICAgLy8gSWYgYW4gaW1hZ2UgZWxlbWVudCB3
YXMgY3JlYXRlZCBieSBKYXZhU2NyaXB0ICJuZXcgSW1hZ2UiLApAQCAtMjc3LDY1ICszMTksODAg
QEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGdyb3VwSWQgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4ocm9vdCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9ncm91cGVyLmFwcGVuZChH
cm91cGVySXRlbShncm91cElkLCBub2RlLCB3cmFwcGVyKSk7CisgICAgICAgIG1fZ3JvdXBlci5h
cHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJZCwgd3JhcHBlcikpOwogICAgIH0KIAogICAgIHZvaWQg
YXBwbHlHcm91cGluZygpCiAgICAgewotICAgICAgICAvLyBHcm91cCBieSBzb3J0aW5nIGJ5IHRo
ZSBncm91cCBpZC4KLSAgICAgICAgc3RkOjpzb3J0KG1fZ3JvdXBlci5iZWdpbigpLCBtX2dyb3Vw
ZXIuZW5kKCkpOworICAgICAgICAvKiBGSVhNRTogUmUtZW5hYmxlZCB0aGlzIGNvZGUgdG8gYXZv
aWQgR0NpbmcgdGhlc2Ugd3JhcHBlcnMhCisgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudGx5
IHRoaXMgZGVwZW5kcyBvbiBsb29raW5nIHVwIHRoZSB3cmFwcGVyCisgICAgICAgICAgICAgICAg
ICAgICAgZHVyaW5nIGEgR0MsIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIGlzb2xhdGVkIHdvcmxk
CisgICAgICAgICAgICAgICAgICAgICAgd2UncmUgaW4sIHNvIGl0J3MgdW5jbGVhciB3aGljaCBt
YXAgdG8gbG9vayBpbi4uLgogCi0gICAgICAgIC8vIEZJWE1FIFNob3VsZCBwcm9iYWJseSB3b3Jr
IGluIGl0ZXJhdG9ycyBoZXJlLCBidXQgaW5kZXhlcyB3ZXJlIGVhc2llciBmb3IgbXkgc2ltcGxl
IG1pbmQuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncm91cGVyLnNpemUoKTsg
KSB7Ci0gICAgICAgICAgICAvLyBTZWVrIHRvIHRoZSBuZXh0IGtleSAob3IgdGhlIGVuZCBvZiB0
aGUgbGlzdCkuCi0gICAgICAgICAgICBzaXplX3QgbmV4dEtleUluZGV4ID0gbV9ncm91cGVyLnNp
emUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwgbV9ncm91cGVyLnNpemUo
KTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JvdXBlcltpXS5ncm91cElkKCkgIT0g
bV9ncm91cGVyW2pdLmdyb3VwSWQoKSkgewotICAgICAgICAgICAgICAgICAgICBuZXh0S2V5SW5k
ZXggPSBqOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9CisgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHN0eWxlZCBhbmQgdGhlcmUg
aXMgYSB3cmFwcGVyIGZvciB0aGUgaW5saW5lCisgICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9u
LCB3ZSBuZWVkIHRvIGtlZXAgdGhhdCBzdHlsZSBkZWNsYXJhdGlvbgorICAgICAgICAvLyB3cmFw
cGVyIGFsaXZlIGFzIHdlbGwsIHNvIHdlIGFkZCBpdCB0byB0aGUgb2JqZWN0IGdyb3VwLgorICAg
ICAgICBpZiAobm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpIHsKKyAgICAgICAgICBTdHlsZWRFbGVt
ZW50KiBlbGVtZW50ID0gcmVpbnRlcnByZXRfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSk7Cisg
ICAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5pbmxpbmVTdHls
ZURlY2woKTsKKyAgICAgICAgICBpZiAoc3R5bGUgIT0gTlVMTCkgeworICAgICAgICAgICAgd3Jh
cHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChzdHlsZSk7CisgICAgICAgICAgICBpZiAoIXdy
YXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgICBncm91cC5hcHBlbmQod3JhcHBlcik7Cisg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICovCisgICAgICAgIG1ha2VWOE9iamVjdEdy
b3VwcyhtX2dyb3VwZXIpOworICAgIH0KIAotICAgICAgICAgICAgQVNTRVJUKG5leHRLZXlJbmRl
eCA+IGkpOworcHJpdmF0ZToKKyAgICBHcm91cGVyTGlzdCBtX2dyb3VwZXI7Cit9OwogCi0gICAg
ICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYSBncm91cCBpZiBpdCBoYXMgbW9yZSB0aGFu
IG9uZSBvYmplY3QuIElmIGl0IG9ubHkKLSAgICAgICAgICAgIC8vIGhhcyBvbmUgb2JqZWN0LCBp
dCBoYXMgbm90aGluZyBlbHNlIHRoYXQgbmVlZHMgdG8gYmUga2VwdCBhbGl2ZS4KLSAgICAgICAg
ICAgIGlmIChuZXh0S2V5SW5kZXggLSBpIDw9IDEpIHsKLSAgICAgICAgICAgICAgICBpID0gbmV4
dEtleUluZGV4OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQorY2xh
c3MgRE9NT2JqZWN0R3JvdXBlclZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDx2b2lkPjo6
VmlzaXRvciB7CitwdWJsaWM6CisgICAgRE9NT2JqZWN0R3JvdXBlclZpc2l0b3IoKQorICAgIHsK
KyAgICB9CiAKLSAgICAgICAgICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4g
Z3JvdXA7Ci0gICAgICAgICAgICBncm91cC5yZXNlcnZlQ2FwYWNpdHkobmV4dEtleUluZGV4IC0g
aSk7Ci0gICAgICAgICAgICBmb3IgKDsgaSA8IG5leHRLZXlJbmRleDsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyID0gbV9ncm91cGVyW2ld
LndyYXBwZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgICAgICBncm91cC5hcHBlbmQod3JhcHBlcik7Ci0gICAgICAgICAgICAgICAg
LyogRklYTUU6IFJlLWVuYWJsZWQgdGhpcyBjb2RlIHRvIGF2b2lkIEdDaW5nIHRoZXNlIHdyYXBw
ZXJzIQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHkgdGhpcyBkZXBlbmRz
IG9uIGxvb2tpbmcgdXAgdGhlIHdyYXBwZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZHVyaW5nIGEgR0MsIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIGlzb2xhdGVkIHdvcmxkCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdlJ3JlIGluLCBzbyBpdCdzIHVuY2xlYXIgd2hpY2gg
bWFwIHRvIGxvb2sgaW4uLi4KKyAgICB2b2lkIHN0YXJ0TWFwKCkKKyAgICB7CisgICAgICAgIG1f
Z3JvdXBlci5zaHJpbmsoMCk7CisgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5v
ZGUgaXMgc3R5bGVkIGFuZCB0aGVyZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBpbmxpbmUKLSAgICAg
ICAgICAgICAgICAvLyBzdHlsZSBkZWNsYXJhdGlvbiwgd2UgbmVlZCB0byBrZWVwIHRoYXQgc3R5
bGUgZGVjbGFyYXRpb24KLSAgICAgICAgICAgICAgICAvLyB3cmFwcGVyIGFsaXZlIGFzIHdlbGws
IHNvIHdlIGFkZCBpdCB0byB0aGUgb2JqZWN0IGdyb3VwLgotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgU3R5bGVkRWxlbWVu
dCogZWxlbWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOwotICAg
ICAgICAgICAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5pbmxp
bmVTdHlsZURlY2woKTsKLSAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAhPSBOVUxMKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoc3R5bGUp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKLSAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIH0KKyAg
ICB2b2lkIGVuZE1hcCgpCisgICAgeworICAgICAgICBtYWtlVjhPYmplY3RHcm91cHMobV9ncm91
cGVyKTsKKyAgICB9CiAKLSAgICAgICAgICAgIGlmIChncm91cC5zaXplKCkgPiAxKQotICAgICAg
ICAgICAgICAgIHY4OjpWODo6QWRkT2JqZWN0R3JvdXAoJmdyb3VwWzBdLCBncm91cC5zaXplKCkp
OworICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD4gd3JhcHBlcikKKyAgICB7CisgICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlw
ZUluZm8gPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIpOworICAgICAgICAv
LyBGSVhNRTogZXh0ZW5kIFdyYXBwZXJUeXBlSW5mbyB3aXRoIGlzU3R5bGUgdG8gc2ltcGxpZnkg
dGhlIGNoZWNrIGJlbG93LgorICAgICAgICAvLyBGSVhNRTogY2hlY2sgaWYgdGhlcmUgYXJlIG90
aGVyIFN0eWxlQmFzZSB3cmFwcGVycyB3ZSBzaG91bGQgY2FyZSBvZi4KKyAgICAgICAgaWYgKCFW
OENTU1N0eWxlU2hlZXQ6OmluZm8uZXF1YWxzKHR5cGVJbmZvKQorICAgICAgICAgICAgJiYgIVY4
Q1NTQ2hhcnNldFJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJbmZvKQorICAgICAgICAgICAgJiYgIVY4
Q1NTRm9udEZhY2VSdWxlOjppbmZvLmVxdWFscyh0eXBlSW5mbykKKyAgICAgICAgICAgICYmICFW
OENTU1N0eWxlUnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhD
U1NJbXBvcnRSdWxlOjppbmZvLmVxdWFscyh0eXBlSW5mbykKKyAgICAgICAgICAgICYmICFWOENT
U01lZGlhUnVsZTo6aW5mby5lcXVhbHModHlwZUluZm8pKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgU3R5bGVCYXNlKiBzdHlsZUJhc2UgPSBzdGF0aWNfY2FzdDxT
dHlsZUJhc2UqPihvYmplY3QpOwogCi0gICAgICAgICAgICBBU1NFUlQoaSA9PSBuZXh0S2V5SW5k
ZXgpOworICAgICAgICAvLyBXZSBwdXQgdGhlIHdob2xlIHRyZWUgb2Ygc3R5bGUgZWxlbWVudHMg
aW50byBhIHNpbmdsZSBvYmplY3QgZ3JvdXAuCisgICAgICAgIC8vIFRvIGFjaGlldmUgdGhhdCB3
ZSBncm91cCBlbGVtZW50cyBieSB0aGUgcm9vdHMgb2YgdGhlaXIgdHJlZXMuCisgICAgICAgIFN0
eWxlQmFzZSogcm9vdCA9IHN0eWxlQmFzZTsKKyAgICAgICAgQVNTRVJUKHJvb3QpOworICAgICAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgIFN0eWxlQmFzZSogcGFyZW50ID0gcm9vdC0+cGFy
ZW50KCk7CisgICAgICAgICAgaWYgKCFwYXJlbnQpCisgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIHJvb3QgPSBwYXJlbnQ7CiAgICAgICAgIH0KKyAgICAgICAgLy8gR3JvdXAgaWQgaXMg
YW4gYWRkcmVzcyBvZiB0aGUgcm9vdC4KKyAgICAgICAgdWludHB0cl90IGdyb3VwSWQgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocm9vdCk7CisgICAgICAgIG1fZ3JvdXBlci5hcHBlbmQo
R3JvdXBlckl0ZW0oZ3JvdXBJZCwgd3JhcHBlcikpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTM1
OCwxMCArNDE1LDEzIEBACiAgICAgdmlzaXRBY3RpdmVET01PYmplY3RzSW5DdXJyZW50VGhyZWFk
KCZwcm9sb2d1ZVZpc2l0b3IpOwogCiAgICAgLy8gQ3JlYXRlIG9iamVjdCBncm91cHMuCi0gICAg
T2JqZWN0R3JvdXBlclZpc2l0b3Igb2JqZWN0R3JvdXBlclZpc2l0b3I7Ci0gICAgdmlzaXRET01O
b2Rlc0luQ3VycmVudFRocmVhZCgmb2JqZWN0R3JvdXBlclZpc2l0b3IpOwotICAgIG9iamVjdEdy
b3VwZXJWaXNpdG9yLmFwcGx5R3JvdXBpbmcoKTsKKyAgICBOb2RlR3JvdXBlclZpc2l0b3Igbm9k
ZUdyb3VwZXJWaXNpdG9yOworICAgIHZpc2l0RE9NTm9kZXNJbkN1cnJlbnRUaHJlYWQoJm5vZGVH
cm91cGVyVmlzaXRvcik7CisgICAgbm9kZUdyb3VwZXJWaXNpdG9yLmFwcGx5R3JvdXBpbmcoKTsK
IAorICAgIERPTU9iamVjdEdyb3VwZXJWaXNpdG9yIGRvbU9iamVjdEdyb3VwZXJWaXNpdG9yOwor
ICAgIHZpc2l0RE9NT2JqZWN0c0luQ3VycmVudFRocmVhZCgmZG9tT2JqZWN0R3JvdXBlclZpc2l0
b3IpOworCiAgICAgLy8gQ2xlYW4gc2luZ2xlIGVsZW1lbnQgY2FjaGUgZm9yIHN0cmluZyBjb252
ZXJzaW9ucy4KICAgICBsYXN0U3RyaW5nSW1wbCA9IDA7CiAgICAgbGFzdFY4U3RyaW5nLkNsZWFy
KCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCShyZXZpc2lvbiA3MzI2NikKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBA
QAogCiAgICAgICAgIGNsYXNzIFZpc2l0b3IgewogICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnRNYXAoKSB7IH0KKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBl
bmRNYXAoKSB7IH0KICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdERPTVdyYXBwZXIoS2V5
VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IG9iamVjdCkgPSAwOwogICAgICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICB2aXJ0dWFsIH5WaXNpdG9yKCkgeyB9CkBAIC0xMjIs
OSArMTI0LDExIEBACiAKICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0KHR5cGVuYW1lIFBhcmVu
dDo6VmlzaXRvciogdmlzaXRvcikKICAgICAgICAgeworICAgICAgICAgICAgdmlzaXRvci0+c3Rh
cnRNYXAoKTsKICAgICAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8S2V5VHlwZSosIFZhbHVlVHlw
ZSo+OjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXQg
IT0gbV9tYXAuZW5kKCk7ICsraXQpCiAgICAgICAgICAgICAgICAgdmlzaXRvci0+dmlzaXRET01X
cmFwcGVyKGl0LT5maXJzdCwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPihpdC0+c2Vjb25kKSk7
CisgICAgICAgICAgICB2aXNpdG9yLT5lbmRNYXAoKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVj
dGVkOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75534</attachid>
            <date>2010-12-03 13:14:05 -0800</date>
            <delta_ts>2010-12-07 05:43:29 -0800</delta_ts>
            <desc>WebKit hacking from Chromium checkout over ssh sucks</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>11257</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzI2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMTEtMzAgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
b3J0IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzcyODE5LyB0byB2OC1iYWNrZWQg
cG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MDI0NgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01NYXAuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDo6VmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwOjpWaXNpdG9yOjplbmRNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdyb3VwZXJJ
dGVtOjpHcm91cGVySXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpHcm91cGVySXRlbTo6Z3JvdXBJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVjhPYmplY3RHcm91cHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjpOb2RlR3JvdXBlclZpc2l0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjphcHBseUdyb3VwaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9iamVjdEdyb3VwZXJWaXNpdG9yOjpPYmplY3RHcm91cGVyVmlzaXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpPYmplY3RHcm91cGVyVmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAgICAo
V2ViQ29yZTo6T2JqZWN0R3JvdXBlclZpc2l0b3I6OmVuZE1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpPYmplY3RHcm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKToKKwogMjAxMC0xMi0wMyAgQW5kcmFzIEJl
Y3NpICA8YWJlY3NpQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxk
IGZpeCBhZnRlciByNzMyNTQuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gNzMyNjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTIgQEAKICNpbmNsdWRlICJQbGF0
Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOENTU0NoYXJzZXRSdWxlLmgiCisjaW5jbHVkZSAiVjhDU1NGb250
RmFjZVJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJWOENT
U01lZGlhUnVsZS5oIgorI2luY2x1ZGUgIlY4Q1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiVjhD
U1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOE1lc3Nh
Z2VQb3J0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgpAQCAtMjEzLDIwICsyMTksMTcgQEAKIAog
Y2xhc3MgR3JvdXBlckl0ZW0gewogcHVibGljOgotICAgIEdyb3VwZXJJdGVtKHVpbnRwdHJfdCBn
cm91cElkLCBOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKSAK
KyAgICBHcm91cGVySXRlbSh1aW50cHRyX3QgZ3JvdXBJZCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gd3JhcHBlcikgCiAgICAgICAgIDogbV9ncm91cElkKGdyb3VwSWQpCi0gICAgICAgICwg
bV9ub2RlKG5vZGUpCiAgICAgICAgICwgbV93cmFwcGVyKHdyYXBwZXIpIAogICAgICAgICB7CiAg
ICAgICAgIH0KIAogICAgIHVpbnRwdHJfdCBncm91cElkKCkgY29uc3QgeyByZXR1cm4gbV9ncm91
cElkOyB9Ci0gICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQogICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBtX3dyYXBw
ZXI7IH0KIAogcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9ncm91cElkOwotICAgIE5vZGUqIG1f
bm9kZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX3dyYXBwZXI7CiB9OwogCkBA
IC0yMzcsMTYgKzI0MCw1NSBAQAogCiB0eXBlZGVmIFZlY3RvcjxHcm91cGVySXRlbT4gR3JvdXBl
ckxpc3Q7CiAKLWNsYXNzIE9iamVjdEdyb3VwZXJWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJN
YXA8Tm9kZT46OlZpc2l0b3Igewordm9pZCBtYWtlVjhPYmplY3RHcm91cHMoR3JvdXBlckxpc3Qm
IGdyb3VwZXIpCit7CisgICAgLy8gR3JvdXAgYnkgc29ydGluZyBieSB0aGUgZ3JvdXAgaWQuCisg
ICAgc3RkOjpzb3J0KGdyb3VwZXIuYmVnaW4oKSwgZ3JvdXBlci5lbmQoKSk7CisKKyAgICAvLyBG
SVhNRSBTaG91bGQgcHJvYmFibHkgd29yayBpbiBpdGVyYXRvcnMgaGVyZSwgYnV0IGluZGV4ZXMg
d2VyZSBlYXNpZXIgZm9yIG15IHNpbXBsZSBtaW5kLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZ3JvdXBlci5zaXplKCk7ICkgeworICAgICAgICAvLyBTZWVrIHRvIHRoZSBuZXh0IGtleSAo
b3IgdGhlIGVuZCBvZiB0aGUgbGlzdCkuCisgICAgICAgIHNpemVfdCBuZXh0S2V5SW5kZXggPSBn
cm91cGVyLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBncm91cGVyLnNp
emUoKTsgKytqKSB7CisgICAgICAgICAgICBpZiAoZ3JvdXBlcltpXS5ncm91cElkKCkgIT0gZ3Jv
dXBlcltqXS5ncm91cElkKCkpIHsKKyAgICAgICAgICAgICAgICBuZXh0S2V5SW5kZXggPSBqOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKG5leHRLZXlJbmRleCA+IGkpOworCisgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBh
Ym91dCBhIGdyb3VwIGlmIGl0IGhhcyBtb3JlIHRoYW4gb25lIG9iamVjdC4gSWYgaXQgb25seQor
ICAgICAgICAvLyBoYXMgb25lIG9iamVjdCwgaXQgaGFzIG5vdGhpbmcgZWxzZSB0aGF0IG5lZWRz
IHRvIGJlIGtlcHQgYWxpdmUuCisgICAgICAgIGlmIChuZXh0S2V5SW5kZXggLSBpIDw9IDEpIHsK
KyAgICAgICAgICAgIGkgPSBuZXh0S2V5SW5kZXg7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gZ3Jv
dXA7CisgICAgICAgIGdyb3VwLnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBpKTsKKyAg
ICAgICAgZm9yICg7IGkgPCBuZXh0S2V5SW5kZXg7ICsraSkgeworICAgICAgICAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyID0gZ3JvdXBlcltpXS53cmFwcGVyKCk7CisgICAg
ICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGdyb3VwLmFw
cGVuZCh3cmFwcGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChncm91cC5zaXplKCkgPiAx
KQorICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmplY3RHcm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNp
emUoKSk7CisKKyAgICAgICAgQVNTRVJUKGkgPT0gbmV4dEtleUluZGV4KTsKKyAgICB9Cit9CisK
K2NsYXNzIE5vZGVHcm91cGVyVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPE5vZGU+OjpW
aXNpdG9yIHsKIHB1YmxpYzoKLSAgICBPYmplY3RHcm91cGVyVmlzaXRvcigpCisgICAgTm9kZUdy
b3VwZXJWaXNpdG9yKCkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBncm91cGVyXy5yZXNlcnZl
Q2FwYWNpdHkobm9kZV9tYXAuc2l6ZSgpKTsgID8KICAgICB9CiAKICAgICB2b2lkIHZpc2l0RE9N
V3JhcHBlcihOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQog
ICAgIHsKLQogICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBpbiBkb2N1bWVudCwgcHV0IGl0IGlu
IHRoZSBvd25lckRvY3VtZW50J3Mgb2JqZWN0IGdyb3VwLgogICAgICAgICAvLwogICAgICAgICAv
LyBJZiBhbiBpbWFnZSBlbGVtZW50IHdhcyBjcmVhdGVkIGJ5IEphdmFTY3JpcHQgIm5ldyBJbWFn
ZSIsCkBAIC0yNzcsNjUgKzMxOSw4MCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZ3Jv
dXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihyb290KTsKICAgICAgICAgfQotICAg
ICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIG5vZGUsIHdyYXBwZXIp
KTsKKyAgICAgICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVy
KSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBseUdyb3VwaW5nKCkKICAgICB7Ci0gICAgICAgIC8v
IEdyb3VwIGJ5IHNvcnRpbmcgYnkgdGhlIGdyb3VwIGlkLgotICAgICAgICBzdGQ6OnNvcnQobV9n
cm91cGVyLmJlZ2luKCksIG1fZ3JvdXBlci5lbmQoKSk7CisgICAgICAgIC8qIEZJWE1FOiBSZS1l
bmFibGVkIHRoaXMgY29kZSB0byBhdm9pZCBHQ2luZyB0aGVzZSB3cmFwcGVycyEKKyAgICAgICAg
ICAgICAgICAgICAgICBDdXJyZW50bHkgdGhpcyBkZXBlbmRzIG9uIGxvb2tpbmcgdXAgdGhlIHdy
YXBwZXIKKyAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSBHQywgYnV0IHdlIGRvbid0IGtu
b3cgd2hpY2ggaXNvbGF0ZWQgd29ybGQKKyAgICAgICAgICAgICAgICAgICAgICB3ZSdyZSBpbiwg
c28gaXQncyB1bmNsZWFyIHdoaWNoIG1hcCB0byBsb29rIGluLi4uCiAKLSAgICAgICAgLy8gRklY
TUUgU2hvdWxkIHByb2JhYmx5IHdvcmsgaW4gaXRlcmF0b3JzIGhlcmUsIGJ1dCBpbmRleGVzIHdl
cmUgZWFzaWVyIGZvciBteSBzaW1wbGUgbWluZC4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2dyb3VwZXIuc2l6ZSgpOyApIHsKLSAgICAgICAgICAgIC8vIFNlZWsgdG8gdGhlIG5l
eHQga2V5IChvciB0aGUgZW5kIG9mIHRoZSBsaXN0KS4KLSAgICAgICAgICAgIHNpemVfdCBuZXh0
S2V5SW5kZXggPSBtX2dyb3VwZXIuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9
IGk7IGogPCBtX2dyb3VwZXIuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAobV9n
cm91cGVyW2ldLmdyb3VwSWQoKSAhPSBtX2dyb3VwZXJbal0uZ3JvdXBJZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG5leHRLZXlJbmRleCA9IGo7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgLy8gSWYgdGhlIG5v
ZGUgaXMgc3R5bGVkIGFuZCB0aGVyZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBpbmxpbmUKKyAgICAg
ICAgLy8gc3R5bGUgZGVjbGFyYXRpb24sIHdlIG5lZWQgdG8ga2VlcCB0aGF0IHN0eWxlIGRlY2xh
cmF0aW9uCisgICAgICAgIC8vIHdyYXBwZXIgYWxpdmUgYXMgd2VsbCwgc28gd2UgYWRkIGl0IHRv
IHRoZSBvYmplY3QgZ3JvdXAuCisgICAgICAgIGlmIChub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkg
eworICAgICAgICAgIFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQgPSByZWludGVycHJldF9jYXN0PFN0
eWxlZEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOworICAgICAgICAgIGlmIChzdHlsZSAhPSBO
VUxMKSB7CisgICAgICAgICAgICB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KHN0eWxl
KTsKKyAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgIGdy
b3VwLmFwcGVuZCh3cmFwcGVyKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKi8K
KyAgICAgICAgbWFrZVY4T2JqZWN0R3JvdXBzKG1fZ3JvdXBlcik7CisgICAgfQogCi0gICAgICAg
ICAgICBBU1NFUlQobmV4dEtleUluZGV4ID4gaSk7Citwcml2YXRlOgorICAgIEdyb3VwZXJMaXN0
IG1fZ3JvdXBlcjsKK307CiAKLSAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBhIGdy
b3VwIGlmIGl0IGhhcyBtb3JlIHRoYW4gb25lIG9iamVjdC4gSWYgaXQgb25seQotICAgICAgICAg
ICAgLy8gaGFzIG9uZSBvYmplY3QsIGl0IGhhcyBub3RoaW5nIGVsc2UgdGhhdCBuZWVkcyB0byBi
ZSBrZXB0IGFsaXZlLgotICAgICAgICAgICAgaWYgKG5leHRLZXlJbmRleCAtIGkgPD0gMSkgewot
ICAgICAgICAgICAgICAgIGkgPSBuZXh0S2V5SW5kZXg7Ci0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9CitjbGFzcyBET01PYmplY3RHcm91cGVyVmlzaXRvciA6IHB1Ymxp
YyBET01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBET01PYmplY3RH
cm91cGVyVmlzaXRvcigpCisgICAgeworICAgIH0KIAotICAgICAgICAgICAgVmVjdG9yPHY4OjpQ
ZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBncm91cDsKLSAgICAgICAgICAgIGdyb3VwLnJlc2VydmVD
YXBhY2l0eShuZXh0S2V5SW5kZXggLSBpKTsKLSAgICAgICAgICAgIGZvciAoOyBpIDwgbmV4dEtl
eUluZGV4OyArK2kpIHsKLSAgICAgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+
IHdyYXBwZXIgPSBtX2dyb3VwZXJbaV0ud3JhcHBlcigpOwotICAgICAgICAgICAgICAgIGlmICgh
d3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFw
cGVyKTsKLSAgICAgICAgICAgICAgICAvKiBGSVhNRTogUmUtZW5hYmxlZCB0aGlzIGNvZGUgdG8g
YXZvaWQgR0NpbmcgdGhlc2Ugd3JhcHBlcnMhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEN1cnJlbnRseSB0aGlzIGRlcGVuZHMgb24gbG9va2luZyB1cCB0aGUgd3JhcHBlcgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSBHQywgYnV0IHdlIGRvbid0IGtub3cgd2hp
Y2ggaXNvbGF0ZWQgd29ybGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2UncmUgaW4s
IHNvIGl0J3MgdW5jbGVhciB3aGljaCBtYXAgdG8gbG9vayBpbi4uLgorICAgIHZvaWQgc3RhcnRN
YXAoKQorICAgIHsKKyAgICAgICAgbV9ncm91cGVyLnNocmluaygwKTsKKyAgICB9CiAKLSAgICAg
ICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBzdHlsZWQgYW5kIHRoZXJlIGlzIGEgd3JhcHBl
ciBmb3IgdGhlIGlubGluZQotICAgICAgICAgICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9uLCB3
ZSBuZWVkIHRvIGtlZXAgdGhhdCBzdHlsZSBkZWNsYXJhdGlvbgotICAgICAgICAgICAgICAgIC8v
IHdyYXBwZXIgYWxpdmUgYXMgd2VsbCwgc28gd2UgYWRkIGl0IHRvIHRoZSBvYmplY3QgZ3JvdXAu
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICBTdHlsZWRFbGVtZW50KiBlbGVtZW50ID0gcmVpbnRlcnByZXRfY2FzdDxTdHls
ZWRFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOwotICAgICAgICAgICAgICAgICAg
aWYgKHN0eWxlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgd3JhcHBlciA9IGdldERP
TU9iamVjdE1hcCgpLmdldChzdHlsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghd3JhcHBl
ci5Jc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKHdyYXBwZXIp
OwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgfQorICAgIHZvaWQgZW5kTWFwKCkKKyAgICB7CisgICAgICAgIG1h
a2VWOE9iamVjdEdyb3VwcyhtX2dyb3VwZXIpOworICAgIH0KIAotICAgICAgICAgICAgaWYgKGdy
b3VwLnNpemUoKSA+IDEpCi0gICAgICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmplY3RHcm91cCgm
Z3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7CisgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIodm9pZCog
b2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHsKKyAgICAg
ICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlSW5mbyA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5
cGUod3JhcHBlcik7CisgICAgICAgIC8vIEZJWE1FOiBleHRlbmQgV3JhcHBlclR5cGVJbmZvIHdp
dGggaXNTdHlsZSB0byBzaW1wbGlmeSB0aGUgY2hlY2sgYmVsb3cuCisgICAgICAgIC8vIEZJWE1F
OiBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgU3R5bGVCYXNlIHdyYXBwZXJzIHdlIHNob3VsZCBj
YXJlIG9mLgorICAgICAgICBpZiAoIVY4Q1NTU3R5bGVTaGVldDo6aW5mby5lcXVhbHModHlwZUlu
Zm8pCisgICAgICAgICAgICAmJiAhVjhDU1NDaGFyc2V0UnVsZTo6aW5mby5lcXVhbHModHlwZUlu
Zm8pCisgICAgICAgICAgICAmJiAhVjhDU1NGb250RmFjZVJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJ
bmZvKQorICAgICAgICAgICAgJiYgIVY4Q1NTU3R5bGVSdWxlOjppbmZvLmVxdWFscyh0eXBlSW5m
bykKKyAgICAgICAgICAgICYmICFWOENTU0ltcG9ydFJ1bGU6OmluZm8uZXF1YWxzKHR5cGVJbmZv
KQorICAgICAgICAgICAgJiYgIVY4Q1NTTWVkaWFSdWxlOjppbmZvLmVxdWFscyh0eXBlSW5mbykp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHlsZUJhc2UqIHN0
eWxlQmFzZSA9IHN0YXRpY19jYXN0PFN0eWxlQmFzZSo+KG9iamVjdCk7CiAKLSAgICAgICAgICAg
IEFTU0VSVChpID09IG5leHRLZXlJbmRleCk7CisgICAgICAgIC8vIFdlIHB1dCB0aGUgd2hvbGUg
dHJlZSBvZiBzdHlsZSBlbGVtZW50cyBpbnRvIGEgc2luZ2xlIG9iamVjdCBncm91cC4KKyAgICAg
ICAgLy8gVG8gYWNoaWV2ZSB0aGF0IHdlIGdyb3VwIGVsZW1lbnRzIGJ5IHRoZSByb290cyBvZiB0
aGVpciB0cmVlcy4KKyAgICAgICAgU3R5bGVCYXNlKiByb290ID0gc3R5bGVCYXNlOworICAgICAg
ICBBU1NFUlQocm9vdCk7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgU3R5bGVC
YXNlKiBwYXJlbnQgPSByb290LT5wYXJlbnQoKTsKKyAgICAgICAgICBpZiAoIXBhcmVudCkKKyAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgcm9vdCA9IHBhcmVudDsKICAgICAgICAgfQor
ICAgICAgICAvLyBHcm91cCBpZCBpcyBhbiBhZGRyZXNzIG9mIHRoZSByb290LgorICAgICAgICB1
aW50cHRyX3QgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihyb290KTsKKyAg
ICAgICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFwcGVyKSk7CiAg
ICAgfQogCiBwcml2YXRlOgpAQCAtMzU4LDEwICs0MTUsMTMgQEAKICAgICB2aXNpdEFjdGl2ZURP
TU9iamVjdHNJbkN1cnJlbnRUaHJlYWQoJnByb2xvZ3VlVmlzaXRvcik7CiAKICAgICAvLyBDcmVh
dGUgb2JqZWN0IGdyb3Vwcy4KLSAgICBPYmplY3RHcm91cGVyVmlzaXRvciBvYmplY3RHcm91cGVy
VmlzaXRvcjsKLSAgICB2aXNpdERPTU5vZGVzSW5DdXJyZW50VGhyZWFkKCZvYmplY3RHcm91cGVy
VmlzaXRvcik7Ci0gICAgb2JqZWN0R3JvdXBlclZpc2l0b3IuYXBwbHlHcm91cGluZygpOworICAg
IE5vZGVHcm91cGVyVmlzaXRvciBub2RlR3JvdXBlclZpc2l0b3I7CisgICAgdmlzaXRET01Ob2Rl
c0luQ3VycmVudFRocmVhZCgmbm9kZUdyb3VwZXJWaXNpdG9yKTsKKyAgICBub2RlR3JvdXBlclZp
c2l0b3IuYXBwbHlHcm91cGluZygpOwogCisgICAgRE9NT2JqZWN0R3JvdXBlclZpc2l0b3IgZG9t
T2JqZWN0R3JvdXBlclZpc2l0b3I7CisgICAgdmlzaXRET01PYmplY3RzSW5DdXJyZW50VGhyZWFk
KCZkb21PYmplY3RHcm91cGVyVmlzaXRvcik7CisKICAgICAvLyBDbGVhbiBzaW5nbGUgZWxlbWVu
dCBjYWNoZSBmb3Igc3RyaW5nIGNvbnZlcnNpb25zLgogICAgIGxhc3RTdHJpbmdJbXBsID0gMDsK
ICAgICBsYXN0VjhTdHJpbmcuQ2xlYXIoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgJKHJl
dmlzaW9uIDczMjY2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw2ICs0OCw4IEBACiAKICAgICAgICAgY2xhc3MgVmlzaXRvciB7CiAgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydE1hcCgpIHsgfQorICAg
ICAgICAgICAgdmlydHVhbCB2b2lkIGVuZE1hcCgpIHsgfQogICAgICAgICAgICAgdmlydHVhbCB2
b2lkIHZpc2l0RE9NV3JhcHBlcihLZXlUeXBlKiBrZXksIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlw
ZT4gb2JqZWN0KSA9IDA7CiAgICAgICAgIHByb3RlY3RlZDoKICAgICAgICAgICAgIHZpcnR1YWwg
flZpc2l0b3IoKSB7IH0KQEAgLTEyMiw5ICsxMjQsMTEgQEAKIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQodHlwZW5hbWUgUGFyZW50OjpWaXNpdG9yKiB2aXNpdG9yKQogICAgICAgICB7Cisg
ICAgICAgICAgICB2aXNpdG9yLT5zdGFydE1hcCgpOwogICAgICAgICAgICAgdHlwZW5hbWUgSGFz
aE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsK
ICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkKICAgICAgICAgICAg
ICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBwZXIoaXQtPmZpcnN0LCB2ODo6UGVyc2lzdGVudDxW
YWx1ZVR5cGU+KGl0LT5zZWNvbmQpKTsKKyAgICAgICAgICAgIHZpc2l0b3ItPmVuZE1hcCgpOwog
ICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Cg==
</data>
<flag name="review"
          id="66357"
          type_id="1"
          status="+"
          setter="japhet"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75804</attachid>
            <date>2010-12-07 05:43:29 -0800</date>
            <delta_ts>2010-12-07 05:49:15 -0800</delta_ts>
            <desc>Last minor fixes</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>11269</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzI2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMTEtMzAgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
b3J0IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzcyODE5LyB0byB2OC1iYWNrZWQg
cG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MDI0NgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01NYXAuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDo6VmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwOjpWaXNpdG9yOjplbmRNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdyb3VwZXJJ
dGVtOjpHcm91cGVySXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpHcm91cGVySXRlbTo6Z3JvdXBJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVjhPYmplY3RHcm91cHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjpOb2RlR3JvdXBlclZpc2l0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjphcHBseUdyb3VwaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTU9iamVjdEdyb3VwZXJWaXNpdG9yOjpPYmplY3RHcm91cGVyVmlzaXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpET01PYmplY3RHcm91cGVyVmlzaXRvcjo6c3RhcnRNYXApOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0R3JvdXBlclZpc2l0b3I6OmVuZE1hcCk6CisgICAgICAg
IChXZWJDb3JlOjpET01PYmplY3RHcm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKToKKwogMjAxMC0xMi0w
MyAgQW5kcmFzIEJlY3NpICA8YWJlY3NpQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBVbnJl
dmlld2VkIGJ1aWxkIGZpeCBhZnRlciByNzMyNTQuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4R0NDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
R0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNzMyNjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4R0NDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTIgQEAKICNp
bmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNs
dWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENTU0NoYXJzZXRSdWxlLmgiCisjaW5jbHVk
ZSAiVjhDU1NGb250RmFjZVJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU0ltcG9ydFJ1bGUuaCIKKyNp
bmNsdWRlICJWOENTU01lZGlhUnVsZS5oIgorI2luY2x1ZGUgIlY4Q1NTU3R5bGVSdWxlLmgiCisj
aW5jbHVkZSAiVjhDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNs
dWRlICJWOE1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgpAQCAtMjEzLDIwICsy
MTksMTcgQEAKIAogY2xhc3MgR3JvdXBlckl0ZW0gewogcHVibGljOgotICAgIEdyb3VwZXJJdGVt
KHVpbnRwdHJfdCBncm91cElkLCBOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVyKSAKKyAgICBHcm91cGVySXRlbSh1aW50cHRyX3QgZ3JvdXBJZCwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgCiAgICAgICAgIDogbV9ncm91cElkKGdyb3VwSWQp
Ci0gICAgICAgICwgbV9ub2RlKG5vZGUpCiAgICAgICAgICwgbV93cmFwcGVyKHdyYXBwZXIpIAog
ICAgICAgICB7CiAgICAgICAgIH0KIAogICAgIHVpbnRwdHJfdCBncm91cElkKCkgY29uc3QgeyBy
ZXR1cm4gbV9ncm91cElkOyB9Ci0gICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZTsgfQogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIoKSBjb25zdCB7IHJl
dHVybiBtX3dyYXBwZXI7IH0KIAogcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9ncm91cElkOwot
ICAgIE5vZGUqIG1fbm9kZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX3dyYXBw
ZXI7CiB9OwogCkBAIC0yMzcsMTYgKzI0MCw1NSBAQAogCiB0eXBlZGVmIFZlY3RvcjxHcm91cGVy
SXRlbT4gR3JvdXBlckxpc3Q7CiAKLWNsYXNzIE9iamVjdEdyb3VwZXJWaXNpdG9yIDogcHVibGlj
IERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3Igewordm9pZCBtYWtlVjhPYmplY3RHcm91cHMo
R3JvdXBlckxpc3QmIGdyb3VwZXIpCit7CisgICAgLy8gR3JvdXAgYnkgc29ydGluZyBieSB0aGUg
Z3JvdXAgaWQuCisgICAgc3RkOjpzb3J0KGdyb3VwZXIuYmVnaW4oKSwgZ3JvdXBlci5lbmQoKSk7
CisKKyAgICAvLyBGSVhNRSBTaG91bGQgcHJvYmFibHkgd29yayBpbiBpdGVyYXRvcnMgaGVyZSwg
YnV0IGluZGV4ZXMgd2VyZSBlYXNpZXIgZm9yIG15IHNpbXBsZSBtaW5kLgorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZ3JvdXBlci5zaXplKCk7ICkgeworICAgICAgICAvLyBTZWVrIHRvIHRo
ZSBuZXh0IGtleSAob3IgdGhlIGVuZCBvZiB0aGUgbGlzdCkuCisgICAgICAgIHNpemVfdCBuZXh0
S2V5SW5kZXggPSBncm91cGVyLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGog
PCBncm91cGVyLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBpZiAoZ3JvdXBlcltpXS5ncm91
cElkKCkgIT0gZ3JvdXBlcltqXS5ncm91cElkKCkpIHsKKyAgICAgICAgICAgICAgICBuZXh0S2V5
SW5kZXggPSBqOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgQVNTRVJUKG5leHRLZXlJbmRleCA+IGkpOworCisgICAgICAgIC8vIFdl
IG9ubHkgY2FyZSBhYm91dCBhIGdyb3VwIGlmIGl0IGhhcyBtb3JlIHRoYW4gb25lIG9iamVjdC4g
SWYgaXQgb25seQorICAgICAgICAvLyBoYXMgb25lIG9iamVjdCwgaXQgaGFzIG5vdGhpbmcgZWxz
ZSB0aGF0IG5lZWRzIHRvIGJlIGtlcHQgYWxpdmUuCisgICAgICAgIGlmIChuZXh0S2V5SW5kZXgg
LSBpIDw9IDEpIHsKKyAgICAgICAgICAgIGkgPSBuZXh0S2V5SW5kZXg7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6
VmFsdWU+ID4gZ3JvdXA7CisgICAgICAgIGdyb3VwLnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5k
ZXggLSBpKTsKKyAgICAgICAgZm9yICg7IGkgPCBuZXh0S2V5SW5kZXg7ICsraSkgeworICAgICAg
ICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyID0gZ3JvdXBlcltpXS53cmFw
cGVyKCk7CisgICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChncm91
cC5zaXplKCkgPiAxKQorICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmplY3RHcm91cCgmZ3JvdXBb
MF0sIGdyb3VwLnNpemUoKSk7CisKKyAgICAgICAgQVNTRVJUKGkgPT0gbmV4dEtleUluZGV4KTsK
KyAgICB9Cit9CisKK2NsYXNzIE5vZGVHcm91cGVyVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVy
TWFwPE5vZGU+OjpWaXNpdG9yIHsKIHB1YmxpYzoKLSAgICBPYmplY3RHcm91cGVyVmlzaXRvcigp
CisgICAgTm9kZUdyb3VwZXJWaXNpdG9yKCkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBncm91
cGVyXy5yZXNlcnZlQ2FwYWNpdHkobm9kZV9tYXAuc2l6ZSgpKTsgID8KICAgICB9CiAKICAgICB2
b2lkIHZpc2l0RE9NV3JhcHBlcihOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVyKQogICAgIHsKLQogICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBpbiBkb2N1bWVu
dCwgcHV0IGl0IGluIHRoZSBvd25lckRvY3VtZW50J3Mgb2JqZWN0IGdyb3VwLgogICAgICAgICAv
LwogICAgICAgICAvLyBJZiBhbiBpbWFnZSBlbGVtZW50IHdhcyBjcmVhdGVkIGJ5IEphdmFTY3Jp
cHQgIm5ldyBJbWFnZSIsCkBAIC0yNzcsNjUgKzMxOSw4MCBAQAogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihyb290KTsKICAg
ICAgICAgfQotICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIG5v
ZGUsIHdyYXBwZXIpKTsKKyAgICAgICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91
cElkLCB3cmFwcGVyKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBseUdyb3VwaW5nKCkKICAgICB7
Ci0gICAgICAgIC8vIEdyb3VwIGJ5IHNvcnRpbmcgYnkgdGhlIGdyb3VwIGlkLgotICAgICAgICBz
dGQ6OnNvcnQobV9ncm91cGVyLmJlZ2luKCksIG1fZ3JvdXBlci5lbmQoKSk7CisgICAgICAgIC8q
IEZJWE1FOiBSZS1lbmFibGVkIHRoaXMgY29kZSB0byBhdm9pZCBHQ2luZyB0aGVzZSB3cmFwcGVy
cyEKKyAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHkgdGhpcyBkZXBlbmRzIG9uIGxvb2tp
bmcgdXAgdGhlIHdyYXBwZXIKKyAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSBHQywgYnV0
IHdlIGRvbid0IGtub3cgd2hpY2ggaXNvbGF0ZWQgd29ybGQKKyAgICAgICAgICAgICAgICAgICAg
ICB3ZSdyZSBpbiwgc28gaXQncyB1bmNsZWFyIHdoaWNoIG1hcCB0byBsb29rIGluLi4uCiAKLSAg
ICAgICAgLy8gRklYTUUgU2hvdWxkIHByb2JhYmx5IHdvcmsgaW4gaXRlcmF0b3JzIGhlcmUsIGJ1
dCBpbmRleGVzIHdlcmUgZWFzaWVyIGZvciBteSBzaW1wbGUgbWluZC4KLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2dyb3VwZXIuc2l6ZSgpOyApIHsKLSAgICAgICAgICAgIC8vIFNl
ZWsgdG8gdGhlIG5leHQga2V5IChvciB0aGUgZW5kIG9mIHRoZSBsaXN0KS4KLSAgICAgICAgICAg
IHNpemVfdCBuZXh0S2V5SW5kZXggPSBtX2dyb3VwZXIuc2l6ZSgpOwotICAgICAgICAgICAgZm9y
IChzaXplX3QgaiA9IGk7IGogPCBtX2dyb3VwZXIuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAg
ICAgICBpZiAobV9ncm91cGVyW2ldLmdyb3VwSWQoKSAhPSBtX2dyb3VwZXJbal0uZ3JvdXBJZCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG5leHRLZXlJbmRleCA9IGo7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAg
Ly8gSWYgdGhlIG5vZGUgaXMgc3R5bGVkIGFuZCB0aGVyZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBp
bmxpbmUKKyAgICAgICAgLy8gc3R5bGUgZGVjbGFyYXRpb24sIHdlIG5lZWQgdG8ga2VlcCB0aGF0
IHN0eWxlIGRlY2xhcmF0aW9uCisgICAgICAgIC8vIHdyYXBwZXIgYWxpdmUgYXMgd2VsbCwgc28g
d2UgYWRkIGl0IHRvIHRoZSBvYmplY3QgZ3JvdXAuCisgICAgICAgIGlmIChub2RlLT5pc1N0eWxl
ZEVsZW1lbnQoKSkgeworICAgICAgICAgIFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQgPSByZWludGVy
cHJldF9jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICBDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOworICAgICAgICAgIGlm
IChzdHlsZSAhPSBOVUxMKSB7CisgICAgICAgICAgICB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFw
KCkuZ2V0KHN0eWxlKTsKKyAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAg
ICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKKyAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgKi8KKyAgICAgICAgbWFrZVY4T2JqZWN0R3JvdXBzKG1fZ3JvdXBlcik7CisgICAg
fQogCi0gICAgICAgICAgICBBU1NFUlQobmV4dEtleUluZGV4ID4gaSk7Citwcml2YXRlOgorICAg
IEdyb3VwZXJMaXN0IG1fZ3JvdXBlcjsKK307CiAKLSAgICAgICAgICAgIC8vIFdlIG9ubHkgY2Fy
ZSBhYm91dCBhIGdyb3VwIGlmIGl0IGhhcyBtb3JlIHRoYW4gb25lIG9iamVjdC4gSWYgaXQgb25s
eQotICAgICAgICAgICAgLy8gaGFzIG9uZSBvYmplY3QsIGl0IGhhcyBub3RoaW5nIGVsc2UgdGhh
dCBuZWVkcyB0byBiZSBrZXB0IGFsaXZlLgotICAgICAgICAgICAgaWYgKG5leHRLZXlJbmRleCAt
IGkgPD0gMSkgewotICAgICAgICAgICAgICAgIGkgPSBuZXh0S2V5SW5kZXg7Ci0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CitjbGFzcyBET01PYmplY3RHcm91cGVyVmlz
aXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yIHsKK3B1YmxpYzoKKyAg
ICBET01PYmplY3RHcm91cGVyVmlzaXRvcigpCisgICAgeworICAgIH0KIAotICAgICAgICAgICAg
VmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBncm91cDsKLSAgICAgICAgICAgIGdy
b3VwLnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBpKTsKLSAgICAgICAgICAgIGZvciAo
OyBpIDwgbmV4dEtleUluZGV4OyArK2kpIHsKLSAgICAgICAgICAgICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6VmFsdWU+IHdyYXBwZXIgPSBtX2dyb3VwZXJbaV0ud3JhcHBlcigpOwotICAgICAgICAg
ICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIGdyb3Vw
LmFwcGVuZCh3cmFwcGVyKTsKLSAgICAgICAgICAgICAgICAvKiBGSVhNRTogUmUtZW5hYmxlZCB0
aGlzIGNvZGUgdG8gYXZvaWQgR0NpbmcgdGhlc2Ugd3JhcHBlcnMhCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEN1cnJlbnRseSB0aGlzIGRlcGVuZHMgb24gbG9va2luZyB1cCB0aGUgd3Jh
cHBlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSBHQywgYnV0IHdlIGRv
bid0IGtub3cgd2hpY2ggaXNvbGF0ZWQgd29ybGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2UncmUgaW4sIHNvIGl0J3MgdW5jbGVhciB3aGljaCBtYXAgdG8gbG9vayBpbi4uLgorICAg
IHZvaWQgc3RhcnRNYXAoKQorICAgIHsKKyAgICAgICAgbV9ncm91cGVyLnNocmluaygwKTsKKyAg
ICB9CiAKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBzdHlsZWQgYW5kIHRoZXJl
IGlzIGEgd3JhcHBlciBmb3IgdGhlIGlubGluZQotICAgICAgICAgICAgICAgIC8vIHN0eWxlIGRl
Y2xhcmF0aW9uLCB3ZSBuZWVkIHRvIGtlZXAgdGhhdCBzdHlsZSBkZWNsYXJhdGlvbgotICAgICAg
ICAgICAgICAgIC8vIHdyYXBwZXIgYWxpdmUgYXMgd2VsbCwgc28gd2UgYWRkIGl0IHRvIHRoZSBv
YmplY3QgZ3JvdXAuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzU3R5bGVkRWxlbWVudCgp
KSB7Ci0gICAgICAgICAgICAgICAgICBTdHlsZWRFbGVtZW50KiBlbGVtZW50ID0gcmVpbnRlcnBy
ZXRfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICAgICAgICBDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOwotICAgICAg
ICAgICAgICAgICAgaWYgKHN0eWxlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgd3Jh
cHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChzdHlsZSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuYXBw
ZW5kKHdyYXBwZXIpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgfQorICAgIHZvaWQgZW5kTWFwKCkKKyAgICB7
CisgICAgICAgIG1ha2VWOE9iamVjdEdyb3VwcyhtX2dyb3VwZXIpOworICAgIH0KIAotICAgICAg
ICAgICAgaWYgKGdyb3VwLnNpemUoKSA+IDEpCi0gICAgICAgICAgICAgICAgdjg6OlY4OjpBZGRP
YmplY3RHcm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7CisgICAgdm9pZCB2aXNpdERPTVdy
YXBwZXIodm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQor
ICAgIHsKKyAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlSW5mbyA9IFY4RE9NV3JhcHBlcjo6
ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7CisgICAgICAgIC8vIEZJWE1FOiBleHRlbmQgV3JhcHBl
clR5cGVJbmZvIHdpdGggaXNTdHlsZSB0byBzaW1wbGlmeSB0aGUgY2hlY2sgYmVsb3cuCisgICAg
ICAgIC8vIEZJWE1FOiBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgU3R5bGVCYXNlIHdyYXBwZXJz
IHdlIHNob3VsZCBjYXJlIG9mLgorICAgICAgICBpZiAoIVY4Q1NTU3R5bGVTaGVldDo6aW5mby5l
cXVhbHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhDU1NDaGFyc2V0UnVsZTo6aW5mby5l
cXVhbHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhDU1NGb250RmFjZVJ1bGU6OmluZm8u
ZXF1YWxzKHR5cGVJbmZvKQorICAgICAgICAgICAgJiYgIVY4Q1NTU3R5bGVSdWxlOjppbmZvLmVx
dWFscyh0eXBlSW5mbykKKyAgICAgICAgICAgICYmICFWOENTU0ltcG9ydFJ1bGU6OmluZm8uZXF1
YWxzKHR5cGVJbmZvKQorICAgICAgICAgICAgJiYgIVY4Q1NTTWVkaWFSdWxlOjppbmZvLmVxdWFs
cyh0eXBlSW5mbykpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBT
dHlsZUJhc2UqIHN0eWxlQmFzZSA9IHN0YXRpY19jYXN0PFN0eWxlQmFzZSo+KG9iamVjdCk7CiAK
LSAgICAgICAgICAgIEFTU0VSVChpID09IG5leHRLZXlJbmRleCk7CisgICAgICAgIC8vIFdlIHB1
dCB0aGUgd2hvbGUgdHJlZSBvZiBzdHlsZSBlbGVtZW50cyBpbnRvIGEgc2luZ2xlIG9iamVjdCBn
cm91cC4KKyAgICAgICAgLy8gVG8gYWNoaWV2ZSB0aGF0IHdlIGdyb3VwIGVsZW1lbnRzIGJ5IHRo
ZSByb290cyBvZiB0aGVpciB0cmVlcy4KKyAgICAgICAgU3R5bGVCYXNlKiByb290ID0gc3R5bGVC
YXNlOworICAgICAgICBBU1NFUlQocm9vdCk7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgICAgU3R5bGVCYXNlKiBwYXJlbnQgPSByb290LT5wYXJlbnQoKTsKKyAgICAgICAgICBpZiAo
IXBhcmVudCkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgcm9vdCA9IHBhcmVudDsK
ICAgICAgICAgfQorICAgICAgICAvLyBHcm91cCBpZCBpcyBhbiBhZGRyZXNzIG9mIHRoZSByb290
LgorICAgICAgICB1aW50cHRyX3QgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihyb290KTsKKyAgICAgICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3
cmFwcGVyKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzU4LDEwICs0MTUsMTMgQEAKICAgICB2
aXNpdEFjdGl2ZURPTU9iamVjdHNJbkN1cnJlbnRUaHJlYWQoJnByb2xvZ3VlVmlzaXRvcik7CiAK
ICAgICAvLyBDcmVhdGUgb2JqZWN0IGdyb3Vwcy4KLSAgICBPYmplY3RHcm91cGVyVmlzaXRvciBv
YmplY3RHcm91cGVyVmlzaXRvcjsKLSAgICB2aXNpdERPTU5vZGVzSW5DdXJyZW50VGhyZWFkKCZv
YmplY3RHcm91cGVyVmlzaXRvcik7Ci0gICAgb2JqZWN0R3JvdXBlclZpc2l0b3IuYXBwbHlHcm91
cGluZygpOworICAgIE5vZGVHcm91cGVyVmlzaXRvciBub2RlR3JvdXBlclZpc2l0b3I7CisgICAg
dmlzaXRET01Ob2Rlc0luQ3VycmVudFRocmVhZCgmbm9kZUdyb3VwZXJWaXNpdG9yKTsKKyAgICBu
b2RlR3JvdXBlclZpc2l0b3IuYXBwbHlHcm91cGluZygpOwogCisgICAgRE9NT2JqZWN0R3JvdXBl
clZpc2l0b3IgZG9tT2JqZWN0R3JvdXBlclZpc2l0b3I7CisgICAgdmlzaXRET01PYmplY3RzSW5D
dXJyZW50VGhyZWFkKCZkb21PYmplY3RHcm91cGVyVmlzaXRvcik7CisKICAgICAvLyBDbGVhbiBz
aW5nbGUgZWxlbWVudCBjYWNoZSBmb3Igc3RyaW5nIGNvbnZlcnNpb25zLgogICAgIGxhc3RTdHJp
bmdJbXBsID0gMDsKICAgICBsYXN0VjhTdHJpbmcuQ2xlYXIoKTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NTWFwLmgJKHJldmlzaW9uIDczMjY2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw4IEBACiAKICAgICAgICAgY2xhc3MgVmlz
aXRvciB7CiAgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydE1h
cCgpIHsgfQorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGVuZE1hcCgpIHsgfQogICAgICAgICAg
ICAgdmlydHVhbCB2b2lkIHZpc2l0RE9NV3JhcHBlcihLZXlUeXBlKiBrZXksIHY4OjpQZXJzaXN0
ZW50PFZhbHVlVHlwZT4gb2JqZWN0KSA9IDA7CiAgICAgICAgIHByb3RlY3RlZDoKICAgICAgICAg
ICAgIHZpcnR1YWwgflZpc2l0b3IoKSB7IH0KQEAgLTEyMiw5ICsxMjQsMTEgQEAKIAogICAgICAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQodHlwZW5hbWUgUGFyZW50OjpWaXNpdG9yKiB2aXNpdG9yKQog
ICAgICAgICB7CisgICAgICAgICAgICB2aXNpdG9yLT5zdGFydE1hcCgpOwogICAgICAgICAgICAg
dHlwZW5hbWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0gbV9t
YXAuYmVnaW4oKTsKICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkK
ICAgICAgICAgICAgICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBwZXIoaXQtPmZpcnN0LCB2ODo6
UGVyc2lzdGVudDxWYWx1ZVR5cGU+KGl0LT5zZWNvbmQpKTsKKyAgICAgICAgICAgIHZpc2l0b3It
PmVuZE1hcCgpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Cg==
</data>
<flag name="commit-queue"
          id="66645"
          type_id="3"
          status="+"
          setter="antonm"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75805</attachid>
            <date>2010-12-07 05:49:15 -0800</date>
            <delta_ts>2010-12-07 22:46:08 -0800</delta_ts>
            <desc>With proper reviewed by</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>11266</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzI2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMTEtMzAgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOYXRlIENoYXBpbi4KKworICAgICAgICBQb3J0
IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzcyODE5LyB0byB2OC1iYWNrZWQgcG9y
dHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDI0
NgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01NYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0V2Vha1JlZmVyZW5jZU1hcDo6VmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAgICAo
V2ViQ29yZTo6QWJzdHJhY3RXZWFrUmVmZXJlbmNlTWFwOjpWaXNpdG9yOjplbmRNYXApOgorICAg
ICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdyb3VwZXJJdGVt
OjpHcm91cGVySXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpHcm91cGVySXRlbTo6Z3JvdXBJZCk6
CisgICAgICAgIChXZWJDb3JlOjptYWtlVjhPYmplY3RHcm91cHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjpOb2RlR3JvdXBlclZpc2l0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZUdyb3VwZXJWaXNpdG9yOjphcHBseUdyb3VwaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTU9iamVjdEdyb3VwZXJWaXNpdG9yOjpPYmplY3RHcm91cGVyVmlzaXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpET01PYmplY3RHcm91cGVyVmlzaXRvcjo6c3RhcnRNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NT2JqZWN0R3JvdXBlclZpc2l0b3I6OmVuZE1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpET01PYmplY3RHcm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKToKKwogMjAxMC0xMi0wMyAg
QW5kcmFzIEJlY3NpICA8YWJlY3NpQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBVbnJldmll
d2VkIGJ1aWxkIGZpeCBhZnRlciByNzMyNTQuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
R0NDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0ND
b250cm9sbGVyLmNwcAkocmV2aXNpb24gNzMyNjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
R0NDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTIgQEAKICNpbmNs
dWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENTU0NoYXJzZXRSdWxlLmgiCisjaW5jbHVkZSAi
VjhDU1NGb250RmFjZVJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU0ltcG9ydFJ1bGUuaCIKKyNpbmNs
dWRlICJWOENTU01lZGlhUnVsZS5oIgorI2luY2x1ZGUgIlY4Q1NTU3R5bGVSdWxlLmgiCisjaW5j
bHVkZSAiVjhDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRl
ICJWOE1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgpAQCAtMjEzLDIwICsyMTks
MTcgQEAKIAogY2xhc3MgR3JvdXBlckl0ZW0gewogcHVibGljOgotICAgIEdyb3VwZXJJdGVtKHVp
bnRwdHJfdCBncm91cElkLCBOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3
cmFwcGVyKSAKKyAgICBHcm91cGVySXRlbSh1aW50cHRyX3QgZ3JvdXBJZCwgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgCiAgICAgICAgIDogbV9ncm91cElkKGdyb3VwSWQpCi0g
ICAgICAgICwgbV9ub2RlKG5vZGUpCiAgICAgICAgICwgbV93cmFwcGVyKHdyYXBwZXIpIAogICAg
ICAgICB7CiAgICAgICAgIH0KIAogICAgIHVpbnRwdHJfdCBncm91cElkKCkgY29uc3QgeyByZXR1
cm4gbV9ncm91cElkOyB9Ci0gICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsg
fQogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIoKSBjb25zdCB7IHJldHVy
biBtX3dyYXBwZXI7IH0KIAogcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9ncm91cElkOwotICAg
IE5vZGUqIG1fbm9kZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX3dyYXBwZXI7
CiB9OwogCkBAIC0yMzcsMTYgKzI0MCw1NSBAQAogCiB0eXBlZGVmIFZlY3RvcjxHcm91cGVySXRl
bT4gR3JvdXBlckxpc3Q7CiAKLWNsYXNzIE9iamVjdEdyb3VwZXJWaXNpdG9yIDogcHVibGljIERP
TVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3Igewordm9pZCBtYWtlVjhPYmplY3RHcm91cHMoR3Jv
dXBlckxpc3QmIGdyb3VwZXIpCit7CisgICAgLy8gR3JvdXAgYnkgc29ydGluZyBieSB0aGUgZ3Jv
dXAgaWQuCisgICAgc3RkOjpzb3J0KGdyb3VwZXIuYmVnaW4oKSwgZ3JvdXBlci5lbmQoKSk7CisK
KyAgICAvLyBGSVhNRSBTaG91bGQgcHJvYmFibHkgd29yayBpbiBpdGVyYXRvcnMgaGVyZSwgYnV0
IGluZGV4ZXMgd2VyZSBlYXNpZXIgZm9yIG15IHNpbXBsZSBtaW5kLgorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZ3JvdXBlci5zaXplKCk7ICkgeworICAgICAgICAvLyBTZWVrIHRvIHRoZSBu
ZXh0IGtleSAob3IgdGhlIGVuZCBvZiB0aGUgbGlzdCkuCisgICAgICAgIHNpemVfdCBuZXh0S2V5
SW5kZXggPSBncm91cGVyLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBn
cm91cGVyLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBpZiAoZ3JvdXBlcltpXS5ncm91cElk
KCkgIT0gZ3JvdXBlcltqXS5ncm91cElkKCkpIHsKKyAgICAgICAgICAgICAgICBuZXh0S2V5SW5k
ZXggPSBqOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgQVNTRVJUKG5leHRLZXlJbmRleCA+IGkpOworCisgICAgICAgIC8vIFdlIG9u
bHkgY2FyZSBhYm91dCBhIGdyb3VwIGlmIGl0IGhhcyBtb3JlIHRoYW4gb25lIG9iamVjdC4gSWYg
aXQgb25seQorICAgICAgICAvLyBoYXMgb25lIG9iamVjdCwgaXQgaGFzIG5vdGhpbmcgZWxzZSB0
aGF0IG5lZWRzIHRvIGJlIGtlcHQgYWxpdmUuCisgICAgICAgIGlmIChuZXh0S2V5SW5kZXggLSBp
IDw9IDEpIHsKKyAgICAgICAgICAgIGkgPSBuZXh0S2V5SW5kZXg7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFs
dWU+ID4gZ3JvdXA7CisgICAgICAgIGdyb3VwLnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXgg
LSBpKTsKKyAgICAgICAgZm9yICg7IGkgPCBuZXh0S2V5SW5kZXg7ICsraSkgeworICAgICAgICAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyID0gZ3JvdXBlcltpXS53cmFwcGVy
KCk7CisgICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
IGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChncm91cC5z
aXplKCkgPiAxKQorICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmplY3RHcm91cCgmZ3JvdXBbMF0s
IGdyb3VwLnNpemUoKSk7CisKKyAgICAgICAgQVNTRVJUKGkgPT0gbmV4dEtleUluZGV4KTsKKyAg
ICB9Cit9CisKK2NsYXNzIE5vZGVHcm91cGVyVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFw
PE5vZGU+OjpWaXNpdG9yIHsKIHB1YmxpYzoKLSAgICBPYmplY3RHcm91cGVyVmlzaXRvcigpCisg
ICAgTm9kZUdyb3VwZXJWaXNpdG9yKCkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBncm91cGVy
Xy5yZXNlcnZlQ2FwYWNpdHkobm9kZV9tYXAuc2l6ZSgpKTsgID8KICAgICB9CiAKICAgICB2b2lk
IHZpc2l0RE9NV3JhcHBlcihOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3
cmFwcGVyKQogICAgIHsKLQogICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBpbiBkb2N1bWVudCwg
cHV0IGl0IGluIHRoZSBvd25lckRvY3VtZW50J3Mgb2JqZWN0IGdyb3VwLgogICAgICAgICAvLwog
ICAgICAgICAvLyBJZiBhbiBpbWFnZSBlbGVtZW50IHdhcyBjcmVhdGVkIGJ5IEphdmFTY3JpcHQg
Im5ldyBJbWFnZSIsCkBAIC0yNzcsNjUgKzMxOSw4MCBAQAogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihyb290KTsKICAgICAg
ICAgfQotICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3VwSWQsIG5vZGUs
IHdyYXBwZXIpKTsKKyAgICAgICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElk
LCB3cmFwcGVyKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBseUdyb3VwaW5nKCkKICAgICB7Ci0g
ICAgICAgIC8vIEdyb3VwIGJ5IHNvcnRpbmcgYnkgdGhlIGdyb3VwIGlkLgotICAgICAgICBzdGQ6
OnNvcnQobV9ncm91cGVyLmJlZ2luKCksIG1fZ3JvdXBlci5lbmQoKSk7CisgICAgICAgIC8qIEZJ
WE1FOiBSZS1lbmFibGVkIHRoaXMgY29kZSB0byBhdm9pZCBHQ2luZyB0aGVzZSB3cmFwcGVycyEK
KyAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHkgdGhpcyBkZXBlbmRzIG9uIGxvb2tpbmcg
dXAgdGhlIHdyYXBwZXIKKyAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSBHQywgYnV0IHdl
IGRvbid0IGtub3cgd2hpY2ggaXNvbGF0ZWQgd29ybGQKKyAgICAgICAgICAgICAgICAgICAgICB3
ZSdyZSBpbiwgc28gaXQncyB1bmNsZWFyIHdoaWNoIG1hcCB0byBsb29rIGluLi4uCiAKLSAgICAg
ICAgLy8gRklYTUUgU2hvdWxkIHByb2JhYmx5IHdvcmsgaW4gaXRlcmF0b3JzIGhlcmUsIGJ1dCBp
bmRleGVzIHdlcmUgZWFzaWVyIGZvciBteSBzaW1wbGUgbWluZC4KLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2dyb3VwZXIuc2l6ZSgpOyApIHsKLSAgICAgICAgICAgIC8vIFNlZWsg
dG8gdGhlIG5leHQga2V5IChvciB0aGUgZW5kIG9mIHRoZSBsaXN0KS4KLSAgICAgICAgICAgIHNp
emVfdCBuZXh0S2V5SW5kZXggPSBtX2dyb3VwZXIuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChz
aXplX3QgaiA9IGk7IGogPCBtX2dyb3VwZXIuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAg
ICBpZiAobV9ncm91cGVyW2ldLmdyb3VwSWQoKSAhPSBtX2dyb3VwZXJbal0uZ3JvdXBJZCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG5leHRLZXlJbmRleCA9IGo7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgLy8g
SWYgdGhlIG5vZGUgaXMgc3R5bGVkIGFuZCB0aGVyZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBpbmxp
bmUKKyAgICAgICAgLy8gc3R5bGUgZGVjbGFyYXRpb24sIHdlIG5lZWQgdG8ga2VlcCB0aGF0IHN0
eWxlIGRlY2xhcmF0aW9uCisgICAgICAgIC8vIHdyYXBwZXIgYWxpdmUgYXMgd2VsbCwgc28gd2Ug
YWRkIGl0IHRvIHRoZSBvYmplY3QgZ3JvdXAuCisgICAgICAgIGlmIChub2RlLT5pc1N0eWxlZEVs
ZW1lbnQoKSkgeworICAgICAgICAgIFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQgPSByZWludGVycHJl
dF9jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICBDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOworICAgICAgICAgIGlmIChz
dHlsZSAhPSBOVUxMKSB7CisgICAgICAgICAgICB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCku
Z2V0KHN0eWxlKTsKKyAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAg
ICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgKi8KKyAgICAgICAgbWFrZVY4T2JqZWN0R3JvdXBzKG1fZ3JvdXBlcik7CisgICAgfQog
Ci0gICAgICAgICAgICBBU1NFUlQobmV4dEtleUluZGV4ID4gaSk7Citwcml2YXRlOgorICAgIEdy
b3VwZXJMaXN0IG1fZ3JvdXBlcjsKK307CiAKLSAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBh
Ym91dCBhIGdyb3VwIGlmIGl0IGhhcyBtb3JlIHRoYW4gb25lIG9iamVjdC4gSWYgaXQgb25seQot
ICAgICAgICAgICAgLy8gaGFzIG9uZSBvYmplY3QsIGl0IGhhcyBub3RoaW5nIGVsc2UgdGhhdCBu
ZWVkcyB0byBiZSBrZXB0IGFsaXZlLgotICAgICAgICAgICAgaWYgKG5leHRLZXlJbmRleCAtIGkg
PD0gMSkgewotICAgICAgICAgICAgICAgIGkgPSBuZXh0S2V5SW5kZXg7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9CitjbGFzcyBET01PYmplY3RHcm91cGVyVmlzaXRv
ciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBE
T01PYmplY3RHcm91cGVyVmlzaXRvcigpCisgICAgeworICAgIH0KIAotICAgICAgICAgICAgVmVj
dG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBncm91cDsKLSAgICAgICAgICAgIGdyb3Vw
LnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBpKTsKLSAgICAgICAgICAgIGZvciAoOyBp
IDwgbmV4dEtleUluZGV4OyArK2kpIHsKLSAgICAgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6VmFsdWU+IHdyYXBwZXIgPSBtX2dyb3VwZXJbaV0ud3JhcHBlcigpOwotICAgICAgICAgICAg
ICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIGdyb3VwLmFw
cGVuZCh3cmFwcGVyKTsKLSAgICAgICAgICAgICAgICAvKiBGSVhNRTogUmUtZW5hYmxlZCB0aGlz
IGNvZGUgdG8gYXZvaWQgR0NpbmcgdGhlc2Ugd3JhcHBlcnMhCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEN1cnJlbnRseSB0aGlzIGRlcGVuZHMgb24gbG9va2luZyB1cCB0aGUgd3JhcHBl
cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSBHQywgYnV0IHdlIGRvbid0
IGtub3cgd2hpY2ggaXNvbGF0ZWQgd29ybGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2UncmUgaW4sIHNvIGl0J3MgdW5jbGVhciB3aGljaCBtYXAgdG8gbG9vayBpbi4uLgorICAgIHZv
aWQgc3RhcnRNYXAoKQorICAgIHsKKyAgICAgICAgbV9ncm91cGVyLnNocmluaygwKTsKKyAgICB9
CiAKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBzdHlsZWQgYW5kIHRoZXJlIGlz
IGEgd3JhcHBlciBmb3IgdGhlIGlubGluZQotICAgICAgICAgICAgICAgIC8vIHN0eWxlIGRlY2xh
cmF0aW9uLCB3ZSBuZWVkIHRvIGtlZXAgdGhhdCBzdHlsZSBkZWNsYXJhdGlvbgotICAgICAgICAg
ICAgICAgIC8vIHdyYXBwZXIgYWxpdmUgYXMgd2VsbCwgc28gd2UgYWRkIGl0IHRvIHRoZSBvYmpl
Y3QgZ3JvdXAuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKSB7
Ci0gICAgICAgICAgICAgICAgICBTdHlsZWRFbGVtZW50KiBlbGVtZW50ID0gcmVpbnRlcnByZXRf
Y2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICAgICAgICBDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOwotICAgICAgICAg
ICAgICAgICAgaWYgKHN0eWxlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgd3JhcHBl
ciA9IGdldERPTU9iamVjdE1hcCgpLmdldChzdHlsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuYXBwZW5k
KHdyYXBwZXIpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgfQorICAgIHZvaWQgZW5kTWFwKCkKKyAgICB7Cisg
ICAgICAgIG1ha2VWOE9iamVjdEdyb3VwcyhtX2dyb3VwZXIpOworICAgIH0KIAotICAgICAgICAg
ICAgaWYgKGdyb3VwLnNpemUoKSA+IDEpCi0gICAgICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmpl
Y3RHcm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7CisgICAgdm9pZCB2aXNpdERPTVdyYXBw
ZXIodm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAg
IHsKKyAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlSW5mbyA9IFY4RE9NV3JhcHBlcjo6ZG9t
V3JhcHBlclR5cGUod3JhcHBlcik7CisgICAgICAgIC8vIEZJWE1FOiBleHRlbmQgV3JhcHBlclR5
cGVJbmZvIHdpdGggaXNTdHlsZSB0byBzaW1wbGlmeSB0aGUgY2hlY2sgYmVsb3cuCisgICAgICAg
IC8vIEZJWE1FOiBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgU3R5bGVCYXNlIHdyYXBwZXJzIHdl
IHNob3VsZCBjYXJlIG9mLgorICAgICAgICBpZiAoIVY4Q1NTU3R5bGVTaGVldDo6aW5mby5lcXVh
bHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhDU1NDaGFyc2V0UnVsZTo6aW5mby5lcXVh
bHModHlwZUluZm8pCisgICAgICAgICAgICAmJiAhVjhDU1NGb250RmFjZVJ1bGU6OmluZm8uZXF1
YWxzKHR5cGVJbmZvKQorICAgICAgICAgICAgJiYgIVY4Q1NTU3R5bGVSdWxlOjppbmZvLmVxdWFs
cyh0eXBlSW5mbykKKyAgICAgICAgICAgICYmICFWOENTU0ltcG9ydFJ1bGU6OmluZm8uZXF1YWxz
KHR5cGVJbmZvKQorICAgICAgICAgICAgJiYgIVY4Q1NTTWVkaWFSdWxlOjppbmZvLmVxdWFscyh0
eXBlSW5mbykpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHls
ZUJhc2UqIHN0eWxlQmFzZSA9IHN0YXRpY19jYXN0PFN0eWxlQmFzZSo+KG9iamVjdCk7CiAKLSAg
ICAgICAgICAgIEFTU0VSVChpID09IG5leHRLZXlJbmRleCk7CisgICAgICAgIC8vIFdlIHB1dCB0
aGUgd2hvbGUgdHJlZSBvZiBzdHlsZSBlbGVtZW50cyBpbnRvIGEgc2luZ2xlIG9iamVjdCBncm91
cC4KKyAgICAgICAgLy8gVG8gYWNoaWV2ZSB0aGF0IHdlIGdyb3VwIGVsZW1lbnRzIGJ5IHRoZSBy
b290cyBvZiB0aGVpciB0cmVlcy4KKyAgICAgICAgU3R5bGVCYXNlKiByb290ID0gc3R5bGVCYXNl
OworICAgICAgICBBU1NFUlQocm9vdCk7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgU3R5bGVCYXNlKiBwYXJlbnQgPSByb290LT5wYXJlbnQoKTsKKyAgICAgICAgICBpZiAoIXBh
cmVudCkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgcm9vdCA9IHBhcmVudDsKICAg
ICAgICAgfQorICAgICAgICAvLyBHcm91cCBpZCBpcyBhbiBhZGRyZXNzIG9mIHRoZSByb290Lgor
ICAgICAgICB1aW50cHRyX3QgZ3JvdXBJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihy
b290KTsKKyAgICAgICAgbV9ncm91cGVyLmFwcGVuZChHcm91cGVySXRlbShncm91cElkLCB3cmFw
cGVyKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzU4LDEwICs0MTUsMTMgQEAKICAgICB2aXNp
dEFjdGl2ZURPTU9iamVjdHNJbkN1cnJlbnRUaHJlYWQoJnByb2xvZ3VlVmlzaXRvcik7CiAKICAg
ICAvLyBDcmVhdGUgb2JqZWN0IGdyb3Vwcy4KLSAgICBPYmplY3RHcm91cGVyVmlzaXRvciBvYmpl
Y3RHcm91cGVyVmlzaXRvcjsKLSAgICB2aXNpdERPTU5vZGVzSW5DdXJyZW50VGhyZWFkKCZvYmpl
Y3RHcm91cGVyVmlzaXRvcik7Ci0gICAgb2JqZWN0R3JvdXBlclZpc2l0b3IuYXBwbHlHcm91cGlu
ZygpOworICAgIE5vZGVHcm91cGVyVmlzaXRvciBub2RlR3JvdXBlclZpc2l0b3I7CisgICAgdmlz
aXRET01Ob2Rlc0luQ3VycmVudFRocmVhZCgmbm9kZUdyb3VwZXJWaXNpdG9yKTsKKyAgICBub2Rl
R3JvdXBlclZpc2l0b3IuYXBwbHlHcm91cGluZygpOwogCisgICAgRE9NT2JqZWN0R3JvdXBlclZp
c2l0b3IgZG9tT2JqZWN0R3JvdXBlclZpc2l0b3I7CisgICAgdmlzaXRET01PYmplY3RzSW5DdXJy
ZW50VGhyZWFkKCZkb21PYmplY3RHcm91cGVyVmlzaXRvcik7CisKICAgICAvLyBDbGVhbiBzaW5n
bGUgZWxlbWVudCBjYWNoZSBmb3Igc3RyaW5nIGNvbnZlcnNpb25zLgogICAgIGxhc3RTdHJpbmdJ
bXBsID0gMDsKICAgICBsYXN0VjhTdHJpbmcuQ2xlYXIoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
TWFwLmgJKHJldmlzaW9uIDczMjY2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw4IEBACiAKICAgICAgICAgY2xhc3MgVmlzaXRv
ciB7CiAgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydE1hcCgp
IHsgfQorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGVuZE1hcCgpIHsgfQogICAgICAgICAgICAg
dmlydHVhbCB2b2lkIHZpc2l0RE9NV3JhcHBlcihLZXlUeXBlKiBrZXksIHY4OjpQZXJzaXN0ZW50
PFZhbHVlVHlwZT4gb2JqZWN0KSA9IDA7CiAgICAgICAgIHByb3RlY3RlZDoKICAgICAgICAgICAg
IHZpcnR1YWwgflZpc2l0b3IoKSB7IH0KQEAgLTEyMiw5ICsxMjQsMTEgQEAKIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQodHlwZW5hbWUgUGFyZW50OjpWaXNpdG9yKiB2aXNpdG9yKQogICAg
ICAgICB7CisgICAgICAgICAgICB2aXNpdG9yLT5zdGFydE1hcCgpOwogICAgICAgICAgICAgdHlw
ZW5hbWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0gbV9tYXAu
YmVnaW4oKTsKICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkKICAg
ICAgICAgICAgICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBwZXIoaXQtPmZpcnN0LCB2ODo6UGVy
c2lzdGVudDxWYWx1ZVR5cGU+KGl0LT5zZWNvbmQpKTsKKyAgICAgICAgICAgIHZpc2l0b3ItPmVu
ZE1hcCgpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>