<?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>35758</bug_id>
          
          <creation_ts>2010-03-04 11:33:28 -0800</creation_ts>
          <short_desc>[Chromium] Pass the WebFrameClient into WebStorageArea::setItem so we can figure out the routing ID</short_desc>
          <delta_ts>2010-04-30 07:19:52 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>fishd</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>196160</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-04 11:33:28 -0800</bug_when>
    <thetext>Pass the WebFrameClient into WebStorageArea::setItem so we can figure out the routing ID.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196162</commentid>
    <comment_count>1</comment_count>
      <attachid>50040</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-04 11:36:14 -0800</bug_when>
    <thetext>Created attachment 50040
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196165</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-04 11:41:41 -0800</bug_when>
    <thetext>Attachment 50040 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/chromium/src/StorageAreaProxy.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/StorageAreaProxy.cpp:91:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/chromium/public/WebStorageArea.h:77:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196199</commentid>
    <comment_count>3</comment_count>
      <attachid>50040</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-04 13:27:14 -0800</bug_when>
    <thetext>Comment on attachment 50040
patch

&gt;  String StorageAreaProxy::setItem(const String&amp; key, const String&amp; value, ExceptionCode&amp; ec, Frame* frame)
&gt;  {
&gt; -    bool quotaException = false;
&gt; +    WebKit::WebFrameClient* webFrameClient = 0;
&gt; +    WebKit::WebViewImpl* webViewImpl = static_cast&lt;WebKit::ChromeClientImpl*&gt;(frame-&gt;page()-&gt;chrome()-&gt;client())-&gt;webView();
&gt; +    if (webViewImpl) {
&gt; +        WebKit::WebFrameImpl* webFrameImpl = webViewImpl-&gt;mainFrameImpl();
&gt; +        if (webFrameImpl)
&gt; +            webFrameClient = webFrameImpl-&gt;client();
&gt; +    }  

I think you should just use WebFrameImpl::fromFrame(frame) here, and pass
along the WebFrame instead of the WebFrameClient.  You could also just pass
the WebView since we don&apos;t need the WebFrame.

Even better would be to move createLocalStorageNamespace to WebViewClient.
This is a much better solution since it avoids the layering violation of
passing a WebFrame or WebView to the WebKitClient (platform layer).

For just hacking a solution for the release branch, I&apos;m okay with adding
the WebFrame/WebView parameter, but it would really be nice to not make
that be the long-term solution.

-Darin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196204</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-04 13:42:11 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 50040 [details])
&gt; &gt;  String StorageAreaProxy::setItem(const String&amp; key, const String&amp; value, ExceptionCode&amp; ec, Frame* frame)
&gt; &gt;  {
&gt; &gt; -    bool quotaException = false;
&gt; &gt; +    WebKit::WebFrameClient* webFrameClient = 0;
&gt; &gt; +    WebKit::WebViewImpl* webViewImpl = static_cast&lt;WebKit::ChromeClientImpl*&gt;(frame-&gt;page()-&gt;chrome()-&gt;client())-&gt;webView();
&gt; &gt; +    if (webViewImpl) {
&gt; &gt; +        WebKit::WebFrameImpl* webFrameImpl = webViewImpl-&gt;mainFrameImpl();
&gt; &gt; +        if (webFrameImpl)
&gt; &gt; +            webFrameClient = webFrameImpl-&gt;client();
&gt; &gt; +    }  
&gt; 
&gt; I think you should just use WebFrameImpl::fromFrame(frame) here, and pass
&gt; along the WebFrame instead of the WebFrameClient.  You could also just pass
&gt; the WebView since we don&apos;t need the WebFrame.
&gt; 
&gt; Even better would be to move createLocalStorageNamespace to WebViewClient.
&gt; This is a much better solution since it avoids the layering violation of
&gt; passing a WebFrame or WebView to the WebKitClient (platform layer).
&gt; 
&gt; For just hacking a solution for the release branch, I&apos;m okay with adding
&gt; the WebFrame/WebView parameter, but it would really be nice to not make
&gt; that be the long-term solution.

Moving createLocalStorageNamespace does not help or make sense since the LocalStorageNamespace is created on first use and stored with the page group.  Thus it doesn&apos;t tell us which frame/WebView is currently using it.

Passing in a WebFrame doesn&apos;t work because only the WebFrameImpl (which is private to the WebKit API) is the only way to get at the WebFrameClient*.  As far as I can tell, we can&apos;t get a WebFrameClient from a WebView either.

I believe using WebFrameImpl::fromFrame() should work and will clean up the code though.  But besides that, I don&apos;t see how any of these suggestions are workable.  If you have a second to look at this in depth and see if there is a way to simplify it, I&apos;d greatly appreciate it, but as far as I can tell, fromFrame() is the only thing I can change here.  I don&apos;t believe I technically have any layering violations either since WebFrameClient is in public.  Am I missing anything?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196234</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-04 14:47:27 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 50040 [details] [details])
&gt; &gt; &gt;  String StorageAreaProxy::setItem(const String&amp; key, const String&amp; value, ExceptionCode&amp; ec, Frame* frame)
&gt; &gt; &gt;  {
&gt; &gt; &gt; -    bool quotaException = false;
&gt; &gt; &gt; +    WebKit::WebFrameClient* webFrameClient = 0;
&gt; &gt; &gt; +    WebKit::WebViewImpl* webViewImpl = static_cast&lt;WebKit::ChromeClientImpl*&gt;(frame-&gt;page()-&gt;chrome()-&gt;client())-&gt;webView();
&gt; &gt; &gt; +    if (webViewImpl) {
&gt; &gt; &gt; +        WebKit::WebFrameImpl* webFrameImpl = webViewImpl-&gt;mainFrameImpl();
&gt; &gt; &gt; +        if (webFrameImpl)
&gt; &gt; &gt; +            webFrameClient = webFrameImpl-&gt;client();
&gt; &gt; &gt; +    }  
&gt; &gt; 
&gt; &gt; I think you should just use WebFrameImpl::fromFrame(frame) here, and pass
&gt; &gt; along the WebFrame instead of the WebFrameClient.  You could also just pass
&gt; &gt; the WebView since we don&apos;t need the WebFrame.
&gt; &gt; 
&gt; &gt; Even better would be to move createLocalStorageNamespace to WebViewClient.
&gt; &gt; This is a much better solution since it avoids the layering violation of
&gt; &gt; passing a WebFrame or WebView to the WebKitClient (platform layer).
&gt; &gt; 
&gt; &gt; For just hacking a solution for the release branch, I&apos;m okay with adding
&gt; &gt; the WebFrame/WebView parameter, but it would really be nice to not make
&gt; &gt; that be the long-term solution.
&gt; 
&gt; Moving createLocalStorageNamespace does not help or make sense since the
&gt; LocalStorageNamespace is created on first use and stored with the page group. 
&gt; Thus it doesn&apos;t tell us which frame/WebView is currently using it.

I see.


&gt; Passing in a WebFrame doesn&apos;t work because only the WebFrameImpl (which is
&gt; private to the WebKit API) is the only way to get at the WebFrameClient*.  As
&gt; far as I can tell, we can&apos;t get a WebFrameClient from a WebView either.

No, no... in Chromium land, you are trying to get to a RenderView.  RenderView
has a static FromWebView method that you can use to map from a WebView to a
RenderView.

Please note that it is valid to use the WebKit API with a null WebFrameClient
if you are not interested in any of the WebFrameClient methods.  Same goes for
other Client interfaces (except for WebKitClient).  This is why it is better to
pass around the WebFrame or WebView instead.


&gt; fromFrame() is the only thing I can change here.  I don&apos;t believe I technically
&gt; have any layering violations either since WebFrameClient is in public.  Am I
&gt; missing anything?

WebKitClient is supposed to correspond to platform services, which should not be
parameterized by a frame.  If we need to make per-frame queries, then that is
what WebFrameClient is for.

Another way to fix this problem is to add a WebFrameClient method named
setStorageItem (or something like that), but that seems a little strange.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196324</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-04 20:11:09 -0800</bug_when>
    <thetext>I thought about this some more, and I&apos;m fine with passing the WebFrame as a parameter to WebStorageArea methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196397</commentid>
    <comment_count>7</comment_count>
      <attachid>50094</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-05 03:04:55 -0800</bug_when>
    <thetext>Created attachment 50094
Addressed comments

I guess using the WebView is better, though it seems less efficient having to rely on the map, I guess it doesn&apos;t really matter.

All the other comments have been addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196549</commentid>
    <comment_count>8</comment_count>
      <attachid>50094</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-05 10:49:50 -0800</bug_when>
    <thetext>Comment on attachment 50094
Addressed comments

&gt; +    virtual void setItem(const WebString&amp; key, const WebString&amp; newValue, const WebURL&amp; url, Result&amp; result, WebString&amp; oldValue, WebView*)

nit: it occurred to me that passing the WebView loses information.  passing the WebFrame
might be better, although it doesn&apos;t matter to chromium.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197121</commentid>
    <comment_count>9</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-08 04:29:52 -0800</bug_when>
    <thetext>Landed in 55659</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50040</attachid>
            <date>2010-03-04 11:36:14 -0800</date>
            <delta_ts>2010-03-05 03:05:06 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>6147</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDhlZmZmODYuLjk1YzA3NjYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIxIEBACisyMDEwLTAzLTA0ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhc3MgdGhl
IFdlYkZyYW1lQ2xpZW50IGludG8gV2ViU3RvcmFnZUFyZWE6OnNldEl0ZW0gc28gd2UgY2FuIGZp
Z3VyZSBvdXQgdGhlIHJvdXRpbmcgSUQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM1NzU4CisKKyAgICAgICAgVGhpcyB3aWxsIGFsbG93IHVzIHRvIGF2
b2lkIHVzaW5nIFJlbmRlclRocmVhZDo6Um91dGluZ0lERm9yQ3VycmVudENvbnRleHQoKQorICAg
ICAgICB0byBndWVzcyB0aGUgcm91dGluZyBJRC4KKworICAgICAgICAqIHB1YmxpYy9XZWJTdG9y
YWdlQXJlYS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlQXJlYTo6c2V0SXRlbSk6Cisg
ICAgICAgICogc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZUFyZWFQcm94eTo6c2V0SXRlbSk6CisgICAgICAgICogc3JjL1dlYlN0b3JhZ2VBcmVhSW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbSk6Cisg
ICAgICAgICogc3JjL1dlYlN0b3JhZ2VBcmVhSW1wbC5oOgorCiAyMDEwLTAzLTAyICBUb255IENo
YW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlz
aGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTdG9yYWdlQXJlYS5o
IGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTdG9yYWdlQXJlYS5oCmluZGV4IDVlMmMxMWMu
LjAwMjM1NjIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3RvcmFnZUFy
ZWEuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN0b3JhZ2VBcmVhLmgKQEAgLTM2
LDYgKzM2LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFdlYkZyYW1lQ2xpZW50
OwogY2xhc3MgV2ViVVJMOwogCiAvLyBJbiBXZWJDb3JlLCB0aGVyZSdzIG9uZSBkaXN0aW5jdCBT
dG9yYWdlQXJlYSBwZXIgb3JpZ2luIHBlciBTdG9yYWdlTmFtZXNwYWNlLiBUaGlzCkBAIC02Niwx
OCArNjcsMTQgQEAgcHVibGljOgogICAgIC8vIFNldCB0aGUgdmFsdWUgdGhhdCBjb3JyZXNwb25k
cyB0byBhIHNwZWNpZmljIGtleS4gUmVzdWx0IHdpbGwgZWl0aGVyIGJlIFJlc3VsdE9LCiAgICAg
Ly8gb3Igc29tZSBwYXJ0aWN1bGFyIGVycm9yLiBUaGUgdmFsdWUgaXMgTk9UIHNldCB3aGVuIHRo
ZXJlJ3MgYW4gZXJyb3IuICB1cmwgaXMgdGhlCiAgICAgLy8gdXJsIHRoYXQgc2hvdWxkIGJlIHVz
ZWQgaWYgYSBzdG9yYWdlIGV2ZW50IGZpcmVzLgotICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVtKGNv
bnN0IFdlYlN0cmluZyYga2V5LCBjb25zdCBXZWJTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBXZWJV
UkwmIHVybCwgUmVzdWx0JiByZXN1bHQsIFdlYlN0cmluZyYgb2xkVmFsdWUpCisgICAgdmlydHVh
bCB2b2lkIHNldEl0ZW0oY29uc3QgV2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlN0cmluZyYgbmV3
VmFsdWUsIGNvbnN0IFdlYlVSTCYgdXJsLCBSZXN1bHQmIHJlc3VsdCwgV2ViU3RyaW5nJiBvbGRW
YWx1ZSwgV2ViRnJhbWVDbGllbnQqKQogICAgIHsKLSAgICAgICAgYm9vbCBxdW90YUV4Y2VwdGlv
biA9IGZhbHNlOwotICAgICAgICBzZXRJdGVtKGtleSwgbmV3VmFsdWUsIHVybCwgcXVvdGFFeGNl
cHRpb24sIG9sZFZhbHVlKTsKLSAgICAgICAgcmVzdWx0ID0gcXVvdGFFeGNlcHRpb24gPyBSZXN1
bHRCbG9ja2VkQnlRdW90YSA6IFJlc3VsdE9LOworICAgICAgICBzZXRJdGVtKGtleSwgbmV3VmFs
dWUsIHVybCwgcmVzdWx0LCBvbGRWYWx1ZSk7CiAgICAgfQogICAgIC8vIEZJWE1FOiBSZW1vdmUg
c29vbiAob25jZSBDaHJvbWUgaGFzIHJvbGxlZCBwYXN0IHRoaXMgcmV2aXNpb24pLgotICAgIHZp
cnR1YWwgdm9pZCBzZXRJdGVtKGNvbnN0IFdlYlN0cmluZyYga2V5LCBjb25zdCBXZWJTdHJpbmcm
IG5ld1ZhbHVlLCBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCYgcXVvdGFFeGNlcHRpb24sIFdlYlN0
cmluZyYgb2xkVmFsdWUpCisgICAgdmlydHVhbCB2b2lkIHNldEl0ZW0oY29uc3QgV2ViU3RyaW5n
JiBrZXksIGNvbnN0IFdlYlN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFdlYlVSTCYgdXJsLCBSZXN1
bHQmIHJlc3VsdCwgV2ViU3RyaW5nJiBvbGRWYWx1ZSkKICAgICB7Ci0gICAgICAgIFJlc3VsdCBy
ZXN1bHQ7Ci0gICAgICAgIHNldEl0ZW0oa2V5LCBuZXdWYWx1ZSwgdXJsLCByZXN1bHQsIG9sZFZh
bHVlKTsKLSAgICAgICAgcXVvdGFFeGNlcHRpb24gPSByZXN1bHQgIT0gUmVzdWx0T0s7CisgICAg
ICAgIHNldEl0ZW0oa2V5LCBuZXdWYWx1ZSwgdXJsLCByZXN1bHQsIG9sZFZhbHVlLCBOVUxMKTsK
ICAgICB9CiAKICAgICAvLyBSZW1vdmUgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRp
Y3VsYXIga2V5LiAgdXJsIGlzIHRoZSB1cmwgdGhhdCBzaG91bGQgYmUgdXNlZApkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5LmNwcCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5jcHAKaW5kZXggYzkxODVmZS4uMjY3NmE0ZiAxMDA2
NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5LmNwcAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKKyNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNs
dWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKQEAgLTQwLDkgKzQxLDEyIEBACiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgi
CiAjaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCiAKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBs
LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViU3RvcmFnZUFyZWEu
aCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3SW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTczLDEyICs3Nywy
MCBAQCBTdHJpbmcgU3RvcmFnZUFyZWFQcm94eTo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkg
Y29uc3QKIAogU3RyaW5nIFN0b3JhZ2VBcmVhUHJveHk6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUp
CiB7Ci0gICAgYm9vbCBxdW90YUV4Y2VwdGlvbiA9IGZhbHNlOworICAgIFdlYktpdDo6V2ViRnJh
bWVDbGllbnQqIHdlYkZyYW1lQ2xpZW50ID0gMDsKKyAgICBXZWJLaXQ6OldlYlZpZXdJbXBsKiB3
ZWJWaWV3SW1wbCA9IHN0YXRpY19jYXN0PFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbCo+KGZyYW1l
LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKSktPndlYlZpZXcoKTsKKyAgICBpZiAod2ViVmll
d0ltcGwpIHsKKyAgICAgICAgV2ViS2l0OjpXZWJGcmFtZUltcGwqIHdlYkZyYW1lSW1wbCA9IHdl
YlZpZXdJbXBsLT5tYWluRnJhbWVJbXBsKCk7CisgICAgICAgIGlmICh3ZWJGcmFtZUltcGwpCisg
ICAgICAgICAgICB3ZWJGcmFtZUNsaWVudCA9IHdlYkZyYW1lSW1wbC0+Y2xpZW50KCk7CisgICAg
fSAgCisgIAorICAgIFdlYktpdDo6V2ViU3RvcmFnZUFyZWE6OlJlc3VsdCByZXN1bHQgPSBXZWJL
aXQ6OldlYlN0b3JhZ2VBcmVhOjpSZXN1bHRPSzsKICAgICBXZWJLaXQ6OldlYlN0cmluZyBvbGRW
YWx1ZTsKLSAgICBtX3N0b3JhZ2VBcmVhLT5zZXRJdGVtKGtleSwgdmFsdWUsIGZyYW1lLT5kb2N1
bWVudCgpLT51cmwoKSwgcXVvdGFFeGNlcHRpb24sIG9sZFZhbHVlKTsKLSAgICBlYyA9IHF1b3Rh
RXhjZXB0aW9uID8gUVVPVEFfRVhDRUVERURfRVJSIDogMDsKKyAgICBtX3N0b3JhZ2VBcmVhLT5z
ZXRJdGVtKGtleSwgdmFsdWUsIGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSwgcmVzdWx0LCBvbGRW
YWx1ZSwgd2ViRnJhbWVDbGllbnQpOworCWVjID0gKHJlc3VsdCA9PSBXZWJLaXQ6OldlYlN0b3Jh
Z2VBcmVhOjpSZXN1bHRPSykgPyAwIDogUVVPVEFfRVhDRUVERURfRVJSOwogICAgIFN0cmluZyBv
bGRWYWx1ZVN0cmluZyA9IG9sZFZhbHVlOwotICAgIGlmIChvbGRWYWx1ZVN0cmluZyAhPSB2YWx1
ZSkKKyAgICBpZiAob2xkVmFsdWVTdHJpbmcgIT0gdmFsdWUgJiYgcmVzdWx0ID09IFdlYktpdDo6
V2ViU3RvcmFnZUFyZWE6OlJlc3VsdE9LKQogICAgICAgICBzdG9yYWdlRXZlbnQoa2V5LCBvbGRW
YWx1ZSwgdmFsdWUsIG1fc3RvcmFnZVR5cGUsIGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLCBmcmFtZSk7CiAgICAgcmV0dXJuIG9sZFZhbHVlOwogfQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTdG9yYWdlQXJlYUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTdG9yYWdlQXJlYUltcGwuY3BwCmluZGV4IDlhN2ZkNWMuLmE4NzhlM2MgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RvcmFnZUFyZWFJbXBsLmNwcAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0b3JhZ2VBcmVhSW1wbC5jcHAKQEAgLTY2LDcgKzY2LDcg
QEAgV2ViU3RyaW5nIFdlYlN0b3JhZ2VBcmVhSW1wbDo6Z2V0SXRlbShjb25zdCBXZWJTdHJpbmcm
IGtleSkKICAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+Z2V0SXRlbShrZXkpOwogfQogCi12b2lk
IFdlYlN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShjb25zdCBXZWJTdHJpbmcmIGtleSwgY29uc3Qg
V2ViU3RyaW5nJiB2YWx1ZSwgY29uc3QgV2ViVVJMJiB1cmwsIFJlc3VsdCYgcmVzdWx0LCBXZWJT
dHJpbmcmIG9sZFZhbHVlKQordm9pZCBXZWJTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0oY29uc3Qg
V2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUsIGNvbnN0IFdlYlVSTCYgdXJs
LCBSZXN1bHQmIHJlc3VsdCwgV2ViU3RyaW5nJiBvbGRWYWx1ZSwgV2ViRnJhbWVDbGllbnQqKQog
ewogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTdG9yYWdlQXJlYUltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3Rv
cmFnZUFyZWFJbXBsLmgKaW5kZXggZTlhMTFjMi4uOTlhYzI4NyAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTdG9yYWdlQXJlYUltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlN0b3JhZ2VBcmVhSW1wbC5oCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpOwogICAgIHZpcnR1YWwgV2ViU3RyaW5nIGtleSh1bnNp
Z25lZCBpbmRleCk7CiAgICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0SXRlbShjb25zdCBXZWJTdHJp
bmcmIGtleSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEl0ZW0oY29uc3QgV2ViU3RyaW5nJiBrZXks
IGNvbnN0IFdlYlN0cmluZyYgdmFsdWUsIGNvbnN0IFdlYlVSTCYgdXJsLCBSZXN1bHQmIHJlc3Vs
dCwgV2ViU3RyaW5nJiBvbGRWYWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldEl0ZW0oY29uc3Qg
V2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUsIGNvbnN0IFdlYlVSTCYgdXJs
LCBSZXN1bHQmIHJlc3VsdCwgV2ViU3RyaW5nJiBvbGRWYWx1ZSwgV2ViRnJhbWVDbGllbnQqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBXZWJTdHJpbmcmIGtleSwgY29uc3Qg
V2ViVVJMJiB1cmwsIFdlYlN0cmluZyYgb2xkVmFsdWUpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVh
cihjb25zdCBXZWJVUkwmIHVybCwgYm9vbCYgc29tZXRoaW5nQ2xlYXJlZCk7CiAK
</data>
<flag name="review"
          id="33076"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50094</attachid>
            <date>2010-03-05 03:04:55 -0800</date>
            <delta_ts>2010-03-05 10:49:50 -0800</delta_ts>
            <desc>Addressed comments</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>5771</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDhlZmZmODYuLjgzYjAzZjMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIxIEBACisyMDEwLTAzLTA0ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhc3MgdGhl
IFdlYlZpZXcgaW50byBXZWJTdG9yYWdlQXJlYTo6c2V0SXRlbSBzbyB3ZSBjYW4gZmlndXJlIG91
dCB0aGUgcm91dGluZyBJRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzU3NTgKKworICAgICAgICBUaGlzIGlzIG5lY2Vzc2FyeSBzaW5jZSBzZXRJdGVt
IGlzIHNvbWV0aW1lcyBibG9ja2VkIGFuZCB0aGUgZW1iZWRkZXIgbWlnaHQgbmVlZAorICAgICAg
ICB0byBkaXNwbGF5IHNvbWUgcGllY2Ugb2YgVUkgYXNzb2NpYXRlZCB3aXRoIHN1Y2ggYW4gZXZl
bnQuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViU3RvcmFnZUFyZWEuaDoKKyAgICAgICAgKFdlYktp
dDo6V2ViU3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAqIHNyYy9TdG9yYWdlQXJlYVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhUHJveHk6OnNldEl0ZW0pOgor
ICAgICAgICAqIHNyYy9XZWJTdG9yYWdlQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0pOgorICAgICAgICAqIHNyYy9XZWJTdG9yYWdlQXJl
YUltcGwuaDoKKwogMjAxMC0wMy0wMiAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViU3RvcmFnZUFyZWEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViU3RvcmFnZUFyZWEuaAppbmRleCA1ZTJjMTFjLi4yZDQzODE4IDEwMDY0NAotLS0gYS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlN0b3JhZ2VBcmVhLmgKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTdG9yYWdlQXJlYS5oCkBAIC0zNyw2ICszNyw3IEBACiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgV2ViVVJMOworY2xhc3MgV2ViVmlldzsKIAogLy8gSW4gV2ViQ29yZSwg
dGhlcmUncyBvbmUgZGlzdGluY3QgU3RvcmFnZUFyZWEgcGVyIG9yaWdpbiBwZXIgU3RvcmFnZU5h
bWVzcGFjZS4gVGhpcwogLy8gY2xhc3Mgd3JhcHMgYSBTdG9yYWdlQXJlYS4gIEFsbCB0aGUgbWV0
aG9kcyBoYXZlIG9idmlvdXMgY29ubmVjdGlvbnMgdG8gdGhlIHNwZWM6CkBAIC02NiwxOCArNjcs
MTQgQEAgcHVibGljOgogICAgIC8vIFNldCB0aGUgdmFsdWUgdGhhdCBjb3JyZXNwb25kcyB0byBh
IHNwZWNpZmljIGtleS4gUmVzdWx0IHdpbGwgZWl0aGVyIGJlIFJlc3VsdE9LCiAgICAgLy8gb3Ig
c29tZSBwYXJ0aWN1bGFyIGVycm9yLiBUaGUgdmFsdWUgaXMgTk9UIHNldCB3aGVuIHRoZXJlJ3Mg
YW4gZXJyb3IuICB1cmwgaXMgdGhlCiAgICAgLy8gdXJsIHRoYXQgc2hvdWxkIGJlIHVzZWQgaWYg
YSBzdG9yYWdlIGV2ZW50IGZpcmVzLgotICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVtKGNvbnN0IFdl
YlN0cmluZyYga2V5LCBjb25zdCBXZWJTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBXZWJVUkwmIHVy
bCwgUmVzdWx0JiByZXN1bHQsIFdlYlN0cmluZyYgb2xkVmFsdWUpCisgICAgdmlydHVhbCB2b2lk
IHNldEl0ZW0oY29uc3QgV2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlN0cmluZyYgbmV3VmFsdWUs
IGNvbnN0IFdlYlVSTCYgdXJsLCBSZXN1bHQmIHJlc3VsdCwgV2ViU3RyaW5nJiBvbGRWYWx1ZSwg
V2ViVmlldyopCiAgICAgewotICAgICAgICBib29sIHF1b3RhRXhjZXB0aW9uID0gZmFsc2U7Ci0g
ICAgICAgIHNldEl0ZW0oa2V5LCBuZXdWYWx1ZSwgdXJsLCBxdW90YUV4Y2VwdGlvbiwgb2xkVmFs
dWUpOwotICAgICAgICByZXN1bHQgPSBxdW90YUV4Y2VwdGlvbiA/IFJlc3VsdEJsb2NrZWRCeVF1
b3RhIDogUmVzdWx0T0s7CisgICAgICAgIHNldEl0ZW0oa2V5LCBuZXdWYWx1ZSwgdXJsLCByZXN1
bHQsIG9sZFZhbHVlKTsKICAgICB9CiAgICAgLy8gRklYTUU6IFJlbW92ZSBzb29uIChvbmNlIENo
cm9tZSBoYXMgcm9sbGVkIHBhc3QgdGhpcyByZXZpc2lvbikuCi0gICAgdmlydHVhbCB2b2lkIHNl
dEl0ZW0oY29uc3QgV2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlN0cmluZyYgbmV3VmFsdWUsIGNv
bnN0IFdlYlVSTCYgdXJsLCBib29sJiBxdW90YUV4Y2VwdGlvbiwgV2ViU3RyaW5nJiBvbGRWYWx1
ZSkKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXRlbShjb25zdCBXZWJTdHJpbmcmIGtleSwgY29uc3Qg
V2ViU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgV2ViVVJMJiB1cmwsIFJlc3VsdCYgcmVzdWx0LCBX
ZWJTdHJpbmcmIG9sZFZhbHVlKQogICAgIHsKLSAgICAgICAgUmVzdWx0IHJlc3VsdDsKLSAgICAg
ICAgc2V0SXRlbShrZXksIG5ld1ZhbHVlLCB1cmwsIHJlc3VsdCwgb2xkVmFsdWUpOwotICAgICAg
ICBxdW90YUV4Y2VwdGlvbiA9IHJlc3VsdCAhPSBSZXN1bHRPSzsKKyAgICAgICAgc2V0SXRlbShr
ZXksIG5ld1ZhbHVlLCB1cmwsIHJlc3VsdCwgb2xkVmFsdWUsIDApOwogICAgIH0KIAogICAgIC8v
IFJlbW92ZSB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBrZXkuICB1cmwg
aXMgdGhlIHVybCB0aGF0IHNob3VsZCBiZSB1c2VkCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdl
QXJlYVByb3h5LmNwcAppbmRleCBjOTE4NWZlLi4wOTBlNTcxIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvU3RvcmFnZUFyZWFQcm94eS5jcHAKQEAgLTQwLDkgKzQwLDExIEBACiAjaW5jbHVkZSAiU3Rv
cmFnZUFyZWFJbXBsLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCiAKKyNpbmNsdWRlICJX
ZWJGcmFtZUltcGwuaCIKICNpbmNsdWRlICJXZWJTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIldl
YlN0cmluZy5oIgogI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzMsMTIgKzc1LDEzIEBAIFN0cmluZyBTdG9y
YWdlQXJlYVByb3h5OjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogCiBTdHJpbmcg
U3RvcmFnZUFyZWFQcm94eTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBib29sIHF1
b3RhRXhjZXB0aW9uID0gZmFsc2U7CisgICAgV2ViS2l0OjpXZWJTdG9yYWdlQXJlYTo6UmVzdWx0
IHJlc3VsdCA9IFdlYktpdDo6V2ViU3RvcmFnZUFyZWE6OlJlc3VsdE9LOwogICAgIFdlYktpdDo6
V2ViU3RyaW5nIG9sZFZhbHVlOwotICAgIG1fc3RvcmFnZUFyZWEtPnNldEl0ZW0oa2V5LCB2YWx1
ZSwgZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCBxdW90YUV4Y2VwdGlvbiwgb2xkVmFsdWUpOwot
ICAgIGVjID0gcXVvdGFFeGNlcHRpb24gPyBRVU9UQV9FWENFRURFRF9FUlIgOiAwOworICAgIFdl
YktpdDo6V2ViVmlldyogd2ViVmlldyA9IFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUo
ZnJhbWUpLT52aWV3SW1wbCgpOworICAgIG1fc3RvcmFnZUFyZWEtPnNldEl0ZW0oa2V5LCB2YWx1
ZSwgZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCByZXN1bHQsIG9sZFZhbHVlLCB3ZWJWaWV3KTsK
KyAgICBlYyA9IChyZXN1bHQgPT0gV2ViS2l0OjpXZWJTdG9yYWdlQXJlYTo6UmVzdWx0T0spID8g
MCA6IFFVT1RBX0VYQ0VFREVEX0VSUjsKICAgICBTdHJpbmcgb2xkVmFsdWVTdHJpbmcgPSBvbGRW
YWx1ZTsKLSAgICBpZiAob2xkVmFsdWVTdHJpbmcgIT0gdmFsdWUpCisgICAgaWYgKG9sZFZhbHVl
U3RyaW5nICE9IHZhbHVlICYmIHJlc3VsdCA9PSBXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhOjpSZXN1
bHRPSykKICAgICAgICAgc3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIHZhbHVlLCBtX3N0b3Jh
Z2VUeXBlLCBmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgZnJhbWUpOwogICAg
IHJldHVybiBvbGRWYWx1ZTsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U3RvcmFnZUFyZWFJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RvcmFnZUFyZWFJ
bXBsLmNwcAppbmRleCA5YTdmZDVjLi5iNTk4NmVjIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlN0b3JhZ2VBcmVhSW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTdG9yYWdlQXJlYUltcGwuY3BwCkBAIC02Niw3ICs2Niw3IEBAIFdlYlN0cmluZyBXZWJTdG9y
YWdlQXJlYUltcGw6OmdldEl0ZW0oY29uc3QgV2ViU3RyaW5nJiBrZXkpCiAgICAgcmV0dXJuIG1f
c3RvcmFnZUFyZWEtPmdldEl0ZW0oa2V5KTsKIH0KIAotdm9pZCBXZWJTdG9yYWdlQXJlYUltcGw6
OnNldEl0ZW0oY29uc3QgV2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUsIGNv
bnN0IFdlYlVSTCYgdXJsLCBSZXN1bHQmIHJlc3VsdCwgV2ViU3RyaW5nJiBvbGRWYWx1ZSkKK3Zv
aWQgV2ViU3RvcmFnZUFyZWFJbXBsOjpzZXRJdGVtKGNvbnN0IFdlYlN0cmluZyYga2V5LCBjb25z
dCBXZWJTdHJpbmcmIHZhbHVlLCBjb25zdCBXZWJVUkwmIHVybCwgUmVzdWx0JiByZXN1bHQsIFdl
YlN0cmluZyYgb2xkVmFsdWUsIFdlYlZpZXcqKQogewogICAgIGludCBleGNlcHRpb25Db2RlID0g
MDsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdG9yYWdlQXJlYUltcGwu
aCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RvcmFnZUFyZWFJbXBsLmgKaW5kZXggZTlhMTFj
Mi4uMDAxZWMzOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdG9yYWdlQXJl
YUltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0b3JhZ2VBcmVhSW1wbC5oCkBA
IC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpOwog
ICAgIHZpcnR1YWwgV2ViU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCk7CiAgICAgdmlydHVhbCBX
ZWJTdHJpbmcgZ2V0SXRlbShjb25zdCBXZWJTdHJpbmcmIGtleSk7Ci0gICAgdmlydHVhbCB2b2lk
IHNldEl0ZW0oY29uc3QgV2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUsIGNv
bnN0IFdlYlVSTCYgdXJsLCBSZXN1bHQmIHJlc3VsdCwgV2ViU3RyaW5nJiBvbGRWYWx1ZSk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEl0ZW0oY29uc3QgV2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlN0
cmluZyYgdmFsdWUsIGNvbnN0IFdlYlVSTCYgdXJsLCBSZXN1bHQmIHJlc3VsdCwgV2ViU3RyaW5n
JiBvbGRWYWx1ZSwgV2ViVmlldyopOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJdGVtKGNvbnN0
IFdlYlN0cmluZyYga2V5LCBjb25zdCBXZWJVUkwmIHVybCwgV2ViU3RyaW5nJiBvbGRWYWx1ZSk7
CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0IFdlYlVSTCYgdXJsLCBib29sJiBzb21ldGhp
bmdDbGVhcmVkKTsKIAo=
</data>
<flag name="review"
          id="33146"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>