<?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>29302</bug_id>
          
          <creation_ts>2009-09-16 09:24:06 -0700</creation_ts>
          <short_desc>NPAPI plugin support feature on Webkit for S60 platform</short_desc>
          <delta_ts>2009-11-25 01:33:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>S60 Emulator</rep_platform>
          <op_sys>S60 3rd edition</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>27065</blocked>
    
    <blocked>29799</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Rohini Ananth">rohini.ananth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>girish</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>maheshk</cc>
    
    <cc>norbert.leser</cc>
    
    <cc>prashanth.narayanaswamy</cc>
    
    <cc>vestbo</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>147544</commentid>
    <comment_count>0</comment_count>
      <attachid>39649</attachid>
    <who name="Rohini Ananth">rohini.ananth</who>
    <bug_when>2009-09-16 09:24:06 -0700</bug_when>
    <thetext>Created attachment 39649
Enabling NPAPI plugin support for S60 

Enabling NPAPI plugin support on Qt Webkit for S60 platform. Added a folder &apos;symbian&apos; under WebCore/plugins/ for handling platform specific functionality and other required changes to enable NPAPI plugin support.The design uses Qt plugin framework for discovering/loading plugins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147546</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-09-16 09:46:29 -0700</bug_when>
    <thetext>First of all, some of the code seems sharable across platforms. Have you looked
into that?

+#elif !defined(XP_SYMBIAN) &amp;&amp; defined(XP_WIN)

You can have XP_WIN and XP_SYMBIAN enabled as the same time?

+PluginContainerSymbian::PluginContainerSymbian(PluginView* view, QWidget*
parent)
+    : m_parent(parent)
+    , m_pluginView(view)
+    , m_hasPendingGeometryChange(false)
+{
+setParent(m_parent);
+}

^ missing some indent here!

+void PluginContainerSymbian::adjustGeometry()
+{
+    if (m_hasPendingGeometryChange) {
+        setGeometry(m_windowRect);
+        setMask(m_clipRegion);

You dont have the problem we had to setMask with an empty region showing
everything? thus having to hide in that case?


+void PluginContainerSymbian::focusInEvent(QFocusEvent* event)
+{
+    // we got focus, stop redirecting the wheel events
+    //redirectWheelEventsToParent(false);

Dont commit outcommented code like this


+#ifndef PluginContainerQt_H
+#define PluginContainerQt_H

I beleive that should be _h and not _H but might be wrong.

+    PluginContainerSymbian* container =
static_cast&lt;PluginContainerSymbian*&gt;(platformPluginWidget());

Do you really need a special Symbian container? or could we just make a simple
ifdef in the PluginContainerQt?

All the event conversion makes it seem like we need some special convertion
classes. We also need this for windowless linux plugins.


+void PluginView::invalidateRect(NPRect* rect)
+{
+    if (m_isWindowed)
+        return;
+    if (rect) {
+        IntRect r(rect-&gt;left, rect-&gt;top, rect-&gt;right - rect-&gt;left,
rect-&gt;bottom - rect-&gt;top);
+        m_invalidRects.append(r);
+        if (!m_invalidateTimer.isActive())
+            m_invalidateTimer.startOneShot(0.001);
+    }
+}

maybe just do &apos;if (m_isWindowed || !rect) return&apos; ?

+void PluginView::invalidateRegion(NPRegion region)
+{
+    if (m_isWindowed)
+        return;
+    QRegion* r = static_cast&lt;QRegion*&gt;(region);
+    if (r) {
+        QVector&lt;QRect&gt; rects = r-&gt;rects();
+
+        for (int i = 1; i &lt; rects.size(); ++i) {
+            const QRect&amp; qRect = rects.at(i);
+            IntRect r(qRect);
+            m_invalidRects.append(r);
+        if (!m_invalidateTimer.isActive())
+            m_invalidateTimer.startOneShot(0.001);
+        }
+    }
+}

^ here I would also do &apos;if (!r) return;&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147548</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-09-16 09:48:06 -0700</bug_when>
    <thetext>Yael, does this mean that you will be back working on windowless plugins? :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147800</commentid>
    <comment_count>3</comment_count>
      <attachid>39649</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2009-09-17 08:11:38 -0700</bug_when>
    <thetext>Comment on attachment 39649
Enabling NPAPI plugin support for S60 

r- for now

We need to discuss the design some more, and there&apos;s style issues such as the ones Kenneth mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147801</commentid>
    <comment_count>4</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2009-09-17 08:16:15 -0700</bug_when>
    <thetext>Discussed with Yael on IRC about the dependency on Qt and agreed that since Qt will be a system library on S60 in the future, the dependency is analogous to the Carbon/Cocoa and CoreGraphics/QuickDraw dependencies of the XP_MACOSX implementation. 

But, we should make this clear and explicit through similar mechanism as the XP_MACOSX implementation, for example being able to query for the toolkit suport etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147806</commentid>
    <comment_count>5</comment_count>
      <attachid>39695</attachid>
    <who name="Rohini Ananth">rohini.ananth</who>
    <bug_when>2009-09-17 08:35:49 -0700</bug_when>
    <thetext>Created attachment 39695
Patch with review comments incorporated

Incorporating most of review comments and few others answered here...

Q: You can have XP_WIN and XP_SYMBIAN enabled as the same time?
A: Yes for winscw [debug version of s60], both get defined

Q:Do you really need a special Symbian container? or could we just make a simple ifdef in the PluginContainerQt?
A: yes we would need a container class for handling scroll/zoom [gesture] events later

Q:does this mean that you will be back working on windowless plugins ?
A: Current patch contains support for both windowed &amp; windowless plugin :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147846</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-09-17 10:46:50 -0700</bug_when>
    <thetext>
&gt; Q:Do you really need a special Symbian container? or could we just make a
&gt; simple ifdef in the PluginContainerQt?
&gt; A: yes we would need a container class for handling scroll/zoom [gesture]
&gt; events later

Why should that be limited to the Symbian port, it seems generally useful. That would make a lot of sense on Maemo for instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148796</commentid>
    <comment_count>7</comment_count>
      <attachid>39695</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-09-21 13:39:49 -0700</bug_when>
    <thetext>Comment on attachment 39695
Patch with review comments incorporated

&gt; Index: WebCore/bridge/npapi.h
&gt; ===================================================================
&gt; --- WebCore/bridge/npapi.h	(revision 48458)
&gt; +++ WebCore/bridge/npapi.h	(working copy)
&gt; @@ -56,6 +56,10 @@
&gt;  #    endif /* XP_WIN */
&gt;  #endif /* _WIN32 */
&gt;  
&gt; +#ifdef __SYMBIAN32__
&gt; +#    define XP_SYMBIAN
&gt; +#endif /* __SYMBIAN32__ */
&gt; +

This does not appear to be necessary as npapi.h already contains this snippet. See http://trac.webkit.org/changeset/48174

&gt;  #ifdef __MWERKS__
&gt;  #    define _declspec __declspec
&gt;  #    ifdef macintosh
&gt; @@ -106,9 +110,11 @@
&gt;      #include &lt;stdio.h&gt;
&gt;  #endif
&gt;  
&gt; +#if !defined(XP_SYMBIAN)
&gt;  #ifdef XP_WIN
&gt;      #include &lt;windows.h&gt;
&gt;  #endif
&gt; +#endif

This hunk is wrong. XP_WIN should not be defined, and in fact after r48174 it won&apos;t be
defined when compiling with WINSCW (or Symbian in general).

The same applies to the other hunks that add !SYMBIAN to #ifdef XP_WIN.

&gt; +        m_npWindow.window = (void*)platformPluginWidget();
&gt; +
&gt; +        if (!(m_plugin-&gt;quirks().contains(PluginQuirkDeferFirstSetWindowCall)))
&gt; +            setNPWindowRect(frameRect());
&gt; +    } else {
&gt; +        setPlatformWidget(0);
&gt; +        show();
&gt; +        m_npWindow.type = NPWindowTypeDrawable;
&gt; +        if (!(m_plugin-&gt;quirks().contains(PluginQuirkDeferFirstSetWindowCall)))
&gt; +            setNPWindowRect(frameRect());

For an obviously new platform/ABI, do we really need these quirks?

&gt; +
&gt; +} // namespace WebCore
&gt; Index: WebCore/plugins/symbian/npinterface.h
&gt; ===================================================================
&gt; --- WebCore/plugins/symbian/npinterface.h	(revision 0)
&gt; +++ WebCore/plugins/symbian/npinterface.h	(revision 0)
&gt; @@ -0,0 +1,71 @@
&gt; +/*
&gt; +    Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
&gt; +
&gt; +    This library is free software; you can redistribute it and/or
&gt; +    modify it under the terms of the GNU Library General Public
&gt; +    License as published by the Free Software Foundation; either
&gt; +    version 2 of the License, or (at your option) any later version.
&gt; +
&gt; +    This library is distributed in the hope that it will be useful,
&gt; +    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; +    Library General Public License for more details.
&gt; +
&gt; +    You should have received a copy of the GNU Library General Public License
&gt; +    along with this library; see the file COPYING.LIB.  If not, write to
&gt; +    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; +    Boston, MA 02110-1301, USA.
&gt; +*/
&gt; +#ifndef npinterface_H
&gt; +#define npinterface_H
&gt; +
&gt; +#include &quot;npfunctions.h&quot;
&gt; +#include &lt;QtPlugin&gt;
&gt; +class NPInterface {
&gt; +public:
&gt; +    virtual NPError NP_Initialize(NPNetscapeFuncs *aNPNFuncs, NPPluginFuncs *aNPPFuncs) = 0;
&gt; +    virtual void NP_Shutdown() = 0;
&gt; +    virtual char* NP_GetMIMEDescription() = 0;
&gt; +};
&gt; +
&gt; +enum NppEventType {
&gt; +    NppEventKey,
&gt; +    NppEventMouse,
&gt; +    NppEventDraw,
&gt; +    NppEventVisibility,
&gt; +    NppCustomValue
&gt; +};
&gt; +
&gt; +typedef struct _NPPEvent {
&gt; +    NppEventType type;
&gt; +    void* data;
&gt; +} NPPEvent;
&gt; +
&gt; +typedef struct _NPPEventKey {
&gt; +    void* keyEvent; // QKeyEvent
&gt; +    void* reserved;
&gt; +} NPPEventKey;
&gt; +
&gt; +typedef struct _NPPEventMouse {
&gt; +    void* mouseEvent; // QMouseEvent
&gt; +    void* reserved;
&gt; +} NPPEventMouse;
&gt; +
&gt; +typedef struct _NPPEventVisibility {
    bool visible;
&gt; +    void* reserved;
&gt; +} NPPEventVisibility;
&gt; +
&gt; +typedef struct _NPPEventDraw {
&gt; +    void* painter; // QPainter
&gt; +    void* reserved;
&gt; +} NPPEventDraw;

I admit that this file is the biggest part that I don&apos;t like.

I understand that Qt is becoming a system library on Symbian, it&apos;s becoming the toolkit that plugins have to use. That&apos;s good.

But then it should still be possible to use the existing NPAPI interface for that, no?

The above interface _mimics_ npapi, so why not use it directly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149035</commentid>
    <comment_count>8</comment_count>
    <who name="Norbert Leser">norbert.leser</who>
    <bug_when>2009-09-22 06:28:17 -0700</bug_when>
    <thetext>I tried to apply the patch (from 17.9.) to latest webkit code (r48572) and ran into the following problems:

- the patch updates the webcore.pro, but I believe that you also need to add the export configuration (see below) to WebCore.pro (in the symbian {} block, line 23ff). This is needed to make API available to client code in symbian:

    BLD_INF_RULES.prj_exports += \
          &quot;plugins/symbian/npinterface.h $$MW_LAYER_DOMAIN_EXPORT_PATH(cwrt/npinterface.h)&quot; \
          &quot;plugins/npfunctions.h  $$MW_LAYER_DOMAIN_EXPORT_PATH(cwrt/npfunctions.h)&quot; \
          &quot;bridge/npapi.h                       $$MW_LAYER_DOMAIN_EXPORT_PATH(cwrt/npapi.h)&quot; \
          &quot;bridge/npruntime.h                   $$MW_LAYER_DOMAIN_EXPORT_PATH(cwrt/npruntime.h)&quot;

- in PluginViewSymbian.cpp you invoke notSupported() function in a couple of cases. That function is not available.

- in PluginViewSymbian.cpp, the platformWindow() function was changed to platformPageClient(), just this weekend

- lastly, I had problems applying the patch, as submitted. I get an error, something like &quot;The chunk size did not match the number of added/removed lines&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149420</commentid>
    <comment_count>9</comment_count>
      <attachid>40001</attachid>
    <who name="Rohini Ananth">rohini.ananth</who>
    <bug_when>2009-09-23 09:51:41 -0700</bug_when>
    <thetext>Created attachment 40001
Patch with review comments incorporated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149422</commentid>
    <comment_count>10</comment_count>
    <who name="Rohini Ananth">rohini.ananth</who>
    <bug_when>2009-09-23 10:02:50 -0700</bug_when>
    <thetext>Patch addresses comments given by Simon and Nobert.

The reason for defining a new interface &quot;npinterface.h&quot; instead of npapi.h for Symbian is because in symbian,load by function name does not work and ordinal number has to be used, which is not generic. Current architecture suggested in patch uses Qt plugin framework way for discovering and loading of plugins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149521</commentid>
    <comment_count>11</comment_count>
    <who name="Norbert Leser">norbert.leser</who>
    <bug_when>2009-09-23 15:32:59 -0700</bug_when>
    <thetext>Rohini, many thanks for the updates.

There is one issue with WebCore.pro:
The export macro (BLD_INF_RULES.prj_exports += ...) is currently under symbian &amp;&amp; ENABLE_NETSCAPE_PLUGIN_API=1 (way down, at lines 2400ff). That is, the header files would not be exported in case of NPAPI disabled. 

I know that there is client code for the API that doesn&apos;t check the condition and would pickup the wrong npapi.h in that case (there is a name conflict and we took care that the exported npapi.h gets included first). Even though with NPAPI disabled, applications would not link, but they would at least give a sensible error message, given that the right npapi.h was used. If the wrong npapi.h was picked, it is almost impossible for an apps developer to trace the problem.

Anyway, in short, to solve this issue, I suggest to move the export macro to the beginning of WebCore.pro, into the symbian block that is not conditional to NPAPI being enabled (line 23ff).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149615</commentid>
    <comment_count>12</comment_count>
    <who name="Norbert Leser">norbert.leser</who>
    <bug_when>2009-09-23 18:31:55 -0700</bug_when>
    <thetext>There are a couple more compilation problems with PluginPackageSymbian.cpp in the patch, for both armv5 and winscw targets:

- The calls to platformPageClient (lines 403 and 437) are invalid:

&quot;\webkit.org_trunk\WebCore\plugins\symbian\pluginviewsymbian.cpp&quot;, line 403: Error:  #393: pointer to incomplete class type is not allowed
      QRect qrect = m_parentFrame-&gt;view()-&gt;hostWindow()-&gt;platformPageClient()-&gt;rect();
                    ^
&quot;\webkit.org_trunk\WebCore\plugins\symbian\pluginviewsymbian.cpp&quot;, line 437: Error:  #289: no instance of constructor &quot;WebCore::PluginContainerSymbian::PluginContainerSymbian&quot; matches the argument list
            argument types are: (WebCore::PluginView *, PlatformPageClient)
          setPlatformWidget(new PluginContainerSymbian(this, m_parentFrame-&gt;view()-&gt;hostWindow()-&gt;platformPageClient()));


- Its compilation causes multiple inclusion errors at the linker:

Error: L6200E: Symbol WebCore::PluginView::userAgentStatic() multiply defined (by QtWebKit.in and QtWebKit.in).
Error: L6200E: Symbol WebCore::PluginView::init() multiply defined (by QtWebKit.in and QtWebKit.in).
Error: L6200E: Symbol WebCore::PluginView::~PluginView__deallocating() multiply defined (by QtWebKit.in and QtWebKit.in).
Error: L6200E: Symbol WebCore::PluginView::~PluginView() multiply defined (by QtWebKit.in and QtWebKit.in).
Error: L6200E: Symbol WebCore::PluginView::~PluginView__sub_object() multiply defined (by QtWebKit.in and QtWebKit.in).
Error: L6200E: Symbol thunk{-36} to WebCore::PluginView::~PluginView__deallocating() multiply defined (by QtWebKit.in and QtWebKit.in).
Error: L6200E: Symbol thunk{-36} to WebCore::PluginView::~PluginView() multiply defined (by QtWebKit.in and QtWebKit.in).
Error: L6200E: Symbol thunk{-40} to WebCore::PluginView::~PluginView__deallocating() multiply defined (by QtWebKit.in and QtWebKit.in).
Error: L6200E: Symbol thunk{-40} to WebCore::PluginView::~PluginView() multiply defined (by QtWebKit.in and QtWebKit.in).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149730</commentid>
    <comment_count>13</comment_count>
      <attachid>40001</attachid>
    <who name="Rohini Ananth">rohini.ananth</who>
    <bug_when>2009-09-24 05:12:25 -0700</bug_when>
    <thetext>Comment on attachment 40001
Patch with review comments incorporated

Shall submit updated patch with build issues fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151488</commentid>
    <comment_count>14</comment_count>
      <attachid>40429</attachid>
    <who name="Rohini Ananth">rohini.ananth</who>
    <bug_when>2009-10-01 02:46:28 -0700</bug_when>
    <thetext>Created attachment 40429
Patch with changes incorporated - Compilation issues solved

Changes done for compilation issues to be resolved.

1) Made platformPageClient() method call changes in PluginPackageSymbian.cpp
2) Modified PluginViewSymbian.cpp to incorporate latest PluginView.cpp changes and hence alter few methods of the file accordingly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151754</commentid>
    <comment_count>15</comment_count>
    <who name="Norbert Leser">norbert.leser</who>
    <bug_when>2009-10-01 19:35:28 -0700</bug_when>
    <thetext>I applied the patch and did not see the build issues any more that I reported before. The patch looks fine to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152973</commentid>
    <comment_count>16</comment_count>
      <attachid>40429</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-10-07 00:22:04 -0700</bug_when>
    <thetext>Comment on attachment 40429
Patch with changes incorporated - Compilation issues solved

As discussed with Yael on IRC, we need another iteration for this patch. It should be possible to replace the custom event structures with a typedef QEvent NPEvent; We may just need to find an alternate solution for the painting.

Ideally npinterface.h will only contain the interface declaration that allows us to avoid using ordinals for library loading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153537</commentid>
    <comment_count>17</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2009-10-08 14:23:06 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 40429 [details])
&gt; As discussed with Yael on IRC, we need another iteration for this patch. It
&gt; should be possible to replace the custom event structures with a typedef QEvent
&gt; NPEvent; We may just need to find an alternate solution for the painting.
&gt; 
&gt; Ideally npinterface.h will only contain the interface declaration that allows
&gt; us to avoid using ordinals for library loading.

Simon, I will change npinterface.h to include only 

class NPInterface {
public:
    virtual NPError NP_Initialize(NPNetscapeFuncs *aNPNFuncs, NPPluginFuncs *aNPPFuncs) = 0;
    virtual void NP_Shutdown() = 0;
    virtual char* NP_GetMIMEDescription() = 0;
    virtual void NP_Paint(QPainter&amp; painter, const QRect&amp; rect) = 0;
};

The only problem is that if a plugin does not want to support windowless mode, it is still required to have an empty implementation of NP_Paint().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153590</commentid>
    <comment_count>18</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2009-10-08 19:10:34 -0700</bug_when>
    <thetext>(In reply to comment #17)
Never mind, this is not going to work.
NPInterface is a library interface, but we need to call a specific plugin to draw itself, not the library.

I will continue with the draw event approach instead. It is actually very similar to the events approach used for Cocoa FW.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153633</commentid>
    <comment_count>19</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-10-09 01:14:04 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; Never mind, this is not going to work.
&gt; NPInterface is a library interface, but we need to call a specific plugin to
&gt; draw itself, not the library.
&gt; 
&gt; I will continue with the draw event approach instead. It is actually very
&gt; similar to the events approach used for Cocoa FW.

Ok. If it&apos;s just one event that we need, then let&apos;s create a custom Qt event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153648</commentid>
    <comment_count>20</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2009-10-09 04:26:27 -0700</bug_when>
    <thetext>Regarding painting, we should follow the same approach as both the QuickDraw and CoreGraphics drawing models on Mac use: to store the port-specific info in the NPWindow&apos;s window-member (see NP_CGContext, NP_GLContext and NP_Port).

Our struct would then have a QPainter* which is updated on each paint event by a call to NPP_SetWindow before the delivering the paint event to the plugin though the normal NPP_HandleEvent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153667</commentid>
    <comment_count>21</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2009-10-09 05:53:11 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Regarding painting, we should follow the same approach as both the QuickDraw
&gt; and CoreGraphics drawing models on Mac use: to store the port-specific info in
&gt; the NPWindow&apos;s window-member (see NP_CGContext, NP_GLContext and NP_Port).
&gt; 
&gt; Our struct would then have a QPainter* which is updated on each paint event by
&gt; a call to NPP_SetWindow before the delivering the paint event to the plugin
&gt; though the normal NPP_HandleEvent

I think this is what I am doing, I hope to upload a patch already today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153949</commentid>
    <comment_count>22</comment_count>
      <attachid>41006</attachid>
    <who name="Yael">yael</who>
    <bug_when>2009-10-11 16:27:33 -0700</bug_when>
    <thetext>Created attachment 41006
Patch

Reworked the events to be Qt events, except for painting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154217</commentid>
    <comment_count>23</comment_count>
      <attachid>41074</attachid>
    <who name="Yael">yael</who>
    <bug_when>2009-10-12 17:53:29 -0700</bug_when>
    <thetext>Created attachment 41074
Patch

Verified that no changes are needed to config.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154277</commentid>
    <comment_count>24</comment_count>
      <attachid>41074</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-10-12 23:17:52 -0700</bug_when>
    <thetext>Comment on attachment 41074
Patch


&gt; -#if !PLATFORM(WIN_OS)
&gt; +#if PLATFORM(SYMBIAN) || !PLATFORM(WIN_OS)

Why is this needed?

PLATFORM(WIN_OS) should not be defined when compiling for symbian, and looking
at wtf/Platform.h I can see that WTF_PLATFORM_WIN_OS is explicitly undefined
when __SYMBIAN32__ is defined.

&gt; +#if COMPILER(WINSCW)
&gt; +#undef XP_WIN
&gt; +#endif
&gt; +

Why is this needed? XP_WIN should not have been defined by bridge/npapi.h in the first place
when compiling with WINSCW for Symbian.

&gt; +#if PLATFORM(SYMBIAN)
&gt; +        NPInterface* npInterface() { return m_npInterface;}
&gt; +#endif // PLATFORM(SYMBIAN)

There&apos;s a const missing after the () :), and a space after the semicolon.

&gt; +class DrawEvent : public QEvent {
&gt; +public:
&gt; +    DrawEvent() : QEvent(QEvent::Type(QEvent::User + NPQtEventPaint)) {}
&gt; +    void setPainter(QPainter* p) { m_painter = p; }
&gt; +    QPainter* painter() { return m_painter; }
&gt; +private:
&gt; +    QPainter* m_painter;
&gt; +};

Why is this still needed? Can&apos;t we call setNPWindow() before paint for example, set
ws_info to the QPainter pointer and then send a regular QPaintEvent() ?


&gt; +    class PluginContainerSymbian : public QWidget {

It would be nice to merge this code with PluginContainerQt and make
its inheritance from QX11EmbedContainer conditional at compile-time.

I don&apos;t mind if this is done in a follow-up patch / separate bug though.


&gt; +    QVector&lt;QRect&gt; rects = r-&gt;rects();
&gt; +    for (int i = 1; i &lt; rects.size(); ++i) {

Shouldn&apos;t this begin iteration at i = 0?

&gt; +        const QRect&amp; qRect = rects.at(i);
&gt; +        IntRect r(qRect);

Is the explicit conversion necessary? Shouldn&apos;t

m_invalidRects.append(rects.at(i));

compile, too, due to IntRect&apos;s implicit QRect constructor?


&gt; +    if (m_isWindowed) {
&gt; +        QWebPageClient* client = m_parentFrame-&gt;view()-&gt;hostWindow()-&gt;platformPageClient();
&gt; +        // FIXME this will not work for QGraphicsView.
&gt; +        // But we cannot use winId because it will create a window and on S60,
&gt; +        // QWidgets should not create a window. 
&gt; +        Q_ASSERT(qobject_cast&lt;QWidget*&gt;(client-&gt;pluginParent()));
&gt; +        setPlatformWidget(new PluginContainerSymbian(this,
&gt; +            qobject_cast&lt;QWidget*&gt;(client-&gt;pluginParent())));
&gt; +        m_npWindow.type = NPWindowTypeWindow;
&gt; +        m_npWindow.window = (void*)platformPluginWidget();

I guess we should either not support windowed plugins when embedding into the graphics view
or we should support that the plugin can be a QGraphicsWidget that we embed. Just a thought :)

I still think supporting only windowless plugins is the best option.

&gt; +    m_npInterface = qobject_cast&lt;NPInterface *&gt;(plugin);

Codingstyle nitpick :)

I recommend to run the newly added files through WebKitTools/Scripts/check-webkit-style


&gt; +unsigned PluginPackage::hash() const
&gt; +{ 
&gt; +    unsigned hashCodes[2] = {
&gt; +        m_path.impl()-&gt;hash(),
&gt; +        m_lastModified
&gt; +    };
&gt; +
&gt; +    return StringImpl::computeHash(reinterpret_cast&lt;UChar*&gt;(hashCodes), 2 * sizeof(unsigned) / sizeof(UChar));
&gt; +}
&gt; +
&gt; +bool PluginPackage::equal(const PluginPackage&amp; a, const PluginPackage&amp; b)
&gt; +{
&gt; +    return a.m_description == b.m_description;
&gt; +}

I guess these two functions weren&apos;t meant to be here but you intented to use ENABLE_PLUGIN_SIMPLE_HASH instead?

&gt;  {
&gt; -    uint16   event;
&gt; -    uint32   wParam;
&gt; -    uint32   lParam;
&gt; -} NPEvent;
&gt; +        uint16   event;
&gt; +        uint32   wParam;
&gt; +        uint32   lParam;
&gt; +    } NPEvent;

Is this hunk needed? :)

&gt; -#elif defined(XP_WIN)
&gt; +#elif !defined(XP_SYMBIAN) &amp;&amp; defined(XP_WIN)

This shouldn&apos;t be needed either, if we make sure that XP_WIN is not defined for Symbian.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154433</commentid>
    <comment_count>25</comment_count>
      <attachid>41128</attachid>
    <who name="Yael">yael</who>
    <bug_when>2009-10-13 14:41:05 -0700</bug_when>
    <thetext>Created attachment 41128
Patch

Addressed most of the issues in Simon&apos;s comment #24.
Still left to do in follow up work:
- Add support for windowed plugins in QGraphicsView (Removing support for windowed plugin is not my decision to make :-)
- Remove the hash functions after Laszlo&apos;s patch in 30279 is committed
- Merge PluginContainerSymbian with PluginContainerQt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154572</commentid>
    <comment_count>26</comment_count>
      <attachid>41161</attachid>
    <who name="Yael">yael</who>
    <bug_when>2009-10-14 07:52:40 -0700</bug_when>
    <thetext>Created attachment 41161
Updated patch after hash changes landed

What is left now is 
- Add support for windowed plugins in QGraphicsView
- Merge PluginContainerSymbian with PluginContainerQt
I think this is somewhat related, because I would want to wait for Girish to finish his work on QGraphicsView before getting into either one of the above issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154583</commentid>
    <comment_count>27</comment_count>
      <attachid>41161</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-10-14 08:43:54 -0700</bug_when>
    <thetext>Comment on attachment 41161
Updated patch after hash changes landed


&gt; +class NPInterface {
&gt; +public:
&gt; +    virtual NPError NP_Initialize(NPNetscapeFuncs *aNPNFuncs, NPPluginFuncs *aNPPFuncs) = 0;

Please fix the coding style (* placement) when landing.

&gt; +{
&gt; +    if (platformPluginWidget())
&gt; +        delete platformPluginWidget();

This null pointer check is not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154607</commentid>
    <comment_count>28</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2009-10-14 10:50:11 -0700</bug_when>
    <thetext>Committed r49574: &lt;http://trac.webkit.org/changeset/49574&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155471</commentid>
    <comment_count>29</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-18 08:25:34 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Committed r49574: &lt;http://trac.webkit.org/changeset/49574&gt;

The ChangeLog says &quot;Reviewed by&quot; following no name. Just have a look here: http://trac.webkit.org/changeset/49574

That would probably be good to fix.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39649</attachid>
            <date>2009-09-16 09:24:06 -0700</date>
            <delta_ts>2009-09-17 08:35:49 -0700</delta_ts>
            <desc>Enabling NPAPI plugin support for S60 </desc>
            <filename>S60_plugin_webkit.patch</filename>
            <type>text/plain</type>
            <size>39403</size>
            <attacher name="Rohini Ananth">rohini.ananth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODQxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMDktMDktMTUgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IAorCisgICAgICAgIEVuYWJsaW5nIE5QQVBJ
IHBsdWdpbiBzdXBwb3J0IG9uIFF0IFdlYmtpdCBmb3IgUzYwIHBsYXRmb3JtCisgICAgICAgIEFs
c28gaW1wbGVtZW50ZWQgYnkgTWFoZXNoIEt1bGthcm5pPG1haGVzaC5rdWxrYXJuaUBub2tpYS5j
b20+IGFuZCAKKyAgICAgICAgUm9oaW5pIEFuYW50aCA8cm9oaW5pLmFuYW50aEBub2tpYS5jb20+
CisgICAgICAgIAorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICBFbmFibGluZyBFTkFC
TEVfTkVUU0NBUEVfUExVR0lOX0FQSSBmb3IgUzYwIGFuZCBhZGRlZCBTNjAgc3BlY2lmaWMgbmV3
IHBsdWdpbiBmaWxlcyB0byBiZSAKKyAgICAgICAgY29tcGlsZWQgdW5kZXIgc3ltYmlhbjogbWFj
cm8KKyAgICAgICAgKiBicmlkZ2UvbnBhcGkuaDoKKyAgICAgICAgRGVmaW5pbmcgWFBfU1lNQklB
TiBtYWNybyBhbmQgZG91YmxlLWNoZWNraW5nIGZvciBub24tc3ltYmlhbiB3aW5kb3cgaGVhZGVy
LWluY2x1c2lvbnMgJiAKKyAgICAgICAgdHlwZS1kZWZpbml0aW9ucworICAgICAgICAqIHBsdWdp
bnMvUGx1Z2luUGFja2FnZS5oOgorICAgICAgICBBZGRlZCBTNjAgc3BlY2lmaWMgcGx1Z2luIGlu
dGVyZmFjZSBhbmQgcGx1Z2luIGxvYWRlciB2YXJpYWJsZXMKKyAgICAgICAgKiBwbHVnaW5zL1Bs
dWdpblBhY2thZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6dW5sb2Fk
KTogQWRkZWQgIVBMQVRGT1JNKFNZTUJJQU4pIG1hY3JvLiBEZWZhdWx0IGltcGxlbWVudGF0aW9u
IHRvIAorICAgICAgICBiZSB1c2VkIG9ubHkgZm9yIG5vbi1zeW1iaWFuIHBsYXRmb3JtCisgICAg
ICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAgIE1hY3JvICFTWU1CSUFO
IGNoZWNraW5nCisgICAgICAgIAorICAgICAgICBBZGRlZCBmb2xkZXIgJ3N5bWJpYW4nIHdoaWNo
IGNvbnRhaW5zIGltcGxlbWVudGF0aW9uIGZpbGVzIGZvciBTNjAgcGxhdGZvcm0tc3BlY2lmaWMg
TlBBUEkgCisgICAgICAgIHBsdWdpbiBmdW5jdGlvbmFsaXR5LCB1bmRlciAvcGx1Z2lucyBmb2xk
ZXIKKyAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4KKyAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4v
bnBpbnRlcmZhY2UuaDoKKyAgICAgICAgUGx1Z2luIEludGVyZmFjZSB0byBiZSBpbXBsZW1lbnRl
ZCBieSBTNjAgTlBBUEkgcGx1Z2lucyAKKyAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4vUGx1Z2lu
Q29udGFpbmVyU3ltYmlhbi5oOgorICAgICAgICAqIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250
YWluZXJTeW1iaWFuLmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luRGF0YWJh
c2VTeW1iaWFuLmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luVmlld1N5bWJp
YW4uY3BwOgorICAgICAgICAqIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5QYWNrYWdlU3ltYmlhbi5j
cHA6CisKIDIwMDktMDktMTYgIFZpdGFseSBSZXBlc2hrbyAgPHZpdGFseXJAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24g
NDg0MTgpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyAr
MTYxLDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NJTkdMRV9USFJFQURFRAogCiAjIE5l
c2NhcGUgcGx1Z2lucyBzdXBwb3J0IChOUEFQSSkKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
TkVUU0NBUEVfUExVR0lOX0FQST0uKSB7Ci0gICAgdW5peHx3aW4zMi0qOiFlbWJlZGRlZDohd2lu
Y2UqOiFzeW1iaWFuIHsKKyAgICB1bml4fHdpbjMyLSo6IWVtYmVkZGVkOiF3aW5jZSo6IHsKICAg
ICAgICAgREVGSU5FUyArPSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0xCiAgICAgfSBlbHNl
IHsKICAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0wCkBAIC0y
NDMyLDYgKzI0MzIsMjAgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX05FVFNDQVBFX1BMVUdJ
TgogCiAgICAgU09VUkNFUyArPSBwbHVnaW5zL25wYXBpLmNwcAogCisgICAgc3ltYmlhbiB7Cisg
ICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luUGFja2Fn
ZVN5bWJpYW4uY3BwIFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkRhdGFiYXNlU3lt
Ymlhbi5jcHAgXAorICAgICAgICBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luVmlld1N5bWJpYW4uY3Bw
IFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uY3BwCisg
ICAgICAgIAorICAgICAgICBIRUFERVJTICs9IFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFuL1Bs
dWdpbkNvbnRhaW5lclN5bWJpYW4uaCBcCisgICAgICAgIHBsdWdpbnMvc3ltYmlhbi9ucGludGVy
ZmFjZS5oCisgICAgICAgIAorICAgICAgICBMSUJTICs9IC1sZWZzcnYKKyAgICB9IGVsc2Ugewor
CiAgICAgdW5peCB7CiAgICAgICAgIERFRklORVMgKz0gRU5BQkxFX1BMVUdJTl9QQUNLQUdFX1NJ
TVBMRV9IQVNIPTEKIApAQCAtMjQ3Miw2ICsyNDg2LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX05FVFNDQVBFX1BMVUdJTgogICAgICAgICAgICAgLWxzaGx3YXBpIFwKICAgICAgICAgICAg
IC1sdXNlcjMyIFwKICAgICAgICAgICAgIC1sdmVyc2lvbgorICAgICAgICB9CiAgICAgfQogCiB9
IGVsc2UgewpJbmRleDogV2ViQ29yZS9icmlkZ2UvbnBhcGkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JyaWRnZS9ucGFwaS5oCShyZXZpc2lvbiA0ODQxOCkKKysrIFdlYkNvcmUvYnJpZGdlL25w
YXBpLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDEwIEBACiAjICAgIGVuZGlmIC8qIFhQ
X1dJTiAqLwogI2VuZGlmIC8qIF9XSU4zMiAqLwogCisjaWZkZWYgX19TWU1CSUFOMzJfXworIyAg
ICBkZWZpbmUgWFBfU1lNQklBTgorI2VuZGlmIC8qIF9fU1lNQklBTjMyX18gKi8KKwogI2lmZGVm
IF9fTVdFUktTX18KICMgICAgZGVmaW5lIF9kZWNsc3BlYyBfX2RlY2xzcGVjCiAjICAgIGlmZGVm
IG1hY2ludG9zaApAQCAtMTA2LDkgKzExMCwxMSBAQAogICAgICNpbmNsdWRlIDxzdGRpby5oPgog
I2VuZGlmCiAKKyNpZiAhZGVmaW5lZChYUF9TWU1CSUFOKQogI2lmZGVmIFhQX1dJTgogICAgICNp
bmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKKyNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwog
LyogICAgICAgICAgICAgUGx1Z2luIFZlcnNpb24gQ29uc3RhbnRzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKi8KQEAgLTU3OCwxMyArNTg0LDEzIEBAIHR5cGVkZWYgZW51bSB7CiB0
eXBlZGVmIEV2ZW50UmVjb3JkICAgIE5QRXZlbnQ7CiAjZW5kaWYKIAotI2VsaWYgZGVmaW5lZChY
UF9XSU4pCi10eXBlZGVmIHN0cnVjdCBfTlBFdmVudAotewotICAgIHVpbnQxNiAgIGV2ZW50Owot
ICAgIHVpbnQzMiAgIHdQYXJhbTsKLSAgICB1aW50MzIgICBsUGFyYW07Ci19IE5QRXZlbnQ7Cisj
ZWxpZiAhZGVmaW5lZChYUF9TWU1CSUFOKSAmJiBkZWZpbmVkKFhQX1dJTikKKyAgICB0eXBlZGVm
IHN0cnVjdCBfTlBFdmVudCB7CisgICAgICAgIHVpbnQxNiAgIGV2ZW50OworICAgICAgICB1aW50
MzIgICB3UGFyYW07CisgICAgICAgIHVpbnQzMiAgIGxQYXJhbTsKKyAgICB9IE5QRXZlbnQ7CisK
ICNlbGlmIGRlZmluZWQgKFhQX1VOSVgpCiB0eXBlZGVmIFhFdmVudCBOUEV2ZW50OwogI2Vsc2UK
QEAgLTYwNCw3ICs2MTAsNyBAQCB0eXBlZGVmIHZvaWQgKk5QUmVnaW9uOwogdHlwZWRlZiBSZ25I
YW5kbGUgTlBRRFJlZ2lvbjsKICNlbmRpZgogdHlwZWRlZiBDR1BhdGhSZWYgTlBDR1JlZ2lvbjsK
LSNlbGlmIGRlZmluZWQoWFBfV0lOKQorI2VsaWYgIWRlZmluZWQoWFBfU1lNQklBTikgJiYgZGVm
aW5lZChYUF9XSU4pCiB0eXBlZGVmIEhSR04gTlBSZWdpb247CiAjZWxpZiBkZWZpbmVkKFhQX1VO
SVgpCiB0eXBlZGVmIFJlZ2lvbiBOUFJlZ2lvbjsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFi
YXNlLmNwcAkocmV2aXNpb24gNDg0MTgpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBQbHVnaW5EYXRh
YmFzZTo6Y2xlYXIoKQogICAgIG1fcHJlZmVycmVkUGx1Z2lucy5jbGVhcigpOwogfQogCi0jaWYg
IVBMQVRGT1JNKFdJTl9PUykgfHwgUExBVEZPUk0oV1gpCisjaWYgIVBMQVRGT1JNKFNZTUJJQU4p
ICYmICAoIVBMQVRGT1JNKFdJTl9PUykgfHwgUExBVEZPUk0oV1gpKQogLy8gRm9yIFNhZmFyaS9X
aW4gdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZAogLy8gaW4gUGx1
Z2luRGF0YWJhc2VXaW4uY3BwLCBidXQgaWYgd2UgY2FuIHVzZSBXZWJDb3JlIGNvbnN0cnVjdHMK
IC8vIGZvciB0aGUgbG9naWMgd2Ugc2hvdWxkIHBlcmhhcHMgbW92ZSBpdCBoZXJlIHVuZGVyIFhQ
X1dJTj8KQEAgLTQyNiw2ICs0MjYsNiBAQCB2b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5Q
YXRoc0luRGlyCiAgICAgfQogfQogCi0jZW5kaWYgLy8gIVBMQVRGT1JNKFdJTl9PUykKKyNlbmRp
ZiAvLyAhUExBVEZPUk0oV0lOX09TKSAhUExBVEZPUk0oU1lNQklBTikKIAogfQpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkocmV2aXNpb24gNDg0MTgpCisrKyBXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQCBQ
bHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmluCiAgICAgbV9wYXJlbnREaXJl
Y3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgp
IC0gMSk7CiB9CiAKKyNpZiAhUExBVEZPUk0oU1lNQklBTikKIHZvaWQgUGx1Z2luUGFja2FnZTo6
dW5sb2FkKCkKIHsKICAgICBpZiAoIW1faXNMb2FkZWQpCkBAIC0xMjUsNiArMTI2LDcgQEAgdm9p
ZCBQbHVnaW5QYWNrYWdlOjp1bmxvYWQoKQogCiAgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7
CiB9CisjZW5kaWYgLy8hUExBVEZPUk0oU1lNQklBTikKIAogdm9pZCBQbHVnaW5QYWNrYWdlOjp1
bmxvYWRXaXRob3V0U2h1dGRvd24oKQogewpAQCAtMTk1LDcgKzE5Nyw3IEBAIHZvaWQgUGx1Z2lu
UGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnMKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JN
KFdJTl9PUykKKyNpZiBQTEFURk9STShTWU1CSUFOKSB8fCAhUExBVEZPUk0oV0lOX09TKQogdm9p
ZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCkK
IHsKICAgICAvLyBJdCdzIGEgYml0IGxhbWUgdG8gZGV0ZWN0IHRoZSBwbHVnaW4gdmVyc2lvbiBi
eSBwYXJzaW5nIGl0CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHJldmlzaW9uIDQ4NDE4
KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNiArMzYsMTEgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAKKyNpZiBQTEFURk9STShTWU1CSUFOKQorY2xhc3MgUVBsdWdpbkxvYWRl
cjsKK2NsYXNzIE5QSW50ZXJmYWNlOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1JTUVUb0Rlc2NyaXB0aW9uc01hcDsK
ICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+IE1JTUVUb0V4dGVu
c2lvbnNNYXA7CkBAIC03Myw2ICs3OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBw
cml2YXRlOgogICAgICAgICBQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
dGltZV90JiBsYXN0TW9kaWZpZWQpOworCisjaWYgUExBVEZPUk0oU1lNQklBTikKKyAgICAgICAg
TlBJbnRlcmZhY2UqIG1fbnBJbnRlcmZhY2U7CisgICAgICAgIFFQbHVnaW5Mb2FkZXIqIG1fcGx1
Z2luTG9hZGVyOworI2VuZGlmIC8vIFBMQVRGT1JNKFNZTUJJQU4pCiAgICAgICAgIGJvb2wgZmV0
Y2hJbmZvKCk7CiAgICAgICAgIGJvb2wgaXNQbHVnaW5CbGFja2xpc3RlZCgpOwogICAgICAgICB2
b2lkIGRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFpbmVyU3lt
Ymlhbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8qDQorICAgIENvcHlyaWdo
dCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykN
CisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcg0KKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UN
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8NCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwNCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuDQorKi8NCisNCisjaW5jbHVkZSAiY29uZmlnLmgiDQorI2luY2x1ZGUgIlBs
dWdpbkNvbnRhaW5lclN5bWJpYW4uaCINCisNCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
DQorI2luY2x1ZGUgIkZyYW1lLmgiDQorI2luY2x1ZGUgIkZyYW1lVmlldy5oIg0KKyNpbmNsdWRl
ICJQYWdlLmgiDQorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIg0KKyNpbmNsdWRl
ICJQbHVnaW5WaWV3LmgiDQorDQorI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4NCisjaW5jbHVkZSA8
UVdpZGdldD4NCisNCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsNCisNCitQbHVnaW5Db250YWlu
ZXJTeW1iaWFuOjpQbHVnaW5Db250YWluZXJTeW1iaWFuKFBsdWdpblZpZXcqIHZpZXcsIFFXaWRn
ZXQqIHBhcmVudCkNCisgICAgOiBtX3BhcmVudChwYXJlbnQpDQorICAgICwgbV9wbHVnaW5WaWV3
KHZpZXcpDQorICAgICwgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UoZmFsc2UpDQorew0KK3Nl
dFBhcmVudChtX3BhcmVudCk7DQorfQ0KKw0KK1BsdWdpbkNvbnRhaW5lclN5bWJpYW46On5QbHVn
aW5Db250YWluZXJTeW1iaWFuKCkNCit7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luQ29udGFpbmVyU3lt
Ymlhbjo6cmVxdWVzdEdlb21ldHJ5KGNvbnN0IFFSZWN0JiByZWN0LCBjb25zdCBRUmVnaW9uJiBj
bGlwKQ0KK3sNCisgICAgaWYgKG1fd2luZG93UmVjdCAhPSByZWN0IHx8IG1fY2xpcFJlZ2lvbiAh
PSBjbGlwKSB7DQorICAgICAgICBtX3dpbmRvd1JlY3QgPSByZWN0Ow0KKyAgICAgICAgbV9jbGlw
UmVnaW9uID0gY2xpcDsNCisgICAgICAgIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gdHJ1
ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIFBsdWdpbkNvbnRhaW5lclN5bWJpYW46OmFkanVzdEdl
b21ldHJ5KCkNCit7DQorICAgIGlmIChtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSkgew0KKyAg
ICAgICAgc2V0R2VvbWV0cnkobV93aW5kb3dSZWN0KTsNCisgICAgICAgIHNldE1hc2sobV9jbGlw
UmVnaW9uKTsNCisgICAgICAgIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gZmFsc2U7DQor
ICAgIH0NCit9DQorDQordm9pZCBQbHVnaW5Db250YWluZXJTeW1iaWFuOjpmb2N1c0luRXZlbnQo
UUZvY3VzRXZlbnQqIGV2ZW50KQ0KK3sNCisgICAgLy8gd2UgZ290IGZvY3VzLCBzdG9wIHJlZGly
ZWN0aW5nIHRoZSB3aGVlbCBldmVudHMNCisgICAgLy9yZWRpcmVjdFdoZWVsRXZlbnRzVG9QYXJl
bnQoZmFsc2UpOw0KKw0KKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGx1Z2luVmlldy0+cGFyZW50
RnJhbWUoKS0+cGFnZSgpKQ0KKyAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFj
dGl2ZSh0cnVlKTsNCisNCisgICAgbV9wbHVnaW5WaWV3LT5mb2N1c1BsdWdpbkVsZW1lbnQoKTsN
Cit9DQorDQordm9pZCBQbHVnaW5Db250YWluZXJTeW1iaWFuOjpmb2N1c091dEV2ZW50KFFGb2N1
c0V2ZW50KikNCit7DQorICAgIGlmIChQYWdlKiBwYWdlID0gbV9wbHVnaW5WaWV3LT5wYXJlbnRG
cmFtZSgpLT5wYWdlKCkpDQorICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0
aXZlKGZhbHNlKTsNCit9DQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29u
dGFpbmVyU3ltYmlhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1Bs
dWdpbkNvbnRhaW5lclN5bWJpYW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9z
eW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MCBAQAorLyoNCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQ0KKw0KKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0K
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0K
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisN
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bw0KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LA0KKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4NCisqLw0KKw0KKyNpZm5kZWYgUGx1
Z2luQ29udGFpbmVyUXRfSA0KKyNkZWZpbmUgUGx1Z2luQ29udGFpbmVyUXRfSA0KKw0KKyNpbmNs
dWRlIDxRV2lkZ2V0Pg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCisgICAgY2xhc3MgUGx1
Z2luVmlldzsNCisNCisgICAgY2xhc3MgUGx1Z2luQ29udGFpbmVyU3ltYmlhbiA6IHB1YmxpYyBR
V2lkZ2V0IHsNCisgICAgICAgIFFfT0JKRUNUDQorICAgIHB1YmxpYzoNCisgICAgICAgIFBsdWdp
bkNvbnRhaW5lclN5bWJpYW4oUGx1Z2luVmlldyosIFFXaWRnZXQqIHBhcmVudCk7DQorICAgICAg
ICB+UGx1Z2luQ29udGFpbmVyU3ltYmlhbigpOw0KKw0KKyAgICAgICAgdm9pZCByZXF1ZXN0R2Vv
bWV0cnkoY29uc3QgUVJlY3QmLCBjb25zdCBRUmVnaW9uJiBjbGlwID0gUVJlZ2lvbigpKTsNCisg
ICAgICAgIHZvaWQgYWRqdXN0R2VvbWV0cnkoKTsNCisNCisgICAgcHJvdGVjdGVkOg0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGZvY3VzSW5FdmVudChRRm9jdXNFdmVudCopOw0KKyAgICAgICAgdmly
dHVhbCB2b2lkIGZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqKTsNCisgICAgcHJpdmF0ZToNCisg
ICAgICAgIFBsdWdpblZpZXcqIG1fcGx1Z2luVmlldzsNCisgICAgICAgIFFXaWRnZXQqIG1fcGFy
ZW50Ow0KKyAgICAgICAgUVJlY3QgbV93aW5kb3dSZWN0Ow0KKyAgICAgICAgUVJlZ2lvbiBtX2Ns
aXBSZWdpb247DQorICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlOw0KKyAg
ICB9Ow0KK30NCisNCisjZW5kaWYgLy8gUGx1Z2luQ29udGFpbmVyUXRfSA0KSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkRhdGFiYXNlU3ltYmlhbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luRGF0YWJhc2VTeW1iaWFuLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkRhdGFiYXNlU3ltYmlh
bi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qDQorICAgIENvcHlyaWdodCAo
QykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykNCisN
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcg0KKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8NCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwNCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuDQorKi8NCisjaW5jbHVkZSAiY29uZmlnLmgiDQorI2luY2x1ZGUgIlBsdWdpbkRh
dGFiYXNlLmgiDQorDQorI2luY2x1ZGUgPFFGaWxlSW5mbz4NCisjaW5jbHVkZSA8ZjMyZmlsZS5o
Pg0KKw0KK3N0YXRpYyBjb25zdCBjaGFyIFFUUExVR0lOX0ZJTFRFUltdID0gIioucXRwbHVnaW4i
Ow0KK3N0YXRpYyBjb25zdCBjaGFyIFFUX1BMVUdJTl9GT0xERVJbXSA9ICI6XFxyZXNvdXJjZVxc
cXRcXHBsdWdpbnNcXG5wcXRwbHVnaW5zXFwiOw0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisN
CitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVz
KCkNCit7DQorICAgIFZlY3RvcjxTdHJpbmc+IGRpcmVjdG9yaWVzOw0KKyAgICAvL2ZpbmQgdGhl
IGluc3RhbGxhdGlvbiBkcml2ZQ0KKyAgICBURHJpdmVMaXN0IGRyaXZlbGlzdDsNCisgICAgVENo
YXIgZHJpdmVMZXR0ZXI7DQorICAgIFJGcyBmc1Nlc3Npb247CisgICAgDQorICAgIGlmIChmc1Nl
c3Npb24uQ29ubmVjdCgpID09IEtFcnJOb25lICYmIGZzU2Vzc2lvbi5Ecml2ZUxpc3QoZHJpdmVs
aXN0KSA9PSBLRXJyTm9uZSkgew0KKyAgICAgICAgZm9yIChUSW50IGRyaXZlTnVtYmVyID0gRURy
aXZlQTsgZHJpdmVOdW1iZXIgPD0gRURyaXZlWjsgZHJpdmVOdW1iZXIrKykgew0KKyAgICAgICAg
ICAgIGlmIChkcml2ZWxpc3RbZHJpdmVOdW1iZXJdICYmIGZzU2Vzc2lvbi5Ecml2ZVRvQ2hhcihk
cml2ZU51bWJlciwgZHJpdmVMZXR0ZXIpID09IEtFcnJOb25lKSB7DQorICAgICAgICAgICAgICAg
IFFTdHJpbmcgZHJpdmVTdHJpbmdWYWx1ZShRQ2hhcigodWludClkcml2ZUxldHRlci5HZXRVcHBl
ckNhc2UoKSkpOw0KKyAgICAgICAgICAgICAgICBRU3RyaW5nIHN0dWJEaXJQYXRoOw0KKyAgICAg
ICAgICAgICAgICBzdHViRGlyUGF0aC5hcHBlbmQoZHJpdmVTdHJpbmdWYWx1ZSk7DQorICAgICAg
ICAgICAgICAgIHN0dWJEaXJQYXRoLmFwcGVuZChRVF9QTFVHSU5fRk9MREVSKTsNCisgICAgICAg
ICAgICAgICAgaWYgKFFGaWxlSW5mbyhzdHViRGlyUGF0aCkuZXhpc3RzKCkpDQorICAgICAgICAg
ICAgICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoc3R1YkRpclBhdGgpOw0KKyAgICAgICAgICAg
IH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmc1Nlc3Npb24uQ2xvc2UoKTsNCisgICAg
cmV0dXJuIGRpcmVjdG9yaWVzOw0KK30NCisNCitib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZl
cnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpDQorew0KKyAgICByZXR1cm4g
dHJ1ZTsNCit9DQorDQordm9pZCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luUGF0aHNJbkRpcmVj
dG9yaWVzKEhhc2hTZXQ8U3RyaW5nPiYgcGF0aHMpIGNvbnN0DQorew0KKyAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4NCisgICAgSGFzaFNldDxTdHJp
bmc+IHVuaXF1ZUZpbGVuYW1lczsNCisNCisgICAgU3RyaW5nIGZpbGVOYW1lRmlsdGVyKFFUUExV
R0lOX0ZJTFRFUik7DQorDQorICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkaXJz
RW5kID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5lbmQoKTsNCisgICAgZm9yIChWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgZEl0ID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5iZWdpbigpOyBkSXQg
IT0gZGlyc0VuZDsgKytkSXQpIHsNCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHBsdWdpblBhdGhz
ID0gbGlzdERpcmVjdG9yeSgqZEl0LCBmaWxlTmFtZUZpbHRlcik7DQorICAgICAgICBWZWN0b3I8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcGx1Z2luc0VuZCA9IHBsdWdpblBhdGhzLmVuZCgpOw0K
KyAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcEl0ID0gcGx1Z2lu
UGF0aHMuYmVnaW4oKTsgcEl0ICE9IHBsdWdpbnNFbmQ7ICsrcEl0KSB7DQorICAgICAgICAgICAg
aWYgKCFmaWxlRXhpc3RzKCpwSXQpKQ0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsNCisgICAg
ICAgICAgICBwYXRocy5hZGQoKnBJdCk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorfQ0K
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpblBhY2thZ2VTeW1iaWFuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5QYWNrYWdlU3ltYmlh
bi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5QYWNr
YWdlU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAxIEBACisvKg0KKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisN
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLg0KKyovDQorI2luY2x1ZGUgImNvbmZpZy5oIg0KKyNpbmNsdWRl
ICJQbHVnaW5QYWNrYWdlLmgiDQorDQorI2luY2x1ZGUgIkNTdHJpbmcuaCINCisjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIm5waW50ZXJmYWNlLmgiDQorI2luY2x1ZGUg
Im5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCINCisjaW5jbHVk
ZSAiUGx1Z2luRGVidWcuaCINCisjaW5jbHVkZSA8UVBsdWdpbkxvYWRlcj4NCisNCituYW1lc3Bh
Y2UgV2ViQ29yZSB7DQorDQorYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQ0KK3sNCisg
ICAgaWYgKCFsb2FkKCkpDQorICAgICAgICByZXR1cm4gZmFsc2U7DQorDQorICAgIGNoYXIqIGJ1
ZiA9IDA7DQorICAgIE5QRXJyb3IgZXJyID0gbV9wbHVnaW5GdW5jcy5nZXR2YWx1ZSgwLCBOUFBW
cGx1Z2luTmFtZVN0cmluZywgKHZvaWQgKikmYnVmKTsNCisgICAgbV9uYW1lID0gYnVmOw0KKyAg
ICBlcnIgPSBtX3BsdWdpbkZ1bmNzLmdldHZhbHVlKDAsIE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0
cmluZywgKHZvaWQgKikmYnVmKTsNCisgICAgbV9kZXNjcmlwdGlvbiA9IGJ1ZjsNCisNCisgICAg
ZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOw0KKw0KKyAgICBTdHJpbmcg
cyA9IG1fbnBJbnRlcmZhY2UtPk5QX0dldE1JTUVEZXNjcmlwdGlvbigpOw0KKyAgICBWZWN0b3I8
U3RyaW5nPiB0eXBlczsNCisgICAgcy5zcGxpdChVQ2hhcignfCcpLCBmYWxzZSwgdHlwZXMpOyAg
Ly8gPE1JTUUxPjs8ZXh0MSxleHQyLGV4dDMsLi4uPjs8RGVzY3JpcHRpb24+fDxNSU1FMj58PE1J
TUUzPnwuLi4NCisNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7ICsraSkg
ew0KKyAgICAgICAgVmVjdG9yPFN0cmluZz4gbWltZTsNCisgICAgICAgIHR5cGVzW2ldLnNwbGl0
KFVDaGFyKCc7JyksIHRydWUsIG1pbWUpOyAgLy8gPE1JTUUxPjs8ZXh0MSxleHQyLGV4dDMsLi4u
Pjs8RGVzY3JpcHRpb24+DQorICAgICAgICBpZiAobWltZS5zaXplKCkgPiAwKSB7DQorICAgICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gZXh0czsNCisgICAgICAgICAgICBpZiAobWltZS5zaXplKCkg
PiAxKQ0KKyAgICAgICAgICAgICAgICBtaW1lWzFdLnNwbGl0KFVDaGFyKCcsJyksIGZhbHNlLCBl
eHRzKTsgLy8gPGV4dDEsZXh0MixleHQzLC4uLj4NCisgICAgICAgICAgICANCisgICAgICAgICAg
ICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1pbWVbMF0sIGV4dHMpOyAvLyA8TUlNRT4sPGV4dDEs
ZXh0MixleHQzPg0KKyAgICAgICAgICAgIGlmIChtaW1lLnNpemUoKSA+IDIpDQorICAgICAgICAg
ICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lWzBdLCBtaW1lWzJdKTsgLy8gPE1J
TUU+LDxEZXNjcmlwdGlvbj4NCisgICAgICAgIH0NCisgICAgfQ0KKyAgICB1bmxvYWQoKTsNCisg
ICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpDQorew0K
KyAgICBpZiAobV9pc0xvYWRlZCkgew0KKyAgICAgICAgbV9sb2FkQ291bnQrKzsNCisgICAgICAg
IHJldHVybiB0cnVlOw0KKyAgICB9DQorDQorICAgIG1fcGx1Z2luTG9hZGVyID0gbmV3IFFQbHVn
aW5Mb2FkZXIobV9wYXRoKTsNCisgICAgaWYgKCFtX3BsdWdpbkxvYWRlci0+bG9hZCgpKSB7DQor
ICAgICAgICBkZWxldGUgbV9wbHVnaW5Mb2FkZXI7DQorICAgICAgICBtX3BsdWdpbkxvYWRlciA9
IDA7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgUU9iamVjdCogcGx1
Z2luID0gbV9wbHVnaW5Mb2FkZXItPmluc3RhbmNlKCk7DQorICAgIGlmICghcGx1Z2luKSB7DQor
ICAgICAgICBtX3BsdWdpbkxvYWRlci0+dW5sb2FkKCk7DQorICAgICAgICBkZWxldGUgbV9wbHVn
aW5Mb2FkZXI7DQorICAgICAgICBtX3BsdWdpbkxvYWRlciA9IDA7DQorICAgICAgICByZXR1cm4g
ZmFsc2U7DQorICAgIH0NCisNCisgICAgLy8gUGx1Z2luIGluc3RhbmNlIGNyZWF0ZWQNCisgICAg
Ly8gQ2FzdCBwbHVnaW4gdG8gTlBJbnRlcmZhY2UsDQorICAgIG1fbnBJbnRlcmZhY2UgPSBxb2Jq
ZWN0X2Nhc3Q8TlBJbnRlcmZhY2UgKj4ocGx1Z2luKTsNCisgICAgaWYgKCFtX25wSW50ZXJmYWNl
KSB7DQorICAgICAgICBtX3BsdWdpbkxvYWRlci0+dW5sb2FkKCk7DQorICAgICAgICBkZWxldGUg
bV9wbHVnaW5Mb2FkZXI7DQorICAgICAgICBtX3BsdWdpbkxvYWRlciA9IDA7DQorICAgICAgICBy
ZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgbV9pc0xvYWRlZCA9IHRydWU7DQorICAgIA0K
KyAgICBOUEVycm9yIG5wRXJyOw0KKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVv
ZihtX3BsdWdpbkZ1bmNzKSk7DQorICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3Bs
dWdpbkZ1bmNzKTsNCisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZihtX2Jyb3dzZXJG
dW5jcyk7DQorICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9OX01JTk9SOw0K
KyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOw0KKyAgICBtX2Jyb3dzZXJG
dW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7DQorICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3Ry
ZWFkID0gTlBOX1JlcXVlc3RSZWFkOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBO
UE5fTmV3U3RyZWFtOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsNCisg
ICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOw0KKyAg
ICBtX2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOw0KKyAgICBtX2Jyb3dzZXJGdW5j
cy51YWdlbnQgPSBOUE5fVXNlckFnZW50Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9
IE5QTl9NZW1BbGxvYzsNCisgICAgbV9icm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVl
Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsNCisgICAgbV9i
cm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOw0KKyAgICBtX2Jy
b3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5Ow0KKyAgICBtX2Jyb3dz
ZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7DQorICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVlOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2
YWx1ZSA9IE5QTl9TZXRWYWx1ZTsNCisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3Qg
PSBOUE5fSW52YWxpZGF0ZVJlY3Q7DQorICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdp
b24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsNCisgICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRy
YXcgPSBOUE5fRm9yY2VSZWRyYXc7DQorICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBO
UE5fR2V0SmF2YUVudjsNCisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0
SmF2YVBlZXI7DQorICAgIG1fYnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBO
UE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsNCisgICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBz
ZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsNCisgICAgbV9icm93c2Vy
RnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsNCisg
ICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRl
bnRpZmllcjsNCisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBO
X0dldFN0cmluZ0lkZW50aWZpZXJzOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlm
aWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlm
aWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsNCisgICAgbV9icm93c2VyRnVu
Y3MudXRmOGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7DQorICAgIG1f
YnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3JlYXRlT2JqZWN0Ow0KKyAgICBtX2Jy
b3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsNCisgICAgbV9icm93
c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsNCisgICAgbV9icm93
c2VyRnVuY3MuaW52b2tlID0gX05QTl9JbnZva2U7DQorICAgIG1fYnJvd3NlckZ1bmNzLmludm9r
ZURlZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7DQorICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1
YXRlID0gX05QTl9FdmFsdWF0ZTsNCisgICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBf
TlBOX0dldFByb3BlcnR5Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9IF9OUE5f
U2V0UHJvcGVydHk7DQorICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9S
ZW1vdmVQcm9wZXJ0eTsNCisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hh
c01ldGhvZDsNCisgICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNQcm9wZXJ0
eTsNCisgICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247
DQorICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOw0KKyAgICBt
X2Jyb3dzZXJGdW5jcy5jb25zdHJ1Y3QgPSBfTlBOX0NvbnN0cnVjdDsNCisNCisgICAgbnBFcnIg
PSBtX25wSW50ZXJmYWNlLT5OUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2lu
RnVuY3MpOw0KKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpIHsNCisgICAgICAgIG1f
cGx1Z2luTG9hZGVyLT51bmxvYWQoKTsNCisgICAgICAgIGRlbGV0ZSBtX3BsdWdpbkxvYWRlcjsN
CisgICAgICAgIG1fcGx1Z2luTG9hZGVyID0gMDsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisg
ICAgfQ0KKw0KKyAgICBtX2xvYWRDb3VudCsrOw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQor
dm9pZCBQbHVnaW5QYWNrYWdlOjp1bmxvYWQoKQ0KK3sNCisgICAgaWYgKCFtX2lzTG9hZGVkKQ0K
KyAgICAgICAgcmV0dXJuOw0KKw0KKyAgICBpZiAoLS1tX2xvYWRDb3VudCA+IDApDQorICAgICAg
ICByZXR1cm47DQorICAgICAgICANCisgICAgbV9pc0xvYWRlZCA9IGZhbHNlOw0KKyAgICBtX25w
SW50ZXJmYWNlLT5OUF9TaHV0ZG93bigpOw0KKw0KKyAgICBtX3BsdWdpbkxvYWRlci0+dW5sb2Fk
KCk7DQorICAgIGRlbGV0ZSBtX3BsdWdpbkxvYWRlcjsNCisgICAgbV9wbHVnaW5Mb2FkZXIgPSAw
Ow0KK30NCisNCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QNCit7IA0KKyAg
ICB1bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7DQorICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNo
KCksDQorICAgICAgICBtX2xhc3RNb2RpZmllZA0KKyAgICB9Ow0KKw0KKyAgICByZXR1cm4gU3Ry
aW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2Rlcyks
IDIgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6ZW9mKFVDaGFyKSk7DQorfQ0KKw0KK2Jvb2wgUGx1
Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFj
a2FnZSYgYikNCit7DQorICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0
aW9uOw0KK30NCisNCitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0
IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYgY29tcGFyZVZlcnNpb24pIGNvbnN0DQorew0KKyAgICAv
LyByZXR1cm4gLTEsIDAsIG9yIDEgaWYgcGx1Zy1pbiB2ZXJzaW9uIGlzIGxlc3MgdGhhbiwgZXF1
YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbg0KKyAgICAvLyB0aGUgcGFzc2VkIHZlcnNpb24NCisgICAg
aWYgKG1fbW9kdWxlVmVyc2lvbiAhPSBjb21wYXJlVmVyc2lvbikNCisgICAgICAgIHJldHVybiBt
X21vZHVsZVZlcnNpb24gPiBjb21wYXJlVmVyc2lvbiA/IDEgOiAtMTsNCisgICAgcmV0dXJuIDA7
DQorfQ0KKw0KK30NCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5WaWV3U3lt
Ymlhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luVmll
d1N5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1
Z2luVmlld1N5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2NyBAQAorLyoNCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQ0KKw0KKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
DQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLA0KKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQ0KKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bw0KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLA0KKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4NCisqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiDQorI2luY2x1ZGUgIkRv
Y3VtZW50TG9hZGVyLmgiDQorI2luY2x1ZGUgIkVsZW1lbnQuaCINCisjaW5jbHVkZSAiRnJhbWUu
aCINCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIg0KKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIg0KKyNpbmNsdWRlICJGcmFtZVRyZWUuaCINCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiDQor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIg0KKyNpbmNsdWRlICJIVE1MTmFtZXMuaCINCisj
aW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCINCisjaW5jbHVkZSAiSW1hZ2UuaCINCisjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiDQorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCINCisjaW5j
bHVkZSAiTW91c2VFdmVudC5oIg0KKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIm5wZnVuY3Rpb25zLmgiDQorI2luY2x1ZGUgIm5waW50ZXJmYWNlLmgiCisjaW5jbHVkZSAi
UGFnZS5oIg0KKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCINCisjaW5jbHVkZSAi
UGxhdGZvcm1Nb3VzZUV2ZW50LmgiDQorI2luY2x1ZGUgIlBsdWdpbkNvbnRhaW5lclN5bWJpYW4u
aCINCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCINCisjaW5jbHVkZSAiUGx1Z2luTWFpblRocmVh
ZFNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCINCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCINCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIg0KKyNpbmNsdWRlICJT
ZXR0aW5ncy5oIg0KKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIg0KKyNpbmNsdWRlICJydW50
aW1lLmgiDQorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIg0KKyNpbmNsdWRlIDxRS2V5RXZlbnQ+
CisjaW5jbHVkZSA8UVBpeG1hcC5oPg0KKyNpbmNsdWRlIDxRUmVnaW9uPg0KKyNpbmNsdWRlIDxR
VmVjdG9yPg0KKyNpbmNsdWRlIDxRV2lkZ2V0PgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+
DQorI2luY2x1ZGUgPHJ1bnRpbWUvSlNWYWx1ZS5oPg0KKw0KK3VzaW5nIEpTQzo6RXhlY1N0YXRl
Ow0KK3VzaW5nIEpTQzo6SW50ZXJwcmV0ZXI7DQordXNpbmcgSlNDOjpKU0xvY2s7DQordXNpbmcg
SlNDOjpKU09iamVjdDsNCit1c2luZyBKU0M6OlVTdHJpbmc7DQorDQordXNpbmcgbmFtZXNwYWNl
IHN0ZDsNCisNCit1c2luZyBuYW1lc3BhY2UgV1RGOw0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsN
CisNCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOw0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6dXBk
YXRlUGx1Z2luV2lkZ2V0KCkNCit7DQorICAgIGlmICghcGFyZW50KCkgfHwgIW1faXNXaW5kb3dl
ZCkNCisgICAgICAgIHJldHVybjsNCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygp
KTsNCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihw
YXJlbnQoKSk7DQorICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsNCisg
ICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7DQorICAgIA0KKyAgICBtX3dpbmRv
d1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKS5s
b2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKTsNCisgICAgbV9jbGlwUmVjdCA9IHdpbmRv
d0NsaXBSZWN0KCk7DQorICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1f
d2luZG93UmVjdC55KCkpOw0KKyAgICBpZiAoIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpDQorICAg
ICAgICByZXR1cm47DQorICAgIAorICAgIFBsdWdpbkNvbnRhaW5lclN5bWJpYW4qIGNvbnRhaW5l
ciA9IHN0YXRpY19jYXN0PFBsdWdpbkNvbnRhaW5lclN5bWJpYW4qPihwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKTsNCisgICAgY29udGFpbmVyLT5yZXF1ZXN0R2VvbWV0cnkobV93aW5kb3dSZWN0LCBR
UmVnaW9uKG1fY2xpcFJlY3QpKTsNCisgICAgLy8gaW4gb3JkZXIgdG8gbW92ZS9yZXNpemUgdGhl
IHBsdWdpbiB3aW5kb3cgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgcmVzdCBvZiBmcmFtZQ0KKyAg
ICAvLyBkdXJpbmcgZS5nLiBzY3JvbGxpbmcsIHdlIHNldCB0aGUgbWFzayBhbmQgZ2VvbWV0cnkg
aW4gdGhlIHBhaW50KCkgZnVuY3Rpb24sIGJ1dA0KKyAgICAvLyBhcyBwYWludCgpIGlzbid0IGNh
bGxlZCB3aGVuIHRoZSBwbHVnaW4gd2luZG93IGlzIG91dHNpZGUgdGhlIGZyYW1lIHdoaWNoIGNh
bg0KKyAgICAvLyBiZSBjYXVzZWQgYnkgYSBzY3JvbGwsIHdlIG5lZWQgdG8gbW92ZS9yZXNpemUg
aW1tZWRpYXRlbHkuDQorICAgIGlmICghbV93aW5kb3dSZWN0LmludGVyc2VjdHMoZnJhbWVWaWV3
LT5mcmFtZVJlY3QoKSkpDQorICAgICAgICBjb250YWluZXItPmFkanVzdEdlb21ldHJ5KCk7DQor
fQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoKQ0KK3sNCisgICAgV2lkZ2V0OjpzZXRG
b2N1cygpOw0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OnNob3coKQ0KK3sNCisgICAgc2V0U2Vs
ZlZpc2libGUodHJ1ZSk7DQorICAgIFdpZGdldDo6c2hvdygpOw0KK30NCisNCit2b2lkIFBsdWdp
blZpZXc6OmhpZGUoKQ0KK3sNCisgICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOw0KKyAgICBXaWRn
ZXQ6OmhpZGUoKTsNCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpDQorew0KKyAgICBpZiAoIW1faXNTdGFy
dGVkKSB7DQorICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOw0K
KyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIA0KKyAgICBpZiAoY29udGV4dC0+cGFpbnRp
bmdEaXNhYmxlZCgpKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICANCisgICAgaWYgKG1faXNXaW5k
b3dlZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQ0KKyAgICAgICAgc3RhdGljX2Nhc3Q8UGx1
Z2luQ29udGFpbmVyU3ltYmlhbio+KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT5hZGp1c3RHZW9t
ZXRyeSgpOw0KKw0KKyAgICBpZiAoIW1faXNXaW5kb3dlZCkgew0KKyAgICAgICAgaWYgKCFyZWN0
LmludGVyc2VjdHMoZnJhbWVSZWN0KCkpKQ0KKyAgICAgICAgICAgIHJldHVybjsNCisNCisgICAg
ICAgIGNvbnRleHQtPnNhdmUoKTsNCisgICAgICAgIEludFJlY3QgY2xpcFJlY3QocmVjdCk7DQor
ICAgICAgICBjbGlwUmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOw0KKyAgICAgICAgY29udGV4
dC0+Y2xpcChjbGlwUmVjdCk7DQorICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoZnJhbWVSZWN0
KCkubG9jYXRpb24oKS54KCksIGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkueSgpKTsNCisgICAgICAg
IE5QUEV2ZW50RHJhdyBldmVudERyYXc7DQorICAgICAgICBldmVudERyYXcucGFpbnRlciA9IGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOw0KKyAgICAgICAgTlBQRXZlbnQgZXZlbnQ7DQorICAg
ICAgICBldmVudC50eXBlID0gTnBwRXZlbnREcmF3Ow0KKyAgICAgICAgZXZlbnQuZGF0YSA9ICZl
dmVudERyYXc7DQorICAgICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7
DQorICAgICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7DQor
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2Up
Ow0KKyAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7DQorICAgICAgICAgICAgbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7DQorICAgICAg
ICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7DQorICAgICAgICAgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7DQorICAgICAgICB9DQorICAgICAgICBjb250ZXh0LT5y
ZXN0b3JlKCk7DQorICAgIH0NCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2Fy
ZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQ0KK3sNCisgICAgaWYgKG1faXNXaW5kb3dlZCkN
CisgICAgICAgIHJldHVybjsNCisgICAgTlBQRXZlbnRLZXkgZXZLZXk7DQorICAgIGV2S2V5Lmtl
eUV2ZW50ID0gKGV2ZW50LT5rZXlFdmVudCgpLT5xdEV2ZW50KCkpOw0KKyAgICBOUFBFdmVudCBl
djsNCisgICAgZXYudHlwZSA9IE5wcEV2ZW50S2V5Ow0KKyAgICBldi5kYXRhID0gJmV2S2V5Ow0K
KyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7DQorICAgICAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsNCisgICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsNCisgICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7DQorICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9p
bnN0YW5jZSwgJmV2KTsNCisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOw0KKyAgICAg
ICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7DQorICAgIH0NCit9DQorDQor
dm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQ0KK3sN
CisgICAgaWYgKG1faXNXaW5kb3dlZCkNCisgICAgICAgIHJldHVybjsNCisgICAgUUV2ZW50OjpU
eXBlIHR5cGU7DQorICAgIGlmIChldmVudC0+dHlwZSgpID09ICJtb3VzZWRvd24iKQ0KKyAgICAg
ICAgdHlwZSA9IFFFdmVudDo6TW91c2VCdXR0b25QcmVzczsNCisgICAgZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSAibW91c2Vtb3ZlIikNCisgICAgICAgIHR5cGUgPSBRRXZlbnQ6Ok1vdXNlTW92
ZTsNCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSAibW91c2V1cCIpDQorICAgICAgICB0
eXBlID0gUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2U7DQorICAgIGVsc2UNCisgICAgICAgIHJl
dHVybjsNCisgICAgUVBvaW50IHBvc2l0aW9uKGV2ZW50LT5vZmZzZXRYKCksIGV2ZW50LT5vZmZz
ZXRZKCkpOw0KKyAgICBRdDo6TW91c2VCdXR0b24gYnV0dG9uOw0KKyAgICBzd2l0Y2ggKGV2ZW50
LT53aGljaCgpKSB7DQorICAgIGNhc2UgMToNCisgICAgICAgIGJ1dHRvbiA9IFF0OjpMZWZ0QnV0
dG9uOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgMjoNCisgICAgICAgIGJ1dHRvbiA9IFF0
OjpNaWRCdXR0b247DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSAzOg0KKyAgICAgICAgYnV0
dG9uID0gUXQ6OlJpZ2h0QnV0dG9uOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGRlZmF1bHQ6DQor
ICAgICAgICBidXR0b24gPSBRdDo6Tm9CdXR0b247DQorICAgIH0NCisgICAgUXQ6OktleWJvYXJk
TW9kaWZpZXJzIG1vZGlmaWVycyA9IDA7DQorICAgIGlmIChldmVudC0+Y3RybEtleSgpKQ0KKyAg
ICAgICAgbW9kaWZpZXJzIHw9IFF0OjpDb250cm9sTW9kaWZpZXI7DQorICAgIGlmIChldmVudC0+
YWx0S2V5KCkpDQorICAgICAgICBtb2RpZmllcnMgfD0gUXQ6OkFsdE1vZGlmaWVyOw0KKyAgICBp
ZiAoZXZlbnQtPnNoaWZ0S2V5KCkpDQorICAgICAgICBtb2RpZmllcnMgfD0gUXQ6OlNoaWZ0TW9k
aWZpZXI7DQorICAgIGlmIChldmVudC0+bWV0YUtleSgpKQ0KKyAgICAgICAgbW9kaWZpZXJzIHw9
IFF0OjpNZXRhTW9kaWZpZXI7DQorICAgIFFNb3VzZUV2ZW50IG1vdXNlRXZlbnQodHlwZSwgcG9z
aXRpb24sIGJ1dHRvbiwgYnV0dG9uLCBtb2RpZmllcnMpOyANCisgICAgTlBQRXZlbnRNb3VzZSBl
dk1vdXNlOw0KKyAgICBldk1vdXNlLm1vdXNlRXZlbnQgPSAmbW91c2VFdmVudDsNCisgICAgTlBQ
RXZlbnQgZXY7DQorICAgIGV2LnR5cGUgPSBOcHBFdmVudE1vdXNlOw0KKyAgICBldi5kYXRhID0g
JmV2TW91c2U7DQorICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsNCisg
ICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOw0KKyAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOw0KKyAgICAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsNCisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5ldmVudChtX2luc3RhbmNlLCAmZXYpOw0KKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7DQorICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsNCisgICAg
fQ0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQp
DQorew0KKyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOw0KKyAgICBpZiAocGFyZW50KQ0K
KyAgICAgICAgaW5pdCgpOw0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQ0KK3sNCisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCAhcGFy
ZW50KCkpDQorICAgICAgICByZXR1cm47DQorICAgIGlmIChtX2lzV2luZG93ZWQpIHsNCisgICAg
ICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRl
bnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKTsNCisgICAgICAgIG1fbnBXaW5kb3cueCA9IHAu
eCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy55ID0gcC55KCk7DQorICAgICAgICBtX25wV2luZG93
LndpZHRoID0gcmVjdC53aWR0aCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSByZWN0
LmhlaWdodCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsNCisgICAg
ICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsNCisgICAgICAgIG1fbnBXaW5kb3cuY2xp
cFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7DQorICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0
LmJvdHRvbSA9IHJlY3QuaGVpZ2h0KCk7DQorICAgIA0KKyAgICAgICAgaWYgKG1fbnBXaW5kb3cu
eCA8IDAgfHwgbV9ucFdpbmRvdy55IDwgMCB8fCBtX25wV2luZG93LndpZHRoIDw9IDAgfHwgbV9u
cFdpbmRvdy5oZWlnaHQgPD0gMCkNCisgICAgICAgICAgICByZXR1cm47DQorICAgIA0KKyAgICAg
ICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsNCisgICAgICAgICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsNCisgICAgICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7DQorICAgICAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsNCisgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsNCisgICAgICAgICAg
ICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsNCisgICAgICAgICAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldygwKTsNCisgICAgDQorICAgICAgICAgICAgaWYgKCFtX2lzV2luZG93
ZWQpDQorICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgDQorICAgICAgICAgICAgQVNTRVJU
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOw0KKyAgICAgICAgfQ0KKyAgICB9IGVsc2Ugew0KKyAg
ICAgICAgLy8gRklYTUU6IGRvbid0IGNhbGwgTlBQX3NldFdpbmRvdyBpZiB3aW5kb3cgc2l6ZSBk
aWQgbm90IHJlYWxseSBjaGFuZ2UNCisgICAgICAgIG1fbnBXaW5kb3cueCA9IDA7DQorICAgICAg
ICBtX25wV2luZG93LnkgPSAwOw0KKyAgICANCisgICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSBy
ZWN0LndpZHRoKCk7DQorICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7
DQorICAgIA0KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsNCisgICAgICAg
IG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsNCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJl
Y3QucmlnaHQgPSByZWN0LndpZHRoKCk7DQorICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJv
dHRvbSA9IHJlY3QuaGVpZ2h0KCk7DQorICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IG1fcGFy
ZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpOw0KKyAgICAN
CisgICAgICAgIGlmIChtX25wV2luZG93LnggPCAwIHx8IG1fbnBXaW5kb3cueSA8IDANCisgICAg
ICAgICAgICB8fCBtX25wV2luZG93LndpZHRoIDw9IDAgfHwgbV9ucFdpbmRvdy5oZWlnaHQgPD0g
MCkNCisgICAgICAgICAgICByZXR1cm47DQorICAgIA0KKyAgICAgICAgaWYgKG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsNCisgICAgICAgICAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsNCisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7DQorICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsNCisgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93
KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsNCisgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2lu
KGZhbHNlKTsNCisgICAgICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygw
KTsNCisgICAgDQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorY29uc3QgY2hhciogUGx1Z2lu
Vmlldzo6dXNlckFnZW50U3RhdGljKCkNCit7CisgICAgIG5vdFN1cHBvcnRlZCgpOw0KK30NCisN
CitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1
ZmZlciwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmKQ0KK3sKKyAgICAgbm90U3VwcG9ydGVk
KCk7DQorfQ0KKw0KK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFy
aWFibGUsIHZvaWQqIHZhbHVlKQ0KK3sNCisgICAgc3dpdGNoICh2YXJpYWJsZSkgew0KKyAgICBj
YXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6IHsNCisgICAgICAgICAgICBOUEJvb2wqIHJlc3Vs
dCA9IHN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKTsNCisgICAgICAgICAgICAqcmVzdWx0ID0g
dHJ1ZTsNCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7DQorICAgICAgICB9DQor
ICAgICAgICANCisgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsNCisgICAgICAgIGlmICht
X2lzSmF2YVNjcmlwdFBhdXNlZCkNCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19F
UlJPUjsNCisNCisgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVu
dEZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsNCisNCisgICAgICAgIC8v
IFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhl
cmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRt
bD4NCisgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpDQorICAgICAgICAgICAgX05QTl9S
ZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsNCisNCisgICAgICAgIHZvaWQqKiB2ID0g
KHZvaWQqKil2YWx1ZTsNCisgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0Ow0KKyAgICAg
ICAgICAgIA0KKyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOw0KKyAgICB9DQorDQorICAg
IGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogew0KKyAgICAgICAgaWYgKG1faXNKYXZh
U2NyaXB0UGF1c2VkKQ0KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOw0K
Kw0KKyAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7DQorDQorICAgICAg
ICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNU
YWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkNCisg
ICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxl
bWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7DQorDQorICAgICAgICAvLyBSZXR1cm4g
dmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0
cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+DQorICAg
ICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQ0KKyAgICAgICAgICAgIF9OUE5fUmV0YWluT2Jq
ZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7DQorDQorICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiop
dmFsdWU7DQorICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsNCisNCisgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsNCisgICAgfSAgICAgICAgDQorICAgIH0NCisgICAgcmV0dXJu
IE5QRVJSX05PX0VSUk9SOw0KK30NCisNCitOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlU3Rh
dGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkNCit7DQorICAgIHJldHVybiBO
UEVSUl9HRU5FUklDX0VSUk9SOw0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpDQorew0KKyAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkg
ew0KKyAgICAgICAgcGxhdGZvcm1XaWRnZXQoKS0+dXBkYXRlKHJlY3QpOw0KKyAgICAgICAgcmV0
dXJuOw0KKyAgICB9DQorICAgIA0KKyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3Qo
cmVjdCk7DQorfQ0KKyAgICANCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVj
dCogcmVjdCkNCit7DQorICAgIGlmIChtX2lzV2luZG93ZWQpDQorICAgICAgICByZXR1cm47DQor
ICAgIGlmIChyZWN0KSB7DQorICAgICAgICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9w
LCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7DQor
ICAgICAgICBtX2ludmFsaWRSZWN0cy5hcHBlbmQocik7DQorICAgICAgICBpZiAoIW1faW52YWxp
ZGF0ZVRpbWVyLmlzQWN0aXZlKCkpDQorICAgICAgICAgICAgbV9pbnZhbGlkYXRlVGltZXIuc3Rh
cnRPbmVTaG90KDAuMDAxKTsNCisgICAgfQ0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OmludmFs
aWRhdGVSZWdpb24oTlBSZWdpb24gcmVnaW9uKQ0KK3sNCisgICAgaWYgKG1faXNXaW5kb3dlZCkN
CisgICAgICAgIHJldHVybjsNCisgICAgUVJlZ2lvbiogciA9IHN0YXRpY19jYXN0PFFSZWdpb24q
PihyZWdpb24pOw0KKyAgICBpZiAocikgew0KKyAgICAgICAgUVZlY3RvcjxRUmVjdD4gcmVjdHMg
PSByLT5yZWN0cygpOw0KKw0KKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCByZWN0cy5zaXpl
KCk7ICsraSkgew0KKyAgICAgICAgICAgIGNvbnN0IFFSZWN0JiBxUmVjdCA9IHJlY3RzLmF0KGkp
Ow0KKyAgICAgICAgICAgIEludFJlY3QgcihxUmVjdCk7DQorICAgICAgICAgICAgbV9pbnZhbGlk
UmVjdHMuYXBwZW5kKHIpOw0KKyAgICAgICAgaWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0FjdGl2
ZSgpKQ0KKyAgICAgICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwLjAwMSk7
DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJh
dygpDQorew0KKyAgICBpZiAobV9pc1dpbmRvd2VkKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAg
ICAgDQorICAgIFFSZWN0IHFyZWN0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93
KCktPnBsYXRmb3JtV2luZG93KCktPnJlY3QoKTsNCisgICAgSW50UmVjdCByKHFyZWN0LngoKSwg
cXJlY3QueSgpLCBxcmVjdC53aWR0aCgpLCBxcmVjdC5oZWlnaHQoKSk7DQorICAgIG1faW52YWxp
ZFJlY3RzLmFwcGVuZChyKTsNCisgICAgaWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0FjdGl2ZSgp
KQ0KKyAgICAgICAgbV9pbnZhbGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDAuMDAxKTsNCit9DQor
DQorUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQ0KK3sNCit9DQorDQordm9pZCBQbHVnaW5WaWV3
Ojppbml0KCkNCit7DQorICAgIGlmIChtX2hhdmVJbml0aWFsaXplZCkgDQorICAgICAgICByZXR1
cm47DQorICAgIA0KKyAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRydWU7DQorICAgIGlmICghbV9w
bHVnaW4pIHsNCisgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzQ2FuTm90Rmlu
ZFBsdWdpbik7DQorICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIGlmICghbV9wbHVnaW4t
PmxvYWQoKSkgew0KKyAgICAgIG1fcGx1Z2luID0gMDsNCisgICAgICBtX3N0YXR1cyA9IFBsdWdp
blN0YXR1c0Nhbk5vdExvYWRQbHVnaW47DQorICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAg
IGlmICghc3RhcnQoKSkgew0KKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RM
b2FkUGx1Z2luOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIGlmIChtX2lzV2luZG93
ZWQpIHsNCisgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KG5ldyBQbHVnaW5Db250YWluZXJTeW1i
aWFuKHRoaXMsIG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdp
bmRvdygpKSk7DQorICAgICAgICBzaG93KCk7DQorDQorICAgICAgICBtX25wV2luZG93LnR5cGUg
PSBOUFdpbmRvd1R5cGVXaW5kb3c7DQorICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lk
KilwbGF0Zm9ybVBsdWdpbldpZGdldCgpOw0KKw0KKyAgICAgICAgaWYgKCEobV9wbHVnaW4tPnF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKSkNCisg
ICAgICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkpOw0KKyAgICB9IGVsc2Ugew0K
KyAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7DQorICAgICAgICBzaG93KCk7DQorICAgICAg
ICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsNCisgICAgICAgIGlmICgh
KG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5k
b3dDYWxsKSkpDQorICAgICAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsNCisg
ICAgfQ0KKyAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseTsNCit9
DQorDQordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkNCit7
DQorICAgIGlmIChpc1BhcmVudFZpc2libGUoKSA9PSB2aXNpYmxlKQ0KKyAgICAgICAgcmV0dXJu
Ow0KKw0KKyAgICBXaWRnZXQ6OnNldFBhcmVudFZpc2libGUodmlzaWJsZSk7DQorDQorICAgIGlm
IChpc1NlbGZWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkNCisgICAgICAgIHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldFZpc2libGUodmlzaWJsZSk7DQorDQorfQ0KKw0KKw0K
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUNCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9u
cGludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL25waW50
ZXJmYWNlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9ucGludGVy
ZmFjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvKg0KKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpDQor
DQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLg0KKyovDQorI2lmbmRlZiBucGludGVyZmFjZV9IDQorI2RlZmluZSBucGludGVy
ZmFjZV9IDQorCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKKyNpbmNsdWRlIDxRdFBsdWdpbj4N
CitjbGFzcyBOUEludGVyZmFjZSB7DQorcHVibGljOg0KKyAgICB2aXJ0dWFsIE5QRXJyb3IgTlBf
SW5pdGlhbGl6ZShOUE5ldHNjYXBlRnVuY3MgKmFOUE5GdW5jcywgTlBQbHVnaW5GdW5jcyAqYU5Q
UEZ1bmNzKSA9IDA7DQorICAgIHZpcnR1YWwgdm9pZCBOUF9TaHV0ZG93bigpID0gMDsNCisgICAg
dmlydHVhbCBjaGFyKiBOUF9HZXRNSU1FRGVzY3JpcHRpb24oKSA9IDA7DQorfTsNCisNCitlbnVt
IE5wcEV2ZW50VHlwZSB7DQorICAgIE5wcEV2ZW50S2V5LA0KKyAgICBOcHBFdmVudE1vdXNlLA0K
KyAgICBOcHBFdmVudERyYXcsDQorICAgIE5wcEV2ZW50VmlzaWJpbGl0eSwNCisgICAgTnBwQ3Vz
dG9tVmFsdWUNCit9Ow0KKw0KK3R5cGVkZWYgc3RydWN0IF9OUFBFdmVudCB7DQorICAgIE5wcEV2
ZW50VHlwZSB0eXBlOw0KKyAgICB2b2lkKiBkYXRhOw0KK30gTlBQRXZlbnQ7DQorDQordHlwZWRl
ZiBzdHJ1Y3QgX05QUEV2ZW50S2V5IHsNCisgICAgdm9pZCoga2V5RXZlbnQ7IC8vIFFLZXlFdmVu
dA0KKyAgICB2b2lkKiByZXNlcnZlZDsNCit9IE5QUEV2ZW50S2V5Ow0KKw0KK3R5cGVkZWYgc3Ry
dWN0IF9OUFBFdmVudE1vdXNlIHsNCisgICAgdm9pZCogbW91c2VFdmVudDsgLy8gUU1vdXNlRXZl
bnQNCisgICAgdm9pZCogcmVzZXJ2ZWQ7DQorfSBOUFBFdmVudE1vdXNlOw0KKw0KK3R5cGVkZWYg
c3RydWN0IF9OUFBFdmVudFZpc2liaWxpdHkgew0gICAgYm9vbCB2aXNpYmxlOw0KKyAgICB2b2lk
KiByZXNlcnZlZDsNCit9IE5QUEV2ZW50VmlzaWJpbGl0eTsNCisNCit0eXBlZGVmIHN0cnVjdCBf
TlBQRXZlbnREcmF3IHsNCisgICAgdm9pZCogcGFpbnRlcjsgLy8gUVBhaW50ZXINCisgICAgdm9p
ZCogcmVzZXJ2ZWQ7DQorfSBOUFBFdmVudERyYXc7DQorDQorDQorLy8NCisNCisNCitRVF9CRUdJ
Tl9OQU1FU1BBQ0UNCitRX0RFQ0xBUkVfSU5URVJGQUNFKE5QSW50ZXJmYWNlLCAiY29tLm5va2lh
LnF0czYwLndlYnBsdWdpbi8xLjAiKTsNCitRVF9FTkRfTkFNRVNQQUNFDQorDQorI2VuZGlmIC8v
IG5waW50ZXJmYWNlX0gNCg==
</data>
<flag name="review"
          id="20759"
          type_id="1"
          status="-"
          setter="vestbo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39695</attachid>
            <date>2009-09-17 08:35:49 -0700</date>
            <delta_ts>2009-09-23 10:25:23 -0700</delta_ts>
            <desc>Patch with review comments incorporated</desc>
            <filename>S60_plugin_postreview.patch</filename>
            <type>text/plain</type>
            <size>39267</size>
            <attacher name="Rohini Ananth">rohini.ananth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODQ1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMDktMDktMTYgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IAorCisgICAgICAgIEVuYWJsaW5nIE5QQVBJ
IHBsdWdpbiBzdXBwb3J0IG9uIFF0IFdlYmtpdCBmb3IgUzYwIHBsYXRmb3JtCisgICAgICAgIEFs
c28gaW1wbGVtZW50ZWQgYnkgTWFoZXNoIEt1bGthcm5pPG1haGVzaC5rdWxrYXJuaUBub2tpYS5j
b20+IGFuZCAKKyAgICAgICAgUm9oaW5pIEFuYW50aCA8cm9oaW5pLmFuYW50aEBub2tpYS5jb20+
CisgICAgICAgIAorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICBFbmFibGluZyBFTkFC
TEVfTkVUU0NBUEVfUExVR0lOX0FQSSBmb3IgUzYwIGFuZCBhZGRlZCBTNjAgc3BlY2lmaWMgbmV3
IHBsdWdpbiBmaWxlcyB0byBiZSAKKyAgICAgICAgY29tcGlsZWQgdW5kZXIgc3ltYmlhbjogbWFj
cm8KKyAgICAgICAgKiBicmlkZ2UvbnBhcGkuaDoKKyAgICAgICAgRGVmaW5pbmcgWFBfU1lNQklB
TiBtYWNybyBhbmQgZG91YmxlLWNoZWNraW5nIGZvciBub24tc3ltYmlhbiB3aW5kb3cgaGVhZGVy
LWluY2x1c2lvbnMgJiAKKyAgICAgICAgdHlwZS1kZWZpbml0aW9ucworICAgICAgICAqIHBsdWdp
bnMvUGx1Z2luUGFja2FnZS5oOgorICAgICAgICBBZGRlZCBTNjAgc3BlY2lmaWMgcGx1Z2luIGlu
dGVyZmFjZSBhbmQgcGx1Z2luIGxvYWRlciB2YXJpYWJsZXMKKyAgICAgICAgKiBwbHVnaW5zL1Bs
dWdpblBhY2thZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6dW5sb2Fk
KTogQWRkZWQgIVBMQVRGT1JNKFNZTUJJQU4pIG1hY3JvLiBEZWZhdWx0IGltcGxlbWVudGF0aW9u
IHRvIAorICAgICAgICBiZSB1c2VkIG9ubHkgZm9yIG5vbi1zeW1iaWFuIHBsYXRmb3JtCisgICAg
ICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAgIE1hY3JvICFTWU1CSUFO
IGNoZWNraW5nCisgICAgICAgIAorICAgICAgICBBZGRlZCBmb2xkZXIgJ3N5bWJpYW4nIHdoaWNo
IGNvbnRhaW5zIGltcGxlbWVudGF0aW9uIGZpbGVzIGZvciBTNjAgcGxhdGZvcm0tc3BlY2lmaWMg
TlBBUEkgCisgICAgICAgIHBsdWdpbiBmdW5jdGlvbmFsaXR5LCB1bmRlciAvcGx1Z2lucyBmb2xk
ZXIKKyAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4KKyAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4v
bnBpbnRlcmZhY2UuaDoKKyAgICAgICAgUGx1Z2luIEludGVyZmFjZSB0byBiZSBpbXBsZW1lbnRl
ZCBieSBTNjAgTlBBUEkgcGx1Z2lucyAKKyAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4vUGx1Z2lu
Q29udGFpbmVyU3ltYmlhbi5oOgorICAgICAgICAqIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250
YWluZXJTeW1iaWFuLmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luRGF0YWJh
c2VTeW1iaWFuLmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luVmlld1N5bWJp
YW4uY3BwOgorICAgICAgICAqIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5QYWNrYWdlU3ltYmlhbi5j
cHA6CisKIDIwMDktMDktMTYgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBy
bwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA0ODQ1OCkKKysr
IFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfU0lOR0xFX1RIUkVBREVECiAKICMgTmVzY2FwZSBwbHVn
aW5zIHN1cHBvcnQgKE5QQVBJKQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ORVRTQ0FQRV9Q
TFVHSU5fQVBJPS4pIHsKLSAgICB1bml4fHdpbjMyLSo6IWVtYmVkZGVkOiF3aW5jZSo6IXN5bWJp
YW4geworICAgIHVuaXh8d2luMzItKjohZW1iZWRkZWQ6IXdpbmNlKjogewogICAgICAgICBERUZJ
TkVTICs9IEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJPTEKICAgICB9IGVsc2UgewogICAgICAg
ICBERUZJTkVTICs9IEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJPTAKQEAgLTI0MzIsNiArMjQz
MiwyMCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTkVUU0NBUEVfUExVR0lOCiAKICAgICBT
T1VSQ0VTICs9IHBsdWdpbnMvbnBhcGkuY3BwCiAKKyAgICBzeW1iaWFuIHsKKyAgICAgICAgU09V
UkNFUyArPSBcCisgICAgICAgIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5QYWNrYWdlU3ltYmlhbi5j
cHAgXAorICAgICAgICBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luRGF0YWJhc2VTeW1iaWFuLmNwcCBc
CisgICAgICAgIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5WaWV3U3ltYmlhbi5jcHAgXAorICAgICAg
ICBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFpbmVyU3ltYmlhbi5jcHAKKyAgICAgICAgCisg
ICAgICAgIEhFQURFUlMgKz0gXAorICAgICAgICBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFp
bmVyU3ltYmlhbi5oIFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFuL25waW50ZXJmYWNlLmgKKyAg
ICAgICAgCisgICAgICAgIExJQlMgKz0gLWxlZnNydgorICAgIH0gZWxzZSB7CisKICAgICB1bml4
IHsKICAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfUExVR0lOX1BBQ0tBR0VfU0lNUExFX0hBU0g9
MQogCkBAIC0yNDcyLDYgKzI0ODYsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTkVUU0NB
UEVfUExVR0lOCiAgICAgICAgICAgICAtbHNobHdhcGkgXAogICAgICAgICAgICAgLWx1c2VyMzIg
XAogICAgICAgICAgICAgLWx2ZXJzaW9uCisgICAgICAgIH0KICAgICB9CiAKIH0gZWxzZSB7Cklu
ZGV4OiBXZWJDb3JlL2JyaWRnZS9ucGFwaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdl
L25wYXBpLmgJKHJldmlzaW9uIDQ4NDU4KQorKysgV2ViQ29yZS9icmlkZ2UvbnBhcGkuaAkod29y
a2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTAgQEAKICMgICAgZW5kaWYgLyogWFBfV0lOICovCiAj
ZW5kaWYgLyogX1dJTjMyICovCiAKKyNpZmRlZiBfX1NZTUJJQU4zMl9fCisjICAgIGRlZmluZSBY
UF9TWU1CSUFOCisjZW5kaWYgLyogX19TWU1CSUFOMzJfXyAqLworCiAjaWZkZWYgX19NV0VSS1Nf
XwogIyAgICBkZWZpbmUgX2RlY2xzcGVjIF9fZGVjbHNwZWMKICMgICAgaWZkZWYgbWFjaW50b3No
CkBAIC0xMDYsOSArMTEwLDExIEBACiAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAjZW5kaWYKIAor
I2lmICFkZWZpbmVkKFhQX1NZTUJJQU4pCiAjaWZkZWYgWFBfV0lOCiAgICAgI2luY2x1ZGUgPHdp
bmRvd3MuaD4KICNlbmRpZgorI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiAgICAgICAg
ICAgICBQbHVnaW4gVmVyc2lvbiBDb25zdGFudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqLwpAQCAtNTc4LDEzICs1ODQsMTMgQEAgdHlwZWRlZiBlbnVtIHsKIHR5cGVkZWYgRXZl
bnRSZWNvcmQgICAgTlBFdmVudDsKICNlbmRpZgogCi0jZWxpZiBkZWZpbmVkKFhQX1dJTikKLXR5
cGVkZWYgc3RydWN0IF9OUEV2ZW50Ci17Ci0gICAgdWludDE2ICAgZXZlbnQ7Ci0gICAgdWludDMy
ICAgd1BhcmFtOwotICAgIHVpbnQzMiAgIGxQYXJhbTsKLX0gTlBFdmVudDsKKyNlbGlmICFkZWZp
bmVkKFhQX1NZTUJJQU4pICYmIGRlZmluZWQoWFBfV0lOKQorICAgIHR5cGVkZWYgc3RydWN0IF9O
UEV2ZW50IHsKKyAgICAgICAgdWludDE2ICAgZXZlbnQ7CisgICAgICAgIHVpbnQzMiAgIHdQYXJh
bTsKKyAgICAgICAgdWludDMyICAgbFBhcmFtOworICAgIH0gTlBFdmVudDsKKwogI2VsaWYgZGVm
aW5lZCAoWFBfVU5JWCkKIHR5cGVkZWYgWEV2ZW50IE5QRXZlbnQ7CiAjZWxzZQpAQCAtNjA0LDcg
KzYxMCw3IEBAIHR5cGVkZWYgdm9pZCAqTlBSZWdpb247CiB0eXBlZGVmIFJnbkhhbmRsZSBOUFFE
UmVnaW9uOwogI2VuZGlmCiB0eXBlZGVmIENHUGF0aFJlZiBOUENHUmVnaW9uOwotI2VsaWYgZGVm
aW5lZChYUF9XSU4pCisjZWxpZiAhZGVmaW5lZChYUF9TWU1CSUFOKSAmJiBkZWZpbmVkKFhQX1dJ
TikKIHR5cGVkZWYgSFJHTiBOUFJlZ2lvbjsKICNlbGlmIGRlZmluZWQoWFBfVU5JWCkKIHR5cGVk
ZWYgUmVnaW9uIE5QUmVnaW9uOwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCShy
ZXZpc2lvbiA0ODQ1OCkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIFBsdWdpbkRhdGFiYXNlOjpjbGVh
cigpCiAgICAgbV9wcmVmZXJyZWRQbHVnaW5zLmNsZWFyKCk7CiB9CiAKLSNpZiAhUExBVEZPUk0o
V0lOX09TKSB8fCBQTEFURk9STShXWCkKKyNpZiAhUExBVEZPUk0oU1lNQklBTikgJiYgICghUExB
VEZPUk0oV0lOX09TKSB8fCBQTEFURk9STShXWCkpCiAvLyBGb3IgU2FmYXJpL1dpbiB0aGUgZm9s
bG93aW5nIHRocmVlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkCiAvLyBpbiBQbHVnaW5EYXRhYmFz
ZVdpbi5jcHAsIGJ1dCBpZiB3ZSBjYW4gdXNlIFdlYkNvcmUgY29uc3RydWN0cwogLy8gZm9yIHRo
ZSBsb2dpYyB3ZSBzaG91bGQgcGVyaGFwcyBtb3ZlIGl0IGhlcmUgdW5kZXIgWFBfV0lOPwpAQCAt
NDI2LDYgKzQyNiw2IEBAIHZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXIK
ICAgICB9CiB9CiAKLSNlbmRpZiAvLyAhUExBVEZPUk0oV0lOX09TKQorI2VuZGlmIC8vICFQTEFU
Rk9STShXSU5fT1MpICFQTEFURk9STShTWU1CSUFOKQogCiB9CkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luUGFja2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blBhY2thZ2UuY3BwCShyZXZpc2lvbiA0ODQ1OCkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5Q
YWNrYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMyw3IEBAIFBsdWdpblBhY2th
Z2U6OlBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW4KICAgICBtX3BhcmVudERpcmVjdG9yeSA9IG1f
cGF0aC5sZWZ0KG1fcGF0aC5sZW5ndGgoKSAtIG1fZmlsZU5hbWUubGVuZ3RoKCkgLSAxKTsKIH0K
IAorI2lmICFQTEFURk9STShTWU1CSUFOKQogdm9pZCBQbHVnaW5QYWNrYWdlOjp1bmxvYWQoKQog
ewogICAgIGlmICghbV9pc0xvYWRlZCkKQEAgLTEyNSw2ICsxMjYsNyBAQCB2b2lkIFBsdWdpblBh
Y2thZ2U6OnVubG9hZCgpCiAKICAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKIH0KKyNlbmRp
ZiAvLyFQTEFURk9STShTWU1CSUFOKQogCiB2b2lkIFBsdWdpblBhY2thZ2U6OnVubG9hZFdpdGhv
dXRTaHV0ZG93bigpCiB7CkBAIC0xOTUsNyArMTk3LDcgQEAgdm9pZCBQbHVnaW5QYWNrYWdlOjpk
ZXRlcm1pbmVRdWlya3MoY29ucwogfQogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oV0lOX09TKQor
I2lmIFBMQVRGT1JNKFNZTUJJQU4pIHx8ICFQTEFURk9STShXSU5fT1MpCiB2b2lkIFBsdWdpblBh
Y2thZ2U6OmRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKQogewogICAgIC8v
IEl0J3MgYSBiaXQgbGFtZSB0byBkZXRlY3QgdGhlIHBsdWdpbiB2ZXJzaW9uIGJ5IHBhcnNpbmcg
aXQKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAkocmV2aXNpb24gNDg0NTgpCisrKyBXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwx
MSBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KIAorI2lmIFBMQVRGT1JNKFNZTUJJQU4pCitjbGFzcyBRUGx1Z2luTG9hZGVyOworY2xhc3Mg
TlBJbnRlcmZhY2U7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOwogICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsK
QEAgLTczLDYgKzc4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIFBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxh
c3RNb2RpZmllZCk7CisKKyNpZiBQTEFURk9STShTWU1CSUFOKQorICAgICAgICBOUEludGVyZmFj
ZSogbV9ucEludGVyZmFjZTsKKyAgICAgICAgUVBsdWdpbkxvYWRlciogbV9wbHVnaW5Mb2FkZXI7
CisjZW5kaWYgLy8gUExBVEZPUk0oU1lNQklBTikKICAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsK
ICAgICAgICAgYm9vbCBpc1BsdWdpbkJsYWNrbGlzdGVkKCk7CiAgICAgICAgIHZvaWQgZGV0ZXJt
aW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwpJbmRleDogV2ViQ29yZS9wbHVnaW5z
L3N5bWJpYW4vUGx1Z2luQ29udGFpbmVyU3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFpbmVyU3ltYmlhbi5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250YWluZXJTeW1iaWFuLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorLyoNCisgICAgQ29weXJpZ2h0IChDKSAyMDA5
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQ0KKw0KKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yDQorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorDQorICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZg0KKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bw0KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLA0KKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4NCisqLw0KKw0KKyNpbmNsdWRlICJjb25maWcuaCINCisjaW5jbHVkZSAiUGx1Z2luQ29udGFp
bmVyU3ltYmlhbi5oIg0KKw0KKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCINCisjaW5jbHVk
ZSAiRnJhbWUuaCINCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiDQorI2luY2x1ZGUgIlBhZ2UuaCIN
CisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiDQorI2luY2x1ZGUgIlBsdWdpblZp
ZXcuaCINCisNCisjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPg0KKyNpbmNsdWRlIDxRV2lkZ2V0Pg0K
Kw0KK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOw0KKw0KK1BsdWdpbkNvbnRhaW5lclN5bWJpYW46
OlBsdWdpbkNvbnRhaW5lclN5bWJpYW4oUGx1Z2luVmlldyogdmlldywgUVdpZGdldCogcGFyZW50
KQ0KKyAgICA6IG1fcGFyZW50KHBhcmVudCkNCisgICAgLCBtX3BsdWdpblZpZXcodmlldykNCisg
ICAgLCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZShmYWxzZSkNCit7DQorICAgIHNldFBhcmVu
dChtX3BhcmVudCk7DQorfQ0KKw0KK1BsdWdpbkNvbnRhaW5lclN5bWJpYW46On5QbHVnaW5Db250
YWluZXJTeW1iaWFuKCkNCit7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luQ29udGFpbmVyU3ltYmlhbjo6
cmVxdWVzdEdlb21ldHJ5KGNvbnN0IFFSZWN0JiByZWN0LCBjb25zdCBRUmVnaW9uJiBjbGlwKQ0K
K3sNCisgICAgaWYgKG1fd2luZG93UmVjdCAhPSByZWN0IHx8IG1fY2xpcFJlZ2lvbiAhPSBjbGlw
KSB7DQorICAgICAgICBtX3dpbmRvd1JlY3QgPSByZWN0Ow0KKyAgICAgICAgbV9jbGlwUmVnaW9u
ID0gY2xpcDsNCisgICAgICAgIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gdHJ1ZTsNCisg
ICAgfQ0KK30NCisNCit2b2lkIFBsdWdpbkNvbnRhaW5lclN5bWJpYW46OmFkanVzdEdlb21ldHJ5
KCkNCit7DQorICAgIGlmIChtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSkgew0KKyAgICAgICAg
c2V0R2VvbWV0cnkobV93aW5kb3dSZWN0KTsNCisgICAgICAgIHNldE1hc2sobV9jbGlwUmVnaW9u
KTsNCisgICAgICAgIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gZmFsc2U7DQorICAgIH0N
Cit9DQorDQordm9pZCBQbHVnaW5Db250YWluZXJTeW1iaWFuOjpmb2N1c0luRXZlbnQoUUZvY3Vz
RXZlbnQqIGV2ZW50KQ0KK3sNCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BsdWdpblZpZXctPnBh
cmVudEZyYW1lKCktPnBhZ2UoKSkNCisgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5z
ZXRBY3RpdmUodHJ1ZSk7DQorDQorICAgIG1fcGx1Z2luVmlldy0+Zm9jdXNQbHVnaW5FbGVtZW50
KCk7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luQ29udGFpbmVyU3ltYmlhbjo6Zm9jdXNPdXRFdmVudChR
Rm9jdXNFdmVudCopDQorew0KKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGx1Z2luVmlldy0+cGFy
ZW50RnJhbWUoKS0+cGFnZSgpKQ0KKyAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNl
dEFjdGl2ZShmYWxzZSk7DQorfQ0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdp
bkNvbnRhaW5lclN5bWJpYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvc3ltYmlh
bi9QbHVnaW5Db250YWluZXJTeW1iaWFuLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvc3ltYmlhbi9QbHVnaW5Db250YWluZXJTeW1iaWFuLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTAgQEAKKy8qDQorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykNCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYw0KKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXINCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLg0KKw0KKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUNCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
DQorDQorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8NCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwNCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuDQorKi8NCisNCisjaWZuZGVm
IFBsdWdpbkNvbnRhaW5lclF0X2gNCisjZGVmaW5lIFBsdWdpbkNvbnRhaW5lclF0X2gNCisNCisj
aW5jbHVkZSA8UVdpZGdldD4NCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQorICAgIGNsYXNz
IFBsdWdpblZpZXc7DQorDQorICAgIGNsYXNzIFBsdWdpbkNvbnRhaW5lclN5bWJpYW4gOiBwdWJs
aWMgUVdpZGdldCB7DQorICAgICAgICBRX09CSkVDVA0KKyAgICBwdWJsaWM6DQorICAgICAgICBQ
bHVnaW5Db250YWluZXJTeW1iaWFuKFBsdWdpblZpZXcqLCBRV2lkZ2V0KiBwYXJlbnQpOw0KKyAg
ICAgICAgflBsdWdpbkNvbnRhaW5lclN5bWJpYW4oKTsNCisNCisgICAgICAgIHZvaWQgcmVxdWVz
dEdlb21ldHJ5KGNvbnN0IFFSZWN0JiwgY29uc3QgUVJlZ2lvbiYgY2xpcCA9IFFSZWdpb24oKSk7
DQorICAgICAgICB2b2lkIGFkanVzdEdlb21ldHJ5KCk7DQorDQorICAgIHByb3RlY3RlZDoNCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBmb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQqKTsNCisgICAgICAg
IHZpcnR1YWwgdm9pZCBmb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50Kik7DQorICAgIHByaXZhdGU6
DQorICAgICAgICBQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7DQorICAgICAgICBRV2lkZ2V0KiBt
X3BhcmVudDsNCisgICAgICAgIFFSZWN0IG1fd2luZG93UmVjdDsNCisgICAgICAgIFFSZWdpb24g
bV9jbGlwUmVnaW9uOw0KKyAgICAgICAgYm9vbCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZTsN
CisgICAgfTsNCit9DQorDQorI2VuZGlmIC8vIFBsdWdpbkNvbnRhaW5lclF0X2gNCkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5EYXRhYmFzZVN5bWJpYW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkRhdGFiYXNlU3ltYmlhbi5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5EYXRhYmFzZVN5
bWJpYW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACisvKg0KKyAgICBDb3B5cmln
aHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
DQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
DQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLg0KKyovDQorI2luY2x1ZGUgImNvbmZpZy5oIg0KKyNpbmNsdWRlICJQbHVn
aW5EYXRhYmFzZS5oIg0KKw0KKyNpbmNsdWRlIDxRRmlsZUluZm8+DQorI2luY2x1ZGUgPGYzMmZp
bGUuaD4NCisNCitzdGF0aWMgY29uc3QgY2hhciBRVFBMVUdJTl9GSUxURVJbXSA9ICIqLnF0cGx1
Z2luIjsNCitzdGF0aWMgY29uc3QgY2hhciBRVF9QTFVHSU5fRk9MREVSW10gPSAiOlxccmVzb3Vy
Y2VcXHF0XFxwbHVnaW5zXFxucHF0cGx1Z2luc1xcIjsNCisNCituYW1lc3BhY2UgV2ViQ29yZSB7
DQorDQorVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3Rv
cmllcygpDQorew0KKyAgICBWZWN0b3I8U3RyaW5nPiBkaXJlY3RvcmllczsNCisgICAgLy9maW5k
IHRoZSBpbnN0YWxsYXRpb24gZHJpdmUNCisgICAgVERyaXZlTGlzdCBkcml2ZWxpc3Q7DQorICAg
IFRDaGFyIGRyaXZlTGV0dGVyOw0KKyAgICBSRnMgZnNTZXNzaW9uOworICAgIA0KKyAgICBpZiAo
ZnNTZXNzaW9uLkNvbm5lY3QoKSA9PSBLRXJyTm9uZSAmJiBmc1Nlc3Npb24uRHJpdmVMaXN0KGRy
aXZlbGlzdCkgPT0gS0Vyck5vbmUpIHsNCisgICAgICAgIGZvciAoVEludCBkcml2ZU51bWJlciA9
IEVEcml2ZUE7IGRyaXZlTnVtYmVyIDw9IEVEcml2ZVo7IGRyaXZlTnVtYmVyKyspIHsNCisgICAg
ICAgICAgICBpZiAoZHJpdmVsaXN0W2RyaXZlTnVtYmVyXSAmJiBmc1Nlc3Npb24uRHJpdmVUb0No
YXIoZHJpdmVOdW1iZXIsIGRyaXZlTGV0dGVyKSA9PSBLRXJyTm9uZSkgew0KKyAgICAgICAgICAg
ICAgICBRU3RyaW5nIGRyaXZlU3RyaW5nVmFsdWUoUUNoYXIoKHVpbnQpZHJpdmVMZXR0ZXIuR2V0
VXBwZXJDYXNlKCkpKTsNCisgICAgICAgICAgICAgICAgUVN0cmluZyBzdHViRGlyUGF0aDsNCisg
ICAgICAgICAgICAgICAgc3R1YkRpclBhdGguYXBwZW5kKGRyaXZlU3RyaW5nVmFsdWUpOw0KKyAg
ICAgICAgICAgICAgICBzdHViRGlyUGF0aC5hcHBlbmQoUVRfUExVR0lOX0ZPTERFUik7DQorICAg
ICAgICAgICAgICAgIGlmIChRRmlsZUluZm8oc3R1YkRpclBhdGgpLmV4aXN0cygpKQ0KKyAgICAg
ICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKHN0dWJEaXJQYXRoKTsNCisgICAgICAg
ICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgZnNTZXNzaW9uLkNsb3NlKCk7DQor
ICAgIHJldHVybiBkaXJlY3RvcmllczsNCit9DQorDQorYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQ
cmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQ0KK3sNCisgICAgcmV0
dXJuIHRydWU7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5E
aXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mIHBhdGhzKSBjb25zdA0KK3sNCisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuDQorICAgIEhhc2hTZXQ8
U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7DQorDQorICAgIFN0cmluZyBmaWxlTmFtZUZpbHRlcihR
VFBMVUdJTl9GSUxURVIpOw0KKw0KKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3Ig
ZGlyc0VuZCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuZW5kKCk7DQorICAgIGZvciAoVmVjdG9yPFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGRJdCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuYmVnaW4oKTsg
ZEl0ICE9IGRpcnNFbmQ7ICsrZEl0KSB7DQorICAgICAgICBWZWN0b3I8U3RyaW5nPiBwbHVnaW5Q
YXRocyA9IGxpc3REaXJlY3RvcnkoKmRJdCwgZmlsZU5hbWVGaWx0ZXIpOw0KKyAgICAgICAgVmVj
dG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBsdWdpbnNFbmQgPSBwbHVnaW5QYXRocy5lbmQo
KTsNCisgICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBJdCA9IHBs
dWdpblBhdGhzLmJlZ2luKCk7IHBJdCAhPSBwbHVnaW5zRW5kOyArK3BJdCkgew0KKyAgICAgICAg
ICAgIGlmICghZmlsZUV4aXN0cygqcEl0KSkNCisgICAgICAgICAgICAgICAgY29udGludWU7DQor
ICAgICAgICAgICAgcGF0aHMuYWRkKCpwSXQpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0K
K30NCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5QYWNrYWdlU3ltYmlhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luUGFja2FnZVN5
bWJpYW4uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2lu
UGFja2FnZVN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwMSBAQAorLyoNCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQ0KKw0KKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
DQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLA0KKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQ0KKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bw0KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLA0KKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4NCisqLw0KKyNpbmNsdWRlICJjb25maWcuaCINCisjaW5j
bHVkZSAiUGx1Z2luUGFja2FnZS5oIg0KKw0KKyNpbmNsdWRlICJDU3RyaW5nLmgiDQorI2luY2x1
ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJucGludGVyZmFjZS5oIg0KKyNpbmNs
dWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiDQorI2lu
Y2x1ZGUgIlBsdWdpbkRlYnVnLmgiDQorI2luY2x1ZGUgPFFQbHVnaW5Mb2FkZXI+DQorDQorbmFt
ZXNwYWNlIFdlYkNvcmUgew0KKw0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkNCit7
DQorICAgIGlmICghbG9hZCgpKQ0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgICBjaGFy
KiBidWYgPSAwOw0KKyAgICBOUEVycm9yIGVyciA9IG1fcGx1Z2luRnVuY3MuZ2V0dmFsdWUoMCwg
TlBQVnBsdWdpbk5hbWVTdHJpbmcsICh2b2lkICopJmJ1Zik7DQorICAgIG1fbmFtZSA9IGJ1ZjsN
CisgICAgZXJyID0gbV9wbHVnaW5GdW5jcy5nZXR2YWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRp
b25TdHJpbmcsICh2b2lkICopJmJ1Zik7DQorICAgIG1fZGVzY3JpcHRpb24gPSBidWY7DQorDQor
ICAgIGRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKTsNCisNCisgICAgU3Ry
aW5nIHMgPSBtX25wSW50ZXJmYWNlLT5OUF9HZXRNSU1FRGVzY3JpcHRpb24oKTsNCisgICAgVmVj
dG9yPFN0cmluZz4gdHlwZXM7DQorICAgIHMuc3BsaXQoVUNoYXIoJ3wnKSwgZmFsc2UsIHR5cGVz
KTsgIC8vIDxNSU1FMT47PGV4dDEsZXh0MixleHQzLC4uLj47PERlc2NyaXB0aW9uPnw8TUlNRTI+
fDxNSU1FMz58Li4uDQorDQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyAr
K2kpIHsNCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1pbWU7DQorICAgICAgICB0eXBlc1tpXS5z
cGxpdChVQ2hhcignOycpLCB0cnVlLCBtaW1lKTsgIC8vIDxNSU1FMT47PGV4dDEsZXh0MixleHQz
LC4uLj47PERlc2NyaXB0aW9uPg0KKyAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMCkgew0KKyAg
ICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dHM7DQorICAgICAgICAgICAgaWYgKG1pbWUuc2l6
ZSgpID4gMSkNCisgICAgICAgICAgICAgICAgbWltZVsxXS5zcGxpdChVQ2hhcignLCcpLCBmYWxz
ZSwgZXh0cyk7IC8vIDxleHQxLGV4dDIsZXh0MywuLi4+DQorICAgICAgICAgICAgDQorICAgICAg
ICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lWzBdLCBleHRzKTsgLy8gPE1JTUU+LDxl
eHQxLGV4dDIsZXh0Mz4NCisgICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAyKQ0KKyAgICAg
ICAgICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWltZVswXSwgbWltZVsyXSk7IC8v
IDxNSU1FPiw8RGVzY3JpcHRpb24+DQorICAgICAgICB9DQorICAgIH0NCisgICAgdW5sb2FkKCk7
DQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCitib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQ0K
K3sNCisgICAgaWYgKG1faXNMb2FkZWQpIHsNCisgICAgICAgIG1fbG9hZENvdW50Kys7DQorICAg
ICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBtX3BsdWdpbkxvYWRlciA9IG5ldyBR
UGx1Z2luTG9hZGVyKG1fcGF0aCk7DQorICAgIGlmICghbV9wbHVnaW5Mb2FkZXItPmxvYWQoKSkg
ew0KKyAgICAgICAgZGVsZXRlIG1fcGx1Z2luTG9hZGVyOw0KKyAgICAgICAgbV9wbHVnaW5Mb2Fk
ZXIgPSAwOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIFFPYmplY3Qq
IHBsdWdpbiA9IG1fcGx1Z2luTG9hZGVyLT5pbnN0YW5jZSgpOw0KKyAgICBpZiAoIXBsdWdpbikg
ew0KKyAgICAgICAgbV9wbHVnaW5Mb2FkZXItPnVubG9hZCgpOw0KKyAgICAgICAgZGVsZXRlIG1f
cGx1Z2luTG9hZGVyOw0KKyAgICAgICAgbV9wbHVnaW5Mb2FkZXIgPSAwOw0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIC8vIFBsdWdpbiBpbnN0YW5jZSBjcmVhdGVkDQor
ICAgIC8vIENhc3QgcGx1Z2luIHRvIE5QSW50ZXJmYWNlLA0KKyAgICBtX25wSW50ZXJmYWNlID0g
cW9iamVjdF9jYXN0PE5QSW50ZXJmYWNlICo+KHBsdWdpbik7DQorICAgIGlmICghbV9ucEludGVy
ZmFjZSkgew0KKyAgICAgICAgbV9wbHVnaW5Mb2FkZXItPnVubG9hZCgpOw0KKyAgICAgICAgZGVs
ZXRlIG1fcGx1Z2luTG9hZGVyOw0KKyAgICAgICAgbV9wbHVnaW5Mb2FkZXIgPSAwOw0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIG1faXNMb2FkZWQgPSB0cnVlOw0KKyAg
ICANCisgICAgTlBFcnJvciBucEVycjsNCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBz
aXplb2YobV9wbHVnaW5GdW5jcykpOw0KKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2Yo
bV9wbHVnaW5GdW5jcyk7DQorICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YobV9icm93
c2VyRnVuY3MpOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5P
UjsNCisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsNCisgICAgbV9icm93
c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1
ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsNCisgICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFt
ID0gTlBOX05ld1N0cmVhbTsNCisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7
DQorICAgIG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsN
CisgICAgbV9icm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsNCisgICAgbV9icm93c2Vy
RnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsNCisgICAgbV9icm93c2VyRnVuY3MubWVtYWxs
b2MgPSBOUE5fTWVtQWxsb2M7DQorICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVt
RnJlZTsNCisgICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7DQorICAg
IG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsNCisgICAg
bV9icm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsNCisgICAgbV9i
cm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5Ow0KKyAgICBtX2Jy
b3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1ZTsNCisgICAgbV9icm93c2VyRnVuY3Mu
c2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7DQorICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVy
ZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRl
cmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247DQorICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNl
cmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52
ID0gTlBOX0dldEphdmFFbnY7DQorICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBO
X0dldEphdmFQZWVyOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRl
ID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7DQorICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBv
cHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7DQorICAgIG1fYnJv
d3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7
DQorICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmlu
Z0lkZW50aWZpZXI7DQorICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0g
X05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsNCisgICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRl
bnRpZmllciA9IF9OUE5fR2V0SW50SWRlbnRpZmllcjsNCisgICAgbV9icm93c2VyRnVuY3MuaWRl
bnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7DQorICAgIG1fYnJvd3Nl
ckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOw0KKyAg
ICBtX2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsNCisgICAg
bV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7DQorICAgIG1f
YnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7DQorICAgIG1f
YnJvd3NlckZ1bmNzLmludm9rZSA9IF9OUE5fSW52b2tlOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5p
bnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5l
dmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7DQorICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3BlcnR5
ID0gX05QTl9HZXRQcm9wZXJ0eTsNCisgICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBf
TlBOX1NldFByb3BlcnR5Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9O
UE5fUmVtb3ZlUHJvcGVydHk7DQorICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05Q
Tl9IYXNNZXRob2Q7DQorICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJv
cGVydHk7DQorICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0
aW9uOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsNCisg
ICAgbV9icm93c2VyRnVuY3MuY29uc3RydWN0ID0gX05QTl9Db25zdHJ1Y3Q7DQorDQorICAgIG5w
RXJyID0gbV9ucEludGVyZmFjZS0+TlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3Bs
dWdpbkZ1bmNzKTsNCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKSB7DQorICAgICAg
ICBtX3BsdWdpbkxvYWRlci0+dW5sb2FkKCk7DQorICAgICAgICBkZWxldGUgbV9wbHVnaW5Mb2Fk
ZXI7DQorICAgICAgICBtX3BsdWdpbkxvYWRlciA9IDA7DQorICAgICAgICByZXR1cm4gZmFsc2U7
DQorICAgIH0NCisNCisgICAgbV9sb2FkQ291bnQrKzsNCisgICAgcmV0dXJuIHRydWU7DQorfQ0K
Kw0KK3ZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkKCkNCit7DQorICAgIGlmICghbV9pc0xvYWRl
ZCkNCisgICAgICAgIHJldHVybjsNCisNCisgICAgaWYgKC0tbV9sb2FkQ291bnQgPiAwKQ0KKyAg
ICAgICAgcmV0dXJuOw0KKyAgICAgICAgDQorICAgIG1faXNMb2FkZWQgPSBmYWxzZTsNCisgICAg
bV9ucEludGVyZmFjZS0+TlBfU2h1dGRvd24oKTsNCisNCisgICAgbV9wbHVnaW5Mb2FkZXItPnVu
bG9hZCgpOw0KKyAgICBkZWxldGUgbV9wbHVnaW5Mb2FkZXI7DQorICAgIG1fcGx1Z2luTG9hZGVy
ID0gMDsNCit9DQorDQordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0DQoreyAN
CisgICAgdW5zaWduZWQgaGFzaENvZGVzWzJdID0gew0KKyAgICAgICAgbV9wYXRoLmltcGwoKS0+
aGFzaCgpLA0KKyAgICAgICAgbV9sYXN0TW9kaWZpZWQNCisgICAgfTsNCisNCisgICAgcmV0dXJu
IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29k
ZXMpLCAyICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOw0KK30NCisNCitib29s
IFBsdWdpblBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdp
blBhY2thZ2UmIGIpDQorew0KKyAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNj
cmlwdGlvbjsNCit9DQorDQoraW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lvbihj
b25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIGNvbXBhcmVWZXJzaW9uKSBjb25zdA0KK3sNCisg
ICAgLy8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4s
IGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4NCisgICAgLy8gdGhlIHBhc3NlZCB2ZXJzaW9uDQor
ICAgIGlmIChtX21vZHVsZVZlcnNpb24gIT0gY29tcGFyZVZlcnNpb24pDQorICAgICAgICByZXR1
cm4gbV9tb2R1bGVWZXJzaW9uID4gY29tcGFyZVZlcnNpb24gPyAxIDogLTE7DQorICAgIHJldHVy
biAwOw0KK30NCisNCit9DQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luVmll
d1N5bWJpYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdp
blZpZXdTeW1iaWFuLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFu
L1BsdWdpblZpZXdTeW1iaWFuLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NjcgQEAKKy8q
DQorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykNCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLg0KKw0KKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8NCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwNCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuDQorKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbHVnaW5WaWV3LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIg0KKyNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIg0KKyNpbmNsdWRlICJFbGVtZW50LmgiDQorI2luY2x1ZGUgIkZy
YW1lLmgiDQorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCINCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCINCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiDQorI2luY2x1ZGUgIkZyYW1lVmlldy5o
Ig0KKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCINCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
DQorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiDQorI2luY2x1ZGUgIkltYWdlLmgiDQor
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIg0KKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiDQor
I2luY2x1ZGUgIk1vdXNlRXZlbnQuaCINCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJucGZ1bmN0aW9ucy5oIg0KKyNpbmNsdWRlICJucGludGVyZmFjZS5oIgorI2luY2x1
ZGUgIlBhZ2UuaCINCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiDQorI2luY2x1
ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIg0KKyNpbmNsdWRlICJQbHVnaW5Db250YWluZXJTeW1i
aWFuLmgiDQorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiDQorI2luY2x1ZGUgIlBsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiDQorI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiDQorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCINCisjaW5jbHVk
ZSAiU2V0dGluZ3MuaCINCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCINCisjaW5jbHVkZSAi
cnVudGltZS5oIg0KKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCINCisjaW5jbHVkZSA8UUtleUV2
ZW50PgorI2luY2x1ZGUgPFFQaXhtYXAuaD4NCisjaW5jbHVkZSA8UVJlZ2lvbj4NCisjaW5jbHVk
ZSA8UVZlY3Rvcj4NCisjaW5jbHVkZSA8UVdpZGdldD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9j
ay5oPg0KKyNpbmNsdWRlIDxydW50aW1lL0pTVmFsdWUuaD4NCisNCit1c2luZyBKU0M6OkV4ZWNT
dGF0ZTsNCit1c2luZyBKU0M6OkludGVycHJldGVyOw0KK3VzaW5nIEpTQzo6SlNMb2NrOw0KK3Vz
aW5nIEpTQzo6SlNPYmplY3Q7DQordXNpbmcgSlNDOjpVU3RyaW5nOw0KKw0KK3VzaW5nIG5hbWVz
cGFjZSBzdGQ7DQorDQordXNpbmcgbmFtZXNwYWNlIFdURjsNCisNCituYW1lc3BhY2UgV2ViQ29y
ZSB7DQorDQordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsNCisNCit2b2lkIFBsdWdpblZpZXc6
OnVwZGF0ZVBsdWdpbldpZGdldCgpDQorew0KKyAgICBpZiAoIXBhcmVudCgpIHx8ICFtX2lzV2lu
ZG93ZWQpDQorICAgICAgICByZXR1cm47DQorICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZp
ZXcoKSk7DQorICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3
Kj4ocGFyZW50KCkpOw0KKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7
DQorICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0Ow0KKyAgICANCisgICAgbV93
aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0
KCkubG9jYXRpb24oKSksIGZyYW1lUmVjdCgpLnNpemUoKSk7DQorICAgIG1fY2xpcFJlY3QgPSB3
aW5kb3dDbGlwUmVjdCgpOw0KKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCks
IC1tX3dpbmRvd1JlY3QueSgpKTsNCisgICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQ0K
KyAgICAgICAgcmV0dXJuOw0KKyAgICAKKyAgICBQbHVnaW5Db250YWluZXJTeW1iaWFuKiBjb250
YWluZXIgPSBzdGF0aWNfY2FzdDxQbHVnaW5Db250YWluZXJTeW1iaWFuKj4ocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSk7DQorICAgIGNvbnRhaW5lci0+cmVxdWVzdEdlb21ldHJ5KG1fd2luZG93UmVj
dCwgUVJlZ2lvbihtX2NsaXBSZWN0KSk7DQorICAgIC8vIGluIG9yZGVyIHRvIG1vdmUvcmVzaXpl
IHRoZSBwbHVnaW4gd2luZG93IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIHJlc3Qgb2YgZnJhbWUN
CisgICAgLy8gZHVyaW5nIGUuZy4gc2Nyb2xsaW5nLCB3ZSBzZXQgdGhlIG1hc2sgYW5kIGdlb21l
dHJ5IGluIHRoZSBwYWludCgpIGZ1bmN0aW9uLCBidXQNCisgICAgLy8gYXMgcGFpbnQoKSBpc24n
dCBjYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHdpbmRvdyBpcyBvdXRzaWRlIHRoZSBmcmFtZSB3aGlj
aCBjYW4NCisgICAgLy8gYmUgY2F1c2VkIGJ5IGEgc2Nyb2xsLCB3ZSBuZWVkIHRvIG1vdmUvcmVz
aXplIGltbWVkaWF0ZWx5Lg0KKyAgICBpZiAoIW1fd2luZG93UmVjdC5pbnRlcnNlY3RzKGZyYW1l
Vmlldy0+ZnJhbWVSZWN0KCkpKQ0KKyAgICAgICAgY29udGFpbmVyLT5hZGp1c3RHZW9tZXRyeSgp
Ow0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKCkNCit7DQorICAgIFdpZGdldDo6
c2V0Rm9jdXMoKTsNCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpzaG93KCkNCit7DQorICAgIHNl
dFNlbGZWaXNpYmxlKHRydWUpOw0KKyAgICBXaWRnZXQ6OnNob3coKTsNCit9DQorDQordm9pZCBQ
bHVnaW5WaWV3OjpoaWRlKCkNCit7DQorICAgIHNldFNlbGZWaXNpYmxlKGZhbHNlKTsNCisgICAg
V2lkZ2V0OjpoaWRlKCk7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQ0KK3sNCisgICAgaWYgKCFtX2lz
U3RhcnRlZCkgew0KKyAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0
KTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICANCisgICAgaWYgKGNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSkNCisgICAgICAgIHJldHVybjsNCisgICAgDQorICAgIGlmIChtX2lz
V2luZG93ZWQgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkNCisgICAgICAgIHN0YXRpY19jYXN0
PFBsdWdpbkNvbnRhaW5lclN5bWJpYW4qPihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+YWRqdXN0
R2VvbWV0cnkoKTsNCisNCisgICAgaWYgKCFtX2lzV2luZG93ZWQpIHsNCisgICAgICAgIGlmICgh
cmVjdC5pbnRlcnNlY3RzKGZyYW1lUmVjdCgpKSkNCisgICAgICAgICAgICByZXR1cm47DQorDQor
ICAgICAgICBjb250ZXh0LT5zYXZlKCk7DQorICAgICAgICBJbnRSZWN0IGNsaXBSZWN0KHJlY3Qp
Ow0KKyAgICAgICAgY2xpcFJlY3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsNCisgICAgICAgIGNv
bnRleHQtPmNsaXAoY2xpcFJlY3QpOw0KKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKGZyYW1l
UmVjdCgpLmxvY2F0aW9uKCkueCgpLCBmcmFtZVJlY3QoKS5sb2NhdGlvbigpLnkoKSk7DQorICAg
ICAgICBOUFBFdmVudERyYXcgZXZlbnREcmF3Ow0KKyAgICAgICAgZXZlbnREcmF3LnBhaW50ZXIg
PSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsNCisgICAgICAgIE5QUEV2ZW50IGV2ZW50Ow0K
KyAgICAgICAgZXZlbnQudHlwZSA9IE5wcEV2ZW50RHJhdzsNCisgICAgICAgIGV2ZW50LmRhdGEg
PSAmZXZlbnREcmF3Ow0KKyAgICAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVu
dCkgew0KKyAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
Ow0KKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZh
bHNlKTsNCisgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOw0KKyAgICAgICAgICAg
IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOw0KKyAg
ICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOw0KKyAgICAgICAgICAgIFBsdWdpblZp
ZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOw0KKyAgICAgICAgfQ0KKyAgICAgICAgY29udGV4
dC0+cmVzdG9yZSgpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5
Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkNCit7DQorICAgIGlmIChtX2lzV2luZG93
ZWQpDQorICAgICAgICByZXR1cm47DQorICAgIE5QUEV2ZW50S2V5IGV2S2V5Ow0KKyAgICBldktl
eS5rZXlFdmVudCA9IChldmVudC0+a2V5RXZlbnQoKS0+cXRFdmVudCgpKTsNCisgICAgTlBQRXZl
bnQgZXY7DQorICAgIGV2LnR5cGUgPSBOcHBFdmVudEtleTsNCisgICAgZXYuZGF0YSA9ICZldktl
eTsNCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkgew0KKyAgICAgICAg
UGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7DQorICAgICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7DQorICAgICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOw0KKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50
KG1faW5zdGFuY2UsICZldik7DQorICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsNCisg
ICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOw0KKyAgICB9DQorfQ0K
Kw0KK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkN
Cit7DQorICAgIGlmIChtX2lzV2luZG93ZWQpDQorICAgICAgICByZXR1cm47DQorICAgIFFFdmVu
dDo6VHlwZSB0eXBlOw0KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSAibW91c2Vkb3duIikNCisg
ICAgICAgIHR5cGUgPSBRRXZlbnQ6Ok1vdXNlQnV0dG9uUHJlc3M7DQorICAgIGVsc2UgaWYgKGV2
ZW50LT50eXBlKCkgPT0gIm1vdXNlbW92ZSIpDQorICAgICAgICB0eXBlID0gUUV2ZW50OjpNb3Vz
ZU1vdmU7DQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gIm1vdXNldXAiKQ0KKyAgICAg
ICAgdHlwZSA9IFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlOw0KKyAgICBlbHNlDQorICAgICAg
ICByZXR1cm47DQorICAgIFFQb2ludCBwb3NpdGlvbihldmVudC0+b2Zmc2V0WCgpLCBldmVudC0+
b2Zmc2V0WSgpKTsNCisgICAgUXQ6Ok1vdXNlQnV0dG9uIGJ1dHRvbjsNCisgICAgc3dpdGNoIChl
dmVudC0+d2hpY2goKSkgew0KKyAgICBjYXNlIDE6DQorICAgICAgICBidXR0b24gPSBRdDo6TGVm
dEJ1dHRvbjsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIDI6DQorICAgICAgICBidXR0b24g
PSBRdDo6TWlkQnV0dG9uOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgMzoNCisgICAgICAg
IGJ1dHRvbiA9IFF0OjpSaWdodEJ1dHRvbjsNCisgICAgICAgIGJyZWFrOw0KKyAgICBkZWZhdWx0
Og0KKyAgICAgICAgYnV0dG9uID0gUXQ6Ok5vQnV0dG9uOw0KKyAgICB9DQorICAgIFF0OjpLZXli
b2FyZE1vZGlmaWVycyBtb2RpZmllcnMgPSAwOw0KKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkN
CisgICAgICAgIG1vZGlmaWVycyB8PSBRdDo6Q29udHJvbE1vZGlmaWVyOw0KKyAgICBpZiAoZXZl
bnQtPmFsdEtleSgpKQ0KKyAgICAgICAgbW9kaWZpZXJzIHw9IFF0OjpBbHRNb2RpZmllcjsNCisg
ICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQ0KKyAgICAgICAgbW9kaWZpZXJzIHw9IFF0OjpTaGlm
dE1vZGlmaWVyOw0KKyAgICBpZiAoZXZlbnQtPm1ldGFLZXkoKSkNCisgICAgICAgIG1vZGlmaWVy
cyB8PSBRdDo6TWV0YU1vZGlmaWVyOw0KKyAgICBRTW91c2VFdmVudCBtb3VzZUV2ZW50KHR5cGUs
IHBvc2l0aW9uLCBidXR0b24sIGJ1dHRvbiwgbW9kaWZpZXJzKTsgDQorICAgIE5QUEV2ZW50TW91
c2UgZXZNb3VzZTsNCisgICAgZXZNb3VzZS5tb3VzZUV2ZW50ID0gJm1vdXNlRXZlbnQ7DQorICAg
IE5QUEV2ZW50IGV2Ow0KKyAgICBldi50eXBlID0gTnBwRXZlbnRNb3VzZTsNCisgICAgZXYuZGF0
YSA9ICZldk1vdXNlOw0KKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7
DQorICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsNCisgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsNCisgICAg
ICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7DQorICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2KTsNCisgICAgICAgIHNldENhbGxpbmdQbHVnaW4o
ZmFsc2UpOw0KKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7DQor
ICAgIH0NCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFy
ZW50KQ0KK3sNCisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsNCisgICAgaWYgKHBhcmVu
dCkNCisgICAgICAgIGluaXQoKTsNCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRv
d1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkNCit7DQorICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwg
IXBhcmVudCgpKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7DQor
ICAgICAgICBJbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5j
b250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7DQorICAgICAgICBtX25wV2luZG93Lngg
PSBwLngoKTsNCisgICAgICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOw0KKyAgICAgICAgbV9ucFdp
bmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsNCisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0g
cmVjdC5oZWlnaHQoKTsNCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7DQor
ICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7DQorICAgICAgICBtX25wV2luZG93
LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOw0KKyAgICANCisgICAgICAgIGlmIChtX25wV2lu
ZG93LnggPCAwIHx8IG1fbnBXaW5kb3cueSA8IDAgfHwgbV9ucFdpbmRvdy53aWR0aCA8PSAwIHx8
IG1fbnBXaW5kb3cuaGVpZ2h0IDw9IDApDQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICANCisg
ICAgICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7DQorICAgICAg
ICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7DQorICAgICAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOw0KKyAgICAg
ICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7DQorICAgICAgICAgICAgbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7DQorICAgICAg
ICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7DQorICAgICAgICAgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7DQorICAgIA0KKyAgICAgICAgICAgIGlmICghbV9pc1dp
bmRvd2VkKQ0KKyAgICAgICAgICAgICAgICByZXR1cm47DQorICAgIA0KKyAgICAgICAgICAgIEFT
U0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsNCisgICAgICAgIH0NCisgICAgfSBlbHNlIHsN
CisgICAgICAgIC8vIEZJWE1FOiBkb24ndCBjYWxsIE5QUF9zZXRXaW5kb3cgaWYgd2luZG93IHNp
emUgZGlkIG5vdCByZWFsbHkgY2hhbmdlDQorICAgICAgICBtX25wV2luZG93LnggPSAwOw0KKyAg
ICAgICAgbV9ucFdpbmRvdy55ID0gMDsNCisgICAgDQorICAgICAgICBtX25wV2luZG93LndpZHRo
ID0gcmVjdC53aWR0aCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSByZWN0LmhlaWdo
dCgpOw0KKyAgICANCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7DQorICAg
ICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7DQorICAgICAgICBtX25wV2luZG93LmNs
aXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC5ib3R0b20gPSByZWN0LmhlaWdodCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSBt
X3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1XaW5kb3coKTsNCisg
ICAgDQorICAgICAgICBpZiAobV9ucFdpbmRvdy54IDwgMCB8fCBtX25wV2luZG93LnkgPCAwDQor
ICAgICAgICAgICAgfHwgbV9ucFdpbmRvdy53aWR0aCA8PSAwIHx8IG1fbnBXaW5kb3cuaGVpZ2h0
IDw9IDApDQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICANCisgICAgICAgIGlmIChtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7DQorICAgICAgICAgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7DQorICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOw0KKyAgICAgICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7DQorICAgICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdp
bmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7DQorICAgICAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbihmYWxzZSk7DQorICAgICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZp
ZXcoMCk7DQorICAgIA0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK2NvbnN0IGNoYXIqIFBs
dWdpblZpZXc6OnVzZXJBZ2VudFN0YXRpYygpDQoreworICAgICBub3RTdXBwb3J0ZWQoKTsNCit9
DQorDQorTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+
JiBidWZmZXIsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikNCit7CisgICAgIG5vdFN1cHBv
cnRlZCgpOw0KK30NCisNCitOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxl
IHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkNCit7DQorICAgIHN3aXRjaCAodmFyaWFibGUpIHsNCisg
ICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOiB7DQorICAgICAgICAgICAgTlBCb29sKiBy
ZXN1bHQgPSBzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSk7DQorICAgICAgICAgICAgKnJlc3Vs
dCA9IHRydWU7DQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOw0KKyAgICAgICAg
fQ0KKyAgICAgICAgDQorICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7DQorICAgICAgICBp
ZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpDQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVS
SUNfRVJST1I7DQorDQorICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9w
YXJlbnRGcmFtZS0+c2NyaXB0KCktPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7DQorDQorICAgICAg
ICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJl
ZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1l
Lmh0bWw+DQorICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQ0KKyAgICAgICAgICAgIF9O
UE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7DQorDQorICAgICAgICB2b2lkKiog
diA9ICh2b2lkKiopdmFsdWU7DQorICAgICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVjdDsNCisg
ICAgICAgICAgICANCisgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsNCisgICAgfQ0KKw0K
KyAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsNCisgICAgICAgIGlmIChtX2lz
SmF2YVNjcmlwdFBhdXNlZCkNCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsNCisNCisgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOw0KKw0KKyAg
ICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+
aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykp
DQorICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJ
bkVsZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOw0KKw0KKyAgICAgICAgLy8gUmV0
dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTog
PGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPg0K
KyAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkNCisgICAgICAgICAgICBfTlBOX1JldGFp
bk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOw0KKw0KKyAgICAgICAgdm9pZCoqIHYgPSAodm9p
ZCoqKXZhbHVlOw0KKyAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7DQorDQorICAgICAg
ICByZXR1cm4gTlBFUlJfTk9fRVJST1I7DQorICAgIH0gICAgICAgIA0KKyAgICB9DQorICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsNCit9DQorDQorTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1
ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpDQorew0KKyAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsNCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlk
YXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQ0KK3sNCisgICAgaWYgKHBsYXRmb3JtV2lkZ2V0
KCkpIHsNCisgICAgICAgIHBsYXRmb3JtV2lkZ2V0KCktPnVwZGF0ZShyZWN0KTsNCisgICAgICAg
IHJldHVybjsNCisgICAgfQ0KKyAgICANCisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5S
ZWN0KHJlY3QpOw0KK30NCisgICAgDQordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChO
UFJlY3QqIHJlY3QpDQorew0KKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8ICFyZWN0KQ0KKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9w
LCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7DQor
ICAgIG1faW52YWxpZFJlY3RzLmFwcGVuZChyKTsNCisgICAgaWYgKCFtX2ludmFsaWRhdGVUaW1l
ci5pc0FjdGl2ZSgpKQ0KKyAgICAgICAgbV9pbnZhbGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDAu
MDAxKTsNCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9u
IHJlZ2lvbikNCit7DQorICAgIGlmIChtX2lzV2luZG93ZWQpDQorICAgICAgICByZXR1cm47DQor
ICAgIAorICAgIFFSZWdpb24qIHIgPSBzdGF0aWNfY2FzdDxRUmVnaW9uKj4ocmVnaW9uKTsNCisg
ICAgaWYgKCFyKSAKKyAgICAgICAgcmV0dXJuOw0KKyAgICAKKyAgICBRVmVjdG9yPFFSZWN0PiBy
ZWN0cyA9IHItPnJlY3RzKCk7DQorICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcmVjdHMuc2l6ZSgp
OyArK2kpIHsNCisgICAgICAgIGNvbnN0IFFSZWN0JiBxUmVjdCA9IHJlY3RzLmF0KGkpOw0KKyAg
ICAgICAgSW50UmVjdCByKHFSZWN0KTsNCisgICAgICAgIG1faW52YWxpZFJlY3RzLmFwcGVuZChy
KTsNCisgICAgICAgIGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3RpdmUoKSkNCisgICAgICAg
ICAgICBtX2ludmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4wMDEpOw0KKyAgICAgICAgfQ0K
K30NCisNCit2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkNCit7DQorICAgIGlmIChtX2lz
V2luZG93ZWQpDQorICAgICAgICByZXR1cm47DQorICAgICAgICANCisgICAgUVJlY3QgcXJlY3Qg
PSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1XaW5kb3coKS0+
cmVjdCgpOw0KKyAgICBJbnRSZWN0IHIocXJlY3QueCgpLCBxcmVjdC55KCksIHFyZWN0LndpZHRo
KCksIHFyZWN0LmhlaWdodCgpKTsNCisgICAgbV9pbnZhbGlkUmVjdHMuYXBwZW5kKHIpOw0KKyAg
ICBpZiAoIW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0aXZlKCkpDQorICAgICAgICBtX2ludmFsaWRh
dGVUaW1lci5zdGFydE9uZVNob3QoMC4wMDEpOw0KK30NCisNCitQbHVnaW5WaWV3Ojp+UGx1Z2lu
VmlldygpDQorew0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OmluaXQoKQ0KK3sNCisgICAgaWYg
KG1faGF2ZUluaXRpYWxpemVkKSANCisgICAgICAgIHJldHVybjsNCisgICAgDQorICAgIG1faGF2
ZUluaXRpYWxpemVkID0gdHJ1ZTsNCisgICAgaWYgKCFtX3BsdWdpbikgew0KKyAgICAgIEFTU0VS
VChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsNCisgICAgICByZXR1
cm47DQorICAgIH0NCisNCisgICAgaWYgKCFtX3BsdWdpbi0+bG9hZCgpKSB7DQorICAgICAgbV9w
bHVnaW4gPSAwOw0KKyAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdp
bjsNCisgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgaWYgKCFzdGFydCgpKSB7DQorICAg
ICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47DQorICAgICAgICBy
ZXR1cm47DQorICAgIH0NCisgICAgaWYgKG1faXNXaW5kb3dlZCkgew0KKyAgICAgICAgc2V0UGxh
dGZvcm1XaWRnZXQobmV3IFBsdWdpbkNvbnRhaW5lclN5bWJpYW4odGhpcywgbV9wYXJlbnRGcmFt
ZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCkpKTsNCisgICAgICAgIHNo
b3coKTsNCisNCisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsN
CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKXBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCk7DQorDQorICAgICAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2lu
UXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKQ0KKyAgICAgICAgICAgIHNldE5QV2luZG93
UmVjdChmcmFtZVJlY3QoKSk7DQorICAgIH0gZWxzZSB7DQorICAgICAgICBzZXRQbGF0Zm9ybVdp
ZGdldCgwKTsNCisgICAgICAgIHNob3coKTsNCisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5Q
V2luZG93VHlwZURyYXdhYmxlOw0KKyAgICAgICAgaWYgKCEobV9wbHVnaW4tPnF1aXJrcygpLmNv
bnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKSkNCisgICAgICAgICAg
ICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkpOw0KKyAgICB9DQorICAgIG1fc3RhdHVzID0g
UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5Ow0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6
OnNldFBhcmVudFZpc2libGUoYm9vbCB2aXNpYmxlKQ0KK3sNCisgICAgaWYgKGlzUGFyZW50Vmlz
aWJsZSgpID09IHZpc2libGUpDQorICAgICAgICByZXR1cm47DQorDQorICAgIFdpZGdldDo6c2V0
UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsNCisNCisgICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBw
bGF0Zm9ybVBsdWdpbldpZGdldCgpKQ0KKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+
c2V0VmlzaWJsZSh2aXNpYmxlKTsNCisNCit9DQorDQorDQorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQ0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL25waW50ZXJmYWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vbnBpbnRlcmZhY2UuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL25waW50ZXJmYWNlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzEgQEAKKy8qDQorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykNCisNCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYw0K
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXINCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUNCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuDQorDQorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8NCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwNCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuDQorKi8NCisjaWZu
ZGVmIG5waW50ZXJmYWNlX0gNCisjZGVmaW5lIG5waW50ZXJmYWNlX0gNCisKKyNpbmNsdWRlICJu
cGZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgPFF0UGx1Z2luPg0KK2NsYXNzIE5QSW50ZXJmYWNlIHsN
CitwdWJsaWM6DQorICAgIHZpcnR1YWwgTlBFcnJvciBOUF9Jbml0aWFsaXplKE5QTmV0c2NhcGVG
dW5jcyAqYU5QTkZ1bmNzLCBOUFBsdWdpbkZ1bmNzICphTlBQRnVuY3MpID0gMDsNCisgICAgdmly
dHVhbCB2b2lkIE5QX1NodXRkb3duKCkgPSAwOw0KKyAgICB2aXJ0dWFsIGNoYXIqIE5QX0dldE1J
TUVEZXNjcmlwdGlvbigpID0gMDsNCit9Ow0KKw0KK2VudW0gTnBwRXZlbnRUeXBlIHsNCisgICAg
TnBwRXZlbnRLZXksDQorICAgIE5wcEV2ZW50TW91c2UsDQorICAgIE5wcEV2ZW50RHJhdywNCisg
ICAgTnBwRXZlbnRWaXNpYmlsaXR5LA0KKyAgICBOcHBDdXN0b21WYWx1ZQ0KK307DQorDQordHlw
ZWRlZiBzdHJ1Y3QgX05QUEV2ZW50IHsNCisgICAgTnBwRXZlbnRUeXBlIHR5cGU7DQorICAgIHZv
aWQqIGRhdGE7DQorfSBOUFBFdmVudDsNCisNCit0eXBlZGVmIHN0cnVjdCBfTlBQRXZlbnRLZXkg
ew0KKyAgICB2b2lkKiBrZXlFdmVudDsgLy8gUUtleUV2ZW50DQorICAgIHZvaWQqIHJlc2VydmVk
Ow0KK30gTlBQRXZlbnRLZXk7DQorDQordHlwZWRlZiBzdHJ1Y3QgX05QUEV2ZW50TW91c2Ugew0K
KyAgICB2b2lkKiBtb3VzZUV2ZW50OyAvLyBRTW91c2VFdmVudA0KKyAgICB2b2lkKiByZXNlcnZl
ZDsNCit9IE5QUEV2ZW50TW91c2U7DQorDQordHlwZWRlZiBzdHJ1Y3QgX05QUEV2ZW50VmlzaWJp
bGl0eSB7DSAgICBib29sIHZpc2libGU7DQorICAgIHZvaWQqIHJlc2VydmVkOw0KK30gTlBQRXZl
bnRWaXNpYmlsaXR5Ow0KKw0KK3R5cGVkZWYgc3RydWN0IF9OUFBFdmVudERyYXcgew0KKyAgICB2
b2lkKiBwYWludGVyOyAvLyBRUGFpbnRlcg0KKyAgICB2b2lkKiByZXNlcnZlZDsNCit9IE5QUEV2
ZW50RHJhdzsNCisNCisNCisvLw0KKw0KKw0KK1FUX0JFR0lOX05BTUVTUEFDRQ0KK1FfREVDTEFS
RV9JTlRFUkZBQ0UoTlBJbnRlcmZhY2UsICJjb20ubm9raWEucXRzNjAud2VicGx1Z2luLzEuMCIp
Ow0KK1FUX0VORF9OQU1FU1BBQ0UNCisNCisjZW5kaWYgLy8gbnBpbnRlcmZhY2VfSA0K
</data>
<flag name="review"
          id="20823"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40001</attachid>
            <date>2009-09-23 09:51:41 -0700</date>
            <delta_ts>2009-09-24 05:12:25 -0700</delta_ts>
            <desc>Patch with review comments incorporated</desc>
            <filename>S60_plugin_webkit.patch</filename>
            <type>text/plain</type>
            <size>38053</size>
            <attacher name="Rohini Ananth">rohini.ananth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODY3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDktMDktMjMgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorIAorICAgICAgICAgUmV2aWV3ZWQgYnkgCisgCisgICAgICAgICBFbmFibGluZyBO
UEFQSSBwbHVnaW4gc3VwcG9ydCBvbiBRdCBXZWJraXQgZm9yIFM2MCBwbGF0Zm9ybQorICAgICAg
ICAgQWxzbyBpbXBsZW1lbnRlZCBieSBNYWhlc2ggS3Vsa2Fybmk8bWFoZXNoLmt1bGthcm5pQG5v
a2lhLmNvbT4gYW5kIAorICAgICAgICAgUm9oaW5pIEFuYW50aCA8cm9oaW5pLmFuYW50aEBub2tp
YS5jb20+CisgICAgICAgICAKKyAgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICBFbmFi
bGluZyBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSBmb3IgUzYwIGFuZCBhZGRlZCBTNjAgc3Bl
Y2lmaWMgbmV3IHBsdWdpbiBmaWxlcyB0byBiZSAKKyAgICAgICAgIGNvbXBpbGVkIHVuZGVyIHN5
bWJpYW46IG1hY3JvCisgICAgICAgICAqIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5oOgorICAgICAg
ICAgQWRkZWQgUzYwIHNwZWNpZmljIHBsdWdpbiBpbnRlcmZhY2UgYW5kIHBsdWdpbiBsb2FkZXIg
dmFyaWFibGVzCisgICAgICAgICAqIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHA6CisgICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6dW5sb2FkKTogQWRkZWQgIVBMQVRGT1JNKFNZTUJJ
QU4pIG1hY3JvLiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHRvIAorICAgICAgICAgYmUgdXNlZCBv
bmx5IGZvciBub24tc3ltYmlhbiBwbGF0Zm9ybQorICAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRh
dGFiYXNlLmNwcDoKKyAgICAgICAgIE1hY3JvICFTWU1CSUFOIGNoZWNraW5nCisgICAgICAgICAK
KyAgICAgICAgIEFkZGVkIGZvbGRlciAnc3ltYmlhbicgd2hpY2ggY29udGFpbnMgaW1wbGVtZW50
YXRpb24gZmlsZXMgZm9yIFM2MCBwbGF0Zm9ybS1zcGVjaWZpYyBOUEFQSSAKKyAgICAgICAgIHBs
dWdpbiBmdW5jdGlvbmFsaXR5LCB1bmRlciAvcGx1Z2lucyBmb2xkZXIKKyAgICAgICAgICogcGx1
Z2lucy9zeW1iaWFuCisgICAgICAgICAqIHBsdWdpbnMvc3ltYmlhbi9ucGludGVyZmFjZS5oOgor
ICAgICAgICAgUGx1Z2luIEludGVyZmFjZSB0byBiZSBpbXBsZW1lbnRlZCBieSBTNjAgTlBBUEkg
cGx1Z2lucyAKKyAgICAgICAgICogcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJp
YW4uaDoKKyAgICAgICAgICogcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4u
Y3BwOgorICAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luRGF0YWJhc2VTeW1iaWFuLmNw
cDoKKyAgICAgICAgICogcGx1Z2lucy9zeW1iaWFuL1BsdWdpblZpZXdTeW1iaWFuLmNwcDoKKyAg
ICAgICAgICogcGx1Z2lucy9zeW1iaWFuL1BsdWdpblBhY2thZ2VTeW1iaWFuLmNwcDoKKwogMjAw
OS0wOS0yMyAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgIDx6ZWNrZUBzZWxmaXNoLm9yZz4K
IAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNp
b24gNDg2NzgpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEs
NyArMTYxLDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NJTkdMRV9USFJFQURFRAogCiAj
IE5lc2NhcGUgcGx1Z2lucyBzdXBwb3J0IChOUEFQSSkKICFjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfTkVUU0NBUEVfUExVR0lOX0FQST0uKSB7Ci0gICAgdW5peHx3aW4zMi0qOiFlbWJlZGRlZDoh
d2luY2UqOiFzeW1iaWFuIHsKKyAgICB1bml4fHdpbjMyLSo6IWVtYmVkZGVkOiF3aW5jZSo6IHsK
ICAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0xCiAgICAgfSBl
bHNlIHsKICAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0wCkBA
IC0yNDMwLDYgKzI0MzAsMjcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX05FVFNDQVBFX1BM
VUdJTgogCiAgICAgU09VUkNFUyArPSBwbHVnaW5zL25wYXBpLmNwcAogCisgICAgc3ltYmlhbiB7
CisgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luUGFj
a2FnZVN5bWJpYW4uY3BwIFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkRhdGFiYXNl
U3ltYmlhbi5jcHAgXAorICAgICAgICBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luVmlld1N5bWJpYW4u
Y3BwIFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uY3Bw
CisgICAgICAgIAorICAgICAgICBIRUFERVJTICs9IFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFu
L1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uaCBcCisgICAgICAgIHBsdWdpbnMvc3ltYmlhbi9ucGlu
dGVyZmFjZS5oCisgICAgICAgIAorICAgICAgICBMSUJTICs9IC1sZWZzcnYKKyAgICAgICAgCisg
ICAgICAgIEJMRF9JTkZfUlVMRVMucHJqX2V4cG9ydHMgKz0gXAorICAgICAgICAgICJwbHVnaW5z
L3N5bWJpYW4vbnBpbnRlcmZhY2UuaCAgICAkJE1XX0xBWUVSX0RPTUFJTl9FWFBPUlRfUEFUSChj
d3J0L25waW50ZXJmYWNlLmgpIiBcCisgICAgICAgICAgInBsdWdpbnMvbnBmdW5jdGlvbnMuaCAg
ICAgICAgICAgICQkTVdfTEFZRVJfRE9NQUlOX0VYUE9SVF9QQVRIKGN3cnQvbnBmdW5jdGlvbnMu
aCkiIFwKKyAgICAgICAgICAiYnJpZGdlL25wYXBpLmggICAgICAgICAgICAgICAgICAgJCRNV19M
QVlFUl9ET01BSU5fRVhQT1JUX1BBVEgoY3dydC9ucGFwaS5oKSIgXAorICAgICAgICAgICJicmlk
Z2UvbnBydW50aW1lLmggICAgICAgICAgICAgICAkJE1XX0xBWUVSX0RPTUFJTl9FWFBPUlRfUEFU
SChjd3J0L25wcnVudGltZS5oKSIKKworICAgIH0gZWxzZSB7CisKICAgICB1bml4IHsKICAgICAg
ICAgREVGSU5FUyArPSBFTkFCTEVfUExVR0lOX1BBQ0tBR0VfU0lNUExFX0hBU0g9MQogCkBAIC0y
NDcwLDYgKzI0OTEsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTkVUU0NBUEVfUExVR0lO
CiAgICAgICAgICAgICAtbHNobHdhcGkgXAogICAgICAgICAgICAgLWx1c2VyMzIgXAogICAgICAg
ICAgICAgLWx2ZXJzaW9uCisgICAgICAgIH0KICAgICB9CiAKIH0gZWxzZSB7CkluZGV4OiBXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDQ4Njc4KQorKysgV2ViQ29yZS9wbHVn
aW5zL1BsdWdpbkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBA
IHZvaWQgUGx1Z2luRGF0YWJhc2U6OmNsZWFyKCkKICAgICBtX3ByZWZlcnJlZFBsdWdpbnMuY2xl
YXIoKTsKIH0KIAotI2lmICFQTEFURk9STShXSU5fT1MpIHx8IFBMQVRGT1JNKFdYKQorI2lmICFQ
TEFURk9STShTWU1CSUFOKSAmJiAgKCFQTEFURk9STShXSU5fT1MpIHx8IFBMQVRGT1JNKFdYKSkK
IC8vIEZvciBTYWZhcmkvV2luIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcyBhcmUgaW1wbGVt
ZW50ZWQKIC8vIGluIFBsdWdpbkRhdGFiYXNlV2luLmNwcCwgYnV0IGlmIHdlIGNhbiB1c2UgV2Vi
Q29yZSBjb25zdHJ1Y3RzCiAvLyBmb3IgdGhlIGxvZ2ljIHdlIHNob3VsZCBwZXJoYXBzIG1vdmUg
aXQgaGVyZSB1bmRlciBYUF9XSU4/CkBAIC00MjYsNiArNDI2LDYgQEAgdm9pZCBQbHVnaW5EYXRh
YmFzZTo6Z2V0UGx1Z2luUGF0aHNJbkRpcgogICAgIH0KIH0KIAotI2VuZGlmIC8vICFQTEFURk9S
TShXSU5fT1MpCisjZW5kaWYgLy8gIVBMQVRGT1JNKFdJTl9PUykgIVBMQVRGT1JNKFNZTUJJQU4p
CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHJldmlzaW9uIDQ4Njc4KQor
KysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTMsNiArMTEzLDcgQEAgUGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbgog
ICAgIG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxlbmd0aCgpIC0gbV9m
aWxlTmFtZS5sZW5ndGgoKSAtIDEpOwogfQogCisjaWYgIVBMQVRGT1JNKFNZTUJJQU4pCiB2b2lk
IFBsdWdpblBhY2thZ2U6OnVubG9hZCgpCiB7CiAgICAgaWYgKCFtX2lzTG9hZGVkKQpAQCAtMTI1
LDYgKzEyNiw3IEBAIHZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkKCkKIAogICAgIHVubG9hZFdp
dGhvdXRTaHV0ZG93bigpOwogfQorI2VuZGlmIC8vIVBMQVRGT1JNKFNZTUJJQU4pCiAKIHZvaWQg
UGx1Z2luUGFja2FnZTo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKIHsKQEAgLTE5NSw3ICsxOTcs
NyBAQCB2b2lkIFBsdWdpblBhY2thZ2U6OmRldGVybWluZVF1aXJrcyhjb25zCiB9CiAjZW5kaWYK
IAotI2lmICFQTEFURk9STShXSU5fT1MpCisjaWYgUExBVEZPUk0oU1lNQklBTikgfHwgIVBMQVRG
T1JNKFdJTl9PUykKIHZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZy
b21EZXNjcmlwdGlvbigpCiB7CiAgICAgLy8gSXQncyBhIGJpdCBsYW1lIHRvIGRldGVjdCB0aGUg
cGx1Z2luIHZlcnNpb24gYnkgcGFyc2luZyBpdApJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blBhY2thZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5o
CShyZXZpc2lvbiA0ODY3OCkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDExIEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCisjaWYgUExBVEZPUk0oU1lNQklBTikKK2Ns
YXNzIFFQbHVnaW5Mb2FkZXI7CitjbGFzcyBOUEludGVyZmFjZTsKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9E
ZXNjcmlwdGlvbnNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmlu
Zz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOwpAQCAtNzMsNiArNzgsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUGx1Z2luUGFja2FnZShjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKKworI2lmIFBMQVRGT1JNKFNZ
TUJJQU4pCisgICAgICAgIE5QSW50ZXJmYWNlKiBtX25wSW50ZXJmYWNlOworICAgICAgICBRUGx1
Z2luTG9hZGVyKiBtX3BsdWdpbkxvYWRlcjsKKyNlbmRpZiAvLyBQTEFURk9STShTWU1CSUFOKQog
ICAgICAgICBib29sIGZldGNoSW5mbygpOwogICAgICAgICBib29sIGlzUGx1Z2luQmxhY2tsaXN0
ZWQoKTsKICAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSk7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250YWluZXJTeW1iaWFu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250YWlu
ZXJTeW1iaWFuLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1Bs
dWdpbkNvbnRhaW5lclN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisv
Kg0KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4NCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KKyovDQorDQorI2luY2x1ZGUgImNvbmZpZy5o
Ig0KKyNpbmNsdWRlICJQbHVnaW5Db250YWluZXJTeW1iaWFuLmgiDQorDQorI2luY2x1ZGUgIkZv
Y3VzQ29udHJvbGxlci5oIg0KKyNpbmNsdWRlICJGcmFtZS5oIg0KKyNpbmNsdWRlICJGcmFtZVZp
ZXcuaCINCisjaW5jbHVkZSAiUGFnZS5oIg0KKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZl
bnQuaCINCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIg0KKw0KKyNpbmNsdWRlIDxRQXBwbGljYXRp
b24+DQorI2luY2x1ZGUgPFFXaWRnZXQ+DQorDQordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7DQor
DQorUGx1Z2luQ29udGFpbmVyU3ltYmlhbjo6UGx1Z2luQ29udGFpbmVyU3ltYmlhbihQbHVnaW5W
aWV3KiB2aWV3LCBRV2lkZ2V0KiBwYXJlbnQpDQorICAgIDogbV9wYXJlbnQocGFyZW50KQ0KKyAg
ICAsIG1fcGx1Z2luVmlldyh2aWV3KQ0KKyAgICAsIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdl
KGZhbHNlKQ0KK3sNCisgICAgc2V0UGFyZW50KG1fcGFyZW50KTsNCit9DQorDQorUGx1Z2luQ29u
dGFpbmVyU3ltYmlhbjo6flBsdWdpbkNvbnRhaW5lclN5bWJpYW4oKQ0KK3sNCit9DQorDQordm9p
ZCBQbHVnaW5Db250YWluZXJTeW1iaWFuOjpyZXF1ZXN0R2VvbWV0cnkoY29uc3QgUVJlY3QmIHJl
Y3QsIGNvbnN0IFFSZWdpb24mIGNsaXApDQorew0KKyAgICBpZiAobV93aW5kb3dSZWN0ICE9IHJl
Y3QgfHwgbV9jbGlwUmVnaW9uICE9IGNsaXApIHsNCisgICAgICAgIG1fd2luZG93UmVjdCA9IHJl
Y3Q7DQorICAgICAgICBtX2NsaXBSZWdpb24gPSBjbGlwOw0KKyAgICAgICAgbV9oYXNQZW5kaW5n
R2VvbWV0cnlDaGFuZ2UgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgUGx1Z2luQ29udGFp
bmVyU3ltYmlhbjo6YWRqdXN0R2VvbWV0cnkoKQ0KK3sNCisgICAgaWYgKG1faGFzUGVuZGluZ0dl
b21ldHJ5Q2hhbmdlKSB7DQorICAgICAgICBzZXRHZW9tZXRyeShtX3dpbmRvd1JlY3QpOw0KKyAg
ICAgICAgc2V0TWFzayhtX2NsaXBSZWdpb24pOw0KKyAgICAgICAgbV9oYXNQZW5kaW5nR2VvbWV0
cnlDaGFuZ2UgPSBmYWxzZTsNCisgICAgfQ0KK30NCisNCit2b2lkIFBsdWdpbkNvbnRhaW5lclN5
bWJpYW46OmZvY3VzSW5FdmVudChRRm9jdXNFdmVudCogZXZlbnQpDQorew0KKyAgICBpZiAoUGFn
ZSogcGFnZSA9IG1fcGx1Z2luVmlldy0+cGFyZW50RnJhbWUoKS0+cGFnZSgpKQ0KKyAgICAgICAg
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZSh0cnVlKTsNCisNCisgICAgbV9wbHVn
aW5WaWV3LT5mb2N1c1BsdWdpbkVsZW1lbnQoKTsNCit9DQorDQordm9pZCBQbHVnaW5Db250YWlu
ZXJTeW1iaWFuOjpmb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50KikNCit7DQorICAgIGlmIChQYWdl
KiBwYWdlID0gbV9wbHVnaW5WaWV3LT5wYXJlbnRGcmFtZSgpLT5wYWdlKCkpDQorICAgICAgICBw
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKGZhbHNlKTsNCit9DQpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFpbmVyU3ltYmlhbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJp
YW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoNCisgICAgQ29weXJpZ2h0IChD
KSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQ0KKw0K
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yDQorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorDQorICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LA0KKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZg0KKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bw0KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLA0KKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4NCisqLw0KKw0KKyNpZm5kZWYgUGx1Z2luQ29udGFpbmVyUXRfaA0KKyNkZWZpbmUg
UGx1Z2luQ29udGFpbmVyUXRfaA0KKw0KKyNpbmNsdWRlIDxRV2lkZ2V0Pg0KKw0KK25hbWVzcGFj
ZSBXZWJDb3JlIHsNCisNCisgICAgY2xhc3MgUGx1Z2luVmlldzsNCisNCisgICAgY2xhc3MgUGx1
Z2luQ29udGFpbmVyU3ltYmlhbiA6IHB1YmxpYyBRV2lkZ2V0IHsNCisgICAgICAgIFFfT0JKRUNU
DQorICAgIHB1YmxpYzoNCisgICAgICAgIFBsdWdpbkNvbnRhaW5lclN5bWJpYW4oUGx1Z2luVmll
dyosIFFXaWRnZXQqIHBhcmVudCk7DQorICAgICAgICB+UGx1Z2luQ29udGFpbmVyU3ltYmlhbigp
Ow0KKw0KKyAgICAgICAgdm9pZCByZXF1ZXN0R2VvbWV0cnkoY29uc3QgUVJlY3QmLCBjb25zdCBR
UmVnaW9uJiBjbGlwID0gUVJlZ2lvbigpKTsNCisgICAgICAgIHZvaWQgYWRqdXN0R2VvbWV0cnko
KTsNCisNCisgICAgcHJvdGVjdGVkOg0KKyAgICAgICAgdmlydHVhbCB2b2lkIGZvY3VzSW5FdmVu
dChRRm9jdXNFdmVudCopOw0KKyAgICAgICAgdmlydHVhbCB2b2lkIGZvY3VzT3V0RXZlbnQoUUZv
Y3VzRXZlbnQqKTsNCisgICAgcHJpdmF0ZToNCisgICAgICAgIFBsdWdpblZpZXcqIG1fcGx1Z2lu
VmlldzsNCisgICAgICAgIFFXaWRnZXQqIG1fcGFyZW50Ow0KKyAgICAgICAgUVJlY3QgbV93aW5k
b3dSZWN0Ow0KKyAgICAgICAgUVJlZ2lvbiBtX2NsaXBSZWdpb247DQorICAgICAgICBib29sIG1f
aGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlOw0KKyAgICB9Ow0KK30NCisNCisjZW5kaWYgLy8gUGx1
Z2luQ29udGFpbmVyUXRfaA0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkRh
dGFiYXNlU3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4v
UGx1Z2luRGF0YWJhc2VTeW1iaWFuLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lu
cy9zeW1iaWFuL1BsdWdpbkRhdGFiYXNlU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzkgQEAKKy8qDQorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykNCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYw0KKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXINCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLg0KKw0KKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUNCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
DQorDQorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8NCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwNCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuDQorKi8NCisjaW5jbHVkZSAi
Y29uZmlnLmgiDQorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiDQorDQorI2luY2x1ZGUgPFFG
aWxlSW5mbz4NCisjaW5jbHVkZSA8ZjMyZmlsZS5oPg0KKw0KK3N0YXRpYyBjb25zdCBjaGFyIFFU
UExVR0lOX0ZJTFRFUltdID0gIioucXRwbHVnaW4iOw0KK3N0YXRpYyBjb25zdCBjaGFyIFFUX1BM
VUdJTl9GT0xERVJbXSA9ICI6XFxyZXNvdXJjZVxccXRcXHBsdWdpbnNcXG5wcXRwbHVnaW5zXFwi
Ow0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRh
YmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkNCit7DQorICAgIFZlY3RvcjxTdHJpbmc+
IGRpcmVjdG9yaWVzOw0KKyAgICAvL2ZpbmQgdGhlIGluc3RhbGxhdGlvbiBkcml2ZQ0KKyAgICBU
RHJpdmVMaXN0IGRyaXZlbGlzdDsNCisgICAgVENoYXIgZHJpdmVMZXR0ZXI7DQorICAgIFJGcyBm
c1Nlc3Npb247CisgICAgDQorICAgIGlmIChmc1Nlc3Npb24uQ29ubmVjdCgpID09IEtFcnJOb25l
ICYmIGZzU2Vzc2lvbi5Ecml2ZUxpc3QoZHJpdmVsaXN0KSA9PSBLRXJyTm9uZSkgew0KKyAgICAg
ICAgZm9yIChUSW50IGRyaXZlTnVtYmVyID0gRURyaXZlQTsgZHJpdmVOdW1iZXIgPD0gRURyaXZl
WjsgZHJpdmVOdW1iZXIrKykgew0KKyAgICAgICAgICAgIGlmIChkcml2ZWxpc3RbZHJpdmVOdW1i
ZXJdICYmIGZzU2Vzc2lvbi5Ecml2ZVRvQ2hhcihkcml2ZU51bWJlciwgZHJpdmVMZXR0ZXIpID09
IEtFcnJOb25lKSB7DQorICAgICAgICAgICAgICAgIFFTdHJpbmcgZHJpdmVTdHJpbmdWYWx1ZShR
Q2hhcigodWludClkcml2ZUxldHRlci5HZXRVcHBlckNhc2UoKSkpOw0KKyAgICAgICAgICAgICAg
ICBRU3RyaW5nIHN0dWJEaXJQYXRoOw0KKyAgICAgICAgICAgICAgICBzdHViRGlyUGF0aC5hcHBl
bmQoZHJpdmVTdHJpbmdWYWx1ZSk7DQorICAgICAgICAgICAgICAgIHN0dWJEaXJQYXRoLmFwcGVu
ZChRVF9QTFVHSU5fRk9MREVSKTsNCisgICAgICAgICAgICAgICAgaWYgKFFGaWxlSW5mbyhzdHVi
RGlyUGF0aCkuZXhpc3RzKCkpDQorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcmllcy5hcHBl
bmQoc3R1YkRpclBhdGgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0K
KyAgICBmc1Nlc3Npb24uQ2xvc2UoKTsNCisgICAgcmV0dXJuIGRpcmVjdG9yaWVzOw0KK30NCisN
Citib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBT
dHJpbmcmIHBhdGgpDQorew0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQordm9pZCBQbHVnaW5E
YXRhYmFzZTo6Z2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKEhhc2hTZXQ8U3RyaW5nPiYgcGF0
aHMpIGNvbnN0DQorew0KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vu
c2l0aXZlIHNldC4NCisgICAgSGFzaFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsNCisNCisg
ICAgU3RyaW5nIGZpbGVOYW1lRmlsdGVyKFFUUExVR0lOX0ZJTFRFUik7DQorDQorICAgIFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkaXJzRW5kID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5l
bmQoKTsNCisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZEl0ID0gbV9w
bHVnaW5EaXJlY3Rvcmllcy5iZWdpbigpOyBkSXQgIT0gZGlyc0VuZDsgKytkSXQpIHsNCisgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IHBsdWdpblBhdGhzID0gbGlzdERpcmVjdG9yeSgqZEl0LCBmaWxl
TmFtZUZpbHRlcik7DQorICAgICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcGx1
Z2luc0VuZCA9IHBsdWdpblBhdGhzLmVuZCgpOw0KKyAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgcEl0ID0gcGx1Z2luUGF0aHMuYmVnaW4oKTsgcEl0ICE9IHBsdWdp
bnNFbmQ7ICsrcEl0KSB7DQorICAgICAgICAgICAgaWYgKCFmaWxlRXhpc3RzKCpwSXQpKQ0KKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgICAgICBwYXRocy5hZGQoKnBJdCk7DQor
ICAgICAgICB9DQorICAgIH0NCit9DQorDQorfQ0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9zeW1i
aWFuL1BsdWdpblBhY2thZ2VTeW1iaWFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdp
bnMvc3ltYmlhbi9QbHVnaW5QYWNrYWdlU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5QYWNrYWdlU3ltYmlhbi5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjAxIEBACisvKg0KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpDQorDQorICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMNCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyDQorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VDQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsDQorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KKyovDQor
I2luY2x1ZGUgImNvbmZpZy5oIg0KKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiDQorDQorI2lu
Y2x1ZGUgIkNTdHJpbmcuaCINCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1
ZGUgIm5waW50ZXJmYWNlLmgiDQorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVk
ZSAiUGx1Z2luRGF0YWJhc2UuaCINCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCINCisjaW5jbHVk
ZSA8UVBsdWdpbkxvYWRlcj4NCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQorYm9vbCBQbHVn
aW5QYWNrYWdlOjpmZXRjaEluZm8oKQ0KK3sNCisgICAgaWYgKCFsb2FkKCkpDQorICAgICAgICBy
ZXR1cm4gZmFsc2U7DQorDQorICAgIGNoYXIqIGJ1ZiA9IDA7DQorICAgIE5QRXJyb3IgZXJyID0g
bV9wbHVnaW5GdW5jcy5nZXR2YWx1ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgKHZvaWQgKikm
YnVmKTsNCisgICAgbV9uYW1lID0gYnVmOw0KKyAgICBlcnIgPSBtX3BsdWdpbkZ1bmNzLmdldHZh
bHVlKDAsIE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZywgKHZvaWQgKikmYnVmKTsNCisgICAg
bV9kZXNjcmlwdGlvbiA9IGJ1ZjsNCisNCisgICAgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21E
ZXNjcmlwdGlvbigpOw0KKw0KKyAgICBTdHJpbmcgcyA9IG1fbnBJbnRlcmZhY2UtPk5QX0dldE1J
TUVEZXNjcmlwdGlvbigpOw0KKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsNCisgICAgcy5zcGxp
dChVQ2hhcignfCcpLCBmYWxzZSwgdHlwZXMpOyAgLy8gPE1JTUUxPjs8ZXh0MSxleHQyLGV4dDMs
Li4uPjs8RGVzY3JpcHRpb24+fDxNSU1FMj58PE1JTUUzPnwuLi4NCisNCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7ICsraSkgew0KKyAgICAgICAgVmVjdG9yPFN0cmluZz4g
bWltZTsNCisgICAgICAgIHR5cGVzW2ldLnNwbGl0KFVDaGFyKCc7JyksIHRydWUsIG1pbWUpOyAg
Ly8gPE1JTUUxPjs8ZXh0MSxleHQyLGV4dDMsLi4uPjs8RGVzY3JpcHRpb24+DQorICAgICAgICBp
ZiAobWltZS5zaXplKCkgPiAwKSB7DQorICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0czsN
CisgICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAxKQ0KKyAgICAgICAgICAgICAgICBtaW1l
WzFdLnNwbGl0KFVDaGFyKCcsJyksIGZhbHNlLCBleHRzKTsgLy8gPGV4dDEsZXh0MixleHQzLC4u
Lj4NCisgICAgICAgICAgICANCisgICAgICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1p
bWVbMF0sIGV4dHMpOyAvLyA8TUlNRT4sPGV4dDEsZXh0MixleHQzPg0KKyAgICAgICAgICAgIGlm
IChtaW1lLnNpemUoKSA+IDIpDQorICAgICAgICAgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25z
LmFkZChtaW1lWzBdLCBtaW1lWzJdKTsgLy8gPE1JTUU+LDxEZXNjcmlwdGlvbj4NCisgICAgICAg
IH0NCisgICAgfQ0KKyAgICB1bmxvYWQoKTsNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jv
b2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpDQorew0KKyAgICBpZiAobV9pc0xvYWRlZCkgew0KKyAg
ICAgICAgbV9sb2FkQ291bnQrKzsNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQor
ICAgIG1fcGx1Z2luTG9hZGVyID0gbmV3IFFQbHVnaW5Mb2FkZXIobV9wYXRoKTsNCisgICAgaWYg
KCFtX3BsdWdpbkxvYWRlci0+bG9hZCgpKSB7DQorICAgICAgICBkZWxldGUgbV9wbHVnaW5Mb2Fk
ZXI7DQorICAgICAgICBtX3BsdWdpbkxvYWRlciA9IDA7DQorICAgICAgICByZXR1cm4gZmFsc2U7
DQorICAgIH0NCisNCisgICAgUU9iamVjdCogcGx1Z2luID0gbV9wbHVnaW5Mb2FkZXItPmluc3Rh
bmNlKCk7DQorICAgIGlmICghcGx1Z2luKSB7DQorICAgICAgICBtX3BsdWdpbkxvYWRlci0+dW5s
b2FkKCk7DQorICAgICAgICBkZWxldGUgbV9wbHVnaW5Mb2FkZXI7DQorICAgICAgICBtX3BsdWdp
bkxvYWRlciA9IDA7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgLy8g
UGx1Z2luIGluc3RhbmNlIGNyZWF0ZWQNCisgICAgLy8gQ2FzdCBwbHVnaW4gdG8gTlBJbnRlcmZh
Y2UsDQorICAgIG1fbnBJbnRlcmZhY2UgPSBxb2JqZWN0X2Nhc3Q8TlBJbnRlcmZhY2UgKj4ocGx1
Z2luKTsNCisgICAgaWYgKCFtX25wSW50ZXJmYWNlKSB7DQorICAgICAgICBtX3BsdWdpbkxvYWRl
ci0+dW5sb2FkKCk7DQorICAgICAgICBkZWxldGUgbV9wbHVnaW5Mb2FkZXI7DQorICAgICAgICBt
X3BsdWdpbkxvYWRlciA9IDA7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisg
ICAgbV9pc0xvYWRlZCA9IHRydWU7DQorICAgIA0KKyAgICBOUEVycm9yIG5wRXJyOw0KKyAgICBt
ZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7DQorICAgIG1f
cGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsNCisgICAgbV9icm93c2Vy
RnVuY3Muc2l6ZSA9IHNpemVvZihtX2Jyb3dzZXJGdW5jcyk7DQorICAgIG1fYnJvd3NlckZ1bmNz
LnZlcnNpb24gPSBOUF9WRVJTSU9OX01JTk9SOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwg
PSBOUE5fR2V0VVJMOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7
DQorICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOw0KKyAg
ICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFtOw0KKyAgICBtX2Jyb3dz
ZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsNCisgICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0
cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBO
UE5fU3RhdHVzOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy51YWdlbnQgPSBOUE5fVXNlckFnZW50Ow0K
KyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsNCisgICAgbV9icm93
c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVlOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1m
bHVzaCA9IE5QTl9NZW1GbHVzaDsNCisgICAgbV9icm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9
IE5QTl9SZWxvYWRQbHVnaW5zOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBO
UE5fR2V0VVJMTm90aWZ5Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBO
X1Bvc3RVUkxOb3RpZnk7DQorICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZh
bHVlOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsNCisgICAg
bV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJlY3Q7DQorICAg
IG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsN
CisgICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7DQorICAg
IG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2YUVudjsNCisgICAgbV9icm93
c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7DQorICAgIG1fYnJvd3NlckZ1
bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsN
CisgICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBvcHVw
c0VuYWJsZWRTdGF0ZTsNCisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9
IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsNCisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5n
aWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsNCisgICAgbV9icm93c2VyRnVu
Y3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOw0KKyAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVy
Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZp
ZXJJc1N0cmluZzsNCisgICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0gX05Q
Tl9VVEY4RnJvbUlkZW50aWZpZXI7DQorICAgIG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9
IF9OUE5fQ3JlYXRlT2JqZWN0Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBf
TlBOX1JldGFpbk9iamVjdDsNCisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9IF9O
UE5fUmVsZWFzZU9iamVjdDsNCisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlID0gX05QTl9JbnZv
a2U7DQorICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURlZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1
bHQ7DQorICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9FdmFsdWF0ZTsNCisgICAg
bV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5Ow0KKyAgICBtX2Jy
b3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9IF9OUE5fU2V0UHJvcGVydHk7DQorICAgIG1fYnJvd3Nl
ckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsNCisgICAgbV9icm93
c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc01ldGhvZDsNCisgICAgbV9icm93c2VyRnVu
Y3MuaGFzbWV0aG9kID0gX05QTl9IYXNQcm9wZXJ0eTsNCisgICAgbV9icm93c2VyRnVuY3Muc2V0
ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247DQorICAgIG1fYnJvd3NlckZ1bmNzLmVudW1l
cmF0ZSA9IF9OUE5fRW51bWVyYXRlOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5jb25zdHJ1Y3QgPSBf
TlBOX0NvbnN0cnVjdDsNCisNCisgICAgbnBFcnIgPSBtX25wSW50ZXJmYWNlLT5OUF9Jbml0aWFs
aXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOw0KKyAgICBpZiAobnBFcnIgIT0g
TlBFUlJfTk9fRVJST1IpIHsNCisgICAgICAgIG1fcGx1Z2luTG9hZGVyLT51bmxvYWQoKTsNCisg
ICAgICAgIGRlbGV0ZSBtX3BsdWdpbkxvYWRlcjsNCisgICAgICAgIG1fcGx1Z2luTG9hZGVyID0g
MDsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBtX2xvYWRDb3VudCsr
Ow0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQordm9pZCBQbHVnaW5QYWNrYWdlOjp1bmxvYWQo
KQ0KK3sNCisgICAgaWYgKCFtX2lzTG9hZGVkKQ0KKyAgICAgICAgcmV0dXJuOw0KKw0KKyAgICBp
ZiAoLS1tX2xvYWRDb3VudCA+IDApDQorICAgICAgICByZXR1cm47DQorICAgICAgICANCisgICAg
bV9pc0xvYWRlZCA9IGZhbHNlOw0KKyAgICBtX25wSW50ZXJmYWNlLT5OUF9TaHV0ZG93bigpOw0K
Kw0KKyAgICBtX3BsdWdpbkxvYWRlci0+dW5sb2FkKCk7DQorICAgIGRlbGV0ZSBtX3BsdWdpbkxv
YWRlcjsNCisgICAgbV9wbHVnaW5Mb2FkZXIgPSAwOw0KK30NCisNCit1bnNpZ25lZCBQbHVnaW5Q
YWNrYWdlOjpoYXNoKCkgY29uc3QNCit7IA0KKyAgICB1bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7
DQorICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksDQorICAgICAgICBtX2xhc3RNb2RpZmll
ZA0KKyAgICB9Ow0KKw0KKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRl
cnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIDIgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6
ZW9mKFVDaGFyKSk7DQorfQ0KKw0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1
Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYikNCit7DQorICAgIHJldHVybiBh
Lm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uOw0KK30NCisNCitpbnQgUGx1Z2luUGFj
a2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYgY29t
cGFyZVZlcnNpb24pIGNvbnN0DQorew0KKyAgICAvLyByZXR1cm4gLTEsIDAsIG9yIDEgaWYgcGx1
Zy1pbiB2ZXJzaW9uIGlzIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbg0KKyAg
ICAvLyB0aGUgcGFzc2VkIHZlcnNpb24NCisgICAgaWYgKG1fbW9kdWxlVmVyc2lvbiAhPSBjb21w
YXJlVmVyc2lvbikNCisgICAgICAgIHJldHVybiBtX21vZHVsZVZlcnNpb24gPiBjb21wYXJlVmVy
c2lvbiA/IDEgOiAtMTsNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KK30NCkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5WaWV3U3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luVmlld1N5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luVmlld1N5bWJpYW4uY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ2NSBAQAorLyoNCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQ0KKw0KKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljDQorICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcg0KKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
Zg0KKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQ0KKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4NCisNCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bw0KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLA0KKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4NCisq
LworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKworI2luY2x1
ZGUgIkRvY3VtZW50LmgiDQorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiDQorI2luY2x1ZGUg
IkVsZW1lbnQuaCINCisjaW5jbHVkZSAiRnJhbWUuaCINCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVx
dWVzdC5oIg0KKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIg0KKyNpbmNsdWRlICJGcmFtZVRyZWUu
aCINCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiDQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
Ig0KKyNpbmNsdWRlICJIVE1MTmFtZXMuaCINCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQu
aCINCisjaW5jbHVkZSAiSW1hZ2UuaCINCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiDQorI2lu
Y2x1ZGUgIktleWJvYXJkRXZlbnQuaCINCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIg0KKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgiDQorI2luY2x1
ZGUgIm5waW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiUGFnZS5oIg0KKyNpbmNsdWRlICJQbGF0Zm9y
bUtleWJvYXJkRXZlbnQuaCINCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiDQorI2lu
Y2x1ZGUgIlBsdWdpbkNvbnRhaW5lclN5bWJpYW4uaCINCisjaW5jbHVkZSAiUGx1Z2luRGVidWcu
aCINCisjaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2UuaCINCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCINCisjaW5jbHVkZSAiU2Ny
aXB0Q29udHJvbGxlci5oIg0KKyNpbmNsdWRlICJTZXR0aW5ncy5oIg0KKyNpbmNsdWRlICJucHJ1
bnRpbWVfaW1wbC5oIg0KKyNpbmNsdWRlICJydW50aW1lLmgiDQorI2luY2x1ZGUgInJ1bnRpbWVf
cm9vdC5oIg0KKyNpbmNsdWRlIDxRS2V5RXZlbnQ+CisjaW5jbHVkZSA8UVBpeG1hcC5oPg0KKyNp
bmNsdWRlIDxRUmVnaW9uPg0KKyNpbmNsdWRlIDxRVmVjdG9yPg0KKyNpbmNsdWRlIDxRV2lkZ2V0
PgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+DQorI2luY2x1ZGUgPHJ1bnRpbWUvSlNWYWx1
ZS5oPgorDQordXNpbmcgSlNDOjpFeGVjU3RhdGU7DQordXNpbmcgSlNDOjpJbnRlcnByZXRlcjsN
Cit1c2luZyBKU0M6OkpTTG9jazsNCit1c2luZyBKU0M6OkpTT2JqZWN0Ow0KK3VzaW5nIEpTQzo6
VVN0cmluZzsNCisNCit1c2luZyBuYW1lc3BhY2Ugc3RkOw0KKw0KK3VzaW5nIG5hbWVzcGFjZSBX
VEY7DQorDQorbmFtZXNwYWNlIFdlYkNvcmUgew0KKw0KK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7DQorDQordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQ0KK3sNCisgICAg
aWYgKCFwYXJlbnQoKSB8fCAhbV9pc1dpbmRvd2VkKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBB
U1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOw0KKyAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsNCisgICAgSW50UmVjdCBvbGRX
aW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0Ow0KKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9j
bGlwUmVjdDsNCisgICAgDQorICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5j
b250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXpl
KCkpOw0KKyAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsNCisgICAgbV9jbGlwUmVj
dC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7DQorICAgIGlmICgh
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkNCisgICAgICAgIHJldHVybjsNCisgICAgCisgICAgUGx1
Z2luQ29udGFpbmVyU3ltYmlhbiogY29udGFpbmVyID0gc3RhdGljX2Nhc3Q8UGx1Z2luQ29udGFp
bmVyU3ltYmlhbio+KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOw0KKyAgICBjb250YWluZXItPnJl
cXVlc3RHZW9tZXRyeShtX3dpbmRvd1JlY3QsIFFSZWdpb24obV9jbGlwUmVjdCkpOw0KKyAgICAv
LyBpbiBvcmRlciB0byBtb3ZlL3Jlc2l6ZSB0aGUgcGx1Z2luIHdpbmRvdyBhdCB0aGUgc2FtZSB0
aW1lIGFzIHRoZSByZXN0IG9mIGZyYW1lDQorICAgIC8vIGR1cmluZyBlLmcuIHNjcm9sbGluZywg
d2Ugc2V0IHRoZSBtYXNrIGFuZCBnZW9tZXRyeSBpbiB0aGUgcGFpbnQoKSBmdW5jdGlvbiwgYnV0
DQorICAgIC8vIGFzIHBhaW50KCkgaXNuJ3QgY2FsbGVkIHdoZW4gdGhlIHBsdWdpbiB3aW5kb3cg
aXMgb3V0c2lkZSB0aGUgZnJhbWUgd2hpY2ggY2FuDQorICAgIC8vIGJlIGNhdXNlZCBieSBhIHNj
cm9sbCwgd2UgbmVlZCB0byBtb3ZlL3Jlc2l6ZSBpbW1lZGlhdGVseS4NCisgICAgaWYgKCFtX3dp
bmRvd1JlY3QuaW50ZXJzZWN0cyhmcmFtZVZpZXctPmZyYW1lUmVjdCgpKSkNCisgICAgICAgIGNv
bnRhaW5lci0+YWRqdXN0R2VvbWV0cnkoKTsNCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpzZXRG
b2N1cygpDQorew0KKyAgICBXaWRnZXQ6OnNldEZvY3VzKCk7DQorfQ0KKw0KK3ZvaWQgUGx1Z2lu
Vmlldzo6c2hvdygpDQorew0KKyAgICBzZXRTZWxmVmlzaWJsZSh0cnVlKTsNCisgICAgV2lkZ2V0
OjpzaG93KCk7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpDQorew0KKyAgICBzZXRT
ZWxmVmlzaWJsZShmYWxzZSk7DQorICAgIFdpZGdldDo6aGlkZSgpOw0KK30NCisNCit2b2lkIFBs
dWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCkNCit7DQorICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsNCisgICAgICAgIHBhaW50TWlzc2lu
Z1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisg
ICAgDQorICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpDQorICAgICAgICByZXR1
cm47DQorICAgIA0KKyAgICBpZiAobV9pc1dpbmRvd2VkICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpDQorICAgICAgICBzdGF0aWNfY2FzdDxQbHVnaW5Db250YWluZXJTeW1iaWFuKj4ocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSktPmFkanVzdEdlb21ldHJ5KCk7DQorDQorICAgIGlmICghbV9pc1dp
bmRvd2VkKSB7DQorICAgICAgICBpZiAoIXJlY3QuaW50ZXJzZWN0cyhmcmFtZVJlY3QoKSkpDQor
ICAgICAgICAgICAgcmV0dXJuOw0KKw0KKyAgICAgICAgY29udGV4dC0+c2F2ZSgpOw0KKyAgICAg
ICAgSW50UmVjdCBjbGlwUmVjdChyZWN0KTsNCisgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChm
cmFtZVJlY3QoKSk7DQorICAgICAgICBjb250ZXh0LT5jbGlwKGNsaXBSZWN0KTsNCisgICAgICAg
IGNvbnRleHQtPnRyYW5zbGF0ZShmcmFtZVJlY3QoKS5sb2NhdGlvbigpLngoKSwgZnJhbWVSZWN0
KCkubG9jYXRpb24oKS55KCkpOw0KKyAgICAgICAgTlBQRXZlbnREcmF3IGV2ZW50RHJhdzsNCisg
ICAgICAgIGV2ZW50RHJhdy5wYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7DQor
ICAgICAgICBOUFBFdmVudCBldmVudDsNCisgICAgICAgIGV2ZW50LnR5cGUgPSBOcHBFdmVudERy
YXc7DQorICAgICAgICBldmVudC5kYXRhID0gJmV2ZW50RHJhdzsNCisgICAgICAgIGlmIChtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsNCisgICAgICAgICAgICBQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsNCisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7DQorICAgICAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbih0cnVlKTsNCisgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQo
bV9pbnN0YW5jZSwgJmV2ZW50KTsNCisgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNl
KTsNCisgICAgICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsNCisg
ICAgICAgIH0NCisgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsNCisgICAgfQ0KK30NCisNCit2
b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQp
DQorew0KKyAgICBpZiAobV9pc1dpbmRvd2VkKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBOUFBF
dmVudEtleSBldktleTsNCisgICAgZXZLZXkua2V5RXZlbnQgPSAoZXZlbnQtPmtleUV2ZW50KCkt
PnF0RXZlbnQoKSk7DQorICAgIE5QUEV2ZW50IGV2Ow0KKyAgICBldi50eXBlID0gTnBwRXZlbnRL
ZXk7DQorICAgIGV2LmRhdGEgPSAmZXZLZXk7DQorICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+ZXZlbnQpIHsNCisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3
KHRoaXMpOw0KKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
ZmFsc2UpOw0KKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsNCisgICAgICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXYpOw0KKyAgICAgICAgc2V0
Q2FsbGluZ1BsdWdpbihmYWxzZSk7DQorICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldygwKTsNCisgICAgfQ0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNl
RXZlbnQoTW91c2VFdmVudCogZXZlbnQpDQorew0KKyAgICBpZiAobV9pc1dpbmRvd2VkKQ0KKyAg
ICAgICAgcmV0dXJuOw0KKyAgICBRRXZlbnQ6OlR5cGUgdHlwZTsNCisgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gIm1vdXNlZG93biIpDQorICAgICAgICB0eXBlID0gUUV2ZW50OjpNb3VzZUJ1dHRv
blByZXNzOw0KKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09ICJtb3VzZW1vdmUiKQ0KKyAg
ICAgICAgdHlwZSA9IFFFdmVudDo6TW91c2VNb3ZlOw0KKyAgICBlbHNlIGlmIChldmVudC0+dHlw
ZSgpID09ICJtb3VzZXVwIikNCisgICAgICAgIHR5cGUgPSBRRXZlbnQ6Ok1vdXNlQnV0dG9uUmVs
ZWFzZTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBRUG9pbnQgcG9zaXRpb24o
ZXZlbnQtPm9mZnNldFgoKSwgZXZlbnQtPm9mZnNldFkoKSk7DQorICAgIFF0OjpNb3VzZUJ1dHRv
biBidXR0b247DQorICAgIHN3aXRjaCAoZXZlbnQtPndoaWNoKCkpIHsNCisgICAgY2FzZSAxOg0K
KyAgICAgICAgYnV0dG9uID0gUXQ6OkxlZnRCdXR0b247DQorICAgICAgICBicmVhazsNCisgICAg
Y2FzZSAyOg0KKyAgICAgICAgYnV0dG9uID0gUXQ6Ok1pZEJ1dHRvbjsNCisgICAgICAgIGJyZWFr
Ow0KKyAgICBjYXNlIDM6DQorICAgICAgICBidXR0b24gPSBRdDo6UmlnaHRCdXR0b247DQorICAg
ICAgICBicmVhazsNCisgICAgZGVmYXVsdDoNCisgICAgICAgIGJ1dHRvbiA9IFF0OjpOb0J1dHRv
bjsNCisgICAgfQ0KKyAgICBRdDo6S2V5Ym9hcmRNb2RpZmllcnMgbW9kaWZpZXJzID0gMDsNCisg
ICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpDQorICAgICAgICBtb2RpZmllcnMgfD0gUXQ6OkNvbnRy
b2xNb2RpZmllcjsNCisgICAgaWYgKGV2ZW50LT5hbHRLZXkoKSkNCisgICAgICAgIG1vZGlmaWVy
cyB8PSBRdDo6QWx0TW9kaWZpZXI7DQorICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkNCisgICAg
ICAgIG1vZGlmaWVycyB8PSBRdDo6U2hpZnRNb2RpZmllcjsNCisgICAgaWYgKGV2ZW50LT5tZXRh
S2V5KCkpDQorICAgICAgICBtb2RpZmllcnMgfD0gUXQ6Ok1ldGFNb2RpZmllcjsNCisgICAgUU1v
dXNlRXZlbnQgbW91c2VFdmVudCh0eXBlLCBwb3NpdGlvbiwgYnV0dG9uLCBidXR0b24sIG1vZGlm
aWVycyk7IA0KKyAgICBOUFBFdmVudE1vdXNlIGV2TW91c2U7DQorICAgIGV2TW91c2UubW91c2VF
dmVudCA9ICZtb3VzZUV2ZW50Ow0KKyAgICBOUFBFdmVudCBldjsNCisgICAgZXYudHlwZSA9IE5w
cEV2ZW50TW91c2U7DQorICAgIGV2LmRhdGEgPSAmZXZNb3VzZTsNCisgICAgaWYgKG1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5ldmVudCkgew0KKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVu
dFBsdWdpblZpZXcodGhpcyk7DQorICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhmYWxzZSk7DQorICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOw0KKyAg
ICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldik7DQor
ICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsNCisgICAgICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KDApOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6
c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkNCit7DQorICAgIFdpZGdldDo6c2V0UGFyZW50
KHBhcmVudCk7DQorICAgIGlmIChwYXJlbnQpDQorICAgICAgICBpbml0KCk7DQorfQ0KKw0KK3Zv
aWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpDQorew0K
KyAgICBpZiAoIW1faXNTdGFydGVkIHx8ICFwYXJlbnQoKSkNCisgICAgICAgIHJldHVybjsNCisg
ICAgaWYgKG1faXNXaW5kb3dlZCkgew0KKyAgICAgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0
PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkp
Ow0KKyAgICAgICAgbV9ucFdpbmRvdy54ID0gcC54KCk7DQorICAgICAgICBtX25wV2luZG93Lnkg
PSBwLnkoKTsNCisgICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSByZWN0LndpZHRoKCk7DQorICAg
ICAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7DQorICAgICAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LmxlZnQgPSAwOw0KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3Ag
PSAwOw0KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHJlY3Qud2lkdGgoKTsN
CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsNCisg
ICAgDQorICAgICAgICBpZiAobV9ucFdpbmRvdy54IDwgMCB8fCBtX25wV2luZG93LnkgPCAwIHx8
IG1fbnBXaW5kb3cud2lkdGggPD0gMCB8fCBtX25wV2luZG93LmhlaWdodCA8PSAwKQ0KKyAgICAg
ICAgICAgIHJldHVybjsNCisgICAgDQorICAgICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPnNldHdpbmRvdykgew0KKyAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOw0KKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGZhbHNlKTsNCisgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOw0K
KyAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5j
ZSwgJm1fbnBXaW5kb3cpOw0KKyAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOw0K
KyAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOw0KKyAgICAN
CisgICAgICAgICAgICBpZiAoIW1faXNXaW5kb3dlZCkNCisgICAgICAgICAgICAgICAgcmV0dXJu
Ow0KKyAgICANCisgICAgICAgICAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7DQor
ICAgICAgICB9DQorICAgIH0gZWxzZSB7DQorICAgICAgICAvLyBGSVhNRTogZG9uJ3QgY2FsbCBO
UFBfc2V0V2luZG93IGlmIHdpbmRvdyBzaXplIGRpZCBub3QgcmVhbGx5IGNoYW5nZQ0KKyAgICAg
ICAgbV9ucFdpbmRvdy54ID0gMDsNCisgICAgICAgIG1fbnBXaW5kb3cueSA9IDA7DQorICAgIA0K
KyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsNCisgICAgICAgIG1fbnBX
aW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsNCisgICAgDQorICAgICAgICBtX25wV2luZG93
LmNsaXBSZWN0LmxlZnQgPSAwOw0KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAw
Ow0KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHJlY3Qud2lkdGgoKTsNCisg
ICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsNCisgICAg
ICAgIG1fbnBXaW5kb3cud2luZG93ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93
KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOw0KKyAgICANCisgICAgICAgIGlmIChtX25wV2luZG93
LnggPCAwIHx8IG1fbnBXaW5kb3cueSA8IDANCisgICAgICAgICAgICB8fCBtX25wV2luZG93Lndp
ZHRoIDw9IDAgfHwgbV9ucFdpbmRvdy5oZWlnaHQgPD0gMCkNCisgICAgICAgICAgICByZXR1cm47
DQorICAgIA0KKyAgICAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cp
IHsNCisgICAgICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsN
CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxz
ZSk7DQorICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsNCisgICAgICAgICAgICBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93
KTsNCisgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsNCisgICAgICAgICAgICBQ
bHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsNCisgICAgDQorICAgICAgICB9DQor
ICAgIH0NCit9DQorDQorY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50U3RhdGljKCkN
Cit7CisgICAgIG5vdEltcGxlbWVudGVkKCk7DQorfQ0KKw0KK05QRXJyb3IgUGx1Z2luVmlldzo6
aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzIgbGVuLCBjb25z
dCBjaGFyKiBidWYpDQoreworICAgICBub3RJbXBsZW1lbnRlZCgpOw0KK30NCisNCitOUEVycm9y
IFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkN
Cit7DQorICAgIHN3aXRjaCAodmFyaWFibGUpIHsNCisgICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5k
b3dsZXNzOiB7DQorICAgICAgICAgICAgTlBCb29sKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxOUEJv
b2wqPih2YWx1ZSk7DQorICAgICAgICAgICAgKnJlc3VsdCA9IHRydWU7DQorICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX05PX0VSUk9SOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgIGNhc2Ug
TlBOVldpbmRvd05QT2JqZWN0OiB7DQorICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQp
DQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7DQorDQorICAgICAgICBO
UE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCktPndp
bmRvd1NjcmlwdE5QT2JqZWN0KCk7DQorDQorICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhw
ZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3pp
bGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+DQorICAgICAgICBpZiAod2lu
ZG93U2NyaXB0T2JqZWN0KQ0KKyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1Nj
cmlwdE9iamVjdCk7DQorDQorICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7DQorICAg
ICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVjdDsNCisgICAgICAgICAgICANCisgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsNCisgICAgfQ0KKw0KKyAgICBjYXNlIE5QTlZQbHVnaW5FbGVt
ZW50TlBPYmplY3Q6IHsNCisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkNCisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsNCisNCisgICAgICAgIE5QT2JqZWN0
KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOw0KKw0KKyAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFz
VGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwg
bV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpDQorICAgICAgICAgICAgcGx1Z2luU2Ny
aXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5n
ZXROUE9iamVjdCgpOw0KKw0KKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRv
IGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcv
cHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPg0KKyAgICAgICAgaWYgKHBsdWdpblNjcmlw
dE9iamVjdCkNCisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmpl
Y3QpOw0KKw0KKyAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOw0KKyAgICAgICAgKnYg
PSBwbHVnaW5TY3JpcHRPYmplY3Q7DQorDQorICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7
DQorICAgIH0gICAgICAgIA0KKyAgICB9DQorICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsNCit9
DQorDQorTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJp
YWJsZSwgdm9pZCogdmFsdWUpDQorew0KKyAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsN
Cit9DQorDQordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQ0KK3sNCisgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpIHsNCisgICAgICAgIHBsYXRmb3Jt
V2lkZ2V0KCktPnVwZGF0ZShyZWN0KTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICAN
CisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOw0KK30NCisgICAgDQor
dm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpDQorew0KKyAgICBp
ZiAobV9pc1dpbmRvd2VkIHx8ICFyZWN0KQ0KKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxl
ZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7DQorICAgIG1faW52YWxpZFJlY3RzLmFwcGVu
ZChyKTsNCisgICAgaWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0FjdGl2ZSgpKQ0KKyAgICAgICAg
bV9pbnZhbGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDAuMDAxKTsNCit9DQorDQordm9pZCBQbHVn
aW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikNCit7DQorICAgIGlmICht
X2lzV2luZG93ZWQpDQorICAgICAgICByZXR1cm47DQorICAgIAorICAgIFFSZWdpb24qIHIgPSBz
dGF0aWNfY2FzdDxRUmVnaW9uKj4ocmVnaW9uKTsNCisgICAgaWYgKCFyKSAKKyAgICAgICAgcmV0
dXJuOw0KKyAgICAKKyAgICBRVmVjdG9yPFFSZWN0PiByZWN0cyA9IHItPnJlY3RzKCk7DQorICAg
IGZvciAoaW50IGkgPSAxOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpIHsNCisgICAgICAgIGNvbnN0
IFFSZWN0JiBxUmVjdCA9IHJlY3RzLmF0KGkpOw0KKyAgICAgICAgSW50UmVjdCByKHFSZWN0KTsN
CisgICAgICAgIG1faW52YWxpZFJlY3RzLmFwcGVuZChyKTsNCisgICAgICAgIGlmICghbV9pbnZh
bGlkYXRlVGltZXIuaXNBY3RpdmUoKSkNCisgICAgICAgICAgICBtX2ludmFsaWRhdGVUaW1lci5z
dGFydE9uZVNob3QoMC4wMDEpOw0KKyAgICAgICAgfQ0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6
OmZvcmNlUmVkcmF3KCkNCit7DQorICAgIGlmIChtX2lzV2luZG93ZWQpDQorICAgICAgICByZXR1
cm47DQorICAgICAgICANCisgICAgUVJlY3QgcXJlY3QgPSBtX3BhcmVudEZyYW1lLT52aWV3KCkt
Pmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnJlY3QoKTsNCisgICAgSW50UmVj
dCByKHFyZWN0LngoKSwgcXJlY3QueSgpLCBxcmVjdC53aWR0aCgpLCBxcmVjdC5oZWlnaHQoKSk7
DQorICAgIG1faW52YWxpZFJlY3RzLmFwcGVuZChyKTsNCisgICAgaWYgKCFtX2ludmFsaWRhdGVU
aW1lci5pc0FjdGl2ZSgpKQ0KKyAgICAgICAgbV9pbnZhbGlkYXRlVGltZXIuc3RhcnRPbmVTaG90
KDAuMDAxKTsNCit9DQorDQorUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQ0KK3sNCit9DQorDQor
dm9pZCBQbHVnaW5WaWV3Ojppbml0KCkNCit7DQorICAgIGlmIChtX2hhdmVJbml0aWFsaXplZCkg
DQorICAgICAgICByZXR1cm47DQorICAgIA0KKyAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRydWU7
DQorICAgIGlmICghbV9wbHVnaW4pIHsNCisgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2lu
U3RhdHVzQ2FuTm90RmluZFBsdWdpbik7DQorICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAg
IGlmICghbV9wbHVnaW4tPmxvYWQoKSkgew0KKyAgICAgIG1fcGx1Z2luID0gMDsNCisgICAgICBt
X3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47DQorICAgICAgcmV0dXJuOw0K
KyAgICB9DQorDQorICAgIGlmICghc3RhcnQoKSkgew0KKyAgICAgICAgbV9zdGF0dXMgPSBQbHVn
aW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAg
IGlmIChtX2lzV2luZG93ZWQpIHsNCisgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KG5ldyBQbHVn
aW5Db250YWluZXJTeW1iaWFuKHRoaXMsIG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRv
dygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkpOw0KKyAgICAgICAgc2hvdygpOw0KKw0KKyAgICAg
ICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93Ow0KKyAgICAgICAgbV9ucFdp
bmRvdy53aW5kb3cgPSAodm9pZCopcGxhdGZvcm1QbHVnaW5XaWRnZXQoKTsNCisNCisgICAgICAg
IHNldE5QV2luZG93UmVjdChmcmFtZVJlY3QoKSk7DQorICAgIH0gZWxzZSB7DQorICAgICAgICBz
ZXRQbGF0Zm9ybVdpZGdldCgwKTsNCisgICAgICAgIHNob3coKTsNCisgICAgICAgIG1fbnBXaW5k
b3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOw0KKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0
KGZyYW1lUmVjdCgpKTsNCisgICAgfQ0KKyAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseTsNCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxl
KGJvb2wgdmlzaWJsZSkNCit7DQorICAgIGlmIChpc1BhcmVudFZpc2libGUoKSA9PSB2aXNpYmxl
KQ0KKyAgICAgICAgcmV0dXJuOw0KKw0KKyAgICBXaWRnZXQ6OnNldFBhcmVudFZpc2libGUodmlz
aWJsZSk7DQorDQorICAgIGlmIChpc1NlbGZWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSkNCisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldFZpc2libGUodmlzaWJs
ZSk7DQorDQorfQ0KKw0KKw0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUNCkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvc3ltYmlhbi9ucGludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9zeW1iaWFuL25waW50ZXJmYWNlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvc3ltYmlhbi9ucGludGVyZmFjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisv
Kg0KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4NCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KKyovDQorI2lmbmRlZiBucGludGVyZmFjZV9I
DQorI2RlZmluZSBucGludGVyZmFjZV9IDQorCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKKyNp
bmNsdWRlIDxRdFBsdWdpbj4NCitjbGFzcyBOUEludGVyZmFjZSB7DQorcHVibGljOg0KKyAgICB2
aXJ0dWFsIE5QRXJyb3IgTlBfSW5pdGlhbGl6ZShOUE5ldHNjYXBlRnVuY3MgKmFOUE5GdW5jcywg
TlBQbHVnaW5GdW5jcyAqYU5QUEZ1bmNzKSA9IDA7DQorICAgIHZpcnR1YWwgdm9pZCBOUF9TaHV0
ZG93bigpID0gMDsNCisgICAgdmlydHVhbCBjaGFyKiBOUF9HZXRNSU1FRGVzY3JpcHRpb24oKSA9
IDA7DQorfTsNCisNCitlbnVtIE5wcEV2ZW50VHlwZSB7DQorICAgIE5wcEV2ZW50S2V5LA0KKyAg
ICBOcHBFdmVudE1vdXNlLA0KKyAgICBOcHBFdmVudERyYXcsDQorICAgIE5wcEV2ZW50VmlzaWJp
bGl0eSwNCisgICAgTnBwQ3VzdG9tVmFsdWUNCit9Ow0KKw0KK3R5cGVkZWYgc3RydWN0IF9OUFBF
dmVudCB7DQorICAgIE5wcEV2ZW50VHlwZSB0eXBlOw0KKyAgICB2b2lkKiBkYXRhOw0KK30gTlBQ
RXZlbnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgX05QUEV2ZW50S2V5IHsNCisgICAgdm9pZCoga2V5
RXZlbnQ7IC8vIFFLZXlFdmVudA0KKyAgICB2b2lkKiByZXNlcnZlZDsNCit9IE5QUEV2ZW50S2V5
Ow0KKw0KK3R5cGVkZWYgc3RydWN0IF9OUFBFdmVudE1vdXNlIHsNCisgICAgdm9pZCogbW91c2VF
dmVudDsgLy8gUU1vdXNlRXZlbnQNCisgICAgdm9pZCogcmVzZXJ2ZWQ7DQorfSBOUFBFdmVudE1v
dXNlOw0KKw0KK3R5cGVkZWYgc3RydWN0IF9OUFBFdmVudFZpc2liaWxpdHkgew0gICAgYm9vbCB2
aXNpYmxlOw0KKyAgICB2b2lkKiByZXNlcnZlZDsNCit9IE5QUEV2ZW50VmlzaWJpbGl0eTsNCisN
Cit0eXBlZGVmIHN0cnVjdCBfTlBQRXZlbnREcmF3IHsNCisgICAgdm9pZCogcGFpbnRlcjsgLy8g
UVBhaW50ZXINCisgICAgdm9pZCogcmVzZXJ2ZWQ7DQorfSBOUFBFdmVudERyYXc7DQorDQorDQor
Ly8NCisNCisNCitRVF9CRUdJTl9OQU1FU1BBQ0UNCitRX0RFQ0xBUkVfSU5URVJGQUNFKE5QSW50
ZXJmYWNlLCAiY29tLm5va2lhLnF0czYwLndlYnBsdWdpbi8xLjAiKTsNCitRVF9FTkRfTkFNRVNQ
QUNFDQorDQorI2VuZGlmIC8vIG5waW50ZXJmYWNlX0gNCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40429</attachid>
            <date>2009-10-01 02:46:28 -0700</date>
            <delta_ts>2009-10-11 16:27:33 -0700</delta_ts>
            <desc>Patch with changes incorporated - Compilation issues solved</desc>
            <filename>s60_plugin.patch</filename>
            <type>text/plain</type>
            <size>40303</size>
            <attacher name="Rohini Ananth">rohini.ananth</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gNDg5
NjEpDQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwzICsxLDMwIEBADQorMjAw
OS0wOS0zMCAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+DQorIA0KKyAgICAg
ICAgIFJldmlld2VkIGJ5IA0KKyANCisgICAgICAgICBFbmFibGluZyBOUEFQSSBwbHVnaW4gc3Vw
cG9ydCBvbiBRdCBXZWJraXQgZm9yIFM2MCBwbGF0Zm9ybQ0KKyAgICAgICAgIEFsc28gaW1wbGVt
ZW50ZWQgYnkgTWFoZXNoIEt1bGthcm5pPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+IGFuZCAN
CisgICAgICAgICBSb2hpbmkgQW5hbnRoIDxyb2hpbmkuYW5hbnRoQG5va2lhLmNvbT4NCisgICAg
ICAgICANCisgICAgICAgICAqIFdlYkNvcmUucHJvOg0KKyAgICAgICAgIEVuYWJsaW5nIEVOQUJM
RV9ORVRTQ0FQRV9QTFVHSU5fQVBJIGZvciBTNjAgYW5kIGFkZGVkIFM2MCBzcGVjaWZpYyBuZXcg
cGx1Z2luIGZpbGVzIHRvIGJlIGNvbXBpbGVkIHVuZGVyIHN5bWJpYW46IG1hY3JvDQorICAgICAg
ICAgKiBwbHVnaW5zL1BsdWdpblBhY2thZ2UuaDoNCisgICAgICAgICBBZGRlZCBTNjAgc3BlY2lm
aWMgcGx1Z2luIGludGVyZmFjZSBhbmQgcGx1Z2luIGxvYWRlciB2YXJpYWJsZXMNCisgICAgICAg
ICAqIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHA6DQorICAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blBhY2thZ2U6OnVubG9hZCk6IEFkZGVkICFQTEFURk9STShTWU1CSUFOKSBtYWNyby4gRGVmYXVs
dCAgICAgaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZCBvbmx5IGZvciBub24tc3ltYmlhbiBwbGF0
Zm9ybQ0KKyAgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6DQorICAgICAgICAg
TWFjcm8gIVNZTUJJQU4gY2hlY2tpbmcNCisgICAgICAgICANCisgICAgICAgICBBZGRlZCBmb2xk
ZXIgJ3N5bWJpYW4nIHdoaWNoIGNvbnRhaW5zIGltcGxlbWVudGF0aW9uIGZpbGVzIGZvciBTNjAg
cGxhdGZvcm0tc3BlY2lmaWMgTlBBUEkgcGx1Z2luIGZ1bmN0aW9uYWxpdHksIHVuZGVyIC9wbHVn
aW5zIGZvbGRlcg0KKyAgICAgICAgICogcGx1Z2lucy9zeW1iaWFuDQorICAgICAgICAgKiBwbHVn
aW5zL3N5bWJpYW4vbnBpbnRlcmZhY2UuaDoNCisgICAgICAgICBQbHVnaW4gSW50ZXJmYWNlIHRv
IGJlIGltcGxlbWVudGVkIGJ5IFM2MCBOUEFQSSBwbHVnaW5zIA0KKyAgICAgICAgICogcGx1Z2lu
cy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uaDoNCisgICAgICAgICAqIHBsdWdpbnMv
c3ltYmlhbi9QbHVnaW5Db250YWluZXJTeW1iaWFuLmNwcDoNCisgICAgICAgICAqIHBsdWdpbnMv
c3ltYmlhbi9QbHVnaW5EYXRhYmFzZVN5bWJpYW4uY3BwOg0KKyAgICAgICAgICogcGx1Z2lucy9z
eW1iaWFuL1BsdWdpblZpZXdTeW1iaWFuLmNwcDoNCisgICAgICAgICAqIHBsdWdpbnMvc3ltYmlh
bi9QbHVnaW5QYWNrYWdlU3ltYmlhbi5jcHA6DQorDQogMjAwOS0wOS0zMCAgRGFuaWVsIEJhdGVz
ICA8ZGJhdGVzQHdlYmtpdC5vcmc+DQogDQogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRo
Lg0KSW5kZXg6IHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDQ4OTYxKQ0KKysrIHBsdWdpbnMvUGx1
Z2luRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMzIwLDcgKzMyMCw3IEBADQogICAg
IG1fcHJlZmVycmVkUGx1Z2lucy5jbGVhcigpOw0KIH0NCiANCi0jaWYgIVBMQVRGT1JNKFdJTl9P
UykgfHwgUExBVEZPUk0oV1gpDQorI2lmICFQTEFURk9STShTWU1CSUFOKSAmJiAgKCFQTEFURk9S
TShXSU5fT1MpIHx8IFBMQVRGT1JNKFdYKSkNCiAvLyBGb3IgU2FmYXJpL1dpbiB0aGUgZm9sbG93
aW5nIHRocmVlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkDQogLy8gaW4gUGx1Z2luRGF0YWJhc2VX
aW4uY3BwLCBidXQgaWYgd2UgY2FuIHVzZSBXZWJDb3JlIGNvbnN0cnVjdHMNCiAvLyBmb3IgdGhl
IGxvZ2ljIHdlIHNob3VsZCBwZXJoYXBzIG1vdmUgaXQgaGVyZSB1bmRlciBYUF9XSU4/DQpAQCAt
NDI2LDYgKzQyNiw2IEBADQogICAgIH0NCiB9DQogDQotI2VuZGlmIC8vICFQTEFURk9STShXSU5f
T1MpDQorI2VuZGlmIC8vICFQTEFURk9STShXSU5fT1MpICFQTEFURk9STShTWU1CSUFOKQ0KIA0K
IH0NCkluZGV4OiBwbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gcGx1
Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkocmV2aXNpb24gNDg5NjEpDQorKysgcGx1Z2lucy9QbHVn
aW5QYWNrYWdlLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTExMyw2ICsxMTMsNyBAQA0KICAgICBt
X3BhcmVudERpcmVjdG9yeSA9IG1fcGF0aC5sZWZ0KG1fcGF0aC5sZW5ndGgoKSAtIG1fZmlsZU5h
bWUubGVuZ3RoKCkgLSAxKTsNCiB9DQogDQorI2lmICFQTEFURk9STShTWU1CSUFOKSANCiB2b2lk
IFBsdWdpblBhY2thZ2U6OnVubG9hZCgpDQogew0KICAgICBpZiAoIW1faXNMb2FkZWQpDQpAQCAt
MTI1LDYgKzEyNiw3IEBADQogDQogICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOw0KIH0NCisj
ZW5kaWYgLy8hUExBVEZPUk0oU1lNQklBTikNCiANCiB2b2lkIFBsdWdpblBhY2thZ2U6OnVubG9h
ZFdpdGhvdXRTaHV0ZG93bigpDQogew0KQEAgLTE5NSw3ICsxOTcsNyBAQA0KIH0NCiAjZW5kaWYN
CiANCi0jaWYgIVBMQVRGT1JNKFdJTl9PUykNCisjaWYgUExBVEZPUk0oU1lNQklBTikgfHwgIVBM
QVRGT1JNKFdJTl9PUykNCiB2b2lkIFBsdWdpblBhY2thZ2U6OmRldGVybWluZU1vZHVsZVZlcnNp
b25Gcm9tRGVzY3JpcHRpb24oKQ0KIHsNCiAgICAgLy8gSXQncyBhIGJpdCBsYW1lIHRvIGRldGVj
dCB0aGUgcGx1Z2luIHZlcnNpb24gYnkgcGFyc2luZyBpdA0KSW5kZXg6IHBsdWdpbnMvUGx1Z2lu
UGFja2FnZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHJldmlz
aW9uIDQ4OTYxKQ0KKysrIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5oCSh3b3JraW5nIGNvcHkpDQpA
QCAtMzYsNiArMzYsMTEgQEANCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4NCiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4NCiANCisjaWYgUExBVEZPUk0oU1lNQklBTikNCitjbGFzcyBRUGx1
Z2luTG9hZGVyOw0KK2NsYXNzIE5QSW50ZXJmYWNlOw0KKyNlbmRpZg0KKw0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsNCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNj
cmlwdGlvbnNNYXA7DQogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+
ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsNCkBAIC03Myw2ICs3OCwxMSBAQA0KIA0KICAgICBwcml2
YXRlOg0KICAgICAgICAgUGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRp
bWVfdCYgbGFzdE1vZGlmaWVkKTsNCisNCisjaWYgUExBVEZPUk0oU1lNQklBTikNCisgICAgICAg
IE5QSW50ZXJmYWNlKiBtX25wSW50ZXJmYWNlOw0KKyAgICAgICAgUVBsdWdpbkxvYWRlciogbV9w
bHVnaW5Mb2FkZXI7DQorI2VuZGlmIC8vIFBMQVRGT1JNKFNZTUJJQU4pDQogICAgICAgICBib29s
IGZldGNoSW5mbygpOw0KICAgICAgICAgYm9vbCBpc1BsdWdpbkJsYWNrbGlzdGVkKCk7DQogICAg
ICAgICB2b2lkIGRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsNCkluZGV4
OiBwbHVnaW5zL3N5bWJpYW4vbnBpbnRlcmZhY2UuaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHBsdWdpbnMv
c3ltYmlhbi9ucGludGVyZmFjZS5oCShyZXZpc2lvbiAwKQ0KKysrIHBsdWdpbnMvc3ltYmlhbi9u
cGludGVyZmFjZS5oCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSw2OCBAQA0KKy8qDQorICAgIENv
cHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykNCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcg0KKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0K
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UNCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8NCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwNCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuDQorKi8NCisjaWZuZGVmIG5waW50ZXJmYWNlX0gNCisjZGVmaW5l
IG5waW50ZXJmYWNlX0gNCisNCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCINCisjaW5jbHVkZSA8
UXRQbHVnaW4+DQorY2xhc3MgTlBJbnRlcmZhY2Ugew0KK3B1YmxpYzoNCisgICAgdmlydHVhbCBO
UEVycm9yIE5QX0luaXRpYWxpemUoTlBOZXRzY2FwZUZ1bmNzICphTlBORnVuY3MsIE5QUGx1Z2lu
RnVuY3MgKmFOUFBGdW5jcykgPSAwOw0KKyAgICB2aXJ0dWFsIHZvaWQgTlBfU2h1dGRvd24oKSA9
IDA7DQorICAgIHZpcnR1YWwgY2hhciogTlBfR2V0TUlNRURlc2NyaXB0aW9uKCkgPSAwOw0KK307
DQorDQorZW51bSBOcHBFdmVudFR5cGUgew0KKyAgICBOcHBFdmVudEtleSwNCisgICAgTnBwRXZl
bnRNb3VzZSwNCisgICAgTnBwRXZlbnREcmF3LA0KKyAgICBOcHBFdmVudFZpc2liaWxpdHksDQor
ICAgIE5wcEN1c3RvbVZhbHVlDQorfTsNCisNCit0eXBlZGVmIHN0cnVjdCBfTlBQRXZlbnQgew0K
KyAgICBOcHBFdmVudFR5cGUgdHlwZTsNCisgICAgdm9pZCogZGF0YTsNCit9IE5QUEV2ZW50Ow0K
Kw0KK3R5cGVkZWYgc3RydWN0IF9OUFBFdmVudEtleSB7DQorICAgIHZvaWQqIGtleUV2ZW50OyAv
LyBRS2V5RXZlbnQNCisgICAgdm9pZCogcmVzZXJ2ZWQ7DQorfSBOUFBFdmVudEtleTsNCisNCit0
eXBlZGVmIHN0cnVjdCBfTlBQRXZlbnRNb3VzZSB7DQorICAgIHZvaWQqIG1vdXNlRXZlbnQ7IC8v
IFFNb3VzZUV2ZW50DQorICAgIHZvaWQqIHJlc2VydmVkOw0KK30gTlBQRXZlbnRNb3VzZTsNCisN
Cit0eXBlZGVmIHN0cnVjdCBfTlBQRXZlbnRWaXNpYmlsaXR5IHsNCisgICAgYm9vbCB2aXNpYmxl
Ow0KKyAgICB2b2lkKiByZXNlcnZlZDsNCit9IE5QUEV2ZW50VmlzaWJpbGl0eTsNCisNCit0eXBl
ZGVmIHN0cnVjdCBfTlBQRXZlbnREcmF3IHsNCisgICAgdm9pZCogcGFpbnRlcjsgLy8gUVBhaW50
ZXINCisgICAgdm9pZCogcmVzZXJ2ZWQ7DQorfSBOUFBFdmVudERyYXc7DQorDQorUVRfQkVHSU5f
TkFNRVNQQUNFDQorUV9ERUNMQVJFX0lOVEVSRkFDRShOUEludGVyZmFjZSwgImNvbS5ub2tpYS5x
dHM2MC53ZWJwbHVnaW4vMS4wIik7DQorUVRfRU5EX05BTUVTUEFDRQ0KKw0KKyNlbmRpZiAvLyBu
cGludGVyZmFjZV9IDQpJbmRleDogcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJp
YW4uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5
bWJpYW4uY3BwCShyZXZpc2lvbiAwKQ0KKysrIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250YWlu
ZXJTeW1iaWFuLmNwcAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNzcgQEANCisvKg0KKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisN
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLg0KKyovDQorDQorI2luY2x1ZGUgImNvbmZpZy5oIg0KKyNpbmNs
dWRlICJQbHVnaW5Db250YWluZXJTeW1iaWFuLmgiDQorDQorI2luY2x1ZGUgIkZvY3VzQ29udHJv
bGxlci5oIg0KKyNpbmNsdWRlICJGcmFtZS5oIg0KKyNpbmNsdWRlICJGcmFtZVZpZXcuaCINCisj
aW5jbHVkZSAiUGFnZS5oIg0KKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCINCisj
aW5jbHVkZSAiUGx1Z2luVmlldy5oIg0KKw0KKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+DQorI2lu
Y2x1ZGUgPFFXaWRnZXQ+DQorDQordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7DQorDQorUGx1Z2lu
Q29udGFpbmVyU3ltYmlhbjo6UGx1Z2luQ29udGFpbmVyU3ltYmlhbihQbHVnaW5WaWV3KiB2aWV3
LCBRV2lkZ2V0KiBwYXJlbnQpDQorICAgIDogbV9wYXJlbnQocGFyZW50KQ0KKyAgICAsIG1fcGx1
Z2luVmlldyh2aWV3KQ0KKyAgICAsIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlKGZhbHNlKQ0K
K3sNCisgICAgc2V0UGFyZW50KG1fcGFyZW50KTsNCit9DQorDQorUGx1Z2luQ29udGFpbmVyU3lt
Ymlhbjo6flBsdWdpbkNvbnRhaW5lclN5bWJpYW4oKQ0KK3sNCit9DQorDQordm9pZCBQbHVnaW5D
b250YWluZXJTeW1iaWFuOjpyZXF1ZXN0R2VvbWV0cnkoY29uc3QgUVJlY3QmIHJlY3QsIGNvbnN0
IFFSZWdpb24mIGNsaXApDQorew0KKyAgICBpZiAobV93aW5kb3dSZWN0ICE9IHJlY3QgfHwgbV9j
bGlwUmVnaW9uICE9IGNsaXApIHsNCisgICAgICAgIG1fd2luZG93UmVjdCA9IHJlY3Q7DQorICAg
ICAgICBtX2NsaXBSZWdpb24gPSBjbGlwOw0KKyAgICAgICAgbV9oYXNQZW5kaW5nR2VvbWV0cnlD
aGFuZ2UgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgUGx1Z2luQ29udGFpbmVyU3ltYmlh
bjo6YWRqdXN0R2VvbWV0cnkoKQ0KK3sNCisgICAgaWYgKG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hh
bmdlKSB7DQorICAgICAgICBzZXRHZW9tZXRyeShtX3dpbmRvd1JlY3QpOw0KKyAgICAgICAgc2V0
TWFzayhtX2NsaXBSZWdpb24pOw0KKyAgICAgICAgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2Ug
PSBmYWxzZTsNCisgICAgfQ0KK30NCisNCit2b2lkIFBsdWdpbkNvbnRhaW5lclN5bWJpYW46OmZv
Y3VzSW5FdmVudChRRm9jdXNFdmVudCogZXZlbnQpDQorew0KKyAgICBpZiAoUGFnZSogcGFnZSA9
IG1fcGx1Z2luVmlldy0+cGFyZW50RnJhbWUoKS0+cGFnZSgpKQ0KKyAgICAgICAgcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCktPnNldEFjdGl2ZSh0cnVlKTsNCisNCisgICAgbV9wbHVnaW5WaWV3LT5m
b2N1c1BsdWdpbkVsZW1lbnQoKTsNCit9DQorDQordm9pZCBQbHVnaW5Db250YWluZXJTeW1iaWFu
Ojpmb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50KikNCit7DQorICAgIGlmIChQYWdlKiBwYWdlID0g
bV9wbHVnaW5WaWV3LT5wYXJlbnRGcmFtZSgpLT5wYWdlKCkpDQorICAgICAgICBwYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKGZhbHNlKTsNCit9DQpJbmRleDogcGx1Z2lucy9zeW1i
aWFuL1BsdWdpbkRhdGFiYXNlU3ltYmlhbi5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBwbHVnaW5zL3N5
bWJpYW4vUGx1Z2luRGF0YWJhc2VTeW1iaWFuLmNwcAkocmV2aXNpb24gMCkNCisrKyBwbHVnaW5z
L3N5bWJpYW4vUGx1Z2luRGF0YWJhc2VTeW1iaWFuLmNwcAkocmV2aXNpb24gMCkNCkBAIC0wLDAg
KzEsNzkgQEANCisvKg0KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyDQorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VDQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
Lg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsDQorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KKyovDQorI2luY2x1ZGUg
ImNvbmZpZy5oIg0KKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIg0KKw0KKyNpbmNsdWRlIDxR
RmlsZUluZm8+DQorI2luY2x1ZGUgPGYzMmZpbGUuaD4NCisNCitzdGF0aWMgY29uc3QgY2hhciBR
VFBMVUdJTl9GSUxURVJbXSA9ICIqLnF0cGx1Z2luIjsNCitzdGF0aWMgY29uc3QgY2hhciBRVF9Q
TFVHSU5fRk9MREVSW10gPSAiOlxccmVzb3VyY2VcXHF0XFxwbHVnaW5zXFxucHF0cGx1Z2luc1xc
IjsNCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQorVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0
YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpDQorew0KKyAgICBWZWN0b3I8U3RyaW5n
PiBkaXJlY3RvcmllczsNCisgICAgLy9maW5kIHRoZSBpbnN0YWxsYXRpb24gZHJpdmUNCisgICAg
VERyaXZlTGlzdCBkcml2ZWxpc3Q7DQorICAgIFRDaGFyIGRyaXZlTGV0dGVyOw0KKyAgICBSRnMg
ZnNTZXNzaW9uOw0KKyAgICANCisgICAgaWYgKGZzU2Vzc2lvbi5Db25uZWN0KCkgPT0gS0Vyck5v
bmUgJiYgZnNTZXNzaW9uLkRyaXZlTGlzdChkcml2ZWxpc3QpID09IEtFcnJOb25lKSB7DQorICAg
ICAgICBmb3IgKFRJbnQgZHJpdmVOdW1iZXIgPSBFRHJpdmVBOyBkcml2ZU51bWJlciA8PSBFRHJp
dmVaOyBkcml2ZU51bWJlcisrKSB7DQorICAgICAgICAgICAgaWYgKGRyaXZlbGlzdFtkcml2ZU51
bWJlcl0gJiYgZnNTZXNzaW9uLkRyaXZlVG9DaGFyKGRyaXZlTnVtYmVyLCBkcml2ZUxldHRlcikg
PT0gS0Vyck5vbmUpIHsNCisgICAgICAgICAgICAgICAgUVN0cmluZyBkcml2ZVN0cmluZ1ZhbHVl
KFFDaGFyKCh1aW50KWRyaXZlTGV0dGVyLkdldFVwcGVyQ2FzZSgpKSk7DQorICAgICAgICAgICAg
ICAgIFFTdHJpbmcgc3R1YkRpclBhdGg7DQorICAgICAgICAgICAgICAgIHN0dWJEaXJQYXRoLmFw
cGVuZChkcml2ZVN0cmluZ1ZhbHVlKTsNCisgICAgICAgICAgICAgICAgc3R1YkRpclBhdGguYXBw
ZW5kKFFUX1BMVUdJTl9GT0xERVIpOw0KKyAgICAgICAgICAgICAgICBpZiAoUUZpbGVJbmZvKHN0
dWJEaXJQYXRoKS5leGlzdHMoKSkNCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLmFw
cGVuZChzdHViRGlyUGF0aCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQor
DQorICAgIGZzU2Vzc2lvbi5DbG9zZSgpOw0KKyAgICByZXR1cm4gZGlyZWN0b3JpZXM7DQorfQ0K
Kw0KK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYgcGF0aCkNCit7DQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCit2b2lkIFBsdWdp
bkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JiBw
YXRocykgY29uc3QNCit7DQorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5z
ZW5zaXRpdmUgc2V0Lg0KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOw0KKw0K
KyAgICBTdHJpbmcgZmlsZU5hbWVGaWx0ZXIoUVRQTFVHSU5fRklMVEVSKTsNCisNCisgICAgVmVj
dG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGRpcnNFbmQgPSBtX3BsdWdpbkRpcmVjdG9yaWVz
LmVuZCgpOw0KKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkSXQgPSBt
X3BsdWdpbkRpcmVjdG9yaWVzLmJlZ2luKCk7IGRJdCAhPSBkaXJzRW5kOyArK2RJdCkgew0KKyAg
ICAgICAgVmVjdG9yPFN0cmluZz4gcGx1Z2luUGF0aHMgPSBsaXN0RGlyZWN0b3J5KCpkSXQsIGZp
bGVOYW1lRmlsdGVyKTsNCisgICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBw
bHVnaW5zRW5kID0gcGx1Z2luUGF0aHMuZW5kKCk7DQorICAgICAgICBmb3IgKFZlY3RvcjxTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBwSXQgPSBwbHVnaW5QYXRocy5iZWdpbigpOyBwSXQgIT0gcGx1
Z2luc0VuZDsgKytwSXQpIHsNCisgICAgICAgICAgICBpZiAoIWZpbGVFeGlzdHMoKnBJdCkpDQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAgICAgIHBhdGhzLmFkZCgqcEl0KTsN
CisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit9DQpJbmRleDogcGx1Z2lucy9zeW1iaWFuL1Bs
dWdpbkNvbnRhaW5lclN5bWJpYW4uaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHBsdWdpbnMvc3ltYmlhbi9Q
bHVnaW5Db250YWluZXJTeW1iaWFuLmgJKHJldmlzaW9uIDApDQorKysgcGx1Z2lucy9zeW1iaWFu
L1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uaAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNTAgQEAN
CisvKg0KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4NCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KKyovDQorDQorI2lmbmRlZiBQbHVnaW5D
b250YWluZXJTeW1iaWFuX2gNCisjZGVmaW5lIFBsdWdpbkNvbnRhaW5lclN5bWJpYW5faA0KKw0K
KyNpbmNsdWRlIDxRV2lkZ2V0Pg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCisgICAgY2xh
c3MgUGx1Z2luVmlldzsNCisNCisgICAgY2xhc3MgUGx1Z2luQ29udGFpbmVyU3ltYmlhbiA6IHB1
YmxpYyBRV2lkZ2V0IHsNCisgICAgICAgIFFfT0JKRUNUDQorICAgIHB1YmxpYzoNCisgICAgICAg
IFBsdWdpbkNvbnRhaW5lclN5bWJpYW4oUGx1Z2luVmlldyosIFFXaWRnZXQqIHBhcmVudCk7DQor
ICAgICAgICB+UGx1Z2luQ29udGFpbmVyU3ltYmlhbigpOw0KKw0KKyAgICAgICAgdm9pZCByZXF1
ZXN0R2VvbWV0cnkoY29uc3QgUVJlY3QmLCBjb25zdCBRUmVnaW9uJiBjbGlwID0gUVJlZ2lvbigp
KTsNCisgICAgICAgIHZvaWQgYWRqdXN0R2VvbWV0cnkoKTsNCisNCisgICAgcHJvdGVjdGVkOg0K
KyAgICAgICAgdmlydHVhbCB2b2lkIGZvY3VzSW5FdmVudChRRm9jdXNFdmVudCopOw0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqKTsNCisgICAgcHJpdmF0
ZToNCisgICAgICAgIFBsdWdpblZpZXcqIG1fcGx1Z2luVmlldzsNCisgICAgICAgIFFXaWRnZXQq
IG1fcGFyZW50Ow0KKyAgICAgICAgUVJlY3QgbV93aW5kb3dSZWN0Ow0KKyAgICAgICAgUVJlZ2lv
biBtX2NsaXBSZWdpb247DQorICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdl
Ow0KKyAgICB9Ow0KK30NCisNCisjZW5kaWYgLy8gUGx1Z2luQ29udGFpbmVyU3ltYmlhbl9oDQpJ
bmRleDogcGx1Z2lucy9zeW1iaWFuL1BsdWdpblZpZXdTeW1iaWFuLmNwcA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5WaWV3U3ltYmlhbi5jcHAJKHJldmlzaW9uIDApDQor
KysgcGx1Z2lucy9zeW1iaWFuL1BsdWdpblZpZXdTeW1iaWFuLmNwcAkocmV2aXNpb24gMCkNCkBA
IC0wLDAgKzEsNDQ4IEBADQorLyoNCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQ0KKw0KKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
DQorICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcg0KKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQ0KKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4NCisNCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bw0KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLA0KKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4NCisqLw0KKyNp
bmNsdWRlICJjb25maWcuaCINCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIg0KKw0KKyNpbmNsdWRl
ICJEb2N1bWVudC5oIg0KKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIg0KKyNpbmNsdWRlICJF
bGVtZW50LmgiDQorI2luY2x1ZGUgIkZyYW1lLmgiDQorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVl
c3QuaCINCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCINCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgi
DQorI2luY2x1ZGUgIkZyYW1lVmlldy5oIg0KKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIN
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiDQorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50Lmgi
DQorI2luY2x1ZGUgIkltYWdlLmgiDQorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIg0KKyNpbmNs
dWRlICJLZXlib2FyZEV2ZW50LmgiDQorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCINCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCINCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCINCisjaW5jbHVk
ZSAibnBpbnRlcmZhY2UuaCINCisjaW5jbHVkZSAiUGFnZS5oIg0KKyNpbmNsdWRlICJQbGF0Zm9y
bUtleWJvYXJkRXZlbnQuaCINCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiDQorI2lu
Y2x1ZGUgIlBsdWdpbkNvbnRhaW5lclN5bWJpYW4uaCINCisjaW5jbHVkZSAiUGx1Z2luRGVidWcu
aCINCisjaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIg0KKyNpbmNsdWRlICJQ
bHVnaW5QYWNrYWdlLmgiDQorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiDQorI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCINCisjaW5jbHVkZSAiU2V0dGluZ3MuaCINCisjaW5jbHVkZSAibnBy
dW50aW1lX2ltcGwuaCINCisjaW5jbHVkZSAicnVudGltZS5oIg0KKyNpbmNsdWRlICJydW50aW1l
X3Jvb3QuaCINCisjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCINCisjaW5jbHVkZSA8UUtleUV2
ZW50Pg0KKyNpbmNsdWRlIDxRUGl4bWFwLmg+DQorI2luY2x1ZGUgPFFSZWdpb24+DQorI2luY2x1
ZGUgPFFWZWN0b3I+DQorI2luY2x1ZGUgPFFXaWRnZXQ+DQorI2luY2x1ZGUgPHJ1bnRpbWUvSlNM
b2NrLmg+DQorI2luY2x1ZGUgPHJ1bnRpbWUvSlNWYWx1ZS5oPg0KKw0KK3VzaW5nIEpTQzo6RXhl
Y1N0YXRlOw0KK3VzaW5nIEpTQzo6SW50ZXJwcmV0ZXI7DQordXNpbmcgSlNDOjpKU0xvY2s7DQor
dXNpbmcgSlNDOjpKU09iamVjdDsNCit1c2luZyBKU0M6OlVTdHJpbmc7DQorDQordXNpbmcgbmFt
ZXNwYWNlIHN0ZDsNCisNCit1c2luZyBuYW1lc3BhY2UgV1RGOw0KKw0KK25hbWVzcGFjZSBXZWJD
b3JlIHsNCisNCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOw0KKw0KK3ZvaWQgUGx1Z2luVmll
dzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkNCit7DQorICAgIGlmICghcGFyZW50KCkgfHwgIW1faXNX
aW5kb3dlZCkNCisgICAgICAgIHJldHVybjsNCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1l
VmlldygpKTsNCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZp
ZXcqPihwYXJlbnQoKSk7DQorICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVj
dDsNCisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7DQorICAgIA0KKyAgICBt
X3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZVJl
Y3QoKS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKTsNCisgICAgbV9jbGlwUmVjdCA9
IHdpbmRvd0NsaXBSZWN0KCk7DQorICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dSZWN0Lngo
KSwgLW1fd2luZG93UmVjdC55KCkpOw0KKyAgICBpZiAoIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkp
DQorICAgICAgICByZXR1cm47DQorICAgIA0KKyAgICBQbHVnaW5Db250YWluZXJTeW1iaWFuKiBj
b250YWluZXIgPSBzdGF0aWNfY2FzdDxQbHVnaW5Db250YWluZXJTeW1iaWFuKj4ocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSk7DQorICAgIGNvbnRhaW5lci0+cmVxdWVzdEdlb21ldHJ5KG1fd2luZG93
UmVjdCwgUVJlZ2lvbihtX2NsaXBSZWN0KSk7DQorICAgIC8vIGluIG9yZGVyIHRvIG1vdmUvcmVz
aXplIHRoZSBwbHVnaW4gd2luZG93IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIHJlc3Qgb2YgZnJh
bWUNCisgICAgLy8gZHVyaW5nIGUuZy4gc2Nyb2xsaW5nLCB3ZSBzZXQgdGhlIG1hc2sgYW5kIGdl
b21ldHJ5IGluIHRoZSBwYWludCgpIGZ1bmN0aW9uLCBidXQNCisgICAgLy8gYXMgcGFpbnQoKSBp
c24ndCBjYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHdpbmRvdyBpcyBvdXRzaWRlIHRoZSBmcmFtZSB3
aGljaCBjYW4NCisgICAgLy8gYmUgY2F1c2VkIGJ5IGEgc2Nyb2xsLCB3ZSBuZWVkIHRvIG1vdmUv
cmVzaXplIGltbWVkaWF0ZWx5Lg0KKyAgICBpZiAoIW1fd2luZG93UmVjdC5pbnRlcnNlY3RzKGZy
YW1lVmlldy0+ZnJhbWVSZWN0KCkpKQ0KKyAgICAgICAgY29udGFpbmVyLT5hZGp1c3RHZW9tZXRy
eSgpOw0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKCkNCit7DQorICAgIFdpZGdl
dDo6c2V0Rm9jdXMoKTsNCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpzaG93KCkNCit7DQorICAg
IHNldFNlbGZWaXNpYmxlKHRydWUpOw0KKyAgICBXaWRnZXQ6OnNob3coKTsNCit9DQorDQordm9p
ZCBQbHVnaW5WaWV3OjpoaWRlKCkNCit7DQorICAgIHNldFNlbGZWaXNpYmxlKGZhbHNlKTsNCisg
ICAgV2lkZ2V0OjpoaWRlKCk7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQ0KK3sNCisgICAgaWYgKCFt
X2lzU3RhcnRlZCkgew0KKyAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCBy
ZWN0KTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICANCisgICAgaWYgKGNvbnRleHQt
PnBhaW50aW5nRGlzYWJsZWQoKSkNCisgICAgICAgIHJldHVybjsNCisgICAgDQorICAgIGlmICht
X2lzV2luZG93ZWQgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkNCisgICAgICAgIHN0YXRpY19j
YXN0PFBsdWdpbkNvbnRhaW5lclN5bWJpYW4qPihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+YWRq
dXN0R2VvbWV0cnkoKTsNCisNCisgICAgaWYgKCFtX2lzV2luZG93ZWQpIHsNCisgICAgICAgIGlm
ICghcmVjdC5pbnRlcnNlY3RzKGZyYW1lUmVjdCgpKSkNCisgICAgICAgICAgICByZXR1cm47DQor
DQorICAgICAgICBjb250ZXh0LT5zYXZlKCk7DQorICAgICAgICBJbnRSZWN0IGNsaXBSZWN0KHJl
Y3QpOw0KKyAgICAgICAgY2xpcFJlY3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsNCisgICAgICAg
IGNvbnRleHQtPmNsaXAoY2xpcFJlY3QpOw0KKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKGZy
YW1lUmVjdCgpLmxvY2F0aW9uKCkueCgpLCBmcmFtZVJlY3QoKS5sb2NhdGlvbigpLnkoKSk7DQor
ICAgICAgICBOUFBFdmVudERyYXcgZXZlbnREcmF3Ow0KKyAgICAgICAgZXZlbnREcmF3LnBhaW50
ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsNCisgICAgICAgIE5QUEV2ZW50IGV2ZW50
Ow0KKyAgICAgICAgZXZlbnQudHlwZSA9IE5wcEV2ZW50RHJhdzsNCisgICAgICAgIGV2ZW50LmRh
dGEgPSAmZXZlbnREcmF3Ow0KKyAgICAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5l
dmVudCkgew0KKyAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRo
aXMpOw0KKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGZhbHNlKTsNCisgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOw0KKyAgICAgICAg
ICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOw0K
KyAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOw0KKyAgICAgICAgICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOw0KKyAgICAgICAgfQ0KKyAgICAgICAgY29u
dGV4dC0+cmVzdG9yZSgpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
S2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkNCit7DQorICAgIGlmIChtX2lzV2lu
ZG93ZWQpDQorICAgICAgICByZXR1cm47DQorICAgIE5QUEV2ZW50S2V5IGV2S2V5Ow0KKyAgICBl
dktleS5rZXlFdmVudCA9IChldmVudC0+a2V5RXZlbnQoKS0+cXRFdmVudCgpKTsNCisgICAgTlBQ
RXZlbnQgZXY7DQorICAgIGV2LnR5cGUgPSBOcHBFdmVudEtleTsNCisgICAgZXYuZGF0YSA9ICZl
dktleTsNCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkgew0KKyAgICAg
ICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7DQorICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7DQorICAgICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOw0KKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2
ZW50KG1faW5zdGFuY2UsICZldik7DQorICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsN
CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOw0KKyAgICB9DQor
fQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVu
dCkNCit7DQorICAgIGlmIChtX2lzV2luZG93ZWQpDQorICAgICAgICByZXR1cm47DQorICAgIFFF
dmVudDo6VHlwZSB0eXBlOw0KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSAibW91c2Vkb3duIikN
CisgICAgICAgIHR5cGUgPSBRRXZlbnQ6Ok1vdXNlQnV0dG9uUHJlc3M7DQorICAgIGVsc2UgaWYg
KGV2ZW50LT50eXBlKCkgPT0gIm1vdXNlbW92ZSIpDQorICAgICAgICB0eXBlID0gUUV2ZW50OjpN
b3VzZU1vdmU7DQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gIm1vdXNldXAiKQ0KKyAg
ICAgICAgdHlwZSA9IFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlOw0KKyAgICBlbHNlDQorICAg
ICAgICByZXR1cm47DQorICAgIFFQb2ludCBwb3NpdGlvbihldmVudC0+b2Zmc2V0WCgpLCBldmVu
dC0+b2Zmc2V0WSgpKTsNCisgICAgUXQ6Ok1vdXNlQnV0dG9uIGJ1dHRvbjsNCisgICAgc3dpdGNo
IChldmVudC0+d2hpY2goKSkgew0KKyAgICBjYXNlIDE6DQorICAgICAgICBidXR0b24gPSBRdDo6
TGVmdEJ1dHRvbjsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIDI6DQorICAgICAgICBidXR0
b24gPSBRdDo6TWlkQnV0dG9uOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgMzoNCisgICAg
ICAgIGJ1dHRvbiA9IFF0OjpSaWdodEJ1dHRvbjsNCisgICAgICAgIGJyZWFrOw0KKyAgICBkZWZh
dWx0Og0KKyAgICAgICAgYnV0dG9uID0gUXQ6Ok5vQnV0dG9uOw0KKyAgICB9DQorICAgIFF0OjpL
ZXlib2FyZE1vZGlmaWVycyBtb2RpZmllcnMgPSAwOw0KKyAgICBpZiAoZXZlbnQtPmN0cmxLZXko
KSkNCisgICAgICAgIG1vZGlmaWVycyB8PSBRdDo6Q29udHJvbE1vZGlmaWVyOw0KKyAgICBpZiAo
ZXZlbnQtPmFsdEtleSgpKQ0KKyAgICAgICAgbW9kaWZpZXJzIHw9IFF0OjpBbHRNb2RpZmllcjsN
CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQ0KKyAgICAgICAgbW9kaWZpZXJzIHw9IFF0OjpT
aGlmdE1vZGlmaWVyOw0KKyAgICBpZiAoZXZlbnQtPm1ldGFLZXkoKSkNCisgICAgICAgIG1vZGlm
aWVycyB8PSBRdDo6TWV0YU1vZGlmaWVyOw0KKyAgICBRTW91c2VFdmVudCBtb3VzZUV2ZW50KHR5
cGUsIHBvc2l0aW9uLCBidXR0b24sIGJ1dHRvbiwgbW9kaWZpZXJzKTsgDQorICAgIE5QUEV2ZW50
TW91c2UgZXZNb3VzZTsNCisgICAgZXZNb3VzZS5tb3VzZUV2ZW50ID0gJm1vdXNlRXZlbnQ7DQor
ICAgIE5QUEV2ZW50IGV2Ow0KKyAgICBldi50eXBlID0gTnBwRXZlbnRNb3VzZTsNCisgICAgZXYu
ZGF0YSA9ICZldk1vdXNlOw0KKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50
KSB7DQorICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsNCisg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsNCisg
ICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7DQorICAgICAgICBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2KTsNCisgICAgICAgIHNldENhbGxpbmdQbHVn
aW4oZmFsc2UpOw0KKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7
DQorICAgIH0NCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyog
cGFyZW50KQ0KK3sNCisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsNCisgICAgaWYgKHBh
cmVudCkNCisgICAgICAgIGluaXQoKTsNCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdp
bmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkNCit7DQorICAgIGlmICghbV9pc1N0YXJ0ZWQg
fHwgIXBhcmVudCgpKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7
DQorICAgICAgICBJbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkp
LT5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7DQorICAgICAgICBtX25wV2luZG93
LnggPSBwLngoKTsNCisgICAgICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOw0KKyAgICAgICAgbV9u
cFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsNCisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0
ID0gcmVjdC5oZWlnaHQoKTsNCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7
DQorICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7DQorICAgICAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOw0KKyAgICANCisgICAgICAgIGlmIChtX25w
V2luZG93LnggPCAwIHx8IG1fbnBXaW5kb3cueSA8IDAgfHwgbV9ucFdpbmRvdy53aWR0aCA8PSAw
IHx8IG1fbnBXaW5kb3cuaGVpZ2h0IDw9IDApDQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAN
CisgICAgICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7DQorICAg
ICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7DQorICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOw0KKyAg
ICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7DQorICAgICAgICAgICAgbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7DQorICAg
ICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7DQorICAgICAgICAgICAgUGx1Z2luVmll
dzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7DQorICAgIA0KKyAgICAgICAgICAgIGlmICghbV9p
c1dpbmRvd2VkKQ0KKyAgICAgICAgICAgICAgICByZXR1cm47DQorICAgIA0KKyAgICAgICAgICAg
IEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsNCisgICAgICAgIH0NCisgICAgfSBlbHNl
IHsNCisgICAgICAgIC8vIEZJWE1FOiBkb24ndCBjYWxsIE5QUF9zZXRXaW5kb3cgaWYgd2luZG93
IHNpemUgZGlkIG5vdCByZWFsbHkgY2hhbmdlDQorICAgICAgICBtX25wV2luZG93LnggPSAwOw0K
KyAgICAgICAgbV9ucFdpbmRvdy55ID0gMDsNCisgICAgDQorICAgICAgICBtX25wV2luZG93Lndp
ZHRoID0gcmVjdC53aWR0aCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSByZWN0Lmhl
aWdodCgpOw0KKyAgICANCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7DQor
ICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7DQorICAgICAgICBtX25wV2luZG93
LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cg
PSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50
KCktPndpbklkKCk7DQorICAgIA0KKyAgICAgICAgaWYgKG1fbnBXaW5kb3cueCA8IDAgfHwgbV9u
cFdpbmRvdy55IDwgMA0KKyAgICAgICAgICAgIHx8IG1fbnBXaW5kb3cud2lkdGggPD0gMCB8fCBt
X25wV2luZG93LmhlaWdodCA8PSAwKQ0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgDQorICAg
ICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgew0KKyAgICAgICAg
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOw0KKyAgICAgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsNCisgICAgICAg
ICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOw0KKyAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOw0KKyAgICAgICAg
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOw0KKyAgICAgICAgICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KDApOw0KKyAgICANCisgICAgICAgIH0NCisgICAgfQ0KK30NCisN
CitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1
ZmZlciwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmKQ0KK3sNCisgICAgIG5vdEltcGxlbWVu
dGVkKCk7DQorfQ0KKw0KK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUg
dmFyaWFibGUsIHZvaWQqIHZhbHVlKQ0KK3sNCisgICAgc3dpdGNoICh2YXJpYWJsZSkgew0KKyAg
ICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6IHsNCisgICAgICAgICAgICBOUEJvb2wqIHJl
c3VsdCA9IHN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKTsNCisgICAgICAgICAgICAqcmVzdWx0
ID0gdHJ1ZTsNCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7DQorICAgICAgICB9
DQorICAgICAgICANCisgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsNCisgICAgICAgIGlm
IChtX2lzSmF2YVNjcmlwdFBhdXNlZCkNCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsNCisNCisgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3Bh
cmVudEZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsNCisNCisgICAgICAg
IC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVk
IGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUu
aHRtbD4NCisgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpDQorICAgICAgICAgICAgX05Q
Tl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsNCisNCisgICAgICAgIHZvaWQqKiB2
ID0gKHZvaWQqKil2YWx1ZTsNCisgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0Ow0KKyAg
ICAgICAgICAgIA0KKyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOw0KKyAgICB9DQorDQor
ICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogew0KKyAgICAgICAgaWYgKG1faXNK
YXZhU2NyaXB0UGF1c2VkKQ0KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
Ow0KKw0KKyAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7DQorDQorICAg
ICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5o
YXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkN
CisgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0lu
RWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7DQorDQorICAgICAgICAvLyBSZXR1
cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8
aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+DQor
ICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQ0KKyAgICAgICAgICAgIF9OUE5fUmV0YWlu
T2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7DQorDQorICAgICAgICB2b2lkKiogdiA9ICh2b2lk
KiopdmFsdWU7DQorICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsNCisNCisgICAgICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsNCisgICAgfSAgICAgICAgDQorICAgIH0NCisgICAgcmV0
dXJuIE5QRVJSX05PX0VSUk9SOw0KK30NCisNCitOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVl
U3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkNCit7DQorICAgIHJldHVy
biBOUEVSUl9HRU5FUklDX0VSUk9SOw0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRh
dGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpDQorew0KKyAgICBpZiAocGxhdGZvcm1XaWRnZXQo
KSkgew0KKyAgICAgICAgcGxhdGZvcm1XaWRnZXQoKS0+dXBkYXRlKHJlY3QpOw0KKyAgICAgICAg
cmV0dXJuOw0KKyAgICB9DQorICAgIA0KKyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJl
Y3QocmVjdCk7DQorfQ0KKyAgICANCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5Q
UmVjdCogcmVjdCkNCit7DQorICAgIGlmIChtX2lzV2luZG93ZWQgfHwgIXJlY3QpDQorICAgICAg
ICByZXR1cm47DQorICAgICAgICANCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRv
cCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOw0K
KyAgICBtX2ludmFsaWRSZWN0cy5hcHBlbmQocik7DQorICAgIGlmICghbV9pbnZhbGlkYXRlVGlt
ZXIuaXNBY3RpdmUoKSkNCisgICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgw
LjAwMSk7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lv
biByZWdpb24pDQorew0KKyAgICBpZiAobV9pc1dpbmRvd2VkKQ0KKyAgICAgICAgcmV0dXJuOw0K
KyAgICANCisgICAgUVJlZ2lvbiogciA9IHN0YXRpY19jYXN0PFFSZWdpb24qPihyZWdpb24pOw0K
KyAgICBpZiAoIXIpIA0KKyAgICAgICAgcmV0dXJuOw0KKyAgICANCisgICAgUVZlY3RvcjxRUmVj
dD4gcmVjdHMgPSByLT5yZWN0cygpOw0KKyAgICBmb3IgKGludCBpID0gMTsgaSA8IHJlY3RzLnNp
emUoKTsgKytpKSB7DQorICAgICAgICBjb25zdCBRUmVjdCYgcVJlY3QgPSByZWN0cy5hdChpKTsN
CisgICAgICAgIEludFJlY3QgcihxUmVjdCk7DQorICAgICAgICBtX2ludmFsaWRSZWN0cy5hcHBl
bmQocik7DQorICAgICAgICBpZiAoIW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0aXZlKCkpDQorICAg
ICAgICAgICAgbV9pbnZhbGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDAuMDAxKTsNCisgICAgICAg
IH0NCit9DQorDQordm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpDQorew0KKyAgICBpZiAo
bV9pc1dpbmRvd2VkKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBRV2ViUGFnZUNsaWVudCogY2xp
ZW50ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpOyAgICANCisgICAgUVJlY3QgcXJlY3QgPSAoUVdpZGdldDo6ZmluZChjbGllbnQtPndp
bklkKCkpKS0+cmVjdCgpOw0KKyAgICBJbnRSZWN0IHIocXJlY3QueCgpLCBxcmVjdC55KCksIHFy
ZWN0LndpZHRoKCksIHFyZWN0LmhlaWdodCgpKTsNCisgICAgbV9pbnZhbGlkUmVjdHMuYXBwZW5k
KHIpOw0KKyAgICBpZiAoIW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0aXZlKCkpDQorICAgICAgICBt
X2ludmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4wMDEpOw0KKw0KK30NCitib29sIFBsdWdp
blZpZXc6OnBsYXRmb3JtU3RhcnQoKQ0KK3sNCisJQVNTRVJUKG1faXNTdGFydGVkKTsNCisgICAg
QVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7DQorICAg
IA0KKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7DQorICAgICAgICBRV2ViUGFnZUNsaWVudCogY2xp
ZW50ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpOw0KKyAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQobmV3IFBsdWdpbkNvbnRhaW5lclN5
bWJpYW4odGhpcywgUVdpZGdldDo6ZmluZChjbGllbnQtPndpbklkKCkpKSk7DQorICAgICAgICBz
aG93KCk7DQorICAgICAgICANCisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlw
ZVdpbmRvdzsNCisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKXBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCk7DQorDQorICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkpOw0K
KyAgICB9IGVsc2Ugew0KKyAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7DQorICAgICAgICBz
aG93KCk7DQorICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsN
CisgICAgICAgIHNldE5QV2luZG93UmVjdChmcmFtZVJlY3QoKSk7DQorICAgIH0gICAgDQorICAg
IA0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpDQorew0KKyAgICBp
ZiAocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkNCisgICAgICAgIGRlbGV0ZSBwbGF0Zm9ybVBsdWdp
bldpZGdldCgpOw0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudFZpc2libGUoYm9v
bCB2aXNpYmxlKQ0KK3sNCisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpDQor
ICAgICAgICByZXR1cm47DQorDQorICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxl
KTsNCisNCisgICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgp
KQ0KKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsN
CisNCit9DQorDQorDQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0KSW5kZXg6IHBsdWdpbnMvc3lt
Ymlhbi9QbHVnaW5QYWNrYWdlU3ltYmlhbi5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBwbHVnaW5zL3N5
bWJpYW4vUGx1Z2luUGFja2FnZVN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQ0KKysrIHBsdWdpbnMv
c3ltYmlhbi9QbHVnaW5QYWNrYWdlU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApDQpAQCAtMCwwICsx
LDIwMSBAQA0KKy8qDQorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykNCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYw0KKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXINCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLg0KKw0KKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUNCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
DQorDQorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8NCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwNCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuDQorKi8NCisjaW5jbHVkZSAi
Y29uZmlnLmgiDQorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCINCisNCisjaW5jbHVkZSAiQ1N0
cmluZy5oIg0KKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiDQorI2luY2x1ZGUgIm5waW50
ZXJmYWNlLmgiDQorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiDQorI2luY2x1ZGUgIlBsdWdp
bkRhdGFiYXNlLmgiDQorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiDQorI2luY2x1ZGUgPFFQbHVn
aW5Mb2FkZXI+DQorDQorbmFtZXNwYWNlIFdlYkNvcmUgew0KKw0KK2Jvb2wgUGx1Z2luUGFja2Fn
ZTo6ZmV0Y2hJbmZvKCkNCit7DQorICAgIGlmICghbG9hZCgpKQ0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOw0KKw0KKyAgICBjaGFyKiBidWYgPSAwOw0KKyAgICBOUEVycm9yIGVyciA9IG1fcGx1Z2lu
RnVuY3MuZ2V0dmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsICh2b2lkICopJmJ1Zik7DQor
ICAgIG1fbmFtZSA9IGJ1ZjsNCisgICAgZXJyID0gbV9wbHVnaW5GdW5jcy5nZXR2YWx1ZSgwLCBO
UFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsICh2b2lkICopJmJ1Zik7DQorICAgIG1fZGVzY3Jp
cHRpb24gPSBidWY7DQorDQorICAgIGRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRp
b24oKTsNCisNCisgICAgU3RyaW5nIHMgPSBtX25wSW50ZXJmYWNlLT5OUF9HZXRNSU1FRGVzY3Jp
cHRpb24oKTsNCisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7DQorICAgIHMuc3BsaXQoVUNoYXIo
J3wnKSwgZmFsc2UsIHR5cGVzKTsgIC8vIDxNSU1FMT47PGV4dDEsZXh0MixleHQzLC4uLj47PERl
c2NyaXB0aW9uPnw8TUlNRTI+fDxNSU1FMz58Li4uDQorDQorICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdHlwZXMuc2l6ZSgpOyArK2kpIHsNCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1pbWU7DQor
ICAgICAgICB0eXBlc1tpXS5zcGxpdChVQ2hhcignOycpLCB0cnVlLCBtaW1lKTsgIC8vIDxNSU1F
MT47PGV4dDEsZXh0MixleHQzLC4uLj47PERlc2NyaXB0aW9uPg0KKyAgICAgICAgaWYgKG1pbWUu
c2l6ZSgpID4gMCkgew0KKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dHM7DQorICAgICAg
ICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMSkNCisgICAgICAgICAgICAgICAgbWltZVsxXS5zcGxp
dChVQ2hhcignLCcpLCBmYWxzZSwgZXh0cyk7IC8vIDxleHQxLGV4dDIsZXh0MywuLi4+DQorICAg
ICAgICAgICAgDQorICAgICAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lWzBdLCBl
eHRzKTsgLy8gPE1JTUU+LDxleHQxLGV4dDIsZXh0Mz4NCisgICAgICAgICAgICBpZiAobWltZS5z
aXplKCkgPiAyKQ0KKyAgICAgICAgICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWlt
ZVswXSwgbWltZVsyXSk7IC8vIDxNSU1FPiw8RGVzY3JpcHRpb24+DQorICAgICAgICB9DQorICAg
IH0NCisgICAgdW5sb2FkKCk7DQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCitib29sIFBsdWdp
blBhY2thZ2U6OmxvYWQoKQ0KK3sNCisgICAgaWYgKG1faXNMb2FkZWQpIHsNCisgICAgICAgIG1f
bG9hZENvdW50Kys7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBtX3Bs
dWdpbkxvYWRlciA9IG5ldyBRUGx1Z2luTG9hZGVyKG1fcGF0aCk7DQorICAgIGlmICghbV9wbHVn
aW5Mb2FkZXItPmxvYWQoKSkgew0KKyAgICAgICAgZGVsZXRlIG1fcGx1Z2luTG9hZGVyOw0KKyAg
ICAgICAgbV9wbHVnaW5Mb2FkZXIgPSAwOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9
DQorDQorICAgIFFPYmplY3QqIHBsdWdpbiA9IG1fcGx1Z2luTG9hZGVyLT5pbnN0YW5jZSgpOw0K
KyAgICBpZiAoIXBsdWdpbikgew0KKyAgICAgICAgbV9wbHVnaW5Mb2FkZXItPnVubG9hZCgpOw0K
KyAgICAgICAgZGVsZXRlIG1fcGx1Z2luTG9hZGVyOw0KKyAgICAgICAgbV9wbHVnaW5Mb2FkZXIg
PSAwOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIC8vIFBsdWdpbiBp
bnN0YW5jZSBjcmVhdGVkDQorICAgIC8vIENhc3QgcGx1Z2luIHRvIE5QSW50ZXJmYWNlLA0KKyAg
ICBtX25wSW50ZXJmYWNlID0gcW9iamVjdF9jYXN0PE5QSW50ZXJmYWNlICo+KHBsdWdpbik7DQor
ICAgIGlmICghbV9ucEludGVyZmFjZSkgew0KKyAgICAgICAgbV9wbHVnaW5Mb2FkZXItPnVubG9h
ZCgpOw0KKyAgICAgICAgZGVsZXRlIG1fcGx1Z2luTG9hZGVyOw0KKyAgICAgICAgbV9wbHVnaW5M
b2FkZXIgPSAwOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIG1faXNM
b2FkZWQgPSB0cnVlOw0KKyAgICANCisgICAgTlBFcnJvciBucEVycjsNCisgICAgbWVtc2V0KCZt
X3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOw0KKyAgICBtX3BsdWdpbkZ1
bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7DQorICAgIG1fYnJvd3NlckZ1bmNzLnNp
emUgPSBzaXplb2YobV9icm93c2VyRnVuY3MpOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9u
ID0gTlBfVkVSU0lPTl9NSU5PUjsNCisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dl
dFVSTDsNCisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOw0KKyAgICBt
X2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsNCisgICAgbV9icm93
c2VyRnVuY3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsNCisgICAgbV9icm93c2VyRnVuY3Mu
d3JpdGUgPSBOUE5fV3JpdGU7DQorICAgIG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBO
UE5fRGVzdHJveVN0cmVhbTsNCisgICAgbV9icm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1
czsNCisgICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsNCisgICAgbV9i
cm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7DQorICAgIG1fYnJvd3NlckZ1bmNz
Lm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsNCisgICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBO
UE5fTWVtRmx1c2g7DQorICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVs
b2FkUGx1Z2luczsNCisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVS
TE5vdGlmeTsNCisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJM
Tm90aWZ5Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1ZTsNCisg
ICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7DQorICAgIG1fYnJvd3Nl
ckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0Ow0KKyAgICBtX2Jyb3dz
ZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247DQorICAgIG1f
YnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3Ow0KKyAgICBtX2Jyb3dz
ZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7DQorICAgIG1fYnJvd3NlckZ1bmNz
LmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5wdXNo
cG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7DQorICAgIG1f
YnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVk
U3RhdGU7DQorICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1Jl
bGVhc2VWYXJpYW50VmFsdWU7DQorICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZp
ZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7DQorICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0
cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsNCisgICAgbV9icm93
c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0SW50SWRlbnRpZmllcjsNCisgICAg
bV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJp
bmc7DQorICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZy
b21JZGVudGlmaWVyOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0Ny
ZWF0ZU9iamVjdDsNCisgICAgbV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRh
aW5PYmplY3Q7DQorICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVh
c2VPYmplY3Q7DQorICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9IF9OUE5fSW52b2tlOw0KKyAg
ICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0Ow0KKyAg
ICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7DQorICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldHByb3BlcnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsNCisgICAgbV9icm93c2VyRnVu
Y3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5y
ZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7DQorICAgIG1fYnJvd3NlckZ1bmNz
Lmhhc3Byb3BlcnR5ID0gX05QTl9IYXNNZXRob2Q7DQorICAgIG1fYnJvd3NlckZ1bmNzLmhhc21l
dGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7DQorICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlv
biA9IF9OUE5fU2V0RXhjZXB0aW9uOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBf
TlBOX0VudW1lcmF0ZTsNCisgICAgbV9icm93c2VyRnVuY3MuY29uc3RydWN0ID0gX05QTl9Db25z
dHJ1Y3Q7DQorDQorICAgIG5wRXJyID0gbV9ucEludGVyZmFjZS0+TlBfSW5pdGlhbGl6ZSgmbV9i
cm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNzKTsNCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05P
X0VSUk9SKSB7DQorICAgICAgICBtX3BsdWdpbkxvYWRlci0+dW5sb2FkKCk7DQorICAgICAgICBk
ZWxldGUgbV9wbHVnaW5Mb2FkZXI7DQorICAgICAgICBtX3BsdWdpbkxvYWRlciA9IDA7DQorICAg
ICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgbV9sb2FkQ291bnQrKzsNCisgICAg
cmV0dXJuIHRydWU7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkKCkNCit7DQor
ICAgIGlmICghbV9pc0xvYWRlZCkNCisgICAgICAgIHJldHVybjsNCisNCisgICAgaWYgKC0tbV9s
b2FkQ291bnQgPiAwKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgDQorICAgIG1faXNMb2Fk
ZWQgPSBmYWxzZTsNCisgICAgbV9ucEludGVyZmFjZS0+TlBfU2h1dGRvd24oKTsNCisNCisgICAg
bV9wbHVnaW5Mb2FkZXItPnVubG9hZCgpOw0KKyAgICBkZWxldGUgbV9wbHVnaW5Mb2FkZXI7DQor
ICAgIG1fcGx1Z2luTG9hZGVyID0gMDsNCit9DQorDQordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6
aGFzaCgpIGNvbnN0DQoreyANCisgICAgdW5zaWduZWQgaGFzaENvZGVzWzJdID0gew0KKyAgICAg
ICAgbV9wYXRoLmltcGwoKS0+aGFzaCgpLA0KKyAgICAgICAgbV9sYXN0TW9kaWZpZWQNCisgICAg
fTsNCisNCisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nh
c3Q8VUNoYXIqPihoYXNoQ29kZXMpLCAyICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hh
cikpOw0KK30NCisNCitib29sIFBsdWdpblBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2th
Z2UmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2UmIGIpDQorew0KKyAgICByZXR1cm4gYS5tX2Rlc2Ny
aXB0aW9uID09IGIubV9kZXNjcmlwdGlvbjsNCit9DQorDQoraW50IFBsdWdpblBhY2thZ2U6OmNv
bXBhcmVGaWxlVmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIGNvbXBhcmVWZXJz
aW9uKSBjb25zdA0KK3sNCisgICAgLy8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBsdWctaW4gdmVy
c2lvbiBpcyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4NCisgICAgLy8gdGhl
IHBhc3NlZCB2ZXJzaW9uDQorICAgIGlmIChtX21vZHVsZVZlcnNpb24gIT0gY29tcGFyZVZlcnNp
b24pDQorICAgICAgICByZXR1cm4gbV9tb2R1bGVWZXJzaW9uID4gY29tcGFyZVZlcnNpb24gPyAx
IDogLTE7DQorICAgIHJldHVybiAwOw0KK30NCisNCit9DQovLyBuYW1lc3BhY2UgV2ViQ29yZQ0K
SW5kZXg6IFdlYkNvcmUucHJvDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS5wcm8JKHJldmlzaW9u
IDQ4OTYxKQ0KKysrIFdlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpDQpAQCAtMTIsNiArMTIsMTMg
QEANCiAgICAgREVQTE9ZTUVOVCArPSB3ZWJraXRsaWJzDQogDQogICAgIFRBUkdFVC5VSUQzID0g
MHgyMDAyNjdDMg0KKyAgICANCisgICAgQkxEX0lORl9SVUxFUy5wcmpfZXhwb3J0cyArPSBcDQor
ICAgICJwbHVnaW5zL3N5bWJpYW4vbnBpbnRlcmZhY2UuaCAgICAgICAgJCRNV19MQVlFUl9ET01B
SU5fRVhQT1JUX1BBVEgoY3dydC9ucGludGVyZmFjZS5oKSIgXA0KKyAgICAicGx1Z2lucy9ucGZ1
bmN0aW9ucy5oICAgICAgICAgICAgICAgICQkTVdfTEFZRVJfRE9NQUlOX0VYUE9SVF9QQVRIKGN3
cnQvbnBmdW5jdGlvbnMuaCkiIFwNCisgICAgImJyaWRnZS9ucGFwaS5oICAgICAgICAgICAgICAg
ICAgICAgICAkJE1XX0xBWUVSX0RPTUFJTl9FWFBPUlRfUEFUSChjd3J0L25wYXBpLmgpIiBcDQor
ICAgICJicmlkZ2UvbnBydW50aW1lLmggICAgICAgICAgICAgICAgICAgJCRNV19MQVlFUl9ET01B
SU5fRVhQT1JUX1BBVEgoY3dydC9ucHJ1bnRpbWUuaCkiDQorDQogfQ0KIA0KIGluY2x1ZGUoJCRQ
V0QvLi4vV2ViS2l0LnByaSkNCkBAIC0xNjEsNyArMTY4LDcgQEANCiANCiAjIE5lc2NhcGUgcGx1
Z2lucyBzdXBwb3J0IChOUEFQSSkNCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX05FVFNDQVBF
X1BMVUdJTl9BUEk9Likgew0KLSAgICB1bml4fHdpbjMyLSo6IWVtYmVkZGVkOiF3aW5jZSo6IXN5
bWJpYW4gew0KKyAgICB1bml4fHdpbjMyLSo6IWVtYmVkZGVkOiF3aW5jZSo6c3ltYmlhbiB7DQog
ICAgICAgICBERUZJTkVTICs9IEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJPTENCiAgICAgfSBl
bHNlIHsNCiAgICAgICAgIERFRklORVMgKz0gRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEk9MA0K
QEAgLTI0MzksNDkgKzI0NDYsNjAgQEANCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTkVUU0NB
UEVfUExVR0lOX0FQST0xKSB7DQogDQogICAgIFNPVVJDRVMgKz0gcGx1Z2lucy9ucGFwaS5jcHAN
CisgICAgDQorICAgIHN5bWJpYW4gew0KKyAgICAgICAgU09VUkNFUyArPSBcDQorICAgICAgICBw
bHVnaW5zL3N5bWJpYW4vUGx1Z2luUGFja2FnZVN5bWJpYW4uY3BwIFwNCisgICAgICAgIHBsdWdp
bnMvc3ltYmlhbi9QbHVnaW5EYXRhYmFzZVN5bWJpYW4uY3BwIFwNCisgICAgICAgIHBsdWdpbnMv
c3ltYmlhbi9QbHVnaW5WaWV3U3ltYmlhbi5jcHAgXA0KKyAgICAgICAgcGx1Z2lucy9zeW1iaWFu
L1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uY3BwDQogDQotICAgIHVuaXggew0KLSAgICAgICAgREVG
SU5FUyArPSBFTkFCTEVfUExVR0lOX1BBQ0tBR0VfU0lNUExFX0hBU0g9MQ0KLQ0KLSAgICAgICAg
bWFjIHsNCi0gICAgICAgICAgICBTT1VSQ0VTICs9IFwNCi0gICAgICAgICAgICAgICAgcGx1Z2lu
cy9tYWMvUGx1Z2luUGFja2FnZU1hYy5jcHAgXA0KLSAgICAgICAgICAgICAgICBwbHVnaW5zL21h
Yy9QbHVnaW5WaWV3TWFjLmNwcA0KLSAgICAgICAgICAgIE9CSkVDVElWRV9TT1VSQ0VTICs9IFwN
Ci0gICAgICAgICAgICAgICAgcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5nSW1wbE1hYy5tbSBcDQot
ICAgICAgICAgICAgICAgIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMubW0NCi0g
ICAgICAgICAgICBJTkNMVURFUEFUSCArPSBwbGF0Zm9ybS9tYWMNCi0gICAgICAgICAgICAjIE5v
dGU6IFhQX01BQ09TWCBpcyBkZWZpbmVkIGluIG5wYXBpLmgNCi0gICAgICAgIH0gZWxzZSB7DQot
ICAgICAgICAgICAgIWVtYmVkZGVkOiBDT05GSUcgKz0geDExDQotICAgICAgICAgICAgU09VUkNF
UyArPSBcDQotICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuY3Bw
IFwNCi0gICAgICAgICAgICAgICAgcGx1Z2lucy9xdC9QbHVnaW5QYWNrYWdlUXQuY3BwIFwNCi0g
ICAgICAgICAgICAgICAgcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwDQotICAgICAgICAgICAg
SEVBREVSUyArPSBcDQotICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVy
UXQuaA0KLSAgICAgICAgICAgIERFRklORVMgKz0gWFBfVU5JWA0KKyAgICAgICAgSEVBREVSUyAr
PSBcDQorICAgICAgICBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFpbmVyU3ltYmlhbi5oIFwN
CisgICAgICAgIHBsdWdpbnMvc3ltYmlhbi9ucGludGVyZmFjZS5oDQorICAgIH0gZWxzZSB7DQor
ICAgICAgICB1bml4IHsNCisgICAgICAgICAgICBERUZJTkVTICs9IEVOQUJMRV9QTFVHSU5fUEFD
S0FHRV9TSU1QTEVfSEFTSD0xDQorICAgIA0KKyAgICAgICAgICAgIG1hYyB7DQorICAgICAgICAg
ICAgICAgIFNPVVJDRVMgKz0gXA0KKyAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy9tYWMvUGx1
Z2luUGFja2FnZU1hYy5jcHAgXA0KKyAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy9tYWMvUGx1
Z2luVmlld01hYy5jcHANCisgICAgICAgICAgICAgICAgT0JKRUNUSVZFX1NPVVJDRVMgKz0gXA0K
KyAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5nSW1wbE1hYy5tbSBc
DQorICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFz
Lm1tDQorICAgICAgICAgICAgICAgIElOQ0xVREVQQVRIICs9IHBsYXRmb3JtL21hYw0KKyAgICAg
ICAgICAgICAgICAjIE5vdGU6IFhQX01BQ09TWCBpcyBkZWZpbmVkIGluIG5wYXBpLmgNCisgICAg
ICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAhZW1iZWRkZWQ6IENPTkZJRyArPSB4
MTENCisgICAgICAgICAgICAgICAgU09VUkNFUyArPSBcDQorICAgICAgICAgICAgICAgICAgICBw
bHVnaW5zL3F0L1BsdWdpbkNvbnRhaW5lclF0LmNwcCBcDQorICAgICAgICAgICAgICAgICAgICBw
bHVnaW5zL3F0L1BsdWdpblBhY2thZ2VRdC5jcHAgXA0KKyAgICAgICAgICAgICAgICAgICAgcGx1
Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwDQorICAgICAgICAgICAgICAgIEhFQURFUlMgKz0gXA0K
KyAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy9xdC9QbHVnaW5Db250YWluZXJRdC5oDQorICAg
ICAgICAgICAgICAgIERFRklORVMgKz0gWFBfVU5JWA0KKyAgICAgICAgICAgIH0NCiAgICAgICAg
IH0NCisgICAgDQorICAgICAgICB3aW4zMi0qIHsNCisgICAgICAgICAgICBJTkNMVURFUEFUSCAr
PSAkJFBXRC9wbHVnaW5zL3dpbg0KKyAgICANCisgICAgICAgICAgICBTT1VSQ0VTICs9IHBhZ2Uv
d2luL1BhZ2VXaW4uY3BwIFwNCisgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvd2luL1Bs
dWdpbkRhdGFiYXNlV2luLmNwcCBcDQorICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dp
bi9QbHVnaW5QYWNrYWdlV2luLmNwcCBcDQorICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5z
L3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBcDQorICAgICAgICAgICAgICAgICAg
ICAgICBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcA0KKyAgICANCisgICAgICAgICAgICBM
SUJTICs9IFwNCisgICAgICAgICAgICAgICAgLWxhZHZhcGkzMiBcDQorICAgICAgICAgICAgICAg
IC1sZ2RpMzIgXA0KKyAgICAgICAgICAgICAgICAtbHNoZWxsMzIgXA0KKyAgICAgICAgICAgICAg
ICAtbHNobHdhcGkgXA0KKyAgICAgICAgICAgICAgICAtbHVzZXIzMiBcDQorICAgICAgICAgICAg
ICAgIC1sdmVyc2lvbg0KKyAgICAgICAgfQ0KICAgICB9DQotDQotICAgIHdpbjMyLSogew0KLSAg
ICAgICAgSU5DTFVERVBBVEggKz0gJCRQV0QvcGx1Z2lucy93aW4NCi0NCi0gICAgICAgIFNPVVJD
RVMgKz0gcGFnZS93aW4vUGFnZVdpbi5jcHAgXA0KLSAgICAgICAgICAgICAgICAgICBwbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAgXA0KLSAgICAgICAgICAgICAgICAgICBwbHVnaW5z
L3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcCBcDQotICAgICAgICAgICAgICAgICAgIHBsdWdpbnMv
d2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIFwNCi0gICAgICAgICAgICAgICAgICAg
cGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHANCi0NCi0gICAgICAgIExJQlMgKz0gXA0KLSAg
ICAgICAgICAgIC1sYWR2YXBpMzIgXA0KLSAgICAgICAgICAgIC1sZ2RpMzIgXA0KLSAgICAgICAg
ICAgIC1sc2hlbGwzMiBcDQotICAgICAgICAgICAgLWxzaGx3YXBpIFwNCi0gICAgICAgICAgICAt
bHVzZXIzMiBcDQotICAgICAgICAgICAgLWx2ZXJzaW9uDQotICAgIH0NCi0NCiB9IGVsc2Ugew0K
ICAgICBTT1VSQ0VTICs9IFwNCiAgICAgICAgIHBsdWdpbnMvUGx1Z2luUGFja2FnZU5vbmUuY3Bw
IFwNCg==
</data>
<flag name="review"
          id="21648"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41006</attachid>
            <date>2009-10-11 16:27:33 -0700</date>
            <delta_ts>2009-10-12 17:53:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>29302.patch</filename>
            <type>text/plain</type>
            <size>42714</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvY29uZmlnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jb25maWcuaAko
cmV2aXNpb24gNDk0MjIpCisrKyBXZWJDb3JlL2NvbmZpZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDQsNiArMTQ0LDcgQEAKICNpZiBQTEFURk9STShTWU1CSUFOKQogI3VuZGVmIFdJTjMyCiAjdW5k
ZWYgX1dJTjMyCisjdW5kZWYgWFBfV0lOCiAjdW5kZWYgU0tJUF9TVEFUSUNfQ09OU1RSVUNUT1JT
X09OX0dDQwogI2RlZmluZSBVU0VfU1lTVEVNX01BTExPQyAxCiAjZGVmaW5lIFVfSEFWRV9JTlQ4
X1QgMApJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCShyZXZpc2lvbiA0OTQyMikKKysrIFdlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMSw3ICszMTEsNyBAQAog
CiBwcml2YXRlOgogCi0jaWYgZGVmaW5lZChYUF9VTklYKSB8fCBkZWZpbmVkKFFfV1NfWDExKQor
I2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgZGVmaW5lZChRX1dTX1gxMSkgfHwgUExBVEZPUk0oU1lN
QklBTikKICAgICAgICAgdm9pZCBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CiAjZWxpZiBkZWZpbmVk
KFhQX01BQ09TWCkKICAgICAgICAgTlBfQ0dDb250ZXh0IG1fbnBDZ0NvbnRleHQ7CkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCShyZXZpc2lvbiA0OTQyMikKKysrIFdlYkNvcmUvcGx1
Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMyw3IEBA
CiAgICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3RoKCkgLSBt
X2ZpbGVOYW1lLmxlbmd0aCgpIC0gMSk7CiB9CiAKKyNpZiAhUExBVEZPUk0oU1lNQklBTikKIHZv
aWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkKCkKIHsKICAgICBpZiAoIW1faXNMb2FkZWQpCkBAIC0x
MjUsNiArMTI2LDcgQEAKIAogICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwogfQorI2VuZGlm
IC8vIVBMQVRGT1JNKFNZTUJJQU4pCiAKIHZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkV2l0aG91
dFNodXRkb3duKCkKIHsKQEAgLTE5Niw3ICsxOTgsNyBAQAogfQogI2VuZGlmCiAKLSNpZiAhUExB
VEZPUk0oV0lOX09TKQorI2lmIFBMQVRGT1JNKFNZTUJJQU4pIHx8ICFQTEFURk9STShXSU5fT1Mp
CiB2b2lkIFBsdWdpblBhY2thZ2U6OmRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRp
b24oKQogewogICAgIC8vIEl0J3MgYSBiaXQgbGFtZSB0byBkZXRlY3QgdGhlIHBsdWdpbiB2ZXJz
aW9uIGJ5IHBhcnNpbmcgaXQKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAkocmV2
aXNpb24gNDk0MjIpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAKICAgICBtX3ByZWZlcnJlZFBsdWdpbnMuY2xl
YXIoKTsKIH0KIAotI2lmICFQTEFURk9STShXSU5fT1MpIHx8IFBMQVRGT1JNKFdYKQorI2lmICgh
UExBVEZPUk0oU1lNQklBTikpICYmICghUExBVEZPUk0oV0lOX09TKSB8fCBQTEFURk9STShXWCkp
CiAvLyBGb3IgU2FmYXJpL1dpbiB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMgYXJlIGltcGxl
bWVudGVkCiAvLyBpbiBQbHVnaW5EYXRhYmFzZVdpbi5jcHAsIGJ1dCBpZiB3ZSBjYW4gdXNlIFdl
YkNvcmUgY29uc3RydWN0cwogLy8gZm9yIHRoZSBsb2dpYyB3ZSBzaG91bGQgcGVyaGFwcyBtb3Zl
IGl0IGhlcmUgdW5kZXIgWFBfV0lOPwpAQCAtNDI4LDYgKzQyOCw2IEBACiAgICAgfQogfQogCi0j
ZW5kaWYgLy8gIVBMQVRGT1JNKFdJTl9PUykKKyNlbmRpZiAvLyAhUExBVEZPUk0oU1lNQklBTikg
JiYgIVBMQVRGT1JNKFdJTl9PUykKIAogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2
aXNpb24gNDk0MjIpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDYgKzY5LDEwIEBACiAjaW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+CiAj
aW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KIAorI2lmIENPTVBJTEVSKFdJTlNDVykKKyN1bmRl
ZiBYUF9XSU4KKyNlbmRpZgorCiB1c2luZyBKU0M6OkV4ZWNTdGF0ZTsKIHVzaW5nIEpTQzo6SlNM
b2NrOwogdXNpbmcgSlNDOjpKU09iamVjdDsKQEAgLTEyNCw4ICsxMjgsOCBAQAogCiAgICAgdXBk
YXRlUGx1Z2luV2lkZ2V0KCk7CiAKLSNpZiBQTEFURk9STShXSU5fT1MpCi0gICAgLy8gT24gV2lu
ZG93cywgYWx3YXlzIGNhbGwgcGx1Z2luIHRvIGNoYW5nZSBnZW9tZXRyeS4KKyNpZiBQTEFURk9S
TShXSU5fT1MpIHx8IFBMQVRGT1JNKFNZTUJJQU4pCisgICAgLy8gT24gV2luZG93cyBhbmQgU3lt
YmlhbiwgYWx3YXlzIGNhbGwgcGx1Z2luIHRvIGNoYW5nZSBnZW9tZXRyeS4KICAgICBzZXROUFdp
bmRvd1JlY3QocmVjdCk7CiAjZWxpZiBYUF9VTklYCiAgICAgLy8gT24gVW5peCwgbXVsdGlwbGUg
Y2FsbHMgdG8gc2V0TlBXaW5kb3coKSBpbiB3aW5kb3dlZCBtb2RlIGNhdXNlcyBGbGFzaCB0byBj
cmFzaApJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCShyZXZpc2lvbiA0OTQyMikKKysrIFdl
YkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDExIEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogCisjaWYgUExBVEZPUk0oU1lNQklBTikKK2NsYXNzIFFQbHVnaW5Mb2FkZXI7CitjbGFz
cyBOUEludGVyZmFjZTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CiAgICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFw
OwpAQCAtNzAsOSArNzUsMTcgQEAKICAgICAgICAgaW50IGNvbXBhcmUoY29uc3QgUGx1Z2luUGFj
a2FnZSYpIGNvbnN0OwogICAgICAgICBQbHVnaW5RdWlya1NldCBxdWlya3MoKSBjb25zdCB7IHJl
dHVybiBtX3F1aXJrczsgfQogICAgICAgICBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIHZl
cnNpb24oKSBjb25zdCB7IHJldHVybiBtX21vZHVsZVZlcnNpb247IH0KKyNpZiBQTEFURk9STShT
WU1CSUFOKQorICAgICAgICBOUEludGVyZmFjZSogbnBJbnRlcmZhY2UoKSB7IHJldHVybiBtX25w
SW50ZXJmYWNlO30KKyNlbmRpZiAvLyBQTEFURk9STShTWU1CSUFOKQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgUGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYg
bGFzdE1vZGlmaWVkKTsKKworI2lmIFBMQVRGT1JNKFNZTUJJQU4pCisgICAgICAgIE5QSW50ZXJm
YWNlKiBtX25wSW50ZXJmYWNlOworICAgICAgICBRUGx1Z2luTG9hZGVyKiBtX3BsdWdpbkxvYWRl
cjsKKyNlbmRpZiAvLyBQTEFURk9STShTWU1CSUFOKQogICAgICAgICBib29sIGZldGNoSW5mbygp
OwogICAgICAgICBib29sIGlzUGx1Z2luQmxhY2tsaXN0ZWQoKTsKICAgICAgICAgdm9pZCBkZXRl
cm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvc3ltYmlhbi9ucGludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9z
eW1iaWFuL25waW50ZXJmYWNlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvc3lt
Ymlhbi9ucGludGVyZmFjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKg0KKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4N
CisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KKyovDQorI2lmbmRlZiBucGludGVyZmFjZV9IDQorI2Rl
ZmluZSBucGludGVyZmFjZV9IDQorDQorI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgiDQorI2luY2x1
ZGUgPFF0UGx1Z2luPg0KKyNpbmNsdWRlIDxRUGFpbnRlcj4NCisjaW5jbHVkZSA8UUV2ZW50Pg0K
Kw0KK2NsYXNzIERyYXdFdmVudCA6IHB1YmxpYyBRRXZlbnQgew0KK3B1YmxpYzoNCisgICAgRHJh
d0V2ZW50KCkgOiBRRXZlbnQoUUV2ZW50OjpUeXBlKFFFdmVudDo6VXNlciArIE5QUXRFdmVudFBh
aW50KSkge30NCisgICAgdm9pZCBzZXRQYWludGVyKFFQYWludGVyKiBwKSB7IG1fcGFpbnRlciA9
IHA7IH0NCisgICAgUVBhaW50ZXIqIHBhaW50ZXIoKSB7IHJldHVybiBtX3BhaW50ZXI7IH0NCitw
cml2YXRlOg0KKyAgICBRUGFpbnRlciogbV9wYWludGVyOw0KK307DQorDQorY2xhc3MgTlBJbnRl
cmZhY2Ugew0KK3B1YmxpYzoNCisgICAgdmlydHVhbCBOUEVycm9yIE5QX0luaXRpYWxpemUoTlBO
ZXRzY2FwZUZ1bmNzICphTlBORnVuY3MsIE5QUGx1Z2luRnVuY3MgKmFOUFBGdW5jcykgPSAwOw0K
KyAgICB2aXJ0dWFsIHZvaWQgTlBfU2h1dGRvd24oKSA9IDA7DQorICAgIHZpcnR1YWwgY2hhciog
TlBfR2V0TUlNRURlc2NyaXB0aW9uKCkgPSAwOw0KK307DQorDQorDQorUVRfQkVHSU5fTkFNRVNQ
QUNFDQorUV9ERUNMQVJFX0lOVEVSRkFDRShOUEludGVyZmFjZSwgImNvbS5ub2tpYS5xdHM2MC53
ZWJwbHVnaW4vMS4wIik7DQorUVRfRU5EX05BTUVTUEFDRQ0KKw0KKyNlbmRpZiAvLyBucGludGVy
ZmFjZV9IDQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFpbmVyU3lt
Ymlhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29u
dGFpbmVyU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvc3ltYmlh
bi9QbHVnaW5Db250YWluZXJTeW1iaWFuLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBA
QAorLyoNCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQ0KKw0KKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bw0KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLA0K
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4NCisqLw0KKw0KKyNpbmNsdWRlICJjb25m
aWcuaCINCisjaW5jbHVkZSAiUGx1Z2luQ29udGFpbmVyU3ltYmlhbi5oIg0KKw0KKyNpbmNsdWRl
ICJGb2N1c0NvbnRyb2xsZXIuaCINCisjaW5jbHVkZSAiRnJhbWUuaCINCisjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiDQorI2luY2x1ZGUgIlBhZ2UuaCINCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50LmgiDQorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCINCisNCisjaW5jbHVkZSA8UUFwcGxp
Y2F0aW9uPg0KKyNpbmNsdWRlIDxRV2lkZ2V0Pg0KKw0KK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
Ow0KKw0KK1BsdWdpbkNvbnRhaW5lclN5bWJpYW46OlBsdWdpbkNvbnRhaW5lclN5bWJpYW4oUGx1
Z2luVmlldyogdmlldywgUVdpZGdldCogcGFyZW50KQ0KKyAgICA6IG1fcGFyZW50KHBhcmVudCkN
CisgICAgLCBtX3BsdWdpblZpZXcodmlldykNCisgICAgLCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNo
YW5nZShmYWxzZSkNCit7DQorICAgIHNldFBhcmVudChtX3BhcmVudCk7DQorfQ0KKw0KK1BsdWdp
bkNvbnRhaW5lclN5bWJpYW46On5QbHVnaW5Db250YWluZXJTeW1iaWFuKCkNCit7DQorfQ0KKw0K
K3ZvaWQgUGx1Z2luQ29udGFpbmVyU3ltYmlhbjo6cmVxdWVzdEdlb21ldHJ5KGNvbnN0IFFSZWN0
JiByZWN0LCBjb25zdCBRUmVnaW9uJiBjbGlwKQ0KK3sNCisgICAgaWYgKG1fd2luZG93UmVjdCAh
PSByZWN0IHx8IG1fY2xpcFJlZ2lvbiAhPSBjbGlwKSB7DQorICAgICAgICBtX3dpbmRvd1JlY3Qg
PSByZWN0Ow0KKyAgICAgICAgbV9jbGlwUmVnaW9uID0gY2xpcDsNCisgICAgICAgIG1faGFzUGVu
ZGluZ0dlb21ldHJ5Q2hhbmdlID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIFBsdWdpbkNv
bnRhaW5lclN5bWJpYW46OmFkanVzdEdlb21ldHJ5KCkNCit7DQorICAgIGlmIChtX2hhc1BlbmRp
bmdHZW9tZXRyeUNoYW5nZSkgew0KKyAgICAgICAgc2V0R2VvbWV0cnkobV93aW5kb3dSZWN0KTsN
CisgICAgICAgIHNldE1hc2sobV9jbGlwUmVnaW9uKTsNCisgICAgICAgIG1faGFzUGVuZGluZ0dl
b21ldHJ5Q2hhbmdlID0gZmFsc2U7DQorICAgIH0NCit9DQorDQordm9pZCBQbHVnaW5Db250YWlu
ZXJTeW1iaWFuOjpmb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQqIGV2ZW50KQ0KK3sNCisgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBtX3BsdWdpblZpZXctPnBhcmVudEZyYW1lKCktPnBhZ2UoKSkNCisgICAg
ICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUodHJ1ZSk7DQorDQorICAgIG1f
cGx1Z2luVmlldy0+Zm9jdXNQbHVnaW5FbGVtZW50KCk7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luQ29u
dGFpbmVyU3ltYmlhbjo6Zm9jdXNPdXRFdmVudChRRm9jdXNFdmVudCopDQorew0KKyAgICBpZiAo
UGFnZSogcGFnZSA9IG1fcGx1Z2luVmlldy0+cGFyZW50RnJhbWUoKS0+cGFnZSgpKQ0KKyAgICAg
ICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZShmYWxzZSk7DQorfQ0KSW5kZXg6
IFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkRhdGFiYXNlU3ltYmlhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luRGF0YWJhc2VTeW1iaWFuLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkRhdGFiYXNl
U3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qDQorICAgIENvcHly
aWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykNCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcg0KKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UNCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8NCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwNCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuDQorKi8NCisjaW5jbHVkZSAiY29uZmlnLmgiDQorI2luY2x1ZGUgIlBs
dWdpbkRhdGFiYXNlLmgiDQorDQorI2luY2x1ZGUgPFFGaWxlSW5mbz4NCisjaW5jbHVkZSA8ZjMy
ZmlsZS5oPg0KKw0KK3N0YXRpYyBjb25zdCBjaGFyIFFUUExVR0lOX0ZJTFRFUltdID0gIioucXRw
bHVnaW4iOw0KK3N0YXRpYyBjb25zdCBjaGFyIFFUX1BMVUdJTl9GT0xERVJbXSA9ICI6XFxyZXNv
dXJjZVxccXRcXHBsdWdpbnNcXG5wcXRwbHVnaW5zXFwiOw0KKw0KK25hbWVzcGFjZSBXZWJDb3Jl
IHsNCisNCitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVj
dG9yaWVzKCkNCit7DQorICAgIFZlY3RvcjxTdHJpbmc+IGRpcmVjdG9yaWVzOw0KKyAgICAvL2Zp
bmQgdGhlIGluc3RhbGxhdGlvbiBkcml2ZQ0KKyAgICBURHJpdmVMaXN0IGRyaXZlbGlzdDsNCisg
ICAgVENoYXIgZHJpdmVMZXR0ZXI7DQorICAgIFJGcyBmc1Nlc3Npb247DQorICAgIA0KKyAgICBp
ZiAoZnNTZXNzaW9uLkNvbm5lY3QoKSA9PSBLRXJyTm9uZSAmJiBmc1Nlc3Npb24uRHJpdmVMaXN0
KGRyaXZlbGlzdCkgPT0gS0Vyck5vbmUpIHsNCisgICAgICAgIGZvciAoVEludCBkcml2ZU51bWJl
ciA9IEVEcml2ZUE7IGRyaXZlTnVtYmVyIDw9IEVEcml2ZVo7IGRyaXZlTnVtYmVyKyspIHsNCisg
ICAgICAgICAgICBpZiAoZHJpdmVsaXN0W2RyaXZlTnVtYmVyXSAmJiBmc1Nlc3Npb24uRHJpdmVU
b0NoYXIoZHJpdmVOdW1iZXIsIGRyaXZlTGV0dGVyKSA9PSBLRXJyTm9uZSkgew0KKyAgICAgICAg
ICAgICAgICBRU3RyaW5nIGRyaXZlU3RyaW5nVmFsdWUoUUNoYXIoKHVpbnQpZHJpdmVMZXR0ZXIu
R2V0VXBwZXJDYXNlKCkpKTsNCisgICAgICAgICAgICAgICAgUVN0cmluZyBzdHViRGlyUGF0aDsN
CisgICAgICAgICAgICAgICAgc3R1YkRpclBhdGguYXBwZW5kKGRyaXZlU3RyaW5nVmFsdWUpOw0K
KyAgICAgICAgICAgICAgICBzdHViRGlyUGF0aC5hcHBlbmQoUVRfUExVR0lOX0ZPTERFUik7DQor
ICAgICAgICAgICAgICAgIGlmIChRRmlsZUluZm8oc3R1YkRpclBhdGgpLmV4aXN0cygpKQ0KKyAg
ICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKHN0dWJEaXJQYXRoKTsNCisgICAg
ICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgZnNTZXNzaW9uLkNsb3NlKCk7
DQorICAgIHJldHVybiBkaXJlY3RvcmllczsNCit9DQorDQorYm9vbCBQbHVnaW5EYXRhYmFzZTo6
aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQ0KK3sNCisgICAg
cmV0dXJuIHRydWU7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhz
SW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mIHBhdGhzKSBjb25zdA0KK3sNCisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuDQorICAgIEhhc2hT
ZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7DQorDQorICAgIFN0cmluZyBmaWxlTmFtZUZpbHRl
cihRVFBMVUdJTl9GSUxURVIpOw0KKw0KKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgZGlyc0VuZCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuZW5kKCk7DQorICAgIGZvciAoVmVjdG9y
PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGRJdCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuYmVnaW4o
KTsgZEl0ICE9IGRpcnNFbmQ7ICsrZEl0KSB7DQorICAgICAgICBWZWN0b3I8U3RyaW5nPiBwbHVn
aW5QYXRocyA9IGxpc3REaXJlY3RvcnkoKmRJdCwgZmlsZU5hbWVGaWx0ZXIpOw0KKyAgICAgICAg
VmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBsdWdpbnNFbmQgPSBwbHVnaW5QYXRocy5l
bmQoKTsNCisgICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBJdCA9
IHBsdWdpblBhdGhzLmJlZ2luKCk7IHBJdCAhPSBwbHVnaW5zRW5kOyArK3BJdCkgew0KKyAgICAg
ICAgICAgIGlmICghZmlsZUV4aXN0cygqcEl0KSkNCisgICAgICAgICAgICAgICAgY29udGludWU7
DQorICAgICAgICAgICAgcGF0aHMuYWRkKCpwSXQpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0K
Kw0KK30NCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250YWluZXJTeW1i
aWFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFp
bmVyU3ltYmlhbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1
Z2luQ29udGFpbmVyU3ltYmlhbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKg0K
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4NCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KKyovDQorDQorI2lmbmRlZiBQbHVnaW5Db250YWlu
ZXJTeW1iaWFuX2gNCisjZGVmaW5lIFBsdWdpbkNvbnRhaW5lclN5bWJpYW5faA0KKw0KKyNpbmNs
dWRlIDxRV2lkZ2V0Pg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCisgICAgY2xhc3MgUGx1
Z2luVmlldzsNCisNCisgICAgY2xhc3MgUGx1Z2luQ29udGFpbmVyU3ltYmlhbiA6IHB1YmxpYyBR
V2lkZ2V0IHsNCisgICAgICAgIFFfT0JKRUNUDQorICAgIHB1YmxpYzoNCisgICAgICAgIFBsdWdp
bkNvbnRhaW5lclN5bWJpYW4oUGx1Z2luVmlldyosIFFXaWRnZXQqIHBhcmVudCk7DQorICAgICAg
ICB+UGx1Z2luQ29udGFpbmVyU3ltYmlhbigpOw0KKw0KKyAgICAgICAgdm9pZCByZXF1ZXN0R2Vv
bWV0cnkoY29uc3QgUVJlY3QmLCBjb25zdCBRUmVnaW9uJiBjbGlwID0gUVJlZ2lvbigpKTsNCisg
ICAgICAgIHZvaWQgYWRqdXN0R2VvbWV0cnkoKTsNCisNCisgICAgcHJvdGVjdGVkOg0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGZvY3VzSW5FdmVudChRRm9jdXNFdmVudCopOw0KKyAgICAgICAgdmly
dHVhbCB2b2lkIGZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqKTsNCisgICAgcHJpdmF0ZToNCisg
ICAgICAgIFBsdWdpblZpZXcqIG1fcGx1Z2luVmlldzsNCisgICAgICAgIFFXaWRnZXQqIG1fcGFy
ZW50Ow0KKyAgICAgICAgUVJlY3QgbV93aW5kb3dSZWN0Ow0KKyAgICAgICAgUVJlZ2lvbiBtX2Ns
aXBSZWdpb247DQorICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlOw0KKyAg
ICB9Ow0KK30NCisNCisjZW5kaWYgLy8gUGx1Z2luQ29udGFpbmVyU3ltYmlhbl9oDQpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luVmlld1N5bWJpYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpblZpZXdTeW1iaWFuLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpblZpZXdTeW1iaWFuLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NjYgQEAKKy8qDQorICAgIENvcHlyaWdodCAoQykgMjAw
OSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykNCisNCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcg0KKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8NCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwNCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuDQorKi8NCisjaW5jbHVkZSAiY29uZmlnLmgiDQorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIN
CisNCisjaW5jbHVkZSAiRG9jdW1lbnQuaCINCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIN
CisjaW5jbHVkZSAiRWxlbWVudC5oIg0KKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIg0KKyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiDQorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiDQorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIg0KKyNpbmNsdWRlICJG
cmFtZVZpZXcuaCINCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiDQorI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIg0KKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIg0KKyNpbmNsdWRlICJJ
bWFnZS5oIg0KKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCINCisjaW5jbHVkZSAiS2V5Ym9hcmRF
dmVudC5oIg0KKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiDQorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiDQorI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgiDQorI2luY2x1ZGUgIm5waW50ZXJmYWNl
LmgiDQorI2luY2x1ZGUgIlBhZ2UuaCINCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmgiDQorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIg0KKyNpbmNsdWRlICJQbHVnaW5D
b250YWluZXJTeW1iaWFuLmgiDQorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiDQorI2luY2x1ZGUg
IlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCINCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5o
Ig0KKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIg0KKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVy
LmgiDQorI2luY2x1ZGUgIlNldHRpbmdzLmgiDQorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgi
DQorI2luY2x1ZGUgInJ1bnRpbWUuaCINCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiDQorI2lu
Y2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiDQorI2luY2x1ZGUgPFFLZXlFdmVudD4NCisjaW5jbHVk
ZSA8UVBpeG1hcC5oPg0KKyNpbmNsdWRlIDxRUmVnaW9uPg0KKyNpbmNsdWRlIDxRVmVjdG9yPg0K
KyNpbmNsdWRlIDxRV2lkZ2V0Pg0KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPg0KKyNpbmNs
dWRlIDxydW50aW1lL0pTVmFsdWUuaD4NCisNCit1c2luZyBKU0M6OkV4ZWNTdGF0ZTsNCit1c2lu
ZyBKU0M6OkludGVycHJldGVyOw0KK3VzaW5nIEpTQzo6SlNMb2NrOw0KK3VzaW5nIEpTQzo6SlNP
YmplY3Q7DQordXNpbmcgSlNDOjpVU3RyaW5nOw0KKw0KK3VzaW5nIG5hbWVzcGFjZSBzdGQ7DQor
DQordXNpbmcgbmFtZXNwYWNlIFdURjsNCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQordXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsNCisNCit2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdp
bldpZGdldCgpDQorew0KKyAgICBpZiAoIXBhcmVudCgpKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAg
ICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOw0KKyAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsNCisgICAgSW50UmVjdCBv
bGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0Ow0KKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0g
bV9jbGlwUmVjdDsNCisgICAgDQorICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3
LT5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5z
aXplKCkpOw0KKyAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsNCisgICAgbV9jbGlw
UmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7DQorICAgIGlm
IChtX3dpbmRvd1JlY3QgPT0gb2xkV2luZG93UmVjdCAmJiBtX2NsaXBSZWN0ID09IG9sZENsaXBS
ZWN0KQorICAgICAgICByZXR1cm47DQorDQorICAgIC8vIGluIG9yZGVyIHRvIG1vdmUvcmVzaXpl
IHRoZSBwbHVnaW4gd2luZG93IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIHJlc3Qgb2YgZnJhbWUN
CisgICAgLy8gZHVyaW5nIGUuZy4gc2Nyb2xsaW5nLCB3ZSBzZXQgdGhlIG1hc2sgYW5kIGdlb21l
dHJ5IGluIHRoZSBwYWludCgpIGZ1bmN0aW9uLCBidXQNCisgICAgLy8gYXMgcGFpbnQoKSBpc24n
dCBjYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHdpbmRvdyBpcyBvdXRzaWRlIHRoZSBmcmFtZSB3aGlj
aCBjYW4NCisgICAgLy8gYmUgY2F1c2VkIGJ5IGEgc2Nyb2xsLCB3ZSBuZWVkIHRvIG1vdmUvcmVz
aXplIGltbWVkaWF0ZWx5Lg0KKyAgICBpZiAoIW1fd2luZG93UmVjdC5pbnRlcnNlY3RzKGZyYW1l
Vmlldy0+ZnJhbWVSZWN0KCkpKQ0KKyAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOw0KK30N
CisNCit2b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKCkNCit7DQorICAgIGlmIChwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKQorICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRGb2N1cyhR
dDo6T3RoZXJGb2N1c1JlYXNvbik7CisgICAgZWxzZQorICAgICAgICBXaWRnZXQ6OnNldEZvY3Vz
KCk7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6c2hvdygpDQorew0KKyAgICBzZXRTZWxmVmlz
aWJsZSh0cnVlKTsNCisKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJsZSh0
cnVlKTsKK30NCisNCit2b2lkIFBsdWdpblZpZXc6OmhpZGUoKQ0KK3sNCisgICAgc2V0U2VsZlZp
c2libGUoZmFsc2UpOw0KKw0KKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJs
ZShmYWxzZSk7Cit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpDQorew0KKyAgICBpZiAoIW1faXNTdGFydGVk
KSB7DQorICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOw0KKyAg
ICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIA0KKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICANCisgICAgc2V0TlBXaW5kb3dJZk5l
ZWRlZCgpOworDQorICAgIGlmIChtX2lzV2luZG93ZWQgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSkNCisgICAgICAgIHN0YXRpY19jYXN0PFBsdWdpbkNvbnRhaW5lclN5bWJpYW4qPihwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKS0+YWRqdXN0R2VvbWV0cnkoKTsNCisNCisgICAgaWYgKG1faXNXaW5k
b3dlZCkKKyAgICAgICAgcmV0dXJuOworDQorICAgIGNvbnRleHQtPnNhdmUoKTsNCisgICAgSW50
UmVjdCBjbGlwUmVjdChyZWN0KTsNCisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgp
KTsNCisgICAgY29udGV4dC0+Y2xpcChjbGlwUmVjdCk7DQorICAgIGNvbnRleHQtPnRyYW5zbGF0
ZShmcmFtZVJlY3QoKS5sb2NhdGlvbigpLngoKSwgZnJhbWVSZWN0KCkubG9jYXRpb24oKS55KCkp
Ow0KKw0KKyAgICBEcmF3RXZlbnQgZXY7DQorICAgIGV2LnNldFBhaW50ZXIoY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCkpOw0KKyAgICBRRXZlbnQmIG5wRXZlbnQgPSBldjsNCisgICAgZGlzcGF0
Y2hOUEV2ZW50KG5wRXZlbnQpOw0KKw0KKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7DQorfQ0KKw0K
Ky8vIFRPRE86IFVuaWZ5IGFjcm9zcyBwb3J0cy4KK2Jvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hO
UEV2ZW50KE5QRXZlbnQmIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPmV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisKKyAgICBzZXRDYWxsaW5n
UGx1Z2luKHRydWUpOworICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNl
KTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsNCisKKyAgICByZXR1
cm4gYWNjZXB0ZWQ7Cit9CisNCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudCogZXZlbnQpDQorew0KKyAgICBpZiAobV9pc1dpbmRvd2VkKQ0KKyAgICAg
ICAgcmV0dXJuOw0KKw0KKyAgICBRRXZlbnQmIG5wRXZlbnQgPSAqKGV2ZW50LT5rZXlFdmVudCgp
LT5xdEV2ZW50KCkpOw0KKyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKKyAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9DQorDQordm9pZCBQbHVnaW5WaWV3Ojpo
YW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQ0KK3sNCisgICAgaWYgKG1faXNXaW5k
b3dlZCkNCisgICAgICAgIHJldHVybjsNCisNCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAgIC8vIEdpdmUgZm9jdXMgdG8gdGhl
IHBsdWdpbiBvbiBjbGljaworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUt
PnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUo
dHJ1ZSk7CisKKyAgICAgICAgZm9jdXNQbHVnaW5FbGVtZW50KCk7CisgICAgfQorDQorICAgIFFF
dmVudDo6VHlwZSB0eXBlOw0KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2Vkb3duRXZlbnQpDQorICAgICAgICB0eXBlID0gUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNz
Ow0KKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVF
dmVudCkNCisgICAgICAgIHR5cGUgPSBRRXZlbnQ6Ok1vdXNlTW92ZTsNCisgICAgZWxzZSBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQ0KKyAgICAgICAgdHlw
ZSA9IFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1
cm47DQorDQorICAgIFFQb2ludCBwb3NpdGlvbihldmVudC0+b2Zmc2V0WCgpLCBldmVudC0+b2Zm
c2V0WSgpKTsNCisgICAgUXQ6Ok1vdXNlQnV0dG9uIGJ1dHRvbjsNCisgICAgc3dpdGNoIChldmVu
dC0+d2hpY2goKSkgew0KKyAgICBjYXNlIDE6DQorICAgICAgICBidXR0b24gPSBRdDo6TGVmdEJ1
dHRvbjsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIDI6DQorICAgICAgICBidXR0b24gPSBR
dDo6TWlkQnV0dG9uOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgMzoNCisgICAgICAgIGJ1
dHRvbiA9IFF0OjpSaWdodEJ1dHRvbjsNCisgICAgICAgIGJyZWFrOw0KKyAgICBkZWZhdWx0Og0K
KyAgICAgICAgYnV0dG9uID0gUXQ6Ok5vQnV0dG9uOw0KKyAgICB9DQorICAgIFF0OjpLZXlib2Fy
ZE1vZGlmaWVycyBtb2RpZmllcnMgPSAwOw0KKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkNCisg
ICAgICAgIG1vZGlmaWVycyB8PSBRdDo6Q29udHJvbE1vZGlmaWVyOw0KKyAgICBpZiAoZXZlbnQt
PmFsdEtleSgpKQ0KKyAgICAgICAgbW9kaWZpZXJzIHw9IFF0OjpBbHRNb2RpZmllcjsNCisgICAg
aWYgKGV2ZW50LT5zaGlmdEtleSgpKQ0KKyAgICAgICAgbW9kaWZpZXJzIHw9IFF0OjpTaGlmdE1v
ZGlmaWVyOw0KKyAgICBpZiAoZXZlbnQtPm1ldGFLZXkoKSkNCisgICAgICAgIG1vZGlmaWVycyB8
PSBRdDo6TWV0YU1vZGlmaWVyOw0KKyAgICBRTW91c2VFdmVudCBtb3VzZUV2ZW50KHR5cGUsIHBv
c2l0aW9uLCBidXR0b24sIGJ1dHRvbiwgbW9kaWZpZXJzKTsgDQorICAgIFFFdmVudCYgbnBFdmVu
dCA9IG1vdXNlRXZlbnQ7DQorICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQorICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30NCisNCit2b2lkIFBsdWdpblZpZXc6
OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpDQorew0KKyAgICBXaWRnZXQ6OnNldFBhcmVu
dChwYXJlbnQpOw0KKw0KKyAgICBpZiAocGFyZW50KQ0KKyAgICAgICAgaW5pdCgpOw0KK30NCisN
Cit2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JikNCit7DQor
ICAgIGlmICghbV9pc1dpbmRvd2VkKQorICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Cit9
DQorDQordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKK3sKKyAgICBpZiAo
IW1faXNTdGFydGVkIHx8ICFwYXJlbnQoKSB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNl
dHdpbmRvdykKKyAgICAgICAgcmV0dXJuOw0KKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7DQorICAg
ICAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAgICAgIHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCktPnNldEdlb21ldHJ5KG1fd2luZG93UmVjdCk7CisgICAgICAgIC8vIGlmIHNl
dE1hc2sgaXMgc2V0IHdpdGggYW4gZW1wdHkgUVJlZ2lvbiwgbm8gY2xpcHBpbmcgd2lsbAorICAg
ICAgICAvLyBiZSBwZXJmb3JtZWQsIHNvIGluIHRoYXQgY2FzZSB3ZSBoaWRlIHRoZSBwbHVnaW4g
dmlldworICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxlKCFtX2NsaXBS
ZWN0LmlzRW1wdHkoKSk7CisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldE1hc2so
UVJlZ2lvbihtX2NsaXBSZWN0KSk7CisNCisgICAgICAgIG1fbnBXaW5kb3cueCA9IG1fd2luZG93
UmVjdC54KCk7CisgICAgICAgIG1fbnBXaW5kb3cueSA9IG1fd2luZG93UmVjdC55KCk7CisNCisg
ICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fY2xpcFJlY3QueCgpOworICAgICAg
ICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IG1fY2xpcFJlY3QueSgpOworICAgICAgICBtX25w
V2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9jbGlwUmVjdC53aWR0aCgpOw0KKyAgICAgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX2NsaXBSZWN0LmhlaWdodCgpOw0KKyAgICANCisg
ICAgfSBlbHNlIHsNCisgICAgICAgIC8vIEZJWE1FOiBkb24ndCBjYWxsIE5QUF9zZXRXaW5kb3cg
aWYgd2luZG93IHNpemUgZGlkIG5vdCByZWFsbHkgY2hhbmdlDQorICAgICAgICBtX25wV2luZG93
LnggPSAwOw0KKyAgICAgICAgbV9ucFdpbmRvdy55ID0gMDsNCisgICAgDQorICAgICAgICBtX25w
V2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOw0KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50
b3AgPSAwOw0KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fd2luZG93UmVj
dC53aWR0aCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX3dpbmRv
d1JlY3QuaGVpZ2h0KCk7DQorICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7DQorICAgIH0N
CisNCisgICAgbV9ucFdpbmRvdy53aWR0aCA9IG1fd2luZG93UmVjdC53aWR0aCgpOw0KKyAgICBt
X25wV2luZG93LmhlaWdodCA9IG1fd2luZG93UmVjdC5oZWlnaHQoKTsNCisgICAgaWYgKG1fbnBX
aW5kb3cueCA8IDAgfHwgbV9ucFdpbmRvdy55IDwgMCB8fCBtX25wV2luZG93LndpZHRoIDw9IDAg
fHwgbV9ucFdpbmRvdy5oZWlnaHQgPD0gMCkNCisgICAgICAgIHJldHVybjsNCisgICAgDQorICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOw0KKyAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsNCisgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7DQorICAgIHNldENhbGxpbmdQ
bHVnaW4oZmFsc2UpOw0KKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsN
Cit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkN
Cit7DQorICAgIGlmIChpc1BhcmVudFZpc2libGUoKSA9PSB2aXNpYmxlKQ0KKyAgICAgICAgcmV0
dXJuOw0KKw0KKyAgICBXaWRnZXQ6OnNldFBhcmVudFZpc2libGUodmlzaWJsZSk7DQorDQorICAg
IGlmIChpc1NlbGZWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkNCisgICAgICAg
IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldFZpc2libGUodmlzaWJsZSk7DQorfQ0KKw0KK05Q
RXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVy
LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYpDQorew0KKyAgICBub3RJbXBsZW1lbnRlZCgp
Ow0KKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7DQorfQ0KKw0KK05QRXJyb3IgUGx1Z2luVmll
dzo6Z2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQ0KK3sN
CisgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyglcykiLCBwcmV0
dHlOYW1lRm9yTlBOVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisKKyAgICBzd2l0Y2ggKHZh
cmlhYmxlKSB7CisgICAgY2FzZSBOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sOgorICAgICAgICAq
c3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOworCisgICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOgorICAgICAgICAq
c3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7CisgICAgfQorfQ0KKw0KK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFy
aWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQ0KK3sNCisgICAgTE9HKFBsdWdpbnMsICJQbHVn
aW5WaWV3OjpnZXRWYWx1ZSglcykiLCBwcmV0dHlOYW1lRm9yTlBOVmFyaWFibGUodmFyaWFibGUp
LmRhdGEoKSk7CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7DQorICAgIGNhc2UgTlBOVldpbmRv
d05QT2JqZWN0OiB7DQorICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpDQorICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7DQorDQorICAgICAgICBOUE9iamVjdCog
d2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCktPndpbmRvd1Njcmlw
dE5QT2JqZWN0KCk7DQorDQorICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8g
YmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9w
cm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+DQorICAgICAgICBpZiAod2luZG93U2NyaXB0
T2JqZWN0KQ0KKyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVj
dCk7DQorDQorICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7DQorICAgICAgICAqdiA9
IHdpbmRvd1NjcmlwdE9iamVjdDsNCisgICAgICAgICAgICANCisgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsNCisgICAgfQ0KKw0KKyAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmpl
Y3Q6IHsNCisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkNCisgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsNCisNCisgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5T
Y3JpcHRPYmplY3QgPSAwOw0KKw0KKyAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShh
cHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50
LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpDQorICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVj
dCgpOw0KKw0KKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFp
bmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMv
cGx1Z2luL25wcnVudGltZS5odG1sPg0KKyAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkN
CisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOw0KKw0K
KyAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOw0KKyAgICAgICAgKnYgPSBwbHVnaW5T
Y3JpcHRPYmplY3Q7DQorDQorICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7DQorICAgIH0g
ICAgICAgIA0KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZ2V0VmFsdWVTdGF0aWModmFy
aWFibGUsIHZhbHVlKTsKKyAgICB9DQorfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0
ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkNCit7DQorICAgIGlmIChtX2lzV2luZG93ZWQpIHsK
KyAgICAgICAgcGxhdGZvcm1XaWRnZXQoKS0+dXBkYXRlKHJlY3QpOw0KKyAgICAgICAgcmV0dXJu
Ow0KKyAgICB9DQorICAgIA0KKyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QocmVj
dCk7DQorfQ0KKyAgICANCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCog
cmVjdCkNCit7DQorICAgIGlmIChtX2lzV2luZG93ZWQpDQorICAgICAgICByZXR1cm47DQorICAg
IGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSBy
ZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOw0KKyAgICBtX2ludmFsaWRSZWN0
cy5hcHBlbmQocik7DQorICAgIGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3RpdmUoKSkNCisg
ICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwLjAwMSk7DQorfQ0KKw0KK3Zv
aWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pDQorew0KKyAg
ICBpZiAobV9pc1dpbmRvd2VkKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICANCisgICAgUVJlZ2lv
biogciA9IHN0YXRpY19jYXN0PFFSZWdpb24qPihyZWdpb24pOw0KKyAgICBpZiAoIXIpIA0KKyAg
ICAgICAgcmV0dXJuOw0KKyAgICANCisgICAgUVZlY3RvcjxRUmVjdD4gcmVjdHMgPSByLT5yZWN0
cygpOw0KKyAgICBmb3IgKGludCBpID0gMTsgaSA8IHJlY3RzLnNpemUoKTsgKytpKSB7DQorICAg
ICAgICBjb25zdCBRUmVjdCYgcVJlY3QgPSByZWN0cy5hdChpKTsNCisgICAgICAgIEludFJlY3Qg
cihxUmVjdCk7DQorICAgICAgICBtX2ludmFsaWRSZWN0cy5hcHBlbmQocik7DQorICAgICAgICBp
ZiAoIW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0aXZlKCkpDQorICAgICAgICAgICAgbV9pbnZhbGlk
YXRlVGltZXIuc3RhcnRPbmVTaG90KDAuMDAxKTsNCisgICAgfQ0KK30NCisNCit2b2lkIFBsdWdp
blZpZXc6OmZvcmNlUmVkcmF3KCkNCit7DQorICAgIGlmIChtX2lzV2luZG93ZWQpDQorICAgICAg
ICByZXR1cm47DQorICAgIGludmFsaWRhdGUoKTsNCit9DQorDQorYm9vbCBQbHVnaW5WaWV3Ojpw
bGF0Zm9ybVN0YXJ0KCkNCit7DQorCUFTU0VSVChtX2lzU3RhcnRlZCk7DQorICAgIEFTU0VSVCht
X3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpOw0KKyAgICANCisgICAg
c2hvdygpOw0KKw0KKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7DQorICAgICAgICBRV2ViUGFnZUNs
aWVudCogY2xpZW50ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRm
b3JtUGFnZUNsaWVudCgpOw0KKyAgICAgICAgLy8gRklYTUUgdGhpcyB3aWxsIG5vdCB3b3JrIGZv
ciBRR3JhcGhpY3NWaWV3Lg0KKyAgICAgICAgLy8gQnV0IHdlIGNhbm5vdCB1c2Ugd2luSWQgYmVj
YXVzZSBpdCB3aWxsIGNyZWF0ZSBhIHdpbmRvdyBhbmQgb24gUzYwLA0KKyAgICAgICAgLy8gUVdp
ZGdldHMgc2hvdWxkIG5vdCBjcmVhdGUgYSB3aW5kb3cuIA0KKyAgICAgICAgUV9BU1NFUlQocW9i
amVjdF9jYXN0PFFXaWRnZXQqPihjbGllbnQtPnBsdWdpblBhcmVudCgpKSk7DQorICAgICAgICBz
ZXRQbGF0Zm9ybVdpZGdldChuZXcgUGx1Z2luQ29udGFpbmVyU3ltYmlhbih0aGlzLA0KKyAgICAg
ICAgICAgIHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4oY2xpZW50LT5wbHVnaW5QYXJlbnQoKSkpKTsN
CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsNCisgICAgICAg
IG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCk7DQorDQor
ICAgIH0gZWxzZSB7DQorICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldCgwKTsNCisgICAgICAgIG1f
bnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOw0KKyAgICAgICAgbV9ucFdpbmRv
dy53aW5kb3cgPSAwOyAvLyBOb3QgdXNlZD8KKyAgICB9ICAgIA0KKyAgICBzZXROUFdpbmRvd0lm
TmVlZGVkKCk7CisgICAgDQorICAgIHJldHVybiB0cnVlOworfQ0KKw0KK3ZvaWQgUGx1Z2luVmll
dzo6cGxhdGZvcm1EZXN0cm95KCkNCit7DQorICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgp
KQ0KKyAgICAgICAgZGVsZXRlIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCk7Cit9DQorDQordm9pZCBQ
bHVnaW5WaWV3OjpoYWx0KCkNCit7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6cmVzdGFydCgp
DQorew0KK30NCisNCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL3N5bWJpYW4vUGx1Z2luUGFja2FnZVN5bWJpYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpblBhY2thZ2VTeW1iaWFuLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpblBhY2thZ2VTeW1iaWFuLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyMDIgQEAKKy8qDQorICAgIENvcHlyaWdodCAoQykgMjAwOSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykNCisNCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cg0KKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUNCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuDQorDQorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8NCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwNCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
DQorKi8NCisjaW5jbHVkZSAiY29uZmlnLmgiDQorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIN
CisNCisjaW5jbHVkZSAiQ1N0cmluZy5oIg0KKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
DQorI2luY2x1ZGUgIm5waW50ZXJmYWNlLmgiDQorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgi
DQorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiDQorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgi
DQorI2luY2x1ZGUgPFFQbHVnaW5Mb2FkZXI+DQorDQorbmFtZXNwYWNlIFdlYkNvcmUgew0KKw0K
K2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkNCit7DQorICAgIGlmICghbG9hZCgpKQ0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgICBjaGFyKiBidWYgPSAwOw0KKyAgICBOUEVy
cm9yIGVyciA9IG1fcGx1Z2luRnVuY3MuZ2V0dmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcs
ICh2b2lkICopJmJ1Zik7DQorICAgIG1fbmFtZSA9IGJ1ZjsNCisgICAgZXJyID0gbV9wbHVnaW5G
dW5jcy5nZXR2YWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsICh2b2lkICopJmJ1
Zik7DQorICAgIG1fZGVzY3JpcHRpb24gPSBidWY7DQorDQorICAgIGRldGVybWluZU1vZHVsZVZl
cnNpb25Gcm9tRGVzY3JpcHRpb24oKTsNCisNCisgICAgU3RyaW5nIHMgPSBtX25wSW50ZXJmYWNl
LT5OUF9HZXRNSU1FRGVzY3JpcHRpb24oKTsNCisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7DQor
ICAgIHMuc3BsaXQoVUNoYXIoJ3wnKSwgZmFsc2UsIHR5cGVzKTsgIC8vIDxNSU1FMT47PGV4dDEs
ZXh0MixleHQzLC4uLj47PERlc2NyaXB0aW9uPnw8TUlNRTI+fDxNSU1FMz58Li4uDQorDQorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyArK2kpIHsNCisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IG1pbWU7DQorICAgICAgICB0eXBlc1tpXS5zcGxpdChVQ2hhcignOycpLCB0cnVl
LCBtaW1lKTsgIC8vIDxNSU1FMT47PGV4dDEsZXh0MixleHQzLC4uLj47PERlc2NyaXB0aW9uPg0K
KyAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMCkgew0KKyAgICAgICAgICAgIFZlY3RvcjxTdHJp
bmc+IGV4dHM7DQorICAgICAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMSkNCisgICAgICAgICAg
ICAgICAgbWltZVsxXS5zcGxpdChVQ2hhcignLCcpLCBmYWxzZSwgZXh0cyk7IC8vIDxleHQxLGV4
dDIsZXh0MywuLi4+DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgbV9taW1lVG9FeHRlbnNp
b25zLmFkZChtaW1lWzBdLCBleHRzKTsgLy8gPE1JTUU+LDxleHQxLGV4dDIsZXh0Mz4NCisgICAg
ICAgICAgICBpZiAobWltZS5zaXplKCkgPiAyKQ0KKyAgICAgICAgICAgICAgICBtX21pbWVUb0Rl
c2NyaXB0aW9ucy5hZGQobWltZVswXSwgbWltZVsyXSk7IC8vIDxNSU1FPiw8RGVzY3JpcHRpb24+
DQorICAgICAgICB9DQorICAgIH0NCisgICAgdW5sb2FkKCk7DQorICAgIHJldHVybiB0cnVlOw0K
K30NCisNCitib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQ0KK3sNCisgICAgaWYgKG1faXNMb2Fk
ZWQpIHsNCisgICAgICAgIG1fbG9hZENvdW50Kys7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisg
ICAgfQ0KKw0KKyAgICBtX3BsdWdpbkxvYWRlciA9IG5ldyBRUGx1Z2luTG9hZGVyKG1fcGF0aCk7
DQorICAgIGlmICghbV9wbHVnaW5Mb2FkZXItPmxvYWQoKSkgew0KKyAgICAgICAgZGVsZXRlIG1f
cGx1Z2luTG9hZGVyOw0KKyAgICAgICAgbV9wbHVnaW5Mb2FkZXIgPSAwOw0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIFFPYmplY3QqIHBsdWdpbiA9IG1fcGx1Z2luTG9h
ZGVyLT5pbnN0YW5jZSgpOw0KKyAgICBpZiAoIXBsdWdpbikgew0KKyAgICAgICAgbV9wbHVnaW5M
b2FkZXItPnVubG9hZCgpOw0KKyAgICAgICAgZGVsZXRlIG1fcGx1Z2luTG9hZGVyOw0KKyAgICAg
ICAgbV9wbHVnaW5Mb2FkZXIgPSAwOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQor
DQorICAgIC8vIFBsdWdpbiBpbnN0YW5jZSBjcmVhdGVkDQorICAgIC8vIENhc3QgcGx1Z2luIHRv
IE5QSW50ZXJmYWNlLA0KKyAgICBtX25wSW50ZXJmYWNlID0gcW9iamVjdF9jYXN0PE5QSW50ZXJm
YWNlICo+KHBsdWdpbik7DQorICAgIGlmICghbV9ucEludGVyZmFjZSkgew0KKyAgICAgICAgbV9w
bHVnaW5Mb2FkZXItPnVubG9hZCgpOw0KKyAgICAgICAgZGVsZXRlIG1fcGx1Z2luTG9hZGVyOw0K
KyAgICAgICAgbV9wbHVnaW5Mb2FkZXIgPSAwOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAg
ICB9DQorDQorICAgIG1faXNMb2FkZWQgPSB0cnVlOw0KKyAgICANCisgICAgTlBFcnJvciBucEVy
cjsNCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykp
Ow0KKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7DQorICAg
IG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YobV9icm93c2VyRnVuY3MpOw0KKyAgICBtX2Jy
b3dzZXJGdW5jcy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5PUjsNCisgICAgbV9icm93c2VyRnVu
Y3MuZ2V0dXJsID0gTlBOX0dldFVSTDsNCisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5Q
Tl9Qb3N0VVJMOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0
UmVhZDsNCisgICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsNCisg
ICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7DQorICAgIG1fYnJvd3NlckZ1bmNz
LmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsNCisgICAgbV9icm93c2VyRnVuY3Mu
c3RhdHVzID0gTlBOX1N0YXR1czsNCisgICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1Vz
ZXJBZ2VudDsNCisgICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7DQor
ICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsNCisgICAgbV9icm93c2Vy
RnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7DQorICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9h
ZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsNCisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJs
bm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsNCisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5v
dGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9
IE5QTl9HZXRWYWx1ZTsNCisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFs
dWU7DQorICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVS
ZWN0Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRh
dGVSZWdpb247DQorICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVk
cmF3Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7DQor
ICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOw0KKyAgICBt
X2Jyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFi
bGVkU3RhdGU7DQorICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5Q
Tl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7DQorICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJp
YW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7DQorICAgIG1fYnJvd3NlckZ1bmNz
LmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7DQorICAgIG1f
YnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlm
aWVyczsNCisgICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0SW50
SWRlbnRpZmllcjsNCisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05Q
Tl9JZGVudGlmaWVySXNTdHJpbmc7DQorICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRp
ZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5jcmVh
dGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsNCisgICAgbV9icm93c2VyRnVuY3MucmV0YWlu
b2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7DQorICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2Vv
YmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7DQorICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9
IF9OUE5fSW52b2tlOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9J
bnZva2VEZWZhdWx0Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVh
dGU7DQorICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3BlcnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsN
CisgICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5Ow0KKyAg
ICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7DQor
ICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05QTl9IYXNNZXRob2Q7DQorICAgIG1f
YnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7DQorICAgIG1fYnJvd3Nl
ckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOw0KKyAgICBtX2Jyb3dzZXJG
dW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsNCisgICAgbV9icm93c2VyRnVuY3MuY29u
c3RydWN0ID0gX05QTl9Db25zdHJ1Y3Q7DQorDQorICAgIG5wRXJyID0gbV9ucEludGVyZmFjZS0+
TlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNzKTsNCisgICAgaWYg
KG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKSB7DQorICAgICAgICBtX3BsdWdpbkxvYWRlci0+dW5s
b2FkKCk7DQorICAgICAgICBkZWxldGUgbV9wbHVnaW5Mb2FkZXI7DQorICAgICAgICBtX3BsdWdp
bkxvYWRlciA9IDA7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgbV9s
b2FkQ291bnQrKzsNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luUGFja2Fn
ZTo6dW5sb2FkKCkNCit7DQorICAgIGlmICghbV9pc0xvYWRlZCkNCisgICAgICAgIHJldHVybjsN
CisNCisgICAgaWYgKC0tbV9sb2FkQ291bnQgPiAwKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAg
ICAgDQorICAgIG1faXNMb2FkZWQgPSBmYWxzZTsNCisgICAgbV9ucEludGVyZmFjZS0+TlBfU2h1
dGRvd24oKTsNCisNCisgICAgbV9wbHVnaW5Mb2FkZXItPnVubG9hZCgpOw0KKyAgICBkZWxldGUg
bV9wbHVnaW5Mb2FkZXI7DQorICAgIG1fcGx1Z2luTG9hZGVyID0gMDsNCit9DQorDQordW5zaWdu
ZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0DQoreyANCisgICAgdW5zaWduZWQgaGFzaENv
ZGVzWzJdID0gew0KKyAgICAgICAgbV9wYXRoLmltcGwoKS0+aGFzaCgpLA0KKyAgICAgICAgbV9s
YXN0TW9kaWZpZWQNCisgICAgfTsNCisNCisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVI
YXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCAyICogc2l6ZW9mKHVuc2ln
bmVkKSAvIHNpemVvZihVQ2hhcikpOw0KK30NCisNCitib29sIFBsdWdpblBhY2thZ2U6OmVxdWFs
KGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2UmIGIpDQorew0KKyAg
ICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbjsNCit9DQorDQoraW50
IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZl
cnNpb24mIGNvbXBhcmVWZXJzaW9uKSBjb25zdA0KK3sNCisgICAgLy8gcmV0dXJuIC0xLCAwLCBv
ciAxIGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVy
IHRoYW4NCisgICAgLy8gdGhlIHBhc3NlZCB2ZXJzaW9uDQorICAgIGlmIChtX21vZHVsZVZlcnNp
b24gIT0gY29tcGFyZVZlcnNpb24pDQorICAgICAgICByZXR1cm4gbV9tb2R1bGVWZXJzaW9uID4g
Y29tcGFyZVZlcnNpb24gPyAxIDogLTE7DQorICAgIHJldHVybiAwOw0KK30NCisNCit9DQorDQpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiA0OTQyMikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTE2NCw3ICsxNjQsNyBAQAogCiAjIE5lc2NhcGUgcGx1Z2lucyBzdXBwb3J0IChOUEFQ
SSkKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0uKSB7Ci0g
ICAgdW5peHx3aW4zMi0qOiFlbWJlZGRlZDohd2luY2UqOiFzeW1iaWFuIHsKKyAgICB1bml4fHdp
bjMyLSo6IWVtYmVkZGVkOiF3aW5jZSo6IHsKICAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfTkVU
U0NBUEVfUExVR0lOX0FQST0xCiAgICAgfSBlbHNlIHsKICAgICAgICAgREVGSU5FUyArPSBFTkFC
TEVfTkVUU0NBUEVfUExVR0lOX0FQST0wCkBAIC0yNDU3LDQ2ICsyNDU3LDYyIEBACiAKICAgICBT
T1VSQ0VTICs9IHBsdWdpbnMvbnBhcGkuY3BwCiAKLSAgICB1bml4IHsKLSAgICAgICAgREVGSU5F
UyArPSBFTkFCTEVfUExVR0lOX1BBQ0tBR0VfU0lNUExFX0hBU0g9MQorICAgIHN5bWJpYW4gewor
ICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFuL1BsdWdpblBhY2th
Z2VTeW1iaWFuLmNwcCBcCisgICAgICAgIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5EYXRhYmFzZVN5
bWJpYW4uY3BwIFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFuL1BsdWdpblZpZXdTeW1iaWFuLmNw
cCBcCisgICAgICAgIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250YWluZXJTeW1iaWFuLmNwcAog
Ci0gICAgICAgIG1hYyB7Ci0gICAgICAgICAgICBTT1VSQ0VTICs9IFwKLSAgICAgICAgICAgICAg
ICBwbHVnaW5zL21hYy9QbHVnaW5QYWNrYWdlTWFjLmNwcCBcCi0gICAgICAgICAgICAgICAgcGx1
Z2lucy9tYWMvUGx1Z2luVmlld01hYy5jcHAKLSAgICAgICAgICAgIE9CSkVDVElWRV9TT1VSQ0VT
ICs9IFwKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybS90ZXh0L21hYy9TdHJpbmdJbXBsTWFjLm1t
IFwKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLm1t
Ci0gICAgICAgICAgICBJTkNMVURFUEFUSCArPSBwbGF0Zm9ybS9tYWMKLSAgICAgICAgICAgICMg
Tm90ZTogWFBfTUFDT1NYIGlzIGRlZmluZWQgaW4gbnBhcGkuaAotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgIWVtYmVkZGVkOiBDT05GSUcgKz0geDExCi0gICAgICAgICAgICBTT1VSQ0VT
ICs9IFwKLSAgICAgICAgICAgICAgICBwbHVnaW5zL3F0L1BsdWdpbkNvbnRhaW5lclF0LmNwcCBc
Ci0gICAgICAgICAgICAgICAgcGx1Z2lucy9xdC9QbHVnaW5QYWNrYWdlUXQuY3BwIFwKLSAgICAg
ICAgICAgICAgICBwbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKLSAgICAgICAgICAgIEhFQURF
UlMgKz0gXAotICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuaAot
ICAgICAgICAgICAgREVGSU5FUyArPSBYUF9VTklYCi0gICAgICAgIH0KLSAgICB9CisgICAgICAg
IEhFQURFUlMgKz0gXAorICAgICAgICBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFpbmVyU3lt
Ymlhbi5oIFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFuL25waW50ZXJmYWNlLmgKIAotICAgIHdp
bjMyLSogewotICAgICAgICBJTkNMVURFUEFUSCArPSAkJFBXRC9wbHVnaW5zL3dpbgorICAgICAg
ICBMSUJTICs9IC1sZWZzcnYKIAotICAgICAgICBTT1VSQ0VTICs9IHBhZ2Uvd2luL1BhZ2VXaW4u
Y3BwIFwKLSAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5j
cHAgXAotICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3Bw
IFwKLSAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luLmNwcCBcCi0gICAgICAgICAgICAgICAgICAgcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5j
cHAKKyAgICB9IGVsc2UgewogCi0gICAgICAgIExJQlMgKz0gXAotICAgICAgICAgICAgLWxhZHZh
cGkzMiBcCi0gICAgICAgICAgICAtbGdkaTMyIFwKLSAgICAgICAgICAgIC1sc2hlbGwzMiBcCi0g
ICAgICAgICAgICAtbHNobHdhcGkgXAotICAgICAgICAgICAgLWx1c2VyMzIgXAotICAgICAgICAg
ICAgLWx2ZXJzaW9uCisgICAgICAgIHVuaXggeworICAgICAgICAgICAgREVGSU5FUyArPSBFTkFC
TEVfUExVR0lOX1BBQ0tBR0VfU0lNUExFX0hBU0g9MQorICAgIAorICAgICAgICAgICAgbWFjIHsK
KyAgICAgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgICAgICAgcGx1Z2lu
cy9tYWMvUGx1Z2luUGFja2FnZU1hYy5jcHAgXAorICAgICAgICAgICAgICAgICAgICBwbHVnaW5z
L21hYy9QbHVnaW5WaWV3TWFjLmNwcAorICAgICAgICAgICAgICAgIE9CSkVDVElWRV9TT1VSQ0VT
ICs9IFwKKyAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5nSW1wbE1h
Yy5tbSBcCisgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdF
eHRyYXMubW0KKyAgICAgICAgICAgICAgICBJTkNMVURFUEFUSCArPSBwbGF0Zm9ybS9tYWMKKyAg
ICAgICAgICAgICAgICAjIE5vdGU6IFhQX01BQ09TWCBpcyBkZWZpbmVkIGluIG5wYXBpLmgKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgIWVtYmVkZGVkOiBDT05GSUcgKz0g
eDExCisgICAgICAgICAgICAgICAgU09VUkNFUyArPSBcCisgICAgICAgICAgICAgICAgICAgIHBs
dWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuY3BwIFwKKyAgICAgICAgICAgICAgICAgICAgcGx1
Z2lucy9xdC9QbHVnaW5QYWNrYWdlUXQuY3BwIFwKKyAgICAgICAgICAgICAgICAgICAgcGx1Z2lu
cy9xdC9QbHVnaW5WaWV3UXQuY3BwCisgICAgICAgICAgICAgICAgSEVBREVSUyArPSBcCisgICAg
ICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuaAorICAgICAgICAg
ICAgICAgIERFRklORVMgKz0gWFBfVU5JWAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
CisgICAgICAgIHdpbjMyLSogeworICAgICAgICAgICAgSU5DTFVERVBBVEggKz0gJCRQV0QvcGx1
Z2lucy93aW4KKyAgICAKKyAgICAgICAgICAgIFNPVVJDRVMgKz0gcGFnZS93aW4vUGFnZVdpbi5j
cHAgXAorICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdp
bi5jcHAgXAorICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdl
V2luLmNwcCBcCisgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvd2luL1BsdWdpbk1lc3Nh
Z2VUaHJvdHRsZXJXaW4uY3BwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy93aW4v
UGx1Z2luVmlld1dpbi5jcHAKKyAgICAKKyAgICAgICAgICAgIExJQlMgKz0gXAorICAgICAgICAg
ICAgICAgIC1sYWR2YXBpMzIgXAorICAgICAgICAgICAgICAgIC1sZ2RpMzIgXAorICAgICAgICAg
ICAgICAgIC1sc2hlbGwzMiBcCisgICAgICAgICAgICAgICAgLWxzaGx3YXBpIFwKKyAgICAgICAg
ICAgICAgICAtbHVzZXIzMiBcCisgICAgICAgICAgICAgICAgLWx2ZXJzaW9uCisgICAgICAgIH0K
ICAgICB9CiAKIH0gZWxzZSB7CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDk0MjIpCisrKyBXZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDA5LTEwLTEwICBZYWVsIEFoYXJv
biAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKyAKKyAgICAgICAgIFJldmlld2VkIGJ5IAorIAor
ICAgICAgICBFbmFibGluZyBOUEFQSSBwbHVnaW4gc3VwcG9ydCBvbiBRdCBXZWJraXQgZm9yIFM2
MCBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjkzMDIKKworICAgICAgICBBbHNvIGltcGxlbWVudGVkIGJ5IE1haGVzaCBLdWxrYXJuaTxt
YWhlc2gua3Vsa2FybmlAbm9raWEuY29tPiwgCisgICAgICAgIFJvaGluaSBBbmFudGggPHJvaGlu
aS5hbmFudGhAbm9raWEuY29tPiBhbmQgaGVscCBmcm9tIE5vcmJlcnQgTGVzcgorICAgICAgICA8
bm9yYmVydC5sZXNlckBub2tpYS5jb20+CisgICAgICAgICAKKyAgICAgICAgKiBXZWJDb3JlLnBy
bzoKKyAgICAgICAgRW5hYmxpbmcgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkgZm9yIFM2MCBh
bmQgYWRkZWQgUzYwIHNwZWNpZmljIAorICAgICAgICBuZXcgcGx1Z2luIGZpbGVzIHRvIGJlIGNv
bXBpbGVkIHVuZGVyIHN5bWJpYW46IG1hY3JvCisKKyAgICAgICAgKiBicmlkZ2UvbnBhcGkuaDoK
KyAgICAgICAgQWRkZWQgTlBFdmVudCBkZWZpbml0aW9uIGZvciBTeW1iaWFuCisKKyAgICAgICAg
KiBwbHVnaW5zL1BsdWdpblBhY2thZ2UuaDoKKyAgICAgICAgQWRkZWQgUzYwIHNwZWNpZmljIHBs
dWdpbiBpbnRlcmZhY2UgYW5kIHBsdWdpbiBsb2FkZXIgdmFyaWFibGVzCisgICAgICAgICogcGx1
Z2lucy9QbHVnaW5QYWNrYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OnVubG9hZCk6IEFkZGVkICFQTEFURk9STShTWU1CSUFOKSBtYWNyby4KKyAgICAgICAgRGVmYXVs
dCBpbXBsZW1lbnRhdGlvbiB0byBiZSB1c2VkIG9ubHkgZm9yIG5vbi1zeW1iaWFuIHBsYXRmb3Jt
CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAgIE1hY3JvICFT
WU1CSUFOIGNoZWNraW5nCisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAg
IEFkZCBTeW1iaWFuIHRvIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgc2V0TlBXaW5kb3dJZk5lZWRl
ZAorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRGcmFtZVJlY3QpOiBBZGQgU3ltYmlhbiB0byBwbGF0Zm9ybXMgdGhhdAor
ICAgICAgICBjYWxsIHNldE5QV2luZG93UmVjdCBmcm9tIHNldEZyYW1lUmVjdAorICAgICAgICAg
CisgICAgICAgIEFkZGVkIGZvbGRlciAnc3ltYmlhbicgd2hpY2ggY29udGFpbnMgaW1wbGVtZW50
YXRpb24gZmlsZXMgZm9yIFM2MAorICAgICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBOUEFQSSBwbHVn
aW4gZnVuY3Rpb25hbGl0eSwgdW5kZXIgL3BsdWdpbnMgZm9sZGVyCisgICAgICAgICogcGx1Z2lu
cy9zeW1iaWFuCisgICAgICAgICogcGx1Z2lucy9zeW1iaWFuL25waW50ZXJmYWNlLmg6CisgICAg
ICAgIFBsdWdpbiBJbnRlcmZhY2UgdG8gYmUgaW1wbGVtZW50ZWQgYnkgUzYwIE5QQVBJIHBsdWdp
bnMgCisgICAgICAgICogcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uaDoK
KyAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFpbmVyU3ltYmlhbi5jcHA6Cisg
ICAgICAgICogcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkRhdGFiYXNlU3ltYmlhbi5jcHA6CisgICAg
ICAgICogcGx1Z2lucy9zeW1iaWFuL1BsdWdpblZpZXdTeW1iaWFuLmNwcDoKKyAgICAgICAgKiBw
bHVnaW5zL3N5bWJpYW4vUGx1Z2luUGFja2FnZVN5bWJpYW4uY3BwOgorCiAyMDA5LTEwLTEwICBP
bGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHBhdGhzIGluIHhj
b2RlLgpJbmRleDogV2ViQ29yZS9icmlkZ2UvbnBhcGkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JyaWRnZS9ucGFwaS5oCShyZXZpc2lvbiA0OTQyMikKKysrIFdlYkNvcmUvYnJpZGdlL25wYXBp
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDEwIEBACiAjICAgIGVuZGlmIC8qIFhQX1dJ
TiAqLwogI2VuZGlmIC8qIF9XSU4zMiAqLwogCisjaWZkZWYgX19TWU1CSUFOMzJfXworIyAgICBk
ZWZpbmUgWFBfU1lNQklBTgorI2VuZGlmIC8qIF9fU1lNQklBTjMyX18gKi8KKwogI2lmZGVmIF9f
TVdFUktTX18KICMgICAgZGVmaW5lIF9kZWNsc3BlYyBfX2RlY2xzcGVjCiAjICAgIGlmZGVmIG1h
Y2ludG9zaApAQCAtMTA2LDcgKzExMCw5IEBACiAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAjZW5k
aWYKIAotI2lmZGVmIFhQX1dJTgorI2lmIGRlZmluZWQoWFBfU1lNQklBTikKKyAgICAjaW5jbHVk
ZSA8UUV2ZW50PgorI2VsaWYgZGVmaW5lZChYUF9XSU4pCiAgICAgI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KICNlbmRpZgogCkBAIC00MjksNiArNDM1LDEyIEBACiAgICAgTlBXaW5kb3dUeXBlRHJhd2Fi
bGUKIH0gTlBXaW5kb3dUeXBlOwogCisjaWZkZWYgWFBfU1lNQklBTgordHlwZWRlZiBlbnVtIHsK
KyAgICBOUFF0RXZlbnRQYWludCA9IDEKK30gTlBRdEV2ZW50VHlwZTsKKyNlbmRpZgorCiAjaWZk
ZWYgWFBfTUFDT1NYCiAKIC8qCkBAIC01NzgsMTMgKzU5MCwxNSBAQAogdHlwZWRlZiBFdmVudFJl
Y29yZCAgICBOUEV2ZW50OwogI2VuZGlmCiAKKyNlbGlmIGRlZmluZWQoWFBfU1lNQklBTikKK3R5
cGVkZWYgUUV2ZW50IE5QRXZlbnQ7CiAjZWxpZiBkZWZpbmVkKFhQX1dJTikKIHR5cGVkZWYgc3Ry
dWN0IF9OUEV2ZW50CiB7Ci0gICAgdWludDE2ICAgZXZlbnQ7Ci0gICAgdWludDMyICAgd1BhcmFt
OwotICAgIHVpbnQzMiAgIGxQYXJhbTsKLX0gTlBFdmVudDsKKyAgICAgICAgdWludDE2ICAgZXZl
bnQ7CisgICAgICAgIHVpbnQzMiAgIHdQYXJhbTsKKyAgICAgICAgdWludDMyICAgbFBhcmFtOwor
ICAgIH0gTlBFdmVudDsKICNlbGlmIGRlZmluZWQgKFhQX1VOSVgpCiB0eXBlZGVmIFhFdmVudCBO
UEV2ZW50OwogI2Vsc2UKQEAgLTYwNCw3ICs2MTgsNyBAQAogdHlwZWRlZiBSZ25IYW5kbGUgTlBR
RFJlZ2lvbjsKICNlbmRpZgogdHlwZWRlZiBDR1BhdGhSZWYgTlBDR1JlZ2lvbjsKLSNlbGlmIGRl
ZmluZWQoWFBfV0lOKQorI2VsaWYgIWRlZmluZWQoWFBfU1lNQklBTikgJiYgZGVmaW5lZChYUF9X
SU4pCiB0eXBlZGVmIEhSR04gTlBSZWdpb247CiAjZWxpZiBkZWZpbmVkKFhQX1VOSVgpCiB0eXBl
ZGVmIFJlZ2lvbiBOUFJlZ2lvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41074</attachid>
            <date>2009-10-12 17:53:29 -0700</date>
            <delta_ts>2009-10-13 14:41:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>29302.patch</filename>
            <type>text/plain</type>
            <size>42367</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuaAkocmV2aXNpb24gNDk0MjIpCisrKyBXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyArMzExLDcgQEAKIAogcHJp
dmF0ZToKIAotI2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgZGVmaW5lZChRX1dTX1gxMSkKKyNpZiBk
ZWZpbmVkKFhQX1VOSVgpIHx8IGRlZmluZWQoUV9XU19YMTEpIHx8IFBMQVRGT1JNKFNZTUJJQU4p
CiAgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogI2VsaWYgZGVmaW5lZChYUF9N
QUNPU1gpCiAgICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dDb250ZXh0OwpJbmRleDogV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmNwcAkocmV2aXNpb24gNDk0MjIpCisrKyBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQAogICAg
IG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxlbmd0aCgpIC0gbV9maWxl
TmFtZS5sZW5ndGgoKSAtIDEpOwogfQogCisjaWYgIVBMQVRGT1JNKFNZTUJJQU4pCiB2b2lkIFBs
dWdpblBhY2thZ2U6OnVubG9hZCgpCiB7CiAgICAgaWYgKCFtX2lzTG9hZGVkKQpAQCAtMTI1LDYg
KzEyNiw3IEBACiAKICAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKIH0KKyNlbmRpZiAvLyFQ
TEFURk9STShTWU1CSUFOKQogCiB2b2lkIFBsdWdpblBhY2thZ2U6OnVubG9hZFdpdGhvdXRTaHV0
ZG93bigpCiB7CkBAIC0xOTYsNyArMTk4LDcgQEAKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JN
KFdJTl9PUykKKyNpZiBQTEFURk9STShTWU1CSUFOKSB8fCAhUExBVEZPUk0oV0lOX09TKQogdm9p
ZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCkK
IHsKICAgICAvLyBJdCdzIGEgYml0IGxhbWUgdG8gZGV0ZWN0IHRoZSBwbHVnaW4gdmVyc2lvbiBi
eSBwYXJzaW5nIGl0CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHJldmlzaW9u
IDQ5NDIyKQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBACiAgICAgbV9wcmVmZXJyZWRQbHVnaW5zLmNsZWFyKCk7
CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOX09TKSB8fCBQTEFURk9STShXWCkKKyNpZiAoIVBMQVRG
T1JNKFNZTUJJQU4pKSAmJiAoIVBMQVRGT1JNKFdJTl9PUykgfHwgUExBVEZPUk0oV1gpKQogLy8g
Rm9yIFNhZmFyaS9XaW4gdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRl
ZAogLy8gaW4gUGx1Z2luRGF0YWJhc2VXaW4uY3BwLCBidXQgaWYgd2UgY2FuIHVzZSBXZWJDb3Jl
IGNvbnN0cnVjdHMKIC8vIGZvciB0aGUgbG9naWMgd2Ugc2hvdWxkIHBlcmhhcHMgbW92ZSBpdCBo
ZXJlIHVuZGVyIFhQX1dJTj8KQEAgLTQyOCw2ICs0MjgsNiBAQAogICAgIH0KIH0KIAotI2VuZGlm
IC8vICFQTEFURk9STShXSU5fT1MpCisjZW5kaWYgLy8gIVBMQVRGT1JNKFNZTUJJQU4pICYmICFQ
TEFURk9STShXSU5fT1MpCiAKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9u
IDQ5NDIyKQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OSw2ICs2OSwxMCBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNWYWx1ZS5oPgogI2luY2x1
ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAKKyNpZiBDT01QSUxFUihXSU5TQ1cpCisjdW5kZWYgWFBf
V0lOCisjZW5kaWYKKwogdXNpbmcgSlNDOjpFeGVjU3RhdGU7CiB1c2luZyBKU0M6OkpTTG9jazsK
IHVzaW5nIEpTQzo6SlNPYmplY3Q7CkBAIC0xMjQsOCArMTI4LDggQEAKIAogICAgIHVwZGF0ZVBs
dWdpbldpZGdldCgpOwogCi0jaWYgUExBVEZPUk0oV0lOX09TKQotICAgIC8vIE9uIFdpbmRvd3Ms
IGFsd2F5cyBjYWxsIHBsdWdpbiB0byBjaGFuZ2UgZ2VvbWV0cnkuCisjaWYgUExBVEZPUk0oV0lO
X09TKSB8fCBQTEFURk9STShTWU1CSUFOKQorICAgIC8vIE9uIFdpbmRvd3MgYW5kIFN5bWJpYW4s
IGFsd2F5cyBjYWxsIHBsdWdpbiB0byBjaGFuZ2UgZ2VvbWV0cnkuCiAgICAgc2V0TlBXaW5kb3dS
ZWN0KHJlY3QpOwogI2VsaWYgWFBfVU5JWAogICAgIC8vIE9uIFVuaXgsIG11bHRpcGxlIGNhbGxz
IHRvIHNldE5QV2luZG93KCkgaW4gd2luZG93ZWQgbW9kZSBjYXVzZXMgRmxhc2ggdG8gY3Jhc2gK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAkocmV2aXNpb24gNDk0MjIpCisrKyBXZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxMSBA
QAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
IAorI2lmIFBMQVRGT1JNKFNZTUJJQU4pCitjbGFzcyBRUGx1Z2luTG9hZGVyOworY2xhc3MgTlBJ
bnRlcmZhY2U7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOwogICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKQEAg
LTcwLDkgKzc1LDE3IEBACiAgICAgICAgIGludCBjb21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2Um
KSBjb25zdDsKICAgICAgICAgUGx1Z2luUXVpcmtTZXQgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4g
bV9xdWlya3M7IH0KICAgICAgICAgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJiB2ZXJzaW9u
KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVWZXJzaW9uOyB9CisjaWYgUExBVEZPUk0oU1lNQklB
TikKKyAgICAgICAgTlBJbnRlcmZhY2UqIG5wSW50ZXJmYWNlKCkgeyByZXR1cm4gbV9ucEludGVy
ZmFjZTt9CisjZW5kaWYgLy8gUExBVEZPUk0oU1lNQklBTikKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIFBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RN
b2RpZmllZCk7CisKKyNpZiBQTEFURk9STShTWU1CSUFOKQorICAgICAgICBOUEludGVyZmFjZSog
bV9ucEludGVyZmFjZTsKKyAgICAgICAgUVBsdWdpbkxvYWRlciogbV9wbHVnaW5Mb2FkZXI7Cisj
ZW5kaWYgLy8gUExBVEZPUk0oU1lNQklBTikKICAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKICAg
ICAgICAgYm9vbCBpc1BsdWdpbkJsYWNrbGlzdGVkKCk7CiAgICAgICAgIHZvaWQgZGV0ZXJtaW5l
UXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3N5
bWJpYW4vbnBpbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvc3ltYmlh
bi9ucGludGVyZmFjZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4v
bnBpbnRlcmZhY2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoNCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQ0KKw0KKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yDQorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorDQor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLA0KKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQ0KKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bw0KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLA0KKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4NCisqLw0KKyNpZm5kZWYgbnBpbnRlcmZhY2VfSA0KKyNkZWZpbmUg
bnBpbnRlcmZhY2VfSA0KKw0KKyNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIg0KKyNpbmNsdWRlIDxR
dFBsdWdpbj4NCisjaW5jbHVkZSA8UVBhaW50ZXI+DQorI2luY2x1ZGUgPFFFdmVudD4NCisNCitj
bGFzcyBEcmF3RXZlbnQgOiBwdWJsaWMgUUV2ZW50IHsNCitwdWJsaWM6DQorICAgIERyYXdFdmVu
dCgpIDogUUV2ZW50KFFFdmVudDo6VHlwZShRRXZlbnQ6OlVzZXIgKyBOUFF0RXZlbnRQYWludCkp
IHt9DQorICAgIHZvaWQgc2V0UGFpbnRlcihRUGFpbnRlciogcCkgeyBtX3BhaW50ZXIgPSBwOyB9
DQorICAgIFFQYWludGVyKiBwYWludGVyKCkgeyByZXR1cm4gbV9wYWludGVyOyB9DQorcHJpdmF0
ZToNCisgICAgUVBhaW50ZXIqIG1fcGFpbnRlcjsNCit9Ow0KKw0KK2NsYXNzIE5QSW50ZXJmYWNl
IHsNCitwdWJsaWM6DQorICAgIHZpcnR1YWwgTlBFcnJvciBOUF9Jbml0aWFsaXplKE5QTmV0c2Nh
cGVGdW5jcyAqYU5QTkZ1bmNzLCBOUFBsdWdpbkZ1bmNzICphTlBQRnVuY3MpID0gMDsNCisgICAg
dmlydHVhbCB2b2lkIE5QX1NodXRkb3duKCkgPSAwOw0KKyAgICB2aXJ0dWFsIGNoYXIqIE5QX0dl
dE1JTUVEZXNjcmlwdGlvbigpID0gMDsNCit9Ow0KKw0KKw0KK1FUX0JFR0lOX05BTUVTUEFDRQ0K
K1FfREVDTEFSRV9JTlRFUkZBQ0UoTlBJbnRlcmZhY2UsICJjb20ubm9raWEucXRzNjAud2VicGx1
Z2luLzEuMCIpOw0KK1FUX0VORF9OQU1FU1BBQ0UNCisNCisjZW5kaWYgLy8gbnBpbnRlcmZhY2Vf
SA0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5l
clN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1
Z2luQ29udGFpbmVyU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKy8q
DQorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykNCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLg0KKw0KKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8NCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwNCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuDQorKi8NCisNCisjaW5jbHVkZSAiY29uZmlnLmgi
DQorI2luY2x1ZGUgIlBsdWdpbkNvbnRhaW5lclN5bWJpYW4uaCINCisNCisjaW5jbHVkZSAiRm9j
dXNDb250cm9sbGVyLmgiDQorI2luY2x1ZGUgIkZyYW1lLmgiDQorI2luY2x1ZGUgIkZyYW1lVmll
dy5oIg0KKyNpbmNsdWRlICJQYWdlLmgiDQorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVu
dC5oIg0KKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiDQorDQorI2luY2x1ZGUgPFFBcHBsaWNhdGlv
bj4NCisjaW5jbHVkZSA8UVdpZGdldD4NCisNCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsNCisN
CitQbHVnaW5Db250YWluZXJTeW1iaWFuOjpQbHVnaW5Db250YWluZXJTeW1iaWFuKFBsdWdpblZp
ZXcqIHZpZXcsIFFXaWRnZXQqIHBhcmVudCkNCisgICAgOiBtX3BhcmVudChwYXJlbnQpDQorICAg
ICwgbV9wbHVnaW5WaWV3KHZpZXcpDQorICAgICwgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2Uo
ZmFsc2UpDQorew0KKyAgICBzZXRQYXJlbnQobV9wYXJlbnQpOw0KK30NCisNCitQbHVnaW5Db250
YWluZXJTeW1iaWFuOjp+UGx1Z2luQ29udGFpbmVyU3ltYmlhbigpDQorew0KK30NCisNCit2b2lk
IFBsdWdpbkNvbnRhaW5lclN5bWJpYW46OnJlcXVlc3RHZW9tZXRyeShjb25zdCBRUmVjdCYgcmVj
dCwgY29uc3QgUVJlZ2lvbiYgY2xpcCkNCit7DQorICAgIGlmIChtX3dpbmRvd1JlY3QgIT0gcmVj
dCB8fCBtX2NsaXBSZWdpb24gIT0gY2xpcCkgew0KKyAgICAgICAgbV93aW5kb3dSZWN0ID0gcmVj
dDsNCisgICAgICAgIG1fY2xpcFJlZ2lvbiA9IGNsaXA7DQorICAgICAgICBtX2hhc1BlbmRpbmdH
ZW9tZXRyeUNoYW5nZSA9IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBQbHVnaW5Db250YWlu
ZXJTeW1iaWFuOjphZGp1c3RHZW9tZXRyeSgpDQorew0KKyAgICBpZiAobV9oYXNQZW5kaW5nR2Vv
bWV0cnlDaGFuZ2UpIHsNCisgICAgICAgIHNldEdlb21ldHJ5KG1fd2luZG93UmVjdCk7DQorICAg
ICAgICBzZXRNYXNrKG1fY2xpcFJlZ2lvbik7DQorICAgICAgICBtX2hhc1BlbmRpbmdHZW9tZXRy
eUNoYW5nZSA9IGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgUGx1Z2luQ29udGFpbmVyU3lt
Ymlhbjo6Zm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50KiBldmVudCkNCit7DQorICAgIGlmIChQYWdl
KiBwYWdlID0gbV9wbHVnaW5WaWV3LT5wYXJlbnRGcmFtZSgpLT5wYWdlKCkpDQorICAgICAgICBw
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKHRydWUpOw0KKw0KKyAgICBtX3BsdWdp
blZpZXctPmZvY3VzUGx1Z2luRWxlbWVudCgpOw0KK30NCisNCit2b2lkIFBsdWdpbkNvbnRhaW5l
clN5bWJpYW46OmZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqKQ0KK3sNCisgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBtX3BsdWdpblZpZXctPnBhcmVudEZyYW1lKCktPnBhZ2UoKSkNCisgICAgICAgIHBh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUoZmFsc2UpOw0KK30NCkluZGV4OiBXZWJD
b3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5EYXRhYmFzZVN5bWJpYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkRhdGFiYXNlU3ltYmlhbi5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5EYXRhYmFzZVN5bWJp
YW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACisvKg0KKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpDQor
DQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLg0KKyovDQorI2luY2x1ZGUgImNvbmZpZy5oIg0KKyNpbmNsdWRlICJQbHVnaW5E
YXRhYmFzZS5oIg0KKw0KKyNpbmNsdWRlIDxRRmlsZUluZm8+DQorI2luY2x1ZGUgPGYzMmZpbGUu
aD4NCisNCitzdGF0aWMgY29uc3QgY2hhciBRVFBMVUdJTl9GSUxURVJbXSA9ICIqLnF0cGx1Z2lu
IjsNCitzdGF0aWMgY29uc3QgY2hhciBRVF9QTFVHSU5fRk9MREVSW10gPSAiOlxccmVzb3VyY2Vc
XHF0XFxwbHVnaW5zXFxucHF0cGx1Z2luc1xcIjsNCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQor
DQorVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3Rvcmll
cygpDQorew0KKyAgICBWZWN0b3I8U3RyaW5nPiBkaXJlY3RvcmllczsNCisgICAgLy9maW5kIHRo
ZSBpbnN0YWxsYXRpb24gZHJpdmUNCisgICAgVERyaXZlTGlzdCBkcml2ZWxpc3Q7DQorICAgIFRD
aGFyIGRyaXZlTGV0dGVyOw0KKyAgICBSRnMgZnNTZXNzaW9uOw0KKyAgICANCisgICAgaWYgKGZz
U2Vzc2lvbi5Db25uZWN0KCkgPT0gS0Vyck5vbmUgJiYgZnNTZXNzaW9uLkRyaXZlTGlzdChkcml2
ZWxpc3QpID09IEtFcnJOb25lKSB7DQorICAgICAgICBmb3IgKFRJbnQgZHJpdmVOdW1iZXIgPSBF
RHJpdmVBOyBkcml2ZU51bWJlciA8PSBFRHJpdmVaOyBkcml2ZU51bWJlcisrKSB7DQorICAgICAg
ICAgICAgaWYgKGRyaXZlbGlzdFtkcml2ZU51bWJlcl0gJiYgZnNTZXNzaW9uLkRyaXZlVG9DaGFy
KGRyaXZlTnVtYmVyLCBkcml2ZUxldHRlcikgPT0gS0Vyck5vbmUpIHsNCisgICAgICAgICAgICAg
ICAgUVN0cmluZyBkcml2ZVN0cmluZ1ZhbHVlKFFDaGFyKCh1aW50KWRyaXZlTGV0dGVyLkdldFVw
cGVyQ2FzZSgpKSk7DQorICAgICAgICAgICAgICAgIFFTdHJpbmcgc3R1YkRpclBhdGg7DQorICAg
ICAgICAgICAgICAgIHN0dWJEaXJQYXRoLmFwcGVuZChkcml2ZVN0cmluZ1ZhbHVlKTsNCisgICAg
ICAgICAgICAgICAgc3R1YkRpclBhdGguYXBwZW5kKFFUX1BMVUdJTl9GT0xERVIpOw0KKyAgICAg
ICAgICAgICAgICBpZiAoUUZpbGVJbmZvKHN0dWJEaXJQYXRoKS5leGlzdHMoKSkNCisgICAgICAg
ICAgICAgICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChzdHViRGlyUGF0aCk7DQorICAgICAgICAg
ICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZzU2Vzc2lvbi5DbG9zZSgpOw0KKyAg
ICByZXR1cm4gZGlyZWN0b3JpZXM7DQorfQ0KKw0KK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJl
ZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkNCit7DQorICAgIHJldHVy
biB0cnVlOw0KK30NCisNCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGly
ZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JiBwYXRocykgY29uc3QNCit7DQorICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0Lg0KKyAgICBIYXNoU2V0PFN0
cmluZz4gdW5pcXVlRmlsZW5hbWVzOw0KKw0KKyAgICBTdHJpbmcgZmlsZU5hbWVGaWx0ZXIoUVRQ
TFVHSU5fRklMVEVSKTsNCisNCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGRp
cnNFbmQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmVuZCgpOw0KKyAgICBmb3IgKFZlY3RvcjxTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBkSXQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmJlZ2luKCk7IGRJ
dCAhPSBkaXJzRW5kOyArK2RJdCkgew0KKyAgICAgICAgVmVjdG9yPFN0cmluZz4gcGx1Z2luUGF0
aHMgPSBsaXN0RGlyZWN0b3J5KCpkSXQsIGZpbGVOYW1lRmlsdGVyKTsNCisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwbHVnaW5zRW5kID0gcGx1Z2luUGF0aHMuZW5kKCk7
DQorICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwSXQgPSBwbHVn
aW5QYXRocy5iZWdpbigpOyBwSXQgIT0gcGx1Z2luc0VuZDsgKytwSXQpIHsNCisgICAgICAgICAg
ICBpZiAoIWZpbGVFeGlzdHMoKnBJdCkpDQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAg
ICAgICAgICAgIHBhdGhzLmFkZCgqcEl0KTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit9
DQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFpbmVyU3ltYmlhbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5
bWJpYW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNv
bnRhaW5lclN5bWJpYW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoNCisgICAg
Q29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQ0KKw0KKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQor
DQorICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLA0KKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQ0KKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bw0KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLA0KKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4NCisqLw0KKw0KKyNpZm5kZWYgUGx1Z2luQ29udGFpbmVyU3lt
Ymlhbl9oDQorI2RlZmluZSBQbHVnaW5Db250YWluZXJTeW1iaWFuX2gNCisNCisjaW5jbHVkZSA8
UVdpZGdldD4NCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQorICAgIGNsYXNzIFBsdWdpblZp
ZXc7DQorDQorICAgIGNsYXNzIFBsdWdpbkNvbnRhaW5lclN5bWJpYW4gOiBwdWJsaWMgUVdpZGdl
dCB7DQorICAgICAgICBRX09CSkVDVA0KKyAgICBwdWJsaWM6DQorICAgICAgICBQbHVnaW5Db250
YWluZXJTeW1iaWFuKFBsdWdpblZpZXcqLCBRV2lkZ2V0KiBwYXJlbnQpOw0KKyAgICAgICAgflBs
dWdpbkNvbnRhaW5lclN5bWJpYW4oKTsNCisNCisgICAgICAgIHZvaWQgcmVxdWVzdEdlb21ldHJ5
KGNvbnN0IFFSZWN0JiwgY29uc3QgUVJlZ2lvbiYgY2xpcCA9IFFSZWdpb24oKSk7DQorICAgICAg
ICB2b2lkIGFkanVzdEdlb21ldHJ5KCk7DQorDQorICAgIHByb3RlY3RlZDoNCisgICAgICAgIHZp
cnR1YWwgdm9pZCBmb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQqKTsNCisgICAgICAgIHZpcnR1YWwg
dm9pZCBmb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50Kik7DQorICAgIHByaXZhdGU6DQorICAgICAg
ICBQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7DQorICAgICAgICBRV2lkZ2V0KiBtX3BhcmVudDsN
CisgICAgICAgIFFSZWN0IG1fd2luZG93UmVjdDsNCisgICAgICAgIFFSZWdpb24gbV9jbGlwUmVn
aW9uOw0KKyAgICAgICAgYm9vbCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZTsNCisgICAgfTsN
Cit9DQorDQorI2VuZGlmIC8vIFBsdWdpbkNvbnRhaW5lclN5bWJpYW5faA0KSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpblZpZXdTeW1iaWFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5WaWV3U3ltYmlhbi5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5WaWV3U3ltYmlhbi5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDY2IEBACisvKg0KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpDQorDQorICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IN
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMNCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyDQorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mDQorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VDQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvDQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsDQorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLg0K
KyovDQorI2luY2x1ZGUgImNvbmZpZy5oIg0KKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiDQorDQor
I2luY2x1ZGUgIkRvY3VtZW50LmgiDQorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiDQorI2lu
Y2x1ZGUgIkVsZW1lbnQuaCINCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCINCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIg0KKyNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIg0KKyNpbmNsdWRlICJGcmFtZVRyZWUuaCINCisjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiDQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIg0KKyNpbmNsdWRlICJIVE1MTmFt
ZXMuaCINCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCINCisjaW5jbHVkZSAiSW1hZ2Uu
aCINCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiDQorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCINCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIg0KKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
Ig0KKyNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIg0KKyNpbmNsdWRlICJucGludGVyZmFjZS5oIg0K
KyNpbmNsdWRlICJQYWdlLmgiDQorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIg0K
KyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCINCisjaW5jbHVkZSAiUGx1Z2luQ29udGFp
bmVyU3ltYmlhbi5oIg0KKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIg0KKyNpbmNsdWRlICJQbHVn
aW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiDQorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCINCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCINCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIg0K
KyNpbmNsdWRlICJTZXR0aW5ncy5oIg0KKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIg0KKyNp
bmNsdWRlICJydW50aW1lLmgiDQorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIg0KKyNpbmNsdWRl
ICJRV2ViUGFnZUNsaWVudC5oIg0KKyNpbmNsdWRlIDxRS2V5RXZlbnQ+DQorI2luY2x1ZGUgPFFQ
aXhtYXAuaD4NCisjaW5jbHVkZSA8UVJlZ2lvbj4NCisjaW5jbHVkZSA8UVZlY3Rvcj4NCisjaW5j
bHVkZSA8UVdpZGdldD4NCisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4NCisjaW5jbHVkZSA8
cnVudGltZS9KU1ZhbHVlLmg+DQorDQordXNpbmcgSlNDOjpFeGVjU3RhdGU7DQordXNpbmcgSlND
OjpJbnRlcnByZXRlcjsNCit1c2luZyBKU0M6OkpTTG9jazsNCit1c2luZyBKU0M6OkpTT2JqZWN0
Ow0KK3VzaW5nIEpTQzo6VVN0cmluZzsNCisNCit1c2luZyBuYW1lc3BhY2Ugc3RkOw0KKw0KK3Vz
aW5nIG5hbWVzcGFjZSBXVEY7DQorDQorbmFtZXNwYWNlIFdlYkNvcmUgew0KKw0KK3VzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7DQorDQordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRn
ZXQoKQ0KK3sNCisgICAgaWYgKCFwYXJlbnQoKSkNCisgICAgICAgIHJldHVybjsNCisgICAgQVNT
RVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsNCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7DQorICAgIEludFJlY3Qgb2xkV2lu
ZG93UmVjdCA9IG1fd2luZG93UmVjdDsNCisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xp
cFJlY3Q7DQorICAgIA0KKyAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29u
dGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6ZSgp
KTsNCisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7DQorICAgIG1fY2xpcFJlY3Qu
bW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOw0KKyAgICBpZiAobV93
aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3QgJiYgbV9jbGlwUmVjdCA9PSBvbGRDbGlwUmVjdCkK
KyAgICAgICAgcmV0dXJuOw0KKw0KKyAgICAvLyBpbiBvcmRlciB0byBtb3ZlL3Jlc2l6ZSB0aGUg
cGx1Z2luIHdpbmRvdyBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSByZXN0IG9mIGZyYW1lDQorICAg
IC8vIGR1cmluZyBlLmcuIHNjcm9sbGluZywgd2Ugc2V0IHRoZSBtYXNrIGFuZCBnZW9tZXRyeSBp
biB0aGUgcGFpbnQoKSBmdW5jdGlvbiwgYnV0DQorICAgIC8vIGFzIHBhaW50KCkgaXNuJ3QgY2Fs
bGVkIHdoZW4gdGhlIHBsdWdpbiB3aW5kb3cgaXMgb3V0c2lkZSB0aGUgZnJhbWUgd2hpY2ggY2Fu
DQorICAgIC8vIGJlIGNhdXNlZCBieSBhIHNjcm9sbCwgd2UgbmVlZCB0byBtb3ZlL3Jlc2l6ZSBp
bW1lZGlhdGVseS4NCisgICAgaWYgKCFtX3dpbmRvd1JlY3QuaW50ZXJzZWN0cyhmcmFtZVZpZXct
PmZyYW1lUmVjdCgpKSkNCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsNCit9DQorDQor
dm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cygpDQorew0KKyAgICBpZiAocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0Rm9jdXMoUXQ6Ok90
aGVyRm9jdXNSZWFzb24pOworICAgIGVsc2UKKyAgICAgICAgV2lkZ2V0OjpzZXRGb2N1cygpOw0K
K30NCisNCit2b2lkIFBsdWdpblZpZXc6OnNob3coKQ0KK3sNCisgICAgc2V0U2VsZlZpc2libGUo
dHJ1ZSk7DQorCisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCkpCisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldFZpc2libGUodHJ1ZSk7
Cit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkNCit7DQorICAgIHNldFNlbGZWaXNpYmxl
KGZhbHNlKTsNCisNCisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldFZpc2libGUoZmFs
c2UpOworfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQ0KK3sNCisgICAgaWYgKCFtX2lzU3RhcnRlZCkgew0K
KyAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsNCisgICAgICAg
IHJldHVybjsNCisgICAgfQ0KKyAgICANCisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSkNCisgICAgICAgIHJldHVybjsNCisgICAgDQorICAgIHNldE5QV2luZG93SWZOZWVkZWQo
KTsKKw0KKyAgICBpZiAobV9pc1dpbmRvd2VkICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpDQor
ICAgICAgICBzdGF0aWNfY2FzdDxQbHVnaW5Db250YWluZXJTeW1iaWFuKj4ocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSktPmFkanVzdEdlb21ldHJ5KCk7DQorDQorICAgIGlmIChtX2lzV2luZG93ZWQp
CisgICAgICAgIHJldHVybjsKKw0KKyAgICBjb250ZXh0LT5zYXZlKCk7DQorICAgIEludFJlY3Qg
Y2xpcFJlY3QocmVjdCk7DQorICAgIGNsaXBSZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7DQor
ICAgIGNvbnRleHQtPmNsaXAoY2xpcFJlY3QpOw0KKyAgICBjb250ZXh0LT50cmFuc2xhdGUoZnJh
bWVSZWN0KCkubG9jYXRpb24oKS54KCksIGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkueSgpKTsNCisN
CisgICAgRHJhd0V2ZW50IGV2Ow0KKyAgICBldi5zZXRQYWludGVyKGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpKTsNCisgICAgUUV2ZW50JiBucEV2ZW50ID0gZXY7DQorICAgIGRpc3BhdGNoTlBF
dmVudChucEV2ZW50KTsNCisNCisgICAgY29udGV4dC0+cmVzdG9yZSgpOw0KK30NCisNCisvLyBU
T0RPOiBVbmlmeSBhY3Jvc3MgcG9ydHMuCitib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVu
dChOUEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5l
dmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVu
dFBsdWdpblZpZXcodGhpcyk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworCisgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKKyAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2
ZW50KG1faW5zdGFuY2UsICZldmVudCk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Cisg
ICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7DQorCisgICAgcmV0dXJuIGFj
Y2VwdGVkOworfQorDQordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJv
YXJkRXZlbnQqIGV2ZW50KQ0KK3sNCisgICAgaWYgKG1faXNXaW5kb3dlZCkNCisgICAgICAgIHJl
dHVybjsNCisNCisgICAgUUV2ZW50JiBucEV2ZW50ID0gKihldmVudC0+a2V5RXZlbnQoKS0+cXRF
dmVudCgpKTsNCisgICAgaWYgKCFkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCisgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
TW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkNCit7DQorICAgIGlmIChtX2lzV2luZG93ZWQp
DQorICAgICAgICByZXR1cm47DQorDQorICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZWRvd25FdmVudCkgeworICAgICAgICAvLyBHaXZlIGZvY3VzIHRvIHRoZSBwbHVn
aW4gb24gY2xpY2sKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdl
KCkpCisgICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKHRydWUp
OworCisgICAgICAgIGZvY3VzUGx1Z2luRWxlbWVudCgpOworICAgIH0KKw0KKyAgICBRRXZlbnQ6
OlR5cGUgdHlwZTsNCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50KQ0KKyAgICAgICAgdHlwZSA9IFFFdmVudDo6TW91c2VCdXR0b25QcmVzczsNCisg
ICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQp
DQorICAgICAgICB0eXBlID0gUUV2ZW50OjpNb3VzZU1vdmU7DQorICAgIGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkNCisgICAgICAgIHR5cGUgPSBR
RXZlbnQ6Ok1vdXNlQnV0dG9uUmVsZWFzZTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuOw0K
Kw0KKyAgICBRUG9pbnQgcG9zaXRpb24oZXZlbnQtPm9mZnNldFgoKSwgZXZlbnQtPm9mZnNldFko
KSk7DQorICAgIFF0OjpNb3VzZUJ1dHRvbiBidXR0b247DQorICAgIHN3aXRjaCAoZXZlbnQtPndo
aWNoKCkpIHsNCisgICAgY2FzZSAxOg0KKyAgICAgICAgYnV0dG9uID0gUXQ6OkxlZnRCdXR0b247
DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSAyOg0KKyAgICAgICAgYnV0dG9uID0gUXQ6Ok1p
ZEJ1dHRvbjsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIDM6DQorICAgICAgICBidXR0b24g
PSBRdDo6UmlnaHRCdXR0b247DQorICAgICAgICBicmVhazsNCisgICAgZGVmYXVsdDoNCisgICAg
ICAgIGJ1dHRvbiA9IFF0OjpOb0J1dHRvbjsNCisgICAgfQ0KKyAgICBRdDo6S2V5Ym9hcmRNb2Rp
ZmllcnMgbW9kaWZpZXJzID0gMDsNCisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpDQorICAgICAg
ICBtb2RpZmllcnMgfD0gUXQ6OkNvbnRyb2xNb2RpZmllcjsNCisgICAgaWYgKGV2ZW50LT5hbHRL
ZXkoKSkNCisgICAgICAgIG1vZGlmaWVycyB8PSBRdDo6QWx0TW9kaWZpZXI7DQorICAgIGlmIChl
dmVudC0+c2hpZnRLZXkoKSkNCisgICAgICAgIG1vZGlmaWVycyB8PSBRdDo6U2hpZnRNb2RpZmll
cjsNCisgICAgaWYgKGV2ZW50LT5tZXRhS2V5KCkpDQorICAgICAgICBtb2RpZmllcnMgfD0gUXQ6
Ok1ldGFNb2RpZmllcjsNCisgICAgUU1vdXNlRXZlbnQgbW91c2VFdmVudCh0eXBlLCBwb3NpdGlv
biwgYnV0dG9uLCBidXR0b24sIG1vZGlmaWVycyk7IA0KKyAgICBRRXZlbnQmIG5wRXZlbnQgPSBt
b3VzZUV2ZW50Ow0KKyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKKyAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpzZXRQ
YXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQ0KK3sNCisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFy
ZW50KTsNCisNCisgICAgaWYgKHBhcmVudCkNCisgICAgICAgIGluaXQoKTsNCit9DQorDQordm9p
ZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpDQorew0KKyAgICBp
ZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworfQ0KKw0K
K3ZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX2lz
U3RhcnRlZCB8fCAhcGFyZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5k
b3cpCisgICAgICAgIHJldHVybjsNCisgICAgaWYgKG1faXNXaW5kb3dlZCkgew0KKyAgICAgICAg
QVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworICAgICAgICBwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLT5zZXRHZW9tZXRyeShtX3dpbmRvd1JlY3QpOworICAgICAgICAvLyBpZiBzZXRNYXNr
IGlzIHNldCB3aXRoIGFuIGVtcHR5IFFSZWdpb24sIG5vIGNsaXBwaW5nIHdpbGwKKyAgICAgICAg
Ly8gYmUgcGVyZm9ybWVkLCBzbyBpbiB0aGF0IGNhc2Ugd2UgaGlkZSB0aGUgcGx1Z2luIHZpZXcK
KyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJsZSghbV9jbGlwUmVjdC5p
c0VtcHR5KCkpOworICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRNYXNrKFFSZWdp
b24obV9jbGlwUmVjdCkpOworDQorICAgICAgICBtX25wV2luZG93LnggPSBtX3dpbmRvd1JlY3Qu
eCgpOworICAgICAgICBtX25wV2luZG93LnkgPSBtX3dpbmRvd1JlY3QueSgpOworDQorICAgICAg
ICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSBtX2NsaXBSZWN0LngoKTsKKyAgICAgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC50b3AgPSBtX2NsaXBSZWN0LnkoKTsKKyAgICAgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC5yaWdodCA9IG1fY2xpcFJlY3Qud2lkdGgoKTsNCisgICAgICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QuYm90dG9tID0gbV9jbGlwUmVjdC5oZWlnaHQoKTsNCisgICAgDQorICAgIH0g
ZWxzZSB7DQorICAgICAgICAvLyBGSVhNRTogZG9uJ3QgY2FsbCBOUFBfc2V0V2luZG93IGlmIHdp
bmRvdyBzaXplIGRpZCBub3QgcmVhbGx5IGNoYW5nZQ0KKyAgICAgICAgbV9ucFdpbmRvdy54ID0g
MDsNCisgICAgICAgIG1fbnBXaW5kb3cueSA9IDA7DQorICAgIA0KKyAgICAgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC5sZWZ0ID0gMDsNCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0g
MDsNCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX3dpbmRvd1JlY3Qud2lk
dGgoKTsNCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gbV93aW5kb3dSZWN0
LmhlaWdodCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOw0KKyAgICB9DQorDQor
ICAgIG1fbnBXaW5kb3cud2lkdGggPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsNCisgICAgbV9ucFdp
bmRvdy5oZWlnaHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7DQorICAgIGlmIChtX25wV2luZG93
LnggPCAwIHx8IG1fbnBXaW5kb3cueSA8IDAgfHwgbV9ucFdpbmRvdy53aWR0aCA8PSAwIHx8IG1f
bnBXaW5kb3cuaGVpZ2h0IDw9IDApDQorICAgICAgICByZXR1cm47DQorICAgIA0KKyAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsNCisgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7DQorICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5z
ZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOw0KKyAgICBzZXRDYWxsaW5nUGx1Z2lu
KGZhbHNlKTsNCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7DQorfQ0K
Kw0KK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpDQorew0K
KyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgPT0gdmlzaWJsZSkNCisgICAgICAgIHJldHVybjsN
CisNCisgICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOw0KKw0KKyAgICBpZiAo
aXNTZWxmVmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpDQorICAgICAgICBwbGF0
Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxlKHZpc2libGUpOw0KK30NCisNCitOUEVycm9y
IFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWlu
dDMyIGxlbiwgY29uc3QgY2hhciogYnVmKQ0KK3sNCisgICAgbm90SW1wbGVtZW50ZWQoKTsNCisg
ICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOw0KK30NCisNCitOUEVycm9yIFBsdWdpblZpZXc6Omdl
dFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkNCit7DQorICAg
IExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMoJXMpIiwgcHJldHR5TmFt
ZUZvck5QTlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOworCisgICAgc3dpdGNoICh2YXJpYWJs
ZSkgeworICAgIGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbDoKKyAgICAgICAgKnN0YXRp
Y19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgIHJldHVybiBOUEVSUl9OT19F
UlJPUjsKKworICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyAgICAgICAgKnN0YXRp
Y19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgIHJldHVybiBOUEVSUl9OT19F
UlJPUjsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
OworICAgIH0KK30NCisNCitOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxl
IHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkNCit7DQorICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmll
dzo6Z2V0VmFsdWUoJXMpIiwgcHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRh
KCkpOworCisgICAgc3dpdGNoICh2YXJpYWJsZSkgew0KKyAgICBjYXNlIE5QTlZXaW5kb3dOUE9i
amVjdDogew0KKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQ0KKyAgICAgICAgICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOw0KKw0KKyAgICAgICAgTlBPYmplY3QqIHdpbmRv
d1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTY3JpcHROUE9i
amVjdCgpOw0KKw0KKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJl
dGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVj
dHMvcGx1Z2luL25wcnVudGltZS5odG1sPg0KKyAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVj
dCkNCisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOw0K
Kw0KKyAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOw0KKyAgICAgICAgKnYgPSB3aW5k
b3dTY3JpcHRPYmplY3Q7DQorICAgICAgICAgICAgDQorICAgICAgICByZXR1cm4gTlBFUlJfTk9f
RVJST1I7DQorICAgIH0NCisNCisgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7
DQorICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpDQorICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7DQorDQorICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0
T2JqZWN0ID0gMDsNCisNCisgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0
VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFz
VGFnTmFtZShvYmplY3RUYWcpKQ0KKyAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0
YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsN
CisNCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwg
YXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdp
bi9ucHJ1bnRpbWUuaHRtbD4NCisgICAgICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpDQorICAg
ICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsNCisNCisgICAg
ICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsNCisgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0
T2JqZWN0Ow0KKw0KKyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOw0KKyAgICB9ICAgICAg
ICANCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGdldFZhbHVlU3RhdGljKHZhcmlhYmxl
LCB2YWx1ZSk7CisgICAgfQ0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpDQorew0KKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAg
ICAgIHBsYXRmb3JtV2lkZ2V0KCktPnVwZGF0ZShyZWN0KTsNCisgICAgICAgIHJldHVybjsNCisg
ICAgfQ0KKyAgICANCisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOw0K
K30NCisgICAgDQordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3Qp
DQorew0KKyAgICBpZiAobV9pc1dpbmRvd2VkKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBpZiAo
IXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+
bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsNCisgICAgbV9pbnZhbGlkUmVjdHMuYXBw
ZW5kKHIpOw0KKyAgICBpZiAoIW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0aXZlKCkpDQorICAgICAg
ICBtX2ludmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4wMDEpOw0KK30NCisNCit2b2lkIFBs
dWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24gcmVnaW9uKQ0KK3sNCisgICAgaWYg
KG1faXNXaW5kb3dlZCkNCisgICAgICAgIHJldHVybjsNCisgICAgDQorICAgIFFSZWdpb24qIHIg
PSBzdGF0aWNfY2FzdDxRUmVnaW9uKj4ocmVnaW9uKTsNCisgICAgaWYgKCFyKSANCisgICAgICAg
IHJldHVybjsNCisgICAgDQorICAgIFFWZWN0b3I8UVJlY3Q+IHJlY3RzID0gci0+cmVjdHMoKTsN
CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCByZWN0cy5zaXplKCk7ICsraSkgew0KKyAgICAgICAg
Y29uc3QgUVJlY3QmIHFSZWN0ID0gcmVjdHMuYXQoaSk7DQorICAgICAgICBJbnRSZWN0IHIocVJl
Y3QpOw0KKyAgICAgICAgbV9pbnZhbGlkUmVjdHMuYXBwZW5kKHIpOw0KKyAgICAgICAgaWYgKCFt
X2ludmFsaWRhdGVUaW1lci5pc0FjdGl2ZSgpKQ0KKyAgICAgICAgICAgIG1faW52YWxpZGF0ZVRp
bWVyLnN0YXJ0T25lU2hvdCgwLjAwMSk7DQorICAgIH0NCit9DQorDQordm9pZCBQbHVnaW5WaWV3
Ojpmb3JjZVJlZHJhdygpDQorew0KKyAgICBpZiAobV9pc1dpbmRvd2VkKQ0KKyAgICAgICAgcmV0
dXJuOw0KKyAgICBpbnZhbGlkYXRlKCk7DQorfQ0KKw0KK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZv
cm1TdGFydCgpDQorew0KKwlBU1NFUlQobV9pc1N0YXJ0ZWQpOw0KKyAgICBBU1NFUlQobV9zdGF0
dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsNCisgICAgDQorICAgIHNob3co
KTsNCisNCisgICAgaWYgKG1faXNXaW5kb3dlZCkgew0KKyAgICAgICAgUVdlYlBhZ2VDbGllbnQq
IGNsaWVudCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBh
Z2VDbGllbnQoKTsNCisgICAgICAgIC8vIEZJWE1FIHRoaXMgd2lsbCBub3Qgd29yayBmb3IgUUdy
YXBoaWNzVmlldy4NCisgICAgICAgIC8vIEJ1dCB3ZSBjYW5ub3QgdXNlIHdpbklkIGJlY2F1c2Ug
aXQgd2lsbCBjcmVhdGUgYSB3aW5kb3cgYW5kIG9uIFM2MCwNCisgICAgICAgIC8vIFFXaWRnZXRz
IHNob3VsZCBub3QgY3JlYXRlIGEgd2luZG93LiANCisgICAgICAgIFFfQVNTRVJUKHFvYmplY3Rf
Y2FzdDxRV2lkZ2V0Kj4oY2xpZW50LT5wbHVnaW5QYXJlbnQoKSkpOw0KKyAgICAgICAgc2V0UGxh
dGZvcm1XaWRnZXQobmV3IFBsdWdpbkNvbnRhaW5lclN5bWJpYW4odGhpcywNCisgICAgICAgICAg
ICBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KGNsaWVudC0+cGx1Z2luUGFyZW50KCkpKSk7DQorICAg
ICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7DQorICAgICAgICBtX25w
V2luZG93LndpbmRvdyA9ICh2b2lkKilwbGF0Zm9ybVBsdWdpbldpZGdldCgpOw0KKw0KKyAgICB9
IGVsc2Ugew0KKyAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7DQorICAgICAgICBtX25wV2lu
ZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsNCisgICAgICAgIG1fbnBXaW5kb3cud2lu
ZG93ID0gMDsgLy8gTm90IHVzZWQ/CisgICAgfSAgICANCisgICAgc2V0TlBXaW5kb3dJZk5lZWRl
ZCgpOworICAgIA0KKyAgICByZXR1cm4gdHJ1ZTsKK30NCisNCit2b2lkIFBsdWdpblZpZXc6OnBs
YXRmb3JtRGVzdHJveSgpDQorew0KKyAgICBpZiAocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkNCisg
ICAgICAgIGRlbGV0ZSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpOworfQ0KKw0KK3ZvaWQgUGx1Z2lu
Vmlldzo6aGFsdCgpDQorew0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OnJlc3RhcnQoKQ0KK3sN
Cit9DQorDQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9z
eW1iaWFuL1BsdWdpblBhY2thZ2VTeW1iaWFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
dWdpbnMvc3ltYmlhbi9QbHVnaW5QYWNrYWdlU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5QYWNrYWdlU3ltYmlhbi5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjAyIEBACisvKg0KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpDQorDQorICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMNCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyDQorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
DQorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VDQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
DQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsDQorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KKyov
DQorI2luY2x1ZGUgImNvbmZpZy5oIg0KKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiDQorDQor
I2luY2x1ZGUgIkNTdHJpbmcuaCINCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIg0KKyNp
bmNsdWRlICJucGludGVyZmFjZS5oIg0KKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIg0KKyNp
bmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIg0KKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIg0KKyNp
bmNsdWRlIDxRUGx1Z2luTG9hZGVyPg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCitib29s
IFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpDQorew0KKyAgICBpZiAoIWxvYWQoKSkNCisgICAg
ICAgIHJldHVybiBmYWxzZTsNCisNCisgICAgY2hhciogYnVmID0gMDsNCisgICAgTlBFcnJvciBl
cnIgPSBtX3BsdWdpbkZ1bmNzLmdldHZhbHVlKDAsIE5QUFZwbHVnaW5OYW1lU3RyaW5nLCAodm9p
ZCAqKSZidWYpOw0KKyAgICBtX25hbWUgPSBidWY7DQorICAgIGVyciA9IG1fcGx1Z2luRnVuY3Mu
Z2V0dmFsdWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCAodm9pZCAqKSZidWYpOw0K
KyAgICBtX2Rlc2NyaXB0aW9uID0gYnVmOw0KKw0KKyAgICBkZXRlcm1pbmVNb2R1bGVWZXJzaW9u
RnJvbURlc2NyaXB0aW9uKCk7DQorDQorICAgIFN0cmluZyBzID0gbV9ucEludGVyZmFjZS0+TlBf
R2V0TUlNRURlc2NyaXB0aW9uKCk7DQorICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOw0KKyAgICBz
LnNwbGl0KFVDaGFyKCd8JyksIGZhbHNlLCB0eXBlcyk7ICAvLyA8TUlNRTE+OzxleHQxLGV4dDIs
ZXh0MywuLi4+OzxEZXNjcmlwdGlvbj58PE1JTUUyPnw8TUlNRTM+fC4uLg0KKw0KKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgKytpKSB7DQorICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBtaW1lOw0KKyAgICAgICAgdHlwZXNbaV0uc3BsaXQoVUNoYXIoJzsnKSwgdHJ1ZSwgbWlt
ZSk7ICAvLyA8TUlNRTE+OzxleHQxLGV4dDIsZXh0MywuLi4+OzxEZXNjcmlwdGlvbj4NCisgICAg
ICAgIGlmIChtaW1lLnNpemUoKSA+IDApIHsNCisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBl
eHRzOw0KKyAgICAgICAgICAgIGlmIChtaW1lLnNpemUoKSA+IDEpDQorICAgICAgICAgICAgICAg
IG1pbWVbMV0uc3BsaXQoVUNoYXIoJywnKSwgZmFsc2UsIGV4dHMpOyAvLyA8ZXh0MSxleHQyLGV4
dDMsLi4uPg0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5h
ZGQobWltZVswXSwgZXh0cyk7IC8vIDxNSU1FPiw8ZXh0MSxleHQyLGV4dDM+DQorICAgICAgICAg
ICAgaWYgKG1pbWUuc2l6ZSgpID4gMikNCisgICAgICAgICAgICAgICAgbV9taW1lVG9EZXNjcmlw
dGlvbnMuYWRkKG1pbWVbMF0sIG1pbWVbMl0pOyAvLyA8TUlNRT4sPERlc2NyaXB0aW9uPg0KKyAg
ICAgICAgfQ0KKyAgICB9DQorICAgIHVubG9hZCgpOw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQor
DQorYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkNCit7DQorICAgIGlmIChtX2lzTG9hZGVkKSB7
DQorICAgICAgICBtX2xvYWRDb3VudCsrOw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0N
CisNCisgICAgbV9wbHVnaW5Mb2FkZXIgPSBuZXcgUVBsdWdpbkxvYWRlcihtX3BhdGgpOw0KKyAg
ICBpZiAoIW1fcGx1Z2luTG9hZGVyLT5sb2FkKCkpIHsNCisgICAgICAgIGRlbGV0ZSBtX3BsdWdp
bkxvYWRlcjsNCisgICAgICAgIG1fcGx1Z2luTG9hZGVyID0gMDsNCisgICAgICAgIHJldHVybiBm
YWxzZTsNCisgICAgfQ0KKw0KKyAgICBRT2JqZWN0KiBwbHVnaW4gPSBtX3BsdWdpbkxvYWRlci0+
aW5zdGFuY2UoKTsNCisgICAgaWYgKCFwbHVnaW4pIHsNCisgICAgICAgIG1fcGx1Z2luTG9hZGVy
LT51bmxvYWQoKTsNCisgICAgICAgIGRlbGV0ZSBtX3BsdWdpbkxvYWRlcjsNCisgICAgICAgIG1f
cGx1Z2luTG9hZGVyID0gMDsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAg
ICAvLyBQbHVnaW4gaW5zdGFuY2UgY3JlYXRlZA0KKyAgICAvLyBDYXN0IHBsdWdpbiB0byBOUElu
dGVyZmFjZSwNCisgICAgbV9ucEludGVyZmFjZSA9IHFvYmplY3RfY2FzdDxOUEludGVyZmFjZSAq
PihwbHVnaW4pOw0KKyAgICBpZiAoIW1fbnBJbnRlcmZhY2UpIHsNCisgICAgICAgIG1fcGx1Z2lu
TG9hZGVyLT51bmxvYWQoKTsNCisgICAgICAgIGRlbGV0ZSBtX3BsdWdpbkxvYWRlcjsNCisgICAg
ICAgIG1fcGx1Z2luTG9hZGVyID0gMDsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0K
Kw0KKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsNCisgICAgDQorICAgIE5QRXJyb3IgbnBFcnI7DQor
ICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsNCisg
ICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOw0KKyAgICBtX2Jy
b3dzZXJGdW5jcy5zaXplID0gc2l6ZW9mKG1fYnJvd3NlckZ1bmNzKTsNCisgICAgbV9icm93c2Vy
RnVuY3MudmVyc2lvbiA9IE5QX1ZFUlNJT05fTUlOT1I7DQorICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHVybCA9IE5QTl9HZXRVUkw7DQorICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9z
dFVSTDsNCisgICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVzdFJlYWQ7
DQorICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07DQorICAgIG1f
YnJvd3NlckZ1bmNzLndyaXRlID0gTlBOX1dyaXRlOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5kZXN0
cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJlYW07DQorICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1
cyA9IE5QTl9TdGF0dXM7DQorICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdl
bnQ7DQorICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01lbUFsbG9jOw0KKyAgICBt
X2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7DQorICAgIG1fYnJvd3NlckZ1bmNz
Lm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVn
aW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7DQorICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5vdGlm
eSA9IE5QTl9HZXRVUkxOb3RpZnk7DQorICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxub3RpZnkg
PSBOUE5fUG9zdFVSTE5vdGlmeTsNCisgICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWUgPSBOUE5f
R2V0VmFsdWU7DQorICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOw0K
KyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsN
CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlkYXRlUmVn
aW9uOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsN
CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52Ow0KKyAgICBt
X2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsNCisgICAgbV9icm93
c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0
YXRlOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9w
UG9wdXBzRW5hYmxlZFN0YXRlOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFudHZh
bHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRz
dHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyOw0KKyAgICBtX2Jyb3dz
ZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcnM7
DQorICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBOX0dldEludElkZW50
aWZpZXI7DQorICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRl
bnRpZmllcklzU3RyaW5nOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50aWZpZXIg
PSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsNCisgICAgbV9icm93c2VyRnVuY3MuY3JlYXRlb2Jq
ZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7DQorICAgIG1fYnJvd3NlckZ1bmNzLnJldGFpbm9iamVj
dCA9IF9OUE5fUmV0YWluT2JqZWN0Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNlb2JqZWN0
ID0gX05QTl9SZWxlYXNlT2JqZWN0Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBfTlBO
X0ludm9rZTsNCisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tl
RGVmYXVsdDsNCisgICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUgPSBfTlBOX0V2YWx1YXRlOw0K
KyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7DQorICAg
IG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsNCisgICAgbV9i
cm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5Ow0KKyAgICBt
X2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOw0KKyAgICBtX2Jyb3dz
ZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc1Byb3BlcnR5Ow0KKyAgICBtX2Jyb3dzZXJGdW5j
cy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlvbjsNCisgICAgbV9icm93c2VyRnVuY3Mu
ZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7DQorICAgIG1fYnJvd3NlckZ1bmNzLmNvbnN0cnVj
dCA9IF9OUE5fQ29uc3RydWN0Ow0KKw0KKyAgICBucEVyciA9IG1fbnBJbnRlcmZhY2UtPk5QX0lu
aXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzLCAmbV9wbHVnaW5GdW5jcyk7DQorICAgIGlmIChucEVy
ciAhPSBOUEVSUl9OT19FUlJPUikgew0KKyAgICAgICAgbV9wbHVnaW5Mb2FkZXItPnVubG9hZCgp
Ow0KKyAgICAgICAgZGVsZXRlIG1fcGx1Z2luTG9hZGVyOw0KKyAgICAgICAgbV9wbHVnaW5Mb2Fk
ZXIgPSAwOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIG1fbG9hZENv
dW50Kys7DQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCit2b2lkIFBsdWdpblBhY2thZ2U6OnVu
bG9hZCgpDQorew0KKyAgICBpZiAoIW1faXNMb2FkZWQpDQorICAgICAgICByZXR1cm47DQorDQor
ICAgIGlmICgtLW1fbG9hZENvdW50ID4gMCkNCisgICAgICAgIHJldHVybjsNCisgICAgICAgIA0K
KyAgICBtX2lzTG9hZGVkID0gZmFsc2U7DQorICAgIG1fbnBJbnRlcmZhY2UtPk5QX1NodXRkb3du
KCk7DQorDQorICAgIG1fcGx1Z2luTG9hZGVyLT51bmxvYWQoKTsNCisgICAgZGVsZXRlIG1fcGx1
Z2luTG9hZGVyOw0KKyAgICBtX3BsdWdpbkxvYWRlciA9IDA7DQorfQ0KKw0KK3Vuc2lnbmVkIFBs
dWdpblBhY2thZ2U6Omhhc2goKSBjb25zdA0KK3sgDQorICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1sy
XSA9IHsNCisgICAgICAgIG1fcGF0aC5pbXBsKCktPmhhc2goKSwNCisgICAgICAgIG1fbGFzdE1v
ZGlmaWVkDQorICAgIH07DQorDQorICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChy
ZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVvZih1bnNpZ25lZCkg
LyBzaXplb2YoVUNoYXIpKTsNCit9DQorDQorYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25z
dCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQ0KK3sNCisgICAgcmV0
dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3JpcHRpb247DQorfQ0KKw0KK2ludCBQbHVn
aW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24oY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9u
JiBjb21wYXJlVmVyc2lvbikgY29uc3QNCit7DQorICAgIC8vIHJldHVybiAtMSwgMCwgb3IgMSBp
ZiBwbHVnLWluIHZlcnNpb24gaXMgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFu
DQorICAgIC8vIHRoZSBwYXNzZWQgdmVyc2lvbg0KKyAgICBpZiAobV9tb2R1bGVWZXJzaW9uICE9
IGNvbXBhcmVWZXJzaW9uKQ0KKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbiA+IGNvbXBh
cmVWZXJzaW9uID8gMSA6IC0xOw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorfQ0KKw0KSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwko
cmV2aXNpb24gNDk0MjIpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjQsNyArMTY0LDcgQEAKIAogIyBOZXNjYXBlIHBsdWdpbnMgc3VwcG9ydCAoTlBBUEkpCiAh
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEk9LikgewotICAgIHVu
aXh8d2luMzItKjohZW1iZWRkZWQ6IXdpbmNlKjohc3ltYmlhbiB7CisgICAgdW5peHx3aW4zMi0q
OiFlbWJlZGRlZDohd2luY2UqOiB7CiAgICAgICAgIERFRklORVMgKz0gRU5BQkxFX05FVFNDQVBF
X1BMVUdJTl9BUEk9MQogICAgIH0gZWxzZSB7CiAgICAgICAgIERFRklORVMgKz0gRU5BQkxFX05F
VFNDQVBFX1BMVUdJTl9BUEk9MApAQCAtMjQ1Nyw0NiArMjQ1Nyw2MiBAQAogCiAgICAgU09VUkNF
UyArPSBwbHVnaW5zL25wYXBpLmNwcAogCi0gICAgdW5peCB7Ci0gICAgICAgIERFRklORVMgKz0g
RU5BQkxFX1BMVUdJTl9QQUNLQUdFX1NJTVBMRV9IQVNIPTEKKyAgICBzeW1iaWFuIHsKKyAgICAg
ICAgU09VUkNFUyArPSBcCisgICAgICAgIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5QYWNrYWdlU3lt
Ymlhbi5jcHAgXAorICAgICAgICBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luRGF0YWJhc2VTeW1iaWFu
LmNwcCBcCisgICAgICAgIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5WaWV3U3ltYmlhbi5jcHAgXAor
ICAgICAgICBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFpbmVyU3ltYmlhbi5jcHAKIAotICAg
ICAgICBtYWMgewotICAgICAgICAgICAgU09VUkNFUyArPSBcCi0gICAgICAgICAgICAgICAgcGx1
Z2lucy9tYWMvUGx1Z2luUGFja2FnZU1hYy5jcHAgXAotICAgICAgICAgICAgICAgIHBsdWdpbnMv
bWFjL1BsdWdpblZpZXdNYWMuY3BwCi0gICAgICAgICAgICBPQkpFQ1RJVkVfU09VUkNFUyArPSBc
Ci0gICAgICAgICAgICAgICAgcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5nSW1wbE1hYy5tbSBcCi0g
ICAgICAgICAgICAgICAgcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbQotICAg
ICAgICAgICAgSU5DTFVERVBBVEggKz0gcGxhdGZvcm0vbWFjCi0gICAgICAgICAgICAjIE5vdGU6
IFhQX01BQ09TWCBpcyBkZWZpbmVkIGluIG5wYXBpLmgKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICFlbWJlZGRlZDogQ09ORklHICs9IHgxMQotICAgICAgICAgICAgU09VUkNFUyArPSBc
Ci0gICAgICAgICAgICAgICAgcGx1Z2lucy9xdC9QbHVnaW5Db250YWluZXJRdC5jcHAgXAotICAg
ICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcCBcCi0gICAgICAgICAg
ICAgICAgcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCi0gICAgICAgICAgICBIRUFERVJTICs9
IFwKLSAgICAgICAgICAgICAgICBwbHVnaW5zL3F0L1BsdWdpbkNvbnRhaW5lclF0LmgKLSAgICAg
ICAgICAgIERFRklORVMgKz0gWFBfVU5JWAotICAgICAgICB9Ci0gICAgfQorICAgICAgICBIRUFE
RVJTICs9IFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4u
aCBcCisgICAgICAgIHBsdWdpbnMvc3ltYmlhbi9ucGludGVyZmFjZS5oCiAKLSAgICB3aW4zMi0q
IHsKLSAgICAgICAgSU5DTFVERVBBVEggKz0gJCRQV0QvcGx1Z2lucy93aW4KKyAgICAgICAgTElC
UyArPSAtbGVmc3J2CiAKLSAgICAgICAgU09VUkNFUyArPSBwYWdlL3dpbi9QYWdlV2luLmNwcCBc
Ci0gICAgICAgICAgICAgICAgICAgcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIFwK
LSAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcCBcCi0g
ICAgICAgICAgICAgICAgICAgcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5j
cHAgXAotICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCisg
ICAgfSBlbHNlIHsKIAotICAgICAgICBMSUJTICs9IFwKLSAgICAgICAgICAgIC1sYWR2YXBpMzIg
XAotICAgICAgICAgICAgLWxnZGkzMiBcCi0gICAgICAgICAgICAtbHNoZWxsMzIgXAotICAgICAg
ICAgICAgLWxzaGx3YXBpIFwKLSAgICAgICAgICAgIC1sdXNlcjMyIFwKLSAgICAgICAgICAgIC1s
dmVyc2lvbgorICAgICAgICB1bml4IHsKKyAgICAgICAgICAgIERFRklORVMgKz0gRU5BQkxFX1BM
VUdJTl9QQUNLQUdFX1NJTVBMRV9IQVNIPTEKKyAgICAKKyAgICAgICAgICAgIG1hYyB7CisgICAg
ICAgICAgICAgICAgU09VUkNFUyArPSBcCisgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvbWFj
L1BsdWdpblBhY2thZ2VNYWMuY3BwIFwKKyAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy9tYWMv
UGx1Z2luVmlld01hYy5jcHAKKyAgICAgICAgICAgICAgICBPQkpFQ1RJVkVfU09VUkNFUyArPSBc
CisgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtL3RleHQvbWFjL1N0cmluZ0ltcGxNYWMubW0g
XAorICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFz
Lm1tCisgICAgICAgICAgICAgICAgSU5DTFVERVBBVEggKz0gcGxhdGZvcm0vbWFjCisgICAgICAg
ICAgICAgICAgIyBOb3RlOiBYUF9NQUNPU1ggaXMgZGVmaW5lZCBpbiBucGFwaS5oCisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICFlbWJlZGRlZDogQ09ORklHICs9IHgxMQor
ICAgICAgICAgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgICAgICAgICBwbHVnaW5z
L3F0L1BsdWdpbkNvbnRhaW5lclF0LmNwcCBcCisgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMv
cXQvUGx1Z2luUGFja2FnZVF0LmNwcCBcCisgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQv
UGx1Z2luVmlld1F0LmNwcAorICAgICAgICAgICAgICAgIEhFQURFUlMgKz0gXAorICAgICAgICAg
ICAgICAgICAgICBwbHVnaW5zL3F0L1BsdWdpbkNvbnRhaW5lclF0LmgKKyAgICAgICAgICAgICAg
ICBERUZJTkVTICs9IFhQX1VOSVgKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAg
ICAgICB3aW4zMi0qIHsKKyAgICAgICAgICAgIElOQ0xVREVQQVRIICs9ICQkUFdEL3BsdWdpbnMv
d2luCisgICAgCisgICAgICAgICAgICBTT1VSQ0VTICs9IHBhZ2Uvd2luL1BhZ2VXaW4uY3BwIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3Bw
IFwKKyAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5j
cHAgXAorICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhy
b3R0bGVyV2luLmNwcCBcCisgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvd2luL1BsdWdp
blZpZXdXaW4uY3BwCisgICAgCisgICAgICAgICAgICBMSUJTICs9IFwKKyAgICAgICAgICAgICAg
ICAtbGFkdmFwaTMyIFwKKyAgICAgICAgICAgICAgICAtbGdkaTMyIFwKKyAgICAgICAgICAgICAg
ICAtbHNoZWxsMzIgXAorICAgICAgICAgICAgICAgIC1sc2hsd2FwaSBcCisgICAgICAgICAgICAg
ICAgLWx1c2VyMzIgXAorICAgICAgICAgICAgICAgIC1sdmVyc2lvbgorICAgICAgICB9CiAgICAg
fQogCiB9IGVsc2UgewpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ5NDIyKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw0NSBAQAorMjAwOS0xMC0xMCAgWWFlbCBBaGFyb24gIDx5
YWVsLmFoYXJvbkBub2tpYS5jb20+CisgCisgICAgICAgICBSZXZpZXdlZCBieSAKKyAKKyAgICAg
ICAgRW5hYmxpbmcgTlBBUEkgcGx1Z2luIHN1cHBvcnQgb24gUXQgV2Via2l0IGZvciBTNjAgcGxh
dGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5
MzAyCisKKyAgICAgICAgQWxzbyBpbXBsZW1lbnRlZCBieSBNYWhlc2ggS3Vsa2Fybmk8bWFoZXNo
Lmt1bGthcm5pQG5va2lhLmNvbT4sIAorICAgICAgICBSb2hpbmkgQW5hbnRoIDxyb2hpbmkuYW5h
bnRoQG5va2lhLmNvbT4gYW5kIGhlbHAgZnJvbSBOb3JiZXJ0IExlc3IKKyAgICAgICAgPG5vcmJl
cnQubGVzZXJAbm9raWEuY29tPgorICAgICAgICAgCisgICAgICAgICogV2ViQ29yZS5wcm86Cisg
ICAgICAgIEVuYWJsaW5nIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIGZvciBTNjAgYW5kIGFk
ZGVkIFM2MCBzcGVjaWZpYyAKKyAgICAgICAgbmV3IHBsdWdpbiBmaWxlcyB0byBiZSBjb21waWxl
ZCB1bmRlciBzeW1iaWFuOiBtYWNybworCisgICAgICAgICogYnJpZGdlL25wYXBpLmg6CisgICAg
ICAgIEFkZGVkIE5QRXZlbnQgZGVmaW5pdGlvbiBmb3IgU3ltYmlhbgorCisgICAgICAgICogcGx1
Z2lucy9QbHVnaW5QYWNrYWdlLmg6CisgICAgICAgIEFkZGVkIFM2MCBzcGVjaWZpYyBwbHVnaW4g
aW50ZXJmYWNlIGFuZCBwbHVnaW4gbG9hZGVyIHZhcmlhYmxlcworICAgICAgICAqIHBsdWdpbnMv
UGx1Z2luUGFja2FnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjp1bmxv
YWQpOiBBZGRlZCAhUExBVEZPUk0oU1lNQklBTikgbWFjcm8uCisgICAgICAgIERlZmF1bHQgaW1w
bGVtZW50YXRpb24gdG8gYmUgdXNlZCBvbmx5IGZvciBub24tc3ltYmlhbiBwbGF0Zm9ybQorICAg
ICAgICAqIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwOgorICAgICAgICBNYWNybyAhU1lNQklB
TiBjaGVja2luZworICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5oOgorICAgICAgICBBZGQg
U3ltYmlhbiB0byBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHNldE5QV2luZG93SWZOZWVkZWQKKyAg
ICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6c2V0RnJhbWVSZWN0KTogQWRkIFN5bWJpYW4gdG8gcGxhdGZvcm1zIHRoYXQKKyAgICAg
ICAgY2FsbCBzZXROUFdpbmRvd1JlY3QgZnJvbSBzZXRGcmFtZVJlY3QKKyAgICAgICAgIAorICAg
ICAgICBBZGRlZCBmb2xkZXIgJ3N5bWJpYW4nIHdoaWNoIGNvbnRhaW5zIGltcGxlbWVudGF0aW9u
IGZpbGVzIGZvciBTNjAKKyAgICAgICAgcGxhdGZvcm0tc3BlY2lmaWMgTlBBUEkgcGx1Z2luIGZ1
bmN0aW9uYWxpdHksIHVuZGVyIC9wbHVnaW5zIGZvbGRlcgorICAgICAgICAqIHBsdWdpbnMvc3lt
YmlhbgorICAgICAgICAqIHBsdWdpbnMvc3ltYmlhbi9ucGludGVyZmFjZS5oOgorICAgICAgICBQ
bHVnaW4gSW50ZXJmYWNlIHRvIGJlIGltcGxlbWVudGVkIGJ5IFM2MCBOUEFQSSBwbHVnaW5zIAor
ICAgICAgICAqIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250YWluZXJTeW1iaWFuLmg6CisgICAg
ICAgICogcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uY3BwOgorICAgICAg
ICAqIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5EYXRhYmFzZVN5bWJpYW4uY3BwOgorICAgICAgICAq
IHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5WaWV3U3ltYmlhbi5jcHA6CisgICAgICAgICogcGx1Z2lu
cy9zeW1iaWFuL1BsdWdpblBhY2thZ2VTeW1iaWFuLmNwcDoKKwogMjAwOS0xMC0xMCAgT2xpdmVy
IEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBwYXRocyBpbiB4Y29kZS4K
SW5kZXg6IFdlYkNvcmUvYnJpZGdlL25wYXBpLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlk
Z2UvbnBhcGkuaAkocmV2aXNpb24gNDk0MjIpCisrKyBXZWJDb3JlL2JyaWRnZS9ucGFwaS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxMCBAQAogIyAgICBlbmRpZiAvKiBYUF9XSU4gKi8K
ICNlbmRpZiAvKiBfV0lOMzIgKi8KIAorI2lmZGVmIF9fU1lNQklBTjMyX18KKyMgICAgZGVmaW5l
IFhQX1NZTUJJQU4KKyNlbmRpZiAvKiBfX1NZTUJJQU4zMl9fICovCisKICNpZmRlZiBfX01XRVJL
U19fCiAjICAgIGRlZmluZSBfZGVjbHNwZWMgX19kZWNsc3BlYwogIyAgICBpZmRlZiBtYWNpbnRv
c2gKQEAgLTEwNiw3ICsxMTAsOSBAQAogICAgICNpbmNsdWRlIDxzdGRpby5oPgogI2VuZGlmCiAK
LSNpZmRlZiBYUF9XSU4KKyNpZiBkZWZpbmVkKFhQX1NZTUJJQU4pCisgICAgI2luY2x1ZGUgPFFF
dmVudD4KKyNlbGlmIGRlZmluZWQoWFBfV0lOKQogICAgICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAj
ZW5kaWYKIApAQCAtNDI5LDYgKzQzNSwxMiBAQAogICAgIE5QV2luZG93VHlwZURyYXdhYmxlCiB9
IE5QV2luZG93VHlwZTsKIAorI2lmZGVmIFhQX1NZTUJJQU4KK3R5cGVkZWYgZW51bSB7CisgICAg
TlBRdEV2ZW50UGFpbnQgPSAxCit9IE5QUXRFdmVudFR5cGU7CisjZW5kaWYKKwogI2lmZGVmIFhQ
X01BQ09TWAogCiAvKgpAQCAtNTc4LDEzICs1OTAsMTUgQEAKIHR5cGVkZWYgRXZlbnRSZWNvcmQg
ICAgTlBFdmVudDsKICNlbmRpZgogCisjZWxpZiBkZWZpbmVkKFhQX1NZTUJJQU4pCit0eXBlZGVm
IFFFdmVudCBOUEV2ZW50OwogI2VsaWYgZGVmaW5lZChYUF9XSU4pCiB0eXBlZGVmIHN0cnVjdCBf
TlBFdmVudAogewotICAgIHVpbnQxNiAgIGV2ZW50OwotICAgIHVpbnQzMiAgIHdQYXJhbTsKLSAg
ICB1aW50MzIgICBsUGFyYW07Ci19IE5QRXZlbnQ7CisgICAgICAgIHVpbnQxNiAgIGV2ZW50Owor
ICAgICAgICB1aW50MzIgICB3UGFyYW07CisgICAgICAgIHVpbnQzMiAgIGxQYXJhbTsKKyAgICB9
IE5QRXZlbnQ7CiAjZWxpZiBkZWZpbmVkIChYUF9VTklYKQogdHlwZWRlZiBYRXZlbnQgTlBFdmVu
dDsKICNlbHNlCkBAIC02MDQsNyArNjE4LDcgQEAKIHR5cGVkZWYgUmduSGFuZGxlIE5QUURSZWdp
b247CiAjZW5kaWYKIHR5cGVkZWYgQ0dQYXRoUmVmIE5QQ0dSZWdpb247Ci0jZWxpZiBkZWZpbmVk
KFhQX1dJTikKKyNlbGlmICFkZWZpbmVkKFhQX1NZTUJJQU4pICYmIGRlZmluZWQoWFBfV0lOKQog
dHlwZWRlZiBIUkdOIE5QUmVnaW9uOwogI2VsaWYgZGVmaW5lZChYUF9VTklYKQogdHlwZWRlZiBS
ZWdpb24gTlBSZWdpb247Cg==
</data>
<flag name="review"
          id="22394"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41128</attachid>
            <date>2009-10-13 14:41:05 -0700</date>
            <delta_ts>2009-10-14 07:52:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>29302.patch</filename>
            <type>text/plain</type>
            <size>40564</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuaAkocmV2aXNpb24gNDk1MDUpCisrKyBXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyArMzExLDcgQEAKIAogcHJp
dmF0ZToKIAotI2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgZGVmaW5lZChRX1dTX1gxMSkKKyNpZiBk
ZWZpbmVkKFhQX1VOSVgpIHx8IGRlZmluZWQoUV9XU19YMTEpIHx8IFBMQVRGT1JNKFNZTUJJQU4p
CiAgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogI2VsaWYgZGVmaW5lZChYUF9N
QUNPU1gpCiAgICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dDb250ZXh0OwpJbmRleDogV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmNwcAkocmV2aXNpb24gNDk1MDUpCisrKyBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQAogICAg
IG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxlbmd0aCgpIC0gbV9maWxl
TmFtZS5sZW5ndGgoKSAtIDEpOwogfQogCisjaWYgIVBMQVRGT1JNKFNZTUJJQU4pCiB2b2lkIFBs
dWdpblBhY2thZ2U6OnVubG9hZCgpCiB7CiAgICAgaWYgKCFtX2lzTG9hZGVkKQpAQCAtMTI1LDYg
KzEyNiw3IEBACiAKICAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKIH0KKyNlbmRpZiAvLyFQ
TEFURk9STShTWU1CSUFOKQogCiB2b2lkIFBsdWdpblBhY2thZ2U6OnVubG9hZFdpdGhvdXRTaHV0
ZG93bigpCiB7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDQ5
NTA1KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIwLDcgKzMyMCw3IEBACiAgICAgbV9wcmVmZXJyZWRQbHVnaW5zLmNsZWFyKCk7CiB9
CiAKLSNpZiAhUExBVEZPUk0oV0lOX09TKSB8fCBQTEFURk9STShXWCkKKyNpZiAoIVBMQVRGT1JN
KFNZTUJJQU4pKSAmJiAoIVBMQVRGT1JNKFdJTl9PUykgfHwgUExBVEZPUk0oV1gpKQogLy8gRm9y
IFNhZmFyaS9XaW4gdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZAog
Ly8gaW4gUGx1Z2luRGF0YWJhc2VXaW4uY3BwLCBidXQgaWYgd2UgY2FuIHVzZSBXZWJDb3JlIGNv
bnN0cnVjdHMKIC8vIGZvciB0aGUgbG9naWMgd2Ugc2hvdWxkIHBlcmhhcHMgbW92ZSBpdCBoZXJl
IHVuZGVyIFhQX1dJTj8KQEAgLTQyOCw2ICs0MjgsNiBAQAogICAgIH0KIH0KIAotI2VuZGlmIC8v
ICFQTEFURk9STShXSU5fT1MpCisjZW5kaWYgLy8gIVBMQVRGT1JNKFNZTUJJQU4pICYmICFQTEFU
Rk9STShXSU5fT1MpCiAKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDQ5
NTA1KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjQsOCArMTI0LDggQEAKIAogICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOwogCi0jaWYgUExB
VEZPUk0oV0lOX09TKQotICAgIC8vIE9uIFdpbmRvd3MsIGFsd2F5cyBjYWxsIHBsdWdpbiB0byBj
aGFuZ2UgZ2VvbWV0cnkuCisjaWYgUExBVEZPUk0oV0lOX09TKSB8fCBQTEFURk9STShTWU1CSUFO
KQorICAgIC8vIE9uIFdpbmRvd3MgYW5kIFN5bWJpYW4sIGFsd2F5cyBjYWxsIHBsdWdpbiB0byBj
aGFuZ2UgZ2VvbWV0cnkuCiAgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOwogI2VsaWYgWFBfVU5J
WAogICAgIC8vIE9uIFVuaXgsIG11bHRpcGxlIGNhbGxzIHRvIHNldE5QV2luZG93KCkgaW4gd2lu
ZG93ZWQgbW9kZSBjYXVzZXMgRmxhc2ggdG8gY3Jhc2gKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5QYWNrYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2th
Z2UuaAkocmV2aXNpb24gNDk1MDUpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxMSBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAorI2lmIFBMQVRGT1JNKFNZTUJJQU4p
CitjbGFzcyBRUGx1Z2luTG9hZGVyOworY2xhc3MgTlBJbnRlcmZhY2U7CisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlN
RVRvRGVzY3JpcHRpb25zTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxT
dHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKQEAgLTcwLDkgKzc1LDE3IEBACiAgICAgICAg
IGludCBjb21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2UmKSBjb25zdDsKICAgICAgICAgUGx1Z2lu
UXVpcmtTZXQgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4gbV9xdWlya3M7IH0KICAgICAgICAgY29u
c3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJiB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1
bGVWZXJzaW9uOyB9CisjaWYgUExBVEZPUk0oU1lNQklBTikKKyAgICAgICAgTlBJbnRlcmZhY2Uq
IG5wSW50ZXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9ucEludGVyZmFjZTsgfQorI2VuZGlmIC8v
IFBMQVRGT1JNKFNZTUJJQU4pCiAKICAgICBwcml2YXRlOgogICAgICAgICBQbHVnaW5QYWNrYWdl
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOworCisjaWYg
UExBVEZPUk0oU1lNQklBTikKKyAgICAgICAgTlBJbnRlcmZhY2UqIG1fbnBJbnRlcmZhY2U7Cisg
ICAgICAgIFFQbHVnaW5Mb2FkZXIqIG1fcGx1Z2luTG9hZGVyOworI2VuZGlmIC8vIFBMQVRGT1JN
KFNZTUJJQU4pCiAgICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7CiAgICAgICAgIGJvb2wgaXNQbHVn
aW5CbGFja2xpc3RlZCgpOwogICAgICAgICB2b2lkIGRldGVybWluZVF1aXJrcyhjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKTsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL25waW50ZXJmYWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vbnBpbnRlcmZhY2UuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL25waW50ZXJmYWNlLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisjaWZuZGVmIG5w
aW50ZXJmYWNlX0gKKyNkZWZpbmUgbnBpbnRlcmZhY2VfSAorCisjaW5jbHVkZSAibnBmdW5jdGlv
bnMuaCIKKyNpbmNsdWRlIDxRdFBsdWdpbj4KKworY2xhc3MgTlBJbnRlcmZhY2UgeworcHVibGlj
OgorICAgIHZpcnR1YWwgTlBFcnJvciBOUF9Jbml0aWFsaXplKE5QTmV0c2NhcGVGdW5jcyAqYU5Q
TkZ1bmNzLCBOUFBsdWdpbkZ1bmNzICphTlBQRnVuY3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
TlBfU2h1dGRvd24oKSA9IDA7CisgICAgdmlydHVhbCBjaGFyKiBOUF9HZXRNSU1FRGVzY3JpcHRp
b24oKSA9IDA7Cit9OworCisKK1FUX0JFR0lOX05BTUVTUEFDRQorUV9ERUNMQVJFX0lOVEVSRkFD
RShOUEludGVyZmFjZSwgImNvbS5ub2tpYS5xdHM2MC53ZWJwbHVnaW4vMS4wIik7CitRVF9FTkRf
TkFNRVNQQUNFCisKKyNlbmRpZiAvLyBucGludGVyZmFjZV9ICkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvc3ltYmlhbi9QbHVnaW5Db250YWluZXJTeW1iaWFuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250YWluZXJTeW1iaWFuLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAw
OSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luQ29udGFpbmVyU3ltYmlhbi5oIgorCisj
aW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXli
b2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSA8UUFwcGxp
Y2F0aW9uPgorI2luY2x1ZGUgPFFXaWRnZXQ+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitQbHVnaW5Db250YWluZXJTeW1iaWFuOjpQbHVnaW5Db250YWluZXJTeW1iaWFuKFBsdWdpblZp
ZXcqIHZpZXcsIFFXaWRnZXQqIHBhcmVudCkKKyAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAs
IG1fcGx1Z2luVmlldyh2aWV3KQorICAgICwgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UoZmFs
c2UpCit7CisgICAgc2V0UGFyZW50KG1fcGFyZW50KTsKK30KKworUGx1Z2luQ29udGFpbmVyU3lt
Ymlhbjo6flBsdWdpbkNvbnRhaW5lclN5bWJpYW4oKQoreworfQorCit2b2lkIFBsdWdpbkNvbnRh
aW5lclN5bWJpYW46OnJlcXVlc3RHZW9tZXRyeShjb25zdCBRUmVjdCYgcmVjdCwgY29uc3QgUVJl
Z2lvbiYgY2xpcCkKK3sKKyAgICBpZiAobV93aW5kb3dSZWN0ICE9IHJlY3QgfHwgbV9jbGlwUmVn
aW9uICE9IGNsaXApIHsKKyAgICAgICAgbV93aW5kb3dSZWN0ID0gcmVjdDsKKyAgICAgICAgbV9j
bGlwUmVnaW9uID0gY2xpcDsKKyAgICAgICAgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UgPSB0
cnVlOworICAgIH0KK30KKwordm9pZCBQbHVnaW5Db250YWluZXJTeW1iaWFuOjphZGp1c3RHZW9t
ZXRyeSgpCit7CisgICAgaWYgKG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlKSB7CisgICAgICAg
IHNldEdlb21ldHJ5KG1fd2luZG93UmVjdCk7CisgICAgICAgIHNldE1hc2sobV9jbGlwUmVnaW9u
KTsKKyAgICAgICAgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UgPSBmYWxzZTsKKyAgICB9Cit9
CisKK3ZvaWQgUGx1Z2luQ29udGFpbmVyU3ltYmlhbjo6Zm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50
KiBldmVudCkKK3sKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGx1Z2luVmlldy0+cGFyZW50RnJh
bWUoKS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZl
KHRydWUpOworCisgICAgbV9wbHVnaW5WaWV3LT5mb2N1c1BsdWdpbkVsZW1lbnQoKTsKK30KKwor
dm9pZCBQbHVnaW5Db250YWluZXJTeW1iaWFuOjpmb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50KikK
K3sKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGx1Z2luVmlldy0+cGFyZW50RnJhbWUoKS0+cGFn
ZSgpKQorICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKGZhbHNlKTsK
K30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkRhdGFiYXNlU3ltYmlhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luRGF0YWJhc2VT
eW1iaWFuLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdp
bkRhdGFiYXNlU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJh
c2UuaCIKKworI2luY2x1ZGUgPFFGaWxlSW5mbz4KKyNpbmNsdWRlIDxmMzJmaWxlLmg+CisKK3N0
YXRpYyBjb25zdCBjaGFyIFFUUExVR0lOX0ZJTFRFUltdID0gIioucXRwbHVnaW4iOworc3RhdGlj
IGNvbnN0IGNoYXIgUVRfUExVR0lOX0ZPTERFUltdID0gIjpcXHJlc291cmNlXFxxdFxccGx1Z2lu
c1xcbnBxdHBsdWdpbnNcXCI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVmVjdG9yPFN0cmlu
Zz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCit7CisgICAgVmVj
dG9yPFN0cmluZz4gZGlyZWN0b3JpZXM7CisgICAgLy9maW5kIHRoZSBpbnN0YWxsYXRpb24gZHJp
dmUKKyAgICBURHJpdmVMaXN0IGRyaXZlbGlzdDsKKyAgICBUQ2hhciBkcml2ZUxldHRlcjsKKyAg
ICBSRnMgZnNTZXNzaW9uOworICAgIAorICAgIGlmIChmc1Nlc3Npb24uQ29ubmVjdCgpID09IEtF
cnJOb25lICYmIGZzU2Vzc2lvbi5Ecml2ZUxpc3QoZHJpdmVsaXN0KSA9PSBLRXJyTm9uZSkgewor
ICAgICAgICBmb3IgKFRJbnQgZHJpdmVOdW1iZXIgPSBFRHJpdmVBOyBkcml2ZU51bWJlciA8PSBF
RHJpdmVaOyBkcml2ZU51bWJlcisrKSB7CisgICAgICAgICAgICBpZiAoZHJpdmVsaXN0W2RyaXZl
TnVtYmVyXSAmJiBmc1Nlc3Npb24uRHJpdmVUb0NoYXIoZHJpdmVOdW1iZXIsIGRyaXZlTGV0dGVy
KSA9PSBLRXJyTm9uZSkgeworICAgICAgICAgICAgICAgIFFTdHJpbmcgZHJpdmVTdHJpbmdWYWx1
ZShRQ2hhcigodWludClkcml2ZUxldHRlci5HZXRVcHBlckNhc2UoKSkpOworICAgICAgICAgICAg
ICAgIFFTdHJpbmcgc3R1YkRpclBhdGg7CisgICAgICAgICAgICAgICAgc3R1YkRpclBhdGguYXBw
ZW5kKGRyaXZlU3RyaW5nVmFsdWUpOworICAgICAgICAgICAgICAgIHN0dWJEaXJQYXRoLmFwcGVu
ZChRVF9QTFVHSU5fRk9MREVSKTsKKyAgICAgICAgICAgICAgICBpZiAoUUZpbGVJbmZvKHN0dWJE
aXJQYXRoKS5leGlzdHMoKSkKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5k
KHN0dWJEaXJQYXRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZz
U2Vzc2lvbi5DbG9zZSgpOworICAgIHJldHVybiBkaXJlY3RvcmllczsKK30KKworYm9vbCBQbHVn
aW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRo
KQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVn
aW5QYXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JiBwYXRocykgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KKyAgICBI
YXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOworCisgICAgU3RyaW5nIGZpbGVOYW1lRmls
dGVyKFFUUExVR0lOX0ZJTFRFUik7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgZGlyc0VuZCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZEl0ID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5iZWdpbigp
OyBkSXQgIT0gZGlyc0VuZDsgKytkSXQpIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gcGx1Z2lu
UGF0aHMgPSBsaXN0RGlyZWN0b3J5KCpkSXQsIGZpbGVOYW1lRmlsdGVyKTsKKyAgICAgICAgVmVj
dG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBsdWdpbnNFbmQgPSBwbHVnaW5QYXRocy5lbmQo
KTsKKyAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcEl0ID0gcGx1
Z2luUGF0aHMuYmVnaW4oKTsgcEl0ICE9IHBsdWdpbnNFbmQ7ICsrcEl0KSB7CisgICAgICAgICAg
ICBpZiAoIWZpbGVFeGlzdHMoKnBJdCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBwYXRocy5hZGQoKnBJdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KSW5kZXg6
IFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250YWluZXJTeW1iaWFuLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250YWluZXJT
eW1iaWFuLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpZm5kZWYgUGx1Z2luQ29udGFpbmVyU3ltYmlhbl9oCisjZGVmaW5lIFBsdWdpbkNvbnRh
aW5lclN5bWJpYW5faAorCisjaW5jbHVkZSA8UVdpZGdldD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisgICAgY2xhc3MgUGx1Z2luVmlldzsKKworICAgIGNsYXNzIFBsdWdpbkNvbnRhaW5lclN5
bWJpYW4gOiBwdWJsaWMgUVdpZGdldCB7CisgICAgICAgIFFfT0JKRUNUCisgICAgcHVibGljOgor
ICAgICAgICBQbHVnaW5Db250YWluZXJTeW1iaWFuKFBsdWdpblZpZXcqLCBRV2lkZ2V0KiBwYXJl
bnQpOworICAgICAgICB+UGx1Z2luQ29udGFpbmVyU3ltYmlhbigpOworCisgICAgICAgIHZvaWQg
cmVxdWVzdEdlb21ldHJ5KGNvbnN0IFFSZWN0JiwgY29uc3QgUVJlZ2lvbiYgY2xpcCA9IFFSZWdp
b24oKSk7CisgICAgICAgIHZvaWQgYWRqdXN0R2VvbWV0cnkoKTsKKworICAgIHByb3RlY3RlZDoK
KyAgICAgICAgdmlydHVhbCB2b2lkIGZvY3VzSW5FdmVudChRRm9jdXNFdmVudCopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVudChRRm9jdXNFdmVudCopOworICAgIHByaXZhdGU6
CisgICAgICAgIFBsdWdpblZpZXcqIG1fcGx1Z2luVmlldzsKKyAgICAgICAgUVdpZGdldCogbV9w
YXJlbnQ7CisgICAgICAgIFFSZWN0IG1fd2luZG93UmVjdDsKKyAgICAgICAgUVJlZ2lvbiBtX2Ns
aXBSZWdpb247CisgICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2U7CisgICAg
fTsKK30KKworI2VuZGlmIC8vIFBsdWdpbkNvbnRhaW5lclN5bWJpYW5faApJbmRleDogV2ViQ29y
ZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luVmlld1N5bWJpYW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpblZpZXdTeW1iaWFuLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpblZpZXdTeW1iaWFuLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NjMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNs
dWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZy
YW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZy
YW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVt
ZW50LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNp
bmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKKyNpbmNsdWRl
ICJucGludGVyZmFjZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRl
ICJQbHVnaW5Db250YWluZXJTeW1iaWFuLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNp
bmNsdWRlICJQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFj
a2FnZS5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJv
bGxlci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwu
aCIKKyNpbmNsdWRlICJydW50aW1lLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5j
bHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlIDxRS2V5RXZlbnQ+CisjaW5jbHVkZSA8
UVBpeG1hcC5oPgorI2luY2x1ZGUgPFFSZWdpb24+CisjaW5jbHVkZSA8UVZlY3Rvcj4KKyNpbmNs
dWRlIDxRV2lkZ2V0PgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8cnVu
dGltZS9KU1ZhbHVlLmg+CisKK3VzaW5nIEpTQzo6RXhlY1N0YXRlOwordXNpbmcgSlNDOjpJbnRl
cnByZXRlcjsKK3VzaW5nIEpTQzo6SlNMb2NrOwordXNpbmcgSlNDOjpKU09iamVjdDsKK3VzaW5n
IEpTQzo6VVN0cmluZzsKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwordXNpbmcgbmFtZXNwYWNl
IFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OworCit2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCit7CisgICAgaWYgKCFw
YXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZp
ZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcq
PihwYXJlbnQoKSk7CisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0Owor
ICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworICAgIAorICAgIG1fd2luZG93
UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxv
Y2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXplKCkpOworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dD
bGlwUmVjdCgpOworICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2lu
ZG93UmVjdC55KCkpOworICAgIGlmIChtX3dpbmRvd1JlY3QgPT0gb2xkV2luZG93UmVjdCAmJiBt
X2NsaXBSZWN0ID09IG9sZENsaXBSZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBpbiBv
cmRlciB0byBtb3ZlL3Jlc2l6ZSB0aGUgcGx1Z2luIHdpbmRvdyBhdCB0aGUgc2FtZSB0aW1lIGFz
IHRoZSByZXN0IG9mIGZyYW1lCisgICAgLy8gZHVyaW5nIGUuZy4gc2Nyb2xsaW5nLCB3ZSBzZXQg
dGhlIG1hc2sgYW5kIGdlb21ldHJ5IGluIHRoZSBwYWludCgpIGZ1bmN0aW9uLCBidXQKKyAgICAv
LyBhcyBwYWludCgpIGlzbid0IGNhbGxlZCB3aGVuIHRoZSBwbHVnaW4gd2luZG93IGlzIG91dHNp
ZGUgdGhlIGZyYW1lIHdoaWNoIGNhbgorICAgIC8vIGJlIGNhdXNlZCBieSBhIHNjcm9sbCwgd2Ug
bmVlZCB0byBtb3ZlL3Jlc2l6ZSBpbW1lZGlhdGVseS4KKyAgICBpZiAoIW1fd2luZG93UmVjdC5p
bnRlcnNlY3RzKGZyYW1lVmlldy0+ZnJhbWVSZWN0KCkpKQorICAgICAgICBzZXROUFdpbmRvd0lm
TmVlZGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoKQoreworICAgIGlmIChw
bGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5z
ZXRGb2N1cyhRdDo6T3RoZXJGb2N1c1JlYXNvbik7CisgICAgZWxzZQorICAgICAgICBXaWRnZXQ6
OnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgc2V0U2Vs
ZlZpc2libGUodHJ1ZSk7CisKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJs
ZSh0cnVlKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkKK3sKKyAgICBzZXRTZWxmVmlz
aWJsZShmYWxzZSk7CisKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJsZShm
YWxzZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKKyAg
ICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gKHZvaWQqKShjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworCisgICAg
aWYgKG1faXNXaW5kb3dlZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICBzdGF0
aWNfY2FzdDxQbHVnaW5Db250YWluZXJTeW1iaWFuKj4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkt
PmFkanVzdEdlb21ldHJ5KCk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1
cm47CisKKyAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgSW50UmVjdCBjbGlwUmVjdChyZWN0KTsK
KyAgICBjbGlwUmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOworICAgIGNvbnRleHQtPmNsaXAo
Y2xpcFJlY3QpOworICAgIGNvbnRleHQtPnRyYW5zbGF0ZShmcmFtZVJlY3QoKS5sb2NhdGlvbigp
LngoKSwgZnJhbWVSZWN0KCkubG9jYXRpb24oKS55KCkpOworCisgICAgUVBhaW50RXZlbnQgZXYo
cmVjdCk7CisgICAgUUV2ZW50JiBucEV2ZW50ID0gZXY7CisgICAgZGlzcGF0Y2hOUEV2ZW50KG5w
RXZlbnQpOworCisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCisvLyBUT0RPOiBVbmlmeSBh
Y3Jvc3MgcG9ydHMuCitib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBl
dmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworCisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAg
ICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFu
Y2UsICZldmVudCk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmll
dzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisKKyAgICByZXR1cm4gYWNjZXB0ZWQ7Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVu
dCkKK3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBRRXZl
bnQmIG5wRXZlbnQgPSAqKGV2ZW50LT5rZXlFdmVudCgpLT5xdEV2ZW50KCkpOworICAgIGlmICgh
ZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQq
IGV2ZW50KQoreworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgeworICAg
ICAgICAvLyBHaXZlIGZvY3VzIHRvIHRoZSBwbHVnaW4gb24gY2xpY2sKKyAgICAgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKHRydWUpOworCisgICAgICAgIGZvY3VzUGx1Z2luRWxl
bWVudCgpOworICAgIH0KKworICAgIFFFdmVudDo6VHlwZSB0eXBlOworICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkKKyAgICAgICAgdHlwZSA9IFFF
dmVudDo6TW91c2VCdXR0b25QcmVzczsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKKyAgICAgICAgdHlwZSA9IFFFdmVudDo6TW91c2VN
b3ZlOworICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBF
dmVudCkKKyAgICAgICAgdHlwZSA9IFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlOworICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuOworCisgICAgUVBvaW50IHBvc2l0aW9uKGV2ZW50LT5vZmZzZXRY
KCksIGV2ZW50LT5vZmZzZXRZKCkpOworICAgIFF0OjpNb3VzZUJ1dHRvbiBidXR0b247CisgICAg
c3dpdGNoIChldmVudC0+d2hpY2goKSkgeworICAgIGNhc2UgMToKKyAgICAgICAgYnV0dG9uID0g
UXQ6OkxlZnRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgYnV0
dG9uID0gUXQ6Ok1pZEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAg
ICBidXR0b24gPSBRdDo6UmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJ1dHRvbiA9IFF0OjpOb0J1dHRvbjsKKyAgICB9CisgICAgUXQ6OktleWJvYXJk
TW9kaWZpZXJzIG1vZGlmaWVycyA9IDA7CisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAg
ICAgIG1vZGlmaWVycyB8PSBRdDo6Q29udHJvbE1vZGlmaWVyOworICAgIGlmIChldmVudC0+YWx0
S2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBRdDo6QWx0TW9kaWZpZXI7CisgICAgaWYgKGV2
ZW50LT5zaGlmdEtleSgpKQorICAgICAgICBtb2RpZmllcnMgfD0gUXQ6OlNoaWZ0TW9kaWZpZXI7
CisgICAgaWYgKGV2ZW50LT5tZXRhS2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBRdDo6TWV0
YU1vZGlmaWVyOworICAgIFFNb3VzZUV2ZW50IG1vdXNlRXZlbnQodHlwZSwgcG9zaXRpb24sIGJ1
dHRvbiwgYnV0dG9uLCBtb2RpZmllcnMpOyAKKyAgICBRRXZlbnQmIG5wRXZlbnQgPSBtb3VzZUV2
ZW50OworICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQorICAgICAgICBldmVudC0+
c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7CisKKyAg
ICBpZiAocGFyZW50KQorICAgICAgICBpbml0KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0
TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKQoreworICAgIGlmICghbV9pc1dpbmRvd2VkKQor
ICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0
TlBXaW5kb3dJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCAhcGFyZW50KCkg
fHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKTsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0R2VvbWV0cnkobV93
aW5kb3dSZWN0KTsKKyAgICAgICAgLy8gaWYgc2V0TWFzayBpcyBzZXQgd2l0aCBhbiBlbXB0eSBR
UmVnaW9uLCBubyBjbGlwcGluZyB3aWxsCisgICAgICAgIC8vIGJlIHBlcmZvcm1lZCwgc28gaW4g
dGhhdCBjYXNlIHdlIGhpZGUgdGhlIHBsdWdpbiB2aWV3CisgICAgICAgIHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCktPnNldFZpc2libGUoIW1fY2xpcFJlY3QuaXNFbXB0eSgpKTsKKyAgICAgICAgcGxh
dGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0TWFzayhRUmVnaW9uKG1fY2xpcFJlY3QpKTsKKworICAg
ICAgICBtX25wV2luZG93LnggPSBtX3dpbmRvd1JlY3QueCgpOworICAgICAgICBtX25wV2luZG93
LnkgPSBtX3dpbmRvd1JlY3QueSgpOworCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVm
dCA9IG1fY2xpcFJlY3QueCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IG1f
Y2xpcFJlY3QueSgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9jbGlw
UmVjdC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xp
cFJlY3QuaGVpZ2h0KCk7CisgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gYWx3YXlzIGNh
bGwgdGhpcyBtZXRob2QgYmVmb3JlIHBhaW50aW5nLgorICAgICAgICBtX25wV2luZG93LnggPSAw
OworICAgICAgICBtX25wV2luZG93LnkgPSAwOworICAgIAorICAgICAgICBtX25wV2luZG93LmNs
aXBSZWN0LmxlZnQgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7Cisg
ICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsK
KyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX3dpbmRvd1JlY3QuaGVpZ2h0
KCk7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKyAgICB9CisKKyAgICBtX25wV2lu
ZG93LndpZHRoID0gbV93aW5kb3dSZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5oZWlnaHQg
PSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7CisgICAgaWYgKG1fbnBXaW5kb3cueCA8IDAgfHwgbV9u
cFdpbmRvdy55IDwgMCB8fCBtX25wV2luZG93LndpZHRoIDw9IDAgfHwgbV9ucFdpbmRvdy5oZWln
aHQgPD0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFBsdWdpblZpZXc6OnNldEN1cnJl
bnRQbHVnaW5WaWV3KHRoaXMpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOworICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5j
ZSwgJm1fbnBXaW5kb3cpOworICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNl
dFBhcmVudFZpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIGlmIChpc1BhcmVudFZpc2libGUo
KSA9PSB2aXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBXaWRnZXQ6OnNldFBhcmVudFZp
c2libGUodmlzaWJsZSk7CisKKyAgICBpZiAoaXNTZWxmVmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldFZpc2libGUo
dmlzaWJsZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZl
Y3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK05QRXJy
b3IgUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQq
IHZhbHVlKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMo
JXMpIiwgcHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOworCisgICAg
c3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbDoK
KyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKKworICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoK
KyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOUEVS
Ul9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1
ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgTE9HKFBsdWdpbnMs
ICJQbHVnaW5WaWV3OjpnZXRWYWx1ZSglcykiLCBwcmV0dHlOYW1lRm9yTlBOVmFyaWFibGUodmFy
aWFibGUpLmRhdGEoKSk7CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5W
V2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQorICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgTlBPYmplY3Qq
IHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTY3Jp
cHROUE9iamVjdCgpOworCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBi
ZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9i
amVjdCkKKyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7
CisKKyAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAqdiA9IHdpbmRv
d1NjcmlwdE9iamVjdDsKKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7CisgICAgfQorCisgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisgICAg
ICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9H
RU5FUklDX0VSUk9SOworCisgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAw
OworCisgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2Vs
ZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmpl
Y3RUYWcpKQorICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRN
TFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOworCisgICAgICAgIC8v
IFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhl
cmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRt
bD4KKyAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgIF9OUE5fUmV0
YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgdm9pZCoqIHYgPSAodm9p
ZCoqKXZhbHVlOworICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfSAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGdldFZhbHVlU3RhdGljKHZhcmlhYmxlLCB2YWx1ZSk7CisgICAgfQorfQorCit2
b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBwbGF0Zm9ybVdpZGdldCgpLT51cGRhdGUo
cmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaW52YWxpZGF0ZVdpbmRv
d2xlc3NQbHVnaW5SZWN0KHJlY3QpOworfQorICAgIAordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlk
YXRlUmVjdChOUFJlY3QqIHJlY3QpCit7CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVj
dC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworICAgIG1f
aW52YWxpZFJlY3RzLmFwcGVuZChyKTsKKyAgICBpZiAoIW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0
aXZlKCkpCisgICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwLjAwMSk7Cit9
CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCit7
CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICgh
cmVnaW9uKSAKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFFWZWN0b3I8UVJlY3Q+IHJlY3Rz
ID0gcmVnaW9uLT5yZWN0cygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgY29uc3QgUVJlY3QmIHFSZWN0ID0gcmVjdHMuYXQoaSk7CisgICAg
ICAgIG1faW52YWxpZFJlY3RzLmFwcGVuZChxUmVjdCk7CisgICAgICAgIGlmICghbV9pbnZhbGlk
YXRlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0YXJ0
T25lU2hvdCgwLjAwMSk7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3
KCkKK3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisgICAgaW52YWxp
ZGF0ZSgpOworfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQoreworCUFTU0VS
VChtX2lzU3RhcnRlZCk7CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSk7CisgICAgCisgICAgc2hvdygpOworCisgICAgaWYgKG1faXNXaW5kb3dl
ZCkgeworICAgICAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50ID0gbV9wYXJlbnRGcmFtZS0+dmll
dygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgICAgICAvLyBGSVhN
RSB0aGlzIHdpbGwgbm90IHdvcmsgZm9yIFFHcmFwaGljc1ZpZXcuCisgICAgICAgIC8vIEJ1dCB3
ZSBjYW5ub3QgdXNlIHdpbklkIGJlY2F1c2UgaXQgd2lsbCBjcmVhdGUgYSB3aW5kb3cgYW5kIG9u
IFM2MCwKKyAgICAgICAgLy8gUVdpZGdldHMgc2hvdWxkIG5vdCBjcmVhdGUgYSB3aW5kb3cuIAor
ICAgICAgICBRX0FTU0VSVChxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KGNsaWVudC0+cGx1Z2luUGFy
ZW50KCkpKTsKKyAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQobmV3IFBsdWdpbkNvbnRhaW5lclN5
bWJpYW4odGhpcywKKyAgICAgICAgICAgIHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4oY2xpZW50LT5w
bHVnaW5QYXJlbnQoKSkpKTsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBl
V2luZG93OworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilwbGF0Zm9ybVBsdWdp
bldpZGdldCgpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7
CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgICAg
ICBtX25wV2luZG93LndpbmRvdyA9IDA7IC8vIE5vdCB1c2VkPworICAgIH0gICAgCisgICAgc2V0
TlBXaW5kb3dJZk5lZWRlZCgpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBs
dWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCkpCisgICAgICAgIGRlbGV0ZSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OmhhbHQoKQoreworfQorCit2b2lkIFBsdWdpblZpZXc6OnJlc3RhcnQoKQor
eworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvc3lt
Ymlhbi9QbHVnaW5QYWNrYWdlU3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVn
aW5zL3N5bWJpYW4vUGx1Z2luUGFja2FnZVN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luUGFja2FnZVN5bWJpYW4uY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisj
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIm5waW50ZXJmYWNlLmgiCisj
aW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgor
I2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSA8UVBsdWdpbkxvYWRlcj4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCit7Cisg
ICAgaWYgKCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNoYXIqIGJ1ZiA9
IDA7CisgICAgTlBFcnJvciBlcnIgPSBtX3BsdWdpbkZ1bmNzLmdldHZhbHVlKDAsIE5QUFZwbHVn
aW5OYW1lU3RyaW5nLCAodm9pZCAqKSZidWYpOworICAgIG1fbmFtZSA9IGJ1ZjsKKyAgICBlcnIg
PSBtX3BsdWdpbkZ1bmNzLmdldHZhbHVlKDAsIE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZywg
KHZvaWQgKikmYnVmKTsKKyAgICBtX2Rlc2NyaXB0aW9uID0gYnVmOworCisgICAgZGV0ZXJtaW5l
TW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOworCisgICAgU3RyaW5nIHMgPSBtX25wSW50
ZXJmYWNlLT5OUF9HZXRNSU1FRGVzY3JpcHRpb24oKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBl
czsKKyAgICBzLnNwbGl0KFVDaGFyKCd8JyksIGZhbHNlLCB0eXBlcyk7ICAvLyA8TUlNRTE+Ozxl
eHQxLGV4dDIsZXh0MywuLi4+OzxEZXNjcmlwdGlvbj58PE1JTUUyPnw8TUlNRTM+fC4uLgorCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7ICsraSkgeworICAgICAgICBWZWN0
b3I8U3RyaW5nPiBtaW1lOworICAgICAgICB0eXBlc1tpXS5zcGxpdChVQ2hhcignOycpLCB0cnVl
LCBtaW1lKTsgIC8vIDxNSU1FMT47PGV4dDEsZXh0MixleHQzLC4uLj47PERlc2NyaXB0aW9uPgor
ICAgICAgICBpZiAobWltZS5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5n
PiBleHRzOworICAgICAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAg
ICBtaW1lWzFdLnNwbGl0KFVDaGFyKCcsJyksIGZhbHNlLCBleHRzKTsgLy8gPGV4dDEsZXh0Mixl
eHQzLC4uLj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFk
ZChtaW1lWzBdLCBleHRzKTsgLy8gPE1JTUU+LDxleHQxLGV4dDIsZXh0Mz4KKyAgICAgICAgICAg
IGlmIChtaW1lLnNpemUoKSA+IDIpCisgICAgICAgICAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlv
bnMuYWRkKG1pbWVbMF0sIG1pbWVbMl0pOyAvLyA8TUlNRT4sPERlc2NyaXB0aW9uPgorICAgICAg
ICB9CisgICAgfQorICAgIHVubG9hZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBs
dWdpblBhY2thZ2U6OmxvYWQoKQoreworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1f
bG9hZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fcGx1Z2lu
TG9hZGVyID0gbmV3IFFQbHVnaW5Mb2FkZXIobV9wYXRoKTsKKyAgICBpZiAoIW1fcGx1Z2luTG9h
ZGVyLT5sb2FkKCkpIHsKKyAgICAgICAgZGVsZXRlIG1fcGx1Z2luTG9hZGVyOworICAgICAgICBt
X3BsdWdpbkxvYWRlciA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBR
T2JqZWN0KiBwbHVnaW4gPSBtX3BsdWdpbkxvYWRlci0+aW5zdGFuY2UoKTsKKyAgICBpZiAoIXBs
dWdpbikgeworICAgICAgICBtX3BsdWdpbkxvYWRlci0+dW5sb2FkKCk7CisgICAgICAgIGRlbGV0
ZSBtX3BsdWdpbkxvYWRlcjsKKyAgICAgICAgbV9wbHVnaW5Mb2FkZXIgPSAwOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUGx1Z2luIGluc3RhbmNlIGNyZWF0ZWQKKyAg
ICAvLyBDYXN0IHBsdWdpbiB0byBOUEludGVyZmFjZSwKKyAgICBtX25wSW50ZXJmYWNlID0gcW9i
amVjdF9jYXN0PE5QSW50ZXJmYWNlKj4ocGx1Z2luKTsKKyAgICBpZiAoIW1fbnBJbnRlcmZhY2Up
IHsKKyAgICAgICAgbV9wbHVnaW5Mb2FkZXItPnVubG9hZCgpOworICAgICAgICBkZWxldGUgbV9w
bHVnaW5Mb2FkZXI7CisgICAgICAgIG1fcGx1Z2luTG9hZGVyID0gMDsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworICAgIAorICAgIE5QRXJy
b3IgbnBFcnI7CisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5G
dW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5zaXplID0gc2l6ZW9mKG1fYnJvd3NlckZ1bmNzKTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5PUjsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmwgPSBO
UE5fUG9zdFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0
UmVhZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFtOworICAg
IG1fYnJvd3NlckZ1bmNzLndyaXRlID0gTlBOX1dyaXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmRl
c3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zdGF0
dXMgPSBOUE5fU3RhdHVzOworICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdl
bnQ7CisgICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7CisgICAgbV9i
cm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVlOworICAgIG1fYnJvd3NlckZ1bmNzLm1l
bWZsdXNoID0gTlBOX01lbUZsdXNoOworICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMg
PSBOUE5fUmVsb2FkUGx1Z2luczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBO
UE5fR2V0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxub3RpZnkgPSBOUE5f
UG9zdFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1
ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247CisgICAg
bV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7CisgICAgbV9icm93
c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52OworICAgIG1fYnJvd3NlckZ1bmNz
LmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOworICAgIG1fYnJvd3NlckZ1bmNzLnB1c2hw
b3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0
YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVh
c2VWYXJpYW50VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9
IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdp
ZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcnM7CisgICAgbV9icm93c2VyRnVu
Y3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0SW50SWRlbnRpZmllcjsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRp
ZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVj
dDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0Owor
ICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9IF9OUE5fSW52b2tlOworICAgIG1fYnJvd3NlckZ1
bmNzLmludm9rZURlZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7CisgICAgbV9icm93c2VyRnVu
Y3MuZXZhbHVhdGUgPSBfTlBOX0V2YWx1YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3Bl
cnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9
IF9OUE5fU2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBf
TlBOX1JlbW92ZVByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05Q
Tl9IYXNNZXRob2Q7CisgICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNQcm9w
ZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlv
bjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5jb25zdHJ1Y3QgPSBfTlBOX0NvbnN0cnVjdDsKKworICAgIG5wRXJyID0g
bV9ucEludGVyZmFjZS0+TlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1
bmNzKTsKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpIHsKKyAgICAgICAgbV9wbHVn
aW5Mb2FkZXItPnVubG9hZCgpOworICAgICAgICBkZWxldGUgbV9wbHVnaW5Mb2FkZXI7CisgICAg
ICAgIG1fcGx1Z2luTG9hZGVyID0gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luUGFj
a2FnZTo6dW5sb2FkKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICgtLW1fbG9hZENvdW50ID4gMCkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBtX2lzTG9hZGVkID0gZmFsc2U7CisgICAgbV9ucEludGVyZmFjZS0+TlBfU2h1dGRvd24o
KTsKKworICAgIG1fcGx1Z2luTG9hZGVyLT51bmxvYWQoKTsKKyAgICBkZWxldGUgbV9wbHVnaW5M
b2FkZXI7CisgICAgbV9wbHVnaW5Mb2FkZXIgPSAwOworfQorCit1bnNpZ25lZCBQbHVnaW5QYWNr
YWdlOjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5zaWduZWQgaGFzaENvZGVzWzJdID0geworICAg
ICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksCisgICAgICAgIG1fbGFzdE1vZGlmaWVkCisgICAg
fTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0
PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVvZih1bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIp
KTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBh
LCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQoreworICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24g
PT0gYi5tX2Rlc2NyaXB0aW9uOworfQorCitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVW
ZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYgY29tcGFyZVZlcnNpb24pIGNvbnN0
Cit7CisgICAgLy8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNz
IHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4KKyAgICAvLyB0aGUgcGFzc2VkIHZlcnNp
b24KKyAgICBpZiAobV9tb2R1bGVWZXJzaW9uICE9IGNvbXBhcmVWZXJzaW9uKQorICAgICAgICBy
ZXR1cm4gbV9tb2R1bGVWZXJzaW9uID4gY29tcGFyZVZlcnNpb24gPyAxIDogLTE7CisgICAgcmV0
dXJuIDA7Cit9CisKK30KKwpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA0OTUwNSkKKysrIFdlYkNvcmUvV2ViQ29y
ZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNyBAQAogCiAjIE5lc2NhcGUgcGx1
Z2lucyBzdXBwb3J0IChOUEFQSSkKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTkVUU0NBUEVf
UExVR0lOX0FQST0uKSB7Ci0gICAgdW5peHx3aW4zMi0qOiFlbWJlZGRlZDohd2luY2UqOiFzeW1i
aWFuIHsKKyAgICB1bml4fHdpbjMyLSo6IWVtYmVkZGVkOiF3aW5jZSo6IHsKICAgICAgICAgREVG
SU5FUyArPSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0xCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgREVGSU5FUyArPSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0wCkBAIC0yNDU3LDQ2ICsy
NDU3LDYyIEBACiAKICAgICBTT1VSQ0VTICs9IHBsdWdpbnMvbnBhcGkuY3BwCiAKLSAgICB1bml4
IHsKLSAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfUExVR0lOX1BBQ0tBR0VfU0lNUExFX0hBU0g9
MQorICAgIHN5bWJpYW4geworICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgcGx1Z2lucy9z
eW1iaWFuL1BsdWdpblBhY2thZ2VTeW1iaWFuLmNwcCBcCisgICAgICAgIHBsdWdpbnMvc3ltYmlh
bi9QbHVnaW5EYXRhYmFzZVN5bWJpYW4uY3BwIFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFuL1Bs
dWdpblZpZXdTeW1iaWFuLmNwcCBcCisgICAgICAgIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250
YWluZXJTeW1iaWFuLmNwcAogCi0gICAgICAgIG1hYyB7Ci0gICAgICAgICAgICBTT1VSQ0VTICs9
IFwKLSAgICAgICAgICAgICAgICBwbHVnaW5zL21hYy9QbHVnaW5QYWNrYWdlTWFjLmNwcCBcCi0g
ICAgICAgICAgICAgICAgcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5jcHAKLSAgICAgICAgICAg
IE9CSkVDVElWRV9TT1VSQ0VTICs9IFwKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybS90ZXh0L21h
Yy9TdHJpbmdJbXBsTWFjLm1tIFwKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybS9tYWMvV2ViQ29y
ZU5TU3RyaW5nRXh0cmFzLm1tCi0gICAgICAgICAgICBJTkNMVURFUEFUSCArPSBwbGF0Zm9ybS9t
YWMKLSAgICAgICAgICAgICMgTm90ZTogWFBfTUFDT1NYIGlzIGRlZmluZWQgaW4gbnBhcGkuaAot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgIWVtYmVkZGVkOiBDT05GSUcgKz0geDExCi0g
ICAgICAgICAgICBTT1VSQ0VTICs9IFwKLSAgICAgICAgICAgICAgICBwbHVnaW5zL3F0L1BsdWdp
bkNvbnRhaW5lclF0LmNwcCBcCi0gICAgICAgICAgICAgICAgcGx1Z2lucy9xdC9QbHVnaW5QYWNr
YWdlUXQuY3BwIFwKLSAgICAgICAgICAgICAgICBwbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAK
LSAgICAgICAgICAgIEhFQURFUlMgKz0gXAotICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1
Z2luQ29udGFpbmVyUXQuaAotICAgICAgICAgICAgREVGSU5FUyArPSBYUF9VTklYCi0gICAgICAg
IH0KLSAgICB9CisgICAgICAgIEhFQURFUlMgKz0gXAorICAgICAgICBwbHVnaW5zL3N5bWJpYW4v
UGx1Z2luQ29udGFpbmVyU3ltYmlhbi5oIFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFuL25waW50
ZXJmYWNlLmgKIAotICAgIHdpbjMyLSogewotICAgICAgICBJTkNMVURFUEFUSCArPSAkJFBXRC9w
bHVnaW5zL3dpbgorICAgICAgICBMSUJTICs9IC1sZWZzcnYKIAotICAgICAgICBTT1VSQ0VTICs9
IHBhZ2Uvd2luL1BhZ2VXaW4uY3BwIFwKLSAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dpbi9Q
bHVnaW5EYXRhYmFzZVdpbi5jcHAgXAotICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvd2luL1Bs
dWdpblBhY2thZ2VXaW4uY3BwIFwKLSAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dpbi9QbHVn
aW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBcCi0gICAgICAgICAgICAgICAgICAgcGx1Z2lucy93
aW4vUGx1Z2luVmlld1dpbi5jcHAKKyAgICB9IGVsc2UgewogCi0gICAgICAgIExJQlMgKz0gXAot
ICAgICAgICAgICAgLWxhZHZhcGkzMiBcCi0gICAgICAgICAgICAtbGdkaTMyIFwKLSAgICAgICAg
ICAgIC1sc2hlbGwzMiBcCi0gICAgICAgICAgICAtbHNobHdhcGkgXAotICAgICAgICAgICAgLWx1
c2VyMzIgXAotICAgICAgICAgICAgLWx2ZXJzaW9uCisgICAgICAgIHVuaXggeworICAgICAgICAg
ICAgREVGSU5FUyArPSBFTkFCTEVfUExVR0lOX1BBQ0tBR0VfU0lNUExFX0hBU0g9MQorICAgIAor
ICAgICAgICAgICAgbWFjIHsKKyAgICAgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAg
ICAgICAgICAgICAgcGx1Z2lucy9tYWMvUGx1Z2luUGFja2FnZU1hYy5jcHAgXAorICAgICAgICAg
ICAgICAgICAgICBwbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLmNwcAorICAgICAgICAgICAgICAg
IE9CSkVDVElWRV9TT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0vdGV4
dC9tYWMvU3RyaW5nSW1wbE1hYy5tbSBcCisgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtL21h
Yy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMubW0KKyAgICAgICAgICAgICAgICBJTkNMVURFUEFUSCAr
PSBwbGF0Zm9ybS9tYWMKKyAgICAgICAgICAgICAgICAjIE5vdGU6IFhQX01BQ09TWCBpcyBkZWZp
bmVkIGluIG5wYXBpLmgKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgIWVt
YmVkZGVkOiBDT05GSUcgKz0geDExCisgICAgICAgICAgICAgICAgU09VUkNFUyArPSBcCisgICAg
ICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuY3BwIFwKKyAgICAg
ICAgICAgICAgICAgICAgcGx1Z2lucy9xdC9QbHVnaW5QYWNrYWdlUXQuY3BwIFwKKyAgICAgICAg
ICAgICAgICAgICAgcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCisgICAgICAgICAgICAgICAg
SEVBREVSUyArPSBcCisgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luQ29udGFp
bmVyUXQuaAorICAgICAgICAgICAgICAgIERFRklORVMgKz0gWFBfVU5JWAorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgCisgICAgICAgIHdpbjMyLSogeworICAgICAgICAgICAgSU5DTFVE
RVBBVEggKz0gJCRQV0QvcGx1Z2lucy93aW4KKyAgICAKKyAgICAgICAgICAgIFNPVVJDRVMgKz0g
cGFnZS93aW4vUGFnZVdpbi5jcHAgXAorICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dp
bi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAgXAorICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5z
L3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcCBcCisgICAgICAgICAgICAgICAgICAgICAgIHBsdWdp
bnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKKyAgICAKKyAgICAgICAgICAgIExJ
QlMgKz0gXAorICAgICAgICAgICAgICAgIC1sYWR2YXBpMzIgXAorICAgICAgICAgICAgICAgIC1s
Z2RpMzIgXAorICAgICAgICAgICAgICAgIC1sc2hlbGwzMiBcCisgICAgICAgICAgICAgICAgLWxz
aGx3YXBpIFwKKyAgICAgICAgICAgICAgICAtbHVzZXIzMiBcCisgICAgICAgICAgICAgICAgLWx2
ZXJzaW9uCisgICAgICAgIH0KICAgICB9CiAKIH0gZWxzZSB7CkluZGV4OiBXZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDk1MDUpCisr
KyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDA5
LTEwLTEwICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKyAKKyAgICAgICAg
UmV2aWV3ZWQgYnkgCisgCisgICAgICAgIEVuYWJsaW5nIE5QQVBJIHBsdWdpbiBzdXBwb3J0IG9u
IFF0IFdlYmtpdCBmb3IgUzYwIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yOTMwMgorCisgICAgICAgIEFsc28gaW1wbGVtZW50ZWQgYnkg
TWFoZXNoIEt1bGthcm5pPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+LCAKKyAgICAgICAgUm9o
aW5pIEFuYW50aCA8cm9oaW5pLmFuYW50aEBub2tpYS5jb20+IGFuZCBoZWxwIGZyb20gTm9yYmVy
dCBMZXNyCisgICAgICAgIDxub3JiZXJ0Lmxlc2VyQG5va2lhLmNvbT4KKyAgICAgICAgIAorICAg
ICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICBFbmFibGluZyBFTkFCTEVfTkVUU0NBUEVfUExV
R0lOX0FQSSBmb3IgUzYwIGFuZCBhZGRlZCBTNjAgc3BlY2lmaWMgCisgICAgICAgIG5ldyBwbHVn
aW4gZmlsZXMgdG8gYmUgY29tcGlsZWQgdW5kZXIgc3ltYmlhbjogbWFjcm8KKworICAgICAgICAq
IGJyaWRnZS9ucGFwaS5oOgorICAgICAgICBBZGRlZCBOUEV2ZW50IGFuZCBOUFJlZ2lvbiBkZWZp
bml0aW9uIGZvciBTeW1iaWFuCisKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblBhY2thZ2UuaDoK
KyAgICAgICAgQWRkZWQgUzYwIHNwZWNpZmljIHBsdWdpbiBpbnRlcmZhY2UgYW5kIHBsdWdpbiBs
b2FkZXIgdmFyaWFibGVzCisgICAgICAgICogcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnVubG9hZCk6IEFkZGVkICFQTEFURk9STShT
WU1CSUFOKSBtYWNyby4KKyAgICAgICAgRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0byBiZSB1c2Vk
IG9ubHkgZm9yIG5vbi1zeW1iaWFuIHBsYXRmb3JtCisgICAgICAgICogcGx1Z2lucy9QbHVnaW5E
YXRhYmFzZS5jcHA6CisgICAgICAgIE1hY3JvICFTWU1CSUFOIGNoZWNraW5nCisgICAgICAgICog
cGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgIEFkZCBTeW1iaWFuIHRvIHBsYXRmb3JtcyB0
aGF0IHN1cHBvcnQgc2V0TlBXaW5kb3dJZk5lZWRlZAorICAgICAgICAqIHBsdWdpbnMvUGx1Z2lu
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRGcmFtZVJlY3QpOiBB
ZGQgU3ltYmlhbiB0byBwbGF0Zm9ybXMgdGhhdAorICAgICAgICBjYWxsIHNldE5QV2luZG93UmVj
dCBmcm9tIHNldEZyYW1lUmVjdAorICAgICAgICAgCisgICAgICAgIEFkZGVkIGZvbGRlciAnc3lt
Ymlhbicgd2hpY2ggY29udGFpbnMgaW1wbGVtZW50YXRpb24gZmlsZXMgZm9yIFM2MAorICAgICAg
ICBwbGF0Zm9ybS1zcGVjaWZpYyBOUEFQSSBwbHVnaW4gZnVuY3Rpb25hbGl0eSwgdW5kZXIgL3Bs
dWdpbnMgZm9sZGVyCisgICAgICAgICogcGx1Z2lucy9zeW1iaWFuCisgICAgICAgICogcGx1Z2lu
cy9zeW1iaWFuL25waW50ZXJmYWNlLmg6CisgICAgICAgIFBsdWdpbiBJbnRlcmZhY2UgdG8gYmUg
aW1wbGVtZW50ZWQgYnkgUzYwIE5QQVBJIHBsdWdpbnMgCisgICAgICAgICogcGx1Z2lucy9zeW1i
aWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uaDoKKyAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4v
UGx1Z2luQ29udGFpbmVyU3ltYmlhbi5jcHA6CisgICAgICAgICogcGx1Z2lucy9zeW1iaWFuL1Bs
dWdpbkRhdGFiYXNlU3ltYmlhbi5jcHA6CisgICAgICAgICogcGx1Z2lucy9zeW1iaWFuL1BsdWdp
blZpZXdTeW1iaWFuLmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luUGFja2Fn
ZVN5bWJpYW4uY3BwOgorCiAyMDA5LTEwLTEzICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCkluZGV4
OiBXZWJDb3JlL2JyaWRnZS9ucGFwaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL25w
YXBpLmgJKHJldmlzaW9uIDQ5NTA1KQorKysgV2ViQ29yZS9icmlkZ2UvbnBhcGkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiwxMSBAQAogICAgICNpbmNsdWRlIDxzdGRpby5oPgogI2Vu
ZGlmCiAKKyNpZiBkZWZpbmVkKFhQX1NZTUJJQU4pCisgICAgI2luY2x1ZGUgPFFFdmVudD4KKyAg
ICAjaW5jbHVkZSA8UVJlZ2lvbj4KKyNlbmRpZgorCiAjaWZkZWYgWFBfV0lOCiAgICAgI2luY2x1
ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgpAQCAtNTI2LDkgKzUzMSw5IEBACiAgICAgdWludDMyICAg
IGhlaWdodDsKICAgICBOUFJlY3QgICAgY2xpcFJlY3Q7ICAgIC8qIENsaXBwaW5nIHJlY3Rhbmds
ZSBpbiBwb3J0IGNvb3JkaW5hdGVzICovCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2Vk
IGJ5IE1BQyBvbmx5LiAgICAgICAgICAgICAgKi8KLSNpZmRlZiBYUF9VTklYCisjaWYgZGVmaW5l
ZChYUF9VTklYKSB8fCBkZWZpbmVkKFhQX1NZTUJJQU4pCiAgICAgdm9pZCAqICAgIHdzX2luZm87
ICAgIC8qIFBsYXRmb3JtLWRlcGVuZGVudCBhZGRpdG9uYWwgZGF0YSAqLwotI2VuZGlmIC8qIFhQ
X1VOSVggKi8KKyNlbmRpZiAvKiBYUF9VTklYIHx8IFhQX1NZTUJJQU4gKi8KICAgICBOUFdpbmRv
d1R5cGUgdHlwZTsgICAgLyogSXMgdGhpcyBhIHdpbmRvdyBvciBhIGRyYXdhYmxlPyAqLwogfSBO
UFdpbmRvdzsKIApAQCAtNTc4LDYgKzU4Myw4IEBACiB0eXBlZGVmIEV2ZW50UmVjb3JkICAgIE5Q
RXZlbnQ7CiAjZW5kaWYKIAorI2VsaWYgZGVmaW5lZChYUF9TWU1CSUFOKQordHlwZWRlZiBRRXZl
bnQgTlBFdmVudDsKICNlbGlmIGRlZmluZWQoWFBfV0lOKQogdHlwZWRlZiBzdHJ1Y3QgX05QRXZl
bnQKIHsKQEAgLTYwOCw2ICs2MTUsOCBAQAogdHlwZWRlZiBIUkdOIE5QUmVnaW9uOwogI2VsaWYg
ZGVmaW5lZChYUF9VTklYKQogdHlwZWRlZiBSZWdpb24gTlBSZWdpb247CisjZWxpZiBkZWZpbmVk
KFhQX1NZTUJJQU4pCit0eXBlZGVmIFFSZWdpb24qIE5QUmVnaW9uOwogI2Vsc2UKIHR5cGVkZWYg
dm9pZCAqTlBSZWdpb247CiAjZW5kaWYgLyogWFBfTUFDICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41161</attachid>
            <date>2009-10-14 07:52:40 -0700</date>
            <delta_ts>2009-10-14 08:43:54 -0700</delta_ts>
            <desc>Updated patch after hash changes landed</desc>
            <filename>29302.patch</filename>
            <type>text/plain</type>
            <size>40606</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCShyZXZpc2lvbiA0OTU1NykNCisrKyBXZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlldy5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMzExLDcgKzMxMSw3IEBADQog
CiBwcml2YXRlOgogCi0jaWYgZGVmaW5lZChYUF9VTklYKSB8fCBkZWZpbmVkKFFfV1NfWDExKQor
I2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgZGVmaW5lZChRX1dTX1gxMSkgfHwgUExBVEZPUk0oU1lN
QklBTikKICAgICAgICAgdm9pZCBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CiAjZWxpZiBkZWZpbmVk
KFhQX01BQ09TWCkKICAgICAgICAgTlBfQ0dDb250ZXh0IG1fbnBDZ0NvbnRleHQ7CkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHJldmlzaW9uIDQ5NTU3KQ0KKysrIFdlYkNvcmUv
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTExMyw2ICsxMTMs
NyBAQA0KICAgICBtX3BhcmVudERpcmVjdG9yeSA9IG1fcGF0aC5sZWZ0KG1fcGF0aC5sZW5ndGgo
KSAtIG1fZmlsZU5hbWUubGVuZ3RoKCkgLSAxKTsKIH0KIAorI2lmICFQTEFURk9STShTWU1CSUFO
KQogdm9pZCBQbHVnaW5QYWNrYWdlOjp1bmxvYWQoKQogewogICAgIGlmICghbV9pc0xvYWRlZCkK
QEAgLTEyNSw2ICsxMjYsNyBAQA0KIAogICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwogfQor
I2VuZGlmIC8vIVBMQVRGT1JNKFNZTUJJQU4pCiAKIHZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2Fk
V2l0aG91dFNodXRkb3duKCkKIHsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFz
ZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3Bw
CShyZXZpc2lvbiA0OTU1NykNCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpDQpAQCAtMzIwLDcgKzMyMCw3IEBADQogICAgIG1fcHJlZmVycmVkUGx1
Z2lucy5jbGVhcigpOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTl9PUykgfHwgUExBVEZPUk0oV1gp
CisjaWYgKCFQTEFURk9STShTWU1CSUFOKSkgJiYgKCFQTEFURk9STShXSU5fT1MpIHx8IFBMQVRG
T1JNKFdYKSkKIC8vIEZvciBTYWZhcmkvV2luIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcyBh
cmUgaW1wbGVtZW50ZWQKIC8vIGluIFBsdWdpbkRhdGFiYXNlV2luLmNwcCwgYnV0IGlmIHdlIGNh
biB1c2UgV2ViQ29yZSBjb25zdHJ1Y3RzCiAvLyBmb3IgdGhlIGxvZ2ljIHdlIHNob3VsZCBwZXJo
YXBzIG1vdmUgaXQgaGVyZSB1bmRlciBYUF9XSU4/CkBAIC00MjgsNiArNDI4LDYgQEANCiAgICAg
fQogfQogCi0jZW5kaWYgLy8gIVBMQVRGT1JNKFdJTl9PUykKKyNlbmRpZiAvLyAhUExBVEZPUk0o
U1lNQklBTikgJiYgIVBMQVRGT1JNKFdJTl9PUykKIAogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCShyZXZpc2lvbiA0OTU1NykNCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5j
cHAJKHdvcmtpbmcgY29weSkNCkBAIC0xMjQsOCArMTI0LDggQEANCiAKICAgICB1cGRhdGVQbHVn
aW5XaWRnZXQoKTsKIAotI2lmIFBMQVRGT1JNKFdJTl9PUykKLSAgICAvLyBPbiBXaW5kb3dzLCBh
bHdheXMgY2FsbCBwbHVnaW4gdG8gY2hhbmdlIGdlb21ldHJ5LgorI2lmIFBMQVRGT1JNKFdJTl9P
UykgfHwgUExBVEZPUk0oU1lNQklBTikKKyAgICAvLyBPbiBXaW5kb3dzIGFuZCBTeW1iaWFuLCBh
bHdheXMgY2FsbCBwbHVnaW4gdG8gY2hhbmdlIGdlb21ldHJ5LgogICAgIHNldE5QV2luZG93UmVj
dChyZWN0KTsKICNlbGlmIFhQX1VOSVgKICAgICAvLyBPbiBVbml4LCBtdWx0aXBsZSBjYWxscyB0
byBzZXROUFdpbmRvdygpIGluIHdpbmRvd2VkIG1vZGUgY2F1c2VzIEZsYXNoIHRvIGNyYXNoCklu
ZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAkocmV2aXNpb24gNDk1NTcpDQorKysgV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAkod29ya2luZyBjb3B5KQ0KQEAgLTM2LDYgKzM2LDEx
IEBADQogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KIAorI2lmIFBMQVRGT1JNKFNZTUJJQU4pCitjbGFzcyBRUGx1Z2luTG9hZGVyOworY2xhc3Mg
TlBJbnRlcmZhY2U7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOwogICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsK
QEAgLTcwLDkgKzc1LDE3IEBADQogICAgICAgICBpbnQgY29tcGFyZShjb25zdCBQbHVnaW5QYWNr
YWdlJikgY29uc3Q7CiAgICAgICAgIFBsdWdpblF1aXJrU2V0IHF1aXJrcygpIGNvbnN0IHsgcmV0
dXJuIG1fcXVpcmtzOyB9CiAgICAgICAgIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYgdmVy
c2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbjsgfQorI2lmIFBMQVRGT1JNKFNZ
TUJJQU4pCisgICAgICAgIE5QSW50ZXJmYWNlKiBucEludGVyZmFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbnBJbnRlcmZhY2U7IH0KKyNlbmRpZiAvLyBQTEFURk9STShTWU1CSUFOKQogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgUGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRp
bWVfdCYgbGFzdE1vZGlmaWVkKTsKKworI2lmIFBMQVRGT1JNKFNZTUJJQU4pCisgICAgICAgIE5Q
SW50ZXJmYWNlKiBtX25wSW50ZXJmYWNlOworICAgICAgICBRUGx1Z2luTG9hZGVyKiBtX3BsdWdp
bkxvYWRlcjsKKyNlbmRpZiAvLyBQTEFURk9STShTWU1CSUFOKQogICAgICAgICBib29sIGZldGNo
SW5mbygpOwogICAgICAgICBib29sIGlzUGx1Z2luQmxhY2tsaXN0ZWQoKTsKICAgICAgICAgdm9p
ZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvc3ltYmlhbi9ucGludGVyZmFjZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9w
bHVnaW5zL3N5bWJpYW4vbnBpbnRlcmZhY2UuaAkocmV2aXNpb24gMCkNCisrKyBXZWJDb3JlL3Bs
dWdpbnMvc3ltYmlhbi9ucGludGVyZmFjZS5oCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSwzNyBA
QA0KKy8qDQorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykNCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLg0KKw0KKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8NCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwN
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuDQorKi8NCisjaWZuZGVmIG5waW50ZXJm
YWNlX0gNCisjZGVmaW5lIG5waW50ZXJmYWNlX0gNCisNCisjaW5jbHVkZSAibnBmdW5jdGlvbnMu
aCINCisjaW5jbHVkZSA8UXRQbHVnaW4+DQorDQorY2xhc3MgTlBJbnRlcmZhY2Ugew0KK3B1Ymxp
YzoNCisgICAgdmlydHVhbCBOUEVycm9yIE5QX0luaXRpYWxpemUoTlBOZXRzY2FwZUZ1bmNzICph
TlBORnVuY3MsIE5QUGx1Z2luRnVuY3MgKmFOUFBGdW5jcykgPSAwOw0KKyAgICB2aXJ0dWFsIHZv
aWQgTlBfU2h1dGRvd24oKSA9IDA7DQorICAgIHZpcnR1YWwgY2hhciogTlBfR2V0TUlNRURlc2Ny
aXB0aW9uKCkgPSAwOw0KK307DQorDQorDQorUVRfQkVHSU5fTkFNRVNQQUNFDQorUV9ERUNMQVJF
X0lOVEVSRkFDRShOUEludGVyZmFjZSwgImNvbS5ub2tpYS5xdHM2MC53ZWJwbHVnaW4vMS4wIik7
DQorUVRfRU5EX05BTUVTUEFDRQ0KKw0KKyNlbmRpZiAvLyBucGludGVyZmFjZV9IDQpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFpbmVyU3ltYmlhbi5jcHANCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250YWluZXJTeW1iaWFu
LmNwcAkocmV2aXNpb24gMCkNCisrKyBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250
YWluZXJTeW1iaWFuLmNwcAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNzcgQEANCisvKg0KKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4N
CisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KKyovDQorDQorI2luY2x1ZGUgImNvbmZpZy5oIg0KKyNp
bmNsdWRlICJQbHVnaW5Db250YWluZXJTeW1iaWFuLmgiDQorDQorI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIg0KKyNpbmNsdWRlICJGcmFtZS5oIg0KKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIN
CisjaW5jbHVkZSAiUGFnZS5oIg0KKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIN
CisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIg0KKw0KKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+DQor
I2luY2x1ZGUgPFFXaWRnZXQ+DQorDQordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7DQorDQorUGx1
Z2luQ29udGFpbmVyU3ltYmlhbjo6UGx1Z2luQ29udGFpbmVyU3ltYmlhbihQbHVnaW5WaWV3KiB2
aWV3LCBRV2lkZ2V0KiBwYXJlbnQpDQorICAgIDogbV9wYXJlbnQocGFyZW50KQ0KKyAgICAsIG1f
cGx1Z2luVmlldyh2aWV3KQ0KKyAgICAsIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlKGZhbHNl
KQ0KK3sNCisgICAgc2V0UGFyZW50KG1fcGFyZW50KTsNCit9DQorDQorUGx1Z2luQ29udGFpbmVy
U3ltYmlhbjo6flBsdWdpbkNvbnRhaW5lclN5bWJpYW4oKQ0KK3sNCit9DQorDQordm9pZCBQbHVn
aW5Db250YWluZXJTeW1iaWFuOjpyZXF1ZXN0R2VvbWV0cnkoY29uc3QgUVJlY3QmIHJlY3QsIGNv
bnN0IFFSZWdpb24mIGNsaXApDQorew0KKyAgICBpZiAobV93aW5kb3dSZWN0ICE9IHJlY3QgfHwg
bV9jbGlwUmVnaW9uICE9IGNsaXApIHsNCisgICAgICAgIG1fd2luZG93UmVjdCA9IHJlY3Q7DQor
ICAgICAgICBtX2NsaXBSZWdpb24gPSBjbGlwOw0KKyAgICAgICAgbV9oYXNQZW5kaW5nR2VvbWV0
cnlDaGFuZ2UgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgUGx1Z2luQ29udGFpbmVyU3lt
Ymlhbjo6YWRqdXN0R2VvbWV0cnkoKQ0KK3sNCisgICAgaWYgKG1faGFzUGVuZGluZ0dlb21ldHJ5
Q2hhbmdlKSB7DQorICAgICAgICBzZXRHZW9tZXRyeShtX3dpbmRvd1JlY3QpOw0KKyAgICAgICAg
c2V0TWFzayhtX2NsaXBSZWdpb24pOw0KKyAgICAgICAgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFu
Z2UgPSBmYWxzZTsNCisgICAgfQ0KK30NCisNCit2b2lkIFBsdWdpbkNvbnRhaW5lclN5bWJpYW46
OmZvY3VzSW5FdmVudChRRm9jdXNFdmVudCogZXZlbnQpDQorew0KKyAgICBpZiAoUGFnZSogcGFn
ZSA9IG1fcGx1Z2luVmlldy0+cGFyZW50RnJhbWUoKS0+cGFnZSgpKQ0KKyAgICAgICAgcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZSh0cnVlKTsNCisNCisgICAgbV9wbHVnaW5WaWV3
LT5mb2N1c1BsdWdpbkVsZW1lbnQoKTsNCit9DQorDQordm9pZCBQbHVnaW5Db250YWluZXJTeW1i
aWFuOjpmb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50KikNCit7DQorICAgIGlmIChQYWdlKiBwYWdl
ID0gbV9wbHVnaW5WaWV3LT5wYXJlbnRGcmFtZSgpLT5wYWdlKCkpDQorICAgICAgICBwYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKGZhbHNlKTsNCit9DQpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL3N5bWJpYW4vUGx1Z2luRGF0YWJhc2VTeW1iaWFuLmNwcA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkRhdGFiYXNlU3ltYmlhbi5jcHAJKHJldmlz
aW9uIDApDQorKysgV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luRGF0YWJhc2VTeW1iaWFu
LmNwcAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNzkgQEANCisvKg0KKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpDQor
DQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLg0KKyovDQorI2luY2x1ZGUgImNvbmZpZy5oIg0KKyNpbmNsdWRlICJQbHVnaW5E
YXRhYmFzZS5oIg0KKw0KKyNpbmNsdWRlIDxRRmlsZUluZm8+DQorI2luY2x1ZGUgPGYzMmZpbGUu
aD4NCisNCitzdGF0aWMgY29uc3QgY2hhciBRVFBMVUdJTl9GSUxURVJbXSA9ICIqLnF0cGx1Z2lu
IjsNCitzdGF0aWMgY29uc3QgY2hhciBRVF9QTFVHSU5fRk9MREVSW10gPSAiOlxccmVzb3VyY2Vc
XHF0XFxwbHVnaW5zXFxucHF0cGx1Z2luc1xcIjsNCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQor
DQorVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3Rvcmll
cygpDQorew0KKyAgICBWZWN0b3I8U3RyaW5nPiBkaXJlY3RvcmllczsNCisgICAgLy9maW5kIHRo
ZSBpbnN0YWxsYXRpb24gZHJpdmUNCisgICAgVERyaXZlTGlzdCBkcml2ZWxpc3Q7DQorICAgIFRD
aGFyIGRyaXZlTGV0dGVyOw0KKyAgICBSRnMgZnNTZXNzaW9uOw0KKyAgICANCisgICAgaWYgKGZz
U2Vzc2lvbi5Db25uZWN0KCkgPT0gS0Vyck5vbmUgJiYgZnNTZXNzaW9uLkRyaXZlTGlzdChkcml2
ZWxpc3QpID09IEtFcnJOb25lKSB7DQorICAgICAgICBmb3IgKFRJbnQgZHJpdmVOdW1iZXIgPSBF
RHJpdmVBOyBkcml2ZU51bWJlciA8PSBFRHJpdmVaOyBkcml2ZU51bWJlcisrKSB7DQorICAgICAg
ICAgICAgaWYgKGRyaXZlbGlzdFtkcml2ZU51bWJlcl0gJiYgZnNTZXNzaW9uLkRyaXZlVG9DaGFy
KGRyaXZlTnVtYmVyLCBkcml2ZUxldHRlcikgPT0gS0Vyck5vbmUpIHsNCisgICAgICAgICAgICAg
ICAgUVN0cmluZyBkcml2ZVN0cmluZ1ZhbHVlKFFDaGFyKCh1aW50KWRyaXZlTGV0dGVyLkdldFVw
cGVyQ2FzZSgpKSk7DQorICAgICAgICAgICAgICAgIFFTdHJpbmcgc3R1YkRpclBhdGg7DQorICAg
ICAgICAgICAgICAgIHN0dWJEaXJQYXRoLmFwcGVuZChkcml2ZVN0cmluZ1ZhbHVlKTsNCisgICAg
ICAgICAgICAgICAgc3R1YkRpclBhdGguYXBwZW5kKFFUX1BMVUdJTl9GT0xERVIpOw0KKyAgICAg
ICAgICAgICAgICBpZiAoUUZpbGVJbmZvKHN0dWJEaXJQYXRoKS5leGlzdHMoKSkNCisgICAgICAg
ICAgICAgICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChzdHViRGlyUGF0aCk7DQorICAgICAgICAg
ICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZzU2Vzc2lvbi5DbG9zZSgpOw0KKyAg
ICByZXR1cm4gZGlyZWN0b3JpZXM7DQorfQ0KKw0KK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJl
ZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkNCit7DQorICAgIHJldHVy
biB0cnVlOw0KK30NCisNCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGly
ZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JiBwYXRocykgY29uc3QNCit7DQorICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0Lg0KKyAgICBIYXNoU2V0PFN0
cmluZz4gdW5pcXVlRmlsZW5hbWVzOw0KKw0KKyAgICBTdHJpbmcgZmlsZU5hbWVGaWx0ZXIoUVRQ
TFVHSU5fRklMVEVSKTsNCisNCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGRp
cnNFbmQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmVuZCgpOw0KKyAgICBmb3IgKFZlY3RvcjxTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBkSXQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmJlZ2luKCk7IGRJ
dCAhPSBkaXJzRW5kOyArK2RJdCkgew0KKyAgICAgICAgVmVjdG9yPFN0cmluZz4gcGx1Z2luUGF0
aHMgPSBsaXN0RGlyZWN0b3J5KCpkSXQsIGZpbGVOYW1lRmlsdGVyKTsNCisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwbHVnaW5zRW5kID0gcGx1Z2luUGF0aHMuZW5kKCk7
DQorICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwSXQgPSBwbHVn
aW5QYXRocy5iZWdpbigpOyBwSXQgIT0gcGx1Z2luc0VuZDsgKytwSXQpIHsNCisgICAgICAgICAg
ICBpZiAoIWZpbGVFeGlzdHMoKnBJdCkpDQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAg
ICAgICAgICAgIHBhdGhzLmFkZCgqcEl0KTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit9
DQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFpbmVyU3ltYmlhbi5o
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luQ29udGFpbmVy
U3ltYmlhbi5oCShyZXZpc2lvbiAwKQ0KKysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdp
bkNvbnRhaW5lclN5bWJpYW4uaAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNTAgQEANCisvKg0K
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpDQorDQorICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4NCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KKyovDQorDQorI2lmbmRlZiBQbHVnaW5Db250YWlu
ZXJTeW1iaWFuX2gNCisjZGVmaW5lIFBsdWdpbkNvbnRhaW5lclN5bWJpYW5faA0KKw0KKyNpbmNs
dWRlIDxRV2lkZ2V0Pg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCisgICAgY2xhc3MgUGx1
Z2luVmlldzsNCisNCisgICAgY2xhc3MgUGx1Z2luQ29udGFpbmVyU3ltYmlhbiA6IHB1YmxpYyBR
V2lkZ2V0IHsNCisgICAgICAgIFFfT0JKRUNUDQorICAgIHB1YmxpYzoNCisgICAgICAgIFBsdWdp
bkNvbnRhaW5lclN5bWJpYW4oUGx1Z2luVmlldyosIFFXaWRnZXQqIHBhcmVudCk7DQorICAgICAg
ICB+UGx1Z2luQ29udGFpbmVyU3ltYmlhbigpOw0KKw0KKyAgICAgICAgdm9pZCByZXF1ZXN0R2Vv
bWV0cnkoY29uc3QgUVJlY3QmLCBjb25zdCBRUmVnaW9uJiBjbGlwID0gUVJlZ2lvbigpKTsNCisg
ICAgICAgIHZvaWQgYWRqdXN0R2VvbWV0cnkoKTsNCisNCisgICAgcHJvdGVjdGVkOg0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGZvY3VzSW5FdmVudChRRm9jdXNFdmVudCopOw0KKyAgICAgICAgdmly
dHVhbCB2b2lkIGZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqKTsNCisgICAgcHJpdmF0ZToNCisg
ICAgICAgIFBsdWdpblZpZXcqIG1fcGx1Z2luVmlldzsNCisgICAgICAgIFFXaWRnZXQqIG1fcGFy
ZW50Ow0KKyAgICAgICAgUVJlY3QgbV93aW5kb3dSZWN0Ow0KKyAgICAgICAgUVJlZ2lvbiBtX2Ns
aXBSZWdpb247DQorICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlOw0KKyAg
ICB9Ow0KK30NCisNCisjZW5kaWYgLy8gUGx1Z2luQ29udGFpbmVyU3ltYmlhbl9oDQpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luVmlld1N5bWJpYW4uY3BwDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gV2ViQ29yZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luVmlld1N5bWJpYW4uY3BwCShyZXZp
c2lvbiAwKQ0KKysrIFdlYkNvcmUvcGx1Z2lucy9zeW1iaWFuL1BsdWdpblZpZXdTeW1iaWFuLmNw
cAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNDYzIEBADQorLyoNCisgICAgQ29weXJpZ2h0IChD
KSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQ0KKw0K
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yDQorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorDQorICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LA0KKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZg0KKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bw0KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLA0KKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4NCisqLw0KKyNpbmNsdWRlICJjb25maWcuaCINCisjaW5jbHVkZSAiUGx1Z2luVmll
dy5oIg0KKw0KKyNpbmNsdWRlICJEb2N1bWVudC5oIg0KKyNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIg0KKyNpbmNsdWRlICJFbGVtZW50LmgiDQorI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiDQorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCINCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCINCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiDQorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIg0KKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCINCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiDQorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiDQorI2luY2x1
ZGUgIkltYWdlLmgiDQorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIg0KKyNpbmNsdWRlICJLZXli
b2FyZEV2ZW50LmgiDQorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCINCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCINCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCINCisjaW5jbHVkZSAibnBpbnRl
cmZhY2UuaCINCisjaW5jbHVkZSAiUGFnZS5oIg0KKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJk
RXZlbnQuaCINCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiDQorI2luY2x1ZGUgIlBs
dWdpbkNvbnRhaW5lclN5bWJpYW4uaCINCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCINCisjaW5j
bHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIg0KKyNpbmNsdWRlICJQbHVnaW5QYWNr
YWdlLmgiDQorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiDQorI2luY2x1ZGUgIlNjcmlwdENvbnRy
b2xsZXIuaCINCisjaW5jbHVkZSAiU2V0dGluZ3MuaCINCisjaW5jbHVkZSAibnBydW50aW1lX2lt
cGwuaCINCisjaW5jbHVkZSAicnVudGltZS5oIg0KKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIN
CisjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCINCisjaW5jbHVkZSA8UUtleUV2ZW50Pg0KKyNp
bmNsdWRlIDxRUGl4bWFwLmg+DQorI2luY2x1ZGUgPFFSZWdpb24+DQorI2luY2x1ZGUgPFFWZWN0
b3I+DQorI2luY2x1ZGUgPFFXaWRnZXQ+DQorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+DQor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNWYWx1ZS5oPg0KKw0KK3VzaW5nIEpTQzo6RXhlY1N0YXRlOw0K
K3VzaW5nIEpTQzo6SW50ZXJwcmV0ZXI7DQordXNpbmcgSlNDOjpKU0xvY2s7DQordXNpbmcgSlND
OjpKU09iamVjdDsNCit1c2luZyBKU0M6OlVTdHJpbmc7DQorDQordXNpbmcgbmFtZXNwYWNlIHN0
ZDsNCisNCit1c2luZyBuYW1lc3BhY2UgV1RGOw0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisN
Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOw0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6dXBkYXRl
UGx1Z2luV2lkZ2V0KCkNCit7DQorICAgIGlmICghcGFyZW50KCkpDQorICAgICAgICByZXR1cm47
DQorICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7DQorICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOw0KKyAgICBJbnRS
ZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7DQorICAgIEludFJlY3Qgb2xkQ2xpcFJl
Y3QgPSBtX2NsaXBSZWN0Ow0KKyAgICANCisgICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFt
ZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSksIGZyYW1lUmVj
dCgpLnNpemUoKSk7DQorICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOw0KKyAgICBt
X2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsNCisg
ICAgaWYgKG1fd2luZG93UmVjdCA9PSBvbGRXaW5kb3dSZWN0ICYmIG1fY2xpcFJlY3QgPT0gb2xk
Q2xpcFJlY3QpCisgICAgICAgIHJldHVybjsNCisNCisgICAgLy8gaW4gb3JkZXIgdG8gbW92ZS9y
ZXNpemUgdGhlIHBsdWdpbiB3aW5kb3cgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgcmVzdCBvZiBm
cmFtZQ0KKyAgICAvLyBkdXJpbmcgZS5nLiBzY3JvbGxpbmcsIHdlIHNldCB0aGUgbWFzayBhbmQg
Z2VvbWV0cnkgaW4gdGhlIHBhaW50KCkgZnVuY3Rpb24sIGJ1dA0KKyAgICAvLyBhcyBwYWludCgp
IGlzbid0IGNhbGxlZCB3aGVuIHRoZSBwbHVnaW4gd2luZG93IGlzIG91dHNpZGUgdGhlIGZyYW1l
IHdoaWNoIGNhbg0KKyAgICAvLyBiZSBjYXVzZWQgYnkgYSBzY3JvbGwsIHdlIG5lZWQgdG8gbW92
ZS9yZXNpemUgaW1tZWRpYXRlbHkuDQorICAgIGlmICghbV93aW5kb3dSZWN0LmludGVyc2VjdHMo
ZnJhbWVWaWV3LT5mcmFtZVJlY3QoKSkpDQorICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7
DQorfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoKQ0KK3sNCisgICAgaWYgKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldEZv
Y3VzKFF0OjpPdGhlckZvY3VzUmVhc29uKTsKKyAgICBlbHNlCisgICAgICAgIFdpZGdldDo6c2V0
Rm9jdXMoKTsNCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpzaG93KCkNCit7DQorICAgIHNldFNl
bGZWaXNpYmxlKHRydWUpOw0KKworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKQorICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNp
YmxlKHRydWUpOworfQ0KKw0KK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpDQorew0KKyAgICBzZXRT
ZWxmVmlzaWJsZShmYWxzZSk7DQorDQorICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0
Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRW
aXNpYmxlKGZhbHNlKTsKK30NCisNCit2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkNCit7DQorICAgIGlmICghbV9pc1N0
YXJ0ZWQpIHsNCisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7
DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisgICAgDQorICAgIGlmIChjb250ZXh0LT5wYWlu
dGluZ0Rpc2FibGVkKCkpDQorICAgICAgICByZXR1cm47DQorICAgIG1fbnBXaW5kb3cud3NfaW5m
byA9ICh2b2lkKikoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOw0KKyAgICBzZXROUFdpbmRv
d0lmTmVlZGVkKCk7CisNCisgICAgaWYgKG1faXNXaW5kb3dlZCAmJiBwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKQ0KKyAgICAgICAgc3RhdGljX2Nhc3Q8UGx1Z2luQ29udGFpbmVyU3ltYmlhbio+KHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT5hZGp1c3RHZW9tZXRyeSgpOw0KKw0KKyAgICBpZiAobV9p
c1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisNCisgICAgY29udGV4dC0+c2F2ZSgpOw0KKyAg
ICBJbnRSZWN0IGNsaXBSZWN0KHJlY3QpOw0KKyAgICBjbGlwUmVjdC5pbnRlcnNlY3QoZnJhbWVS
ZWN0KCkpOw0KKyAgICBjb250ZXh0LT5jbGlwKGNsaXBSZWN0KTsNCisgICAgY29udGV4dC0+dHJh
bnNsYXRlKGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkueCgpLCBmcmFtZVJlY3QoKS5sb2NhdGlvbigp
LnkoKSk7DQorDQorICAgIFFQYWludEV2ZW50IGV2KHJlY3QpOw0KKyAgICBRRXZlbnQmIG5wRXZl
bnQgPSBldjsNCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOw0KKw0KKyAgICBjb250ZXh0
LT5yZXN0b3JlKCk7DQorfQ0KKw0KKy8vIFRPRE86IFVuaWZ5IGFjcm9zcyBwb3J0cy4KK2Jvb2wg
UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQoreworICAgIGlmICgh
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgIGJvb2wgYWNjZXB0ZWQgPSBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKKyAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
VmlldygwKTsNCisKKyAgICByZXR1cm4gYWNjZXB0ZWQ7Cit9CisNCit2b2lkIFBsdWdpblZpZXc6
OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpDQorew0KKyAgICBpZiAo
bV9pc1dpbmRvd2VkKQ0KKyAgICAgICAgcmV0dXJuOw0KKw0KKyAgICBRRXZlbnQmIG5wRXZlbnQg
PSAqKGV2ZW50LT5rZXlFdmVudCgpLT5xdEV2ZW50KCkpOw0KKyAgICBpZiAoIWRpc3BhdGNoTlBF
dmVudChucEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9DQor
DQordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQ0K
K3sNCisgICAgaWYgKG1faXNXaW5kb3dlZCkNCisgICAgICAgIHJldHVybjsNCisNCisgICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAg
IC8vIEdpdmUgZm9jdXMgdG8gdGhlIHBsdWdpbiBvbiBjbGljaworICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLT5zZXRBY3RpdmUodHJ1ZSk7CisKKyAgICAgICAgZm9jdXNQbHVnaW5FbGVtZW50
KCk7CisgICAgfQorDQorICAgIFFFdmVudDo6VHlwZSB0eXBlOw0KKyAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpDQorICAgICAgICB0eXBlID0gUUV2
ZW50OjpNb3VzZUJ1dHRvblByZXNzOw0KKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkNCisgICAgICAgIHR5cGUgPSBRRXZlbnQ6Ok1vdXNl
TW92ZTsNCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1
cEV2ZW50KQ0KKyAgICAgICAgdHlwZSA9IFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlOw0KKyAg
ICBlbHNlDQorICAgICAgICByZXR1cm47DQorDQorICAgIFFQb2ludCBwb3NpdGlvbihldmVudC0+
b2Zmc2V0WCgpLCBldmVudC0+b2Zmc2V0WSgpKTsNCisgICAgUXQ6Ok1vdXNlQnV0dG9uIGJ1dHRv
bjsNCisgICAgc3dpdGNoIChldmVudC0+d2hpY2goKSkgew0KKyAgICBjYXNlIDE6DQorICAgICAg
ICBidXR0b24gPSBRdDo6TGVmdEJ1dHRvbjsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIDI6
DQorICAgICAgICBidXR0b24gPSBRdDo6TWlkQnV0dG9uOw0KKyAgICAgICAgYnJlYWs7DQorICAg
IGNhc2UgMzoNCisgICAgICAgIGJ1dHRvbiA9IFF0OjpSaWdodEJ1dHRvbjsNCisgICAgICAgIGJy
ZWFrOw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgYnV0dG9uID0gUXQ6Ok5vQnV0dG9uOw0KKyAg
ICB9DQorICAgIFF0OjpLZXlib2FyZE1vZGlmaWVycyBtb2RpZmllcnMgPSAwOw0KKyAgICBpZiAo
ZXZlbnQtPmN0cmxLZXkoKSkNCisgICAgICAgIG1vZGlmaWVycyB8PSBRdDo6Q29udHJvbE1vZGlm
aWVyOw0KKyAgICBpZiAoZXZlbnQtPmFsdEtleSgpKQ0KKyAgICAgICAgbW9kaWZpZXJzIHw9IFF0
OjpBbHRNb2RpZmllcjsNCisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQ0KKyAgICAgICAgbW9k
aWZpZXJzIHw9IFF0OjpTaGlmdE1vZGlmaWVyOw0KKyAgICBpZiAoZXZlbnQtPm1ldGFLZXkoKSkN
CisgICAgICAgIG1vZGlmaWVycyB8PSBRdDo6TWV0YU1vZGlmaWVyOw0KKyAgICBRTW91c2VFdmVu
dCBtb3VzZUV2ZW50KHR5cGUsIHBvc2l0aW9uLCBidXR0b24sIGJ1dHRvbiwgbW9kaWZpZXJzKTsg
DQorICAgIFFFdmVudCYgbnBFdmVudCA9IG1vdXNlRXZlbnQ7DQorICAgIGlmICghZGlzcGF0Y2hO
UEV2ZW50KG5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30N
CisNCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpDQorew0K
KyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOw0KKw0KKyAgICBpZiAocGFyZW50KQ0KKyAg
ICAgICAgaW5pdCgpOw0KK30NCisNCit2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChj
b25zdCBJbnRSZWN0JikNCit7DQorICAgIGlmICghbV9pc1dpbmRvd2VkKQorICAgICAgICBzZXRO
UFdpbmRvd0lmTmVlZGVkKCk7Cit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lm
TmVlZGVkKCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8ICFwYXJlbnQoKSB8fCAhbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykKKyAgICAgICAgcmV0dXJuOw0KKyAgICBpZiAo
bV9pc1dpbmRvd2VkKSB7DQorICAgICAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7
CisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldEdlb21ldHJ5KG1fd2luZG93UmVj
dCk7CisgICAgICAgIC8vIGlmIHNldE1hc2sgaXMgc2V0IHdpdGggYW4gZW1wdHkgUVJlZ2lvbiwg
bm8gY2xpcHBpbmcgd2lsbAorICAgICAgICAvLyBiZSBwZXJmb3JtZWQsIHNvIGluIHRoYXQgY2Fz
ZSB3ZSBoaWRlIHRoZSBwbHVnaW4gdmlldworICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LT5zZXRWaXNpYmxlKCFtX2NsaXBSZWN0LmlzRW1wdHkoKSk7CisgICAgICAgIHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCktPnNldE1hc2soUVJlZ2lvbihtX2NsaXBSZWN0KSk7CisNCisgICAgICAgIG1f
bnBXaW5kb3cueCA9IG1fd2luZG93UmVjdC54KCk7CisgICAgICAgIG1fbnBXaW5kb3cueSA9IG1f
d2luZG93UmVjdC55KCk7CisNCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1f
Y2xpcFJlY3QueCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IG1fY2xpcFJl
Y3QueSgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9jbGlwUmVjdC53
aWR0aCgpOw0KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX2NsaXBSZWN0
LmhlaWdodCgpOw0KKyAgICANCisgICAgfSBlbHNlIHsNCisgICAgICAgIC8vIGFsd2F5cyBjYWxs
IHRoaXMgbWV0aG9kIGJlZm9yZSBwYWludGluZy4NCisgICAgICAgIG1fbnBXaW5kb3cueCA9IDA7
DQorICAgICAgICBtX25wV2luZG93LnkgPSAwOw0KKyAgICANCisgICAgICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QubGVmdCA9IDA7DQorICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7
DQorICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV93aW5kb3dSZWN0LndpZHRo
KCk7DQorICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fd2luZG93UmVjdC5o
ZWlnaHQoKTsNCisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsNCisgICAgfQ0KKw0KKyAg
ICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0LndpZHRoKCk7DQorICAgIG1fbnBXaW5k
b3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOw0KKyAgICBpZiAobV9ucFdpbmRvdy54
IDwgMCB8fCBtX25wV2luZG93LnkgPCAwIHx8IG1fbnBXaW5kb3cud2lkdGggPD0gMCB8fCBtX25w
V2luZG93LmhlaWdodCA8PSAwKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICANCisgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7DQorICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBz
ZXRDYWxsaW5nUGx1Z2luKHRydWUpOw0KKyAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0
d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsNCisgICAgc2V0Q2FsbGluZ1BsdWdpbihm
YWxzZSk7DQorICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOw0KK30NCisN
Cit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudFZpc2libGUoYm9vbCB2aXNpYmxlKQ0KK3sNCisg
ICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpDQorICAgICAgICByZXR1cm47DQor
DQorICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsNCisNCisgICAgaWYgKGlz
U2VsZlZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQ0KKyAgICAgICAgcGxhdGZv
cm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsNCit9DQorDQorTlBFcnJvciBQ
bHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQz
MiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikNCit7DQorICAgIG5vdEltcGxlbWVudGVkKCk7DQorICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsNCit9DQorDQorTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRW
YWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpDQorew0KKyAgICBM
T0coUGx1Z2lucywgIlBsdWdpblZpZXc6OmdldFZhbHVlU3RhdGljKCVzKSIsIHByZXR0eU5hbWVG
b3JOUE5WYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKKworICAgIHN3aXRjaCAodmFyaWFibGUp
IHsKKyAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6CisgICAgICAgICpzdGF0aWNf
Y2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7CisKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6CisgICAgICAgICpzdGF0aWNf
Y2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsK
KyAgICB9Cit9DQorDQorTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2
YXJpYWJsZSwgdm9pZCogdmFsdWUpDQorew0KKyAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6
OmdldFZhbHVlKCVzKSIsIHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgp
KTsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsNCisgICAgY2FzZSBOUE5WV2luZG93TlBPYmpl
Y3Q6IHsNCisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkNCisgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsNCisNCisgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dT
Y3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0TlBPYmpl
Y3QoKTsNCisNCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRh
aW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3Rz
L3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4NCisgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3Qp
DQorICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsNCisN
CisgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsNCisgICAgICAgICp2ID0gd2luZG93
U2NyaXB0T2JqZWN0Ow0KKyAgICAgICAgICAgIA0KKyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOw0KKyAgICB9DQorDQorICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogew0K
KyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQ0KKyAgICAgICAgICAgIHJldHVybiBO
UEVSUl9HRU5FUklDX0VSUk9SOw0KKw0KKyAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9i
amVjdCA9IDA7DQorDQorICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRh
ZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1Rh
Z05hbWUob2JqZWN0VGFnKSkNCisgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0
aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7DQor
DQorICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFz
IGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4v
bnBydW50aW1lLmh0bWw+DQorICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQ0KKyAgICAg
ICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7DQorDQorICAgICAg
ICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7DQorICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9i
amVjdDsNCisNCisgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsNCisgICAgfSAgICAgICAg
DQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBnZXRWYWx1ZVN0YXRpYyh2YXJpYWJsZSwg
dmFsdWUpOworICAgIH0NCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0KQ0KK3sNCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAg
ICBwbGF0Zm9ybVdpZGdldCgpLT51cGRhdGUocmVjdCk7DQorICAgICAgICByZXR1cm47DQorICAg
IH0NCisgICAgDQorICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyZWN0KTsNCit9
DQorICAgIA0KK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQ0K
K3sNCisgICAgaWYgKG1faXNXaW5kb3dlZCkNCisgICAgICAgIHJldHVybjsNCisgICAgaWYgKCFy
ZWN0KSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxl
ZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7DQorICAgIG1faW52YWxpZFJlY3RzLmFwcGVu
ZChyKTsNCisgICAgaWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0FjdGl2ZSgpKQ0KKyAgICAgICAg
bV9pbnZhbGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDAuMDAxKTsNCit9DQorDQordm9pZCBQbHVn
aW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikNCit7DQorICAgIGlmICht
X2lzV2luZG93ZWQpDQorICAgICAgICByZXR1cm47DQorICAgIA0KKyAgICBpZiAoIXJlZ2lvbikg
DQorICAgICAgICByZXR1cm47DQorICAgIA0KKyAgICBRVmVjdG9yPFFSZWN0PiByZWN0cyA9IHJl
Z2lvbi0+cmVjdHMoKTsNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsr
aSkgew0KKyAgICAgICAgY29uc3QgUVJlY3QmIHFSZWN0ID0gcmVjdHMuYXQoaSk7DQorICAgICAg
ICBtX2ludmFsaWRSZWN0cy5hcHBlbmQocVJlY3QpOw0KKyAgICAgICAgaWYgKCFtX2ludmFsaWRh
dGVUaW1lci5pc0FjdGl2ZSgpKQ0KKyAgICAgICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0YXJ0
T25lU2hvdCgwLjAwMSk7DQorICAgIH0NCit9DQorDQordm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJl
ZHJhdygpDQorew0KKyAgICBpZiAobV9pc1dpbmRvd2VkKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAg
ICBpbnZhbGlkYXRlKCk7DQorfQ0KKw0KK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgp
DQorew0KKwlBU1NFUlQobV9pc1N0YXJ0ZWQpOw0KKyAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1
Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsNCisgICAgDQorICAgIHNob3coKTsNCisNCisg
ICAgaWYgKG1faXNXaW5kb3dlZCkgew0KKyAgICAgICAgUVdlYlBhZ2VDbGllbnQqIGNsaWVudCA9
IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQo
KTsNCisgICAgICAgIC8vIEZJWE1FIHRoaXMgd2lsbCBub3Qgd29yayBmb3IgUUdyYXBoaWNzVmll
dy4NCisgICAgICAgIC8vIEJ1dCB3ZSBjYW5ub3QgdXNlIHdpbklkIGJlY2F1c2UgaXQgd2lsbCBj
cmVhdGUgYSB3aW5kb3cgYW5kIG9uIFM2MCwNCisgICAgICAgIC8vIFFXaWRnZXRzIHNob3VsZCBu
b3QgY3JlYXRlIGEgd2luZG93LiANCisgICAgICAgIFFfQVNTRVJUKHFvYmplY3RfY2FzdDxRV2lk
Z2V0Kj4oY2xpZW50LT5wbHVnaW5QYXJlbnQoKSkpOw0KKyAgICAgICAgc2V0UGxhdGZvcm1XaWRn
ZXQobmV3IFBsdWdpbkNvbnRhaW5lclN5bWJpYW4odGhpcywgDQorICAgICAgICAgICAgcW9iamVj
dF9jYXN0PFFXaWRnZXQqPihjbGllbnQtPnBsdWdpblBhcmVudCgpKSkpOw0KKyAgICAgICAgbV9u
cFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93Ow0KKyAgICAgICAgbV9ucFdpbmRvdy53
aW5kb3cgPSAodm9pZCopcGxhdGZvcm1QbHVnaW5XaWRnZXQoKTsNCisNCisgICAgfSBlbHNlIHsN
CisgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOw0KKyAgICAgICAgbV9ucFdpbmRvdy50eXBl
ID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7DQorICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7
IC8vIE5vdCB1c2VkPworICAgIH0gICAgDQorICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKKyAg
ICANCisgICAgcmV0dXJuIHRydWU7Cit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpwbGF0Zm9ybURl
c3Ryb3koKQ0KK3sNCisgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpDQorICAgICAgICBk
ZWxldGUgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKTsKK30NCisNCit2b2lkIFBsdWdpblZpZXc6Omhh
bHQoKQ0KK3sNCit9DQorDQordm9pZCBQbHVnaW5WaWV3OjpyZXN0YXJ0KCkNCit7DQorfQ0KKw0K
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUNCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvc3ltYmlhbi9Q
bHVnaW5QYWNrYWdlU3ltYmlhbi5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsdWdpbnMv
c3ltYmlhbi9QbHVnaW5QYWNrYWdlU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApDQorKysgV2ViQ29y
ZS9wbHVnaW5zL3N5bWJpYW4vUGx1Z2luUGFja2FnZVN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQ0K
QEAgLTAsMCArMSwxNzcgQEANCisvKg0KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpDQorDQorICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMNCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyDQorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VDQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsDQorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KKyovDQor
I2luY2x1ZGUgImNvbmZpZy5oIg0KKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiDQorDQorI2lu
Y2x1ZGUgIkNTdHJpbmcuaCINCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIg0KKyNpbmNs
dWRlICJucGludGVyZmFjZS5oIg0KKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIg0KKyNpbmNs
dWRlICJQbHVnaW5EYXRhYmFzZS5oIg0KKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIg0KKyNpbmNs
dWRlIDxRUGx1Z2luTG9hZGVyPg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCitib29sIFBs
dWdpblBhY2thZ2U6OmZldGNoSW5mbygpDQorew0KKyAgICBpZiAoIWxvYWQoKSkNCisgICAgICAg
IHJldHVybiBmYWxzZTsNCisNCisgICAgY2hhciogYnVmID0gMDsNCisgICAgTlBFcnJvciBlcnIg
PSBtX3BsdWdpbkZ1bmNzLmdldHZhbHVlKDAsIE5QUFZwbHVnaW5OYW1lU3RyaW5nLCAodm9pZCAq
KSZidWYpOw0KKyAgICBtX25hbWUgPSBidWY7DQorICAgIGVyciA9IG1fcGx1Z2luRnVuY3MuZ2V0
dmFsdWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCAodm9pZCAqKSZidWYpOw0KKyAg
ICBtX2Rlc2NyaXB0aW9uID0gYnVmOw0KKw0KKyAgICBkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJv
bURlc2NyaXB0aW9uKCk7DQorDQorICAgIFN0cmluZyBzID0gbV9ucEludGVyZmFjZS0+TlBfR2V0
TUlNRURlc2NyaXB0aW9uKCk7DQorICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOw0KKyAgICBzLnNw
bGl0KFVDaGFyKCd8JyksIGZhbHNlLCB0eXBlcyk7ICAvLyA8TUlNRTE+OzxleHQxLGV4dDIsZXh0
MywuLi4+OzxEZXNjcmlwdGlvbj58PE1JTUUyPnw8TUlNRTM+fC4uLg0KKw0KKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgKytpKSB7DQorICAgICAgICBWZWN0b3I8U3RyaW5n
PiBtaW1lOw0KKyAgICAgICAgdHlwZXNbaV0uc3BsaXQoVUNoYXIoJzsnKSwgdHJ1ZSwgbWltZSk7
ICAvLyA8TUlNRTE+OzxleHQxLGV4dDIsZXh0MywuLi4+OzxEZXNjcmlwdGlvbj4NCisgICAgICAg
IGlmIChtaW1lLnNpemUoKSA+IDApIHsNCisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRz
Ow0KKyAgICAgICAgICAgIGlmIChtaW1lLnNpemUoKSA+IDEpDQorICAgICAgICAgICAgICAgIG1p
bWVbMV0uc3BsaXQoVUNoYXIoJywnKSwgZmFsc2UsIGV4dHMpOyAvLyA8ZXh0MSxleHQyLGV4dDMs
Li4uPg0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQo
bWltZVswXSwgZXh0cyk7IC8vIDxNSU1FPiw8ZXh0MSxleHQyLGV4dDM+DQorICAgICAgICAgICAg
aWYgKG1pbWUuc2l6ZSgpID4gMikNCisgICAgICAgICAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlv
bnMuYWRkKG1pbWVbMF0sIG1pbWVbMl0pOyAvLyA8TUlNRT4sPERlc2NyaXB0aW9uPg0KKyAgICAg
ICAgfQ0KKyAgICB9DQorICAgIHVubG9hZCgpOw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQor
Ym9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkNCit7DQorICAgIGlmIChtX2lzTG9hZGVkKSB7DQor
ICAgICAgICBtX2xvYWRDb3VudCsrOw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisN
CisgICAgbV9wbHVnaW5Mb2FkZXIgPSBuZXcgUVBsdWdpbkxvYWRlcihtX3BhdGgpOw0KKyAgICBp
ZiAoIW1fcGx1Z2luTG9hZGVyLT5sb2FkKCkpIHsNCisgICAgICAgIGRlbGV0ZSBtX3BsdWdpbkxv
YWRlcjsNCisgICAgICAgIG1fcGx1Z2luTG9hZGVyID0gMDsNCisgICAgICAgIHJldHVybiBmYWxz
ZTsNCisgICAgfQ0KKw0KKyAgICBRT2JqZWN0KiBwbHVnaW4gPSBtX3BsdWdpbkxvYWRlci0+aW5z
dGFuY2UoKTsNCisgICAgaWYgKCFwbHVnaW4pIHsNCisgICAgICAgIG1fcGx1Z2luTG9hZGVyLT51
bmxvYWQoKTsNCisgICAgICAgIGRlbGV0ZSBtX3BsdWdpbkxvYWRlcjsNCisgICAgICAgIG1fcGx1
Z2luTG9hZGVyID0gMDsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICAv
LyBQbHVnaW4gaW5zdGFuY2UgY3JlYXRlZA0KKyAgICAvLyBDYXN0IHBsdWdpbiB0byBOUEludGVy
ZmFjZSwNCisgICAgbV9ucEludGVyZmFjZSA9IHFvYmplY3RfY2FzdDxOUEludGVyZmFjZSo+KHBs
dWdpbik7DQorICAgIGlmICghbV9ucEludGVyZmFjZSkgew0KKyAgICAgICAgbV9wbHVnaW5Mb2Fk
ZXItPnVubG9hZCgpOw0KKyAgICAgICAgZGVsZXRlIG1fcGx1Z2luTG9hZGVyOw0KKyAgICAgICAg
bV9wbHVnaW5Mb2FkZXIgPSAwOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQor
ICAgIG1faXNMb2FkZWQgPSB0cnVlOw0KKyAgICANCisgICAgTlBFcnJvciBucEVycjsNCisgICAg
bWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOw0KKyAgICBt
X3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7DQorICAgIG1fYnJvd3Nl
ckZ1bmNzLnNpemUgPSBzaXplb2YobV9icm93c2VyRnVuY3MpOw0KKyAgICBtX2Jyb3dzZXJGdW5j
cy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5PUjsNCisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJs
ID0gTlBOX0dldFVSTDsNCisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJM
Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsNCisg
ICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsNCisgICAgbV9icm93
c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7DQorICAgIG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lz
dHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsNCisgICAgbV9icm93c2VyRnVuY3Muc3RhdHVzID0g
TlBOX1N0YXR1czsNCisgICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsN
CisgICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7DQorICAgIG1fYnJv
d3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsNCisgICAgbV9icm93c2VyRnVuY3MubWVt
Zmx1c2ggPSBOUE5fTWVtRmx1c2g7DQorICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMg
PSBOUE5fUmVsb2FkUGx1Z2luczsNCisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0g
TlBOX0dldFVSTE5vdGlmeTsNCisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5Q
Tl9Qb3N0VVJMTm90aWZ5Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRW
YWx1ZTsNCisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7DQorICAg
IG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0Ow0KKyAg
ICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247
DQorICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3Ow0KKyAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7DQorICAgIG1fYnJv
d3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOw0KKyAgICBtX2Jyb3dzZXJG
dW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7
DQorICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1
cHNFbmFibGVkU3RhdGU7DQorICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50dmFsdWUg
PSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7DQorICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmlu
Z2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7DQorICAgIG1fYnJvd3NlckZ1
bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsNCisg
ICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0SW50SWRlbnRpZmll
cjsNCisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlm
aWVySXNTdHJpbmc7DQorICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9O
UE5fVVRGOEZyb21JZGVudGlmaWVyOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3Qg
PSBfTlBOX0NyZWF0ZU9iamVjdDsNCisgICAgbV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0ID0g
X05QTl9SZXRhaW5PYmplY3Q7DQorICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBf
TlBOX1JlbGVhc2VPYmplY3Q7DQorICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9IF9OUE5fSW52
b2tlOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZh
dWx0Ow0KKyAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7DQorICAg
IG1fYnJvd3NlckZ1bmNzLmdldHByb3BlcnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsNCisgICAgbV9i
cm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5Ow0KKyAgICBtX2Jyb3dz
ZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7DQorICAgIG1fYnJv
d3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05QTl9IYXNNZXRob2Q7DQorICAgIG1fYnJvd3NlckZ1
bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7DQorICAgIG1fYnJvd3NlckZ1bmNzLnNl
dGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOw0KKyAgICBtX2Jyb3dzZXJGdW5jcy5lbnVt
ZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsNCisgICAgbV9icm93c2VyRnVuY3MuY29uc3RydWN0ID0g
X05QTl9Db25zdHJ1Y3Q7DQorDQorICAgIG5wRXJyID0gbV9ucEludGVyZmFjZS0+TlBfSW5pdGlh
bGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNzKTsNCisgICAgaWYgKG5wRXJyICE9
IE5QRVJSX05PX0VSUk9SKSB7DQorICAgICAgICBtX3BsdWdpbkxvYWRlci0+dW5sb2FkKCk7DQor
ICAgICAgICBkZWxldGUgbV9wbHVnaW5Mb2FkZXI7DQorICAgICAgICBtX3BsdWdpbkxvYWRlciA9
IDA7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgbV9sb2FkQ291bnQr
KzsNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK3ZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2Fk
KCkNCit7DQorICAgIGlmICghbV9pc0xvYWRlZCkNCisgICAgICAgIHJldHVybjsNCisNCisgICAg
aWYgKC0tbV9sb2FkQ291bnQgPiAwKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgDQorICAg
IG1faXNMb2FkZWQgPSBmYWxzZTsNCisgICAgbV9ucEludGVyZmFjZS0+TlBfU2h1dGRvd24oKTsN
CisNCisgICAgbV9wbHVnaW5Mb2FkZXItPnVubG9hZCgpOw0KKyAgICBkZWxldGUgbV9wbHVnaW5M
b2FkZXI7DQorICAgIG1fcGx1Z2luTG9hZGVyID0gMDsNCit9DQorfQ0KKw0KSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5wcm8NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZp
c2lvbiA0OTU1NykNCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpDQpAQCAt
MTY0LDcgKzE2NCw3IEBADQogCiAjIE5lc2NhcGUgcGx1Z2lucyBzdXBwb3J0IChOUEFQSSkKICFj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0uKSB7Ci0gICAgdW5p
eHx3aW4zMi0qOiFlbWJlZGRlZDohd2luY2UqOiFzeW1iaWFuIHsKKyAgICB1bml4fHdpbjMyLSo6
IWVtYmVkZGVkOiF3aW5jZSo6IHsKICAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfTkVUU0NBUEVf
UExVR0lOX0FQST0xCiAgICAgfSBlbHNlIHsKICAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfTkVU
U0NBUEVfUExVR0lOX0FQST0wCkBAIC0yNDU3LDQ0ICsyNDU3LDYxIEBADQogCiAgICAgU09VUkNF
UyArPSBwbHVnaW5zL25wYXBpLmNwcAogCi0gICAgdW5peCB7Ci0gICAgICAgIG1hYyB7Ci0gICAg
ICAgICAgICBTT1VSQ0VTICs9IFwKLSAgICAgICAgICAgICAgICBwbHVnaW5zL21hYy9QbHVnaW5Q
YWNrYWdlTWFjLmNwcCBcCi0gICAgICAgICAgICAgICAgcGx1Z2lucy9tYWMvUGx1Z2luVmlld01h
Yy5jcHAKLSAgICAgICAgICAgIE9CSkVDVElWRV9TT1VSQ0VTICs9IFwKLSAgICAgICAgICAgICAg
ICBwbGF0Zm9ybS90ZXh0L21hYy9TdHJpbmdJbXBsTWFjLm1tIFwKLSAgICAgICAgICAgICAgICBw
bGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLm1tCi0gICAgICAgICAgICBJTkNMVURF
UEFUSCArPSBwbGF0Zm9ybS9tYWMKLSAgICAgICAgICAgICMgTm90ZTogWFBfTUFDT1NYIGlzIGRl
ZmluZWQgaW4gbnBhcGkuaAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgIWVtYmVkZGVk
OiBDT05GSUcgKz0geDExCi0gICAgICAgICAgICBTT1VSQ0VTICs9IFwKLSAgICAgICAgICAgICAg
ICBwbHVnaW5zL3F0L1BsdWdpbkNvbnRhaW5lclF0LmNwcCBcCi0gICAgICAgICAgICAgICAgcGx1
Z2lucy9xdC9QbHVnaW5QYWNrYWdlUXQuY3BwIFwKLSAgICAgICAgICAgICAgICBwbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHAKLSAgICAgICAgICAgIEhFQURFUlMgKz0gXAotICAgICAgICAgICAg
ICAgIHBsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuaAotICAgICAgICAgICAgREVGSU5FUyAr
PSBYUF9VTklYCi0gICAgICAgIH0KLSAgICB9CisgICAgc3ltYmlhbiB7CisgICAgICAgIFNPVVJD
RVMgKz0gXAorICAgICAgICBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luUGFja2FnZVN5bWJpYW4uY3Bw
IFwKKyAgICAgICAgcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkRhdGFiYXNlU3ltYmlhbi5jcHAgXAor
ICAgICAgICBwbHVnaW5zL3N5bWJpYW4vUGx1Z2luVmlld1N5bWJpYW4uY3BwIFwKKyAgICAgICAg
cGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJpYW4uY3BwCiAKLSAgICB3aW4zMi0q
IHsKLSAgICAgICAgSU5DTFVERVBBVEggKz0gJCRQV0QvcGx1Z2lucy93aW4KKyAgICAgICAgSEVB
REVSUyArPSBcCisgICAgICAgIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250YWluZXJTeW1iaWFu
LmggXAorICAgICAgICBwbHVnaW5zL3N5bWJpYW4vbnBpbnRlcmZhY2UuaAogCi0gICAgICAgIFNP
VVJDRVMgKz0gcGFnZS93aW4vUGFnZVdpbi5jcHAgXAotICAgICAgICAgICAgICAgICAgIHBsdWdp
bnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcCBcCi0gICAgICAgICAgICAgICAgICAgcGx1Z2lu
cy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAgXAotICAgICAgICAgICAgICAgICAgIHBsdWdpbnMv
d2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIFwKLSAgICAgICAgICAgICAgICAgICBw
bHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAorICAgICAgICBMSUJTICs9IC1sZWZzcnYKIAot
ICAgICAgICBMSUJTICs9IFwKLSAgICAgICAgICAgIC1sYWR2YXBpMzIgXAotICAgICAgICAgICAg
LWxnZGkzMiBcCi0gICAgICAgICAgICAtbHNoZWxsMzIgXAotICAgICAgICAgICAgLWxzaGx3YXBp
IFwKLSAgICAgICAgICAgIC1sdXNlcjMyIFwKLSAgICAgICAgICAgIC1sdmVyc2lvbgorICAgIH0g
ZWxzZSB7CisKKyAgICAgICAgdW5peCB7CisgICAgCisgICAgICAgICAgICBtYWMgeworICAgICAg
ICAgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgICAgICAgICBwbHVnaW5zL21hYy9Q
bHVnaW5QYWNrYWdlTWFjLmNwcCBcCisgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvbWFjL1Bs
dWdpblZpZXdNYWMuY3BwCisgICAgICAgICAgICAgICAgT0JKRUNUSVZFX1NPVVJDRVMgKz0gXAor
ICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS90ZXh0L21hYy9TdHJpbmdJbXBsTWFjLm1tIFwK
KyAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5t
bQorICAgICAgICAgICAgICAgIElOQ0xVREVQQVRIICs9IHBsYXRmb3JtL21hYworICAgICAgICAg
ICAgICAgICMgTm90ZTogWFBfTUFDT1NYIGlzIGRlZmluZWQgaW4gbnBhcGkuaAorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAhZW1iZWRkZWQ6IENPTkZJRyArPSB4MTEKKyAg
ICAgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy9x
dC9QbHVnaW5Db250YWluZXJRdC5jcHAgXAorICAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3F0
L1BsdWdpblBhY2thZ2VRdC5jcHAgXAorICAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3F0L1Bs
dWdpblZpZXdRdC5jcHAKKyAgICAgICAgICAgICAgICBIRUFERVJTICs9IFwKKyAgICAgICAgICAg
ICAgICAgICAgcGx1Z2lucy9xdC9QbHVnaW5Db250YWluZXJRdC5oCisgICAgICAgICAgICAgICAg
REVGSU5FUyArPSBYUF9VTklYCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAg
ICAgd2luMzItKiB7CisgICAgICAgICAgICBJTkNMVURFUEFUSCArPSAkJFBXRC9wbHVnaW5zL3dp
bgorICAgIAorICAgICAgICAgICAgU09VUkNFUyArPSBwYWdlL3dpbi9QYWdlV2luLmNwcCBcCisg
ICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcCBc
CisgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3Bw
IFwKKyAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbi5jcHAgXAorICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dpbi9QbHVnaW5W
aWV3V2luLmNwcAorICAgIAorICAgICAgICAgICAgTElCUyArPSBcCisgICAgICAgICAgICAgICAg
LWxhZHZhcGkzMiBcCisgICAgICAgICAgICAgICAgLWxnZGkzMiBcCisgICAgICAgICAgICAgICAg
LWxzaGVsbDMyIFwKKyAgICAgICAgICAgICAgICAtbHNobHdhcGkgXAorICAgICAgICAgICAgICAg
IC1sdXNlcjMyIFwKKyAgICAgICAgICAgICAgICAtbHZlcnNpb24KKyAgICAgICAgfQogICAgIH0K
IAogfSBlbHNlIHsKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ5NTU3KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpDQpAQCAtMSwzICsxLDQ1IEBADQorMjAwOS0xMC0xMCAgWWFlbCBBaGFyb24g
IDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CisgCisgICAgICAgIFJldmlld2VkIGJ5IAorIAorICAg
ICAgICBFbmFibGluZyBOUEFQSSBwbHVnaW4gc3VwcG9ydCBvbiBRdCBXZWJraXQgZm9yIFM2MCBw
bGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjkzMDIKKworICAgICAgICBBbHNvIGltcGxlbWVudGVkIGJ5IE1haGVzaCBLdWxrYXJuaTxtYWhl
c2gua3Vsa2FybmlAbm9raWEuY29tPiwgCisgICAgICAgIFJvaGluaSBBbmFudGggPHJvaGluaS5h
bmFudGhAbm9raWEuY29tPiBhbmQgaGVscCBmcm9tIE5vcmJlcnQgTGVzcgorICAgICAgICA8bm9y
YmVydC5sZXNlckBub2tpYS5jb20+CisgICAgICAgICAKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgRW5hYmxpbmcgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkgZm9yIFM2MCBhbmQg
YWRkZWQgUzYwIHNwZWNpZmljIAorICAgICAgICBuZXcgcGx1Z2luIGZpbGVzIHRvIGJlIGNvbXBp
bGVkIHVuZGVyIHN5bWJpYW46IG1hY3JvCisKKyAgICAgICAgKiBicmlkZ2UvbnBhcGkuaDoKKyAg
ICAgICAgQWRkZWQgTlBFdmVudCBhbmQgTlBSZWdpb24gZGVmaW5pdGlvbiBmb3IgU3ltYmlhbgor
CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmg6CisgICAgICAgIEFkZGVkIFM2MCBz
cGVjaWZpYyBwbHVnaW4gaW50ZXJmYWNlIGFuZCBwbHVnaW4gbG9hZGVyIHZhcmlhYmxlcworICAg
ICAgICAqIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5QYWNrYWdlOjp1bmxvYWQpOiBBZGRlZCAhUExBVEZPUk0oU1lNQklBTikgbWFjcm8uCisgICAg
ICAgIERlZmF1bHQgaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZCBvbmx5IGZvciBub24tc3ltYmlh
biBwbGF0Zm9ybQorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwOgorICAgICAg
ICBNYWNybyAhU1lNQklBTiBjaGVja2luZworICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5o
OgorICAgICAgICBBZGQgU3ltYmlhbiB0byBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHNldE5QV2lu
ZG93SWZOZWVkZWQKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0RnJhbWVSZWN0KTogQWRkIFN5bWJpYW4gdG8gcGxhdGZv
cm1zIHRoYXQKKyAgICAgICAgY2FsbCBzZXROUFdpbmRvd1JlY3QgZnJvbSBzZXRGcmFtZVJlY3QK
KyAgICAgICAgIAorICAgICAgICBBZGRlZCBmb2xkZXIgJ3N5bWJpYW4nIHdoaWNoIGNvbnRhaW5z
IGltcGxlbWVudGF0aW9uIGZpbGVzIGZvciBTNjAKKyAgICAgICAgcGxhdGZvcm0tc3BlY2lmaWMg
TlBBUEkgcGx1Z2luIGZ1bmN0aW9uYWxpdHksIHVuZGVyIC9wbHVnaW5zIGZvbGRlcgorICAgICAg
ICAqIHBsdWdpbnMvc3ltYmlhbgorICAgICAgICAqIHBsdWdpbnMvc3ltYmlhbi9ucGludGVyZmFj
ZS5oOgorICAgICAgICBQbHVnaW4gSW50ZXJmYWNlIHRvIGJlIGltcGxlbWVudGVkIGJ5IFM2MCBO
UEFQSSBwbHVnaW5zIAorICAgICAgICAqIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5Db250YWluZXJT
eW1iaWFuLmg6CisgICAgICAgICogcGx1Z2lucy9zeW1iaWFuL1BsdWdpbkNvbnRhaW5lclN5bWJp
YW4uY3BwOgorICAgICAgICAqIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5EYXRhYmFzZVN5bWJpYW4u
Y3BwOgorICAgICAgICAqIHBsdWdpbnMvc3ltYmlhbi9QbHVnaW5WaWV3U3ltYmlhbi5jcHA6Cisg
ICAgICAgICogcGx1Z2lucy9zeW1iaWFuL1BsdWdpblBhY2thZ2VTeW1iaWFuLmNwcDoKKwogMjAw
OS0xMC0xMyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogV2ViQ29yZS9icmlkZ2UvbnBhcGku
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvYnJpZGdlL25wYXBpLmgJKHJldmlzaW9uIDQ5NTU3
KQ0KKysrIFdlYkNvcmUvYnJpZGdlL25wYXBpLmgJKHdvcmtpbmcgY29weSkNCkBAIC0xMDYsNiAr
MTA2LDExIEBADQogICAgICNpbmNsdWRlIDxzdGRpby5oPgogI2VuZGlmCiAKKyNpZiBkZWZpbmVk
KFhQX1NZTUJJQU4pCisgICAgI2luY2x1ZGUgPFFFdmVudD4KKyAgICAjaW5jbHVkZSA8UVJlZ2lv
bj4KKyNlbmRpZgorCiAjaWZkZWYgWFBfV0lOCiAgICAgI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNl
bmRpZgpAQCAtNTI2LDkgKzUzMSw5IEBADQogICAgIHVpbnQzMiAgICBoZWlnaHQ7CiAgICAgTlBS
ZWN0ICAgIGNsaXBSZWN0OyAgICAvKiBDbGlwcGluZyByZWN0YW5nbGUgaW4gcG9ydCBjb29yZGlu
YXRlcyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlZCBieSBNQUMgb25seS4gICAg
ICAgICAgICAgICovCi0jaWZkZWYgWFBfVU5JWAorI2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgZGVm
aW5lZChYUF9TWU1CSUFOKQogICAgIHZvaWQgKiAgICB3c19pbmZvOyAgICAvKiBQbGF0Zm9ybS1k
ZXBlbmRlbnQgYWRkaXRvbmFsIGRhdGEgKi8KLSNlbmRpZiAvKiBYUF9VTklYICovCisjZW5kaWYg
LyogWFBfVU5JWCB8fCBYUF9TWU1CSUFOICovCiAgICAgTlBXaW5kb3dUeXBlIHR5cGU7ICAgIC8q
IElzIHRoaXMgYSB3aW5kb3cgb3IgYSBkcmF3YWJsZT8gKi8KIH0gTlBXaW5kb3c7CiAKQEAgLTU3
OCw2ICs1ODMsOCBAQA0KIHR5cGVkZWYgRXZlbnRSZWNvcmQgICAgTlBFdmVudDsKICNlbmRpZgog
CisjZWxpZiBkZWZpbmVkKFhQX1NZTUJJQU4pCit0eXBlZGVmIFFFdmVudCBOUEV2ZW50OwogI2Vs
aWYgZGVmaW5lZChYUF9XSU4pCiB0eXBlZGVmIHN0cnVjdCBfTlBFdmVudAogewpAQCAtNjA4LDYg
KzYxNSw4IEBADQogdHlwZWRlZiBIUkdOIE5QUmVnaW9uOwogI2VsaWYgZGVmaW5lZChYUF9VTklY
KQogdHlwZWRlZiBSZWdpb24gTlBSZWdpb247CisjZWxpZiBkZWZpbmVkKFhQX1NZTUJJQU4pCit0
eXBlZGVmIFFSZWdpb24qIE5QUmVnaW9uOwogI2Vsc2UKIHR5cGVkZWYgdm9pZCAqTlBSZWdpb247
CiAjZW5kaWYgLyogWFBfTUFDICovCg==
</data>
<flag name="review"
          id="22498"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
      

    </bug>

</bugzilla>