<?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>27713</bug_id>
          
          <creation_ts>2009-07-27 07:19:47 -0700</creation_ts>
          <short_desc>WINCE port: make plugin work for wince</short_desc>
          <delta_ts>2009-07-28 12:14:12 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</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>23154</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Yong Li">yong.li.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>manyoso</cc>
    
    <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>134911</commentid>
    <comment_count>0</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-27 07:19:47 -0700</bug_when>
    <thetext>patch is following</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134913</commentid>
    <comment_count>1</comment_count>
      <attachid>33545</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-27 07:36:48 -0700</bug_when>
    <thetext>Created attachment 33545
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134914</commentid>
    <comment_count>2</comment_count>
      <attachid>33545</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-07-27 07:48:04 -0700</bug_when>
    <thetext>Comment on attachment 33545
the patch


&gt; +DWORD SHGetValue(HKEY hkey, LPCWSTR pszSubKey, LPCWSTR pszValue, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData)
&gt; +{
&gt; +    HKEY key;
&gt; +	if (RegOpenKeyEx(hkey, pszSubKey, 0, 0, &amp;key) == ERROR_SUCCESS) {
&gt; +        DWORD result = RegQueryValueEx(key, pszValue, 0, pdwType, (LPBYTE)pvData, pcbData);
&gt; +        RegCloseKey(key);
&gt; +        return result;
&gt; +	}
&gt; +    return ERROR_INVALID_NAME;
&gt; +}

  Tabs should be removed.


&gt;      HKEY key;
&gt; +#if PLATFORM(WINCE)
&gt; +    HRESULT result = RegOpenKeyExW(rootKey, L&quot;Software\\MozillaPlugins&quot;, 0, 0, &amp;key);
&gt; +#else
&gt;      HRESULT result = RegOpenKeyExW(rootKey, L&quot;Software\\MozillaPlugins&quot;, 0, KEY_ENUMERATE_SUB_KEYS, &amp;key);
&gt; +#endif

   Does it make more sense to #define KEY_ENUMERATE_SUB_KEYS if it&apos;s not available?

