<?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>67823</bug_id>
          
          <creation_ts>2011-09-08 17:42:27 -0700</creation_ts>
          <short_desc>[NRWT] Provides a simple LRU cache class in Python.</short_desc>
          <delta_ts>2011-09-25 18:12:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>67479</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Hayato Ito">hayato</assigned_to>
          <cc>hamaji</cc>
    
    <cc>makabi</cc>
    
    <cc>morrita</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>464533</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-09-08 17:42:27 -0700</bug_when>
    <thetext>In CSSWG reftests, there are a lot of cases that the same HTML file is used as a reference file in many tests.
It should be avoided that calling DumpRenderTree for the same file many times. We should cache the rendering result somehow for the same HTML file.
Note that we need image itself as weel as image hash so that we can &apos;diff&apos; images later.
At the same time, we shouldn&apos;t cache all results because it consumes a lot of memory.

It&apos;d be nice to have simple LRU cache class because there is locality of reference in such HTML files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466877</commentid>
    <comment_count>1</comment_count>
      <attachid>107297</attachid>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-14 00:01:24 -0700</bug_when>
    <thetext>Created attachment 107297
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466919</commentid>
    <comment_count>2</comment_count>
      <attachid>107297</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-09-14 01:33:58 -0700</bug_when>
    <thetext>Comment on attachment 107297
Patch

Ai-san, thank you for the patch.

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

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:1
&gt; +#!/usr/bin/env python

I think this file should move to webkitpy/common/ or webkitpy/common/system directory.
And lru_cache.py might be better file name than lru.py

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:28
&gt; +class Node():

It might be better that Node class should have &apos;value&apos; member in addition to &apos;prev&apos; and &apos;next&apos;.
That would make the implementation of LRU class simpler because we don&apos;t have to have a tuple (value, Node(...)).

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:36
&gt; +

L36-L37: One blank line instead of two blank lines.

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:40
&gt; +    def __init__(self, size):

Could you add a blank line between Line39 and Line40?

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:44
&gt; +        self._size = size

What if size &lt;= 0? Could you assert the value of |size| here?
  assert size &gt; 0

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:49
&gt; +            self.first = key

I think self.first and self.last should point to the first Node and the last Node directly.

def __setitem__(self, key, value):
    if not self.first:
        node = Node(value, ,,,)
        self._dict[key] = node
        self.first = node
        self.last = node
        self.last_key = key  // I am not sure, but I guess we should keep track of the last_key to delete the last Node from the self_dict.

And Node class&apos;s |prev| and |next| also point to other Nodes directly, instead of having |key|.
That might make the implementation of this LRU class more natural.

That&apos;d be nice if you could try to rewrite this class as I suggested.

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:114
&gt; +    def pop(self, key):

Do we need this |pop| method?
To look up a value by a key, &apos;lru[key]&apos; is good enough because this class defines __getitems__(..) method.

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru_unittest.py:28
&gt; +import lru

