<?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>59785</bug_id>
          
          <creation_ts>2011-04-29 01:51:52 -0700</creation_ts>
          <short_desc>Implement FULLSCREEN_API on Windows, Part 2: WebKit</short_desc>
          <delta_ts>2011-04-30 01:15:34 -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>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>59778</dependson>
          <blocked>59798</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>395173</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-04-29 01:51:52 -0700</bug_when>
    <thetext>Implement FULLSCREEN_API on Windows, Part 2: WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395177</commentid>
    <comment_count>1</comment_count>
      <attachid>91653</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-04-29 02:10:49 -0700</bug_when>
    <thetext>Created attachment 91653
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395289</commentid>
    <comment_count>2</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-04-29 09:06:51 -0700</bug_when>
    <thetext>This patch depends on the one in bug #59778, which seems to be why it&apos;s not applying cleanly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395659</commentid>
    <comment_count>3</comment_count>
      <attachid>91776</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-04-29 17:51:22 -0700</bug_when>
    <thetext>Created attachment 91776
Patch

Build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395708</commentid>
    <comment_count>4</comment_count>
      <attachid>91776</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-29 18:46:37 -0700</bug_when>
    <thetext>Comment on attachment 91776
Patch

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

&gt; Source/WebKit/win/WebFullScreenController.cpp:34
&gt; +#include &lt;WTF/RefPtr.h&gt;

Lowercase wtf please.E