&gt;  static inline void addWindowsMediaPlayerPluginDirectory(Vector&lt;String&gt;&amp; directories)
&gt;  {
&gt; +#if PLATFORM(WINCE)
&gt; +#else
   Change to #if !PLATFORM(WINCE)

&gt;  static inline void addMacromediaPluginDirectories(Vector&lt;String&gt;&amp; directories)
&gt;  {
&gt; +#if PLATFORM(WINCE)
&gt; +    directories.append(&quot;\\Windows\\System\\macromed\\Flash&quot;);
&gt; +#else

   Is this valid?

&gt; -    NP_Initialize = (NP_InitializeFuncPtr)GetProcAddress(m_module, &quot;NP_Initialize&quot;);
&gt; -    NP_GetEntryPoints = (NP_GetEntryPointsFuncPtr)GetProcAddress(m_module, &quot;NP_GetEntryPoints&quot;);
&gt; -    m_NPP_Shutdown = (NPP_ShutdownProcPtr)GetProcAddress(m_module, &quot;NP_Shutdown&quot;);
&gt; +    NP_Initialize = (NP_InitializeFuncPtr)GetProcAddress(m_module, _T(&quot;NP_Initialize&quot;));
&gt; +    NP_GetEntryPoints = (NP_GetEntryPointsFuncPtr)GetProcAddress(m_module, _T(&quot;NP_GetEntryPoints&quot;));
&gt; +    m_NPP_Shutdown = (NPP_ShutdownProcPtr)GetProcAddress(m_module, _T(&quot;NP_Shutdown&quot;));

   Will this not affect the Win32 build?
 
&gt; @@ -264,6 +284,10 @@ static bool isWindowsMessageUserGesture(UINT message)
&gt;  LRESULT
&gt;  PluginView::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
&gt;  {
&gt; +#if PLATFORM(WINCE)
&gt; +    if (!m_pluginWndProc)
&gt; +        return 1;
&gt; +#endif

   Can this be unconditional on WINCE?

&gt; +#if PLATFORM(WINCE)
&gt; +    m_windowRect = frameView-&gt;contentsToWindow(frameRect());
&gt; +#else
&gt;      m_windowRect = IntRect(frameView-&gt;contentsToWindow(frameRect().location()), frameRect().size());
&gt; +#endif

   The difference here concerns me.

&gt; @@ -491,15 +525,24 @@ void PluginView::paint(GraphicsContext* context, const IntRect&amp; rect)
&gt;      m_npWindow.type = NPWindowTypeDrawable;
&gt;      m_npWindow.window = hdc;
&gt;  
&gt; -    IntPoint p = static_cast&lt;FrameView*&gt;(parent())-&gt;contentsToWindow(frameRect().location());
&gt; -    
&gt;      WINDOWPOS windowpos;
&gt;      memset(&amp;windowpos, 0, sizeof(windowpos));
&gt;  
&gt; +#if PLATFORM(WINCE)
&gt; +    IntRect r = static_cast&lt;FrameView*&gt;(parent())-&gt;contentsToWindow(frameRect());
&gt; +    
&gt; +    windowpos.x = r.x();
&gt; +    windowpos.y = r.y();
&gt; +    windowpos.cx = r.width();
&gt; +    windowpos.cy = r.height();
&gt; +#else
&gt; +    IntPoint p = static_cast&lt;FrameView*&gt;(parent())-&gt;contentsToWindow(frameRect().location());
&gt; +    
&gt;      windowpos.x = p.x();
&gt;      windowpos.y = p.y();
&gt;      windowpos.cx = frameRect().width();
&gt;      windowpos.cy = frameRect().height();
&gt; +#endif

  Likewise.  Why are the coordinates behaving so differently?
&gt; @@ -697,14 +770,24 @@ void PluginView::stop()
&gt;  
&gt;      ASSERT(m_streams.isEmpty());
&gt;  
&gt; +    if (m_manualStream)
&gt; +        m_manualStream-&gt;stop();
&gt; +
&gt;      m_isStarted = false;

   This looks like it will affect the Win32 case.  Should probably be checked in separately if it&apos;s valid there too.

&gt;  #if PLATFORM(WIN_OS) &amp;&amp; PLATFORM(QT)
&gt;          m_window = window;
&gt;  #else
&gt;          setPlatformWidget(window);
&gt; +        m_isWindowed = true;
&gt;  #endif

   Same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134916</commentid>
    <comment_count>3</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-27 08:01:24 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 33545 [details])
&gt; 
&gt; 
&gt; &gt;      HKEY key;
&gt; &gt; +#if PLATFORM(WINCE)
&gt; &gt; +    HRESULT result = RegOpenKeyExW(rootKey, L&quot;Software\\MozillaPlugins&quot;, 0, 0, &amp;key);
&gt; &gt; +#else
&gt; &gt;      HRESULT result = RegOpenKeyExW(rootKey, L&quot;Software\\MozillaPlugins&quot;, 0, KEY_ENUMERATE_SUB_KEYS, &amp;key);
&gt; &gt; +#endif
&gt; 
&gt;    Does it make more sense to #define KEY_ENUMERATE_SUB_KEYS if it&apos;s not
&gt; available?
&gt; 

KEY_ENUMERATE_SUB_KEYS is defined by OS header where RegOpenKeyExW is defined.

 
&gt; &gt; -    NP_Initialize = (NP_InitializeFuncPtr)GetProcAddress(m_module, &quot;NP_Initialize&quot;);
&gt; &gt; -    NP_GetEntryPoints = (NP_GetEntryPointsFuncPtr)GetProcAddress(m_module, &quot;NP_GetEntryPoints&quot;);
&gt; &gt; -    m_NPP_Shutdown = (NPP_ShutdownProcPtr)GetProcAddress(m_module, &quot;NP_Shutdown&quot;);
&gt; &gt; +    NP_Initialize = (NP_InitializeFuncPtr)GetProcAddress(m_module, _T(&quot;NP_Initialize&quot;));
&gt; &gt; +    NP_GetEntryPoints = (NP_GetEntryPointsFuncPtr)GetProcAddress(m_module, _T(&quot;NP_GetEntryPoints&quot;));
&gt; &gt; +    m_NPP_Shutdown = (NPP_ShutdownProcPtr)GetProcAddress(m_module, _T(&quot;NP_Shutdown&quot;));
&gt; 
&gt;    Will this not affect the Win32 build?

No, it won&apos;t affect win32 build. If GetProcAddress means GetProcAddressW, _T&quot;&quot; means L&quot;&quot;. If GetProcAddress means GetProcAddressA, _T&quot;&quot; means &quot;&quot;.

&gt; 
&gt; &gt; @@ -264,6 +284,10 @@ static bool isWindowsMessageUserGesture(UINT message)
&gt; &gt;  LRESULT
&gt; &gt;  PluginView::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
&gt; &gt;  {
&gt; &gt; +#if PLATFORM(WINCE)
&gt; &gt; +    if (!m_pluginWndProc)
&gt; &gt; +        return 1;
&gt; &gt; +#endif
&gt; 
&gt;    Can this be unconditional on WINCE?
&gt; 
&gt; &gt; +#if PLATFORM(WINCE)
&gt; &gt; +    m_windowRect = frameView-&gt;contentsToWindow(frameRect());
&gt; &gt; +#else
&gt; &gt;      m_windowRect = IntRect(frameView-&gt;contentsToWindow(frameRect().location()), frameRect().size());
&gt; &gt; +#endif
&gt; 
&gt;    The difference here concerns me.

Because we support zoomed view. so frameRect().size() doesn&apos;t work for us

&gt; 
&gt; &gt; @@ -491,15 +525,24 @@ void PluginView::paint(GraphicsContext* context, const IntRect&amp; rect)
&gt; &gt;      m_npWindow.type = NPWindowTypeDrawable;
&gt; &gt;      m_npWindow.window = hdc;
&gt; &gt;  
&gt; &gt; -    IntPoint p = static_cast&lt;FrameView*&gt;(parent())-&gt;contentsToWindow(frameRect().location());
&gt; &gt; -    
&gt; &gt;      WINDOWPOS windowpos;
&gt; &gt;      memset(&amp;windowpos, 0, sizeof(windowpos));
&gt; &gt;  
&gt; &gt; +#if PLATFORM(WINCE)
&gt; &gt; +    IntRect r = static_cast&lt;FrameView*&gt;(parent())-&gt;contentsToWindow(frameRect());
&gt; &gt; +    
&gt; &gt; +    windowpos.x = r.x();
&gt; &gt; +    windowpos.y = r.y();
&gt; &gt; +    windowpos.cx = r.width();
&gt; &gt; +    windowpos.cy = r.height();
&gt; &gt; +#else
&gt; &gt; +    IntPoint p = static_cast&lt;FrameView*&gt;(parent())-&gt;contentsToWindow(frameRect().location());
&gt; &gt; +    
&gt; &gt;      windowpos.x = p.x();
&gt; &gt;      windowpos.y = p.y();
&gt; &gt;      windowpos.cx = frameRect().width();
&gt; &gt;      windowpos.cy = frameRect().height();
&gt; &gt; +#endif
&gt; 
&gt;   Likewise.  Why are the coordinates behaving so differently?

same reason as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134923</commentid>
    <comment_count>4</comment_count>
      <attachid>33547</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-27 08:36:55 -0700</bug_when>
    <thetext>Created attachment 33547
updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134924</commentid>
    <comment_count>5</comment_count>
      <attachid>33548</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-27 08:44:21 -0700</bug_when>
    <thetext>Created attachment 33548
more cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134926</commentid>
    <comment_count>6</comment_count>
      <attachid>33550</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-27 08:57:56 -0700</bug_when>
    <thetext>Created attachment 33550
fix a bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135028</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-27 15:01:14 -0700</bug_when>
    <thetext>Landed with r46430.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33545</attachid>
            <date>2009-07-27 07:36:48 -0700</date>
            <delta_ts>2009-07-27 08:44:21 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>27713.patch</filename>
            <type>text/plain</type>
            <size>18444</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWQ4ZTY3Zi4uOGU4ODg0ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAwOS0wNy0yNyAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1ha2UgcGx1Z2luIHdvcmsgb24gV0lOQ0UgcGxhdGZvcm0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NzEzCisKKyAgICAg
ICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHA6CisgICAgICAgIChTSEdldFZh
bHVlKToKKyAgICAgICAgKFBhdGhSZW1vdmVGaWxlU3BlYyk6CisgICAgICAgIChXZWJDb3JlOjph
ZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjphZGRXaW5kb3dz
TWVkaWFQbGF5ZXJQbHVnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6YWRkTWFjcm9t
ZWRpYVBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5QYWNr
YWdlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmxvYWQpOgorICAg
ICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cmVnaXN0ZXJQbHVnaW5WaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnduZFBy
b2MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
ZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppbml0KToKKwogMjAwOS0wNy0yNCAgS2VubmV0
aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVp
bGQgZml4IGZvciA2NCBiaXQgTGludXguCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpbkRhdGFiYXNlV2luLmNwcCBiL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJh
c2VXaW4uY3BwCmluZGV4IGM1OWYxMzMuLjUzNjQ2ZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luRGF0YWJhc2VXaW4uY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTIgKzM4LDU0IEBA
CiAjZGVmaW5lIF9jb3VudG9mKHgpIChzaXplb2YoeCkvc2l6ZW9mKHhbMF0pKQogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShXSU5DRSkgCitEV09SRCBTSEdldFZhbHVlKEhLRVkgaGtleSwgTFBDV1NU
UiBwc3pTdWJLZXksIExQQ1dTVFIgcHN6VmFsdWUsIExQRFdPUkQgcGR3VHlwZSwgTFBWT0lEIHB2
RGF0YSwgTFBEV09SRCBwY2JEYXRhKQoreworICAgIEhLRVkga2V5OworCWlmIChSZWdPcGVuS2V5
RXgoaGtleSwgcHN6U3ViS2V5LCAwLCAwLCAma2V5KSA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAg
ICAgIERXT1JEIHJlc3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChrZXksIHBzelZhbHVlLCAwLCBwZHdU
eXBlLCAoTFBCWVRFKXB2RGF0YSwgcGNiRGF0YSk7CisgICAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisJfQorICAgIHJldHVybiBFUlJPUl9JTlZBTElEX05B
TUU7Cit9CisKK0JPT0wgUGF0aFJlbW92ZUZpbGVTcGVjKExQV1NUUiBtb2R1bGVGaWxlTmFtZVN0
cikKK3sKKyAgICBpZiAoISptb2R1bGVGaWxlTmFtZVN0cikKKyAgICAgICAgcmV0dXJuIEZBTFNF
OworCisgICAgTFBXU1RSIGxhc3RQb3MgPSAwOworICAgIExQV1NUUiBjdXJQb3MgPSBtb2R1bGVG
aWxlTmFtZVN0cjsKKyAgICBkbyB7CisgICAgICAgIGlmICgqY3VyUG9zID09IEwnLycgfHwgKmN1
clBvcyA9PSBMJ1xcJykKKyAgICAgICAgICAgIGxhc3RQb3MgPSBjdXJQb3M7CisgICAgfSB3aGls
ZSAoKisrY3VyUG9zKTsKKworICAgIGlmIChsYXN0UG9zID09IGN1clBvcyAtIDEpCisgICAgICAg
IHJldHVybiBGQUxTRTsKKworICAgIGlmIChsYXN0UG9zKQorICAgICAgICAqbGFzdFBvcyA9IDA7
CisgICAgZWxzZSB7CisgICAgICAgIG1vZHVsZUZpbGVOYW1lU3RyWzBdID0gTCdcXCc7CisgICAg
ICAgIG1vZHVsZUZpbGVOYW1lU3RyWzFdID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsK
K30KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeShIS0VZIHJvb3RLZXksIEhhc2hTZXQ8U3RyaW5nPiYg
cGF0aHMpCiB7CiAgICAgSEtFWSBrZXk7CisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAgSFJFU1VM
VCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXksIEwiU29mdHdhcmVcXE1vemlsbGFQbHVn
aW5zIiwgMCwgMCwgJmtleSk7CisjZWxzZQogICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3Blbktl
eUV4Vyhyb290S2V5LCBMIlNvZnR3YXJlXFxNb3ppbGxhUGx1Z2lucyIsIDAsIEtFWV9FTlVNRVJB
VEVfU1VCX0tFWVMsICZrZXkpOworI2VuZGlmCiAKICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NV
Q0NFU1MpCiAgICAgICAgIHJldHVybjsKQEAgLTIxMCwxMiArMjUzLDE1IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBhZGRNb3ppbGxhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVj
dG9yaWVzKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2lu
RGlyZWN0b3J5KFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKIHsKKyNpZiBQTEFURk9STShX
SU5DRSkKKyNlbHNlCiAgICAgLy8gVGhlIG5ldyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5zdGFs
bGVkIGluIFxQRmlsZXNcUGx1Z2lucyBpZiBpdCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGluc3Rh
bGxzCiAgICAgV0NIQVIgcGx1Z2luRGlyZWN0b3J5U3RyW19NQVhfUEFUSCArIDFdOwogICAgIERX
T1JEIHBsdWdpbkRpcmVjdG9yeVNpemUgPSA6OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coVEVY
VCgiJVNZU1RFTURSSVZFJVxcUEZpbGVzXFxQbHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0ciwg
X2NvdW50b2YocGx1Z2luRGlyZWN0b3J5U3RyKSk7CiAKICAgICBpZiAocGx1Z2luRGlyZWN0b3J5
U2l6ZSA+IDAgJiYgcGx1Z2luRGlyZWN0b3J5U2l6ZSA8PSBfY291bnRvZihwbHVnaW5EaXJlY3Rv
cnlTdHIpKQogICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9y
eVN0ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAtIDEpKTsKKyNlbmRpZgogCiAgICAgRFdPUkQgdHlw
ZTsKICAgICBXQ0hBUiBpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKQEAgLTMx
MSw2ICszNTcsOSBAQCBleGl0OgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBs
dWdpbkRpcmVjdG9yaWVzKFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKIHsKKyNpZiBQTEFU
Rk9STShXSU5DRSkKKyAgICBkaXJlY3Rvcmllcy5hcHBlbmQoIlxcV2luZG93c1xcU3lzdGVtXFxt
YWNyb21lZFxcRmxhc2giKTsKKyNlbHNlCiAgICAgV0NIQVIgc3lzdGVtRGlyZWN0b3J5U3RyW01B
WF9QQVRIXTsKIAogICAgIGlmIChHZXRTeXN0ZW1EaXJlY3Rvcnkoc3lzdGVtRGlyZWN0b3J5U3Ry
LCBfY291bnRvZihzeXN0ZW1EaXJlY3RvcnlTdHIpKSA9PSAwKQpAQCAtMzIzLDYgKzM3Miw3IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9y
PFN0cmluZz4mIGRpcmVjdG9yaWVzKQogCiAgICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVj
dG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEw
IikpOwogICAgIGRpcmVjdG9yaWVzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKKyNl
bmRpZgogfQogCiBWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRp
cmVjdG9yaWVzKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2Fn
ZVdpbi5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCmluZGV4
IDQwZDliMmEuLjUwZmQwMTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
UGFja2FnZVdpbi5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2lu
LmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBU
b3JjaCBNb2JpbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI0NCw2ICsyNDUsNyBAQCBib29sIFBsdWdpblBhY2thZ2U6Omxv
YWQoKQogICAgICAgICBtX2xvYWRDb3VudCsrOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
IGVsc2UgeworI2lmICFQTEFURk9STShXSU5DRSkKICAgICAgICAgV0NIQVIgY3VycmVudFBhdGhb
TUFYX1BBVEhdOwogCiAgICAgICAgIGlmICghOjpHZXRDdXJyZW50RGlyZWN0b3J5VyhNQVhfUEFU
SCwgY3VycmVudFBhdGgpKQpAQCAtMjUzLDE1ICsyNTUsMTggQEAgYm9vbCBQbHVnaW5QYWNrYWdl
Ojpsb2FkKCkKIAogICAgICAgICBpZiAoITo6U2V0Q3VycmVudERpcmVjdG9yeVcocGF0aC5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgogCiAgICAgICAgIC8vIExvYWQgdGhlIGxpYnJhcnkKICAgICAgICAgbV9tb2R1bGUg
PSA6OkxvYWRMaWJyYXJ5RXhXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
LCAwLCBMT0FEX1dJVEhfQUxURVJFRF9TRUFSQ0hfUEFUSCk7CiAKKyNpZiAhUExBVEZPUk0oV0lO
Q0UpCiAgICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsK
ICAgICAgICAgICAgIGlmIChtX21vZHVsZSkKICAgICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5
KG1fbW9kdWxlKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorI2VuZGlm
CiAgICAgfQogCiAgICAgaWYgKCFtX21vZHVsZSkKQEAgLTI3MywxMyArMjc4LDEzIEBAIGJvb2wg
UGx1Z2luUGFja2FnZTo6bG9hZCgpCiAgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlh
bGl6ZSA9IDA7CiAgICAgTlBFcnJvciBucEVycjsKIAotICAgIE5QX0luaXRpYWxpemUgPSAoTlBf
SW5pdGlhbGl6ZUZ1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9Jbml0aWFsaXpl
Iik7Ci0gICAgTlBfR2V0RW50cnlQb2ludHMgPSAoTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKUdl
dFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfR2V0RW50cnlQb2ludHMiKTsKLSAgICBtX05QUF9T
aHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAi
TlBfU2h1dGRvd24iKTsKKyAgICBOUF9Jbml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRy
KUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCBfVCgiTlBfSW5pdGlhbGl6ZSIpKTsKKyAgICBOUF9H
ZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3Mo
bV9tb2R1bGUsIF9UKCJOUF9HZXRFbnRyeVBvaW50cyIpKTsKKyAgICBtX05QUF9TaHV0ZG93biA9
IChOUFBfU2h1dGRvd25Qcm9jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCBfVCgiTlBfU2h1
dGRvd24iKSk7CiAKICAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwgIU5QX0dldEVudHJ5UG9pbnRz
IHx8ICFtX05QUF9TaHV0ZG93bikKICAgICAgICAgZ290byBhYm9ydDsKLSAgCisKICAgICBtZW1z
ZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7CiAgICAgbV9wbHVn
aW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwIGIvV2ViQ29yZS9wbHVnaW5zL3dpbi9Q
bHVnaW5WaWV3V2luLmNwcAppbmRleCBmMGEyYTE0Li5kZmVhOWNhIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy93
aW4vUGx1Z2luVmlld1dpbi5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDYgKzY2LDEzIEBA
CiAjaW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUu
aD4KIAorI2lmIFBMQVRGT1JNKFdJTkNFKQorI3VuZGVmIExPR19OUEVSUk9SCisjZGVmaW5lIExP
R19OUEVSUk9SKHgpCisjdW5kZWYgTE9HX1BMVUdJTl9ORVRfRVJST1IKKyNkZWZpbmUgTE9HX1BM
VUdJTl9ORVRfRVJST1IoKQorI2VuZGlmCisKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxR
V2lkZ2V0Lmg+CiAjZW5kaWYKQEAgLTk4LDYgKzEwNiw3IEBAIGNvbnN0IExQQ1dTVFIga1dlYlBs
dWdpblZpZXdQcm9wZXJ0eSA9IEwiV2ViUGx1Z2luVmlld1Byb3BlcnR5IjsKIAogc3RhdGljIGNv
bnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdp
bmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIwMDYxMDEwIEZpcmVmb3gvMi4w
IjsKIAorI2lmICFQTEFURk9STShXSU5DRSkKIC8vIFRoZSBjb2RlIHVzZWQgdG8gaG9vayBCZWdp
blBhaW50L0VuZFBhaW50IG9yaWdpbmFsbHkgY2FtZSBmcm9tCiAvLyA8aHR0cDovL3d3dy5mZW5n
eXVhbi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+LgogLy8gQ29weXJpZ2h0IChDKSAyMDAwIGJ5
IEZlbmcgWXVhbiAod3d3LmZlbmd5dWFuLmNvbSkuCkBAIC0yMDcsNiArMjE2LDcgQEAgc3RhdGlj
IHZvaWQgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tzKEhEQyAoV0lOQVBJKmhvb2tlZEJlZ2lu
UGFpbnQpKEhXTkQsIFBBSU4KICAgICBob29rKCJ1c2VyMzIuZGxsIiwgIkVuZFBhaW50IiwgZW5k
UGFpbnRTeXNDYWxsLCBlbmRQYWludCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkICo+KHJl
aW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pihob29rZWRFbmRQYWludCkpKTsKIAogfQorI2VuZGlm
CiAKIHN0YXRpYyBib29sIHJlZ2lzdGVyUGx1Z2luVmlldygpCiB7CkBAIC0yMjIsMTEgKzIzMiwx
OCBAQCBzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXcoKQogCiAgICAgQVNTRVJUKFBhZ2U6
Omluc3RhbmNlSGFuZGxlKCkpOwogCisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAgV05EQ0xBU1Mg
d2NleCA9IHsgMCB9OworI2Vsc2UKICAgICBXTkRDTEFTU0VYIHdjZXg7Ci0KICAgICB3Y2V4LmNi
U2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKKyAgICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsK
KyNlbmRpZgogCiAgICAgd2NleC5zdHlsZSAgICAgICAgICA9IENTX0RCTENMS1M7CisjaWYgUExB
VEZPUk0oV0lOQ0UpCisgICAgd2NleC5zdHlsZSAgICAgICAgICB8PSBDU19QQVJFTlREQzsKKyNl
bmRpZgogICAgIHdjZXgubHBmblduZFByb2MgICAgPSBEZWZXaW5kb3dQcm9jOwogICAgIHdjZXgu
Y2JDbHNFeHRyYSAgICAgPSAwOwogICAgIHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOwpAQCAtMjM2
LDkgKzI1MywxMiBAQCBzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXcoKQogICAgIHdjZXgu
aGJyQmFja2dyb3VuZCAgPSAoSEJSVVNIKUNPTE9SX1dJTkRPVzsKICAgICB3Y2V4Lmxwc3pNZW51
TmFtZSAgID0gMDsKICAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0ga1dlYlBsdWdpblZpZXdkb3dD
bGFzc05hbWU7Ci0gICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7CiAKKyNpZiBQTEFURk9STShX
SU5DRSkKKyAgICByZXR1cm4gISFSZWdpc3RlckNsYXNzKCZ3Y2V4KTsKKyNlbHNlCiAgICAgcmV0
dXJuICEhUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKKyNlbmRpZgogfQogCiBMUkVTVUxUIENBTExC
QUNLIFBsdWdpblZpZXc6OlBsdWdpblZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdl
LCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQpAQCAtMjY0LDYgKzI4NCwxMCBAQCBzdGF0
aWMgYm9vbCBpc1dpbmRvd3NNZXNzYWdlVXNlckdlc3R1cmUoVUlOVCBtZXNzYWdlKQogTFJFU1VM
VAogUGx1Z2luVmlldzo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQ
YXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKKyNpZiBQTEFURk9STShXSU5DRSkKKyAgICBpZiAoIW1f
cGx1Z2luV25kUHJvYykKKyAgICAgICAgcmV0dXJuIDE7CisjZW5kaWYKICAgICAvLyA8cmRhcjov
LzU3MTExMzY+IFNvbWV0aW1lcyBGbGFzaCB3aWxsIGNhbGwgU2V0Q2FwdHVyZSBiZWZvcmUgY3Jl
YXRpbmcKICAgICAvLyBhIGZ1bGwtc2NyZWVuIHdpbmRvdyBhbmQgd2lsbCBub3QgcmVsZWFzZSBp
dCwgd2hpY2ggY2F1c2VzIHRoZQogICAgIC8vIGZ1bGwtc2NyZWVuIHdpbmRvdyB0byBuZXZlciBy
ZWNlaXZlIG1vdXNlIGV2ZW50cy4gV2Ugc2V0L3JlbGVhc2UgY2FwdHVyZQpAQCAtMzEwLDYgKzMz
NCw3IEBAIFBsdWdpblZpZXc6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJB
TSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgIG1fcG9wUG9wdXBzU3RhdGVUaW1lci5z
dGFydE9uZVNob3QoMCk7CiAgICAgfQogCisjaWYgIVBMQVRGT1JNKFdJTkNFKQogICAgIGlmICht
ZXNzYWdlID09IFdNX1BSSU5UQ0xJRU5UKSB7CiAgICAgICAgIC8vIE1vc3QgKGFsbD8pIHdpbmRv
d2VkIHBsdWdpbnMgZG9uJ3QgcmVzcG9uZCB0byBXTV9QUklOVENMSUVOVCwgc28gd2UKICAgICAg
ICAgLy8gY2hhbmdlIHRoZSBtZXNzYWdlIHRvIFdNX1BBSU5UIGFuZCByZWx5IG9uIG91ciBob29r
ZWQgdmVyc2lvbnMgb2YKQEAgLTMxNyw2ICszNDIsNyBAQCBQbHVnaW5WaWV3Ojp3bmRQcm9jKEhX
TkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAg
ICAgICBtZXNzYWdlID0gV01fUEFJTlQ7CiAgICAgICAgIG1fd21QcmludEhEQyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SERDPih3UGFyYW0pOwogICAgIH0KKyNlbmRpZgogCiAgICAgLy8gQ2FsbCB0aGUg
cGx1Zy1pbidzIHdpbmRvdyBwcm9jLgogICAgIExSRVNVTFQgcmVzdWx0ID0gOjpDYWxsV2luZG93
UHJvYyhtX3BsdWdpblduZFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKQEAg
LTMzOSw3ICszNjUsMTEgQEAgdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQog
ICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKICAgICBJbnRSZWN0IG9s
ZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKIAorI2lmIFBMQVRGT1JNKFdJTkNFKQorICAgIG1fd2lu
ZG93UmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSk7CisjZWxz
ZQogICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93
KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXplKCkpOworI2VuZGlmCiAg
ICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CiAgICAgbV9jbGlwUmVjdC5tb3ZlKC1t
X3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CiAKQEAgLTQyNiw2ICs0NTYsNyBA
QCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBucEV2ZW50KQogCiB2
b2lkIFBsdWdpblZpZXc6OnBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CisjaWYgIVBMQVRG
T1JNKFdJTkNFKQogICAgIEFTU0VSVChtX2lzV2luZG93ZWQpOwogICAgIEFTU0VSVChjb250ZXh0
LT5zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkpOwogCkBAIC00NTAsNiArNDgxLDcgQEAgdm9p
ZCBQbHVnaW5WaWV3OjpwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdAogICAgIFNldFdvcmxkVHJhbnNmb3JtKGhkYywgJm9yaWdpbmFs
VHJhbnNmb3JtKTsKIAogICAgIGNvbnRleHQtPnJlbGVhc2VXaW5kb3dzQ29udGV4dChoZGMsIGZy
YW1lUmVjdCgpLCBmYWxzZSk7CisjZW5kaWYKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpwYWludChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC00NjQsOCAr
NDk2LDEwIEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9pc1dp
bmRvd2VkKSB7CisjaWYgIVBMQVRGT1JNKFdJTkNFKQogICAgICAgICBpZiAoY29udGV4dC0+c2hv
dWxkSW5jbHVkZUNoaWxkV2luZG93cygpKQogICAgICAgICAgICAgcGFpbnRXaW5kb3dlZFBsdWdp
bkludG9Db250ZXh0KGNvbnRleHQsIHJlY3QpOworI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTQ3OCw3ICs1MTIsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICAvLyBvZiB0aGUgd2lu
ZG93IGFuZCB0aGUgcGx1Z2luIGV4cGVjdHMgdGhhdCB0aGUgcGFzc2VkIGluIERDIGhhcyB3aW5k
b3cgY29vcmRpbmF0ZXMuCiAgICAgLy8gSW4gdGhlIFF0IHBvcnQgd2UgYWx3YXlzIGRyYXcgaW4g
YW4gb2Zmc2NyZWVuIGJ1ZmZlciBhbmQgdGhlcmVmb3JlIG5lZWQgdG8gcHJlc2VydmUKICAgICAv
LyB0aGUgdHJhbnNsYXRpb24gc2V0IGluIGdldFdpbmRvd3NDb250ZXh0LgotI2lmICFQTEFURk9S
TShRVCkKKyNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShXSU5DRSkKICAgICBpZiAoIWNv
bnRleHQtPmluVHJhbnNwYXJlbmN5TGF5ZXIoKSkgewogICAgICAgICBYRk9STSB0cmFuc2Zvcm07
CiAgICAgICAgIEdldFdvcmxkVHJhbnNmb3JtKGhkYywgJnRyYW5zZm9ybSk7CkBAIC00OTEsMTUg
KzUyNSwyNCBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5
cGVEcmF3YWJsZTsKICAgICBtX25wV2luZG93LndpbmRvdyA9IGhkYzsKIAotICAgIEludFBvaW50
IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3co
ZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7Ci0gICAgCiAgICAgV0lORE9XUE9TIHdpbmRvd3BvczsK
ICAgICBtZW1zZXQoJndpbmRvd3BvcywgMCwgc2l6ZW9mKHdpbmRvd3BvcykpOwogCisjaWYgUExB
VEZPUk0oV0lOQ0UpCisgICAgSW50UmVjdCByID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFy
ZW50KCkpLT5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpKTsKKyAgICAKKyAgICB3aW5kb3dw
b3MueCA9IHIueCgpOworICAgIHdpbmRvd3Bvcy55ID0gci55KCk7CisgICAgd2luZG93cG9zLmN4
ID0gci53aWR0aCgpOworICAgIHdpbmRvd3Bvcy5jeSA9IHIuaGVpZ2h0KCk7CisjZWxzZQorICAg
IEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRz
VG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7CisgICAgCiAgICAgd2luZG93cG9zLngg
PSBwLngoKTsKICAgICB3aW5kb3dwb3MueSA9IHAueSgpOwogICAgIHdpbmRvd3Bvcy5jeCA9IGZy
YW1lUmVjdCgpLndpZHRoKCk7CiAgICAgd2luZG93cG9zLmN5ID0gZnJhbWVSZWN0KCkuaGVpZ2h0
KCk7CisjZW5kaWYKIAogICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9XSU5ET1dQT1NDSEFOR0VEOwog
ICAgIG5wRXZlbnQubFBhcmFtID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzI+KCZ3aW5kb3dwb3Mp
OwpAQCAtNTQwLDggKzU4MywxMCBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZl
bnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOwogfQogCisjaWYgIVBMQVRGT1JNKFdJTkNFKQogZXh0ZXJuIEhDVVJTT1IgbGFzdFNldEN1
cnNvcjsKIGV4dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7CisjZW5kaWYKIAogdm9pZCBQ
bHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQogewpAQCAtNjA2
LDcgKzY1MSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50
KiBldmVudCkKICAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKICAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAKLSNpZiAhUExBVEZPUk0oUVQpCisjaWYgIVBMQVRG
T1JNKFFUKSAmJiAhUExBVEZPUk0oV0lOQ0UpCiAgICAgLy8gQ3VycmVudGx5LCBXaWRnZXQ6OnNl
dEN1cnNvciBpcyBhbHdheXMgY2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZlbnRIYW5k
bGVyLmNwcAogICAgIC8vIGFuZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0IGlnbm9y
ZU5leHRTZXRDdXJzb3IgdG8gdHJ1ZSBoZXJlIHRvIHByZXZlbnQgdGhhdC4KICAgICBpZ25vcmVO
ZXh0U2V0Q3Vyc29yID0gdHJ1ZTsKQEAgLTYxOCw2ICs2NjMsMTQgQEAgdm9pZCBQbHVnaW5WaWV3
OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQogewogICAgIFdpZGdldDo6c2V0UGFyZW50
KHBhcmVudCk7CiAKKyNpZiBQTEFURk9STShXSU5DRSkKKyAgICBpZiAocGFyZW50KSB7CisgICAg
ICAgIGluaXQoKTsKKyAgICAgICAgaWYgKHBhcmVudC0+aXNWaXNpYmxlKCkpCisgICAgICAgICAg
ICBzaG93KCk7CisgICAgICAgIGVsc2UgaGlkZSgpOworICAgIH0KKyNlbHNlCiAgICAgaWYgKHBh
cmVudCkKICAgICAgICAgaW5pdCgpOwogICAgIGVsc2UgewpAQCAtNjMxLDcgKzY4NCw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKICAgICAgICAgaWYg
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gZm9jdXNlZFdpbmRvdyB8fCA6OklzQ2hpbGQocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSwgZm9jdXNlZFdpbmRvdykpCiAgICAgICAgICAgICA6OlNldEZv
Y3VzKDApOwogICAgIH0KLQorI2VuZGlmCiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50
VmlzaWJsZShib29sIHZpc2libGUpCkBAIC02NTQsNiArNzA3LDE3IEBAIHZvaWQgUGx1Z2luVmll
dzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgaWYgKCFtX2lzU3Rh
cnRlZCkKICAgICAgICAgcmV0dXJuOwogCisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAgSW50UmVj
dCByID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93
KHJlY3QpOworICAgIG1fbnBXaW5kb3cueCA9IHIueCgpOworICAgIG1fbnBXaW5kb3cueSA9IHIu
eSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHIud2lkdGgoKTsKKyAgICBtX25wV2luZG93
LmhlaWdodCA9IHIuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0g
ci53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gci5oZWlnaHQoKTsK
KyNlbHNlCiAgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgp
KS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOwogICAgIG1fbnBXaW5kb3cueCA9
IHAueCgpOwogICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOwpAQCAtNjYxLDEwICs3MjUsMTEgQEAg
dm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAg
ICBtX25wV2luZG93LndpZHRoID0gcmVjdC53aWR0aCgpOwogICAgIG1fbnBXaW5kb3cuaGVpZ2h0
ID0gcmVjdC5oZWlnaHQoKTsKIAotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7Ci0g
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwogICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
cmlnaHQgPSByZWN0LndpZHRoKCk7CiAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBy
ZWN0LmhlaWdodCgpOworI2VuZGlmCisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsK
KyAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CiAKICAgICBpZiAobV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPnNldHdpbmRvdykgewogICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CkBAIC02NzcsOSArNzQyLDE3IEBAIHZvaWQgUGx1Z2lu
Vmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAKICAgICAgICAgQVNT
RVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwogCisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAg
ICAgIGlmICghbV9wbHVnaW5XbmRQcm9jKSB7CisgICAgICAgICAgICBXTkRQUk9DIGN1cnJlbnRX
bmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBH
V0xfV05EUFJPQyk7CisgICAgICAgICAgICBpZiAoY3VycmVudFduZFByb2MgIT0gUGx1Z2luVmll
d1duZFByb2MpCisgICAgICAgICAgICAgICAgbV9wbHVnaW5XbmRQcm9jID0gKFdORFBST0MpU2V0
V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQywgKExPTkcpUGx1
Z2luVmlld1duZFByb2MpOworICAgICAgICB9CisjZWxzZQogICAgICAgICBXTkRQUk9DIGN1cnJl
bnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpLCBHV0xQX1dORFBST0MpOwogICAgICAgICBpZiAoY3VycmVudFduZFByb2MgIT0gUGx1Z2lu
Vmlld1duZFByb2MpCiAgICAgICAgICAgICBtX3BsdWdpblduZFByb2MgPSAoV05EUFJPQylTZXRX
aW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkcp
UGx1Z2luVmlld1duZFByb2MpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC02OTcsMTQgKzc3MCwy
NCBAQCB2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQogCiAgICAgQVNTRVJUKG1fc3RyZWFtcy5pc0Vt
cHR5KCkpOwogCisgICAgaWYgKG1fbWFudWFsU3RyZWFtKQorICAgICAgICBtX21hbnVhbFN0cmVh
bS0+c3RvcCgpOworCiAgICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKIAogICAgIC8vIFVuc3ViY2xh
c3MgdGhlIHdpbmRvdwogICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyNpZiBQTEFURk9STShXSU5D
RSkKKyAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xv
bmcocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGN1cnJlbnRXbmRQcm9jID09IFBsdWdpblZpZXdXbmRQcm9jKQorICAgICAgICAgICAg
U2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQywgKExPTkcp
bV9wbHVnaW5XbmRQcm9jKTsKKyNlbHNlCiAgICAgICAgIFdORFBST0MgY3VycmVudFduZFByb2Mg
PSAoV05EUFJPQylHZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBf
V05EUFJPQyk7CiAgICAgICAgIAogICAgICAgICBpZiAoY3VycmVudFduZFByb2MgPT0gUGx1Z2lu
Vmlld1duZFByb2MpCiAgICAgICAgICAgICBTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkcpbV9wbHVnaW5XbmRQcm9jKTsKKyNlbmRpZgog
ICAgIH0KIAogICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNl
KTsKQEAgLTk1Miw3ICsxMDM1LDkgQEAgdm9pZCBQbHVnaW5WaWV3Ojppbml0KCkKIAogICAgIGlm
IChtX2lzV2luZG93ZWQpIHsKICAgICAgICAgcmVnaXN0ZXJQbHVnaW5WaWV3KCk7CisjaWYgIVBM
QVRGT1JNKFdJTkNFKQogICAgICAgICBzZXRVcE9mZnNjcmVlblBhaW50aW5nSG9va3MoaG9va2Vk
QmVnaW5QYWludCwgaG9va2VkRW5kUGFpbnQpOworI2VuZGlmCiAKICAgICAgICAgRFdPUkQgZmxh
Z3MgPSBXU19DSElMRDsKICAgICAgICAgaWYgKGlzU2VsZlZpc2libGUoKSkKQEAgLTk2MSwxNiAr
MTA0NiwyMCBAQCB2b2lkIFBsdWdpblZpZXc6OmluaXQoKQogICAgICAgICBIV05EIHBhcmVudFdp
bmRvd0hhbmRsZSA9IHdpbmRvd0hhbmRsZUZvclBsYXRmb3JtV2lkZ2V0KG1fcGFyZW50RnJhbWUt
PnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKICAgICAgICAgSFdORCB3
aW5kb3cgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lLCAw
LCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAs
IDAsIHBhcmVudFdpbmRvd0hhbmRsZSwgMCwgUGFnZTo6aW5zdGFuY2VIYW5kbGUoKSwgMCk7CisK
ICNpZiBQTEFURk9STShXSU5fT1MpICYmIFBMQVRGT1JNKFFUKQogICAgICAgICBtX3dpbmRvdyA9
IHdpbmRvdzsKICNlbHNlCiAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KHdpbmRvdyk7CisgICAg
ICAgIG1faXNXaW5kb3dlZCA9IHRydWU7CiAjZW5kaWYKIAogICAgICAgICAvLyBDYWxsaW5nIFNl
dFdpbmRvd0xvbmdQdHJBIGhlcmUgbWFrZXMgdGhlIHdpbmRvdyBwcm9jIEFTQ0lJLCB3aGljaCBp
cyByZXF1aXJlZCBieSBhdCBsZWFzdAogICAgICAgICAvLyB0aGUgU2hvY2t3YXZlIERpcmVjdG9y
IHBsdWctaW4uCiAjaWYgUExBVEZPUk0oV0lOX09TKSAmJiBQTEFURk9STShYODZfNjQpICYmIENP
TVBJTEVSKE1TVkMpCiAgICAgICAgIDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpRGVmV2luZG93UHJvY0EpOworI2VsaWYg
UExBVEZPUk0oV0lOQ0UpCisgICAgICAgIDo6U2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCBHV0xfV05EUFJPQywgKExPTkcpRGVmV2luZG93UHJvYyk7CiAjZWxzZQogICAgICAg
ICA6OlNldFdpbmRvd0xvbmdQdHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTF9XTkRQUk9D
LCAoTE9ORylEZWZXaW5kb3dQcm9jQSk7CiAjZW5kaWYK
</data>
<flag name="review"
          id="17809"
          type_id="1"
          status="-"
          setter="staikos"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33547</attachid>
            <date>2009-07-27 08:36:55 -0700</date>
            <delta_ts>2009-07-27 08:44:21 -0700</delta_ts>
            <desc>updated</desc>
            <filename>27713.patch</filename>
            <type>text/plain</type>
            <size>17916</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWQ4ZTY3Zi4uYjA0MDExZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAwOS0wNy0yNyAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09Q
UyEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzcx
MworCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGx1Z2lucy93
aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwOgorICAgICAgICAoU0hHZXRWYWx1ZSk6CisgICAgICAg
IChQYXRoUmVtb3ZlRmlsZVNwZWMpOgorICAgICAgICAoV2ViQ29yZTo6YWRkUGx1Z2luUGF0aHNG
cm9tUmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6YWRkV2luZG93c01lZGlhUGxheWVyUGx1
Z2luRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1hY3JvbWVkaWFQbHVnaW5EaXJl
Y3Rvcmllcyk6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpsb2FkKToKKyAgICAgICAgKiBwbHVnaW5z
L3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVyUGx1Z2lu
Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp3bmRQcm9jKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
ZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0b3ApOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6aW5pdCk6CisKIDIwMDktMDctMjQgIEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3IgNjQg
Yml0IExpbnV4LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFz
ZVdpbi5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcAppbmRl
eCBjNTlmMTMzLi5hZDU4MWRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdp
bkRhdGFiYXNlV2luLmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNl
V2luLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDEyICszOCw1NCBAQAogI2RlZmluZSBfY291
bnRvZih4KSAoc2l6ZW9mKHgpL3NpemVvZih4WzBdKSkKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
V0lOQ0UpCisKKy8vIFdJTkNFIGRvZXNuJ3Qgc3VwcG9ydCBSZWdpc3RyeSBLZXkgQWNjZXNzIFJp
Z2h0cy4gVGhlIHBhcmFtZXRlciBzaG91bGQgYWx3YXlzIGJlIDAKKyNkZWZpbmUgS0VZX0VOVU1F
UkFURV9TVUJfS0VZUyAgICAgICAgICAgICAgMAorCitEV09SRCBTSEdldFZhbHVlKEhLRVkgaGtl
eSwgTFBDV1NUUiBwc3pTdWJLZXksIExQQ1dTVFIgcHN6VmFsdWUsIExQRFdPUkQgcGR3VHlwZSwg
TFBWT0lEIHB2RGF0YSwgTFBEV09SRCBwY2JEYXRhKQoreworICAgIEhLRVkga2V5OworICAgIGlm
IChSZWdPcGVuS2V5RXgoaGtleSwgcHN6U3ViS2V5LCAwLCAwLCAma2V5KSA9PSBFUlJPUl9TVUND
RVNTKSB7CisgICAgICAgIERXT1JEIHJlc3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChrZXksIHBzelZh
bHVlLCAwLCBwZHdUeXBlLCAoTFBCWVRFKXB2RGF0YSwgcGNiRGF0YSk7CisgICAgICAgIFJlZ0Ns
b3NlS2V5KGtleSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBF
UlJPUl9JTlZBTElEX05BTUU7Cit9CisKK0JPT0wgUGF0aFJlbW92ZUZpbGVTcGVjKExQV1NUUiBt
b2R1bGVGaWxlTmFtZVN0cikKK3sKKyAgICBpZiAoISptb2R1bGVGaWxlTmFtZVN0cikKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworCisgICAgTFBXU1RSIGxhc3RQb3MgPSAwOworICAgIExQV1NUUiBj
dXJQb3MgPSBtb2R1bGVGaWxlTmFtZVN0cjsKKyAgICBkbyB7CisgICAgICAgIGlmICgqY3VyUG9z
ID09IEwnLycgfHwgKmN1clBvcyA9PSBMJ1xcJykKKyAgICAgICAgICAgIGxhc3RQb3MgPSBjdXJQ
b3M7CisgICAgfSB3aGlsZSAoKisrY3VyUG9zKTsKKworICAgIGlmIChsYXN0UG9zID09IGN1clBv
cyAtIDEpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGlmIChsYXN0UG9zKQorICAgICAg
ICAqbGFzdFBvcyA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIG1vZHVsZUZpbGVOYW1lU3RyWzBd
ID0gTCdcXCc7CisgICAgICAgIG1vZHVsZUZpbGVOYW1lU3RyWzFdID0gMDsKKyAgICB9CisKKyAg
ICByZXR1cm4gVFJVRTsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeShIS0VZIHJvb3RLZXksIEhh
c2hTZXQ8U3RyaW5nPiYgcGF0aHMpCiB7CiAgICAgSEtFWSBrZXk7Ci0gICAgSFJFU1VMVCByZXN1
bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXksIEwiU29mdHdhcmVcXE1vemlsbGFQbHVnaW5zIiwg
MCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywgJmtleSk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBS
ZWdPcGVuS2V5RXhXKHJvb3RLZXksIEwiU29mdHdhcmVcXE1vemlsbGFQbHVnaW5zIiwgMCwgMCwg
JmtleSk7CiAKICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCiAgICAgICAgIHJldHVy
bjsKQEAgLTIxMCwxMiArMjUzLDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNb3ppbGxhUGx1
Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQogCiBzdGF0aWMgaW5s
aW5lIHZvaWQgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KFZlY3RvcjxTdHJp
bmc+JiBkaXJlY3RvcmllcykKIHsKKyNpZiAhUExBVEZPUk0oV0lOQ0UpCiAgICAgLy8gVGhlIG5l
dyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5zdGFsbGVkIGluIFxQRmlsZXNcUGx1Z2lucyBpZiBp
dCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGluc3RhbGxzCiAgICAgV0NIQVIgcGx1Z2luRGlyZWN0
b3J5U3RyW19NQVhfUEFUSCArIDFdOwogICAgIERXT1JEIHBsdWdpbkRpcmVjdG9yeVNpemUgPSA6
OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coVEVYVCgiJVNZU1RFTURSSVZFJVxcUEZpbGVzXFxQ
bHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0ciwgX2NvdW50b2YocGx1Z2luRGlyZWN0b3J5U3Ry
KSk7CiAKICAgICBpZiAocGx1Z2luRGlyZWN0b3J5U2l6ZSA+IDAgJiYgcGx1Z2luRGlyZWN0b3J5
U2l6ZSA8PSBfY291bnRvZihwbHVnaW5EaXJlY3RvcnlTdHIpKQogICAgICAgICBkaXJlY3Rvcmll
cy5hcHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAt
IDEpKTsKKyNlbmRpZgogCiAgICAgRFdPUkQgdHlwZTsKICAgICBXQ0hBUiBpbnN0YWxsYXRpb25E
aXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKQEAgLTMxMSw2ICszNTYsNyBAQCBleGl0OgogCiBzdGF0
aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpbkRpcmVjdG9yaWVzKFZlY3RvcjxTdHJp
bmc+JiBkaXJlY3RvcmllcykKIHsKKyNpZiAhUExBVEZPUk0oV0lOQ0UpCiAgICAgV0NIQVIgc3lz
dGVtRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKIAogICAgIGlmIChHZXRTeXN0ZW1EaXJlY3Rvcnko
c3lzdGVtRGlyZWN0b3J5U3RyLCBfY291bnRvZihzeXN0ZW1EaXJlY3RvcnlTdHIpKSA9PSAwKQpA
QCAtMzIzLDYgKzM2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2lu
RGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQogCiAgICAgUGF0aENvbWJp
bmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNy
b21lZFxcU2hvY2t3YXZlIDEwIikpOwogICAgIGRpcmVjdG9yaWVzLmFwcGVuZChtYWNyb21lZGlh
RGlyZWN0b3J5U3RyKTsKKyNlbmRpZgogfQogCiBWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFz
ZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lu
cy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBh
Y2thZ2VXaW4uY3BwCmluZGV4IDQwZDliMmEuLjUwZmQwMTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL3dp
bi9QbHVnaW5QYWNrYWdlV2luLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0NCw2ICsyNDUsNyBAQCBib29s
IFBsdWdpblBhY2thZ2U6OmxvYWQoKQogICAgICAgICBtX2xvYWRDb3VudCsrOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgeworI2lmICFQTEFURk9STShXSU5DRSkKICAgICAgICAg
V0NIQVIgY3VycmVudFBhdGhbTUFYX1BBVEhdOwogCiAgICAgICAgIGlmICghOjpHZXRDdXJyZW50
RGlyZWN0b3J5VyhNQVhfUEFUSCwgY3VycmVudFBhdGgpKQpAQCAtMjUzLDE1ICsyNTUsMTggQEAg
Ym9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKIAogICAgICAgICBpZiAoITo6U2V0Q3VycmVudERp
cmVjdG9yeVcocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogCiAgICAgICAgIC8vIExvYWQgdGhlIGxpYnJhcnkK
ICAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5RXhXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLCAwLCBMT0FEX1dJVEhfQUxURVJFRF9TRUFSQ0hfUEFUSCk7CiAK
KyNpZiAhUExBVEZPUk0oV0lOQ0UpCiAgICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5
VyhjdXJyZW50UGF0aCkpIHsKICAgICAgICAgICAgIGlmIChtX21vZHVsZSkKICAgICAgICAgICAg
ICAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQorI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKCFtX21vZHVsZSkKQEAgLTI3Mywx
MyArMjc4LDEzIEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCiAgICAgTlBfSW5pdGlhbGl6
ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IDA7CiAgICAgTlBFcnJvciBucEVycjsKIAotICAgIE5Q
X0luaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1
bGUsICJOUF9Jbml0aWFsaXplIik7Ci0gICAgTlBfR2V0RW50cnlQb2ludHMgPSAoTlBfR2V0RW50
cnlQb2ludHNGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfR2V0RW50cnlQb2lu
dHMiKTsKLSAgICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRyKUdldFByb2NB
ZGRyZXNzKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKKyAgICBOUF9Jbml0aWFsaXplID0gKE5Q
X0luaXRpYWxpemVGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCBfVCgiTlBfSW5pdGlh
bGl6ZSIpKTsKKyAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRyeVBvaW50c0Z1bmNQ
dHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsIF9UKCJOUF9HZXRFbnRyeVBvaW50cyIpKTsKKyAg
ICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRyKUdldFByb2NBZGRyZXNzKG1f
bW9kdWxlLCBfVCgiTlBfU2h1dGRvd24iKSk7CiAKICAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwg
IU5QX0dldEVudHJ5UG9pbnRzIHx8ICFtX05QUF9TaHV0ZG93bikKICAgICAgICAgZ290byBhYm9y
dDsKLSAgCisKICAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1
bmNzKSk7CiAgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwIGIvV2Vi
Q29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAppbmRleCBmMGEyYTE0Li5mOTY5NmIz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCisrKyBi
L1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTY1LDYgKzY2LDEzIEBACiAjaW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+CiAjaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KIAorI2lmIFBMQVRGT1JNKFdJTkNFKQorI3VuZGVmIExPR19O
UEVSUk9SCisjZGVmaW5lIExPR19OUEVSUk9SKHgpCisjdW5kZWYgTE9HX1BMVUdJTl9ORVRfRVJS
T1IKKyNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKQorI2VuZGlmCisKICNpZiBQTEFURk9S
TShRVCkKICNpbmNsdWRlIDxRV2lkZ2V0Lmg+CiAjZW5kaWYKQEAgLTk4LDYgKzEwNiw3IEBAIGNv
bnN0IExQQ1dTVFIga1dlYlBsdWdpblZpZXdQcm9wZXJ0eSA9IEwiV2ViUGx1Z2luVmlld1Byb3Bl
cnR5IjsKIAogc3RhdGljIGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81
LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIw
MDYxMDEwIEZpcmVmb3gvMi4wIjsKIAorI2lmICFQTEFURk9STShXSU5DRSkKIC8vIFRoZSBjb2Rl
IHVzZWQgdG8gaG9vayBCZWdpblBhaW50L0VuZFBhaW50IG9yaWdpbmFsbHkgY2FtZSBmcm9tCiAv
LyA8aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+LgogLy8gQ29w
eXJpZ2h0IChDKSAyMDAwIGJ5IEZlbmcgWXVhbiAod3d3LmZlbmd5dWFuLmNvbSkuCkBAIC0yMDcs
NiArMjE2LDcgQEAgc3RhdGljIHZvaWQgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tzKEhEQyAo
V0lOQVBJKmhvb2tlZEJlZ2luUGFpbnQpKEhXTkQsIFBBSU4KICAgICBob29rKCJ1c2VyMzIuZGxs
IiwgIkVuZFBhaW50IiwgZW5kUGFpbnRTeXNDYWxsLCBlbmRQYWludCwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB2b2lkICo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pihob29rZWRFbmRQYWlu
dCkpKTsKIAogfQorI2VuZGlmCiAKIHN0YXRpYyBib29sIHJlZ2lzdGVyUGx1Z2luVmlldygpCiB7
CkBAIC0yMjIsMTEgKzIzMiwxOCBAQCBzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXcoKQog
CiAgICAgQVNTRVJUKFBhZ2U6Omluc3RhbmNlSGFuZGxlKCkpOwogCisjaWYgUExBVEZPUk0oV0lO
Q0UpCisgICAgV05EQ0xBU1Mgd2NleCA9IHsgMCB9OworI2Vsc2UKICAgICBXTkRDTEFTU0VYIHdj
ZXg7Ci0KICAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKKyAgICB3Y2V4LmhJ
Y29uU20gICAgICAgID0gMDsKKyNlbmRpZgogCiAgICAgd2NleC5zdHlsZSAgICAgICAgICA9IENT
X0RCTENMS1M7CisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAgd2NleC5zdHlsZSAgICAgICAgICB8
PSBDU19QQVJFTlREQzsKKyNlbmRpZgogICAgIHdjZXgubHBmblduZFByb2MgICAgPSBEZWZXaW5k
b3dQcm9jOwogICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOwogICAgIHdjZXguY2JXbmRFeHRy
YSAgICAgPSAwOwpAQCAtMjM2LDkgKzI1MywxMiBAQCBzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdp
blZpZXcoKQogICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAoSEJSVVNIKUNPTE9SX1dJTkRPVzsK
ICAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKICAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0g
a1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWU7Ci0gICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7
CiAKKyNpZiBQTEFURk9STShXSU5DRSkKKyAgICByZXR1cm4gISFSZWdpc3RlckNsYXNzKCZ3Y2V4
KTsKKyNlbHNlCiAgICAgcmV0dXJuICEhUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKKyNlbmRpZgog
fQogCiBMUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXc6OlBsdWdpblZpZXdXbmRQcm9jKEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQpAQCAtMzEw
LDYgKzMzMCw3IEBAIFBsdWdpblZpZXc6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2Us
IFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgIG1fcG9wUG9wdXBzU3RhdGVU
aW1lci5zdGFydE9uZVNob3QoMCk7CiAgICAgfQogCisjaWYgIVBMQVRGT1JNKFdJTkNFKQogICAg
IGlmIChtZXNzYWdlID09IFdNX1BSSU5UQ0xJRU5UKSB7CiAgICAgICAgIC8vIE1vc3QgKGFsbD8p
IHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3QgcmVzcG9uZCB0byBXTV9QUklOVENMSUVOVCwgc28gd2UK
ICAgICAgICAgLy8gY2hhbmdlIHRoZSBtZXNzYWdlIHRvIFdNX1BBSU5UIGFuZCByZWx5IG9uIG91
ciBob29rZWQgdmVyc2lvbnMgb2YKQEAgLTMxNyw2ICszMzgsNyBAQCBQbHVnaW5WaWV3Ojp3bmRQ
cm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFt
KQogICAgICAgICBtZXNzYWdlID0gV01fUEFJTlQ7CiAgICAgICAgIG1fd21QcmludEhEQyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8SERDPih3UGFyYW0pOwogICAgIH0KKyNlbmRpZgogCiAgICAgLy8gQ2Fs
bCB0aGUgcGx1Zy1pbidzIHdpbmRvdyBwcm9jLgogICAgIExSRVNVTFQgcmVzdWx0ID0gOjpDYWxs
V2luZG93UHJvYyhtX3BsdWdpblduZFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFt
KTsKQEAgLTMzOSw3ICszNjEsMTEgQEAgdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRn
ZXQoKQogICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKICAgICBJbnRS
ZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKIAorI2lmIFBMQVRGT1JNKFdJTkNFKQorICAg
IG1fd2luZG93UmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSk7
CisjZWxzZQogICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1Rv
V2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXplKCkpOworI2Vu
ZGlmCiAgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CiAgICAgbV9jbGlwUmVjdC5t
b3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CiAKQEAgLTQyNiw2ICs0
NTIsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBucEV2ZW50
KQogCiB2b2lkIFBsdWdpblZpZXc6OnBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CisjaWYg
IVBMQVRGT1JNKFdJTkNFKQogICAgIEFTU0VSVChtX2lzV2luZG93ZWQpOwogICAgIEFTU0VSVChj
b250ZXh0LT5zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkpOwogCkBAIC00NTAsNiArNDc3LDcg
QEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdAogICAgIFNldFdvcmxkVHJhbnNmb3JtKGhkYywgJm9y
aWdpbmFsVHJhbnNmb3JtKTsKIAogICAgIGNvbnRleHQtPnJlbGVhc2VXaW5kb3dzQ29udGV4dCho
ZGMsIGZyYW1lUmVjdCgpLCBmYWxzZSk7CisjZW5kaWYKIH0KIAogdm9pZCBQbHVnaW5WaWV3Ojpw
YWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC00
NjQsOCArNDkyLDEwIEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
bV9pc1dpbmRvd2VkKSB7CisjaWYgIVBMQVRGT1JNKFdJTkNFKQogICAgICAgICBpZiAoY29udGV4
dC0+c2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cygpKQogICAgICAgICAgICAgcGFpbnRXaW5kb3dl
ZFBsdWdpbkludG9Db250ZXh0KGNvbnRleHQsIHJlY3QpOworI2VuZGlmCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTQ3OCw3ICs1MDgsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICAvLyBvZiB0
aGUgd2luZG93IGFuZCB0aGUgcGx1Z2luIGV4cGVjdHMgdGhhdCB0aGUgcGFzc2VkIGluIERDIGhh
cyB3aW5kb3cgY29vcmRpbmF0ZXMuCiAgICAgLy8gSW4gdGhlIFF0IHBvcnQgd2UgYWx3YXlzIGRy
YXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZlciBhbmQgdGhlcmVmb3JlIG5lZWQgdG8gcHJlc2VydmUK
ICAgICAvLyB0aGUgdHJhbnNsYXRpb24gc2V0IGluIGdldFdpbmRvd3NDb250ZXh0LgotI2lmICFQ
TEFURk9STShRVCkKKyNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShXSU5DRSkKICAgICBp
ZiAoIWNvbnRleHQtPmluVHJhbnNwYXJlbmN5TGF5ZXIoKSkgewogICAgICAgICBYRk9STSB0cmFu
c2Zvcm07CiAgICAgICAgIEdldFdvcmxkVHJhbnNmb3JtKGhkYywgJnRyYW5zZm9ybSk7CkBAIC00
OTEsMTUgKzUyMSwyNCBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdp
bmRvd1R5cGVEcmF3YWJsZTsKICAgICBtX25wV2luZG93LndpbmRvdyA9IGhkYzsKIAotICAgIElu
dFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9X
aW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7Ci0gICAgCiAgICAgV0lORE9XUE9TIHdpbmRv
d3BvczsKICAgICBtZW1zZXQoJndpbmRvd3BvcywgMCwgc2l6ZW9mKHdpbmRvd3BvcykpOwogCisj
aWYgUExBVEZPUk0oV0lOQ0UpCisgICAgSW50UmVjdCByID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3
Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpKTsKKyAgICAKKyAgICB3
aW5kb3dwb3MueCA9IHIueCgpOworICAgIHdpbmRvd3Bvcy55ID0gci55KCk7CisgICAgd2luZG93
cG9zLmN4ID0gci53aWR0aCgpOworICAgIHdpbmRvd3Bvcy5jeSA9IHIuaGVpZ2h0KCk7CisjZWxz
ZQorICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNv
bnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7CisgICAgCiAgICAgd2luZG93
cG9zLnggPSBwLngoKTsKICAgICB3aW5kb3dwb3MueSA9IHAueSgpOwogICAgIHdpbmRvd3Bvcy5j
eCA9IGZyYW1lUmVjdCgpLndpZHRoKCk7CiAgICAgd2luZG93cG9zLmN5ID0gZnJhbWVSZWN0KCku
aGVpZ2h0KCk7CisjZW5kaWYKIAogICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9XSU5ET1dQT1NDSEFO
R0VEOwogICAgIG5wRXZlbnQubFBhcmFtID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzI+KCZ3aW5k
b3dwb3MpOwpAQCAtNTQwLDggKzU3OSwxMCBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJv
YXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOwogfQogCisjaWYgIVBMQVRGT1JNKFdJTkNFKQogZXh0ZXJuIEhDVVJTT1IgbGFz
dFNldEN1cnNvcjsKIGV4dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7CisjZW5kaWYKIAog
dm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQogewpA
QCAtNjA2LDcgKzY0Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3Vz
ZUV2ZW50KiBldmVudCkKICAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKICAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAKLSNpZiAhUExBVEZPUk0oUVQpCisjaWYg
IVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oV0lOQ0UpCiAgICAgLy8gQ3VycmVudGx5LCBXaWRn
ZXQ6OnNldEN1cnNvciBpcyBhbHdheXMgY2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZl
bnRIYW5kbGVyLmNwcAogICAgIC8vIGFuZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0
IGlnbm9yZU5leHRTZXRDdXJzb3IgdG8gdHJ1ZSBoZXJlIHRvIHByZXZlbnQgdGhhdC4KICAgICBp
Z25vcmVOZXh0U2V0Q3Vyc29yID0gdHJ1ZTsKQEAgLTYxOCw2ICs2NTksMTQgQEAgdm9pZCBQbHVn
aW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQogewogICAgIFdpZGdldDo6c2V0
UGFyZW50KHBhcmVudCk7CiAKKyNpZiBQTEFURk9STShXSU5DRSkKKyAgICBpZiAocGFyZW50KSB7
CisgICAgICAgIGluaXQoKTsKKyAgICAgICAgaWYgKHBhcmVudC0+aXNWaXNpYmxlKCkpCisgICAg
ICAgICAgICBzaG93KCk7CisgICAgICAgIGVsc2UgaGlkZSgpOworICAgIH0KKyNlbHNlCiAgICAg
aWYgKHBhcmVudCkKICAgICAgICAgaW5pdCgpOwogICAgIGVsc2UgewpAQCAtNjMxLDcgKzY4MCw3
IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKICAgICAg
ICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gZm9jdXNlZFdpbmRvdyB8fCA6OklzQ2hp
bGQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgZm9jdXNlZFdpbmRvdykpCiAgICAgICAgICAgICA6
OlNldEZvY3VzKDApOwogICAgIH0KLQorI2VuZGlmCiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0
UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCkBAIC02NTQsNiArNzAzLDE3IEBAIHZvaWQgUGx1
Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgaWYgKCFt
X2lzU3RhcnRlZCkKICAgICAgICAgcmV0dXJuOwogCisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAg
SW50UmVjdCByID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1Rv
V2luZG93KHJlY3QpOworICAgIG1fbnBXaW5kb3cueCA9IHIueCgpOworICAgIG1fbnBXaW5kb3cu
eSA9IHIueSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHIud2lkdGgoKTsKKyAgICBtX25w
V2luZG93LmhlaWdodCA9IHIuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJp
Z2h0ID0gci53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gci5oZWln
aHQoKTsKKyNlbHNlCiAgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBh
cmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOwogICAgIG1fbnBXaW5k
b3cueCA9IHAueCgpOwogICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOwpAQCAtNjYxLDEwICs3MjEs
MTEgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKICAgICBtX25wV2luZG93LndpZHRoID0gcmVjdC53aWR0aCgpOwogICAgIG1fbnBXaW5kb3cu
aGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKIAotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9
IDA7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwogICAgIG1fbnBXaW5kb3cuY2xp
cFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7CiAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0
b20gPSByZWN0LmhlaWdodCgpOworI2VuZGlmCisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0
ID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CiAKICAgICBpZiAobV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgewogICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CkBAIC02NzcsOSArNzM4LDE3IEBAIHZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAKICAgICAg
ICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwogCisjaWYgUExBVEZPUk0oV0lOQ0Up
CisgICAgICAgIGlmICghbV9wbHVnaW5XbmRQcm9jKSB7CisgICAgICAgICAgICBXTkRQUk9DIGN1
cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpLCBHV0xfV05EUFJPQyk7CisgICAgICAgICAgICBpZiAoY3VycmVudFduZFByb2MgIT0gUGx1
Z2luVmlld1duZFByb2MpCisgICAgICAgICAgICAgICAgbV9wbHVnaW5XbmRQcm9jID0gKFdORFBS
T0MpU2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQywgKExP
TkcpUGx1Z2luVmlld1duZFByb2MpOworICAgICAgICB9CisjZWxzZQogICAgICAgICBXTkRQUk9D
IGN1cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdp
bldpZGdldCgpLCBHV0xQX1dORFBST0MpOwogICAgICAgICBpZiAoY3VycmVudFduZFByb2MgIT0g
UGx1Z2luVmlld1duZFByb2MpCiAgICAgICAgICAgICBtX3BsdWdpblduZFByb2MgPSAoV05EUFJP
QylTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywg
KExPTkcpUGx1Z2luVmlld1duZFByb2MpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC02OTcsMTQg
Kzc2NiwyNCBAQCB2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQogCiAgICAgQVNTRVJUKG1fc3RyZWFt
cy5pc0VtcHR5KCkpOwogCisgICAgaWYgKG1fbWFudWFsU3RyZWFtKQorICAgICAgICBtX21hbnVh
bFN0cmVhbS0+c3RvcCgpOworCiAgICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKIAogICAgIC8vIFVu
c3ViY2xhc3MgdGhlIHdpbmRvdwogICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyNpZiBQTEFURk9S
TShXSU5DRSkKKyAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdp
bmRvd0xvbmcocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MpOworICAgICAgICAK
KyAgICAgICAgaWYgKGN1cnJlbnRXbmRQcm9jID09IFBsdWdpblZpZXdXbmRQcm9jKQorICAgICAg
ICAgICAgU2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQywg
KExPTkcpbV9wbHVnaW5XbmRQcm9jKTsKKyNlbHNlCiAgICAgICAgIFdORFBST0MgY3VycmVudFdu
ZFByb2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IEdXTFBfV05EUFJPQyk7CiAgICAgICAgIAogICAgICAgICBpZiAoY3VycmVudFduZFByb2MgPT0g
UGx1Z2luVmlld1duZFByb2MpCiAgICAgICAgICAgICBTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkcpbV9wbHVnaW5XbmRQcm9jKTsKKyNl
bmRpZgogICAgIH0KIAogICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGZhbHNlKTsKQEAgLTk1Miw3ICsxMDMxLDkgQEAgdm9pZCBQbHVnaW5WaWV3Ojppbml0KCkKIAog
ICAgIGlmIChtX2lzV2luZG93ZWQpIHsKICAgICAgICAgcmVnaXN0ZXJQbHVnaW5WaWV3KCk7Cisj
aWYgIVBMQVRGT1JNKFdJTkNFKQogICAgICAgICBzZXRVcE9mZnNjcmVlblBhaW50aW5nSG9va3Mo
aG9va2VkQmVnaW5QYWludCwgaG9va2VkRW5kUGFpbnQpOworI2VuZGlmCiAKICAgICAgICAgRFdP
UkQgZmxhZ3MgPSBXU19DSElMRDsKICAgICAgICAgaWYgKGlzU2VsZlZpc2libGUoKSkKQEAgLTk2
MSw2ICsxMDQyLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojppbml0KCkKICAgICAgICAgSFdORCBwYXJl
bnRXaW5kb3dIYW5kbGUgPSB3aW5kb3dIYW5kbGVGb3JQbGF0Zm9ybVdpZGdldChtX3BhcmVudEZy
YW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1XaW5kb3coKSk7CiAgICAgICAgIEhX
TkQgd2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFt
ZSwgMCwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAw
LCAwLCAwLCBwYXJlbnRXaW5kb3dIYW5kbGUsIDAsIFBhZ2U6Omluc3RhbmNlSGFuZGxlKCksIDAp
OworCiAjaWYgUExBVEZPUk0oV0lOX09TKSAmJiBQTEFURk9STShRVCkKICAgICAgICAgbV93aW5k
b3cgPSB3aW5kb3c7CiAjZWxzZQpAQCAtOTcxLDYgKzEwNTMsOCBAQCB2b2lkIFBsdWdpblZpZXc6
OmluaXQoKQogICAgICAgICAvLyB0aGUgU2hvY2t3YXZlIERpcmVjdG9yIHBsdWctaW4uCiAjaWYg
UExBVEZPUk0oV0lOX09TKSAmJiBQTEFURk9STShYODZfNjQpICYmIENPTVBJTEVSKE1TVkMpCiAg
ICAgICAgIDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9X
TkRQUk9DLCAoTE9OR19QVFIpRGVmV2luZG93UHJvY0EpOworI2VsaWYgUExBVEZPUk0oV0lOQ0Up
CisgICAgICAgIDo6U2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05E
UFJPQywgKExPTkcpRGVmV2luZG93UHJvYyk7CiAjZWxzZQogICAgICAgICA6OlNldFdpbmRvd0xv
bmdQdHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTF9XTkRQUk9DLCAoTE9ORylEZWZXaW5k
b3dQcm9jQSk7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33548</attachid>
            <date>2009-07-27 08:44:21 -0700</date>
            <delta_ts>2009-07-27 08:57:56 -0700</delta_ts>
            <desc>more cleanup</desc>
            <filename>27713.patch</filename>
            <type>text/plain</type>
            <size>17792</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWQ4ZTY3Zi4uYjA0MDExZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAwOS0wNy0yNyAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09Q
UyEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzcx
MworCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGx1Z2lucy93
aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwOgorICAgICAgICAoU0hHZXRWYWx1ZSk6CisgICAgICAg
IChQYXRoUmVtb3ZlRmlsZVNwZWMpOgorICAgICAgICAoV2ViQ29yZTo6YWRkUGx1Z2luUGF0aHNG
cm9tUmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6YWRkV2luZG93c01lZGlhUGxheWVyUGx1
Z2luRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1hY3JvbWVkaWFQbHVnaW5EaXJl
Y3Rvcmllcyk6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpsb2FkKToKKyAgICAgICAgKiBwbHVnaW5z
L3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVyUGx1Z2lu
Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp3bmRQcm9jKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
ZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0b3ApOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6aW5pdCk6CisKIDIwMDktMDctMjQgIEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3IgNjQg
Yml0IExpbnV4LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFz
ZVdpbi5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcAppbmRl
eCBjNTlmMTMzLi5hZDU4MWRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdp
bkRhdGFiYXNlV2luLmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNl
V2luLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDEyICszOCw1NCBAQAogI2RlZmluZSBfY291
bnRvZih4KSAoc2l6ZW9mKHgpL3NpemVvZih4WzBdKSkKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
V0lOQ0UpCisKKy8vIFdJTkNFIGRvZXNuJ3Qgc3VwcG9ydCBSZWdpc3RyeSBLZXkgQWNjZXNzIFJp
Z2h0cy4gVGhlIHBhcmFtZXRlciBzaG91bGQgYWx3YXlzIGJlIDAKKyNkZWZpbmUgS0VZX0VOVU1F
UkFURV9TVUJfS0VZUyAgICAgICAgICAgICAgMAorCitEV09SRCBTSEdldFZhbHVlKEhLRVkgaGtl
eSwgTFBDV1NUUiBwc3pTdWJLZXksIExQQ1dTVFIgcHN6VmFsdWUsIExQRFdPUkQgcGR3VHlwZSwg
TFBWT0lEIHB2RGF0YSwgTFBEV09SRCBwY2JEYXRhKQoreworICAgIEhLRVkga2V5OworICAgIGlm
IChSZWdPcGVuS2V5RXgoaGtleSwgcHN6U3ViS2V5LCAwLCAwLCAma2V5KSA9PSBFUlJPUl9TVUND
RVNTKSB7CisgICAgICAgIERXT1JEIHJlc3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChrZXksIHBzelZh
bHVlLCAwLCBwZHdUeXBlLCAoTFBCWVRFKXB2RGF0YSwgcGNiRGF0YSk7CisgICAgICAgIFJlZ0Ns
b3NlS2V5KGtleSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBF
UlJPUl9JTlZBTElEX05BTUU7Cit9CisKK0JPT0wgUGF0aFJlbW92ZUZpbGVTcGVjKExQV1NUUiBt
b2R1bGVGaWxlTmFtZVN0cikKK3sKKyAgICBpZiAoISptb2R1bGVGaWxlTmFtZVN0cikKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworCisgICAgTFBXU1RSIGxhc3RQb3MgPSAwOworICAgIExQV1NUUiBj
dXJQb3MgPSBtb2R1bGVGaWxlTmFtZVN0cjsKKyAgICBkbyB7CisgICAgICAgIGlmICgqY3VyUG9z
ID09IEwnLycgfHwgKmN1clBvcyA9PSBMJ1xcJykKKyAgICAgICAgICAgIGxhc3RQb3MgPSBjdXJQ
b3M7CisgICAgfSB3aGlsZSAoKisrY3VyUG9zKTsKKworICAgIGlmIChsYXN0UG9zID09IGN1clBv
cyAtIDEpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGlmIChsYXN0UG9zKQorICAgICAg
ICAqbGFzdFBvcyA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIG1vZHVsZUZpbGVOYW1lU3RyWzBd
ID0gTCdcXCc7CisgICAgICAgIG1vZHVsZUZpbGVOYW1lU3RyWzFdID0gMDsKKyAgICB9CisKKyAg
ICByZXR1cm4gVFJVRTsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeShIS0VZIHJvb3RLZXksIEhh
c2hTZXQ8U3RyaW5nPiYgcGF0aHMpCiB7CiAgICAgSEtFWSBrZXk7Ci0gICAgSFJFU1VMVCByZXN1
bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXksIEwiU29mdHdhcmVcXE1vemlsbGFQbHVnaW5zIiwg
MCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywgJmtleSk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBS
ZWdPcGVuS2V5RXhXKHJvb3RLZXksIEwiU29mdHdhcmVcXE1vemlsbGFQbHVnaW5zIiwgMCwgMCwg
JmtleSk7CiAKICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCiAgICAgICAgIHJldHVy
bjsKQEAgLTIxMCwxMiArMjUzLDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNb3ppbGxhUGx1
Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQogCiBzdGF0aWMgaW5s
aW5lIHZvaWQgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KFZlY3RvcjxTdHJp
bmc+JiBkaXJlY3RvcmllcykKIHsKKyNpZiAhUExBVEZPUk0oV0lOQ0UpCiAgICAgLy8gVGhlIG5l
dyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5zdGFsbGVkIGluIFxQRmlsZXNcUGx1Z2lucyBpZiBp
dCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGluc3RhbGxzCiAgICAgV0NIQVIgcGx1Z2luRGlyZWN0
b3J5U3RyW19NQVhfUEFUSCArIDFdOwogICAgIERXT1JEIHBsdWdpbkRpcmVjdG9yeVNpemUgPSA6
OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coVEVYVCgiJVNZU1RFTURSSVZFJVxcUEZpbGVzXFxQ
bHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0ciwgX2NvdW50b2YocGx1Z2luRGlyZWN0b3J5U3Ry
KSk7CiAKICAgICBpZiAocGx1Z2luRGlyZWN0b3J5U2l6ZSA+IDAgJiYgcGx1Z2luRGlyZWN0b3J5
U2l6ZSA8PSBfY291bnRvZihwbHVnaW5EaXJlY3RvcnlTdHIpKQogICAgICAgICBkaXJlY3Rvcmll
cy5hcHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAt
IDEpKTsKKyNlbmRpZgogCiAgICAgRFdPUkQgdHlwZTsKICAgICBXQ0hBUiBpbnN0YWxsYXRpb25E
aXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKQEAgLTMxMSw2ICszNTYsNyBAQCBleGl0OgogCiBzdGF0
aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpbkRpcmVjdG9yaWVzKFZlY3RvcjxTdHJp
bmc+JiBkaXJlY3RvcmllcykKIHsKKyNpZiAhUExBVEZPUk0oV0lOQ0UpCiAgICAgV0NIQVIgc3lz
dGVtRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKIAogICAgIGlmIChHZXRTeXN0ZW1EaXJlY3Rvcnko
c3lzdGVtRGlyZWN0b3J5U3RyLCBfY291bnRvZihzeXN0ZW1EaXJlY3RvcnlTdHIpKSA9PSAwKQpA
QCAtMzIzLDYgKzM2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2lu
RGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQogCiAgICAgUGF0aENvbWJp
bmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNy
b21lZFxcU2hvY2t3YXZlIDEwIikpOwogICAgIGRpcmVjdG9yaWVzLmFwcGVuZChtYWNyb21lZGlh
RGlyZWN0b3J5U3RyKTsKKyNlbmRpZgogfQogCiBWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFz
ZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lu
cy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBh
Y2thZ2VXaW4uY3BwCmluZGV4IDQwZDliMmEuLjUwZmQwMTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL3dp
bi9QbHVnaW5QYWNrYWdlV2luLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0NCw2ICsyNDUsNyBAQCBib29s
IFBsdWdpblBhY2thZ2U6OmxvYWQoKQogICAgICAgICBtX2xvYWRDb3VudCsrOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgeworI2lmICFQTEFURk9STShXSU5DRSkKICAgICAgICAg
V0NIQVIgY3VycmVudFBhdGhbTUFYX1BBVEhdOwogCiAgICAgICAgIGlmICghOjpHZXRDdXJyZW50
RGlyZWN0b3J5VyhNQVhfUEFUSCwgY3VycmVudFBhdGgpKQpAQCAtMjUzLDE1ICsyNTUsMTggQEAg
Ym9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKIAogICAgICAgICBpZiAoITo6U2V0Q3VycmVudERp
cmVjdG9yeVcocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogCiAgICAgICAgIC8vIExvYWQgdGhlIGxpYnJhcnkK
ICAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5RXhXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLCAwLCBMT0FEX1dJVEhfQUxURVJFRF9TRUFSQ0hfUEFUSCk7CiAK
KyNpZiAhUExBVEZPUk0oV0lOQ0UpCiAgICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5
VyhjdXJyZW50UGF0aCkpIHsKICAgICAgICAgICAgIGlmIChtX21vZHVsZSkKICAgICAgICAgICAg
ICAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQorI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKCFtX21vZHVsZSkKQEAgLTI3Mywx
MyArMjc4LDEzIEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCiAgICAgTlBfSW5pdGlhbGl6
ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IDA7CiAgICAgTlBFcnJvciBucEVycjsKIAotICAgIE5Q
X0luaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1
bGUsICJOUF9Jbml0aWFsaXplIik7Ci0gICAgTlBfR2V0RW50cnlQb2ludHMgPSAoTlBfR2V0RW50
cnlQb2ludHNGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfR2V0RW50cnlQb2lu
dHMiKTsKLSAgICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRyKUdldFByb2NB
ZGRyZXNzKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKKyAgICBOUF9Jbml0aWFsaXplID0gKE5Q
X0luaXRpYWxpemVGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCBfVCgiTlBfSW5pdGlh
bGl6ZSIpKTsKKyAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRyeVBvaW50c0Z1bmNQ
dHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsIF9UKCJOUF9HZXRFbnRyeVBvaW50cyIpKTsKKyAg
ICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRyKUdldFByb2NBZGRyZXNzKG1f
bW9kdWxlLCBfVCgiTlBfU2h1dGRvd24iKSk7CiAKICAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwg
IU5QX0dldEVudHJ5UG9pbnRzIHx8ICFtX05QUF9TaHV0ZG93bikKICAgICAgICAgZ290byBhYm9y
dDsKLSAgCisKICAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1
bmNzKSk7CiAgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwIGIvV2Vi
Q29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAppbmRleCBmMGEyYTE0Li43NjI4OWI3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCisrKyBi
L1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTY1LDYgKzY2LDEzIEBACiAjaW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+CiAjaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KIAorI2lmIFBMQVRGT1JNKFdJTkNFKQorI3VuZGVmIExPR19O
UEVSUk9SCisjZGVmaW5lIExPR19OUEVSUk9SKHgpCisjdW5kZWYgTE9HX1BMVUdJTl9ORVRfRVJS
T1IKKyNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKQorI2VuZGlmCisKICNpZiBQTEFURk9S
TShRVCkKICNpbmNsdWRlIDxRV2lkZ2V0Lmg+CiAjZW5kaWYKQEAgLTk4LDYgKzEwNiw3IEBAIGNv
bnN0IExQQ1dTVFIga1dlYlBsdWdpblZpZXdQcm9wZXJ0eSA9IEwiV2ViUGx1Z2luVmlld1Byb3Bl
cnR5IjsKIAogc3RhdGljIGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81
LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIw
MDYxMDEwIEZpcmVmb3gvMi4wIjsKIAorI2lmICFQTEFURk9STShXSU5DRSkKIC8vIFRoZSBjb2Rl
IHVzZWQgdG8gaG9vayBCZWdpblBhaW50L0VuZFBhaW50IG9yaWdpbmFsbHkgY2FtZSBmcm9tCiAv
LyA8aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+LgogLy8gQ29w
eXJpZ2h0IChDKSAyMDAwIGJ5IEZlbmcgWXVhbiAod3d3LmZlbmd5dWFuLmNvbSkuCkBAIC0yMDcs
NiArMjE2LDcgQEAgc3RhdGljIHZvaWQgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tzKEhEQyAo
V0lOQVBJKmhvb2tlZEJlZ2luUGFpbnQpKEhXTkQsIFBBSU4KICAgICBob29rKCJ1c2VyMzIuZGxs
IiwgIkVuZFBhaW50IiwgZW5kUGFpbnRTeXNDYWxsLCBlbmRQYWludCwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB2b2lkICo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pihob29rZWRFbmRQYWlu
dCkpKTsKIAogfQorI2VuZGlmCiAKIHN0YXRpYyBib29sIHJlZ2lzdGVyUGx1Z2luVmlldygpCiB7
CkBAIC0yMjIsMTEgKzIzMiwxOCBAQCBzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXcoKQog
CiAgICAgQVNTRVJUKFBhZ2U6Omluc3RhbmNlSGFuZGxlKCkpOwogCisjaWYgUExBVEZPUk0oV0lO
Q0UpCisgICAgV05EQ0xBU1Mgd2NleCA9IHsgMCB9OworI2Vsc2UKICAgICBXTkRDTEFTU0VYIHdj
ZXg7Ci0KICAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKKyAgICB3Y2V4LmhJ
Y29uU20gICAgICAgID0gMDsKKyNlbmRpZgogCiAgICAgd2NleC5zdHlsZSAgICAgICAgICA9IENT
X0RCTENMS1M7CisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAgd2NleC5zdHlsZSAgICAgICAgICB8
PSBDU19QQVJFTlREQzsKKyNlbmRpZgogICAgIHdjZXgubHBmblduZFByb2MgICAgPSBEZWZXaW5k
b3dQcm9jOwogICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOwogICAgIHdjZXguY2JXbmRFeHRy
YSAgICAgPSAwOwpAQCAtMjM2LDkgKzI1MywxMiBAQCBzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdp
blZpZXcoKQogICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAoSEJSVVNIKUNPTE9SX1dJTkRPVzsK
ICAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKICAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0g
a1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWU7Ci0gICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7
CiAKKyNpZiBQTEFURk9STShXSU5DRSkKKyAgICByZXR1cm4gISFSZWdpc3RlckNsYXNzKCZ3Y2V4
KTsKKyNlbHNlCiAgICAgcmV0dXJuICEhUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKKyNlbmRpZgog
fQogCiBMUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXc6OlBsdWdpblZpZXdXbmRQcm9jKEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQpAQCAtMzEw
LDYgKzMzMCw3IEBAIFBsdWdpblZpZXc6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2Us
IFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgIG1fcG9wUG9wdXBzU3RhdGVU
aW1lci5zdGFydE9uZVNob3QoMCk7CiAgICAgfQogCisjaWYgIVBMQVRGT1JNKFdJTkNFKQogICAg
IGlmIChtZXNzYWdlID09IFdNX1BSSU5UQ0xJRU5UKSB7CiAgICAgICAgIC8vIE1vc3QgKGFsbD8p
IHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3QgcmVzcG9uZCB0byBXTV9QUklOVENMSUVOVCwgc28gd2UK
ICAgICAgICAgLy8gY2hhbmdlIHRoZSBtZXNzYWdlIHRvIFdNX1BBSU5UIGFuZCByZWx5IG9uIG91
ciBob29rZWQgdmVyc2lvbnMgb2YKQEAgLTMxNyw2ICszMzgsNyBAQCBQbHVnaW5WaWV3Ojp3bmRQ
cm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFt
KQogICAgICAgICBtZXNzYWdlID0gV01fUEFJTlQ7CiAgICAgICAgIG1fd21QcmludEhEQyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8SERDPih3UGFyYW0pOwogICAgIH0KKyNlbmRpZgogCiAgICAgLy8gQ2Fs
bCB0aGUgcGx1Zy1pbidzIHdpbmRvdyBwcm9jLgogICAgIExSRVNVTFQgcmVzdWx0ID0gOjpDYWxs
V2luZG93UHJvYyhtX3BsdWdpblduZFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFt
KTsKQEAgLTMzOSw3ICszNjEsMTEgQEAgdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRn
ZXQoKQogICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKICAgICBJbnRS
ZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKIAorI2lmIFBMQVRGT1JNKFdJTkNFKQorICAg
IG1fd2luZG93UmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSk7
CisjZWxzZQogICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1Rv
V2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXplKCkpOworI2Vu
ZGlmCiAgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CiAgICAgbV9jbGlwUmVjdC5t
b3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CiAKQEAgLTQyNiw2ICs0
NTIsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBucEV2ZW50
KQogCiB2b2lkIFBsdWdpblZpZXc6OnBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CisjaWYg
IVBMQVRGT1JNKFdJTkNFKQogICAgIEFTU0VSVChtX2lzV2luZG93ZWQpOwogICAgIEFTU0VSVChj
b250ZXh0LT5zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkpOwogCkBAIC00NTAsNiArNDc3LDcg
QEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdAogICAgIFNldFdvcmxkVHJhbnNmb3JtKGhkYywgJm9y
aWdpbmFsVHJhbnNmb3JtKTsKIAogICAgIGNvbnRleHQtPnJlbGVhc2VXaW5kb3dzQ29udGV4dCho
ZGMsIGZyYW1lUmVjdCgpLCBmYWxzZSk7CisjZW5kaWYKIH0KIAogdm9pZCBQbHVnaW5WaWV3Ojpw
YWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC00
NjQsOCArNDkyLDEwIEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
bV9pc1dpbmRvd2VkKSB7CisjaWYgIVBMQVRGT1JNKFdJTkNFKQogICAgICAgICBpZiAoY29udGV4
dC0+c2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cygpKQogICAgICAgICAgICAgcGFpbnRXaW5kb3dl
ZFBsdWdpbkludG9Db250ZXh0KGNvbnRleHQsIHJlY3QpOworI2VuZGlmCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTQ3OCw3ICs1MDgsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICAvLyBvZiB0
aGUgd2luZG93IGFuZCB0aGUgcGx1Z2luIGV4cGVjdHMgdGhhdCB0aGUgcGFzc2VkIGluIERDIGhh
cyB3aW5kb3cgY29vcmRpbmF0ZXMuCiAgICAgLy8gSW4gdGhlIFF0IHBvcnQgd2UgYWx3YXlzIGRy
YXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZlciBhbmQgdGhlcmVmb3JlIG5lZWQgdG8gcHJlc2VydmUK
ICAgICAvLyB0aGUgdHJhbnNsYXRpb24gc2V0IGluIGdldFdpbmRvd3NDb250ZXh0LgotI2lmICFQ
TEFURk9STShRVCkKKyNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShXSU5DRSkKICAgICBp
ZiAoIWNvbnRleHQtPmluVHJhbnNwYXJlbmN5TGF5ZXIoKSkgewogICAgICAgICBYRk9STSB0cmFu
c2Zvcm07CiAgICAgICAgIEdldFdvcmxkVHJhbnNmb3JtKGhkYywgJnRyYW5zZm9ybSk7CkBAIC00
OTEsMTUgKzUyMSwyNCBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdp
bmRvd1R5cGVEcmF3YWJsZTsKICAgICBtX25wV2luZG93LndpbmRvdyA9IGhkYzsKIAotICAgIElu
dFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9X
aW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7Ci0gICAgCiAgICAgV0lORE9XUE9TIHdpbmRv
d3BvczsKICAgICBtZW1zZXQoJndpbmRvd3BvcywgMCwgc2l6ZW9mKHdpbmRvd3BvcykpOwogCisj
aWYgUExBVEZPUk0oV0lOQ0UpCisgICAgSW50UmVjdCByID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3
Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpKTsKKyAgICAKKyAgICB3
aW5kb3dwb3MueCA9IHIueCgpOworICAgIHdpbmRvd3Bvcy55ID0gci55KCk7CisgICAgd2luZG93
cG9zLmN4ID0gci53aWR0aCgpOworICAgIHdpbmRvd3Bvcy5jeSA9IHIuaGVpZ2h0KCk7CisjZWxz
ZQorICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNv
bnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7CisgICAgCiAgICAgd2luZG93
cG9zLnggPSBwLngoKTsKICAgICB3aW5kb3dwb3MueSA9IHAueSgpOwogICAgIHdpbmRvd3Bvcy5j
eCA9IGZyYW1lUmVjdCgpLndpZHRoKCk7CiAgICAgd2luZG93cG9zLmN5ID0gZnJhbWVSZWN0KCku
aGVpZ2h0KCk7CisjZW5kaWYKIAogICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9XSU5ET1dQT1NDSEFO
R0VEOwogICAgIG5wRXZlbnQubFBhcmFtID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzI+KCZ3aW5k
b3dwb3MpOwpAQCAtNTQwLDggKzU3OSwxMCBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJv
YXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOwogfQogCisjaWYgIVBMQVRGT1JNKFdJTkNFKQogZXh0ZXJuIEhDVVJTT1IgbGFz
dFNldEN1cnNvcjsKIGV4dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7CisjZW5kaWYKIAog
dm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQogewpA
QCAtNjA2LDcgKzY0Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3Vz
ZUV2ZW50KiBldmVudCkKICAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKICAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAKLSNpZiAhUExBVEZPUk0oUVQpCisjaWYg
IVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oV0lOQ0UpCiAgICAgLy8gQ3VycmVudGx5LCBXaWRn
ZXQ6OnNldEN1cnNvciBpcyBhbHdheXMgY2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZl
bnRIYW5kbGVyLmNwcAogICAgIC8vIGFuZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0
IGlnbm9yZU5leHRTZXRDdXJzb3IgdG8gdHJ1ZSBoZXJlIHRvIHByZXZlbnQgdGhhdC4KICAgICBp
Z25vcmVOZXh0U2V0Q3Vyc29yID0gdHJ1ZTsKQEAgLTYxOCw2ICs2NTksMTQgQEAgdm9pZCBQbHVn
aW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQogewogICAgIFdpZGdldDo6c2V0
UGFyZW50KHBhcmVudCk7CiAKKyNpZiBQTEFURk9STShXSU5DRSkKKyAgICBpZiAocGFyZW50KSB7
CisgICAgICAgIGluaXQoKTsKKyAgICAgICAgaWYgKHBhcmVudC0+aXNWaXNpYmxlKCkpCisgICAg
ICAgICAgICBzaG93KCk7CisgICAgICAgIGVsc2UgaGlkZSgpOworICAgIH0KKyNlbHNlCiAgICAg
aWYgKHBhcmVudCkKICAgICAgICAgaW5pdCgpOwogICAgIGVsc2UgewpAQCAtNjMxLDcgKzY4MCw3
IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKICAgICAg
ICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gZm9jdXNlZFdpbmRvdyB8fCA6OklzQ2hp
bGQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgZm9jdXNlZFdpbmRvdykpCiAgICAgICAgICAgICA6
OlNldEZvY3VzKDApOwogICAgIH0KLQorI2VuZGlmCiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0
UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCkBAIC02NTQsNiArNzAzLDE3IEBAIHZvaWQgUGx1
Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgaWYgKCFt
X2lzU3RhcnRlZCkKICAgICAgICAgcmV0dXJuOwogCisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAg
SW50UmVjdCByID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1Rv
V2luZG93KHJlY3QpOworICAgIG1fbnBXaW5kb3cueCA9IHIueCgpOworICAgIG1fbnBXaW5kb3cu
eSA9IHIueSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHIud2lkdGgoKTsKKyAgICBtX25w
V2luZG93LmhlaWdodCA9IHIuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJp
Z2h0ID0gci53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gci5oZWln
aHQoKTsKKyNlbHNlCiAgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBh
cmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOwogICAgIG1fbnBXaW5k
b3cueCA9IHAueCgpOwogICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOwpAQCAtNjYxLDEwICs3MjEs
MTEgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKICAgICBtX25wV2luZG93LndpZHRoID0gcmVjdC53aWR0aCgpOwogICAgIG1fbnBXaW5kb3cu
aGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKIAotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9
IDA7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwogICAgIG1fbnBXaW5kb3cuY2xp
cFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7CiAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0
b20gPSByZWN0LmhlaWdodCgpOworI2VuZGlmCisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0
ID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CiAKICAgICBpZiAobV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgewogICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CkBAIC02NzcsOSArNzM4LDE3IEBAIHZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAKICAgICAg
ICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwogCisjaWYgUExBVEZPUk0oV0lOQ0Up
CisgICAgICAgIGlmICghbV9wbHVnaW5XbmRQcm9jKSB7CisgICAgICAgICAgICBXTkRQUk9DIGN1
cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpLCBHV0xfV05EUFJPQyk7CisgICAgICAgICAgICBpZiAoY3VycmVudFduZFByb2MgIT0gUGx1
Z2luVmlld1duZFByb2MpCisgICAgICAgICAgICAgICAgbV9wbHVnaW5XbmRQcm9jID0gKFdORFBS
T0MpU2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQywgKExP
TkcpUGx1Z2luVmlld1duZFByb2MpOworICAgICAgICB9CisjZWxzZQogICAgICAgICBXTkRQUk9D
IGN1cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdp
bldpZGdldCgpLCBHV0xQX1dORFBST0MpOwogICAgICAgICBpZiAoY3VycmVudFduZFByb2MgIT0g
UGx1Z2luVmlld1duZFByb2MpCiAgICAgICAgICAgICBtX3BsdWdpblduZFByb2MgPSAoV05EUFJP
QylTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywg
KExPTkcpUGx1Z2luVmlld1duZFByb2MpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC03MDEsMTAg
Kzc3MCwxNyBAQCB2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQogCiAgICAgLy8gVW5zdWJjbGFzcyB0
aGUgd2luZG93CiAgICAgaWYgKG1faXNXaW5kb3dlZCkgeworI2lmIFBMQVRGT1JNKFdJTkNFKQor
ICAgICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZyhw
bGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQyk7CisgICAgICAgIAorICAgICAgICBp
ZiAoY3VycmVudFduZFByb2MgPT0gUGx1Z2luVmlld1duZFByb2MpCisgICAgICAgICAgICBTZXRX
aW5kb3dMb25nKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTF9XTkRQUk9DLCAoTE9ORyltX3Bs
dWdpblduZFByb2MpOworI2Vsc2UKICAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChX
TkRQUk9DKUdldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQ
Uk9DKTsKICAgICAgICAgCiAgICAgICAgIGlmIChjdXJyZW50V25kUHJvYyA9PSBQbHVnaW5WaWV3
V25kUHJvYykKICAgICAgICAgICAgIFNldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9ORyltX3BsdWdpblduZFByb2MpOworI2VuZGlmCiAgICAg
fQogCiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOwpA
QCAtOTUyLDcgKzEwMjgsOSBAQCB2b2lkIFBsdWdpblZpZXc6OmluaXQoKQogCiAgICAgaWYgKG1f
aXNXaW5kb3dlZCkgewogICAgICAgICByZWdpc3RlclBsdWdpblZpZXcoKTsKKyNpZiAhUExBVEZP
Uk0oV0lOQ0UpCiAgICAgICAgIHNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyhob29rZWRCZWdp
blBhaW50LCBob29rZWRFbmRQYWludCk7CisjZW5kaWYKIAogICAgICAgICBEV09SRCBmbGFncyA9
IFdTX0NISUxEOwogICAgICAgICBpZiAoaXNTZWxmVmlzaWJsZSgpKQpAQCAtOTYxLDYgKzEwMzks
NyBAQCB2b2lkIFBsdWdpblZpZXc6OmluaXQoKQogICAgICAgICBIV05EIHBhcmVudFdpbmRvd0hh
bmRsZSA9IHdpbmRvd0hhbmRsZUZvclBsYXRmb3JtV2lkZ2V0KG1fcGFyZW50RnJhbWUtPnZpZXco
KS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKICAgICAgICAgSFdORCB3aW5kb3cg
PSA6OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lLCAwLCBmbGFn
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIHBh
cmVudFdpbmRvd0hhbmRsZSwgMCwgUGFnZTo6aW5zdGFuY2VIYW5kbGUoKSwgMCk7CisKICNpZiBQ
TEFURk9STShXSU5fT1MpICYmIFBMQVRGT1JNKFFUKQogICAgICAgICBtX3dpbmRvdyA9IHdpbmRv
dzsKICNlbHNlCkBAIC05NzEsNiArMTA1MCw4IEBAIHZvaWQgUGx1Z2luVmlldzo6aW5pdCgpCiAg
ICAgICAgIC8vIHRoZSBTaG9ja3dhdmUgRGlyZWN0b3IgcGx1Zy1pbi4KICNpZiBQTEFURk9STShX
SU5fT1MpICYmIFBMQVRGT1JNKFg4Nl82NCkgJiYgQ09NUElMRVIoTVNWQykKICAgICAgICAgOjpT
ZXRXaW5kb3dMb25nUHRyQShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MsIChM
T05HX1BUUilEZWZXaW5kb3dQcm9jQSk7CisjZWxpZiBQTEFURk9STShXSU5DRSkKKyAgICAgICAg
OjpTZXRXaW5kb3dMb25nKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTF9XTkRQUk9DLCAoTE9O
RylEZWZXaW5kb3dQcm9jKTsKICNlbHNlCiAgICAgICAgIDo6U2V0V2luZG93TG9uZ1B0ckEocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MsIChMT05HKURlZldpbmRvd1Byb2NBKTsK
ICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33550</attachid>
            <date>2009-07-27 08:57:56 -0700</date>
            <delta_ts>2009-07-27 09:17:11 -0700</delta_ts>
            <desc>fix a bug</desc>
            <filename>27713.patch</filename>
            <type>text/plain</type>
            <size>17471</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWQ4ZTY3Zi4uYmQ0OWMwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAwOS0wNy0yNyAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdJTkNFIFBPUlQ6IE1ha2UgcGx1Z2luIHdvcmsgZm9yIFdJTkNFCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzcxMworCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGx1Z2lucy93aW4vUGx1
Z2luRGF0YWJhc2VXaW4uY3BwOgorICAgICAgICAoU0hHZXRWYWx1ZSk6CisgICAgICAgIChQYXRo
UmVtb3ZlRmlsZVNwZWMpOgorICAgICAgICAoV2ViQ29yZTo6YWRkV2luZG93c01lZGlhUGxheWVy
UGx1Z2luRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1hY3JvbWVkaWFQbHVnaW5E
aXJlY3Rvcmllcyk6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpsb2FkKToKKyAgICAgICAgKiBwbHVn
aW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVyUGx1
Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp3bmRQcm9jKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6aW5pdCk6CisKIDIwMDktMDctMjQgIEtlbm5ldGggUm9oZGUgQ2hy
aXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3Ig
NjQgYml0IExpbnV4LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRh
YmFzZVdpbi5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcApp
bmRleCBjNTlmMTMzLi45ZTgyNDVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpbkRhdGFiYXNlV2luLmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFi
YXNlV2luLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDYgKzM4LDQ4IEBACiAjZGVmaW5lIF9j
b3VudG9mKHgpIChzaXplb2YoeCkvc2l6ZW9mKHhbMF0pKQogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShXSU5DRSkKKworLy8gV0lOQ0UgZG9lc24ndCBzdXBwb3J0IFJlZ2lzdHJ5IEtleSBBY2Nlc3Mg
UmlnaHRzLiBUaGUgcGFyYW1ldGVyIHNob3VsZCBhbHdheXMgYmUgMAorI2RlZmluZSBLRVlfRU5V
TUVSQVRFX1NVQl9LRVlTICAgICAgICAgICAgICAwCisKK0RXT1JEIFNIR2V0VmFsdWUoSEtFWSBo
a2V5LCBMUENXU1RSIHBzelN1YktleSwgTFBDV1NUUiBwc3pWYWx1ZSwgTFBEV09SRCBwZHdUeXBl
LCBMUFZPSUQgcHZEYXRhLCBMUERXT1JEIHBjYkRhdGEpCit7CisgICAgSEtFWSBrZXk7CisgICAg
aWYgKFJlZ09wZW5LZXlFeChoa2V5LCBwc3pTdWJLZXksIDAsIDAsICZrZXkpID09IEVSUk9SX1NV
Q0NFU1MpIHsKKyAgICAgICAgRFdPUkQgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGtleSwgcHN6
VmFsdWUsIDAsIHBkd1R5cGUsIChMUEJZVEUpcHZEYXRhLCBwY2JEYXRhKTsKKyAgICAgICAgUmVn
Q2xvc2VLZXkoa2V5KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgcmV0dXJu
IEVSUk9SX0lOVkFMSURfTkFNRTsKK30KKworQk9PTCBQYXRoUmVtb3ZlRmlsZVNwZWMoTFBXU1RS
IG1vZHVsZUZpbGVOYW1lU3RyKQoreworICAgIGlmICghKm1vZHVsZUZpbGVOYW1lU3RyKQorICAg
ICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBMUFdTVFIgbGFzdFBvcyA9IDA7CisgICAgTFBXU1RS
IGN1clBvcyA9IG1vZHVsZUZpbGVOYW1lU3RyOworICAgIGRvIHsKKyAgICAgICAgaWYgKCpjdXJQ
b3MgPT0gTCcvJyB8fCAqY3VyUG9zID09IEwnXFwnKQorICAgICAgICAgICAgbGFzdFBvcyA9IGN1
clBvczsKKyAgICB9IHdoaWxlICgqKytjdXJQb3MpOworCisgICAgaWYgKGxhc3RQb3MgPT0gY3Vy
UG9zIC0gMSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKGxhc3RQb3MpCisgICAg
ICAgICpsYXN0UG9zID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgbW9kdWxlRmlsZU5hbWVTdHJb
MF0gPSBMJ1xcJzsKKyAgICAgICAgbW9kdWxlRmlsZU5hbWVTdHJbMV0gPSAwOworICAgIH0KKwor
ICAgIHJldHVybiBUUlVFOworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Rh
dGljIGlubGluZSB2b2lkIGFkZFBsdWdpblBhdGhzRnJvbVJlZ2lzdHJ5KEhLRVkgcm9vdEtleSwg
SGFzaFNldDxTdHJpbmc+JiBwYXRocykKQEAgLTIxMCwxMiArMjUzLDE0IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBhZGRNb3ppbGxhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVj
dG9yaWVzKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2lu
RGlyZWN0b3J5KFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKIHsKKyNpZiAhUExBVEZPUk0o
V0lOQ0UpCiAgICAgLy8gVGhlIG5ldyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5zdGFsbGVkIGlu
IFxQRmlsZXNcUGx1Z2lucyBpZiBpdCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGluc3RhbGxzCiAg
ICAgV0NIQVIgcGx1Z2luRGlyZWN0b3J5U3RyW19NQVhfUEFUSCArIDFdOwogICAgIERXT1JEIHBs
dWdpbkRpcmVjdG9yeVNpemUgPSA6OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coVEVYVCgiJVNZ
U1RFTURSSVZFJVxcUEZpbGVzXFxQbHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0ciwgX2NvdW50
b2YocGx1Z2luRGlyZWN0b3J5U3RyKSk7CiAKICAgICBpZiAocGx1Z2luRGlyZWN0b3J5U2l6ZSA+
IDAgJiYgcGx1Z2luRGlyZWN0b3J5U2l6ZSA8PSBfY291bnRvZihwbHVnaW5EaXJlY3RvcnlTdHIp
KQogICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwg
cGx1Z2luRGlyZWN0b3J5U2l6ZSAtIDEpKTsKKyNlbmRpZgogCiAgICAgRFdPUkQgdHlwZTsKICAg
ICBXQ0hBUiBpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKQEAgLTMxMSw2ICsz
NTYsNyBAQCBleGl0OgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpbkRp
cmVjdG9yaWVzKFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKIHsKKyNpZiAhUExBVEZPUk0o
V0lOQ0UpCiAgICAgV0NIQVIgc3lzdGVtRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKIAogICAgIGlm
IChHZXRTeXN0ZW1EaXJlY3Rvcnkoc3lzdGVtRGlyZWN0b3J5U3RyLCBfY291bnRvZihzeXN0ZW1E
aXJlY3RvcnlTdHIpKSA9PSAwKQpAQCAtMzIzLDYgKzM2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBhZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9y
aWVzKQogCiAgICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGly
ZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEwIikpOwogICAgIGRpcmVjdG9y
aWVzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKKyNlbmRpZgogfQogCiBWZWN0b3I8
U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAgYi9XZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCmluZGV4IDQwZDliMmEuLjUwZmQwMTkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAKKysr
IGIvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcApAQCAtMSw2ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI0NCw2ICsyNDUsNyBAQCBib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQogICAgICAgICBtX2xv
YWRDb3VudCsrOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgeworI2lmICFQTEFU
Rk9STShXSU5DRSkKICAgICAgICAgV0NIQVIgY3VycmVudFBhdGhbTUFYX1BBVEhdOwogCiAgICAg
ICAgIGlmICghOjpHZXRDdXJyZW50RGlyZWN0b3J5VyhNQVhfUEFUSCwgY3VycmVudFBhdGgpKQpA
QCAtMjUzLDE1ICsyNTUsMTggQEAgYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKIAogICAgICAg
ICBpZiAoITo6U2V0Q3VycmVudERpcmVjdG9yeVcocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogCiAgICAgICAg
IC8vIExvYWQgdGhlIGxpYnJhcnkKICAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5RXhX
KG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCBMT0FEX1dJVEhfQUxU
RVJFRF9TRUFSQ0hfUEFUSCk7CiAKKyNpZiAhUExBVEZPUk0oV0lOQ0UpCiAgICAgICAgIGlmICgh
OjpTZXRDdXJyZW50RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsKICAgICAgICAgICAgIGlmICht
X21vZHVsZSkKICAgICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorI2VuZGlmCiAgICAgfQogCiAgICAgaWYg
KCFtX21vZHVsZSkKQEAgLTI3MywxMyArMjc4LDEzIEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6bG9h
ZCgpCiAgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IDA7CiAgICAgTlBF
cnJvciBucEVycjsKIAotICAgIE5QX0luaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIp
R2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7Ci0gICAgTlBfR2V0RW50
cnlQb2ludHMgPSAoTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9k
dWxlLCAiTlBfR2V0RW50cnlQb2ludHMiKTsKLSAgICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1
dGRvd25Qcm9jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKKyAg
ICBOUF9Jbml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1f
bW9kdWxlLCBfVCgiTlBfSW5pdGlhbGl6ZSIpKTsKKyAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChO
UF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsIF9UKCJOUF9H
ZXRFbnRyeVBvaW50cyIpKTsKKyAgICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9j
UHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCBfVCgiTlBfU2h1dGRvd24iKSk7CiAKICAgICBp
ZiAoIU5QX0luaXRpYWxpemUgfHwgIU5QX0dldEVudHJ5UG9pbnRzIHx8ICFtX05QUF9TaHV0ZG93
bikKICAgICAgICAgZ290byBhYm9ydDsKLSAgCisKICAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3Ms
IDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7CiAgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6
ZW9mKG1fcGx1Z2luRnVuY3MpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpblZpZXdXaW4uY3BwIGIvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcApp
bmRleCBmMGEyYTE0Li43NjI4OWI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpblZpZXdXaW4uY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5j
cHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDYgKzY2LDEzIEBACiAjaW5jbHVkZSA8cnVudGlt
ZS9KU1ZhbHVlLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KIAorI2lmIFBMQVRGT1JN
KFdJTkNFKQorI3VuZGVmIExPR19OUEVSUk9SCisjZGVmaW5lIExPR19OUEVSUk9SKHgpCisjdW5k
ZWYgTE9HX1BMVUdJTl9ORVRfRVJST1IKKyNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKQor
I2VuZGlmCisKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxRV2lkZ2V0Lmg+CiAjZW5kaWYK
QEAgLTk4LDYgKzEwNiw3IEBAIGNvbnN0IExQQ1dTVFIga1dlYlBsdWdpblZpZXdQcm9wZXJ0eSA9
IEwiV2ViUGx1Z2luVmlld1Byb3BlcnR5IjsKIAogc3RhdGljIGNvbnN0IGNoYXIqIE1vemlsbGFV
c2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyBlbi1V
UzsgcnY6MS44LjEpIEdlY2tvLzIwMDYxMDEwIEZpcmVmb3gvMi4wIjsKIAorI2lmICFQTEFURk9S
TShXSU5DRSkKIC8vIFRoZSBjb2RlIHVzZWQgdG8gaG9vayBCZWdpblBhaW50L0VuZFBhaW50IG9y
aWdpbmFsbHkgY2FtZSBmcm9tCiAvLyA8aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93
bXByaW50Lmh0bWw+LgogLy8gQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEZlbmcgWXVhbiAod3d3LmZl
bmd5dWFuLmNvbSkuCkBAIC0yMDcsNiArMjE2LDcgQEAgc3RhdGljIHZvaWQgc2V0VXBPZmZzY3Jl
ZW5QYWludGluZ0hvb2tzKEhEQyAoV0lOQVBJKmhvb2tlZEJlZ2luUGFpbnQpKEhXTkQsIFBBSU4K
ICAgICBob29rKCJ1c2VyMzIuZGxsIiwgIkVuZFBhaW50IiwgZW5kUGFpbnRTeXNDYWxsLCBlbmRQ
YWludCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkICo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRy
ZGlmZl90Pihob29rZWRFbmRQYWludCkpKTsKIAogfQorI2VuZGlmCiAKIHN0YXRpYyBib29sIHJl
Z2lzdGVyUGx1Z2luVmlldygpCiB7CkBAIC0yMjIsMTEgKzIzMiwxOCBAQCBzdGF0aWMgYm9vbCBy
ZWdpc3RlclBsdWdpblZpZXcoKQogCiAgICAgQVNTRVJUKFBhZ2U6Omluc3RhbmNlSGFuZGxlKCkp
OwogCisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAgV05EQ0xBU1Mgd2NleCA9IHsgMCB9OworI2Vs
c2UKICAgICBXTkRDTEFTU0VYIHdjZXg7Ci0KICAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRD
TEFTU0VYKTsKKyAgICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKKyNlbmRpZgogCiAgICAgd2Nl
eC5zdHlsZSAgICAgICAgICA9IENTX0RCTENMS1M7CisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAg
d2NleC5zdHlsZSAgICAgICAgICB8PSBDU19QQVJFTlREQzsKKyNlbmRpZgogICAgIHdjZXgubHBm
blduZFByb2MgICAgPSBEZWZXaW5kb3dQcm9jOwogICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAw
OwogICAgIHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOwpAQCAtMjM2LDkgKzI1MywxMiBAQCBzdGF0
aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXcoKQogICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAo
SEJSVVNIKUNPTE9SX1dJTkRPVzsKICAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKICAgICB3
Y2V4Lmxwc3pDbGFzc05hbWUgID0ga1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWU7Ci0gICAgd2Nl
eC5oSWNvblNtICAgICAgICA9IDA7CiAKKyNpZiBQTEFURk9STShXSU5DRSkKKyAgICByZXR1cm4g
ISFSZWdpc3RlckNsYXNzKCZ3Y2V4KTsKKyNlbHNlCiAgICAgcmV0dXJuICEhUmVnaXN0ZXJDbGFz
c0V4KCZ3Y2V4KTsKKyNlbmRpZgogfQogCiBMUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXc6OlBs
dWdpblZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBM
UEFSQU0gbFBhcmFtKQpAQCAtMzEwLDYgKzMzMCw3IEBAIFBsdWdpblZpZXc6OnduZFByb2MoSFdO
RCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAg
ICAgIG1fcG9wUG9wdXBzU3RhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7CiAgICAgfQogCisjaWYg
IVBMQVRGT1JNKFdJTkNFKQogICAgIGlmIChtZXNzYWdlID09IFdNX1BSSU5UQ0xJRU5UKSB7CiAg
ICAgICAgIC8vIE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3QgcmVzcG9uZCB0byBX
TV9QUklOVENMSUVOVCwgc28gd2UKICAgICAgICAgLy8gY2hhbmdlIHRoZSBtZXNzYWdlIHRvIFdN
X1BBSU5UIGFuZCByZWx5IG9uIG91ciBob29rZWQgdmVyc2lvbnMgb2YKQEAgLTMxNyw2ICszMzgs
NyBAQCBQbHVnaW5WaWV3Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAgICAgICBtZXNzYWdlID0gV01fUEFJTlQ7CiAgICAg
ICAgIG1fd21QcmludEhEQyA9IHJlaW50ZXJwcmV0X2Nhc3Q8SERDPih3UGFyYW0pOwogICAgIH0K
KyNlbmRpZgogCiAgICAgLy8gQ2FsbCB0aGUgcGx1Zy1pbidzIHdpbmRvdyBwcm9jLgogICAgIExS
RVNVTFQgcmVzdWx0ID0gOjpDYWxsV2luZG93UHJvYyhtX3BsdWdpblduZFByb2MsIGhXbmQsIG1l
c3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKQEAgLTMzOSw3ICszNjEsMTEgQEAgdm9pZCBQbHVnaW5W
aWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQogICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1f
d2luZG93UmVjdDsKICAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKIAorI2lm
IFBMQVRGT1JNKFdJTkNFKQorICAgIG1fd2luZG93UmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNU
b1dpbmRvdyhmcmFtZVJlY3QoKSk7CisjZWxzZQogICAgIG1fd2luZG93UmVjdCA9IEludFJlY3Qo
ZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFt
ZVJlY3QoKS5zaXplKCkpOworI2VuZGlmCiAgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0
KCk7CiAgICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0
LnkoKSk7CiAKQEAgLTQyNiw2ICs0NTIsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBF
dmVudChOUEV2ZW50JiBucEV2ZW50KQogCiB2b2lkIFBsdWdpblZpZXc6OnBhaW50V2luZG93ZWRQ
bHVnaW5JbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpIGNvbnN0CiB7CisjaWYgIVBMQVRGT1JNKFdJTkNFKQogICAgIEFTU0VSVChtX2lzV2lu
ZG93ZWQpOwogICAgIEFTU0VSVChjb250ZXh0LT5zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkp
OwogCkBAIC00NTAsNiArNDc3LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludFdpbmRvd2VkUGx1
Z2luSW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdAogICAgIFNldFdv
cmxkVHJhbnNmb3JtKGhkYywgJm9yaWdpbmFsVHJhbnNmb3JtKTsKIAogICAgIGNvbnRleHQtPnJl
bGVhc2VXaW5kb3dzQ29udGV4dChoZGMsIGZyYW1lUmVjdCgpLCBmYWxzZSk7CisjZW5kaWYKIH0K
IAogdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIHJlY3QpCkBAIC00NjQsOCArNDkyLDEwIEBAIHZvaWQgUGx1Z2luVmlldzo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisjaWYgIVBMQVRGT1JNKFdJTkNF
KQogICAgICAgICBpZiAoY29udGV4dC0+c2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cygpKQogICAg
ICAgICAgICAgcGFpbnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KGNvbnRleHQsIHJlY3QpOwor
I2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ3OCw3ICs1MDgsNyBAQCB2b2lk
IFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVj
dCYgcmVjdCkKICAgICAvLyBvZiB0aGUgd2luZG93IGFuZCB0aGUgcGx1Z2luIGV4cGVjdHMgdGhh
dCB0aGUgcGFzc2VkIGluIERDIGhhcyB3aW5kb3cgY29vcmRpbmF0ZXMuCiAgICAgLy8gSW4gdGhl
IFF0IHBvcnQgd2UgYWx3YXlzIGRyYXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZlciBhbmQgdGhlcmVm
b3JlIG5lZWQgdG8gcHJlc2VydmUKICAgICAvLyB0aGUgdHJhbnNsYXRpb24gc2V0IGluIGdldFdp
bmRvd3NDb250ZXh0LgotI2lmICFQTEFURk9STShRVCkKKyNpZiAhUExBVEZPUk0oUVQpICYmICFQ
TEFURk9STShXSU5DRSkKICAgICBpZiAoIWNvbnRleHQtPmluVHJhbnNwYXJlbmN5TGF5ZXIoKSkg
ewogICAgICAgICBYRk9STSB0cmFuc2Zvcm07CiAgICAgICAgIEdldFdvcmxkVHJhbnNmb3JtKGhk
YywgJnRyYW5zZm9ybSk7CkBAIC00OTEsMTUgKzUyMSwyNCBAQCB2b2lkIFBsdWdpblZpZXc6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBt
X25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKICAgICBtX25wV2luZG93Lndp
bmRvdyA9IGhkYzsKIAotICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihw
YXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7Ci0gICAg
CiAgICAgV0lORE9XUE9TIHdpbmRvd3BvczsKICAgICBtZW1zZXQoJndpbmRvd3BvcywgMCwgc2l6
ZW9mKHdpbmRvd3BvcykpOwogCisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAgSW50UmVjdCByID0g
c3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KGZyYW1l
UmVjdCgpKTsKKyAgICAKKyAgICB3aW5kb3dwb3MueCA9IHIueCgpOworICAgIHdpbmRvd3Bvcy55
ID0gci55KCk7CisgICAgd2luZG93cG9zLmN4ID0gci53aWR0aCgpOworICAgIHdpbmRvd3Bvcy5j
eSA9IHIuaGVpZ2h0KCk7CisjZWxzZQorICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFt
ZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24o
KSk7CisgICAgCiAgICAgd2luZG93cG9zLnggPSBwLngoKTsKICAgICB3aW5kb3dwb3MueSA9IHAu
eSgpOwogICAgIHdpbmRvd3Bvcy5jeCA9IGZyYW1lUmVjdCgpLndpZHRoKCk7CiAgICAgd2luZG93
cG9zLmN5ID0gZnJhbWVSZWN0KCkuaGVpZ2h0KCk7CisjZW5kaWYKIAogICAgIG5wRXZlbnQuZXZl
bnQgPSBXTV9XSU5ET1dQT1NDSEFOR0VEOwogICAgIG5wRXZlbnQubFBhcmFtID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzI+KCZ3aW5kb3dwb3MpOwpAQCAtNTQwLDggKzU3OSwxMCBAQCB2b2lkIFBs
dWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAg
ICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCisjaWYgIVBMQVRGT1JNKFdJTkNF
KQogZXh0ZXJuIEhDVVJTT1IgbGFzdFNldEN1cnNvcjsKIGV4dGVybiBib29sIGlnbm9yZU5leHRT
ZXRDdXJzb3I7CisjZW5kaWYKIAogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1v
dXNlRXZlbnQqIGV2ZW50KQogewpAQCAtNjA2LDcgKzY0Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKICAgICBpZiAoIWRpc3BhdGNoTlBF
dmVudChucEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAKLSNp
ZiAhUExBVEZPUk0oUVQpCisjaWYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oV0lOQ0UpCiAg
ICAgLy8gQ3VycmVudGx5LCBXaWRnZXQ6OnNldEN1cnNvciBpcyBhbHdheXMgY2FsbGVkIGFmdGVy
IHRoaXMgZnVuY3Rpb24gaW4gRXZlbnRIYW5kbGVyLmNwcAogICAgIC8vIGFuZCBzaW5jZSB3ZSBk
b24ndCB3YW50IHRoYXQgd2Ugc2V0IGlnbm9yZU5leHRTZXRDdXJzb3IgdG8gdHJ1ZSBoZXJlIHRv
IHByZXZlbnQgdGhhdC4KICAgICBpZ25vcmVOZXh0U2V0Q3Vyc29yID0gdHJ1ZTsKQEAgLTYxOCw2
ICs2NTksMTQgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50
KQogewogICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7CiAKKyNpZiBQTEFURk9STShXSU5D
RSkKKyAgICBpZiAocGFyZW50KSB7CisgICAgICAgIGluaXQoKTsKKyAgICAgICAgaWYgKHBhcmVu
dC0+aXNWaXNpYmxlKCkpCisgICAgICAgICAgICBzaG93KCk7CisgICAgICAgIGVsc2UgaGlkZSgp
OworICAgIH0KKyNlbHNlCiAgICAgaWYgKHBhcmVudCkKICAgICAgICAgaW5pdCgpOwogICAgIGVs
c2UgewpAQCAtNjMxLDcgKzY4MCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9s
bFZpZXcqIHBhcmVudCkKICAgICAgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gZm9j
dXNlZFdpbmRvdyB8fCA6OklzQ2hpbGQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgZm9jdXNlZFdp
bmRvdykpCiAgICAgICAgICAgICA6OlNldEZvY3VzKDApOwogICAgIH0KLQorI2VuZGlmCiB9CiAK
IHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCkBAIC02NTQs
NiArNzAzLDE3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCiAgICAgaWYgKCFtX2lzU3RhcnRlZCkKICAgICAgICAgcmV0dXJuOwogCisjaWYg
UExBVEZPUk0oV0lOQ0UpCisgICAgSW50UmVjdCByID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4o
cGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KHJlY3QpOworICAgIG1fbnBXaW5kb3cueCA9IHIu
eCgpOworICAgIG1fbnBXaW5kb3cueSA9IHIueSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9
IHIud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmhlaWdodCA9IHIuaGVpZ2h0KCk7CisKKyAgICBt
X25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gci53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xp
cFJlY3QuYm90dG9tID0gci5oZWlnaHQoKTsKKyNlbHNlCiAgICAgSW50UG9pbnQgcCA9IHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0
aW9uKCkpOwogICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOwogICAgIG1fbnBXaW5kb3cueSA9IHAu
eSgpOwpAQCAtNjYxLDEwICs3MjEsMTEgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1Jl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBtX25wV2luZG93LndpZHRoID0gcmVjdC53aWR0
aCgpOwogICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKIAotICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAw
OwogICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7CiAgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOworI2VuZGlmCisgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9
IDA7CiAKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgewogICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CkBAIC02
NzcsOSArNzM4LDE3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiAKICAgICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwog
CisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAgICAgIGlmICghbV9wbHVnaW5XbmRQcm9jKSB7Cisg
ICAgICAgICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9u
ZyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQyk7CisgICAgICAgICAgICBpZiAo
Y3VycmVudFduZFByb2MgIT0gUGx1Z2luVmlld1duZFByb2MpCisgICAgICAgICAgICAgICAgbV9w
bHVnaW5XbmRQcm9jID0gKFdORFBST0MpU2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpLCBHV0xfV05EUFJPQywgKExPTkcpUGx1Z2luVmlld1duZFByb2MpOworICAgICAgICB9Cisj
ZWxzZQogICAgICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93
TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MpOwogICAgICAgICBp
ZiAoY3VycmVudFduZFByb2MgIT0gUGx1Z2luVmlld1duZFByb2MpCiAgICAgICAgICAgICBtX3Bs
dWdpblduZFByb2MgPSAoV05EUFJPQylTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCksIEdXTFBfV05EUFJPQywgKExPTkcpUGx1Z2luVmlld1duZFByb2MpOworI2VuZGlmCiAg
ICAgfQogfQogCkBAIC03MDEsMTAgKzc3MCwxNyBAQCB2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQog
CiAgICAgLy8gVW5zdWJjbGFzcyB0aGUgd2luZG93CiAgICAgaWYgKG1faXNXaW5kb3dlZCkgewor
I2lmIFBMQVRGT1JNKFdJTkNFKQorICAgICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdO
RFBST0MpR2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQyk7
CisgICAgICAgIAorICAgICAgICBpZiAoY3VycmVudFduZFByb2MgPT0gUGx1Z2luVmlld1duZFBy
b2MpCisgICAgICAgICAgICBTZXRXaW5kb3dMb25nKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdX
TF9XTkRQUk9DLCAoTE9ORyltX3BsdWdpblduZFByb2MpOworI2Vsc2UKICAgICAgICAgV05EUFJP
QyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DKTsKICAgICAgICAgCiAgICAgICAgIGlmIChjdXJyZW50
V25kUHJvYyA9PSBQbHVnaW5WaWV3V25kUHJvYykKICAgICAgICAgICAgIFNldFdpbmRvd0xvbmdQ
dHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9ORyltX3BsdWdpbldu
ZFByb2MpOworI2VuZGlmCiAgICAgfQogCiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoZmFsc2UpOwpAQCAtOTUyLDcgKzEwMjgsOSBAQCB2b2lkIFBsdWdpblZpZXc6
OmluaXQoKQogCiAgICAgaWYgKG1faXNXaW5kb3dlZCkgewogICAgICAgICByZWdpc3RlclBsdWdp
blZpZXcoKTsKKyNpZiAhUExBVEZPUk0oV0lOQ0UpCiAgICAgICAgIHNldFVwT2Zmc2NyZWVuUGFp
bnRpbmdIb29rcyhob29rZWRCZWdpblBhaW50LCBob29rZWRFbmRQYWludCk7CisjZW5kaWYKIAog
ICAgICAgICBEV09SRCBmbGFncyA9IFdTX0NISUxEOwogICAgICAgICBpZiAoaXNTZWxmVmlzaWJs
ZSgpKQpAQCAtOTYxLDYgKzEwMzksNyBAQCB2b2lkIFBsdWdpblZpZXc6OmluaXQoKQogICAgICAg
ICBIV05EIHBhcmVudFdpbmRvd0hhbmRsZSA9IHdpbmRvd0hhbmRsZUZvclBsYXRmb3JtV2lkZ2V0
KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKTsK
ICAgICAgICAgSFdORCB3aW5kb3cgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJQbHVnaW5WaWV3
ZG93Q2xhc3NOYW1lLCAwLCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsIDAsIDAsIHBhcmVudFdpbmRvd0hhbmRsZSwgMCwgUGFnZTo6aW5zdGFuY2VI
YW5kbGUoKSwgMCk7CisKICNpZiBQTEFURk9STShXSU5fT1MpICYmIFBMQVRGT1JNKFFUKQogICAg
ICAgICBtX3dpbmRvdyA9IHdpbmRvdzsKICNlbHNlCkBAIC05NzEsNiArMTA1MCw4IEBAIHZvaWQg
UGx1Z2luVmlldzo6aW5pdCgpCiAgICAgICAgIC8vIHRoZSBTaG9ja3dhdmUgRGlyZWN0b3IgcGx1
Zy1pbi4KICNpZiBQTEFURk9STShXSU5fT1MpICYmIFBMQVRGT1JNKFg4Nl82NCkgJiYgQ09NUElM
RVIoTVNWQykKICAgICAgICAgOjpTZXRXaW5kb3dMb25nUHRyQShwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpLCBHV0xQX1dORFBST0MsIChMT05HX1BUUilEZWZXaW5kb3dQcm9jQSk7CisjZWxpZiBQTEFU
Rk9STShXSU5DRSkKKyAgICAgICAgOjpTZXRXaW5kb3dMb25nKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCksIEdXTF9XTkRQUk9DLCAoTE9ORylEZWZXaW5kb3dQcm9jKTsKICNlbHNlCiAgICAgICAgIDo6
U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MsIChM
T05HKURlZldpbmRvd1Byb2NBKTsKICNlbmRpZgo=
</data>
<flag name="review"
          id="17814"
          type_id="1"
          status="+"
          setter="staikos"
    />
          </attachment>
      

    </bug>

</bugzilla>