We should use absolute path in import.
like:
  from webkipy.common.xxx import lru</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466986</commentid>
    <comment_count>3</comment_count>
      <attachid>107322</attachid>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-14 06:25:54 -0700</bug_when>
    <thetext>Created attachment 107322
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466988</commentid>
    <comment_count>4</comment_count>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-14 06:27:34 -0700</bug_when>
    <thetext>I addressed your comment.(In reply to comment #2)
&gt; (From update of attachment 107297 [details])
&gt; Ai-san, thank you for the patch.
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107297&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:1
&gt; &gt; +#!/usr/bin/env python
&gt; 
&gt; I think this file should move to webkitpy/common/ or webkitpy/common/system directory.
&gt; And lru_cache.py might be better file name than lru.py
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:28
&gt; &gt; +class Node():
&gt; 
&gt; It might be better that Node class should have &apos;value&apos; member in addition to &apos;prev&apos; and &apos;next&apos;.
&gt; That would make the implementation of LRU class simpler because we don&apos;t have to have a tuple (value, Node(...)).
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:36
&gt; &gt; +
&gt; 
&gt; L36-L37: One blank line instead of two blank lines.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:40
&gt; &gt; +    def __init__(self, size):
&gt; 
&gt; Could you add a blank line between Line39 and Line40?
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:44
&gt; &gt; +        self._size = size
&gt; 
&gt; What if size &lt;= 0? Could you assert the value of |size| here?
&gt;   assert size &gt; 0
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:49
&gt; &gt; +            self.first = key
&gt; 
&gt; I think self.first and self.last should point to the first Node and the last Node directly.
&gt; 
&gt; def __setitem__(self, key, value):
&gt;     if not self.first:
&gt;         node = Node(value, ,,,)
&gt;         self._dict[key] = node
&gt;         self.first = node
&gt;         self.last = node
&gt;         self.last_key = key  // I am not sure, but I guess we should keep track of the last_key to delete the last Node from the self_dict.
&gt; 
&gt; And Node class&apos;s |prev| and |next| also point to other Nodes directly, instead of having |key|.
&gt; That might make the implementation of this LRU class more natural.
&gt; 
&gt; That&apos;d be nice if you could try to rewrite this class as I suggested.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru.py:114
&gt; &gt; +    def pop(self, key):
&gt; 
&gt; Do we need this |pop| method?
&gt; To look up a value by a key, &apos;lru[key]&apos; is good enough because this class defines __getitems__(..) method.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/reftests/lru_unittest.py:28
&gt; &gt; +import lru
&gt; 
&gt; We should use absolute path in import.
&gt; like:
&gt;   from webkipy.common.xxx import lru</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467624</commentid>
    <comment_count>5</comment_count>
      <attachid>107322</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-09-14 22:04:14 -0700</bug_when>
    <thetext>Comment on attachment 107322
Patch

Thank you! The patch looks good!
I think there are still some corner cases we must handle carefully.

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

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:39
&gt; +        size: a cache memory size

&apos;capacity&apos; might be a better name than &apos;size&apos; in this context.

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:42
&gt; +        assert size &gt; 0, &quot;You should set the LRUCache size to not less than zero.&quot;

You might want to include the actual value of |capacity| in the assertion message.
like:
  assert capacity &gt; 0, &quot;capacity (%s) must be greater than zero.&quot; % capacity

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:43
&gt; +        self.first = None

if you don&apos;t want to expose |first| and |last|, that should be named like |_first| and |_last|.

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:49
&gt; +        if self.first == None:

I think 
  if not self.first:
is more pythonic than
  if self.first == None:

At least it should be &apos;self.first is None&apos; instead of &apos;self.first == None&apos;.

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:65
&gt; +        node = Node(key, value, self.first)

When _one_node is called, self.first is always None, isn&apos;t it?
Therefore this should be:
  node = Node(key, value, None)

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:71
&gt; +        if self.first.key == key:

If self.first is None, this will fail.

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:99
&gt; +            self.first = node.prev

If LRUCache contains one item, (k, v) and del[k] is called, it seems self.first will become &apos;None&apos; here. So the following self.first.next will fail. Could you add a testcase for this?

And if self.first and self.last point to the same node, it seems we also have to set self.last = None here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467788</commentid>
    <comment_count>6</comment_count>
      <attachid>107494</attachid>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-15 07:27:23 -0700</bug_when>
    <thetext>Created attachment 107494
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467789</commentid>
    <comment_count>7</comment_count>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-15 07:29:49 -0700</bug_when>
    <thetext>I addressed your comment.

(In reply to comment #5)
&gt; (From update of attachment 107322 [details])
&gt; Thank you! The patch looks good!
&gt; I think there are still some corner cases we must handle carefully.
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107322&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:39
&gt; &gt; +        size: a cache memory size
&gt; 
&gt; &apos;capacity&apos; might be a better name than &apos;size&apos; in this context.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:42
&gt; &gt; +        assert size &gt; 0, &quot;You should set the LRUCache size to not less than zero.&quot;
&gt; 
&gt; You might want to include the actual value of |capacity| in the assertion message.
&gt; like:
&gt;   assert capacity &gt; 0, &quot;capacity (%s) must be greater than zero.&quot; % capacity
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:43
&gt; &gt; +        self.first = None
&gt; 
&gt; if you don&apos;t want to expose |first| and |last|, that should be named like |_first| and |_last|.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:49
&gt; &gt; +        if self.first == None:
&gt; 
&gt; I think 
&gt;   if not self.first:
&gt; is more pythonic than
&gt;   if self.first == None:
&gt; 
&gt; At least it should be &apos;self.first is None&apos; instead of &apos;self.first == None&apos;.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:65
&gt; &gt; +        node = Node(key, value, self.first)
&gt; 
&gt; When _one_node is called, self.first is always None, isn&apos;t it?
&gt; Therefore this should be:
&gt;   node = Node(key, value, None)
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:71
&gt; &gt; +        if self.first.key == key:
&gt; 
&gt; If self.first is None, this will fail.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:99
&gt; &gt; +            self.first = node.prev
&gt; 
&gt; If LRUCache contains one item, (k, v) and del[k] is called, it seems self.first will become &apos;None&apos; here. So the following self.first.next will fail. Could you add a testcase for this?
&gt; 
&gt; And if self.first and self.last point to the same node, it seems we also have to set self.last = None here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468225</commentid>
    <comment_count>8</comment_count>
      <attachid>107582</attachid>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-15 18:50:14 -0700</bug_when>
    <thetext>Created attachment 107582
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468288</commentid>
    <comment_count>9</comment_count>
      <attachid>107582</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-09-15 21:34:52 -0700</bug_when>
    <thetext>Comment on attachment 107582
Patch

Thank you for addressing my comments! I added some comments. Sorry for the back and forth again.
I hope you will enjoy your last day of the internship. :)

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

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:59
&gt; +        node = Node(key, value, self._first)

I think if self._dict already contains the key, we have to delete the node with the key from the doubly linked list.
Without that, we are likely to have two nodes with the same key in the doubly liked list.

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:77
&gt; +            next__last = self._last.next

Nit: Two underscores &apos;__&apos;.
You meant |next_last|, |next_first|?

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:88
&gt; +        key_next = self._dict[key].next

You might use |node| here.
  key_next = node.next
  key_prev = node.prev

Or You might rewrite L88-L91 with the following two lines:
  node.next.prev = node.prev
  node.prev.next = node.next

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:99
&gt; +        if self._first == self._last:

It seems that this should be &apos;self._first is self._last&apos;.

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:102
&gt; +            del self._dict[key]

It seems that if the key is not found here, a lru_cache will become inconsistant state (self._dict has one item, but self._first is None).

It might be better to call &apos;node = self._dict[key]&apos; at the beginning of the function.
e.g.

   def __delitem__(self, key):
       node = self._dict[key]
       del self._dict[key]
       if self._first is self._last:
            self._first = None
            self._last = None
            return
       if self._first is node:
            self._first = node.prev
            self._first.next = None
            return
       if self._last is node:
            self._last = node.next
            self._last.prev = None
            return
       node.next.prev = node.prev
       node.prev.next = node.next

I&apos;ve not tested this. I guess your existing unittests (or new tests) will find any bugs in this code :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468298</commentid>
    <comment_count>10</comment_count>
      <attachid>107604</attachid>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-15 22:27:00 -0700</bug_when>
    <thetext>Created attachment 107604
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468299</commentid>
    <comment_count>11</comment_count>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-15 22:27:49 -0700</bug_when>
    <thetext>I addressed your comment.

(In reply to comment #9)
&gt; (From update of attachment 107582 [details])
&gt; Thank you for addressing my comments! I added some comments. Sorry for the back and forth again.
&gt; I hope you will enjoy your last day of the internship. :)
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107582&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:59
&gt; &gt; +        node = Node(key, value, self._first)
&gt; 
&gt; I think if self._dict already contains the key, we have to delete the node with the key from the doubly linked list.
&gt; Without that, we are likely to have two nodes with the same key in the doubly liked list.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:77
&gt; &gt; +            next__last = self._last.next
&gt; 
&gt; Nit: Two underscores &apos;__&apos;.
&gt; You meant |next_last|, |next_first|?
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:88
&gt; &gt; +        key_next = self._dict[key].next
&gt; 
&gt; You might use |node| here.
&gt;   key_next = node.next
&gt;   key_prev = node.prev
&gt; 
&gt; Or You might rewrite L88-L91 with the following two lines:
&gt;   node.next.prev = node.prev
&gt;   node.prev.next = node.next
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:99
&gt; &gt; +        if self._first == self._last:
&gt; 
&gt; It seems that this should be &apos;self._first is self._last&apos;.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:102
&gt; &gt; +            del self._dict[key]
&gt; 
&gt; It seems that if the key is not found here, a lru_cache will become inconsistant state (self._dict has one item, but self._first is None).
&gt; 
&gt; It might be better to call &apos;node = self._dict[key]&apos; at the beginning of the function.
&gt; e.g.
&gt; 
&gt;    def __delitem__(self, key):
&gt;        node = self._dict[key]
&gt;        del self._dict[key]
&gt;        if self._first is self._last:
&gt;             self._first = None
&gt;             self._last = None
&gt;             return
&gt;        if self._first is node:
&gt;             self._first = node.prev
&gt;             self._first.next = None
&gt;             return
&gt;        if self._last is node:
&gt;             self._last = node.next
&gt;             self._last.prev = None
&gt;             return
&gt;        node.next.prev = node.prev
&gt;        node.prev.next = node.next
&gt; 
&gt; I&apos;ve not tested this. I guess your existing unittests (or new tests) will find any bugs in this code :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468315</commentid>
    <comment_count>12</comment_count>
      <attachid>107604</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-09-15 23:04:23 -0700</bug_when>
    <thetext>Comment on attachment 107604
Patch

Thank you for updating the patch! I gave you one comment!

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

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:60
&gt; +        if key in self._dict:

I think L60-61 lines should move at the beginning of this function.
If self._dict has one item and L61 deletes that item, self._first becomes None, so L62 fails...:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468364</commentid>
    <comment_count>13</comment_count>
      <attachid>107615</attachid>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-16 00:26:54 -0700</bug_when>
    <thetext>Created attachment 107615
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468365</commentid>
    <comment_count>14</comment_count>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-16 00:27:50 -0700</bug_when>
    <thetext>I addressed your comment.

(In reply to comment #12)
&gt; (From update of attachment 107604 [details])
&gt; Thank you for updating the patch! I gave you one comment!
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107604&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:60
&gt; &gt; +        if key in self._dict:
&gt; 
&gt; I think L60-61 lines should move at the beginning of this function.
&gt; If self._dict has one item and L61 deletes that item, self._first becomes None, so L62 fails...:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468366</commentid>
    <comment_count>15</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-09-16 00:34:04 -0700</bug_when>
    <thetext>Looks good to me. Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468569</commentid>
    <comment_count>16</comment_count>
      <attachid>107615</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-09-16 10:11:56 -0700</bug_when>
    <thetext>Comment on attachment 107615
Patch

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

FWIW, I think this would be less confusing if you just kept a list of keys rather than the linked list.  As long as the capacity is small (maybe less than 20 entries), it&apos;ll still be plenty fast to update.  But this approach is fine too if you fix the memory leak I mentioned.

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:39
&gt; +    Args:
&gt; +        capacity: a cache memory capacity

Nit: This should be in the docstring for __init__.

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:57
&gt; +            if self._capacity == 1:
&gt; +                self._one_node(key, value)

I think you need to clear self._first here or the new node will point to the old value.  If the capacity is 1, we leak all the old objects because we hold a ref to them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469945</commentid>
    <comment_count>17</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-09-20 01:10:42 -0700</bug_when>
    <thetext>Hi Tony, thank you for the review.

Since Ai-san, the author of the patch, has already left Google, I&apos;ll update the patch later, addressing your comment.

(In reply to comment #16)
&gt; (From update of attachment 107615 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107615&amp;action=review
&gt; 
&gt; FWIW, I think this would be less confusing if you just kept a list of keys rather than the linked list.  As long as the capacity is small (maybe less than 20 entries), it&apos;ll still be plenty fast to update.  But this approach is fine too if you fix the memory leak I mentioned.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:39
&gt; &gt; +    Args:
&gt; &gt; +        capacity: a cache memory capacity
&gt; 
&gt; Nit: This should be in the docstring for __init__.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:57
&gt; &gt; +            if self._capacity == 1:
&gt; &gt; +                self._one_node(key, value)
&gt; 
&gt; I think you need to clear self._first here or the new node will point to the old value.  If the capacity is 1, we leak all the old objects because we hold a ref to them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471363</commentid>
    <comment_count>18</comment_count>
      <attachid>108278</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-09-21 22:34:17 -0700</bug_when>
    <thetext>Created attachment 108278
fix_leak</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471364</commentid>
    <comment_count>19</comment_count>
      <attachid>107615</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-09-21 22:38:05 -0700</bug_when>
    <thetext>Comment on attachment 107615
Patch

I&apos;ve addressed your comments. Could you take another look?

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/lru_cache.py:39
&gt;&gt;&gt; +        capacity: a cache memory capacity
&gt;&gt; 
&gt;&gt; Nit: This should be in the docstring for __init__.
&gt; 
&gt; 

Done

&gt;&gt; Tools/Scripts/webkitpy/common/lru_cache.py:57
&gt;&gt; +                self._one_node(key, value)
&gt; 
&gt; I think you need to clear self._first here or the new node will point to the old value.  If the capacity is 1, we leak all the old objects because we hold a ref to them.

Nice catch. Instead of clearing self._first here, I&apos;ve changed Node&apos;s __init__ method so that it doesn&apos;t receive |prev| and |next| parameters, which looks better to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471653</commentid>
    <comment_count>20</comment_count>
      <attachid>108278</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-09-22 10:11:29 -0700</bug_when>
    <thetext>Comment on attachment 108278
fix_leak

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

&gt; Tools/Scripts/webkitpy/common/lru_cache.py:32
&gt; +class Node():
&gt; +    def __init__(self, key, value):
&gt; +        self.key = key
&gt; +        self.value = value
&gt; +        self.prev = None
&gt; +        self.next = None

Nit: You can save a bit of memory by making prev and next class variables.  E.g.:
class Node():
  prev = None
  next = None
  def __init__(self, key, value):
    self.key = key
    self.value = value</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472932</commentid>
    <comment_count>21</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-09-25 18:01:41 -0700</bug_when>
    <thetext>Thank you for the review. I am going to land that.

(In reply to comment #20)
&gt; (From update of attachment 108278 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108278&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/lru_cache.py:32
&gt; &gt; +class Node():
&gt; &gt; +    def __init__(self, key, value):
&gt; &gt; +        self.key = key
&gt; &gt; +        self.value = value
&gt; &gt; +        self.prev = None
&gt; &gt; +        self.next = None
&gt; 
&gt; Nit: You can save a bit of memory by making prev and next class variables.  E.g.:
&gt; class Node():
&gt;   prev = None
&gt;   next = None
&gt;   def __init__(self, key, value):
&gt;     self.key = key
&gt;     self.value = value

Nice tips, but in each lru_cache instance, there are at most two nodes, _first and _last, whose next (or prev) value is None. Therefore it might not be worth making these class variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472934</commentid>
    <comment_count>22</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-09-25 18:12:13 -0700</bug_when>
    <thetext>Committed r95928: &lt;http://trac.webkit.org/changeset/95928&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107297</attachid>
            <date>2011-09-14 00:01:24 -0700</date>
            <delta_ts>2011-09-14 06:25:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67823-20110914160122.patch</filename>
            <type>text/plain</type>
            <size>8446</size>
            <attacher name="Ai Makabi">makabi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQxODIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2MTYwY2ZkMTc2Y2NlYjhhOWE4MzZjMTQ1NWY1NDhjMjQ4
ZmJkODM3Li5jZmNkMzdiNWRlYTE0ODU1NDVkNGU3NjVhNDc0MmUxMmFhYjc3MzQ2IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDktMTMgIEFpIE1ha2FiaSAgPG1ha2FiaUBnb29nbGUuY29tPgorCisgICAgICAg
IFByb3ZpZGVzIGEgc2ltcGxlIExSVSBjYWNoZSBjbGFzcyBpbiBQeXRob24uCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODIzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9yZWZ0ZXN0cy9scnUucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlZnRlc3RzL2xydV91bml0dGVzdC5weTogQWRkZWQuCisK
IDIwMTEtMDgtMzEgIEFpIE1ha2FiaSAgPG1ha2FiaUBnb29nbGUuY29tPgogCiAgICAgICAgIFBy
b3ZpZGVzIGEgc3RhbmQgYWxvbmUgQ1NTV0cgcmVmdGVzdCBydW5uZXIgd2hpY2ggY2FuIGJlIHVz
ZWQgaW50ZXJuYWxseS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3JlZnRlc3RzL2xydS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3JlZnRlc3RzL2xydS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjIxZTAzMWQ5ZjYzOTAxNDNhMzE4NGI0
Zjk4YmRlMzYwNGVmNmI4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcmVmdGVzdHMvbHJ1LnB5CkBAIC0wLDAgKzEsMTE3IEBACisjIS91c3Iv
YmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMK
KyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
IyBkaXN0cmlidXRpb24uCisKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisKK2NsYXNzIE5vZGUoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJldik6
CisgICAgICAgIHNlbGYucHJldiA9IHByZXYKKyAgICAgICAgc2VsZi5uZXh0ID0gTm9uZQorCisK
K2NsYXNzIExSVSgpOgorICAgICIiIkFuIGltcGxlbWVudGF0aW9uIG9mIExlYXN0IFJlY2VudGx5
IFVzZWQgKExSVSkgQWxnb3JpdGhtLgorCisKKyAgICBBcmdzOgorICAgICAgICBzaXplOiBhIGNh
Y2hlIG1lbW9yeSBzaXplIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUpOgorICAgICAg
ICBzZWxmLmZpcnN0ID0gTm9uZQorICAgICAgICBzZWxmLmxhc3QgPSBOb25lCisgICAgICAgIHNl
bGYuX2RpY3QgPSB7fQorICAgICAgICBzZWxmLl9zaXplID0gc2l6ZQorCisgICAgZGVmIF9fc2V0
aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBpZiBzZWxmLmZpcnN0ID09IE5vbmU6
CisgICAgICAgICAgICBzZWxmLl9kaWN0W2tleV0gPSAodmFsdWUsIE5vZGUoc2VsZi5maXJzdCkp
CisgICAgICAgICAgICBzZWxmLmZpcnN0ID0ga2V5CisgICAgICAgICAgICBzZWxmLmxhc3QgPSBr
ZXkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBsZW4oc2VsZi5fZGljdCkgPj0gc2Vs
Zi5fc2l6ZToKKyAgICAgICAgICAgIG5leHRfbGFzdCA9IHNlbGYuX2RpY3Rbc2VsZi5sYXN0XVsx
XS5uZXh0CisgICAgICAgICAgICBkZWwgc2VsZi5fZGljdFtzZWxmLmxhc3RdCisgICAgICAgICAg
ICBzZWxmLl9kaWN0W25leHRfbGFzdF1bMV0ucHJldiA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYu
bGFzdCA9IG5leHRfbGFzdAorICAgICAgICBzZWxmLl9kaWN0W2tleV0gPSAodmFsdWUsIE5vZGUo
c2VsZi5maXJzdCkpCisgICAgICAgIHNlbGYuX2RpY3Rba2V5XVsxXS5wcmV2ID0gc2VsZi5maXJz
dAorICAgICAgICBzZWxmLl9kaWN0W3NlbGYuZmlyc3RdWzFdLm5leHQgPSBrZXkKKyAgICAgICAg
c2VsZi5maXJzdCA9IGtleQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAg
ICAgIGlmIHNlbGYuZmlyc3QgPT0ga2V5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RpY3Rb
a2V5XVswXQorICAgICAgICBpZiBzZWxmLmxhc3QgPT0ga2V5OgorICAgICAgICAgICAgc2VsZi5s
YXN0ID0gc2VsZi5fZGljdFtzZWxmLmxhc3RdWzFdLm5leHQKKyAgICAgICAgICAgIHNlbGYuX2Rp
Y3Rbc2VsZi5sYXN0XVsxXS5wcmV2ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
bmV4dCA9IHNlbGYuX2RpY3Rba2V5XVsxXS5uZXh0CisgICAgICAgICAgICBwcmV2ID0gc2VsZi5f
ZGljdFtrZXldWzFdLnByZXYKKyAgICAgICAgICAgIHNlbGYuX2RpY3RbbmV4dF1bMV0ucHJldiA9
IHByZXYKKyAgICAgICAgICAgIHNlbGYuX2RpY3RbcHJldl1bMV0ubmV4dCA9IG5leHQKKyAgICAg
ICAgc2VsZi5fZGljdFtrZXldWzFdLnByZXYgPSBzZWxmLmZpcnN0CisgICAgICAgIHNlbGYuX2Rp
Y3Rba2V5XVsxXS5uZXh0ID0gTm9uZQorICAgICAgICBzZWxmLl9kaWN0W3NlbGYuZmlyc3RdWzFd
Lm5leHQgPSBrZXkKKyAgICAgICAgc2VsZi5maXJzdCA9IGtleQorICAgICAgICByZXR1cm4gc2Vs
Zi5fZGljdFtrZXldWzBdCisKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAg
ICAgaWYgc2VsZi5maXJzdCA9PSBrZXk6CisgICAgICAgICAgICBzZWxmLmZpcnN0ID0gc2VsZi5f
ZGljdFtzZWxmLmZpcnN0XVsxXS5wcmV2CisgICAgICAgICAgICBzZWxmLl9kaWN0W3NlbGYuZmly
c3RdWzFdLm5leHQgPSBOb25lCisgICAgICAgICAgICBkZWwgc2VsZi5fZGljdFtrZXldCisgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5sYXN0ID09IGtleToKKyAgICAgICAgICAg
IHNlbGYubGFzdCA9IHNlbGYuX2RpY3Rbc2VsZi5sYXN0XVsxXS5uZXh0CisgICAgICAgICAgICBz
ZWxmLl9kaWN0W3NlbGYubGFzdF1bMV0ucHJldiA9IE5vbmUKKyAgICAgICAgICAgIGRlbCBzZWxm
Ll9kaWN0W2tleV0KKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBuZXh0ID0gc2VsZi5fZGlj
dFtrZXldWzFdLm5leHQKKyAgICAgICAgcHJldiA9IHNlbGYuX2RpY3Rba2V5XVsxXS5wcmV2Cisg
ICAgICAgIHNlbGYuX2RpY3RbbmV4dF1bMV0ucHJldiA9IHByZXYKKyAgICAgICAgc2VsZi5fZGlj
dFtwcmV2XVsxXS5uZXh0ID0gbmV4dAorICAgICAgICBkZWwgc2VsZi5fZGljdFtrZXldCisKKyAg
ICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9kaWN0KQorCisg
ICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4ga2V5IGluIHNl
bGYuX2RpY3QKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIo
c2VsZi5fZGljdCkKKworICAgIGRlZiBpdGVtcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFsoa2V5
LCB2YWx1ZVswXSkgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5fZGljdC5pdGVtcygpXQorCisgICAg
ZGVmIHZhbHVlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFt2YWx1ZVswXSBmb3IgdmFsdWUgaW4g
c2VsZi5fZGljdC52YWx1ZXMoKV0KKworICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fZGljdC5rZXlzKCkKKworICAgIGRlZiBwb3Aoc2VsZiwga2V5KToKKyAgICAgICAg
aWYga2V5IGluIHNlbGYuX2RpY3Q6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2dldGl0ZW1f
XyhrZXkpCisgICAgICAgIHJhaXNlIEtleUVycm9yCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWZ0ZXN0cy9scnVfdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWZ0ZXN0cy9scnVfdW5pdHRlc3QucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYTBmMTkzMzQ0Mjg2NTA3MDBlZGZjYTNiZmE0MGI0MTgwMTE0NTBkMAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlZnRlc3Rz
L2xydV91bml0dGVzdC5weQpAQCAtMCwwICsxLDc2IEBACisjIS91c3IvYmluL2VudiBweXRob24K
KyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgdW5pdHRlc3QKK2ltcG9ydCBscnUKKworCitjbGFzcyBMUlVDYWNoZVRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxydSA9IGxy
dS5MUlUoMykKKyAgICAgICAgc2VsZi5scnVbJ2tleV8xJ10gPSAnaXRlbV8xJworICAgICAgICBz
ZWxmLmxydVsna2V5XzInXSA9ICdpdGVtXzInCisgICAgICAgIHNlbGYubHJ1WydrZXlfMyddID0g
J2l0ZW1fMycKKworICAgIGRlZiB0ZXN0X2l0ZW1zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNldChzZWxmLmxydS5pdGVtcygpKSwgc2V0KFsoJ2tleV8xJywgJ2l0ZW1fMScpLCAo
J2tleV8zJywgJ2l0ZW1fMycpLCAoJ2tleV8yJywgJ2l0ZW1fMicpXSkpCisKKyAgICBkZWYgdGVz
dF9wdXQoc2VsZik6CisgICAgICAgIHNlbGYubHJ1WydrZXlfNCddID0gJ2l0ZW1fNCcKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5scnUuaXRlbXMoKSksIHNldChbKCdrZXlfNCcs
ICdpdGVtXzQnKSwgKCdrZXlfMycsICdpdGVtXzMnKSwgKCdrZXlfMicsICdpdGVtXzInKV0pKQor
CisgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgICAgICBzZWxmLmxydVsna2V5XzEnXQor
ICAgICAgICBzZWxmLmxydVsna2V5XzUnXSA9ICdpdGVtXzUnCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2V0KHNlbGYubHJ1Lml0ZW1zKCkpLCBzZXQoWygna2V5XzEnLCAnaXRlbV8xJyksICgn
a2V5XzMnLCAnaXRlbV8zJyksICgna2V5XzUnLCAnaXRlbV81JyldKSkKKworICAgIGRlZiB0ZXN0
X2tleXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYubHJ1LmtleXMo
KSksIHNldChbJ2tleV8xJywgJ2tleV8yJywgJ2tleV8zJ10pKQorCisgICAgZGVmIHRlc3RfcG9w
KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubHJ1LnBvcCgna2V5XzMnKSwg
J2l0ZW1fMycpCisKKyAgICBkZWYgdGVzdF9wb3Bfa2V5X2Vycm9yKHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5scnUucG9wLCAna2V5XzYnKQorCisgICAg
ZGVmIHRlc3RfZGVsZXRlKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5scnVbJ2tleV8xJ10KKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZSgna2V5XzEnIGluIHNlbGYubHJ1KQorCisgICAgZGVmIHRl
c3RfY29udGFpbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdrZXlfMScgaW4gc2Vs
Zi5scnUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ2tleV80JyBpbiBzZWxmLmxydSkKKwor
ICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQo
c2VsZi5scnUudmFsdWVzKCkpLCBzZXQoWydpdGVtXzEnLCAnaXRlbV8yJywgJ2l0ZW1fMyddKSkK
KworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4o
c2VsZi5scnUpLCAzKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRl
c3QubWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107322</attachid>
            <date>2011-09-14 06:25:54 -0700</date>
            <delta_ts>2011-09-15 07:27:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67823-20110914222552.patch</filename>
            <type>text/plain</type>
            <size>9097</size>
            <attacher name="Ai Makabi">makabi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQxODIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2MTYwY2ZkMTc2Y2NlYjhhOWE4MzZjMTQ1NWY1NDhjMjQ4
ZmJkODM3Li5jODA1NjRmMmViYjZhOTY0MjM3Y2IwMThiYjI4MTc1ZDVjMDI0NmJiIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDktMTMgIEFpIE1ha2FiaSAgPG1ha2FiaUBnb29nbGUuY29tPgorCisgICAgICAg
IFByb3ZpZGVzIGEgc2ltcGxlIExSVSBjYWNoZSBjbGFzcyBpbiBQeXRob24uCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODIzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9scnVfY2FjaGUucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2xydV9jYWNoZV91bml0dGVzdC5weTogQWRkZWQuCisKIDIwMTEtMDgtMzEgIEFpIE1h
a2FiaSAgPG1ha2FiaUBnb29nbGUuY29tPgogCiAgICAgICAgIFByb3ZpZGVzIGEgc3RhbmQgYWxv
bmUgQ1NTV0cgcmVmdGVzdCBydW5uZXIgd2hpY2ggY2FuIGJlIHVzZWQgaW50ZXJuYWxseS4KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2xydV9jYWNoZS5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2xydV9jYWNoZS5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjA3
ZTVhZDNhNGU3MGFlMWViMjUwYzU5NDk4ZTVmYjM2MWEwMzEyCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbHJ1X2NhY2hlLnB5CkBAIC0wLDAgKzEsMTMw
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworCitjbGFzcyBOb2RlKCk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGtleSwgdmFsdWUsIHByZXYsIG5leHQ9Tm9uZSk6CisgICAgICAgIHNlbGYua2V5ID0ga2V5
CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICBzZWxmLnByZXYgPSBwcmV2Cisg
ICAgICAgIHNlbGYubmV4dCA9IG5leHQKKworCitjbGFzcyBMUlVDYWNoZSgpOgorICAgICIiIkFu
IGltcGxlbWVudGF0aW9uIG9mIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgQWxnb3JpdGhtLgor
CisgICAgQXJnczoKKyAgICAgICAgc2l6ZTogYSBjYWNoZSBtZW1vcnkgc2l6ZQorICAgICIiIgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplKToKKyAgICAgICAgYXNzZXJ0IHNpemUgPiAwLCAi
WW91IHNob3VsZCBzZXQgdGhlIExSVUNhY2hlIHNpemUgdG8gbm90IGxlc3MgdGhhbiB6ZXJvLiIK
KyAgICAgICAgc2VsZi5maXJzdCA9IE5vbmUKKyAgICAgICAgc2VsZi5sYXN0ID0gTm9uZQorICAg
ICAgICBzZWxmLl9kaWN0ID0ge30KKyAgICAgICAgc2VsZi5fc2l6ZSA9IHNpemUKKworICAgIGRl
ZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgaWYgc2VsZi5maXJzdCA9
PSBOb25lOgorICAgICAgICAgICAgc2VsZi5fb25lX25vZGUoa2V5LCB2YWx1ZSkKKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICBpZiBsZW4oc2VsZi5fZGljdCkgPj0gc2VsZi5fc2l6ZToKKyAg
ICAgICAgICAgIGRlbCBzZWxmLl9kaWN0W3NlbGYubGFzdC5rZXldCisgICAgICAgICAgICBpZiBz
ZWxmLl9zaXplID09IDE6CisgICAgICAgICAgICAgICAgc2VsZi5fb25lX25vZGUoa2V5LCB2YWx1
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYubGFzdCA9IHNlbGYu
bGFzdC5uZXh0CisgICAgICAgICAgICBzZWxmLmxhc3QucHJldiA9IE5vbmUKKyAgICAgICAgbm9k
ZSA9IE5vZGUoa2V5LCB2YWx1ZSwgc2VsZi5maXJzdCkKKyAgICAgICAgc2VsZi5maXJzdC5uZXh0
ID0gbm9kZQorICAgICAgICBzZWxmLmZpcnN0ID0gbm9kZQorICAgICAgICBzZWxmLl9kaWN0W2tl
eV0gPSBub2RlCisKKyAgICBkZWYgX29uZV9ub2RlKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAg
ICBub2RlID0gTm9kZShrZXksIHZhbHVlLCBzZWxmLmZpcnN0KQorICAgICAgICBzZWxmLl9kaWN0
W2tleV0gPSBub2RlCisgICAgICAgIHNlbGYuZmlyc3QgPSBub2RlCisgICAgICAgIHNlbGYubGFz
dCA9IG5vZGUKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBpZiBz
ZWxmLmZpcnN0LmtleSA9PSBrZXk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maXJzdC52YWx1
ZQorCisgICAgICAgIGlmIHNlbGYubGFzdC5rZXkgPT0ga2V5OgorICAgICAgICAgICAgbmV4dF9s
YXN0ID0gc2VsZi5sYXN0Lm5leHQKKyAgICAgICAgICAgIG5leHRfbGFzdC5wcmV2ID0gTm9uZQor
ICAgICAgICAgICAgbmV4dF9maXJzdCA9IHNlbGYubGFzdAorICAgICAgICAgICAgbmV4dF9maXJz
dC5wcmV2ID0gc2VsZi5maXJzdAorICAgICAgICAgICAgbmV4dF9maXJzdC5uZXh0ID0gTm9uZQor
ICAgICAgICAgICAgc2VsZi5maXJzdC5uZXh0ID0gbmV4dF9maXJzdAorICAgICAgICAgICAgc2Vs
Zi5maXJzdCA9IG5leHRfZmlyc3QKKyAgICAgICAgICAgIHNlbGYubGFzdCA9IG5leHRfbGFzdAor
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlyc3QudmFsdWUKKworICAgICAgICBub2RlID0gc2Vs
Zi5fZGljdFtrZXldCisgICAgICAgIGtleV9uZXh0ID0gc2VsZi5fZGljdFtrZXldLm5leHQKKyAg
ICAgICAga2V5X3ByZXYgPSBzZWxmLl9kaWN0W2tleV0ucHJldgorICAgICAgICBrZXlfbmV4dC5w
cmV2ID0gbm9kZS5wcmV2CisgICAgICAgIGtleV9wcmV2Lm5leHQgPSBub2RlLm5leHQKKyAgICAg
ICAgbm9kZS5wcmV2ID0gc2VsZi5maXJzdAorICAgICAgICBub2RlLm5leHQgPSBOb25lCisgICAg
ICAgIHNlbGYuZmlyc3QubmV4dCA9IG5vZGUKKyAgICAgICAgc2VsZi5maXJzdCA9IG5vZGUKKyAg
ICAgICAgcmV0dXJuIHNlbGYuZmlyc3QudmFsdWUKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxm
LCBrZXkpOgorICAgICAgICBub2RlID0gc2VsZi5fZGljdFtrZXldCisgICAgICAgIGlmIHNlbGYu
Zmlyc3QgaXMgbm9kZToKKyAgICAgICAgICAgIHNlbGYuZmlyc3QgPSBub2RlLnByZXYKKyAgICAg
ICAgICAgIHNlbGYuZmlyc3QubmV4dCA9IE5vbmUKKyAgICAgICAgICAgIGRlbCBzZWxmLl9kaWN0
W2tleV0KKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLmxhc3QgaXMgbm9kZToK
KyAgICAgICAgICAgIHNlbGYubGFzdCA9IG5vZGUubmV4dAorICAgICAgICAgICAgc2VsZi5sYXN0
LnByZXYgPSBOb25lCisgICAgICAgICAgICBkZWwgc2VsZi5fZGljdFtrZXldCisgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAga2V5X25leHQgPSBub2RlLm5leHQKKyAgICAgICAga2V5X3ByZXYg
PSBub2RlLnByZXYKKyAgICAgICAgbm9kZS5wcmV2ID0ga2V5X3ByZXYKKyAgICAgICAgbm9kZS5u
ZXh0ID0ga2V5X25leHQKKyAgICAgICAgZGVsIHNlbGYuX2RpY3Rba2V5XQorCisgICAgZGVmIF9f
bGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fZGljdCkKKworICAgIGRlZiBf
X2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9kaWN0
CisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHNlbGYuX2Rp
Y3QpCisKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgIHJldHVybiBbKGtleSwgbm9kZS52
YWx1ZSkgZm9yIGtleSwgbm9kZSBpbiBzZWxmLl9kaWN0Lml0ZW1zKCldCisKKyAgICBkZWYgdmFs
dWVzKHNlbGYpOgorICAgICAgICByZXR1cm4gW25vZGUudmFsdWUgZm9yIG5vZGUgaW4gc2VsZi5f
ZGljdC52YWx1ZXMoKV0KKworICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fZGljdC5rZXlzKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2xydV9jYWNoZV91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2xy
dV9jYWNoZV91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDM1YjZkYzFmZWU4NzE3NTkxNmIyYTc5
ZGFmZjc1NzdkOTQyMTAyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vbHJ1X2NhY2hlX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsOTAgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisj
IGRpc3RyaWJ1dGlvbi4KKworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uIGltcG9y
dCBscnVfY2FjaGUKKworCitjbGFzcyBMUlVDYWNoZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgor
CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxydSA9IGxydV9jYWNoZS5MUlVD
YWNoZSgzKQorICAgICAgICBzZWxmLmxydVsna2V5XzEnXSA9ICdpdGVtXzEnCisgICAgICAgIHNl
bGYubHJ1WydrZXlfMiddID0gJ2l0ZW1fMicKKyAgICAgICAgc2VsZi5scnVbJ2tleV8zJ10gPSAn
aXRlbV8zJworCisgICAgICAgIHNlbGYubHJ1MiA9IGxydV9jYWNoZS5MUlVDYWNoZSgxKQorICAg
ICAgICBzZWxmLmxydTJbJ2tleV8xJ10gPSAnaXRlbV8xJworCisgICAgZGVmIHRlc3RfaXRlbXMo
c2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYubHJ1Lml0ZW1zKCkpLCBz
ZXQoWygna2V5XzEnLCAnaXRlbV8xJyksICgna2V5XzMnLCAnaXRlbV8zJyksICgna2V5XzInLCAn
aXRlbV8yJyldKSkKKworICAgIGRlZiB0ZXN0X3B1dChzZWxmKToKKyAgICAgICAgc2VsZi5scnVb
J2tleV80J10gPSAnaXRlbV80JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLmxy
dS5pdGVtcygpKSwgc2V0KFsoJ2tleV80JywgJ2l0ZW1fNCcpLCAoJ2tleV8zJywgJ2l0ZW1fMycp
LCAoJ2tleV8yJywgJ2l0ZW1fMicpXSkpCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6Cisg
ICAgICAgIHNlbGYubHJ1WydrZXlfMSddCisgICAgICAgIHNlbGYubHJ1WydrZXlfNSddID0gJ2l0
ZW1fNScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5scnUuaXRlbXMoKSksIHNl
dChbKCdrZXlfMScsICdpdGVtXzEnKSwgKCdrZXlfMycsICdpdGVtXzMnKSwgKCdrZXlfNScsICdp
dGVtXzUnKV0pKQorCisgICAgZGVmIHRlc3Rfa2V5cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZXQoc2VsZi5scnUua2V5cygpKSwgc2V0KFsna2V5XzEnLCAna2V5XzInLCAna2V5
XzMnXSkpCisKKyAgICBkZWYgdGVzdF9kZWxldGUoc2VsZik6CisgICAgICAgIGRlbCBzZWxmLmxy
dVsna2V5XzEnXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdrZXlfMScgaW4gc2VsZi5scnUp
CisKKyAgICBkZWYgdGVzdF9jb250YWluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUo
J2tleV8xJyBpbiBzZWxmLmxydSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgna2V5XzQnIGlu
IHNlbGYubHJ1KQorCisgICAgZGVmIHRlc3RfdmFsdWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNldChzZWxmLmxydS52YWx1ZXMoKSksIHNldChbJ2l0ZW1fMScsICdpdGVtXzIn
LCAnaXRlbV8zJ10pKQorCisgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGxlbihzZWxmLmxydSksIDMpCisKKyAgICBkZWYgdGVzdF9zaXplMShzZWxmKToK
KyAgICAgICAgc2VsZi5scnUyWydrZXlfMiddID0gJ2l0ZW1fMicKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLmxydTIua2V5cygpLCBbJ2tleV8yJ10pCisgICAgICAgIGRlbCBzZWxmLmxy
dTJbJ2tleV8yJ10KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgna2V5XzInIGluIHNlbGYubHJ1
MikKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
S2V5RXJyb3IsIHNlbGYubHJ1Mi5fX2dldGl0ZW1fXywgJ2tleV8yJykKKworICAgIGRlZiB0ZXN0
X2dldF9taWRkbGVfaXRlbShzZWxmKToKKyAgICAgICAgc2VsZi5scnVbJ2tleV8yJ10KKyAgICAg
ICAgc2VsZi5scnVbJ2tleV80J10gPSAnaXRlbV80JworICAgICAgICBzZWxmLmxydVsna2V5XzUn
XSA9ICdpdGVtXzUnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYubHJ1LmtleXMo
KSksIHNldChbJ2tleV8yJywgJ2tleV80JywgJ2tleV81J10pKQorCisKK2lmIF9fbmFtZV9fID09
ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107494</attachid>
            <date>2011-09-15 07:27:23 -0700</date>
            <delta_ts>2011-09-15 18:50:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67823-20110915232721.patch</filename>
            <type>text/plain</type>
            <size>6047</size>
            <attacher name="Ai Makabi">makabi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQxODIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjODA1NjRmMmViYjZhOTY0MjM3Y2IwMThiYjI4MTc1ZDVj
MDI0NmJiLi41OTZmMzViY2JhOTRiOTc2MTcyOTU3M2Y2N2U4ODZhOGIwYmY1ODY3IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDktMTUgIEFpIE1ha2FiaSAgPG1ha2FiaUBnb29nbGUuY29tPgorCisgICAgICAg
IFByb3ZpZGVzIGEgc2ltcGxlIExSVSBjYWNoZSBjbGFzcyBpbiBQeXRob24uCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODIzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9scnVfY2FjaGUucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bHJ1X2NhY2hlX3VuaXR0ZXN0LnB5OgorCiAyMDExLTA5LTEzICBBaSBNYWthYmkgIDxtYWthYmlA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBQcm92aWRlcyBhIHNpbXBsZSBMUlUgY2FjaGUgY2xhc3Mg
aW4gUHl0aG9uLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbHJ1
X2NhY2hlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbHJ1X2NhY2hlLnB5Cmlu
ZGV4IDdmMDdlNWFkM2E0ZTcwYWUxZWIyNTBjNTk0OThlNWZiMzYxYTAzMTIuLjVlZjI1YTUxYTMw
ZDk0YTQ1NTczZWMwZWRhZGUzOTUyMmViMTFiMTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL2xydV9jYWNoZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9scnVfY2FjaGUucHkKQEAgLTM2LDczICszNiw4MCBAQCBjbGFzcyBMUlVDYWNoZSgp
OgogICAgICIiIkFuIGltcGxlbWVudGF0aW9uIG9mIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkg
QWxnb3JpdGhtLgogCiAgICAgQXJnczoKLSAgICAgICAgc2l6ZTogYSBjYWNoZSBtZW1vcnkgc2l6
ZQorICAgICAgICBjYXBhY2l0eTogYSBjYWNoZSBtZW1vcnkgY2FwYWNpdHkKICAgICAiIiIKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgc2l6ZSk6Ci0gICAgICAgIGFzc2VydCBzaXplID4gMCwgIllv
dSBzaG91bGQgc2V0IHRoZSBMUlVDYWNoZSBzaXplIHRvIG5vdCBsZXNzIHRoYW4gemVyby4iCi0g
ICAgICAgIHNlbGYuZmlyc3QgPSBOb25lCi0gICAgICAgIHNlbGYubGFzdCA9IE5vbmUKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgY2FwYWNpdHkpOgorICAgICAgICBhc3NlcnQgY2FwYWNpdHkgPiAw
LCAiY2FwYWNpdHkgKCVzKSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIgJSBjYXBhY2l0eQor
ICAgICAgICBzZWxmLl9maXJzdCA9IE5vbmUKKyAgICAgICAgc2VsZi5fbGFzdCA9IE5vbmUKICAg
ICAgICAgc2VsZi5fZGljdCA9IHt9Ci0gICAgICAgIHNlbGYuX3NpemUgPSBzaXplCisgICAgICAg
IHNlbGYuX2NhcGFjaXR5ID0gY2FwYWNpdHkKIAogICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBr
ZXksIHZhbHVlKToKLSAgICAgICAgaWYgc2VsZi5maXJzdCA9PSBOb25lOgorICAgICAgICBpZiBu
b3Qgc2VsZi5fZmlyc3Q6CiAgICAgICAgICAgICBzZWxmLl9vbmVfbm9kZShrZXksIHZhbHVlKQog
ICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIGxlbihzZWxmLl9kaWN0KSA+PSBzZWxmLl9z
aXplOgotICAgICAgICAgICAgZGVsIHNlbGYuX2RpY3Rbc2VsZi5sYXN0LmtleV0KLSAgICAgICAg
ICAgIGlmIHNlbGYuX3NpemUgPT0gMToKKyAgICAgICAgaWYgbGVuKHNlbGYuX2RpY3QpID49IHNl
bGYuX2NhcGFjaXR5OgorICAgICAgICAgICAgZGVsIHNlbGYuX2RpY3Rbc2VsZi5fbGFzdC5rZXld
CisgICAgICAgICAgICBpZiBzZWxmLl9jYXBhY2l0eSA9PSAxOgogICAgICAgICAgICAgICAgIHNl
bGYuX29uZV9ub2RlKGtleSwgdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAg
ICAgICBzZWxmLmxhc3QgPSBzZWxmLmxhc3QubmV4dAotICAgICAgICAgICAgc2VsZi5sYXN0LnBy
ZXYgPSBOb25lCi0gICAgICAgIG5vZGUgPSBOb2RlKGtleSwgdmFsdWUsIHNlbGYuZmlyc3QpCi0g
ICAgICAgIHNlbGYuZmlyc3QubmV4dCA9IG5vZGUKLSAgICAgICAgc2VsZi5maXJzdCA9IG5vZGUK
KyAgICAgICAgICAgIHNlbGYuX2xhc3QgPSBzZWxmLl9sYXN0Lm5leHQKKyAgICAgICAgICAgIHNl
bGYuX2xhc3QucHJldiA9IE5vbmUKKyAgICAgICAgbm9kZSA9IE5vZGUoa2V5LCB2YWx1ZSwgc2Vs
Zi5fZmlyc3QpCisgICAgICAgIHNlbGYuX2ZpcnN0Lm5leHQgPSBub2RlCisgICAgICAgIHNlbGYu
X2ZpcnN0ID0gbm9kZQogICAgICAgICBzZWxmLl9kaWN0W2tleV0gPSBub2RlCiAKICAgICBkZWYg
X29uZV9ub2RlKHNlbGYsIGtleSwgdmFsdWUpOgotICAgICAgICBub2RlID0gTm9kZShrZXksIHZh
bHVlLCBzZWxmLmZpcnN0KQorICAgICAgICBub2RlID0gTm9kZShrZXksIHZhbHVlLCBzZWxmLl9m
aXJzdCkKICAgICAgICAgc2VsZi5fZGljdFtrZXldID0gbm9kZQotICAgICAgICBzZWxmLmZpcnN0
ID0gbm9kZQotICAgICAgICBzZWxmLmxhc3QgPSBub2RlCisgICAgICAgIHNlbGYuX2ZpcnN0ID0g
bm9kZQorICAgICAgICBzZWxmLl9sYXN0ID0gbm9kZQogCiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNl
bGYsIGtleSk6Ci0gICAgICAgIGlmIHNlbGYuZmlyc3Qua2V5ID09IGtleToKLSAgICAgICAgICAg
IHJldHVybiBzZWxmLmZpcnN0LnZhbHVlCi0KLSAgICAgICAgaWYgc2VsZi5sYXN0LmtleSA9PSBr
ZXk6Ci0gICAgICAgICAgICBuZXh0X2xhc3QgPSBzZWxmLmxhc3QubmV4dAotICAgICAgICAgICAg
bmV4dF9sYXN0LnByZXYgPSBOb25lCi0gICAgICAgICAgICBuZXh0X2ZpcnN0ID0gc2VsZi5sYXN0
Ci0gICAgICAgICAgICBuZXh0X2ZpcnN0LnByZXYgPSBzZWxmLmZpcnN0Ci0gICAgICAgICAgICBu
ZXh0X2ZpcnN0Lm5leHQgPSBOb25lCi0gICAgICAgICAgICBzZWxmLmZpcnN0Lm5leHQgPSBuZXh0
X2ZpcnN0Ci0gICAgICAgICAgICBzZWxmLmZpcnN0ID0gbmV4dF9maXJzdAotICAgICAgICAgICAg
c2VsZi5sYXN0ID0gbmV4dF9sYXN0Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5maXJzdC52YWx1
ZQorICAgICAgICBpZiBub3Qgc2VsZi5fZmlyc3Q6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJv
cihzdHIoa2V5KSkKKyAgICAgICAgaWYgc2VsZi5fZmlyc3Qua2V5ID09IGtleToKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLl9maXJzdC52YWx1ZQorCisgICAgICAgIGlmIHNlbGYuX2xhc3Qua2V5
ID09IGtleToKKyAgICAgICAgICAgIG5leHRfX2xhc3QgPSBzZWxmLl9sYXN0Lm5leHQKKyAgICAg
ICAgICAgIG5leHRfX2xhc3QucHJldiA9IE5vbmUKKyAgICAgICAgICAgIG5leHRfX2ZpcnN0ID0g
c2VsZi5fbGFzdAorICAgICAgICAgICAgbmV4dF9fZmlyc3QucHJldiA9IHNlbGYuX2ZpcnN0Cisg
ICAgICAgICAgICBuZXh0X19maXJzdC5uZXh0ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fZmly
c3QubmV4dCA9IG5leHRfX2ZpcnN0CisgICAgICAgICAgICBzZWxmLl9maXJzdCA9IG5leHRfX2Zp
cnN0CisgICAgICAgICAgICBzZWxmLl9sYXN0ID0gbmV4dF9fbGFzdAorICAgICAgICAgICAgcmV0
dXJuIHNlbGYuX2ZpcnN0LnZhbHVlCiAKICAgICAgICAgbm9kZSA9IHNlbGYuX2RpY3Rba2V5XQog
ICAgICAgICBrZXlfbmV4dCA9IHNlbGYuX2RpY3Rba2V5XS5uZXh0CiAgICAgICAgIGtleV9wcmV2
ID0gc2VsZi5fZGljdFtrZXldLnByZXYKICAgICAgICAga2V5X25leHQucHJldiA9IG5vZGUucHJl
dgogICAgICAgICBrZXlfcHJldi5uZXh0ID0gbm9kZS5uZXh0Ci0gICAgICAgIG5vZGUucHJldiA9
IHNlbGYuZmlyc3QKKyAgICAgICAgbm9kZS5wcmV2ID0gc2VsZi5fZmlyc3QKICAgICAgICAgbm9k
ZS5uZXh0ID0gTm9uZQotICAgICAgICBzZWxmLmZpcnN0Lm5leHQgPSBub2RlCi0gICAgICAgIHNl
bGYuZmlyc3QgPSBub2RlCi0gICAgICAgIHJldHVybiBzZWxmLmZpcnN0LnZhbHVlCisgICAgICAg
IHNlbGYuX2ZpcnN0Lm5leHQgPSBub2RlCisgICAgICAgIHNlbGYuX2ZpcnN0ID0gbm9kZQorICAg
ICAgICByZXR1cm4gc2VsZi5fZmlyc3QudmFsdWUKIAogICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxm
LCBrZXkpOgorICAgICAgICBpZiBzZWxmLl9maXJzdCA9PSBzZWxmLl9sYXN0OgorICAgICAgICAg
ICAgc2VsZi5fbGFzdCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2ZpcnN0ID0gTm9uZQorICAg
ICAgICAgICAgZGVsIHNlbGYuX2RpY3Rba2V5XQorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAg
IG5vZGUgPSBzZWxmLl9kaWN0W2tleV0KLSAgICAgICAgaWYgc2VsZi5maXJzdCBpcyBub2RlOgot
ICAgICAgICAgICAgc2VsZi5maXJzdCA9IG5vZGUucHJldgotICAgICAgICAgICAgc2VsZi5maXJz
dC5uZXh0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9maXJzdCBpcyBub2RlOgorICAgICAgICAg
ICAgc2VsZi5fZmlyc3QgPSBub2RlLnByZXYKKyAgICAgICAgICAgIHNlbGYuX2ZpcnN0Lm5leHQg
PSBOb25lCiAgICAgICAgICAgICBkZWwgc2VsZi5fZGljdFtrZXldCiAgICAgICAgICAgICByZXR1
cm4KLSAgICAgICAgaWYgc2VsZi5sYXN0IGlzIG5vZGU6Ci0gICAgICAgICAgICBzZWxmLmxhc3Qg
PSBub2RlLm5leHQKLSAgICAgICAgICAgIHNlbGYubGFzdC5wcmV2ID0gTm9uZQorICAgICAgICBp
ZiBzZWxmLl9sYXN0IGlzIG5vZGU6CisgICAgICAgICAgICBzZWxmLl9sYXN0ID0gbm9kZS5uZXh0
CisgICAgICAgICAgICBzZWxmLl9sYXN0LnByZXYgPSBOb25lCiAgICAgICAgICAgICBkZWwgc2Vs
Zi5fZGljdFtrZXldCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAga2V5X25leHQgPSBub2Rl
Lm5leHQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2xydV9jYWNo
ZV91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2xydV9jYWNoZV91
bml0dGVzdC5weQppbmRleCAzMDM1YjZkYzFmZWU4NzE3NTkxNmIyYTc5ZGFmZjc1NzdkOTQyMTAy
Li5hMDY3NThjMTgzZjdjOGZjNjYzY2FhY2Q5YWE2ZDNhNjBkZjA5NGVmIDEwMDY0NAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9scnVfY2FjaGVfdW5pdHRlc3QucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbHJ1X2NhY2hlX3VuaXR0ZXN0LnB5CkBAIC03
MCwxMyArNzAsMTcgQEAgY2xhc3MgTFJVQ2FjaGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICBkZWYgdGVzdF9sZW4oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYu
bHJ1KSwgMykKIAotICAgIGRlZiB0ZXN0X3NpemUxKHNlbGYpOgorICAgIGRlZiB0ZXN0X3NpemVf
b25lX3BvcChzZWxmKToKICAgICAgICAgc2VsZi5scnUyWydrZXlfMiddID0gJ2l0ZW1fMicKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxydTIua2V5cygpLCBbJ2tleV8yJ10pCi0gICAg
ICAgIGRlbCBzZWxmLmxydTJbJ2tleV8yJ10KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgna2V5
XzInIGluIHNlbGYubHJ1MikKIAotICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICBkZWYgdGVz
dF9zaXplX29uZV9kZWxldGUoc2VsZik6CisgICAgICAgIGRlbCBzZWxmLmxydTJbJ2tleV8xJ10K
KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgna2V5XzEnIGluIHNlbGYubHJ1MikKKworICAgIGRl
ZiB0ZXN0X3BvcF9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJy
b3IsIHNlbGYubHJ1Mi5fX2dldGl0ZW1fXywgJ2tleV8yJykKKyAgICAgICAgZGVsIHNlbGYubHJ1
Mlsna2V5XzEnXQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5scnUy
Ll9fZ2V0aXRlbV9fLCAna2V5XzInKQogCiAgICAgZGVmIHRlc3RfZ2V0X21pZGRsZV9pdGVtKHNl
bGYpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107582</attachid>
            <date>2011-09-15 18:50:14 -0700</date>
            <delta_ts>2011-09-15 22:26:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67823-20110916105013.patch</filename>
            <type>text/plain</type>
            <size>9497</size>
            <attacher name="Ai Makabi">makabi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQxODIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxYjliYzJlYmMxMTg4ZDJjZTViZjhkMjUyNmZmMmFhOGZm
MmNjOGZjLi45NTkwM2ZmMjczNzAxMWMwMTgwMTNkM2E4ZDY5MGI4ODdmZjE4ODVmIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDktMTUgIEFpIE1ha2FiaSAgPG1ha2FiaUBnb29nbGUuY29tPgorCisgICAgICAg
IFByb3ZpZGVzIGEgc2ltcGxlIExSVSBjYWNoZSBjbGFzcyBpbiBQeXRob24uCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODIzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9scnVfY2FjaGUucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bHJ1X2NhY2hlX3VuaXR0ZXN0LnB5OgorCiAyMDExLTA4LTMxICBBaSBNYWthYmkgIDxtYWthYmlA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBFeHRyYWN0IHJlZmVyZW5jZSBsaW5rcyBmcm9tIHJlZnRl
c3QgdGVzdCBmaWxlLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bHJ1X2NhY2hlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbHJ1X2NhY2hlLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVlZjI1YTUxYTMwZDk0YTQ1NTczZWMwZWRhZGUzOTUyMmViMTFiMTEKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9scnVfY2FjaGUu
cHkKQEAgLTAsMCArMSwxMzcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2NsYXNzIE5vZGUoKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwga2V5LCB2YWx1ZSwgcHJldiwgbmV4dD1Ob25lKToKKyAgICAg
ICAgc2VsZi5rZXkgPSBrZXkKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgIHNl
bGYucHJldiA9IHByZXYKKyAgICAgICAgc2VsZi5uZXh0ID0gbmV4dAorCisKK2NsYXNzIExSVUNh
Y2hlKCk6CisgICAgIiIiQW4gaW1wbGVtZW50YXRpb24gb2YgTGVhc3QgUmVjZW50bHkgVXNlZCAo
TFJVKSBBbGdvcml0aG0uCisKKyAgICBBcmdzOgorICAgICAgICBjYXBhY2l0eTogYSBjYWNoZSBt
ZW1vcnkgY2FwYWNpdHkKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FwYWNpdHkp
OgorICAgICAgICBhc3NlcnQgY2FwYWNpdHkgPiAwLCAiY2FwYWNpdHkgKCVzKSBtdXN0IGJlIGdy
ZWF0ZXIgdGhhbiB6ZXJvLiIgJSBjYXBhY2l0eQorICAgICAgICBzZWxmLl9maXJzdCA9IE5vbmUK
KyAgICAgICAgc2VsZi5fbGFzdCA9IE5vbmUKKyAgICAgICAgc2VsZi5fZGljdCA9IHt9CisgICAg
ICAgIHNlbGYuX2NhcGFjaXR5ID0gY2FwYWNpdHkKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxm
LCBrZXksIHZhbHVlKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpcnN0OgorICAgICAgICAgICAg
c2VsZi5fb25lX25vZGUoa2V5LCB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBp
ZiBsZW4oc2VsZi5fZGljdCkgPj0gc2VsZi5fY2FwYWNpdHk6CisgICAgICAgICAgICBkZWwgc2Vs
Zi5fZGljdFtzZWxmLl9sYXN0LmtleV0KKyAgICAgICAgICAgIGlmIHNlbGYuX2NhcGFjaXR5ID09
IDE6CisgICAgICAgICAgICAgICAgc2VsZi5fb25lX25vZGUoa2V5LCB2YWx1ZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYuX2xhc3QgPSBzZWxmLl9sYXN0Lm5leHQK
KyAgICAgICAgICAgIHNlbGYuX2xhc3QucHJldiA9IE5vbmUKKyAgICAgICAgbm9kZSA9IE5vZGUo
a2V5LCB2YWx1ZSwgc2VsZi5fZmlyc3QpCisgICAgICAgIHNlbGYuX2ZpcnN0Lm5leHQgPSBub2Rl
CisgICAgICAgIHNlbGYuX2ZpcnN0ID0gbm9kZQorICAgICAgICBzZWxmLl9kaWN0W2tleV0gPSBu
b2RlCisKKyAgICBkZWYgX29uZV9ub2RlKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBub2Rl
ID0gTm9kZShrZXksIHZhbHVlLCBzZWxmLl9maXJzdCkKKyAgICAgICAgc2VsZi5fZGljdFtrZXld
ID0gbm9kZQorICAgICAgICBzZWxmLl9maXJzdCA9IG5vZGUKKyAgICAgICAgc2VsZi5fbGFzdCA9
IG5vZGUKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBpZiBub3Qg
c2VsZi5fZmlyc3Q6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihzdHIoa2V5KSkKKyAgICAg
ICAgaWYgc2VsZi5fZmlyc3Qua2V5ID09IGtleToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9m
aXJzdC52YWx1ZQorCisgICAgICAgIGlmIHNlbGYuX2xhc3Qua2V5ID09IGtleToKKyAgICAgICAg
ICAgIG5leHRfX2xhc3QgPSBzZWxmLl9sYXN0Lm5leHQKKyAgICAgICAgICAgIG5leHRfX2xhc3Qu
cHJldiA9IE5vbmUKKyAgICAgICAgICAgIG5leHRfX2ZpcnN0ID0gc2VsZi5fbGFzdAorICAgICAg
ICAgICAgbmV4dF9fZmlyc3QucHJldiA9IHNlbGYuX2ZpcnN0CisgICAgICAgICAgICBuZXh0X19m
aXJzdC5uZXh0ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fZmlyc3QubmV4dCA9IG5leHRfX2Zp
cnN0CisgICAgICAgICAgICBzZWxmLl9maXJzdCA9IG5leHRfX2ZpcnN0CisgICAgICAgICAgICBz
ZWxmLl9sYXN0ID0gbmV4dF9fbGFzdAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpcnN0LnZh
bHVlCisKKyAgICAgICAgbm9kZSA9IHNlbGYuX2RpY3Rba2V5XQorICAgICAgICBrZXlfbmV4dCA9
IHNlbGYuX2RpY3Rba2V5XS5uZXh0CisgICAgICAgIGtleV9wcmV2ID0gc2VsZi5fZGljdFtrZXld
LnByZXYKKyAgICAgICAga2V5X25leHQucHJldiA9IG5vZGUucHJldgorICAgICAgICBrZXlfcHJl
di5uZXh0ID0gbm9kZS5uZXh0CisgICAgICAgIG5vZGUucHJldiA9IHNlbGYuX2ZpcnN0CisgICAg
ICAgIG5vZGUubmV4dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fZmlyc3QubmV4dCA9IG5vZGUKKyAg
ICAgICAgc2VsZi5fZmlyc3QgPSBub2RlCisgICAgICAgIHJldHVybiBzZWxmLl9maXJzdC52YWx1
ZQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGlmIHNlbGYuX2Zp
cnN0ID09IHNlbGYuX2xhc3Q6CisgICAgICAgICAgICBzZWxmLl9sYXN0ID0gTm9uZQorICAgICAg
ICAgICAgc2VsZi5fZmlyc3QgPSBOb25lCisgICAgICAgICAgICBkZWwgc2VsZi5fZGljdFtrZXld
CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbm9kZSA9IHNlbGYuX2RpY3Rba2V5XQorICAg
ICAgICBpZiBzZWxmLl9maXJzdCBpcyBub2RlOgorICAgICAgICAgICAgc2VsZi5fZmlyc3QgPSBu
b2RlLnByZXYKKyAgICAgICAgICAgIHNlbGYuX2ZpcnN0Lm5leHQgPSBOb25lCisgICAgICAgICAg
ICBkZWwgc2VsZi5fZGljdFtrZXldCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2Vs
Zi5fbGFzdCBpcyBub2RlOgorICAgICAgICAgICAgc2VsZi5fbGFzdCA9IG5vZGUubmV4dAorICAg
ICAgICAgICAgc2VsZi5fbGFzdC5wcmV2ID0gTm9uZQorICAgICAgICAgICAgZGVsIHNlbGYuX2Rp
Y3Rba2V5XQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGtleV9uZXh0ID0gbm9kZS5uZXh0
CisgICAgICAgIGtleV9wcmV2ID0gbm9kZS5wcmV2CisgICAgICAgIG5vZGUucHJldiA9IGtleV9w
cmV2CisgICAgICAgIG5vZGUubmV4dCA9IGtleV9uZXh0CisgICAgICAgIGRlbCBzZWxmLl9kaWN0
W2tleV0KKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYu
X2RpY3QpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVy
biBrZXkgaW4gc2VsZi5fZGljdAorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gaXRlcihzZWxmLl9kaWN0KQorCisgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gWyhrZXksIG5vZGUudmFsdWUpIGZvciBrZXksIG5vZGUgaW4gc2VsZi5fZGljdC5pdGVt
cygpXQorCisgICAgZGVmIHZhbHVlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFtub2RlLnZhbHVl
IGZvciBub2RlIGluIHNlbGYuX2RpY3QudmFsdWVzKCldCisKKyAgICBkZWYga2V5cyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2RpY3Qua2V5cygpCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9scnVfY2FjaGVfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9scnVfY2FjaGVfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTA2NzU4
YzE4M2Y3YzhmYzY2M2NhYWNkOWFhNmQzYTYwZGYwOTRlZgotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2xydV9jYWNoZV91bml0dGVzdC5weQpAQCAtMCww
ICsxLDk0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdl
YmtpdHB5LmNvbW1vbiBpbXBvcnQgbHJ1X2NhY2hlCisKKworY2xhc3MgTFJVQ2FjaGVUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5s
cnUgPSBscnVfY2FjaGUuTFJVQ2FjaGUoMykKKyAgICAgICAgc2VsZi5scnVbJ2tleV8xJ10gPSAn
aXRlbV8xJworICAgICAgICBzZWxmLmxydVsna2V5XzInXSA9ICdpdGVtXzInCisgICAgICAgIHNl
bGYubHJ1WydrZXlfMyddID0gJ2l0ZW1fMycKKworICAgICAgICBzZWxmLmxydTIgPSBscnVfY2Fj
aGUuTFJVQ2FjaGUoMSkKKyAgICAgICAgc2VsZi5scnUyWydrZXlfMSddID0gJ2l0ZW1fMScKKwor
ICAgIGRlZiB0ZXN0X2l0ZW1zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChz
ZWxmLmxydS5pdGVtcygpKSwgc2V0KFsoJ2tleV8xJywgJ2l0ZW1fMScpLCAoJ2tleV8zJywgJ2l0
ZW1fMycpLCAoJ2tleV8yJywgJ2l0ZW1fMicpXSkpCisKKyAgICBkZWYgdGVzdF9wdXQoc2VsZik6
CisgICAgICAgIHNlbGYubHJ1WydrZXlfNCddID0gJ2l0ZW1fNCcKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZXQoc2VsZi5scnUuaXRlbXMoKSksIHNldChbKCdrZXlfNCcsICdpdGVtXzQnKSwg
KCdrZXlfMycsICdpdGVtXzMnKSwgKCdrZXlfMicsICdpdGVtXzInKV0pKQorCisgICAgZGVmIHRl
c3RfdXBkYXRlKHNlbGYpOgorICAgICAgICBzZWxmLmxydVsna2V5XzEnXQorICAgICAgICBzZWxm
LmxydVsna2V5XzUnXSA9ICdpdGVtXzUnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNl
bGYubHJ1Lml0ZW1zKCkpLCBzZXQoWygna2V5XzEnLCAnaXRlbV8xJyksICgna2V5XzMnLCAnaXRl
bV8zJyksICgna2V5XzUnLCAnaXRlbV81JyldKSkKKworICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYubHJ1LmtleXMoKSksIHNldChbJ2tl
eV8xJywgJ2tleV8yJywgJ2tleV8zJ10pKQorCisgICAgZGVmIHRlc3RfZGVsZXRlKHNlbGYpOgor
ICAgICAgICBkZWwgc2VsZi5scnVbJ2tleV8xJ10KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgn
a2V5XzEnIGluIHNlbGYubHJ1KQorCisgICAgZGVmIHRlc3RfY29udGFpbihzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKCdrZXlfMScgaW4gc2VsZi5scnUpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RmFsc2UoJ2tleV80JyBpbiBzZWxmLmxydSkKKworICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5scnUudmFsdWVzKCkpLCBzZXQo
WydpdGVtXzEnLCAnaXRlbV8yJywgJ2l0ZW1fMyddKSkKKworICAgIGRlZiB0ZXN0X2xlbihzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5scnUpLCAzKQorCisgICAgZGVm
IHRlc3Rfc2l6ZV9vbmVfcG9wKHNlbGYpOgorICAgICAgICBzZWxmLmxydTJbJ2tleV8yJ10gPSAn
aXRlbV8yJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubHJ1Mi5rZXlzKCksIFsna2V5
XzInXSkKKworICAgIGRlZiB0ZXN0X3NpemVfb25lX2RlbGV0ZShzZWxmKToKKyAgICAgICAgZGVs
IHNlbGYubHJ1Mlsna2V5XzEnXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdrZXlfMScgaW4g
c2VsZi5scnUyKQorCisgICAgZGVmIHRlc3RfcG9wX2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5scnUyLl9fZ2V0aXRlbV9fLCAna2V5XzInKQor
ICAgICAgICBkZWwgc2VsZi5scnUyWydrZXlfMSddCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KEtleUVycm9yLCBzZWxmLmxydTIuX19nZXRpdGVtX18sICdrZXlfMicpCisKKyAgICBkZWYgdGVz
dF9nZXRfbWlkZGxlX2l0ZW0oc2VsZik6CisgICAgICAgIHNlbGYubHJ1WydrZXlfMiddCisgICAg
ICAgIHNlbGYubHJ1WydrZXlfNCddID0gJ2l0ZW1fNCcKKyAgICAgICAgc2VsZi5scnVbJ2tleV81
J10gPSAnaXRlbV81JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLmxydS5rZXlz
KCkpLCBzZXQoWydrZXlfMicsICdrZXlfNCcsICdrZXlfNSddKSkKKworCitpZiBfX25hbWVfXyA9
PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107604</attachid>
            <date>2011-09-15 22:27:00 -0700</date>
            <delta_ts>2011-09-16 00:26:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67823-20110916142659.patch</filename>
            <type>text/plain</type>
            <size>9518</size>
            <attacher name="Ai Makabi">makabi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQxODIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxYjliYzJlYmMxMTg4ZDJjZTViZjhkMjUyNmZmMmFhOGZm
MmNjOGZjLi45NTkwM2ZmMjczNzAxMWMwMTgwMTNkM2E4ZDY5MGI4ODdmZjE4ODVmIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDktMTUgIEFpIE1ha2FiaSAgPG1ha2FiaUBnb29nbGUuY29tPgorCisgICAgICAg
IFByb3ZpZGVzIGEgc2ltcGxlIExSVSBjYWNoZSBjbGFzcyBpbiBQeXRob24uCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODIzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9scnVfY2FjaGUucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bHJ1X2NhY2hlX3VuaXR0ZXN0LnB5OgorCiAyMDExLTA4LTMxICBBaSBNYWthYmkgIDxtYWthYmlA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBFeHRyYWN0IHJlZmVyZW5jZSBsaW5rcyBmcm9tIHJlZnRl
c3QgdGVzdCBmaWxlLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bHJ1X2NhY2hlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbHJ1X2NhY2hlLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFhNjk1YTI3NWI4NzUxNTkzN2JhOTU2Zjk4MjE3YWY2MTY2ZTViYTkKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9scnVfY2FjaGUu
cHkKQEAgLTAsMCArMSwxMzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2NsYXNzIE5vZGUoKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwga2V5LCB2YWx1ZSwgcHJldiwgbmV4dD1Ob25lKToKKyAgICAg
ICAgc2VsZi5rZXkgPSBrZXkKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgIHNl
bGYucHJldiA9IHByZXYKKyAgICAgICAgc2VsZi5uZXh0ID0gbmV4dAorCisKK2NsYXNzIExSVUNh
Y2hlKCk6CisgICAgIiIiQW4gaW1wbGVtZW50YXRpb24gb2YgTGVhc3QgUmVjZW50bHkgVXNlZCAo
TFJVKSBBbGdvcml0aG0uCisKKyAgICBBcmdzOgorICAgICAgICBjYXBhY2l0eTogYSBjYWNoZSBt
ZW1vcnkgY2FwYWNpdHkKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FwYWNpdHkp
OgorICAgICAgICBhc3NlcnQgY2FwYWNpdHkgPiAwLCAiY2FwYWNpdHkgKCVzKSBtdXN0IGJlIGdy
ZWF0ZXIgdGhhbiB6ZXJvLiIgJSBjYXBhY2l0eQorICAgICAgICBzZWxmLl9maXJzdCA9IE5vbmUK
KyAgICAgICAgc2VsZi5fbGFzdCA9IE5vbmUKKyAgICAgICAgc2VsZi5fZGljdCA9IHt9CisgICAg
ICAgIHNlbGYuX2NhcGFjaXR5ID0gY2FwYWNpdHkKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxm
LCBrZXksIHZhbHVlKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpcnN0OgorICAgICAgICAgICAg
c2VsZi5fb25lX25vZGUoa2V5LCB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBp
ZiBsZW4oc2VsZi5fZGljdCkgPj0gc2VsZi5fY2FwYWNpdHk6CisgICAgICAgICAgICBkZWwgc2Vs
Zi5fZGljdFtzZWxmLl9sYXN0LmtleV0KKyAgICAgICAgICAgIGlmIHNlbGYuX2NhcGFjaXR5ID09
IDE6CisgICAgICAgICAgICAgICAgc2VsZi5fb25lX25vZGUoa2V5LCB2YWx1ZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYuX2xhc3QgPSBzZWxmLl9sYXN0Lm5leHQK
KyAgICAgICAgICAgIHNlbGYuX2xhc3QucHJldiA9IE5vbmUKKyAgICAgICAgbm9kZSA9IE5vZGUo
a2V5LCB2YWx1ZSwgc2VsZi5fZmlyc3QpCisgICAgICAgIGlmIGtleSBpbiBzZWxmLl9kaWN0Ogor
ICAgICAgICAgICAgc2VsZi5fX2RlbGl0ZW1fXyhrZXkpCisgICAgICAgIHNlbGYuX2ZpcnN0Lm5l
eHQgPSBub2RlCisgICAgICAgIHNlbGYuX2ZpcnN0ID0gbm9kZQorICAgICAgICBzZWxmLl9kaWN0
W2tleV0gPSBub2RlCisKKyAgICBkZWYgX29uZV9ub2RlKHNlbGYsIGtleSwgdmFsdWUpOgorICAg
ICAgICBub2RlID0gTm9kZShrZXksIHZhbHVlLCBzZWxmLl9maXJzdCkKKyAgICAgICAgc2VsZi5f
ZGljdFtrZXldID0gbm9kZQorICAgICAgICBzZWxmLl9maXJzdCA9IG5vZGUKKyAgICAgICAgc2Vs
Zi5fbGFzdCA9IG5vZGUKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAg
ICBpZiBub3Qgc2VsZi5fZmlyc3Q6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihzdHIoa2V5
KSkKKyAgICAgICAgaWYgc2VsZi5fZmlyc3Qua2V5ID09IGtleToKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLl9maXJzdC52YWx1ZQorCisgICAgICAgIGlmIHNlbGYuX2xhc3Qua2V5ID09IGtleToK
KyAgICAgICAgICAgIG5leHRfbGFzdCA9IHNlbGYuX2xhc3QubmV4dAorICAgICAgICAgICAgbmV4
dF9sYXN0LnByZXYgPSBOb25lCisgICAgICAgICAgICBuZXh0X2ZpcnN0ID0gc2VsZi5fbGFzdAor
ICAgICAgICAgICAgbmV4dF9maXJzdC5wcmV2ID0gc2VsZi5fZmlyc3QKKyAgICAgICAgICAgIG5l
eHRfZmlyc3QubmV4dCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2ZpcnN0Lm5leHQgPSBuZXh0
X2ZpcnN0CisgICAgICAgICAgICBzZWxmLl9maXJzdCA9IG5leHRfZmlyc3QKKyAgICAgICAgICAg
IHNlbGYuX2xhc3QgPSBuZXh0X2xhc3QKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9maXJzdC52
YWx1ZQorCisgICAgICAgIG5vZGUgPSBzZWxmLl9kaWN0W2tleV0KKyAgICAgICAgbm9kZS5uZXh0
LnByZXYgPSBub2RlLnByZXYKKyAgICAgICAgbm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQKKyAg
ICAgICAgbm9kZS5wcmV2ID0gc2VsZi5fZmlyc3QKKyAgICAgICAgbm9kZS5uZXh0ID0gTm9uZQor
ICAgICAgICBzZWxmLl9maXJzdC5uZXh0ID0gbm9kZQorICAgICAgICBzZWxmLl9maXJzdCA9IG5v
ZGUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpcnN0LnZhbHVlCisKKyAgICBkZWYgX19kZWxpdGVt
X18oc2VsZiwga2V5KToKKyAgICAgICAgbm9kZSA9IHNlbGYuX2RpY3Rba2V5XQorICAgICAgICBk
ZWwgc2VsZi5fZGljdFtrZXldCisgICAgICAgIGlmIHNlbGYuX2ZpcnN0IGlzIHNlbGYuX2xhc3Q6
CisgICAgICAgICAgICBzZWxmLl9sYXN0ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fZmlyc3Qg
PSBOb25lCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5fZmlyc3QgaXMgbm9k
ZToKKyAgICAgICAgICAgIHNlbGYuX2ZpcnN0ID0gbm9kZS5wcmV2CisgICAgICAgICAgICBzZWxm
Ll9maXJzdC5uZXh0ID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYu
X2xhc3QgaXMgbm9kZToKKyAgICAgICAgICAgIHNlbGYuX2xhc3QgPSBub2RlLm5leHQKKyAgICAg
ICAgICAgIHNlbGYuX2xhc3QucHJldiA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybgorICAgICAg
ICBub2RlLm5leHQucHJldiA9IG5vZGUucHJldgorICAgICAgICBub2RlLnByZXYubmV4dCA9IG5v
ZGUubmV4dAorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2Vs
Zi5fZGljdCkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0
dXJuIGtleSBpbiBzZWxmLl9kaWN0CisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAg
IHJldHVybiBpdGVyKHNlbGYuX2RpY3QpCisKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAg
IHJldHVybiBbKGtleSwgbm9kZS52YWx1ZSkgZm9yIGtleSwgbm9kZSBpbiBzZWxmLl9kaWN0Lml0
ZW1zKCldCisKKyAgICBkZWYgdmFsdWVzKHNlbGYpOgorICAgICAgICByZXR1cm4gW25vZGUudmFs
dWUgZm9yIG5vZGUgaW4gc2VsZi5fZGljdC52YWx1ZXMoKV0KKworICAgIGRlZiBrZXlzKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fZGljdC5rZXlzKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2xydV9jYWNoZV91bml0dGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2xydV9jYWNoZV91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NGEw
OWU2NjFiYWM3NTY4YTQ1ZDRjNzNjMjlhZjYwZGU0ZjFjZmE5Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbHJ1X2NhY2hlX3VuaXR0ZXN0LnB5CkBAIC0w
LDAgKzEsOTggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20g
d2Via2l0cHkuY29tbW9uIGltcG9ydCBscnVfY2FjaGUKKworCitjbGFzcyBMUlVDYWNoZVRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxm
LmxydSA9IGxydV9jYWNoZS5MUlVDYWNoZSgzKQorICAgICAgICBzZWxmLmxydVsna2V5XzEnXSA9
ICdpdGVtXzEnCisgICAgICAgIHNlbGYubHJ1WydrZXlfMiddID0gJ2l0ZW1fMicKKyAgICAgICAg
c2VsZi5scnVbJ2tleV8zJ10gPSAnaXRlbV8zJworCisgICAgICAgIHNlbGYubHJ1MiA9IGxydV9j
YWNoZS5MUlVDYWNoZSgxKQorICAgICAgICBzZWxmLmxydTJbJ2tleV8xJ10gPSAnaXRlbV8xJwor
CisgICAgZGVmIHRlc3RfaXRlbXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0
KHNlbGYubHJ1Lml0ZW1zKCkpLCBzZXQoWygna2V5XzEnLCAnaXRlbV8xJyksICgna2V5XzMnLCAn
aXRlbV8zJyksICgna2V5XzInLCAnaXRlbV8yJyldKSkKKworICAgIGRlZiB0ZXN0X3B1dChzZWxm
KToKKyAgICAgICAgc2VsZi5scnVbJ2tleV80J10gPSAnaXRlbV80JworICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNldChzZWxmLmxydS5pdGVtcygpKSwgc2V0KFsoJ2tleV80JywgJ2l0ZW1fNCcp
LCAoJ2tleV8zJywgJ2l0ZW1fMycpLCAoJ2tleV8yJywgJ2l0ZW1fMicpXSkpCisKKyAgICBkZWYg
dGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgIHNlbGYubHJ1WydrZXlfMSddCisgICAgICAgIHNl
bGYubHJ1WydrZXlfNSddID0gJ2l0ZW1fNScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQo
c2VsZi5scnUuaXRlbXMoKSksIHNldChbKCdrZXlfMScsICdpdGVtXzEnKSwgKCdrZXlfMycsICdp
dGVtXzMnKSwgKCdrZXlfNScsICdpdGVtXzUnKV0pKQorCisgICAgZGVmIHRlc3Rfa2V5cyhzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5scnUua2V5cygpKSwgc2V0KFsn
a2V5XzEnLCAna2V5XzInLCAna2V5XzMnXSkpCisKKyAgICBkZWYgdGVzdF9kZWxldGUoc2VsZik6
CisgICAgICAgIGRlbCBzZWxmLmxydVsna2V5XzEnXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KCdrZXlfMScgaW4gc2VsZi5scnUpCisKKyAgICBkZWYgdGVzdF9jb250YWluKHNlbGYpOgorICAg
ICAgICBzZWxmLmFzc2VydFRydWUoJ2tleV8xJyBpbiBzZWxmLmxydSkKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZSgna2V5XzQnIGluIHNlbGYubHJ1KQorCisgICAgZGVmIHRlc3RfdmFsdWVzKHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLmxydS52YWx1ZXMoKSksIHNl
dChbJ2l0ZW1fMScsICdpdGVtXzInLCAnaXRlbV8zJ10pKQorCisgICAgZGVmIHRlc3RfbGVuKHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmxydSksIDMpCisKKyAgICBk
ZWYgdGVzdF9zaXplX29uZV9wb3Aoc2VsZik6CisgICAgICAgIHNlbGYubHJ1Mlsna2V5XzInXSA9
ICdpdGVtXzInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5scnUyLmtleXMoKSwgWydr
ZXlfMiddKQorCisgICAgZGVmIHRlc3Rfc2l6ZV9vbmVfZGVsZXRlKHNlbGYpOgorICAgICAgICBk
ZWwgc2VsZi5scnUyWydrZXlfMSddCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ2tleV8xJyBp
biBzZWxmLmxydTIpCisKKyAgICBkZWYgdGVzdF9wb3BfZXJyb3Ioc2VsZik6CisgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLmxydTIuX19nZXRpdGVtX18sICdrZXlfMicp
CisgICAgICAgIGRlbCBzZWxmLmxydTJbJ2tleV8xJ10KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoS2V5RXJyb3IsIHNlbGYubHJ1Mi5fX2dldGl0ZW1fXywgJ2tleV8yJykKKworICAgIGRlZiB0
ZXN0X2dldF9taWRkbGVfaXRlbShzZWxmKToKKyAgICAgICAgc2VsZi5scnVbJ2tleV8yJ10KKyAg
ICAgICAgc2VsZi5scnVbJ2tleV80J10gPSAnaXRlbV80JworICAgICAgICBzZWxmLmxydVsna2V5
XzUnXSA9ICdpdGVtXzUnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYubHJ1Lmtl
eXMoKSksIHNldChbJ2tleV8yJywgJ2tleV80JywgJ2tleV81J10pKQorCisgICAgZGVmIHRlc3Rf
c2V0X2FnYWluKHNlbGYpOgorICAgICAgICBzZWxmLmxydVsna2V5XzEnXSA9ICdpdGVtXzQnCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYubHJ1Lml0ZW1zKCkpLCBzZXQoWygna2V5
XzEnLCAnaXRlbV80JyksICgna2V5XzMnLCAnaXRlbV8zJyksICgna2V5XzInLCAnaXRlbV8yJyld
KSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107615</attachid>
            <date>2011-09-16 00:26:54 -0700</date>
            <delta_ts>2011-09-21 22:38:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67823-20110916162653.patch</filename>
            <type>text/plain</type>
            <size>9518</size>
            <attacher name="Ai Makabi">makabi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQxODIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxYjliYzJlYmMxMTg4ZDJjZTViZjhkMjUyNmZmMmFhOGZm
MmNjOGZjLi45NTkwM2ZmMjczNzAxMWMwMTgwMTNkM2E4ZDY5MGI4ODdmZjE4ODVmIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDktMTUgIEFpIE1ha2FiaSAgPG1ha2FiaUBnb29nbGUuY29tPgorCisgICAgICAg
IFByb3ZpZGVzIGEgc2ltcGxlIExSVSBjYWNoZSBjbGFzcyBpbiBQeXRob24uCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODIzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9scnVfY2FjaGUucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bHJ1X2NhY2hlX3VuaXR0ZXN0LnB5OgorCiAyMDExLTA4LTMxICBBaSBNYWthYmkgIDxtYWthYmlA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBFeHRyYWN0IHJlZmVyZW5jZSBsaW5rcyBmcm9tIHJlZnRl
c3QgdGVzdCBmaWxlLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bHJ1X2NhY2hlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbHJ1X2NhY2hlLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmI1MjkzMTA5YTNiNDM1MzIxNmIzNzcyMGY1N2RmMWQxZmY5NmE0NjYKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9scnVfY2FjaGUu
cHkKQEAgLTAsMCArMSwxMzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2NsYXNzIE5vZGUoKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwga2V5LCB2YWx1ZSwgcHJldiwgbmV4dD1Ob25lKToKKyAgICAg
ICAgc2VsZi5rZXkgPSBrZXkKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgIHNl
bGYucHJldiA9IHByZXYKKyAgICAgICAgc2VsZi5uZXh0ID0gbmV4dAorCisKK2NsYXNzIExSVUNh
Y2hlKCk6CisgICAgIiIiQW4gaW1wbGVtZW50YXRpb24gb2YgTGVhc3QgUmVjZW50bHkgVXNlZCAo
TFJVKSBBbGdvcml0aG0uCisKKyAgICBBcmdzOgorICAgICAgICBjYXBhY2l0eTogYSBjYWNoZSBt
ZW1vcnkgY2FwYWNpdHkKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FwYWNpdHkp
OgorICAgICAgICBhc3NlcnQgY2FwYWNpdHkgPiAwLCAiY2FwYWNpdHkgKCVzKSBtdXN0IGJlIGdy
ZWF0ZXIgdGhhbiB6ZXJvLiIgJSBjYXBhY2l0eQorICAgICAgICBzZWxmLl9maXJzdCA9IE5vbmUK
KyAgICAgICAgc2VsZi5fbGFzdCA9IE5vbmUKKyAgICAgICAgc2VsZi5fZGljdCA9IHt9CisgICAg
ICAgIHNlbGYuX2NhcGFjaXR5ID0gY2FwYWNpdHkKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxm
LCBrZXksIHZhbHVlKToKKyAgICAgICAgaWYga2V5IGluIHNlbGYuX2RpY3Q6CisgICAgICAgICAg
ICBzZWxmLl9fZGVsaXRlbV9fKGtleSkKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpcnN0OgorICAg
ICAgICAgICAgc2VsZi5fb25lX25vZGUoa2V5LCB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybgor
ICAgICAgICBpZiBsZW4oc2VsZi5fZGljdCkgPj0gc2VsZi5fY2FwYWNpdHk6CisgICAgICAgICAg
ICBkZWwgc2VsZi5fZGljdFtzZWxmLl9sYXN0LmtleV0KKyAgICAgICAgICAgIGlmIHNlbGYuX2Nh
cGFjaXR5ID09IDE6CisgICAgICAgICAgICAgICAgc2VsZi5fb25lX25vZGUoa2V5LCB2YWx1ZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYuX2xhc3QgPSBzZWxmLl9s
YXN0Lm5leHQKKyAgICAgICAgICAgIHNlbGYuX2xhc3QucHJldiA9IE5vbmUKKyAgICAgICAgbm9k
ZSA9IE5vZGUoa2V5LCB2YWx1ZSwgc2VsZi5fZmlyc3QpCisgICAgICAgIHNlbGYuX2ZpcnN0Lm5l
eHQgPSBub2RlCisgICAgICAgIHNlbGYuX2ZpcnN0ID0gbm9kZQorICAgICAgICBzZWxmLl9kaWN0
W2tleV0gPSBub2RlCisKKyAgICBkZWYgX29uZV9ub2RlKHNlbGYsIGtleSwgdmFsdWUpOgorICAg
ICAgICBub2RlID0gTm9kZShrZXksIHZhbHVlLCBzZWxmLl9maXJzdCkKKyAgICAgICAgc2VsZi5f
ZGljdFtrZXldID0gbm9kZQorICAgICAgICBzZWxmLl9maXJzdCA9IG5vZGUKKyAgICAgICAgc2Vs
Zi5fbGFzdCA9IG5vZGUKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAg
ICBpZiBub3Qgc2VsZi5fZmlyc3Q6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihzdHIoa2V5
KSkKKyAgICAgICAgaWYgc2VsZi5fZmlyc3Qua2V5ID09IGtleToKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLl9maXJzdC52YWx1ZQorCisgICAgICAgIGlmIHNlbGYuX2xhc3Qua2V5ID09IGtleToK
KyAgICAgICAgICAgIG5leHRfbGFzdCA9IHNlbGYuX2xhc3QubmV4dAorICAgICAgICAgICAgbmV4
dF9sYXN0LnByZXYgPSBOb25lCisgICAgICAgICAgICBuZXh0X2ZpcnN0ID0gc2VsZi5fbGFzdAor
ICAgICAgICAgICAgbmV4dF9maXJzdC5wcmV2ID0gc2VsZi5fZmlyc3QKKyAgICAgICAgICAgIG5l
eHRfZmlyc3QubmV4dCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2ZpcnN0Lm5leHQgPSBuZXh0
X2ZpcnN0CisgICAgICAgICAgICBzZWxmLl9maXJzdCA9IG5leHRfZmlyc3QKKyAgICAgICAgICAg
IHNlbGYuX2xhc3QgPSBuZXh0X2xhc3QKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9maXJzdC52
YWx1ZQorCisgICAgICAgIG5vZGUgPSBzZWxmLl9kaWN0W2tleV0KKyAgICAgICAgbm9kZS5uZXh0
LnByZXYgPSBub2RlLnByZXYKKyAgICAgICAgbm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQKKyAg
ICAgICAgbm9kZS5wcmV2ID0gc2VsZi5fZmlyc3QKKyAgICAgICAgbm9kZS5uZXh0ID0gTm9uZQor
ICAgICAgICBzZWxmLl9maXJzdC5uZXh0ID0gbm9kZQorICAgICAgICBzZWxmLl9maXJzdCA9IG5v
ZGUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpcnN0LnZhbHVlCisKKyAgICBkZWYgX19kZWxpdGVt
X18oc2VsZiwga2V5KToKKyAgICAgICAgbm9kZSA9IHNlbGYuX2RpY3Rba2V5XQorICAgICAgICBk
ZWwgc2VsZi5fZGljdFtrZXldCisgICAgICAgIGlmIHNlbGYuX2ZpcnN0IGlzIHNlbGYuX2xhc3Q6
CisgICAgICAgICAgICBzZWxmLl9sYXN0ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fZmlyc3Qg
PSBOb25lCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5fZmlyc3QgaXMgbm9k
ZToKKyAgICAgICAgICAgIHNlbGYuX2ZpcnN0ID0gbm9kZS5wcmV2CisgICAgICAgICAgICBzZWxm
Ll9maXJzdC5uZXh0ID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYu
X2xhc3QgaXMgbm9kZToKKyAgICAgICAgICAgIHNlbGYuX2xhc3QgPSBub2RlLm5leHQKKyAgICAg
ICAgICAgIHNlbGYuX2xhc3QucHJldiA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybgorICAgICAg
ICBub2RlLm5leHQucHJldiA9IG5vZGUucHJldgorICAgICAgICBub2RlLnByZXYubmV4dCA9IG5v
ZGUubmV4dAorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2Vs
Zi5fZGljdCkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0
dXJuIGtleSBpbiBzZWxmLl9kaWN0CisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAg
IHJldHVybiBpdGVyKHNlbGYuX2RpY3QpCisKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAg
IHJldHVybiBbKGtleSwgbm9kZS52YWx1ZSkgZm9yIGtleSwgbm9kZSBpbiBzZWxmLl9kaWN0Lml0
ZW1zKCldCisKKyAgICBkZWYgdmFsdWVzKHNlbGYpOgorICAgICAgICByZXR1cm4gW25vZGUudmFs
dWUgZm9yIG5vZGUgaW4gc2VsZi5fZGljdC52YWx1ZXMoKV0KKworICAgIGRlZiBrZXlzKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fZGljdC5rZXlzKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2xydV9jYWNoZV91bml0dGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2xydV9jYWNoZV91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NGEw
OWU2NjFiYWM3NTY4YTQ1ZDRjNzNjMjlhZjYwZGU0ZjFjZmE5Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbHJ1X2NhY2hlX3VuaXR0ZXN0LnB5CkBAIC0w
LDAgKzEsOTggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20g
d2Via2l0cHkuY29tbW9uIGltcG9ydCBscnVfY2FjaGUKKworCitjbGFzcyBMUlVDYWNoZVRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxm
LmxydSA9IGxydV9jYWNoZS5MUlVDYWNoZSgzKQorICAgICAgICBzZWxmLmxydVsna2V5XzEnXSA9
ICdpdGVtXzEnCisgICAgICAgIHNlbGYubHJ1WydrZXlfMiddID0gJ2l0ZW1fMicKKyAgICAgICAg
c2VsZi5scnVbJ2tleV8zJ10gPSAnaXRlbV8zJworCisgICAgICAgIHNlbGYubHJ1MiA9IGxydV9j
YWNoZS5MUlVDYWNoZSgxKQorICAgICAgICBzZWxmLmxydTJbJ2tleV8xJ10gPSAnaXRlbV8xJwor
CisgICAgZGVmIHRlc3RfaXRlbXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0
KHNlbGYubHJ1Lml0ZW1zKCkpLCBzZXQoWygna2V5XzEnLCAnaXRlbV8xJyksICgna2V5XzMnLCAn
aXRlbV8zJyksICgna2V5XzInLCAnaXRlbV8yJyldKSkKKworICAgIGRlZiB0ZXN0X3B1dChzZWxm
KToKKyAgICAgICAgc2VsZi5scnVbJ2tleV80J10gPSAnaXRlbV80JworICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNldChzZWxmLmxydS5pdGVtcygpKSwgc2V0KFsoJ2tleV80JywgJ2l0ZW1fNCcp
LCAoJ2tleV8zJywgJ2l0ZW1fMycpLCAoJ2tleV8yJywgJ2l0ZW1fMicpXSkpCisKKyAgICBkZWYg
dGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgIHNlbGYubHJ1WydrZXlfMSddCisgICAgICAgIHNl
bGYubHJ1WydrZXlfNSddID0gJ2l0ZW1fNScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQo
c2VsZi5scnUuaXRlbXMoKSksIHNldChbKCdrZXlfMScsICdpdGVtXzEnKSwgKCdrZXlfMycsICdp
dGVtXzMnKSwgKCdrZXlfNScsICdpdGVtXzUnKV0pKQorCisgICAgZGVmIHRlc3Rfa2V5cyhzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5scnUua2V5cygpKSwgc2V0KFsn
a2V5XzEnLCAna2V5XzInLCAna2V5XzMnXSkpCisKKyAgICBkZWYgdGVzdF9kZWxldGUoc2VsZik6
CisgICAgICAgIGRlbCBzZWxmLmxydVsna2V5XzEnXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KCdrZXlfMScgaW4gc2VsZi5scnUpCisKKyAgICBkZWYgdGVzdF9jb250YWluKHNlbGYpOgorICAg
ICAgICBzZWxmLmFzc2VydFRydWUoJ2tleV8xJyBpbiBzZWxmLmxydSkKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZSgna2V5XzQnIGluIHNlbGYubHJ1KQorCisgICAgZGVmIHRlc3RfdmFsdWVzKHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLmxydS52YWx1ZXMoKSksIHNl
dChbJ2l0ZW1fMScsICdpdGVtXzInLCAnaXRlbV8zJ10pKQorCisgICAgZGVmIHRlc3RfbGVuKHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmxydSksIDMpCisKKyAgICBk
ZWYgdGVzdF9zaXplX29uZV9wb3Aoc2VsZik6CisgICAgICAgIHNlbGYubHJ1Mlsna2V5XzInXSA9
ICdpdGVtXzInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5scnUyLmtleXMoKSwgWydr
ZXlfMiddKQorCisgICAgZGVmIHRlc3Rfc2l6ZV9vbmVfZGVsZXRlKHNlbGYpOgorICAgICAgICBk
ZWwgc2VsZi5scnUyWydrZXlfMSddCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ2tleV8xJyBp
biBzZWxmLmxydTIpCisKKyAgICBkZWYgdGVzdF9wb3BfZXJyb3Ioc2VsZik6CisgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLmxydTIuX19nZXRpdGVtX18sICdrZXlfMicp
CisgICAgICAgIGRlbCBzZWxmLmxydTJbJ2tleV8xJ10KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoS2V5RXJyb3IsIHNlbGYubHJ1Mi5fX2dldGl0ZW1fXywgJ2tleV8yJykKKworICAgIGRlZiB0
ZXN0X2dldF9taWRkbGVfaXRlbShzZWxmKToKKyAgICAgICAgc2VsZi5scnVbJ2tleV8yJ10KKyAg
ICAgICAgc2VsZi5scnVbJ2tleV80J10gPSAnaXRlbV80JworICAgICAgICBzZWxmLmxydVsna2V5
XzUnXSA9ICdpdGVtXzUnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYubHJ1Lmtl
eXMoKSksIHNldChbJ2tleV8yJywgJ2tleV80JywgJ2tleV81J10pKQorCisgICAgZGVmIHRlc3Rf
c2V0X2FnYWluKHNlbGYpOgorICAgICAgICBzZWxmLmxydVsna2V5XzEnXSA9ICdpdGVtXzQnCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYubHJ1Lml0ZW1zKCkpLCBzZXQoWygna2V5
XzEnLCAnaXRlbV80JyksICgna2V5XzMnLCAnaXRlbV8zJyksICgna2V5XzInLCAnaXRlbV8yJyld
KSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108278</attachid>
            <date>2011-09-21 22:34:17 -0700</date>
            <delta_ts>2011-09-22 10:11:29 -0700</delta_ts>
            <desc>fix_leak</desc>
            <filename>bug-67823-20110922143415.patch</filename>
            <type>text/plain</type>
            <size>9603</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU2OTYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhYzU4OWFjN2JjYmU5OTNkZjY0ZTliMzMzMGU3NjY1MTVl
NmI2MzcwLi5lNjQ2MzMyMDg3YmE1YjNmNTc4YzVkNDU0YTY2MWJjZjQwNTUyODI5IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDktMjEgIEFpIE1ha2FiaSAgPG1ha2FiaUBnb29nbGUuY29tPgorCisgICAgICAg
IFByb3ZpZGVzIGEgc2ltcGxlIExSVSBjYWNoZSBjbGFzcyBpbiBQeXRob24uCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODIzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9scnVfY2FjaGUucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bHJ1X2NhY2hlX3VuaXR0ZXN0LnB5OgorCiAyMDExLTA5LTIxICBBbm5hIENhdmVuZGVyICA8YW5u
YWNjQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVcGRhdGUgY29tbWl0dGVycy5weSB3aXRoIGEg
bmV3IGNvbnRyaWJ1dG9yIGNvbnRhY3QgICAgICAgIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vbHJ1X2NhY2hlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vbHJ1X2NhY2hlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxNzhkMGY3ZGQzMzFhN2Y4MzFkNmYwOWY0
NzU3ZmQ4MTRkMmI5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9scnVfY2FjaGUucHkKQEAgLTAsMCArMSwxMzUgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisK
K2NsYXNzIE5vZGUoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAg
ICAgIHNlbGYua2V5ID0ga2V5CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICBz
ZWxmLnByZXYgPSBOb25lCisgICAgICAgIHNlbGYubmV4dCA9IE5vbmUKKworCitjbGFzcyBMUlVD
YWNoZSgpOgorICAgICIiIkFuIGltcGxlbWVudGF0aW9uIG9mIExlYXN0IFJlY2VudGx5IFVzZWQg
KExSVSkgQ2FjaGUuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FwYWNpdHkpOgorICAg
ICAgICAiIiJJbml0aWFsaXplcyBhIGxydSBjYWNoZSB3aXRoIHRoZSBnaXZlbiBjYXBhY2l0eS4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgICAgY2FwYWNpdHk6IFRoZSBjYXBhY2l0eSBvZiB0
aGUgY2FjaGUuCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgY2FwYWNpdHkgPiAwLCAiY2Fw
YWNpdHkgKCVzKSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIgJSBjYXBhY2l0eQorICAgICAg
ICBzZWxmLl9maXJzdCA9IE5vbmUKKyAgICAgICAgc2VsZi5fbGFzdCA9IE5vbmUKKyAgICAgICAg
c2VsZi5fZGljdCA9IHt9CisgICAgICAgIHNlbGYuX2NhcGFjaXR5ID0gY2FwYWNpdHkKKworICAg
IGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgaWYga2V5IGluIHNl
bGYuX2RpY3Q6CisgICAgICAgICAgICBzZWxmLl9fZGVsaXRlbV9fKGtleSkKKyAgICAgICAgaWYg
bm90IHNlbGYuX2ZpcnN0OgorICAgICAgICAgICAgc2VsZi5fb25lX25vZGUoa2V5LCB2YWx1ZSkK
KyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBsZW4oc2VsZi5fZGljdCkgPj0gc2VsZi5f
Y2FwYWNpdHk6CisgICAgICAgICAgICBkZWwgc2VsZi5fZGljdFtzZWxmLl9sYXN0LmtleV0KKyAg
ICAgICAgICAgIGlmIHNlbGYuX2NhcGFjaXR5ID09IDE6CisgICAgICAgICAgICAgICAgc2VsZi5f
b25lX25vZGUoa2V5LCB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAg
IHNlbGYuX2xhc3QgPSBzZWxmLl9sYXN0Lm5leHQKKyAgICAgICAgICAgIHNlbGYuX2xhc3QucHJl
diA9IE5vbmUKKyAgICAgICAgbm9kZSA9IE5vZGUoa2V5LCB2YWx1ZSkKKyAgICAgICAgbm9kZS5w
cmV2ID0gc2VsZi5fZmlyc3QKKyAgICAgICAgc2VsZi5fZmlyc3QubmV4dCA9IG5vZGUKKyAgICAg
ICAgc2VsZi5fZmlyc3QgPSBub2RlCisgICAgICAgIHNlbGYuX2RpY3Rba2V5XSA9IG5vZGUKKwor
ICAgIGRlZiBfb25lX25vZGUoc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIG5vZGUgPSBOb2Rl
KGtleSwgdmFsdWUpCisgICAgICAgIHNlbGYuX2RpY3Rba2V5XSA9IG5vZGUKKyAgICAgICAgc2Vs
Zi5fZmlyc3QgPSBub2RlCisgICAgICAgIHNlbGYuX2xhc3QgPSBub2RlCisKKyAgICBkZWYgX19n
ZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpcnN0OgorICAgICAg
ICAgICAgcmFpc2UgS2V5RXJyb3Ioc3RyKGtleSkpCisgICAgICAgIGlmIHNlbGYuX2ZpcnN0Lmtl
eSA9PSBrZXk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmlyc3QudmFsdWUKKworICAgICAg
ICBpZiBzZWxmLl9sYXN0LmtleSA9PSBrZXk6CisgICAgICAgICAgICBuZXh0X2xhc3QgPSBzZWxm
Ll9sYXN0Lm5leHQKKyAgICAgICAgICAgIG5leHRfbGFzdC5wcmV2ID0gTm9uZQorICAgICAgICAg
ICAgbmV4dF9maXJzdCA9IHNlbGYuX2xhc3QKKyAgICAgICAgICAgIG5leHRfZmlyc3QucHJldiA9
IHNlbGYuX2ZpcnN0CisgICAgICAgICAgICBuZXh0X2ZpcnN0Lm5leHQgPSBOb25lCisgICAgICAg
ICAgICBzZWxmLl9maXJzdC5uZXh0ID0gbmV4dF9maXJzdAorICAgICAgICAgICAgc2VsZi5fZmly
c3QgPSBuZXh0X2ZpcnN0CisgICAgICAgICAgICBzZWxmLl9sYXN0ID0gbmV4dF9sYXN0CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fZmlyc3QudmFsdWUKKworICAgICAgICBub2RlID0gc2VsZi5f
ZGljdFtrZXldCisgICAgICAgIG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2CisgICAgICAgIG5v
ZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0CisgICAgICAgIG5vZGUucHJldiA9IHNlbGYuX2ZpcnN0
CisgICAgICAgIG5vZGUubmV4dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fZmlyc3QubmV4dCA9IG5v
ZGUKKyAgICAgICAgc2VsZi5fZmlyc3QgPSBub2RlCisgICAgICAgIHJldHVybiBzZWxmLl9maXJz
dC52YWx1ZQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIG5vZGUg
PSBzZWxmLl9kaWN0W2tleV0KKyAgICAgICAgZGVsIHNlbGYuX2RpY3Rba2V5XQorICAgICAgICBp
ZiBzZWxmLl9maXJzdCBpcyBzZWxmLl9sYXN0OgorICAgICAgICAgICAgc2VsZi5fbGFzdCA9IE5v
bmUKKyAgICAgICAgICAgIHNlbGYuX2ZpcnN0ID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCisg
ICAgICAgIGlmIHNlbGYuX2ZpcnN0IGlzIG5vZGU6CisgICAgICAgICAgICBzZWxmLl9maXJzdCA9
IG5vZGUucHJldgorICAgICAgICAgICAgc2VsZi5fZmlyc3QubmV4dCA9IE5vbmUKKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLl9sYXN0IGlzIG5vZGU6CisgICAgICAgICAgICBz
ZWxmLl9sYXN0ID0gbm9kZS5uZXh0CisgICAgICAgICAgICBzZWxmLl9sYXN0LnByZXYgPSBOb25l
CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbm9kZS5uZXh0LnByZXYgPSBub2RlLnByZXYK
KyAgICAgICAgbm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQKKworICAgIGRlZiBfX2xlbl9fKHNl
bGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2RpY3QpCisKKyAgICBkZWYgX19jb250YWlu
c19fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5fZGljdAorCisgICAg
ZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLl9kaWN0KQorCisg
ICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICByZXR1cm4gWyhrZXksIG5vZGUudmFsdWUpIGZv
ciBrZXksIG5vZGUgaW4gc2VsZi5fZGljdC5pdGVtcygpXQorCisgICAgZGVmIHZhbHVlcyhzZWxm
KToKKyAgICAgICAgcmV0dXJuIFtub2RlLnZhbHVlIGZvciBub2RlIGluIHNlbGYuX2RpY3QudmFs
dWVzKCldCisKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RpY3Qu
a2V5cygpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9scnVfY2Fj
aGVfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9scnVfY2FjaGVf
dW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDRhMDllNjYxYmFjNzU2OGE0NWQ0YzczYzI5YWY2MGRl
NGYxY2ZhOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2xydV9jYWNoZV91bml0dGVzdC5weQpAQCAtMCwwICsxLDk4IEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgbHJ1X2Nh
Y2hlCisKKworY2xhc3MgTFJVQ2FjaGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRl
ZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5scnUgPSBscnVfY2FjaGUuTFJVQ2FjaGUoMykK
KyAgICAgICAgc2VsZi5scnVbJ2tleV8xJ10gPSAnaXRlbV8xJworICAgICAgICBzZWxmLmxydVsn
a2V5XzInXSA9ICdpdGVtXzInCisgICAgICAgIHNlbGYubHJ1WydrZXlfMyddID0gJ2l0ZW1fMycK
KworICAgICAgICBzZWxmLmxydTIgPSBscnVfY2FjaGUuTFJVQ2FjaGUoMSkKKyAgICAgICAgc2Vs
Zi5scnUyWydrZXlfMSddID0gJ2l0ZW1fMScKKworICAgIGRlZiB0ZXN0X2l0ZW1zKHNlbGYpOgor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLmxydS5pdGVtcygpKSwgc2V0KFsoJ2tl
eV8xJywgJ2l0ZW1fMScpLCAoJ2tleV8zJywgJ2l0ZW1fMycpLCAoJ2tleV8yJywgJ2l0ZW1fMicp
XSkpCisKKyAgICBkZWYgdGVzdF9wdXQoc2VsZik6CisgICAgICAgIHNlbGYubHJ1WydrZXlfNCdd
ID0gJ2l0ZW1fNCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5scnUuaXRlbXMo
KSksIHNldChbKCdrZXlfNCcsICdpdGVtXzQnKSwgKCdrZXlfMycsICdpdGVtXzMnKSwgKCdrZXlf
MicsICdpdGVtXzInKV0pKQorCisgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgICAgICBz
ZWxmLmxydVsna2V5XzEnXQorICAgICAgICBzZWxmLmxydVsna2V5XzUnXSA9ICdpdGVtXzUnCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYubHJ1Lml0ZW1zKCkpLCBzZXQoWygna2V5
XzEnLCAnaXRlbV8xJyksICgna2V5XzMnLCAnaXRlbV8zJyksICgna2V5XzUnLCAnaXRlbV81Jyld
KSkKKworICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2V0KHNlbGYubHJ1LmtleXMoKSksIHNldChbJ2tleV8xJywgJ2tleV8yJywgJ2tleV8zJ10pKQor
CisgICAgZGVmIHRlc3RfZGVsZXRlKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5scnVbJ2tleV8x
J10KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgna2V5XzEnIGluIHNlbGYubHJ1KQorCisgICAg
ZGVmIHRlc3RfY29udGFpbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdrZXlfMScg
aW4gc2VsZi5scnUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ2tleV80JyBpbiBzZWxmLmxy
dSkKKworICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZXQoc2VsZi5scnUudmFsdWVzKCkpLCBzZXQoWydpdGVtXzEnLCAnaXRlbV8yJywgJ2l0ZW1f
MyddKSkKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChsZW4oc2VsZi5scnUpLCAzKQorCisgICAgZGVmIHRlc3Rfc2l6ZV9vbmVfcG9wKHNlbGYpOgor
ICAgICAgICBzZWxmLmxydTJbJ2tleV8yJ10gPSAnaXRlbV8yJworICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYubHJ1Mi5rZXlzKCksIFsna2V5XzInXSkKKworICAgIGRlZiB0ZXN0X3NpemVf
b25lX2RlbGV0ZShzZWxmKToKKyAgICAgICAgZGVsIHNlbGYubHJ1Mlsna2V5XzEnXQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKCdrZXlfMScgaW4gc2VsZi5scnUyKQorCisgICAgZGVmIHRlc3Rf
cG9wX2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2Vs
Zi5scnUyLl9fZ2V0aXRlbV9fLCAna2V5XzInKQorICAgICAgICBkZWwgc2VsZi5scnUyWydrZXlf
MSddCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLmxydTIuX19nZXRp
dGVtX18sICdrZXlfMicpCisKKyAgICBkZWYgdGVzdF9nZXRfbWlkZGxlX2l0ZW0oc2VsZik6Cisg
ICAgICAgIHNlbGYubHJ1WydrZXlfMiddCisgICAgICAgIHNlbGYubHJ1WydrZXlfNCddID0gJ2l0
ZW1fNCcKKyAgICAgICAgc2VsZi5scnVbJ2tleV81J10gPSAnaXRlbV81JworICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHNldChzZWxmLmxydS5rZXlzKCkpLCBzZXQoWydrZXlfMicsICdrZXlfNCcs
ICdrZXlfNSddKSkKKworICAgIGRlZiB0ZXN0X3NldF9hZ2FpbihzZWxmKToKKyAgICAgICAgc2Vs
Zi5scnVbJ2tleV8xJ10gPSAnaXRlbV80JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChz
ZWxmLmxydS5pdGVtcygpKSwgc2V0KFsoJ2tleV8xJywgJ2l0ZW1fNCcpLCAoJ2tleV8zJywgJ2l0
ZW1fMycpLCAoJ2tleV8yJywgJ2l0ZW1fMicpXSkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFp
bl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkK
</data>
<flag name="review"
          id="105208"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>