&gt; Source/WebKit/win/WebFullScreenController.cpp:42
&gt; +class WebFullScreenController::Private  : public MediaPlayerPrivateFullscreenClient {

Extra space after Private.

Why not use struct, since all the members are public?

&gt; Source/WebKit/win/WebFullScreenController.cpp:47
&gt; +        , fullScreenWindow(0)

No need for this.

&gt; Source/WebKit/win/WebFullScreenController.cpp:50
&gt; +        , isFullScreen(0)

Should be false, not 0.

&gt; Source/WebKit/win/WebFullScreenController.cpp:51
&gt; +    { }

Please put these on their own lines.

&gt; Source/WebKit/win/WebFullScreenController.cpp:88
&gt; +            lResult = ::DefWindowProc(hwnd, msg, wParam, lParam);

Why do we only need to call ::DefWindowProc in this one case? What about all the messages we don&apos;t handle? Maybe fullscreenClientWndProc isn&apos;t responsible for taking care of messages it doesn&apos;t handle, but in that case why are we calling ::DefWindowProc here?

&gt; Source/WebKit/win/WebFullScreenController.cpp:98
&gt; +    : m_private(new WebFullScreenController::Private(this, webView))

Please use adoptPtr or add a ::create function to the Private class.

&gt; Source/WebKit/win/WebFullScreenController.cpp:168
&gt; +    ::ShowWindow(m_private-&gt;hostWindow, SW_HIDE);
&gt; +    ::DestroyWindow(m_private-&gt;hostWindow);

Why bother hiding before destroying?

&gt; Source/WebKit/win/WebFullScreenController.h:33
&gt; +#include &lt;WTF/OwnPtr.h&gt;
&gt; +#include &lt;WTF/RefPtr.h&gt;

Lowercase wtf, please.

&gt; Source/WebKit/win/WebFullScreenController.h:38
&gt; +    class GraphicsLayer;
&gt; +    class IntSize;

I don&apos;t think these are needed.

&gt; Source/WebKit/win/WebFullScreenController.h:60
&gt; +protected:
&gt; +    class Private;
&gt; +    friend class Private;
&gt; +    OwnPtr&lt;WebFullScreenController::Private&gt; m_private;

Why use the pimpl pattern here, given that there are so many places in WebKit where we could but don&apos;t use it?

&gt; Source/WebKit/win/WebView.cpp:6755
&gt; +    if (!m_preferences || FAILED(m_preferences-&gt;isFullScreenEnabled(&amp;enabled)))
&gt; +        return false;
&gt; +
&gt; +    return enabled;

You could turn this into a single return statement.

&gt; Source/WebKit/win/WebView.h:947
&gt; +    WebFullScreenController* fullScreenController();

Maybe this should be a const member function and m_newFullScreenController should be mutable?

&gt; Source/WebKit/win/WebView.h:1106
&gt; +    OwnPtr&lt;WebFullScreenController&gt; m_newFullScreenController;

&quot;new&quot; isn&apos;t so great. It&apos;s better to give old things the weird name and use normal names for &quot;new&quot; things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395731</commentid>
    <comment_count>5</comment_count>
      <attachid>91776</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-04-29 19:31:46 -0700</bug_when>
    <thetext>Comment on attachment 91776
Patch

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

&gt;&gt; Source/WebKit/win/WebFullScreenController.cpp:34
&gt;&gt; +#include &lt;WTF/RefPtr.h&gt;
&gt; 
&gt; Lowercase wtf please.E

Lowered.

&gt;&gt; Source/WebKit/win/WebFullScreenController.cpp:42
&gt;&gt; +class WebFullScreenController::Private  : public MediaPlayerPrivateFullscreenClient {
&gt; 
&gt; Extra space after Private.
&gt; 
&gt; Why not use struct, since all the members are public?

Space removed.

Because a struct with a constructor looks weird?

&gt;&gt; Source/WebKit/win/WebFullScreenController.cpp:47
&gt;&gt; +        , fullScreenWindow(0)
&gt; 
&gt; No need for this.

Too true.  Removed.

&gt;&gt; Source/WebKit/win/WebFullScreenController.cpp:50
&gt;&gt; +        , isFullScreen(0)
&gt; 
&gt; Should be false, not 0.

Replaced.

&gt;&gt; Source/WebKit/win/WebFullScreenController.cpp:51
&gt;&gt; +    { }
&gt; 
&gt; Please put these on their own lines.

Done.

&gt;&gt; Source/WebKit/win/WebFullScreenController.cpp:88
&gt;&gt; +            lResult = ::DefWindowProc(hwnd, msg, wParam, lParam);
&gt; 
&gt; Why do we only need to call ::DefWindowProc in this one case? What about all the messages we don&apos;t handle? Maybe fullscreenClientWndProc isn&apos;t responsible for taking care of messages it doesn&apos;t handle, but in that case why are we calling ::DefWindowProc here?

Yes, this proc isn&apos;t responsible for other messages; they&apos;re handled by MediaPlayerPrivateFullscreenWindow.  But in the case of WM_KEYDOWN, I wanted to make sure not to break any of the default key code handling.  It looks like you&apos;re right, in that I should set lResult to 1 here, to indicate this message wasn&apos;t handled by the application.

Actually, the other place where this pattern is used (FullscreenVideoController), the client proc always passes messages to DefWindowProc, so perhaps I do need to add a default: to my case statement.

&gt;&gt; Source/WebKit/win/WebFullScreenController.cpp:98
&gt;&gt; +    : m_private(new WebFullScreenController::Private(this, webView))
&gt; 
&gt; Please use adoptPtr or add a ::create function to the Private class.

Adopted.

&gt;&gt; Source/WebKit/win/WebFullScreenController.cpp:168
&gt;&gt; +    ::DestroyWindow(m_private-&gt;hostWindow);
&gt; 
&gt; Why bother hiding before destroying?

Paranoia.

&gt;&gt; Source/WebKit/win/WebFullScreenController.h:33
&gt;&gt; +#include &lt;WTF/RefPtr.h&gt;
&gt; 
&gt; Lowercase wtf, please.

Lowered.

&gt;&gt; Source/WebKit/win/WebFullScreenController.h:38
&gt;&gt; +    class IntSize;
&gt; 
&gt; I don&apos;t think these are needed.

You&apos;re right, they&apos;re leftovers.  Removed.

&gt;&gt; Source/WebKit/win/WebFullScreenController.h:60
&gt;&gt; +    OwnPtr&lt;WebFullScreenController::Private&gt; m_private;
&gt; 
&gt; Why use the pimpl pattern here, given that there are so many places in WebKit where we could but don&apos;t use it?

I like the pimpl pattern.  It means I can have something approaching the equivalent of categories in ObjC.  It also reduces compile times for everyone who includes this file.

&gt;&gt; Source/WebKit/win/WebView.cpp:6755
&gt;&gt; +    return enabled;
&gt; 
&gt; You could turn this into a single return statement.

That would be a pretty long and complicated return statement, wouldn&apos;t it?  You mean something like?:

BOOL enabled = FALSE;
return withKeyboard &amp;&amp; m_preferences &amp;&amp; SUCCEEDED(m_preferences-&gt;isFullScreenEnabled(&amp;enabled)) &amp;&amp; enabled;

&gt;&gt; Source/WebKit/win/WebView.h:947
&gt;&gt; +    WebFullScreenController* fullScreenController();
&gt; 
&gt; Maybe this should be a const member function and m_newFullScreenController should be mutable?

That would work.

&gt;&gt; Source/WebKit/win/WebView.h:1106
&gt;&gt; +    OwnPtr&lt;WebFullScreenController&gt; m_newFullScreenController;
&gt; 
&gt; &quot;new&quot; isn&apos;t so great. It&apos;s better to give old things the weird name and use normal names for &quot;new&quot; things.

Sure thing; I&apos;ll rename the old ivar and make this one more normal.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395745</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-04-29 20:36:37 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 91776 [details])
&gt; &gt;&gt; Source/WebKit/win/WebView.h:947
&gt; &gt;&gt; +    WebFullScreenController* fullScreenController();
&gt; &gt; 
&gt; &gt; Maybe this should be a const member function and m_newFullScreenController should be mutable?
&gt; 
&gt; That would work.

Signs point to &quot;no&quot;.  WebFullScreenController needs a non-const pointer to WebView, and if this function is const, the this pointer is as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395782</commentid>
    <comment_count>7</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-04-30 01:15:34 -0700</bug_when>
    <thetext>Committed r85393: &lt;http://trac.webkit.org/changeset/85393&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91653</attachid>
            <date>2011-04-29 02:10:49 -0700</date>
            <delta_ts>2011-04-29 17:51:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59785-20110429021049.patch</filename>
            <type>text/plain</type>
            <size>16848</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODUyMzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCBhMTg5OWY5ZDA5
MmM1Mzk5NDU2ZDFmYTRlMzZmZWQ5YzUwZGU1ZWFmLi5lMTc1MGFhY2QwZDNkOGYyODQ2MGJhMzE1
ZTdhYmU4NWFmNzc5OTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEt
MDQtMjkgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZVTExTQ1JFRU5fQVBJ
IG9uIFdpbmRvd3MsIFBhcnQgMjogV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01OTc4NQorCisgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRp
b24gb2YgZnVsbCBzY3JlZW4gQVBJIG9uIHdpbmRvd3MuICBObyBhbmltYXRpb24KKyAgICAgICAg
b2NjdXJzIHdoZW4gZW50ZXJpbmcgb3IgZXhpdGluZyBmdWxsIHNjcmVlbi4gIFJlLXVzZSBleGlz
dGluZyB3aW5kb3cKKyAgICAgICAgY2xhc3NlcyAoTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVl
bldpbmRvdykgdG8gaG9zdCB0aGUgd2ViVmlldy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRz
RnVsbFNjcmVlbkZvckVsZW1lbnQpOiBDYWxsIGludG8gV2ViVmlldy4KKyAgICAgICAgKFdlYkNo
cm9tZUNsaWVudDo6ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCk6IENhbGwgaW50byBXZWJGdWxs
U2NyZWVuQ29udHJvbGxlci4KKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6ZXhpdEZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgICogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjpQcml2YXRlOjpQ
cml2YXRlKTogUHJpdmF0ZSBkYXRhIHN0b3JhZ2UgY2xhc3MuCisgICAgICAgIChXZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlcjo6UHJpdmF0ZTo6flByaXZhdGUpOgorICAgICAgICAoV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXI6OlByaXZhdGU6OmZ1bGxzY3JlZW5DbGllbnRXbmRQcm9jKTogSGFuZGxlIHdp
bmRvdworICAgICAgICAgICAgbWVzc2FnZSBmb3IgZnVsbCBzY3JlZW4gd2luZG93LgorICAgICAg
ICAoV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OldlYkZ1bGxTY3JlZW5Db250cm9sbGVyKToKKyAg
ICAgICAgKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjp+V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIp
OgorICAgICAgICAoV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OnNldEVsZW1lbnQpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjplbGVtZW50KTogQWRkZWQuCisgICAg
ICAgIChXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjo6aXNGdWxsU2NyZWVuKTogQWRkZWQuCisgICAg
ICAgIChXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjo6ZW50ZXJGdWxsU2NyZWVuKTogQ3JlYXRlIGFu
ZCBkaXNwbGF5IGZ1bGwgc2NyZWVuCisgICAgICAgICAgICB3aW5kb3csIG1vdmluZyB3ZWJWaWV3
IGFzIGNoaWxkIHdpbmRvdy4KKyAgICAgICAgKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjpleGl0
RnVsbFNjcmVlbik6IERlc3Ryb3kgZnVsbCBzY3JlZW4gd2luZG93IGFuZAorICAgICAgICAgICAg
bW92ZSB3ZWJWaWV3IGJhY2sgd2hlcmUgd2UgZm91bmQgaXQuCisgICAgICAgICogV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogV2ViS2l0LnZjcHJvai9XZWJLaXQu
dmNwcm9qOgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6a2V5RG93
bik6IEhhbmRsZSB0aGUgRVNDIGtleS4KKyAgICAgICAgKFdlYlZpZXc6Om5vdGlmeVByZWZlcmVu
Y2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWV3OjpzdXBwb3J0c0Z1bGxTY3JlZW5Gb3JFbGVt
ZW50KTogRG8gbm90IHN1cHBvcnQgZnVsbCBzY3JlZW4gaWYKKyAgICAgICAgICAgIGZ1bGwgc2Ny
ZWVuIHByZWZlcmVuY2UgaXMgZGlzYWJsZWQsIG9yIGlmIGtleWJvYXJkIGFjY2VzcyBpcyByZXF1
ZXN0ZWQuCisgICAgICAgIChXZWJWaWV3Ojppc0Z1bGxTY3JlZW4pOiBBZGRlZC4KKyAgICAgICAg
KFdlYlZpZXc6OmZ1bGxTY3JlZW5Db250cm9sbGVyKTogQWRkZWQuCisgICAgICAgICogV2ViVmll
dy5oOgorCiAyMDExLTA0LTI4ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggMzY2YmM5YzNm
NGViN2M5OWI5NGI3OGVhMDc2MjBjMDE4OGU0MzVmZC4uYWJkYzk1MWI1MDNjMjcwZjUwMTcwZTNk
NWFkYjg2ZDM1Y2E5ODUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
V2ViSGlzdG9yeS5oIgogI2luY2x1ZGUgIldlYk11dGFibGVVUkxSZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiV2ViRGVza3RvcE5vdGlmaWNhdGlvbnNEZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIldlYkZ1bGxT
Y3JlZW5Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNs
dWRlICJXZWJWaWV3LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9CU3RyaW5nLmg+CkBAIC04OTAsNyAr
ODkxLDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbFNjcmVlbkZvckVsZW1l
bnQoY29uc3QgRWxlbWVudCogZWxlbWVudCwgYm9vbAogICAgICAgICAgICAgcmV0dXJuIHN1cHBv
cnRzOwogICAgIH0KIAotICAgIHJldHVybiBGQUxTRQorICAgIHJldHVybiBtX3dlYlZpZXctPnN1
cHBvcnRzRnVsbFNjcmVlbkZvckVsZW1lbnQoZWxlbWVudCwgd2l0aEtleWJvYXJkKTsKIH0KIAog
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCkKQEAgLTkwMiw2ICs5MDMsOSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJG
dWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgICAgICBpZiAodWlEZWxl
Z2F0ZVByaXZhdGU0ICYmIFNVQ0NFRURFRCh1aURlbGVnYXRlUHJpdmF0ZTQtPmVudGVyRnVsbFNj
cmVlbkZvckVsZW1lbnQoZG9tRWxlbWVudC5nZXQoKSkpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0gCisKKyAgICBtX3dlYlZpZXctPmZ1bGxTY3JlZW5Db250cm9sbGVyKCktPnNldEVsZW1l
bnQoZWxlbWVudCk7CisgICAgbV93ZWJWaWV3LT5mdWxsU2NyZWVuQ29udHJvbGxlcigpLT5lbnRl
ckZ1bGxTY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsU2NyZWVu
Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQpAQCAtOTEzLDYgKzkxNyw5IEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkK
ICAgICAgICAgaWYgKHVpRGVsZWdhdGVQcml2YXRlNCAmJiBTVUNDRUVERUQodWlEZWxlZ2F0ZVBy
aXZhdGU0LT5leGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoZG9tRWxlbWVudC5nZXQoKSkpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEFTU0VSVChlbGVtZW50ID09IG1fd2ViVmll
dy0+ZnVsbFNjcmVlbkNvbnRyb2xsZXIoKS0+ZWxlbWVudCgpKTsKKyAgICBtX3dlYlZpZXctPmZ1
bGxTY3JlZW5Db250cm9sbGVyKCktPmV4aXRGdWxsU2NyZWVuKCk7CiB9CiAKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYktpdC93aW4vV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjIyZGRhZTI3Mjc2YmU0NzBkZGZmNWMyZmEyYjE2NzU4ODYwYjczYjgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5jcHAKQEAgLTAs
MCArMSwxNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisK
KyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNp
bmNsdWRlIDxXVEYvUmVmUHRyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FbGVtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3Jl
SW5zdGFuY2VIYW5kbGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFdl
YkZ1bGxTY3JlZW5Db250cm9sbGVyOjpQcml2YXRlICA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZh
dGVGdWxsc2NyZWVuQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBQcml2YXRlKFdlYkZ1bGxTY3JlZW5D
b250cm9sbGVyKiBjb250cm9sbGVyLCBXZWJWaWV3KiB3ZWJWaWV3KSAKKyAgICAgICAgOiBjb250
cm9sbGVyKGNvbnRyb2xsZXIpCisgICAgICAgICwgd2ViVmlldyh3ZWJWaWV3KQorICAgICAgICAs
IGZ1bGxTY3JlZW5XaW5kb3coMCkKKyAgICAgICAgLCBob3N0V2luZG93KDApCisgICAgICAgICwg
b3JpZ2luYWxIb3N0KDApCisgICAgICAgICwgaXNGdWxsU2NyZWVuKDApCisgICAgeyB9CisgICAg
dmlydHVhbCB+UHJpdmF0ZSgpIHsgfQorCisgICAgdmlydHVhbCBMUkVTVUxUIGZ1bGxzY3JlZW5D
bGllbnRXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKKyAgICAKKyAgICBXZWJG
dWxsU2NyZWVuQ29udHJvbGxlciogY29udHJvbGxlcjsKKyAgICBSZWZQdHI8RWxlbWVudD4gZWxl
bWVudDsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3OworICAgIE93blB0cjxNZWRpYVBsYXllclByaXZh
dGVGdWxsc2NyZWVuV2luZG93PiBmdWxsU2NyZWVuV2luZG93OworICAgIEludFJlY3QgZnVsbFNj
cmVlbkZyYW1lOworICAgIEhXTkQgaG9zdFdpbmRvdzsKKyAgICBIV05EIG9yaWdpbmFsSG9zdDsK
KyAgICBib29sIGlzRnVsbFNjcmVlbjsKK307CisKK0xSRVNVTFQgV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXI6OlByaXZhdGU6OmZ1bGxzY3JlZW5DbGllbnRXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBt
c2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgTFJFU1VMVCBsUmVzdWx0
ID0gMDsKKworICAgIHN3aXRjaCAobXNnKSB7CisgICAgY2FzZSBXTV9DUkVBVEU6CisgICAgICAg
IGhvc3RXaW5kb3cgPSBod25kOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX01PVkU6Cisg
ICAgICAgIGZ1bGxTY3JlZW5GcmFtZS5zZXRYKExPV09SRChsUGFyYW0pKTsKKyAgICAgICAgZnVs
bFNjcmVlbkZyYW1lLnNldFkoSElXT1JEKGxQYXJhbSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdNX1NJWkU6CisgICAgICAgIGZ1bGxTY3JlZW5GcmFtZS5zZXRXaWR0aChMT1dPUkQobFBh
cmFtKSk7CisgICAgICAgIGZ1bGxTY3JlZW5GcmFtZS5zZXRIZWlnaHQoSElXT1JEKGxQYXJhbSkp
OworICAgICAgICBpZiAod2ViVmlldy0+dmlld1dpbmRvdygpKQorICAgICAgICAgICAgOjpTZXRX
aW5kb3dQb3Mod2ViVmlldy0+dmlld1dpbmRvdygpLCAwLCAwLCAwLCBmdWxsU2NyZWVuRnJhbWUu
d2lkdGgoKSwgZnVsbFNjcmVlbkZyYW1lLmhlaWdodCgpLCBTV1BfTk9SRVBPU0lUSU9OICB8IFNX
UF9OT01PVkUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0tFWURPV046CisgICAgICAg
IGlmICh3UGFyYW0gPT0gVktfRVNDQVBFKQorICAgICAgICAgICAgY29udHJvbGxlci0+ZXhpdEZ1
bGxTY3JlZW4oKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbFJlc3VsdCA9IDo6RGVmV2lu
ZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKKyAgICBjYXNlIFdNX0RFU1RST1k6
CisgICAgICAgIGhvc3RXaW5kb3cgPSAwOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbFJlc3VsdDsKK30KKworV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OldlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyKFdlYlZpZXcqIHdlYlZpZXcpCisgICAgOiBtX3ByaXZhdGUobmV3IFdlYkZ1
bGxTY3JlZW5Db250cm9sbGVyOjpQcml2YXRlKHRoaXMsIHdlYlZpZXcpKQoreworICAgIEFTU0VS
VCh3ZWJWaWV3KTsKK30KKworV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6On5XZWJGdWxsU2NyZWVu
Q29udHJvbGxlcigpCit7Cit9CisKK3ZvaWQgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OnNldEVs
ZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQoreworICAgIG1fcHJpdmF0ZS0+ZWxl
bWVudCA9IGVsZW1lbnQ7Cit9CisKK0VsZW1lbnQqIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjpl
bGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5lbGVtZW50LmdldCgpOwor
fQorCitib29sIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjppc0Z1bGxTY3JlZW4oKSBjb25zdAor
eworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRnVsbFNjcmVlbjsKK30KKwordm9pZCBXZWJGdWxs
U2NyZWVuQ29udHJvbGxlcjo6ZW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAgICBpZiAobV9wcml2YXRl
LT5pc0Z1bGxTY3JlZW4pCisgICAgICAgIHJldHVybjsKKyAgICBtX3ByaXZhdGUtPmlzRnVsbFNj
cmVlbiA9IHRydWU7CisKKyAgICBBU1NFUlQobV9wcml2YXRlLT5lbGVtZW50KTsKKyAgICBtX3By
aXZhdGUtPmVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JF
bGVtZW50KG1fcHJpdmF0ZS0+ZWxlbWVudC5nZXQoKSk7CisKKyAgICBBU1NFUlQoIW1fcHJpdmF0
ZS0+ZnVsbFNjcmVlbldpbmRvdyk7CisgICAgbV9wcml2YXRlLT5mdWxsU2NyZWVuV2luZG93ID0g
YWRvcHRQdHIobmV3IE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cobV9wcml2YXRl
LmdldCgpKSk7CisgICAgQVNTRVJUKG1fcHJpdmF0ZS0+ZnVsbFNjcmVlbldpbmRvdyk7CisKKyAg
ICBtX3ByaXZhdGUtPmZ1bGxTY3JlZW5XaW5kb3ctPmNyZWF0ZVdpbmRvdygwKTsKKyAgICBBU1NF
UlQobV9wcml2YXRlLT5ob3N0V2luZG93KTsKKworICAgIEhXTkQgb3JpZ2luYWxIb3N0ID0gMDsK
KyAgICBpZiAoRkFJTEVEKG1fcHJpdmF0ZS0+d2ViVmlldy0+aG9zdFdpbmRvdyhyZWludGVycHJl
dF9jYXN0PE9MRV9IQU5ETEUqPigmb3JpZ2luYWxIb3N0KSkpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoRkFJTEVEKG1fcHJpdmF0ZS0+d2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVy
cHJldF9jYXN0PE9MRV9IQU5ETEU+KG1fcHJpdmF0ZS0+aG9zdFdpbmRvdykpKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgSW50UmVjdCB2aWV3RnJhbWUoSW50UG9pbnQoKSwgbV9wcml2YXRlLT5m
dWxsU2NyZWVuRnJhbWUuc2l6ZSgpKTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX3ByaXZhdGUtPndl
YlZpZXctPnZpZXdXaW5kb3coKSwgSFdORF9UT1AsIDAsIDAsIHZpZXdGcmFtZS53aWR0aCgpLCB2
aWV3RnJhbWUuaGVpZ2h0KCksIFNXUF9OT1JFUE9TSVRJT04pOworICAgIG1fcHJpdmF0ZS0+d2Vi
Vmlldy0+cmVwYWludCh2aWV3RnJhbWUsIGZhbHNlLCB0cnVlKTsKKyAgICBtX3ByaXZhdGUtPm9y
aWdpbmFsSG9zdCA9IG9yaWdpbmFsSG9zdDsKKworICAgIG1fcHJpdmF0ZS0+ZWxlbWVudC0+ZG9j
dW1lbnQoKS0+d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChtX3ByaXZhdGUtPmVs
ZW1lbnQuZ2V0KCkpOworfQorCit2b2lkIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjpleGl0RnVs
bFNjcmVlbigpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPmlzRnVsbFNjcmVlbikKKyAgICAgICAg
cmV0dXJuOworICAgIG1fcHJpdmF0ZS0+aXNGdWxsU2NyZWVuID0gZmFsc2U7CisKKyAgICBBU1NF
UlQobV9wcml2YXRlLT5lbGVtZW50KTsKKyAgICBtX3ByaXZhdGUtPmVsZW1lbnQtPmRvY3VtZW50
KCktPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQobV9wcml2YXRlLT5lbGVtZW50
LmdldCgpKTsKKworICAgIEFTU0VSVChtX3ByaXZhdGUtPmhvc3RXaW5kb3cpOworICAgIGlmIChG
QUlMRUQobV9wcml2YXRlLT53ZWJWaWV3LT5zZXRIb3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8
T0xFX0hBTkRMRT4obV9wcml2YXRlLT5vcmlnaW5hbEhvc3QpKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIDo6U2hvd1dpbmRvdyhtX3ByaXZhdGUtPmhvc3RXaW5kb3csIFNXX0hJREUpOworICAg
IDo6RGVzdHJveVdpbmRvdyhtX3ByaXZhdGUtPmhvc3RXaW5kb3cpOworICAgIEFTU0VSVCghbV9w
cml2YXRlLT5ob3N0V2luZG93KTsKKyAgICBtX3ByaXZhdGUtPmZ1bGxTY3JlZW5XaW5kb3cgPSAw
OworCisgICAgbV9wcml2YXRlLT5lbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXREaWRFeGl0RnVs
bFNjcmVlbkZvckVsZW1lbnQobV9wcml2YXRlLT5lbGVtZW50LmdldCgpKTsKKyAgICBtX3ByaXZh
dGUtPmVsZW1lbnQgPSAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGdWxs
U2NyZWVuQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlOWZiOGY3NTkzNGNjNWQzZDYzYjVkNmIz
YmQ2MDU1ZTRlY2ExODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJG
dWxsU2NyZWVuQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyX2gKKyNkZWZpbmUgV2ViRnVsbFNjcmVlbkNvbnRyb2xs
ZXJfaAorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorCisjaW5jbHVkZSAiV2ViS2l0Lmgi
CisjaW5jbHVkZSA8V1RGL093blB0ci5oPgorI2luY2x1ZGUgPFdURi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgR3JhcGhpY3NM
YXllcjsKKyAgICBjbGFzcyBJbnRTaXplOworfQorCitjbGFzcyBXZWJWaWV3OworCitjbGFzcyBX
ZWJGdWxsU2NyZWVuQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXIoV2ViVmlldyopOworICAgIHZpcnR1YWwgfldlYkZ1bGxTY3JlZW5Db250cm9sbGVyKCk7
CisKK3B1YmxpYzoKKyAgICB2b2lkIHNldEVsZW1lbnQoUGFzc1JlZlB0cjxXZWJDb3JlOjpFbGVt
ZW50Pik7CisgICAgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCgpIGNvbnN0OworCisgICAgdm9p
ZCBlbnRlckZ1bGxTY3JlZW4oKTsKKyAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7CisgICAgCisg
ICAgYm9vbCBpc0Z1bGxTY3JlZW4oKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIGNsYXNzIFBy
aXZhdGU7CisgICAgZnJpZW5kIGNsYXNzIFByaXZhdGU7CisgICAgT3duUHRyPFdlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyOjpQcml2YXRlPiBtX3ByaXZhdGU7Cit9OworCisjZW5kaWYKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdC52Y3By
b2ogYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdC52Y3Byb2oKaW5kZXgg
NGQyNWY0NDhmYzE5YTI4MTA5NmIyM2FhN2RmZjVhODVkNjgwZDRkNS4uYTVkNjcyZjU1MjAyOTIz
ZTRhYmQ2MzVhMzg5NDE0M2M0YmQ0MjllYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4v
V2ViS2l0LnZjcHJvai9XZWJLaXQudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYktp
dC52Y3Byb2ovV2ViS2l0LnZjcHJvagpAQCAtNTEyLDYgKzUxMiwxMCBAQAogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxXZWJGdWxsU2NyZWVuQ29udHJv
bGxlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlxXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyLmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAt
OTI4LDYgKzkzMiwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5jcHAiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFdlYkdlb2xvY2F0aW9uUG9saWN5TGlz
dGVuZXIuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKaW5kZXggNzhi
OWJhODRmZWRhN2FjMjNkOGQ0Zjg3YzcwMDU0NDZkZmNhZWFiMC4uNjY2ZDI1NWM5MDA4YzYwMDk4
YzFlNWMxMDAyMTIxOTA0ZTAxMzY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2Vi
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKQEAgLTE2MCw2ICsx
NjAsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaW5jbHVkZSAiV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8U2hsT2JqLmg+CiAjaW5jbHVkZSA8Y29tdXRp
bC5oPgogI2luY2x1ZGUgPGRpbW0uaD4KQEAgLTE5NjIsNiArMTk2NiwxMyBAQCBib29sIFdlYlZp
ZXc6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2dCkKIAogYm9v
bCBXZWJWaWV3OjprZXlEb3duKFdQQVJBTSB2aXJ0dWFsS2V5Q29kZSwgTFBBUkFNIGtleURhdGEs
IGJvb2wgc3lzdGVtS2V5RG93bikKIHsKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAg
Ly8gVHJhcCB0aGUgRVNDIGtleSB3aGVuIGluIGZ1bGwgc2NyZWVuIG1vZGUuCisgICAgaWYgKHZp
cnR1YWxLZXlDb2RlID09IFZLX0VTQ0FQRSAmJiBpc0Z1bGxTY3JlZW4oKSkgeworICAgICAgICBt
X25ld0Z1bGxTY3JlZW5Db250cm9sbGVyLT5leGl0RnVsbFNjcmVlbigpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorI2VuZGlmCiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKICAgICBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQga2V5RXZlbnQobV92aWV3V2luZG93LCB2aXJ0dWFsS2V5Q29kZSwga2V5RGF0YSwg
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpSYXdLZXlEb3duLCBzeXN0ZW1LZXlEb3duKTsKQEAgLTQ4
NDMsNiArNDg1NCwxMyBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdl
ZChJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAgaWYgKEZBSUxFRChocikpCiAg
ICAgICAgIHJldHVybiBocjsKIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBociA9
IHByZWZzUHJpdmF0ZS0+aXNGdWxsU2NyZWVuRW5hYmxlZCgmZW5hYmxlZCk7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKyAgICBzZXR0aW5ncy0+c2V0RnVsbFNjcmVl
bkVuYWJsZWQoZW5hYmxlZCk7CisjZW5kaWYKKwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC02
NzIzLDMgKzY3NDEsMjkgQEAgdm9pZCBXZWJWaWV3OjpzZXRHbG9iYWxIaXN0b3J5SXRlbShIaXN0
b3J5SXRlbSogaGlzdG9yeUl0ZW0pCiB7CiAgICAgbV9nbG9iYWxIaXN0b3J5SXRlbSA9IGhpc3Rv
cnlJdGVtOwogfQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorYm9vbCBXZWJWaWV3Ojpz
dXBwb3J0c0Z1bGxTY3JlZW5Gb3JFbGVtZW50KGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqLCBib29s
IHdpdGhLZXlib2FyZCkgY29uc3QKK3sKKyAgICBpZiAod2l0aEtleWJvYXJkKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBCT09MIGVuYWJsZWQgPSBGQUxTRTsKKyAgICBpZiAoIW1fcHJl
ZmVyZW5jZXMgfHwgRkFJTEVEKG1fcHJlZmVyZW5jZXMtPmlzRnVsbFNjcmVlbkVuYWJsZWQoJmVu
YWJsZWQpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGVuYWJsZWQ7Cit9
CisKK2Jvb2wgV2ViVmlldzo6aXNGdWxsU2NyZWVuKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1f
bmV3RnVsbFNjcmVlbkNvbnRyb2xsZXIgJiYgbV9uZXdGdWxsU2NyZWVuQ29udHJvbGxlci0+aXNG
dWxsU2NyZWVuKCk7Cit9CisKK1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyKiBXZWJWaWV3OjpmdWxs
U2NyZWVuQ29udHJvbGxlcigpCit7CisgICAgaWYgKCFtX25ld0Z1bGxTY3JlZW5Db250cm9sbGVy
KQorICAgICAgICBtX25ld0Z1bGxTY3JlZW5Db250cm9sbGVyID0gYWRvcHRQdHIobmV3IFdlYkZ1
bGxTY3JlZW5Db250cm9sbGVyKHRoaXMpKTsKKyAgICByZXR1cm4gbV9uZXdGdWxsU2NyZWVuQ29u
dHJvbGxlci5nZXQoKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
V2ViVmlldy5oIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCmluZGV4IGM4MGIxMzVkM2Yw
Y2MxOWE3OGQyOWQwNTFlZmY4NzNiZGUyOGZiMjIuLmVlYjE2MTM2ZjIxMWIzYzY5OGQ0ZmY1OWFi
ZWZjMmZmZTM1YjNhNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgKQEAgLTU3LDYgKzU3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjsKIGNsYXNzIFdl
YkJhY2tGb3J3YXJkTGlzdDsKIGNsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViRnVsbFNjcmVlbkNv
bnRyb2xsZXI7CiBjbGFzcyBXZWJJbnNwZWN0b3I7CiBjbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQ7
CiAKQEAgLTkzNiw2ICs5MzcsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRHbG9iYWxIaXN0
b3J5SXRlbShXZWJDb3JlOjpIaXN0b3J5SXRlbSopOwogCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQorICAgIGJvb2wgc3VwcG9ydHNGdWxsU2NyZWVuRm9yRWxlbWVudChjb25zdCBXZWJDb3Jl
OjpFbGVtZW50KiwgYm9vbCB3aXRoS2V5Ym9hcmQpIGNvbnN0OworICAgIGJvb2wgaXNGdWxsU2Ny
ZWVuKCkgY29uc3Q7CisgICAgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIqIGZ1bGxTY3JlZW5Db250
cm9sbGVyKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIHNldFpvb21NdWx0aXBsaWVy
KGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgaXNUZXh0T25seSk7CiAgICAgZmxvYXQgem9vbU11bHRp
cGxpZXIoYm9vbCBpc1RleHRPbmx5KTsKQEAgLTEwOTAsNiArMTA5NywxMCBAQCBwcm90ZWN0ZWQ6
CiAgICAgSENVUlNPUiBtX2xhc3RTZXRDdXJzb3I7CiAKICAgICBSZWZQdHI8V2ViQ29yZTo6SGlz
dG9yeUl0ZW0+IG1fZ2xvYmFsSGlzdG9yeUl0ZW07CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCisgICAgT3duUHRyPFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyPiBtX25ld0Z1bGxTY3JlZW5D
b250cm9sbGVyOworI2VuZGlmCiB9OwogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91776</attachid>
            <date>2011-04-29 17:51:22 -0700</date>
            <delta_ts>2011-04-29 19:31:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59785-20110429175121.patch</filename>
            <type>text/plain</type>
            <size>17098</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODUzMjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCBjM2ZmNzNmYWZk
YmQ4YTgyNTVmNzgzNWU5M2E4YzI1ODQ4YWFhOTY3Li5mYjMxOWEyNjM0NTY4OGQ0MTI2NWMxMTA1
YTgwNjMwZDkzZGIyN2MwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEt
MDQtMjkgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZVTExTQ1JFRU5fQVBJ
IG9uIFdpbmRvd3MsIFBhcnQgMjogV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01OTc4NQorCisgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRp
b24gb2YgZnVsbCBzY3JlZW4gQVBJIG9uIHdpbmRvd3MuICBObyBhbmltYXRpb24KKyAgICAgICAg
b2NjdXJzIHdoZW4gZW50ZXJpbmcgb3IgZXhpdGluZyBmdWxsIHNjcmVlbi4gIFJlLXVzZSBleGlz
dGluZyB3aW5kb3cKKyAgICAgICAgY2xhc3NlcyAoTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVl
bldpbmRvdykgdG8gaG9zdCB0aGUgd2ViVmlldy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRz
RnVsbFNjcmVlbkZvckVsZW1lbnQpOiBDYWxsIGludG8gV2ViVmlldy4KKyAgICAgICAgKFdlYkNo
cm9tZUNsaWVudDo6ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCk6IENhbGwgaW50byBXZWJGdWxs
U2NyZWVuQ29udHJvbGxlci4KKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6ZXhpdEZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgICogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjpQcml2YXRlOjpQ
cml2YXRlKTogUHJpdmF0ZSBkYXRhIHN0b3JhZ2UgY2xhc3MuCisgICAgICAgIChXZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlcjo6UHJpdmF0ZTo6flByaXZhdGUpOgorICAgICAgICAoV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXI6OlByaXZhdGU6OmZ1bGxzY3JlZW5DbGllbnRXbmRQcm9jKTogSGFuZGxlIHdp
bmRvdworICAgICAgICAgICAgbWVzc2FnZSBmb3IgZnVsbCBzY3JlZW4gd2luZG93LgorICAgICAg
ICAoV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OldlYkZ1bGxTY3JlZW5Db250cm9sbGVyKToKKyAg
ICAgICAgKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjp+V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIp
OgorICAgICAgICAoV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OnNldEVsZW1lbnQpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjplbGVtZW50KTogQWRkZWQuCisgICAg
ICAgIChXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjo6aXNGdWxsU2NyZWVuKTogQWRkZWQuCisgICAg
ICAgIChXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjo6ZW50ZXJGdWxsU2NyZWVuKTogQ3JlYXRlIGFu
ZCBkaXNwbGF5IGZ1bGwgc2NyZWVuCisgICAgICAgICAgICB3aW5kb3csIG1vdmluZyB3ZWJWaWV3
IGFzIGNoaWxkIHdpbmRvdy4KKyAgICAgICAgKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjpleGl0
RnVsbFNjcmVlbik6IERlc3Ryb3kgZnVsbCBzY3JlZW4gd2luZG93IGFuZAorICAgICAgICAgICAg
bW92ZSB3ZWJWaWV3IGJhY2sgd2hlcmUgd2UgZm91bmQgaXQuCisgICAgICAgICogV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogV2ViS2l0LnZjcHJvai9XZWJLaXQu
dmNwcm9qOgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6a2V5RG93
bik6IEhhbmRsZSB0aGUgRVNDIGtleS4KKyAgICAgICAgKFdlYlZpZXc6Om5vdGlmeVByZWZlcmVu
Y2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWV3OjpzdXBwb3J0c0Z1bGxTY3JlZW5Gb3JFbGVt
ZW50KTogRG8gbm90IHN1cHBvcnQgZnVsbCBzY3JlZW4gaWYKKyAgICAgICAgICAgIGZ1bGwgc2Ny
ZWVuIHByZWZlcmVuY2UgaXMgZGlzYWJsZWQsIG9yIGlmIGtleWJvYXJkIGFjY2VzcyBpcyByZXF1
ZXN0ZWQuCisgICAgICAgIChXZWJWaWV3Ojppc0Z1bGxTY3JlZW4pOiBBZGRlZC4KKyAgICAgICAg
KFdlYlZpZXc6OmZ1bGxTY3JlZW5Db250cm9sbGVyKTogQWRkZWQuCisgICAgICAgICogV2ViVmll
dy5oOgorCiAyMDExLTA0LTI4ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggMzY2YmM5YzNm
NGViN2M5OWI5NGI3OGVhMDc2MjBjMDE4OGU0MzVmZC4uYWJkYzk1MWI1MDNjMjcwZjUwMTcwZTNk
NWFkYjg2ZDM1Y2E5ODUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
V2ViSGlzdG9yeS5oIgogI2luY2x1ZGUgIldlYk11dGFibGVVUkxSZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiV2ViRGVza3RvcE5vdGlmaWNhdGlvbnNEZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIldlYkZ1bGxT
Y3JlZW5Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNs
dWRlICJXZWJWaWV3LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9CU3RyaW5nLmg+CkBAIC04OTAsNyAr
ODkxLDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbFNjcmVlbkZvckVsZW1l
bnQoY29uc3QgRWxlbWVudCogZWxlbWVudCwgYm9vbAogICAgICAgICAgICAgcmV0dXJuIHN1cHBv
cnRzOwogICAgIH0KIAotICAgIHJldHVybiBGQUxTRQorICAgIHJldHVybiBtX3dlYlZpZXctPnN1
cHBvcnRzRnVsbFNjcmVlbkZvckVsZW1lbnQoZWxlbWVudCwgd2l0aEtleWJvYXJkKTsKIH0KIAog
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCkKQEAgLTkwMiw2ICs5MDMsOSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJG
dWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgICAgICBpZiAodWlEZWxl
Z2F0ZVByaXZhdGU0ICYmIFNVQ0NFRURFRCh1aURlbGVnYXRlUHJpdmF0ZTQtPmVudGVyRnVsbFNj
cmVlbkZvckVsZW1lbnQoZG9tRWxlbWVudC5nZXQoKSkpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0gCisKKyAgICBtX3dlYlZpZXctPmZ1bGxTY3JlZW5Db250cm9sbGVyKCktPnNldEVsZW1l
bnQoZWxlbWVudCk7CisgICAgbV93ZWJWaWV3LT5mdWxsU2NyZWVuQ29udHJvbGxlcigpLT5lbnRl
ckZ1bGxTY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsU2NyZWVu
Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQpAQCAtOTEzLDYgKzkxNyw5IEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkK
ICAgICAgICAgaWYgKHVpRGVsZWdhdGVQcml2YXRlNCAmJiBTVUNDRUVERUQodWlEZWxlZ2F0ZVBy
aXZhdGU0LT5leGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoZG9tRWxlbWVudC5nZXQoKSkpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEFTU0VSVChlbGVtZW50ID09IG1fd2ViVmll
dy0+ZnVsbFNjcmVlbkNvbnRyb2xsZXIoKS0+ZWxlbWVudCgpKTsKKyAgICBtX3dlYlZpZXctPmZ1
bGxTY3JlZW5Db250cm9sbGVyKCktPmV4aXRGdWxsU2NyZWVuKCk7CiB9CiAKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYktpdC93aW4vV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRmYjAxMGUzMmY2NWMwOWNiZDQ0OTc3M2ZiNTg3YWM2NzM4NThlY2MKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5jcHAKQEAgLTAs
MCArMSwxNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisK
KyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiV2ViVmll
dy5oIgorI2luY2x1ZGUgPFdURi9SZWZQdHIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0VsZW1lbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
Y2xhc3MgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OlByaXZhdGUgIDogcHVibGljIE1lZGlhUGxh
eWVyUHJpdmF0ZUZ1bGxzY3JlZW5DbGllbnQgeworcHVibGljOgorICAgIFByaXZhdGUoV2ViRnVs
bFNjcmVlbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIsIFdlYlZpZXcqIHdlYlZpZXcpIAorICAgICAg
ICA6IGNvbnRyb2xsZXIoY29udHJvbGxlcikKKyAgICAgICAgLCB3ZWJWaWV3KHdlYlZpZXcpCisg
ICAgICAgICwgZnVsbFNjcmVlbldpbmRvdygwKQorICAgICAgICAsIGhvc3RXaW5kb3coMCkKKyAg
ICAgICAgLCBvcmlnaW5hbEhvc3QoMCkKKyAgICAgICAgLCBpc0Z1bGxTY3JlZW4oMCkKKyAgICB7
IH0KKyAgICB2aXJ0dWFsIH5Qcml2YXRlKCkgeyB9CisKKyAgICB2aXJ0dWFsIExSRVNVTFQgZnVs
bHNjcmVlbkNsaWVudFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworICAgIAor
ICAgIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyKiBjb250cm9sbGVyOworICAgIFJlZlB0cjxFbGVt
ZW50PiBlbGVtZW50OworICAgIFdlYlZpZXcqIHdlYlZpZXc7CisgICAgT3duUHRyPE1lZGlhUGxh
eWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c+IGZ1bGxTY3JlZW5XaW5kb3c7CisgICAgSW50UmVj
dCBmdWxsU2NyZWVuRnJhbWU7CisgICAgSFdORCBob3N0V2luZG93OworICAgIEhXTkQgb3JpZ2lu
YWxIb3N0OworICAgIGJvb2wgaXNGdWxsU2NyZWVuOworfTsKKworTFJFU1VMVCBXZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlcjo6UHJpdmF0ZTo6ZnVsbHNjcmVlbkNsaWVudFduZFByb2MoSFdORCBod25k
LCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBMUkVTVUxU
IGxSZXN1bHQgPSAwOworCisgICAgc3dpdGNoIChtc2cpIHsKKyAgICBjYXNlIFdNX0NSRUFURToK
KyAgICAgICAgaG9zdFdpbmRvdyA9IGh3bmQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01f
TU9WRToKKyAgICAgICAgZnVsbFNjcmVlbkZyYW1lLnNldFgoTE9XT1JEKGxQYXJhbSkpOworICAg
ICAgICBmdWxsU2NyZWVuRnJhbWUuc2V0WShISVdPUkQobFBhcmFtKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV01fU0laRToKKyAgICAgICAgZnVsbFNjcmVlbkZyYW1lLnNldFdpZHRoKExP
V09SRChsUGFyYW0pKTsKKyAgICAgICAgZnVsbFNjcmVlbkZyYW1lLnNldEhlaWdodChISVdPUkQo
bFBhcmFtKSk7CisgICAgICAgIGlmICh3ZWJWaWV3LT52aWV3V2luZG93KCkpCisgICAgICAgICAg
ICA6OlNldFdpbmRvd1Bvcyh3ZWJWaWV3LT52aWV3V2luZG93KCksIDAsIDAsIDAsIGZ1bGxTY3Jl
ZW5GcmFtZS53aWR0aCgpLCBmdWxsU2NyZWVuRnJhbWUuaGVpZ2h0KCksIFNXUF9OT1JFUE9TSVRJ
T04gIHwgU1dQX05PTU9WRSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fS0VZRE9XTjoK
KyAgICAgICAgaWYgKHdQYXJhbSA9PSBWS19FU0NBUEUpCisgICAgICAgICAgICBjb250cm9sbGVy
LT5leGl0RnVsbFNjcmVlbigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsUmVzdWx0ID0g
OjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOworICAgIGNhc2UgV01f
REVTVFJPWToKKyAgICAgICAgaG9zdFdpbmRvdyA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiBsUmVzdWx0OworfQorCitXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjo6V2Vi
RnVsbFNjcmVlbkNvbnRyb2xsZXIoV2ViVmlldyogd2ViVmlldykKKyAgICA6IG1fcHJpdmF0ZShu
ZXcgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OlByaXZhdGUodGhpcywgd2ViVmlldykpCit7Cisg
ICAgQVNTRVJUKHdlYlZpZXcpOworfQorCitXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjo6fldlYkZ1
bGxTY3JlZW5Db250cm9sbGVyKCkKK3sKK30KKwordm9pZCBXZWJGdWxsU2NyZWVuQ29udHJvbGxl
cjo6c2V0RWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgbV9wcml2
YXRlLT5lbGVtZW50ID0gZWxlbWVudDsKK30KKworRWxlbWVudCogV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXI6OmVsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmVsZW1lbnQu
Z2V0KCk7Cit9CisKK2Jvb2wgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OmlzRnVsbFNjcmVlbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNGdWxsU2NyZWVuOworfQorCit2b2lk
IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjplbnRlckZ1bGxTY3JlZW4oKQoreworICAgIGlmICht
X3ByaXZhdGUtPmlzRnVsbFNjcmVlbikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcHJpdmF0ZS0+
aXNGdWxsU2NyZWVuID0gdHJ1ZTsKKworICAgIEFTU0VSVChtX3ByaXZhdGUtPmVsZW1lbnQpOwor
ICAgIG1fcHJpdmF0ZS0+ZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0V2lsbEVudGVyRnVsbFNj
cmVlbkZvckVsZW1lbnQobV9wcml2YXRlLT5lbGVtZW50LmdldCgpKTsKKworICAgIEFTU0VSVCgh
bV9wcml2YXRlLT5mdWxsU2NyZWVuV2luZG93KTsKKyAgICBtX3ByaXZhdGUtPmZ1bGxTY3JlZW5X
aW5kb3cgPSBhZG9wdFB0cihuZXcgTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdyht
X3ByaXZhdGUuZ2V0KCkpKTsKKyAgICBBU1NFUlQobV9wcml2YXRlLT5mdWxsU2NyZWVuV2luZG93
KTsKKworICAgIG1fcHJpdmF0ZS0+ZnVsbFNjcmVlbldpbmRvdy0+Y3JlYXRlV2luZG93KDApOwor
ICAgIEFTU0VSVChtX3ByaXZhdGUtPmhvc3RXaW5kb3cpOworCisgICAgSFdORCBvcmlnaW5hbEhv
c3QgPSAwOworICAgIGlmIChGQUlMRUQobV9wcml2YXRlLT53ZWJWaWV3LT5ob3N0V2luZG93KHJl
aW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRSo+KCZvcmlnaW5hbEhvc3QpKSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChGQUlMRUQobV9wcml2YXRlLT53ZWJWaWV3LT5zZXRIb3N0V2luZG93
KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4obV9wcml2YXRlLT5ob3N0V2luZG93KSkpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IHZpZXdGcmFtZShJbnRQb2ludCgpLCBtX3By
aXZhdGUtPmZ1bGxTY3JlZW5GcmFtZS5zaXplKCkpOworICAgIDo6U2V0V2luZG93UG9zKG1fcHJp
dmF0ZS0+d2ViVmlldy0+dmlld1dpbmRvdygpLCBIV05EX1RPUCwgMCwgMCwgdmlld0ZyYW1lLndp
ZHRoKCksIHZpZXdGcmFtZS5oZWlnaHQoKSwgU1dQX05PUkVQT1NJVElPTik7CisgICAgOjpTaG93
V2luZG93KG1fcHJpdmF0ZS0+aG9zdFdpbmRvdywgU1dfU0hPVyk7CisgICAgbV9wcml2YXRlLT53
ZWJWaWV3LT5yZXBhaW50KHZpZXdGcmFtZSwgZmFsc2UsIHRydWUpOworICAgIG1fcHJpdmF0ZS0+
b3JpZ2luYWxIb3N0ID0gb3JpZ2luYWxIb3N0OworCisgICAgbV9wcml2YXRlLT5lbGVtZW50LT5k
b2N1bWVudCgpLT53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KG1fcHJpdmF0ZS0+
ZWxlbWVudC5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OmV4aXRG
dWxsU2NyZWVuKCkKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+aXNGdWxsU2NyZWVuKQorICAgICAg
ICByZXR1cm47CisgICAgbV9wcml2YXRlLT5pc0Z1bGxTY3JlZW4gPSBmYWxzZTsKKworICAgIEFT
U0VSVChtX3ByaXZhdGUtPmVsZW1lbnQpOworICAgIG1fcHJpdmF0ZS0+ZWxlbWVudC0+ZG9jdW1l
bnQoKS0+d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChtX3ByaXZhdGUtPmVsZW1l
bnQuZ2V0KCkpOworCisgICAgQVNTRVJUKG1fcHJpdmF0ZS0+aG9zdFdpbmRvdyk7CisgICAgaWYg
KEZBSUxFRChtX3ByaXZhdGUtPndlYlZpZXctPnNldEhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2Fz
dDxPTEVfSEFORExFPihtX3ByaXZhdGUtPm9yaWdpbmFsSG9zdCkpKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgOjpTaG93V2luZG93KG1fcHJpdmF0ZS0+aG9zdFdpbmRvdywgU1dfSElERSk7Cisg
ICAgOjpEZXN0cm95V2luZG93KG1fcHJpdmF0ZS0+aG9zdFdpbmRvdyk7CisgICAgQVNTRVJUKCFt
X3ByaXZhdGUtPmhvc3RXaW5kb3cpOworICAgIG1fcHJpdmF0ZS0+ZnVsbFNjcmVlbldpbmRvdyA9
IDA7CisKKyAgICBtX3ByaXZhdGUtPmVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdERpZEV4aXRG
dWxsU2NyZWVuRm9yRWxlbWVudChtX3ByaXZhdGUtPmVsZW1lbnQuZ2V0KCkpOworICAgIG1fcHJp
dmF0ZS0+ZWxlbWVudCA9IDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93aW4vV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZ1
bGxTY3JlZW5Db250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGZkZTE1MWVmMjQ4MjA5YWYyNjRkNTM3
MWUzZTFmYWY4NzAxZmQ2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dl
YkZ1bGxTY3JlZW5Db250cm9sbGVyLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXJfaAorI2RlZmluZSBXZWJGdWxsU2NyZWVuQ29udHJv
bGxlcl9oCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisKKyNpbmNsdWRlICJXZWJLaXQu
aCIKKyNpbmNsdWRlIDxXVEYvT3duUHRyLmg+CisjaW5jbHVkZSA8V1RGL1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBHcmFwaGlj
c0xheWVyOworICAgIGNsYXNzIEludFNpemU7Cit9CisKK2NsYXNzIFdlYlZpZXc7CisKK2NsYXNz
IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBXZWJGdWxsU2NyZWVuQ29u
dHJvbGxlcihXZWJWaWV3Kik7CisgICAgfldlYkZ1bGxTY3JlZW5Db250cm9sbGVyKCk7CisKK3B1
YmxpYzoKKyAgICB2b2lkIHNldEVsZW1lbnQoUGFzc1JlZlB0cjxXZWJDb3JlOjpFbGVtZW50Pik7
CisgICAgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCgpIGNvbnN0OworCisgICAgdm9pZCBlbnRl
ckZ1bGxTY3JlZW4oKTsKKyAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7CisgICAgCisgICAgYm9v
bCBpc0Z1bGxTY3JlZW4oKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIGNsYXNzIFByaXZhdGU7
CisgICAgZnJpZW5kIGNsYXNzIFByaXZhdGU7CisgICAgT3duUHRyPFdlYkZ1bGxTY3JlZW5Db250
cm9sbGVyOjpQcml2YXRlPiBtX3ByaXZhdGU7Cit9OworCisjZW5kaWYKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdC52Y3Byb2ogYi9T
b3VyY2UvV2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdC52Y3Byb2oKaW5kZXggNGQyNWY0
NDhmYzE5YTI4MTA5NmIyM2FhN2RmZjVhODVkNjgwZDRkNS4uYTVkNjcyZjU1MjAyOTIzZTRhYmQ2
MzVhMzg5NDE0M2M0YmQ0MjllYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0
LnZjcHJvai9XZWJLaXQudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdC52Y3By
b2ovV2ViS2l0LnZjcHJvagpAQCAtNTEyLDYgKzUxMiwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5o
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxXZWJH
ZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyLmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtOTI4LDYg
KzkzMiwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFdlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXIu
Y3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dl
YlZpZXcuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKaW5kZXggNzhiOWJhODRm
ZWRhN2FjMjNkOGQ0Zjg3YzcwMDU0NDZkZmNhZWFiMC4uNjY2ZDI1NWM5MDA4YzYwMDk4YzFlNWMx
MDAyMTIxOTA0ZTAxMzY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKQEAgLTE2MCw2ICsxNjAsMTAg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaW5jbHVkZSAiV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIu
aCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8U2hsT2JqLmg+CiAjaW5jbHVkZSA8Y29tdXRpbC5oPgog
I2luY2x1ZGUgPGRpbW0uaD4KQEAgLTE5NjIsNiArMTk2NiwxMyBAQCBib29sIFdlYlZpZXc6Omhh
bmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2dCkKIAogYm9vbCBXZWJW
aWV3OjprZXlEb3duKFdQQVJBTSB2aXJ0dWFsS2V5Q29kZSwgTFBBUkFNIGtleURhdGEsIGJvb2wg
c3lzdGVtS2V5RG93bikKIHsKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgLy8gVHJh
cCB0aGUgRVNDIGtleSB3aGVuIGluIGZ1bGwgc2NyZWVuIG1vZGUuCisgICAgaWYgKHZpcnR1YWxL
ZXlDb2RlID09IFZLX0VTQ0FQRSAmJiBpc0Z1bGxTY3JlZW4oKSkgeworICAgICAgICBtX25ld0Z1
bGxTY3JlZW5Db250cm9sbGVyLT5leGl0RnVsbFNjcmVlbigpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorI2VuZGlmCiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKICAgICBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQga2V5RXZlbnQobV92aWV3V2luZG93LCB2aXJ0dWFsS2V5Q29kZSwga2V5RGF0YSwgUGxhdGZv
cm1LZXlib2FyZEV2ZW50OjpSYXdLZXlEb3duLCBzeXN0ZW1LZXlEb3duKTsKQEAgLTQ4NDMsNiAr
NDg1NCwxMyBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChJV2Vi
Tm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAg
IHJldHVybiBocjsKIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBociA9IHByZWZz
UHJpdmF0ZS0+aXNGdWxsU2NyZWVuRW5hYmxlZCgmZW5hYmxlZCk7CisgICAgaWYgKEZBSUxFRCho
cikpCisgICAgICAgIHJldHVybiBocjsKKyAgICBzZXR0aW5ncy0+c2V0RnVsbFNjcmVlbkVuYWJs
ZWQoZW5hYmxlZCk7CisjZW5kaWYKKwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC02NzIzLDMg
KzY3NDEsMjkgQEAgdm9pZCBXZWJWaWV3OjpzZXRHbG9iYWxIaXN0b3J5SXRlbShIaXN0b3J5SXRl
bSogaGlzdG9yeUl0ZW0pCiB7CiAgICAgbV9nbG9iYWxIaXN0b3J5SXRlbSA9IGhpc3RvcnlJdGVt
OwogfQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorYm9vbCBXZWJWaWV3OjpzdXBwb3J0
c0Z1bGxTY3JlZW5Gb3JFbGVtZW50KGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqLCBib29sIHdpdGhL
ZXlib2FyZCkgY29uc3QKK3sKKyAgICBpZiAod2l0aEtleWJvYXJkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBCT09MIGVuYWJsZWQgPSBGQUxTRTsKKyAgICBpZiAoIW1fcHJlZmVyZW5j
ZXMgfHwgRkFJTEVEKG1fcHJlZmVyZW5jZXMtPmlzRnVsbFNjcmVlbkVuYWJsZWQoJmVuYWJsZWQp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGVuYWJsZWQ7Cit9CisKK2Jv
b2wgV2ViVmlldzo6aXNGdWxsU2NyZWVuKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fbmV3RnVs
bFNjcmVlbkNvbnRyb2xsZXIgJiYgbV9uZXdGdWxsU2NyZWVuQ29udHJvbGxlci0+aXNGdWxsU2Ny
ZWVuKCk7Cit9CisKK1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyKiBXZWJWaWV3OjpmdWxsU2NyZWVu
Q29udHJvbGxlcigpCit7CisgICAgaWYgKCFtX25ld0Z1bGxTY3JlZW5Db250cm9sbGVyKQorICAg
ICAgICBtX25ld0Z1bGxTY3JlZW5Db250cm9sbGVyID0gYWRvcHRQdHIobmV3IFdlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyKHRoaXMpKTsKKyAgICByZXR1cm4gbV9uZXdGdWxsU2NyZWVuQ29udHJvbGxl
ci5nZXQoKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViVmll
dy5oIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCmluZGV4IGM4MGIxMzVkM2YwY2MxOWE3
OGQyOWQwNTFlZmY4NzNiZGUyOGZiMjIuLmNjYzY3YTY0NGNmMGEzYTkwNTJkNzY3ZDkxOWYxMzdj
OTk1ZjhlZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaAorKysgYi9T
b3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgKQEAgLTU3LDkgKzU3LDE0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI7CiBjbGFzcyBXZWJCYWNr
Rm9yd2FyZExpc3Q7CiBjbGFzcyBXZWJGcmFtZTsKK2NsYXNzIFdlYkZ1bGxTY3JlZW5Db250cm9s
bGVyOwogY2xhc3MgV2ViSW5zcGVjdG9yOwogY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50OwogCisj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorY2xhc3MgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI7
CisjZW5kaWYKKwogdHlwZWRlZiBXZWJDb3JlOjpSZWZDb3VudGVkR0RJSGFuZGxlPEhCSVRNQVA+
IFJlZkNvdW50ZWRIQklUTUFQOwogdHlwZWRlZiBXZWJDb3JlOjpSZWZDb3VudGVkR0RJSGFuZGxl
PEhSR04+IFJlZkNvdW50ZWRIUkdOOwogCkBAIC05MzYsNiArOTQxLDEyIEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgc2V0R2xvYmFsSGlzdG9yeUl0ZW0oV2ViQ29yZTo6SGlzdG9yeUl0ZW0qKTsKIAor
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBib29sIHN1cHBvcnRzRnVsbFNjcmVlbkZv
ckVsZW1lbnQoY29uc3QgV2ViQ29yZTo6RWxlbWVudCosIGJvb2wgd2l0aEtleWJvYXJkKSBjb25z
dDsKKyAgICBib29sIGlzRnVsbFNjcmVlbigpIGNvbnN0OworICAgIFdlYkZ1bGxTY3JlZW5Db250
cm9sbGVyKiBmdWxsU2NyZWVuQ29udHJvbGxlcigpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAg
dm9pZCBzZXRab29tTXVsdGlwbGllcihmbG9hdCBtdWx0aXBsaWVyLCBib29sIGlzVGV4dE9ubHkp
OwogICAgIGZsb2F0IHpvb21NdWx0aXBsaWVyKGJvb2wgaXNUZXh0T25seSk7CkBAIC0xMDkwLDYg
KzExMDEsMTAgQEAgcHJvdGVjdGVkOgogICAgIEhDVVJTT1IgbV9sYXN0U2V0Q3Vyc29yOwogCiAg
ICAgUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiBtX2dsb2JhbEhpc3RvcnlJdGVtOworCisj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIE93blB0cjxXZWJGdWxsU2NyZWVuQ29udHJv
bGxlcj4gbV9uZXdGdWxsU2NyZWVuQ29udHJvbGxlcjsKKyNlbmRpZgogfTsKIAogI2VuZGlmCg==
</data>
<flag name="review"
          id="84656"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>